<?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>150280</bug_id>
          
          <creation_ts>2015-10-17 11:22:42 -0700</creation_ts>
          <short_desc>Create a super rough prototype of B3</short_desc>
          <delta_ts>2015-10-28 17:19:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>150411</dependson>
          <blocked>150279</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>lforschler</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1134204</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-17 11:22:42 -0700</bug_when>
    <thetext>Yay.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134205</commentid>
    <comment_count>1</comment_count>
      <attachid>263377</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-17 11:23:07 -0700</bug_when>
    <thetext>Created attachment 263377
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134206</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-17 11:23:37 -0700</bug_when>
    <thetext>This can land once it has enough things to do an end-to-end compile of the empty procedure.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134279</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-17 17:55:51 -0700</bug_when>
    <thetext>I just got an idea about how to handle constants, and wanted to write it down.

Here are our options for how to handle constants, assuming that B3IR places constant values inside control flow and then LICMs and GVNs them.

1) Let the register allocator treat Tmps that happened to come into existence because of constants as just normal Tmps.  They may get spilled.  After register allocation, run constant propagation through stores and loads to stack slots.  This will effectively cause rematerialization.

2) Have LowerB3ToAir choose registers for the tag constants, and sink all other constants to their blocks.

3) Have a late B3IR phase that sinks constants.  I&apos;d prefer an approach that special-cases a hard limit on hoistable constants and then marks those Values that contain hoisted constants as &quot;must allocate&quot; for the register allocator.  All other constants are sunk to the blocks that use them.

4) Have floating constants in Air and require the register allocator in figure it out.  This would make sense if the register allocator did live range splitting.  I&apos;m not sure I like this approach.

5) Here&apos;s a possible approach that I just thought of, and I don&apos;t know yet if it makes sense.  Do maximal constant sinking.  Then, have an Air constant propagator that eliminates instructions that materialize a constant if that constant is already available in some register.

6) Similar to above, but a different way of thinking about it. Let constants float in Air.  Register allocator treats this like a use of a register at the point of use of the constant.  Like if we have:

store $hugeConst, (%temp)

Then the register allocator sees it as if it was:

mov $hugeConst, %constTemp
store %constTemp, (%temp)

It assigns registers to the %constTemp&apos;s - i.e. to the &quot;edges&quot; between operations and the constants they use. Then, after doing register allocation, we can construct the constant materializations via forward flow. At each use of a %constTemp, we create the most efficient instruction possible by looking at what kinds of registers we have in constants. Any constant materialization - either one that we created or one that happened to be in the code already - causes us to know that henceforth, that register has that constant. We can abstractly interpret the Air code and clobber registers appropriately. So, we can optimize the %constTemp use to an add instruction if there is a nearby constant. Or, because the %constTemp&apos;s register use is only valid at the instant in time at the start of execution of the instruction that uses it, we can ignore the register allocator&apos;s choice of register and replace it with the use of a register that already has that constant.  For example, we may have:

1: store $hugeConst, (%temp)
2: store $hugeConst, (%temp2)

This implicitly has %constTemp1 and %constTemp2.  The register allocator may assign some registers to these.  Lets say that it does %constTemp1=%rax and %constTemp2=%rsi.  Then, the forward algorithm does this:

For instruction #1: It observes that no register currently contains any constant, so it prepends a “mov $hugeConst, %rax” instruction.  That’s because the register allocator told us that %rax is an appropriate place to put the constant. Then, it’ll transform instruction #1 to use %rax instead of $hugeConst. It will record that %rax contains $hugeConst.

For instruction #2: It observes that %rax already contains $hugeConst. Since the %constTemp2=%rsi register assignment was just a suggestion in case no register contained the constant yet, we just transform instruction #2 to use %rax instead of $hugeConst.

Note that since register allocators are usually deterministic, both %constTemp1 and %constTemp2 would probably get the same register.

The only missing piece here is hoisting constants out of loops. We could have LICM for these constant materializations. If a loop does not contain any other assignment to the register used for a constant materialization and does not clobber the register, then we can move the constant materialization out of the loop.

I think that probably the best solution will be a hybrid of (2) and (6). At least one of the tag values is super critical and we should just pin a callee-save register to it. We could even have a configuration parameter called &quot;number of critical constants&quot;. It will pick that number of hottest constants in the program and materialize them in the prologue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134284</commentid>
    <comment_count>4</comment_count>
      <attachid>263397</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-17 18:20:59 -0700</bug_when>
    <thetext>Created attachment 263397
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134296</commentid>
    <comment_count>5</comment_count>
      <attachid>263403</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-17 19:54:00 -0700</bug_when>
    <thetext>Created attachment 263403
it&apos;s growing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134297</commentid>
    <comment_count>6</comment_count>
      <attachid>263404</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-17 20:31:43 -0700</bug_when>
    <thetext>Created attachment 263404
just a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134311</commentid>
    <comment_count>7</comment_count>
      <attachid>263410</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-17 23:06:45 -0700</bug_when>
    <thetext>Created attachment 263410
no big deal, fleshing out the IR</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134351</commentid>
    <comment_count>8</comment_count>
      <attachid>263425</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-18 12:28:46 -0700</bug_when>
    <thetext>Created attachment 263425
it has stackmaps and patchpoints, sort of</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134353</commentid>
    <comment_count>9</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2015-10-18 12:37:02 -0700</bug_when>
    <thetext>Pardon my ignorance, but what does B3 stand for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134355</commentid>
    <comment_count>10</comment_count>
      <attachid>263427</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-18 13:40:23 -0700</bug_when>
    <thetext>Created attachment 263427
B3 instructions are fleshed out</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134396</commentid>
    <comment_count>11</comment_count>
      <attachid>263432</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-18 16:36:36 -0700</bug_when>
    <thetext>Created attachment 263432
started playing with instruction selection</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134418</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-18 16:54:28 -0700</bug_when>
    <thetext>Been thinking about pattern matching some more.  We want some way of ensuring that if we hoist a BaseIndex expression out of a loop, then inside the loop we don&apos;t match it - we use the generated variable.

We could make this work by having the pattern matcher refuse to match a pattern around something that already has a low-level variable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134430</commentid>
    <comment_count>13</comment_count>
      <attachid>263434</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-18 18:25:21 -0700</bug_when>
    <thetext>Created attachment 263434
writing a pattern matcher</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134438</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-18 20:13:57 -0700</bug_when>
    <thetext>Woohoo!  I have a recursive pattern match generator.  It takes this:

matcher ComparisonMatcher

TestLoadNotZero1 = And(Load(address), right)
TestLoadNotZero2 = And(left, Load(address))
TestNotZero = And(left, right)

TestLoadZero1 = Equal(And(Load(address), right), $0)
TestLoadZero2 = Equal(And(left, Load(address)), $0)
TestZero = Equal(And(left, right), $0)

LoadEqual1 = Equal(Load(address), right)
LoadEqual2 = Equal(left, Load(address))
Not = Equal(value, $0)
Equal = Equal(left, right)

And turns it into this:

// Generated by generate_pattern_matcher.rb from Source/JavaScriptCore/b3/B3ComparisonMatcher.patterns -- do not edit!
#ifndef B3ComparisonMatcher_h
#define B3ComparisonMatcher_h
#include &quot;B3Value.h&quot;
namespace JSC { namespace B3 {
template&lt;typename Adaptor&gt;
void runComparisonMatcher(Value* value, Adaptor&amp; adaptor)
{
    switch (value-&gt;opcode()) {
    case And:
        if (value-&gt;children.size() &gt;= 2) {
            {
                Value* _tmp14 = value-&gt;child(0);
                switch (_tmp14-&gt;opcode()) {
                case Load:
                    if (_tmp14-&gt;children.size() &gt;= 1) {
                        {
                            Value* _tmp15 = _tmp14-&gt;child(0);
                            {
                                Value* _tmp16 = value-&gt;child(1);
                                {
                                    Value* TestLoadNotZero1 = value;
                                    Value* _tmp1 = TestLoadNotZero1-&gt;child(0);
                                    Value* address = _tmp1-&gt;child(0);
                                    Value* right = TestLoadNotZero1-&gt;child(1);
                                    if (adaptor.acceptRoot(value)
                                        &amp;&amp; adaptor.acceptInternals(_tmp1)
                                        &amp;&amp; adaptor.acceptOperands(address, right)
                                        &amp;&amp; adaptor.tryTestLoadNotZero1(address, right))
                                        return;
                                }
                            }
                        }
                    }
                    break;
                default:
                    break;
                }
                {
                    Value* _tmp17 = value-&gt;child(1);
                    switch (_tmp17-&gt;opcode()) {
                    case Load:
                        if (_tmp17-&gt;children.size() &gt;= 1) {
                            {
                                Value* _tmp18 = _tmp17-&gt;child(0);
                                {
                                    Value* TestLoadNotZero2 = value;
                                    Value* left = TestLoadNotZero2-&gt;child(0);
                                    Value* _tmp2 = TestLoadNotZero2-&gt;child(1);
                                    Value* address = _tmp2-&gt;child(0);
                                    if (adaptor.acceptRoot(value)
                                        &amp;&amp; adaptor.acceptInternals(_tmp2)
                                        &amp;&amp; adaptor.acceptOperands(left, address)
                                        &amp;&amp; adaptor.tryTestLoadNotZero2(left, address))
                                        return;
                                }
                            }
                        }
                        break;
                    default:
                        break;
                    }
                    {
                        Value* TestNotZero = value;
                        Value* left = TestNotZero-&gt;child(0);
                        Value* right = TestNotZero-&gt;child(1);
                        if (adaptor.acceptRoot(value)
                            &amp;&amp; adaptor.acceptInternals()
                            &amp;&amp; adaptor.acceptOperands(left, right)
                            &amp;&amp; adaptor.tryTestNotZero(left, right))
                            return;
                    }
                }
            }
        }
        break;
    case Equal:
        if (value-&gt;children.size() &gt;= 2) {
            {
                Value* _tmp19 = value-&gt;child(0);
                switch (_tmp19-&gt;opcode()) {
                case And:
                    if (_tmp19-&gt;children.size() &gt;= 2) {
                        {
                            Value* _tmp20 = _tmp19-&gt;child(0);
                            switch (_tmp20-&gt;opcode()) {
                            case Load:
                                if (_tmp20-&gt;children.size() &gt;= 1) {
                                    {
                                        Value* _tmp21 = _tmp20-&gt;child(0);
                                        {
                                            Value* _tmp22 = _tmp19-&gt;child(1);
                                            {
                                                Value* _tmp23 = value-&gt;child(1);
                                                {
                                                    Value* TestLoadZero1 = value;
                                                    Value* _tmp4 = TestLoadZero1-&gt;child(0);
                                                    Value* _tmp3 = _tmp4-&gt;child(0);
                                                    Value* address = _tmp3-&gt;child(0);
                                                    Value* right = _tmp4-&gt;child(1);
                                                    Value* _tmp5 = TestLoadZero1-&gt;child(1);
                                                    if (_tmp5-&gt;isInt(0)) {
                                                        if (adaptor.acceptRoot(value)
                                                            &amp;&amp; adaptor.acceptInternals(_tmp4, _tmp3)
                                                            &amp;&amp; adaptor.acceptOperands(address, right, _tmp5)
                                                            &amp;&amp; adaptor.tryTestLoadZero1(address, right))
                                                            return;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                }
                                break;
                            default:
                                break;
                            }
                            {
                                Value* _tmp24 = _tmp19-&gt;child(1);
                                switch (_tmp24-&gt;opcode()) {
                                case Load:
                                    if (_tmp24-&gt;children.size() &gt;= 1) {
                                        {
                                            Value* _tmp25 = _tmp24-&gt;child(0);
                                            {
                                                Value* _tmp26 = value-&gt;child(1);
                                                {
                                                    Value* TestLoadZero2 = value;
                                                    Value* _tmp7 = TestLoadZero2-&gt;child(0);
                                                    Value* left = _tmp7-&gt;child(0);
                                                    Value* _tmp6 = _tmp7-&gt;child(1);
                                                    Value* address = _tmp6-&gt;child(0);
                                                    Value* _tmp8 = TestLoadZero2-&gt;child(1);
                                                    if (_tmp8-&gt;isInt(0)) {
                                                        if (adaptor.acceptRoot(value)
                                                            &amp;&amp; adaptor.acceptInternals(_tmp7, _tmp6)
                                                            &amp;&amp; adaptor.acceptOperands(left, address, _tmp8)
                                                            &amp;&amp; adaptor.tryTestLoadZero2(left, address))
                                                            return;
                                                    }
                                                }
                                            }
                                        }
                                    }
                                    break;
                                default:
                                    break;
                                }
                                {
                                    Value* _tmp27 = value-&gt;child(1);
                                    {
                                        Value* TestZero = value;
                                        Value* _tmp9 = TestZero-&gt;child(0);
                                        Value* left = _tmp9-&gt;child(0);
                                        Value* right = _tmp9-&gt;child(1);
                                        Value* _tmp10 = TestZero-&gt;child(1);
                                        if (_tmp10-&gt;isInt(0)) {
                                            if (adaptor.acceptRoot(value)
                                                &amp;&amp; adaptor.acceptInternals(_tmp9)
                                                &amp;&amp; adaptor.acceptOperands(left, right, _tmp10)
                                                &amp;&amp; adaptor.tryTestZero(left, right))
                                                return;
                                        }
                                    }
                                }
                            }
                        }
                    }
                    break;
                case Load:
                    if (_tmp19-&gt;children.size() &gt;= 1) {
                        {
                            Value* _tmp28 = _tmp19-&gt;child(0);
                            {
                                Value* _tmp29 = value-&gt;child(1);
                                {
                                    Value* LoadEqual1 = value;
                                    Value* _tmp11 = LoadEqual1-&gt;child(0);
                                    Value* address = _tmp11-&gt;child(0);
                                    Value* right = LoadEqual1-&gt;child(1);
                                    if (adaptor.acceptRoot(value)
                                        &amp;&amp; adaptor.acceptInternals(_tmp11)
                                        &amp;&amp; adaptor.acceptOperands(address, right)
                                        &amp;&amp; adaptor.tryLoadEqual1(address, right))
                                        return;
                                }
                            }
                        }
                    }
                    break;
                default:
                    break;
                }
                {
                    Value* _tmp30 = value-&gt;child(1);
                    switch (_tmp30-&gt;opcode()) {
                    case Load:
                        if (_tmp30-&gt;children.size() &gt;= 1) {
                            {
                                Value* _tmp31 = _tmp30-&gt;child(0);
                                {
                                    Value* LoadEqual2 = value;
                                    Value* left = LoadEqual2-&gt;child(0);
                                    Value* _tmp12 = LoadEqual2-&gt;child(1);
                                    Value* address = _tmp12-&gt;child(0);
                                    if (adaptor.acceptRoot(value)
                                        &amp;&amp; adaptor.acceptInternals(_tmp12)
                                        &amp;&amp; adaptor.acceptOperands(left, address)
                                        &amp;&amp; adaptor.tryLoadEqual2(left, address))
                                        return;
                                }
                            }
                        }
                        break;
                    default:
                        break;
                    }
                    {
                        Value* Not = value;
                        Value* value = Not-&gt;child(0);
                        Value* _tmp13 = Not-&gt;child(1);
                        if (_tmp13-&gt;isInt(0)) {
                            if (adaptor.acceptRoot(value)
                                &amp;&amp; adaptor.acceptInternals()
                                &amp;&amp; adaptor.acceptOperands(value, _tmp13)
                                &amp;&amp; adaptor.tryNot(value))
                                return;
                        }
                    }
                    {
                        Value* Equal = value;
                        Value* left = Equal-&gt;child(0);
                        Value* right = Equal-&gt;child(1);
                        if (adaptor.acceptRoot(value)
                            &amp;&amp; adaptor.acceptInternals()
                            &amp;&amp; adaptor.acceptOperands(left, right)
                            &amp;&amp; adaptor.tryEqual(left, right))
                            return;
                    }
                }
            }
        }
        break;
    default:
        break;
    }
    RELEASE_ASSERT_NOT_REACHED();
}
} } // namespace JSC::B3
#endif // B3ComparisonMatcher_h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134439</commentid>
    <comment_count>15</comment_count>
      <attachid>263436</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-18 20:16:48 -0700</bug_when>
    <thetext>Created attachment 263436
and now, with a complete pattern match generator

Now we can go nuts with patterns.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134749</commentid>
    <comment_count>16</comment_count>
      <attachid>263528</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-19 17:01:06 -0700</bug_when>
    <thetext>Created attachment 263528
started working on Air

This is pretty awesome - lots of Air functionality is just auto-generated from the AirOpcodes.opcodes spec.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134752</commentid>
    <comment_count>17</comment_count>
      <attachid>263529</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-19 17:02:34 -0700</bug_when>
    <thetext>Created attachment 263529
removed some stuff

Removed my previous attempt at reflective code generation.  Before I started working on Air, I had added this DynamicAddress thing to the assembler.  I won&apos;t be using it, so this version of the patch removes it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134793</commentid>
    <comment_count>18</comment_count>
      <attachid>263546</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-19 20:00:58 -0700</bug_when>
    <thetext>Created attachment 263546
a little more

Added more things to Air.  I think that the IR scaffolding is complete.  Now we&apos;ll have to add all of the instructions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1134804</commentid>
    <comment_count>19</comment_count>
      <attachid>263549</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-19 21:59:56 -0700</bug_when>
    <thetext>Created attachment 263549
a bit more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135008</commentid>
    <comment_count>20</comment_count>
      <attachid>263615</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-20 14:16:18 -0700</bug_when>
    <thetext>Created attachment 263615
cool story for specials</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135029</commentid>
    <comment_count>21</comment_count>
      <attachid>263623</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-20 15:32:25 -0700</bug_when>
    <thetext>Created attachment 263623
just a few little things

Starting to glue Air&apos;s notion of Special to B3&apos;s notion of stackmap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135050</commentid>
    <comment_count>22</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-20 16:39:33 -0700</bug_when>
    <thetext>I&apos;m currently thinking that patterns like &quot;Add(Load(address), value)&quot; should not be listed in the patterns file but instead should arise out of C++ code.  I&apos;ve been playing with pseudocode for how to say this.  Here&apos;s something I was just thinking about for a universal helper for emitting math ops.

Note that we need the opcode_generator to emit isValidForm() methods for this to be efficient.  I&apos;m thinking that we could even templatize them like isValidForm&lt;opcode&gt;(...), and then have the appendOp also be templatized like appendOp&lt;opcode, Commutative&gt;(left, right).  That would be sooooper fast.

void appendInst(const Inst&amp; inst)
{
    ASSERT(inst.isValidForm());
    m_block-&gt;appendInst(inst);
}

template&lt;typename... Arguments&gt;
void append(Opcode opcode, Arguments... arguments)
{
    appendInst(Inst(opcode, m_value, arguments...));
}

Arg addr(Value* value)
{
    // Makes sure that value can be made into an internal value for this pattern, and then can get
    // locked.
}

void appendOp(Air::Opcode opcode, Value* left, Value* right, Commutativity commutativity = NotCommutative)
{
    Tmp result = resultTmp();
    // Three-operand forms like:
    //     Op a, b, c
    // mean something like:
    //     c = a Op b
    if (isValidForm(opcode, Arg::Imm, Arg::Tmp, Arg::Tmp)) {
        if (commutativity == Commutative) {
            if (isImm(right)) {
                append(opcode, imm(right), tmp(left), result);
                return;
            }
        } else {
            // A non-commutative operation could have an immediate in left.
            if (isImm(left)) {
                append(opcode, imm(left), tmp(right), result);
                return;
            }
        }
    }
    if (isImm(right) &amp;&amp; isValidForm(opcode, Arg::Tmp, Arg::Imm, Arg::Tmp)) {
        append(opcode, tmp(left), imm(right), result);
        return;
    }
    if (commutativity == Commutative &amp;&amp; left-&gt;opcode() == Load) {
        Arg leftAddr = addr(left);
        if (isValidForm(opcode, leftAddr.kind(), Arg::Tmp)) {
            append(Move, tmp(right), result);
            append(opcode, leftAddr, result);
            return;
        }
    }
    append(Move, tmp(left), result);
    if (right-&gt;opcode() == Load) {
        Arg rightAddr = addr(right);
        if (isValidForm(opcode, rightAddr.kind(), Arg::Tmp)) {
            append(opcode, rightAddr, result);
            return;
        }
    }
    // Two-operand forms only work when right is an immediate, since we clobber left in place.
    if (isImm(right) &amp;&amp; isValidForm(opcode, Arg::Imm, Arg::Tmp)) {
        append(imm(right), result);
        return;
    }

    append(tmp(right), result);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135051</commentid>
    <comment_count>23</comment_count>
      <attachid>263633</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-20 16:40:31 -0700</bug_when>
    <thetext>Created attachment 263633
latest

I&apos;m thinking about stackmaps so hard right now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135134</commentid>
    <comment_count>24</comment_count>
      <attachid>263661</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-20 22:58:46 -0700</bug_when>
    <thetext>Created attachment 263661
some more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135395</commentid>
    <comment_count>25</comment_count>
      <attachid>263739</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-21 14:29:38 -0700</bug_when>
    <thetext>Created attachment 263739
even more

so much code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135422</commentid>
    <comment_count>26</comment_count>
      <attachid>263746</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-21 15:17:45 -0700</bug_when>
    <thetext>Created attachment 263746
and now, with a maximal spiller</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135514</commentid>
    <comment_count>27</comment_count>
      <attachid>263778</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-21 18:26:05 -0700</bug_when>
    <thetext>Created attachment 263778
and now, with a stack allocator</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135777</commentid>
    <comment_count>28</comment_count>
      <attachid>263845</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-22 12:41:02 -0700</bug_when>
    <thetext>Created attachment 263845
air is done, maybe?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135863</commentid>
    <comment_count>29</comment_count>
      <attachid>263871</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-22 15:10:16 -0700</bug_when>
    <thetext>Created attachment 263871
adding code layout support</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135897</commentid>
    <comment_count>30</comment_count>
      <attachid>263878</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-22 16:47:45 -0700</bug_when>
    <thetext>Created attachment 263878
started working on B3LowerToAir

I&apos;m getting so close!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135900</commentid>
    <comment_count>31</comment_count>
      <attachid>263845</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-22 16:56:23 -0700</bug_when>
    <thetext>Comment on attachment 263845
air is done, maybe?

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

Quick comments:

&gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:36
&gt; +bool addPredecessor(BasicBlock* block, BasicBlock* predecessor)

The arguments should be references here, to follow WebKit&apos;s new love for reference

&gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:48
&gt; +bool removePredecessor(BasicBlock* block, BasicBlock *predecessor)

The &quot;*&quot; is on the wrong side on &quot;BasicBlock *predecessor&quot;

&gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:58
&gt; +            result = true;
&gt; +            // Out of caution, we keep going even though the predecessor list cannot have
&gt; +            // duplicates.

This could help hiding programming mistakes.

What about?
    ASSERT_WITH_MESSAGE(!predecessors.contains(predecessor), &quot;Any predecessor must only appear once per basic block adjacency list&quot;);
    return true;

&gt; Source/JavaScriptCore/b3/air/AirBasicBlock.h:98
&gt; +    BasicBlock(unsigned index)
&gt; +    {

Don&apos;t forget 
    : m_index(index)

&gt; Source/JavaScriptCore/b3/air/AirInst.h:85
&gt; +        for (Arg arg : args)

&quot;Arg&quot; does not hold in a single register. Arg-&gt;Arg&amp; here?

&gt; Source/JavaScriptCore/b3/air/AirInstInlines.h:66
&gt; +    return args[0].special()-&gt;extraClobberedRegs(*this);

Precondition:
    ASSERT_WITH_MESSAGE(hasSpecial(), &quot;This operation only make sense for Specials.&quot;);

&gt; Source/JavaScriptCore/b3/air/AirInstInlines.h:71
&gt; +    args[0].special()-&gt;reportUsedRegisters(*this, usedRegisters);

ditto

&gt; Source/JavaScriptCore/b3/air/AirLiveness.h:57
&gt; +                if (!firstTime &amp;&amp; localCalc.live() == m_liveAtHead[block])
&gt; +                    continue;

This does not look right. You do not update the liveAtTail of the predecessors.

You should check how I modified the DFG Liveness analysis. I reduced the cost of predecessor update by making it depends on &quot;localCalc.live() == m_liveAtHead[block]&quot;.

&gt; Source/JavaScriptCore/b3/air/AirTmp.h:37
&gt; +class Tmp {

I can live with the name, but I am not a fan of it.

&gt; Source/JavaScriptCore/b3/air/AirTmp.h:71
&gt; +    static Tmp forRawValue(unsigned index)

unsigned-&gt;int?

If possible, drop forRawValue(), that looks like a footgun.

&gt; Source/JavaScriptCore/b3/air/AirTmp.h:80
&gt; +    bool rawValue() const { return m_value; }

bool?

Can we drop this?

&gt; Source/JavaScriptCore/b3/air/AirTmp.h:134
&gt; +    unsigned gpTmpIndex() const
&gt; +    {
&gt; +        return decodeGPTmp(m_value);
&gt; +    }
&gt; +
&gt; +    unsigned fpTmpIndex() const
&gt; +    {
&gt; +        return decodeFPTmp(m_value);
&gt; +    }
&gt; +
&gt; +    unsigned tmpIndex() const

&quot;tmp&quot; here means unnamed/uncolored/unassigned.

Since the name of the class is already Tmp, this is a bit confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135918</commentid>
    <comment_count>32</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-22 19:03:40 -0700</bug_when>
    <thetext>(In reply to comment #31)
&gt; Comment on attachment 263845 [details]
&gt; air is done, maybe?
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=263845&amp;action=review
&gt; 
&gt; Quick comments:
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:36
&gt; &gt; +bool addPredecessor(BasicBlock* block, BasicBlock* predecessor)
&gt; 
&gt; The arguments should be references here, to follow WebKit&apos;s new love for
&gt; reference

I really don&apos;t want to do that.  I understand that WebKit has a love for references, but that love hasn&apos;t happened in JSC.  It&apos;s not how we&apos;ve done things in the DFG for example.  In DFG, a Node and BasicBlock are referenced with * always, and that is a convention we have held to quite strictly.  It makes sense to me to designate certain classes as &quot;always *&quot;.

The classes where it makes most sense to always use * are those where identity has semantics and it&apos;s common to say things like &quot;a == b&quot; when given &quot;T*a, *b&quot;.  This is definitely the case with Node/BasicBlock in DFG, Value/BasicBlock in B3, and BasicBlock/Special/StackSlot in Air.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:48
&gt; &gt; +bool removePredecessor(BasicBlock* block, BasicBlock *predecessor)
&gt; 
&gt; The &quot;*&quot; is on the wrong side on &quot;BasicBlock *predecessor&quot;

Oops, fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:58
&gt; &gt; +            result = true;
&gt; &gt; +            // Out of caution, we keep going even though the predecessor list cannot have
&gt; &gt; +            // duplicates.
&gt; 
&gt; This could help hiding programming mistakes.
&gt; 
&gt; What about?
&gt;     ASSERT_WITH_MESSAGE(!predecessors.contains(predecessor), &quot;Any
&gt; predecessor must only appear once per basic block adjacency list&quot;);
&gt;     return true;

Good idea, I changed it.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirBasicBlock.h:98
&gt; &gt; +    BasicBlock(unsigned index)
&gt; &gt; +    {
&gt; 
&gt; Don&apos;t forget 
&gt;     : m_index(index)

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirInst.h:85
&gt; &gt; +        for (Arg arg : args)
&gt; 
&gt; &quot;Arg&quot; does not hold in a single register. Arg-&gt;Arg&amp; here?

OMG that was a huge error, since it&apos;s legal for the Functor to take Tmp&amp; and modify the Tmp&apos;s. The lack of &amp; would have meant that it wouldn&apos;t have actually modified the Inst&apos;s Tmp&apos;s!

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirInstInlines.h:66
&gt; &gt; +    return args[0].special()-&gt;extraClobberedRegs(*this);
&gt; 
&gt; Precondition:
&gt;     ASSERT_WITH_MESSAGE(hasSpecial(), &quot;This operation only make sense for
&gt; Specials.&quot;);

I added an ASSERT, though we already would have gotten the assert implicitly inside Arg::special() (if size &gt;= 1) or Vector::size() (if size == 0).  I&apos;ve been restraining myself a little bit when it comes to redundant asserts, since we now have some places where the number of asserts is so large that it&apos;s hard to find the real code!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirInstInlines.h:71
&gt; &gt; +    args[0].special()-&gt;reportUsedRegisters(*this, usedRegisters);
&gt; 
&gt; ditto

Ditto, I added the assert.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirLiveness.h:57
&gt; &gt; +                if (!firstTime &amp;&amp; localCalc.live() == m_liveAtHead[block])
&gt; &gt; +                    continue;
&gt; 
&gt; This does not look right. You do not update the liveAtTail of the
&gt; predecessors.
&gt; 
&gt; You should check how I modified the DFG Liveness analysis. I reduced the
&gt; cost of predecessor update by making it depends on &quot;localCalc.live() ==
&gt; m_liveAtHead[block]&quot;.

As you were writing your feedback, I had noticed this as well and fixed it. The loop body now does:

                BasicBlock* block = code.at(blockIndex);
                LocalCalc localCalc(*this, block);
                for (size_t instIndex = block-&gt;size(); instIndex--;)
                    localCalc.execute(block-&gt;at(instIndex));
                bool firstTime = seen.add(block);
                if (!firstTime &amp;&amp; localCalc.live() == m_liveAtHead[block])
                    continue;
                changed = true;
                for (BasicBlock* predecessor : block-&gt;predecessors()) {
                    m_liveAtTail[predecessor].add(
                        localCalc.live().begin(), localCalc.live().end());
                }
                m_liveAtHead[block] = localCalc.takeLive();

I believe this sort of matches what you did in the DFG.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirTmp.h:37
&gt; &gt; +class Tmp {
&gt; 
&gt; I can live with the name, but I am not a fan of it.

Neither am I, other than I&apos;m expecting to have to write a lot of expressions that say &quot;Tmp&quot;.  Also, a big goal with naming Arg::Kind&apos;s was to keep the AirOpcode.opcodes file terse. Hence &quot;Tmp&quot;, &quot;Imm&quot;, &quot;Addr&quot;, and &quot;Index&quot; rather than their more verbose names.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirTmp.h:71
&gt; &gt; +    static Tmp forRawValue(unsigned index)
&gt; 
&gt; unsigned-&gt;int?
&gt; 
&gt; If possible, drop forRawValue(), that looks like a footgun.

I removed it.  I thought I would make Arg be a proper union, in which case I&apos;d need to extract a union-compatible thing from Tmp.  But, I ended up not doing it.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirTmp.h:80
&gt; &gt; +    bool rawValue() const { return m_value; }
&gt; 
&gt; bool?
&gt; 
&gt; Can we drop this?

Removed.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirTmp.h:134
&gt; &gt; +    unsigned gpTmpIndex() const
&gt; &gt; +    {
&gt; &gt; +        return decodeGPTmp(m_value);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    unsigned fpTmpIndex() const
&gt; &gt; +    {
&gt; &gt; +        return decodeFPTmp(m_value);
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    unsigned tmpIndex() const
&gt; 
&gt; &quot;tmp&quot; here means unnamed/uncolored/unassigned.
&gt; 
&gt; Since the name of the class is already Tmp, this is a bit confusing.

Yeah.  I don&apos;t know what else to call it.  On the one hand, a Reg is a Tmp.  But on the other hand, there is a set of Tmps that are not Regs.

I found that this is easier to justify when I just say that &quot;some Tmps have indices, and some don&apos;t&quot;.  I documented this by adding this method:

    bool hasTmpIndex() const
    {
        return !isReg();
    }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135930</commentid>
    <comment_count>33</comment_count>
      <attachid>263889</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-22 20:43:50 -0700</bug_when>
    <thetext>Created attachment 263889
lots of progress on B3-&gt;Air lowering</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135958</commentid>
    <comment_count>34</comment_count>
      <attachid>263900</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-22 22:16:58 -0700</bug_when>
    <thetext>Created attachment 263900
I think that the B3-&gt;Air lowering is &quot;done&quot;

Done in the sense that it&apos;s good to commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135987</commentid>
    <comment_count>35</comment_count>
      <attachid>263900</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-23 00:26:20 -0700</bug_when>
    <thetext>Comment on attachment 263900
I think that the B3-&gt;Air lowering is &quot;done&quot;

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

This is super interesting. I have a lot of questions but I&apos;ll make a second pass when I&apos;m not on my phone. 
I have some fly by comments.

&gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:55
&gt; +            // Out of caution, we keep going even though the predecessor list cannot have

This comment looks out of date now that you&apos;ve added the assert.

&gt; Source/JavaScriptCore/b3/B3ControlValue.h:48
&gt; +            // swtichValue-&gt;as&lt;ControlValue&gt;() to return non-null.

Typo

&gt; Source/JavaScriptCore/b3/B3ControlValue.h:94
&gt; +    // Use this for Jump.

Maybe these could be static functions that call the proper constructors so that the call site is more descriptive?

&gt; Source/JavaScriptCore/b3/B3IndexMap.h:35
&gt; +template&lt;typename Key, typename Value&gt;

Does this need to be templatized over Key?
Or maybe you were going to add a method for &quot;Value&amp; get(Key);&quot;?

&gt; Source/JavaScriptCore/b3/B3IndexMap.h:59
&gt; +    Vector&lt;Value&gt; m_vector;

Maybe it&apos;s worth giving this some inline storage?

&gt; Source/JavaScriptCore/b3/B3IndexSet.h:54
&gt; +            return nullptr;

I would make this &quot;return false&quot;

&gt; Source/JavaScriptCore/b3/B3Opcode.h:71
&gt; +    ChillDiv, // doesn&apos;t trap ever, behaves like JS (x/y)|0.

Nice

&gt; Source/JavaScriptCore/b3/B3Opcode.h:136
&gt; +    // It&apos;s legal to request that a stackmap argument is in some register and it&apos;s legal to request

Would it be possible to request it to be part of a certain set of constraints?
Like: must be a callee save or on the stack?

&gt; Source/JavaScriptCore/b3/B3Opcode.h:166
&gt; +    // full branch fusion in the instruction selector. A true value jumps to the generator&apos;s slow

What is branch fusion?

&gt; Source/JavaScriptCore/b3/B3StackSlotKind.h:32
&gt; +    // A locked stack slot needs to be keep disjoint from all others because we intend to escape

&quot;be keep&quot; =&gt; &quot;be&quot;

&gt; Source/JavaScriptCore/b3/B3Stackmap.h:116
&gt; +    void* m_opaque { nullptr };

Maybe a better name for this is &quot;m_identifier&quot; or &quot;m_uniqueIdentifier&quot;?

&gt; Source/JavaScriptCore/b3/B3Type.h:52
&gt; +    if (sizeof(void*) == 4)

Are we going to support 32-bit?

&gt; Source/JavaScriptCore/b3/B3ValueInlines.h:46
&gt; +template&gt;typename T&gt;

&quot;&gt;&quot; =&gt; &quot;&lt;&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1135993</commentid>
    <comment_count>36</comment_count>
      <attachid>263900</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-23 00:52:05 -0700</bug_when>
    <thetext>Comment on attachment 263900
I think that the B3-&gt;Air lowering is &quot;done&quot;

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

Some more comments:

&gt; Source/JavaScriptCore/b3/air/AirValidate.cpp:39
&gt; +        , m_when(when)

Where is this one defined?

&gt; Source/JavaScriptCore/jit/Reg.h:210
&gt; +    static AllRegsIterable all() const { return AllRegsIterable(); }

The whole AllRegsIterable code seems unused, I don&apos;t see any call to all().

&gt; Source/JavaScriptCore/jit/RegisterAtOffsetList.h:70
&gt; +    template&lt;typename Functor&gt;
&gt; +    void forEach(const Functor&amp; functor) const

It looks like every use of this would be made cleaner with an iterator. Same for the next one.

Can you add a begin() + end() instead?

&gt; Source/WTF/wtf/BitVector.h:323
&gt; -    
&gt; +

Let&apos;s revert this.

&gt; Source/WTF/wtf/ScopedLambda.h:45
&gt; +template&lt;typename FunctionType&gt; class ScopedLambda;
&gt; +template&lt;typename ResultType, typename... ArgumentTypes&gt;
&gt; +class ScopedLambda&lt;ResultType (ArgumentTypes...)&gt; {

I have never seen this syntax.

Is the initial declaration
    template&lt;typename FunctionType&gt; class ScopedLambda;
necessary?

&gt; Source/WTF/wtf/ScopedLambda.h:55
&gt; +    ~ScopedLambda()
&gt; +    {
&gt; +    }

You can remove the explicit destructor.

&gt; Source/WTF/wtf/ScopedLambda.h:63
&gt; +    ResultType (*impl)(void* arg, ArgumentTypes&amp;&amp;...) m_impl;

I am not sure you need the name &quot;impl&quot; for a type declaration.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136070</commentid>
    <comment_count>37</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 10:52:59 -0700</bug_when>
    <thetext>(In reply to comment #36)
&gt; Comment on attachment 263900 [details]
&gt; I think that the B3-&gt;Air lowering is &quot;done&quot;
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=263900&amp;action=review
&gt; 
&gt; Some more comments:
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirValidate.cpp:39
&gt; &gt; +        , m_when(when)
&gt; 
&gt; Where is this one defined?

Fixed!

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/Reg.h:210
&gt; &gt; +    static AllRegsIterable all() const { return AllRegsIterable(); }
&gt; 
&gt; The whole AllRegsIterable code seems unused, I don&apos;t see any call to all().

True. :-/  I added this because I saw too many loops like:

    for (Reg reg = Reg::first(); reg &lt;= Reg::last(); reg = reg.next()) {

And I was *about* to write one in AirRegisterPriority.cpp. That&apos;s why I added this iterable.

What do you think of this patch fixing RegisterAtOffsetList to use this?

&gt; 
&gt; &gt; Source/JavaScriptCore/jit/RegisterAtOffsetList.h:70
&gt; &gt; +    template&lt;typename Functor&gt;
&gt; &gt; +    void forEach(const Functor&amp; functor) const
&gt; 
&gt; It looks like every use of this would be made cleaner with an iterator. Same
&gt; for the next one.
&gt; 
&gt; Can you add a begin() + end() instead?

Sure, I changed this to use iterators.

&gt; 
&gt; &gt; Source/WTF/wtf/BitVector.h:323
&gt; &gt; -    
&gt; &gt; +
&gt; 
&gt; Let&apos;s revert this.

Done.

&gt; 
&gt; &gt; Source/WTF/wtf/ScopedLambda.h:45
&gt; &gt; +template&lt;typename FunctionType&gt; class ScopedLambda;
&gt; &gt; +template&lt;typename ResultType, typename... ArgumentTypes&gt;
&gt; &gt; +class ScopedLambda&lt;ResultType (ArgumentTypes...)&gt; {
&gt; 
&gt; I have never seen this syntax.
&gt; 
&gt; Is the initial declaration
&gt;     template&lt;typename FunctionType&gt; class ScopedLambda;
&gt; necessary?

Yeah, it is.  Something that helps understand this is that it *could* be rewritten as:

template&lt;typename&gt; class ScopedLambda;

Here&apos;s what this tells the C++ compiler:
- The valid syntax for instantiating the ScopedLambda template involves exactly one type argument.
- Any future declarations of a ScopedLambda template are specializations of ScopedLambda&lt;T&gt;. The compiler will try to pick the specialization where T matches that specialization&apos;s pattern.

A classic use of this syntax is something like:

template&lt;typename&gt; class PtrExtractor;
template&lt;typename T&gt;
class PtrExtractor&lt;T*&gt; { typedef T Type; }

Then if you say &quot;PtrExtractor&lt;char*&gt;&quot; then the compiler will notice the initial declaration, and then look for specializations. Because &quot;char*&quot; matches the &quot;T*&quot; pattern, we get PtrExtractor&lt;char*&gt;::Type == char.

This same kind of pattern matching works when the specialization has more type parameters than the original declaration. This could work for example:

template&lt;typename&gt; class PairExtractor;
template&lt;typename T, typename U&gt;
class PairExtractor&lt;std::pair&lt;T, U&gt;&gt; { typedef T FirstType; typedef U SecondType; };

Then you&apos;d have PairExtractor&lt;std::pair&lt;char, int&gt;&gt;::FirstType == char, for example.

This ScopedLambda thing does the same thing, except to extract return value and argument types.  It took me a while to figure this out, but I already know that this pattern works - see wtf/SharedTask.h.  It&apos;s also what std::function does.

&gt; 
&gt; &gt; Source/WTF/wtf/ScopedLambda.h:55
&gt; &gt; +    ~ScopedLambda()
&gt; &gt; +    {
&gt; &gt; +    }
&gt; 
&gt; You can remove the explicit destructor.

Lol, of course.

&gt; 
&gt; &gt; Source/WTF/wtf/ScopedLambda.h:63
&gt; &gt; +    ResultType (*impl)(void* arg, ArgumentTypes&amp;&amp;...) m_impl;
&gt; 
&gt; I am not sure you need the name &quot;impl&quot; for a type declaration.

OMG, this should be:

ResultType (*m_impl)(void* arg, ArgumentTypes&amp;&amp;...)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136077</commentid>
    <comment_count>38</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 11:10:49 -0700</bug_when>
    <thetext>(In reply to comment #35)
&gt; Comment on attachment 263900 [details]
&gt; I think that the B3-&gt;Air lowering is &quot;done&quot;
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=263900&amp;action=review
&gt; 
&gt; This is super interesting. I have a lot of questions but I&apos;ll make a second
&gt; pass when I&apos;m not on my phone. 
&gt; I have some fly by comments.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:55
&gt; &gt; +            // Out of caution, we keep going even though the predecessor list cannot have
&gt; 
&gt; This comment looks out of date now that you&apos;ve added the assert.

Removed!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ControlValue.h:48
&gt; &gt; +            // swtichValue-&gt;as&lt;ControlValue&gt;() to return non-null.
&gt; 
&gt; Typo

Fixed!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ControlValue.h:94
&gt; &gt; +    // Use this for Jump.
&gt; 
&gt; Maybe these could be static functions that call the proper constructors so
&gt; that the call site is more descriptive?

No, because B3::Procedure has to instantiate values. B3::Procedure is the thing that supplies the &quot;index&quot; parameter. All B3 values will be instantiated using:

procedure.add&lt;ControlValue&gt;(Jump, Origin(...), target);

Though often times, you&apos;ll do something like:

insertionSet.insert&lt;ControlValue&gt;(indexInBlock, Jump, Origin(...), target);

or:

block-&gt;append&lt;ControlValue&gt;(procedure, Jump, Origin(...), target);

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3IndexMap.h:35
&gt; &gt; +template&lt;typename Key, typename Value&gt;
&gt; 
&gt; Does this need to be templatized over Key?

Yes.

&gt; Or maybe you were going to add a method for &quot;Value&amp; get(Key);&quot;?

Lol, yeah.  Actually I meant to add this:

    Value&amp; operator[](Key* key)
    {
        return m_vector[key-&gt;index()];
    }

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3IndexMap.h:59
&gt; &gt; +    Vector&lt;Value&gt; m_vector;
&gt; 
&gt; Maybe it&apos;s worth giving this some inline storage?

Probably not.  IndexMap is usually used for BasicBlocks or Values.  Usually the total number of BasicBlocks is large, as is the total number of Values.  Inline storage is most useful when the total number of things is likely small.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3IndexSet.h:54
&gt; &gt; +            return nullptr;
&gt; 
&gt; I would make this &quot;return false&quot;

Oops, fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:71
&gt; &gt; +    ChillDiv, // doesn&apos;t trap ever, behaves like JS (x/y)|0.
&gt; 
&gt; Nice
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:136
&gt; &gt; +    // It&apos;s legal to request that a stackmap argument is in some register and it&apos;s legal to request
&gt; 
&gt; Would it be possible to request it to be part of a certain set of
&gt; constraints?

The code already does this, see B3Stackmap.h.

&gt; Like: must be a callee save or on the stack?

You can absolutely request things to go to the stack. ValueRep::stackArgument() does this. Though, it only allows you to put things into the outgoing-argument area of the stack. I believe that&apos;s sensible because that&apos;s the only way we would use such a constraint, any any other kind of constraint would be damn hard to implement.

It doesn&apos;t make sense to add the callee save request, but it is possible to say that all non-callee-saves are clobbered. But, B3&apos;s stackmap has no early clobber. So, you might still get your arguments in volatile registers even if you claim to clobber non-callee-saves. Keeping things simple like this will allow for the register allocator to be lighter-weight, I think.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:166
&gt; &gt; +    // full branch fusion in the instruction selector. A true value jumps to the generator&apos;s slow
&gt; 
&gt; What is branch fusion?

If you say:

a = Equal(x, y)
Branch(a, target)

Then the naive codegen would be:

; Lowering of Equal:
cmp %x, %y
seteq %a
; Lowering of Branch:
test %a, %a
jnz target

Branch fusion is when you emit this instead:

cmp %x, %y
jeq target

In general &quot;fusion&quot; is another way of saying that the compiler matched a pattern that included more than one B3::Value and emitted just one instruction for all of those values - i.e. it fused them.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3StackSlotKind.h:32
&gt; &gt; +    // A locked stack slot needs to be keep disjoint from all others because we intend to escape
&gt; 
&gt; &quot;be keep&quot; =&gt; &quot;be&quot;

Oops, I meant to write &quot;be kept&quot;.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Stackmap.h:116
&gt; &gt; +    void* m_opaque { nullptr };
&gt; 
&gt; Maybe a better name for this is &quot;m_identifier&quot; or &quot;m_uniqueIdentifier&quot;?

Possibly, but I have another thing in mind that will be an identifier, for when we want to teach B3 how to do CSE on patchpoints. That would allow us to implement for example exotic math instructions (like sqrt) using Patchpoint. The &quot;identifier&quot; would be an int that &quot;names&quot; the operation that the Patchpoint performs. So, the rule will be that two Patchpoints are redundant if they are both pure, they have the same identifier, and they take the same operands.

That&apos;s why I used the name &quot;opaque&quot; for now. It&apos;s literally just a cookie that B3 passes through but doesn&apos;t interpret. We&apos;d use it in the FTL to point to the IC or OSR data structure, or in the short term, to store what the FTL calls stackmapID.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Type.h:52
&gt; &gt; +    if (sizeof(void*) == 4)
&gt; 
&gt; Are we going to support 32-bit?

We don&apos;t have to support it. But in a super low-level compiler like this, it doesn&apos;t take a whole lot to get the support for free, so I&apos;m just doing that.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ValueInlines.h:46
&gt; &gt; +template&gt;typename T&gt;
&gt; 
&gt; &quot;&gt;&quot; =&gt; &quot;&lt;&quot;

Oops.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136100</commentid>
    <comment_count>39</comment_count>
      <attachid>263934</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 12:06:59 -0700</bug_when>
    <thetext>Created attachment 263934
it is written

Now I need to try to compile it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136112</commentid>
    <comment_count>40</comment_count>
    <who name="Lucas Forschler">lforschler</who>
    <bug_when>2015-10-23 12:41:53 -0700</bug_when>
    <thetext>This thread deserves a blog entry.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136120</commentid>
    <comment_count>41</comment_count>
      <attachid>263937</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 13:11:00 -0700</bug_when>
    <thetext>Created attachment 263937
added a feature flag, ENABLE(B3_JIT)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136121</commentid>
    <comment_count>42</comment_count>
      <attachid>263938</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 13:20:55 -0700</bug_when>
    <thetext>Created attachment 263938
ready to be compiled

Lol there will be so many failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136128</commentid>
    <comment_count>43</comment_count>
      <attachid>263941</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 13:43:52 -0700</bug_when>
    <thetext>Created attachment 263941
rebased

Starting to make it compile</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136137</commentid>
    <comment_count>44</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-23 14:15:54 -0700</bug_when>
    <thetext>(In reply to comment #37)
&gt; &gt; &gt; Source/JavaScriptCore/jit/Reg.h:210
&gt; &gt; &gt; +    static AllRegsIterable all() const { return AllRegsIterable(); }
&gt; &gt; 
&gt; &gt; The whole AllRegsIterable code seems unused, I don&apos;t see any call to all().
&gt; 
&gt; True. :-/  I added this because I saw too many loops like:
&gt; 
&gt;     for (Reg reg = Reg::first(); reg &lt;= Reg::last(); reg = reg.next()) {
&gt; 
&gt; And I was *about* to write one in AirRegisterPriority.cpp. That&apos;s why I
&gt; added this iterable.
&gt; 
&gt; What do you think of this patch fixing RegisterAtOffsetList to use this?

Sure. A few more lines won&apos;t stop you now :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136147</commentid>
    <comment_count>45</comment_count>
      <attachid>263947</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 15:05:19 -0700</bug_when>
    <thetext>Created attachment 263947
closer to compiling</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136168</commentid>
    <comment_count>46</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-23 16:29:08 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=263941&amp;action=review

&gt; Source/JavaScriptCore/b3/B3AddressMatcher.patterns:35
&gt; +AddShift1 = Add(Shl(index, $logScale), base)
&gt; +AddShift2 = Add(base, Shl(index, $logScale))

I would prefer &quot;#&quot; instead of &quot;$&quot; for literals. It seems more common.

That would be adding complexity to the parser though...since # is also the start of comments.

&gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:131
&gt; +        when /\A([ \t\r]+)/

&quot;\A\s+&quot;?

&gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:144
&gt; +    # We can extend this as we add more keywords. Like, we might want &quot;include&quot; eventually.

Better already exclude &quot;include&quot; if you suspect you may use it in the future.

&gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:214
&gt; +                parseError(&quot;Duplicate production&quot;)

It looks like this error would be associated with the wrong token. It would go with the first token of the next production, which would be misleading.

It may be better to just &quot;raise&quot; here directly with the faulty production name in the string.

&gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:295
&gt; +    outp.puts &quot;void run#{matcher.name}(Value* _value, Adaptor&amp; adaptor)&quot;

_value -&gt; value?

&gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:300
&gt; +    # Note that this does not emit properly indented code, because it&apos;s a recursive emitter. If you
&gt; +    # want to see the code nicely formatted, open it in a good text editor and ask it to format it
&gt; +    # for you.

Could be 
    # FIXME: indent the generated C++ code as expected.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136187</commentid>
    <comment_count>47</comment_count>
      <attachid>263962</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 17:08:08 -0700</bug_when>
    <thetext>Created attachment 263962
it compiles!

It also sort of links, except that only works because nobody references anything in B3/Air yet.  Once I do that, it&apos;ll shake out the link errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136189</commentid>
    <comment_count>48</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 17:13:20 -0700</bug_when>
    <thetext>(In reply to comment #46)
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=263941&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3AddressMatcher.patterns:35
&gt; &gt; +AddShift1 = Add(Shl(index, $logScale), base)
&gt; &gt; +AddShift2 = Add(base, Shl(index, $logScale))
&gt; 
&gt; I would prefer &quot;#&quot; instead of &quot;$&quot; for literals. It seems more common.
&gt; 
&gt; That would be adding complexity to the parser though...since # is also the
&gt; start of comments.

Hmm, really?  We already use $ for constants in bytecode, and $ is also used for constants in disassembly.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:131
&gt; &gt; +        when /\A([ \t\r]+)/
&gt; 
&gt; &quot;\A\s+&quot;?

That would also catch newline, and would break line counting in the parser.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:144
&gt; &gt; +    # We can extend this as we add more keywords. Like, we might want &quot;include&quot; eventually.
&gt; 
&gt; Better already exclude &quot;include&quot; if you suspect you may use it in the future.

Good call, added.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:214
&gt; &gt; +                parseError(&quot;Duplicate production&quot;)
&gt; 
&gt; It looks like this error would be associated with the wrong token. It would
&gt; go with the first token of the next production, which would be misleading.

Really?  This is just:

Foo = things...
Foo = more things...   &lt;=== this is an error

&gt; 
&gt; It may be better to just &quot;raise&quot; here directly with the faulty production
&gt; name in the string.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:295
&gt; &gt; +    outp.puts &quot;void run#{matcher.name}(Value* _value, Adaptor&amp; adaptor)&quot;
&gt; 
&gt; _value -&gt; value?

Then I&apos;d have to reserve the word &quot;value&quot;.  The parser prohibits identifiers from starting with &quot;_&quot;, so that we can prefix our own internal varaibles with &quot;_&quot;.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:300
&gt; &gt; +    # Note that this does not emit properly indented code, because it&apos;s a recursive emitter. If you
&gt; &gt; +    # want to see the code nicely formatted, open it in a good text editor and ask it to format it
&gt; &gt; +    # for you.
&gt; 
&gt; Could be 
&gt;     # FIXME: indent the generated C++ code as expected.

I don&apos;t think we ever want to fix this, as that would make the code generator significantly less hackable without really gaining us anything.  It&apos;s so easy to autoindent the resulting text if you really want to read it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136224</commentid>
    <comment_count>49</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-23 18:22:43 -0700</bug_when>
    <thetext>(In reply to comment #48)
&gt; (In reply to comment #46)
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=263941&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3AddressMatcher.patterns:35
&gt; &gt; &gt; +AddShift1 = Add(Shl(index, $logScale), base)
&gt; &gt; &gt; +AddShift2 = Add(base, Shl(index, $logScale))
&gt; &gt; 
&gt; &gt; I would prefer &quot;#&quot; instead of &quot;$&quot; for literals. It seems more common.
&gt; &gt; 
&gt; &gt; That would be adding complexity to the parser though...since # is also the
&gt; &gt; start of comments.
&gt; 
&gt; Hmm, really?  We already use $ for constants in bytecode, and $ is also used
&gt; for constants in disassembly.

You probably look at x86 ASM more often, and I look at ARM ASM :)

&gt; &gt; &gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:214
&gt; &gt; &gt; +                parseError(&quot;Duplicate production&quot;)
&gt; &gt; 
&gt; &gt; It looks like this error would be associated with the wrong token. It would
&gt; &gt; go with the first token of the next production, which would be misleading.
&gt; 
&gt; Really?  This is just:
&gt; 
&gt; Foo = things...
&gt; Foo = more things...   &lt;=== this is an error

Ok. I thought &quot;token&quot; would be the token *after* the production.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136230</commentid>
    <comment_count>50</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 19:28:05 -0700</bug_when>
    <thetext>(In reply to comment #49)
&gt; (In reply to comment #48)
&gt; &gt; (In reply to comment #46)
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=263941&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/b3/B3AddressMatcher.patterns:35
&gt; &gt; &gt; &gt; +AddShift1 = Add(Shl(index, $logScale), base)
&gt; &gt; &gt; &gt; +AddShift2 = Add(base, Shl(index, $logScale))
&gt; &gt; &gt; 
&gt; &gt; &gt; I would prefer &quot;#&quot; instead of &quot;$&quot; for literals. It seems more common.
&gt; &gt; &gt; 
&gt; &gt; &gt; That would be adding complexity to the parser though...since # is also the
&gt; &gt; &gt; start of comments.
&gt; &gt; 
&gt; &gt; Hmm, really?  We already use $ for constants in bytecode, and $ is also used
&gt; &gt; for constants in disassembly.
&gt; 
&gt; You probably look at x86 ASM more often, and I look at ARM ASM :)

Lol, that&apos;s a good point.

The more I think about it, I might remove the $ notation.  If we want to match a constant (like, Equal(x, 0) will be a thing, since it means &quot;not&quot;), then maybe we can write the constant without any prefix.  The purpose of $ is that you can match *any* constant.  But in those cases, it&apos;s so easy to just say &quot;if (thingy-&gt;hasInt32())&quot; or whatever inside the C++ code.

I&apos;ll keep this for now, since I&apos;m so close to this being landable.  But I&apos;ve filed a bug about the possible uselessness of $: https://bugs.webkit.org/show_bug.cgi?id=150527

&gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/b3/generate_pattern_matcher.rb:214
&gt; &gt; &gt; &gt; +                parseError(&quot;Duplicate production&quot;)
&gt; &gt; &gt; 
&gt; &gt; &gt; It looks like this error would be associated with the wrong token. It would
&gt; &gt; &gt; go with the first token of the next production, which would be misleading.
&gt; &gt; 
&gt; &gt; Really?  This is just:
&gt; &gt; 
&gt; &gt; Foo = things...
&gt; &gt; Foo = more things...   &lt;=== this is an error
&gt; 
&gt; Ok. I thought &quot;token&quot; would be the token *after* the production.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136231</commentid>
    <comment_count>51</comment_count>
      <attachid>263974</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-23 19:28:58 -0700</bug_when>
    <thetext>Created attachment 263974
it links!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136236</commentid>
    <comment_count>52</comment_count>
      <attachid>263974</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-23 21:13:09 -0700</bug_when>
    <thetext>Comment on attachment 263974
it links!

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

Some more small comments.

&gt; Source/JavaScriptCore/assembler/MacroAssembler.h:1610
&gt; +namespace JSC {

Oops :)

&gt; Source/JavaScriptCore/b3/B3ArgumentRegValue.h:53
&gt; +    {

ASSERT(reg.isSet());

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:302
&gt; +                // This production isn&apos;t strictly necessary since we expect
&gt; +                // Load(Add(@x, @const1), offset = const2) to have already been strength-reduced
&gt; +                // to Load(@x, offset = const1 + const2).
&gt; +                selectedAddress = Arg::addr(lower.tmp(left), right-&gt;asInt32());

If strength reduction already takes care of that, IMHO you should just leave this out.

&gt; Source/JavaScriptCore/b3/B3Opcode.h:54
&gt; +    // The magical argument register. This is viewed as executing at the top of the program
&gt; +    // regardless of where in control flow you put it, and the compiler takes care to ensure that we

&quot;This is viewed as executing at the top of the program regardless of where in control flow you put it&quot;.

Wouldn&apos;t it be easier to be super strict about those: they must appear as the first statements inside the first BasicBlock? That way you can use regular analysis on them.

&gt; Source/JavaScriptCore/b3/B3Type.h:53
&gt; +inline Type pointer()

pointer() -&gt; pointerType()?

The code using &quot;pointer()&quot; looks a bit weird.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136246</commentid>
    <comment_count>53</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-24 00:31:17 -0700</bug_when>
    <thetext>It just did its first compile!

The test:

void test42()
{
    Procedure proc;
    BasicBlock* root = proc.addBlock();
    Value* const42 = root-&gt;appendNew&lt;Const32Value&gt;(proc, Origin(), 42);
    root-&gt;appendNew&lt;ControlValue&gt;(proc, Return, Origin(), const42);

    CHECK(compileAndRun&lt;int&gt;(proc) == 42);
}

The output with full dumping enabled:

[pizlo@shakezilla OpenSource] JSC_dumpGraphAtEachPhase=true JSC_dumpDisassembly=true JSC_validateGraphAtEachPhase=true DYLD_FRAMEWORK_PATH=WebKitBuild/Release/ WebKitBuild/Release/testb3 
test42():
Initial B3:
BB#0: ; frequency = nan
    Int32 @0 = Const32(42)
    Void @1 = Return(@0)
B3 before generation:
BB#0: ; frequency = nan
    Int32 @0 = Const32(42)
    Void @1 = Return(@0)
B3 before lowerToAir:
BB#0: ; frequency = nan
    Int32 @0 = Const32(42)
    Void @1 = Return(@0)
Initial air:
BB#0: ; frequency = nan
    Move $42, %tmp0, @0
    Move $42, %rax, @1
    Ret @1
Frame size: 0
Call arg area size: 0
Callee saves: 
Air before spillEverything:
BB#0: ; frequency = nan
    Move $42, %tmp0, @0
    Move $42, %rax, @1
    Ret @1
Frame size: 0
Call arg area size: 0
Callee saves: 
Air before handleCalleeSaves:
BB#0: ; frequency = nan
    Move $42, %rax, @0
    Move %rax, (stack0), @0
    Move $42, %rax, @1
    Ret @1
Stack slots:
    byteSize = 8, offsetFromFP = 0, kind = Anonymous
Frame size: 0
Call arg area size: 0
Callee saves: 
Air before allocateStack:
BB#0: ; frequency = nan
    Move $42, %rax, @0
    Move %rax, (stack0), @0
    Move $42, %rax, @1
    Ret @1
Stack slots:
    byteSize = 8, offsetFromFP = 0, kind = Anonymous
    byteSize = 0, offsetFromFP = 0, kind = Locked
Frame size: 0
Call arg area size: 0
Callee saves: 
Air before generation:
BB#0: ; frequency = nan
    Move $42, %rax, @0
    Move %rax, -8(%rbp), @0
    Move $42, %rax, @1
    Ret @1
Stack slots:
    byteSize = 8, offsetFromFP = -8, kind = Anonymous
    byteSize = 0, offsetFromFP = 0, kind = Locked
Frame size: 16
Call arg area size: 0
Callee saves: 
Generated JIT code for testb3:
    Code at [0x4aba39a01000, 0x4aba39a01020):
      0x4aba39a01000: push %rbp
      0x4aba39a01001: mov %rsp, %rbp
      0x4aba39a01004: add $0xfffffffffffffff0, %rsp
      0x4aba39a01008: mov $0x2a, %eax
      0x4aba39a0100d: mov %rax, -0x8(%rbp)
      0x4aba39a01011: mov $0x2a, %eax
      0x4aba39a01016: mov %rbp, %rsp
      0x4aba39a01019: pop %rbp
      0x4aba39a0101a: ret 
    OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136247</commentid>
    <comment_count>54</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-24 00:35:16 -0700</bug_when>
    <thetext>(In reply to comment #52)
&gt; Comment on attachment 263974 [details]
&gt; it links!
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=263974&amp;action=review
&gt; 
&gt; Some more small comments.
&gt; 
&gt; &gt; Source/JavaScriptCore/assembler/MacroAssembler.h:1610
&gt; &gt; +namespace JSC {
&gt; 
&gt; Oops :)
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ArgumentRegValue.h:53
&gt; &gt; +    {
&gt; 
&gt; ASSERT(reg.isSet());

Fixed!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:302
&gt; &gt; +                // This production isn&apos;t strictly necessary since we expect
&gt; &gt; +                // Load(Add(@x, @const1), offset = const2) to have already been strength-reduced
&gt; &gt; +                // to Load(@x, offset = const1 + const2).
&gt; &gt; +                selectedAddress = Arg::addr(lower.tmp(left), right-&gt;asInt32());
&gt; 
&gt; If strength reduction already takes care of that, IMHO you should just leave
&gt; this out.

We don&apos;t have strength reduction yet. :-)  I&apos;m still torn about whether I want this to be a rule.  If it really was the case that strength reduction was the *very last* phase before LowerToAir, then we could argue that we should never put any strength reductions into LowerToAir.  But I&apos;m not sure we should mandate that strength reduction is the last phase, because we will probably end up adding &quot;late&quot; fixup phases (DFG has a lot of these as does LLVM).

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:54
&gt; &gt; +    // The magical argument register. This is viewed as executing at the top of the program
&gt; &gt; +    // regardless of where in control flow you put it, and the compiler takes care to ensure that we
&gt; 
&gt; &quot;This is viewed as executing at the top of the program regardless of where
&gt; in control flow you put it&quot;.
&gt; 
&gt; Wouldn&apos;t it be easier to be super strict about those: they must appear as
&gt; the first statements inside the first BasicBlock? That way you can use
&gt; regular analysis on them.

Actually, you can already do regular analysis on these. :-)  They behave like pure values.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Type.h:53
&gt; &gt; +inline Type pointer()
&gt; 
&gt; pointer() -&gt; pointerType()?
&gt; 
&gt; The code using &quot;pointer()&quot; looks a bit weird.

Sure, I&apos;ll change it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136248</commentid>
    <comment_count>55</comment_count>
      <attachid>263976</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-24 00:43:02 -0700</bug_when>
    <thetext>Created attachment 263976
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136249</commentid>
    <comment_count>56</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-24 00:45:42 -0700</bug_when>
    <thetext>Attachment 263976 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:104:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:118:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3StackSlotValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3Procedure.cpp:94:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirCCallSpecial.cpp:87:  Extra space between return and false  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/b3/B3PatchpointValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:71:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:72:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:123:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:124:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:118:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:118:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBasicBlock.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchValue.h:113:  The parameter name &quot;switchCase&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3SwitchValue.h:121:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirStackSlot.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:67:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:110:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.h:49:  The parameter name &quot;opcode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:85:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:38:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3BasicBlock.h:26:  #ifndef header guard has wrong style, please use: B3BasicBlock_h  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:122:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 46 in 133 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>1136273</commentid>
    <comment_count>57</comment_count>
      <attachid>263982</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-24 12:45:10 -0700</bug_when>
    <thetext>Created attachment 263982
the patch

Maybe it&apos;ll even build this time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136274</commentid>
    <comment_count>58</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-24 12:49:33 -0700</bug_when>
    <thetext>Attachment 263982 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:104:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:118:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3StackSlotValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3Procedure.cpp:94:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirCCallSpecial.cpp:87:  Extra space between return and false  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/b3/B3PatchpointValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:118:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:118:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBasicBlock.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchValue.h:113:  The parameter name &quot;switchCase&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3SwitchValue.h:121:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirStackSlot.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:67:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:110:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.h:49:  The parameter name &quot;opcode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:85:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:38:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3BasicBlock.h:26:  #ifndef header guard has wrong style, please use: B3BasicBlock_h  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:122:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 46 in 134 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>1136304</commentid>
    <comment_count>59</comment_count>
      <attachid>263976</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-24 16:33:45 -0700</bug_when>
    <thetext>Comment on attachment 263976
the patch

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

Be patient, it&apos;s a big patch :)

&gt; Source/JavaScriptCore/b3/B3BasicBlock.h:46
&gt; +    typedef Vector&lt;FrequentedBlock, 2&gt; SuccessorList; // This matches ControlValue::SuccessorList

Instead of a comment, you could declare a BasicBlockSuccessorList type in B3Type and typedef from it in BasicBlock and ControlValue.

&gt; Source/JavaScriptCore/b3/B3BasicBlock.h:75
&gt; +    FrequentedBlock successor(unsigned index) const;

Return
    const FrequentedBlock&amp;
instead?

&gt; Source/JavaScriptCore/b3/B3BasicBlock.h:93
&gt; +    bool addPredecessor(BasicBlock*);
&gt; +    bool removePredecessor(BasicBlock*);
&gt; +    bool replacePredecessor(BasicBlock* from, BasicBlock* to);

It would be nice if those function could ASSERT that the new relation make sense. It could check that the new predecessor&apos;s last Value* has this block as a possible target.

removePredecessor could check that we are no longer a target.

&gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:56
&gt; +            predecessors[i--] = predecessors.last();
&gt; +            predecessors.removeLast();

This could be 
    predecessors[i--] = predecessors.takeLast();

&gt; Source/JavaScriptCore/b3/B3FrequentedBlock.h:37
&gt; +typedef GenericFrequentedBlock&lt;BasicBlock&gt; FrequentedBlock;

Frequented sounds weird to me for &quot;something-with-a-frequency&quot;. English is not my forte though :)

Maybe QuantifiedBlock or WeightedBlock?

&gt; Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:49
&gt; +    bool operator==(const GenericFrequentedBlock&amp; other) const

Do you need to declare this and the operator!=?
Aren&apos;t they doing the same as the generated ones?

&gt; Source/JavaScriptCore/b3/B3SuccessorCollection.h:35
&gt; +template&lt;typename BasicBlock, typename SuccessorList&gt;

Do you need the type BasicBlock?

You may be able to just use &quot;auto&quot; to get the right type out of SuccessorList.

&gt; Source/JavaScriptCore/b3/B3SuccessorCollection.h:36
&gt; +class SuccessorCollection {

Since the &quot;frequented&quot; successor list is named SuccessorList, 
    SuccessorCollection-&gt;SuccessorBlockList?

&gt; Source/JavaScriptCore/b3/B3SuccessorCollection.h:58
&gt; +            : m_collection(const_cast&lt;SuccessorCollection*&gt;(&amp;collection)) // const is stupid anyway.

Why do you take the collection as const anyway?

Your begin() and end() are not const.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136317</commentid>
    <comment_count>60</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-24 17:28:07 -0700</bug_when>
    <thetext>(In reply to comment #59)
&gt; Comment on attachment 263976 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=263976&amp;action=review
&gt; 
&gt; Be patient, it&apos;s a big patch :)

Oh it&apos;ll take a while before I even get it to build everywhere!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3BasicBlock.h:46
&gt; &gt; +    typedef Vector&lt;FrequentedBlock, 2&gt; SuccessorList; // This matches ControlValue::SuccessorList
&gt; 
&gt; Instead of a comment, you could declare a BasicBlockSuccessorList type in
&gt; B3Type and typedef from it in BasicBlock and ControlValue.

That would require having BasicBlock.h include ControlValue.h, or vice versa.  I did this matching declaration of SuccessorList instead, so that we don&apos;t have an include dependency.  I figure that as the code grows, we&apos;ll discover some good reason for one of these headers to include the other, and it&apos;s better to leave it flexible for now.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3BasicBlock.h:75
&gt; &gt; +    FrequentedBlock successor(unsigned index) const;
&gt; 
&gt; Return
&gt;     const FrequentedBlock&amp;
&gt; instead?

I changed it.  Though, it probably doesn&apos;t make a huge difference since the code gets inlined anyway.  If we use FrequentedBlock instead of const FrequentedBlock&amp;, then after all of the inlining, you&apos;ll first have something like:

FrequentedBlock x = block-&gt;last()-&gt;as&lt;ControlValue&gt;()-&gt;m_successors[index];

But then after SROA, you get:

const FrequentedBlock&amp; xRef = block-&gt;last()-&gt;as&lt;ControlValue&gt;()-&gt;m_successors[index];
BasicBlock* xBlock = xRef.m_block;
FrequencyClass xFreq = xRef.m_frequency;

If you only use the block but not the frequency (or vice versa) then you&apos;ll only do that load.

In other words, it really shouldn&apos;t matter if the code is inlineable.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3BasicBlock.h:93
&gt; &gt; +    bool addPredecessor(BasicBlock*);
&gt; &gt; +    bool removePredecessor(BasicBlock*);
&gt; &gt; +    bool replacePredecessor(BasicBlock* from, BasicBlock* to);
&gt; 
&gt; It would be nice if those function could ASSERT that the new relation make
&gt; sense. It could check that the new predecessor&apos;s last Value* has this block
&gt; as a possible target.
&gt; 
&gt; removePredecessor could check that we are no longer a target.

If we did that, then you&apos;d have to always edit the successors before you edit the predecessors.  That seems arbitrary.  Why not the other way around? ;-)

This could easily get very annoying - you might have a transformation for which it&apos;s most convenient to edit the successors/predecessors in a particular order, and in that case we wouldn&apos;t want assertions to prevent us from using the most natural approach.

We can easily add a validation rule for predecessors.  If you make a mistake, you&apos;ll know exactly which phase caused it.  So, I think that BasicBlock should give you maximum flexibility to temporarily put the IR in an invalid state.  This is how the IR works in all other regards.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3BasicBlockUtils.h:56
&gt; &gt; +            predecessors[i--] = predecessors.last();
&gt; &gt; +            predecessors.removeLast();
&gt; 
&gt; This could be 
&gt;     predecessors[i--] = predecessors.takeLast();

No, it can&apos;t.  That would crash if predecessors had one element left and we were removing it.  takeLast() would make predecessors have zero elements, and then &quot;predecessors[i--] = ...&quot; would crash because i would be zero, the size would be zero, and if we&apos;re sufficiently unlucky we would have already deleted the backing store.  Even if we didn&apos;t delete the backing store, you&apos;d get one of those asserts with security implications. ;-)

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3FrequentedBlock.h:37
&gt; &gt; +typedef GenericFrequentedBlock&lt;BasicBlock&gt; FrequentedBlock;
&gt; 
&gt; Frequented sounds weird to me for &quot;something-with-a-frequency&quot;. English is
&gt; not my forte though :)
&gt; 
&gt; Maybe QuantifiedBlock or WeightedBlock?

I was going for a slightly weird name.  I wanted to call it BlockEdgeWithFrequency.  In the DFG, I called it BranchTarget, which ended up being a suboptimal name because I can never remember what exactly it means.

My hope was that FrequentedBlock sounds weird but is memorable enough that you&apos;ll instinctively know what it means.

QuantifiedBlock doesn&apos;t quite tell me that we&apos;re talking about the frequency.

WeightedBlock kind of tells me what this is about, but to me it sounds more like the block itself has a weight.  That&apos;s not true.  It&apos;s the edge to the block that has a &quot;weight&quot; (or frequency, in the current jargon).

&quot;FrequentedBlock&quot; also has the benefit that by virtue of being a goofy phrase, it alerts you to the fact that it&apos;s not the block that has the frequency.  The frequency tells us how often this predecessor jumps to that block.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:49
&gt; &gt; +    bool operator==(const GenericFrequentedBlock&amp; other) const
&gt; 
&gt; Do you need to declare this and the operator!=?
&gt; Aren&apos;t they doing the same as the generated ones?

I didn&apos;t know that the compiler synthesizes these!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3SuccessorCollection.h:35
&gt; &gt; +template&lt;typename BasicBlock, typename SuccessorList&gt;
&gt; 
&gt; Do you need the type BasicBlock?
&gt; 
&gt; You may be able to just use &quot;auto&quot; to get the right type out of
&gt; SuccessorList.

Well, I need to have a type declaration for the return values of at() and operator[]().  I don&apos;t think I can put auto as the return value.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3SuccessorCollection.h:36
&gt; &gt; +class SuccessorCollection {
&gt; 
&gt; Since the &quot;frequented&quot; successor list is named SuccessorList, 
&gt;     SuccessorCollection-&gt;SuccessorBlockList?

Well, so far when we say &quot;BlahList&quot;, it means that it&apos;s a Vector, oddly enough.  At the very list, it means that it&apos;s a list type that actually supports all of the list operations you&apos;d expect to see.  SuccessorCollection doesn&apos;t do that.  It allows for forward iteration and random access, but no appending or removing.  That&apos;s why I went for &quot;Collection&quot; instead of &quot;List&quot; - it doesn&apos;t really do all of the things you&apos;d expect a List to do.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3SuccessorCollection.h:58
&gt; &gt; +            : m_collection(const_cast&lt;SuccessorCollection*&gt;(&amp;collection)) // const is stupid anyway.
&gt; 
&gt; Why do you take the collection as const anyway?
&gt; 
&gt; Your begin() and end() are not const.

I don&apos;t remember.  I&apos;ll fiddle with this again.  So far, so good - removing the const and the cast appears to work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136323</commentid>
    <comment_count>61</comment_count>
      <attachid>263993</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-24 18:07:08 -0700</bug_when>
    <thetext>Created attachment 263993
the patch

Lots of fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136325</commentid>
    <comment_count>62</comment_count>
      <attachid>263994</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-24 18:16:12 -0700</bug_when>
    <thetext>Created attachment 263994
the patch

Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136327</commentid>
    <comment_count>63</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-24 18:20:39 -0700</bug_when>
    <thetext>Attachment 263994 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:104:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:118:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3StackSlotValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3Procedure.cpp:94:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirCCallSpecial.cpp:87:  Extra space between return and false  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/b3/B3PatchpointValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:118:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:118:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBasicBlock.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchValue.h:113:  The parameter name &quot;switchCase&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3SwitchValue.h:121:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirStackSlot.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:68:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:110:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.h:49:  The parameter name &quot;opcode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:85:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:38:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3BasicBlock.h:26:  #ifndef header guard has wrong style, please use: B3BasicBlock_h  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 46 in 135 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>1136333</commentid>
    <comment_count>64</comment_count>
      <attachid>263996</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-24 18:45:56 -0700</bug_when>
    <thetext>Created attachment 263996
the patch

More fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136335</commentid>
    <comment_count>65</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-24 18:48:32 -0700</bug_when>
    <thetext>Attachment 263996 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:104:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:118:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3StackSlotValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3Procedure.cpp:94:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirCCallSpecial.cpp:87:  Extra space between return and false  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/b3/B3PatchpointValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:118:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:118:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBasicBlock.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchValue.h:113:  The parameter name &quot;switchCase&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3SwitchValue.h:121:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirStackSlot.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:68:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:110:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.h:49:  The parameter name &quot;opcode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:85:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:38:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3BasicBlock.h:26:  #ifndef header guard has wrong style, please use: B3BasicBlock_h  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 46 in 135 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>1136336</commentid>
    <comment_count>66</comment_count>
      <attachid>263997</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-24 19:05:46 -0700</bug_when>
    <thetext>Created attachment 263997
the patch

More fixes for !ENABLE(B3_JIT).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136337</commentid>
    <comment_count>67</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-24 19:09:17 -0700</bug_when>
    <thetext>Attachment 263997 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:104:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:118:  The parameter name &quot;functor&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3StackSlotValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3Procedure.cpp:94:  Should have a space between // and comment  [whitespace/comments] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirCCallSpecial.cpp:87:  Extra space between return and false  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/b3/B3PatchpointValue.h:31:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:118:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/b3/B3StackmapSpecial.cpp:118:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirBasicBlock.h:34:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchValue.h:113:  The parameter name &quot;switchCase&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3SwitchValue.h:121:  The parameter name &quot;origin&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirStackSlot.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:70:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:110:  When wrapping a line, only indent 4 spaces.  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.h:49:  The parameter name &quot;opcode&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:85:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3Opcode.h:38:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3BasicBlock.h:26:  #ifndef header guard has wrong style, please use: B3BasicBlock_h  [build/header_guard] [5]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 46 in 135 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>1136342</commentid>
    <comment_count>68</comment_count>
      <attachid>264000</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-24 19:41:01 -0700</bug_when>
    <thetext>Created attachment 264000
the patch

Fixed a bunch of style issues.

But &gt;2/3 of the style issues that were reported are invalid.  The style checker doesn&apos;t know our C++11 style yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136343</commentid>
    <comment_count>69</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-24 19:44:37 -0700</bug_when>
    <thetext>Attachment 264000 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:70:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:85:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 29 in 135 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>1136534</commentid>
    <comment_count>70</comment_count>
      <attachid>264047</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-26 09:54:23 -0700</bug_when>
    <thetext>Created attachment 264047
the patch

Did some minor simplifications, filed more bugs, linked the bugs with FIXMEs and comments, and rebased.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136538</commentid>
    <comment_count>71</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-26 09:58:05 -0700</bug_when>
    <thetext>Attachment 264047 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:70:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:85:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 29 in 135 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>1136558</commentid>
    <comment_count>72</comment_count>
      <attachid>264051</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-26 10:55:22 -0700</bug_when>
    <thetext>Created attachment 264051
the patch

Made the dumps easier to read.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136561</commentid>
    <comment_count>73</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-26 10:59:32 -0700</bug_when>
    <thetext>Attachment 264051 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:98:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:70:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:85:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:129:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 29 in 135 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>1136699</commentid>
    <comment_count>74</comment_count>
      <attachid>264097</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-26 16:51:56 -0700</bug_when>
    <thetext>Created attachment 264097
the patch

Lots more test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136705</commentid>
    <comment_count>75</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-26 16:55:18 -0700</bug_when>
    <thetext>Attachment 264097 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:98:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:73:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:87:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:85:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:140:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:123:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 30 in 137 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>1136715</commentid>
    <comment_count>76</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-26 17:19:37 -0700</bug_when>
    <thetext>This is so cool.  Notice the epic ArgumentReg opcode in action.


testStore(44):
B3 after initial, before lowerToAir:
BB#0: ; frequency = nan
    Int64 @0 = ArgumentReg(%rdi)
    Int32 @1 = Trunc(@0)
    Int64 @2 = Const64(140734534183196)
    Void @3 = Store(@1, @2)
    Int32 @4 = Const32(0)
    Void @5 = Return(@4)
Air after initial, before spillEverything:
BB#0: ; frequency = nan
    Move %rdi, %tmp3, @0
    Move %tmp3, %tmp1, @1
    Move $0x7fff4feae91c, %tmp2, @2
    Move32 %tmp1, (%tmp2), @3
    Move $0, %tmp0, @4
    Move $0, %rax, @5
    Ret @5
Air after spillEverything, before handleCalleeSaves:
BB#0: ; frequency = nan
    Move %rdi, %rax, @0
    Move %rax, (stack0), @0
    Move (stack0), %rcx, @1
    Move %rcx, %rax, @1
    Move %rax, (stack2), @1
    Move $0x7fff4feae91c, %rax, @2
    Move %rax, (stack1), @2
    Move (stack2), %rcx, @3
    Move (stack1), %rdx, @3
    Move32 %rcx, (%rdx), @3
    Move $0, %rax, @4
    Move %rax, (stack3), @4
    Move $0, %rax, @5
    Ret @5
Stack slots:
    stack0: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack1: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack2: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack3: byteSize = 8, offsetFromFP = 0, kind = Anonymous
Air after handleCalleeSaves, before allocateStack:
BB#0: ; frequency = nan
    Move %rdi, %rax, @0
    Move %rax, (stack0), @0
    Move (stack0), %rcx, @1
    Move %rcx, %rax, @1
    Move %rax, (stack2), @1
    Move $0x7fff4feae91c, %rax, @2
    Move %rax, (stack1), @2
    Move (stack2), %rcx, @3
    Move (stack1), %rdx, @3
    Move32 %rcx, (%rdx), @3
    Move $0, %rax, @4
    Move %rax, (stack3), @4
    Move $0, %rax, @5
    Ret @5
Stack slots:
    stack0: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack1: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack2: byteSize = 8, offsetFromFP = 0, kind = Anonymous
    stack3: byteSize = 8, offsetFromFP = 0, kind = Anonymous
Air after allocateStack, before generation:
BB#0: ; frequency = nan
    Move %rdi, %rax, @0
    Move %rax, -8(%rbp), @0
    Move -8(%rbp), %rcx, @1
    Move %rcx, %rax, @1
    Move %rax, -16(%rbp), @1
    Move $0x7fff4feae91c, %rax, @2
    Move %rax, -8(%rbp), @2
    Move -16(%rbp), %rcx, @3
    Move -8(%rbp), %rdx, @3
    Move32 %rcx, (%rdx), @3
    Move $0, %rax, @4
    Move %rax, -8(%rbp), @4
    Move $0, %rax, @5
    Ret @5
Stack slots:
    stack0: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack1: byteSize = 8, offsetFromFP = -8, kind = Anonymous
    stack2: byteSize = 8, offsetFromFP = -16, kind = Anonymous
    stack3: byteSize = 8, offsetFromFP = -8, kind = Anonymous
Frame size: 16
Generated JIT code for testb3:
    Code at [0x564c6d401000, 0x564c6d401040):
      0x564c6d401000: push %rbp
      0x564c6d401001: mov %rsp, %rbp
      0x564c6d401004: add $0xfffffffffffffff0, %rsp
      0x564c6d401008: mov %rdi, %rax
      0x564c6d40100b: mov %rax, -0x8(%rbp)
      0x564c6d40100f: mov -0x8(%rbp), %rcx
      0x564c6d401013: mov %rcx, %rax
      0x564c6d401016: mov %rax, -0x10(%rbp)
      0x564c6d40101a: mov $0x7fff4feae91c, %rax
      0x564c6d401024: mov %rax, -0x8(%rbp)
      0x564c6d401028: mov -0x10(%rbp), %rcx
      0x564c6d40102c: mov -0x8(%rbp), %rdx
      0x564c6d401030: mov %ecx, (%rdx)
      0x564c6d401032: xor %eax, %eax
      0x564c6d401034: mov %rax, -0x8(%rbp)
      0x564c6d401038: xor %eax, %eax
      0x564c6d40103a: mov %rbp, %rsp
      0x564c6d40103d: pop %rbp
      0x564c6d40103e: ret 
    OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136747</commentid>
    <comment_count>77</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-26 19:08:42 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=264051&amp;action=review

Some more feedback. Some comments are probably useless, I don&apos;t have the context for everything yet.

&gt; Source/JavaScriptCore/b3/B3ArgumentRegValue.h:36
&gt; +class ArgumentRegValue : public Value {

Missing JS_EXPORT_PRIVATE?

&gt; Source/JavaScriptCore/b3/B3CheckSpecial.cpp:63
&gt; +{

ASSERT opcode is one of the 4 valid ones?

&gt; Source/JavaScriptCore/b3/B3CheckSpecial.cpp:75
&gt; +    hiddenBranch.args.resize(m_numCheckArgs);
&gt; +    for (unsigned i = m_numCheckArgs; i--;)
&gt; +        hiddenBranch.args[i] = inst.args[i + 1];

Maybe
    hiddenBranch.args.reserveInitialCapacity(m_numCheckArgs);
    for (unsigned i = 0; i &lt; m_numCheckArgs; ++i)
        hiddenBranch.args.appendUnchecked(inst.args[i + 1]);
To avoid calling the Arg() constructor for every cell of hiddenBranch.args.resize().

&gt; Source/JavaScriptCore/b3/B3CheckSpecial.h:34
&gt; +namespace JSC { namespace B3 {

Should this be in the Air namespace?

&gt; Source/JavaScriptCore/b3/B3CheckSpecial.h:43
&gt; +// Note that for CheckAdd, CheckSub, and CheckMul we expect that the B3 arguments are the reverse
&gt; +// of the Air arguments (Add(a, b) =&gt; Add32 b, a). Except:

This is a weird convention.
Aren&apos;t you talking specifically about x86 Integer lowering?

&gt; Source/JavaScriptCore/b3/B3CheckSpecial.h:53
&gt; +    Air::Inst hiddenBranch(const Air::Inst&amp;) const;

Looks like it could be private.

&gt; Source/JavaScriptCore/b3/B3CheckValue.h:36
&gt; +class CheckValue : public Value {

Aren&apos;t you missing the JS_EXPORT_PRIVATE?

&gt; Source/JavaScriptCore/b3/B3ComparisonMatcher.patterns:24
&gt; +matcher ComparisonMatcher

I don&apos;t see this Matcher being used anywhere. Not sure what&apos;s your plan for it.

&gt; Source/JavaScriptCore/b3/B3Const64Value.h:35
&gt; +class Const64Value : public Value {

JS_EXPORT_PRIVATE?

&gt; Source/JavaScriptCore/b3/B3Stackmap.h:43
&gt; +class Stackmap {
&gt; +public:

If I am not mistaken, this is never copied at the moment. That&apos;s good since it contains a Vector.

It may be worth adding WTF_MAKE_NONCOPYABLE() to safe-proof future uses.

&gt; Source/JavaScriptCore/b3/B3Stackmap.h:61
&gt; +    Stackmap()

Could be out of line.

&gt; Source/JavaScriptCore/b3/B3Stackmap.h:64
&gt; +

Missing an out of line destructor on this one.

&gt; Source/JavaScriptCore/b3/B3Stackmap.h:81
&gt; +    // Set some opaque data to identify this stackmap. This is useful because a Stackmap-using Value
&gt; +    // can be duplicated, and each duplicate may end up having different register allocation. This
&gt; +    // allows all of those duplicates to be able to refer back to whatever high-level data structures
&gt; +    // we were using to create the value.
&gt; +    void setOpaque(void* parameter)
&gt; +    {
&gt; +        m_opaque = parameter;
&gt; +    }
&gt; +    void* opaque() const { return m_opaque; }
&gt; +
&gt; +    // Convenience helpers when using indices instead of pointers.
&gt; +    void setOpaqueIndex(size_t index)
&gt; +    {
&gt; +        setOpaque(bitwise_cast&lt;void*&gt;(index));
&gt; +    }
&gt; +    size_t opaqueIndex() const { return bitwise_cast&lt;size_t&gt;(opaque()); }
&gt; +

The opaque data looks unused.
Let&apos;s remove it. It&apos;s easy to add back when it will be needed.

&gt; Source/JavaScriptCore/b3/B3Stackmap.h:90
&gt; +        if (index + 1 &lt; m_reps.size())

Wrong sign?
    index + 1 &gt; m_reps.size()
or
    index &gt;= m_reps.size()

&gt; Source/JavaScriptCore/b3/B3Stackmap.h:122
&gt; +    RefPtr&lt;Generator&gt; m_generator;

I assume that&apos;s the Special&apos;s generator?
I find it a bit weird that it is on the StackMap. It may make more sense as I read more of the context.

&gt; Source/JavaScriptCore/b3/B3ValueRep.h:154
&gt; +    int64_t m_value;

I think this would look cleaner as an Union of Reg and intptr_t.
union {
    Reg register,
    intptr_t offsetFromFP,
    intptr_t offsetFromSP,
} m_value;

&gt; Source/JavaScriptCore/b3/air/AirSpecial.h:96
&gt; +    unsigned m_index;

I don&apos;t see this being used anywhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136762</commentid>
    <comment_count>78</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-26 21:58:38 -0700</bug_when>
    <thetext>(In reply to comment #77)
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264051&amp;action=review
&gt; 
&gt; Some more feedback. Some comments are probably useless, I don&apos;t have the
&gt; context for everything yet.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ArgumentRegValue.h:36
&gt; &gt; +class ArgumentRegValue : public Value {
&gt; 
&gt; Missing JS_EXPORT_PRIVATE?

Yeah, I&apos;ll make sure I add it. I may have added it in the last version. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CheckSpecial.cpp:63
&gt; &gt; +{
&gt; 
&gt; ASSERT opcode is one of the 4 valid ones?

Sure!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CheckSpecial.cpp:75
&gt; &gt; +    hiddenBranch.args.resize(m_numCheckArgs);
&gt; &gt; +    for (unsigned i = m_numCheckArgs; i--;)
&gt; &gt; +        hiddenBranch.args[i] = inst.args[i + 1];
&gt; 
&gt; Maybe
&gt;     hiddenBranch.args.reserveInitialCapacity(m_numCheckArgs);
&gt;     for (unsigned i = 0; i &lt; m_numCheckArgs; ++i)
&gt;         hiddenBranch.args.appendUnchecked(inst.args[i + 1]);
&gt; To avoid calling the Arg() constructor for every cell of
&gt; hiddenBranch.args.resize().

That&apos;s interesting. I can do that. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CheckSpecial.h:34
&gt; &gt; +namespace JSC { namespace B3 {
&gt; 
&gt; Should this be in the Air namespace?

Ugh this code is dead for now so it&apos;s hard to see the context. It was important for me to write it because I needed to see that it made sense, and in fact I changed how Air worked as a result of this exercise. I think it&apos;s better to land this dead code though, so that our expectations from the compiler for the purpose of patchpoints are documented in a compiler-enforced manner. 

That said, the way this will work is that this is sort of private to B3LowerToAir.cpp. I&apos;m usually erring on the side of using the B3 namespace for code that knows about both Air and B3. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CheckSpecial.h:43
&gt; &gt; +// Note that for CheckAdd, CheckSub, and CheckMul we expect that the B3 arguments are the reverse
&gt; &gt; +// of the Air arguments (Add(a, b) =&gt; Add32 b, a). Except:
&gt; 
&gt; This is a weird convention.
&gt; Aren&apos;t you talking specifically about x86 Integer lowering?

This is the convention that our MacroAssembler uses, and Air just follows that. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CheckSpecial.h:53
&gt; &gt; +    Air::Inst hiddenBranch(const Air::Inst&amp;) const;
&gt; 
&gt; Looks like it could be private.

Sure!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3CheckValue.h:36
&gt; &gt; +class CheckValue : public Value {
&gt; 
&gt; Aren&apos;t you missing the JS_EXPORT_PRIVATE?

Yes. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ComparisonMatcher.patterns:24
&gt; &gt; +matcher ComparisonMatcher
&gt; 
&gt; I don&apos;t see this Matcher being used anywhere. Not sure what&apos;s your plan for
&gt; it.

I will remove it. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Const64Value.h:35
&gt; &gt; +class Const64Value : public Value {
&gt; 
&gt; JS_EXPORT_PRIVATE?

Yes. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Stackmap.h:43
&gt; &gt; +class Stackmap {
&gt; &gt; +public:
&gt; 
&gt; If I am not mistaken, this is never copied at the moment. That&apos;s good since
&gt; it contains a Vector.
&gt; 
&gt; It may be worth adding WTF_MAKE_NONCOPYABLE() to safe-proof future uses.

It&apos;s meant to be copied. :-)

One of the principles that a good compiler IR should follow is that it should make it possible to easily duplicate code. This is necessary for things like loop peeling, loop unrolling, tail duplication, jump threading, and path specialization. All of those also happen to be classic optimizations for high level languages. 

All B3::Value classes are already designed to make copying easy. The code for cloning a Value isn&apos;t there yet, and we may never need those optimizations. But the duplication capability is something you sort of need to bake into the IR from the start, for example by making sure that any data setructure owned by a Value is copyable. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Stackmap.h:61
&gt; &gt; +    Stackmap()
&gt; 
&gt; Could be out of line.

Sure!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Stackmap.h:64
&gt; &gt; +
&gt; 
&gt; Missing an out of line destructor on this one.

Sure. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Stackmap.h:81
&gt; &gt; +    // Set some opaque data to identify this stackmap. This is useful because a Stackmap-using Value
&gt; &gt; +    // can be duplicated, and each duplicate may end up having different register allocation. This
&gt; &gt; +    // allows all of those duplicates to be able to refer back to whatever high-level data structures
&gt; &gt; +    // we were using to create the value.
&gt; &gt; +    void setOpaque(void* parameter)
&gt; &gt; +    {
&gt; &gt; +        m_opaque = parameter;
&gt; &gt; +    }
&gt; &gt; +    void* opaque() const { return m_opaque; }
&gt; &gt; +
&gt; &gt; +    // Convenience helpers when using indices instead of pointers.
&gt; &gt; +    void setOpaqueIndex(size_t index)
&gt; &gt; +    {
&gt; &gt; +        setOpaque(bitwise_cast&lt;void*&gt;(index));
&gt; &gt; +    }
&gt; &gt; +    size_t opaqueIndex() const { return bitwise_cast&lt;size_t&gt;(opaque()); }
&gt; &gt; +
&gt; 
&gt; The opaque data looks unused.
&gt; Let&apos;s remove it. It&apos;s easy to add back when it will be needed.

Actually it&apos;s completely redundant since the client could encapsulate it using the m_generator b

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Stackmap.h:90
&gt; &gt; +        if (index + 1 &lt; m_reps.size())
&gt; 
&gt; Wrong sign?
&gt;     index + 1 &gt; m_reps.size()
&gt; or
&gt;     index &gt;= m_reps.size()

Oops. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Stackmap.h:122
&gt; &gt; +    RefPtr&lt;Generator&gt; m_generator;
&gt; 
&gt; I assume that&apos;s the Special&apos;s generator?
&gt; I find it a bit weird that it is on the StackMap. It may make more sense as
&gt; I read more of the context.

Where else would it be?  The idea is that the client that creates a patchpoint or CheckValue needs to supply a generator. 

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ValueRep.h:154
&gt; &gt; +    int64_t m_value;
&gt; 
&gt; I think this would look cleaner as an Union of Reg and intptr_t.
&gt; union {
&gt;     Reg register,
&gt;     intptr_t offsetFromFP,
&gt;     intptr_t offsetFromSP,
&gt; } m_value;

But I can&apos;t have Reg in the union!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirSpecial.h:96
&gt; &gt; +    unsigned m_index;
&gt; 
&gt; I don&apos;t see this being used anywhere.

Dumping.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136763</commentid>
    <comment_count>79</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-26 22:01:51 -0700</bug_when>
    <thetext>
&gt; &gt; 
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3CheckSpecial.cpp:63
&gt; &gt; &gt; +{
&gt; &gt; 
&gt; &gt; ASSERT opcode is one of the 4 valid ones?
&gt; 
&gt; Sure!

Actually, no.  This could be any branching opcode.  The B3::Opcode is one of the 4 valid ones, but the Air::Opcode could be any branch.  I guess I can add an ASSERT that it&apos;s a branch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136774</commentid>
    <comment_count>80</comment_count>
      <attachid>264121</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-26 23:45:51 -0700</bug_when>
    <thetext>Created attachment 264121
the patch

More tests, more little fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136776</commentid>
    <comment_count>81</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-26 23:48:19 -0700</bug_when>
    <thetext>Attachment 264121 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:98:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:73:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:87:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:143:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:158:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 32 in 136 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>1136778</commentid>
    <comment_count>82</comment_count>
      <attachid>264122</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-27 00:01:12 -0700</bug_when>
    <thetext>Created attachment 264122
the patch

With build fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136781</commentid>
    <comment_count>83</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-27 00:05:07 -0700</bug_when>
    <thetext>Attachment 264122 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:98:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:73:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:87:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:143:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:158:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 32 in 136 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>1136854</commentid>
    <comment_count>84</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-27 10:56:55 -0700</bug_when>
    <thetext>(In reply to comment #78)
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3Stackmap.h:122
&gt; &gt; &gt; +    RefPtr&lt;Generator&gt; m_generator;
&gt; &gt; 
&gt; &gt; I assume that&apos;s the Special&apos;s generator?
&gt; &gt; I find it a bit weird that it is on the StackMap. It may make more sense as
&gt; &gt; I read more of the context.
&gt; 
&gt; Where else would it be?  The idea is that the client that creates a
&gt; patchpoint or CheckValue needs to supply a generator. 

I was expecting it on the value.
I&apos;ll need some more reading to have a informed opinion. My understanding of the Specials is still very high level.

&gt; &gt; &gt; Source/JavaScriptCore/b3/B3ValueRep.h:154
&gt; &gt; &gt; +    int64_t m_value;
&gt; &gt; 
&gt; &gt; I think this would look cleaner as an Union of Reg and intptr_t.
&gt; &gt; union {
&gt; &gt;     Reg register,
&gt; &gt;     intptr_t offsetFromFP,
&gt; &gt;     intptr_t offsetFromSP,
&gt; &gt; } m_value;
&gt; 
&gt; But I can&apos;t have Reg in the union!

You can with C++11. It is used a bit in WebCore. You just need to be explicit about construction/destruction.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136861</commentid>
    <comment_count>85</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-27 11:13:16 -0700</bug_when>
    <thetext>(In reply to comment #84)
&gt; (In reply to comment #78)
&gt; &gt; &gt; &gt; Source/JavaScriptCore/b3/B3Stackmap.h:122
&gt; &gt; &gt; &gt; +    RefPtr&lt;Generator&gt; m_generator;
&gt; &gt; &gt; 
&gt; &gt; &gt; I assume that&apos;s the Special&apos;s generator?
&gt; &gt; &gt; I find it a bit weird that it is on the StackMap. It may make more sense as
&gt; &gt; &gt; I read more of the context.
&gt; &gt; 
&gt; &gt; Where else would it be?  The idea is that the client that creates a
&gt; &gt; patchpoint or CheckValue needs to supply a generator. 
&gt; 
&gt; I was expecting it on the value.
&gt; I&apos;ll need some more reading to have a informed opinion. My understanding of
&gt; the Specials is still very high level.

In B3, we have either CheckValue or PatchpointValue. Instead of subclassing from StackmapValue, I have both of them have a Stackmap field inside them. You can think of Stackmap as &quot;those things that are common between CheckValue and PatchpointValue&quot;. It&apos;s not clear that CheckValue and PatchpointValue should be separate classes, maybe we could fold Stackmap, CheckValue, and PatchpointValue into just StackmapValue. At some point I had things in PatchpointValue that I didn&apos;t have in StackmapValue, and after I removed those extra things, I still kept the separation because I was more interested in just completing the patch.

In Air, the patchpoints and checks get lowered to a Patch opcode with an Air::Special as its first operand. Air doesn&apos;t know anything about patchpoints, stackmaps, or checks. It only knows that a Patch instruction&apos;s behavior is determined by the virtual methods in Air::Special. When B3 lowers patchpoints, checks, etc to Air, it uses its own subclasses of Air::Special.

&gt; 
&gt; &gt; &gt; &gt; Source/JavaScriptCore/b3/B3ValueRep.h:154
&gt; &gt; &gt; &gt; +    int64_t m_value;
&gt; &gt; &gt; 
&gt; &gt; &gt; I think this would look cleaner as an Union of Reg and intptr_t.
&gt; &gt; &gt; union {
&gt; &gt; &gt;     Reg register,
&gt; &gt; &gt;     intptr_t offsetFromFP,
&gt; &gt; &gt;     intptr_t offsetFromSP,
&gt; &gt; &gt; } m_value;
&gt; &gt; 
&gt; &gt; But I can&apos;t have Reg in the union!
&gt; 
&gt; You can with C++11. It is used a bit in WebCore. You just need to be
&gt; explicit about construction/destruction.

Interesting, I&apos;ll try it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136871</commentid>
    <comment_count>86</comment_count>
      <attachid>264146</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-27 11:41:26 -0700</bug_when>
    <thetext>Created attachment 264146
the patch

Added another immediate form handler in appendBinOp.  Switched B3::ValueRep to use a union.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1136872</commentid>
    <comment_count>87</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-27 11:44:14 -0700</bug_when>
    <thetext>Attachment 264146 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:98:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:124:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:73:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:87:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:143:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:158:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 32 in 136 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>1136946</commentid>
    <comment_count>88</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-27 14:59:57 -0700</bug_when>
    <thetext>(In reply to comment #85)
&gt; (In reply to comment #84)
&gt; &gt; (In reply to comment #78)
&gt; &gt; &gt; &gt; &gt; Source/JavaScriptCore/b3/B3Stackmap.h:122
&gt; &gt; &gt; &gt; &gt; +    RefPtr&lt;Generator&gt; m_generator;
&gt; &gt; &gt; &gt; 
&gt; &gt; &gt; &gt; I assume that&apos;s the Special&apos;s generator?
&gt; &gt; &gt; &gt; I find it a bit weird that it is on the StackMap. It may make more sense as
&gt; &gt; &gt; &gt; I read more of the context.
&gt; &gt; &gt; 
&gt; &gt; &gt; Where else would it be?  The idea is that the client that creates a
&gt; &gt; &gt; patchpoint or CheckValue needs to supply a generator. 
&gt; &gt; 
&gt; &gt; I was expecting it on the value.
&gt; &gt; I&apos;ll need some more reading to have a informed opinion. My understanding of
&gt; &gt; the Specials is still very high level.
&gt; 
&gt; In B3, we have either CheckValue or PatchpointValue. Instead of subclassing
&gt; from StackmapValue, I have both of them have a Stackmap field inside them.
&gt; You can think of Stackmap as &quot;those things that are common between
&gt; CheckValue and PatchpointValue&quot;. It&apos;s not clear that CheckValue and
&gt; PatchpointValue should be separate classes, maybe we could fold Stackmap,
&gt; CheckValue, and PatchpointValue into just StackmapValue. At some point I had
&gt; things in PatchpointValue that I didn&apos;t have in StackmapValue, and after I
&gt; removed those extra things, I still kept the separation because I was more
&gt; interested in just completing the patch.

Oh, I remember why I wanted PatchpointValue to be separate: patchpoints will require effectfulness annotations, while Check/CheckAdd/CheckMul/CheckSub are always effect-free.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137016</commentid>
    <comment_count>89</comment_count>
      <attachid>264146</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-27 17:53:14 -0700</bug_when>
    <thetext>Comment on attachment 264146
the patch

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

&gt; Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:43
&gt; +    explicit GenericFrequentedBlock(
&gt; +        BasicBlock* block = nullptr, FrequencyClass frequency = FrequencyClass::Normal)

Could be on one line.

&gt; Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:58
&gt; +    bool operator==(const GenericFrequentedBlock&amp; other) const
&gt; +    {
&gt; +        return m_block == other.m_block
&gt; +            &amp;&amp; m_frequency == other.m_frequency;
&gt; +    }
&gt; +
&gt; +    bool operator!=(const GenericFrequentedBlock&amp; other) const
&gt; +    {
&gt; +        return !(*this == other);
&gt; +    }

I don&apos;t think you need that. Clang does it for you.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:68
&gt; +        for (B3::BasicBlock* block : procedure)

The next loop goes over the block in pre-order.

Maybe it would be better to get the block list in pre-order, then allocate the Air block in that order. That way blocks used together are more likely to be allocated together.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:73
&gt; +        for (B3::BasicBlock* block : procedure.blocksInPreOrder()) {

It&apos;s beautiful how simple this stage is. I hope it will stay like this when complexity adds up.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:109
&gt; +

Everything after this could be private.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:153
&gt; +        if (value-&gt;hasInt32())
&gt; +            return Arg::imm(value-&gt;asInt32());

else if (value-&gt;hasInt64())
    return Arg::imm64(value-&gt;asInt64());

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:211
&gt; +                // FIXME: Use the right Move opcode. If we&apos;re dealing with 32-bit types, we should
&gt; +                // use Move32. If we&apos;re dealing with Doubles, we should use MoveDouble.
&gt; +                // https://bugs.webkit.org/show_bug.cgi?id=150533

Use moveForType() and remove the FIXME?

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:220
&gt; +            append(Move, tmp(left), result);

Use moveForType()?

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:354
&gt; +            selectedAddress = Arg::index(
&gt; +                lower.tmp(base), lower.tmp(index), 1 &lt;&lt; logScale-&gt;asInt());

Could be on a single line.

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:440
&gt; +        switch (currentValue-&gt;type()) {

You could replace the switch with:
    append(moveForType(currentValue-&gt;type()), effectiveAddr(address), tmp(currentValue));

&gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:442
&gt; +            append(Move32, effectiveAddr(address), tmp(currentValue));

In my opinion, it is easier to follow IR that use explicit Load/Store instead of move to/from addresses.

I&apos;d split the MoveXX into Move-Load-Store.

&gt; Source/JavaScriptCore/b3/B3MemoryValue.h:104
&gt; +    MemoryValue(unsigned index, Opcode opcode, Origin origin, Value* pointer, int32_t offset = 0)

Isn&apos;t this always better than the previous form?
The explicit type argument looks error prone.

You could invoke the generic constructor from here instead to have some more precondition assertions for free.

&gt; Source/JavaScriptCore/b3/B3MemoryValue.h:127
&gt; +        : Value(index, opcode, Void, origin, value, pointer)

Ditto, you can invoke the main constructor instead.

&gt; Source/JavaScriptCore/b3/B3Opcode.h:87
&gt; +    SExt8,
&gt; +    SExt16,
&gt; +    // Takes Int32 and returns Int64:
&gt; +    SExt32,

Tempted to write it as SexT8/16/32 for the lolz

&gt; Source/JavaScriptCore/b3/B3Opcode.h:120
&gt; +    LoadFloat,

LoadDouble?

&gt; Source/JavaScriptCore/b3/B3Opcode.h:121
&gt; +    // This return whatever the return type is:

is: ?

&gt; Source/JavaScriptCore/b3/B3Opcode.h:129
&gt; +    StoreFloat,

StoreDouble?

&gt; Source/JavaScriptCore/b3/B3Procedure.cpp:48
&gt; +    std::unique_ptr&lt;BasicBlock&gt; block(new BasicBlock(m_blocks.size(), frequency));

IIRC, Darin prefers:
    auto block = make_unique&lt;&gt;(...);

&gt; Source/JavaScriptCore/b3/B3Procedure.h:88
&gt; +        {

ASSERT(m_procedure == other.m_procedure);
?

&gt; Source/JavaScriptCore/b3/B3Procedure.h:148
&gt; +            {

ASSERT(m_procedure == other.m_procedure); ?

&gt; Source/JavaScriptCore/b3/B3ProcedureInlines.h:39
&gt; +    std::unique_ptr&lt;ValueType&gt; value(new ValueType(m_values.size(), arguments...));

auto, make_unique thingy

&gt; Source/JavaScriptCore/b3/B3SuccessorCollection.h:58
&gt; +            : m_collection(&amp;collection) // const is stupid anyway.

You can remove the comment now.

&gt; Source/JavaScriptCore/b3/B3SuccessorCollection.h:75
&gt; +        {

ASSERT(m_collection == other.m_collection);

&gt; Source/JavaScriptCore/b3/B3SwitchValue.h:89
&gt; +        {

ASSERT(m_switch == other.m_switch);

&gt; Source/JavaScriptCore/b3/B3UseCounts.cpp:40
&gt; +            m_counts[child]++;

You may want to give Upsilons a useCount of 1 for consistency.

Not important with the current use of UseCounts.

&gt; Source/JavaScriptCore/b3/B3Validate.cpp:84
&gt; +                VALIDATE(
&gt; +                    blocks.contains(successor), (&quot;At &quot;, *block, &quot;-&gt;&quot;, pointerDump(successor)));

Could be on a single line.

&gt; Source/JavaScriptCore/b3/B3Value.h:57
&gt; +    // Note that the opcode is immutable, except for replacing values with identity.

identity or noop!

&gt; Source/JavaScriptCore/b3/air/AirCode.cpp:47
&gt; +    std::unique_ptr&lt;BasicBlock&gt; block(new BasicBlock(m_blocks.size(), frequency));

IIRC, Darin prefers:
    auto block = make_unique&lt;&gt;(...);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137018</commentid>
    <comment_count>90</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-27 17:53:35 -0700</bug_when>
    <thetext>*** Bug 150480 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137019</commentid>
    <comment_count>91</comment_count>
      <attachid>264185</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-27 17:54:15 -0700</bug_when>
    <thetext>Created attachment 264185
the patch

I added a B3 validater.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137022</commentid>
    <comment_count>92</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-27 17:58:39 -0700</bug_when>
    <thetext>Attachment 264185 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:75:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:127:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:128:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:126:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:144:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:73:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:87:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:143:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:158:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 32 in 137 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>1137024</commentid>
    <comment_count>93</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-27 18:08:43 -0700</bug_when>
    <thetext>(In reply to comment #89)
&gt; Comment on attachment 264146 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264146&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:43
&gt; &gt; +    explicit GenericFrequentedBlock(
&gt; &gt; +        BasicBlock* block = nullptr, FrequencyClass frequency = FrequencyClass::Normal)
&gt; 
&gt; Could be on one line.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:58
&gt; &gt; +    bool operator==(const GenericFrequentedBlock&amp; other) const
&gt; &gt; +    {
&gt; &gt; +        return m_block == other.m_block
&gt; &gt; +            &amp;&amp; m_frequency == other.m_frequency;
&gt; &gt; +    }
&gt; &gt; +
&gt; &gt; +    bool operator!=(const GenericFrequentedBlock&amp; other) const
&gt; &gt; +    {
&gt; &gt; +        return !(*this == other);
&gt; &gt; +    }
&gt; 
&gt; I don&apos;t think you need that. Clang does it for you.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:68
&gt; &gt; +        for (B3::BasicBlock* block : procedure)
&gt; 
&gt; The next loop goes over the block in pre-order.
&gt; 
&gt; Maybe it would be better to get the block list in pre-order, then allocate
&gt; the Air block in that order. That way blocks used together are more likely
&gt; to be allocated together.

Pre-order walks are useful for when you want defs before uses. But the point of this lowering is for the Air CFG to be ordered the same way as the B3 CFG. That&apos;s why block creation is in-order.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:73
&gt; &gt; +        for (B3::BasicBlock* block : procedure.blocksInPreOrder()) {
&gt; 
&gt; It&apos;s beautiful how simple this stage is. I hope it will stay like this when
&gt; complexity adds up.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:109
&gt; &gt; +
&gt; 
&gt; Everything after this could be private.

Almost did that, and then I realized that this is in an anonymous namespace and that if we added any other classes to the anonymous namespace, then they would all be friends of this one. ;-)

But I&apos;ll change it.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:153
&gt; &gt; +        if (value-&gt;hasInt32())
&gt; &gt; +            return Arg::imm(value-&gt;asInt32());
&gt; 
&gt; else if (value-&gt;hasInt64())
&gt;     return Arg::imm64(value-&gt;asInt64());

No.  The imm() method is for cases where the immediate can be an operand to an Air instruction.  If imm() returns the empty Arg(), it means that it&apos;s not possible to represent this Value* as an Arg::imm(). It would be wrong to return an Arg::imm64() here. Doing so would cause invalid lowering for things like this (taken from appendBinOp):

        if (imm(right) &amp;&amp; isValidForm(opcode, Arg::Tmp, Arg::Imm, Arg::Tmp)) {
            append(opcode, tmp(left), imm(right), result);
            return;
        }

Notice how we&apos;re using imm(Value*) as a predicate, and if it returns non-empty, and the instruction supports a form that takes Arg::imm() for the second operand, then we emit such an instruction. This code would become incorrect if imm() could return an Arg::imm64().

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:211
&gt; &gt; +                // FIXME: Use the right Move opcode. If we&apos;re dealing with 32-bit types, we should
&gt; &gt; +                // use Move32. If we&apos;re dealing with Doubles, we should use MoveDouble.
&gt; &gt; +                // https://bugs.webkit.org/show_bug.cgi?id=150533
&gt; 
&gt; Use moveForType() and remove the FIXME?

Can&apos;t use moveForType().  We need something like coalescableMoveForType(), which uses Move instead of Move32 even for Int32.

If we used Move32 then the coalesce code would consider it off-limits since Move32 also does a zero-extend - so it&apos;s not a bit-for-bit move.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:220
&gt; &gt; +            append(Move, tmp(left), result);
&gt; 
&gt; Use moveForType()?

Ditto.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:354
&gt; &gt; +            selectedAddress = Arg::index(
&gt; &gt; +                lower.tmp(base), lower.tmp(index), 1 &lt;&lt; logScale-&gt;asInt());
&gt; 
&gt; Could be on a single line.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:440
&gt; &gt; +        switch (currentValue-&gt;type()) {
&gt; 
&gt; You could replace the switch with:
&gt;     append(moveForType(currentValue-&gt;type()), effectiveAddr(address),
&gt; tmp(currentValue));

Good call!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:442
&gt; &gt; +            append(Move32, effectiveAddr(address), tmp(currentValue));
&gt; 
&gt; In my opinion, it is easier to follow IR that use explicit Load/Store
&gt; instead of move to/from addresses.
&gt; 
&gt; I&apos;d split the MoveXX into Move-Load-Store.

That would break spilling. We want &quot;Move %tmp1, %tmp2&quot; to turn into &quot;Move (%stack1), %tmp2&quot; if we spill %tmp1.

Also, so long as math/compare/etc ops support addresses for operands, we&apos;re essentially acknowledging that Air is an orthogonal ISA (https://en.wikipedia.org/wiki/Orthogonal_instruction_set), then the accepted terminology for &quot;Load/Store&quot; is &quot;Move&quot;.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3MemoryValue.h:104
&gt; &gt; +    MemoryValue(unsigned index, Opcode opcode, Origin origin, Value* pointer, int32_t offset = 0)
&gt; 
&gt; Isn&apos;t this always better than the previous form?
&gt; The explicit type argument looks error prone.

You need to supply it for Load.

&gt; 
&gt; You could invoke the generic constructor from here instead to have some more
&gt; precondition assertions for free.

Good call.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3MemoryValue.h:127
&gt; &gt; +        : Value(index, opcode, Void, origin, value, pointer)
&gt; 
&gt; Ditto, you can invoke the main constructor instead.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:87
&gt; &gt; +    SExt8,
&gt; &gt; +    SExt16,
&gt; &gt; +    // Takes Int32 and returns Int64:
&gt; &gt; +    SExt32,
&gt; 
&gt; Tempted to write it as SexT8/16/32 for the lolz

Haha!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:120
&gt; &gt; +    LoadFloat,
&gt; 
&gt; LoadDouble?

Load with a type() of Double.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:121
&gt; &gt; +    // This return whatever the return type is:
&gt; 
&gt; is: ?

Value::type().

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Opcode.h:129
&gt; &gt; +    StoreFloat,
&gt; 
&gt; StoreDouble?

Store with child(0)-&gt;type() == Double.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Procedure.cpp:48
&gt; &gt; +    std::unique_ptr&lt;BasicBlock&gt; block(new BasicBlock(m_blocks.size(), frequency));
&gt; 
&gt; IIRC, Darin prefers:
&gt;     auto block = make_unique&lt;&gt;(...);

I prefer it, too. But this causes Visual Studio build breakage because make_unique&lt;&gt; isn&apos;t granted permission to invoke BasicBlock&apos;s private constructor.  This is a convenient way of side-stepping the issue, and it&apos;s better than using friend or public.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Procedure.h:88
&gt; &gt; +        {
&gt; 
&gt; ASSERT(m_procedure == other.m_procedure);
&gt; ?

Added.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Procedure.h:148
&gt; &gt; +            {
&gt; 
&gt; ASSERT(m_procedure == other.m_procedure); ?

Added.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ProcedureInlines.h:39
&gt; &gt; +    std::unique_ptr&lt;ValueType&gt; value(new ValueType(m_values.size(), arguments...));
&gt; 
&gt; auto, make_unique thingy

Ditto, ValueType has a private constructor and Visual Studio.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3SuccessorCollection.h:58
&gt; &gt; +            : m_collection(&amp;collection) // const is stupid anyway.
&gt; 
&gt; You can remove the comment now.

Yup, removed!

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3SuccessorCollection.h:75
&gt; &gt; +        {
&gt; 
&gt; ASSERT(m_collection == other.m_collection);

Added.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3SwitchValue.h:89
&gt; &gt; +        {
&gt; 
&gt; ASSERT(m_switch == other.m_switch);

Added.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3UseCounts.cpp:40
&gt; &gt; +            m_counts[child]++;
&gt; 
&gt; You may want to give Upsilons a useCount of 1 for consistency.
&gt; 
&gt; Not important with the current use of UseCounts.

Interesting.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Validate.cpp:84
&gt; &gt; +                VALIDATE(
&gt; &gt; +                    blocks.contains(successor), (&quot;At &quot;, *block, &quot;-&gt;&quot;, pointerDump(successor)));
&gt; 
&gt; Could be on a single line.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3Value.h:57
&gt; &gt; +    // Note that the opcode is immutable, except for replacing values with identity.
&gt; 
&gt; identity or noop!

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirCode.cpp:47
&gt; &gt; +    std::unique_ptr&lt;BasicBlock&gt; block(new BasicBlock(m_blocks.size(), frequency));
&gt; 
&gt; IIRC, Darin prefers:
&gt;     auto block = make_unique&lt;&gt;(...);

BasicBlock has a private constructor and Visual Studio.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137026</commentid>
    <comment_count>94</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-27 18:11:22 -0700</bug_when>
    <thetext>FWIW, operator!= was not synthesized.  I will re-add all of the operator!=&apos;s that I removed per previous feedback.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137029</commentid>
    <comment_count>95</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-27 18:16:48 -0700</bug_when>
    <thetext>
&gt; &gt; &gt; Source/JavaScriptCore/b3/B3LowerToAir.cpp:109
&gt; &gt; &gt; +
&gt; &gt; 
&gt; &gt; Everything after this could be private.
&gt; 
&gt; Almost did that, and then I realized that this is in an anonymous namespace
&gt; and that if we added any other classes to the anonymous namespace, then they
&gt; would all be friends of this one. ;-)
&gt; 
&gt; But I&apos;ll change it.

Nope, can&apos;t change it. The accept/try methods must be public.

I think that because private would have to be used very carefully in order to work, it&apos;s not worth it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137048</commentid>
    <comment_count>96</comment_count>
      <attachid>264185</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-27 21:19:05 -0700</bug_when>
    <thetext>Comment on attachment 264185
the patch

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

&gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:134
&gt; +    auto isRelevant = [] (const Arg&amp; arg) -&gt; bool {
&gt; +        return arg.isStack() &amp;&amp; arg.stackSlot()-&gt;kind() == StackSlotKind::Anonymous;
&gt; +    };

This could be moved as a static function outside. The code is already pretty long.

isRelevant -&gt; argumentIsOnStack?

&gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:140
&gt; +    Liveness&lt;Arg&gt; liveness(code);
&gt; +    IndexMap&lt;StackSlot, HashSet&lt;StackSlot*&gt;&gt; interference(code.stackSlots().size());
&gt; +    Vector&lt;StackSlot*&gt; slots;
&gt; +
&gt; +    for (BasicBlock* block : code) {

I think you can this code out as &quot;computeStackInterference()&quot; that just produces the IndexMap.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137071</commentid>
    <comment_count>97</comment_count>
      <attachid>264185</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-28 00:27:03 -0700</bug_when>
    <thetext>Comment on attachment 264185
the patch

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

&gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:196
&gt; +    Vector&lt;StackSlot*&gt; otherSlots;
&gt; +    for (StackSlot* slot : code.stackSlots()) {

You could extract this loop as 
    assignStackOffsetToSlots()

&gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:205
&gt; +        for (unsigned i = 0; i &lt; assignedLockedStackSlots.size(); ++i)
&gt; +            otherSlots[i] = assignedLockedStackSlots[i];

You could pre-assign those out of the loop.

&gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:215
&gt; +    unsigned frameSizeForStackSlots = 0;
&gt; +    for (StackSlot* slot : code.stackSlots()) {

extract in frameSizeForStackSlots()?

&gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:251
&gt; +                        arg.offset() + arg.stackSlot()-&gt;offsetFromFP());

What&apos;s that arg.offset()?

&gt; Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:68
&gt; +    StackSlot* savesArea = code.addStackSlot(byteSize, StackSlotKind::Locked);
&gt; +    // This is a bit weird since we could have already pinned a different stack slot to this
&gt; +    // area. Also, our runtime does not require us to pin the saves area. Maybe we shouldn&apos;t pin it?
&gt; +    savesArea-&gt;setOffsetFromFP(-byteSize);

I am a bit confused by this. 

Why allocate a big stackSlot at FP instead of allocating one StackSlot per register and letting the stack layout phase find them some space?

&gt; Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:53
&gt; +            RegisterSet&amp; set = usedRegisters[block][index];

set -&gt; registerSet

&gt; Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:68
&gt; +        for (unsigned instIndex = block-&gt;size(); instIndex--;) {

I think I would prefer to iterate over the Liveness&lt;Tmp&gt;::LocalCalc. The iterator would have
    iterator-&gt;inst
    iterator-&gt;live()

That way someone could use liveness analysis without knowing how it works.

Actually, you could make LocalCalc into the iterator and have something like:
    for (Liveness&lt;Tmp&gt;::LocalCalc localCalc : liveness.atBlock() {
        ...

&gt; Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:92
&gt; +            RegisterSet&amp; setAfter = usedRegisters[block][instIndex + 1];

I am pretty confused by this.

If a register is not in setBefore, it is not live at the current instIndex. Why do you prevent the current instruction from using the register?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137144</commentid>
    <comment_count>98</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-28 09:42:46 -0700</bug_when>
    <thetext>(In reply to comment #96)
&gt; Comment on attachment 264185 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264185&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:134
&gt; &gt; +    auto isRelevant = [] (const Arg&amp; arg) -&gt; bool {
&gt; &gt; +        return arg.isStack() &amp;&amp; arg.stackSlot()-&gt;kind() == StackSlotKind::Anonymous;
&gt; &gt; +    };
&gt; 
&gt; This could be moved as a static function outside. The code is already pretty
&gt; long.

OK.

&gt; 
&gt; isRelevant -&gt; argumentIsOnStack?

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:140
&gt; &gt; +    Liveness&lt;Arg&gt; liveness(code);
&gt; &gt; +    IndexMap&lt;StackSlot, HashSet&lt;StackSlot*&gt;&gt; interference(code.stackSlots().size());
&gt; &gt; +    Vector&lt;StackSlot*&gt; slots;
&gt; &gt; +
&gt; &gt; +    for (BasicBlock* block : code) {
&gt; 
&gt; I think you can this code out as &quot;computeStackInterference()&quot; that just
&gt; produces the IndexMap.

I kept it as is.  I think it&apos;s easier not to factor out things into functions if those functions are only called in one place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137153</commentid>
    <comment_count>99</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-28 09:58:47 -0700</bug_when>
    <thetext>(In reply to comment #97)
&gt; Comment on attachment 264185 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264185&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:196
&gt; &gt; +    Vector&lt;StackSlot*&gt; otherSlots;
&gt; &gt; +    for (StackSlot* slot : code.stackSlots()) {
&gt; 
&gt; You could extract this loop as 
&gt;     assignStackOffsetToSlots()

I&apos;ll keep it here, since it&apos;s only used here.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:205
&gt; &gt; +        for (unsigned i = 0; i &lt; assignedLockedStackSlots.size(); ++i)
&gt; &gt; +            otherSlots[i] = assignedLockedStackSlots[i];
&gt; 
&gt; You could pre-assign those out of the loop.

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:215
&gt; &gt; +    unsigned frameSizeForStackSlots = 0;
&gt; &gt; +    for (StackSlot* slot : code.stackSlots()) {
&gt; 
&gt; extract in frameSizeForStackSlots()?

I&apos;ll keep it here.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:251
&gt; &gt; +                        arg.offset() + arg.stackSlot()-&gt;offsetFromFP());
&gt; 
&gt; What&apos;s that arg.offset()?

Any use of a memory location has an offset.  That includes stack slots.  For example you can have a 64 byte stack slot named stack42 and access something like 16(stack42) - i.e. 16 bytes from the start of stack42.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:68
&gt; &gt; +    StackSlot* savesArea = code.addStackSlot(byteSize, StackSlotKind::Locked);
&gt; &gt; +    // This is a bit weird since we could have already pinned a different stack slot to this
&gt; &gt; +    // area. Also, our runtime does not require us to pin the saves area. Maybe we shouldn&apos;t pin it?
&gt; &gt; +    savesArea-&gt;setOffsetFromFP(-byteSize);
&gt; 
&gt; I am a bit confused by this. 
&gt; 
&gt; Why allocate a big stackSlot at FP instead of allocating one StackSlot per
&gt; register and letting the stack layout phase find them some space?

You could do it that way, but it would only make things more complicated and slower.

Since the callee-saves stack slot is live for the entire function, it&apos;s not any more efficient to allocate them individually.  It&apos;s less efficient if anything, since the compiler has more StackSlots to worry about in that case.

Also, no matter what we do, we need to be able to report to the client of B3 what the unwind data is - that is, where we have saved callee saves. The way I&apos;m doing it right now means that we&apos;re reusing the baseline JIT&apos;s and DFG&apos;s callee save register layout code, and we&apos;re even reusing their data structure - the RegisterAtOffsetList.  Air::Code::calleeSaveRegisters() just returns that list. If the compiler could allocate callee-saves at any location after this phase runs, then we&apos;d have to reconstruct the calleeSaveRegisters() list at the bitter end by someone tracking which StackSlot* corresponds to which callee save.  Sure, it&apos;s possible, but it strikes me as very roundabout.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:53
&gt; &gt; +            RegisterSet&amp; set = usedRegisters[block][index];
&gt; 
&gt; set -&gt; registerSet

OK.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:68
&gt; &gt; +        for (unsigned instIndex = block-&gt;size(); instIndex--;) {
&gt; 
&gt; I think I would prefer to iterate over the Liveness&lt;Tmp&gt;::LocalCalc. The
&gt; iterator would have
&gt;     iterator-&gt;inst
&gt;     iterator-&gt;live()
&gt; 
&gt; That way someone could use liveness analysis without knowing how it works.

I don&apos;t think that&apos;s a good idea, and I don&apos;t see how to use this pattern correctly in this loop.  I think it&apos;s important for users of LocalCalc to *know* that they are iterating in reverse and that this is what the LocalCalc requires.  Notice that this use of LocalCalc has calls to setUsedRegisters() that uses Inst indices, and it actually uses the index of an instruction that is *different* from the one that liveness is going to operate on in addition to using the current one:

            Inst&amp; inst = block-&gt;at(instIndex);
            setUsedRegisters(instIndex + 1, inst);
            localCalc.execute(inst);

It would be super weird to have such an index if we were using foreach iteration over the LocalCalc.

&gt; 
&gt; Actually, you could make LocalCalc into the iterator and have something like:
&gt;     for (Liveness&lt;Tmp&gt;::LocalCalc localCalc : liveness.atBlock() {
&gt;         ...

Maybe this would make sense here, but it&apos;s not a very general pattern.  Usually, you will use the liveness calc while performing some transformation that requires deliberately choosing some block iteration order.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:92
&gt; &gt; +            RegisterSet&amp; setAfter = usedRegisters[block][instIndex + 1];
&gt; 
&gt; I am pretty confused by this.
&gt; 
&gt; If a register is not in setBefore, it is not live at the current instIndex.
&gt; Why do you prevent the current instruction from using the register?

Definitions. You could have an instruction like:

Move %tmp0, %tmp1

The problem is choosing a register to use for %tmp1. Lets say that %rax is dead before the Move. Does that mean we can use %rax for %tmp1? No, it doesn&apos;t. %rax could be live after. This would probably require a fairly exotic instruction - one that assigns to %rax directly even before register allocation. But that&apos;s totally something that we&apos;ll encounter. For example, the Intel div instruction will have to be modeled this way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137237</commentid>
    <comment_count>100</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-28 13:12:26 -0700</bug_when>
    <thetext>*** Bug 150533 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137241</commentid>
    <comment_count>101</comment_count>
      <attachid>264236</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-28 13:18:32 -0700</bug_when>
    <thetext>Created attachment 264236
the patch

This patch includes the start of a strength reducer for B3.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137243</commentid>
    <comment_count>102</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-28 13:22:40 -0700</bug_when>
    <thetext>Attachment 264236 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:43:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:44:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:45:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:46:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:77:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:114:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:115:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:142:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:160:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:73:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:87:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:144:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:159:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3InsertionSet.h:63:  The parameter name &quot;arguments&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 37 in 142 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>1137276</commentid>
    <comment_count>103</comment_count>
      <attachid>264243</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-28 14:12:31 -0700</bug_when>
    <thetext>Created attachment 264243
the patch

More</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137278</commentid>
    <comment_count>104</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-28 14:16:29 -0700</bug_when>
    <thetext>Attachment 264243 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:43:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:44:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:45:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:46:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:77:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:114:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:115:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:145:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:163:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:73:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:87:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:87:  Alphabetical sorting problem. &quot;b3/B3ArgumentRegValue.cpp&quot; should be before &quot;b3/air/AirValidate.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:113:  Alphabetical sorting problem. &quot;b3/B3StackSlotKind.cpp&quot; should be before &quot;b3/B3StackmapSpecial.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:144:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:159:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3InsertionSet.h:63:  The parameter name &quot;arguments&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 39 in 148 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>1137289</commentid>
    <comment_count>105</comment_count>
      <attachid>264245</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-28 14:29:07 -0700</bug_when>
    <thetext>Created attachment 264245
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137291</commentid>
    <comment_count>106</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-28 14:31:45 -0700</bug_when>
    <thetext>Attachment 264245 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:43:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:44:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:45:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:46:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:77:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:114:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:115:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:145:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:163:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:73:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:87:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:87:  Alphabetical sorting problem. &quot;b3/B3ArgumentRegValue.cpp&quot; should be before &quot;b3/air/AirValidate.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:113:  Alphabetical sorting problem. &quot;b3/B3StackSlotKind.cpp&quot; should be before &quot;b3/B3StackmapSpecial.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:144:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:159:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3InsertionSet.h:63:  The parameter name &quot;arguments&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 39 in 148 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>1137302</commentid>
    <comment_count>107</comment_count>
      <attachid>264251</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-28 14:53:22 -0700</bug_when>
    <thetext>Created attachment 264251
the patch

It&apos;s going to take some effort to make EWS happy - I added all of the B3+Air files to CMakeLists since we could do a CMake build on Darwin/x86_64 and then B3 would be enabled.  But as can be seen from the unhappy EWS bots, I&apos;ve done a poor job of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137306</commentid>
    <comment_count>108</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-28 14:56:37 -0700</bug_when>
    <thetext>Attachment 264251 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/air/AirInst.h:66:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/air/AirInst.h:111:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirGenerate.cpp:101:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:44:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3GenericFrequentedBlock.h:45:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3SwitchCase.h:32:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:48:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:53:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirRegisterPriority.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:43:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:44:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:45:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ConstDoubleValue.h:46:  The parameter name &quot;proc&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:76:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:77:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:114:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3MemoryValue.h:115:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/b3/B3Value.h:145:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/B3Value.h:163:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:73:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/testb3.cpp:87:  Consider using CHECK_EQ instead of CHECK(a == b)  [readability/check] [2]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:96:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:106:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirLiveness.h:113:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:52:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:62:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirSpillEverything.cpp:95:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/CMakeLists.txt:87:  Alphabetical sorting problem. &quot;b3/B3ArgumentRegValue.cpp&quot; should be before &quot;b3/air/AirValidate.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/CMakeLists.txt:113:  Alphabetical sorting problem. &quot;b3/B3StackSlotKind.cpp&quot; should be before &quot;b3/B3StackmapSpecial.cpp&quot;.  [list/order] [5]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:144:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirAllocateStack.cpp:159:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/air/AirHandleCalleeSaves.cpp:46:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3InsertionSet.h:63:  The parameter name &quot;arguments&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/WTF/wtf/ScopedLambda.h:45:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:65:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/ScopedLambda.h:69:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/b3/B3CheckSpecial.cpp:124:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:109:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 39 in 148 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>1137337</commentid>
    <comment_count>109</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-28 16:00:01 -0700</bug_when>
    <thetext>View in context: https://bugs.webkit.org/attachment.cgi?id=264236&amp;action=review

Let&apos;s land and iterate.

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:81
&gt; +            if (m_value-&gt;child(0)-&gt;opcode() == Add &amp;&amp; isInt(m_value-&gt;type())) {

Comments would be good over each case of replaceWithNewValue. Finding the optimization by reading the conditions is non-trivial.

Alternatively, the pattern matcher could be useful here. You could have name for every optimization.

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:127
&gt; +                        address = memory-&gt;children().last() = address-&gt;child(0);

Should be two statements.

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:141
&gt; +                    address = memory-&gt;children().last() = newAddress;

ditto

&gt; Source/WTF/ChangeLog:16
&gt; +

The changelog is not up to date...Not that I give a shit about file lists in ChangeLog :)

&gt; Source/WTF/wtf/ListDump.h:58
&gt; +    PointerListDump(const T&amp; list, const char* comma)

comma -&gt; separator in the whole class?

&gt; Source/WTF/wtf/ListDump.h:66
&gt; +        for (typename T::const_iterator iter = m_list.begin(); iter != m_list.end(); ++iter)

&quot;auto&quot; should be fine instead of &quot;T::const_iterator&quot;. It would make the template more flexible.

&gt; Source/WTF/wtf/ListDump.h:67
&gt; +            out.print(m_comma, pointerDump(*iter));

Is it expected to put the comma/separator in front of the first value?

&gt; Source/WTF/wtf/MathExtras.h:428
&gt; +{

ASSERT(leftMin &lt;= leftMax);
ASSERT(rightMin &lt;= rightMax);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137338</commentid>
    <comment_count>110</comment_count>
      <attachid>264251</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-10-28 16:00:31 -0700</bug_when>
    <thetext>Comment on attachment 264251
the patch

Okay, let&apos;s land and iterate.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137351</commentid>
    <comment_count>111</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-28 16:35:15 -0700</bug_when>
    <thetext>(In reply to comment #109)
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=264236&amp;action=review
&gt; 
&gt; Let&apos;s land and iterate.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:81
&gt; &gt; +            if (m_value-&gt;child(0)-&gt;opcode() == Add &amp;&amp; isInt(m_value-&gt;type())) {
&gt; 
&gt; Comments would be good over each case of replaceWithNewValue. Finding the
&gt; optimization by reading the conditions is non-trivial.

Done.

&gt; 
&gt; Alternatively, the pattern matcher could be useful here. You could have name
&gt; for every optimization.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:127
&gt; &gt; +                        address = memory-&gt;children().last() = address-&gt;child(0);
&gt; 
&gt; Should be two statements.

Done.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:141
&gt; &gt; +                    address = memory-&gt;children().last() = newAddress;
&gt; 
&gt; ditto

Done.

&gt; 
&gt; &gt; Source/WTF/ChangeLog:16
&gt; &gt; +
&gt; 
&gt; The changelog is not up to date...Not that I give a shit about file lists in
&gt; ChangeLog :)

I&apos;ll update.

&gt; 
&gt; &gt; Source/WTF/wtf/ListDump.h:58
&gt; &gt; +    PointerListDump(const T&amp; list, const char* comma)
&gt; 
&gt; comma -&gt; separator in the whole class?

We have this jargon in the ListDump and CommaPrinter that &quot;comma&quot; means &quot;separator&quot;.  I&apos;ll keep it consistent for now.

&gt; 
&gt; &gt; Source/WTF/wtf/ListDump.h:66
&gt; &gt; +        for (typename T::const_iterator iter = m_list.begin(); iter != m_list.end(); ++iter)
&gt; 
&gt; &quot;auto&quot; should be fine instead of &quot;T::const_iterator&quot;. It would make the
&gt; template more flexible.

Fixed.

&gt; 
&gt; &gt; Source/WTF/wtf/ListDump.h:67
&gt; &gt; +            out.print(m_comma, pointerDump(*iter));
&gt; 
&gt; Is it expected to put the comma/separator in front of the first value?

CommaPrinter magically omits the first comma.

&gt; 
&gt; &gt; Source/WTF/wtf/MathExtras.h:428
&gt; &gt; +{
&gt; 
&gt; ASSERT(leftMin &lt;= leftMax);
&gt; ASSERT(rightMin &lt;= rightMax);

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1137369</commentid>
    <comment_count>112</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-28 17:19:44 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/191705</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263377</attachid>
            <date>2015-10-17 11:23:07 -0700</date>
            <delta_ts>2015-10-17 18:20:59 -0700</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13073</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKworI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNv
ZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToK
KyAgICAgICAgb3V0LnByaW50KCJJZGVudGl0eSIpOworICAgICAgICByZXR1cm47CisgICAgICAg
IC8vIEZJWE1FCisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09wY29k
ZV9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIE9wY29kZSB7Cisg
ICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgor
ICAgIElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0YW50IGNsYXNz
LgorICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgaG9pc3QgY29uc3RhbnRzIGludG8gYSBjb25zdGFu
dCBwb29sLCBvciBwbGFjZSB0aGVtIGluIHRoZSBwcm9ncmFtPworICAgIENvbnN0MzIsCisgICAg
Q29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVz
YWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAor
ICAgIERpdiwKKworICAgIC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24n
dCB0cmFwIGV2ZXIsIGJlaGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRB
bmQsCisgICAgQml0T3IsCisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBBU2hyLAorICAgIExT
aHIsCisKKyAgICAvLyBDYXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJ
bnQzMjoKKyAgICBTRXh0OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJl
dHVybnMgSW50NjQ6CisgICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBhbmQg
cmV0dXJucyBEb3VibGU6CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVy
bnMgRG91YmxlOgorICAgIElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIElu
dDMyOgorICAgIERUb0kzMiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2Fi
bGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAi
Tm90IgorICAgIC8vIGlzIGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1
YWwsCisgICAgTGVzc1RoYW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAg
IEdyZWF0ZXJFcXVhbCwKKworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50
MzIgMCBvciAxLgorICAgIEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwKKyAgICBC
ZWxvd0VxdWFsLAorCisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3
ZSBsb2FkIGFuZCB0aGUgbG9hZGVkIHR5cGUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgor
ICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAg
IExvYWQzMiwKKyAgICAvLyBUaGlzIHJldHVybnMgSW50NjQ6CisgICAgTG9hZDY0LAorICAgIC8v
IFRoZXNlIHJldHVybiBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIExvYWREb3VibGUsCisK
KyAgICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMg
c3RvcmVkLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAgU3RvcmU4LAor
ICAgIFN0b3JlMTYsCisgICAgU3RvcmUzMiwKKyAgICAvLyBUaGlzIHRha2VzIGEgSW50NjQgdmFs
dWU6CisgICAgU3RvcmU2NCwKKyAgICAvLyBUaGVzZSB0YWtlIGEgRG91YmxlIHZhbHVlOgorICAg
IFN0b3JlRmxvYXQsCisgICAgU3RvcmVEb3VibGUsCisKKyAgICAvLyBUaGlzIGlzIGEgcmVndWxh
ciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0gQyBjYWxsaW5nIGNv
bnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2Vk
IHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8vIFRoaXMgaXMgYSBw
YXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnQgY2xhc3MuCisgICAgUGF0Y2hwb2ludCwKKwor
ICAgIC8vIEp1bXAuIFVzZXMgdGhlIEp1bXAgY2xhc3MuCisgICAgSnVtcCwKKyAgICAKKyAgICAv
LyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBCcmFuY2hl
cyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBCcmFuY2ggY2xhc3MuCisg
ICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJbnQzMiBv
ciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoIGNsYXNzLgorICAgIFN3aXRjaCwKKworICAgIC8vIFJl
dHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0aGVpciByZXR1cm4gdHlw
ZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlwZS4KKyAgICBSZXR1cm4s
CisKKyAgICAvLyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxs
IG5ldmVyIGdldCBoZXJlLgorICAgIE9vcHMKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91Ymxl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVf
aAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBW
b2lkLAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworVHlwZSBwb2lu
dGVyKCkgY29uc3QKK3sKKyAgICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAgICAgICByZXR1
cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1
ZV9oCisKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWUg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSwgMz4gQWRqYWNlbmN5
TGlzdDsKKworICAgIHZpcnR1YWwgflZhbHVlKCk7CisgICAgCisgICAgLy8gTm90ZSB0aGF0IHRo
ZSBvcGNvZGUgaXMgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJlcGxhY2luZyB2YWx1ZXMgd2l0aCBp
ZGVudGl0eS4KKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0K
KyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxk
cmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5
cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdDsKKworICAgIEFkamFj
ZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBB
ZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKwor
ICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworICAgIAorcHJpdmF0ZToKKyAg
ICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUoT3Bjb2RlIG9wY29kZSwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCisgICAgICAg
ICwgbV9jaGlsZHJlbnsgYXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQorCisgICAgQWRqYWNl
bmN5TGlzdCBtX2NoaWxkcmVuOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM1ZhbHVlX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263397</attachid>
            <date>2015-10-17 18:20:59 -0700</date>
            <delta_ts>2015-10-17 19:54:00 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19389</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKworI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNv
ZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToK
KyAgICAgICAgb3V0LnByaW50KCJJZGVudGl0eSIpOworICAgICAgICByZXR1cm47CisgICAgICAg
IC8vIEZJWE1FCisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09wY29k
ZV9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIE9wY29kZSB7Cisg
ICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgor
ICAgIElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0YW50VmFsdWUg
Y2xhc3MuIENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNh
bgorICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFy
Z2UgY29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAg
Q29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNs
b3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFt
IHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4g
RWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ug
b2YKKyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisg
ICAgU3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRo
aXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAg
Ly8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRo
ZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xv
YmJlciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5
IHNhdmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBp
dCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNs
YXNzLgorICAgIEFyZ3VtZW50UmVnLAorCisgICAgLy8gVGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBj
YW4gcHV0IHRoaXMgYW55d2hlcmUgaW4gY29udHJvbCBmbG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5
aWVsZCB0aGUKKyAgICAvLyBmcmFtZSBwb2ludGVyLCB3aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29t
cGlsZXIgY2hhbmdlcyB0aGUgZnJhbWUgcG9pbnRlciB0ZW1wb3JhcmlseSBmb3Igc29tZQorICAg
IC8vIHNpbGx5IHJlYXNvbiwgdGhlIEZyYW1lUG9pbnRlciBpbnRyaW5zaWMgd2lsbCByZXR1cm4g
d2hlcmUgdGhlIGZyYW1lIHBvaW50ZXIgKnNob3VsZCogYmUgbm90CisgICAgLy8gd2hlcmUgaXQg
aGFwcGVucyB0byBiZSByaWdodCBub3cuCisgICAgRnJhbWVQb2ludGVyLAorCisgICAgLy8gUG9s
eW1vcnBoaWMgbWF0aCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgQWRkLAorICAg
IFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorCisgICAgLy8gSW50ZWdlciBtYXRoLgorICAgIENo
aWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCisg
ICAgTW9kLAorICAgIEJpdEFuZCwKKyAgICBCaXRPciwKKyAgICBCaXRYb3IsCisgICAgU2hsLAor
ICAgIEFTaHIsCisgICAgTFNociwKKworICAgIC8vIENhc3RzIGFuZCBzdWNoLgorICAgIC8vIFRh
a2VzIGFuZCByZXR1cm5zIEludDMyOgorICAgIFNFeHQ4LAorICAgIFNFeHQxNiwKKyAgICAvLyBU
YWtlcyBJbnQzMiBhbmQgcmV0dXJucyBJbnQ2NDoKKyAgICBTRXh0MzIsCisgICAgWkV4dDMyLAor
ICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBGUm91bmQsCisgICAgLy8gVGFr
ZXMgaW50cyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgSVRvRCwKKyAgICAvLyBUYWtlcyBEb3Vi
bGUgYW5kIHJldHVybnMgSW50MzI6CisgICAgRFRvSTMyLAorCisgICAgLy8gUG9seW1vcnBoaWMg
Y29tcGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBSZXR1cm5zIGludDMyIDAg
b3IgMS4gTm90ZSB0aGF0ICJOb3QiCisgICAgLy8gaXMganVzdCBFcXVhbCh4LCAwKS4KKyAgICBF
cXVhbCwKKyAgICBOb3RFcXVhbCwKKyAgICBMZXNzVGhhbiwKKyAgICBHcmVhdGVyVGhhbiwKKyAg
ICBMZXNzRXF1YWwsCisgICAgR3JlYXRlckVxdWFsLAorCisgICAgLy8gSW50ZWdlciBjb21wYXJp
c29ucy4gUmV0dXJucyBpbnQzMiAwIG9yIDEuCisgICAgQWJvdmUsCisgICAgQmVsb3csCisgICAg
QWJvdmVFcXVhbAorICAgIEJlbG93RXF1YWwsCisKKyAgICAvLyBNZW1vcnkgbG9hZHMuIE9wY29k
ZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBsb2FkZWQgdHlwZS4KKyAgICAvLyBUaGVz
ZSByZXR1cm4gSW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAor
ICAgIExvYWQxNlMsCisgICAgTG9hZDMyLAorICAgIC8vIFRoaXMgcmV0dXJucyBJbnQ2NDoKKyAg
ICBMb2FkNjQsCisgICAgLy8gVGhlc2UgcmV0dXJuIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisg
ICAgTG9hZERvdWJsZSwKKworICAgIC8vIE1lbW9yeSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMg
aG93IHRoZSB2YWx1ZSBpcyBzdG9yZWQuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2YWx1
ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICBTdG9yZTMyLAorICAgIC8vIFRoaXMg
dGFrZXMgYSBJbnQ2NCB2YWx1ZToKKyAgICBTdG9yZTY0LAorICAgIC8vIFRoZXNlIHRha2UgYSBE
b3VibGUgdmFsdWU6CisgICAgU3RvcmVGbG9hdCwKKyAgICBTdG9yZURvdWJsZSwKKworICAgIC8v
IFRoaXMgaXMgYSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5
c3RlbSBDIGNhbGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJn
dW1lbnRzIGFyZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxsLAorCisg
ICAgLy8gVGhpcyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNz
LiBUaGlzIGlzIHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25s
eSBlbWl0cyBjb2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFj
ayBnZXRzIHRvIGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2tt
YXAgYWxvbmcgd2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBt
dXN0IGJlIHBhc3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNr
bWFwIGFyZ3VtZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVz
dAorICAgIC8vIHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9t
IHRoZSB0b3Agb2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFj
ay4KKyAgICBQYXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNr
ZWRNYXRoVmFsdWUgY2xhc3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBn
ZW5lcmF0aW9uCisgICAgLy8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNv
bWUgY29kZSBhZnRlciB0aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAg
ICAvLyBmcm9tIHRoZSBjaGVjaywgdGhlIGxhYmVsIGFmdGVyIHRoZSBtYXRoIGluc3RydWN0aW9u
LCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvCisgICAgLy8gZ2V0IHRvIHN1
cHBseSBhIHN0YWNrbWFwLgorICAgIENoZWNrQWRkLAorICAgIENoZWNrU3ViLAorICAgIENoZWNr
TXVsLAorCisgICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAg
IFVwc2lsb24sCisgICAgUGhpLAorCisgICAgLy8gSnVtcC4gVXNlcyB0aGUgSnVtcFZhbHVlIGNs
YXNzLgorICAgIEp1bXAsCisgICAgCisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUg
d2l0aCBhbnkgdmFsdWUgdHlwZS4gQnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMg
dGhlCisgICAgLy8gQnJhbmNoVmFsdWUgY2xhc3MuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dp
dGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNo
VmFsdWUgY2xhc3MuCisgICAgU3dpdGNoLAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMg
cHJvY2VkdXJlcyBkb24ndCBrbm93IHRoZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0
IHJldHVybiBhbnkKKyAgICAvLyB0eXBlLgorICAgIFJldHVybiwKKworICAgIC8vIFRoaXMgaXMg
YSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUuCisg
ICAgT29wcworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6T3Bjb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBC
M09wY29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4u
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3
UG9pbnRlcihtX2RhdGEpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNPcmlnaW5faAorI2RlZmluZSBCM09yaWdpbl9oCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdob2V2
ZXIgZ2VuZXJhdGVzIEIzSVIgY2FuIGNob29zZSB0byBwdXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdo
ZW4geW91IGRvIHRoaXMsIEIzIHdpbGwgYmUgYWJsZSB0bworLy8gYWNjb3VudCwgZG93biB0byB0
aGUgbWFjaGluZSBjb2RlLCB3aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNwb25kcyB0byB3aGljaCBv
cmlnaW4uIEIzCisvLyB0cmFuc2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVm
dWxseS4gSXQncyBhbiBlcnJvciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVp
dGhlciBkcm9wcyBPcmlnaW5zIG9yIGxpZXMgYWJvdXQgdGhlbS4KK2NsYXNzIE9yaWdpbiB7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRhdGEgPSBudWxscHRyKQor
ICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCB2b2lkKiBk
YXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM09yaWdpbl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIz
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZSB0eXBlKQorewor
ICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgb3V0LnByaW50KCJW
b2lkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBvdXQucHJp
bnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDY0OgorICAgICAgICBv
dXQucHJpbnQoIkludDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZToKKyAg
ICAgICAgb3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
VHlwZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitlbnVtIFR5cGUgeworICAgIFZvaWQsCisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAg
RG91YmxlCit9OworCitUeXBlIHBvaW50ZXIoKSBjb25zdAoreworICAgIGlmIChzaXplb2Yodm9p
ZCopID09IDQpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICByZXR1cm4gSW50NjQ7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJp
bnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlR5
cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
VmFsdWVfaAorI2RlZmluZSBCM1ZhbHVlX2gKKworI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBWYWx1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFsdWUp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVj
dG9yPFZhbHVlLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKyAg
ICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3Ig
cmVwbGFjaW5nIHZhbHVlcyB3aXRoIGlkZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUoKSBjb25z
dCB7IHJldHVybiBtX29wY29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fb3JpZ2luOyB9CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAvLyBUaGlz
IGNvbXB1dGVzIHRoZSB0eXBlIHVzaW5nIHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBlKCkgY29u
c3Q7CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47
IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBt
X2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAg
ICAKK3ByaXZhdGU6CisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKE9w
Y29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAg
ICAgIDogbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAg
ICAgLCBtX2NoaWxkcmVueyBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisKKyAgICBPcGNv
ZGUgbV9vcGNvZGU7CisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9j
aGlsZHJlbjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNW
YWx1ZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263403</attachid>
            <date>2015-10-17 19:54:00 -0700</date>
            <delta_ts>2015-10-17 20:31:43 -0700</delta_ts>
            <desc>it&apos;s growing</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>35548</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitCYXNpY0Jsb2NrOjpC
YXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4KQorICAgIDogbV9pbmRleChpbmRleCkKK3sKK30KKwor
QmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKQoreworfQorCit2b2lkIEJhc2ljQmxvY2s6OmFwcGVu
ZChWYWx1ZSogdmFsdWUpCit7CisgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCIjIiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6XG4iKTsK
KyAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAi
LCBkZWVwRHVtcCh2YWx1ZSksICJcbiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9jaworI2RlZmluZSBCM0Jhc2ljQmxvY2sK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK2Ns
YXNzIFZhbHVlOworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSo+IFZhbHVlTGlzdDsKKworICAgIH5CYXNpY0Jsb2NrKCk7
CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAg
IEFkamFjZW5jeUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4o
KTsgfQorICAgIEFkamFjZW5jeUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVz
LmVuZCgpOyB9CisgICAgQWRqYWNlbmN5TGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgQWRqYWNlbmN5TGlzdDo6Y29uc3Rf
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKworICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgVmFsdWUq
IGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAg
VmFsdWUqJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorCisg
ICAgVmFsdWUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICBW
YWx1ZSomIGxhc3QoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKworICAgIGNvbnN0IFZh
bHVlTGlzdCYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKyAgICBWYWx1ZUxp
c3QmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICB2b2lkIGFwcGVuZChWYWx1
ZSopOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlKiBh
cHBlbmROZXdWYWx1ZShQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAg
Ly8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGlu
ZGV4KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWVMaXN0IG1fdmFsdWVzOwor
fTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNC
bG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAg
fQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNC
bG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBC
YXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gQjNCYXNpY0Jsb2NrCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQmFzaWNCbG9ja0lubGluZXNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tJbmxpbmVz
X2gKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5s
aW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ld1ZhbHVlKFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFZhbHVl
KiByZXN1bHQgPSBwcm9jZWR1cmUubmV3VmFsdWUoYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIG91dC5wcmlu
dCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRQorICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNvZGVfaAorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBPcGNvZGUgeworICAgIC8vIFBvbHltb3JwaGlj
IGlkZW50aXR5LCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBJZGVudGl0eSwKKwor
ICAgIC8vIENvbnN0YW50cy4gVXNlIHRoZSBDb25zdGFudFZhbHVlIGNsYXNzLiBDb25zdGFudHMg
ZXhpc3QgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28gdGhhdCB3ZSBjYW4KKyAgICAvLyByZWFzb24g
YWJvdXQgd2hlcmUgd2Ugd291bGQgY29uc3RydWN0IHRoZW0uIExhcmdlIGNvbnN0YW50cyBhcmUg
ZXhwZW5zaXZlIHRvIGNyZWF0ZS4KKyAgICBDb25zdDMyLAorICAgIENvbnN0NjQsCisgICAgQ29u
c3REb3VibGUsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBzbG90LiBUaGlzIGlzIHZpZXdl
ZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdhcmRsZXNzIG9mCisg
ICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQuIEVhY2ggaW5zdGFuY2Ugb2Yg
YSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdlIG9mCisgICAgLy8gc3RhY2sg
bWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgorICAgIFN0YWNrU2xvdCwKKwor
ICAgIC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBhcyBl
eGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Yg
d2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQsIGFuZCB0aGUgY29tcGlsZXIgdGFrZXMg
Y2FyZSB0byBlbnN1cmUgdGhhdCB3ZQorICAgIC8vIGRvbid0IGNsb2JiZXIgdGhlIHZhbHVlIGJ5
IHJlZ2lzdGVyIGFsbG9jYXRpb24gb3IgY2FsbHMgKGVpdGhlciBieSBzYXZpbmcgdGhlIGFyZ3Vt
ZW50IHRvIHRoZQorICAgIC8vIHN0YWNrIG9yIHByZXNlcnZpbmcgaXQgaW4gYSBjYWxsZWUtc2F2
ZSByZWdpc3RlcikuIFVzZSB0aGUgQXJndW1lbnRSZWdWYWx1ZSBjbGFzcy4KKyAgICBBcmd1bWVu
dFJlZywKKworICAgIC8vIFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdo
ZXJlIGluIGNvbnRyb2wgZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8g
ZnJhbWUgcG9pbnRlciwgd2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhl
IGZyYW1lIHBvaW50ZXIgdGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24s
IHRoZSBGcmFtZVBvaW50ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBw
b2ludGVyICpzaG91bGQqIGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmln
aHQgbm93LgorICAgIEZyYW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVz
YWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAor
ICAgIERpdiwKKworICAgIC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24n
dCB0cmFwIGV2ZXIsIGJlaGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRB
bmQsCisgICAgQml0T3IsCisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBBU2hyLAorICAgIExT
aHIsCisKKyAgICAvLyBDYXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJ
bnQzMjoKKyAgICBTRXh0OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJl
dHVybnMgSW50NjQ6CisgICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBhbmQg
cmV0dXJucyBEb3VibGU6CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVy
bnMgRG91YmxlOgorICAgIElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIElu
dDMyOgorICAgIERUb0kzMiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2Fi
bGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAi
Tm90IgorICAgIC8vIGlzIGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1
YWwsCisgICAgTGVzc1RoYW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAg
IEdyZWF0ZXJFcXVhbCwKKworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50
MzIgMCBvciAxLgorICAgIEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwKKyAgICBC
ZWxvd0VxdWFsLAorCisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3
ZSBsb2FkIGFuZCB0aGUgbG9hZGVkIHR5cGUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgor
ICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAg
IExvYWQzMiwKKyAgICAvLyBUaGlzIHJldHVybnMgSW50NjQ6CisgICAgTG9hZDY0LAorICAgIC8v
IFRoZXNlIHJldHVybiBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIExvYWREb3VibGUsCisK
KyAgICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMg
c3RvcmVkLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAgU3RvcmU4LAor
ICAgIFN0b3JlMTYsCisgICAgU3RvcmUzMiwKKyAgICAvLyBUaGlzIHRha2VzIGEgSW50NjQgdmFs
dWU6CisgICAgU3RvcmU2NCwKKyAgICAvLyBUaGVzZSB0YWtlIGEgRG91YmxlIHZhbHVlOgorICAg
IFN0b3JlRmxvYXQsCisgICAgU3RvcmVEb3VibGUsCisKKyAgICAvLyBUaGlzIGlzIGEgcmVndWxh
ciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0gQyBjYWxsaW5nIGNv
bnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2Vk
IHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8vIFRoaXMgaXMgYSBw
YXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFzcy4gVGhpcyBpcyB2aWV3ZWQg
YXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9ubHkgZW1pdHMgY29kZSB2aWEg
YSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IGNv
ZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNrbWFwIGFsb25nIHdpdGggY29u
c3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQuCisg
ICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBp
biBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVlc3QKKyAgICAvLyB0aGF0IGEg
c3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBh
cmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3RhY2suCisgICAgUGF0Y2hwb2lu
dCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVja2VkTWF0aFZhbHVlIGNsYXNz
LiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJhdGlvbgorICAgIC8v
IGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNvZGUgYWZ0ZXIgdGhl
IGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8gZnJvbSB0aGUgY2hl
Y2ssIHRoZSBsYWJlbCBhZnRlciB0aGUgbWF0aCBpbnN0cnVjdGlvbiwgYW5kIHRoZSBjaG9pY2Ug
b2YgcmVnaXN0ZXJzLiBZb3UgYWxzbworICAgIC8vIGdldCB0byBzdXBwbHkgYSBzdGFja21hcC4K
KyAgICBDaGVja0FkZCwKKyAgICBDaGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIFNT
QSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAgICBVcHNpbG9uLAorICAgIFBo
aSwKKworICAgIC8vIEp1bXAuIFVzZXMgdGhlIEp1bXBWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAor
ICAgIAorICAgIC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5
cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIEJyYW5j
aFZhbHVlIGNsYXNzLgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3Zl
ciBlaXRoZXIgSW50MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAg
IFN3aXRjaCwKKworICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qg
a25vdyB0aGVpciByZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAg
Ly8gdHlwZS4KKyAgICBSZXR1cm4sCisKKyAgICAvLyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBp
bmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJlLgorICAgIE9vcHMKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRT
dHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29k
ZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwg
IikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gK
KyNkZWZpbmUgQjNPcmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lS
IGNhbiBjaG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBC
MyB3aWxsIGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwg
d2hpY2ggaW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJh
bnNmb3JtYXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJy
b3IgdG8gd3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lu
cyBvciBsaWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxp
Y2l0IE9yaWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEo
ZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0
dXJuIG1fZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
Citwcml2YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQorCitQcm9j
ZWR1cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFwcGVu
ZEJsb2NrKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBzdGQ6
Om1ha2VfdW5pcXVlPEJhc2ljQmxvY2s+KG1fYmxvY2tzLnNpemUoKSk7CisgICAgQmFzaWNCbG9j
ayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShi
bG9jaykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0
aGlzKQorICAgICAgICBvdXQucHJpbnQoKmJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1Byb2NlZHVy
ZV9oCisKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xh
c3MgVmFsdWU7CisKK2NsYXNzIFByb2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UHJvY2VkdXJlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAg
IFByb2NlZHVyZSgpOworICAgIH5Qcm9jZWR1cmUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFwcGVu
ZEJsb2NrKCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IFZhbHVlKiBuZXdWYWx1ZShBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1CbG9ja3MoKSBjb25zdCB7IHJldHVybiBt
X2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBibG9jayh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7
CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpOgorICAgICAgICAgICAgOiBtX3Byb2Nl
ZHVyZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNC
bG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2Vk
dXJlLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVy
YXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5k
ZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAg
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+
bnVtQmxvY2tzKCkgJiYgIW1fcHJvY2VkdXJlLT5ibG9jayhpbmRleCkpCisgICAgICAgICAgICAg
ICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmV4OworICAgICAgICB9CisKKyAgICAg
ICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAg
ICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgbnVtQmxvY2tzKCkpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgQmFnPFZhbHVlPiBtX3ZhbHVlczsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZUlubGluZXNfaAor
I2RlZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlKiBQcm9jZWR1cmU6
Om5ld1ZhbHVlKEFyZ3VlbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gbV92YWx1ZXMu
YWRkKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQz
MiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50
KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91
dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAor
I2RlZmluZSBCM1R5cGVfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51
bSBUeXBlIHsKKyAgICBWb2lkLAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQor
fTsKKworVHlwZSBwb2ludGVyKCkgY29uc3QKK3sKKyAgICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA0
KQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0OworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFt
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZV9o
CisjZGVmaW5lIEIzVmFsdWVfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFs
dWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVu
c2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5v
dGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFs
dWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47
IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2No
aWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhl
IHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdDsKKworICAgIEFk
amFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25z
dCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0K
KworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2Nl
ZHVyZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQg
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBt
X29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1f
Y2hpbGRyZW57IGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgIE9yaWdpbiBtX29yaWdpbjsKKyAgICBB
ZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisKK3B1YmxpYzoKKyAgICBCYXNpY0Jsb2NrKiBvd25l
cjsgLy8gY29tcHV0ZWQgbGF6aWx5LgorICAgIFZhbHVlKiByZXBsYWNlbWVudDsgLy8gdXNlZCBm
b3IgYW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KKyAgICB2b2lkKiBtaXNjOworfTsKKwor
Y2xhc3MgRGVlcFZhbHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVlRHVtcChWYWx1ZSog
dmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWx1
ZSkKKyAgICAgICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFZh
bHVlKiBtX3ZhbHVlOworfTsKKworRGVlcFZhbHVlRHVtcCBkZWVwRHVtcChWYWx1ZSogdmFsdWUp
Cit7CisgICAgcmV0dXJuIERlZXBWYWx1ZUR1bXAodmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzVmFsdWVfaAorCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263404</attachid>
            <date>2015-10-17 20:31:43 -0700</date>
            <delta_ts>2015-10-17 23:06:45 -0700</delta_ts>
            <desc>just a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>41913</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitCYXNpY0Jsb2NrOjpC
YXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4KQorICAgIDogbV9pbmRleChpbmRleCkKK3sKK30KKwor
QmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKQoreworfQorCit2b2lkIEJhc2ljQmxvY2s6OmFwcGVu
ZChWYWx1ZSogdmFsdWUpCit7CisgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAi
OlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50
KCIgICAgIiwgZGVlcER1bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2sKKyNkZWZpbmUgQjNCYXNp
Y0Jsb2NrCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1
cmU7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogZHVtcFByZWZpeCA9ICIjIjsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAg
ICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIEFkamFj
ZW5jeUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQor
ICAgIEFkamFjZW5jeUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgp
OyB9CisgICAgQWRqYWNlbmN5TGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgQWRqYWNlbmN5TGlzdDo6Y29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKworICAgIHNpemVfdCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgVmFsdWUqIGF0KHNp
emVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgVmFsdWUq
JiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorCisgICAgVmFs
dWUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICBWYWx1ZSom
IGxhc3QoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKworICAgIGNvbnN0IFZhbHVlTGlz
dCYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKyAgICBWYWx1ZUxpc3QmIHZh
bHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICB2b2lkIGFwcGVuZChWYWx1ZSopOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlKiBhcHBlbmRO
ZXdWYWx1ZShQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5z
dGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4KTsK
KworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWVMaXN0IG1fdmFsdWVzOworfTsKKwor
Y2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1
bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitw
cml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1
bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Js
b2NrRHVtcChibG9jayk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNCYXNpY0Jsb2NrCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQmFzaWNCbG9ja0lubGluZXNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorVmFsdWUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ld1ZhbHVlKFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFZhbHVlKiByZXN1
bHQgPSBwcm9jZWR1cmUubmV3VmFsdWUoYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleFNl
dF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgo
KS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVm
ZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ug
c2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0
aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNp
Y0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJhc2ljQmxvY2su
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVibGljOgorICAgIElu
ZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAg
Ym9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2
YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlv
blR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmFi
bGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4U2V0JiBzZXQp
CisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBt
X3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9y
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAg
ICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9u
LCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAgICAgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faXRl
cihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUKiBv
cGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxl
Y3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pdGVyKys7
CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIubV9pdGVyOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAg
IEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7CisgICAgICAgIH07
CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2Nv
bGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0aW9uOworICAg
ICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZvciBiYXNpYyBi
bG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlKTsKKyAgICAv
LworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJv
Y2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4K
KyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxlY3Rpb25UeXBl
JiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPENvbGxl
Y3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRWZWN0b3ImIGlu
ZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIG91dC5wcmludCgiSWRlbnRpdHki
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRQorICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNvZGVfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworZW51bSBPcGNvZGUgeworICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1
c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0
YW50cy4gVXNlIHRoZSBDb25zdGFudFZhbHVlIGNsYXNzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhl
IGNvbnRyb2wgZmxvdywgc28gdGhhdCB3ZSBjYW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUg
d2Ugd291bGQgY29uc3RydWN0IHRoZW0uIExhcmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRv
IGNyZWF0ZS4KKyAgICBDb25zdDMyLAorICAgIENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisK
KyAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBzbG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRp
bmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUg
aW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3Qg
VmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdlIG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2Ug
dGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgorICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBt
YWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQg
dGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29u
dHJvbCBmbG93IHlvdSBwdXQgaXQsIGFuZCB0aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1
cmUgdGhhdCB3ZQorICAgIC8vIGRvbid0IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFs
bG9jYXRpb24gb3IgY2FsbHMgKGVpdGhlciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQor
ICAgIC8vIHN0YWNrIG9yIHByZXNlcnZpbmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3Rlciku
IFVzZSB0aGUgQXJndW1lbnRSZWdWYWx1ZSBjbGFzcy4KKyAgICBBcmd1bWVudFJlZywKKworICAg
IC8vIFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRy
b2wgZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRl
ciwgd2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50
ZXIgdGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBv
aW50ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91
bGQqIGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAg
IEZyYW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFu
eSB2YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKwor
ICAgIC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIs
IGJlaGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0
T3IsCisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBBU2hyLAorICAgIExTaHIsCisKKyAgICAv
LyBDYXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBT
RXh0OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6
CisgICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3Vi
bGU6CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgor
ICAgIElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERU
b0kzMiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkg
dmFsdWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8v
IGlzIGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVz
c1RoYW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVh
bCwKKworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgor
ICAgIEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwKKyAgICBCZWxvd0VxdWFsLAor
CisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0
aGUgbG9hZGVkIHR5cGUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgorICAgIExvYWQ4WiwK
KyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAgIExvYWQzMiwKKyAg
ICAvLyBUaGlzIHJldHVybnMgSW50NjQ6CisgICAgTG9hZDY0LAorICAgIC8vIFRoZXNlIHJldHVy
biBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIExvYWREb3VibGUsCisKKyAgICAvLyBNZW1v
cnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3RvcmVkLgorICAg
IC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAgU3RvcmU4LAorICAgIFN0b3JlMTYs
CisgICAgU3RvcmUzMiwKKyAgICAvLyBUaGlzIHRha2VzIGEgSW50NjQgdmFsdWU6CisgICAgU3Rv
cmU2NCwKKyAgICAvLyBUaGVzZSB0YWtlIGEgRG91YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQs
CisgICAgU3RvcmVEb3VibGUsCisKKyAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBD
IGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1h
a2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSBy
aWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBV
c2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFzcy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcg
bGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9ubHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVy
YXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgor
ICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNrbWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24g
aG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBs
ZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lz
dGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVlc3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJn
dW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNz
aW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3RhY2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8v
IENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVja2VkTWF0aFZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0
Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJhdGlvbgorICAgIC8vIGNhbGxiYWNrLiBU
aGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNvZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBh
bmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8gZnJvbSB0aGUgY2hlY2ssIHRoZSBsYWJl
bCBhZnRlciB0aGUgbWF0aCBpbnN0cnVjdGlvbiwgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJz
LiBZb3UgYWxzbworICAgIC8vIGdldCB0byBzdXBwbHkgYSBzdGFja21hcC4KKyAgICBDaGVja0Fk
ZCwKKyAgICBDaGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIFNTQSBzdXBwb3J0LCBp
biB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAgICBVcHNpbG9uLAorICAgIFBoaSwKKworICAgIC8v
IEp1bXAuIFVzZXMgdGhlIEp1bXBWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAorICAgIAorICAgIC8v
IFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIEJyYW5jaGVz
IGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIEJyYW5jaFZhbHVlIGNsYXNz
LgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBlaXRoZXIgSW50
MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3aXRjaCwKKwor
ICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0aGVpciBy
ZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlwZS4KKyAg
ICBSZXR1cm4sCisKKyAgICAvLyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhh
dCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJlLgorICAgIE9vcHMKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNP
cmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2Ug
dG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFi
bGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1
Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25z
IG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUg
YSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFi
b3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihj
b25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7
CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxp
bmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQorCitQcm9jZWR1cmU6On5Qcm9j
ZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFwcGVuZEJsb2NrKCkKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBzdGQ6Om1ha2VfdW5pcXVl
PEJhc2ljQmxvY2s+KG1fYmxvY2tzLnNpemUoKSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0g
YmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAg
ICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1Byb2NlZHVyZV9o
CisKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3Mg
VmFsdWU7CisKK2NsYXNzIFByb2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJv
Y2VkdXJlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIFBy
b2NlZHVyZSgpOworICAgIH5Qcm9jZWR1cmUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFwcGVuZEJs
b2NrKCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZh
bHVlKiBuZXdWYWx1ZShBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Mu
c2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgIDogbV9w
cm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJh
c2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3By
b2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2lu
ZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1cmUt
PnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRl
eCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKworICAgICAgICBQcm9j
ZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisK
KyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsg
fQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBudW1C
bG9ja3MoKSk7IH0KKworICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoK
KyAgICAgICAgVmFsdWVzQ29sbGVjdGlvbihQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICAgICAg
ICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJh
dG9yKCk6CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAg
ICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgVmFsdWUqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fcHJvY2VkdXJlLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXgg
PT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgMCk7IH0KKyAg
ICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUs
IG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgICAg
IFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92
YWx1ZXNbaW5kZXhdOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29sbGVj
dGlvbiB2YWx1ZXMoKSB7IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitwcml2
YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZUlubGluZXNfaAorI2RlZmlu
ZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlKiBQcm9jZWR1cmU6Om5ld1Zh
bHVlKEFyZ3VlbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gbV92YWx1ZXMuYWRkKG1f
dmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJJbnQ2
NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91dC5wcmlu
dCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmlu
ZSBCM1R5cGVfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBl
IHsKKyAgICBWb2lkLAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKwor
VHlwZSBwb2ludGVyKCkgY29uc3QKK3sKKyAgICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAg
ICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0OworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZV9oCisjZGVm
aW5lIEIzVmFsdWVfaAorCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAz
PiBBZGphY2VuY3lMaXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAi
QCI7CisKKyAgICB2aXJ0dWFsIH5WYWx1ZSgpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNvZGUg
aXMgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJlcGxhY2luZyB2YWx1ZXMgd2l0aCBpZGVudGl0eS4K
KyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKworICAgIE9y
aWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIAorICAgIFZhbHVl
KiYgY2hpbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9Cisg
ICAgVmFsdWUqIGNoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVu
W2luZGV4XTsgfQorCisgICAgLy8gVGhpcyBjb21wdXRlcyB0aGUgdHlwZSB1c2luZyB0aGUgb3Bj
b2RlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0OworCisgICAgQWRqYWNlbmN5TGlzdCYgY2hpbGRy
ZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNo
aWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAgdm9pZCByZXBsYWNl
V2l0aElkZW50aXR5KFZhbHVlKik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRl
OgorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
KyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAg
ICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgYXJndW1lbnRz
Li4uIH0KKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUg
bV9vcGNvZGU7CisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGls
ZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyOyAvLyBjb21wdXRlZCBsYXpp
bHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50OyAvLyB1c2VkIGZvciBhbmFseXNlcyBhbmQgdHJh
bnNmb3JtYXRpb25zLgorICAgIHZvaWQqIG1pc2M7Cit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1w
IHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92
YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50
KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmFsdWUqIG1fdmFsdWU7Cit9Owor
CitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVl
cFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNWYWx1ZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263410</attachid>
            <date>2015-10-17 23:06:45 -0700</date>
            <delta_ts>2015-10-18 12:28:46 -0700</delta_ts>
            <desc>no big deal, fleshing out the IR</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>67221</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRS
ZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1lbnRSZWdWYWx1ZSgpCit7Cit9CisK
K3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNBcmd1bWVudFJlZ1ZhbHVl
X2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIH5Bcmd1
bWVudFJlZ1ZhbHVlKCk7CisKKyAgICBSZWcgYXJndW1lbnRSZWcoKSBjb25zdCB7IHJldHVybiBt
X3JlZzsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisK
KyAgICBBcmd1bWVudFJlZ1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcg
cmVnKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkgPyBw
b2ludGVyKCkgOiBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3JlZyhyZWcpCisgICAgewor
ICAgIH0KKworICAgIFJlZyBtX3JlZzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5k
ZXgpCisgICAgOiBtX2luZGV4KGluZGV4KQoreworfQorCitCYXNpY0Jsb2NrOjp+QmFzaWNCbG9j
aygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRl
eCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6XG4iKTsKKyAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcCh2YWx1
ZSksICJcbiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQmFzaWNCbG9jaworI2RlZmluZSBCM0Jhc2ljQmxvY2sKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK2NsYXNzIFZhbHVlOworCitj
bGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3Rv
cjxWYWx1ZSo+IFZhbHVlTGlzdDsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4
ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgQWRqYWNlbmN5TGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgQWRqYWNlbmN5TGlzdDo6aXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBBZGphY2VuY3lMaXN0
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7
IH0KKyAgICBBZGphY2VuY3lMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyBy
ZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFs
dWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1
ZXM7IH0KKworICAgIHZvaWQgYXBwZW5kKFZhbHVlKik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0
YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgpOwor
CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7Cit9OworCitj
bGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVt
cChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAg
ICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVt
cCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxv
Y2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Qz
MlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKworYm9vbCBD
b25zdDMyVmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
aW50MzJfdCBDb25zdDMyVmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBtX3Zh
bHVlOworfQorCit2b2lkIENvbnN0MzJWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVm
aW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0MzJWYWx1ZSA6IHB1YmxpYyBWYWx1
ZSB7CitwdWJsaWM6CisgICAgfkNvbnN0MzJWYWx1ZSgpOworICAgIAorICAgIGludDMyX3QgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBib29sIGhh
c0ludDMyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Qgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0MzJW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgQ29uc3QzMiwgSW50MzIsIG9yaWdpbikKKyAgICAgICAgLCBtX3Zh
bHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0NvbnN0MzJWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDb25zdDY0VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Nv
bnN0NjRWYWx1ZTo6fkNvbnN0NjRWYWx1ZSgpCit7Cit9CisKK2Jvb2wgQ29uc3Q2NFZhbHVlOjpo
YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2ludDY0X3QgQ29uc3Q2
NFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV92YWx1ZTsKK30KKwordm9p
ZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRW
YWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgor
ICAgIH5Db25zdDY0VmFsdWUoKTsKKyAgICAKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgYm9vbCBoYXNJbnQ2NCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
dm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0VmFsdWUodW5zaWduZWQg
aW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdDY0VmFsdWVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
Q29uc3REb3VibGVWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91YmxlVmFsdWUoKQoreworfQorCitib29sIENvbnN0
RG91YmxlVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2RvdWJsZSBDb25zdERvdWJsZVZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG1fdmFsdWU7Cit9CisKK3ZvaWQgQ29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQ29uc3REb3VibGVWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9o
CisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBDb25zdERvdWJsZVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAg
ICB+Q29uc3REb3VibGVWYWx1ZSgpOworICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIGJvb2wgaGFzRG91YmxlKCkgY29u
c3Qgb3ZlcnJpZGU7CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0RG91YmxlVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1
ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0
aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNp
Y0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3Qg
Y3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5
IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8g
SWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Js
b2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIElu
ZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUt
PmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0
aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29s
bGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBD
b2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0
ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24p
CisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBt
X2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRl
cmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24s
IG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlv
blR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAg
IH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQu
dmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86Cisg
ICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZh
bHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQor
CisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMo
KS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgs
IGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgorCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBv
cGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAg
ICAgICBvdXQucHJpbnQoIklkZW50aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8g
RklYTUUKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gK
KworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDogaW50MTZfdCB7CisgICAgLy8gUG9seW1vcnBoaWMg
aWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElkZW50aXR5LAorCisg
ICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMuIENvbnN0YW50cyBl
eGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAgIC8vIHJlYXNvbiBh
Ym91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29uc3RhbnRzIGFyZSBl
eHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2NCwKKyAgICBDb25z
dERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2Vk
IGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKKyAg
ICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBh
IFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAgICAvLyBzdGFjayBt
ZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3RhY2tTbG90LAorCisg
ICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4
ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVnYXJkbGVzcyBvZiB3
aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21waWxlciB0YWtlcyBj
YXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0aGUgdmFsdWUgYnkg
cmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmluZyB0aGUgYXJndW1l
bnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBhIGNhbGxlZS1zYXZl
IHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBUaGUgcmV0dXJuCisg
ICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3IgRG91YmxlIChmb3Ig
RlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUgcG9pbnRlci4gWW91
IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0IHdpbGwgYWx3YXlz
IHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZlYXQ6IGlmIG91ciBj
b21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5IGZvciBzb21lCisg
ICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNpYyB3aWxsIHJldHVy
biB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAgICAvLyB3aGVyZSBp
dCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIsCisKKyAgICAvLyBQ
b2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBBZGQsCisg
ICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2VyIG1hdGguCisgICAg
Q2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2UgSlMgKHgveSl8MC4K
KyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhvciwKKyAgICBTaGws
CisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1Y2guCisgICAgLy8g
VGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4dDE2LAorICAgIC8v
IFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwKKyAgICBaRXh0MzIs
CisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3VuZCwKKyAgICAvLyBU
YWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAgIC8vIFRha2VzIERv
dWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAvLyBQb2x5bW9ycGhp
YyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJldHVybnMgaW50MzIg
MCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFsKHgsIDApLgorICAg
IEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdyZWF0ZXJUaGFuLAor
ICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJbnRlZ2VyIGNvbXBh
cmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAgICBCZWxvdywKKyAg
ICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1lbW9yeSBsb2Fkcy4gT3Bj
b2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0eXBlLgorICAgIC8vIFRo
ZXNlIHJldHVybiBJbnQzMjoKKyAgICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlos
CisgICAgTG9hZDE2UywKKyAgICAvLyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9h
dCwKKyAgICAvLyBUaGlzIHJldHVybiB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAg
TG9hZCwKKworICAgIC8vIE1lbW9yeSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2
YWx1ZSBpcyBzdG9yZWQuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2YWx1ZToKKyAgICBT
dG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91YmxlIHZhbHVlOgor
ICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJ
bnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAgICAvLyBUaGlzIGlzIGEg
cmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0gQyBjYWxs
aW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUg
cGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8vIFRoaXMg
aXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFzcy4gVGhpcyBpcyB2
aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9ubHkgZW1pdHMgY29k
ZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBl
bWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNrbWFwIGFsb25nIHdp
dGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQgbXVzdCBiZSBwYXNz
ZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFja21hcCBhcmd1bWVu
dCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVlc3QKKyAgICAvLyB0
aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9m
IHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3RhY2suCisgICAgUGF0
Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVja2VkTWF0aFZhbHVl
IGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJhdGlvbgor
ICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNvZGUgYWZ0
ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8gZnJvbSB0
aGUgY2hlY2ssIHRoZSBsYWJlbCBhZnRlciB0aGUgbWF0aCBpbnN0cnVjdGlvbiwgYW5kIHRoZSBj
aG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxzbworICAgIC8vIGdldCB0byBzdXBwbHkgYSBzdGFj
a21hcC4KKyAgICBDaGVja0FkZCwKKyAgICBDaGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAg
IC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAgICBVcHNpbG9uLAor
ICAgIFBoaSwKKworICAgIC8vIEp1bXAuIFVzZXMgdGhlIEp1bXBWYWx1ZSBjbGFzcy4KKyAgICBK
dW1wLAorICAgIAorICAgIC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZh
bHVlIHR5cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8v
IEJyYW5jaFZhbHVlIGNsYXNzLgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNo
ZXMgb3ZlciBlaXRoZXIgSW50MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNz
LgorICAgIFN3aXRjaCwKKworICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMg
ZG9uJ3Qga25vdyB0aGVpciByZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55
CisgICAgLy8gdHlwZS4KKyAgICBSZXR1cm4sCisKKyAgICAvLyBUaGlzIGlzIGEgdGVybWluYWwg
dGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJlLgorICAgIE9vcHMKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3Mg
UHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6
Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9k
YXRhKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3Jp
Z2luX2gKKyNkZWZpbmUgQjNPcmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRl
cyBCM0lSIGNhbiBjaG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0
aGlzLCBCMyB3aWxsIGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUg
Y29kZSwgd2hpY2ggaW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMwor
Ly8gdHJhbnNmb3JtYXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3Mg
YW4gZXJyb3IgdG8gd3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMg
T3JpZ2lucyBvciBsaWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAg
IGV4cGxpY2l0IE9yaWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBt
X2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0
IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2Nl
ZHVyZTo6flByb2NlZHVyZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxv
Y2soKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayA9IHN0ZDo6bWFr
ZV91bmlxdWU8QmFzaWNCbG9jaz4obV9ibG9ja3Muc2l6ZSgpKTsKKyAgICBCYXNpY0Jsb2NrKiBy
ZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2Nr
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMp
CisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJv
Y2VkdXJlX2gKKworI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7
CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQcm9jZWR1cmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
CisgICAgUHJvY2VkdXJlKCk7CisgICAgflByb2NlZHVyZSgpOworCisgICAgQmFzaWNCbG9jayog
YWRkQmxvY2soKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2lj
QmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0
b3IoKToKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwg
bV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0K
KworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBv
dGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNp
Z25lZCBmaW5kTmV4dCh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hp
bGUgKGluZGV4IDwgbV9wcm9jZWR1cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4
KSkKKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7Cisg
ICAgICAgIH0KKworICAgICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNp
Z25lZCBtX2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCBudW1CbG9ja3MoKSk7IH0KKworICAgIGNsYXNzIFZhbHVlc0Nv
bGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29sbGVjdGlvbihQcm9jZWR1
cmUmIHByb2NlZHVyZSkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgOiBtX3Byb2Nl
ZHVyZShudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJv
Y2VkdXJlKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5ibG9jayhtX2luZGV4
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgUHJv
Y2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
ICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX3Byb2NlZHVyZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0K
KworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92
YWx1ZXMuc2l6ZSgpOyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdOyB9CisgICAgICAgIFZhbHVlKiBv
cGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAg
ICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBWYWx1ZXNDb2xs
ZWN0aW9uKCp0aGlzKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+
PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNQcm9jZWR1cmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1By
b2NlZHVyZUlubGluZXNfaAorI2RlZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1ZW50cy4u
LiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUgPQor
ICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFZhbHVlVHlwZT4obV92YWx1ZXMuc2l6ZSgpLCBhcmd1
bWVudHMuLi4pOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92
YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVJbmxpbmVz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBT
dGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xvdFZh
bHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTdGFja1Nsb3RWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAg
ICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tTbG90
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXIoKSwgb3JpZ2luKQorICAg
ICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVk
IG1fYnl0ZVNpemU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlw
ZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZv
aWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lkLAorICAgIEludDMyLAorICAgIEludDY0LAorICAg
IERvdWJsZQorfTsKKworVHlwZSBwb2ludGVyKCkgY29uc3QKK3sKKyAgICBpZiAoc2l6ZW9mKHZv
aWQqKSA9PSA0KQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0OworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFBy
aW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpU
eXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitWYWx1ZTo6flZhbHVlKCkKK3sKK30KKwordm9pZCBWYWx1ZTo6
cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdmFsdWUpCit7CisgICAgLy8gVGhpcyBpcyBhIGJp
dCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNlbWVudCBvZiB3aGF0ZXZlciBWYWx1
ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBsYWluIElkZW50aXR5IFZhbHVlLiBX
ZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCwgdGhlbiB3ZSBk
ZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIHRoZW4gd2Ug
Y29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4KKworICAgIHVuc2lnbmVkIGlu
ZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5cGU7CisgICAgT3JpZ2luIG9yaWdp
biA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAg
VmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisgICAgdm9pZCogbWlzYyA9
IHRoaXMtPm1pc2M7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlID09IHZhbHVlLT50eXBlKCkp
OworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSAoaW5kZXgs
IElkZW50aWZ5LCB0eXBlLCBvcmlnaW4sIHZhbHVlKTsKKworICAgIHRoaXMtPm93bmVyID0gb3du
ZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKKyAgICB0aGlzLT5taXNj
ID0gbWlzYzsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6
ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBl
LCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNvZGUpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0g
c3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcg
PSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAg
ICAgb3V0LnByaW50KCI8Iiwgc3RyaW5nLCAiPiIpOworCisgICAgb3V0LnByaW50KCIoIik7Cisg
ICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4o
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOworICAgIG91
dC5wcmludCgiKSIpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29s
IFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQ2
NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNv
bnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdAoreworfQorCitU
eXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQorewor
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEFkZDoK
KyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENo
aWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6
CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNh
c2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2Fz
ZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNl
IEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHBvaW50ZXIoKTsKKyAgICBjYXNlIFNFeHQ4
OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6Cisg
ICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRo
YW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2Fz
ZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNl
IEJlbG93RXF1YWw6CisgICAgY2FzZSBMb2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2Fz
ZSBMb2FkMTZaOgorICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgcmV0dXJuIEludDMyOworICAg
IGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7Cisg
ICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgIGNhc2UgTG9hZEZsb2F0OgorICAg
ICAgICByZXR1cm4gRG91YmxlOworICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2UgU3RvcmUxNjoK
KyAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgY2FzZSBTdG9yZToKKyAgICBjYXNlIFVwc2lsb246
CisgICAgY2FzZSBSZXR1cm46CisgICAgY2FzZSBPb3BzOgorICAgICAgICByZXR1cm4gVm9pZDsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZp
bmUgQjNWYWx1ZV9oCisKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5o
IgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFsdWUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlz
dDsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIkAiOworCisgICAgdmly
dHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwg
ZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bjb2RlIG9w
Y29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGls
ZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKwor
ICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBl
IHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIEFkamFjZW5jeUxpc3QmIGNo
aWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGphY2VuY3lMaXN0
JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAgIHZvaWQgcmVw
bGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdmly
dHVhbCBib29sIGhhc0ludDMyKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQzMl90IGFzSW50MzIo
KSBjb25zdDsKKyAgICAKKyAgICB2aXJ0dWFsIGJvb2wgaGFzSW50NjQoKSBjb25zdDsKKyAgICB2
aXJ0dWFsIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisgICAgdmlydHVhbCBib29sIGhhc0Rv
dWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAv
LyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KKyAgICAvLyBUaGlzIGZvcm0gcmVx
dWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5OgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2Rl
KQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAg
ICAgICAgLCBtX2NoaWxkcmVueyBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8g
VGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUg
ZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bj
b2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAg
ICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQs
IGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRo
b3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxv
bmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxp
Y2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQor
ICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAg
ICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9vcmln
aW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29k
ZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNv
ZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgT3JpZ2luIG1fb3JpZ2luOworICAg
IEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93
bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2Vt
ZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25z
LgorICAgIHZvaWQqIG1pc2MgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1w
IHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92
YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50
KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmFsdWUqIG1fdmFsdWU7Cit9Owor
CitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVl
cFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNWYWx1ZV9oCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263425</attachid>
            <date>2015-10-18 12:28:46 -0700</date>
            <delta_ts>2015-10-18 13:40:23 -0700</delta_ts>
            <desc>it has stackmaps and patchpoints, sort of</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>96561</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRS
ZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1lbnRSZWdWYWx1ZSgpCit7Cit9CisK
K3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNBcmd1bWVudFJlZ1ZhbHVl
X2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRp
YyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50
UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUoKTsKKworICAgIFJlZyBhcmd1bWVu
dFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50UmVnVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIEFyZ3Vt
ZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAg
ICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAgUmVnIG1fcmVnOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0FyZ3VtZW50UmVnVmFsdWVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQmFzaWNC
bG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQmFzaWNCbG9jazo6
QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1faW5kZXgoaW5kZXgpCit7Cit9CisK
K0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwordm9pZCBCYXNpY0Jsb2NrOjphcHBl
bmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9CisKK3Zv
aWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywg
IjpcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91dC5wcmlu
dCgiICAgICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5lIEIzQmFz
aWNCbG9jaworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2Vk
dXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworCisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiIyI7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBBZGph
Y2VuY3lMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0K
KyAgICBBZGphY2VuY3lMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQo
KTsgfQorICAgIEFkamFjZW5jeUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIEFkamFjZW5jeUxpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVl
KiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZh
bHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUq
JiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxp
c3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2
YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsK
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKKyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxv
Y2sodW5zaWduZWQgaW5kZXgpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxp
c3QgbV92YWx1ZXM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgor
ICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Js
b2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9j
ay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8
bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307
CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAg
ICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFz
aWNCbG9ja0lubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
QjNQcm9jZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFs
dWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUu
YWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEIzQmFzaWNCbG9ja0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDMyVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0MzJWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitDb25zdDMyVmFsdWU6On5Db25zdDMyVmFsdWUoKQoreworfQor
Cit2b2lkIENvbnN0MzJWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29u
c3QzMlZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0MzJWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNv
ZGUgPT0gQ29uc3QzMjsgfQorICAgIAorICAgIH5Db25zdDMyVmFsdWUoKTsKKyAgICAKKyAgICBp
bnQzMl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDMyVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCisgICAgICAgIDogVmFsdWUo
aW5kZXgsIENvbnN0MzIsIEludDMyLCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkK
KyAgICB7CisgICAgfQorICAgIAorICAgIGludDMyX3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdDMyVmFsdWVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZh
bHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6
On5Db25zdDY0VmFsdWUoKQoreworfQorCit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDY0VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0
NjRWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3Q2NFZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0NjRWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25z
dDY0VmFsdWUoKTsKKyAgICAKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisK
KyAgICBDb25zdDY0VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3Qg
dmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDY0X3Qg
bV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjND
b25zdDY0VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91Ymxl
VmFsdWUoKQoreworfQorCit2b2lkIENvbnN0RG91YmxlVmFsdWU6OmR1bXBNZXRhKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50ZigiJWxlIiwgbV92YWx1ZSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0NvbnN0RG91YmxlVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0RG91YmxlVmFsdWVf
aAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQ29uc3REb3VibGVWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0g
Q29uc3REb3VibGU7IH0KKyAgICAKKyAgICB+Q29uc3REb3VibGVWYWx1ZSgpOworICAgIAorICAg
IGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3REb3VibGVWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBDb25zdERvdWJsZSwgRG91YmxlLCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1
ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBtX3ZhbHVlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFsdWVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisj
aW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9y
IHRoaW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJh
c2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24n
dCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZl
cnkgc3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisv
LyBJZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2lj
QmxvY2s+LiBTbywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3Mg
SW5kZXhTZXQgeworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAg
Ym9vbCBhZGQoVCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1
ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxl
Y3Rpb24sIGNvbnN0IEluZGV4U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihj
b2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0
IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6
aXRlcmF0b3IgaXRlcikKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlv
bikKKyAgICAgICAgICAgICAgICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2l0ZXIgPT0gb3RoZXIubV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUq
IG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjpp
dGVyYXRvciBtX2l0ZXI7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9Cisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlv
biwgbV9zZXQuZW5kKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0
aW9uVHlwZSYgbV9jb2xsZWN0aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7Cisg
ICAgfTsKKworICAgIC8vIEZvciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNl
dC52YWx1ZXMocHJvY2VkdXJlKTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoK
KyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4g
dmFsdWVzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9
CisKKyAgICBjb25zdCBCaXRWZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAg
ICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNl
cygpLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZp
eCwgaW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVl
Ojp+TWVtb3J5VmFsdWUoKQoreworfQorCit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnBy
aW50KCJvZmZzZXQgPSAiLCBtX29mZnNldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVt
b3J5VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExv
YWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAg
ICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3Rv
cmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAg
ICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
fk1lbW9yeVZhbHVlKCk7CisKKyAgICBpbnRwdHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhT
LCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVz
Y3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIHBvaW50ZXIsCisgICAgICAgIGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBj
YXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2Ug
TG9hZDE2UzoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlQodHlwZSA9PSBEb3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAg
ICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAg
ICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0g
Zm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
cG9pbnRlciwgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bj
b2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRl
cikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAg
IGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNl
IExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExv
YWRGbG9hdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBm
b3JtIGZvciBzdG9yZXMuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4
LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2lu
dGVyLAorICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4
LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZz
ZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAg
ICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAg
ICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAg
ICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgorCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBv
cGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAg
ICAgICBvdXQucHJpbnQoIklkZW50aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8g
RklYTUUKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gK
KworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDogaW50MTZfdCB7CisgICAgLy8gUG9seW1vcnBoaWMg
aWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElkZW50aXR5LAorCisg
ICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMuIENvbnN0YW50cyBl
eGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAgIC8vIHJlYXNvbiBh
Ym91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29uc3RhbnRzIGFyZSBl
eHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2NCwKKyAgICBDb25z
dERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2Vk
IGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKKyAg
ICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBh
IFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAgICAvLyBzdGFjayBt
ZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3RhY2tTbG90LAorCisg
ICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4
ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVnYXJkbGVzcyBvZiB3
aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21waWxlciB0YWtlcyBj
YXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0aGUgdmFsdWUgYnkg
cmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmluZyB0aGUgYXJndW1l
bnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBhIGNhbGxlZS1zYXZl
IHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBUaGUgcmV0dXJuCisg
ICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3IgRG91YmxlIChmb3Ig
RlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUgcG9pbnRlci4gWW91
IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0IHdpbGwgYWx3YXlz
IHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZlYXQ6IGlmIG91ciBj
b21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5IGZvciBzb21lCisg
ICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNpYyB3aWxsIHJldHVy
biB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAgICAvLyB3aGVyZSBp
dCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIsCisKKyAgICAvLyBQ
b2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBBZGQsCisg
ICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2VyIG1hdGguCisgICAg
Q2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2UgSlMgKHgveSl8MC4K
KyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhvciwKKyAgICBTaGws
CisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1Y2guCisgICAgLy8g
VGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4dDE2LAorICAgIC8v
IFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwKKyAgICBaRXh0MzIs
CisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3VuZCwKKyAgICAvLyBU
YWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAgIC8vIFRha2VzIERv
dWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAvLyBQb2x5bW9ycGhp
YyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJldHVybnMgaW50MzIg
MCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFsKHgsIDApLgorICAg
IEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdyZWF0ZXJUaGFuLAor
ICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJbnRlZ2VyIGNvbXBh
cmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAgICBCZWxvdywKKyAg
ICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1lbW9yeSBsb2Fkcy4gT3Bj
b2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0eXBlLiBUaGVzZSB1c2Ug
TWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgorICAgIExvYWQ4WiwKKyAg
ICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAgIC8vIFRoaXMgcmV0dXJu
cyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMgcmV0dXJuIHdoYXRldmVyIHRo
ZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8gTWVtb3J5IHN0b3Jlcy4gT3Bj
b2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4gVGhlc2UgdXNlIE1lbW9yeVZh
bHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAgU3RvcmU4LAorICAg
IFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2YWx1ZToKKyAgICBTdG9yZUZs
b2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0
LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgb3Jk
aW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVtIEMgY2FsbGluZyBjb252ZW50
aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB1c2lu
ZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAvLyBUaGlzIGlzIGEgcGF0Y2hw
b2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRoaXMgaXMgdmlld2VkIGFzIGJl
aGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVtaXRzIGNvZGUgdmlhIGEgY29k
ZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBjb2RlIGlu
bGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBhbG9uZyB3aXRoIGNvbnN0cmFp
bnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3QgYmUgcGFzc2VkLgorICAgIC8v
IEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgaW4gc29t
ZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0CisgICAgLy8gdGhhdCBhIHN0YWNr
bWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhlIHRvcCBvZiB0aGUgYXJndW1l
bnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgorICAgIFBhdGNocG9pbnQsCisK
KyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tlZE1hdGhWYWx1ZSBjbGFzcy4gTGlr
ZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24KKyAgICAvLyBjYWxs
YmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFmdGVyIHRoZSBlcGls
b2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20gdGhlIGNoZWNrLCBh
bmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBzdXBwbHkgYSBzdGFj
a21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBqdW1wIGJhY2sg
aW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBzaW5jZSB0aGUgY29t
cGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24gb2YgdGhlc2UgaW5z
dHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4uIEZvcgorICAgIC8v
IGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8vCisgICAgLy8gYSA9
IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8KKyAgICAv
LyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8KKyAgICAvLyBhID0g
Q2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAvLworICAgIC8vIFRo
aXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQgYnkgdGhlIHR3byBD
aGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2FsbGJhY2tzLiBZZXQs
IHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFyZSBkaWZmZXJlbnQg
YmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3QgQ2hlY2tBZGQgZXhl
Y3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9zc2libHkgdGFrZW4g
c2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVja0FkZCdzIGNhbGxi
YWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tTdWIsCisgICAgQ2hl
Y2tNdWwsCisKKyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisg
ICAgVXBzaWxvbiwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhp
LAorCisgICAgLy8gSnVtcC4gVXNlcyB0aGUgSnVtcFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisg
ICAgCisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlw
ZS4gQnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQnJhbmNo
VmFsdWUgY2xhc3MuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVy
IGVpdGhlciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAg
U3dpdGNoLAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBr
bm93IHRoZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAv
LyB0eXBlLgorICAgIFJldHVybiwKKworICAgIC8vIFRoaXMgaXMgYSB0ZXJtaW5hbCB0aGF0IGlu
ZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUuCisgICAgT29wcworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0
cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6T3Bjb2Rl
KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM09wY29kZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3UG9pbnRlcihtX2RhdGEpLCAi
KSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3JpZ2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcmlnaW5faAor
I2RlZmluZSBCM09yaWdpbl9oCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIg
Y2FuIGNob29zZSB0byBwdXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIz
IHdpbGwgYmUgYWJsZSB0bworLy8gYWNjb3VudCwgZG93biB0byB0aGUgbWFjaGluZSBjb2RlLCB3
aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNwb25kcyB0byB3aGljaCBvcmlnaW4uIEIzCisvLyB0cmFu
c2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQncyBhbiBlcnJv
ciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9wcyBPcmlnaW5z
IG9yIGxpZXMgYWJvdXQgdGhlbS4KK2NsYXNzIE9yaWdpbiB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRhdGEgPSBudWxscHRyKQorICAgICAgICA6IG1fZGF0YShk
YXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM09yaWdpbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1BhdGNocG9pbnRWYWx1
ZTo6flBhdGNocG9pbnRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFZhbHVlOjpkdW1w
TWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChzdGFja21hcCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1BhdGNocG9pbnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVl
X2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQYXRjaHBvaW50VmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFBhdGNocG9pbnQ7IH0KKworICAgIH5QYXRjaHBvaW50
VmFsdWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQg
aW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwg
UGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisj
aW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQor
CitQcm9jZWR1cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6
OmFkZEJsb2NrKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBz
dGQ6Om1ha2VfdW5pcXVlPEJhc2ljQmxvY2s+KG1fYmxvY2tzLnNpemUoKSk7CisgICAgQmFzaWNC
bG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92
ZShibG9jaykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmlu
ZSBCM1Byb2NlZHVyZV9oCisKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNp
Y0Jsb2NrOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFByb2NlZHVyZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoUHJvY2VkdXJlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKworICAgIFByb2NlZHVyZSgpOworICAgIH5Qcm9jZWR1cmUoKTsKKworICAgIEJhc2lj
QmxvY2sqIGFkZEJsb2NrKCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4u
KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sq
IGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAg
ICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBh
dChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IGl0ZXJhdG9yKCk6CisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAg
ICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0
b3IoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBt
X3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAg
ICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJlLT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5h
dChpbmRleCkpCisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBp
bmV4OworICAgICAgICB9CisKKyAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgbnVtQmxvY2tzKCkpOyB9CisKKyAgICBjbGFzcyBW
YWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlc0NvbGxlY3Rpb24o
UHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVy
ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpOgorICAgICAgICAgICAgICAgIDog
bV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1
cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZhbHVlKiBvcGVyYXRvciooKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+YmxvY2so
bV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisKKyAgICAgICAg
ICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
aXRlcmF0b3IobV9wcm9jZWR1cmUsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXpl
KCkpOyB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2Vk
dXJlLm1fdmFsdWVzLnNpemUoKTsgfQorICAgICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzW2luZGV4XTsgfQorICAgICAgICBW
YWx1ZSogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1
cmU7CisgICAgfTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gVmFs
dWVzQ29sbGVjdGlvbigqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFZhbHVlPj4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEIzUHJvY2VkdXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogUHJvY2VkdXJlOjphZGQoQXJn
dWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVR5cGU+IHZh
bHVlKG5ldyBWYWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1bWVudHMuLi4pKTsKKyAgICBW
YWx1ZVR5cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6
Om1vdmUodmFsdWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Ns
b3RWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90
VmFsdWU6On5TdGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90VmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6
ZSA9ICIsIG1fYnl0ZVNpemUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCisjZGVmaW5lIEIz
U3RhY2tTbG90VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IFN0YWNrU2xvdDsgfQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAg
ICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKworICAg
IC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBZb3UgY2Fu
bm90IHJlbHkgb24gaXQgaGF2aW5nIGEgbWVhbmluZ2Z1bAorICAgIC8vIHZhbHVlIHdoaWxlIHRo
ZSBjb21waWxlciBpcyBydW5uaW5nLgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBN
ZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwg
U3RhY2tTbG90LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVT
aXplKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVu
c2lnbmVkIG1fYnl0ZVNpemU7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICJyZXBz
ID0gIiwgbGlzdER1bXAobV9yZXBzKSwgIiwgZ2VuZXJhdG9yID0gIiwgUmF3UG9pbnRlcihtX2dl
bmVyYXRvci5nZXQoKSksCisgICAgICAgICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJlcmVkLCAi
LCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNr
bWFwX2gKKworI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBTdGFja21hcCB7CitwdWJsaWM6CisgICAgU3RhY2ttYXAoKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIGNvbnN0cmFpbih1bnNpZ25lZCBpbmRleCwgY29uc3QgVmFs
dWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCArIDEgPCBtX3JlcHMuc2l6ZSgp
KQorICAgICAgICAgICAgbV9yZXBzLmdyb3coaW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXBzW2lu
ZGV4XSA9IHJlcDsKKyAgICB9CisKKyAgICB2b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQm
IHNldCkKKyAgICB7CisgICAgICAgIG1fY2xvYmJlcmVkLm1lcmdlKHNldCk7CisgICAgfQorCisg
ICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCAoQ0NhbGxIZWxwZXJz
Jik+PiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGdlbmVyYXRvcjsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0R2Vu
ZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRv
ciA9IGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCAoQ0NhbGxIZWxlcHJzJik+KGZ1bmN0b3IpOworICAg
IH0KKworICAgIC8vIFRoZXNlIHdpbGwgcmV0dXJuIGludGVyZXN0aW5nIHRoaW5ncyBpbnNpZGUg
dGhlIGdlbmVyYXRvciBjYWxsYmFjaywgb3IgYWZ0ZXIgY29tcGlsYXRpb24uCisgICAgY29uc3Qg
VmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsgfQorICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVn
aXN0ZXJzOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPFNoYXJlZFRh
c2s8dm9pZCAoQ0NhbGxIZWxwZXJzJik+PiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBt
X2Nsb2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJ
bnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnBy
aW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAg
IG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVf
aAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lkLAor
ICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworVHlwZSBwb2ludGVyKCkg
Y29uc3QKK3sKKyAgICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAgICAgICByZXR1cm4gSW50
MzI7CisgICAgcmV0dXJuIEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
bmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitWYWx1ZTo6flZh
bHVlKCkKK3sKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdmFs
dWUpCit7CisgICAgLy8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFjZSBy
ZXBsYWNlbWVudCBvZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAgICAv
LyBhIHBsYWluIElkZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUgaW5m
b3JtYXRpb24gd2UgbmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91cyB2
YWx1ZSBpbiBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBp
biBwbGFjZS4KKworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5cGUg
PSBtX3R5cGU7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sq
IG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVw
bGFjZW1lbnQ7CisgICAgdm9pZCogbWlzYyA9IHRoaXMtPm1pc2M7CisKKyAgICBSRUxFQVNFX0FT
U0VSVCh0eXBlID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgp
OworCisgICAgbmV3ICh0aGlzKSAoaW5kZXgsIElkZW50aWZ5LCB0eXBlLCBvcmlnaW4sIHZhbHVl
KTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSBy
ZXBsYWNlbWVudDsKKyAgICB0aGlzLT5taXNjID0gbWlzYzsKK30KKwordm9pZCBWYWx1ZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBt
X2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNvZGUp
OworCisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZv
ciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBw
b2ludGVyRHVtcChjaGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0Owor
ICAgIGR1bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQu
dG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBzdHJpbmcpOworCisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK2Jvb2wgVmFsdWU6
Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3QgVmFs
dWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAorewor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jv
b2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitk
b3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29k
ZSwgVmFsdWUqIGZpcnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNl
IElkZW50aXR5OgorICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgor
ICAgIGNhc2UgRGl2OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2Fz
ZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNo
bDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6Cisg
ICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmly
c3RDaGlsZC0+dHlwZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4g
cG9pbnRlcigpOworICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBE
VG9JMzI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVz
c1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBj
YXNlIEdyZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAg
Y2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICBjYXNlIExvYWQ4WjoK
KyAgICBjYXNlIExvYWQ4UzoKKyAgICBjYXNlIExvYWQxNlo6CisgICAgY2FzZSBMb2FkMTZTOgor
ICAgICAgICByZXR1cm4gSW50MzI7CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2FzZSBaRXh0MzI6
CisgICAgICAgIHJldHVybiBJbnQ2NDsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBjYXNlIElUb0Q6
CisgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgY2FzZSBT
dG9yZTg6CisgICAgY2FzZSBTdG9yZTE2OgorICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICBjYXNl
IFN0b3JlOgorICAgIGNhc2UgVXBzaWxvbjoKKyAgICBjYXNlIFJldHVybjoKKyAgICBjYXNlIE9v
cHM6CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzT3Jp
Z2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0
b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1
bXBQcmVmaXggPSAiQCI7CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUg
b3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRl
bnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisK
KyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAg
ICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4
XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9j
aGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcg
dGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKwor
ICAgIEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAg
ICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRy
ZW47IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3QgVmFsdWVzLiBGb3IgZXhh
bXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBh
CisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAgICAvLworICAgIC8vIGlm
IChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5hczxBcmd1bWVudFJlZ1Zh
bHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncworICAgIC8vIH0KKyAgICAvLworICAgIC8vIFRo
aXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlz
IHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAvLyBpZiBUOjphY2NlcHRz
KG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
VCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0IFQqIGFzKCkgY29u
c3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGludDMyX3QgYXNJbnQz
MigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90
IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91
YmxlIGFzRG91YmxlKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVt
cE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2Nl
ZHVyZS4KKyAgICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBs
aWNpdGx5OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNp
dCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgp
CisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAg
ICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBhcmd1bWVudHMu
Li4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVz
IHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGls
ZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBm
aXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5k
ZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9y
KG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAg
ICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0K
KyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhl
aXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFr
ZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAg
ICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwg
bnVsbHB0cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAg
Ly8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5
cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGls
ZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBj
b21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1
c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIHZvaWQqIG1pc2MgeyBu
dWxscHRyIH07Cit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVw
VmFsdWVEdW1wKFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgVmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVEdW1wIGRlZXBE
dW1wKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNkZWZpbmUgQjNWYWx1ZUlu
bGluZXNfaAorCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0
NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgp
KSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKwordGVtcGxhdGU+dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30K
KworYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0
MzJWYWx1ZT4oKTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFz
SW50NjQoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKwor
aW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRW
YWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitkb3VibGUgVmFsdWU6
OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+
dmFsdWUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Zh
bHVlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZVJlcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBW
YWx1ZVJlcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCht
X2tpbmQpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb25lOgorICAgIGNhc2Ug
U29tZVJlZ2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAg
ICAgb3V0LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50
KCIoIiwgb2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENv
bnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1
ZVJlcDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVS
ZXA6OkFueToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVn
aXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgor
ICAgICAgICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnBy
aW50KCJTdGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVw
OjpDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFs
dWVSZXBfaAorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFz
cyB0byBkZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVz
ZWQgYm90aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXBy
ZXNlbnRhdGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3
ZSBzYXkKKy8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdo
YXQgcmVwcmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRw
dXQuCisKK2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAg
ICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBw
aWNrIGFueSByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFu
IGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29t
ZSByZWdpc3RlciwgcHJvdmlkZWQgdGhhdAorICAgICAgICAvLyBpdCdzIG5vdCBhbHNvIGEgcmVn
aXN0ZXIgdGhhdCB3YXMgY2xvYmJlcmVkLgorICAgICAgICBTb21lUmVnaXN0ZXIsCisKKyAgICAg
ICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxh
ciByZWdpc3Rlci4gQXMgYW4gb3V0cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLCB0aGlz
IHRlbGxzIHVzIHdoYXQgcmVnaXN0ZXIgQjMgcGlja2VkLgorICAgICAgICBSZWdpc3RlciwKKwor
ICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hh
dCBzdGFjayBzbG90IEIzIHBpY2tlZC4gSXQncyBub3QgYSB2YWxpZAorICAgICAgICAvLyBpbnB1
dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgU3RhY2ssCisKKyAgICAgICAgLy8gQXMgYW4gaW5w
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIHRoZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhl
IGFyZ3VtZW50IGFyZWEgYXQgc29tZQorICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgIFN0YWNr
QXJndW1lbnQsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlz
IHRlbGxzIHVzIHRoYXQgQjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29u
c3RhbnQKKyAgICB9OworICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55
KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAg
ICA6IG1fa2luZChSZWdpc3RlcikKKyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAg
IHsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAg
ICAgICByZXR1cm4gVmFsdWVSZXAocmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAg
c3RhY2soaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3Zh
bHVlID0gb2Zmc2V0RnJvbUZQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0Fy
Z3VtZW50KGludHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAgIHJl
c3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbVNQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJl
cCBjb25zdGFudChpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3Zh
bHVlID0gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGRvdWJs
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChiaXR3aXNlX2Nhc3Q8aW50
NjRfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQ7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBr
aW5kKCkgIT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9tSW5kZXgo
bV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNl
dEZyb21TUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrQXJn
dW1lbnQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOwor
ICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKwor
ICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50NjRf
dCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBX
VEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJl
cDo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNWYWx1ZVJlcF9o
CisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263427</attachid>
            <date>2015-10-18 13:40:23 -0700</date>
            <delta_ts>2015-10-18 16:36:36 -0700</delta_ts>
            <desc>B3 instructions are fleshed out</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>125378</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRS
ZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1lbnRSZWdWYWx1ZSgpCit7Cit9CisK
K3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNBcmd1bWVudFJlZ1ZhbHVl
X2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRp
YyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50
UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUoKTsKKworICAgIFJlZyBhcmd1bWVu
dFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50UmVnVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIEFyZ3Vt
ZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAg
ICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAgUmVnIG1fcmVnOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0FyZ3VtZW50UmVnVmFsdWVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQmFzaWNC
bG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQmFzaWNCbG9jazo6
QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1faW5kZXgoaW5kZXgpCit7Cit9CisK
K0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwordm9pZCBCYXNpY0Jsb2NrOjphcHBl
bmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9CisKK3Zv
aWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywg
IjpcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91dC5wcmlu
dCgiICAgICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5lIEIzQmFz
aWNCbG9jaworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2Vk
dXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5cGVkZWYg
VmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29u
dHJvbFZhbHVlJ3MgdHlwZWRlZi4KKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4
ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgQWRqYWNlbmN5TGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgQWRqYWNlbmN5TGlzdDo6aXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBBZGphY2VuY3lMaXN0
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7
IH0KKyAgICBBZGphY2VuY3lMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyBy
ZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFs
dWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1
ZXM7IH0KKworICAgIHZvaWQgYXBwZW5kKFZhbHVlKik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVu
ZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vz
c29ycygpIGNvbnN0OworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAg
Y29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0OworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAg
Ly8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGlu
ZGV4KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWVMaXN0IG1fdmFsdWVzOwor
fTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNC
bG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91
dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAg
fQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNC
bG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBC
YXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gQjNCYXNpY0Jsb2NrCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQmFzaWNCbG9ja0lubGluZXNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tJbmxpbmVz
X2gKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVl
LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUgdHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBw
cm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1
bHQgPSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQo
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit1bnNpZ25lZCBCYXNpY0Jsb2NrOjpu
dW1TdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFs
dWU+KCktPm51bVN1Y2Nlc3NvcnMoKTsKK30KKworQmFzaWNCbG9jayogQmFzaWNCbG9jazo6c3Vj
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENv
bnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworQmFzaWNCbG9jayomIEJhc2lj
QmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5h
czxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2NvbnN0IEJhc2ljQmxv
Y2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAg
IHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lubGluZXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hl
Y2tWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ2hlY2tWYWx1
ZTo6fkNoZWNrVmFsdWUoKQoreworfQorCit2b2lkIENoZWNrVmFsdWU6OmR1bXBNZXRhKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0YWNr
bWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQ2hlY2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1Zh
bHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQ2hlY2tWYWx1ZSA6IHB1YmxpYyBDaGVjayB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVj
a1N1YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgY2FzZSBDaGVjazoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfkNoZWNrVmFsdWUoKTsKKworICAgIFN0
YWNrbWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFu
ZCBDaGVja011bC4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luLCBsZWZ0LCByaWdodCkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0ludCh0eXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKGxlZnQt
PnR5cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBDaGVj
a0FkZCB8fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2RlID09IENoZWNrTXVsKTsKKyAgICB9
CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KKyAgICBDaGVja1ZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRl
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY2RlID09IENoZWNrKTsKKyAgICB9Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Nv
bnN0MzJWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Qz
MlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDb25zdDMyVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25z
dDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAg
ICB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBp
bnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3Jp
Z2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBp
bnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwor
dm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0
NjRWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IENvbnN0NjQ7IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50
NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M0NvbnN0RG91YmxlVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K0NvbnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25z
dERvdWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91Ymxl
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVl
X2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFs
dWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bj
b2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAg
fkNvbnN0RG91YmxlVmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2Nl
ZHVyZTsKKworICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmln
aW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBkb3VibGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVl
KCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1
bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gK
KworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAg
ICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAg
ICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9m
IENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFz
PENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNz
b3JMaXN0OworCisgICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vz
c29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29y
c1tpXTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorCisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vz
c29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNl
IHRoaXMgZm9yIHN1YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAg
ICB9CisKKyAgICAvLyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNz
b3JMaXN0IG1fc3VjY2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybiBhbmQgT29wcy4KKyAgICBDb250cm9s
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9wY29kZSA9PSBSZXR1cm4gfHwgb3Bjb2RlID09IE9vcHMpOworICAgIH0KKworICAg
IC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayogdGFyZ2V0KQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFT
U0VSVChvcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQodGFyZ2V0
KTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRyb2xWYWx1
ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIEJhc2ljQmxvY2sqIHllcywgQmFzaWNCbG9jayog
bm8pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNh
dGUpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAgICAgIG1f
c3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChubyk7
CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Nv
bnRyb2xWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJbmRl
eFNldF9oCisKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBp
cyBhIHNldCBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmlj
aWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMg
aWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1ZXMg
Y2FuIGhhdmUgdmVyeSBzcGFyc2UKKy8vIGluZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBW
YWx1ZXMuCisKKy8vIElmIHlvdSB3YW50IGEgc2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8gSW5k
ZXhTZXQ8QmFzaWNCbG9jaz4uIFNvLCBUID0gQmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBJbmRleFNldCB7CitwdWJsaWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsKKyAg
ICB9CisKKyAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9z
ZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQqIHZh
bHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBjbGFzcyBJ
dGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBJdGVyYWJsZShjb25zdCBDb2xsZWN0aW9u
VHlwZSYgY29sbGVjdGlvbiwgY29uc3QgSW5kZXhTZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKGNvbGxlY3Rpb24pCisgICAgICAgICAgICAsIG1fc2V0KHNldCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24o
bnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRl
cmF0b3IoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIEJpdFZlY3Rvcjo6U2V0Qml0
c0l0ZXJhYmxlOjppdGVyYXRvciBpdGVyKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9u
KCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pdGVyKGl0ZXIpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRlcik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2l0ZXIrKzsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1faXRlciA9PSBvdGhlci5tX2l0ZXI7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBDb2xs
ZWN0aW9uVHlwZSogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgQml0VmVjdG9yOjpTZXRCaXRz
SXRlcmFibGU6Oml0ZXJhdG9yIG1faXRlcjsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuYmVn
aW4oKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
bV9jb2xsZWN0aW9uLCBtX3NldC5lbmQoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNv
bnN0IENvbGxlY3Rpb25UeXBlJiBtX2NvbGxlY3Rpb247CisgICAgICAgIGNvbnN0IEluZGV4U2V0
JiBtX3NldDsKKyAgICB9OworCisgICAgLy8gRm9yIGJhc2ljIGJsb2NrcywgeW91IGRvOgorICAg
IC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUpOworICAgIC8vCisgICAgLy8gRm9yIHZhbHVl
cywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUudmFsdWVzKCkpOwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIEl0ZXJhYmxlPENvbGxl
Y3Rpb25UeXBlPiB2YWx1ZXMoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+KGNvbGxlY3Rp
b24pOworICAgIH0KKworICAgIGNvbnN0IEJpdFZlY3RvciYgaW5kaWNlcygpIGNvbnN0IHsgcmV0
dXJuIG1fc2V0OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAg
ICB7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5k
ZXggOiBpbmRpY2VzKCkuc2V0Qml0cygpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBU
OjpkdW1wUHJlZml4LCBpbmRleCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJpdFZlY3RvciBt
X3NldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNJbmRl
eFNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNNZW1vcnlWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
TWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAg
ICAgICBvdXQucHJpbnQoIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNk
ZWZpbmUgQjNNZW1vcnlWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAg
ICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9h
ZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAg
ICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9y
ZUZsb2F0OgorICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB+TWVtb3J5VmFsdWUoKTsKKworICAgIGludHB0cl90IG9mZnNldCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9h
ZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQK
KyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKAor
ICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAg
ICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAg
ICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJM
RUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExv
YWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAg
ICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAg
ICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMy
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IERvdWJsZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUx
NjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6
CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNl
IHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisg
ICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBwb2ludGVyLCBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBMb2FkRmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3Jp
Z2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAg
ICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAg
ICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwg
VmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAg
ICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3Rv
cmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZs
b2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzTWVtb3J5VmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91
dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRl
bnRpdHk6CisgICAgICAgIG91dC5wcmludCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgICAgICAvLyBGSVhNRQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUg
QjNPcGNvZGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBB
IG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVt
b3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBpZGVudGl0
eSwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgSWRlbnRpdHksCisKKyAgICAvLyBD
b25zdGFudHMuIFVzZSB0aGUgQ29uc3RWYWx1ZSogY2xhc3Nlcy4gQ29uc3RhbnRzIGV4aXN0IGlu
IHRoZSBjb250cm9sIGZsb3csIHNvIHRoYXQgd2UgY2FuCisgICAgLy8gcmVhc29uIGFib3V0IHdo
ZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0aGVtLiBMYXJnZSBjb25zdGFudHMgYXJlIGV4cGVuc2l2
ZSB0byBjcmVhdGUuCisgICAgQ29uc3QzMiwKKyAgICBDb25zdDY0LAorICAgIENvbnN0RG91Ymxl
LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgc3RhY2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhl
Y3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0gcmVnYXJkbGVzcyBvZgorICAgIC8vIHdo
ZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tT
bG90IFZhbHVlIGdldHMgYSBkaXNqb2ludCByYW5nZSBvZgorICAgIC8vIHN0YWNrIG1lbW9yeS4g
VXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFzcy4KKyAgICBTdGFja1Nsb3QsCisKKyAgICAvLyBU
aGUgbWFnaWNhbCBhcmd1bWVudCByZWdpc3Rlci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5n
IGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0KKyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXJlIGlu
IGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LCBhbmQgdGhlIGNvbXBpbGVyIHRha2VzIGNhcmUgdG8g
ZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBkb24ndCBjbG9iYmVyIHRoZSB2YWx1ZSBieSByZWdpc3Rl
ciBhbGxvY2F0aW9uIG9yIGNhbGxzIChlaXRoZXIgYnkgc2F2aW5nIHRoZSBhcmd1bWVudCB0byB0
aGUKKyAgICAvLyBzdGFjayBvciBwcmVzZXJ2aW5nIGl0IGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0
ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVnVmFsdWUgY2xhc3MuIFRoZSByZXR1cm4KKyAgICAvLyB0
eXBlIGlzIGVpdGhlciBwb2ludGVyKCkgKGZvciBHUFJzKSBvciBEb3VibGUgKGZvciBGUFJzKS4K
KyAgICBBcmd1bWVudFJlZywKKworICAgIC8vIFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1
dCB0aGlzIGFueXdoZXJlIGluIGNvbnRyb2wgZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQg
dGhlCisgICAgLy8gZnJhbWUgcG9pbnRlciwgd2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVy
IGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50ZXIgdGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBz
aWxseSByZWFzb24sIHRoZSBGcmFtZVBvaW50ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJl
IHRoZSBmcmFtZSBwb2ludGVyICpzaG91bGQqIGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBl
bnMgdG8gYmUgcmlnaHQgbm93LgorICAgIEZyYW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3Jw
aGljIG1hdGgsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIs
CisgICAgTXVsLAorICAgIERpdiwKKworICAgIC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERp
diwgLy8gZG9lc24ndCB0cmFwIGV2ZXIsIGJlaGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1v
ZCwKKyAgICBCaXRBbmQsCisgICAgQml0T3IsCisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBT
U2hyLAorICAgIFpTaHIsCisKKyAgICAvLyBDYXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBh
bmQgcmV0dXJucyBJbnQzMjoKKyAgICBTRXh0OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMg
SW50MzIgYW5kIHJldHVybnMgSW50NjQ6CisgICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAv
LyBUYWtlcyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGlu
dHMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFu
ZCByZXR1cm5zIEludDMyOgorICAgIERUb0kzMiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBh
cmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEu
IE5vdGUgdGhhdCAiTm90IgorICAgIC8vIGlzIGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWws
CisgICAgTm90RXF1YWwsCisgICAgTGVzc1RoYW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVz
c0VxdWFsLAorICAgIEdyZWF0ZXJFcXVhbCwKKworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMu
IFJldHVybnMgaW50MzIgMCBvciAxLgorICAgIEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3Zl
RXF1YWwKKyAgICBCZWxvd0VxdWFsLAorCisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5k
aWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUgbG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlW
YWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4gSW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4
UywKKyAgICBMb2FkMTZaLAorICAgIExvYWQxNlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJs
ZToKKyAgICBMb2FkRmxvYXQsCisgICAgLy8gVGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVy
biB0eXBlIGlzOgorICAgIExvYWQsCisKKyAgICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5k
aWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3RvcmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisg
ICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUx
NiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisg
ICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBE
b3VibGU6CisgICAgU3RvcmUsCisKKyAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBD
IGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1h
a2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSBy
aWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBV
c2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFzcy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcg
bGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9ubHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVy
YXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgor
ICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNrbWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24g
aG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBs
ZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lz
dGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVlc3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJn
dW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNz
aW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3RhY2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8v
IENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2lu
dCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJhdGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNh
bGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNvZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0
cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8gZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNl
IG9mIHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRo
YXQgeW91CisgICAgLy8gYXJlIG5vdCBhbGxvd2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlu
bGluZSBjb2RlIGZyb20geW91ciBzbG93IHBhdGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8v
IHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJv
dmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhhcHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYg
eW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwg
eSkKKyAgICAvLyBiID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2
YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5
KQorICAgIC8vIGIgPSBJZGVudGl0eShhKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCBy
ZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFja3MgdXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhl
eSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAvLyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zv
cm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtu
b3cgdGhhdAorICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNl
Y29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8g
cGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25kIENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxl
dmFudC4KKyAgICBDaGVja0FkZCwKKyAgICBDaGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAg
IC8vIENoZWNrIHRoYXQgc2lkZS1leGl0cy4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtl
IENoZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlzIGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBh
IGdlbmVyYXRpb24gY2FsbGJhY2suIFRoaXMgdGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0
aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisgICAgLy8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBp
bnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVlIHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3In
cyBzbG93CisgICAgLy8gcGF0aC4KKyAgICBDaGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBp
biB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAgICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVw
c2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQaGksCisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250
cm9sVmFsdWUgY2xhc3MuCisgICAgSnVtcCwKKyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFu
Y2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8g
emVyby4gVXNlcyB0aGUKKyAgICAvLyBDb250cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5k
ZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVlIHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAg
ICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIgZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRo
ZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBTd2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUg
dGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0IGtub3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMg
Y2FuIGp1c3QgcmV0dXJuIGFueQorICAgIC8vIHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBj
bGFzcy4KKyAgICBSZXR1cm4sCisKKyAgICAvLyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRp
Y2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUg
Y2xhc3MuCisgICAgT29wcworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVz
cGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgSlNDOjpCMzo6T3Bjb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBCM09wY29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2lu
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNPcmlnaW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgT3Jp
Z2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJPcmln
aW4oIiwgUmF3UG9pbnRlcihtX2RhdGEpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNPcmlnaW5faAorI2RlZmluZSBCM09yaWdpbl9oCisKKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
Ky8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIgY2FuIGNob29zZSB0byBwdXQgb3JpZ2lucyBvbiB2
YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIzIHdpbGwgYmUgYWJsZSB0bworLy8gYWNjb3VudCwg
ZG93biB0byB0aGUgbWFjaGluZSBjb2RlLCB3aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNwb25kcyB0
byB3aGljaCBvcmlnaW4uIEIzCisvLyB0cmFuc2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2ZSBPcmln
aW5zIGNhcmVmdWxseS4gSXQncyBhbiBlcnJvciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0aW9uIHRo
YXQKKy8vIGVpdGhlciBkcm9wcyBPcmlnaW5zIG9yIGxpZXMgYWJvdXQgdGhlbS4KK2NsYXNzIE9y
aWdpbiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRhdGEgPSBu
dWxscHRyKQorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25z
dCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9k
YXRhOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM09yaWdp
bl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZh
bHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKworI2luY2x1ZGUgPHd0Zi9Db21tYVBy
aW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1BhdGNocG9pbnRW
YWx1ZTo6flBhdGNocG9pbnRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFZhbHVlOjpk
dW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRlciBjb21t
YTsKKyAgICBvdXQucHJpbnQoY29tbWEsICJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKKyAgICBp
ZiAoc2hhZG93KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzaGFkb3cgPSAiLCBzaGFkb3cp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNQYXRjaHBvaW50VmFsdWVfaAorI2RlZmluZSBCM1BhdGNocG9pbnRWYWx1
ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2ludFZhbHVlIDog
cHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBv
cGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+UGF0Y2hwb2lu
dFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKyAgICB1bnNpZ25lZCBzaGFkb3cg
eyAwIH07CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIFBhdGNocG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3Jp
Z2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4pCisg
ICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNQYXRjaHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQ
cm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2NlZHVyZSgpCit7
Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soKQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jaz4o
bV9ibG9ja3Muc2l6ZSgpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsK
KyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChk
ZWVwRHVtcChibG9jaykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKworI2luY2x1ZGUg
PHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1ZTsKKworY2xh
c3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1cmUpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgUHJvY2VkdXJlKCk7Cisg
ICAgflByb2NlZHVyZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soKTsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
a3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRl
cmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgIDog
bV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5z
aWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAg
ICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dCht
X2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
ICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25l
ZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1
cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBp
bmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKworICAgICAgICBQ
cm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07
CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAw
KTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBu
dW1CbG9ja3MoKSk7IH0KKworICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAgIHB1Ymxp
YzoKKyAgICAgICAgVmFsdWVzQ29sbGVjdGlvbihQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICAg
ICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0
ZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAg
ICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgp
CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgMCk7IH0K
KyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1
cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpOyB9CisgICAg
ICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUu
bV92YWx1ZXNbaW5kZXhdOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToK
KyAgICAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29s
bGVjdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitw
cml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tz
OworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZUlubGluZXNfaAorI2Rl
ZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisj
aW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
VmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5z
aXplKCksIGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0
KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9j
ZWR1cmVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sK
K30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBT
dGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
YWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisK
KyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRo
ZSBlbmQgb2YgY29tcGlsYXRpb24uIFlvdSBjYW5ub3QgcmVseSBvbiBpdCBoYXZpbmcgYSBtZWFu
aW5nZnVsCisgICAgLy8gdmFsdWUgd2hpbGUgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcuCisgICAg
aW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0K
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3Rh
Y2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVT
aXplKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXIoKSwgb3JpZ2lu
KQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9vZmZzZXRGcm9t
RlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICBpbnRw
dHJfdCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gQjNTdGFja1Nsb3RWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja21hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja21hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKwordm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgKKyAgICAgICAgIntvcGFxdWUgPSAiLCBSYXdQb2ludGVyKG1fb3BhcXVl
KSwgIiwgcmVwcyA9ICIsIGxpc3REdW1wKG1fcmVwcyksCisgICAgICAgICIsIGdlbmVyYXRvciA9
ICIsIFJhd1BvaW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBjbG9iYmVyZWQgPSAiLCBtX2Ns
b2JiZXJlZCwKKyAgICAgICAgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywg
In0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0
YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgi
CisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNp
bmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQjNWYWx1ZTsKKworY2xhc3MgU3RhY2ttYXAgeworcHVibGljOgorICAgIHN0
cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgVmFsdWUgY29u
dGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZhbHVlKiB2YWx1ZTsKKworICAgICAgICAv
LyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAgU3RhY2ttYXAqIHN0YWNrbWFwOworCisg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIGp1bXAgdG8gdGhlIHNsb3cgcGF0aCwgaWYgdGhpcyBpcyBh
IHN0YWNrbWFwIGZvciBhIENoZWNrIHZhbHVlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
anVtcDsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihD
Q2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFy
ZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3RhY2ttYXAo
KQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBpZGVudGlm
eSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAtdXNpbmcg
VmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRlIG1heSBl
bmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisgICAgLy8g
YWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIgYmFjayB0
byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdlcmUgdXNp
bmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBwYXJhbWV0
ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9CisgICAgdm9p
ZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENvbnZlbmll
bmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAg
dm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBzZXRPcGFx
dWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qgb3BhcXVl
SW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUoKSk7IH0K
KworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1c2VzIHRo
aXMgU3RhY2ttYXAuIE5vdGUgdGhhdCBpbmRleCB6ZXJvIHJlZmVycyB0byB0aGUKKyAgICAvLyBm
aXJzdCBhcmd1bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90
IGNvbnN0cmFpbmFibGUuIEZvciBleGFtcGxlLCBpbiBhCisgICAgLy8gQ2hlY2tBZGQgdmFsdWUs
IGl0IHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEg
Q2hlY2sgdmFsdWUsIGl0IHdvdWxkCisgICAgLy8gYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGlu
ZGV4IDAuIEJ1dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBj
YW4gZGVwZW5kCisgICAgLy8gb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmls
bGVkIGluLgorICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJl
cCYgcmVwKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXplKCkpCisg
ICAgICAgICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhd
ID0gcmVwOworICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0
KQorICAgIHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICB2
b2lkIHNldEdlbmVyYXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAg
ICAgICBtX2dlbmVyYXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJh
dG9yRnVuY3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKworICAgIC8vIFRoZXNlIHdpbGwgcmV0dXJu
IGludGVyZXN0aW5nIHRoaW5ncyBpbnNpZGUgdGhlIGdlbmVyYXRvciBjYWxsYmFjaywgb3IgYWZ0
ZXIgY29tcGlsYXRpb24uCisgICAgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0
IHsgcmV0dXJuIG1fcmVwczsgfQorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCogbV9vcGFxdWUgeyBu
dWxscHRyIH07CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVy
YXRvcj4gbV9nZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVn
aXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNC
bG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTd2l0Y2hD
YXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2Fz
ZVZhbHVlLCAiLT4iLCBwb2ludGVyRHVtcChtX3RhcmdldCkpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2Fz
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2Uu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2Uu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hDYXNlX2gKKyNkZWZpbmUg
QjNTd2l0Y2hDYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3
aXRjaENhc2UoKQorICAgIHsKKyAgICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZh
bHVlLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUoY2FzZVZhbHVl
KQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0KKworICAgIGlu
dDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBCYXNp
Y0Jsb2NrKiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludDY0X3QgY2Fz
ZVZhbHVlOworICAgIEJhc2ljQmxvY2sqIHRhcmdldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsZHVlICJCM1N3aXRjaFZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hWYWx1ZTo6flN3aXRjaFZhbHVlKCkK
K3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICBTd2l0Y2hDYXNlIHJlc3VsdCA9IG1fc3VjY2Vzc29yc1tpbmRleF07CisgICAg
bV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0KCk7CisgICAgbV9zdWNjZXNz
b3JzLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFN3aXRjaFZh
bHVlOjphcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAgbV9z
dWNjZXNzb3JzLmFwcGVuZChtX3N1Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3NvcnNb
bV9zdWNjZXNzb3JzLnNpemUoKSAtIDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBtX3Zh
bHVlcy5hcHBlbmQoc3dpdGNoQ2FzZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNoVmFs
dWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBkZXN0
cnVjdGl2ZWx5IG92ZXJyaWRlcyBDb250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91dC5w
cmludChsaXN0RHVtcCgqdGhpcykpOworfQorCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKQorICAg
IDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3Nv
cnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hW
YWx1ZV9oCisKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNo
Q2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNo
VmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAg
IH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNj
ZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZh
bHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpXTsgfQorICAgIAorICAgIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisK
KyAgICBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMo
KS5sYXN0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNj
ZXNzb3JzKCkubGFzdCgpOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bnVtQ2FzZVZhbHVlcygpOyB9CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1
Y2Nlc3NvcihpbmRleCkpOworICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0K
KworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkK
KyAgICAgICAgICAgIDogbV9zd2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgw
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihTd2l0Y2hWYWx1ZSYg
c3dpdGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dp
dGNoVmFsdWUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsr
OworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgU3dpdGNoVmFsdWUqIG1fc3dpdGNoOworICAgICAgICB1bnNp
Z25lZCBtX2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICAvLyBUaGlzIHJlbW92ZXMgdGhl
IGNhc2UgYW5kIHJlb3JkZXJzIHRoaW5ncyBhIGJpdC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0aGUg
Y2FzZXMgZnJvbSAwIHRvIE4sCisgICAgLy8gdGhlbiB5b3UgY2FuIGtlZXAgaXRlcmF0aW5nIGFm
dGVyIHRoaXMgc28gbG9uZyBhcyB5b3UgcmV2aXNpdCB0aGlzIHNhbWUgaW5kZXggKHdoaWNoIHdp
bGwgbm93CisgICAgLy8gY29udGFpbiBzb21lIG90aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJlbW92
ZXMgdGhlIGNhc2UgdGhhdCB3YXMgcmVtb3ZlZC4KKyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNhc2Uo
dW5zaWduZWQgaW5kZXgpOworCisgICAgdm9pZCBhcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2Um
IHN3aXRjaENhc2UpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1
cmU7CisKKyAgICBTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgQmFz
aWNCbG9jayogZmFsbFRocm91Z2gpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBCM1N3aXRjaFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQoIlZvaWQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIG91dC5wcmludCgiSW50NjQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5
cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBlX2gK
KworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2VudW0gVHlwZSB7CisgICAgVm9pZCwKKyAgICBJbnQzMiwKKyAgICBJbnQ2
NCwKKyAgICBEb3VibGUKK307CisKK2lubGluZSBib29sIGlzSW50KFR5cGUgdHlwZSkKK3sKKyAg
ICByZXR1cm4gdHlwZSA9PSBJbnQzMiB8fCB0eXBlID09IEludDY0OworfQorCitpbmxpbmUgYm9v
bCBpc0Zsb2F0KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBEb3VibGU7Cit9CisK
K2lubGluZSBUeXBlIHBvaW50ZXIoKSBjb25zdAoreworICAgIGlmIChzaXplb2Yodm9pZCopID09
IDQpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICByZXR1cm4gSW50NjQ7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJl
YW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlR5cGUpOwor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1ZTo6flVw
c2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiXiIsIG1fcGhpLT5pbmRleCgpKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzVXBzaWxvblZhbHVlX2gKKyNkZWZpbmUgQjNVcHNpbG9uVmFsdWVfaAorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVXBz
aWxvblZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9CisKKyAgICB+
VXBzaWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkgY29uc3QgeyByZXR1cm4gbV9waGk7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAor
ICAgIFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZh
bHVlLCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9yaWdp
biwgdmFsdWUpCisgICAgICAgICwgbV9waGkocGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZh
bHVlLT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0KKworICAgIFZhbHVlKiBtX3BoaTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNVcHNpbG9uVmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitWYWx1ZTo6flZhbHVlKCkKK3sKK30KKwor
dm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdmFsdWUpCit7CisgICAgLy8g
VGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNlbWVudCBvZiB3
aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBsYWluIElkZW50
aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd2UgbmVl
ZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFjZSwg
YW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4KKworICAg
IHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5cGU7CisgICAg
T3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+
b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisgICAg
dm9pZCogbWlzYyA9IHRoaXMtPm1pc2M7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlID09IHZh
bHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0
aGlzKSAoaW5kZXgsIElkZW50aWZ5LCB0eXBlLCBvcmlnaW4sIHZhbHVlKTsKKworICAgIHRoaXMt
Pm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKKyAg
ICB0aGlzLT5taXNjID0gbWlzYzsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwor
dm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNvZGUpOworCisgICAgb3V0LnBy
aW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxk
IDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGls
ZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0
cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7Cisg
ICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcp
OworCisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBj
b25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0Rv
dWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitkb3VibGUgVmFsdWU6OmFz
RG91YmxlKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiAwOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0
Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0
Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAg
IGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2Ogor
ICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAg
Y2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNT
aHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1
YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgp
OworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRlcigpOworICAg
IGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2Fz
ZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2Fz
ZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVh
bDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFs
OgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGNhc2Ug
U0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7CisgICAgY2Fz
ZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gRG91YmxlOworICAgIGNh
c2UgTm9wOgorICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpbmNsdWRlICJC
M09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFs
dWUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYg
VmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlzdDsKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBkdW1wUHJlZml4ID0gIkAiOworCisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUpIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgflZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQg
dGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZhbHVlcyB3aXRo
IGlkZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsg
fQorCisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAg
CisgICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJlbltp
bmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fY2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBlIHVz
aW5nIHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0g
CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2No
aWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAgICB2
b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICAvLyBUaGlz
IGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBkbyBz
b21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZlIGEKKyAgICAvLyBBcmd1bWVudFJlZ1ZhbHVl
LCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8gaWYgKEFyZ3VtZW50UmVnVmFsdWUqIGFyZ3Vt
ZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCkpIHsKKyAgICAvLyAgICAgdGhp
bmdzCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRo
aXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGlzIHJldHVy
bnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2VwdHMob3Bjb2RlKCkpIHJldHVybnMgZmFsc2Uu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhcygpOworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0lu
dDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Q7CisgICAgCisgICAgYm9v
bCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisgICAg
Ym9vbCBoYXNEb3VibGUoKSBjb25zdDsKKyAgICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKKwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAg
IC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSBy
ZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNv
ZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQor
ICAgICAgICAsIG1fY2hpbGRyZW57IGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAv
LyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlw
ZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGNoaWxkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2Rl
IG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShv
cGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKKyAg
ICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGls
ZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3Ig
dGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBh
bG9uZSwgYW5kIHRoYXQgZG9uJ3QKKyAgICAvLyB0YWtlIGFueSBhcmd1bWVudHM6CisgICAgZXhw
bGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4p
CisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisg
ICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBudWxscHRyKSkKKyAgICAgICAgLCBtX29y
aWdpbihvcmlnaW4pCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3IoT3Bj
b2RlLCBWYWx1ZSogZmlyc3RDaGlsZCk7CisKKyAgICAvLyBUaGlzIGdyb3VwIG9mIGZpZWxkcyBp
cyBhcnJhbmdlZCB0byBmaXQgaW4gNjQgYml0cy4KKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
IE9wY29kZSBtX29wY29kZTsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICAKKyAgICBPcmlnaW4gbV9v
cmlnaW47CisgICAgQWRqYWNlbmN5TGlzdCBtX2NoaWxkcmVuOworCitwdWJsaWM6CisgICAgQmFz
aWNCbG9jayogb3duZXIgeyBudWxscHRyIH07IC8vIGNvbXB1dGVkIGxhemlseS4KKyAgICBWYWx1
ZSogcmVwbGFjZW1lbnQgeyBudWxscHRyIH07IC8vIHVzZWQgZm9yIGFuYWx5c2VzIGFuZCB0cmFu
c2Zvcm1hdGlvbnMuCisgICAgdm9pZCogbWlzYyB7IG51bGxwdHIgfTsKK307CisKK2NsYXNzIERl
ZXBWYWx1ZUR1bXAgeworcHVibGljOgorICAgIERlZXBWYWx1ZUR1bXAoVmFsdWUqIHZhbHVlKQor
ICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAg
ICAgICAgICBtX3ZhbHVlLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWYWx1ZSogbV92
YWx1ZTsKK307CisKK0RlZXBWYWx1ZUR1bXAgZGVlcER1bXAoVmFsdWUqIHZhbHVlKQoreworICAg
IHJldHVybiBEZWVwVmFsdWVEdW1wKHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBCM1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNW
YWx1ZUlubGluZXNfaAorI2RlZmluZSBCM1ZhbHVlSW5saW5lc19oCisKKyNpbmNsdWRlICJCM0Nv
bnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisjaW5jbHVkZSAiQjND
b25zdERvdWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QqIFZhbHVlOjphcygp
Cit7CisgICAgaWYgKFQ6OmFjY2VwdHMob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8VCo+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZT50eXBl
bmFtZSBUPgorY29uc3QgVCogVmFsdWU6OmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3Rf
Y2FzdDxWYWx1ZSo+KHRoaXMpLT5hczxUPigpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigp
IGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbnQzMl90
IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVlPigp
LT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuICEhYXM8Q29uc3Q2NFZhbHVlPigpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCiti
b29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0RG91
YmxlVmFsdWU+KCk7Cit9CisKK2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAg
IHJldHVybiBhczxDb25zdERvdWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzVmFsdWVJbmxpbmVzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICBjYXNlIE5vbmU6CisgICAgY2FzZSBTb21lUmVnaXN0ZXI6CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIigiLCByZWcoKSwg
IikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIG91dC5wcmlu
dCgiKCIsIG9mZnNldEZyb21GUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFja0FyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tU1AoKSwgIiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmlu
dCgiKCIsIHZhbHVlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
K25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZhbHVlUmVwOjpLaW5kIGtpbmQpCit7CisgICAg
c3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICBvdXQucHJp
bnQoIkFueSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lz
dGVyOgorICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiUmVnaXN0
ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAg
ICBvdXQucHJpbnQoIlN0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVw
OjpTdGFja0FyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrQXJndW1lbnQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICBvdXQu
cHJpbnQoIkNvbnN0YW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1ZhbHVlUmVwX2gKKyNkZWZpbmUgQjNWYWx1ZVJlcF9oCisKKyNpbmNsdWRlICJSZWcu
aCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKKy8vIFdlIHVzZSB0aGlzIGNsYXNzIHRvIGRlc2NyaWJlIHZhbHVlIHJlcHJl
c2VudGF0aW9ucyBhdCBzdGFja21hcHMuIEl0J3MgdXNlZCBib3RoIHRvIGZvcmNlIGEKKy8vIHJl
cHJlc2VudGF0aW9uIGFuZCB0byBnZXQgdGhlIHJlcHJlc2VudGF0aW9uLiBXaGVuIHRoZSBCMyBj
bGllbnQgZm9yY2VzIGEgcmVwcmVzZW50YXRpb24sIHdlIHNheQorLy8gdGhhdCBpdCdzIGFuIGlu
cHV0LiBXaGVuIEIzIHRlbGxzIHRoZSBjbGllbnQgd2hhdCByZXByZXNlbnRhdGlvbiBpdCBwaWNr
ZWQsIHdlIHNheSB0aGF0IGl0J3MgYW4KKy8vIG91dHB1dC4KKworY2xhc3MgVmFsdWVSZXAgewor
cHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgY2FuIHBpY2sgYW55IHJlcHJlc2VudGF0aW9uLgor
ICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLCBwcm92aWRlZCB0aGF0
CisgICAgICAgIC8vIGl0J3Mgbm90IGFsc28gYSByZWdpc3RlciB0aGF0IHdhcyBjbG9iYmVyZWQu
CisgICAgICAgIFNvbWVSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNl
bnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQK
KyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCByZWdpc3RlciBC
MyBwaWNrZWQuCisgICAgICAgIFJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1dCBy
ZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJ
dCdzIG5vdCBhIHZhbGlkCisgICAgICAgIC8vIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAg
ICBTdGFjaywKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBm
b3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUgYXJndW1lbnQgYXJlYSBhdCBzb21lCisg
ICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgU3RhY2tBcmd1bWVudCwKKworICAgICAgICAvLyBB
cyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgdGhhdCBCMyBjb25zdGFu
dC1mb2xkZWQgdGhlIHZhbHVlLgorICAgICAgICBDb25zdGFudAorICAgIH07CisgICAgCisgICAg
VmFsdWVSZXAoKQorICAgICAgICA6IG1fa2luZChBbnkpCisgICAgeworICAgIH0KKworICAgIGV4
cGxpY2l0IFZhbHVlUmVwKFJlZyByZWcpCisgICAgICAgIDogbV9raW5kKFJlZ2lzdGVyKQorICAg
ICAgICAsIG1fdmFsdWUocmVnLmluZGV4KCkpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCByZWcoUmVnIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChyZWcp
OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFjayhpbnRwdHJfdCBvZmZzZXRGcm9t
RlApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tRlA7CisgICAg
fQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrQXJndW1lbnQoaW50cHRyX3Qgb2Zmc2V0RnJv
bVNQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gU3RhY2tBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9t
U1A7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGludDY0X3QgdmFsdWUp
CisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFZhbHVlUmVwKGJpdHdpc2VfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAgIH0KKwor
ICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBBbnk7IH0KKworICAgIFJl
ZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZWdpc3Rlcik7
CisgICAgICAgIHJldHVybiBSZWc6OmZyb21JbmRleChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBp
bnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV92YWx1
ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2tBcmd1bWVudCk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnRwdHJfdD4obV92YWx1ZSk7CisgICAgfQorCisgICAgaW50NjRfdCB2YWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IENvbnN0YW50KTsKKyAg
ICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCisgICAgZG91YmxlIGRvdWJsZVZhbHVlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSgp
KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBLaW5kIG1fa2luZDsKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlZhbHVlUmVwOjpLaW5kKTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBCM1ZhbHVlUmVwX2gKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263432</attachid>
            <date>2015-10-18 16:36:36 -0700</date>
            <delta_ts>2015-10-18 18:25:21 -0700</delta_ts>
            <desc>started playing with instruction selection</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>156558</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvRHluYW1pY0FkZHJlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvRHluYW1pY0Fk
ZHJlc3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9EeW5hbWljQWRkcmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRHluYW1pY0FkZHJlc3MuaCIKKworI2luY2x1ZGUgIkdQUkluZm8u
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgRHluYW1pY0FkZHJlc3M6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBBZGRyZXNzOgorICAgIGNhc2UgRXh0ZW5kZWRBZGRyZXNzOgor
ICAgICAgICBvdXQucHJpbnQobV9vZmZzZXQsICIoIiwgbV9iYXNlLCAiKSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBCYXNlSW5kZXg6CisgICAgICAgIG91dC5wcmludChtX29mZnNldCwg
IigiLCBtX2Jhc2UsICIsICIsIG1faW5kZXgsICIsICIsIDEgPDwgbV9zY2FsZSwgIikiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzb2x1dGVBZGRyZXNzOgorICAgICAgICBvdXQucHJp
bnQobV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIpCisgICAgb3V0LnBy
aW50KCIwIik7CisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvRHluYW1pY0Fk
ZHJlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0R5
bmFtaWNBZGRyZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0R5bmFtaWNBZGRyZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
eW5hbWljQWRkcmVzc19oCisjZGVmaW5lIER5bmFtaWNBZGRyZXNzX2gKKworI2luY2x1ZGUgIkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIER5bmFtaWNBZGRyZXNzIHsKK3B1YmxpYzoKKyAgICBl
bnVtIEtpbmQgeworICAgICAgICBBZGRyZXNzLAorICAgICAgICBFeHRlbmRlZEFkZHJlc3MsCisg
ICAgICAgIEJhc2VJbmRleCwKKyAgICAgICAgQWJzb2x1dGVBZGRyZXNzCisgICAgfTsKKworI2lm
IEVOQUJMRShBU1NFTUJMRVIpCisKKyAgICBEeW5hbWljQWRkcmVzcygpCisgICAgICAgIDogbV9r
aW5kKEFic29sdXRlQWRkcmVzcykKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgICAgICAsIG1f
YmFzZShBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpCisgICAgICAgICwg
bV9pbmRleChBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpCisgICAgICAg
ICwgbV9zY2FsZShBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSkKKyAgICB7CisgICAg
fQorCisgICAgZXhwbGljaXQgRHluYW1pY0FkZHJlc3MoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyBhZGRyZXNzKQorICAgICAgICA6IG1fa2luZChBZGRyZXNzKQorICAgICAgICAsIG1f
b2Zmc2V0KGFkZHJlc3Mub2Zmc2V0KQorICAgICAgICAsIG1fYmFzZShhZGRyZXNzLmJhc2UpCisg
ICAgICAgICwgbV9pbmRleChBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkp
CisgICAgICAgICwgbV9zY2FsZShBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSkKKyAg
ICB7CisgICAgfQorCisgICAgZXhwbGljaXQgRHluYW1pY0FkZHJlc3MoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6RXh0ZW5kZWRBZGRyZXNzIGFkZHJlc3MpCisgICAgICAgIDogbV9raW5kKEV4dGVu
ZGVkQWRkcmVzcykKKyAgICAgICAgLCBtX29mZnNldChhZGRyZXNzLm9mZnNldCkKKyAgICAgICAg
LCBtX2Jhc2UoYWRkcmVzcy5iYXNlKQorICAgICAgICAsIG1faW5kZXgoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKQorICAgICAgICAsIG1fc2NhbGUoQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcjo6VGltZXNPbmUpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IER5bmFt
aWNBZGRyZXNzKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhZGRyZXNzKQorICAg
ICAgICA6IG1fa2luZChCYXNlSW5kZXgpCisgICAgICAgICwgbV9vZmZzZXQoYWRkcmVzcy5vZmZz
ZXQpCisgICAgICAgICwgbV9iYXNlKGFkZHJlc3MuYmFzZSkKKyAgICAgICAgLCBtX2luZGV4KGFk
ZHJlc3MuaW5kZXgpCisgICAgICAgICwgbV9zY2FsZShhZGRyZXNzLnNjYWxlKQorICAgIHsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBEeW5hbWljQWRkcmVzcyhBYnN0cmFjdE1hY3JvQXNzZW1ibGVy
OjpBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICAgICAgOiBtX2tpbmQoQWJzb2x1dGVBZGRy
ZXNzKQorICAgICAgICAsIG1fb2Zmc2V0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oYWRkcmVzcy5t
X3B0cikpCisgICAgICAgICwgbV9iYXNlKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVn
aXN0ZXIoKSkKKyAgICAgICAgLCBtX2luZGV4KEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmZpcnN0
UmVnaXN0ZXIoKSkKKyAgICAgICAgLCBtX3NjYWxlKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlRp
bWVzT25lKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRHluYW1p
Y0FkZHJlc3MmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBv
dGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0Cisg
ICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAgICYmIG1fc2NhbGUgPT0gb3RoZXIubV9z
Y2FsZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRHluYW1pY0FkZHJlc3Mm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICp0aGlzICE9IER5bmFtaWNBZGRyZXNzKCk7CisgICAgfQorCisgICAgS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9r
aW5kID09IEFkZHJlc3MpOworICAgICAgICByZXR1cm4gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhtX2Jhc2UsIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQor
CisgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RXh0ZW5kZWRBZGRyZXNzIGFzRXh0ZW5kZWRB
ZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRXh0ZW5kZWRB
ZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkV4dGVuZGVk
QWRkcmVzcyhtX2Jhc2UsIG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fa2luZCA9PSBCYXNlSW5kZXgpOworICAgICAgICByZXR1cm4gQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KG1fYmFzZSwgbV9pbmRleCwgbV9zY2FsZSwgbV9vZmZzZXQpOwor
ICAgIH0KKworICAgIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyBhc0Fi
c29sdXRlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IEFi
c29sdXRlQWRkcmVzcyk7CisgICAgICAgIHJldHVybiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpB
YnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PGNvbnN0IHZvaWQqPihtX29mZnNldCkpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IEtpbmQgbV9raW5kOworICAgIGludHB0cl90IG1fb2Zmc2V0OworICAgIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgbV9iYXNlOworICAgIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgbV9pbmRleDsKKyAgICBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpTY2FsZSBt
X3NjYWxlOworCisjZWxzZSAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCitwdWJsaWM6CisKKyAgICBE
eW5hbWljQWRkcmVzcygpIHsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gQWJzb2x1
dGVBZGRyZXNzOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
KyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCitwdWJsaWM6CisKKyAgICBib29sIGlzT25l
T2YoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBib29sIGlzT25lT2YoS2luZCBraW5k
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQo
KSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBpc09u
ZU9mKGFyZ3VtZW50cy4uLik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCisjZW5kaWYgLy8gRHluYW1pY0FkZHJlc3NfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMCArMTIxLDIzIEBA
IHB1YmxpYzoKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaFB0cjsKICNlbmRp
ZgogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNoU3ViMzI7CisgICAgdXNpbmcg
TWFjcm9Bc3NlbWJsZXJCYXNlOjpicmFuY2g4OworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFz
ZTo6bG9hZDMyOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6bG9hZDg7CisgICAgdXNp
bmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpsb2FkOFNpZ25FeHRlbmRUbzMyOworICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyQmFzZTo6bG9hZDE2OworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6
bG9hZDE2U2lnbkV4dGVuZFRvMzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpsb2Fk
RG91YmxlOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6bG9hZEZsb2F0OwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6bHNoaWZ0MzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXJCYXNlOjptdWwzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6Om9yMzI7CiAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpyc2hpZnQzMjsKICAgICB1c2luZyBNYWNyb0Fzc2Vt
YmxlckJhc2U6OnN0b3JlMzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpzdG9yZTg7
CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpzdG9yZTE2OworICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyQmFzZTo6c3RvcmVEb3VibGU7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNl
OjpzdG9yZUZsb2F0OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6c3ViMzI7CiAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjp1cnNoaWZ0MzI7CiAgICAgdXNpbmcgTWFjcm9Bc3Nl
bWJsZXJCYXNlOjp4b3IzMjsKQEAgLTE1ODQsNiArMTU5Nyw1MTMgQEAgcHVibGljOgogICAgICAg
ICB1cnNoaWZ0MzIoc3JjLCB0cnVzdGVkSW1tMzJGb3JTaGlmdChhbW91bnQpLCBkZXN0KTsKICAg
ICB9CiAKKyAgICBib29sIHRyeUFkZDMyKFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAg
ICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgYWRkMzIoc3JjLCBh
ZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlBZGQzMihzcmMsIGFkZHJlc3MpKTsKKyAgICB9
CisKKyAgICAvLyBJdCdzIG5vdCBjbGVhciBpZiB0aGUgc2VtYW50aWNzIGhlcmUgc2hvdWxkIGJl
IHRvIHJldHVybiB0cnVlIGZvciBhbnkgYWRkcmVzcyBleHByZXNzaW9uCisgICAgLy8gZm9yIHdo
aWNoIHdlIGtub3cgaG93IHRvIGVtaXQgY29kZSwgb3IgdG8gb25seSBlbWl0IHRydWUgd2hlbiB3
ZSBrbm93IGhvdyB0byBlbWl0IGl0CisgICAgLy8gZWZmaWNpZW50bHkuIEknbSBjdXJyZW50bHkg
Z29pbmcgd2l0aCBzdXBwb3J0aW5nIGFsbCBvZiB0aGUgZXhwcmVzc2lvbnMgZm9yIHdoaWNoIHdl
IGtub3cKKyAgICAvLyBob3cgdG8gZW1pdCBjb2RlIGF0IGFsbCwgYW5kIEknbSBsZWF2aW5nIGl0
IHRvIGNsaWVudHMgdG8gZGVhbCB3aXRoIHRoZSBlZmZpY2llbmN5IHBhcnQuCisgICAgCisgICAg
Ym9vbCB0cnlBZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5
bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgYWRkMzIoaW1tLCBhZGRyZXNzLmFz
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFt
aWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBhZGQzMihpbW0sIGFkZHJl
c3MuYXNBYnNvbHV0ZUFkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICB2b2lkIGFkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIER5bmFtaWNBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlBZGQzMihpbW0sIGFkZHJlc3MpKTsK
KyAgICB9CisKKyAgICBib29sIHRyeUFkZDMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGFkZDMyKGFk
ZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIGFk
ZDMyKGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHJ1biBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB2b2lkIGFkZDMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeUFkZDMyKGFk
ZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAgICBib29sIHRyeUFuZDMyKFJlZ2lzdGVySUQgc3Jj
LCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNz
LmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAg
ICAgICAgYW5kMzIoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgYW5kMzIoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlBbmQzMihzcmMs
IGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeUFuZDMyKFRydXN0ZWRJbW0zMiBpbW0s
IER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mu
a2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAg
ICAgICBhbmQzMihpbW0sIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAg
ICAgICAgICAgIGFuZDMyKGltbSwgYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMyIGlt
bSwgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRyeUFuZDMyKGltbSwgYWRkcmVzcykpOworICAgIH0KKworICAgIGJvb2wgdHJ5QW5kMzIoRHlu
YW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRy
ZXNzOgorICAgICAgICAgICAgYW5kMzIoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGFuZDMyKER5bmFtaWNBZGRyZXNz
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRyeUFkZDMyKGFkZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAgICBib29sIHRyeU11bDMyKER5
bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRk
cmVzczoKKyAgICAgICAgICAgIG11bDMyKGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBtdWwzMihEeW5hbWljQWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VCh0cnlNdWwzMihhZGRyZXNzLCBkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlOZWczMihE
eW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtp
bmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAg
ICAgbmVnMzIoYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB2b2lkIG5lZzMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0cnlOZWczMihhZGRyZXNzKSk7CisgICAgfQorCisgICAgLy8g
RklYTUU6IExvdHMgb2YgbWlzc2luZyBjYXNlcyBoZXJlIQorCisgICAgYm9vbCB0cnlMb2FkMzIo
RHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpB
ZGRyZXNzOgorICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJh
c2VJbmRleDoKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLmFzQmFzZUluZGV4KCksIGRlc3Qp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6
OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLmFzQWJzb2x1dGVB
ZGRyZXNzKCkubV9wdHIsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgdm9pZCBsb2FkMzIoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZDMyKGFkZHJlc3MsIGRlc3QpKTsK
KyAgICB9CisKKyAgICBib29sIHRyeUxvYWQ4KER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQ4KGFk
ZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIGxvYWQ4KGFk
ZHJlc3MuYXNCYXNlSW5kZXgoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAg
bG9hZDgoYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyLCBkZXN0KTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgbG9hZDgoRHluYW1pY0FkZHJlc3MgYWRk
cmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5
TG9hZDgoYWRkcmVzcywgZGVzdCkpOworICAgIH0KKworICAgIGJvb2wgdHJ5TG9hZDhTaWduRXh0
ZW5kVG8zMihEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0Fk
ZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBsb2FkOFNpZ25FeHRlbmRUbzMyKGFkZHJlc3Mu
YXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIGxvYWQ4U2lnbkV4dGVu
ZFRvMzIoYWRkcmVzcy5hc0Jhc2VJbmRleCgpLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAg
ICAgICAgICBsb2FkOFNpZ25FeHRlbmRUbzMyKGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKS5t
X3B0ciwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGxv
YWQ4U2lnbkV4dGVuZFRvMzIoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZDhTaWduRXh0ZW5kVG8zMihh
ZGRyZXNzLCBkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlMb2FkMTYoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRy
ZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAg
ICAgICAgICAgbG9hZDE2KGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAg
ICAgICAgICAgIGxvYWQxNihhZGRyZXNzLmFzQmFzZUluZGV4KCksIGRlc3QpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRk
cmVzczoKKyAgICAgICAgICAgIGxvYWQxNihhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCkubV9w
dHIsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBsb2Fk
MTYoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZDE2KGFkZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAg
ICBib29sIHRyeUxvYWQxNlNpZ25FeHRlbmRUbzMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsK
KyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQx
NlNpZ25FeHRlbmRUbzMyKGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAg
ICAgICAgICAgIGxvYWQxNlNpZ25FeHRlbmRUbzMyKGFkZHJlc3MuYXNCYXNlSW5kZXgoKSwgZGVz
dCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVz
czo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAgbG9hZDE2U2lnbkV4dGVuZFRvMzIoYWRk
cmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgbG9hZDE2U2lnbkV4dGVuZFRvMzIoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodHJ5TG9hZDE2U2lnbkV4dGVuZFRvMzIoYWRkcmVzcywgZGVzdCkpOworICAgIH0KKworICAg
IGJvb2wgdHJ5U3RvcmUzMihSZWdpc3RlcklEIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBE
eW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlMzIoc3JjLCBhZGRyZXNz
LmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5
bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTMyKHNyYywgYWRkcmVz
cy5hc0Jhc2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTMyKHNy
YywgYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgRHluYW1pY0Fk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlMzIo
c3JjLCBhZGRyZXNzKSk7CisgICAgfQorCisgICAgYm9vbCB0cnlTdG9yZTMyKFRydXN0ZWRJbW0z
MiBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFk
ZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6Cisg
ICAgICAgICAgICBzdG9yZTMyKHNyYywgYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4Ogor
ICAgICAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3MuYXNCYXNlSW5kZXgoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWJzb2x1dGVB
ZGRyZXNzOgorICAgICAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJl
c3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIHN0
b3JlMzIoVHJ1c3RlZEltbTMyIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlMzIoc3JjLCBhZGRyZXNzKSk7CisgICAgfQor
CisgICAgYm9vbCB0cnlTdG9yZTgoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRy
ZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IER5bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRy
ZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlOChz
cmMsIGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB2b2lkIHN0b3JlOChSZWdpc3RlcklEIHNyYywgRHluYW1pY0Fk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlOChz
cmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0b3JlOChUcnVzdGVkSW1tMzIg
c3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRy
ZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAg
ICAgICAgICAgc3RvcmU4KHNyYywgYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4OgorICAg
ICAgICAgICAgc3RvcmU4KHNyYywgYWRkcmVzcy5hc0Jhc2VJbmRleCgpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJl
c3M6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCku
bV9wdHIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzdG9yZTgo
VHJ1c3RlZEltbTMyIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlOChzcmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBi
b29sIHRyeVN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHlu
YW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTE2KHNyYywgYWRkcmVzcy5h
c0FkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5h
bWljQWRkcmVzczo6QmFzZUluZGV4OgorICAgICAgICAgICAgc3RvcmUxNihzcmMsIGFkZHJlc3Mu
YXNCYXNlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBE
eW5hbWljQWRkcmVzczo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAgc3RvcmUxNihzcmMs
IGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB2b2lkIHN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9yZTE2KHNy
YywgYWRkcmVzcykpOworICAgIH0KKworICAgIGJvb2wgdHJ5U3RvcmUxNihUcnVzdGVkSW1tMzIg
c3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRy
ZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAg
ICAgICAgICAgc3RvcmUxNihzcmMsIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAg
ICAgICAgICAgIHN0b3JlMTYoc3JjLCBhZGRyZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRk
cmVzczoKKyAgICAgICAgICAgIHN0b3JlMTYoc3JjLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNz
KCkubV9wdHIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzdG9y
ZTE2KFRydXN0ZWRJbW0zMiBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9yZTE2KHNyYywgYWRkcmVzcykpOworICAgIH0KKwor
ICAgIGJvb2wgdHJ5TG9hZERvdWJsZShEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWREb3VibGUo
YWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4OgorICAgICAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzLmFzQmFzZUluZGV4KCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgdm9pZCBsb2FkRG91YmxlKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZERv
dWJsZShhZGRyZXNzLCBkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlMb2FkRmxvYXQoRHlu
YW1pY0FkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFk
ZHJlc3M6CisgICAgICAgICAgICBsb2FkRmxvYXQoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6
QmFzZUluZGV4OgorICAgICAgICAgICAgbG9hZEZsb2F0KGFkZHJlc3MuYXNCYXNlSW5kZXgoKSwg
ZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGxvYWRGbG9h
dChEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRyeUxvYWRGbG9hdChhZGRyZXNzLCBkZXN0KSk7CisgICAgfQor
CisgICAgYm9vbCB0cnlTdG9yZURvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAg
ICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgc3RvcmVEb3Vi
bGUoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9y
ZURvdWJsZShzcmMsIGFkZHJlc3MuYXNCYXNlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIER5bmFt
aWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9y
ZURvdWJsZShzcmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0b3JlRmxvYXQo
RlBSZWdpc3RlcklEIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6
QWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlRmxvYXQoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNz
OjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZUZsb2F0KHNyYywgYWRkcmVzcy5hc0Jhc2VJ
bmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgc3RvcmVG
bG9hdChGUFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5U3RvcmVGbG9hdChzcmMsIGFkZHJlc3MpKTsKKyAgICB9
CisKKyAgICBKdW1wIHRyeUJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWlj
QWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGxlZnQua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6Cisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoOChjb25kLCBsZWZ0LmFzQWRkcmVzcygpLCByaWdodCk7
CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2g4KGNvbmQsIGxlZnQuYXNCYXNlSW5kZXgoKSwgcmlnaHQpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB2b2lkIGJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBs
ZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRy
eUJyYW5jaDgoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgSnVtcCB0
cnlCcmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRHlu
YW1pY0FkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJpZ2h0LmtpbmQoKSkg
eworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQsIHJpZ2h0LmFzQWRkcmVzcygpKTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
dm9pZCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBsZWZ0
LCBEeW5hbWljQWRkcmVzcyByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gdHJ5
QnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgSnVtcCB0
cnlCcmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQs
IFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC5raW5kKCkp
IHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2gzMihjb25kLCBsZWZ0LmFzQWRkcmVzcygpLCByaWdodCk7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBicmFuY2gz
Mihjb25kLCBsZWZ0LmFzQmFzZUluZGV4KCksIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBicmFu
Y2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQsIFRydXN0
ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gdHJ5QnJhbmNoMzIo
Y29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNTZXQo
KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEp1bXAgdHJ5QnJh
bmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBSZWdp
c3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LmtpbmQoKSkgeworICAg
ICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKGNvbmQsIGxlZnQuYXNBZGRyZXNzKCksIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBi
cmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQsIFJl
Z2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRyeUJyYW5jaDMy
KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmlzU2V0
KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwogI2lmIEVOQUJMRShNQVNNX1BS
T0JFKQogICAgIC8vIExldCdzIHlvdSBwcmludCBmcm9tIHlvdXIgSklUIGdlbmVyYXRlZCBjb2Rl
LgogICAgIC8vIFNlZSBjb21tZW50cyBpbiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBmb3IgZXhh
bXBsZXMgb2YgaG93IHRvIHVzZSB0aGlzLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMzIEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCittYXRjaGVyIEFkZHJlc3NNYXRjaGVyCisKK2luY2x1ZGUgQjNFZmZlY3RpdmVBZGRyZXNz
LnBhdHRlcm5zCisKKyMgVGhpcyBtYXRjaGVzIHRoZSB0aGluZ3MgdGhhdCBjYW4gZ28gaW50byBs
b2FkcyBhbmQgc3RvcmVzLCBpbiBhZGRpdGlvbiB0byBqdXN0CisjIGxvYWQtZWZmZWN0aXZlLWFk
ZHJlc3MgZXhwcmVzc2lvbnMuCisKK0Fic29sdXRlID0gJGFkZHJlc3MKKworRGlyZWN0ID0gJWFk
ZHJlc3MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJn
dW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1lbnRSZWdWYWx1ZSgpCit7
Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3Vt
ZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNBcmd1bWVudFJl
Z1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAg
IHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IEFy
Z3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUoKTsKKworICAgIFJlZyBh
cmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50UmVnVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERvdWJsZSwgb3JpZ2luKQor
ICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAgUmVnIG1fcmVnOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0FyZ3VtZW50UmVnVmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
QmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQmFzaWNC
bG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1faW5kZXgoaW5kZXgpCit7
Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwordm9pZCBCYXNpY0Jsb2Nr
OjphcHBlbmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9
CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpk
ZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAq
dGhpcywgIjpcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91
dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Js
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
ay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5l
IEIzQmFzaWNCbG9jaworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
UHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5
cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlzIG1hdGNo
ZXMgQ29udHJvbFZhbHVlJ3MgdHlwZWRlZi4KKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1w
UHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVkIGluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgQWRqYWNlbmN5TGlzdDo6aXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgQWRqYWNlbmN5TGlz
dDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBBZGphY2Vu
Y3lMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJl
Z2luKCk7IH0KKyAgICBBZGphY2VuY3lMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJu
IG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4g
bV92YWx1ZXM7IH0KKworICAgIHZvaWQgYXBwZW5kKFZhbHVlKik7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUq
IGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAgdW5zaWduZWQgbnVt
U3VjY2Vzc29ycygpIGNvbnN0OworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7
CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0OworCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAg
CisgICAgLy8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2ln
bmVkIGluZGV4KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWVMaXN0IG1fdmFs
dWVzOworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVw
QmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9j
aykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBE
dW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7
CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVw
QmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJu
IERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzQmFzaWNCbG9ja0lubGluZXNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tJ
bmxpbmVzX2gKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29udHJv
bFZhbHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUgdHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBl
KiByZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBh
cHBlbmQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit1bnNpZ25lZCBCYXNpY0Js
b2NrOjpudW1TdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250
cm9sVmFsdWU+KCktPm51bVN1Y2Nlc3NvcnMoKTsKK30KKworQmFzaWNCbG9jayogQmFzaWNCbG9j
azo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCkt
PmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworQmFzaWNCbG9jayom
IEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbGFz
dCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2NvbnN0IEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKSBjb25zdAor
eworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzQ2hlY2tWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ2hl
Y2tWYWx1ZTo6fkNoZWNrVmFsdWUoKQoreworfQorCit2b2lkIENoZWNrVmFsdWU6OmR1bXBNZXRh
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIs
IHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQ2hlY2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ2hlY2tWYWx1ZSA6IHB1YmxpYyBDaGVjayB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2Fz
ZSBDaGVja1N1YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgY2FzZSBDaGVjazoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfkNoZWNrVmFsdWUoKTsKKwor
ICAgIFN0YWNrbWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tT
dWIsIGFuZCBDaGVja011bC4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luLCBsZWZ0LCByaWdo
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludCh0eXBlKCkpKTsKKyAgICAgICAgQVNTRVJU
KGxlZnQtPnR5cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9
PSBDaGVja0FkZCB8fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2RlID09IENoZWNrTXVsKTsK
KyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KKyAgICBDaGVja1ZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJl
ZGljYXRlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJl
ZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY2RlID09IENoZWNrKTsKKyAgICB9Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9o
CisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0NvbnN0MzJWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Q29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFs
dWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDb25zdDMyVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAg
ICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJp
bnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
UHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3Jp
Z2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQz
Miwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sK
K30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBC
M0NvbnN0NjRWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4g
b3Bjb2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisg
ICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFs
dWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9p
ZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91Ymxl
VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJs
ZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91
YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAg
CisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3Vi
bGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJv
bFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9p
bnRlckR1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZh
bHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgor
ICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2Ug
T29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisg
ICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNs
YXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3d0aWNoVmFs
dWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBT
dWNjZXNzb3JMaXN0OworCisgICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVt
U3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vj
Y2Vzc29yc1tpXTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgp
IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorCisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYg
c3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBT
dWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
UHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybiBhbmQgT29wcy4KKyAgICBD
b250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4p
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG9wY29kZSA9PSBSZXR1cm4gfHwgb3Bjb2RlID09IE9vcHMpOworICAgIH0K
KworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayogdGFyZ2V0KQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAg
ICAgIEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQo
dGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRy
b2xWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIEJhc2ljQmxvY2sqIHllcywgQmFzaWNC
bG9jayogbm8pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBw
cmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAg
ICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVu
ZChubyk7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM0NvbnRyb2xWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Vm
ZmVjdGl2ZUFkZHJlc3MucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWZmZWN0aXZlQWRkcmVzcy5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdGl2ZUFkZHJlc3MucGF0dGVybnMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworbWF0Y2hlciBFZmZlY3RpdmVBZGRyZXNzCisKKyMgTm90ZSB0aGF0IHRoaXMgcmVsaWVz
IG9uIEIzIGRvaW5nIGFnZ3Jlc3NpdmUgcmVhc3NvY2lhdGlvbiBhbmQgY2Fub25jYWxpemF0aW9u
IG9mIGludGVnZXIgYWRkcy4KKyMgV2UnbGwgbmV2ZXIgc2VlIEFkZChBZGQoJXgsICRjMSksICRj
MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bwor
IyBBZGQoJXgsICRjMSArICRjMikuIEFsc28sIHdlIHdpbGwgbmV2ZXIgc2VlIEFkZCgkYywgJXgp
LCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgY2Fub25pY2FsaXplZCBpdCB0bworIyBBZGQoJXgsICRj
KS4gVGhhdCBzYWlkLCBpbiB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0
IHRoZXNlIG9wdGltaXphdGlvbnMgaGF2aW5nCisjIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5j
ZSB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNl
dCwgd2UgZG9uJ3QgbmVlZAorIyB0byBtYXRjaCBBZGQoJXgsICRjKS4gVGhhdCB3b3VsZCBoYXZl
IGJlZW4gZm9sZGVkIGludG8gdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zIGFscmVhZHkuIFNv
LAorIyB0aGlzIGlzIGxlZnQgdG8ganVzdCBtYXRjaGluZyBCYXNlSW5kZXggZm9ybXMuCisKK0Jh
c2VJbmRleCA9IEFkZCglc2hpZnQgPSBTaGwoJWluZGV4LCAkbG9nU2NhbGUpLCAlYmFzZSkKK0Jh
c2VJbmRleCA9IEFkZCglYmFzZSwgJXNoaWZ0ID0gU2hsKCVpbmRleCwgJGxvZ1NjYWxlKSkKKwor
QmFzZU9mZnNldCA9IEFkZCglbGVmdCwgJXJpZ2h0KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleFNl
dF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgo
KS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVm
ZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ug
c2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0
aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNp
Y0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJhc2ljQmxvY2su
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVibGljOgorICAgIElu
ZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAg
Ym9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2
YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlv
blR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmFi
bGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4U2V0JiBzZXQp
CisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBt
X3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9y
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAg
ICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9u
LCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAgICAgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faXRl
cihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUKiBv
cGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxl
Y3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pdGVyKys7
CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIubV9pdGVyOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAg
IEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7CisgICAgICAgIH07
CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2Nv
bGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0aW9uOworICAg
ICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZvciBiYXNpYyBi
bG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlKTsKKyAgICAv
LworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJv
Y2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4K
KyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxlY3Rpb25UeXBl
JiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPENvbGxl
Y3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRWZWN0b3ImIGlu
ZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQoreworfQorCit2
b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29mZnNldCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAorCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgTWVtb3J5
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAg
IGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZa
OgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAg
ICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6
CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAgICBpbnRw
dHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZv
ciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQg
aGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4K
KyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludHB0
cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3Jp
Z2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNh
c2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEb3VibGUp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAg
ICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAg
ICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4g
dHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50cHRyX3Qgb2Zmc2V0ID0g
MCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8g
RG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAg
Y2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNl
IExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVtb3J5
VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFs
dWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAg
ICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM09wY29kZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJpbnQoIklkZW50aXR5Iik7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gRklYTUUKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDog
aW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZvciB3
aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAgLy8g
UG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElk
ZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMu
IENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAg
IC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29u
c3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2
NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRo
aXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2Fy
ZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBp
bnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAg
ICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3Rh
Y2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMg
dmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVn
YXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21w
aWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0
aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmlu
ZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBh
IGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBU
aGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3Ig
RG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUg
cG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0
IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZl
YXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5
IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNp
YyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAg
ICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIs
CisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4K
KyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2Vy
IG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2Ug
SlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhv
ciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1
Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4
dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwK
KyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3Vu
ZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAg
IC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAv
LyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJl
dHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFs
KHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdy
ZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJ
bnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAg
ICBCZWxvdywKKyAgICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1lbW9y
eSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0eXBl
LiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgorICAg
IExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAgIC8v
IFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMgcmV0dXJu
IHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8gTWVtb3J5
IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4gVGhlc2Ug
dXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAg
U3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2YWx1ZToK
KyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3Ig
SW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhpcyBpcyBh
IHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVtIEMgY2Fs
bGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVudHMgYXJl
IHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAvLyBUaGlz
IGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRoaXMgaXMg
dmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVtaXRzIGNv
ZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8g
ZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBhbG9uZyB3
aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3QgYmUgcGFz
c2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAgYXJndW1l
bnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0CisgICAgLy8g
dGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhlIHRvcCBv
ZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgorICAgIFBh
dGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFz
cy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24KKyAgICAv
LyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFmdGVyIHRo
ZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20gdGhlIGNo
ZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBzdXBwbHkg
YSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBqdW1w
IGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBzaW5jZSB0
aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24gb2YgdGhl
c2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4uIEZvcgor
ICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8vCisgICAg
Ly8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8K
KyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8KKyAgICAv
LyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAvLworICAg
IC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQgYnkgdGhl
IHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2FsbGJhY2tz
LiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFyZSBkaWZm
ZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3QgQ2hlY2tB
ZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9zc2libHkg
dGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVja0FkZCdz
IGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tTdWIsCisg
ICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0aGUgQ2hl
Y2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMgYQorICAg
IC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFuIElu
dDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1bGwgYnJh
bmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1w
cyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ssCisKKyAg
ICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBzaWxvbiwg
Ly8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisgICAgLy8g
SnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAgCisgICAg
Ly8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gQnJhbmNo
ZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZhbHVlIGNs
YXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNjZXNzb3Iu
CisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJbnQz
MiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNoLAorCisg
ICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRoZWlyIHJl
dHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBlLiBVc2Vz
IHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhpcyBpcyBh
IHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZS4gVXNl
cyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNP
cmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2Ug
dG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFi
bGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1
Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25z
IG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUg
YSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFi
b3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihj
b25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7
CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisKKyNp
bmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lk
IFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgb3V0LnByaW50KGNvbW1hLCAic3RhY2ttYXAgPSAi
LCBzdGFja21hcCk7CisgICAgaWYgKHNoYWRvdykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
c2hhZG93ID0gIiwgc2hhZG93KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZp
bmUgQjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsg
fQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7Cisg
ICAgdW5zaWduZWQgc2hhZG93IHsgMCB9OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hwb2lu
dCwgdHlwZSwgb3JpZ2luKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQorCitQcm9jZWR1
cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2Nr
KCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEJhc2ljQmxvY2s+KG1fYmxvY2tzLnNpemUoKSk7CisgICAgQmFzaWNCbG9jayogcmVz
dWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQor
ICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1Byb2Nl
ZHVyZV9oCisKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOwor
Y2xhc3MgVmFsdWU7CisKK2NsYXNzIFByb2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUHJvY2VkdXJlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKwor
ICAgIFByb2NlZHVyZSgpOworICAgIH5Qcm9jZWR1cmUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFk
ZEJsb2NrKCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7
IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9y
KCk6CisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1f
aW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVy
ZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisK
KyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBt
X2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWdu
ZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxl
IChpbmRleCA8IG1fcHJvY2VkdXJlLT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkp
CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmV4OworICAg
ICAgICB9CisKKyAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWdu
ZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcigqdGhpcywgbnVtQmxvY2tzKCkpOyB9CisKKyAgICBjbGFzcyBWYWx1ZXNDb2xs
ZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlc0NvbGxlY3Rpb24oUHJvY2VkdXJl
JiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBpdGVyYXRvcigpOgorICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1
cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2Nl
ZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZhbHVlKiBvcGVyYXRvciooKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+YmxvY2sobV9pbmRleCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisKKyAgICAgICAgICAgIFByb2Nl
ZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAg
ICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
bV9wcm9jZWR1cmUsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisK
KyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFs
dWVzLnNpemUoKTsgfQorICAgICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzW2luZGV4XTsgfQorICAgICAgICBWYWx1ZSogb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAg
fTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gVmFsdWVzQ29sbGVj
dGlvbigqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJh
c2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlPj4g
bV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIz
UHJvY2VkdXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9j
ZWR1cmVJbmxpbmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2luY2x1ZGUg
IkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogUHJvY2VkdXJlOjphZGQoQXJndWVudHMuLi4g
YXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5ldyBW
YWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUodmFs
dWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEIzUHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90VmFsdWU6On5T
dGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1f
Ynl0ZVNpemUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCisjZGVmaW5lIEIzU3RhY2tTbG90
VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IFN0YWNrU2xvdDsgfQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25l
ZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKworICAgIC8vIFRoaXMg
Z2V0cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBZb3UgY2Fubm90IHJlbHkg
b24gaXQgaGF2aW5nIGEgbWVhbmluZ2Z1bAorICAgIC8vIHZhbHVlIHdoaWxlIHRoZSBjb21waWxl
ciBpcyBydW5uaW5nLgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0RnJvbUZQOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3Jp
Z2luLCB1bnNpZ25lZCBieXRlU2l6ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgU3RhY2tTbG90
LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAg
ICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1f
Ynl0ZVNpemU7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwg
UmF3UG9pbnRlcihtX29wYXF1ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAg
ICAgICAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwg
Y2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAi
LCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisjaW5j
bHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEIzVmFsdWU7CisKK2NsYXNzIFN0YWNrbWFw
IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7CisgICAgICAgIC8vIFRo
aXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAgICAgICBWYWx1ZSog
dmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFN0YWNr
bWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBqdW1wIHRvIHRoZSBzbG93
IHBhdGgsIGlmIHRoaXMgaXMgYSBzdGFja21hcCBmb3IgYSBDaGVjayB2YWx1ZS4KKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGp1bXA7CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQg
R2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFtcyYp
OworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9yOwor
ICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUgb3Bh
cXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVz
ZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFuZCBl
YWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxsb2Nh
dGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBiZSBh
YmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVyZXMK
KyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBzZXRP
cGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJhbWV0
ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9
CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0ZWFk
IG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQorICAg
IHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAgICB9
CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHNp
emVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhl
IFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNrbWFwLiBOb3RlIHRoYXQgaW5kZXggemVybyByZWZl
cnMgdG8gdGhlCisgICAgLy8gZmlyc3QgYXJndW1lbnQgdG8gdGhhdCBWYWx1ZSwgZXZlbiBpZiB0
aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3IgZXhhbXBsZSwgaW4gYQorICAg
IC8vIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5k
aWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdCB3b3VsZAorICAgIC8vIGJlIGFuIGVy
cm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhlIGdlbmVyYXRpb24gY2FsbGJh
Y2sgaXMgY2FsbGVkLCB5b3UgY2FuIGRlcGVuZAorICAgIC8vIG9uIHRoZSByZXBzIGZvciB0aG9z
ZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNvbnN0cmFpbih1bnNpZ25lZCBp
bmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCArIDEg
PCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBzLmdyb3coaW5kZXggKyAxKTsKKyAg
ICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisKKyAgICB2b2lkIGNsb2JiZXIoY29u
c3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fY2xvYmJlcmVkLm1lcmdlKHNl
dCk7CisgICAgfQorCisgICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVh
dGVTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICAv
LyBUaGVzZSB3aWxsIHJldHVybiBpbnRlcmVzdGluZyB0aGluZ3MgaW5zaWRlIHRoZSBnZW5lcmF0
b3IgY2FsbGJhY2ssIG9yIGFmdGVyIGNvbXBpbGF0aW9uLgorICAgIGNvbnN0IFZlY3RvcjxWYWx1
ZVJlcD4mIHJlcHMoKSBjb25zdCB7IHJldHVybiBtX3JlcHM7IH0KKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAg
IHZvaWQqIG1fb3BhcXVlIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBz
OworICAgIFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIFJlZ2lzdGVyU2V0IG1f
Y2xvYmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTdGFja21hcF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3ZvaWQgU3dpdGNoQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChtX2Nhc2VWYWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAobV90YXJnZXQpKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dp
dGNoQ2FzZV9oCisjZGVmaW5lIEIzU3dpdGNoQ2FzZV9oCisKKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCitjbGFzcyBTd2l0Y2hDYXNl
IHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNo
Q2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwgQmFzaWNCbG9jayogdGFyZ2V0KQorICAgICAgICA6IG1f
Y2FzZVZhbHVlKGNhc2VWYWx1ZSkKKyAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgewor
ICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1f
dGFyZ2V0OyB9CisKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fz
ZVZhbHVlOyB9CisgICAgQmFzaWNCbG9jayogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZTsKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQ7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbGR1ZSAiQjNTd2l0
Y2hWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFs
dWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92
ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgU3dpdGNoQ2FzZSByZXN1bHQgPSBtX3N1Y2Nl
c3NvcnNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFz
dCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0
Y2hDYXNlKQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7
CisgICAgbV9zdWNjZXNzb3JzW21fc3VjY2Vzc29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2Uu
dGFyZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOwor
fQorCit2b2lkIFN3aXRjaFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIC8vIFRoaXMgZGVzdHJ1Y3RpdmVseSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVt
cE1ldGEoKS4KKyAgICBvdXQucHJpbnQobGlzdER1bXAoKnRoaXMpKTsKK30KKworU3dpdGNoVmFs
dWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2Nr
KiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xWYWx1ZShpbmRleCwgU3dpdGNoLCBvcmlnaW4p
Cit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hWYWx1ZV9o
CisjZGVmaW5lIEIzU3dpdGNoVmFsdWVfaAorCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVibGljIENvbnRyb2xWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUg
PT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFsdWUoKTsKKworICAgIC8vIG51bUNhc2VWYWx1
ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgorICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1ZXMo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKworICAgIC8vIFRoZSBzdWNjZXNz
b3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2NF90
IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaV07IH0K
KyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQorCisgICAgQmFzaWNCbG9jayogZmFsbFRocm91Z2goKSBjb25zdCB7
IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisgICAgQmFzaWNCbG9jayomIGZhbGxUaHJv
dWdoKCkgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorCisgICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG51bUNhc2VWYWx1ZXMoKTsgfQorICAgIFN3aXRjaENhc2UgYXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3dpdGNoQ2FzZShj
YXNlVmFsdWUoaW5kZXgpLCBzdWNjZXNzb3IoaW5kZXgpKTsKKyAgICB9CisgICAgU3dpdGNoQ2Fz
ZSBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgor
ICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fc3dpdGNoKG51bGxwdHIpCisgICAg
ICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRl
cmF0b3IoU3dpdGNoVmFsdWUmIHN3aXRjaFZhbHVlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAg
ICAgIDogbV9zd2l0Y2goJnN3aXRjaFZhbHVlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yKigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3N3aXRjaC0+YXQobV9pbmRleCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN3aXRjaFZhbHVlKiBtX3N3
aXRjaDsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAg
Ly8gVGhpcyByZW1vdmVzIHRoZSBjYXNlIGFuZCByZW9yZGVycyB0aGluZ3MgYSBiaXQuIElmIHlv
dSdyZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZyb20gMCB0byBOLAorICAgIC8vIHRoZW4geW91IGNh
biBrZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlzIHNvIGxvbmcgYXMgeW91IHJldmlzaXQgdGhpcyBz
YW1lIGluZGV4ICh3aGljaCB3aWxsIG5vdworICAgIC8vIGNvbnRhaW4gc29tZSBvdGhlciBjYXNl
IHZhbHVlKS4gVGhpcyByZW1vdmVzIHRoZSBjYXNlIHRoYXQgd2FzIHJlbW92ZWQuCisgICAgU3dp
dGNoQ2FzZSByZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KTsKKworICAgIHZvaWQgYXBwZW5kQ2Fz
ZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQg
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgb3V0LnByaW50KCJWb2lkIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBvdXQucHJpbnQoIklu
dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDY0OgorICAgICAgICBvdXQucHJp
bnQoIkludDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAg
b3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVHlwZV9o
CisjZGVmaW5lIEIzVHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgeworICAgIFZvaWQsCisg
ICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxpbmUgYm9vbCBpc0lu
dChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9PSBJbnQ2
NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5
cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyKCkgY29uc3QKK3sKKyAgICBp
ZiAoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJu
IEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7
CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM1R5
cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitVcHNpbG9uVmFsdWU6On5VcHNpbG9uVmFsdWUoKQoreworfQorCit2b2lkIFVwc2lsb25WYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4i
LCBtX3BoaS0+aW5kZXgoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2lsb25WYWx1ZV9oCisjZGVmaW5lIEIzVXBzaWxvblZh
bHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFVwc2lsb25WYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0g
VXBzaWxvbjsgfQorCisgICAgflVwc2lsb25WYWx1ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGhpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKyAgICAKKyAgICBVcHNpbG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgUGhpLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQorICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7
CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgpID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisK
KyAgICBWYWx1ZSogbV9waGk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFsdWU6
On5WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUq
IHZhbHVlKQoreworICAgIC8vIFRoaXMgaXMgYSBiaXQgY3JhenkuIEl0IGRvZXMgYW4gaW4tcGxh
Y2UgcmVwbGFjZW1lbnQgb2Ygd2hhdGV2ZXIgVmFsdWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRoCisg
ICAgLy8gYSBwbGFpbiBJZGVudGl0eSBWYWx1ZS4gV2UgZmlyc3QgY29sbGVjdCBhbGwgb2YgdGhl
IGluZm9ybWF0aW9uIHdlIG5lZWQsIHRoZW4gd2UgZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJldmlv
dXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0aGVuIHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFs
dWUgaW4gcGxhY2UuCisKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgVHlwZSB0
eXBlID0gbV90eXBlOworICAgIE9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Js
b2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMt
PnJlcGxhY2VtZW50OworICAgIHZvaWQqIG1pc2MgPSB0aGlzLT5taXNjOworCisgICAgUkVMRUFT
RV9BU1NFUlQodHlwZSA9PSB2YWx1ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFs
dWUoKTsKKworICAgIG5ldyAodGhpcykgKGluZGV4LCBJZGVudGlmeSwgdHlwZSwgb3JpZ2luLCB2
YWx1ZSk7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50
ID0gcmVwbGFjZW1lbnQ7CisgICAgdGhpcy0+bWlzYyA9IG1pc2M7Cit9CisKK3ZvaWQgVmFsdWU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZp
eCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bj
b2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAg
ICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVuKCkpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0cmluZ091
dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQpOworICAgIENTdHJpbmcgc3RyaW5nID0gc3RyaW5n
T3V0LnRvQ1N0cmluZygpOworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgc3RyaW5nKTsKKworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIFZh
bHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQzMl90
IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQor
Citib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdAoreworfQorCitUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBv
cGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
Y2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11
bDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAg
IGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2Fz
ZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRk
OgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJu
IGZpcnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0
dXJuIHBvaW50ZXIoKTsKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNh
c2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNl
IExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6Cisg
ICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93Ogor
ICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVy
biBJbnQzMjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0
dXJuIEludDY0OworICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0
dXJuIERvdWJsZTsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZV9oCisjZGVmaW5lIEIzVmFs
dWVfaAorCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSosIDM+IEFkamFjZW5jeUxpc3Q7CisKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICJAIjsKKworICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIH5WYWx1ZSgp
OworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAg
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNvZGUgaXMgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJl
cGxhY2luZyB2YWx1ZXMgd2l0aCBpZGVudGl0eS4KKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGNvZGU7IH0KKworICAgIE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVy
biBtX29yaWdpbjsgfQorICAgIAorICAgIFZhbHVlKiYgY2hpbGQodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisgICAgVmFsdWUqIGNoaWxkKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorCisgICAgLy8gVGhpcyBj
b21wdXRlcyB0aGUgdHlwZSB1c2luZyB0aGUgb3Bjb2RlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJl
dHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50
aXR5KFZhbHVlKik7CisgICAgdm9pZCByZXBsYWNlV2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCisgICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwg
aWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAg
Ly8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1
bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigp
KSB7CisgICAgLy8gICAgIHRoaW5ncworICAgIC8vIH0KKyAgICAvLworICAgIC8vIFRoaXMgd2ls
bCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtz
IGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29k
ZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMo
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7Cisg
ICAgCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGludDMyX3QgYXNJbnQzMigpIGNv
bnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50
NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91YmxlIGFz
RG91YmxlKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4K
KyAgICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5
OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2lu
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAg
ICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAs
IG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBhcmd1bWVudHMuLi4gfQor
ICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQg
Y2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENo
aWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisg
ICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29k
ZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1f
Y2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAv
LyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlw
ZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkg
YXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwg
bV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0
cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhp
cyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7Cisg
ICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsK
KworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRl
ZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZv
ciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIHZvaWQqIG1pc2MgeyBudWxscHRy
IH07Cit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVE
dW1wKFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgVmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZh
bHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNkZWZpbmUgQjNWYWx1ZUlubGluZXNf
aAorCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordGVtcGxhdGU+dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9v
bCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1
ZT4oKTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGFzPENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQo
KSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRf
dCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4o
KS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91
YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUo
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1ZhbHVlSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1
ZVJlcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1ZVJl
cDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQp
OworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb25lOgorICAgIGNhc2UgU29tZVJl
Z2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAgb3V0
LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNr
OgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
b2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50
OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
Qzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZVJlcDo6
S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVSZXA6OkFu
eToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAg
ICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVl
UmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJT
dGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpDb25z
dGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBf
aAorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0byBk
ZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQgYm90
aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNlbnRh
dGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBzYXkK
Ky8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQgcmVw
cmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQuCisK
K2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFu
eSByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0
IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdp
c3RlciwgcHJvdmlkZWQgdGhhdAorICAgICAgICAvLyBpdCdzIG5vdCBhbHNvIGEgcmVnaXN0ZXIg
dGhhdCB3YXMgY2xvYmJlcmVkLgorICAgICAgICBTb21lUmVnaXN0ZXIsCisKKyAgICAgICAgLy8g
QXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdp
c3Rlci4gQXMgYW4gb3V0cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxz
IHVzIHdoYXQgcmVnaXN0ZXIgQjMgcGlja2VkLgorICAgICAgICBSZWdpc3RlciwKKworICAgICAg
ICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFj
ayBzbG90IEIzIHBpY2tlZC4gSXQncyBub3QgYSB2YWxpZAorICAgICAgICAvLyBpbnB1dCByZXBy
ZXNlbnRhdGlvbi4KKyAgICAgICAgU3RhY2ssCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIHRoZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhlIGFyZ3Vt
ZW50IGFyZWEgYXQgc29tZQorICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgIFN0YWNrQXJndW1l
bnQsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxz
IHVzIHRoYXQgQjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQK
KyAgICB9OworICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAg
IHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1f
a2luZChSZWdpc3RlcikKKyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAgIHsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICBy
ZXR1cm4gVmFsdWVSZXAocmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2so
aW50cHRyX3Qgb2Zmc2V0RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
b2Zmc2V0RnJvbUZQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50
KGludHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC5t
X3ZhbHVlID0gb2Zmc2V0RnJvbVNQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25z
dGFudChpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
dmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGRvdWJsZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4o
dmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7
IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBraW5kKCkg
IT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92YWx1
ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21T
UCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrQXJndW1lbnQp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0K
KworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAgIGRv
dWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50NjRfdCBtX3Zh
bHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2lu
ZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNWYWx1ZVJlcF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5l
cmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNyBAQAor
IyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCiskOiA8PCBGaWxlLmRpcm5hbWUoX19GSUxFX18pCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263434</attachid>
            <date>2015-10-18 18:25:21 -0700</date>
            <delta_ts>2015-10-18 20:16:48 -0700</delta_ts>
            <desc>writing a pattern matcher</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>170280</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvRHluYW1pY0FkZHJlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvRHluYW1pY0Fk
ZHJlc3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9EeW5hbWljQWRkcmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRHluYW1pY0FkZHJlc3MuaCIKKworI2luY2x1ZGUgIkdQUkluZm8u
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgRHluYW1pY0FkZHJlc3M6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBBZGRyZXNzOgorICAgIGNhc2UgRXh0ZW5kZWRBZGRyZXNzOgor
ICAgICAgICBvdXQucHJpbnQobV9vZmZzZXQsICIoIiwgbV9iYXNlLCAiKSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBCYXNlSW5kZXg6CisgICAgICAgIG91dC5wcmludChtX29mZnNldCwg
IigiLCBtX2Jhc2UsICIsICIsIG1faW5kZXgsICIsICIsIDEgPDwgbV9zY2FsZSwgIikiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzb2x1dGVBZGRyZXNzOgorICAgICAgICBvdXQucHJp
bnQobV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIpCisgICAgb3V0LnBy
aW50KCIwIik7CisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvRHluYW1pY0Fk
ZHJlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0R5
bmFtaWNBZGRyZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0R5bmFtaWNBZGRyZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
eW5hbWljQWRkcmVzc19oCisjZGVmaW5lIER5bmFtaWNBZGRyZXNzX2gKKworI2luY2x1ZGUgIkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIER5bmFtaWNBZGRyZXNzIHsKK3B1YmxpYzoKKyAgICBl
bnVtIEtpbmQgeworICAgICAgICBBZGRyZXNzLAorICAgICAgICBFeHRlbmRlZEFkZHJlc3MsCisg
ICAgICAgIEJhc2VJbmRleCwKKyAgICAgICAgQWJzb2x1dGVBZGRyZXNzCisgICAgfTsKKworI2lm
IEVOQUJMRShBU1NFTUJMRVIpCisKKyAgICBEeW5hbWljQWRkcmVzcygpCisgICAgICAgIDogbV9r
aW5kKEFic29sdXRlQWRkcmVzcykKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgICAgICAsIG1f
YmFzZShBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpCisgICAgICAgICwg
bV9pbmRleChBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpCisgICAgICAg
ICwgbV9zY2FsZShBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSkKKyAgICB7CisgICAg
fQorCisgICAgZXhwbGljaXQgRHluYW1pY0FkZHJlc3MoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyBhZGRyZXNzKQorICAgICAgICA6IG1fa2luZChBZGRyZXNzKQorICAgICAgICAsIG1f
b2Zmc2V0KGFkZHJlc3Mub2Zmc2V0KQorICAgICAgICAsIG1fYmFzZShhZGRyZXNzLmJhc2UpCisg
ICAgICAgICwgbV9pbmRleChBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkp
CisgICAgICAgICwgbV9zY2FsZShBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSkKKyAg
ICB7CisgICAgfQorCisgICAgZXhwbGljaXQgRHluYW1pY0FkZHJlc3MoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6RXh0ZW5kZWRBZGRyZXNzIGFkZHJlc3MpCisgICAgICAgIDogbV9raW5kKEV4dGVu
ZGVkQWRkcmVzcykKKyAgICAgICAgLCBtX29mZnNldChhZGRyZXNzLm9mZnNldCkKKyAgICAgICAg
LCBtX2Jhc2UoYWRkcmVzcy5iYXNlKQorICAgICAgICAsIG1faW5kZXgoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKQorICAgICAgICAsIG1fc2NhbGUoQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcjo6VGltZXNPbmUpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IER5bmFt
aWNBZGRyZXNzKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhZGRyZXNzKQorICAg
ICAgICA6IG1fa2luZChCYXNlSW5kZXgpCisgICAgICAgICwgbV9vZmZzZXQoYWRkcmVzcy5vZmZz
ZXQpCisgICAgICAgICwgbV9iYXNlKGFkZHJlc3MuYmFzZSkKKyAgICAgICAgLCBtX2luZGV4KGFk
ZHJlc3MuaW5kZXgpCisgICAgICAgICwgbV9zY2FsZShhZGRyZXNzLnNjYWxlKQorICAgIHsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBEeW5hbWljQWRkcmVzcyhBYnN0cmFjdE1hY3JvQXNzZW1ibGVy
OjpBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICAgICAgOiBtX2tpbmQoQWJzb2x1dGVBZGRy
ZXNzKQorICAgICAgICAsIG1fb2Zmc2V0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oYWRkcmVzcy5t
X3B0cikpCisgICAgICAgICwgbV9iYXNlKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVn
aXN0ZXIoKSkKKyAgICAgICAgLCBtX2luZGV4KEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmZpcnN0
UmVnaXN0ZXIoKSkKKyAgICAgICAgLCBtX3NjYWxlKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlRp
bWVzT25lKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRHluYW1p
Y0FkZHJlc3MmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBv
dGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0Cisg
ICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAgICYmIG1fc2NhbGUgPT0gb3RoZXIubV9z
Y2FsZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRHluYW1pY0FkZHJlc3Mm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICp0aGlzICE9IER5bmFtaWNBZGRyZXNzKCk7CisgICAgfQorCisgICAgS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9r
aW5kID09IEFkZHJlc3MpOworICAgICAgICByZXR1cm4gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhtX2Jhc2UsIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQor
CisgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RXh0ZW5kZWRBZGRyZXNzIGFzRXh0ZW5kZWRB
ZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRXh0ZW5kZWRB
ZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkV4dGVuZGVk
QWRkcmVzcyhtX2Jhc2UsIG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fa2luZCA9PSBCYXNlSW5kZXgpOworICAgICAgICByZXR1cm4gQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KG1fYmFzZSwgbV9pbmRleCwgbV9zY2FsZSwgbV9vZmZzZXQpOwor
ICAgIH0KKworICAgIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyBhc0Fi
c29sdXRlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IEFi
c29sdXRlQWRkcmVzcyk7CisgICAgICAgIHJldHVybiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpB
YnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PGNvbnN0IHZvaWQqPihtX29mZnNldCkpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IEtpbmQgbV9raW5kOworICAgIGludHB0cl90IG1fb2Zmc2V0OworICAgIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgbV9iYXNlOworICAgIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgbV9pbmRleDsKKyAgICBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpTY2FsZSBt
X3NjYWxlOworCisjZWxzZSAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCitwdWJsaWM6CisKKyAgICBE
eW5hbWljQWRkcmVzcygpIHsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gQWJzb2x1
dGVBZGRyZXNzOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
KyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCitwdWJsaWM6CisKKyAgICBib29sIGlzT25l
T2YoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBib29sIGlzT25lT2YoS2luZCBraW5k
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQo
KSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBpc09u
ZU9mKGFyZ3VtZW50cy4uLik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCisjZW5kaWYgLy8gRHluYW1pY0FkZHJlc3NfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMCArMTIxLDIzIEBA
IHB1YmxpYzoKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaFB0cjsKICNlbmRp
ZgogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNoU3ViMzI7CisgICAgdXNpbmcg
TWFjcm9Bc3NlbWJsZXJCYXNlOjpicmFuY2g4OworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFz
ZTo6bG9hZDMyOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6bG9hZDg7CisgICAgdXNp
bmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpsb2FkOFNpZ25FeHRlbmRUbzMyOworICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyQmFzZTo6bG9hZDE2OworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6
bG9hZDE2U2lnbkV4dGVuZFRvMzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpsb2Fk
RG91YmxlOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6bG9hZEZsb2F0OwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6bHNoaWZ0MzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXJCYXNlOjptdWwzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6Om9yMzI7CiAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpyc2hpZnQzMjsKICAgICB1c2luZyBNYWNyb0Fzc2Vt
YmxlckJhc2U6OnN0b3JlMzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpzdG9yZTg7
CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpzdG9yZTE2OworICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyQmFzZTo6c3RvcmVEb3VibGU7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNl
OjpzdG9yZUZsb2F0OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6c3ViMzI7CiAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjp1cnNoaWZ0MzI7CiAgICAgdXNpbmcgTWFjcm9Bc3Nl
bWJsZXJCYXNlOjp4b3IzMjsKQEAgLTE1ODQsNiArMTU5Nyw3MDAgQEAgcHVibGljOgogICAgICAg
ICB1cnNoaWZ0MzIoc3JjLCB0cnVzdGVkSW1tMzJGb3JTaGlmdChhbW91bnQpLCBkZXN0KTsKICAg
ICB9CiAKKyAgICBib29sIHRyeUFkZDMyKFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAg
ICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgYWRkMzIoc3JjLCBh
ZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlBZGQzMihzcmMsIGFkZHJlc3MpKTsKKyAgICB9
CisKKyAgICAvLyBJdCdzIG5vdCBjbGVhciBpZiB0aGUgc2VtYW50aWNzIGhlcmUgc2hvdWxkIGJl
IHRvIHJldHVybiB0cnVlIGZvciBhbnkgYWRkcmVzcyBleHByZXNzaW9uCisgICAgLy8gZm9yIHdo
aWNoIHdlIGtub3cgaG93IHRvIGVtaXQgY29kZSwgb3IgdG8gb25seSBlbWl0IHRydWUgd2hlbiB3
ZSBrbm93IGhvdyB0byBlbWl0IGl0CisgICAgLy8gZWZmaWNpZW50bHkuIEknbSBjdXJyZW50bHkg
Z29pbmcgd2l0aCBzdXBwb3J0aW5nIGFsbCBvZiB0aGUgZXhwcmVzc2lvbnMgZm9yIHdoaWNoIHdl
IGtub3cKKyAgICAvLyBob3cgdG8gZW1pdCBjb2RlIGF0IGFsbCwgYW5kIEknbSBsZWF2aW5nIGl0
IHRvIGNsaWVudHMgdG8gZGVhbCB3aXRoIHRoZSBlZmZpY2llbmN5IHBhcnQuCisgICAgCisgICAg
Ym9vbCB0cnlBZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5
bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgYWRkMzIoaW1tLCBhZGRyZXNzLmFz
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFt
aWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBhZGQzMihpbW0sIGFkZHJl
c3MuYXNBYnNvbHV0ZUFkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICB2b2lkIGFkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIER5bmFtaWNBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlBZGQzMihpbW0sIGFkZHJlc3MpKTsK
KyAgICB9CisKKyAgICBib29sIHRyeUFkZDMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGFkZDMyKGFk
ZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIGFk
ZDMyKGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHJ1biBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB2b2lkIGFkZDMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeUFkZDMyKGFk
ZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAgICBib29sIHRyeUFuZDMyKFJlZ2lzdGVySUQgc3Jj
LCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNz
LmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAg
ICAgICAgYW5kMzIoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgYW5kMzIoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlBbmQzMihzcmMs
IGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeUFuZDMyKFRydXN0ZWRJbW0zMiBpbW0s
IER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mu
a2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAg
ICAgICBhbmQzMihpbW0sIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAg
ICAgICAgICAgIGFuZDMyKGltbSwgYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMyIGlt
bSwgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRyeUFuZDMyKGltbSwgYWRkcmVzcykpOworICAgIH0KKworICAgIGJvb2wgdHJ5QW5kMzIoRHlu
YW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRy
ZXNzOgorICAgICAgICAgICAgYW5kMzIoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGFuZDMyKER5bmFtaWNBZGRyZXNz
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRyeUFkZDMyKGFkZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAgICBib29sIHRyeU11bDMyKER5
bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRk
cmVzczoKKyAgICAgICAgICAgIG11bDMyKGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBtdWwzMihEeW5hbWljQWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VCh0cnlNdWwzMihhZGRyZXNzLCBkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlOZWczMihE
eW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtp
bmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAg
ICAgbmVnMzIoYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB2b2lkIG5lZzMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0cnlOZWczMihhZGRyZXNzKSk7CisgICAgfQorCisgICAgLy8g
RklYTUU6IExvdHMgb2YgbWlzc2luZyBjYXNlcyBoZXJlIQorCisgICAgYm9vbCB0cnlMb2FkMzIo
RHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpB
ZGRyZXNzOgorICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJh
c2VJbmRleDoKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLmFzQmFzZUluZGV4KCksIGRlc3Qp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6
OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLmFzQWJzb2x1dGVB
ZGRyZXNzKCkubV9wdHIsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgdm9pZCBsb2FkMzIoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZDMyKGFkZHJlc3MsIGRlc3QpKTsK
KyAgICB9CisKKyAgICBib29sIHRyeUxvYWQ4KER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQ4KGFk
ZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIGxvYWQ4KGFk
ZHJlc3MuYXNCYXNlSW5kZXgoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAg
bG9hZDgoYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyLCBkZXN0KTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgbG9hZDgoRHluYW1pY0FkZHJlc3MgYWRk
cmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5
TG9hZDgoYWRkcmVzcywgZGVzdCkpOworICAgIH0KKworICAgIGJvb2wgdHJ5TG9hZDhTaWduRXh0
ZW5kVG8zMihEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0Fk
ZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBsb2FkOFNpZ25FeHRlbmRUbzMyKGFkZHJlc3Mu
YXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIGxvYWQ4U2lnbkV4dGVu
ZFRvMzIoYWRkcmVzcy5hc0Jhc2VJbmRleCgpLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAg
ICAgICAgICBsb2FkOFNpZ25FeHRlbmRUbzMyKGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKS5t
X3B0ciwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGxv
YWQ4U2lnbkV4dGVuZFRvMzIoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZDhTaWduRXh0ZW5kVG8zMihh
ZGRyZXNzLCBkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlMb2FkMTYoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRy
ZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAg
ICAgICAgICAgbG9hZDE2KGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAg
ICAgICAgICAgIGxvYWQxNihhZGRyZXNzLmFzQmFzZUluZGV4KCksIGRlc3QpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRk
cmVzczoKKyAgICAgICAgICAgIGxvYWQxNihhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCkubV9w
dHIsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBsb2Fk
MTYoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZDE2KGFkZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAg
ICBib29sIHRyeUxvYWQxNlNpZ25FeHRlbmRUbzMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsK
KyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQx
NlNpZ25FeHRlbmRUbzMyKGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAg
ICAgICAgICAgIGxvYWQxNlNpZ25FeHRlbmRUbzMyKGFkZHJlc3MuYXNCYXNlSW5kZXgoKSwgZGVz
dCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVz
czo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAgbG9hZDE2U2lnbkV4dGVuZFRvMzIoYWRk
cmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgbG9hZDE2U2lnbkV4dGVuZFRvMzIoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodHJ5TG9hZDE2U2lnbkV4dGVuZFRvMzIoYWRkcmVzcywgZGVzdCkpOworICAgIH0KKworICAg
IGJvb2wgdHJ5U3RvcmUzMihSZWdpc3RlcklEIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBE
eW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlMzIoc3JjLCBhZGRyZXNz
LmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5
bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTMyKHNyYywgYWRkcmVz
cy5hc0Jhc2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTMyKHNy
YywgYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgRHluYW1pY0Fk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlMzIo
c3JjLCBhZGRyZXNzKSk7CisgICAgfQorCisgICAgYm9vbCB0cnlTdG9yZTMyKFRydXN0ZWRJbW0z
MiBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFk
ZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6Cisg
ICAgICAgICAgICBzdG9yZTMyKHNyYywgYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4Ogor
ICAgICAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3MuYXNCYXNlSW5kZXgoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWJzb2x1dGVB
ZGRyZXNzOgorICAgICAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJl
c3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIHN0
b3JlMzIoVHJ1c3RlZEltbTMyIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlMzIoc3JjLCBhZGRyZXNzKSk7CisgICAgfQor
CisgICAgYm9vbCB0cnlTdG9yZTgoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRy
ZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IER5bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRy
ZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlOChz
cmMsIGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB2b2lkIHN0b3JlOChSZWdpc3RlcklEIHNyYywgRHluYW1pY0Fk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlOChz
cmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0b3JlOChUcnVzdGVkSW1tMzIg
c3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRy
ZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAg
ICAgICAgICAgc3RvcmU4KHNyYywgYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4OgorICAg
ICAgICAgICAgc3RvcmU4KHNyYywgYWRkcmVzcy5hc0Jhc2VJbmRleCgpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJl
c3M6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCku
bV9wdHIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzdG9yZTgo
VHJ1c3RlZEltbTMyIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlOChzcmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBi
b29sIHRyeVN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHlu
YW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTE2KHNyYywgYWRkcmVzcy5h
c0FkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5h
bWljQWRkcmVzczo6QmFzZUluZGV4OgorICAgICAgICAgICAgc3RvcmUxNihzcmMsIGFkZHJlc3Mu
YXNCYXNlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBE
eW5hbWljQWRkcmVzczo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAgc3RvcmUxNihzcmMs
IGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB2b2lkIHN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9yZTE2KHNy
YywgYWRkcmVzcykpOworICAgIH0KKworICAgIGJvb2wgdHJ5U3RvcmUxNihUcnVzdGVkSW1tMzIg
c3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRy
ZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAg
ICAgICAgICAgc3RvcmUxNihzcmMsIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAg
ICAgICAgICAgIHN0b3JlMTYoc3JjLCBhZGRyZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRk
cmVzczoKKyAgICAgICAgICAgIHN0b3JlMTYoc3JjLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNz
KCkubV9wdHIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzdG9y
ZTE2KFRydXN0ZWRJbW0zMiBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9yZTE2KHNyYywgYWRkcmVzcykpOworICAgIH0KKwor
ICAgIGJvb2wgdHJ5TG9hZERvdWJsZShEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWREb3VibGUo
YWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4OgorICAgICAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzLmFzQmFzZUluZGV4KCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgdm9pZCBsb2FkRG91YmxlKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZERv
dWJsZShhZGRyZXNzLCBkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlMb2FkRmxvYXQoRHlu
YW1pY0FkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFk
ZHJlc3M6CisgICAgICAgICAgICBsb2FkRmxvYXQoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6
QmFzZUluZGV4OgorICAgICAgICAgICAgbG9hZEZsb2F0KGFkZHJlc3MuYXNCYXNlSW5kZXgoKSwg
ZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGxvYWRGbG9h
dChEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRyeUxvYWRGbG9hdChhZGRyZXNzLCBkZXN0KSk7CisgICAgfQor
CisgICAgYm9vbCB0cnlTdG9yZURvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAg
ICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgc3RvcmVEb3Vi
bGUoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9y
ZURvdWJsZShzcmMsIGFkZHJlc3MuYXNCYXNlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIER5bmFt
aWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9y
ZURvdWJsZShzcmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0b3JlRmxvYXQo
RlBSZWdpc3RlcklEIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6
QWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlRmxvYXQoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNz
OjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZUZsb2F0KHNyYywgYWRkcmVzcy5hc0Jhc2VJ
bmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgc3RvcmVG
bG9hdChGUFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5U3RvcmVGbG9hdChzcmMsIGFkZHJlc3MpKTsKKyAgICB9
CisKKyAgICBKdW1wIHRyeUJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWlj
QWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGxlZnQua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6Cisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoOChjb25kLCBsZWZ0LmFzQWRkcmVzcygpLCByaWdodCk7
CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2g4KGNvbmQsIGxlZnQuYXNCYXNlSW5kZXgoKSwgcmlnaHQpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB2b2lkIGJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBs
ZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRy
eUJyYW5jaDgoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgSnVtcCB0
cnlCcmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRHlu
YW1pY0FkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJpZ2h0LmtpbmQoKSkg
eworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQsIHJpZ2h0LmFzQWRkcmVzcygpKTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
SnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBsZWZ0
LCBEeW5hbWljQWRkcmVzcyByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gdHJ5
QnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgSnVtcCB0
cnlCcmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQs
IFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC5raW5kKCkp
IHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2gzMihjb25kLCBsZWZ0LmFzQWRkcmVzcygpLCByaWdodCk7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBicmFuY2gz
Mihjb25kLCBsZWZ0LmFzQmFzZUluZGV4KCksIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgSnVtcCBicmFu
Y2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQsIFRydXN0
ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gdHJ5QnJhbmNoMzIo
Y29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNTZXQo
KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEp1bXAgdHJ5QnJh
bmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBSZWdp
c3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LmtpbmQoKSkgeworICAg
ICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKGNvbmQsIGxlZnQuYXNBZGRyZXNzKCksIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgSnVtcCBi
cmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQsIFJl
Z2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRyeUJyYW5jaDMy
KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmlzU2V0
KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEp1bXAgdHJ5QnJhbmNo
VGVzdDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBUcnVzdGVk
SW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQua2luZCgpKSB7CisgICAg
ICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICByZXR1cm4gYnJh
bmNoMzIoY29uZCwgbGVmdC5hc0FkZHJlc3MoKSwgcmlnaHQpOworICAgICAgICBjYXNlIER5bmFt
aWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwg
bGVmdC5hc0Jhc2VJbmRleCgpLCByaWdodCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gSnVtcCgpOworICAgICAgICB9CisgICAgfQorICAgIEp1bXAgYnJhbmNoVGVzdDMy
KFJlc3VsdENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tMzIg
cmlnaHQpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRyeUJyYW5jaFRlc3QzMihjb25k
LCBsZWZ0LCByaWdodCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgSnVtcCB0cnlCcmFuY2hU
ZXN0OChSZXN1bHRDb25kaXRpb24gY29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgVHJ1c3RlZElt
bTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LmtpbmQoKSkgeworICAgICAg
ICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aDgoY29uZCwgbGVmdC5hc0FkZHJlc3MoKSwgcmlnaHQpOworICAgICAgICBjYXNlIER5bmFtaWNB
ZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoOChjb25kLCBsZWZ0
LmFzQmFzZUluZGV4KCksIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgSnVtcCBicmFuY2hUZXN0OChSZXN1
bHRDb25kaXRpb24gY29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgSnVtcCByZXN1bHQgPSB0cnlCcmFuY2hUZXN0OChjb25kLCBsZWZ0
LCByaWdodCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBKdW1wIHRyeUp1bXAoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHJldHVybiBq
dW1wKGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpB
YnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICByZXR1cm4ganVtcChhZGRyZXNzLmFzQWJzb2x1
dGVBZGRyZXNzKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIEp1bXAganVtcChEeW5hbWljQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgSnVtcCByZXN1bHQgPSB0cnlKdW1wKGFkZHJlc3MpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQorICAgIGJvb2wgdHJ5TG9h
ZDY0KER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVz
czo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQ2NChhZGRyZXNzLmFzQWRkcmVzcygpLCBkZXN0
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNz
OjpCYXNlSW5kZXg6CisgICAgICAgICAgICBsb2FkNjQoYWRkcmVzcy5hc0Jhc2VJbmRleCgpLCBk
ZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRy
ZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBsb2FkNjQoYWRkcmVzcy5hc0Fic29s
dXRlQWRkcmVzcygpLm1fcHRyLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIHZvaWQgbG9hZDY0KER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeUxvYWQ2NChhZGRyZXNzLCBkZXN0
KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlTdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBEeW5hbWlj
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkg
eworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgc3Rv
cmU2NChzcmMsIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHN0
b3JlNjQoc3JjLCBhZGRyZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAg
ICAgICAgIHN0b3JlNjQoc3JjLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCkubV9wdHIpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVy
SUQgc3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQodHJ5U3RvcmU2NChzcmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0
b3JlNjQoVHJ1c3RlZEltbTY0IHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRk
cmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlNjQoc3JjLCBhZGRyZXNzLmFzQWRkcmVz
cygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRy
ZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTY0KHNyYywgYWRkcmVzcy5hc0Jhc2VJ
bmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNB
ZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTY0KHNyYywgYWRkcmVz
cy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIHZvaWQgc3RvcmU2NChUcnVzdGVkSW1tNjQgc3JjLCBEeW5hbWljQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5U3RvcmU2NChzcmMsIGFk
ZHJlc3MpKTsKKyAgICB9CisKKyAgICBKdW1wIHRyeUJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBEeW5hbWljQWRkcmVzcyByaWdodCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAocmlnaHQua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJl
c3M6OkFkZHJlc3M6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdCwgcmln
aHQuYXNBZGRyZXNzKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1
bXAoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgVHJ1c3RlZEltbTY0IGxlZnQsIER5bmFtaWNBZGRyZXNzIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgSnVtcCByZXN1bHQgPSB0cnlCcmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBKdW1wIHRyeUJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTY0IHJpZ2h0KQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChsZWZ0LmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRy
ZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQuYXNB
ZGRyZXNzKCksIHJpZ2h0KTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4
OgorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQuYXNCYXNlSW5kZXgoKSwg
cmlnaHQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTY0IHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgSnVtcCByZXN1bHQgPSB0cnlCcmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgSnVtcCB0cnlCcmFuY2g2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIER5bmFtaWNBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGxlZnQua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFk
ZHJlc3M6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdC5hc0FkZHJlc3Mo
KSwgcmlnaHQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAg
ICAgIEp1bXAgcmVzdWx0ID0gdHJ5QnJhbmNoNjQoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgSnVtcCB0cnlCcmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQs
IER5bmFtaWNBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW02NCByaWdodCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAobGVmdC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRk
cmVzczoKKyAgICAgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LmFzQWRkcmVzcygp
LCByaWdodCk7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LmFzQmFzZUluZGV4KCksIHJpZ2h0KTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIER5bmFt
aWNBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW02NCByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAg
cmVzdWx0ID0gdHJ5QnJhbmNoVGVzdDY0KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmlzU2V0KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyNlbmRpZiAvLyBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisKICNpZiBFTkFCTEUoTUFT
TV9QUk9CRSkKICAgICAvLyBMZXQncyB5b3UgcHJpbnQgZnJvbSB5b3VyIEpJVCBnZW5lcmF0ZWQg
Y29kZS4KICAgICAvLyBTZWUgY29tbWVudHMgaW4gTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggZm9y
IGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hlcgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGll
cyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNzb2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlv
biBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5ldmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSks
IGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQg
aW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3QyKS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUg
QWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQg
dG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBpbiB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBh
c3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXphdGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9y
bWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBh
IGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3QgbmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3Qp
LiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQgaW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVj
dGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8g
aXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0FkZFNoaWZ0MSA9IEFkZChzaGlmdCA9IFNobChp
bmRleCwgbG9nU2NhbGUpLCBiYXNlKQorQWRkU2hpZnQyID0gQWRkKGJhc2UsIHNoaWZ0ID0gU2hs
KGluZGV4LCBsb2dTY2FsZSkpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworJENvbnN0CisK
K0RpcmVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRS
ZWdWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNB
cmd1bWVudFJlZ1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKCkK
K3sKK30KKwordm9pZCBBcmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRS
ZWdWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJn
dW1lbnRSZWdWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3VtZW50
UmVnVmFsdWVfaAorI2RlZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQXJndW1lbnRSZWdWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0g
QXJndW1lbnRSZWc7IH0KKyAgICAKKyAgICB+QXJndW1lbnRSZWdWYWx1ZSgpOworCisgICAgUmVn
IGFyZ3VtZW50UmVnKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQXJndW1lbnRSZWdWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRlcigpIDogRG91YmxlLCBvcmlnaW4p
CisgICAgICAgICwgbV9yZWcocmVnKQorICAgIHsKKyAgICB9CisKKyAgICBSZWcgbV9yZWc7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQXJndW1lbnRSZWdW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitCYXNp
Y0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4KQorICAgIDogbV9pbmRleChpbmRleCkK
K3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKQoreworfQorCit2b2lkIEJhc2ljQmxv
Y2s6OmFwcGVuZChWYWx1ZSogdmFsdWUpCit7CisgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsK
K30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6
OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIs
ICp0aGlzLCAiOlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykKKyAgICAgICAg
b3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Js
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2sKKyNkZWZp
bmUgQjNCYXNpY0Jsb2NrCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0
Y2hlcyBDb250cm9sVmFsdWUncyB0eXBlZGVmLgorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1
bXBQcmVmaXggPSAiIyI7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisgICAgdW5zaWduZWQgaW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBBZGphY2VuY3lMaXN0OjppdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBBZGphY2VuY3lM
aXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIEFkamFj
ZW5jeUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
YmVnaW4oKTsgfQorICAgIEFkamFjZW5jeUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1
cm4gbV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVy
biBtX3ZhbHVlczsgfQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlw
ZSogYXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBu
dW1TdWNjZXNzb3JzKCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVk
IGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4
KTsKKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAg
ICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5z
aWduZWQgaW5kZXgpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92
YWx1ZXM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERl
ZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJs
b2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVl
cER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4i
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0Rl
ZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1
cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9j
a0lubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250
cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5
cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pOworICAg
IGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2lj
QmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENv
bnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBCYXNpY0Js
b2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3Qo
KS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitCYXNpY0Jsb2Nr
KiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBs
YXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworY29uc3Qg
QmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2Nr
SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitD
aGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1l
dGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0g
Iiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBj
YXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNr
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOwor
CisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRh
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVj
a1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NF
UlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2Rl
ID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwp
OworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
cmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBw
cmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0K
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVl
X2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitDb25zdDMyVmFsdWU6On5Db25zdDMyVmFsdWUoKQoreworfQorCit2b2lkIENvbnN0MzJWYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92
YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIENvbnN0MzJWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQ29uc3QzMjsgfQor
ICAgIAorICAgIH5Db25zdDMyVmFsdWUoKTsKKyAgICAKKyAgICBpbnQzMl90IHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDMyVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBv
cmlnaW4sIGludDMyX3QgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0MzIsIElu
dDMyLCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIGludDMyX3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gQjNDb25zdDMyVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6On5Db25zdDY0VmFsdWUoKQor
eworfQorCit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0NjRWYWx1ZV9oCisjZGVmaW5l
IEIzQ29uc3Q2NFZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0NjRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVy
biBvcGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25zdDY0VmFsdWUoKTsKKyAgICAK
KyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0VmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2
YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdDY0VmFsdWVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91Ymxl
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQ29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91YmxlVmFsdWUoKQoreworfQorCit2
b2lkIENvbnN0RG91YmxlVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50ZigiJWxlIiwgbV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3REb3VibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0RG91
YmxlVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0RG91YmxlVmFsdWVfaAorCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3RE
b3VibGVWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQ29uc3REb3VibGU7IH0KKyAg
ICAKKyAgICB+Q29uc3REb3VibGVWYWx1ZSgpOworICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgQ29uc3REb3VibGVWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Jp
Z2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdERv
dWJsZSwgRG91YmxlLCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGRvdWJsZSBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFsdWVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250
cm9sVmFsdWUoKQoreworfQorCit2b2lkIENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fc3VjY2Vzc29ycykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBw
b2ludGVyRHVtcChibG9jaykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29udHJvbFZhbHVlX2gKKyNkZWZpbmUgQjNDb250cm9s
VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKworY2xhc3MgQ29udHJvbFZhbHVlIDogcHVi
bGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNv
ZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIEp1bXA6
CisgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2Fz
ZSBPb3BzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU3dpdGNoOiAK
KyAgICAgICAgICAgIC8vIFRoaXMgaXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEgc3Vi
Y2xhc3Mgb2YgQ29udHJvbFZhbHVlLCBzbyB3ZSB3YW50CisgICAgICAgICAgICAvLyBzd3RpY2hW
YWx1ZS0+YXM8Q29udHJvbFZhbHVlPigpIHRvIHJldHVybiBub24tbnVsbC4KKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+
IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICB+Q29udHJvbFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBu
dW1TdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9z
dWNjZXNzb3JzW2ldOyB9CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2ldOyB9CisKKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0
JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAg
ICAvLyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCisg
ICAgeworICAgIH0KKworICAgIC8vIFN1YmNsYXNzZXMgd2lsbCBwb3B1bGF0ZSB0aGlzLgorICAg
IFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgT29wcy4KKyAgICBDb250cm9sVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9wY29kZSA9PSBPb3BzKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgUmV0dXJu
LgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHJlc3VsdCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBW
b2lkLCBvcmlnaW4sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gUmV0
dXJuKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KKyAgICBDb250cm9sVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxv
Y2sqIHRhcmdldCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4p
CisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEp1bXApOworICAgICAgICBtX3N1Y2Nl
c3NvcnMuYXBwZW5kKHRhcmdldCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEJyYW5j
aC4KKyAgICBDb250cm9sVmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlLAorICAgICAgICBCYXNpY0Jsb2Nr
KiB5ZXMsIEJhc2ljQmxvY2sqIG5vKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZv
aWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBC
cmFuY2gpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHllcyk7CisgICAgICAgIG1fc3Vj
Y2Vzc29ycy5hcHBlbmQobm8pOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gQjNDb250cm9sVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleFNl
dF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgor
I2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgo
KS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVm
ZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ug
c2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0
aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNp
Y0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJhc2ljQmxvY2su
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVibGljOgorICAgIElu
ZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAg
Ym9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUp
CisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2
YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlv
blR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmFi
bGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4U2V0JiBzZXQp
CisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBt
X3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9y
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAg
ICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9u
LCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAgICAgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faXRl
cihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUKiBv
cGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxl
Y3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pdGVyKys7
CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIubV9pdGVyOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAg
IEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7CisgICAgICAgIH07
CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2Nv
bGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0aW9uOworICAg
ICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZvciBiYXNpYyBi
bG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlKTsKKyAgICAv
LworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJv
Y2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4K
KyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxlY3Rpb25UeXBl
JiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPENvbGxl
Y3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRWZWN0b3ImIGlu
ZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAgICAgICAgICAg
IG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
IyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisKKyMgVGhlc2UgcnVsZXMgYXJlIGNv
bnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0aGUgdG9wLiBJdCdzIGltcGxlbmVu
dGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxlLgorCisjIE5v
dGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hlciBpcyBhbiBleGNlbGxlbnQgd2F5
IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9IExvYWQoYWRkcmVzcykKKworQWRk
TG9hZCA9IEFkZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSkKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkK
KworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQoreworfQorCit2
b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29mZnNldCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAorCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgTWVtb3J5
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAg
IGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZa
OgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAg
ICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6
CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAgICBpbnRw
dHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZv
ciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQg
aGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4K
KyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludHB0
cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3Jp
Z2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNh
c2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEb3VibGUp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAg
ICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAg
ICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4g
dHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50cHRyX3Qgb2Zmc2V0ID0g
MCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8g
RG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAg
Y2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNl
IExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVtb3J5
VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFs
dWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAg
ICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM09wY29kZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJpbnQoIklkZW50aXR5Iik7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gRklYTUUKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDog
aW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZvciB3
aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAgLy8g
UG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElk
ZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMu
IENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAg
IC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29u
c3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2
NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRo
aXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2Fy
ZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBp
bnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAg
ICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3Rh
Y2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMg
dmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVn
YXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21w
aWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0
aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmlu
ZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBh
IGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBU
aGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3Ig
RG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUg
cG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0
IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZl
YXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5
IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNp
YyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAg
ICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIs
CisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4K
KyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2Vy
IG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2Ug
SlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhv
ciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1
Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4
dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwK
KyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3Vu
ZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAg
IC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAv
LyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJl
dHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFs
KHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdy
ZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJ
bnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAg
ICBCZWxvdywKKyAgICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1lbW9y
eSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0eXBl
LiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgorICAg
IExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAgIC8v
IFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMgcmV0dXJu
IHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8gTWVtb3J5
IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4gVGhlc2Ug
dXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAg
U3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2YWx1ZToK
KyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3Ig
SW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhpcyBpcyBh
IHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVtIEMgY2Fs
bGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVudHMgYXJl
IHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAvLyBUaGlz
IGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRoaXMgaXMg
dmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVtaXRzIGNv
ZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8g
ZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBhbG9uZyB3
aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3QgYmUgcGFz
c2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAgYXJndW1l
bnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0CisgICAgLy8g
dGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhlIHRvcCBv
ZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgorICAgIFBh
dGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFz
cy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24KKyAgICAv
LyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFmdGVyIHRo
ZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20gdGhlIGNo
ZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBzdXBwbHkg
YSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBqdW1w
IGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBzaW5jZSB0
aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24gb2YgdGhl
c2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4uIEZvcgor
ICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8vCisgICAg
Ly8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8K
KyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8KKyAgICAv
LyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAvLworICAg
IC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQgYnkgdGhl
IHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2FsbGJhY2tz
LiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFyZSBkaWZm
ZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3QgQ2hlY2tB
ZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9zc2libHkg
dGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVja0FkZCdz
IGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tTdWIsCisg
ICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0aGUgQ2hl
Y2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMgYQorICAg
IC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFuIElu
dDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1bGwgYnJh
bmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1w
cyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ssCisKKyAg
ICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBzaWxvbiwg
Ly8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisgICAgLy8g
SnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAgCisgICAg
Ly8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gQnJhbmNo
ZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZhbHVlIGNs
YXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNjZXNzb3Iu
CisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJbnQz
MiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNoLAorCisg
ICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRoZWlyIHJl
dHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBlLiBVc2Vz
IHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhpcyBpcyBh
IHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZS4gVXNl
cyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNP
cmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2Ug
dG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFi
bGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1
Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25z
IG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUg
YSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFi
b3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihj
b25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7
CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisKKyNp
bmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lk
IFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgb3V0LnByaW50KGNvbW1hLCAic3RhY2ttYXAgPSAi
LCBzdGFja21hcCk7CisgICAgaWYgKHNoYWRvdykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAi
c2hhZG93ID0gIiwgc2hhZG93KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZp
bmUgQjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsg
fQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7Cisg
ICAgdW5zaWduZWQgc2hhZG93IHsgMCB9OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hwb2lu
dCwgdHlwZSwgb3JpZ2luKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQorCitQcm9jZWR1
cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2Nr
KCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBzdGQ6Om1ha2Vf
dW5pcXVlPEJhc2ljQmxvY2s+KG1fYmxvY2tzLnNpemUoKSk7CisgICAgQmFzaWNCbG9jayogcmVz
dWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQor
ICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1Byb2Nl
ZHVyZV9oCisKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOwor
Y2xhc3MgVmFsdWU7CisKK2NsYXNzIFByb2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUHJvY2VkdXJlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKwor
ICAgIFByb2NlZHVyZSgpOworICAgIH5Qcm9jZWR1cmUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFk
ZEJsb2NrKCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7
IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9y
KCk6CisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1f
aW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVy
ZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisK
KyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBt
X2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWdu
ZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxl
IChpbmRleCA8IG1fcHJvY2VkdXJlLT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkp
CisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmV4OworICAg
ICAgICB9CisKKyAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWdu
ZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcigqdGhpcywgbnVtQmxvY2tzKCkpOyB9CisKKyAgICBjbGFzcyBWYWx1ZXNDb2xs
ZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlc0NvbGxlY3Rpb24oUHJvY2VkdXJl
JiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBpdGVyYXRvcigpOgorICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1
cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2Nl
ZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZhbHVlKiBvcGVyYXRvciooKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+YmxvY2sobV9pbmRleCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAg
cmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisKKyAgICAgICAgICAgIFByb2Nl
ZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAg
ICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
bV9wcm9jZWR1cmUsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisK
KyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFs
dWVzLnNpemUoKTsgfQorICAgICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzW2luZGV4XTsgfQorICAgICAgICBWYWx1ZSogb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAg
fTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gVmFsdWVzQ29sbGVj
dGlvbigqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJh
c2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlPj4g
bV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIz
UHJvY2VkdXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9j
ZWR1cmVJbmxpbmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2luY2x1ZGUg
IkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogUHJvY2VkdXJlOjphZGQoQXJndWVudHMuLi4g
YXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5ldyBW
YWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUodmFs
dWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEIzUHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90VmFsdWU6On5T
dGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1f
Ynl0ZVNpemUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCisjZGVmaW5lIEIzU3RhY2tTbG90
VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IFN0YWNrU2xvdDsgfQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25l
ZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKworICAgIC8vIFRoaXMg
Z2V0cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBZb3UgY2Fubm90IHJlbHkg
b24gaXQgaGF2aW5nIGEgbWVhbmluZ2Z1bAorICAgIC8vIHZhbHVlIHdoaWxlIHRoZSBjb21waWxl
ciBpcyBydW5uaW5nLgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJu
IG1fb2Zmc2V0RnJvbUZQOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3Jp
Z2luLCB1bnNpZ25lZCBieXRlU2l6ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgU3RhY2tTbG90
LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAg
ICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1f
Ynl0ZVNpemU7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwg
UmF3UG9pbnRlcihtX29wYXF1ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAg
ICAgICAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwg
Y2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAi
LCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisjaW5j
bHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEIzVmFsdWU7CisKK2NsYXNzIFN0YWNrbWFw
IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7CisgICAgICAgIC8vIFRo
aXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAgICAgICBWYWx1ZSog
dmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFN0YWNr
bWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBqdW1wIHRvIHRoZSBzbG93
IHBhdGgsIGlmIHRoaXMgaXMgYSBzdGFja21hcCBmb3IgYSBDaGVjayB2YWx1ZS4KKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGp1bXA7CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQg
R2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFtcyYp
OworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9yOwor
ICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUgb3Bh
cXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVz
ZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFuZCBl
YWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxsb2Nh
dGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBiZSBh
YmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVyZXMK
KyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBzZXRP
cGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJhbWV0
ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9
CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0ZWFk
IG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQorICAg
IHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAgICB9
CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHNp
emVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhl
IFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNrbWFwLiBOb3RlIHRoYXQgaW5kZXggemVybyByZWZl
cnMgdG8gdGhlCisgICAgLy8gZmlyc3QgYXJndW1lbnQgdG8gdGhhdCBWYWx1ZSwgZXZlbiBpZiB0
aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3IgZXhhbXBsZSwgaW4gYQorICAg
IC8vIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5k
aWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdCB3b3VsZAorICAgIC8vIGJlIGFuIGVy
cm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhlIGdlbmVyYXRpb24gY2FsbGJh
Y2sgaXMgY2FsbGVkLCB5b3UgY2FuIGRlcGVuZAorICAgIC8vIG9uIHRoZSByZXBzIGZvciB0aG9z
ZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNvbnN0cmFpbih1bnNpZ25lZCBp
bmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCArIDEg
PCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBzLmdyb3coaW5kZXggKyAxKTsKKyAg
ICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisKKyAgICB2b2lkIGNsb2JiZXIoY29u
c3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fY2xvYmJlcmVkLm1lcmdlKHNl
dCk7CisgICAgfQorCisgICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVh
dGVTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICAv
LyBUaGVzZSB3aWxsIHJldHVybiBpbnRlcmVzdGluZyB0aGluZ3MgaW5zaWRlIHRoZSBnZW5lcmF0
b3IgY2FsbGJhY2ssIG9yIGFmdGVyIGNvbXBpbGF0aW9uLgorICAgIGNvbnN0IFZlY3RvcjxWYWx1
ZVJlcD4mIHJlcHMoKSBjb25zdCB7IHJldHVybiBtX3JlcHM7IH0KKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAg
IHZvaWQqIG1fb3BhcXVlIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBz
OworICAgIFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIFJlZ2lzdGVyU2V0IG1f
Y2xvYmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTdGFja21hcF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3ZvaWQgU3dpdGNoQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChtX2Nhc2VWYWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAobV90YXJnZXQpKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dp
dGNoQ2FzZV9oCisjZGVmaW5lIEIzU3dpdGNoQ2FzZV9oCisKKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCitjbGFzcyBTd2l0Y2hDYXNl
IHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNo
Q2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwgQmFzaWNCbG9jayogdGFyZ2V0KQorICAgICAgICA6IG1f
Y2FzZVZhbHVlKGNhc2VWYWx1ZSkKKyAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgewor
ICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1f
dGFyZ2V0OyB9CisKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2Fz
ZVZhbHVlOyB9CisgICAgQmFzaWNCbG9jayogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZTsKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQ7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbGR1ZSAiQjNTd2l0
Y2hWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFs
dWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92
ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgU3dpdGNoQ2FzZSByZXN1bHQgPSBtX3N1Y2Nl
c3NvcnNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFz
dCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0
Y2hDYXNlKQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7
CisgICAgbV9zdWNjZXNzb3JzW21fc3VjY2Vzc29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2Uu
dGFyZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOwor
fQorCit2b2lkIFN3aXRjaFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIC8vIFRoaXMgZGVzdHJ1Y3RpdmVseSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVt
cE1ldGEoKS4KKyAgICBvdXQucHJpbnQobGlzdER1bXAoKnRoaXMpKTsKK30KKworU3dpdGNoVmFs
dWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2Nr
KiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xWYWx1ZShpbmRleCwgU3dpdGNoLCBvcmlnaW4p
Cit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hWYWx1ZV9o
CisjZGVmaW5lIEIzU3dpdGNoVmFsdWVfaAorCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVibGljIENvbnRyb2xWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUg
PT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFsdWUoKTsKKworICAgIC8vIG51bUNhc2VWYWx1
ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgorICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1ZXMo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKworICAgIC8vIFRoZSBzdWNjZXNz
b3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2NF90
IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaV07IH0K
KyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQorCisgICAgQmFzaWNCbG9jayogZmFsbFRocm91Z2goKSBjb25zdCB7
IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisgICAgQmFzaWNCbG9jayomIGZhbGxUaHJv
dWdoKCkgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorCisgICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG51bUNhc2VWYWx1ZXMoKTsgfQorICAgIFN3aXRjaENhc2UgYXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3dpdGNoQ2FzZShj
YXNlVmFsdWUoaW5kZXgpLCBzdWNjZXNzb3IoaW5kZXgpKTsKKyAgICB9CisgICAgU3dpdGNoQ2Fz
ZSBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgor
ICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fc3dpdGNoKG51bGxwdHIpCisgICAg
ICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRl
cmF0b3IoU3dpdGNoVmFsdWUmIHN3aXRjaFZhbHVlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAg
ICAgIDogbV9zd2l0Y2goJnN3aXRjaFZhbHVlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yKigp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3N3aXRjaC0+YXQobV9pbmRleCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN3aXRjaFZhbHVlKiBtX3N3
aXRjaDsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAg
Ly8gVGhpcyByZW1vdmVzIHRoZSBjYXNlIGFuZCByZW9yZGVycyB0aGluZ3MgYSBiaXQuIElmIHlv
dSdyZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZyb20gMCB0byBOLAorICAgIC8vIHRoZW4geW91IGNh
biBrZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlzIHNvIGxvbmcgYXMgeW91IHJldmlzaXQgdGhpcyBz
YW1lIGluZGV4ICh3aGljaCB3aWxsIG5vdworICAgIC8vIGNvbnRhaW4gc29tZSBvdGhlciBjYXNl
IHZhbHVlKS4gVGhpcyByZW1vdmVzIHRoZSBjYXNlIHRoYXQgd2FzIHJlbW92ZWQuCisgICAgU3dp
dGNoQ2FzZSByZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KTsKKworICAgIHZvaWQgYXBwZW5kQ2Fz
ZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQg
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgb3V0LnByaW50KCJWb2lkIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBvdXQucHJpbnQoIklu
dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDY0OgorICAgICAgICBvdXQucHJp
bnQoIkludDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAg
b3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVHlwZV9o
CisjZGVmaW5lIEIzVHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgeworICAgIFZvaWQsCisg
ICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxpbmUgYm9vbCBpc0lu
dChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9PSBJbnQ2
NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5
cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyKCkgY29uc3QKK3sKKyAgICBp
ZiAoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJu
IEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7
CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM1R5
cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitVcHNpbG9uVmFsdWU6On5VcHNpbG9uVmFsdWUoKQoreworfQorCit2b2lkIFVwc2lsb25WYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4i
LCBtX3BoaS0+aW5kZXgoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2lsb25WYWx1ZV9oCisjZGVmaW5lIEIzVXBzaWxvblZh
bHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFVwc2lsb25WYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0g
VXBzaWxvbjsgfQorCisgICAgflVwc2lsb25WYWx1ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGhpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKyAgICAKKyAgICBVcHNpbG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgUGhpLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQorICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7
CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgpID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisK
KyAgICBWYWx1ZSogbV9waGk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFsdWU6
On5WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUq
IHZhbHVlKQoreworICAgIC8vIFRoaXMgaXMgYSBiaXQgY3JhenkuIEl0IGRvZXMgYW4gaW4tcGxh
Y2UgcmVwbGFjZW1lbnQgb2Ygd2hhdGV2ZXIgVmFsdWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRoCisg
ICAgLy8gYSBwbGFpbiBJZGVudGl0eSBWYWx1ZS4gV2UgZmlyc3QgY29sbGVjdCBhbGwgb2YgdGhl
IGluZm9ybWF0aW9uIHdlIG5lZWQsIHRoZW4gd2UgZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJldmlv
dXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0aGVuIHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFs
dWUgaW4gcGxhY2UuCisKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgVHlwZSB0
eXBlID0gbV90eXBlOworICAgIE9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Js
b2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMt
PnJlcGxhY2VtZW50OworICAgIHZvaWQqIG1pc2MgPSB0aGlzLT5taXNjOworCisgICAgUkVMRUFT
RV9BU1NFUlQodHlwZSA9PSB2YWx1ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFs
dWUoKTsKKworICAgIG5ldyAodGhpcykgKGluZGV4LCBJZGVudGlmeSwgdHlwZSwgb3JpZ2luLCB2
YWx1ZSk7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50
ID0gcmVwbGFjZW1lbnQ7CisgICAgdGhpcy0+bWlzYyA9IG1pc2M7Cit9CisKK3ZvaWQgVmFsdWU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZp
eCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bj
b2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAg
ICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVuKCkpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0cmluZ091
dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQpOworICAgIENTdHJpbmcgc3RyaW5nID0gc3RyaW5n
T3V0LnRvQ1N0cmluZygpOworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgc3RyaW5nKTsKKworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIFZh
bHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQzMl90
IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QK
K3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQor
Citib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30K
KworZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdAoreworfQorCitUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBv
cGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
Y2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11
bDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAg
IGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2Fz
ZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRk
OgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJu
IGZpcnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0
dXJuIHBvaW50ZXIoKTsKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNh
c2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNl
IExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6Cisg
ICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93Ogor
ICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVy
biBJbnQzMjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0
dXJuIEludDY0OworICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0
dXJuIERvdWJsZTsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZV9oCisjZGVmaW5lIEIzVmFs
dWVfaAorCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSosIDM+IEFkamFjZW5jeUxpc3Q7CisKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICJAIjsKKworICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIH5WYWx1ZSgp
OworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAg
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNvZGUgaXMgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJl
cGxhY2luZyB2YWx1ZXMgd2l0aCBpZGVudGl0eS4KKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGNvZGU7IH0KKworICAgIE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVy
biBtX29yaWdpbjsgfQorICAgIAorICAgIFZhbHVlKiYgY2hpbGQodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisgICAgVmFsdWUqIGNoaWxkKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorCisgICAgLy8gVGhpcyBj
b21wdXRlcyB0aGUgdHlwZSB1c2luZyB0aGUgb3Bjb2RlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJl
dHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50
aXR5KFZhbHVlKik7CisgICAgdm9pZCByZXBsYWNlV2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCisgICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwg
aWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAg
Ly8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1
bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigp
KSB7CisgICAgLy8gICAgIHRoaW5ncworICAgIC8vIH0KKyAgICAvLworICAgIC8vIFRoaXMgd2ls
bCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtz
IGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29k
ZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMo
KTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7Cisg
ICAgCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGludDMyX3QgYXNJbnQzMigpIGNv
bnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50
NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91YmxlIGFz
RG91YmxlKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4K
KyAgICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5
OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2lu
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAg
ICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAs
IG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBhcmd1bWVudHMuLi4gfQor
ICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQg
Y2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENo
aWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisg
ICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29k
ZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1f
Y2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAv
LyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlw
ZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkg
YXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwg
bV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0
cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhp
cyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7Cisg
ICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsK
KworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRl
ZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZv
ciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIHZvaWQqIG1pc2MgeyBudWxscHRy
IH07Cit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVE
dW1wKFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgVmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZh
bHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNkZWZpbmUgQjNWYWx1ZUlubGluZXNf
aAorCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKwordGVtcGxhdGU+dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9v
bCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1
ZT4oKTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGFzPENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQo
KSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRf
dCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4o
KS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91
YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUo
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1ZhbHVlSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1
ZVJlcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1ZVJl
cDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQp
OworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb25lOgorICAgIGNhc2UgU29tZVJl
Z2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAgb3V0
LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNr
OgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
b2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50
OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
Qzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZVJlcDo6
S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVSZXA6OkFu
eToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAg
ICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVl
UmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJT
dGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpDb25z
dGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBf
aAorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0byBk
ZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQgYm90
aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNlbnRh
dGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBzYXkK
Ky8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQgcmVw
cmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQuCisK
K2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFu
eSByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0
IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdp
c3RlciwgcHJvdmlkZWQgdGhhdAorICAgICAgICAvLyBpdCdzIG5vdCBhbHNvIGEgcmVnaXN0ZXIg
dGhhdCB3YXMgY2xvYmJlcmVkLgorICAgICAgICBTb21lUmVnaXN0ZXIsCisKKyAgICAgICAgLy8g
QXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdp
c3Rlci4gQXMgYW4gb3V0cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxz
IHVzIHdoYXQgcmVnaXN0ZXIgQjMgcGlja2VkLgorICAgICAgICBSZWdpc3RlciwKKworICAgICAg
ICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFj
ayBzbG90IEIzIHBpY2tlZC4gSXQncyBub3QgYSB2YWxpZAorICAgICAgICAvLyBpbnB1dCByZXBy
ZXNlbnRhdGlvbi4KKyAgICAgICAgU3RhY2ssCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIHRoZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhlIGFyZ3Vt
ZW50IGFyZWEgYXQgc29tZQorICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgIFN0YWNrQXJndW1l
bnQsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxz
IHVzIHRoYXQgQjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQK
KyAgICB9OworICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAg
IHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1f
a2luZChSZWdpc3RlcikKKyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAgIHsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICBy
ZXR1cm4gVmFsdWVSZXAocmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2so
aW50cHRyX3Qgb2Zmc2V0RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
b2Zmc2V0RnJvbUZQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50
KGludHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC5t
X3ZhbHVlID0gb2Zmc2V0RnJvbVNQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25z
dGFudChpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
dmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGRvdWJsZSB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4o
dmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7
IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBraW5kKCkg
IT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92YWx1
ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21T
UCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrQXJndW1lbnQp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0K
KworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAgIGRv
dWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9j
YXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50NjRfdCBtX3Zh
bHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgewor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2lu
ZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNWYWx1ZVJlcF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5l
cmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTYgQEAK
KyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworY2xhc3MgUHJvZHVjdGlvbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpuYW1lLCA6
b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bj
b2RlLCBjaGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9
IG5hbWUKKyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGls
ZHJlbgorICAgIGVuZAorCisgICAgZGVmIGhhc09wY29kZQorICAgICAgICBvcGNvZGUgIT0gbmls
CisgICAgZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6
cHJvZHVjdGlvbnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rpb25zKQorICAg
ICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMKKyAg
ICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJp
bmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9y
aWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisg
ICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAg
ICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0
cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3Ro
ZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9f
cworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAg
ICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0
eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19
IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisg
ICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAg
ICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ug
c3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwg
aWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9y
ZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBKFthLXpBLVow
LTlfXSspLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhDb2RlT3JpZ2luLm5ldyhm
aWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisg
ICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVs9KCksXS8K
KyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoQ29kZU9yaWdpbi5uZXcoZmlsZU5hbWUs
IGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVy
IGVycm9yIGF0ICN7Q29kZU9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1
bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisg
ICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitk
ZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBt
b3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5Lgor
ICAgIHJldHVybiB0b2tlbiA9fiAvXEEoKG1hdGNoZXIpKVxaLworZW5kCisKK2RlZiBpc0lkZW50
aWZpZXIodG9rZW4pCisgICAgcmV0dXJuIHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1a
MC05Xy5dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2Vy
CisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBs
ZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYg
dG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UK
KyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1l
bnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAg
ICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTog
I3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKwor
ICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tz
dHJpbmd9IiB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQK
KworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJp
bmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lk
ZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVu
ZAorCisgICAgZGVmIGFkZFVuaXF1ZShwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAg
aWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlv
bi5uYW1lIH0KKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikK
KyAgICAgICAgZW5kCisgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBlbmQK
KworICAgIGRlZiBwYXJzZQorICAgICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAgICAgICBt
YXRjaGVyTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBb
XQorCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5z
Lmxlbmd0aAorCisgICAgICAgICAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVk
ZSIuIElmIHdlIGRpZCB0aGF0LCBpdCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAgYWRkVW5p
cXVlKHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1Y3Rpb24pCisgICAgICAgIH0KKworICAgICAgICBN
YXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAgICBkZWYg
cGFyc2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAgICAgICBu
YW1lID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgaWYgdG9rZW4gIT0gIj0iCisgICAgICAg
ICAgICByZXR1cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWwsIG5pbCkKKyAgICAg
ICAgZW5kCisgICAgICAgIAorICAgICAgICBjb25zdW1lKCI9IikKKyAgICAgICAgb3Bjb2RlID0g
Y29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgY29uc3VtZSgiKCIpCisKKyAgICAgICAgcHJvZHVj
dGlvbnMgPSBbXQorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09
ICIpIgorCisgICAgICAgICAgICBhZGRVbmlxdWUocHJvZHVjdGlvbnMsIHBhcnNlUHJvZHVjdGlv
bikKKworICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgIH0KKworICAgICAgICAjIEFk
dmFuY2UgYWZ0ZXIgdGhlICIpIgorICAgICAgICBhZHZhbmNlCisKKyAgICAgICAgUHJvZHVjdGlv
bi5uZXcob3JpZ2luLCBuYW1lLCBvcGNvZGUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorZW5kCisK
K2ZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKGZpbGVO
YW1lKSwgZmlsZU5hbWUpCittYXRjaGVyID0gcGFyc2VyLnBhcnNlCisKK0ZpbGUub3BlbigiQjMi
ICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInciKSB7CisgICAgfCBvdXRwIHwKKworICAgIG91dHAu
cHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7
ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKworICAgIG91dHAucHV0cyAiI2lmbmRlZiBCMyN7
bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAucHV0cyAiI2RlZmluZSBCMyN7bWF0Y2hlci5uYW1l
fV9oIgorICAgIAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAK
KyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyIKKworICAgIG91
dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lk
IG1hdGNoKFZhbHVlKiB2YWx1ZSwgY29uc3QgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0cC5w
dXRzICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5IGlu
ZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAg
ICAjIHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBn
b29kIHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91Lgor
CisgICAgIyBUaGlzIGVmZmljaWVudGx5IHNlbGVjdHMgZnJvbSB0aGUgZ2l2ZW4gc2V0IG9mIHBy
b2R1Y3Rpb25zLiBJdCBhc3N1bWVzIHRoYXQgcHJvZHVjdGlvbnMKKyAgICAjIGFyZSBub3QgZHVw
bGljYXRlZC4gSXQgeWllbGRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgcHJvZHVjdGlvbiwgYW5k
IHRoZSBjb3JvdXRpbmUgaXMKKyAgICAjIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBzcGVjaWZp
YyBjb2RlIGZvciB0aGF0IHByb2R1Y3Rpb24uIFRoZSBjb3JvdXRpbmUgaXMgZ2l2ZW4gbGlzdHMg
b2YKKyAgICAjIGluZGljZXMgb2YgcG9zc2libHktbWF0Y2hpbmcgcHJvZHVjdGlvbnMuCisgICAg
ZGVmIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAg
ICAgIyBGaXJzdCwgc3BsaXQgdGhlIHByb2R1Y3Rpb25zIGxpc3QgaW50byBydW5zIG9mIHByb2R1
Y3Rpb25zIHdpdGggYW4gb3Bjb2RlIGFuZCBwcm9kdWN0aW9ucworICAgICAgICAjIHdpdGhvdXQg
b25lLgorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93
aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAg
ICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5o
YXNPcGNvZGUgPT0gcHJvZHVjdGlvbi5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICBpbmRleExp
c3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4
TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgICMgTm93LCBlbWl0IHBhdHRlcm4gbWF0Y2hpbmcgY29kZS4gV2UgZG8gaXQgZGlmZmVy
ZW50bHkgZm9yIGxpc3RzIHdpdGggYW4gb3Bjb2RlIHRoYW4gZm9yCisgICAgICAgICMgbGlzdHMg
d2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGlu
ZGV4TGlzdCB8CisgICAgICAgICAgICBpZiBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmhhc09w
Y29kZQorICAgICAgICAgICAgICAgICMgTm93LCB3ZSBzcGxpdCB0aGlzIGluZGV4IGxpc3QgaW50
byBncm91cHMgZm9yIGVhY2ggb3Bjb2RlLgorICAgICAgICAgICAgICAgIGdyb3VwcyA9IHt9Cisg
ICAgICAgICAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IGlu
ZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHByb2R1Y3Rpb25zW2luZGV4
XQorICAgICAgICAgICAgICAgICAgICBpZiBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdCisgICAg
ICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdIDw8IGluZGV4Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1tw
cm9kdWN0aW9uLm9wY29kZV0gPSBbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgRW1pdCBhIHN3aXRjaCBzdGF0ZW1l
bnQuCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7dmFsdWVOYW1lfS0+b3Bj
b2RlKCkpIHsiCisgICAgICAgICAgICAgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgICAg
ICAgICAgICAgIHwgb3Bjb2RlLCBzdWJJbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc3Vi
SW5kZXhMaXN0CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
fSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYgY29uc2lkZXJQcm9k
dWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICAjIFVnaCwgdGhp
cyBpcyBoYXJkLgorICAgIGVuZAorCisgICAgY29uc2lkZXJQcm9kdWN0aW9ucygidmFsdWUiLCBw
cm9kdWN0aW9ucykKKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0
Y2hlci5uYW1lfV9oIgorfQorCisK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263436</attachid>
            <date>2015-10-18 20:16:48 -0700</date>
            <delta_ts>2015-10-19 17:01:06 -0700</delta_ts>
            <desc>and now, with a complete pattern match generator</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>178941</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvRHluYW1pY0FkZHJlc3MuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvRHluYW1pY0Fk
ZHJlc3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9EeW5hbWljQWRkcmVzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRHluYW1pY0FkZHJlc3MuaCIKKworI2luY2x1ZGUgIkdQUkluZm8u
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgRHluYW1pY0FkZHJlc3M6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKQorICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBBZGRyZXNzOgorICAgIGNhc2UgRXh0ZW5kZWRBZGRyZXNzOgor
ICAgICAgICBvdXQucHJpbnQobV9vZmZzZXQsICIoIiwgbV9iYXNlLCAiKSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBCYXNlSW5kZXg6CisgICAgICAgIG91dC5wcmludChtX29mZnNldCwg
IigiLCBtX2Jhc2UsICIsICIsIG1faW5kZXgsICIsICIsIDEgPDwgbV9zY2FsZSwgIikiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJzb2x1dGVBZGRyZXNzOgorICAgICAgICBvdXQucHJp
bnQobV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIpCisgICAgb3V0LnBy
aW50KCIwIik7CisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvRHluYW1pY0Fk
ZHJlc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0R5
bmFtaWNBZGRyZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0R5bmFtaWNBZGRyZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBE
eW5hbWljQWRkcmVzc19oCisjZGVmaW5lIER5bmFtaWNBZGRyZXNzX2gKKworI2luY2x1ZGUgIkFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIER5bmFtaWNBZGRyZXNzIHsKK3B1YmxpYzoKKyAgICBl
bnVtIEtpbmQgeworICAgICAgICBBZGRyZXNzLAorICAgICAgICBFeHRlbmRlZEFkZHJlc3MsCisg
ICAgICAgIEJhc2VJbmRleCwKKyAgICAgICAgQWJzb2x1dGVBZGRyZXNzCisgICAgfTsKKworI2lm
IEVOQUJMRShBU1NFTUJMRVIpCisKKyAgICBEeW5hbWljQWRkcmVzcygpCisgICAgICAgIDogbV9r
aW5kKEFic29sdXRlQWRkcmVzcykKKyAgICAgICAgLCBtX29mZnNldCgwKQorICAgICAgICAsIG1f
YmFzZShBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpCisgICAgICAgICwg
bV9pbmRleChBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpCisgICAgICAg
ICwgbV9zY2FsZShBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSkKKyAgICB7CisgICAg
fQorCisgICAgZXhwbGljaXQgRHluYW1pY0FkZHJlc3MoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyBhZGRyZXNzKQorICAgICAgICA6IG1fa2luZChBZGRyZXNzKQorICAgICAgICAsIG1f
b2Zmc2V0KGFkZHJlc3Mub2Zmc2V0KQorICAgICAgICAsIG1fYmFzZShhZGRyZXNzLmJhc2UpCisg
ICAgICAgICwgbV9pbmRleChBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkp
CisgICAgICAgICwgbV9zY2FsZShBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSkKKyAg
ICB7CisgICAgfQorCisgICAgZXhwbGljaXQgRHluYW1pY0FkZHJlc3MoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6RXh0ZW5kZWRBZGRyZXNzIGFkZHJlc3MpCisgICAgICAgIDogbV9raW5kKEV4dGVu
ZGVkQWRkcmVzcykKKyAgICAgICAgLCBtX29mZnNldChhZGRyZXNzLm9mZnNldCkKKyAgICAgICAg
LCBtX2Jhc2UoYWRkcmVzcy5iYXNlKQorICAgICAgICAsIG1faW5kZXgoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKQorICAgICAgICAsIG1fc2NhbGUoQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcjo6VGltZXNPbmUpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IER5bmFt
aWNBZGRyZXNzKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhZGRyZXNzKQorICAg
ICAgICA6IG1fa2luZChCYXNlSW5kZXgpCisgICAgICAgICwgbV9vZmZzZXQoYWRkcmVzcy5vZmZz
ZXQpCisgICAgICAgICwgbV9iYXNlKGFkZHJlc3MuYmFzZSkKKyAgICAgICAgLCBtX2luZGV4KGFk
ZHJlc3MuaW5kZXgpCisgICAgICAgICwgbV9zY2FsZShhZGRyZXNzLnNjYWxlKQorICAgIHsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBEeW5hbWljQWRkcmVzcyhBYnN0cmFjdE1hY3JvQXNzZW1ibGVy
OjpBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICAgICAgOiBtX2tpbmQoQWJzb2x1dGVBZGRy
ZXNzKQorICAgICAgICAsIG1fb2Zmc2V0KGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oYWRkcmVzcy5t
X3B0cikpCisgICAgICAgICwgbV9iYXNlKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVn
aXN0ZXIoKSkKKyAgICAgICAgLCBtX2luZGV4KEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmZpcnN0
UmVnaXN0ZXIoKSkKKyAgICAgICAgLCBtX3NjYWxlKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlRp
bWVzT25lKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRHluYW1p
Y0FkZHJlc3MmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZCA9PSBv
dGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0Cisg
ICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAgICYmIG1fc2NhbGUgPT0gb3RoZXIubV9z
Y2FsZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRHluYW1pY0FkZHJlc3Mm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICp0aGlzICE9IER5bmFtaWNBZGRyZXNzKCk7CisgICAgfQorCisgICAgS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBBYnN0cmFjdE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9r
aW5kID09IEFkZHJlc3MpOworICAgICAgICByZXR1cm4gQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhtX2Jhc2UsIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQor
CisgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6RXh0ZW5kZWRBZGRyZXNzIGFzRXh0ZW5kZWRB
ZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2tpbmQgPT0gRXh0ZW5kZWRB
ZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkV4dGVuZGVk
QWRkcmVzcyhtX2Jhc2UsIG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKG1fa2luZCA9PSBCYXNlSW5kZXgpOworICAgICAgICByZXR1cm4gQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KG1fYmFzZSwgbV9pbmRleCwgbV9zY2FsZSwgbV9vZmZzZXQpOwor
ICAgIH0KKworICAgIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyBhc0Fi
c29sdXRlQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQobV9raW5kID09IEFi
c29sdXRlQWRkcmVzcyk7CisgICAgICAgIHJldHVybiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpB
YnNvbHV0ZUFkZHJlc3MoYml0d2lzZV9jYXN0PGNvbnN0IHZvaWQqPihtX29mZnNldCkpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IEtpbmQgbV9raW5kOworICAgIGludHB0cl90IG1fb2Zmc2V0OworICAgIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXI6OlJlZ2lzdGVySUQgbV9iYXNlOworICAgIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6
OlJlZ2lzdGVySUQgbV9pbmRleDsKKyAgICBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpTY2FsZSBt
X3NjYWxlOworCisjZWxzZSAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCitwdWJsaWM6CisKKyAgICBE
eW5hbWljQWRkcmVzcygpIHsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gQWJzb2x1
dGVBZGRyZXNzOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
KyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCitwdWJsaWM6CisKKyAgICBib29sIGlzT25l
T2YoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBib29sIGlzT25lT2YoS2luZCBraW5k
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQo
KSA9PSBraW5kKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIHJldHVybiBpc09u
ZU9mKGFyZ3VtZW50cy4uLik7CisgICAgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNl
bmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCisjZW5kaWYgLy8gRHluYW1pY0FkZHJlc3NfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSwxMCArMTIxLDIzIEBA
IHB1YmxpYzoKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaFB0cjsKICNlbmRp
ZgogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJhbmNoU3ViMzI7CisgICAgdXNpbmcg
TWFjcm9Bc3NlbWJsZXJCYXNlOjpicmFuY2g4OworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFz
ZTo6bG9hZDMyOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6bG9hZDg7CisgICAgdXNp
bmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpsb2FkOFNpZ25FeHRlbmRUbzMyOworICAgIHVzaW5nIE1h
Y3JvQXNzZW1ibGVyQmFzZTo6bG9hZDE2OworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6
bG9hZDE2U2lnbkV4dGVuZFRvMzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpsb2Fk
RG91YmxlOworICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6bG9hZEZsb2F0OwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6bHNoaWZ0MzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJs
ZXJCYXNlOjptdWwzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6Om9yMzI7CiAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpyc2hpZnQzMjsKICAgICB1c2luZyBNYWNyb0Fzc2Vt
YmxlckJhc2U6OnN0b3JlMzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpzdG9yZTg7
CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpzdG9yZTE2OworICAgIHVzaW5nIE1hY3Jv
QXNzZW1ibGVyQmFzZTo6c3RvcmVEb3VibGU7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNl
OjpzdG9yZUZsb2F0OwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6c3ViMzI7CiAgICAg
dXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjp1cnNoaWZ0MzI7CiAgICAgdXNpbmcgTWFjcm9Bc3Nl
bWJsZXJCYXNlOjp4b3IzMjsKQEAgLTE1ODQsNiArMTU5Nyw3MDAgQEAgcHVibGljOgogICAgICAg
ICB1cnNoaWZ0MzIoc3JjLCB0cnVzdGVkSW1tMzJGb3JTaGlmdChhbW91bnQpLCBkZXN0KTsKICAg
ICB9CiAKKyAgICBib29sIHRyeUFkZDMyKFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAg
ICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgYWRkMzIoc3JjLCBh
ZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IHZvaWQgYWRkMzIoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlBZGQzMihzcmMsIGFkZHJlc3MpKTsKKyAgICB9
CisKKyAgICAvLyBJdCdzIG5vdCBjbGVhciBpZiB0aGUgc2VtYW50aWNzIGhlcmUgc2hvdWxkIGJl
IHRvIHJldHVybiB0cnVlIGZvciBhbnkgYWRkcmVzcyBleHByZXNzaW9uCisgICAgLy8gZm9yIHdo
aWNoIHdlIGtub3cgaG93IHRvIGVtaXQgY29kZSwgb3IgdG8gb25seSBlbWl0IHRydWUgd2hlbiB3
ZSBrbm93IGhvdyB0byBlbWl0IGl0CisgICAgLy8gZWZmaWNpZW50bHkuIEknbSBjdXJyZW50bHkg
Z29pbmcgd2l0aCBzdXBwb3J0aW5nIGFsbCBvZiB0aGUgZXhwcmVzc2lvbnMgZm9yIHdoaWNoIHdl
IGtub3cKKyAgICAvLyBob3cgdG8gZW1pdCBjb2RlIGF0IGFsbCwgYW5kIEknbSBsZWF2aW5nIGl0
IHRvIGNsaWVudHMgdG8gZGVhbCB3aXRoIHRoZSBlZmZpY2llbmN5IHBhcnQuCisgICAgCisgICAg
Ym9vbCB0cnlBZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5
bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgYWRkMzIoaW1tLCBhZGRyZXNzLmFz
QWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFt
aWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBhZGQzMihpbW0sIGFkZHJl
c3MuYXNBYnNvbHV0ZUFkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICB2b2lkIGFkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIER5bmFtaWNBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlBZGQzMihpbW0sIGFkZHJlc3MpKTsK
KyAgICB9CisKKyAgICBib29sIHRyeUFkZDMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGFkZDMyKGFk
ZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIGFk
ZDMyKGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHJ1biBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB2b2lkIGFkZDMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeUFkZDMyKGFk
ZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAgICBib29sIHRyeUFuZDMyKFJlZ2lzdGVySUQgc3Jj
LCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNz
LmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAg
ICAgICAgYW5kMzIoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgYW5kMzIoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlBbmQzMihzcmMs
IGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeUFuZDMyKFRydXN0ZWRJbW0zMiBpbW0s
IER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mu
a2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAg
ICAgICBhbmQzMihpbW0sIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAg
ICAgICAgICAgIGFuZDMyKGltbSwgYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgYW5kMzIoVHJ1c3RlZEltbTMyIGlt
bSwgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRyeUFuZDMyKGltbSwgYWRkcmVzcykpOworICAgIH0KKworICAgIGJvb2wgdHJ5QW5kMzIoRHlu
YW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRy
ZXNzOgorICAgICAgICAgICAgYW5kMzIoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGFuZDMyKER5bmFtaWNBZGRyZXNz
IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRyeUFkZDMyKGFkZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAgICBib29sIHRyeU11bDMyKER5
bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRk
cmVzczoKKyAgICAgICAgICAgIG11bDMyKGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBtdWwzMihEeW5hbWljQWRkcmVz
cyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VCh0cnlNdWwzMihhZGRyZXNzLCBkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlOZWczMihE
eW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtp
bmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAg
ICAgbmVnMzIoYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICB2b2lkIG5lZzMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0cnlOZWczMihhZGRyZXNzKSk7CisgICAgfQorCisgICAgLy8g
RklYTUU6IExvdHMgb2YgbWlzc2luZyBjYXNlcyBoZXJlIQorCisgICAgYm9vbCB0cnlMb2FkMzIo
RHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpB
ZGRyZXNzOgorICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJh
c2VJbmRleDoKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLmFzQmFzZUluZGV4KCksIGRlc3Qp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6
OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLmFzQWJzb2x1dGVB
ZGRyZXNzKCkubV9wdHIsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgdm9pZCBsb2FkMzIoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZDMyKGFkZHJlc3MsIGRlc3QpKTsK
KyAgICB9CisKKyAgICBib29sIHRyeUxvYWQ4KER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQ4KGFk
ZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIGxvYWQ4KGFk
ZHJlc3MuYXNCYXNlSW5kZXgoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAg
bG9hZDgoYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyLCBkZXN0KTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgbG9hZDgoRHluYW1pY0FkZHJlc3MgYWRk
cmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5
TG9hZDgoYWRkcmVzcywgZGVzdCkpOworICAgIH0KKworICAgIGJvb2wgdHJ5TG9hZDhTaWduRXh0
ZW5kVG8zMihEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0Fk
ZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBsb2FkOFNpZ25FeHRlbmRUbzMyKGFkZHJlc3Mu
YXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIGxvYWQ4U2lnbkV4dGVu
ZFRvMzIoYWRkcmVzcy5hc0Jhc2VJbmRleCgpLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAg
ICAgICAgICBsb2FkOFNpZ25FeHRlbmRUbzMyKGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKS5t
X3B0ciwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGxv
YWQ4U2lnbkV4dGVuZFRvMzIoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZDhTaWduRXh0ZW5kVG8zMihh
ZGRyZXNzLCBkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlMb2FkMTYoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRy
ZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAg
ICAgICAgICAgbG9hZDE2KGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAg
ICAgICAgICAgIGxvYWQxNihhZGRyZXNzLmFzQmFzZUluZGV4KCksIGRlc3QpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRk
cmVzczoKKyAgICAgICAgICAgIGxvYWQxNihhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCkubV9w
dHIsIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBsb2Fk
MTYoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZDE2KGFkZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAg
ICBib29sIHRyeUxvYWQxNlNpZ25FeHRlbmRUbzMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsK
KyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQx
NlNpZ25FeHRlbmRUbzMyKGFkZHJlc3MuYXNBZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAg
ICAgICAgICAgIGxvYWQxNlNpZ25FeHRlbmRUbzMyKGFkZHJlc3MuYXNCYXNlSW5kZXgoKSwgZGVz
dCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVz
czo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAgbG9hZDE2U2lnbkV4dGVuZFRvMzIoYWRk
cmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgbG9hZDE2U2lnbkV4dGVuZFRvMzIoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodHJ5TG9hZDE2U2lnbkV4dGVuZFRvMzIoYWRkcmVzcywgZGVzdCkpOworICAgIH0KKworICAg
IGJvb2wgdHJ5U3RvcmUzMihSZWdpc3RlcklEIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBE
eW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlMzIoc3JjLCBhZGRyZXNz
LmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5
bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTMyKHNyYywgYWRkcmVz
cy5hc0Jhc2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTMyKHNy
YywgYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgRHluYW1pY0Fk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlMzIo
c3JjLCBhZGRyZXNzKSk7CisgICAgfQorCisgICAgYm9vbCB0cnlTdG9yZTMyKFRydXN0ZWRJbW0z
MiBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFk
ZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6Cisg
ICAgICAgICAgICBzdG9yZTMyKHNyYywgYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4Ogor
ICAgICAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3MuYXNCYXNlSW5kZXgoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWJzb2x1dGVB
ZGRyZXNzOgorICAgICAgICAgICAgc3RvcmUzMihzcmMsIGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJl
c3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIHN0
b3JlMzIoVHJ1c3RlZEltbTMyIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlMzIoc3JjLCBhZGRyZXNzKSk7CisgICAgfQor
CisgICAgYm9vbCB0cnlTdG9yZTgoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRy
ZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IER5bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRy
ZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlOChz
cmMsIGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICB2b2lkIHN0b3JlOChSZWdpc3RlcklEIHNyYywgRHluYW1pY0Fk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlOChz
cmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0b3JlOChUcnVzdGVkSW1tMzIg
c3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRy
ZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAg
ICAgICAgICAgc3RvcmU4KHNyYywgYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4OgorICAg
ICAgICAgICAgc3RvcmU4KHNyYywgYWRkcmVzcy5hc0Jhc2VJbmRleCgpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJl
c3M6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCku
bV9wdHIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzdG9yZTgo
VHJ1c3RlZEltbTMyIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlOChzcmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBi
b29sIHRyeVN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHlu
YW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTE2KHNyYywgYWRkcmVzcy5h
c0FkZHJlc3MoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5h
bWljQWRkcmVzczo6QmFzZUluZGV4OgorICAgICAgICAgICAgc3RvcmUxNihzcmMsIGFkZHJlc3Mu
YXNCYXNlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBE
eW5hbWljQWRkcmVzczo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAgc3RvcmUxNihzcmMs
IGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB2b2lkIHN0b3JlMTYoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9yZTE2KHNy
YywgYWRkcmVzcykpOworICAgIH0KKworICAgIGJvb2wgdHJ5U3RvcmUxNihUcnVzdGVkSW1tMzIg
c3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRy
ZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAg
ICAgICAgICAgc3RvcmUxNihzcmMsIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAg
ICAgICAgICAgIHN0b3JlMTYoc3JjLCBhZGRyZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRk
cmVzczoKKyAgICAgICAgICAgIHN0b3JlMTYoc3JjLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNz
KCkubV9wdHIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzdG9y
ZTE2KFRydXN0ZWRJbW0zMiBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9yZTE2KHNyYywgYWRkcmVzcykpOworICAgIH0KKwor
ICAgIGJvb2wgdHJ5TG9hZERvdWJsZShEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWREb3VibGUo
YWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4OgorICAgICAgICAgICAgbG9hZERv
dWJsZShhZGRyZXNzLmFzQmFzZUluZGV4KCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgdm9pZCBsb2FkRG91YmxlKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZERv
dWJsZShhZGRyZXNzLCBkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlMb2FkRmxvYXQoRHlu
YW1pY0FkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFk
ZHJlc3M6CisgICAgICAgICAgICBsb2FkRmxvYXQoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6
QmFzZUluZGV4OgorICAgICAgICAgICAgbG9hZEZsb2F0KGFkZHJlc3MuYXNCYXNlSW5kZXgoKSwg
ZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGxvYWRGbG9h
dChEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRyeUxvYWRGbG9hdChhZGRyZXNzLCBkZXN0KSk7CisgICAgfQor
CisgICAgYm9vbCB0cnlTdG9yZURvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRkcmVz
cyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAg
ICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgc3RvcmVEb3Vi
bGUoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9y
ZURvdWJsZShzcmMsIGFkZHJlc3MuYXNCYXNlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIER5bmFt
aWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9y
ZURvdWJsZShzcmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0b3JlRmxvYXQo
RlBSZWdpc3RlcklEIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6
QWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlRmxvYXQoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNz
OjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZUZsb2F0KHNyYywgYWRkcmVzcy5hc0Jhc2VJ
bmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgc3RvcmVG
bG9hdChGUFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5U3RvcmVGbG9hdChzcmMsIGFkZHJlc3MpKTsKKyAgICB9
CisKKyAgICBKdW1wIHRyeUJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWlj
QWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2gg
KGxlZnQua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6Cisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoOChjb25kLCBsZWZ0LmFzQWRkcmVzcygpLCByaWdodCk7
CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2g4KGNvbmQsIGxlZnQuYXNCYXNlSW5kZXgoKSwgcmlnaHQpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB2b2lkIGJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBs
ZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRy
eUJyYW5jaDgoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgSnVtcCB0
cnlCcmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRHlu
YW1pY0FkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJpZ2h0LmtpbmQoKSkg
eworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0
dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQsIHJpZ2h0LmFzQWRkcmVzcygpKTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAg
SnVtcCBicmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFRydXN0ZWRJbW0zMiBsZWZ0
LCBEeW5hbWljQWRkcmVzcyByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gdHJ5
QnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1
bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgSnVtcCB0
cnlCcmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQs
IFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC5raW5kKCkp
IHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHJl
dHVybiBicmFuY2gzMihjb25kLCBsZWZ0LmFzQWRkcmVzcygpLCByaWdodCk7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBicmFuY2gz
Mihjb25kLCBsZWZ0LmFzQmFzZUluZGV4KCksIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgSnVtcCBicmFu
Y2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQsIFRydXN0
ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gdHJ5QnJhbmNoMzIo
Y29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNTZXQo
KSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorICAgIEp1bXAgdHJ5QnJh
bmNoMzIoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBSZWdp
c3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LmtpbmQoKSkgeworICAg
ICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0dXJuIGJy
YW5jaDMyKGNvbmQsIGxlZnQuYXNBZGRyZXNzKCksIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgSnVtcCBi
cmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQsIFJl
Z2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRyeUJyYW5jaDMy
KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmlzU2V0
KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEp1bXAgdHJ5QnJhbmNo
VGVzdDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBUcnVzdGVk
SW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQua2luZCgpKSB7CisgICAg
ICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICByZXR1cm4gYnJh
bmNoMzIoY29uZCwgbGVmdC5hc0FkZHJlc3MoKSwgcmlnaHQpOworICAgICAgICBjYXNlIER5bmFt
aWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwg
bGVmdC5hc0Jhc2VJbmRleCgpLCByaWdodCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gSnVtcCgpOworICAgICAgICB9CisgICAgfQorICAgIEp1bXAgYnJhbmNoVGVzdDMy
KFJlc3VsdENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tMzIg
cmlnaHQpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRyeUJyYW5jaFRlc3QzMihjb25k
LCBsZWZ0LCByaWdodCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisgICAgSnVtcCB0cnlCcmFuY2hU
ZXN0OChSZXN1bHRDb25kaXRpb24gY29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgVHJ1c3RlZElt
bTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LmtpbmQoKSkgeworICAgICAg
ICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0dXJuIGJyYW5j
aDgoY29uZCwgbGVmdC5hc0FkZHJlc3MoKSwgcmlnaHQpOworICAgICAgICBjYXNlIER5bmFtaWNB
ZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoOChjb25kLCBsZWZ0
LmFzQmFzZUluZGV4KCksIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJl
dHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgSnVtcCBicmFuY2hUZXN0OChSZXN1
bHRDb25kaXRpb24gY29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgSnVtcCByZXN1bHQgPSB0cnlCcmFuY2hUZXN0OChjb25kLCBsZWZ0
LCByaWdodCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBKdW1wIHRyeUp1bXAoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHJldHVybiBq
dW1wKGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpB
YnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICByZXR1cm4ganVtcChhZGRyZXNzLmFzQWJzb2x1
dGVBZGRyZXNzKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIEp1bXAganVtcChEeW5hbWljQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgSnVtcCByZXN1bHQgPSB0cnlKdW1wKGFkZHJlc3MpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisjaWYgQ1BVKFg4Nl82NCkgfHwgQ1BVKEFSTTY0KQorICAgIGJvb2wgdHJ5TG9h
ZDY0KER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVz
czo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQ2NChhZGRyZXNzLmFzQWRkcmVzcygpLCBkZXN0
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNz
OjpCYXNlSW5kZXg6CisgICAgICAgICAgICBsb2FkNjQoYWRkcmVzcy5hc0Jhc2VJbmRleCgpLCBk
ZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRy
ZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBsb2FkNjQoYWRkcmVzcy5hc0Fic29s
dXRlQWRkcmVzcygpLm1fcHRyLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIHZvaWQgbG9hZDY0KER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeUxvYWQ2NChhZGRyZXNzLCBkZXN0
KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlTdG9yZTY0KFJlZ2lzdGVySUQgc3JjLCBEeW5hbWlj
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkg
eworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgc3Rv
cmU2NChzcmMsIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHN0
b3JlNjQoc3JjLCBhZGRyZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAg
ICAgICAgIHN0b3JlNjQoc3JjLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCkubV9wdHIpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzdG9yZTY0KFJlZ2lzdGVy
SUQgc3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQodHJ5U3RvcmU2NChzcmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0
b3JlNjQoVHJ1c3RlZEltbTY0IHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRk
cmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlNjQoc3JjLCBhZGRyZXNzLmFzQWRkcmVz
cygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRy
ZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTY0KHNyYywgYWRkcmVzcy5hc0Jhc2VJ
bmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNB
ZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTY0KHNyYywgYWRkcmVz
cy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIHZvaWQgc3RvcmU2NChUcnVzdGVkSW1tNjQgc3JjLCBEeW5hbWljQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5U3RvcmU2NChzcmMsIGFk
ZHJlc3MpKTsKKyAgICB9CisKKyAgICBKdW1wIHRyeUJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBEeW5hbWljQWRkcmVzcyByaWdodCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAocmlnaHQua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJl
c3M6OkFkZHJlc3M6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdCwgcmln
aHQuYXNBZGRyZXNzKCkpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1
bXAoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZCwgVHJ1c3RlZEltbTY0IGxlZnQsIER5bmFtaWNBZGRyZXNzIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgSnVtcCByZXN1bHQgPSB0cnlCcmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCk7
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBKdW1wIHRyeUJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRp
b24gY29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTY0IHJpZ2h0KQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChsZWZ0LmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRy
ZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQuYXNB
ZGRyZXNzKCksIHJpZ2h0KTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4
OgorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQuYXNCYXNlSW5kZXgoKSwg
cmlnaHQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTY0IHJpZ2h0KQorICAgIHsKKyAgICAg
ICAgSnVtcCByZXN1bHQgPSB0cnlCcmFuY2g2NChjb25kLCBsZWZ0LCByaWdodCk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisgICAgCisgICAgSnVtcCB0cnlCcmFuY2g2NChSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmQsIER5bmFtaWNBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGxlZnQua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFk
ZHJlc3M6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdC5hc0FkZHJlc3Mo
KSwgcmlnaHQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsK
KyAgICAgICAgfQorICAgIH0KKyAgICBKdW1wIGJyYW5jaDY0KFJlbGF0aW9uYWxDb25kaXRpb24g
Y29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAg
ICAgIEp1bXAgcmVzdWx0ID0gdHJ5QnJhbmNoNjQoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgSnVtcCB0cnlCcmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQs
IER5bmFtaWNBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW02NCByaWdodCkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAobGVmdC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRk
cmVzczoKKyAgICAgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LmFzQWRkcmVzcygp
LCByaWdodCk7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAg
ICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBsZWZ0LmFzQmFzZUluZGV4KCksIHJpZ2h0KTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0K
KyAgICB9CisgICAgSnVtcCBicmFuY2hUZXN0NjQoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIER5bmFt
aWNBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW02NCByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAg
cmVzdWx0ID0gdHJ5QnJhbmNoVGVzdDY0KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVzdWx0LmlzU2V0KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKyNlbmRpZiAvLyBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisKICNpZiBFTkFCTEUoTUFT
TV9QUk9CRSkKICAgICAvLyBMZXQncyB5b3UgcHJpbnQgZnJvbSB5b3VyIEpJVCBnZW5lcmF0ZWQg
Y29kZS4KICAgICAvLyBTZWUgY29tbWVudHMgaW4gTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggZm9y
IGV4YW1wbGVzIG9mIGhvdyB0byB1c2UgdGhpcy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hlcgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGll
cyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNzb2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlv
biBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5ldmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSks
IGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQg
aW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3QyKS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUg
QWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQg
dG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBpbiB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBh
c3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXphdGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9y
bWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBh
IGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3QgbmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3Qp
LiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQgaW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVj
dGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8g
aXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0FkZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRs
b2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBBZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2Nh
bGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1lbnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQg
QXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNk
ZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNs
dWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFy
Z3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9
CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUoKTsKKworICAgIFJlZyBhcmd1bWVudFJlZygp
IGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRh
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9y
aWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVn
LCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1f
cmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAgUmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNC
bG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1faW5kZXgoaW5kZXgpCit7Cit9CisKK0Jhc2lj
QmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwordm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFs
dWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFz
aWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChk
dW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIp
OworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAg
ICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9j
aworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOwor
Y2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9y
PEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZh
bHVlJ3MgdHlwZWRlZi4KKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMi
OworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQorCisgICAgQWRqYWNlbmN5TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgQWRqYWNlbmN5TGlzdDo6aXRlcmF0b3Ig
ZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBBZGphY2VuY3lMaXN0Ojpjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAg
ICBBZGphY2VuY3lMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4g
bV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVzLmxh
c3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0K
KworICAgIHZvaWQgYXBwZW5kKFZhbHVlKik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQ
cm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygp
IGNvbnN0OworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7
CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3Qg
U3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0OworCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5z
dGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4KTsK
KworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWVMaXN0IG1fdmFsdWVzOworfTsKKwor
Y2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1
bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitw
cml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1
bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Js
b2NrRHVtcChibG9jayk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNCYXNpY0Jsb2NrCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQmFzaWNCbG9ja0lubGluZXNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBw
cm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit1bnNpZ25lZCBCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCkt
Pm51bVN1Y2Nlc3NvcnMoKTsKK30KKworQmFzaWNCbG9jayogQmFzaWNCbG9jazo6c3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xW
YWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworQmFzaWNCbG9jayomIEJhc2ljQmxvY2s6
OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250
cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2NvbnN0IEJhc2ljQmxvY2s6OlN1
Y2Nlc3Nvckxpc3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVy
biBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ2hlY2tWYWx1ZTo6fkNo
ZWNrVmFsdWUoKQoreworfQorCit2b2lkIENoZWNrVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hl
Y2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQ2hlY2tWYWx1ZSA6IHB1YmxpYyBDaGVjayB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVja1N1YjoK
KyAgICAgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorCisgICAgfkNoZWNrVmFsdWUoKTsKKworICAgIFN0YWNrbWFw
IHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVj
a011bC4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luLCBsZWZ0LCByaWdodCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0ludCh0eXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKGxlZnQtPnR5cGUo
KSA9PSByaWdodC0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBDaGVja0FkZCB8
fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2RlID09IENoZWNrTXVsKTsKKyAgICB9CisKKyAg
ICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG9wY2RlID09IENoZWNrKTsKKyAgICB9Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIu
cGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
YXJpc29uTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisj
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIENvbXBhcmlzb25N
YXRjaGVyCisKK1Rlc3RMb2FkTm90WmVybzEgPSBBbmQoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitU
ZXN0TG9hZE5vdFplcm8yID0gQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpCitUZXN0Tm90WmVybyA9
IEFuZChsZWZ0LCByaWdodCkKKworVGVzdExvYWRaZXJvMSA9IEVxdWFsKEFuZChMb2FkKGFkZHJl
c3MpLCByaWdodCksICQwKQorVGVzdExvYWRaZXJvMiA9IEVxdWFsKEFuZChsZWZ0LCBMb2FkKGFk
ZHJlc3MpKSwgJDApCitUZXN0WmVybyA9IEVxdWFsKEFuZChsZWZ0LCByaWdodCksICQwKQorCitM
b2FkRXF1YWwxID0gRXF1YWwoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitMb2FkRXF1YWwyID0gRXF1
YWwobGVmdCwgTG9hZChhZGRyZXNzKSkKK05vdCA9IEVxdWFsKHZhbHVlLCAkMCkKK0VxdWFsID0g
RXF1YWwobGVmdCwgcmlnaHQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK0NvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSgpCit7Cit9CisKK3Zv
aWQgQ29uc3QzMlZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3QzMlZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDMy
VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQ29uc3QzMlZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9
PSBDb25zdDMyOyB9CisgICAgCisgICAgfkNvbnN0MzJWYWx1ZSgpOworICAgIAorICAgIGludDMy
X3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgQ29uc3QzMiwgSW50MzIsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0NvbnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0NjRWYWx1ZTo6fkNv
bnN0NjRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3Q2NFZh
bHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3Q2NFZhbHVlIDog
cHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBv
cGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdDY0OyB9CisgICAgCisgICAgfkNvbnN0NjRW
YWx1ZSgpOworICAgIAorICAgIGludDY0X3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IENvbnN0NjRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1
ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAg
ICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50NjRfdCBtX3Zh
bHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0NvbnN0
NjRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91Ymxl
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
RG91YmxlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1
ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzQ29uc3REb3VibGVWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBDb25zdERvdWJsZVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25z
dERvdWJsZTsgfQorICAgIAorICAgIH5Db25zdERvdWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91
YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBkb3VibGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUo
aW5kZXgsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZh
bHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3REb3VibGVWYWx1ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjND
b250cm9sVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnRy
b2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29udHJvbFZhbHVlOjpkdW1w
TWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRlciBjb21tYTsK
KyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9zdWNjZXNzb3JzKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGJsb2NrKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb250cm9sVmFsdWVfaAorI2Rl
ZmluZSBCM0NvbnRyb2xWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCitjbGFzcyBDb250
cm9sVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
ICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgUmV0dXJu
OgorICAgICAgICBjYXNlIE9vcHM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
Y2FzZSBTd2l0Y2g6IAorICAgICAgICAgICAgLy8gVGhpcyBpcyBoZXJlIGJlY2F1c2UgU3dpdGNo
VmFsdWUgaXMgYSBzdWJjbGFzcyBvZiBDb250cm9sVmFsdWUsIHNvIHdlIHdhbnQKKyAgICAgICAg
ICAgIC8vIHN3dGljaFZhbHVlLT5hczxDb250cm9sVmFsdWU+KCkgdG8gcmV0dXJuIG5vbi1udWxs
LgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0eXBlZGVmIFZlY3RvcjxC
YXNpY0Jsb2NrKiwgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIH5Db250cm9sVmFsdWUoKTsKKwor
ICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMu
c2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaV07IH0KKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaV07IH0KKworICAgIGNvbnN0
IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFy
Z3VtZW50cy4uLikKKyAgICB7CisgICAgfQorCisgICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVs
YXRlIHRoaXMuCisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgor
ICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAg
eworICAgICAgICBBU1NFUlQob3Bjb2RlID09IE9vcHMpOworICAgIH0KKworICAgIC8vIFVzZSB0
aGlzIGZvciBSZXR1cm4uCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcmVzdWx0KQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG9wY29kZSA9PSBSZXR1cm4pOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgor
ICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbiwgQmFzaWNCbG9jayogdGFyZ2V0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7Cisg
ICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQodGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBVc2Ug
dGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRyb2xWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAg
ICAgIEJhc2ljQmxvY2sqIHllcywgQmFzaWNCbG9jayogbm8pCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NF
UlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsK
KyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChubyk7CisgICAgfQorfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0NvbnRyb2xWYWx1ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJbmRleFNldF9oCisKKyNpbmNsdWRlIDx3dGYv
Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNldCBmb3IgdGhpbmdzIHRoYXQg
aGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0
J3Mgb25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28g
bWFueSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeSBzcGFyc2UKKy8v
IGluZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1ZXMuCisKKy8vIElmIHlvdSB3YW50
IGEgc2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8gSW5kZXhTZXQ8QmFzaWNCbG9jaz4uIFNvLCBU
ID0gQmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbmRleFNldCB7Citw
dWJsaWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFkZChUKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsK
KyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQqIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1
cm4gbV9zZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBjbGFzcyBJdGVyYWJsZSB7CisgICAgcHVibGljOgor
ICAgICAgICBJdGVyYWJsZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3Qg
SW5kZXhTZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKGNvbGxlY3Rpb24pCisg
ICAgICAgICAgICAsIG1fc2V0KHNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigp
CisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29sbGVjdGlvblR5
cGUmIGNvbGxlY3Rpb24sIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBpdGVy
KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAg
ICAgICAgICwgbV9pdGVyKGl0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX2l0ZXIrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faXRlciA9PSBv
dGhlci5tX2l0ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSogbV9jb2xsZWN0aW9u
OworICAgICAgICAgICAgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yIG1faXRl
cjsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuYmVnaW4oKSk7IH0KKyAgICAgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5lbmQo
KSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlJiBtX2Nv
bGxlY3Rpb247CisgICAgICAgIGNvbnN0IEluZGV4U2V0JiBtX3NldDsKKyAgICB9OworCisgICAg
Ly8gRm9yIGJhc2ljIGJsb2NrcywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9j
ZWR1cmUpOworICAgIC8vCisgICAgLy8gRm9yIHZhbHVlcywgeW91IGRvOgorICAgIC8vIGluZGV4
U2V0LnZhbHVlcyhwcm9jZWR1cmUudmFsdWVzKCkpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bGxlY3Rpb25UeXBlPgorICAgIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPiB2YWx1ZXMoY29uc3Qg
Q29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
SXRlcmFibGU8Q29sbGVjdGlvblR5cGU+KGNvbGxlY3Rpb24pOworICAgIH0KKworICAgIGNvbnN0
IEJpdFZlY3RvciYgaW5kaWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBpbmRpY2VzKCkuc2V0Qml0cygp
KQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBUOjpkdW1wUHJlZml4LCBpbmRleCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEJpdFZlY3RvciBtX3NldDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNJbmRleFNldF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIu
cGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBMb3dlcmluZ01hdGNoZXIKKworIyBUaGVz
ZSBydWxlcyBhcmUgY29uc2lkZXJlZCBpbiBhIGNhc2NhZGUsIHN0YXJ0aW5nIGF0IHRoZSB0b3Au
IEl0J3MgaW1wbGVuZW50ZWQgdXNpbmcgc3dpdGNoCisjIHN0YXRlbWVudHMgd2hlcmV2ZXIgcG9z
c2libGUuCisKKyMgTm90ZTogYWRkaW5nIG1vcmUgcnVsZXMgdG8gdGhpcyBtYXRjaGVyIGlzIGFu
IGV4Y2VsbGVudCB3YXkgb2YgaW1wcm92aW5nIHBlcmZvcm1hbmNlIQorCitMb2FkID0gTG9hZChh
ZGRyZXNzKQorCitBZGRMb2FkID0gQWRkKExvYWQoYWRkcmVzcyksIHZhbHVlKQorQWRkID0gQWRk
KGxlZnQsIHJpZ2h0KQorCitTdG9yZSA9IFN0b3JlKEFkZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSks
IGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKEFuZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJl
c3MpCitTdG9yZSA9IFN0b3JlKHZhbHVlLCBhZGRyZXNzKQorCitSZXR1cm4gPSBSZXR1cm4odmFs
dWUpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNNZW1vcnlWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworTWVt
b3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAgICAg
ICBvdXQucHJpbnQoIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZp
bmUgQjNNZW1vcnlWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAg
IGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2
UzoKKyAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
Y2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZs
b2F0OgorICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB+TWVtb3J5VmFsdWUoKTsKKworICAgIGludHB0cl90IG9mZnNldCgpIGNvbnN0IHsg
cmV0dXJuIG1fb2Zmc2V0OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDha
LCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAg
ICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAg
ICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAg
ICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAg
ICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAg
ICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IERvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRo
aXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisgICAg
TWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwb2ludGVyLCBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBMb2FkRmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2lu
LCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlm
ICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAg
ICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAg
ICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAg
IGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVz
ZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFs
dWUqIHBvaW50ZXIsCisgICAgICAgIGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAgICAg
LCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkg
eworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4
OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0
OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzTWVtb3J5VmFsdWVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
T3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRp
dHk6CisgICAgICAgIG91dC5wcmludCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAg
ICAgICAvLyBGSVhNRQorICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNP
cGNvZGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5v
LW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3Zl
IGEgdmFsdWUuCisgICAgTm9wLAorICAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBpZGVudGl0eSwg
dXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgSWRlbnRpdHksCisKKyAgICAvLyBDb25z
dGFudHMuIFVzZSB0aGUgQ29uc3RWYWx1ZSogY2xhc3Nlcy4gQ29uc3RhbnRzIGV4aXN0IGluIHRo
ZSBjb250cm9sIGZsb3csIHNvIHRoYXQgd2UgY2FuCisgICAgLy8gcmVhc29uIGFib3V0IHdoZXJl
IHdlIHdvdWxkIGNvbnN0cnVjdCB0aGVtLiBMYXJnZSBjb25zdGFudHMgYXJlIGV4cGVuc2l2ZSB0
byBjcmVhdGUuCisgICAgQ29uc3QzMiwKKyAgICBDb25zdDY0LAorICAgIENvbnN0RG91YmxlLAor
CisgICAgLy8gVGhlIG1hZ2ljYWwgc3RhY2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0
aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0gcmVnYXJkbGVzcyBvZgorICAgIC8vIHdoZXJl
IGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90
IFZhbHVlIGdldHMgYSBkaXNqb2ludCByYW5nZSBvZgorICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNl
IHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFzcy4KKyAgICBTdGFja1Nsb3QsCisKKyAgICAvLyBUaGUg
bWFnaWNhbCBhcmd1bWVudCByZWdpc3Rlci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0
IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0KKyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXJlIGluIGNv
bnRyb2wgZmxvdyB5b3UgcHV0IGl0LCBhbmQgdGhlIGNvbXBpbGVyIHRha2VzIGNhcmUgdG8gZW5z
dXJlIHRoYXQgd2UKKyAgICAvLyBkb24ndCBjbG9iYmVyIHRoZSB2YWx1ZSBieSByZWdpc3RlciBh
bGxvY2F0aW9uIG9yIGNhbGxzIChlaXRoZXIgYnkgc2F2aW5nIHRoZSBhcmd1bWVudCB0byB0aGUK
KyAgICAvLyBzdGFjayBvciBwcmVzZXJ2aW5nIGl0IGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIp
LiBVc2UgdGhlIEFyZ3VtZW50UmVnVmFsdWUgY2xhc3MuIFRoZSByZXR1cm4KKyAgICAvLyB0eXBl
IGlzIGVpdGhlciBwb2ludGVyKCkgKGZvciBHUFJzKSBvciBEb3VibGUgKGZvciBGUFJzKS4KKyAg
ICBBcmd1bWVudFJlZywKKworICAgIC8vIFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0
aGlzIGFueXdoZXJlIGluIGNvbnRyb2wgZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhl
CisgICAgLy8gZnJhbWUgcG9pbnRlciwgd2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNo
YW5nZXMgdGhlIGZyYW1lIHBvaW50ZXIgdGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxs
eSByZWFzb24sIHRoZSBGcmFtZVBvaW50ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRo
ZSBmcmFtZSBwb2ludGVyICpzaG91bGQqIGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMg
dG8gYmUgcmlnaHQgbm93LgorICAgIEZyYW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3JwaGlj
IG1hdGgsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisg
ICAgTXVsLAorICAgIERpdiwKKworICAgIC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwg
Ly8gZG9lc24ndCB0cmFwIGV2ZXIsIGJlaGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwK
KyAgICBCaXRBbmQsCisgICAgQml0T3IsCisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBTU2hy
LAorICAgIFpTaHIsCisKKyAgICAvLyBDYXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQg
cmV0dXJucyBJbnQzMjoKKyAgICBTRXh0OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50
MzIgYW5kIHJldHVybnMgSW50NjQ6CisgICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBU
YWtlcyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMg
YW5kIHJldHVybnMgRG91YmxlOgorICAgIElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCBy
ZXR1cm5zIEludDMyOgorICAgIERUb0kzMiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlz
b25zLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5v
dGUgdGhhdCAiTm90IgorICAgIC8vIGlzIGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisg
ICAgTm90RXF1YWwsCisgICAgTGVzc1RoYW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0Vx
dWFsLAorICAgIEdyZWF0ZXJFcXVhbCwKKworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJl
dHVybnMgaW50MzIgMCBvciAxLgorICAgIEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1
YWwKKyAgICBCZWxvd0VxdWFsLAorCisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNh
dGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUgbG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1
ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4gSW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywK
KyAgICBMb2FkMTZaLAorICAgIExvYWQxNlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToK
KyAgICBMb2FkRmxvYXQsCisgICAgLy8gVGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVybiB0
eXBlIGlzOgorICAgIExvYWQsCisKKyAgICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNh
dGVzIGhvdyB0aGUgdmFsdWUgaXMgc3RvcmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAg
Ly8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwK
KyAgICAvLyBUaGlzIHRha2VzIGEgRG91YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAg
Ly8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3Vi
bGU6CisgICAgU3RvcmUsCisKKyAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1
bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ug
c3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdo
dCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2Ug
dGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFzcy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlr
ZSBhIGNhbGwsCisgICAgLy8gYnV0IG9ubHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRp
b24gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAg
IC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNrbWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24gaG93
IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdh
bCB0byByZXF1ZXN0IHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVy
IGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVlc3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1l
bnQgaXMgYXQgc29tZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5n
IGFyZWEgb24gdGhlCisgICAgLy8gc3RhY2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENo
ZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwg
dGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJhdGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxi
YWNrIGdldHMgdG8gZW1pdCBzb21lIGNvZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0
byBsaW5rIHRoZSBqdW1wCisgICAgLy8gZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9m
IHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQg
eW91CisgICAgLy8gYXJlIG5vdCBhbGxvd2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGlu
ZSBjb2RlIGZyb20geW91ciBzbG93IHBhdGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdp
bGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVz
IHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhhcHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91
IGhhdmUgdHdvIENoZWNrQWRkJ3M6CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkK
KyAgICAvLyBiID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxp
ZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQor
ICAgIC8vIGIgPSBJZGVudGl0eShhKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdh
cmRsZXNzIG9mIHRoZSBjYWxsYmFja3MgdXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBt
YXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAvLyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1h
dGlvbiBpcyB2YWxpZCBldmVuIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cg
dGhhdAorICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29u
ZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0
aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25kIENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFu
dC4KKyAgICBDaGVja0FkZCwKKyAgICBDaGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8v
IENoZWNrIHRoYXQgc2lkZS1leGl0cy4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENo
ZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlzIGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdl
bmVyYXRpb24gY2FsbGJhY2suIFRoaXMgdGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlz
IGJyYW5jaGVzIG9uLCB3aXRoCisgICAgLy8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0
cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVlIHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBz
bG93CisgICAgLy8gcGF0aC4KKyAgICBDaGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0
aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAgICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2ls
b25WYWx1ZSBjbGFzcy4KKyAgICBQaGksCisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9s
VmFsdWUgY2xhc3MuCisgICAgSnVtcCwKKyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gs
IHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVy
by4gVXNlcyB0aGUKKyAgICAvLyBDb250cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXgg
c3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVlIHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAv
LyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIgZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBT
d2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBTd2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhh
dCBCMyBwcm9jZWR1cmVzIGRvbid0IGtub3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2Fu
IGp1c3QgcmV0dXJuIGFueQorICAgIC8vIHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFz
cy4KKyAgICBSZXR1cm4sCisKKyAgICAvLyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0
ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xh
c3MuCisgICAgT29wcworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpCMzo6T3Bjb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBCM09wY29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdp
bi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNP
cmlnaW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2lu
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4o
IiwgUmF3UG9pbnRlcihtX2RhdGEpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNPcmlnaW5faAorI2RlZmluZSBCM09yaWdpbl9oCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8v
IFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIgY2FuIGNob29zZSB0byBwdXQgb3JpZ2lucyBvbiB2YWx1
ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIzIHdpbGwgYmUgYWJsZSB0bworLy8gYWNjb3VudCwgZG93
biB0byB0aGUgbWFjaGluZSBjb2RlLCB3aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNwb25kcyB0byB3
aGljaCBvcmlnaW4uIEIzCisvLyB0cmFuc2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2ZSBPcmlnaW5z
IGNhcmVmdWxseS4gSXQncyBhbiBlcnJvciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0aW9uIHRoYXQK
Ky8vIGVpdGhlciBkcm9wcyBPcmlnaW5zIG9yIGxpZXMgYWJvdXQgdGhlbS4KK2NsYXNzIE9yaWdp
biB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRhdGEgPSBudWxs
cHRyKQorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCB2
b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9kYXRh
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM09yaWdpbl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9p
bnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKworI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50
ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1BhdGNocG9pbnRWYWx1
ZTo6flBhdGNocG9pbnRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFZhbHVlOjpkdW1w
TWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRlciBjb21tYTsK
KyAgICBvdXQucHJpbnQoY29tbWEsICJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKKyAgICBpZiAo
c2hhZG93KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJzaGFkb3cgPSAiLCBzaGFkb3cpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNQYXRjaHBvaW50VmFsdWVfaAorI2RlZmluZSBCM1BhdGNocG9pbnRWYWx1ZV9o
CisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2ludFZhbHVlIDogcHVi
bGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNv
ZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+UGF0Y2hwb2ludFZh
bHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKyAgICB1bnNpZ25lZCBzaGFkb3cgeyAw
IH07CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IFBhdGNocG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2lu
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4pCisgICAg
eworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQ
YXRjaHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQcm9j
ZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2NlZHVyZSgpCit7Cit9
CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soKQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPiBibG9jayA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jaz4obV9i
bG9ja3Muc2l6ZSgpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAg
ICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVw
RHVtcChibG9jaykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKworI2luY2x1ZGUgPHd0
Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1ZTsKKworY2xhc3Mg
UHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1cmUpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgUHJvY2VkdXJlKCk7CisgICAg
flByb2NlZHVyZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soKTsKKyAgICAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBW
YWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Mu
c2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgIDogbV9w
cm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJh
c2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3By
b2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2lu
ZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1cmUt
PnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRl
eCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKworICAgICAgICBQcm9j
ZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisK
KyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsg
fQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBudW1C
bG9ja3MoKSk7IH0KKworICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoK
KyAgICAgICAgVmFsdWVzQ29sbGVjdGlvbihQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICAgICAg
ICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJh
dG9yKCk6CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAg
ICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgVmFsdWUqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fcHJvY2VkdXJlLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXgg
PT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgMCk7IH0KKyAg
ICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUs
IG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgICAg
IFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92
YWx1ZXNbaW5kZXhdOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29sbGVj
dGlvbiB2YWx1ZXMoKSB7IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitwcml2
YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZUlubGluZXNfaAorI2RlZmlu
ZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFs
dWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXpl
KCksIGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7
CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1
cmVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30K
Kwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0
YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTdGFj
a1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAg
ICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlU2l6ZTsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBl
bmQgb2YgY29tcGlsYXRpb24uIFlvdSBjYW5ub3QgcmVseSBvbiBpdCBoYXZpbmcgYSBtZWFuaW5n
ZnVsCisgICAgLy8gdmFsdWUgd2hpbGUgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcuCisgICAgaW50
cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tT
bG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXpl
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXIoKSwgb3JpZ2luKQor
ICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAo
MCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICBpbnRwdHJf
dCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNTdGFja1Nsb3RWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKwordm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgKKyAgICAgICAgIntvcGFxdWUgPSAiLCBSYXdQb2ludGVyKG1fb3BhcXVlKSwg
IiwgcmVwcyA9ICIsIGxpc3REdW1wKG1fcmVwcyksCisgICAgICAgICIsIGdlbmVyYXRvciA9ICIs
IFJhd1BvaW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBjbG9iYmVyZWQgPSAiLCBtX2Nsb2Ji
ZXJlZCwKKyAgICAgICAgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIn0i
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNr
bWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisj
aW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNs
dWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgQjNWYWx1ZTsKKworY2xhc3MgU3RhY2ttYXAgeworcHVibGljOgorICAgIHN0cnVj
dCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgVmFsdWUgY29udGFp
bmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZhbHVlKiB2YWx1ZTsKKworICAgICAgICAvLyBU
aGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAgU3RhY2ttYXAqIHN0YWNrbWFwOworCisgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIGp1bXAgdG8gdGhlIHNsb3cgcGF0aCwgaWYgdGhpcyBpcyBhIHN0
YWNrbWFwIGZvciBhIENoZWNrIHZhbHVlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVt
cDsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihDQ2Fs
bEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFyZWRU
YXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3RhY2ttYXAoKQor
ICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBpZGVudGlmeSB0
aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAtdXNpbmcgVmFs
dWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRlIG1heSBlbmQg
dXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisgICAgLy8gYWxs
b3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIgYmFjayB0byB3
aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdlcmUgdXNpbmcg
dG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBwYXJhbWV0ZXIp
CisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9CisgICAgdm9pZCog
b3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENvbnZlbmllbmNl
IGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAgdm9p
ZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBzZXRPcGFxdWUo
Yml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qgb3BhcXVlSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUoKSk7IH0KKwor
ICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1c2VzIHRoaXMg
U3RhY2ttYXAuIE5vdGUgdGhhdCBpbmRleCB6ZXJvIHJlZmVycyB0byB0aGUKKyAgICAvLyBmaXJz
dCBhcmd1bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90IGNv
bnN0cmFpbmFibGUuIEZvciBleGFtcGxlLCBpbiBhCisgICAgLy8gQ2hlY2tBZGQgdmFsdWUsIGl0
IHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEgQ2hl
Y2sgdmFsdWUsIGl0IHdvdWxkCisgICAgLy8gYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGV4
IDAuIEJ1dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBjYW4g
ZGVwZW5kCisgICAgLy8gb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmlsbGVk
IGluLgorICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYg
cmVwKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXplKCkpCisgICAg
ICAgICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhdID0g
cmVwOworICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0KQor
ICAgIHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICB2b2lk
IHNldEdlbmVyYXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAg
ICBtX2dlbmVyYXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9y
RnVuY3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKworICAgIC8vIFRoZXNlIHdpbGwgcmV0dXJuIGlu
dGVyZXN0aW5nIHRoaW5ncyBpbnNpZGUgdGhlIGdlbmVyYXRvciBjYWxsYmFjaywgb3IgYWZ0ZXIg
Y29tcGlsYXRpb24uCisgICAgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsg
cmV0dXJuIG1fcmVwczsgfQorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgdm9pZCogbV9vcGFxdWUgeyBudWxs
cHRyIH07CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRv
cj4gbV9nZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0
ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3dpdGNoQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3dpdGNoQ2FzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9j
ay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTd2l0Y2hDYXNl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2FzZVZh
bHVlLCAiLT4iLCBwb2ludGVyRHVtcChtX3RhcmdldCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hDYXNlX2gKKyNkZWZpbmUgQjNT
d2l0Y2hDYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRj
aENhc2UoKQorICAgIHsKKyAgICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVl
LCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUoY2FzZVZhbHVlKQor
ICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0KKworICAgIGludDY0
X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBCYXNpY0Js
b2NrKiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludDY0X3QgY2FzZVZh
bHVlOworICAgIEJhc2ljQmxvY2sqIHRhcmdldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsZHVlICJCM1N3aXRjaFZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hWYWx1ZTo6flN3aXRjaFZhbHVlKCkKK3sK
K30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCkK
K3sKKyAgICBTd2l0Y2hDYXNlIHJlc3VsdCA9IG1fc3VjY2Vzc29yc1tpbmRleF07CisgICAgbV9z
dWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0KCk7CisgICAgbV9zdWNjZXNzb3Jz
LnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFN3aXRjaFZhbHVl
OjphcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAgbV9zdWNj
ZXNzb3JzLmFwcGVuZChtX3N1Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3NvcnNbbV9z
dWNjZXNzb3JzLnNpemUoKSAtIDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBtX3ZhbHVl
cy5hcHBlbmQoc3dpdGNoQ2FzZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBkZXN0cnVj
dGl2ZWx5IG92ZXJyaWRlcyBDb250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91dC5wcmlu
dChsaXN0RHVtcCgqdGhpcykpOworfQorCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKQorICAgIDog
Q29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMu
YXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1
ZV9oCisKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2Fz
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFs
dWUgOiBwdWJsaWMgQ29udHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5T
d2l0Y2hWYWx1ZSgpOworCisgICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNz
b3JzKCkuCisgICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKTsgfQorCisgICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVl
IGlzIGF0IHRoZSBzYW1lIGluZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpXTsgfQorICAgIAorICAgIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYgY2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAg
ICBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5s
YXN0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNjZXNz
b3JzKCkubGFzdCgpOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVt
Q2FzZVZhbHVlcygpOyB9CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nl
c3NvcihpbmRleCkpOworICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWduZWQg
aW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKwor
ICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAg
ICAgICAgICAgIDogbV9zd2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihTd2l0Y2hWYWx1ZSYgc3dp
dGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dpdGNo
VmFsdWUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0
ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOwor
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgU3dpdGNoVmFsdWUqIG1fc3dpdGNoOworICAgICAgICB1bnNpZ25l
ZCBtX2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIGNh
c2UgYW5kIHJlb3JkZXJzIHRoaW5ncyBhIGJpdC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0aGUgY2Fz
ZXMgZnJvbSAwIHRvIE4sCisgICAgLy8gdGhlbiB5b3UgY2FuIGtlZXAgaXRlcmF0aW5nIGFmdGVy
IHRoaXMgc28gbG9uZyBhcyB5b3UgcmV2aXNpdCB0aGlzIHNhbWUgaW5kZXggKHdoaWNoIHdpbGwg
bm93CisgICAgLy8gY29udGFpbiBzb21lIG90aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJlbW92ZXMg
dGhlIGNhc2UgdGhhdCB3YXMgcmVtb3ZlZC4KKyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNhc2UodW5z
aWduZWQgaW5kZXgpOworCisgICAgdm9pZCBhcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3
aXRjaENhc2UpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisKKyAgICBTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgQmFzaWNC
bG9jayogZmFsbFRocm91Z2gpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM1N3aXRjaFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlw
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RG
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQoIlZvaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIG91dC5wcmludCgiSW50NjQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBlX2gKKwor
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2VudW0gVHlwZSB7CisgICAgVm9pZCwKKyAgICBJbnQzMiwKKyAgICBJbnQ2NCwK
KyAgICBEb3VibGUKK307CisKK2lubGluZSBib29sIGlzSW50KFR5cGUgdHlwZSkKK3sKKyAgICBy
ZXR1cm4gdHlwZSA9PSBJbnQzMiB8fCB0eXBlID09IEludDY0OworfQorCitpbmxpbmUgYm9vbCBp
c0Zsb2F0KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBEb3VibGU7Cit9CisKK2lu
bGluZSBUeXBlIHBvaW50ZXIoKSBjb25zdAoreworICAgIGlmIChzaXplb2Yodm9pZCopID09IDQp
CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICByZXR1cm4gSW50NjQ7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlR5cGUpOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1ZTo6flVwc2ls
b25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiXiIsIG1fcGhpLT5pbmRleCgpKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
VXBzaWxvblZhbHVlX2gKKyNkZWZpbmUgQjNVcHNpbG9uVmFsdWVfaAorCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVXBzaWxv
blZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9CisKKyAgICB+VXBz
aWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkgY29uc3QgeyByZXR1cm4gbV9waGk7IH0K
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAg
IFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVl
LCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwg
dmFsdWUpCisgICAgICAgICwgbV9waGkocGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVl
LT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0KKworICAgIFZhbHVlKiBtX3BoaTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNVcHNpbG9uVmFsdWVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitWYWx1ZTo6flZhbHVlKCkKK3sKK30KKwordm9p
ZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdmFsdWUpCit7CisgICAgLy8gVGhp
cyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNlbWVudCBvZiB3aGF0
ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBsYWluIElkZW50aXR5
IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCwg
dGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFjZSwgYW5k
IHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4KKworICAgIHVu
c2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5cGU7CisgICAgT3Jp
Z2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3du
ZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisgICAgdm9p
ZCogbWlzYyA9IHRoaXMtPm1pc2M7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlID09IHZhbHVl
LT50eXBlKCkpOworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlz
KSAoaW5kZXgsIElkZW50aWZ5LCB0eXBlLCBvcmlnaW4sIHZhbHVlKTsKKworICAgIHRoaXMtPm93
bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKKyAgICB0
aGlzLT5taXNjID0gbWlzYzsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9p
ZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNvZGUpOworCisgICAgb3V0LnByaW50
KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxkIDog
Y2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkp
OworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmlu
Z091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAg
aWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOwor
CisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBjb25z
dAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9
CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91
YmxlKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0Cit7
Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0Q2hp
bGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNh
c2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2OgorICAg
IGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2Fz
ZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNTaHI6
CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoK
KyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgpOwor
ICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRlcigpOworICAgIGNh
c2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBF
cXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBH
cmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoK
KyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgor
ICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGNhc2UgU0V4
dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7CisgICAgY2FzZSBG
Um91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gRG91YmxlOworICAgIGNhc2Ug
Tm9wOgorICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpbmNsdWRlICJCM09y
aWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBWYWx1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFsdWUp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVj
dG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlzdDsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBk
dW1wUHJlZml4ID0gIkAiOworCisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUpIHsgcmV0
dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgflZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhl
IG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZhbHVlcyB3aXRoIGlk
ZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQor
CisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgCisg
ICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRl
eF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBlIHVzaW5n
IHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisK
KyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0gCisg
ICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxk
cmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAgICB2b2lk
IHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICAvLyBUaGlzIGlz
IGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBkbyBzb21l
dGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZlIGEKKyAgICAvLyBBcmd1bWVudFJlZ1ZhbHVlLCB5
b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8gaWYgKEFyZ3VtZW50UmVnVmFsdWUqIGFyZ3VtZW50
UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCkpIHsKKyAgICAvLyAgICAgdGhpbmdz
CisgICAgLy8gfQorICAgIC8vCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoaXMg
b3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGlzIHJldHVybnMg
bnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2VwdHMob3Bjb2RlKCkpIHJldHVybnMgZmFsc2UuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhcygpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0ludDMy
KCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBo
YXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisgICAgYm9v
bCBoYXNJbnQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50KCkgY29uc3Q7CisgICAgYm9vbCBp
c0ludChpbnQ2NF90IHZhbHVlKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkgY29uc3Q7
CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMg
dmlhIFByb2NlZHVyZS4KKyAgICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUg
dHlwZSBleHBsaWNpdGx5OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0
eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBh
cmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9z
ZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBm
aXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhw
bGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlw
ZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2lu
KQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAg
eworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4g
aW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0Cisg
ICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5k
ZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9y
KG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQp
OworCisgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0
IGJpdHMuCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAg
VHlwZSBtX3R5cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxp
c3QgbV9jaGlsZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0
ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0
ciB9OyAvLyB1c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIHZvaWQq
IG1pc2MgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoK
KyAgICBEZWVwVmFsdWVEdW1wKFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVl
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1
bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgVmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVE
dW1wIGRlZXBEdW1wKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2
YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNkZWZpbmUg
QjNWYWx1ZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRz
KG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKwordGVtcGxhdGU+dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVl
OjphcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8
VD4oKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAh
IWFzPENvbnN0MzJWYWx1ZT4oKTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBW
YWx1ZTo6aGFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4o
KTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFz
PENvbnN0NjRWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSB8fCBoYXNJbnQ2NCgpOworfQorCitpbnQ2NF90
IFZhbHVlOjphc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgPyBhc0ludDMy
KCkgOiBhc0ludDY0KCk7Cit9CisKK2Jvb2wgVmFsdWU6OmlzSW50KGludDY0X3QgdmFsdWUpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGhhc0ludCgpICYmIGFzSW50KCkgPT0gdmFsdWU7Cit9CisKK2Jv
b2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3REb3Vi
bGVWYWx1ZT4oKTsKK30KKworZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGFzPENvbnN0RG91YmxlVmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgIGNhc2UgTm9uZToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAi
KSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50
KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50
KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBz
d2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmlu
dCgiQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3Rl
ciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAg
IG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6
OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5w
cmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzVmFsdWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2luY2x1ZGUgIlJlZy5o
IgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVz
ZW50YXRpb25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVw
cmVzZW50YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNs
aWVudCBmb3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5w
dXQuIFdoZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tl
ZCwgd2Ugc2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7Citw
dWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uCisg
ICAgICAgIEFueSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIsIHByb3ZpZGVkIHRoYXQK
KyAgICAgICAgLy8gaXQncyBub3QgYWxzbyBhIHJlZ2lzdGVyIHRoYXQgd2FzIGNsb2JiZXJlZC4K
KyAgICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAor
ICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIz
IHBpY2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJl
cHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0
J3Mgbm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAg
IFN0YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZv
cmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAg
ICAgICAgLy8gb2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFz
IGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50
LWZvbGRlZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBW
YWx1ZVJlcCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhw
bGljaXQgVmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAg
ICAgICwgbV92YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZh
bHVlUmVwIHJlZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7
CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21G
UCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICB9
CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9t
U1ApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBTdGFja0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21T
UDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IENvbnN0YW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAg
IHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudChkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gVmFsdWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisg
ICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVn
IHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsK
KyAgICAgICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGlu
dHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVl
KTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAg
ICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkp
OworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRl
OgorICAgIEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVy
LnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDY5IEBACisjIS91c3IvYmluL2VudiBydWJ5
CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhu
YW1lIgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAg
ICAiX3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9y
ZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hp
bGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJl
bikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAg
ICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8p
CisgICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUKKyAgICAgICAg
QG9wY29kZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNoaWxkcmVu
IDogW10KKyAgICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAgICAgb3Bjb2RlICE9IG5p
bAorICAgIGVuZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgY2hpbGRy
ZW4uZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQsIGluZGV4IHwKKyAgICAg
ICAgICAgIHlpZWxkIHZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5uYW1lLAorICAg
ICAgICAgICAgICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLmFu
b255bW91cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDogOmFub25PcGVyYW5kKSA6
IChjaGlsZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisgICAgICAgICAgICAgICAg
ICBpbmRleAorICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICB9
CisgICAgZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6
cHJvZHVjdGlvbnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rpb25zKQorICAg
ICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMKKyAg
ICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDps
aW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIp
CisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGlu
ZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1l
fToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9y
ZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwg
c3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJp
bmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlz
X2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBl
bHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAor
ICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVu
ZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tv
cmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAg
ICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAj
e3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7
dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBs
ZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkK
KyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5l
bXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAg
ICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAg
ICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAg
ICAgd2hlbiAvXEEoW2EtekEtWjAtOV8kXSspLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2Vu
Lm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4g
L1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAg
IHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4u
bmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIp
LnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAg
ICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQK
K2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFz
IHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVu
dHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcikpXFovCitlbmQKKworZGVmIGlzSWRl
bnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV8u
XSopXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAg
IGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRh
dGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2Vu
CisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAg
ICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisg
ICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAg
ICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29t
bWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBk
ZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5n
fSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisg
ICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwor
ICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRp
ZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisK
KyAgICBkZWYgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwcm9kdWN0aW9uKQorICAgICAg
ICBpZiBuYW1lID09IHByb2R1Y3Rpb24udmFyTmFtZQorICAgICAgICAgICAgcGFyc2VFcnJvcigi
Q2hpbGQgcHJvZHVjdGlvbiBoYXMgc2FtZSBuYW1lIGFzIHBhcmVudCBwcm9kdWN0aW9uIikKKyAg
ICAgICAgZW5kCisgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRy
eS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBs
aWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBwcm9kdWN0aW9ucyA8PCBw
cm9kdWN0aW9uCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgY29uc3VtZSgibWF0
Y2hlciIpCisKKyAgICAgICAgbWF0Y2hlck5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAg
ICAgIHByb2R1Y3Rpb25zID0gW10KKworICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFr
IGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgIyBXZSBtaWdodCB3YW50
IHRvIHN1cHBvcnQgImluY2x1ZGUiLiBJZiB3ZSBkaWQgdGhhdCwgaXQgd291bGQgZ28gaGVyZS4K
KyAgICAgICAgICAgIGFkZFVuaXF1ZShtYXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMsIHBhcnNlUHJv
ZHVjdGlvbikKKyAgICAgICAgfQorCisgICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJOYW1lLCBw
cm9kdWN0aW9ucykKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAg
b3JpZ2luID0gdG9rZW4ub3JpZ2luCisgICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgor
CisgICAgICAgIGlmIHRva2VuID09ICI9IgorICAgICAgICAgICAgY29uc3VtZSgiPSIpCisgICAg
ICAgICAgICBvcGNvZGUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgY29uc3VtZSgi
KCIpCisgICAgICAgIGVsc2lmIHRva2VuID09ICIoIgorICAgICAgICAgICAgY29uc3VtZSgiKCIp
CisgICAgICAgICAgICBvcGNvZGUgPSBuYW1lCisgICAgICAgICAgICBuYW1lID0gbmlsCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUs
IG5pbCwgbmlsKQorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rpb25zID0g
W10KKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKwor
ICAgICAgICAgICAgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1Y3Rpb24p
CisKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorICAgICAgICAgICAgY29uc3Vt
ZSgiLCIpCisgICAgICAgIH0KKworICAgICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIpIgorICAg
ICAgICBhZHZhbmNlCisKKyAgICAgICAgUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBvcGNv
ZGUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlswXQorCitw
YXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCittYXRjaGVy
ID0gcGFyc2VyLnBhcnNlCisKK2NsYXNzIFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIgOmluZGV4
TWFwLCA6cHJvZHVjdGlvbnMKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExpc3QsIHBy
b2R1Y3Rpb25zKQorICAgICAgICBAaW5kZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVjdGlvbnMg
PSBbXQorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAg
ICAgICAgICAgIEBpbmRleE1hcCA8PCBpbmRleAorICAgICAgICAgICAgQHByb2R1Y3Rpb25zIDw8
IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYgbWFwSW5k
ZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAgICAgICB8
IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcFtpbmRleF0KKyAgICAgICAgfQorICAgIGVu
ZAorZW5kCisKK0ZpbGUub3BlbigiQjMiICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInciKSB7Cisg
ICAgfCBvdXRwIHwKKworICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3Bh
dHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKworICAg
IG91dHAucHV0cyAiI2lmbmRlZiBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAucHV0cyAi
I2RlZmluZSBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIAorICAgIG91dHAucHV0cyAiI2luY2x1
ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIHJ1biN7bWF0Y2hlci5uYW1lfShWYWx1ZSogdmFsdWUs
IEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91dHAucHV0cyAieyIKKworICAgICMgTm90ZSB0aGF0
IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBiZWNhdXNlIGl0J3Mg
YSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91CisgICAgIyB3YW50IHRvIHNlZSB0aGUgY29kZSBu
aWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGluIGEgZ29vZCB0ZXh0IGVkaXRvciBhbmQgYXNrIGl0
IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlvdS4KKworICAgICMgVGhpcyBqdXN0IHByb3RlY3Rz
IHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5n
IGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUs
IHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlv
bnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAor
ICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNb
LTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAg
ICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisg
ICAgICAgIH0KKworICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRl
eExpc3QgfAorICAgICAgICAgICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5j
aGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0tPmNoaWxkcmVuLnNpemUoKSA+PSAje2xlbmd0
aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGlu
ZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhp
cyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4g
SXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0
IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0
aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3Ig
dGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBp
bmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFBy
b2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3Qs
IHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRo
IGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAg
ICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7
CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4
TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09
IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwg
aW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtp
bmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5v
dywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBs
aXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25l
LgorICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAor
ICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAg
ICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZv
ciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAg
ICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAg
ICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAg
ICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5v
cGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7Igor
ICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8
IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJj
YXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gu
bmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNo
TGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlp
ZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGlu
ZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwg
dmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8
IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4
TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAg
ICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBz
YW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNl
ZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVm
IG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQor
ICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgK
KyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAg
ICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSog
I3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisgICAg
ICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAg
ICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1
bW5JbmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3Vi
VmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAg
ICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQor
ICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0
aW9ucywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAor
ICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5k
CisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25z
KQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMp
IHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJh
bnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUg
c2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAg
ICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAg
ICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25z
LCAwKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlp
ZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgInZhbHVlIiwgbWF0
Y2hlci5wcm9kdWN0aW9ucykgeworICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgIGluZGV4
TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgcHJvZHVjdGlv
biA9IG1hdGNoZXIucHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICBvdXRwLnB1dHMgInsi
CisgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3Byb2R1Y3Rpb24udmFyTmFtZX0gPSB2
YWx1ZTsiCisgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBv
cGVyYW5kQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA9IFtdCisgICAg
ICAgICAgICBudW1TY29wZXMgPSAwCisgICAgICAgICAgICBwcm9kdWN0aW9uLmVhY2hWYXJpYWJs
ZSB7CisgICAgICAgICAgICAgICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5hbWUsIGNoaWxkVmFy
TmFtZSwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7
Y2hpbGRWYXJOYW1lfSA9ICN7cGFyZW50VmFyTmFtZX0tPmNoaWxkKCN7aW5kZXh9KTsiCisKKyAg
ICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAgICAg
IGlmIGNoaWxkTmFtZSA9fiAvXEFcJChbMC05XSspXFovCisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJp
ZiAoI3tjaGlsZFZhck5hbWV9LT5oYXNJbnQoKSkgeyIKKyAgICAgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPDwg
Y2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOmFub25JbnRlcm5h
bAorICAgICAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtp
bmQgPT0gOm9wZXJhbmQgb3Iga2luZCA9PSA6YW5vbk9wZXJhbmQKKyAgICAgICAgICAgICAgICB0
cnlBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQg
PT0gOm9wZXJhbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFk
YXB0b3IuYWNjZXB0Um9vdCh2YWx1ZSkiCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBh
ZGFwdG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSAr
ICIpIikKKyAgICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3IuYWNjZXB0T3BlcmFu
ZHMoIiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIG91
dHAucHV0cygiICAgICYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1
bWVudHMuam9pbigiLCAiKSArICIpKSIpCisgICAgICAgICAgICBvdXRwLnB1dHMgIiAgICByZXR1
cm47IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21h
dGNoZXIubmFtZX1faCIKK30K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263528</attachid>
            <date>2015-10-19 17:01:06 -0700</date>
            <delta_ts>2015-10-19 17:02:34 -0700</delta_ts>
            <desc>started working on Air</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>239560</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDcgKzExNCw3IEBAIHB1YmxpYzoKICAgICAvLyBUaGUgZm9sbG93aW5nIHR5cGVz
IGFyZSB1c2VkIGFzIG9wZXJhbmRzIHRvIE1hY3JvQXNzZW1ibGVyIG9wZXJhdGlvbnMsCiAgICAg
Ly8gZGVzY3JpYmluZyBpbW1lZGlhdGUgIGFuZCBtZW1vcnkgb3BlcmFuZHMgdG8gdGhlIGluc3Ry
dWN0aW9ucyB0byBiZSBwbGFudGVkLgogCi0gICAgZW51bSBTY2FsZSB7CisgICAgZW51bSBTY2Fs
ZSA6IGludDhfdCB7CiAgICAgICAgIFRpbWVzT25lLAogICAgICAgICBUaW1lc1R3bywKICAgICAg
ICAgVGltZXNGb3VyLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9EeW5h
bWljQWRkcmVzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9EeW5hbWljQWRkcmVzcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0R5bmFtaWNBZGRyZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJEeW5hbWljQWRkcmVzcy5oIgorCisjaW5j
bHVkZSAiR1BSSW5mby5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBEeW5hbWljQWRkcmVz
czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworI2lmIEVOQUJMRShBU1NFTUJMRVIp
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEFkZHJlc3M6CisgICAgY2FzZSBFeHRl
bmRlZEFkZHJlc3M6CisgICAgICAgIG91dC5wcmludChtX29mZnNldCwgIigiLCBtX2Jhc2UsICIp
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJhc2VJbmRleDoKKyAgICAgICAgb3V0LnBy
aW50KG1fb2Zmc2V0LCAiKCIsIG1fYmFzZSwgIiwgIiwgbV9pbmRleCwgIiwgIiwgMSA8PCBtX3Nj
YWxlLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYnNvbHV0ZUFkZHJlc3M6Cisg
ICAgICAgIG91dC5wcmludChtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2Vsc2UgLy8gRU5BQkxFKEFTU0VNQkxF
UikKKyAgICBvdXQucHJpbnQoIjAiKTsKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQorfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9EeW5hbWljQWRkcmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvRHluYW1pY0FkZHJlc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvRHluYW1pY0FkZHJlc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIER5bmFtaWNBZGRyZXNzX2gKKyNkZWZpbmUgRHluYW1pY0FkZHJlc3NfaAor
CisjaW5jbHVkZSAiQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIgorI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgRHluYW1pY0FkZHJlc3Mgewor
cHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIEFkZHJlc3MsCisgICAgICAgIEV4dGVu
ZGVkQWRkcmVzcywKKyAgICAgICAgQmFzZUluZGV4LAorICAgICAgICBBYnNvbHV0ZUFkZHJlc3MK
KyAgICB9OworCisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKworICAgIER5bmFtaWNBZGRyZXNzKCkK
KyAgICAgICAgOiBtX2tpbmQoQWJzb2x1dGVBZGRyZXNzKQorICAgICAgICAsIG1fb2Zmc2V0KDAp
CisgICAgICAgICwgbV9iYXNlKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIo
KSkKKyAgICAgICAgLCBtX2luZGV4KEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0
ZXIoKSkKKyAgICAgICAgLCBtX3NjYWxlKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlRpbWVzT25l
KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBEeW5hbWljQWRkcmVzcyhBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFkZHJlc3MpCisgICAgICAgIDogbV9raW5kKEFkZHJlc3Mp
CisgICAgICAgICwgbV9vZmZzZXQoYWRkcmVzcy5vZmZzZXQpCisgICAgICAgICwgbV9iYXNlKGFk
ZHJlc3MuYmFzZSkKKyAgICAgICAgLCBtX2luZGV4KEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmZp
cnN0UmVnaXN0ZXIoKSkKKyAgICAgICAgLCBtX3NjYWxlKEFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6
OlRpbWVzT25lKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBEeW5hbWljQWRkcmVzcyhB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpFeHRlbmRlZEFkZHJlc3MgYWRkcmVzcykKKyAgICAgICAg
OiBtX2tpbmQoRXh0ZW5kZWRBZGRyZXNzKQorICAgICAgICAsIG1fb2Zmc2V0KGFkZHJlc3Mub2Zm
c2V0KQorICAgICAgICAsIG1fYmFzZShhZGRyZXNzLmJhc2UpCisgICAgICAgICwgbV9pbmRleChB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpCisgICAgICAgICwgbV9zY2Fs
ZShBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpUaW1lc09uZSkKKyAgICB7CisgICAgfQorCisgICAg
ZXhwbGljaXQgRHluYW1pY0FkZHJlc3MoQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
IGFkZHJlc3MpCisgICAgICAgIDogbV9raW5kKEJhc2VJbmRleCkKKyAgICAgICAgLCBtX29mZnNl
dChhZGRyZXNzLm9mZnNldCkKKyAgICAgICAgLCBtX2Jhc2UoYWRkcmVzcy5iYXNlKQorICAgICAg
ICAsIG1faW5kZXgoYWRkcmVzcy5pbmRleCkKKyAgICAgICAgLCBtX3NjYWxlKGFkZHJlc3Muc2Nh
bGUpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IER5bmFtaWNBZGRyZXNzKEFic3RyYWN0
TWFjcm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgICAgICA6IG1fa2lu
ZChBYnNvbHV0ZUFkZHJlc3MpCisgICAgICAgICwgbV9vZmZzZXQoYml0d2lzZV9jYXN0PGludHB0
cl90PihhZGRyZXNzLm1fcHRyKSkKKyAgICAgICAgLCBtX2Jhc2UoQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlcjo6Zmlyc3RSZWdpc3RlcigpKQorICAgICAgICAsIG1faW5kZXgoQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKQorICAgICAgICAsIG1fc2NhbGUoQWJzdHJhY3RNYWNy
b0Fzc2VtYmxlcjo6VGltZXNPbmUpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBEeW5hbWljQWRkcmVzcyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9vZmZzZXQgPT0gb3Ro
ZXIubV9vZmZzZXQKKyAgICAgICAgICAgICYmIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAg
ICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleAorICAgICAgICAgICAgJiYgbV9zY2Fs
ZSA9PSBvdGhlci5tX3NjYWxlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBE
eW5hbWljQWRkcmVzcyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gRHluYW1pY0FkZHJlc3MoKTsKKyAgICB9
CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIEFic3Ry
YWN0TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChtX2tpbmQgPT0gQWRkcmVzcyk7CisgICAgICAgIHJldHVybiBBYnN0cmFjdE1h
Y3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZz
ZXQpKTsKKyAgICB9CisKKyAgICBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpFeHRlbmRlZEFkZHJl
c3MgYXNFeHRlbmRlZEFkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fa2lu
ZCA9PSBFeHRlbmRlZEFkZHJlc3MpOworICAgICAgICByZXR1cm4gQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlcjo6RXh0ZW5kZWRBZGRyZXNzKG1fYmFzZSwgbV9vZmZzZXQpOworICAgIH0KKworICAgIEFi
c3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQobV9raW5kID09IEJhc2VJbmRleCk7CisgICAgICAgIHJldHVybiBB
YnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgobV9iYXNlLCBtX2luZGV4LCBtX3NjYWxl
LCBtX29mZnNldCk7CisgICAgfQorCisgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6QWJzb2x1
dGVBZGRyZXNzIGFzQWJzb2x1dGVBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChtX2tpbmQgPT0gQWJzb2x1dGVBZGRyZXNzKTsKKyAgICAgICAgcmV0dXJuIEFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI6OkFic29sdXRlQWRkcmVzcyhiaXR3aXNlX2Nhc3Q8Y29uc3Qgdm9pZCo+KG1f
b2Zmc2V0KSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXQ7CisgICAg
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtX2Jhc2U7CisgICAgQWJzdHJhY3RN
YWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCBtX2luZGV4OworICAgIEFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlIG1fc2NhbGU7CisKKyNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIpCisKK3B1
YmxpYzoKKworICAgIER5bmFtaWNBZGRyZXNzKCkgeyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7
IHJldHVybiBBYnNvbHV0ZUFkZHJlc3M7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCisKK3B1YmxpYzoKKwor
ICAgIGJvb2wgaXNPbmVPZigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGJvb2wgaXNP
bmVPZihLaW5kIGtpbmQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoa2luZCgpID09IGtpbmQpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgcmV0dXJuIGlzT25lT2YoYXJndW1lbnRzLi4uKTsKKyAgICB9Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCisKKyNlbmRpZiAvLyBEeW5h
bWljQWRkcmVzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTIx
LDEwICsxMjEsMjMgQEAgcHVibGljOgogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6YnJh
bmNoUHRyOwogI2VuZGlmCiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpicmFuY2hTdWIz
MjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmJyYW5jaDg7CisgICAgdXNpbmcgTWFj
cm9Bc3NlbWJsZXJCYXNlOjpsb2FkMzI7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjps
b2FkODsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OmxvYWQ4U2lnbkV4dGVuZFRvMzI7
CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpsb2FkMTY7CisgICAgdXNpbmcgTWFjcm9B
c3NlbWJsZXJCYXNlOjpsb2FkMTZTaWduRXh0ZW5kVG8zMjsKKyAgICB1c2luZyBNYWNyb0Fzc2Vt
YmxlckJhc2U6OmxvYWREb3VibGU7CisgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpsb2Fk
RmxvYXQ7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpsc2hpZnQzMjsKKyAgICB1c2lu
ZyBNYWNyb0Fzc2VtYmxlckJhc2U6Om11bDMyOwogICAgIHVzaW5nIE1hY3JvQXNzZW1ibGVyQmFz
ZTo6b3IzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OnJzaGlmdDMyOwogICAgIHVz
aW5nIE1hY3JvQXNzZW1ibGVyQmFzZTo6c3RvcmUzMjsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
ckJhc2U6OnN0b3JlODsKKyAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OnN0b3JlMTY7Cisg
ICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNlOjpzdG9yZURvdWJsZTsKKyAgICB1c2luZyBNYWNy
b0Fzc2VtYmxlckJhc2U6OnN0b3JlRmxvYXQ7CiAgICAgdXNpbmcgTWFjcm9Bc3NlbWJsZXJCYXNl
OjpzdWIzMjsKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OnVyc2hpZnQzMjsKICAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlckJhc2U6OnhvcjMyOwpAQCAtMTU4NCw2ICsxNTk3LDcwMCBAQCBw
dWJsaWM6CiAgICAgICAgIHVyc2hpZnQzMihzcmMsIHRydXN0ZWRJbW0zMkZvclNoaWZ0KGFtb3Vu
dCksIGRlc3QpOwogICAgIH0KIAorICAgIGJvb2wgdHJ5QWRkMzIoUmVnaXN0ZXJJRCBzcmMsIER5
bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAg
ICBhZGQzMihzcmMsIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgdm9pZCBhZGQzMihSZWdpc3RlcklEIHNyYywgRHluYW1pY0FkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeUFkZDMyKHNyYywgYWRk
cmVzcykpOworICAgIH0KKworICAgIC8vIEl0J3Mgbm90IGNsZWFyIGlmIHRoZSBzZW1hbnRpY3Mg
aGVyZSBzaG91bGQgYmUgdG8gcmV0dXJuIHRydWUgZm9yIGFueSBhZGRyZXNzIGV4cHJlc3Npb24K
KyAgICAvLyBmb3Igd2hpY2ggd2Uga25vdyBob3cgdG8gZW1pdCBjb2RlLCBvciB0byBvbmx5IGVt
aXQgdHJ1ZSB3aGVuIHdlIGtub3cgaG93IHRvIGVtaXQgaXQKKyAgICAvLyBlZmZpY2llbnRseS4g
SSdtIGN1cnJlbnRseSBnb2luZyB3aXRoIHN1cHBvcnRpbmcgYWxsIG9mIHRoZSBleHByZXNzaW9u
cyBmb3Igd2hpY2ggd2Uga25vdworICAgIC8vIGhvdyB0byBlbWl0IGNvZGUgYXQgYWxsLCBhbmQg
SSdtIGxlYXZpbmcgaXQgdG8gY2xpZW50cyB0byBkZWFsIHdpdGggdGhlIGVmZmljaWVuY3kgcGFy
dC4KKyAgICAKKyAgICBib29sIHRyeUFkZDMyKFRydXN0ZWRJbW0zMiBpbW0sIER5bmFtaWNBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBhZGQzMihp
bW0sIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIGFk
ZDMyKGltbSwgYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIHZvaWQgYWRkMzIoVHJ1c3RlZEltbTMyIGltbSwgRHluYW1pY0Fk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeUFkZDMyKGlt
bSwgYWRkcmVzcykpOworICAgIH0KKworICAgIGJvb2wgdHJ5QWRkMzIoRHluYW1pY0FkZHJlc3Mg
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNz
LmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAg
ICAgICAgYWRkMzIoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWJzb2x1dGVBZGRyZXNzOgor
ICAgICAgICAgICAgYWRkMzIoYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLCBkZXN0KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
cnVuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgYWRkMzIoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodHJ5QWRkMzIoYWRkcmVzcywgZGVzdCkpOworICAgIH0KKworICAgIGJvb2wgdHJ5QW5kMzIo
UmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFk
ZHJlc3M6CisgICAgICAgICAgICBhbmQzMihzcmMsIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBhbmQzMihSZWdpc3RlcklEIHNy
YywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRyeUFuZDMyKHNyYywgYWRkcmVzcykpOworICAgIH0KKworICAgIGJvb2wgdHJ5QW5kMzIoVHJ1
c3RlZEltbTMyIGltbSwgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRk
cmVzczoKKyAgICAgICAgICAgIGFuZDMyKGltbSwgYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWJzb2x1
dGVBZGRyZXNzOgorICAgICAgICAgICAgYW5kMzIoaW1tLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRy
ZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBhbmQzMihU
cnVzdGVkSW1tMzIgaW1tLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQodHJ5QW5kMzIoaW1tLCBhZGRyZXNzKSk7CisgICAgfQorCisgICAgYm9v
bCB0cnlBbmQzMihEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1p
Y0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBhbmQzMihhZGRyZXNzLmFzQWRkcmVzcygp
LCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgYW5kMzIo
RHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQodHJ5QWRkMzIoYWRkcmVzcywgZGVzdCkpOworICAgIH0KKworICAgIGJv
b2wgdHJ5TXVsMzIoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFt
aWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgbXVsMzIoYWRkcmVzcy5hc0FkZHJlc3Mo
KSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIG11bDMy
KER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHRyeU11bDMyKGFkZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAgICBi
b29sIHRyeU5lZzMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0
Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJl
c3M6CisgICAgICAgICAgICBuZWczMihhZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgbmVnMzIoRHluYW1pY0FkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeU5lZzMyKGFkZHJlc3MpKTsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogTG90cyBvZiBtaXNzaW5nIGNhc2VzIGhlcmUhCisKKyAgICBi
b29sIHRyeUxvYWQzMihEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHlu
YW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICBsb2FkMzIoYWRkcmVzcy5hc0FkZHJl
c3MoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5h
bWljQWRkcmVzczo6QmFzZUluZGV4OgorICAgICAgICAgICAgbG9hZDMyKGFkZHJlc3MuYXNCYXNl
SW5kZXgoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBE
eW5hbWljQWRkcmVzczo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAgbG9hZDMyKGFkZHJl
c3MuYXNBYnNvbHV0ZUFkZHJlc3MoKS5tX3B0ciwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICB2b2lkIGxvYWQzMihEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlMb2FkMzIoYWRk
cmVzcywgZGVzdCkpOworICAgIH0KKworICAgIGJvb2wgdHJ5TG9hZDgoRHluYW1pY0FkZHJlc3Mg
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNz
LmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAg
ICAgICAgbG9hZDgoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4OgorICAgICAg
ICAgICAgbG9hZDgoYWRkcmVzcy5hc0Jhc2VJbmRleCgpLCBkZXN0KTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6
CisgICAgICAgICAgICBsb2FkOChhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCkubV9wdHIsIGRl
c3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBsb2FkOChEeW5h
bWljQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVCh0cnlMb2FkOChhZGRyZXNzLCBkZXN0KSk7CisgICAgfQorCisgICAgYm9vbCB0
cnlMb2FkOFNpZ25FeHRlbmRUbzMyKER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQ4U2lnbkV4dGVu
ZFRvMzIoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4OgorICAgICAgICAgICAg
bG9hZDhTaWduRXh0ZW5kVG8zMihhZGRyZXNzLmFzQmFzZUluZGV4KCksIGRlc3QpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRl
QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQ4U2lnbkV4dGVuZFRvMzIoYWRkcmVzcy5hc0Fic29s
dXRlQWRkcmVzcygpLm1fcHRyLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIHZvaWQgbG9hZDhTaWduRXh0ZW5kVG8zMihEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlMb2FkOFNp
Z25FeHRlbmRUbzMyKGFkZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAgICBib29sIHRyeUxvYWQx
NihEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6
OkFkZHJlc3M6CisgICAgICAgICAgICBsb2FkMTYoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6
QmFzZUluZGV4OgorICAgICAgICAgICAgbG9hZDE2KGFkZHJlc3MuYXNCYXNlSW5kZXgoKSwgZGVz
dCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVz
czo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAgbG9hZDE2KGFkZHJlc3MuYXNBYnNvbHV0
ZUFkZHJlc3MoKS5tX3B0ciwgZGVzdCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICB2b2lkIGxvYWQxNihEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlMb2FkMTYoYWRkcmVzcywgZGVzdCkp
OworICAgIH0KKworICAgIGJvb2wgdHJ5TG9hZDE2U2lnbkV4dGVuZFRvMzIoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRy
ZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAg
ICAgICAgICAgbG9hZDE2U2lnbkV4dGVuZFRvMzIoYWRkcmVzcy5hc0FkZHJlc3MoKSwgZGVzdCk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6
QmFzZUluZGV4OgorICAgICAgICAgICAgbG9hZDE2U2lnbkV4dGVuZFRvMzIoYWRkcmVzcy5hc0Jh
c2VJbmRleCgpLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBsb2FkMTZTaWdu
RXh0ZW5kVG8zMihhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCkubV9wdHIsIGRlc3QpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBsb2FkMTZTaWduRXh0ZW5kVG8z
MihEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVCh0cnlMb2FkMTZTaWduRXh0ZW5kVG8zMihhZGRyZXNzLCBkZXN0KSk7
CisgICAgfQorCisgICAgYm9vbCB0cnlTdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgewor
ICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgc3RvcmUz
MihzcmMsIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHN0b3Jl
MzIoc3JjLCBhZGRyZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAg
ICAgIHN0b3JlMzIoc3JjLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCkubV9wdHIpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQg
c3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodHJ5U3RvcmUzMihzcmMsIGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0b3Jl
MzIoVHJ1c3RlZEltbTMyIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVz
czo6QWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlMzIoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNz
OjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTMyKHNyYywgYWRkcmVzcy5hc0Jhc2VJbmRl
eCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRy
ZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTMyKHNyYywgYWRkcmVzcy5h
c0Fic29sdXRlQWRkcmVzcygpLm1fcHRyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIHZvaWQgc3RvcmUzMihUcnVzdGVkSW1tMzIgc3JjLCBEeW5hbWljQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5U3RvcmUzMihzcmMsIGFkZHJl
c3MpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0b3JlOChSZWdpc3RlcklEIHNyYywgRHluYW1p
Y0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkp
IHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHN0
b3JlOChzcmMsIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHN0
b3JlOChzcmMsIGFkZHJlc3MuYXNCYXNlSW5kZXgoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAg
ICAgICAgc3RvcmU4KHNyYywgYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgc3RvcmU4KFJlZ2lzdGVySUQg
c3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQodHJ5U3RvcmU4KHNyYywgYWRkcmVzcykpOworICAgIH0KKworICAgIGJvb2wgdHJ5U3RvcmU4
KFRydXN0ZWRJbW0zMiBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6
OkFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRyZXNzLmFzQWRkcmVzcygpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpC
YXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTgoc3JjLCBhZGRyZXNzLmFzQmFzZUluZGV4KCkp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6
OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlOChzcmMsIGFkZHJlc3MuYXNBYnNv
bHV0ZUFkZHJlc3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICB2b2lkIHN0b3JlOChUcnVzdGVkSW1tMzIgc3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5U3RvcmU4KHNyYywgYWRkcmVzcykpOwor
ICAgIH0KKworICAgIGJvb2wgdHJ5U3RvcmUxNihSZWdpc3RlcklEIHNyYywgRHluYW1pY0FkZHJl
c3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHN0b3JlMTYo
c3JjLCBhZGRyZXNzLmFzQWRkcmVzcygpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBzdG9yZTE2
KHNyYywgYWRkcmVzcy5hc0Jhc2VJbmRleCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBYnNvbHV0ZUFkZHJlc3M6CisgICAgICAgICAg
ICBzdG9yZTE2KHNyYywgYWRkcmVzcy5hc0Fic29sdXRlQWRkcmVzcygpLm1fcHRyKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgc3RvcmUxNihSZWdpc3RlcklEIHNy
YywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHRyeVN0b3JlMTYoc3JjLCBhZGRyZXNzKSk7CisgICAgfQorCisgICAgYm9vbCB0cnlTdG9yZTE2
KFRydXN0ZWRJbW0zMiBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKGFkZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6
OkFkZHJlc3M6CisgICAgICAgICAgICBzdG9yZTE2KHNyYywgYWRkcmVzcy5hc0FkZHJlc3MoKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6
QmFzZUluZGV4OgorICAgICAgICAgICAgc3RvcmUxNihzcmMsIGFkZHJlc3MuYXNCYXNlSW5kZXgo
KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVz
czo6QWJzb2x1dGVBZGRyZXNzOgorICAgICAgICAgICAgc3RvcmUxNihzcmMsIGFkZHJlc3MuYXNB
YnNvbHV0ZUFkZHJlc3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICB2b2lkIHN0b3JlMTYoVHJ1c3RlZEltbTMyIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHRyeVN0b3JlMTYoc3JjLCBhZGRyZXNz
KSk7CisgICAgfQorCisgICAgYm9vbCB0cnlMb2FkRG91YmxlKER5bmFtaWNBZGRyZXNzIGFkZHJl
c3MsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtp
bmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAg
ICAgbG9hZERvdWJsZShhZGRyZXNzLmFzQWRkcmVzcygpLCBkZXN0KTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAg
ICAgICAgICBsb2FkRG91YmxlKGFkZHJlc3MuYXNCYXNlSW5kZXgoKSwgZGVzdCk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIGxvYWREb3VibGUoRHluYW1pY0FkZHJl
c3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBSRUxFQVNFX0FT
U0VSVCh0cnlMb2FkRG91YmxlKGFkZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAgICBib29sIHRy
eUxvYWRGbG9hdChEeW5hbWljQWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoYWRkcmVzcy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5h
bWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIGxvYWRGbG9hdChhZGRyZXNzLmFzQWRk
cmVzcygpLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIER5
bmFtaWNBZGRyZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICBsb2FkRmxvYXQoYWRkcmVzcy5h
c0Jhc2VJbmRleCgpLCBkZXN0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IHZvaWQgbG9hZEZsb2F0KER5bmFtaWNBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZEZsb2F0KGFkZHJlc3MsIGRl
c3QpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMs
IER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFkZHJlc3Mu
a2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAg
ICAgICBzdG9yZURvdWJsZShzcmMsIGFkZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAg
ICAgICAgICAgIHN0b3JlRG91YmxlKHNyYywgYWRkcmVzcy5hc0Jhc2VJbmRleCgpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3Rl
cklEIHNyYywgRHluYW1pY0FkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHRyeVN0b3JlRG91YmxlKHNyYywgYWRkcmVzcykpOworICAgIH0KKworICAgIGJvb2wg
dHJ5U3RvcmVGbG9hdChGUFJlZ2lzdGVySUQgc3JjLCBEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNlIER5
bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgc3RvcmVGbG9hdChzcmMsIGFkZHJl
c3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2Ug
RHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHN0b3JlRmxvYXQoc3JjLCBh
ZGRyZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgdm9pZCBzdG9yZUZsb2F0KEZQUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9yZUZsb2F0KHNyYywgYWRk
cmVzcykpOworICAgIH0KKworICAgIEp1bXAgdHJ5QnJhbmNoOChSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAobGVmdC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVz
czo6QWRkcmVzczoKKyAgICAgICAgICAgIHJldHVybiBicmFuY2g4KGNvbmQsIGxlZnQuYXNBZGRy
ZXNzKCksIHJpZ2h0KTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4Ogor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDgoY29uZCwgbGVmdC5hc0Jhc2VJbmRleCgpLCByaWdo
dCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gSnVtcCgpOworICAgICAg
ICB9CisgICAgfQorICAgIHZvaWQgYnJhbmNoOChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5
bmFtaWNBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEp1
bXAgcmVzdWx0ID0gdHJ5QnJhbmNoOChjb25kLCBsZWZ0LCByaWdodCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBKdW1wIHRyeUJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgUmVnaXN0
ZXJJRCBsZWZ0LCBEeW5hbWljQWRkcmVzcyByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
cmlnaHQua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6Cisg
ICAgICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQuYXNBZGRyZXNzKCkp
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgVHJ1
c3RlZEltbTMyIGxlZnQsIER5bmFtaWNBZGRyZXNzIHJpZ2h0KQorICAgIHsKKyAgICAgICAgSnVt
cCByZXN1bHQgPSB0cnlCcmFuY2gzMihjb25kLCBsZWZ0LCByaWdodCk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBKdW1wIHRyeUJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgRHluYW1p
Y0FkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChsZWZ0LmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgor
ICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQuYXNBZGRyZXNzKCksIHJpZ2h0
KTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4OgorICAgICAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKGNvbmQsIGxlZnQuYXNCYXNlSW5kZXgoKSwgcmlnaHQpOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgRHluYW1pY0FkZHJl
c3MgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgSnVtcCByZXN1bHQg
PSB0cnlCcmFuY2gzMihjb25kLCBsZWZ0LCByaWdodCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJU
KHJlc3VsdC5pc1NldCgpKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgICAgCisg
ICAgSnVtcCB0cnlCcmFuY2gzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRy
ZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQu
a2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAg
ICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVmdC5hc0FkZHJlc3MoKSwgcmlnaHQpOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBKdW1wIGJyYW5jaDMyKFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgRHluYW1pY0Fk
ZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAgcmVzdWx0
ID0gdHJ5QnJhbmNoMzIoY29uZCwgbGVmdCwgcmlnaHQpOworICAgICAgICBSRUxFQVNFX0FTU0VS
VChyZXN1bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
SnVtcCB0cnlCcmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNz
IGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC5r
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAg
ICAgIHJldHVybiBicmFuY2gzMihjb25kLCBsZWZ0LmFzQWRkcmVzcygpLCByaWdodCk7CisgICAg
ICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBi
cmFuY2gzMihjb25kLCBsZWZ0LmFzQmFzZUluZGV4KCksIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBKdW1wKCk7CisgICAgICAgIH0KKyAgICB9CisgICAgSnVt
cCBicmFuY2hUZXN0MzIoUmVzdWx0Q29uZGl0aW9uIGNvbmQsIER5bmFtaWNBZGRyZXNzIGxlZnQs
IFRydXN0ZWRJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIEp1bXAgcmVzdWx0ID0gdHJ5QnJh
bmNoVGVzdDMyKGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVz
dWx0LmlzU2V0KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBK
dW1wIHRyeUJyYW5jaFRlc3Q4KFJlc3VsdENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBs
ZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQua2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAg
ICByZXR1cm4gYnJhbmNoOChjb25kLCBsZWZ0LmFzQWRkcmVzcygpLCByaWdodCk7CisgICAgICAg
IGNhc2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBicmFu
Y2g4KGNvbmQsIGxlZnQuYXNCYXNlSW5kZXgoKSwgcmlnaHQpOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIEp1bXAoKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBKdW1wIGJy
YW5jaFRlc3Q4KFJlc3VsdENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBUcnVz
dGVkSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRyeUJyYW5jaFRl
c3Q4KGNvbmQsIGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0Lmlz
U2V0KCkpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEp1bXAgdHJ5SnVt
cChEeW5hbWljQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNz
LmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAg
ICAgICAgcmV0dXJuIGp1bXAoYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgIGNhc2UgRHlu
YW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIHJldHVybiBqdW1wKGFk
ZHJlc3MuYXNBYnNvbHV0ZUFkZHJlc3MoKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgSnVtcCBqdW1wKER5bmFtaWNB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRyeUp1bXAoYWRk
cmVzcyk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyNpZiBDUFUoWDg2XzY0KSB8fCBDUFUoQVJNNjQpCisg
ICAgYm9vbCB0cnlMb2FkNjQoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBjYXNl
IER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgbG9hZDY0KGFkZHJlc3MuYXNB
ZGRyZXNzKCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2Ug
RHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIGxvYWQ2NChhZGRyZXNzLmFz
QmFzZUluZGV4KCksIGRlc3QpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIGxvYWQ2NChh
ZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCkubV9wdHIsIGRlc3QpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBsb2FkNjQoRHluYW1pY0FkZHJlc3MgYWRkcmVzcywg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJ5TG9hZDY0
KGFkZHJlc3MsIGRlc3QpKTsKKyAgICB9CisKKyAgICBib29sIHRyeVN0b3JlNjQoUmVnaXN0ZXJJ
RCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGFk
ZHJlc3Mua2luZCgpKSB7CisgICAgICAgIGNhc2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6Cisg
ICAgICAgICAgICBzdG9yZTY0KHNyYywgYWRkcmVzcy5hc0FkZHJlc3MoKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFzZUluZGV4Ogor
ICAgICAgICAgICAgc3RvcmU2NChzcmMsIGFkZHJlc3MuYXNCYXNlSW5kZXgoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QWJzb2x1dGVB
ZGRyZXNzOgorICAgICAgICAgICAgc3RvcmU2NChzcmMsIGFkZHJlc3MuYXNBYnNvbHV0ZUFkZHJl
c3MoKS5tX3B0cik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICB2b2lkIHN0
b3JlNjQoUmVnaXN0ZXJJRCBzcmMsIER5bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVCh0cnlTdG9yZTY0KHNyYywgYWRkcmVzcykpOworICAgIH0KKwor
ICAgIGJvb2wgdHJ5U3RvcmU2NChUcnVzdGVkSW1tNjQgc3JjLCBEeW5hbWljQWRkcmVzcyBhZGRy
ZXNzKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChhZGRyZXNzLmtpbmQoKSkgeworICAgICAgICBj
YXNlIER5bmFtaWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgc3RvcmU2NChzcmMsIGFk
ZHJlc3MuYXNBZGRyZXNzKCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkJhc2VJbmRleDoKKyAgICAgICAgICAgIHN0b3JlNjQoc3JjLCBh
ZGRyZXNzLmFzQmFzZUluZGV4KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGNhc2UgRHluYW1pY0FkZHJlc3M6OkFic29sdXRlQWRkcmVzczoKKyAgICAgICAgICAgIHN0b3Jl
NjQoc3JjLCBhZGRyZXNzLmFzQWJzb2x1dGVBZGRyZXNzKCkubV9wdHIpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisgICAgdm9pZCBzdG9yZTY0KFRydXN0ZWRJbW02NCBzcmMsIER5
bmFtaWNBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cnlT
dG9yZTY0KHNyYywgYWRkcmVzcykpOworICAgIH0KKworICAgIEp1bXAgdHJ5QnJhbmNoNjQoUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIER5bmFtaWNBZGRyZXNzIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyaWdodC5raW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBEeW5hbWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHJldHVybiBicmFuY2g2NChj
b25kLCBsZWZ0LCByaWdodC5hc0FkZHJlc3MoKSk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gSnVtcCgpOworICAgICAgICB9CisgICAgfQorICAgIEp1bXAgYnJhbmNoNjQo
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBUcnVzdGVkSW1tNjQgbGVmdCwgRHluYW1pY0FkZHJl
c3MgcmlnaHQpCisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRyeUJyYW5jaDY0KGNvbmQs
IGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmlzU2V0KCkpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIEp1bXAgdHJ5QnJhbmNoNjQoUmVs
YXRpb25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tNjQg
cmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQua2luZCgpKSB7CisgICAgICAgIGNh
c2UgRHluYW1pY0FkZHJlc3M6OkFkZHJlc3M6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoNjQo
Y29uZCwgbGVmdC5hc0FkZHJlc3MoKSwgcmlnaHQpOworICAgICAgICBjYXNlIER5bmFtaWNBZGRy
ZXNzOjpCYXNlSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gYnJhbmNoNjQoY29uZCwgbGVmdC5h
c0Jhc2VJbmRleCgpLCByaWdodCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gSnVtcCgpOworICAgICAgICB9CisgICAgfQorICAgIEp1bXAgYnJhbmNoNjQoUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBUcnVzdGVkSW1tNjQgcmlnaHQp
CisgICAgeworICAgICAgICBKdW1wIHJlc3VsdCA9IHRyeUJyYW5jaDY0KGNvbmQsIGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVzdWx0LmlzU2V0KCkpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICBKdW1wIHRyeUJyYW5jaDY0KFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBEeW5h
bWljQWRkcmVzczo6QWRkcmVzczoKKyAgICAgICAgICAgIHJldHVybiBicmFuY2g2NChjb25kLCBs
ZWZ0LmFzQWRkcmVzcygpLCByaWdodCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gSnVtcCgpOworICAgICAgICB9CisgICAgfQorICAgIEp1bXAgYnJhbmNoNjQoUmVsYXRp
b25hbENvbmRpdGlvbiBjb25kLCBEeW5hbWljQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgSnVtcCByZXN1bHQgPSB0cnlCcmFuY2g2NChjb25kLCBsZWZ0LCBy
aWdodCk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlc3VsdC5pc1NldCgpKTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBKdW1wIHRyeUJyYW5jaFRlc3Q2NChSZXN1bHRD
b25kaXRpb24gY29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTY0IHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LmtpbmQoKSkgeworICAgICAgICBjYXNlIER5bmFt
aWNBZGRyZXNzOjpBZGRyZXNzOgorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxl
ZnQuYXNBZGRyZXNzKCksIHJpZ2h0KTsKKyAgICAgICAgY2FzZSBEeW5hbWljQWRkcmVzczo6QmFz
ZUluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGJyYW5jaDY0KGNvbmQsIGxlZnQuYXNCYXNlSW5k
ZXgoKSwgcmlnaHQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIEp1bXAo
KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBKdW1wIGJyYW5jaFRlc3Q2NChSZXN1bHRDb25kaXRp
b24gY29uZCwgRHluYW1pY0FkZHJlc3MgbGVmdCwgVHJ1c3RlZEltbTY0IHJpZ2h0KQorICAgIHsK
KyAgICAgICAgSnVtcCByZXN1bHQgPSB0cnlCcmFuY2hUZXN0NjQoY29uZCwgbGVmdCwgcmlnaHQp
OworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXN1bHQuaXNTZXQoKSk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorI2VuZGlmIC8vIENQVShYODZfNjQpIHx8IENQVShBUk02NCkKKwog
I2lmIEVOQUJMRShNQVNNX1BST0JFKQogICAgIC8vIExldCdzIHlvdSBwcmludCBmcm9tIHlvdXIg
SklUIGdlbmVyYXRlZCBjb2RlLgogICAgIC8vIFNlZSBjb21tZW50cyBpbiBNYWNyb0Fzc2VtYmxl
clByaW50ZXIuaCBmb3IgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSB0aGlzLgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5w
YXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisjIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIEFkZHJlc3NNYXRjaGVyCisKKyMgTm90ZSB0
aGF0IHRoaXMgcmVsaWVzIG9uIEIzIGRvaW5nIGFnZ3Jlc3NpdmUgcmVhc3NvY2lhdGlvbiBhbmQg
Y2Fub25jYWxpemF0aW9uIG9mIGludGVnZXIgYWRkcy4KKyMgV2UnbGwgbmV2ZXIgc2VlIEFkZChB
ZGQoeCwgY29uc3QxKSwgY29uc3QyKSBiZWNhdXNlIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVu
IHJlYXNzb2NpYXRlZCBpbnRvCisjIEFkZCh4LCBjb25zdDEgKyBjb25zdDIpLiBBbHNvLCB3ZSB3
aWxsIG5ldmVyIHNlZSBBZGQoY29uc3QsIHgpLCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgY2Fub25p
Y2FsaXplZAorIyBpdCB0byBBZGQoeCwgY29uc3QpLiBUaGF0IHNhaWQsIGluIHRoaXMgY29kZSB3
ZSBuZXZlciBtYWtlIGFzc2VydGlvbnMgYWJvdXQgdGhlc2Ugb3B0aW1pemF0aW9ucworIyBoYXZp
bmcgYmVlbiBwZXJmb3JtZWQuIEFsc28sIHNpbmNlIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9u
cyBpbiBCMyBoYXZlIGEgYnVpbHQtaW4gb2Zmc2V0LCB3ZQorIyBkb24ndCBuZWVkIHRvIG1hdGNo
IEFkZCh4LCBjb25zdCkuIFRoYXQgd291bGQgaGF2ZSBiZWVuIGZvbGRlZCBpbnRvIHRoZSBMb2Fk
L1N0b3JlIGluc3RydWN0aW9ucworIyBhbHJlYWR5LiBTbywgdGhlIG9ubHkgZmFuY3kgbWF0aGlu
ZyB0aGlzIGNhbiBkbyBpcyBqdXN0IEJhc2VJbmRleCBmb3Jtcy4KKworQWRkU2hpZnQxID0gQWRk
KFNobChpbmRleCwgJGxvZ1NjYWxlKSwgYmFzZSkKK0FkZFNoaWZ0MiA9IEFkZChiYXNlLCBTaGwo
aW5kZXgsICRsb2dTY2FsZSkpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworJENvbnN0CisK
K0RpcmVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRS
ZWdWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNB
cmd1bWVudFJlZ1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKCkK
K3sKK30KKwordm9pZCBBcmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRS
ZWdWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJn
dW1lbnRSZWdWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3VtZW50
UmVnVmFsdWVfaAorI2RlZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQXJndW1lbnRSZWdWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0g
QXJndW1lbnRSZWc7IH0KKyAgICAKKyAgICB+QXJndW1lbnRSZWdWYWx1ZSgpOworCisgICAgUmVn
IGFyZ3VtZW50UmVnKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQXJndW1lbnRSZWdWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRlcigpIDogRG91YmxlLCBvcmlnaW4p
CisgICAgICAgICwgbV9yZWcocmVnKQorICAgIHsKKyAgICB9CisKKyAgICBSZWcgbV9yZWc7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQXJndW1lbnRSZWdW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitCYXNp
Y0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4KQorICAgIDogbV9pbmRleChpbmRleCkK
K3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKQoreworfQorCit2b2lkIEJhc2ljQmxv
Y2s6OmFwcGVuZChWYWx1ZSogdmFsdWUpCit7CisgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsK
K30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6
OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIs
ICp0aGlzLCAiOlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykKKyAgICAgICAg
b3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Js
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2sKKyNkZWZp
bmUgQjNCYXNpY0Jsb2NrCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0
Y2hlcyBDb250cm9sVmFsdWUncyB0eXBlZGVmLgorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1
bXBQcmVmaXggPSAiIyI7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisgICAgdW5zaWduZWQgaW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBBZGphY2VuY3lMaXN0OjppdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBBZGphY2VuY3lM
aXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIEFkamFj
ZW5jeUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
YmVnaW4oKTsgfQorICAgIEFkamFjZW5jeUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1
cm4gbV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVy
biBtX3ZhbHVlczsgfQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlw
ZSogYXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBu
dW1TdWNjZXNzb3JzKCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVk
IGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4
KTsKKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAg
ICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5z
aWduZWQgaW5kZXgpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92
YWx1ZXM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERl
ZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJs
b2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVl
cER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4i
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0Rl
ZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1
cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9j
a0lubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250
cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5
cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pOworICAg
IGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2lj
QmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENv
bnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBCYXNpY0Js
b2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3Qo
KS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitCYXNpY0Jsb2Nr
KiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBs
YXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworY29uc3Qg
QmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2Nr
SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitD
aGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1l
dGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0g
Iiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBj
YXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNr
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOwor
CisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRh
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVj
a1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NF
UlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2Rl
ID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwp
OworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
cmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBw
cmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0K
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVl
X2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hl
ci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
YXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNo
ZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFuZChMb2FkKGFkZHJl
c3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChhZGRyZXNzKSkK
K1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8xID0gRXF1YWwo
QW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0gRXF1YWwoQW5k
KGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5kKGxlZnQsIHJp
Z2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCByaWdodCkKK0xv
YWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1YWwodmFsdWUs
ICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVl
KCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFsdWVfaAorI2Rl
ZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFs
dWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyBy
ZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7Cisg
ICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFs
dWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29u
c3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBD
b25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7IH0KKyAgICAK
KyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0LCBJbnQ2NCwg
b3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5D
b25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0
YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFs
dWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERv
dWJsZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4g
b3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsK
KyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0RG91
YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAg
ICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1
ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdERv
dWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9s
VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
dHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250
cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQ
cmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRy
b2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7
CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAg
ICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUg
YmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ug
d2FudAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byBy
ZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5
cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAgfkNvbnRy
b2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAgIEJhc2ljQmxv
Y2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsg
fQorCisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRyb2xWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5
cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTdWJjbGFz
c2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRo
aXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQs
IG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CisgICAgfQor
CisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQg
aW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCisgICAgewor
ICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAgLy8gVXNlIHRo
aXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUo
aW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29k
ZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0K
KworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAg
ICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBy
ZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBubykKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3Jz
LmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKwor
I2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZv
ciB0aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBC
YXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9u
J3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2
ZXJ5IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKwor
Ly8gSWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNp
Y0Jsb2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNz
IEluZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAg
IGJvb2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFs
dWUtPmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xs
ZWN0aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24o
Y29sbGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25z
dCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6
Oml0ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rp
b24pCisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBl
KiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6
aXRlcmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQor
ICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rp
b24sIG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVj
dGlvblR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0Owor
ICAgIH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhT
ZXQudmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86
CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+
IHZhbHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAg
fQorCisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGlj
ZXMoKS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVm
aXgsIGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hl
ci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisj
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5nTWF0
Y2hlcgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRp
bmcgYXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50
cyB3aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlz
IG1hdGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCisK
K0xvYWQgPSBMb2FkKGFkZHJlc3MpCisKK0FkZExvYWQgPSBBZGQoTG9hZChhZGRyZXNzKSwgdmFs
dWUpCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK1N0b3JlQWRkTG9hZCA9IFN0b3JlKEFkZChM
b2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZUFuZExvYWQgPSBTdG9yZShBbmQo
TG9hZChhZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRk
cmVzcykKKworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQorewor
fQorCit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29m
ZnNldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAorCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
TWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBM
b2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0Ogor
ICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0
b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAg
ICBpbnRwdHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBm
b3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRz
IHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0
eXBlKS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAg
IGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlw
ZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAg
ICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAg
ICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBE
b3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6
CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6
CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09
IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSBy
ZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50cHRyX3Qgb2Zm
c2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZs
b2F0ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAg
ICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAg
ICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAg
ICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAg
TWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnRwdHJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdp
biwgdmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM09wY29kZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJpbnQoIklkZW50
aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gRklYTUUKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bj
b2RlIDogaW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVs
IGZvciB3aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisg
ICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgor
ICAgIElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNs
YXNzZXMuIENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNh
bgorICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFy
Z2UgY29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAg
Q29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNs
b3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFt
IHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4g
RWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ug
b2YKKyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisg
ICAgU3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRo
aXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAg
Ly8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRo
ZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xv
YmJlciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5
IHNhdmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBp
dCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNs
YXNzLiBUaGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BS
cykgb3IgRG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUg
ZnJhbWUgcG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cg
YnV0IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGgg
YSBjYXZlYXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBv
cmFyaWx5IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGlu
dHJpbnNpYyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBu
b3QKKyAgICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBv
aW50ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUg
dHlwZS4KKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJ
bnRlZ2VyIG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVz
IGxpa2UgSlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAg
IEJpdFhvciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMg
YW5kIHN1Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisg
ICAgU0V4dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNF
eHQzMiwKKyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAg
IEZSb3VuZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9E
LAorICAgIC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisK
KyAgICAvLyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5
cGUuIFJldHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0
IEVxdWFsKHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAor
ICAgIEdyZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAg
ICAvLyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92
ZSwKKyAgICBCZWxvdywKKyAgICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8v
IE1lbW9yeSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRl
ZCB0eXBlLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMy
OgorICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAor
ICAgIC8vIFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMg
cmV0dXJuIHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8g
TWVtb3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4g
VGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6
CisgICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2
YWx1ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9y
ZSBmb3IgSW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhp
cyBpcyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVt
IEMgY2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVu
dHMgYXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAv
LyBUaGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRo
aXMgaXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVt
aXRzIGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdl
dHMgdG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBh
bG9uZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3Qg
YmUgcGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAg
YXJndW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0Cisg
ICAgLy8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhl
IHRvcCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgor
ICAgIFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1
ZSBjbGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24K
KyAgICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFm
dGVyIHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20g
dGhlIGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBz
dXBwbHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0
byBqdW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBz
aW5jZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24g
b2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4u
IEZvcgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8v
CisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisg
ICAgLy8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8K
KyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAv
LworICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQg
YnkgdGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2Fs
bGJhY2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFy
ZSBkaWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3Qg
Q2hlY2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9z
c2libHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVj
a0FkZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tT
dWIsCisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0
aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMg
YQorICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2Vz
IGFuIEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1
bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1
ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ss
CisKKyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBz
aWxvbiwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisg
ICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAg
CisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4g
QnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZh
bHVlIGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNj
ZXNzb3IuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhl
ciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNo
LAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRo
ZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBl
LiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhp
cyBpcyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVy
ZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZp
bmUgQjNPcmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBj
aG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxs
IGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2gg
aW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3Jt
YXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8g
d3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBs
aWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9y
aWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkK
KyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2
YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgi
CisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQor
Cit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgb3V0LnByaW50KGNvbW1hLCAic3RhY2tt
YXAgPSAiLCBzdGFja21hcCk7CisgICAgaWYgKHNoYWRvdykKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAic2hhZG93ID0gIiwgc2hhZG93KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gK
KyNkZWZpbmUgQjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hw
b2ludDsgfQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2tt
YXA7CisgICAgdW5zaWduZWQgc2hhZG93IHsgMCB9OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5k
ZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRy
ZW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBhdGNocG9pbnQsIHR5cGUsIG9yaWdpbiwgY2hp
bGRyZW4pCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gQjNQYXRjaHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxv
Y2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2Nl
ZHVyZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soKQoreworICAg
IHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayA9IHN0ZDo6bWFrZV91bmlxdWU8QmFz
aWNCbG9jaz4obV9ibG9ja3Muc2l6ZSgpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9j
ay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91
dC5wcmludChkZWVwRHVtcChibG9jaykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKwor
I2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1
ZTsKKworY2xhc3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1
cmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgUHJvY2Vk
dXJlKCk7CisgICAgflByb2NlZHVyZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soKTsK
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJh
dG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAg
ICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1
cmUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBm
aW5kTmV4dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4
dCh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwg
bV9wcm9jZWR1cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAg
ICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKwor
ICAgICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCBudW1CbG9ja3MoKSk7IH0KKworICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29sbGVjdGlvbihQcm9jZWR1cmUmIHByb2NlZHVy
ZSkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRy
KQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAg
ICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgUHJvY2VkdXJlKiBtX3By
b2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAg
ICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVy
ZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
bV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgp
OyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9w
cm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICB9OworCisgICAg
VmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlz
KTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+
IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZUlubGlu
ZXNfaAorI2RlZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1ZW50cy4uLiBhcmd1bWVudHMp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZSht
X3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0g
dmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNQcm9jZWR1cmVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZh
bHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tT
bG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2ln
bmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIFlvdSBjYW5ub3QgcmVseSBvbiBpdCBoYXZp
bmcgYSBtZWFuaW5nZnVsCisgICAgLy8gdmFsdWUgd2hpbGUgdGhlIGNvbXBpbGVyIGlzIHJ1bm5p
bmcuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRG
cm9tRlA7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwor
CisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2ln
bmVkIGJ5dGVTaXplKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXIo
KSwgb3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9v
ZmZzZXRGcm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsK
KyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgIntvcGFxdWUgPSAiLCBSYXdQb2ludGVy
KG1fb3BhcXVlKSwgIiwgcmVwcyA9ICIsIGxpc3REdW1wKG1fcmVwcyksCisgICAgICAgICIsIGdl
bmVyYXRvciA9ICIsIFJhd1BvaW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBjbG9iYmVyZWQg
PSAiLCBtX2Nsb2JiZXJlZCwKKyAgICAgICAgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJl
Z2lzdGVycywgIn0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNpbmNsdWRlICJCM1Zh
bHVlUmVwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJT
ZXQuaCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgQjNWYWx1ZTsKKworY2xhc3MgU3RhY2ttYXAgeworcHVibGlj
OgorICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUg
VmFsdWUgY29udGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZhbHVlKiB2YWx1ZTsKKwor
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAgU3RhY2ttYXAqIHN0YWNr
bWFwOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGp1bXAgdG8gdGhlIHNsb3cgcGF0aCwgaWYg
dGhpcyBpcyBhIHN0YWNrbWFwIGZvciBhIENoZWNrIHZhbHVlLgorICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAganVtcDsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JG
dW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlw
ZWRlZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAg
U3RhY2ttYXAoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0
byBpZGVudGlmeSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2tt
YXAtdXNpbmcgVmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGlj
YXRlIG1heSBlbmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlz
CisgICAgLy8gYWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVm
ZXIgYmFjayB0byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdl
IHdlcmUgdXNpbmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lk
KiBwYXJhbWV0ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9
CisgICAgdm9pZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8v
IENvbnZlbmllbmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRl
cnMuCisgICAgdm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAg
ICBzZXRPcGFxdWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXpl
X3Qgb3BhcXVlSW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFx
dWUoKSk7IH0KKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhh
dCB1c2VzIHRoaXMgU3RhY2ttYXAuIE5vdGUgdGhhdCBpbmRleCB6ZXJvIHJlZmVycyB0byB0aGUK
KyAgICAvLyBmaXJzdCBhcmd1bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1l
bnQgaXMgbm90IGNvbnN0cmFpbmFibGUuIEZvciBleGFtcGxlLCBpbiBhCisgICAgLy8gQ2hlY2tB
ZGQgdmFsdWUsIGl0IHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5k
IDEuIEluIGEgQ2hlY2sgdmFsdWUsIGl0IHdvdWxkCisgICAgLy8gYmUgYW4gZXJyb3IgdG8gY29u
c3RyYWluIGluZGV4IDAuIEJ1dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxs
ZWQsIHlvdSBjYW4gZGVwZW5kCisgICAgLy8gb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMg
YmVpbmcgZmlsbGVkIGluLgorICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25z
dCBWYWx1ZVJlcCYgcmVwKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5z
aXplKCkpCisgICAgICAgICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3Jl
cHNbaW5kZXhdID0gcmVwOworICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3Rl
clNldCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9
CisKKyAgICBjb25zdCBSZWdpc3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9j
bG9iYmVyZWQ7IH0KKworICAgIHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdl
bmVyYXRvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3Io
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3Jl
YXRlU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAg
Ly8gVGhlc2Ugd2lsbCByZXR1cm4gaW50ZXJlc3RpbmcgdGhpbmdzIGluc2lkZSB0aGUgZ2VuZXJh
dG9yIGNhbGxiYWNrLCBvciBhZnRlciBjb21waWxhdGlvbi4KKyAgICBjb25zdCBWZWN0b3I8VmFs
dWVSZXA+JiByZXBzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBzOyB9CisgICAgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICB2b2lkKiBtX29wYXF1ZSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVw
czsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBt
X2Nsb2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgor
CisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCit2b2lkIFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV9jYXNlVmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKG1fdGFyZ2V0KSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3
aXRjaENhc2VfaAorI2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKworY2xhc3MgU3dpdGNoQ2Fz
ZSB7CitwdWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisgICAgeworICAgIH0KKworICAgIFN3aXRj
aENhc2UoaW50NjRfdCBjYXNlVmFsdWUsIEJhc2ljQmxvY2sqIHRhcmdldCkKKyAgICAgICAgOiBt
X2Nhc2VWYWx1ZShjYXNlVmFsdWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFt
X3RhcmdldDsgfQorCisgICAgaW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nh
c2VWYWx1ZTsgfQorICAgIEJhc2ljQmxvY2sqIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFy
Z2V0OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgaW50NjRfdCBjYXNlVmFsdWU7CisgICAgQmFzaWNCbG9jayogdGFyZ2V0OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N3aXRjaENhc2VfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2xkdWUgIkIzU3dp
dGNoVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N3aXRjaFZh
bHVlOjp+U3dpdGNoVmFsdWUoKQoreworfQorCitTd2l0Y2hDYXNlIFN3aXRjaFZhbHVlOjpyZW1v
dmVDYXNlKHVuc2lnbmVkIGluZGV4KQoreworICAgIFN3aXRjaENhc2UgcmVzdWx0ID0gbV9zdWNj
ZXNzb3JzW2luZGV4XTsKKyAgICBtX3N1Y2Nlc3NvcnNbaW5kZXhdID0gbV9zdWNjZXNzb3JzLmxh
c3QoKTsKKyAgICBtX3N1Y2Nlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dp
dGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkp
OworICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNl
LnRhcmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsK
K30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICAvLyBUaGlzIGRlc3RydWN0aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1
bXBNZXRhKCkuCisgICAgb3V0LnByaW50KGxpc3REdW1wKCp0aGlzKSk7Cit9CisKK1N3aXRjaFZh
bHVlOjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9j
ayogZmFsbFRocm91Z2gpCisgICAgOiBDb250cm9sVmFsdWUoaW5kZXgsIFN3aXRjaCwgb3JpZ2lu
KQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoZmFsbFRocm91Z2gpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVf
aAorI2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgi
CisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBTd2l0Y2hWYWx1ZSA6IHB1YmxpYyBDb250cm9sVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IFN3aXRjaDsgfQorCisgICAgflN3aXRjaFZhbHVlKCk7CisKKyAgICAvLyBudW1DYXNlVmFs
dWVzKCkgKyAxID09IG51bVN1Y2Nlc3NvcnMoKS4KKyAgICB1bnNpZ25lZCBudW1DYXNlVmFsdWVz
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CisKKyAgICAvLyBUaGUgc3VjY2Vz
c29yIGZvciB0aGlzIGNhc2UgdmFsdWUgaXMgYXQgdGhlIHNhbWUgaW5kZXguCisgICAgaW50NjRf
dCBjYXNlVmFsdWUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2ldOyB9
CisgICAgCisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKCkgY29uc3Qg
eyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorICAgIEJhc2ljQmxvY2sqJiBmYWxsVGhy
b3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNlIGF0
KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENhc2Uo
Y2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7CisgICAgfQorICAgIFN3aXRjaENh
c2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBhdChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoK
KyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3aXRjaChudWxscHRyKQorICAg
ICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0
ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAg
ICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRl
eCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcioo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTd2l0Y2hWYWx1ZSogbV9z
d2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAg
IC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJZiB5
b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlvdSBj
YW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRoaXMg
c2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIgY2Fz
ZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAgIFN3
aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVuZENh
c2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCk7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJ
bnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnBy
aW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAg
IG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVf
aAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lkLAor
ICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJvb2wgaXNJ
bnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUgPT0gSW50
NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0
eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlcigpIGNvbnN0Cit7CisgICAg
aWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVy
biBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNU
eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworVXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFs
dWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJe
IiwgbV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2lsb25W
YWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09
IFVwc2lsb247IH0KKworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBj
b25zdCB7IHJldHVybiBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBQcm9jZWR1cmU7CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAg
eworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQor
CisgICAgVmFsdWUqIG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhbHVl
Ojp+VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVl
KiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBs
YWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAor
ICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRo
ZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZp
b3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZh
bHVlIGluIHBsYWNlLgorCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5cGUg
dHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNC
bG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlz
LT5yZXBsYWNlbWVudDsKKyAgICB2b2lkKiBtaXNjID0gdGhpcy0+bWlzYzsKKworICAgIFJFTEVB
U0VfQVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZh
bHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIChpbmRleCwgSWRlbnRpZnksIHR5cGUsIG9yaWdpbiwg
dmFsdWUpOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNlbWVu
dCA9IHJlcGxhY2VtZW50OworICAgIHRoaXMtPm1pc2MgPSBtaXNjOworfQorCit2b2lkIFZhbHVl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVm
aXgsIG1faW5kZXgpOworfQorCit2b2lkIFZhbHVlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICIgIiwgKnRoaXMsICIgPSAiLCBtX29w
Y29kZSk7CisKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7Cisg
ICAgZm9yIChWYWx1ZSogY2hpbGQgOiBjaGlsZHJlbigpKQorICAgICAgICBvdXQucHJpbnQoY29t
bWEsIHBvaW50ZXJEdW1wKGNoaWxkKSk7CisKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJpbmdP
dXQ7CisgICAgZHVtcE1ldGEoc3RyaW5nT3V0KTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IHN0cmlu
Z091dC50b0NTdHJpbmcoKTsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIHN0cmluZyk7CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKworYm9vbCBW
YWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50MzJf
dCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBNZXRh
KFByaW50U3RyZWFtJikgY29uc3QKK3sKK30KKworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUg
b3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAg
IGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBN
dWw6CisgICAgY2FzZSBEaXY6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAg
ICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNh
c2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVja0Fk
ZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVy
biBmaXJzdENoaWxkLT50eXBlKCk7CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJl
dHVybiBwb2ludGVyKCk7CisgICAgY2FzZSBTRXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBj
YXNlIERUb0kzMjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6CisgICAgY2Fz
ZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgTGVzc0VxdWFsOgor
ICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgIGNhc2UgQWJvdmU6CisgICAgY2FzZSBCZWxvdzoK
KyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICByZXR1
cm4gSW50MzI7CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIHJl
dHVybiBJbnQ2NDsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIHJl
dHVybiBEb3VibGU7CisgICAgY2FzZSBOb3A6CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1Zh
bHVlX2gKKworI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiQCI7CisKKyAgICBzdGF0aWMgYm9v
bCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUo
KTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAg
IAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciBy
ZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMg
Y29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyBy
ZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigp
IGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVu
dGl0eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdpdGhOb3AoKTsKKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBjYXN0IFZhbHVlcy4gRm9yIGV4YW1wbGUs
IGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92aWRlZCB0aGF0IHdlIGhhdmUgYQorICAg
IC8vIEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86CisgICAgLy8KKyAgICAvLyBpZiAoQXJn
dW1lbnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4o
KSkgeworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBUaGlzIHdp
bGwgcmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAhPSBBcmd1bWVudFJlZy4gVGhpcyB3b3Jr
cyBiZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisgICAgLy8gaWYgVDo6YWNjZXB0cyhvcGNv
ZGUoKSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFz
KCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBhcygpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKKyAgICBpbnQzMl90IGFzSW50MzIoKSBj
b25zdDsKKyAgICAKKyAgICBib29sIGhhc0ludDY0KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0lu
dDY0KCkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJ
bnQoKSBjb25zdDsKKyAgICBib29sIGlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0OworCisgICAg
Ym9vbCBoYXNEb3VibGUoKSBjb25zdDsKKyAgICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKKwor
ICAgIFN0YWNrbWFwKiBzdGFja21hcCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQ
cm9jZWR1cmUuCisgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUg
ZXhwbGljaXRseToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhw
bGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisg
ICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAg
ICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAs
IG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAg
ICAvLyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVu
IHRoZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVuOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAg
IDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwg
bV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9Cisg
ICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWly
IHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9w
Y29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNv
ZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkp
CisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0
Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMg
Zm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNv
ZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAg
IGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2Rl
KQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwg
bV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
dmFyYXJncy4KKyAgICBleHBpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVu
KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQor
ICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAg
ICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgVHlw
ZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91
cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQg
bV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisg
ICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVi
bGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXpp
bHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFs
eXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIHZvaWQqIG1pc2MgeyBudWxscHRyIH07Cit9
OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKFZh
bHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICht
X3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgVmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKwor
I2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisj
aW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUu
aCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KwordGVtcGxhdGU+dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9vbCBW
YWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1ZT4o
KTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFz
PENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBj
b25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRfdCBW
YWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+
dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aGFzSW50MzIoKSB8fCBoYXNJbnQ2NCgpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9
CisKK2Jvb2wgVmFsdWU6OmlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc0ludCgpICYmIGFzSW50KCkgPT0gdmFsdWU7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKwor
ZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91
YmxlVmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK1N0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQor
eworICAgIGlmIChDaGVja1ZhbHVlKiBjaGVjayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAg
IHJldHVybiAmY2hlY2stPnN0YWNrbWFwOworICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBhczxQYXRjaHBvaW50VmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2lu
dC0+c3RhY2ttYXA7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgewor
ICAgIGNhc2UgTm9uZToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
b2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJn
dW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
dmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2gg
KGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5w
cmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNr
QXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgi
Q29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
VmFsdWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2luY2x1ZGUgIlJlZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRp
b25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50
YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBm
b3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdo
ZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ug
c2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6
CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24s
IHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uCisgICAgICAg
IEFueSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFu
cyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIsIHByb3ZpZGVkIHRoYXQKKyAgICAg
ICAgLy8gaXQncyBub3QgYWxzbyBhIHJlZ2lzdGVyIHRoYXQgd2FzIGNsb2JiZXJlZC4KKyAgICAg
ICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAorICAgICAg
ICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tl
ZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2Vu
dGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90
IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgIFN0YWNr
LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0
aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAgICAgICAg
Ly8gb2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFzIGFuIG91
dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50LWZvbGRl
ZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBWYWx1ZVJl
cCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQg
VmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAgICAgICwg
bV92YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVw
IHJlZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7CisgICAg
fQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21GUCkKKyAg
ICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0
YWNrOworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9tU1ApCisg
ICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBT
dGFja0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21TUDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0
YW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHN0YXRp
YyBWYWx1ZVJlcCBjb25zdGFudChkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
VmFsdWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJlZygp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAgICAg
ICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90
IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0
YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICBy
ZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDc1IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMg
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgor
CiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3Rt
cCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIg
Om9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4K
KworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAg
ICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFu
b255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAg
ICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUKKyAgICAgICAgQG9wY29k
ZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNoaWxkcmVuIDogW10K
KyAgICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAgICAgb3Bjb2RlICE9IG5pbAorICAg
IGVuZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgY2hpbGRyZW4uZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQsIGluZGV4IHwKKyAgICAgICAgICAg
IHlpZWxkIHZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5uYW1lLAorICAgICAgICAg
ICAgICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLmFub255bW91
cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDogOmFub25PcGVyYW5kKSA6IChjaGls
ZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisgICAgICAgICAgICAgICAgICBpbmRl
eAorICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICB9CisgICAg
ZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6cHJvZHVj
dGlvbnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBA
bmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMKKyAgICBlbmQK
K2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVt
YmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAg
ICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJl
cgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xp
bmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIg
Om9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5n
KQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRv
a2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAor
ICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAg
IAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59
IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBp
ZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9
IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306
ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3Ry
LCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICBy
ZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8K
KyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAg
ICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMg
bmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hl
biAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKikvCisgICAgICAgICAgICByZXN1bHQgPDwg
VG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAg
d2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAg
ICAgICAgd2hlbiAvXEFbPSgpLF0vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9y
aWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51
bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9Igor
ICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJl
c3VsdAorZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgIyBXZSBjYW4gZXh0ZW5kIHRo
aXMgYXMgd2UgYWRkIG1vcmUga2V5d29yZHMuIExpa2UsIHdlIG1pZ2h0IHdhbnQgImluY2x1ZGUi
IGV2ZW50dWFsbHkuCisgICAgdG9rZW4gPX4gL1xBKChtYXRjaGVyKSlcWi8KK2VuZAorCitkZWYg
aXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1a
MC05X10qKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIK
KyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxl
eChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0
b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQor
ICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50
KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAg
ICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAj
e2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisg
ICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0
cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQK
KworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJp
bmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lk
ZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVu
ZAorCisgICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAg
ICAgICAgaWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkNoaWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIp
CisgICAgICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwg
ZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgcGFyc2VFcnJvcigi
RHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMg
PDwgcHJvZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUo
Im1hdGNoZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKwor
ICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBi
cmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgICMgV2UgbWlnaHQg
d2FudCB0byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhl
cmUuCisgICAgICAgICAgICBhZGRVbmlxdWUobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zLCBwYXJz
ZVByb2R1Y3Rpb24pCisgICAgICAgIH0KKworICAgICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFt
ZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAg
ICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAgICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZp
ZXIKKworICAgICAgICBpZiB0b2tlbiA9PSAiPSIKKyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQor
ICAgICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1
bWUoIigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUo
IigiKQorICAgICAgICAgICAgb3Bjb2RlID0gbmFtZQorICAgICAgICAgICAgbmFtZSA9IG5pbAor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBu
YW1lLCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBwcm9kdWN0aW9u
cyA9IFtdCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIiki
CisKKyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0
aW9uKQorCisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNv
bnN1bWUoIiwiKQorICAgICAgICB9CisKKyAgICAgICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIK
KyAgICAgICAgYWR2YW5jZQorCisgICAgICAgIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwg
b3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKK2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0K
KworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0
Y2hlciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBTdWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDpp
bmRleE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0
LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rp
b25zID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8
CisgICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5kZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9u
cyA8PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgZGVmIG1h
cEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgIGluZGV4TGlzdC5tYXAgeworICAgICAgICAg
ICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAg
ICBlbmQKK2VuZAorCitGaWxlLm9wZW4oIkIzIiArIG1hdGNoZXIubmFtZSArICIuaCIsICJ3Iikg
eworICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBnZW5lcmF0
ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisK
KyAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICBvdXRwLnB1
dHMgIiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICAKKyAgICBvdXRwLnB1dHMgIiNp
bmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBydW4je21hdGNoZXIubmFtZX0oVmFsdWUqIF92
YWx1ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0cC5wdXRzICJ7IgorCisgICAgIyBOb3Rl
IHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIGJlY2F1c2Ug
aXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAgICAjIHdhbnQgdG8gc2VlIHRoZSBj
b2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBnb29kIHRleHQgZWRpdG9yIGFuZCBh
c2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91LgorCisgICAgIyBJbiBvZGQgc2l0dWF0
aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0
byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oX3ZhbHVl
KTsiCisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHByb3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBo
YXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5nIGRpZmZlcmVudCBsZW5ndGhz
LgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAg
ICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4
IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5k
ZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5s
ZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgICAgICBpbmRl
eExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlu
ZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAg
ICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAg
ICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAg
ICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgj
e3ZhbHVlTmFtZX0tPmNoaWxkcmVuLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAg
ICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAg
ICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxl
Y3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHBy
b2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXgg
b2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNw
b25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBU
aGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5
LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZh
bHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0
aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJv
ZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtd
CisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHBy
b2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9k
dWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bj
b2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAg
IGVuZAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1h
dGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29k
ZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExp
c3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgaWYgcHJv
ZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICAjIE5vdywg
d2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAg
ICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNo
IHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgIHBy
b2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3Jv
dXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3By
b2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQor
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAgICAgICAgICAgIGdy
b3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhM
aXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisg
ICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwg
cHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVl
TmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwg
aW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcElu
ZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlv
bnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRj
aC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAg
ICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKwor
ICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhl
IHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHBy
b2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAs
IHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAgICBpZiBjb2x1bW5J
bmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxk
ICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91
dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3Zh
bHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90
IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQu
CisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAg
IAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAg
ICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5J
bmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFs
dWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAg
ICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAg
ICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9u
cywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAg
ICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisK
KyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQor
ICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsK
KyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRl
ZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2Ft
ZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAg
IHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAg
ICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAw
KSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxk
IHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNo
ZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICBpbmRleExp
c3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24g
PSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0cC5wdXRzICJ7Igor
ICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3Zh
bHVlOyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG9w
ZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAgICAg
ICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxl
IHsKKyAgICAgICAgICAgICAgICB8IHBhcmVudFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJO
YW1lLCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tj
aGlsZFZhck5hbWV9ID0gI3twYXJlbnRWYXJOYW1lfS0+Y2hpbGQoI3tpbmRleH0pOyIKKworICAg
ICAgICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJC8KKyAgICAgICAgICAgICAgICAgICAg
aWYgY2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlm
ICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA8PCBj
aGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6YW5vbkludGVybmFs
CisgICAgICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2lu
ZCA9PSA6b3BlcmFuZCBvciBraW5kID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgIHRy
eUFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9
PSA6b3BlcmFuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRh
cHRvci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBh
ZGFwdG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSAr
ICIpIikKKyAgICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3IuYWNjZXB0T3BlcmFu
ZHMoIiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIG91
dHAucHV0cygiICAgICYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1
bWVudHMuam9pbigiLCAiKSArICIpKSIpCisgICAgICAgICAgICBvdXRwLnB1dHMgIiAgICByZXR1
cm47IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21h
dGNoZXIubmFtZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQXJnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQodG1wKCkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmludCgiJCIs
IG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgaWYg
KG1fb2Zmc2V0KQorICAgICAgICAgICAgb3V0LnByaW50KG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0
LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmRl
eDoKKyAgICAgICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICAgICAgb3V0LnByaW50KG1fb2Zmc2V0
KTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLCIsIGluZGV4KCkpOworICAgICAg
ICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7
CisgICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYnM6
CisgICAgICAgIG91dC5wcmludChtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBcmdfaAorI2RlZmluZSBBaXJBcmdf
aAorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworLy8gVGhpcyBjbGFzcyBuYW1lIGlzIGFsc28gaW50ZW50aW9u
YWxseSB0ZXJzZSBiZWNhdXNlIHdlIHdpbGwgc2F5IGl0IGEgbG90LiBZb3UnbGwgc2VlIGNvZGUg
bGlrZQorLy8gSW5zdCguLi4sIEFyZzo6aW1tKDUpLCBBcmc6OmFkZHIodGhpbmcsIGJsYWgpLCAu
Li4pCitjbGFzcyBBcmcgeworcHVibGljOgorICAgIC8vIFRoZXNlIGVudW0gbWVtYmVycyBhcmUg
aW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIGhhdmUgdG8gbWVudGlvbiB0aGVtIGEgbG90
LgorICAgIGVudW0gS2luZCA6IGludDhfdCB7CisgICAgICAgIFRtcCwKKyAgICAgICAgSW1tLAor
ICAgICAgICBJbW1QdHIsCisgICAgICAgIEFkZHIsCisgICAgICAgIEluZGV4LAorICAgIH07CisK
KyAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAgICAgICBVc2UsCisgICAgICAgIERlZiwKKyAg
ICAgICAgVXNlRGVmCisgICAgfTsKKworICAgIGVudW0gVHlwZSA6IGludDhfdCB7CisgICAgICAg
IEdQLAorICAgICAgICBGUAorICAgIH07CisKKyAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJv
bGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6Cisg
ICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgRGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNEZWYoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChy
b2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFyZygpCisgICAgeworICAgIH0KKworICAg
IEFyZyhBaXI6OlRtcCB0bXApCisgICAgICAgIDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jh
c2UodG1wKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbShpbnRwdHJfdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJ
bW07CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tUHRyKGludHB0cl90IHZhbHVlKQorICAg
IHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbVB0cjsK
KyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgc3RhdGljIEFyZyBhZGRyZXNzKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qg
b2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAg
IEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBZGRyOworICAgICAgICByZXN1
bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2Fs
ZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAg
ICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgY2Fz
ZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxl
KSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAg
cmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgoQWly
OjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJfdCBv
ZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAg
QVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2NhbGUp
KTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4Owor
ICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBp
bmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzY2Fs
ZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAg
ICAgICAgICAgJiYgbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNl
ID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4
CisgICAgICAgICAgICAmJiBtX3NjYWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29s
IGlzVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAg
IH0KKworICAgIGJvb2wgaXNJbW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBJbW07CisgICAgfQorCisgICAgYm9vbCBpc0ltbVB0cigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4ga2luZCgpID09IEltbVB0cjsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisg
ICAgYm9vbCBpc0luZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
SW5kZXg7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisK
KyAgICBpbnRwdHJfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IEltbSB8fCBraW5kKCkgPT0gSW1tUHRyKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0Owor
ICAgIH0KKworICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jh
c2U7CisgICAgfQorCisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpUbXAg
aW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7Cisg
ICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1
cm4gbV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgYm9vbCBp
c0dQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlz
R1AoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAKKyAgICAvLyBUZWxs
cyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMg
YSBHUCB2YWx1ZS4KKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNo
IChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgSW1tUHRyOgorICAg
ICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVz
ZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgRlAgdmFsdWUuCisgICAgYm9vbCBpc0ZQ
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW1tOgorICAgICAgICBjYXNlIEltbVB0cjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIEJhc2U6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAg
ICByZXR1cm4gaXNGUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc0dQUigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOwor
ICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRt
cCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAgICB9CisKKyAgICBGUFJSZWcg
ZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcHIoKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAo
KSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1w
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwVG1wSW5kZXgoKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5k
ZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnRtcEluZGV4KCk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBG
YXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAg
ZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6
CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5k
ZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMgaXMgc21hcnQgZW5vdWdoIHRv
IGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVz
ZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6
CisgICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVyY3gpCisgICAgLy8KKyAgICAvLyBUaGlzIGRl
ZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUsIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAg
ICBjYXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xlLCBhcmdUeXBl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBm
dW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAg
ICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXV0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbVB0cigpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW1QdHIoKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX29mZnNldCk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jh
c2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludHB0cl90IG1fb2Zmc2V0IHsg
MCB9OworICAgIEtpbmQgbV9raW5kIHsgSW1tIH07CisgICAgdWludDhfdCBtX3NjYWxlIHsgMSB9
OworICAgIEFpcjo6VG1wIG1fYmFzZTsKKyAgICBBaXI6OlRtcCBtX2luZGV4OworfTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQXJnX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQob3Bjb2RlLCAiICIsIGxpc3REdW1wKGFyZ3MpKTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5z
dF9oCisjZGVmaW5lIEFpckluc3RfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAi
QWlyT3Bjb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBW
YWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBJbnN0IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUs
IFZhbHVlKiBvcmlnaW4pCisgICAgICAgIDogb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBvcmln
aW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnIGFy
ZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBvcGNvZGUob3Bjb2RlKQorICAg
ICAgICAsIGFyZ3N7IGFyZywgYXJndW1lbnRzLi4uIH0KKyAgICAgICAgLCBvcmlnaW4ob3JpZ2lu
KQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4s
IGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKKyAgICAgICAgOiBvcGNvZGUob3Bjb2RlKQorICAg
ICAgICAsIGFyZ3MoYXJncykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9
CisKKyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25z
dCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAorICAgIC8vIGVk
aXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3Vu
ZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKKyAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3
cm9uZy4KKworICAgIC8vIFRoaXMgb25seSB3YWxrcyB0aG9zZSBUbXBzIHRoYXQgYXJlIGV4cGxp
Y2l0bHkgbWVudGlvbmVkLCBhbmQgaXQgZG9lc24ndCB0ZWxsIHlvdSB0aGVpciByb2xlCisgICAg
Ly8gb3IgdHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9y
RWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAo
QXJnIGFyZyA6IGFyZ3MpCisgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7
CisgICAgfQorCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBl
KS4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5l
cmF0b3IucmIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVh
Y2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3Rv
ciB3aXRoICh0bXAsIHJvbGUsIHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoVG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBmb3JFYWNoQXJnUm9sZSgKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1w
KHJvbGUsIHR5cGUsIGZ1bmN0b3IpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8g
UmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0
aW9uLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQ2xv
YmJlcmVkUmVnKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24g
aW4gb25lIG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0
by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNW
YWxpZEZvcm0oKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2
YWxpZCBmb3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlk
CisgICAgLy8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgaW4gdGhlIGdpdmVuIGluZGV4PyBTcGls
bGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvCisgICAgLy8gZmlu
ZCBUbXBzIHRoYXQgbmVlZCBzcGlsbGluZzsgaWYgaXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlz
IHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUKKyAgICAvLyBBcmc6OlRtcCB3aXRoIGFuIEFy
Zzo6QWRkci4gSWYgaXQgZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFy
ZydzIGZvckVhY2hUbXAgdG8KKyAgICAvLyBkbyBhIHJlcGxhY2VtZW50IHRoYXQgd2F5LgorICAg
IC8vCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2Vu
ZXJhdG9yLnJiLgorICAgIGJvb2wgYWRtaXRzQWRkcih1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAg
ICAvLyBHZW5lcmF0ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxp
a2UsIGxpdGVyYWxseSBvdXIgYmFja2VuZC4gVGhpcyBmdW5jdGlvbgorICAgIC8vIGlzIGF1dG8t
Z2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgdm9pZCBnZW5lcmF0ZShNYWNy
b0Fzc2VtYmxlciYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAg
ICBPcGNvZGUgb3Bjb2RlOworICAgIEFyZ0xpc3QgYXJnczsKKyAgICBWYWx1ZSogb3JpZ2luOyAv
LyBUaGUgQjM6OlZhbHVlIHRoYXQgdGhpcyBvcmlnaW5hdGVkIGZyb20uCit9OworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJJbnN0X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdElubGluZXNfaAorI2RlZmluZSBB
aXJJbnN0SW5saW5lc19oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQWlyT3Bj
b2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFscy5oIgorI2luY2x1ZGUgIkIzU3RhY2tt
YXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQg
SW5zdDo6Zm9yRWFjaENsb2JiZXJlZFJlZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAg
IHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBDaGVjazoKKyAgICBjYXNlIENoZWNrQWRkOgor
ICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICBjYXNlIFBhdGNocG9p
bnQ6CisgICAgICAgIG9yaWdpbi0+c3RhY2ttYXAoKS0+Y2xvYmJlcmVkKCkuZm9yRWFjaChmdW5j
dG9yKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIENhbGw6IHsKKyAgICAgICAgUmVnaXN0
ZXJTZXQgY2FsbGVlU2F2ZVJlZ2lzdGVycyA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0
ZXJzKCk7CisgICAgICAgIGZvciAoUmVnIHJlZyA6IFJlZzo6YWxsKCkpIHsKKyAgICAgICAgICAg
IGlmICghY2FsbGVlU2F2ZVJlZ2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICBmdW5j
dG9yKHJlZyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZGVmYXVs
dDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBBaXJJbnN0SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rlcy5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rlcy5vcGNvZGVzCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGVzLm9wY29kZXMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworIyBTeWxsYWJ1czoKKyMgVTpHID0+IHVzZSBvZiBhIGdlbmVyYWwtcHVycG9zZSBy
ZWdpc3RlciBvciB2YWx1ZQorIyBEOkcgPT4gZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lz
dGVyIG9yIHZhbHVlCisjIFVEOkcgPT4gdXNlIGFuZCBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2Ug
cmVnaXN0ZXIgb3IgdmFsdWUKKyMgVTpGID0+IHVzZSBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZh
bHVlCisjIEQ6RiA9PiBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpGID0+
IHVzZSBhbmQgZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVG1wID0+IHRlbXBv
cmFyeSBvciByZWdpc3RlcgorIyBBZGRyID0+IGFkZHJlc3MgYXMgdGVtcG9yYXJ5L3JlZ2lzdGVy
K29mZnNldAorIyBJbmRleCA9PiBCYXNlSW5kZXggYWRkcmVzcworIyBBYnMgPT4gQWJzb2x1dGVB
ZGRyZXNzCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2ZSBhIGxlYWRpbmcgY2Fw
aXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9Bc3NlbWJsZXIKKyMgQVBJ
IHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisKK0FkZDMyIFU6RywgVUQ6
RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBUbXAKKyAgICBBZGRyLCBU
bXAKKyAgICBUbXAsIEFkZHIKKworQWRkMzIgVTpHLCBVOkcsIEQ6RworICAgIEltbSwgVG1wLCBU
bXAKKworQW5kMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIFRt
cCwgQWRkcgorICAgIEFkZHIsIFRtcAorICAgIEltbSwgQWRkcgorCitMc2hpZnQzMiBVOkcsIFVE
OkcKKyAgICBUbXAqLCBUbXAKKyAgICBJbW0sIFRtcAorCitNdWwzMiBVOkcsIFVEOkcKKyAgICBU
bXAsIFRtcAorICAgIEFkZHIsIFRtcAorCitNb3ZlIFU6RywgRDpHCisgICAgVG1wLCBUbXAKKyAg
ICBJbW0sIFRtcAorICAgIEltbVB0ciwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQgIyBUaGlz
IG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIg
bm90ICJtb3ZlIi4KKyAgICBUbXAsIEFkZHIgYXMgc3RvcmUKKworTW92ZURvdWJsZSBVOkYsIEQ6
RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFk
ZHIgYXMgc3RvcmVEb3VibGUKKworTW92ZTY0VG9Eb3VibGUgVTpHLCBEOkYKKyAgICBUbXAsIFRt
cAorCitNb3ZlRG91YmxlVG82NCBVOkYsIEQ6RworICAgIFRtcCwgVG1wCisKKyMgU29tZSBvcGNv
ZGVzIGJlaGF2ZSBleG90aWNhbGx5LiBGb3IgZXhhbXBsZSwgdGhleSBtYXkgaGF2ZSB2YXJhcmdz
LiBPciwgdGhleSBtYXkgcmVxdWlyZSBhIHNwZWNpYWwKKyMgY2xhc3Mgb2YgcmVnaXN0ZXJzIGZv
ciBzb21lIG9wZXJhbmQuIE9yLCB0aGV5IG1heSB1c2Ugb3IgZGVmIGFkZGl0aW9uYWwgcmVnaXN0
ZXJzLgorCisjIFRoZXNlIGJlaGF2ZSBsaWtlIGhvdyB0aGUgU3RhY2ttYXAgb2JqZWN0IHRlbGxz
IHRoZW0gdG8gYmVoYXZlLgorc3BlY2lhbCBDaGVja0FkZAorc3BlY2lhbCBDaGVja1N1YiAKK3Nw
ZWNpYWwgQ2hlY2tNdWwKK3NwZWNpYWwgQ2hlY2sKK3NwZWNpYWwgUGF0Y2hwb2ludAorCisjIFRh
a2VzIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBpbnB1dHMuCitzcGVjaWFsIENhbGwKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBUbXA6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5w
cmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNSZWco
KSkgeworICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgaWYgKGlzR1BUbXAoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0bXAiLCBncFRtcElu
ZGV4KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCIlZnRtcCIs
IGZwVG1wSW5kZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpclRtcF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNpbmNsdWRlICJSZWcu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisv
LyBBIFRtcCBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIGEgcmVnaXN0ZXIuIEl0IGNhbiBiZSB1c2Vk
IHRvIHJlZmVyIHRvIGFueSBHUFIgb3IgRlBSLiBJdCBjYW4gYWxzbworLy8gYmUgdXNlZCB0byBy
ZWZlciB0byBhbiB1bmFsbG9jYXRlZCByZWdpc3RlciAoaS5lLiBhIHRlbXBvcmFyeSkuIExpa2Ug
bWFueSBBaXIgY2xhc3Nlcywgd2UgdXNlCisvLyBkZWxpYmVyYXRlbHkgdGVyc2UgbmFtaW5nIHNp
bmNlIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhpcyBuYW1lIGEgbG90LgorCitjbGFzcyBUbXAgewor
cHVibGljOgorICAgIFRtcCgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisK
KyAgICBleHBsaWNpdCBUbXAoUmVnIHJlZykKKyAgICB7CisgICAgICAgIGlmIChyZWcpIHsKKyAg
ICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5j
b2RlR1BSKHJlZy5ncHIoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV92
YWx1ZSA9IGVuY29kZUZQUihyZWcuZnByKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IG1fdmFsdWUgPSAwOworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZ3BUbXBGb3JJbmRleCh1bnNp
Z25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X3ZhbHVlID0gZW5jb2RlR1BUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHN0YXRpYyBUbXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7
CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBU
bXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBU
bXAgZm9yUmF3VmFsdWUodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0
OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdmFsdWU7IH0KKworICAgIGJvb2wgcmF3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisKKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5j
b2RlZEdQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBp
c0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUp
OworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzRW5jb2RlZEZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAg
R1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFs
dWUpOworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGRlY29kZUZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAg
ICAgIHJldHVybiBmcHIoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBk
ZWNvZGVGUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1w
SW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMg
aW50IGVuY29kZUZQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xIC0g
aW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFIoR1BSUmVnIGdwcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUChncHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RS
ZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQUihGUFJSZWcgZnBy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQKGZwciAtIE1hY3JvQXNzZW1ibGVyOjpm
aXJzdEZQUlJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAo
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGlj
IGludCBlbmNvZGVGUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBl
bmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4Owor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQKGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZSA+IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNv
ZGVkRlAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9B
c3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0Vu
Y29kZWRGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZh
bHVlKSAmJiB2YWx1ZSA+PSBlbmNvZGVkRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3Rl
cigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRH
UFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5j
b2RlZEZQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50
IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVu
Y29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxl
cjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQ
UihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KAorICAgICAgICAgICAgKGVuY29k
ZUZQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAg
c3RhdGljIHVuc2lnbmVkIGRlY29kZUdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc0VuY29kZWRHUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5j
b2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzRW5jb2RlZEZQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBS
KE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQor
CisgICAgLy8gMDogZW1wdHkgVG1wCisgICAgLy8gcG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1Ag
dGVtcHMuCisgICAgLy8gbmVnYXRpdmU6IEZQUnMgYW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50
IG1fdmFsdWU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBBaXJUbXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29k
ZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzQ4IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNvZGUKKyAgICBhdHRy
X3JlYWRlciA6bmFtZSwgOnNwZWNpYWwsIDpvdmVybG9hZHMKKworICAgIGRlZiBpbml0aWFsaXpl
KG5hbWUsIHNwZWNpYWwpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9
IHNwZWNpYWwKKyAgICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBvdmVybG9hZHMg
PSBbXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQorICAgICAgICBu
YW1lWzBdLmRvd25jYXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBBcmcK
KyAgICBhdHRyX3JlYWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFsaXplKHJvbGUs
IHR5cGUpCisgICAgICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5cGUKKyAgICBl
bmQKK2VuZAorCitjbGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1cmUsIDpm
b3JtcworCisgICAgZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgQHNp
Z25hdHVyZSA9IHNpZ25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3JtcworICAgIGVuZAorZW5k
CisKK2NsYXNzIEtpbmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfYWNjZXNzb3Ig
OnNwZWNpYWwKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAgIEBuYW1lID0gbmFt
ZQorICAgICAgICBAc3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYgPT0ob3RoZXIp
CisgICAgICAgIGlmIG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAgQG5hbWUgPT0gb3Ro
ZXIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFtZSBhbmQgQHNw
ZWNpYWwgPT0gb3RoZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitjbGFz
cyBGb3JtCisgICAgYXR0cl9yZWFkZXIgOmtpbmRzLCA6YWx0TmFtZQorCisgICAgZGVmIGluaXRp
YWxpemUoa2luZHMsIGFsdE5hbWUpCisgICAgICAgIEBraW5kcyA9IGtpbmRzCisgICAgICAgIEBh
bHROYW1lID0gYWx0TmFtZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJf
cmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShm
aWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAg
ICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MK
KyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xh
c3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVm
IGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAg
ICAgICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikK
KyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3Ro
ZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAg
ICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3Ry
aW5nID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0
cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNl
RXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICBy
YWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJh
aXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisg
ICAgZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0
aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEK
KyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVu
IC9cQVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3
aGVuIC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxp
bmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQShbYS16QS1aMC05X10rKS8KKyAgICAgICAg
ICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciks
ICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAjIHdoaXRlc3Bh
Y2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVssOipdLworICAgICAgICAgICAgcmVzdWx0IDw8
IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmls
ZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIw
XS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAg
ICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tlbiA9fiAv
XEEoKFUpfChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRva2VuID1+
IC9cQSgoRyl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9rZW4gPX4g
L1xBKChUbXApfChJbW0pfChJbW1QdHIpfChBZGRyKXwoSW5kZXgpKVxaLworZW5kCisKK2RlZiBp
c0tleXdvcmQodG9rZW4pCisgICAgaXNVRCh0b2tlbikgb3IgaXNHRih0b2tlbikgb3IgaXNLaW5k
KHRva2VuKSBvcgorICAgICAgICB0b2tlbiA9PSAic3BlY2lhbCIgb3IgdG9rZW4gPT0gImFzIgor
ZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKFthLXpBLVow
LTlfXSspXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgor
ICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4
KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRv
a2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisg
ICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQp
CisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50
KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAg
ICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7
Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAg
ICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3Ry
aW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAor
CisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmlu
ZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRl
bnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5k
CisKKyAgICBkZWYgY29uc3VtZVJvbGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisg
ICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHJvbGUgKFUsIEQsIG9yIFVEKSIpIHVubGVzcyBp
c1VEKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKwor
ICAgIGRlZiBjb25zdW1lVHlwZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAg
ICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgdHlwZSAoRyBvciBGKSIpIHVubGVzcyBpc0dGKHJlc3Vs
dCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBj
b25zdW1lS2luZAorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VF
cnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBJbW1QdHIsIFRtcCwgQWRkciwgb3IgSW5kZXgpIikg
dW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0Cisg
ICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisg
ICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0
aAorCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBj
b25zdW1lKCJzcGVjaWFsIikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlk
ZW50aWZpZXIKKworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBh
IHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAg
ICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlm
aWVyCisKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAg
ICAgICAgICAgb3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAg
IHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2Rl
LnNwZWNpYWwKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29k
ZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdFtvcGNvZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICBpZiBpc1VEKHRva2VuKQor
ICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUg
PSBjb25zdW1lUm9sZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiOiIpCisgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gY29uc3VtZVR5cGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIDw8IEFyZy5uZXcocm9s
ZSwgdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmQKKwor
ICAgICAgICAgICAgICAgIGZvcm1zID0gW10KKyAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAg
ICAgICAgICAgICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0g
bmlsCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAg
a2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIHRva2VuID09ICIqIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5sZXNzIGtpbmRzWy0xXS5uYW1lID09ICJUbXAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNwZWNpYWwgPSB0cnVlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiKiIpCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2Vu
ID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCJhcyIpCisgICAgICAgICAgICAgICAgICAgICAg
ICBhbHROYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisK
KyAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgd3JvbmcgbnVtYmVyIG9m
IGFyZ3VtZW50cyBmb3Igb3ZlcmxvYWQiKSB1bmxlc3Mga2luZHMubGVuZ3RoID09IHNpZ25hdHVy
ZS5sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAga2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgICAg
ICAgICAgaWYga2luZC5uYW1lID09ICJJbW0iIG9yIGtpbmQubmFtZSA9PSAiSW1tUHRyIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0ucm9sZSAhPSAiVSIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4g
aW1tZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRl
eF0udHlwZSAhPSAiRyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJv
cigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi1nZW5lcmFsLXB1cnBvc2UgYXJndW1l
bnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm9y
bXMgPDwgRm9ybS5uZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFr
IHVubGVzcyBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9hZC5uZXcoc2lnbmF0dXJlLCBmb3JtcykKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCitlbmQK
KworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKCRm
aWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVzID0gcGFyc2VyLnBhcnNlCisKK2RlZiB3cml0
ZUgoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5oIiwgInciKSB7Cisg
ICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRl
ZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0
ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2lmbmRlZiBBaXIje2ZpbGVuYW1lfV9o
IgorICAgICAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQWlyI3tmaWxlbmFtZX1faCIKKworICAgICAg
ICB5aWVsZCBvdXRwCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBBaXIj
e2ZpbGVuYW1lfV9oIgorICAgIH0KK2VuZAorCitkZWYgd3JpdGVDUFAoZmlsZW5hbWUpCisgICAg
RmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5jcHAiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwK
KyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5l
cmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAg
ICAgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcImNvbmZpZy5oXCIiCisgICAgICAgIG91dHAucHV0
cyAiI2luY2x1ZGUgXCJBaXIje2ZpbGVuYW1lfS5oXCIiCisKKyAgICAgICAgeWllbGQgb3V0cAor
ICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZXMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRw
LnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisg
ICAgb3V0cC5wdXRzICJlbnVtIE9wY29kZSA6IGludDE2X3QgeyIKKyAgICAkb3Bjb2Rlcy5rZXlz
LnNvcnQuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICIgICAg
I3tvcGNvZGV9LCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJz
dGF0aWMgY29uc3QgdW5zaWduZWQgbnVtT3Bjb2RlcyA9ICN7JG9wY29kZXMua2V5cy5zaXplfTsi
CisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorICAgIAor
ICAgIG91dHAucHV0cyAibmFtZXNwYWNlIFdURiB7IgorICAgIG91dHAucHV0cyAiY2xhc3MgUHJp
bnRTdHJlYW07IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6QWlyOjpPcGNvZGUpOyIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNl
IFdURiIKK30KKword3JpdGVDUFAoIk9wY29kZXMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRw
LnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5h
bWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBz
d2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9w
Y29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAg
b3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91
dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9Igor
ICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91
dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKworIyBG
cm9tIGhlcmUgb24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUs
IHNpbmNlIHdlJ3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKworZGVm
IG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0dGVy
LCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAorCisg
ICAgaWYgZmlsdGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIG91dHAu
cHV0cyAiIC8vIGNvbHVtbkluZGV4ID0gI3tjb2x1bW5JbmRleH0sIGZvcm1zID0gI3tmb3Jtcy5p
bnNwZWN0fSwgbnVtQ29sdW1ucyA9ICN7Zm9ybXNbMF0ua2luZHMubGVuZ3RofSIKKyAgICBpZiBj
b2x1bW5JbmRleCA+PSBmb3Jtc1swXS5raW5kcy5sZW5ndGgKKyAgICAgICAgcmFpc2UgdW5sZXNz
IGZvcm1zLmxlbmd0aCA9PSAxCisgICAgICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQorICAgICAgICBy
ZXR1cm4KKyAgICBlbmQKKyAgICAKKyAgICBncm91cHMgPSB7fQorICAgIGZvcm1zLmVhY2ggewor
ICAgICAgICB8IGZvcm0gfAorICAgICAgICBraW5kID0gZm9ybS5raW5kc1tjb2x1bW5JbmRleF0u
bmFtZQorICAgICAgICBpZiBncm91cHNba2luZF0KKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA8
PCBmb3JtCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA9IFtmb3JtXQor
ICAgICAgICBlbmQKKyAgICB9CisKKyAgICBpZiBzcGVlZCA9PSA6ZmFzdCBhbmQgZ3JvdXBzLmxl
bmd0aCA9PSAxCisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5J
bmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgcmV0dXJu
CisgICAgZW5kCisKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tjb2x1bW5HZXR0ZXJbY29sdW1u
SW5kZXhdfSkgeyIKKyAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgfCBrZXksIHZhbHVl
IHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlIEFyZzo6I3trZXl9OiIKKyAgICAgICAgbWF0Y2hG
b3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBm
aWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAg
b3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1
dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQor
ICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5vcGNvZGUpIHsiCisgICAgJG9wY29kZXMu
dmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2Fz
ZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAg
ICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkT3Zlcmxv
YWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpIG9yIHNwZWVkID09IDpzYWZl
CisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+YXJncy5zaXplKCkpIHsi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNo
IHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3
aXRjaAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBl
bmQKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVm
YXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisg
ICAgCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG1h
dGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KSB7CisgICAgICAgIHwgb3Bjb2RlLCBv
dmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBv
cGNvZGUsIG5pbCwgbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbHVtbkdldHRlciA9
IHByb2MgeworICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAgICAgICAg
ICIje2luc3R9LT5hcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgY2FsbGJhY2sg
PSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgIHlpZWxk
IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hdGNo
Rm9ybXMob3V0cCwgc3BlZWQsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRl
ciwgY2FsbGJhY2spCisgICAgICAgIGVuZAorICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZVV0
aWxzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3Qu
aFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJTcGVjaWFscy5oXCIiCisgICAgb3V0
cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7Igor
ICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRz
ICJ2b2lkIEluc3Q6OmZvckVhY2hBcmdSb2xlKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIgorICAg
IG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCA6ZmFzdCwgInRoaXMi
KSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVj
aWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIiN7b3Bjb2RlLm5hbWV9U3BlY2lhbHM6OmZvckVh
Y2hBcmdSb2xlKHRoaXMsIGZ1bmN0b3IpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3Zl
cmxvYWQuc2lnbmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBhcmcs
IGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xlID0gbmlsCisgICAgICAgICAgICAgICAgY2Fz
ZSBhcmcucm9sZQorICAgICAgICAgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAgICAgICAgICAg
IHJvbGUgPSAiVXNlIgorICAgICAgICAgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAgICAg
ICAgIHJvbGUgPSAiRGVmIgorICAgICAgICAgICAgICAgIHdoZW4gIlVEIgorICAgICAgICAgICAg
ICAgICAgICByb2xlID0gIlVzZURlZiIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7
cm9sZX0sIEFyZzo6I3thcmcudHlwZX1QKTsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAor
ICAgIH0KKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyIgorfQorCit3cml0ZUNQUCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBv
dXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAgb3V0cC5w
dXRzICIjaW5jbHVkZSBcIkFpclNwZWNpYWxzLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJp
bmxpbmUgYm9vbCBoaWRkZW5UcnV0aCgpIHsgcmV0dXJuIHRydWU7IH0iCisgICAgb3V0cC5wdXRz
ICIjZGVmaW5lIFJFVFVSTih2YWx1ZSkgZG8ge1xcIgorICAgIG91dHAucHV0cyAiICAgIGlmICho
aWRkZW5UcnV0aCgpKVxcIgorICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm4gKHZhbHVlKTtc
XCIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVmFsaWRG
b3JtKCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRw
LCA6c2FmZSwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8Cisg
ICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTigj
e29wY29kZS5uYW1lfVNwZWNpYWxzOjppc1ZhbGlkKHRoaXMpKTsiCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAgICAgICAgb3Zlcmxv
YWQuc2lnbmF0dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBpbmRleCB8Cisg
ICAgICAgICAgICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZQorICAg
ICAgICAgICAgICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUKKyAgICAg
ICAgICAgICAgICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAgICAgICAgICBuZWVk
c01vcmVWYWxpZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2UgZG9u
J3QgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAgICAgICAgICAjIGtp
bmQgaW1wbGllcyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBpcyB0
aGUgdHlwZS4gQW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gdmFsaWRhdGUg
dGhlIHR5cGUgaWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUg
PT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tpbmRl
eH1dLnRtcCgpLmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
UkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoISN7b3Bjb2RlLm5hbWV9U3BlY2lhbHM6OmlzVmFsaWQodGhpcykpIgorICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAg
IG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRw
LnB1dHMgImJvb2wgSW5zdDo6YWRtaXRzQWRkcih1bnNpZ25lZCBhcmdJbmRleCkiCisgICAgb3V0
cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29k
ZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAi
Y2FzZSAje29wY29kZS5uYW1lfToiCisKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiUkVUVVJOKCN7b3Bjb2RlLm5hbWV9U3BlY2lhbHM6OmFkbWl0c0Fk
ZHIoYXJnSW5kZXgpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgU3dpdGNoIG9uIHRo
ZSBhcmdJbmRleC4KKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdJbmRleCkgeyIK
KworICAgICAgICAgICAgbnVtQXJncyA9IG9wY29kZS5vdmVybG9hZHMubWFwIHsKKyAgICAgICAg
ICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUu
bGVuZ3RoCisgICAgICAgICAgICB9Lm1heAorICAgICAgICAgICAgCisgICAgICAgICAgICBudW1B
cmdzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGFyZ0luZGV4IHwKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImNhc2UgI3thcmdJbmRleH06IgorCisgICAgICAgICAgICAgICAgIyBDaGVj
ayBpZiBhbGwgb2YgdGhlIGZvcm1zIG9mIGFsbCBvZiB0aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywg
b3IgZG9uJ3QsIGFkbWl0IGFuIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAjIGF0IHRoaXMgaW5k
ZXguIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGEgdmVyeSBjb21tb24gY2FzZS4KKyAgICAgICAgICAg
ICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAg
ICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9h
ZCB8CisgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAg
ICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0u
a2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtTm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAj
IE5vdGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgdGVzdCBudW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3
ZSBlbmQgdXAgd2l0aCBubyBmb3Jtcywgd2Ugd2FudAorICAgICAgICAgICAgICAgICMgdG8gc2F5
IHRoYXQgQWRkcmVzcyBpcyBpbmFkbWlzc2libGUuCisgICAgICAgICAgICAgICAgaWYgbnVtWWVz
ID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4oZmFsc2UpOyIKKyAg
ICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICMgTm93IGRvIHRoZSBmdWxsIHRlc3QuCisKKyAgICAgICAgICAgICAgICAgICAgbmVl
ZE92ZXJsb2FkU3dpdGNoID0gKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKQorCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92
ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7
CisgICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKworICAgICAgICAgICAgICAg
ICAgICAgICAgIyBBZ2FpbiwgY2hlY2sgaWYgYWxsIG9mIHRoZW0gZG8gd2hhdCB3ZSB3YW50Lgor
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNo
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAg
ICAgICAgICAgICAgIyBEb24ndCBlbWl0IGFueXRoaW5nLCBqdXN0IGRyb3AgdG8gZGVmYXVsdC4K
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3Ro
fToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7
b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBob3cgd2UgdGVzdCB0aGUgaHlwb3Ro
ZXNpcyB0aGF0IGNoYW5naW5nIHRoaXMgYXJndW1lbnQgdG8gYW4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjIGFkZHJlc3MgeWllbGRzIGEgdmFsaWQgZm9ybS4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGNvbHVtbkluZGV4ID09IGFyZ0luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiQXJnOjpBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnc1sje2NvbHVtbklu
ZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmls
dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybXMgfAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIiAvLyBDb25zaWRlcmlu
ZyBmb3JtczogI3tmb3Jtcy5pbnNwZWN0fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtWWVzID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLmVh
Y2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09
ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyAr
PSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERy
b3AgZG93biwgZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgS2VlcCBn
b2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTih0cnVlKTsiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiIC8vIE1hdGNoaW5nIGZvcm1zIG9mIG92ZXJsb2FkOiAje292ZXJsb2FkLmluc3Bl
Y3R9IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUs
IG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAifSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisg
ICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9
CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiI7CisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
b3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1
dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5zdDo6Z2VuZXJhdGUoTWFjcm9Bc3NlbWJs
ZXImIGppdCkgY29uc3QiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2Fk
Rm9ybShvdXRwLCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwg
Zm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMg
IiN7b3Bjb2RlLm5hbWV9U3BlY2lhbHM6OmdlbmVyYXRlKHRoaXMsIGppdCk7IgorICAgICAgICBl
bHNlCisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgICAgICBtZXRob2RO
YW1lID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWV0
aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBv
dXRwLnByaW50ICJqaXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMu
ZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICBpZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
IiwgIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1l
CisgICAgICAgICAgICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVy
bG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
ZnByKCkiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIklt
bSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVz
dGVkSW1tMzIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbW1QdHIiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbVB0cigpIgorICAg
ICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
ImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJ
bmRleCgpIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBvdXRwLnB1dHMgIik7IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9Igor
ICAgIAorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30K
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1
LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRl
eDsgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IGlu
dmFsaWQoKTsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7
IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsg
fQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXggPT0gZGVsZXRlZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFsbFJlZ3NJ
dGVyYWJsZSB7CisgICAgcHVibGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAgICAgICAgICAgZXhw
bGljaXQgaXRlcmF0b3IoUmVnIHJlZykKKyAgICAgICAgICAgICAgICA6IG1fcmVnKHJlZykKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVnIG9wZXJhdG9yKigp
IGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3JlZyA9IG1fcmVnLm5leHQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcmVnID09IG90aGVyLm1fcmVnOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgUmVnIG1fcmVnOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJzdCgpKTsgfQorICAgICAgICBpdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWcoKSk7IH0KKyAgICB9OworCisg
ICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSBjb25zdCB7IHJldHVybiBBbGxSZWdzSXRl
cmFibGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90IGludmFsaWQoKSB7IHJl
dHVybiAweGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0
LmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywxMyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3QgeyBy
ZXR1cm4gbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25lZCBoYXNoKCkg
Y29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRCaXRzKCkpCisgICAg
ICAgICAgICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7CisgICAgfQogICAgIAogcHJp
dmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263529</attachid>
            <date>2015-10-19 17:02:34 -0700</date>
            <delta_ts>2015-10-19 20:00:58 -0700</delta_ts>
            <desc>removed some stuff</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>207767</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1f
aW5kZXgoaW5kZXgpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwor
dm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFw
cGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNp
Y0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxv
Y2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFs
dWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0
OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlJ3MgdHlwZWRlZi4KKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgQWRqYWNl
bmN5TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9Cisg
ICAgQWRqYWNlbmN5TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7
IH0KKyAgICBBZGphY2VuY3lMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBBZGphY2VuY3lMaXN0Ojpjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNp
emUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSom
IGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1
ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYg
bGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0
JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFs
dWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIHZvaWQgYXBwZW5kKFZhbHVlKik7CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisg
ICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIEJhc2ljQmxvY2sqIHN1Y2Nl
c3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1
bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNv
bnN0OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVw
RHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQ
cm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBC
YXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
VmFsdWVMaXN0IG1fdmFsdWVzOworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1
YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAg
IDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAg
IG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5w
cmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2sp
Cit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9ja0lubGluZXNfaAorI2RlZmlu
ZSBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBW
YWx1ZVR5cGUgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjph
cHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7
CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1l
bnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit1
bnNpZ25lZCBCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPm51bVN1Y2Nlc3NvcnMoKTsKK30KKworQmFzaWNC
bG9jayogQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAg
IHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30K
KworQmFzaWNCbG9jayomIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7
Cit9CisKK2NvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2ljQmxvY2s6OnN1Y2Nl
c3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+
c3VjY2Vzc29ycygpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEIzQmFzaWNCbG9ja0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworQ2hlY2tWYWx1ZTo6fkNoZWNrVmFsdWUoKQoreworfQorCit2b2lkIENoZWNr
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1
ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ2hlY2tWYWx1ZSA6IHB1Ymxp
YyBDaGVjayB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBDaGVja0Fk
ZDoKKyAgICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAgICAg
ICAgY2FzZSBDaGVjazoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfkNo
ZWNrVmFsdWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBD
aGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011bC4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3Jp
Z2luLCBsZWZ0LCByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludCh0eXBlKCkpKTsK
KyAgICAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKKyAgICAgICAg
QVNTRVJUKG9wY29kZSA9PSBDaGVja0FkZCB8fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2Rl
ID09IENoZWNrTXVsKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4K
KyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogcHJlZGljYXRlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZv
aWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY2RlID09IENo
ZWNrKTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
cGFyaXNvbk1hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMg
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCittYXRjaGVyIENvbXBhcmlzb25NYXRjaGVyCisKK1Rlc3RMb2FkTm90WmVybzEgPSBB
bmQoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitUZXN0TG9hZE5vdFplcm8yID0gQW5kKGxlZnQsIExv
YWQoYWRkcmVzcykpCitUZXN0Tm90WmVybyA9IEFuZChsZWZ0LCByaWdodCkKKworVGVzdExvYWRa
ZXJvMSA9IEVxdWFsKEFuZChMb2FkKGFkZHJlc3MpLCByaWdodCksICQwKQorVGVzdExvYWRaZXJv
MiA9IEVxdWFsKEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKSwgJDApCitUZXN0WmVybyA9IEVxdWFs
KEFuZChsZWZ0LCByaWdodCksICQwKQorCitMb2FkRXF1YWwxID0gRXF1YWwoTG9hZChhZGRyZXNz
KSwgcmlnaHQpCitMb2FkRXF1YWwyID0gRXF1YWwobGVmdCwgTG9hZChhZGRyZXNzKSkKK05vdCA9
IEVxdWFsKHZhbHVlLCAkMCkKK0VxdWFsID0gRXF1YWwobGVmdCwgcmlnaHQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0MzJWYWx1ZTo6
fkNvbnN0MzJWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3QzMlZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0MzJWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0MzJWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3Qz
MlZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDMyVmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3QzMlZhbHVl
IDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29k
ZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdDMyOyB9CisgICAgCisgICAgfkNvbnN0
MzJWYWx1ZSgpOworICAgIAorICAgIGludDMyX3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2
YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3QzMiwgSW50MzIsIG9yaWdpbikKKyAg
ICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50MzJfdCBt
X3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Nv
bnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2
NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK0NvbnN0NjRWYWx1ZTo6fkNvbnN0NjRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29u
c3Q2NFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzQ29uc3Q2NFZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVf
aAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQ29uc3Q2NFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25z
dDY0OyB9CisgICAgCisgICAgfkNvbnN0NjRWYWx1ZSgpOworICAgIAorICAgIGludDY0X3QgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0NjRWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29u
c3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBCM0NvbnN0NjRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdERv
dWJsZVZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdERv
dWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3REb3VibGVW
YWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnRm
KCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3REb3VibGVWYWx1ZV9oCisjZGVm
aW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdERvdWJsZVZhbHVlIDogcHVi
bGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNv
ZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQorICAgIAorICAgIH5Db25zdERv
dWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisK
KyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBkb3Vi
bGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0RG91YmxlLCBEb3VibGUsIG9y
aWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
ZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpCit7Cit9
CisKK3ZvaWQgQ29udHJvbFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9zdWNjZXNzb3JzKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGJsb2Nr
KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDb250cm9sVmFsdWVfaAorI2RlZmluZSBCM0NvbnRyb2xWYWx1ZV9oCisKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBCYXNpY0Jsb2NrOworCitjbGFzcyBDb250cm9sVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBC
cmFuY2g6CisgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIE9vcHM6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBTd2l0Y2g6IAorICAgICAgICAgICAgLy8g
VGhpcyBpcyBoZXJlIGJlY2F1c2UgU3dpdGNoVmFsdWUgaXMgYSBzdWJjbGFzcyBvZiBDb250cm9s
VmFsdWUsIHNvIHdlIHdhbnQKKyAgICAgICAgICAgIC8vIHN3dGljaFZhbHVlLT5hczxDb250cm9s
VmFsdWU+KCkgdG8gcmV0dXJuIG5vbi1udWxsLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gU3VjY2Vzc29yTGlzdDsK
KworICAgIH5Db250cm9sVmFsdWUoKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogc3Vj
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaV07IH0K
KyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1
Y2Nlc3NvcnNbaV07IH0KKworICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVt
cE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFVzZSB0aGlzIGZv
ciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBD
b250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKKyAgICB7CisgICAgfQorCisg
ICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVsYXRlIHRoaXMuCisgICAgU3VjY2Vzc29yTGlzdCBt
X3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwg
b3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IE9v
cHMpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBSZXR1cm4uCisgICAgQ29udHJvbFZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
cmVzdWx0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcmVz
dWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBSZXR1cm4pOworICAgIH0KKwor
ICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayogdGFyZ2V0KQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAg
IEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQodGFy
Z2V0KTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRyb2xW
YWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIEJhc2ljQmxvY2sqIHllcywgQmFzaWNCbG9j
ayogbm8pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVk
aWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAgICAg
IG1fc3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChu
byk7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0NvbnRyb2xWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJ
bmRleFNldF9oCisKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0Nv
bW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhp
cyBpcyBhIHNldCBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVm
ZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1
ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1
ZXMgY2FuIGhhdmUgdmVyeSBzcGFyc2UKKy8vIGluZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBv
ZiBWYWx1ZXMuCisKKy8vIElmIHlvdSB3YW50IGEgc2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8g
SW5kZXhTZXQ8QmFzaWNCbG9jaz4uIFNvLCBUID0gQmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitjbGFzcyBJbmRleFNldCB7CitwdWJsaWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsK
KyAgICB9CisKKyAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAh
bV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQq
IHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBjbGFz
cyBJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBJdGVyYWJsZShjb25zdCBDb2xsZWN0
aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3QgSW5kZXhTZXQmIHNldCkKKyAgICAgICAgICAgIDog
bV9jb2xsZWN0aW9uKGNvbGxlY3Rpb24pCisgICAgICAgICAgICAsIG1fc2V0KHNldCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rp
b24obnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aXRlcmF0b3IoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIEJpdFZlY3Rvcjo6U2V0
Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBpdGVyKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0
aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pdGVyKGl0ZXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRl
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2l0ZXIrKzsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1faXRlciA9PSBvdGhlci5tX2l0ZXI7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBD
b2xsZWN0aW9uVHlwZSogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgQml0VmVjdG9yOjpTZXRC
aXRzSXRlcmFibGU6Oml0ZXJhdG9yIG1faXRlcjsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQu
YmVnaW4oKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IobV9jb2xsZWN0aW9uLCBtX3NldC5lbmQoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IGNvbnN0IENvbGxlY3Rpb25UeXBlJiBtX2NvbGxlY3Rpb247CisgICAgICAgIGNvbnN0IEluZGV4
U2V0JiBtX3NldDsKKyAgICB9OworCisgICAgLy8gRm9yIGJhc2ljIGJsb2NrcywgeW91IGRvOgor
ICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUpOworICAgIC8vCisgICAgLy8gRm9yIHZh
bHVlcywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUudmFsdWVzKCkp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIEl0ZXJhYmxlPENv
bGxlY3Rpb25UeXBlPiB2YWx1ZXMoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+KGNvbGxl
Y3Rpb24pOworICAgIH0KKworICAgIGNvbnN0IEJpdFZlY3RvciYgaW5kaWNlcygpIGNvbnN0IHsg
cmV0dXJuIG1fc2V0OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggOiBpbmRpY2VzKCkuc2V0Qml0cygpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBUOjpkdW1wUHJlZml4LCBpbmRleCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJpdFZlY3Rv
ciBtX3NldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNJ
bmRleFNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0
Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hl
ciBMb3dlcmluZ01hdGNoZXIKKworIyBUaGVzZSBydWxlcyBhcmUgY29uc2lkZXJlZCBpbiBhIGNh
c2NhZGUsIHN0YXJ0aW5nIGF0IHRoZSB0b3AuIEl0J3MgaW1wbGVuZW50ZWQgdXNpbmcgc3dpdGNo
CisjIHN0YXRlbWVudHMgd2hlcmV2ZXIgcG9zc2libGUuCisKKyMgTm90ZTogYWRkaW5nIG1vcmUg
cnVsZXMgdG8gdGhpcyBtYXRjaGVyIGlzIGFuIGV4Y2VsbGVudCB3YXkgb2YgaW1wcm92aW5nIHBl
cmZvcm1hbmNlIQorCitMb2FkID0gTG9hZChhZGRyZXNzKQorCitBZGRMb2FkID0gQWRkKExvYWQo
YWRkcmVzcyksIHZhbHVlKQorQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitTdG9yZUFkZExvYWQg
PSBTdG9yZShBZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQorU3RvcmVBbmRMb2Fk
ID0gU3RvcmUoQW5kKExvYWQoYWRkcmVzcyksIHZhbHVlKSwgYWRkcmVzcykKK1N0b3JlID0gU3Rv
cmUodmFsdWUsIGFkZHJlc3MpCisKK1JldHVybiA9IFJldHVybih2YWx1ZSkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1ZTo6fk1lbW9y
eVZhbHVlKCkKK3sKK30KKwordm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5wcmludCgib2Zm
c2V0ID0gIiwgbV9vZmZzZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzTWVtb3J5VmFsdWVfaAorI2RlZmluZSBCM01lbW9yeVZhbHVl
X2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIE1lbW9yeVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNl
IExvYWRGbG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAg
ICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNh
c2UgU3RvcmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1vcnlW
YWx1ZSgpOworCisgICAgaW50cHRyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55
IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJlcyB0
aGUgcmV0dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2lu
dGVyLAorICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4
LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2Fk
OFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6
CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gRG91YmxlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2Fz
ZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBB
U1NFUlQodHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2Fk
cyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIs
IGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgb3Bj
b2RlID09IExvYWRGbG9hdCA/IERvdWJsZSA6IEludDMyLCBvcmlnaW4sIHBvaW50ZXIpCisgICAg
ICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJM
RUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExv
YWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZa
OgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
c3RvcmVzLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2Rl
IG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwKKyAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2Rl
LCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBj
YXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBj
YXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNNZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKworI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKQor
eworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICAgICAgb3V0
LnByaW50KCJJZGVudGl0eSIpOworICAgICAgICByZXR1cm47CisgICAgICAgIC8vIEZJWE1FCisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09wY29kZV9oCisKKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitlbnVtIE9wY29kZSA6IGludDE2X3QgeworICAgIC8vIEEgbm8tb3AgdGhhdCByZXR1cm5z
IFZvaWQsIHVzZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0byByZW1vdmUgYSB2YWx1ZS4KKyAgICBO
b3AsCisgICAgIAorICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1c2FibGUgd2l0aCBhbnkg
dmFsdWUgdHlwZS4KKyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0YW50cy4gVXNlIHRoZSBD
b25zdFZhbHVlKiBjbGFzc2VzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2wgZmxvdywg
c28gdGhhdCB3ZSBjYW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUgd2Ugd291bGQgY29uc3Ry
dWN0IHRoZW0uIExhcmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRvIGNyZWF0ZS4KKyAgICBD
b25zdDMyLAorICAgIENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisKKyAgICAvLyBUaGUgbWFn
aWNhbCBzdGFjayBzbG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBv
ZiB0aGUgcHJvZ3JhbSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93
IHlvdSBwdXQgaXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRp
c2pvaW50IHJhbmdlIG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZh
bHVlIGNsYXNzLgorICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50
IHJlZ2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUg
cHJvZ3JhbQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBw
dXQgaXQsIGFuZCB0aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1cmUgdGhhdCB3ZQorICAg
IC8vIGRvbid0IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFsbG9jYXRpb24gb3IgY2Fs
bHMgKGVpdGhlciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQorICAgIC8vIHN0YWNrIG9y
IHByZXNlcnZpbmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3RlcikuIFVzZSB0aGUgQXJndW1l
bnRSZWdWYWx1ZSBjbGFzcy4gVGhlIHJldHVybgorICAgIC8vIHR5cGUgaXMgZWl0aGVyIHBvaW50
ZXIoKSAoZm9yIEdQUnMpIG9yIERvdWJsZSAoZm9yIEZQUnMpLgorICAgIEFyZ3VtZW50UmVnLAor
CisgICAgLy8gVGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4gcHV0IHRoaXMgYW55d2hlcmUgaW4g
Y29udHJvbCBmbG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVsZCB0aGUKKyAgICAvLyBmcmFtZSBw
b2ludGVyLCB3aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29tcGlsZXIgY2hhbmdlcyB0aGUgZnJhbWUg
cG9pbnRlciB0ZW1wb3JhcmlseSBmb3Igc29tZQorICAgIC8vIHNpbGx5IHJlYXNvbiwgdGhlIEZy
YW1lUG9pbnRlciBpbnRyaW5zaWMgd2lsbCByZXR1cm4gd2hlcmUgdGhlIGZyYW1lIHBvaW50ZXIg
KnNob3VsZCogYmUgbm90CisgICAgLy8gd2hlcmUgaXQgaGFwcGVucyB0byBiZSByaWdodCBub3cu
CisgICAgRnJhbWVQb2ludGVyLAorCisgICAgLy8gUG9seW1vcnBoaWMgbWF0aCwgdXNhYmxlIHdp
dGggYW55IHZhbHVlIHR5cGUuCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2
LAorCisgICAgLy8gSW50ZWdlciBtYXRoLgorICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAg
ZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCisgICAgTW9kLAorICAgIEJpdEFuZCwKKyAg
ICBCaXRPciwKKyAgICBCaXRYb3IsCisgICAgU2hsLAorICAgIFNTaHIsCisgICAgWlNociwKKwor
ICAgIC8vIENhc3RzIGFuZCBzdWNoLgorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIEludDMyOgor
ICAgIFNFeHQ4LAorICAgIFNFeHQxNiwKKyAgICAvLyBUYWtlcyBJbnQzMiBhbmQgcmV0dXJucyBJ
bnQ2NDoKKyAgICBTRXh0MzIsCisgICAgWkV4dDMyLAorICAgIC8vIFRha2VzIGFuZCByZXR1cm5z
IERvdWJsZToKKyAgICBGUm91bmQsCisgICAgLy8gVGFrZXMgaW50cyBhbmQgcmV0dXJucyBEb3Vi
bGU6CisgICAgSVRvRCwKKyAgICAvLyBUYWtlcyBEb3VibGUgYW5kIHJldHVybnMgSW50MzI6Cisg
ICAgRFRvSTMyLAorCisgICAgLy8gUG9seW1vcnBoaWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRo
IGFueSB2YWx1ZSB0eXBlLiBSZXR1cm5zIGludDMyIDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCisg
ICAgLy8gaXMganVzdCBFcXVhbCh4LCAwKS4KKyAgICBFcXVhbCwKKyAgICBOb3RFcXVhbCwKKyAg
ICBMZXNzVGhhbiwKKyAgICBHcmVhdGVyVGhhbiwKKyAgICBMZXNzRXF1YWwsCisgICAgR3JlYXRl
ckVxdWFsLAorCisgICAgLy8gSW50ZWdlciBjb21wYXJpc29ucy4gUmV0dXJucyBpbnQzMiAwIG9y
IDEuCisgICAgQWJvdmUsCisgICAgQmVsb3csCisgICAgQWJvdmVFcXVhbAorICAgIEJlbG93RXF1
YWwsCisKKyAgICAvLyBNZW1vcnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQg
YW5kIHRoZSBsb2FkZWQgdHlwZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNl
IHJldHVybiBJbnQzMjoKKyAgICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlosCisg
ICAgTG9hZDE2UywKKyAgICAvLyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9hdCwK
KyAgICAvLyBUaGlzIHJldHVybiB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAgTG9h
ZCwKKworICAgIC8vIE1lbW9yeSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1
ZSBpcyBzdG9yZWQuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFu
IEludDMyIHZhbHVlOgorICAgIFN0b3JlOCwKKyAgICBTdG9yZTE2LAorICAgIC8vIFRoaXMgdGFr
ZXMgYSBEb3VibGUgdmFsdWU6CisgICAgU3RvcmVGbG9hdCwKKyAgICAvLyBUaGlzIGlzIGEgcG9s
eW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgYW5kIERvdWJsZToKKyAgICBTdG9yZSwK
KworICAgIC8vIFRoaXMgaXMgYSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNp
bmcgdGhlIHN5c3RlbSBDIGNhbGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhh
dCB0aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIEND
YWxsLAorCisgICAgLy8gVGhpcyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZh
bHVlIGNsYXNzLiBUaGlzIGlzIHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAv
LyBidXQgb25seSBlbWl0cyBjb2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhh
dCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNz
IGEgc3RhY2ttYXAgYWxvbmcgd2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBh
cmd1bWVudCBtdXN0IGJlIHBhc3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhh
dCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwg
dG8gcmVxdWVzdAorICAgIC8vIHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9m
ZnNldCBmcm9tIHRoZSB0b3Agb2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAg
ICAvLyBzdGFjay4KKyAgICBQYXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2Ug
dGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29k
ZSBnZW5lcmF0aW9uCisgICAgLy8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0
IHNvbWUgY29kZSBhZnRlciB0aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAK
KyAgICAvLyBmcm9tIHRoZSBjaGVjaywgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3Ug
YWxzbyBnZXQgdG8gc3VwcGx5IGEgc3RhY2ttYXAuIE5vdGUgdGhhdCB5b3UKKyAgICAvLyBhcmUg
bm90IGFsbG93ZWQgdG8ganVtcCBiYWNrIGludG8gdGhlIG1haW5saW5lIGNvZGUgZnJvbSB5b3Vy
IHNsb3cgcGF0aCwgc2luY2UgdGhlIGNvbXBpbGVyCisgICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0
aGUgZXhlY3V0aW9uIG9mIHRoZXNlIGluc3RydWN0aW9ucyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBk
aWRuJ3QgaGFwcGVuLiBGb3IKKyAgICAvLyBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tB
ZGQnczoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBDaGVj
a0FkZCh4LCB5KQorICAgIC8vCisgICAgLy8gVGhlbiBpdCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlz
IHRvOgorICAgIC8vCisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IElkZW50
aXR5KGEpCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNh
bGxiYWNrcyB1c2VkIGJ5IHRoZSB0d28gQ2hlY2tBZGRzLiBUaGV5IG1heSBoYXZlIGRpZmZlcmVu
dAorICAgIC8vIGNhbGxiYWNrcy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2
ZW4gaWYgdGhleSBhcmUgZGlmZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisgICAgLy8gYWZ0
ZXIgdGhlIGZpcnN0IENoZWNrQWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxk
IG5vdCBoYXZlIHBvc3NpYmx5IHRha2VuIHNsb3cKKyAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRo
ZSBzZWNvbmQgQ2hlY2tBZGQncyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIENoZWNrQWRk
LAorICAgIENoZWNrU3ViLAorICAgIENoZWNrTXVsLAorCisgICAgLy8gQ2hlY2sgdGhhdCBzaWRl
LWV4aXRzLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVu
ZHMsIHRoaXMgaGFzIGEKKyAgICAvLyBzdGFja21hcCB3aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFj
ay4gVGhpcyB0YWtlcyBhbiBJbnQzMiBhcmd1bWVudCB0aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdp
dGgKKyAgICAvLyBmdWxsIGJyYW5jaCBmdXNpb24gaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9y
LiBBIHRydWUgdmFsdWUganVtcHMgdG8gdGhlIGdlbmVyYXRvcidzIHNsb3cKKyAgICAvLyBwYXRo
LgorICAgIENoZWNrLAorCisgICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcg
U1NBLgorICAgIFVwc2lsb24sIC8vIFRoaXMgdXNlcyB0aGUgVXBzaWxvblZhbHVlIGNsYXNzLgor
ICAgIFBoaSwKKworICAgIC8vIEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAg
ICBKdW1wLAorICAgIAorICAgIC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55
IHZhbHVlIHR5cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAg
IC8vIENvbnRyb2xWYWx1ZSBjbGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcg
dGhlIHRydWUgc3VjY2Vzc29yLgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNo
ZXMgb3ZlciBlaXRoZXIgSW50MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNz
LgorICAgIFN3aXRjaCwKKworICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMg
ZG9uJ3Qga25vdyB0aGVpciByZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55
CisgICAgLy8gdHlwZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIFJldHVybiwK
KworICAgIC8vIFRoaXMgaXMgYSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwg
bmV2ZXIgZ2V0IGhlcmUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIz
OjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzT3Bjb2RlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBPcmlnaW46OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9yaWdpbigiLCBSYXdQb2ludGVyKG1f
ZGF0YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09y
aWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2hvZXZlciBnZW5lcmF0
ZXMgQjNJUiBjYW4gY2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZhbHVlcy4gV2hlbiB5b3UgZG8g
dGhpcywgQjMgd2lsbCBiZSBhYmxlIHRvCisvLyBhY2NvdW50LCBkb3duIHRvIHRoZSBtYWNoaW5l
IGNvZGUsIHdoaWNoIGluc3RydWN0aW9uIGNvcnJlc3BvbmRzIHRvIHdoaWNoIG9yaWdpbi4gQjMK
Ky8vIHRyYW5zZm9ybWF0aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdpbnMgY2FyZWZ1bGx5LiBJdCdz
IGFuIGVycm9yIHRvIHdyaXRlIGEgdHJhbnNmb3JtYXRpb24gdGhhdAorLy8gZWl0aGVyIGRyb3Bz
IE9yaWdpbnMgb3IgbGllcyBhYm91dCB0aGVtLgorY2xhc3MgT3JpZ2luIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBPcmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9IG51bGxwdHIpCisgICAgICAgIDog
bV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCB2b2lkKiBtX2RhdGE7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzT3JpZ2luX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNo
cG9pbnRWYWx1ZS5oIgorCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZh
bHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIG91dC5wcmludChj
b21tYSwgInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOworICAgIGlmIChzaGFkb3cpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgInNoYWRvdyA9ICIsIHNoYWRvdyk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBv
aW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNo
cG9pbnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2luY2x1ZGUgIkIz
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQYXRjaHBvaW50VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IFBhdGNocG9pbnQ7IH0KKworICAgIH5QYXRjaHBvaW50VmFsdWUoKTsKKworICAgIFN0
YWNrbWFwIHN0YWNrbWFwOworICAgIHVuc2lnbmVkIHNoYWRvdyB7IDAgfTsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5j
eUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBl
LCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQorCitQcm9j
ZWR1cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJs
b2NrKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBzdGQ6Om1h
a2VfdW5pcXVlPEJhc2ljQmxvY2s+KG1fYmxvY2tzLnNpemUoKSk7CisgICAgQmFzaWNCbG9jayog
cmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9j
aykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlz
KQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1By
b2NlZHVyZV9oCisKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2Nr
OworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFByb2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUHJvY2VkdXJlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KworICAgIFByb2NlZHVyZSgpOworICAgIH5Qcm9jZWR1cmUoKTsKKworICAgIEJhc2ljQmxvY2sq
IGFkZEJsb2NrKCk7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNp
Y0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRl
eCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJh
dG9yKCk6CisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAs
IG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJv
Y2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2Nl
ZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9
CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5z
aWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdo
aWxlIChpbmRleCA8IG1fcHJvY2VkdXJlLT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRl
eCkpCisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmV4Owor
ICAgICAgICB9CisKKyAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcigqdGhpcywgbnVtQmxvY2tzKCkpOyB9CisKKyAgICBjbGFzcyBWYWx1ZXND
b2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlc0NvbGxlY3Rpb24oUHJvY2Vk
dXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpOgorICAgICAgICAgICAgICAgIDogbV9wcm9j
ZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnBy
b2NlZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZhbHVlKiBvcGVyYXRvciooKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+YmxvY2sobV9pbmRl
eCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisKKyAgICAgICAgICAgIFBy
b2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
ICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IobV9wcm9jZWR1cmUsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9
CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1f
dmFsdWVzLnNpemUoKTsgfQorICAgICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzW2luZGV4XTsgfQorICAgICAgICBWYWx1ZSog
b3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Cisg
ICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7Cisg
ICAgfTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gVmFsdWVzQ29s
bGVjdGlvbigqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVl
Pj4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEIzUHJvY2VkdXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQ
cm9jZWR1cmVJbmxpbmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2luY2x1
ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogUHJvY2VkdXJlOjphZGQoQXJndWVudHMu
Li4gYXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5l
dyBWYWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5
cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUo
dmFsdWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90VmFsdWU6
On5TdGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90VmFsdWU6OmR1bXBNZXRh
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIs
IG1fYnl0ZVNpemUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCisjZGVmaW5lIEIzU3RhY2tT
bG90VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IFN0YWNrU2xvdDsgfQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNp
Z25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKworICAgIC8vIFRo
aXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBZb3UgY2Fubm90IHJl
bHkgb24gaXQgaGF2aW5nIGEgbWVhbmluZ2Z1bAorICAgIC8vIHZhbHVlIHdoaWxlIHRoZSBjb21w
aWxlciBpcyBydW5uaW5nLgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgU3RhY2tT
bG90LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQor
ICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVk
IG1fYnl0ZVNpemU7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0g
IiwgUmF3UG9pbnRlcihtX29wYXF1ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAor
ICAgICAgICAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwg
IiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMg
PSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisj
aW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEIzVmFsdWU7CisKK2NsYXNzIFN0YWNr
bWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7CisgICAgICAgIC8v
IFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAgICAgICBWYWx1
ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFN0
YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBqdW1wIHRvIHRoZSBz
bG93IHBhdGgsIGlmIHRoaXMgaXMgYSBzdGFja21hcCBmb3IgYSBDaGVjayB2YWx1ZS4KKyAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXA7CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZv
aWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFt
cyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9y
OworICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUg
b3BhcXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVj
YXVzZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFu
ZCBlYWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxs
b2NhdGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBi
ZSBhYmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVy
ZXMKKyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBz
ZXRPcGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJh
bWV0ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVl
OyB9CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0
ZWFkIG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQor
ICAgIHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAg
ICB9CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0
PHNpemVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8g
dGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNrbWFwLiBOb3RlIHRoYXQgaW5kZXggemVybyBy
ZWZlcnMgdG8gdGhlCisgICAgLy8gZmlyc3QgYXJndW1lbnQgdG8gdGhhdCBWYWx1ZSwgZXZlbiBp
ZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3IgZXhhbXBsZSwgaW4gYQor
ICAgIC8vIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4g
aW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdCB3b3VsZAorICAgIC8vIGJlIGFu
IGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhlIGdlbmVyYXRpb24gY2Fs
bGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuIGRlcGVuZAorICAgIC8vIG9uIHRoZSByZXBzIGZvciB0
aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNvbnN0cmFpbih1bnNpZ25l
ZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCAr
IDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBzLmdyb3coaW5kZXggKyAxKTsK
KyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisKKyAgICB2b2lkIGNsb2JiZXIo
Y29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fY2xvYmJlcmVkLm1lcmdl
KHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNsb2JiZXJlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lkIHNldEdlbmVyYXRvcihSZWZQdHI8
R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGdlbmVy
YXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
c2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX2dl
bmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+KGZ1bmN0b3IpOwor
ICAgIH0KKworICAgIC8vIFRoZXNlIHdpbGwgcmV0dXJuIGludGVyZXN0aW5nIHRoaW5ncyBpbnNp
ZGUgdGhlIGdlbmVyYXRvciBjYWxsYmFjaywgb3IgYWZ0ZXIgY29tcGlsYXRpb24uCisgICAgY29u
c3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsgfQorICAg
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2Vk
UmVnaXN0ZXJzOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgdm9pZCogbV9vcGFxdWUgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFZh
bHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAg
UmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJz
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFw
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3
aXRjaENhc2UuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2FzZVZhbHVlLCAiLT4iLCBwb2ludGVyRHVt
cChtX3RhcmdldCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNTd2l0Y2hDYXNlX2gKKyNkZWZpbmUgQjNTd2l0Y2hDYXNlX2gKKworI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK2Ns
YXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRjaENhc2UoKQorICAgIHsKKyAgICB9
CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVlLCBCYXNpY0Jsb2NrKiB0YXJnZXQp
CisgICAgICAgIDogbV9jYXNlVmFsdWUoY2FzZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRh
cmdldCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0KKworICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQoKSBjb25zdCB7
IHJldHVybiBtX3RhcmdldDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGludDY0X3QgY2FzZVZhbHVlOworICAgIEJhc2ljQmxvY2sq
IHRhcmdldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNT
d2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZh
bHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsZHVlICJCM1N3aXRjaFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitTd2l0Y2hWYWx1ZTo6flN3aXRjaFZhbHVlKCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0
Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBTd2l0Y2hDYXNlIHJl
c3VsdCA9IG1fc3VjY2Vzc29yc1tpbmRleF07CisgICAgbV9zdWNjZXNzb3JzW2luZGV4XSA9IG1f
c3VjY2Vzc29ycy5sYXN0KCk7CisgICAgbV9zdWNjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFN3aXRjaFZhbHVlOjphcHBlbmRDYXNlKGNvbnN0IFN3
aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChtX3N1Y2Nl
c3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3NvcnNbbV9zdWNjZXNzb3JzLnNpemUoKSAtIDJd
ID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoc3dpdGNoQ2FzZS5j
YXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBkZXN0cnVjdGl2ZWx5IG92ZXJyaWRlcyBDb250
cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91dC5wcmludChsaXN0RHVtcCgqdGhpcykpOwor
fQorCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmln
aW4sIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBT
d2l0Y2gsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1N3aXRjaFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpbmNsdWRlICJCM0Nv
bnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsg
cmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAg
Ly8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQg
bnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAg
Ly8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4
LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlc1tpXTsgfQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICBCYXNpY0Jsb2NrKiBmYWxsVGhy
b3VnaCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKyAgICBCYXNpY0Js
b2NrKiYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisKKyAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtQ2FzZVZhbHVlcygpOyB9CisgICAg
U3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nlc3NvcihpbmRleCkpOworICAgIH0K
KyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2go
bnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBpdGVyYXRvcihTd2l0Y2hWYWx1ZSYgc3dpdGNoVmFsdWUsIHVuc2lnbmVkIGlu
ZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dpdGNoVmFsdWUpCisgICAgICAgICAgICAs
IG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFN3aXRjaENh
c2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc3dpdGNoLT5h
dChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3dp
dGNoVmFsdWUqIG1fc3dpdGNoOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisK
KyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsg
fQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXpl
KCkpOyB9CisKKyAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIGNhc2UgYW5kIHJlb3JkZXJzIHRoaW5n
cyBhIGJpdC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0aGUgY2FzZXMgZnJvbSAwIHRvIE4sCisgICAg
Ly8gdGhlbiB5b3UgY2FuIGtlZXAgaXRlcmF0aW5nIGFmdGVyIHRoaXMgc28gbG9uZyBhcyB5b3Ug
cmV2aXNpdCB0aGlzIHNhbWUgaW5kZXggKHdoaWNoIHdpbGwgbm93CisgICAgLy8gY29udGFpbiBz
b21lIG90aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJlbW92ZXMgdGhlIGNhc2UgdGhhdCB3YXMgcmVt
b3ZlZC4KKyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgpOworCisgICAg
dm9pZCBhcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpOworCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTd2l0Y2hWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayogZmFsbFRocm91Z2gpOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N3aXRjaFZhbHVl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKworI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlIHR5
cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICBvdXQu
cHJpbnQoIlZvaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzI6CisgICAgICAg
IG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50NjQ6Cisg
ICAgICAgIG91dC5wcmludCgiSW50NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91
YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gVHlwZSB7
CisgICAgVm9pZCwKKyAgICBJbnQzMiwKKyAgICBJbnQ2NCwKKyAgICBEb3VibGUKK307CisKK2lu
bGluZSBib29sIGlzSW50KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBJbnQzMiB8
fCB0eXBlID09IEludDY0OworfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGUgdHlwZSkKK3sK
KyAgICByZXR1cm4gdHlwZSA9PSBEb3VibGU7Cit9CisKK2lubGluZSBUeXBlIHBvaW50ZXIoKSBj
b25zdAoreworICAgIGlmIChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgIHJldHVybiBJbnQz
MjsKKyAgICByZXR1cm4gSW50NjQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCitu
YW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vw
c2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3Zv
aWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiXiIsIG1fcGhpLT5pbmRleCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXBzaWxvblZhbHVlX2gKKyNkZWZp
bmUgQjNVcHNpbG9uVmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVXBzaWxvblZhbHVlIDogcHVibGljIFZhbHVl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0
dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9CisKKyAgICB+VXBzaWxvblZhbHVlKCk7CisKKyAgICBW
YWx1ZSogcGhpKCkgY29uc3QgeyByZXR1cm4gbV9waGk7IH0KKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIFVwc2lsb25WYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhpKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwgdmFsdWUpCisgICAgICAgICwgbV9w
aGkocGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gcGhpLT50eXBl
KCkpOworICAgIH0KKworICAgIFZhbHVlKiBtX3BoaTsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gQjNVcHNpbG9uVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitWYWx1ZTo6flZhbHVlKCkKK3sKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJ
ZGVudGl0eShWYWx1ZSogdmFsdWUpCit7CisgICAgLy8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQg
ZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNlbWVudCBvZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0
aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBsYWluIElkZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xs
ZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUK
KyAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRo
ZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4KKworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRl
eDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5cGU7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2lu
OworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxh
Y2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisgICAgdm9pZCogbWlzYyA9IHRoaXMtPm1pc2M7
CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhp
cy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSAoaW5kZXgsIElkZW50aWZ5LCB0
eXBlLCBvcmlnaW4sIHZhbHVlKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhp
cy0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKKyAgICB0aGlzLT5taXNjID0gbWlzYzsKK30K
Kwordm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0aGlz
LCAiID0gIiwgbV9vcGNvZGUpOworCisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRT
dHJlYW0gc3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBz
dHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkK
KyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOworCisgICAgb3V0LnByaW50KCIpIik7
Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2ludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0lu
dDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFz
SW50NjQoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFZh
bHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5
cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3Vi
OgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAg
Y2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJp
dFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAg
IGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgor
ICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVy
OgorICAgICAgICByZXR1cm4gcG9pbnRlcigpOworICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBT
RXh0MTY6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVx
dWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNl
IExlc3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAg
IGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoK
KyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMy
OgorICAgICAgICByZXR1cm4gSW50NjQ7CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9E
OgorICAgICAgICByZXR1cm4gRG91YmxlOworICAgIGNhc2UgTm9wOgorICAgICAgICByZXR1cm4g
Vm9pZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gK
KyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIz
VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1
ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFsdWUpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNl
bmN5TGlzdDsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIkAiOworCisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZp
cnR1YWwgflZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUs
IGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZhbHVlcyB3aXRoIGlkZW50aXR5LgorICAgIE9wY29kZSBv
cGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNp
Z25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hp
bGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisK
KyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBlIHVzaW5nIHRoZSBvcGNvZGUuCisgICAgVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBj
aGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlz
dCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJl
cGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKKyAgICAvLyBUaGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMu
IEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3
ZSBoYXZlIGEKKyAgICAvLyBBcmd1bWVudFJlZ1ZhbHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisg
ICAgLy8gaWYgKEFyZ3VtZW50UmVnVmFsdWUqIGFyZ3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3Vt
ZW50UmVnVmFsdWU+KCkpIHsKKyAgICAvLyAgICAgdGhpbmdzCisgICAgLy8gfQorICAgIC8vCisg
ICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRS
ZWcuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGlzIHJldHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6
OmFjY2VwdHMob3Bjb2RlKCkpIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBUKiBhcygpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCog
YXMoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJf
dCBhc0ludDMyKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAg
IGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAg
ICBpbnQ2NF90IGFzSW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBj
b25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91YmxlIGFzRG91Ymxl
KCkgY29uc3Q7CisKKyAgICBTdGFja21hcCogc3RhY2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAg
IHZpcnR1YWwgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8vIEluc3RhbnRpYXRl
IHZhbHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5
aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUo
b3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdp
bikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAg
IHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4
cGxpY2l0bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3Jp
Z2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2Rl
KQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAg
ICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNh
biBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGls
ZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAg
ICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUs
IGZpcnN0Q2hpbGQpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2No
aWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8g
VGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUg
ZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8vIHRha2UgYW55IGFy
Z3VtZW50czoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29k
ZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1f
b3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIp
KQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCisgICAgZXhwaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lM
aXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bj
b2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihv
cmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikKKyAgICB7CisgICAgfQorCisg
ICAgc3RhdGljIFR5cGUgdHlwZUZvcihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKworICAg
IC8vIFRoaXMgZ3JvdXAgb2YgZmllbGRzIGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgor
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgIFR5cGUgbV90
eXBlOworICAgIAorICAgIE9yaWdpbiBtX29yaWdpbjsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hp
bGRyZW47CisKK3B1YmxpYzoKKyAgICBCYXNpY0Jsb2NrKiBvd25lciB7IG51bGxwdHIgfTsgLy8g
Y29tcHV0ZWQgbGF6aWx5LgorICAgIFZhbHVlKiByZXBsYWNlbWVudCB7IG51bGxwdHIgfTsgLy8g
dXNlZCBmb3IgYW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KKyAgICB2b2lkKiBtaXNjIHsg
bnVsbHB0ciB9OworfTsKKworY2xhc3MgRGVlcFZhbHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVl
cFZhbHVlRHVtcChWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQor
Citwcml2YXRlOgorICAgIFZhbHVlKiBtX3ZhbHVlOworfTsKKworRGVlcFZhbHVlRHVtcCBkZWVw
RHVtcChWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJuIERlZXBWYWx1ZUR1bXAodmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzVmFsdWVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZUlubGluZXNfaAorI2RlZmluZSBCM1ZhbHVl
SW5saW5lc19oCisKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0
MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25z
dERvdWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorVCogVmFsdWU6OmFzKCkKK3sKKyAgICBpZiAoVDo6YWNjZXB0cyhvcGNv
ZGUoKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPnR5cGVuYW1lIFQ+Citjb25zdCBUKiBWYWx1ZTo6YXMo
KSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFZhbHVlKj4odGhpcyktPmFzPFQ+KCk7
Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxD
b25zdDMyVmFsdWU+KCk7Cit9CisKK2ludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBjb25zdAorewor
ICAgIHJldHVybiBhczxDb25zdDMyVmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2Jvb2wgVmFsdWU6
Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDY0VmFsdWU+KCk7Cit9
CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25z
dDY0VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGhhc0ludDMyKCkgfHwgaGFzSW50NjQoKTsKK30KKworaW50NjRfdCBWYWx1
ZTo6YXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpID8gYXNJbnQzMigpIDog
YXNJbnQ2NCgpOworfQorCitib29sIFZhbHVlOjppc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdAor
eworICAgIHJldHVybiBoYXNJbnQoKSAmJiBhc0ludCgpID09IHZhbHVlOworfQorCitib29sIFZh
bHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0RG91YmxlVmFs
dWU+KCk7Cit9CisKK2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVy
biBhczxDb25zdERvdWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQorCitTdGFja21hcCogVmFsdWU6
OnN0YWNrbWFwKCkKK3sKKyAgICBpZiAoQ2hlY2tWYWx1ZSogY2hlY2sgPSBhczxDaGVja1ZhbHVl
PigpKQorICAgICAgICByZXR1cm4gJmNoZWNrLT5zdGFja21hcDsKKyAgICBpZiAoUGF0Y2hwb2lu
dFZhbHVlKiBwYXRjaHBvaW50ID0gYXM8UGF0Y2hwb2ludFZhbHVlPigpKQorICAgICAgICByZXR1
cm4gJnBhdGNocG9pbnQtPnN0YWNrbWFwOworICAgIHJldHVybiBudWxscHRyOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzVmFsdWVJbmxpbmVzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNo
IChtX2tpbmQpIHsKKyAgICBjYXNlIE5vbmU6CisgICAgY2FzZSBTb21lUmVnaXN0ZXI6CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIigiLCBy
ZWcoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIG91
dC5wcmludCgiKCIsIG9mZnNldEZyb21GUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTdGFja0FyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tU1Ao
KSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91
dC5wcmludCgiKCIsIHZhbHVlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZhbHVlUmVwOjpLaW5kIGtpbmQpCit7
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICBv
dXQucHJpbnQoIkFueSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgi
UmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgor
ICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZh
bHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrQXJndW1lbnQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAg
ICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1ZhbHVlUmVwX2gKKyNkZWZpbmUgQjNWYWx1ZVJlcF9oCisKKyNpbmNsdWRl
ICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHVzZSB0aGlzIGNsYXNzIHRvIGRlc2NyaWJlIHZhbHVl
IHJlcHJlc2VudGF0aW9ucyBhdCBzdGFja21hcHMuIEl0J3MgdXNlZCBib3RoIHRvIGZvcmNlIGEK
Ky8vIHJlcHJlc2VudGF0aW9uIGFuZCB0byBnZXQgdGhlIHJlcHJlc2VudGF0aW9uLiBXaGVuIHRo
ZSBCMyBjbGllbnQgZm9yY2VzIGEgcmVwcmVzZW50YXRpb24sIHdlIHNheQorLy8gdGhhdCBpdCdz
IGFuIGlucHV0LiBXaGVuIEIzIHRlbGxzIHRoZSBjbGllbnQgd2hhdCByZXByZXNlbnRhdGlvbiBp
dCBwaWNrZWQsIHdlIHNheSB0aGF0IGl0J3MgYW4KKy8vIG91dHB1dC4KKworY2xhc3MgVmFsdWVS
ZXAgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJl
cHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgY2FuIHBpY2sgYW55IHJlcHJlc2VudGF0
aW9uLgorICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRp
b24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLCBwcm92aWRl
ZCB0aGF0CisgICAgICAgIC8vIGl0J3Mgbm90IGFsc28gYSByZWdpc3RlciB0aGF0IHdhcyBjbG9i
YmVyZWQuCisgICAgICAgIFNvbWVSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCBy
ZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiBBcyBhbiBv
dXRwdXQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCByZWdp
c3RlciBCMyBwaWNrZWQuCisgICAgICAgIFJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIG91
dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMgcGlj
a2VkLiBJdCdzIG5vdCBhIHZhbGlkCisgICAgICAgIC8vIGlucHV0IHJlcHJlc2VudGF0aW9uLgor
ICAgICAgICBTdGFjaywKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwg
dGhpcyBmb3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUgYXJndW1lbnQgYXJlYSBhdCBz
b21lCisgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgU3RhY2tBcmd1bWVudCwKKworICAgICAg
ICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgdGhhdCBCMyBj
b25zdGFudC1mb2xkZWQgdGhlIHZhbHVlLgorICAgICAgICBDb25zdGFudAorICAgIH07CisgICAg
CisgICAgVmFsdWVSZXAoKQorICAgICAgICA6IG1fa2luZChBbnkpCisgICAgeworICAgIH0KKwor
ICAgIGV4cGxpY2l0IFZhbHVlUmVwKFJlZyByZWcpCisgICAgICAgIDogbV9raW5kKFJlZ2lzdGVy
KQorICAgICAgICAsIG1fdmFsdWUocmVnLmluZGV4KCkpCisgICAgeworICAgIH0KKworICAgIHN0
YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJl
cChyZWcpOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFjayhpbnRwdHJfdCBvZmZz
ZXRGcm9tRlApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tRlA7
CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrQXJndW1lbnQoaW50cHRyX3Qgb2Zm
c2V0RnJvbVNQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gU3RhY2tBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZz
ZXRGcm9tU1A7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGludDY0X3Qg
dmFsdWUpCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICB9
CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoZG91YmxlIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFZhbHVlUmVwKGJpdHdpc2VfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAg
IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBBbnk7IH0KKwor
ICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZWdp
c3Rlcik7CisgICAgICAgIHJldHVybiBSZWc6OmZyb21JbmRleChtX3ZhbHVlKTsKKyAgICB9CisK
KyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
bV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2tBcmd1bWVudCk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV92YWx1ZSk7CisgICAgfQorCisgICAgaW50NjRf
dCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IENvbnN0YW50
KTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCisgICAgZG91YmxlIGRvdWJsZVZh
bHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2
YWx1ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBLaW5kIG1fa2luZDsKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlZhbHVlUmVwOjpLaW5kKTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM1ZhbHVlUmVwX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3NSBAQAorIyEvdXNyL2Jpbi9l
bnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJl
ICJwYXRobmFtZSIKKworJHZhckluZGV4ID0gMAorZGVmIG5ld1ZhcgorICAgICR2YXJJbmRleCAr
PSAxCisgICAgIl90bXAjeyR2YXJJbmRleH0iCitlbmQKKworY2xhc3MgUHJvZHVjdGlvbgorICAg
IGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpuYW1lLCA6dmFyTmFtZSwgOmFub255bW91cywgOm9wY29k
ZSwgOmNoaWxkcmVuCisKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIG5hbWUsIG9wY29kZSwg
Y2hpbGRyZW4pCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQG5hbWUgPSBuYW1l
CisgICAgICAgIEBhbm9ueW1vdXMgPSAobmFtZSA9PSBuaWwgb3IgbmFtZSA9fiAvXEFcJChbMC05
XSspXFovKQorICAgICAgICBAdmFyTmFtZSA9IEBhbm9ueW1vdXMgPyBuZXdWYXIgOiBuYW1lCisg
ICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4gPyBj
aGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAgIG9wY29k
ZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAg
IGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNoaWxkLCBpbmRleCB8
CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQubmFt
ZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAgICAgICAgICAgICBj
aGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9uT3Bl
cmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAorICAgICAgICAg
ICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykKKyAg
ICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3JlYWRlciA6
bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9u
cykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rp
b25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVO
YW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5l
TnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJl
ciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tm
aWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAg
IGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShv
cmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5n
ID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBv
dGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIK
KyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9
IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBl
cnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVy
cm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAor
CitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmls
ZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5v
dCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0q
KS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisg
ICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAx
CisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLworICAgICAgICAg
ICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwg
JCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFj
ZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0IDw8
IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmls
ZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIw
XS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAg
ICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMgV2Ug
Y2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3
YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcikpXFov
CitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEFbYS16QS1a
MC05JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKwor
Y2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAg
IEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5k
CisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAg
ZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VF
cnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNl
RXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1w
dHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBl
bmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQK
KyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigi
RXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZh
bmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0
ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIi
KSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICBy
ZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHBy
b2R1Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0gcHJvZHVjdGlvbi52YXJOYW1lCisgICAgICAg
ICAgICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0aW9uIGhhcyBzYW1lIG5hbWUgYXMgcGFyZW50
IHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0
IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAg
IHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAgICAg
IHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQorICAg
ICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAgICAgICBtYXRjaGVyTmFtZSA9IGNvbnN1bWVJ
ZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorCisgICAgICAgIGxvb3Agewor
ICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAg
ICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVkZSIuIElmIHdlIGRpZCB0aGF0LCBp
dCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAgYWRkVW5pcXVlKG1hdGNoZXJOYW1lLCBwcm9k
dWN0aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorICAgICAgICB9CisKKyAgICAgICAgTWF0Y2hlci5u
ZXcobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlUHJv
ZHVjdGlvbgorICAgICAgICBvcmlnaW4gPSB0b2tlbi5vcmlnaW4KKyAgICAgICAgbmFtZSA9IGNv
bnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgaWYgdG9rZW4gPT0gIj0iCisgICAgICAgICAgICBj
b25zdW1lKCI9IikKKyAgICAgICAgICAgIG9wY29kZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAg
ICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgZWxzaWYgdG9rZW4gPT0gIigiCisgICAgICAg
ICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgICAgIG9wY29kZSA9IG5hbWUKKyAgICAgICAgICAg
IG5hbWUgPSBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFByb2R1Y3Rpb24u
bmV3KG9yaWdpbiwgbmFtZSwgbmlsLCBuaWwpCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAg
ICAgcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlm
IHRva2VuID09ICIpIgorCisgICAgICAgICAgICBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMs
IHBhcnNlUHJvZHVjdGlvbikKKworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisg
ICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgfQorCisgICAgICAgICMgQWR2YW5jZSBh
ZnRlciB0aGUgIikiCisgICAgICAgIGFkdmFuY2UKKworICAgICAgICBQcm9kdWN0aW9uLm5ldyhv
cmlnaW4sIG5hbWUsIG9wY29kZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCitlbmQKKworZmlsZU5h
bWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoZmlsZU5hbWUpLCBm
aWxlTmFtZSkKK21hdGNoZXIgPSBwYXJzZXIucGFyc2UKKworY2xhc3MgU3ViTWF0Y2gKKyAgICBh
dHRyX3JlYWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0aW9ucworICAgIAorICAgIGRlZiBpbml0aWFs
aXplKGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBpbmRleE1hcCA9IFtdCisgICAg
ICAgIEBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAg
ICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwIDw8IGluZGV4CisgICAgICAgICAg
ICBAcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQK
KworICAgIGRlZiBtYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICBpbmRleExpc3QubWFw
IHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwW2luZGV4XQor
ICAgICAgICB9CisgICAgZW5kCitlbmQKKworRmlsZS5vcGVuKCJCMyIgKyBtYXRjaGVyLm5hbWUg
KyAiLmgiLCAidyIpIHsKKyAgICB8IG91dHAgfAorCisgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0
ZWQgYnkgZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxlTmFtZX0gLS0gZG8g
bm90IGVkaXQhIgorCisgICAgb3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRjaGVyLm5hbWV9X2gi
CisgICAgb3V0cC5wdXRzICIjZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgCisgICAg
b3V0cC5wdXRzICIjaW5jbHVkZSBcIkIzVmFsdWUuaFwiIgorICAgIAorICAgIG91dHAucHV0cyAi
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgcnVuI3ttYXRjaGVyLm5h
bWV9KFZhbHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91dHAucHV0cyAieyIK
KworICAgICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBj
b2RlLCBiZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91CisgICAgIyB3YW50
IHRvIHNlZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGluIGEgZ29vZCB0ZXh0
IGVkaXRvciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlvdS4KKworICAgICMg
SW4gb2RkIHNpdHVhdGlvbnMsIHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2YWx1ZS4gVGVsbCB0
aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgIG91dHAucHV0cyAiVU5VU0VE
X1BBUkFNKF92YWx1ZSk7IgorICAgICAgICAKKyAgICAjIFRoaXMganVzdCBwcm90ZWN0cyB0aGUg
Y2FsbGVyIGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25zIGhhdmluZyBkaWZm
ZXJlbnQgbGVuZ3Rocy4KKyAgICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBwcm9k
dWN0aW9ucykKKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVh
Y2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAg
ICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVsw
XV0uY2hpbGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAg
ICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAg
ICB9CisKKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0
IHwKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uY2hpbGRy
ZW4ubGVuZ3RoCisgICAgICAgICAgICBpZiBsZW5ndGggPiAwCisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGlsZHJlbi5zaXplKCkgPj0gI3tsZW5ndGh9KSB7
IgorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExp
c3QKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRoaXMgZWZm
aWNpZW50bHkgc2VsZWN0cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgcHJvZHVjdGlvbnMuIEl0IGFz
c3VtZXMgdGhhdCBwcm9kdWN0aW9ucworICAgICMgYXJlIG5vdCBkdXBsaWNhdGVkLiBJdCB5aWVs
ZHMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBhbmQgdGhlIGNvcm91dGluZSBp
cworICAgICMgcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIHNwZWNpZmljIGNvZGUgZm9yIHRoYXQg
cHJvZHVjdGlvbi4gVGhlIGNvcm91dGluZSBpcyBnaXZlbiBsaXN0cyBvZgorICAgICMgaW5kaWNl
cyBvZiBwb3NzaWJseS1tYXRjaGluZyBwcm9kdWN0aW9ucy4KKyAgICBkZWYgbWF0Y2hQcm9kdWN0
aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICAjIEZpcnN0LCBzcGxp
dCB0aGUgcHJvZHVjdGlvbnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJvZHVjdGlvbnMgd2l0aCBhbiBv
cGNvZGUgYW5kIHByb2R1Y3Rpb25zCisgICAgICAgICMgd2l0aG91dCBvbmUuCisgICAgICAgIGlu
ZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAg
ICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3Rz
Wy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmhhc09wY29kZSA9PSBwcm9k
dWN0aW9uLmhhc09wY29kZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhd
CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgIyBOb3csIGVt
aXQgcGF0dGVybiBtYXRjaGluZyBjb2RlLiBXZSBkbyBpdCBkaWZmZXJlbnRseSBmb3IgbGlzdHMg
d2l0aCBhbiBvcGNvZGUgdGhhbiBmb3IKKyAgICAgICAgIyBsaXN0cyB3aXRob3V0IG9uZS4KKyAg
ICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAg
ICAgICAgIGlmIHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFzT3Bjb2RlCisgICAgICAgICAg
ICAgICAgIyBOb3csIHdlIHNwbGl0IHRoaXMgaW5kZXggbGlzdCBpbnRvIGdyb3VwcyBmb3IgZWFj
aCBvcGNvZGUuCisgICAgICAgICAgICAgICAgZ3JvdXBzID0ge30KKyAgICAgICAgICAgICAgICBp
bmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAg
ICAgICAgICAgICBwcm9kdWN0aW9uID0gcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICAg
ICAgICAgIGlmIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0gPDwgaW5kZXgKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2Rl
XSA9IFtpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRlbWVudC4KKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5vcGNvZGUoKSkgeyIKKyAgICAg
ICAgICAgICAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvcGNv
ZGUsIHN1YkluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e29wY29kZX06IgorICAgICAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhz
dWJJbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgICAgICBtYXRjaExlbmd0
aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBz
dWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVl
TmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRl
eExpc3QgfAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3Qo
aW5kZXhMaXN0KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9
CisgICAgZW5kCisKKyAgICAjIFRha2VzIHByb2R1Y3Rpb25zIHRoYXQgaGF2ZSB0aGUgc2FtZSBv
cGNvZGUgYW5kIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBmcm9tIHRoZW0gYmFzZWQgb24K
KyAgICAjIHRoZSBwcm9kdWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29sdW1uLgorICAgIGRlZiBtYXRj
aENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCkKKyAgICAg
ICAgaWYgY29sdW1uSW5kZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hpbGRyZW4ubGVuZ3RoCisgICAg
ICAgICAgICB5aWVsZCAoMC4uLihwcm9kdWN0aW9ucy5zaXplKSkudG9fYQorICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgIGVuZAorCisgICAgICAgIHN1YlZhbHVlID0gbmV3VmFyCisgICAgICAg
IAorICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7c3Vi
VmFsdWV9ID0gI3t2YWx1ZU5hbWV9LT5jaGlsZCgje2NvbHVtbkluZGV4fSk7IgorCisgICAgICAg
ICMgV2UgbWF5IG5vdCB1c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwg
b3V0IGFib3V0IGl0LgorICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3N1YlZhbHVl
fSk7IgorICAgICAgICAKKyAgICAgICAgc3ViUHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucy5tYXAg
eworICAgICAgICAgICAgfCBwcm9kdWN0aW9uIHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uY2hp
bGRyZW5bY29sdW1uSW5kZXhdCisgICAgICAgIH0KKworICAgICAgICBtYXRjaFJlY3Vyc2l2ZWx5
KG91dHAsIHN1YlZhbHVlLCBzdWJQcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9k
dWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0
Y2gucHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4ICsgMSkgeworICAgICAgICAgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5k
ZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgIGVuZAorCisgICAgZGVmIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgdmFsdWVOYW1lLCBw
cm9kdWN0aW9ucykKKyAgICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHBy
b2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAjIFdl
IGFyZSBndWFyYW50ZWVkIHRoYXQgdGhpcyBpbmRleCBsaXN0IGNvbnRhaW5zIHByb2R1Y3Rpb25z
IHdpdGggdGhlIHNhbWUgb3Bjb2RlIGFuZAorICAgICAgICAgICAgIyB0aGUgc2FtZSBsZW5ndGgu
CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rp
b25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5w
cm9kdWN0aW9ucywgMCkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAg
ICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsICJf
dmFsdWUiLCBtYXRjaGVyLnByb2R1Y3Rpb25zKSB7CisgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAg
ICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAg
ICBwcm9kdWN0aW9uID0gbWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgIG91
dHAucHV0cyAieyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7cHJvZHVjdGlvbi52
YXJOYW1lfSA9IF92YWx1ZTsiCisgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA9IFtdCisg
ICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIHRyeUFyZ3VtZW50
cyA9IFtdCisgICAgICAgICAgICBudW1TY29wZXMgPSAwCisgICAgICAgICAgICBwcm9kdWN0aW9u
LmVhY2hWYXJpYWJsZSB7CisgICAgICAgICAgICAgICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5h
bWUsIGNoaWxkVmFyTmFtZSwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiVmFsdWUqICN7Y2hpbGRWYXJOYW1lfSA9ICN7cGFyZW50VmFyTmFtZX0tPmNoaWxkKCN7aW5k
ZXh9KTsiCisKKyAgICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAg
ICAgICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJChbMC05XSspXFovCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9
KSkgeyIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5oYXNJbnQoKSkgeyIKKyAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaW50ZXJuYWxB
cmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0g
OmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPDwgY2hpbGRW
YXJOYW1lIGlmIGtpbmQgPT0gOm9wZXJhbmQgb3Iga2luZCA9PSA6YW5vbk9wZXJhbmQKKyAgICAg
ICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVy
bmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAu
cHV0cyAiaWYgKGFkYXB0b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgb3V0cC5w
dXRzKCIgICAgJiYgYWRhcHRvci5hY2NlcHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRz
LmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBhZGFwdG9y
LmFjY2VwdE9wZXJhbmRzKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisg
ICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBhZGFwdG9yLnRyeSN7cHJvZHVjdGlvbi5uYW1l
fSgiICsgdHJ5QXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSkiKQorICAgICAgICAgICAgb3V0cC5w
dXRzICIgICAgcmV0dXJuOyIKKyAgICAgICAgICAgIG51bVNjb3Blcy50aW1lcyB7CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5w
dXRzICJ9IgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIG91dHAucHV0cyAiICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBv
dXRwLnB1dHMgIn0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMyIKKworICAgIG91dHAucHV0cyAiI2Vu
ZGlmIC8vIEIzI3ttYXRjaGVyLm5hbWV9X2giCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckFyZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFRtcDoKKyAgICAgICAgb3V0
LnByaW50KHRtcCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tOgorICAgICAgICBv
dXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFkZHI6
CisgICAgICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgICAgIG91dC5wcmludChtX29mZnNldCk7
CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgICAgIG91dC5w
cmludChtX29mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIiwiLCBpbmRl
eCgpKTsKKyAgICAgICAgaWYgKHNjYWxlKCkgIT0gMSkKKyAgICAgICAgICAgIG91dC5wcmludCgi
LCIsIHNjYWxlKCkpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQWJzOgorICAgICAgICBvdXQucHJpbnQobV9vZmZzZXQpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQXJnX2gKKyNk
ZWZpbmUgQWlyQXJnX2gKKworI2luY2x1ZGUgIkFpclRtcC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIFRoaXMgY2xhc3MgbmFtZSBpcyBh
bHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91
J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3QoLi4uLCBBcmc6OmltbSg1KSwgQXJnOjphZGRyKHRo
aW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVt
IG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRp
b24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtpbmQgOiBpbnQ4X3QgeworICAgICAgICBUbXAsCisg
ICAgICAgIEltbSwKKyAgICAgICAgSW1tUHRyLAorICAgICAgICBBZGRyLAorICAgICAgICBJbmRl
eCwKKyAgICB9OworCisgICAgZW51bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAgVXNlLAorICAg
ICAgICBEZWYsCisgICAgICAgIFVzZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5cGUgOiBpbnQ4
X3QgeworICAgICAgICBHUCwKKyAgICAgICAgRlAKKyAgICB9OworCisgICAgc3RhdGljIGJvb2wg
aXNVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAg
IGNhc2UgVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBcmcoKQorICAgIHsK
KyAgICB9CisKKyAgICBBcmcoQWlyOjpUbXAgdG1wKQorICAgICAgICA6IG1fa2luZChUbXApCisg
ICAgICAgICwgbV9iYXNlKHRtcCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW0o
aW50cHRyX3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gSW1tOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbVB0cihpbnRwdHJf
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBJbW1QdHI7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgYWRkcmVzcyhBaXI6OlRtcCBi
YXNlLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQ
KCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQWRkcjsK
KyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNj
YWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAyOgorICAgICAgICBjYXNlIDQ6
CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
c3RhdGljIHVuc2lnbmVkIGxvZ1NjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgNDoK
KyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1
cm4gMzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
QXJnIGluZGV4KEFpcjo6VG1wIGJhc2UsIEFpcjo6VG1wIGluZGV4LCB1bnNpZ25lZCBzY2FsZSA9
IDEsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1Ao
KSk7CisgICAgICAgIEFTU0VSVChpbmRleC5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNWYWxp
ZFNjYWxlKHNjYWxlKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3Vs
dC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0gc3RhdGljX2Nhc3Q8
dWludDhfdD4oc2NhbGUpOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFy
ZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIu
bV9vZmZzZXQKKyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAg
ICAgICYmIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleAorICAgICAgICAgICAgJiYgbV9zY2FsZSA9PSBvdGhlci5tX3NjYWxlOwor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxp
Y2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAqdGhpcyAhPSBBcmcoKTsgfQorCisg
ICAgS2luZCBraW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQ7CisgICAg
fQorCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgp
ID09IFRtcDsKKyAgICB9CisKKyAgICBib29sIGlzSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBraW5kKCkgPT0gSW1tOworICAgIH0KKworICAgIGJvb2wgaXNJbW1QdHIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW1QdHI7CisgICAgfQorCisgICAg
Ym9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRy
OworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jh
c2U7CisgICAgfQorCisgICAgaW50cHRyX3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBJbW0gfHwga2luZCgpID09IEltbVB0cik7CisgICAgICAgIHJldHVy
biBtX29mZnNldDsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAg
ICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGludDMyX3Qgb2Zmc2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpOworICAgIH0KKwor
ICAgIEFpcjo6VG1wIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBzY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsK
KyAgICAgICAgcmV0dXJuIG1fc2NhbGU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9nU2NhbGUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOworICAgIH0K
KworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAo
KSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQVG1wKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlAoKTsKKyAgICB9CisgICAg
CisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0
aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNl
IEltbVB0cjoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJu
IGlzR1BUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMg
QXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEZQIHZhbHVlLgor
ICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBJbW1QdHI6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAg
ICAgY2FzZSBCYXNlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1w
OgorICAgICAgICAgICAgcmV0dXJuIGlzRlBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1w
KCkuaXNHUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB0bXAoKS5ncHIoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAgfQor
CisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnBy
KCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5n
cFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIHVu
c2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS50bXBJ
bmRleCgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNhc2UgQWRkcjoK
KyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAg
ZnVuY3RvcihtX2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHNt
YXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVm
IHJ1bGUgd2lsbCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBl
eGFtcGxlLCB0aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQorICAgIC8vCisg
ICAgLy8gVGhpcyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwgVHlwZSBhcmdU
eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgYXJn
Um9sZSwgYXJnVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBZGRyOgor
ICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBH
UCk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0ZWRJbW0zMigp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0
KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0ZWRJ
bW1QdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tUHRyKCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9vZmZzZXQpOworICAgIH0K
KworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOwor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgbV9iYXNlLmdwcigpLCBtX2luZGV4
LmdwcigpLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U2NhbGU+KGxvZ1NjYWxlKCkpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnRwdHJf
dCBtX29mZnNldCB7IDAgfTsKKyAgICBLaW5kIG1fa2luZCB7IEltbSB9OworICAgIHVpbnQ4X3Qg
bV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9pbmRl
eDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFp
ckFyZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWly
SW5zdC5oIgorCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAiLCBsaXN0RHVtcChh
cmdzKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckluc3RfaAorI2RlZmluZSBBaXJJbnN0X2gKKworI2luY2x1ZGUgIkFpckFyZy5o
IgorI2luY2x1ZGUgIkFpck9wY29kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgSW5zdCB7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBBcmdMaXN0OworCisgICAgSW5zdChP
cGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAgICA6IG9wY29kZShvcGNvZGUpCisg
ICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBv
cmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogb3Bjb2Rl
KG9wY29kZSkKKyAgICAgICAgLCBhcmdzeyBhcmcsIGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwg
b3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBW
YWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCisgICAgICAgIDogb3Bjb2Rl
KG9wY29kZSkKKyAgICAgICAgLCBhcmdzKGFyZ3MpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikK
KyAgICB7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3JzIGFsbCBhdm9p
ZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBmb3IgdGhpbmdzIHRo
YXQKKyAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlmIHlvdSdyZSBj
YXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4geW91J3JlCisgICAgLy8gcHJvYmFi
bHkgZG9pbmcgaXQgd3JvbmcuCisKKyAgICAvLyBUaGlzIG9ubHkgd2Fsa3MgdGhvc2UgVG1wcyB0
aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCwgYW5kIGl0IGRvZXNuJ3QgdGVsbCB5b3UgdGhl
aXIgcm9sZQorICAgIC8vIG9yIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICBmb3IgKEFyZyBhcmcgOiBhcmdzKQorICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBG
YXN0KGZ1bmN0b3IpOworICAgIH0KKworICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKGFy
Zywgcm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAv
LyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOworCisgICAgLy8gQ2Fs
bHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xlLCB0eXBlKS4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZ1JvbGUoCisgICAgICAgICAgICBbJl0gKEFyZyYg
YXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBh
cmcuZm9yRWFjaFRtcChyb2xlLCB0eXBlLCBmdW5jdG9yKTsKKyAgICAgICAgICAgIH0pOworICAg
IH0KKworICAgIC8vIFJlcG9ydHMgYW55IGFkZGl0aW9uYWwgcmVnaXN0ZXJzIGNsb2JiZXJlZCBi
eSB0aGlzIG9wZXJhdGlvbi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgZm9yRWFjaENsb2JiZXJlZFJlZyhjb25zdCBGdW5jdG9yJik7CisKKyAgICAvLyBJcyB0aGlz
IGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9ybXMgcmlnaHQgbm93PyBUaGlzIGZ1
bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4K
KyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBBc3N1bWluZyB0aGlzIGluc3RydWN0
aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdpbGwgaXQgc3RpbGwgYmUgaW4gb25l
IG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1dCBhbiBBZGRyIGluIHRoZSBnaXZl
biBpbmRleD8gU3BpbGxpbmcgdXNlcyB0aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRleCB0
bworICAgIC8vIGZpbmQgVG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7IGlmIGl0IGZpbmRzIG9uZSwg
aXQgY2FsbHMgdGhpcyB0byBzZWUgaWYgaXQgY2FuIHJlcGxhY2UgdGhlCisgICAgLy8gQXJnOjpU
bXAgd2l0aCBhbiBBcmc6OkFkZHIuIElmIGl0IGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQg
Y2FsbHMgdGhhdCBBcmcncyBmb3JFYWNoVG1wIHRvCisgICAgLy8gZG8gYSByZXBsYWNlbWVudCB0
aGF0IHdheS4KKyAgICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQg
Ynkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGFkbWl0c0FkZHIodW5zaWduZWQgYXJn
SW5kZXgpOworCisgICAgLy8gR2VuZXJhdGUgc29tZSBjb2RlIGZvciB0aGlzIGluc3RydWN0aW9u
LiBUaGlzIGlzLCBsaWtlLCBsaXRlcmFsbHkgb3VyIGJhY2tlbmQuIFRoaXMgZnVuY3Rpb24KKyAg
ICAvLyBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHZvaWQg
Z2VuZXJhdGUoTWFjcm9Bc3NlbWJsZXImKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworCisgICAgT3Bjb2RlIG9wY29kZTsKKyAgICBBcmdMaXN0IGFyZ3M7CisgICAgVmFs
dWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLgor
fTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5z
dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVz
X2gKKyNkZWZpbmUgQWlySW5zdElubGluZXNfaAorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2lu
Y2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbHMuaCIKKyNpbmNs
dWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+Cit2b2lkIEluc3Q6OmZvckVhY2hDbG9iYmVyZWRSZWcoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQ2hlY2s6CisgICAgY2Fz
ZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAg
Y2FzZSBQYXRjaHBvaW50OgorICAgICAgICBvcmlnaW4tPnN0YWNrbWFwKCktPmNsb2JiZXJlZCgp
LmZvckVhY2goZnVuY3Rvcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDYWxsOiB7Cisg
ICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICBmb3IgKFJlZyByZWcgOiBSZWc6OmFsbCgpKSB7
CisgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmVSZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAg
ICAgICAgICAgZnVuY3RvcihyZWcpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zdElubGluZXNfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZXMub3Bjb2Rlcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZXMub3Bjb2Rlcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rlcy5v
cGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgU3lsbGFidXM6CisjIFU6RyA9PiB1c2Ugb2YgYSBnZW5l
cmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBvZiBhIGdlbmVyYWwt
cHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQgZGVmIG9mIGEgZ2Vu
ZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ugb2YgYSBmbG9hdCBy
ZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFs
dWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisj
IFRtcCA9PiB0ZW1wb3Jhcnkgb3IgcmVnaXN0ZXIKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBv
cmFyeS9yZWdpc3RlcitvZmZzZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJz
ID0+IEFic29sdXRlQWRkcmVzcworCisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUg
YSBsZWFkaW5nIGNhcGl0YWwgKEFkZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNz
ZW1ibGVyCisjIEFQSSB0aGF0IGhhcyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitB
ZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgVG1w
CisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcKKyAg
ICBJbW0sIFRtcCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1t
LCBUbXAKKyAgICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworTHNo
aWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpH
LCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworTW92ZSBVOkcsIEQ6RworICAg
IFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW1QdHIsIFRtcAorICAgIEFkZHIsIFRtcCBh
cyBsb2FkICMgVGhpcyBtZWFucyB0aGF0ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0
ZWQgYXMgImxvYWQiIG5vdCAibW92ZSIuCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlCisKK01vdmVE
b3VibGUgVTpGLCBEOkYKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91Ymxl
CisgICAgVG1wLCBBZGRyIGFzIHN0b3JlRG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpG
CisgICAgVG1wLCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAor
CisjIFNvbWUgb3Bjb2RlcyBiZWhhdmUgZXhvdGljYWxseS4gRm9yIGV4YW1wbGUsIHRoZXkgbWF5
IGhhdmUgdmFyYXJncy4gT3IsIHRoZXkgbWF5IHJlcXVpcmUgYSBzcGVjaWFsCisjIGNsYXNzIG9m
IHJlZ2lzdGVycyBmb3Igc29tZSBvcGVyYW5kLiBPciwgdGhleSBtYXkgdXNlIG9yIGRlZiBhZGRp
dGlvbmFsIHJlZ2lzdGVycy4KKworIyBUaGVzZSBiZWhhdmUgbGlrZSBob3cgdGhlIFN0YWNrbWFw
IG9iamVjdCB0ZWxscyB0aGVtIHRvIGJlaGF2ZS4KK3NwZWNpYWwgQ2hlY2tBZGQKK3NwZWNpYWwg
Q2hlY2tTdWIgCitzcGVjaWFsIENoZWNrTXVsCitzcGVjaWFsIENoZWNrCitzcGVjaWFsIFBhdGNo
cG9pbnQKKworIyBUYWtlcyBhcmd1bWVudCByZWdpc3RlcnMgYXMgaW5wdXRzLgorc3BlY2lhbCBD
YWxsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
VG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgewor
ICAgICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGlzUmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChpc0dQVG1wKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIl
dG1wIiwgZ3BUbXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5w
cmludCgiJWZ0bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBfaAorI2RlZmluZSBBaXJUbXBfaAorCisj
aW5jbHVkZSAiUmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworLy8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBhIHJlZ2lzdGVyLiBJ
dCBjYW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4gSXQgY2FuIGFsc28KKy8v
IGJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0ZXIgKGkuZS4gYSB0ZW1w
b3JhcnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQorLy8gZGVsaWJlcmF0ZWx5IHRl
cnNlIG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoaXMgbmFtZSBhIGxvdC4KKwor
Y2xhc3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAg
ICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcpCisgICAgeworICAgICAgICBp
ZiAocmVnKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAg
bV92YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigpKTsKKyAgICAgICAgfSBlbHNl
CisgICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGdwVG1w
Rm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUdQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGZwVG1wRm9ySW5kZXgodW5zaWduZWQg
aW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1
ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBzdGF0aWMgVG1wIGZvclJhd1ZhbHVlKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAg
ICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBpbmRleDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisKKyAgICBib29sIHJhd1ZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlAoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUpOworICAgIH0K
KworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2Rl
ZEdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0VuY29kZWRGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBp
c1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUFIoKSB8fCBpc0ZQUigpOwor
ICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRl
Y29kZUdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBkZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgUmVnIHJl
ZygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJu
IGdwcigpOworICAgICAgICByZXR1cm4gZnByKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BU
bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1
ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQg
dG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAg
IHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIHJldHVybiBmcFRtcEluZGV4KCk7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBlbmNvZGVHUCh1
bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAxICsgaW5kZXg7CisgICAgfQor
CisgICAgc3RhdGljIGludCBlbmNvZGVGUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IHJldHVybiAtMSAtIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BSKEdQ
UlJlZyBncHIpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9Bc3Nl
bWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVG
UFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUChmcHIgLSBNYWNy
b0Fzc2VtYmxlcjo6Zmlyc3RGUFJSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50
IGVuY29kZUdQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29k
ZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSArIGluZGV4OworICAgIH0K
KworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAg
ICAgICByZXR1cm4gZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAt
IDEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUChpbnQgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPiAwOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGlzRW5jb2RlZEZQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZSA8IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BSKGludCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUgPD0gZW5j
b2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNFbmNvZGVkRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0VuY29kZWRGUCh2YWx1ZSkgJiYgdmFsdWUgPj0gZW5jb2RlZEZQUihNYWNyb0Fzc2VtYmxlcjo6
bGFzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BU
bXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAm
JiAhaXNFbmNvZGVkR1BSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29k
ZWRGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFs
dWUpICYmICFpc0VuY29kZWRGUFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBHUFJSZWcg
ZGVjb2RlR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFIo
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQUlJlZz4oCisgICAgICAgICAg
ICAodmFsdWUgLSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSkpICsg
TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIEZQ
UlJlZyBkZWNvZGVGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2Rl
ZEZQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPigKKyAgICAg
ICAgICAgIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKSAtIHZh
bHVlKSArCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpOwor
ICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVHUFRtcChpbnQgdmFsdWUpCisgICAg
eworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHZhbHVlIC0gKGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSk7
CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29kZUZQVG1wKGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1
cm4gKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxKSAtIHZh
bHVlOworICAgIH0KKworICAgIC8vIDA6IGVtcHR5IFRtcAorICAgIC8vIHBvc2l0aXZlOiBHUFJz
IGFuZCB0aGVuIEdQIHRlbXBzLgorICAgIC8vIG5lZ2F0aXZlOiBGUFJzIGFuZCB0aGVuIEZQIHRl
bXBzLgorICAgIGludCBtX3ZhbHVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gQWlyVG1wX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc0OCBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisj
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKworY2xhc3MgT3Bj
b2RlCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpzcGVjaWFsLCA6b3ZlcmxvYWRzCisKKyAgICBk
ZWYgaW5pdGlhbGl6ZShuYW1lLCBzcGVjaWFsKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAg
ICAgQHNwZWNpYWwgPSBzcGVjaWFsCisgICAgICAgIHVubGVzcyBzcGVjaWFsCisgICAgICAgICAg
ICBAb3ZlcmxvYWRzID0gW10KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgbWFzbU5h
bWUKKyAgICAgICAgbmFtZVswXS5kb3duY2FzZSArIG5hbWVbMS4uLTFdCisgICAgZW5kCitlbmQK
KworY2xhc3MgQXJnCisgICAgYXR0cl9yZWFkZXIgOnJvbGUsIDp0eXBlCisKKyAgICBkZWYgaW5p
dGlhbGl6ZShyb2xlLCB0eXBlKQorICAgICAgICBAcm9sZSA9IHJvbGUKKyAgICAgICAgQHR5cGUg
PSB0eXBlCisgICAgZW5kCitlbmQKKworY2xhc3MgT3ZlcmxvYWQKKyAgICBhdHRyX3JlYWRlciA6
c2lnbmF0dXJlLCA6Zm9ybXMKKworICAgIGRlZiBpbml0aWFsaXplKHNpZ25hdHVyZSwgZm9ybXMp
CisgICAgICAgIEBzaWduYXR1cmUgPSBzaWduYXR1cmUKKyAgICAgICAgQGZvcm1zID0gZm9ybXMK
KyAgICBlbmQKK2VuZAorCitjbGFzcyBLaW5kCisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBh
dHRyX2FjY2Vzc29yIDpzcGVjaWFsCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lKQorICAgICAg
ICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBmYWxzZQorICAgIGVuZAorCisgICAg
ZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBTdHJpbmcKKyAgICAgICAgICAg
IEBuYW1lID09IG90aGVyCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBuYW1lID09IG90aGVy
Lm5hbWUgYW5kIEBzcGVjaWFsID09IG90aGVyLnNwZWNpYWwKKyAgICAgICAgZW5kCisgICAgZW5k
CitlbmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKwor
ICAgIGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5k
cworICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmln
aW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVm
IGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZp
bGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAor
ICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVu
ZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZwor
ICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2lu
ID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBk
ZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBA
c3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5n
ID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikK
KyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisg
ICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAor
ICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5Pwor
ICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisg
ICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisg
ICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBm
aWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxp
bmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIK
KyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25v
cmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisg
ICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9d
KykvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUs
IGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAg
ICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXS8KKyAgICAgICAg
ICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciks
ICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tP
cmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5j
ZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5w
b3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzVUQodG9rZW4pCisg
ICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKSlcWi8KK2VuZAorCitkZWYgaXNHRih0b2tlbikK
KyAgICB0b2tlbiA9fiAvXEEoKEcpfChGKSlcWi8KK2VuZAorCitkZWYgaXNLaW5kKHRva2VuKQor
ICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoSW1tUHRyKXwoQWRkcil8KEluZGV4KSlcWi8K
K2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9r
ZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRv
a2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+
IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitj
bGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAg
QHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQK
KworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBk
ZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVy
cm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VF
cnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0
eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVu
ZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAor
ICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJF
eHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFu
Y2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQg
PSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIp
IHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJl
c3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRv
a2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBV
RCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0
CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4u
c3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxl
c3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5k
CisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisg
ICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tUHRyLCBUbXAsIEFkZHIs
IG9yIEluZGV4KSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAg
ICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIHJlc3VsdCA9IHt9
CisgICAgICAgIAorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0g
QHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgaWYgdG9rZW4gPT0gInNwZWNpYWwiCisgICAg
ICAgICAgICAgICAgY29uc3VtZSgic3BlY2lhbCIpCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFt
ZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5u
b3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorCisg
ICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1l
LCB0cnVlKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBj
b25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0W29wY29kZU5hbWVd
CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAg
ICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29k
ZSIpIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBvcGNvZGUgPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIGZhbHNlKQorICAgICAgICAg
ICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUKKyAgICAgICAgICAgICAgICBl
bmQKKworICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAgICAgICAgICAgICAgaWYg
aXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1
bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBlCisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8
PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAg
bG9vcCB7CisgICAgICAgICAgICAgICAgICAgIGtpbmRzID0gW10KKyAgICAgICAgICAgICAgICAg
ICAgYWx0TmFtZSA9IG5pbAorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGtpbmRzIDw8IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZUVycm9yKCJDYW4gb25seSBhcHBseSAqIHRvIFRtcCIpIHVubGVzcyBraW5kc1stMV0u
bmFtZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzWy0xXS5zcGVj
aWFsID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioiKQorICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
IHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwi
KQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4g
PT0gImFzIgorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYWx0TmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICAg
ICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdy
b25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0
aCA9PSBzaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgIGtpbmRzLmVhY2hfd2l0
aF9pbmRleCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0g
IkltbVB0ciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhd
LnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tdXNlIGFyZ3VtZW50IikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBz
aWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tZ2VuZXJhbC1w
dXJwb3NlIGFyZ3VtZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KGtpbmRzLCBhbHROYW1lKQorICAgICAgICAgICAg
ICAgICAgICBicmVhayB1bmxlc3MgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMgPDwgT3ZlcmxvYWQubmV3KHNpZ25hdHVy
ZSwgZm9ybXMpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdAor
ICAgIGVuZAorZW5kCisKKyRmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5l
dyhJTzo6cmVhZCgkZmlsZU5hbWUpLCAkZmlsZU5hbWUpCiskb3Bjb2RlcyA9IHBhcnNlci5wYXJz
ZQorCitkZWYgd3JpdGVIKGZpbGVuYW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tmaWxlbmFtZX0u
aCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRz
ICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAt
LSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQWly
I3tmaWxlbmFtZX1faCIKKyAgICAgICAgb3V0cC5wdXRzICIjZGVmaW5lIEFpciN7ZmlsZW5hbWV9
X2giCisKKyAgICAgICAgeWllbGQgb3V0cAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIj
ZW5kaWYgLy8gQWlyI3tmaWxlbmFtZX1faCIKKyAgICB9CitlbmQKKworZGVmIHdyaXRlQ1BQKGZp
bGVuYW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tmaWxlbmFtZX0uY3BwIiwgInciKSB7CisgICAg
ICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBi
eSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIK
KyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJjb25maWcuaFwiIgorICAg
ICAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlyI3tmaWxlbmFtZX0uaFwiIgorCisgICAgICAg
IHlpZWxkIG91dHAKKyAgICB9CitlbmQKKword3JpdGVIKCJPcGNvZGVzIikgeworICAgIHwgb3V0
cCB8CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAg
JG9wY29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91
dHAucHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAg
IG91dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVz
LmtleXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1
dHMgImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9
IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGVzIikgeworICAgIHwgb3V0
cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcInd0Zi9QcmludFN0cmVhbS5oXCIiCisgICAg
b3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJ1c2luZyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0
cC5wdXRzICIgICAgc3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMua2V5cy5lYWNoIHsK
KyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICBjYXNlICN7b3Bjb2Rl
fToiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICBvdXQucHJpbnQoXCIje29wY29kZX1cIik7
IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuOyIKKyAgICB9CisgICAgb3V0cC5w
dXRzICIgICAgfSIKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBX
VEYiCit9CisKKyMgRnJvbSBoZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1pdCBwcm9wZXJseSBp
bmRlbnRlZCBjb2RlLCBzaW5jZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuCisjIG1h
dGNoZXIuCisKK2RlZiBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXgs
IGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICByZXR1cm4gaWYgZm9ybXMubGVu
Z3RoID09IDAKKworICAgIGlmIGZpbHRlcltmb3Jtc10KKyAgICAgICAgcmV0dXJuCisgICAgZW5k
CisKKyAgICBvdXRwLnB1dHMgIiAvLyBjb2x1bW5JbmRleCA9ICN7Y29sdW1uSW5kZXh9LCBmb3Jt
cyA9ICN7Zm9ybXMuaW5zcGVjdH0sIG51bUNvbHVtbnMgPSAje2Zvcm1zWzBdLmtpbmRzLmxlbmd0
aH0iCisgICAgaWYgY29sdW1uSW5kZXggPj0gZm9ybXNbMF0ua2luZHMubGVuZ3RoCisgICAgICAg
IHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMQorICAgICAgICBjYWxsYmFja1tmb3Jtc1sw
XV0KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisgICAgCisgICAgZ3JvdXBzID0ge30KKyAgICBm
b3Jtcy5lYWNoIHsKKyAgICAgICAgfCBmb3JtIHwKKyAgICAgICAga2luZCA9IGZvcm0ua2luZHNb
Y29sdW1uSW5kZXhdLm5hbWUKKyAgICAgICAgaWYgZ3JvdXBzW2tpbmRdCisgICAgICAgICAgICBn
cm91cHNba2luZF0gPDwgZm9ybQorICAgICAgICBlbHNlCisgICAgICAgICAgICBncm91cHNba2lu
ZF0gPSBbZm9ybV0KKyAgICAgICAgZW5kCisgICAgfQorCisgICAgaWYgc3BlZWQgPT0gOmZhc3Qg
YW5kIGdyb3Vwcy5sZW5ndGggPT0gMQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBm
b3JtcywgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisg
ICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7Y29sdW1u
R2V0dGVyW2NvbHVtbkluZGV4XX0pIHsiCisgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAg
IHwga2V5LCB2YWx1ZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7a2V5fToiCisg
ICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1bW5JbmRleCArIDEsIGNv
bHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisKK2RlZiBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBz
cGVlZCwgaW5zdCkKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bjb2RlKSB7Igor
ICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBv
dXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBpZiBvcGNvZGUuc3BlY2lh
bAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKSBvciBz
cGVlZCA9PSA6c2FmZQorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPmFy
Z3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIG9wY29kZS5v
dmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBu
ZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2Fk
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRj
aAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBl
bmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBv
dXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0
cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCBzcGVlZCwg
aW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkgeworICAgICAg
ICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAg
ICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBj
b2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAg
ICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAg
ICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAg
ICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1u
R2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBlbmQKKyAgICB9CitlbmQKKword3Jp
dGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1
ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlyU3BlY2lhbHMu
aFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Igor
ICAgIG91dHAucHV0cyAidm9pZCBJbnN0Ojpmb3JFYWNoQXJnUm9sZShjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwg
OmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBp
ZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICIje29wY29kZS5uYW1lfVNw
ZWNpYWxzOjpmb3JFYWNoQXJnUm9sZSh0aGlzLCBmdW5jdG9yKTsiCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAg
ICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG5pbAorICAgICAg
ICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAgICAgICAgICAgICB3aGVuICJVIgorICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAgICAgICAgICAgICAgICB3aGVuICJEIgorICAg
ICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKKyAgICAgICAgICAgICAgICB3aGVuICJVRCIK
KyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VEZWYiCisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7aW5k
ZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJnLnR5cGV9UCk7IgorICAgICAgICAgICAgfQor
ICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKword3JpdGVDUFAoIk9wY29kZVV0aWxz
IikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3QuaFwi
IgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJTcGVjaWFscy5oXCIiCisgICAgb3V0cC5w
dXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAg
IG91dHAucHV0cyAiaW5saW5lIGJvb2wgaGlkZGVuVHJ1dGgoKSB7IHJldHVybiB0cnVlOyB9Igor
ICAgIG91dHAucHV0cyAiI2RlZmluZSBSRVRVUk4odmFsdWUpIGRvIHtcXCIKKyAgICBvdXRwLnB1
dHMgIiAgICBpZiAoaGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0
dXJuICh2YWx1ZSk7XFwiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAiYm9vbCBJ
bnN0Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVy
bG9hZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3Zlcmxv
YWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5w
dXRzICJSRVRVUk4oI3tvcGNvZGUubmFtZX1TcGVjaWFsczo6aXNWYWxpZCh0aGlzKSk7IgorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uID0gZmFsc2UKKyAgICAg
ICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMgeworICAgICAgICAgICAgICAg
IHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5k
ZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4
XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZvcm0ua2luZHNbaW5kZXhdCisgICAgICAg
ICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNwZWNpYWwKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBmb3JtIG1h
dGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJvbGUsIHNpbmNlCisgICAgICAg
ICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8g
dmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAgICAj
IHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAuCisgICAgICAgICAgICAgICAg
aWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIlJFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZHNNb3JlVmFsaWRhdGlvbgorICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCEje29wY29kZS5uYW1lfVNwZWNpYWxzOjppc1ZhbGlkKHRoaXMp
KSIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTihmYWxzZSk7IgorICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTih0cnVlKTsiCisgICAgICAgIGVu
ZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9
IgorCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0c0FkZHIodW5zaWduZWQgYXJnSW5k
ZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7
IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAg
ICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAgIGlmIG9wY29kZS5z
cGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTigje29wY29kZS5uYW1lfVNwZWNp
YWxzOjphZG1pdHNBZGRyKGFyZ0luZGV4KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAj
IFN3aXRjaCBvbiB0aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAo
YXJnSW5kZXgpIHsiCisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRzLm1h
cCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3Zlcmxv
YWQuc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbnVtQXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRleCB8Cisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAgICAgICAg
ICAgICAgICMgQ2hlY2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJsb2Fk
cyBlaXRoZXIgZG8sIG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAgICAgICAg
IyBhdCB0aGlzIGluZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9uIGNhc2Uu
CisgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5vID0gMAor
ICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAg
ICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNo
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZpcnN0
IGJlY2F1c2UgaWYgd2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAgICAgICAg
ICAgICAjIHRvIHNheSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAgICAgICAg
ICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiUkVUVVJO
KGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0LgorCisgICAgICAgICAg
ICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0g
MSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJncy5zaXplKCkp
IHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3Zl
cmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdo
YXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgb3Zlcmxv
YWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRk
ciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAK
KyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0aGluZywganVzdCBkcm9w
IHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2ln
bmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2Fk
U3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgaG93IHdlIHRl
c3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlzIGFyZ3VtZW50IHRvIGFuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIHlpZWxkcyBhIHZhbGlkIGZvcm0uCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9PSBhcmdJbmRleAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRkciIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFy
Z3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICIg
Ly8gQ29uc2lkZXJpbmcgZm9ybXM6ICN7Zm9ybXMuaW5zcGVjdH0iCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
Zm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRz
W2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIyBEcm9wIGRvd24sIGVtaXQgbm8gY29kZSwgc2luY2Ugd2UgY2Fubm90IG1hdGNo
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjIEtlZXAgZ29pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
YWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBw
cm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4o
dHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgIiAvLyBNYXRjaGluZyBmb3JtcyBvZiBvdmVybG9hZDogI3tv
dmVybG9hZC5pbnNwZWN0fSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1z
KG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNh
bGxiYWNrKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImRlZmF1bHQ6IgorICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsi
CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ2b2lkIEluc3Q6OmdlbmVyYXRl
KE1hY3JvQXNzZW1ibGVyJiBqaXQpIGNvbnN0IgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRj
aEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29k
ZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAg
ICAgb3V0cC5wdXRzICIje29wY29kZS5uYW1lfVNwZWNpYWxzOjpnZW5lcmF0ZSh0aGlzLCBqaXQp
OyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgZm9ybS5hbHROYW1lCisgICAgICAgICAg
ICAgICAgbWV0aG9kTmFtZSA9IGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIG1ldGhvZE5hbWUgPSBvcGNvZGUubWFzbU5hbWUKKyAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgb3V0cC5wcmludCAiaml0LiN7bWV0aG9kTmFtZX0oIgorCisgICAgICAgICAg
ICBmb3JtLmtpbmRzLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBraW5kLCBp
bmRleCB8CisgICAgICAgICAgICAgICAgaWYgaW5kZXggIT0gMAorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICIsICIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBj
YXNlIGtpbmQubmFtZQorICAgICAgICAgICAgICAgIHdoZW4gIlRtcCIKKyAgICAgICAgICAgICAg
ICAgICAgaWYgb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS50eXBlID09ICJHIgorICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZ3ByKCkiCisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFy
Z3NbI3tpbmRleH1dLmZwcigpIgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICB3aGVuICJJbW0iCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tp
bmRleH1dLmFzVHJ1c3RlZEltbTMyKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiSW1tUHRyIgor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJ
bW1QdHIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJBZGRyIgorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAg
ICB3aGVuICJJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgb3V0cC5wdXRzICIpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91
dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIiCit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2aXNpb24gMTkx
MjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkod29ya2luZyBjb3B5KQpA
QCAtMTA1LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXg7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleCAhPSBpbnZhbGlkKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFpc1NldCgpOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIGlzU2V0KCk7IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4ID09IGRlbGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBAQCBw
dWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBj
bGFzcyBBbGxSZWdzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKworICAgICAgICBjbGFzcyBpdGVy
YXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkgeyB9CisKKyAg
ICAgICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKFJlZyByZWcpCisgICAgICAgICAgICAgICAgOiBt
X3JlZyhyZWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJl
ZyBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3JlZzsgfQorCisgICAgICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9yZWcg
PSBtX3JlZy5uZXh0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZyA9PSBv
dGhlci5tX3JlZzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIFJlZyBtX3JlZzsKKyAgICAgICAgfTsKKworICAgICAgICBp
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0K
KyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9
CisgICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgY29uc3QgeyByZXR1
cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBp
bnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTMgQEAg
cHVibGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0
Qml0cygpKQorICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAg
IH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsg
fQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263546</attachid>
            <date>2015-10-19 20:00:58 -0700</date>
            <delta_ts>2015-10-19 21:59:56 -0700</delta_ts>
            <desc>a little more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>219695</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1f
aW5kZXgoaW5kZXgpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwor
dm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFw
cGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNp
Y0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxv
Y2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFs
dWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0
OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlJ3MgdHlwZWRlZi4KKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVM
aXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBW
YWx1ZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAg
VmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4
KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBt
X3ZhbHVlczsgfQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSog
YXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1T
dWNjZXNzb3JzKCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KTsK
KyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAK
KyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWdu
ZWQgaW5kZXgpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1
ZXM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBC
YXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2Nr
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1
bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBC
YXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4g
RGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9s
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9jZWR1
cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pOworICAgIGFw
cGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2ljQmxv
Y2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+
YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitCYXNpY0Jsb2NrKiYg
QmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBsYXN0
KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworY29uc3QgQmFz
aWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVj
a1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwg
c3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNl
IENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisg
ICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1
YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQo
bGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09
IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOwor
ICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVk
aWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVk
aWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gK
KworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5w
YXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJp
c29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIg
Q29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFuZChMb2FkKGFkZHJlc3Mp
LCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChhZGRyZXNzKSkKK1Rl
c3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8xID0gRXF1YWwoQW5k
KExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0gRXF1YWwoQW5kKGxl
ZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5kKGxlZnQsIHJpZ2h0
KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCByaWdodCkKK0xvYWRF
cXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1YWwodmFsdWUsICQw
KQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkK
K3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFsdWVfaAorI2RlZmlu
ZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAg
CisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6
IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Nv
bnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2
NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25z
dDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAg
ICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBp
bnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3Jp
Z2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBp
bnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25z
dERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJs
ZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAg
ICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0RG91Ymxl
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAgICAs
IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdERvdWJs
ZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJv
bFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9s
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xW
YWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisK
K2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAg
Y2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVj
YXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2Fu
dAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1
cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAgfkNvbnRyb2xW
YWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAgIEJhc2ljQmxvY2sq
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQor
CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRyb2xWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUs
IG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTdWJjbGFzc2Vz
IHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMg
Zm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9y
aWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CisgICAgfQorCisg
ICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCisgICAgeworICAg
ICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMg
Zm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9
PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKwor
ICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRp
Y2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBubykKKyAgICAgICAg
OiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFw
cGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0
aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNp
Y0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3Qg
Y3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5
IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8g
SWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Js
b2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIElu
ZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUt
PmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0
aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29s
bGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBD
b2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0
ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24p
CisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBt
X2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRl
cmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24s
IG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlv
blR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAg
IH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQu
dmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86Cisg
ICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZh
bHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQor
CisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMo
KS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgs
IGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5w
YXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
aW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisjIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5nTWF0Y2hl
cgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcg
YXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50cyB3
aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1h
dGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCisKK0xv
YWQgPSBMb2FkKGFkZHJlc3MpCisKK0FkZExvYWQgPSBBZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUp
CitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK1N0b3JlQWRkTG9hZCA9IFN0b3JlKEFkZChMb2Fk
KGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZUFuZExvYWQgPSBTdG9yZShBbmQoTG9h
ZChhZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRkcmVz
cykKKworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQoreworfQor
Cit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29mZnNl
dCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgTWVt
b3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
ICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2Fk
MTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAg
ICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3Jl
MTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAgICBp
bnRwdHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3Jt
IGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRo
YXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBl
KS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGlu
dHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwg
b3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAg
ICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkg
eworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAg
IGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEb3Vi
bGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZv
aWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1
cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50cHRyX3Qgb2Zmc2V0
ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0
ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAg
ICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBj
YXNlIExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVt
b3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4g
b3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnRwdHJfdCBv
ZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwg
dmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7
CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAg
ICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM09wY29kZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJpbnQoIklkZW50aXR5
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gRklYTUUKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2Rl
IDogaW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZv
ciB3aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAg
Ly8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAg
IElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNz
ZXMuIENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgor
ICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2Ug
Y29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29u
c3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3Qu
IFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJl
Z2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFj
aCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YK
KyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAg
U3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMg
aXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8g
cmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBj
b21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJl
ciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNh
dmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBp
biBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNz
LiBUaGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykg
b3IgRG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJh
bWUgcG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0
IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBj
YXZlYXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFy
aWx5IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJp
bnNpYyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QK
KyAgICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50
ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlw
ZS4KKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRl
Z2VyIG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxp
a2UgSlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJp
dFhvciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5k
IHN1Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAg
U0V4dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQz
MiwKKyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZS
b3VuZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAor
ICAgIC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAg
ICAvLyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUu
IFJldHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVx
dWFsKHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAg
IEdyZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAv
LyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwK
KyAgICBCZWxvdywKKyAgICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1l
bW9yeSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0
eXBlLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgor
ICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAg
IC8vIFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMgcmV0
dXJuIHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8gTWVt
b3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4gVGhl
c2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6Cisg
ICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2YWx1
ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBm
b3IgSW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhpcyBp
cyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVtIEMg
Y2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVudHMg
YXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAvLyBU
aGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRoaXMg
aXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVtaXRz
IGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMg
dG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBhbG9u
ZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3QgYmUg
cGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAgYXJn
dW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0CisgICAg
Ly8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhlIHRv
cCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgorICAg
IFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1ZSBj
bGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24KKyAg
ICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFmdGVy
IHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20gdGhl
IGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBzdXBw
bHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBq
dW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBzaW5j
ZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24gb2Yg
dGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4uIEZv
cgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8vCisg
ICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisgICAg
Ly8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8KKyAg
ICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAvLwor
ICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQgYnkg
dGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2FsbGJh
Y2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFyZSBk
aWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3QgQ2hl
Y2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9zc2li
bHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVja0Fk
ZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tTdWIs
CisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0aGUg
Q2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMgYQor
ICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFu
IEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1bGwg
YnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBq
dW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ssCisK
KyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBzaWxv
biwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisgICAg
Ly8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAgCisg
ICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gQnJh
bmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZhbHVl
IGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNjZXNz
b3IuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJ
bnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNoLAor
CisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRoZWly
IHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBlLiBV
c2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhpcyBp
cyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZS4g
VXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Jp
Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUg
QjNPcmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9v
c2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJl
IGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5z
dHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRp
b25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3Jp
dGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVz
IGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdp
bihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAg
ICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRl
OgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisK
KyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2
b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgb3V0LnByaW50KGNvbW1hLCAic3RhY2ttYXAg
PSAiLCBzdGFja21hcCk7CisgICAgaWYgKHNoYWRvdykKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAic2hhZG93ID0gIiwgc2hhZG93KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNk
ZWZpbmUgQjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2lu
dDsgfQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7
CisgICAgdW5zaWduZWQgc2hhZG93IHsgMCB9OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1w
TWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgs
IFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4p
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBhdGNocG9pbnQsIHR5cGUsIG9yaWdpbiwgY2hpbGRy
ZW4pCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNQYXRjaHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2su
aCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2NlZHVy
ZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soKQoreworICAgIHN0
ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNC
bG9jaz4obV9ibG9ja3Muc2l6ZSgpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5n
ZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5w
cmludChkZWVwRHVtcChibG9jaykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKworI2lu
Y2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1ZTsK
KworY2xhc3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1cmUp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgUHJvY2VkdXJl
KCk7CisgICAgflByb2NlZHVyZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soKTsKKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9y
W10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAg
ICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVy
ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUp
CisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5k
TmV4dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Owor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1
bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9w
cm9jZWR1cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAg
ICAgICBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKworICAg
ICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4Owor
ICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0
aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0
aGlzLCBudW1CbG9ja3MoKSk7IH0KKworICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAg
IHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29sbGVjdGlvbihQcm9jZWR1cmUmIHByb2NlZHVyZSkK
KyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQor
ICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQg
aW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAg
ICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2Nl
ZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAg
ICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwg
MCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9w
cm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpOyB9
CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9j
ZWR1cmUubV92YWx1ZXNbaW5kZXhdOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRvcltdKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAgCisgICAgcHJp
dmF0ZToKKyAgICAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICB9OworCisgICAgVmFs
dWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsg
fQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1f
YmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZUlubGluZXNf
aAorI2RlZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1ZW50cy4uLiBhcmd1bWVudHMpCit7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3Zh
bHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFs
dWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNQcm9jZWR1cmVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVl
KCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90
OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVk
IGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIFlvdSBjYW5ub3QgcmVseSBvbiBpdCBoYXZpbmcg
YSBtZWFuaW5nZnVsCisgICAgLy8gdmFsdWUgd2hpbGUgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcu
CisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9t
RlA7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisg
ICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVk
IGJ5dGVTaXplKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXIoKSwg
b3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9vZmZz
ZXRGcm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAg
ICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKwordm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgIntvcGFxdWUgPSAiLCBSYXdQb2ludGVyKG1f
b3BhcXVlKSwgIiwgcmVwcyA9ICIsIGxpc3REdW1wKG1fcmVwcyksCisgICAgICAgICIsIGdlbmVy
YXRvciA9ICIsIFJhd1BvaW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBjbG9iYmVyZWQgPSAi
LCBtX2Nsb2JiZXJlZCwKKyAgICAgICAgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lz
dGVycywgIn0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNpbmNsdWRlICJCM1ZhbHVl
UmVwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQjNWYWx1ZTsKKworY2xhc3MgU3RhY2ttYXAgeworcHVibGljOgor
ICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgVmFs
dWUgY29udGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZhbHVlKiB2YWx1ZTsKKworICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAgU3RhY2ttYXAqIHN0YWNrbWFw
OworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGp1bXAgdG8gdGhlIHNsb3cgcGF0aCwgaWYgdGhp
cyBpcyBhIHN0YWNrbWFwIGZvciBhIENoZWNrIHZhbHVlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAganVtcDsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5j
dGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRl
ZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3Rh
Y2ttYXAoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBp
ZGVudGlmeSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAt
dXNpbmcgVmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRl
IG1heSBlbmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisg
ICAgLy8gYWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIg
YmFjayB0byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdl
cmUgdXNpbmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBw
YXJhbWV0ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9Cisg
ICAgdm9pZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENv
bnZlbmllbmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMu
CisgICAgdm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBz
ZXRPcGFxdWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qg
b3BhcXVlSW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUo
KSk7IH0KKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1
c2VzIHRoaXMgU3RhY2ttYXAuIE5vdGUgdGhhdCBpbmRleCB6ZXJvIHJlZmVycyB0byB0aGUKKyAg
ICAvLyBmaXJzdCBhcmd1bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQg
aXMgbm90IGNvbnN0cmFpbmFibGUuIEZvciBleGFtcGxlLCBpbiBhCisgICAgLy8gQ2hlY2tBZGQg
dmFsdWUsIGl0IHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEu
IEluIGEgQ2hlY2sgdmFsdWUsIGl0IHdvdWxkCisgICAgLy8gYmUgYW4gZXJyb3IgdG8gY29uc3Ry
YWluIGluZGV4IDAuIEJ1dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQs
IHlvdSBjYW4gZGVwZW5kCisgICAgLy8gb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVp
bmcgZmlsbGVkIGluLgorICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBW
YWx1ZVJlcCYgcmVwKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXpl
KCkpCisgICAgICAgICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNb
aW5kZXhdID0gcmVwOworICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNl
dCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisK
KyAgICBjb25zdCBSZWdpc3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9i
YmVyZWQ7IH0KKworICAgIHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVy
YXRvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRl
U2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgLy8g
VGhlc2Ugd2lsbCByZXR1cm4gaW50ZXJlc3RpbmcgdGhpbmdzIGluc2lkZSB0aGUgZ2VuZXJhdG9y
IGNhbGxiYWNrLCBvciBhZnRlciBjb21waWxhdGlvbi4KKyAgICBjb25zdCBWZWN0b3I8VmFsdWVS
ZXA+JiByZXBzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBzOyB9CisgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICB2
b2lkKiBtX29wYXF1ZSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsK
KyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBtX2Ns
b2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisj
aW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit2b2lkIFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQobV9jYXNlVmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKG1fdGFyZ2V0KSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRj
aENhc2VfaAorI2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKworY2xhc3MgU3dpdGNoQ2FzZSB7
CitwdWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisgICAgeworICAgIH0KKworICAgIFN3aXRjaENh
c2UoaW50NjRfdCBjYXNlVmFsdWUsIEJhc2ljQmxvY2sqIHRhcmdldCkKKyAgICAgICAgOiBtX2Nh
c2VWYWx1ZShjYXNlVmFsdWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3Rh
cmdldDsgfQorCisgICAgaW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VW
YWx1ZTsgfQorICAgIEJhc2ljQmxvY2sqIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgaW50NjRfdCBjYXNlVmFsdWU7CisgICAgQmFzaWNCbG9jayogdGFyZ2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N3aXRjaENhc2VfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2xkdWUgIkIzU3dpdGNo
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N3aXRjaFZhbHVl
Ojp+U3dpdGNoVmFsdWUoKQoreworfQorCitTd2l0Y2hDYXNlIFN3aXRjaFZhbHVlOjpyZW1vdmVD
YXNlKHVuc2lnbmVkIGluZGV4KQoreworICAgIFN3aXRjaENhc2UgcmVzdWx0ID0gbV9zdWNjZXNz
b3JzW2luZGV4XTsKKyAgICBtX3N1Y2Nlc3NvcnNbaW5kZXhdID0gbV9zdWNjZXNzb3JzLmxhc3Qo
KTsKKyAgICBtX3N1Y2Nlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNo
Q2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOwor
ICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRh
cmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30K
Kwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICAvLyBUaGlzIGRlc3RydWN0aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBN
ZXRhKCkuCisgICAgb3V0LnByaW50KGxpc3REdW1wKCp0aGlzKSk7Cit9CisKK1N3aXRjaFZhbHVl
OjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayog
ZmFsbFRocm91Z2gpCisgICAgOiBDb250cm9sVmFsdWUoaW5kZXgsIFN3aXRjaCwgb3JpZ2luKQor
eworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoZmFsbFRocm91Z2gpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAor
I2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBTd2l0Y2hWYWx1ZSA6IHB1YmxpYyBDb250cm9sVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09
IFN3aXRjaDsgfQorCisgICAgflN3aXRjaFZhbHVlKCk7CisKKyAgICAvLyBudW1DYXNlVmFsdWVz
KCkgKyAxID09IG51bVN1Y2Nlc3NvcnMoKS4KKyAgICB1bnNpZ25lZCBudW1DYXNlVmFsdWVzKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CisKKyAgICAvLyBUaGUgc3VjY2Vzc29y
IGZvciB0aGlzIGNhc2UgdmFsdWUgaXMgYXQgdGhlIHNhbWUgaW5kZXguCisgICAgaW50NjRfdCBj
YXNlVmFsdWUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2ldOyB9Cisg
ICAgCisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXM7IH0KKworICAgIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKCkgY29uc3QgeyBy
ZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorICAgIEJhc2ljQmxvY2sqJiBmYWxsVGhyb3Vn
aCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNlIGF0KHVu
c2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENhc2UoY2Fz
ZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7CisgICAgfQorICAgIFN3aXRjaENhc2Ug
b3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBh
dChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3aXRjaChudWxscHRyKQorICAgICAg
ICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAg
ICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRvciooKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgpOworICAg
ICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Owor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTd2l0Y2hWYWx1ZSogbV9zd2l0
Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIC8v
IFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJZiB5b3Un
cmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlvdSBjYW4g
a2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRoaXMgc2Ft
ZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIgY2FzZSB2
YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAgIFN3aXRj
aENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVuZENhc2Uo
Y29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCk7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQz
MiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50
KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91
dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAor
I2RlZmluZSBCM1R5cGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lkLAorICAg
IEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJvb2wgaXNJbnQo
VHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUgPT0gSW50NjQ7
Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBl
ID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlcigpIGNvbnN0Cit7CisgICAgaWYg
KHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVybiBJ
bnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNUeXBl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM1Vwc2lsb25WYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJeIiwg
bV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2lsb25WYWx1
ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAg
IHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVw
c2lsb247IH0KKworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBjb25z
dCB7IHJldHVybiBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQ
cm9jZWR1cmU7CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAgewor
ICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQorCisg
ICAgVmFsdWUqIG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhbHVlOjp+
VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNl
IHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAg
IC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBp
bmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3Vz
IHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVl
IGluIHBsYWNlLgorCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlw
ZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9j
ayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5y
ZXBsYWNlbWVudDsKKyAgICB2b2lkKiBtaXNjID0gdGhpcy0+bWlzYzsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVl
KCk7CisKKyAgICBuZXcgKHRoaXMpIChpbmRleCwgSWRlbnRpZnksIHR5cGUsIG9yaWdpbiwgdmFs
dWUpOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNlbWVudCA9
IHJlcGxhY2VtZW50OworICAgIHRoaXMtPm1pc2MgPSBtaXNjOworfQorCit2b2lkIFZhbHVlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgs
IG1faW5kZXgpOworfQorCit2b2lkIFZhbHVlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICIgIiwgKnRoaXMsICIgPSAiLCBtX29wY29k
ZSk7CisKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAg
Zm9yIChWYWx1ZSogY2hpbGQgOiBjaGlsZHJlbigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
IHBvaW50ZXJEdW1wKGNoaWxkKSk7CisKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJpbmdPdXQ7
CisgICAgZHVtcE1ldGEoc3RyaW5nT3V0KTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IHN0cmluZ091
dC50b0NTdHJpbmcoKTsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsIHN0cmluZyk7CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKworYm9vbCBWYWx1
ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50MzJfdCBW
YWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3QKK3sKK30KKworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bj
b2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNh
c2UgSWRlbnRpdHk6CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBNdWw6
CisgICAgY2FzZSBEaXY6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAgICBj
YXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2Ug
U2hsOgorICAgIGNhc2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVja0FkZDoK
KyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiBm
aXJzdENoaWxkLT50eXBlKCk7CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJldHVy
biBwb2ludGVyKCk7CisgICAgY2FzZSBTRXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBjYXNl
IERUb0kzMjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6CisgICAgY2FzZSBM
ZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgTGVzc0VxdWFsOgorICAg
IGNhc2UgR3JlYXRlckVxdWFsOgorICAgIGNhc2UgQWJvdmU6CisgICAgY2FzZSBCZWxvdzoKKyAg
ICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICByZXR1cm4g
SW50MzI7CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIHJldHVy
biBJbnQ2NDsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIHJldHVy
biBEb3VibGU7CisgICAgY2FzZSBOb3A6CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1ZhbHVl
X2gKKworI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiQCI7CisKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsK
KworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAor
ICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBs
YWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29t
cHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KKworICAgIEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1
cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNv
bnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0
eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdpdGhOb3AoKTsKKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBjYXN0IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlm
IHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92aWRlZCB0aGF0IHdlIGhhdmUgYQorICAgIC8v
IEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86CisgICAgLy8KKyAgICAvLyBpZiAoQXJndW1l
bnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkg
eworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBUaGlzIHdpbGwg
cmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAhPSBBcmd1bWVudFJlZy4gVGhpcyB3b3JrcyBi
ZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisgICAgLy8gaWYgVDo6YWNjZXB0cyhvcGNvZGUo
KSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBhcygpIGNvbnN0OworICAg
IAorICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKKyAgICBpbnQzMl90IGFzSW50MzIoKSBjb25z
dDsKKyAgICAKKyAgICBib29sIGhhc0ludDY0KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludDY0
KCkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQo
KSBjb25zdDsKKyAgICBib29sIGlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0OworCisgICAgYm9v
bCBoYXNEb3VibGUoKSBjb25zdDsKKyAgICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKKworICAg
IFN0YWNrbWFwKiBzdGFja21hcCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9j
ZWR1cmUuCisgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhw
bGljaXRseToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGlj
aXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAg
ICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAg
ICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1f
Y2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAv
LyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRo
ZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVuOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDog
bV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90
eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAg
Ly8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5
cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUo
b3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisg
ICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hp
bGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9y
IHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUg
YWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4
cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2lu
KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQor
ICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9v
cmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgdmFy
YXJncy4KKyAgICBleHBpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQor
ICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAg
ICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAg
LCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0
eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91cCBv
ZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisgICAg
T3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVibGlj
OgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXppbHku
CisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFseXNl
cyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIHZvaWQqIG1pc2MgeyBudWxscHRyIH07Cit9Owor
CitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKFZhbHVl
KiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Zh
bHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
VmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVlKiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKworI2lu
Y2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5j
bHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitU
KiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
dGVtcGxhdGU+dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9vbCBWYWx1
ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1ZT4oKTsK
K30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENv
bnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25z
dAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRfdCBWYWx1
ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+dmFs
dWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
SW50MzIoKSB8fCBoYXNJbnQ2NCgpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9CisK
K2Jvb2wgVmFsdWU6OmlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhh
c0ludCgpICYmIGFzSW50KCkgPT0gdmFsdWU7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKworZG91
YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91Ymxl
VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK1N0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQorewor
ICAgIGlmIChDaGVja1ZhbHVlKiBjaGVjayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAgIHJl
dHVybiAmY2hlY2stPnN0YWNrbWFwOworICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBhczxQYXRjaHBvaW50VmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2ludC0+
c3RhY2ttYXA7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
IGNhc2UgTm9uZToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zm
c2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1l
bnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFs
dWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAg
ICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29u
c3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFs
dWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25z
IGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRp
b24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3Jj
ZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4g
QjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5
IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6Cisg
ICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uCisgICAgICAgIEFu
eSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0
aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIsIHByb3ZpZGVkIHRoYXQKKyAgICAgICAg
Ly8gaXQncyBub3QgYWxzbyBhIHJlZ2lzdGVyIHRoYXQgd2FzIGNsb2JiZXJlZC4KKyAgICAgICAg
U29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0
aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAorICAgICAgICAv
LyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tlZC4K
KyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0
aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90IGEg
dmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgIFN0YWNrLAor
CisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0aGUg
dmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAgICAgICAgLy8g
b2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1
dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50LWZvbGRlZCB0
aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBWYWx1ZVJlcCgp
CisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVmFs
dWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAgICAgICwgbV92
YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHJl
ZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7CisgICAgfQor
CisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21GUCkKKyAgICB7
CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNr
OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICB9CisKKyAgICBz
dGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9tU1ApCisgICAg
eworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFj
a0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21TUDsKKyAgICB9
CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50
OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCBjb25zdGFudChkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVmFs
dWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJlZygpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAgICAgICAg
cmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9m
ZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNr
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9
CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1
cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAgIH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEtp
bmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
Z2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDc1IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCisk
dmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7
JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9y
aWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKwor
ICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAg
ICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255
bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAg
IEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUKKyAgICAgICAgQG9wY29kZSA9
IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNoaWxkcmVuIDogW10KKyAg
ICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAgICAgb3Bjb2RlICE9IG5pbAorICAgIGVu
ZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgY2hpbGRyZW4uZWFjaF93
aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQsIGluZGV4IHwKKyAgICAgICAgICAgIHlp
ZWxkIHZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5uYW1lLAorICAgICAgICAgICAg
ICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLmFub255bW91cyA/
IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDogOmFub25PcGVyYW5kKSA6IChjaGlsZC5v
cGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisgICAgICAgICAgICAgICAgICBpbmRleAor
ICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICB9CisgICAgZW5k
CitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6cHJvZHVjdGlv
bnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBAbmFt
ZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMKKyAgICBlbmQKK2Vu
ZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVy
CisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAg
IEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgor
ICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVO
dW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9y
aWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQor
ICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBl
bmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2Vu
CisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAg
IGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAor
ICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59Igor
ICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBj
b21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9Igor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7
Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBm
aWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1
bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAg
ICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAg
IyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3
bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAv
XEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKikvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9r
ZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hl
biAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAg
ICAgd2hlbiAvXEFbPSgpLF0vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdp
bi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJl
cikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9IgorICAg
ICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJlc3Vs
dAorZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgIyBXZSBjYW4gZXh0ZW5kIHRoaXMg
YXMgd2UgYWRkIG1vcmUga2V5d29yZHMuIExpa2UsIHdlIG1pZ2h0IHdhbnQgImluY2x1ZGUiIGV2
ZW50dWFsbHkuCisgICAgdG9rZW4gPX4gL1xBKChtYXRjaGVyKSlcWi8KK2VuZAorCitkZWYgaXNJ
ZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05
X10qKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAg
ICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChk
YXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tl
bgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAg
ICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQor
ICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAg
ICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2Nv
bW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAg
ZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmlu
Z30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKwor
ICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcK
KyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50
aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAor
CisgICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAg
ICAgaWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkNoaWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisg
ICAgICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50
cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVw
bGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwg
cHJvZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1h
dGNoZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAg
ICAgICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVh
ayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2Fu
dCB0byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUu
CisgICAgICAgICAgICBhZGRVbmlxdWUobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVBy
b2R1Y3Rpb24pCisgICAgICAgIH0KKworICAgICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwg
cHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAg
IG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAgICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIK
KworICAgICAgICBpZiB0b2tlbiA9PSAiPSIKKyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAg
ICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUo
IigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigi
KQorICAgICAgICAgICAgb3Bjb2RlID0gbmFtZQorICAgICAgICAgICAgbmFtZSA9IG5pbAorICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1l
LCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9
IFtdCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisK
KyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9u
KQorCisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1
bWUoIiwiKQorICAgICAgICB9CisKKyAgICAgICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAg
ICAgICAgYWR2YW5jZQorCisgICAgICAgIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bj
b2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKK2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKwor
cGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hl
ciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBTdWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRl
eE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBw
cm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25z
ID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8Cisg
ICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5kZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8
PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgZGVmIG1hcElu
ZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgIGluZGV4TGlzdC5tYXAgeworICAgICAgICAgICAg
fCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBl
bmQKK2VuZAorCitGaWxlLm9wZW4oIkIzIiArIG1hdGNoZXIubmFtZSArICIuaCIsICJ3Iikgewor
ICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9w
YXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisKKyAg
ICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICBvdXRwLnB1dHMg
IiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICAKKyAgICBvdXRwLnB1dHMgIiNpbmNs
dWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBydW4je21hdGNoZXIubmFtZX0oVmFsdWUqIF92YWx1
ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0cC5wdXRzICJ7IgorCisgICAgIyBOb3RlIHRo
YXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQn
cyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAgICAjIHdhbnQgdG8gc2VlIHRoZSBjb2Rl
IG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBnb29kIHRleHQgZWRpdG9yIGFuZCBhc2sg
aXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91LgorCisgICAgIyBJbiBvZGQgc2l0dWF0aW9u
cywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBj
aGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsi
CisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHByb3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZp
bmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5nIGRpZmZlcmVudCBsZW5ndGhzLgor
ICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAg
ICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsK
KyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5kZXhM
aXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5n
dGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgICAgICBpbmRleExp
c3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4
TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICBp
bmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAg
bGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAg
ICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3Zh
bHVlTmFtZX0tPmNoaWxkcmVuLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAg
ICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3Rz
IGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1
Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2Yg
dGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25z
aWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUg
Y29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1h
dGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVl
TmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9u
cyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVj
dGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisg
ICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1
Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0
aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2Rl
CisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVu
ZAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNo
aW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0
aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3Rz
LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVj
dGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ug
c3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAg
ICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsK
KyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1
Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBz
W3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1
Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
c3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vw
cy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0
IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAg
ICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJv
ZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFt
ZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4
TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMp
CisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5w
cm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAg
ICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAg
ICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNh
bWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1
Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZh
bHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRl
eCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgw
Li4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
ZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAu
cHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVl
TmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVz
ZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisg
ICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAor
ICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8
IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRl
eF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUs
IHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAg
ICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAg
ICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywg
Y29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAg
ICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAg
ICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAg
ICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAg
ICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQg
dGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBv
cGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1
Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAg
ICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7
CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1
Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIu
cHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICBpbmRleExpc3Qu
ZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBt
YXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVl
OyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG9wZXJh
bmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAgICAgICAg
ICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxlIHsK
KyAgICAgICAgICAgICAgICB8IHBhcmVudFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJOYW1l
LCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tjaGls
ZFZhck5hbWV9ID0gI3twYXJlbnRWYXJOYW1lfS0+Y2hpbGQoI3tpbmRleH0pOyIKKworICAgICAg
ICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJC8KKyAgICAgICAgICAgICAgICAgICAgaWYg
Y2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgj
e2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA8PCBjaGls
ZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6YW5vbkludGVybmFsCisg
ICAgICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9
PSA6b3BlcmFuZCBvciBraW5kID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgIHRyeUFy
Z3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6
b3BlcmFuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRhcHRv
ci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBhZGFw
dG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIp
IikKKyAgICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3IuYWNjZXB0T3BlcmFuZHMo
IiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIG91dHAu
cHV0cygiICAgICYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1bWVu
dHMuam9pbigiLCAiKSArICIpKSIpCisgICAgICAgICAgICBvdXRwLnB1dHMgIiAgICByZXR1cm47
IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21hdGNo
ZXIubmFtZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyQXJnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKG1fa2luZCkgeworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQodG1wKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmludCgiJCIsIG1f
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgaWYgKG1f
b2Zmc2V0KQorICAgICAgICAgICAgb3V0LnByaW50KG1fb2Zmc2V0KTsKKyAgICAgICAgb3V0LnBy
aW50KCIoIiwgYmFzZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmRleDoK
KyAgICAgICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICAgICAgb3V0LnByaW50KG1fb2Zmc2V0KTsK
KyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLCIsIGluZGV4KCkpOworICAgICAgICBp
ZiAoc2NhbGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7Cisg
ICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYnM6Cisg
ICAgICAgIG91dC5wcmludChtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBcmdfaAorI2RlZmluZSBBaXJBcmdfaAor
CisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworLy8gVGhpcyBjbGFzcyBuYW1lIGlzIGFsc28gaW50ZW50aW9uYWxs
eSB0ZXJzZSBiZWNhdXNlIHdlIHdpbGwgc2F5IGl0IGEgbG90LiBZb3UnbGwgc2VlIGNvZGUgbGlr
ZQorLy8gSW5zdCguLi4sIEFyZzo6aW1tKDUpLCBBcmc6OmFkZHIodGhpbmcsIGJsYWgpLCAuLi4p
CitjbGFzcyBBcmcgeworcHVibGljOgorICAgIC8vIFRoZXNlIGVudW0gbWVtYmVycyBhcmUgaW50
ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIGhhdmUgdG8gbWVudGlvbiB0aGVtIGEgbG90Lgor
ICAgIGVudW0gS2luZCA6IGludDhfdCB7CisgICAgICAgIFRtcCwKKyAgICAgICAgSW1tLAorICAg
ICAgICBJbW1QdHIsCisgICAgICAgIEFkZHIsCisgICAgICAgIEluZGV4LAorICAgIH07CisKKyAg
ICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAgICAgICBVc2UsCisgICAgICAgIERlZiwKKyAgICAg
ICAgVXNlRGVmCisgICAgfTsKKworICAgIGVudW0gVHlwZSA6IGludDhfdCB7CisgICAgICAgIEdQ
LAorICAgICAgICBGUAorICAgIH07CisKKyAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAg
ICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2Ug
RGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
c3RhdGljIGJvb2wgaXNEZWYoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xl
KSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFyZygpCisgICAgeworICAgIH0KKworICAgIEFy
ZyhBaXI6OlRtcCB0bXApCisgICAgICAgIDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2Uo
dG1wKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbShpbnRwdHJfdCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW07
CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tUHRyKGludHB0cl90IHZhbHVlKQorICAgIHsK
KyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbVB0cjsKKyAg
ICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgc3RhdGljIEFyZyBhZGRyZXNzKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zm
c2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFy
ZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBZGRyOworICAgICAgICByZXN1bHQu
bV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1
bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAg
Y2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgY2FzZSA4
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
bG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7
CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0
dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBy
ZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgoQWlyOjpU
bXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJfdCBvZmZz
ZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNT
RVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2NhbGUpKTsK
KyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4OworICAg
ICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBpbmRl
eDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDx1aW50OF90PihzY2FsZSk7
CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAg
ICAgICAgJiYgbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09
IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Cisg
ICAgICAgICAgICAmJiBtX3NjYWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlz
VG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0K
KworICAgIGJvb2wgaXNJbW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9
PSBJbW07CisgICAgfQorCisgICAgYm9vbCBpc0ltbVB0cigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4ga2luZCgpID09IEltbVB0cjsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAg
Ym9vbCBpc0luZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5k
ZXg7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisKKyAg
ICBpbnRwdHJfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09
IEltbSB8fCBraW5kKCkgPT0gSW1tUHRyKTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAg
IH0KKworICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7
CisgICAgfQorCisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgaW5k
ZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAg
ICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4g
bV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQ
VG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1Ao
KTsKKyAgICB9CisKKyAgICBib29sIGlzRlBUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAKKyAgICAvLyBUZWxscyB1
cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBH
UCB2YWx1ZS4KKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChr
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgSW1tUHRyOgorICAgICAg
ICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQg
aW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgRlAgdmFsdWUuCisgICAgYm9vbCBpc0ZQKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1t
OgorICAgICAgICBjYXNlIEltbVB0cjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIEJhc2U6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBy
ZXR1cm4gaXNGUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOworICAg
IH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgp
LmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnBy
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcHIoKTsKKyAgICB9CisgICAg
CisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAm
JiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5k
ZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwVG1wSW5kZXgoKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnRtcEluZGV4KCk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVu
Y3RvcihtX2Jhc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6Cisg
ICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMgaXMgc21hcnQgZW5vdWdoIHRvIGtu
b3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBp
dHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6Cisg
ICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVyY3gpCisgICAgLy8KKyAgICAvLyBUaGlzIGRlZnMg
KCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUsIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBj
YXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xlLCBhcmdUeXBlKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5j
dG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAg
IGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXV0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbVB0cigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNJbW1QdHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbVB0cihtX29mZnNldCk7CisgICAgfQorCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2Uu
Z3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRpY19j
YXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBzdGF0
aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludHB0cl90IG1fb2Zmc2V0IHsgMCB9
OworICAgIEtpbmQgbV9raW5kIHsgSW1tIH07CisgICAgdWludDhfdCBtX3NjYWxlIHsgMSB9Owor
ICAgIEFpcjo6VG1wIG1fYmFzZTsKKyAgICBBaXI6OlRtcCBtX2luZGV4OworfTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQXJnX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2lj
QmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJCQiIsICp0aGlzLCAiOlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMp
CisgICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNCbG9ja19oCisKKyNpbmNsdWRlICJB
aXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICIjIjsKKworICAgIHR5
cGVkZWYgVmVjdG9yPEluc3Q+IEluc3RMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxv
Y2sqLCAyPiBTdWNjZXNzb3JMaXN0OworICAgIAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBiZWdpbigp
IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBlbmQo
KSB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5zdExpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKwor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBj
b25zdCBJbnN0JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhd
OyB9CisgICAgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4XTsg
fQorCisgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFzdCgp
OyB9CisgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQXJndW1lbnRz
JiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6
OmZvcndhcmQoYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2FzZSBp
cyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2Uu
IFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAvLyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQgdG8g
cmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2ggb2YgYSBjb25kaXRpb25hbCBicmFuY2guCisgICAg
dW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXpl
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgY29u
c3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29y
c1tpbmRleF07IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9z
dWNjZXNzb3JzW2luZGV4XTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBDb2RlOworICAgIAorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgp
CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9p
bnN0czsKKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKK307CisKK2NsYXNzIERlZXBC
YXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1f
YmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1w
KEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxv
Y2spOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBB
aXJCYXNpY0Jsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworQ29kZTo6Q29kZSgpCit7Cit9CisKK0NvZGU6On5Db2RlKCkKK3sKK30KKwor
QmFzaWNCbG9jayogQ29kZTo6YWRkQmxvY2soKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNp
Y0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhtX2Jsb2Nrcy5zaXplKCkpKTsKKyAgICBCYXNp
Y0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjpt
b3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBDb2RlOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0
aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ29kZV9oCisjZGVm
aW5lIEFpckNvZGVfaAorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGUgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvZGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIENvZGUoKTsKKyAgICB+Q29kZSgpOworCisgICAgQmFzaWNCbG9jayog
YWRkQmxvY2soKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJh
c2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRl
eF07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIp
CisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAg
ICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRv
ciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmF0KG1faW5k
ZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJlLT5zaXplKCkgJiYgIW1fcHJv
Y2VkdXJlLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAg
IHJldHVybiBpbmV4OworICAgICAgICB9CisKKyAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVy
ZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgbnVtQmxvY2tzKCkpOyB9CisKK3By
aXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7
Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJD
b2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJ
bnN0LmgiCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9p
ZCBJbnN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9w
Y29kZSwgIiAiLCBsaXN0RHVtcChhcmdzKSwgIiAgOyAiLCAqb3JpZ2luKTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisj
ZGVmaW5lIEFpckluc3RfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyT3Bj
b2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsK
KworbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBJbnN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVl
KiBvcmlnaW4pCisgICAgICAgIDogb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBvcmlnaW4ob3Jp
Z2luKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnIGFyZywgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBvcGNvZGUob3Bjb2RlKQorICAgICAgICAs
IGFyZ3N7IGFyZywgYXJndW1lbnRzLi4uIH0KKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAg
IHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0
IEFyZ0xpc3QmIGFyZ3VtZW50cykKKyAgICAgICAgOiBvcGNvZGUob3Bjb2RlKQorICAgICAgICAs
IGFyZ3MoYXJncykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisKKyAg
ICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVj
YXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAorICAgIC8vIGVkaXQgSVIu
IElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJj
b25zdCBJbnN0JiIgdGhlbiB5b3UncmUKKyAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4K
KworICAgIC8vIFRoaXMgb25seSB3YWxrcyB0aG9zZSBUbXBzIHRoYXQgYXJlIGV4cGxpY2l0bHkg
bWVudGlvbmVkLCBhbmQgaXQgZG9lc24ndCB0ZWxsIHlvdSB0aGVpciByb2xlCisgICAgLy8gb3Ig
dHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRt
cEZhc3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoQXJnIGFy
ZyA6IGFyZ3MpCisgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAg
fQorCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4gVGhp
cyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3Iu
cmIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBcmco
Y29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRo
ICh0bXAsIHJvbGUsIHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBmb3JFYWNoVG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBm
b3JFYWNoQXJnUm9sZSgKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUs
IHR5cGUsIGZ1bmN0b3IpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gUmVwb3J0
cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQ2xvYmJlcmVk
UmVnKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gb25l
IG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5l
cmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNWYWxpZEZv
cm0oKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBm
b3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisgICAg
Ly8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgaW4gdGhlIGdpdmVuIGluZGV4PyBTcGlsbGluZyB1
c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvCisgICAgLy8gZmluZCBUbXBz
IHRoYXQgbmVlZCBzcGlsbGluZzsgaWYgaXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlzIHRvIHNl
ZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUKKyAgICAvLyBBcmc6OlRtcCB3aXRoIGFuIEFyZzo6QWRk
ci4gSWYgaXQgZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFyZydzIGZv
ckVhY2hUbXAgdG8KKyAgICAvLyBkbyBhIHJlcGxhY2VtZW50IHRoYXQgd2F5LgorICAgIC8vCisg
ICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9y
LnJiLgorICAgIGJvb2wgYWRtaXRzQWRkcih1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBH
ZW5lcmF0ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxp
dGVyYWxseSBvdXIgYmFja2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQg
cmV0dXJucyB0aGUganVtcCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBj
YXNlLCB3aXRoIHRoZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhp
cyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAg
IE1hY3JvQXNzZW1ibGVyOjpKdW1wIGdlbmVyYXRlKE1hY3JvQXNzZW1ibGVyJik7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIE9wY29kZSBvcGNvZGU7CisgICAg
QXJnTGlzdCBhcmdzOworICAgIFZhbHVlKiBvcmlnaW47IC8vIFRoZSBCMzo6VmFsdWUgdGhhdCB0
aGlzIG9yaWdpbmF0ZWQgZnJvbS4KK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEFpckluc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJJbnN0SW5saW5lc19oCisjZGVmaW5lIEFpckluc3RJbmxpbmVzX2gKKworI2lu
Y2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUg
IkFpclNwZWNpYWxzLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBJbnN0Ojpmb3JFYWNoQ2xvYmJlcmVk
UmVnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICBjYXNlIENoZWNrOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAg
ICBjYXNlIENoZWNrTXVsOgorICAgIGNhc2UgUGF0Y2hwb2ludDoKKyAgICAgICAgb3JpZ2luLT5z
dGFja21hcCgpLT5jbG9iYmVyZWQoKS5mb3JFYWNoKGZ1bmN0b3IpOworICAgICAgICBicmVhazsK
KworICAgIGNhc2UgQ2FsbDogeworICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlUmVnaXN0
ZXJzID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgZm9yIChS
ZWcgcmVnIDogUmVnOjphbGwoKSkgeworICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlUmVnaXN0
ZXJzLmdldChyZWcpKQorICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKKyAgICAgICAgfQor
ICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAg
ICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFp
ckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGVzLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGVzLm9wY29kZXMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZXMub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1
IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFN5bGxhYnVzOgor
IyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6
RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RyA9
PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBV
OkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpGID0+IGRlZiBvZiBh
IGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkYgPT4gdXNlIGFuZCBkZWYgb2YgYSBmbG9h
dCByZWdpc3RlciBvciB2YWx1ZQorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJlZ2lzdGVyCisjIEFk
ZHIgPT4gYWRkcmVzcyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJh
c2VJbmRleCBhZGRyZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKworIyBOb3RlIHRoYXQg
dGhlIG9wY29kZXMgaGVyZSBoYXZlIGEgbGVhZGluZyBjYXBpdGFsIChBZGQzMikgYnV0IG11c3Qg
Y29ycmVzcG9uZCB0byBNYWNyb0Fzc2VtYmxlcgorIyBBUEkgdGhhdCBoYXMgYSBsZWFkaW5nIGxv
d2VyLWNhc2UgKGFkZDMyKS4KKworQWRkMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJ
bW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAgIEFkZHIsIFRtcAorICAgIFRtcCwgQWRkcgorCitB
ZGQzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRtcAorCitBbmQzMiBVOkcsIFVEOkcK
KyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAgVG1wLCBBZGRyCisgICAgQWRkciwgVG1w
CisgICAgSW1tLCBBZGRyCisKK0xzaGlmdDMyIFU6RywgVUQ6RworICAgIFRtcCosIFRtcAorICAg
IEltbSwgVG1wCisKK011bDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1w
CisKK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAgSW1tUHRy
LCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9hZCAjIFRoaXMgbWVhbnMgdGhhdCAiTW92ZSBBZGRy
LCBUbXAiIGlzIGNvZGUtZ2VuZXJhdGVkIGFzICJsb2FkIiBub3QgIm1vdmUiLgorICAgIFRtcCwg
QWRkciBhcyBzdG9yZQorCitNb3ZlRG91YmxlIFU6RiwgRDpGCisgICAgVG1wLCBUbXAKKyAgICBB
ZGRyLCBUbXAgYXMgbG9hZERvdWJsZQorICAgIFRtcCwgQWRkciBhcyBzdG9yZURvdWJsZQorCitN
b3ZlNjRUb0RvdWJsZSBVOkcsIEQ6RgorICAgIFRtcCwgVG1wCisKK01vdmVEb3VibGVUbzY0IFU6
RiwgRDpHCisgICAgVG1wLCBUbXAKKworUmV0CisKKyMgU29tZSBvcGNvZGVzIGJlaGF2ZSBleG90
aWNhbGx5LiBGb3IgZXhhbXBsZSwgdGhleSBtYXkgaGF2ZSB2YXJhcmdzLiBPciwgdGhleSBtYXkg
cmVxdWlyZSBhIHNwZWNpYWwKKyMgY2xhc3Mgb2YgcmVnaXN0ZXJzIGZvciBzb21lIG9wZXJhbmQu
IE9yLCB0aGV5IG1heSB1c2Ugb3IgZGVmIGFkZGl0aW9uYWwgcmVnaXN0ZXJzLgorCisjIFRoZXNl
IGJlaGF2ZSBsaWtlIGhvdyB0aGUgU3RhY2ttYXAgb2JqZWN0IHRlbGxzIHRoZW0gdG8gYmVoYXZl
Lgorc3BlY2lhbCBDaGVja0FkZAorc3BlY2lhbCBDaGVja1N1YiAKK3NwZWNpYWwgQ2hlY2tNdWwK
K3NwZWNpYWwgQ2hlY2sKK3NwZWNpYWwgUGF0Y2hwb2ludAorCisjIFRha2VzIGFyZ3VtZW50IHJl
Z2lzdGVycyBhcyBpbnB1dHMuCitzcGVjaWFsIENhbGwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBUbXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPG5vbmU+Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNSZWcoKSkgeworICAgICAgICBv
dXQucHJpbnQocmVnKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzR1BU
bXAoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0bXAiLCBncFRtcEluZGV4KCkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCIlZnRtcCIsIGZwVG1wSW5kZXgoKSk7
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
clRtcF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBBIFRtcCBpcyBhIGdl
bmVyYWxpemF0aW9uIG9mIGEgcmVnaXN0ZXIuIEl0IGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIGFu
eSBHUFIgb3IgRlBSLiBJdCBjYW4gYWxzbworLy8gYmUgdXNlZCB0byByZWZlciB0byBhbiB1bmFs
bG9jYXRlZCByZWdpc3RlciAoaS5lLiBhIHRlbXBvcmFyeSkuIExpa2UgbWFueSBBaXIgY2xhc3Nl
cywgd2UgdXNlCisvLyBkZWxpYmVyYXRlbHkgdGVyc2UgbmFtaW5nIHNpbmNlIHdlIHdpbGwgaGF2
ZSB0byB1c2UgdGhpcyBuYW1lIGEgbG90LgorCitjbGFzcyBUbXAgeworcHVibGljOgorICAgIFRt
cCgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBU
bXAoUmVnIHJlZykKKyAgICB7CisgICAgICAgIGlmIChyZWcpIHsKKyAgICAgICAgICAgIGlmIChy
ZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlR1BSKHJlZy5ncHIo
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUZQ
UihyZWcuZnByKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fdmFsdWUgPSAwOwor
ICAgIH0KKworICAgIHN0YXRpYyBUbXAgZ3BUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAg
ICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2Rl
R1BUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBUbXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5kZXgpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZm9yUmF3VmFsdWUo
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1
bHQubV92YWx1ZSA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKwor
ICAgIGJvb2wgcmF3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBib29s
IGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFsdWUp
OworICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNFbmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0KKworICAg
IGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQUiht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAgIH0KKwor
ICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQUiht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVybiBmcHIo
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBm
cFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFRtcChtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKKyAgICAg
ICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90
aGVyLm1fdmFsdWU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRtcCYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQKHVu
c2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xIC0gaW5kZXg7CisgICAgfQor
CisgICAgc3RhdGljIGludCBlbmNvZGVHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlbmNvZGVHUChncHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQUihGUFJSZWcgZnByKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVuY29kZUZQKGZwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUlJlZ2lzdGVy
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAodW5zaWduZWQgaW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVn
aXN0ZXIoKSkgKyAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFRt
cCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUFIoTWFjcm9B
c3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4OworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzRW5jb2RlZEdQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZSA+IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlAoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc0VuY29kZWRHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5j
b2RlZEdQKHZhbHVlKSAmJiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RS
ZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFIoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiB2YWx1ZSA+
PSBlbmNvZGVkRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRHUFIodmFsdWUpOworICAg
IH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEZQUih2YWx1ZSk7
CisgICAgfQorCisgICAgc3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50IHZhbHVlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8R1BSUmVnPigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVuY29kZUdQUihNYWNyb0Fz
c2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3Rl
cigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQUihpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGUFJSZWc+KAorICAgICAgICAgICAgKGVuY29kZUZQUihNYWNyb0Fzc2Vt
Ymxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVk
IGRlY29kZUdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRH
UFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgZGVjb2RlRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2Rl
ZEZQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVy
OjpsYXN0RlBSZWdpc3RlcigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQorCisgICAgLy8gMDogZW1w
dHkgVG1wCisgICAgLy8gcG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1AgdGVtcHMuCisgICAgLy8g
bmVnYXRpdmU6IEZQUnMgYW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50IG1fdmFsdWU7Cit9Owor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJUbXBfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJh
dG9yLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNv
ZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUxIEBACisjIS91c3Iv
YmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3Jl
cXVpcmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNvZGUKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwg
OnNwZWNpYWwsIDpvdmVybG9hZHMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHNwZWNpYWwp
CisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IHNwZWNpYWwKKyAgICAg
ICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBvdmVybG9hZHMgPSBbXQorICAgICAgICBl
bmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQorICAgICAgICBuYW1lWzBdLmRvd25jYXNl
ICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBBcmcKKyAgICBhdHRyX3JlYWRl
ciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFsaXplKHJvbGUsIHR5cGUpCisgICAgICAg
IEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5cGUKKyAgICBlbmQKK2VuZAorCitjbGFz
cyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1cmUsIDpmb3JtcworCisgICAgZGVm
IGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgQHNpZ25hdHVyZSA9IHNpZ25h
dHVyZQorICAgICAgICBAZm9ybXMgPSBmb3JtcworICAgIGVuZAorZW5kCisKK2NsYXNzIEtpbmQK
KyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfYWNjZXNzb3IgOnNwZWNpYWwKKworICAg
IGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3Bl
Y2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90
aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFtZSBhbmQgQHNwZWNpYWwgPT0gb3RoZXIu
c3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitjbGFzcyBGb3JtCisgICAgYXR0
cl9yZWFkZXIgOmtpbmRzLCA6YWx0TmFtZQorCisgICAgZGVmIGluaXRpYWxpemUoa2luZHMsIGFs
dE5hbWUpCisgICAgICAgIEBraW5kcyA9IGtpbmRzCisgICAgICAgIEBhbHROYW1lID0gYWx0TmFt
ZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFt
ZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51
bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIg
PSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7Zmls
ZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBh
dHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3Jp
Z2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9
IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3Ro
ZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAg
ZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisg
ICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBh
dCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQp
CisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJy
b3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJv
cjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKwor
ZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVO
YW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qg
c3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikv
CisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAg
ICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQor
ICAgICAgICB3aGVuIC9cQShbYS16QS1aMC05X10rKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBU
b2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3
aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAg
ICAgICB3aGVuIC9cQVssOipdLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmln
aW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1i
ZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAg
ICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1
bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQp
KVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxa
LworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0p
fChJbW1QdHIpfChBZGRyKXwoSW5kZXgpKVxaLworZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4p
CisgICAgaXNVRCh0b2tlbikgb3IgaXNHRih0b2tlbikgb3IgaXNLaW5kKHRva2VuKSBvcgorICAg
ICAgICB0b2tlbiA9PSAic3BlY2lhbCIgb3IgdG9rZW4gPT0gImFzIgorZW5kCisKK2RlZiBpc0lk
ZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKFthLXpBLVowLTlfXSspXFovIGFuZCBu
b3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFs
aXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1l
KQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0
b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0g
MQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRv
a2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNl
CisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQ
YXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisg
ICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShz
dHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0
b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1
bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJz
ZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQp
CisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29u
c3VtZVJvbGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJy
b3IoIkV4cGVjdGVkIHJvbGUgKFUsIEQsIG9yIFVEKSIpIHVubGVzcyBpc1VEKHJlc3VsdCkKKyAg
ICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1l
VHlwZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigi
RXhwZWN0ZWQgdHlwZSAoRyBvciBGKSIpIHVubGVzcyBpc0dGKHJlc3VsdCkKKyAgICAgICAgYWR2
YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lS2luZAorICAg
ICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQg
a2luZCAoSW1tLCBJbW1QdHIsIFRtcCwgQWRkciwgb3IgSW5kZXgpIikgdW5sZXNzIGlzS2luZChy
ZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBk
ZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisgICAgICAgIGxvb3Agewor
ICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAg
ICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBjb25zdW1lKCJzcGVjaWFs
IikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAg
ICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2Rl
IikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2Rl
TmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAg
ICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2Rl
ID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNh
bm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IE9wY29kZS5uZXco
b3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1l
XSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgc2lnbmF0
dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAgaWYg
aXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAg
ICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1
bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBlCisgICAg
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8
PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcyA9IFtdCisg
ICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0gbmlsCisgICAgICAgICAgICAgICAgICAg
ICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kcyA8PCBLaW5kLm5l
dyhjb25zdW1lS2luZCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09
ICIqIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW4gb25s
eSBhcHBseSAqIHRvIFRtcCIpIHVubGVzcyBraW5kc1stMV0ubmFtZSA9PSAiVG1wIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kc1stMV0uc3BlY2lhbCA9IHRydWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiKiIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxl
c3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLCIp
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IHRva2VuID09ICJhcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCJhcyIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IGNvbnN1bWVJZGVudGlmaWVy
CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VFcnJvcigiRm9ybSBoYXMgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Igb3Zlcmxv
YWQiKSB1bmxlc3Mga2luZHMubGVuZ3RoID09IHNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGtpbmRzLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
a2luZC5uYW1lID09ICJJbW0iIG9yIGtpbmQubmFtZSA9PSAiSW1tUHRyIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnJvbGUgIT0gIlUiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBp
bW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1
cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVy
cG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoa2luZHMsIGFsdE5hbWUp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgaXNLaW5kKHRva2VuKQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBzaWduYXR1cmUgPSBbXQorICAgICAgICAgICAgICAgICAgICBmb3JtcyA9IFtGb3JtLm5l
dyhbXSwgbmlsKV0KKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIG9wY29k
ZS5vdmVybG9hZHMgPDwgT3ZlcmxvYWQubmV3KHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorZW5kCisKKyRmaWxl
TmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZCgkZmlsZU5hbWUp
LCAkZmlsZU5hbWUpCiskb3Bjb2RlcyA9IHBhcnNlci5wYXJzZQorCitkZWYgd3JpdGVIKGZpbGVu
YW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tmaWxlbmFtZX0uaCIsICJ3IikgeworICAgICAgICB8
IG91dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bj
b2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAg
ICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQWlyI3tmaWxlbmFtZX1faCIKKyAgICAg
ICAgb3V0cC5wdXRzICIjZGVmaW5lIEFpciN7ZmlsZW5hbWV9X2giCisKKyAgICAgICAgeWllbGQg
b3V0cAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQWlyI3tmaWxlbmFt
ZX1faCIKKyAgICB9CitlbmQKKworZGVmIHdyaXRlQ1BQKGZpbGVuYW1lKQorICAgIEZpbGUub3Bl
bigiQWlyI3tmaWxlbmFtZX0uY3BwIiwgInciKSB7CisgICAgICAgIHwgb3V0cCB8CisgICAgICAg
IAorICAgICAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJi
IGZyb20gI3skZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKyAgICAgICAgCisgICAgICAgIG91
dHAucHV0cyAiI2luY2x1ZGUgXCJjb25maWcuaFwiIgorICAgICAgICBvdXRwLnB1dHMgIiNpbmNs
dWRlIFwiQWlyI3tmaWxlbmFtZX0uaFwiIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICB9Citl
bmQKKword3JpdGVIKCJPcGNvZGVzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAu
cHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVh
Y2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2Rl
fSwiCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAic3RhdGljIGNv
bnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6ZX07IgorICAgIG91
dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAgICAKKyAgICBvdXRw
LnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNzIFByaW50U3RyZWFt
OyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9
CisKK3dyaXRlQ1BQKCJPcGNvZGVzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIj
aW5jbHVkZSBcInd0Zi9QcmludFN0cmVhbS5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2Ug
V1RGIHsiCisgICAgb3V0cC5wdXRzICJ1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyOyIKKyAg
ICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUg
b3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICIgICAgc3dpdGNoIChv
cGNvZGUpIHsiCisgICAgJG9wY29kZXMua2V5cy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAor
ICAgICAgICBvdXRwLnB1dHMgIiAgICBjYXNlICN7b3Bjb2RlfToiCisgICAgICAgIG91dHAucHV0
cyAiICAgICAgICBvdXQucHJpbnQoXCIje29wY29kZX1cIik7IgorICAgICAgICBvdXRwLnB1dHMg
IiAgICAgICAgcmV0dXJuOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICIgICAgfSIKKyAgICBvdXRw
LnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMg
In0iCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKKyMgRnJvbSBoZXJl
IG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBzaW5jZSB3
ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuCisjIG1hdGNoZXIuCisKK2RlZiBtYXRjaEZv
cm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXgsIGNvbHVtbkdldHRlciwgZmlsdGVy
LCBjYWxsYmFjaykKKyAgICByZXR1cm4gaWYgZm9ybXMubGVuZ3RoID09IDAKKworICAgIGlmIGZp
bHRlcltmb3Jtc10KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBpZiBjb2x1bW5JbmRl
eCA+PSBmb3Jtc1swXS5raW5kcy5sZW5ndGgKKyAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxl
bmd0aCA9PSAxCisgICAgICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQorICAgICAgICByZXR1cm4KKyAg
ICBlbmQKKyAgICAKKyAgICBncm91cHMgPSB7fQorICAgIGZvcm1zLmVhY2ggeworICAgICAgICB8
IGZvcm0gfAorICAgICAgICBraW5kID0gZm9ybS5raW5kc1tjb2x1bW5JbmRleF0ubmFtZQorICAg
ICAgICBpZiBncm91cHNba2luZF0KKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA8PCBmb3JtCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA9IFtmb3JtXQorICAgICAgICBl
bmQKKyAgICB9CisKKyAgICBpZiBzcGVlZCA9PSA6ZmFzdCBhbmQgZ3JvdXBzLmxlbmd0aCA9PSAx
CisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCArIDEs
IGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuCisgICAgZW5k
CisKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tjb2x1bW5HZXR0ZXJbY29sdW1uSW5kZXhdfSkg
eyIKKyAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgfCBrZXksIHZhbHVlIHwKKyAgICAg
ICAgb3V0cC5wdXRzICJjYXNlIEFyZzo6I3trZXl9OiIKKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRw
LCBzcGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNh
bGxiYWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRz
ICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitl
bmQKKworZGVmIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG91dHAu
cHV0cyAic3dpdGNoICgje2luc3R9LT5vcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVh
Y2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29k
ZS5uYW1lfToiCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBv
cGNvZGUsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2gg
PSAoKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkKKyAgICAg
ICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIgaWYgbmVl
ZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAg
ICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2Fz
ZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisg
ICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZAorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAg
ICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIK
KyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAgICAKK2Rl
ZiBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0Y2hJbnN0
T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGluc3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2Fk
IHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwg
bmlsLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7
CisgICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgIiN7aW5z
dH0tPmFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb2Mg
eworICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2Rl
LCBvdmVybG9hZCwgZm9ybQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hGb3Jtcyhv
dXRwLCBzcGVlZCwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxs
YmFjaykKKyAgICAgICAgZW5kCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7
CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisg
ICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpclNwZWNpYWxzLmhcIiIKKyAgICBvdXRwLnB1dHMg
Im5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0
cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQg
SW5zdDo6Zm9yRWFjaEFyZ1JvbGUoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5w
dXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAg
ICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAg
ICAgICAgICAgIG91dHAucHV0cyAiI3tvcGNvZGUubmFtZX1TcGVjaWFsczo6Zm9yRWFjaEFyZ1Jv
bGUodGhpcywgZnVuY3Rvcik7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5z
aWduYXR1cmUuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXgg
fAorICAgICAgICAgICAgICAgIHJvbGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5y
b2xlCisgICAgICAgICAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9
ICJVc2UiCisgICAgICAgICAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9s
ZSA9ICJEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAg
IHJvbGUgPSAiVXNlRGVmIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwg
QXJnOjoje2FyZy50eXBlfVApOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQor
ICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAor
ICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMgIiNp
bmNsdWRlIFwiQWlyU3BlY2lhbHMuaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImlubGluZSBi
b29sIGhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgIiNkZWZp
bmUgUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYgKGhpZGRlblRy
dXRoKCkpXFwiCisgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVybiB2YWx1ZTtcXCIKKyAgICBv
dXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVmFsaWRGb3JtKCkiCisg
ICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6c2FmZSwg
InRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAgIGlm
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTigje29wY29kZS5u
YW1lfVNwZWNpYWxzOjppc1ZhbGlkKHRoaXMpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0
dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAg
ICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZQorICAgICAgICAgICAg
ICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUKKyAgICAgICAgICAgICAg
ICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAgICAgICAgICBuZWVkc01vcmVWYWxp
ZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0
byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAgICAgICAgICAjIGtpbmQgaW1wbGll
cyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBpcyB0aGUgdHlwZS4g
QW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gdmFsaWRhdGUgdGhlIHR5cGUg
aWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIlRtcCIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tpbmRleH1dLnRtcCgp
LmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiUkVUVVJOKGZh
bHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoISN7
b3Bjb2RlLm5hbWV9U3BlY2lhbHM6OmlzVmFsaWQodGhpcykpIgorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91
dHAucHV0cyAiUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0
cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJv
b2wgSW5zdDo6YWRtaXRzQWRkcih1bnNpZ25lZCBhcmdJbmRleCkiCisgICAgb3V0cC5wdXRzICJ7
IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVz
LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29w
Y29kZS5uYW1lfToiCisKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91
dHAucHV0cyAiUkVUVVJOKCN7b3Bjb2RlLm5hbWV9U3BlY2lhbHM6OmFkbWl0c0FkZHIoYXJnSW5k
ZXgpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgU3dpdGNoIG9uIHRoZSBhcmdJbmRl
eC4KKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdJbmRleCkgeyIKKworICAgICAg
ICAgICAgbnVtQXJncyA9IG9wY29kZS5vdmVybG9hZHMubWFwIHsKKyAgICAgICAgICAgICAgICB8
IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoCisg
ICAgICAgICAgICB9Lm1heAorICAgICAgICAgICAgCisgICAgICAgICAgICBudW1BcmdzLnRpbWVz
IHsKKyAgICAgICAgICAgICAgICB8IGFyZ0luZGV4IHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3thcmdJbmRleH06IgorCisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBhbGwg
b2YgdGhlIGZvcm1zIG9mIGFsbCBvZiB0aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywgb3IgZG9uJ3Qs
IGFkbWl0IGFuIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAjIGF0IHRoaXMgaW5kZXguIFdlIGV4
cGVjdCB0aGlzIHRvIGJlIGEgdmVyeSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgICAgICBudW1Z
ZXMgPSAwCisgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAgb3Bjb2Rl
Lm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAg
ICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAg
ICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJn
SW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAx
CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtTm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIE5vdGUgdGhh
dCB3ZSBkZWxpYmVyYXRlbHkgdGVzdCBudW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3ZSBlbmQgdXAg
d2l0aCBubyBmb3Jtcywgd2Ugd2FudAorICAgICAgICAgICAgICAgICMgdG8gc2F5IHRoYXQgQWRk
cmVzcyBpcyBpbmFkbWlzc2libGUuCisgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAg
ICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiUkVU
VVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICMg
Tm93IGRvIHRoZSBmdWxsIHRlc3QuCisKKyAgICAgICAgICAgICAgICAgICAgbmVlZE92ZXJsb2Fk
U3dpdGNoID0gKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKQorCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCisgICAgICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKworICAgICAgICAgICAgICAgICAgICAgICAg
IyBBZ2FpbiwgY2hlY2sgaWYgYWxsIG9mIHRoZW0gZG8gd2hhdCB3ZSB3YW50LgorICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8g
PSAwCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAg
ICAgIyBEb24ndCBlbWl0IGFueXRoaW5nLCBqdXN0IGRyb3AgdG8gZGVmYXVsdC4KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5l
ZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
UkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQu
c2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgVGhpcyBpcyBob3cgd2UgdGVzdCB0aGUgaHlwb3RoZXNpcyB0aGF0
IGNoYW5naW5nIHRoaXMgYXJndW1lbnQgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjIGFkZHJlc3MgeWllbGRzIGEgdmFsaWQgZm9ybS4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNv
bHVtbkluZGV4ID09IGFyZ0luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiQXJnOjpBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnc1sje2NvbHVtbkluZGV4fV0ua2lu
ZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJv
YyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybXMgfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9y
bS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgRHJvcCBkb3duLCBlbWl0IG5vIGNvZGUsIHNpbmNlIHdlIGNhbm5v
dCBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyBLZWVwIGdvaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
UkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMs
IDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBlbmQKKyAg
ICAgICAgCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMg
ImRlZmF1bHQ6IjsKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisg
ICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91
dHAucHV0cyAiTWFjcm9Bc3NlbWJsZXI6Okp1bXAgSW5zdDo6Z2VuZXJhdGUoTWFjcm9Bc3NlbWJs
ZXImIGppdCkgY29uc3QiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiTWFjcm9B
c3NlbWJsZXI6Okp1bXAgcmVzdWx0OyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwg
OmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAg
ICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4oI3tv
cGNvZGUubmFtZX1TcGVjaWFsczo6Z2VuZXJhdGUodGhpcywgaml0KSk7IgorICAgICAgICBlbHNl
CisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1l
ID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWV0aG9k
TmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRw
LnByaW50ICJqaXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMuZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAg
ICAgICAgICBpZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgIiwg
IgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1lCisg
ICAgICAgICAgICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9h
ZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZnBy
KCkiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIkltbSIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVk
SW1tMzIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbW1QdHIiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbVB0cigpIgorICAgICAg
ICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFy
Z3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4Igor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRl
eCgpIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBv
dXRwLnB1dHMgIik7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4ocmVzdWx0KTsiCisg
ICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcu
aAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZhbGlkKCk7IH0KLSAgICBib29sIG9wZXJhdG9y
ISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IGRlbGV0ZWQoKTsgfQpAQCAtMTcw
LDYgKzE2OSw0NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAKKyAgICBjbGFzcyBBbGxSZWdzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKworICAg
ICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJh
dG9yKCkgeyB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKFJlZyByZWcpCisgICAg
ICAgICAgICAgICAgOiBtX3JlZyhyZWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3JlZzsgfQorCisg
ICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9yZWcgPSBtX3JlZy5uZXh0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX3JlZyA9PSBvdGhlci5tX3JlZzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIFJlZyBtX3JlZzsKKyAgICAgICAg
fTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJl
Zzo6Zmlyc3QoKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoUmVnKCkpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxs
KCkgY29uc3QgeyByZXR1cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBz
dGF0aWMgdWludDhfdCBpbnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
Nyw2ICsxMTcsMTMgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBS
ZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVj
dG9yOyB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2go
KTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2go
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
IDogbV92ZWN0b3Iuc2V0Qml0cygpKQorICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRl
eChpbmRleCkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJl
ZykgeyBzZXQocmVnKTsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263549</attachid>
            <date>2015-10-19 21:59:56 -0700</date>
            <delta_ts>2015-10-20 14:16:18 -0700</delta_ts>
            <desc>a bit more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>228283</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1f
aW5kZXgoaW5kZXgpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwor
dm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFw
cGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNp
Y0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxv
Y2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFs
dWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0
OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlJ3MgdHlwZWRlZi4KKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVM
aXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBW
YWx1ZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAg
VmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4
KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBt
X3ZhbHVlczsgfQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSog
YXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1T
dWNjZXNzb3JzKCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KTsK
KyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAK
KyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWdu
ZWQgaW5kZXgpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1
ZXM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBC
YXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2Nr
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1
bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBC
YXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4g
RGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9s
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9jZWR1
cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pOworICAgIGFw
cGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2ljQmxv
Y2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+
YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitCYXNpY0Jsb2NrKiYg
QmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBsYXN0
KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworY29uc3QgQmFz
aWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVj
a1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwg
c3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNl
IENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisg
ICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1
YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQo
bGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09
IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOwor
ICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVk
aWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVk
aWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gK
KworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5w
YXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJp
c29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIg
Q29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFuZChMb2FkKGFkZHJlc3Mp
LCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChhZGRyZXNzKSkKK1Rl
c3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8xID0gRXF1YWwoQW5k
KExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0gRXF1YWwoQW5kKGxl
ZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5kKGxlZnQsIHJpZ2h0
KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCByaWdodCkKK0xvYWRF
cXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1YWwodmFsdWUsICQw
KQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkK
K3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFsdWVfaAorI2RlZmlu
ZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAg
CisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6
IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Nv
bnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2
NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25z
dDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAg
ICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBp
bnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3Jp
Z2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBp
bnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25z
dERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJs
ZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAg
ICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0RG91Ymxl
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAgICAs
IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdERvdWJs
ZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJv
bFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9s
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xW
YWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisK
K2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAg
Y2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVj
YXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2Fu
dAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1
cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAgfkNvbnRyb2xW
YWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAgIEJhc2ljQmxvY2sq
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQor
CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRyb2xWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUs
IG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTdWJjbGFzc2Vz
IHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMg
Zm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9y
aWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CisgICAgfQorCisg
ICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCisgICAgeworICAg
ICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMg
Zm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9
PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKwor
ICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRp
Y2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBubykKKyAgICAgICAg
OiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFw
cGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0
aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNp
Y0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3Qg
Y3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5
IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8g
SWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Js
b2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIElu
ZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUt
PmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0
aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29s
bGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBD
b2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0
ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24p
CisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBt
X2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRl
cmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24s
IG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlv
blR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAg
IH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQu
dmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86Cisg
ICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZh
bHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQor
CisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMo
KS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgs
IGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5w
YXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
aW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisjIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5nTWF0Y2hl
cgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcg
YXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50cyB3
aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1h
dGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCisKK0xv
YWQgPSBMb2FkKGFkZHJlc3MpCisKK0FkZExvYWQgPSBBZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUp
CitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK1N0b3JlQWRkTG9hZCA9IFN0b3JlKEFkZChMb2Fk
KGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZUFuZExvYWQgPSBTdG9yZShBbmQoTG9h
ZChhZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRkcmVz
cykKKworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQoreworfQor
Cit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29mZnNl
dCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgTWVt
b3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
ICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2Fk
MTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAg
ICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3Jl
MTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAgICBp
bnRwdHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3Jt
IGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRo
YXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBl
KS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGlu
dHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwg
b3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAg
ICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkg
eworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAg
IGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEb3Vi
bGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZv
aWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1
cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50cHRyX3Qgb2Zmc2V0
ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0
ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAg
ICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBj
YXNlIExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVt
b3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4g
b3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnRwdHJfdCBv
ZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwg
dmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7
CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAg
ICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM09wY29kZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJpbnQoIklkZW50aXR5
Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gRklYTUUKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2Rl
IDogaW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZv
ciB3aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAg
Ly8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAg
IElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNz
ZXMuIENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgor
ICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2Ug
Y29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29u
c3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3Qu
IFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJl
Z2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFj
aCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YK
KyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAg
U3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMg
aXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8g
cmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBj
b21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJl
ciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNh
dmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBp
biBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNz
LiBUaGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykg
b3IgRG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJh
bWUgcG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0
IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBj
YXZlYXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFy
aWx5IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJp
bnNpYyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QK
KyAgICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50
ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlw
ZS4KKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRl
Z2VyIG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxp
a2UgSlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJp
dFhvciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5k
IHN1Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAg
U0V4dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQz
MiwKKyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZS
b3VuZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAor
ICAgIC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAg
ICAvLyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUu
IFJldHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVx
dWFsKHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAg
IEdyZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAv
LyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwK
KyAgICBCZWxvdywKKyAgICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1l
bW9yeSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0
eXBlLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgor
ICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAg
IC8vIFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMgcmV0
dXJuIHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8gTWVt
b3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4gVGhl
c2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6Cisg
ICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2YWx1
ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBm
b3IgSW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhpcyBp
cyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVtIEMg
Y2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVudHMg
YXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAvLyBU
aGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRoaXMg
aXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVtaXRz
IGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMg
dG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBhbG9u
ZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3QgYmUg
cGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAgYXJn
dW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0CisgICAg
Ly8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhlIHRv
cCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgorICAg
IFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1ZSBj
bGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24KKyAg
ICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFmdGVy
IHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20gdGhl
IGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBzdXBw
bHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBq
dW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBzaW5j
ZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24gb2Yg
dGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4uIEZv
cgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8vCisg
ICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisgICAg
Ly8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8KKyAg
ICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAvLwor
ICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQgYnkg
dGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2FsbGJh
Y2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFyZSBk
aWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3QgQ2hl
Y2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9zc2li
bHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVja0Fk
ZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tTdWIs
CisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0aGUg
Q2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMgYQor
ICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFu
IEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1bGwg
YnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBq
dW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ssCisK
KyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBzaWxv
biwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisgICAg
Ly8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAgCisg
ICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gQnJh
bmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZhbHVl
IGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNjZXNz
b3IuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJ
bnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNoLAor
CisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRoZWly
IHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBlLiBV
c2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhpcyBp
cyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZS4g
VXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Jp
Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUg
QjNPcmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9v
c2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJl
IGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5z
dHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRp
b25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3Jp
dGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVz
IGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdp
bihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAg
ICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0
YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRl
OgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisK
KyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2
b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgb3V0LnByaW50KGNvbW1hLCAic3RhY2ttYXAg
PSAiLCBzdGFja21hcCk7CisgICAgaWYgKHNoYWRvdykKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAic2hhZG93ID0gIiwgc2hhZG93KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNk
ZWZpbmUgQjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2lu
dDsgfQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7
CisgICAgdW5zaWduZWQgc2hhZG93IHsgMCB9OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1w
TWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgs
IFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4p
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBhdGNocG9pbnQsIHR5cGUsIG9yaWdpbiwgY2hpbGRy
ZW4pCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNQYXRjaHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2su
aCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2NlZHVy
ZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soKQoreworICAgIHN0
ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNC
bG9jaz4obV9ibG9ja3Muc2l6ZSgpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5n
ZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5w
cmludChkZWVwRHVtcChibG9jaykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKworI2lu
Y2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1ZTsK
KworY2xhc3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1cmUp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgUHJvY2VkdXJl
KCk7CisgICAgflByb2NlZHVyZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soKTsKKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9y
W10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAg
ICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVy
ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUp
CisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5k
TmV4dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Owor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1
bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9w
cm9jZWR1cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAg
ICAgICBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKworICAg
ICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4Owor
ICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0
aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0
aGlzLCBudW1CbG9ja3MoKSk7IH0KKworICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAg
IHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29sbGVjdGlvbihQcm9jZWR1cmUmIHByb2NlZHVyZSkK
KyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQor
ICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQg
aW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAg
ICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2Nl
ZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAg
ICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwg
MCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9w
cm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpOyB9
CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9j
ZWR1cmUubV92YWx1ZXNbaW5kZXhdOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRvcltdKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAgCisgICAgcHJp
dmF0ZToKKyAgICAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICB9OworCisgICAgVmFs
dWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsg
fQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1f
YmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZUlubGluZXNf
aAorI2RlZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1ZW50cy4uLiBhcmd1bWVudHMpCit7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3Zh
bHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFs
dWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNQcm9jZWR1cmVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVl
KCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90
OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVk
IGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIFlvdSBjYW5ub3QgcmVseSBvbiBpdCBoYXZpbmcg
YSBtZWFuaW5nZnVsCisgICAgLy8gdmFsdWUgd2hpbGUgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcu
CisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9t
RlA7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisg
ICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVk
IGJ5dGVTaXplKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXIoKSwg
b3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9vZmZz
ZXRGcm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAg
ICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKwordm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgIntvcGFxdWUgPSAiLCBSYXdQb2ludGVyKG1f
b3BhcXVlKSwgIiwgcmVwcyA9ICIsIGxpc3REdW1wKG1fcmVwcyksCisgICAgICAgICIsIGdlbmVy
YXRvciA9ICIsIFJhd1BvaW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBjbG9iYmVyZWQgPSAi
LCBtX2Nsb2JiZXJlZCwKKyAgICAgICAgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lz
dGVycywgIn0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNpbmNsdWRlICJCM1ZhbHVl
UmVwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQjNWYWx1ZTsKKworY2xhc3MgU3RhY2ttYXAgeworcHVibGljOgor
ICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgVmFs
dWUgY29udGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZhbHVlKiB2YWx1ZTsKKworICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAgU3RhY2ttYXAqIHN0YWNrbWFw
OworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGp1bXAgdG8gdGhlIHNsb3cgcGF0aCwgaWYgdGhp
cyBpcyBhIHN0YWNrbWFwIGZvciBhIENoZWNrIHZhbHVlLgorICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAganVtcDsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5j
dGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRl
ZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3Rh
Y2ttYXAoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBp
ZGVudGlmeSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAt
dXNpbmcgVmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRl
IG1heSBlbmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisg
ICAgLy8gYWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIg
YmFjayB0byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdl
cmUgdXNpbmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBw
YXJhbWV0ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9Cisg
ICAgdm9pZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENv
bnZlbmllbmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMu
CisgICAgdm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBz
ZXRPcGFxdWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qg
b3BhcXVlSW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUo
KSk7IH0KKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1
c2VzIHRoaXMgU3RhY2ttYXAuIE5vdGUgdGhhdCBpbmRleCB6ZXJvIHJlZmVycyB0byB0aGUKKyAg
ICAvLyBmaXJzdCBhcmd1bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQg
aXMgbm90IGNvbnN0cmFpbmFibGUuIEZvciBleGFtcGxlLCBpbiBhCisgICAgLy8gQ2hlY2tBZGQg
dmFsdWUsIGl0IHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEu
IEluIGEgQ2hlY2sgdmFsdWUsIGl0IHdvdWxkCisgICAgLy8gYmUgYW4gZXJyb3IgdG8gY29uc3Ry
YWluIGluZGV4IDAuIEJ1dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQs
IHlvdSBjYW4gZGVwZW5kCisgICAgLy8gb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVp
bmcgZmlsbGVkIGluLgorICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBW
YWx1ZVJlcCYgcmVwKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXpl
KCkpCisgICAgICAgICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNb
aW5kZXhdID0gcmVwOworICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNl
dCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisK
KyAgICBjb25zdCBSZWdpc3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9i
YmVyZWQ7IH0KKworICAgIHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVy
YXRvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRl
U2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgLy8g
VGhlc2Ugd2lsbCByZXR1cm4gaW50ZXJlc3RpbmcgdGhpbmdzIGluc2lkZSB0aGUgZ2VuZXJhdG9y
IGNhbGxiYWNrLCBvciBhZnRlciBjb21waWxhdGlvbi4KKyAgICBjb25zdCBWZWN0b3I8VmFsdWVS
ZXA+JiByZXBzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBzOyB9CisgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICB2
b2lkKiBtX29wYXF1ZSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsK
KyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBtX2Ns
b2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisj
aW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit2b2lkIFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQobV9jYXNlVmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKG1fdGFyZ2V0KSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRj
aENhc2VfaAorI2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4
dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKworY2xhc3MgU3dpdGNoQ2FzZSB7
CitwdWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisgICAgeworICAgIH0KKworICAgIFN3aXRjaENh
c2UoaW50NjRfdCBjYXNlVmFsdWUsIEJhc2ljQmxvY2sqIHRhcmdldCkKKyAgICAgICAgOiBtX2Nh
c2VWYWx1ZShjYXNlVmFsdWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3Rh
cmdldDsgfQorCisgICAgaW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VW
YWx1ZTsgfQorICAgIEJhc2ljQmxvY2sqIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgaW50NjRfdCBjYXNlVmFsdWU7CisgICAgQmFzaWNCbG9jayogdGFyZ2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N3aXRjaENhc2VfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2xkdWUgIkIzU3dpdGNo
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N3aXRjaFZhbHVl
Ojp+U3dpdGNoVmFsdWUoKQoreworfQorCitTd2l0Y2hDYXNlIFN3aXRjaFZhbHVlOjpyZW1vdmVD
YXNlKHVuc2lnbmVkIGluZGV4KQoreworICAgIFN3aXRjaENhc2UgcmVzdWx0ID0gbV9zdWNjZXNz
b3JzW2luZGV4XTsKKyAgICBtX3N1Y2Nlc3NvcnNbaW5kZXhdID0gbV9zdWNjZXNzb3JzLmxhc3Qo
KTsKKyAgICBtX3N1Y2Nlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNo
Q2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOwor
ICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRh
cmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30K
Kwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICAvLyBUaGlzIGRlc3RydWN0aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBN
ZXRhKCkuCisgICAgb3V0LnByaW50KGxpc3REdW1wKCp0aGlzKSk7Cit9CisKK1N3aXRjaFZhbHVl
OjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayog
ZmFsbFRocm91Z2gpCisgICAgOiBDb250cm9sVmFsdWUoaW5kZXgsIFN3aXRjaCwgb3JpZ2luKQor
eworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoZmFsbFRocm91Z2gpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAor
I2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBTd2l0Y2hWYWx1ZSA6IHB1YmxpYyBDb250cm9sVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09
IFN3aXRjaDsgfQorCisgICAgflN3aXRjaFZhbHVlKCk7CisKKyAgICAvLyBudW1DYXNlVmFsdWVz
KCkgKyAxID09IG51bVN1Y2Nlc3NvcnMoKS4KKyAgICB1bnNpZ25lZCBudW1DYXNlVmFsdWVzKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CisKKyAgICAvLyBUaGUgc3VjY2Vzc29y
IGZvciB0aGlzIGNhc2UgdmFsdWUgaXMgYXQgdGhlIHNhbWUgaW5kZXguCisgICAgaW50NjRfdCBj
YXNlVmFsdWUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2ldOyB9Cisg
ICAgCisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXM7IH0KKworICAgIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKCkgY29uc3QgeyBy
ZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorICAgIEJhc2ljQmxvY2sqJiBmYWxsVGhyb3Vn
aCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNlIGF0KHVu
c2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENhc2UoY2Fz
ZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7CisgICAgfQorICAgIFN3aXRjaENhc2Ug
b3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBh
dChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3aXRjaChudWxscHRyKQorICAgICAg
ICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAg
ICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRvciooKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgpOworICAg
ICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Owor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTd2l0Y2hWYWx1ZSogbV9zd2l0
Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIC8v
IFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJZiB5b3Un
cmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlvdSBjYW4g
a2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRoaXMgc2Ft
ZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIgY2FzZSB2
YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAgIFN3aXRj
aENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVuZENhc2Uo
Y29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCk7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQz
MiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50
KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91
dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAor
I2RlZmluZSBCM1R5cGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lkLAorICAg
IEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJvb2wgaXNJbnQo
VHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUgPT0gSW50NjQ7
Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBl
ID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlcigpIGNvbnN0Cit7CisgICAgaWYg
KHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVybiBJ
bnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNUeXBl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM1Vwc2lsb25WYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJeIiwg
bV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2lsb25WYWx1
ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAg
IHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVw
c2lsb247IH0KKworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBjb25z
dCB7IHJldHVybiBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQ
cm9jZWR1cmU7CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAgewor
ICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQorCisg
ICAgVmFsdWUqIG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhbHVlOjp+
VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNl
IHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAg
IC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBp
bmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3Vz
IHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVl
IGluIHBsYWNlLgorCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlw
ZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9j
ayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5y
ZXBsYWNlbWVudDsKKyAgICB2b2lkKiBtaXNjID0gdGhpcy0+bWlzYzsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVl
KCk7CisKKyAgICBuZXcgKHRoaXMpIChpbmRleCwgSWRlbnRpZnksIHR5cGUsIG9yaWdpbiwgdmFs
dWUpOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNlbWVudCA9
IHJlcGxhY2VtZW50OworICAgIHRoaXMtPm1pc2MgPSBtaXNjOworfQorCit2b2lkIFZhbHVlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgs
IG1faW5kZXgpOworfQorCit2b2lkIFZhbHVlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICIgIiwgKnRoaXMsICIgPSAiLCBtX29wY29k
ZSk7CisKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAg
Zm9yIChWYWx1ZSogY2hpbGQgOiBjaGlsZHJlbigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
IHBvaW50ZXJEdW1wKGNoaWxkKSk7CisKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJpbmdPdXQ7
CisgICAgZHVtcE1ldGEoc3RyaW5nT3V0KTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IHN0cmluZ091
dC50b0NTdHJpbmcoKTsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBvdXQucHJp
bnQoY29tbWEsIHN0cmluZyk7CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKworYm9vbCBWYWx1
ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50MzJfdCBW
YWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3QKK3sKK30KKworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bj
b2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNh
c2UgSWRlbnRpdHk6CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBNdWw6
CisgICAgY2FzZSBEaXY6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAgICBj
YXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2Ug
U2hsOgorICAgIGNhc2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVja0FkZDoK
KyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiBm
aXJzdENoaWxkLT50eXBlKCk7CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJldHVy
biBwb2ludGVyKCk7CisgICAgY2FzZSBTRXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBjYXNl
IERUb0kzMjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6CisgICAgY2FzZSBM
ZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgTGVzc0VxdWFsOgorICAg
IGNhc2UgR3JlYXRlckVxdWFsOgorICAgIGNhc2UgQWJvdmU6CisgICAgY2FzZSBCZWxvdzoKKyAg
ICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICByZXR1cm4g
SW50MzI7CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIHJldHVy
biBJbnQ2NDsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIHJldHVy
biBEb3VibGU7CisgICAgY2FzZSBOb3A6CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGRlZmF1
bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1ZhbHVl
X2gKKworI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAg
c3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiQCI7CisKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsK
KworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAor
ICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBs
YWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29t
cHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGU7IH0KKworICAgIEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1
cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNv
bnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0
eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdpdGhOb3AoKTsKKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBjYXN0IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlm
IHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92aWRlZCB0aGF0IHdlIGhhdmUgYQorICAgIC8v
IEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86CisgICAgLy8KKyAgICAvLyBpZiAoQXJndW1l
bnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkg
eworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBUaGlzIHdpbGwg
cmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAhPSBBcmd1bWVudFJlZy4gVGhpcyB3b3JrcyBi
ZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisgICAgLy8gaWYgVDo6YWNjZXB0cyhvcGNvZGUo
KSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBhcygpIGNvbnN0OworICAg
IAorICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKKyAgICBpbnQzMl90IGFzSW50MzIoKSBjb25z
dDsKKyAgICAKKyAgICBib29sIGhhc0ludDY0KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludDY0
KCkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQo
KSBjb25zdDsKKyAgICBib29sIGlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0OworCisgICAgYm9v
bCBoYXNEb3VibGUoKSBjb25zdDsKKyAgICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKKworICAg
IFN0YWNrbWFwKiBzdGFja21hcCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9j
ZWR1cmUuCisgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhw
bGljaXRseToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGlj
aXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAg
ICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAg
ICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1f
Y2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAv
LyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRo
ZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVuOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDog
bV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90
eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAg
Ly8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5
cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUo
b3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisg
ICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hp
bGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9y
IHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUg
YWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4
cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2lu
KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQor
ICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9v
cmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgdmFy
YXJncy4KKyAgICBleHBpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQor
ICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAg
ICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAg
LCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0
eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91cCBv
ZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisgICAg
T3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVibGlj
OgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXppbHku
CisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFseXNl
cyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIHZvaWQqIG1pc2MgeyBudWxscHRyIH07Cit9Owor
CitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKFZhbHVl
KiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Zh
bHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
VmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVlKiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKworI2lu
Y2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5j
bHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitU
KiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
dGVtcGxhdGU+dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9vbCBWYWx1
ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1ZT4oKTsK
K30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENv
bnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25z
dAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRfdCBWYWx1
ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+dmFs
dWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
SW50MzIoKSB8fCBoYXNJbnQ2NCgpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9CisK
K2Jvb2wgVmFsdWU6OmlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhh
c0ludCgpICYmIGFzSW50KCkgPT0gdmFsdWU7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKworZG91
YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91Ymxl
VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK1N0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQorewor
ICAgIGlmIChDaGVja1ZhbHVlKiBjaGVjayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAgIHJl
dHVybiAmY2hlY2stPnN0YWNrbWFwOworICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBhczxQYXRjaHBvaW50VmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2ludC0+
c3RhY2ttYXA7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
IGNhc2UgTm9uZToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zm
c2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1l
bnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFs
dWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAg
ICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29u
c3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFs
dWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25z
IGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRp
b24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3Jj
ZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4g
QjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5
IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6Cisg
ICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uCisgICAgICAgIEFu
eSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0
aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIsIHByb3ZpZGVkIHRoYXQKKyAgICAgICAg
Ly8gaXQncyBub3QgYWxzbyBhIHJlZ2lzdGVyIHRoYXQgd2FzIGNsb2JiZXJlZC4KKyAgICAgICAg
U29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0
aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAorICAgICAgICAv
LyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tlZC4K
KyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0
aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90IGEg
dmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgIFN0YWNrLAor
CisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0aGUg
dmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAgICAgICAgLy8g
b2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1
dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50LWZvbGRlZCB0
aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBWYWx1ZVJlcCgp
CisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVmFs
dWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAgICAgICwgbV92
YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHJl
ZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7CisgICAgfQor
CisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21GUCkKKyAgICB7
CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNr
OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICB9CisKKyAgICBz
dGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9tU1ApCisgICAg
eworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFj
a0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21TUDsKKyAgICB9
CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50
OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCBjb25zdGFudChkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVmFs
dWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJlZygpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAgICAgICAg
cmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9m
ZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNr
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9
CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1
cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAgIH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEtp
bmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
Z2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDc1IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCisk
dmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7
JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9y
aWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKwor
ICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAg
ICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255
bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAg
IEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUKKyAgICAgICAgQG9wY29kZSA9
IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNoaWxkcmVuIDogW10KKyAg
ICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAgICAgb3Bjb2RlICE9IG5pbAorICAgIGVu
ZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgY2hpbGRyZW4uZWFjaF93
aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQsIGluZGV4IHwKKyAgICAgICAgICAgIHlp
ZWxkIHZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5uYW1lLAorICAgICAgICAgICAg
ICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLmFub255bW91cyA/
IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDogOmFub25PcGVyYW5kKSA6IChjaGlsZC5v
cGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisgICAgICAgICAgICAgICAgICBpbmRleAor
ICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICB9CisgICAgZW5k
CitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6cHJvZHVjdGlv
bnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBAbmFt
ZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMKKyAgICBlbmQKK2Vu
ZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVy
CisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAg
IEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgor
ICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVO
dW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9y
aWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQor
ICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBl
bmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2Vu
CisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAg
IGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAor
ICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59Igor
ICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBj
b21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9Igor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7
Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBm
aWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1
bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAg
ICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAg
IyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3
bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAv
XEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKikvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9r
ZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hl
biAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAg
ICAgd2hlbiAvXEFbPSgpLF0vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdp
bi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJl
cikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9IgorICAg
ICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJlc3Vs
dAorZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgIyBXZSBjYW4gZXh0ZW5kIHRoaXMg
YXMgd2UgYWRkIG1vcmUga2V5d29yZHMuIExpa2UsIHdlIG1pZ2h0IHdhbnQgImluY2x1ZGUiIGV2
ZW50dWFsbHkuCisgICAgdG9rZW4gPX4gL1xBKChtYXRjaGVyKSlcWi8KK2VuZAorCitkZWYgaXNJ
ZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05
X10qKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAg
ICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChk
YXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tl
bgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAg
ICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQor
ICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAg
ICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2Nv
bW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAg
ZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmlu
Z30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKwor
ICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcK
KyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50
aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAor
CisgICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAg
ICAgaWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkNoaWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisg
ICAgICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50
cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVw
bGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwg
cHJvZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1h
dGNoZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAg
ICAgICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVh
ayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2Fu
dCB0byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUu
CisgICAgICAgICAgICBhZGRVbmlxdWUobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVBy
b2R1Y3Rpb24pCisgICAgICAgIH0KKworICAgICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwg
cHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAg
IG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAgICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIK
KworICAgICAgICBpZiB0b2tlbiA9PSAiPSIKKyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAg
ICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUo
IigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigi
KQorICAgICAgICAgICAgb3Bjb2RlID0gbmFtZQorICAgICAgICAgICAgbmFtZSA9IG5pbAorICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1l
LCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9
IFtdCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisK
KyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9u
KQorCisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1
bWUoIiwiKQorICAgICAgICB9CisKKyAgICAgICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAg
ICAgICAgYWR2YW5jZQorCisgICAgICAgIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bj
b2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKK2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKwor
cGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hl
ciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBTdWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRl
eE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBw
cm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25z
ID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8Cisg
ICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5kZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8
PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgZGVmIG1hcElu
ZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgIGluZGV4TGlzdC5tYXAgeworICAgICAgICAgICAg
fCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBl
bmQKK2VuZAorCitGaWxlLm9wZW4oIkIzIiArIG1hdGNoZXIubmFtZSArICIuaCIsICJ3Iikgewor
ICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9w
YXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisKKyAg
ICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICBvdXRwLnB1dHMg
IiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICAKKyAgICBvdXRwLnB1dHMgIiNpbmNs
dWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0
b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBydW4je21hdGNoZXIubmFtZX0oVmFsdWUqIF92YWx1
ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0cC5wdXRzICJ7IgorCisgICAgIyBOb3RlIHRo
YXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQn
cyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAgICAjIHdhbnQgdG8gc2VlIHRoZSBjb2Rl
IG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBnb29kIHRleHQgZWRpdG9yIGFuZCBhc2sg
aXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91LgorCisgICAgIyBJbiBvZGQgc2l0dWF0aW9u
cywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBj
aGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsi
CisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHByb3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZp
bmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5nIGRpZmZlcmVudCBsZW5ndGhzLgor
ICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAg
ICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsK
KyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5kZXhM
aXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5n
dGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgICAgICBpbmRleExp
c3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4
TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICBp
bmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAg
bGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAg
ICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3Zh
bHVlTmFtZX0tPmNoaWxkcmVuLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAg
ICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3Rz
IGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1
Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2Yg
dGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25z
aWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUg
Y29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1h
dGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVl
TmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9u
cyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVj
dGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisg
ICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1
Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0
aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2Rl
CisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVu
ZAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNo
aW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0
aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3Rz
LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVj
dGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ug
c3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAg
ICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsK
KyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1
Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBz
W3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1
Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
c3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vw
cy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0
IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAg
ICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJv
ZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFt
ZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4
TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMp
CisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5w
cm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAg
ICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAg
ICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNh
bWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1
Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZh
bHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRl
eCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgw
Li4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
ZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAu
cHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVl
TmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVz
ZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisg
ICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAor
ICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8
IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRl
eF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUs
IHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAg
ICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAg
ICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywg
Y29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAg
ICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAg
ICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAg
ICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAg
ICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQg
dGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBv
cGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1
Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAg
ICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7
CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1
Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIu
cHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICBpbmRleExpc3Qu
ZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBt
YXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVl
OyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG9wZXJh
bmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAgICAgICAg
ICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxlIHsK
KyAgICAgICAgICAgICAgICB8IHBhcmVudFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJOYW1l
LCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tjaGls
ZFZhck5hbWV9ID0gI3twYXJlbnRWYXJOYW1lfS0+Y2hpbGQoI3tpbmRleH0pOyIKKworICAgICAg
ICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJC8KKyAgICAgICAgICAgICAgICAgICAgaWYg
Y2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgj
e2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA8PCBjaGls
ZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6YW5vbkludGVybmFsCisg
ICAgICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9
PSA6b3BlcmFuZCBvciBraW5kID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgIHRyeUFy
Z3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6
b3BlcmFuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRhcHRv
ci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBhZGFw
dG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIp
IikKKyAgICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3IuYWNjZXB0T3BlcmFuZHMo
IiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIG91dHAu
cHV0cygiICAgICYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1bWVu
dHMuam9pbigiLCAiKSArICIpKSIpCisgICAgICAgICAgICBvdXRwLnB1dHMgIiAgICByZXR1cm47
IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21hdGNo
ZXIubmFtZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyQXJnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0
Y2ggKG1fa2luZCkgeworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQodG1wKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmludCgiJCIsIG1f
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tUHRyOgorICAgICAgICBvdXQu
cHJpbnRmKCIkMHgleCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRk
cjoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgp
KTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbmRleDoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0
LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLCIsIGlu
ZGV4KCkpOworICAgICAgICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0LnByaW50
KCIsIiwgc2NhbGUoKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0
LnByaW50KG9mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50ZXJEdW1wKHN0YWNr
U2xvdCgpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAg
ICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCk7CisgICAgICAg
IG91dC5wcmludCgiKGNhbGxBcmcpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBcmdfaAorI2RlZmluZSBBaXJBcmdfaAorCisj
aW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgU3RhY2tTbG90OworCisvLyBUaGlzIGNsYXNzIG5hbWUgaXMg
YWxzbyBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2lsbCBzYXkgaXQgYSBsb3QuIFlv
dSdsbCBzZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjppbW0oNSksIEFyZzo6YWRkcih0
aGluZywgYmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6CisgICAgLy8gVGhlc2UgZW51
bSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2UgaGF2ZSB0byBtZW50
aW9uIHRoZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90IHsKKyAgICAgICAgVG1wLAor
ICAgICAgICBJbW0sCisgICAgICAgIEltbVB0ciwKKyAgICAgICAgQWRkciwKKyAgICAgICAgU3Rh
Y2ssCisgICAgICAgIENhbGxBcmcsCisgICAgICAgIEluZGV4LAorICAgIH07CisKKyAgICBlbnVt
IFJvbGUgOiBpbnQ4X3QgeworICAgICAgICBVc2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNl
RGVmCisgICAgfTsKKworICAgIGVudW0gVHlwZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAg
ICAgICBGUAorICAgIH07CisKKyAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCisgICAg
eworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNh
c2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGVmOgor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgaXNEZWYoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7Cisg
ICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNl
IERlZjoKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIEFyZygpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6
OlRtcCB0bXApCisgICAgICAgIDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbShpbnRwdHJfdCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW07CisgICAg
ICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHN0YXRpYyBBcmcgaW1tUHRyKGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbVB0cjsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgc3RhdGljIEFyZyBhZGRyZXNzKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0g
MCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBZGRyOworICAgICAgICByZXN1bHQubV9iYXNl
ID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1
ZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZz
ZXQ7IC8vIEkga25vdywgeXVjay4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgQXJnIGNhbGxBcmcoaW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBBcmcg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAg
eworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAg
ICAgICAgIHJldHVybiAzOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgaW5kZXgoQWlyOjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2ln
bmVkIHNjYWxlID0gMSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFT
U0VSVChpc1ZhbGlkU2NhbGUoc2NhbGUpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAg
ICAgICAgcmVzdWx0Lm1faW5kZXggPSBpbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBz
dGF0aWNfY2FzdDx1aW50OF90PihzY2FsZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9m
ZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNl
dCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5kID09IG90aGVyLm1fa2lu
ZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYg
bV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBtX3NjYWxlID09IG90aGVy
Lm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFyZyYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFy
ZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1f
a2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJbW0oKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQorCisgICAgYm9vbCBpc0lt
bVB0cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbVB0cjsKKyAg
ICB9CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2lu
ZCgpID09IEFkZHI7CisgICAgfQorCisgICAgYm9vbCBpc0luZGV4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1w
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAg
cmV0dXJuIG1fYmFzZTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCB2YWx1ZSgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbSB8fCBraW5kKCkgPT0gSW1tUHRyKTsKKyAg
ICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKworICAgIEFpcjo6VG1wIGJhc2UoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRl
eCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgaW50MzJfdCBvZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykKKyAgICAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3NjYWxlKTsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCk7CisgICAgfQorCisg
ICAgU3RhY2tTbG90KiBzdGFja1Nsb3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RhY2tTbG90Kj4o
bV9vZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGluZGV4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9pbmRleDsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBzY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fc2NhbGU7CisgICAgfQorCisg
ICAgdW5zaWduZWQgbG9nU2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ1Nj
YWxlKHNjYWxlKCkpOworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9v
bCBpc0ZQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgp
LmlzRlAoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJl
IHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBp
c0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNh
c2UgSW1tOgorICAgICAgICBjYXNlIEltbVB0cjoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAg
ICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgY2FzZSBDYWxs
QXJnOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAg
ICAgICAgcmV0dXJuIGlzR1BUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlbGxz
IHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBh
IEZQIHZhbHVlLgorICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2gg
KGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBJbW1QdHI6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJ
bmRleDoKKyAgICAgICAgY2FzZSBCYXNlOgorICAgICAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAg
ICAgY2FzZSBDYWxsQXJnOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2Ug
VG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzRlBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYg
dG1wKCkuaXNHUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0bXAoKS5ncHIoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAg
fQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCku
ZnByKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVn
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAo
KS5ncFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgpOworICAgIH0KKworICAg
IHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS50
bXBJbmRleCgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNhc2UgQWRk
cjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAg
ICAgZnVuY3RvcihtX2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlz
IHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNl
RGVmIHJ1bGUgd2lsbCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZv
ciBleGFtcGxlLCB0aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQorICAgIC8v
CisgICAgLy8gVGhpcyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwgVHlwZSBh
cmdUeXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoICht
X2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwg
YXJnUm9sZSwgYXJnVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBZGRy
OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNl
LCBHUCk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0ZWRJbW0z
MigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zm
c2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0
ZWRJbW1QdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tUHRyKCkpOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIobV9vZmZzZXQpOworICAg
IH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6OkFkZHJlc3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkp
OworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBN
YWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgbV9iYXNlLmdwcigpLCBtX2lu
ZGV4LmdwcigpLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U2NhbGU+KGxvZ1NjYWxlKCkp
LAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnRw
dHJfdCBtX29mZnNldCB7IDAgfTsKKyAgICBLaW5kIG1fa2luZCB7IEltbSB9OworICAgIGludDMy
X3QgbV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9p
bmRleDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEFpckFyZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4
KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAoY29uc3Qg
SW5zdCYgaW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbnN0LCAiXG4i
KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFpckJhc2ljQmxv
Y2tfaAorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworY2xhc3MgQmFzaWNCbG9j
ayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVm
aXggPSAiIyI7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAgICB0eXBl
ZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gU3VjY2Vzc29yTGlzdDsKKyAgICAKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlz
dDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0
TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RM
aXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4o
KTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBt
X2luc3RzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5z
dHMuc2l6ZSgpOyB9CisgICAgY29uc3QgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2luc3RzW2luZGV4XTsgfQorICAgIEluc3QmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1
cm4gbV9pbnN0c1tpbmRleF07IH0KKworICAgIGNvbnN0IEluc3QmIGxhc3QoKSBjb25zdCB7IHJl
dHVybiBtX2luc3RzLmxhc3QoKTsgfQorICAgIEluc3QmIGxhc3QoKSB7IHJldHVybiBtX2luc3Rz
Lmxhc3QoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGFwcGVu
ZEluc3QoSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVuZChzdGQ6OmZv
cndhcmQ8SW5zdD4oaW5zdCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAg
eworICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAgICAvLyBUaGUgIjAiIGNhc2UgaXMgdGhlIGNhc2Ug
dG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28gdGhlICJ0aGVuIiBjYXNlLiBUaGUgIjEiIGNh
c2UgaXMgdGhlCisgICAgLy8gImVsc2UiIGNhc2UsIGFuZCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0
aGUgZmFsbC10aHJvdWdoIG9mIGEgY29uZGl0aW9uYWwgYnJhbmNoLgorICAgIHVuc2lnbmVkIG51
bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAg
QmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1
Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nv
ckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9
CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tp
bmRleF07IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQg
ZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgQ29kZTsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIEluc3RMaXN0IG1faW5zdHM7CisgICAg
U3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1
bXAgeworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykK
KyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAg
ICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9j
ayogbV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2Nr
KiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQmFzaWNCbG9j
a19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K0NvZGU6OkNvZGUoKQoreworfQorCitDb2RlOjp+Q29kZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sq
IENvZGU6OmFkZEJsb2NrKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxv
Y2sobmV3IEJhc2ljQmxvY2sobV9ibG9ja3Muc2l6ZSgpKSk7CisgICAgQmFzaWNCbG9jayogcmVz
dWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQ29kZTo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAg
ICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7CisgICAgaWYgKG51bVN0YWNrU2xvdHMoKSkg
eworICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxuIik7CisgICAgICAgIGZvciAoU3Rh
Y2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAg
IiwgZGVlcER1bXAoc2xvdCksICJcbiIpOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ29kZV9oCisjZGVmaW5lIEFpckNv
ZGVfaAorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWlyIHsKKworLy8g
VGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJl
cXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0ZWQgbWFjaGlu
ZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUg
Y29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBDb2RlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IGFkZEJsb2NrKCk7CisKKyAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCgpOworCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sq
IG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQor
CisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToK
KyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRl
eCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZw
cm9jZWR1cmUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5k
ZXggPSBmaW5kTmV4dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5t
X2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBm
aW5kTmV4dCh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbV9wcm9jZWR1cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAg
ICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAg
IH0KKworICAgICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBt
X2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCBudW1CbG9ja3MoKSk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc3Q6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQob3Bjb2RlLCAiICIsIGxpc3REdW1wKGFyZ3Mp
LCAiICA7ICIsICpvcmlnaW4pOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0X2gKKyNkZWZpbmUgQWlySW5zdF9oCisKKyNpbmNs
dWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3Ry
dWN0IEluc3QgeworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPEFyZywgMz4gQXJnTGlzdDsK
KworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbikKKyAgICAgICAgOiBvcmln
aW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgSW5zdChPcGNvZGUgb3Bj
b2RlLCBWYWx1ZSogb3JpZ2luLCBBcmcgYXJnLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICA6IGFyZ3N7IGFyZywgYXJndW1lbnRzLi4uIH0KKyAgICAgICAgLCBvcmlnaW4ob3JpZ2lu
KQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bj
b2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQorICAg
ICAgICA6IGFyZ3MoYXJncykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9w
Y29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5j
dG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0g
Zm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVk
OyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQor
ICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBvbmx5IHdhbGtz
IHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBpdCBkb2Vzbid0
IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcgYXJnIDogYXJncykKKyAgICAgICAgICAgIGFy
Zy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAgICAvLyBDYWxscyB0aGUgZnVu
Y3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUpLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEFyZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsK
KworICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKHRtcCwgcm9sZSwgdHlwZSkuCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvckVhY2hBcmdSb2xlKAorICAgICAgICAg
ICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAg
ICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlwZSwgZnVuY3Rvcik7CisgICAgICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFsIHJlZ2lzdGVy
cyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2hDbG9iYmVyZWRSZWcoY29uc3QgRnVuY3RvciYpOworCisg
ICAgLy8gSXMgdGhpcyBpbnN0cnVjdGlvbiBpbiBvbmUgb2YgdGhlIHZhbGlkIGZvcm1zIHJpZ2h0
IG5vdz8gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9n
ZW5lcmF0b3IucmIuCisgICAgYm9vbCBpc1ZhbGlkRm9ybSgpOworCisgICAgLy8gVGVzdHMgd2hl
dGhlciB3ZSBjb3VsZCBjb25zdHJ1Y3QgYW4gaW5zdHJ1Y3Rpb24gd2l0aCBzb21lIGZvcm0uIENh
bGwgd2l0aCBhIGxpc3Qgb2Yga2luZHMsCisgICAgLy8gbGlrZTogSW5zdDo6aXNWYWxpZEZvcm0o
QWRkMzIsIEFyZzo6QWRkciwgQXJnOjpUbXApLiBUaGlzIGZ1bmN0aW9uIHVzZXMgYSBoZWxwZXIg
dGhhdCBpcworICAgIC8vIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHN0YXRpYyBib29sIGlzVmFs
aWRGb3JtKE9wY29kZSwgQXJndW1lbnRzLi4uKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5z
dHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBmb3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBp
biBvbmUgb2YgdGhlIHZhbGlkCisgICAgLy8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVmZXJl
bmNpbmcgdGhlIHN0YWNrIChvciBhIFN0YWNrU2xvdCBvciBDYWxsQXJnLCBvZiBjb3Vyc2UpIGlu
IHRoZQorICAgIC8vIGdpdmVuIGluZGV4PyBTcGlsbGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRo
ZSBhcmdzIGJ5IGluZGV4IHRvIGZpbmQgVG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7CisgICAgLy8g
aWYgaXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlzIHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0
aGUgQXJnOjpUbXAgd2l0aCBhbiBBcmc6OkFkZHIuIElmIGl0CisgICAgLy8gZmluZHMgYSBub24t
VG1wIEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFyZydzIGZvckVhY2hUbXAgdG8gZG8gYSByZXBs
YWNlbWVudCB0aGF0IHdheS4KKyAgICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1n
ZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGFkbWl0c1N0YWNrKHVu
c2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEdlbmVyYXRlIHNvbWUgY29kZSBmb3IgdGhpcyBp
bnN0cnVjdGlvbi4gVGhpcyBpcywgbGlrZSwgbGl0ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0aGlz
IGlzIHRoZQorICAgIC8vIHRlcm1pbmFsLCBpdCByZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVlZHMg
dG8gYmUgbGlua2VkIGZvciB0aGUgInRoZW4iIGNhc2UsIHdpdGggdGhlICJlbHNlIgorICAgIC8v
IGNhc2UgYmVpbmcgZmFsbC10aHJvdWdoLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVk
IGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZ2VuZXJh
dGUoTWFjcm9Bc3NlbWJsZXImKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCisgICAgQXJnTGlzdCBhcmdzOworICAgIFZhbHVlKiBvcmlnaW47IC8vIFRoZSBCMzo6VmFs
dWUgdGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbS4KKyAgICBPcGNvZGUgb3Bjb2RlOworfTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zdF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gKKyNk
ZWZpbmUgQWlySW5zdElubGluZXNfaAorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUg
IkFpck9wY29kZVV0aWxzLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbHMuaCIKKyNpbmNsdWRlICJC
M1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
Cit2b2lkIEluc3Q6OmZvckVhY2hDbG9iYmVyZWRSZWcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQ2hlY2s6CisgICAgY2FzZSBDaGVj
a0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgY2FzZSBQ
YXRjaHBvaW50OgorICAgICAgICBvcmlnaW4tPnN0YWNrbWFwKCktPmNsb2JiZXJlZCgpLmZvckVh
Y2goZnVuY3Rvcik7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDYWxsOiB7CisgICAgICAg
IFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmVSZWdpc3RlcnMgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgICAgICBmb3IgKFJlZyByZWcgOiBSZWc6OmFsbCgpKSB7CisgICAg
ICAgICAgICBpZiAoIWNhbGxlZVNhdmVSZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAgICAgICAg
ICAgZnVuY3RvcihyZWcpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KK30KKwordGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorYm9vbCBJbnN0Ojppc1ZhbGlkRm9ybShPcGNvZGUgb3Bjb2RlLCBBcmd1
bWVuc3QuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVybiBpc1ZhbGlkSW5zdEZvcm1JbXBsKG9w
Y29kZSwgc2l6ZW9mLi4uKEFyZ3VtZW50cyksIGFyZ3VtZW50cy4uLik7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckluc3RJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBTeWxsYWJ1czoKKyMKKyMgUm9sZXMgYW5kIHR5cGVz
OgorIyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisj
IEQ6RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6
RyA9PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQor
IyBVOkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpGID0+IGRlZiBv
ZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkYgPT4gdXNlIGFuZCBkZWYgb2YgYSBm
bG9hdCByZWdpc3RlciBvciB2YWx1ZQorIworIyBBcmd1bWVudCBraW5kczoKKyMgVG1wID0+IHRl
bXBvcmFyeSBvciByZWdpc3RlcgorIyBJbW0gPT4gMzItYml0IGltbWVkaWF0ZSBpbnQKKyMgSW1t
UHRyID0+IFRydXN0ZWRJbW1QdHIKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdp
c3RlcitvZmZzZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29s
dXRlQWRkcmVzcworIworIyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3Jk
cywgYW5kIHVuZGVyc3RhbmRzIHRoYXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNz
ZXMKKyMgb2YgdGhpbmdzLiBTbywgYWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFy
IGluZGVudGF0aW9uIHN0eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3
bGluZXMgYXJlIG1lYW5pbmdmdWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3Vs
ZCB3cml0ZToKKyMKKyMgRm9vNDIgVTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBB
bmQgdGhlIHBhcnNlciB3b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMg
Rm9vNDIgVTpHLCBVRDpGCisjICAgICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEku
ZS4gYSB0d28tZm9ybSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVk
aWF0ZSBhbmQgdXNlcytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBv
cGNvZGVzIGhlcmUgaGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJl
c3BvbmQgdG8gTWFjcm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1j
YXNlIChhZGQzMikuCisKK0FkZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBB
ZGRyCisgICAgSW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBUbXAsIEFkZHIKKworQWRkMzIg
VTpHLCBVOkcsIEQ6RworICAgIEltbSwgVG1wLCBUbXAKKworQW5kMzIgVTpHLCBVRDpHCisgICAg
VG1wLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIFRtcCwgQWRkcgorICAgIEFkZHIsIFRtcAorICAg
IEltbSwgQWRkcgorCitMc2hpZnQzMiBVOkcsIFVEOkcKKyAgICBUbXAqLCBUbXAKKyAgICBJbW0s
IFRtcAorCitNdWwzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorCitN
b3ZlIFU6RywgRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIEltbVB0ciwgVG1w
CisgICAgQWRkciwgVG1wIGFzIGxvYWQgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1w
IiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBUbXAsIEFkZHIg
YXMgc3RvcmUKKworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwg
VG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKworTW92ZTY0
VG9Eb3VibGUgVTpHLCBEOkYKKyAgICBUbXAsIFRtcAorCitNb3ZlRG91YmxlVG82NCBVOkYsIEQ6
RworICAgIFRtcCwgVG1wCisKK1JldAorCisjIFNvbWUgb3Bjb2RlcyBiZWhhdmUgZXhvdGljYWxs
eS4gRm9yIGV4YW1wbGUsIHRoZXkgbWF5IGhhdmUgdmFyYXJncy4gT3IsIHRoZXkgbWF5IHJlcXVp
cmUgYSBzcGVjaWFsCisjIGNsYXNzIG9mIHJlZ2lzdGVycyBmb3Igc29tZSBvcGVyYW5kLiBPciwg
dGhleSBtYXkgdXNlIG9yIGRlZiBhZGRpdGlvbmFsIHJlZ2lzdGVycy4KKworIyBUaGVzZSBiZWhh
dmUgbGlrZSBob3cgdGhlIFN0YWNrbWFwIG9iamVjdCB0ZWxscyB0aGVtIHRvIGJlaGF2ZS4KK3Nw
ZWNpYWwgQ2hlY2tBZGQKK3NwZWNpYWwgQ2hlY2tTdWIgCitzcGVjaWFsIENoZWNrTXVsCitzcGVj
aWFsIENoZWNrCitzcGVjaWFsIFBhdGNocG9pbnQKKworIyBUYWtlcyBhcmd1bWVudCByZWdpc3Rl
cnMgYXMgaW5wdXRzLgorc3BlY2lhbCBDYWxsCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwZWNpYWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGVjaWFscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGVjaWFscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJTcGVjaWFsc19oCisjZGVmaW5lIEFpclNwZWNpYWxzX2gKKworI2luY2x1ZGUgIkFpckluc3Qu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgZm9y
RWFjaFN0YWNrTWFwQXJnKEluc3QqIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7Cisg
ICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gaW5zdC0+b3JpZ2luLT5zdGFja21hcCgpOworICAgIEFT
U0VSVChzdGFja21hcCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5kZXggPCBp
bnN0LT5hcmdzLnNpemUoKTsgKytpbmRleCkgeworICAgICAgICBBcmcmIGFyZyA9IGluc3QtPmFy
Z3NbaW5kZXhdOworCisgICAgICAgIC8vIEFjdHVhbGx5LCB0aGlzIHRoaW5nIG9ubHkgYWRtaXRz
IEFkZHJlc3MgZm9ybXMgdGhhdCBhcmUgc3RhY2sgb2Zmc2V0cy4gV2UgbmVlZCBzb21lIHdheQor
ICAgICAgICAvLyBvZiBzYXlpbmcgdGhhdC4KKyAgICB9Cit9CisKK3N0cnVjdCBDaGVja1NwZWNp
YWxzIHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZv
ckVhY2hBcmcoSW5zdCogaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZvckVhY2hTdGFja21hcEFyZyhpbnN0LCBmdW5jdG9yKTsKKyAgICB9Cit9OworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJTcGVjaWFsc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclN0YWNrU2xvdF9oCisjZGVmaW5lIEFp
clN0YWNrU2xvdF9oCisKKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgU3RhY2tTbG90dmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFja1Nsb3Qg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2J5dGVTaXplOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9CisKKyAgICBTdGFja1Nsb3RWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lk
IGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGlu
ZGV4LCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV9ieXRlU2l6ZShieXRlU2l6
ZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVk
IG1faW5kZXg7CisgICAgU3RhY2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVw
U3RhY2tTbG90RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoU3RhY2tTbG90
KiBzbG90KQorICAgICAgICA6IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3Qp
CisgICAgICAgICAgICBtX3Nsb3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0YWNr
U2xvdCogbV9zbG90OworfTsKKworRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoU3RhY2tTbG90
KiBzbG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3RhY2tTbG90X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFRt
cDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAg
ICAgICAgb3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChpc1JlZygpKSB7CisgICAgICAgIG91dC5wcmludChyZWcoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoaXNHUFRtcCgpKSB7CisgICAgICAgIG91dC5wcmludCgiJXRt
cCIsIGdwVG1wSW5kZXgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJp
bnQoIiVmdG1wIiwgZnBUbXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wX2gKKyNkZWZpbmUgQWlyVG1wX2gKKworI2lu
Y2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgYSByZWdpc3Rlci4gSXQg
Y2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBvciBGUFIuIEl0IGNhbiBhbHNvCisvLyBi
ZSB1c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9y
YXJ5KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJz
ZSBuYW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGlzIG5hbWUgYSBsb3QuCisKK2Ns
YXNzIFRtcCB7CitwdWJsaWM6CisgICAgVG1wKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAg
eworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgaWYg
KHJlZykgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIG1f
dmFsdWUgPSBlbmNvZGVHUFIocmVnLmdwcigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJlZy5mcHIoKSk7CisgICAgICAgIH0gZWxzZQor
ICAgICAgICAgICAgbV92YWx1ZSA9IDA7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBncFRtcEZv
ckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVHUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUg
PSBlbmNvZGVGUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgc3RhdGljIFRtcCBmb3JSYXdWYWx1ZSh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gaW5kZXg7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorCisgICAgYm9vbCByYXdWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKworICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNFbmNvZGVkR1AobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUChtX3ZhbHVlKTsKKyAgICB9CisK
KyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRH
UFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNFbmNvZGVkRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNS
ZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1BSKCkgfHwgaXNGUFIoKTsKKyAg
ICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVHUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gZGVjb2RlRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIFJlZyByZWco
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBn
cHIoKTsKKyAgICAgICAgcmV0dXJuIGZwcigpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1w
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQVG1wKG1fdmFsdWUp
OworICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZUZQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRt
cEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZ3BUbXBJbmRleCgpOworICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQgZW5jb2RlRlAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gLTEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJS
ZWcgZ3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1i
bGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBS
KEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9B
c3NlbWJsZXI6OmZpcnN0RlBSUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBl
bmNvZGVHUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVH
UFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEgKyBpbmRleDsKKyAgICB9CisK
KyAgICBzdGF0aWMgaW50IGVuY29kZUZQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAx
IC0gaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1AoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc0VuY29kZWRGUChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUg
PCAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQUihpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmIHZhbHVlIDw9IGVuY29k
ZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGlzRW5jb2RlZEZQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNF
bmNvZGVkRlAodmFsdWUpICYmIHZhbHVlID49IGVuY29kZWRGUFIoTWFjcm9Bc3NlbWJsZXI6Omxh
c3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1w
KGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYg
IWlzRW5jb2RlZEdQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVk
RlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVl
KSAmJiAhaXNFbmNvZGVkRlBSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRl
Y29kZUdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZh
bHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAg
KHZhbHVlIC0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1h
Y3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJS
ZWcgZGVjb2RlRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRG
UFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAg
ICAgICAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1
ZSkgKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2
YWx1ZSAtIChlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOwor
ICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAg
eworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1
ZTsKKyAgICB9CisKKyAgICAvLyAwOiBlbXB0eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBh
bmQgdGhlbiBHUCB0ZW1wcy4KKyAgICAvLyBuZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1w
cy4KKyAgICBpbnQgbV92YWx1ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEFpclRtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3NjggQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29k
ZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2FkcworCisgICAgZGVm
IGluaXRpYWxpemUobmFtZSwgc3BlY2lhbCkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAg
IEBzcGVjaWFsID0gc3BlY2lhbAorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAgICAgICAgICAg
QG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIG1hc21OYW1l
CisgICAgICAgIG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVuZAorZW5kCisK
K2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAgZGVmIGluaXRp
YWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAgIEB0eXBlID0g
dHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9yZWFkZXIgOnNp
Z25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUsIGZvcm1zKQor
ICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9IGZvcm1zCisg
ICAgZW5kCitlbmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0
cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkKKyAgICAgICAg
QG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQKKworICAgIGRl
ZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAgICAgICAgICBA
bmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlci5u
YW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAorICAgIGVuZAor
CisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9PSAiQWRkciIK
KyAgICAgICAgICAgIFsiQWRkciIsICJTdGFja1Nsb3QiLCAiQ2FsbEFyZyJdCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBh
cmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xh
c3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0
aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBA
YWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRy
X3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUo
ZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAg
ICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19z
CisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2Ns
YXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRl
ZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisg
ICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIp
CisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90
aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisg
ICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0
cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0Bz
dHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJz
ZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAg
cmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBy
YWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAor
ICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBh
dGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAx
CisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hl
biAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAg
d2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBs
aW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAg
ICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIp
LCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNw
YWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXS8KKyAgICAgICAgICAgIHJlc3VsdCA8
PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZp
bGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4y
MF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisg
ICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzVUQodG9rZW4pCisgICAgdG9rZW4gPX4g
L1xBKChVKXwoRCl8KFVEKSlcWi8KK2VuZAorCitkZWYgaXNHRih0b2tlbikKKyAgICB0b2tlbiA9
fiAvXEEoKEcpfChGKSlcWi8KK2VuZAorCitkZWYgaXNLaW5kKHRva2VuKQorICAgIHRva2VuID1+
IC9cQSgoVG1wKXwoSW1tKXwoSW1tUHRyKXwoQWRkcil8KEluZGV4KSlcWi8KK2VuZAorCitkZWYg
aXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2lu
ZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIK
K2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1a
MC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIK
KyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxl
eChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0
b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQor
ICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50
KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAg
ICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAj
e2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisg
ICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0
cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQK
KworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJp
bmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lk
ZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVu
ZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwor
ICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3Mg
aXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisK
KyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAg
ICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1
bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYg
Y29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNl
RXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tUHRyLCBUbXAsIEFkZHIsIG9yIEluZGV4KSIp
IHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAor
ICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIAor
ICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5n
dGgKKworICAgICAgICAgICAgaWYgdG9rZW4gPT0gInNwZWNpYWwiCisgICAgICAgICAgICAgICAg
Y29uc3VtZSgic3BlY2lhbCIpCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJ
ZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQg
YSBzcGVjaWFsIG9wY29kZSIpIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorCisgICAgICAgICAgICAg
ICAgcmVzdWx0W29wY29kZU5hbWVdID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCB0cnVlKQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRp
ZmllcgorCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAg
ICAgICAgICAgIG9wY29kZSA9IHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAg
ICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIG9wY29k
ZS5zcGVjaWFsCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGNv
ZGUgPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAg
ICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAgICAgICAgICAgICAgZm9ybXMgPSBbXQorICAg
ICAgICAgICAgICAgIGlmIGlzVUQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3Agewor
ICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9IGNvbnN1bWVSb2xlCisgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdW1lKCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBj
b25zdW1lVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBzaWduYXR1cmUgPDwgQXJnLm5ldyhyb2xlLCB0eXBlKQorICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwi
CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAg
ICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAorICAg
ICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
a2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFy
c2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5hbWUg
PT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNwZWNp
YWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioiKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBj
b25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBhcmd1
bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUubGVu
Z3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIkltbVB0
ciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS5y
b2xlICE9ICJVIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJv
cigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBh
IG5vbi1nZW5lcmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3
KGtpbmRzLCBhbHROYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIGlz
S2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICAgICAg
Zm9ybXMgPSBbRm9ybS5uZXcoW10sIG5pbCldCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAg
ICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUsIGZv
cm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAgICBl
bmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86
OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UKKwor
ZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAi
dyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8g
R2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8g
bm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7Zmls
ZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgor
CisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlm
IC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK2RlZiB3cml0ZUNQUChmaWxlbmFt
ZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmNwcCIsICJ3IikgeworICAgICAgICB8
IG91dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bj
b2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAg
ICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiY29uZmlnLmhcIiIKKyAgICAgICAg
b3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpciN7ZmlsZW5hbWV9LmhcIiIKKworICAgICAgICB5aWVs
ZCBvdXRwCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8Cisg
ICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29k
ZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0
cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAu
cHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMu
c2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIK
KyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNs
YXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5h
bWVzcGFjZSBXVEYiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAg
ICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMg
IiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAg
ICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAg
ICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAg
ICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAg
ICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Igor
ICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30K
KworIyBGcm9tIGhlcmUgb24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVk
IGNvZGUsIHNpbmNlIHdlJ3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4K
KworZGVmIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1u
R2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0g
MAorCisgICAgaWYgZmlsdGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAg
IGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1
bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAg
ICAgIHJldHVybgorICAgIGVuZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFj
aCB7CisgICAgICAgIHwgZm9ybSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbklu
ZGV4XS5uYW1lCisgICAgICAgIGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tp
bmRdIDw8IGZvcm0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zv
cm1dCisgICAgICAgIGVuZAorICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91
cHMubGVuZ3RoID09IDEKKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNv
bHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBy
ZXR1cm4KKyAgICBlbmQKKworICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltj
b2x1bW5JbmRleF19KSB7IgorICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwg
dmFsdWUgfAorICAgICAgICBLaW5kLmFyZ0tpbmRzKGtleSkuZWFjaCB7CisgICAgICAgICAgICB8
IGFyZ0tpbmQgfAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToi
CisgICAgICAgIH0KKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVt
bkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRw
LnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRw
LnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92
ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9
LT5vcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29k
ZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlm
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBl
bHNlCisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMu
c2l6ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkKKyAgICAgICAgICAgIG91dHAucHV0cyAic3dp
dGNoICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3Zlcmxv
YWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgeWllbGQg
b3Bjb2RlLCBvdmVybG9hZAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBu
ZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVy
bG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAgICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZv
cm0ob3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQs
IGluc3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2Rl
LnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBj
b2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgIiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRl
eH1dLmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBm
YWxzZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgIHwg
Zm9ybSB8CisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQu
Zm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisg
ICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBv
dXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAgb3V0cC5wdXRzICIjaW5jbHVk
ZSBcIkFpclNwZWNpYWxzLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5zdDo6Zm9yRWFjaEFy
Zyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJ
bnN0T3ZlcmxvYWQob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3Zl
cmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRz
ICIje29wY29kZS5uYW1lfVNwZWNpYWxzOjpmb3JFYWNoQXJnKHRoaXMsIGZ1bmN0b3IpOyIKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmVhY2hfd2l0aF9pbmRl
eCB7CisgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xl
ID0gbmlsCisgICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQorICAgICAgICAgICAgICAgIHdo
ZW4gIlUiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgorICAgICAgICAgICAgICAg
IHdoZW4gIkQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVmIgorICAgICAgICAgICAg
ICAgIHdoZW4gIlVEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZURlZiIKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5j
dG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7cm9sZX0sIEFyZzo6I3thcmcudHlwZX1QKTsiCisg
ICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIn0iCisgICAg
CisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCit3
cml0ZUNQUCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNp
bmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpclNwZWNp
YWxzLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBoaWRkZW5UcnV0aCgp
IHsgcmV0dXJuIHRydWU7IH0iCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIFJFVFVSTih2YWx1ZSkg
ZG8ge1xcIgorICAgIG91dHAucHV0cyAiICAgIGlmIChoaWRkZW5UcnV0aCgpKVxcIgorICAgIG91
dHAucHV0cyAiICAgICAgICByZXR1cm4gdmFsdWU7XFwiCisgICAgb3V0cC5wdXRzICJ9IgorICAg
IG91dHAucHV0cyAiYm9vbCBJbnN0Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIK
KyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAg
ICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAor
ICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4oI3tvcGNvZGUubmFtZX1TcGVjaWFsczo6aXNW
YWxpZCh0aGlzKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0
aW9uID0gZmFsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMg
eworICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVy
bG9hZC5zaWduYXR1cmVbaW5kZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0gb3Zlcmxv
YWQuc2lnbmF0dXJlW2luZGV4XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZvcm0ua2lu
ZHNbaW5kZXhdCisgICAgICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNw
ZWNpYWwKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25v
dyB0aGF0IHRoZSBmb3JtIG1hdGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJv
bGUsIHNpbmNlCisgICAgICAgICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBv
bmx5IHRoaW5nIGxlZnQgdG8gdmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUK
KyAgICAgICAgICAgICAgICAjIHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAu
CisgICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTihmYWxzZSk7IgorICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZHNNb3JlVmFsaWRh
dGlvbgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCEje29wY29kZS5uYW1lfVNwZWNp
YWxzOjppc1ZhbGlkKHRoaXMpKSIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTihm
YWxzZSk7IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTih0
cnVlKTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsi
CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0c1N0
YWNrKHVuc2lnbmVkIGFyZ0luZGV4KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRz
ICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAg
IHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKwor
ICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4o
I3tvcGNvZGUubmFtZX1TcGVjaWFsczo6YWRtaXRzU3RhY2soYXJnSW5kZXgpKTsiCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICMgU3dpdGNoIG9uIHRoZSBhcmdJbmRleC4KKyAgICAgICAgICAg
IG91dHAucHV0cyAic3dpdGNoIChhcmdJbmRleCkgeyIKKworICAgICAgICAgICAgbnVtQXJncyA9
IG9wY29kZS5vdmVybG9hZHMubWFwIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAg
ICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICB9Lm1h
eAorICAgICAgICAgICAgCisgICAgICAgICAgICBudW1BcmdzLnRpbWVzIHsKKyAgICAgICAgICAg
ICAgICB8IGFyZ0luZGV4IHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3thcmdJ
bmRleH06IgorCisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBhbGwgb2YgdGhlIGZvcm1zIG9m
IGFsbCBvZiB0aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywgb3IgZG9uJ3QsIGFkbWl0IGFuIGFkZHJl
c3MKKyAgICAgICAgICAgICAgICAjIGF0IHRoaXMgaW5kZXguIFdlIGV4cGVjdCB0aGlzIHRvIGJl
IGEgdmVyeSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAg
ICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNo
IHsKKyAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgICAg
IG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRy
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQor
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkZWxpYmVyYXRl
bHkgdGVzdCBudW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3ZSBlbmQgdXAgd2l0aCBubyBmb3Jtcywg
d2Ugd2FudAorICAgICAgICAgICAgICAgICMgdG8gc2F5IHRoYXQgQWRkcmVzcyBpcyBpbmFkbWlz
c2libGUuCisgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJSRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBlbHNpZiBudW1O
byA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiUkVUVVJOKHRydWUpOyIKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICMgTm93IGRvIHRoZSBmdWxs
IHRlc3QuCisKKyAgICAgICAgICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKG9wY29k
ZS5vdmVybG9hZHMuc2l6ZSAhPSAxKQorCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
c3dpdGNoIChhcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAg
ICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB8IG92ZXJsb2FkIHwKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBBZ2FpbiwgY2hlY2sg
aWYgYWxsIG9mIHRoZW0gZG8gd2hhdCB3ZSB3YW50LgorICAgICAgICAgICAgICAgICAgICAgICAg
bnVtWWVzID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2lu
ZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgIyBEb24ndCBlbWl0
IGFueXRoaW5nLCBqdXN0IGRyb3AgdG8gZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRj
aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiUkVUVVJOKHRydWUpOyIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92
ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0
aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgVGhpcyBpcyBob3cgd2UgdGVzdCB0aGUgaHlwb3RoZXNpcyB0aGF0IGNoYW5naW5nIHRoaXMg
YXJndW1lbnQgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZHJlc3MgeWll
bGRzIGEgdmFsaWQgZm9ybS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5HZXR0
ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRl
eCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbHVtbkluZGV4ID09IGFy
Z0luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJnOjpBZGRyIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAiYXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybXMgfAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudW1ZZXMgPSAwCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y
bXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRl
eF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
WWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgRHJvcCBkb3duLCBlbWl0IG5vIGNvZGUsIHNpbmNlIHdlIGNhbm5vdCBtYXRjaC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBL
ZWVwIGdvaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiUkVUVVJOKHRydWUpOyIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRl
ciwgZmlsdGVyLCBjYWxsYmFjaykKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIG5l
ZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZh
dWx0OiIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IjsKKyAg
ICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJy
ZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiTWFjcm9B
c3NlbWJsZXI6Okp1bXAgSW5zdDo6Z2VuZXJhdGUoTWFjcm9Bc3NlbWJsZXImIGppdCkgY29uc3Qi
CisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiTWFjcm9Bc3NlbWJsZXI6Okp1bXAg
cmVzdWx0OyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikg
eworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUu
c3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4oI3tvcGNvZGUubmFtZX1TcGVj
aWFsczo6Z2VuZXJhdGUodGhpcywgaml0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBp
ZiBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gZm9ybS5hbHROYW1l
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IG9wY29kZS5t
YXNtTmFtZQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnByaW50ICJqaXQuI3tt
ZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMuZWFjaF93aXRoX2luZGV4IHsK
KyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBpZiBpbmRl
eCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgIiwgIgorICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1lCisgICAgICAgICAgICAgICAg
d2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5k
ZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZnByKCkiCisgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIkltbSIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJJbW1QdHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
ImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbVB0cigpIgorICAgICAgICAgICAgICAgIHdoZW4g
IkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFz
QWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRwLnB1dHMgIik7Igor
ICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAg
IH0KKyAgICBvdXRwLnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91
dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpciIKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTEyMzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDUsNyArMTA1LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleDsgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4ICE9IGludmFsaWQoKTsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IWlzU2V0KCk7IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
aXNTZXQoKTsgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXggPT0gZGVsZXRlZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1Ymxp
YzoKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNsYXNz
IEFsbFJlZ3NJdGVyYWJsZSB7CisgICAgcHVibGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9y
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAgICAg
ICAgICAgZXhwbGljaXQgaXRlcmF0b3IoUmVnIHJlZykKKyAgICAgICAgICAgICAgICA6IG1fcmVn
KHJlZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVnIG9w
ZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3JlZyA9IG1f
cmVnLm5leHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcmVnID09IG90aGVy
Lm1fcmVnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgUmVnIG1fcmVnOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJzdCgpKTsgfQorICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWcoKSk7IH0KKyAg
ICB9OworCisgICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSBjb25zdCB7IHJldHVybiBB
bGxSZWdzSXRlcmFibGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90IGludmFs
aWQoKSB7IHJldHVybiAweGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywxMyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRCaXRz
KCkpCisgICAgICAgICAgICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7CisgICAgfQog
ICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263615</attachid>
            <date>2015-10-20 14:16:18 -0700</date>
            <delta_ts>2015-10-20 15:32:25 -0700</delta_ts>
            <desc>cool story for specials</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>239782</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1f
aW5kZXgoaW5kZXgpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwor
dm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFw
cGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNp
Y0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxv
Y2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFs
dWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0
OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlJ3MgdHlwZWRlZi4KKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVM
aXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBW
YWx1ZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAg
VmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4
KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBt
X3ZhbHVlczsgfQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSog
YXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1T
dWNjZXNzb3JzKCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KTsK
KyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAK
KyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWdu
ZWQgaW5kZXgpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1
ZXM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBC
YXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2Nr
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1
bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBC
YXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4g
RGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9s
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9jZWR1
cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pOworICAgIGFw
cGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2ljQmxv
Y2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+
YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitCYXNpY0Jsb2NrKiYg
QmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBsYXN0
KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworY29uc3QgQmFz
aWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVj
a1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwg
c3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNl
IENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisg
ICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1
YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQo
bGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09
IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOwor
ICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVk
aWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVk
aWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gK
KworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5w
YXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJp
c29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIg
Q29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFuZChMb2FkKGFkZHJlc3Mp
LCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChhZGRyZXNzKSkKK1Rl
c3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8xID0gRXF1YWwoQW5k
KExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0gRXF1YWwoQW5kKGxl
ZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5kKGxlZnQsIHJpZ2h0
KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCByaWdodCkKK0xvYWRF
cXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1YWwodmFsdWUsICQw
KQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkK
K3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFsdWVfaAorI2RlZmlu
ZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAg
CisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6
IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Nv
bnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2
NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25z
dDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAg
ICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBp
bnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3Jp
Z2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBp
bnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25z
dERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJs
ZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAg
ICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0RG91Ymxl
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAgICAs
IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdERvdWJs
ZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJv
bFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9s
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xW
YWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisK
K2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAg
Y2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVj
YXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2Fu
dAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1
cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAgfkNvbnRyb2xW
YWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAgIEJhc2ljQmxvY2sq
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQor
CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRyb2xWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUs
IG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTdWJjbGFzc2Vz
IHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMg
Zm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9y
aWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CisgICAgfQorCisg
ICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCisgICAgeworICAg
ICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMg
Zm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9
PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKwor
ICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRp
Y2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBubykKKyAgICAgICAg
OiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFw
cGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0
aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNp
Y0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3Qg
Y3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5
IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8g
SWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Js
b2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIElu
ZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUt
PmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0
aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29s
bGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBD
b2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0
ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24p
CisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBt
X2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRl
cmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24s
IG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlv
blR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAg
IH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQu
dmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86Cisg
ICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZh
bHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQor
CisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMo
KS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgs
IGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5w
YXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
aW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisjIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5nTWF0Y2hl
cgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcg
YXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50cyB3
aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1h
dGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCisKK0xv
YWQgPSBMb2FkKGFkZHJlc3MpCisKK0FkZExvYWQgPSBBZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUp
CitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK1N0b3JlQWRkTG9hZDEgPSBTdG9yZShBZGQoTG9h
ZChhZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQorU3RvcmVBZGRMb2FkMiA9IFN0b3JlKEFkZCh2
YWx1ZSwgTG9hZChhZGRyZXNzKSksIGFkZHJlc3MpCitTdG9yZUFuZExvYWQgPSBTdG9yZShBbmQo
TG9hZChhZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRk
cmVzcykKKworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQorewor
fQorCit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29m
ZnNldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAorCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
TWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBM
b2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0Ogor
ICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0
b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAg
ICBpbnRwdHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBm
b3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRz
IHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0
eXBlKS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAg
IGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlw
ZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAg
ICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAg
ICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBE
b3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6
CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6
CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09
IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSBy
ZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50cHRyX3Qgb2Zm
c2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZs
b2F0ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAg
ICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAg
ICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAg
ICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAg
TWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnRwdHJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdp
biwgdmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM09wY29kZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJpbnQoIklkZW50
aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gRklYTUUKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bj
b2RlIDogaW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVs
IGZvciB3aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisg
ICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgor
ICAgIElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNs
YXNzZXMuIENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNh
bgorICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFy
Z2UgY29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAg
Q29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNs
b3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFt
IHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4g
RWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ug
b2YKKyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisg
ICAgU3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRo
aXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAg
Ly8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRo
ZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xv
YmJlciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5
IHNhdmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBp
dCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNs
YXNzLiBUaGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BS
cykgb3IgRG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUg
ZnJhbWUgcG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cg
YnV0IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGgg
YSBjYXZlYXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBv
cmFyaWx5IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGlu
dHJpbnNpYyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBu
b3QKKyAgICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBv
aW50ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUg
dHlwZS4KKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJ
bnRlZ2VyIG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVz
IGxpa2UgSlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAg
IEJpdFhvciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMg
YW5kIHN1Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisg
ICAgU0V4dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNF
eHQzMiwKKyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAg
IEZSb3VuZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9E
LAorICAgIC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisK
KyAgICAvLyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5
cGUuIFJldHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0
IEVxdWFsKHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAor
ICAgIEdyZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAg
ICAvLyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92
ZSwKKyAgICBCZWxvdywKKyAgICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8v
IE1lbW9yeSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRl
ZCB0eXBlLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMy
OgorICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAor
ICAgIC8vIFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMg
cmV0dXJuIHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8g
TWVtb3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4g
VGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6
CisgICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2
YWx1ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9y
ZSBmb3IgSW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhp
cyBpcyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVt
IEMgY2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVu
dHMgYXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAv
LyBUaGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRo
aXMgaXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVt
aXRzIGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdl
dHMgdG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBh
bG9uZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3Qg
YmUgcGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAg
YXJndW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0Cisg
ICAgLy8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhl
IHRvcCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgor
ICAgIFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1
ZSBjbGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24K
KyAgICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFm
dGVyIHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20g
dGhlIGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBz
dXBwbHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0
byBqdW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBz
aW5jZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24g
b2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4u
IEZvcgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8v
CisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisg
ICAgLy8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8K
KyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAv
LworICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQg
YnkgdGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2Fs
bGJhY2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFy
ZSBkaWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3Qg
Q2hlY2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9z
c2libHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVj
a0FkZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tT
dWIsCisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0
aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMg
YQorICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2Vz
IGFuIEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1
bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1
ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ss
CisKKyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBz
aWxvbiwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisg
ICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAg
CisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4g
QnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZh
bHVlIGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNj
ZXNzb3IuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhl
ciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNo
LAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRo
ZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBl
LiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhp
cyBpcyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVy
ZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZp
bmUgQjNPcmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBj
aG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxs
IGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2gg
aW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3Jt
YXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8g
d3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBs
aWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9y
aWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkK
KyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2
YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgi
CisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQor
Cit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgb3V0LnByaW50KGNvbW1hLCAic3RhY2tt
YXAgPSAiLCBzdGFja21hcCk7CisgICAgaWYgKHNoYWRvdykKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCAic2hhZG93ID0gIiwgc2hhZG93KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gK
KyNkZWZpbmUgQjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hw
b2ludDsgfQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2tt
YXA7CisgICAgdW5zaWduZWQgc2hhZG93IHsgMCB9OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5k
ZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRy
ZW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBhdGNocG9pbnQsIHR5cGUsIG9yaWdpbiwgY2hp
bGRyZW4pCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gQjNQYXRjaHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxv
Y2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2Nl
ZHVyZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soKQoreworICAg
IHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayA9IHN0ZDo6bWFrZV91bmlxdWU8QmFz
aWNCbG9jaz4obV9ibG9ja3Muc2l6ZSgpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9j
ay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91
dC5wcmludChkZWVwRHVtcChibG9jaykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKwor
I2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1
ZTsKKworY2xhc3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1
cmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgUHJvY2Vk
dXJlKCk7CisgICAgflByb2NlZHVyZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soKTsK
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJh
dG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAg
ICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1
cmUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBm
aW5kTmV4dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4
dCh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwg
bV9wcm9jZWR1cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAg
ICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKwor
ICAgICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCBudW1CbG9ja3MoKSk7IH0KKworICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29sbGVjdGlvbihQcm9jZWR1cmUmIHByb2NlZHVy
ZSkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRy
KQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAg
ICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgUHJvY2VkdXJlKiBtX3By
b2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAg
ICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVy
ZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
bV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgp
OyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9w
cm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICB9OworCisgICAg
VmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlz
KTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+
IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZUlubGlu
ZXNfaAorI2RlZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1ZW50cy4uLiBhcmd1bWVudHMp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZSht
X3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0g
dmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNQcm9jZWR1cmVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZh
bHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tT
bG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2ln
bmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIFlvdSBjYW5ub3QgcmVseSBvbiBpdCBoYXZp
bmcgYSBtZWFuaW5nZnVsCisgICAgLy8gdmFsdWUgd2hpbGUgdGhlIGNvbXBpbGVyIGlzIHJ1bm5p
bmcuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRG
cm9tRlA7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwor
CisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2ln
bmVkIGJ5dGVTaXplKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXIo
KSwgb3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9v
ZmZzZXRGcm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsK
KyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgIntvcGFxdWUgPSAiLCBSYXdQb2ludGVy
KG1fb3BhcXVlKSwgIiwgcmVwcyA9ICIsIGxpc3REdW1wKG1fcmVwcyksCisgICAgICAgICIsIGdl
bmVyYXRvciA9ICIsIFJhd1BvaW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBjbG9iYmVyZWQg
PSAiLCBtX2Nsb2JiZXJlZCwKKyAgICAgICAgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJl
Z2lzdGVycywgIn0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNpbmNsdWRlICJCM1Zh
bHVlUmVwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJT
ZXQuaCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgQjNWYWx1ZTsKKworY2xhc3MgU3RhY2ttYXAgeworcHVibGlj
OgorICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUg
VmFsdWUgY29udGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZhbHVlKiB2YWx1ZTsKKwor
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAgU3RhY2ttYXAqIHN0YWNr
bWFwOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGp1bXAgdG8gdGhlIHNsb3cgcGF0aCwgaWYg
dGhpcyBpcyBhIHN0YWNrbWFwIGZvciBhIENoZWNrIHZhbHVlLgorICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAganVtcDsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JG
dW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlw
ZWRlZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAg
U3RhY2ttYXAoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0
byBpZGVudGlmeSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2tt
YXAtdXNpbmcgVmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGlj
YXRlIG1heSBlbmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlz
CisgICAgLy8gYWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVm
ZXIgYmFjayB0byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdl
IHdlcmUgdXNpbmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lk
KiBwYXJhbWV0ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9
CisgICAgdm9pZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8v
IENvbnZlbmllbmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRl
cnMuCisgICAgdm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAg
ICBzZXRPcGFxdWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXpl
X3Qgb3BhcXVlSW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFx
dWUoKSk7IH0KKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhh
dCB1c2VzIHRoaXMgU3RhY2ttYXAuIE5vdGUgdGhhdCBpbmRleCB6ZXJvIHJlZmVycyB0byB0aGUK
KyAgICAvLyBmaXJzdCBhcmd1bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1l
bnQgaXMgbm90IGNvbnN0cmFpbmFibGUuIEZvciBleGFtcGxlLCBpbiBhCisgICAgLy8gQ2hlY2tB
ZGQgdmFsdWUsIGl0IHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5k
IDEuIEluIGEgQ2hlY2sgdmFsdWUsIGl0IHdvdWxkCisgICAgLy8gYmUgYW4gZXJyb3IgdG8gY29u
c3RyYWluIGluZGV4IDAuIEJ1dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxs
ZWQsIHlvdSBjYW4gZGVwZW5kCisgICAgLy8gb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMg
YmVpbmcgZmlsbGVkIGluLgorICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25z
dCBWYWx1ZVJlcCYgcmVwKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5z
aXplKCkpCisgICAgICAgICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3Jl
cHNbaW5kZXhdID0gcmVwOworICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3Rl
clNldCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9
CisKKyAgICBjb25zdCBSZWdpc3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9j
bG9iYmVyZWQ7IH0KKworICAgIHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdl
bmVyYXRvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3Io
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3Jl
YXRlU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAg
Ly8gVGhlc2Ugd2lsbCByZXR1cm4gaW50ZXJlc3RpbmcgdGhpbmdzIGluc2lkZSB0aGUgZ2VuZXJh
dG9yIGNhbGxiYWNrLCBvciBhZnRlciBjb21waWxhdGlvbi4KKyAgICBjb25zdCBWZWN0b3I8VmFs
dWVSZXA+JiByZXBzKCkgY29uc3QgeyByZXR1cm4gbV9yZXBzOyB9CisgICAgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICB2b2lkKiBtX29wYXF1ZSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVw
czsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBt
X2Nsb2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgor
CisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCit2b2lkIFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV9jYXNlVmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKG1fdGFyZ2V0KSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3
aXRjaENhc2VfaAorI2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKworY2xhc3MgU3dpdGNoQ2Fz
ZSB7CitwdWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisgICAgeworICAgIH0KKworICAgIFN3aXRj
aENhc2UoaW50NjRfdCBjYXNlVmFsdWUsIEJhc2ljQmxvY2sqIHRhcmdldCkKKyAgICAgICAgOiBt
X2Nhc2VWYWx1ZShjYXNlVmFsdWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFt
X3RhcmdldDsgfQorCisgICAgaW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nh
c2VWYWx1ZTsgfQorICAgIEJhc2ljQmxvY2sqIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFy
Z2V0OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgaW50NjRfdCBjYXNlVmFsdWU7CisgICAgQmFzaWNCbG9jayogdGFyZ2V0OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N3aXRjaENhc2VfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2xkdWUgIkIzU3dp
dGNoVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N3aXRjaFZh
bHVlOjp+U3dpdGNoVmFsdWUoKQoreworfQorCitTd2l0Y2hDYXNlIFN3aXRjaFZhbHVlOjpyZW1v
dmVDYXNlKHVuc2lnbmVkIGluZGV4KQoreworICAgIFN3aXRjaENhc2UgcmVzdWx0ID0gbV9zdWNj
ZXNzb3JzW2luZGV4XTsKKyAgICBtX3N1Y2Nlc3NvcnNbaW5kZXhdID0gbV9zdWNjZXNzb3JzLmxh
c3QoKTsKKyAgICBtX3N1Y2Nlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dp
dGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkp
OworICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNl
LnRhcmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsK
K30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICAvLyBUaGlzIGRlc3RydWN0aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1
bXBNZXRhKCkuCisgICAgb3V0LnByaW50KGxpc3REdW1wKCp0aGlzKSk7Cit9CisKK1N3aXRjaFZh
bHVlOjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9j
ayogZmFsbFRocm91Z2gpCisgICAgOiBDb250cm9sVmFsdWUoaW5kZXgsIFN3aXRjaCwgb3JpZ2lu
KQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoZmFsbFRocm91Z2gpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVf
aAorI2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgi
CisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBTd2l0Y2hWYWx1ZSA6IHB1YmxpYyBDb250cm9sVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IFN3aXRjaDsgfQorCisgICAgflN3aXRjaFZhbHVlKCk7CisKKyAgICAvLyBudW1DYXNlVmFs
dWVzKCkgKyAxID09IG51bVN1Y2Nlc3NvcnMoKS4KKyAgICB1bnNpZ25lZCBudW1DYXNlVmFsdWVz
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CisKKyAgICAvLyBUaGUgc3VjY2Vz
c29yIGZvciB0aGlzIGNhc2UgdmFsdWUgaXMgYXQgdGhlIHNhbWUgaW5kZXguCisgICAgaW50NjRf
dCBjYXNlVmFsdWUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2ldOyB9
CisgICAgCisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKCkgY29uc3Qg
eyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorICAgIEJhc2ljQmxvY2sqJiBmYWxsVGhy
b3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNlIGF0
KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENhc2Uo
Y2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7CisgICAgfQorICAgIFN3aXRjaENh
c2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBhdChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoK
KyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3aXRjaChudWxscHRyKQorICAg
ICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0
ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAg
ICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRl
eCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcioo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTd2l0Y2hWYWx1ZSogbV9z
d2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAg
IC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJZiB5
b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlvdSBj
YW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRoaXMg
c2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIgY2Fz
ZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAgIFN3
aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVuZENh
c2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCk7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJ
bnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnBy
aW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAg
IG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVf
aAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lkLAor
ICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJvb2wgaXNJ
bnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUgPT0gSW50
NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0
eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlcigpIGNvbnN0Cit7CisgICAg
aWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVy
biBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNU
eXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworVXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFs
dWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJe
IiwgbV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2lsb25W
YWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09
IFVwc2lsb247IH0KKworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBj
b25zdCB7IHJldHVybiBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBQcm9jZWR1cmU7CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAg
eworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQor
CisgICAgVmFsdWUqIG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhbHVl
Ojp+VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVl
KiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBs
YWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAor
ICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRo
ZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZp
b3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZh
bHVlIGluIHBsYWNlLgorCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5cGUg
dHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNC
bG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlz
LT5yZXBsYWNlbWVudDsKKyAgICB2b2lkKiBtaXNjID0gdGhpcy0+bWlzYzsKKworICAgIFJFTEVB
U0VfQVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZh
bHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIChpbmRleCwgSWRlbnRpZnksIHR5cGUsIG9yaWdpbiwg
dmFsdWUpOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNlbWVu
dCA9IHJlcGxhY2VtZW50OworICAgIHRoaXMtPm1pc2MgPSBtaXNjOworfQorCit2b2lkIFZhbHVl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVm
aXgsIG1faW5kZXgpOworfQorCit2b2lkIFZhbHVlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICIgIiwgKnRoaXMsICIgPSAiLCBtX29w
Y29kZSk7CisKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7Cisg
ICAgZm9yIChWYWx1ZSogY2hpbGQgOiBjaGlsZHJlbigpKQorICAgICAgICBvdXQucHJpbnQoY29t
bWEsIHBvaW50ZXJEdW1wKGNoaWxkKSk7CisKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJpbmdP
dXQ7CisgICAgZHVtcE1ldGEoc3RyaW5nT3V0KTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IHN0cmlu
Z091dC50b0NTdHJpbmcoKTsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIHN0cmluZyk7CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKworYm9vbCBW
YWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50MzJf
dCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAor
eworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0
Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30K
KworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBNZXRh
KFByaW50U3RyZWFtJikgY29uc3QKK3sKK30KKworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUg
b3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAg
IGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBN
dWw6CisgICAgY2FzZSBEaXY6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAg
ICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNh
c2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVja0Fk
ZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVy
biBmaXJzdENoaWxkLT50eXBlKCk7CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJl
dHVybiBwb2ludGVyKCk7CisgICAgY2FzZSBTRXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBj
YXNlIERUb0kzMjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6CisgICAgY2Fz
ZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgTGVzc0VxdWFsOgor
ICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgIGNhc2UgQWJvdmU6CisgICAgY2FzZSBCZWxvdzoK
KyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICByZXR1
cm4gSW50MzI7CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIHJl
dHVybiBJbnQ2NDsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIHJl
dHVybiBEb3VibGU7CisgICAgY2FzZSBOb3A6CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1Zh
bHVlX2gKKworI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiQCI7CisKKyAgICBzdGF0aWMgYm9v
bCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUo
KTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAg
IAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciBy
ZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0
IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7
IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMg
Y29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25z
dCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyBy
ZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigp
IGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVu
dGl0eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdpdGhOb3AoKTsKKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBjYXN0IFZhbHVlcy4gRm9yIGV4YW1wbGUs
IGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92aWRlZCB0aGF0IHdlIGhhdmUgYQorICAg
IC8vIEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86CisgICAgLy8KKyAgICAvLyBpZiAoQXJn
dW1lbnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4o
KSkgeworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBUaGlzIHdp
bGwgcmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAhPSBBcmd1bWVudFJlZy4gVGhpcyB3b3Jr
cyBiZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisgICAgLy8gaWYgVDo6YWNjZXB0cyhvcGNv
ZGUoKSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFz
KCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBhcygpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKKyAgICBpbnQzMl90IGFzSW50MzIoKSBj
b25zdDsKKyAgICAKKyAgICBib29sIGhhc0ludDY0KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0lu
dDY0KCkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJ
bnQoKSBjb25zdDsKKyAgICBib29sIGlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0OworCisgICAg
Ym9vbCBoYXNEb3VibGUoKSBjb25zdDsKKyAgICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKKwor
ICAgIFN0YWNrbWFwKiBzdGFja21hcCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQ
cm9jZWR1cmUuCisgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUg
ZXhwbGljaXRseToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhw
bGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisg
ICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAg
ICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAs
IG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAg
ICAvLyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVu
IHRoZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVuOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAg
IDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwg
bV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9Cisg
ICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWly
IHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9w
Y29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNv
ZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkp
CisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0
Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMg
Zm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNv
ZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAg
IGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2Rl
KQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwg
bV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
dmFyYXJncy4KKyAgICBleHBpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVu
KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQor
ICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAg
ICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgVHlw
ZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91
cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQg
bV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisg
ICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVi
bGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXpp
bHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFs
eXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIHZvaWQqIG1pc2MgeyBudWxscHRyIH07Cit9
OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKFZh
bHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICht
X3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgVmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKwor
I2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisj
aW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUu
aCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KwordGVtcGxhdGU+dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9vbCBW
YWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1ZT4o
KTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFz
PENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBj
b25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRfdCBW
YWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+
dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
aGFzSW50MzIoKSB8fCBoYXNJbnQ2NCgpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9
CisKK2Jvb2wgVmFsdWU6OmlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc0ludCgpICYmIGFzSW50KCkgPT0gdmFsdWU7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKwor
ZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91
YmxlVmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK1N0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQor
eworICAgIGlmIChDaGVja1ZhbHVlKiBjaGVjayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAg
IHJldHVybiAmY2hlY2stPnN0YWNrbWFwOworICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNo
cG9pbnQgPSBhczxQYXRjaHBvaW50VmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2lu
dC0+c3RhY2ttYXA7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgewor
ICAgIGNhc2UgTm9uZToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
b2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJn
dW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
dmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2gg
KGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5w
cmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNr
QXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgi
Q29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
VmFsdWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2luY2x1ZGUgIlJlZy5oIgorI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRp
b25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50
YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBm
b3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdo
ZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ug
c2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6
CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24s
IHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uCisgICAgICAg
IEFueSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFu
cyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIsIHByb3ZpZGVkIHRoYXQKKyAgICAg
ICAgLy8gaXQncyBub3QgYWxzbyBhIHJlZ2lzdGVyIHRoYXQgd2FzIGNsb2JiZXJlZC4KKyAgICAg
ICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAorICAgICAg
ICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tl
ZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2Vu
dGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90
IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgIFN0YWNr
LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0
aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAgICAgICAg
Ly8gb2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFzIGFuIG91
dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50LWZvbGRl
ZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBWYWx1ZVJl
cCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQg
VmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAgICAgICwg
bV92YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVw
IHJlZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7CisgICAg
fQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21GUCkKKyAg
ICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0
YWNrOworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9tU1ApCisg
ICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBT
dGFja0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21TUDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0
YW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHN0YXRp
YyBWYWx1ZVJlcCBjb25zdGFudChkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
VmFsdWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgS2lu
ZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJlZygp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAgICAg
ICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90
IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0
YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICBy
ZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDc1IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMg
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgor
CiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3Rt
cCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIg
Om9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4K
KworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAg
ICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFu
b255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAg
ICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUKKyAgICAgICAgQG9wY29k
ZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNoaWxkcmVuIDogW10K
KyAgICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAgICAgb3Bjb2RlICE9IG5pbAorICAg
IGVuZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgY2hpbGRyZW4uZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQsIGluZGV4IHwKKyAgICAgICAgICAg
IHlpZWxkIHZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5uYW1lLAorICAgICAgICAg
ICAgICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLmFub255bW91
cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDogOmFub25PcGVyYW5kKSA6IChjaGls
ZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisgICAgICAgICAgICAgICAgICBpbmRl
eAorICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICB9CisgICAg
ZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6cHJvZHVj
dGlvbnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBA
bmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMKKyAgICBlbmQK
K2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVt
YmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAg
ICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJl
cgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xp
bmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIg
Om9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5n
KQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRv
a2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAor
ICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAg
IAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59
IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBp
ZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9
IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306
ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3Ry
LCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICBy
ZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8K
KyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAg
ICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMg
bmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hl
biAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKikvCisgICAgICAgICAgICByZXN1bHQgPDwg
VG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAg
d2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAg
ICAgICAgd2hlbiAvXEFbPSgpLF0vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9y
aWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51
bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9Igor
ICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJl
c3VsdAorZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgIyBXZSBjYW4gZXh0ZW5kIHRo
aXMgYXMgd2UgYWRkIG1vcmUga2V5d29yZHMuIExpa2UsIHdlIG1pZ2h0IHdhbnQgImluY2x1ZGUi
IGV2ZW50dWFsbHkuCisgICAgdG9rZW4gPX4gL1xBKChtYXRjaGVyKSlcWi8KK2VuZAorCitkZWYg
aXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1a
MC05X10qKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIK
KyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxl
eChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0
b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQor
ICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50
KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAg
ICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAj
e2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisg
ICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0
cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQK
KworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJp
bmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lk
ZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVu
ZAorCisgICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAg
ICAgICAgaWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkNoaWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIp
CisgICAgICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwg
ZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgcGFyc2VFcnJvcigi
RHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMg
PDwgcHJvZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUo
Im1hdGNoZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKwor
ICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBi
cmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgICMgV2UgbWlnaHQg
d2FudCB0byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhl
cmUuCisgICAgICAgICAgICBhZGRVbmlxdWUobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zLCBwYXJz
ZVByb2R1Y3Rpb24pCisgICAgICAgIH0KKworICAgICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFt
ZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAg
ICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAgICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZp
ZXIKKworICAgICAgICBpZiB0b2tlbiA9PSAiPSIKKyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQor
ICAgICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1
bWUoIigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUo
IigiKQorICAgICAgICAgICAgb3Bjb2RlID0gbmFtZQorICAgICAgICAgICAgbmFtZSA9IG5pbAor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBu
YW1lLCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBwcm9kdWN0aW9u
cyA9IFtdCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIiki
CisKKyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0
aW9uKQorCisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNv
bnN1bWUoIiwiKQorICAgICAgICB9CisKKyAgICAgICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIK
KyAgICAgICAgYWR2YW5jZQorCisgICAgICAgIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwg
b3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKK2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0K
KworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0
Y2hlciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBTdWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDpp
bmRleE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0
LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rp
b25zID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8
CisgICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5kZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9u
cyA8PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgZGVmIG1h
cEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgIGluZGV4TGlzdC5tYXAgeworICAgICAgICAg
ICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAg
ICBlbmQKK2VuZAorCitGaWxlLm9wZW4oIkIzIiArIG1hdGNoZXIubmFtZSArICIuaCIsICJ3Iikg
eworICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBnZW5lcmF0
ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisK
KyAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICBvdXRwLnB1
dHMgIiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICAKKyAgICBvdXRwLnB1dHMgIiNp
bmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFk
YXB0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBydW4je21hdGNoZXIubmFtZX0oVmFsdWUqIF92
YWx1ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0cC5wdXRzICJ7IgorCisgICAgIyBOb3Rl
IHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIGJlY2F1c2Ug
aXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAgICAjIHdhbnQgdG8gc2VlIHRoZSBj
b2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBnb29kIHRleHQgZWRpdG9yIGFuZCBh
c2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91LgorCisgICAgIyBJbiBvZGQgc2l0dWF0
aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0
byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oX3ZhbHVl
KTsiCisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHByb3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBo
YXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5nIGRpZmZlcmVudCBsZW5ndGhz
LgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAg
ICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4
IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5k
ZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5s
ZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgICAgICBpbmRl
eExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlu
ZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAg
ICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAg
ICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAg
ICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgj
e3ZhbHVlTmFtZX0tPmNoaWxkcmVuLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAg
ICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAg
ICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxl
Y3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHBy
b2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXgg
b2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNw
b25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBU
aGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5
LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZh
bHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0
aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJv
ZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtd
CisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHBy
b2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9k
dWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bj
b2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAg
IGVuZAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1h
dGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29k
ZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExp
c3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgaWYgcHJv
ZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICAjIE5vdywg
d2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAg
ICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNo
IHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgIHBy
b2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3Jv
dXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3By
b2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQor
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAgICAgICAgICAgIGdy
b3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhM
aXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisg
ICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwg
cHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVl
TmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwg
aW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcElu
ZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlv
bnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRj
aC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAg
ICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKwor
ICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhl
IHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHBy
b2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAs
IHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAgICBpZiBjb2x1bW5J
bmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxk
ICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAgICAgICByZXR1cm4KKyAgICAg
ICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91
dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3Zh
bHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90
IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQu
CisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAg
IAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAg
ICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5J
bmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFs
dWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAg
ICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAg
ICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9u
cywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAg
ICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisK
KyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQor
ICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsK
KyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRl
ZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2Ft
ZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAg
IHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAg
ICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAw
KSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxk
IHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNo
ZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICBpbmRleExp
c3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24g
PSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0cC5wdXRzICJ7Igor
ICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3Zh
bHVlOyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG9w
ZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAgICAg
ICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxl
IHsKKyAgICAgICAgICAgICAgICB8IHBhcmVudFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJO
YW1lLCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tj
aGlsZFZhck5hbWV9ID0gI3twYXJlbnRWYXJOYW1lfS0+Y2hpbGQoI3tpbmRleH0pOyIKKworICAg
ICAgICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJC8KKyAgICAgICAgICAgICAgICAgICAg
aWYgY2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlm
ICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA8PCBj
aGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6YW5vbkludGVybmFs
CisgICAgICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2lu
ZCA9PSA6b3BlcmFuZCBvciBraW5kID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgIHRy
eUFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9
PSA6b3BlcmFuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRh
cHRvci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBh
ZGFwdG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSAr
ICIpIikKKyAgICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3IuYWNjZXB0T3BlcmFu
ZHMoIiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIG91
dHAucHV0cygiICAgICYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1
bWVudHMuam9pbigiLCAiKSArICIpKSIpCisgICAgICAgICAgICBvdXRwLnB1dHMgIiAgICByZXR1
cm47IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21h
dGNoZXIubmFtZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQXJnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBz
d2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQodG1wKCkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmludCgiJCIs
IG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tUHRyOgorICAgICAgICBv
dXQucHJpbnRmKCIkMHgleCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
QWRkcjoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmRleDoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAg
b3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLCIs
IGluZGV4KCkpOworICAgICAgICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0LnBy
aW50KCIsIiwgc2NhbGUoKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAg
b3V0LnByaW50KG9mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50ZXJEdW1wKHN0
YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FsbEFyZzoKKyAg
ICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCk7CisgICAg
ICAgIG91dC5wcmludCgiKGNhbGxBcmcpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNw
ZWNpYWw6CisgICAgICAgIG91dC5wcmludCgiJiIsIHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2luY2x1ZGUgIkFpclRtcC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNp
YWw7CitjbGFzcyBTdGFja1Nsb3Q7CisKKy8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVu
dGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBj
b2RlIGxpa2UKKy8vIEluc3QoLi4uLCBBcmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFo
KSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMg
YXJlIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBh
IGxvdC4KKyAgICBlbnVtIEtpbmQgOiBpbnQ4X3QgeworICAgICAgICBUbXAsCisgICAgICAgIElt
bSwKKyAgICAgICAgSW1tUHRyLAorICAgICAgICBBZGRyLAorICAgICAgICBTdGFjaywKKyAgICAg
ICAgQ2FsbEFyZywKKyAgICAgICAgSW5kZXgsCisgICAgICAgIFNwZWNpYWwKKyAgICB9OworCisg
ICAgZW51bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAgVXNlLAorICAgICAgICBEZWYsCisgICAg
ICAgIFVzZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5cGUgOiBpbnQ4X3QgeworICAgICAgICBH
UCwKKyAgICAgICAgRlAKKyAgICB9OworCisgICAgc3RhdGljIGJvb2wgaXNVc2UoUm9sZSByb2xl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAg
ICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9s
ZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBcmcoKQorICAgIHsKKyAgICB9CisKKyAgICBB
cmcoQWlyOjpUbXAgdG1wKQorICAgICAgICA6IG1fa2luZChUbXApCisgICAgICAgICwgbV9iYXNl
KHRtcCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW0oaW50cHRyX3QgdmFsdWUp
CisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1t
OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbVB0cihpbnRwdHJfdCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW1QdHI7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHN0YXRpYyBBcmcgYWRkcmVzcyhBaXI6OlRtcCBiYXNlLCBpbnQzMl90IG9m
ZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBB
cmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQWRkcjsKKyAgICAgICAgcmVzdWx0
Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHN0YWNrKFN0YWNrU2xv
dCogdmFsdWUsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5tX3NjYWxl
ID0gb2Zmc2V0OyAvLyBJIGtub3csIHl1Y2suCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIEFyZyBjYWxsQXJnKGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENhbGxBcmc7CisgICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAy
OgorICAgICAgICBjYXNlIDQ6CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGxvZ1NjYWxlKHVuc2lnbmVkIHNjYWxl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIDE7
CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIDg6
CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgQXJnIGluZGV4KEFpcjo6VG1wIGJhc2UsIEFpcjo6VG1wIGluZGV4
LCB1bnNpZ25lZCBzY2FsZSA9IDEsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpbmRleC5pc0dQKCkpOworICAg
ICAgICBBU1NFUlQoaXNWYWxpZFNjYWxlKHNjYWxlKSk7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJh
c2U7CisgICAgICAgIHJlc3VsdC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX3Nj
YWxlID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2NhbGUpOworICAgICAgICByZXN1bHQubV9vZmZz
ZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBzcGVjaWFsKEFpcjo6U3BlY2lhbCogc3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0
CisgICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBt
X2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1f
aW5kZXgKKyAgICAgICAgICAgICYmIG1fc2NhbGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQg
a2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAg
IGJvb2wgaXNUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7
CisgICAgfQorCisgICAgYm9vbCBpc0ltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
a2luZCgpID09IEltbTsKKyAgICB9CisKKyAgICBib29sIGlzSW1tUHRyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tUHRyOworICAgIH0KKworICAgIGJvb2wgaXNB
ZGRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKKyAgICB9
CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBBaXI6OlRtcCB0bXAoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUbXApOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAg
IH0KKworICAgIGludHB0cl90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gSW1tIHx8IGtpbmQoKSA9PSBJbW1QdHIpOworICAgICAgICByZXR1cm4gbV9vZmZz
ZXQ7CisgICAgfQorCisgICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gSW1tUHRyKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDx2b2lkKj4obV9vZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7
CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgaW50MzJfdCBvZmZzZXQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3NjYWxlKTsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCk7CisgICAgfQorCisgICAg
U3RhY2tTbG90KiBzdGFja1Nsb3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RhY2tTbG90Kj4obV9v
ZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBzY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fc2NhbGU7CisgICAgfQorCisgICAg
dW5zaWduZWQgbG9nU2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ1NjYWxl
KHNjYWxlKCkpOworICAgIH0KKworICAgIEFpcjo6U3BlY2lhbCogc3BlY2lhbCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNwZWNpYWwpOworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBib29s
IGlzR1BUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCku
aXNHUCgpOworICAgIH0KKworICAgIGJvb2wgaXNGUFRtcCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQKCk7CisgICAgfQorICAgIAorICAgIC8vIFRl
bGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJl
cyBhIEdQIHZhbHVlLgorICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBJbW1QdHI6Cisg
ICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFj
a1Nsb3Q6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0
dXJuIGlzR1BUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlbGxzIHVzIGlmIHRo
aXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEZQIHZhbHVl
LgorICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkg
eworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBJbW1QdHI6CisgICAgICAgIGNhc2Ug
U3BlY2lhbDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgor
ICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIEJhc2U6CisgICAgICAgIGNhc2UgU3Rh
Y2tTbG90OgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNGUFRtcCgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgYm9vbCBoYXNUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIEltbVB0cjoK
KyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmlndW91cyBmb3Ig
c29tZSBhcmcga2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAg
ICAgY2FzZSBJbW1QdHI6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgICAgIHJldHVy
biBHUDsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpID8g
R1AgOiBGUDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICB9CisgICAgfQorCisgICAgYm9v
bCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5p
c0dQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAgICB9CisKKyAg
ICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcHIoKTsK
KyAgICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKworICAgIHVuc2ln
bmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwVG1w
SW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnRtcEluZGV4
KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZv
ckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0
Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAg
ICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBmdW5j
dG9yKG1faW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMgaXMgc21hcnQg
ZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBVc2VEZWYgcnVs
ZSB3aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1w
bGUsIHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVyY3gpCisgICAgLy8KKyAgICAv
LyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUs
IGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkg
eworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xl
LCBhcmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFkZHI6CisgICAg
ICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsK
KyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXV0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsK
KyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbVB0
cigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW1QdHIoKSk7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyVmFsdWUoKSk7CisgICAg
fQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7
CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRleCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1h
Y3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCksIG1faW5k
ZXguZ3ByKCksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2NhbGUoKSks
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludHB0
cl90IG1fb2Zmc2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsgSW1tIH07CisgICAgaW50MzJf
dCBtX3NjYWxlIHsgMSB9OworICAgIEFpcjo6VG1wIG1fYmFzZTsKKyAgICBBaXI6OlRtcCBtX2lu
ZGV4OworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
QWlyQXJnX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Js
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJh
c2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgp
OworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAiOlxuIik7CisgICAgZm9yIChjb25zdCBJ
bnN0JiBpbnN0IDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNCbG9j
a19oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCitjbGFzcyBCYXNpY0Jsb2Nr
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZp
eCA9ICIjIjsKKworICAgIHR5cGVkZWYgVmVjdG9yPEluc3Q+IEluc3RMaXN0OworICAgIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworICAgIAorICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQorICAgIEluc3RMaXN0
OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RM
aXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisgICAgSW5zdExp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigp
OyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zdHMuZW5kKCk7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0
cy5zaXplKCk7IH0KKyAgICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1faW5zdHNbaW5kZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX2luc3RzW2luZGV4XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5zdHMubGFzdCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMu
bGFzdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgYXBwZW5k
SW5zdChJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9y
d2FyZDxJbnN0PihpbnN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7
CisgICAgICAgIG1faW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJn
dW1lbnRzKS4uLikpOworICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0
byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2Fz
ZSBpcyB0aGUKKyAgICAvLyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRo
ZSBmYWxsLXRocm91Z2ggb2YgYSBjb25kaXRpb25hbCBicmFuY2guCisgICAgdW5zaWduZWQgbnVt
U3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vj
Y2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgU3VjY2Vzc29y
TGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0K
KyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2lu
ZGV4XTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBk
ZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBDb2RlOworICAgIAorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgpCisgICAgeworICAg
IH0KKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBT
dWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVt
cCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKEJhc2ljQmxvY2sqIGJsb2NrKQor
ICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisgICAg
ICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2Nr
KiBtX2Jsb2NrOworfTsKKworRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKEJhc2ljQmxvY2sq
IGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxvY2spOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJCYXNpY0Jsb2Nr
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxT
cGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQ0NhbGxTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ0NhbGxTcGVjaWFsOjpDQ2FsbFNwZWNp
YWwoKQorICAgIDogU3BlY2lhbCgiQ0NhbGwiKTsKK3sKKyAgICBtX2Nsb2JiZXJlZFJlZ3MgPSBS
ZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUo
UmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNs
dWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgIG1fY2xv
YmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwor
fQorCitDQ2FsbFNwZWNpYWw6On5DQ2FsbFNwZWNpYWwoKQoreworfQorCit2b2lkIENDYWxsU3Bl
Y2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFj
aEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBB
cmc6OlVzZSwgQXJnOjpHUCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IGlu
c3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBGb3IgdGhlIHR5cGUsIHdlIGNhbiBq
dXN0IHF1ZXJ5IHRoZSBhcmcncyB0eXBlLiBUaGUgYXJnIHdpbGwgaGF2ZSBhIHR5cGUsIGJlY2F1
c2Ugd2UKKyAgICAgICAgLy8gcmVxdWlyZSB0aGVzZSBhcmdzIHRvIGJlIGFyZ3VtZW50IHJlZ2lz
dGVycy4KKyAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzW2ldLCBBcmc6OlVzZSwgaW5zdC5hcmdz
W2ldLnR5cGUoKSk7CisgICAgfQorfQorCitib29sIENDYWxsU3BlY2lhbDo6aXNWYWxpZChJbnN0
JiBpbnN0KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBB
cmc6OkltbVB0cjoKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgIGNhc2UgQXJnOjpBZGRyOgorICAg
IGNhc2UgQXJnOjpTdGFjazoKKyAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgh
aW5zdC5hcmdzWzFdLmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
IWluc3QuYXJnc1tpXS5pc1JlZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmIChpbnN0LmFyZ3NbaV0gPT0gVG1wKHNjcmF0Y2hSZWdpc3RlcikpCisgICAgICAgICAg
ICByZXR1cm4gIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQ2Fs
bFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICAv
LyBBcmcgMSBjYW4gYmUgYSBzdGFjayBhZGRyZXNzIGZvciBzdXJlLgorICAgIGlmIChhcmdJbmRl
eCA9PSAxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3Qs
IENDYWxsSGVscGVycyYgaml0KQoreworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkg
eworICAgIGNhc2UgQXJnOjpJbW1QdHI6CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihpbnN0LmFyZ3NbMV0ucG9pbnRlclZhbHVlKCkpLCBzY3JhdGNoUmVnaXN0
ZXIpOworICAgICAgICBqaXQuY2FsbChzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uZ3ByKCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgaml0LmNhbGwo
aW5zdC5hcmdzWzFdLmFzQWRkcmVzcygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworY29uc3QgUmVnaXN0
ZXJTZXQmIENDYWxsU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sKKyAgICByZXR1cm4g
bV9jbG9iYmVyZWRSZWdzOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJmdW5jdGlvbiBjYWxsIHRo
YXQgdXNlcyB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIik7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDQ2FsbFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNDYWxsU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyQ0NhbGxTcGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxTcGVjaWFsX2gKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBVc2UgdGhpcyBz
cGVjaWFsIGZvciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFyZyAwIGlzIG9mIGNvdXJzZSBhIFNw
ZWNpYWwgYXJnIHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0NhbGxTcGVjaWFsIG9iamVjdC4gQXJn
IDEgaXMgdGhlIGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJbW1QdHIsIGEgcmVnaXN0ZXIsIG9y
IGFuIGFkZHJlc3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3MgYXJlIGp1c3QgdGhlIHNldCBvZiBh
cmd1bWVudCByZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwuIEZvciBhcmd1bWVudHMgdGhhdCBn
byB0bworLy8gdGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0aGUgZ3J1bnQgd29yayBvZiBkb2lu
ZyB0aG9zZSBzdGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBvbmx5IHJlYXNvbiB3aHkKKy8vIHdl
IHNwZWNpZnkgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBhcmd1bWVudHMgdG8gYSBjYWxsIGlz
IHNvIHRoYXQgdGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBzZWUKKy8vIHRoYXQgdGhleSBnZXQg
dXNlZCBoZXJlLiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRvbWFnaWNhbGx5IHJlcG9ydCBhbGwg
YXJndW1lbnQgcmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2VkIGJlY2F1c2UgaWYgd2UgaGFkIGEg
Y2FsbCB0aGF0IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhleSdkIGFwcGVhciB0byBiZSBsaXZl
IHVudGlsIHNvbWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhlIHByb2xvZ3VlLCB3aGljaGV2ZXIg
aGFwcGVuZWQgc29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNpYWwgOiBwdWJsaWMgU3BlY2lhbCB7
CitwdWJsaWM6CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAgfkNDYWxsU3BlY2lhbCgpOworCisg
ICAgLy8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4gSXQg
anVzdCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBub3QKKyAgICAvLyB1c2VkIGZv
ciBhcmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0aGlz
IGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8gdGhpcyBzcGVjaWFsIHRvIGJl
IHNwZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNoUmVn
aXN0ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwLgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JF
YWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYp
IG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBh
ZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIENDYWxs
SGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJikgb3ZlcnJpZGU7Cisg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpIG92ZXJyaWRlOworICAg
IAorICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ29k
ZTo6Q29kZSgpCit7Cit9CisKK0NvZGU6On5Db2RlKCkKK3sKK30KKworQmFzaWNCbG9jayogQ29k
ZTo6YWRkQmxvY2soKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhu
ZXcgQmFzaWNCbG9jayhtX2Jsb2Nrcy5zaXplKCkpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQg
PSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBv
dXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAobnVtU3RhY2tTbG90cygpKSB7Cisg
ICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xvdHM6XG4iKTsKKyAgICAgICAgZm9yIChTdGFja1Ns
b3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBk
ZWVwRHVtcChzbG90KSwgIlxuIik7CisgICAgfQorICAgIGlmIChudW1TcGVjaWFscygpKSB7Cisg
ICAgICAgIG91dC5wcmludCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBz
cGVjaWFsIDogc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBE
dW1wKHNwZWNpYWwpLCAiXG4iKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNvZGVfaAorI2RlZmluZSBBaXJDb2RlX2gK
KworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisj
aW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBQcm9jZWR1cmU7CisKK25hbWVzcGFjZSBBaXIgeworCisvLyBUaGlzIGlzIGFu
IElSIHRoYXQgaXMgdmVyeSBjbG9zZSB0byB0aGUgYmFyZSBtZXRhbC4gSXQgcmVxdWlyZXMgYWJv
dXQgNDB4IG1vcmUgYnl0ZXMgdGhhbiB0aGUKKy8vIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgLSBm
b3IgZXhhbXBsZSBpZiB5b3UncmUgZ2VuZXJhdGluZyAxTUIgb2YgbWFjaGluZSBjb2RlLCB5b3Ug
bmVlZCBhYm91dAorLy8gNDBNQiBvZiBBaXIuCisKK2NsYXNzIENvZGUgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvZGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIENvZGUoKTsKKyAgICB+Q29kZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2so
KTsKKworICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KCk7CisKKyAgICBTcGVjaWFsKiBhZGRT
cGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBz
cGVjaWFsIHlvdSBuZWVkIHRvIG1ha2UgYSBDIGNhbGwhCisgICAgU3BlY2lhbCogY0NhbGxTcGVj
aWFsKCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Js
b2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9
CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1
cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAg
ICAgICBpdGVyYXRvcigpOgorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAg
ICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0
ZXJhdG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAg
IDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsK
KyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAg
ICAgICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVy
ZS0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1
cm4gaW5leDsKKyAgICAgICAgfQorCisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7Cisg
ICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCitwcml2YXRl
OgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4+IG1fc3BlY2lhbHM7CisgICAgU3BlY2lhbCog
bV9jYWxsU3BlY2lhbDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEFpckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpckluc3QuaCIKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlIDx3
dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCit2b2lkIEluc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQob3Bjb2RlLCAiICIsIGxpc3REdW1wKGFyZ3MpLCAiICA7ICIsICpvcmlnaW4p
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJJbnN0X2gKKyNkZWZpbmUgQWlySW5zdF9oCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNp
bmNsdWRlICJBaXJPcGNvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVs
cGVyczsKKworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIg
eworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBB
cmdMaXN0OworCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAg
ICA6IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9w
Y29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCisgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAsIG9yaWdp
bihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAg
SW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVu
dHMpCisgICAgICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikK
KyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29k
ZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAgICAgIDog
YXJncyhXVEY6Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAg
ICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0
aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8g
dXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8g
YmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVu
IHlvdSdyZQorICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBv
bmx5IHdhbGtzIHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBp
dCBkb2Vzbid0IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcgYXJnIDogYXJncykKKyAgICAg
ICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0eXBlZGVm
IHZvaWQgRWFjaEFyZ0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJnOjpUeXBlKTsKKyAgICAK
KyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUpLiBUaGlzIGZ1
bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEFyZyhjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKHRt
cCwgcm9sZSwgdHlwZSkuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lk
IGZvckVhY2hUbXAoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvckVh
Y2hBcmdSb2xlKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlw
ZSwgZnVuY3Rvcik7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBSZXBvcnRzIGFu
eSBhZGRpdGlvbmFsIHJlZ2lzdGVycyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIFRoaXMg
ZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQKKyAgICAvLyBieSBvcGNvZGVfZ2VuZXJhdG9yLnJi
LgorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8v
IElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gb25lIG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/
IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJh
dG9yLnJiLgorICAgIGJvb2wgaXNWYWxpZEZvcm0oKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMg
aW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBmb3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBi
ZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisgICAgLy8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVm
ZXJlbmNpbmcgdGhlIHN0YWNrIChvciBhIFN0YWNrU2xvdCBvciBDYWxsQXJnLCBvZiBjb3Vyc2Up
IGluIHRoZQorICAgIC8vIGdpdmVuIGluZGV4PyBTcGlsbGluZyB1c2VzIHRoaXM6IGl0IHdhbGtz
IHRoZSBhcmdzIGJ5IGluZGV4IHRvIGZpbmQgVG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7CisgICAg
Ly8gaWYgaXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlzIHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFj
ZSB0aGUgQXJnOjpUbXAgd2l0aCBhbiBBcmc6OkFkZHIuIElmIGl0CisgICAgLy8gZmluZHMgYSBu
b24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFyZydzIGZvckVhY2hUbXAgdG8gZG8gYSBy
ZXBsYWNlbWVudCB0aGF0IHdheS4KKyAgICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0
by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGFkbWl0c1N0YWNr
KHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEdlbmVyYXRlIHNvbWUgY29kZSBmb3IgdGhp
cyBpbnN0cnVjdGlvbi4gVGhpcyBpcywgbGlrZSwgbGl0ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0
aGlzIGlzIHRoZQorICAgIC8vIHRlcm1pbmFsLCBpdCByZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVl
ZHMgdG8gYmUgbGlua2VkIGZvciB0aGUgInRoZW4iIGNhc2UsIHdpdGggdGhlICJlbHNlIgorICAg
IC8vIGNhc2UgYmVpbmcgZmFsbC10aHJvdWdoLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVy
YXRlKENDYWxsSGVscGVycyYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKKyAgICBBcmdMaXN0IGFyZ3M7CisgICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1
ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLgorICAgIE9wY29kZSBvcGNvZGU7Cit9OworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJJbnN0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdElubGluZXNfaAorI2Rl
ZmluZSBBaXJJbnN0SW5saW5lc19oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAi
QWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFscy5oIgorI2luY2x1ZGUgIkIz
U3RhY2ttYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworaW5saW5lIGJvb2wgaXNTaGlmdFZhbGlkKElu
c3QmIGluc3QpCit7CisjaWYgQ1BVKFg4NikKKyAgICByZXR1cm4gaW5zdC5hcmdzWzBdID09IFRt
cChYODZSZWdpc3Rlcjo6Y3gpOworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfSAg
IAorCitpbmxpbmUgYm9vbCBpc0xzaGlmdDMyVmFsdWUoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1
cm4gaXNTaGlmdFZhbGlkKGluc3QpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBBaXJJbnN0SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKKyMgU3lsbGFidXM6CisjCisjIFJvbGVzIGFuZCB0eXBlczoKKyMgVTpHID0+IHVzZSBvZiBh
IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBEOkcgPT4gZGVmIG9mIGEgZ2Vu
ZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkcgPT4gdXNlIGFuZCBkZWYgb2Yg
YSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVTpGID0+IHVzZSBvZiBhIGZs
b2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RiA9PiBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBv
ciB2YWx1ZQorIyBVRDpGID0+IHVzZSBhbmQgZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFs
dWUKKyMKKyMgQXJndW1lbnQga2luZHM6CisjIFRtcCA9PiB0ZW1wb3Jhcnkgb3IgcmVnaXN0ZXIK
KyMgSW1tID0+IDMyLWJpdCBpbW1lZGlhdGUgaW50CisjIEltbVB0ciA9PiBUcnVzdGVkSW1tUHRy
CisjIEFkZHIgPT4gYWRkcmVzcyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4
ID0+IEJhc2VJbmRleCBhZGRyZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhl
IHBhcnNlciB2aWV3cyB0aGVzZSB0aGluZ3MgYXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0
aGF0IHRoZXkgZmFsbCBpbnRvIHR3byBkaXN0aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28s
IGFsdGhvdWdoIHRoaXMgZmlsZSB1c2VzIGEgcGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwg
bm9uZSBvZiB0aGUgd2hpdGVzcGFjZSBvcgorIyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVs
IHRvIHRoZSBwYXJzZXIuIEZvciBleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQy
IFU6RywgVUQ6RiBJbW0sIFRtcCBBZGRyLCBUbXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQg
a25vdyB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAg
ICAgSW1tLCBUbXAKKyMgICAgIEFkZHIsIFRtcAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1
Y3Rpb24gdGhhdCB1c2VzIGEgR1BSIG9yIGFuIGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBh
IGZsb2F0IHJlZ2lzdGVyLgorCisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBs
ZWFkaW5nIGNhcGl0YWwgKEFkZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1i
bGVyCisjIEFQSSB0aGF0IGhhcyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitBZGQz
MiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgVG1wCisg
ICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcKKyAgICBJ
bW0sIFRtcCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBU
bXAKKyAgICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworTHNoaWZ0
MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpHLCBV
RDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworTW92ZSBVOkcsIEQ6RworICAgIFRt
cCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW1QdHIsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBs
b2FkICMgVGhpcyBtZWFucyB0aGF0ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQg
YXMgImxvYWQiIG5vdCAibW92ZSIuCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlCisKK01vdmVEb3Vi
bGUgVTpGLCBEOkYKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91YmxlCisg
ICAgVG1wLCBBZGRyIGFzIHN0b3JlRG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpGCisg
ICAgVG1wLCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAorCitS
ZXQKKworIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuCitzcGVjaWFsIFBhdGNoCisK
KyMgVGFrZXMgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGlucHV0cy4KK3NwZWNpYWwgQ2FsbApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGVj
aWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworU3BlY2lhbDo6U3BlY2lhbChjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9uYW1lKG5hbWUp
CisgICAgLCBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVjaWFsOjp+U3BlY2lhbCgpCit7
Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChtX25hbWUpOworICAgIGlmIChtX2luZGV4ICE9IFVJTlRfTUFYKQorICAgICAg
ICBvdXQucHJpbnQobV9pbmRleCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZGVlcER1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoKnRoaXMsICI6ICIpOworICAgIGRl
ZXBEdW1wSW1wbChvdXQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwZWNpYWxfaAorI2RlZmluZSBBaXJTcGVjaWFs
X2gKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBTcGVjaWFsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTcGVjaWFsKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTcGVjaWFsKGNvbnN0IGNoYXIq
IG5hbWUpOworICAgIHZpcnR1YWwgflNwZWNpYWwoKTsKKworICAgIGNvbnN0IGNoYXIqIG5hbWUo
KSBjb25zdCB7IHJldHVybiBtX25hbWU7IH0KKworICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoQXJn
KEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpID0gMDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZChJbnN0JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBh
ZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpID0gMDsKKyAgICB2aXJ0dWFsIEND
YWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJikgPSAwOworICAg
IHZpcnR1YWwgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpID0gMDsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkZWVwRHVt
cEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIENvZGU7CisKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgdW5zaWduZWQgbV9pbmRl
eDsKK307CisKK2NsYXNzIERlZXBTcGVjaWFsRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFNwZWNp
YWxEaW1wKFNwZWNpYWwqIHNwZWNpYWwpCisgICAgICAgIDogbV9zcGVjaWFsKHNwZWNpYWwpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKG1fc3BlY2lhbCkKKyAgICAgICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1
bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgU3BlY2lhbCogbV9zcGVjaWFsOworfTsKKworRGVlcFNw
ZWNpYWxEdW1wIGRlZXBEdW1wKFNwZWNpYWwqIHNwZWNpYWwpCit7CisgICAgcmV0dXJuIERlZXBT
cGVjaWFsRHVtcChzcGVjaWFsKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFpclN0YWNrU2xvdF9oCisjZGVmaW5lIEFpclN0YWNrU2xvdF9oCisKKyNpbmNsdWRlIDx3
dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90dmFsdWU7CisKK25hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBTdGFja1Nsb3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFN0YWNrU2xvdCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
dW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBTdGFja1Nsb3RW
YWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3Qo
dW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUp
CisgICAgICAgIDogbV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4
KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNp
Z25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgU3RhY2tTbG90VmFs
dWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7CitwdWJsaWM6Cisg
ICAgRGVlcFN0YWNrU2xvdER1bXAoU3RhY2tTbG90KiBzbG90KQorICAgICAgICA6IG1fc2xvdChz
bG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisgICAgICAgICAgICBtX3Nsb3QtPmRlZXBE
dW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7
CisgICAgfQorCitwcml2YXRlOgorICAgIFN0YWNrU2xvdCogbV9zbG90OworfTsKKworRGVlcFN0
YWNrU2xvdER1bXAgZGVlcER1bXAoU3RhY2tTbG90KiBzbG90KQoreworICAgIHJldHVybiBEZWVw
U3RhY2tTbG90RHVtcChzbG90KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gQWlyU3RhY2tTbG90X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFRtcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8bm9uZT4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc1JlZygpKSB7CisgICAgICAgIG91
dC5wcmludChyZWcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNHUFRt
cCgpKSB7CisgICAgICAgIG91dC5wcmludCgiJXRtcCIsIGdwVG1wSW5kZXgoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIiVmdG1wIiwgZnBUbXBJbmRleCgpKTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWly
VG1wX2gKKyNkZWZpbmUgQWlyVG1wX2gKKworI2luY2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIEEgVG1wIGlzIGEgZ2Vu
ZXJhbGl6YXRpb24gb2YgYSByZWdpc3Rlci4gSXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55
IEdQUiBvciBGUFIuIEl0IGNhbiBhbHNvCisvLyBiZSB1c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxs
b2NhdGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9yYXJ5KS4gTGlrZSBtYW55IEFpciBjbGFzc2Vz
LCB3ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJzZSBuYW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZl
IHRvIHVzZSB0aGlzIG5hbWUgYSBsb3QuCisKK2NsYXNzIFRtcCB7CitwdWJsaWM6CisgICAgVG1w
KCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFRt
cChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJlZykgeworICAgICAgICAgICAgaWYgKHJl
Zy5pc0dQUigpKQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVHUFIocmVnLmdwcigp
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlRlBS
KHJlZy5mcHIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV92YWx1ZSA9IDA7Cisg
ICAgfQorCisgICAgc3RhdGljIFRtcCBncFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVH
UFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChpbmRleCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBmb3JSYXdWYWx1ZSh1
bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX3ZhbHVlID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorCisg
ICAgYm9vbCByYXdWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIGJvb2wg
aXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AobV92YWx1ZSk7
CisgICAgfQorCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0VuY29kZWRGUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUFIobV92YWx1ZSk7CisgICAgfQorCisgICAg
Ym9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlBSKG1f
dmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzR1BSKCkgfHwgaXNGUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFIobV92YWx1ZSk7CisgICAgfQorCisg
ICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBSKG1f
dmFsdWUpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAgcmV0dXJuIGZwcigp
OworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZUdQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZw
VG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQVG1wKG1fdmFs
dWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBJbmRleCgpOworICAgICAg
ICByZXR1cm4gZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3Ro
ZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wJiBvdGhl
cikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRl
OgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlAodW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBpbmRleDsKKyAgICB9CisK
KyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAg
IH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAg
ICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSUmVnaXN0ZXIo
KSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFRtcCh1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdp
c3RlcigpKSArIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQVG1w
KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQUihNYWNyb0Fz
c2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0gaW5kZXg7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNFbmNvZGVkR1AoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlID4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUChpbnQgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPCAwOworICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGlzRW5jb2RlZEdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNv
ZGVkR1AodmFsdWUpICYmIHZhbHVlIDw9IGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJl
Z2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQUihpbnQgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmIHZhbHVlID49
IGVuY29kZWRGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1ZSk7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBSKHZhbHVlKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFsdWUpCisgICAgewor
ICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVy
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBSKE1hY3JvQXNzZW1i
bGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
ZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQ
VG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVHUFIoTWFjcm9Bc3Nl
bWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25l
ZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVk
RlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6
Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyAwOiBlbXB0
eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4KKyAgICAvLyBu
ZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1ZTsKK307CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclRtcF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0
b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29k
ZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NzQgQEAKKyMhL3Vzci9i
aW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
IyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVx
dWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29kZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6
c3BlY2lhbCwgOm92ZXJsb2FkcworCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgc3BlY2lhbCkK
KyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gc3BlY2lhbAorICAgICAg
ICB1bmxlc3Mgc3BlY2lhbAorICAgICAgICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVu
ZAorICAgIGVuZAorCisgICAgZGVmIG1hc21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNhc2Ug
KyBuYW1lWzEuLi0xXQorICAgIGVuZAorZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVy
IDpyb2xlLCA6dHlwZQorCisgICAgZGVmIGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAg
QHJvbGUgPSByb2xlCisgICAgICAgIEB0eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNz
IE92ZXJsb2FkCisgICAgYXR0cl9yZWFkZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYg
aW5pdGlhbGl6ZShzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0
dXJlCisgICAgICAgIEBmb3JtcyA9IGZvcm1zCisgICAgZW5kCitlbmQKKworY2xhc3MgS2luZAor
ICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAg
ZGVmIGluaXRpYWxpemUobmFtZSkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVj
aWFsID0gZmFsc2UKKyAgICBlbmQKKworICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3Ro
ZXIuaXNfYT8gU3RyaW5nCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNl
CisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5z
cGVjaWFsCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2lu
ZCkKKyAgICAgICAgaWYga2luZCA9PSAiQWRkciIKKyAgICAgICAgICAgIFsiQWRkciIsICJTdGFj
a1Nsb3QiLCAiQ2FsbEFyZyJdCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAg
ICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tp
bmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpr
aW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAg
ICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQK
K2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVt
YmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAg
ICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJl
cgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xp
bmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIg
Om9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5n
KQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRv
a2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAor
ICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAg
IAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59
IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBp
ZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9
IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306
ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3Ry
LCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICBy
ZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8K
KyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAg
ICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMg
bmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hl
biAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9y
aWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBc
dFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAv
XEFbLDoqXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxl
TmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAi
TGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwg
dW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAor
ICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKwor
ZGVmIGlzVUQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKSlcWi8KK2VuZAor
CitkZWYgaXNHRih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKEcpfChGKSlcWi8KK2VuZAorCitk
ZWYgaXNLaW5kKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoSW1tUHRyKXwo
QWRkcil8KEluZGV4KSlcWi8KK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQo
dG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4g
PT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRv
a2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29y
ZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBm
aWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAg
QGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhd
CisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQK
KworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAg
ICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3Ig
YXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2Ug
IlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAg
ZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3Ry
aW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmll
cgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhw
ZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBh
ZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisg
ICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3Rl
ZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFu
Y2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAg
ICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5
cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAg
ICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0
ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwg
SW1tUHRyLCBUbXAsIEFkZHIsIG9yIEluZGV4KSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAg
ICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisg
ICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIAorICAgICAgICBsb29wIHsKKyAgICAgICAgICAg
IGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgaWYgdG9rZW4g
PT0gInNwZWNpYWwiCisgICAgICAgICAgICAgICAgY29uc3VtZSgic3BlY2lhbCIpCisgICAgICAg
ICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAg
ICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIHJlc3Vs
dFtvcGNvZGVOYW1lXQorCisgICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gT3Bj
b2RlLm5ldyhvcGNvZGVOYW1lLCB0cnVlKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgaWYg
cmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IHJlc3VsdFtv
cGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3Zlcmxv
YWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBPcGNvZGUubmV3KG9wY29kZU5hbWUs
IGZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUK
KyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisg
ICAgICAgICAgICAgICAgZm9ybXMgPSBbXQorICAgICAgICAgICAgICAgIGlmIGlzVUQodG9rZW4p
CisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgcm9s
ZSA9IGNvbnN1bWVSb2xlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCI6IikKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb25zdW1lVHlwZQorICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgPDwgQXJnLm5ldyhy
b2xlLCB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
IGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAg
ICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtp
bmQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0
byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAga2luZHNbLTFdLnNwZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN1bWUoIioiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09
ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAi
YXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNz
IGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAg
ICBraW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
a2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9
PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIkltbVB0ciIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS5yb2xlICE9ICJVIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZv
ciBhIG5vbi11c2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS50
eXBlICE9ICJHIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJv
cigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi1nZW5lcmFsLXB1cnBvc2UgYXJndW1l
bnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KGtpbmRzLCBhbHROYW1lKQorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIGlzS2luZCh0b2tlbikKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2lnbmF0
dXJlID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9ybXMgPSBbRm9ybS5uZXcoW10sIG5pbCld
CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRz
IDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAg
ICAgIH0KKworICAgICAgICByZXN1bHQKKyAgICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdW
WzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1l
KQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UKKworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBG
aWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAg
ICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0
b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAg
ICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0
cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAg
ICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAg
fQorZW5kCisKK2RlZiB3cml0ZUNQUChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7Zmls
ZW5hbWV9LmNwcCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAg
b3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZp
bGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNp
bmNsdWRlIFwiY29uZmlnLmhcIiIKKyAgICAgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpciN7
ZmlsZW5hbWV9LmhcIiIKKworICAgICAgICB5aWVsZCBvdXRwCisgICAgfQorZW5kCisKK3dyaXRl
SCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBP
cGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAg
ICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQor
ICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVz
cGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRw
LnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bj
b2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKK3dyaXRlQ1BQ
KCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3Rm
L1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBv
dXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAi
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAg
IG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAg
ICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAu
cHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91
dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1
cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRw
LnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKworIyBGcm9tIGhlcmUgb24sIHdlIGRvbid0
IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIHNpbmNlIHdlJ3JlIHVzaW5nIGEg
cmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKworZGVmIG1hdGNoRm9ybXMob3V0cCwgc3Bl
ZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQor
ICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAorCisgICAgaWYgZmlsdGVyW2Zvcm1zXQor
ICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBd
LmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAg
ICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAgICAgIHJldHVybgorICAgIGVuZAorICAgIAor
ICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFjaCB7CisgICAgICAgIHwgZm9ybSB8CisgICAg
ICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbkluZGV4XS5uYW1lCisgICAgICAgIGlmIGdyb3Vw
c1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdIDw8IGZvcm0KKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zvcm1dCisgICAgICAgIGVuZAorICAgIH0KKwor
ICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91cHMubGVuZ3RoID09IDEKKyAgICAgICAgbWF0
Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVy
LCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIG91dHAu
cHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltjb2x1bW5JbmRleF19KSB7IgorICAgIGdyb3Vw
cy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwgdmFsdWUgfAorICAgICAgICBLaW5kLmFyZ0tp
bmRzKGtleSkuZWFjaCB7CisgICAgICAgICAgICB8IGFyZ0tpbmQgfAorICAgICAgICAgICAgb3V0
cC5wdXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToiCisgICAgICAgIH0KKyAgICAgICAgbWF0Y2hG
b3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBm
aWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAg
b3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1
dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQor
ICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5vcGNvZGUpIHsiCisgICAgJG9wY29kZXMu
dmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2Fz
ZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAg
ICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkT3Zlcmxv
YWRTd2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2Fm
ZSkKKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5hcmdzLnNpemUoKSkg
eyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVh
Y2ggeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2Fk
U3dpdGNoCisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZAorICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZW5kCisgICAgICAg
IGVuZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJk
ZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQK
KyAgICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgc3BlZWQsIGluc3QpCisgICAg
bWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGluc3QpIHsKKyAgICAgICAgfCBvcGNvZGUs
IG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxk
IG9wY29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29sdW1uR2V0dGVy
ID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAg
ICAgIiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICBjYWxsYmFj
ayA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgeWll
bGQgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0
Y2hGb3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmls
dGVyLCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2Rl
VXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5z
dC5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7IgorICAgIAorICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIEluc3Q6OmZvckVhY2hBcmcoY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91
dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAg
ICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3Rvcihhcmdz
WzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7IC8vIFRoaXMgaXMgYmFzaWNhbGx5IGJvZ3VzLCBidXQg
aXQgd29ya3MgZiBhbmFseXNlcyBtb2RlbCBTcGVjaWFsIGFzIGFuIGltbWVkaWF0ZS4iCisgICAg
ICAgICAgICBvdXRwLnB1dHMgImFyZ3NbMF0uc3BlY2lhbCgpLT5mb3JFYWNoQXJnKCp0aGlzLCBz
Y29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxiYWNrPihmdW5jdG9yKSk7IgorICAgICAgICBlbHNlCisg
ICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAg
ICAgICAgICB8IGFyZywgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBuaWwKKyAgICAg
ICAgICAgICAgICBjYXNlIGFyZy5yb2xlCisgICAgICAgICAgICAgICAgd2hlbiAiVSIKKyAgICAg
ICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCisgICAgICAgICAgICAgICAgd2hlbiAiRCIKKyAg
ICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiVUQi
CisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVmIgorICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2lu
ZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2FyZy50eXBlfVApOyIKKyAgICAgICAgICAgIH0K
KyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1
dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlQ1BQKCJPcGNv
ZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJ
bnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wgaGlkZGVu
VHJ1dGgoKSB7IHJldHVybiB0cnVlOyB9IgorICAgIG91dHAucHV0cyAiI2RlZmluZSBSRVRVUk4o
dmFsdWUpIGRvIHtcXCIKKyAgICBvdXRwLnB1dHMgIiAgICBpZiAoaGlkZGVuVHJ1dGgoKSlcXCIK
KyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAi
fSIKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6aXNWYWxpZEZvcm0oKSIKKyAgICBvdXRwLnB1
dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpzYWZlLCAidGhpcyIpIHsK
KyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNw
ZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFyZ3Muc2l6ZSgpIDwgMSkiCisgICAg
ICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICghYXJnc1swXS5pc1NwZWNpYWwoKSkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVy
biBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTihhcmdzWzBdLnNwZWNpYWwo
KS0+aXNWYWxpZCgqdGhpcykpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZHNNb3Jl
VmFsaWRhdGlvbiA9IGZhbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3Ro
LnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xl
ID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS5yb2xlCisgICAgICAgICAgICAgICAgdHlwZSA9
IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZQorICAgICAgICAgICAgICAgIGtpbmQgPSBm
b3JtLmtpbmRzW2luZGV4XQorICAgICAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gfD0g
a2luZC5zcGVjaWFsCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIyBXZSBhbHJl
YWR5IGtub3cgdGhhdCB0aGUgZm9ybSBtYXRjaGVzLiBXZSBkb24ndCBoYXZlIHRvIHZhbGlkYXRl
IHRoZSByb2xlLCBzaW5jZQorICAgICAgICAgICAgICAgICMga2luZCBpbXBsaWVzIHJvbGUuIFNv
LCB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHZhbGlkYXRlIGlzIHRoZSB0eXBlLiBBbmQgd2Ugb25s
eSBoYXZlCisgICAgICAgICAgICAgICAgIyB0byB2YWxpZGF0ZSB0aGUgdHlwZSBpZiB3ZSBoYXZl
IGEgVG1wLgorICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiVG1wIgorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1sje2luZGV4fV0udG1wKCkuaXMje3R5cGV9
UCgpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4oZmFsc2UpOyIKKyAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRzTW9y
ZVZhbGlkYXRpb24KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghaXMje29wY29kZS5u
YW1lfVZhbGlkKHRoaXMpKSIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTihmYWxz
ZSk7IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTih0cnVl
KTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisg
ICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0c1N0YWNr
KHVuc2lnbmVkIGFyZ0luZGV4KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJz
d2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwg
b3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKworICAg
ICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ0lu
ZGV4KSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAg
IG91dHAucHV0cyAiUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5hZG1pdHNTdGFjaygqdGhpcywg
YXJnSW5zdCkpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhlIGFy
Z0luZGV4LgorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7IgorCisg
ICAgICAgICAgICBudW1BcmdzID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAgICAg
ICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5n
dGgKKyAgICAgICAgICAgIH0ubWF4CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFyZ3Mu
dGltZXMgeworICAgICAgICAgICAgICAgIHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlm
IGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxsIG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBvciBk
b24ndCwgYWRtaXQgYW4gYWRkcmVzcworICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRleC4g
V2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgICAg
IG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICBv
cGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwK
KyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5k
c1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVz
ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgTm90
ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdlIGVu
ZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkgdGhh
dCBBZGRyZXNzIGlzIGluYWRtaXNzaWJsZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0g
MAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTihmYWxzZSk7IgorICAgICAg
ICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJSRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgIyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAgICAgICAgICBuZWVkT3Zl
cmxvYWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpCisKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3Zlcmxv
YWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAgICAgICAgICAgICAgICAg
ICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0IHdlIHdhbnQuCisgICAg
ICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ObyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAg
ICAgICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0byBkZWZhdWx0LgorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIg
aWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJSRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVy
bG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3ZSB0ZXN0IHRoZSBoeXBvdGhlc2lz
IHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3JtLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmdzWyN7Y29sdW1uSW5kZXh9
XS5raW5kKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIg
PSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtcyB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVtaXQgbm8gY29kZSwgc2luY2Ugd2Ug
Y2Fubm90IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJSRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5m
b3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAor
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIGVu
ZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAi
fSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisg
ICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgSW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxw
ZXJzJiBqaXQpIGNvbnN0IgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIkNDYWxs
SGVscGVyczo6SnVtcCByZXN1bHQ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6
ZmFzdCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAg
ICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTihhcmdz
WzBdLnNwZWNpYWwoKS0+Z2VuZXJhdGUoKnRoaXMsIGppdCkpOyIKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgaWYgZm9ybS5hbHROYW1lCisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IGZv
cm0uYWx0TmFtZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUg
PSBvcGNvZGUubWFzbU5hbWUKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wcmlu
dCAiaml0LiN7bWV0aG9kTmFtZX0oIgorCisgICAgICAgICAgICBmb3JtLmtpbmRzLmVhY2hfd2l0
aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAg
ICAgaWYgaW5kZXggIT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICIsICIKKyAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBjYXNlIGtpbmQubmFtZQorICAgICAg
ICAgICAgICAgIHdoZW4gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgaWYgb3ZlcmxvYWQuc2ln
bmF0dXJlW2luZGV4XS50eXBlID09ICJHIgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uZ3ByKCkiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmZwcigpIgor
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB3aGVuICJJbW0iCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTMy
KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiSW1tUHRyIgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW1QdHIoKSIKKyAgICAgICAgICAg
ICAgICB3aGVuICJBZGRyIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7
aW5kZXh9XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgoKSIK
KyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0cC5w
dXRzICIpOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiUkVUVVJOKHJlc3VsdCk7IgorICAgICAg
ICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyIKKyAgICBvdXRwLnB1dHMgInJldHVybiByZXN1bHQ7IgorICAgIG91dHAucHV0cyAifSIKKwor
ICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYgQEAg
cHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQog
ICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IGludmFsaWQo
KTsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogCiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXgg
PT0gZGVsZXRlZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoKICAgICAKICAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFsbFJlZ3NJdGVyYWJs
ZSB7CisgICAgcHVibGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAgICAgICAgICAgZXhwbGljaXQg
aXRlcmF0b3IoUmVnIHJlZykKKyAgICAgICAgICAgICAgICA6IG1fcmVnKHJlZykKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVnIG9wZXJhdG9yKigpIGNvbnN0
IHsgcmV0dXJuIG1fcmVnOyB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3JlZyA9IG1fcmVnLm5leHQoKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcmVnID09IG90aGVyLm1fcmVnOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAg
ICAgUmVnIG1fcmVnOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJzdCgpKTsgfQorICAgICAgICBpdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWcoKSk7IH0KKyAgICB9OworCisgICAgc3Rh
dGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSBjb25zdCB7IHJldHVybiBBbGxSZWdzSXRlcmFibGUo
KTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90IGludmFsaWQoKSB7IHJldHVybiAw
eGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJl
dmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAg
ICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRCaXRzKCkpCisgICAgICAgICAg
ICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7CisgICAgfQogICAgIAogcHJpdmF0ZToK
ICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263623</attachid>
            <date>2015-10-20 15:32:25 -0700</date>
            <delta_ts>2015-10-20 16:40:31 -0700</delta_ts>
            <desc>just a few little things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>256715</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1f
aW5kZXgoaW5kZXgpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwor
dm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFw
cGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNp
Y0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxv
Y2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFs
dWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0
OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlJ3MgdHlwZWRlZi4KKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVM
aXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBW
YWx1ZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAg
VmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4
KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBt
X3ZhbHVlczsgfQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSog
YXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1T
dWNjZXNzb3JzKCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KTsK
KyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAK
KyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWdu
ZWQgaW5kZXgpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1
ZXM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBC
YXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2Nr
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1
bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBC
YXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4g
RGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9s
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9jZWR1
cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pOworICAgIGFw
cGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2ljQmxv
Y2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+
YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitCYXNpY0Jsb2NrKiYg
QmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBsYXN0
KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworY29uc3QgQmFz
aWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVj
a1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwg
c3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNl
IENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisg
ICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1
YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQo
bGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09
IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOwor
ICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVk
aWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVk
aWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gK
KworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5w
YXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJp
c29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIg
Q29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFuZChMb2FkKGFkZHJlc3Mp
LCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChhZGRyZXNzKSkKK1Rl
c3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8xID0gRXF1YWwoQW5k
KExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0gRXF1YWwoQW5kKGxl
ZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5kKGxlZnQsIHJpZ2h0
KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCByaWdodCkKK0xvYWRF
cXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1YWwodmFsdWUsICQw
KQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkK
K3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFsdWVfaAorI2RlZmlu
ZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAg
CisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6
IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Nv
bnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2
NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25z
dDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAg
ICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBp
bnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3Jp
Z2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBp
bnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25z
dERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJs
ZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAg
ICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0RG91Ymxl
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAgICAs
IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdERvdWJs
ZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJv
bFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9s
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisg
ICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xW
YWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisK
K2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAg
Y2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVj
YXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2Fu
dAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1
cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVk
ZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAgfkNvbnRyb2xW
YWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAgIEJhc2ljQmxvY2sq
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQor
CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRyb2xWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUs
IG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTdWJjbGFzc2Vz
IHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMg
Zm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9y
aWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CisgICAgfQorCisg
ICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCisgICAgeworICAg
ICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMg
Zm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9
PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKwor
ICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRp
Y2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBubykKKyAgICAgICAg
OiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFw
cGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0
aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNp
Y0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3Qg
Y3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5
IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8g
SWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Js
b2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIElu
ZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUt
PmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0
aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29s
bGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBD
b2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0
ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24p
CisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBt
X2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRl
cmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24s
IG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlv
blR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAg
IH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQu
dmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86Cisg
ICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZh
bHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQor
CisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMo
KS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgs
IGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5w
YXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
aW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisjIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5nTWF0Y2hl
cgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcg
YXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50cyB3
aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1h
dGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCisKK0xv
YWQgPSBMb2FkKGFkZHJlc3MpCisKK0FkZExvYWQgPSBBZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUp
CitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK1N0b3JlQWRkTG9hZDEgPSBTdG9yZShBZGQoTG9h
ZChhZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQorU3RvcmVBZGRMb2FkMiA9IFN0b3JlKEFkZCh2
YWx1ZSwgTG9hZChhZGRyZXNzKSksIGFkZHJlc3MpCitTdG9yZUFuZExvYWQgPSBTdG9yZShBbmQo
TG9hZChhZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRk
cmVzcykKKworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQorewor
fQorCit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29m
ZnNldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAorCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
TWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBM
b2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0Ogor
ICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0
b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAg
ICBpbnRwdHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBm
b3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRz
IHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0
eXBlKS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAg
IGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlw
ZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAg
ICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAg
ICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBE
b3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6
CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6
CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09
IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSBy
ZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50cHRyX3Qgb2Zm
c2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZs
b2F0ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNl
dChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAg
ICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAg
ICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAg
ICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAg
TWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnRwdHJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdp
biwgdmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM09wY29kZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJpbnQoIklkZW50
aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gRklYTUUKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRM
aWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bj
b2RlIDogaW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVs
IGZvciB3aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisg
ICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgor
ICAgIElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNs
YXNzZXMuIENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNh
bgorICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFy
Z2UgY29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAg
Q29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNs
b3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFt
IHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4g
RWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ug
b2YKKyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisg
ICAgU3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRo
aXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAg
Ly8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRo
ZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xv
YmJlciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5
IHNhdmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBp
dCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNs
YXNzLiBUaGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BS
cykgb3IgRG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUg
ZnJhbWUgcG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cg
YnV0IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGgg
YSBjYXZlYXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBv
cmFyaWx5IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGlu
dHJpbnNpYyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBu
b3QKKyAgICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBv
aW50ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUg
dHlwZS4KKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJ
bnRlZ2VyIG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVz
IGxpa2UgSlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAg
IEJpdFhvciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMg
YW5kIHN1Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisg
ICAgU0V4dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNF
eHQzMiwKKyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAg
IEZSb3VuZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9E
LAorICAgIC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisK
KyAgICAvLyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5
cGUuIFJldHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0
IEVxdWFsKHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAor
ICAgIEdyZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAg
ICAvLyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92
ZSwKKyAgICBCZWxvdywKKyAgICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8v
IE1lbW9yeSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRl
ZCB0eXBlLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMy
OgorICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAor
ICAgIC8vIFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMg
cmV0dXJuIHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8g
TWVtb3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4g
VGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6
CisgICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2
YWx1ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9y
ZSBmb3IgSW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhp
cyBpcyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVt
IEMgY2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVu
dHMgYXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAv
LyBUaGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRo
aXMgaXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVt
aXRzIGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdl
dHMgdG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBh
bG9uZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3Qg
YmUgcGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAg
YXJndW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0Cisg
ICAgLy8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhl
IHRvcCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgor
ICAgIFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1
ZSBjbGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24K
KyAgICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFm
dGVyIHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20g
dGhlIGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBz
dXBwbHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0
byBqdW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBz
aW5jZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24g
b2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4u
IEZvcgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8v
CisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisg
ICAgLy8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8K
KyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAv
LworICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQg
YnkgdGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2Fs
bGJhY2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFy
ZSBkaWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3Qg
Q2hlY2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9z
c2libHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVj
a0FkZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tT
dWIsCisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0
aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMg
YQorICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2Vz
IGFuIEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1
bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1
ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ss
CisKKyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBz
aWxvbiwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisg
ICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAg
CisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4g
QnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZh
bHVlIGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNj
ZXNzb3IuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhl
ciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNo
LAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRo
ZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBl
LiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhp
cyBpcyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVy
ZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZp
bmUgQjNPcmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBj
aG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxs
IGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2gg
aW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3Jt
YXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8g
d3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBs
aWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9y
aWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkK
KyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2
YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgi
CisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQor
Cit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0
Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQ
YXRjaHBvaW50VmFsdWVfaAorI2RlZmluZSBCM1BhdGNocG9pbnRWYWx1ZV9oCisKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2ludFZhbHVlIDogcHVibGljIFZhbHVlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJu
IG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAg
ICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJp
bnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
UHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5
cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4sIGNoaWxkcmVuKQorICAg
IHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIz
UGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUHJv
Y2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQorCitQcm9jZWR1cmU6On5Qcm9jZWR1cmUoKQorewor
fQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKCkKK3sKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhc2ljQmxvY2s+KG1f
YmxvY2tzLnNpemUoKSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7Cisg
ICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVl
cER1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1Byb2NlZHVyZV9oCisKKyNpbmNsdWRlIDx3
dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgVmFsdWU7CisKK2NsYXNz
IFByb2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJvY2VkdXJlKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIFByb2NlZHVyZSgpOworICAg
IH5Qcm9jZWR1cmUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKCk7CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
VmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tz
LnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJh
dG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICA6IG1f
cHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2ln
bmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBC
YXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9w
cm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9w
ZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9p
bmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQg
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJl
LT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgaW5k
ZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmV4OworICAgICAgICB9CisKKyAgICAgICAgUHJv
Y2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9Owor
CisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7
IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgbnVt
QmxvY2tzKCkpOyB9CisKKyAgICBjbGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFZhbHVlc0NvbGxlY3Rpb24oUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAg
ICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpOgorICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAg
ICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFZhbHVlKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX3Byb2NlZHVyZS0+YmxvY2sobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4
ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisg
ICAgICAgIHByaXZhdGU6CisKKyAgICAgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7Cisg
ICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIDApOyB9Cisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJl
LCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKTsgfQorICAgICAg
ICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1f
dmFsdWVzW2luZGV4XTsgfQorICAgICAgICBWYWx1ZSogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgICAgIAorICAgIHByaXZhdGU6Cisg
ICAgICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgfTsKKworICAgIFZhbHVlc0NvbGxl
Y3Rpb24gdmFsdWVzKCkgeyByZXR1cm4gVmFsdWVzQ29sbGVjdGlvbigqdGhpcyk7IH0KKworcHJp
dmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlPj4gbV92YWx1ZXM7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKyNkZWZp
bmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1Zh
bHVlVHlwZSogUHJvY2VkdXJlOjphZGQoQXJndWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIHN0
ZDo6dW5pcXVlX3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5ldyBWYWx1ZVR5cGUobV92YWx1ZXMuc2l6
ZSgpLCBhcmd1bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgp
OworICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUHJvY2Vk
dXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90VmFsdWU6On5TdGFja1Nsb3RWYWx1ZSgpCit7Cit9
CisKK3ZvaWQgU3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNT
dGFja1Nsb3RWYWx1ZV9oCisjZGVmaW5lIEIzU3RhY2tTbG90VmFsdWVfaAorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3Rh
Y2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN0YWNrU2xvdDsgfQorCisg
ICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZVNpemU7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUg
ZW5kIG9mIGNvbXBpbGF0aW9uLiBZb3UgY2Fubm90IHJlbHkgb24gaXQgaGF2aW5nIGEgbWVhbmlu
Z2Z1bAorICAgIC8vIHZhbHVlIHdoaWxlIHRoZSBjb21waWxlciBpcyBydW5uaW5nLgorICAgIGlu
dHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN0YWNr
U2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6
ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgU3RhY2tTbG90LCBwb2ludGVyKCksIG9yaWdpbikK
KyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQ
KDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgaW50cHRy
X3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRlcihtX29wYXF1ZSks
ICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAgICAgICAiLCBnZW5lcmF0b3IgPSAi
LCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9i
YmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9
Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFj
a21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgor
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5j
bHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIEIzVmFsdWU7CisKK2NsYXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1
Y3QgR2VuZXJhdGlvblBhcmFtcyB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRh
aW5pbmcgdGhlIHN0YWNrbWFwLgorICAgICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8g
VGhpcyBpcyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBqdW1wIHRvIHRoZSBzbG93IHBhdGgsIGlmIHRoaXMgaXMgYSBz
dGFja21hcCBmb3IgYSBDaGVjayB2YWx1ZS4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1
bXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVhbCB2YWx1ZSByZXByZXNl
bnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBz
OworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVz
ZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgfTsKKyAgICAKKyAg
ICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3QgR2Vu
ZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlv
bj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7CisgICAgfQorCisgICAg
Ly8gU2V0IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBzdGFja21hcC4gVGhpcyBp
cyB1c2VmdWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisgICAgLy8gY2FuIGJlIGR1
cGxpY2F0ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQg
cmVnaXN0ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBhbGwgb2YgdGhvc2UgZHVw
bGljYXRlcyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBk
YXRhIHN0cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUu
CisgICAgdm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAgIHsKKyAgICAgICAgbV9v
cGFxdWUgPSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcg
aW5kaWNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6
ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4o
aW5kZXgpKTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkgY29uc3QgeyByZXR1cm4g
Yml0d2lzZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAvLyBDb25zdHJhaW4gYW4g
YXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNrbWFwLiBOb3RlIHRoYXQg
aW5kZXggemVybyByZWZlcnMgdG8gdGhlCisgICAgLy8gZmlyc3QgYXJndW1lbnQgdG8gdGhhdCBW
YWx1ZSwgZXZlbiBpZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3IgZXhh
bXBsZSwgaW4gYQorICAgIC8vIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJvciB0
byBjb25zdHJhaW4gaW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdCB3b3VsZAor
ICAgIC8vIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhlIGdl
bmVyYXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuIGRlcGVuZAorICAgIC8vIG9uIHRo
ZSByZXBzIGZvciB0aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNvbnN0
cmFpbih1bnNpZ25lZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAg
IGlmIChpbmRleCArIDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBzLmdyb3co
aW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisKKyAgICB2
b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fY2xv
YmJlcmVkLm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNsb2Ji
ZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lkIHNldEdlbmVy
YXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICBtX2dlbmVy
YXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+
KGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworICAgIAor
ICAgIHZvaWQqIG1fb3BhcXVlIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9y
ZXBzOworICAgIFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIFJlZ2lzdGVyU2V0
IG1fY2xvYmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsgLy8gU3RhY2tt
YXBzIGNvdWxkIGJlIGZ1cnRoZXIgZHVwbGljYXRlZCBieSBBaXIsIGJ1dCB0aGF0J3MgdW5saWtl
bHksIHNvIHdlIGp1c3QgbWVyZ2UgdGhlIHVzZWQgcmVnaXN0ZXJzIHNldHMgaWYgdGhhdCB3ZXJl
IHRvIGhhcHBlbi4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNTdGFja21hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCitTdGFja21hcFNw
ZWNpYWw6OlN0YWNrbWFwU3BlY2lhbChjb25zdCBjaGFyKiBuYW1lKQorICAgIDogU3BlY2lhbChu
YW1lKQoreworfQorCitTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwoKQoreworfQor
Cit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29w
ZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgVmFsdWUq
IHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3Mg
aGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPT0gdmFsdWUt
PmNoaWxkcmVuLnNpemUoKSArIDEpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkg
PCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3Nb
aV07CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpIC0gMSk7CisKKyAgICAg
ICAgY2FsbGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBl
KCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGlu
c3QpCit7CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSB2YWxpZGF0ZWQgdGhhdCBpdCBo
YXMgYXQgbGVhc3Qgb25lIGFyZywgdGhlIFNwZWNpYWwuCisgICAgQVNTRVJUKGluc3QuYXJncy5z
aXplKCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAq
IHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICBBU1NFUlQoc3RhY2ttYXApOwor
CisgICAgLy8gVGhlIG9ubHkga2luZCBvZiBhcmd1bWVudCB0aGF0IGEgc3RhY2ttYXAgd291bGQg
YWx3YXlzIGJlIHVuaGFwcHkgd2l0aCBpcyBhIFNwZWNpYWwuIEJ1dCwgd2UKKyAgICAvLyBleGhh
dXN0aXZlbHkgb3B0IGludG8gZXZlcnl0aGluZyB3ZSBrbm93IHdlIGNhbiBoYW5kbGUuIEl0IG1h
a2VzIHRoaW5ncyBlYXNpZXIgbGF0ZXIuIEFsc28sCisgICAgLy8gdGhpcyBsb29wIHZlcmlmaWVz
IGFyZ3VtZW50IHR5cGUuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGluc3QuYXJncy5z
aXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7Cisg
ICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAgCisgICAgICAgIHN3
aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBjYXNl
IEFyZzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1tUHRyOgorICAgICAgICBjYXNlIEFyZzo6
QWRkcjoKKyAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICBjYXNlIEFyZzo6Q2FsbEFy
ZzoKKyAgICAgICAgY2FzZSBBcmc6OkluZGV4OgorICAgICAgICAgICAgYnJlYWs7IC8vIE9LCisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxk
LT50eXBlKCkpOworCisgICAgICAgIGlmICghYXJnLmlzVHlwZSh0eXBlKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGNvbnN0cmFpbnRz
IGhhcyB0byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBCMyBjaGlsZHJlbi4KKyAg
ICBBU1NFUlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkgPD0gdmFsdWUtPmNoaWxkcmVuLnNpemUo
KSk7CisKKyAgICAvLyBXZSBtdXN0IGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBvcGVyYW5kcy4K
KyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAhPSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpICsgMSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVmVyaWZ5IGFueSBleHBsaWNpdGx5IHN1
cHBsaWVkIGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFja21h
cC0+bV9yZXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5j
aGlsZChpKTsKKyAgICAgICAgVmFsdWVSZXAmIHJlcCA9IHN0YWNrbWFwLT5tX3JlcHNbaV07Cisg
ICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyAxXTsKKworICAgICAgICBzd2l0Y2ggKHJl
cC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgIGlm
ICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAg
aWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAg
ICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChhcmcgIT0g
QXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0
YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRh
dGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQor
eworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21h
cCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgdW5zaWduZWQgc3RhY2ttYXBBcmdJbmRleCA9
IGFyZ0luZGV4IC0gMTsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5t
X3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8g
Y29uc3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFdl
IG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBp
bnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8g
YSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0lu
ZGV4XS5raW5kKCkgPT0gQW55KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9ydFVzZWRyZWdpc3RlcnMoSW5z
dCYgaW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFsdWUq
IHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0
YWNrbWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBTdGFj
a21hcFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVzZWQK
KyAgICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJlbnRs
eSB3b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8gb3Ig
dGhpbmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBwcm9i
bGVtLgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVycyk7
Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVk
UmVncyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAg
IFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgcmV0dXJuIHN0
YWNrbWFwLT5jbG9iYmVyZWQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcFNwZWNpYWxfaAorI2Rl
ZmluZSBCM1N0YWNrbWFwU3BlY2lhbF9oCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5j
bHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Ly8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRoYXQgaGF2ZSBzdGFja21hcHMu
IE5vdGUgdGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAgYnkKKy8vIGFza2luZyBmb3IgdGhl
IEluc3QncyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3RzIGRvbid0IG5lZWQgdG8gZXZlbiBo
b2xkIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAuCisKK2NsYXNzIFN0YWNrbWFwU3Bl
Y2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGljOgorICAgIFN0YWNrbWFwU3BlY2lh
bChjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRM
YW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJ
bnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJl
Z2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7
ICAgIAorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUo
KSBvciBkZWVwRHVtcEltcGwoKS4gV2UgaGF2ZSBtYW55IHNvbWUgc3ViY2xhc3NlcworICAgIC8v
IHRoYXQgaW1wbGVtZW50IHRoYXQuCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworI2luY2x1ZGUgIkIzQmFz
aWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTd2l0
Y2hDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1f
Y2FzZVZhbHVlLCAiLT4iLCBwb2ludGVyRHVtcChtX3RhcmdldCkpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
Q2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENh
c2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hDYXNlX2gKKyNkZWZp
bmUgQjNTd2l0Y2hDYXNlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAg
IFN3aXRjaENhc2UoKQorICAgIHsKKyAgICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2Fz
ZVZhbHVlLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUoY2FzZVZh
bHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0KKworICAg
IGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBC
YXNpY0Jsb2NrKiB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludDY0X3Qg
Y2FzZVZhbHVlOworICAgIEJhc2ljQmxvY2sqIHRhcmdldDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsZHVlICJCM1N3aXRjaFZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hWYWx1ZTo6flN3aXRjaFZhbHVl
KCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSh1bnNpZ25lZCBp
bmRleCkKK3sKKyAgICBTd2l0Y2hDYXNlIHJlc3VsdCA9IG1fc3VjY2Vzc29yc1tpbmRleF07Cisg
ICAgbV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0KCk7CisgICAgbV9zdWNj
ZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFN3aXRj
aFZhbHVlOjphcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAg
bV9zdWNjZXNzb3JzLmFwcGVuZChtX3N1Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3Nv
cnNbbV9zdWNjZXNzb3JzLnNpemUoKSAtIDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBt
X3ZhbHVlcy5hcHBlbmQoc3dpdGNoQ2FzZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNo
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBk
ZXN0cnVjdGl2ZWx5IG92ZXJyaWRlcyBDb250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91
dC5wcmludChsaXN0RHVtcCgqdGhpcykpOworfQorCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKQor
ICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nl
c3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0
Y2hWYWx1ZV9oCisKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dp
dGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dp
dGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9v
bCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKwor
ICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1T
dWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNl
IHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpXTsgfQorICAgIAorICAgIGNvbnN0
IFZlY3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9
CisKKyAgICBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3Nv
cnMoKS5sYXN0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgZmFsbFRocm91Z2goKSB7IHJldHVybiBz
dWNjZXNzb3JzKCkubGFzdCgpOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbnVtQ2FzZVZhbHVlcygpOyB9CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCks
IHN1Y2Nlc3NvcihpbmRleCkpOworICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5z
aWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAg
IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9y
KCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRl
eCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihTd2l0Y2hWYWx1
ZSYgc3dpdGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRjaCgm
c3dpdGNoVmFsdWUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRl
eCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgU3dpdGNoVmFsdWUqIG1fc3dpdGNoOworICAgICAgICB1
bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICAvLyBUaGlzIHJlbW92ZXMg
dGhlIGNhc2UgYW5kIHJlb3JkZXJzIHRoaW5ncyBhIGJpdC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0
aGUgY2FzZXMgZnJvbSAwIHRvIE4sCisgICAgLy8gdGhlbiB5b3UgY2FuIGtlZXAgaXRlcmF0aW5n
IGFmdGVyIHRoaXMgc28gbG9uZyBhcyB5b3UgcmV2aXNpdCB0aGlzIHNhbWUgaW5kZXggKHdoaWNo
IHdpbGwgbm93CisgICAgLy8gY29udGFpbiBzb21lIG90aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJl
bW92ZXMgdGhlIGNhc2UgdGhhdCB3YXMgcmVtb3ZlZC4KKyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNh
c2UodW5zaWduZWQgaW5kZXgpOworCisgICAgdm9pZCBhcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENh
c2UmIHN3aXRjaENhc2UpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CisKKyAgICBTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwg
QmFzaWNCbG9jayogZmFsbFRocm91Z2gpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM1N3aXRjaFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQoIlZvaWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIG91dC5wcmludCgiSW50NjQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJs
ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBl
X2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2VudW0gVHlwZSB7CisgICAgVm9pZCwKKyAgICBJbnQzMiwKKyAgICBJ
bnQ2NCwKKyAgICBEb3VibGUKK307CisKK2lubGluZSBib29sIGlzSW50KFR5cGUgdHlwZSkKK3sK
KyAgICByZXR1cm4gdHlwZSA9PSBJbnQzMiB8fCB0eXBlID09IEludDY0OworfQorCitpbmxpbmUg
Ym9vbCBpc0Zsb2F0KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBEb3VibGU7Cit9
CisKK2lubGluZSBUeXBlIHBvaW50ZXIoKSBjb25zdAoreworICAgIGlmIChzaXplb2Yodm9pZCop
ID09IDQpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICByZXR1cm4gSW50NjQ7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRT
dHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlR5cGUp
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1ZTo6
flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiXiIsIG1fcGhpLT5pbmRleCgp
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzVXBzaWxvblZhbHVlX2gKKyNkZWZpbmUgQjNVcHNpbG9uVmFsdWVfaAorCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
VXBzaWxvblZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9CisKKyAg
ICB+VXBzaWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkgY29uc3QgeyByZXR1cm4gbV9w
aGk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAg
IAorICAgIFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IHZhbHVlLCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9y
aWdpbiwgdmFsdWUpCisgICAgICAgICwgbV9waGkocGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHZhbHVlLT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0KKworICAgIFZhbHVlKiBtX3Bo
aTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNVcHNpbG9u
VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitWYWx1ZTo6flZhbHVlKCkKK3sKK30K
Kwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdmFsdWUpCit7CisgICAg
Ly8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNlbWVudCBv
ZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBsYWluIElk
ZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd2Ug
bmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFj
ZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4KKwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5cGU7Cisg
ICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhp
cy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7Cisg
ICAgdm9pZCogbWlzYyA9IHRoaXMtPm1pc2M7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlID09
IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3
ICh0aGlzKSAoaW5kZXgsIElkZW50aWZ5LCB0eXBlLCBvcmlnaW4sIHZhbHVlKTsKKworICAgIHRo
aXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsK
KyAgICB0aGlzLT5taXNjID0gbWlzYzsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30K
Kwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNvZGUpOworCisgICAgb3V0
LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNo
aWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChj
aGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0OworICAgIGR1bXBNZXRh
KHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7
CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJp
bmcpOworCisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3QgVmFsdWU6OmFzSW50MzIo
KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhh
c0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitkb3VibGUgVmFsdWU6
OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZp
cnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5Ogor
ICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2
OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6Cisg
ICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNl
IFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVj
a1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlw
ZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRlcigpOwor
ICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBEVG9JMzI6CisgICAg
Y2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAg
Y2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJF
cXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVx
dWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGNh
c2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7CisgICAg
Y2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gRG91YmxlOworICAg
IGNhc2UgTm9wOgorICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpbmNsdWRl
ICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
VmFsdWUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVk
ZWYgVmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlzdDsKKworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBkdW1wUHJlZml4ID0gIkAiOworCisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUp
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgflZhbHVlKCk7CisKKyAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICAvLyBOb3RlIHRo
YXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZhbHVlcyB3
aXRoIGlkZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29k
ZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9Cisg
ICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJl
bltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBl
IHVzaW5nIHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47
IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBt
X2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAg
ICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICAvLyBU
aGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBk
byBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZlIGEKKyAgICAvLyBBcmd1bWVudFJlZ1Zh
bHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8gaWYgKEFyZ3VtZW50UmVnVmFsdWUqIGFy
Z3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCkpIHsKKyAgICAvLyAgICAg
dGhpbmdzCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlm
IHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGlzIHJl
dHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2VwdHMob3Bjb2RlKCkpIHJldHVybnMgZmFs
c2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhcygpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhh
c0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Q7CisgICAgCisgICAg
Ym9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisg
ICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50KCkgY29uc3Q7CisgICAg
Ym9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkg
Y29uc3Q7CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisKKyAgICBTdGFja21hcCogc3Rh
Y2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIC8v
IFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgo
aW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBl
KQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJz
dENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlz
IGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBu
byBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgp
CisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAg
ICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBp
cyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9w
Y29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAg
ICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAg
ICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQorICAgICAgICAsIG1fb3Jp
Z2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMu
Li4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVz
IHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhh
dCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKKyAgICBleHBsaWNpdCBWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBt
X2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5
cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikK
KyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCisgICAgZXhw
aWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmln
aW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbihj
aGlsZHJlbikKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZvcihPcGNvZGUs
IFZhbHVlKiBmaXJzdENoaWxkKTsKKworICAgIC8vIFRoaXMgZ3JvdXAgb2YgZmllbGRzIGlzIGFy
cmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgorICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgT3Bj
b2RlIG1fb3Bjb2RlOworICAgIFR5cGUgbV90eXBlOworICAgIAorICAgIE9yaWdpbiBtX29yaWdp
bjsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisKK3B1YmxpYzoKKyAgICBCYXNpY0Js
b2NrKiBvd25lciB7IG51bGxwdHIgfTsgLy8gY29tcHV0ZWQgbGF6aWx5LgorICAgIFZhbHVlKiBy
ZXBsYWNlbWVudCB7IG51bGxwdHIgfTsgLy8gdXNlZCBmb3IgYW5hbHlzZXMgYW5kIHRyYW5zZm9y
bWF0aW9ucy4KKyAgICB2b2lkKiBtaXNjIHsgbnVsbHB0ciB9OworfTsKKworY2xhc3MgRGVlcFZh
bHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVlRHVtcChWYWx1ZSogdmFsdWUpCisgICAg
ICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAg
ICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91
dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFZhbHVlKiBtX3ZhbHVl
OworfTsKKworRGVlcFZhbHVlRHVtcCBkZWVwRHVtcChWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0
dXJuIERlZXBWYWx1ZUR1bXAodmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEIzVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1
ZUlubGluZXNfaAorI2RlZmluZSBCM1ZhbHVlSW5saW5lc19oCisKKyNpbmNsdWRlICJCM0NoZWNr
VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2
NFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQ
YXRjaHBvaW50VmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCogVmFsdWU6OmFzKCkK
K3sKKyAgICBpZiAoVDo6YWNjZXB0cyhvcGNvZGUoKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUKj4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPnR5cGVu
YW1lIFQ+Citjb25zdCBUKiBWYWx1ZTo6YXMoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9j
YXN0PFZhbHVlKj4odGhpcyktPmFzPFQ+KCk7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDMyVmFsdWU+KCk7Cit9CisKK2ludDMyX3Qg
VmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdDMyVmFsdWU+KCkt
PnZhbHVlKCk7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gISFhczxDb25zdDY0VmFsdWU+KCk7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBj
b25zdAoreworICAgIHJldHVybiBhczxDb25zdDY0VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2Jv
b2wgVmFsdWU6Omhhc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgfHwgaGFz
SW50NjQoKTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQoKSBjb25zdAoreworICAgIHJldHVy
biBoYXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNJbnQ2NCgpOworfQorCitib29sIFZhbHVlOjpp
c0ludChpbnQ2NF90IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQoKSAmJiBhc0lu
dCgpID09IHZhbHVlOworfQorCitib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAg
IHJldHVybiAhIWFzPENvbnN0RG91YmxlVmFsdWU+KCk7Cit9CisKK2RvdWJsZSBWYWx1ZTo6YXNE
b3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdERvdWJsZVZhbHVlPigpLT52YWx1
ZSgpOworfQorCitTdGFja21hcCogVmFsdWU6OnN0YWNrbWFwKCkKK3sKKyAgICBpZiAoQ2hlY2tW
YWx1ZSogY2hlY2sgPSBhczxDaGVja1ZhbHVlPigpKQorICAgICAgICByZXR1cm4gJmNoZWNrLT5z
dGFja21hcDsKKyAgICBpZiAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYXM8UGF0Y2hw
b2ludFZhbHVlPigpKQorICAgICAgICByZXR1cm4gJnBhdGNocG9pbnQtPnN0YWNrbWFwOworICAg
IHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzVmFsdWVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVSZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlUmVwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1ZhbHVlUmVwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE5vbmU6Cisg
ICAgY2FzZSBTb21lUmVnaXN0ZXI6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlZ2lzdGVy
OgorICAgICAgICBvdXQucHJpbnQoIigiLCByZWcoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21GUCgpLCAi
KSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja0FyZ3VtZW50OgorICAgICAgICBv
dXQucHJpbnQoIigiLCBvZmZzZXRGcm9tU1AoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIHZhbHVlKCksICIpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFZhbHVlUmVwOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2Fz
ZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICBvdXQucHJpbnQoIkFueSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQo
IlNvbWVSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6UmVn
aXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAg
ICBvdXQucHJpbnQoIlN0YWNrQXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVSZXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
UmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlUmVwX2gKKyNkZWZp
bmUgQjNWYWx1ZVJlcF9oCisKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHVzZSB0
aGlzIGNsYXNzIHRvIGRlc2NyaWJlIHZhbHVlIHJlcHJlc2VudGF0aW9ucyBhdCBzdGFja21hcHMu
IEl0J3MgdXNlZCBib3RoIHRvIGZvcmNlIGEKKy8vIHJlcHJlc2VudGF0aW9uIGFuZCB0byBnZXQg
dGhlIHJlcHJlc2VudGF0aW9uLiBXaGVuIHRoZSBCMyBjbGllbnQgZm9yY2VzIGEgcmVwcmVzZW50
YXRpb24sIHdlIHNheQorLy8gdGhhdCBpdCdzIGFuIGlucHV0LiBXaGVuIEIzIHRlbGxzIHRoZSBj
bGllbnQgd2hhdCByZXByZXNlbnRhdGlvbiBpdCBwaWNrZWQsIHdlIHNheSB0aGF0IGl0J3MgYW4K
Ky8vIG91dHB1dC4KKworY2xhc3MgVmFsdWVSZXAgeworcHVibGljOgorICAgIGVudW0gS2luZCB7
CisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQg
QjMgY2FuIHBpY2sgYW55IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBBbnksCisKKyAgICAgICAg
Ly8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQg
cGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBhCisgICAgICAgIC8vIHJlZ2lzdGVyIHRo
YXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKKyAgICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAg
ICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3Vs
YXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAorICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhp
cyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisK
KyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdo
YXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5w
dXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgIFN0YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlu
cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRo
ZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAgICAgICAgLy8gb2Zmc2V0LgorICAgICAgICBTdGFj
a0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50LWZvbGRlZCB0aGUgdmFsdWUuCisgICAgICAgIENv
bnN0YW50CisgICAgfTsKKyAgICAKKyAgICBWYWx1ZVJlcCgpCisgICAgICAgIDogbV9raW5kKEFu
eSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVmFsdWVSZXAoUmVnIHJlZykKKyAgICAg
ICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAgICAgICwgbV92YWx1ZShyZWcuaW5kZXgoKSkKKyAg
ICB7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHJlZyhSZWcgcmVnKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVw
IHN0YWNrKGludHB0cl90IG9mZnNldEZyb21GUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV92
YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tB
cmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9tU1ApCisgICAgeworICAgICAgICBWYWx1ZVJlcCBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFja0FyZ3VtZW50OworICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21TUDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVS
ZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50OworICAgICAgICByZXN1bHQubV92
YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudChkb3Vi
bGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXAoYml0d2lzZV9jYXN0PGlu
dDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4g
bV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
a2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4
KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZz
ZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0Fy
Z3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsK
KyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisK
KyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIGludDY0
X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2Ug
V1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVS
ZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRj
aGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9w
YXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDkzIEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3
VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitj
bGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1l
LCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9y
aWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgor
ICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBv
ciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAgIEB2YXJOYW1lID0gQGFub255bW91
cyA/IG5ld1ZhciA6IG5hbWUKKyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAY2hp
bGRyZW4gPSBjaGlsZHJlbiA/IGNoaWxkcmVuIDogW10KKyAgICBlbmQKKworICAgIGRlZiBoYXNP
cGNvZGUKKyAgICAgICAgb3Bjb2RlICE9IG5pbAorICAgIGVuZAorCisgICAgZGVmIGVhY2hWYXJp
YWJsZSgmcHJvYykKKyAgICAgICAgY2hpbGRyZW4uZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAg
ICAgIHwgY2hpbGQsIGluZGV4IHwKKyAgICAgICAgICAgIHlpZWxkIHZhck5hbWUsCisgICAgICAg
ICAgICAgICAgICBjaGlsZC5uYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQudmFyTmFtZSwK
KyAgICAgICAgICAgICAgICAgIGNoaWxkLmFub255bW91cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5v
bkludGVybmFsIDogOmFub25PcGVyYW5kKSA6IChjaGlsZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6
b3BlcmFuZCksCisgICAgICAgICAgICAgICAgICBpbmRleAorICAgICAgICAgICAgY2hpbGQuZWFj
aFZhcmlhYmxlKCZwcm9jKQorICAgICAgICB9CisgICAgZW5kCitlbmQKKworY2xhc3MgTWF0Y2hl
cgorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6cHJvZHVjdGlvbnMKKworICAgIGRlZiBpbml0aWFs
aXplKG5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHBy
b2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAg
ICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRp
YWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1l
CisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRl
ZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5k
CisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAor
ICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3Jp
Z2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0o
b3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5n
ID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90
aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAg
ICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAg
ICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRl
ZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAg
ICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAg
ICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAg
IGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFt
ZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1i
ZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAg
ICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAg
ICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAg
ICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEFbYS16QS1aMC05JF0oW2EtekEt
WjAtOV9dKikvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmls
ZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAg
ICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbPSgpLF0vCisg
ICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVO
dW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9y
IGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQg
c2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3Ry
ID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc0tleXdv
cmQodG9rZW4pCisgICAgIyBXZSBjYW4gZXh0ZW5kIHRoaXMgYXMgd2UgYWRkIG1vcmUga2V5d29y
ZHMuIExpa2UsIHdlIG1pZ2h0IHdhbnQgImluY2x1ZGUiIGV2ZW50dWFsbHkuCisgICAgdG9rZW4g
PX4gL1xBKChtYXRjaGVyKSlcWi8KK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAg
IHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKVxaLyBhbmQgbm90IGlzS2V5
d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRh
LCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAg
ICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0Bp
ZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBl
bmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAg
ICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJy
b3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFp
c2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAg
ICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQor
ICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0g
c3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRp
ZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigi
RXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAg
ICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGFkZFVuaXF1ZShu
YW1lLCBwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAgaWYgbmFtZSA9PSBwcm9kdWN0
aW9uLnZhck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNoaWxkIHByb2R1Y3Rpb24gaGFz
IHNhbWUgbmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBp
ZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9u
Lm5hbWUgfQorICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQor
ICAgICAgICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgIGVuZAor
CisgICAgZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1hdGNoZXIiKQorCisgICAgICAgIG1h
dGNoZXJOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBwcm9kdWN0aW9ucyA9IFtd
CisKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMu
bGVuZ3RoCisKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0byBzdXBwb3J0ICJpbmNsdWRl
Ii4gSWYgd2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUuCisgICAgICAgICAgICBwcm9kdWN0
aW9uID0gcGFyc2VQcm9kdWN0aW9uCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHByb2R1
Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9
CisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAg
ICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAg
ICAgICAgfQorCisgICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJOYW1lLCBwcm9kdWN0aW9ucykK
KyAgICBlbmQKKworICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgb3JpZ2luID0gdG9r
ZW4ub3JpZ2luCisgICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIGlm
IHRva2VuID09ICI9IgorICAgICAgICAgICAgY29uc3VtZSgiPSIpCisgICAgICAgICAgICBvcGNv
ZGUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAg
IGVsc2lmIHRva2VuID09ICIoIgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgICAg
ICBvcGNvZGUgPSBuYW1lCisgICAgICAgICAgICBuYW1lID0gbmlsCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJldHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG5pbCwgbmlsKQor
ICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAg
bG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKworICAgICAgICAgICAg
YWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1Y3Rpb24pCisKKyAgICAgICAg
ICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAg
ICAgIH0KKworICAgICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIpIgorICAgICAgICBhZHZhbmNl
CisKKyAgICAgICAgUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBvcGNvZGUsIHByb2R1Y3Rp
b25zKQorICAgIGVuZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJz
ZXIubmV3KElPOjpyZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCittYXRjaGVyID0gcGFyc2VyLnBh
cnNlCisKK2NsYXNzIFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIgOmluZGV4TWFwLCA6cHJvZHVj
dGlvbnMKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExpc3QsIHByb2R1Y3Rpb25zKQor
ICAgICAgICBAaW5kZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBbXQorICAgICAg
ICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBp
bmRleE1hcCA8PCBpbmRleAorICAgICAgICAgICAgQHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb25z
W2luZGV4XQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYgbWFwSW5kZXhMaXN0KGluZGV4
TGlzdCkKKyAgICAgICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAg
ICAgICAgICAgIEBpbmRleE1hcFtpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK0Zp
bGUub3BlbigiQjMiICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInciKSB7CisgICAgfCBvdXRwIHwK
KworICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhdHRlcm5fbWF0Y2hl
ci5yYiBmcm9tICN7ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKworICAgIG91dHAucHV0cyAi
I2lmbmRlZiBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAucHV0cyAiI2RlZmluZSBCMyN7
bWF0Y2hlci5uYW1lfV9oIgorICAgIAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJCM1ZhbHVl
LmhcIiIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4iCisgICAgb3V0
cC5wdXRzICJ2b2lkIHJ1biN7bWF0Y2hlci5uYW1lfShWYWx1ZSogX3ZhbHVlLCBBZGFwdG9yJiBh
ZGFwdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisKKyAgICAjIE5vdGUgdGhhdCB0aGlzIGRvZXMg
bm90IGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgYmVjYXVzZSBpdCdzIGEgcmVjdXJzaXZl
IGVtaXR0ZXIuIElmIHlvdQorICAgICMgd2FudCB0byBzZWUgdGhlIGNvZGUgbmljZWx5IGZvcm1h
dHRlZCwgb3BlbiBpdCBpbiBhIGdvb2QgdGV4dCBlZGl0b3IgYW5kIGFzayBpdCB0byBmb3JtYXQg
aXQKKyAgICAjIGZvciB5b3UuCisKKyAgICAjIEluIG9kZCBzaXR1YXRpb25zLCB3ZSBtYXkgbm90
IHVzZSB0aGUgaW5wdXQgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91
dCBpdC4KKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShfdmFsdWUpOyIKKyAgICAgICAgCisg
ICAgIyBUaGlzIGp1c3QgcHJvdGVjdHMgdGhlIGNhbGxlciBmcm9tIGhhdmluZyB0byB3b3JyeSBh
Ym91dCBwcm9kdWN0aW9ucyBoYXZpbmcgZGlmZmVyZW50IGxlbmd0aHMuCisgICAgZGVmIG1hdGNo
TGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIGluZGV4TGlzdHMg
PSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAg
fCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQg
cHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmNoaWxkcmVuLmxlbmd0aCA9PSBwcm9kdWN0
aW9uLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGlu
ZGV4CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5k
ZXhdCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4TGlzdHMuZWFj
aCB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBsZW5ndGggPSBwcm9k
dWN0aW9uc1tpbmRleExpc3RbMF1dLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgaWYgbGVu
Z3RoID4gMAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dmFsdWVOYW1lfS0+Y2hp
bGRyZW4uc2l6ZSgpID49ICN7bGVuZ3RofSkgeyIKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRl
eExpc3QKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICBlbmQKKyAgICAgICAg
fQorICAgIGVuZAorCisgICAgIyBUaGlzIGVmZmljaWVudGx5IHNlbGVjdHMgZnJvbSB0aGUgZ2l2
ZW4gc2V0IG9mIHByb2R1Y3Rpb25zLiBJdCBhc3N1bWVzIHRoYXQgcHJvZHVjdGlvbnMKKyAgICAj
IGFyZSBub3QgZHVwbGljYXRlZC4gSXQgeWllbGRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgcHJv
ZHVjdGlvbiwgYW5kIHRoZSBjb3JvdXRpbmUgaXMKKyAgICAjIHJlc3BvbnNpYmxlIGZvciBlbWl0
dGluZyBzcGVjaWZpYyBjb2RlIGZvciB0aGF0IHByb2R1Y3Rpb24uIFRoZSBjb3JvdXRpbmUgaXMg
Z2l2ZW4gbGlzdHMgb2YKKyAgICAjIGluZGljZXMgb2YgcG9zc2libHktbWF0Y2hpbmcgcHJvZHVj
dGlvbnMuCisgICAgZGVmIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0
aW9ucykKKyAgICAgICAgIyBGaXJzdCwgc3BsaXQgdGhlIHByb2R1Y3Rpb25zIGxpc3QgaW50byBy
dW5zIG9mIHByb2R1Y3Rpb25zIHdpdGggYW4gb3Bjb2RlIGFuZCBwcm9kdWN0aW9ucworICAgICAg
ICAjIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVj
dGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXgg
fAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlz
dHNbLTFdWzBdXS5oYXNPcGNvZGUgPT0gcHJvZHVjdGlvbi5oYXNPcGNvZGUKKyAgICAgICAgICAg
ICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0K
KyAgICAgICAgCisgICAgICAgICMgTm93LCBlbWl0IHBhdHRlcm4gbWF0Y2hpbmcgY29kZS4gV2Ug
ZG8gaXQgZGlmZmVyZW50bHkgZm9yIGxpc3RzIHdpdGggYW4gb3Bjb2RlIHRoYW4gZm9yCisgICAg
ICAgICMgbGlzdHMgd2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAg
ICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBpZiBwcm9kdWN0aW9uc1tpbmRleExp
c3RbMF1dLmhhc09wY29kZQorICAgICAgICAgICAgICAgICMgTm93LCB3ZSBzcGxpdCB0aGlzIGlu
ZGV4IGxpc3QgaW50byBncm91cHMgZm9yIGVhY2ggb3Bjb2RlLgorICAgICAgICAgICAgICAgIGdy
b3VwcyA9IHt9CisgICAgICAgICAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAg
ICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHByb2R1
Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBpZiBncm91cHNbcHJvZHVjdGlvbi5v
cGNvZGVdCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVd
IDw8IGluZGV4CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0gPSBbaW5kZXhdCisgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgRW1pdCBhIHN3
aXRjaCBzdGF0ZW1lbnQuCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7dmFs
dWVOYW1lfS0+b3Bjb2RlKCkpIHsiCisgICAgICAgICAgICAgICAgZ3JvdXBzLmVhY2hfcGFpciB7
CisgICAgICAgICAgICAgICAgICAgIHwgb3Bjb2RlLCBzdWJJbmRleExpc3QgfAorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgICAgICAgICAg
ICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoc3ViSW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5w
cm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAg
ICAgICAgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlz
dCkKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJk
ZWZhdWx0OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3Vi
TWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAg
ICAgICBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7
CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAg
eWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVuZAorCisgICAgIyBUYWtlcyBwcm9k
dWN0aW9ucyB0aGF0IGhhdmUgdGhlIHNhbWUgb3Bjb2RlIGFuZCB0aGUgc2FtZSBsZW5ndGggYW5k
IHNlbGVjdHMgZnJvbSB0aGVtIGJhc2VkIG9uCisgICAgIyB0aGUgcHJvZHVjdGlvbnMgYXQgdGhl
IGdpdmVuIGNvbHVtbi4KKyAgICBkZWYgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBwcm9k
dWN0aW9ucywgY29sdW1uSW5kZXgpCisgICAgICAgIGlmIGNvbHVtbkluZGV4ID49IHByb2R1Y3Rp
b25zWzBdLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgeWllbGQgKDAuLi4ocHJvZHVjdGlv
bnMuc2l6ZSkpLnRvX2EKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKworICAgICAg
ICBzdWJWYWx1ZSA9IG5ld1ZhcgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJ7IgorICAg
ICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3N1YlZhbHVlfSA9ICN7dmFsdWVOYW1lfS0+Y2hpbGQo
I3tjb2x1bW5JbmRleH0pOyIKKworICAgICAgICAjIFdlIG1heSBub3QgdXNlIHRoaXMgdmFsdWUu
IFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICAgICAgb3V0cC5w
dXRzICJVTlVTRURfUEFSQU0oI3tzdWJWYWx1ZX0pOyIKKyAgICAgICAgCisgICAgICAgIHN1YlBy
b2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMubWFwIHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiB8
CisgICAgICAgICAgICBwcm9kdWN0aW9uLmNoaWxkcmVuW2NvbHVtbkluZGV4XQorICAgICAgICB9
CisKKyAgICAgICAgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCBzdWJWYWx1ZSwgc3ViUHJvZHVjdGlv
bnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIHN1Yk1hdGNoID0g
U3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENv
bHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCAr
IDEpIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWll
bGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICBlbmQKKworICAgIGRlZiBtYXRjaFJl
Y3Vyc2l2ZWx5KG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIG1hdGNoUHJv
ZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBp
bmRleExpc3QgfAorICAgICAgICAgICAgIyBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoaXMgaW5k
ZXggbGlzdCBjb250YWlucyBwcm9kdWN0aW9ucyB3aXRoIHRoZSBzYW1lIG9wY29kZSBhbmQKKyAg
ICAgICAgICAgICMgdGhlIHNhbWUgbGVuZ3RoLgorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJN
YXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1u
KG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMsIDApIHsKKyAgICAgICAgICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5k
ZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGVuZAorCisg
ICAgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCAiX3ZhbHVlIiwgbWF0Y2hlci5wcm9kdWN0aW9ucykg
eworICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAg
ICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IG1hdGNoZXIucHJvZHVj
dGlvbnNbaW5kZXhdCisgICAgICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgICAgICBvdXRw
LnB1dHMgIlZhbHVlKiAje3Byb2R1Y3Rpb24udmFyTmFtZX0gPSBfdmFsdWU7IgorICAgICAgICAg
ICAgaW50ZXJuYWxBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9
IFtdCisgICAgICAgICAgICB0cnlBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgbnVtU2NvcGVz
ID0gMAorICAgICAgICAgICAgc2VlbiA9IHt9CisgICAgICAgICAgICBwcm9kdWN0aW9uLmVhY2hW
YXJpYWJsZSB7CisgICAgICAgICAgICAgICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5hbWUsIGNo
aWxkVmFyTmFtZSwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGxvYWRFeHByID0gIiN7
cGFyZW50VmFyTmFtZX0tPmNoaWxkKCN7aW5kZXh9KSIKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiBzZWVuW2NoaWxkVmFyTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgdG1w
ID0gbmV3VmFyCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7dG1wfSA9
ICN7bG9hZEV4cHJ9OyIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t0bXB9
ID09ICN7Y2hpbGRWYXJOYW1lfSkgeyIKKyAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9
IDEKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNlZW5bY2hpbGRW
YXJOYW1lXSA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiVmFsdWUqICN7Y2hpbGRWYXJOYW1lfSA9ICN7bG9hZEV4cHJ9OyIKKworICAg
ICAgICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0p
KSB7IgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3Bl
cyArPSAxCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtp
bmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAg
ICAgICBvcGVyYW5kQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5k
IG9yIGtpbmQgPT0gOmFub25PcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50
cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFu
ZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5w
dXRzICJpZiAoYWRhcHRvci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICBvdXRwLnB1
dHMoIiAgICAmJiBhZGFwdG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMu
am9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3Iu
YWNjZXB0T3BlcmFuZHMoIiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAg
ICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9
KCIgKyB0cnlBcmd1bWVudHMuam9pbigiLCAiKSArICIpKSIpCisgICAgICAgICAgICBvdXRwLnB1
dHMgIiAgICByZXR1cm47IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1
dHMgIn0iCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91
dHAucHV0cyAifSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5k
aWYgLy8gQjMje21hdGNoZXIubmFtZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyQXJnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQu
cHJpbnQodG1wKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91
dC5wcmludCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tUHRy
OgorICAgICAgICBvdXQucHJpbnRmKCIkMHgleCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0
LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmRleDoKKyAgICAgICAgaWYgKG9mZnNldCgpKQor
ICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
YmFzZSgpLCAiLCIsIGluZGV4KCkpOworICAgICAgICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgaWYgKG9mZnNldCgpKQor
ICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBv
aW50ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q2FsbEFyZzoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9m
ZnNldCk7CisgICAgICAgIG91dC5wcmludCgiKGNhbGxBcmcpIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIG91dC5wcmludCgiJiIsIHBvaW50ZXJEdW1wKHNw
ZWNpYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2luY2x1ZGUgIkFpclRt
cC5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFja1Nsb3Q7CisK
Ky8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3
ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3QoLi4uLCBB
cmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1
YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkgdGVyc2Ug
YmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtpbmQgOiBp
bnQ4X3QgeworICAgICAgICBUbXAsCisgICAgICAgIEltbSwKKyAgICAgICAgSW1tUHRyLAorICAg
ICAgICBBZGRyLAorICAgICAgICBTdGFjaywKKyAgICAgICAgQ2FsbEFyZywKKyAgICAgICAgSW5k
ZXgsCisgICAgICAgIFNwZWNpYWwKKyAgICB9OworCisgICAgZW51bSBSb2xlIDogaW50OF90IHsK
KyAgICAgICAgVXNlLAorICAgICAgICBEZWYsCisgICAgICAgIFVzZURlZgorICAgIH07CisKKyAg
ICBlbnVtIFR5cGUgOiBpbnQ4X3QgeworICAgICAgICBHUCwKKyAgICAgICAgRlAKKyAgICB9Owor
CisgICAgc3RhdGljIGJvb2wgaXNVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUg
cm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNh
c2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2Ug
SW50MzI6CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAg
ICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIEZQOworICAgICAgICB9CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gR1A7CisgICAgfQorCisg
ICAgQXJnKCkKKyAgICB7CisgICAgfQorCisgICAgQXJnKEFpcjo6VG1wIHRtcCkKKyAgICAgICAg
OiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFzZSh0bXApCisgICAgeworICAgIH0KKworICAg
IHN0YXRpYyBBcmcgaW1tKGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFy
ZyBpbW1QdHIoaW50cHRyX3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gSW1tUHRyOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2
YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGFk
ZHJlc3MoQWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICBy
ZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgc3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZhbHVlLCBpbnQzMl90IG9mZnNldCA9
IDApCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
U3RhY2s7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4o
dmFsdWUpOworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9mZnNldDsgLy8gSSBrbm93LCB5dWNr
LgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgY2FsbEFy
ZyhpbnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxp
ZFNjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgewor
ICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2FzZSA0OgorICAgICAg
ICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB1
bnNpZ25lZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
c2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIDQ6CisgICAgICAg
ICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIDM7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbmRl
eChBaXI6OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5zaWduZWQgc2NhbGUgPSAxLCBpbnQz
Ml90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAg
ICAgICBBU1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRTY2FsZShz
Y2FsZSkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW5k
ZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9pbmRl
eCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+
KHNjYWxlKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNpYWwq
IHNwZWNpYWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gU3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0PGlu
dHB0cl90PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5kID09
IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAg
ICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBtX3Nj
YWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJbW0o
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQorCisg
ICAgYm9vbCBpc0ltbVB0cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IEltbVB0cjsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAgYm9vbCBpc0luZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CisgICAgfQorCisgICAg
Ym9vbCBpc1NwZWNpYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBT
cGVjaWFsOworICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQor
CisgICAgaW50cHRyX3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBJbW0gfHwga2luZCgpID09IEltbVB0cik7CisgICAgICAgIHJldHVybiBtX29mZnNldDsK
KyAgICB9CisKKyAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBJbW1QdHIpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZv
aWQqPihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAg
ICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisKKyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoa2luZCgpID09IFN0YWNrKQorICAgICAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludDMyX3Q+KG1fc2NhbGUpOworICAgICAgICBBU1NFUlQoa2luZCgpID09
IEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdGFj
a1Nsb3QqIHN0YWNrU2xvdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09
IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTdGFja1Nsb3QqPihtX29mZnNl
dCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0K
KworICAgIHVuc2lnbmVkIHNjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBsb2dTY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2Nh
bGUoKSk7CisgICAgfQorCisgICAgQWlyOjpTcGVjaWFsKiBzcGVjaWFsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3BlY2lhbCk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaXNH
UFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQ
KCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlAoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbHMg
dXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEg
R1AgdmFsdWUuCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
a2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIEltbVB0cjoKKyAgICAg
ICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrU2xv
dDoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4g
aXNHUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBB
cmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgRlAgdmFsdWUuCisg
ICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIEltbVB0cjoKKyAgICAgICAgY2FzZSBTcGVj
aWFsOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZHI6CisgICAg
ICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgQmFzZToKKyAgICAgICAgY2FzZSBTdGFja1Ns
b3Q6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQVG1wKCk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBib29sIGhhc1R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNo
IChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgSW1tUHRyOgorICAg
ICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHR5cGUgaXMgYW1iaWd1b3VzIGZvciBzb21l
IGFyZyBraW5kcy4gQ2FsbCB3aXRoIGNhcmUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0dQKCkgPyBHUCA6IEZQOworICAgIH0KKworICAgIGJvb2wgaXNU
eXBlKFR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIGlzR1AoKTsKKyAgICAgICAgY2FzZSBG
UDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBi
b29sIGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgp
LmlzR1BSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gdG1wKCkuZ3ByKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQUigpOworICAgIH0KKwor
ICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwcigp
OworICAgIH0KKyAgICAKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc1RtcCgpICYmIHRtcCgpLmlzUmVnKCk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkucmVnKCk7CisgICAgfQorCisgICAgdW5z
aWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3BU
bXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkudG1wSW5k
ZXgoKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICBjYXNlIEFkZHI6Cisg
ICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGZ1
bmN0b3IobV9pbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzbWFy
dCBlbm91Z2ggdG8ga25vdyB0aGF0IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBy
dWxlIHdpbGwgdXNlIGl0cworICAgIC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhh
bXBsZSwgdGhpczoKKyAgICAvLworICAgIC8vIG1vdiAlcmF4LCAoJXJjeCkKKyAgICAvLworICAg
IC8vIFRoaXMgZGVmcyAoJXJjeCkgYnV0IHVzZXMgJXJjeC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChSb2xlIGFyZ1JvbGUsIFR5cGUgYXJnVHlw
ZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5k
KSB7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIGFyZ1Jv
bGUsIGFyZ1R5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWRkcjoKKyAg
ICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1Ap
OworICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4LCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdXQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkp
OworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1t
UHRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbVB0cigpKTsKKyAgICAgICAg
cmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXJWYWx1ZSgpKTsKKyAg
ICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhc0FkZHJlc3MoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzQWRkcigpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyOjpBZGRyZXNzKG1fYmFzZS5ncHIoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQp
KTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFzQmFzZUluZGV4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0luZGV4KCkpOworICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgIG1fYmFzZS5ncHIoKSwgbV9p
bmRleC5ncHIoKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlNjYWxlPihsb2dTY2FsZSgp
KSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50
cHRyX3QgbV9vZmZzZXQgeyAwIH07CisgICAgS2luZCBtX2tpbmQgeyBJbW0gfTsKKyAgICBpbnQz
Ml90IG1fc2NhbGUgeyAxIH07CisgICAgQWlyOjpUbXAgbV9iYXNlOworICAgIEFpcjo6VG1wIG1f
aW5kZXg7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBBaXJBcmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2lj
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRl
eCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6XG4iKTsKKyAgICBmb3IgKGNvbnN0
IEluc3QmIGluc3QgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxu
Iik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpckJhc2ljQmxvY2tfaAorI2RlZmluZSBBaXJCYXNpY0Js
b2NrX2gKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK2NsYXNzIEJhc2ljQmxv
Y2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJl
Zml4ID0gIiMiOworCisgICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7CisgICAgdHlw
ZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFN1Y2Nlc3Nvckxpc3Q7CisgICAgCisgICAgdW5z
aWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgSW5zdExp
c3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5z
dExpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKyAgICBJbnN0
TGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmJlZ2lu
KCk7IH0KKyAgICBJbnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0cy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2lu
c3RzLnNpemUoKTsgfQorICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsgcmV0
dXJuIG1faW5zdHNbaW5kZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9pbnN0
cy5sYXN0KCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBhcHBl
bmRJbnN0KEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpm
b3J3YXJkPEluc3Q+KGluc3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAg
IHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihh
cmd1bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBjYXNl
IHRvIHdoaWNoIHRoZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIxIiBj
YXNlIGlzIHRoZQorICAgIC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNlbnQg
dGhlIGZhbGwtdGhyb3VnaCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25lZCBu
dW1TdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9z
dWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNz
b3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsg
fQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNb
aW5kZXhdOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lk
IGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIENvZGU7CisgICAgCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICB7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBJbnN0TGlzdCBtX2luc3RzOworICAg
IFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tE
dW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2sp
CisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAg
ICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9j
ayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckJhc2ljQmxv
Y2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6OkNDYWxsU3Bl
Y2lhbCgpCisgICAgOiBTcGVjaWFsKCJDQ2FsbCIpOworeworICAgIG1fY2xvYmJlcmVkUmVncyA9
IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVk
ZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgbV9j
bG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
Cit9CisKK0NDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgQ0NhbGxT
cGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpF
YWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0s
IEFyZzo6VXNlLCBBcmc6OkdQKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwg
aW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIEZvciB0aGUgdHlwZSwgd2UgY2Fu
IGp1c3QgcXVlcnkgdGhlIGFyZydzIHR5cGUuIFRoZSBhcmcgd2lsbCBoYXZlIGEgdHlwZSwgYmVj
YXVzZSB3ZQorICAgICAgICAvLyByZXF1aXJlIHRoZXNlIGFyZ3MgdG8gYmUgYXJndW1lbnQgcmVn
aXN0ZXJzLgorICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbaV0sIEFyZzo6VXNlLCBpbnN0LmFy
Z3NbaV0udHlwZSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjppc1ZhbGlkKElu
c3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNl
IEFyZzo6SW1tUHRyOgorICAgIGNhc2UgQXJnOjpUbXA6CisgICAgY2FzZSBBcmc6OkFkZHI6Cisg
ICAgY2FzZSBBcmc6OlN0YWNrOgorICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICBicmVh
azsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KCFpbnN0LmFyZ3NbMV0uaXNHUCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlm
ICghaW5zdC5hcmdzW2ldLmlzUmVnKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgaWYgKGluc3QuYXJnc1tpXSA9PSBUbXAoc2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAgICAg
ICAgIHJldHVybiAgZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIEND
YWxsU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAg
IC8vIEFyZyAxIGNhbiBiZSBhIHN0YWNrIGFkZHJlc3MgZm9yIHN1cmUuCisgICAgaWYgKGFyZ0lu
ZGV4ID09IDEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0
IFJlZ2lzdGVyU2V0JikKK3sKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lhbDo6
Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgc3dpdGNoIChp
bnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbVB0cjoKKyAgICAgICAgaml0
Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGluc3QuYXJnc1sxXS5wb2ludGVyVmFs
dWUoKSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rl
cik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGppdC5jYWxs
KGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRy
OgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgp
OworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJl
Z3MoKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVj
aWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoImZ1bmN0aW9uIGNhbGwgdGhhdCB1c2VzIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4iKTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDQ2FsbFNwZWNpYWxfaAorI2RlZmluZSBBaXJDQ2Fs
bFNwZWNpYWxfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKKy8vIFVzZSB0aGlzIHNwZWNpYWwgZm9yIGNvbnN0cnVjdGluZyBhIEMgY2FsbC4gQXJn
IDAgaXMgb2YgY291cnNlIGEgU3BlY2lhbCBhcmcgdGhhdCByZWZlcnMgdG8gdGhlCisvLyBDQ2Fs
bFNwZWNpYWwgb2JqZWN0LiBBcmcgMSBpcyB0aGUgY2FsbGVlLCBhbmQgaXQgY2FuIGJlIGFuIElt
bVB0ciwgYSByZWdpc3Rlciwgb3IgYW4gYWRkcmVzcy4gVGhlCisvLyByZW1haW5pbmcgYXJncyBh
cmUganVzdCB0aGUgc2V0IG9mIGFyZ3VtZW50IHJlZ2lzdGVycyB1c2VkIGJ5IHRoaXMgY2FsbC4g
Rm9yIGFyZ3VtZW50cyB0aGF0IGdvIHRvCisvLyB0aGUgc3RhY2ssIHlvdSBoYXZlIHRvIGRvIHRo
ZSBncnVudCB3b3JrIG9mIGRvaW5nIHRob3NlIHN0YWNrIHN0b3Jlcy4gSW4gZmFjdCwgdGhlIG9u
bHkgcmVhc29uIHdoeQorLy8gd2Ugc3BlY2lmeSB0aGUgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGFy
Z3VtZW50cyB0byBhIGNhbGwgaXMgc28gdGhhdCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgY2FuIHNl
ZQorLy8gdGhhdCB0aGV5IGdldCB1c2VkIGhlcmUuIEl0IHdvdWxkIGJlIHdyb25nIHRvIGF1dG9t
YWdpY2FsbHkgcmVwb3J0IGFsbCBhcmd1bWVudCByZWdpc3RlcnMgYXMgYmVpbmcKKy8vIHVzZWQg
YmVjYXVzZSBpZiB3ZSBoYWQgYSBjYWxsIHRoYXQgZGlkbid0IHBhc3MgdGhlbSwgdGhlbiB0aGV5
J2QgYXBwZWFyIHRvIGJlIGxpdmUgdW50aWwgc29tZQorLy8gY2xvYmJlciBwb2ludCBvciB0aGUg
cHJvbG9ndWUsIHdoaWNoZXZlciBoYXBwZW5lZCBzb29uZXIuCisKK2NsYXNzIENDYWxsU3BlY2lh
bCA6IHB1YmxpYyBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDQ2FsbFNwZWNpYWwoKTsKKyAgICB+
Q0NhbGxTcGVjaWFsKCk7CisKKyAgICAvLyBZb3UgY2Fubm90IHVzZSB0aGlzIHJlZ2lzdGVyIHRv
IHBhc3MgYXJndW1lbnRzLiBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIHJlZ2lzdGVyIGlz
IG5vdAorICAgIC8vIHVzZWQgZm9yIGFyZ3VtZW50cyBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnRp
b24uIEJ5IHRoZSB3YXksIHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYXVzZXMKKyAgICAv
LyB0aGlzIHNwZWNpYWwgdG8gYmUgc3BlY2lmaWMgdG8gQyBjYWxscy4KKyAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHNjcmF0Y2hSZWdpc3RlciA9IEdQUkluZm86Om5vbkFyZ0dQUjAuCisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEluc3QmKSBv
dmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkg
b3ZlcnJpZGU7CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdp
c3RlclNldCYpIG92ZXJyaWRlOworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0
JiwgQ0NhbGxIZWxwZXJzJikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJh
Q2xvYmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkZWVwRHVtcElt
cGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZWdpc3Rl
clNldCBtX2Nsb2JiZXJlZFJlZ3M7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBBaXJDQ2FsbFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKK3sKK30KKworQ29k
ZTo6fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jaygpCit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tz
LnNpemUoKSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1f
YmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIENvZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9j
aykpOworICAgIGlmIChudW1TdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTdGFj
ayBzbG90czpcbiIpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IHN0YWNrU2xvdHMo
KSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNsb3QpLCAiXG4iKTsK
KyAgICB9CisgICAgaWYgKG51bVNwZWNpYWxzKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTcGVj
aWFsczpcbiIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFscygpKQor
ICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCksICJcbiIpOwor
ICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyQ29kZV9oCisjZGVmaW5lIEFpckNvZGVfaAorCisjaW5jbHVkZSAiQWlyQmFzaWNC
bG9jay5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3Qu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsK
KworbmFtZXNwYWNlIEFpciB7CisKKy8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3Nl
IHRvIHRoZSBiYXJlIG1ldGFsLiBJdCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFu
IHRoZQorLy8gZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSAtIGZvciBleGFtcGxlIGlmIHlvdSdyZSBn
ZW5lcmF0aW5nIDFNQiBvZiBtYWNoaW5lIGNvZGUsIHlvdSBuZWVkIGFib3V0CisvLyA0ME1CIG9m
IEFpci4KKworY2xhc3MgQ29kZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29kZSk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ29kZSgpOworICAgIH5D
b2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jaygpOworCisgICAgU3RhY2tTbG90KiBh
ZGRTdGFja1Nsb3QoKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRy
PFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8gbWFr
ZSBhIEMgY2FsbCEKKyAgICBTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVy
YXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6CisgICAg
ICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2Vk
dXJlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9wcm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAg
aXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0g
ZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRl
eDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5l
eHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8
IG1fcHJvY2VkdXJlLT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisgICAgICAg
ICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmV4OworICAgICAgICB9CisK
KyAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgbnVtQmxvY2tzKCkpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxT
cGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBTcGVjaWFsKiBtX2NhbGxTcGVjaWFsOworfTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgor
CisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zdDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChvcGNvZGUsICIg
IiwgbGlzdER1bXAoYXJncyksICIgIDsgIiwgKm9yaWdpbik7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RfaAorI2RlZmluZSBB
aXJJbnN0X2gKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpck9wY29kZS5oIgor
CituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMg
eworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBJbnN0IHsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJbnN0KE9w
Y29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgICAgIDogb3JpZ2luKG9yaWdpbikKKyAg
ICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9y
aWdpbiwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzeyBh
cmcsIGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBv
cGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZh
bHVlKiBvcmlnaW4sIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzKGFy
Z3VtZW50cykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNv
ZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdp
biwgQXJnTGlzdCYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzKFdURjo6bW92ZShhcmd1bWVu
dHMpKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkK
KyAgICB7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3JzIGFsbCBhdm9p
ZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBmb3IgdGhpbmdzIHRo
YXQKKyAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlmIHlvdSdyZSBj
YXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4geW91J3JlCisgICAgLy8gcHJvYmFi
bHkgZG9pbmcgaXQgd3JvbmcuCisKKyAgICAvLyBUaGlzIG9ubHkgd2Fsa3MgdGhvc2UgVG1wcyB0
aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCwgYW5kIGl0IGRvZXNuJ3QgdGVsbCB5b3UgdGhl
aXIgcm9sZQorICAgIC8vIG9yIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICBmb3IgKEFyZyBhcmcgOiBhcmdzKQorICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBG
YXN0KGZ1bmN0b3IpOworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCBFYWNoQXJnQ2FsbGJhY2so
QXJnJiwgQXJnOjpSb2xlLCBBcmc6OlR5cGUpOworICAgIAorICAgIC8vIENhbGxzIHRoZSBmdW5j
dG9yIHdpdGggKGFyZywgcm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0
ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOwor
CisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xlLCB0eXBlKS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZ1JvbGUoCisgICAgICAgICAg
ICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAg
ICAgICAgICAgICBhcmcuZm9yRWFjaFRtcChyb2xlLCB0eXBlLCBmdW5jdG9yKTsKKyAgICAgICAg
ICAgIH0pOworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9u
IGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9ja3Mgc29tZSBleHRyYSBmdW5jdGlvbmFsaXR5Lgor
ICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0OworCisgICAgLy8gUmVwb3J0cyBhbnkgYWRkaXRp
b25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgZm9y
IGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBo
YXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNs
b2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVzZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3Rl
cnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90
ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5
IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgdm9pZCByZXBvcnRVc2Vk
UmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7CisKKyAgICAvLyBJcyB0aGlzIGluc3RydWN0
aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9ybXMgcmlnaHQgbm93PyBUaGlzIGZ1bmN0aW9uIGlz
IGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29s
IGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBBc3N1bWluZyB0aGlzIGluc3RydWN0aW9uIGlzIGlu
IGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdpbGwgaXQgc3RpbGwgYmUgaW4gb25lIG9mIHRoZSB2
YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1dCBhbiBBZGRyIHJlZmVyZW5jaW5nIHRoZSBzdGFj
ayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFyZywgb2YgY291cnNlKSBpbiB0aGUKKyAgICAvLyBn
aXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRl
eCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNwaWxsaW5nOworICAgIC8vIGlmIGl0IGZpbmRzIG9u
ZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYgaXQgY2FuIHJlcGxhY2UgdGhlIEFyZzo6VG1wIHdp
dGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAgIC8vIGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4g
aXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNoVG1wIHRvIGRvIGEgcmVwbGFjZW1lbnQgdGhhdCB3
YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9w
Y29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBhZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRl
eCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRo
aXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIgYmFja2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAv
LyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUganVtcCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBm
b3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRoZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZh
bGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2Vu
ZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMm
KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgQXJnTGlzdCBh
cmdzOworICAgIFZhbHVlKiBvcmlnaW47IC8vIFRoZSBCMzo6VmFsdWUgdGhhdCB0aGlzIG9yaWdp
bmF0ZWQgZnJvbS4KKyAgICBPcGNvZGUgb3Bjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gKKyNkZWZpbmUgQWlySW5zdElubGlu
ZXNfaAorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgi
CisjaW5jbHVkZSAiQWlyU3BlY2lhbHMuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2Jvb2wgSW5zdDo6aGFzU3BlY2lhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGFyZ3Muc2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7Cit9CisKK2NvbnN0IFJlZ2lzdGVy
U2V0JiBJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBhcmdzWzBdLnNw
ZWNpYWwoKS0+ZXh0cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsKK30KKwordm9pZCBJbnN0OjpyZXBv
cnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAg
IGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0ZXJzKCp0aGlzLCB1c2VkUmVnaXN0
ZXJzKTsKK30KKworaW5saW5lIGJvb2wgaXNTaGlmdFZhbGlkKEluc3QmIGluc3QpCit7CisjaWYg
Q1BVKFg4NikKKyAgICByZXR1cm4gaW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3Rlcjo6Y3gp
OworI2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfSAgIAorCitpbmxpbmUgYm9vbCBp
c0xzaGlmdDMyVmFsdWUoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNTaGlmdFZhbGlkKGlu
c3QpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBB
aXJJbnN0SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDcg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgU3lsbGFidXM6Cisj
CisjIFJvbGVzIGFuZCB0eXBlczoKKyMgVTpHID0+IHVzZSBvZiBhIGdlbmVyYWwtcHVycG9zZSBy
ZWdpc3RlciBvciB2YWx1ZQorIyBEOkcgPT4gZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lz
dGVyIG9yIHZhbHVlCisjIFVEOkcgPT4gdXNlIGFuZCBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2Ug
cmVnaXN0ZXIgb3IgdmFsdWUKKyMgVTpGID0+IHVzZSBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZh
bHVlCisjIEQ6RiA9PiBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpGID0+
IHVzZSBhbmQgZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMKKyMgQXJndW1lbnQg
a2luZHM6CisjIFRtcCA9PiB0ZW1wb3Jhcnkgb3IgcmVnaXN0ZXIKKyMgSW1tID0+IDMyLWJpdCBp
bW1lZGlhdGUgaW50CisjIEltbVB0ciA9PiBUcnVzdGVkSW1tUHRyCisjIEFkZHIgPT4gYWRkcmVz
cyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJhc2VJbmRleCBhZGRy
ZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhlIHBhcnNlciB2aWV3cyB0aGVz
ZSB0aGluZ3MgYXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0aGF0IHRoZXkgZmFsbCBpbnRv
IHR3byBkaXN0aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28sIGFsdGhvdWdoIHRoaXMgZmls
ZSB1c2VzIGEgcGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwgbm9uZSBvZiB0aGUgd2hpdGVz
cGFjZSBvcgorIyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBwYXJzZXIuIEZv
ciBleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQyIFU6RywgVUQ6RiBJbW0sIFRt
cCBBZGRyLCBUbXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQga25vdyB0aGF0IHRoaXMgaXMg
dGhlIHNhbWUgYXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAgICAgSW1tLCBUbXAKKyMgICAg
IEFkZHIsIFRtcAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1Y3Rpb24gdGhhdCB1c2VzIGEg
R1BSIG9yIGFuIGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBhIGZsb2F0IHJlZ2lzdGVyLgor
CisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBsZWFkaW5nIGNhcGl0YWwgKEFk
ZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1ibGVyCisjIEFQSSB0aGF0IGhh
cyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitBZGQzMiBVOkcsIFVEOkcKKyAgICBU
bXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgVG1wCisgICAgQWRkciwgVG1wCisgICAg
VG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRtcCwgVG1wCisKK0Fu
ZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBUbXAsIEFkZHIK
KyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisgICAg
VG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAK
KyAgICBBZGRyLCBUbXAKKworTW92ZSBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBU
bXAKKyAgICBJbW1QdHIsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkICMgVGhpcyBtZWFucyB0
aGF0ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMgImxvYWQiIG5vdCAibW92
ZSIuCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlCisKK01vdmVEb3VibGUgVTpGLCBEOkYKKyAgICBU
bXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgVG1wLCBBZGRyIGFzIHN0
b3JlRG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1wLCBUbXAKKworTW92
ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAorCitSZXQKKworIyBBaXIgYWxsb3dz
IGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVu
dGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0
IG9wZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK1NwZWNpYWw6OlNwZWNpYWwoY29uc3Qg
Y2hhciogbmFtZSkKKyAgICA6IG1fbmFtZShuYW1lKQorICAgICwgbV9pbmRleChVSU5UX01BWCkK
K3sKK30KKworU3BlY2lhbDo6flNwZWNpYWwoKQoreworfQorCit2b2lkIFNwZWNpYWw6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9uYW1lKTsKKyAgICBp
ZiAobV9pbmRleCAhPSBVSU5UX01BWCkKKyAgICAgICAgb3V0LnByaW50KG1faW5kZXgpOworfQor
Cit2b2lkIFNwZWNpYWw6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCp0aGlzLCAiOiAiKTsKKyAgICBkZWVwRHVtcEltcGwob3V0KTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNwZWNpYWxfaAorCisjaW5jbHVkZSAiQWlySW5zdC5o
IgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWwgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNwZWNpYWwpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFNwZWNpYWwoY29uc3QgY2hhciogbmFtZSk7CisgICAgdmlydHVhbCB+U3Bl
Y2lhbCgpOworCisgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQorCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJk
YTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlk
KEluc3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25l
ZCBhcmdJbmRleCkgPSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCBvbiBmb3IgZWFjaCBJ
bnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8K
KyAgICAvLyBndWFyYW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2VkIGZyb20ganVzdCBvbmUg
SW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywKKyAgICAvLyBpZiB5b3Ug
d2FudCB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5lcmF0ZSgpLCB0aGVuIHlv
dSBoYXZlIHRvIGVpdGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVyYXRlIEFpciB0aGF0IHN0
YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5zdCwgYW5kIHRoZW4gbWVy
Z2UKKyAgICAvLyAgICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBwcm9iYWJseSBub3QgZ3Jl
YXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0aGF0CisgICAgLy8gICAg
QWlyIGRpZG4ndCBkdXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVwbGljYXRpb24gZGlkbid0
IGNhdXNlIGFueSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8gICAgcmVnaXN0ZXIgYXNz
aWdubWVudC4KKyAgICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNpYWwgbWFpbnRhaW4gYSBI
YXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYW5hbHlz
aXMKKyAgICAvLyAgICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlzIHBlcmZvcm1lZCBqdXN0
IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdheQorICAgIC8vICAgIGZv
ciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRvIGJlIHJlYWxsb2NhdGVk
LiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29uc3VsdCB0aGUgSGFzaE1h
cC4KKyAgICAvLworICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVzZSAoMSkgYW5kIGZpcmUg
dXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisgICAgdmlydHVhbCB2b2lk
IHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAg
IAorICAgIHZpcnR1YWwgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhl
bHBlcnMmKSA9IDA7CisgICAgCisgICAgdmlydHVhbCBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFD
bG9iYmVyZWRSZWdzKEluc3QmKSA9IDA7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3Byb3RlY3Rl
ZDoKKyAgICB2aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAw
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgY29uc3QgY2hhciog
bV9uYW1lOworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3BlY2lhbER1
bXAgeworcHVibGljOgorICAgIERlZXBTcGVjaWFsRGltcChTcGVjaWFsKiBzcGVjaWFsKQorICAg
ICAgICA6IG1fc3BlY2lhbChzcGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NwZWNpYWwpCisg
ICAgICAgICAgICBtX3NwZWNpYWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFNwZWNp
YWwqIG1fc3BlY2lhbDsKK307CisKK0RlZXBTcGVjaWFsRHVtcCBkZWVwRHVtcChTcGVjaWFsKiBz
cGVjaWFsKQoreworICAgIHJldHVybiBEZWVwU3BlY2lhbER1bXAoc3BlY2lhbCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclNwZWNpYWxfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTdGFja1Nsb3RfaAorI2RlZmluZSBB
aXJTdGFja1Nsb3RfaAorCisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFN0YWNrU2xvdHZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3RhY2tTbG90
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGFja1Nsb3QpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQorCisgICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9p
ZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBDb2RlOworCisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBp
bmRleCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fYnl0ZVNpemUoYnl0ZVNp
emUpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICB1bnNpZ25l
ZCBtX2luZGV4OworICAgIFN0YWNrU2xvdFZhbHVlKiBtX3ZhbHVlOworfTsKKworY2xhc3MgRGVl
cFN0YWNrU2xvdER1bXAgeworcHVibGljOgorICAgIERlZXBTdGFja1Nsb3REdW1wKFN0YWNrU2xv
dCogc2xvdCkKKyAgICAgICAgOiBtX3Nsb3Qoc2xvdCkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zbG90
KQorICAgICAgICAgICAgbV9zbG90LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdGFj
a1Nsb3QqIG1fc2xvdDsKK307CisKK0RlZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1wKFN0YWNrU2xv
dCogc2xvdCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAoc2xvdCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBU
bXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7Cisg
ICAgICAgIG91dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoaXNSZWcoKSkgeworICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGlzR1BUbXAoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0
bXAiLCBncFRtcEluZGV4KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnBy
aW50KCIlZnRtcCIsIGZwVG1wSW5kZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNp
bmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCisvLyBBIFRtcCBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIGEgcmVnaXN0ZXIuIEl0
IGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIGFueSBHUFIgb3IgRlBSLiBJdCBjYW4gYWxzbworLy8g
YmUgdXNlZCB0byByZWZlciB0byBhbiB1bmFsbG9jYXRlZCByZWdpc3RlciAoaS5lLiBhIHRlbXBv
cmFyeSkuIExpa2UgbWFueSBBaXIgY2xhc3Nlcywgd2UgdXNlCisvLyBkZWxpYmVyYXRlbHkgdGVy
c2UgbmFtaW5nIHNpbmNlIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhpcyBuYW1lIGEgbG90LgorCitj
bGFzcyBUbXAgeworcHVibGljOgorICAgIFRtcCgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAg
IHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUbXAoUmVnIHJlZykKKyAgICB7CisgICAgICAgIGlm
IChyZWcpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBt
X3ZhbHVlID0gZW5jb2RlR1BSKHJlZy5ncHIoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUZQUihyZWcuZnByKCkpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZ3BUbXBG
b3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlR1BUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVl
ID0gZW5jb2RlRlBUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBUbXAgZm9yUmF3VmFsdWUodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGluZGV4OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKworICAgIGJvb2wgcmF3VmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisKKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQor
CisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVk
R1BSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlz
UmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0dQUigpIHx8IGlzRlBSKCk7Cisg
ICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVj
b2RlR1BSKG1fdmFsdWUpOworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGRlY29kZUZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVn
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4g
Z3ByKCk7CisgICAgICAgIHJldHVybiBmcHIoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRt
cEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVl
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBkZWNvZGVGUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0
bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAg
cmV0dXJuIGdwVG1wSW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorCisgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVu
c2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDEgKyBpbmRleDsKKyAgICB9CisK
KyAgICBzdGF0aWMgaW50IGVuY29kZUZQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIC0xIC0gaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFIoR1BS
UmVnIGdwcikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUChncHIgLSBNYWNyb0Fzc2Vt
Ymxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQ
UihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQKGZwciAtIE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdEZQUlJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQg
ZW5jb2RlR1BUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2Rl
R1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxICsgaW5kZXg7CisgICAgfQor
CisgICAgc3RhdGljIGludCBlbmNvZGVGUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0g
MSAtIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQKGludCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA+IDA7CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgaXNFbmNvZGVkRlAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
IDwgMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFIoaW50IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiB2YWx1ZSA8PSBlbmNv
ZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBpc0VuY29kZWRGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
RW5jb2RlZEZQKHZhbHVlKSAmJiB2YWx1ZSA+PSBlbmNvZGVkRlBSKE1hY3JvQXNzZW1ibGVyOjps
YXN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFRt
cChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYm
ICFpc0VuY29kZWRHUFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2Rl
ZEZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1
ZSkgJiYgIWlzRW5jb2RlZEZQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIEdQUlJlZyBk
ZWNvZGVHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQUih2
YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPigKKyAgICAgICAgICAg
ICh2YWx1ZSAtIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKSkgKyBN
YWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgRlBS
UmVnIGRlY29kZUZQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVk
RlBSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KAorICAgICAg
ICAgICAgKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpIC0gdmFs
dWUpICsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29kZUdQVG1wKGludCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4g
dmFsdWUgLSAoZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlRlBUbXAoaW50IHZhbHVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVy
biAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEpIC0gdmFs
dWU7CisgICAgfQorCisgICAgLy8gMDogZW1wdHkgVG1wCisgICAgLy8gcG9zaXRpdmU6IEdQUnMg
YW5kIHRoZW4gR1AgdGVtcHMuCisgICAgLy8gbmVnYXRpdmU6IEZQUnMgYW5kIHRoZW4gRlAgdGVt
cHMuCisgICAgaW50IG1fdmFsdWU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBBaXJUbXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzc0IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNv
ZGUKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnNwZWNpYWwsIDpvdmVybG9hZHMKKworICAgIGRl
ZiBpbml0aWFsaXplKG5hbWUsIHNwZWNpYWwpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAg
ICBAc3BlY2lhbCA9IHNwZWNpYWwKKyAgICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAg
IEBvdmVybG9hZHMgPSBbXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFt
ZQorICAgICAgICBuYW1lWzBdLmRvd25jYXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAor
CitjbGFzcyBBcmcKKyAgICBhdHRyX3JlYWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0
aWFsaXplKHJvbGUsIHR5cGUpCisgICAgICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9
IHR5cGUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpz
aWduYXR1cmUsIDpmb3JtcworCisgICAgZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykK
KyAgICAgICAgQHNpZ25hdHVyZSA9IHNpZ25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3Jtcwor
ICAgIGVuZAorZW5kCisKK2NsYXNzIEtpbmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0
dHJfYWNjZXNzb3IgOnNwZWNpYWwKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAg
IEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBk
ZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAg
QG5hbWUgPT0gb3RoZXIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIu
bmFtZSBhbmQgQHNwZWNpYWwgPT0gb3RoZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQK
KworICAgIGRlZiBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgICAgIGlmIGtpbmQgPT0gIkFkZHIi
CisgICAgICAgICAgICBbIkFkZHIiLCAiU3RhY2tTbG90IiwgIkNhbGxBcmciXQorICAgICAgICBl
bHNlCisgICAgICAgICAgICBba2luZF0KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYg
YXJnS2luZHMKKyAgICAgICAgS2luZC5hcmdLaW5kcyhraW5kKQorICAgIGVuZAorZW5kCisKK2Ns
YXNzIEZvcm0KKyAgICBhdHRyX3JlYWRlciA6a2luZHMsIDphbHROYW1lCisKKyAgICBkZWYgaW5p
dGlhbGl6ZShraW5kcywgYWx0TmFtZSkKKyAgICAgICAgQGtpbmRzID0ga2luZHMKKyAgICAgICAg
QGFsdE5hbWUgPSBhbHROYW1lCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0
cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXpl
KGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAg
ICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9f
cworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitj
bGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBk
ZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgor
ICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVy
KQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBv
dGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgor
ICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBz
dHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tA
c3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFy
c2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAg
IHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQK
KyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQ
YXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0g
MQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdo
ZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAg
IHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAg
bGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBKFthLXpBLVowLTlfXSspLworICAgICAg
ICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVy
KSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVz
cGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWyw6Kl0vCisgICAgICAgICAgICByZXN1bHQg
PDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhm
aWxlTmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4u
MjBdLmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAor
ICAgIGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc1VEKHRva2VuKQorICAgIHRva2VuID1+
IC9cQSgoVSl8KEQpfChVRCkpXFovCitlbmQKKworZGVmIGlzR0YodG9rZW4pCisgICAgdG9rZW4g
PX4gL1xBKChHKXwoRikpXFovCitlbmQKKworZGVmIGlzS2luZCh0b2tlbikKKyAgICB0b2tlbiA9
fiAvXEEoKFRtcCl8KEltbSl8KEltbVB0cil8KEFkZHIpfChJbmRleCkpXFovCitlbmQKKworZGVm
IGlzS2V5d29yZCh0b2tlbikKKyAgICBpc1VEKHRva2VuKSBvciBpc0dGKHRva2VuKSBvciBpc0tp
bmQodG9rZW4pIG9yCisgICAgICAgIHRva2VuID09ICJzcGVjaWFsIiBvciB0b2tlbiA9PSAiYXMi
CitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoW2EtekEt
WjAtOV9dKylcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2Vy
CisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBs
ZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYg
dG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UK
KyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1l
bnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAg
ICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTog
I3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKwor
ICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tz
dHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNlCisgICAgZW5k
CisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3Ry
aW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJ
ZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBl
bmQKKworICAgIGRlZiBjb25zdW1lUm9sZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcK
KyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgcm9sZSAoVSwgRCwgb3IgVUQpIikgdW5sZXNz
IGlzVUQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAor
CisgICAgZGVmIGNvbnN1bWVUeXBlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCB0eXBlIChHIG9yIEYpIikgdW5sZXNzIGlzR0YocmVz
dWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVm
IGNvbnN1bWVLaW5kCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJz
ZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEltbVB0ciwgVG1wLCBBZGRyLCBvciBJbmRleCki
KSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQK
KyAgICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICAK
KyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVu
Z3RoCisKKyAgICAgICAgICAgIGlmIHRva2VuID09ICJzcGVjaWFsIgorICAgICAgICAgICAgICAg
IGNvbnN1bWUoInNwZWNpYWwiKQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1l
SWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2Fk
IGEgc3BlY2lhbCBvcGNvZGUiKSBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKworICAgICAgICAgICAg
ICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgdHJ1ZSkKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50
aWZpZXIKKworICAgICAgICAgICAgICAgIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAg
ICAgICAgICAgICBvcGNvZGUgPSByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAg
ICAgcGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBpZiBvcGNv
ZGUuc3BlY2lhbAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3Bj
b2RlID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCBmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0W29wY29kZU5hbWVdID0gb3Bjb2RlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAg
ICAgICAgICAgICBzaWduYXR1cmUgPSBbXQorICAgICAgICAgICAgICAgIGZvcm1zID0gW10KKyAg
ICAgICAgICAgICAgICBpZiBpc1VEKHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSBjb25zdW1lUm9sZQorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3VtZSgiOiIpCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0g
Y29uc3VtZVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgc2lnbmF0dXJlIDw8IEFyZy5uZXcocm9sZSwgdHlwZSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIs
IgorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGtpbmRzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBuaWwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtpbmRzIDw8IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgdG9rZW4gPT0gIioiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IoIkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5sZXNzIGtpbmRzWy0xXS5uYW1l
ID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzWy0xXS5zcGVj
aWFsID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIqIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gImFzIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoImFzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0g
Y29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3cm9uZyBudW1iZXIgb2YgYXJn
dW1lbnRzIGZvciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5ndGggPT0gc2lnbmF0dXJlLmxl
bmd0aAorICAgICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Iga2luZC5uYW1lID09ICJJbW1Q
dHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0u
cm9sZSAhPSAiVSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tdXNlIGFyZ3VtZW50IikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0udHlwZSAhPSAiRyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3Ig
YSBub24tZ2VuZXJhbC1wdXJwb3NlIGFyZ3VtZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtcyA8PCBGb3JtLm5l
dyhraW5kcywgYWx0TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyBp
c0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAgICAgICAgICAgICAgICAg
IGZvcm1zID0gW0Zvcm0ubmV3KFtdLCBuaWwpXQorICAgICAgICAgICAgICAgIGVuZAorCisgICAg
ICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9hZC5uZXcoc2lnbmF0dXJlLCBm
b3JtcykKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0CisgICAg
ZW5kCitlbmQKKworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElP
OjpyZWFkKCRmaWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVzID0gcGFyc2VyLnBhcnNlCisK
K2RlZiB3cml0ZUgoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5oIiwg
InciKSB7CisgICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIi8v
IEdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5hbWV9IC0tIGRv
IG5vdCBlZGl0ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2lmbmRlZiBBaXIje2Zp
bGVuYW1lfV9oIgorICAgICAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQWlyI3tmaWxlbmFtZX1faCIK
KworICAgICAgICB5aWVsZCBvdXRwCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNlbmRp
ZiAvLyBBaXIje2ZpbGVuYW1lfV9oIgorICAgIH0KK2VuZAorCitkZWYgd3JpdGVDUFAoZmlsZW5h
bWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5jcHAiLCAidyIpIHsKKyAgICAgICAg
fCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9w
Y29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAg
ICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcImNvbmZpZy5oXCIiCisgICAgICAg
IG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXIje2ZpbGVuYW1lfS5oXCIiCisKKyAgICAgICAgeWll
bGQgb3V0cAorICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZSIpIHsKKyAgICB8IG91dHAgfAor
ICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeyIKKyAgICBvdXRwLnB1dHMgImVudW0gT3Bjb2RlIDogaW50MTZfdCB7IgorICAgICRvcGNv
ZGVzLmtleXMuc29ydC5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1
dHMgIiAgICAje29wY29kZX0sIgorICAgIH0KKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRw
LnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1PcGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlz
LnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIi
CisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJj
bGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7IgorICAgIG91dHAucHV0cyAifSAvLyBu
YW1lc3BhY2UgV1RGIgorfQorCit3cml0ZUNQUCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8Cisg
ICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcInd0Zi9QcmludFN0cmVhbS5oXCIiCisgICAgb3V0cC5w
dXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJ1c2luZyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRz
ICIgICAgc3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMua2V5cy5lYWNoIHsKKyAgICAg
ICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICBjYXNlICN7b3Bjb2RlfToiCisg
ICAgICAgIG91dHAucHV0cyAiICAgICAgICBvdXQucHJpbnQoXCIje29wY29kZX1cIik7IgorICAg
ICAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICIg
ICAgfSIKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIK
KyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9
CisKKyMgRnJvbSBoZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1pdCBwcm9wZXJseSBpbmRlbnRl
ZCBjb2RlLCBzaW5jZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuCisjIG1hdGNoZXIu
CisKK2RlZiBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXgsIGNvbHVt
bkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICByZXR1cm4gaWYgZm9ybXMubGVuZ3RoID09
IDAKKworICAgIGlmIGZpbHRlcltmb3Jtc10KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAg
ICBpZiBjb2x1bW5JbmRleCA+PSBmb3Jtc1swXS5raW5kcy5sZW5ndGgKKyAgICAgICAgcmFpc2Ug
dW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAxCisgICAgICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQorICAg
ICAgICByZXR1cm4KKyAgICBlbmQKKyAgICAKKyAgICBncm91cHMgPSB7fQorICAgIGZvcm1zLmVh
Y2ggeworICAgICAgICB8IGZvcm0gfAorICAgICAgICBraW5kID0gZm9ybS5raW5kc1tjb2x1bW5J
bmRleF0ubmFtZQorICAgICAgICBpZiBncm91cHNba2luZF0KKyAgICAgICAgICAgIGdyb3Vwc1tr
aW5kXSA8PCBmb3JtCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA9IFtm
b3JtXQorICAgICAgICBlbmQKKyAgICB9CisKKyAgICBpZiBzcGVlZCA9PSA6ZmFzdCBhbmQgZ3Jv
dXBzLmxlbmd0aCA9PSAxCisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBj
b2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAg
cmV0dXJuCisgICAgZW5kCisKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tjb2x1bW5HZXR0ZXJb
Y29sdW1uSW5kZXhdfSkgeyIKKyAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgfCBrZXks
IHZhbHVlIHwKKyAgICAgICAgS2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAgICAg
fCBhcmdLaW5kIHwKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06
IgorICAgICAgICB9CisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1
bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisKK2RlZiBtYXRjaEluc3RP
dmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0
fS0+b3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNv
ZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBp
ZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKChvcGNvZGUub3ZlcmxvYWRz
LnNpemUgIT0gMSkgb3Igc3BlZWQgPT0gOnNhZmUpCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3
aXRjaCAoI3tpbnN0fS0+YXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAg
ICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJs
b2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1
cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIHlpZWxk
IG9wY29kZSwgb3ZlcmxvYWQKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYg
bmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkT3Zl
cmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
fSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisgICAgCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRG
b3JtKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVk
LCBpbnN0KSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29k
ZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbCwgbmlsCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgIHwg
Y29sdW1uSW5kZXggfAorICAgICAgICAgICAgICAgICIje2luc3R9LT5hcmdzWyN7Y29sdW1uSW5k
ZXh9XS5raW5kKCkiCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsg
ZmFsc2UgfQorICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8
IGZvcm0gfAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIG92ZXJsb2Fk
LmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIGVuZAor
ICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZVV0aWxzIikgeworICAgIHwgb3V0cCB8CisgICAg
b3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3QuaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICAKKyAgICBvdXRw
LnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBJ
bnN0Ojpmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIgorICAgIG91dHAucHV0cyAi
eyIKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAg
IHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAg
ICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1swXSwgQXJnOjpVc2UsIEFyZzo6R1ApOyAvLyBU
aGlzIGlzIGJhc2ljYWxseSBib2d1cywgYnV0IGl0IHdvcmtzIGYgYW5hbHlzZXMgbW9kZWwgU3Bl
Y2lhbCBhcyBhbiBpbW1lZGlhdGUuIgorICAgICAgICAgICAgb3V0cC5wdXRzICJhcmdzWzBdLnNw
ZWNpYWwoKS0+Zm9yRWFjaEFyZygqdGhpcywgc2NvcGVkTGFtYmRhPEVhY2hBcmdDYWxsYmFjaz4o
ZnVuY3RvcikpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJl
LmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICByb2xlID0gbmlsCisgICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQorICAg
ICAgICAgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgor
ICAgICAgICAgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVm
IgorICAgICAgICAgICAgICAgIHdoZW4gIlVEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0g
IlVzZURlZiIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJhaXNl
CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7cm9sZX0sIEFyZzo6I3th
cmcudHlwZX1QKTsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRw
LnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyIgorfQorCit3cml0ZUNQUCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAg
ICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdElubGluZXMuaFwiIgorICAgIG91dHAucHV0
cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBv
dXRwLnB1dHMgImlubGluZSBib29sIGhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAg
ICBvdXRwLnB1dHMgIiNkZWZpbmUgUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRz
ICIgICAgaWYgKGhpZGRlblRydXRoKCkpXFwiCisgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVy
biB2YWx1ZTtcXCIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6
OmlzVmFsaWRGb3JtKCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2Fk
Rm9ybShvdXRwLCA6c2FmZSwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwg
Zm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmIChhcmdzLnNpemUoKSA8IDEpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFs
c2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgor
ICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5w
dXRzICJSRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAgICAg
ICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBp
bmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0u
cm9sZQorICAgICAgICAgICAgICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5
cGUKKyAgICAgICAgICAgICAgICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAgICAg
ICAgICBuZWVkc01vcmVWYWxpZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hl
cy4gV2UgZG9uJ3QgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAgICAg
ICAgICAjIGtpbmQgaW1wbGllcyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2YWxp
ZGF0ZSBpcyB0aGUgdHlwZS4gQW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8g
dmFsaWRhdGUgdGhlIHR5cGUgaWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBpZiBr
aW5kLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFy
Z3NbI3tpbmRleH1dLnRtcCgpLmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJpZiAoIWlzI3tvcGNvZGUubmFtZX1WYWxpZCh0aGlzKSkiCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJSRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgb3V0cC5wdXRzICJSRVRVUk4odHJ1ZSk7IgorICAgICAgICBlbmQKKyAgICB9CisgICAg
b3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAu
cHV0cyAiYm9vbCBJbnN0OjphZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCkiCisgICAgb3V0
cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29k
ZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAi
Y2FzZSAje29wY29kZS5uYW1lfToiCisKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdJbmRleCkiCisgICAgICAgICAgICBvdXRwLnB1dHMg
InJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlJFVFVSTihhcmdzWzBdLnNw
ZWNpYWwoKS0+YWRtaXRzU3RhY2soKnRoaXMsIGFyZ0luc3QpKTsiCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICMgU3dpdGNoIG9uIHRoZSBhcmdJbmRleC4KKyAgICAgICAgICAgIG91dHAucHV0
cyAic3dpdGNoIChhcmdJbmRleCkgeyIKKworICAgICAgICAgICAgbnVtQXJncyA9IG9wY29kZS5v
dmVybG9hZHMubWFwIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAg
ICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICB9Lm1heAorICAgICAg
ICAgICAgCisgICAgICAgICAgICBudW1BcmdzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGFy
Z0luZGV4IHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3thcmdJbmRleH06Igor
CisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBhbGwgb2YgdGhlIGZvcm1zIG9mIGFsbCBvZiB0
aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywgb3IgZG9uJ3QsIGFkbWl0IGFuIGFkZHJlc3MKKyAgICAg
ICAgICAgICAgICAjIGF0IHRoaXMgaW5kZXguIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGEgdmVyeSBj
b21tb24gY2FzZS4KKyAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAg
bnVtTm8gPSAwCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAg
ICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgICAgIG92ZXJsb2Fk
LmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQorICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgdGVzdCBu
dW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3ZSBlbmQgdXAgd2l0aCBubyBmb3Jtcywgd2Ugd2FudAor
ICAgICAgICAgICAgICAgICMgdG8gc2F5IHRoYXQgQWRkcmVzcyBpcyBpbmFkbWlzc2libGUuCisg
ICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJSRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICMgTm93IGRvIHRoZSBmdWxsIHRlc3QuCisK
KyAgICAgICAgICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKG9wY29kZS5vdmVybG9h
ZHMuc2l6ZSAhPSAxKQorCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChh
cmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAg
IG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXJs
b2FkIHwKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBBZ2FpbiwgY2hlY2sgaWYgYWxsIG9m
IHRoZW0gZG8gd2hhdCB3ZSB3YW50LgorICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0g
MAorICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5k
ZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0g
MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtTm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBu
dW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgIyBEb24ndCBlbWl0IGFueXRoaW5n
LCBqdXN0IGRyb3AgdG8gZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmIG51
bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tv
dmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiUkVUVVJOKHRydWUpOyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBu
ZWVkT3ZlcmxvYWRTd2l0Y2gKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBp
cyBob3cgd2UgdGVzdCB0aGUgaHlwb3RoZXNpcyB0aGF0IGNoYW5naW5nIHRoaXMgYXJndW1lbnQg
dG8gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZHJlc3MgeWllbGRzIGEgdmFs
aWQgZm9ybS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9j
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbHVtbkluZGV4ID09IGFyZ0luZGV4Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJnOjpBZGRyIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAiYXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgZm9ybXMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ZZXMgPSAwCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMuZWFjaCB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFk
ZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
bnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRHJvcCBk
b3duLCBlbWl0IG5vIGNvZGUsIHNpbmNlIHdlIGNhbm5vdCBtYXRjaC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBLZWVwIGdvaW5n
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiUkVUVVJOKHRydWUpOyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hG
b3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVy
LCBjYWxsYmFjaykKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0cC5w
dXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAg
ICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0
cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IjsKKyAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFs
c2U7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpK
dW1wIEluc3Q6OmdlbmVyYXRlKENDYWxsSGVscGVycyYgaml0KSBjb25zdCIKKyAgICBvdXRwLnB1
dHMgInsiCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIKKyAgICBt
YXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9w
Y29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAg
ICAgICAgb3V0cC5wdXRzICJSRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdlbmVyYXRlKCp0aGlz
LCBqaXQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGZvcm0uYWx0TmFtZQorICAg
ICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2RlLm1hc21OYW1lCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKworICAg
ICAgICAgICAgZm9ybS5raW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwg
a2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wcmludCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgY2FzZSBraW5kLm5hbWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAgICAg
ICAgICAgICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgd2hlbiAiSW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4gIklt
bVB0ciIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNU
cnVzdGVkSW1tUHRyKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiQWRkciIKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCisgICAgICAg
ICAgICAgICAgd2hlbiAiSW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFy
Z3NbI3tpbmRleH1dLmFzQmFzZUluZGV4KCkiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIG91dHAucHV0cyAiKTsiCisgICAgICAgICAgICBvdXRwLnB1
dHMgIlJFVFVSTihyZXN1bHQpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAi
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gcmVz
dWx0OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIiCit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2
aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmRleCAhPSBpbnZhbGlkKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNv
bnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IGRlbGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2
OSw0NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CiAKKyAgICBjbGFzcyBBbGxSZWdzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKworICAgICAgICBj
bGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkg
eyB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKFJlZyByZWcpCisgICAgICAgICAg
ICAgICAgOiBtX3JlZyhyZWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3JlZzsgfQorCisgICAgICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV9yZWcgPSBtX3JlZy5uZXh0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X3JlZyA9PSBvdGhlci5tX3JlZzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIFJlZyBtX3JlZzsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmly
c3QoKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
UmVnKCkpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgY29u
c3QgeyByZXR1cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMg
dWludDhfdCBpbnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsx
MTcsMTMgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3Rl
clNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9
CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92
ZWN0b3Iuc2V0Qml0cygpKQorICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRl
eCkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBz
ZXQocmVnKTsgfQpJbmRleDogU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJj
ZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAg
cHVibGljOiAKICAgICB9OwogICAgIAogICAgIFNldEJpdHNJdGVyYWJsZSBzZXRCaXRzKCkgY29u
c3QgeyByZXR1cm4gU2V0Qml0c0l0ZXJhYmxlKCp0aGlzKTsgfQotICAgIAorCiBwcml2YXRlOgog
ICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkKICAgICB7CkluZGV4OiBTb3VyY2Uv
V1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TY29w
ZWRMYW1iZGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUg
U2NvcGVkTGFtYmRhX2gKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3Bl
ZExhbWJkYSB0byBlZmZpY2llbnRseSBwYXNzIGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1l
bW9yeSBvciByZXF1aXJpbmcKKy8vIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxs
ZWUuIFRoZSBjYWxsZWUgc2hvdWxkIGJlIGRlY2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNv
bnN0IFNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUg
Y2FsbGVyIGp1c3QgZG9lczoKKy8vCisvLyB2b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3Mq
IChpbnQsIFN0dWZmJik+KFsmXSAoaW50IHgsIFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFo
IH0pKTsKKy8vCisvLyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5n
IHRoZSBsYW1iZGEuIFRoZSBsYW1iZGEgaXMgb25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8g
b24gdGhlIHN0YWNrIC0gaGVuY2UgdGhlIG5hbWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVu
YW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRM
YW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29w
ZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4u
KSA9IG51bGxwdHIsIHZvaWQqIGFyZyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwp
CisgICAgICAgICwgbV9hcmcoYXJnKQorICAgIHsKKyAgICB9CisgICAgCisgICAgflNjb3BlZExh
bWJkYSgpCisgICAgeworICAgIH0KKworICAgIFJlc3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVu
dFR5cGVzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbChtX2Fy
Zywgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBSZXN1bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVz
JiYuLi4pIG1faW1wbDsKKyAgICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gU2NvcGVkTGFtYmRhRnVuY3RvcjsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5
cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlw
ZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGFGdW5jdG9y
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhKGltcGxGdW5j
dGlvbiwgdGhpcykKKyAgICAgICAgLCBtX2Z1bmN0b3IoZnVuY3RvcikKKyAgICB7CisgICAgfQor
CisgICAgU2NvcGVkTGFtYmRhRnVuY3RvcihGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBT
Y29wZWRMYW1iZGEoaW1wbEZ1bmN0aW9uLCB0aGlzKQorICAgICAgICAsIG1fZnVuY3RvcihXVEY6
Om1vdmUoZnVuY3RvcikpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVz
dWx0VHlwZSBpbXBsRnVuY3Rpb24odm9pZCogYXJndW1lbnQsIEFyZ3VtZW50VHlwZXMmJi4uLiBh
cmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRh
RnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5jdG9yKAorICAgICAgICAgICAgc3RkOjpmb3J3YXJk
PEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIEZ1bmN0b3IgbV9m
dW5jdG9yOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBG
dW5jdG9yPgorU2NvcGVkTGFtYmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3Bl
ZExhbWJkYShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIHJldHVybiBTY29wZWRMYW1i
ZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3Rvcik7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gU2NvcGVkTGFtYmRhX2gKKwpJbmRleDogU291cmNlL1dU
Ri93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRh
c2suaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAor
ICAgIFNoYXJlZFRhc2tGdW5jdG9yKEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVu
Y3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAgeworICAgIH0KKwogcHJpdmF0ZToKICAgICBS
ZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBvdmVycmlkZQogICAg
IHsKQEAgLTExMCw2ICsxMTUsMTEgQEAgUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3Jl
YXRlU2hhcgogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1
bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3RvcikpOwogfQordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBl
Pj4gY3JlYXRlU2hhcmVkVGFzayhGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KFdURjo6
bW92ZShmdW5jdG9yKSkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263633</attachid>
            <date>2015-10-20 16:40:31 -0700</date>
            <delta_ts>2015-10-20 22:58:46 -0700</delta_ts>
            <desc>latest</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>262524</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1f
aW5kZXgoaW5kZXgpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwor
dm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFw
cGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNp
Y0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxv
Y2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFs
dWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0
OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlJ3MgdHlwZWRlZi4KKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVM
aXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBW
YWx1ZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAg
VmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4
KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBt
X3ZhbHVlczsgfQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSog
YXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1T
dWNjZXNzb3JzKCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KTsK
KyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAK
KyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWdu
ZWQgaW5kZXgpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1
ZXM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBC
YXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2Nr
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1
bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBC
YXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4g
RGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9s
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9jZWR1
cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pOworICAgIGFw
cGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2ljQmxv
Y2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+
YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitCYXNpY0Jsb2NrKiYg
QmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBsYXN0
KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworY29uc3QgQmFz
aWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tTcGVjaWFsX2gKKyNkZWZp
bmUgQjNDaGVja1NwZWNpYWxfaAorCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHdhbnQgdG8gbG93ZXIgQ2hl
Y2sgaW5zdHJ1Y3Rpb25zIHRvIGEgYnJhbmNoLCBidXQgdGhlbiB3ZSB3YW50IHRvIHJvdXRlIHRo
YXQgYnJhbmNoIHRvIG91cgorLy8gb3V0LW9mLWxpbmUgY29kZSBpbnN0ZWFkIG9mIGRvaW5nIGFu
eXRoaW5nIGVsc2UuIEZvciB0aGlzIHJlYXNvbiwgYSBDaGVja1NwZWNpYWwgd2lsbCByZW1lbWJl
cgorLy8gd2hpY2ggYnJhbmNoIG9wY29kZSB3ZSBoYXZlIHNlbGVjdGVkIGFsb25nIHdpdGggdGhl
IG51bWJlciBvZiBhcmdzIGluIHRoZSBvdmVybG9hZCB3ZSB3YW50LiBJdAorLy8gd2lsbCBjcmVh
dGUgYW4gSW5zdCB3aXRoIHRoYXQgb3Bjb2RlIHBsdXMgdGhlIGFwcHJvcHJpYXRlIGFyZ3MgZnJv
bSB0aGUgb3duaW5nIEluc3Qgd2hlbmV2ZXIgeW91CisvLyBjYWxsIGFueSBvZiB0aGUgY2FsbGJh
Y2tzLgorCitjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1
YmxpYzoKKyAgICBDaGVja1NwZWNpYWwoT3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncyk7
CisgICAgfkNoZWNrU3BlY2lhbCgpOworCisgICAgLy8gQ29uc3RydWN0cyBhbmQgcmV0dXJucyB0
aGUgSW5zdCByZXByZXNlbnRpbmcgdGhlIGJyYW5jaCB0aGF0IHRoaXMgd2lsbCB1c2UuCisgICAg
SW5zdCBoaWRkZW5CcmFuY2goSW5zdCYpOworCitwcm90ZWN0ZWQ6CisgICAgLy8gRklYTUU6IFdl
IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIHN1cGVyY2xhc3MgZG9lc24ndCBtZXNzIHdpdGggdGhl
IGFyZ3MgdGhhdCBhcmUgYWN0dWFsbHkKKyAgICAvLyBwYXJ0IG9mIG91ciBoaWRkZW4gYnJhbmNo
IGluc3QuIE9uZSBhcHByb2FjaCBpcyB0byBoYXZlIHRoZSBTdGFja21hcFNwZWNpYWwgY2xhc3Mg
aGF2ZSBmb3JtcworICAgIC8vIG9mIHRoZXNlIG1ldGhvZHMgdGhhdCB0YWtlIGFuIGFkZGl0aW9u
YWwgb2Zmc2V0LiBVZ2guCisgICAgdmlydHVhbCBib29sIGZvckVhY2hBcmcoLi4uKTsKKworICAg
IC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJy
YW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMg
dGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBCM0NoZWNrU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9
CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZp
bmUgQjNDaGVja1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0
YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVj
a1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAg
ICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNr
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVm
dC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
SW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBl
KCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVj
a1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZv
cm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NF
UlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBh
dHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExv
YWROb3RaZXJvMSA9IEFuZChMb2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIg
PSBBbmQobGVmdCwgTG9hZChhZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0
KQorCitUZXN0TG9hZFplcm8xID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDAp
CitUZXN0TG9hZFplcm8yID0gRXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rl
c3RaZXJvID0gRXF1YWwoQW5kKGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVh
bChMb2FkKGFkZHJlc3MpLCByaWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFk
ZHJlc3MpKQorTm90ID0gRXF1YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdo
dCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0NvbnN0MzJWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Q29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFs
dWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDb25zdDMyVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAg
ICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJp
bnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
UHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3Jp
Z2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQz
Miwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sK
K30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBC
M0NvbnN0NjRWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4g
b3Bjb2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisg
ICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFs
dWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9p
ZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91Ymxl
VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJs
ZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91
YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAg
CisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3Vi
bGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJv
bFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9p
bnRlckR1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZh
bHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgor
ICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2Ug
T29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisg
ICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNs
YXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3d0aWNoVmFs
dWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBT
dWNjZXNzb3JMaXN0OworCisgICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVt
U3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vj
Y2Vzc29yc1tpXTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgp
IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorCisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYg
c3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBT
dWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
UHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6
IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VS
VChvcGNvZGUgPT0gT29wcyk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4K
KyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiByZXN1bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9p
ZCwgb3JpZ2luLCByZXN1bHQpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVy
bik7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2Nr
KiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNz
b3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2gu
CisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29k
ZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayog
eWVzLCBCYXNpY0Jsb2NrKiBubykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lk
LCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJh
bmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nl
c3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRf
aAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNp
bmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCku
IEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZp
Y2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNl
dHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhl
cmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8gSWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNC
bG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Jsb2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRl
eFNldCgpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIGJv
b2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQodmFs
dWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25U
eXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxl
KGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQor
ICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29sbGVjdGlvbikKKyAgICAgICAgICAgICwgbV9z
ZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAg
ICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwg
Qml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAg
ICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2l0ZXIo
aXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVCogb3Bl
cmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0
aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faXRlcisrOwor
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICBC
aXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgbV9pdGVyOworICAgICAgICB9Owor
CisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xs
ZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAg
ICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAgIH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxv
Y2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8K
KyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2Nl
ZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+Cisg
ICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZhbHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYg
Y29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0
aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQorCisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRp
Y2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAg
ICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMoKS5zZXRCaXRzKCkpCisgICAgICAgICAgICBv
dXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgsIGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMg
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCittYXRjaGVyIExvd2VyaW5nTWF0Y2hlcgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25z
aWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcgYXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRl
ZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50cyB3aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3Rl
OiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1hdGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBv
ZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCisKK0xvYWQgPSBMb2FkKGFkZHJlc3MpCisKKyMgV2Ug
cHJvYmFibHkgZG9uJ3QgbmVlZCB0aGVzZSBmb3Jtcy4KK0FkZExvYWQxID0gQWRkKExvYWQoYWRk
cmVzcyksIHZhbHVlKQorQWRkTG9hZDIgPSBBZGQodmFsdWUsIExvYWQoYWRkcmVzcykpCitBZGQg
PSBBZGQobGVmdCwgcmlnaHQpCisKK1N0b3JlQWRkTG9hZDEgPSBTdG9yZShBZGQoTG9hZChhZGRy
ZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQorU3RvcmVBZGRMb2FkMiA9IFN0b3JlKEFkZCh2YWx1ZSwg
TG9hZChhZGRyZXNzKSksIGFkZHJlc3MpCitTdG9yZUFuZExvYWQgPSBTdG9yZShBbmQoTG9hZChh
ZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcykK
KworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQoreworfQorCit2
b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29mZnNldCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAorCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgTWVtb3J5
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAg
IGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZa
OgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAg
ICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6
CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAgICBpbnRw
dHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZv
ciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQg
aGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4K
KyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludHB0
cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3Jp
Z2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNh
c2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgICAgICBB
U1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEb3VibGUp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAg
ICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAg
ICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4g
dHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50cHRyX3Qgb2Zmc2V0ID0g
MCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8g
RG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAg
Y2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNl
IExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVtb3J5
VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnRwdHJfdCBvZmZz
ZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFs
dWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAg
ICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM09wY29kZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJpbnQoIklkZW50aXR5Iik7
CisgICAgICAgIHJldHVybjsKKyAgICAgICAgLy8gRklYTUUKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDog
aW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZvciB3
aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAgLy8g
UG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElk
ZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMu
IENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAg
IC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29u
c3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2
NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRo
aXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2Fy
ZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBp
bnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAg
ICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3Rh
Y2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMg
dmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVn
YXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21w
aWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0
aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmlu
ZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBh
IGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBU
aGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3Ig
RG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUg
cG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0
IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZl
YXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5
IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNp
YyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAg
ICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIs
CisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4K
KyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2Vy
IG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2Ug
SlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhv
ciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1
Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4
dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwK
KyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3Vu
ZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAg
IC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAv
LyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJl
dHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFs
KHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdy
ZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJ
bnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAg
ICBCZWxvdywKKyAgICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1lbW9y
eSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0eXBl
LiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgorICAg
IExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAgIC8v
IFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMgcmV0dXJu
IHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8gTWVtb3J5
IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4gVGhlc2Ug
dXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAg
U3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2YWx1ZToK
KyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3Ig
SW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhpcyBpcyBh
IHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVtIEMgY2Fs
bGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVudHMgYXJl
IHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAvLyBUaGlz
IGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRoaXMgaXMg
dmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVtaXRzIGNv
ZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8g
ZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBhbG9uZyB3
aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3QgYmUgcGFz
c2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAgYXJndW1l
bnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0CisgICAgLy8g
dGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhlIHRvcCBv
ZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgorICAgIFBh
dGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFz
cy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24KKyAgICAv
LyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFmdGVyIHRo
ZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20gdGhlIGNo
ZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBzdXBwbHkg
YSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBqdW1w
IGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBzaW5jZSB0
aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24gb2YgdGhl
c2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4uIEZvcgor
ICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8vCisgICAg
Ly8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8K
KyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8KKyAgICAv
LyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAvLworICAg
IC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQgYnkgdGhl
IHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2FsbGJhY2tz
LiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFyZSBkaWZm
ZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3QgQ2hlY2tB
ZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9zc2libHkg
dGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVja0FkZCdz
IGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tTdWIsCisg
ICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0aGUgQ2hl
Y2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMgYQorICAg
IC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFuIElu
dDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1bGwgYnJh
bmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1w
cyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ssCisKKyAg
ICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBzaWxvbiwg
Ly8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisgICAgLy8g
SnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAgCisgICAg
Ly8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gQnJhbmNo
ZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZhbHVlIGNs
YXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNjZXNzb3Iu
CisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJbnQz
MiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNoLAorCisg
ICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRoZWlyIHJl
dHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBlLiBVc2Vz
IHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhpcyBpcyBh
IHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZS4gVXNl
cyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2lu
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNP
cmlnaW5faAorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2Ug
dG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFi
bGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1
Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25z
IG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUg
YSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFi
b3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihj
b25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7
CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisKKyNp
bmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lk
IFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2lu
dFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hw
b2ludFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBv
aW50VmFsdWVfaAorI2RlZmluZSBCM1BhdGNocG9pbnRWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1Zh
bHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2ludFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29k
ZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFj
a21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9y
aWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAg
ICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUGF0Y2hw
b2ludFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM1Byb2NlZHVyZS5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUHJvY2VkdXJl
OjpQcm9jZWR1cmUoKQoreworfQorCitQcm9jZWR1cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitC
YXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QmFzaWNCbG9jaz4gYmxvY2sgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhc2ljQmxvY2s+KG1fYmxvY2tz
LnNpemUoKSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9i
bG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAo
YmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1Byb2NlZHVyZV9oCisKKyNpbmNsdWRlIDx3dGYvQmFn
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFByb2Nl
ZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJvY2VkdXJlKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIFByb2NlZHVyZSgpOworICAgIH5Qcm9j
ZWR1cmUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKCk7CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVU
eXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUo
KTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGlu
ZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAg
LCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1
cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCAr
IDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJlLT5zaXpl
KCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgaW5kZXgrKzsK
KyAgICAgICAgICAgIHJldHVybiBpbmV4OworICAgICAgICB9CisKKyAgICAgICAgUHJvY2VkdXJl
KiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAg
ICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgbnVtQmxvY2tz
KCkpOyB9CisKKyAgICBjbGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIFZhbHVlc0NvbGxlY3Rpb24oUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6
IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigp
OgorICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAg
ICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAg
ICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IFZhbHVlKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX3Byb2NlZHVyZS0+YmxvY2sobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAg
IHByaXZhdGU6CisKKyAgICAgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAg
ICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIDApOyB9CisgICAgICAg
IGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCBtX3By
b2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKTsgfQorICAgICAgICBWYWx1
ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVz
W2luZGV4XTsgfQorICAgICAgICBWYWx1ZSogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAg
IFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgfTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24g
dmFsdWVzKCkgeyByZXR1cm4gVmFsdWVzQ29sbGVjdGlvbigqdGhpcyk7IH0KKworcHJpdmF0ZToK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlPj4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKyNkZWZpbmUgQjNQ
cm9jZWR1cmVJbmxpbmVzX2gKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlw
ZSogUHJvY2VkdXJlOjphZGQoQXJndWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5p
cXVlX3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5ldyBWYWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBh
cmd1bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAg
IG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworU3RhY2tTbG90VmFsdWU6On5TdGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3Zv
aWQgU3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Ns
b3RWYWx1ZV9oCisjZGVmaW5lIEIzU3RhY2tTbG90VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN0YWNrU2xvdDsgfQorCisgICAgflN0
YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYnl0ZVNpemU7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9m
IGNvbXBpbGF0aW9uLiBZb3UgY2Fubm90IHJlbHkgb24gaXQgaGF2aW5nIGEgbWVhbmluZ2Z1bAor
ICAgIC8vIHZhbHVlIHdoaWxlIHRoZSBjb21waWxlciBpcyBydW5uaW5nLgorICAgIGludHB0cl90
IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN0YWNrU2xvdFZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6ZSkKKyAg
ICAgICAgOiBWYWx1ZShpbmRleCwgU3RhY2tTbG90LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAg
ICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisg
ICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgaW50cHRyX3QgbV9v
ZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRlcihtX29wYXF1ZSksICIsIHJl
cHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAgICAgICAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQ
b2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQs
CisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcF9o
CisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8
d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIEIzVmFsdWU7CisKK2NsYXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2Vu
ZXJhdGlvblBhcmFtcyB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcg
dGhlIHN0YWNrbWFwLgorICAgICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBp
cyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAv
LyBUaGlzIGlzIHRoZSBqdW1wIHRvIHRoZSBzbG93IHBhdGgsIGlmIHRoaXMgaXMgYSBzdGFja21h
cCBmb3IgYSBDaGVjayB2YWx1ZS4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXA7CisK
KyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlv
bnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworCisg
ICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisg
ICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgfTsKKyAgICAKKyAgICB0eXBl
ZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlv
blBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2Vu
ZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2V0
IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2Vm
dWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0
ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0
ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRl
cyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0
cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAg
dm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUg
PSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNl
cyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGlu
ZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgp
KTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lz
ZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1l
bnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNrbWFwLiBOb3RlIHRoYXQgaW5kZXgg
emVybyByZWZlcnMgdG8gdGhlCisgICAgLy8gZmlyc3QgYXJndW1lbnQgdG8gdGhhdCBWYWx1ZSwg
ZXZlbiBpZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3IgZXhhbXBsZSwg
aW4gYQorICAgIC8vIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25z
dHJhaW4gaW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdCB3b3VsZAorICAgIC8v
IGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhlIGdlbmVyYXRp
b24gY2FsbGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuIGRlcGVuZAorICAgIC8vIG9uIHRoZSByZXBz
IGZvciB0aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNvbnN0cmFpbih1
bnNpZ25lZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAgIGlmIChp
bmRleCArIDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBzLmdyb3coaW5kZXgg
KyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisKKyAgICB2b2lkIGNs
b2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fY2xvYmJlcmVk
Lm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNsb2JiZXJlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lkIHNldEdlbmVyYXRvcihS
ZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9
IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+KGZ1bmN0
b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworICAgIAorICAgIHZv
aWQqIG1fb3BhcXVlIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBzOwor
ICAgIFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIFJlZ2lzdGVyU2V0IG1fY2xv
YmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsgLy8gU3RhY2ttYXBzIGNv
dWxkIGJlIGZ1cnRoZXIgZHVwbGljYXRlZCBieSBBaXIsIGJ1dCB0aGF0J3MgdW5saWtlbHksIHNv
IHdlIGp1c3QgbWVyZ2UgdGhlIHVzZWQgcmVnaXN0ZXJzIHNldHMgaWYgdGhhdCB3ZXJlIHRvIGhh
cHBlbi4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTdGFj
a21hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCitTdGFja21hcFNwZWNpYWw6
OlN0YWNrbWFwU3BlY2lhbChjb25zdCBjaGFyKiBuYW1lKQorICAgIDogU3BlY2lhbChuYW1lKQor
eworfQorCitTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwoKQoreworfQorCit2b2lk
IFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1i
ZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgVmFsdWUqIHZhbHVl
ID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBu
b3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPT0gdmFsdWUtPmNoaWxk
cmVuLnNpemUoKSArIDEpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBpbnN0
LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaV07Cisg
ICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpIC0gMSk7CisKKyAgICAgICAgY2Fs
bGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsK
KyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7
CisgICAgLy8gV2Ugc2hvdWxkIGhhdmUgYWxyZWFkeSB2YWxpZGF0ZWQgdGhhdCBpdCBoYXMgYXQg
bGVhc3Qgb25lIGFyZywgdGhlIFNwZWNpYWwuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkp
OworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNr
bWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAg
Ly8gVGhlIG9ubHkga2luZCBvZiBhcmd1bWVudCB0aGF0IGEgc3RhY2ttYXAgd291bGQgYWx3YXlz
IGJlIHVuaGFwcHkgd2l0aCBpcyBhIFNwZWNpYWwuIEJ1dCwgd2UKKyAgICAvLyBleGhhdXN0aXZl
bHkgb3B0IGludG8gZXZlcnl0aGluZyB3ZSBrbm93IHdlIGNhbiBoYW5kbGUuIEl0IG1ha2VzIHRo
aW5ncyBlYXNpZXIgbGF0ZXIuIEFsc28sCisgICAgLy8gdGhpcyBsb29wIHZlcmlmaWVzIGFyZ3Vt
ZW50IHR5cGUuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGluc3QuYXJncy5zaXplKCk7
ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAg
IEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
YXJnLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6
SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1tUHRyOgorICAgICAgICBjYXNlIEFyZzo6QWRkcjoK
KyAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAg
ICAgICAgY2FzZSBBcmc6OkluZGV4OgorICAgICAgICAgICAgYnJlYWs7IC8vIE9LCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBl
KCkpOworCisgICAgICAgIGlmICghYXJnLmlzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGNvbnN0cmFpbnRzIGhhcyB0
byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBCMyBjaGlsZHJlbi4KKyAgICBBU1NF
UlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkgPD0gdmFsdWUtPmNoaWxkcmVuLnNpemUoKSk7CisK
KyAgICAvLyBXZSBtdXN0IGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBvcGVyYW5kcy4KKyAgICBp
ZiAoaW5zdC5hcmdzLnNpemUoKSAhPSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpICsgMSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVmVyaWZ5IGFueSBleHBsaWNpdGx5IHN1cHBsaWVk
IGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdGFja21hcC0+bV9y
ZXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChp
KTsKKyAgICAgICAgVmFsdWVSZXAmIHJlcCA9IHN0YWNrbWFwLT5tX3JlcHNbaV07CisgICAgICAg
IEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyAxXTsKKworICAgICAgICBzd2l0Y2ggKHJlcC5raW5k
KCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmICghYXJn
LmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKGFy
ZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgICAg
ICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChhcmcgIT0gQXJnOjpj
YWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50Ogor
ICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4K
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdGFja21hcFNw
ZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAg
IFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZh
bHVlLT5zdGFja21hcCgpOworCisgICAgdW5zaWduZWQgc3RhY2ttYXBBcmdJbmRleCA9IGFyZ0lu
ZGV4IC0gMTsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5tX3JlcHMu
c2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8gY29uc3Ry
YWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9ubHkg
YWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBpbnB1dCBj
b25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8gYSBDYWxs
QXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0luZGV4XS5r
aW5kKCkgPT0gQW55KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9ydFVzZWRyZWdpc3RlcnMoSW5zdCYgaW5z
dCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFsdWUqIHZhbHVl
ID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFw
KCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBTdGFja21hcFNw
ZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVzZWQKKyAgICAv
LyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJlbnRseSB3b24n
dCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8gb3IgdGhpbmdz
IGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBwcm9ibGVtLgor
ICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVycyk7Cit9CisK
K2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyhJ
bnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNr
bWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgcmV0dXJuIHN0YWNrbWFw
LT5jbG9iYmVyZWQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcFNwZWNpYWxfaAorI2RlZmluZSBC
M1N0YWNrbWFwU3BlY2lhbF9oCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAi
QjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhp
cyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRoYXQgaGF2ZSBzdGFja21hcHMuIE5vdGUg
dGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAgYnkKKy8vIGFza2luZyBmb3IgdGhlIEluc3Qn
cyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3RzIGRvbid0IG5lZWQgdG8gZXZlbiBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAuCisKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbCA6
IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGljOgorICAgIFN0YWNrbWFwU3BlY2lhbChjb25z
dCBjaGFyKiBuYW1lKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8
QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlk
KEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJbnN0Jiwg
dW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVy
cyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJl
Z2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAg
ICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGRlZXBE
dW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkgc29tZSBzdWJjbGFzc2VzCisgICAgLy8gdGhhdCBpbXBs
ZW1lbnQgdGhhdC4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNTdGFja21hcFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN3aXRjaENhc2U6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jYXNlVmFsdWUs
ICItPiIsIHBvaW50ZXJEdW1wKG1fdGFyZ2V0KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaENhc2VfaAorI2RlZmluZSBCM1N3aXRj
aENhc2VfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
QmFzaWNCbG9jazsKKworY2xhc3MgU3dpdGNoQ2FzZSB7CitwdWJsaWM6CisgICAgU3dpdGNoQ2Fz
ZSgpCisgICAgeworICAgIH0KKworICAgIFN3aXRjaENhc2UoaW50NjRfdCBjYXNlVmFsdWUsIEJh
c2ljQmxvY2sqIHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VWYWx1ZShjYXNlVmFsdWUpCisgICAg
ICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3RhcmdldDsgfQorCisgICAgaW50NjRfdCBj
YXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1ZTsgfQorICAgIEJhc2ljQmxvY2sq
IHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBjYXNlVmFsdWU7
CisgICAgQmFzaWNCbG9jayogdGFyZ2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM1N3aXRjaENhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2xkdWUgIkIzU3dpdGNoVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK1N3aXRjaFZhbHVlOjp+U3dpdGNoVmFsdWUoKQoreworfQor
CitTd2l0Y2hDYXNlIFN3aXRjaFZhbHVlOjpyZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KQorewor
ICAgIFN3aXRjaENhc2UgcmVzdWx0ID0gbV9zdWNjZXNzb3JzW2luZGV4XTsKKyAgICBtX3N1Y2Nl
c3NvcnNbaW5kZXhdID0gbV9zdWNjZXNzb3JzLmxhc3QoKTsKKyAgICBtX3N1Y2Nlc3NvcnMucmVt
b3ZlTGFzdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFw
cGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3Nv
cnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nl
c3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOworICAgIG1fdmFsdWVzLmFw
cGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVt
cE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRlc3RydWN0aXZl
bHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisgICAgb3V0LnByaW50KGxp
c3REdW1wKCp0aGlzKSk7Cit9CisKK1N3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayogZmFsbFRocm91Z2gpCisgICAgOiBDb250
cm9sVmFsdWUoaW5kZXgsIFN3aXRjaCwgb3JpZ2luKQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBl
bmQoZmFsbFRocm91Z2gpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAorI2RlZmluZSBCM1N3aXRjaFZhbHVlX2gK
KworI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hWYWx1ZSA6
IHB1YmxpYyBDb250cm9sVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN3aXRjaDsgfQorCisgICAgflN3aXRj
aFZhbHVlKCk7CisKKyAgICAvLyBudW1DYXNlVmFsdWVzKCkgKyAxID09IG51bVN1Y2Nlc3NvcnMo
KS4KKyAgICB1bnNpZ25lZCBudW1DYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpOyB9CisKKyAgICAvLyBUaGUgc3VjY2Vzc29yIGZvciB0aGlzIGNhc2UgdmFsdWUgaXMg
YXQgdGhlIHNhbWUgaW5kZXguCisgICAgaW50NjRfdCBjYXNlVmFsdWUodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2ldOyB9CisgICAgCisgICAgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEJh
c2ljQmxvY2sqIGZhbGxUaHJvdWdoKCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3Qo
KTsgfQorICAgIEJhc2ljQmxvY2sqJiBmYWxsVGhyb3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMo
KS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBudW1DYXNl
VmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNlIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENhc2UoY2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29y
KGluZGV4KSk7CisgICAgfQorICAgIFN3aXRjaENhc2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICAgICAgOiBtX3N3aXRjaChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hW
YWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1
ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0
b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBTd2l0Y2hWYWx1ZSogbV9zd2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBh
bmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBm
cm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhp
cyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cK
KyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUg
Y2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25l
ZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNo
Q2FzZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2Nr
KiBmYWxsVGhyb3VnaCk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlw
ZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZv
aWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lkLAorICAgIEludDMyLAorICAgIEludDY0LAorICAg
IERvdWJsZQorfTsKKworaW5saW5lIGJvb2wgaXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVy
biB0eXBlID09IEludDMyIHx8IHR5cGUgPT0gSW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxv
YXQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5l
IFR5cGUgcG9pbnRlcigpIGNvbnN0Cit7CisgICAgaWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAg
ICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVybiBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVXBzaWxvblZhbHVlOjp+VXBzaWxvblZh
bHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJeIiwgbV9waGktPmluZGV4KCkpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNp
bG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2lsb25WYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBVcHNpbG9uVmFs
dWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bj
b2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVwc2lsb247IH0KKworICAgIH5VcHNpbG9u
VmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQorCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgVXBz
aWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZh
bHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1
ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5
cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQorCisgICAgVmFsdWUqIG1fcGhpOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhbHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZh
bHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlz
IGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVy
IFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFs
dWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVu
IHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhl
biB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWdu
ZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4g
b3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsK
KyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKyAgICB2b2lkKiBt
aXNjID0gdGhpcy0+bWlzYzsKKworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5
cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIChp
bmRleCwgSWRlbnRpZnksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOworCisgICAgdGhpcy0+b3duZXIg
PSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworICAgIHRoaXMt
Pm1pc2MgPSBtaXNjOworfQorCit2b2lkIFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIFZh
bHVlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCht
X3R5cGUsICIgIiwgKnRoaXMsICIgPSAiLCBtX29wY29kZSk7CisKKyAgICBvdXQucHJpbnQoIigi
KTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChWYWx1ZSogY2hpbGQgOiBjaGls
ZHJlbigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGNoaWxkKSk7CisK
KyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJpbmdPdXQ7CisgICAgZHVtcE1ldGEoc3RyaW5nT3V0
KTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKKyAgICBpZiAo
c3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cmluZyk7CisKKyAg
ICBvdXQucHJpbnQoIikiKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
aW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUo
KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3QKK3sKK30K
KworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBB
ZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBEaXY6CisgICAgY2Fz
ZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJp
dE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAg
ICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAg
IGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiBmaXJzdENoaWxkLT50eXBlKCk7CisgICAg
Y2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJldHVybiBwb2ludGVyKCk7CisgICAgY2FzZSBT
RXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBjYXNlIERUb0kzMjoKKyAgICBjYXNlIEVxdWFs
OgorICAgIGNhc2UgTm90RXF1YWw6CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0
ZXJUaGFuOgorICAgIGNhc2UgTGVzc0VxdWFsOgorICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAg
IGNhc2UgQWJvdmU6CisgICAgY2FzZSBCZWxvdzoKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAg
Y2FzZSBCZWxvd0VxdWFsOgorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgY2FzZSBTRXh0MzI6
CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIHJldHVybiBJbnQ2NDsKKyAgICBjYXNlIEZSb3Vu
ZDoKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgY2FzZSBOb3A6
CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzT3JpZ2lu
LmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8
VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQ
cmVmaXggPSAiQCI7CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bj
b2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRp
dHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAg
ICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBW
YWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsg
fQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGls
ZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhl
IG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAg
IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBj
b25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47
IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworICAgIHZvaWQgcmVw
bGFjZVdpdGhOb3AoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAg
IHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgaG93
IHlvdSBjYXN0IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGlu
ZyBwcm92aWRlZCB0aGF0IHdlIGhhdmUgYQorICAgIC8vIEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBj
YW4gZG86CisgICAgLy8KKyAgICAvLyBpZiAoQXJndW1lbnRSZWdWYWx1ZSogYXJndW1lbnRSZWcg
PSB2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkgeworICAgIC8vICAgICB0aGluZ3MKKyAg
ICAvLyB9CisgICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhpcyBvcGNv
ZGUoKSAhPSBBcmd1bWVudFJlZy4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoaXMgcmV0dXJucyBudWxs
cHRyCisgICAgLy8gaWYgVDo6YWNjZXB0cyhvcGNvZGUoKSkgcmV0dXJucyBmYWxzZS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBjb25zdCBUKiBhcygpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50MzIoKSBj
b25zdDsKKyAgICBpbnQzMl90IGFzSW50MzIoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0lu
dDY0KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludDY0KCkgY29uc3Q7CisKKyAgICBib29sIGhh
c0ludCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQoKSBjb25zdDsKKyAgICBib29sIGlzSW50
KGludDY0X3QgdmFsdWUpIGNvbnN0OworCisgICAgYm9vbCBoYXNEb3VibGUoKSBjb25zdDsKKyAg
ICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKKworICAgIFN0YWNrbWFwKiBzdGFja21hcCgpOwor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisg
ICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUuCisgICAgLy8gVGhpcyBmb3Jt
IHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseToKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hp
bGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFy
Z3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNp
ZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVu
OgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAg
LCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9v
cmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9z
ZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBm
aXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhw
bGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlw
ZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2lu
KQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAg
eworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4g
aW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0Cisg
ICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5k
ZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9y
KG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAg
ICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgdmFyYXJncy4KKyAgICBleHBpY2l0IFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4s
IGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgp
CisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAg
ICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZp
cnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8g
Zml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNv
ZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFk
amFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVy
IHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50
IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgor
ICAgIHZvaWQqIG1pc2MgeyBudWxscHRyIH07Cit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsK
K3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3Zh
bHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1
ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8
bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmFsdWUqIG1fdmFsdWU7Cit9OworCitE
ZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZh
bHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5s
aW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlSW5saW5lc19o
CisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKworI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIK
KyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlm
IChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0
aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordGVtcGxhdGU+dHlwZW5hbWUgVD4KK2Nv
bnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUq
Pih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAorewor
ICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1ZT4oKTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJ
bnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsK
K30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENv
bnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6
aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSB8fCBoYXNJbnQ2NCgpOwor
fQorCitpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMy
KCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9CisKK2Jvb2wgVmFsdWU6OmlzSW50KGludDY0
X3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludCgpICYmIGFzSW50KCkgPT0gdmFs
dWU7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEh
YXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKworZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91YmxlVmFsdWU+KCktPnZhbHVlKCk7Cit9CisK
K1N0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQoreworICAgIGlmIChDaGVja1ZhbHVlKiBjaGVj
ayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmY2hlY2stPnN0YWNrbWFwOwor
ICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhczxQYXRjaHBvaW50VmFsdWU+
KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2ludC0+c3RhY2ttYXA7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1
ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
VmFsdWVSZXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFs
dWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9r
aW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgTm9uZToKKyAgICBjYXNlIFNv
bWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAg
IG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgi
KCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25z
dGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVS
ZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVw
OjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lz
dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAg
ICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBW
YWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6
Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVSZXBfaAorI2RlZmluZSBCM1ZhbHVl
UmVwX2gKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3Mg
dG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2Vk
IGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVz
ZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ug
c2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0
IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0
LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAg
Ly8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGlj
ayBhbnkgcmVwcmVzZW50YXRpb24uCisgICAgICAgIEFueSwKKworICAgICAgICAvLyBBcyBhbiBp
bnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUg
cmVnaXN0ZXIuIEl0IGNvdWxkIGJlIGEKKyAgICAgICAgLy8gcmVnaXN0ZXIgdGhhdCB0aGlzIGNs
YWltcyB0byBjbG9iYmVyIQorICAgICAgICBTb21lUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMg
YW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdpc3Rl
ci4gQXMgYW4gb3V0cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVz
IHdoYXQgcmVnaXN0ZXIgQjMgcGlja2VkLgorICAgICAgICBSZWdpc3RlciwKKworICAgICAgICAv
LyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBz
bG90IEIzIHBpY2tlZC4gSXQncyBub3QgYSB2YWxpZAorICAgICAgICAvLyBpbnB1dCByZXByZXNl
bnRhdGlvbi4KKyAgICAgICAgU3RhY2ssCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVz
ZW50YXRpb24sIHRoaXMgZm9yY2VzIHRoZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhlIGFyZ3VtZW50
IGFyZWEgYXQgc29tZQorICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgIFN0YWNrQXJndW1lbnQs
CisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVz
IHRoYXQgQjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAg
ICB9OworICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1fa2lu
ZChSZWdpc3RlcikKKyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAgIHsKKyAgICB9
CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICByZXR1
cm4gVmFsdWVSZXAocmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50
cHRyX3Qgb2Zmc2V0RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zm
c2V0RnJvbUZQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50KGlu
dHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC5tX3Zh
bHVlID0gb2Zmc2V0RnJvbVNQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFu
dChpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFs
dWU7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGRvdWJsZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFs
dWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0K
KworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0g
QW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92YWx1ZSk7
CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21TUCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrQXJndW1lbnQpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKwor
ICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAgIGRvdWJs
ZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50NjRfdCBtX3ZhbHVl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2luZCk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNWYWx1ZVJlcF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0
Y2hlci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0
ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OTMgQEAKKyMh
L3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworcmVxdWlyZSAicGF0aG5hbWUiCisKKyR2YXJJbmRleCA9IDAKK2RlZiBuZXdWYXIKKyAgICAk
dmFySW5kZXggKz0gMQorICAgICJfdG1wI3skdmFySW5kZXh9IgorZW5kCisKK2NsYXNzIFByb2R1
Y3Rpb24KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6bmFtZSwgOnZhck5hbWUsIDphbm9ueW1v
dXMsIDpvcGNvZGUsIDpjaGlsZHJlbgorCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBuYW1l
LCBvcGNvZGUsIGNoaWxkcmVuKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBu
YW1lID0gbmFtZQorICAgICAgICBAYW5vbnltb3VzID0gKG5hbWUgPT0gbmlsIG9yIG5hbWUgPX4g
L1xBXCQoWzAtOV0rKVxaLykKKyAgICAgICAgQHZhck5hbWUgPSBAYW5vbnltb3VzID8gbmV3VmFy
IDogbmFtZQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIEBjaGlsZHJlbiA9IGNo
aWxkcmVuID8gY2hpbGRyZW4gOiBbXQorICAgIGVuZAorCisgICAgZGVmIGhhc09wY29kZQorICAg
ICAgICBvcGNvZGUgIT0gbmlsCisgICAgZW5kCisKKyAgICBkZWYgZWFjaFZhcmlhYmxlKCZwcm9j
KQorICAgICAgICBjaGlsZHJlbi5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBjaGls
ZCwgaW5kZXggfAorICAgICAgICAgICAgeWllbGQgdmFyTmFtZSwKKyAgICAgICAgICAgICAgICAg
IGNoaWxkLm5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC52YXJOYW1lLAorICAgICAgICAg
ICAgICAgICAgY2hpbGQuYW5vbnltb3VzID8gKGNoaWxkLm9wY29kZSA/IDphbm9uSW50ZXJuYWwg
OiA6YW5vbk9wZXJhbmQpIDogKGNoaWxkLm9wY29kZSA/IDppbnRlcm5hbCA6IDpvcGVyYW5kKSwK
KyAgICAgICAgICAgICAgICAgIGluZGV4CisgICAgICAgICAgICBjaGlsZC5lYWNoVmFyaWFibGUo
JnByb2MpCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBNYXRjaGVyCisgICAgYXR0
cl9yZWFkZXIgOm5hbWUsIDpwcm9kdWN0aW9ucworCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwg
cHJvZHVjdGlvbnMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAcHJvZHVjdGlvbnMg
PSBwcm9kdWN0aW9ucworICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVh
ZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxl
TmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAg
QGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAg
ICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3Mg
VG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGlu
aXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAg
ICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAg
ICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIu
c3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAg
ICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5n
ID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmlu
Zy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJy
b3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlz
ZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNl
ICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAg
ZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5h
bWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAg
ICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9c
QVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVu
IC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVO
dW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKS8K
KyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGlu
ZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAj
IHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVs9KCksXS8KKyAgICAgICAgICAg
IHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQm
KQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmln
aW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAj
e3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0
X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikK
KyAgICAjIFdlIGNhbiBleHRlbmQgdGhpcyBhcyB3ZSBhZGQgbW9yZSBrZXl3b3Jkcy4gTGlrZSwg
d2UgbWlnaHQgd2FudCAiaW5jbHVkZSIgZXZlbnR1YWxseS4KKyAgICB0b2tlbiA9fiAvXEEoKG1h
dGNoZXIpKVxaLworZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4g
L1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2Vu
KQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1l
KQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0g
MAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBl
bmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAg
ZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0
b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBj
b21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQg
b2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2Ug
ZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAg
ICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBh
cnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAg
ICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBp
ZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UK
KyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgYWRkVW5pcXVlKG5hbWUsIHByb2R1
Y3Rpb25zLCBwcm9kdWN0aW9uKQorICAgICAgICBpZiBuYW1lID09IHByb2R1Y3Rpb24udmFyTmFt
ZQorICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2hpbGQgcHJvZHVjdGlvbiBoYXMgc2FtZSBuYW1l
IGFzIHBhcmVudCBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIGlmIHByb2R1Y3Rp
b25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9Cisg
ICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgIGVu
ZAorICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgZW5kCisKKyAgICBkZWYg
cGFyc2UKKyAgICAgICAgY29uc3VtZSgibWF0Y2hlciIpCisKKyAgICAgICAgbWF0Y2hlck5hbWUg
PSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKworICAgICAg
ICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKwor
ICAgICAgICAgICAgIyBXZSBtaWdodCB3YW50IHRvIHN1cHBvcnQgImluY2x1ZGUiLiBJZiB3ZSBk
aWQgdGhhdCwgaXQgd291bGQgZ28gaGVyZS4KKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwYXJz
ZVByb2R1Y3Rpb24KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0
ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAg
ICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgICAgICBl
bmQKKworICAgICAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgICAgICB9CisK
KyAgICAgICAgTWF0Y2hlci5uZXcobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAor
CisgICAgZGVmIHBhcnNlUHJvZHVjdGlvbgorICAgICAgICBvcmlnaW4gPSB0b2tlbi5vcmlnaW4K
KyAgICAgICAgbmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgaWYgdG9rZW4gPT0g
Ij0iCisgICAgICAgICAgICBjb25zdW1lKCI9IikKKyAgICAgICAgICAgIG9wY29kZSA9IGNvbnN1
bWVJZGVudGlmaWVyCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgZWxzaWYgdG9r
ZW4gPT0gIigiCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgICAgIG9wY29kZSA9
IG5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmV0dXJuIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgbmlsLCBuaWwpCisgICAgICAgIGVu
ZAorICAgICAgICAKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBsb29wIHsKKyAg
ICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorCisgICAgICAgICAgICBhZGRVbmlxdWUo
bmFtZSwgcHJvZHVjdGlvbnMsIHBhcnNlUHJvZHVjdGlvbikKKworICAgICAgICAgICAgYnJlYWsg
aWYgdG9rZW4gPT0gIikiCisgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgfQorCisg
ICAgICAgICMgQWR2YW5jZSBhZnRlciB0aGUgIikiCisgICAgICAgIGFkdmFuY2UKKworICAgICAg
ICBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG9wY29kZSwgcHJvZHVjdGlvbnMpCisgICAg
ZW5kCitlbmQKKworZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86
OnJlYWQoZmlsZU5hbWUpLCBmaWxlTmFtZSkKK21hdGNoZXIgPSBwYXJzZXIucGFyc2UKKworY2xh
c3MgU3ViTWF0Y2gKKyAgICBhdHRyX3JlYWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0aW9ucworICAg
IAorICAgIGRlZiBpbml0aWFsaXplKGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBp
bmRleE1hcCA9IFtdCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGluZGV4TGlz
dC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwIDw8
IGluZGV4CisgICAgICAgICAgICBAcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNbaW5kZXhdCisg
ICAgICAgIH0KKyAgICBlbmQKKworICAgIGRlZiBtYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAg
ICAgICBpbmRleExpc3QubWFwIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAg
QGluZGV4TWFwW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCitlbmQKKworRmlsZS5vcGVuKCJC
MyIgKyBtYXRjaGVyLm5hbWUgKyAiLmgiLCAidyIpIHsKKyAgICB8IG91dHAgfAorCisgICAgb3V0
cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiIGZyb20g
I3tmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorCisgICAgb3V0cC5wdXRzICIjaWZuZGVmIEIz
I3ttYXRjaGVyLm5hbWV9X2giCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIEIzI3ttYXRjaGVyLm5h
bWV9X2giCisgICAgCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkIzVmFsdWUuaFwiIgorICAg
IAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IgorCisgICAg
b3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiIKKyAgICBvdXRwLnB1dHMgInZv
aWQgcnVuI3ttYXRjaGVyLm5hbWV9KFZhbHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFkYXB0b3IpIgor
ICAgIG91dHAucHV0cyAieyIKKworICAgICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZW1pdCBw
cm9wZXJseSBpbmRlbnRlZCBjb2RlLCBiZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUgZW1pdHRlci4g
SWYgeW91CisgICAgIyB3YW50IHRvIHNlZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0dGVkLCBvcGVu
IGl0IGluIGEgZ29vZCB0ZXh0IGVkaXRvciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBpdAorICAgICMg
Zm9yIHlvdS4KKworICAgICMgSW4gb2RkIHNpdHVhdGlvbnMsIHdlIG1heSBub3QgdXNlIHRoZSBp
bnB1dCB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAg
IG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKF92YWx1ZSk7IgorICAgICAgICAKKyAgICAjIFRoaXMg
anVzdCBwcm90ZWN0cyB0aGUgY2FsbGVyIGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHByb2R1
Y3Rpb25zIGhhdmluZyBkaWZmZXJlbnQgbGVuZ3Rocy4KKyAgICBkZWYgbWF0Y2hMZW5ndGgob3V0
cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAg
ICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rp
b24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9u
c1tpbmRleExpc3RzWy0xXVswXV0uY2hpbGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rpb24uY2hpbGRy
ZW4ubGVuZ3RoCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAg
ICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAg
ICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb2R1Y3Rpb25zW2lu
ZGV4TGlzdFswXV0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICBpZiBsZW5ndGggPiAwCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGlsZHJlbi5zaXpl
KCkgPj0gI3tsZW5ndGh9KSB7IgorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5k
CisKKyAgICAjIFRoaXMgZWZmaWNpZW50bHkgc2VsZWN0cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2Yg
cHJvZHVjdGlvbnMuIEl0IGFzc3VtZXMgdGhhdCBwcm9kdWN0aW9ucworICAgICMgYXJlIG5vdCBk
dXBsaWNhdGVkLiBJdCB5aWVsZHMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBh
bmQgdGhlIGNvcm91dGluZSBpcworICAgICMgcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIHNwZWNp
ZmljIGNvZGUgZm9yIHRoYXQgcHJvZHVjdGlvbi4gVGhlIGNvcm91dGluZSBpcyBnaXZlbiBsaXN0
cyBvZgorICAgICMgaW5kaWNlcyBvZiBwb3NzaWJseS1tYXRjaGluZyBwcm9kdWN0aW9ucy4KKyAg
ICBkZWYgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAg
ICAgICAjIEZpcnN0LCBzcGxpdCB0aGUgcHJvZHVjdGlvbnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJv
ZHVjdGlvbnMgd2l0aCBhbiBvcGNvZGUgYW5kIHByb2R1Y3Rpb25zCisgICAgICAgICMgd2l0aG91
dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNo
X3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAg
ICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1d
Lmhhc09wY29kZSA9PSBwcm9kdWN0aW9uLmhhc09wY29kZQorICAgICAgICAgICAgICAgIGluZGV4
TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5k
ZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgIyBOb3csIGVtaXQgcGF0dGVybiBtYXRjaGluZyBjb2RlLiBXZSBkbyBpdCBkaWZm
ZXJlbnRseSBmb3IgbGlzdHMgd2l0aCBhbiBvcGNvZGUgdGhhbiBmb3IKKyAgICAgICAgIyBsaXN0
cyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwg
aW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFz
T3Bjb2RlCisgICAgICAgICAgICAgICAgIyBOb3csIHdlIHNwbGl0IHRoaXMgaW5kZXggbGlzdCBp
bnRvIGdyb3VwcyBmb3IgZWFjaCBvcGNvZGUuCisgICAgICAgICAgICAgICAgZ3JvdXBzID0ge30K
KyAgICAgICAgICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwg
aW5kZXggfAorICAgICAgICAgICAgICAgICAgICBwcm9kdWN0aW9uID0gcHJvZHVjdGlvbnNbaW5k
ZXhdCisgICAgICAgICAgICAgICAgICAgIGlmIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0gPDwgaW5kZXgK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBz
W3Byb2R1Y3Rpb24ub3Bjb2RlXSA9IFtpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRl
bWVudC4KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5v
cGNvZGUoKSkgeyIKKyAgICAgICAgICAgICAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAg
ICAgICAgICAgICAgfCBvcGNvZGUsIHN1YkluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiY2FzZSAje29wY29kZX06IgorICAgICAgICAgICAgICAgICAgICBzdWJNYXRj
aCA9IFN1Yk1hdGNoLm5ldyhzdWJJbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAg
ICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25z
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAg
ICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6Igor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1
Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgIG1hdGNo
TGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJN
YXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRha2VzIHByb2R1Y3Rpb25zIHRo
YXQgaGF2ZSB0aGUgc2FtZSBvcGNvZGUgYW5kIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBm
cm9tIHRoZW0gYmFzZWQgb24KKyAgICAjIHRoZSBwcm9kdWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29s
dW1uLgorICAgIGRlZiBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBj
b2x1bW5JbmRleCkKKyAgICAgICAgaWYgY29sdW1uSW5kZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hp
bGRyZW4ubGVuZ3RoCisgICAgICAgICAgICB5aWVsZCAoMC4uLihwcm9kdWN0aW9ucy5zaXplKSku
dG9fYQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVuZAorCisgICAgICAgIHN1YlZhbHVl
ID0gbmV3VmFyCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgIG91dHAu
cHV0cyAiVmFsdWUqICN7c3ViVmFsdWV9ID0gI3t2YWx1ZU5hbWV9LT5jaGlsZCgje2NvbHVtbklu
ZGV4fSk7IgorCisgICAgICAgICMgV2UgbWF5IG5vdCB1c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUg
Y29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgICAgICBvdXRwLnB1dHMgIlVOVVNF
RF9QQVJBTSgje3N1YlZhbHVlfSk7IgorICAgICAgICAKKyAgICAgICAgc3ViUHJvZHVjdGlvbnMg
PSBwcm9kdWN0aW9ucy5tYXAgeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uIHwKKyAgICAgICAg
ICAgIHByb2R1Y3Rpb24uY2hpbGRyZW5bY29sdW1uSW5kZXhdCisgICAgICAgIH0KKworICAgICAg
ICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHN1YlZhbHVlLCBzdWJQcm9kdWN0aW9ucykgeworICAg
ICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5u
ZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAs
IHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4ICsgMSkgeworICAg
ICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRj
aC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgIGVuZAorCisgICAgZGVmIG1hdGNoUmVjdXJzaXZlbHko
b3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhv
dXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8
CisgICAgICAgICAgICAjIFdlIGFyZSBndWFyYW50ZWVkIHRoYXQgdGhpcyBpbmRleCBsaXN0IGNv
bnRhaW5zIHByb2R1Y3Rpb25zIHdpdGggdGhlIHNhbWUgb3Bjb2RlIGFuZAorICAgICAgICAgICAg
IyB0aGUgc2FtZSBsZW5ndGguCisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhp
bmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFs
dWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgMCkgeworICAgICAgICAgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5k
ZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBtYXRjaFJl
Y3Vyc2l2ZWx5KG91dHAsICJfdmFsdWUiLCBtYXRjaGVyLnByb2R1Y3Rpb25zKSB7CisgICAgICAg
IHwgaW5kZXhMaXN0IHwKKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBp
bmRleCB8CisgICAgICAgICAgICBwcm9kdWN0aW9uID0gbWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRl
eF0KKyAgICAgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVmFs
dWUqICN7cHJvZHVjdGlvbi52YXJOYW1lfSA9IF92YWx1ZTsiCisgICAgICAgICAgICBpbnRlcm5h
bEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRzID0gW10KKyAgICAg
ICAgICAgIHRyeUFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBudW1TY29wZXMgPSAwCisgICAg
ICAgICAgICBzZWVuID0ge30KKyAgICAgICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxlIHsK
KyAgICAgICAgICAgICAgICB8IHBhcmVudFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJOYW1l
LCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgbG9hZEV4cHIgPSAiI3twYXJlbnRWYXJO
YW1lfS0+Y2hpbGQoI3tpbmRleH0pIgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIHNlZW5bY2hpbGRWYXJOYW1lXQorICAgICAgICAgICAgICAgICAgICB0bXAgPSBuZXdWYXIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3t0bXB9ID0gI3tsb2FkRXhw
cn07IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3RtcH0gPT0gI3tjaGls
ZFZhck5hbWV9KSB7IgorICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VlbltjaGlsZFZhck5hbWVdID0g
dHJ1ZQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJWYWx1ZSogI3tjaGlsZFZhck5hbWV9ID0gI3tsb2FkRXhwcn07IgorCisgICAgICAgICAgICAg
ICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJC8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGNoaWxkTmFtZSA9fiAvXEFcJChbMC05XSspXFovCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5pc0ludCgjeyQxfSkpIHsiCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5oYXNJbnQoKSkgeyIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAg
ICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50
ZXJuYWwgb3Iga2luZCA9PSA6YW5vbkludGVybmFsCisgICAgICAgICAgICAgICAgICAgIG9wZXJh
bmRBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOm9wZXJhbmQgb3Iga2luZCA9
PSA6YW5vbk9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgdHJ5QXJndW1lbnRzIDw8IGNoaWxk
VmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBvciBraW5kID09IDpvcGVyYW5kCisgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChh
ZGFwdG9yLmFjY2VwdFJvb3QoX3ZhbHVlKSIKKyAgICAgICAgICAgIG91dHAucHV0cygiICAgICYm
IGFkYXB0b3IuYWNjZXB0SW50ZXJuYWxzKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIp
ICsgIikiKQorICAgICAgICAgICAgb3V0cC5wdXRzKCIgICAgJiYgYWRhcHRvci5hY2NlcHRPcGVy
YW5kcygiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAg
b3V0cC5wdXRzKCIgICAgJiYgYWRhcHRvci50cnkje3Byb2R1Y3Rpb24ubmFtZX0oIiArIHRyeUFy
Z3VtZW50cy5qb2luKCIsICIpICsgIikpIikKKyAgICAgICAgICAgIG91dHAucHV0cyAiICAgIHJl
dHVybjsiCisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAgICAgIG91
dHAucHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7
bWF0Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJBcmcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCit2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBUbXA6CisgICAgICAgIG91dC5wcmludCh0bXAo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEltbToKKyAgICAgICAgb3V0LnByaW50KCIk
IiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW1QdHI6CisgICAgICAg
IG91dC5wcmludGYoIiQweCV4IiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBZGRyOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zm
c2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIpIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEluZGV4OgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAg
ICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIs
IiwgaW5kZXgoKSk7CisgICAgICAgIGlmIChzY2FsZSgpICE9IDEpCisgICAgICAgICAgICBvdXQu
cHJpbnQoIiwiLCBzY2FsZSgpKTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAg
ICBvdXQucHJpbnQob2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgcG9pbnRlckR1bXAo
c3RhY2tTbG90KCkpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYWxsQXJnOgor
ICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KTsKKyAg
ICAgICAgb3V0LnByaW50KCIoY2FsbEFyZykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
U3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50KCImIiwgcG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJBcmdfaAorI2RlZmluZSBBaXJBcmdfaAorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5j
bHVkZSAiQjNUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgU3BlY2lhbDsKK2NsYXNzIFN0YWNrU2xvdDsKKworLy8gVGhpcyBj
bGFzcyBuYW1lIGlzIGFsc28gaW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIHdpbGwgc2F5
IGl0IGEgbG90LiBZb3UnbGwgc2VlIGNvZGUgbGlrZQorLy8gSW5zdCguLi4sIEFyZzo6aW1tKDUp
LCBBcmc6OmFkZHIodGhpbmcsIGJsYWgpLCAuLi4pCitjbGFzcyBBcmcgeworcHVibGljOgorICAg
IC8vIFRoZXNlIGVudW0gbWVtYmVycyBhcmUgaW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdl
IGhhdmUgdG8gbWVudGlvbiB0aGVtIGEgbG90LgorICAgIGVudW0gS2luZCA6IGludDhfdCB7Cisg
ICAgICAgIFRtcCwKKyAgICAgICAgSW1tLAorICAgICAgICBJbW1QdHIsCisgICAgICAgIEFkZHIs
CisgICAgICAgIFN0YWNrLAorICAgICAgICBDYWxsQXJnLAorICAgICAgICBJbmRleCwKKyAgICAg
ICAgU3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAgICAgICBV
c2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsKKworICAgIGVudW0gVHlw
ZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAgIH07CisKKyAgICBzdGF0
aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsK
KyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNEZWYoUm9sZSByb2xlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VEZWY6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRp
YyBUeXBlIHR5cGVGb3JCM1R5cGUoQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAg
ICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAgICAgY2FzZSBE
b3VibGU6CisgICAgICAgICAgICByZXR1cm4gRlA7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBHUDsKKyAgICB9CisKKyAgICBBcmcoKQor
ICAgIHsKKyAgICB9CisKKyAgICBBcmcoQWlyOjpUbXAgdG1wKQorICAgICAgICA6IG1fa2luZChU
bXApCisgICAgICAgICwgbV9iYXNlKHRtcCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIEFy
ZyBpbW0oaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBJbW07CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tUHRyKGlu
dHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IEltbVB0cjsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBhZGRyZXNzKEFpcjo6
VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNl
LmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBB
ZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsK
KyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKyAg
ICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmcoaW50MzJfdCBv
ZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNp
Z25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2Fz
ZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgY2FzZSA4Ogor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9n
U2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7Cisg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJu
IDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgoQWlyOjpUbXAg
YmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJU
KGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2NhbGUpKTsKKyAg
ICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4OworICAgICAg
ICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBpbmRleDsK
KyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihzY2FsZSk7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQor
ICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFNwZWNp
YWw7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oc3Bl
Y2lhbCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZz
ZXQgPT0gb3RoZXIubV9vZmZzZXQKKyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tp
bmQKKyAgICAgICAgICAgICYmIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYm
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleAorICAgICAgICAgICAgJiYgbV9zY2FsZSA9PSBvdGhl
ci5tX3NjYWxlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcmcmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0K
KworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAqdGhpcyAhPSBB
cmcoKTsgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2tpbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4ga2luZCgpID09IFRtcDsKKyAgICB9CisKKyAgICBib29sIGlzSW1tKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tOworICAgIH0KKworICAgIGJvb2wgaXNJ
bW1QdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW1QdHI7Cisg
ICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAgIGJvb2wgaXNTcGVj
aWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAg
ICB9CisKKyAgICBBaXI6OlRtcCB0bXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBUbXApOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGludHB0
cl90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW1tIHx8
IGtpbmQoKSA9PSBJbW1QdHIpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorCisg
ICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gSW1tUHRyKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4obV9vZmZz
ZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVy
biBtX2Jhc2U7CisgICAgfQorCisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQzMl90PihtX3NjYWxlKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtp
bmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCk7CisgICAgfQorCisgICAgU3RhY2tTbG90KiBzdGFj
a1Nsb3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7Cisg
ICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RhY2tTbG90Kj4obV9vZmZzZXQpOworICAgIH0K
KworICAgIEFpcjo6VG1wIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBzY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4
KTsKKyAgICAgICAgcmV0dXJuIG1fc2NhbGU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9nU2Nh
bGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOworICAg
IH0KKworICAgIEFpcjo6U3BlY2lhbCogc3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoa2luZCgpID09IFNwZWNpYWwpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFp
cjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBib29sIGlzR1BUbXAoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOworICAgIH0K
KworICAgIGJvb2wgaXNGUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAo
KSAmJiB0bXAoKS5pc0ZQKCk7CisgICAgfQorICAgIAorICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMg
QXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEdQIHZhbHVlLgor
ICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBJbW1QdHI6CisgICAgICAgIGNhc2UgQWRk
cjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAg
IGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzR1BUbXAoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1
c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEZQIHZhbHVlLgorICAgIGJvb2wgaXNG
UCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNl
IEltbToKKyAgICAgICAgY2FzZSBJbW1QdHI6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIElu
ZGV4OgorICAgICAgICBjYXNlIEJhc2U6CisgICAgICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAg
ICBjYXNlIENhbGxBcmc6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBU
bXA6CisgICAgICAgICAgICByZXR1cm4gaXNGUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgYm9vbCBoYXNUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7
CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIEltbVB0cjoKKyAgICAgICAgY2FzZSBT
cGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmlndW91cyBmb3Igc29tZSBhcmcga2luZHMu
IENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisKKyAgICBib29sIGlzVHlwZShUeXBlIHR5
cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBH
UDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQKCk7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAg
ICAgICByZXR1cm4gaXNGUCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc0dQUigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOwor
ICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRt
cCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAgICB9CisKKyAgICBGUFJSZWcg
ZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcHIoKTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAo
KSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1w
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwVG1wSW5kZXgoKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5k
ZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnRtcEluZGV4KCk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBG
YXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2lu
ZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAg
ZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6
CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5k
ZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMgaXMgc21hcnQgZW5vdWdoIHRv
IGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVz
ZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6
CisgICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVyY3gpCisgICAgLy8KKyAgICAvLyBUaGlzIGRl
ZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUsIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAg
ICBjYXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xlLCBhcmdUeXBl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBm
dW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAg
ICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXV0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbVB0cigpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW1QdHIoKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyVmFsdWUoKSk7CisgICAgfQorCisgICAg
TWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyhtX2Jhc2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQor
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1i
bGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCks
IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisgICAgICAg
ICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludHB0cl90IG1fb2Zm
c2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsgSW1tIH07CisgICAgaW50MzJfdCBtX3NjYWxl
IHsgMSB9OworICAgIEFpcjo6VG1wIG1fYmFzZTsKKyAgICBBaXI6OlRtcCBtX2luZGV4OworfTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQXJnX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2su
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNp
Y0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2
b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJCQiIsICp0aGlzLCAiOlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0
IDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNCbG9ja19oCisKKyNp
bmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICIjIjsK
KworICAgIHR5cGVkZWYgVmVjdG9yPEluc3Q+IEluc3RMaXN0OworICAgIHR5cGVkZWYgVmVjdG9y
PEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworICAgIAorICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRv
ciBiZWdpbigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0OjppdGVy
YXRvciBlbmQoKSB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisgICAgSW5zdExpc3Q6OmNvbnN0
X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAg
SW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuZW5k
KCk7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXplKCk7
IH0KKyAgICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5z
dHNbaW5kZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2luc3Rz
W2luZGV4XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5z
dHMubGFzdCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0
JiYgaW5zdCkKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0
PihpbnN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAg
IG1faW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4u
LikpOworICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0
aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUK
KyAgICAvLyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmYWxsLXRo
cm91Z2ggb2YgYSBjb25kaXRpb25hbCBicmFuY2guCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tp
bmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3Vj
Y2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBTdWNj
ZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOwor
ICAgIAorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgIH0KKworICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBTdWNjZXNzb3JM
aXN0IG1fc3VjY2Vzc29yczsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJs
aWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6
IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBt
X2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJp
bnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2Nr
OworfTsKKworRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKEJhc2ljQmxvY2sqIGJsb2NrKQor
eworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxvY2spOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJCYXNpY0Jsb2NrX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxT
cGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ0NhbGxTcGVjaWFsOjpDQ2FsbFNwZWNpYWwoKQorICAg
IDogU3BlY2lhbCgiQ0NhbGwiKTsKK3sKKyAgICBtX2Nsb2JiZXJlZFJlZ3MgPSBSZWdpc3RlclNl
dDo6YWxsUmVnaXN0ZXJzKCk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJT
ZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lz
dGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVn
cy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCitDQ2Fs
bFNwZWNpYWw6On5DQ2FsbFNwZWNpYWwoKQoreworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6Zm9y
RWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxi
YWNrPiYgY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OlVzZSwg
QXJnOjpHUCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IGluc3QuYXJncy5z
aXplKCk7ICsraSkgeworICAgICAgICAvLyBGb3IgdGhlIHR5cGUsIHdlIGNhbiBqdXN0IHF1ZXJ5
IHRoZSBhcmcncyB0eXBlLiBUaGUgYXJnIHdpbGwgaGF2ZSBhIHR5cGUsIGJlY2F1c2Ugd2UKKyAg
ICAgICAgLy8gcmVxdWlyZSB0aGVzZSBhcmdzIHRvIGJlIGFyZ3VtZW50IHJlZ2lzdGVycy4KKyAg
ICAgICAgY2FsbGJhY2soaW5zdC5hcmdzW2ldLCBBcmc6OlVzZSwgaW5zdC5hcmdzW2ldLnR5cGUo
KSk7CisgICAgfQorfQorCitib29sIENDYWxsU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQor
eworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgc3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbVB0
cjoKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgIGNhc2UgQXJnOjpBZGRyOgorICAgIGNhc2UgQXJn
OjpTdGFjazoKKyAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaW5zdC5hcmdz
WzFdLmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWluc3QuYXJn
c1tpXS5pc1JlZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChp
bnN0LmFyZ3NbaV0gPT0gVG1wKHNjcmF0Y2hSZWdpc3RlcikpCisgICAgICAgICAgICByZXR1cm4g
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6
OmFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICAvLyBBcmcgMSBj
YW4gYmUgYSBzdGFjayBhZGRyZXNzIGZvciBzdXJlLgorICAgIGlmIChhcmdJbmRleCA9PSAxKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
Q0NhbGxTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNl
dCYpCit7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6OmdlbmVyYXRlKElu
c3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAg
c3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbVB0cjoKKyAg
ICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGluc3QuYXJnc1sxXS5w
b2ludGVyVmFsdWUoKSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0
Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAg
IGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJnOjpBZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOwor
ICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIENDYWxsSGVscGVy
czo6SnVtcCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNs
b2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3ZvaWQg
Q0NhbGxTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoImZ1bmN0aW9uIGNhbGwgdGhhdCB1c2VzIHRoZSBDIGNhbGxpbmcgY29udmVu
dGlvbi4iKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDQ2FsbFNwZWNpYWxfaAorI2RlZmlu
ZSBBaXJDQ2FsbFNwZWNpYWxfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKKy8vIFVzZSB0aGlzIHNwZWNpYWwgZm9yIGNvbnN0cnVjdGluZyBhIEMg
Y2FsbC4gQXJnIDAgaXMgb2YgY291cnNlIGEgU3BlY2lhbCBhcmcgdGhhdCByZWZlcnMgdG8gdGhl
CisvLyBDQ2FsbFNwZWNpYWwgb2JqZWN0LiBBcmcgMSBpcyB0aGUgY2FsbGVlLCBhbmQgaXQgY2Fu
IGJlIGFuIEltbVB0ciwgYSByZWdpc3Rlciwgb3IgYW4gYWRkcmVzcy4gVGhlCisvLyByZW1haW5p
bmcgYXJncyBhcmUganVzdCB0aGUgc2V0IG9mIGFyZ3VtZW50IHJlZ2lzdGVycyB1c2VkIGJ5IHRo
aXMgY2FsbC4gRm9yIGFyZ3VtZW50cyB0aGF0IGdvIHRvCisvLyB0aGUgc3RhY2ssIHlvdSBoYXZl
IHRvIGRvIHRoZSBncnVudCB3b3JrIG9mIGRvaW5nIHRob3NlIHN0YWNrIHN0b3Jlcy4gSW4gZmFj
dCwgdGhlIG9ubHkgcmVhc29uIHdoeQorLy8gd2Ugc3BlY2lmeSB0aGUgYXJndW1lbnQgcmVnaXN0
ZXJzIGFzIGFyZ3VtZW50cyB0byBhIGNhbGwgaXMgc28gdGhhdCB0aGUgbGl2ZW5lc3MgYW5hbHlz
aXMgY2FuIHNlZQorLy8gdGhhdCB0aGV5IGdldCB1c2VkIGhlcmUuIEl0IHdvdWxkIGJlIHdyb25n
IHRvIGF1dG9tYWdpY2FsbHkgcmVwb3J0IGFsbCBhcmd1bWVudCByZWdpc3RlcnMgYXMgYmVpbmcK
Ky8vIHVzZWQgYmVjYXVzZSBpZiB3ZSBoYWQgYSBjYWxsIHRoYXQgZGlkbid0IHBhc3MgdGhlbSwg
dGhlbiB0aGV5J2QgYXBwZWFyIHRvIGJlIGxpdmUgdW50aWwgc29tZQorLy8gY2xvYmJlciBwb2lu
dCBvciB0aGUgcHJvbG9ndWUsIHdoaWNoZXZlciBoYXBwZW5lZCBzb29uZXIuCisKK2NsYXNzIEND
YWxsU3BlY2lhbCA6IHB1YmxpYyBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDQ2FsbFNwZWNpYWwo
KTsKKyAgICB+Q0NhbGxTcGVjaWFsKCk7CisKKyAgICAvLyBZb3UgY2Fubm90IHVzZSB0aGlzIHJl
Z2lzdGVyIHRvIHBhc3MgYXJndW1lbnRzLiBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIHJl
Z2lzdGVyIGlzIG5vdAorICAgIC8vIHVzZWQgZm9yIGFyZ3VtZW50cyBpbiB0aGUgQyBjYWxsaW5n
IGNvbnZlbnRpb24uIEJ5IHRoZSB3YXksIHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYXVz
ZXMKKyAgICAvLyB0aGlzIHNwZWNpYWwgdG8gYmUgc3BlY2lmaWMgdG8gQyBjYWxscy4KKyAgICBz
dGF0aWMgY29uc3QgR1BSUmVnIHNjcmF0Y2hSZWdpc3RlciA9IEdQUkluZm86Om5vbkFyZ0dQUjAu
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExh
bWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlk
KEluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBh
cmdJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBj
b25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5l
cmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsK
KyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSBvdmVycmlk
ZTsKKyAgICAKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIFJlZ2lzdGVyU2V0IG1fY2xvYmJlcmVkUmVnczsKK307CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckNDYWxsU3Bl
Y2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWly
Q29kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK0NvZGU6OkNvZGUoKQoreworfQorCitDb2RlOjp+Q29kZSgpCit7Cit9CisKK0Jhc2ljQmxv
Y2sqIENvZGU6OmFkZEJsb2NrKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4g
YmxvY2sobmV3IEJhc2ljQmxvY2sobV9ibG9ja3Muc2l6ZSgpKSk7CisgICAgQmFzaWNCbG9jayog
cmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9j
aykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgQ29kZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAg
ICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7CisgICAgaWYgKG51bVN0YWNrU2xvdHMo
KSkgeworICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxuIik7CisgICAgICAgIGZvciAo
U3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIg
ICAgIiwgZGVlcER1bXAoc2xvdCksICJcbiIpOworICAgIH0KKyAgICBpZiAobnVtU3BlY2lhbHMo
KSkgeworICAgICAgICBvdXQucHJpbnQoIlNwZWNpYWxzOlxuIik7CisgICAgICAgIGZvciAoU3Bl
Y2lhbCogc3BlY2lhbCA6IHNwZWNpYWxzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAi
LCBkZWVwRHVtcChzcGVjaWFsKSwgIlxuIik7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDb2RlX2gKKyNkZWZpbmUgQWly
Q29kZV9oCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lh
bC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWlyIHsKKworLy8gVGhp
cyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVp
cmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0ZWQgbWFjaGluZSBj
b2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUgY29k
ZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBDb2RlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFk
ZEJsb2NrKCk7CisKKyAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCgpOworCisgICAgU3BlY2lh
bCogYWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4pOworCisgICAgLy8gVGhpcyBp
cyB0aGUgc3BlY2lhbCB5b3UgbmVlZCB0byBtYWtlIGEgQyBjYWxsIQorICAgIFNwZWNpYWwqIGND
YWxsU3BlY2lhbCgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAg
QmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2lu
ZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAsIG1faW5kZXgo
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJh
dG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+YXQobV9p
bmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4ICsgMSk7CisgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAg
eworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1cmUtPnNpemUoKSAmJiAhbV9w
cm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAg
ICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKworICAgICAgICBQcm9jZWR1cmUqIG1fcHJvY2Vk
dXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBudW1CbG9ja3MoKSk7IH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tT
bG90czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIFNw
ZWNpYWwqIG1fY2FsbFNwZWNpYWw7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBBaXJDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorI2RlZmlu
ZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVj
dCBHZW5lcmF0aW9uQ29udGV4dCB7CisgICAgdHlwZWRlZiB2b2lkIExhdGVQYXRoRnVuY3Rpb24o
Q0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRh
c2s8TGF0ZVBhdGhGdW5jdGlvbj4gTGF0ZVBhdGg7CisKKyAgICBWZWN0b3I8UmVmUHRyPExhdGVQ
YXRoPj4gbGF0ZVBhdGhzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKworI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQob3Bjb2RlLCAiICIsIGxpc3REdW1wKGFyZ3MpLCAi
ICA7ICIsICpvcmlnaW4pOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJJbnN0X2gKKyNkZWZpbmUgQWlySW5zdF9oCisKKyNpbmNsdWRl
ICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisK
K25hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK3N0cnVjdCBJ
bnN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAg
ICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgICAgIDogb3JpZ2luKG9y
aWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwg
VmFsdWUqIG9yaWdpbiwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
OiBhcmdzeyBhcmcsIGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAg
ICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBv
cGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKKyAgICAgICAg
OiBhcmdzKGFyZ3VtZW50cykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9w
Y29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFs
dWUqIG9yaWdpbiwgQXJnTGlzdCYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzKFdURjo6bW92
ZShhcmd1bWVudHMpKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2Rl
KG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3Jz
IGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBmb3Ig
dGhpbmdzIHRoYXQKKyAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlm
IHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4geW91J3JlCisgICAg
Ly8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCisKKyAgICAvLyBUaGlzIG9ubHkgd2Fsa3MgdGhv
c2UgVG1wcyB0aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCwgYW5kIGl0IGRvZXNuJ3QgdGVs
bCB5b3UgdGhlaXIgcm9sZQorICAgIC8vIG9yIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CisgICAgeworICAgICAgICBmb3IgKEFyZyBhcmcgOiBhcmdzKQorICAgICAgICAgICAgYXJnLmZv
ckVhY2hUbXBGYXN0KGZ1bmN0b3IpOworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCBFYWNoQXJn
Q2FsbGJhY2soQXJnJiwgQXJnOjpSb2xlLCBBcmc6OlR5cGUpOworICAgIAorICAgIC8vIENhbGxz
IHRoZSBmdW5jdG9yIHdpdGggKGFyZywgcm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24gaXMgYXV0
by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpOworCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xlLCB0eXBl
KS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZ1JvbGUoCisg
ICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUp
IHsKKyAgICAgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcChyb2xlLCB0eXBlLCBmdW5jdG9yKTsK
KyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGlu
c3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9ja3Mgc29tZSBleHRyYSBmdW5jdGlv
bmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0OworCisgICAgLy8gUmVwb3J0cyBh
bnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBOb3Rl
IHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3
b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIGNvbnN0IFJlZ2lzdGVyU2V0
JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVzZSB0aGlzIHRvIHJlcG9ydCB3aGlj
aCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBiZWZvcmUgY29k
ZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9ydFVzZWRSZWdpc3Rl
cnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgdm9pZCBy
ZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7CisKKyAgICAvLyBJcyB0aGlz
IGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9ybXMgcmlnaHQgbm93PyBUaGlzIGZ1
bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4K
KyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBBc3N1bWluZyB0aGlzIGluc3RydWN0
aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdpbGwgaXQgc3RpbGwgYmUgaW4gb25l
IG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1dCBhbiBBZGRyIHJlZmVyZW5jaW5n
IHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFyZywgb2YgY291cnNlKSBpbiB0aGUK
KyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0aGlzOiBpdCB3YWxrcyB0aGUgYXJn
cyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNwaWxsaW5nOworICAgIC8vIGlmIGl0
IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYgaXQgY2FuIHJlcGxhY2UgdGhlIEFy
Zzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAgIC8vIGZpbmRzIGEgbm9uLVRtcCBB
cmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNoVG1wIHRvIGRvIGEgcmVwbGFjZW1l
bnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJh
dGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBhZG1pdHNTdGFjayh1bnNpZ25l
ZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5zdHJ1
Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIgYmFja2VuZC4gSWYgdGhpcyBpcyB0
aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUganVtcCB0aGF0IG5lZWRzIHRvIGJl
IGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRoZSAiZWxzZSIKKyAgICAvLyBjYXNl
IGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBv
cGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShDQ2Fs
bEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFyZ3M7CisgICAgVmFsdWUqIG9yaWdpbjsgLy8g
VGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLgorICAgIE9wY29kZSBvcGNv
ZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBB
aXJJbnN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdElu
bGluZXNfaAorI2RlZmluZSBBaXJJbnN0SW5saW5lc19oCisKKyNpbmNsdWRlICJBaXJJbnN0Lmgi
CisjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFscy5oIgor
I2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworYm9vbCBJbnN0OjpoYXNT
cGVjaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXJncy5zaXplKCkgJiYgYXJnc1swXS5pc1Nw
ZWNpYWwoKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVn
cygpCit7CisgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUNsb2JiZXJlZFJlZ3Mo
KnRoaXMpOworfQorCit2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVz
ZWRSZWdpc3RlcnMoKnRoaXMsIHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1No
aWZ0VmFsaWQoSW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KQorICAgIHJldHVybiBpbnN0LmFy
Z3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyOjpjeCk7CisjZWxzZQorICAgIHJldHVybiB0cnVlOwor
I2VuZGlmCit9ICAgCisKK2lubGluZSBib29sIGlzTHNoaWZ0MzJWYWx1ZShJbnN0JiBpbnN0KQor
eworICAgIHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNyBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgor
IyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKworIyBTeWxsYWJ1czoKKyMKKyMgUm9sZXMgYW5kIHR5cGVzOgorIyBVOkcg
PT4gdXNlIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RyA9PiBk
ZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RyA9PiB1c2Ug
YW5kIGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVOkYgPT4g
dXNlIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpGID0+IGRlZiBvZiBhIGZsb2F0
IHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkYgPT4gdXNlIGFuZCBkZWYgb2YgYSBmbG9hdCByZWdp
c3RlciBvciB2YWx1ZQorIworIyBBcmd1bWVudCBraW5kczoKKyMgVG1wID0+IHRlbXBvcmFyeSBv
ciByZWdpc3RlcgorIyBJbW0gPT4gMzItYml0IGltbWVkaWF0ZSBpbnQKKyMgSW1tUHRyID0+IFRy
dXN0ZWRJbW1QdHIKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZz
ZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVz
cworIworIyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVu
ZGVyc3RhbmRzIHRoYXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2Yg
dGhpbmdzLiBTbywgYWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0
aW9uIHN0eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJl
IG1lYW5pbmdmdWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToK
KyMKKyMgRm9vNDIgVTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBh
cnNlciB3b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpH
LCBVRDpGCisjICAgICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28t
Zm9ybSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQg
dXNlcytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhl
cmUgaGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8g
TWFjcm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQz
MikuCisKK0FkZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBBZGRyCisgICAg
SW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBUbXAsIEFkZHIKKworQWRkMzIgVTpHLCBVOkcs
IEQ6RworICAgIEltbSwgVG1wLCBUbXAKKworQW5kMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAK
KyAgICBJbW0sIFRtcAorICAgIFRtcCwgQWRkcgorICAgIEFkZHIsIFRtcAorICAgIEltbSwgQWRk
cgorCitMc2hpZnQzMiBVOkcsIFVEOkcKKyAgICBUbXAqLCBUbXAKKyAgICBJbW0sIFRtcAorCitN
dWwzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorCitNb3ZlIFU6Rywg
RDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIEltbVB0ciwgVG1wCisgICAgQWRk
ciwgVG1wIGFzIGxvYWQgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2Rl
LWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBUbXAsIEFkZHIgYXMgc3RvcmUK
KworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxv
YWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKworTW92ZTY0VG9Eb3VibGUg
VTpHLCBEOkYKKyAgICBUbXAsIFRtcAorCitNb3ZlRG91YmxlVG82NCBVOkYsIEQ6RworICAgIFRt
cCwgVG1wCisKK1JldAorCisjIEFpciBhbGxvd3MgZm9yIGV4b3RpYyBiZWhhdmlvci4gQSBQYXRj
aCdzIGJlaGF2aW9yIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIFNwZWNpYWwgb3BlcmFu
ZCwKKyMgd2hpY2ggbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4KK3NwZWNpYWwgUGF0Y2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJT
cGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworU3BlY2lhbDo6U3BlY2lhbChjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9uYW1lKG5h
bWUpCisgICAgLCBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVjaWFsOjp+U3BlY2lhbCgp
Cit7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChtX25hbWUpOworICAgIGlmIChtX2luZGV4ICE9IFVJTlRfTUFYKQorICAg
ICAgICBvdXQucHJpbnQobV9pbmRleCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZGVlcER1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoKnRoaXMsICI6ICIpOworICAg
IGRlZXBEdW1wSW1wbChvdXQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGVjaWFsX2gKKyNkZWZpbmUgQWlyU3Bl
Y2lhbF9oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFt
YmRhLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgR2VuZXJhdGlvbkNvbnRleHQ7CisKK2NsYXNzIFNwZWNpYWwgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFNwZWNpYWwpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFNwZWNpYWwoY29uc3QgY2hhciogbmFtZSk7CisgICAgdmlydHVhbCB+U3Bl
Y2lhbCgpOworCisgICAgY29uc3QgY2hhciogbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsg
fQorCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJk
YTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlk
KEluc3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25l
ZCBhcmdJbmRleCkgPSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCBvbiBmb3IgZWFjaCBJ
bnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8K
KyAgICAvLyBndWFyYW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2VkIGZyb20ganVzdCBvbmUg
SW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywKKyAgICAvLyBpZiB5b3Ug
d2FudCB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5lcmF0ZSgpLCB0aGVuIHlv
dSBoYXZlIHRvIGVpdGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVyYXRlIEFpciB0aGF0IHN0
YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5zdCwgYW5kIHRoZW4gbWVy
Z2UKKyAgICAvLyAgICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBwcm9iYWJseSBub3QgZ3Jl
YXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0aGF0CisgICAgLy8gICAg
QWlyIGRpZG4ndCBkdXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVwbGljYXRpb24gZGlkbid0
IGNhdXNlIGFueSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8gICAgcmVnaXN0ZXIgYXNz
aWdubWVudC4KKyAgICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNpYWwgbWFpbnRhaW4gYSBI
YXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYW5hbHlz
aXMKKyAgICAvLyAgICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlzIHBlcmZvcm1lZCBqdXN0
IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdheQorICAgIC8vICAgIGZv
ciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRvIGJlIHJlYWxsb2NhdGVk
LiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29uc3VsdCB0aGUgSGFzaE1h
cC4KKyAgICAvLworICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVzZSAoMSkgYW5kIGZpcmUg
dXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisgICAgLy8KKyAgICAvLyBO
b3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBvcnRVc2VkUmVnaXN0ZXJz
KCkgYmVpbmcgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8gYXMgZ2VuZXJhdGUoKS4g
SWYgd2UgY291bGQgcmVseSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1c3QgaGF2ZSBlYWNoIFNw
ZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBvZiBSZWdpc3RlclNldCdz
IGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0IG9yZGVyIGluCisgICAg
Ly8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5jZSBpcyB1bmxpa2VseSB0
byBjaGFuZ2Ugc2luY2UgaXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBwZXJmb3JtYW5jZSBvZiB0
aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJyZW50bHksIHdlIGRvICgx
KSBmb3IgQjMgc3RhY2ttYXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJz
KEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIENDYWxs
SGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNv
bnRleHQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2Ji
ZXJlZFJlZ3MoSW5zdCYpID0gMDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBjb25zdCBjaGFyKiBtX25h
bWU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERlZXBTcGVjaWFsRHVtcCB7
CitwdWJsaWM6CisgICAgRGVlcFNwZWNpYWxEaW1wKFNwZWNpYWwqIHNwZWNpYWwpCisgICAgICAg
IDogbV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3BlY2lhbCkKKyAgICAg
ICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3BlY2lhbCog
bV9zcGVjaWFsOworfTsKKworRGVlcFNwZWNpYWxEdW1wIGRlZXBEdW1wKFNwZWNpYWwqIHNwZWNp
YWwpCit7CisgICAgcmV0dXJuIERlZXBTcGVjaWFsRHVtcChzcGVjaWFsKTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclN0YWNrU2xvdF9oCisjZGVmaW5lIEFpclN0
YWNrU2xvdF9oCisKKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
U3RhY2tTbG90dmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFja1Nsb3Qgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVy
biBtX2J5dGVTaXplOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4OyB9CisKKyAgICBTdGFja1Nsb3RWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRl
ZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4
LCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV9ieXRlU2l6ZShieXRlU2l6ZSkK
KyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAg
eworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgU3RhY2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3Rh
Y2tTbG90RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoU3RhY2tTbG90KiBz
bG90KQorICAgICAgICA6IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisg
ICAgICAgICAgICBtX3Nsb3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0YWNrU2xv
dCogbV9zbG90OworfTsKKworRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoU3RhY2tTbG90KiBz
bG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3RhY2tTbG90X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFRtcDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAg
ICAgb3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChpc1JlZygpKSB7CisgICAgICAgIG91dC5wcmludChyZWcoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoaXNHUFRtcCgpKSB7CisgICAgICAgIG91dC5wcmludCgiJXRtcCIs
IGdwVG1wSW5kZXgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQo
IiVmdG1wIiwgZnBUbXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wX2gKKyNkZWZpbmUgQWlyVG1wX2gKKworI2luY2x1
ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgYSByZWdpc3Rlci4gSXQgY2Fu
IGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBvciBGUFIuIEl0IGNhbiBhbHNvCisvLyBiZSB1
c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9yYXJ5
KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJzZSBu
YW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGlzIG5hbWUgYSBsb3QuCisKK2NsYXNz
IFRtcCB7CitwdWJsaWM6CisgICAgVG1wKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgewor
ICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJl
ZykgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIG1fdmFs
dWUgPSBlbmNvZGVHUFIocmVnLmdwcigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJlZy5mcHIoKSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV92YWx1ZSA9IDA7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBncFRtcEZvcklu
ZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVHUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBl
bmNvZGVGUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c3RhdGljIFRtcCBmb3JSYXdWYWx1ZSh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRt
cCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gaW5kZXg7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuICEhbV92YWx1ZTsgfQorCisgICAgYm9vbCByYXdWYWx1ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWU7IH0KKworICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNFbmNvZGVkR1AobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUChtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUFIo
bV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNFbmNvZGVkRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNSZWco
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1BSKCkgfHwgaXNGUFIoKTsKKyAgICB9
CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVH
UFIobV92YWx1ZSk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZGVjb2RlRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIFJlZyByZWcoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncHIo
KTsKKyAgICAgICAgcmV0dXJuIGZwcigpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5k
ZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQVG1wKG1fdmFsdWUpOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGRlY29kZUZQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcElu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1
cm4gZ3BUbXBJbmRleCgpOworICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWdu
ZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAg
IHN0YXRpYyBpbnQgZW5jb2RlRlAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1
cm4gLTEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcg
Z3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVy
OjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQ
UlJlZyBmcHIpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3Nl
bWJsZXI6OmZpcnN0RlBSUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNv
ZGVHUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUFIo
TWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEgKyBpbmRleDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgaW50IGVuY29kZUZQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0g
aW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1AoaW50IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCBpc0VuY29kZWRGUChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPCAw
OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQUihpbnQgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmIHZhbHVlIDw9IGVuY29kZUdQ
UihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGlzRW5jb2RlZEZQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNv
ZGVkRlAodmFsdWUpICYmIHZhbHVlID49IGVuY29kZWRGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RG
UFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlz
RW5jb2RlZEdQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBU
bXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAm
JiAhaXNFbmNvZGVkRlBSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29k
ZUdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVl
KSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZh
bHVlIC0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcg
ZGVjb2RlRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIo
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAg
ICAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkg
KworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1
ZSAtIChlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAg
IH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgewor
ICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChl
bmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsK
KyAgICB9CisKKyAgICAvLyAwOiBlbXB0eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQg
dGhlbiBHUCB0ZW1wcy4KKyAgICAvLyBuZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4K
KyAgICBpbnQgbV92YWx1ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEFpclRtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3NzYgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisj
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29kZQor
ICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2FkcworCisgICAgZGVmIGlu
aXRpYWxpemUobmFtZSwgc3BlY2lhbCkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBz
cGVjaWFsID0gc3BlY2lhbAorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAgICAgICAgICAgQG92
ZXJsb2FkcyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIG1hc21OYW1lCisg
ICAgICAgIG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVuZAorZW5kCisKK2Ns
YXNzIEFyZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAgZGVmIGluaXRpYWxp
emUocm9sZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAgIEB0eXBlID0gdHlw
ZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9yZWFkZXIgOnNpZ25h
dHVyZSwgOmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUsIGZvcm1zKQorICAg
ICAgICBAc2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9IGZvcm1zCisgICAg
ZW5kCitlbmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0cl9h
Y2Nlc3NvciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkKKyAgICAgICAgQG5h
bWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQKKworICAgIGRlZiA9
PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAgICAgICAgICBAbmFt
ZSA9PSBvdGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlci5uYW1l
IGFuZCBAc3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAorICAgIGVuZAorCisg
ICAgZGVmIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9PSAiQWRkciIKKyAg
ICAgICAgICAgIFsiQWRkciIsICJTdGFja1Nsb3QiLCAiQ2FsbEFyZyJdCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBhcmdL
aW5kcworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xhc3Mg
Rm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0aWFs
aXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBAYWx0
TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3Jl
YWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmls
ZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAg
IEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisg
ICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNz
IFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBp
bml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAg
ICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisg
ICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVy
LnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAg
ICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmlu
ZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJp
bmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVy
cm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFp
c2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlz
ZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAg
IGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhu
YW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisg
ICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAv
XEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hl
biAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5l
TnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAgICAg
ICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAk
JikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNl
LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBU
b2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBl
bHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVO
YW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0u
aW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAg
ZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzVUQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xB
KChVKXwoRCl8KFVEKSlcWi8KK2VuZAorCitkZWYgaXNHRih0b2tlbikKKyAgICB0b2tlbiA9fiAv
XEEoKEcpfChGKSlcWi8KK2VuZAorCitkZWYgaXNLaW5kKHRva2VuKQorICAgIHRva2VuID1+IC9c
QSgoVG1wKXwoSW1tKXwoSW1tUHRyKXwoQWRkcil8KEluZGV4KSlcWi8KK2VuZAorCitkZWYgaXNL
ZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0
b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2Vu
ZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05
X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAg
ICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChk
YXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tl
bgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAg
ICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQor
ICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAg
ICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2Nv
bW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAg
ZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmlu
Z30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKwor
ICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcK
KyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50
aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAor
CisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNV
RChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAg
ICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAg
IHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQp
CisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29u
c3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJy
b3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tUHRyLCBUbXAsIEFkZHIsIG9yIEluZGV4KSIpIHVu
bGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAg
IGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIAorICAg
ICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgK
KworICAgICAgICAgICAgaWYgdG9rZW4gPT0gInNwZWNpYWwiCisgICAgICAgICAgICAgICAgY29u
c3VtZSgic3BlY2lhbCIpCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVu
dGlmaWVyCisKKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBz
cGVjaWFsIG9wY29kZSIpIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorCisgICAgICAgICAgICAgICAg
cmVzdWx0W29wY29kZU5hbWVdID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCB0cnVlKQorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmll
cgorCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAg
ICAgICAgIG9wY29kZSA9IHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIG9wY29kZS5z
cGVjaWFsCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUg
PSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXN1
bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAg
ICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAgICAgICAgICAgICAgZm9ybXMgPSBbXQorICAgICAg
ICAgICAgICAgIGlmIGlzVUQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAg
ICAgICAgICAgICAgICAgICAgICAgcm9sZSA9IGNvbnN1bWVSb2xlCisgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdW1lKCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb25z
dW1lVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBzaWduYXR1cmUgPDwgQXJnLm5ldyhyb2xlLCB0eXBlKQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAg
a2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAorICAgICAg
ICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2lu
ZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VF
cnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5hbWUgPT0g
IlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNwZWNpYWwg
PSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioiKQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBjb25z
dW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBhcmd1bWVu
dHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUubGVuZ3Ro
CisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIkltbVB0ciIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS5yb2xl
ICE9ICJVIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigi
Rm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQiKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgc2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5v
bi1nZW5lcmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KGtp
bmRzLCBhbHROYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIGlzS2lu
ZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICAgICAgZm9y
bXMgPSBbRm9ybS5uZXcoW10sIG5pbCldCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAg
ICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUsIGZvcm1z
KQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAgICBlbmQK
K2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJl
YWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UKKworZGVm
IHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIp
IHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2Vu
ZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90
IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5h
bWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisg
ICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8v
IEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK2RlZiB3cml0ZUNQUChmaWxlbmFtZSkK
KyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmNwcCIsICJ3IikgeworICAgICAgICB8IG91
dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2Rl
X2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAg
IAorICAgICAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiY29uZmlnLmhcIiIKKyAgICAgICAgb3V0
cC5wdXRzICIjaW5jbHVkZSBcIkFpciN7ZmlsZW5hbWV9LmhcIiIKKworICAgICAgICB5aWVsZCBv
dXRwCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAg
b3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMu
a2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAi
ICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0
cyAic3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6
ZX07IgorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAg
ICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNz
IFByaW50U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVz
cGFjZSBXVEYiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBv
dXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMg
Im5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAg
ICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8
IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAg
ICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAg
IG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9
IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAg
IG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKwor
IyBGcm9tIGhlcmUgb24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNv
ZGUsIHNpbmNlIHdlJ3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKwor
ZGVmIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0
dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAor
CisgICAgaWYgZmlsdGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIGlm
IGNvbHVtbkluZGV4ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1bmxl
c3MgZm9ybXMubGVuZ3RoID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAgICAg
IHJldHVybgorICAgIGVuZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFjaCB7
CisgICAgICAgIHwgZm9ybSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbkluZGV4
XS5uYW1lCisgICAgICAgIGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRd
IDw8IGZvcm0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zvcm1d
CisgICAgICAgIGVuZAorICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91cHMu
bGVuZ3RoID09IDEKKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVt
bkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICByZXR1
cm4KKyAgICBlbmQKKworICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltjb2x1
bW5JbmRleF19KSB7IgorICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwgdmFs
dWUgfAorICAgICAgICBLaW5kLmFyZ0tpbmRzKGtleSkuZWFjaCB7CisgICAgICAgICAgICB8IGFy
Z0tpbmQgfAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToiCisg
ICAgICAgIH0KKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVtbklu
ZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92ZXJs
b2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5v
cGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8
CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlmIG9w
Y29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBlbHNl
CisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMuc2l6
ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkKKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNo
ICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAg
ICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5s
ZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgeWllbGQgb3Bj
b2RlLCBvdmVybG9hZAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVk
T3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9Igor
ICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAgICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZvcm0o
b3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGlu
c3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNw
ZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBjb2x1
bW5JbmRleCB8CisgICAgICAgICAgICAgICAgIiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRleH1d
LmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxz
ZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgZm9y
bSB8CisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQuZm9y
bXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisgICAg
fQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRw
LnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIAorICAgIG91dHAucHV0
cyAidGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIEluc3Q6
OmZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5wdXRzICJ7Igor
ICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBv
cGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAg
IG91dHAucHV0cyAiZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7IC8vIFRoaXMg
aXMgYmFzaWNhbGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBtb2RlbCBTcGVjaWFs
IGFzIGFuIGltbWVkaWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFyZ3NbMF0uc3BlY2lh
bCgpLT5mb3JFYWNoQXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxiYWNrPihmdW5j
dG9yKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAorICAgICAgICAg
ICAgICAgIHJvbGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCisgICAgICAg
ICAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCisgICAg
ICAgICAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCisg
ICAgICAgICAgICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNl
RGVmIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2FyZy50
eXBlfVApOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0
cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91
dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICJu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAu
cHV0cyAiaW5saW5lIGJvb2wgaGlkZGVuVHJ1dGgoKSB7IHJldHVybiB0cnVlOyB9IgorICAgIG91
dHAucHV0cyAiI2RlZmluZSBSRVRVUk4odmFsdWUpIGRvIHtcXCIKKyAgICBvdXRwLnB1dHMgIiAg
ICBpZiAoaGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZh
bHVlO1xcIgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6aXNW
YWxpZEZvcm0oKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3Jt
KG91dHAsIDpzYWZlLCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3Jt
IHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KGFyZ3Muc2l6ZSgpIDwgMSkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsi
CisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1swXS5pc1NwZWNpYWwoKSkiCisgICAg
ICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMg
IlJFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+aXNWYWxpZCgqdGhpcykpOyIKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiA9IGZhbHNlCisgICAgICAgICAgICBv
dmVybG9hZC5zaWduYXR1cmUubGVuZ3RoLnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4
IHwKKyAgICAgICAgICAgICAgICByb2xlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS5yb2xl
CisgICAgICAgICAgICAgICAgdHlwZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZQor
ICAgICAgICAgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2luZGV4XQorICAgICAgICAgICAgICAg
IG5lZWRzTW9yZVZhbGlkYXRpb24gfD0ga2luZC5zcGVjaWFsCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgIyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgZm9ybSBtYXRjaGVzLiBX
ZSBkb24ndCBoYXZlIHRvIHZhbGlkYXRlIHRoZSByb2xlLCBzaW5jZQorICAgICAgICAgICAgICAg
ICMga2luZCBpbXBsaWVzIHJvbGUuIFNvLCB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHZhbGlkYXRl
IGlzIHRoZSB0eXBlLiBBbmQgd2Ugb25seSBoYXZlCisgICAgICAgICAgICAgICAgIyB0byB2YWxp
ZGF0ZSB0aGUgdHlwZSBpZiB3ZSBoYXZlIGEgVG1wLgorICAgICAgICAgICAgICAgIGlmIGtpbmQu
bmFtZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1sj
e2luZGV4fV0udG1wKCkuaXMje3R5cGV9UCgpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJSRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIG5lZWRzTW9yZVZhbGlkYXRpb24KKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICghaXMje29wY29kZS5uYW1lfVZhbGlkKHRoaXMpKSIKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIlJFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICBvdXRwLnB1dHMgIlJFVFVSTih0cnVlKTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRw
LnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRz
ICJib29sIEluc3Q6OmFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KSIKKyAgICBvdXRwLnB1
dHMgInsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52
YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNl
ICN7b3Bjb2RlLm5hbWV9OiIKKworICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAg
ICAgb3V0cC5wdXRzICJpZiAoIWFyZ0luZGV4KSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0
dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiUkVUVVJOKGFyZ3NbMF0uc3BlY2lh
bCgpLT5hZG1pdHNTdGFjaygqdGhpcywgYXJnSW5zdCkpOyIKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgIyBTd2l0Y2ggb24gdGhlIGFyZ0luZGV4LgorICAgICAgICAgICAgb3V0cC5wdXRzICJz
d2l0Y2ggKGFyZ0luZGV4KSB7IgorCisgICAgICAgICAgICBudW1BcmdzID0gb3Bjb2RlLm92ZXJs
b2Fkcy5tYXAgeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAg
IG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgIH0ubWF4CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG51bUFyZ3MudGltZXMgeworICAgICAgICAgICAgICAgIHwgYXJnSW5k
ZXggfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4fToiCisKKyAg
ICAgICAgICAgICAgICAjIENoZWNrIGlmIGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxsIG9mIHRoZSBv
dmVybG9hZHMgZWl0aGVyIGRvLCBvciBkb24ndCwgYWRtaXQgYW4gYWRkcmVzcworICAgICAgICAg
ICAgICAgICMgYXQgdGhpcyBpbmRleC4gV2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2ZXJ5IGNvbW1v
biBjYXNlLgorICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICBudW1O
byA9IDAKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAg
ICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9y
bXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0ZXN0IG51bVll
cyBmaXJzdCBiZWNhdXNlIGlmIHdlIGVuZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3YW50CisgICAg
ICAgICAgICAgICAgIyB0byBzYXkgdGhhdCBBZGRyZXNzIGlzIGluYWRtaXNzaWJsZS4KKyAgICAg
ICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
IlJFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAg
ICAgICAgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5z
aXplICE9IDEpCisKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Mu
c2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bj
b2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorCisgICAgICAgICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhl
bSBkbyB3aGF0IHdlIHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAg
IG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9y
bSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0g
PT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVll
cyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1
c3QgZHJvcCB0byBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8g
PT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJs
b2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRP
dmVybG9hZFN3aXRjaAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhv
dyB3ZSB0ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBh
bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBm
b3JtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2Mgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmc6OkFkZHIiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJhcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBmb3JtcyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVll
cyA9IDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1Z
ZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEcm9wIGRvd24s
IGVtaXQgbm8gY29kZSwgc2luY2Ugd2UgY2Fubm90IG1hdGNoLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJSRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1z
KG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNh
bGxiYWNrKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImRlZmF1bHQ6IgorICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsi
CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAg
SW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250
ZXh0KSBjb25zdCIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFS
QU0oaml0KTsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oY29udGV4dCk7IgorICAgIG91
dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIHJlc3VsdDsiCisgICAgbWF0Y2hJbnN0T3Zlcmxv
YWRGb3JtKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2Fk
LCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0
cyAiUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250ZXh0
KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAg
ICAgICAgICBtZXRob2ROYW1lID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbWV0aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICBvdXRwLnByaW50ICJqaXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAg
ICAgIGZvcm0ua2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQs
IGluZGV4IHwKKyAgICAgICAgICAgICAgICBpZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgIiwgIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
IGNhc2Uga2luZC5uYW1lCisgICAgICAgICAgICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAg
ICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uZnByKCkiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgIHdoZW4gIkltbSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sj
e2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbW1QdHIi
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3Rl
ZEltbVB0cigpIgorICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAg
ICAgIHdoZW4gIkluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7
aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJS
RVRVUk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIlJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAicmV0dXJuIHJlc3VsdDsi
CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHJldmlzaW9u
IDE5MTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXggIT0gaW52YWxpZCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBpc1NldCgpOyB9CiAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBkZWxldGVkKCk7IH0KQEAgLTE3MCw2ICsxNjksNDYg
QEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCisg
ICAgY2xhc3MgQWxsUmVnc0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgY2xhc3Mg
aXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpIHsgfQor
CisgICAgICAgICAgICBleHBsaWNpdCBpdGVyYXRvcihSZWcgcmVnKQorICAgICAgICAgICAgICAg
IDogbV9yZWcocmVnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBSZWcgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7IH0KKworICAgICAgICAgICAg
aXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1f
cmVnID0gbV9yZWcubmV4dCgpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9yZWcg
PT0gb3RoZXIubV9yZWc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBSZWcgbV9yZWc7CisgICAgICAgIH07CisKKyAgICAg
ICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWc6OmZpcnN0KCkp
OyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZygp
KTsgfQorICAgIH07CisKKyAgICBzdGF0aWMgQWxsUmVnc0l0ZXJhYmxlIGFsbCgpIGNvbnN0IHsg
cmV0dXJuIEFsbFJlZ3NJdGVyYWJsZSgpOyB9CisKIHByaXZhdGU6CiAgICAgc3RhdGljIHVpbnQ4
X3QgaW52YWxpZCgpIHsgcmV0dXJuIDB4ZmY7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDEz
IEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJTZXQm
IG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsgfQogICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5oYXNoKCk7IH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IG1fdmVjdG9y
LnNldEJpdHMoKSkKKyAgICAgICAgICAgIGZ1bmN0b3IoUmVnOjpmcm9tSW5kZXgoaW5kZXgpKTsK
KyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgc2V0QW55KFJlZyByZWcpIHsgc2V0KHJl
Zyk7IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvV1RG
L3d0Zi9CaXRWZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMzIwLDcgKzMyMCw3IEBAIHB1Ymxp
YzogCiAgICAgfTsKICAgICAKICAgICBTZXRCaXRzSXRlcmFibGUgc2V0Qml0cygpIGNvbnN0IHsg
cmV0dXJuIFNldEJpdHNJdGVyYWJsZSgqdGhpcyk7IH0KLSAgICAKKwogcHJpdmF0ZToKICAgICBz
dGF0aWMgdW5zaWduZWQgYml0c0luUG9pbnRlcigpCiAgICAgewpJbmRleDogU291cmNlL1dURi93
dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFt
YmRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlZExhbWJkYV9oCisjZGVmaW5lIFNjb3Bl
ZExhbWJkYV9oCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBZb3UgY2FuIHVzZSBTY29wZWRMYW1i
ZGEgdG8gZWZmaWNpZW50bHkgcGFzcyBsYW1iZGFzIHdpdGhvdXQgYWxsb2NhdGluZyBtZW1vcnkg
b3IgcmVxdWlyaW5nCisvLyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBvZiB0aGUgY2FsbGVlLiBU
aGUgY2FsbGVlIHNob3VsZCBiZSBkZWNsYXJlZCBhczoKKy8vCisvLyB2b2lkIGZvbyhjb25zdCBT
Y29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+Jik7CisvLworLy8gVGhlIGNhbGxl
ciBqdXN0IGRvZXM6CisvLworLy8gdm9pZCBmb28oc2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50
LCBTdHVmZiYpPihbJl0gKGludCB4LCBTdHVmZiYgeSkgLT4gTXlUaGluZ3MqIHsgYmxhaCB9KSk7
CisvLworLy8gTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIGZvbygpIG5vdCBlc2NhcGluZyB0aGUg
bGFtYmRhLiBUaGUgbGFtYmRhIGlzIG9ubHkgdmFsaWQgd2hpbGUgZm9vKCkgaXMKKy8vIG9uIHRo
ZSBzdGFjayAtIGhlbmNlIHRoZSBuYW1lIFNjb3BlZExhbWJkYS4KKwordGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBTY29wZWRMYW1iZGE7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2NvcGVkTGFtYmRh
PFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAgU2NvcGVkTGFt
YmRhKFJlc3VsdFR5cGUgKCppbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLikgPSBu
dWxscHRyLCB2b2lkKiBhcmcgPSBudWxscHRyKQorICAgICAgICA6IG1faW1wbChpbXBsKQorICAg
ICAgICAsIG1fYXJnKGFyZykKKyAgICB7CisgICAgfQorICAgIAorICAgIH5TY29wZWRMYW1iZGEo
KQorICAgIHsKKyAgICB9CisKKyAgICBSZXN1bHRUeXBlIG9wZXJhdG9yKCkoQXJndW1lbnRUeXBl
cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ltcGwobV9hcmcsIHN0
ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgUmVzdWx0VHlwZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4u
KSBtX2ltcGw7CisgICAgdm9pZCAqbV9hcmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IFNjb3BlZExhbWJkYUZ1bmN0b3I7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzLCB0eXBlbmFt
ZSBGdW5jdG9yPgorY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjxSZXN1bHRUeXBlIChBcmd1bWVu
dFR5cGVzLi4uKSwgRnVuY3Rvcj4gOiBwdWJsaWMgU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAgU2NvcGVkTGFtYmRhRnVuY3Rvcihjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgICAgICA6IFNjb3BlZExhbWJkYShpbXBsRnVuY3Rpb24s
IHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9yKGZ1bmN0b3IpCisgICAgeworICAgIH0KKworICAg
IFNjb3BlZExhbWJkYUZ1bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogU2NvcGVk
TGFtYmRhKGltcGxGdW5jdGlvbiwgdGhpcykKKyAgICAgICAgLCBtX2Z1bmN0b3IoV1RGOjptb3Zl
KGZ1bmN0b3IpKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFJlc3VsdFR5
cGUgaW1wbEZ1bmN0aW9uKHZvaWQqIGFyZ3VtZW50LCBBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1l
bnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjb3BlZExhbWJkYUZ1bmN0
b3IqPihhcmd1bWVudCktPm1fZnVuY3RvcigKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICBGdW5jdG9yIG1fZnVuY3Rv
cjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rv
cj4KK1Njb3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1i
ZGEoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gU2NvcGVkTGFtYmRhRnVu
Y3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KGZ1bmN0b3IpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIFNjb3BlZExhbWJkYV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L1NoYXJlZFRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJ
KHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzksNiArNzksMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBT
aGFyZWRUYXNrRnVuY3RvcihGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBtX2Z1bmN0b3Io
V1RGOjptb3ZlKGZ1bmN0b3IpKQorICAgIHsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgUmVzdWx0
VHlwZSBydW4oQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykgb3ZlcnJpZGUKICAgICB7CkBA
IC0xMTAsNiArMTE1LDExIEBAIFJlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0ZVNo
YXIKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlv
blR5cGUsIEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
VHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1JlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+IGNy
ZWF0ZVNoYXJlZFRhc2soRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihXVEY6Om1vdmUo
ZnVuY3RvcikpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263661</attachid>
            <date>2015-10-20 22:58:46 -0700</date>
            <delta_ts>2015-10-21 14:29:38 -0700</delta_ts>
            <desc>some more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>276370</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICA6IG1f
aW5kZXgoaW5kZXgpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwor
dm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFw
cGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNp
Y0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxv
Y2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFs
dWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0
OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlJ3MgdHlwZWRlZi4KKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVM
aXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBW
YWx1ZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAg
VmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4
KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBt
X3ZhbHVlczsgfQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSog
YXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1T
dWNjZXNzb3JzKCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KTsK
KyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAK
KyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWdu
ZWQgaW5kZXgpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1
ZXM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBC
YXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2Nr
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1
bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBC
YXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4g
RGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9s
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9jZWR1
cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5cGUq
IHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pOworICAgIGFw
cGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2ljQmxv
Y2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+
YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitCYXNpY0Jsb2NrKiYg
QmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBsYXN0
KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworY29uc3QgQmFz
aWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFs
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3Bl
Y2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzQ2hlY2tTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2UgeworCit1bnNpZ25lZCBudW1C
M0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBzd2l0Y2ggKGluc3Qub3JpZ2luLT5vcGNvZGUoKSkg
eworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNr
TXVsOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1cm4g
MTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
CitDaGVja1NwZWNpYWw6OkNoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVk
IG51bUFyZ3MpCisgICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fbnVtQ2hlY2tB
cmdzKG51bUFyZ3MpCit7Cit9CisKK0NoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCit7Cit9
CisKK0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYgaW5zdCkgY29u
c3QKK3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0Lm9yaWdpbik7
CisgICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzaXplKG1fbnVtQ2hlY2tBcmdzKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX251bUNoZWNrQXJnczsgaS0tOykKKyAgICAgICAgaGlkZGVuQnJhbmNo
LmFyZ3NbaV0gPSBpbnN0LmFyZ3NbaSArIDFdOworICAgIHJldHVybiBoaWRkZW5CcmFuY2g7Cit9
CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3Bl
ZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBoaWRkZW5C
cmFuY2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7CisgICAgZm9yRWFjaEFyZ0ltcGwobnVt
QjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGNhbGxiYWNrKTsKK30KKwor
Ym9vbCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaGlk
ZGVuQnJhbmNoKGluc3QpLmlzVmFsaWQoKQorICAgICAgICAmJiBpc1ZhbGlkSW1wbChudW1CM0Fy
Z3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVj
aWFsOjphZG1pdHNTdGFjayhJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBp
ZiAoYXJnSW5kZXggPj0gMSAmJiBhcmdJbmRleCA8IDEgKyBtX251bUNoZWNrQXJncykKKyAgICAg
ICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5hZG1pdHNTdGFjayhhcmdJbmRleCAtIDEpOwor
ICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJn
cyArIDEsIGluc3QsIGFyZ0luZGV4KTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENoZWNrU3Bl
Y2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25D
b250ZXh0JiBjb250ZXh0KQoreworICAgIENDYWxsSGVscGVyczo6SnVtcCBmYWlsID0gaGlkZGVu
QnJhbmNoKGluc3QpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgQVNTRVJUKGZhaWwuaXNT
ZXQoKSk7CisKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIFZlY3RvcjxW
YWx1ZVJlcD4gcmVwczsKKyAgICBpZiAoaXNDaGVja01hdGgodmFsdWUtPm9wY29kZSgpKSkgewor
ICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNrTXVsKQorICAgICAgICAgICAgcmVw
cy5hcHBlbmQoVmFsdWVSZXAoKSk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlLT5vcGNvZGUoKSA9
PSBDaGVja1N1YiAmJiB2YWx1ZS0+YXJnc1swXS0+aXNJbnQoMCkpCisgICAgICAgICAgICByZXBz
LmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXBzLmFwcGVuZChyZXBGb3JBcmcoY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKKyAg
ICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKGNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzFdKSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVjayk7
CisgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgxKSk7CisgICAgfQorCisg
ICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCByZXBz
KTsKKyAgICAKKyAgICBjb250ZXh0LmxhdGVQYXRocy5hcHBlbmQoCisgICAgICAgIGNyZWF0ZVNo
YXJlZFRhc2s8R2VuZXJhdGlvbkNvbnRleHQ6OkxhdGVQYXRoRnVuY3Rpb24+KAorICAgICAgICAg
ICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpIHsK
KyAgICAgICAgICAgICAgICBmYWlsLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgICAgICAgICAgICAgIFN0YWNrbWFw
OjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKKyAgICAgICAgICAgICAgICBwYXJhbXMudmFsdWUg
PSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAg
ICAgICAgICAgICAgICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgICAgICAgICAgICAgcGFyYW1z
LnVzZWRSZWdpc3RlcnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgICAgICAg
ICAgICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworICAgICAgICAg
ICAgfSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDaGVja1NwZWNpYWxfaAorI2RlZmluZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNp
bmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ugd2FudCB0byBsb3dlciBDaGVj
ayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVuIHdlIHdhbnQgdG8gcm91dGUgdGhh
dCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2RlIGluc3RlYWQgb2YgZG9pbmcgYW55
dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNrU3BlY2lhbCB3aWxsIHJlbWVtYmVy
CisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2VsZWN0ZWQgYWxvbmcgd2l0aCB0aGUg
bnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdhbnQuIEl0CisvLyB3aWxsIGNyZWF0
ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUgYXBwcm9wcmlhdGUgYXJncyBmcm9t
IHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNhbGwgYW55IG9mIHRoZSBjYWxsYmFj
a3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011
bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFyZSB0aGUgcmV2ZXJzZQorLy8gb2Yg
dGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQzMiBiLCBhKS4gRXhjZXB0OgorLy8g
LSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBCcmFuY2hOZWczMiB4LgorLy8gLSBD
aGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwzMiBiLCBhIGJ1dCB3ZSBwYXNzIEFu
eSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJsaWMgU3RhY2tt
YXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2Rl
LCB1bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKKyAgICAvLyBDb25z
dHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJhbmNoIHRoYXQg
dGhpcyB3aWxsIHVzZS4KKyAgICBJbnN0IGhpZGRlbkJyYW5jaChjb25zdCBJbnN0JikgY29uc3Q7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2Nv
cGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJv
b2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFp
cjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8vIE5PVEU6IHRo
ZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhl
biByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFw
LiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKElu
c3QmLCBDQ2FsbEhlbGVwcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworCisgICAg
dm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1fbnVtQ2hl
Y2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0No
ZWNrU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitDaGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVt
cE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFw
ID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAg
ICBjYXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENo
ZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgp
OworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBN
ZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBD
aGVja1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9w
Y29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQs
IHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBB
U1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bj
b2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tN
dWwpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNr
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAg
IH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1Zh
bHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0
Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
KyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21h
dGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFuZChMb2FkKGFk
ZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChhZGRyZXNz
KSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8xID0gRXF1
YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0gRXF1YWwo
QW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5kKGxlZnQs
IHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCByaWdodCkK
K0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1YWwodmFs
dWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZh
bHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMy
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFsdWVfaAor
I2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkg
eyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7
CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Qz
MlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0VmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFs
dWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7IH0KKyAg
ICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJp
bnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
UHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3Jp
Z2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0LCBJbnQ2
NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91YmxlVmFsdWU6
On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1w
TWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVsZSIsIG1f
dmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25z
dERvdWJsZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91YmxlVmFsdWUo
KTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0
RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkK
KyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAg
ICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV92
YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25z
dERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJv
bFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250
cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBD
b250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29t
bWFQcmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1Y2Nlc3Nv
cnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Nv
bnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxv
Y2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAg
ICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlzIGhl
cmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28g
d2Ugd2FudAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0
byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAgfkNv
bnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0
dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IodW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAgIEJhc2lj
QmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tp
XTsgfQorCisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0
dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNz
ZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRyb2xWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2lu
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTdWJj
bGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29y
czsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNl
IHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZv
aWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CisgICAg
fQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCisgICAg
eworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAgLy8gVXNl
IHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9w
Y29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAg
IH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAg
ICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IHByZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBubykKKyAg
ICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9zdWNjZXNz
b3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29udHJvbFZh
bHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gK
KworI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0
IGZvciB0aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZv
ciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3Ug
ZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2
ZSB2ZXJ5IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4K
KworLy8gSWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxC
YXNpY0Jsb2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIEluZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKwor
ICAgIGJvb2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQo
dmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxl
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBj
b2xsZWN0aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rp
b24oY29sbGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRy
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihj
b25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFi
bGU6Oml0ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxl
Y3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25U
eXBlKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJs
ZTo6aXRlcmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsg
fQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxl
Y3Rpb24sIG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29s
bGVjdGlvblR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0
OworICAgIH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5k
ZXhTZXQudmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3Ug
ZG86CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5
cGU+IHZhbHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7Cisg
ICAgfQorCisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGlu
ZGljZXMoKS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQ
cmVmaXgsIGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0Owor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRl
cm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0
Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBA
CisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5n
TWF0Y2hlcgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3Rh
cnRpbmcgYXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVt
ZW50cyB3aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0
aGlzIG1hdGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2Uh
CisKK0xvYWQgPSBMb2FkKGFkZHJlc3MpCisKKyMgV2UgcHJvYmFibHkgZG9uJ3QgbmVlZCB0aGVz
ZSBmb3Jtcy4KK0FkZExvYWQxID0gQWRkKExvYWQoYWRkcmVzcyksIHZhbHVlKQorQWRkTG9hZDIg
PSBBZGQodmFsdWUsIExvYWQoYWRkcmVzcykpCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK1N0
b3JlQWRkTG9hZDEgPSBTdG9yZShBZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNzKQor
U3RvcmVBZGRMb2FkMiA9IFN0b3JlKEFkZCh2YWx1ZSwgTG9hZChhZGRyZXNzKSksIGFkZHJlc3Mp
CitTdG9yZUFuZExvYWQgPSBTdG9yZShBbmQoTG9hZChhZGRyZXNzKSwgdmFsdWUpLCBhZGRyZXNz
KQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcykKKworUmV0dXJuID0gUmV0dXJuKHZhbHVl
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
TWVtb3J5VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9y
eVZhbHVlOjp+TWVtb3J5VmFsdWUoKQoreworfQorCit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0
YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChtX29mZnNldCkKKyAgICAgICAg
b3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29mZnNldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5l
IEIzTWVtb3J5VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBj
YXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6
CisgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNh
c2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9h
dDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAgICBpbnRwdHJfdCBvZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4Wiwg
TG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAg
Ly8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAs
IG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAg
ICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAg
IGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEb3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAg
ICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlz
IGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1l
bW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogcG9pbnRlciwgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwg
cG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAo
IUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAg
ICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBj
YXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2Ug
dGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVl
KiBwb2ludGVyLAorICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwg
bV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9w
Y29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5
OgorICAgICAgICBvdXQucHJpbnQoIklkZW50aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICAg
ICAgLy8gRklYTUUKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bj
b2RlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDogaW50MTZfdCB7CisgICAgLy8gQSBuby1v
cCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZvciB3aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBh
IHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVz
YWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElkZW50aXR5LAorCisgICAgLy8gQ29uc3Rh
bnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMuIENvbnN0YW50cyBleGlzdCBpbiB0aGUg
Y29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3
ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8g
Y3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKwor
ICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGlu
ZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBp
biBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBW
YWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0
aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1h
Z2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0
aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250
cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3Vy
ZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxs
b2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisg
ICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4g
VXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBUaGUgcmV0dXJuCisgICAgLy8gdHlwZSBp
cyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3IgRG91YmxlIChmb3IgRlBScykuCisgICAg
QXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUgcG9pbnRlci4gWW91IGNhbiBwdXQgdGhp
cyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQor
ICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZlYXQ6IGlmIG91ciBjb21waWxlciBjaGFu
Z2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5IGZvciBzb21lCisgICAgLy8gc2lsbHkg
cmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNpYyB3aWxsIHJldHVybiB3aGVyZSB0aGUg
ZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAgICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRv
IGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBt
YXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBBZGQsCisgICAgU3ViLAorICAg
IE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2VyIG1hdGguCisgICAgQ2hpbGxEaXYsIC8v
IGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2UgSlMgKHgveSl8MC4KKyAgICBNb2QsCisg
ICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhvciwKKyAgICBTaGwsCisgICAgU1NociwK
KyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1Y2guCisgICAgLy8gVGFrZXMgYW5kIHJl
dHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4dDE2LAorICAgIC8vIFRha2VzIEludDMy
IGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwKKyAgICBaRXh0MzIsCisgICAgLy8gVGFr
ZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3VuZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFu
ZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAgIC8vIFRha2VzIERvdWJsZSBhbmQgcmV0
dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBjb21wYXJpc29u
cywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJldHVybnMgaW50MzIgMCBvciAxLiBOb3Rl
IHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFsKHgsIDApLgorICAgIEVxdWFsLAorICAg
IE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdyZWF0ZXJUaGFuLAorICAgIExlc3NFcXVh
bCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1
cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAgICBCZWxvdywKKyAgICBBYm92ZUVxdWFs
CisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1lbW9yeSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRl
cyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0eXBlLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUu
CisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgorICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisg
ICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAgIC8vIFRoaXMgcmV0dXJucyBEb3VibGU6Cisg
ICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMgcmV0dXJuIHdoYXRldmVyIHRoZSByZXR1cm4gdHlw
ZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8gTWVtb3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRl
cyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8v
IFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisg
ICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2YWx1ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8v
IFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0LCBhbmQgRG91Ymxl
OgorICAgIFN0b3JlLAorCisgICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5j
dGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVtIEMgY2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1
cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQg
dHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAvLyBUaGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRo
ZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRoaXMgaXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2Ug
YSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVtaXRzIGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9u
IGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAv
LyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBhbG9uZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBl
YWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3QgYmUgcGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwg
dG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBh
bmQgaXQncyBsZWdhbCB0byByZXF1ZXN0CisgICAgLy8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50
IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhlIHRvcCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBh
cmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgorICAgIFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVj
a2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRo
aXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24KKyAgICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFj
ayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFmdGVyIHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8g
bGluayB0aGUganVtcAorICAgIC8vIGZyb20gdGhlIGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiBy
ZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBzdXBwbHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlv
dQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBqdW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUg
Y29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBzaW5jZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxs
IGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24gb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0
aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4uIEZvcgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBo
YXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8vCisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisg
ICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQg
dG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAg
ICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAvLworICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJk
bGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQgYnkgdGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5
IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2FsbGJhY2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRp
b24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRo
YXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3QgQ2hlY2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQg
Q2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9zc2libHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGgu
IFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVja0FkZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQu
CisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tTdWIsCisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBD
aGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVj
a0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMgYQorICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5l
cmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFuIEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBi
cmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1
Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xv
dworICAgIC8vIHBhdGguCisgICAgQ2hlY2ssCisKKyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhl
IHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBzaWxvbiwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9u
VmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisgICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZh
bHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAgCisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1
c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gQnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8u
IFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZhbHVlIGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1
Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNjZXNzb3IuCisgICAgQnJhbmNoLAorCisgICAgLy8g
U3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dp
dGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNoLAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQg
QjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRoZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBq
dXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3Mu
CisgICAgUmV0dXJuLAorCisgICAgLy8gVGhpcyBpcyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVz
IHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNz
LgorICAgIE9vcHMKK307CisKK2lubGluZSBib29sIGlzQ2hlY2tNYXRoKE9wY29kZSBvcGNvZGUp
Cit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2Ug
Q2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6T3Bjb2RlKTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM09wY29kZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3UG9pbnRlcihtX2RhdGEpLCAiKSIpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3JpZ2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmln
aW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcmlnaW5faAorI2RlZmluZSBC
M09yaWdpbl9oCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIgY2FuIGNob29z
ZSB0byBwdXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIzIHdpbGwgYmUg
YWJsZSB0bworLy8gYWNjb3VudCwgZG93biB0byB0aGUgbWFjaGluZSBjb2RlLCB3aGljaCBpbnN0
cnVjdGlvbiBjb3JyZXNwb25kcyB0byB3aGljaCBvcmlnaW4uIEIzCisvLyB0cmFuc2Zvcm1hdGlv
bnMgbXVzdCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQncyBhbiBlcnJvciB0byB3cml0
ZSBhIHRyYW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9wcyBPcmlnaW5zIG9yIGxpZXMg
YWJvdXQgdGhlbS4KK2NsYXNzIE9yaWdpbiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgT3JpZ2lu
KGNvbnN0IHZvaWQqIGRhdGEgPSBudWxscHRyKQorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAg
IHsKKyAgICB9CisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRh
OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6
CisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM09yaWdpbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKwor
I2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK1BhdGNocG9pbnRWYWx1ZTo6flBhdGNocG9pbnRWYWx1ZSgpCit7Cit9CisKK3Zv
aWQgUGF0Y2hwb2ludFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgic3RhY2ttYXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBv
aW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNo
cG9pbnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2luY2x1ZGUgIkIz
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQYXRjaHBvaW50VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IFBhdGNocG9pbnQ7IH0KKworICAgIH5QYXRjaHBvaW50VmFsdWUoKTsKKworICAgIFN0
YWNrbWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CisKKyAgICBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIFBhdGNocG9pbnQsIHR5cGUsIG9yaWdpbiwgY2hpbGRyZW4pCisgICAgewor
ICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQYXRj
aHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQcm9jZWR1
cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2NlZHVyZSgpCit7Cit9CisK
K0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soKQoreworICAgIHN0ZDo6dW5pcXVlX3B0
cjxCYXNpY0Jsb2NrPiBibG9jayA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jaz4obV9ibG9j
a3Muc2l6ZSgpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBt
X2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
Kwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVt
cChibG9jaykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKworI2luY2x1ZGUgPHd0Zi9C
YWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgUHJv
Y2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1cmUpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgUHJvY2VkdXJlKCk7CisgICAgflBy
b2NlZHVyZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soKTsKKyAgICAKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1
ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6
ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3Ig
eworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgIDogbV9wcm9j
ZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQg
aW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJhc2lj
QmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb2Nl
ZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4
ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBpbmRl
eCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1cmUtPnNp
emUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRleCsr
OworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKworICAgICAgICBQcm9jZWR1
cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAg
ICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQor
ICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBudW1CbG9j
a3MoKSk7IH0KKworICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAg
ICAgICAgVmFsdWVzQ29sbGVjdGlvbihQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICAgICAgICAg
IDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9y
KCk6CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAg
ICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAgICwg
bV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgVmFsdWUqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fcHJvY2VkdXJlLT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0g
b3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgcHJpdmF0ZToKKworICAgICAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgMCk7IH0KKyAgICAg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIG1f
cHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgICAgIFZh
bHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1
ZXNbaW5kZXhdOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlv
biB2YWx1ZXMoKSB7IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitwcml2YXRl
OgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZUlubGluZXNfaAorI2RlZmluZSBC
M1Byb2NlZHVyZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVk
ZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVU
eXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCks
IGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7Cisg
ICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVJ
bmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwor
dm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNr
U2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1Zh
bHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTdGFja1Ns
b3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0
cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+
U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9ieXRlU2l6ZTsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQg
b2YgY29tcGlsYXRpb24uIFlvdSBjYW5ub3QgcmVseSBvbiBpdCBoYXZpbmcgYSBtZWFuaW5nZnVs
CisgICAgLy8gdmFsdWUgd2hpbGUgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcuCisgICAgaW50cHRy
X3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tTbG90
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXIoKSwgb3JpZ2luKQorICAg
ICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAoMCkK
KyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICBpbnRwdHJfdCBt
X29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNTdGFja1Nsb3RWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
Kwordm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgKKyAgICAgICAgIntvcGFxdWUgPSAiLCBSYXdQb2ludGVyKG1fb3BhcXVlKSwgIiwg
cmVwcyA9ICIsIGxpc3REdW1wKG1fcmVwcyksCisgICAgICAgICIsIGdlbmVyYXRvciA9ICIsIFJh
d1BvaW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBjbG9iYmVyZWQgPSAiLCBtX2Nsb2JiZXJl
ZCwKKyAgICAgICAgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIn0iKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFw
X2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5j
bHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRl
IDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgQ2hlY2tTcGVjaWFsOworY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7
CisKK2NsYXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFt
cyB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFw
LgorICAgICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2tt
YXAuCisgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxz
IHlvdSB0aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgor
ICAgICAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5
b3UgdGhlIHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVyczsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5j
dGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRl
ZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3Rh
Y2ttYXAoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBp
ZGVudGlmeSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAt
dXNpbmcgVmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRl
IG1heSBlbmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisg
ICAgLy8gYWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIg
YmFjayB0byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdl
cmUgdXNpbmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBw
YXJhbWV0ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9Cisg
ICAgdm9pZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENv
bnZlbmllbmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMu
CisgICAgdm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBz
ZXRPcGFxdWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qg
b3BhcXVlSW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUo
KSk7IH0KKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1
c2VzIHRoaXMgU3RhY2ttYXAuIE5vdGUgdGhhdCBpbmRleCB6ZXJvIHJlZmVycyB0byB0aGUKKyAg
ICAvLyBmaXJzdCBhcmd1bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQg
aXMgbm90IGNvbnN0cmFpbmFibGUuIEZvciBleGFtcGxlLCBpbiBhCisgICAgLy8gQ2hlY2tBZGQg
dmFsdWUsIGl0IHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEu
IEluIGEgQ2hlY2sgdmFsdWUsIGl0IHdvdWxkCisgICAgLy8gYmUgYW4gZXJyb3IgdG8gY29uc3Ry
YWluIGluZGV4IDAuIEJ1dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQs
IHlvdSBjYW4gZGVwZW5kCisgICAgLy8gb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVp
bmcgZmlsbGVkIGluLgorICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBW
YWx1ZVJlcCYgcmVwKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXpl
KCkpCisgICAgICAgICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNb
aW5kZXhdID0gcmVwOworICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNl
dCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisK
KyAgICBjb25zdCBSZWdpc3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9i
YmVyZWQ7IH0KKworICAgIHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVy
YXRvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRl
U2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBDaGVja1NwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNzIFN0YWNrbWFwU3BlY2lhbDsKKyAg
ICAKKyAgICB2b2lkKiBtX29wYXF1ZSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+
IG1fcmVwczsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3Rl
clNldCBtX2Nsb2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7IC8vIFN0
YWNrbWFwcyBjb3VsZCBiZSBmdXJ0aGVyIGR1cGxpY2F0ZWQgYnkgQWlyLCBidXQgdGhhdCdzIHVu
bGlrZWx5LCBzbyB3ZSBqdXN0IG1lcmdlIHRoZSB1c2VkIHJlZ2lzdGVycyBzZXRzIGlmIHRoYXQg
d2VyZSB0byBoYXBwZW4uCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzU3RhY2ttYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworU3RhY2tt
YXBTcGVjaWFsOjpTdGFja21hcFNwZWNpYWwoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IFNwZWNp
YWwobmFtZSkKK3sKK30KKworU3RhY2ttYXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVjaWFsKCkKK3sK
K30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3Qg
U2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIHJl
dHVybiBmb3JFYWNoQXJnSW1wbCgwLCAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgU3Rh
Y2ttYXBTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzVmFsaWRJ
bXBsKDAsIDEsIGluc3QpOworfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2so
SW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgcmV0dXJuIGFkbWl0c1N0YWNr
KDAsIDEsIGluc3QsIGFyZ0luZGV4KTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9y
dFVzZWRSZWdpc3RlcnMoSW5zdCYgaW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0
YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3Qg
dGhhdCB1c2VzIHRoZSBTdGFja21hcFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVu
ZCB1cCBtZXJnaW5nIHVzZWQKKyAgICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxh
Y2VzLiBUaGlzIGN1cnJlbnRseSB3b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0
YWlsZHVwCisgICAgLy8gb3IgdGhpbmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkg
aXQgY291bGQgYmUgYSBwcm9ibGVtLgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVy
Z2UodXNlZFJlZ2lzdGVycyk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNp
YWw6OmV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9
IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgp
OworCisgICAgcmV0dXJuIHN0YWNrbWFwLT5jbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdGFja21h
cFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3Ms
IHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3Bl
ZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBWYWx1ZSog
dmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBo
YXZlIG5vdCBoYXBwZW5lZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25v
cmVkQWlyQXJncyk7CisgICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgPj0gbnVtSWdu
b3JlZEIzQXJncyk7CisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWly
QXJncyA9PSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAg
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25v
cmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUln
bm9yZWRCM0FyZ3NdOworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51
bUlnbm9yZWRBaXJBcmdzKTsKKworICAgICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNlLCBBcmc6
OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAgIH0KK30KKworYm9vbCBTdGFja21h
cFNwZWNpYWw6OmlzVmFsaWRJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVu
c2lnbmVkIG51bUlnbm9yZWRBcmdBcmdzLAorICAgIEluc3QmIGluc3QpCit7CisgICAgVmFsdWUq
IHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3Mg
aGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdu
b3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpID49IG51bUln
bm9yZWRCM0FyZ3MpOworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFw
KCk7CisKKyAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgLy8gRm9yIHRoZSBJbnN0IHRvIGJl
IHZhbGlkLCBpdCBuZWVkcyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzLgor
ICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFsdWUtPmNo
aWxkcmVuLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIC8vIFJlZ2FyZGxlc3Mgb2YgY29uc3RyYWludHMsIHN0YWNrbWFwcyBoYXZlIHNvbWUg
YmFzaWMgcmVxdWlyZW1lbnRzIGZvciB0aGVpciBhcmd1bWVudHMuIEZvcgorICAgIC8vIGV4YW1w
bGUsIHlvdSBjYW4ndCBoYXZlIGEgbm9uLUZQLW9mZnNldCBhZGRyZXNzLiBUaGlzIHZlcmlmaWVz
IHRob3NlIGNvbmRpdGlvbnMgYXMgd2VsbCBhcyB0aGUKKyAgICAvLyBhcmd1bWVudCB0eXBlcy4K
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9y
ZWRCM0FyZ3M7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSAr
IG51bUlnbm9yZWRCM0FyZ3MpOworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpICsgbnVt
SWdub3JlZEFpckFyZ3NdOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7
CisgICAgICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAg
IGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICBjYXNl
IEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgICAgIGJyZWFrOyAvLyBPSworICAgICAgICBjYXNlIEFy
Zzo6QWRkcjoKKyAgICAgICAgICAgIGlmIChhcmcuYmFzZSgpICE9IFRtcChHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlcikgJiYKKyAgICAgICAgICAgICAgICBhcmcuYmFzZSgpICE9IFRtcChNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcmc6OlR5cGUg
dHlwZSA9IEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKTsKKworICAgICAgICBpZiAo
IWFyZy5pc1R5cGUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgLy8gVGhlIG51bWJlciBvZiBjb25zdHJhaW50cyBoYXMgdG8gYmUgbm8gZ3JlYXRlciB0aGFu
IHRoZSBudW1iZXIgb2YgQjMgY2hpbGRyZW4uCisgICAgQVNTRVJUKHN0YWNrbWFwLT5tX3JlcHMu
c2l6ZSgpIDw9IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkpOworCisgICAgLy8gVmVyaWZ5IGFueSBl
eHBsaWNpdGx5IHN1cHBsaWVkIGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQgaSA9IG51
bUlnbm9yZWRCM0FyZ3M7IGkgPCBzdGFja21hcC0+bV9yZXBzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgVmFsdWVSZXAmIHJl
cCA9IHN0YWNrbWFwLT5tX3JlcHNbaV07CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kg
LSBudW1JZ25vcmVkQjNBcmdzICsgbnVtSWdub3JlZEFpckFyZ3NdOworCisgICAgICAgIHN3aXRj
aCAocmVwLmtpbmQoKSkgeworICAgICAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgICAg
ICAvLyBXZSBhbHJlYWR5IHZlcmlmaWVkIHRoaXMgYWJvdmUuCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKCFh
cmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAo
YXJnICE9IFRtcChyZXAucmVnKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAg
ICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAgICAgICAgaWYgKGFyZyAhPSBBcmc6
OmNhbGxBcmcocmVwLm9mZnNldEZyb21TUCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6
CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9u
LgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0YWNrbWFw
U3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3Ms
IHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIHVuc2lnbmVkIGFy
Z0luZGV4KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFw
KiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgdW5zaWduZWQgc3RhY2ttYXBB
cmdJbmRleCA9IGFyZ0luZGV4IC0gbnVtSWdub3JlZEFpckFyZ3MgKyBudW1JZ25vcmVkQjNBcmdz
OworCisgICAgaWYgKHN0YWNrbWFwQXJnSW5kZXggPj0gc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkp
IHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlIHdhcyBubyBjb25zdHJhaW50Lgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gV2Ugb25seSBhZG1pdCBz
dGFjayBmb3IgQW55J3MsIHNpbmNlIFN0YWNrIGlzIG5vdCBhIHZhbGlkIGlucHV0IGNvbnN0cmFp
bnQsIGFuZCBTdGFja0FyZ3VtZW50CisgICAgLy8gdHJhbnNsYXRlcyB0byBhIENhbGxBcmcgaW4g
QWlyLgorICAgIGlmIChzdGFja21hcC0+bV9yZXBzW3N0YWNrbWFwQXJnSW5kZXhdLmtpbmQoKSA9
PSBBbnkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitW
ZWN0b3I8VmFsdWVSZXA+IFN0YWNrbWFwU3BlY2lhbDo6cmVwcyhHZW5lcmF0aW9uQ29udGV4dCYg
Y29udGV4dCwgSW5zdCYgaW5zdCkKK3sKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlc3VsdDsKKyAg
ICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCAxLCBpbnN0LCByZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgKKyAgICBH
ZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEluc3Qm
IGluc3QsIFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1JZ25vcmVkQXJnczsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChyZXBGb3JBcmcoY29udGV4dC5jb2RlLCBhcmcpKTsKKyAgICAgICAgQXJnJiBh
cmcgPSBpbnN0LmFyZ3NbaV07CisgICAgfQorfQorCitWYWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6
OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBjb25zdCBBcmcmIGFyZykKK3sKKyAgICBzd2l0Y2ggKGFy
Zy5raW5kKCkpIHsKKyAgICBjYXNlIFRtcDoKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpyZWco
YXJnLnJlZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJbW06CisgICAgY2FzZSBJbW02
NDoKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFudChhcmcudmFsdWUoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgaWYgKGFyZy5iYXNlKCkgPT0gR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0
YWNrKGFyZy5vZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChhcmcuYmFzZSgpID09IE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6
c3RhY2soYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZU9mZnNldCk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcCgpOwor
ICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcFNwZWNpYWxfaAorI2RlZmluZSBCM1N0YWNrbWFw
U3BlY2lhbF9oCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNTdGFja21h
cC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIGJh
c2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRoYXQgaGF2ZSBzdGFja21hcHMuIE5vdGUgdGhhdCBpdCBj
YW4gZmluZCB0aGUgU3RhY2ttYXAgYnkKKy8vIGFza2luZyBmb3IgdGhlIEluc3QncyBvcmlnaW4u
IEhlbmNlLCB0aGVzZSBvYmplY3RzIGRvbid0IG5lZWQgdG8gZXZlbiBob2xkIGEgcmVmZXJlbmNl
IHRvIHRoZQorLy8gU3RhY2ttYXAuCisKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbCA6IHB1YmxpYyBB
aXI6OlNwZWNpYWwgeworcHVibGljOgorICAgIFN0YWNrbWFwU3BlY2lhbChjb25zdCBjaGFyKiBu
YW1lKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5z
dCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQg
YXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhBaXI6Oklu
c3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0
JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGRlZXBEdW1wSW1wbCgp
LiBXZSBoYXZlIG1hbnkgc29tZSBzdWJjbGFzc2VzCisgICAgLy8gdGhhdCBpbXBsZW1lbnQgdGhh
dC4KKworICAgIHZvaWQgZm9yRWFjaEFyZ0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9y
ZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3Qm
LCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jik7CisgICAg
Ym9vbCBpc1ZhbGlkSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5z
aWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYpOworICAgIGJvb2wg
YWRtaXRzU3RhY2tJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNp
Z25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisKKyAgICAvLyBH
ZXRzIHRoZSByZXBzIGFycmF5IHRoZSB3YXkgdGhhdCB0aGUgc3RhY2ttYXAgZ2VuZXJhdG9yIGNh
bGxiYWNrIHdvdWxkIHdhbnQuCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzKEFpcjo6R2VuZXJh
dGlvbkNvbnRleHQmLCBBaXI6Okluc3QmKTsKKworICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9y
IHRoZSBJbnN0J3MgYXJncywgc3RhcnRpbmcgd2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhlIGdp
dmVuIHZlY3Rvci4KKyAgICB2b2lkIGFwcGVuZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRl
eHQmLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVw
PiYpOworCisgICAgc3RhdGljIFZhbHVlUmVwIHJlcEZvckFyZyhBaXI6OkNvZGUmLCBjb25zdCBB
aXI6OkFyZyYpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M1N0YWNrbWFwU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaENhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaENhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3dpdGNoQ2FzZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2Nhc2VWYWx1ZSwg
Ii0+IiwgcG9pbnRlckR1bXAobV90YXJnZXQpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoQ2FzZV9oCisjZGVmaW5lIEIzU3dpdGNo
Q2FzZV9oCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBC
YXNpY0Jsb2NrOworCitjbGFzcyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNl
KCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwgQmFz
aWNCbG9jayogdGFyZ2V0KQorICAgICAgICA6IG1fY2FzZVZhbHVlKGNhc2VWYWx1ZSkKKyAgICAg
ICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdGFyZ2V0OyB9CisKKyAgICBpbnQ2NF90IGNh
c2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FzZVZhbHVlOyB9CisgICAgQmFzaWNCbG9jayog
dGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZTsK
KyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbGR1ZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisK
K1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7Cisg
ICAgU3dpdGNoQ2FzZSByZXN1bHQgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIG1fc3VjY2Vz
c29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1v
dmVMYXN0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6YXBw
ZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIG1fc3VjY2Vzc29y
cy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNjZXNzb3JzW21fc3VjY2Vz
c29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBw
ZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3aXRjaFZhbHVlOjpkdW1w
TWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRoaXMgZGVzdHJ1Y3RpdmVs
eSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAgICBvdXQucHJpbnQobGlz
dER1bXAoKnRoaXMpKTsKK30KKworU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRy
b2xWYWx1ZShpbmRleCwgU3dpdGNoLCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVu
ZChmYWxsVGhyb3VnaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNTd2l0Y2hWYWx1ZV9oCisjZGVmaW5lIEIzU3dpdGNoVmFsdWVfaAor
CisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDog
cHVibGljIENvbnRyb2xWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNo
VmFsdWUoKTsKKworICAgIC8vIG51bUNhc2VWYWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygp
LgorICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5z
aXplKCk7IH0KKworICAgIC8vIFRoZSBzdWNjZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBh
dCB0aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaV07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgQmFz
aWNCbG9jayogZmFsbFRocm91Z2goKSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgp
OyB9CisgICAgQmFzaWNCbG9jayomIGZhbGxUaHJvdWdoKCkgeyByZXR1cm4gc3VjY2Vzc29ycygp
Lmxhc3QoKTsgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51bUNhc2VW
YWx1ZXMoKTsgfQorICAgIFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gU3dpdGNoQ2FzZShjYXNlVmFsdWUoaW5kZXgpLCBzdWNjZXNzb3Io
aW5kZXgpKTsKKyAgICB9CisgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBj
bGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAg
ICAgICA6IG1fc3dpdGNoKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoU3dpdGNoVmFsdWUmIHN3aXRjaFZh
bHVlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2goJnN3aXRjaFZhbHVl
KQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX3N3aXRjaC0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIFN3aXRjaFZhbHVlKiBtX3N3aXRjaDsKKyAgICAgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgLy8gVGhpcyByZW1vdmVzIHRoZSBjYXNlIGFu
ZCByZW9yZGVycyB0aGluZ3MgYSBiaXQuIElmIHlvdSdyZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZy
b20gMCB0byBOLAorICAgIC8vIHRoZW4geW91IGNhbiBrZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlz
IHNvIGxvbmcgYXMgeW91IHJldmlzaXQgdGhpcyBzYW1lIGluZGV4ICh3aGljaCB3aWxsIG5vdwor
ICAgIC8vIGNvbnRhaW4gc29tZSBvdGhlciBjYXNlIHZhbHVlKS4gVGhpcyByZW1vdmVzIHRoZSBj
YXNlIHRoYXQgd2FzIHJlbW92ZWQuCisgICAgU3dpdGNoQ2FzZSByZW1vdmVDYXNlKHVuc2lnbmVk
IGluZGV4KTsKKworICAgIHZvaWQgYXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hD
YXNlKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisg
ICAgU3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sq
IGZhbGxUaHJvdWdoKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBl
LmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9p
ZDoKKyAgICAgICAgb3V0LnByaW50KCJWb2lkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEludDMyOgorICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEludDY0OgorICAgICAgICBvdXQucHJpbnQoIkludDY0Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzVHlwZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKKyNpbmNs
dWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitlbnVtIFR5cGUgeworICAgIFZvaWQsCisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAg
RG91YmxlCit9OworCitpbmxpbmUgYm9vbCBpc0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJu
IHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9PSBJbnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9h
dChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUg
VHlwZSBwb2ludGVyKCkgY29uc3QKK3sKKyAgICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAg
ICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0OworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVcHNpbG9uVmFsdWU6On5VcHNpbG9uVmFs
dWUoKQoreworfQorCit2b2lkIFVwc2lsb25WYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4iLCBtX3BoaS0+aW5kZXgoKSk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNVcHNpbG9uVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNVcHNpbG9uVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Vwc2lsb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2ls
b25WYWx1ZV9oCisjZGVmaW5lIEIzVXBzaWxvblZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFVwc2lsb25WYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gVXBzaWxvbjsgfQorCisgICAgflVwc2lsb25W
YWx1ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhpOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICBVcHNp
bG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFs
dWUqIHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGhpLCBWb2lkLCBvcmlnaW4sIHZhbHVl
KQorICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlw
ZSgpID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisKKyAgICBWYWx1ZSogbV9waGk7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFsdWU6On5WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVmFs
dWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqIHZhbHVlKQoreworICAgIC8vIFRoaXMgaXMg
YSBiaXQgY3JhenkuIEl0IGRvZXMgYW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQgb2Ygd2hhdGV2ZXIg
VmFsdWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRoCisgICAgLy8gYSBwbGFpbiBJZGVudGl0eSBWYWx1
ZS4gV2UgZmlyc3QgY29sbGVjdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQsIHRoZW4g
d2UgZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0aGVu
IHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCisKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IG1faW5kZXg7CisgICAgVHlwZSB0eXBlID0gbV90eXBlOworICAgIE9yaWdpbiBv
cmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOwor
ICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworICAgIHZvaWQqIG1p
c2MgPSB0aGlzLT5taXNjOworCisgICAgUkVMRUFTRV9BU1NFUlQodHlwZSA9PSB2YWx1ZS0+dHlw
ZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKworICAgIG5ldyAodGhpcykgKGlu
ZGV4LCBJZGVudGlmeSwgdHlwZSwgb3JpZ2luLCB2YWx1ZSk7CisKKyAgICB0aGlzLT5vd25lciA9
IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CisgICAgdGhpcy0+
bWlzYyA9IG1pc2M7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFs
dWU6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1f
dHlwZSwgIiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bjb2RlKTsKKworICAgIG91dC5wcmludCgiKCIp
OworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxk
cmVuKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKwor
ICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0cmluZ091dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQp
OworICAgIENTdHJpbmcgc3RyaW5nID0gc3RyaW5nT3V0LnRvQ1N0cmluZygpOworICAgIGlmIChz
dHJpbmcubGVuZ3RoKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgc3RyaW5nKTsKKworICAg
IG91dC5wcmludCgiKSIpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCiti
b29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitp
bnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29sIFZhbHVlOjpoYXNEb3VibGUoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworZG91YmxlIFZhbHVlOjphc0RvdWJsZSgp
IGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdAoreworfQor
CitUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQor
eworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEFk
ZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNl
IENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0
T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAg
IGNhc2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAg
Y2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBj
YXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHBvaW50ZXIoKTsKKyAgICBjYXNlIFNF
eHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6
CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRl
clRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAg
Y2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBj
YXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBjYXNlIFNFeHQzMjoK
KyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0OworICAgIGNhc2UgRlJvdW5k
OgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICBjYXNlIE5vcDoK
KyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNWYWx1ZV9oCisjZGVmaW5lIEIzVmFsdWVfaAorCisjaW5jbHVkZSAiQjNPcmlnaW4u
aCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgVmFsdWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxW
YWx1ZSosIDM+IEFkamFjZW5jeUxpc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFBy
ZWZpeCA9ICJAIjsKKworICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlKSB7IHJldHVybiB0
cnVlOyB9CisKKyAgICB2aXJ0dWFsIH5WYWx1ZSgpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNv
ZGUgaXMgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJlcGxhY2luZyB2YWx1ZXMgd2l0aCBpZGVudGl0
eS4KKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKworICAg
IE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIAorICAgIFZh
bHVlKiYgY2hpbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9
CisgICAgVmFsdWUqIGNoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxk
cmVuW2luZGV4XTsgfQorCisgICAgLy8gVGhpcyBjb21wdXRlcyB0aGUgdHlwZSB1c2luZyB0aGUg
b3Bjb2RlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAg
QWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNv
bnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsg
fQorCisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCByZXBs
YWNlV2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
dm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBob3cg
eW91IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5n
IHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNh
biBkbzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9
IHZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncworICAg
IC8vIH0KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29k
ZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxw
dHIKKyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigpIGNv
bnN0OworICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50
NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFz
SW50KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnQo
aW50NjRfdCB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OworICAg
IGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7CisK
K3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAg
ICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KKyAgICAvLyBUaGlzIGZvcm0g
cmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5OgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGls
ZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAg
ICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAg
LCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJn
dW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3Igc3BlY2lm
eWluZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29kZSBoYXMgbm8gY2hpbGRyZW46
CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAs
IG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29y
aWdpbihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3Nl
IG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZp
cnN0IGNoaWxkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBs
aWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9p
bmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBl
KHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4p
CisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7
CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBp
bmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5kIHRoYXQgZG9uJ3QKKyAg
ICAvLyB0YWtlIGFueSBhcmd1bWVudHM6CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRl
eCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Io
b3Bjb2RlLCBudWxscHRyKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAg
IH0KKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciB2YXJhcmdzLgorICAgIGV4cGljaXQgVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwg
Y29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkK
KyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAg
ICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisg
ICAgeworICAgIH0KKworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSogZmly
c3RDaGlsZCk7CisKKyAgICAvLyBUaGlzIGdyb3VwIG9mIGZpZWxkcyBpcyBhcnJhbmdlZCB0byBm
aXQgaW4gNjQgYml0cy4KKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIE9wY29kZSBtX29wY29k
ZTsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICAKKyAgICBPcmlnaW4gbV9vcmlnaW47CisgICAgQWRq
YWNlbmN5TGlzdCBtX2NoaWxkcmVuOworCitwdWJsaWM6CisgICAgQmFzaWNCbG9jayogb3duZXIg
eyBudWxscHRyIH07IC8vIGNvbXB1dGVkIGxhemlseS4KKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQg
eyBudWxscHRyIH07IC8vIHVzZWQgZm9yIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCisg
ICAgdm9pZCogbWlzYyB7IG51bGxwdHIgfTsKK307CisKK2NsYXNzIERlZXBWYWx1ZUR1bXAgewor
cHVibGljOgorICAgIERlZXBWYWx1ZUR1bXAoVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fdmFs
dWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVl
LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxu
dWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWYWx1ZSogbV92YWx1ZTsKK307CisKK0Rl
ZXBWYWx1ZUR1bXAgZGVlcER1bXAoVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVwVmFs
dWVEdW1wKHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxp
bmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gK
KyNkZWZpbmUgQjNWYWx1ZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisj
aW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QqIFZhbHVlOjphcygpCit7CisgICAgaWYg
KFQ6OmFjY2VwdHMob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHRo
aXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZT50eXBlbmFtZSBUPgorY29u
c3QgVCogVmFsdWU6OmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxWYWx1ZSo+
KHRoaXMpLT5hczxUPigpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbnQzMl90IFZhbHVlOjphc0lu
dDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgpOwor
fQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29u
c3Q2NFZhbHVlPigpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpo
YXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0KCk7Cit9
CisKK2ludDY0X3QgVmFsdWU6OmFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIo
KSA/IGFzSW50MzIoKSA6IGFzSW50NjQoKTsKK30KKworYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRf
dCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1
ZTsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFh
czxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKwor
U3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUqIGNoZWNr
ID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2ttYXA7Cisg
ICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4o
KSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1ZhbHVl
SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNW
YWx1ZVJlcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1
ZVJlcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tp
bmQpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb25lOgorICAgIGNhc2UgU29t
ZVJlZ2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAg
b3V0LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
YWNrOgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCIo
Iiwgb2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0
YW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZVJl
cDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVSZXA6
OkFueToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0
ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAg
ICAgICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZh
bHVlUmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50
KCJTdGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpD
b25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVS
ZXBfaAorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0
byBkZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQg
Ym90aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNl
bnRhdGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBz
YXkKKy8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQg
cmVwcmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQu
CisKK2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAv
LyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNr
IGFueSByZXByZXNlbnRhdGlvbi4gQXMgYW4KKyAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2VudGF0
aW9uLCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2Ug
Zm9yIHRoZQorICAgICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBhIENo
ZWNrTXVsLgorICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBj
b3VsZCBiZSBhCisgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJl
ciEKKyAgICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJl
c2VudGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1
dAorICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVy
IEIzIHBpY2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0
IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQu
IEl0J3Mgbm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAg
ICAgIFN0YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlz
IGZvcmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUK
KyAgICAgICAgLy8gb2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8v
IEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0
YW50LWZvbGRlZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAg
ICBWYWx1ZVJlcCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAg
ZXhwbGljaXQgVmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisg
ICAgICAgICwgbV92YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGlj
IFZhbHVlUmVwIHJlZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJl
Zyk7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZy
b21GUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRG
cm9tU1ApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBTdGFja0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZy
b21TUDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IENvbnN0YW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKwor
ICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gVmFsdWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7Cisg
ICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQor
CisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJl
Z2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0K
KworICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90
PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2
NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3Rh
bnQpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91Ymxl
VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+
KHZhbHVlKCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVy
bl9tYXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkzIEBACisjIS91c3IvYmlu
L2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVp
cmUgInBhdGhuYW1lIgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4
ICs9IDEKKyAgICAiX3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisg
ICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bj
b2RlLCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2Rl
LCBjaGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5h
bWUKKyAgICAgICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFsw
LTldKylcWi8pCisgICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUK
KyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbiA/
IGNoaWxkcmVuIDogW10KKyAgICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAgICAgb3Bj
b2RlICE9IG5pbAorICAgIGVuZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAg
ICAgY2hpbGRyZW4uZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQsIGluZGV4
IHwKKyAgICAgICAgICAgIHlpZWxkIHZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5u
YW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAg
IGNoaWxkLmFub255bW91cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDogOmFub25P
cGVyYW5kKSA6IChjaGlsZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisgICAgICAg
ICAgICAgICAgICBpbmRleAorICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZwcm9jKQor
ICAgICAgICB9CisgICAgZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVy
IDpuYW1lLCA6cHJvZHVjdGlvbnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rp
b25zKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVj
dGlvbnMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6Zmls
ZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxp
bmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVt
YmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIj
e2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisg
ICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXpl
KG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJp
bmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlm
IG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAor
ICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhl
cgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVj
dH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21t
ZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNl
IGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2Ug
ZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5k
CisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhm
aWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUg
bm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxu
XSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8K
KyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9
IDEKKyAgICAgICAgd2hlbiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKikvCisgICAgICAg
ICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIp
LCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNw
YWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbPSgpLF0vCisgICAgICAgICAgICByZXN1bHQg
PDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhm
aWxlTmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4u
MjBdLmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAor
ICAgIGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgIyBX
ZSBjYW4gZXh0ZW5kIHRoaXMgYXMgd2UgYWRkIG1vcmUga2V5d29yZHMuIExpa2UsIHdlIG1pZ2h0
IHdhbnQgImluY2x1ZGUiIGV2ZW50dWFsbHkuCisgICAgdG9rZW4gPX4gL1xBKChtYXRjaGVyKSlc
Wi8KK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpB
LVowLTkkXShbYS16QS1aMC05X10qKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAor
CitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAg
ICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBl
bmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAg
ICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJz
ZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFy
c2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5l
bXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUi
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0
IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVu
ZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9y
KCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFk
dmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1
bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmll
ciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAg
IHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywg
cHJvZHVjdGlvbikKKyAgICAgICAgaWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAg
ICAgICAgIHBhcnNlRXJyb3IoIkNoaWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJl
bnQgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRl
Y3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAg
ICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAg
ICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisg
ICAgICAgIGNvbnN1bWUoIm1hdGNoZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3Vt
ZUlkZW50aWZpZXIKKworICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7
CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAg
ICAgICMgV2UgbWlnaHQgd2FudCB0byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQs
IGl0IHdvdWxkIGdvIGhlcmUuCisgICAgICAgICAgICBwcm9kdWN0aW9uID0gcGFyc2VQcm9kdWN0
aW9uCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwg
ZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICAgICAg
cGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICAgICAgZW5kCisKKyAg
ICAgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICAgICAgfQorCisgICAgICAg
IE1hdGNoZXIubmV3KG1hdGNoZXJOYW1lLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKKworICAgIGRl
ZiBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgb3JpZ2luID0gdG9rZW4ub3JpZ2luCisgICAgICAg
IG5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIGlmIHRva2VuID09ICI9IgorICAg
ICAgICAgICAgY29uc3VtZSgiPSIpCisgICAgICAgICAgICBvcGNvZGUgPSBjb25zdW1lSWRlbnRp
ZmllcgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgIGVsc2lmIHRva2VuID09ICIo
IgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgICAgICBvcGNvZGUgPSBuYW1lCisg
ICAgICAgICAgICBuYW1lID0gbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQ
cm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG5pbCwgbmlsKQorICAgICAgICBlbmQKKyAgICAg
ICAgCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgbG9vcCB7CisgICAgICAgICAg
ICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKworICAgICAgICAgICAgYWRkVW5pcXVlKG5hbWUsIHBy
b2R1Y3Rpb25zLCBwYXJzZVByb2R1Y3Rpb24pCisKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2Vu
ID09ICIpIgorICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgIH0KKworICAgICAgICAj
IEFkdmFuY2UgYWZ0ZXIgdGhlICIpIgorICAgICAgICBhZHZhbmNlCisKKyAgICAgICAgUHJvZHVj
dGlvbi5uZXcob3JpZ2luLCBuYW1lLCBvcGNvZGUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorZW5k
CisKK2ZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKGZp
bGVOYW1lKSwgZmlsZU5hbWUpCittYXRjaGVyID0gcGFyc2VyLnBhcnNlCisKK2NsYXNzIFN1Yk1h
dGNoCisgICAgYXR0cl9yZWFkZXIgOmluZGV4TWFwLCA6cHJvZHVjdGlvbnMKKyAgICAKKyAgICBk
ZWYgaW5pdGlhbGl6ZShpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICBAaW5kZXhNYXAg
PSBbXQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBpbmRleExpc3QuZWFjaCB7
CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcCA8PCBpbmRleAor
ICAgICAgICAgICAgQHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICB9
CisgICAgZW5kCisKKyAgICBkZWYgbWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgaW5k
ZXhMaXN0Lm1hcCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1h
cFtpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK0ZpbGUub3BlbigiQjMiICsgbWF0
Y2hlci5uYW1lICsgIi5oIiwgInciKSB7CisgICAgfCBvdXRwIHwKKworICAgIG91dHAucHV0cyAi
Ly8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7ZmlsZU5h
bWV9IC0tIGRvIG5vdCBlZGl0ISIKKworICAgIG91dHAucHV0cyAiI2lmbmRlZiBCMyN7bWF0Y2hl
ci5uYW1lfV9oIgorICAgIG91dHAucHV0cyAiI2RlZmluZSBCMyN7bWF0Y2hlci5uYW1lfV9oIgor
ICAgIAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAKKyAgICBv
dXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyIKKworICAgIG91dHAucHV0
cyAidGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIHJ1biN7
bWF0Y2hlci5uYW1lfShWYWx1ZSogX3ZhbHVlLCBBZGFwdG9yJiBhZGFwdG9yKSIKKyAgICBvdXRw
LnB1dHMgInsiCisKKyAgICAjIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGVtaXQgcHJvcGVybHkg
aW5kZW50ZWQgY29kZSwgYmVjYXVzZSBpdCdzIGEgcmVjdXJzaXZlIGVtaXR0ZXIuIElmIHlvdQor
ICAgICMgd2FudCB0byBzZWUgdGhlIGNvZGUgbmljZWx5IGZvcm1hdHRlZCwgb3BlbiBpdCBpbiBh
IGdvb2QgdGV4dCBlZGl0b3IgYW5kIGFzayBpdCB0byBmb3JtYXQgaXQKKyAgICAjIGZvciB5b3Uu
CisKKyAgICAjIEluIG9kZCBzaXR1YXRpb25zLCB3ZSBtYXkgbm90IHVzZSB0aGUgaW5wdXQgdmFs
dWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICBvdXRwLnB1
dHMgIlVOVVNFRF9QQVJBTShfdmFsdWUpOyIKKyAgICAgICAgCisgICAgIyBUaGlzIGp1c3QgcHJv
dGVjdHMgdGhlIGNhbGxlciBmcm9tIGhhdmluZyB0byB3b3JyeSBhYm91dCBwcm9kdWN0aW9ucyBo
YXZpbmcgZGlmZmVyZW50IGxlbmd0aHMuCisgICAgZGVmIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVl
TmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9k
dWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRl
eCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhM
aXN0c1stMV1bMF1dLmNoaWxkcmVuLmxlbmd0aCA9PSBwcm9kdWN0aW9uLmNoaWxkcmVuLmxlbmd0
aAorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBl
bmQKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8
IGluZGV4TGlzdCB8CisgICAgICAgICAgICBsZW5ndGggPSBwcm9kdWN0aW9uc1tpbmRleExpc3Rb
MF1dLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgaWYgbGVuZ3RoID4gMAorICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiaWYgKCN7dmFsdWVOYW1lfS0+Y2hpbGRyZW4uc2l6ZSgpID49ICN7
bGVuZ3RofSkgeyIKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeWll
bGQgaW5kZXhMaXN0CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVuZAorCisgICAg
IyBUaGlzIGVmZmljaWVudGx5IHNlbGVjdHMgZnJvbSB0aGUgZ2l2ZW4gc2V0IG9mIHByb2R1Y3Rp
b25zLiBJdCBhc3N1bWVzIHRoYXQgcHJvZHVjdGlvbnMKKyAgICAjIGFyZSBub3QgZHVwbGljYXRl
ZC4gSXQgeWllbGRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgcHJvZHVjdGlvbiwgYW5kIHRoZSBj
b3JvdXRpbmUgaXMKKyAgICAjIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBzcGVjaWZpYyBjb2Rl
IGZvciB0aGF0IHByb2R1Y3Rpb24uIFRoZSBjb3JvdXRpbmUgaXMgZ2l2ZW4gbGlzdHMgb2YKKyAg
ICAjIGluZGljZXMgb2YgcG9zc2libHktbWF0Y2hpbmcgcHJvZHVjdGlvbnMuCisgICAgZGVmIG1h
dGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgIyBG
aXJzdCwgc3BsaXQgdGhlIHByb2R1Y3Rpb25zIGxpc3QgaW50byBydW5zIG9mIHByb2R1Y3Rpb25z
IHdpdGggYW4gb3Bjb2RlIGFuZCBwcm9kdWN0aW9ucworICAgICAgICAjIHdpdGhvdXQgb25lLgor
ICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2lu
ZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYg
aW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5oYXNPcGNv
ZGUgPT0gcHJvZHVjdGlvbi5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0x
XSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMg
PDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
ICMgTm93LCBlbWl0IHBhdHRlcm4gbWF0Y2hpbmcgY29kZS4gV2UgZG8gaXQgZGlmZmVyZW50bHkg
Zm9yIGxpc3RzIHdpdGggYW4gb3Bjb2RlIHRoYW4gZm9yCisgICAgICAgICMgbGlzdHMgd2l0aG91
dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4TGlz
dCB8CisgICAgICAgICAgICBpZiBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmhhc09wY29kZQor
ICAgICAgICAgICAgICAgICMgTm93LCB3ZSBzcGxpdCB0aGlzIGluZGV4IGxpc3QgaW50byBncm91
cHMgZm9yIGVhY2ggb3Bjb2RlLgorICAgICAgICAgICAgICAgIGdyb3VwcyA9IHt9CisgICAgICAg
ICAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4IHwK
KyAgICAgICAgICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHByb2R1Y3Rpb25zW2luZGV4XQorICAg
ICAgICAgICAgICAgICAgICBpZiBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdCisgICAgICAgICAg
ICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdIDw8IGluZGV4CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9kdWN0
aW9uLm9wY29kZV0gPSBbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgRW1pdCBhIHN3aXRjaCBzdGF0ZW1lbnQuCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7dmFsdWVOYW1lfS0+b3Bjb2RlKCkp
IHsiCisgICAgICAgICAgICAgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgICAgICAgICAg
ICAgIHwgb3Bjb2RlLCBzdWJJbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJN
YXRjaC5uZXcoc3ViSW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0i
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5u
ZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChv
dXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAg
ICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFw
SW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmQK
KyAgICAgICAgfQorICAgIGVuZAorCisgICAgIyBUYWtlcyBwcm9kdWN0aW9ucyB0aGF0IGhhdmUg
dGhlIHNhbWUgb3Bjb2RlIGFuZCB0aGUgc2FtZSBsZW5ndGggYW5kIHNlbGVjdHMgZnJvbSB0aGVt
IGJhc2VkIG9uCisgICAgIyB0aGUgcHJvZHVjdGlvbnMgYXQgdGhlIGdpdmVuIGNvbHVtbi4KKyAg
ICBkZWYgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucywgY29sdW1uSW5k
ZXgpCisgICAgICAgIGlmIGNvbHVtbkluZGV4ID49IHByb2R1Y3Rpb25zWzBdLmNoaWxkcmVuLmxl
bmd0aAorICAgICAgICAgICAgeWllbGQgKDAuLi4ocHJvZHVjdGlvbnMuc2l6ZSkpLnRvX2EKKyAg
ICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKworICAgICAgICBzdWJWYWx1ZSA9IG5ld1Zh
cgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICBvdXRwLnB1dHMgIlZh
bHVlKiAje3N1YlZhbHVlfSA9ICN7dmFsdWVOYW1lfS0+Y2hpbGQoI3tjb2x1bW5JbmRleH0pOyIK
KworICAgICAgICAjIFdlIG1heSBub3QgdXNlIHRoaXMgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVy
IHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICAgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0o
I3tzdWJWYWx1ZX0pOyIKKyAgICAgICAgCisgICAgICAgIHN1YlByb2R1Y3Rpb25zID0gcHJvZHVj
dGlvbnMubWFwIHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiB8CisgICAgICAgICAgICBwcm9k
dWN0aW9uLmNoaWxkcmVuW2NvbHVtbkluZGV4XQorICAgICAgICB9CisKKyAgICAgICAgbWF0Y2hS
ZWN1cnNpdmVseShvdXRwLCBzdWJWYWx1ZSwgc3ViUHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAg
IHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4
TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5h
bWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCArIDEpIHsKKyAgICAgICAgICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5k
ZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG91
dHAucHV0cyAifSIKKyAgICBlbmQKKworICAgIGRlZiBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHZh
bHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFs
dWVOYW1lLCBwcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAg
ICAgICAgIyBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoaXMgaW5kZXggbGlzdCBjb250YWlucyBw
cm9kdWN0aW9ucyB3aXRoIHRoZSBzYW1lIG9wY29kZSBhbmQKKyAgICAgICAgICAgICMgdGhlIHNh
bWUgbGVuZ3RoLgorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0
LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwg
c3ViTWF0Y2gucHJvZHVjdGlvbnMsIDApIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8
CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgbWF0Y2hSZWN1cnNpdmVs
eShvdXRwLCAiX3ZhbHVlIiwgbWF0Y2hlci5wcm9kdWN0aW9ucykgeworICAgICAgICB8IGluZGV4
TGlzdCB8CisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAor
ICAgICAgICAgICAgcHJvZHVjdGlvbiA9IG1hdGNoZXIucHJvZHVjdGlvbnNbaW5kZXhdCisgICAg
ICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3By
b2R1Y3Rpb24udmFyTmFtZX0gPSBfdmFsdWU7IgorICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVu
dHMgPSBbXQorICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICB0
cnlBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgbnVtU2NvcGVzID0gMAorICAgICAgICAgICAg
c2VlbiA9IHt9CisgICAgICAgICAgICBwcm9kdWN0aW9uLmVhY2hWYXJpYWJsZSB7CisgICAgICAg
ICAgICAgICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5hbWUsIGNoaWxkVmFyTmFtZSwga2luZCwg
aW5kZXggfAorICAgICAgICAgICAgICAgIGxvYWRFeHByID0gIiN7cGFyZW50VmFyTmFtZX0tPmNo
aWxkKCN7aW5kZXh9KSIKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBzZWVu
W2NoaWxkVmFyTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3VmFyCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7dG1wfSA9ICN7bG9hZEV4cHJ9OyIKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t0bXB9ID09ICN7Y2hpbGRWYXJOYW1l
fSkgeyIKKyAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNlZW5bY2hpbGRWYXJOYW1lXSA9IHRydWUKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUq
ICN7Y2hpbGRWYXJOYW1lfSA9ICN7bG9hZEV4cHJ9OyIKKworICAgICAgICAgICAgICAgICAgICBp
ZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGlsZE5h
bWUgPX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
aWYgKCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aW50ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9y
IGtpbmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kQXJndW1l
bnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5kIG9yIGtpbmQgPT0gOmFub25P
cGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUg
aWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFuZAorICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRhcHRvci5h
Y2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBhZGFwdG9y
LmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikK
KyAgICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3IuYWNjZXB0T3BlcmFuZHMoIiAr
IG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIG91dHAucHV0
cygiICAgICYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1bWVudHMu
am9pbigiLCAiKSArICIpKSIpCisgICAgICAgICAgICBvdXRwLnB1dHMgIiAgICByZXR1cm47Igor
ICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
In0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21hdGNoZXIu
bmFtZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWly
QXJnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQodG1wKCkpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmludCgiJCIsIG1fb2Zm
c2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIG91dC5wcmlu
dGYoIiQweCVsbHgiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFkZHI6
CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7
CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5w
cmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIiwiLCBpbmRl
eCgpKTsKKyAgICAgICAgaWYgKHNjYWxlKCkgIT0gMSkKKyAgICAgICAgICAgIG91dC5wcmludCgi
LCIsIHNjYWxlKCkpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5w
cmludChvZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIigiLCBwb2ludGVyRHVtcChzdGFja1Ns
b3QoKSksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAg
IGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQpOworICAgICAgICBv
dXQucHJpbnQoIihjYWxsQXJnKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWxDb25k
OgorICAgICAgICBvdXQucHJpbnQoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZXN1bHRDb25k
aXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIG91
dC5wcmludCgiJiIsIHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUg
QWlyQXJnX2gKKworI2luY2x1ZGUgIkFpclRtcC5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNw
ZWNpYWw7CitjbGFzcyBTdGFja1Nsb3Q7CisKKy8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGlu
dGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNl
ZSBjb2RlIGxpa2UKKy8vIEluc3QoLi4uLCBBcmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBi
bGFoKSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJl
cnMgYXJlIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhl
bSBhIGxvdC4KKyAgICBlbnVtIEtpbmQgOiBpbnQ4X3QgeworICAgICAgICBUbXAsCisgICAgICAg
IEltbSwKKyAgICAgICAgSW1tNjQsCisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAorICAg
ICAgICBDYWxsQXJnLAorICAgICAgICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAg
UmVzQ29uZCwKKyAgICAgICAgU3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4
X3QgeworICAgICAgICBVc2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsK
KworICAgIGVudW0gVHlwZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAg
IH07CisKKyAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNEZWYo
Um9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2Ug
VXNlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERlZjoKKyAgICAg
ICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3JCM1R5cGUoQjM6OlR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAgICAg
Y2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBHUDsK
KyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gRlA7CisgICAgICAgIH0K
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBHUDsKKyAgICB9
CisKKyAgICBBcmcoKQorICAgIHsKKyAgICB9CisKKyAgICBBcmcoQWlyOjpUbXAgdG1wKQorICAg
ICAgICA6IG1fa2luZChUbXApCisgICAgICAgICwgbV9iYXNlKHRtcCkKKyAgICB7CisgICAgfQor
CisgICAgc3RhdGljIEFyZyBpbW0oaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW07CisgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBBcmcgaW1tNjQoaW50cHRyX3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9raW5kID0gSW1tNjQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcg
YWRkcmVzcyhBaXI6OlRtcCBiYXNlLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAg
ICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gQWRkcjsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBzdGF0aWMgQXJnIHN0YWNrKFN0YWNrU2xvdCogdmFsdWUsIGludDMyX3Qgb2Zmc2V0
ID0gMCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0PGludHB0cl90
Pih2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0gb2Zmc2V0OyAvLyBJIGtub3csIHl1
Y2suCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBjYWxs
QXJnKGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IENhbGxBcmc7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNl
dDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1Zh
bGlkU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7
CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAyOgorICAgICAgICBjYXNlIDQ6CisgICAg
ICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGlj
IHVuc2lnbmVkIGxvZ1NjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAg
ICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgNDoKKyAgICAg
ICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gMzsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGlu
ZGV4KEFpcjo6VG1wIGJhc2UsIEFpcjo6VG1wIGluZGV4LCB1bnNpZ25lZCBzY2FsZSA9IDEsIGlu
dDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7Cisg
ICAgICAgIEFTU0VSVChpbmRleC5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNWYWxpZFNjYWxl
KHNjYWxlKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJ
bmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX2lu
ZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0gc3RhdGljX2Nhc3Q8aW50MzJf
dD4oc2NhbGUpOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZWxDb25kOworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgc3RhdGljIEFyZyByZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29u
ZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IFJlc0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHNwZWNpYWwoQWlyOjpT
cGVjaWFsKiBzcGVjaWFsKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IFNwZWNpYWw7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4oc3BlY2lhbCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQKKyAgICAgICAgICAgICYmIG1f
a2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fYmFzZSA9PSBvdGhlci5tX2Jh
c2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleAorICAgICAgICAgICAg
JiYgbV9zY2FsZSA9PSBvdGhlci5tX3NjYWxlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiAqdGhpcyAhPSBBcmcoKTsgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2tpbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFRtcDsKKyAgICB9CisKKyAgICBib29s
IGlzSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tOworICAg
IH0KKworICAgIGJvb2wgaXNJbW02NCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2lu
ZCgpID09IEltbTY0OworICAgIH0KKworICAgIGJvb2wgaXNBZGRyKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKKyAgICB9CisKKyAgICBib29sIGlzSW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisK
KyAgICBib29sIGlzUmVsQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgp
ID09IFJlbENvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZXNDb25kOworICAgIH0KKworICAgIGJvb2wgaXNT
cGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsK
KyAgICB9CisKKyAgICBBaXI6OlRtcCB0bXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBUbXApOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGlu
dDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW0g
fHwga2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKwor
ICAgIHZvaWQqIHBvaW50ZXJWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgQWlyOjpUbXAgYmFzZSgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09
IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisKKyAgICBpbnQzMl90IG9m
ZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2luZCgpID09IFN0YWNrKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fc2NhbGUpOworICAgICAgICBBU1NF
UlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KTsKKyAgICB9
CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTdGFja1Ns
b3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgaW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2lu
ZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9zY2FsZTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgQWlyOjpTcGVjaWFsKiBzcGVjaWFsKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3BlY2lhbCk7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQpOworICAgIH0KKwor
ICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAm
JiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQVG1wKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlAoKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0
IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIElt
bTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNh
c2UgU3RhY2tTbG90OgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgUmVsQ29u
ZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4g
aXNHUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBB
cmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgRlAgdmFsdWUuCisg
ICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVz
Q29uZDoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgQmFz
ZToKKyAgICAgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAg
ICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxvdyBJbW02NCBhcyBhIGRvdWJsZSBpbW1lZGlh
dGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzRlBU
bXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFzVHlwZSgpIGNvbnN0CisgICAg
eworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAg
Y2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmlndW91cyBmb3Igc29tZSBhcmcg
a2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisKKyAgICBib29sIGlzVHlwZShU
eXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQKCk7CisgICAgICAgIGNhc2UgRlA6Cisg
ICAgICAgICAgICByZXR1cm4gaXNGUCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBp
c0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQ
UigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAgICB9CisKKyAgICBG
UFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcHIoKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKworICAgIHVuc2lnbmVk
IGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwVG1wSW5k
ZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQg
dG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnRtcEluZGV4KCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVh
Y2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAg
ICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBmdW5jdG9y
KG1faW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMgaXMgc21hcnQgZW5v
dWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBVc2VEZWYgcnVsZSB3
aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1wbGUs
IHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVyY3gpCisgICAgLy8KKyAgICAvLyBU
aGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUsIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgewor
ICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xlLCBh
cmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAg
ICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAg
ICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXV0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAg
ICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
NjQgYXNUcnVzdGVkSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tNjQo
KSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KHBvaW50ZXJW
YWx1ZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFz
QWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2Fz
dDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNl
SW5kZXggYXNCYXNlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgo
KSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAg
ICAgbV9iYXNlLmdwcigpLCBtX2luZGV4LmdwcigpLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6U2NhbGU+KGxvZ1NjYWxlKCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4o
bV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBhc1JlbGF0aW9uYWxDb25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzUmVsQ29uZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OlJlc3VsdENvbmRpdGlvbiBhc1Jlc3VsdENvbmRpdGlvbigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNSZXNDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludDY0X3Qg
bV9vZmZzZXQgeyAwIH07CisgICAgS2luZCBtX2tpbmQgeyBJbW0gfTsKKyAgICBpbnQzMl90IG1f
c2NhbGUgeyAxIH07CisgICAgQWlyOjpUbXAgbV9iYXNlOworICAgIEFpcjo6VG1wIG1faW5kZXg7
Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJB
cmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNC
bG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9
CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6XG4iKTsKKyAgICBmb3IgKGNvbnN0IEluc3Qm
IGluc3QgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpckJhc2ljQmxvY2tfaAorI2RlZmluZSBBaXJCYXNpY0Jsb2NrX2gK
KworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK2NsYXNzIEJhc2ljQmxvY2sgewor
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0g
IiMiOworCisgICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7CisgICAgdHlwZWRlZiBW
ZWN0b3I8QmFzaWNCbG9jayosIDI+IFN1Y2Nlc3Nvckxpc3Q7CisgICAgCisgICAgdW5zaWduZWQg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgSW5zdExpc3Q6Oml0
ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5zdExpc3Q6
Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKyAgICBJbnN0TGlzdDo6
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0K
KyAgICBJbnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0
cy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNp
emUoKTsgfQorICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0c1tpbmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1f
aW5zdHNbaW5kZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0cy5sYXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9pbnN0cy5sYXN0
KCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBhcHBlbmRJbnN0
KEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3YXJk
PEluc3Q+KGluc3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgdm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKSk7CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBjYXNlIHRvIHdo
aWNoIHRoZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIxIiBjYXNlIGlz
IHRoZQorICAgIC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGZh
bGwtdGhyb3VnaCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25lZCBudW1TdWNj
ZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNz
b3JzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgp
IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0
JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAg
IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhd
OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBE
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENv
ZGU7CisgICAgCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgfQor
CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBJbnN0TGlzdCBtX2luc3RzOworICAgIFN1Y2Nl
c3Nvckxpc3QgbV9zdWNjZXNzb3JzOworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsK
K3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAg
ICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAg
ICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91
dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxv
Y2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNp
YWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
Q2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgp
CisgICAgOiBTcGVjaWFsKCJDQ2FsbCIpOworeworICAgIG1fY2xvYmJlcmVkUmVncyA9IFJlZ2lz
dGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdp
c3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUo
UmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVy
ZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisK
K0NDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFs
Ojpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJn
Q2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6
VXNlLCBBcmc6OkdQKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5h
cmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIEZvciB0aGUgdHlwZSwgd2UgY2FuIGp1c3Qg
cXVlcnkgdGhlIGFyZydzIHR5cGUuIFRoZSBhcmcgd2lsbCBoYXZlIGEgdHlwZSwgYmVjYXVzZSB3
ZQorICAgICAgICAvLyByZXF1aXJlIHRoZXNlIGFyZ3MgdG8gYmUgYXJndW1lbnQgcmVnaXN0ZXJz
LgorICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbaV0sIEFyZzo6VXNlLCBpbnN0LmFyZ3NbaV0u
dHlwZSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGlu
c3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6
SW1tOgorICAgICAgICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGlm
IChzaXplb2Yodm9pZCopID09IDgpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgY2Fz
ZSBBcmc6OlN0YWNrOgorICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbnN0
LmFyZ3NbMV0uaXNHUCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5z
dC5hcmdzW2ldLmlzUmVnKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKGluc3QuYXJnc1tpXSA9PSBUbXAoc2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJl
dHVybiAgZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENDYWxsU3Bl
Y2lhbDo6YWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIC8vIEFy
ZyAxIGNhbiBiZSBhIHN0YWNrIGFkZHJlc3MgZm9yIHN1cmUuCisgICAgaWYgKGFyZ0luZGV4ID09
IDEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBDQ2FsbFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lz
dGVyU2V0JikKK3sKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lhbDo6Z2VuZXJh
dGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikKK3sK
KyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgor
ICAgIGNhc2UgQXJnOjpJbW1QdHI6CisgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihpbnN0LmFyZ3NbMV0ucG9pbnRlclZhbHVlKCkpLCBzY3JhdGNoUmVnaXN0ZXIp
OworICAgICAgICBqaXQuY2FsbChzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uZ3ByKCkpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgaml0LmNhbGwoaW5z
dC5hcmdzWzFdLmFzQWRkcmVzcygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworY29uc3QgUmVnaXN0ZXJT
ZXQmIENDYWxsU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sKKyAgICByZXR1cm4gbV9j
bG9iYmVyZWRSZWdzOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJmdW5jdGlvbiBjYWxsIHRoYXQg
dXNlcyB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
Q2FsbFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNDYWxsU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyQ0NhbGxTcGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxTcGVjaWFsX2gKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBVc2UgdGhpcyBzcGVj
aWFsIGZvciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFyZyAwIGlzIG9mIGNvdXJzZSBhIFNwZWNp
YWwgYXJnIHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0NhbGxTcGVjaWFsIG9iamVjdC4gQXJnIDEg
aXMgdGhlIGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJbW1QdHIsIGEgcmVnaXN0ZXIsIG9yIGFu
IGFkZHJlc3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3MgYXJlIGp1c3QgdGhlIHNldCBvZiBhcmd1
bWVudCByZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwuIEZvciBhcmd1bWVudHMgdGhhdCBnbyB0
bworLy8gdGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0aGUgZ3J1bnQgd29yayBvZiBkb2luZyB0
aG9zZSBzdGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBvbmx5IHJlYXNvbiB3aHkKKy8vIHdlIHNw
ZWNpZnkgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBhcmd1bWVudHMgdG8gYSBjYWxsIGlzIHNv
IHRoYXQgdGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBzZWUKKy8vIHRoYXQgdGhleSBnZXQgdXNl
ZCBoZXJlLiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRvbWFnaWNhbGx5IHJlcG9ydCBhbGwgYXJn
dW1lbnQgcmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2VkIGJlY2F1c2UgaWYgd2UgaGFkIGEgY2Fs
bCB0aGF0IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhleSdkIGFwcGVhciB0byBiZSBsaXZlIHVu
dGlsIHNvbWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhlIHByb2xvZ3VlLCB3aGljaGV2ZXIgaGFw
cGVuZWQgc29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNpYWwgOiBwdWJsaWMgU3BlY2lhbCB7Citw
dWJsaWM6CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAgfkNDYWxsU3BlY2lhbCgpOworCisgICAg
Ly8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4gSXQganVz
dCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBub3QKKyAgICAvLyB1c2VkIGZvciBh
cmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0aGlzIGlz
IHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8gdGhpcyBzcGVjaWFsIHRvIGJlIHNw
ZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNoUmVnaXN0
ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwLgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNo
QXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92
ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1p
dHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVw
b3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBvdmVycmlkZTsKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVy
YXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xv
YmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CisgICAgCisgICAgdm9pZCBkZWVwRHVtcEltcGwo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZWdpc3RlclNl
dCBtX2Nsb2JiZXJlZFJlZ3M7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBBaXJDQ2FsbFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKK3sKK30KKworQ29kZTo6
fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jaygpCit7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tzLnNp
emUoKSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxv
Y2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIENvZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykp
OworICAgIGlmIChudW1TdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayBz
bG90czpcbiIpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IHN0YWNrU2xvdHMoKSkK
KyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNsb3QpLCAiXG4iKTsKKyAg
ICB9CisgICAgaWYgKG51bVNwZWNpYWxzKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTcGVjaWFs
czpcbiIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFscygpKQorICAg
ICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCksICJcbiIpOworICAg
IH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyQ29kZV9oCisjZGVmaW5lIEFpckNvZGVfaAorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwor
bmFtZXNwYWNlIEFpciB7CisKKy8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRv
IHRoZSBiYXJlIG1ldGFsLiBJdCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFuIHRo
ZQorLy8gZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSAtIGZvciBleGFtcGxlIGlmIHlvdSdyZSBnZW5l
cmF0aW5nIDFNQiBvZiBtYWNoaW5lIGNvZGUsIHlvdSBuZWVkIGFib3V0CisvLyA0ME1CIG9mIEFp
ci4KKworY2xhc3MgQ29kZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29kZSk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ29kZSgpOworICAgIH5Db2Rl
KCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jaygpOworCisgICAgU3RhY2tTbG90KiBhZGRT
dGFja1Nsb3QoKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNw
ZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8gbWFrZSBh
IEMgY2FsbCEKKyAgICBTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRv
cltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNs
YXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAg
ICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJl
KQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9wcm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRl
cmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmlu
ZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQo
dW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1f
cHJvY2VkdXJlLT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisgICAgICAgICAg
ICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmV4OworICAgICAgICB9CisKKyAg
ICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsK
KyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgbnVtQmxvY2tzKCkpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVj
aWFsPj4gbV9zcGVjaWFsczsKKyAgICBTcGVjaWFsKiBtX2NhbGxTcGVjaWFsOworcHVibGljOgor
ICAgIHVuc2lnbmVkIGZyYW1lU2l6ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEFpckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisjZGVm
aW5lIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKworI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3Ry
dWN0IEdlbmVyYXRpb25Db250ZXh0IHsKKyAgICB0eXBlZGVmIHZvaWQgTGF0ZVBhdGhGdW5jdGlv
bihDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworICAgIHR5cGVkZWYgU2hhcmVk
VGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF0
ZVBhdGg+PiBsYXRlUGF0aHM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorCisjaW5jbHVkZSAiQjNWYWx1
ZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zdDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChvcGNvZGUsICIgIiwgbGlzdER1bXAoYXJncyks
ICIgIDsgIiwgKm9yaWdpbik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckluc3RfaAorI2RlZmluZSBBaXJJbnN0X2gKKworI2luY2x1
ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpck9wY29kZS5oIgorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsK
KworbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKKworc3RydWN0
IEluc3QgeworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPEFyZywgMz4gQXJnTGlzdDsKKwor
ICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbikKKyAgICAgICAgOiBvcmlnaW4o
b3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgSW5zdChPcGNvZGUgb3Bjb2Rl
LCBWYWx1ZSogb3JpZ2luLCBBcmcgYXJnLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAg
ICA6IGFyZ3N7IGFyZywgYXJndW1lbnRzLi4uIH0KKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQor
ICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2Rl
IG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQorICAgICAg
ICA6IGFyZ3MoYXJndW1lbnRzKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwg
b3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBW
YWx1ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoV1RGOjpt
b3ZlKGFyZ3VtZW50cykpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNv
ZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3Rv
cnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZv
ciB0aGluZ3MgdGhhdAorICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsg
aWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKKyAg
ICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KKworICAgIC8vIFRoaXMgb25seSB3YWxrcyB0
aG9zZSBUbXBzIHRoYXQgYXJlIGV4cGxpY2l0bHkgbWVudGlvbmVkLCBhbmQgaXQgZG9lc24ndCB0
ZWxsIHlvdSB0aGVpciByb2xlCisgICAgLy8gb3IgdHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKKyAgICB7CisgICAgICAgIGZvciAoQXJnIGFyZyA6IGFyZ3MpCisgICAgICAgICAgICBhcmcu
Zm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAgfQorCisgICAgdHlwZWRlZiB2b2lkIEVhY2hB
cmdDYWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSk7CisgICAgCisgICAgLy8gQ2Fs
bHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4gVGhpcyBmdW5jdGlvbiBpcyBh
dXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYg
ZnVuY3Rvcik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0bXAsIHJvbGUsIHR5
cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1w
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JFYWNoQXJnUm9sZSgK
KyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlw
ZSkgeworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIGZ1bmN0b3Ip
OworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMg
aW5zdHJ1Y3Rpb24gaGFzIGEgU3BlY2lhbCouIFRoaXMgdW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0
aW9uYWxpdHkuCisgICAgYm9vbCBoYXNTcGVjaWFsKCkgY29uc3Q7CisKKyAgICAvLyBSZXBvcnRz
IGFueSBhZGRpdGlvbmFsIHJlZ2lzdGVycyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5v
dGUgdGhhdCBmb3IgZWZmaWNpZW5jeSwKKyAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5
IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpOworCisgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdo
aWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4gVGhpcyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBj
b2RlZ2VuLiBOb3RlCisgICAgLy8gdGhhdCBmb3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lz
dGVycygpIG9ubHkgd29ya3MgaWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICB2b2lk
IHJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmKTsKKworICAgIC8vIElzIHRo
aXMgaW5zdHJ1Y3Rpb24gaW4gb25lIG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMg
ZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJi
LgorICAgIGJvb2wgaXNWYWxpZEZvcm0oKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1
Y3Rpb24gaXMgaW4gYSB2YWxpZCBmb3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBv
bmUgb2YgdGhlIHZhbGlkCisgICAgLy8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNp
bmcgdGhlIHN0YWNrIChvciBhIFN0YWNrU2xvdCBvciBDYWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRo
ZQorICAgIC8vIGdpdmVuIGluZGV4PyBTcGlsbGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBh
cmdzIGJ5IGluZGV4IHRvIGZpbmQgVG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7CisgICAgLy8gaWYg
aXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlzIHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUg
QXJnOjpUbXAgd2l0aCBhbiBBcmc6OkFkZHIuIElmIGl0CisgICAgLy8gZmluZHMgYSBub24tVG1w
IEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFyZydzIGZvckVhY2hUbXAgdG8gZG8gYSByZXBsYWNl
bWVudCB0aGF0IHdheS4KKyAgICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5l
cmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGFkbWl0c1N0YWNrKHVuc2ln
bmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEdlbmVyYXRlIHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0
cnVjdGlvbi4gVGhpcyBpcywgbGlrZSwgbGl0ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlz
IHRoZQorICAgIC8vIHRlcm1pbmFsLCBpdCByZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8g
YmUgbGlua2VkIGZvciB0aGUgInRoZW4iIGNhc2UsIHdpdGggdGhlICJlbHNlIgorICAgIC8vIGNh
c2UgYmVpbmcgZmFsbC10aHJvdWdoLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5
IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEND
YWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworICAgIEFyZ0xpc3QgYXJnczsKKyAgICBWYWx1ZSogb3JpZ2luOyAv
LyBUaGUgQjM6OlZhbHVlIHRoYXQgdGhpcyBvcmlnaW5hdGVkIGZyb20uCisgICAgT3Bjb2RlIG9w
Y29kZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEFpckluc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0
SW5saW5lc19oCisjZGVmaW5lIEFpckluc3RJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFpckluc3Qu
aCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWxzLmgi
CisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitib29sIEluc3Q6Omhh
c1NwZWNpYWwoKSBjb25zdAoreworICAgIHJldHVybiBhcmdzLnNpemUoKSAmJiBhcmdzWzBdLmlz
U3BlY2lhbCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRS
ZWdzKCkKK3sKKyAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVn
cygqdGhpcyk7Cit9CisKK3ZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdp
c3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0
VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBib29sIGlz
U2hpZnRWYWxpZChJbnN0JiBpbnN0KQoreworI2lmIENQVShYODYpCisgICAgcmV0dXJuIGluc3Qu
YXJnc1swXSA9PSBUbXAoWDg2UmVnaXN0ZXI6OmN4KTsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7
CisjZW5kaWYKK30gICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbHVlKEluc3QmIGluc3Qp
Cit7CisgICAgcmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zdElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisjIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6
RyA9PiB1c2Ugb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+
IGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVz
ZSBhbmQgZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9
PiB1c2Ugb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxv
YXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJl
Z2lzdGVyIG9yIHZhbHVlCisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5
IG9yIHJlZ2lzdGVyCisjIEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9PiBU
cnVzdGVkSW1tNjQKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZz
ZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVz
cworIworIyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVu
ZGVyc3RhbmRzIHRoYXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2Yg
dGhpbmdzLiBTbywgYWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0
aW9uIHN0eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJl
IG1lYW5pbmdmdWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToK
KyMKKyMgRm9vNDIgVTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBh
cnNlciB3b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpH
LCBVRDpGCisjICAgICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28t
Zm9ybSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQg
dXNlcytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhl
cmUgaGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8g
TWFjcm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQz
MikuCisKK05vcAorCitBZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRk
cgorICAgIEltbSwgVG1wCisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6
RywgVTpHLCBEOkcKKyAgICBJbW0sIFRtcCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRt
cCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJ
bW0sIEFkZHIKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBU
bXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworTW92
ZSBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02NCwgVG1wCisg
ICAgQWRkciwgVG1wIGFzIGxvYWQgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBp
cyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBUbXAsIEFkZHIgYXMg
c3RvcmUKKworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1w
IGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKworTW92ZTY0VG9E
b3VibGUgVTpHLCBEOkYKKyAgICBUbXAsIFRtcAorCitNb3ZlRG91YmxlVG82NCBVOkYsIEQ6Rwor
ICAgIFRtcCwgVG1wCisKK0JyYW5jaEFkZDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBS
ZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1t
LCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisK
K0JyYW5jaE11bDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRt
cAorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAv
YnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAg
IFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQs
IEFkZHIsIFRtcAorCitCcmFuY2hOZWczMiBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQs
IFRtcAorCitKdW1wIC9icmFuY2gKKworUmV0CisKKyMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJl
aGF2aW9yLiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUg
U3BlY2lhbCBvcGVyYW5kLAorIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgorc3Bl
Y2lhbCBQYXRjaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bl
Y2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitTcGVjaWFsOjpTcGVjaWFsKGNvbnN0IGNoYXIqIG5hbWUpCisg
ICAgOiBtX25hbWUobmFtZSkKKyAgICAsIG1faW5kZXgoVUlOVF9NQVgpCit7Cit9CisKK1NwZWNp
YWw6On5TcGVjaWFsKCkKK3sKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fbmFtZSk7CisgICAgaWYgKG1faW5kZXggIT0g
VUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludChtX2luZGV4KTsKK30KKwordm9pZCBTcGVjaWFs
OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgqdGhp
cywgIjogIik7CisgICAgZGVlcER1bXBJbXBsKG91dCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwZWNpYWxfaAor
I2RlZmluZSBBaXJTcGVjaWFsX2gKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9TY29wZWRMYW1iZGEuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBHZW5lcmF0aW9uQ29udGV4dDsKKworY2xhc3MgU3BlY2lh
bCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlY2lhbCk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3BlY2lhbChjb25zdCBjaGFyKiBuYW1lKTsKKyAg
ICB2aXJ0dWFsIH5TcGVjaWFsKCk7CisKKyAgICBjb25zdCBjaGFyKiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9uYW1lOyB9CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29u
c3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGlzVmFsaWQoSW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRzU3RhY2so
SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMgY2FsbGVk
IG9uIGZvciBlYWNoIEluc3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0IHRoZXJl
IGlzIG5vIHdheSB0bworICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRzIHVzZWQg
ZnJvbSBqdXN0IG9uZSBJbnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUuIFNvLAor
ICAgIC8vIGlmIHlvdSB3YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRvIGdlbmVy
YXRlKCksIHRoZW4geW91IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkgR2VuZXJh
dGUgQWlyIHRoYXQgc3RhcnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRjaCBJbnN0
LCBhbmQgdGhlbiBtZXJnZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlzIGlzIHBy
b2JhYmx5IG5vdCBncmVhdCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlIHRo
YXQKKyAgICAvLyAgICBBaXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3VjaCBkdXBs
aWNhdGlvbiBkaWRuJ3QgY2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAgICAvLyAg
ICByZWdpc3RlciBhc3NpZ25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUgU3BlY2lh
bCBtYWludGFpbiBhIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3JrcyBiZWNh
dXNlIHRoZSBhbmFseXNpcworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNhbGwgaXMg
cGVyZm9ybWVkIGp1c3QgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMgbm8gd2F5
CisgICAgLy8gICAgZm9yIHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5zdHMgdG8g
YmUgcmVhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAgICBjb25z
dWx0IHRoZSBIYXNoTWFwLgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291bGQgdXNl
ICgxKSBhbmQgZmlyZSB1cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxscy4KKyAg
ICAvLworICAgIC8vIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIHJlcG9y
dFVzZWRSZWdpc3RlcnMoKSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAvLyBh
cyBnZW5lcmF0ZSgpLiBJZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291bGQganVz
dCBoYXZlIGVhY2ggU3BlY2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVjdG9yIG9m
IFJlZ2lzdGVyU2V0J3MgYW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUgcmlnaHQg
b3JkZXIgaW4KKyAgICAvLyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZmZXJlbmNl
IGlzIHVubGlrZWx5IHRvIGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAgIC8vIHBl
cmZvcm1hbmNlIG9mIHRoZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8vIEN1cnJl
bnRseSwgd2UgZG8gKDEpIGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lkIHJlcG9y
dFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAgIAorICAg
IHZpcnR1YWwgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMm
LCBHZW5lcmF0aW9uQ29udGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVnaXN0ZXJT
ZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYp
IGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAgIGNv
bnN0IGNoYXIqIG1fbmFtZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKworY2xhc3MgRGVl
cFNwZWNpYWxEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3BlY2lhbERpbXAoU3BlY2lhbCogc3Bl
Y2lhbCkKKyAgICAgICAgOiBtX3NwZWNpYWwoc3BlY2lhbCkKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9z
cGVjaWFsKQorICAgICAgICAgICAgbV9zcGVjaWFsLT5kZWVwRHVtcChvdXQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBTcGVjaWFsKiBtX3NwZWNpYWw7Cit9OworCitEZWVwU3BlY2lhbER1bXAgZGVlcER1bXAo
U3BlY2lhbCogc3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVlcFNwZWNpYWxEdW1wKHNwZWNpYWwp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJT
cGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Ns
b3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
dGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3RhY2tTbG90X2gK
KyNkZWZpbmUgQWlyU3RhY2tTbG90X2gKKworI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBTdGFja1Nsb3R2YWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IFN0YWNrU2xvdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhY2tTbG90KTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwg
dW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX2J5dGVT
aXplKGJ5dGVTaXplKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV92YWx1
ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7Cisg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBTdGFja1Nsb3RWYWx1ZSogbV92YWx1ZTsKK307CisK
K2NsYXNzIERlZXBTdGFja1Nsb3REdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3RhY2tTbG90RHVt
cChTdGFja1Nsb3QqIHNsb3QpCisgICAgICAgIDogbV9zbG90KHNsb3QpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1fc2xvdCkKKyAgICAgICAgICAgIG1fc2xvdC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgU3RhY2tTbG90KiBtX3Nsb3Q7Cit9OworCitEZWVwU3RhY2tTbG90RHVtcCBkZWVwRHVt
cChTdGFja1Nsb3QqIHNsb3QpCit7CisgICAgcmV0dXJuIERlZXBTdGFja1Nsb3REdW1wKHNsb3Qp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJT
dGFja1Nsb3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
clRtcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK3ZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEq
dGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGlzUmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0dQVG1wKCkpIHsKKyAgICAgICAgb3V0
LnByaW50KCIldG1wIiwgZ3BUbXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG91dC5wcmludCgiJWZ0bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJU
bXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1w
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBfaAorI2RlZmluZSBBaXJU
bXBfaAorCisjaW5jbHVkZSAiUmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworLy8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBhIHJl
Z2lzdGVyLiBJdCBjYW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4gSXQgY2Fu
IGFsc28KKy8vIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0ZXIgKGku
ZS4gYSB0ZW1wb3JhcnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQorLy8gZGVsaWJl
cmF0ZWx5IHRlcnNlIG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoaXMgbmFtZSBh
IGxvdC4KKworY2xhc3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAgICA6IG1fdmFs
dWUoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcpCisgICAgewor
ICAgICAgICBpZiAocmVnKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAg
ICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigpKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAgICBzdGF0aWMg
VG1wIGdwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVz
dWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUdQVG1wKGluZGV4KTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGZwVG1wRm9ySW5kZXgo
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1
bHQubV92YWx1ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGZvclJhd1ZhbHVlKHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBpbmRleDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisKKyAgICBib29sIHJhd1ZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29s
IGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUp
OworICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUFIobV92YWx1ZSk7CisgICAgfQorCisg
ICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUFIoKSB8fCBp
c0ZQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGRlY29kZUdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQorCisg
ICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGdwcigpOworICAgICAgICByZXR1cm4gZnByKCk7CisgICAgfQorCisgICAgdW5z
aWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BU
bXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAg
dW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAg
ICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIHJldHVybiBmcFRtcEluZGV4
KCk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBl
bmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAxICsgaW5kZXg7
CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiAtMSAtIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5j
b2RlR1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1AoZ3ByIC0g
TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGlu
dCBlbmNvZGVGUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUChm
cHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgaW50IGVuY29kZUdQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSArIGluZGV4
OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBUbXAodW5zaWduZWQgaW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdp
c3RlcigpKSAtIDEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRH
UChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPiAwOworICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiB2YWx1ZSA8IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BSKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFs
dWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSk7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgdmFsdWUgPj0gZW5jb2RlZEZQUihNYWNyb0Fz
c2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNF
bmNvZGVkR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQ
KHZhbHVlKSAmJiAhaXNFbmNvZGVkR1BSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCBpc0VuY29kZWRGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNv
ZGVkRlAodmFsdWUpICYmICFpc0VuY29kZWRGUFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRp
YyBHUFJSZWcgZGVjb2RlR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0Vu
Y29kZWRHUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQUlJlZz4oCisg
ICAgICAgICAgICAodmFsdWUgLSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0
ZXIoKSkpICsgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAg
c3RhdGljIEZQUlJlZyBkZWNvZGVGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzRW5jb2RlZEZQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVn
PigKKyAgICAgICAgICAgIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3Rl
cigpKSAtIHZhbHVlKSArCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lz
dGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVHUFRtcChpbnQgdmFs
dWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BUbXAodmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlIC0gKGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVy
KCkpICsgMSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29kZUZQVG1wKGludCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFRtcCh2YWx1ZSkpOworICAg
ICAgICByZXR1cm4gKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkg
LSAxKSAtIHZhbHVlOworICAgIH0KKworICAgIC8vIDA6IGVtcHR5IFRtcAorICAgIC8vIHBvc2l0
aXZlOiBHUFJzIGFuZCB0aGVuIEdQIHRlbXBzLgorICAgIC8vIG5lZ2F0aXZlOiBGUFJzIGFuZCB0
aGVuIEZQIHRlbXBzLgorICAgIGludCBtX3ZhbHVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyVG1wX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDg2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKwor
Y2xhc3MgT3Bjb2RlCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpzcGVjaWFsLCA6b3ZlcmxvYWRz
CisgICAgYXR0cl9hY2Nlc3NvciA6YnJhbmNoCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBz
cGVjaWFsKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBzcGVjaWFs
CisgICAgICAgIEBicmFuY2ggPSBmYWxzZQorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAgICAg
ICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIG1h
c21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVuZAor
ZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAgZGVm
IGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAgIEB0
eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9yZWFk
ZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUsIGZv
cm1zKQorICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9IGZv
cm1zCisgICAgZW5kCitlbmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisg
ICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkKKyAg
ICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQKKwor
ICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAgICAg
ICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9PSBv
dGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAorICAg
IGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9PSAi
QWRkciIKKyAgICAgICAgICAgIFsiQWRkciIsICJTdGFja1Nsb3QiLCAiQ2FsbEFyZyJdCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAg
IGRlZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQK
KworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRl
ZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcworICAg
ICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAg
ICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRp
YWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1l
CisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRl
ZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5k
CisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAor
ICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3Jp
Z2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0o
b3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5n
ID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90
aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAg
ICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAg
ICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRl
ZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAg
ICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAg
ICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAg
IGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFt
ZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1i
ZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAg
ICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAg
ICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAg
ICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisg
ICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVO
dW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3
aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXC9dLworICAgICAgICAgICAg
cmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYp
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdp
bi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7
c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3Rf
bWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0
b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAg
IHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAg
dG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQp
fChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9r
ZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0g
InNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2Vu
KQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0
b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxl
TmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlk
eCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisg
ICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKwor
ICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAg
ICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQg
ZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBh
cnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5k
CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAg
ICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5n
CisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgor
ICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0
ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZh
bmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBy
b2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UK
KyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAg
cmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUg
KEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAg
cmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0g
dG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1t
NjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlzS2lu
ZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAg
ICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisgICAgICAgIGxvb3Ag
eworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAg
ICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBjb25zdW1lKCJzcGVj
aWFsIikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKwor
ICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bj
b2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAgICByZXN1bHRbb3Bj
b2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAg
ICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgb3Bj
b2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IE9wY29kZS5u
ZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVO
YW1lXSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgc2ln
bmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgaXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9v
cCB7CisgICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9
PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0b2tl
biA9PSAiLyIKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLyIpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnN1bWUoImJyYW5jaCIpCisgICAgICAgICAgICAgICAgICAgIG9wY29kZS5icmFu
Y2ggPSB0cnVlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBpc0tp
bmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAg
ICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5h
bWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNw
ZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioi
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUg
PSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBh
cmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUu
bGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIklt
bTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhd
LnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVy
cm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9y
IGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5u
ZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3Mg
aXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5k
CisKKyAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAg
ICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5kCisKKyAg
ICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUs
IGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAg
ICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXco
SU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UK
KworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9Lmgi
LCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAi
Ly8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0g
ZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7
ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9o
IgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2Vu
ZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK2RlZiB3cml0ZUNQUChmaWxl
bmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmNwcCIsICJ3IikgeworICAgICAg
ICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkg
b3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisg
ICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiY29uZmlnLmhcIiIKKyAgICAg
ICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpciN7ZmlsZW5hbWV9LmhcIiIKKworICAgICAgICB5
aWVsZCBvdXRwCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8
CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9w
Y29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAu
cHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91
dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtl
eXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
ciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMg
ImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8v
IG5hbWVzcGFjZSBXVEYiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwK
KyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRw
LnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1
dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAg
ICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIK
KyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisg
ICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMg
IiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIK
K30KKworIyBGcm9tIGhlcmUgb24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVu
dGVkIGNvZGUsIHNpbmNlIHdlJ3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hl
ci4KKworZGVmIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29s
dW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGgg
PT0gMAorCisgICAgaWYgZmlsdGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKwor
ICAgIGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlz
ZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisg
ICAgICAgIHJldHVybgorICAgIGVuZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMu
ZWFjaCB7CisgICAgICAgIHwgZm9ybSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVt
bkluZGV4XS5uYW1lCisgICAgICAgIGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBz
W2tpbmRdIDw8IGZvcm0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0g
W2Zvcm1dCisgICAgICAgIGVuZAorICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBn
cm91cHMubGVuZ3RoID09IDEKKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMs
IGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAg
ICByZXR1cm4KKyAgICBlbmQKKworICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRl
cltjb2x1bW5JbmRleF19KSB7IgorICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtl
eSwgdmFsdWUgfAorICAgICAgICBvdXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5
ID09ICJJbW02NCIKKyAgICAgICAgS2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAg
ICAgfCBhcmdLaW5kIHwKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2lu
ZH06IgorICAgICAgICB9CisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBj
b2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZB
TFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6
IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYg
bWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKCN7aW5zdH0tPm9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAg
ICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIK
KyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmls
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2Rl
Lm92ZXJsb2Fkcy5zaXplICE9IDEpIG9yIHNwZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0
cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPmFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAg
ICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Zlcmxv
YWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAg
ICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0
OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5z
dE92ZXJsb2FkRm9ybShvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChv
dXRwLCBzcGVlZCwgaW5zdCkgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAg
ICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAg
ICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sj
e2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVy
ID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAg
ICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2Fk
LCBmb3JtCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVk
LCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAg
ICAgICBlbmQKKyAgICB9CitlbmQKKword3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91
dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAg
CisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4g
dHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7
XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBv
dXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSIKKwor
ICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRz
ICJ2b2lkIEluc3Q6OmZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0
cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsK
KyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwK
KyAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpH
UCk7IC8vIFRoaXMgaXMgYmFzaWNhbGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBt
b2RlbCBTcGVjaWFsIGFzIGFuIGltbWVkaWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFy
Z3NbMF0uc3BlY2lhbCgpLT5mb3JFYWNoQXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0Nh
bGxiYWNrPihmdW5jdG9yKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5z
aWduYXR1cmUuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXgg
fAorICAgICAgICAgICAgICAgIHJvbGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5y
b2xlCisgICAgICAgICAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9
ICJVc2UiCisgICAgICAgICAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9s
ZSA9ICJEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAg
IHJvbGUgPSAiVXNlRGVmIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwg
QXJnOjoje2FyZy50eXBlfVApOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQor
ICAgIG91dHAucHV0cyAifSIKKworICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAg
fCBvcGNvZGUgfAorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG9w
Y29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiQUxXQVlTX0lOTElORSBib29sIGlzVmFsaWQje29wY29k
ZS5uYW1lfUZvcm0oIgorICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgu
dGltZXMgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICAg
ICAgaWYgaW5kZXggIT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiLCAi
CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJBcmc6OktpbmQga2luZCN7aW5kZXh9IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIikiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAg
ICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeyB8IGNvbHVtbkluZGV4IHwgImtpbmQje2Nv
bHVtbkluZGV4fSIgfQorICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9Cisg
ICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgfCBm
b3JtIHwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IChub3QgZm9ybS5raW5kcy5kZXRl
Y3QgeyB8IGtpbmQgfCBraW5kLnNwZWNpYWwgfSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oI3tzcGVjaWFsfSk7IgorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29s
dW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
cmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAg
ICB9CisgICAgICAgIGVuZAorICAgIH0KKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPiIKKyAgICBvdXRwLnB1dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1Zh
bGlkRm9ybShPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRw
LnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJBcmc6OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3Vt
ZW50cyldID0geyBhcmd1bWVudHMuLi4gfTsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29k
ZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAg
ICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRz
ICJzd2l0Y2ggKHNpemVvZi4uLihBcmd1bWVudHMpKSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2Rl
LnNwZWNpYWwKKyAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAg
ICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Zl
cmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IgorICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9
IHByb2MgeyB8IGNvbHVtbkluZGV4IHwgImtpbmRzWyN7Y29sdW1uSW5kZXh9XSIgfQorICAgICAg
ICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICAgICAgY2FsbGJh
Y2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAg
ICAgICAgc3BlY2lhbCA9IChub3QgZm9ybS5raW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLnNw
ZWNpYWwgfSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oI3tz
cGVjaWFsfSk7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaEZvcm1z
KG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNh
bGxiYWNrKQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAg
fQorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNl
OyAiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKword3JpdGVDUFAoIk9wY29kZVV0aWxzIikgeworICAg
IHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3RJbmxpbmVzLmhcIiIK
KyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsiCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVmFsaWRGb3JtKCkiCisgICAgb3V0
cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6c2FmZSwgInRoaXMi
KSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAgIGlmIG9wY29k
ZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhcmdzLnNpemUoKSA8IDEpIgor
ICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5w
dXRzICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJy
ZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1sw
XS5zcGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0
dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAg
ICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZQorICAgICAgICAgICAg
ICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUKKyAgICAgICAgICAgICAg
ICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAgICAgICAgICBuZWVkc01vcmVWYWxp
ZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0
byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAgICAgICAgICAjIGtpbmQgaW1wbGll
cyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBpcyB0aGUgdHlwZS4g
QW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gdmFsaWRhdGUgdGhlIHR5cGUg
aWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIlRtcCIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tpbmRleH1dLnRtcCgp
LmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVU
VVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJp
ZiAoIWlzI3tvcGNvZGUubmFtZX1WYWxpZCh0aGlzKSkiCisgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
b3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICBlbmQKKyAgICB9CisgICAg
b3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAu
cHV0cyAiYm9vbCBJbnN0OjphZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCkiCisgICAgb3V0
cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29k
ZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAi
Y2FzZSAje29wY29kZS5uYW1lfToiCisKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdJbmRleCkiCisgICAgICAgICAgICBvdXRwLnB1dHMg
InJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihhcmdz
WzBdLnNwZWNpYWwoKS0+YWRtaXRzU3RhY2soKnRoaXMsIGFyZ0luc3QpKTsiCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICMgU3dpdGNoIG9uIHRoZSBhcmdJbmRleC4KKyAgICAgICAgICAgIG91
dHAucHV0cyAic3dpdGNoIChhcmdJbmRleCkgeyIKKworICAgICAgICAgICAgbnVtQXJncyA9IG9w
Y29kZS5vdmVybG9hZHMubWFwIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAg
ICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICB9Lm1heAor
ICAgICAgICAgICAgCisgICAgICAgICAgICBudW1BcmdzLnRpbWVzIHsKKyAgICAgICAgICAgICAg
ICB8IGFyZ0luZGV4IHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3thcmdJbmRl
eH06IgorCisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBhbGwgb2YgdGhlIGZvcm1zIG9mIGFs
bCBvZiB0aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywgb3IgZG9uJ3QsIGFkbWl0IGFuIGFkZHJlc3MK
KyAgICAgICAgICAgICAgICAjIGF0IHRoaXMgaW5kZXguIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGEg
dmVyeSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAg
ICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsK
KyAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgICAgIG92
ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQorICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkg
dGVzdCBudW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3ZSBlbmQgdXAgd2l0aCBubyBmb3Jtcywgd2Ug
d2FudAorICAgICAgICAgICAgICAgICMgdG8gc2F5IHRoYXQgQWRkcmVzcyBpcyBpbmFkbWlzc2li
bGUuCisgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBlbHNpZiBu
dW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRy
dWUpOyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICMgTm93IGRv
IHRoZSBmdWxsIHRlc3QuCisKKyAgICAgICAgICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNo
ID0gKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKQorCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAic3dpdGNoIChhcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisg
ICAgICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB8IG92ZXJsb2FkIHwKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBBZ2Fp
biwgY2hlY2sgaWYgYWxsIG9mIHRoZW0gZG8gd2hhdCB3ZSB3YW50LgorICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgIyBE
b24ndCBlbWl0IGFueXRoaW5nLCBqdXN0IGRyb3AgdG8gZGVmYXVsdC4KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVy
bG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQu
c2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgVGhpcyBpcyBob3cgd2UgdGVzdCB0aGUgaHlwb3RoZXNpcyB0aGF0
IGNoYW5naW5nIHRoaXMgYXJndW1lbnQgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjIGFkZHJlc3MgeWllbGRzIGEgdmFsaWQgZm9ybS4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNv
bHVtbkluZGV4ID09IGFyZ0luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiQXJnOjpBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnc1sje2NvbHVtbkluZGV4fV0ua2lu
ZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJv
YyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybXMgfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9y
bS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgRHJvcCBkb3duLCBlbWl0IG5vIGNvZGUsIHNpbmNlIHdlIGNhbm5v
dCBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyBLZWVwIGdvaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxi
YWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQu
Zm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBl
bmQKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRw
LnB1dHMgImRlZmF1bHQ6IjsKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMg
In0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKwor
ICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIEluc3Q6OmdlbmVyYXRlKENDYWxsSGVs
cGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkgY29uc3QiCisgICAgb3V0cC5w
dXRzICJ7IgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKGppdCk7IgorICAgIG91dHAucHV0
cyAiVU5VU0VEX1BBUkFNKGNvbnRleHQpOyIKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVscGVyczo6
SnVtcCByZXN1bHQ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6ZmFzdCwgInRo
aXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAgIGlmIG9w
Y29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBd
LnNwZWNpYWwoKS0+Z2VuZXJhdGUoKnRoaXMsIGppdCwgY29udGV4dCkpOyIKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgaWYgZm9ybS5hbHROYW1lCisgICAgICAgICAgICAgICAgbWV0aG9kTmFt
ZSA9IGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1ldGhv
ZE5hbWUgPSBvcGNvZGUubWFzbU5hbWUKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgaWYg
b3Bjb2RlLmJyYW5jaAorICAgICAgICAgICAgICAgIG91dHAucHJpbnQgInJlc3VsdCA9ICIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wcmludCAiaml0LiN7bWV0aG9kTmFtZX0o
IgorCisgICAgICAgICAgICBmb3JtLmtpbmRzLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAg
ICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgaWYgaW5kZXggIT0gMAorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICIsICIKKyAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICBjYXNlIGtpbmQubmFtZQorICAgICAgICAgICAgICAgIHdoZW4gIlRtcCIK
KyAgICAgICAgICAgICAgICAgICAgaWYgb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS50eXBlID09
ICJHIgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
Z3ByKCkiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmZwcigpIgorICAgICAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICB3aGVuICJJbW0iCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTMyKCkiCisgICAgICAgICAgICAgICAg
d2hlbiAiSW1tNjQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRl
eH1dLmFzVHJ1c3RlZEltbTY0KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiQWRkciIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCisg
ICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJp
bnQgImFyZ3NbI3tpbmRleH1dLmFzQmFzZUluZGV4KCkiCisgICAgICAgICAgICAgICAgd2hlbiAi
UmVsQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
YXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZXN1bHRD
b25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgb3V0cC5wdXRzICIpOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KHJlc3VsdCk7IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgInJldHVybiByZXN1bHQ7IgorICAg
IG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpciIKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTEy
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMDUsNyArMTA1LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4ICE9IGludmFsaWQoKTsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1
cm4gIWlzU2V0KCk7IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gaXNTZXQoKTsgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXggPT0gZGVsZXRlZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1
YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNs
YXNzIEFsbFJlZ3NJdGVyYWJsZSB7CisgICAgcHVibGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJh
dG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAg
ICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3IoUmVnIHJlZykKKyAgICAgICAgICAgICAgICA6IG1f
cmVnKHJlZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVn
IG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKKyAgICAgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3JlZyA9
IG1fcmVnLm5leHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcmVnID09IG90
aGVyLm1fcmVnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgUmVnIG1fcmVnOworICAgICAgICB9OworCisgICAgICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJzdCgpKTsgfQor
ICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWcoKSk7IH0K
KyAgICB9OworCisgICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSBjb25zdCB7IHJldHVy
biBBbGxSZWdzSXRlcmFibGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90IGlu
dmFsaWQoKSB7IHJldHVybiAweGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywxMyBAQCBw
dWJsaWM6CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhl
cikgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNp
Z25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRC
aXRzKCkpCisgICAgICAgICAgICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7CisgICAg
fQogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL1dURi93dGYv
Qml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNyBAQCBwdWJsaWM6IAog
ICAgIH07CiAgICAgCiAgICAgU2V0Qml0c0l0ZXJhYmxlIHNldEJpdHMoKSBjb25zdCB7IHJldHVy
biBTZXRCaXRzSXRlcmFibGUoKnRoaXMpOyB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgc3RhdGlj
IHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Nj
b3BlZExhbWJkYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRMYW1iZGFfaAorI2RlZmluZSBTY29wZWRMYW1i
ZGFfaAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gWW91IGNhbiB1c2UgU2NvcGVkTGFtYmRhIHRv
IGVmZmljaWVudGx5IHBhc3MgbGFtYmRhcyB3aXRob3V0IGFsbG9jYXRpbmcgbWVtb3J5IG9yIHJl
cXVpcmluZworLy8gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gb2YgdGhlIGNhbGxlZS4gVGhlIGNh
bGxlZSBzaG91bGQgYmUgZGVjbGFyZWQgYXM6CisvLworLy8gdm9pZCBmb28oY29uc3QgU2NvcGVk
TGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPiYpOworLy8KKy8vIFRoZSBjYWxsZXIganVz
dCBkb2VzOgorLy8KKy8vIHZvaWQgZm9vKHNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGludCwgU3R1
ZmYmKT4oWyZdIChpbnQgeCwgU3R1ZmYmIHkpIC0+IE15VGhpbmdzKiB7IGJsYWggfSkpOworLy8K
Ky8vIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBmb28oKSBub3QgZXNjYXBpbmcgdGhlIGxhbWJk
YS4gVGhlIGxhbWJkYSBpcyBvbmx5IHZhbGlkIHdoaWxlIGZvbygpIGlzCisvLyBvbiB0aGUgc3Rh
Y2sgLSBoZW5jZSB0aGUgbmFtZSBTY29wZWRMYW1iZGEuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0aW9uVHlwZT4gY2xhc3MgU2NvcGVkTGFtYmRhOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0
VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNjb3BlZExhbWJkYTxSZXN1
bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgorICAgIFNjb3BlZExhbWJkYShS
ZXN1bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pID0gbnVsbHB0
ciwgdm9pZCogYXJnID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2ltcGwoaW1wbCkKKyAgICAgICAg
LCBtX2FyZyhhcmcpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+U2NvcGVkTGFtYmRhKCkKKyAg
ICB7CisgICAgfQorCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFyZ3VtZW50VHlwZXMmJi4u
LiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsKG1fYXJnLCBzdGQ6OmZv
cndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFJlc3VsdFR5cGUgKCppbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLikgbV9p
bXBsOworICAgIHZvaWQgKm1fYXJnOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25U
eXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBTY29wZWRMYW1iZGFGdW5jdG9yOwordGVtcGxhdGU8dHlw
ZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcywgdHlwZW5hbWUgRnVu
Y3Rvcj4KK2NsYXNzIFNjb3BlZExhbWJkYUZ1bmN0b3I8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBl
cy4uLiksIEZ1bmN0b3I+IDogcHVibGljIFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVu
dFR5cGVzLi4uKT4geworcHVibGljOgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRMYW1iZGEoaW1wbEZ1bmN0aW9uLCB0aGlz
KQorICAgICAgICAsIG1fZnVuY3RvcihmdW5jdG9yKQorICAgIHsKKyAgICB9CisKKyAgICBTY29w
ZWRMYW1iZGFGdW5jdG9yKEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IFNjb3BlZExhbWJk
YShpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9yKFdURjo6bW92ZShmdW5j
dG9yKSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGlt
cGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4o
YXJndW1lbnQpLT5tX2Z1bmN0b3IoCisgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRU
eXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitT
Y29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIFNjb3BlZExhbWJkYUZ1bmN0b3I8
RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBTY29wZWRMYW1iZGFfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFy
ZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZp
c2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc5LDYgKzc5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgU2hhcmVk
VGFza0Z1bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6
bW92ZShmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUg
cnVuKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEw
LDYgKzExNSwxMSBAQCBSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7
CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBl
LCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUs
IHR5cGVuYW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVT
aGFyZWRUYXNrKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0
b3IpKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263739</attachid>
            <date>2015-10-21 14:29:38 -0700</date>
            <delta_ts>2015-10-21 15:17:45 -0700</delta_ts>
            <desc>even more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>318829</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRp
bHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jhc2ljQmxvY2s6OkJh
c2ljQmxvY2sodW5zaWduZWQgaW5kZXgpCisgICAgOiBtX2luZGV4KGluZGV4KQoreworfQorCitC
YXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5k
KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCit2b2lk
IEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIz
OjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVt
b3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRl
Y2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxh
Y2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBt
X2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1w
KHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7
CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxv
Y2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYg
VmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sq
LCAyPiBBZGphY2VuY3lMaXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNz
b3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICIjIjsKKworICAg
IH5CYXNpY0Jsb2NrKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KKworICAgIFZhbHVlTGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3Zh
bHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBt
X3ZhbHVlcy5lbmQoKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSog
YXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBW
YWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAg
ICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZh
bHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFs
dWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlz
dCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIHZvaWQgYXBwZW5kKFZhbHVl
Kik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4p
OworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgc3VjY2Vzc29y
cygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1
cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9w
cmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQWRqYWNl
bmN5TGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9
CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92
ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0
YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgpOwor
CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgQWRq
YWNlbmN5TGlzdCBtX3N1Y2Nlc3NvcnM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAg
eworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAg
ICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAg
ICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
b3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayog
bV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisj
ZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxv
Y2s6OmFwcGVuZE5ldyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKK3sKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihh
cmd1bWVudHMuLi4pOworICAgIGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3Vuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJl
dHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitC
YXNpY0Jsb2NrKiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgp
OworfQorCitCYXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4
KQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGlu
ZGV4KTsKK30KKworY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6
c3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVl
PigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gK
KworI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xp
c3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCBhZGRQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAg
QmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vz
c29ycygpOworCisgICAgaWYgKHByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNz
b3IpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2Nr
PgorYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayAq
cHJlZGVjZXNzb3IpCit7CisgICAgQmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNz
b3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAg
ICBwcmVkZWNlc3NvcnNbaS0tXSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBw
cmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIC8vIE91dCBvZiBjYXV0aW9uLCB3ZSBrZWVwIGdvaW5nIGV2ZW4gdGhvdWdoIHRo
ZSBwcmVkZWNlc3NvciBsaXN0IGNhbm5vdCBoYXZlCisgICAgICAgICAgICAvLyBkdXBsaWNhdGVz
LgorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jaywgQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQmFzaWNCbG9j
azo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBmcm9tKSB7CisgICAgICAgICAgICBwcmVk
ZWNlc3NvcnNbaV0gPSB0bzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyByZWNvbXB1dGVzIHByZWRlY2Vz
c29ycyBhbmQgcmVtb3ZlcyBibG9ja3MgdGhhdCBhcmVuJ3QgcmVhY2hhYmxlLgordGVtcGxhdGU8
dHlwZW5hbWUgQmFzaWNCbG9jaz4KK3ZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykKK3sKKyAgICAvLyBDbGVhciBhbGwgcHJl
ZGVjZXNzb3IgbGlzdHMgZmlyc3QuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nr
cykKKyAgICAgICAgYmxvY2stPnByZWRlY2Vzc29ycygpLnJlc2l6ZSgwKTsKKworICAgIEdyYXBo
Tm9kZVdvcmtsaXN0PEJhc2ljQm9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsK
KyAgICB3b3JrbGlzdC5ub2RlKGJsb2Nrc1swXSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJs
b2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICBpZiAod29ya2xpc3QuYWRk
KHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMoKS5h
cHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmxvY2tzW2ldLnByZWRl
Y2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICBibG9ja3NbaV0gPSBudWxscHRyOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxv
Y2tVdGlsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmts
aXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dv
cmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9o
CisjZGVmaW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIK
KyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8
QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBX
aGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3
aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFw
aE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3Qg
aXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJs
b2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4g
aWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0
aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhl
IGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVk
R3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsK
KwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFwaE5v
ZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBvc3RP
cmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4g
UG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM0Jsb2NrV29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNl
IHsKKwordW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCit7CisgICAgc3dpdGNoIChpbnN0
Lm9yaWdpbi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tT
dWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBDaGVj
azoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNv
ZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQorICAgIDogbV9jaGVja09wY29kZShvcGNvZGUp
CisgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQoreworfQorCitDaGVja1NwZWNpYWw6On5D
aGVja1NwZWNpYWwoKQoreworfQorCitJbnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNv
bnN0IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAgSW5zdCBoaWRkZW5CcmFuY2gobV9jaGVja09w
Y29kZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRlbkJyYW5jaC5hcmdzLnJlc2l6ZShtX251bUNo
ZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DaGVja0FyZ3M7IGktLTspCisg
ICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzW2ldID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICByZXR1
cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0
JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJh
Y2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmcoY2FsbGJhY2spOworICAg
IGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0
LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3Qp
Cit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlkKCkKKyAgICAgICAgJiYg
aXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOwor
fQorCitib29sIENoZWNrU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQg
YXJnSW5kZXgpCit7CisgICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9u
dW1DaGVja0FyZ3MpCisgICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3Rh
Y2soYXJnSW5kZXggLSAxKTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhp
bnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVs
cGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVy
cyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZmFpbCA9IGhpZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwor
ICAgIEFTU0VSVChmYWlsLmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmln
aW47CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZh
bHVlLT5vcGNvZGUoKSkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011
bCkKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlm
ICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmFyZ3NbMF0tPmlzSW50KDAp
KQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDApKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKGNvbnRleHQuY29kZSwg
aW5zdC5hcmdzWzJdKSk7CisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNv
ZGUsIGluc3QuYXJnc1sxXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3Rh
bnQoMSkpOworICAgIH0KKworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tB
cmdzICsgMSwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5k
KAorICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1
bmN0aW9uPigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25D
b250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgZmFpbC5saW5rKCZqaXQpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVl
LT5zdGFja21hcCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAg
ICAgICAgICAgICBTdGFja21hcDo6R2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgICAgICAg
ICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcGFyYW1zLnN0YWNr
bWFwID0gc3RhY2ttYXA7CisgICAgICAgICAgICAgICAgcGFyYW1zLnJlcHMgPSByZXBzOworICAg
ICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lz
dGVyczsKKworICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5tX2dlbmVyYXRvci0+cnVuKGppdCwg
cGFyYW1zKTsKKyAgICAgICAgICAgIH0pKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJ
bXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2hlY2tPcGNv
ZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpk
ZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkIz
OjpDaGVja1ZhbHVlIGxvd2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwgIiB3aXRoICIsIG1fbnVt
Q2hlY2tBcmdzLCAiIGFyZ3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tT
cGVjaWFsX2gKKworI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBT
cGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB3YW50
IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2Fu
dCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKKy8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVh
ZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFs
IHdpbGwgcmVtZW1iZXIKKy8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBh
bG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQK
Ky8vIHdpbGwgY3JlYXRlIGFuIEluc3Qgd2l0aCB0aGF0IG9wY29kZSBwbHVzIHRoZSBhcHByb3By
aWF0ZSBhcmdzIGZyb20gdGhlIG93bmluZyBJbnN0IHdoZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkg
b2YgdGhlIGNhbGxiYWNrcy4KKy8vCisvLyBOb3RlIHRoYXQgZm9yIENoZWNrQWRkLCBDaGVja1N1
YiwgYW5kIENoZWNrTXVsIHdlIGV4cGVjdCB0aGF0IHRoZSBCMyBhcmd1bWVudHMgYXJlIHRoZSBy
ZXZlcnNlCisvLyBvZiB0aGUgQWlyIGFyZ3VtZW50cyAoQWRkKGEsIGIpID0+IEFkZDMyIGIsIGEp
LiBFeGNlcHQ6CisvLyAtIENoZWNrU3ViKDAsIHgpLCB3aGljaCB0dXJucyBpbnRvIEJyYW5jaE5l
ZzMyIHguCisvLyAtIENoZWNrTXVsKGEsIGIpLCB3aGljaCB0dXJucyBpbnRvIE11bDMyIGIsIGEg
YnV0IHdlIHBhc3MgQW55IGZvciBhJ3MgVmFsdWVSZXAuCisKK2NsYXNzIENoZWNrU3BlY2lhbCA6
IHB1YmxpYyBTdGFja21hcFNwZWNpYWwgeworcHVibGljOgorICAgIENoZWNrU3BlY2lhbChBaXI6
Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsK
KworICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRo
ZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAgIEluc3QgaGlkZGVuQnJhbmNoKGNvbnN0
IEluc3QmKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Oklu
c3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wg
YWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisg
ICAgLy8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4g
YnJhbmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRl
cyB0aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVsZXBycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1f
bnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM0NoZWNrU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitDaGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0
YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gK
KworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENo
ZWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgor
ICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBj
YXNlIENoZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tW
YWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNr
QWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4s
IGxlZnQsIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAg
ICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NF
UlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0g
Q2hlY2tNdWwpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAg
IENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2sp
OworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjND
aGVja1ZhbHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29t
bW9uLmgiCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgor
I2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2Jvb2wgc2hvdWxkRHVtcElSKCkKK3sKKyAgICByZXR1cm4gRlRMOjp2ZXJib3NlQ29tcGlsYXRp
b25FbmFibGVkKCkgfHwgRlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBzaG91bGREdW1w
SVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkKK3sK
KyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBz
aG91bGRWYWxpZGF0ZUlSKCkKK3sKKyAgICByZXR1cm4gREZHOjp2YWxpZGF0aW9uRW5hYmxlZCgp
IHx8IHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlk
YXRlSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhB
dEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkKK3sKKyAg
ICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZVZhbGlkYXRpb25GYWlsdXJlKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVmaW5lIEIzQ29tbW9u
X2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVtcElS
KCk7Citib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFZhbGlkYXRl
SVIoKTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFNh
dmVJUkJlZm9yZVBoYXNlKCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNDb21tb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJp
c29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFuZChM
b2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChh
ZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8x
ID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0g
RXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5k
KGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCBy
aWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1
YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29u
c3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFs
dWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZh
bHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Q29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVl
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFs
dWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3Qz
MlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2
NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRp
YyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7
IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0
LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91Ymxl
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91Ymxl
VmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVl
OjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVs
ZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUg
QjNDb25zdERvdWJsZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkg
eyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91Ymxl
VmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2
YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2lu
KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3Vi
bGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwor
dm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1
Y2Nlc3NvcnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJh
c2ljQmxvY2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5j
aDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlz
IGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1
ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xWYWx1
ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworCisg
ICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0
IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAg
IEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vz
c29yc1tpXTsgfQorCisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0
IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1
YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRy
b2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBv
cGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAv
LyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3Vj
Y2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1
bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQp
CisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAg
Ly8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQp
OworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVl
KAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBu
bykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9z
dWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsK
KyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29u
dHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisjZGVmaW5lIEIzSW5kZXhN
YXBfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIG1h
cCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9y
IEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBk
b24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNhbiBoYXZl
IHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5kZXhNYXAg
eworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkKKyAgICB7
CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2l6
ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAg
ICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBWYWx1ZSYg
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBt
X3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUg
YW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9u
bHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkg
b2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRp
Y2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNl
dCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJh
c2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVibGlj
OgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAg
fQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1f
c2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4
U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAg
ICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBj
b2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAg
ICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIu
bV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAg
ICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7Cisg
ICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0
aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZv
ciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJl
KTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52
YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0
aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxl
Y3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJh
YmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRW
ZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRl
cm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisKKyMgVGhlc2UgcnVs
ZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0aGUgdG9wLiBJdCdz
IGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxl
LgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hlciBpcyBhbiBleGNl
bGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9IExvYWQoYWRkcmVz
cykKKworIyBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRoZXNlIGZvcm1zLgorQWRkTG9hZDEgPSBB
ZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUpCitBZGRMb2FkMiA9IEFkZCh2YWx1ZSwgTG9hZChhZGRy
ZXNzKSkKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkMSA9IFN0b3JlKEFk
ZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZUFkZExvYWQyID0gU3RvcmUo
QWRkKHZhbHVlLCBMb2FkKGFkZHJlc3MpKSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0b3Jl
KEFuZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZhbHVl
LCBhZGRyZXNzKQorCitSZXR1cm4gPSBSZXR1cm4odmFsdWUpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgp
Cit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIm9mZnNldCA9ICIs
IG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZpbmUgQjNNZW1vcnlWYWx1ZV9oCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBj
YXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkRmxv
YXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNh
c2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0b3Jl
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUoKTsK
KworICAgIGludHB0cl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUg
TG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVy
bmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2Rl
LCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAg
ICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAg
ICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBl
ID09IERvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0
b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVG
bG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gVm9pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUg
dGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnRwdHJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBM
b2FkRmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOFo6Cisg
ICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAg
ICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4K
KyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGlu
dHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
eworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEIzTWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIG91dC5wcmludCgi
SWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRQorICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNvZGVfaAorCisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51
bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1
c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAg
ICAKKyAgICAvLyBQb2x5bW9ycGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5
cGUuCisgICAgSWRlbnRpdHksCisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUgQ29uc3RWYWx1
ZSogY2xhc3Nlcy4gQ29uc3RhbnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3csIHNvIHRoYXQg
d2UgY2FuCisgICAgLy8gcmVhc29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0aGVt
LiBMYXJnZSBjb25zdGFudHMgYXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgQ29uc3QzMiwK
KyAgICBDb25zdDY0LAorICAgIENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1hZ2ljYWwgc3Rh
Y2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHBy
b2dyYW0gcmVnYXJkbGVzcyBvZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0
IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBkaXNqb2ludCBy
YW5nZSBvZgorICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFz
cy4KKyAgICBTdGFja1Nsb3QsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdpc3Rl
ci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0K
KyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LCBh
bmQgdGhlIGNvbXBpbGVyIHRha2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBkb24n
dCBjbG9iYmVyIHRoZSB2YWx1ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNhbGxzIChlaXRo
ZXIgYnkgc2F2aW5nIHRoZSBhcmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBvciBwcmVzZXJ2
aW5nIGl0IGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVnVmFs
dWUgY2xhc3MuIFRoZSByZXR1cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2ludGVyKCkgKGZv
ciBHUFJzKSBvciBEb3VibGUgKGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywKKworICAgIC8v
IFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRyb2wg
ZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRlciwg
d2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50ZXIg
dGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBvaW50
ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91bGQq
IGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAgIEZy
YW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFueSB2
YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKworICAg
IC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIsIGJl
aGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0T3Is
CisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisKKyAgICAvLyBD
YXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBTRXh0
OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6Cisg
ICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3VibGU6
CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgorICAg
IElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERUb0kz
MiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFs
dWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8vIGlz
IGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVzc1Ro
YW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVhbCwK
KworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgorICAg
IEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwKKyAgICBCZWxvd0VxdWFsLAorCisg
ICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUg
bG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4g
SW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAorICAgIExvYWQx
NlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisgICAgLy8g
VGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExvYWQsCisKKyAg
ICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3Rv
cmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2
YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91
YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGlj
IHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAgICAv
LyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBz
eXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFy
Z3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKwor
ICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFz
cy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9u
bHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJh
Y2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNr
bWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQg
bXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFj
a21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVl
c3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJv
bSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3Rh
Y2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVj
a1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJh
dGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNv
ZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8g
ZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0
IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJlIG5vdCBhbGxv
d2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91ciBzbG93IHBh
dGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1
dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhh
cHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6Cisg
ICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hlY2tBZGQoeCwg
eSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAg
ICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVudGl0eShhKQor
ICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFja3Mg
dXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAv
LyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRo
ZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFmdGVyIHRoZSBm
aXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2
ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25k
IENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0FkZCwKKyAgICBD
aGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lkZS1leGl0cy4g
VXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlz
IGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoaXMg
dGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisgICAg
Ly8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVl
IHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0aC4KKyAgICBD
aGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAg
ICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQaGks
CisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgSnVtcCwK
KyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0
eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBDb250
cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVl
IHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIg
ZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBT
d2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0IGtu
b3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFueQorICAgIC8v
IHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisKKyAgICAv
LyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdl
dCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcworfTsKKworaW5s
aW5lIGJvb2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Jp
Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M09yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBPcmln
aW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9yaWdp
bigiLCBSYXdQb2ludGVyKG1fZGF0YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKworI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Ly8gV2hvZXZlciBnZW5lcmF0ZXMgQjNJUiBjYW4gY2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZh
bHVlcy4gV2hlbiB5b3UgZG8gdGhpcywgQjMgd2lsbCBiZSBhYmxlIHRvCisvLyBhY2NvdW50LCBk
b3duIHRvIHRoZSBtYWNoaW5lIGNvZGUsIHdoaWNoIGluc3RydWN0aW9uIGNvcnJlc3BvbmRzIHRv
IHdoaWNoIG9yaWdpbi4gQjMKKy8vIHRyYW5zZm9ybWF0aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdp
bnMgY2FyZWZ1bGx5LiBJdCdzIGFuIGVycm9yIHRvIHdyaXRlIGEgdHJhbnNmb3JtYXRpb24gdGhh
dAorLy8gZWl0aGVyIGRyb3BzIE9yaWdpbnMgb3IgbGllcyBhYm91dCB0aGVtLgorY2xhc3MgT3Jp
Z2luIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9IG51
bGxwdHIpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIGNvbnN0
IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCB2b2lkKiBtX2Rh
dGE7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzT3JpZ2lu
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hw
b2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJp
bnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGF0Y2hwb2ludFZh
bHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21h
cCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZpbmUg
QjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
U3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBh
dGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
YWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsgfQor
CisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFBhdGNocG9p
bnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBB
ZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hwb2lu
dCwgdHlwZSwgb3JpZ2luLCBjaGlsZHJlbikKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sKK30K
KworUHJvY2VkdXJlOjp+UHJvY2VkdXJlKCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJl
OjphZGRCbG9jaygpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrID0g
c3RkOjptYWtlX3VuaXF1ZTxCYXNpY0Jsb2NrPihtX2Jsb2Nrcy5zaXplKCkpOworICAgIEJhc2lj
QmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1v
dmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVyZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gKKyNkZWZp
bmUgQjNQcm9jZWR1cmVfaAorCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFz
aWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisKKyAgICBQcm9jZWR1cmUoKTsKKyAgICB+UHJvY2VkdXJlKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiBhZGRCbG9jaygpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4u
Lik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2Nr
KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9Cisg
ICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAg
ICBpdGVyYXRvcigpOgorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAg
ICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDog
bV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+
YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4g
aW5leDsKKyAgICAgICAgfQorCisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAg
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgY2xhc3Mg
VmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xsZWN0aW9u
KFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1
cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgICAgICA6
IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3IqKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmJsb2Nr
KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAg
ICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6
ZSgpKTsgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nl
ZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF07IH0KKyAgICAgICAg
VmFsdWUqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBQcm9jZWR1cmUmIG1fcHJvY2Vk
dXJlOworICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIFZh
bHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxWYWx1ZT4+IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzUHJvY2VkdXJlSW5saW5lc19oCisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFy
Z3VlbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2
YWx1ZShuZXcgVmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7CisgICAg
VmFsdWVUeXBlKiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoV1RG
Ojptb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tT
bG90VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N0YWNrU2xv
dFZhbHVlOjp+U3RhY2tTbG90VmFsdWUoKQoreworfQorCit2b2lkIFN0YWNrU2xvdFZhbHVlOjpk
dW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYnl0ZVNp
emUgPSAiLCBtX2J5dGVTaXplKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90VmFsdWVfaAorI2RlZmluZSBC
M1N0YWNrU2xvdFZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN0YWNrU2xvdFZhbHVlIDogcHVibGljIFZhbHVl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0
dXJuIG9wY29kZSA9PSBTdGFja1Nsb3Q7IH0KKworICAgIH5TdGFja1Nsb3RWYWx1ZSgpOworCisg
ICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisKKyAg
ICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbi4gWW91IGNh
bm5vdCByZWx5IG9uIGl0IGhhdmluZyBhIG1lYW5pbmdmdWwKKyAgICAvLyB2YWx1ZSB3aGlsZSB0
aGUgY29tcGlsZXIgaXMgcnVubmluZy4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1w
TWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTdGFja1Nsb3RWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgYnl0ZVNpemUpCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IFN0YWNrU2xvdCwgcG9pbnRlcigpLCBvcmlnaW4pCisgICAgICAgICwgbV9ieXRlU2l6ZShieXRl
U2l6ZSkKKyAgICAgICAgLCBtX29mZnNldEZyb21GUCgwKQorICAgIHsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBtX2J5dGVTaXplOworICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN0YWNrbWFwOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KAorICAgICAgICAie29w
YXF1ZSA9ICIsIFJhd1BvaW50ZXIobV9vcGFxdWUpLCAiLCByZXBzID0gIiwgbGlzdER1bXAobV9y
ZXBzKSwKKyAgICAgICAgIiwgZ2VuZXJhdG9yID0gIiwgUmF3UG9pbnRlcihtX2dlbmVyYXRvci5n
ZXQoKSksICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJlcmVkLAorICAgICAgICAiLCB1c2VkUmVn
aXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAifSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNrbWFw
X2gKKworI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
KyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1NwZWNpYWw7Citj
bGFzcyBTdGFja21hcFNwZWNpYWw7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgU3RhY2ttYXAgewor
cHVibGljOgorICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gVGhpcyBp
cyB0aGUgVmFsdWUgY29udGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZhbHVlKiB2YWx1
ZTsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAgU3RhY2ttYXAq
IHN0YWNrbWFwOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBhY3R1YWwgdmFsdWUg
cmVwcmVzZW50YXRpb25zIHRoYXQgd2VyZSBjaG9zZW4uCisgICAgICAgIFZlY3RvcjxWYWx1ZVJl
cD4gcmVwczsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgcmVnaXN0ZXJzIHRoYXQg
d2VyZSB1c2VkLgorICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOworICAgIH07Cisg
ICAgCisgICAgdHlwZWRlZiB2b2lkIEdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYsIGNv
bnN0IEdlbmVyYXRpb25QYXJhbXMmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8R2VuZXJhdG9y
RnVuY3Rpb24+IEdlbmVyYXRvcjsKKyAgICAKKyAgICBTdGFja21hcCgpCisgICAgeworICAgIH0K
KworICAgIC8vIFNldCBzb21lIG9wYXF1ZSBkYXRhIHRvIGlkZW50aWZ5IHRoaXMgc3RhY2ttYXAu
IFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgYSBTdGFja21hcC11c2luZyBWYWx1ZQorICAgIC8vIGNh
biBiZSBkdXBsaWNhdGVkLCBhbmQgZWFjaCBkdXBsaWNhdGUgbWF5IGVuZCB1cCBoYXZpbmcgZGlm
ZmVyZW50IHJlZ2lzdGVyIGFsbG9jYXRpb24uIFRoaXMKKyAgICAvLyBhbGxvd3MgYWxsIG9mIHRo
b3NlIGR1cGxpY2F0ZXMgdG8gYmUgYWJsZSB0byByZWZlciBiYWNrIHRvIHdoYXRldmVyIGhpZ2gt
bGV2ZWwgZGF0YSBzdHJ1Y3R1cmVzCisgICAgLy8gd2Ugd2VyZSB1c2luZyB0byBjcmVhdGUgdGhl
IHZhbHVlLgorICAgIHZvaWQgc2V0T3BhcXVlKHZvaWQqIHBhcmFtZXRlcikKKyAgICB7CisgICAg
ICAgIG1fb3BhcXVlID0gcGFyYW1ldGVyOworICAgIH0KKyAgICB2b2lkKiBvcGFxdWUoKSBjb25z
dCB7IHJldHVybiBtX29wYXF1ZTsgfQorCisgICAgLy8gQ29udmVuaWVuY2UgaGVscGVycyB3aGVu
IHVzaW5nIGluZGljZXMgaW5zdGVhZCBvZiBwb2ludGVycy4KKyAgICB2b2lkIHNldE9wYXF1ZUlu
ZGV4KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIHNldE9wYXF1ZShiaXR3aXNlX2Nhc3Q8
dm9pZCo+KGluZGV4KSk7CisgICAgfQorICAgIHNpemVfdCBvcGFxdWVJbmRleCgpIGNvbnN0IHsg
cmV0dXJuIGJpdHdpc2VfY2FzdDxzaXplX3Q+KG9wYXF1ZSgpKTsgfQorCisgICAgLy8gQ29uc3Ry
YWluIGFuIGFyZ3VtZW50IHRvIHRoZSBWYWx1ZSB0aGF0IHVzZXMgdGhpcyBTdGFja21hcC4gTm90
ZSB0aGF0IGluZGV4IHplcm8gcmVmZXJzIHRvIHRoZQorICAgIC8vIGZpcnN0IGFyZ3VtZW50IHRv
IHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVudCBpcyBub3QgY29uc3RyYWluYWJsZS4g
Rm9yIGV4YW1wbGUsIGluIGEKKyAgICAvLyBDaGVja0FkZCB2YWx1ZSwgaXQgd291bGQgYmUgYW4g
ZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQgMS4gSW4gYSBDaGVjayB2YWx1ZSwgaXQg
d291bGQKKyAgICAvLyBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kZXggMC4gQnV0LCB3aGVu
IHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCwgeW91IGNhbiBkZXBlbmQKKyAgICAv
LyBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBiZWluZyBmaWxsZWQgaW4uCisgICAgdm9p
ZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0IFZhbHVlUmVwJiByZXApCisgICAgewor
ICAgICAgICBpZiAoaW5kZXggKyAxIDwgbV9yZXBzLnNpemUoKSkKKyAgICAgICAgICAgIG1fcmVw
cy5ncm93KGluZGV4ICsgMSk7CisgICAgICAgIG1fcmVwc1tpbmRleF0gPSByZXA7CisgICAgfQor
CisgICAgdm9pZCBjbG9iYmVyKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpCisgICAgeworICAgICAg
ICBtX2Nsb2JiZXJlZC5tZXJnZShzZXQpOworICAgIH0KKworICAgIGNvbnN0IFJlZ2lzdGVyU2V0
JiBjbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb2JiZXJlZDsgfQorCisgICAgdm9pZCBz
ZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAg
bV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
ICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRvckZ1
bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENoZWNrU3BlY2lhbDsKKyAg
ICBmcmllbmQgY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworICAgIAorICAgIHZvaWQqIG1fb3BhcXVl
IHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBzOworICAgIFJlZlB0cjxH
ZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIFJlZ2lzdGVyU2V0IG1fY2xvYmJlcmVkOworICAg
IFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsgLy8gU3RhY2ttYXBzIGNvdWxkIGJlIGZ1cnRo
ZXIgZHVwbGljYXRlZCBieSBBaXIsIGJ1dCB0aGF0J3MgdW5saWtlbHksIHNvIHdlIGp1c3QgbWVy
Z2UgdGhlIHVzZWQgcmVnaXN0ZXJzIHNldHMgaWYgdGhhdCB3ZXJlIHRvIGhhcHBlbi4KK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTdGFja21hcF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lh
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCitTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3Bl
Y2lhbChjb25zdCBjaGFyKiBuYW1lKQorICAgIDogU3BlY2lhbChuYW1lKQoreworfQorCitTdGFj
a21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwoKQoreworfQorCit2b2lkIFN0YWNrbWFwU3Bl
Y2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFj
aEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgcmV0dXJuIGZvckVhY2hBcmdJbXBsKDAs
IDEsIGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzVmFsaWQo
SW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMSwgaW5zdCk7Cit9CisK
K2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiBpbnN0LCB1bnNpZ25lZCBh
cmdJbmRleCkKK3sKKyAgICByZXR1cm4gYWRtaXRzU3RhY2soMCwgMSwgaW5zdCwgYXJnSW5kZXgp
OworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiBp
bnN0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBWYWx1ZSogdmFs
dWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2tt
YXAoKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgSW5zdCB0aGF0IHVzZXMgdGhlIFN0YWNrbWFw
U3BlY2lhbCBnZXRzIGR1cGxpY2F0ZWQsIHRoZW4gd2UgZW5kIHVwIG1lcmdpbmcgdXNlZAorICAg
IC8vIHJlZ2lzdGVyIHNldHMgZnJvbSBtdWx0aXBsZSBwbGFjZXMuIFRoaXMgY3VycmVudGx5IHdv
bid0IGhhcHBlbiBzaW5jZSBBaXIgZG9lc24ndCBoYXZlIHRhaWxkdXAKKyAgICAvLyBvciB0aGlu
Z3MgbGlrZSB0aGF0LiBCdXQgbWF5YmUgZXZlbnR1YWxseSBpdCBjb3VsZCBiZSBhIHByb2JsZW0u
CisgICAgc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVycy5tZXJnZSh1c2VkUmVnaXN0ZXJzKTsKK30K
KworY29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdz
KEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICByZXR1cm4gc3RhY2tt
YXAtPmNsb2JiZXJlZCgpOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0lt
cGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOwor
CisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAg
IEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NF
UlQodmFsdWUtPmNoaWxkcmVuLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICBBU1NF
UlQoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzID09IHZhbHVlLT5jaGlsZHJl
bi5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3M7ICsraSkgeworICAg
ICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpICsgbnVtSWdub3JlZEIzQXJnc107CisgICAgICAg
IFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEFpckFyZ3MpOworCisg
ICAgICAgIGNhbGxiYWNrKGFyZywgQXJnOjpVc2UsIEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+
dHlwZSgpKSk7CisgICAgfQorfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNWYWxpZEltcGwo
CisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFyZ0Fy
Z3MsCisgICAgSW5zdCYgaW5zdCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsK
KworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAg
ICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNT
RVJUKHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CisKKyAgICBT
dGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIEFTU0VSVChzdGFj
a21hcCk7CisKKyAgICAvLyBGb3IgdGhlIEluc3QgdG8gYmUgdmFsaWQsIGl0IG5lZWRzIHRvIGhh
dmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGluc3QuYXJncy5zaXpl
KCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpIC0gbnVtSWdu
b3JlZEIzQXJncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUmVnYXJkbGVzcyBv
ZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1aXJlbWVudHMgZm9y
IHRoZWlyIGFyZ3VtZW50cy4gRm9yCisgICAgLy8gZXhhbXBsZSwgeW91IGNhbid0IGhhdmUgYSBu
b24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29uZGl0aW9ucyBhcyB3
ZWxsIGFzIHRoZQorICAgIC8vIGFyZ3VtZW50IHR5cGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAg
ICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7Cisg
ICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc107CisgICAg
ICAgIAorICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmc6OlRt
cDoKKyAgICAgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgY2FzZSBBcmc6OkltbTY0OgorICAg
ICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAg
ICAgICAgYnJlYWs7IC8vIE9LCisgICAgICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICAgICAg
aWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSAmJgorICAg
ICAgICAgICAgICAgIGFyZy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNU
eXBlKGNoaWxkLT50eXBlKCkpOworCisgICAgICAgIGlmICghYXJnLmlzVHlwZSh0eXBlKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGNv
bnN0cmFpbnRzIGhhcyB0byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBCMyBjaGls
ZHJlbi4KKyAgICBBU1NFUlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkgPD0gdmFsdWUtPmNoaWxk
cmVuLnNpemUoKSk7CisKKyAgICAvLyBWZXJpZnkgYW55IGV4cGxpY2l0bHkgc3VwcGxpZWQgY29u
c3RyYWludHMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEIzQXJnczsgaSA8IHN0
YWNrbWFwLT5tX3JlcHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFs
dWUtPmNoaWxkKGkpOworICAgICAgICBWYWx1ZVJlcCYgcmVwID0gc3RhY2ttYXAtPm1fcmVwc1tp
XTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSAtIG51bUlnbm9yZWRCM0FyZ3MgKyBu
dW1JZ25vcmVkQWlyQXJnc107CisKKyAgICAgICAgc3dpdGNoIChyZXAua2luZCgpKSB7CisgICAg
ICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgdmVyaWZp
ZWQgdGhpcyBhYm92ZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVw
OjpTb21lUmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZh
bHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmIChhcmcgIT0gVG1wKHJlcC5yZWcoKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2
YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnICE9IEFyZzo6Y2FsbEFyZyhyZXAub2Zmc2V0RnJv
bVNQKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFudDoKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0lt
cGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgVmFsdWUq
IHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0
YWNrbWFwKCk7CisKKyAgICB1bnNpZ25lZCBzdGFja21hcEFyZ0luZGV4ID0gYXJnSW5kZXggLSBu
dW1JZ25vcmVkQWlyQXJncyArIG51bUlnbm9yZWRCM0FyZ3M7CisKKyAgICBpZiAoc3RhY2ttYXBB
cmdJbmRleCA+PSBzdGFja21hcC0+bV9yZXBzLnNpemUoKSkgeworICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNvbnN0cmFpbnQuCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICAvLyBXZSBvbmx5IGFkbWl0IHN0YWNrIGZvciBBbnkncywgc2luY2Ug
U3RhY2sgaXMgbm90IGEgdmFsaWQgaW5wdXQgY29uc3RyYWludCwgYW5kIFN0YWNrQXJndW1lbnQK
KyAgICAvLyB0cmFuc2xhdGVzIHRvIGEgQ2FsbEFyZyBpbiBBaXIuCisgICAgaWYgKHN0YWNrbWFw
LT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRleF0ua2luZCgpID09IEFueSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK1ZlY3RvcjxWYWx1ZVJlcD4gU3RhY2tt
YXBTcGVjaWFsOjpyZXBzKEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0LCBJbnN0JiBpbnN0KQor
eworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVzdWx0OworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRl
eHQsIDEsIGluc3QsIHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTdGFj
a21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKAorICAgIEdlbmVyYXRpb25Db250ZXh0JiBjb250
ZXh0LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgSW5zdCYgaW5zdCwgVmVjdG9yPFZhbHVlUmVw
PiYgcmVzdWx0KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9yZWRBcmdzOyBpIDwg
aW5zdC5hcmdzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHJlcEZvckFyZyhj
b250ZXh0LmNvZGUsIGFyZykpOworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpXTsKKyAg
ICB9Cit9CisKK1ZhbHVlUmVwIFN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKENvZGUmIGNvZGUs
IGNvbnN0IEFyZyYgYXJnKQoreworICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgIGNhc2Ug
VG1wOgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnJlZyhhcmcucmVnKCkpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEltbToKKyAgICBjYXNlIEltbTY0OgorICAgICAgICByZXR1cm4gVmFs
dWVSZXA6OmNvbnN0YW50KGFyZy52YWx1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
ZGRyOgorICAgICAgICBpZiAoYXJnLmJhc2UoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3Rl
cikKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpKTsKKyAg
ICAgICAgQVNTRVJUKGFyZy5iYXNlKCkgPT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkgLSBj
b2RlLmZyYW1lT2Zmc2V0KTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0
YWNrbWFwU3BlY2lhbF9oCisjZGVmaW5lIEIzU3RhY2ttYXBTcGVjaWFsX2gKKworI2luY2x1ZGUg
IkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lhbHMg
dGhhdCBoYXZlIHN0YWNrbWFwcy4gTm90ZSB0aGF0IGl0IGNhbiBmaW5kIHRoZSBTdGFja21hcCBi
eQorLy8gYXNraW5nIGZvciB0aGUgSW5zdCdzIG9yaWdpbi4gSGVuY2UsIHRoZXNlIG9iamVjdHMg
ZG9uJ3QgbmVlZCB0byBldmVuIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlCisvLyBTdGFja21hcC4K
KworY2xhc3MgU3RhY2ttYXBTcGVjaWFsIDogcHVibGljIEFpcjo6U3BlY2lhbCB7CitwdWJsaWM6
CisgICAgU3RhY2ttYXBTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+U3RhY2ttYXBTcGVjaWFsKCk7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2Nv
cGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJv
b2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFp
cjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcG9ydFVz
ZWRSZWdpc3RlcnMoQWlyOjpJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBvdmVycmlkZTsKKyAg
ICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIG92ZXJy
aWRlOworCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUo
KSBvciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkgc29tZQorICAgIC8v
IHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KKworICAgIHZvaWQgZm9yRWFjaEFyZ0lt
cGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9y
ZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJ
bnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jik7CisgICAgYm9vbCBpc1ZhbGlkSW1wbCgKKyAgICAgICAg
dW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisg
ICAgICAgIEFpcjo6SW5zdCYpOworICAgIGJvb2wgYWRtaXRzU3RhY2tJbXBsKAorICAgICAgICB1
bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAg
ICAgICAgQWlyOjpJbnN0Jik7CisKKyAgICAvLyBHZXRzIHRoZSByZXBzIGFycmF5IHRoZSB3YXkg
dGhhdCB0aGUgc3RhY2ttYXAgZ2VuZXJhdG9yIGNhbGxiYWNrIHdvdWxkIHdhbnQuCisgICAgVmVj
dG9yPFZhbHVlUmVwPiByZXBzKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmLCBBaXI6Okluc3QmKTsK
KworICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRoZSBJbnN0J3MgYXJncywgc3RhcnRpbmcg
d2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVuIHZlY3Rvci4KKyAgICB2b2lkIGFwcGVu
ZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJn
cywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYpOworCisgICAgc3RhdGljIFZhbHVlUmVw
IHJlcEZvckFyZyhBaXI6OkNvZGUmLCBjb25zdCBBaXI6OkFyZyYpOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwU3BlY2lhbF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgi
CisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3ZvaWQgU3dpdGNoQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludChtX2Nhc2VWYWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAobV90YXJnZXQp
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
U3dpdGNoQ2FzZV9oCisjZGVmaW5lIEIzU3dpdGNoQ2FzZV9oCisKKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCitjbGFzcyBTd2l0Y2hD
YXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dp
dGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwgQmFzaWNCbG9jayogdGFyZ2V0KQorICAgICAgICA6
IG1fY2FzZVZhbHVlKGNhc2VWYWx1ZSkKKyAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAg
eworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAh
IW1fdGFyZ2V0OyB9CisKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FzZVZhbHVlOyB9CisgICAgQmFzaWNCbG9jayogdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90
YXJnZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZTsKKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQ7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbGR1ZSAiQjNT
d2l0Y2hWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNo
VmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJl
bW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgU3dpdGNoQ2FzZSByZXN1bHQgPSBtX3N1
Y2Nlc3NvcnNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMu
bGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBz
d2l0Y2hDYXNlKQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3Qo
KSk7CisgICAgbV9zdWNjZXNzb3JzW21fc3VjY2Vzc29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENh
c2UudGFyZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkp
OworfQorCit2b2lkIFN3aXRjaFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIC8vIFRoaXMgZGVzdHJ1Y3RpdmVseSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3Mg
ZHVtcE1ldGEoKS4KKyAgICBvdXQucHJpbnQobGlzdER1bXAoKnRoaXMpKTsKK30KKworU3dpdGNo
VmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Js
b2NrKiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xWYWx1ZShpbmRleCwgU3dpdGNoLCBvcmln
aW4pCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hWYWx1
ZV9oCisjZGVmaW5lIEIzU3dpdGNoVmFsdWVfaAorCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUu
aCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVibGljIENvbnRyb2xWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNv
ZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFsdWUoKTsKKworICAgIC8vIG51bUNhc2VW
YWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgorICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1
ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKworICAgIC8vIFRoZSBzdWNj
ZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2
NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaV07
IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGNhc2VWYWx1ZXMoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgQmFzaWNCbG9jayogZmFsbFRocm91Z2goKSBjb25z
dCB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisgICAgQmFzaWNCbG9jayomIGZhbGxU
aHJvdWdoKCkgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorCisgICAgdW5zaWduZWQg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51bUNhc2VWYWx1ZXMoKTsgfQorICAgIFN3aXRjaENhc2Ug
YXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3dpdGNoQ2Fz
ZShjYXNlVmFsdWUoaW5kZXgpLCBzdWNjZXNzb3IoaW5kZXgpKTsKKyAgICB9CisgICAgU3dpdGNo
Q2FzZSBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGlj
OgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fc3dpdGNoKG51bGxwdHIpCisg
ICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
aXRlcmF0b3IoU3dpdGNoVmFsdWUmIHN3aXRjaFZhbHVlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAg
ICAgICAgIDogbV9zd2l0Y2goJnN3aXRjaFZhbHVlKQorICAgICAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBTd2l0Y2hDYXNlIG9wZXJhdG9y
KigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3N3aXRjaC0+YXQobV9pbmRleCk7
CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5k
ZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN3aXRjaFZhbHVlKiBt
X3N3aXRjaDsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisg
ICAgLy8gVGhpcyByZW1vdmVzIHRoZSBjYXNlIGFuZCByZW9yZGVycyB0aGluZ3MgYSBiaXQuIElm
IHlvdSdyZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZyb20gMCB0byBOLAorICAgIC8vIHRoZW4geW91
IGNhbiBrZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlzIHNvIGxvbmcgYXMgeW91IHJldmlzaXQgdGhp
cyBzYW1lIGluZGV4ICh3aGljaCB3aWxsIG5vdworICAgIC8vIGNvbnRhaW4gc29tZSBvdGhlciBj
YXNlIHZhbHVlKS4gVGhpcyByZW1vdmVzIHRoZSBjYXNlIHRoYXQgd2FzIHJlbW92ZWQuCisgICAg
U3dpdGNoQ2FzZSByZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KTsKKworICAgIHZvaWQgYXBwZW5k
Q2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKTsKKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3dpdGNoVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKTsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZSB0eXBlKQoreworICAg
IHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgb3V0LnByaW50KCJWb2lk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBvdXQucHJpbnQo
IkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDY0OgorICAgICAgICBvdXQu
cHJpbnQoIkludDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZToKKyAgICAg
ICAgb3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVHlw
ZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgeworICAgIFZvaWQs
CisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxpbmUgYm9vbCBp
c0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9PSBJ
bnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJu
IHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyKCkgY29uc3QKK3sKKyAg
ICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0
dXJuIEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdU
RiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBC
M1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9u
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitVcHNpbG9uVmFsdWU6On5VcHNpbG9uVmFsdWUoKQoreworfQorCit2b2lkIFVwc2lsb25W
YWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
Il4iLCBtX3BoaS0+aW5kZXgoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2lsb25WYWx1ZV9oCisjZGVmaW5lIEIzVXBzaWxv
blZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFVwc2lsb25WYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUg
PT0gVXBzaWxvbjsgfQorCisgICAgflVwc2lsb25WYWx1ZSgpOworCisgICAgVmFsdWUqIHBoaSgp
IGNvbnN0IHsgcmV0dXJuIG1fcGhpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRh
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICBVcHNpbG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBoaSkKKyAgICAgICAgOiBWYWx1ZShp
bmRleCwgUGhpLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQorICAgICAgICAsIG1fcGhpKHBoaSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgpID09IHBoaS0+dHlwZSgpKTsKKyAgICB9
CisKKyAgICBWYWx1ZSogbV9waGk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFs
dWU6On5WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFs
dWUqIHZhbHVlKQoreworICAgIC8vIFRoaXMgaXMgYSBiaXQgY3JhenkuIEl0IGRvZXMgYW4gaW4t
cGxhY2UgcmVwbGFjZW1lbnQgb2Ygd2hhdGV2ZXIgVmFsdWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRo
CisgICAgLy8gYSBwbGFpbiBJZGVudGl0eSBWYWx1ZS4gV2UgZmlyc3QgY29sbGVjdCBhbGwgb2Yg
dGhlIGluZm9ybWF0aW9uIHdlIG5lZWQsIHRoZW4gd2UgZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJl
dmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0aGVuIHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkg
VmFsdWUgaW4gcGxhY2UuCisKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgVHlw
ZSB0eXBlID0gbV90eXBlOworICAgIE9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNp
Y0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRo
aXMtPnJlcGxhY2VtZW50OworICAgIHZvaWQqIG1pc2MgPSB0aGlzLT5taXNjOworCisgICAgUkVM
RUFTRV9BU1NFUlQodHlwZSA9PSB2YWx1ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+
VmFsdWUoKTsKKworICAgIG5ldyAodGhpcykgKGluZGV4LCBJZGVudGlmeSwgdHlwZSwgb3JpZ2lu
LCB2YWx1ZSk7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2Vt
ZW50ID0gcmVwbGFjZW1lbnQ7CisgICAgdGhpcy0+bWlzYyA9IG1pc2M7Cit9CisKK3ZvaWQgVmFs
dWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFBy
ZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIiAiLCAqdGhpcywgIiA9ICIsIG1f
b3Bjb2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsK
KyAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVuKCkpCisgICAgICAgIG91dC5wcmludChj
b21tYSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0cmlu
Z091dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQpOworICAgIENTdHJpbmcgc3RyaW5nID0gc3Ry
aW5nT3V0LnRvQ1N0cmluZygpOworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIG91
dC5wcmludChjb21tYSwgc3RyaW5nKTsKKworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29s
IFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQz
Ml90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCitib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsK
K30KKworZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdAoreworfQorCitUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29k
ZSBvcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNl
IE11bDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgor
ICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAg
Y2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIENoZWNr
QWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0
dXJuIGZpcnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAg
cmV0dXJuIHBvaW50ZXIoKTsKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAg
IGNhc2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBj
YXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6
CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93
OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJl
dHVybiBJbnQzMjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAg
cmV0dXJuIEludDY0OworICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAg
cmV0dXJuIERvdWJsZTsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZV9oCisjZGVmaW5lIEIz
VmFsdWVfaAorCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWUgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSosIDM+IEFkamFjZW5jeUxpc3Q7CisK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICJAIjsKKworICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIH5WYWx1
ZSgpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Cisg
ICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNvZGUgaXMgaW1tdXRhYmxlLCBleGNlcHQgZm9y
IHJlcGxhY2luZyB2YWx1ZXMgd2l0aCBpZGVudGl0eS4KKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKworICAgIE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX29yaWdpbjsgfQorICAgIAorICAgIFZhbHVlKiYgY2hpbGQodW5zaWduZWQgaW5kZXgp
IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisgICAgVmFsdWUqIGNoaWxkKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorCisgICAgLy8gVGhp
cyBjb21wdXRlcyB0aGUgdHlwZSB1c2luZyB0aGUgb3Bjb2RlLgorICAgIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7
IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVu
KCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aElk
ZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCByZXBsYWNlV2l0aE5vcCgpOworCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBs
ZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisg
ICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAgICAvLworICAgIC8vIGlmIChB
cmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVl
PigpKSB7CisgICAgLy8gICAgIHRoaW5ncworICAgIC8vIH0KKyAgICAvLworICAgIC8vIFRoaXMg
d2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdv
cmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAvLyBpZiBUOjphY2NlcHRzKG9w
Y29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCog
YXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7
CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGludDMyX3QgYXNJbnQzMigp
IGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFz
SW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSW50KCkgY29uc3Q7CisgICAgaW50NjRfdCBh
c0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3Q7CisKKyAg
ICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OworICAgIGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0Owor
CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlh
IFByb2NlZHVyZS4KKyAgICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlw
ZSBleHBsaWNpdGx5OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBl
eHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
KyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAg
ICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAg
ICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQor
ICAgIC8vIFRoaXMgZm9ybSBpcyBmb3Igc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdo
ZW4gdGhlIG9wY29kZSBoYXMgbm8gY2hpbGRyZW46CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICAg
ICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAg
LCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0K
KyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhl
aXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGNoaWxkOgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29w
Y29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxk
KSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmly
c3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBp
cyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9w
Y29kZSBhbG9uZSwgYW5kIHRoYXQgZG9uJ3QKKyAgICAvLyB0YWtlIGFueSBhcmd1bWVudHM6Cisg
ICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNv
ZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBudWxscHRyKSkKKyAgICAgICAg
LCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZv
ciB2YXJhcmdzLgorICAgIGV4cGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRy
ZW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUp
CisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAg
ICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBU
eXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCk7CisKKyAgICAvLyBUaGlzIGdy
b3VwIG9mIGZpZWxkcyBpcyBhcnJhbmdlZCB0byBmaXQgaW4gNjQgYml0cy4KKyAgICB1bnNpZ25l
ZCBtX2luZGV4OworICAgIE9wY29kZSBtX29wY29kZTsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICAK
KyAgICBPcmlnaW4gbV9vcmlnaW47CisgICAgQWRqYWNlbmN5TGlzdCBtX2NoaWxkcmVuOworCitw
dWJsaWM6CisgICAgQmFzaWNCbG9jayogb3duZXIgeyBudWxscHRyIH07IC8vIGNvbXB1dGVkIGxh
emlseS4KKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgeyBudWxscHRyIH07IC8vIHVzZWQgZm9yIGFu
YWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsK
K3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3Zh
bHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1
ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8
bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgVmFsdWUqIG1fdmFsdWU7Cit9OworCitE
ZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZh
bHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5s
aW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlSW5saW5lc19o
CisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKworI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIK
KyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlm
IChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0
aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordGVtcGxhdGU+dHlwZW5hbWUgVD4KK2Nv
bnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUq
Pih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAorewor
ICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1ZT4oKTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJ
bnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsK
K30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENv
bnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6
aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSB8fCBoYXNJbnQ2NCgpOwor
fQorCitpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMy
KCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9CisKK2Jvb2wgVmFsdWU6OmlzSW50KGludDY0
X3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludCgpICYmIGFzSW50KCkgPT0gdmFs
dWU7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEh
YXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKworZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91YmxlVmFsdWU+KCktPnZhbHVlKCk7Cit9CisK
K1N0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQoreworICAgIGlmIChDaGVja1ZhbHVlKiBjaGVj
ayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmY2hlY2stPnN0YWNrbWFwOwor
ICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhczxQYXRjaHBvaW50VmFsdWU+
KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2ludC0+c3RhY2ttYXA7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1
ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
VmFsdWVSZXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFs
dWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9r
aW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgTm9uZToKKyAgICBjYXNlIFNv
bWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAg
IG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgi
KCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25z
dGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVS
ZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVw
OjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lz
dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAg
ICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBW
YWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6
Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVSZXBfaAorI2RlZmluZSBCM1ZhbHVl
UmVwX2gKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3Mg
dG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2Vk
IGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVz
ZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ug
c2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0
IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0
LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAg
Ly8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGlj
ayBhbnkgcmVwcmVzZW50YXRpb24uIEFzIGFuCisgICAgICAgIC8vIG91dHB1dCByZXByZXNlbnRh
dGlvbiwgdGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNl
IGZvciB0aGUKKyAgICAgICAgLy8gcmlnaHQgb3BlcmFuZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBD
aGVja011bC4KKyAgICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQg
Y291bGQgYmUgYQorICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2Ji
ZXIhCisgICAgICAgIFNvbWVSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXBy
ZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRw
dXQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCByZWdpc3Rl
ciBCMyBwaWNrZWQuCisgICAgICAgIFJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1
dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMgcGlja2Vk
LiBJdCdzIG5vdCBhIHZhbGlkCisgICAgICAgIC8vIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAg
ICAgICBTdGFjaywKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyBmb3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUgYXJndW1lbnQgYXJlYSBhdCBzb21l
CisgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgU3RhY2tBcmd1bWVudCwKKworICAgICAgICAv
LyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgdGhhdCBCMyBjb25z
dGFudC1mb2xkZWQgdGhlIHZhbHVlLgorICAgICAgICBDb25zdGFudAorICAgIH07CisgICAgCisg
ICAgVmFsdWVSZXAoKQorICAgICAgICA6IG1fa2luZChBbnkpCisgICAgeworICAgIH0KKworICAg
IGV4cGxpY2l0IFZhbHVlUmVwKFJlZyByZWcpCisgICAgICAgIDogbV9raW5kKFJlZ2lzdGVyKQor
ICAgICAgICAsIG1fdmFsdWUocmVnLmluZGV4KCkpCisgICAgeworICAgIH0KKworICAgIHN0YXRp
YyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChy
ZWcpOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFjayhpbnRwdHJfdCBvZmZzZXRG
cm9tRlApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tRlA7Cisg
ICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrQXJndW1lbnQoaW50cHRyX3Qgb2Zmc2V0
RnJvbVNQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3RhY2tBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRG
cm9tU1A7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGludDY0X3QgdmFs
dWUpCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICB9CisK
KyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnREb3VibGUoZG91YmxlIHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKGJpdHdpc2VfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOwor
ICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBBbnk7IH0K
KworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBSZWc6OmZyb21JbmRleChtX3ZhbHVlKTsKKyAgICB9
CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRwdHJf
dD4obV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2tBcmd1bWVudCk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV92YWx1ZSk7CisgICAgfQorCisgICAgaW50
NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IENvbnN0
YW50KTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCisgICAgZG91YmxlIGRvdWJs
ZVZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91Ymxl
Pih2YWx1ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBLaW5kIG1fa2luZDsKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlZhbHVlUmVwOjpLaW5kKTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM1ZhbHVlUmVwX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJi
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRl
cm5fbWF0Y2hlci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5MyBAQAorIyEvdXNyL2Jp
bi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1
aXJlICJwYXRobmFtZSIKKworJHZhckluZGV4ID0gMAorZGVmIG5ld1ZhcgorICAgICR2YXJJbmRl
eCArPSAxCisgICAgIl90bXAjeyR2YXJJbmRleH0iCitlbmQKKworY2xhc3MgUHJvZHVjdGlvbgor
ICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpuYW1lLCA6dmFyTmFtZSwgOmFub255bW91cywgOm9w
Y29kZSwgOmNoaWxkcmVuCisKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIG5hbWUsIG9wY29k
ZSwgY2hpbGRyZW4pCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQG5hbWUgPSBu
YW1lCisgICAgICAgIEBhbm9ueW1vdXMgPSAobmFtZSA9PSBuaWwgb3IgbmFtZSA9fiAvXEFcJChb
MC05XSspXFovKQorICAgICAgICBAdmFyTmFtZSA9IEBhbm9ueW1vdXMgPyBuZXdWYXIgOiBuYW1l
CisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4g
PyBjaGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAgIG9w
Y29kZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisgICAg
ICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNoaWxkLCBpbmRl
eCB8CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQu
bmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAgICAgICAgICAg
ICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9u
T3BlcmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAorICAgICAg
ICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykK
KyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3JlYWRl
ciA6bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0
aW9ucykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1
Y3Rpb25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZp
bGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBs
aW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51
bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAi
I3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgor
ICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6
ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3Ry
aW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBp
ZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQK
KyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3Ro
ZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3Bl
Y3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29t
bWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJz
ZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNl
IGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2Vu
ZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXco
ZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxl
IG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15c
bl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4v
CisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciAr
PSAxCisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLworICAgICAg
ICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVy
KSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVz
cGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0
IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXco
ZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAu
LjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gK
KyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMg
V2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdo
dCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcikp
XFovCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEFbYS16
QS1aMC05JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQK
KworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAg
ICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAg
ZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisg
ICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFy
c2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBh
cnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQu
ZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxl
IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBh
dCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBl
bmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJv
cigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBh
ZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVz
dWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZp
ZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAg
ICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMs
IHByb2R1Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0gcHJvZHVjdGlvbi52YXJOYW1lCisgICAg
ICAgICAgICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0aW9uIGhhcyBzYW1lIG5hbWUgYXMgcGFy
ZW50IHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0
ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAg
ICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQor
ICAgICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAgICAgICBtYXRjaGVyTmFtZSA9IGNvbnN1
bWVJZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorCisgICAgICAgIGxvb3Ag
eworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAg
ICAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVkZSIuIElmIHdlIGRpZCB0aGF0
LCBpdCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHBhcnNlUHJvZHVj
dGlvbgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8
IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgICAg
IHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgICAgIGVuZAorCisg
ICAgICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgICAgIH0KKworICAgICAg
ICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAgICBk
ZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAgICAg
ICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBpZiB0b2tlbiA9PSAiPSIKKyAg
ICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAgICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlkZW50
aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9PSAi
KCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICAgICAgb3Bjb2RlID0gbmFtZQor
ICAgICAgICAgICAgbmFtZSA9IG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g
UHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisgICAg
ICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGxvb3AgeworICAgICAgICAg
ICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisKKyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1lLCBw
cm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorCisgICAgICAgICAgICBicmVhayBpZiB0b2tl
biA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICB9CisKKyAgICAgICAg
IyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAgICAgICAgYWR2YW5jZQorCisgICAgICAgIFByb2R1
Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKK2Vu
ZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZChm
aWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hlciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBTdWJN
YXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRleE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisgICAg
ZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4TWFw
ID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVhY2gg
eworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5kZXgK
KyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAg
fQorICAgIGVuZAorCisgICAgZGVmIG1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgIGlu
ZGV4TGlzdC5tYXAgeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhN
YXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitGaWxlLm9wZW4oIkIzIiArIG1h
dGNoZXIubmFtZSArICIuaCIsICJ3IikgeworICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMg
Ii8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVO
YW1lfSAtLSBkbyBub3QgZWRpdCEiCisKKyAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNo
ZXIubmFtZX1faCIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIK
KyAgICAKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAg
b3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1
dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBydW4j
e21hdGNoZXIubmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0
cC5wdXRzICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5
IGluZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UK
KyAgICAjIHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4g
YSBnb29kIHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91
LgorCisgICAgIyBJbiBvZGQgc2l0dWF0aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZh
bHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5w
dXRzICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsiCisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHBy
b3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMg
aGF2aW5nIGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1
ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJv
ZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5k
ZXggfAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4
TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5n
dGgKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKworICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAg
fCBpbmRleExpc3QgfAorICAgICAgICAgICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0
WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0tPmNoaWxkcmVuLnNpemUoKSA+PSAj
e2xlbmd0aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlp
ZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAg
ICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0
aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0
ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUg
Y29yb3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29k
ZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisg
ICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBt
YXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMg
Rmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9u
cyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4K
KyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9p
bmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlm
IGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bj
b2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1st
MV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3Rz
IDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5
IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhv
dXQgb25lLgorICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUK
KyAgICAgICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3Jv
dXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAg
ICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8
CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVj
dGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50Lgor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgp
KSB7IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAg
ICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3Vi
TWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAg
IG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gu
bmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgo
b3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1h
cEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5k
CisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZl
IHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhl
bSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisg
ICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbklu
ZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5s
ZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdW
YXIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJW
YWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsi
CisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxl
ciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFN
KCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1
Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJv
ZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNo
UmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAg
ICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRl
eExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVO
YW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAg
ICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcElu
ZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2
YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZh
bHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAg
ICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMg
cHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBz
YW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlz
dCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUs
IHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3Qg
fAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3Qp
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZl
bHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRl
eExpc3QgfAorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwK
KyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAg
ICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tw
cm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1l
bnRzID0gW10KKyAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAg
dHJ5QXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAg
IHNlZW4gPSB7fQorICAgICAgICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAgICAg
ICAgICAgICAgIHwgcGFyZW50VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtpbmQs
IGluZGV4IHwKKyAgICAgICAgICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9LT5j
aGlsZCgje2luZGV4fSkiCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc2Vl
bltjaGlsZFZhck5hbWVdCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsiCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFyTmFt
ZX0pIHsiCisgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVlCisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVl
KiAje2NoaWxkVmFyTmFtZX0gPSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAgICAg
aWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGRO
YW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBv
ciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZEFyZ3Vt
ZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5kID09IDphbm9u
T3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1l
IGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFkYXB0b3Iu
YWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgb3V0cC5wdXRzKCIgICAgJiYgYWRhcHRv
ci5hY2NlcHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIp
CisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBhZGFwdG9yLmFjY2VwdE9wZXJhbmRzKCIg
KyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBvdXRwLnB1
dHMoIiAgICAmJiBhZGFwdG9yLnRyeSN7cHJvZHVjdGlvbi5uYW1lfSgiICsgdHJ5QXJndW1lbnRz
LmpvaW4oIiwgIikgKyAiKSkiKQorICAgICAgICAgICAgb3V0cC5wdXRzICIgICAgcmV0dXJuOyIK
KyAgICAgICAgICAgIG51bVNjb3Blcy50aW1lcyB7CisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJ9IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMyIKKworICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEIzI3ttYXRjaGVy
Lm5hbWV9X2giCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
ckFyZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK3ZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNo
IChtX2tpbmQpIHsKKyAgICBjYXNlIFRtcDoKKyAgICAgICAgb3V0LnByaW50KHRtcCgpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tOgorICAgICAgICBvdXQucHJpbnQoIiQiLCBtX29m
ZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEltbTY0OgorICAgICAgICBvdXQucHJp
bnRmKCIkMHglbGx4IiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGRy
OgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkp
OworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIpIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEluZGV4OgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsIiwgaW5k
ZXgoKSk7CisgICAgICAgIGlmIChzY2FsZSgpICE9IDEpCisgICAgICAgICAgICBvdXQucHJpbnQo
IiwiLCBzY2FsZSgpKTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFN0YWNrOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQob2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgcG9pbnRlckR1bXAoc3RhY2tT
bG90KCkpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYWxsQXJnOgorICAgICAg
ICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KTsKKyAgICAgICAg
b3V0LnByaW50KCIoY2FsbEFyZykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVsQ29u
ZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVsYXRpb25hbENvbmRpdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVzdWx0Q29u
ZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBv
dXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1ODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBcmdfaAorI2RlZmluZSBBaXJB
cmdfaAorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3BlY2lh
bDsKK2NsYXNzIFN0YWNrU2xvdDsKKworLy8gVGhpcyBjbGFzcyBuYW1lIGlzIGFsc28gaW50ZW50
aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIHdpbGwgc2F5IGl0IGEgbG90LiBZb3UnbGwgc2VlIGNv
ZGUgbGlrZQorLy8gSW5zdCguLi4sIEFyZzo6aW1tKDUpLCBBcmc6OmFkZHIodGhpbmcsIGJsYWgp
LCAuLi4pCitjbGFzcyBBcmcgeworcHVibGljOgorICAgIC8vIFRoZXNlIGVudW0gbWVtYmVycyBh
cmUgaW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIGhhdmUgdG8gbWVudGlvbiB0aGVtIGEg
bG90LgorICAgIGVudW0gS2luZCA6IGludDhfdCB7CisgICAgICAgIFRtcCwKKyAgICAgICAgSW1t
LAorICAgICAgICBJbW02NCwKKyAgICAgICAgQWRkciwKKyAgICAgICAgU3RhY2ssCisgICAgICAg
IENhbGxBcmcsCisgICAgICAgIEluZGV4LAorICAgICAgICBSZWxDb25kLAorICAgICAgICBSZXND
b25kLAorICAgICAgICBTcGVjaWFsCisgICAgfTsKKworICAgIGVudW0gUm9sZSA6IGludDhfdCB7
CisgICAgICAgIFVzZSwKKyAgICAgICAgRGVmLAorICAgICAgICBVc2VEZWYKKyAgICB9OworCisg
ICAgZW51bSBUeXBlIDogaW50OF90IHsKKyAgICAgICAgR1AsCisgICAgICAgIEZQCisgICAgfTsK
KworICAgIHN0YXRpYyBib29sIGlzVXNlKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xl
IHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBj
YXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
CisgICAgc3RhdGljIFR5cGUgdHlwZUZvckIzVHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNl
IEludDMyOgorICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIEdQOworICAg
ICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBGUDsKKyAgICAgICAgfQorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEdQOworICAgIH0KKwor
ICAgIEFyZygpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAgICAg
IDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFy
ZyBpbW02NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFs
dWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBhZGRy
ZXNzKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBBZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAw
KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0
YWNrOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
bHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmco
aW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRT
Y2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAg
ICAgICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
Y2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNj
YWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAg
ICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgo
QWlyOjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAg
ICAgQVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2Nh
bGUpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4
OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXgg
PSBpbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihz
Y2FsZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRp
b24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
UmVzQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNp
YWwqIHNwZWNpYWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0
PGludHB0cl90PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5k
ID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQor
ICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBt
X3NjYWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJ
bW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQor
CisgICAgYm9vbCBpc0ltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gSW1tNjQ7CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAg
IGJvb2wgaXNDYWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
Q2FsbEFyZzsKKyAgICB9CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQor
CisgICAgYm9vbCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBSZXNDb25kOworICAgIH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlz
QWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygp
OworICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAg
aW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IElt
bSB8fCBraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
CisgICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkg
PT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGludDMyX3Qg
b2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9zY2FsZSk7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5k
ZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpOworICAg
IH0KKworICAgIFN0YWNrU2xvdCogc3RhY2tTbG90KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0YWNr
U2xvdCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBpbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1f
aW5kZXg7CisgICAgfQorCisgICAgdW5zaWduZWQgc2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX3NjYWxlOworICAg
IH0KKworICAgIHVuc2lnbmVkIGxvZ1NjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBsb2dTY2FsZShzY2FsZSgpKTsKKyAgICB9CisKKyAgICBBaXI6OlNwZWNpYWwqIHNwZWNpYWwo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTcGVjaWFsKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBaXI6OlNwZWNpYWwqPihtX29mZnNldCk7CisgICAgfQor
CisgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgp
ICYmIHRtcCgpLmlzR1AoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBUbXAoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAK
KyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRo
YXQgcmVxdWlyZXMgYSBHUCB2YWx1ZS4KKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2Ug
SW1tNjQ6CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAg
Y2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBSZWxD
b25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVy
biBpc0dQVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBpZiB0aGlz
IEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2YWx1ZS4K
KyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsK
KyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBS
ZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBC
YXNlOgorICAgICAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAg
ICAgICBjYXNlIEltbTY0OiAvLyBZZXMsIHdlIGFsbG93IEltbTY0IGFzIGEgZG91YmxlIGltbWVk
aWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFja21hcHMuCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNG
UFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBoYXNUeXBlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAg
ICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHR5cGUgaXMgYW1iaWd1b3VzIGZvciBzb21lIGFy
ZyBraW5kcy4gQ2FsbCB3aXRoIGNhcmUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0dQKCkgPyBHUCA6IEZQOworICAgIH0KKworICAgIGJvb2wgaXNUeXBl
KFR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIGlzR1AoKTsKKyAgICAgICAgY2FzZSBGUDoK
KyAgICAgICAgICAgIHJldHVybiBpc0ZQKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29s
IGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlz
R1BSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gdG1wKCkuZ3ByKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQUigpOworICAgIH0KKworICAg
IEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwcigpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBpc1RtcCgpICYmIHRtcCgpLmlzUmVnKCk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkucmVnKCk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3BUbXBJ
bmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRtcCgpLmZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkudG1wSW5kZXgo
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9y
RWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRj
aCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICBjYXNlIEFkZHI6CisgICAg
ICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGZ1bmN0
b3IobV9pbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzbWFydCBl
bm91Z2ggdG8ga25vdyB0aGF0IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxl
IHdpbGwgdXNlIGl0cworICAgIC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBs
ZSwgdGhpczoKKyAgICAvLworICAgIC8vIG1vdiAlcmF4LCAoJXJjeCkKKyAgICAvLworICAgIC8v
IFRoaXMgZGVmcyAoJXJjeCkgYnV0IHVzZXMgJXJjeC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChSb2xlIGFyZ1JvbGUsIFR5cGUgYXJnVHlwZSwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIGFyZ1JvbGUs
IGFyZ1R5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAg
ICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOwor
ICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4LCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdXQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOwor
ICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NCBhc1RydXN0ZWRJbW02NCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW02
NCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQocG9pbnRl
clZhbHVlKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mg
YXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0FkZHIoKSk7CisgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIHN0YXRpY19j
YXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbmRl
eCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAg
ICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1i
bGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90
PihtX29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNSZWxDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGFzUmVzdWx0Q29uZGl0aW9uKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc1Jlc0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50NjRf
dCBtX29mZnNldCB7IDAgfTsKKyAgICBLaW5kIG1fa2luZCB7IEltbSB9OworICAgIGludDMyX3Qg
bV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9pbmRl
eDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFp
ckFyZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNp
Y0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
VXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCit2b2lkIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQor
eworICAgIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNC
bG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJl
bW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBs
YWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAg
QjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNC
bG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1w
UHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOwor
ICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBpbnN0LCAiXG4iKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVm
aW5lIEFpckJhc2ljQmxvY2tfaAorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0
Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKK2Ns
YXNzIEluc2VydGlvblNldDsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiIyI7CisKKyAgICB0eXBl
ZGVmIFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2Nr
KiwgMj4gQWRqYWNlbmN5TGlzdDsKKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgY29u
c3QgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2luc3RzW2luZGV4XTsg
fQorICAgIEluc3QmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0K
KworICAgIGNvbnN0IEluc3QmIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsg
fQorICAgIEluc3QmIGxhc3QoKSB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisg
ICAgeworICAgICAgICBtX2luc3RzLmFwcGVuZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFw
cGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBtX2luc3RzLmFw
cGVuZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9
CisKKyAgICAvLyBUaGUgIjAiIGNhc2UgaXMgdGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBq
dW1wcywgc28gdGhlICJ0aGVuIiBjYXNlLiBUaGUgIjEiIGNhc2UgaXMgdGhlCisgICAgLy8gImVs
c2UiIGNhc2UsIGFuZCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZmFsbC10aHJvdWdoIG9mIGEg
Y29uZGl0aW9uYWwgYnJhbmNoLgorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7
IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9Cisg
ICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNj
ZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIHN1Y2Nlc3NvcnMoKSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgQWRqYWNlbmN5TGlzdCYg
c3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKworICAgIHVuc2ln
bmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUo
KTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVj
ZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
cHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIEFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycygp
IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorCisgICAgdm9pZCBhZGRQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKik7CisgICAgdm9pZCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
Kik7CisgICAgdm9pZCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNC
bG9jayogdG8pOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9p
ZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBDb2RlOworICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAgCisgICAgQmFz
aWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICBJbnN0TGlzdCBtX2luc3RzOworICAgIEFkamFjZW5jeUxpc3QgbV9zdWNjZXNz
b3JzOworICAgIEFkamFjZW5jeUxpc3QgbV9wcmVkZWNlc3NvcnM7Cit9OworCitjbGFzcyBEZWVw
QmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Js
b2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICht
X2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVt
cChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJs
b2NrKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
QWlyQmFzaWNCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q0NhbGxTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0NDYWxsU3BlY2lh
bDo6Q0NhbGxTcGVjaWFsKCkKK3sKKyAgICBtX2Nsb2JiZXJlZFJlZ3MgPSBSZWdpc3RlclNldDo6
YWxsUmVnaXN0ZXJzKCk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVy
U2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5l
eGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCitDQ2FsbFNw
ZWNpYWw6On5DQ2FsbFNwZWNpYWwoKQoreworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6Zm9yRWFj
aEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNr
PiYgY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OlVzZSwgQXJn
OjpHUCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXpl
KCk7ICsraSkgeworICAgICAgICAvLyBGb3IgdGhlIHR5cGUsIHdlIGNhbiBqdXN0IHF1ZXJ5IHRo
ZSBhcmcncyB0eXBlLiBUaGUgYXJnIHdpbGwgaGF2ZSBhIHR5cGUsIGJlY2F1c2Ugd2UKKyAgICAg
ICAgLy8gcmVxdWlyZSB0aGVzZSBhcmdzIHRvIGJlIGFyZ3VtZW50IHJlZ2lzdGVycy4KKyAgICAg
ICAgY2FsbGJhY2soaW5zdC5hcmdzW2ldLCBBcmc6OlVzZSwgaW5zdC5hcmdzW2ldLnR5cGUoKSk7
CisgICAgfQorfQorCitib29sIENDYWxsU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQorewor
ICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAg
ICAgICAgaWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICBpZiAoc2l6ZW9m
KHZvaWQqKSA9PSA4KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjYXNlIEFyZzo6VG1wOgorICAgIGNhc2UgQXJnOjpBZGRyOgorICAgIGNhc2UgQXJnOjpT
dGFjazoKKyAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaW5zdC5hcmdzWzFd
LmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWluc3QuYXJnc1tp
XS5pc1JlZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChpbnN0
LmFyZ3NbaV0gPT0gVG1wKHNjcmF0Y2hSZWdpc3RlcikpCisgICAgICAgICAgICByZXR1cm4gIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmFk
bWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICAvLyBBcmcgMSBjYW4g
YmUgYSBzdGFjayBhZGRyZXNzIGZvciBzdXJlLgorICAgIGlmIChhcmdJbmRleCA9PSAxKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ0Nh
bGxTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYp
Cit7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6OmdlbmVyYXRlKEluc3Qm
IGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAgc3dp
dGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAgICBjYXNl
IEFyZzo6SW1tUHRyOgorICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoaW5zdC5hcmdzWzFdLnBvaW50ZXJWYWx1ZSgpKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAg
ICAgaml0LmNhbGwoc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
cmc6OlRtcDoKKyAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzWzFdLmdwcigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sx
XS5hc0FkZHJlc3MoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBDQ2Fs
bFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncygpCit7CisgICAgcmV0dXJuIG1fY2xvYmJlcmVk
UmVnczsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJDQ2FsbCIpOworfQorCit2b2lkIENDYWxsU3BlY2lh
bDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJmdW5jdGlvbiBjYWxsIHRoYXQgdXNlcyB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIik7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxTcGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxT
cGVjaWFsX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCisvLyBVc2UgdGhpcyBzcGVjaWFsIGZvciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFyZyAw
IGlzIG9mIGNvdXJzZSBhIFNwZWNpYWwgYXJnIHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0NhbGxT
cGVjaWFsIG9iamVjdC4gQXJnIDEgaXMgdGhlIGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJbW1Q
dHIsIGEgcmVnaXN0ZXIsIG9yIGFuIGFkZHJlc3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3MgYXJl
IGp1c3QgdGhlIHNldCBvZiBhcmd1bWVudCByZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwuIEZv
ciBhcmd1bWVudHMgdGhhdCBnbyB0bworLy8gdGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0aGUg
Z3J1bnQgd29yayBvZiBkb2luZyB0aG9zZSBzdGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBvbmx5
IHJlYXNvbiB3aHkKKy8vIHdlIHNwZWNpZnkgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBhcmd1
bWVudHMgdG8gYSBjYWxsIGlzIHNvIHRoYXQgdGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBzZWUK
Ky8vIHRoYXQgdGhleSBnZXQgdXNlZCBoZXJlLiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRvbWFn
aWNhbGx5IHJlcG9ydCBhbGwgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2VkIGJl
Y2F1c2UgaWYgd2UgaGFkIGEgY2FsbCB0aGF0IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhleSdk
IGFwcGVhciB0byBiZSBsaXZlIHVudGlsIHNvbWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhlIHBy
b2xvZ3VlLCB3aGljaGV2ZXIgaGFwcGVuZWQgc29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNpYWwg
OiBwdWJsaWMgU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAgfkND
YWxsU3BlY2lhbCgpOworCisgICAgLy8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBw
YXNzIGFyZ3VtZW50cy4gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBu
b3QKKyAgICAvLyB1c2VkIGZvciBhcmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9u
LiBCeSB0aGUgd2F5LCB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8g
dGhpcyBzcGVjaWFsIHRvIGJlIHNwZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyBzY3JhdGNoUmVnaXN0ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwLgorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6
RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0
ZXJTZXQmKSBvdmVycmlkZTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYs
IENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVw
RHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBS
ZWdpc3RlclNldCBtX2Nsb2JiZXJlZFJlZ3M7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJDQ2FsbFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKK3sKK30K
KworQ29kZTo6fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jaygpCit7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1f
YmxvY2tzLnNpemUoKSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOwor
ICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit2b2lkIENvZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVt
cChibG9jaykpOworICAgIGlmIChudW1TdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgb3V0LnByaW50
KCJTdGFjayBzbG90czpcbiIpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IHN0YWNr
U2xvdHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNsb3QpLCAi
XG4iKTsKKyAgICB9CisgICAgaWYgKG51bVNwZWNpYWxzKCkpIHsKKyAgICAgICAgb3V0LnByaW50
KCJTcGVjaWFsczpcbiIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFs
cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCksICJc
biIpOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyQ29kZV9oCisjZGVmaW5lIEFpckNvZGVfaAorCisjaW5jbHVkZSAiQWly
QmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFj
a1Nsb3QuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2Nl
ZHVyZTsKKworbmFtZXNwYWNlIEFpciB7CisKKy8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5
IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJdCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRl
cyB0aGFuIHRoZQorLy8gZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSAtIGZvciBleGFtcGxlIGlmIHlv
dSdyZSBnZW5lcmF0aW5nIDFNQiBvZiBtYWNoaW5lIGNvZGUsIHlvdSBuZWVkIGFib3V0CisvLyA0
ME1CIG9mIEFpci4KKworY2xhc3MgQ29kZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29k
ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ29kZSgpOwor
ICAgIH5Db2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jaygpOworCisgICAgU3RhY2tT
bG90KiBhZGRTdGFja1Nsb3QoKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlx
dWVfcHRyPFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQg
dG8gbWFrZSBhIEMgY2FsbCEKKyAgICBTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2Nr
KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0K
KworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6
CisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgm
cHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAg
ICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2lu
ZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIu
bV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQg
ZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChp
bmRleCA8IG1fcHJvY2VkdXJlLT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisg
ICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmV4OworICAgICAg
ICB9CisKKyAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQg
bV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgbnVtQmxvY2tzKCkpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxTcGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBTcGVjaWFsKiBtX2NhbGxTcGVjaWFsOwor
cHVibGljOgorICAgIHVuc2lnbmVkIGZyYW1lU2l6ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29u
dGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5lcmF0aW9uQ29udGV4
dF9oCisjZGVmaW5lIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKworI2luY2x1ZGUgPHd0Zi9TaGFy
ZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0IHsKKyAgICB0eXBlZGVmIHZvaWQgTGF0ZVBh
dGhGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworICAgIHR5cGVk
ZWYgU2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKKworICAgIFZlY3RvcjxS
ZWZQdHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNl
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgZXhlY3V0ZUluc2Vy
dGlvbnMoYmxvY2stPm1faW5zdHMsIG1faW5zZXJ0aW9ucyk7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlySW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgQWlySW5zZXJ0aW9uU2V0X2gKKworI2luY2x1
ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBDb2RlOworCit0eXBlZGVmIFdURjo6SW5z
ZXJ0aW9uPEluc3Q+IEluc2VydGlvbjsKKworY2xhc3MgSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoK
KyAgICBJbnNlcnRpb25TZXQoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAg
ICB7CisgICAgfQorCisgICAgQ29kZSYgY29kZSgpIHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYgaW5zZXJ0
aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4o
aW5zZXJ0aW9uKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2
b2lkIGluc2VydEluc3Qoc2l6ZV90IGluZGV4LCBJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAg
IGFwcGVuZEluc2VydGlvbihJbnNlcnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0
KSkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisg
ICAgeworICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9j
ayopOworCitwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9u
LCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBBaXJJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQob3Bjb2RlLCAiICIsIGxpc3REdW1wKGFyZ3MpLCAiICA7
ICIsICpvcmlnaW4pOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBaXJJbnN0X2gKKyNkZWZpbmUgQWlySW5zdF9oCisKKyNpbmNsdWRlICJB
aXJBcmcuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2Ns
YXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25h
bWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK3N0cnVjdCBJbnN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJ
bnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgICAgIDogb3JpZ2luKG9yaWdp
bikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFs
dWUqIG9yaWdpbiwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBh
cmdzeyBhcmcsIGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAg
ICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNv
ZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKKyAgICAgICAgOiBh
cmdzKGFyZ3VtZW50cykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29k
ZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUq
IG9yaWdpbiwgQXJnTGlzdCYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzKFdURjo6bW92ZShh
cmd1bWVudHMpKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9w
Y29kZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3JzIGFs
bCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBmb3IgdGhp
bmdzIHRoYXQKKyAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlmIHlv
dSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4geW91J3JlCisgICAgLy8g
cHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCisKKyAgICAvLyBUaGlzIG9ubHkgd2Fsa3MgdGhvc2Ug
VG1wcyB0aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCwgYW5kIGl0IGRvZXNuJ3QgdGVsbCB5
b3UgdGhlaXIgcm9sZQorICAgIC8vIG9yIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBmb3IgKEFyZyBhcmcgOiBhcmdzKQorICAgICAgICAgICAgYXJnLmZvckVh
Y2hUbXBGYXN0KGZ1bmN0b3IpOworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCBFYWNoQXJnQ2Fs
bGJhY2soQXJnJiwgQXJnOjpSb2xlLCBBcmc6OlR5cGUpOworICAgIAorICAgIC8vIENhbGxzIHRo
ZSBmdW5jdG9yIHdpdGggKGFyZywgcm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1n
ZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpOworCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xlLCB0eXBlKS4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZ1JvbGUoCisgICAg
ICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsK
KyAgICAgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcChyb2xlLCB0eXBlLCBmdW5jdG9yKTsKKyAg
ICAgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIFRoaW5nIGNhbiBiZSBlaXRoZXIgQXJnIG9y
IFRtcC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisKKyAgICAvLyBSZXR1cm5z
IHRydWUgaWYgdGhpcyBpbnN0cnVjdGlvbiBoYXMgYSBTcGVjaWFsKi4gVGhpcyB1bmxvY2tzIHNv
bWUgZXh0cmEgZnVuY3Rpb25hbGl0eS4KKyAgICBib29sIGhhc1NwZWNpYWwoKSBjb25zdDsKKwor
ICAgIC8vIFJlcG9ydHMgYW55IGFkZGl0aW9uYWwgcmVnaXN0ZXJzIGNsb2JiZXJlZCBieSB0aGlz
IG9wZXJhdGlvbi4gTm90ZSB0aGF0IGZvciBlZmZpY2llbmN5LAorICAgIC8vIGV4dHJhQ2xvYmJl
cmVkUmVncygpIG9ubHkgd29ya3MgaWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICBj
b25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKCk7CisKKyAgICAvLyBVc2UgdGhp
cyB0byByZXBvcnQgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBkb25l
IGp1c3QgYmVmb3JlIGNvZGVnZW4uIE5vdGUKKyAgICAvLyB0aGF0IGZvciBlZmZpY2llbmN5LCBy
ZXBvcnRVc2VkUmVnaXN0ZXJzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0
cnVlLgorICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYpOwor
CisgICAgLy8gSXMgdGhpcyBpbnN0cnVjdGlvbiBpbiBvbmUgb2YgdGhlIHZhbGlkIGZvcm1zIHJp
Z2h0IG5vdz8gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29k
ZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBpc1ZhbGlkRm9ybSgpOworCisgICAgLy8gQXNzdW1p
bmcgdGhpcyBpbnN0cnVjdGlvbiBpcyBpbiBhIHZhbGlkIGZvcm0gcmlnaHQgbm93LCB3aWxsIGl0
IHN0aWxsIGJlIGluIG9uZSBvZiB0aGUgdmFsaWQKKyAgICAvLyBmb3JtcyBpZiB3ZSBwdXQgYW4g
QWRkciByZWZlcmVuY2luZyB0aGUgc3RhY2sgKG9yIGEgU3RhY2tTbG90IG9yIENhbGxBcmcsIG9m
IGNvdXJzZSkgaW4gdGhlCisgICAgLy8gZ2l2ZW4gaW5kZXg/IFNwaWxsaW5nIHVzZXMgdGhpczog
aXQgd2Fsa3MgdGhlIGFyZ3MgYnkgaW5kZXggdG8gZmluZCBUbXBzIHRoYXQgbmVlZCBzcGlsbGlu
ZzsKKyAgICAvLyBpZiBpdCBmaW5kcyBvbmUsIGl0IGNhbGxzIHRoaXMgdG8gc2VlIGlmIGl0IGNh
biByZXBsYWNlIHRoZSBBcmc6OlRtcCB3aXRoIGFuIEFyZzo6QWRkci4gSWYgaXQKKyAgICAvLyBm
aW5kcyBhIG5vbi1UbXAgQXJnLCB0aGVuIGl0IGNhbGxzIHRoYXQgQXJnJ3MgZm9yRWFjaFRtcCB0
byBkbyBhIHJlcGxhY2VtZW50IHRoYXQgd2F5LgorICAgIC8vCisgICAgLy8gVGhpcyBmdW5jdGlv
biBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgYWRt
aXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpOworCisgICAgLy8gR2VuZXJhdGUgc29tZSBjb2Rl
IGZvciB0aGlzIGluc3RydWN0aW9uLiBUaGlzIGlzLCBsaWtlLCBsaXRlcmFsbHkgb3VyIGJhY2tl
bmQuIElmIHRoaXMgaXMgdGhlCisgICAgLy8gdGVybWluYWwsIGl0IHJldHVybnMgdGhlIGp1bXAg
dGhhdCBuZWVkcyB0byBiZSBsaW5rZWQgZm9yIHRoZSAidGhlbiIgY2FzZSwgd2l0aCB0aGUgImVs
c2UiCisgICAgLy8gY2FzZSBiZWluZyBmYWxsLXRocm91Z2guIFRoaXMgZnVuY3Rpb24gaXMgYXV0
by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZ2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgQXJnTGlzdCBhcmdzOworICAgIFZh
bHVlKiBvcmlnaW47IC8vIFRoZSBCMzo6VmFsdWUgdGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbS4K
KyAgICBPcGNvZGUgb3Bjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gQWlySW5zdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckluc3RJbmxpbmVzX2gKKyNkZWZpbmUgQWlySW5zdElubGluZXNfaAorCisjaW5j
bHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCisjaW5jbHVkZSAi
QWlyU3BlY2lhbHMuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
Rm9yRWFjaDxUbXA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wKGZ1bmN0b3IpOworICAgIH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBGb3JFYWNoPEFyZz4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmb3JFYWNoKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBpbnN0LmZvckVhY2hBcmcoZnVuY3Rvcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGZvckVhY2goY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKK3sKKyAgICBGb3JFYWNoPFRoaW5nPjo6Zm9yRWFjaCgqdGhpcywgZnVuY3Rv
cik7Cit9CisKK2Jvb2wgSW5zdDo6aGFzU3BlY2lhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFy
Z3Muc2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0
JiBJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBhcmdzWzBdLnNwZWNp
YWwoKS0+ZXh0cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsKK30KKwordm9pZCBJbnN0OjpyZXBvcnRV
c2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIGFy
Z3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0ZXJzKCp0aGlzLCB1c2VkUmVnaXN0ZXJz
KTsKK30KKworaW5saW5lIGJvb2wgaXNTaGlmdFZhbGlkKEluc3QmIGluc3QpCit7CisjaWYgQ1BV
KFg4NikKKyAgICByZXR1cm4gaW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3Rlcjo6Y3gpOwor
I2Vsc2UKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfSAgIAorCitpbmxpbmUgYm9vbCBpc0xz
aGlmdDMyVmFsdWUoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNTaGlmdFZhbGlkKGluc3Qp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJJ
bnN0SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2
ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxp
dmVuZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVzc19o
CisjZGVmaW5lIEFpckxpdmVuZXNzX2gKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNp
bmNsdWRlICJCM0luZGV4TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworLy8gWW91IGNhbiBjb21wdXRlIGxpdmVuZXNzIG92ZXIgVG1wJ3Mg
b3Igb3ZlciBBcmcncy4gSWYgeW91IGNvbXB1dGUgb3ZlciBBcmcncywgeW91IGdldCBib3RoCisv
LyBzdGFjayBsaXZlbmVzcyBhbmQgdG1wIGxpdmVuZXNzLgordGVtcGxhdGU8dHlwZW5hbWUgVGhp
bmc+CitjbGFzcyBMaXZlbmVzcyB7CitwdWJsaWM6CisgICAgTGl2ZW5lc3MoQ29kZSYgY29kZSkK
KyAgICB7CisgICAgICAgIG1fbGl2ZUF0SGVhZC5yZXNpemUoY29kZS5zaXplKCkpOworICAgICAg
ICBtX2xpdmVBdFRhaWwucmVzaXplKGNvZGUuc2l6ZSgpKTsKKworICAgICAgICBJbmRleFNldDxC
YXNpY0Jsb2NrPiBzZWVuOworCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAg
IHdoaWxlIChjaGFuZ2VkKSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisKKyAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSBjb2RlLnNpemUoKTsgYmxvY2tJbmRleC0t
OykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gY29kZS5hdChibG9ja0lu
ZGV4KTsKKyAgICAgICAgICAgICAgICBMb2NhbENhbGMgbG9jYWxDYWxjKCp0aGlzLCBibG9jayk7
CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsg
aW5zdEluZGV4LS07KQorICAgICAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9j
ay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAgICAgICAgYm9vbCBmaXJzdFRpbWUgPSBzZWVu
LmFkZChibG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFRpbWUgJiYgbG9jYWxDYWxj
LmxpdmUoKSA9PSBtX2xpdmVBdEhlYWRbYmxvY2tdKQorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBt
X2xpdmVBdEhlYWRbYmxvY2tdID0gbG9jYWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVh
ZChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVB
dEhlYWRbYmxvY2tdOworICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRU
YWlsKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2
ZUF0VGFpbFtibG9ja107CisgICAgfQorCisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBi
ZSBydW4gaW4gcmV2ZXJzZS4KKyAgICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgTG9jYWxDYWxjKExpdmVuZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisg
ICAgICAgICAgICA6IG1fbGl2ZShsaXZlbmVzcy0+bGl2ZUF0VGFpbChibG9jaykpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlKCkgY29u
c3QgeyByZXR1cm4gbV9saXZlOyB9CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+JiYgdGFrZUxpdmUo
KSB7IHJldHVybiBXVEY6Om1vdmUobV9saXZlKTsgfQorCisgICAgICAgIHZvaWQgZXhlY3V0ZShJ
bnN0JiBpbnN0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgZGVmJ3Mu
CisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAgICAgICAgICAgICAgIFt0aGlz
XSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
bGl2ZS5yZW1vdmUoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8g
TmV4dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAgICAgIGlmIChpbnN0Lmhh
c1NwZWNpYWwoKSkgeworICAgICAgICAgICAgICAgIGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCku
Zm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgW3RoaXNdIChSZWcgcmVnKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKFRoaW5nKHJlZykpOworICAgICAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxU
aGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9s
ZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBIYXNoU2V0PFRoaW5n
PiBtX2xpdmU7CisgICAgfTsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8QmFzaWNCbG9j
aywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
LCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRUYWlsOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMg
YXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IK
KyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorCisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9PiB1
c2Ugb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBv
ZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQg
ZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ug
b2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVn
aXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVy
IG9yIHZhbHVlCisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJl
Z2lzdGVyCisjIEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9PiBUcnVzdGVk
SW1tNjQKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKKyMg
SW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVzcworIwor
IyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVuZGVyc3Rh
bmRzIHRoYXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhpbmdz
LiBTbywgYWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0aW9uIHN0
eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJlIG1lYW5p
bmdmdWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKyMKKyMg
Rm9vNDIgVTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBhcnNlciB3
b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBVRDpG
CisjICAgICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28tZm9ybSBp
bnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQgdXNlcytk
ZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2
ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9B
c3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisK
K05vcAorCitBZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAg
IEltbSwgVG1wCisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpH
LCBEOkcKKyAgICBJbW0sIFRtcCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1w
CisgICAgSW1tLCBUbXAKKyAgICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFk
ZHIKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKwor
TXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworTW92ZSBVOkcs
IEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAgQWRk
ciwgVG1wIGFzIGxvYWQgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2Rl
LWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBUbXAsIEFkZHIgYXMgc3RvcmUK
KworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxv
YWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKworTW92ZTY0VG9Eb3VibGUg
VTpHLCBEOkYKKyAgICBUbXAsIFRtcAorCitNb3ZlRG91YmxlVG82NCBVOkYsIEQ6RworICAgIFRt
cCwgVG1wCisKK0JyYW5jaEFkZDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25k
LCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRy
CisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5j
aE11bDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAg
IFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNo
CisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0Nv
bmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIs
IFRtcAorCitCcmFuY2hOZWczMiBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcAor
CitKdW1wIC9icmFuY2gKKworUmV0CisKKyMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2aW9y
LiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3BlY2lh
bCBvcGVyYW5kLAorIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgorc3BlY2lhbCBQ
YXRjaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VT
Y29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clBoYXNlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworUGhhc2VTY29wZTo6UGhh
c2VTY29wZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9jb2RlKGNvZGUp
CisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2Uo
KSkgeworICAgICAgICBvdXQucHJpbnQoIkFpciBiZWZvcmUgIiwgbmFtZSwgIjoiKTsKKyAgICAg
ICAgb3V0LnByaW50KGNvZGUpOworICAgIH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQ
aGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJpbmcoY29kZSk7Cit9CisKK1Bo
YXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFj
aFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRh
dGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUGhhc2VTY29wZV9oCisjZGVmaW5lIEFpclBoYXNl
U2NvcGVfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworY2xhc3Mg
UGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJs
aWM6CisgICAgUGhhc2VTY29wZShDb2RlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNl
U2NvcGUoKTsgLy8gdGhpcyBzaG91bGQgZG8gdmFsaWRhdGlvbgorCitwcml2YXRlOgorICAgIENv
ZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBC
ZWZvcmU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBBaXJQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitTcGVjaWFsOjpTcGVjaWFsKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX25hbWUo
bmFtZSkKKyAgICAsIG1faW5kZXgoVUlOVF9NQVgpCit7Cit9CisKK1NwZWNpYWw6On5TcGVjaWFs
KCkKK3sKK30KKworQ1N0cmluZyBTcGVjaWFsOjpuYW1lKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQ
cmludFN0cmVhbSBvdXQ7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0
cmluZygpOworfQorCit2b2lkIFNwZWNpYWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCk7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICBp
ZiAobV9pbmRleCAhPSBVSU5UX01BWCkKKyAgICAgICAgb3V0LnByaW50KG1faW5kZXgpOworfQor
Cit2b2lkIFNwZWNpYWw6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCp0aGlzLCAiOiAiKTsKKyAgICBkZWVwRHVtcEltcGwob3V0KTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNwZWNpYWxfaAorCisjaW5jbHVkZSAiQWlySW5zdC5o
IgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBHZW5lcmF0aW9uQ29udGV4dDsKKworY2xhc3MgU3BlY2lhbCB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoU3BlY2lhbCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiJiI7CisgICAg
CisgICAgU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflNwZWNpYWwoKTsKKworICAgIENTdHJpbmcg
bmFtZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0
IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBpc1ZhbGlkKEluc3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNrKElu
c3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgPSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCBv
biBmb3IgZWFjaCBJbnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVyZSBp
cyBubyB3YXkgdG8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2VkIGZy
b20ganVzdCBvbmUgSW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywKKyAg
ICAvLyBpZiB5b3Ugd2FudCB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5lcmF0
ZSgpLCB0aGVuIHlvdSBoYXZlIHRvIGVpdGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVyYXRl
IEFpciB0aGF0IHN0YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5zdCwg
YW5kIHRoZW4gbWVyZ2UKKyAgICAvLyAgICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBwcm9i
YWJseSBub3QgZ3JlYXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0aGF0
CisgICAgLy8gICAgQWlyIGRpZG4ndCBkdXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVwbGlj
YXRpb24gZGlkbid0IGNhdXNlIGFueSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8gICAg
cmVnaXN0ZXIgYXNzaWdubWVudC4KKyAgICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNpYWwg
bWFpbnRhaW4gYSBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVjYXVz
ZSB0aGUgYW5hbHlzaXMKKyAgICAvLyAgICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlzIHBl
cmZvcm1lZCBqdXN0IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdheQor
ICAgIC8vICAgIGZvciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRvIGJl
IHJlYWxsb2NhdGVkLiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29uc3Vs
dCB0aGUgSGFzaE1hcC4KKyAgICAvLworICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVzZSAo
MSkgYW5kIGZpcmUgdXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisgICAg
Ly8KKyAgICAvLyBOb3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBvcnRV
c2VkUmVnaXN0ZXJzKCkgYmVpbmcgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8gYXMg
Z2VuZXJhdGUoKS4gSWYgd2UgY291bGQgcmVseSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1c3Qg
aGF2ZSBlYWNoIFNwZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBvZiBS
ZWdpc3RlclNldCdzIGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0IG9y
ZGVyIGluCisgICAgLy8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5jZSBp
cyB1bmxpa2VseSB0byBjaGFuZ2Ugc2luY2UgaXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBwZXJm
b3JtYW5jZSBvZiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJyZW50
bHksIHdlIGRvICgxKSBmb3IgQjMgc3RhY2ttYXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRV
c2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAgICB2
aXJ0dWFsIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwg
R2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0
JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpID0gMDsKKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qg
PSAwOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgY29uc3QgY2hh
ciogbV9uYW1lOworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3BlY2lh
bER1bXAgeworcHVibGljOgorICAgIERlZXBTcGVjaWFsRGltcChTcGVjaWFsKiBzcGVjaWFsKQor
ICAgICAgICA6IG1fc3BlY2lhbChzcGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NwZWNpYWwp
CisgICAgICAgICAgICBtX3NwZWNpYWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFNw
ZWNpYWwqIG1fc3BlY2lhbDsKK307CisKK0RlZXBTcGVjaWFsRHVtcCBkZWVwRHVtcChTcGVjaWFs
KiBzcGVjaWFsKQoreworICAgIHJldHVybiBEZWVwU3BlY2lhbER1bXAoc3BlY2lhbCk7Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclNwZWNpYWxf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGlu
Zy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGls
bEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorCisjaW5jbHVk
ZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFp
clBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNl
U2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxFdmVyeXRoaW5nIik7CisKKyAgICBJbnNlcnRp
b25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwg
YmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIAorICAgICAgICB9Cisg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyU3BpbGxFdmVyeXRoaW5nX2gKKyNkZWZpbmUgQWlyU3BpbGxF
dmVyeXRoaW5nX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRlc3RpbmcuIEl0
IGJlaGF2ZXMgbGlrZSBhIHJlZ2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2UgdGhhdCBpdAor
Ly8gZWxpbWluYXRlcyB0ZW1wb3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBhY2NvbXBsaXNo
ZXMgdGhpcyBieSBhbHdheXMgc3BpbGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmllcy4gVGhlIHJlc3Vs
dGluZyBjb2RlIGlzIGdvaW5nIHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMgcGhhc2UgaXMg
Z3JlYXQgaWYgeW91CisvLyB0aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRoZSByZWdpc3Rl
ciBhbGxvY2F0b3IuIFlvdSBjYW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhpcworLy8gcGhh
c2UgaW5zdGVhZCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8vIE5vdGUgdGhhdCBl
dmVuIHRob3VnaCB0aGlzIHBoYXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBvc3NpYmxlLCBp
dCdzIG5vdCBldmVuIHdyaXR0ZW4gaW4gYQorLy8gcGFydGljdWxhcmx5IGVmZmljaWVudCB3YXku
IFNvLCBkb24ndCBnZXQgYW55IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2UgdG8gcmVkdWNl
IGNvbXBpbGVyCisvLyBsYXRlbmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQsIHlvdSBzaG91
bGQgY29tZSB1cCB3aXRoIGEgY2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVzaW5nCisvLyB0
aGlzIHNpbGx5IHRoaW5nLgorCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclNwaWxsRXZlcnl0aGlu
Z19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3Qu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tT
bG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclN0YWNrU2xvdF9oCisjZGVm
aW5lIEFpclN0YWNrU2xvdF9oCisKKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgU3RhY2tTbG90dmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFj
a1Nsb3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4OyB9CisKKyAgICBTdGFja1Nsb3RWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAg
ICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2ln
bmVkIGluZGV4LCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV9ieXRlU2l6ZShi
eXRlU2l6ZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fdmFsdWUodmFs
dWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVu
c2lnbmVkIG1faW5kZXg7CisgICAgU3RhY2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFz
cyBEZWVwU3RhY2tTbG90RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoU3Rh
Y2tTbG90KiBzbG90KQorICAgICAgICA6IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICht
X3Nsb3QpCisgICAgICAgICAgICBtX3Nsb3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAg
IFN0YWNrU2xvdCogbV9zbG90OworfTsKKworRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoU3Rh
Y2tTbG90KiBzbG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3RhY2tT
bG90X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJUbXAu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2
b2lkIFRtcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMp
IHsKKyAgICAgICAgb3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGlmIChpc1JlZygpKSB7CisgICAgICAgIG91dC5wcmludChyZWcoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNHUFRtcCgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiJXRtcCIsIGdwVG1wSW5kZXgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBv
dXQucHJpbnQoIiVmdG1wIiwgZnBUbXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRt
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wX2gKKyNkZWZpbmUgQWlyVG1wX2gK
KworI2luY2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgYSByZWdpc3Rl
ci4gSXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBvciBGUFIuIEl0IGNhbiBhbHNv
CisvLyBiZSB1c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lzdGVyIChpLmUuIGEg
dGVtcG9yYXJ5KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1c2UKKy8vIGRlbGliZXJhdGVs
eSB0ZXJzZSBuYW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGlzIG5hbWUgYSBsb3Qu
CisKK2NsYXNzIFRtcCB7CitwdWJsaWM6CisgICAgVG1wKCkKKyAgICAgICAgOiBtX3ZhbHVlKDAp
CisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChSZWcgcmVnKQorICAgIHsKKyAgICAg
ICAgaWYgKHJlZykgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAg
ICAgIG1fdmFsdWUgPSBlbmNvZGVHUFIocmVnLmdwcigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJlZy5mcHIoKSk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgbV92YWx1ZSA9IDA7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1w
KGNvbnN0IEFyZyYpOworCisgICAgc3RhdGljIFRtcCBncFRtcEZvckluZGV4KHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUg
PSBlbmNvZGVHUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgc3RhdGljIFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAg
ICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChpbmRl
eCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBmb3JS
YXdWYWx1ZSh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX3ZhbHVlID0gaW5kZXg7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1
ZTsgfQorCisgICAgYm9vbCByYXdWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKwor
ICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1Ao
bV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRGUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUFIobV92YWx1ZSk7CisgICAg
fQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNv
ZGVkRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzR1BSKCkgfHwgaXNGUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcg
Z3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFIobV92YWx1ZSk7Cisg
ICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVj
b2RlRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAgcmV0
dXJuIGZwcigpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVu
c2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQ
VG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBJbmRleCgp
OworICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIGJvb2wgaXNBbGl2
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMg
aW50IGVuY29kZUZQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xIC0g
aW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFIoR1BSUmVnIGdwcikKKyAg
ICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUChncHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RS
ZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQUihGUFJSZWcgZnBy
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQKGZwciAtIE1hY3JvQXNzZW1ibGVyOjpm
aXJzdEZQUlJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAo
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGlj
IGludCBlbmNvZGVGUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBl
bmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4Owor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQKGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZSA+IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNv
ZGVkRlAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9B
c3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0Vu
Y29kZWRGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZh
bHVlKSAmJiB2YWx1ZSA+PSBlbmNvZGVkRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3Rl
cigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRH
UFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5j
b2RlZEZQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50
IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVu
Y29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxl
cjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQ
UihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KAorICAgICAgICAgICAgKGVuY29k
ZUZQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAg
ICAgICAgIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAg
c3RhdGljIHVuc2lnbmVkIGRlY29kZUdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc0VuY29kZWRHUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5j
b2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzRW5jb2RlZEZQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBS
KE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQor
CisgICAgLy8gMDogZW1wdHkgVG1wCisgICAgLy8gcG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1Ag
dGVtcHMuCisgICAgLy8gbmVnYXRpdmU6IEZQUnMgYW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50
IG1fdmFsdWU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBBaXJUbXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRt
cElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clRtcElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBJ
bmxpbmVzX2gKKyNkZWZpbmUgQWlyVG1wSW5saW5lc19oCisKKyNpbmNsdWRlICJBaXJBcmcuaCIK
KyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitpbmxpbmUgVG1wOjpUbXAoY29uc3QgQXJnJiBhcmcpCit7CisgICAg
KnRoaXMgPSBhcmcudG1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEFpclRtcElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTI1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorCisjaW5jbHVk
ZSAiQWlyQ29kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFZhbGlkYXRlciB7CitwdWJsaWM6CisgICAg
VmFsaWRhdGVyKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBC
ZWZvcmUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV93aGVuKHdoZW4pCisg
ICAgICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmlu
ZSBWQUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBm
YWlsKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwg
dG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisgICAgCisgICAgdm9p
ZCBydW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiB2YWxpZFNsb3RzOwor
ICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiB2YWxpZEJsb2NrczsKKyAgICAgICAgSGFzaFNl
dDxTcGVjaWFsKj4gdmFsaWRTcGVjaWFsczsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9jb2RlKQorICAgICAgICAgICAgdmFsaWRCbG9ja3MuYWRkKGJsb2NrKTsKKyAgICAg
ICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBtX2NvZGUuc3RhY2tTbG90cygpKQorICAgICAgICAg
ICAgdmFsaWRTbG90cy5hZGQoc2xvdCk7CisgICAgICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6
IG1fY29kZS5zcGVjaWFscygpKQorICAgICAgICAgICAgdmFsaWRTcGVjaWFscy5hZGQoc3BlY2lh
bCk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICAgICAgZm9yIChB
cmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5r
aW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbGlkU2xvdHMuY29udGFpbnMoYXJnLnN0YWNrU2xvdCgpKSwg
KCJBdCAiLCBpbnN0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsaWRTcGVjaWFscy5jb250YWlucyhhcmcuc3BlY2lhbCgpKSwgKCJBdCAiLCBpbnN0KSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBWQUxJREFURShpbnN0LmlzVmFsaWRGb3JtKCksICgiQXQgIiwgaW5zdCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29ycygpKQorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkQmxvY2tzLmNv
bnRhaW5zKHN1Y2Nlc3NvciksICgiQXQgIiwgKmJsb2NrKSk7CisgICAgICAgIH0KKyAgICB9CisK
K3ByaXZhdGU6CisgICAgdm9pZCBmYWlsKAorICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwg
aW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBjb25kaXRp
b24sCisgICAgICAgIENTdHJpbmcgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIENTdHJpbmcgZmFp
bHVyZU1lc3NhZ2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91
dDsKKyAgICAgICAgICAgIG91dC5wcmludCgiQUlSIFZBTElEQVRJT04gRkFJTFVSRVxuIik7Cisg
ICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVuYW1lLCAi
OiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIG1l
c3NhZ2UsICJcbiIpOworICAgICAgICAgICAgaWYgKG1fd2hlbikKKyAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIiAgICBEdXJpbmcgIiwgbV93aGVuLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1
cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgb3V0LnBy
aW50KGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAg
ICAgICAgb3V0LnByaW50KCJCZWZvcmUgIiwgd2hlbiwgIjpcbiIpOworICAgICAgICAgICAgb3V0
LnByaW50KG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KCJBdCB0
aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgb3V0LnByaW50KG1fY29kZSk7CisKKyAgICAg
ICAgb3V0LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9u
RmFpbHVyZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVuY3Rpb24sIGNvbmRpdGlvbik7CisgICAg
ICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBj
aGFyKiBtX2R1bXBCZWZvcmU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9p
ZCB2YWxpZGF0ZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1w
QmVmb3JlKQoreworICAgIFZhbGlkYXRlciB2YWxpZGF0ZXIoY29kZSwgd2hlbiwgZHVtcEJlZm9y
ZSk7CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlk
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclZhbGlkYXRlX2gKKyNkZWZp
bmUgQWlyVmFsaWRhdGVfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7
CisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYsIGNvbnN0IGNoYXIqIHdoZW4gPSBudWxscHRyLCBjb25z
dCBjaGFyKiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDgzNCBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKwor
Y2xhc3MgT3Bjb2RlCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpzcGVjaWFsLCA6b3ZlcmxvYWRz
CisgICAgYXR0cl9hY2Nlc3NvciA6YnJhbmNoCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBz
cGVjaWFsKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBzcGVjaWFs
CisgICAgICAgIEBicmFuY2ggPSBmYWxzZQorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAgICAg
ICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIG1h
c21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVuZAor
ZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAgZGVm
IGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAgIEB0
eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9yZWFk
ZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUsIGZv
cm1zKQorICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9IGZv
cm1zCisgICAgZW5kCitlbmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisg
ICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkKKyAg
ICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQKKwor
ICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAgICAg
ICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9PSBv
dGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAorICAg
IGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9PSAi
QWRkciIKKyAgICAgICAgICAgIFsiQWRkciIsICJTdGFja1Nsb3QiLCAiQ2FsbEFyZyJdCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAg
IGRlZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQK
KworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRl
ZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcworICAg
ICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAg
ICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRp
YWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1l
CisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRl
ZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5k
CisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAor
ICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3Jp
Z2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0o
b3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5n
ID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90
aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAg
ICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAg
ICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRl
ZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAg
ICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAg
ICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAg
IGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFt
ZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1i
ZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAg
ICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAg
ICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAg
ICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisg
ICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVO
dW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3
aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXC9dLworICAgICAgICAgICAg
cmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYp
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdp
bi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7
c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3Rf
bWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0
b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAg
IHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAg
dG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQp
fChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9r
ZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0g
InNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2Vu
KQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0
b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxl
TmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlk
eCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisg
ICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKwor
ICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAg
ICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQg
ZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBh
cnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5k
CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAg
ICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5n
CisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgor
ICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0
ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZh
bmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBy
b2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UK
KyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAg
cmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUg
KEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAg
cmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0g
dG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1t
NjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlzS2lu
ZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAg
ICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisgICAgICAgIGxvb3Ag
eworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAg
ICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBjb25zdW1lKCJzcGVj
aWFsIikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKwor
ICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bj
b2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAgICByZXN1bHRbb3Bj
b2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAg
ICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgb3Bj
b2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IE9wY29kZS5u
ZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVO
YW1lXSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgc2ln
bmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgaXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9v
cCB7CisgICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlw
ZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9
PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0b2tl
biA9PSAiLyIKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLyIpCisgICAgICAgICAgICAg
ICAgICAgIGNvbnN1bWUoImJyYW5jaCIpCisgICAgICAgICAgICAgICAgICAgIG9wY29kZS5icmFu
Y2ggPSB0cnVlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBpc0tp
bmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAg
ICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5h
bWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNw
ZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioi
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUg
PSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBh
cmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUu
bGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIklt
bTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhd
LnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVy
cm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9y
IGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5u
ZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3Mg
aXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5k
CisKKyAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAg
ICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5kCisKKyAg
ICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUs
IGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAg
ICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXco
SU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UK
KworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9Lmgi
LCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAi
Ly8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0g
ZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7
ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9o
IgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2Vu
ZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK2RlZiB3cml0ZUNQUChmaWxl
bmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmNwcCIsICJ3IikgeworICAgICAg
ICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkg
b3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisg
ICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiY29uZmlnLmhcIiIKKyAgICAg
ICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpciN7ZmlsZW5hbWV9LmhcIiIKKworICAgICAgICB5
aWVsZCBvdXRwCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8
CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9w
Y29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAu
cHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91
dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtl
eXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
ciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMg
ImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8v
IG5hbWVzcGFjZSBXVEYiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwK
KyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRw
LnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1
dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAg
ICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIK
KyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisg
ICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMg
IiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIK
K30KKworIyBGcm9tIGhlcmUgb24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVu
dGVkIGNvZGUsIHNpbmNlIHdlJ3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hl
ci4KKworZGVmIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29s
dW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGgg
PT0gMAorCisgICAgaWYgZmlsdGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKwor
ICAgIGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlz
ZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisg
ICAgICAgIHJldHVybgorICAgIGVuZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMu
ZWFjaCB7CisgICAgICAgIHwgZm9ybSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVt
bkluZGV4XS5uYW1lCisgICAgICAgIGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBz
W2tpbmRdIDw8IGZvcm0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0g
W2Zvcm1dCisgICAgICAgIGVuZAorICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBn
cm91cHMubGVuZ3RoID09IDEKKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMs
IGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAg
ICByZXR1cm4KKyAgICBlbmQKKworICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRl
cltjb2x1bW5JbmRleF19KSB7IgorICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtl
eSwgdmFsdWUgfAorICAgICAgICBvdXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5
ID09ICJJbW02NCIKKyAgICAgICAgS2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAg
ICAgfCBhcmdLaW5kIHwKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2lu
ZH06IgorICAgICAgICB9CisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBj
b2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZB
TFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6
IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYg
bWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKCN7aW5zdH0tPm9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAg
ICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIK
KyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmls
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2Rl
Lm92ZXJsb2Fkcy5zaXplICE9IDEpIG9yIHNwZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0
cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPmFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAg
ICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Zlcmxv
YWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAg
ICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0
OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5z
dE92ZXJsb2FkRm9ybShvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChv
dXRwLCBzcGVlZCwgaW5zdCkgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAg
ICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAg
ICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sj
e2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVy
ID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAg
ICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2Fk
LCBmb3JtCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVk
LCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAg
ICAgICBlbmQKKyAgICB9CitlbmQKKword3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91
dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAg
CisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4g
dHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7
XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBv
dXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSIKKwor
ICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRz
ICJ2b2lkIEluc3Q6OmZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0
cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsK
KyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwK
KyAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpH
UCk7IC8vIFRoaXMgaXMgYmFzaWNhbGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBt
b2RlbCBTcGVjaWFsIGFzIGFuIGltbWVkaWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFy
Z3NbMF0uc3BlY2lhbCgpLT5mb3JFYWNoQXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0Nh
bGxiYWNrPihmdW5jdG9yKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5z
aWduYXR1cmUuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXgg
fAorICAgICAgICAgICAgICAgIHJvbGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5y
b2xlCisgICAgICAgICAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9
ICJVc2UiCisgICAgICAgICAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9s
ZSA9ICJEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAg
IHJvbGUgPSAiVXNlRGVmIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwg
QXJnOjoje2FyZy50eXBlfVApOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQor
ICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPiIKKyAgICBvdXRwLnB1dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9y
bShPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMg
InsiCisgICAgb3V0cC5wdXRzICJBcmc6OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyld
ID0geyBhcmd1bWVudHMuLi4gfTsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIK
KyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAg
b3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKHNpemVvZi4uLihBcmd1bWVudHMpKSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNp
YWwKKyAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAg
fCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQu
c2lnbmF0dXJlLmxlbmd0aH06IgorICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2Mg
eyB8IGNvbHVtbkluZGV4IHwgImtpbmRzWyN7Y29sdW1uSW5kZXh9XSIgfQorICAgICAgICAgICAg
ICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBw
cm9jIHsKKyAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAg
c3BlY2lhbCA9IChub3QgZm9ybS5raW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLnNwZWNpYWwg
fSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oI3tzcGVjaWFs
fSk7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAs
IDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNr
KQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAg
ICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyAiCisg
ICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpciIKK30KKword3JpdGVDUFAoIk9wY29kZVV0aWxzIikgeworICAgIHwgb3V0
cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3RJbmxpbmVzLmhcIiIKKyAgICBv
dXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsi
CisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVmFsaWRGb3JtKCkiCisgICAgb3V0cC5wdXRz
ICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6c2FmZSwgInRoaXMiKSB7Cisg
ICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVj
aWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhcmdzLnNpemUoKSA8IDEpIgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJp
ZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4g
ZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVj
aWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRz
TW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxl
bmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAg
cm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZQorICAgICAgICAgICAgICAgIHR5
cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUKKyAgICAgICAgICAgICAgICBraW5k
ID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9u
IHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICMgV2Ug
YWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0byB2YWxp
ZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAgICAgICAgICAjIGtpbmQgaW1wbGllcyByb2xl
LiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBpcyB0aGUgdHlwZS4gQW5kIHdl
IG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gdmFsaWRhdGUgdGhlIHR5cGUgaWYgd2Ug
aGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIlRtcCIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tpbmRleH1dLnRtcCgpLmlzI3t0
eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZh
bHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAgICBp
ZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWlz
I3tvcGNvZGUubmFtZX1WYWxpZCh0aGlzKSkiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5w
dXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAi
Ym9vbCBJbnN0OjphZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCkiCisgICAgb3V0cC5wdXRz
ICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFs
dWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e29wY29kZS5uYW1lfToiCisKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKCFhcmdJbmRleCkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVy
biBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNw
ZWNpYWwoKS0+YWRtaXRzU3RhY2soKnRoaXMsIGFyZ0luc3QpKTsiCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICMgU3dpdGNoIG9uIHRoZSBhcmdJbmRleC4KKyAgICAgICAgICAgIG91dHAucHV0
cyAic3dpdGNoIChhcmdJbmRleCkgeyIKKworICAgICAgICAgICAgbnVtQXJncyA9IG9wY29kZS5v
dmVybG9hZHMubWFwIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAg
ICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICB9Lm1heAorICAgICAg
ICAgICAgCisgICAgICAgICAgICBudW1BcmdzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGFy
Z0luZGV4IHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3thcmdJbmRleH06Igor
CisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBhbGwgb2YgdGhlIGZvcm1zIG9mIGFsbCBvZiB0
aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywgb3IgZG9uJ3QsIGFkbWl0IGFuIGFkZHJlc3MKKyAgICAg
ICAgICAgICAgICAjIGF0IHRoaXMgaW5kZXguIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGEgdmVyeSBj
b21tb24gY2FzZS4KKyAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAg
bnVtTm8gPSAwCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAg
ICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgICAgIG92ZXJsb2Fk
LmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQorICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgdGVzdCBu
dW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3ZSBlbmQgdXAgd2l0aCBubyBmb3Jtcywgd2Ugd2FudAor
ICAgICAgICAgICAgICAgICMgdG8gc2F5IHRoYXQgQWRkcmVzcyBpcyBpbmFkbWlzc2libGUuCisg
ICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9
PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICMgTm93IGRvIHRoZSBm
dWxsIHRlc3QuCisKKyAgICAgICAgICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKG9w
Y29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKQorCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAic3dpdGNoIChhcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAg
ICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB8IG92ZXJsb2FkIHwKKworICAgICAgICAgICAgICAgICAgICAgICAgIyBBZ2FpbiwgY2hl
Y2sgaWYgYWxsIG9mIHRoZW0gZG8gd2hhdCB3ZSB3YW50LgorICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAg
ICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0u
a2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgIyBEb24ndCBl
bWl0IGFueXRoaW5nLCBqdXN0IGRyb3AgdG8gZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3
aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIg
aWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0
dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICMgVGhpcyBpcyBob3cgd2UgdGVzdCB0aGUgaHlwb3RoZXNpcyB0aGF0IGNoYW5n
aW5nIHRoaXMgYXJndW1lbnQgdG8gYW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFk
ZHJlc3MgeWllbGRzIGEgdmFsaWQgZm9ybS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBj
b2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbHVtbklu
ZGV4ID09IGFyZ0luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJn
OjpBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgpIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybXMgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5k
c1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICMgRHJvcCBkb3duLCBlbWl0IG5vIGNvZGUsIHNpbmNlIHdlIGNhbm5vdCBtYXRj
aC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIyBLZWVwIGdvaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0g
cHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMs
IDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBlbmQKKyAg
ICAgICAgCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMg
ImRlZmF1bHQ6IjsKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisg
ICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91
dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIEluc3Q6OmdlbmVyYXRlKENDYWxsSGVscGVycyYg
aml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkgY29uc3QiCisgICAgb3V0cC5wdXRzICJ7
IgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKGppdCk7IgorICAgIG91dHAucHV0cyAiVU5V
U0VEX1BBUkFNKGNvbnRleHQpOyIKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVscGVyczo6SnVtcCBy
ZXN1bHQ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6ZmFzdCwgInRoaXMiKSB7
CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5z
cGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNp
YWwoKS0+Z2VuZXJhdGUoKnRoaXMsIGppdCwgY29udGV4dCkpOyIKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgaWYgZm9ybS5hbHROYW1lCisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IGZv
cm0uYWx0TmFtZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUg
PSBvcGNvZGUubWFzbU5hbWUKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgaWYgb3Bjb2Rl
LmJyYW5jaAorICAgICAgICAgICAgICAgIG91dHAucHJpbnQgInJlc3VsdCA9ICIKKyAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wcmludCAiaml0LiN7bWV0aG9kTmFtZX0oIgorCisg
ICAgICAgICAgICBmb3JtLmtpbmRzLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAg
fCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgaWYgaW5kZXggIT0gMAorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnByaW50ICIsICIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICBjYXNlIGtpbmQubmFtZQorICAgICAgICAgICAgICAgIHdoZW4gIlRtcCIKKyAgICAg
ICAgICAgICAgICAgICAgaWYgb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS50eXBlID09ICJHIgor
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZ3ByKCki
CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHJpbnQgImFyZ3NbI3tpbmRleH1dLmZwcigpIgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICB3aGVuICJJbW0iCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
ImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTMyKCkiCisgICAgICAgICAgICAgICAgd2hlbiAi
SW1tNjQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFz
VHJ1c3RlZEltbTY0KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiQWRkciIKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCisgICAgICAg
ICAgICAgICAgd2hlbiAiSW5kZXgiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFy
Z3NbI3tpbmRleH1dLmFzQmFzZUluZGV4KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29u
ZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxh
dGlvbmFsQ29uZGl0aW9uKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZXN1bHRDb25kaXRp
b24oKSIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
b3V0cC5wdXRzICIpOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHJlc3Vs
dCk7IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgInJldHVybiByZXN1bHQ7IgorICAgIG91dHAu
cHV0cyAifSIKKworICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
ciIKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTEyMzkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUs
NyArMTA1LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
ICE9IGludmFsaWQoKTsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlz
U2V0KCk7IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNT
ZXQoKTsgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXggPT0gZGVsZXRlZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFs
bFJlZ3NJdGVyYWJsZSB7CisgICAgcHVibGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAgICAgICAg
ICAgZXhwbGljaXQgaXRlcmF0b3IoUmVnIHJlZykKKyAgICAgICAgICAgICAgICA6IG1fcmVnKHJl
ZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVnIG9wZXJh
dG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3JlZyA9IG1fcmVn
Lm5leHQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcmVnID09IG90aGVyLm1f
cmVnOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgUmVnIG1fcmVnOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJzdCgpKTsgfQorICAgICAg
ICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWcoKSk7IH0KKyAgICB9
OworCisgICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSBjb25zdCB7IHJldHVybiBBbGxS
ZWdzSXRlcmFibGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90IGludmFsaWQo
KSB7IHJldHVybiAweGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyU2V0LmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNywxMyBAQCBwdWJsaWM6
CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRCaXRzKCkp
CisgICAgICAgICAgICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7CisgICAgfQogICAg
IAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9CkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0
Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL1dURi93dGYvQml0VmVj
dG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyMCw3ICszMjAsNyBAQCBwdWJsaWM6IAogICAgIH07
CiAgICAgCiAgICAgU2V0Qml0c0l0ZXJhYmxlIHNldEJpdHMoKSBjb25zdCB7IHJldHVybiBTZXRC
aXRzSXRlcmFibGUoKnRoaXMpOyB9Ci0gICAgCisKIHByaXZhdGU6CiAgICAgc3RhdGljIHVuc2ln
bmVkIGJpdHNJblBvaW50ZXIoKQogICAgIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExh
bWJkYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBTY29wZWRMYW1iZGFfaAorI2RlZmluZSBTY29wZWRMYW1iZGFfaAor
CituYW1lc3BhY2UgV1RGIHsKKworLy8gWW91IGNhbiB1c2UgU2NvcGVkTGFtYmRhIHRvIGVmZmlj
aWVudGx5IHBhc3MgbGFtYmRhcyB3aXRob3V0IGFsbG9jYXRpbmcgbWVtb3J5IG9yIHJlcXVpcmlu
ZworLy8gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gb2YgdGhlIGNhbGxlZS4gVGhlIGNhbGxlZSBz
aG91bGQgYmUgZGVjbGFyZWQgYXM6CisvLworLy8gdm9pZCBmb28oY29uc3QgU2NvcGVkTGFtYmRh
PE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPiYpOworLy8KKy8vIFRoZSBjYWxsZXIganVzdCBkb2Vz
OgorLy8KKy8vIHZvaWQgZm9vKHNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGludCwgU3R1ZmYmKT4o
WyZdIChpbnQgeCwgU3R1ZmYmIHkpIC0+IE15VGhpbmdzKiB7IGJsYWggfSkpOworLy8KKy8vIE5v
dGUgdGhhdCB0aGlzIHJlbGllcyBvbiBmb28oKSBub3QgZXNjYXBpbmcgdGhlIGxhbWJkYS4gVGhl
IGxhbWJkYSBpcyBvbmx5IHZhbGlkIHdoaWxlIGZvbygpIGlzCisvLyBvbiB0aGUgc3RhY2sgLSBo
ZW5jZSB0aGUgbmFtZSBTY29wZWRMYW1iZGEuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
VHlwZT4gY2xhc3MgU2NvcGVkTGFtYmRhOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNjb3BlZExhbWJkYTxSZXN1bHRUeXBl
IChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgorICAgIFNjb3BlZExhbWJkYShSZXN1bHRU
eXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pID0gbnVsbHB0ciwgdm9p
ZCogYXJnID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2ltcGwoaW1wbCkKKyAgICAgICAgLCBtX2Fy
ZyhhcmcpCisgICAgeworICAgIH0KKyAgICAKKyAgICB+U2NvcGVkTGFtYmRhKCkKKyAgICB7Cisg
ICAgfQorCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1
bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsKG1fYXJnLCBzdGQ6OmZvcndhcmQ8
QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCitwcml2YXRlOgorICAgIFJl
c3VsdFR5cGUgKCppbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLikgbV9pbXBsOwor
ICAgIHZvaWQgKm1fYXJnOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0
eXBlbmFtZSBGdW5jdG9yPiBTY29wZWRMYW1iZGFGdW5jdG9yOwordGVtcGxhdGU8dHlwZW5hbWUg
UmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcywgdHlwZW5hbWUgRnVuY3Rvcj4K
K2NsYXNzIFNjb3BlZExhbWJkYUZ1bmN0b3I8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLiks
IEZ1bmN0b3I+IDogcHVibGljIFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVz
Li4uKT4geworcHVibGljOgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRMYW1iZGEoaW1wbEZ1bmN0aW9uLCB0aGlzKQorICAg
ICAgICAsIG1fZnVuY3RvcihmdW5jdG9yKQorICAgIHsKKyAgICB9CisKKyAgICBTY29wZWRMYW1i
ZGFGdW5jdG9yKEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IFNjb3BlZExhbWJkYShpbXBs
RnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkK
KyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5j
dGlvbih2b2lkKiBhcmd1bWVudCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1l
bnQpLT5tX2Z1bmN0b3IoCisgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4o
YXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRM
YW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIFNjb3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rp
b25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBTY29wZWRMYW1iZGFfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAx
OTEyMzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDYgKzc5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1
bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShm
dW5jdG9yKSkKKyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFy
Z3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzEx
NSwxMSBAQCBSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5j
dG9yPihmdW5jdG9yKSk7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVu
YW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRU
YXNrKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJl
ZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7
Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263746</attachid>
            <date>2015-10-21 15:17:45 -0700</date>
            <delta_ts>2015-10-21 18:26:05 -0700</delta_ts>
            <desc>and now, with a maximal spiller</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>334436</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRp
bHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jhc2ljQmxvY2s6OkJh
c2ljQmxvY2sodW5zaWduZWQgaW5kZXgpCisgICAgOiBtX2luZGV4KGluZGV4KQoreworfQorCitC
YXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5k
KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCit2b2lk
IEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIz
OjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVt
b3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRl
Y2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxh
Y2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBt
X2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1w
KHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7
CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxv
Y2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYg
VmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sq
LCAyPiBBZGphY2VuY3lMaXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNz
b3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICIjIjsKKworICAg
IH5CYXNpY0Jsb2NrKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KKworICAgIFZhbHVlTGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3Zh
bHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBt
X3ZhbHVlcy5lbmQoKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSog
YXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBW
YWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAg
ICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZh
bHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFs
dWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlz
dCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIHZvaWQgYXBwZW5kKFZhbHVl
Kik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4p
OworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgc3VjY2Vzc29y
cygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1
cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9w
cmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQWRqYWNl
bmN5TGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9
CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92
ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0
YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgpOwor
CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgQWRq
YWNlbmN5TGlzdCBtX3N1Y2Nlc3NvcnM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAg
eworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAg
ICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAg
ICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
b3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayog
bV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisj
ZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxv
Y2s6OmFwcGVuZE5ldyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKK3sKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihh
cmd1bWVudHMuLi4pOworICAgIGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3Vuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJl
dHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitC
YXNpY0Jsb2NrKiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgp
OworfQorCitCYXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4
KQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGlu
ZGV4KTsKK30KKworY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6
c3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVl
PigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gK
KworI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xp
c3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCBhZGRQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAg
QmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vz
c29ycygpOworCisgICAgaWYgKHByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNz
b3IpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2Nr
PgorYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayAq
cHJlZGVjZXNzb3IpCit7CisgICAgQmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNz
b3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAg
ICBwcmVkZWNlc3NvcnNbaS0tXSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBw
cmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIC8vIE91dCBvZiBjYXV0aW9uLCB3ZSBrZWVwIGdvaW5nIGV2ZW4gdGhvdWdoIHRo
ZSBwcmVkZWNlc3NvciBsaXN0IGNhbm5vdCBoYXZlCisgICAgICAgICAgICAvLyBkdXBsaWNhdGVz
LgorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jaywgQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQmFzaWNCbG9j
azo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBmcm9tKSB7CisgICAgICAgICAgICBwcmVk
ZWNlc3NvcnNbaV0gPSB0bzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyByZWNvbXB1dGVzIHByZWRlY2Vz
c29ycyBhbmQgcmVtb3ZlcyBibG9ja3MgdGhhdCBhcmVuJ3QgcmVhY2hhYmxlLgordGVtcGxhdGU8
dHlwZW5hbWUgQmFzaWNCbG9jaz4KK3ZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykKK3sKKyAgICAvLyBDbGVhciBhbGwgcHJl
ZGVjZXNzb3IgbGlzdHMgZmlyc3QuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nr
cykKKyAgICAgICAgYmxvY2stPnByZWRlY2Vzc29ycygpLnJlc2l6ZSgwKTsKKworICAgIEdyYXBo
Tm9kZVdvcmtsaXN0PEJhc2ljQm9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsK
KyAgICB3b3JrbGlzdC5ub2RlKGJsb2Nrc1swXSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJs
b2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICBpZiAod29ya2xpc3QuYWRk
KHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMoKS5h
cHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmxvY2tzW2ldLnByZWRl
Y2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICBibG9ja3NbaV0gPSBudWxscHRyOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxv
Y2tVdGlsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmts
aXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dv
cmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9o
CisjZGVmaW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIK
KyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8
QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBX
aGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3
aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFw
aE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3Qg
aXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJs
b2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4g
aWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0
aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhl
IGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVk
R3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsK
KwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFwaE5v
ZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBvc3RP
cmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4g
UG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM0Jsb2NrV29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNl
IHsKKwordW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCit7CisgICAgc3dpdGNoIChpbnN0
Lm9yaWdpbi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tT
dWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBDaGVj
azoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNv
ZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQorICAgIDogbV9jaGVja09wY29kZShvcGNvZGUp
CisgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQoreworfQorCitDaGVja1NwZWNpYWw6On5D
aGVja1NwZWNpYWwoKQoreworfQorCitJbnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNv
bnN0IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAgSW5zdCBoaWRkZW5CcmFuY2gobV9jaGVja09w
Y29kZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRlbkJyYW5jaC5hcmdzLnJlc2l6ZShtX251bUNo
ZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DaGVja0FyZ3M7IGktLTspCisg
ICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzW2ldID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICByZXR1
cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0
JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJh
Y2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmcoY2FsbGJhY2spOworICAg
IGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0
LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3Qp
Cit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlkKCkKKyAgICAgICAgJiYg
aXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOwor
fQorCitib29sIENoZWNrU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQg
YXJnSW5kZXgpCit7CisgICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9u
dW1DaGVja0FyZ3MpCisgICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3Rh
Y2soYXJnSW5kZXggLSAxKTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhp
bnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVs
cGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVy
cyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZmFpbCA9IGhpZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwor
ICAgIEFTU0VSVChmYWlsLmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmln
aW47CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZh
bHVlLT5vcGNvZGUoKSkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011
bCkKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlm
ICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmFyZ3NbMF0tPmlzSW50KDAp
KQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDApKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKGNvbnRleHQuY29kZSwg
aW5zdC5hcmdzWzJdKSk7CisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNv
ZGUsIGluc3QuYXJnc1sxXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3Rh
bnQoMSkpOworICAgIH0KKworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tB
cmdzICsgMSwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5k
KAorICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1
bmN0aW9uPigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25D
b250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgZmFpbC5saW5rKCZqaXQpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVl
LT5zdGFja21hcCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAg
ICAgICAgICAgICBTdGFja21hcDo6R2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgICAgICAg
ICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcGFyYW1zLnN0YWNr
bWFwID0gc3RhY2ttYXA7CisgICAgICAgICAgICAgICAgcGFyYW1zLnJlcHMgPSByZXBzOworICAg
ICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lz
dGVyczsKKworICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5tX2dlbmVyYXRvci0+cnVuKGppdCwg
cGFyYW1zKTsKKyAgICAgICAgICAgIH0pKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJ
bXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2hlY2tPcGNv
ZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpk
ZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkIz
OjpDaGVja1ZhbHVlIGxvd2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwgIiB3aXRoICIsIG1fbnVt
Q2hlY2tBcmdzLCAiIGFyZ3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tT
cGVjaWFsX2gKKworI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBT
cGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB3YW50
IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2Fu
dCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKKy8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVh
ZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFs
IHdpbGwgcmVtZW1iZXIKKy8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBh
bG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQK
Ky8vIHdpbGwgY3JlYXRlIGFuIEluc3Qgd2l0aCB0aGF0IG9wY29kZSBwbHVzIHRoZSBhcHByb3By
aWF0ZSBhcmdzIGZyb20gdGhlIG93bmluZyBJbnN0IHdoZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkg
b2YgdGhlIGNhbGxiYWNrcy4KKy8vCisvLyBOb3RlIHRoYXQgZm9yIENoZWNrQWRkLCBDaGVja1N1
YiwgYW5kIENoZWNrTXVsIHdlIGV4cGVjdCB0aGF0IHRoZSBCMyBhcmd1bWVudHMgYXJlIHRoZSBy
ZXZlcnNlCisvLyBvZiB0aGUgQWlyIGFyZ3VtZW50cyAoQWRkKGEsIGIpID0+IEFkZDMyIGIsIGEp
LiBFeGNlcHQ6CisvLyAtIENoZWNrU3ViKDAsIHgpLCB3aGljaCB0dXJucyBpbnRvIEJyYW5jaE5l
ZzMyIHguCisvLyAtIENoZWNrTXVsKGEsIGIpLCB3aGljaCB0dXJucyBpbnRvIE11bDMyIGIsIGEg
YnV0IHdlIHBhc3MgQW55IGZvciBhJ3MgVmFsdWVSZXAuCisKK2NsYXNzIENoZWNrU3BlY2lhbCA6
IHB1YmxpYyBTdGFja21hcFNwZWNpYWwgeworcHVibGljOgorICAgIENoZWNrU3BlY2lhbChBaXI6
Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsK
KworICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRo
ZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAgIEluc3QgaGlkZGVuQnJhbmNoKGNvbnN0
IEluc3QmKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Oklu
c3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wg
YWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisg
ICAgLy8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4g
YnJhbmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRl
cyB0aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVsZXBycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1f
bnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM0NoZWNrU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitDaGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0
YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gK
KworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENo
ZWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgor
ICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBj
YXNlIENoZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tW
YWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNr
QWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4s
IGxlZnQsIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAg
ICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NF
UlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0g
Q2hlY2tNdWwpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAg
IENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2sp
OworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjND
aGVja1ZhbHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29t
bW9uLmgiCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgor
I2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2Jvb2wgc2hvdWxkRHVtcElSKCkKK3sKKyAgICByZXR1cm4gRlRMOjp2ZXJib3NlQ29tcGlsYXRp
b25FbmFibGVkKCkgfHwgRlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBzaG91bGREdW1w
SVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkKK3sK
KyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBz
aG91bGRWYWxpZGF0ZUlSKCkKK3sKKyAgICByZXR1cm4gREZHOjp2YWxpZGF0aW9uRW5hYmxlZCgp
IHx8IHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlk
YXRlSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhB
dEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkKK3sKKyAg
ICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZVZhbGlkYXRpb25GYWlsdXJlKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVmaW5lIEIzQ29tbW9u
X2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVtcElS
KCk7Citib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFZhbGlkYXRl
SVIoKTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFNh
dmVJUkJlZm9yZVBoYXNlKCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNDb21tb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJp
c29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFuZChM
b2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChh
ZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8x
ID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0g
RXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5k
KGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCBy
aWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1
YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29u
c3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFs
dWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZh
bHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Q29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVl
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFs
dWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3Qz
MlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2
NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRp
YyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7
IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0
LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91Ymxl
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91Ymxl
VmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVl
OjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVs
ZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUg
QjNDb25zdERvdWJsZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkg
eyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91Ymxl
VmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2
YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2lu
KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3Vi
bGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwor
dm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1
Y2Nlc3NvcnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJh
c2ljQmxvY2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5j
aDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlz
IGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1
ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xWYWx1
ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworCisg
ICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0
IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAg
IEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vz
c29yc1tpXTsgfQorCisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0
IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1
YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRy
b2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBv
cGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAv
LyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3Vj
Y2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1
bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQp
CisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAg
Ly8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQp
OworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVl
KAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBu
bykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9z
dWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsK
KyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29u
dHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisjZGVmaW5lIEIzSW5kZXhN
YXBfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIG1h
cCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9y
IEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBk
b24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNhbiBoYXZl
IHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5kZXhNYXAg
eworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkKKyAgICB7
CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2l6
ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAg
ICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBWYWx1ZSYg
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBt
X3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUg
YW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9u
bHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkg
b2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRp
Y2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNl
dCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJh
c2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVibGlj
OgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAg
fQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1f
c2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4
U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAg
ICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBj
b2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAg
ICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIu
bV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAg
ICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7Cisg
ICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0
aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZv
ciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJl
KTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52
YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0
aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxl
Y3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJh
YmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRW
ZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRl
cm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisKKyMgVGhlc2UgcnVs
ZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0aGUgdG9wLiBJdCdz
IGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxl
LgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hlciBpcyBhbiBleGNl
bGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9IExvYWQoYWRkcmVz
cykKKworIyBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRoZXNlIGZvcm1zLgorQWRkTG9hZDEgPSBB
ZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUpCitBZGRMb2FkMiA9IEFkZCh2YWx1ZSwgTG9hZChhZGRy
ZXNzKSkKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkMSA9IFN0b3JlKEFk
ZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZUFkZExvYWQyID0gU3RvcmUo
QWRkKHZhbHVlLCBMb2FkKGFkZHJlc3MpKSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0b3Jl
KEFuZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZhbHVl
LCBhZGRyZXNzKQorCitSZXR1cm4gPSBSZXR1cm4odmFsdWUpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgp
Cit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIm9mZnNldCA9ICIs
IG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZpbmUgQjNNZW1vcnlWYWx1ZV9oCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBj
YXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkRmxv
YXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNh
c2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0b3Jl
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUoKTsK
KworICAgIGludHB0cl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUg
TG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVy
bmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2Rl
LCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAg
ICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAg
ICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBl
ID09IERvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0
b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVG
bG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gVm9pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUg
dGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnRwdHJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBM
b2FkRmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOFo6Cisg
ICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAg
ICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4K
KyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGlu
dHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
eworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEIzTWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIG91dC5wcmludCgi
SWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRQorICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNvZGVfaAorCisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51
bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1
c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAg
ICAKKyAgICAvLyBQb2x5bW9ycGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5
cGUuCisgICAgSWRlbnRpdHksCisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUgQ29uc3RWYWx1
ZSogY2xhc3Nlcy4gQ29uc3RhbnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3csIHNvIHRoYXQg
d2UgY2FuCisgICAgLy8gcmVhc29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0aGVt
LiBMYXJnZSBjb25zdGFudHMgYXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgQ29uc3QzMiwK
KyAgICBDb25zdDY0LAorICAgIENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1hZ2ljYWwgc3Rh
Y2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHBy
b2dyYW0gcmVnYXJkbGVzcyBvZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0
IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBkaXNqb2ludCBy
YW5nZSBvZgorICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFz
cy4KKyAgICBTdGFja1Nsb3QsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdpc3Rl
ci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0K
KyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LCBh
bmQgdGhlIGNvbXBpbGVyIHRha2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBkb24n
dCBjbG9iYmVyIHRoZSB2YWx1ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNhbGxzIChlaXRo
ZXIgYnkgc2F2aW5nIHRoZSBhcmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBvciBwcmVzZXJ2
aW5nIGl0IGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVnVmFs
dWUgY2xhc3MuIFRoZSByZXR1cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2ludGVyKCkgKGZv
ciBHUFJzKSBvciBEb3VibGUgKGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywKKworICAgIC8v
IFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRyb2wg
ZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRlciwg
d2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50ZXIg
dGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBvaW50
ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91bGQq
IGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAgIEZy
YW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFueSB2
YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKworICAg
IC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIsIGJl
aGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0T3Is
CisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisKKyAgICAvLyBD
YXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBTRXh0
OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6Cisg
ICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3VibGU6
CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgorICAg
IElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERUb0kz
MiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFs
dWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8vIGlz
IGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVzc1Ro
YW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVhbCwK
KworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgorICAg
IEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwKKyAgICBCZWxvd0VxdWFsLAorCisg
ICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUg
bG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4g
SW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAorICAgIExvYWQx
NlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisgICAgLy8g
VGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExvYWQsCisKKyAg
ICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3Rv
cmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2
YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91
YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGlj
IHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAgICAv
LyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBz
eXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFy
Z3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKwor
ICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFz
cy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9u
bHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJh
Y2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNr
bWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQg
bXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFj
a21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVl
c3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJv
bSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3Rh
Y2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVj
a1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJh
dGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNv
ZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8g
ZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0
IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJlIG5vdCBhbGxv
d2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91ciBzbG93IHBh
dGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1
dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhh
cHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6Cisg
ICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hlY2tBZGQoeCwg
eSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAg
ICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVudGl0eShhKQor
ICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFja3Mg
dXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAv
LyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRo
ZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFmdGVyIHRoZSBm
aXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2
ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25k
IENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0FkZCwKKyAgICBD
aGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lkZS1leGl0cy4g
VXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlz
IGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoaXMg
dGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisgICAg
Ly8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVl
IHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0aC4KKyAgICBD
aGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAg
ICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQaGks
CisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgSnVtcCwK
KyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0
eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBDb250
cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVl
IHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIg
ZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBT
d2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0IGtu
b3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFueQorICAgIC8v
IHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisKKyAgICAv
LyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdl
dCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcworfTsKKworaW5s
aW5lIGJvb2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Jp
Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M09yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBPcmln
aW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9yaWdp
bigiLCBSYXdQb2ludGVyKG1fZGF0YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKworI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Ly8gV2hvZXZlciBnZW5lcmF0ZXMgQjNJUiBjYW4gY2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZh
bHVlcy4gV2hlbiB5b3UgZG8gdGhpcywgQjMgd2lsbCBiZSBhYmxlIHRvCisvLyBhY2NvdW50LCBk
b3duIHRvIHRoZSBtYWNoaW5lIGNvZGUsIHdoaWNoIGluc3RydWN0aW9uIGNvcnJlc3BvbmRzIHRv
IHdoaWNoIG9yaWdpbi4gQjMKKy8vIHRyYW5zZm9ybWF0aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdp
bnMgY2FyZWZ1bGx5LiBJdCdzIGFuIGVycm9yIHRvIHdyaXRlIGEgdHJhbnNmb3JtYXRpb24gdGhh
dAorLy8gZWl0aGVyIGRyb3BzIE9yaWdpbnMgb3IgbGllcyBhYm91dCB0aGVtLgorY2xhc3MgT3Jp
Z2luIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9IG51
bGxwdHIpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIGNvbnN0
IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCB2b2lkKiBtX2Rh
dGE7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzT3JpZ2lu
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hw
b2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJp
bnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGF0Y2hwb2ludFZh
bHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21h
cCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZpbmUg
QjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
U3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBh
dGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
YWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsgfQor
CisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFBhdGNocG9p
bnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBB
ZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hwb2lu
dCwgdHlwZSwgb3JpZ2luLCBjaGlsZHJlbikKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sKK30K
KworUHJvY2VkdXJlOjp+UHJvY2VkdXJlKCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJl
OjphZGRCbG9jaygpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrID0g
c3RkOjptYWtlX3VuaXF1ZTxCYXNpY0Jsb2NrPihtX2Jsb2Nrcy5zaXplKCkpOworICAgIEJhc2lj
QmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1v
dmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVyZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gKKyNkZWZp
bmUgQjNQcm9jZWR1cmVfaAorCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFz
aWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisKKyAgICBQcm9jZWR1cmUoKTsKKyAgICB+UHJvY2VkdXJlKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiBhZGRCbG9jaygpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4u
Lik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2Nr
KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9Cisg
ICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAg
ICBpdGVyYXRvcigpOgorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAg
ICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDog
bV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+
YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4g
aW5leDsKKyAgICAgICAgfQorCisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAg
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgY2xhc3Mg
VmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xsZWN0aW9u
KFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1
cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgICAgICA6
IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3IqKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmJsb2Nr
KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAg
ICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6
ZSgpKTsgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nl
ZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF07IH0KKyAgICAgICAg
VmFsdWUqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBQcm9jZWR1cmUmIG1fcHJvY2Vk
dXJlOworICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIFZh
bHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxWYWx1ZT4+IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzUHJvY2VkdXJlSW5saW5lc19oCisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFy
Z3VlbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2
YWx1ZShuZXcgVmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7CisgICAg
VmFsdWVUeXBlKiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoV1RG
Ojptb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0YWNrU2xvdEtp
bmQuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsK
KwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2Vk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoK
KyAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5k
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RL
aW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCisj
ZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitlbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tl
ZCBzdGFjayBzbG90IG5lZWRzIHRvIGJlIGtlZXAgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJl
Y2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBv
YnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBv
ZiBhIHN0YWNrCisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFj
ayBzbG90cyBjb3VsZCBzaGFyZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRl
ZCB0aGF0IHRoZXkgYXJlbid0IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29t
cGlsZXIgc3RpbGwgaGFzIHRvIGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJl
IGVzY2FwZWQKKyAgICAvLyBleHBsaWNpdGx5IGluIElSLgorICAgIEFub255bW91cworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmlu
dFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3Rh
Y2tTbG90S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNTdGFja1Ns
b3RLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwor
dm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1f
a2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1
ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTdGFja1Nsb3RWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tT
bG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9i
eXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRp
b24uIFlvdSBjYW5ub3QgcmVseSBvbiBpdCBoYXZpbmcgYSBtZWFuaW5nZnVsCisgICAgLy8gdmFs
dWUgd2hpbGUgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJv
bUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tTbG90VmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5k
IGtpbmQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFN0YWNrU2xvdCwgcG9pbnRlcigpLCBvcmln
aW4pCisgICAgICAgICwgbV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAgICAgICAgLCBtX2tpbmQoa2lu
ZCkKKyAgICAgICAgLCBtX29mZnNldEZyb21GUCgwKQorICAgIHsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBtX2J5dGVTaXplOworICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOworICAgIGludHB0cl90
IG1fb2Zmc2V0RnJvbUZQOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit2b2lkIFN0YWNrbWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KAorICAgICAgICAie29wYXF1ZSA9ICIsIFJhd1BvaW50ZXIobV9vcGFxdWUpLCAi
LCByZXBzID0gIiwgbGlzdER1bXAobV9yZXBzKSwKKyAgICAgICAgIiwgZ2VuZXJhdG9yID0gIiwg
UmF3UG9pbnRlcihtX2dlbmVyYXRvci5nZXQoKSksICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJl
cmVkLAorICAgICAgICAiLCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAifSIp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tt
YXBfaAorI2RlZmluZSBCM1N0YWNrbWFwX2gKKworI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKyNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1
ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBDaGVja1NwZWNpYWw7CitjbGFzcyBTdGFja21hcFNwZWNpYWw7CitjbGFzcyBWYWx1
ZTsKKworY2xhc3MgU3RhY2ttYXAgeworcHVibGljOgorICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFy
YW1zIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgVmFsdWUgY29udGFpbmluZyB0aGUgc3RhY2tt
YXAuCisgICAgICAgIFZhbHVlKiB2YWx1ZTsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGFj
a21hcC4KKyAgICAgICAgU3RhY2ttYXAqIHN0YWNrbWFwOworCisgICAgICAgIC8vIFRoaXMgdGVs
bHMgeW91IHRoZSBhY3R1YWwgdmFsdWUgcmVwcmVzZW50YXRpb25zIHRoYXQgd2VyZSBjaG9zZW4u
CisgICAgICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKKworICAgICAgICAvLyBUaGlzIHRlbGxz
IHlvdSB0aGUgcmVnaXN0ZXJzIHRoYXQgd2VyZSB1c2VkLgorICAgICAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzOworICAgIH07CisgICAgCisgICAgdHlwZWRlZiB2b2lkIEdlbmVyYXRvckZ1
bmN0aW9uKENDYWxsSGVscGVycyYsIGNvbnN0IEdlbmVyYXRpb25QYXJhbXMmKTsKKyAgICB0eXBl
ZGVmIFNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+IEdlbmVyYXRvcjsKKyAgICAKKyAgICBT
dGFja21hcCgpCisgICAgeworICAgIH0KKworICAgIC8vIFNldCBzb21lIG9wYXF1ZSBkYXRhIHRv
IGlkZW50aWZ5IHRoaXMgc3RhY2ttYXAuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgYSBTdGFja21h
cC11c2luZyBWYWx1ZQorICAgIC8vIGNhbiBiZSBkdXBsaWNhdGVkLCBhbmQgZWFjaCBkdXBsaWNh
dGUgbWF5IGVuZCB1cCBoYXZpbmcgZGlmZmVyZW50IHJlZ2lzdGVyIGFsbG9jYXRpb24uIFRoaXMK
KyAgICAvLyBhbGxvd3MgYWxsIG9mIHRob3NlIGR1cGxpY2F0ZXMgdG8gYmUgYWJsZSB0byByZWZl
ciBiYWNrIHRvIHdoYXRldmVyIGhpZ2gtbGV2ZWwgZGF0YSBzdHJ1Y3R1cmVzCisgICAgLy8gd2Ug
d2VyZSB1c2luZyB0byBjcmVhdGUgdGhlIHZhbHVlLgorICAgIHZvaWQgc2V0T3BhcXVlKHZvaWQq
IHBhcmFtZXRlcikKKyAgICB7CisgICAgICAgIG1fb3BhcXVlID0gcGFyYW1ldGVyOworICAgIH0K
KyAgICB2b2lkKiBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQorCisgICAgLy8g
Q29udmVuaWVuY2UgaGVscGVycyB3aGVuIHVzaW5nIGluZGljZXMgaW5zdGVhZCBvZiBwb2ludGVy
cy4KKyAgICB2b2lkIHNldE9wYXF1ZUluZGV4KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAg
IHNldE9wYXF1ZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KGluZGV4KSk7CisgICAgfQorICAgIHNpemVf
dCBvcGFxdWVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxzaXplX3Q+KG9wYXF1
ZSgpKTsgfQorCisgICAgLy8gQ29uc3RyYWluIGFuIGFyZ3VtZW50IHRvIHRoZSBWYWx1ZSB0aGF0
IHVzZXMgdGhpcyBTdGFja21hcC4gTm90ZSB0aGF0IGluZGV4IHplcm8gcmVmZXJzIHRvIHRoZQor
ICAgIC8vIGZpcnN0IGFyZ3VtZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVu
dCBpcyBub3QgY29uc3RyYWluYWJsZS4gRm9yIGV4YW1wbGUsIGluIGEKKyAgICAvLyBDaGVja0Fk
ZCB2YWx1ZSwgaXQgd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQg
MS4gSW4gYSBDaGVjayB2YWx1ZSwgaXQgd291bGQKKyAgICAvLyBiZSBhbiBlcnJvciB0byBjb25z
dHJhaW4gaW5kZXggMC4gQnV0LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxl
ZCwgeW91IGNhbiBkZXBlbmQKKyAgICAvLyBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBi
ZWluZyBmaWxsZWQgaW4uCisgICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0
IFZhbHVlUmVwJiByZXApCisgICAgeworICAgICAgICBpZiAoaW5kZXggKyAxIDwgbV9yZXBzLnNp
emUoKSkKKyAgICAgICAgICAgIG1fcmVwcy5ncm93KGluZGV4ICsgMSk7CisgICAgICAgIG1fcmVw
c1tpbmRleF0gPSByZXA7CisgICAgfQorCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0IFJlZ2lzdGVy
U2V0JiBzZXQpCisgICAgeworICAgICAgICBtX2Nsb2JiZXJlZC5tZXJnZShzZXQpOworICAgIH0K
KworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Ns
b2JiZXJlZDsgfQorCisgICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVh
dGVTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIENoZWNrU3BlY2lhbDsKKyAgICBmcmllbmQgY2xhc3MgU3RhY2ttYXBTcGVjaWFsOwor
ICAgIAorICAgIHZvaWQqIG1fb3BhcXVlIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxWYWx1ZVJl
cD4gbV9yZXBzOworICAgIFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIFJlZ2lz
dGVyU2V0IG1fY2xvYmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsgLy8g
U3RhY2ttYXBzIGNvdWxkIGJlIGZ1cnRoZXIgZHVwbGljYXRlZCBieSBBaXIsIGJ1dCB0aGF0J3Mg
dW5saWtlbHksIHNvIHdlIGp1c3QgbWVyZ2UgdGhlIHVzZWQgcmVnaXN0ZXJzIHNldHMgaWYgdGhh
dCB3ZXJlIHRvIGhhcHBlbi4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNTdGFja21hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCitTdGFj
a21hcFNwZWNpYWw6OlN0YWNrbWFwU3BlY2lhbChjb25zdCBjaGFyKiBuYW1lKQorICAgIDogU3Bl
Y2lhbChuYW1lKQoreworfQorCitTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwoKQor
eworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25z
dCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAg
cmV0dXJuIGZvckVhY2hBcmdJbXBsKDAsIDEsIGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9vbCBT
dGFja21hcFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNWYWxp
ZEltcGwoMCwgMSwgaW5zdCk7Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFj
ayhJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICByZXR1cm4gYWRtaXRzU3Rh
Y2soMCwgMSwgaW5zdCwgYXJnSW5kZXgpOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6cmVw
b3J0VXNlZFJlZ2lzdGVycyhJbnN0JiBpbnN0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCog
c3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgSW5z
dCB0aGF0IHVzZXMgdGhlIFN0YWNrbWFwU3BlY2lhbCBnZXRzIGR1cGxpY2F0ZWQsIHRoZW4gd2Ug
ZW5kIHVwIG1lcmdpbmcgdXNlZAorICAgIC8vIHJlZ2lzdGVyIHNldHMgZnJvbSBtdWx0aXBsZSBw
bGFjZXMuIFRoaXMgY3VycmVudGx5IHdvbid0IGhhcHBlbiBzaW5jZSBBaXIgZG9lc24ndCBoYXZl
IHRhaWxkdXAKKyAgICAvLyBvciB0aGluZ3MgbGlrZSB0aGF0LiBCdXQgbWF5YmUgZXZlbnR1YWxs
eSBpdCBjb3VsZCBiZSBhIHByb2JsZW0uCisgICAgc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVycy5t
ZXJnZSh1c2VkUmVnaXN0ZXJzKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3Bl
Y2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVl
ID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFw
KCk7CisKKyAgICByZXR1cm4gc3RhY2ttYXAtPmNsb2JiZXJlZCgpOworfQorCit2b2lkIFN0YWNr
bWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJn
cywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2Nv
cGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdz
IGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUln
bm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuLnNpemUoKSA+PSBudW1J
Z25vcmVkQjNBcmdzKTsKKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRB
aXJBcmdzID09IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKTsKKyAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUln
bm9yZWRCM0FyZ3M7ICsraSkgeworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpICsgbnVt
SWdub3JlZEIzQXJnc107CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsg
bnVtSWdub3JlZEFpckFyZ3MpOworCisgICAgICAgIGNhbGxiYWNrKGFyZywgQXJnOjpVc2UsIEFy
Zzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSk7CisgICAgfQorfQorCitib29sIFN0YWNr
bWFwU3BlY2lhbDo6aXNWYWxpZEltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywg
dW5zaWduZWQgbnVtSWdub3JlZEFyZ0FyZ3MsCisgICAgSW5zdCYgaW5zdCkKK3sKKyAgICBWYWx1
ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5n
cyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1J
Z25vcmVkQWlyQXJncyk7CisgICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgPj0gbnVt
SWdub3JlZEIzQXJncyk7CisKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2tt
YXAoKTsKKworICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAvLyBGb3IgdGhlIEluc3QgdG8g
YmUgdmFsaWQsIGl0IG5lZWRzIHRvIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMu
CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2YWx1ZS0+
Y2hpbGRyZW4uc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gUmVnYXJkbGVzcyBvZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29t
ZSBiYXNpYyByZXF1aXJlbWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4gRm9yCisgICAgLy8gZXhh
bXBsZSwgeW91IGNhbid0IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZp
ZXMgdGhvc2UgY29uZGl0aW9ucyBhcyB3ZWxsIGFzIHRoZQorICAgIC8vIGFyZ3VtZW50IHR5cGVz
LgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdu
b3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChp
ICsgbnVtSWdub3JlZEIzQXJncyk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBu
dW1JZ25vcmVkQWlyQXJnc107CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkp
IHsKKyAgICAgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgY2FzZSBBcmc6OkltbToKKyAgICAg
ICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgIGNh
c2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgYnJlYWs7IC8vIE9LCisgICAgICAgIGNhc2Ug
QXJnOjpBZGRyOgorICAgICAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyKSAmJgorICAgICAgICAgICAgICAgIGFyZy5iYXNlKCkgIT0gVG1wKE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFyZzo6VHlw
ZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpOworCisgICAgICAgIGlm
ICghYXJnLmlzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICAvLyBUaGUgbnVtYmVyIG9mIGNvbnN0cmFpbnRzIGhhcyB0byBiZSBubyBncmVhdGVyIHRo
YW4gdGhlIG51bWJlciBvZiBCMyBjaGlsZHJlbi4KKyAgICBBU1NFUlQoc3RhY2ttYXAtPm1fcmVw
cy5zaXplKCkgPD0gdmFsdWUtPmNoaWxkcmVuLnNpemUoKSk7CisKKyAgICAvLyBWZXJpZnkgYW55
IGV4cGxpY2l0bHkgc3VwcGxpZWQgY29uc3RyYWludHMuCisgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtSWdub3JlZEIzQXJnczsgaSA8IHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAgICAgICBWYWx1ZVJlcCYg
cmVwID0gc3RhY2ttYXAtPm1fcmVwc1tpXTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3Nb
aSAtIG51bUlnbm9yZWRCM0FyZ3MgKyBudW1JZ25vcmVkQWlyQXJnc107CisKKyAgICAgICAgc3dp
dGNoIChyZXAua2luZCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAg
ICAgIC8vIFdlIGFscmVhZHkgdmVyaWZpZWQgdGhpcyBhYm92ZS4KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAo
IWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAgIGlm
IChhcmcgIT0gVG1wKHJlcC5yZWcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAg
ICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnICE9IEFy
Zzo6Y2FsbEFyZyhyZXAub2Zmc2V0RnJvbVNQKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFu
dDoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50YXRp
b24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RhY2tt
YXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJn
cywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgdW5zaWduZWQg
YXJnSW5kZXgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2tt
YXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICB1bnNpZ25lZCBzdGFja21h
cEFyZ0luZGV4ID0gYXJnSW5kZXggLSBudW1JZ25vcmVkQWlyQXJncyArIG51bUlnbm9yZWRCM0Fy
Z3M7CisKKyAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSBzdGFja21hcC0+bV9yZXBzLnNpemUo
KSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNvbnN0cmFpbnQu
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBvbmx5IGFkbWl0
IHN0YWNrIGZvciBBbnkncywgc2luY2UgU3RhY2sgaXMgbm90IGEgdmFsaWQgaW5wdXQgY29uc3Ry
YWludCwgYW5kIFN0YWNrQXJndW1lbnQKKyAgICAvLyB0cmFuc2xhdGVzIHRvIGEgQ2FsbEFyZyBp
biBBaXIuCisgICAgaWYgKHN0YWNrbWFwLT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRleF0ua2luZCgp
ID09IEFueSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K1ZlY3RvcjxWYWx1ZVJlcD4gU3RhY2ttYXBTcGVjaWFsOjpyZXBzKEdlbmVyYXRpb25Db250ZXh0
JiBjb250ZXh0LCBJbnN0JiBpbnN0KQoreworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVzdWx0Owor
ICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIDEsIGluc3QsIHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKAorICAg
IEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgSW5z
dCYgaW5zdCwgVmVjdG9yPFZhbHVlUmVwPiYgcmVzdWx0KQoreworICAgIGZvciAodW5zaWduZWQg
aSA9IG51bUlnbm9yZWRBcmdzOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNvZGUsIGFyZykpOworICAgICAgICBBcmcm
IGFyZyA9IGluc3QuYXJnc1tpXTsKKyAgICB9Cit9CisKK1ZhbHVlUmVwIFN0YWNrbWFwU3BlY2lh
bDo6cmVwRm9yQXJnKENvZGUmIGNvZGUsIGNvbnN0IEFyZyYgYXJnKQoreworICAgIHN3aXRjaCAo
YXJnLmtpbmQoKSkgeworICAgIGNhc2UgVG1wOgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnJl
ZyhhcmcucmVnKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEltbToKKyAgICBjYXNlIElt
bTY0OgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OmNvbnN0YW50KGFyZy52YWx1ZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBZGRyOgorICAgICAgICBpZiAoYXJnLmJhc2UoKSA9PSBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6
c3RhY2soYXJnLm9mZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKGFyZy5iYXNlKCkgPT0gTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVw
OjpzdGFjayhhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lT2Zmc2V0KTsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKCk7
CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwU3BlY2lhbF9oCisjZGVmaW5lIEIzU3RhY2tt
YXBTcGVjaWFsX2gKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1N0YWNr
bWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEg
YmFzZSBjbGFzcyBmb3Igc3BlY2lhbHMgdGhhdCBoYXZlIHN0YWNrbWFwcy4gTm90ZSB0aGF0IGl0
IGNhbiBmaW5kIHRoZSBTdGFja21hcCBieQorLy8gYXNraW5nIGZvciB0aGUgSW5zdCdzIG9yaWdp
bi4gSGVuY2UsIHRoZXNlIG9iamVjdHMgZG9uJ3QgbmVlZCB0byBldmVuIGhvbGQgYSByZWZlcmVu
Y2UgdG8gdGhlCisvLyBTdGFja21hcC4KKworY2xhc3MgU3RhY2ttYXBTcGVjaWFsIDogcHVibGlj
IEFpcjo6U3BlY2lhbCB7CitwdWJsaWM6CisgICAgU3RhY2ttYXBTcGVjaWFsKCk7CisgICAgdmly
dHVhbCB+U3RhY2ttYXBTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hB
cmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxi
YWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsK
KyAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVy
cmlkZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQWlyOjpJbnN0JiwgY29uc3QgUmVn
aXN0ZXJTZXQmKSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVy
ZWRSZWdzKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9l
cyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBX
ZSBoYXZlIG1hbnkgc29tZQorICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4K
KworICAgIHZvaWQgZm9yRWFjaEFyZ0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRC
M0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCBj
b25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jik7CisgICAgYm9v
bCBpc1ZhbGlkSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWdu
ZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYpOworICAgIGJvb2wgYWRt
aXRzU3RhY2tJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25l
ZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisKKyAgICAvLyBHZXRz
IHRoZSByZXBzIGFycmF5IHRoZSB3YXkgdGhhdCB0aGUgc3RhY2ttYXAgZ2VuZXJhdG9yIGNhbGxi
YWNrIHdvdWxkIHdhbnQuCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzKEFpcjo6R2VuZXJhdGlv
bkNvbnRleHQmLCBBaXI6Okluc3QmKTsKKworICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRo
ZSBJbnN0J3MgYXJncywgc3RhcnRpbmcgd2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVu
IHZlY3Rvci4KKyAgICB2b2lkIGFwcGVuZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQm
LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYp
OworCisgICAgc3RhdGljIFZhbHVlUmVwIHJlcEZvckFyZyhBaXI6OkNvZGUmLCBjb25zdCBBaXI6
OkFyZyYpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0
YWNrbWFwU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aENhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aENhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3dpdGNoQ2FzZTo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2Nhc2VWYWx1ZSwgIi0+
IiwgcG9pbnRlckR1bXAobV90YXJnZXQpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoQ2FzZV9oCisjZGVmaW5lIEIzU3dpdGNoQ2Fz
ZV9oCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNp
Y0Jsb2NrOworCitjbGFzcyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkK
KyAgICB7CisgICAgfQorCisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwgQmFzaWNC
bG9jayogdGFyZ2V0KQorICAgICAgICA6IG1fY2FzZVZhbHVlKGNhc2VWYWx1ZSkKKyAgICAgICAg
LCBtX3RhcmdldCh0YXJnZXQpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdGFyZ2V0OyB9CisKKyAgICBpbnQ2NF90IGNhc2VW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FzZVZhbHVlOyB9CisgICAgQmFzaWNCbG9jayogdGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZTsKKyAg
ICBCYXNpY0Jsb2NrKiB0YXJnZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbGR1ZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3
aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAg
U3dpdGNoQ2FzZSByZXN1bHQgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29y
c1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVM
YXN0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6YXBwZW5k
Q2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIG1fc3VjY2Vzc29ycy5h
cHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNjZXNzb3JzW21fc3VjY2Vzc29y
cy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5k
KHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3aXRjaFZhbHVlOjpkdW1wTWV0
YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRoaXMgZGVzdHJ1Y3RpdmVseSBv
dmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAgICBvdXQucHJpbnQobGlzdER1
bXAoKnRoaXMpKTsKK30KKworU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xW
YWx1ZShpbmRleCwgU3dpdGNoLCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChm
YWxsVGhyb3VnaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNTd2l0Y2hWYWx1ZV9oCisjZGVmaW5lIEIzU3dpdGNoVmFsdWVfaAorCisj
aW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVi
bGljIENvbnRyb2xWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFs
dWUoKTsKKworICAgIC8vIG51bUNhc2VWYWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgor
ICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCk7IH0KKworICAgIC8vIFRoZSBzdWNjZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0
aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbaV07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRf
dD4mIGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgQmFzaWNC
bG9jayogZmFsbFRocm91Z2goKSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9
CisgICAgQmFzaWNCbG9jayomIGZhbGxUaHJvdWdoKCkgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxh
c3QoKTsgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51bUNhc2VWYWx1
ZXMoKTsgfQorICAgIFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gU3dpdGNoQ2FzZShjYXNlVmFsdWUoaW5kZXgpLCBzdWNjZXNzb3IoaW5k
ZXgpKTsKKyAgICB9CisgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAg
ICA6IG1fc3dpdGNoKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoU3dpdGNoVmFsdWUmIHN3aXRjaFZhbHVl
LCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2goJnN3aXRjaFZhbHVlKQor
ICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX3N3aXRjaC0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIFN3aXRjaFZhbHVlKiBtX3N3aXRjaDsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgLy8gVGhpcyByZW1vdmVzIHRoZSBjYXNlIGFuZCBy
ZW9yZGVycyB0aGluZ3MgYSBiaXQuIElmIHlvdSdyZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZyb20g
MCB0byBOLAorICAgIC8vIHRoZW4geW91IGNhbiBrZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlzIHNv
IGxvbmcgYXMgeW91IHJldmlzaXQgdGhpcyBzYW1lIGluZGV4ICh3aGljaCB3aWxsIG5vdworICAg
IC8vIGNvbnRhaW4gc29tZSBvdGhlciBjYXNlIHZhbHVlKS4gVGhpcyByZW1vdmVzIHRoZSBjYXNl
IHRoYXQgd2FzIHJlbW92ZWQuCisgICAgU3dpdGNoQ2FzZSByZW1vdmVDYXNlKHVuc2lnbmVkIGlu
ZGV4KTsKKworICAgIHZvaWQgYXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNl
KTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sqIGZh
bGxUaHJvdWdoKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgi
CisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoK
KyAgICAgICAgb3V0LnByaW50KCJWb2lkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElu
dDMyOgorICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEludDY0OgorICAgICAgICBvdXQucHJpbnQoIkludDY0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzVHlwZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitlbnVtIFR5cGUgeworICAgIFZvaWQsCisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91
YmxlCit9OworCitpbmxpbmUgYm9vbCBpc0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5
cGUgPT0gSW50MzIgfHwgdHlwZSA9PSBJbnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChU
eXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlw
ZSBwb2ludGVyKCkgY29uc3QKK3sKKyAgICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAgICAg
ICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVcHNpbG9uVmFsdWU6On5VcHNpbG9uVmFsdWUo
KQoreworfQorCit2b2lkIFVwc2lsb25WYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4iLCBtX3BoaS0+aW5kZXgoKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNV
cHNpbG9uVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNV
cHNpbG9uVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Vwc2lsb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2lsb25W
YWx1ZV9oCisjZGVmaW5lIEIzVXBzaWxvblZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFVwc2lsb25WYWx1ZSA6
IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUg
b3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gVXBzaWxvbjsgfQorCisgICAgflVwc2lsb25WYWx1
ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhpOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICBVcHNpbG9u
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUq
IHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGhpLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQor
ICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgp
ID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisKKyAgICBWYWx1ZSogbV9waGk7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworVmFsdWU6On5WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVmFsdWU6
OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqIHZhbHVlKQoreworICAgIC8vIFRoaXMgaXMgYSBi
aXQgY3JhenkuIEl0IGRvZXMgYW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQgb2Ygd2hhdGV2ZXIgVmFs
dWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRoCisgICAgLy8gYSBwbGFpbiBJZGVudGl0eSBWYWx1ZS4g
V2UgZmlyc3QgY29sbGVjdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQsIHRoZW4gd2Ug
ZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0aGVuIHdl
IGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCisKKyAgICB1bnNpZ25lZCBp
bmRleCA9IG1faW5kZXg7CisgICAgVHlwZSB0eXBlID0gbV90eXBlOworICAgIE9yaWdpbiBvcmln
aW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworICAg
IFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworICAgIHZvaWQqIG1pc2Mg
PSB0aGlzLT5taXNjOworCisgICAgUkVMRUFTRV9BU1NFUlQodHlwZSA9PSB2YWx1ZS0+dHlwZSgp
KTsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKworICAgIG5ldyAodGhpcykgKGluZGV4
LCBJZGVudGlmeSwgdHlwZSwgb3JpZ2luLCB2YWx1ZSk7CisKKyAgICB0aGlzLT5vd25lciA9IG93
bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CisgICAgdGhpcy0+bWlz
YyA9IG1pc2M7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6
OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlw
ZSwgIiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bjb2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOwor
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVu
KCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAg
IFN0cmluZ1ByaW50U3RyZWFtIHN0cmluZ091dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQpOwor
ICAgIENTdHJpbmcgc3RyaW5nID0gc3RyaW5nT3V0LnRvQ1N0cmluZygpOworICAgIGlmIChzdHJp
bmcubGVuZ3RoKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgc3RyaW5nKTsKKworICAgIG91
dC5wcmludCgiKSIpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCitpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29s
IFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQ2
NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNv
bnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdAoreworfQorCitU
eXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQorewor
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEFkZDoK
KyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENo
aWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6
CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNh
c2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2Fz
ZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNl
IEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHBvaW50ZXIoKTsKKyAgICBjYXNlIFNFeHQ4
OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6Cisg
ICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRo
YW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2Fz
ZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNl
IEJlbG93RXF1YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBjYXNlIFNFeHQzMjoKKyAg
ICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0OworICAgIGNhc2UgRlJvdW5kOgor
ICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICBjYXNlIE5vcDoKKyAg
ICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTk1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNWYWx1ZV9oCisjZGVmaW5lIEIzVmFsdWVfaAorCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIK
KyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgVmFsdWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1
ZSosIDM+IEFkamFjZW5jeUxpc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZp
eCA9ICJAIjsKKworICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlKSB7IHJldHVybiB0cnVl
OyB9CisKKyAgICB2aXJ0dWFsIH5WYWx1ZSgpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNvZGUg
aXMgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJlcGxhY2luZyB2YWx1ZXMgd2l0aCBpZGVudGl0eS4K
KyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKworICAgIE9y
aWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIAorICAgIFZhbHVl
KiYgY2hpbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9Cisg
ICAgVmFsdWUqIGNoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVu
W2luZGV4XTsgfQorCisgICAgLy8gVGhpcyBjb21wdXRlcyB0aGUgdHlwZSB1c2luZyB0aGUgb3Bj
b2RlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgQWRq
YWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNvbnN0
IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQor
CisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCByZXBsYWNl
V2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9p
ZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBob3cgeW91
IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHBy
b3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBk
bzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZh
bHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncworICAgIC8v
IH0KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgp
ICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxwdHIK
KyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0
OworICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQo
KSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSW50
KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnQoaW50
NjRfdCB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OworICAgIGRv
dWJsZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAv
LyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KKyAgICAvLyBUaGlzIGZvcm0gcmVx
dWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5OgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAg
ICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBt
X29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1l
bnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3Igc3BlY2lmeWlu
ZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29kZSBoYXMgbm8gY2hpbGRyZW46Cisg
ICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1f
b3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdp
bihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9w
Y29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0
IGNoaWxkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNp
dCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRl
eChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5
cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisg
ICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7Cisg
ICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZl
ciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5kIHRoYXQgZG9uJ3QKKyAgICAv
LyB0YWtlIGFueSBhcmd1bWVudHM6CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkK
KyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bj
b2RlLCBudWxscHRyKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0K
KyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciB2YXJhcmdzLgorICAgIGV4cGljaXQgVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAg
eworICAgIH0KKworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSogZmlyc3RD
aGlsZCk7CisKKyAgICAvLyBUaGlzIGdyb3VwIG9mIGZpZWxkcyBpcyBhcnJhbmdlZCB0byBmaXQg
aW4gNjQgYml0cy4KKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIE9wY29kZSBtX29wY29kZTsK
KyAgICBUeXBlIG1fdHlwZTsKKyAgICAKKyAgICBPcmlnaW4gbV9vcmlnaW47CisgICAgQWRqYWNl
bmN5TGlzdCBtX2NoaWxkcmVuOworCitwdWJsaWM6CisgICAgQmFzaWNCbG9jayogb3duZXIgeyBu
dWxscHRyIH07IC8vIGNvbXB1dGVkIGxhemlseS4KKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgeyBu
dWxscHRyIH07IC8vIHVzZWQgZm9yIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCit9Owor
CitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKFZhbHVl
KiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Zh
bHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
VmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVlKiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKworI2lu
Y2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5j
bHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitU
KiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
dGVtcGxhdGU+dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9vbCBWYWx1
ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1ZT4oKTsK
K30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENv
bnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25z
dAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRfdCBWYWx1
ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+dmFs
dWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
SW50MzIoKSB8fCBoYXNJbnQ2NCgpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9CisK
K2Jvb2wgVmFsdWU6OmlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhh
c0ludCgpICYmIGFzSW50KCkgPT0gdmFsdWU7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKworZG91
YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91Ymxl
VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK1N0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQorewor
ICAgIGlmIChDaGVja1ZhbHVlKiBjaGVjayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAgIHJl
dHVybiAmY2hlY2stPnN0YWNrbWFwOworICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9p
bnQgPSBhczxQYXRjaHBvaW50VmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2ludC0+
c3RhY2ttYXA7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
IGNhc2UgTm9uZToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zm
c2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1l
bnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFs
dWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAg
ICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29u
c3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFs
dWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25z
IGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRp
b24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3Jj
ZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4g
QjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5
IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6Cisg
ICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uIEFzIGFuCisgICAg
ICAgIC8vIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IGtu
b3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZvciB0aGUKKyAgICAgICAgLy8gcmlnaHQgb3BlcmFu
ZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVja011bC4KKyAgICAgICAgQW55LAorCisgICAgICAg
IC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxk
IHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQorICAgICAgICAvLyByZWdpc3RlciB0
aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIhCisgICAgICAgIFNvbWVSZWdpc3RlciwKKworICAg
ICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1
bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRo
aXMgdGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNrZWQuCisgICAgICAgIFJlZ2lzdGVyLAor
CisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3
aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJdCdzIG5vdCBhIHZhbGlkCisgICAgICAgIC8vIGlu
cHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBTdGFjaywKKworICAgICAgICAvLyBBcyBhbiBp
bnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0
aGUgYXJndW1lbnQgYXJlYSBhdCBzb21lCisgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgU3Rh
Y2tBcmd1bWVudCwKKworICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgdGVsbHMgdXMgdGhhdCBCMyBjb25zdGFudC1mb2xkZWQgdGhlIHZhbHVlLgorICAgICAgICBD
b25zdGFudAorICAgIH07CisgICAgCisgICAgVmFsdWVSZXAoKQorICAgICAgICA6IG1fa2luZChB
bnkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFZhbHVlUmVwKFJlZyByZWcpCisgICAg
ICAgIDogbV9raW5kKFJlZ2lzdGVyKQorICAgICAgICAsIG1fdmFsdWUocmVnLmluZGV4KCkpCisg
ICAgeworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBWYWx1ZVJlcChyZWcpOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJl
cCBzdGFjayhpbnRwdHJfdCBvZmZzZXRGcm9tRlApCisgICAgeworICAgICAgICBWYWx1ZVJlcCBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1f
dmFsdWUgPSBvZmZzZXRGcm9tRlA7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNr
QXJndW1lbnQoaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2tBcmd1bWVudDsKKyAgICAgICAg
cmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tU1A7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVl
UmVwIGNvbnN0YW50KGludDY0X3QgdmFsdWUpCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1f
dmFsdWUgPSB2YWx1ZTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnREb3Vi
bGUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKGJpdHdpc2Vf
Y2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIGtpbmQoKSAhPSBBbnk7IH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBSZWc6OmZy
b21JbmRleChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRy
X3Qgb2Zmc2V0RnJvbVNQKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
U3RhY2tBcmd1bWVudCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV92
YWx1ZSk7CisgICAgfQorCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IENvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7Cisg
ICAgfQorCisgICAgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBLaW5kIG1fa2luZDsKKyAg
ICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFt
ZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6
OlZhbHVlUmVwOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM1Zh
bHVlUmVwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRl
cm5fbWF0Y2hlci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2Vu
ZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ5MyBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKworJHZhckluZGV4ID0gMAor
ZGVmIG5ld1ZhcgorICAgICR2YXJJbmRleCArPSAxCisgICAgIl90bXAjeyR2YXJJbmRleH0iCitl
bmQKKworY2xhc3MgUHJvZHVjdGlvbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpuYW1lLCA6
dmFyTmFtZSwgOmFub255bW91cywgOm9wY29kZSwgOmNoaWxkcmVuCisKKyAgICBkZWYgaW5pdGlh
bGl6ZShvcmlnaW4sIG5hbWUsIG9wY29kZSwgY2hpbGRyZW4pCisgICAgICAgIEBvcmlnaW4gPSBv
cmlnaW4KKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBhbm9ueW1vdXMgPSAobmFtZSA9
PSBuaWwgb3IgbmFtZSA9fiAvXEFcJChbMC05XSspXFovKQorICAgICAgICBAdmFyTmFtZSA9IEBh
bm9ueW1vdXMgPyBuZXdWYXIgOiBuYW1lCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAg
ICAgQGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBk
ZWYgaGFzT3Bjb2RlCisgICAgICAgIG9wY29kZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBl
YWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7Cisg
ICAgICAgICAgICB8IGNoaWxkLCBpbmRleCB8CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAor
ICAgICAgICAgICAgICAgICAgY2hpbGQubmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZh
ck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2Rl
ID8gOmFub25JbnRlcm5hbCA6IDphbm9uT3BlcmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVy
bmFsIDogOm9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNo
aWxkLmVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNz
IE1hdGNoZXIKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYg
aW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAg
ICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3Jp
Z2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRl
ZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBm
aWxlTmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAK
KyAgICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBl
bmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcK
KyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdp
biA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAg
ZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAg
QHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmlu
ZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIp
CisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcwor
ICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAK
KyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8K
KyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19Igor
ICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAg
ZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBs
aW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3Ry
CisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdu
b3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQor
ICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRd
KFthLXpBLVowLTlfXSopLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4u
bmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0r
KS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0o
KSxdLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1l
LCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhl
ciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4
cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAg
ICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYg
aXNLZXl3b3JkKHRva2VuKQorICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3Jl
IGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAg
IHRva2VuID1+IC9cQSgobWF0Y2hlcikpXFovCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tl
bikKKyAgICB0b2tlbiA9fiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5v
dCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxp
emUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUp
CisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRv
a2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAx
CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9r
ZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBh
cnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0
cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRv
a2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3Vt
ZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNl
RXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkK
KyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRV
bmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHByb2R1Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0g
cHJvZHVjdGlvbi52YXJOYW1lCisgICAgICAgICAgICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0
aW9uIGhhcyBzYW1lIG5hbWUgYXMgcGFyZW50IHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAg
ICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJv
ZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0
aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAg
ICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAg
ICAgICBtYXRjaGVyTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlv
bnMgPSBbXQorCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBA
dG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAi
aW5jbHVkZSIuIElmIHdlIGRpZCB0aGF0LCBpdCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAg
cHJvZHVjdGlvbiA9IHBhcnNlUHJvZHVjdGlvbgorICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9u
Lm5hbWUgfQorICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9u
IikKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0
aW9uCisgICAgICAgIH0KKworICAgICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVj
dGlvbnMpCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdp
biA9IHRva2VuLm9yaWdpbgorICAgICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAg
ICAgICBpZiB0b2tlbiA9PSAiPSIKKyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAgICAgICAg
ICAgb3Bjb2RlID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQor
ICAgICAgICBlbHNpZiB0b2tlbiA9PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAg
ICAgICAgICAgb3Bjb2RlID0gbmFtZQorICAgICAgICAgICAgbmFtZSA9IG5pbAorICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXR1cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWws
IG5pbCkKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisg
ICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisKKyAgICAg
ICAgICAgIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorCisg
ICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1bWUoIiwi
KQorICAgICAgICB9CisKKyAgICAgICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAgICAgICAg
YWR2YW5jZQorCisgICAgICAgIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBw
cm9kdWN0aW9ucykKKyAgICBlbmQKK2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2Vy
ID0gUGFyc2VyLm5ldyhJTzo6cmVhZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hlciA9IHBh
cnNlci5wYXJzZQorCitjbGFzcyBTdWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRleE1hcCwg
OnByb2R1Y3Rpb25zCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0
aW9ucykKKyAgICAgICAgQGluZGV4TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25zID0gW10K
KyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAg
ICAgICBAaW5kZXhNYXAgPDwgaW5kZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9k
dWN0aW9uc1tpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgZGVmIG1hcEluZGV4TGlz
dChpbmRleExpc3QpCisgICAgICAgIGluZGV4TGlzdC5tYXAgeworICAgICAgICAgICAgfCBpbmRl
eCB8CisgICAgICAgICAgICBAaW5kZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKK2Vu
ZAorCitGaWxlLm9wZW4oIkIzIiArIG1hdGNoZXIubmFtZSArICIuaCIsICJ3IikgeworICAgIHwg
b3V0cCB8CisKKyAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJu
X21hdGNoZXIucmIgZnJvbSAje2ZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisKKyAgICBvdXRw
LnB1dHMgIiNpZm5kZWYgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICBvdXRwLnB1dHMgIiNkZWZp
bmUgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICAKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwi
QjNWYWx1ZS5oXCIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsiCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+Igor
ICAgIG91dHAucHV0cyAidm9pZCBydW4je21hdGNoZXIubmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRh
cHRvciYgYWRhcHRvcikiCisgICAgb3V0cC5wdXRzICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhp
cyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJl
Y3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAgICAjIHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2Vs
eSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBnb29kIHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8g
Zm9ybWF0IGl0CisgICAgIyBmb3IgeW91LgorCisgICAgIyBJbiBvZGQgc2l0dWF0aW9ucywgd2Ug
bWF5IG5vdCB1c2UgdGhlIGlucHV0IHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBv
dXQgYWJvdXQgaXQuCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsiCisgICAg
ICAgIAorICAgICMgVGhpcyBqdXN0IHByb3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8g
d29ycnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5nIGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRl
ZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRl
eExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAg
ICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1st
MV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0g
cHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0x
XSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMg
PDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICBpbmRleExp
c3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgbGVuZ3Ro
ID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAg
IGlmIGxlbmd0aCA+IDAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFt
ZX0tPmNoaWxkcmVuLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAgICAgeWll
bGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgZW5kCisg
ICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20g
dGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25z
CisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZv
dW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBm
b3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0
aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5n
IHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwg
cHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0
IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMK
KyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAg
IHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24s
IGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tp
bmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAg
ICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNv
ZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZv
cgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzLmVhY2gg
eworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNb
aW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQg
dGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAg
ICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAg
ICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24g
PSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1
Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24u
b3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEVt
aXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNo
ICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNo
X3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAgICAg
ICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlv
bnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3Vi
TWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChp
bmRleExpc3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAg
ICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0
aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAg
ICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGFr
ZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVu
Z3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25z
IGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFt
ZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBw
cm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4uKHBy
b2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisK
KyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAi
eyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0t
PmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlz
IHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAg
IG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAgICAg
ICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8IHByb2R1
Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAg
ICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlBy
b2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJN
YXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAg
bWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1u
SW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAg
ICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYg
bWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBt
YXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAg
ICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0
aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUg
YW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNo
ID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRj
aENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAg
ICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNo
Lm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBl
bmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVj
dGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICBpbmRleExpc3QuZWFjaCB7
CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVy
LnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAg
ICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAg
ICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG9wZXJhbmRBcmd1
bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG51
bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHNlZW4gPSB7fQorICAgICAgICAgICAgcHJvZHVjdGlv
bi5lYWNoVmFyaWFibGUgeworICAgICAgICAgICAgICAgIHwgcGFyZW50VmFyTmFtZSwgY2hpbGRO
YW1lLCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBsb2FkRXhw
ciA9ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgje2luZGV4fSkiCisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgaWYgc2VlbltjaGlsZFZhck5hbWVdCisgICAgICAgICAgICAgICAg
ICAgIHRtcCA9IG5ld1ZhcgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAj
e3RtcH0gPSAje2xvYWRFeHByfTsiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCN7dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsiCisgICAgICAgICAgICAgICAgICAgIG51bVNj
b3BlcyArPSAxCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWVu
W2NoaWxkVmFyTmFtZV0gPSB0cnVlCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFtZX0gPSAje2xvYWRFeHByfTsi
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50
KCN7JDF9KSkgeyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7
IgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBu
dW1TY29wZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFt
ZSBpZiBraW5kID09IDppbnRlcm5hbCBvciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAg
ICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6
b3BlcmFuZCBvciBraW5kID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlB
cmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0g
Om9wZXJhbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKGFkYXB0b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAg
b3V0cC5wdXRzKCIgICAgJiYgYWRhcHRvci5hY2NlcHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJn
dW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBh
ZGFwdG9yLmFjY2VwdE9wZXJhbmRzKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAi
KSIpCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBhZGFwdG9yLnRyeSN7cHJvZHVjdGlv
bi5uYW1lfSgiICsgdHJ5QXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSkiKQorICAgICAgICAgICAg
b3V0cC5wdXRzICIgICAgcmV0dXJuOyIKKyAgICAgICAgICAgIG51bVNjb3Blcy50aW1lcyB7Cisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgfQorICAgICAgICAgICAg
b3V0cC5wdXRzICJ9IgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIG91dHAucHV0cyAiICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICAK
KyAgICBvdXRwLnB1dHMgIn0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMyIKKworICAgIG91dHAucHV0
cyAiI2VuZGlmIC8vIEIzI3ttYXRjaGVyLm5hbWV9X2giCit9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFyZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIFRtcDoKKyAgICAg
ICAgb3V0LnByaW50KHRtcCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tOgorICAg
ICAgICBvdXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEltbTY0OgorICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4IiwgbV9vZmZzZXQpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBZGRyOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAg
ICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCks
ICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZGV4OgorICAgICAgICBpZiAob2Zm
c2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJp
bnQoIigiLCBiYXNlKCksICIsIiwgaW5kZXgoKSk7CisgICAgICAgIGlmIChzY2FsZSgpICE9IDEp
CisgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKKyAgICAgICAgb3V0LnByaW50
KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAgICBpZiAob2Zm
c2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50
KCIoIiwgcG9pbnRlckR1bXAoc3RhY2tTbG90KCkpLCAiKSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQob2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIoY2FsbEFyZykiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVsYXRpb25h
bENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVzQ29uZDoKKyAgICAg
ICAgb3V0LnByaW50KGFzUmVzdWx0Q29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTcGVjaWFsOgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1ODIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJBcmdfaAorI2RlZmluZSBBaXJBcmdfaAorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5j
bHVkZSAiQjNUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgU3BlY2lhbDsKK2NsYXNzIFN0YWNrU2xvdDsKKworLy8gVGhpcyBj
bGFzcyBuYW1lIGlzIGFsc28gaW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIHdpbGwgc2F5
IGl0IGEgbG90LiBZb3UnbGwgc2VlIGNvZGUgbGlrZQorLy8gSW5zdCguLi4sIEFyZzo6aW1tKDUp
LCBBcmc6OmFkZHIodGhpbmcsIGJsYWgpLCAuLi4pCitjbGFzcyBBcmcgeworcHVibGljOgorICAg
IC8vIFRoZXNlIGVudW0gbWVtYmVycyBhcmUgaW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdl
IGhhdmUgdG8gbWVudGlvbiB0aGVtIGEgbG90LgorICAgIGVudW0gS2luZCA6IGludDhfdCB7Cisg
ICAgICAgIFRtcCwKKyAgICAgICAgSW1tLAorICAgICAgICBJbW02NCwKKyAgICAgICAgQWRkciwK
KyAgICAgICAgU3RhY2ssCisgICAgICAgIENhbGxBcmcsCisgICAgICAgIEluZGV4LAorICAgICAg
ICBSZWxDb25kLAorICAgICAgICBSZXNDb25kLAorICAgICAgICBTcGVjaWFsCisgICAgfTsKKwor
ICAgIGVudW0gUm9sZSA6IGludDhfdCB7CisgICAgICAgIFVzZSwKKyAgICAgICAgRGVmLAorICAg
ICAgICBVc2VEZWYKKyAgICB9OworCisgICAgZW51bSBUeXBlIDogaW50OF90IHsKKyAgICAgICAg
R1AsCisgICAgICAgIEZQCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1U
eXBlcyA9IDI7CisKKyAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNl
RGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wg
aXNEZWYoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAg
IGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERlZjoK
KyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3JCM1R5cGUoQjM6OlR5cGUgdHlwZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZvaWQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAg
ICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVy
biBHUDsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gRlA7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBHUDsK
KyAgICB9CisKKyAgICBBcmcoKQorICAgIHsKKyAgICB9CisKKyAgICBBcmcoQWlyOjpUbXAgdG1w
KQorICAgICAgICA6IG1fa2luZChUbXApCisgICAgICAgICwgbV9iYXNlKHRtcCkKKyAgICB7Cisg
ICAgfQorCisgICAgc3RhdGljIEFyZyBpbW0oaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW07CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHN0YXRpYyBBcmcgaW1tNjQoaW50cHRyX3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tNjQ7CisgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBBcmcgYWRkcmVzcyhBaXI6OlRtcCBiYXNlLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgewor
ICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9raW5kID0gQWRkcjsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHN0YWNrKFN0YWNrU2xvdCogdmFsdWUsIGludDMyX3Qg
b2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0PGlu
dHB0cl90Pih2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0gb2Zmc2V0OyAvLyBJIGtu
b3csIHl1Y2suCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFy
ZyBjYWxsQXJnKGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IENhbGxBcmc7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCBpc1ZhbGlkU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNj
YWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAyOgorICAgICAgICBjYXNlIDQ6
CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAg
c3RhdGljIHVuc2lnbmVkIGxvZ1NjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gMDsK
KyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgNDoK
KyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1
cm4gMzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
QXJnIGluZGV4KEFpcjo6VG1wIGJhc2UsIEFpcjo6VG1wIGluZGV4LCB1bnNpZ25lZCBzY2FsZSA9
IDEsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1Ao
KSk7CisgICAgICAgIEFTU0VSVChpbmRleC5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNWYWxp
ZFNjYWxlKHNjYWxlKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3Vs
dC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0gc3RhdGljX2Nhc3Q8
aW50MzJfdD4oc2NhbGUpOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3Jv
QXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAg
IEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZWxDb25kOworICAgICAgICBy
ZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIEFyZyByZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRp
b24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IFJlc0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHNwZWNpYWwo
QWlyOjpTcGVjaWFsKiBzcGVjaWFsKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IFNwZWNpYWw7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4oc3BlY2lhbCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQKKyAgICAgICAgICAg
ICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fYmFzZSA9PSBvdGhl
ci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleAorICAgICAg
ICAgICAgJiYgbV9zY2FsZSA9PSBvdGhlci5tX3NjYWxlOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiAqdGhpcyAhPSBBcmcoKTsgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1RtcCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFRtcDsKKyAgICB9CisKKyAg
ICBib29sIGlzSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1t
OworICAgIH0KKworICAgIGJvb2wgaXNJbW02NCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4ga2luZCgpID09IEltbTY0OworICAgIH0KKworICAgIGJvb2wgaXNBZGRyKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKKyAgICB9CisKKyAgICBib29sIGlz
U3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTdGFjazsKKyAg
ICB9CisKKyAgICBib29sIGlzQ2FsbEFyZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
a2luZCgpID09IENhbGxBcmc7CisgICAgfQorCisgICAgYm9vbCBpc0luZGV4KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CisgICAgfQorCisgICAgYm9vbCBp
c1JlbENvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZWxDb25k
OworICAgIH0KKworICAgIGJvb2wgaXNSZXNDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBraW5kKCkgPT0gUmVzQ29uZDsKKyAgICB9CisKKyAgICBib29sIGlzU3BlY2lhbCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7CisgICAgfQorCisg
ICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpIHx8
IGlzU3RhY2soKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCB0bXAoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUbXApOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAg
IH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBJbW0gfHwga2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0
OworICAgIH0KKworICAgIHZvaWQqIHBvaW50ZXJWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2
b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgQWly
OjpUbXAgYmFzZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIg
fHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisKKyAg
ICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2luZCgpID09IFN0
YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fc2NhbGUpOwor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2lu
ZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zm
c2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgaW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAg
IHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9z
Y2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgQWlyOjpTcGVjaWFs
KiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3BlY2lh
bCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQp
OworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQVG1wKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlAoKTsKKyAg
ICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBw
b3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBpc0dQKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAg
ICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6
CisgICAgICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAg
IGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNp
YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAg
ICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGVsbHMg
dXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEg
RlAgdmFsdWUuCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
a2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAg
ICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAg
ICAgIGNhc2UgQmFzZToKKyAgICAgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIGNhc2UgQ2Fs
bEFyZzoKKyAgICAgICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxvdyBJbW02NCBhcyBhIGRv
dWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAg
cmV0dXJuIGlzRlBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFzVHlwZSgp
IGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIElt
bToKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmlndW91cyBm
b3Igc29tZSBhcmcga2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisKKyAgICBi
b29sIGlzVHlwZShUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQKCk7CisgICAgICAg
IGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gaXNGUCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAm
JiB0bXAoKS5pc0dQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAg
ICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAo
KS5mcHIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyBy
ZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRt
cCgpLmdwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgp
LnRtcEluZGV4KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgY2FzZSBB
ZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAg
ICAgICBmdW5jdG9yKG1faW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMg
aXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBV
c2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4g
Rm9yIGV4YW1wbGUsIHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVyY3gpCisgICAg
Ly8KKyAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBUeXBl
IGFyZ1R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNl
LCBhcmdSb2xlLCBhcmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFk
ZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBV
c2UsIEdQKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXV0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZElt
bTMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9v
ZmZzZXQpKTsKKyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tNjQgYXNUcnVzdGVkSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzSW1tNjQoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0KHBvaW50ZXJWYWx1ZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNBZGRy
KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLmdwcigp
LCBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNz
ZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4
KAorICAgICAgICAgICAgbV9iYXNlLmdwcigpLCBtX2luZGV4LmdwcigpLCBzdGF0aWNfY2FzdDxN
YWNyb0Fzc2VtYmxlcjo6U2NhbGU+KGxvZ1NjYWxlKCkpLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9uYWxDb25kaXRpb24oKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisg
ICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBhc1Jlc3VsdENvbmRpdGlvbigpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZXNDb25kKCkpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbj4obV9vZmZzZXQpOwor
ICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGludDY0X3QgbV9vZmZzZXQgeyAwIH07CisgICAgS2luZCBtX2tpbmQgeyBJbW0gfTsKKyAg
ICBpbnQzMl90IG1fc2NhbGUgeyAxIH07CisgICAgQWlyOjpUbXAgbV9iYXNlOworICAgIEFpcjo6
VG1wIG1faW5kZXg7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBBaXJBcmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKwordm9pZCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBibG9jaykKK3sKKyAgICBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCit2
b2lkIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQorewor
ICAgIEIzOjpyZW1vdmVQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
KQoreworICAgIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOworfQorCit2
b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMs
ICI6XG4iKTsKKyAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAqdGhpcykKKyAgICAgICAgb3V0
LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Js
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNp
Y0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckJhc2ljQmxv
Y2tfaAorI2RlZmluZSBBaXJCYXNpY0Jsb2NrX2gKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNp
bmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENvZGU7CitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMiOwor
CisgICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8
QmFzaWNCbG9jayosIDI+IEFkamFjZW5jeUxpc3Q7CisgICAgCisgICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgSW5zdExpc3Q6Oml0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5zdExpc3Q6Oml0ZXJh
dG9yIGVuZCgpIHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKyAgICBJbnN0TGlzdDo6Y29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJ
bnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5lbmQo
KTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsg
fQorICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9pbnN0
c1tpbmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1faW5zdHNb
aW5kZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0
cy5sYXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBhcHBlbmRJbnN0KEluc3Qm
JiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3YXJkPEluc3Q+
KGluc3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgdm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAg
bV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KSk7CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBjYXNlIHRvIHdoaWNoIHRo
ZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIxIiBjYXNlIGlzIHRoZQor
ICAgIC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGZhbGwtdGhy
b3VnaCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3Jz
KCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2lu
ZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0
dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBzdWNj
ZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEFkamFj
ZW5jeUxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisK
KyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vz
c29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9j
ayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tp
bmRleF07IH0KKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBwcmVkZWNlc3NvcnMoKSBjb25zdCB7
IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBBZGphY2VuY3lMaXN0JiBwcmVk
ZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKworICAgIHZvaWQg
YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIHZvaWQgcmVtb3ZlUHJlZGVjZXNzb3Io
QmFzaWNCbG9jayopOworICAgIHZvaWQgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZy
b20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgQ29kZTsKKyAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OworICAg
IAorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgIH0KKworICAgIHVu
c2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBBZGphY2VuY3lMaXN0
IG1fc3VjY2Vzc29yczsKKyAgICBBZGphY2VuY3lMaXN0IG1fcHJlZGVjZXNzb3JzOworfTsKKwor
Y2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1
bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitw
cml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1
bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Js
b2NrRHVtcChibG9jayk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitD
Q2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVn
aXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJl
Z2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVk
ZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2Ji
ZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30K
KworQ0NhbGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNp
YWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hB
cmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJn
OjpVc2UsIEFyZzo6R1ApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0
LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVz
dCBxdWVyeSB0aGUgYXJnJ3MgdHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNl
IHdlCisgICAgICAgIC8vIHJlcXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCByZWdpc3Rl
cnMuCisgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tp
XS50eXBlKCkpOworICAgIH0KK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYg
aW5zdCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJn
OjpJbW06CisgICAgICAgIGlmIChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAg
aWYgKHNpemVvZih2b2lkKikgPT0gOCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBj
YXNlIEFyZzo6U3RhY2s6CisgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWlu
c3QuYXJnc1sxXS5pc0dQKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5z
aWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFp
bnN0LmFyZ3NbaV0uaXNSZWcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBpZiAoaW5zdC5hcmdzW2ldID09IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAg
cmV0dXJuICBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxT
cGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8g
QXJnIDEgY2FuIGJlIGEgc3RhY2sgYWRkcmVzcyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXgg
PT0gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit2b2lkIENDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVn
aXN0ZXJTZXQmKQoreworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5l
cmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQor
eworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06
CisgICAgY2FzZSBBcmc6OkltbVB0cjoKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKGluc3QuYXJnc1sxXS5wb2ludGVyVmFsdWUoKSksIHNjcmF0Y2hSZWdpc3Rl
cik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2FsbChp
bnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAg
ICB9CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdpc3Rl
clNldCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBt
X2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBD
Q2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiZnVuY3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50
aW9uLiIpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5l
IEFpckNDYWxsU3BlY2lhbF9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworLy8gVXNlIHRoaXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBj
YWxsLiBBcmcgMCBpcyBvZiBjb3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUK
Ky8vIENDYWxsU3BlY2lhbCBvYmplY3QuIEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4g
YmUgYW4gSW1tUHRyLCBhIHJlZ2lzdGVyLCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmlu
ZyBhcmdzIGFyZSBqdXN0IHRoZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhp
cyBjYWxsLiBGb3IgYXJndW1lbnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUg
dG8gZG8gdGhlIGdydW50IHdvcmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0
LCB0aGUgb25seSByZWFzb24gd2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3Rl
cnMgYXMgYXJndW1lbnRzIHRvIGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNp
cyBjYW4gc2VlCisvLyB0aGF0IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3Jvbmcg
dG8gYXV0b21hZ2ljYWxseSByZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZwor
Ly8gdXNlZCBiZWNhdXNlIGlmIHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0
aGVuIHRoZXknZCBhcHBlYXIgdG8gYmUgbGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50
IG9yIHRoZSBwcm9sb2d1ZSwgd2hpY2hldmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0Nh
bGxTcGVjaWFsIDogcHVibGljIFNwZWNpYWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lhbCgp
OworICAgIH5DQ2FsbFNwZWNpYWwoKTsKKworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVn
aXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVn
aXN0ZXIgaXMgbm90CisgICAgLy8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcg
Y29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNl
cworICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0
YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMC4K
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFt
YmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQo
SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFy
Z0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNv
bnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVy
YXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOwor
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRl
OworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAg
IHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ29kZTo6Q29k
ZSgpCit7Cit9CisKK0NvZGU6On5Db2RlKCkKK3sKK30KKworQmFzaWNCbG9jayogQ29kZTo6YWRk
QmxvY2soKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFz
aWNCbG9jayhtX2Jsb2Nrcy5zaXplKCkpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9j
ay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJp
bnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAobnVtU3RhY2tTbG90cygpKSB7CisgICAgICAg
IG91dC5wcmludCgiU3RhY2sgc2xvdHM6XG4iKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNs
b3QgOiBzdGFja1Nsb3RzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVt
cChzbG90KSwgIlxuIik7CisgICAgfQorICAgIGlmIChudW1TcGVjaWFscygpKSB7CisgICAgICAg
IG91dC5wcmludCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFs
IDogc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNw
ZWNpYWwpLCAiXG4iKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNvZGVfaAorI2RlZmluZSBBaXJDb2RlX2gKKworI2lu
Y2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVk
ZSAiQWlyU3RhY2tTbG90LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBQcm9jZWR1cmU7CisKK25hbWVzcGFjZSBBaXIgeworCisvLyBUaGlzIGlzIGFuIElSIHRo
YXQgaXMgdmVyeSBjbG9zZSB0byB0aGUgYmFyZSBtZXRhbC4gSXQgcmVxdWlyZXMgYWJvdXQgNDB4
IG1vcmUgYnl0ZXMgdGhhbiB0aGUKKy8vIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgLSBmb3IgZXhh
bXBsZSBpZiB5b3UncmUgZ2VuZXJhdGluZyAxTUIgb2YgbWFjaGluZSBjb2RlLCB5b3UgbmVlZCBh
Ym91dAorLy8gNDBNQiBvZiBBaXIuCisKK2NsYXNzIENvZGUgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKENvZGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IENvZGUoKTsKKyAgICB+Q29kZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soKTsKKwor
ICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RL
aW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNp
YWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNp
YWwgeW91IG5lZWQgdG8gbWFrZSBhIEMgY2FsbCEKKyAgICBTcGVjaWFsKiBjQ2FsbFNwZWNpYWwo
KTsKKworICAgIFRtcCBuZXdUbXAoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIFRt
cDo6Z3BUbXBGb3JJbmRleChtX251bUdQVG1wcysrKTsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgor
ICAgICAgICAgICAgcmV0dXJuIFRtcDo6ZnBUbXBGb3JJbmRleChtX251bUZQVG1wcysrKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIG51bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAg
ICAgICAgICAgcmV0dXJuIG1fbnVtR1BUbXBzOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAg
ICAgICAgICByZXR1cm4gbV9udW1GUFRtcHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayog
b3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisK
KyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpOgor
ICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4
KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVyZSYg
cHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnBy
b2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRl
eCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1f
aW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZp
bmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5k
ZXggPCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgpKQorICAg
ICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gaW5leDsKKyAgICAgICAg
fQorCisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOworICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8U3BlY2lhbD4+IG1fc3BlY2lhbHM7CisgICAgU3BlY2lhbCogbV9jYWxsU3BlY2lhbCB7IG51
bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX251bUdQVG1wcyB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X251bUZQVG1wcyB7IDAgfTsKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBmcmFtZVNpemU7Cit9Owor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJDb2RlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGlvbkNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyR2VuZXJhdGlvbkNvbnRleHRfaAorI2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisK
KyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dCB7CisgICAg
dHlwZWRlZiB2b2lkIExhdGVQYXRoRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNv
bnRleHQmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8TGF0ZVBhdGhGdW5jdGlvbj4gTGF0ZVBh
dGg7CisKKyAgICBWZWN0b3I8UmVmUHRyPExhdGVQYXRoPj4gbGF0ZVBhdGhzOworfTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGlvbkNv
bnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlv
blNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaW5jbHVkZSAiQWly
QmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQor
eworICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5tX2luc3RzLCBtX2luc2VydGlvbnMpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisjZGVmaW5lIEFpckluc2Vy
dGlvblNldF9oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlv
bi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQ29kZTsK
KwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247CisKK2NsYXNzIEluc2Vy
dGlvblNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUmIGNvZGUpCisgICAgICAg
IDogbV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUmIGNvZGUoKSB7IHJldHVy
biBtX2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmRJ
bnNlcnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBl
bmQoc3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwgSW5zdCYmIGlu
c3QpCisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6
OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRz
JiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgSW5zdChz
dGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgdm9p
ZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7Cisg
ICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAiLCBs
aXN0RHVtcChhcmdzKSwgIiAgOyAiLCAqb3JpZ2luKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3Qu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVmaW5lIEFpcklu
c3RfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250
ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAz
PiBBcmdMaXN0OworCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAg
ICAgICA6IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0
KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCisgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAsIG9y
aWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisg
ICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1
bWVudHMpCisgICAgICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9yaWdp
bikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9w
Y29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAgICAg
IDogYXJncyhXVEY6Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQor
ICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhh
dCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQg
dG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQg
dG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0
aGVuIHlvdSdyZQorICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhp
cyBvbmx5IHdhbGtzIHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFu
ZCBpdCBkb2Vzbid0IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcgYXJnIDogYXJncykKKyAg
ICAgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0eXBl
ZGVmIHZvaWQgRWFjaEFyZ0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJnOjpUeXBlKTsKKyAg
ICAKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUpLiBUaGlz
IGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5y
Yi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEFyZyhj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdpdGgg
KHRtcCwgcm9sZSwgdHlwZSkuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2
b2lkIGZvckVhY2hUbXAoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZv
ckVhY2hBcmdSb2xlKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwg
dHlwZSwgZnVuY3Rvcik7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGluZyBj
YW4gYmUgZWl0aGVyIEFyZyBvciBUbXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
OworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGEgU3BlY2lh
bCouIFRoaXMgdW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAgYm9vbCBoYXNT
cGVjaWFsKCkgY29uc3Q7CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFsIHJlZ2lzdGVy
cyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5jeSwK
KyAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSBy
ZXR1cm5zIHRydWUuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygp
OworCisgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4g
VGhpcyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisgICAgLy8gdGhh
dCBmb3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgaWYgaGFz
U3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoY29u
c3QgUmVnaXN0ZXJTZXQmKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gb25lIG9m
IHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0
ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNWYWxpZEZvcm0o
KTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBmb3Jt
IHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisgICAgLy8g
Zm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChvciBhIFN0YWNr
U2xvdCBvciBDYWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVuIGluZGV4PyBT
cGlsbGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvIGZpbmQgVG1w
cyB0aGF0IG5lZWQgc3BpbGxpbmc7CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBpdCBjYWxscyB0
aGlzIHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBhbiBBcmc6OkFk
ZHIuIElmIGl0CisgICAgLy8gZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0aGF0
IEFyZydzIGZvckVhY2hUbXAgdG8gZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4KKyAgICAvLwor
ICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRv
ci5yYi4KKyAgICBib29sIGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8v
IEdlbmVyYXRlIHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBpcywgbGlrZSwg
bGl0ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRlcm1pbmFsLCBp
dCByZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0aGUgInRoZW4i
IGNhc2UsIHdpdGggdGhlICJlbHNlIgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10aHJvdWdoLiBU
aGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25D
b250ZXh0Jik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIEFy
Z0xpc3QgYXJnczsKKyAgICBWYWx1ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVlIHRoYXQgdGhp
cyBvcmlnaW5hdGVkIGZyb20uCisgICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckluc3RfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0SW5saW5lc19oCisjZGVmaW5lIEFpcklu
c3RJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVV
dGlscy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWxzLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5o
IgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRm9yRWFjaDsK
K3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8VG1wPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAgICB9Cit9
OwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1bmN0b3IpOworICAgIH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBm
b3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgRm9yRWFjaDxUaGluZz46OmZv
ckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitib29sIEluc3Q6Omhhc1NwZWNpYWwoKSBjb25z
dAoreworICAgIHJldHVybiBhcmdzLnNpemUoKSAmJiBhcmdzWzBdLmlzU3BlY2lhbCgpOworfQor
Citjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sKKyAgICBy
ZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7Cit9CisK
K3ZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycykKK3sKKyAgICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVycygq
dGhpcywgdXNlZFJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBib29sIGlzU2hpZnRWYWxpZChJbnN0
JiBpbnN0KQoreworI2lmIENQVShYODYpCisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9PSBUbXAo
WDg2UmVnaXN0ZXI6OmN4KTsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30gICAK
KworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbHVlKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJu
IGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gQWlySW5zdElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyTGl2ZW5lc3NfaAorI2RlZmluZSBBaXJMaXZlbmVzc19oCisKKyNpbmNsdWRlICJB
aXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIFlvdSBjYW4gY29tcHV0ZSBs
aXZlbmVzcyBvdmVyIFRtcCdzIG9yIG92ZXIgQXJnJ3MuIElmIHlvdSBjb21wdXRlIG92ZXIgQXJn
J3MsIHlvdSBnZXQgYm90aAorLy8gc3RhY2sgbGl2ZW5lc3MgYW5kIHRtcCBsaXZlbmVzcy4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFRoaW5nPgorY2xhc3MgTGl2ZW5lc3MgeworcHVibGljOgorICAgIExp
dmVuZXNzKENvZGUmIGNvZGUpCisgICAgeworICAgICAgICBtX2xpdmVBdEhlYWQucmVzaXplKGNv
ZGUuc2l6ZSgpKTsKKyAgICAgICAgbV9saXZlQXRUYWlsLnJlc2l6ZShjb2RlLnNpemUoKSk7CisK
KyAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gc2VlbjsKKworICAgICAgICBib29sIGNoYW5n
ZWQgPSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgY2hhbmdl
ZCA9IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5z
aXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IGNvZGUuYXQoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgTG9jYWxDYWxjIGxvY2Fs
Q2FsYygqdGhpcywgYmxvY2spOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRl
eCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykKKyAgICAgICAgICAgICAgICAgICAgbG9j
YWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgICAgIGJv
b2wgZmlyc3RUaW1lID0gc2Vlbi5hZGQoYmxvY2spOworICAgICAgICAgICAgICAgIGlmICghZmly
c3RUaW1lICYmIGxvY2FsQ2FsYy5saXZlKCkgPT0gbV9saXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7
CisgICAgICAgICAgICAgICAgbV9saXZlQXRIZWFkW2Jsb2NrXSA9IGxvY2FsQ2FsYy50YWtlTGl2
ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgSGFzaFNl
dDxUaGluZz4mIGxpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKKyAgICBjb25zdCBIYXNo
U2V0PFRoaW5nPiYgbGl2ZUF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBtX2xpdmVBdFRhaWxbYmxvY2tdOworICAgIH0KKworICAgIC8vIFRoaXMg
Y2FsY3VsYXRvciBoYXMgdG8gYmUgcnVuIGluIHJldmVyc2UuCisgICAgY2xhc3MgTG9jYWxDYWxj
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIExvY2FsQ2FsYyhMaXZlbmVzcyYgbGl2ZW5lc3MsIEJh
c2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2xpdmUobGl2ZW5lc3MtPmxpdmVBdFRh
aWwoYmxvY2spKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBIYXNoU2V0
PFRoaW5nPiYgbGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZTsgfQorICAgICAgICBIYXNoU2V0
PFRoaW5nPiYmIHRha2VMaXZlKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fbGl2ZSk7IH0KKworICAg
ICAgICB2b2lkIGV4ZWN1dGUoSW5zdCYgaW5zdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8g
Rmlyc3QgaGFuZGxlIGRlZidzLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAg
ICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5
cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7
CisKKyAgICAgICAgICAgIC8vIE5leHQgaGFuZGxlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAg
ICAgICAgICBpZiAoaW5zdC5oYXNTcGVjaWFsKCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0LmV4
dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2goCisgICAgICAgICAgICAgICAgICAgIFt0aGlzXSAo
UmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShUaGluZyhy
ZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmluYWxseSBoYW5kbGUgdXNlJ3MuCisgICAgICAg
ICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcm
IGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc1VzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5hZGQo
YXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgSGFzaFNldDxUaGluZz4gbV9saXZlOworICAgIH07CisgICAgCitwcml2YXRlOgorICAg
IEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdEhlYWQ7CisgICAg
SW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0VGFpbDsKK307CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckxpdmVuZXNz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBTeWxsYWJ1czoKKyMKKyMgUm9sZXMgYW5k
IHR5cGVzOgorIyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZh
bHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUK
KyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2
YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpGID0+
IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkYgPT4gdXNlIGFuZCBkZWYg
b2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIworIyBBcmd1bWVudCBraW5kczoKKyMgVG1w
ID0+IHRlbXBvcmFyeSBvciByZWdpc3RlcgorIyBJbW0gPT4gMzItYml0IGltbWVkaWF0ZSBpbnQK
KyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0CisjIEFkZHIgPT4gYWRkcmVzcyBhcyB0ZW1wb3Jhcnkv
cmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJhc2VJbmRleCBhZGRyZXNzCisjIEFicyA9PiBB
YnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhlIHBhcnNlciB2aWV3cyB0aGVzZSB0aGluZ3MgYXMga2V5
d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0aGF0IHRoZXkgZmFsbCBpbnRvIHR3byBkaXN0aW5jdCBj
bGFzc2VzCisjIG9mIHRoaW5ncy4gU28sIGFsdGhvdWdoIHRoaXMgZmlsZSB1c2VzIGEgcGFydGlj
dWxhciBpbmRlbnRhdGlvbiBzdHlsZSwgbm9uZSBvZiB0aGUgd2hpdGVzcGFjZSBvcgorIyBldmVu
IG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBwYXJzZXIuIEZvciBleGFtcGxlLCB5b3Ug
Y291bGQgd3JpdGU6CisjCisjIEZvbzQyIFU6RywgVUQ6RiBJbW0sIFRtcCBBZGRyLCBUbXAKKyMK
KyMgQW5kIHRoZSBwYXJzZXIgd291bGQga25vdyB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXM6Cisj
CisjIEZvbzQyIFU6RywgVUQ6RgorIyAgICAgSW1tLCBUbXAKKyMgICAgIEFkZHIsIFRtcAorIwor
IyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1Y3Rpb24gdGhhdCB1c2VzIGEgR1BSIG9yIGFuIGludCBp
bW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBhIGZsb2F0IHJlZ2lzdGVyLgorCisjIE5vdGUgdGhhdCB0
aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBsZWFkaW5nIGNhcGl0YWwgKEFkZDMyKSBidXQgbXVzdCBj
b3JyZXNwb25kIHRvIE1hY3JvQXNzZW1ibGVyCisjIEFQSSB0aGF0IGhhcyBhIGxlYWRpbmcgbG93
ZXItY2FzZSAoYWRkMzIpLgorCitOb3AKKworQWRkMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAK
KyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAgIEFkZHIsIFRtcAorICAgIFRtcCwgQWRk
cgorCitBZGQzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRtcAorCitBbmQzMiBVOkcs
IFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAgVG1wLCBBZGRyCisgICAgQWRk
ciwgVG1wCisgICAgSW1tLCBBZGRyCisKK0xzaGlmdDMyIFU6RywgVUQ6RworICAgIFRtcCosIFRt
cAorICAgIEltbSwgVG1wCisKK011bDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgQWRk
ciwgVG1wCisKK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAg
SW1tNjQsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkICMgVGhpcyBtZWFucyB0aGF0ICJNb3Zl
IEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMgImxvYWQiIG5vdCAibW92ZSIuCisgICAg
VG1wLCBBZGRyIGFzIHN0b3JlCisKK01vdmVEb3VibGUgVTpGLCBEOkYKKyAgICBUbXAsIFRtcAor
ICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlRG91Ymxl
CisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1wLCBUbXAKKworTW92ZURvdWJsZVRv
NjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAorCitCcmFuY2hBZGQzMiBVOkcsIFU6RywgVUQ6RyAv
YnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAg
IFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQs
IEFkZHIsIFRtcAorCitCcmFuY2hNdWwzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVz
Q29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoU3ViMzIgVTpH
LCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwg
SW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIK
KyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9icmFuY2gK
KyAgICBSZXNDb25kLCBUbXAKKworSnVtcCAvYnJhbmNoCisKK1JldAorCisjIEFpciBhbGxvd3Mg
Zm9yIGV4b3RpYyBiZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVybWluZWQgZW50
aXJlbHkgYnkgdGhlIFNwZWNpYWwgb3BlcmFuZCwKKyMgd2hpY2ggbXVzdCBiZSB0aGUgZmlyc3Qg
b3BlcmFuZC4KK3NwZWNpYWwgUGF0Y2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJQaGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0Nv
bW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogbmFtZSkK
KyAgICA6IG1fY29kZShjb2RlKQorICAgICwgbV9uYW1lKG5hbWUpCit7CisgICAgaWYgKHNob3Vs
ZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJBaXIgYmVmb3JlICIs
IG5hbWUsICI6Iik7CisgICAgICAgIG91dC5wcmludChjb2RlKTsKKyAgICB9CisKKyAgICBpZiAo
c2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3Ry
aW5nKGNvZGUpOworfQorCitQaGFzZVNjb3BlOjp+UGhhc2VTY29wZSgpCit7CisgICAgaWYgKHNo
b3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShjb2RlLCBtX25h
bWUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29w
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VT
Y29wZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQ
aGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclBoYXNlU2NvcGVf
aAorI2RlZmluZSBBaXJQaGFzZVNjb3BlX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIENvZGU7CisKK2NsYXNzIFBoYXNlU2NvcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFBoYXNlU2NvcGUpOworcHVibGljOgorICAgIFBoYXNlU2NvcGUoQ29kZSYsIGNvbnN0IGNoYXIq
IG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgc2hvdWxkIGRvIHZhbGlkYXRpb24K
KworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9uYW1lOwor
ICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHNJblByaW9y
aXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBWZWN0b3I8R1BSUmVnPiogcmVzdWx0OworICAgIHN0
YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBv
bmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEdQUlJl
Zz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJlZzo6YWxsR1BScygpOworICAg
ICAgICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAg
ICAgICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3Rl
cnMoKSk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6
OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbCkg
eworICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbCkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsZWVT
YXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3By
KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdDsKK30K
KworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgc3Rh
dGljIFZlY3RvcjxGUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9u
Y2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8RlBSUmVnPigpOworICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgYWxsID0gUmVnOjphbGxGUFJzKCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBj
YWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAg
ICAgIGZvciAoUmVnIHJlZyA6IGFsbCkgeworICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbCkgeworICAg
ICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAg
ICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsK
KyAgICByZXR1cm4gKnJlc3VsdDsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9y
aXR5T3JkZXIoQXJnOjpUeXBlIHR5cGUpCit7CisgICAgc3RhdGljIFZlY3RvcjxSZWc+KiByZXN1
bHRbQXJnOjpudW1UeXBlc107CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAg
c3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAg
IHJlc3VsdFtBcmc6OkdQXSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChH
UFJSZWcgcmVnIDogZ3Byc0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3Vs
dFtBcmc6OkdQXS0+YXBwZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQ
XSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChGUFJSZWcgcmVnIDogZnBy
c0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXS0+YXBw
ZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHRbdHlwZV07Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJSZWdpc3RlclByaW9yaXR5X2gK
KyNkZWZpbmUgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNp
bmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpOworY29uc3Qg
VmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQmFuaz4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjsKK3RlbXBsYXRlPD4gc3Ry
dWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9y
PEdQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGdwc0luUHJpb3JpdHlPcmRlcigp
OyB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUklu
Zm8+IHsKKyAgICBjb25zdCBWZWN0b3I8RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1
cm4gZnBzSW5Qcmlvcml0eU9yZGVyKCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+
Citjb25zdCBWZWN0b3I8QmFuazo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRlcigp
Cit7CisgICAgcmV0dXJuIFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0
eU9yZGVyKCk7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFy
Zzo6VHlwZSk7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2luY2x1ZGUgPHd0Zi9TdHJp
bmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK1NwZWNpYWw6OlNwZWNpYWwoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1f
bmFtZShuYW1lKQorICAgICwgbV9pbmRleChVSU5UX01BWCkKK3sKK30KKworU3BlY2lhbDo6flNw
ZWNpYWwoKQoreworfQorCitDU3RyaW5nIFNwZWNpYWw6Om5hbWUoKSBjb25zdAoreworICAgIFN0
cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIHJldHVybiBvdXQu
dG9DU3RyaW5nKCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4KTsKKyAgICBkdW1wSW1wbChvdXQpOwor
ICAgIGlmIChtX2luZGV4ICE9IFVJTlRfTUFYKQorICAgICAgICBvdXQucHJpbnQobV9pbmRleCk7
Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoKnRoaXMsICI6ICIpOworICAgIGRlZXBEdW1wSW1wbChvdXQpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBBaXJTcGVjaWFsX2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNpbmNsdWRlICJBaXJJ
bnN0LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIEdlbmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICImIjsK
KyAgICAKKyAgICBTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+U3BlY2lhbCgpOworCisgICAgQ1N0
cmluZyBuYW1lKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0Jiwg
Y29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzVmFsaWQoSW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRzU3Rh
Y2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMgY2Fs
bGVkIG9uIGZvciBlYWNoIEluc3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0IHRo
ZXJlIGlzIG5vIHdheSB0bworICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRzIHVz
ZWQgZnJvbSBqdXN0IG9uZSBJbnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUuIFNv
LAorICAgIC8vIGlmIHlvdSB3YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRvIGdl
bmVyYXRlKCksIHRoZW4geW91IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkgR2Vu
ZXJhdGUgQWlyIHRoYXQgc3RhcnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRjaCBJ
bnN0LCBhbmQgdGhlbiBtZXJnZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlzIGlz
IHByb2JhYmx5IG5vdCBncmVhdCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNl
IHRoYXQKKyAgICAvLyAgICBBaXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3VjaCBk
dXBsaWNhdGlvbiBkaWRuJ3QgY2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAgICAv
LyAgICByZWdpc3RlciBhc3NpZ25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUgU3Bl
Y2lhbCBtYWludGFpbiBhIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3JrcyBi
ZWNhdXNlIHRoZSBhbmFseXNpcworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNhbGwg
aXMgcGVyZm9ybWVkIGp1c3QgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMgbm8g
d2F5CisgICAgLy8gICAgZm9yIHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5zdHMg
dG8gYmUgcmVhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAgICBj
b25zdWx0IHRoZSBIYXNoTWFwLgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291bGQg
dXNlICgxKSBhbmQgZmlyZSB1cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxscy4K
KyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIHJl
cG9ydFVzZWRSZWdpc3RlcnMoKSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAv
LyBhcyBnZW5lcmF0ZSgpLiBJZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291bGQg
anVzdCBoYXZlIGVhY2ggU3BlY2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVjdG9y
IG9mIFJlZ2lzdGVyU2V0J3MgYW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUgcmln
aHQgb3JkZXIgaW4KKyAgICAvLyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZmZXJl
bmNlIGlzIHVubGlrZWx5IHRvIGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAgIC8v
IHBlcmZvcm1hbmNlIG9mIHRoZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8vIEN1
cnJlbnRseSwgd2UgZG8gKDEpIGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAgIAor
ICAgIHZpcnR1YWwgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBl
cnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBj
b25zdCA9IDA7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBjb25z
dCBjaGFyKiBtX25hbWU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERlZXBT
cGVjaWFsRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFNwZWNpYWxEaW1wKFNwZWNpYWwqIHNwZWNp
YWwpCisgICAgICAgIDogbV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3Bl
Y2lhbCkKKyAgICAgICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgU3BlY2lhbCogbV9zcGVjaWFsOworfTsKKworRGVlcFNwZWNpYWxEdW1wIGRlZXBEdW1wKFNw
ZWNpYWwqIHNwZWNpYWwpCit7CisgICAgcmV0dXJuIERlZXBTcGVjaWFsRHVtcChzcGVjaWFsKTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3Bl
Y2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorCisj
aW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQoreworICAg
IFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxFdmVyeXRoaW5nIik7CisKKyAgICAv
LyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBwb2lu
dCBpbiBldmVyeSBiYXNpYyBibG9jay4KKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8
UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBMaXZlbmVzczxU
bXA+IGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
CisgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJs
b2NrKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkg
KyAxKTsKKworICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVkIGlu
ZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0ID0gdXNlZFJlZ2lzdGVyc1tibG9j
a11baW5kZXhdOworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbG9jYWxDYWxjLmxpdmUoKSkg
eworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAg
c2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
c2V0VXNlZFJlZ2lzdGVycyhibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAg
ICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAg
ICAgICBzZXRVc2VkcmVnaXN0ZXJzKGluc3RJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgorICAgIFZlY3RvcjxTdGFj
a1Nsb3QqPiBhbGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOworICAgIGZvciAodW5zaWduZWQg
dHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgQXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgpIHsK
KyAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90c1t0
eXBlSW5kZXhdOworICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6VHlw
ZT4odHlwZUluZGV4KTsKKyAgICAgICAgc3RhY2tTbG90cy5yZXNpemUoY29kZS5udW1UbXBzKHR5
cGUpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNvZGUubnVtVG1wcyh0eXBl
KTsgdG1wSW5kZXgtLTspCisgICAgICAgICAgICBzdGFja1Nsb3RzW3RtcEluZGV4XSA9IGNvZGUu
YWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgfQorCisgICAg
SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBSZWdpc3Rl
clNldCYgc2V0QmVmb3JlID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4XTsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRBZnRlciA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJ
bmRleCArIDFdOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgp
OworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAoVG1w
JiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBhbGxTdGFja1Nsb3Rz
W3R5cGVdW3RtcC50bXBJbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFy
Zzo6c3RhY2soc3RhY2tTbG90KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGZp
Z3VyZSBvdXQgYSByZWdpc3RlciB0byB1c2UuIEhvdyB3ZSBkbyB0aGF0IGRlcGVuZHMgb24gdGhl
IHJvbGUuCisgICAgICAgICAgICAgICAgICAgIFJlZyBjaG9zZW5SZWc7CisgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNl
OgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlP
cmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3Jl
LmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5z
ZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVn
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkRlZjoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIo
dHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEFmdGVyLmdldChy
ZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlRGVmOgorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcp
ICYmICFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5S
ZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKGNob3NlblJlZyk7CisKKyAg
ICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAg
ICAgICAgT3Bjb2RlIG1vdmUgPSB0eXBlID09IEFyZzo6R1AgPyBNb3ZlIDogTW92ZURvdWJsZQor
CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1w
LCBhcmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorI2RlZmluZSBB
aXJTcGlsbEV2ZXJ5dGhpbmdfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaXMgYSBwaGFzZSBmb3IgdGVz
dGluZy4gSXQgYmVoYXZlcyBsaWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGluIHRoZSBzZW5zZSB0
aGF0IGl0CisvLyBlbGltaW5hdGVzIHRlbXBvcmFyaWVzIGZyb20gdGhlIHByb2dyYW0uIEl0IGFj
Y29tcGxpc2hlcyB0aGlzIGJ5IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8vIHRlbXBvcmFyaWVzLiBU
aGUgcmVzdWx0aW5nIGNvZGUgaXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVmZmljaWVudC4gVGhpcyBw
aGFzZSBpcyBncmVhdCBpZiB5b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUgaXMgYSBidWcgaW4gdGhl
IHJlZ2lzdGVyIGFsbG9jYXRvci4gWW91IGNhbiBjb25maXJtIHRoaXMgYnkgcnVubmluZyB0aGlz
CisvLyBwaGFzZSBpbnN0ZWFkIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisvLworLy8gTm90
ZSB0aGF0IGV2ZW4gdGhvdWdoIHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBlc3QgdGhpbmcgcG9z
c2libGUsIGl0J3Mgbm90IGV2ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1bGFybHkgZWZmaWNp
ZW50IHdheS4gU28sIGRvbid0IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcgdGhpcyBwaGFzZSB0
byByZWR1Y2UgY29tcGlsZXIKKy8vIGxhdGVuY3kuIElmIHlvdSB3YW50ZWQgdG8gZG8gdGhhdCwg
eW91IHNob3VsZCBjb21lIHVwIHdpdGggYSBjbGV2ZXIgYWxnb3JpdGhtIGluc3RlYWQgb2YgdXNp
bmcKKy8vIHRoaXMgc2lsbHkgdGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmKTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3BpbGxF
dmVyeXRoaW5nX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFj
a1Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0
YWNrU2xvdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3RhY2tTbG90
X2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90X2gKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5o
IgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTdGFja1Nsb3R2
YWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFN0YWNrU2xvdCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU3RhY2tTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNp
emU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldXRybiBtX2tpbmQ7IH0K
KyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFN0
YWNrU2xvdFZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAgIFN0
YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQg
a2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fYnl0ZVNpemUoYnl0ZVNp
emUpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAg
ICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQg
bV9ieXRlU2l6ZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFN0YWNrU2xvdEtpbmQgbV9r
aW5kOworICAgIFN0YWNrU2xvdFZhbHVlKiBtX3ZhbHVlOworfTsKKworY2xhc3MgRGVlcFN0YWNr
U2xvdER1bXAgeworcHVibGljOgorICAgIERlZXBTdGFja1Nsb3REdW1wKFN0YWNrU2xvdCogc2xv
dCkKKyAgICAgICAgOiBtX3Nsb3Qoc2xvdCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zbG90KQorICAg
ICAgICAgICAgbV9zbG90LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdGFja1Nsb3Qq
IG1fc2xvdDsKK307CisKK0RlZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1wKFN0YWNrU2xvdCogc2xv
dCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAoc2xvdCk7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBUbXA6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAg
IG91dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
aXNSZWcoKSkgeworICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGlzR1BUbXAoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0bXAiLCBn
cFRtcEluZGV4KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCIl
ZnRtcCIsIGZwVG1wSW5kZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNpbmNsdWRl
ICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCisvLyBBIFRtcCBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIGEgcmVnaXN0ZXIuIEl0IGNhbiBi
ZSB1c2VkIHRvIHJlZmVyIHRvIGFueSBHUFIgb3IgRlBSLiBJdCBjYW4gYWxzbworLy8gYmUgdXNl
ZCB0byByZWZlciB0byBhbiB1bmFsbG9jYXRlZCByZWdpc3RlciAoaS5lLiBhIHRlbXBvcmFyeSku
IExpa2UgbWFueSBBaXIgY2xhc3Nlcywgd2UgdXNlCisvLyBkZWxpYmVyYXRlbHkgdGVyc2UgbmFt
aW5nIHNpbmNlIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhpcyBuYW1lIGEgbG90LgorCitjbGFzcyBU
bXAgeworcHVibGljOgorICAgIFRtcCgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBUbXAoUmVnIHJlZykKKyAgICB7CisgICAgICAgIGlmIChyZWcp
IHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
ID0gZW5jb2RlR1BSKHJlZy5ncHIoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV92YWx1ZSA9IGVuY29kZUZQUihyZWcuZnByKCkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChjb25zdCBBcmcm
KTsKKworICAgIHN0YXRpYyBUbXAgZ3BUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7
CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlR1BU
bXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBU
bXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5kZXgpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZm9yUmF3VmFsdWUodW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV92YWx1ZSA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKworICAg
IGJvb2wgcmF3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBib29sIGlz
R1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFsdWUpOwor
ICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNF
bmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJv
b2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQUihtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAgIH0KKworICAg
IEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQUihtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChp
c0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVybiBmcHIoKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRt
cEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFRtcChtX3ZhbHVl
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKKyAgICAgICAg
cmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9
PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUbXAm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVG
UCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMSAtIGluZGV4OworICAg
IH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAg
ICByZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7
CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFIoRlBSUmVnIGZwcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlbmNvZGVGUChmcHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJSZWdp
c3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQVG1wKHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFz
dFJlZ2lzdGVyKCkpICsgMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2Rl
RlBUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlBSKE1h
Y3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEgLSBpbmRleDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdmFsdWUgPiAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQKGludCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA8IDA7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNFbmNvZGVkR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjps
YXN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBSKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgdmFs
dWUgPj0gZW5jb2RlZEZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSk7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiAhaXNFbmNvZGVkR1BSKHZhbHVlKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFRtcChpbnQgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmICFpc0VuY29kZWRGUFIodmFs
dWUpOworICAgIH0KKworICAgIHN0YXRpYyBHUFJSZWcgZGVjb2RlR1BSKGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdQUlJlZz4oCisgICAgICAgICAgICAodmFsdWUgLSBlbmNvZGVHUFIoTWFj
cm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSkpICsgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVn
aXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIEZQUlJlZyBkZWNvZGVGUFIoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQUih2YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPigKKyAgICAgICAgICAgIChlbmNvZGVGUFIoTWFjcm9B
c3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKSAtIHZhbHVlKSArCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNp
Z25lZCBkZWNvZGVHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNv
ZGVkR1BUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC0gKGVuY29kZUdQUihNYWNy
b0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSk7CisgICAgfQorCisgICAgc3RhdGljIHVu
c2lnbmVkIGRlY29kZUZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0Vu
Y29kZWRGUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gKGVuY29kZUZQUihNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxKSAtIHZhbHVlOworICAgIH0KKworICAgIC8vIDA6
IGVtcHR5IFRtcAorICAgIC8vIHBvc2l0aXZlOiBHUFJzIGFuZCB0aGVuIEdQIHRlbXBzLgorICAg
IC8vIG5lZ2F0aXZlOiBGUFJzIGFuZCB0aGVuIEZQIHRlbXBzLgorICAgIGludCBtX3ZhbHVlOwor
fTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyVG1w
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wSW5saW5lc19oCisj
ZGVmaW5lIEFpclRtcElubGluZXNfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAi
QWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworaW5saW5lIFRtcDo6VG1wKGNvbnN0IEFyZyYgYXJnKQoreworICAgICp0aGlzID0gYXJn
LnRtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBBaXJUbXBJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKworI2luY2x1ZGUgIkFpckNvZGUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitu
YW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihD
b2RlJiBjb2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQorICAg
ICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1f
ZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUo
Y29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVf
XywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBt
ZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAg
ICB7CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90czsKKyAgICAgICAgSGFz
aFNldDxCYXNpY0Jsb2NrKj4gdmFsaWRCbG9ja3M7CisgICAgICAgIEhhc2hTZXQ8U3BlY2lhbCo+
IHZhbGlkU3BlY2lhbHM7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29k
ZSkKKyAgICAgICAgICAgIHZhbGlkQmxvY2tzLmFkZChibG9jayk7CisgICAgICAgIGZvciAoU3Rh
Y2tTbG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIHZhbGlkU2xv
dHMuYWRkKHNsb3QpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBtX2NvZGUuc3Bl
Y2lhbHMoKSkKKyAgICAgICAgICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNwZWNpYWwpOworCisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAo
SW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBp
bnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWxpZFNsb3RzLmNvbnRhaW5zKGFyZy5zdGFja1Nsb3QoKSksICgiQXQgIiwgaW5z
dCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgU3BlY2lhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU3Bl
Y2lhbHMuY29udGFpbnMoYXJnLnNwZWNpYWwoKSksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVkFM
SURBVEUoaW5zdC5pc1ZhbGlkRm9ybSgpLCAoIkF0ICIsIGluc3QpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3Nv
cnMoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhzdWNj
ZXNzb3IpLCAoIkF0ICIsICpibG9jaykpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgor
ICAgIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVt
YmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAg
ICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdl
OworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAg
ICAgICBvdXQucHJpbnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAg
b3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVt
YmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4i
KTsKKyAgICAgICAgICAgIGlmIChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIg
ICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9
IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dC5wcmludChmYWlsdXJl
TWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIG91dC5w
cmludCgiQmVmb3JlICIsIHdoZW4sICI6XG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludChtX2R1
bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIG91dC5wcmludCgiQXQgdGltZSBvZiBmYWls
dXJlOlxuIik7CisgICAgICAgIG91dC5wcmludChtX2NvZGUpOworCisgICAgICAgIG91dC5wcmlu
dChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmls
ZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgp
OworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9kdW1w
QmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUo
Q29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sK
KyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIHdoZW4sIGR1bXBCZWZvcmUpOworICAgIHZh
bGlkYXRlci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJWYWxpZGF0ZV9oCisjZGVmaW5lIEFpclZhbGlk
YXRlX2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2b2lkIHZh
bGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVt
cEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MzQgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29k
ZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2FkcworICAgIGF0dHJf
YWNjZXNzb3IgOmJyYW5jaAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgc3BlY2lhbCkKKyAg
ICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gc3BlY2lhbAorICAgICAgICBA
YnJhbmNoID0gZmFsc2UKKyAgICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBvdmVy
bG9hZHMgPSBbXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQorICAg
ICAgICBuYW1lWzBdLmRvd25jYXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitjbGFz
cyBBcmcKKyAgICBhdHRyX3JlYWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFsaXpl
KHJvbGUsIHR5cGUpCisgICAgICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5cGUK
KyAgICBlbmQKK2VuZAorCitjbGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1
cmUsIDpmb3JtcworCisgICAgZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAg
ICAgQHNpZ25hdHVyZSA9IHNpZ25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3JtcworICAgIGVu
ZAorZW5kCisKK2NsYXNzIEtpbmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfYWNj
ZXNzb3IgOnNwZWNpYWwKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAgIEBuYW1l
ID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYgPT0o
b3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAgQG5hbWUg
PT0gb3RoZXIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFtZSBh
bmQgQHNwZWNpYWwgPT0gb3RoZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAg
IGRlZiBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgICAgIGlmIGtpbmQgPT0gIkFkZHIiCisgICAg
ICAgICAgICBbIkFkZHIiLCAiU3RhY2tTbG90IiwgIkNhbGxBcmciXQorICAgICAgICBlbHNlCisg
ICAgICAgICAgICBba2luZF0KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgYXJnS2lu
ZHMKKyAgICAgICAgS2luZC5hcmdLaW5kcyhraW5kKQorICAgIGVuZAorZW5kCisKK2NsYXNzIEZv
cm0KKyAgICBhdHRyX3JlYWRlciA6a2luZHMsIDphbHROYW1lCisKKyAgICBkZWYgaW5pdGlhbGl6
ZShraW5kcywgYWx0TmFtZSkKKyAgICAgICAgQGtpbmRzID0ga2luZHMKKyAgICAgICAgQGFsdE5h
bWUgPSBhbHROYW1lCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFk
ZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVO
YW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBA
bGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAg
ICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBU
b2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5p
dGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAg
ICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAg
ICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5z
dHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAg
ICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcg
PX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5n
Lmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJv
cigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNl
ICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2Ug
IlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBl
bmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFt
ZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAg
IHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xB
XCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4g
L1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51
bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBKFthLXpBLVowLTlfXSspLworICAgICAgICAgICAg
cmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYp
CisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwg
aWdub3JlCisgICAgICAgIHdoZW4gL1xBWyw6KlwvXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBU
b2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBl
bHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVO
YW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0u
aW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAg
ZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzVUQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xB
KChVKXwoRCl8KFVEKSlcWi8KK2VuZAorCitkZWYgaXNHRih0b2tlbikKKyAgICB0b2tlbiA9fiAv
XEEoKEcpfChGKSlcWi8KK2VuZAorCitkZWYgaXNLaW5kKHRva2VuKQorICAgIHRva2VuID1+IC9c
QSgoVG1wKXwoSW1tKXwoSW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCkp
XFovCitlbmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICBpc1VEKHRva2VuKSBvciBpc0dG
KHRva2VuKSBvciBpc0tpbmQodG9rZW4pIG9yCisgICAgICAgIHRva2VuID09ICJzcGVjaWFsIiBv
ciB0b2tlbiA9PSAiYXMiCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tl
biA9fiAvXEEoW2EtekEtWjAtOV9dKylcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQK
KworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAg
ICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAg
ZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisg
ICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFy
c2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBh
cnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQu
ZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxl
IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBh
dCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBl
bmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJv
cigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBh
ZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVz
dWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZp
ZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAg
ICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lUm9sZQorICAgICAgICByZXN1bHQg
PSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgcm9sZSAoVSwgRCwg
b3IgVUQpIikgdW5sZXNzIGlzVUQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJl
c3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVUeXBlCisgICAgICAgIHJlc3VsdCA9IHRv
a2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCB0eXBlIChHIG9yIEYpIikg
dW5sZXNzIGlzR0YocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAg
IGVuZAorCisgICAgZGVmIGNvbnN1bWVLaW5kCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmlu
ZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEltbTY0LCBUbXAsIEFk
ZHIsIEluZGV4LCBSZWxDb25kLCBvciBSZXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQor
ICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIHBhcnNl
CisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIAorICAgICAgICBsb29wIHsKKyAgICAgICAg
ICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgaWYgdG9r
ZW4gPT0gInNwZWNpYWwiCisgICAgICAgICAgICAgICAgY29uc3VtZSgic3BlY2lhbCIpCisgICAg
ICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAg
ICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIHJl
c3VsdFtvcGNvZGVOYW1lXQorCisgICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0g
T3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCB0cnVlKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAg
aWYgcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IHJlc3Vs
dFtvcGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3Zl
cmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBPcGNvZGUubmV3KG9wY29kZU5h
bWUsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNv
ZGUKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFtd
CisgICAgICAgICAgICAgICAgZm9ybXMgPSBbXQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIGlmIGlzVUQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcm9sZSA9IGNvbnN1bWVSb2xlCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb25zdW1l
VHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBz
aWduYXR1cmUgPDwgQXJnLm5ldyhyb2xlLCB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gIi8iCisg
ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIi8iKQorICAgICAgICAgICAgICAgICAgICBjb25z
dW1lKCJicmFuY2giKQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUuYnJhbmNoID0gdHJ1ZQor
ICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgaXNLaW5kKHRva2VuKQor
ICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRz
ID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBuaWwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzIDw8
IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
dG9rZW4gPT0gIioiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5sZXNzIGtpbmRzWy0xXS5uYW1lID09ICJUbXAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzWy0xXS5zcGVjaWFsID0gdHJ1
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIqIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgdG9rZW4gPT0gImFzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1
bWUoImFzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0gY29uc3VtZUlk
ZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZv
ciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5ndGggPT0gc2lnbmF0dXJlLmxlbmd0aAorICAg
ICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Iga2luZC5uYW1lID09ICJJbW02NCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS5yb2xlICE9ICJV
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBo
YXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
c2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi1nZW5l
cmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KGtpbmRzLCBh
bHROYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIGlzS2luZCh0b2tl
bikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgaWYgc2lnbmF0dXJlLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAgICAgIHJh
aXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMAorICAgICAgICAgICAgICAgICAgICBmb3JtcyA8
PCBGb3JtLm5ldyhbXSwgbmlsKQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAg
ICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9hZC5uZXcoc2lnbmF0dXJlLCBmb3JtcykKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCitlbmQK
KworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKCRm
aWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVzID0gcGFyc2VyLnBhcnNlCisKK2RlZiB3cml0
ZUgoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5oIiwgInciKSB7Cisg
ICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRl
ZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0
ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2lmbmRlZiBBaXIje2ZpbGVuYW1lfV9o
IgorICAgICAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQWlyI3tmaWxlbmFtZX1faCIKKworICAgICAg
ICB5aWVsZCBvdXRwCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBBaXIj
e2ZpbGVuYW1lfV9oIgorICAgIH0KK2VuZAorCitkZWYgd3JpdGVDUFAoZmlsZW5hbWUpCisgICAg
RmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5jcHAiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwK
KyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5l
cmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAg
ICAgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcImNvbmZpZy5oXCIiCisgICAgICAgIG91dHAucHV0
cyAiI2luY2x1ZGUgXCJBaXIje2ZpbGVuYW1lfS5oXCIiCisKKyAgICAgICAgeWllbGQgb3V0cAor
ICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZSIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAu
cHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAg
ICBvdXRwLnB1dHMgImVudW0gT3Bjb2RlIDogaW50MTZfdCB7IgorICAgICRvcGNvZGVzLmtleXMu
c29ydC5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICAj
e29wY29kZX0sIgorICAgIH0KKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInN0
YXRpYyBjb25zdCB1bnNpZ25lZCBudW1PcGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIK
KyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCisgICAgCisg
ICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJjbGFzcyBQcmlu
dFN0cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7IgorICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2Ug
V1RGIgorfQorCit3cml0ZUNQUCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5w
dXRzICIjaW5jbHVkZSBcInd0Zi9QcmludFN0cmVhbS5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1l
c3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJ1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
OyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBP
cGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICIgICAgc3dp
dGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMua2V5cy5lYWNoIHsKKyAgICAgICAgfCBvcGNv
ZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICBjYXNlICN7b3Bjb2RlfToiCisgICAgICAgIG91
dHAucHV0cyAiICAgICAgICBvdXQucHJpbnQoXCIje29wY29kZX1cIik7IgorICAgICAgICBvdXRw
LnB1dHMgIiAgICAgICAgcmV0dXJuOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICIgICAgfSIKKyAg
ICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRw
LnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKKyMgRnJv
bSBoZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBz
aW5jZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuCisjIG1hdGNoZXIuCisKK2RlZiBt
YXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXgsIGNvbHVtbkdldHRlciwg
ZmlsdGVyLCBjYWxsYmFjaykKKyAgICByZXR1cm4gaWYgZm9ybXMubGVuZ3RoID09IDAKKworICAg
IGlmIGZpbHRlcltmb3Jtc10KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBpZiBjb2x1
bW5JbmRleCA+PSBmb3Jtc1swXS5raW5kcy5sZW5ndGgKKyAgICAgICAgcmFpc2UgdW5sZXNzIGZv
cm1zLmxlbmd0aCA9PSAxCisgICAgICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQorICAgICAgICByZXR1
cm4KKyAgICBlbmQKKyAgICAKKyAgICBncm91cHMgPSB7fQorICAgIGZvcm1zLmVhY2ggeworICAg
ICAgICB8IGZvcm0gfAorICAgICAgICBraW5kID0gZm9ybS5raW5kc1tjb2x1bW5JbmRleF0ubmFt
ZQorICAgICAgICBpZiBncm91cHNba2luZF0KKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA8PCBm
b3JtCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA9IFtmb3JtXQorICAg
ICAgICBlbmQKKyAgICB9CisKKyAgICBpZiBzcGVlZCA9PSA6ZmFzdCBhbmQgZ3JvdXBzLmxlbmd0
aCA9PSAxCisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRl
eCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuCisg
ICAgZW5kCisKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tjb2x1bW5HZXR0ZXJbY29sdW1uSW5k
ZXhdfSkgeyIKKyAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgfCBrZXksIHZhbHVlIHwK
KyAgICAgICAgb3V0cC5wdXRzICIjaWYgVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQi
CisgICAgICAgIEtpbmQuYXJnS2luZHMoa2V5KS5lYWNoIHsKKyAgICAgICAgICAgIHwgYXJnS2lu
ZCB8CisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgQXJnOjoje2FyZ0tpbmR9OiIKKyAgICAg
ICAgfQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCB2YWx1ZSwgY29sdW1uSW5kZXgg
KyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSIgaWYg
a2V5ID09ICJJbW02NCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRw
LnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92
ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9
LT5vcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29k
ZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlm
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBl
bHNlCisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMu
c2l6ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkKKyAgICAgICAgICAgIG91dHAucHV0cyAic3dp
dGNoICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3Zlcmxv
YWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgeWllbGQg
b3Bjb2RlLCBvdmVybG9hZAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBu
ZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVy
bG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAgICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZv
cm0ob3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQs
IGluc3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2Rl
LnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBj
b2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgIiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRl
eH1dLmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBm
YWxzZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgIHwg
Zm9ybSB8CisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQu
Zm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisg
ICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBv
dXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIAorICAgIG91dHAu
cHV0cyAiaW5saW5lIGJvb2wgb3BnZW5IaWRkZW5UcnV0aCgpIHsgcmV0dXJuIHRydWU7IH0iCisg
ICAgb3V0cC5wdXRzICIjZGVmaW5lIE9QR0VOX1JFVFVSTih2YWx1ZSkgZG8ge1xcIgorICAgIG91
dHAucHV0cyAiICAgIGlmIChvcGdlbkhpZGRlblRydXRoKCkpXFwiCisgICAgb3V0cC5wdXRzICIg
ICAgICAgIHJldHVybiB2YWx1ZTtcXCIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1
dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBJbnN0
Ojpmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIgorICAgIG91dHAucHV0cyAieyIK
KyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAgIHwg
b3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAg
ICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1swXSwgQXJnOjpVc2UsIEFyZzo6R1ApOyAvLyBUaGlz
IGlzIGJhc2ljYWxseSBib2d1cywgYnV0IGl0IHdvcmtzIGYgYW5hbHlzZXMgbW9kZWwgU3BlY2lh
bCBhcyBhbiBpbW1lZGlhdGUuIgorICAgICAgICAgICAgb3V0cC5wdXRzICJhcmdzWzBdLnNwZWNp
YWwoKS0+Zm9yRWFjaEFyZygqdGhpcywgc2NvcGVkTGFtYmRhPEVhY2hBcmdDYWxsYmFjaz4oZnVu
Y3RvcikpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmVh
Y2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKKyAgICAgICAg
ICAgICAgICByb2xlID0gbmlsCisgICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQorICAgICAg
ICAgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgorICAg
ICAgICAgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVmIgor
ICAgICAgICAgICAgICAgIHdoZW4gIlVEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVz
ZURlZiIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7cm9sZX0sIEFyZzo6I3thcmcu
dHlwZX1QKTsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1
dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4i
CisgICAgb3V0cC5wdXRzICJBTFdBWVNfSU5MSU5FIGJvb2wgaXNWYWxpZEZvcm0oT3Bjb2RlIG9w
Y29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91
dHAucHV0cyAiQXJnOjpLaW5kIGtpbmRzW3NpemVvZi4uLihBcmd1bWVudHMpXSA9IHsgYXJndW1l
bnRzLi4uIH07IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29k
ZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAi
Y2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChzaXplb2Yu
Li4oQXJndW1lbnRzKSkgeyIKKyAgICAgICAgdW5sZXNzIG9wY29kZS5zcGVjaWFsCisgICAgICAg
ICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5s
ZW5ndGh9OiIKKyAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsgfCBjb2x1bW5J
bmRleCB8ICJraW5kc1sje2NvbHVtbkluZGV4fV0iIH0KKyAgICAgICAgICAgICAgICBmaWx0ZXIg
PSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAg
ICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgPSAo
bm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBraW5kIHwga2luZC5zcGVjaWFsIH0pCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKCN7c3BlY2lhbH0pOyIKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3Zl
cmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisg
ICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0K
KyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91
dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsgIgorICAgIG91dHAucHV0
cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91
dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICJu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAu
cHV0cyAiYm9vbCBJbnN0Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBt
YXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAgICB8IG9w
Y29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAg
ICAgICAgb3V0cC5wdXRzICJpZiAoYXJncy5zaXplKCkgPCAxKSIKKyAgICAgICAgICAgIG91dHAu
cHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWzBd
LmlzU3BlY2lhbCgpKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAg
ICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5pc1Zh
bGlkKCp0aGlzKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0
aW9uID0gZmFsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMg
eworICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVy
bG9hZC5zaWduYXR1cmVbaW5kZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0gb3Zlcmxv
YWQuc2lnbmF0dXJlW2luZGV4XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZvcm0ua2lu
ZHNbaW5kZXhdCisgICAgICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNw
ZWNpYWwKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25v
dyB0aGF0IHRoZSBmb3JtIG1hdGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJv
bGUsIHNpbmNlCisgICAgICAgICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBv
bmx5IHRoaW5nIGxlZnQgdG8gdmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUK
KyAgICAgICAgICAgICAgICAjIHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAu
CisgICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZHNNb3Jl
VmFsaWRhdGlvbgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFpcyN7b3Bjb2RlLm5h
bWV9VmFsaWQodGhpcykpIgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJu
IGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6
YWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBv
dXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsK
KyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFt
ZX06IgorCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICghYXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7Igor
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFk
bWl0c1N0YWNrKCp0aGlzLCBhcmdJbnN0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAj
IFN3aXRjaCBvbiB0aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAo
YXJnSW5kZXgpIHsiCisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRzLm1h
cCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3Zlcmxv
YWQuc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgbnVtQXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRleCB8Cisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAgICAgICAg
ICAgICAgICMgQ2hlY2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJsb2Fk
cyBlaXRoZXIgZG8sIG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAgICAgICAg
IyBhdCB0aGlzIGluZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9uIGNhc2Uu
CisgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5vID0gMAor
ICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAg
ICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNo
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZpcnN0
IGJlY2F1c2UgaWYgd2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAgICAgICAg
ICAgICAjIHRvIHNheSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAgICAgICAg
ICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0Lgor
CisgICAgICAgICAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUub3Zlcmxv
YWRzLnNpemUgIT0gMSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAo
YXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAg
ICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVy
bG9hZCB8CisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBv
ZiB0aGVtIGRvIHdoYXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9
IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgICAg
ICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0lu
ZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9
IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
bnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0aGlu
ZywganVzdCBkcm9wIHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiBu
dW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7
b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVy
bG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9
OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAj
IFRoaXMgaXMgaG93IHdlIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlzIGFy
Z3VtZW50IHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIHlpZWxk
cyBhIHZhbGlkIGZvcm0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVy
ID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXgg
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9PSBhcmdJ
bmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRkciIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtWWVzID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1z
LmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhd
ID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVll
cyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj
IERyb3AgZG93biwgZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgS2Vl
cCBnb2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVl
KTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5H
ZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
ZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAgICAgIAorICAg
ICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiI7
CisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0
cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIkND
YWxsSGVscGVyczo6SnVtcCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJh
dGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0IgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRw
LnB1dHMgIlVOVVNFRF9QQVJBTShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShj
b250ZXh0KTsiCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIKKyAg
ICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8
IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAg
ICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdlbmVy
YXRlKCp0aGlzLCBqaXQsIGNvbnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlm
IGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5hbWUK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2RlLm1h
c21OYW1lCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5icmFuY2gKKyAg
ICAgICAgICAgICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgIG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKworICAgICAgICAgICAg
Zm9ybS5raW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwga2luZCwgaW5k
ZXggfAorICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wcmludCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgY2Fz
ZSBraW5kLm5hbWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAgICAgICAgICAgICAg
ICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgorICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgd2hlbiAiSW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5k
ZXh9XS5hc1RydXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4gIkltbTY0IgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW02
NCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdo
ZW4gIkluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRp
dGlvbigpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCisgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dHAucHV0cyAi
KTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1bHQpOyIKKyAgICAg
ICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRwLnB1dHMgIn0iCisK
KyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBA
IHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0K
ICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZhbGlk
KCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KIAog
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
ID09IGRlbGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBAQCBwdWJsaWM6CiAgICAgCiAgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBjbGFzcyBBbGxSZWdzSXRlcmFi
bGUgeworICAgIHB1YmxpYzoKKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkgeyB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0
IGl0ZXJhdG9yKFJlZyByZWcpCisgICAgICAgICAgICAgICAgOiBtX3JlZyhyZWcpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiBtX3JlZzsgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9yZWcgPSBtX3JlZy5uZXh0KCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZyA9PSBvdGhlci5tX3JlZzsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIFJlZyBtX3JlZzsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAgICAgaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9CisgICAgfTsKKworICAgIHN0
YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgY29uc3QgeyByZXR1cm4gQWxsUmVnc0l0ZXJhYmxl
KCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZhbGlkKCkgeyByZXR1cm4g
MHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShy
ZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTMgQEAgcHVibGljOgogICAgIAogICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJu
IG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0cygpKQorICAgICAgICAg
ICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgIH0KICAgICAKIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJbmRleDogU291cmNlL1dU
Ri93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9y
LmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgcHVibGljOiAKICAgICB9OwogICAgIAogICAg
IFNldEJpdHNJdGVyYWJsZSBzZXRCaXRzKCkgY29uc3QgeyByZXR1cm4gU2V0Qml0c0l0ZXJhYmxl
KCp0aGlzKTsgfQotICAgIAorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Q
b2ludGVyKCkKICAgICB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKworbmFtZXNwYWNl
IFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRseSBwYXNz
IGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKKy8vIHRlbXBs
YXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxkIGJlIGRl
Y2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRoaW5ncyog
KGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKKy8vCisvLyB2
b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAoaW50IHgs
IFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3RlIHRoYXQgdGhp
cyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1iZGEgaXMg
b25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVuY2UgdGhlIG5h
bWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNz
IFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRU
eXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwp
KHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQqIGFyZyA9IG51
bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmcoYXJnKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgflNjb3BlZExhbWJkYSgpCisgICAgeworICAgIH0KKworICAg
IFJlc3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlw
ZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRUeXBlICgq
aW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pIG1faW1wbDsKKyAgICB2b2lkICpt
X2FyZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVu
Y3Rvcj4gU2NvcGVkTGFtYmRhRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29w
ZWRMYW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6
IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1
YmxpYzoKKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgICAgIDogU2NvcGVkTGFtYmRhKGltcGxGdW5jdGlvbiwgdGhpcykKKyAgICAgICAgLCBtX2Z1
bmN0b3IoZnVuY3RvcikKKyAgICB7CisgICAgfQorCisgICAgU2NvcGVkTGFtYmRhRnVuY3RvcihG
dW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRMYW1iZGEoaW1wbEZ1bmN0aW9uLCB0
aGlzKQorICAgICAgICAsIG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAgeworICAg
IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rpb24odm9pZCog
YXJndW1lbnQsIEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5j
dG9yKAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cyku
Li4pOworICAgIH0KKworICAgIEZ1bmN0b3IgbV9mdW5jdG9yOworfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorU2NvcGVkTGFtYmRhRnVuY3Rv
cjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYShjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQoreworICAgIHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVu
Y3Rvcj4oZnVuY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gU2Nv
cGVkTGFtYmRhX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkxMjM5KQorKysg
U291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwx
MSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFNoYXJlZFRhc2tGdW5jdG9yKEZ1bmN0
b3ImJiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisg
ICAgeworICAgIH0KKwogcHJpdmF0ZToKICAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVz
JiYuLi4gYXJndW1lbnRzKSBvdmVycmlkZQogICAgIHsKQEAgLTExMCw2ICsxMTUsMTEgQEAgUmVm
PFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcgogewogICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3Rv
cikpOwogfQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9y
PgorUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFzayhGdW5jdG9y
JiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3Rv
cjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KFdURjo6bW92ZShmdW5jdG9yKSkpOworfQogCiB9IC8v
IG5hbWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263778</attachid>
            <date>2015-10-21 18:26:05 -0700</date>
            <delta_ts>2015-10-22 12:41:02 -0700</delta_ts>
            <desc>and now, with a stack allocator</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>344078</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRp
bHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jhc2ljQmxvY2s6OkJh
c2ljQmxvY2sodW5zaWduZWQgaW5kZXgpCisgICAgOiBtX2luZGV4KGluZGV4KQoreworfQorCitC
YXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5k
KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCit2b2lk
IEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIz
OjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVt
b3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRl
Y2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxh
Y2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBt
X2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1w
KHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7
CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxv
Y2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYg
VmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sq
LCAyPiBBZGphY2VuY3lMaXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNz
b3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICIjIjsKKworICAg
IH5CYXNpY0Jsb2NrKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KKworICAgIFZhbHVlTGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3Zh
bHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBt
X3ZhbHVlcy5lbmQoKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSog
YXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBW
YWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAg
ICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZh
bHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFs
dWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlz
dCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIHZvaWQgYXBwZW5kKFZhbHVl
Kik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4p
OworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgc3VjY2Vzc29y
cygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1
cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9w
cmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQWRqYWNl
bmN5TGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9
CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92
ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0
YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgpOwor
CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgQWRq
YWNlbmN5TGlzdCBtX3N1Y2Nlc3NvcnM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAg
eworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAg
ICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAg
ICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
b3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayog
bV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisj
ZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxv
Y2s6OmFwcGVuZE5ldyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKK3sKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihh
cmd1bWVudHMuLi4pOworICAgIGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3Vuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJl
dHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitC
YXNpY0Jsb2NrKiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgp
OworfQorCitCYXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4
KQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGlu
ZGV4KTsKK30KKworY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6
c3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVl
PigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gK
KworI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xp
c3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCBhZGRQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAg
QmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vz
c29ycygpOworCisgICAgaWYgKHByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNz
b3IpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2Nr
PgorYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayAq
cHJlZGVjZXNzb3IpCit7CisgICAgQmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNz
b3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAg
ICBwcmVkZWNlc3NvcnNbaS0tXSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBw
cmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIC8vIE91dCBvZiBjYXV0aW9uLCB3ZSBrZWVwIGdvaW5nIGV2ZW4gdGhvdWdoIHRo
ZSBwcmVkZWNlc3NvciBsaXN0IGNhbm5vdCBoYXZlCisgICAgICAgICAgICAvLyBkdXBsaWNhdGVz
LgorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jaywgQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQmFzaWNCbG9j
azo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBmcm9tKSB7CisgICAgICAgICAgICBwcmVk
ZWNlc3NvcnNbaV0gPSB0bzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyByZWNvbXB1dGVzIHByZWRlY2Vz
c29ycyBhbmQgcmVtb3ZlcyBibG9ja3MgdGhhdCBhcmVuJ3QgcmVhY2hhYmxlLgordGVtcGxhdGU8
dHlwZW5hbWUgQmFzaWNCbG9jaz4KK3ZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykKK3sKKyAgICAvLyBDbGVhciBhbGwgcHJl
ZGVjZXNzb3IgbGlzdHMgZmlyc3QuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nr
cykKKyAgICAgICAgYmxvY2stPnByZWRlY2Vzc29ycygpLnJlc2l6ZSgwKTsKKworICAgIEdyYXBo
Tm9kZVdvcmtsaXN0PEJhc2ljQm9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsK
KyAgICB3b3JrbGlzdC5ub2RlKGJsb2Nrc1swXSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJs
b2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICBpZiAod29ya2xpc3QuYWRk
KHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMoKS5h
cHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmxvY2tzW2ldLnByZWRl
Y2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICBibG9ja3NbaV0gPSBudWxscHRyOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxv
Y2tVdGlsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmts
aXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dv
cmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9o
CisjZGVmaW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIK
KyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8
QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBX
aGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3
aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFw
aE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3Qg
aXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJs
b2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4g
aWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0
aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhl
IGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVk
R3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsK
KwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFwaE5v
ZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBvc3RP
cmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4g
UG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM0Jsb2NrV29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNl
IHsKKwordW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCit7CisgICAgc3dpdGNoIChpbnN0
Lm9yaWdpbi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tT
dWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBDaGVj
azoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNv
ZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQorICAgIDogbV9jaGVja09wY29kZShvcGNvZGUp
CisgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQoreworfQorCitDaGVja1NwZWNpYWw6On5D
aGVja1NwZWNpYWwoKQoreworfQorCitJbnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNv
bnN0IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAgSW5zdCBoaWRkZW5CcmFuY2gobV9jaGVja09w
Y29kZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRlbkJyYW5jaC5hcmdzLnJlc2l6ZShtX251bUNo
ZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DaGVja0FyZ3M7IGktLTspCisg
ICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzW2ldID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICByZXR1
cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0
JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJh
Y2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmcoY2FsbGJhY2spOworICAg
IGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0
LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3Qp
Cit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlkKCkKKyAgICAgICAgJiYg
aXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOwor
fQorCitib29sIENoZWNrU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQg
YXJnSW5kZXgpCit7CisgICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9u
dW1DaGVja0FyZ3MpCisgICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3Rh
Y2soYXJnSW5kZXggLSAxKTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhp
bnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVs
cGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVy
cyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZmFpbCA9IGhpZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwor
ICAgIEFTU0VSVChmYWlsLmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmln
aW47CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZh
bHVlLT5vcGNvZGUoKSkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011
bCkKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlm
ICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmFyZ3NbMF0tPmlzSW50KDAp
KQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDApKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKGNvbnRleHQuY29kZSwg
aW5zdC5hcmdzWzJdKSk7CisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNv
ZGUsIGluc3QuYXJnc1sxXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3Rh
bnQoMSkpOworICAgIH0KKworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tB
cmdzICsgMSwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5k
KAorICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1
bmN0aW9uPigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25D
b250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgZmFpbC5saW5rKCZqaXQpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVl
LT5zdGFja21hcCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAg
ICAgICAgICAgICBTdGFja21hcDo6R2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgICAgICAg
ICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcGFyYW1zLnN0YWNr
bWFwID0gc3RhY2ttYXA7CisgICAgICAgICAgICAgICAgcGFyYW1zLnJlcHMgPSByZXBzOworICAg
ICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lz
dGVyczsKKworICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5tX2dlbmVyYXRvci0+cnVuKGppdCwg
cGFyYW1zKTsKKyAgICAgICAgICAgIH0pKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJ
bXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2hlY2tPcGNv
ZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpk
ZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkIz
OjpDaGVja1ZhbHVlIGxvd2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwgIiB3aXRoICIsIG1fbnVt
Q2hlY2tBcmdzLCAiIGFyZ3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tT
cGVjaWFsX2gKKworI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBT
cGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB3YW50
IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2Fu
dCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKKy8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVh
ZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFs
IHdpbGwgcmVtZW1iZXIKKy8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBh
bG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQK
Ky8vIHdpbGwgY3JlYXRlIGFuIEluc3Qgd2l0aCB0aGF0IG9wY29kZSBwbHVzIHRoZSBhcHByb3By
aWF0ZSBhcmdzIGZyb20gdGhlIG93bmluZyBJbnN0IHdoZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkg
b2YgdGhlIGNhbGxiYWNrcy4KKy8vCisvLyBOb3RlIHRoYXQgZm9yIENoZWNrQWRkLCBDaGVja1N1
YiwgYW5kIENoZWNrTXVsIHdlIGV4cGVjdCB0aGF0IHRoZSBCMyBhcmd1bWVudHMgYXJlIHRoZSBy
ZXZlcnNlCisvLyBvZiB0aGUgQWlyIGFyZ3VtZW50cyAoQWRkKGEsIGIpID0+IEFkZDMyIGIsIGEp
LiBFeGNlcHQ6CisvLyAtIENoZWNrU3ViKDAsIHgpLCB3aGljaCB0dXJucyBpbnRvIEJyYW5jaE5l
ZzMyIHguCisvLyAtIENoZWNrTXVsKGEsIGIpLCB3aGljaCB0dXJucyBpbnRvIE11bDMyIGIsIGEg
YnV0IHdlIHBhc3MgQW55IGZvciBhJ3MgVmFsdWVSZXAuCisKK2NsYXNzIENoZWNrU3BlY2lhbCA6
IHB1YmxpYyBTdGFja21hcFNwZWNpYWwgeworcHVibGljOgorICAgIENoZWNrU3BlY2lhbChBaXI6
Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsK
KworICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRo
ZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAgIEluc3QgaGlkZGVuQnJhbmNoKGNvbnN0
IEluc3QmKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Oklu
c3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wg
YWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisg
ICAgLy8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4g
YnJhbmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRl
cyB0aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVsZXBycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1f
bnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM0NoZWNrU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitDaGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0
YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gK
KworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENo
ZWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgor
ICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBj
YXNlIENoZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tW
YWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNr
QWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4s
IGxlZnQsIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAg
ICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NF
UlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0g
Q2hlY2tNdWwpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAg
IENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2sp
OworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjND
aGVja1ZhbHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29t
bW9uLmgiCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgor
I2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2Jvb2wgc2hvdWxkRHVtcElSKCkKK3sKKyAgICByZXR1cm4gRlRMOjp2ZXJib3NlQ29tcGlsYXRp
b25FbmFibGVkKCkgfHwgRlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBzaG91bGREdW1w
SVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkKK3sK
KyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBz
aG91bGRWYWxpZGF0ZUlSKCkKK3sKKyAgICByZXR1cm4gREZHOjp2YWxpZGF0aW9uRW5hYmxlZCgp
IHx8IHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlk
YXRlSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhB
dEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkKK3sKKyAg
ICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZVZhbGlkYXRpb25GYWlsdXJlKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVmaW5lIEIzQ29tbW9u
X2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVtcElS
KCk7Citib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFZhbGlkYXRl
SVIoKTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFNh
dmVJUkJlZm9yZVBoYXNlKCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNDb21tb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJp
c29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFuZChM
b2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChh
ZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8x
ID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0g
RXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5k
KGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCBy
aWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1
YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29u
c3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFs
dWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZh
bHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Q29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVl
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFs
dWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3Qz
MlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2
NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRp
YyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7
IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0
LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91Ymxl
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91Ymxl
VmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVl
OjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVs
ZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUg
QjNDb25zdERvdWJsZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkg
eyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91Ymxl
VmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2
YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2lu
KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3Vi
bGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwor
dm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1
Y2Nlc3NvcnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJh
c2ljQmxvY2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5j
aDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlz
IGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1
ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xWYWx1
ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworCisg
ICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0
IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAg
IEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vz
c29yc1tpXTsgfQorCisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0
IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1
YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRy
b2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBv
cGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAv
LyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3Vj
Y2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1
bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQp
CisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAg
Ly8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQp
OworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVl
KAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBu
bykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9z
dWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsK
KyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29u
dHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisjZGVmaW5lIEIzSW5kZXhN
YXBfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIG1h
cCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9y
IEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBk
b24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNhbiBoYXZl
IHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5kZXhNYXAg
eworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkKKyAgICB7
CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2l6
ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAg
ICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBWYWx1ZSYg
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBt
X3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUg
YW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9u
bHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkg
b2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRp
Y2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNl
dCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJh
c2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVibGlj
OgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAg
fQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1f
c2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4
U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAg
ICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBj
b2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAg
ICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIu
bV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAg
ICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7Cisg
ICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0
aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZv
ciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJl
KTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52
YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0
aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxl
Y3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJh
YmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRW
ZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRl
cm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisKKyMgVGhlc2UgcnVs
ZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0aGUgdG9wLiBJdCdz
IGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxl
LgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hlciBpcyBhbiBleGNl
bGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9IExvYWQoYWRkcmVz
cykKKworIyBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRoZXNlIGZvcm1zLgorQWRkTG9hZDEgPSBB
ZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUpCitBZGRMb2FkMiA9IEFkZCh2YWx1ZSwgTG9hZChhZGRy
ZXNzKSkKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkMSA9IFN0b3JlKEFk
ZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZUFkZExvYWQyID0gU3RvcmUo
QWRkKHZhbHVlLCBMb2FkKGFkZHJlc3MpKSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0b3Jl
KEFuZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZhbHVl
LCBhZGRyZXNzKQorCitSZXR1cm4gPSBSZXR1cm4odmFsdWUpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgp
Cit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIm9mZnNldCA9ICIs
IG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZpbmUgQjNNZW1vcnlWYWx1ZV9oCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBj
YXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkRmxv
YXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNh
c2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0b3Jl
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUoKTsK
KworICAgIGludHB0cl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUg
TG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVy
bmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2Rl
LCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAg
ICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAg
ICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBl
ID09IERvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0
b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVG
bG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gVm9pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUg
dGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnRwdHJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBM
b2FkRmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOFo6Cisg
ICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAg
ICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4K
KyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGlu
dHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
eworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEIzTWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIG91dC5wcmludCgi
SWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRQorICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNvZGVfaAorCisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51
bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1
c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAg
ICAKKyAgICAvLyBQb2x5bW9ycGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5
cGUuCisgICAgSWRlbnRpdHksCisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUgQ29uc3RWYWx1
ZSogY2xhc3Nlcy4gQ29uc3RhbnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3csIHNvIHRoYXQg
d2UgY2FuCisgICAgLy8gcmVhc29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0aGVt
LiBMYXJnZSBjb25zdGFudHMgYXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgQ29uc3QzMiwK
KyAgICBDb25zdDY0LAorICAgIENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1hZ2ljYWwgc3Rh
Y2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHBy
b2dyYW0gcmVnYXJkbGVzcyBvZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0
IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBkaXNqb2ludCBy
YW5nZSBvZgorICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFz
cy4KKyAgICBTdGFja1Nsb3QsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdpc3Rl
ci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0K
KyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LCBh
bmQgdGhlIGNvbXBpbGVyIHRha2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBkb24n
dCBjbG9iYmVyIHRoZSB2YWx1ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNhbGxzIChlaXRo
ZXIgYnkgc2F2aW5nIHRoZSBhcmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBvciBwcmVzZXJ2
aW5nIGl0IGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVnVmFs
dWUgY2xhc3MuIFRoZSByZXR1cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2ludGVyKCkgKGZv
ciBHUFJzKSBvciBEb3VibGUgKGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywKKworICAgIC8v
IFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRyb2wg
ZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRlciwg
d2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50ZXIg
dGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBvaW50
ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91bGQq
IGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAgIEZy
YW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFueSB2
YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKworICAg
IC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIsIGJl
aGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0T3Is
CisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisKKyAgICAvLyBD
YXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBTRXh0
OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6Cisg
ICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3VibGU6
CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgorICAg
IElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERUb0kz
MiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFs
dWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8vIGlz
IGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVzc1Ro
YW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVhbCwK
KworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgorICAg
IEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwKKyAgICBCZWxvd0VxdWFsLAorCisg
ICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUg
bG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4g
SW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAorICAgIExvYWQx
NlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisgICAgLy8g
VGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExvYWQsCisKKyAg
ICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3Rv
cmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2
YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91
YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGlj
IHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAgICAv
LyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBz
eXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFy
Z3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKwor
ICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFz
cy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9u
bHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJh
Y2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNr
bWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQg
bXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFj
a21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVl
c3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJv
bSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3Rh
Y2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVj
a1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJh
dGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNv
ZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8g
ZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0
IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJlIG5vdCBhbGxv
d2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91ciBzbG93IHBh
dGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1
dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhh
cHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6Cisg
ICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hlY2tBZGQoeCwg
eSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAg
ICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVudGl0eShhKQor
ICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFja3Mg
dXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAv
LyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRo
ZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFmdGVyIHRoZSBm
aXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2
ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25k
IENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0FkZCwKKyAgICBD
aGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lkZS1leGl0cy4g
VXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlz
IGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoaXMg
dGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisgICAg
Ly8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVl
IHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0aC4KKyAgICBD
aGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAg
ICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQaGks
CisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgSnVtcCwK
KyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0
eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBDb250
cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVl
IHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIg
ZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBT
d2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0IGtu
b3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFueQorICAgIC8v
IHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisKKyAgICAv
LyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdl
dCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcworfTsKKworaW5s
aW5lIGJvb2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Jp
Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M09yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBPcmln
aW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9yaWdp
bigiLCBSYXdQb2ludGVyKG1fZGF0YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKworI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Ly8gV2hvZXZlciBnZW5lcmF0ZXMgQjNJUiBjYW4gY2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZh
bHVlcy4gV2hlbiB5b3UgZG8gdGhpcywgQjMgd2lsbCBiZSBhYmxlIHRvCisvLyBhY2NvdW50LCBk
b3duIHRvIHRoZSBtYWNoaW5lIGNvZGUsIHdoaWNoIGluc3RydWN0aW9uIGNvcnJlc3BvbmRzIHRv
IHdoaWNoIG9yaWdpbi4gQjMKKy8vIHRyYW5zZm9ybWF0aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdp
bnMgY2FyZWZ1bGx5LiBJdCdzIGFuIGVycm9yIHRvIHdyaXRlIGEgdHJhbnNmb3JtYXRpb24gdGhh
dAorLy8gZWl0aGVyIGRyb3BzIE9yaWdpbnMgb3IgbGllcyBhYm91dCB0aGVtLgorY2xhc3MgT3Jp
Z2luIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9IG51
bGxwdHIpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIGNvbnN0
IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCB2b2lkKiBtX2Rh
dGE7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzT3JpZ2lu
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hw
b2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJp
bnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGF0Y2hwb2ludFZh
bHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21h
cCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZpbmUg
QjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
U3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBh
dGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
YWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsgfQor
CisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFBhdGNocG9p
bnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBB
ZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hwb2lu
dCwgdHlwZSwgb3JpZ2luLCBjaGlsZHJlbikKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sKK30K
KworUHJvY2VkdXJlOjp+UHJvY2VkdXJlKCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJl
OjphZGRCbG9jaygpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrID0g
c3RkOjptYWtlX3VuaXF1ZTxCYXNpY0Jsb2NrPihtX2Jsb2Nrcy5zaXplKCkpOworICAgIEJhc2lj
QmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1v
dmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVyZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gKKyNkZWZp
bmUgQjNQcm9jZWR1cmVfaAorCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFz
aWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisKKyAgICBQcm9jZWR1cmUoKTsKKyAgICB+UHJvY2VkdXJlKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiBhZGRCbG9jaygpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4u
Lik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2Nr
KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9Cisg
ICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAg
ICBpdGVyYXRvcigpOgorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAg
ICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDog
bV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+
YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4g
aW5leDsKKyAgICAgICAgfQorCisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAg
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgY2xhc3Mg
VmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xsZWN0aW9u
KFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1
cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgICAgICA6
IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3IqKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmJsb2Nr
KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAg
ICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6
ZSgpKTsgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nl
ZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF07IH0KKyAgICAgICAg
VmFsdWUqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBQcm9jZWR1cmUmIG1fcHJvY2Vk
dXJlOworICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIFZh
bHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxWYWx1ZT4+IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzUHJvY2VkdXJlSW5saW5lc19oCisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFy
Z3VlbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2
YWx1ZShuZXcgVmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7CisgICAg
VmFsdWVUeXBlKiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoV1RG
Ojptb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0YWNrU2xvdEtp
bmQuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsK
KwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2Vk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoK
KyAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5k
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RL
aW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCisj
ZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitlbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tl
ZCBzdGFjayBzbG90IG5lZWRzIHRvIGJlIGtlZXAgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJl
Y2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBv
YnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBv
ZiBhIHN0YWNrCisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFj
ayBzbG90cyBjb3VsZCBzaGFyZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRl
ZCB0aGF0IHRoZXkgYXJlbid0IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29t
cGlsZXIgc3RpbGwgaGFzIHRvIGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJl
IGVzY2FwZWQKKyAgICAvLyBleHBsaWNpdGx5IGluIElSLgorICAgIEFub255bW91cworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmlu
dFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3Rh
Y2tTbG90S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNTdGFja1Ns
b3RLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwor
dm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1f
a2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1
ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsKK2Ns
YXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tT
bG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9i
eXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRp
b24uIFlvdSBjYW5ub3QgcmVseSBvbiBpdCBoYXZpbmcgYSBtZWFuaW5nZnVsCisgICAgLy8gdmFs
dWUgd2hpbGUgdGhlIGNvbXBpbGVyIGlzIHJ1bm5pbmcuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJv
bUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNr
U2xvdDsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXIoKSwgb3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNp
emUoYnl0ZVNpemUpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9vZmZzZXRG
cm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICBT
dGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTdGFja21hcDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgIntv
cGFxdWUgPSAiLCBSYXdQb2ludGVyKG1fb3BhcXVlKSwgIiwgcmVwcyA9ICIsIGxpc3REdW1wKG1f
cmVwcyksCisgICAgICAgICIsIGdlbmVyYXRvciA9ICIsIFJhd1BvaW50ZXIobV9nZW5lcmF0b3Iu
Z2V0KCkpLCAiLCBjbG9iYmVyZWQgPSAiLCBtX2Nsb2JiZXJlZCwKKyAgICAgICAgIiwgdXNlZFJl
Z2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIn0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21h
cF9oCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ2hlY2tTcGVjaWFsOwor
Y2xhc3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFN0YWNrbWFwIHsK
K3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7CisgICAgICAgIC8vIFRoaXMg
aXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAgICAgICBWYWx1ZSogdmFs
dWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFN0YWNrbWFw
KiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgYWN0dWFsIHZhbHVl
IHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgorICAgICAgICBWZWN0b3I8VmFsdWVS
ZXA+IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIHJlZ2lzdGVycyB0aGF0
IHdlcmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB9Owor
ICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBj
b25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPEdlbmVyYXRv
ckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3RhY2ttYXAoKQorICAgIHsKKyAgICB9
CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBpZGVudGlmeSB0aGlzIHN0YWNrbWFw
LiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAtdXNpbmcgVmFsdWUKKyAgICAvLyBj
YW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRlIG1heSBlbmQgdXAgaGF2aW5nIGRp
ZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisgICAgLy8gYWxsb3dzIGFsbCBvZiB0
aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIgYmFjayB0byB3aGF0ZXZlciBoaWdo
LWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdlcmUgdXNpbmcgdG8gY3JlYXRlIHRo
ZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBwYXJhbWV0ZXIpCisgICAgeworICAg
ICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9CisgICAgdm9pZCogb3BhcXVlKCkgY29u
c3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENvbnZlbmllbmNlIGhlbHBlcnMgd2hl
biB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAgdm9pZCBzZXRPcGFxdWVJ
bmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBzZXRPcGFxdWUoYml0d2lzZV9jYXN0
PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qgb3BhcXVlSW5kZXgoKSBjb25zdCB7
IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUoKSk7IH0KKworICAgIC8vIENvbnN0
cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1c2VzIHRoaXMgU3RhY2ttYXAuIE5v
dGUgdGhhdCBpbmRleCB6ZXJvIHJlZmVycyB0byB0aGUKKyAgICAvLyBmaXJzdCBhcmd1bWVudCB0
byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90IGNvbnN0cmFpbmFibGUu
IEZvciBleGFtcGxlLCBpbiBhCisgICAgLy8gQ2hlY2tBZGQgdmFsdWUsIGl0IHdvdWxkIGJlIGFu
IGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEgQ2hlY2sgdmFsdWUsIGl0
IHdvdWxkCisgICAgLy8gYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGV4IDAuIEJ1dCwgd2hl
biB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBjYW4gZGVwZW5kCisgICAg
Ly8gb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmlsbGVkIGluLgorICAgIHZv
aWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQorICAgIHsK
KyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXplKCkpCisgICAgICAgICAgICBtX3Jl
cHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhdID0gcmVwOworICAgIH0K
KworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0KQorICAgIHsKKyAgICAg
ICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICBjb25zdCBSZWdpc3RlclNl
dCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKworICAgIHZvaWQg
c2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcikKKyAgICB7CisgICAgICAg
IG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0b3JG
dW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7Cisg
ICAgZnJpZW5kIGNsYXNzIFN0YWNrbWFwU3BlY2lhbDsKKyAgICAKKyAgICB2b2lkKiBtX29wYXF1
ZSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsKKyAgICBSZWZQdHI8
R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZDsKKyAg
ICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7IC8vIFN0YWNrbWFwcyBjb3VsZCBiZSBmdXJ0
aGVyIGR1cGxpY2F0ZWQgYnkgQWlyLCBidXQgdGhhdCdzIHVubGlrZWx5LCBzbyB3ZSBqdXN0IG1l
cmdlIHRoZSB1c2VkIHJlZ2lzdGVycyBzZXRzIGlmIHRoYXQgd2VyZSB0byBoYXBwZW4uCit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNp
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworU3RhY2ttYXBTcGVjaWFsOjpTdGFja21hcFNw
ZWNpYWwoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IFNwZWNpYWwobmFtZSkKK3sKK30KKworU3Rh
Y2ttYXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVjaWFsKCkKK3sKK30KKwordm9pZCBTdGFja21hcFNw
ZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVh
Y2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIHJldHVybiBmb3JFYWNoQXJnSW1wbCgw
LCAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlk
KEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDEsIGluc3QpOworfQor
Citib29sIFN0YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQg
YXJnSW5kZXgpCit7CisgICAgcmV0dXJuIGFkbWl0c1N0YWNrKDAsIDEsIGluc3QsIGFyZ0luZGV4
KTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYg
aW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFsdWUqIHZh
bHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNr
bWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBTdGFja21h
cFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVzZWQKKyAg
ICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJlbnRseSB3
b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8gb3IgdGhp
bmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBwcm9ibGVt
LgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVycyk7Cit9
CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0
YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgcmV0dXJuIHN0YWNr
bWFwLT5jbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJ
bXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRB
aXJBcmdzLAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJn
Q2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsK
KworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAg
ICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNT
RVJUKHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgQVNT
RVJUKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyA9PSB2YWx1ZS0+Y2hpbGRy
ZW4uc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAg
ICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRCM0FyZ3NdOworICAgICAg
ICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRBaXJBcmdzKTsKKwor
ICAgICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNlLCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQt
PnR5cGUoKSkpOworICAgIH0KK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzVmFsaWRJbXBs
KAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdB
cmdzLAorICAgIEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47
CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisg
ICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFT
U0VSVCh2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworCisgICAg
U3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICBBU1NFUlQoc3Rh
Y2ttYXApOworCisgICAgLy8gRm9yIHRoZSBJbnN0IHRvIGJlIHZhbGlkLCBpdCBuZWVkcyB0byBo
YXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChpbnN0LmFyZ3Muc2l6
ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFsdWUtPmNoaWxkcmVuLnNpemUoKSAtIG51bUln
bm9yZWRCM0FyZ3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFJlZ2FyZGxlc3Mg
b2YgY29uc3RyYWludHMsIHN0YWNrbWFwcyBoYXZlIHNvbWUgYmFzaWMgcmVxdWlyZW1lbnRzIGZv
ciB0aGVpciBhcmd1bWVudHMuIEZvcgorICAgIC8vIGV4YW1wbGUsIHlvdSBjYW4ndCBoYXZlIGEg
bm9uLUZQLW9mZnNldCBhZGRyZXNzLiBUaGlzIHZlcmlmaWVzIHRob3NlIGNvbmRpdGlvbnMgYXMg
d2VsbCBhcyB0aGUKKyAgICAvLyBhcmd1bWVudCB0eXBlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3M7ICsraSkgeworICAg
ICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRCM0FyZ3MpOwor
ICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpICsgbnVtSWdub3JlZEFpckFyZ3NdOworICAg
ICAgICAKKyAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJnOjpU
bXA6CisgICAgICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAgIGNhc2UgQXJnOjpJbW02NDoKKyAg
ICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAg
ICAgICAgIGJyZWFrOyAvLyBPSworICAgICAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgICAg
IGlmIChhcmcuYmFzZSgpICE9IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikgJiYKKyAg
ICAgICAgICAgICAgICBhcmcuYmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IEFyZzo6dHlwZUZvckIz
VHlwZShjaGlsZC0+dHlwZSgpKTsKKworICAgICAgICBpZiAoIWFyZy5pc1R5cGUodHlwZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhlIG51bWJlciBvZiBj
b25zdHJhaW50cyBoYXMgdG8gYmUgbm8gZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgQjMgY2hp
bGRyZW4uCisgICAgQVNTRVJUKHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpIDw9IHZhbHVlLT5jaGls
ZHJlbi5zaXplKCkpOworCisgICAgLy8gVmVyaWZ5IGFueSBleHBsaWNpdGx5IHN1cHBsaWVkIGNv
bnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9yZWRCM0FyZ3M7IGkgPCBz
dGFja21hcC0+bV9yZXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZh
bHVlLT5jaGlsZChpKTsKKyAgICAgICAgVmFsdWVSZXAmIHJlcCA9IHN0YWNrbWFwLT5tX3JlcHNb
aV07CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgLSBudW1JZ25vcmVkQjNBcmdzICsg
bnVtSWdub3JlZEFpckFyZ3NdOworCisgICAgICAgIHN3aXRjaCAocmVwLmtpbmQoKSkgeworICAg
ICAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgICAgICAvLyBXZSBhbHJlYWR5IHZlcmlm
aWVkIHRoaXMgYWJvdmUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBW
YWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAoYXJnICE9IFRtcChyZXAucmVnKCkp
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEg
dmFsaWQgaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0Fy
Z3VtZW50OgorICAgICAgICAgICAgaWYgKGFyZyAhPSBBcmc6OmNhbGxBcmcocmVwLm9mZnNldEZy
b21TUCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgICAgICAvLyBUaGlz
IGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2tJ
bXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRB
aXJBcmdzLAorICAgIEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5z
dGFja21hcCgpOworCisgICAgdW5zaWduZWQgc3RhY2ttYXBBcmdJbmRleCA9IGFyZ0luZGV4IC0g
bnVtSWdub3JlZEFpckFyZ3MgKyBudW1JZ25vcmVkQjNBcmdzOworCisgICAgaWYgKHN0YWNrbWFw
QXJnSW5kZXggPj0gc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkpIHsKKyAgICAgICAgLy8gVGhpcyBt
ZWFucyB0aGF0IHRoZXJlIHdhcyBubyBjb25zdHJhaW50LgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgLy8gV2Ugb25seSBhZG1pdCBzdGFjayBmb3IgQW55J3MsIHNpbmNl
IFN0YWNrIGlzIG5vdCBhIHZhbGlkIGlucHV0IGNvbnN0cmFpbnQsIGFuZCBTdGFja0FyZ3VtZW50
CisgICAgLy8gdHJhbnNsYXRlcyB0byBhIENhbGxBcmcgaW4gQWlyLgorICAgIGlmIChzdGFja21h
cC0+bV9yZXBzW3N0YWNrbWFwQXJnSW5kZXhdLmtpbmQoKSA9PSBBbnkpCisgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCitWZWN0b3I8VmFsdWVSZXA+IFN0YWNr
bWFwU3BlY2lhbDo6cmVwcyhHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgSW5zdCYgaW5zdCkK
K3sKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlc3VsdDsKKyAgICBhcHBlbmRSZXBzSW1wbChjb250
ZXh0LCAxLCBpbnN0LCByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU3Rh
Y2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgKKyAgICBHZW5lcmF0aW9uQ29udGV4dCYgY29u
dGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEluc3QmIGluc3QsIFZlY3RvcjxWYWx1ZVJl
cD4mIHJlc3VsdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQXJnczsgaSA8
IGluc3QuYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBGb3JBcmco
Y29udGV4dC5jb2RlLCBhcmcpKTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaV07Cisg
ICAgfQorfQorCitWYWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhDb2RlJiBjb2Rl
LCBjb25zdCBBcmcmIGFyZykKK3sKKyAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICBjYXNl
IFRtcDoKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpyZWcoYXJnLnJlZygpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBJbW06CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAgcmV0dXJuIFZh
bHVlUmVwOjpjb25zdGFudChhcmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QWRkcjoKKyAgICAgICAgaWYgKGFyZy5iYXNlKCkgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSk7Cisg
ICAgICAgIEFTU0VSVChhcmcuYmFzZSgpID09IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpIC0g
Y29kZS5mcmFtZVNpemUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcCgpOworICAgIH0KK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNT
dGFja21hcFNwZWNpYWxfaAorI2RlZmluZSBCM1N0YWNrbWFwU3BlY2lhbF9oCisKKyNpbmNsdWRl
ICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxz
IHRoYXQgaGF2ZSBzdGFja21hcHMuIE5vdGUgdGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAg
YnkKKy8vIGFza2luZyBmb3IgdGhlIEluc3QncyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3Rz
IGRvbid0IG5lZWQgdG8gZXZlbiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAu
CisKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGlj
OgorICAgIFN0YWNrbWFwU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgp
OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNj
b3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBi
b29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhB
aXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXBvcnRV
c2VkUmVnaXN0ZXJzKEFpcjo6SW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7Cisg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBvdmVy
cmlkZTsKKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRl
KCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4gV2UgaGF2ZSBtYW55IHNvbWUKKyAgICAv
LyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCisKKyAgICB2b2lkIGZvckVhY2hBcmdJ
bXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25v
cmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6
SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOworICAgIGJvb2wgaXNWYWxpZEltcGwoCisgICAgICAg
IHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAor
ICAgICAgICBBaXI6Okluc3QmKTsKKyAgICBib29sIGFkbWl0c1N0YWNrSW1wbCgKKyAgICAgICAg
dW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisg
ICAgICAgIEFpcjo6SW5zdCYpOworCisgICAgLy8gR2V0cyB0aGUgcmVwcyBhcnJheSB0aGUgd2F5
IHRoYXQgdGhlIHN0YWNrbWFwIGdlbmVyYXRvciBjYWxsYmFjayB3b3VsZCB3YW50LgorICAgIFZl
Y3RvcjxWYWx1ZVJlcD4gcmVwcyhBaXI6OkdlbmVyYXRpb25Db250ZXh0JiwgQWlyOjpJbnN0Jik7
CisKKyAgICAvLyBBcHBlbmRzIHRoZSByZXBzIGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0YXJ0aW5n
IHdpdGggbnVtSWdub3JlZEFyZ3MsIHRvIHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgdm9pZCBhcHBl
bmRSZXBzSW1wbChBaXI6OkdlbmVyYXRpb25Db250ZXh0JiwgdW5zaWduZWQgbnVtSWdub3JlZEFy
Z3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxWYWx1ZVJlcD4mKTsKKworICAgIHN0YXRpYyBWYWx1ZVJl
cCByZXBGb3JBcmcoQWlyOjpDb2RlJiwgY29uc3QgQWlyOjpBcmcmKTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTdGFja21hcFNwZWNpYWxfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5o
IgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit2b2lkIFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQobV9jYXNlVmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKG1fdGFyZ2V0
KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1N3aXRjaENhc2VfaAorI2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKworY2xhc3MgU3dpdGNo
Q2FzZSB7CitwdWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisgICAgeworICAgIH0KKworICAgIFN3
aXRjaENhc2UoaW50NjRfdCBjYXNlVmFsdWUsIEJhc2ljQmxvY2sqIHRhcmdldCkKKyAgICAgICAg
OiBtX2Nhc2VWYWx1ZShjYXNlVmFsdWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAg
IHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
ISFtX3RhcmdldDsgfQorCisgICAgaW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X2Nhc2VWYWx1ZTsgfQorICAgIEJhc2ljQmxvY2sqIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1f
dGFyZ2V0OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3By
aXZhdGU6CisgICAgaW50NjRfdCBjYXNlVmFsdWU7CisgICAgQmFzaWNCbG9jayogdGFyZ2V0Owor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N3aXRjaENhc2Vf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2xkdWUgIkIz
U3dpdGNoVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N3aXRj
aFZhbHVlOjp+U3dpdGNoVmFsdWUoKQoreworfQorCitTd2l0Y2hDYXNlIFN3aXRjaFZhbHVlOjpy
ZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KQoreworICAgIFN3aXRjaENhc2UgcmVzdWx0ID0gbV9z
dWNjZXNzb3JzW2luZGV4XTsKKyAgICBtX3N1Y2Nlc3NvcnNbaW5kZXhdID0gbV9zdWNjZXNzb3Jz
Lmxhc3QoKTsKKyAgICBtX3N1Y2Nlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYg
c3dpdGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0
KCkpOworICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hD
YXNlLnRhcmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgp
KTsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICAvLyBUaGlzIGRlc3RydWN0aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdz
IGR1bXBNZXRhKCkuCisgICAgb3V0LnByaW50KGxpc3REdW1wKCp0aGlzKSk7Cit9CisKK1N3aXRj
aFZhbHVlOjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgQmFzaWNC
bG9jayogZmFsbFRocm91Z2gpCisgICAgOiBDb250cm9sVmFsdWUoaW5kZXgsIFN3aXRjaCwgb3Jp
Z2luKQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoZmFsbFRocm91Z2gpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFs
dWVfaAorI2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVl
LmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBTd2l0Y2hWYWx1ZSA6IHB1YmxpYyBDb250cm9sVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IFN3aXRjaDsgfQorCisgICAgflN3aXRjaFZhbHVlKCk7CisKKyAgICAvLyBudW1DYXNl
VmFsdWVzKCkgKyAxID09IG51bVN1Y2Nlc3NvcnMoKS4KKyAgICB1bnNpZ25lZCBudW1DYXNlVmFs
dWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CisKKyAgICAvLyBUaGUgc3Vj
Y2Vzc29yIGZvciB0aGlzIGNhc2UgdmFsdWUgaXMgYXQgdGhlIHNhbWUgaW5kZXguCisgICAgaW50
NjRfdCBjYXNlVmFsdWUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2ld
OyB9CisgICAgCisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKCkgY29u
c3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorICAgIEJhc2ljQmxvY2sqJiBmYWxs
VGhyb3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNl
IGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENh
c2UoY2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7CisgICAgfQorICAgIFN3aXRj
aENhc2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3aXRjaChudWxscHRyKQor
ICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChp
bmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRv
ciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgp
OworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTd2l0Y2hWYWx1ZSog
bV9zd2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKwor
ICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJ
ZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlv
dSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRo
aXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIg
Y2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAg
IFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVu
ZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCk7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9p
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50
KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0
LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAg
ICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5
cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lk
LAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJvb2wg
aXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUgPT0g
SW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJldHVy
biB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlcigpIGNvbnN0Cit7Cisg
ICAgaWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJl
dHVybiBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
QjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxv
blZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworVXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9u
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJeIiwgbV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2ls
b25WYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IFVwc2lsb247IH0KKworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGko
KSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUo
aW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisg
ICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAg
fQorCisgICAgVmFsdWUqIG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Zh
bHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZh
bHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGlu
LXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0
aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9m
IHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHBy
ZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5
IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5
cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFz
aWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0
aGlzLT5yZXBsYWNlbWVudDsKKyAgICB2b2lkKiBtaXNjID0gdGhpcy0+bWlzYzsKKworICAgIFJF
TEVBU0VfQVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6
flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIChpbmRleCwgSWRlbnRpZnksIHR5cGUsIG9yaWdp
biwgdmFsdWUpOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNl
bWVudCA9IHJlcGxhY2VtZW50OworICAgIHRoaXMtPm1pc2MgPSBtaXNjOworfQorCit2b2lkIFZh
bHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQ
cmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIFZhbHVlOjpkZWVwRHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICIgIiwgKnRoaXMsICIgPSAiLCBt
X29wY29kZSk7CisKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7
CisgICAgZm9yIChWYWx1ZSogY2hpbGQgOiBjaGlsZHJlbigpKQorICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHBvaW50ZXJEdW1wKGNoaWxkKSk7CisKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJp
bmdPdXQ7CisgICAgZHVtcE1ldGEoc3RyaW5nT3V0KTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IHN0
cmluZ091dC50b0NTdHJpbmcoKTsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsIHN0cmluZyk7CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKworYm9v
bCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50
MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNv
bnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsK
K30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJikgY29uc3QKK3sKK30KKworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNv
ZGUgb3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2Fz
ZSBNdWw6CisgICAgY2FzZSBEaXY6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoK
KyAgICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAg
IGNhc2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVj
a0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJl
dHVybiBmaXJzdENoaWxkLT50eXBlKCk7CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAg
IHJldHVybiBwb2ludGVyKCk7CisgICAgY2FzZSBTRXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAg
ICBjYXNlIERUb0kzMjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6CisgICAg
Y2FzZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgTGVzc0VxdWFs
OgorICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgIGNhc2UgQWJvdmU6CisgICAgY2FzZSBCZWxv
dzoKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICBy
ZXR1cm4gSW50MzI7CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAg
IHJldHVybiBJbnQ2NDsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBjYXNlIElUb0Q6CisgICAgICAg
IHJldHVybiBEb3VibGU7CisgICAgY2FzZSBOb3A6CisgICAgICAgIHJldHVybiBWb2lkOworICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBC
M1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0Owor
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiQCI7CisKKyAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFs
dWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQor
ICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZv
ciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNv
bnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyBy
ZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4
KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRo
aXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkg
eyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJl
bigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJ
ZGVudGl0eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdpdGhOb3AoKTsKKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBjYXN0IFZhbHVlcy4gRm9yIGV4YW1w
bGUsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92aWRlZCB0aGF0IHdlIGhhdmUgYQor
ICAgIC8vIEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86CisgICAgLy8KKyAgICAvLyBpZiAo
QXJndW1lbnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1
ZT4oKSkgeworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBUaGlz
IHdpbGwgcmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAhPSBBcmd1bWVudFJlZy4gVGhpcyB3
b3JrcyBiZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisgICAgLy8gaWYgVDo6YWNjZXB0cyhv
cGNvZGUoKSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQq
IGFzKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBhcygpIGNvbnN0
OworICAgIAorICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKKyAgICBpbnQzMl90IGFzSW50MzIo
KSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0ludDY0KCkgY29uc3Q7CisgICAgaW50NjRfdCBh
c0ludDY0KCkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludCgpIGNvbnN0OworICAgIGludDY0X3Qg
YXNJbnQoKSBjb25zdDsKKyAgICBib29sIGlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0OworCisg
ICAgYm9vbCBoYXNEb3VibGUoKSBjb25zdDsKKyAgICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsK
KworICAgIFN0YWNrbWFwKiBzdGFja21hcCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2
b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZp
YSBQcm9jZWR1cmUuCisgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5
cGUgZXhwbGljaXRseToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
ZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisg
ICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAg
ICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0K
KyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3
aGVuIHRoZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVuOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAg
ICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAg
ICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9
CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRo
ZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9v
cGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGls
ZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZp
cnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0g
aXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBv
cGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgor
ICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4g
b3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bj
b2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBm
b3IgdmFyYXJncy4KKyAgICBleHBpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxk
cmVuKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2Rl
KQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAg
ICAgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMg
VHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBn
cm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5zaWdu
ZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAg
CisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKwor
cHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBs
YXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBh
bmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorfTsKKworY2xhc3MgRGVlcFZhbHVlRHVtcCB7
CitwdWJsaWM6CisgICAgRGVlcFZhbHVlRHVtcChWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV92
YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgIG1fdmFs
dWUtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgi
PG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFZhbHVlKiBtX3ZhbHVlOworfTsKKwor
RGVlcFZhbHVlRHVtcCBkZWVwRHVtcChWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJuIERlZXBW
YWx1ZUR1bXAodmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZUlubGluZXNf
aAorI2RlZmluZSBCM1ZhbHVlSW5saW5lc19oCisKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIK
KyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgi
CisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCogVmFsdWU6OmFzKCkKK3sKKyAgICBp
ZiAoVDo6YWNjZXB0cyhvcGNvZGUoKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4o
dGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPnR5cGVuYW1lIFQ+Citj
b25zdCBUKiBWYWx1ZTo6YXMoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFZhbHVl
Kj4odGhpcyktPmFzPFQ+KCk7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gISFhczxDb25zdDMyVmFsdWU+KCk7Cit9CisKK2ludDMyX3QgVmFsdWU6OmFz
SW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdDMyVmFsdWU+KCktPnZhbHVlKCk7
Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxD
b25zdDY0VmFsdWU+KCk7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAorewor
ICAgIHJldHVybiBhczxDb25zdDY0VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2Jvb2wgVmFsdWU6
Omhhc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgfHwgaGFzSW50NjQoKTsK
K30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQz
MigpID8gYXNJbnQzMigpIDogYXNJbnQ2NCgpOworfQorCitib29sIFZhbHVlOjppc0ludChpbnQ2
NF90IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQoKSAmJiBhc0ludCgpID09IHZh
bHVlOworfQorCitib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiAh
IWFzPENvbnN0RG91YmxlVmFsdWU+KCk7Cit9CisKK2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBj
b25zdAoreworICAgIHJldHVybiBhczxDb25zdERvdWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQor
CitTdGFja21hcCogVmFsdWU6OnN0YWNrbWFwKCkKK3sKKyAgICBpZiAoQ2hlY2tWYWx1ZSogY2hl
Y2sgPSBhczxDaGVja1ZhbHVlPigpKQorICAgICAgICByZXR1cm4gJmNoZWNrLT5zdGFja21hcDsK
KyAgICBpZiAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYXM8UGF0Y2hwb2ludFZhbHVl
PigpKQorICAgICAgICByZXR1cm4gJnBhdGNocG9pbnQtPnN0YWNrbWFwOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzVmFs
dWVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlUmVwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZh
bHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1f
a2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE5vbmU6CisgICAgY2FzZSBT
b21lUmVnaXN0ZXI6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlZ2lzdGVyOgorICAgICAg
ICBvdXQucHJpbnQoIigiLCByZWcoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
U3RhY2s6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21GUCgpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja0FyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQo
IigiLCBvZmZzZXRGcm9tU1AoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29u
c3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIHZhbHVlKCksICIpIik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZhbHVl
UmVwOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBWYWx1ZVJl
cDo6QW55OgorICAgICAgICBvdXQucHJpbnQoIkFueSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdp
c3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVSZXA6OlN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAgICBvdXQucHJp
bnQoIlN0YWNrQXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6
OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVw
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlUmVwX2gKKyNkZWZpbmUgQjNWYWx1
ZVJlcF9oCisKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHVzZSB0aGlzIGNsYXNz
IHRvIGRlc2NyaWJlIHZhbHVlIHJlcHJlc2VudGF0aW9ucyBhdCBzdGFja21hcHMuIEl0J3MgdXNl
ZCBib3RoIHRvIGZvcmNlIGEKKy8vIHJlcHJlc2VudGF0aW9uIGFuZCB0byBnZXQgdGhlIHJlcHJl
c2VudGF0aW9uLiBXaGVuIHRoZSBCMyBjbGllbnQgZm9yY2VzIGEgcmVwcmVzZW50YXRpb24sIHdl
IHNheQorLy8gdGhhdCBpdCdzIGFuIGlucHV0LiBXaGVuIEIzIHRlbGxzIHRoZSBjbGllbnQgd2hh
dCByZXByZXNlbnRhdGlvbiBpdCBwaWNrZWQsIHdlIHNheSB0aGF0IGl0J3MgYW4KKy8vIG91dHB1
dC4KKworY2xhc3MgVmFsdWVSZXAgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAg
IC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgY2FuIHBp
Y2sgYW55IHJlcHJlc2VudGF0aW9uLiBBcyBhbgorICAgICAgICAvLyBvdXRwdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93LiBUaGlzIHdpbGwgb25seSBhcmlz
ZSBmb3IgdGhlCisgICAgICAgIC8vIHJpZ2h0IG9wZXJhbmQgKGkuZS4gY2hpbGQoMSkpIG9mIGEg
Q2hlY2tNdWwuCisgICAgICAgIEFueSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNl
bnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIuIEl0
IGNvdWxkIGJlIGEKKyAgICAgICAgLy8gcmVnaXN0ZXIgdGhhdCB0aGlzIGNsYWltcyB0byBjbG9i
YmVyIQorICAgICAgICBTb21lUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdpc3Rlci4gQXMgYW4gb3V0
cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgcmVnaXN0
ZXIgQjMgcGlja2VkLgorICAgICAgICBSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBvdXRw
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tl
ZC4gSXQncyBub3QgYSB2YWxpZAorICAgICAgICAvLyBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAg
ICAgICAgU3RhY2ssCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgZm9yY2VzIHRoZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhlIGFyZ3VtZW50IGFyZWEgYXQgc29t
ZQorICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAgICAgICAg
Ly8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgY29u
c3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9OworICAgIAor
ICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdpc3RlcikK
KyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXAo
cmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qgb2Zmc2V0
RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbUZQOwor
ICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50KGludHB0cl90IG9mZnNl
dEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0
RnJvbVNQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZh
bHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgfQor
CisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50RG91YmxlKGRvdWJsZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsK
KyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gQW55OyB9
CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
UmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92YWx1ZSk7CisgICAg
fQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21TUCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrQXJndW1lbnQpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGlu
dDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25z
dGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAgIGRvdWJsZSBkb3Vi
bGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJs
ZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2luZCk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNWYWx1ZVJlcF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5y
YgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0
ZXJuX21hdGNoZXIucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OTMgQEAKKyMhL3Vzci9i
aW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
IyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVx
dWlyZSAicGF0aG5hbWUiCisKKyR2YXJJbmRleCA9IDAKK2RlZiBuZXdWYXIKKyAgICAkdmFySW5k
ZXggKz0gMQorICAgICJfdG1wI3skdmFySW5kZXh9IgorZW5kCisKK2NsYXNzIFByb2R1Y3Rpb24K
KyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6bmFtZSwgOnZhck5hbWUsIDphbm9ueW1vdXMsIDpv
cGNvZGUsIDpjaGlsZHJlbgorCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBuYW1lLCBvcGNv
ZGUsIGNoaWxkcmVuKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBuYW1lID0g
bmFtZQorICAgICAgICBAYW5vbnltb3VzID0gKG5hbWUgPT0gbmlsIG9yIG5hbWUgPX4gL1xBXCQo
WzAtOV0rKVxaLykKKyAgICAgICAgQHZhck5hbWUgPSBAYW5vbnltb3VzID8gbmV3VmFyIDogbmFt
ZQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIEBjaGlsZHJlbiA9IGNoaWxkcmVu
ID8gY2hpbGRyZW4gOiBbXQorICAgIGVuZAorCisgICAgZGVmIGhhc09wY29kZQorICAgICAgICBv
cGNvZGUgIT0gbmlsCisgICAgZW5kCisKKyAgICBkZWYgZWFjaFZhcmlhYmxlKCZwcm9jKQorICAg
ICAgICBjaGlsZHJlbi5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBjaGlsZCwgaW5k
ZXggfAorICAgICAgICAgICAgeWllbGQgdmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxk
Lm5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC52YXJOYW1lLAorICAgICAgICAgICAgICAg
ICAgY2hpbGQuYW5vbnltb3VzID8gKGNoaWxkLm9wY29kZSA/IDphbm9uSW50ZXJuYWwgOiA6YW5v
bk9wZXJhbmQpIDogKGNoaWxkLm9wY29kZSA/IDppbnRlcm5hbCA6IDpvcGVyYW5kKSwKKyAgICAg
ICAgICAgICAgICAgIGluZGV4CisgICAgICAgICAgICBjaGlsZC5lYWNoVmFyaWFibGUoJnByb2Mp
CisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBNYXRjaGVyCisgICAgYXR0cl9yZWFk
ZXIgOm5hbWUsIDpwcm9kdWN0aW9ucworCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgcHJvZHVj
dGlvbnMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBwcm9k
dWN0aW9ucworICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpm
aWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwg
bGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVO
dW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAg
IiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4K
KyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGluaXRpYWxp
emUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0
cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAg
aWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5n
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5k
CisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90
aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNw
ZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNv
bW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlzZSAiUGFy
c2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJz
ZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAgZW5kCitl
bmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3
KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAgICB3aGls
ZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9cQVwjKFte
XG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxu
LworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIg
Kz0gMQorICAgICAgICB3aGVuIC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKS8KKyAgICAg
ICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJl
ciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAjIHdoaXRl
c3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVs9KCksXS8KKyAgICAgICAgICAgIHJlc3Vs
dCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAg
ICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3
KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clsw
Li4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNo
CisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICAj
IFdlIGNhbiBleHRlbmQgdGhpcyBhcyB3ZSBhZGQgbW9yZSBrZXl3b3Jkcy4gTGlrZSwgd2UgbWln
aHQgd2FudCAiaW5jbHVkZSIgZXZlbnR1YWxseS4KKyAgICB0b2tlbiA9fiAvXEEoKG1hdGNoZXIp
KVxaLworZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBW2Et
ekEtWjAtOSRdKFthLXpBLVowLTlfXSopXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5k
CisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAg
ICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAg
IGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKwor
ICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBh
cnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5w
YXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50
LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmls
ZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3Ig
YXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAg
ZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJy
b3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAg
YWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJl
c3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlm
aWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAg
ICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25z
LCBwcm9kdWN0aW9uKQorICAgICAgICBpZiBuYW1lID09IHByb2R1Y3Rpb24udmFyTmFtZQorICAg
ICAgICAgICAgcGFyc2VFcnJvcigiQ2hpbGQgcHJvZHVjdGlvbiBoYXMgc2FtZSBuYW1lIGFzIHBh
cmVudCBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRl
dGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAg
ICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAg
ICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UK
KyAgICAgICAgY29uc3VtZSgibWF0Y2hlciIpCisKKyAgICAgICAgbWF0Y2hlck5hbWUgPSBjb25z
dW1lSWRlbnRpZmllcgorCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKworICAgICAgICBsb29w
IHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAg
ICAgICAgIyBXZSBtaWdodCB3YW50IHRvIHN1cHBvcnQgImluY2x1ZGUiLiBJZiB3ZSBkaWQgdGhh
dCwgaXQgd291bGQgZ28gaGVyZS4KKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwYXJzZVByb2R1
Y3Rpb24KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsg
fCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAgICAg
ICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgICAgICBlbmQKKwor
ICAgICAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgICAgICB9CisKKyAgICAg
ICAgTWF0Y2hlci5uZXcobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorCisgICAg
ZGVmIHBhcnNlUHJvZHVjdGlvbgorICAgICAgICBvcmlnaW4gPSB0b2tlbi5vcmlnaW4KKyAgICAg
ICAgbmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgaWYgdG9rZW4gPT0gIj0iCisg
ICAgICAgICAgICBjb25zdW1lKCI9IikKKyAgICAgICAgICAgIG9wY29kZSA9IGNvbnN1bWVJZGVu
dGlmaWVyCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgZWxzaWYgdG9rZW4gPT0g
IigiCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgICAgIG9wY29kZSA9IG5hbWUK
KyAgICAgICAgICAgIG5hbWUgPSBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgbmlsLCBuaWwpCisgICAgICAgIGVuZAorICAg
ICAgICAKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBsb29wIHsKKyAgICAgICAg
ICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorCisgICAgICAgICAgICBhZGRVbmlxdWUobmFtZSwg
cHJvZHVjdGlvbnMsIHBhcnNlUHJvZHVjdGlvbikKKworICAgICAgICAgICAgYnJlYWsgaWYgdG9r
ZW4gPT0gIikiCisgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgfQorCisgICAgICAg
ICMgQWR2YW5jZSBhZnRlciB0aGUgIikiCisgICAgICAgIGFkdmFuY2UKKworICAgICAgICBQcm9k
dWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG9wY29kZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCitl
bmQKKworZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQo
ZmlsZU5hbWUpLCBmaWxlTmFtZSkKK21hdGNoZXIgPSBwYXJzZXIucGFyc2UKKworY2xhc3MgU3Vi
TWF0Y2gKKyAgICBhdHRyX3JlYWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0aW9ucworICAgIAorICAg
IGRlZiBpbml0aWFsaXplKGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBpbmRleE1h
cCA9IFtdCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGluZGV4TGlzdC5lYWNo
IHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwIDw8IGluZGV4
CisgICAgICAgICAgICBAcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAg
IH0KKyAgICBlbmQKKworICAgIGRlZiBtYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICBp
bmRleExpc3QubWFwIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4
TWFwW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCitlbmQKKworRmlsZS5vcGVuKCJCMyIgKyBt
YXRjaGVyLm5hbWUgKyAiLmgiLCAidyIpIHsKKyAgICB8IG91dHAgfAorCisgICAgb3V0cC5wdXRz
ICIvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxl
TmFtZX0gLS0gZG8gbm90IGVkaXQhIgorCisgICAgb3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRj
aGVyLm5hbWV9X2giCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2gi
CisgICAgCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkIzVmFsdWUuaFwiIgorICAgIAorICAg
IG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IgorCisgICAgb3V0cC5w
dXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgcnVu
I3ttYXRjaGVyLm5hbWV9KFZhbHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91
dHAucHV0cyAieyIKKworICAgICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJs
eSBpbmRlbnRlZCBjb2RlLCBiZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91
CisgICAgIyB3YW50IHRvIHNlZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGlu
IGEgZ29vZCB0ZXh0IGVkaXRvciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlv
dS4KKworICAgICMgSW4gb2RkIHNpdHVhdGlvbnMsIHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2
YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgIG91dHAu
cHV0cyAiVU5VU0VEX1BBUkFNKF92YWx1ZSk7IgorICAgICAgICAKKyAgICAjIFRoaXMganVzdCBw
cm90ZWN0cyB0aGUgY2FsbGVyIGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25z
IGhhdmluZyBkaWZmZXJlbnQgbGVuZ3Rocy4KKyAgICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFs
dWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHBy
b2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGlu
ZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRl
eExpc3RzWy0xXVswXV0uY2hpbGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVu
Z3RoCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAg
IGVuZAorICAgICAgICB9CisKKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAg
IHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlz
dFswXV0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICBpZiBsZW5ndGggPiAwCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGlsZHJlbi5zaXplKCkgPj0g
I3tsZW5ndGh9KSB7IgorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5
aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAg
ICAjIFRoaXMgZWZmaWNpZW50bHkgc2VsZWN0cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgcHJvZHVj
dGlvbnMuIEl0IGFzc3VtZXMgdGhhdCBwcm9kdWN0aW9ucworICAgICMgYXJlIG5vdCBkdXBsaWNh
dGVkLiBJdCB5aWVsZHMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBhbmQgdGhl
IGNvcm91dGluZSBpcworICAgICMgcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIHNwZWNpZmljIGNv
ZGUgZm9yIHRoYXQgcHJvZHVjdGlvbi4gVGhlIGNvcm91dGluZSBpcyBnaXZlbiBsaXN0cyBvZgor
ICAgICMgaW5kaWNlcyBvZiBwb3NzaWJseS1tYXRjaGluZyBwcm9kdWN0aW9ucy4KKyAgICBkZWYg
bWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICAj
IEZpcnN0LCBzcGxpdCB0aGUgcHJvZHVjdGlvbnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJvZHVjdGlv
bnMgd2l0aCBhbiBvcGNvZGUgYW5kIHByb2R1Y3Rpb25zCisgICAgICAgICMgd2l0aG91dCBvbmUu
CisgICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhf
aW5kZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBp
ZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmhhc09w
Y29kZSA9PSBwcm9kdWN0aW9uLmhhc09wY29kZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNb
LTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0
cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgIyBOb3csIGVtaXQgcGF0dGVybiBtYXRjaGluZyBjb2RlLiBXZSBkbyBpdCBkaWZmZXJlbnRs
eSBmb3IgbGlzdHMgd2l0aCBhbiBvcGNvZGUgdGhhbiBmb3IKKyAgICAgICAgIyBsaXN0cyB3aXRo
b3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhM
aXN0IHwKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFzT3Bjb2Rl
CisgICAgICAgICAgICAgICAgIyBOb3csIHdlIHNwbGl0IHRoaXMgaW5kZXggbGlzdCBpbnRvIGdy
b3VwcyBmb3IgZWFjaCBvcGNvZGUuCisgICAgICAgICAgICAgICAgZ3JvdXBzID0ge30KKyAgICAg
ICAgICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXgg
fAorICAgICAgICAgICAgICAgICAgICBwcm9kdWN0aW9uID0gcHJvZHVjdGlvbnNbaW5kZXhdCisg
ICAgICAgICAgICAgICAgICAgIGlmIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0gPDwgaW5kZXgKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1
Y3Rpb24ub3Bjb2RlXSA9IFtpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRlbWVudC4K
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5vcGNvZGUo
KSkgeyIKKyAgICAgICAgICAgICAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgICAgICAg
ICAgICAgfCBvcGNvZGUsIHN1YkluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiY2FzZSAje29wY29kZX06IgorICAgICAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1
Yk1hdGNoLm5ldyhzdWJJbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgICAg
ICBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAg
ICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
fSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNo
Lm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3Ro
KG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5t
YXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVu
ZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRha2VzIHByb2R1Y3Rpb25zIHRoYXQgaGF2
ZSB0aGUgc2FtZSBvcGNvZGUgYW5kIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBmcm9tIHRo
ZW0gYmFzZWQgb24KKyAgICAjIHRoZSBwcm9kdWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29sdW1uLgor
ICAgIGRlZiBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBjb2x1bW5J
bmRleCkKKyAgICAgICAgaWYgY29sdW1uSW5kZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hpbGRyZW4u
bGVuZ3RoCisgICAgICAgICAgICB5aWVsZCAoMC4uLihwcm9kdWN0aW9ucy5zaXplKSkudG9fYQor
ICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVuZAorCisgICAgICAgIHN1YlZhbHVlID0gbmV3
VmFyCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgIG91dHAucHV0cyAi
VmFsdWUqICN7c3ViVmFsdWV9ID0gI3t2YWx1ZU5hbWV9LT5jaGlsZCgje2NvbHVtbkluZGV4fSk7
IgorCisgICAgICAgICMgV2UgbWF5IG5vdCB1c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUgY29tcGls
ZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJB
TSgje3N1YlZhbHVlfSk7IgorICAgICAgICAKKyAgICAgICAgc3ViUHJvZHVjdGlvbnMgPSBwcm9k
dWN0aW9ucy5tYXAgeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uIHwKKyAgICAgICAgICAgIHBy
b2R1Y3Rpb24uY2hpbGRyZW5bY29sdW1uSW5kZXhdCisgICAgICAgIH0KKworICAgICAgICBtYXRj
aFJlY3Vyc2l2ZWx5KG91dHAsIHN1YlZhbHVlLCBzdWJQcm9kdWN0aW9ucykgeworICAgICAgICAg
ICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5k
ZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVl
TmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4ICsgMSkgeworICAgICAgICAg
ICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJ
bmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
b3V0cC5wdXRzICJ9IgorICAgIGVuZAorCisgICAgZGVmIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwg
dmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2
YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAg
ICAgICAgICAjIFdlIGFyZSBndWFyYW50ZWVkIHRoYXQgdGhpcyBpbmRleCBsaXN0IGNvbnRhaW5z
IHByb2R1Y3Rpb25zIHdpdGggdGhlIHNhbWUgb3Bjb2RlIGFuZAorICAgICAgICAgICAgIyB0aGUg
c2FtZSBsZW5ndGguCisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1l
LCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgMCkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0
IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0
KQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBtYXRjaFJlY3Vyc2l2
ZWx5KG91dHAsICJfdmFsdWUiLCBtYXRjaGVyLnByb2R1Y3Rpb25zKSB7CisgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8
CisgICAgICAgICAgICBwcm9kdWN0aW9uID0gbWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRleF0KKyAg
ICAgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7
cHJvZHVjdGlvbi52YXJOYW1lfSA9IF92YWx1ZTsiCisgICAgICAgICAgICBpbnRlcm5hbEFyZ3Vt
ZW50cyA9IFtdCisgICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRzID0gW10KKyAgICAgICAgICAg
IHRyeUFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBudW1TY29wZXMgPSAwCisgICAgICAgICAg
ICBzZWVuID0ge30KKyAgICAgICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxlIHsKKyAgICAg
ICAgICAgICAgICB8IHBhcmVudFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJOYW1lLCBraW5k
LCBpbmRleCB8CisgICAgICAgICAgICAgICAgbG9hZEV4cHIgPSAiI3twYXJlbnRWYXJOYW1lfS0+
Y2hpbGQoI3tpbmRleH0pIgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIHNl
ZW5bY2hpbGRWYXJOYW1lXQorICAgICAgICAgICAgICAgICAgICB0bXAgPSBuZXdWYXIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3t0bXB9ID0gI3tsb2FkRXhwcn07Igor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3RtcH0gPT0gI3tjaGlsZFZhck5h
bWV9KSB7IgorICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VlbltjaGlsZFZhck5hbWVdID0gdHJ1ZQor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1
ZSogI3tjaGlsZFZhck5hbWV9ID0gI3tsb2FkRXhwcn07IgorCisgICAgICAgICAgICAgICAgICAg
IGlmIGNoaWxkTmFtZSA9fiAvXEFcJC8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoaWxk
TmFtZSA9fiAvXEFcJChbMC05XSspXFovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5pc0ludCgjeyQxfSkpIHsiCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoI3tjaGlsZFZhck5hbWV9LT5oYXNJbnQoKSkgeyIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpbnRlcm5hbEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwg
b3Iga2luZCA9PSA6YW5vbkludGVybmFsCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRBcmd1
bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOm9wZXJhbmQgb3Iga2luZCA9PSA6YW5v
bk9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgdHJ5QXJndW1lbnRzIDw8IGNoaWxkVmFyTmFt
ZSBpZiBraW5kID09IDppbnRlcm5hbCBvciBraW5kID09IDpvcGVyYW5kCisgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhZGFwdG9y
LmFjY2VwdFJvb3QoX3ZhbHVlKSIKKyAgICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0
b3IuYWNjZXB0SW50ZXJuYWxzKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIpICsgIiki
KQorICAgICAgICAgICAgb3V0cC5wdXRzKCIgICAgJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygi
ICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgb3V0cC5w
dXRzKCIgICAgJiYgYWRhcHRvci50cnkje3Byb2R1Y3Rpb24ubmFtZX0oIiArIHRyeUFyZ3VtZW50
cy5qb2luKCIsICIpICsgIikpIikKKyAgICAgICAgICAgIG91dHAucHV0cyAiICAgIHJldHVybjsi
CisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAgICAgIG91dHAucHV0
cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0Y2hl
ci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorCisjaW5j
bHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWly
UGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK3ZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2Nv
cGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVTdGFjayIpOworCisgICAgLy8gQWxsb2NhdGUg
YWxsIG9mIHRoZSBsb2NrZWQgc2xvdHMgaW4gb3JkZXIuCisgICAgQVNTRVJUKCFjb2RlLmZyYW1l
U2l6ZSgpKTsKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUgPSAwOworICAgIGZvciAoU3RhY2tTbG90
KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSA9
PSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQpIHsKKyAgICAgICAgICAgIHNsb3QtPnNldE9mZnNldEZy
b21GUCgtZnJhbWVTaXplIC0gc2xvdC0+Ynl0ZVNpemUoKSk7CisgICAgICAgICAgICBmcmFtZVNp
emUgKz0gc2xvdC0+Ynl0ZVNpemUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3
ZSBoYW5kbGUgdGhlIGFub255bW91cyBzbG90cy4gTm90ZSB0aGF0IHRoZW9yZXRpY2FsbHkgd2Ug
c2hvdWxkIGRvIGFuIGVzY2FwZSBhbmFseXNpcworICAgIC8vIGhlcmUuIEJ1dCwgY3VycmVudGx5
IEFpciBkb2Vzbid0IHN1cHBvcnQgZXNjYXBpbmcgYSBTdGFja1Nsb3QhCisgICAgLy8gRklYTUU6
IEFkZCBzdXBwb3J0IGZvciBlc2NhcGluZyBhIFN0YWNrU2xvdCBhbmQgYWRkIGVzY2FwZSBhbmFs
eXNpcyB0byBhbGxvY2F0ZVN0YWNrKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDQzMAorCisgICAgYXV0byBpc1JlbGV2YW50ID0gW10gKGNvbnN0
IEFyZyYgYXJnKSAtPiBib29sIHsKKyAgICAgICAgcmV0dW5yIGFyZy5pc1N0YWNrKCkgJiYgYXJn
LnN0YWNrU2xvdCgpLT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOworICAgIH07
CisKKyAgICBMaXZlbmVzczxBcmc+IGxpdmVuZXNzKGNvZGUpOworICAgIEluZGV4TWFwPFN0YWNr
U2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc2l6ZSgpKTsKKyAg
ICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxBcmc+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxp
dmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgYXV0byBpbnRlcmZlcmUgPSBbJl0gKCkgeworICAg
ICAgICAgICAgLy8gRm9ybSBhIGNsaXF1ZSBvZiBzdGFjayBzbG90cyB0aGF0IGludGVyZmVyZS4g
Rmlyc3QgZmluZCB0aGUgbGlzdCBvZiBzdGFjayBzbG90cworICAgICAgICAgICAgLy8gdGhhdCBh
cmUgbGl2ZSByaWdodCBub3cuCisgICAgICAgICAgICBzbG90cy5yZXNpemUoMCk7CisgICAgICAg
ICAgICBmb3IgKEFyZyBhcmcgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGlzUmVtZXZhbnQoYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFy
Zy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc2xvdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja1Ns
b3QqIG91dGVyID0gc2xvdHNbaV07CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
aSArIDE7IGogPCBzbG90cy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBTdGFj
a1Nsb3QqIGlubmVyID0gc2xvdHNbaV07CisKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90
KiBmaXJzdCA9IG91dGVyOworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNlY29uZCA9
IGlubmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QtPmluZGV4KCkgPiBzZWNvbmQt
PmluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoZmlyc3QsIHNlY29u
ZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW2ZpcnN0XS5hZGQoc2Vjb25k
KTsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW3NlY29uZF0uYWRkKGZpcnN0KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
bnRlcmZlcmUobG9jYWxDYWxjLmxpdmUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAg
ICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAg
aW50ZXJmZXJlKGxvY2FsQ2FsYy5saXZlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
Tm93IHdlIGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0aGlzIGFsZ29yaXRo
bSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKKyAgICAvLyBTdGFja1Nsb3Qgd2UganVzdCB3
YW50IHRvIGZpbmQgdGhlIG9mZnNldEZyb21GUCB0aGF0IGlzIGNsb3Nlc3QgdG8gemVybyB3aGls
ZSBlbnN1cmluZyBubworICAgIC8vIG92ZXJsYXAgd2l0aCBvdGhlciBTdGFja1Nsb3RzIHRoYXQg
dGhpcyBvdmVybGFwcyB3aXRoLgorICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFj
a1Nsb3RzKCkpIHsKKyAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAg
ICAgICAvLyBBbHJlYWR5IGFzc2lnbmVkIGFuIG9mZnNldC4KKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIHBvc3NpYmxlIGZpcnN0IGZpdCBvZmZzZXRz
IGFyZToKKyAgICAgICAgLy8gLSBmcmFtZVNpemUgLSBzbG90LT5ieXRlU2l6ZSgpCisgICAgICAg
IC8vIC0gZm9yIGFsbCBzbG90MiBpbiBpbnRlcmZlcmVuY2Vbc2xvdF0sIHNsb3QyLT5vZmZzZXRG
cm9tRlAoKSAtIHNsb3QtPmJ5dGVTaXplKCkuCisgICAgICAgIC8vIFdlIG5lZWQgdG8gZmluZCBv
bmUgb2YgdGhvc2UgdGhhdCBkb2Vzbid0IGludGVyZmVyZSB3aXRoIGFueW9uZS4KKworICAgICAg
ICBIYXNoU2V0PFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzID0gaW50ZXJmZXJlbmNlW3Nsb3RdOwor
CisgICAgICAgIGF1dG8gYXR0ZW1wdEFzc2lnbm1lbnQgPSBbJl0gKGludHB0cl90IG9mZnNldEZy
b21GUCkgLT4gYm9vbCB7CisgICAgICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDog
b3RoZXJTbG90cykgeworICAgICAgICAgICAgICAgIGlmICghb3RoZXJTbG90LT5vZmZzZXRGcm9t
RlAoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWYg
KG9mZnNldEZyb21GUCArIHNsb3QtPmJ5dGVTaXplKCkgPj0gb3RoZXJTbG90LT5vZmZzZXRGcm9t
RlAoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAg
IGlmIChvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpICsgb3RoZXJTbG90LT5ieXRlU2l6ZSgpID49
IG9mZnNldEZyb21GUCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAob2Zmc2V0RnJvbUZQ
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9OworCisgICAgICAgIGlmIChh
dHRlbXB0QXNzaWdubWVudChmcmFtZVNpemUgLSBzbG90LT5ieXRlU2l6ZSgpKSkKKyAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICBib29sIGZvdW5kID0gZmFsc2U7CisgICAgICAgIGZvciAo
U3RhY2tTbG90KiBvdGhlclNsb3QgOiBvdGhlclNsb3RzKSB7CisgICAgICAgICAgICBpZiAob3Ro
ZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgICAgIGlmIChhdHRlbXB0QXNz
aWdubWVudChvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpIC0gc2xvdC0+Ynl0ZVNpemUoKSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGZvdW5kKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0g
dGhlIGNvZGUgdG8gdXNlIEFkZHIncyBpbnN0ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEg
bG9zc2xlc3MKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBT
dGFja1Nsb3RzIGFycmF5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggU3RhY2tTbG90IGFueQorICAgIC8v
IG9mZnNldC1mcm9tLUZQIHJlZmVycyB0by4KKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAg
ICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIGlmIChhcmcu
aXNTdGFjaygpKSB7CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAg
ICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgYXJnLnN0YWNrU2xvdCgpLT5vZmZzZXRGcm9t
RlAoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFsbG9jYXRlU3RhY2tfaAorI2RlZmluZSBB
aXJBbGxvY2F0ZVN0YWNrX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGFsbG9jYXRlcyBTdGFja1Nsb3Rz
IHRvIHBsYWNlcyBvbiB0aGUgc3RhY2suIEl0IGZpcnN0IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9u
ZXMgaW4gaW5kZXgKKy8vIG9yZGVyIGFuZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2lu
ZyBmaXJzdCBmaXQuCisKK3ZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJik7CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckFsbG9jYXRlU3RhY2tfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFyZy5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgQXJnOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICBjYXNlIFRtcDoKKyAgICAgICAgb3V0LnByaW50KHRtcCgpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSW1tOgorICAgICAgICBvdXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEltbTY0OgorICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4Iiwg
bV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGRyOgorICAgICAgICBpZiAo
b2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQu
cHJpbnQoIigiLCBiYXNlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZGV4
OgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkp
OworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsIiwgaW5kZXgoKSk7CisgICAgICAg
IGlmIChzY2FsZSgpICE9IDEpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsK
KyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNr
OgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KTsK
KyAgICAgICAgb3V0LnByaW50KCIoIiwgcG9pbnRlckR1bXAoc3RhY2tTbG90KCkpLCAiKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBpZiAob2Zmc2V0KCkp
CisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIoY2Fs
bEFyZykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgb3V0
LnByaW50KGFzUmVsYXRpb25hbENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgUmVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVzdWx0Q29uZGl0aW9uKCkpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBvdXQucHJpbnQocG9pbnRl
ckR1bXAoc3BlY2lhbCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1ODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJBcmdfaAorI2RlZmluZSBBaXJBcmdfaAorCisjaW5jbHVk
ZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3BlY2lhbDsKK2NsYXNzIFN0YWNr
U2xvdDsKKworLy8gVGhpcyBjbGFzcyBuYW1lIGlzIGFsc28gaW50ZW50aW9uYWxseSB0ZXJzZSBi
ZWNhdXNlIHdlIHdpbGwgc2F5IGl0IGEgbG90LiBZb3UnbGwgc2VlIGNvZGUgbGlrZQorLy8gSW5z
dCguLi4sIEFyZzo6aW1tKDUpLCBBcmc6OmFkZHIodGhpbmcsIGJsYWgpLCAuLi4pCitjbGFzcyBB
cmcgeworcHVibGljOgorICAgIC8vIFRoZXNlIGVudW0gbWVtYmVycyBhcmUgaW50ZW50aW9uYWxs
eSB0ZXJzZSBiZWNhdXNlIHdlIGhhdmUgdG8gbWVudGlvbiB0aGVtIGEgbG90LgorICAgIGVudW0g
S2luZCA6IGludDhfdCB7CisgICAgICAgIFRtcCwKKyAgICAgICAgSW1tLAorICAgICAgICBJbW02
NCwKKyAgICAgICAgQWRkciwKKyAgICAgICAgU3RhY2ssCisgICAgICAgIENhbGxBcmcsCisgICAg
ICAgIEluZGV4LAorICAgICAgICBSZWxDb25kLAorICAgICAgICBSZXNDb25kLAorICAgICAgICBT
cGVjaWFsCisgICAgfTsKKworICAgIGVudW0gUm9sZSA6IGludDhfdCB7CisgICAgICAgIFVzZSwK
KyAgICAgICAgRGVmLAorICAgICAgICBVc2VEZWYKKyAgICB9OworCisgICAgZW51bSBUeXBlIDog
aW50OF90IHsKKyAgICAgICAgR1AsCisgICAgICAgIEZQCisgICAgfTsKKworICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBudW1UeXBlcyA9IDI7CisKKyAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xl
IHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6
CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGNhc2UgRGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNEZWYoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3JCM1R5
cGUoQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBHUDsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2NDoK
KyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAg
ICByZXR1cm4gRlA7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBHUDsKKyAgICB9CisKKyAgICBBcmcoKQorICAgIHsKKyAgICB9CisKKyAg
ICBBcmcoQWlyOjpUbXAgdG1wKQorICAgICAgICA6IG1fa2luZChUbXApCisgICAgICAgICwgbV9i
YXNlKHRtcCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW0oaW50MzJfdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJ
bW07CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tNjQoaW50cHRyX3QgdmFsdWUpCisgICAg
eworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tNjQ7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHN0YXRpYyBBcmcgYWRkcihBaXI6OlRtcCBiYXNlLCBpbnQzMl90IG9mZnNl
dCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBcmcg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQWRkcjsKKyAgICAgICAgcmVzdWx0Lm1f
YmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHN0YWNrKFN0YWNrU2xvdCog
dmFsdWUsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
Yml0d2lzZV9jYXN0PGludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0g
b2Zmc2V0OyAvLyBJIGtub3csIHl1Y2suCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgc3RhdGljIEFyZyBjYWxsQXJnKGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
QXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENhbGxBcmc7CisgICAgICAgIHJl
c3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAyOgor
ICAgICAgICBjYXNlIDQ6CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGxvZ1NjYWxlKHVuc2lnbmVkIHNjYWxlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIDg6Cisg
ICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzdGF0aWMgQXJnIGluZGV4KEFpcjo6VG1wIGJhc2UsIEFpcjo6VG1wIGluZGV4LCB1
bnNpZ25lZCBzY2FsZSA9IDEsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpbmRleC5pc0dQKCkpOworICAgICAg
ICBBU1NFUlQoaXNWYWxpZFNjYWxlKHNjYWxlKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7
CisgICAgICAgIHJlc3VsdC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX3NjYWxl
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2NhbGUpOworICAgICAgICByZXN1bHQubV9vZmZzZXQg
PSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFy
ZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
KyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZWxD
b25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyByZXNDb25kKE1hY3JvQXNzZW1ibGVy
OjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlc0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNl
dCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0
aWMgQXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQorICAgIHsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFNwZWNpYWw7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oc3BlY2lhbCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFyZyYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZz
ZXQKKyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYm
IG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIu
bV9pbmRleAorICAgICAgICAgICAgJiYgbV9zY2FsZSA9PSBvdGhlci5tX3NjYWxlOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAqdGhpcyAhPSBBcmcoKTsgfQorCisgICAgS2lu
ZCBraW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQ7CisgICAgfQorCisg
ICAgYm9vbCBpc1RtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFRt
cDsKKyAgICB9CisKKyAgICBib29sIGlzSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBraW5kKCkgPT0gSW1tOworICAgIH0KKworICAgIGJvb2wgaXNJbW02NCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OworICAgIH0KKworICAgIGJvb2wgaXNB
ZGRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKKyAgICB9
CisKKyAgICBib29sIGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBTdGFjazsKKyAgICB9CisKKyAgICBib29sIGlzQ2FsbEFyZygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IENhbGxBcmc7CisgICAgfQorCisgICAgYm9vbCBpc0lu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CisgICAg
fQorCisgICAgYm9vbCBpc1JlbENvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBSZWxDb25kOworICAgIH0KKworICAgIGJvb2wgaXNSZXNDb25kKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVzQ29uZDsKKyAgICB9CisKKyAgICBib29s
IGlzU3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNp
YWw7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCB0bXAoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUbXApOworICAgICAgICByZXR1
cm4gbV9iYXNlOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW0gfHwga2luZCgpID09IEltbTY0KTsKKyAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKworICAgIHZvaWQqIHBvaW50ZXJWYWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fb2Zmc2V0KSk7Cisg
ICAgfQorCisgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fYmFz
ZTsKKyAgICB9CisKKyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoa2luZCgpID09IFN0YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMy
X3Q+KG1fc2NhbGUpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09
IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludDMyX3Q+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAg
QWlyOjpUbXAgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJ
bmRleCk7CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNj
YWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAg
ICAgICByZXR1cm4gbV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisg
ICAgQWlyOjpTcGVjaWFsKiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gU3BlY2lhbCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVj
aWFsKj4obV9vZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAg
Ym9vbCBpc0ZQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRt
cCgpLmlzRlAoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2Fu
IGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9v
bCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAg
IGNhc2UgSW1tOgorICAgICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAg
ICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBjYXNlIENh
bGxBcmc6CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAg
ICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2Fz
ZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0
aGF0IHJlcXVpcmVzIGEgRlAgdmFsdWUuCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNl
IFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNh
c2UgSW5kZXg6CisgICAgICAgIGNhc2UgQmFzZToKKyAgICAgICAgY2FzZSBTdGFja1Nsb3Q6Cisg
ICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxv
dyBJbW02NCBhcyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRp
bmcgc3RhY2ttYXBzLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1w
OgorICAgICAgICAgICAgcmV0dXJuIGlzRlBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgaGFzVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRt
cDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBl
IGlzIGFtYmlndW91cyBmb3Igc29tZSBhcmcga2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5
cGUgdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsK
KyAgICB9CisKKyAgICBib29sIGlzVHlwZShUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBp
c0dQKCk7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gaXNGUCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAg
IGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1w
KCkuaXNGUFIoKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB0bXAoKS5mcHIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAg
IH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJl
ZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRtcCgpLmdwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBm
cFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4
KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRtcCgpLnRtcEluZGV4KCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoK
KyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1f
YmFzZSk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFRoaXMgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFy
ZyBpbiBhIERlZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBu
ZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3YgJXJh
eCwgKCVyY3gpCisgICAgLy8KKyAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3gu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoUm9s
ZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAg
IGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xlLCBhcmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1
bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNl
LCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXV0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbSgp
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nh
c3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAg
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQgYXNUcnVzdGVkSW1tNjQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KHBvaW50ZXJWYWx1ZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAg
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJl
c3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0K
KworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
Ymxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgbV9iYXNlLmdwcigpLCBtX2luZGV4Lmdwcigp
LCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U2NhbGU+KGxvZ1NjYWxlKCkpLAorICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9uYWxDb25kaXRpb24oKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uPihtX29mZnNl
dCk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBhc1Jlc3Vs
dENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZXNDb25kKCkpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlv
bj4obV9vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCitwcml2YXRlOgorICAgIGludDY0X3QgbV9vZmZzZXQgeyAwIH07CisgICAgS2luZCBtX2tp
bmQgeyBJbW0gfTsKKyAgICBpbnQzMl90IG1fc2NhbGUgeyAxIH07CisgICAgQWlyOjpUbXAgbV9i
YXNlOworICAgIEFpcjo6VG1wIG1faW5kZXg7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJBcmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIK
KworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywg
YmxvY2spOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqIGJsb2NrKQoreworICAgIEIzOjpyZW1vdmVQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9
CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20s
IEJhc2ljQmxvY2sqIHRvKQoreworICAgIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJv
bSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFz
aWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIkJCIiwgKnRoaXMsICI6XG4iKTsKKyAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAqdGhp
cykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEz
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFpckJhc2ljQmxvY2tfaAorI2RlZmluZSBBaXJCYXNpY0Jsb2NrX2gKKworI2luY2x1ZGUg
IkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIENvZGU7CitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK2NsYXNzIEJhc2lj
QmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1w
UHJlZml4ID0gIiMiOworCisgICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IEFkamFjZW5jeUxpc3Q7CisgICAgCisgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgSW5z
dExpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAg
SW5zdExpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKyAgICBJ
bnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmJl
Z2luKCk7IH0KKyAgICBJbnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0cy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2luc3RzLnNpemUoKTsgfQorICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsg
cmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9p
bnN0cy5sYXN0KCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBh
cHBlbmRJbnN0KEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3Rk
Ojpmb3J3YXJkPEluc3Q+KGluc3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQor
ICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRz
Pihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBj
YXNlIHRvIHdoaWNoIHRoZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIx
IiBjYXNlIGlzIHRoZQorICAgIC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNl
bnQgdGhlIGZhbGwtdGhyb3VnaCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25l
ZCBudW1TdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQor
ICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBBZGph
Y2VuY3lMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4
XTsgfQorICAgIEFkamFjZW5jeUxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3Nv
cnNbaW5kZXhdOyB9CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJl
dHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nv
cih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9
CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBwcmVkZWNl
c3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBBZGph
Y2VuY3lMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07
IH0KKworICAgIHZvaWQgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIHZvaWQgcmVt
b3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIHZvaWQgcmVwbGFjZVByZWRlY2Vzc29y
KEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKyAgICBmcmllbmQgY2xhc3MgSW5z
ZXJ0aW9uU2V0OworICAgIAorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgpCisgICAgewor
ICAgIH0KKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAg
ICBBZGphY2VuY3lMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBBZGphY2VuY3lMaXN0IG1fcHJlZGVj
ZXNzb3JzOworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBE
ZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhi
bG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRl
ZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+
Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitE
ZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0
dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgpCit7CisgICAgbV9jbG9i
YmVyZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgIG1fY2xvYmJlcmVk
UmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2Ji
ZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygp
KTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKK30KKworQ0NhbGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwor
dm9pZCBDQ2FsbFNwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFt
YmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGNhbGxiYWNrKGlu
c3QuYXJnc1sxXSwgQXJnOjpVc2UsIEFyZzo6R1ApOworICAgIAorICAgIGZvciAodW5zaWduZWQg
aSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRm9yIHRoZSB0
eXBlLCB3ZSBjYW4ganVzdCBxdWVyeSB0aGUgYXJnJ3MgdHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUg
YSB0eXBlLCBiZWNhdXNlIHdlCisgICAgICAgIC8vIHJlcXVpcmUgdGhlc2UgYXJncyB0byBiZSBh
cmd1bWVudCByZWdpc3RlcnMuCisgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpV
c2UsIGluc3QuYXJnc1tpXS50eXBlKCkpOworICAgIH0KK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6
OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkg
eworICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAgIGlmIChzaXplb2Yodm9pZCopID09IDQpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpJ
bW02NDoKKyAgICAgICAgaWYgKHNpemVvZih2b2lkKikgPT0gOCkKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICBjYXNlIEFy
Zzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgY2FzZSBBcmc6OkNhbGxBcmc6Cisg
ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc0dQKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbaV0uaXNSZWcoKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBpZiAoaW5zdC5hcmdzW2ldID09IFRtcChzY3JhdGNoUmVnaXN0ZXIp
KQorICAgICAgICAgICAgcmV0dXJuICBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5k
ZXgpCit7CisgICAgLy8gQXJnIDEgY2FuIGJlIGEgc3RhY2sgYWRkcmVzcyBmb3Igc3VyZS4KKyAg
ICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJ
bnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQoreworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0Nh
bGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJh
dGlvbkNvbnRleHQmKQoreworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAg
IGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbVB0cjoKKyAgICAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGluc3QuYXJnc1sxXS5wb2ludGVyVmFsdWUoKSks
IHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGppdC5jYWxsKGluc3Qu
YXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAg
ICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOworICAgICAgICBicmVhazsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQor
Citjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoKQor
eworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpk
dW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQ0NhbGwi
KTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiZnVuY3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMg
Y2FsbGluZyBjb252ZW50aW9uLiIpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNw
ZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q0NhbGxTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsU3Bl
Y2lhbF9oCisjZGVmaW5lIEFpckNDYWxsU3BlY2lhbF9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gVXNlIHRoaXMgc3BlY2lhbCBmb3IgY29u
c3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBjb3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0
IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBvYmplY3QuIEFyZyAxIGlzIHRoZSBjYWxs
ZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJlZ2lzdGVyLCBvciBhbiBhZGRyZXNzLiBU
aGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRoZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0
ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1lbnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBz
dGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdvcmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sg
c3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24gd2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBh
cmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRvIGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBs
aXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQg
d291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSByZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lz
dGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlmIHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRu
J3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIgdG8gYmUgbGl2ZSB1bnRpbCBzb21lCisv
LyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwgd2hpY2hldmVyIGhhcHBlbmVkIHNvb25l
ci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGljIFNwZWNpYWwgeworcHVibGljOgorICAg
IENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNpYWwoKTsKKworICAgIC8vIFlvdSBjYW5u
b3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVu
cyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAgLy8gdXNlZCBmb3IgYXJndW1lbnRzIGlu
IHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBpcyB0aGUgb25seSB0
aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0byBD
IGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5m
bzo6bm9uQXJnR1BSMC4KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhJbnN0Jiwg
Y29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAg
ICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soSW5z
dCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdp
c3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4
dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3Mo
SW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRSZWdzOworfTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQ0NhbGxT
cGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworQ29kZTo6Q29kZSgpCit7Cit9CisKK0NvZGU6On5Db2RlKCkKK3sKK30KKworQmFzaWNC
bG9jayogQ29kZTo6YWRkQmxvY2soKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2Nr
PiBibG9jayhuZXcgQmFzaWNCbG9jayhtX2Jsb2Nrcy5zaXplKCkpKTsKKyAgICBCYXNpY0Jsb2Nr
KiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJs
b2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBDb2RlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQor
ICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAobnVtU3RhY2tTbG90
cygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xvdHM6XG4iKTsKKyAgICAgICAgZm9y
IChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQo
IiAgICAiLCBkZWVwRHVtcChzbG90KSwgIlxuIik7CisgICAgfQorICAgIGlmIChudW1TcGVjaWFs
cygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9yIChT
cGVjaWFsKiBzcGVjaWFsIDogc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAg
ICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNvZGVfaAorI2RlZmluZSBB
aXJDb2RlX2gKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJTcGVj
aWFsLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK25hbWVzcGFjZSBBaXIgeworCisvLyBU
aGlzIGlzIGFuIElSIHRoYXQgaXMgdmVyeSBjbG9zZSB0byB0aGUgYmFyZSBtZXRhbC4gSXQgcmVx
dWlyZXMgYWJvdXQgNDB4IG1vcmUgYnl0ZXMgdGhhbiB0aGUKKy8vIGdlbmVyYXRlZCBtYWNoaW5l
IGNvZGUgLSBmb3IgZXhhbXBsZSBpZiB5b3UncmUgZ2VuZXJhdGluZyAxTUIgb2YgbWFjaGluZSBj
b2RlLCB5b3UgbmVlZCBhYm91dAorLy8gNDBNQiBvZiBBaXIuCisKK2NsYXNzIENvZGUgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKENvZGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIENvZGUoKTsKKyAgICB+Q29kZSgpOworCisgICAgQmFzaWNCbG9jayog
YWRkQmxvY2soKTsKKworICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVT
aXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsKKworICAgIFNw
ZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+KTsKKworICAgIC8vIFRo
aXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8gbWFrZSBhIEMgY2FsbCEKKyAgICBTcGVjaWFs
KiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIFRtcCBuZXdUbXAoQXJnOjpUeXBlIHR5cGUpCisgICAg
eworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAg
ICAgICAgcmV0dXJuIFRtcDo6Z3BUbXBGb3JJbmRleChtX251bUdQVG1wcysrKTsKKyAgICAgICAg
Y2FzZSBBcmc6OkZQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6ZnBUbXBGb3JJbmRleChtX251
bUZQVG1wcysrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIG51bVRtcHMoQXJn
OjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtR1BUbXBzOworICAgICAgICBjYXNl
IEFyZzo6RlA6CisgICAgICAgICAgICByZXR1cm4gbV9udW1GUFRtcHM7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lU2l6
ZTsgfQorCisgICAgLy8gT25seSBwaGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uIGFyZSBh
bGxvd2VkIHRvIHNldCB0aGlzLiBDdXJyZW50bHksIG9ubHkKKyAgICAvLyBBaXI6OmFsbG9jYXRl
U3RhY2soKSBkb2VzIHRoaXMuCisgICAgdm9pZCBzZXRGcmFtZVNpemUodW5zaWduZWQgZnJhbWVT
aXplKQorICAgIHsKKyAgICAgICAgbV9mcmFtZVNpemUgPSBmcmFtZVNpemU7CisgICAgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2lj
QmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0
b3IoKToKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwg
bV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0K
KworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBv
dGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNp
Z25lZCBmaW5kTmV4dCh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hp
bGUgKGluZGV4IDwgbV9wcm9jZWR1cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4
KSkKKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7Cisg
ICAgICAgIH0KKworICAgICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNp
Z25lZCBtX2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCBudW1CbG9ja3MoKSk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIFNwZWNpYWwqIG1fY2FsbFNwZWNp
YWwgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07CisgICAgdW5z
aWduZWQgbV9udW1GUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9mcmFtZVNpemUgeyAwIH07
Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJD
b2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9u
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGlvbkNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorI2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4
dF9oCisKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dCB7
CisgICAgdHlwZWRlZiB2b2lkIExhdGVQYXRoRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgR2VuZXJh
dGlvbkNvbnRleHQmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8TGF0ZVBhdGhGdW5jdGlvbj4g
TGF0ZVBhdGg7CisKKyAgICBWZWN0b3I8UmVmUHRyPExhdGVQYXRoPj4gbGF0ZVBhdGhzOworfTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyR2VuZXJh
dGlvbkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaW5jbHVk
ZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJs
b2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5tX2luc3RzLCBtX2luc2VydGlv
bnMpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisjZGVmaW5lIEFp
ckluc2VydGlvblNldF9oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0lu
c2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3Mg
Q29kZTsKKwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247CisKK2NsYXNz
IEluc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUmIGNvZGUpCisg
ICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUmIGNvZGUoKSB7
IHJldHVybiBtX2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBh
cHBlbmRJbnNlcnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0aW9u
cy5hcHBlbmQoc3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwgSW5z
dCYmIGluc3QpCisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4
LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJn
dW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwg
SW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisg
ICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2Nv
ZGU7CisgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0Lmgi
CisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwg
IiAiLCBsaXN0RHVtcChhcmdzKSwgIiAgOyAiLCAqb3JpZ2luKTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVmaW5l
IEFpckluc3RfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRp
b25Db250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8
QXJnLCAzPiBBcmdMaXN0OworCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2lu
KQorICAgICAgICA6IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCisgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAg
ICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAg
fQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0
JiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2lu
KG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJ
bnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisg
ICAgICAgIDogYXJncyhXVEY6Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3Jp
Z2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5v
dGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdl
IHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMg
bWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IElu
c3QmIiB0aGVuIHlvdSdyZQorICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAg
Ly8gVGhpcyBvbmx5IHdhbGtzIHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9u
ZWQsIGFuZCBpdCBkb2Vzbid0IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcgYXJnIDogYXJn
cykKKyAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAg
ICB0eXBlZGVmIHZvaWQgRWFjaEFyZ0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJnOjpUeXBl
KTsKKyAgICAKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUp
LiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVy
YXRvci5yYi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFj
aEFyZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAgIC8vIENhbGxzIHRoZSBmdW5jdG9y
IHdpdGggKHRtcCwgcm9sZSwgdHlwZSkuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2hUbXAoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZvckVhY2hBcmdSb2xlKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xl
IHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAo
cm9sZSwgdHlwZSwgZnVuY3Rvcik7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBU
aGluZyBjYW4gYmUgZWl0aGVyIEFyZyBvciBUbXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhp
bmcsIHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGEg
U3BlY2lhbCouIFRoaXMgdW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAgYm9v
bCBoYXNTcGVjaWFsKCkgY29uc3Q7CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFsIHJl
Z2lzdGVycyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZmaWNp
ZW5jeSwKKyAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNp
YWwoKSByZXR1cm5zIHRydWUuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVk
UmVncygpOworCisgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUg
bGl2ZS4gVGhpcyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisgICAg
Ly8gdGhhdCBmb3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3Mg
aWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3Rl
cnMoY29uc3QgUmVnaXN0ZXJTZXQmKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4g
b25lIG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1n
ZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNWYWxp
ZEZvcm0oKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxp
ZCBmb3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisg
ICAgLy8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChvciBh
IFN0YWNrU2xvdCBvciBDYWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVuIGlu
ZGV4PyBTcGlsbGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvIGZp
bmQgVG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBpdCBj
YWxscyB0aGlzIHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBhbiBB
cmc6OkFkZHIuIElmIGl0CisgICAgLy8gZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxs
cyB0aGF0IEFyZydzIGZvckVhY2hUbXAgdG8gZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4KKyAg
ICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dl
bmVyYXRvci5yYi4KKyAgICBib29sIGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsKKwor
ICAgIC8vIEdlbmVyYXRlIHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBpcywg
bGlrZSwgbGl0ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRlcm1p
bmFsLCBpdCByZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0aGUg
InRoZW4iIGNhc2UsIHdpdGggdGhlICJlbHNlIgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10aHJv
dWdoLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3Iu
cmIuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdlbmVy
YXRpb25Db250ZXh0Jik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
ICAgIEFyZ0xpc3QgYXJnczsKKyAgICBWYWx1ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVlIHRo
YXQgdGhpcyBvcmlnaW5hdGVkIGZyb20uCisgICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckluc3RfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0SW5saW5lc19oCisjZGVmaW5l
IEFpckluc3RJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJP
cGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWxzLmgiCisjaW5jbHVkZSAiQjNTdGFj
a21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRm9y
RWFjaDsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8VG1wPiB7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAg
ICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1bmN0b3IpOwor
ICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgor
dm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgRm9yRWFjaDxUaGlu
Zz46OmZvckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitib29sIEluc3Q6Omhhc1NwZWNpYWwo
KSBjb25zdAoreworICAgIHJldHVybiBhcmdzLnNpemUoKSAmJiBhcmdzWzBdLmlzU3BlY2lhbCgp
OworfQorCitjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sK
KyAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7
Cit9CisKK3ZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYg
dXNlZFJlZ2lzdGVycykKK3sKKyAgICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lz
dGVycygqdGhpcywgdXNlZFJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBib29sIGlzU2hpZnRWYWxp
ZChJbnN0JiBpbnN0KQoreworI2lmIENQVShYODYpCisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9
PSBUbXAoWDg2UmVnaXN0ZXI6OmN4KTsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYK
K30gICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbHVlKEluc3QmIGluc3QpCit7CisgICAg
cmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zdElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyTGl2ZW5lc3NfaAorI2RlZmluZSBBaXJMaXZlbmVzc19oCisKKyNpbmNs
dWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIFlvdSBjYW4gY29t
cHV0ZSBsaXZlbmVzcyBvdmVyIFRtcCdzIG9yIG92ZXIgQXJnJ3MuIElmIHlvdSBjb21wdXRlIG92
ZXIgQXJnJ3MsIHlvdSBnZXQgYm90aAorLy8gc3RhY2sgbGl2ZW5lc3MgYW5kIHRtcCBsaXZlbmVz
cy4KK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nPgorY2xhc3MgTGl2ZW5lc3MgeworcHVibGljOgor
ICAgIExpdmVuZXNzKENvZGUmIGNvZGUpCisgICAgeworICAgICAgICBtX2xpdmVBdEhlYWQucmVz
aXplKGNvZGUuc2l6ZSgpKTsKKyAgICAgICAgbV9saXZlQXRUYWlsLnJlc2l6ZShjb2RlLnNpemUo
KSk7CisKKyAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gc2VlbjsKKworICAgICAgICBib29s
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAg
Y2hhbmdlZCA9IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0g
Y29kZS5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IGNvZGUuYXQoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgTG9jYWxDYWxj
IGxvY2FsQ2FsYygqdGhpcywgYmxvY2spOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGlu
c3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykKKyAgICAgICAgICAgICAgICAg
ICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAg
ICAgIGJvb2wgZmlyc3RUaW1lID0gc2Vlbi5hZGQoYmxvY2spOworICAgICAgICAgICAgICAgIGlm
ICghZmlyc3RUaW1lICYmIGxvY2FsQ2FsYy5saXZlKCkgPT0gbV9saXZlQXRIZWFkW2Jsb2NrXSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9
IHRydWU7CisgICAgICAgICAgICAgICAgbV9saXZlQXRIZWFkW2Jsb2NrXSA9IGxvY2FsQ2FsYy50
YWtlTGl2ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY29uc3Qg
SGFzaFNldDxUaGluZz4mIGxpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKKyAgICBjb25z
dCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdFRhaWxbYmxvY2tdOworICAgIH0KKworICAgIC8v
IFRoaXMgY2FsY3VsYXRvciBoYXMgdG8gYmUgcnVuIGluIHJldmVyc2UuCisgICAgY2xhc3MgTG9j
YWxDYWxjIHsKKyAgICBwdWJsaWM6CisgICAgICAgIExvY2FsQ2FsYyhMaXZlbmVzcyYgbGl2ZW5l
c3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2xpdmUobGl2ZW5lc3MtPmxp
dmVBdFRhaWwoYmxvY2spKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBI
YXNoU2V0PFRoaW5nPiYgbGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZTsgfQorICAgICAgICBI
YXNoU2V0PFRoaW5nPiYmIHRha2VMaXZlKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fbGl2ZSk7IH0K
KworICAgICAgICB2b2lkIGV4ZWN1dGUoSW5zdCYgaW5zdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gRmlyc3QgaGFuZGxlIGRlZidzLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5n
PigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBB
cmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJn
Ojppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoYXJn
KTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gTmV4dCBoYW5kbGUgY2xv
YmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAgICAgIGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgewor
ICAgICAgICAgICAgICAgIGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAg
ICAgICAgICAgICAgICAgW3RoaXNdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2xpdmUucmVtb3ZlKFRoaW5nKHJlZykpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaW5hbGx5
IGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAg
ICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9s
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUuYWRkKGFyZyk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhc2hTZXQ8VGhp
bmc+IG1fbGl2ZTsKKyAgICB9OworICAgIAorcHJpdmF0ZToKKyAgICBJbmRleE1hcDxCYXNpY0Js
b2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdFRhaWw7Cit9OworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJMaXZlbmVzc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
IyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5Z
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMg
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisKKyMgU3lsbGFidXM6CisjCisjIFJvbGVzIGFuZCB0eXBlczoKKyMgVTpHID0+
IHVzZSBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBEOkcgPT4gZGVm
IG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkcgPT4gdXNlIGFu
ZCBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVTpGID0+IHVz
ZSBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RiA9PiBkZWYgb2YgYSBmbG9hdCBy
ZWdpc3RlciBvciB2YWx1ZQorIyBVRDpGID0+IHVzZSBhbmQgZGVmIG9mIGEgZmxvYXQgcmVnaXN0
ZXIgb3IgdmFsdWUKKyMKKyMgQXJndW1lbnQga2luZHM6CisjIFRtcCA9PiB0ZW1wb3Jhcnkgb3Ig
cmVnaXN0ZXIKKyMgSW1tID0+IDMyLWJpdCBpbW1lZGlhdGUgaW50CisjIEltbTY0ID0+IFRydXN0
ZWRJbW02NAorIyBBZGRyID0+IGFkZHJlc3MgYXMgdGVtcG9yYXJ5L3JlZ2lzdGVyK29mZnNldAor
IyBJbmRleCA9PiBCYXNlSW5kZXggYWRkcmVzcworIyBBYnMgPT4gQWJzb2x1dGVBZGRyZXNzCisj
CisjIFRoZSBwYXJzZXIgdmlld3MgdGhlc2UgdGhpbmdzIGFzIGtleXdvcmRzLCBhbmQgdW5kZXJz
dGFuZHMgdGhhdCB0aGV5IGZhbGwgaW50byB0d28gZGlzdGluY3QgY2xhc3NlcworIyBvZiB0aGlu
Z3MuIFNvLCBhbHRob3VnaCB0aGlzIGZpbGUgdXNlcyBhIHBhcnRpY3VsYXIgaW5kZW50YXRpb24g
c3R5bGUsIG5vbmUgb2YgdGhlIHdoaXRlc3BhY2Ugb3IKKyMgZXZlbiBuZXdsaW5lcyBhcmUgbWVh
bmluZ2Z1bCB0byB0aGUgcGFyc2VyLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHdyaXRlOgorIwor
IyBGb280MiBVOkcsIFVEOkYgSW1tLCBUbXAgQWRkciwgVG1wCisjCisjIEFuZCB0aGUgcGFyc2Vy
IHdvdWxkIGtub3cgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzOgorIworIyBGb280MiBVOkcsIFVE
OkYKKyMgICAgIEltbSwgVG1wCisjICAgICBBZGRyLCBUbXAKKyMKKyMgSS5lLiBhIHR3by1mb3Jt
IGluc3RydWN0aW9uIHRoYXQgdXNlcyBhIEdQUiBvciBhbiBpbnQgaW1tZWRpYXRlIGFuZCB1c2Vz
K2RlZnMgYSBmbG9hdCByZWdpc3Rlci4KKworIyBOb3RlIHRoYXQgdGhlIG9wY29kZXMgaGVyZSBo
YXZlIGEgbGVhZGluZyBjYXBpdGFsIChBZGQzMikgYnV0IG11c3QgY29ycmVzcG9uZCB0byBNYWNy
b0Fzc2VtYmxlcgorIyBBUEkgdGhhdCBoYXMgYSBsZWFkaW5nIGxvd2VyLWNhc2UgKGFkZDMyKS4K
KworTm9wCisKK0FkZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBBZGRyCisg
ICAgSW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBUbXAsIEFkZHIKKworQWRkMzIgVTpHLCBV
OkcsIEQ6RworICAgIEltbSwgVG1wLCBUbXAKKworQW5kMzIgVTpHLCBVRDpHCisgICAgVG1wLCBU
bXAKKyAgICBJbW0sIFRtcAorICAgIFRtcCwgQWRkcgorICAgIEFkZHIsIFRtcAorICAgIEltbSwg
QWRkcgorCitMc2hpZnQzMiBVOkcsIFVEOkcKKyAgICBUbXAqLCBUbXAKKyAgICBJbW0sIFRtcAor
CitNdWwzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorCitNb3ZlIFU6
RywgRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIEltbTY0LCBUbXAKKyAgICBB
ZGRyLCBUbXAgYXMgbG9hZCAjIFRoaXMgbWVhbnMgdGhhdCAiTW92ZSBBZGRyLCBUbXAiIGlzIGNv
ZGUtZ2VuZXJhdGVkIGFzICJsb2FkIiBub3QgIm1vdmUiLgorICAgIFRtcCwgQWRkciBhcyBzdG9y
ZQorCitNb3ZlRG91YmxlIFU6RiwgRDpGCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAgYXMg
bG9hZERvdWJsZQorICAgIFRtcCwgQWRkciBhcyBzdG9yZURvdWJsZQorCitNb3ZlNjRUb0RvdWJs
ZSBVOkcsIEQ6RgorICAgIFRtcCwgVG1wCisKK01vdmVEb3VibGVUbzY0IFU6RiwgRDpHCisgICAg
VG1wLCBUbXAKKworQnJhbmNoQWRkMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0Nv
bmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFk
ZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJh
bmNoTXVsMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisg
ICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaFN1YjMyIFU6RywgVTpHLCBVRDpHIC9icmFu
Y2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVz
Q29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29uZCwgQWRk
ciwgVG1wCisKK0JyYW5jaE5lZzMyIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1w
CisKK0p1bXAgL2JyYW5jaAorCitSZXQKKworIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZp
b3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVj
aWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCitzcGVjaWFs
IFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFz
ZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitQaGFzZVNjb3BlOjpQ
aGFzZVNjb3BlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX2NvZGUoY29k
ZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFz
ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiQWlyIGJlZm9yZSAiLCBuYW1lLCAiOiIpOworICAg
ICAgICBvdXQucHJpbnQoY29kZSk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNhdmVJUkJlZm9y
ZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhjb2RlKTsKK30KKwor
UGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRF
YWNoUGhhc2UoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgbV9uYW1lLCBtX2R1bXBCZWZvcmUu
ZGF0YSgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQWlyUGhh
c2VTY29wZV9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCitjbGFz
cyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1
YmxpYzoKKyAgICBQaGFzZVNjb3BlKENvZGUmLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhh
c2VTY29wZSgpOyAvLyB0aGlzIHNob3VsZCBkbyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6CisgICAg
Q29kZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICBDU3RyaW5nIG1fZHVt
cEJlZm9yZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEFpclBoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVy
UHJpb3JpdHkuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3BzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAg
ICBzdGF0aWMgVmVjdG9yPEdQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10g
eworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxHUFJSZWc+KCk7CisgICAgICAgICAg
ICBSZWdpc3RlclNldCBhbGwgPSBSZWc6OmFsbEdQUnMoKTsKKyAgICAgICAgICAgIGFsbC5leGNs
dWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICAgICAgICAgIGFsbC5leGNs
dWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0
ZXJzKCk7CisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGwpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+
YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKFJlZyBy
ZWcgOiBhbGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3RvcjxG
UFJSZWc+JiBmcHNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBWZWN0b3I8RlBSUmVn
PiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2Fs
bF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHQg
PSBuZXcgVmVjdG9yPEZQUlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJl
Zzo6YWxsRlBScygpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBmb3IgKFJlZyByZWcg
OiBhbGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGwpIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQo
cmVnLmdwcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1
bHQ7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlw
ZSB0eXBlKQoreworICAgIHN0YXRpYyBWZWN0b3I8UmVnPiogcmVzdWx0W0FyZzo6bnVtVHlwZXNd
OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAor
ICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0g
PSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoR1BSUmVnIHJlZyA6IGdwcnNJ
blByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0tPmFwcGVu
ZChSZWcocmVnKSk7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0gPSBuZXcgVmVjdG9yPFJl
Zz4oKTsKKyAgICAgICAgICAgIGZvciAoRlBSUmVnIHJlZyA6IGZwcnNJblByaW9yaXR5T3JkZXIo
KSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0tPmFwcGVuZChSZWcocmVnKSk7Cisg
ICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0W3R5cGVdOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJSZWdpc3RlclByaW9yaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisjZGVmaW5lIEFpclJlZ2lz
dGVyUHJpb3JpdHlfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiRlBSSW5mby5o
IgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9y
PEdQUlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKTsKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBm
cHJzSW5Qcmlvcml0eU9yZGVyKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+IHN0cnVjdCBS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdpc3RlcnNJblBy
aW9yaXR5T3JkZXI8R1BSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxHUFJSZWc+JiBpblByaW9y
aXR5T3JkZXIoKSB7IHJldHVybiBncHNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKK3RlbXBsYXRl
PD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxGUFJJbmZvPiB7CisgICAgY29uc3Qg
VmVjdG9yPEZQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGZwc0luUHJpb3JpdHlP
cmRlcigpOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPgorY29uc3QgVmVjdG9yPEJh
bms6OlJlZ2lzdGVyVHlwZT4mIHJlZ3NJblByaW9yaXR5T3JkZXIoKQoreworICAgIHJldHVybiBS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8QmFuaz46OmluUHJpb3JpdHlPcmRlcigpOworfQorCitj
b25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJSZWdpc3RlclByaW9y
aXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVj
aWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJTcGVjaWFsLmgiCisKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitTcGVj
aWFsOjpTcGVjaWFsKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX25hbWUobmFtZSkKKyAgICAs
IG1faW5kZXgoVUlOVF9NQVgpCit7Cit9CisKK1NwZWNpYWw6On5TcGVjaWFsKCkKK3sKK30KKwor
Q1N0cmluZyBTcGVjaWFsOjpuYW1lKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQcmludFN0cmVhbSBv
dXQ7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOworfQor
Cit2b2lkIFNwZWNpYWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoZHVtcFByZWZpeCk7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICBpZiAobV9pbmRleCAh
PSBVSU5UX01BWCkKKyAgICAgICAgb3V0LnByaW50KG1faW5kZXgpOworfQorCit2b2lkIFNwZWNp
YWw6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCp0
aGlzLCAiOiAiKTsKKyAgICBkZWVwRHVtcEltcGwob3V0KTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BlY2lhbF9o
CisjZGVmaW5lIEFpclNwZWNpYWxfaAorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1Njb3BlZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBH
ZW5lcmF0aW9uQ29udGV4dDsKKworY2xhc3MgU3BlY2lhbCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU3BlY2lhbCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiJiI7CisgICAgCisgICAgU3BlY2lh
bCgpOworICAgIHZpcnR1YWwgflNwZWNpYWwoKTsKKworICAgIENTdHJpbmcgbmFtZSgpIGNvbnN0
OworCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJk
YTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlk
KEluc3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25l
ZCBhcmdJbmRleCkgPSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCBvbiBmb3IgZWFjaCBJ
bnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8K
KyAgICAvLyBndWFyYW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2VkIGZyb20ganVzdCBvbmUg
SW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywKKyAgICAvLyBpZiB5b3Ug
d2FudCB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5lcmF0ZSgpLCB0aGVuIHlv
dSBoYXZlIHRvIGVpdGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVyYXRlIEFpciB0aGF0IHN0
YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5zdCwgYW5kIHRoZW4gbWVy
Z2UKKyAgICAvLyAgICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBwcm9iYWJseSBub3QgZ3Jl
YXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0aGF0CisgICAgLy8gICAg
QWlyIGRpZG4ndCBkdXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVwbGljYXRpb24gZGlkbid0
IGNhdXNlIGFueSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8gICAgcmVnaXN0ZXIgYXNz
aWdubWVudC4KKyAgICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNpYWwgbWFpbnRhaW4gYSBI
YXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYW5hbHlz
aXMKKyAgICAvLyAgICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlzIHBlcmZvcm1lZCBqdXN0
IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdheQorICAgIC8vICAgIGZv
ciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRvIGJlIHJlYWxsb2NhdGVk
LiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29uc3VsdCB0aGUgSGFzaE1h
cC4KKyAgICAvLworICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVzZSAoMSkgYW5kIGZpcmUg
dXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisgICAgLy8KKyAgICAvLyBO
b3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBvcnRVc2VkUmVnaXN0ZXJz
KCkgYmVpbmcgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8gYXMgZ2VuZXJhdGUoKS4g
SWYgd2UgY291bGQgcmVseSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1c3QgaGF2ZSBlYWNoIFNw
ZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBvZiBSZWdpc3RlclNldCdz
IGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0IG9yZGVyIGluCisgICAg
Ly8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5jZSBpcyB1bmxpa2VseSB0
byBjaGFuZ2Ugc2luY2UgaXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBwZXJmb3JtYW5jZSBvZiB0
aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJyZW50bHksIHdlIGRvICgx
KSBmb3IgQjMgc3RhY2ttYXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJz
KEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIENDYWxs
SGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNv
bnRleHQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2Ji
ZXJlZFJlZ3MoSW5zdCYpID0gMDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgY29uc3QgY2hhciogbV9uYW1lOwor
ICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3BlY2lhbER1bXAgeworcHVi
bGljOgorICAgIERlZXBTcGVjaWFsRGltcChTcGVjaWFsKiBzcGVjaWFsKQorICAgICAgICA6IG1f
c3BlY2lhbChzcGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NwZWNpYWwpCisgICAgICAgICAg
ICBtX3NwZWNpYWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91
dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFNwZWNpYWwqIG1fc3Bl
Y2lhbDsKK307CisKK0RlZXBTcGVjaWFsRHVtcCBkZWVwRHVtcChTcGVjaWFsKiBzcGVjaWFsKQor
eworICAgIHJldHVybiBEZWVwU3BlY2lhbER1bXAoc3BlY2lhbCk7Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclNwZWNpYWxfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGls
bEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKworI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3Bl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
dm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUoY29kZSwgInNwaWxsRXZlcnl0aGluZyIpOworCisgICAgLy8gV2Ugd2FudCB0byBrbm93
IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFzaWMg
YmxvY2suCisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNl
ZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CisgICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhjb2Rl
KTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVz
czxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgIHVz
ZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgpICsgMSk7CisKKyAgICAgICAg
YXV0byBzZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBpbmRleCkgeworICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luZGV4XTsKKyAgICAg
ICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQodG1wLnJlZygp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNldFVzZWRSZWdpc3RlcnMo
YmxvY2stPnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRl
eCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgbG9jYWxDYWxj
LmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgc2V0VXNlZHJlZ2lz
dGVycyhpbnN0SW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQWxsb2NhdGUgYSBz
dGFjayBzbG90IGZvciBlYWNoIHRtcC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tT
bG90c1tBcmc6Om51bVR5cGVzXTsKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5
cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsrdHlwZUluZGV4KSB7CisgICAgICAgIFZlY3RvcjxT
dGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0YWNrU2xvdHNbdHlwZUluZGV4XTsKKyAgICAg
ICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxBcmc6OlR5cGU+KHR5cGVJbmRleCk7Cisg
ICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUubnVtVG1wcyh0eXBlKSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51bVRtcHModHlwZSk7IHRtcEluZGV4LS07KQor
ICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBT
dGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgIH0KKworICAgIEluc2VydGlvblNldCBpbnNl
cnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldEJlZm9yZSA9
IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleF07CisgICAgICAgICAgICBSZWdpc3RlclNl
dCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXggKyAxXTsKKyAgICAg
ICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGlu
c3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxsU3RhY2tTbG90c1t0eXBlXVt0bXAudG1wSW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xv
dCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBmaWd1cmUgb3V0IGEgcmVnaXN0
ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBkZXBlbmRzIG9uIHRoZSByb2xlLgorICAgICAgICAg
ICAgICAgICAgICBSZWcgY2hvc2VuUmVnOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJv
bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpEZWY6CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZURlZjoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0
KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJl
Zyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAg
IHRtcCA9IFRtcChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAgIE9wY29kZSBtb3Zl
ID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGUKKworICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgs
IG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyU3BpbGxFdmVyeXRoaW5nX2gKKyNkZWZpbmUgQWlyU3BpbGxFdmVyeXRoaW5n
X2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBDb2RlOworCisvLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRlc3RpbmcuIEl0IGJlaGF2ZXMg
bGlrZSBhIHJlZ2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2UgdGhhdCBpdAorLy8gZWxpbWlu
YXRlcyB0ZW1wb3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBhY2NvbXBsaXNoZXMgdGhpcyBi
eSBhbHdheXMgc3BpbGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmllcy4gVGhlIHJlc3VsdGluZyBjb2Rl
IGlzIGdvaW5nIHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMgcGhhc2UgaXMgZ3JlYXQgaWYg
eW91CisvLyB0aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRoZSByZWdpc3RlciBhbGxvY2F0
b3IuIFlvdSBjYW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhpcworLy8gcGhhc2UgaW5zdGVh
ZCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8vIE5vdGUgdGhhdCBldmVuIHRob3Vn
aCB0aGlzIHBoYXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBvc3NpYmxlLCBpdCdzIG5vdCBl
dmVuIHdyaXR0ZW4gaW4gYQorLy8gcGFydGljdWxhcmx5IGVmZmljaWVudCB3YXkuIFNvLCBkb24n
dCBnZXQgYW55IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2UgdG8gcmVkdWNlIGNvbXBpbGVy
CisvLyBsYXRlbmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQsIHlvdSBzaG91bGQgY29tZSB1
cCB3aXRoIGEgY2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVzaW5nCisvLyB0aGlzIHNpbGx5
IHRoaW5nLgorCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclNwaWxsRXZlcnl0aGluZ19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTdGFja1Nsb3RfaAorI2RlZmluZSBBaXJT
dGFja1Nsb3RfaAorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSA8d3Rm
L05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN0YWNrU2xvdHZhbHVlOworCituYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgU3RhY2tTbG90IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShT
dGFja1Nsb3QpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVu
c2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNr
U2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV1dHJuIG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgdW5zaWduZWQgYWxpZ25tZW50
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDEpCisgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMikKKyAgICAgICAgICAgIHJl
dHVybiAyOworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSA0KQorICAgICAgICAgICAgcmV0dXJu
IDQ7CisgICAgICAgIHJldHVybiA4OworICAgIH0KKworICAgIFN0YWNrU2xvdFZhbHVlKiB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIC8vIFplcm8gbWVhbnMgdGhhdCBp
dCdzIG5vdCB5ZXQgYXNzaWduZWQuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3Qg
eyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworICAgIC8vIFRoaXMgc2hvdWxkIG9ubHkgYmUg
Y2FsbGVkIGZyb20gcGhhc2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbi4KKyAgICB2b2lkIHNl
dE9mZnNldEZyb21GUChpbnRwdHJfdCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNp
emUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2
YWx1ZSkKKyAgICAgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1faW5kZXgo
aW5kZXgpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAoMCkKKyAgICAgICAgLCBtX2tpbmQoa2lu
ZCkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJ5dGVT
aXplKTsKKyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICB1bnNpZ25l
ZCBtX2luZGV4OworICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOworICAgIFN0YWNrU2xvdEtp
bmQgbV9raW5kOworICAgIFN0YWNrU2xvdFZhbHVlKiBtX3ZhbHVlOworfTsKKworY2xhc3MgRGVl
cFN0YWNrU2xvdER1bXAgeworcHVibGljOgorICAgIERlZXBTdGFja1Nsb3REdW1wKFN0YWNrU2xv
dCogc2xvdCkKKyAgICAgICAgOiBtX3Nsb3Qoc2xvdCkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zbG90
KQorICAgICAgICAgICAgbV9zbG90LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdGFj
a1Nsb3QqIG1fc2xvdDsKK307CisKK0RlZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1wKFN0YWNrU2xv
dCogc2xvdCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAoc2xvdCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBU
bXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7Cisg
ICAgICAgIG91dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoaXNSZWcoKSkgeworICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKGlzR1BUbXAoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0
bXAiLCBncFRtcEluZGV4KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnBy
aW50KCIlZnRtcCIsIGZwVG1wSW5kZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNp
bmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCisvLyBBIFRtcCBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIGEgcmVnaXN0ZXIuIEl0
IGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIGFueSBHUFIgb3IgRlBSLiBJdCBjYW4gYWxzbworLy8g
YmUgdXNlZCB0byByZWZlciB0byBhbiB1bmFsbG9jYXRlZCByZWdpc3RlciAoaS5lLiBhIHRlbXBv
cmFyeSkuIExpa2UgbWFueSBBaXIgY2xhc3Nlcywgd2UgdXNlCisvLyBkZWxpYmVyYXRlbHkgdGVy
c2UgbmFtaW5nIHNpbmNlIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhpcyBuYW1lIGEgbG90LgorCitj
bGFzcyBUbXAgeworcHVibGljOgorICAgIFRtcCgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAg
IHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUbXAoUmVnIHJlZykKKyAgICB7CisgICAgICAgIGlm
IChyZWcpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBt
X3ZhbHVlID0gZW5jb2RlR1BSKHJlZy5ncHIoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUZQUihyZWcuZnByKCkpOworICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChjb25z
dCBBcmcmKTsKKworICAgIHN0YXRpYyBUbXAgZ3BUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5j
b2RlR1BUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0
YXRpYyBUbXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRt
cCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5kZXgpOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZm9yUmF3VmFs
dWUodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0K
KworICAgIGJvb2wgcmF3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBi
b29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFs
dWUpOworICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNFbmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0KKwor
ICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQ
UihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAgIH0K
KworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQ
UihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVybiBm
cHIoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFRtcCht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKKyAg
ICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIHJldHVybiAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGlu
dCBlbmNvZGVGUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMSAtIGlu
ZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BSKEdQUlJlZyBncHIpCisgICAg
eworICAgICAgICByZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVn
aXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFIoRlBSUmVnIGZwcikK
KyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUChmcHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmly
c3RGUFJSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQVG1wKHVu
c2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQUihNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBp
bnQgZW5jb2RlRlBUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5j
b2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEgLSBpbmRleDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUChpbnQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWUgPiAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2Rl
ZEZQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA8IDA7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNv
ZGVkRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1
ZSkgJiYgdmFsdWUgPj0gZW5jb2RlZEZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIo
KSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BUbXAoaW50IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiAhaXNFbmNvZGVkR1BS
KHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFRtcChpbnQgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmICFpc0VuY29k
ZWRGUFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBHUFJSZWcgZGVjb2RlR1BSKGludCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFIodmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQUlJlZz4oCisgICAgICAgICAgICAodmFsdWUgLSBlbmNv
ZGVHUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSkpICsgTWFjcm9Bc3NlbWJsZXI6
OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIEZQUlJlZyBkZWNvZGVGUFIo
aW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQUih2YWx1ZSkpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPigKKyAgICAgICAgICAgIChlbmNvZGVG
UFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKSAtIHZhbHVlKSArCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0
YXRpYyB1bnNpZ25lZCBkZWNvZGVHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NF
UlQoaXNFbmNvZGVkR1BUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC0gKGVuY29k
ZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSk7CisgICAgfQorCisgICAg
c3RhdGljIHVuc2lnbmVkIGRlY29kZUZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc0VuY29kZWRGUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gKGVuY29kZUZQUihN
YWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxKSAtIHZhbHVlOworICAgIH0KKwor
ICAgIC8vIDA6IGVtcHR5IFRtcAorICAgIC8vIHBvc2l0aXZlOiBHUFJzIGFuZCB0aGVuIEdQIHRl
bXBzLgorICAgIC8vIG5lZ2F0aXZlOiBGUFJzIGFuZCB0aGVuIEZQIHRlbXBzLgorICAgIGludCBt
X3ZhbHVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gQWlyVG1wX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJU
bXBJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclRtcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wSW5s
aW5lc19oCisjZGVmaW5lIEFpclRtcElubGluZXNfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisj
aW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworaW5saW5lIFRtcDo6VG1wKGNvbnN0IEFyZyYgYXJnKQoreworICAgICp0
aGlzID0gYXJnLnRtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBBaXJUbXBJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKworI2luY2x1ZGUg
IkFpckNvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCituYW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZh
bGlkYXRlcihDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVm
b3JlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAg
ICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUg
VkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFp
bChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRv
Q1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorICAgIAorICAgIHZvaWQg
cnVuKCkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90czsKKyAg
ICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gdmFsaWRCbG9ja3M7CisgICAgICAgIEhhc2hTZXQ8
U3BlY2lhbCo+IHZhbGlkU3BlY2lhbHM7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkKKyAgICAgICAgICAgIHZhbGlkQmxvY2tzLmFkZChibG9jayk7CisgICAgICAg
IGZvciAoU3RhY2tTbG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAg
IHZhbGlkU2xvdHMuYWRkKHNsb3QpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBt
X2NvZGUuc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNwZWNpYWwp
OworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAg
ICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgICAgIGZvciAoQXJn
JiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2lu
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWxpZFNsb3RzLmNvbnRhaW5zKGFyZy5zdGFja1Nsb3QoKSksICgi
QXQgIiwgaW5zdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbGlkU3BlY2lhbHMuY29udGFpbnMoYXJnLnNwZWNpYWwoKSksICgiQXQgIiwgaW5zdCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUoaW5zdC5pc1ZhbGlkRm9ybSgpLCAoIkF0ICIsIGluc3QpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2st
PnN1Y2Nlc3NvcnMoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250
YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaykpOworICAgICAgICB9CisgICAgfQorCitw
cml2YXRlOgorICAgIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGlu
dCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9u
LAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1
cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7
CisgICAgICAgICAgICBvdXQucHJpbnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAg
ICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoi
LCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNz
YWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0
LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJl
TWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dC5wcmlu
dChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiQmVmb3JlICIsIHdoZW4sICI6XG4iKTsKKyAgICAgICAgICAgIG91dC5w
cmludChtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIG91dC5wcmludCgiQXQgdGlt
ZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIG91dC5wcmludChtX2NvZGUpOworCisgICAgICAg
IG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZh
aWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAg
ICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hh
ciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQg
dmFsaWRhdGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJl
Zm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIHdoZW4sIGR1bXBCZWZvcmUp
OworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJWYWxpZGF0ZV9oCisjZGVmaW5l
IEFpclZhbGlkYXRlX2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOwor
Cit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3Qg
Y2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4MzQgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKK2Ns
YXNzIE9wY29kZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2Fkcwor
ICAgIGF0dHJfYWNjZXNzb3IgOmJyYW5jaAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgc3Bl
Y2lhbCkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gc3BlY2lhbAor
ICAgICAgICBAYnJhbmNoID0gZmFsc2UKKyAgICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAg
ICAgIEBvdmVybG9hZHMgPSBbXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNt
TmFtZQorICAgICAgICBuYW1lWzBdLmRvd25jYXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2Vu
ZAorCitjbGFzcyBBcmcKKyAgICBhdHRyX3JlYWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBp
bml0aWFsaXplKHJvbGUsIHR5cGUpCisgICAgICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlw
ZSA9IHR5cGUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVy
IDpzaWduYXR1cmUsIDpmb3JtcworCisgICAgZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3Jt
cykKKyAgICAgICAgQHNpZ25hdHVyZSA9IHNpZ25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3Jt
cworICAgIGVuZAorZW5kCisKK2NsYXNzIEtpbmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAg
IGF0dHJfYWNjZXNzb3IgOnNwZWNpYWwKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAg
ICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAg
ICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAg
ICAgQG5hbWUgPT0gb3RoZXIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3Ro
ZXIubmFtZSBhbmQgQHNwZWNpYWwgPT0gb3RoZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBl
bmQKKworICAgIGRlZiBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgICAgIGlmIGtpbmQgPT0gIkFk
ZHIiCisgICAgICAgICAgICBbIkFkZHIiLCAiU3RhY2tTbG90IiwgIkNhbGxBcmciXQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICBba2luZF0KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBk
ZWYgYXJnS2luZHMKKyAgICAgICAgS2luZC5hcmdLaW5kcyhraW5kKQorICAgIGVuZAorZW5kCisK
K2NsYXNzIEZvcm0KKyAgICBhdHRyX3JlYWRlciA6a2luZHMsIDphbHROYW1lCisKKyAgICBkZWYg
aW5pdGlhbGl6ZShraW5kcywgYWx0TmFtZSkKKyAgICAgICAgQGtpbmRzID0ga2luZHMKKyAgICAg
ICAgQGFsdE5hbWUgPSBhbHROYW1lCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAg
YXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFs
aXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQor
ICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYg
dG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAor
CitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAg
ICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdp
bgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90
aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9
PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhl
cgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAg
IEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAi
I3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYg
cGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAg
ICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBl
bmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUg
PSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVy
ID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAg
IHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAg
ICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAg
ICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBKFthLXpBLVowLTlfXSspLworICAg
ICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVt
YmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hp
dGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWyw6KlwvXS8KKyAgICAgICAgICAgIHJl
c3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4u
bmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0
clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21h
dGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzVUQodG9rZW4pCisgICAgdG9r
ZW4gPX4gL1xBKChVKXwoRCl8KFVEKSlcWi8KK2VuZAorCitkZWYgaXNHRih0b2tlbikKKyAgICB0
b2tlbiA9fiAvXEEoKEcpfChGKSlcWi8KK2VuZAorCitkZWYgaXNLaW5kKHRva2VuKQorICAgIHRv
a2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoSW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwo
UmVzQ29uZCkpXFovCitlbmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICBpc1VEKHRva2Vu
KSBvciBpc0dGKHRva2VuKSBvciBpc0tpbmQodG9rZW4pIG9yCisgICAgICAgIHRva2VuID09ICJz
cGVjaWFsIiBvciB0b2tlbiA9PSAiYXMiCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikK
KyAgICB0b2tlbiA9fiAvXEEoW2EtekEtWjAtOV9dKylcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9r
ZW4pCitlbmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5h
bWUpCisgICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHgg
PSAwCisgICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAg
IGVuZAorCisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAg
ICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAg
IHRva2VuLnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlm
IGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVu
ZCBvZiBmaWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJz
ZSBlcnJvciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAor
ICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAg
cGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZwor
ICAgICAgICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAg
ICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVk
IGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5j
ZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lUm9sZQorICAgICAg
ICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgcm9s
ZSAoVSwgRCwgb3IgVUQpIikgdW5sZXNzIGlzVUQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisg
ICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVUeXBlCisgICAgICAgIHJl
c3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCB0eXBlIChH
IG9yIEYpIikgdW5sZXNzIGlzR0YocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJl
c3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVLaW5kCisgICAgICAgIHJlc3VsdCA9IHRv
a2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEltbTY0
LCBUbXAsIEFkZHIsIEluZGV4LCBSZWxDb25kLCBvciBSZXNDb25kKSIpIHVubGVzcyBpc0tpbmQo
cmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAg
ZGVmIHBhcnNlCisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIAorICAgICAgICBsb29wIHsK
KyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAg
ICAgaWYgdG9rZW4gPT0gInNwZWNpYWwiCisgICAgICAgICAgICAgICAgY29uc3VtZSgic3BlY2lh
bCIpCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAg
ICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29k
ZSIpIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorCisgICAgICAgICAgICAgICAgcmVzdWx0W29wY29k
ZU5hbWVdID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCB0cnVlKQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAg
ICAgICAgICAgaWYgcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIG9wY29k
ZSA9IHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJD
YW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIG9wY29kZS5zcGVjaWFsCisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBPcGNvZGUubmV3
KG9wY29kZU5hbWUsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFt
ZV0gPSBvcGNvZGUKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIHNpZ25h
dHVyZSA9IFtdCisgICAgICAgICAgICAgICAgZm9ybXMgPSBbXQorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIGlmIGlzVUQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3Ag
eworICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9IGNvbnN1bWVSb2xlCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdW1lKCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUg
PSBjb25zdW1lVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICBzaWduYXR1cmUgPDwgQXJnLm5ldyhyb2xlLCB0eXBlKQorICAgICAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0g
IiwiCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgdG9rZW4g
PT0gIi8iCisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIi8iKQorICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKCJicmFuY2giKQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUuYnJhbmNo
ID0gdHJ1ZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgaXNLaW5k
KHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGtpbmRzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBuaWwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtpbmRzIDw8IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgdG9rZW4gPT0gIioiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IoIkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5sZXNzIGtpbmRzWy0xXS5uYW1l
ID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzWy0xXS5zcGVj
aWFsID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIqIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gImFzIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoImFzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0g
Y29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3cm9uZyBudW1iZXIgb2YgYXJn
dW1lbnRzIGZvciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5ndGggPT0gc2lnbmF0dXJlLmxl
bmd0aAorICAgICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Iga2luZC5uYW1lID09ICJJbW02
NCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS5y
b2xlICE9ICJVIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJv
cigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBh
IG5vbi1nZW5lcmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3
KGtpbmRzLCBhbHROYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIGlz
S2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAor
CisgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMAorICAgICAgICAgICAgICAgICAg
ICBmb3JtcyA8PCBGb3JtLm5ldyhbXSwgbmlsKQorICAgICAgICAgICAgICAgIGVuZAorCisgICAg
ICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9hZC5uZXcoc2lnbmF0dXJlLCBm
b3JtcykKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0CisgICAg
ZW5kCitlbmQKKworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElP
OjpyZWFkKCRmaWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVzID0gcGFyc2VyLnBhcnNlCisK
K2RlZiB3cml0ZUgoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5oIiwg
InciKSB7CisgICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIi8v
IEdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5hbWV9IC0tIGRv
IG5vdCBlZGl0ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2lmbmRlZiBBaXIje2Zp
bGVuYW1lfV9oIgorICAgICAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQWlyI3tmaWxlbmFtZX1faCIK
KworICAgICAgICB5aWVsZCBvdXRwCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNlbmRp
ZiAvLyBBaXIje2ZpbGVuYW1lfV9oIgorICAgIH0KK2VuZAorCitkZWYgd3JpdGVDUFAoZmlsZW5h
bWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5jcHAiLCAidyIpIHsKKyAgICAgICAg
fCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9w
Y29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAg
ICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcImNvbmZpZy5oXCIiCisgICAgICAg
IG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXIje2ZpbGVuYW1lfS5oXCIiCisKKyAgICAgICAgeWll
bGQgb3V0cAorICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZSIpIHsKKyAgICB8IG91dHAgfAor
ICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeyIKKyAgICBvdXRwLnB1dHMgImVudW0gT3Bjb2RlIDogaW50MTZfdCB7IgorICAgICRvcGNv
ZGVzLmtleXMuc29ydC5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1
dHMgIiAgICAje29wY29kZX0sIgorICAgIH0KKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRw
LnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1PcGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlz
LnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIi
CisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJj
bGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7IgorICAgIG91dHAucHV0cyAifSAvLyBu
YW1lc3BhY2UgV1RGIgorfQorCit3cml0ZUNQUCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8Cisg
ICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcInd0Zi9QcmludFN0cmVhbS5oXCIiCisgICAgb3V0cC5w
dXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJ1c2luZyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRz
ICIgICAgc3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMua2V5cy5lYWNoIHsKKyAgICAg
ICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICBjYXNlICN7b3Bjb2RlfToiCisg
ICAgICAgIG91dHAucHV0cyAiICAgICAgICBvdXQucHJpbnQoXCIje29wY29kZX1cIik7IgorICAg
ICAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICIg
ICAgfSIKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIK
KyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9
CisKKyMgRnJvbSBoZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1pdCBwcm9wZXJseSBpbmRlbnRl
ZCBjb2RlLCBzaW5jZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuCisjIG1hdGNoZXIu
CisKK2RlZiBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXgsIGNvbHVt
bkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICByZXR1cm4gaWYgZm9ybXMubGVuZ3RoID09
IDAKKworICAgIGlmIGZpbHRlcltmb3Jtc10KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAg
ICBpZiBjb2x1bW5JbmRleCA+PSBmb3Jtc1swXS5raW5kcy5sZW5ndGgKKyAgICAgICAgcmFpc2Ug
dW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAxCisgICAgICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQorICAg
ICAgICByZXR1cm4KKyAgICBlbmQKKyAgICAKKyAgICBncm91cHMgPSB7fQorICAgIGZvcm1zLmVh
Y2ggeworICAgICAgICB8IGZvcm0gfAorICAgICAgICBraW5kID0gZm9ybS5raW5kc1tjb2x1bW5J
bmRleF0ubmFtZQorICAgICAgICBpZiBncm91cHNba2luZF0KKyAgICAgICAgICAgIGdyb3Vwc1tr
aW5kXSA8PCBmb3JtCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA9IFtm
b3JtXQorICAgICAgICBlbmQKKyAgICB9CisKKyAgICBpZiBzcGVlZCA9PSA6ZmFzdCBhbmQgZ3Jv
dXBzLmxlbmd0aCA9PSAxCisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBj
b2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAg
cmV0dXJuCisgICAgZW5kCisKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tjb2x1bW5HZXR0ZXJb
Y29sdW1uSW5kZXhdfSkgeyIKKyAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgfCBrZXks
IHZhbHVlIHwKKyAgICAgICAgb3V0cC5wdXRzICIjaWYgVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9
PSAiSW1tNjQiCisgICAgICAgIEtpbmQuYXJnS2luZHMoa2V5KS5lYWNoIHsKKyAgICAgICAgICAg
IHwgYXJnS2luZCB8CisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgQXJnOjoje2FyZ0tpbmR9
OiIKKyAgICAgICAgfQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCB2YWx1ZSwgY29s
dW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIG91
dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBVU0UoSlNWQUxV
RTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIK
KyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKworZGVmIG1h
dGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG91dHAucHV0cyAic3dpdGNo
ICgje2luc3R9LT5vcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAg
ICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisg
ICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbAor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAoKG9wY29kZS5v
dmVybG9hZHMuc2l6ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkKKyAgICAgICAgICAgIG91dHAu
cHV0cyAic3dpdGNoICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCisgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAg
IHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2Fk
LnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAg
ICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoi
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJ9IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAgICAKK2RlZiBtYXRjaEluc3RP
dmVybG9hZEZvcm0ob3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0
cCwgc3BlZWQsIGluc3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAg
aWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsLCBuaWwKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAg
ICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgIiN7aW5zdH0tPmFyZ3NbI3tj
b2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciA9
IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAg
ICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZCwg
Zm9ybQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwg
b3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAg
ICAgZW5kCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRw
IHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAgb3V0cC5wdXRz
ICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIAor
ICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wgb3BnZW5IaWRkZW5UcnV0aCgpIHsgcmV0dXJuIHRy
dWU7IH0iCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIE9QR0VOX1JFVFVSTih2YWx1ZSkgZG8ge1xc
IgorICAgIG91dHAucHV0cyAiICAgIGlmIChvcGdlbkhpZGRlblRydXRoKCkpXFwiCisgICAgb3V0
cC5wdXRzICIgICAgICAgIHJldHVybiB2YWx1ZTtcXCIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAg
ICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IgorICAgIG91dHAucHV0cyAi
dm9pZCBJbnN0Ojpmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIgorICAgIG91dHAu
cHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCA6ZmFzdCwgInRoaXMiKSB7Cisg
ICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisg
ICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1swXSwgQXJnOjpVc2UsIEFyZzo6R1Ap
OyAvLyBUaGlzIGlzIGJhc2ljYWxseSBib2d1cywgYnV0IGl0IHdvcmtzIGYgYW5hbHlzZXMgbW9k
ZWwgU3BlY2lhbCBhcyBhbiBpbW1lZGlhdGUuIgorICAgICAgICAgICAgb3V0cC5wdXRzICJhcmdz
WzBdLnNwZWNpYWwoKS0+Zm9yRWFjaEFyZygqdGhpcywgc2NvcGVkTGFtYmRhPEVhY2hBcmdDYWxs
YmFjaz4oZnVuY3RvcikpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2ln
bmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwK
KyAgICAgICAgICAgICAgICByb2xlID0gbmlsCisgICAgICAgICAgICAgICAgY2FzZSBhcmcucm9s
ZQorICAgICAgICAgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAi
VXNlIgorICAgICAgICAgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUg
PSAiRGVmIgorICAgICAgICAgICAgICAgIHdoZW4gIlVEIgorICAgICAgICAgICAgICAgICAgICBy
b2xlID0gIlVzZURlZiIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
IHJhaXNlCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7cm9sZX0sIEFy
Zzo6I3thcmcudHlwZX1QKTsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgIH0KKyAg
ICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4iCisgICAgb3V0cC5wdXRzICJBTFdBWVNfSU5MSU5FIGJvb2wgaXNWYWxpZEZvcm0o
T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykiCisgICAgb3V0cC5wdXRzICJ7
IgorICAgIG91dHAucHV0cyAiQXJnOjpLaW5kIGtpbmRzW3NpemVvZi4uLihBcmd1bWVudHMpXSA9
IHsgYXJndW1lbnRzLi4uIH07IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisg
ICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91
dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIG91dHAucHV0cyAic3dpdGNo
IChzaXplb2YuLi4oQXJndW1lbnRzKSkgeyIKKyAgICAgICAgdW5sZXNzIG9wY29kZS5zcGVjaWFs
CisgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwg
b3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNp
Z25hdHVyZS5sZW5ndGh9OiIKKyAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsg
fCBjb2x1bW5JbmRleCB8ICJraW5kc1sje2NvbHVtbkluZGV4fV0iIH0KKyAgICAgICAgICAgICAg
ICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJv
YyB7CisgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgIHNw
ZWNpYWwgPSAobm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBraW5kIHwga2luZC5zcGVjaWFsIH0p
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKCN7c3BlY2lhbH0p
OyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6
c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7
IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7
IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsgIgorICAg
IG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAg
fAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0
cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7Igor
ICAgIG91dHAucHV0cyAiYm9vbCBJbnN0Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAi
eyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAg
ICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lh
bAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYXJncy5zaXplKCkgPCAxKSIKKyAgICAgICAg
ICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCFhcmdzWzBdLmlzU3BlY2lhbCgpKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZh
bHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lh
bCgpLT5pc1ZhbGlkKCp0aGlzKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01v
cmVWYWxpZGF0aW9uID0gZmFsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5n
dGgudGltZXMgeworICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJv
bGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBl
ID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9
IGZvcm0ua2luZHNbaW5kZXhdCisgICAgICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8
PSBraW5kLnNwZWNpYWwKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFs
cmVhZHkga25vdyB0aGF0IHRoZSBmb3JtIG1hdGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRh
dGUgdGhlIHJvbGUsIHNpbmNlCisgICAgICAgICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4g
U28sIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gdmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBv
bmx5IGhhdmUKKyAgICAgICAgICAgICAgICAjIHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhh
dmUgYSBUbXAuCisgICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlw
ZX1QKCkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxz
ZSk7IgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
bmVlZHNNb3JlVmFsaWRhdGlvbgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFpcyN7
b3Bjb2RlLm5hbWV9VmFsaWQodGhpcykpIgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0
cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJv
b2wgSW5zdDo6YWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAi
eyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVl
cy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tv
cGNvZGUubmFtZX06IgorCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICghYXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4g
ZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVj
aWFsKCktPmFkbWl0c1N0YWNrKCp0aGlzLCBhcmdJbnN0KSk7IgorICAgICAgICBlbHNlCisgICAg
ICAgICAgICAjIFN3aXRjaCBvbiB0aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMg
InN3aXRjaCAoYXJnSW5kZXgpIHsiCisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3Zl
cmxvYWRzLm1hcCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAg
ICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbnVtQXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJ
bmRleCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKwor
ICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhl
IG92ZXJsb2FkcyBlaXRoZXIgZG8sIG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAg
ICAgICAgICAgIyBhdCB0aGlzIGluZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29t
bW9uIGNhc2UuCisgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51
bU5vID0gMAorICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAg
ICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5m
b3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVt
WWVzIGZpcnN0IGJlY2F1c2UgaWYgd2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAg
ICAgICAgICAgICAgICAjIHRvIHNheSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAg
ICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0g
MAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVs
bCB0ZXN0LgorCisgICAgICAgICAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNv
ZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
InN3aXRjaCAoYXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAg
ICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAg
ICAgfCBvdmVybG9hZCB8CisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNr
IGlmIGFsbCBvZiB0aGVtIGRvIHdoYXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAg
IG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtp
bmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1p
dCBhbnl0aGluZywganVzdCBkcm9wIHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0
Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0
cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlm
IG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjIFRoaXMgaXMgaG93IHdlIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2lu
ZyB0aGlzIGFyZ3VtZW50IHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRy
ZXNzIHlpZWxkcyBhIHZhbGlkIGZvcm0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s
dW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29s
dW1uSW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRl
eCA9PSBhcmdJbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6
QWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtWWVzID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBm
b3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNb
YXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjIERyb3AgZG93biwgZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2gu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICMgS2VlcCBnb2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBy
b2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JF
VFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAw
LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAg
ICAgIAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJk
ZWZhdWx0OiI7CisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAg
IG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRw
LnB1dHMgIkNDYWxsSGVscGVyczo6SnVtcCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGpp
dCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0IgorICAgIG91dHAucHV0cyAieyIK
KyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNF
RF9QQVJBTShjb250ZXh0KTsiCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVz
dWx0OyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgewor
ICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3Bl
Y2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFs
KCktPmdlbmVyYXRlKCp0aGlzLCBqaXQsIGNvbnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGlmIGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3Jt
LmFsdE5hbWUKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0g
b3Bjb2RlLm1hc21OYW1lCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5i
cmFuY2gKKyAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKworICAg
ICAgICAgICAgZm9ybS5raW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwg
a2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wcmludCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgY2FzZSBraW5kLm5hbWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAgICAg
ICAgICAgICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgor
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgd2hlbiAiSW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4gIklt
bTY0IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Ry
dXN0ZWRJbW02NCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAg
ICAgICAgIHdoZW4gIkluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQi
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRp
b25hbENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9u
KCkiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91
dHAucHV0cyAiKTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1bHQp
OyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRwLnB1
dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIi
Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2aXNpb24gMTkxMjM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcg
KzEwNSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAh
PSBpbnZhbGlkKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1Nl
dCgpOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0
KCk7IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX2luZGV4ID09IGRlbGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBjbGFzcyBBbGxS
ZWdzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkgeyB9CisKKyAgICAgICAgICAg
IGV4cGxpY2l0IGl0ZXJhdG9yKFJlZyByZWcpCisgICAgICAgICAgICAgICAgOiBtX3JlZyhyZWcp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRv
ciooKSBjb25zdCB7IHJldHVybiBtX3JlZzsgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9yZWcgPSBtX3JlZy5u
ZXh0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZyA9PSBvdGhlci5tX3Jl
ZzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToK
KyAgICAgICAgICAgIFJlZyBtX3JlZzsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAgICAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9CisgICAgfTsK
KworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgY29uc3QgeyByZXR1cm4gQWxsUmVn
c0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZhbGlkKCkg
eyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTMgQEAgcHVibGljOgog
ICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0
IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0cygpKQor
ICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgIH0KICAgICAK
IHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJbmRleDog
U291cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
Qml0VmVjdG9yLmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rv
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgcHVibGljOiAKICAgICB9Owog
ICAgIAogICAgIFNldEJpdHNJdGVyYWJsZSBzZXRCaXRzKCkgY29uc3QgeyByZXR1cm4gU2V0Qml0
c0l0ZXJhYmxlKCp0aGlzKTsgfQotICAgIAorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25l
ZCBiaXRzSW5Qb2ludGVyKCkKICAgICB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1i
ZGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2ll
bnRseSBwYXNzIGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcK
Ky8vIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hv
dWxkIGJlIGRlY2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxN
eVRoaW5ncyogKGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoK
Ky8vCisvLyB2b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsm
XSAoaW50IHgsIFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3Rl
IHRoYXQgdGhpcyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBs
YW1iZGEgaXMgb25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVu
Y2UgdGhlIG5hbWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5
cGU+IGNsYXNzIFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAo
QXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlw
ZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQq
IGFyZyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmco
YXJnKQorICAgIHsKKyAgICB9CisgICAgCisgICAgflNjb3BlZExhbWJkYSgpCisgICAgeworICAg
IH0KKworICAgIFJlc3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1l
bnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPEFy
Z3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1
bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pIG1faW1wbDsKKyAg
ICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rvcj4gU2NvcGVkTGFtYmRhRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJl
c3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+Citj
bGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBG
dW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4u
Lik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhKGltcGxGdW5jdGlvbiwgdGhpcykKKyAgICAg
ICAgLCBtX2Z1bmN0b3IoZnVuY3RvcikKKyAgICB7CisgICAgfQorCisgICAgU2NvcGVkTGFtYmRh
RnVuY3RvcihGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRMYW1iZGEoaW1wbEZ1
bmN0aW9uLCB0aGlzKQorICAgICAgICAsIG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisg
ICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rp
b24odm9pZCogYXJndW1lbnQsIEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50
KS0+bV9mdW5jdG9yKAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFy
Z3VtZW50cykuLi4pOworICAgIH0KKworICAgIEZ1bmN0b3IgbV9mdW5jdG9yOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorU2NvcGVkTGFt
YmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYShjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQoreworICAgIHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9u
VHlwZSwgRnVuY3Rvcj4oZnVuY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gU2NvcGVkTGFtYmRhX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkx
MjM5KQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw2ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFNoYXJlZFRhc2tGdW5j
dG9yKEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVuY3RvcihXVEY6Om1vdmUoZnVu
Y3RvcikpCisgICAgeworICAgIH0KKwogcHJpdmF0ZToKICAgICBSZXN1bHRUeXBlIHJ1bihBcmd1
bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBvdmVycmlkZQogICAgIHsKQEAgLTExMCw2ICsxMTUs
MTEgQEAgUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcgogewogICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rv
cj4oZnVuY3RvcikpOwogfQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFt
ZSBGdW5jdG9yPgorUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFz
ayhGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRU
YXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KFdURjo6bW92ZShmdW5jdG9yKSkpOwor
fQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263845</attachid>
            <date>2015-10-22 12:41:02 -0700</date>
            <delta_ts>2015-10-22 15:10:16 -0700</delta_ts>
            <desc>air is done, maybe?</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>367721</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRp
bHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jhc2ljQmxvY2s6OkJh
c2ljQmxvY2sodW5zaWduZWQgaW5kZXgpCisgICAgOiBtX2luZGV4KGluZGV4KQoreworfQorCitC
YXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5k
KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCit2b2lk
IEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIz
OjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVt
b3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRl
Y2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxh
Y2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBt
X2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1w
KHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7
CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxv
Y2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYg
VmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sq
LCAyPiBBZGphY2VuY3lMaXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNz
b3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICIjIjsKKworICAg
IH5CYXNpY0Jsb2NrKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KKworICAgIFZhbHVlTGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3Zh
bHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBt
X3ZhbHVlcy5lbmQoKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9p
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6
ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSog
YXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBW
YWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAg
ICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZh
bHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFs
dWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlz
dCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIHZvaWQgYXBwZW5kKFZhbHVl
Kik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4p
OworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgc3VjY2Vzc29y
cygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1
cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9w
cmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQWRqYWNl
bmN5TGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9
CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92
ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0
YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgpOwor
CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgQWRq
YWNlbmN5TGlzdCBtX3N1Y2Nlc3NvcnM7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAg
eworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9jaykKKyAg
ICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAg
ICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
b3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayog
bV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisj
ZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxv
Y2s6OmFwcGVuZE5ldyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKK3sKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihh
cmd1bWVudHMuLi4pOworICAgIGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3Vuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJl
dHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitC
YXNpY0Jsb2NrKiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgp
OworfQorCitCYXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4
KQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGlu
ZGV4KTsKK30KKworY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6
c3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVl
PigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gK
KworI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xp
c3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCBhZGRQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAg
QmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vz
c29ycygpOworCisgICAgaWYgKHByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNz
b3IpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2Nr
PgorYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayAq
cHJlZGVjZXNzb3IpCit7CisgICAgQmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNz
b3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgewor
ICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAg
ICBwcmVkZWNlc3NvcnNbaS0tXSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBw
cmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgcmVzdWx0ID0gdHJ1ZTsKKyAg
ICAgICAgICAgIC8vIE91dCBvZiBjYXV0aW9uLCB3ZSBrZWVwIGdvaW5nIGV2ZW4gdGhvdWdoIHRo
ZSBwcmVkZWNlc3NvciBsaXN0IGNhbm5vdCBoYXZlCisgICAgICAgICAgICAvLyBkdXBsaWNhdGVz
LgorICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jaywgQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQmFzaWNCbG9j
azo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsK
KyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBmcm9tKSB7CisgICAgICAgICAgICBwcmVk
ZWNlc3NvcnNbaV0gPSB0bzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyByZWNvbXB1dGVzIHByZWRlY2Vz
c29ycyBhbmQgcmVtb3ZlcyBibG9ja3MgdGhhdCBhcmVuJ3QgcmVhY2hhYmxlLgordGVtcGxhdGU8
dHlwZW5hbWUgQmFzaWNCbG9jaz4KK3ZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykKK3sKKyAgICAvLyBDbGVhciBhbGwgcHJl
ZGVjZXNzb3IgbGlzdHMgZmlyc3QuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2Nr
cykKKyAgICAgICAgYmxvY2stPnByZWRlY2Vzc29ycygpLnJlc2l6ZSgwKTsKKworICAgIEdyYXBo
Tm9kZVdvcmtsaXN0PEJhc2ljQm9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsK
KyAgICB3b3JrbGlzdC5ub2RlKGJsb2Nrc1swXSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJs
b2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29ycygpKSB7CisgICAgICAgICAgICBpZiAod29ya2xpc3QuYWRk
KHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMoKS5h
cHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmxvY2tzW2ldLnByZWRl
Y2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICBibG9ja3NbaV0gPSBudWxscHRyOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxv
Y2tVdGlsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xp
c3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmts
aXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dv
cmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9o
CisjZGVmaW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIK
KyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0
Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8
QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBX
aGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3
aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFw
aE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3Qg
aXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJs
b2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4g
aWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0
aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhl
IGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVk
R3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsK
KwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFwaE5v
ZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBvc3RP
cmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4g
UG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM0Jsb2NrV29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNl
IHsKKwordW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCit7CisgICAgc3dpdGNoIChpbnN0
Lm9yaWdpbi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tT
dWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBDaGVj
azoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNv
ZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQorICAgIDogbV9jaGVja09wY29kZShvcGNvZGUp
CisgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQoreworfQorCitDaGVja1NwZWNpYWw6On5D
aGVja1NwZWNpYWwoKQoreworfQorCitJbnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNv
bnN0IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAgSW5zdCBoaWRkZW5CcmFuY2gobV9jaGVja09w
Y29kZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRlbkJyYW5jaC5hcmdzLnJlc2l6ZShtX251bUNo
ZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DaGVja0FyZ3M7IGktLTspCisg
ICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzW2ldID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICByZXR1
cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0
JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJh
Y2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmcoY2FsbGJhY2spOworICAg
IGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0
LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3Qp
Cit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlkKCkKKyAgICAgICAgJiYg
aXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOwor
fQorCitib29sIENoZWNrU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQg
YXJnSW5kZXgpCit7CisgICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9u
dW1DaGVja0FyZ3MpCisgICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3Rh
Y2soYXJnSW5kZXggLSAxKTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhp
bnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVs
cGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVy
cyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZmFpbCA9IGhpZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwor
ICAgIEFTU0VSVChmYWlsLmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmln
aW47CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZh
bHVlLT5vcGNvZGUoKSkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011
bCkKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlm
ICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmFyZ3NbMF0tPmlzSW50KDAp
KQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDApKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKGNvbnRleHQuY29kZSwg
aW5zdC5hcmdzWzJdKSk7CisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNv
ZGUsIGluc3QuYXJnc1sxXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3Rh
bnQoMSkpOworICAgIH0KKworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tB
cmdzICsgMSwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5k
KAorICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1
bmN0aW9uPigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25D
b250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgZmFpbC5saW5rKCZqaXQpOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVl
LT5zdGFja21hcCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAg
ICAgICAgICAgICBTdGFja21hcDo6R2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgICAgICAg
ICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcGFyYW1zLnN0YWNr
bWFwID0gc3RhY2ttYXA7CisgICAgICAgICAgICAgICAgcGFyYW1zLnJlcHMgPSByZXBzOworICAg
ICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lz
dGVyczsKKworICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5tX2dlbmVyYXRvci0+cnVuKGppdCwg
cGFyYW1zKTsKKyAgICAgICAgICAgIH0pKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJ
bXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2hlY2tPcGNv
ZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpk
ZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkIz
OjpDaGVja1ZhbHVlIGxvd2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwgIiB3aXRoICIsIG1fbnVt
Q2hlY2tBcmdzLCAiIGFyZ3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tT
cGVjaWFsX2gKKworI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBT
cGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB3YW50
IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2Fu
dCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKKy8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVh
ZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFs
IHdpbGwgcmVtZW1iZXIKKy8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBh
bG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQK
Ky8vIHdpbGwgY3JlYXRlIGFuIEluc3Qgd2l0aCB0aGF0IG9wY29kZSBwbHVzIHRoZSBhcHByb3By
aWF0ZSBhcmdzIGZyb20gdGhlIG93bmluZyBJbnN0IHdoZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkg
b2YgdGhlIGNhbGxiYWNrcy4KKy8vCisvLyBOb3RlIHRoYXQgZm9yIENoZWNrQWRkLCBDaGVja1N1
YiwgYW5kIENoZWNrTXVsIHdlIGV4cGVjdCB0aGF0IHRoZSBCMyBhcmd1bWVudHMgYXJlIHRoZSBy
ZXZlcnNlCisvLyBvZiB0aGUgQWlyIGFyZ3VtZW50cyAoQWRkKGEsIGIpID0+IEFkZDMyIGIsIGEp
LiBFeGNlcHQ6CisvLyAtIENoZWNrU3ViKDAsIHgpLCB3aGljaCB0dXJucyBpbnRvIEJyYW5jaE5l
ZzMyIHguCisvLyAtIENoZWNrTXVsKGEsIGIpLCB3aGljaCB0dXJucyBpbnRvIE11bDMyIGIsIGEg
YnV0IHdlIHBhc3MgQW55IGZvciBhJ3MgVmFsdWVSZXAuCisKK2NsYXNzIENoZWNrU3BlY2lhbCA6
IHB1YmxpYyBTdGFja21hcFNwZWNpYWwgeworcHVibGljOgorICAgIENoZWNrU3BlY2lhbChBaXI6
Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsK
KworICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRo
ZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAgIEluc3QgaGlkZGVuQnJhbmNoKGNvbnN0
IEluc3QmKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Oklu
c3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wg
YWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisg
ICAgLy8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4g
YnJhbmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRl
cyB0aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVsZXBycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3Zl
cnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1f
bnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM0NoZWNrU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitDaGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0
YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gK
KworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENo
ZWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgor
ICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBj
YXNlIENoZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tW
YWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNr
QWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4s
IGxlZnQsIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAg
ICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NF
UlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0g
Q2hlY2tNdWwpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAg
IENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2sp
OworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjND
aGVja1ZhbHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29t
bW9uLmgiCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgor
I2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2Jvb2wgc2hvdWxkRHVtcElSKCkKK3sKKyAgICByZXR1cm4gRlRMOjp2ZXJib3NlQ29tcGlsYXRp
b25FbmFibGVkKCkgfHwgRlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBzaG91bGREdW1w
SVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkKK3sK
KyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBz
aG91bGRWYWxpZGF0ZUlSKCkKK3sKKyAgICByZXR1cm4gREZHOjp2YWxpZGF0aW9uRW5hYmxlZCgp
IHx8IHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlk
YXRlSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhB
dEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkKK3sKKyAg
ICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZVZhbGlkYXRpb25GYWlsdXJlKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVmaW5lIEIzQ29tbW9u
X2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVtcElS
KCk7Citib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFZhbGlkYXRl
SVIoKTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFNh
dmVJUkJlZm9yZVBoYXNlKCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gQjNDb21tb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJp
c29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFuZChM
b2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChh
ZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8x
ID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0g
RXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5k
KGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCBy
aWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1
YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29u
c3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFs
dWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZh
bHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Q29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVl
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFs
dWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3Qz
MlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2
NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRp
YyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7
IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0
LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91Ymxl
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91Ymxl
VmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVl
OjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVs
ZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUg
QjNDb25zdERvdWJsZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkg
eyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91Ymxl
VmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2
YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2lu
KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3Vi
bGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwor
dm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1
Y2Nlc3NvcnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJh
c2ljQmxvY2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5j
aDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlz
IGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1
ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xWYWx1
ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBTdWNjZXNzb3JMaXN0OworCisg
ICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0
IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAg
IEJhc2ljQmxvY2sqJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vz
c29yc1tpXTsgfQorCisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0
IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1
YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRy
b2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBv
cGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAv
LyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3Vj
Y2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1
bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQp
CisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAg
Ly8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQp
OworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVl
KAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBu
bykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9z
dWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsK
KyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29u
dHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisjZGVmaW5lIEIzSW5kZXhN
YXBfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIG1h
cCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9y
IEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBk
b24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNhbiBoYXZl
IHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5kZXhNYXAg
eworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkKKyAgICB7
CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2l6
ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAg
ICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBWYWx1ZSYg
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBt
X3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZl
Y3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUg
YW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9u
bHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkg
b2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRp
Y2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNl
dCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJh
c2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVibGlj
OgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAg
fQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
ICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIG1f
c2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4
U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAg
ICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBj
b2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAg
ICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIu
bV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAg
ICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7Cisg
ICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0
aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZv
ciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJl
KTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52
YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0
aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxl
Y3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJh
YmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRW
ZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRl
cm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisKKyMgVGhlc2UgcnVs
ZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0aGUgdG9wLiBJdCdz
IGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxl
LgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hlciBpcyBhbiBleGNl
bGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9IExvYWQoYWRkcmVz
cykKKworIyBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRoZXNlIGZvcm1zLgorQWRkTG9hZDEgPSBB
ZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUpCitBZGRMb2FkMiA9IEFkZCh2YWx1ZSwgTG9hZChhZGRy
ZXNzKSkKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkMSA9IFN0b3JlKEFk
ZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZUFkZExvYWQyID0gU3RvcmUo
QWRkKHZhbHVlLCBMb2FkKGFkZHJlc3MpKSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0b3Jl
KEFuZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZhbHVl
LCBhZGRyZXNzKQorCitSZXR1cm4gPSBSZXR1cm4odmFsdWUpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgp
Cit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIm9mZnNldCA9ICIs
IG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZpbmUgQjNNZW1vcnlWYWx1ZV9oCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBj
YXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkRmxv
YXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNh
c2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0b3Jl
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUoKTsK
KworICAgIGludHB0cl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUg
TG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVy
bmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2Rl
LCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAg
ICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAg
ICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBl
ID09IERvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0
b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVG
bG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gVm9pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUg
dGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnRwdHJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBM
b2FkRmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOFo6Cisg
ICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAg
ICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4K
KyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGlu
dHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
eworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEIzTWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIG91dC5wcmludCgi
SWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRQorICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNvZGVfaAorCisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51
bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1
c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAg
ICAKKyAgICAvLyBQb2x5bW9ycGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5
cGUuCisgICAgSWRlbnRpdHksCisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUgQ29uc3RWYWx1
ZSogY2xhc3Nlcy4gQ29uc3RhbnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3csIHNvIHRoYXQg
d2UgY2FuCisgICAgLy8gcmVhc29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0aGVt
LiBMYXJnZSBjb25zdGFudHMgYXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgQ29uc3QzMiwK
KyAgICBDb25zdDY0LAorICAgIENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1hZ2ljYWwgc3Rh
Y2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHBy
b2dyYW0gcmVnYXJkbGVzcyBvZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0
IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBkaXNqb2ludCBy
YW5nZSBvZgorICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFz
cy4KKyAgICBTdGFja1Nsb3QsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdpc3Rl
ci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0K
KyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LCBh
bmQgdGhlIGNvbXBpbGVyIHRha2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBkb24n
dCBjbG9iYmVyIHRoZSB2YWx1ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNhbGxzIChlaXRo
ZXIgYnkgc2F2aW5nIHRoZSBhcmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBvciBwcmVzZXJ2
aW5nIGl0IGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVnVmFs
dWUgY2xhc3MuIFRoZSByZXR1cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2ludGVyKCkgKGZv
ciBHUFJzKSBvciBEb3VibGUgKGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywKKworICAgIC8v
IFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRyb2wg
ZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRlciwg
d2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50ZXIg
dGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBvaW50
ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91bGQq
IGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAgIEZy
YW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFueSB2
YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKworICAg
IC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIsIGJl
aGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0T3Is
CisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisKKyAgICAvLyBD
YXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBTRXh0
OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6Cisg
ICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3VibGU6
CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgorICAg
IElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERUb0kz
MiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFs
dWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8vIGlz
IGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVzc1Ro
YW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVhbCwK
KworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgorICAg
IEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwKKyAgICBCZWxvd0VxdWFsLAorCisg
ICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUg
bG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4g
SW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAorICAgIExvYWQx
NlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisgICAgLy8g
VGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExvYWQsCisKKyAg
ICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3Rv
cmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2
YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91
YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGlj
IHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAgICAv
LyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBz
eXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFy
Z3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKwor
ICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFz
cy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9u
bHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJh
Y2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNr
bWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQg
bXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFj
a21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVl
c3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJv
bSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3Rh
Y2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVj
a1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJh
dGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNv
ZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8g
ZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0
IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJlIG5vdCBhbGxv
d2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91ciBzbG93IHBh
dGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1
dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhh
cHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6Cisg
ICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hlY2tBZGQoeCwg
eSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAg
ICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVudGl0eShhKQor
ICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFja3Mg
dXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAv
LyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRo
ZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFmdGVyIHRoZSBm
aXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2
ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25k
IENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0FkZCwKKyAgICBD
aGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lkZS1leGl0cy4g
VXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlz
IGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoaXMg
dGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisgICAg
Ly8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVl
IHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0aC4KKyAgICBD
aGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAg
ICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQaGks
CisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgSnVtcCwK
KyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0
eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBDb250
cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVl
IHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIg
ZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBT
d2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0IGtu
b3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFueQorICAgIC8v
IHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisKKyAgICAv
LyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdl
dCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcworfTsKKworaW5s
aW5lIGJvb2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Jp
Z2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4u
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M09yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBPcmln
aW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9yaWdp
bigiLCBSYXdQb2ludGVyKG1fZGF0YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKworI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Ly8gV2hvZXZlciBnZW5lcmF0ZXMgQjNJUiBjYW4gY2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZh
bHVlcy4gV2hlbiB5b3UgZG8gdGhpcywgQjMgd2lsbCBiZSBhYmxlIHRvCisvLyBhY2NvdW50LCBk
b3duIHRvIHRoZSBtYWNoaW5lIGNvZGUsIHdoaWNoIGluc3RydWN0aW9uIGNvcnJlc3BvbmRzIHRv
IHdoaWNoIG9yaWdpbi4gQjMKKy8vIHRyYW5zZm9ybWF0aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdp
bnMgY2FyZWZ1bGx5LiBJdCdzIGFuIGVycm9yIHRvIHdyaXRlIGEgdHJhbnNmb3JtYXRpb24gdGhh
dAorLy8gZWl0aGVyIGRyb3BzIE9yaWdpbnMgb3IgbGllcyBhYm91dCB0aGVtLgorY2xhc3MgT3Jp
Z2luIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9IG51
bGxwdHIpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIGNvbnN0
IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCB2b2lkKiBtX2Rh
dGE7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzT3JpZ2lu
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hw
b2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJp
bnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGF0Y2hwb2ludFZh
bHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21h
cCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZpbmUg
QjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
U3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBh
dGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
YWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsgfQor
CisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFBhdGNocG9p
bnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBB
ZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hwb2lu
dCwgdHlwZSwgb3JpZ2luLCBjaGlsZHJlbikKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sKK30K
KworUHJvY2VkdXJlOjp+UHJvY2VkdXJlKCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJl
OjphZGRCbG9jaygpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrID0g
c3RkOjptYWtlX3VuaXF1ZTxCYXNpY0Jsb2NrPihtX2Jsb2Nrcy5zaXplKCkpOworICAgIEJhc2lj
QmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1v
dmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVyZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gKKyNkZWZp
bmUgQjNQcm9jZWR1cmVfaAorCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFz
aWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisKKyAgICBQcm9jZWR1cmUoKTsKKyAgICB+UHJvY2VkdXJlKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiBhZGRCbG9jaygpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4u
Lik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2Nr
KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9Cisg
ICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAg
ICBpdGVyYXRvcigpOgorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAg
ICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDog
bV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAg
ICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+
YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4g
aW5leDsKKyAgICAgICAgfQorCisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAg
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgY2xhc3Mg
VmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xsZWN0aW9u
KFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1
cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAg
ICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgICAgICA6
IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3IqKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmJsb2Nr
KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAg
ICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6
ZSgpKTsgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2Nl
ZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF07IH0KKyAgICAgICAg
VmFsdWUqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBQcm9jZWR1cmUmIG1fcHJvY2Vk
dXJlOworICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIFZh
bHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxWYWx1ZT4+IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzUHJvY2VkdXJlSW5saW5lc19oCisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFy
Z3VlbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2
YWx1ZShuZXcgVmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7CisgICAg
VmFsdWVUeXBlKiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoV1RG
Ojptb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0YWNrU2xvdEtp
bmQuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsK
KwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2Vk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoK
KyAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5k
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RL
aW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCisj
ZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitlbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tl
ZCBzdGFjayBzbG90IG5lZWRzIHRvIGJlIGtlZXAgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJl
Y2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBv
YnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBv
ZiBhIHN0YWNrCisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFj
ayBzbG90cyBjb3VsZCBzaGFyZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRl
ZCB0aGF0IHRoZXkgYXJlbid0IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29t
cGlsZXIgc3RpbGwgaGFzIHRvIGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJl
IGVzY2FwZWQKKyAgICAvLyBleHBsaWNpdGx5IGluIElSLgorICAgIEFub255bW91cworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmlu
dFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3Rh
Y2tTbG90S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNTdGFja1Ns
b3RLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwor
dm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1f
a2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1
ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsKK2Ns
YXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tT
bG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9i
eXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRp
b24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAgIC8v
IHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMg
bWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lkIHNl
dE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0RnJv
bUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQ
cm9jZWR1cmU7CisKKyAgICBTdGFja1Nsb3RWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9y
aWdpbiwgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKKyAgICAgICAgOiBW
YWx1ZShpbmRleCwgU3RhY2tTbG90LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5
dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fb2Zm
c2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7Cisg
ICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tt
YXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAg
ICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRlcihtX29wYXF1ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVt
cChtX3JlcHMpLAorICAgICAgICAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJh
dG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsCisgICAgICAgICIsIHVz
ZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3Rh
Y2ttYXBfaAorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVy
cy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2su
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrU3BlY2lh
bDsKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBTdGFja21h
cCB7CitwdWJsaWM6CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgeworICAgICAgICAvLyBU
aGlzIGlzIHRoZSBWYWx1ZSBjb250YWluaW5nIHRoZSBzdGFja21hcC4KKyAgICAgICAgVmFsdWUq
IHZhbHVlOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgorICAgICAgICBTdGFj
a21hcCogc3RhY2ttYXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVhbCB2
YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAgICAgVmVjdG9yPFZh
bHVlUmVwPiByZXBzOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3RlcnMg
dGhhdCB3ZXJlIHVzZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAg
fTsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJz
JiwgY29uc3QgR2VuZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5l
cmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7Cisg
ICAgfQorCisgICAgLy8gU2V0IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBzdGFj
a21hcC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisgICAg
Ly8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhhdmlu
ZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBhbGwg
b2YgdGhvc2UgZHVwbGljYXRlcyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2ZXIg
aGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNyZWF0
ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAgIHsK
KyAgICAgICAgbV9vcGFxdWUgPSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxwZXJz
IHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0T3Bh
cXVlSW5kZXgoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkgY29u
c3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAvLyBD
b25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNrbWFw
LiBOb3RlIHRoYXQgaW5kZXggemVybyByZWZlcnMgdG8gdGhlCisgICAgLy8gZmlyc3QgYXJndW1l
bnQgdG8gdGhhdCBWYWx1ZSwgZXZlbiBpZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5h
YmxlLiBGb3IgZXhhbXBsZSwgaW4gYQorICAgIC8vIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBi
ZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVl
LCBpdCB3b3VsZAorICAgIC8vIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQs
IHdoZW4gdGhlIGdlbmVyYXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuIGRlcGVuZAor
ICAgIC8vIG9uIHRoZSByZXBzIGZvciB0aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAg
ICB2b2lkIGNvbnN0cmFpbih1bnNpZ25lZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAg
ICB7CisgICAgICAgIGlmIChpbmRleCArIDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAg
bV9yZXBzLmdyb3coaW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAg
ICB9CisKKyAgICB2b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7Cisg
ICAgICAgIG1fY2xvYmJlcmVkLm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0
ZXJTZXQmIGNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2
b2lkIHNldEdlbmVyYXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAg
ICAgICBtX2dlbmVyYXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJh
dG9yRnVuY3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFs
OworICAgIGZyaWVuZCBjbGFzcyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9v
cGFxdWUgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVm
UHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7
CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUg
ZnVydGhlciBkdXBsaWNhdGVkIGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVz
dCBtZXJnZSB0aGUgdXNlZCByZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2tt
YXBTcGVjaWFsKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBTcGVjaWFsKG5hbWUpCit7Cit9CisK
K1N0YWNrbWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgU3RhY2tt
YXBTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICByZXR1cm4gZm9yRWFjaEFyZ0lt
cGwoMCwgMSwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNW
YWxpZChJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsK
K30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2ln
bmVkIGFyZ0luZGV4KQoreworICAgIHJldHVybiBhZG1pdHNTdGFjaygwLCAxLCBpbnN0LCBhcmdJ
bmRleCk7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKElu
c3QmIGluc3QsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5z
dGFja21hcCgpOworCisgICAgLy8gRklYTUU6IElmIHRoZSBJbnN0IHRoYXQgdXNlcyB0aGUgU3Rh
Y2ttYXBTcGVjaWFsIGdldHMgZHVwbGljYXRlZCwgdGhlbiB3ZSBlbmQgdXAgbWVyZ2luZyB1c2Vk
CisgICAgLy8gcmVnaXN0ZXIgc2V0cyBmcm9tIG11bHRpcGxlIHBsYWNlcy4gVGhpcyBjdXJyZW50
bHkgd29uJ3QgaGFwcGVuIHNpbmNlIEFpciBkb2Vzbid0IGhhdmUgdGFpbGR1cAorICAgIC8vIG9y
IHRoaW5ncyBsaWtlIHRoYXQuIEJ1dCBtYXliZSBldmVudHVhbGx5IGl0IGNvdWxkIGJlIGEgcHJv
YmxlbS4KKyAgICBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzLm1lcmdlKHVzZWRSZWdpc3RlcnMp
OworfQorCitjb25zdCBSZWdpc3RlclNldCYgU3RhY2ttYXBTcGVjaWFsOjpleHRyYUNsb2JiZXJl
ZFJlZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAg
ICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHJldHVybiBz
dGFja21hcC0+Y2xvYmJlcmVkKCk7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNo
QXJnSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25v
cmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFj
aEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmln
aW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQu
CisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAg
IEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAg
IEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNo
aWxkcmVuLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7
CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAg
ICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7
CisKKyAgICAgICAgY2FsbGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNo
aWxkLT50eXBlKCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlk
SW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVk
QXJnQXJncywKKyAgICBJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVk
LgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAg
ICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKwor
ICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgQVNTRVJU
KHN0YWNrbWFwKTsKKworICAgIC8vIEZvciB0aGUgSW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMg
dG8gaGF2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoaW5zdC5hcmdz
LnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzICE9IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgLSBu
dW1JZ25vcmVkQjNBcmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdhcmRs
ZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVtZW50
cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3QgaGF2
ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRpb25z
IGFzIHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsK
KyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdz
KTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsK
KyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFy
Zzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1tNjQ6
CisgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6Cisg
ICAgICAgICAgICBicmVhazsgLy8gT0sKKyAgICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAg
ICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpICYm
CisgICAgICAgICAgICAgICAgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVG
b3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIg
b2YgY29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIEIz
IGNoaWxkcmVuLgorICAgIEFTU0VSVChzdGFja21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1ZS0+
Y2hpbGRyZW4uc2l6ZSgpKTsKKworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBzdXBwbGll
ZCBjb25zdHJhaW50cy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNBcmdzOyBp
IDwgc3RhY2ttYXAtPm1fcmVwcy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQg
PSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgIFZhbHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9y
ZXBzW2ldOworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJn
cyArIG51bUlnbm9yZWRBaXJBcmdzXTsKKworICAgICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsK
KyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2
ZXJpZmllZCB0aGlzIGFib3ZlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFs
dWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJl
ZygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5v
dCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3Rh
Y2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChhcmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZz
ZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICAgICAgLy8g
VGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0
YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25v
cmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBW
YWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1
ZS0+c3RhY2ttYXAoKTsKKworICAgIHVuc2lnbmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRl
eCAtIG51bUlnbm9yZWRBaXJBcmdzICsgbnVtSWdub3JlZEIzQXJnczsKKworICAgIGlmIChzdGFj
a21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRo
aXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8gY29uc3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBz
aW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBpbnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1
bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8gYSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3Rh
Y2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0luZGV4XS5raW5kKCkgPT0gQW55KQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFZhbHVlUmVwPiBT
dGFja21hcFNwZWNpYWw6OnJlcHMoR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIEluc3QmIGlu
c3QpCit7CisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXN1bHQ7CisgICAgYXBwZW5kUmVwc0ltcGwo
Y29udGV4dCwgMSwgaW5zdCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwoCisgICAgR2VuZXJhdGlvbkNvbnRleHQm
IGNvbnRleHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBJbnN0JiBpbnN0LCBWZWN0b3I8VmFs
dWVSZXA+JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEFyZ3M7
IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwRm9y
QXJnKGNvbnRleHQuY29kZSwgYXJnKSk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ld
OworICAgIH0KK30KKworVmFsdWVSZXAgU3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JBcmcoQ29kZSYg
Y29kZSwgY29uc3QgQXJnJiBhcmcpCit7CisgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAg
Y2FzZSBUbXA6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgSW1tOgorICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIHJldHVy
biBWYWx1ZVJlcDo6Y29uc3RhbnQoYXJnLnZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFkZHI6CisgICAgICAgIGlmIChhcmcuYmFzZSgpID09IEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkp
OworICAgICAgICBBU1NFUlQoYXJnLmJhc2UoKSA9PSBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQo
KSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVmFsdWVSZXAoKTsKKyAgICB9Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzU3RhY2ttYXBTcGVjaWFsX2gKKyNkZWZpbmUgQjNTdGFja21hcFNwZWNpYWxfaAorCisjaW5j
bHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVj
aWFscyB0aGF0IGhhdmUgc3RhY2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNr
bWFwIGJ5CisvLyBhc2tpbmcgZm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2Jq
ZWN0cyBkb24ndCBuZWVkIHRvIGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNr
bWFwLgorCitjbGFzcyBTdGFja21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1
YmxpYzoKKyAgICBTdGFja21hcFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNp
YWwoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25z
dCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3Rh
Y2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVw
b3J0VXNlZFJlZ2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRl
OworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikg
b3ZlcnJpZGU7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5l
cmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisg
ICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgorCisgICAgdm9pZCBmb3JFYWNo
QXJnSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVt
SWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxB
aXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBib29sIGlzVmFsaWRJbXBsKAorICAg
ICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJn
cywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBhZG1pdHNTdGFja0ltcGwoCisgICAg
ICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdz
LAorICAgICAgICBBaXI6Okluc3QmKTsKKworICAgIC8vIEdldHMgdGhlIHJlcHMgYXJyYXkgdGhl
IHdheSB0aGF0IHRoZSBzdGFja21hcCBnZW5lcmF0b3IgY2FsbGJhY2sgd291bGQgd2FudC4KKyAg
ICBWZWN0b3I8VmFsdWVSZXA+IHJlcHMoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIEFpcjo6SW5z
dCYpOworCisgICAgLy8gQXBwZW5kcyB0aGUgcmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBzdGFy
dGluZyB3aXRoIG51bUlnbm9yZWRBcmdzLCB0byB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgIHZvaWQg
YXBwZW5kUmVwc0ltcGwoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUlnbm9y
ZWRBcmdzLCBBaXI6Okluc3QmLCBWZWN0b3I8VmFsdWVSZXA+Jik7CisKKyAgICBzdGF0aWMgVmFs
dWVSZXAgcmVwRm9yQXJnKEFpcjo6Q29kZSYsIGNvbnN0IEFpcjo6QXJnJik7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENh
c2UuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKwordm9pZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG1fY2FzZVZhbHVlLCAiLT4iLCBwb2ludGVyRHVtcChtX3Rh
cmdldCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNTd2l0Y2hDYXNlX2gKKyNkZWZpbmUgQjNTd2l0Y2hDYXNlX2gKKworI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIFN3
aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRjaENhc2UoKQorICAgIHsKKyAgICB9CisKKyAg
ICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVlLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAg
ICAgIDogbV9jYXNlVmFsdWUoY2FzZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkK
KyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICEhbV90YXJnZXQ7IH0KKworICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXQoKSBjb25zdCB7IHJldHVy
biBtX3RhcmdldDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGludDY0X3QgY2FzZVZhbHVlOworICAgIEJhc2ljQmxvY2sqIHRhcmdl
dDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNTd2l0Y2hD
YXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsZHVl
ICJCM1N3aXRjaFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitT
d2l0Y2hWYWx1ZTo6flN3aXRjaFZhbHVlKCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1
ZTo6cmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBTd2l0Y2hDYXNlIHJlc3VsdCA9
IG1fc3VjY2Vzc29yc1tpbmRleF07CisgICAgbV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vz
c29ycy5sYXN0KCk7CisgICAgbV9zdWNjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIFN3aXRjaFZhbHVlOjphcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENh
c2UmIHN3aXRjaENhc2UpCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChtX3N1Y2Nlc3NvcnMu
bGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3NvcnNbbV9zdWNjZXNzb3JzLnNpemUoKSAtIDJdID0gc3dp
dGNoQ2FzZS50YXJnZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoc3dpdGNoQ2FzZS5jYXNlVmFs
dWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgLy8gVGhpcyBkZXN0cnVjdGl2ZWx5IG92ZXJyaWRlcyBDb250cm9sVmFs
dWUncyBkdW1wTWV0YSgpLgorICAgIG91dC5wcmludChsaXN0RHVtcCgqdGhpcykpOworfQorCitT
d2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIEJh
c2ljQmxvY2sqIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gs
IG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRj
aFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpbmNsdWRlICJCM0NvbnRyb2xW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJu
IG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8gbnVt
Q2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVtQ2Fz
ZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8gVGhl
IHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4LgorICAg
IGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
c1tpXTsgfQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCgp
IGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYg
ZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtQ2FzZVZhbHVlcygpOyB9CisgICAgU3dpdGNo
Q2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTd2l0
Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nlc3NvcihpbmRleCkpOworICAgIH0KKyAgICBT
d2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2gobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvcihTd2l0Y2hWYWx1ZSYgc3dpdGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dpdGNoVmFsdWUpCisgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFN3aXRjaENhc2Ugb3Bl
cmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2lu
ZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIu
bV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3dpdGNoVmFs
dWUqIG1fc3dpdGNoOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAgICBp
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAg
IGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9
CisKKyAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIGNhc2UgYW5kIHJlb3JkZXJzIHRoaW5ncyBhIGJp
dC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0aGUgY2FzZXMgZnJvbSAwIHRvIE4sCisgICAgLy8gdGhl
biB5b3UgY2FuIGtlZXAgaXRlcmF0aW5nIGFmdGVyIHRoaXMgc28gbG9uZyBhcyB5b3UgcmV2aXNp
dCB0aGlzIHNhbWUgaW5kZXggKHdoaWNoIHdpbGwgbm93CisgICAgLy8gY29udGFpbiBzb21lIG90
aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJlbW92ZXMgdGhlIGNhc2UgdGhhdCB3YXMgcmVtb3ZlZC4K
KyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgpOworCisgICAgdm9pZCBh
cHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpOworCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTd2l0Y2hWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayogZmFsbFRocm91Z2gpOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N3aXRjaFZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6
QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7
CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQo
IlZvaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91dC5w
cmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAgICAg
IG91dC5wcmludCgiSW50NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlOgor
ICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBlX2gKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gVHlwZSB7CisgICAg
Vm9pZCwKKyAgICBJbnQzMiwKKyAgICBJbnQ2NCwKKyAgICBEb3VibGUKK307CisKK2lubGluZSBi
b29sIGlzSW50KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBJbnQzMiB8fCB0eXBl
ID09IEludDY0OworfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGUgdHlwZSkKK3sKKyAgICBy
ZXR1cm4gdHlwZSA9PSBEb3VibGU7Cit9CisKK2lubGluZSBUeXBlIHBvaW50ZXIoKSBjb25zdAor
eworICAgIGlmIChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAg
ICByZXR1cm4gSW50NjQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3Bh
Y2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6QjM6OlR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25W
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxv
blZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vw
c2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK1Vwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBz
aWxvblZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiXiIsIG1fcGhpLT5pbmRleCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXBzaWxvblZhbHVlX2gKKyNkZWZpbmUgQjNV
cHNpbG9uVmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVXBzaWxvblZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9w
Y29kZSA9PSBVcHNpbG9uOyB9CisKKyAgICB+VXBzaWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSog
cGhpKCkgY29uc3QgeyByZXR1cm4gbV9waGk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVt
cE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwgdmFsdWUpCisgICAgICAgICwgbV9waGkocGhp
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOwor
ICAgIH0KKworICAgIFZhbHVlKiBtX3BoaTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gQjNVcHNpbG9uVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitWYWx1ZTo6flZhbHVlKCkKK3sKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0
eShWYWx1ZSogdmFsdWUpCit7CisgICAgLy8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBh
biBpbi1wbGFjZSByZXBsYWNlbWVudCBvZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlz
IHdpdGgKKyAgICAvLyBhIHBsYWluIElkZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFs
bCBvZiB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAv
LyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVu
dGl0eSBWYWx1ZSBpbiBwbGFjZS4KKworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAg
ICBUeXBlIHR5cGUgPSBtX3R5cGU7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAg
IEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50
ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisgICAgdm9pZCogbWlzYyA9IHRoaXMtPm1pc2M7CisKKyAg
ICBSRUxFQVNFX0FTU0VSVCh0eXBlID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+VmFs
dWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSAoaW5kZXgsIElkZW50aWZ5LCB0eXBlLCBv
cmlnaW4sIHZhbHVlKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVw
bGFjZW1lbnQgPSByZXBsYWNlbWVudDsKKyAgICB0aGlzLT5taXNjID0gbWlzYzsKK30KKwordm9p
ZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChk
dW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0g
IiwgbV9vcGNvZGUpOworCisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNv
bW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0g
c3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcg
PSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOworCisgICAgb3V0LnByaW50KCIpIik7Cit9CisK
K2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2ludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQo
KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFZhbHVlOjpk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3Io
T3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAg
IGNhc2UgTXVsOgorICAgIGNhc2UgRGl2OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBN
b2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoK
KyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2Ug
Q2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAg
ICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAg
ICAgICByZXR1cm4gcG9pbnRlcigpOworICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6
CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgor
ICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NF
cXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2Ug
QmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAg
ICAgcmV0dXJuIEludDMyOworICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAg
ICAgICByZXR1cm4gSW50NjQ7CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAg
ICAgICByZXR1cm4gRG91YmxlOworICAgIGNhc2UgTm9wOgorICAgICAgICByZXR1cm4gVm9pZDsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZp
bmUgQjNWYWx1ZV9oCisKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5o
IgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFsdWUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlz
dDsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIkAiOworCisgICAgc3Rh
dGljIGJvb2wgYWNjZXB0cyhPcGNvZGUpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwg
flZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7
IH0KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2Vw
dCBmb3IgcmVwbGFjaW5nIHZhbHVlcyB3aXRoIGlkZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUo
KSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAv
LyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBlIHVzaW5nIHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJl
bigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hp
bGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VX
aXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKKyAgICAvLyBUaGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBl
eGFtcGxlLCBpZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZl
IGEKKyAgICAvLyBBcmd1bWVudFJlZ1ZhbHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8g
aWYgKEFyZ3VtZW50UmVnVmFsdWUqIGFyZ3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVn
VmFsdWU+KCkpIHsKKyAgICAvLyAgICAgdGhpbmdzCisgICAgLy8gfQorICAgIC8vCisgICAgLy8g
VGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRo
aXMgd29ya3MgYmVjYXVzZSB0aGlzIHJldHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2Vw
dHMob3Bjb2RlKCkpIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICBUKiBhcygpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBj
b25zdDsKKyAgICAKKyAgICBib29sIGhhc0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0lu
dDMyKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0
X3QgYXNJbnQ2NCgpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAgICBpbnQ2
NF90IGFzSW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdDsK
KworICAgIGJvb2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29u
c3Q7CisKKyAgICBTdGFja21hcCogc3RhY2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1
YWwgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVl
cyB2aWEgUHJvY2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRo
ZSB0eXBlIGV4cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5
cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2Rl
KQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAg
ICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAg
ICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0
bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQor
ICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAg
ICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7Cisg
ICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZl
ciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAs
IG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0
Q2hpbGQpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVu
eyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBm
b3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0
aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50
czoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3Jp
Z2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2Rl
KG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAg
ICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZv
cm0gZm9yIHZhcmFyZ3MuCisgICAgZXhwaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2Rl
IG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBj
aGlsZHJlbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9w
Y29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4p
CisgICAgICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikKKyAgICB7CisgICAgfQorCisgICAgc3Rh
dGljIFR5cGUgdHlwZUZvcihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKworICAgIC8vIFRo
aXMgZ3JvdXAgb2YgZmllbGRzIGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgorICAgIHVu
c2lnbmVkIG1faW5kZXg7CisgICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgIFR5cGUgbV90eXBlOwor
ICAgIAorICAgIE9yaWdpbiBtX29yaWdpbjsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47
CisKK3B1YmxpYzoKKyAgICBCYXNpY0Jsb2NrKiBvd25lciB7IG51bGxwdHIgfTsgLy8gY29tcHV0
ZWQgbGF6aWx5LgorICAgIFZhbHVlKiByZXBsYWNlbWVudCB7IG51bGxwdHIgfTsgLy8gdXNlZCBm
b3IgYW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KK307CisKK2NsYXNzIERlZXBWYWx1ZUR1
bXAgeworcHVibGljOgorICAgIERlZXBWYWx1ZUR1bXAoVmFsdWUqIHZhbHVlKQorICAgICAgICA6
IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBt
X3ZhbHVlLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJp
bnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWYWx1ZSogbV92YWx1ZTsKK307
CisKK0RlZXBWYWx1ZUR1bXAgZGVlcER1bXAoVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBE
ZWVwVmFsdWVEdW1wKHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxp
bmVzX2gKKyNkZWZpbmUgQjNWYWx1ZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVl
LmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hw
b2ludFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QqIFZhbHVlOjphcygpCit7Cisg
ICAgaWYgKFQ6OmFjY2VwdHMob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VCo+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZT50eXBlbmFtZSBU
PgorY29uc3QgVCogVmFsdWU6OmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxW
YWx1ZSo+KHRoaXMpLT5hczxUPigpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0
Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbnQzMl90IFZhbHVl
Ojphc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1
ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEh
YXM8Q29uc3Q2NFZhbHVlPigpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZh
bHVlOjpoYXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0
KCk7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
SW50MzIoKSA/IGFzSW50MzIoKSA6IGFzSW50NjQoKTsKK30KKworYm9vbCBWYWx1ZTo6aXNJbnQo
aW50NjRfdCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9
PSB2YWx1ZTsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91Ymxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUoKTsK
K30KKworU3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUq
IGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2tt
YXA7CisgICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRW
YWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M1ZhbHVlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
UmVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNWYWx1ZVJlcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9p
ZCBWYWx1ZVJlcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChtX2tpbmQpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb25lOgorICAgIGNh
c2UgU29tZVJlZ2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAg
ICAgICAgb3V0LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnBy
aW50KCIoIiwgb2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBW
YWx1ZVJlcDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFs
dWVSZXA6OkFueToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21l
UmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVy
OgorICAgICAgICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0
LnByaW50KCJTdGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVl
UmVwOjpDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVw
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIz
VmFsdWVSZXBfaAorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBj
bGFzcyB0byBkZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdz
IHVzZWQgYm90aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSBy
ZXByZXNlbnRhdGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9u
LCB3ZSBzYXkKKy8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50
IHdoYXQgcmVwcmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBv
dXRwdXQuCisKK2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAg
ICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNh
biBwaWNrIGFueSByZXByZXNlbnRhdGlvbi4gQXMgYW4KKyAgICAgICAgLy8gb3V0cHV0IHJlcHJl
c2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkg
YXJpc2UgZm9yIHRoZQorICAgICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBv
ZiBhIENoZWNrTXVsLgorICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVy
LiBJdCBjb3VsZCBiZSBhCisgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8g
Y2xvYmJlciEKKyAgICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0
IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFu
IG91dHB1dAorICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJl
Z2lzdGVyIEIzIHBpY2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4g
b3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBw
aWNrZWQuIEl0J3Mgbm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24u
CisgICAgICAgIFN0YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIGZvcmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0
IHNvbWUKKyAgICAgICAgLy8gb2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAg
ICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIz
IGNvbnN0YW50LWZvbGRlZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAg
ICAKKyAgICBWYWx1ZVJlcCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQor
CisgICAgZXhwbGljaXQgVmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0
ZXIpCisgICAgICAgICwgbV92YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAg
c3RhdGljIFZhbHVlUmVwIHJlZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVl
UmVwKHJlZyk7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9m
ZnNldEZyb21GUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21G
UDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBv
ZmZzZXRGcm9tU1ApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBTdGFja0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9m
ZnNldEZyb21TUDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRf
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IENvbnN0YW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAg
IH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVl
KSk7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisK
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFu
eTsgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOwor
ICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
Q29uc3RhbnQpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUg
ZG91YmxlVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxk
b3VibGU+KHZhbHVlKCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOwor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNo
ZXIucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVf
cGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkzIEBACisjIS91
c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K3JlcXVpcmUgInBhdGhuYW1lIgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZh
ckluZGV4ICs9IDEKKyAgICAiX3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0
aW9uCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3Vz
LCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwg
b3Bjb2RlLCBjaGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFt
ZSA9IG5hbWUKKyAgICAgICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9c
QVwkKFswLTldKylcWi8pCisgICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6
IG5hbWUKKyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGls
ZHJlbiA/IGNoaWxkcmVuIDogW10KKyAgICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAg
ICAgb3Bjb2RlICE9IG5pbAorICAgIGVuZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykK
KyAgICAgICAgY2hpbGRyZW4uZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQs
IGluZGV4IHwKKyAgICAgICAgICAgIHlpZWxkIHZhck5hbWUsCisgICAgICAgICAgICAgICAgICBj
aGlsZC5uYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAg
ICAgICAgIGNoaWxkLmFub255bW91cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDog
OmFub25PcGVyYW5kKSA6IChjaGlsZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisg
ICAgICAgICAgICAgICAgICBpbmRleAorICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZw
cm9jKQorICAgICAgICB9CisgICAgZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJf
cmVhZGVyIDpuYW1lLCA6cHJvZHVjdGlvbnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHBy
b2R1Y3Rpb25zKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0g
cHJvZHVjdGlvbnMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRl
ciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5h
bWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBs
aW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAg
ICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRv
a2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0
aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAg
IEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAg
ICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0
cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAg
IGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9
fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcu
aW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9y
KCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2Ug
IlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAi
UGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVu
ZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1l
Lm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAg
d2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFc
IyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAv
XEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVt
YmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKikvCisg
ICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVO
dW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3
aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbPSgpLF0vCisgICAgICAgICAgICBy
ZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2lu
Lm5ldyhmaWxlTmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tz
dHJbMC4uMjBdLmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9t
YXRjaAorICAgIGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisg
ICAgIyBXZSBjYW4gZXh0ZW5kIHRoaXMgYXMgd2UgYWRkIG1vcmUga2V5d29yZHMuIExpa2UsIHdl
IG1pZ2h0IHdhbnQgImluY2x1ZGUiIGV2ZW50dWFsbHkuCisgICAgdG9rZW4gPX4gL1xBKChtYXRj
aGVyKSlcWi8KK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9c
QVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikK
K2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkK
KyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAK
KyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5k
CisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRl
ZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9r
ZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29t
bWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9m
IGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVy
cm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAg
ICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJz
ZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAg
ICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAg
ICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRl
bnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisg
ICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0
aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAgaWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUK
KyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNoaWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBh
cyBwYXJlbnQgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9u
cy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAg
ICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQK
KyAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBh
cnNlCisgICAgICAgIGNvbnN1bWUoIm1hdGNoZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0g
Y29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAg
bG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAg
ICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlk
IHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUuCisgICAgICAgICAgICBwcm9kdWN0aW9uID0gcGFyc2VQ
cm9kdWN0aW9uCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVj
dCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAg
ICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICAgICAgZW5k
CisKKyAgICAgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICAgICAgfQorCisg
ICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJOYW1lLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKKwor
ICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgb3JpZ2luID0gdG9rZW4ub3JpZ2luCisg
ICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIGlmIHRva2VuID09ICI9
IgorICAgICAgICAgICAgY29uc3VtZSgiPSIpCisgICAgICAgICAgICBvcGNvZGUgPSBjb25zdW1l
SWRlbnRpZmllcgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgIGVsc2lmIHRva2Vu
ID09ICIoIgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgICAgICBvcGNvZGUgPSBu
YW1lCisgICAgICAgICAgICBuYW1lID0gbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
dHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG5pbCwgbmlsKQorICAgICAgICBlbmQK
KyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgbG9vcCB7CisgICAg
ICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKworICAgICAgICAgICAgYWRkVW5pcXVlKG5h
bWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1Y3Rpb24pCisKKyAgICAgICAgICAgIGJyZWFrIGlm
IHRva2VuID09ICIpIgorICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgIH0KKworICAg
ICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIpIgorICAgICAgICBhZHZhbmNlCisKKyAgICAgICAg
UHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBvcGNvZGUsIHByb2R1Y3Rpb25zKQorICAgIGVu
ZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpy
ZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCittYXRjaGVyID0gcGFyc2VyLnBhcnNlCisKK2NsYXNz
IFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIgOmluZGV4TWFwLCA6cHJvZHVjdGlvbnMKKyAgICAK
KyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICBAaW5k
ZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBpbmRleExpc3Qu
ZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcCA8PCBp
bmRleAorICAgICAgICAgICAgQHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb25zW2luZGV4XQorICAg
ICAgICB9CisgICAgZW5kCisKKyAgICBkZWYgbWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAg
ICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBp
bmRleE1hcFtpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK0ZpbGUub3BlbigiQjMi
ICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInciKSB7CisgICAgfCBvdXRwIHwKKworICAgIG91dHAu
cHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7
ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKworICAgIG91dHAucHV0cyAiI2lmbmRlZiBCMyN7
bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAucHV0cyAiI2RlZmluZSBCMyN7bWF0Y2hlci5uYW1l
fV9oIgorICAgIAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAK
KyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyIKKworICAgIG91
dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lk
IHJ1biN7bWF0Y2hlci5uYW1lfShWYWx1ZSogX3ZhbHVlLCBBZGFwdG9yJiBhZGFwdG9yKSIKKyAg
ICBvdXRwLnB1dHMgInsiCisKKyAgICAjIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGVtaXQgcHJv
cGVybHkgaW5kZW50ZWQgY29kZSwgYmVjYXVzZSBpdCdzIGEgcmVjdXJzaXZlIGVtaXR0ZXIuIElm
IHlvdQorICAgICMgd2FudCB0byBzZWUgdGhlIGNvZGUgbmljZWx5IGZvcm1hdHRlZCwgb3BlbiBp
dCBpbiBhIGdvb2QgdGV4dCBlZGl0b3IgYW5kIGFzayBpdCB0byBmb3JtYXQgaXQKKyAgICAjIGZv
ciB5b3UuCisKKyAgICAjIEluIG9kZCBzaXR1YXRpb25zLCB3ZSBtYXkgbm90IHVzZSB0aGUgaW5w
dXQgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICBv
dXRwLnB1dHMgIlVOVVNFRF9QQVJBTShfdmFsdWUpOyIKKyAgICAgICAgCisgICAgIyBUaGlzIGp1
c3QgcHJvdGVjdHMgdGhlIGNhbGxlciBmcm9tIGhhdmluZyB0byB3b3JyeSBhYm91dCBwcm9kdWN0
aW9ucyBoYXZpbmcgZGlmZmVyZW50IGxlbmd0aHMuCisgICAgZGVmIG1hdGNoTGVuZ3RoKG91dHAs
IHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAg
ICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9u
LCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNb
aW5kZXhMaXN0c1stMV1bMF1dLmNoaWxkcmVuLmxlbmd0aCA9PSBwcm9kdWN0aW9uLmNoaWxkcmVu
Lmxlbmd0aAorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBsZW5ndGggPSBwcm9kdWN0aW9uc1tpbmRl
eExpc3RbMF1dLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgaWYgbGVuZ3RoID4gMAorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dmFsdWVOYW1lfS0+Y2hpbGRyZW4uc2l6ZSgp
ID49ICN7bGVuZ3RofSkgeyIKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVuZAor
CisgICAgIyBUaGlzIGVmZmljaWVudGx5IHNlbGVjdHMgZnJvbSB0aGUgZ2l2ZW4gc2V0IG9mIHBy
b2R1Y3Rpb25zLiBJdCBhc3N1bWVzIHRoYXQgcHJvZHVjdGlvbnMKKyAgICAjIGFyZSBub3QgZHVw
bGljYXRlZC4gSXQgeWllbGRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgcHJvZHVjdGlvbiwgYW5k
IHRoZSBjb3JvdXRpbmUgaXMKKyAgICAjIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBzcGVjaWZp
YyBjb2RlIGZvciB0aGF0IHByb2R1Y3Rpb24uIFRoZSBjb3JvdXRpbmUgaXMgZ2l2ZW4gbGlzdHMg
b2YKKyAgICAjIGluZGljZXMgb2YgcG9zc2libHktbWF0Y2hpbmcgcHJvZHVjdGlvbnMuCisgICAg
ZGVmIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAg
ICAgIyBGaXJzdCwgc3BsaXQgdGhlIHByb2R1Y3Rpb25zIGxpc3QgaW50byBydW5zIG9mIHByb2R1
Y3Rpb25zIHdpdGggYW4gb3Bjb2RlIGFuZCBwcm9kdWN0aW9ucworICAgICAgICAjIHdpdGhvdXQg
b25lLgorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93
aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAg
ICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5o
YXNPcGNvZGUgPT0gcHJvZHVjdGlvbi5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICBpbmRleExp
c3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4
TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgICMgTm93LCBlbWl0IHBhdHRlcm4gbWF0Y2hpbmcgY29kZS4gV2UgZG8gaXQgZGlmZmVy
ZW50bHkgZm9yIGxpc3RzIHdpdGggYW4gb3Bjb2RlIHRoYW4gZm9yCisgICAgICAgICMgbGlzdHMg
d2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGlu
ZGV4TGlzdCB8CisgICAgICAgICAgICBpZiBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmhhc09w
Y29kZQorICAgICAgICAgICAgICAgICMgTm93LCB3ZSBzcGxpdCB0aGlzIGluZGV4IGxpc3QgaW50
byBncm91cHMgZm9yIGVhY2ggb3Bjb2RlLgorICAgICAgICAgICAgICAgIGdyb3VwcyA9IHt9Cisg
ICAgICAgICAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IGlu
ZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHByb2R1Y3Rpb25zW2luZGV4
XQorICAgICAgICAgICAgICAgICAgICBpZiBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdCisgICAg
ICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdIDw8IGluZGV4Cisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1tw
cm9kdWN0aW9uLm9wY29kZV0gPSBbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgRW1pdCBhIHN3aXRjaCBzdGF0ZW1l
bnQuCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7dmFsdWVOYW1lfS0+b3Bj
b2RlKCkpIHsiCisgICAgICAgICAgICAgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgICAg
ICAgICAgICAgIHwgb3Bjb2RlLCBzdWJJbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgICAgICAgICAgICAgc3ViTWF0Y2gg
PSBTdWJNYXRjaC5uZXcoc3ViSW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykg
eworICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAg
ICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJN
YXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICBtYXRjaExl
bmd0aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAg
ICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0
Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgfQorICAgIGVuZAorCisgICAgIyBUYWtlcyBwcm9kdWN0aW9ucyB0aGF0
IGhhdmUgdGhlIHNhbWUgb3Bjb2RlIGFuZCB0aGUgc2FtZSBsZW5ndGggYW5kIHNlbGVjdHMgZnJv
bSB0aGVtIGJhc2VkIG9uCisgICAgIyB0aGUgcHJvZHVjdGlvbnMgYXQgdGhlIGdpdmVuIGNvbHVt
bi4KKyAgICBkZWYgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucywgY29s
dW1uSW5kZXgpCisgICAgICAgIGlmIGNvbHVtbkluZGV4ID49IHByb2R1Y3Rpb25zWzBdLmNoaWxk
cmVuLmxlbmd0aAorICAgICAgICAgICAgeWllbGQgKDAuLi4ocHJvZHVjdGlvbnMuc2l6ZSkpLnRv
X2EKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKworICAgICAgICBzdWJWYWx1ZSA9
IG5ld1ZhcgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICBvdXRwLnB1
dHMgIlZhbHVlKiAje3N1YlZhbHVlfSA9ICN7dmFsdWVOYW1lfS0+Y2hpbGQoI3tjb2x1bW5JbmRl
eH0pOyIKKworICAgICAgICAjIFdlIG1heSBub3QgdXNlIHRoaXMgdmFsdWUuIFRlbGwgdGhlIGNv
bXBpbGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICAgICAgb3V0cC5wdXRzICJVTlVTRURf
UEFSQU0oI3tzdWJWYWx1ZX0pOyIKKyAgICAgICAgCisgICAgICAgIHN1YlByb2R1Y3Rpb25zID0g
cHJvZHVjdGlvbnMubWFwIHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiB8CisgICAgICAgICAg
ICBwcm9kdWN0aW9uLmNoaWxkcmVuW2NvbHVtbkluZGV4XQorICAgICAgICB9CisKKyAgICAgICAg
bWF0Y2hSZWN1cnNpdmVseShvdXRwLCBzdWJWYWx1ZSwgc3ViUHJvZHVjdGlvbnMpIHsKKyAgICAg
ICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3
KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2
YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCArIDEpIHsKKyAgICAg
ICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gu
bWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIG91dHAucHV0cyAifSIKKyAgICBlbmQKKworICAgIGRlZiBtYXRjaFJlY3Vyc2l2ZWx5KG91
dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIG1hdGNoUHJvZHVjdGlvbnMob3V0
cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAor
ICAgICAgICAgICAgIyBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoaXMgaW5kZXggbGlzdCBjb250
YWlucyBwcm9kdWN0aW9ucyB3aXRoIHRoZSBzYW1lIG9wY29kZSBhbmQKKyAgICAgICAgICAgICMg
dGhlIHNhbWUgbGVuZ3RoLgorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5k
ZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVl
TmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMsIDApIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4
TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4
TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgbWF0Y2hSZWN1
cnNpdmVseShvdXRwLCAiX3ZhbHVlIiwgbWF0Y2hlci5wcm9kdWN0aW9ucykgeworICAgICAgICB8
IGluZGV4TGlzdCB8CisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5k
ZXggfAorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IG1hdGNoZXIucHJvZHVjdGlvbnNbaW5kZXhd
CisgICAgICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVl
KiAje3Byb2R1Y3Rpb24udmFyTmFtZX0gPSBfdmFsdWU7IgorICAgICAgICAgICAgaW50ZXJuYWxB
cmd1bWVudHMgPSBbXQorICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9IFtdCisgICAgICAg
ICAgICB0cnlBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgbnVtU2NvcGVzID0gMAorICAgICAg
ICAgICAgc2VlbiA9IHt9CisgICAgICAgICAgICBwcm9kdWN0aW9uLmVhY2hWYXJpYWJsZSB7Cisg
ICAgICAgICAgICAgICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5hbWUsIGNoaWxkVmFyTmFtZSwg
a2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGxvYWRFeHByID0gIiN7cGFyZW50VmFyTmFt
ZX0tPmNoaWxkKCN7aW5kZXh9KSIKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiBzZWVuW2NoaWxkVmFyTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3VmFyCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7dG1wfSA9ICN7bG9hZEV4cHJ9
OyIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t0bXB9ID09ICN7Y2hpbGRW
YXJOYW1lfSkgeyIKKyAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNlZW5bY2hpbGRWYXJOYW1lXSA9IHRy
dWUKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
VmFsdWUqICN7Y2hpbGRWYXJOYW1lfSA9ICN7bG9hZEV4cHJ9OyIKKworICAgICAgICAgICAgICAg
ICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBj
aGlsZE5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVy
bmFsIG9yIGtpbmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICBvcGVyYW5k
QXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5kIG9yIGtpbmQgPT0g
OmFub25PcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA8PCBjaGlsZFZh
ck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFuZAorICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRh
cHRvci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBh
ZGFwdG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSAr
ICIpIikKKyAgICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3IuYWNjZXB0T3BlcmFu
ZHMoIiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIG91
dHAucHV0cygiICAgICYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1
bWVudHMuam9pbigiLCAiKSArICIpKSIpCisgICAgICAgICAgICBvdXRwLnB1dHMgIiAgICByZXR1
cm47IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgIH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21h
dGNoZXIubmFtZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKwor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUg
IkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitib29sIGF0dGVtcHRBc3NpZ25tZW50KAorICAg
IFN0YWNrU2xvdCogc2xvdCwgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25zdCBWZWN0b3I8U3Rh
Y2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6
IG90aGVyU0xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChvZmZzZXRGcm9tRlAgKyBzbG90LT5i
eXRlU2l6ZSgpID49IG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGlmIChvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpICsgb3RoZXJT
bG90LT5ieXRlU2l6ZSgpID49IG9mZnNldEZyb21GUCkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAob2Zmc2V0RnJvbUZQKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBhc3NpZ24oU3RhY2tTbG90KiBzbG90LCBjb25zdCBW
ZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgaWYgKGF0dGVtcHRBc3NpZ25t
ZW50KHNsb3QsIC1zbG90LT5ieXRlU2l6ZSgpLCBvdGhlclNsb3RzKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU0xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAg
ICAgaWYgKG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkKKyAgICAgICAgICAgICYmIGF0dGVtcHRB
c3NpZ25tZW50KG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgLSBzbG90LT5ieXRlU2l6ZSgpKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0
YWNrKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxv
Y2F0ZVN0YWNrIik7CisKKyAgICAvLyBBbGxvY2F0ZSBhbGwgb2YgdGhlIGxvY2tlZCBzbG90cyBp
biBvcmRlci4gVGhpcyBpcyBraW5kIG9mIGEgY3JhenkgYWxnb3JpdGhtIHRvIGFsbG93IGZvcgor
ICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBvZiBzdGFjayBzbG90cyBiZWluZyBhc3NpZ25lZCBmcmFt
ZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVuIGdldCBoZXJlLgorICAgIEFTU0VSVCghY29kZS5mcmFt
ZVNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90
czsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0OworICAg
IGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgc3dp
dGNoIChzbG90LT5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6
CisgICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICAgICAg
YXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBsb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAg
ICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgICAgIC8vIEFz
IGEgbWF0dGVyIG9mIHNhbml0eSwgdW5hc3NpZ24gdGhpcy4gTWF5YmUgaXQgd291bGQgYmUgZ29v
ZCB0byBldmVuIGhhdmUgYQorICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gcnVsZSB0aGF0
IHRoaXMgY2Fubm90IGhhcHBlbi4KKyAgICAgICAgICAgICAgICBzbG90LT5zZXRPZmZzZXRGcm9t
RlAoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICAvLyBUaGlzIGlzIGEgZmFpcmx5IGV4cGVuc2l2ZSBsb29wLCBidXQgaXQncyBPSyBi
ZWNhdXNlIHdlJ2xsIHVzdWFsbHkgb25seSBoYXZlIGEgaGFuZGZ1bCBvZgorICAgIC8vIGxvY2tl
ZCBzdGFjayBzbG90cy4KKyAgICB3aGlsZSAoIWxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gbG9ja2VkU3RhY2tTbG90c1dvcmts
aXN0LnRha2VMYXN0KCk7CisgICAgICAgIGFzc2lnbihzbG90LCBhc3NpZ25lZExvY2tlZFN0YWNr
U2xvdHMpOworICAgICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOwor
ICAgIH0KKworICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIGFub255bW91cyBzbG90cy4gTm90ZSB0
aGF0IHRoZW9yZXRpY2FsbHkgd2Ugc2hvdWxkIGRvIGFuIGVzY2FwZSBhbmFseXNpcworICAgIC8v
IGhlcmUuIEJ1dCwgY3VycmVudGx5IEFpciBkb2Vzbid0IHN1cHBvcnQgZXNjYXBpbmcgYSBTdGFj
a1Nsb3QhCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBlc2NhcGluZyBhIFN0YWNrU2xv
dCBhbmQgYWRkIGVzY2FwZSBhbmFseXNpcyB0byBhbGxvY2F0ZVN0YWNrKCkuCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQzMAorCisgICAgYXV0byBp
c1JlbGV2YW50ID0gW10gKGNvbnN0IEFyZyYgYXJnKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJu
IGFyZy5pc1N0YWNrKCkgJiYgYXJnLnN0YWNrU2xvdCgpLT5raW5kKCkgPT0gU3RhY2tTbG90S2lu
ZDo6QW5vbnltb3VzOworICAgIH07CisKKyAgICBMaXZlbmVzczxBcmc+IGxpdmVuZXNzKGNvZGUp
OworICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJl
bmNlKGNvZGUuc2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CisKKyAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxBcmc+OjpM
b2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgYXV0byBpbnRl
cmZlcmUgPSBbJl0gKCkgeworICAgICAgICAgICAgLy8gRm9ybSBhIGNsaXF1ZSBvZiBzdGFjayBz
bG90cyB0aGF0IGludGVyZmVyZS4gRmlyc3QgZmluZCB0aGUgbGlzdCBvZiBzdGFjayBzbG90cwor
ICAgICAgICAgICAgLy8gdGhhdCBhcmUgbGl2ZSByaWdodCBub3cuCisgICAgICAgICAgICBzbG90
cy5yZXNpemUoMCk7CisgICAgICAgICAgICBmb3IgKEFyZyBhcmcgOiBsb2NhbENhbGMubGl2ZSgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUmVtZXZhbnQoYXJnKSkKKyAgICAgICAgICAgICAg
ICAgICAgc2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2xvdHMuc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgICAgICAgICBTdGFja1Nsb3QqIG91dGVyID0gc2xvdHNbaV07CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBzbG90cy5zaXplKCk7ICsraikgeworICAg
ICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIGlubmVyID0gc2xvdHNbaV07CisKKyAgICAgICAg
ICAgICAgICAgICAgU3RhY2tTbG90KiBmaXJzdCA9IG91dGVyOworICAgICAgICAgICAgICAgICAg
ICBTdGFja1Nsb3QqIHNlY29uZCA9IGlubmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoZmly
c3QtPmluZGV4KCkgPiBzZWNvbmQtPmluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBz
dGQ6OnN3YXAoZmlyc3QsIHNlY29uZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJl
bmNlW2ZpcnN0XS5hZGQoc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNl
W3NlY29uZF0uYWRkKGZpcnN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBpbnRlcmZlcmUobG9jYWxDYWxjLmxpdmUoKSk7CisgICAgICAg
IAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJ
bmRleC0tOykgeworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJ
bmRleCkpOworICAgICAgICAgICAgaW50ZXJmZXJlKGxvY2FsQ2FsYy5saXZlKCkpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0
cyBoZWFydCB0aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKKyAgICAv
LyBTdGFja1Nsb3Qgd2UganVzdCB3YW50IHRvIGZpbmQgdGhlIG9mZnNldEZyb21GUCB0aGF0IGlz
IGNsb3Nlc3QgdG8gemVybyB3aGlsZSBlbnN1cmluZyBubworICAgIC8vIG92ZXJsYXAgd2l0aCBv
dGhlciBTdGFja1Nsb3RzIHRoYXQgdGhpcyBvdmVybGFwcyB3aXRoLgorICAgIHVuc2lnbmVkIGZy
YW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBmcmFtZVNpemVGb3JMb2NrZWQ7CisgICAgVmVjdG9yPFN0
YWNrU2xvdCo+IG90aGVyU2xvdHM7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0
YWNrU2xvdHMoKSkgeworICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAg
ICAgICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0LgorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgcG9zc2libGUgZmlyc3QgZml0IG9mZnNl
dHMgYXJlOgorICAgICAgICAvLyAtIGZyYW1lU2l6ZUZvckxvY2tlZCAtIHNsb3QtPmJ5dGVTaXpl
KCkKKyAgICAgICAgLy8gLSBmb3IgYWxsIHNsb3QyIGluIGludGVyZmVyZW5jZVtzbG90XSwgc2xv
dDItPm9mZnNldEZyb21GUCgpIC0gc2xvdC0+Ynl0ZVNpemUoKS4KKyAgICAgICAgLy8gV2UgbmVl
ZCB0byBmaW5kIG9uZSBvZiB0aG9zZSB0aGF0IGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggYW55b25l
LgorCisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGludGVyZmVyaW5nU2xvdHMgPSBpbnRl
cmZlcmVuY2Vbc2xvdF07CisgICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkTG9ja2Vk
U3RhY2tTbG90cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Nsb3RzLnNpemUoKSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOyAr
K2kpCisgICAgICAgICAgICBvdGhlclNsb3RzW2ldID0gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3Rz
W2ldOworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xv
dHMuc2l6ZSgpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogaW50ZXJmZXJp
bmdTbG90cykKKyAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dEluZGV4KytdID0gb3RoZXJTbG90
OworCisgICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKKyAgICB9CisKKyAgICAvLyBG
aWd1cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFjayBzbG90cy4KKyAg
ICB1bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsKKyAgICBmb3IgKFN0YWNrU2xv
dCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKQorICAgICAgICBmcmFtZVNpemVGb3JTdGFja1Ns
b3RzID0gc3RkOjptYXgoZnJhbWVTaXplRm9yU3RhY2tTbG90cywgLXNsb3QtPm9mZnNldEZyb21G
UCgpKTsKKworICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRlZHVjZSBob3cgbXVjaCBhcmd1bWVudCBh
cmVhIHdlIG5lZWQuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAg
ICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgYXJn
IDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZy5pc0NhbGxBcmcoKSkgewor
ICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBhc3N1bWUgdGhhdCB3ZSB1c2UgOCBi
eXRlcyBvZiB0aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mgbm90CisgICAgICAgICAgICAgICAgICAg
IC8vIHN1Y2ggYW4gYXdlc29tZSBhc3N1bXB0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NAorICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLm9mZnNldCgpID49IDApOworICAgICAgICAgICAg
ICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoYXJnLm9mZnNldCgpICsgOCk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAg
Y29kZS5zZXRGcmFtZVNpemUoZnJhbWVTaXplRm9yU3RhY2tTbG90cyArIGNvZGUuY2FsbEFyZ0Fy
ZWFTaXplKCkpOworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBjb2RlIHRvIHVzZSBB
ZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3NsZXNzCisgICAgLy8g
dHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tTbG90cyBhcnJheSB0
byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAvLyBvZmZzZXQtZnJvbS1GUCBy
ZWZlcnMgdG8uCisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAg
ICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcg
OiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGFyZyA9
IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgYXJnLnN0YWNr
U2xvdCgpLT5vZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAgICAgICBhcmcg
PSBBcmc6OmFkZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJh
bWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVN0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyQWxsb2NhdGVTdGFja19oCisjZGVmaW5lIEFpckFsbG9jYXRlU3RhY2tfaAorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7
CisKKy8vIFRoaXMgYWxsb2NhdGVzIFN0YWNrU2xvdHMgdG8gcGxhY2VzIG9uIHRoZSBzdGFjay4g
SXQgZmlyc3QgYWxsb2NhdGVzIHRoZSBwaW5uZWQgb25lcyBpbiBpbmRleAorLy8gb3JkZXIgYW5k
IHRoZW4gaXQgYWxsb2NhdGVzIHRoZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4KKwordm9pZCBhbGxv
Y2F0ZVN0YWNrKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gQWlyQWxsb2NhdGVTdGFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyQXJnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQu
cHJpbnQodG1wKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91
dC5wcmludCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tNjQ6
CisgICAgICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91
dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGlmIChvZmZzZXQoKSkK
KyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIs
IGJhc2UoKSwgIiwiLCBpbmRleCgpKTsKKyAgICAgICAgaWYgKHNjYWxlKCkgIT0gMSkKKyAgICAg
ICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOworICAgICAgICBvdXQucHJpbnQoIikiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGlmIChvZmZzZXQoKSkK
KyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIigiLCBw
b2ludGVyRHVtcChzdGFja1Nsb3QoKSksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENhbGxBcmc6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChv
ZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIihjYWxsQXJnKSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZWxhdGlvbmFsQ29uZGl0
aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBvdXQu
cHJpbnQoYXNSZXN1bHRDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNw
ZWNpYWw6CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFy
Z19oCisjZGVmaW5lIEFpckFyZ19oCisKKyNpbmNsdWRlICJBaXJUbXAuaCIKKyNpbmNsdWRlICJC
M1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBTcGVjaWFsOworY2xhc3MgU3RhY2tTbG90OworCisvLyBUaGlzIGNsYXNzIG5h
bWUgaXMgYWxzbyBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2lsbCBzYXkgaXQgYSBs
b3QuIFlvdSdsbCBzZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjppbW0oNSksIEFyZzo6
YWRkcih0aGluZywgYmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6CisgICAgLy8gVGhl
c2UgZW51bSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2UgaGF2ZSB0
byBtZW50aW9uIHRoZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90IHsKKyAgICAgICAg
VG1wLAorICAgICAgICBJbW0sCisgICAgICAgIEltbTY0LAorICAgICAgICBBZGRyLAorICAgICAg
ICBTdGFjaywKKyAgICAgICAgQ2FsbEFyZywKKyAgICAgICAgSW5kZXgsCisgICAgICAgIFJlbENv
bmQsCisgICAgICAgIFJlc0NvbmQsCisgICAgICAgIFNwZWNpYWwKKyAgICB9OworCisgICAgZW51
bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAgVXNlLAorICAgICAgICBEZWYsCisgICAgICAgIFVz
ZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5cGUgOiBpbnQ4X3QgeworICAgICAgICBHUCwKKyAg
ICAgICAgRlAKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0g
MjsKKworICAgIHN0YXRpYyBib29sIGlzVXNlKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlZihS
b2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBV
c2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAg
ICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZvckIzVHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsK
KyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIEdQOwor
ICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBGUDsKKyAgICAgICAgfQor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEdQOworICAgIH0K
KworICAgIEFyZygpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAg
ICAgIDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisK
KyAgICBzdGF0aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBpbW02NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
dmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBh
ZGRyKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBBZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAw
KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0
YWNrOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
bHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmco
aW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRT
Y2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAg
ICAgICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
Y2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNj
YWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAg
ICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgo
QWlyOjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAg
ICAgQVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2Nh
bGUpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4
OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXgg
PSBpbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihz
Y2FsZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRp
b24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
UmVzQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNp
YWwqIHNwZWNpYWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0
PGludHB0cl90PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5k
ID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQor
ICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBt
X3NjYWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJ
bW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQor
CisgICAgYm9vbCBpc0ltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gSW1tNjQ7CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAg
IGJvb2wgaXNDYWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
Q2FsbEFyZzsKKyAgICB9CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQor
CisgICAgYm9vbCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBSZXNDb25kOworICAgIH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlz
QWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygp
OworICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAg
aW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IElt
bSB8fCBraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
CisgICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkg
PT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGludDMyX3Qg
b2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9zY2FsZSk7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5k
ZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpOworICAg
IH0KKworICAgIFN0YWNrU2xvdCogc3RhY2tTbG90KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0YWNr
U2xvdCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBpbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1f
aW5kZXg7CisgICAgfQorCisgICAgdW5zaWduZWQgc2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX3NjYWxlOworICAg
IH0KKworICAgIHVuc2lnbmVkIGxvZ1NjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBsb2dTY2FsZShzY2FsZSgpKTsKKyAgICB9CisKKyAgICBBaXI6OlNwZWNpYWwqIHNwZWNpYWwo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTcGVjaWFsKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBaXI6OlNwZWNpYWwqPihtX29mZnNldCk7CisgICAgfQor
CisgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgp
ICYmIHRtcCgpLmlzR1AoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBUbXAoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAK
KyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRo
YXQgcmVxdWlyZXMgYSBHUCB2YWx1ZS4KKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2Ug
SW1tNjQ6CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAg
Y2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBSZWxD
b25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVy
biBpc0dQVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBpZiB0aGlz
IEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2YWx1ZS4K
KyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsK
KyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBS
ZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBC
YXNlOgorICAgICAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAg
ICAgICBjYXNlIEltbTY0OiAvLyBZZXMsIHdlIGFsbG93IEltbTY0IGFzIGEgZG91YmxlIGltbWVk
aWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFja21hcHMuCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNG
UFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBoYXNUeXBlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAg
ICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHR5cGUgaXMgYW1iaWd1b3VzIGZvciBzb21lIGFy
ZyBraW5kcy4gQ2FsbCB3aXRoIGNhcmUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0dQKCkgPyBHUCA6IEZQOworICAgIH0KKworICAgIGJvb2wgaXNUeXBl
KFR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIGlzR1AoKTsKKyAgICAgICAgY2FzZSBGUDoK
KyAgICAgICAgICAgIHJldHVybiBpc0ZQKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29s
IGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlz
R1BSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gdG1wKCkuZ3ByKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQUigpOworICAgIH0KKworICAg
IEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwcigpOwor
ICAgIH0KKyAgICAKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBpc1RtcCgpICYmIHRtcCgpLmlzUmVnKCk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkucmVnKCk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3BUbXBJ
bmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIHRtcCgpLmZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkudG1wSW5kZXgo
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9y
RWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRj
aCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICBjYXNlIEFkZHI6CisgICAg
ICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGZ1bmN0
b3IobV9pbmRleCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzbWFydCBl
bm91Z2ggdG8ga25vdyB0aGF0IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxl
IHdpbGwgdXNlIGl0cworICAgIC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBs
ZSwgdGhpczoKKyAgICAvLworICAgIC8vIG1vdiAlcmF4LCAoJXJjeCkKKyAgICAvLworICAgIC8v
IFRoaXMgZGVmcyAoJXJjeCkgYnV0IHVzZXMgJXJjeC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChSb2xlIGFyZ1JvbGUsIFR5cGUgYXJnVHlwZSwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7
CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIGFyZ1JvbGUs
IGFyZ1R5cGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAg
ICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOwor
ICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4LCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdXQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOwor
ICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NCBhc1RydXN0ZWRJbW02NCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW02
NCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQocG9pbnRl
clZhbHVlKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mg
YXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0FkZHIoKSk7CisgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIHN0YXRpY19j
YXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbmRl
eCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAg
ICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1i
bGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90
PihtX29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNSZWxDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGFzUmVzdWx0Q29uZGl0aW9uKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc1Jlc0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50NjRf
dCBtX29mZnNldCB7IDAgfTsKKyAgICBLaW5kIG1fa2luZCB7IEltbSB9OworICAgIGludDMyX3Qg
bV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9pbmRl
eDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFp
ckFyZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNp
Y0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
VXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCit2b2lkIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQor
eworICAgIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNC
bG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJl
bW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBs
YWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAg
QjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNC
bG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1w
UHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOwor
ICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBpbnN0LCAiXG4iKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVm
aW5lIEFpckJhc2ljQmxvY2tfaAorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0
Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKK2Ns
YXNzIEluc2VydGlvblNldDsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiIyI7CisKKyAgICB0eXBl
ZGVmIFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2Nr
KiwgMj4gQWRqYWNlbmN5TGlzdDsKKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgY29u
c3QgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2luc3RzW2luZGV4XTsg
fQorICAgIEluc3QmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0K
KworICAgIGNvbnN0IEluc3QmIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsg
fQorICAgIEluc3QmIGxhc3QoKSB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisg
ICAgeworICAgICAgICBtX2luc3RzLmFwcGVuZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFw
cGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBtX2luc3RzLmFw
cGVuZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9
CisKKyAgICAvLyBUaGUgIjAiIGNhc2UgaXMgdGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBq
dW1wcywgc28gdGhlICJ0aGVuIiBjYXNlLiBUaGUgIjEiIGNhc2UgaXMgdGhlCisgICAgLy8gImVs
c2UiIGNhc2UsIGFuZCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZmFsbC10aHJvdWdoIG9mIGEg
Y29uZGl0aW9uYWwgYnJhbmNoLgorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7
IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9Cisg
ICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNj
ZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIHN1Y2Nlc3NvcnMoKSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgQWRqYWNlbmN5TGlzdCYg
c3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKworICAgIHVuc2ln
bmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUo
KTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVj
ZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
cHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIEFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycygp
IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorCisgICAgdm9pZCBhZGRQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKik7CisgICAgdm9pZCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
Kik7CisgICAgdm9pZCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNC
bG9jayogdG8pOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9p
ZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBDb2RlOworICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAgCisgICAgQmFz
aWNCbG9jayh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICBJbnN0TGlzdCBtX2luc3RzOworICAgIEFkamFjZW5jeUxpc3QgbV9zdWNjZXNz
b3JzOworICAgIEFkamFjZW5jeUxpc3QgbV9wcmVkZWNlc3NvcnM7Cit9OworCitjbGFzcyBEZWVw
QmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Js
b2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICht
X2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVt
cChCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJs
b2NrKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
QWlyQmFzaWNCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q0NhbGxTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0NDYWxsU3BlY2lh
bDo6Q0NhbGxTcGVjaWFsKCkKK3sKKyAgICBtX2Nsb2JiZXJlZFJlZ3MgPSBSZWdpc3RlclNldDo6
YWxsUmVnaXN0ZXJzKCk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6
OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVy
U2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5l
eGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCitDQ2FsbFNw
ZWNpYWw6On5DQ2FsbFNwZWNpYWwoKQoreworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6Zm9yRWFj
aEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNr
PiYgY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OlVzZSwgQXJn
OjpHUCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXpl
KCk7ICsraSkgeworICAgICAgICAvLyBGb3IgdGhlIHR5cGUsIHdlIGNhbiBqdXN0IHF1ZXJ5IHRo
ZSBhcmcncyB0eXBlLiBUaGUgYXJnIHdpbGwgaGF2ZSBhIHR5cGUsIGJlY2F1c2Ugd2UKKyAgICAg
ICAgLy8gcmVxdWlyZSB0aGVzZSBhcmdzIHRvIGJlIGFyZ3VtZW50IHJlZ2lzdGVycy4KKyAgICAg
ICAgY2FsbGJhY2soaW5zdC5hcmdzW2ldLCBBcmc6OlVzZSwgaW5zdC5hcmdzW2ldLnR5cGUoKSk7
CisgICAgfQorfQorCitib29sIENDYWxsU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQorewor
ICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgc3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAg
ICAgICAgaWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICBpZiAoc2l6ZW9m
KHZvaWQqKSA9PSA4KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjYXNlIEFyZzo6VG1wOgorICAgIGNhc2UgQXJnOjpBZGRyOgorICAgIGNhc2UgQXJnOjpT
dGFjazoKKyAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaW5zdC5hcmdzWzFd
LmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWluc3QuYXJnc1tp
XS5pc1JlZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChpbnN0
LmFyZ3NbaV0gPT0gVG1wKHNjcmF0Y2hSZWdpc3RlcikpCisgICAgICAgICAgICByZXR1cm4gIGZh
bHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmFk
bWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICAvLyBBcmcgMSBjYW4g
YmUgYSBzdGFjayBhZGRyZXNzIGZvciBzdXJlLgorICAgIGlmIChhcmdJbmRleCA9PSAxKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ0Nh
bGxTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYp
Cit7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6OmdlbmVyYXRlKEluc3Qm
IGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAgc3dp
dGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAgICBjYXNl
IEFyZzo6SW1tUHRyOgorICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoaW5zdC5hcmdzWzFdLnBvaW50ZXJWYWx1ZSgpKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAg
ICAgaml0LmNhbGwoc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
cmc6OlRtcDoKKyAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzWzFdLmdwcigpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sx
XS5hc0FkZHJlc3MoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBDQ2Fs
bFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncygpCit7CisgICAgcmV0dXJuIG1fY2xvYmJlcmVk
UmVnczsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJDQ2FsbCIpOworfQorCit2b2lkIENDYWxsU3BlY2lh
bDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJmdW5jdGlvbiBjYWxsIHRoYXQgdXNlcyB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIik7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxTcGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxT
cGVjaWFsX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCisvLyBVc2UgdGhpcyBzcGVjaWFsIGZvciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFyZyAw
IGlzIG9mIGNvdXJzZSBhIFNwZWNpYWwgYXJnIHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0NhbGxT
cGVjaWFsIG9iamVjdC4gQXJnIDEgaXMgdGhlIGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJbW1Q
dHIsIGEgcmVnaXN0ZXIsIG9yIGFuIGFkZHJlc3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3MgYXJl
IGp1c3QgdGhlIHNldCBvZiBhcmd1bWVudCByZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwuIEZv
ciBhcmd1bWVudHMgdGhhdCBnbyB0bworLy8gdGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0aGUg
Z3J1bnQgd29yayBvZiBkb2luZyB0aG9zZSBzdGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBvbmx5
IHJlYXNvbiB3aHkKKy8vIHdlIHNwZWNpZnkgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBhcmd1
bWVudHMgdG8gYSBjYWxsIGlzIHNvIHRoYXQgdGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBzZWUK
Ky8vIHRoYXQgdGhleSBnZXQgdXNlZCBoZXJlLiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRvbWFn
aWNhbGx5IHJlcG9ydCBhbGwgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2VkIGJl
Y2F1c2UgaWYgd2UgaGFkIGEgY2FsbCB0aGF0IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhleSdk
IGFwcGVhciB0byBiZSBsaXZlIHVudGlsIHNvbWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhlIHBy
b2xvZ3VlLCB3aGljaGV2ZXIgaGFwcGVuZWQgc29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNpYWwg
OiBwdWJsaWMgU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAgfkND
YWxsU3BlY2lhbCgpOworCisgICAgLy8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBw
YXNzIGFyZ3VtZW50cy4gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBu
b3QKKyAgICAvLyB1c2VkIGZvciBhcmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9u
LiBCeSB0aGUgd2F5LCB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8g
dGhpcyBzcGVjaWFsIHRvIGJlIHNwZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyBzY3JhdGNoUmVnaXN0ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwLgorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6
RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0
ZXJTZXQmKSBvdmVycmlkZTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYs
IENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVw
RHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBS
ZWdpc3RlclNldCBtX2Nsb2JiZXJlZFJlZ3M7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJDQ2FsbFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKworI2luY2x1ZGUgIkND
YWxsU3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK0NvZGU6OkNvZGUoKQoreworfQorCitDb2RlOjp+Q29kZSgpCit7Cit9CisKK0Jh
c2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNC
bG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2sobV9ibG9ja3Muc2l6ZSgpKSk7CisgICAgQmFzaWNC
bG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92
ZShibG9jaykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0YWNrU2xvdCogQ29kZTo6YWRk
U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xv
dFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5l
dyBTdGFja1Nsb3QoYnl0ZVNpemUsIG1fc3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7
CisgICAgU3RhY2tTbG90KiByZXN1bHQgPSBzbG90LmdldCgpOworICAgIG1fc3RhY2tTbG90cy5h
cHBlbmQoV1RGOjptb3ZlKHNsb3QpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTcGVjaWFs
KiBDb2RlOjphZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQorewor
ICAgIG1fc3BlY2lhbHMuYXBwZW5kKFdURjo6bW92ZShzcGVjaWFsKSk7Cit9CisKK0NDYWxsU3Bl
Y2lhbCogQ29kZTo6Y0NhbGxTcGVjaWFsKCkKK3sKKyAgICBpZiAoIW1fY0NhbGxTcGVjaWFsKSB7
CisgICAgICAgIG1fY0NhbGxTcGVjaWFsID0gc3RhdGljX2Nhc3Q8Q0NhbGxTcGVjaWFsKj4oCisg
ICAgICAgICAgICBhZGRTcGVjaWFsKHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxTcGVjaWFsPigpKSk7
CisgICAgfQorCisgICAgcmV0dXJuIG1fY0NhbGxTcGVjaWFsOworfQorCit2b2lkIENvZGU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworICAgIGlmIChu
dW1TdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayBzbG90czpcbiIpOwor
ICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IHN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAg
IG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNsb3QpLCAiXG4iKTsKKyAgICB9CisgICAgaWYg
KG51bVNwZWNpYWxzKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsczpcbiIpOworICAg
ICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFscygpKQorICAgICAgICAgICAgb3V0
LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCksICJcbiIpOworICAgIH0KKyAgICBvdXQu
cHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCAiXG4iKTsKKyAgICBvdXQucHJpbnQo
IkNhbGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIpOworICAgIG91
dC5wcmludCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJDb2RlX2gKKyNkZWZpbmUgQWlyQ29kZV9oCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2lu
Y2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBDQ2FsbFNwZWNpYWw7CitjbGFzcyBQcm9jZWR1cmU7CisKK25hbWVz
cGFjZSBBaXIgeworCisvLyBUaGlzIGlzIGFuIElSIHRoYXQgaXMgdmVyeSBjbG9zZSB0byB0aGUg
YmFyZSBtZXRhbC4gSXQgcmVxdWlyZXMgYWJvdXQgNDB4IG1vcmUgYnl0ZXMgdGhhbiB0aGUKKy8v
IGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgLSBmb3IgZXhhbXBsZSBpZiB5b3UncmUgZ2VuZXJhdGlu
ZyAxTUIgb2YgbWFjaGluZSBjb2RlLCB5b3UgbmVlZCBhYm91dAorLy8gNDBNQiBvZiBBaXIuCisK
K2NsYXNzIENvZGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvZGUpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENvZGUoKTsKKyAgICB+Q29kZSgpOwor
CisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soKTsKKworICAgIFN0YWNrU2xvdCogYWRkU3RhY2tT
bG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBu
dWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNp
YWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8gbWFrZSBhIEMg
Y2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxsU3BlY2lhbCgpOworCisgICAgVG1wIG5ld1Rt
cChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpncFRtcEZvckluZGV4KG1f
bnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1cm4g
VG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBzKyspOworICAgICAgICB9CisgICAgfQorCisg
ICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gbV9u
dW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJldHVybiBtX251
bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNhbGxBcmdBcmVhU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9CisKKyAgICAvLyBZb3UgY2Fu
IGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHRvIGZvcmNlIGEgbWluaW11bSBjYWxs
IGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKHVuc2lnbmVk
IHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSA9IHN0ZDo6bWF4KG1fY2Fs
bEFyZ0FyZWFTaXplLCBzaXplKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8gT25seSBwaGFzZXMgdGhhdCBk
byBzdGFjayBhbGxvY2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBDdXJyZW50bHksIG9u
bHkKKyAgICAvLyBBaXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRoaXMuCisgICAgdm9pZCBzZXRG
cmFtZVNpemUodW5zaWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAgICAgICAgbV9mcmFtZVNpemUg
PSBmcmFtZVNpemU7CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNh
dmVSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2Nr
KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0K
KworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6
CisgICAgICAgICAgICA6IG1fY29kZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDAp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKENvZGUmIGNvZGUsIHVu
c2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX2NvZGUoJmNvZGUpCisgICAgICAgICAgICAs
IG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxv
Y2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvZGUtPmF0
KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOwor
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fY29kZS0+c2l6ZSgpICYmICFtX2Nv
ZGUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgcmV0
dXJuIGluZXg7CisgICAgICAgIH0KKworICAgICAgICBDb2RlKiBtX2NvZGU7CisgICAgICAgIHVu
c2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgY2xhc3MgU3RhY2tT
bG90c0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3RhY2tTbG90c0NvbGxlY3Rp
b24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2NvZGUubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIGF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzW2ldLmdldCgpOyB9
CisgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBw
dWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxl
Y3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3RhY2tTbG90
c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChp
bmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RhY2tT
bG90KiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9p
bmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5t
X2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlv
bjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkp
OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsK
KworICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHN0YWNrU2xvdHMoKSBjb25zdCB7IHJldHVybiBT
dGFja1Nsb3RzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKKyAgICBjbGFzcyBTcGVjaWFsc0Nv
bGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3BlY2lhbHNDb2xsZWN0aW9uKGNvbnN0
IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1f
c3BlY2lhbHMuc2l6ZSgpOyB9CisgICAgICAgIFNwZWNpYWwqIGF0KHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFsc1tpXS5nZXQoKTsgfQorICAgICAgICBTcGVj
aWFsKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7
IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQor
ICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24mIGNvbGxl
Y3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZj
b2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3BlY2lhbCogb3BlcmF0b3IqKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2lu
ZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKyso
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNv
bnN0IFNwZWNpYWxzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWdu
ZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAgU3BlY2lhbHNDb2xsZWN0
aW9uIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1cm4gU3BlY2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsg
fQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+
IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBt
X2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxz
OworICAgIENDYWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CisgICAgdW5z
aWduZWQgbV9udW1HUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07
CisgICAgdW5zaWduZWQgbV9mcmFtZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9jYWxsQXJn
QXJlYVNpemUgeyAwIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVn
aXN0ZXJzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gQWlyQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKworI2luY2x1ZGUgIkFpckFsbG9jYXRlU3Rh
Y2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKyNpbmNsdWRlICJBaXJWYWxp
ZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9p
ZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBpZiAoc2hv
dWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShjb2RlLCAiaW5pdGlhbCIpOworCisg
ICAgaWYgKHNob3VsZER1bXBJUigpKSB7CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgYWlyOlxu
Iik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB3aGVy
ZSB3ZSBydW4gb3VyIG9wdGltaXphdGlvbnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KKyAgICAvLyBG
SVhNRTogQWRkIEFpciBvcHRpbWl6YXRpb25zLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTYKKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2Ugd291
bGQgaGF2ZSBhIHJlYWwgcmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGVuLCB3ZSBjb3VsZCB1c2Ugc3Bp
bGxFdmVyeXRoaW5nKCkKKyAgICAvLyBpbiBwbGFjZSBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9y
IG9ubHkgZm9yIHRlc3RpbmcuCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA0NTcKKyAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7CisKKyAg
ICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1w
bGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KKyAgICAvLyBkb2VzIHRoaW5n
cyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMg
dGhlbS4KKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKKworICAgIC8vIFRoaXMgdHVybnMg
YWxsIFN0YWNrIGFuZCBDYWxsQXJnIEFyZ3MgaW50byBBZGRyIGFyZ3MgdGhhdCB1c2UgdGhlIGZy
YW1lIHBvaW50ZXIuIEl0IGRvZXMKKyAgICAvLyB0aGlzIGJ5IGZpcnN0LWZpdCBhbGxvY2F0aW5n
IHN0YWNrIHNsb3RzLiBJdCBzaG91bGQgYmUgcHJldHR5IGRhcm4gY2xvc2UgdG8gb3B0aW1hbCwg
c28gd2UKKyAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHZlcnkgbXVj
aC4KKyAgICBhbGxvY2F0ZVN0YWNrKGNvZGUpOworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIo
KSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgImZpbmFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVt
cElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7Cisg
ICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJh
dGUgY29kZS4KKyAgICAKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5lcmF0ZV9oCisjZGVmaW5lIEFpckdlbmVy
YXRlX2gKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgdGFrZXMg
YW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0
aW9uYWxseSBoYXNuJ3QgaGFkIGFueQorLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBi
b3RoIG9mIHRob3NlIHRoaW5ncywgYW5kIHRoZW4gZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRo
ZSBnaXZlbgorLy8gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2Fs
bCBjYWxsYmFja3MgaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMKKy8vIGdlbmVyYXRpbmcu
Cit2b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5lcmF0aW9u
Q29udGV4dF9oCisjZGVmaW5lIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKworI2luY2x1ZGUgPHd0
Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0IHsKKyAgICB0eXBlZGVmIHZvaWQg
TGF0ZVBhdGhGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworICAg
IHR5cGVkZWYgU2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKKworICAgIFZl
Y3RvcjxSZWZQdHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7Cit9OworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKworI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJB
aXJQaGFzZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKwordm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJiBjb2RlKQoreworICAgIFBo
YXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiaGFuZGxlQ2FsbGVlU2F2ZXMiKTsKKworICAgIFJl
Z2lzdGVyU2V0IHVzZWRDYWxsZWVTYXZlczsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEF0IGZpcnN0IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2Vk
IHJlZ3MuCisgICAgICAgICAgICAgICAgICAgIHVzZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygp
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3
ZSBmaWx0ZXIgdG8gcmVhbGx5IGdldCB0aGUgY2FsbGVlIHNhdmVzLgorICAgIHVzZWRDYWxsZWVT
YXZlcy5maWx0ZXIoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKKyAgICBj
b2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSA9IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KHVzZWRDYWxs
ZWVTYXZlcyk7CisKKyAgICBzaXplX3QgYnl0ZVNpemUgPSAwOworICAgIGNvZGUuY2FsbGVlU2F2
ZVJlZ2lzdGVycygpLmZvckVhY2goCisgICAgICAgIFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dCYgZW50cnkpIHsKKyAgICAgICAgICAgIGJ5dGVTaXplID0gc3RkOjptYXgoLWVudHJ5Lm9mZnNl
dCgpLCBieXRlU2l6ZSk7CisgICAgICAgIH0pOworCisgICAgU3RhY2tTbG90KiBzYXZlc0FyZWEg
PSBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAg
ICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUgYWxyZWFkeSBwaW5u
ZWQgYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCisgICAgLy8gYXJlYS4KKyAgICBzYXZl
c0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOworCisgICAgYXV0byBhcmdGb3IgPSBb
Jl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBBcmc6
OlN0YWNrKHNhdmVzQXJlYSwgZW50cnkub2Zmc2V0KCkgKyBieXRlU2l6ZSk7CisgICAgfTsKKwor
ICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgCisgICAgLy8gRmlyc3Qg
aW5zZXJ0IHNhdmluZyBjb2RlIGluIHRoZSBwcm9sb2d1ZS4KKyAgICBjb2RlLmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKS5mb3JFYWNoKAorICAgICAgICBbJl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQm
IGVudHJ5KSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgIDAsIGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgVG1wKGVudHJ5
LnJlZygpKSwgYXJnRm9yKGVudHJ5KSk7CisgICAgICAgIH0pOworICAgIGluc2VydGlvblNldC5l
eGVjdXRlKGNvZGVbMF0pOworCisgICAgLy8gTm93IGluc2VydCByZXN0b3JlIGNvZGUgYXQgZXBp
bG9ndWVzLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIElu
c3QmIGxhc3QgPSBibG9jay0+bGFzdCgpOworICAgICAgICBpZiAobGFzdC5vcGNvZGUoKSAhPSBS
ZXQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjb2RlLmNhbGxlZVNhdmVSZWdp
c3RlcnMoKS5mb3JFYWNoKAorICAgICAgICAgICAgWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0
JiBlbnRyeSkgeworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAg
ICAgICAgICAgICAgIGJsb2NrLT5zaXplKCkgLSAxLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92
ZSA6IE1vdmVEb3VibGUsCisgICAgICAgICAgICAgICAgICAgIGFyZ0ZvcihlbnRyeSksIFRtcChl
bnRyeS5yZWcoKSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorI2RlZmluZSBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
Q29kZTsKKworLy8gVGhpcyBwaGFzZSBpZGVudGlmaWVzIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBh
bmQgYWRkcyBjb2RlIHRvIHNhdmUvcmVzdG9yZSB0aGVtIGluIHRoZQorLy8gcHJvbG9ndWUvZXBp
bG9ndWUgdG8gdGhlIGNvZGUuIEl0J3MgYSBtYW5kYXRvcnkgcGhhc2UuCisKKy8vIEZJWE1FOiBJ
dCB3b3VsZCBiZSBjb29sIHRvIG1ha2UgdGhpcyBtb3JlIGludGVyYWN0aXZlIHdpdGggdGhlIEFp
ciBjbGllbnQgYW5kIGFsc28gbW9yZQorLy8gcG93ZXJmdWwuCisvLyBXZSBzaG91bGQgaGF2ZSBz
aHJpbmsgd3JhcHBpbmc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA0NTgKKy8vIFdlIHNob3VsZCBtYWtlIHRoaXMgaW50ZXJhY3Qgd2l0aCB0aGUgY2xpZW50OiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU5CisKK3ZvaWQgaGFu
ZGxlQ2FsbGVlU2F2ZXMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5z
ZXJ0aW9uU2V0LmgiCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnNlcnRpb25TZXQ6
OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgZXhlY3V0ZUluc2VydGlvbnMoYmxv
Y2stPm1faW5zdHMsIG1faW5zZXJ0aW9ucyk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRp
b25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5z
ZXJ0aW9uU2V0X2gKKyNkZWZpbmUgQWlySW5zZXJ0aW9uU2V0X2gKKworI2luY2x1ZGUgIkFpcklu
c3QuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIEJhc2ljQmxvY2s7CitjbGFzcyBDb2RlOworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPElu
c3Q+IEluc2VydGlvbjsKKworY2xhc3MgSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBJbnNl
cnRpb25TZXQoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAg
fQorCisgICAgQ29kZSYgY29kZSgpIHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYgaW5zZXJ0aW9uKQorICAg
IHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oaW5zZXJ0aW9u
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGluc2Vy
dEluc3Qoc2l6ZV90IGluZGV4LCBJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVuZElu
c2VydGlvbihJbnNlcnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBp
bnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAg
ICAgICBpbnNlcnRJbnN0KGluZGV4LCBJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykuLi4pKTsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitw
cml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2lu
c2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBBaXJJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckluc3QuaCIKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCit2b2lkIEluc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQob3Bjb2RlLCAiICIsIGxpc3REdW1wKGFyZ3MpLCAiICA7ICIsICpvcmln
aW4pOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBBaXJJbnN0X2gKKyNkZWZpbmUgQWlySW5zdF9oCisKKyNpbmNsdWRlICJBaXJBcmcuaCIK
KyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxs
SGVscGVyczsKKworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBB
aXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK3N0cnVjdCBJbnN0IHsKK3B1Ymxp
YzoKKyAgICB0eXBlZGVmIFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJbnN0KE9wY29k
ZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgICAgIDogb3JpZ2luKG9yaWdpbikKKyAgICAg
ICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdp
biwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzeyBhcmcs
IGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNv
ZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVl
KiBvcmlnaW4sIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzKGFyZ3Vt
ZW50cykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUp
CisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwg
QXJnTGlzdCYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzKFdURjo6bW92ZShhcmd1bWVudHMp
KQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAg
ICB7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3JzIGFsbCBhdm9pZCB1
c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBmb3IgdGhpbmdzIHRoYXQK
KyAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlmIHlvdSdyZSBjYXJy
eWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4geW91J3JlCisgICAgLy8gcHJvYmFibHkg
ZG9pbmcgaXQgd3JvbmcuCisKKyAgICAvLyBUaGlzIG9ubHkgd2Fsa3MgdGhvc2UgVG1wcyB0aGF0
IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCwgYW5kIGl0IGRvZXNuJ3QgdGVsbCB5b3UgdGhlaXIg
cm9sZQorICAgIC8vIG9yIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBmb3IgKEFyZyBhcmcgOiBhcmdzKQorICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0
KGZ1bmN0b3IpOworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCBFYWNoQXJnQ2FsbGJhY2soQXJn
JiwgQXJnOjpSb2xlLCBBcmc6OlR5cGUpOworICAgIAorICAgIC8vIENhbGxzIHRoZSBmdW5jdG9y
IHdpdGggKGFyZywgcm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQg
YnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOworCisg
ICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xlLCB0eXBlKS4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZ1JvbGUoCisgICAgICAgICAgICBb
Jl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAg
ICAgICAgICBhcmcuZm9yRWFjaFRtcChyb2xlLCB0eXBlLCBmdW5jdG9yKTsKKyAgICAgICAgICAg
IH0pOworICAgIH0KKworICAgIC8vIFRoaW5nIGNhbiBiZSBlaXRoZXIgQXJnIG9yIFRtcC4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZv
ckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYg
dGhpcyBpbnN0cnVjdGlvbiBoYXMgYSBTcGVjaWFsKi4gVGhpcyB1bmxvY2tzIHNvbWUgZXh0cmEg
ZnVuY3Rpb25hbGl0eS4KKyAgICBib29sIGhhc1NwZWNpYWwoKSBjb25zdDsKKworICAgIC8vIFJl
cG9ydHMgYW55IGFkZGl0aW9uYWwgcmVnaXN0ZXJzIGNsb2JiZXJlZCBieSB0aGlzIG9wZXJhdGlv
bi4gTm90ZSB0aGF0IGZvciBlZmZpY2llbmN5LAorICAgIC8vIGV4dHJhQ2xvYmJlcmVkUmVncygp
IG9ubHkgd29ya3MgaWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICBjb25zdCBSZWdp
c3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKCk7CisKKyAgICAvLyBVc2UgdGhpcyB0byByZXBv
cnQgd2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBkb25lIGp1c3QgYmVm
b3JlIGNvZGVnZW4uIE5vdGUKKyAgICAvLyB0aGF0IGZvciBlZmZpY2llbmN5LCByZXBvcnRVc2Vk
UmVnaXN0ZXJzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAg
IHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYpOworCisgICAgLy8g
SXMgdGhpcyBpbnN0cnVjdGlvbiBpbiBvbmUgb2YgdGhlIHZhbGlkIGZvcm1zIHJpZ2h0IG5vdz8g
VGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0
b3IucmIuCisgICAgYm9vbCBpc1ZhbGlkRm9ybSgpOworCisgICAgLy8gQXNzdW1pbmcgdGhpcyBp
bnN0cnVjdGlvbiBpcyBpbiBhIHZhbGlkIGZvcm0gcmlnaHQgbm93LCB3aWxsIGl0IHN0aWxsIGJl
IGluIG9uZSBvZiB0aGUgdmFsaWQKKyAgICAvLyBmb3JtcyBpZiB3ZSBwdXQgYW4gQWRkciByZWZl
cmVuY2luZyB0aGUgc3RhY2sgKG9yIGEgU3RhY2tTbG90IG9yIENhbGxBcmcsIG9mIGNvdXJzZSkg
aW4gdGhlCisgICAgLy8gZ2l2ZW4gaW5kZXg/IFNwaWxsaW5nIHVzZXMgdGhpczogaXQgd2Fsa3Mg
dGhlIGFyZ3MgYnkgaW5kZXggdG8gZmluZCBUbXBzIHRoYXQgbmVlZCBzcGlsbGluZzsKKyAgICAv
LyBpZiBpdCBmaW5kcyBvbmUsIGl0IGNhbGxzIHRoaXMgdG8gc2VlIGlmIGl0IGNhbiByZXBsYWNl
IHRoZSBBcmc6OlRtcCB3aXRoIGFuIEFyZzo6QWRkci4gSWYgaXQKKyAgICAvLyBmaW5kcyBhIG5v
bi1UbXAgQXJnLCB0aGVuIGl0IGNhbGxzIHRoYXQgQXJnJ3MgZm9yRWFjaFRtcCB0byBkbyBhIHJl
cGxhY2VtZW50IHRoYXQgd2F5LgorICAgIC8vCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhdXRv
LWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgYWRtaXRzU3RhY2so
dW5zaWduZWQgYXJnSW5kZXgpOworCisgICAgLy8gR2VuZXJhdGUgc29tZSBjb2RlIGZvciB0aGlz
IGluc3RydWN0aW9uLiBUaGlzIGlzLCBsaWtlLCBsaXRlcmFsbHkgb3VyIGJhY2tlbmQuIElmIHRo
aXMgaXMgdGhlCisgICAgLy8gdGVybWluYWwsIGl0IHJldHVybnMgdGhlIGp1bXAgdGhhdCBuZWVk
cyB0byBiZSBsaW5rZWQgZm9yIHRoZSAidGhlbiIgY2FzZSwgd2l0aCB0aGUgImVsc2UiCisgICAg
Ly8gY2FzZSBiZWluZyBmYWxsLXRocm91Z2guIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0
ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJh
dGUoQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCisgICAgQXJnTGlzdCBhcmdzOworICAgIFZhbHVlKiBvcmln
aW47IC8vIFRoZSBCMzo6VmFsdWUgdGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbS4KKyAgICBPcGNv
ZGUgb3Bjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gQWlySW5zdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
ckluc3RJbmxpbmVzX2gKKyNkZWZpbmUgQWlySW5zdElubGluZXNfaAorCisjaW5jbHVkZSAiQWly
SW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lh
bHMuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxU
bXA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChJ
bnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5m
b3JFYWNoVG1wKGZ1bmN0b3IpOworICAgIH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNo
PEFyZz4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNo
KEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpbnN0
LmZvckVhY2hBcmcoZnVuY3Rvcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVGhp
bmcsIHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKK3sKKyAgICBGb3JFYWNoPFRoaW5nPjo6Zm9yRWFjaCgqdGhpcywgZnVuY3Rvcik7Cit9CisK
K2Jvb2wgSW5zdDo6aGFzU3BlY2lhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFyZ3Muc2l6ZSgp
ICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBJbnN0Ojpl
eHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBhcmdzWzBdLnNwZWNpYWwoKS0+ZXh0
cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsKK30KKwordm9pZCBJbnN0OjpyZXBvcnRVc2VkUmVnaXN0
ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIGFyZ3NbMF0uc3Bl
Y2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0ZXJzKCp0aGlzLCB1c2VkUmVnaXN0ZXJzKTsKK30KKwor
aW5saW5lIGJvb2wgaXNTaGlmdFZhbGlkKEluc3QmIGluc3QpCit7CisjaWYgQ1BVKFg4NikKKyAg
ICByZXR1cm4gaW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3Rlcjo6Y3gpOworI2Vsc2UKKyAg
ICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfSAgIAorCitpbmxpbmUgYm9vbCBpc0xzaGlmdDMyVmFs
dWUoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNTaGlmdFZhbGlkKGluc3QpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJJbnN0SW5saW5l
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVzc19oCisjZGVmaW5l
IEFpckxpdmVuZXNzX2gKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJC
M0luZGV4TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworLy8gWW91IGNhbiBjb21wdXRlIGxpdmVuZXNzIG92ZXIgVG1wJ3Mgb3Igb3ZlciBB
cmcncy4gSWYgeW91IGNvbXB1dGUgb3ZlciBBcmcncywgeW91IGdldCBib3RoCisvLyBzdGFjayBs
aXZlbmVzcyBhbmQgdG1wIGxpdmVuZXNzLgordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+CitjbGFz
cyBMaXZlbmVzcyB7CitwdWJsaWM6CisgICAgTGl2ZW5lc3MoQ29kZSYgY29kZSkKKyAgICB7Cisg
ICAgICAgIG1fbGl2ZUF0SGVhZC5yZXNpemUoY29kZS5zaXplKCkpOworICAgICAgICBtX2xpdmVB
dFRhaWwucmVzaXplKGNvZGUuc2l6ZSgpKTsKKworICAgICAgICBJbmRleFNldDxCYXNpY0Jsb2Nr
PiBzZWVuOworCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChj
aGFuZ2VkKSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGZv
ciAoc2l6ZV90IGJsb2NrSW5kZXggPSBjb2RlLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAg
ICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gY29kZS5hdChibG9ja0luZGV4KTsKKyAg
ICAgICAgICAgICAgICBMb2NhbENhbGMgbG9jYWxDYWxjKCp0aGlzLCBibG9jayk7CisgICAgICAg
ICAgICAgICAgZm9yIChzaXplX3QgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4
LS07KQorICAgICAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5z
dEluZGV4KSk7CisgICAgICAgICAgICAgICAgYm9vbCBmaXJzdFRpbWUgPSBzZWVuLmFkZChibG9j
ayk7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFRpbWUgJiYgbG9jYWxDYWxjLmxpdmUoKSA9
PSBtX2xpdmVBdEhlYWRbYmxvY2tdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhl
YWRbYmxvY2tdID0gbG9jYWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Js
b2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxv
Y2tdOworICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2lj
QmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFti
bG9ja107CisgICAgfQorCisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4g
cmV2ZXJzZS4KKyAgICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9j
YWxDYWxjKExpdmVuZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAg
ICA6IG1fbGl2ZShsaXZlbmVzcy0+bGl2ZUF0VGFpbChibG9jaykpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlKCkgY29uc3QgeyByZXR1
cm4gbV9saXZlOyB9CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+JiYgdGFrZUxpdmUoKSB7IHJldHVy
biBXVEY6Om1vdmUobV9saXZlKTsgfQorCisgICAgICAgIHZvaWQgZXhlY3V0ZShJbnN0JiBpbnN0
KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgZGVmJ3MuCisgICAgICAg
ICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcm
IGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIWFyZy5pc0FsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9saXZlLnJlbW92ZShhcmcpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAg
ICAgICAvLyBOZXh0IGhhbmRsZSBjbG9iYmVyZWQgcmVnaXN0ZXJzLgorICAgICAgICAgICAgaWYg
KGluc3QuaGFzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICAgICAgaW5zdC5leHRyYUNsb2JiZXJl
ZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbdGhpc10gKFJlZyByZWcpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoVGhpbmcocmVnKSk7CisgICAg
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIHVzZSdzLgorICAgICAgICAgICAgaW5zdC5m
b3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6
Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNB
bGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2
ZS5hZGQoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgSGFzaFNldDxUaGluZz4gbV9saXZlOworICAgIH07CisgICAgCitwcml2YXRl
OgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdEhlYWQ7
CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0VGFpbDsK
K307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckxp
dmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBTeWxsYWJ1czoKKyMKKyMgUm9s
ZXMgYW5kIHR5cGVzOgorIyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVy
IG9yIHZhbHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3Ig
dmFsdWUKKyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3Rl
ciBvciB2YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMg
RDpGID0+IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkYgPT4gdXNlIGFu
ZCBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIworIyBBcmd1bWVudCBraW5kczoK
KyMgVG1wID0+IHRlbXBvcmFyeSBvciByZWdpc3RlcgorIyBJbW0gPT4gMzItYml0IGltbWVkaWF0
ZSBpbnQKKyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0CisjIEFkZHIgPT4gYWRkcmVzcyBhcyB0ZW1w
b3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJhc2VJbmRleCBhZGRyZXNzCisjIEFi
cyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhlIHBhcnNlciB2aWV3cyB0aGVzZSB0aGluZ3Mg
YXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0aGF0IHRoZXkgZmFsbCBpbnRvIHR3byBkaXN0
aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28sIGFsdGhvdWdoIHRoaXMgZmlsZSB1c2VzIGEg
cGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwgbm9uZSBvZiB0aGUgd2hpdGVzcGFjZSBvcgor
IyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBwYXJzZXIuIEZvciBleGFtcGxl
LCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQyIFU6RywgVUQ6RiBJbW0sIFRtcCBBZGRyLCBU
bXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQga25vdyB0aGF0IHRoaXMgaXMgdGhlIHNhbWUg
YXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAgICAgSW1tLCBUbXAKKyMgICAgIEFkZHIsIFRt
cAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1Y3Rpb24gdGhhdCB1c2VzIGEgR1BSIG9yIGFu
IGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBhIGZsb2F0IHJlZ2lzdGVyLgorCisjIE5vdGUg
dGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBsZWFkaW5nIGNhcGl0YWwgKEFkZDMyKSBidXQg
bXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1ibGVyCisjIEFQSSB0aGF0IGhhcyBhIGxlYWRp
bmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitOb3AKKworQWRkMzIgVTpHLCBVRDpHCisgICAgVG1w
LCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAgIEFkZHIsIFRtcAorICAgIFRt
cCwgQWRkcgorCitBZGQzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRtcAorCitBbmQz
MiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAgVG1wLCBBZGRyCisg
ICAgQWRkciwgVG1wCisgICAgSW1tLCBBZGRyCisKK0xzaGlmdDMyIFU6RywgVUQ6RworICAgIFRt
cCosIFRtcAorICAgIEltbSwgVG1wCisKK011bDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisg
ICAgQWRkciwgVG1wCisKK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1w
CisgICAgSW1tNjQsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkICMgVGhpcyBtZWFucyB0aGF0
ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMgImxvYWQiIG5vdCAibW92ZSIu
CisgICAgVG1wLCBBZGRyIGFzIHN0b3JlCisKK01vdmVEb3VibGUgVTpGLCBEOkYKKyAgICBUbXAs
IFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgVG1wLCBBZGRyIGFzIHN0b3Jl
RG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1wLCBUbXAKKworTW92ZURv
dWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAorCitCcmFuY2hBZGQzMiBVOkcsIFU6Rywg
VUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRt
cAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJl
c0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hNdWwzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisg
ICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoU3Vi
MzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVz
Q29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAs
IEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9i
cmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKworSnVtcCAvYnJhbmNoCisKK1JldCAvdGVybWluYWwK
KworIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBp
cyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisjIHdoaWNoIG11
c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VT
Y29wZS5oIgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgi
CisjaW5jbHVkZSAiQjNDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKENvZGUmIGNvZGUsIGNv
bnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX2NvZGUoY29kZSkKKyAgICAsIG1fbmFtZShuYW1lKQor
eworICAgIGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2co
IkFpciBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAg
IH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBC
ZWZvcmUgPSB0b0NTdHJpbmcoY29kZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkK
K3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlk
YXRlKGNvZGUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyUGhhc2VTY29wZV9oCisjZGVmaW5lIEFpclBoYXNlU2NvcGVfaAorCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShDb2Rl
JiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8gdGhpcyBzaG91bGQg
ZG8gdmFsaWRhdGlvbgorCitwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBj
aGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJQaGFzZVNjb3BlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJp
b3JpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJSZWdpc3RlclByaW9yaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQUlJl
Zz4mIGdwc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+KiBy
ZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29u
Y2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5l
dyBWZWN0b3I8R1BSUmVnPigpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnOjph
bGxHUFJzKCk7CisgICAgICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdp
c3RlcnMoKSk7CisgICAgICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRI
YXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUg
PSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgZm9yIChS
ZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcp
KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+
YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIHJldHVy
biAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnBzSW5Qcmlvcml0eU9yZGVy
KCkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPEZQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3Rk
OjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAg
ICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7Cisg
ICAgICAgICAgICBSZWdpc3RlclNldCBhbGwgPSBSZWc6OmFsbEZQUnMoKTsKKyAgICAgICAgICAg
IFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAg
aWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFw
cGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChSZWcgcmVn
IDogYWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8UmVn
PiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUgdHlwZSkKK3sKKyAgICBzdGF0aWMgVmVj
dG9yPFJlZz4qIHJlc3VsdFtBcmc6Om51bVR5cGVzXTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10g
eworICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAg
ICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBncHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAg
ICAgICAgICAgcmVzdWx0W0FyZzo6R1BdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICAgICAg
cmVzdWx0W0FyZzo6RlBdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEZQ
UlJlZyByZWcgOiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0
W0FyZzo6RlBdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJl
c3VsdFt0eXBlXTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJS
ZWdpc3RlclByaW9yaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lz
dGVyUHJpb3JpdHlfaAorI2RlZmluZSBBaXJSZWdpc3RlclByaW9yaXR5X2gKKworI2luY2x1ZGUg
IkFpckFyZy5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9y
ZGVyKCk7Citjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3JpdHlPcmRlcigpOworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEdQUkluZm8+IHsKKyAg
ICBjb25zdCBWZWN0b3I8R1BSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZ3BzSW5Q
cmlvcml0eU9yZGVyKCk7IH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdpc3RlcnNJblByaW9y
aXR5T3JkZXI8RlBSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxGUFJSZWc+JiBpblByaW9yaXR5
T3JkZXIoKSB7IHJldHVybiBmcHNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQmFuaz4KK2NvbnN0IFZlY3RvcjxCYW5rOjpSZWdpc3RlclR5cGU+JiByZWdzSW5Q
cmlvcml0eU9yZGVyKCkKK3sKKyAgICByZXR1cm4gUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEJh
bms+OjppblByaW9yaXR5T3JkZXIoKTsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblBy
aW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorCisjaW5j
bHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworU3BlY2lhbDo6U3BlY2lhbChjb25zdCBjaGFyKiBu
YW1lKQorICAgIDogbV9uYW1lKG5hbWUpCisgICAgLCBtX2luZGV4KFVJTlRfTUFYKQoreworfQor
CitTcGVjaWFsOjp+U3BlY2lhbCgpCit7Cit9CisKK0NTdHJpbmcgU3BlY2lhbDo6bmFtZSgpIGNv
bnN0Cit7CisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIGR1bXBJbXBsKG91dCk7Cisg
ICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgpOworICAgIGR1
bXBJbXBsKG91dCk7CisgICAgaWYgKG1faW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5w
cmludChtX2luZGV4KTsKK30KKwordm9pZCBTcGVjaWFsOjpkZWVwRHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgqdGhpcywgIjogIik7CisgICAgZGVlcER1bXBJ
bXBsKG91dCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpclNwZWNpYWxfaAorI2RlZmluZSBBaXJTcGVjaWFsX2gKKwor
I2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgR2VuZXJhdGlvbkNvbnRleHQ7CisKK2NsYXNz
IFNwZWNpYWwgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNpYWwpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1w
UHJlZml4ID0gIiYiOworICAgIAorICAgIFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TcGVjaWFs
KCk7CisKKyAgICBDU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBmb3JF
YWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYp
ID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZChJbnN0JikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpID0gMDsKKworICAgIC8v
IFRoaXMgZ2V0cyBjYWxsZWQgb24gZm9yIGVhY2ggSW5zdCB0aGF0IHVzZXMgdGhpcyBTcGVjaWFs
LiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvCisgICAgLy8gZ3VhcmFudGVlIHRoYXQgYSBT
cGVjaWFsIGdldHMgdXNlZCBmcm9tIGp1c3Qgb25lIEluc3QsIGJlY2F1c2UgQWlyIG1pZ2h0IHRh
aWxkdXAgbGF0ZS4gU28sCisgICAgLy8gaWYgeW91IHdhbnQgdG8gcGFzcyB0aGlzIGluZm9ybWF0
aW9uIGRvd24gdG8gZ2VuZXJhdGUoKSwgdGhlbiB5b3UgaGF2ZSB0byBlaXRoZXI6CisgICAgLy8K
KyAgICAvLyAxKSBHZW5lcmF0ZSBBaXIgdGhhdCBzdGFydHMgd2l0aCBhIHNlcGFyYXRlIFNwZWNp
YWwgcGVyIFBhdGNoIEluc3QsIGFuZCB0aGVuIG1lcmdlCisgICAgLy8gICAgdXNlZFJlZ2lzdGVy
IHNldHMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGdyZWF0LCBidXQgaXQgb3B0aW1pemVzIGZvciB0
aGUgY29tbW9uIGNhc2UgdGhhdAorICAgIC8vICAgIEFpciBkaWRuJ3QgZHVwbGljYXRlIGNvZGUg
b3IgdGhhdCBzdWNoIGR1cGxpY2F0aW9uIGRpZG4ndCBjYXVzZSBhbnkgaW50ZXJlc3RpbmcgY2hh
bmdlcyB0bworICAgIC8vICAgIHJlZ2lzdGVyIGFzc2lnbm1lbnQuCisgICAgLy8KKyAgICAvLyAy
KSBIYXZlIHRoZSBTcGVjaWFsIG1haW50YWluIGEgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+
LiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGFuYWx5c2lzCisgICAgLy8gICAgdGhhdCBmZWVkcyBp
bnRvIHRoaXMgY2FsbCBpcyBwZXJmb3JtZWQganVzdCBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIGFu
ZCB0aGVyZSBpcyBubyB3YXkKKyAgICAvLyAgICBmb3IgdGhlIFZlY3Rvcjw+J3MgdGhhdCBjb250
YWluIHRoZSBJbnN0cyB0byBiZSByZWFsbG9jYXRlZC4gVGhpcyBhbGxvd3MgZ2VuZXJhdGUoKSB0
bworICAgIC8vICAgIGNvbnN1bHQgdGhlIEhhc2hNYXAuCisgICAgLy8KKyAgICAvLyAzKSBIeWJy
aWQ6IHlvdSBjb3VsZCB1c2UgKDEpIGFuZCBmaXJlIHVwIGEgSGFzaE1hcCBpZiB5b3Ugc2VlIG11
bHRpcGxlIGNhbGxzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGl0J3Mgbm90IHBvc3NpYmxl
IHRvIHJlbHkgb24gcmVwb3J0VXNlZFJlZ2lzdGVycygpIGJlaW5nIGNhbGxlZCBpbiB0aGUgc2Ft
ZSBvcmRlcgorICAgIC8vIGFzIGdlbmVyYXRlKCkuIElmIHdlIGNvdWxkIHJlbHkgb24gdGhhdCwg
dGhlbiB3ZSBjb3VsZCBqdXN0IGhhdmUgZWFjaCBTcGVjaWFsIGluc3RhbmNlCisgICAgLy8gbWFp
bnRhaW4gYSBWZWN0b3Igb2YgUmVnaXN0ZXJTZXQncyBhbmQgdGhlbiBwcm9jZXNzIHRoYXQgdmVj
dG9yIGluIHRoZSByaWdodCBvcmRlciBpbgorICAgIC8vIGdlbmVyYXRlKCkuIEJ1dCwgdGhlIG9y
ZGVyaW5nIGRpZmZlcmVuY2UgaXMgdW5saWtlbHkgdG8gY2hhbmdlIHNpbmNlIGl0IHdvdWxkIGhh
cm0gdGhlCisgICAgLy8gcGVyZm9ybWFuY2Ugb2YgdGhlIGxpdmVuZXNzIGFuYWx5c2lzLgorICAg
IC8vCisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyAoMSkgZm9yIEIzIHN0YWNrbWFwcy4KKyAgICB2
aXJ0dWFsIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQm
KSA9IDA7CisgICAgCisgICAgdmlydHVhbCBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5z
dCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikgPSAwOworCisgICAgdmlydHVh
bCBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSA9IDA7CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcEltcGwo
UHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlZXBEdW1wSW1wbChQ
cmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29k
ZTsKKworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsK
KworY2xhc3MgRGVlcFNwZWNpYWxEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3BlY2lhbERpbXAo
U3BlY2lhbCogc3BlY2lhbCkKKyAgICAgICAgOiBtX3NwZWNpYWwoc3BlY2lhbCkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9zcGVjaWFsKQorICAgICAgICAgICAgbV9zcGVjaWFsLT5kZWVwRHVtcChvdXQp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBTcGVjaWFsKiBtX3NwZWNpYWw7Cit9OworCitEZWVwU3BlY2lhbER1
bXAgZGVlcER1bXAoU3BlY2lhbCogc3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVlcFNwZWNpYWxE
dW1wKHNwZWNpYWwpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBBaXJTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVy
eXRoaW5nLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUm
IGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJzcGlsbEV2ZXJ5dGhp
bmciKTsKKworICAgIC8vIFdlIHdhbnQgdG8ga25vdyB0aGUgc2V0IG9mIHJlZ2lzdGVycyB1c2Vk
IGF0IGV2ZXJ5IHBvaW50IGluIGV2ZXJ5IGJhc2ljIGJsb2NrLgorICAgIEluZGV4TWFwPEJhc2lj
QmxvY2ssIFZlY3RvcjxSZWdpc3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOwor
ICAgIExpdmVuZXNzPFRtcD4gbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxjIGxvY2FsQ2Fs
YyhsaXZlbmVzcywgYmxvY2spOworICAgICAgICB1c2VkUmVnaXN0ZXJzW2Jsb2NrXS5yZXNpemUo
YmxvY2stPnNpemUoKSArIDEpOworCisgICAgICAgIGF1dG8gc2V0VXNlZFJlZ2lzdGVycyA9IFsm
XSAodW5zaWduZWQgaW5kZXgpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXQgPSB1c2Vk
UmVnaXN0ZXJzW2Jsb2NrXVtpbmRleF07CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsb2Nh
bENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAg
ICAgICAgICAgICAgICBzZXQuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGJsb2NrLT5zaXplKCkpOworICAgICAgICAK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5k
ZXgtLTspIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5k
ZXgpKTsKKyAgICAgICAgICAgIHNldFVzZWRyZWdpc3RlcnMoaW5zdEluZGV4KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAuCisg
ICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1UeXBlc107CisgICAg
Zm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyAr
K3R5cGVJbmRleCkgeworICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBh
bGxTdGFja1Nsb3RzW3R5cGVJbmRleF07CisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGlj
X2Nhc3Q8QXJnOjpUeXBlPih0eXBlSW5kZXgpOworICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShj
b2RlLm51bVRtcHModHlwZSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29k
ZS5udW1UbXBzKHR5cGUpOyB0bXBJbmRleC0tOykKKyAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1w
SW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsK
KyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdElu
ZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRCZWZvcmUgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0
SW5kZXhdOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldEFmdGVyID0gdXNlZFJlZ2lzdGVy
c1tibG9ja11baW5zdEluZGV4ICsgMV07CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAg
ICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9
IGFsbFN0YWNrU2xvdHNbdHlwZV1bdG1wLnRtcEluZGV4KCldOworICAgICAgICAgICAgICAgICAg
ICBBcmcgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3QpOworCisgICAgICAgICAgICAgICAgICAg
IC8vIE5lZWQgdG8gZmlndXJlIG91dCBhIHJlZ2lzdGVyIHRvIHVzZS4gSG93IHdlIGRvIHRoYXQg
ZGVwZW5kcyBvbiB0aGUgcm9sZS4KKyAgICAgICAgICAgICAgICAgICAgUmVnIGNob3NlblJlZzsK
KyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpVc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBy
ZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6RGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0lu
UHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
c2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJl
ZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpV
c2VEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlv
cml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRC
ZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoY2hv
c2VuUmVnKTsKKworICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKwor
ICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUg
OiBNb3ZlRG91YmxlCisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0
bXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzRGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIG1vdmUsIGlu
c3Qub3JpZ2luLCB0bXAsIGFyZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7
CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwaWxsRXZlcnl0aGlu
Z19oCisjZGVmaW5lIEFpclNwaWxsRXZlcnl0aGluZ19oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpcyBh
IHBoYXNlIGZvciB0ZXN0aW5nLiBJdCBiZWhhdmVzIGxpa2UgYSByZWdpc3RlciBhbGxvY2F0b3Ig
aW4gdGhlIHNlbnNlIHRoYXQgaXQKKy8vIGVsaW1pbmF0ZXMgdGVtcG9yYXJpZXMgZnJvbSB0aGUg
cHJvZ3JhbS4gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgYWx3YXlzIHNwaWxsaW5nIGFsbAorLy8g
dGVtcG9yYXJpZXMuIFRoZSByZXN1bHRpbmcgY29kZSBpcyBnb2luZyB0byBiZSB2ZXJ5IGluZWZm
aWNpZW50LiBUaGlzIHBoYXNlIGlzIGdyZWF0IGlmIHlvdQorLy8gdGhpbmsgdGhhdCB0aGVyZSBp
cyBhIGJ1ZyBpbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLiBZb3UgY2FuIGNvbmZpcm0gdGhpcyBi
eSBydW5uaW5nIHRoaXMKKy8vIHBoYXNlIGluc3RlYWQgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRv
ci4KKy8vCisvLyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggdGhpcyBwaGFzZSBkb2VzIHRoZSBjaGVh
cGVzdCB0aGluZyBwb3NzaWJsZSwgaXQncyBub3QgZXZlbiB3cml0dGVuIGluIGEKKy8vIHBhcnRp
Y3VsYXJseSBlZmZpY2llbnQgd2F5LiBTbywgZG9uJ3QgZ2V0IGFueSBpZGVhcyBhYm91dCB1c2lu
ZyB0aGlzIHBoYXNlIHRvIHJlZHVjZSBjb21waWxlcgorLy8gbGF0ZW5jeS4gSWYgeW91IHdhbnRl
ZCB0byBkbyB0aGF0LCB5b3Ugc2hvdWxkIGNvbWUgdXAgd2l0aCBhIGNsZXZlciBhbGdvcml0aG0g
aW5zdGVhZCBvZiB1c2luZworLy8gdGhpcyBzaWxseSB0aGluZy4KKwordm9pZCBzcGlsbEV2ZXJ5
dGhpbmcoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclN0YWNrU2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgU3RhY2tTbG90
OjpzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCit7CisgICAgbV9vZmZzZXRGcm9tRlAg
PSB2YWx1ZTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgbV92YWx1ZS0+bV9vZmZzZXRGcm9t
RlAgPSB2YWx1ZTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgU3Rh
Y2tTbG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNl
dEZyb21GUCwgIiwga2luZCA9ICIsIG1fa2luZCk7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAg
IG91dC5wcmludCgiLCB2YWx1ZSA9ICIsICptX3ZhbHVlKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclN0YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3Rh
Y2tTbG90X2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90X2gKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90
S2luZC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTdGFj
a1Nsb3R2YWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFN0YWNrU2xvdCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhY2tTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Ynl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldXRybiBtX2tp
bmQ7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKwor
ICAgIHVuc2lnbmVkIGFsaWdubWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYnl0ZVNp
emUoKSA8PSAxKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChieXRlU2l6ZSgp
IDw9IDIpCisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0g
NCkKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICByZXR1cm4gODsKKyAgICB9CisKKyAg
ICBTdGFja1Nsb3RWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAg
ICAvLyBaZXJvIG1lYW5zIHRoYXQgaXQncyBub3QgeWV0IGFzc2lnbmVkLgorICAgIGludHB0cl90
IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAv
LyBUaGlzIHNob3VsZCB1c3VhbGx5IGp1c3QgYmUgY2FsbGVkIGZyb20gcGhhc2VzIHRoYXQgZG8g
c3RhY2sgYWxsb2NhdGlvbi4gQnV0IHlvdSBjYW4KKyAgICAvLyB0b3RhbGx5IGZvcmNlIGEgc3Rh
Y2sgc2xvdCB0byBsYW5kIGF0IHNvbWUgb2Zmc2V0LgorICAgIHZvaWQgc2V0T2Zmc2V0RnJvbUZQ
KGludHB0cl90KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZv
aWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgQ29kZTsKKworICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQg
aW5kZXgsIFN0YWNrU2xvdEtpbmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorICAgICAg
ICA6IG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAg
ICAgLCBtX29mZnNldEZyb21GUCh2YWx1ZS0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICwgbV9r
aW5kKGtpbmQpCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChieXRlU2l6ZSk7CisgICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAg
dW5zaWduZWQgbV9pbmRleDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKKyAgICBTdGFj
a1Nsb3RLaW5kIG1fa2luZDsKKyAgICBTdGFja1Nsb3RWYWx1ZSogbV92YWx1ZTsKK307CisKK2Ns
YXNzIERlZXBTdGFja1Nsb3REdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3RhY2tTbG90RHVtcChT
dGFja1Nsb3QqIHNsb3QpCisgICAgICAgIDogbV9zbG90KHNsb3QpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG1fc2xvdCkKKyAgICAgICAgICAgIG1fc2xvdC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgU3RhY2tTbG90KiBtX3Nsb3Q7Cit9OworCitEZWVwU3RhY2tTbG90RHVtcCBkZWVwRHVtcChT
dGFja1Nsb3QqIHNsb3QpCit7CisgICAgcmV0dXJuIERlZXBTdGFja1Nsb3REdW1wKHNsb3QpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJTdGFj
a1Nsb3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclRt
cC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K3ZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhp
cykgeworICAgICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGlzUmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0dQVG1wKCkpIHsKKyAgICAgICAgb3V0LnBy
aW50KCIldG1wIiwgZ3BUbXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG91dC5wcmludCgiJWZ0bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBfaAorI2RlZmluZSBBaXJUbXBf
aAorCisjaW5jbHVkZSAiUmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworLy8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBhIHJlZ2lz
dGVyLiBJdCBjYW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4gSXQgY2FuIGFs
c28KKy8vIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0ZXIgKGkuZS4g
YSB0ZW1wb3JhcnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQorLy8gZGVsaWJlcmF0
ZWx5IHRlcnNlIG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoaXMgbmFtZSBhIGxv
dC4KKworY2xhc3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAgICA6IG1fdmFsdWUo
MCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcpCisgICAgeworICAg
ICAgICBpZiAocmVnKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAg
ICAgICAgbV92YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigpKTsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAgICBleHBsaWNpdCBU
bXAoY29uc3QgQXJnJik7CisKKyAgICBzdGF0aWMgVG1wIGdwVG1wRm9ySW5kZXgodW5zaWduZWQg
aW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1
ZSA9IGVuY29kZUdQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBzdGF0aWMgVG1wIGZwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAg
ICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQVG1wKGlu
ZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGZv
clJhd1ZhbHVlKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBpbmRleDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3Zh
bHVlOyB9CisKKyAgICBib29sIHJhd1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQor
CisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRH
UChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNHUFIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0Vu
Y29kZWRGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNHUFIoKSB8fCBpc0ZQUigpOworICAgIH0KKworICAgIEdQUlJl
ZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQUihtX3ZhbHVlKTsK
KyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBk
ZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwcigpOworICAgICAgICBy
ZXR1cm4gZnByKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAg
dW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2Rl
RlBUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4
KCk7CisgICAgICAgIHJldHVybiBmcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgYm9vbCBpc0Fs
aXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhISp0aGlzOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQg
aW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0
YXRpYyBpbnQgZW5jb2RlRlAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4g
LTEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3By
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpm
aXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJl
ZyBmcHIpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJs
ZXI6OmZpcnN0RlBSUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVH
UFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUFIoTWFj
cm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBz
dGF0aWMgaW50IGVuY29kZUZQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0gaW5k
ZXg7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1AoaW50IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBp
c0VuY29kZWRGUChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPCAwOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQUihpbnQgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmIHZhbHVlIDw9IGVuY29kZUdQUihN
YWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGlzRW5jb2RlZEZQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVk
RlAodmFsdWUpICYmIHZhbHVlID49IGVuY29kZWRGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJl
Z2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5j
b2RlZEdQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAo
aW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAh
aXNFbmNvZGVkRlBSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQ
UihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVl
IC0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNz
ZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVj
b2RlRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAo
ZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKwor
ICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzRW5jb2RlZEdQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAt
IChlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0K
KworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNFbmNvZGVkRlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNv
ZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAg
ICB9CisKKyAgICAvLyAwOiBlbXB0eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhl
biBHUCB0ZW1wcy4KKyAgICAvLyBuZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAg
ICBpbnQgbV92YWx1ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEFpclRtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVG1wSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
clRtcElubGluZXNfaAorI2RlZmluZSBBaXJUbXBJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFpckFy
Zy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2lubGluZSBUbXA6OlRtcChjb25zdCBBcmcmIGFyZykKK3sK
KyAgICAqdGhpcyA9IGFyZy50bXAoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gQWlyVG1wSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoK
KyAgICBWYWxpZGF0ZXIoQ29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciog
ZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3doZW4od2hl
bikKKyAgICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQorCisj
ZGVmaW5lIFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAg
ICAgIGZhaWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0
aW9uLCB0b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKyAgICAKKyAg
ICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+IHZhbGlkU2xv
dHM7CisgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHZhbGlkQmxvY2tzOworICAgICAgICBI
YXNoU2V0PFNwZWNpYWwqPiB2YWxpZFNwZWNpYWxzOworCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAgICB2YWxpZEJsb2Nrcy5hZGQoYmxvY2spOwor
ICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fY29kZS5zdGFja1Nsb3RzKCkpCisgICAg
ICAgICAgICB2YWxpZFNsb3RzLmFkZChzbG90KTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVj
aWFsIDogbV9jb2RlLnNwZWNpYWxzKCkpCisgICAgICAgICAgICB2YWxpZFNwZWNpYWxzLmFkZChz
cGVjaWFsKTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2Nr
LT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJs
b2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0
LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWxpZFNsb3RzLmNvbnRhaW5zKGFyZy5zdGFja1Nsb3QoKSksICgiQXQgIiwgaW5zdCkp
OworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNh
c2UgU3BlY2lhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU3BlY2lh
bHMuY29udGFpbnMoYXJnLnNwZWNpYWwoKSksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVkFMSURB
VEUoaW5zdC5pc1ZhbGlkRm9ybSgpLCAoIkF0ICIsIGluc3QpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaW5zdEluZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBW
QUxJREFURShpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKCkp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
IDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJs
b2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaykpOworICAgICAgICB9Cisg
ICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmls
ZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciog
Y29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3Ry
aW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVc
biIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxl
bmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4pCisgICAgICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7CisgICAgICAgICAg
ICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAg
IG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsK
KyAgICAgICAgICAgIG91dC5wcmludCgiQmVmb3JlICIsIHdoZW4sICI6XG4iKTsKKyAgICAgICAg
ICAgIG91dC5wcmludChtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIG91dC5wcmlu
dCgiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIG91dC5wcmludChtX2NvZGUpOwor
CisgICAgICAgIG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFz
c2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24p
OworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAg
Y29uc3QgY2hhciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hh
ciogZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIHdoZW4sIGR1
bXBCZWZvcmUpOworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZh
bGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJW
YWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJWYWxpZGF0ZV9o
CisjZGVmaW5lIEFpclZhbGlkYXRlX2gKKworI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFz
cyBDb2RlOworCit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0
ciwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3Iu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTUgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkK
KworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5h
bWUiCisKK2NsYXNzIE9wY29kZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92
ZXJsb2FkcworICAgIGF0dHJfYWNjZXNzb3IgOmtpbmQKKworICAgIGRlZiBpbml0aWFsaXplKG5h
bWUsIHNwZWNpYWwpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IHNw
ZWNpYWwKKyAgICAgICAgQGtpbmQgPSA6aW5zdAorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAg
ICAgICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IG1hc21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVu
ZAorZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAg
ZGVmIGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAg
IEB0eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9y
ZWFkZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUs
IGZvcm1zKQorICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9
IGZvcm1zCisgICAgZW5kCitlbmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1l
CisgICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkK
KyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQK
KworICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAg
ICAgICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9
PSBvdGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAor
ICAgIGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9
PSAiQWRkciIKKyAgICAgICAgICAgIFsiQWRkciIsICJTdGFja1Nsb3QiLCAiQ2FsbEFyZyJdCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKwor
ICAgIGRlZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitl
bmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAg
IGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcwor
ICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4K
KyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGlu
aXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVO
YW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAg
IGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAor
ZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAg
IAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0g
b3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYg
PT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3Ry
aW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09
IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAg
ICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAg
ICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAg
IGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAg
ICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAg
ICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAg
ICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxl
TmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVO
dW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAg
ICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUK
KyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAg
ICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykv
CisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxp
bmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAg
IyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXC9dLworICAgICAgICAg
ICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwg
JCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09y
aWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNl
ICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBv
c3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAg
ICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQor
ICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisg
ICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENv
bmQpfChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQo
dG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4g
PT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRv
a2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29y
ZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBm
aWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAg
QGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhd
CisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQK
KworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAg
ICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3Ig
YXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2Ug
IlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAg
ZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3Ry
aW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmll
cgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhw
ZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBh
ZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisg
ICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3Rl
ZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFu
Y2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAg
ICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5
cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAg
ICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0
ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwg
SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlz
S2luZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisK
KyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisgICAgICAgIGxv
b3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAg
ICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBjb25zdW1lKCJz
cGVjaWFsIikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIK
KworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwg
b3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAgICByZXN1bHRb
b3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAg
ICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAg
b3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IE9wY29k
ZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNv
ZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAg
c2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgaXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAg
bG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tl
biA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0
b2tlbiA9PSAiLyIKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLyIpCisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgdG9rZW4uc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIHdoZW4gImJy
YW5jaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOmJyYW5jaAorICAg
ICAgICAgICAgICAgICAgICB3aGVuICJ0ZXJtaW5hbCIKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wY29kZS5raW5kID0gOnRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkJhZCAvIGRpcmVjdGl2ZSIpCisgICAgICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBhZHZhbmNlCisgICAgICAgICAg
ICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBpc0tpbmQodG9rZW4pCisgICAgICAgICAg
ICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPSBbXQorICAg
ICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAorICAgICAgICAgICAgICAgICAgICAg
ICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPDwgS2luZC5uZXco
Y29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAi
KiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2FuIG9ubHkg
YXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5hbWUgPT0gIlRtcCIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNwZWNpYWwgPSB0cnVlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioiKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNz
IHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0
b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiYXMiKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgor
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2Fk
IikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICAg
ICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtp
bmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIkltbTY0IgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnJvbGUgIT0gIlUiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1l
ZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVb
aW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVycG9z
ZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoa2luZHMsIGFsdE5hbWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgaXNLaW5kKHRva2VuKQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBp
ZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNz
IGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3
KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBvcGNvZGUu
b3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAgICBlbmQKK2VuZAorCiskZmlsZU5h
bWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoJGZpbGVOYW1lKSwg
JGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UKKworZGVmIHdyaXRlSChmaWxlbmFt
ZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBv
dXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29k
ZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAg
ICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAg
IG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91
dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9
X2giCisgICAgfQorZW5kCisKK2RlZiB3cml0ZUNQUChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4o
IkFpciN7ZmlsZW5hbWV9LmNwcCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAK
KyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBm
cm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRw
LnB1dHMgIiNpbmNsdWRlIFwiY29uZmlnLmhcIiIKKyAgICAgICAgb3V0cC5wdXRzICIjaW5jbHVk
ZSBcIkFpciN7ZmlsZW5hbWV9LmhcIiIKKworICAgICAgICB5aWVsZCBvdXRwCisgICAgfQorZW5k
CisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0
cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2gg
eworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwi
CisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAic3RhdGljIGNvbnN0
IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6ZX07IgorICAgIG91dHAu
cHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAgICAKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNzIFByaW50U3RyZWFtOyIK
KyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6
OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisK
K3dyaXRlQ1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNs
dWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYg
eyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91
dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNv
ZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29k
ZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAg
ICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIg
ICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0cyAiICAg
ICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0
cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIK
KyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKworIyBGcm9tIGhlcmUgb24s
IHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIHNpbmNlIHdlJ3Jl
IHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKworZGVmIG1hdGNoRm9ybXMo
b3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNh
bGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAorCisgICAgaWYgZmlsdGVy
W2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIGlmIGNvbHVtbkluZGV4ID49
IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3Ro
ID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAgICAgIHJldHVybgorICAgIGVu
ZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFjaCB7CisgICAgICAgIHwgZm9y
bSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbkluZGV4XS5uYW1lCisgICAgICAg
IGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdIDw8IGZvcm0KKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zvcm1dCisgICAgICAgIGVuZAor
ICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91cHMubGVuZ3RoID09IDEKKyAg
ICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4ICsgMSwgY29s
dW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKwor
ICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltjb2x1bW5JbmRleF19KSB7Igor
ICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwgdmFsdWUgfAorICAgICAgICBv
dXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICAgICAg
S2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAgICAgfCBhcmdLaW5kIHwKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06IgorICAgICAgICB9CisgICAg
ICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1bW5JbmRleCArIDEsIGNvbHVt
bkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIklt
bTY0IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0
cCwgc3BlZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPm9wY29kZSkg
eyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAg
ICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgaWYgb3Bjb2RlLnNw
ZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEp
IG9yIHNwZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5z
dH0tPmFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIG9w
Y29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06
IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92
ZXJsb2FkCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNo
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0K
KyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91
dHAucHV0cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCBz
cGVlZCwgaW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkgewor
ICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAor
ICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAorICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4
IHwKKyAgICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgp
IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAg
ICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAg
ICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtCisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBvdmVybG9hZC5mb3JtcywgMCwg
Y29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBlbmQKKyAgICB9CitlbmQK
Kword3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAi
I2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5wdXRzICJpbmxp
bmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRwLnB1
dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIg
ICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0
dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAidGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIEluc3Q6OmZvckVhY2hB
cmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNo
SW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92
ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0
cyAiZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7IC8vIFRoaXMgaXMgYmFzaWNh
bGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBtb2RlbCBTcGVjaWFsIGFzIGFuIGlt
bWVkaWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFyZ3NbMF0uc3BlY2lhbCgpLT5mb3JF
YWNoQXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxiYWNrPihmdW5jdG9yKSk7Igor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFjaF93aXRoX2lu
ZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAorICAgICAgICAgICAgICAgIHJv
bGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCisgICAgICAgICAgICAgICAg
d2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCisgICAgICAgICAgICAg
ICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCisgICAgICAgICAg
ICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVmIgorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1
bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2FyZy50eXBlfVApOyIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKwor
ICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPiIKKyAgICBvdXRw
LnB1dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9ybShPcGNvZGUgb3Bjb2RlLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJB
cmc6OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyldID0geyBhcmd1bWVudHMuLi4gfTsi
CisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMu
ZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bj
b2RlLm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKHNpemVvZi4uLihBcmd1bWVu
dHMpKSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG9wY29k
ZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06Igor
ICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeyB8IGNvbHVtbkluZGV4IHwgImtp
bmRzWyN7Y29sdW1uSW5kZXh9XSIgfQorICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBm
YWxzZSB9CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAg
ICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IChub3QgZm9ybS5r
aW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLnNwZWNpYWwgfSkKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oI3tzcGVjaWFsfSk7IgorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3Jt
cywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAgICAgICBlbmQKKyAgICAgICAgb3V0
cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91
dHAucHV0cyAifSIKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9
IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyAiCisgICAgb3V0cC5wdXRzICJ9IgorCisg
ICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBpc1Rlcm1pbmFsKE9wY29kZSBvcGNvZGUpIgorICAg
IG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2gg
eworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5h
bCBvciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2Ug
I3tvcGNvZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1
cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVy
biBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAg
ICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRl
Q1BQKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1
ZGUgXCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiYm9vbCBJbnN0
Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9h
ZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQs
IGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoYXJncy5zaXplKCkgPCAxKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZh
bHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWzBdLmlzU3BlY2lhbCgpKSIK
KyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKCp0aGlzKSk7Igor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uID0gZmFsc2UKKyAg
ICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMgeworICAgICAgICAgICAg
ICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVybG9hZC5zaWduYXR1cmVb
aW5kZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2lu
ZGV4XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZvcm0ua2luZHNbaW5kZXhdCisgICAg
ICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNwZWNpYWwKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBmb3Jt
IG1hdGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJvbGUsIHNpbmNlCisgICAg
ICAgICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBvbmx5IHRoaW5nIGxlZnQg
dG8gdmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAg
ICAjIHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAuCisgICAgICAgICAgICAg
ICAgaWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
aWYgKCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZHNNb3JlVmFsaWRhdGlvbgorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFpcyN7b3Bjb2RlLm5hbWV9VmFsaWQodGhpcykp
IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIK
KyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBv
dXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5z
aWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRj
aCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNv
ZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAg
IGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgp
IgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0
cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlz
LCBhcmdJbnN0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFN3aXRjaCBvbiB0aGUg
YXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJnSW5kZXgpIHsiCisK
KyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRzLm1hcCB7CisgICAgICAgICAg
ICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxl
bmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbnVtQXJn
cy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRleCB8CisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAgICAgICAgICAgICAgICMgQ2hlY2sg
aWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJsb2FkcyBlaXRoZXIgZG8sIG9y
IGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAgICAgICAgIyBhdCB0aGlzIGluZGV4
LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9uIGNhc2UuCisgICAgICAgICAgICAg
ICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAg
IG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtp
bmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1Z
ZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIyBO
b3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZpcnN0IGJlY2F1c2UgaWYgd2Ug
ZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAgICAgICAgICAgICAjIHRvIHNheSB0
aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAgICAgICAgICAgIGlmIG51bVllcyA9
PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsi
CisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0LgorCisgICAgICAgICAgICAg
ICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkK
KworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJncy5zaXplKCkpIHsi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3Zlcmxv
YWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdoYXQg
d2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQu
Zm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0aGluZywganVzdCBkcm9wIHRv
IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0
dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgaG93IHdl
IHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlzIGFyZ3VtZW50IHRvIGFuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIHlpZWxkcyBhIHZhbGlkIGZvcm0u
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9PSBhcmdJbmRleAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRkciIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0g
MAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLmVhY2ggeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9
PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERyb3AgZG93biwgZW1p
dCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgS2VlcCBnb2luZy4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoRm9y
bXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwg
Y2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHAucHV0
cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAg
IG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiI7CisgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNl
OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVscGVyczo6SnVt
cCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNv
bnRleHQpIGNvbnN0IgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9Q
QVJBTShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShjb250ZXh0KTsiCisgICAg
b3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIKKyAgICBtYXRjaEluc3RPdmVy
bG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3Zlcmxv
YWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdlbmVyYXRlKCp0aGlzLCBqaXQs
IGNvbnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGZvcm0uYWx0TmFtZQor
ICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2RlLm1hc21OYW1lCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgIG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKworICAgICAgICAgICAgZm9ybS5r
aW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAor
ICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgY2FzZSBraW5k
Lm5hbWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAgICAgICAgICAgICAgICAgIGlm
IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgorICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5k
ZXh9XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgd2hl
biAiSW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5h
c1RydXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4gIkltbTY0IgorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW02NCgpIgor
ICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJp
bnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIklu
ZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jh
c2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigp
IgorICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCisgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dHAucHV0cyAiKTsiCisg
ICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1bHQpOyIKKyAgICAgICAgZW5k
CisgICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisg
ICAgb3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBv
dXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAK
ICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZhbGlkKCk7IH0K
LSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KIAogICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IGRl
bGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBjbGFzcyBBbGxSZWdzSXRlcmFibGUgewor
ICAgIHB1YmxpYzoKKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIGl0ZXJhdG9yKCkgeyB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJh
dG9yKFJlZyByZWcpCisgICAgICAgICAgICAgICAgOiBtX3JlZyhyZWcpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiBtX3JlZzsgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9yZWcgPSBtX3JlZy5uZXh0KCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZyA9PSBvdGhlci5tX3JlZzsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIFJl
ZyBtX3JlZzsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBB
bGxSZWdzSXRlcmFibGUgYWxsKCkgY29uc3QgeyByZXR1cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0K
KwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZhbGlkKCkgeyByZXR1cm4gMHhmZjsg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRP
ZmZzZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaQogICAgIGlmIChv
ZmZzZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkKICAgICAgICAgb2Zmc2V0ID0gLShz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0ZXJzKSAqIHNpemVvZih2b2lkKikp
OwogCi0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7
cmVnID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVn
IDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmIChyZWdpc3Rl
clNldC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQocmVn
LCBvZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2Yodm9pZCopOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAko
cmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0
T2Zmc2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMyBAQCBwdWJsaWM6CiAg
ICAgUmVnaXN0ZXJBdE9mZnNldCogZmluZChSZWcpIGNvbnN0OwogICAgIHVuc2lnbmVkIGluZGV4
T2YoUmVnKSBjb25zdDsgLy8gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQuCiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zm
c2V0JiBlbnRyeSA6IG1fcmVnaXN0ZXJzKQorICAgICAgICAgICAgZnVuY3RvcihlbnRyeSk7Cisg
ICAgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0PiBtX3JlZ2lzdGVy
czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZp
c2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTMgQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0cygpKQorICAgICAgICAgICAg
ZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJbmRleDogU291cmNlL1dURi93
dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJ
KHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgcHVibGljOiAKICAgICB9OwogICAgIAogICAgIFNl
dEJpdHNJdGVyYWJsZSBzZXRCaXRzKCkgY29uc3QgeyByZXR1cm4gU2V0Qml0c0l0ZXJhYmxlKCp0
aGlzKTsgfQotICAgIAorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2lu
dGVyKCkKICAgICB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKworbmFtZXNwYWNlIFdU
RiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRseSBwYXNzIGxh
bWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKKy8vIHRlbXBsYXRl
IHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxkIGJlIGRlY2xh
cmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGlu
dCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKKy8vCisvLyB2b2lk
IGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAoaW50IHgsIFN0
dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBy
ZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1iZGEgaXMgb25s
eSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVuY2UgdGhlIG5hbWUg
U2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNj
b3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBl
cy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwpKHZv
aWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQqIGFyZyA9IG51bGxw
dHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmcoYXJnKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgflNjb3BlZExhbWJkYSgpCisgICAgeworICAgIH0KKworICAgIFJl
c3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+
KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRUeXBlICgqaW1w
bCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pIG1faW1wbDsKKyAgICB2b2lkICptX2Fy
ZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rv
cj4gU2NvcGVkTGFtYmRhRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRM
YW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1
YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1Ymxp
YzoKKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
ICAgIDogU2NvcGVkTGFtYmRhKGltcGxGdW5jdGlvbiwgdGhpcykKKyAgICAgICAgLCBtX2Z1bmN0
b3IoZnVuY3RvcikKKyAgICB7CisgICAgfQorCisgICAgU2NvcGVkTGFtYmRhRnVuY3RvcihGdW5j
dG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRMYW1iZGEoaW1wbEZ1bmN0aW9uLCB0aGlz
KQorICAgICAgICAsIG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAgeworICAgIH0K
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rpb24odm9pZCogYXJn
dW1lbnQsIEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5jdG9y
KAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4p
OworICAgIH0KKworICAgIEZ1bmN0b3IgbV9mdW5jdG9yOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorU2NvcGVkTGFtYmRhRnVuY3RvcjxG
dW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYShjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQoreworICAgIHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rv
cj4oZnVuY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gU2NvcGVk
TGFtYmRhX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291
cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwxMSBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFNoYXJlZFRhc2tGdW5jdG9yKEZ1bmN0b3Im
JiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAg
eworICAgIH0KKwogcHJpdmF0ZToKICAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzJiYu
Li4gYXJndW1lbnRzKSBvdmVycmlkZQogICAgIHsKQEAgLTExMCw2ICsxMTUsMTEgQEAgUmVmPFNo
YXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcgogewogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3Rvcikp
OwogfQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgor
UmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFzayhGdW5jdG9yJiYg
ZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxG
dW5jdGlvblR5cGUsIEZ1bmN0b3I+KFdURjo6bW92ZShmdW5jdG9yKSkpOworfQogCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263871</attachid>
            <date>2015-10-22 15:10:16 -0700</date>
            <delta_ts>2015-10-22 16:47:45 -0700</delta_ts>
            <desc>adding code layout support</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>384694</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRp
bHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jhc2ljQmxvY2s6OkJh
c2ljQmxvY2sodW5zaWduZWQgaW5kZXgpCisgICAgOiBtX2luZGV4KGluZGV4KQoreworfQorCitC
YXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5k
KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCit2b2lk
IEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIz
OjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVt
b3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRl
Y2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxh
Y2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBt
X2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjpcbiIpOworICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1w
KHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCisjaW5jbHVk
ZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24u
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsK
K2NsYXNzIFZhbHVlOworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSo+IFZhbHVlTGlzdDsKKyAgICB0eXBlZGVmIFZlY3Rv
cjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEZy
ZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsgLy8gVGhpcyBtYXRjaGVzIENvbnRyb2xW
YWx1ZTo6U3VjY2Vzc29yTGlzdAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXgg
PSAiIyI7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBWYWx1ZUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZhbHVlTGlzdDo6aXRlcmF0b3IgZW5k
KCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZhbHVl
TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7
IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9
CisgICAgVmFsdWUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5k
ZXhdOyB9CisgICAgVmFsdWUqJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2lu
ZGV4XTsgfQorCisgICAgVmFsdWUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0
KCk7IH0KKyAgICBWYWx1ZSomIGxhc3QoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKwor
ICAgIGNvbnN0IFZhbHVlTGlzdCYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0K
KyAgICBWYWx1ZUxpc3QmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICB2b2lk
IGFwcGVuZChWYWx1ZSopOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhcHBlbmROZXcoUHJvY2VkdXJlJiwg
QXJndW1lbnRzLi4uKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdDsKKyAg
ICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBG
cmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgU3Vj
Y2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0OworCisgICAgQmFzaWNCbG9jayogc3VjY2Vz
c29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNz
b3JCbG9jayh1bnNpZ25lZCBpbmRleCk7CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Js
b2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKTsKKyAgICBTdWNjZXNzb3JDb2xs
ZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJs
b2NrcygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogcHJlZGVjZXNz
b3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsg
fQorICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
bV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgUHJlZGVjZXNzb3JMaXN0JiBwcmVk
ZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBQ
cmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2lu
ZGV4XTsgfQorCisgICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9v
bCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAg
Ly8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGlu
ZGV4KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWVMaXN0IG1fdmFsdWVzOwor
ICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKK307CisKK2NsYXNzIERlZXBCYXNp
Y0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKEJhc2ljQmxvY2sq
IGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxv
Y2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKEJh
c2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxvY2sp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9j
aworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxp
bmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Js
b2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJ
bmxpbmVzX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlw
ZSogQmFzaWNCbG9jazo6YXBwZW5kTmV3KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcHJvY2VkdXJlLmFkZDxW
YWx1ZVR5cGU+KGFyZ3VtZW50cy4uLik7CisgICAgYXBwZW5kKHJlc3VsdCk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKwordW5zaWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vzc29ycygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5udW1TdWNjZXNzb3Jz
KCk7Cit9CisKK0ZyZXF1ZW50ZWRCbG9jayBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5z
dWNjZXNzb3IoaW5kZXgpOworfQorCitGcmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nl
c3Nvcih1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFs
dWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2NvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nv
ckxpc3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0
KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBC
YXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOworfQorCitCYXNpY0Jsb2NrKiYgQmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIHN1Y2Nl
c3NvcihpbmRleCkuYmxvY2soKTsKK30KKworU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2Nr
LCBTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKQoreworICAgIHJl
dHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+KHN1Y2Nl
c3NvcnMoKSk7Cit9CisKK1N1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29u
c3QgU3VjY2Vzc29yTGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBT
dWNjZXNzb3JMaXN0PihzdWNjZXNzb3JzKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrVXRpbHNfaAorI2RlZmluZSBCM0Jhc2ljQmxv
Y2tVdGlsc19oCisKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBo
Tm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wg
YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
KQoreworICAgIEJhc2ljQmxvY2s6OkFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2Nr
LT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChwcmVkZWNlc3NvcnMuY29udGFpbnMocHJlZGVj
ZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcmVkZWNlc3NvcnMuYXBwZW5k
KHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJh
c2ljQmxvY2sgKnByZWRlY2Vzc29yKQoreworICAgIEJhc2ljQmxvY2s6OkFkamFjZW5jeUxpc3Qm
IHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBib29sIHJlc3VsdCA9
IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBwcmVkZWNlc3Nvcikgewor
ICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ktLV0gPSBwcmVkZWNlc3NvcnMubGFzdCgpOworICAg
ICAgICAgICAgcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IHRydWU7CisgICAgICAgICAgICAvLyBPdXQgb2YgY2F1dGlvbiwgd2Uga2VlcCBnb2luZyBldmVu
IHRob3VnaCB0aGUgcHJlZGVjZXNzb3IgbGlzdCBjYW5ub3QgaGF2ZQorICAgICAgICAgICAgLy8g
ZHVwbGljYXRlcy4KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFz
aWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAg
IEJhc2ljQmxvY2s6OkFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNl
c3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgeworICAgICAg
ICAgICAgcHJlZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVjb21wdXRl
cyBwcmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4K
K3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAgLy8gQ2xl
YXIgYWxsIHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBibG9ja3MpCisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisK
KyAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0JvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4g
d29ya2xpc3Q7CisgICAgd29ya2xpc3Qubm9kZShibG9ja3NbMF0pOworICAgIHdoaWxlIChCYXNp
Y0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICBp
ZiAod29ya2xpc3QuYWRkKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5w
cmVkZWNlc3NvcnMoKS5hcHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQorCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
YmxvY2tzW2ldLnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICBibG9ja3NbaV0g
PSBudWxscHRyOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
QmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNpbmNsdWRlICJC
M0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dy
YXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3Jh
cGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dv
cmtsaXN0OworCisvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFk
IGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBC
bG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQg
YmxvY2sgd29ya2xpc3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFs
b25nIHdpdGggdGhlIGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVp
bmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1
c2VmdWwgZm9yCisvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdo
aWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nl
c3NvciBpbmRleC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3Jr
bGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0
PEJhc2ljQmxvY2s+PjsKKwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwor
dHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOwor
Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNl
dDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jsb2NrV29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFp
cjsKKworbmFtZXNwYWNlIHsKKwordW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCit7Cisg
ICAgc3dpdGNoIChpbnN0Lm9yaWdpbi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgor
ICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIDI7
CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVjaWFsOjpDaGVja1Nw
ZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQorICAgIDogbV9jaGVj
a09wY29kZShvcGNvZGUpCisgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQoreworfQorCitD
aGVja1NwZWNpYWw6On5DaGVja1NwZWNpYWwoKQoreworfQorCitJbnN0IENoZWNrU3BlY2lhbDo6
aGlkZGVuQnJhbmNoKGNvbnN0IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAgSW5zdCBoaWRkZW5C
cmFuY2gobV9jaGVja09wY29kZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRlbkJyYW5jaC5hcmdz
LnJlc2l6ZShtX251bUNoZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DaGVj
a0FyZ3M7IGktLTspCisgICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzW2ldID0gaW5zdC5hcmdzW2kg
KyAxXTsKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0Nh
bGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmco
Y2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVj
a0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1Zh
bGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlk
KCkKKyAgICAgICAgJiYgaXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJn
cyArIDEsIGluc3QpOworfQorCitib29sIENoZWNrU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYg
aW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJn
SW5kZXggPCAxICsgbV9udW1DaGVja0FyZ3MpCisgICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2go
aW5zdCkuYWRtaXRzU3RhY2soYXJnSW5kZXggLSAxKTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJ
bXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7
Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGlu
c3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZmFpbCA9IGhpZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShq
aXQsIGNvbnRleHQpOworICAgIEFTU0VSVChmYWlsLmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZh
bHVlID0gaW5zdC5vcmlnaW47CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYg
KGlzQ2hlY2tNYXRoKHZhbHVlLT5vcGNvZGUoKSkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNv
ZGUoKSA9PSBDaGVja011bCkKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOwor
ICAgICAgICBlbHNlIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmFy
Z3NbMF0tPmlzSW50KDApKQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0
YW50KDApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJn
KGNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzJdKSk7CisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZv
ckFyZyhjb250ZXh0LmNvZGUsIGluc3QuYXJnc1sxXSkpOworICAgIH0gZWxzZSB7CisgICAgICAg
IEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2spOworICAgICAgICByZXBzLmFwcGVuZChW
YWx1ZVJlcDo6Y29uc3RhbnQoMSkpOworICAgIH0KKworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRl
eHQsIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgY29udGV4dC5s
YXRlUGF0aHMuYXBwZW5kKAorICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250
ZXh0OjpMYXRlUGF0aEZ1bmN0aW9uPigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBq
aXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgZmFpbC5s
aW5rKCZqaXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0YWNrbWFwKiBz
dGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGFj
a21hcCk7CisKKyAgICAgICAgICAgICAgICBTdGFja21hcDo6R2VuZXJhdGlvblBhcmFtcyBwYXJh
bXM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgcGFyYW1zLnN0YWNrbWFwID0gc3RhY2ttYXA7CisgICAgICAgICAgICAgICAgcGFyYW1zLnJl
cHMgPSByZXBzOworICAgICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2tt
YXAtPm1fdXNlZFJlZ2lzdGVyczsKKworICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5tX2dlbmVy
YXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0pKTsKK30KKwordm9pZCBDaGVj
a1NwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fY2hlY2tPcGNvZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQg
Q2hlY2tTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoIkIzOjpDaGVja1ZhbHVlIGxvd2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwg
IiB3aXRoICIsIG1fbnVtQ2hlY2tBcmdzLCAiIGFyZ3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNp
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNp
YWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3Bl
Y2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrU3BlY2lhbF9oCisj
ZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1
ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCisvLyBXZSB3YW50IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwg
YnV0IHRoZW4gd2Ugd2FudCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKKy8vIG91dC1vZi1s
aW5lIGNvZGUgaW5zdGVhZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24s
IGEgQ2hlY2tTcGVjaWFsIHdpbGwgcmVtZW1iZXIKKy8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2Ug
aGF2ZSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3Zlcmxv
YWQgd2Ugd2FudC4gSXQKKy8vIHdpbGwgY3JlYXRlIGFuIEluc3Qgd2l0aCB0aGF0IG9wY29kZSBw
bHVzIHRoZSBhcHByb3ByaWF0ZSBhcmdzIGZyb20gdGhlIG93bmluZyBJbnN0IHdoZW5ldmVyIHlv
dQorLy8gY2FsbCBhbnkgb2YgdGhlIGNhbGxiYWNrcy4KKy8vCisvLyBOb3RlIHRoYXQgZm9yIENo
ZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsIHdlIGV4cGVjdCB0aGF0IHRoZSBCMyBhcmd1
bWVudHMgYXJlIHRoZSByZXZlcnNlCisvLyBvZiB0aGUgQWlyIGFyZ3VtZW50cyAoQWRkKGEsIGIp
ID0+IEFkZDMyIGIsIGEpLiBFeGNlcHQ6CisvLyAtIENoZWNrU3ViKDAsIHgpLCB3aGljaCB0dXJu
cyBpbnRvIEJyYW5jaE5lZzMyIHguCisvLyAtIENoZWNrTXVsKGEsIGIpLCB3aGljaCB0dXJucyBp
bnRvIE11bDMyIGIsIGEgYnV0IHdlIHBhc3MgQW55IGZvciBhJ3MgVmFsdWVSZXAuCisKK2NsYXNz
IENoZWNrU3BlY2lhbCA6IHB1YmxpYyBTdGFja21hcFNwZWNpYWwgeworcHVibGljOgorICAgIENo
ZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5D
aGVja1NwZWNpYWwoKTsKKworICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3Qg
cmVwcmVzZW50aW5nIHRoZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAgIEluc3QgaGlk
ZGVuQnJhbmNoKGNvbnN0IEluc3QmKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9y
RWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJn
Q2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJy
aWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgp
IG92ZXJyaWRlOworCisgICAgLy8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVy
YXRlIHRoZSBoaWRkZW4gYnJhbmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAor
ICAgIC8vIGdlbmVyYXRlcyB0aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVsZXBycyYsIEdlbmVyYXRp
b25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOwor
ICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBCM0NoZWNrU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisK
K3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUg
QjNDaGVja1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNr
bWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1Zh
bHVlIDogcHVibGljIENoZWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9w
Y29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBj
YXNlIENoZWNrQWRkOgorICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNr
TXVsOgorICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlz
IGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+
dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50
KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkp
OworICAgICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1
YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0g
Zm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQo
b3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRl
ICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVtcElSKCkKK3sKKyAgICByZXR1cm4gRlRMOjp2
ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkgfHwgRlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHko
KSB8fCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZER1bXBJUkF0
RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2Uo
KTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCkKK3sKKyAgICByZXR1cm4gREZHOjp2YWxp
ZGF0aW9uRW5hYmxlZCgpIHx8IHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOworfQorCiti
b29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6
OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFNhdmVJUkJlZm9y
ZVBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZVZhbGlkYXRpb25GYWlsdXJl
KCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisj
ZGVmaW5lIEIzQ29tbW9uX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jv
b2wgc2hvdWxkRHVtcElSKCk7Citib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Citib29s
IHNob3VsZFZhbGlkYXRlSVIoKTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7
Citib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gQjNDb21tb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRl
cm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWRO
b3RaZXJvMSA9IEFuZChMb2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBB
bmQobGVmdCwgTG9hZChhZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQor
CitUZXN0TG9hZFplcm8xID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitU
ZXN0TG9hZFplcm8yID0gRXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3Ra
ZXJvID0gRXF1YWwoQW5kKGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChM
b2FkKGFkZHJlc3MpLCByaWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJl
c3MpKQorTm90ID0gRXF1YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M0NvbnN0MzJWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29u
c3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNDb25zdDMyVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBD
b25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAK
KyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwg
b3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAg
ICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30K
Kwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0Nv
bnN0NjRWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAg
aW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBD
b25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91
YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZh
bHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91Ymxl
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisg
ICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKworICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBv
cmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUs
IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZh
bHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRl
ckR1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVl
X2gKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsK
KworY2xhc3MgQ29udHJvbFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgICAgICBjYXNlIEp1bXA6CisgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAg
ICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBPb3BzOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGNhc2UgU3dpdGNoOiAKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgaGVyZSBi
ZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEgc3ViY2xhc3Mgb2YgQ29udHJvbFZhbHVlLCBzbyB3ZSB3
YW50CisgICAgICAgICAgICAvLyBzd3RpY2hWYWx1ZS0+YXM8Q29udHJvbFZhbHVlPigpIHRvIHJl
dHVybiBub24tbnVsbC4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgdHlw
ZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAgfkNv
bnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0
dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaV07IH0KKyAgICBG
cmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNj
ZXNzb3JzW2ldOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0
IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1
YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRy
b2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBv
cGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAv
LyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3Vj
Y2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1
bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQp
CisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAg
Ly8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQp
OworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVl
KAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBu
bykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9z
dWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsK
KyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29u
dHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5
Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1
ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIz
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRnJlcXVlbmN5Q2xhc3Mg
ZnJlcXVlbmN5KQoreworICAgIHN3aXRjaCAoZnJlcXVlbmN5KSB7CisgICAgY2FzZSBGcmVxdWVu
Y3lDbGFzczo6Tm9ybWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vcm1hbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBGcmVxdWVuY3lDbGFzczo6UmFyZToKKyAgICAgICAgb3V0LnByaW50
KCJSYXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzRnJlcXVlbmN5Q2xhc3NfaAorI2RlZmluZSBCM0ZyZXF1ZW5jeUNsYXNz
X2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgRnJlcXVl
bmN5Q2xhc3MgOiB1aW50OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBoeXBvdGhlc2lz
IGFib3V0IHRoZSBmcmVxdWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0LiBUaGlz
IGlzCisgICAgLy8gdGhlIGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJhc2ljIGJsb2Nr
IGZyZXF1ZW5jeSBpbiB0aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8gV2UgZXhwZWN0
IHRoYXQgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hlZCBzdXBlciBy
YXJlbHkuIEl0J3MgdmFsaWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlvbnMgdGhhdCBw
dW5pc2ggUmFyZSBjb2RlLiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRpb25zIHdoZXJl
IHlvdQorICAgIC8vIGhhdmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJlcXVlbmN5IGNs
YXNzIGZyb20gYSBtZXJnaW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAgICAvLyB0aGlz
IGhhcHBlbnMsIG5ldmVyIGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3JtYWwuIFRoaXMg
aXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNoIFJhcmUgY29k
ZSB2ZXJ5IGJhZGx5LgorICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW5jeUNsYXNzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVudGVkQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBCM0ZyZXF1
ZW50ZWRCbG9ja19oCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5
cGVkZWYgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVkQmxvY2s7
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNGcmVxdWVudGVkQmxv
Y2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJp
Y0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBCM0dlbmVyaWNGcmVxdWVu
dGVkQmxvY2tfaAorCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVxdWVudGVkIGJsb2NrIGlzIGEgdHVwbGUg
b2YgQmFzaWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNzLiBJdCdzIHVzdWFsbHkgdXNlZCBhcyBh
CisvLyBzdWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Ns
YXNzIEdlbmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVibGljOgorICAgIGV4cGxpY2l0IEdlbmVy
aWNGcmVxdWVudGVkQmxvY2soCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbnVsbHB0ciwg
RnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAg
ICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKKyAg
ICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jayA9PSBvdGhlci5tX2Js
b2NrCisgICAgICAgICAgICAmJiBtX2ZyZXF1ZW5jeSA9PSBvdGhlci5tX2ZyZXF1ZW5jeTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisK
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAqdGhpcyAhPSBGcmVxdWVudGVkQmxvY2soKTsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBi
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYmxvY2so
KSB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29u
c3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoZnJlcXVlbmN5KCkgIT0gRnJlcXVlbmN5Q2xhc3M6
Ok5vcm1hbCkKKyAgICAgICAgICAgIG91dC5wcmludChmcmVxdWVuY3koKSwgIjoiKTsKKyAgICAg
ICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKG1fYmxvY2spKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBGcmVxdWVuY3lDbGFzcyBtX2ZyZXF1ZW5jeTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNHZW5lcmljRnJl
cXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhN
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisjZGVmaW5lIEIzSW5k
ZXhNYXBfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBh
IG1hcCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQg
Zm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlv
dSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNhbiBo
YXZlIHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVz
LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5kZXhN
YXAgeworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkKKyAg
ICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJl
c2l6ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsK
KyAgICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgeworICAg
ICAgICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICBjb25zdCBWYWx1
ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVl
PiBtX3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0Jp
dFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhh
dmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdz
IG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1h
bnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBp
bmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBh
IHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9
IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVi
bGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7Cisg
ICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
IG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IElu
ZGV4U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAg
ICAgICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNs
YXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQor
ICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBl
JiBjb2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikK
KyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAg
ICAgICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3Ro
ZXIubV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsK
KyAgICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7
CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkp
OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xs
ZWN0aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8v
IEZvciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2Vk
dXJlKTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNl
dC52YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xs
ZWN0aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENv
bGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0
ZXJhYmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBC
aXRWZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIg
Y29tbWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkK
KyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBh
dHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisKKyMgVGhlc2Ug
cnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0aGUgdG9wLiBJ
dCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJldmVyIHBvc3Np
YmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hlciBpcyBhbiBl
eGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9IExvYWQoYWRk
cmVzcykKKworIyBXZSBwcm9iYWJseSBkb24ndCBuZWVkIHRoZXNlIGZvcm1zLgorQWRkTG9hZDEg
PSBBZGQoTG9hZChhZGRyZXNzKSwgdmFsdWUpCitBZGRMb2FkMiA9IEFkZCh2YWx1ZSwgTG9hZChh
ZGRyZXNzKSkKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkMSA9IFN0b3Jl
KEFkZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZUFkZExvYWQyID0gU3Rv
cmUoQWRkKHZhbHVlLCBMb2FkKGFkZHJlc3MpKSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0
b3JlKEFuZChMb2FkKGFkZHJlc3MpLCB2YWx1ZSksIGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZh
bHVlLCBhZGRyZXNzKQorCitSZXR1cm4gPSBSZXR1cm4odmFsdWUpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1
ZSgpCit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIm9mZnNldCA9
ICIsIG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZpbmUgQjNNZW1vcnlWYWx1ZV9oCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAg
ICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2Fk
RmxvYXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAg
IGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0
b3JlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUo
KTsKKworICAgIGludHB0cl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVz
ZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0
aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJl
dHVybmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwg
T3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwK
KyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bj
b2RlLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgor
ICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAg
ICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0
eXBlID09IERvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3Rv
cmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJU
KHR5cGUgPT0gVm9pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hl
cmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQg
aW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnRw
dHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIG9wY29kZSA9
PSBMb2FkRmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAs
IG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7
CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOFo6
CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAg
ICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jl
cy4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAg
IGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9p
ZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisg
ICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBT
dG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBT
dG9yZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzTWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIG91dC5wcmlu
dCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAvLyBGSVhNRQorICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIxNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNvZGVfaAorCisjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
ZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lk
LCB1c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAor
ICAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55IHZhbHVl
IHR5cGUuCisgICAgSWRlbnRpdHksCisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUgQ29uc3RW
YWx1ZSogY2xhc3Nlcy4gQ29uc3RhbnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3csIHNvIHRo
YXQgd2UgY2FuCisgICAgLy8gcmVhc29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0
aGVtLiBMYXJnZSBjb25zdGFudHMgYXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgQ29uc3Qz
MiwKKyAgICBDb25zdDY0LAorICAgIENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1hZ2ljYWwg
c3RhY2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhl
IHByb2dyYW0gcmVnYXJkbGVzcyBvZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3Ug
cHV0IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBkaXNqb2lu
dCByYW5nZSBvZgorICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBj
bGFzcy4KKyAgICBTdGFja1Nsb3QsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdp
c3Rlci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dy
YW0KKyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0
LCBhbmQgdGhlIGNvbXBpbGVyIHRha2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBk
b24ndCBjbG9iYmVyIHRoZSB2YWx1ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNhbGxzIChl
aXRoZXIgYnkgc2F2aW5nIHRoZSBhcmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBvciBwcmVz
ZXJ2aW5nIGl0IGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVn
VmFsdWUgY2xhc3MuIFRoZSByZXR1cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2ludGVyKCkg
KGZvciBHUFJzKSBvciBEb3VibGUgKGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywKKworICAg
IC8vIFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRy
b2wgZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRl
ciwgd2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50
ZXIgdGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBv
aW50ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91
bGQqIGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAg
IEZyYW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFu
eSB2YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKwor
ICAgIC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIs
IGJlaGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0
T3IsCisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisKKyAgICAv
LyBDYXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBT
RXh0OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6
CisgICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3Vi
bGU6CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgor
ICAgIElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERU
b0kzMiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkg
dmFsdWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8v
IGlzIGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVz
c1RoYW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVh
bCwKKworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgor
ICAgIEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwKKyAgICBCZWxvd0VxdWFsLAor
CisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0
aGUgbG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1
cm4gSW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAorICAgIExv
YWQxNlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisgICAg
Ly8gVGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExvYWQsCisK
KyAgICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMg
c3RvcmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQz
MiB2YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEg
RG91YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3Jw
aGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAg
ICAvLyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRo
ZSBzeXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhl
IGFyZ3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwK
KworICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBj
bGFzcy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0
IG9ubHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2Fs
bGJhY2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0
YWNrbWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1l
bnQgbXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBz
dGFja21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJl
cXVlc3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQg
ZnJvbSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8g
c3RhY2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBD
aGVja1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2Vu
ZXJhdGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21l
IGNvZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAg
Ly8gZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91IGFsc28g
Z2V0IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJlIG5vdCBh
bGxvd2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91ciBzbG93
IHBhdGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4
ZWN1dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0
IGhhcHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6
CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hlY2tBZGQo
eCwgeSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoK
KyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVudGl0eShh
KQorICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFj
a3MgdXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAg
ICAvLyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlm
IHRoZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFmdGVyIHRo
ZSBmaXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3Qg
aGF2ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vj
b25kIENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0FkZCwKKyAg
ICBDaGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lkZS1leGl0
cy4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmllbmRzLCB0
aGlzIGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJhY2suIFRo
aXMgdGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisg
ICAgLy8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0
cnVlIHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0aC4KKyAg
ICBDaGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4K
KyAgICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQ
aGksCisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgSnVt
cCwKKyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1
ZSB0eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBD
b250cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0
cnVlIHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92
ZXIgZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAg
ICBTd2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0
IGtub3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFueQorICAg
IC8vIHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisKKyAg
ICAvLyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVy
IGdldCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcworfTsKKwor
aW5saW5lIGJvb2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNl
IENoZWNrTXVsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFt
ZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmln
aW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM09yaWdpbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBP
cmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9y
aWdpbigiLCBSYXdQb2ludGVyKG1fZGF0YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKworI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworLy8gV2hvZXZlciBnZW5lcmF0ZXMgQjNJUiBjYW4gY2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9u
IHZhbHVlcy4gV2hlbiB5b3UgZG8gdGhpcywgQjMgd2lsbCBiZSBhYmxlIHRvCisvLyBhY2NvdW50
LCBkb3duIHRvIHRoZSBtYWNoaW5lIGNvZGUsIHdoaWNoIGluc3RydWN0aW9uIGNvcnJlc3BvbmRz
IHRvIHdoaWNoIG9yaWdpbi4gQjMKKy8vIHRyYW5zZm9ybWF0aW9ucyBtdXN0IHByZXNlcnZlIE9y
aWdpbnMgY2FyZWZ1bGx5LiBJdCdzIGFuIGVycm9yIHRvIHdyaXRlIGEgdHJhbnNmb3JtYXRpb24g
dGhhdAorLy8gZWl0aGVyIGRyb3BzIE9yaWdpbnMgb3IgbGllcyBhYm91dCB0aGVtLgorY2xhc3Mg
T3JpZ2luIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9
IG51bGxwdHIpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIGNv
bnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCB2b2lkKiBt
X2RhdGE7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzT3Jp
Z2luX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50
VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0
Y2hwb2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorCisjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGF0Y2hwb2lu
dFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50VmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFj
a21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZp
bmUgQjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsg
fQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFBhdGNo
cG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25z
dCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hw
b2ludCwgdHlwZSwgb3JpZ2luLCBjaGlsZHJlbikKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIK
KworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sK
K30KKworUHJvY2VkdXJlOjp+UHJvY2VkdXJlKCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2Vk
dXJlOjphZGRCbG9jaygpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2Nr
ID0gc3RkOjptYWtlX3VuaXF1ZTxCYXNpY0Jsb2NrPihtX2Jsb2Nrcy5zaXplKCkpOworICAgIEJh
c2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6
Om1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVyZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gKKyNk
ZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
QmFzaWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisKKyAgICBQcm9jZWR1cmUoKTsKKyAgICB+UHJvY2VkdXJlKCk7CisKKyAgICBC
YXNpY0Jsb2NrKiBhZGRCbG9jaygpOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50
cy4uLik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Js
b2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9
CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1
cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAg
ICAgICBpdGVyYXRvcigpOgorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAg
ICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0
ZXJhdG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAg
IDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsK
KyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAg
ICAgICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVy
ZS0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1
cm4gaW5leDsKKyAgICAgICAgfQorCisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7Cisg
ICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgY2xh
c3MgVmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xsZWN0
aW9uKFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9j
ZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgICAg
ICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKFByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fcHJv
Y2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3Iq
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmJs
b2NrKG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisgICAg
ICAgICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMu
c2l6ZSgpKTsgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3By
b2NlZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF07IH0KKyAgICAg
ICAgVmFsdWUqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGlu
ZGV4KTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBQcm9jZWR1cmUmIG1fcHJv
Y2VkdXJlOworICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIHsgcmV0dXJu
IFZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxWYWx1ZT4+IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzUHJvY2VkdXJlSW5saW5lc19oCisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19o
CisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRk
KEFyZ3VlbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBl
PiB2YWx1ZShuZXcgVmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7Cisg
ICAgVmFsdWVUeXBlKiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQo
V1RGOjptb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0YWNrU2xv
dEtpbmQuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RG
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9j
a2VkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91
czoKKyAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtp
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RL
aW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Ns
b3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9o
CisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitlbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxv
Y2tlZCBzdGFjayBzbG90IG5lZWRzIHRvIGJlIGtlZXAgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJz
IGJlY2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5v
dCBvYnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVz
cyBvZiBhIHN0YWNrCisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBz
dGFjayBzbG90cyBjb3VsZCBzaGFyZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92
aWRlZCB0aGF0IHRoZXkgYXJlbid0IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUg
Y29tcGlsZXIgc3RpbGwgaGFzIHRvIGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2Fu
IGJlIGVzY2FwZWQKKyAgICAvLyBleHBsaWNpdGx5IGluIElSLgorICAgIEFub255bW91cworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQ
cmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6
U3RhY2tTbG90S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNTdGFj
a1Nsb3RLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30K
Kwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIs
IG1fa2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RW
YWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5k
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsK
K2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RW
YWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3Rh
Y2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGls
YXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAg
IC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMg
aXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lk
IHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0
RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBQcm9jZWR1cmU7CisKKyAgICBTdGFja1Nsb3RWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2lu
IG9yaWdpbiwgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKKyAgICAgICAg
OiBWYWx1ZShpbmRleCwgU3RhY2tTbG90LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBt
X2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1f
b2Zmc2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7
CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90
VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3Rh
Y2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2tt
YXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAg
ICAgICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRlcihtX29wYXF1ZSksICIsIHJlcHMgPSAiLCBsaXN0
RHVtcChtX3JlcHMpLAorICAgICAgICAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2Vu
ZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsCisgICAgICAgICIs
IHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIz
U3RhY2ttYXBfaAorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRh
c2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrU3Bl
Y2lhbDsKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBTdGFj
a21hcCB7CitwdWJsaWM6CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgeworICAgICAgICAv
LyBUaGlzIGlzIHRoZSBWYWx1ZSBjb250YWluaW5nIHRoZSBzdGFja21hcC4KKyAgICAgICAgVmFs
dWUqIHZhbHVlOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgorICAgICAgICBT
dGFja21hcCogc3RhY2ttYXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVh
bCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAgICAgVmVjdG9y
PFZhbHVlUmVwPiByZXBzOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3Rl
cnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7Cisg
ICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxw
ZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxH
ZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7
CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBz
dGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisg
ICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhh
dmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBh
bGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2
ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNy
ZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAg
IHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxw
ZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0
T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdp
c2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkg
Y29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAv
LyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNr
bWFwLiBOb3RlIHRoYXQgaW5kZXggemVybyByZWZlcnMgdG8gdGhlCisgICAgLy8gZmlyc3QgYXJn
dW1lbnQgdG8gdGhhdCBWYWx1ZSwgZXZlbiBpZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJh
aW5hYmxlLiBGb3IgZXhhbXBsZSwgaW4gYQorICAgIC8vIENoZWNrQWRkIHZhbHVlLCBpdCB3b3Vs
ZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZh
bHVlLCBpdCB3b3VsZAorICAgIC8vIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBC
dXQsIHdoZW4gdGhlIGdlbmVyYXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuIGRlcGVu
ZAorICAgIC8vIG9uIHRoZSByZXBzIGZvciB0aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4K
KyAgICB2b2lkIGNvbnN0cmFpbih1bnNpZ25lZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkK
KyAgICB7CisgICAgICAgIGlmIChpbmRleCArIDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAg
ICAgbV9yZXBzLmdyb3coaW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsK
KyAgICB9CisKKyAgICB2b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7
CisgICAgICAgIG1fY2xvYmJlcmVkLm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVn
aXN0ZXJTZXQmIGNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAg
ICB2b2lkIHNldEdlbmVyYXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgewor
ICAgICAgICBtX2dlbmVyYXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2Vu
ZXJhdG9yRnVuY3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVj
aWFsOworICAgIGZyaWVuZCBjbGFzcyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCog
bV9vcGFxdWUgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAg
UmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVy
ZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQg
YmUgZnVydGhlciBkdXBsaWNhdGVkIGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2Ug
anVzdCBtZXJnZSB0aGUgdXNlZCByZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVu
LgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFw
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNp
YWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3Rh
Y2ttYXBTcGVjaWFsKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBTcGVjaWFsKG5hbWUpCit7Cit9
CisKK1N0YWNrbWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgU3Rh
Y2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJ
bnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICByZXR1cm4gZm9yRWFjaEFy
Z0ltcGwoMCwgMSwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6
aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0
KTsKK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVu
c2lnbmVkIGFyZ0luZGV4KQoreworICAgIHJldHVybiBhZG1pdHNTdGFjaygwLCAxLCBpbnN0LCBh
cmdJbmRleCk7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJz
KEluc3QmIGluc3QsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIFZh
bHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVl
LT5zdGFja21hcCgpOworCisgICAgLy8gRklYTUU6IElmIHRoZSBJbnN0IHRoYXQgdXNlcyB0aGUg
U3RhY2ttYXBTcGVjaWFsIGdldHMgZHVwbGljYXRlZCwgdGhlbiB3ZSBlbmQgdXAgbWVyZ2luZyB1
c2VkCisgICAgLy8gcmVnaXN0ZXIgc2V0cyBmcm9tIG11bHRpcGxlIHBsYWNlcy4gVGhpcyBjdXJy
ZW50bHkgd29uJ3QgaGFwcGVuIHNpbmNlIEFpciBkb2Vzbid0IGhhdmUgdGFpbGR1cAorICAgIC8v
IG9yIHRoaW5ncyBsaWtlIHRoYXQuIEJ1dCBtYXliZSBldmVudHVhbGx5IGl0IGNvdWxkIGJlIGEg
cHJvYmxlbS4KKyAgICBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzLm1lcmdlKHVzZWRSZWdpc3Rl
cnMpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgU3RhY2ttYXBTcGVjaWFsOjpleHRyYUNsb2Ji
ZXJlZFJlZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsK
KyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHJldHVy
biBzdGFja21hcC0+Y2xvYmJlcmVkKCk7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JF
YWNoQXJnSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6
RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5v
cmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVu
ZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOwor
ICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOwor
ICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUt
PmNoaWxkcmVuLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytp
KSB7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsK
KyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJn
cyk7CisKKyAgICAgICAgY2FsbGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBl
KGNoaWxkLT50eXBlKCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1Zh
bGlkSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25v
cmVkQXJnQXJncywKKyAgICBJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qu
b3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBl
bmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsK
KyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsK
KworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgQVNT
RVJUKHN0YWNrbWFwKTsKKworICAgIC8vIEZvciB0aGUgSW5zdCB0byBiZSB2YWxpZCwgaXQgbmVl
ZHMgdG8gaGF2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoaW5zdC5h
cmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzICE9IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkg
LSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdh
cmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVt
ZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3Qg
aGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRp
b25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kp
IHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNB
cmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdz
XTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNl
IEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1t
NjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6
CisgICAgICAgICAgICBicmVhazsgLy8gT0sKKyAgICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAg
ICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
ICYmCisgICAgICAgICAgICAgICAgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5
cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSBudW1i
ZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9m
IEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChzdGFja21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1
ZS0+Y2hpbGRyZW4uc2l6ZSgpKTsKKworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBzdXBw
bGllZCBjb25zdHJhaW50cy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNBcmdz
OyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hp
bGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgIFZhbHVlUmVwJiByZXAgPSBzdGFja21hcC0+
bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpIC0gbnVtSWdub3JlZEIz
QXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsKKworICAgICAgICBzd2l0Y2ggKHJlcC5raW5kKCkp
IHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICAgICAgLy8gV2UgYWxyZWFk
eSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKGFyZyAhPSBUbXAocmVw
LnJlZygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgICAgICAvLyBUaGlzIGlz
IG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChhcmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5v
ZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICAgICAg
Ly8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0
c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAg
ICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2
YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVuc2lnbmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJ
bmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsgbnVtSWdub3JlZEIzQXJnczsKKworICAgIGlmIChz
dGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8v
IFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8gY29uc3RyYWludC4KKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdz
LCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBpbnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tB
cmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8gYSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAo
c3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0luZGV4XS5raW5kKCkgPT0gQW55KQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFZhbHVlUmVw
PiBTdGFja21hcFNwZWNpYWw6OnJlcHMoR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIEluc3Qm
IGluc3QpCit7CisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXN1bHQ7CisgICAgYXBwZW5kUmVwc0lt
cGwoY29udGV4dCwgMSwgaW5zdCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwoCisgICAgR2VuZXJhdGlvbkNvbnRl
eHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBJbnN0JiBpbnN0LCBWZWN0b3I8
VmFsdWVSZXA+JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEFy
Z3M7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVw
Rm9yQXJnKGNvbnRleHQuY29kZSwgYXJnKSk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdz
W2ldOworICAgIH0KK30KKworVmFsdWVSZXAgU3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JBcmcoQ29k
ZSYgY29kZSwgY29uc3QgQXJnJiBhcmcpCit7CisgICAgc3dpdGNoIChhcmcua2luZCgpKSB7Cisg
ICAgY2FzZSBUbXA6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgSW1tOgorICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIHJl
dHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQoYXJnLnZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChhcmcuYmFzZSgpID09IEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0
KCkpOworICAgICAgICBBU1NFUlQoYXJnLmJhc2UoKSA9PSBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZz
ZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVmFsdWVSZXAoKTsKKyAgICB9Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzU3RhY2ttYXBTcGVjaWFsX2gKKyNkZWZpbmUgQjNTdGFja21hcFNwZWNpYWxfaAorCisj
aW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBz
cGVjaWFscyB0aGF0IGhhdmUgc3RhY2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0
YWNrbWFwIGJ5CisvLyBhc2tpbmcgZm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ug
b2JqZWN0cyBkb24ndCBuZWVkIHRvIGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0
YWNrbWFwLgorCitjbGFzcyBTdGFja21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsK
K3B1YmxpYzoKKyAgICBTdGFja21hcFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNw
ZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBj
b25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7
CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRz
U3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQg
cmVwb3J0VXNlZFJlZ2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJy
aWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0
Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBn
ZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21l
CisgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgorCisgICAgdm9pZCBmb3JF
YWNoQXJnSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQg
bnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJk
YTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBib29sIGlzVmFsaWRJbXBsKAor
ICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWly
QXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBhZG1pdHNTdGFja0ltcGwoCisg
ICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJB
cmdzLAorICAgICAgICBBaXI6Okluc3QmKTsKKworICAgIC8vIEdldHMgdGhlIHJlcHMgYXJyYXkg
dGhlIHdheSB0aGF0IHRoZSBzdGFja21hcCBnZW5lcmF0b3IgY2FsbGJhY2sgd291bGQgd2FudC4K
KyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHMoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIEFpcjo6
SW5zdCYpOworCisgICAgLy8gQXBwZW5kcyB0aGUgcmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBz
dGFydGluZyB3aXRoIG51bUlnbm9yZWRBcmdzLCB0byB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgIHZv
aWQgYXBwZW5kUmVwc0ltcGwoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUln
bm9yZWRBcmdzLCBBaXI6Okluc3QmLCBWZWN0b3I8VmFsdWVSZXA+Jik7CisKKyAgICBzdGF0aWMg
VmFsdWVSZXAgcmVwRm9yQXJnKEFpcjo6Q29kZSYsIGNvbnN0IEFpcjo6QXJnJik7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxl
Y3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nl
c3NvckNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdWNjZXNz
b3JDb2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBnZW5lcmljIHdyYXBwZXIg
YXJvdW5kIGxpc3RzIG9mIGZyZXF1ZW50ZWQgYmxvY2tzLCB3aGljaCBnaXZlcyB5b3UganVzdCB0
aGUgYmxvY2tzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrLCB0eXBlZGVmIFN1Y2Nl
c3Nvckxpc3Q+CitjbGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNj
ZXNzb3JDb2xsZWN0aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxp
c3QpCisgICAgeworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9s
aXN0LnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9j
ayogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQor
ICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5k
ZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVy
YXRvcigpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAg
LCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN1
Y2Nlc3NvckNvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3Iq
KCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQo
bV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lkbmV4ID09IG90
aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN1Y2Nl
c3NvckNvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7Cisg
ICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7
IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9
CisKK3ByaXZhdGU6CisgICAgU3VjY2Vzc29yTGlzdCYgbV9saXN0OworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2Fz
ZS5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCit2b2lkIFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV9jYXNlVmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKG1fdGFy
Z2V0KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1N3aXRjaENhc2VfaAorI2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaW5jbHVkZSAiQjNG
cmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7Cisg
ICAgfQorCisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwgY29uc3QgRnJlcXVlbnRl
ZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUoY2FzZVZhbHVlKQorICAgICAg
ICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0KKworICAgIGludDY0X3QgY2Fz
ZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBGcmVxdWVudGVkQmxv
Y2sgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKyAgICBCYXNpY0Jsb2NrKiB0
YXJnZXRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmJsb2NrKCk7IH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90
IGNhc2VWYWx1ZTsKKyAgICBGcmVxdW50ZWRCbG9jayB0YXJnZXQ7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbGR1ZSAiQjNTd2l0Y2hWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hW
YWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgU3dpdGNoQ2FzZSByZXN1bHQgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhd
OworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1f
c3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBT
d2l0Y2hWYWx1ZTo6YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQorewor
ICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNj
ZXNzb3JzW21fc3VjY2Vzc29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7Cisg
ICAgbV92YWx1ZXMuYXBwZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3
aXRjaFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRo
aXMgZGVzdHJ1Y3RpdmVseSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAg
ICBvdXQucHJpbnQobGlzdER1bXAoKnRoaXMpLCAiLCBmYWxsVGhyb3VnaCA9ICIsIGZhbGxUaHJv
dWdoKCkpOworfQorCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9y
aWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVl
KGluZGV4LCBTd2l0Y2gsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxU
aHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1N3aXRjaFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpbmNs
dWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMg
Q29udHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBv
cGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgp
OworCisgICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAg
dW5zaWduZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsg
fQorCisgICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBz
YW1lIGluZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlc1tpXTsgfQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYg
Y2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICBGcmVxdWVudGVk
QmxvY2sgZmFsbFRocm91Z2goKSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9
CisgICAgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMo
KS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBudW1DYXNl
VmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNlIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENhc2UoY2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29y
KGluZGV4KSk7CisgICAgfQorICAgIFN3aXRjaENhc2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICAgICAgOiBtX3N3aXRjaChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hW
YWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1
ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0
b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBTd2l0Y2hWYWx1ZSogbV9zd2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBh
bmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBm
cm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhp
cyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cK
KyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUg
Y2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25l
ZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNo
Q2FzZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2Nr
KiBmYWxsVGhyb3VnaCk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlw
ZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZv
aWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
eXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5j
bHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lkLAorICAgIEludDMyLAorICAgIEludDY0LAorICAg
IERvdWJsZQorfTsKKworaW5saW5lIGJvb2wgaXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVy
biB0eXBlID09IEludDMyIHx8IHR5cGUgPT0gSW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxv
YXQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5l
IFR5cGUgcG9pbnRlcigpIGNvbnN0Cit7CisgICAgaWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAg
ICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVybiBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVXBzaWxvblZhbHVlOjp+VXBzaWxvblZh
bHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJeIiwgbV9waGktPmluZGV4KCkpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNp
bG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2lsb25WYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBVcHNpbG9uVmFs
dWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bj
b2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVwc2lsb247IH0KKworICAgIH5VcHNpbG9u
VmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQorCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgVXBz
aWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZh
bHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1
ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5
cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQorCisgICAgVmFsdWUqIG1fcGhpOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhbHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZh
bHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlz
IGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVy
IFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFs
dWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVu
IHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhl
biB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWdu
ZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4g
b3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsK
KyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKyAgICB2b2lkKiBt
aXNjID0gdGhpcy0+bWlzYzsKKworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5
cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIChp
bmRleCwgSWRlbnRpZnksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOworCisgICAgdGhpcy0+b3duZXIg
PSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworICAgIHRoaXMt
Pm1pc2MgPSBtaXNjOworfQorCit2b2lkIFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIFZh
bHVlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCht
X3R5cGUsICIgIiwgKnRoaXMsICIgPSAiLCBtX29wY29kZSk7CisKKyAgICBvdXQucHJpbnQoIigi
KTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChWYWx1ZSogY2hpbGQgOiBjaGls
ZHJlbigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGNoaWxkKSk7CisK
KyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJpbmdPdXQ7CisgICAgZHVtcE1ldGEoc3RyaW5nT3V0
KTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKKyAgICBpZiAo
c3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cmluZyk7CisKKyAg
ICBvdXQucHJpbnQoIikiKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwor
Ym9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKwor
aW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUo
KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3QKK3sKK30K
KworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBB
ZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBEaXY6CisgICAgY2Fz
ZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJp
dE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAg
ICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAg
IGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiBmaXJzdENoaWxkLT50eXBlKCk7CisgICAg
Y2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJldHVybiBwb2ludGVyKCk7CisgICAgY2FzZSBT
RXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBjYXNlIERUb0kzMjoKKyAgICBjYXNlIEVxdWFs
OgorICAgIGNhc2UgTm90RXF1YWw6CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0
ZXJUaGFuOgorICAgIGNhc2UgTGVzc0VxdWFsOgorICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAg
IGNhc2UgQWJvdmU6CisgICAgY2FzZSBCZWxvdzoKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAg
Y2FzZSBCZWxvd0VxdWFsOgorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgY2FzZSBTRXh0MzI6
CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIHJldHVybiBJbnQ2NDsKKyAgICBjYXNlIEZSb3Vu
ZDoKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgY2FzZSBOb3A6
CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzT3JpZ2lu
LmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8
VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQ
cmVmaXggPSAiQCI7CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4g
dHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bj
b2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRp
dHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAg
ICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBW
YWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsg
fQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGls
ZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhl
IG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAg
IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBj
b25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47
IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworICAgIHZvaWQgcmVw
bGFjZVdpdGhOb3AoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAg
IHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgaG93
IHlvdSBjYXN0IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGlu
ZyBwcm92aWRlZCB0aGF0IHdlIGhhdmUgYQorICAgIC8vIEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBj
YW4gZG86CisgICAgLy8KKyAgICAvLyBpZiAoQXJndW1lbnRSZWdWYWx1ZSogYXJndW1lbnRSZWcg
PSB2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkgeworICAgIC8vICAgICB0aGluZ3MKKyAg
ICAvLyB9CisgICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhpcyBvcGNv
ZGUoKSAhPSBBcmd1bWVudFJlZy4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoaXMgcmV0dXJucyBudWxs
cHRyCisgICAgLy8gaWYgVDo6YWNjZXB0cyhvcGNvZGUoKSkgcmV0dXJucyBmYWxzZS4KKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBjb25zdCBUKiBhcygpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50MzIoKSBj
b25zdDsKKyAgICBpbnQzMl90IGFzSW50MzIoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0lu
dDY0KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludDY0KCkgY29uc3Q7CisKKyAgICBib29sIGhh
c0ludCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQoKSBjb25zdDsKKyAgICBib29sIGlzSW50
KGludDY0X3QgdmFsdWUpIGNvbnN0OworCisgICAgYm9vbCBoYXNEb3VibGUoKSBjb25zdDsKKyAg
ICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKKworICAgIFN0YWNrbWFwKiBzdGFja21hcCgpOwor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisg
ICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUuCisgICAgLy8gVGhpcyBmb3Jt
IHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseToKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hp
bGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFy
Z3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNp
ZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVu
OgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAg
LCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9v
cmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9z
ZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBm
aXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhw
bGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlw
ZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2lu
KQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAg
eworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4g
aW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0Cisg
ICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5k
ZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9y
KG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAg
ICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgdmFyYXJncy4KKyAgICBleHBpY2l0IFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4s
IGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgp
CisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAg
ICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQor
ICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZp
cnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8g
Zml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNv
ZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFk
amFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVy
IHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50
IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgor
fTsKKworY2xhc3MgRGVlcFZhbHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVlRHVtcChW
YWx1ZSogdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
bV92YWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFZhbHVlKiBtX3ZhbHVlOworfTsKKworRGVlcFZhbHVlRHVtcCBkZWVwRHVtcChWYWx1ZSog
dmFsdWUpCit7CisgICAgcmV0dXJuIERlZXBWYWx1ZUR1bXAodmFsdWUpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzVmFsdWVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNWYWx1ZUlubGluZXNfaAorI2RlZmluZSBCM1ZhbHVlSW5saW5lc19oCisK
KyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVl
LmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorVCogVmFsdWU6OmFzKCkKK3sKKyAgICBpZiAoVDo6YWNjZXB0cyhvcGNvZGUoKSkpCisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3RlbXBsYXRlPnR5cGVuYW1lIFQ+Citjb25zdCBUKiBWYWx1ZTo6YXMoKSBjb25zdAorewor
ICAgIHJldHVybiBjb25zdF9jYXN0PFZhbHVlKj4odGhpcyktPmFzPFQ+KCk7Cit9CisKK2Jvb2wg
VmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDMyVmFsdWU+
KCk7Cit9CisKK2ludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBh
czxDb25zdDMyVmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDY0VmFsdWU+KCk7Cit9CisKK2ludDY0X3Qg
VmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdDY0VmFsdWU+KCkt
PnZhbHVlKCk7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGhhc0ludDMyKCkgfHwgaGFzSW50NjQoKTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQoKSBj
b25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNJbnQ2NCgpOwor
fQorCitib29sIFZhbHVlOjppc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdAoreworICAgIHJldHVy
biBoYXNJbnQoKSAmJiBhc0ludCgpID09IHZhbHVlOworfQorCitib29sIFZhbHVlOjpoYXNEb3Vi
bGUoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0RG91YmxlVmFsdWU+KCk7Cit9CisK
K2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdERv
dWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQorCitTdGFja21hcCogVmFsdWU6OnN0YWNrbWFwKCkK
K3sKKyAgICBpZiAoQ2hlY2tWYWx1ZSogY2hlY2sgPSBhczxDaGVja1ZhbHVlPigpKQorICAgICAg
ICByZXR1cm4gJmNoZWNrLT5zdGFja21hcDsKKyAgICBpZiAoUGF0Y2hwb2ludFZhbHVlKiBwYXRj
aHBvaW50ID0gYXM8UGF0Y2hwb2ludFZhbHVlPigpKQorICAgICAgICByZXR1cm4gJnBhdGNocG9p
bnQtPnN0YWNrbWFwOworICAgIHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzVmFsdWVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsK
KyAgICBjYXNlIE5vbmU6CisgICAgY2FzZSBTb21lUmVnaXN0ZXI6CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIigiLCByZWcoKSwgIikiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiKCIs
IG9mZnNldEZyb21GUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja0Fy
Z3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tU1AoKSwgIikiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIs
IHZhbHVlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVz
cGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIFZhbHVlUmVwOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNo
IChraW5kKSB7CisgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICBvdXQucHJpbnQoIkFu
eSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgor
ICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAgICBvdXQu
cHJpbnQoIlN0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFj
a0FyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrQXJndW1lbnQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQo
IkNvbnN0YW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1ZhbHVlUmVwX2gKKyNkZWZpbmUgQjNWYWx1ZVJlcF9oCisKKyNpbmNsdWRlICJSZWcuaCIKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKKy8vIFdlIHVzZSB0aGlzIGNsYXNzIHRvIGRlc2NyaWJlIHZhbHVlIHJlcHJlc2VudGF0
aW9ucyBhdCBzdGFja21hcHMuIEl0J3MgdXNlZCBib3RoIHRvIGZvcmNlIGEKKy8vIHJlcHJlc2Vu
dGF0aW9uIGFuZCB0byBnZXQgdGhlIHJlcHJlc2VudGF0aW9uLiBXaGVuIHRoZSBCMyBjbGllbnQg
Zm9yY2VzIGEgcmVwcmVzZW50YXRpb24sIHdlIHNheQorLy8gdGhhdCBpdCdzIGFuIGlucHV0LiBX
aGVuIEIzIHRlbGxzIHRoZSBjbGllbnQgd2hhdCByZXByZXNlbnRhdGlvbiBpdCBwaWNrZWQsIHdl
IHNheSB0aGF0IGl0J3MgYW4KKy8vIG91dHB1dC4KKworY2xhc3MgVmFsdWVSZXAgeworcHVibGlj
OgorICAgIGVudW0gS2luZCB7CisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIG1lYW5zIHRoYXQgQjMgY2FuIHBpY2sgYW55IHJlcHJlc2VudGF0aW9uLiBBcyBhbgor
ICAgICAgICAvLyBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCB3ZSBkb24n
dCBrbm93LiBUaGlzIHdpbGwgb25seSBhcmlzZSBmb3IgdGhlCisgICAgICAgIC8vIHJpZ2h0IG9w
ZXJhbmQgKGkuZS4gY2hpbGQoMSkpIG9mIGEgQ2hlY2tNdWwuCisgICAgICAgIEFueSwKKworICAg
ICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIHNo
b3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIuIEl0IGNvdWxkIGJlIGEKKyAgICAgICAgLy8gcmVnaXN0
ZXIgdGhhdCB0aGlzIGNsYWltcyB0byBjbG9iYmVyIQorICAgICAgICBTb21lUmVnaXN0ZXIsCisK
KyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFy
dGljdWxhciByZWdpc3Rlci4gQXMgYW4gb3V0cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9u
LCB0aGlzIHRlbGxzIHVzIHdoYXQgcmVnaXN0ZXIgQjMgcGlja2VkLgorICAgICAgICBSZWdpc3Rl
ciwKKworICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMg
dXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tlZC4gSXQncyBub3QgYSB2YWxpZAorICAgICAgICAv
LyBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgU3RhY2ssCisKKyAgICAgICAgLy8gQXMg
YW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIHRoZSB2YWx1ZSB0byBlbmQgdXAg
aW4gdGhlIGFyZ3VtZW50IGFyZWEgYXQgc29tZQorICAgICAgICAvLyBvZmZzZXQuCisgICAgICAg
IFN0YWNrQXJndW1lbnQsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAg
ICAgQ29uc3RhbnQKKyAgICB9OworICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tp
bmQoQW55KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQor
ICAgICAgICA6IG1fa2luZChSZWdpc3RlcikKKyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgp
KQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAg
eworICAgICAgICByZXR1cm4gVmFsdWVSZXAocmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFs
dWVSZXAgc3RhY2soaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVS
ZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3Vs
dC5tX3ZhbHVlID0gb2Zmc2V0RnJvbUZQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBz
dGFja0FyZ3VtZW50KGludHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVl
UmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAg
ICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbVNQOworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3Vs
dC5tX3ZhbHVlID0gdmFsdWU7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50
RG91YmxlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChiaXR3
aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dCB7IHJldHVybiBraW5kKCkgIT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVn
Ojpmcm9tSW5kZXgobV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQ
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGlu
dHB0cl90IG9mZnNldEZyb21TUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFN0YWNrQXJndW1lbnQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG1fdmFsdWUpOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVl
OworICAgIH0KKworICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7
CisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
K25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkIzOjpWYWx1ZVJlcDo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
QjNWYWx1ZVJlcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9w
YXR0ZXJuX21hdGNoZXIucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0OTMgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKKyR2YXJJbmRleCA9
IDAKK2RlZiBuZXdWYXIKKyAgICAkdmFySW5kZXggKz0gMQorICAgICJfdG1wI3skdmFySW5kZXh9
IgorZW5kCisKK2NsYXNzIFByb2R1Y3Rpb24KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6bmFt
ZSwgOnZhck5hbWUsIDphbm9ueW1vdXMsIDpvcGNvZGUsIDpjaGlsZHJlbgorCisgICAgZGVmIGlu
aXRpYWxpemUob3JpZ2luLCBuYW1lLCBvcGNvZGUsIGNoaWxkcmVuKQorICAgICAgICBAb3JpZ2lu
ID0gb3JpZ2luCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAYW5vbnltb3VzID0gKG5h
bWUgPT0gbmlsIG9yIG5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLykKKyAgICAgICAgQHZhck5hbWUg
PSBAYW5vbnltb3VzID8gbmV3VmFyIDogbmFtZQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisg
ICAgICAgIEBjaGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBbXQorICAgIGVuZAorCisg
ICAgZGVmIGhhc09wY29kZQorICAgICAgICBvcGNvZGUgIT0gbmlsCisgICAgZW5kCisKKyAgICBk
ZWYgZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICBjaGlsZHJlbi5lYWNoX3dpdGhfaW5kZXgg
eworICAgICAgICAgICAgfCBjaGlsZCwgaW5kZXggfAorICAgICAgICAgICAgeWllbGQgdmFyTmFt
ZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLm5hbWUsCisgICAgICAgICAgICAgICAgICBjaGls
ZC52YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQuYW5vbnltb3VzID8gKGNoaWxkLm9w
Y29kZSA/IDphbm9uSW50ZXJuYWwgOiA6YW5vbk9wZXJhbmQpIDogKGNoaWxkLm9wY29kZSA/IDpp
bnRlcm5hbCA6IDpvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgIGluZGV4CisgICAgICAgICAg
ICBjaGlsZC5lYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitj
bGFzcyBNYXRjaGVyCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpwcm9kdWN0aW9ucworCisgICAg
ZGVmIGluaXRpYWxpemUobmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBuYW1lID0gbmFtZQor
ICAgICAgICBAcHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucworICAgIGVuZAorZW5kCisKK2NsYXNz
IE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAg
ICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1l
ID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisg
ICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisg
ICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3Ry
aW5nCisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBv
cmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAor
ICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAg
ICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBz
dHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90
aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRv
X3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisg
ICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1w
dHk/CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBd
fSIKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQor
ICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisg
ICAgbGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNl
IHN0cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQs
IGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25v
cmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQVthLXpBLVow
LTkkXShbYS16QS1aMC05X10qKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3Jp
Z2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0
XHJdKykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9c
QVs9KCksXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxl
TmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAi
TGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwg
dW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAor
ICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKwor
ZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICAjIFdlIGNhbiBleHRlbmQgdGhpcyBhcyB3ZSBhZGQg
bW9yZSBrZXl3b3Jkcy4gTGlrZSwgd2UgbWlnaHQgd2FudCAiaW5jbHVkZSIgZXZlbnR1YWxseS4K
KyAgICB0b2tlbiA9fiAvXEEoKG1hdGNoZXIpKVxaLworZW5kCisKK2RlZiBpc0lkZW50aWZpZXIo
dG9rZW4pCisgICAgdG9rZW4gPX4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopXFovIGFu
ZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0
aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVO
YW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAg
IEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHgg
Kz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlm
IHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBl
bHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNl
ICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0i
CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3Vt
ZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVz
cyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNv
bnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBw
YXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1
bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYg
YWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwcm9kdWN0aW9uKQorICAgICAgICBpZiBuYW1l
ID09IHByb2R1Y3Rpb24udmFyTmFtZQorICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2hpbGQgcHJv
ZHVjdGlvbiBoYXMgc2FtZSBuYW1lIGFzIHBhcmVudCBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5k
CisgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09
IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJv
ZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9u
CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgY29uc3VtZSgibWF0Y2hlciIpCisK
KyAgICAgICAgbWF0Y2hlck5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIHByb2R1
Y3Rpb25zID0gW10KKworICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHgg
Pj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgIyBXZSBtaWdodCB3YW50IHRvIHN1cHBv
cnQgImluY2x1ZGUiLiBJZiB3ZSBkaWQgdGhhdCwgaXQgd291bGQgZ28gaGVyZS4KKyAgICAgICAg
ICAgIHByb2R1Y3Rpb24gPSBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVj
dGlvbi5uYW1lIH0KKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVj
dGlvbiIpCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJv
ZHVjdGlvbgorICAgICAgICB9CisKKyAgICAgICAgTWF0Y2hlci5uZXcobWF0Y2hlck5hbWUsIHBy
b2R1Y3Rpb25zKQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlUHJvZHVjdGlvbgorICAgICAgICBv
cmlnaW4gPSB0b2tlbi5vcmlnaW4KKyAgICAgICAgbmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisK
KyAgICAgICAgaWYgdG9rZW4gPT0gIj0iCisgICAgICAgICAgICBjb25zdW1lKCI9IikKKyAgICAg
ICAgICAgIG9wY29kZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICBjb25zdW1lKCIo
IikKKyAgICAgICAgZWxzaWYgdG9rZW4gPT0gIigiCisgICAgICAgICAgICBjb25zdW1lKCIoIikK
KyAgICAgICAgICAgIG9wY29kZSA9IG5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBuaWwKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwg
bmlsLCBuaWwpCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBb
XQorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorCisg
ICAgICAgICAgICBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHBhcnNlUHJvZHVjdGlvbikK
KworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisgICAgICAgICAgICBjb25zdW1l
KCIsIikKKyAgICAgICAgfQorCisgICAgICAgICMgQWR2YW5jZSBhZnRlciB0aGUgIikiCisgICAg
ICAgIGFkdmFuY2UKKworICAgICAgICBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG9wY29k
ZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCitlbmQKKworZmlsZU5hbWUgPSBBUkdWWzBdCisKK3Bh
cnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoZmlsZU5hbWUpLCBmaWxlTmFtZSkKK21hdGNoZXIg
PSBwYXJzZXIucGFyc2UKKworY2xhc3MgU3ViTWF0Y2gKKyAgICBhdHRyX3JlYWRlciA6aW5kZXhN
YXAsIDpwcm9kdWN0aW9ucworICAgIAorICAgIGRlZiBpbml0aWFsaXplKGluZGV4TGlzdCwgcHJv
ZHVjdGlvbnMpCisgICAgICAgIEBpbmRleE1hcCA9IFtdCisgICAgICAgIEBwcm9kdWN0aW9ucyA9
IFtdCisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAg
ICAgICAgICAgQGluZGV4TWFwIDw8IGluZGV4CisgICAgICAgICAgICBAcHJvZHVjdGlvbnMgPDwg
cHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKKworICAgIGRlZiBtYXBJbmRl
eExpc3QoaW5kZXhMaXN0KQorICAgICAgICBpbmRleExpc3QubWFwIHsKKyAgICAgICAgICAgIHwg
aW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwW2luZGV4XQorICAgICAgICB9CisgICAgZW5k
CitlbmQKKworRmlsZS5vcGVuKCJCMyIgKyBtYXRjaGVyLm5hbWUgKyAiLmgiLCAidyIpIHsKKyAg
ICB8IG91dHAgfAorCisgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGF0
dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorCisgICAg
b3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgb3V0cC5wdXRzICIj
ZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgCisgICAgb3V0cC5wdXRzICIjaW5jbHVk
ZSBcIkIzVmFsdWUuaFwiIgorICAgIAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PiIKKyAgICBvdXRwLnB1dHMgInZvaWQgcnVuI3ttYXRjaGVyLm5hbWV9KFZhbHVlKiBfdmFsdWUs
IEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91dHAucHV0cyAieyIKKworICAgICMgTm90ZSB0aGF0
IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBiZWNhdXNlIGl0J3Mg
YSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91CisgICAgIyB3YW50IHRvIHNlZSB0aGUgY29kZSBu
aWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGluIGEgZ29vZCB0ZXh0IGVkaXRvciBhbmQgYXNrIGl0
IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlvdS4KKworICAgICMgSW4gb2RkIHNpdHVhdGlvbnMs
IHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hp
bGwgb3V0IGFib3V0IGl0LgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKF92YWx1ZSk7Igor
ICAgICAgICAKKyAgICAjIFRoaXMganVzdCBwcm90ZWN0cyB0aGUgY2FsbGVyIGZyb20gaGF2aW5n
IHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25zIGhhdmluZyBkaWZmZXJlbnQgbGVuZ3Rocy4KKyAg
ICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAg
aW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7Cisg
ICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlz
dHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uY2hpbGRyZW4ubGVuZ3Ro
ID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0
c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExp
c3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgaW5k
ZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGxl
bmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAg
ICAgICBpZiBsZW5ndGggPiAwCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t2YWx1
ZU5hbWV9LT5jaGlsZHJlbi5zaXplKCkgPj0gI3tsZW5ndGh9KSB7IgorICAgICAgICAgICAgICAg
IHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAgIGVu
ZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRoaXMgZWZmaWNpZW50bHkgc2VsZWN0cyBm
cm9tIHRoZSBnaXZlbiBzZXQgb2YgcHJvZHVjdGlvbnMuIEl0IGFzc3VtZXMgdGhhdCBwcm9kdWN0
aW9ucworICAgICMgYXJlIG5vdCBkdXBsaWNhdGVkLiBJdCB5aWVsZHMgdGhlIGluZGV4IG9mIHRo
ZSBmb3VuZCBwcm9kdWN0aW9uLCBhbmQgdGhlIGNvcm91dGluZSBpcworICAgICMgcmVzcG9uc2li
bGUgZm9yIGVtaXR0aW5nIHNwZWNpZmljIGNvZGUgZm9yIHRoYXQgcHJvZHVjdGlvbi4gVGhlIGNv
cm91dGluZSBpcyBnaXZlbiBsaXN0cyBvZgorICAgICMgaW5kaWNlcyBvZiBwb3NzaWJseS1tYXRj
aGluZyBwcm9kdWN0aW9ucy4KKyAgICBkZWYgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5h
bWUsIHByb2R1Y3Rpb25zKQorICAgICAgICAjIEZpcnN0LCBzcGxpdCB0aGUgcHJvZHVjdGlvbnMg
bGlzdCBpbnRvIHJ1bnMgb2YgcHJvZHVjdGlvbnMgd2l0aCBhbiBvcGNvZGUgYW5kIHByb2R1Y3Rp
b25zCisgICAgICAgICMgd2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAg
ICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9kdWN0
aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlv
bnNbaW5kZXhMaXN0c1stMV1bMF1dLmhhc09wY29kZSA9PSBwcm9kdWN0aW9uLmhhc09wY29kZQor
ICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgIyBOb3csIGVtaXQgcGF0dGVybiBtYXRjaGlu
ZyBjb2RlLiBXZSBkbyBpdCBkaWZmZXJlbnRseSBmb3IgbGlzdHMgd2l0aCBhbiBvcGNvZGUgdGhh
biBmb3IKKyAgICAgICAgIyBsaXN0cyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cy5l
YWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rp
b25zW2luZGV4TGlzdFswXV0uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgIyBOb3csIHdlIHNw
bGl0IHRoaXMgaW5kZXggbGlzdCBpbnRvIGdyb3VwcyBmb3IgZWFjaCBvcGNvZGUuCisgICAgICAg
ICAgICAgICAgZ3JvdXBzID0ge30KKyAgICAgICAgICAgICAgICBpbmRleExpc3QuZWFjaCB7Cisg
ICAgICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICBwcm9kdWN0
aW9uID0gcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGlmIGdyb3Vwc1tw
cm9kdWN0aW9uLm9wY29kZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9kdWN0
aW9uLm9wY29kZV0gPDwgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA9IFtpbmRleF0KKyAgICAg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
IyBFbWl0IGEgc3dpdGNoIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3
aXRjaCAoI3t2YWx1ZU5hbWV9LT5vcGNvZGUoKSkgeyIKKyAgICAgICAgICAgICAgICBncm91cHMu
ZWFjaF9wYWlyIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvcGNvZGUsIHN1YkluZGV4TGlzdCB8
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZX06IgorICAgICAg
ICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhzdWJJbmRleExpc3QsIHByb2R1
Y3Rpb25zKQorICAgICAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUs
IHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4
TGlzdCB8CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExp
c3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQor
ICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJv
ZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAg
ICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAj
IFRha2VzIHByb2R1Y3Rpb25zIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcGNvZGUgYW5kIHRoZSBzYW1l
IGxlbmd0aCBhbmQgc2VsZWN0cyBmcm9tIHRoZW0gYmFzZWQgb24KKyAgICAjIHRoZSBwcm9kdWN0
aW9ucyBhdCB0aGUgZ2l2ZW4gY29sdW1uLgorICAgIGRlZiBtYXRjaENvbHVtbihvdXRwLCB2YWx1
ZU5hbWUsIHByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCkKKyAgICAgICAgaWYgY29sdW1uSW5kZXgg
Pj0gcHJvZHVjdGlvbnNbMF0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICB5aWVsZCAoMC4u
Lihwcm9kdWN0aW9ucy5zaXplKSkudG9fYQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVu
ZAorCisgICAgICAgIHN1YlZhbHVlID0gbmV3VmFyCisgICAgICAgIAorICAgICAgICBvdXRwLnB1
dHMgInsiCisgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7c3ViVmFsdWV9ID0gI3t2YWx1ZU5h
bWV9LT5jaGlsZCgje2NvbHVtbkluZGV4fSk7IgorCisgICAgICAgICMgV2UgbWF5IG5vdCB1c2Ug
dGhpcyB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAg
ICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3N1YlZhbHVlfSk7IgorICAgICAgICAKKyAg
ICAgICAgc3ViUHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucy5tYXAgeworICAgICAgICAgICAgfCBw
cm9kdWN0aW9uIHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uY2hpbGRyZW5bY29sdW1uSW5kZXhd
CisgICAgICAgIH0KKworICAgICAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHN1YlZhbHVlLCBz
dWJQcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAg
c3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAg
ICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMsIGNv
bHVtbkluZGV4ICsgMSkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAg
ICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgIGVuZAorCisgICAg
ZGVmIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAg
ICAgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKSB7CisgICAg
ICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAjIFdlIGFyZSBndWFyYW50ZWVkIHRo
YXQgdGhpcyBpbmRleCBsaXN0IGNvbnRhaW5zIHByb2R1Y3Rpb25zIHdpdGggdGhlIHNhbWUgb3Bj
b2RlIGFuZAorICAgICAgICAgICAgIyB0aGUgc2FtZSBsZW5ndGguCisgICAgICAgICAgICBzdWJN
YXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAg
bWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgMCkgewor
ICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJN
YXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgZW5kCisKKyAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsICJfdmFsdWUiLCBtYXRjaGVyLnBy
b2R1Y3Rpb25zKSB7CisgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgaW5kZXhMaXN0LmVh
Y2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBwcm9kdWN0aW9uID0gbWF0
Y2hlci5wcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7cHJvZHVjdGlvbi52YXJOYW1lfSA9IF92YWx1ZTsi
CisgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBvcGVyYW5k
QXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA9IFtdCisgICAgICAgICAg
ICBudW1TY29wZXMgPSAwCisgICAgICAgICAgICBzZWVuID0ge30KKyAgICAgICAgICAgIHByb2R1
Y3Rpb24uZWFjaFZhcmlhYmxlIHsKKyAgICAgICAgICAgICAgICB8IHBhcmVudFZhck5hbWUsIGNo
aWxkTmFtZSwgY2hpbGRWYXJOYW1lLCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgbG9h
ZEV4cHIgPSAiI3twYXJlbnRWYXJOYW1lfS0+Y2hpbGQoI3tpbmRleH0pIgorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIHNlZW5bY2hpbGRWYXJOYW1lXQorICAgICAgICAgICAg
ICAgICAgICB0bXAgPSBuZXdWYXIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1
ZSogI3t0bXB9ID0gI3tsb2FkRXhwcn07IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICgje3RtcH0gPT0gI3tjaGlsZFZhck5hbWV9KSB7IgorICAgICAgICAgICAgICAgICAgICBu
dW1TY29wZXMgKz0gMQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
c2VlbltjaGlsZFZhck5hbWVdID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tjaGlsZFZhck5hbWV9ID0gI3tsb2FkRXhw
cn07IgorCisgICAgICAgICAgICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJC8KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJChbMC05XSspXFovCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5p
c0ludCgjeyQxfSkpIHsiCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5oYXNJbnQo
KSkgeyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA8PCBjaGlsZFZh
ck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6YW5vbkludGVybmFsCisgICAg
ICAgICAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQg
PT0gOm9wZXJhbmQgb3Iga2luZCA9PSA6YW5vbk9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAg
dHJ5QXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBvciBraW5k
ID09IDpvcGVyYW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmIChhZGFwdG9yLmFjY2VwdFJvb3QoX3ZhbHVlKSIKKyAgICAgICAg
ICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3IuYWNjZXB0SW50ZXJuYWxzKCIgKyBpbnRlcm5h
bEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgb3V0cC5wdXRzKCIgICAg
JiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIp
ICsgIikiKQorICAgICAgICAgICAgb3V0cC5wdXRzKCIgICAgJiYgYWRhcHRvci50cnkje3Byb2R1
Y3Rpb24ubmFtZX0oIiArIHRyeUFyZ3VtZW50cy5qb2luKCIsICIpICsgIikpIikKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiICAgIHJldHVybjsiCisgICAgICAgICAgICBudW1TY29wZXMudGltZXMg
eworICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMg
IiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisg
ICAgCisgICAgb3V0cC5wdXRzICJ9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRw
LnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyQWxsb2NhdGVTdGFjay5oIgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFp
ckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wg
YXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgU3RhY2tTbG90KiBzbG90LCBpbnRwdHJfdCBvZmZzZXRG
cm9tRlAsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBmb3Ig
KFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTTG90cykgeworICAgICAgICBpZiAoIW90aGVy
U2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYg
KG9mZnNldEZyb21GUCArIHNsb3QtPmJ5dGVTaXplKCkgPj0gb3RoZXJTbG90LT5vZmZzZXRGcm9t
RlAoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVyU2xvdC0+
b2Zmc2V0RnJvbUZQKCkgKyBvdGhlclNsb3QtPmJ5dGVTaXplKCkgPj0gb2Zmc2V0RnJvbUZQKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNsb3QtPnNldE9mZnNldEZy
b21GUChvZmZzZXRGcm9tRlApOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGFzc2lnbihT
dGFja1Nsb3QqIHNsb3QsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sK
KyAgICBpZiAoYXR0ZW1wdEFzc2lnbm1lbnQoc2xvdCwgLXNsb3QtPmJ5dGVTaXplKCksIG90aGVy
U2xvdHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTTG90
IDogb3RoZXJTbG90cykgeworICAgICAgICBpZiAob3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKQor
ICAgICAgICAgICAgJiYgYXR0ZW1wdEFzc2lnbm1lbnQob3RoZXJTbG90LT5vZmZzZXRGcm9tRlAo
KSAtIHNsb3QtPmJ5dGVTaXplKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVz
cGFjZQorCit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3Bl
IHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlU3RhY2siKTsKKworICAgIC8vIEFsbG9jYXRlIGFs
bCBvZiB0aGUgbG9ja2VkIHNsb3RzIGluIG9yZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBh
bGdvcml0aG0gdG8gYWxsb3cgZm9yCisgICAgLy8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNs
b3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9mZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUu
CisgICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4g
YXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBsb2NrZWRT
dGFja1Nsb3RzV29ya2xpc3Q7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNr
U2xvdHMoKSkgeworICAgICAgICBzd2l0Y2ggKHNsb3QtPmtpbmQoKSkgeworICAgICAgICBjYXNl
IFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9t
RlAoKSkKKyAgICAgICAgICAgICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNs
b3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvY2tlZFN0YWNrU2xvdHMu
YXBwZW5kKHNsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tTbG90
S2luZDo6QW5vbnltb3VzOgorICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gQXMgYSBtYXR0ZXIgb2Ygc2FuaXR5LCB1bmFzc2lnbiB0aGlz
LiBNYXliZSBpdCB3b3VsZCBiZSBnb29kIHRvIGV2ZW4gaGF2ZSBhCisgICAgICAgICAgICAgICAg
Ly8gdmFsaWRhdGlvbiBydWxlIHRoYXQgdGhpcyBjYW5ub3QgaGFwcGVuLgorICAgICAgICAgICAg
ICAgIHNsb3QtPnNldE9mZnNldEZyb21GUCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIC8vIFRoaXMgaXMgYSBmYWlybHkgZXhwZW5z
aXZlIGxvb3AsIGJ1dCBpdCdzIE9LIGJlY2F1c2Ugd2UnbGwgdXN1YWxseSBvbmx5IGhhdmUgYSBo
YW5kZnVsIG9mCisgICAgLy8gbG9ja2VkIHN0YWNrIHNsb3RzLgorICAgIHdoaWxlICghbG9ja2Vk
U3RhY2tTbG90c1dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBTdGFja1Nsb3QqIHNsb3Qg
PSBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgYXNzaWduKHNs
b3QsIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cyk7CisgICAgICAgIGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAgfQorCisgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUg
YW5vbnltb3VzIHNsb3RzLiBOb3RlIHRoYXQgdGhlb3JldGljYWxseSB3ZSBzaG91bGQgZG8gYW4g
ZXNjYXBlIGFuYWx5c2lzCisgICAgLy8gaGVyZS4gQnV0LCBjdXJyZW50bHkgQWlyIGRvZXNuJ3Qg
c3VwcG9ydCBlc2NhcGluZyBhIFN0YWNrU2xvdCEKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIGVzY2FwaW5nIGEgU3RhY2tTbG90IGFuZCBhZGQgZXNjYXBlIGFuYWx5c2lzIHRvIGFsbG9j
YXRlU3RhY2soKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNDMwCisKKyAgICBhdXRvIGlzUmVsZXZhbnQgPSBbXSAoY29uc3QgQXJnJiBhcmcpIC0+
IGJvb2wgeworICAgICAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAmJiBhcmcuc3RhY2tTbG90KCkt
PmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM7CisgICAgfTsKKworICAgIExpdmVu
ZXNzPEFyZz4gbGl2ZW5lc3MoY29kZSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0
PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zaXplKCkpOworICAgIFZlY3RvcjxTdGFj
a1Nsb3QqPiBzbG90czsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Cisg
ICAgICAgIExpdmVuZXNzPEFyZz46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2Nr
KTsKKworICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAoKSB7CisgICAgICAgICAgICAvLyBG
b3JtIGEgY2xpcXVlIG9mIHN0YWNrIHNsb3RzIHRoYXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5kIHRo
ZSBsaXN0IG9mIHN0YWNrIHNsb3RzCisgICAgICAgICAgICAvLyB0aGF0IGFyZSBsaXZlIHJpZ2h0
IG5vdy4KKyAgICAgICAgICAgIHNsb3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGZvciAoQXJn
IGFyZyA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZW1ldmFu
dChhcmcpKQorICAgICAgICAgICAgICAgICAgICBzbG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
bG90cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBz
bG90c1tpXTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNs
b3RzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIg
PSBzbG90c1tpXTsKKworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIGZpcnN0ID0gb3V0
ZXI7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2Vjb25kID0gaW5uZXI7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChmaXJzdC0+aW5kZXgoKSA+IHNlY29uZC0+aW5kZXgoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChmaXJzdCwgc2Vjb25kKTsKKworICAgICAg
ICAgICAgICAgICAgICBpbnRlcmZlcmVuY2VbZmlyc3RdLmFkZChzZWNvbmQpOworICAgICAgICAg
ICAgICAgICAgICBpbnRlcmZlcmVuY2Vbc2Vjb25kXS5hZGQoZmlyc3QpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludGVyZmVyZShsb2Nh
bENhbGMubGl2ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4
ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBsb2NhbENhbGMu
ZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAgICBpbnRlcmZlcmUobG9j
YWxDYWxjLmxpdmUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgYXNzaWdu
IHN0YWNrIGxvY2F0aW9ucy4gQXQgaXRzIGhlYXJ0IHRoaXMgYWxnb3JpdGhtIGlzIGp1c3QgZmly
c3QtZml0LiBGb3IgZWFjaAorICAgIC8vIFN0YWNrU2xvdCB3ZSBqdXN0IHdhbnQgdG8gZmluZCB0
aGUgb2Zmc2V0RnJvbUZQIHRoYXQgaXMgY2xvc2VzdCB0byB6ZXJvIHdoaWxlIGVuc3VyaW5nIG5v
CisgICAgLy8gb3ZlcmxhcCB3aXRoIG90aGVyIFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBz
IHdpdGguCisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IGZyYW1lU2l6ZUZv
ckxvY2tlZDsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90czsKKyAgICBmb3IgKFN0
YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGlmIChzbG90LT5v
ZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZz
ZXQuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBw
b3NzaWJsZSBmaXJzdCBmaXQgb2Zmc2V0cyBhcmU6CisgICAgICAgIC8vIC0gZnJhbWVTaXplRm9y
TG9ja2VkIC0gc2xvdC0+Ynl0ZVNpemUoKQorICAgICAgICAvLyAtIGZvciBhbGwgc2xvdDIgaW4g
aW50ZXJmZXJlbmNlW3Nsb3RdLCBzbG90Mi0+b2Zmc2V0RnJvbUZQKCkgLSBzbG90LT5ieXRlU2l6
ZSgpLgorICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmQgb25lIG9mIHRob3NlIHRoYXQgZG9lc24n
dCBpbnRlcmZlcmUgd2l0aCBhbnlvbmUuCisKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiYg
aW50ZXJmZXJpbmdTbG90cyA9IGludGVyZmVyZW5jZVtzbG90XTsKKyAgICAgICAgb3RoZXJTbG90
cy5yZXNpemUoYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKSArIGludGVyZmVyaW5nU2xv
dHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFzc2lnbmVkTG9j
a2VkU3RhY2tTbG90cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG90aGVyU2xvdHNbaV0gPSBh
c3NpZ25lZExvY2tlZFN0YWNrU2xvdHNbaV07CisgICAgICAgIHVuc2lnbmVkIG5leHRJbmRleCA9
IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7CisgICAgICAgIGZvciAoU3RhY2tTbG90
KiBvdGhlclNsb3QgOiBpbnRlcmZlcmluZ1Nsb3RzKQorICAgICAgICAgICAgb3RoZXJTbG90c1tu
ZXh0SW5kZXgrK10gPSBvdGhlclNsb3Q7CisKKyAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xv
dHMpOworICAgIH0KKworICAgIC8vIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3RhY2sgd2UncmUgdXNp
bmcgZm9yIHN0YWNrIHNsb3RzLgorICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMg
PSAwOworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpCisgICAg
ICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBzdGQ6Om1heChmcmFtZVNpemVGb3JTdGFja1Ns
b3RzLCAtc2xvdC0+b2Zmc2V0RnJvbUZQKCkpOworCisgICAgLy8gTm93IHdlIG5lZWQgdG8gZGVk
dWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVlZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAg
ICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJnLmlzQ2FsbEFyZygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdl
IGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBu
b3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3VjaCBhbiBhd2Vzb21lIGFzc3VtcHRpb24uCisg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChhcmcub2Zmc2V0
KCkgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6
ZShhcmcub2Zmc2V0KCkgKyA4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBjb2RlLnNldEZyYW1lU2l6ZShmcmFtZVNpemVGb3JTdGFj
a1Nsb3RzICsgY29kZS5jYWxsQXJnQXJlYVNpemUoKSk7CisKKyAgICAvLyBGaW5hbGx5LCB0cmFu
c2Zvcm0gdGhlIGNvZGUgdG8gdXNlIEFkZHIncyBpbnN0ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlz
IGlzIGEgbG9zc2xlc3MKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNo
IHRoZSBTdGFja1Nsb3RzIGFycmF5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggU3RhY2tTbG90IGFueQor
ICAgIC8vIG9mZnNldC1mcm9tLUZQIHJlZmVycyB0by4KKworICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAg
ICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAg
ICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBh
cmcub2Zmc2V0KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6Cisg
ICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAg
ICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAg
YXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBbGxvY2F0ZVN0YWNrX2gKKyNkZWZpbmUgQWly
QWxsb2NhdGVTdGFja19oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0
byBwbGFjZXMgb24gdGhlIHN0YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVz
IGluIGluZGV4CisvLyBvcmRlciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcg
Zmlyc3QgZml0LgorCit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJBbGxvY2F0ZVN0YWNrX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBcmcuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEFyZzo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAg
Y2FzZSBUbXA6CisgICAgICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEltbToKKyAgICAgICAgb3V0LnByaW50KCIkIiwgbV9vZmZzZXQpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIG1f
b2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgaWYgKG9m
ZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnBy
aW50KCIoIiwgYmFzZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmRleDoK
KyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsK
KyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLCIsIGluZGV4KCkpOworICAgICAgICBp
ZiAoc2NhbGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7Cisg
ICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoK
KyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCk7Cisg
ICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIikiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgaWYgKG9mZnNldCgpKQor
ICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiKGNhbGxB
cmcpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIG91dC5w
cmludChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFJlc0NvbmQ6CisgICAgICAgIG91dC5wcmludChhc1Jlc3VsdENvbmRpdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJE
dW1wKHNwZWNpYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2luY2x1ZGUg
IkFpclRtcC5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFja1Ns
b3Q7CisKKy8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVj
YXVzZSB3ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3Qo
Li4uLCBBcmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJn
IHsKK3B1YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkg
dGVyc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtp
bmQgOiBpbnQ4X3QgeworICAgICAgICBUbXAsCisgICAgICAgIEltbSwKKyAgICAgICAgSW1tNjQs
CisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAorICAgICAgICBDYWxsQXJnLAorICAgICAg
ICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAgUmVzQ29uZCwKKyAgICAgICAgU3Bl
Y2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAgICAgICBVc2UsCisg
ICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsKKworICAgIGVudW0gVHlwZSA6IGlu
dDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAgIH07CisKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOworCisgICAgc3RhdGljIGJvb2wgaXNVc2UoUm9sZSBy
b2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgor
ICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBj
YXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
cm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yQjNUeXBl
KEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNhc2UgSW50NjQ6Cisg
ICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAg
cmV0dXJuIEZQOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gR1A7CisgICAgfQorCisgICAgQXJnKCkKKyAgICB7CisgICAgfQorCisgICAg
QXJnKEFpcjo6VG1wIHRtcCkKKyAgICAgICAgOiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFz
ZSh0bXApCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUp
CisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1t
OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbTY0KGludHB0cl90IHZhbHVlKQorICAgIHsK
KyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgQXJnIGFkZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jh
c2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZh
bHVlLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4odmFsdWUpOworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9m
ZnNldDsgLy8gSSBrbm93LCB5dWNrLgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgY2FsbEFyZyhpbnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFy
ZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgY2FzZSA0OgorICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICBjYXNlIDQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAg
ICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQor
CisgICAgc3RhdGljIEFyZyBpbmRleChBaXI6OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5z
aWduZWQgc2NhbGUgPSAxLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NF
UlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAg
QVNTRVJUKGlzVmFsaWRTY2FsZShzY2FsZSkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9raW5kID0gSW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOwor
ICAgICAgICByZXN1bHQubV9pbmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KHNjYWxlKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
b2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcg
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCisg
ICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVsQ29u
ZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQg
PSBjb25kaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBzcGVjaWFsKEFpcjo6U3BlY2lhbCogc3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0
CisgICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBt
X2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1f
aW5kZXgKKyAgICAgICAgICAgICYmIG1fc2NhbGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQg
a2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAg
IGJvb2wgaXNUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7
CisgICAgfQorCisgICAgYm9vbCBpc0ltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
a2luZCgpID09IEltbTsKKyAgICB9CisKKyAgICBib29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW02NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRk
cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQor
CisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gU3RhY2s7CisgICAgfQorCisgICAgYm9vbCBpc0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGtpbmQoKSA9PSBDYWxsQXJnOworICAgIH0KKworICAgIGJvb2wgaXNJbmRl
eCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0K
KworICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5k
KCkgPT0gUmVsQ29uZDsKKyAgICB9CisKKyAgICBib29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlc0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBp
c1NwZWNpYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFs
OworICAgIH0KKworICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNUbXAoKSB8fCBpc1N0YWNrKCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJu
IG1fYmFzZTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gSW1tIHx8IGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJl
dHVybiBtX29mZnNldDsKKyAgICB9CisKKyAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihtX29mZnNldCkpOworICAg
IH0KKworICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7
CisgICAgfQorCisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGtpbmQoKSA9PSBTdGFjaykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90
PihtX3NjYWxlKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBD
YWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxp
bnQzMl90PihtX29mZnNldCk7CisgICAgfQorCisgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJl
dHVybiBiaXR3aXNlX2Nhc3Q8U3RhY2tTbG90Kj4obV9vZmZzZXQpOworICAgIH0KKworICAgIEFp
cjo6VG1wIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5k
ZXgpOworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzY2Fs
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAg
ICAgcmV0dXJuIG1fc2NhbGU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9nU2NhbGUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOworICAgIH0KKworICAg
IEFpcjo6U3BlY2lhbCogc3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFNwZWNpYWwpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lh
bCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBib29sIGlzR1BUbXAoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOworICAgIH0KKworICAgIGJv
b2wgaXNGUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAo
KS5pc0ZQKCk7CisgICAgfQorICAgIAorICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBi
ZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEdQIHZhbHVlLgorICAgIGJvb2wg
aXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBj
YXNlIEltbToKKyAgICAgICAgY2FzZSBJbW02NDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAg
ICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgY2FzZSBDYWxs
QXJnOgorICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVzQ29uZDoKKyAgICAg
ICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2Ug
VG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzR1BUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhh
dCByZXF1aXJlcyBhIEZQIHZhbHVlLgorICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAg
ICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBS
ZWxDb25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNl
IEluZGV4OgorICAgICAgICBjYXNlIEJhc2U6CisgICAgICAgIGNhc2UgU3RhY2tTbG90OgorICAg
ICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW1tNjQ6IC8vIFllcywgd2UgYWxsb3cg
SW1tNjQgYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5n
IHN0YWNrbWFwcy4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoK
KyAgICAgICAgICAgIHJldHVybiBpc0ZQVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBi
b29sIGhhc1R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBUbXA6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUgdHlwZSBp
cyBhbWJpZ3VvdXMgZm9yIHNvbWUgYXJnIGtpbmRzLiBDYWxsIHdpdGggY2FyZS4KKyAgICBUeXBl
IHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1AoKSA/IEdQIDogRlA7Cisg
ICAgfQorCisgICAgYm9vbCBpc1R5cGUoVHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4gaXNH
UCgpOworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIGlzRlAoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncHIoKTsKKyAgICB9CisKKyAgICBi
b29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgp
LmlzRlBSKCk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gdG1wKCkuZnByKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNSZWcoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9
CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5yZWco
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB0bXAoKS5ncFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBU
bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgp
OworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0bXAoKS50bXBJbmRleCgpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6Cisg
ICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jh
c2UpOworICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcg
aW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQgbmV2
ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVyYXgs
ICglcmN4KQorICAgIC8vCisgICAgLy8gVGhpcyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4Lgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUg
YXJnUm9sZSwgVHlwZSBhcmdUeXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBm
dW5jdG9yKG1fYmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5j
dG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwg
R1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1dDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MiBhc1RydXN0ZWRJbW0zMigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW0oKSk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0
PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0IGFzVHJ1c3RlZEltbTY0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChwb2ludGVyVmFsdWUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhc0FkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzQWRkcigpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG1fYmFzZS5ncHIoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFzQmFzZUluZGV4KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0luZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgIG1fYmFzZS5ncHIoKSwgbV9pbmRleC5ncHIoKSwg
c3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlNjYWxlPihsb2dTY2FsZSgpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbj4obV9vZmZzZXQp
OworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gYXNSZXN1bHRD
b25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVzQ29uZCgpKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24+
KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fb2Zmc2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5k
IHsgSW1tIH07CisgICAgaW50MzJfdCBtX3NjYWxlIHsgMSB9OworICAgIEFpcjo6VG1wIG1fYmFz
ZTsKKyAgICBBaXI6OlRtcCBtX2luZGV4OworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQXJnX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJs
b2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBibG9jaykKK3sKKyAgICBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQor
Cit2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBC
YXNpY0Jsb2NrKiB0bykKK3sKKyAgICBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20s
IHRvKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2lj
QmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJCQiIsICp0aGlzLCAiOlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMp
CisgICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNCbG9ja19oCisKKyNpbmNsdWRlICJB
aXJGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworY2xhc3MgSW5zZXJ0aW9uU2V0OworCitj
bGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZHVtcFByZWZpeCA9ICIjIjsKKworICAgIHR5cGVkZWYgVmVjdG9yPEluc3Q+IEluc3RM
aXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7
CisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0Owor
ICAgIAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsg
fQorICAgIEluc3RMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4o
KTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2luc3RzLmVuZCgp
OyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFz
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsg
cmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0Pgor
ICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIG1faW5zdHMu
YXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJk
PEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2Fz
ZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNh
c2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAvLyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQg
dG8gcmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2ggb2YgYSBjb25kaXRpb25hbCBicmFuY2guCisg
ICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5z
aXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2Nr
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07
IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4g
bV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7
IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9u
PEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpCisgICAgeworICAg
ICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0
PihtX3N1Y2Nlc3NvcnMpOworICAgIH0KKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJh
c2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2Nr
LCBjb25zdCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMpOworICAgIH0KKworICAgIHVuc2ln
bmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUo
KTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVj
ZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIGNvbnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4g
bV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3Nv
cnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKworICAgIHZvaWQgYWRkUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIHZvaWQgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayopOworICAgIHZvaWQgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJh
c2ljQmxvY2sqIHRvKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAg
IHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgQ29kZTsKKyAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OworICAgIAorICAg
IEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgeworICAg
IH0KKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBT
dWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNl
c3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxv
Y2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxv
Y2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykK
KyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNC
bG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckJhc2lj
QmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
Q2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6OkNDYWxs
U3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lz
dGVycygpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1Jl
Z2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6cmVz
ZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKworQ0NhbGxTcGVjaWFsOjp+
Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmZvckVhY2hBcmcoSW5z
dCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxi
YWNrKQoreworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpVc2UsIEFyZzo6R1ApOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBxdWVyeSB0aGUgYXJnJ3Mg
dHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdlCisgICAgICAgIC8vIHJl
cXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgICAgIGNhbGxi
YWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tpXS50eXBlKCkpOworICAgIH0K
K30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAo
aW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRj
aCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAgIGlm
IChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYgKHNpemVvZih2b2lkKikg
PT0gOCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2Fz
ZSBBcmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6U3RhY2s6Cisg
ICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc0dQKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBp
bnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbaV0uaXNSZWco
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5zdC5hcmdzW2ld
ID09IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuICBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1pdHNTdGFj
ayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEgY2FuIGJlIGEgc3Rh
Y2sgYWRkcmVzcyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDYWxsU3BlY2lh
bDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQoreworfQor
CitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBD
Q2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIHN3aXRjaCAoaW5z
dC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6Oklt
bVB0cjoKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGluc3Qu
YXJnc1sxXS5wb2ludGVyVmFsdWUoKSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5j
YWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpUbXA6
CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNBZGRy
ZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIEND
YWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFs
OjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9
CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmRlZXBE
dW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiZnVuY3Rp
b24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIpOworfQorCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5lIEFpckNDYWxsU3BlY2lhbF9o
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8g
VXNlIHRoaXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBj
b3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBv
YmplY3QuIEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJl
Z2lzdGVyLCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRo
ZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1l
bnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdv
cmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24g
d2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRv
IGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0
IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSBy
ZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlm
IHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIg
dG8gYmUgbGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwg
d2hpY2hldmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGlj
IFNwZWNpYWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNp
YWwoKTsKKworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1
bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAg
Ly8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhl
IHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3Bl
Y2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcg
c2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMC4KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOwor
ICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikg
b3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhl
bHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1w
SW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBs
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJT
ZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisKKyNpbmNsdWRlICJDQ2FsbFNwZWNp
YWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitDb2RlOjpDb2RlKCkKK3sKK30KKworQ29kZTo6fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2Nr
KiBDb2RlOjphZGRCbG9jaygpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJs
b2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tzLnNpemUoKSkpOworICAgIEJhc2ljQmxvY2sqIHJl
c3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2sp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xv
dCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSog
dmFsdWUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3RhY2tT
bG90KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1ZSkpOworICAgIFN0
YWNrU2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKKyAgICBtX3N0YWNrU2xvdHMuYXBwZW5kKFdU
Rjo6bW92ZShzbG90KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lhbCogQ29kZTo6
YWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKK3sKKyAgICBtX3Nw
ZWNpYWxzLmFwcGVuZChXVEY6Om1vdmUoc3BlY2lhbCkpOworfQorCitDQ2FsbFNwZWNpYWwqIENv
ZGU6OmNDYWxsU3BlY2lhbCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAgICAg
ICBtX2NDYWxsU3BlY2lhbCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAgICAg
ICAgYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAgIH0K
KworICAgIHJldHVybiBtX2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlz
KQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAobnVtU3RhY2tT
bG90cygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xvdHM6XG4iKTsKKyAgICAgICAg
Zm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisgICAgICAgICAgICBvdXQucHJp
bnQoIiAgICAiLCBkZWVwRHVtcChzbG90KSwgIlxuIik7CisgICAgfQorICAgIGlmIChudW1TcGVj
aWFscygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9y
IChTcGVjaWFsKiBzcGVjaWFsIDogc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgi
ICAgICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsKKyAgICB9CisgICAgb3V0LnByaW50KCJG
cmFtZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwgIlxuIik7CisgICAgb3V0LnByaW50KCJDYWxsIGFy
ZyBhcmVhIHNpemU6ICIsIG1fY2FsbEFyZ0FyZWFTaXplLCAiXG4iKTsKKyAgICBvdXQucHJpbnQo
IkNhbGxlZSBzYXZlczogIiwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzLCAiXG4iKTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ29kZV9o
CisjZGVmaW5lIEFpckNvZGVfaAorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1
ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKyNpbmNsdWRlICJS
ZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgQ0NhbGxTcGVjaWFsOworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWly
IHsKKworLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0
YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0
ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9m
IG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBD
b2RlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJh
c2ljQmxvY2sqIGFkZEJsb2NrKCk7CisKKyAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNp
Z25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7
CisKKyAgICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7CisK
KyAgICAvLyBUaGlzIGlzIHRoZSBzcGVjaWFsIHlvdSBuZWVkIHRvIG1ha2UgYSBDIGNhbGwhCisg
ICAgQ0NhbGxTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIFRtcCBuZXdUbXAoQXJnOjpU
eXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBB
cmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6Z3BUbXBGb3JJbmRleChtX251bUdQVG1w
cysrKTsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6ZnBU
bXBGb3JJbmRleChtX251bUZQVG1wcysrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2ln
bmVkIG51bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtR1BUbXBz
OworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1cm4gbV9udW1GUFRtcHM7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYWxsQXJnQXJlYVNpemUoKSBjb25z
dCB7IHJldHVybiBtX2NhbGxBcmdBcmVhU2l6ZTsgfQorCisgICAgLy8gWW91IGNhbiBjYWxsIHRo
aXMgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiB0byBmb3JjZSBhIG1pbmltdW0gY2FsbCBhcmcgYXJl
YSBzaXplLgorICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6ZSh1bnNpZ25lZCBzaXplKQor
ICAgIHsKKyAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUgPSBzdGQ6Om1heChtX2NhbGxBcmdBcmVh
U2l6ZSwgc2l6ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnJhbWVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVNpemU7IH0KKworICAgIC8vIE9ubHkgcGhhc2VzIHRoYXQgZG8gc3RhY2sg
YWxsb2NhdGlvbiBhcmUgYWxsb3dlZCB0byBzZXQgdGhpcy4gQ3VycmVudGx5LCBvbmx5CisgICAg
Ly8gQWlyOjphbGxvY2F0ZVN0YWNrKCkgZG9lcyB0aGlzLgorICAgIHZvaWQgc2V0RnJhbWVTaXpl
KHVuc2lnbmVkIGZyYW1lU2l6ZSkKKyAgICB7CisgICAgICAgIG1fZnJhbWVTaXplID0gZnJhbWVT
aXplOworICAgIH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVy
biBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0
b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBj
bGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpOgorICAgICAg
ICAgICAgOiBtX2NvZGUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihDb2RlJiBjb2RlLCB1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgICAgIDogbV9jb2RlKCZjb2RlKQorICAgICAgICAgICAgLCBtX2luZGV4
KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVy
YXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2RlLT5hdChtX2luZGV4
KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2NvZGUtPnNpemUoKSAmJiAhbV9jb2RlLT5hdChp
bmRleCkpCisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmV4
OworICAgICAgICB9CisKKyAgICAgICAgQ29kZSogbV9jb2RlOworICAgICAgICB1bnNpZ25lZCBt
X2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCBudW1CbG9ja3MoKSk7IH0KKworICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xs
ZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0
IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1f
c3RhY2tTbG90cy5zaXplKCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90c1tpXS5nZXQoKTsgfQorICAgICAg
ICBTdGFja1Nsb3QqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0
KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgor
ICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51
bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0
aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fY29s
bGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0YWNrU2xvdCogb3Bl
cmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0
aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsK
KyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAg
ICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7IH0KKyAgICAgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSgpKTsgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOworICAgIH07CisKKyAgICBT
dGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90
c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAgCisgICAgY2xhc3MgU3BlY2lhbHNDb2xsZWN0aW9u
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNwZWNpYWxzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBj
b2RlKQorICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxz
LnNpemUoKTsgfQorICAgICAgICBTcGVjaWFsKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHNbaV0uZ2V0KCk7IH0KKyAgICAgICAgU3BlY2lhbCogb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAg
ICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1
bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlv
bikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yKigpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTcGVj
aWFsc0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBj
b25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFNwZWNpYWxzQ29sbGVjdGlvbiBzcGVj
aWFscygpIGNvbnN0IHsgcmV0dXJuIFNwZWNpYWxzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAK
K3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNr
U2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBD
Q2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1f
bnVtR1BUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBzIHsgMCB9OworICAgIHVu
c2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fY2FsbEFyZ0FyZWFTaXpl
IHsgMCB9OworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsK
K307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckNv
ZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJl
cXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBBaXJGcmVxdWVudGVkQmxvY2tfaAorCisjaW5j
bHVkZSAiQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRl
ZiBHZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyRnJlcXVlbnRl
ZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5o
IgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5o
IgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRl
LmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGdl
bmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIGlmIChzaG91bGRW
YWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUsICJpbml0aWFsIik7CisKKyAgICBp
ZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4iKTsK
KyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdl
IHJ1biBvdXIgb3B0aW1pemF0aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIC8vIEZJWE1F
OiBBZGQgQWlyIG9wdGltaXphdGlvbnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDQ1NgorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBo
YXZlIGEgcmVhbCByZWdpc3RlciBhbGxvY2F0b3IuIFRoZW4sIHdlIGNvdWxkIHVzZSBzcGlsbEV2
ZXJ5dGhpbmcoKQorICAgIC8vIGluIHBsYWNlIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3Igb25s
eSBmb3IgdGVzdGluZy4KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ1NworICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKKworICAgIC8v
IFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNp
dC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4gSXQgYWxzbworICAgIC8vIGRvZXMgdGhpbmdzIGxp
a2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVt
LgorICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUpOworCisgICAgLy8gVGhpcyB0dXJucyBhbGwg
U3RhY2sgYW5kIENhbGxBcmcgQXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUg
cG9pbnRlci4gSXQgZG9lcworICAgIC8vIHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3Rh
Y2sgc2xvdHMuIEl0IHNob3VsZCBiZSBwcmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3
ZQorICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgor
ICAgIGFsbG9jYXRlU3RhY2soY29kZSk7CisKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQor
ICAgICAgICB2YWxpZGF0ZShjb2RlLCAiZmluYWwiKTsKKworICAgIGlmIChzaG91bGREdW1wSVIo
KSkgeworICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsKKyAgICAg
ICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICAvLyBBbmQgbm93LCB3ZSBnZW5lcmF0ZSBj
b2RlLgorICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5hZGRQdHIoVHJ1
c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
OworCisgICAgCit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGVfaAorI2RlZmluZSBBaXJHZW5lcmF0ZV9o
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHRha2VzIGFuIEFp
cjo6Q29kZSB0aGF0IGhhc24ndCBoYWQgYW55IHN0YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlvbmFs
bHkgaGFzbid0IGhhZCBhbnkKKy8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIGRvZXMgYm90aCBv
ZiB0aG9zZSB0aGluZ3MsIGFuZCB0aGVuIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUgZ2l2
ZW4KKy8vIENDYWxsSGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2Fs
bGJhY2tzIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzCisvLyBnZW5lcmF0aW5nLgordm9p
ZCBnZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckdlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGlvbkNvbnRl
eHRfaAorI2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKKyNpbmNsdWRlIDx3dGYvU2hh
cmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dCB7CisgICAgdHlwZWRlZiB2b2lkIExhdGVQ
YXRoRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKyAgICB0eXBl
ZGVmIFNoYXJlZFRhc2s8TGF0ZVBhdGhGdW5jdGlvbj4gTGF0ZVBhdGg7CisKKyAgICBWZWN0b3I8
UmVmUHRyPExhdGVQYXRoPj4gbGF0ZVBhdGhzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNh
dmVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCisKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyUGhh
c2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK3ZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNj
b3BlIHBoYXNlU2NvcGUoY29kZSwgImhhbmRsZUNhbGxlZVNhdmVzIik7CisKKyAgICBSZWdpc3Rl
clNldCB1c2VkQ2FsbGVlU2F2ZXM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGlu
c3QuZm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBBdCBmaXJzdCB3ZSBqdXN0IHJlY29yZCBhbGwgdXNlZCByZWdz
LgorICAgICAgICAgICAgICAgICAgICB1c2VkQ2FsbGVlU2F2ZXMuc2V0KHRtcC5yZWcoKSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgZmls
dGVyIHRvIHJlYWxseSBnZXQgdGhlIGNhbGxlZSBzYXZlcy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMu
ZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCisgICAgY29kZS5j
YWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2
ZXMpOworCisgICAgc2l6ZV90IGJ5dGVTaXplID0gMDsKKyAgICBjb2RlLmNhbGxlZVNhdmVSZWdp
c3RlcnMoKS5mb3JFYWNoKAorICAgICAgICBbJl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVu
dHJ5KSB7CisgICAgICAgICAgICBieXRlU2l6ZSA9IHN0ZDo6bWF4KC1lbnRyeS5vZmZzZXQoKSwg
Ynl0ZVNpemUpOworICAgICAgICB9KTsKKworICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29k
ZS5hZGRTdGFja1Nsb3QoYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgLy8g
VGhpcyBpcyBhIGJpdCB3ZWlyZCBzaW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEg
ZGlmZmVyZW50IHN0YWNrIHNsb3QgdG8gdGhpcworICAgIC8vIGFyZWEuCisgICAgc2F2ZXNBcmVh
LT5zZXRPZmZzZXRGcm9tRlAoLWJ5dGVTaXplKTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChj
b25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgeworICAgICAgICByZXR1cm4gQXJnOjpTdGFj
ayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgpICsgYnl0ZVNpemUpOworICAgIH07CisKKyAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIAorICAgIC8vIEZpcnN0IGluc2Vy
dCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9ndWUuCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0
ZXJzKCkuZm9yRWFjaCgKKyAgICAgICAgWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRy
eSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAw
LCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIFRtcChlbnRyeS5yZWco
KSksIGFyZ0ZvcihlbnRyeSkpOworICAgICAgICB9KTsKKyAgICBpbnNlcnRpb25TZXQuZXhlY3V0
ZShjb2RlWzBdKTsKKworICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9yZSBjb2RlIGF0IGVwaWxvZ3Vl
cy4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBJbnN0JiBs
YXN0ID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgaWYgKGxhc3Qub3Bjb2RlKCkgIT0gUmV0KQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkuZm9yRWFjaCgKKyAgICAgICAgICAgIFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50
cnkpIHsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgICAgICBibG9jay0+c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBN
b3ZlRG91YmxlLAorICAgICAgICAgICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnku
cmVnKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhh
bmRsZUNhbGxlZVNhdmVzX2gKKyNkZWZpbmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7
CisKKy8vIFRoaXMgcGhhc2UgaWRlbnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFk
ZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUgdGhlbSBpbiB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3Vl
IHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFuZGF0b3J5IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291
bGQgYmUgY29vbCB0byBtYWtlIHRoaXMgbW9yZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xp
ZW50IGFuZCBhbHNvIG1vcmUKKy8vIHBvd2VyZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5r
IHdyYXBwaW5nOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4
CisvLyBXZSBzaG91bGQgbWFrZSB0aGlzIGludGVyYWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNh
bGxlZVNhdmVzKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc2VydGlv
blNldC5oIgorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5t
X2luc3RzLCBtX2luc2VydGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRp
b25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2VydGlv
blNldF9oCisjZGVmaW5lIEFpckluc2VydGlvblNldF9oCisKKyNpbmNsdWRlICJBaXJJbnN0Lmgi
CisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBC
YXNpY0Jsb2NrOworY2xhc3MgQ29kZTsKKwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJ
bnNlcnRpb247CisKK2NsYXNzIEluc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9u
U2V0KENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKwor
ICAgIENvZGUmIGNvZGUoKSB7IHJldHVybiBtX2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgdm9pZCBhcHBlbmRJbnNlcnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7Cisg
ICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoc3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0
KHNpemVfdCBpbmRleCwgSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRp
b24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0
KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAg
aW5zZXJ0SW5zdChpbmRleCwgSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMp
Li4uKSk7CisgICAgfQorCisgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0
ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRp
b25zOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
QWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBaXJJbnN0LmgiCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKwordm9pZCBJbnN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KG9wY29kZSwgIiAiLCBsaXN0RHVtcChhcmdzKSwgIiAgOyAiLCAqb3JpZ2luKTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlySW5zdF9oCisjZGVmaW5lIEFpckluc3RfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5j
bHVkZSAiQWlyT3Bjb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBl
cnM7CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsK
Kworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBBcmdMaXN0OworCisgICAgSW5zdChPcGNvZGUgb3Bj
b2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAgICA6IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwg
b3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFy
ZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1
bWVudHMuLi4gfQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9w
Y29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3Jp
Z2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhhcmd1bWVudHMp
CisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAg
IHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xp
c3QmJiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhXVEY6Om1vdmUoYXJndW1lbnRzKSkKKyAg
ICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgewor
ICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcg
ImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CisgICAg
Ly8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2Fycnlpbmcg
YXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQorICAgIC8vIHByb2JhYmx5IGRvaW5n
IGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBvbmx5IHdhbGtzIHRob3NlIFRtcHMgdGhhdCBhcmUg
ZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBpdCBkb2Vzbid0IHRlbGwgeW91IHRoZWlyIHJvbGUK
KyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
Zm9yIChBcmcgYXJnIDogYXJncykKKyAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChmdW5j
dG9yKTsKKyAgICB9CisKKyAgICB0eXBlZGVmIHZvaWQgRWFjaEFyZ0NhbGxiYWNrKEFyZyYsIEFy
Zzo6Um9sZSwgQXJnOjpUeXBlKTsKKyAgICAKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRo
IChhcmcsIHJvbGUsIHR5cGUpLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5Cisg
ICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgZm9yRWFjaEFyZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAgIC8v
IENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKHRtcCwgcm9sZSwgdHlwZSkuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGZvckVhY2hBcmdSb2xlKAorICAgICAgICAgICAgWyZdIChB
cmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAg
ICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlwZSwgZnVuY3Rvcik7CisgICAgICAgICAgICB9KTsK
KyAgICB9CisKKyAgICAvLyBUaGluZyBjYW4gYmUgZWl0aGVyIEFyZyBvciBUbXAuCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNo
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMg
aW5zdHJ1Y3Rpb24gaGFzIGEgU3BlY2lhbCouIFRoaXMgdW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0
aW9uYWxpdHkuCisgICAgYm9vbCBoYXNTcGVjaWFsKCkgY29uc3Q7CisKKyAgICAvLyBSZXBvcnRz
IGFueSBhZGRpdGlvbmFsIHJlZ2lzdGVycyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5v
dGUgdGhhdCBmb3IgZWZmaWNpZW5jeSwKKyAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5
IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpOworCisgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdo
aWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4gVGhpcyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBj
b2RlZ2VuLiBOb3RlCisgICAgLy8gdGhhdCBmb3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lz
dGVycygpIG9ubHkgd29ya3MgaWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICB2b2lk
IHJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmKTsKKworICAgIC8vIElzIHRo
aXMgaW5zdHJ1Y3Rpb24gaW4gb25lIG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMg
ZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJi
LgorICAgIGJvb2wgaXNWYWxpZEZvcm0oKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1
Y3Rpb24gaXMgaW4gYSB2YWxpZCBmb3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBv
bmUgb2YgdGhlIHZhbGlkCisgICAgLy8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNp
bmcgdGhlIHN0YWNrIChvciBhIFN0YWNrU2xvdCBvciBDYWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRo
ZQorICAgIC8vIGdpdmVuIGluZGV4PyBTcGlsbGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBh
cmdzIGJ5IGluZGV4IHRvIGZpbmQgVG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7CisgICAgLy8gaWYg
aXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlzIHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUg
QXJnOjpUbXAgd2l0aCBhbiBBcmc6OkFkZHIuIElmIGl0CisgICAgLy8gZmluZHMgYSBub24tVG1w
IEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFyZydzIGZvckVhY2hUbXAgdG8gZG8gYSByZXBsYWNl
bWVudCB0aGF0IHdheS4KKyAgICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5l
cmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGFkbWl0c1N0YWNrKHVuc2ln
bmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEdlbmVyYXRlIHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0
cnVjdGlvbi4gVGhpcyBpcywgbGlrZSwgbGl0ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlz
IHRoZQorICAgIC8vIHRlcm1pbmFsLCBpdCByZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8g
YmUgbGlua2VkIGZvciB0aGUgInRoZW4iIGNhc2UsIHdpdGggdGhlICJlbHNlIgorICAgIC8vIGNh
c2UgYmVpbmcgZmFsbC10aHJvdWdoLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5
IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEND
YWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworICAgIEFyZ0xpc3QgYXJnczsKKyAgICBWYWx1ZSogb3JpZ2luOyAv
LyBUaGUgQjM6OlZhbHVlIHRoYXQgdGhpcyBvcmlnaW5hdGVkIGZyb20uCisgICAgT3Bjb2RlIG9w
Y29kZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEFpckluc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0
SW5saW5lc19oCisjZGVmaW5lIEFpckluc3RJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFpckluc3Qu
aCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWxzLmgi
CisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRm9yRWFjaDsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8VG1wPiB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goSW5zdCYg
aW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFj
aFRtcChmdW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxBcmc+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChJbnN0
JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JF
YWNoQXJnKGZ1bmN0b3IpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0
eXBlbmFtZSBGdW5jdG9yPgordm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7
CisgICAgRm9yRWFjaDxUaGluZz46OmZvckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitib29s
IEluc3Q6Omhhc1NwZWNpYWwoKSBjb25zdAoreworICAgIHJldHVybiBhcmdzLnNpemUoKSAmJiBh
cmdzWzBdLmlzU3BlY2lhbCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFD
bG9iYmVyZWRSZWdzKCkKK3sKKyAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xv
YmJlcmVkUmVncygqdGhpcyk7Cit9CisKK3ZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBhcmdzWzBdLnNwZWNpYWwo
KS0+cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lzdGVycyk7Cit9CisKK2lubGlu
ZSBib29sIGlzU2hpZnRWYWxpZChJbnN0JiBpbnN0KQoreworI2lmIENQVShYODYpCisgICAgcmV0
dXJuIGluc3QuYXJnc1swXSA9PSBUbXAoWDg2UmVnaXN0ZXI6OmN4KTsKKyNlbHNlCisgICAgcmV0
dXJuIHRydWU7CisjZW5kaWYKK30gICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbHVlKElu
c3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zdElubGluZXNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTGl2ZW5lc3NfaAorI2RlZmluZSBBaXJM
aXZlbmVzc19oCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRl
eE1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKKy8vIFlvdSBjYW4gY29tcHV0ZSBsaXZlbmVzcyBvdmVyIFRtcCdzIG9yIG92ZXIgQXJnJ3Mu
IElmIHlvdSBjb21wdXRlIG92ZXIgQXJnJ3MsIHlvdSBnZXQgYm90aAorLy8gc3RhY2sgbGl2ZW5l
c3MgYW5kIHRtcCBsaXZlbmVzcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nPgorY2xhc3MgTGl2
ZW5lc3MgeworcHVibGljOgorICAgIExpdmVuZXNzKENvZGUmIGNvZGUpCisgICAgeworICAgICAg
ICBtX2xpdmVBdEhlYWQucmVzaXplKGNvZGUuc2l6ZSgpKTsKKyAgICAgICAgbV9saXZlQXRUYWls
LnJlc2l6ZShjb2RlLnNpemUoKSk7CisKKyAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gc2Vl
bjsKKworICAgICAgICBib29sIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdl
ZCkgeworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKHNp
emVfdCBibG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAg
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGUuYXQoYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICAgICAgTG9jYWxDYWxjIGxvY2FsQ2FsYygqdGhpcywgYmxvY2spOworICAgICAgICAgICAg
ICAgIGZvciAoc2l6ZV90IGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykK
KyAgICAgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRl
eCkpOworICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RUaW1lID0gc2Vlbi5hZGQoYmxvY2spOwor
ICAgICAgICAgICAgICAgIGlmICghZmlyc3RUaW1lICYmIGxvY2FsQ2FsYy5saXZlKCkgPT0gbV9s
aXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgICAg
ICAgICBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdLmFkZCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxvY2FsQ2FsYy5saXZlKCkuYmVnaW4oKSwgbG9jYWxDYWxjLmxpdmUoKS5lbmQoKSk7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fbGl2ZUF0SGVhZFtibG9ja10gPSBs
b2NhbENhbGMudGFrZUxpdmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRIZWFkKEJhc2ljQmxvY2sqIGJsb2NrKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0SGVhZFtibG9ja107CisgICAgfQor
CisgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmVBdFRhaWwoQmFzaWNCbG9jayogYmxvY2sp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9saXZlQXRUYWlsW2Jsb2NrXTsKKyAgICB9
CisKKyAgICAvLyBUaGlzIGNhbGN1bGF0b3IgaGFzIHRvIGJlIHJ1biBpbiByZXZlcnNlLgorICAg
IGNsYXNzIExvY2FsQ2FsYyB7CisgICAgcHVibGljOgorICAgICAgICBMb2NhbENhbGMoTGl2ZW5l
c3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9saXZlKGxp
dmVuZXNzLT5saXZlQXRUYWlsKGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xpdmU7IH0K
KyAgICAgICAgSGFzaFNldDxUaGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6bW92ZSht
X2xpdmUpOyB9CisKKyAgICAgICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGluc3QuZm9y
RWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxp
dmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUu
cmVtb3ZlKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5leHQg
aGFuZGxlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5oYXNTcGVj
aWFsKCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVh
Y2goCisgICAgICAgICAgICAgICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgbV9saXZlLnJlbW92ZShUaGluZyhyZWcpKTsKKyAgICAgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRmluYWxseSBoYW5kbGUgdXNlJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+
KAorICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBI
YXNoU2V0PFRoaW5nPiBtX2xpdmU7CisgICAgfTsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhN
YXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRUYWlsOworfTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5v
cGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisjIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6
CisjIFU6RyA9PiB1c2Ugb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMg
RDpHID0+IGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpH
ID0+IHVzZSBhbmQgZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisj
IFU6RiA9PiB1c2Ugb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9m
IGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZs
b2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVt
cG9yYXJ5IG9yIHJlZ2lzdGVyCisjIEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02
NCA9PiBUcnVzdGVkSW1tNjQKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3Rl
citvZmZzZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRl
QWRkcmVzcworIworIyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3Jkcywg
YW5kIHVuZGVyc3RhbmRzIHRoYXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMK
KyMgb2YgdGhpbmdzLiBTbywgYWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGlu
ZGVudGF0aW9uIHN0eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGlu
ZXMgYXJlIG1lYW5pbmdmdWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3
cml0ZToKKyMKKyMgRm9vNDIgVTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQg
dGhlIHBhcnNlciB3b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9v
NDIgVTpHLCBVRDpGCisjICAgICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4g
YSB0d28tZm9ybSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0
ZSBhbmQgdXNlcytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNv
ZGVzIGhlcmUgaGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3Bv
bmQgdG8gTWFjcm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNl
IChhZGQzMikuCisKK05vcAorCitBZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIElt
bSwgQWRkcgorICAgIEltbSwgVG1wCisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0Fk
ZDMyIFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRtcCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6Rwor
ICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAK
KyAgICBJbW0sIEFkZHIKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAg
SW1tLCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAK
KworTW92ZSBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02NCwg
VG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwg
VG1wIiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBUbXAsIEFk
ZHIgYXMgc3RvcmUKKworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRk
ciwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKworTW92
ZTY0VG9Eb3VibGUgVTpHLCBEOkYKKyAgICBUbXAsIFRtcAorCitNb3ZlRG91YmxlVG82NCBVOkYs
IEQ6RworICAgIFRtcCwgVG1wCisKK0JyYW5jaEFkZDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gK
KyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29u
ZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29uZCwgQWRkciwg
VG1wCisKK0JyYW5jaE11bDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBU
bXAsIFRtcAorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hTdWIzMiBVOkcsIFU6Rywg
VUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRt
cAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJl
c0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hOZWczMiBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJl
c0NvbmQsIFRtcAorCitKdW1wIC9icmFuY2gKKworUmV0IC90ZXJtaW5hbAorCisjIEFpciBhbGxv
d3MgZm9yIGV4b3RpYyBiZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVybWluZWQg
ZW50aXJlbHkgYnkgdGhlIFNwZWNpYWwgb3BlcmFuZCwKKyMgd2hpY2ggbXVzdCBiZSB0aGUgZmly
c3Qgb3BlcmFuZC4KK3NwZWNpYWwgUGF0Y2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJC
M0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogbmFt
ZSkKKyAgICA6IG1fY29kZShjb2RlKQorICAgICwgbV9uYW1lKG5hbWUpCit7CisgICAgaWYgKHNo
b3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9yZSAi
LCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgaWYg
KHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9IHRvQ1N0
cmluZyhjb2RlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAgIGlmIChz
aG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgbV9u
YW1lLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2Nv
cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNl
U2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJQaGFzZVNjb3Bl
X2gKKyNkZWZpbmUgQWlyUGhhc2VTY29wZV9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBDb2RlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKENvZGUmLCBjb25zdCBjaGFy
KiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIHNob3VsZCBkbyB2YWxpZGF0aW9u
CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsK
KyAgICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclBoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJp
b3JpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3BzSW5Qcmlv
cml0eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPEdQUlJlZz4qIHJlc3VsdDsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAg
b25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxHUFJS
ZWc+KCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBhbGwgPSBSZWc6OmFsbEdQUnMoKTsKKyAg
ICAgICAgICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0
ZXJzKCkpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGwp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGVl
U2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdw
cigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9
CisKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0
YXRpYyBWZWN0b3I8RlBSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEZQUlJlZz4oKTsKKyAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IGFsbCA9IFJlZzo6YWxsRlBScygpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQg
Y2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAg
ICAgICBmb3IgKFJlZyByZWcgOiBhbGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNh
dmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGwpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7
CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlv
cml0eU9yZGVyKEFyZzo6VHlwZSB0eXBlKQoreworICAgIHN0YXRpYyBWZWN0b3I8UmVnPiogcmVz
dWx0W0FyZzo6bnVtVHlwZXNdOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAg
IHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAg
ICByZXN1bHRbQXJnOjpHUF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAo
R1BSUmVnIHJlZyA6IGdwcnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1
bHRbQXJnOjpHUF0tPmFwcGVuZChSZWcocmVnKSk7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpG
UF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoRlBSUmVnIHJlZyA6IGZw
cnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0tPmFw
cGVuZChSZWcocmVnKSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0W3R5cGVdOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3Jp
dHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUmVnaXN0ZXJQcmlvcml0eV9o
CisjZGVmaW5lIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisj
aW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworY29uc3QgVmVjdG9yPEdQUlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKTsKK2NvbnN0
IFZlY3RvcjxGUFJSZWc+JiBmcHJzSW5Qcmlvcml0eU9yZGVyKCk7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhbms+IHN0cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8R1BSSW5mbz4geworICAgIGNvbnN0IFZlY3Rv
cjxHUFJSZWc+JiBpblByaW9yaXR5T3JkZXIoKSB7IHJldHVybiBncHNJblByaW9yaXR5T3JkZXIo
KTsgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxGUFJJ
bmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEZQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0
dXJuIGZwc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5r
PgorY29uc3QgVmVjdG9yPEJhbms6OlJlZ2lzdGVyVHlwZT4mIHJlZ3NJblByaW9yaXR5T3JkZXIo
KQoreworICAgIHJldHVybiBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8QmFuaz46OmluUHJpb3Jp
dHlPcmRlcigpOworfQorCitjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihB
cmc6OlR5cGUpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBBaXJSZWdpc3RlclByaW9yaXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKKyNpbmNsdWRlIDx3dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitTcGVjaWFsOjpTcGVjaWFsKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBt
X25hbWUobmFtZSkKKyAgICAsIG1faW5kZXgoVUlOVF9NQVgpCit7Cit9CisKK1NwZWNpYWw6On5T
cGVjaWFsKCkKK3sKK30KKworQ1N0cmluZyBTcGVjaWFsOjpuYW1lKCkgY29uc3QKK3sKKyAgICBT
dHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICByZXR1cm4gb3V0
LnRvQ1N0cmluZygpOworfQorCit2b2lkIFNwZWNpYWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCk7CisgICAgZHVtcEltcGwob3V0KTsK
KyAgICBpZiAobV9pbmRleCAhPSBVSU5UX01BWCkKKyAgICAgICAgb3V0LnByaW50KG1faW5kZXgp
OworfQorCit2b2lkIFNwZWNpYWw6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCp0aGlzLCAiOiAiKTsKKyAgICBkZWVwRHVtcEltcGwob3V0KTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNwZWNpYWxfaAorCisjaW5jbHVkZSAiQWly
SW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBHZW5lcmF0aW9uQ29udGV4dDsKKworY2xhc3MgU3BlY2lhbCB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlY2lhbCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiJiI7
CisgICAgCisgICAgU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflNwZWNpYWwoKTsKKworICAgIENT
dHJpbmcgbmFtZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYs
IGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZp
cnR1YWwgYm9vbCBpc1ZhbGlkKEluc3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0
YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgPSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNh
bGxlZCBvbiBmb3IgZWFjaCBJbnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0
aGVyZSBpcyBubyB3YXkgdG8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1
c2VkIGZyb20ganVzdCBvbmUgSW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBT
bywKKyAgICAvLyBpZiB5b3Ugd2FudCB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBn
ZW5lcmF0ZSgpLCB0aGVuIHlvdSBoYXZlIHRvIGVpdGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdl
bmVyYXRlIEFpciB0aGF0IHN0YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2gg
SW5zdCwgYW5kIHRoZW4gbWVyZ2UKKyAgICAvLyAgICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBp
cyBwcm9iYWJseSBub3QgZ3JlYXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2Fz
ZSB0aGF0CisgICAgLy8gICAgQWlyIGRpZG4ndCBkdXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2gg
ZHVwbGljYXRpb24gZGlkbid0IGNhdXNlIGFueSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAg
Ly8gICAgcmVnaXN0ZXIgYXNzaWdubWVudC4KKyAgICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNw
ZWNpYWwgbWFpbnRhaW4gYSBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3Mg
YmVjYXVzZSB0aGUgYW5hbHlzaXMKKyAgICAvLyAgICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxs
IGlzIHBlcmZvcm1lZCBqdXN0IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5v
IHdheQorICAgIC8vICAgIGZvciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3Rz
IHRvIGJlIHJlYWxsb2NhdGVkLiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAg
Y29uc3VsdCB0aGUgSGFzaE1hcC4KKyAgICAvLworICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxk
IHVzZSAoMSkgYW5kIGZpcmUgdXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMu
CisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVseSBvbiBy
ZXBvcnRVc2VkUmVnaXN0ZXJzKCkgYmVpbmcgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAg
Ly8gYXMgZ2VuZXJhdGUoKS4gSWYgd2UgY291bGQgcmVseSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxk
IGp1c3QgaGF2ZSBlYWNoIFNwZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBtYWludGFpbiBhIFZlY3Rv
ciBvZiBSZWdpc3RlclNldCdzIGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJp
Z2h0IG9yZGVyIGluCisgICAgLy8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVy
ZW5jZSBpcyB1bmxpa2VseSB0byBjaGFuZ2Ugc2luY2UgaXQgd291bGQgaGFybSB0aGUKKyAgICAv
LyBwZXJmb3JtYW5jZSBvZiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisgICAgLy8KKyAgICAvLyBD
dXJyZW50bHksIHdlIGRvICgxKSBmb3IgQjMgc3RhY2ttYXBzLgorICAgIHZpcnR1YWwgdm9pZCBy
ZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpID0gMDsKKyAgICAK
KyAgICB2aXJ0dWFsIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxw
ZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lz
dGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpID0gMDsKKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYp
IGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3QgPSAwOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgY29u
c3QgY2hhciogbV9uYW1lOworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCitjbGFzcyBEZWVw
U3BlY2lhbER1bXAgeworcHVibGljOgorICAgIERlZXBTcGVjaWFsRGltcChTcGVjaWFsKiBzcGVj
aWFsKQorICAgICAgICA6IG1fc3BlY2lhbChzcGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nw
ZWNpYWwpCisgICAgICAgICAgICBtX3NwZWNpYWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFNwZWNpYWwqIG1fc3BlY2lhbDsKK307CisKK0RlZXBTcGVjaWFsRHVtcCBkZWVwRHVtcChT
cGVjaWFsKiBzcGVjaWFsKQoreworICAgIHJldHVybiBEZWVwU3BlY2lhbER1bXAoc3BlY2lhbCk7
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclNw
ZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZl
cnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKwor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNs
dWRlICJBaXJQaGFzZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKK3sKKyAg
ICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNwaWxsRXZlcnl0aGluZyIpOworCisgICAg
Ly8gV2Ugd2FudCB0byBrbm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9p
bnQgaW4gZXZlcnkgYmFzaWMgYmxvY2suCisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9y
PFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CisgICAgTGl2ZW5lc3M8
VG1wPiBsaXZlbmVzcyhjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
eworICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBi
bG9jayk7CisgICAgICAgIHVzZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgp
ICsgMSk7CisKKyAgICAgICAgYXV0byBzZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBp
bmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVzZWRSZWdpc3RlcnNbYmxv
Y2tdW2luZGV4XTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2FsQ2FsYy5saXZlKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAg
IHNldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHNldFVzZWRSZWdpc3RlcnMoYmxvY2stPnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAg
ICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAg
ICAgICAgc2V0VXNlZHJlZ2lzdGVycyhpbnN0SW5kZXgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KKyAgICBWZWN0b3I8U3Rh
Y2tTbG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6Om51bVR5cGVzXTsKKyAgICBmb3IgKHVuc2lnbmVk
IHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsrdHlwZUluZGV4KSB7
CisgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0YWNrU2xvdHNb
dHlwZUluZGV4XTsKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxBcmc6OlR5
cGU+KHR5cGVJbmRleCk7CisgICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUubnVtVG1wcyh0
eXBlKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51bVRtcHModHlw
ZSk7IHRtcEluZGV4LS07KQorICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0gPSBjb2Rl
LmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgIH0KKworICAg
IEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgUmVnaXN0
ZXJTZXQmIHNldEJlZm9yZSA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleF07CisgICAg
ICAgICAgICBSZWdpc3RlclNldCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0
SW5kZXggKyAxXTsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4
KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRt
cCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxsU3RhY2tTbG90
c1t0eXBlXVt0bXAudG1wSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcgPSBB
cmc6OnN0YWNrKHN0YWNrU2xvdCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBm
aWd1cmUgb3V0IGEgcmVnaXN0ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBkZXBlbmRzIG9uIHRo
ZSByb2xlLgorICAgICAgICAgICAgICAgICAgICBSZWcgY2hvc2VuUmVnOworICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVz
ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5
T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9y
ZS5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUu
c2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJl
ZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpEZWY6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVy
KHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRBZnRlci5nZXQo
cmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZURlZjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVn
KSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2Vu
UmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRChjaG9zZW5SZWcpOworCisg
ICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAg
ICAgICAgIE9wY29kZSBtb3ZlID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGUK
KworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRt
cCwgYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAg
ICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BpbGxFdmVyeXRoaW5nX2gKKyNkZWZpbmUg
QWlyU3BpbGxFdmVyeXRoaW5nX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRl
c3RpbmcuIEl0IGJlaGF2ZXMgbGlrZSBhIHJlZ2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2Ug
dGhhdCBpdAorLy8gZWxpbWluYXRlcyB0ZW1wb3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBh
Y2NvbXBsaXNoZXMgdGhpcyBieSBhbHdheXMgc3BpbGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmllcy4g
VGhlIHJlc3VsdGluZyBjb2RlIGlzIGdvaW5nIHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMg
cGhhc2UgaXMgZ3JlYXQgaWYgeW91CisvLyB0aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRo
ZSByZWdpc3RlciBhbGxvY2F0b3IuIFlvdSBjYW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhp
cworLy8gcGhhc2UgaW5zdGVhZCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8vIE5v
dGUgdGhhdCBldmVuIHRob3VnaCB0aGlzIHBoYXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBv
c3NpYmxlLCBpdCdzIG5vdCBldmVuIHdyaXR0ZW4gaW4gYQorLy8gcGFydGljdWxhcmx5IGVmZmlj
aWVudCB3YXkuIFNvLCBkb24ndCBnZXQgYW55IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2Ug
dG8gcmVkdWNlIGNvbXBpbGVyCisvLyBsYXRlbmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQs
IHlvdSBzaG91bGQgY29tZSB1cCB3aXRoIGEgY2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVz
aW5nCisvLyB0aGlzIHNpbGx5IHRoaW5nLgorCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclNwaWxs
RXZlcnl0aGluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Rh
Y2tTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clN0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclN0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBTdGFja1Nsb3Q6OnNldE9mZnNldEZy
b21GUChpbnRwdHJfdCB2YWx1ZSkKK3sKKyAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAg
IGlmIChtX3ZhbHVlKQorICAgICAgICBtX3ZhbHVlLT5tX29mZnNldEZyb21GUCA9IHZhbHVlOwor
fQorCit2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgic3RhY2siLCBtX2luZGV4KTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmRlZXBE
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9
ICIsIG1fYnl0ZVNpemUsICIsIG9mZnNldEZyb21GUCA9ICIsIG1fb2Zmc2V0RnJvbUZQLCAiLCBr
aW5kID0gIiwgbV9raW5kKTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgb3V0LnByaW50KCIs
IHZhbHVlID0gIiwgKm1fdmFsdWUpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3Qu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tT
bG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTdGFja1Nsb3RfaAorI2Rl
ZmluZSBBaXJTdGFja1Nsb3RfaAorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5j
bHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN0YWNrU2xvdHZhbHVlOwor
CituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3RhY2tTbG90IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTdGFja1Nsb3QpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQor
ICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV1dHJuIG1fa2luZDsgfQorICAgIHVu
c2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgdW5zaWduZWQg
YWxpZ25tZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDEpCisg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMikKKyAgICAg
ICAgICAgIHJldHVybiAyOworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSA0KQorICAgICAgICAg
ICAgcmV0dXJuIDQ7CisgICAgICAgIHJldHVybiA4OworICAgIH0KKworICAgIFN0YWNrU2xvdFZh
bHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIC8vIFplcm8gbWVh
bnMgdGhhdCBpdCdzIG5vdCB5ZXQgYXNzaWduZWQuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQ
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworICAgIC8vIFRoaXMgc2hvdWxk
IHVzdWFsbHkganVzdCBiZSBjYWxsZWQgZnJvbSBwaGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0
aW9uLiBCdXQgeW91IGNhbgorICAgIC8vIHRvdGFsbHkgZm9yY2UgYSBzdGFjayBzbG90IHRvIGxh
bmQgYXQgc29tZSBvZmZzZXQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QpOwor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOwor
CisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tT
bG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV9ieXRlU2l6
ZShieXRlU2l6ZSkKKyAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb2Zmc2V0
RnJvbUZQKHZhbHVlLT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAg
ICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJ5dGVTaXplKTsK
KyAgICB9CisgICAgCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICB1bnNpZ25lZCBtX2lu
ZGV4OworICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOworICAgIFN0YWNrU2xvdEtpbmQgbV9r
aW5kOworICAgIFN0YWNrU2xvdFZhbHVlKiBtX3ZhbHVlOworfTsKKworY2xhc3MgRGVlcFN0YWNr
U2xvdER1bXAgeworcHVibGljOgorICAgIERlZXBTdGFja1Nsb3REdW1wKFN0YWNrU2xvdCogc2xv
dCkKKyAgICAgICAgOiBtX3Nsb3Qoc2xvdCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zbG90KQorICAg
ICAgICAgICAgbV9zbG90LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTdGFja1Nsb3Qq
IG1fc2xvdDsKK307CisKK0RlZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1wKFN0YWNrU2xvdCogc2xv
dCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAoc2xvdCk7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBUbXA6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAg
IG91dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
aXNSZWcoKSkgeworICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGlzR1BUbXAoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0bXAiLCBn
cFRtcEluZGV4KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCIl
ZnRtcCIsIGZwVG1wSW5kZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNpbmNsdWRl
ICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCisvLyBBIFRtcCBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIGEgcmVnaXN0ZXIuIEl0IGNhbiBi
ZSB1c2VkIHRvIHJlZmVyIHRvIGFueSBHUFIgb3IgRlBSLiBJdCBjYW4gYWxzbworLy8gYmUgdXNl
ZCB0byByZWZlciB0byBhbiB1bmFsbG9jYXRlZCByZWdpc3RlciAoaS5lLiBhIHRlbXBvcmFyeSku
IExpa2UgbWFueSBBaXIgY2xhc3Nlcywgd2UgdXNlCisvLyBkZWxpYmVyYXRlbHkgdGVyc2UgbmFt
aW5nIHNpbmNlIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhpcyBuYW1lIGEgbG90LgorCitjbGFzcyBU
bXAgeworcHVibGljOgorICAgIFRtcCgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBUbXAoUmVnIHJlZykKKyAgICB7CisgICAgICAgIGlmIChyZWcp
IHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
ID0gZW5jb2RlR1BSKHJlZy5ncHIoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbV92YWx1ZSA9IGVuY29kZUZQUihyZWcuZnByKCkpOworICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChjb25zdCBBcmcm
KTsKKworICAgIHN0YXRpYyBUbXAgZ3BUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7
CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlR1BU
bXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBU
bXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5kZXgpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZm9yUmF3VmFsdWUodW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV92YWx1ZSA9IGluZGV4OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKworICAg
IGJvb2wgcmF3VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBib29sIGlz
R1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFsdWUpOwor
ICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNF
bmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJv
b2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQUihtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAgIH0KKworICAg
IEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQUihtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChp
c0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVybiBmcHIoKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRt
cEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFRtcChtX3ZhbHVl
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKKyAgICAgICAg
cmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1
ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBU
bXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNv
ZGVGUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMSAtIGluZGV4Owor
ICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BSKEdQUlJlZyBncHIpCisgICAgeworICAg
ICAgICByZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIo
KSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFIoRlBSUmVnIGZwcikKKyAgICB7
CisgICAgICAgIHJldHVybiBlbmNvZGVGUChmcHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJS
ZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQVG1wKHVuc2lnbmVk
IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6
bGFzdFJlZ2lzdGVyKCkpICsgMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5j
b2RlRlBUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlBS
KE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEgLSBpbmRleDsKKyAgICB9CisK
KyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gdmFsdWUgPiAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA8IDA7CisgICAgfQorCisgICAg
c3RhdGljIGJvb2wgaXNFbmNvZGVkR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVy
OjpsYXN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBS
KGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYg
dmFsdWUgPj0gZW5jb2RlZEZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BUbXAoaW50IHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiAhaXNFbmNvZGVkR1BSKHZhbHVl
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFRtcChpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmICFpc0VuY29kZWRGUFIo
dmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBHUFJSZWcgZGVjb2RlR1BSKGludCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFIodmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEdQUlJlZz4oCisgICAgICAgICAgICAodmFsdWUgLSBlbmNvZGVHUFIo
TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSkpICsgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0
UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIEZQUlJlZyBkZWNvZGVGUFIoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQUih2YWx1ZSkpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPigKKyAgICAgICAgICAgIChlbmNvZGVGUFIoTWFj
cm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKSAtIHZhbHVlKSArCisgICAgICAgICAgICBN
YWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyB1
bnNpZ25lZCBkZWNvZGVHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNF
bmNvZGVkR1BUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC0gKGVuY29kZUdQUihN
YWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSk7CisgICAgfQorCisgICAgc3RhdGlj
IHVuc2lnbmVkIGRlY29kZUZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c0VuY29kZWRGUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gKGVuY29kZUZQUihNYWNyb0Fz
c2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxKSAtIHZhbHVlOworICAgIH0KKworICAgIC8v
IDA6IGVtcHR5IFRtcAorICAgIC8vIHBvc2l0aXZlOiBHUFJzIGFuZCB0aGVuIEdQIHRlbXBzLgor
ICAgIC8vIG5lZ2F0aXZlOiBGUFJzIGFuZCB0aGVuIEZQIHRlbXBzLgorICAgIGludCBtX3ZhbHVl
OworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWly
VG1wX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxp
bmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRt
cElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wSW5saW5lc19o
CisjZGVmaW5lIEFpclRtcElubGluZXNfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVk
ZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworaW5saW5lIFRtcDo6VG1wKGNvbnN0IEFyZyYgYXJnKQoreworICAgICp0aGlzID0g
YXJnLnRtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBBaXJUbXBJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKworI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CituYW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRl
cihDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQor
ICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAs
IG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURB
VEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJ
TEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmlu
ZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorICAgIAorICAgIHZvaWQgcnVuKCkK
KyAgICB7CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90czsKKyAgICAgICAg
SGFzaFNldDxCYXNpY0Jsb2NrKj4gdmFsaWRCbG9ja3M7CisgICAgICAgIEhhc2hTZXQ8U3BlY2lh
bCo+IHZhbGlkU3BlY2lhbHM7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Y29kZSkKKyAgICAgICAgICAgIHZhbGlkQmxvY2tzLmFkZChibG9jayk7CisgICAgICAgIGZvciAo
U3RhY2tTbG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIHZhbGlk
U2xvdHMuYWRkKHNsb3QpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBtX2NvZGUu
c3BlY2lhbHMoKSkKKyAgICAgICAgICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNwZWNpYWwpOworCisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytp
bnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJ
bmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU2xv
dHMuY29udGFpbnMoYXJnLnN0YWNrU2xvdCgpKSwgKCJBdCAiLCBpbnN0KSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTcGVjaWFsOgor
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRTcGVjaWFscy5jb250YWlucyhh
cmcuc3BlY2lhbCgpKSwgKCJBdCAiLCBpbnN0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBWQUxJREFURShpbnN0LmlzVmFs
aWRGb3JtKCksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAgICAgICAgIGlmIChpbnN0SW5kZXgg
PT0gYmxvY2stPnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzVGVy
bWluYWwoaW5zdC5vcGNvZGUoKSkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUoIWlzVGVybWluYWwoaW5zdC5vcGNvZGUoKSkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3Vj
Y2Vzc29ycygpKQorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkQmxvY2tzLmNvbnRhaW5z
KHN1Y2Nlc3NvciksICgiQXQgIiwgKmJsb2NrKSk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdm9pZCBmYWlsKAorICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxp
bmVOdW1iZXIsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBjb25kaXRpb24sCisg
ICAgICAgIENTdHJpbmcgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIENTdHJpbmcgZmFpbHVyZU1l
c3NhZ2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAg
ICAgICAgICAgIG91dC5wcmludCgiQUlSIFZBTElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAg
ICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxp
bmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2Us
ICJcbiIpOworICAgICAgICAgICAgaWYgKG1fd2hlbikKKyAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiAgICBEdXJpbmcgIiwgbV93aGVuLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNz
YWdlID0gb3V0LnRvQ1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgb3V0LnByaW50KGZh
aWx1cmVNZXNzYWdlKTsKKyAgICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAg
b3V0LnByaW50KCJCZWZvcmUgIiwgd2hlbiwgIjpcbiIpOworICAgICAgICAgICAgb3V0LnByaW50
KG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KCJBdCB0aW1lIG9m
IGZhaWx1cmU6XG4iKTsKKyAgICAgICAgb3V0LnByaW50KG1fY29kZSk7CisKKyAgICAgICAgb3V0
LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVy
ZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVuY3Rpb24sIGNvbmRpdGlvbik7CisgICAgICAgIENS
QVNIKCk7CisgICAgfQorICAgIAorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBt
X2R1bXBCZWZvcmU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxp
ZGF0ZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3Jl
KQoreworICAgIFZhbGlkYXRlciB2YWxpZGF0ZXIoY29kZSwgd2hlbiwgZHVtcEJlZm9yZSk7Cisg
ICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclZhbGlkYXRlX2gKKyNkZWZpbmUgQWly
VmFsaWRhdGVfaAorCisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK3Zv
aWQgdmFsaWRhdGUoQ29kZSYsIGNvbnN0IGNoYXIqIHdoZW4gPSBudWxscHRyLCBjb25zdCBjaGFy
KiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEFpclZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDg1NSBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKworY2xhc3Mg
T3Bjb2RlCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpzcGVjaWFsLCA6b3ZlcmxvYWRzCisgICAg
YXR0cl9hY2Nlc3NvciA6a2luZAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgc3BlY2lhbCkK
KyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gc3BlY2lhbAorICAgICAg
ICBAa2luZCA9IDppbnN0CisgICAgICAgIHVubGVzcyBzcGVjaWFsCisgICAgICAgICAgICBAb3Zl
cmxvYWRzID0gW10KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgbWFzbU5hbWUKKyAg
ICAgICAgbmFtZVswXS5kb3duY2FzZSArIG5hbWVbMS4uLTFdCisgICAgZW5kCitlbmQKKworY2xh
c3MgQXJnCisgICAgYXR0cl9yZWFkZXIgOnJvbGUsIDp0eXBlCisKKyAgICBkZWYgaW5pdGlhbGl6
ZShyb2xlLCB0eXBlKQorICAgICAgICBAcm9sZSA9IHJvbGUKKyAgICAgICAgQHR5cGUgPSB0eXBl
CisgICAgZW5kCitlbmQKKworY2xhc3MgT3ZlcmxvYWQKKyAgICBhdHRyX3JlYWRlciA6c2lnbmF0
dXJlLCA6Zm9ybXMKKworICAgIGRlZiBpbml0aWFsaXplKHNpZ25hdHVyZSwgZm9ybXMpCisgICAg
ICAgIEBzaWduYXR1cmUgPSBzaWduYXR1cmUKKyAgICAgICAgQGZvcm1zID0gZm9ybXMKKyAgICBl
bmQKK2VuZAorCitjbGFzcyBLaW5kCisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX2Fj
Y2Vzc29yIDpzcGVjaWFsCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lKQorICAgICAgICBAbmFt
ZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBmYWxzZQorICAgIGVuZAorCisgICAgZGVmID09
KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBTdHJpbmcKKyAgICAgICAgICAgIEBuYW1l
ID09IG90aGVyCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBuYW1lID09IG90aGVyLm5hbWUg
YW5kIEBzcGVjaWFsID09IG90aGVyLnNwZWNpYWwKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAg
ICBkZWYgS2luZC5hcmdLaW5kcyhraW5kKQorICAgICAgICBpZiBraW5kID09ICJBZGRyIgorICAg
ICAgICAgICAgWyJBZGRyIiwgIlN0YWNrU2xvdCIsICJDYWxsQXJnIl0KKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgW2tpbmRdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGFyZ0tp
bmRzCisgICAgICAgIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICBlbmQKK2VuZAorCitjbGFzcyBG
b3JtCisgICAgYXR0cl9yZWFkZXIgOmtpbmRzLCA6YWx0TmFtZQorCisgICAgZGVmIGluaXRpYWxp
emUoa2luZHMsIGFsdE5hbWUpCisgICAgICAgIEBraW5kcyA9IGtpbmRzCisgICAgICAgIEBhbHRO
YW1lID0gYWx0TmFtZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVh
ZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxl
TmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAg
QGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAg
ICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3Mg
VG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGlu
aXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAg
ICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAg
ICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIu
c3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAg
ICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5n
ID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmlu
Zy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJy
b3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlz
ZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNl
ICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAg
ZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5h
bWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAg
ICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9c
QVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVu
IC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVO
dW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQShbYS16QS1aMC05X10rKS8KKyAgICAgICAgICAg
IHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQm
KQorICAgICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2Us
IGlnbm9yZQorICAgICAgICB3aGVuIC9cQVssOipcL10vCisgICAgICAgICAgICByZXN1bHQgPDwg
VG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxl
TmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBd
Lmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAg
IGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc1VEKHRva2VuKQorICAgIHRva2VuID1+IC9c
QSgoVSl8KEQpfChVRCkpXFovCitlbmQKKworZGVmIGlzR0YodG9rZW4pCisgICAgdG9rZW4gPX4g
L1xBKChHKXwoRikpXFovCitlbmQKKworZGVmIGlzS2luZCh0b2tlbikKKyAgICB0b2tlbiA9fiAv
XEEoKFRtcCl8KEltbSl8KEltbTY0KXwoQWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQp
KVxaLworZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgaXNVRCh0b2tlbikgb3IgaXNH
Rih0b2tlbikgb3IgaXNLaW5kKHRva2VuKSBvcgorICAgICAgICB0b2tlbiA9PSAic3BlY2lhbCIg
b3IgdG9rZW4gPT0gImFzIgorZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9r
ZW4gPX4gL1xBKFthLXpBLVowLTlfXSspXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5k
CisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAg
ICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAg
IGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKwor
ICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBh
cnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5w
YXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50
LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmls
ZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3Ig
YXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAg
ZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJy
b3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAg
YWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJl
c3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlm
aWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAg
ICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVJvbGUKKyAgICAgICAgcmVzdWx0
ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHJvbGUgKFUsIEQs
IG9yIFVEKSIpIHVubGVzcyBpc1VEKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICBy
ZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lVHlwZQorICAgICAgICByZXN1bHQgPSB0
b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgdHlwZSAoRyBvciBGKSIp
IHVubGVzcyBpc0dGKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAg
ICBlbmQKKworICAgIGRlZiBjb25zdW1lS2luZAorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJp
bmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBJbW02NCwgVG1wLCBB
ZGRyLCBJbmRleCwgUmVsQ29uZCwgb3IgUmVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkK
KyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBwYXJz
ZQorICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICAKKyAgICAgICAgbG9vcCB7CisgICAgICAg
ICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgIGlmIHRv
a2VuID09ICJzcGVjaWFsIgorICAgICAgICAgICAgICAgIGNvbnN1bWUoInNwZWNpYWwiKQorICAg
ICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAg
ICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBpZiBy
ZXN1bHRbb3Bjb2RlTmFtZV0KKworICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9
IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgdHJ1ZSkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAg
IGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSByZXN1
bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92
ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gT3Bjb2RlLm5ldyhvcGNvZGVO
YW1lLCBmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gb3Bj
b2RlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBb
XQorICAgICAgICAgICAgICAgIGZvcm1zID0gW10KKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBpZiBpc1VEKHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJvbGUgPSBjb25zdW1lUm9sZQorICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3VtZSgiOiIpCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gY29uc3Vt
ZVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
c2lnbmF0dXJlIDw8IEFyZy5uZXcocm9sZSwgdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICIvIgor
ICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIvIikKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSB0b2tlbi5zdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgd2hlbiAiYnJhbmNoIgorICAgICAg
ICAgICAgICAgICAgICAgICAgb3Bjb2RlLmtpbmQgPSA6YnJhbmNoCisgICAgICAgICAgICAgICAg
ICAgIHdoZW4gInRlcm1pbmFsIgorICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLmtpbmQg
PSA6dGVybWluYWwKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyc2VFcnJvcigiQmFkIC8gZGlyZWN0aXZlIikKKyAgICAgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UKKyAgICAgICAgICAgICAgICBlbmQKKwor
ICAgICAgICAgICAgICAgIGlmIGlzS2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9v
cCB7CisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcyA9IFtdCisgICAgICAgICAgICAgICAg
ICAgICAgICBhbHROYW1lID0gbmlsCisgICAgICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kcyA8PCBLaW5kLm5ldyhjb25zdW1lS2luZCkK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICIqIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW4gb25seSBhcHBseSAqIHRvIFRt
cCIpIHVubGVzcyBraW5kc1stMV0ubmFtZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBraW5kc1stMV0uc3BlY2lhbCA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3VtZSgiKiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5k
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICJhcyIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCJhcyIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYWx0TmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9y
bSBoYXMgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Igb3ZlcmxvYWQiKSB1bmxlc3Mga2lu
ZHMubGVuZ3RoID09IHNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGtp
bmRzLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBraW5k
LCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJJ
bW0iIG9yIGtpbmQubmFtZSA9PSAiSW1tNjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIHNpZ25hdHVyZVtpbmRleF0ucm9sZSAhPSAiVSIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBu
b24tdXNlIGFyZ3VtZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0udHlwZSAh
PSAiRyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZv
cm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tZ2VuZXJhbC1wdXJwb3NlIGFyZ3VtZW50IikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3JtcyA8PCBGb3JtLm5ldyhraW5kcywgYWx0TmFtZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrIHVubGVzcyBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZS5s
ZW5ndGggPT0gMAorICAgICAgICAgICAgICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3Ro
ID09IDAKKyAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoW10sIG5pbCkKKyAg
ICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMgPDwg
T3ZlcmxvYWQubmV3KHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAgICAgICBlbmQKKyAgICAgICAg
fQorCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorZW5kCisKKyRmaWxlTmFtZSA9IEFSR1ZbMF0K
KworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZCgkZmlsZU5hbWUpLCAkZmlsZU5hbWUpCisk
b3Bjb2RlcyA9IHBhcnNlci5wYXJzZQorCitkZWYgd3JpdGVIKGZpbGVuYW1lKQorICAgIEZpbGUu
b3BlbigiQWlyI3tmaWxlbmFtZX0uaCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAg
ICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5y
YiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBv
dXRwLnB1dHMgIiNpZm5kZWYgQWlyI3tmaWxlbmFtZX1faCIKKyAgICAgICAgb3V0cC5wdXRzICIj
ZGVmaW5lIEFpciN7ZmlsZW5hbWV9X2giCisKKyAgICAgICAgeWllbGQgb3V0cAorICAgICAgICAK
KyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQWlyI3tmaWxlbmFtZX1faCIKKyAgICB9Citl
bmQKKworZGVmIHdyaXRlQ1BQKGZpbGVuYW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tmaWxlbmFt
ZX0uY3BwIiwgInciKSB7CisgICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRw
LnB1dHMgIi8vIEdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5h
bWV9IC0tIGRvIG5vdCBlZGl0ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2luY2x1
ZGUgXCJjb25maWcuaFwiIgorICAgICAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlyI3tmaWxl
bmFtZX0uaFwiIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICB9CitlbmQKKword3JpdGVIKCJP
cGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJlbnVtIE9wY29k
ZSA6IGludDE2X3QgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLnNvcnQuZWFjaCB7CisgICAgICAgIHwg
b3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICIgICAgI3tvcGNvZGV9LCIKKyAgICB9CisgICAg
b3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVt
T3Bjb2RlcyA9ICN7JG9wY29kZXMua2V5cy5zaXplfTsiCisgICAgb3V0cC5wdXRzICJ9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorICAgIAorICAgIG91dHAucHV0cyAibmFtZXNwYWNl
IFdURiB7IgorICAgIG91dHAucHV0cyAiY2xhc3MgUHJpbnRTdHJlYW07IgorICAgIG91dHAucHV0
cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpPcGNvZGUp
OyIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKword3JpdGVDUFAoIk9w
Y29kZSIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJ3dGYvUHJp
bnRTdHJlYW0uaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIFdURiB7IgorICAgIG91dHAu
cHV0cyAidXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFpcjsiCisgICAgb3V0cC5wdXRzICJ2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkiCisgICAgb3V0
cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiICAgIHN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRv
cGNvZGVzLmtleXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRz
ICIgICAgY2FzZSAje29wY29kZX06IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgb3V0LnBy
aW50KFwiI3tvcGNvZGV9XCIpOyIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVybjsi
CisgICAgfQorICAgIG91dHAucHV0cyAiICAgIH0iCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0
cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorfQorCisjIEZyb20gaGVyZSBvbiwgd2UgZG9uJ3QgdHJ5
IHRvIGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgc2luY2Ugd2UncmUgdXNpbmcgYSByZWN1
cnNpdmUgcGF0dGVybgorIyBtYXRjaGVyLgorCitkZWYgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwg
Zm9ybXMsIGNvbHVtbkluZGV4LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAg
cmV0dXJuIGlmIGZvcm1zLmxlbmd0aCA9PSAwCisKKyAgICBpZiBmaWx0ZXJbZm9ybXNdCisgICAg
ICAgIHJldHVybgorICAgIGVuZAorCisgICAgaWYgY29sdW1uSW5kZXggPj0gZm9ybXNbMF0ua2lu
ZHMubGVuZ3RoCisgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMQorICAgICAg
ICBjYWxsYmFja1tmb3Jtc1swXV0KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisgICAgCisgICAg
Z3JvdXBzID0ge30KKyAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgfCBmb3JtIHwKKyAgICAgICAg
a2luZCA9IGZvcm0ua2luZHNbY29sdW1uSW5kZXhdLm5hbWUKKyAgICAgICAgaWYgZ3JvdXBzW2tp
bmRdCisgICAgICAgICAgICBncm91cHNba2luZF0gPDwgZm9ybQorICAgICAgICBlbHNlCisgICAg
ICAgICAgICBncm91cHNba2luZF0gPSBbZm9ybV0KKyAgICAgICAgZW5kCisgICAgfQorCisgICAg
aWYgc3BlZWQgPT0gOmZhc3QgYW5kIGdyb3Vwcy5sZW5ndGggPT0gMQorICAgICAgICBtYXRjaEZv
cm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZp
bHRlciwgY2FsbGJhY2spCisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgb3V0cC5wdXRz
ICJzd2l0Y2ggKCN7Y29sdW1uR2V0dGVyW2NvbHVtbkluZGV4XX0pIHsiCisgICAgZ3JvdXBzLmVh
Y2hfcGFpciB7CisgICAgICAgIHwga2V5LCB2YWx1ZSB8CisgICAgICAgIG91dHAucHV0cyAiI2lm
IFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgICAgICBLaW5kLmFyZ0tpbmRz
KGtleSkuZWFjaCB7CisgICAgICAgICAgICB8IGFyZ0tpbmQgfAorICAgICAgICAgICAgb3V0cC5w
dXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToiCisgICAgICAgIH0KKyAgICAgICAgbWF0Y2hGb3Jt
cyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0
ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5w
dXRzICIjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisgICAgfQor
ICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0
cC5wdXRzICJ9IgorZW5kCisKK2RlZiBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5z
dCkKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bjb2RlKSB7IgorICAgICRvcGNv
ZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMg
ImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAg
ICAgICAgeWllbGQgb3Bjb2RlLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZE92
ZXJsb2FkU3dpdGNoID0gKChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkgb3Igc3BlZWQgPT0g
OnNhZmUpCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+YXJncy5zaXpl
KCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fk
cy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVy
bG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQKKyAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVuZAorICAg
ICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0
cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9Igor
ZW5kCisgICAgCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIHNwZWVkLCBpbnN0KQor
ICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KSB7CisgICAgICAgIHwgb3Bj
b2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5
aWVsZCBvcGNvZGUsIG5pbCwgbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbHVtbkdl
dHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAg
ICAgICAgICIje2luc3R9LT5hcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgY2Fs
bGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAg
IHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIs
IGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIGVuZAorICAgIH0KK2VuZAorCit3cml0ZUgoIk9w
Y29kZVV0aWxzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFp
ckluc3QuaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeyIKKyAgICAKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29sIG9wZ2Vu
SGlkZGVuVHJ1dGgoKSB7IHJldHVybiB0cnVlOyB9IgorICAgIG91dHAucHV0cyAiI2RlZmluZSBP
UEdFTl9SRVRVUk4odmFsdWUpIGRvIHtcXCIKKyAgICBvdXRwLnB1dHMgIiAgICBpZiAob3BnZW5I
aWRkZW5UcnV0aCgpKVxcIgorICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm4gdmFsdWU7XFwi
CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5zdDo6Zm9yRWFjaEFyZyhjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQo
b3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAg
ICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFy
Z3NbMF0sIEFyZzo6VXNlLCBBcmc6OkdQKTsgLy8gVGhpcyBpcyBiYXNpY2FsbHkgYm9ndXMsIGJ1
dCBpdCB3b3JrcyBmIGFuYWx5c2VzIG1vZGVsIFNwZWNpYWwgYXMgYW4gaW1tZWRpYXRlLiIKKyAg
ICAgICAgICAgIG91dHAucHV0cyAiYXJnc1swXS5zcGVjaWFsKCktPmZvckVhY2hBcmcoKnRoaXMs
IHNjb3BlZExhbWJkYTxFYWNoQXJnQ2FsbGJhY2s+KGZ1bmN0b3IpKTsiCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggeworICAgICAg
ICAgICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG5pbAorICAg
ICAgICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAgICAgICAgICAgICB3aGVuICJVIgorICAg
ICAgICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAgICAgICAgICAgICAgICB3aGVuICJEIgor
ICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKKyAgICAgICAgICAgICAgICB3aGVuICJV
RCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VEZWYiCisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7
aW5kZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJnLnR5cGV9UCk7IgorICAgICAgICAgICAg
fQorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRz
ICJ0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+IgorICAgIG91dHAucHV0cyAiQUxXQVlT
X0lOTElORSBib29sIGlzVmFsaWRGb3JtKE9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIkFyZzo6S2luZCBraW5k
c1tzaXplb2YuLi4oQXJndW1lbnRzKV0gPSB7IGFyZ3VtZW50cy4uLiB9OyIKKyAgICBvdXRwLnB1
dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAg
ICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06Igor
ICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoc2l6ZW9mLi4uKEFyZ3VtZW50cykpIHsiCisgICAg
ICAgIHVubGVzcyBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5l
YWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiCisgICAgICAgICAgICAg
ICAgY29sdW1uR2V0dGVyID0gcHJvYyB7IHwgY29sdW1uSW5kZXggfCAia2luZHNbI3tjb2x1bW5J
bmRleH1dIiB9CisgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAg
ICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICB8IGZvcm0g
fAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0gKG5vdCBmb3JtLmtpbmRzLmRldGVjdCB7
IHwga2luZCB8IGtpbmQuc3BlY2lhbCB9KQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
Ik9QR0VOX1JFVFVSTigje3NwZWNpYWx9KTsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5H
ZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImRlZmF1
bHQ6IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICJ9Igor
ICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0
OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5w
dXRzICJyZXR1cm4gZmFsc2U7ICIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMg
ImlubGluZSBib29sIGlzVGVybWluYWwoT3Bjb2RlIG9wY29kZSkiCisgICAgb3V0cC5wdXRzICJz
d2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwg
b3Bjb2RlIHwKKyAgICAgICAgaWYgb3Bjb2RlLmtpbmQgPT0gOnRlcm1pbmFsIG9yIG9wY29kZS5r
aW5kID09IDpicmFuY2gKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1l
fToiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVybiB0cnVlOyIKKyAg
ICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAg
ICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAi
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKword3JpdGVDUFAoIk9wY29kZVV0
aWxzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3RJ
bmxpbmVzLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVmFsaWRGb3Jt
KCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6
c2FmZSwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAg
ICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhcmdzLnNp
emUoKSA8IDEpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgorICAgICAgICAgICAg
b3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9S
RVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAgICAgICAgb3Zl
cmxvYWQuc2lnbmF0dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBpbmRleCB8
CisgICAgICAgICAgICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZQor
ICAgICAgICAgICAgICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUKKyAg
ICAgICAgICAgICAgICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAgICAgICAgICBu
ZWVkc01vcmVWYWxpZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2Ug
ZG9uJ3QgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAgICAgICAgICAj
IGtpbmQgaW1wbGllcyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBp
cyB0aGUgdHlwZS4gQW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gdmFsaWRh
dGUgdGhlIHR5cGUgaWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBpZiBraW5kLm5h
bWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tp
bmRleH1dLnRtcCgpLmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJpZiAoIWlzI3tvcGNvZGUubmFtZX1WYWxpZCh0aGlzKSkiCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICBlbmQK
KyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIK
KworICAgIG91dHAucHV0cyAiYm9vbCBJbnN0OjphZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRl
eCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsi
CisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAg
IG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisKKyAgICAgICAgaWYgb3Bjb2RlLnNw
ZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdJbmRleCkiCisgICAgICAgICAg
ICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VO
X1JFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+YWRtaXRzU3RhY2soKnRoaXMsIGFyZ0luc3QpKTsi
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgU3dpdGNoIG9uIHRoZSBhcmdJbmRleC4KKyAg
ICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdJbmRleCkgeyIKKworICAgICAgICAgICAg
bnVtQXJncyA9IG9wY29kZS5vdmVybG9hZHMubWFwIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJs
b2FkIHwKKyAgICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoCisgICAgICAg
ICAgICB9Lm1heAorICAgICAgICAgICAgCisgICAgICAgICAgICBudW1BcmdzLnRpbWVzIHsKKyAg
ICAgICAgICAgICAgICB8IGFyZ0luZGV4IHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNh
c2UgI3thcmdJbmRleH06IgorCisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBhbGwgb2YgdGhl
IGZvcm1zIG9mIGFsbCBvZiB0aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywgb3IgZG9uJ3QsIGFkbWl0
IGFuIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAjIGF0IHRoaXMgaW5kZXguIFdlIGV4cGVjdCB0
aGlzIHRvIGJlIGEgdmVyeSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgICAgICBudW1ZZXMgPSAw
CisgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJs
b2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAg
ICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAg
fCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhd
ID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
Tm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBk
ZWxpYmVyYXRlbHkgdGVzdCBudW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3ZSBlbmQgdXAgd2l0aCBu
byBmb3Jtcywgd2Ugd2FudAorICAgICAgICAgICAgICAgICMgdG8gc2F5IHRoYXQgQWRkcmVzcyBp
cyBpbmFkbWlzc2libGUuCisgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAg
ICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICMgTm93IGRvIHRoZSBmdWxsIHRlc3QuCisKKyAgICAgICAgICAgICAgICAgICAgbmVlZE92
ZXJsb2FkU3dpdGNoID0gKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKQorCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKworICAgICAgICAgICAgICAgICAg
ICAgICAgIyBBZ2FpbiwgY2hlY2sgaWYgYWxsIG9mIHRoZW0gZG8gd2hhdCB3ZSB3YW50LgorICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgICAgICAgICAg
bnVtTm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAg
ICAgICAgICAgIyBEb24ndCBlbWl0IGFueXRoaW5nLCBqdXN0IGRyb3AgdG8gZGVmYXVsdC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNl
ICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBob3cgd2UgdGVzdCB0aGUgaHlw
b3RoZXNpcyB0aGF0IGNoYW5naW5nIHRoaXMgYXJndW1lbnQgdG8gYW4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIGFkZHJlc3MgeWllbGRzIGEgdmFsaWQgZm9ybS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGNvbHVtbkluZGV4ID09IGFyZ0luZGV4CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiQXJnOjpBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnc1sje2NvbHVt
bkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsdGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybXMg
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRHJvcCBkb3duLCBlbWl0IG5vIGNvZGUsIHNp
bmNlIHdlIGNhbm5vdCBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBLZWVwIGdvaW5nLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2Fm
ZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3Zl
cmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJ9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIK
KyAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
IH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IjsKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAu
cHV0cyAifSIKKworICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIEluc3Q6OmdlbmVy
YXRlKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkgY29uc3Qi
CisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKGppdCk7Igor
ICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKGNvbnRleHQpOyIKKyAgICBvdXRwLnB1dHMgIkND
YWxsSGVscGVyczo6SnVtcCByZXN1bHQ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRw
LCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8Cisg
ICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JF
VFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+Z2VuZXJhdGUoKnRoaXMsIGppdCwgY29udGV4dCkpOyIK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgZm9ybS5hbHROYW1lCisgICAgICAgICAgICAg
ICAgbWV0aG9kTmFtZSA9IGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1ldGhvZE5hbWUgPSBvcGNvZGUubWFzbU5hbWUKKyAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgaWYgb3Bjb2RlLmtpbmQgPT0gOmJyYW5jaAorICAgICAgICAgICAgICAgIG91dHAu
cHJpbnQgInJlc3VsdCA9ICIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wcmlu
dCAiaml0LiN7bWV0aG9kTmFtZX0oIgorCisgICAgICAgICAgICBmb3JtLmtpbmRzLmVhY2hfd2l0
aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAg
ICAgaWYgaW5kZXggIT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICIsICIKKyAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBjYXNlIGtpbmQubmFtZQorICAgICAg
ICAgICAgICAgIHdoZW4gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgaWYgb3ZlcmxvYWQuc2ln
bmF0dXJlW2luZGV4XS50eXBlID09ICJHIgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uZ3ByKCkiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmZwcigpIgor
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB3aGVuICJJbW0iCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTMy
KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiSW1tNjQiCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTY0KCkiCisgICAgICAgICAgICAg
ICAgd2hlbiAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNBZGRyZXNzKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQmFzZUluZGV4KCkiCisg
ICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCisgICAgICAgICAg
ICAgICAgd2hlbiAiUmVzQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJn
c1sje2luZGV4fV0uYXNSZXN1bHRDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0cC5wdXRzICIpOyIKKyAgICAgICAgICAgIG91
dHAucHV0cyAiT1BHRU5fUkVUVVJOKHJlc3VsdCk7IgorICAgICAgICBlbmQKKyAgICB9CisgICAg
b3V0cC5wdXRzICJSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMg
InJldHVybiByZXN1bHQ7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAifSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZy5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIAogICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IGludmFsaWQoKTsgfQotICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gZGVsZXRlZCgpOyB9CkBA
IC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFsbFJlZ3NJdGVyYWJsZSB7CisgICAgcHVibGljOgor
CisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
aXRlcmF0b3IoKSB7IH0KKworICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3IoUmVnIHJlZykK
KyAgICAgICAgICAgICAgICA6IG1fcmVnKHJlZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgUmVnIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9
CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtX3JlZyA9IG1fcmVnLm5leHQoKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fcmVnID09IG90aGVyLm1fcmVnOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgUmVnIG1fcmVnOworICAg
ICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IoUmVnOjpmaXJzdCgpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcihSZWcoKSk7IH0KKyAgICB9OworCisgICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJs
ZSBhbGwoKSBjb25zdCB7IHJldHVybiBBbGxSZWdzSXRlcmFibGUoKTsgfQorCiBwcml2YXRlOgog
ICAgIHN0YXRpYyB1aW50OF90IGludmFsaWQoKSB7IHJldHVybiAweGZmOyB9CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3Bw
CShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
QXRPZmZzZXRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdDo6UmVnaXN0ZXJBdE9mZnNldExpCiAgICAgaWYgKG9mZnNldEJhc2VUeXBl
ID09IEZyYW1lUG9pbnRlckJhc2VkKQogICAgICAgICBvZmZzZXQgPSAtKHN0YXRpY19jYXN0PHB0
cmRpZmZfdD4obnVtYmVyT2ZSZWdpc3RlcnMpICogc2l6ZW9mKHZvaWQqKSk7CiAKLSAgICBmb3Ig
KFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTtyZWcgPSByZWcubmV4
dCgpKSB7CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0
KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAgaWYgKHJlZ2lzdGVyU2V0LmdldChyZWcp
KSB7CiAgICAgICAgICAgICBhcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChyZWcsIG9mZnNldCkpOwog
ICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCShyZXZpc2lvbiAxOTEy
MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDEzIEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0
T2Zmc2V0KiBmaW5kKFJlZykgY29uc3Q7CiAgICAgdW5zaWduZWQgaW5kZXhPZihSZWcpIGNvbnN0
OyAvLyBSZXR1cm5zIFVJTlRfTUFYIGlmIG5vdCBmb3VuZC4KIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNv
bnN0CisgICAgeworICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDog
bV9yZWdpc3RlcnMpCisgICAgICAgICAgICBmdW5jdG9yKGVudHJ5KTsKKyAgICB9CisKIHByaXZh
dGU6CiAgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+IG1fcmVnaXN0ZXJzOwogfTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE5MTIzOSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE3LDYgKzExNywxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IgPT0gb3Ro
ZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0
b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRCaXRzKCkpCisgICAgICAgICAgICBmdW5jdG9yKFJlZzo6
ZnJvbUluZGV4KGluZGV4KSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFu
eShSZWcgcmVnKSB7IHNldChyZWcpOyB9CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3Iu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9CaXRWZWN0b3IuaAkocmV2aXNpb24gMTkx
MjM5KQorKysgU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
MCw3ICszMjAsNyBAQCBwdWJsaWM6IAogICAgIH07CiAgICAgCiAgICAgU2V0Qml0c0l0ZXJhYmxl
IHNldEJpdHMoKSBjb25zdCB7IHJldHVybiBTZXRCaXRzSXRlcmFibGUoKnRoaXMpOyB9Ci0gICAg
CisKIHByaXZhdGU6CiAgICAgc3RhdGljIHVuc2lnbmVkIGJpdHNJblBvaW50ZXIoKQogICAgIHsK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYv
U2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRMYW1i
ZGFfaAorI2RlZmluZSBTY29wZWRMYW1iZGFfaAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gWW91
IGNhbiB1c2UgU2NvcGVkTGFtYmRhIHRvIGVmZmljaWVudGx5IHBhc3MgbGFtYmRhcyB3aXRob3V0
IGFsbG9jYXRpbmcgbWVtb3J5IG9yIHJlcXVpcmluZworLy8gdGVtcGxhdGUgc3BlY2lhbGl6YXRp
b24gb2YgdGhlIGNhbGxlZS4gVGhlIGNhbGxlZSBzaG91bGQgYmUgZGVjbGFyZWQgYXM6CisvLwor
Ly8gdm9pZCBmb28oY29uc3QgU2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPiYp
OworLy8KKy8vIFRoZSBjYWxsZXIganVzdCBkb2VzOgorLy8KKy8vIHZvaWQgZm9vKHNjb3BlZExh
bWJkYTxNeVRoaW5ncyogKGludCwgU3R1ZmYmKT4oWyZdIChpbnQgeCwgU3R1ZmYmIHkpIC0+IE15
VGhpbmdzKiB7IGJsYWggfSkpOworLy8KKy8vIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBmb28o
KSBub3QgZXNjYXBpbmcgdGhlIGxhbWJkYS4gVGhlIGxhbWJkYSBpcyBvbmx5IHZhbGlkIHdoaWxl
IGZvbygpIGlzCisvLyBvbiB0aGUgc3RhY2sgLSBoZW5jZSB0aGUgbmFtZSBTY29wZWRMYW1iZGEu
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2NvcGVkTGFtYmRhOwor
dGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4K
K2NsYXNzIFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVi
bGljOgorICAgIFNjb3BlZExhbWJkYShSZXN1bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1
bWVudFR5cGVzJiYuLi4pID0gbnVsbHB0ciwgdm9pZCogYXJnID0gbnVsbHB0cikKKyAgICAgICAg
OiBtX2ltcGwoaW1wbCkKKyAgICAgICAgLCBtX2FyZyhhcmcpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB+U2NvcGVkTGFtYmRhKCkKKyAgICB7CisgICAgfQorCisgICAgUmVzdWx0VHlwZSBvcGVy
YXRvcigpKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1
cm4gbV9pbXBsKG1fYXJnLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4u
Lik7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlc3VsdFR5cGUgKCppbXBsKSh2b2lkKiBhcmcs
IEFyZ3VtZW50VHlwZXMmJi4uLikgbV9pbXBsOworICAgIHZvaWQgKm1fYXJnOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBTY29wZWRMYW1i
ZGFGdW5jdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRUeXBlcywgdHlwZW5hbWUgRnVuY3Rvcj4KK2NsYXNzIFNjb3BlZExhbWJkYUZ1bmN0b3I8
UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLiksIEZ1bmN0b3I+IDogcHVibGljIFNjb3BlZExh
bWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgorICAgIFNjb3Bl
ZExhbWJkYUZ1bmN0b3IoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRM
YW1iZGEoaW1wbEZ1bmN0aW9uLCB0aGlzKQorICAgICAgICAsIG1fZnVuY3RvcihmdW5jdG9yKQor
ICAgIHsKKyAgICB9CisKKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKEZ1bmN0b3ImJiBmdW5jdG9y
KQorICAgICAgICA6IFNjb3BlZExhbWJkYShpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwg
bV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgor
ICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwgQXJndW1l
bnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisgICAgICAgICAg
ICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisg
ICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5
cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwg
RnVuY3Rvcj4gc2NvcGVkTGFtYmRhKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgcmV0
dXJuIFNjb3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBTY29wZWRMYW1iZGFfaAorCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9T
aGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDExIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisg
ICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCiBw
cml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMp
IG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwxMSBAQCBSZWY8U2hhcmVkVGFzazxGdW5j
dGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVk
VGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFz
azxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNrKEZ1bmN0b3ImJiBmdW5jdG9yKQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwg
RnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263878</attachid>
            <date>2015-10-22 16:47:45 -0700</date>
            <delta_ts>2015-10-22 20:43:50 -0700</delta_ts>
            <desc>started working on B3LowerToAir</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>406889</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKKyRDb25zdAorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1l
bnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUg
eworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1
cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUo
KTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50
UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERv
dWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisgICAg
UmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRp
bHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jhc2ljQmxvY2s6OkJh
c2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2luZGV4
KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNpY0Jsb2Nr
Ojp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCit2b2lkIEJhc2ljQmxv
Y2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIzOjphZGRQcmVk
ZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRo
aXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFz
aWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxhY2VQcmVkZWNl
c3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsK
K30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1
ZW5jeSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0
LnByaW50KCIgICAgIiwgZGVlcER1bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2sKKyNkZWZpbmUg
QjNCYXNpY0Jsb2NrCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUg
IkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVM
aXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7
CisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAv
LyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogZHVtcFByZWZpeCA9ICIjIjsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAg
ICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFZhbHVl
TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAg
VmFsdWVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAg
IFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJu
IG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4g
bV92YWx1ZXM7IH0KKworICAgIHZvaWQgYXBwZW5kKFZhbHVlKik7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUq
IGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAgdW5zaWduZWQgbnVt
U3VjY2Vzc29ycygpIGNvbnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVk
IGluZGV4KTsKKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisK
KyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Cisg
ICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KTsKKyAgICBTdWNj
ZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2Nr
cygpOworICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3Vj
Y2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1Q
cmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAg
ICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVu
c2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25z
dCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVj
ZXNzb3JzW2luZGV4XTsgfQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyBy
ZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29y
KEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsK
KyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2Nr
KiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRl
ZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAg
IEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgUHJlZGVjZXNzb3JM
aXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNz
IERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKEJh
c2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworRGVlcEJhc2ljQmxvY2tEdW1wIGRl
ZXBEdW1wKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1
bXAoYmxvY2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIz
QmFzaWNCbG9jaworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jh
c2ljQmxvY2tJbmxpbmVzX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKKyNpbmNs
dWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
K1ZhbHVlVHlwZSogQmFzaWNCbG9jazo6YXBwZW5kTmV3KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcHJvY2Vk
dXJlLmFkZDxWYWx1ZVR5cGU+KGFyZ3VtZW50cy4uLik7CisgICAgYXBwZW5kKHJlc3VsdCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordW5zaWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vzc29y
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5udW1T
dWNjZXNzb3JzKCk7Cit9CisKK0ZyZXF1ZW50ZWRCbG9jayBCYXNpY0Jsb2NrOjpzdWNjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZh
bHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitGcmVxdWVudGVkQmxvY2smIEJhc2ljQmxv
Y2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxD
b250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2NvbnN0IEJhc2ljQmxvY2s6
OlN1Y2Nlc3Nvckxpc3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJl
dHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitCYXNp
Y0Jsb2NrKiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3QK
K3sKKyAgICByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOworfQorCitCYXNpY0Jsb2Nr
KiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0
dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworU3VjY2Vzc29yQ29sbGVjdGlvbjxC
YXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKQor
eworICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxp
c3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK1N1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNC
bG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2Nr
LCBjb25zdCBTdWNjZXNzb3JMaXN0PihzdWNjZXNzb3JzKCkpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrVXRpbHNfaAorI2RlZmluZSBC
M0Jhc2ljQmxvY2tVdGlsc19oCisKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8
d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9j
az4KK2Jvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHBy
ZWRlY2Vzc29yKQoreworICAgIEJhc2ljQmxvY2s6OkFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29y
cyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChwcmVkZWNlc3NvcnMuY29udGFp
bnMocHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcmVkZWNlc3Nv
cnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayog
YmxvY2ssIEJhc2ljQmxvY2sgKnByZWRlY2Vzc29yKQoreworICAgIEJhc2ljQmxvY2s6OkFkamFj
ZW5jeUxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBib29s
IHJlc3VsdCA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3Nv
cnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBwcmVkZWNl
c3NvcikgeworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ktLV0gPSBwcmVkZWNlc3NvcnMubGFz
dCgpOworICAgICAgICAgICAgcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAg
IHJlc3VsdCA9IHRydWU7CisgICAgICAgICAgICAvLyBPdXQgb2YgY2F1dGlvbiwgd2Uga2VlcCBn
b2luZyBldmVuIHRob3VnaCB0aGUgcHJlZGVjZXNzb3IgbGlzdCBjYW5ub3QgaGF2ZQorICAgICAg
ICAgICAgLy8gZHVwbGljYXRlcy4KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
KQoreworICAgIEJhc2ljQmxvY2s6OkFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2Nr
LT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNz
b3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkg
eworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMg
cmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJl
YWNoYWJsZS4KK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hh
YmlsaXR5KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7Cisg
ICAgLy8gQ2xlYXIgYWxsIHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBibG9ja3MpCisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNp
emUoMCk7CisKKyAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0JvY2sqLCBJbmRleFNldDxCYXNp
Y0Jsb2NrPj4gd29ya2xpc3Q7CisgICAgd29ya2xpc3Qubm9kZShibG9ja3NbMF0pOworICAgIHdo
aWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAg
ICAgICAgICBpZiAod29ya2xpc3QuYWRkKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3Vj
Y2Vzc29yLT5wcmVkZWNlc3NvcnMoKS5hcHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoYmxvY2tzW2ldLnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICBi
bG9ja3NbaV0gPSBudWxscHRyOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNp
bmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVk
ZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK3R5
cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+
PiBCbG9ja1dvcmtsaXN0OworCisvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNo
b3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8g
RXh0ZW5kZWQgYmxvY2sgd29ya2xpc3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0
YS1kYXRhIGFsb25nIHdpdGggdGhlIGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5
IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vl
bi4gSXQncyB1c2VmdWwgZm9yCisvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRy
ZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUK
Ky8vIHN1Y2Nlc3NvciBpbmRleC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVk
QmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQs
IEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKKwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRP
cmRlcjsKKwordHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0
aE9yZGVyOworCit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sq
LCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jsb2NrV29ya2xpc3RfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNr
U3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsKKwordW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGlu
c3QpCit7CisgICAgc3dpdGNoIChpbnN0Lm9yaWdpbi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENo
ZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAg
cmV0dXJuIDI7CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVjaWFs
OjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQorICAg
IDogbV9jaGVja09wY29kZShvcGNvZGUpCisgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQor
eworfQorCitDaGVja1NwZWNpYWw6On5DaGVja1NwZWNpYWwoKQoreworfQorCitJbnN0IENoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNvbnN0IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAgSW5z
dCBoaWRkZW5CcmFuY2gobV9jaGVja09wY29kZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRlbkJy
YW5jaC5hcmdzLnJlc2l6ZShtX251bUNoZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9udW1DaGVja0FyZ3M7IGktLTspCisgICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzW2ldID0gaW5z
dC5hcmdzW2kgKyAxXTsKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNr
U3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6
RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZv
ckVhY2hBcmcoY2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwg
bV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVj
aWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0
KS5pc1ZhbGlkKCkKKyAgICAgICAgJiYgaXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251
bUNoZWNrQXJncyArIDEsIGluc3QpOworfQorCitib29sIENoZWNrU3BlY2lhbDo6YWRtaXRzU3Rh
Y2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgaWYgKGFyZ0luZGV4ID49
IDEgJiYgYXJnSW5kZXggPCAxICsgbV9udW1DaGVja0FyZ3MpCisgICAgICAgIHJldHVybiBoaWRk
ZW5CcmFuY2goaW5zdCkuYWRtaXRzU3RhY2soYXJnSW5kZXggLSAxKTsKKyAgICByZXR1cm4gYWRt
aXRzU3RhY2tJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBh
cmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXRl
KEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4
dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZmFpbCA9IGhpZGRlbkJyYW5jaChpbnN0KS5n
ZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgIEFTU0VSVChmYWlsLmlzU2V0KCkpOworCisgICAg
VmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7
CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZhbHVlLT5vcGNvZGUoKSkpIHsKKyAgICAgICAgaWYgKHZh
bHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCkKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVl
UmVwKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYg
dmFsdWUtPmFyZ3NbMF0tPmlzSW50KDApKQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVS
ZXA6OmNvbnN0YW50KDApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwcy5hcHBlbmQo
cmVwRm9yQXJnKGNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzJdKSk7CisgICAgICAgIHJlcHMuYXBw
ZW5kKHJlcEZvckFyZyhjb250ZXh0LmNvZGUsIGluc3QuYXJnc1sxXSkpOworICAgIH0gZWxzZSB7
CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2spOworICAgICAgICByZXBz
LmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMSkpOworICAgIH0KKworICAgIGFwcGVuZFJlcHNJ
bXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgcmVwcyk7CisgICAgCisgICAg
Y29udGV4dC5sYXRlUGF0aHMuYXBwZW5kKAorICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVy
YXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1bmN0aW9uPigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAg
ICAgZmFpbC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0
YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgICAgICAgICAgICAgIEFT
U0VSVChzdGFja21hcCk7CisKKyAgICAgICAgICAgICAgICBTdGFja21hcDo6R2VuZXJhdGlvblBh
cmFtcyBwYXJhbXM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLnN0YWNrbWFwID0gc3RhY2ttYXA7CisgICAgICAgICAgICAgICAg
cGFyYW1zLnJlcHMgPSByZXBzOworICAgICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJz
ID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVyczsKKworICAgICAgICAgICAgICAgIHN0YWNrbWFw
LT5tX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0pKTsKK30KKwor
dm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KG1fY2hlY2tPcGNvZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIpIik7Cit9
CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoIkIzOjpDaGVja1ZhbHVlIGxvd2VyZWQgdG8gIiwgbV9jaGVj
a09wY29kZSwgIiB3aXRoICIsIG1fbnVtQ2hlY2tBcmdzLCAiIGFyZ3MuIik7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
aGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
aGVja1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrU3Bl
Y2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2luY2x1ZGUgIkFpck9wY29kZS5o
IgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCisvLyBXZSB3YW50IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBh
IGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2FudCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKKy8v
IG91dC1vZi1saW5lIGNvZGUgaW5zdGVhZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhp
cyByZWFzb24sIGEgQ2hlY2tTcGVjaWFsIHdpbGwgcmVtZW1iZXIKKy8vIHdoaWNoIGJyYW5jaCBv
cGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0
aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQKKy8vIHdpbGwgY3JlYXRlIGFuIEluc3Qgd2l0aCB0aGF0
IG9wY29kZSBwbHVzIHRoZSBhcHByb3ByaWF0ZSBhcmdzIGZyb20gdGhlIG93bmluZyBJbnN0IHdo
ZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkgb2YgdGhlIGNhbGxiYWNrcy4KKy8vCisvLyBOb3RlIHRo
YXQgZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsIHdlIGV4cGVjdCB0aGF0IHRo
ZSBCMyBhcmd1bWVudHMgYXJlIHRoZSByZXZlcnNlCisvLyBvZiB0aGUgQWlyIGFyZ3VtZW50cyAo
QWRkKGEsIGIpID0+IEFkZDMyIGIsIGEpLiBFeGNlcHQ6CisvLyAtIENoZWNrU3ViKDAsIHgpLCB3
aGljaCB0dXJucyBpbnRvIEJyYW5jaE5lZzMyIHguCisvLyAtIENoZWNrTXVsKGEsIGIpLCB3aGlj
aCB0dXJucyBpbnRvIE11bDMyIGIsIGEgYnV0IHdlIHBhc3MgQW55IGZvciBhJ3MgVmFsdWVSZXAu
CisKK2NsYXNzIENoZWNrU3BlY2lhbCA6IHB1YmxpYyBTdGFja21hcFNwZWNpYWwgeworcHVibGlj
OgorICAgIENoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3Mp
OworICAgIH5DaGVja1NwZWNpYWwoKTsKKworICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMg
dGhlIEluc3QgcmVwcmVzZW50aW5nIHRoZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAg
IEluc3QgaGlkZGVuQnJhbmNoKGNvbnN0IEluc3QmKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5z
dCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQg
YXJnSW5kZXgpIG92ZXJyaWRlOworCisgICAgLy8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3
aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4gYnJhbmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBh
dGggdGhhdAorICAgIC8vIGdlbmVyYXRlcyB0aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUh
CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVsZXBycyYs
IEdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNr
T3Bjb2RlOworICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0NoZWNrU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgp
Cit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gK
KyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBj
YXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8v
IFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgorICAg
IENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29k
ZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0
LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9
PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOworICAgIH0KKworICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAg
ICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKKyNpbmNsdWRlICJERkdDb21tb24uaCIK
KyNpbmNsdWRlICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVtcElSKCkKK3sKKyAgICByZXR1
cm4gRlRMOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkgfHwgRlRMOjpzaG91bGREdW1wRGlz
YXNzZW1ibHkoKSB8fCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3Vs
ZER1bXBJUkF0RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEdyYXBoQXRF
YWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCkKK3sKKyAgICByZXR1cm4g
REZHOjp2YWxpZGF0aW9uRW5hYmxlZCgpIHx8IHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgp
OworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJu
IE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFNh
dmVJUkJlZm9yZVBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZVZhbGlkYXRp
b25GYWlsdXJlKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Nv
bW1vbl9oCisjZGVmaW5lIEIzQ29tbW9uX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2Jvb2wgc2hvdWxkRHVtcElSKCk7Citib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNl
KCk7Citib29sIHNob3VsZFZhbGlkYXRlSVIoKTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFj
aFBoYXNlKCk7Citib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCk7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb21tb25faAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRj
aGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKwor
VGVzdExvYWROb3RaZXJvMSA9IEFuZChMb2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90
WmVybzIgPSBBbmQobGVmdCwgTG9hZChhZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQs
IHJpZ2h0KQorCitUZXN0TG9hZFplcm8xID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0
KSwgJDApCitUZXN0TG9hZFplcm8yID0gRXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAk
MCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5kKGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEg
PSBFcXVhbChMb2FkKGFkZHJlc3MpLCByaWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBM
b2FkKGFkZHJlc3MpKQorTm90ID0gRXF1YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0
LCByaWdodCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Qz
MlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMy
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNDb25zdDMyVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRp
YyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7
IH0KKyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMy
LCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVl
KCkKK3sKK30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2Rl
ZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFs
dWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyBy
ZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7Cisg
ICAgCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFs
dWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30K
Kwordm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25z
dERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVlX2gKKworI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENv
bnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9
CisgICAgCisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBN
ZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29u
c3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+
Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgcG9pbnRlckR1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29u
dHJvbFZhbHVlX2gKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFz
aWNCbG9jazsKKworY2xhc3MgQ29udHJvbFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIEp1bXA6CisgICAgICAgIGNhc2UgQnJhbmNo
OgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBPb3BzOgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU3dpdGNoOiAKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEgc3ViY2xhc3Mgb2YgQ29udHJvbFZhbHVl
LCBzbyB3ZSB3YW50CisgICAgICAgICAgICAvLyBzd3RpY2hWYWx1ZS0+YXM8Q29udHJvbFZhbHVl
PigpIHRvIHJldHVybiBub24tbnVsbC4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0Owor
CisgICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNv
bnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sg
c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaV07
IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gbV9zdWNjZXNzb3JzW2ldOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRo
aXMgZm9yIHN1YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9
CisKKyAgICAvLyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JM
aXN0IG1fc3VjY2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworCisgICAgLy8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUg
PT0gT29wcyk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250
cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiByZXN1bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCByZXN1bHQpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAg
fQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJnZXQp
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVu
ZCh0YXJnZXQpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29u
dHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBCYXNp
Y0Jsb2NrKiBubykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4s
IHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAg
ICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBw
ZW5kKG5vKTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEIzQ29udHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
RnJlcXVlbmN5Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisKKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRnJlcXVl
bmN5Q2xhc3MgZnJlcXVlbmN5KQoreworICAgIHN3aXRjaCAoZnJlcXVlbmN5KSB7CisgICAgY2Fz
ZSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vcm1hbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBGcmVxdWVuY3lDbGFzczo6UmFyZToKKyAgICAgICAg
b3V0LnByaW50KCJSYXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbmN5Q2xhc3NfaAorI2RlZmluZSBCM0ZyZXF1
ZW5jeUNsYXNzX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xh
c3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBo
eXBvdGhlc2lzIGFib3V0IHRoZSBmcmVxdWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3Ry
dWN0LiBUaGlzIGlzCisgICAgLy8gdGhlIGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJh
c2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8g
V2UgZXhwZWN0IHRoYXQgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hl
ZCBzdXBlciByYXJlbHkuIEl0J3MgdmFsaWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlv
bnMgdGhhdCBwdW5pc2ggUmFyZSBjb2RlLiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRp
b25zIHdoZXJlIHlvdQorICAgIC8vIGhhdmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJl
cXVlbmN5IGNsYXNzIGZyb20gYSBtZXJnaW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAg
ICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVyIGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3Jt
YWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNo
IFJhcmUgY29kZSB2ZXJ5IGJhZGx5LgorICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW5jeUNsYXNzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVudGVkQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmlu
ZSBCM0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxv
Y2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxv
Y2s7CisKK3R5cGVkZWYgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVu
dGVkQmxvY2s7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNGcmVx
dWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBCM0dlbmVy
aWNGcmVxdWVudGVkQmxvY2tfaAorCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVxdWVudGVkIGJsb2NrIGlz
IGEgdHVwbGUgb2YgQmFzaWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNzLiBJdCdzIHVzdWFsbHkg
dXNlZCBhcyBhCisvLyBzdWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNC
bG9jaz4KK2NsYXNzIEdlbmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2soCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bnVsbHB0ciwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1h
bCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fZnJlcXVlbmN5KGZyZXF1
ZW5jeSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZXF1ZW50
ZWRCbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jayA9PSBv
dGhlci5tX2Jsb2NrCisgICAgICAgICAgICAmJiBtX2ZyZXF1ZW5jeSA9PSBvdGhlci5tX2ZyZXF1
ZW5jeTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAqdGhpcyAhPSBGcmVxdWVudGVkQmxvY2soKTsKKyAgICB9CisKKyAgICBCYXNp
Y0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICBCYXNpY0Jsb2Nr
KiYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVl
bmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZnJlcXVlbmN5KCkgIT0gRnJlcXVl
bmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgICAgIG91dC5wcmludChmcmVxdWVuY3koKSwgIjoi
KTsKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKG1fYmxvY2spKTsKKyAgICB9CisKK3By
aXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBGcmVxdWVuY3lDbGFzcyBtX2Zy
ZXF1ZW5jeTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJ
bmRleE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5k
ZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisjZGVm
aW5lIEIzSW5kZXhNYXBfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8g
VGhpcyBpcyBhIG1hcCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBl
ZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFs
dWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFs
dWVzIGNhbiBoYXZlIHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qg
b2YgVmFsdWVzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xh
c3MgSW5kZXhNYXAgeworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXpl
ID0gMCkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6
ZShzaXplKTsKKyAgICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKKyAgICBj
b25zdCBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVj
dG9yPFZhbHVlPiBtX3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVk
ZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5n
cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxv
Y2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVh
dGUgdG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3Bh
cnNlCisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5
b3Ugd2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+
LiBTbywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhT
ZXQgeworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBh
ZGQoVCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5k
ZXgoKSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1
YmxpYzoKKyAgICAgICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24s
IGNvbnN0IEluZGV4U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0
aW9uKQorICAgICAgICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRl
cmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxl
Y3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0
b3IgaXRlcikKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAg
ICAgICAgICAgICAgICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0
ZXIgPT0gb3RoZXIubV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29s
bGVjdGlvbjsKKyAgICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRv
ciBtX2l0ZXI7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAg
IGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9z
ZXQuZW5kKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlw
ZSYgbV9jb2xsZWN0aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsK
KworICAgIC8vIEZvciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1
ZXMocHJvY2VkdXJlKTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAv
LyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVz
KGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAg
ICBjb25zdCBCaXRWZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21t
YVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNl
dEJpdHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5k
ZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1l
c3BhY2UgeworCitjbGFzcyAKKworY2xhc3MgTG93ZXJUb0FpciB7CitwdWJsaWM6CisgICAgTG93
ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX3By
b2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgbV9jb2RlKGNvZGUpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgfQorcHJpdmF0ZToKKyAgICBJbmRleFNldDxW
YWx1ZT4gbV9sb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgZm9yIHRoYXQgd2lsbCBoYXZlIG5v
IFRtcCBpbiBBaXIuCisgICAgSW5kZXhTZXQ8VmFsdWU+IG1fcGlubmVkOyAvLyBUaGVzZSBhcmUg
dmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1ZSwg
VG1wPiBtX3ZhbHVlVG9UbXA7CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAg
ICBDb2RlJiBtX2NvZGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBs
b3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQoreworICAgIFBoYXNl
U2NvcGUgcGhhc2VTY29wZShwcm9jZWR1cmUsICJsb3dlclRvQWlyIik7CisgICAgTG93ZXJUb0Fp
ciBsb3dlclRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgbG93ZXJUb0Fpci5ydW4oKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0xvd2VyVG9BaXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTG93ZXJU
b0Fpcl9oCisjZGVmaW5lIEIzTG93ZXJUb0Fpcl9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsg
fQorCisvLyBUaGlzIGxvd2VycyB0aGUgY3VycmVudCBCMyBwcm9jZWR1cmUgdG8gYW4gQWlyIGNv
ZGUuCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRl
cm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdN
YXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisK
KyMgVGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0
aGUgdG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJl
dmVyIHBvc3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hl
ciBpcyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9
IExvYWQoYWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitTdG9yZUFkZExvYWQx
ID0gU3RvcmUoQWRkKExvYWQoYWRkcmVzcyksIHZhbHVlKSwgYWRkcmVzcykKK1N0b3JlQWRkTG9h
ZDIgPSBTdG9yZShBZGQodmFsdWUsIExvYWQoYWRkcmVzcykpLCBhZGRyZXNzKQorU3RvcmVBbmRM
b2FkID0gU3RvcmUoQW5kKExvYWQoYWRkcmVzcyksIHZhbHVlKSwgYWRkcmVzcykKK1N0b3JlID0g
U3RvcmUodmFsdWUsIGFkZHJlc3MpCisKK1JldHVybiA9IFJldHVybih2YWx1ZSkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1ZTo6fk1l
bW9yeVZhbHVlKCkKK3sKK30KKwordm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5wcmludCgi
b2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzTWVtb3J5VmFsdWVfaAorI2RlZmluZSBCM01lbW9yeVZh
bHVlX2gKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIE1lbW9yeVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6
CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBj
YXNlIExvYWRGbG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoK
KyAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAg
IGNhc2UgU3RvcmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1v
cnlWYWx1ZSgpOworCisgICAgaW50cHRyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZz
ZXQ7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisg
ICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3Ig
YW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJl
cyB0aGUgcmV0dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
b2ludGVyLAorICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBM
b2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQx
NlM6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUKHR5cGUgPT0gRG91YmxlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAg
Y2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBs
b2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50
ZXIsIGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwg
b3Bjb2RlID09IExvYWRGbG9hdCA/IERvdWJsZSA6IEludDMyLCBvcmlnaW4sIHBvaW50ZXIpCisg
ICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElT
QUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNl
IExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2Fk
MTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgY2FzZSBMb2FkRmxv
YXQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBm
b3Igc3RvcmVzLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwK
KyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bj
b2RlLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9m
ZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAg
ICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAg
ICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNNZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6
OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29k
ZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTm9wOgorICAgICAgICBvdXQu
cHJpbnQoIk5vcCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJZGVudGl0eToKKyAgICAg
ICAgb3V0LnByaW50KCJJZGVudGl0eSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25z
dDMyOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ29uc3Q2NDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDY0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0RG91
YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgb3V0
LnByaW50KCJTdGFja1Nsb3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJndW1lbnRS
ZWc6CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnRSZWciKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICBvdXQucHJpbnQoIkZyYW1lUG9pbnRlciIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGQ6CisgICAgICAgIG91dC5wcmludCgiQWRk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN1YjoKKyAgICAgICAgb3V0LnByaW50KCJT
dWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTXVsOgorICAgICAgICBvdXQucHJpbnQo
Ik11bCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEaXY6CisgICAgICAgIG91dC5wcmlu
dCgiRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICBv
dXQucHJpbnQoIkNoaWxsRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1vZDoKKyAg
ICAgICAgb3V0LnByaW50KCJNb2QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0QW5k
OgorICAgICAgICBvdXQucHJpbnQoIkJpdEFuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBCaXRPcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRPciIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBCaXRYb3I6CisgICAgICAgIG91dC5wcmludCgiQml0WG9yIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFNobDoKKyAgICAgICAgb3V0LnByaW50KCJTaGwiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU1NocjoKKyAgICAgICAgb3V0LnByaW50KCJTU2hyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFpTaHI6CisgICAgICAgIG91dC5wcmludCgiWlNociIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0
OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MTY6CisgICAgICAgIG91dC5wcmlu
dCgiU0V4dDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAg
b3V0LnByaW50KCJTRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgWkV4dDMyOgor
ICAgICAgICBvdXQucHJpbnQoIlpFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBG
Um91bmQ6CisgICAgICAgIG91dC5wcmludCgiRlJvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIElUb0Q6CisgICAgICAgIG91dC5wcmludCgiSVRvRCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBEVG9JMzI6CisgICAgICAgIG91dC5wcmludCgiRFRvSTMyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkVxdWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIk5v
dEVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBv
dXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJU
aGFuOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzRXF1YWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICBvdXQucHJpbnQo
IkdyZWF0ZXJFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZToKKyAgICAg
ICAgb3V0LnByaW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCZWxvdzoK
KyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
Ym92ZUVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlRXF1YWwiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvd0VxdWFs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgb3V0LnByaW50
KCJMb2FkOFoiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBv
dXQucHJpbnQoIkxvYWQ4UyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZaOgor
ICAgICAgICBvdXQucHJpbnQoIkxvYWQxNloiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
TG9hZDE2UzoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZTIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkRmxvYXQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgb3V0LnByaW50KCJT
dG9yZTgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgb3V0
LnByaW50KCJTdG9yZTE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlRmxvYXQ6
CisgICAgICAgIG91dC5wcmludCgiU3RvcmVGbG9hdCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDQ2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJDQ2FsbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBQYXRjaHBvaW50OgorICAgICAgICBvdXQucHJpbnQoIlBhdGNocG9p
bnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIG91dC5w
cmludCgiQ2hlY2tBZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tTdWI6Cisg
ICAgICAgIG91dC5wcmludCgiQ2hlY2tTdWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q2hlY2tNdWw6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tNdWwiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2siKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgb3V0LnByaW50KCJVcHNpbG9uIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBoaToKKyAgICAgICAgb3V0LnByaW50KCJQaGki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSnVtcDoKKyAgICAgICAgb3V0LnByaW50KCJK
dW1wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgb3V0LnBy
aW50KCJCcmFuY2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3dpdGNoOgorICAgICAg
ICBvdXQucHJpbnQoIlN3aXRjaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXR1cm46
CisgICAgICAgIG91dC5wcmludCgiUmV0dXJuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE9vcHM6CisgICAgICAgIG91dC5wcmludCgiT29wcyIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09wY29kZV9oCisKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitlbnVtIE9wY29kZSA6IGludDE2X3QgeworICAgIC8vIEEgbm8tb3AgdGhhdCByZXR1cm5zIFZv
aWQsIHVzZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0byByZW1vdmUgYSB2YWx1ZS4KKyAgICBOb3As
CisgICAgIAorICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1c2FibGUgd2l0aCBhbnkgdmFs
dWUgdHlwZS4KKyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0YW50cy4gVXNlIHRoZSBDb25z
dFZhbHVlKiBjbGFzc2VzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28g
dGhhdCB3ZSBjYW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUgd2Ugd291bGQgY29uc3RydWN0
IHRoZW0uIExhcmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRvIGNyZWF0ZS4KKyAgICBDb25z
dDMyLAorICAgIENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisKKyAgICAvLyBUaGUgbWFnaWNh
bCBzdGFjayBzbG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0
aGUgcHJvZ3JhbSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlv
dSBwdXQgaXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pv
aW50IHJhbmdlIG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVl
IGNsYXNzLgorICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJl
Z2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJv
Z3JhbQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQg
aXQsIGFuZCB0aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1cmUgdGhhdCB3ZQorICAgIC8v
IGRvbid0IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFsbG9jYXRpb24gb3IgY2FsbHMg
KGVpdGhlciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQorICAgIC8vIHN0YWNrIG9yIHBy
ZXNlcnZpbmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3RlcikuIFVzZSB0aGUgQXJndW1lbnRS
ZWdWYWx1ZSBjbGFzcy4gVGhlIHJldHVybgorICAgIC8vIHR5cGUgaXMgZWl0aGVyIHBvaW50ZXIo
KSAoZm9yIEdQUnMpIG9yIERvdWJsZSAoZm9yIEZQUnMpLgorICAgIEFyZ3VtZW50UmVnLAorCisg
ICAgLy8gVGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4gcHV0IHRoaXMgYW55d2hlcmUgaW4gY29u
dHJvbCBmbG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVsZCB0aGUKKyAgICAvLyBmcmFtZSBwb2lu
dGVyLCB3aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29tcGlsZXIgY2hhbmdlcyB0aGUgZnJhbWUgcG9p
bnRlciB0ZW1wb3JhcmlseSBmb3Igc29tZQorICAgIC8vIHNpbGx5IHJlYXNvbiwgdGhlIEZyYW1l
UG9pbnRlciBpbnRyaW5zaWMgd2lsbCByZXR1cm4gd2hlcmUgdGhlIGZyYW1lIHBvaW50ZXIgKnNo
b3VsZCogYmUgbm90CisgICAgLy8gd2hlcmUgaXQgaGFwcGVucyB0byBiZSByaWdodCBub3cuCisg
ICAgRnJhbWVQb2ludGVyLAorCisgICAgLy8gUG9seW1vcnBoaWMgbWF0aCwgdXNhYmxlIHdpdGgg
YW55IHZhbHVlIHR5cGUuCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAor
CisgICAgLy8gSW50ZWdlciBtYXRoLgorICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZl
ciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCisgICAgTW9kLAorICAgIEJpdEFuZCwKKyAgICBC
aXRPciwKKyAgICBCaXRYb3IsCisgICAgU2hsLAorICAgIFNTaHIsCisgICAgWlNociwKKworICAg
IC8vIENhc3RzIGFuZCBzdWNoLgorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIEludDMyOgorICAg
IFNFeHQ4LAorICAgIFNFeHQxNiwKKyAgICAvLyBUYWtlcyBJbnQzMiBhbmQgcmV0dXJucyBJbnQ2
NDoKKyAgICBTRXh0MzIsCisgICAgWkV4dDMyLAorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIERv
dWJsZToKKyAgICBGUm91bmQsCisgICAgLy8gVGFrZXMgaW50cyBhbmQgcmV0dXJucyBEb3VibGU6
CisgICAgSVRvRCwKKyAgICAvLyBUYWtlcyBEb3VibGUgYW5kIHJldHVybnMgSW50MzI6CisgICAg
RFRvSTMyLAorCisgICAgLy8gUG9seW1vcnBoaWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFu
eSB2YWx1ZSB0eXBlLiBSZXR1cm5zIGludDMyIDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCisgICAg
Ly8gaXMganVzdCBFcXVhbCh4LCAwKS4KKyAgICBFcXVhbCwKKyAgICBOb3RFcXVhbCwKKyAgICBM
ZXNzVGhhbiwKKyAgICBHcmVhdGVyVGhhbiwKKyAgICBMZXNzRXF1YWwsCisgICAgR3JlYXRlckVx
dWFsLAorCisgICAgLy8gSW50ZWdlciBjb21wYXJpc29ucy4gUmV0dXJucyBpbnQzMiAwIG9yIDEu
CisgICAgQWJvdmUsCisgICAgQmVsb3csCisgICAgQWJvdmVFcXVhbAorICAgIEJlbG93RXF1YWws
CisKKyAgICAvLyBNZW1vcnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5k
IHRoZSBsb2FkZWQgdHlwZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHJl
dHVybiBJbnQzMjoKKyAgICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlosCisgICAg
TG9hZDE2UywKKyAgICAvLyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9hdCwKKyAg
ICAvLyBUaGlzIHJldHVybiB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwK
KworICAgIC8vIE1lbW9yeSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBp
cyBzdG9yZWQuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIElu
dDMyIHZhbHVlOgorICAgIFN0b3JlOCwKKyAgICBTdG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMg
YSBEb3VibGUgdmFsdWU6CisgICAgU3RvcmVGbG9hdCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1v
cnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgYW5kIERvdWJsZToKKyAgICBTdG9yZSwKKwor
ICAgIC8vIFRoaXMgaXMgYSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcg
dGhlIHN5c3RlbSBDIGNhbGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0
aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxs
LAorCisgICAgLy8gVGhpcyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVl
IGNsYXNzLiBUaGlzIGlzIHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBi
dXQgb25seSBlbWl0cyBjb2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBj
YWxsYmFjayBnZXRzIHRvIGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEg
c3RhY2ttYXAgYWxvbmcgd2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1
bWVudCBtdXN0IGJlIHBhc3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBh
IHN0YWNrbWFwIGFyZ3VtZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8g
cmVxdWVzdAorICAgIC8vIHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNl
dCBmcm9tIHRoZSB0b3Agb2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAv
LyBzdGFjay4KKyAgICBQYXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhl
IENoZWNrVmFsdWUgY2xhc3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBn
ZW5lcmF0aW9uCisgICAgLy8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNv
bWUgY29kZSBhZnRlciB0aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAg
ICAvLyBmcm9tIHRoZSBjaGVjaywgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxz
byBnZXQgdG8gc3VwcGx5IGEgc3RhY2ttYXAuIE5vdGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90
IGFsbG93ZWQgdG8ganVtcCBiYWNrIGludG8gdGhlIG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNs
b3cgcGF0aCwgc2luY2UgdGhlIGNvbXBpbGVyCisgICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUg
ZXhlY3V0aW9uIG9mIHRoZXNlIGluc3RydWN0aW9ucyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRu
J3QgaGFwcGVuLiBGb3IKKyAgICAvLyBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQn
czoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0Fk
ZCh4LCB5KQorICAgIC8vCisgICAgLy8gVGhlbiBpdCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRv
OgorICAgIC8vCisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5
KGEpCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxi
YWNrcyB1c2VkIGJ5IHRoZSB0d28gQ2hlY2tBZGRzLiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAor
ICAgIC8vIGNhbGxiYWNrcy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4g
aWYgdGhleSBhcmUgZGlmZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIg
dGhlIGZpcnN0IENoZWNrQWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5v
dCBoYXZlIHBvc3NpYmx5IHRha2VuIHNsb3cKKyAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBz
ZWNvbmQgQ2hlY2tBZGQncyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIENoZWNrQWRkLAor
ICAgIENoZWNrU3ViLAorICAgIENoZWNrTXVsLAorCisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4
aXRzLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMs
IHRoaXMgaGFzIGEKKyAgICAvLyBzdGFja21hcCB3aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4g
VGhpcyB0YWtlcyBhbiBJbnQzMiBhcmd1bWVudCB0aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgK
KyAgICAvLyBmdWxsIGJyYW5jaCBmdXNpb24gaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBB
IHRydWUgdmFsdWUganVtcHMgdG8gdGhlIGdlbmVyYXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgor
ICAgIENoZWNrLAorCisgICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NB
LgorICAgIFVwc2lsb24sIC8vIFRoaXMgdXNlcyB0aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAg
IFBoaSwKKworICAgIC8vIEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBK
dW1wLAorICAgIAorICAgIC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZh
bHVlIHR5cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8v
IENvbnRyb2xWYWx1ZSBjbGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhl
IHRydWUgc3VjY2Vzc29yLgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMg
b3ZlciBlaXRoZXIgSW50MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgor
ICAgIFN3aXRjaCwKKworICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9u
J3Qga25vdyB0aGVpciByZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55Cisg
ICAgLy8gdHlwZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIFJldHVybiwKKwor
ICAgIC8vIFRoaXMgaXMgYSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2
ZXIgZ2V0IGhlcmUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9Owor
CitpbmxpbmUgYm9vbCBpc0NoZWNrTWF0aChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNh
c2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCitu
YW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmln
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzT3JpZ2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lk
IE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
T3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNPcmlnaW5faAorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2UgdG8gcHV0IG9yaWdpbnMg
b24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFibGUgdG8KKy8vIGFjY291
bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1Y3Rpb24gY29ycmVzcG9u
ZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25zIG11c3QgcHJlc2VydmUg
T3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUgYSB0cmFuc2Zvcm1hdGlv
biB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFib3V0IHRoZW0uCitjbGFz
cyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihjb25zdCB2b2lkKiBkYXRh
ID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAg
Y29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IHZvaWQq
IG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNP
cmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9p
bnRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29t
bWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBv
aW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0
YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50VmFsdWVfaAorI2Rl
ZmluZSBCM1BhdGNocG9pbnRWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVk
ZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgUGF0Y2hwb2ludFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50
OyB9CisKKyAgICB+UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsK
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0
Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNv
bnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRj
aHBvaW50LCB0eXBlLCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2Nv
cGUuaCIKKworI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIK
KyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBj
aGFyKiBuYW1lKQorICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICwgbV9uYW1lKG5h
bWUpCit7CisgICAgaWYgKHNob3VsZER1bXBJUkF0RWFjaFBhaHNlKCkpIHsKKyAgICAgICAgZGF0
YUxvZygiQjMgYmVmb3JlICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1
cmUpOworICAgIH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAg
ICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJpbmcocHJvY2VkdXJlKTsKK30KKworUGhhc2VTY29wZTo6
flBoYXNlU2NvcGUoKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkK
KyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlLCBtX25hbWUsIG1fZHVtcEJlZm9yZS5kYXRhKCkp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQ
aGFzZVNjb3BlX2gKKyNkZWZpbmUgQjNQaGFzZVNjb3BlX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJv
Y2VkdXJlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQ
aGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKFByb2NlZHVyZSYsIGNvbnN0IGNo
YXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0aW9uCisK
K3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBt
X25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sKK30KKworUHJvY2VkdXJl
Ojp+UHJvY2VkdXJlKCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJlOjphZGRCbG9jayhk
b3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9j
ayA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jaz4obV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVu
Y3kpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tz
LmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lk
IFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2Nr
KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJv
Y2VkdXJlX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaW5jbHVkZSA8d3RmL0JhZy5oPgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICBQcm9jZWR1cmUoKTsKKyAgICB+UHJvY2VkdXJl
KCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVy
YXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6CisgICAg
ICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2Vk
dXJlKQorICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQor
CisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2ln
bmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGls
ZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgp
KQorICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gaW5leDsKKyAg
ICAgICAgfQorCisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgIHVuc2ln
bmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgY2xhc3MgVmFsdWVzQ29s
bGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xsZWN0aW9uKFByb2NlZHVy
ZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVi
bGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9j
ZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3IqKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmJsb2NrKG1faW5kZXgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAgICAgICBQcm9j
ZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAg
ICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KG1fcHJvY2VkdXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQor
CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3Zh
bHVlcy5zaXplKCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF07IH0KKyAgICAgICAgVmFsdWUqIG9w
ZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAg
IH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIFZhbHVlc0NvbGxl
Y3Rpb24oKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxC
YXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+
IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M1Byb2NlZHVyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJv
Y2VkdXJlSW5saW5lc19oCisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFyZ3VlbnRzLi4u
IGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2YWx1ZShuZXcg
VmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7CisgICAgVmFsdWVUeXBl
KiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoV1RGOjptb3ZlKHZh
bHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0YWNrU2xvdEtpbmQuaCIKKwor
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcg
bmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0
LCBTdGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBT
dGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAg
b3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEIz
U3RhY2tTbG90S2luZF9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tlZCBzdGFjayBz
bG90IG5lZWRzIHRvIGJlIGtlZXAgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2Ug
aW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBU
aGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNr
CisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBj
b3VsZCBzaGFyZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRlZCB0aGF0IHRo
ZXkgYXJlbid0IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29tcGlsZXIgc3Rp
bGwgaGFzIHRvIGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJlIGVzY2FwZWQK
KyAgICAvLyBleHBsaWNpdGx5IGluIElSLgorICAgIEFub255bW91cworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3RhY2tTbG90S2lu
ZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RLaW5kX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFj
a1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNr
U2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUo
KTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsg
fQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisg
ICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwg
eW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRo
b2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xl
c3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZy
b21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFs
dWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisKKyAgICBTdGFja1Nsb3RWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgdW5z
aWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgU3RhY2tTbG90LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5
dGVTaXplKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQ
KDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgU3RhY2tT
bG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVl
ID0gIiwgUmF3UG9pbnRlcihtX29wYXF1ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMp
LAorICAgICAgICAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgp
KSwgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3Rl
cnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAor
CisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2lu
Y2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrU3BlY2lhbDsKK2NsYXNz
IFN0YWNrbWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBTdGFja21hcCB7CitwdWJs
aWM6CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgeworICAgICAgICAvLyBUaGlzIGlzIHRo
ZSBWYWx1ZSBjb250YWluaW5nIHRoZSBzdGFja21hcC4KKyAgICAgICAgVmFsdWUqIHZhbHVlOwor
CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgorICAgICAgICBTdGFja21hcCogc3Rh
Y2ttYXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVhbCB2YWx1ZSByZXBy
ZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVwPiBy
ZXBzOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJl
IHVzZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgfTsKKyAgICAK
KyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3Qg
R2VuZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5j
dGlvbj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7CisgICAgfQorCisg
ICAgLy8gU2V0IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBzdGFja21hcC4gVGhp
cyBpcyB1c2VmdWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisgICAgLy8gY2FuIGJl
IGR1cGxpY2F0ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhhdmluZyBkaWZmZXJl
bnQgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBhbGwgb2YgdGhvc2Ug
ZHVwbGljYXRlcyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2ZXIgaGlnaC1sZXZl
bCBkYXRhIHN0cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNyZWF0ZSB0aGUgdmFs
dWUuCisgICAgdm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAgIHsKKyAgICAgICAg
bV9vcGFxdWUgPSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fb3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxwZXJzIHdoZW4gdXNp
bmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0T3BhcXVlSW5kZXgo
c2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdpc2VfY2FzdDx2b2lk
Kj4oaW5kZXgpKTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkgY29uc3QgeyByZXR1
cm4gYml0d2lzZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAvLyBDb25zdHJhaW4g
YW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNrbWFwLiBOb3RlIHRo
YXQgaW5kZXggemVybyByZWZlcnMgdG8gdGhlCisgICAgLy8gZmlyc3QgYXJndW1lbnQgdG8gdGhh
dCBWYWx1ZSwgZXZlbiBpZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3Ig
ZXhhbXBsZSwgaW4gYQorICAgIC8vIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJv
ciB0byBjb25zdHJhaW4gaW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdCB3b3Vs
ZAorICAgIC8vIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhl
IGdlbmVyYXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuIGRlcGVuZAorICAgIC8vIG9u
IHRoZSByZXBzIGZvciB0aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNv
bnN0cmFpbih1bnNpZ25lZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAg
ICAgIGlmIChpbmRleCArIDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBzLmdy
b3coaW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisKKyAg
ICB2b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1f
Y2xvYmJlcmVkLm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNs
b2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lkIHNldEdl
bmVyYXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICBtX2dl
bmVyYXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rp
b24+KGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFsOworICAgIGZy
aWVuZCBjbGFzcyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9vcGFxdWUgeyBu
dWxscHRyIH07CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVy
YXRvcj4gbV9nZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVn
aXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhlciBk
dXBsaWNhdGVkIGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJnZSB0
aGUgdXNlZCByZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFs
KGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBTcGVjaWFsKG5hbWUpCit7Cit9CisKK1N0YWNrbWFw
U3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFs
Ojpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJn
Q2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICByZXR1cm4gZm9yRWFjaEFyZ0ltcGwoMCwgMSwg
aW5zdCwgY2FsbGJhY2spOworfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNWYWxpZChJbnN0
JiBpbnN0KQoreworICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsKK30KKworYm9v
bCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0lu
ZGV4KQoreworICAgIHJldHVybiBhZG1pdHNTdGFjaygwLCAxLCBpbnN0LCBhcmdJbmRleCk7Cit9
CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmIGluc3Qs
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIFZhbHVlKiB2YWx1ZSA9
IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgp
OworCisgICAgLy8gRklYTUU6IElmIHRoZSBJbnN0IHRoYXQgdXNlcyB0aGUgU3RhY2ttYXBTcGVj
aWFsIGdldHMgZHVwbGljYXRlZCwgdGhlbiB3ZSBlbmQgdXAgbWVyZ2luZyB1c2VkCisgICAgLy8g
cmVnaXN0ZXIgc2V0cyBmcm9tIG11bHRpcGxlIHBsYWNlcy4gVGhpcyBjdXJyZW50bHkgd29uJ3Qg
aGFwcGVuIHNpbmNlIEFpciBkb2Vzbid0IGhhdmUgdGFpbGR1cAorICAgIC8vIG9yIHRoaW5ncyBs
aWtlIHRoYXQuIEJ1dCBtYXliZSBldmVudHVhbGx5IGl0IGNvdWxkIGJlIGEgcHJvYmxlbS4KKyAg
ICBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzLm1lcmdlKHVzZWRSZWdpc3RlcnMpOworfQorCitj
b25zdCBSZWdpc3RlclNldCYgU3RhY2ttYXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5z
dCYgaW5zdCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21h
cCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHJldHVybiBzdGFja21hcC0+
Y2xvYmJlcmVkKCk7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgK
KyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJn
cywKKyAgICBJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxi
YWNrPiYgY2FsbGJhY2spCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAg
ICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNT
RVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2
YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChp
bnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuLnNp
emUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAg
IEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAgICAgICAgVmFs
dWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7CisKKyAgICAg
ICAgY2FsbGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBl
KCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKKyAg
ICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJnQXJncywK
KyAgICBJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisg
ICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFT
U0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQo
dmFsdWUtPmNoaWxkcmVuLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKworICAgIFN0YWNr
bWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgQVNTRVJUKHN0YWNrbWFw
KTsKKworICAgIC8vIEZvciB0aGUgSW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMgdG8gaGF2ZSB0
aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAt
IG51bUlnbm9yZWRBaXJBcmdzICE9IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgLSBudW1JZ25vcmVk
QjNBcmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdhcmRsZXNzIG9mIGNv
bnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVtZW50cyBmb3IgdGhl
aXIgYXJndW1lbnRzLiBGb3IKKyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3QgaGF2ZSBhIG5vbi1G
UC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRpb25zIGFzIHdlbGwg
YXMgdGhlCisgICAgLy8gYXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAg
VmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICAg
ICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKKyAgICAgICAg
CisgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6VG1wOgor
ICAgICAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAg
IGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAg
ICBicmVhazsgLy8gT0sKKyAgICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAgICBpZiAo
YXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpICYmCisgICAgICAg
ICAgICAgICAgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJl
Z2lzdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUo
Y2hpbGQtPnR5cGUoKSk7CisKKyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5cGUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIgb2YgY29uc3Ry
YWludHMgaGFzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIEIzIGNoaWxkcmVu
LgorICAgIEFTU0VSVChzdGFja21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1ZS0+Y2hpbGRyZW4u
c2l6ZSgpKTsKKworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBzdXBwbGllZCBjb25zdHJh
aW50cy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNBcmdzOyBpIDwgc3RhY2tt
YXAtPm1fcmVwcy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+
Y2hpbGQoaSk7CisgICAgICAgIFZhbHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOwor
ICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUln
bm9yZWRBaXJBcmdzXTsKKworICAgICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0
aGlzIGFib3ZlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNv
bWVSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlk
IGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVu
dDoKKyAgICAgICAgICAgIGlmIChhcmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1Ao
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBu
b3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgK
KyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJn
cywKKyAgICBJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFs
dWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2tt
YXAoKTsKKworICAgIHVuc2lnbmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUln
bm9yZWRBaXJBcmdzICsgbnVtSWdub3JlZEIzQXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0lu
ZGV4ID49IHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMg
dGhhdCB0aGVyZSB3YXMgbm8gY29uc3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIC8vIFdlIG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFj
ayBpcyBub3QgYSB2YWxpZCBpbnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAg
IC8vIHRyYW5zbGF0ZXMgdG8gYSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1f
cmVwc1tzdGFja21hcEFyZ0luZGV4XS5raW5kKCkgPT0gQW55KQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFZhbHVlUmVwPiBTdGFja21hcFNw
ZWNpYWw6OnJlcHMoR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIEluc3QmIGluc3QpCit7Cisg
ICAgVmVjdG9yPFZhbHVlUmVwPiByZXN1bHQ7CisgICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwg
MSwgaW5zdCwgcmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFN0YWNrbWFw
U3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwoCisgICAgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQs
IHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBJbnN0JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+JiBy
ZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0
LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKGNvbnRl
eHQuY29kZSwgYXJnKSk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgIH0K
K30KKworVmFsdWVSZXAgU3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JBcmcoQ29kZSYgY29kZSwgY29u
c3QgQXJnJiBhcmcpCit7CisgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgY2FzZSBUbXA6
CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgSW1tOgorICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIHJldHVybiBWYWx1ZVJl
cDo6Y29uc3RhbnQoYXJnLnZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFkZHI6
CisgICAgICAgIGlmIChhcmcuYmFzZSgpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQor
ICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkpOworICAgICAg
ICBBU1NFUlQoYXJnLmJhc2UoKSA9PSBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOworICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSAtIGNvZGUu
ZnJhbWVTaXplKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gVmFsdWVSZXAoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
bWFwU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tt
YXBTcGVjaWFsX2gKKyNkZWZpbmUgQjNTdGFja21hcFNwZWNpYWxfaAorCisjaW5jbHVkZSAiQWly
U3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWFscyB0aGF0
IGhhdmUgc3RhY2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNrbWFwIGJ5Cisv
LyBhc2tpbmcgZm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24n
dCBuZWVkIHRvIGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNrbWFwLgorCitj
bGFzcyBTdGFja21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAg
ICBTdGFja21hcFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRM
YW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJ
bnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJl
Z2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7
CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9y
IGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gc3Vi
Y2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgorCisgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgK
KyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6
OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBib29sIGlzVmFsaWRJbXBsKAorICAgICAgICB1bnNp
Z25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAg
ICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBhZG1pdHNTdGFja0ltcGwoCisgICAgICAgIHVuc2ln
bmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAg
ICBBaXI6Okluc3QmKTsKKworICAgIC8vIEdldHMgdGhlIHJlcHMgYXJyYXkgdGhlIHdheSB0aGF0
IHRoZSBzdGFja21hcCBnZW5lcmF0b3IgY2FsbGJhY2sgd291bGQgd2FudC4KKyAgICBWZWN0b3I8
VmFsdWVSZXA+IHJlcHMoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIEFpcjo6SW5zdCYpOworCisg
ICAgLy8gQXBwZW5kcyB0aGUgcmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBzdGFydGluZyB3aXRo
IG51bUlnbm9yZWRBcmdzLCB0byB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgIHZvaWQgYXBwZW5kUmVw
c0ltcGwoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBB
aXI6Okluc3QmLCBWZWN0b3I8VmFsdWVSZXA+Jik7CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVw
Rm9yQXJnKEFpcjo6Q29kZSYsIGNvbnN0IEFpcjo6QXJnJik7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9u
X2gKKyNkZWZpbmUgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBnZW5lcmljIHdyYXBwZXIgYXJvdW5kIGxpc3Rz
IG9mIGZyZXF1ZW50ZWQgYmxvY2tzLCB3aGljaCBnaXZlcyB5b3UganVzdCB0aGUgYmxvY2tzLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrLCB0eXBlZGVmIFN1Y2Nlc3Nvckxpc3Q+Citj
bGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JDb2xsZWN0
aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgewor
ICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsg
fQorICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9saXN0
W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRleCkgeyBy
ZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3Jb
XShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJhc2ljQmxv
Y2sqJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAg
ICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAg
ICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDAp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3NvckNvbGxl
Y3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0
aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lkbmV4ID09IG90aGVyLm1faW5kZXg7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rp
b24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAg
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7IH0KKyAgICBpdGVy
YXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisKK3ByaXZhdGU6
CisgICAgU3VjY2Vzc29yTGlzdCYgbV9saXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisjaW5j
bHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit2b2lkIFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobV9jYXNlVmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKG1fdGFyZ2V0KSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaENh
c2VfaAorI2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxv
Y2suaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0
Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAg
U3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJn
ZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUoY2FzZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0
KHRhcmdldCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0KKworICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgdGFyZ2V0KCkg
Y29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jaygp
IGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmJsb2NrKCk7IH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZTsK
KyAgICBGcmVxdW50ZWRCbG9jayB0YXJnZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbGR1ZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9
CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7
CisgICAgU3dpdGNoQ2FzZSByZXN1bHQgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIG1fc3Vj
Y2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5y
ZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6
YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIG1fc3VjY2Vz
c29ycy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNjZXNzb3JzW21fc3Vj
Y2Vzc29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7CisgICAgbV92YWx1ZXMu
YXBwZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3aXRjaFZhbHVlOjpk
dW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRoaXMgZGVzdHJ1Y3Rp
dmVseSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAgICBvdXQucHJpbnQo
bGlzdER1bXAoKnRoaXMpLCAiLCBmYWxsVGhyb3VnaCA9ICIsIGZhbGxUaHJvdWdoKCkpOworfQor
CitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4s
IEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0
Y2gsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3
aXRjaFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpbmNsdWRlICJCM0NvbnRy
b2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0
dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8g
bnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVt
Q2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8g
VGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4Lgor
ICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlc1tpXTsgfQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVlcygp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICBGcmVxdWVudGVkQmxvY2sgZmFsbFRo
cm91Z2goKSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisgICAgRnJlcXVl
bnRlZEJsb2NrJiBmYWxsVGhyb3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0K
KworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0K
KyAgICBTd2l0Y2hDYXNlIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN3aXRjaENhc2UoY2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7Cisg
ICAgfQorICAgIFN3aXRjaENhc2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3
aXRjaChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dp
dGNoQ2FzZSBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0
Y2gtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBTd2l0Y2hWYWx1ZSogbV9zd2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
fTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IHNpemUoKSk7IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMg
dGhpbmdzIGEgYml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwK
KyAgICAvLyB0aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFz
IHlvdSByZXZpc2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250
YWluIHNvbWUgb3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdh
cyByZW1vdmVkLgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisK
KyAgICB2b2lkIGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3Vn
aCk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNo
VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5
cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAg
IG91dC5wcmludCgiVm9pZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2
NDoKKyAgICAgICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBEb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBU
eXBlIHsKKyAgICBWb2lkLAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsK
KworaW5saW5lIGJvb2wgaXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IElu
dDMyIHx8IHR5cGUgPT0gSW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBl
KQoreworICAgIHJldHVybiB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRl
cigpIGNvbnN0Cit7CisgICAgaWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgcmV0dXJu
IEludDMyOworICAgIHJldHVybiBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworVXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30K
Kwordm9pZCBVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCJeIiwgbV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9u
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAor
I2RlZmluZSBCM1Vwc2lsb25WYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkg
eyByZXR1cm4gb3Bjb2RlID09IFVwc2lsb247IH0KKworICAgIH5VcHNpbG9uVmFsdWUoKTsKKwor
ICAgIFZhbHVlKiBwaGkoKSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAg
LCBtX3BoaShwaGkpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGkt
PnR5cGUoKSk7CisgICAgfQorCisgICAgVmFsdWUqIG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1l
c3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9y
ZSkKKyAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgbV93aGVuKHdo
ZW4pCisgICAgICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKwor
I2RlZmluZSBWQUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBmYWlsKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRp
dGlvbiwgdG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2
b2lkIHJ1bigpCisgICAgeworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7Cisg
ICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1
ZSo+IHZhbHVlSW5CbG9jazsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jZWR1cmUpIHsKKyAgICAgICAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spCisgICAgICAgICAgICAgICAgdmFsdWVJbkJsb2Nr
LmFkZCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1f
cHJvY2VkdXJlLnZhbHVlcygpKQorICAgICAgICAgICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsK
KworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAg
VkFMSURBVEUodmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCisgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisK
KyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgeworICAgICAgICAgICAg
Zm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4i
LCBwb2ludGVyRHVtcChjaGlsZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3Vj
Y2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUoCisgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAo
IkF0ICIsICpibG9jaywgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogRXhwYW5kIHRoaXMg
dmFsaWRhdGlvbiBwaGFzZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ4MAorICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZhaWwoCisg
ICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciog
ZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdl
KQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAg
ICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJC
MyBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwg
Y29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlm
IChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hl
biwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsK
KyAgICAgICAgfQorCisgICAgICAgIG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAg
IGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQmVmb3JlICIsIHdo
ZW4sICI6XG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludChtX2R1bXBCZWZvcmUpOworICAgICAg
ICB9CisgICAgICAgIG91dC5wcmludCgiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAg
IG91dC5wcmludChtX3Byb2NlZHVyZSk7CisKKyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNz
YWdlKTsKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShmaWxlbmFtZSwgbGluZU51
bWJlciwgZnVuY3Rpb24sIGNvbmRpdGlvbik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAg
IAorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVm
b3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoUHJv
Y2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZv
cmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUsIHdoZW4sIGR1bXBCZWZv
cmUpOworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzVmFsaWRhdGVfaAorI2RlZmluZSBCM1ZhbGlkYXRlX2gKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwordm9pZCB2
YWxpZGF0ZShQcm9jZWR1cmUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hh
ciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitWYWx1ZTo6
flZhbHVlKCkKK3sKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSog
dmFsdWUpCit7CisgICAgLy8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFj
ZSByZXBsYWNlbWVudCBvZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAg
ICAvLyBhIHBsYWluIElkZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUg
aW5mb3JtYXRpb24gd2UgbmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91
cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1
ZSBpbiBwbGFjZS4KKworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5
cGUgPSBtX3R5cGU7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxv
Y2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+
cmVwbGFjZW1lbnQ7CisgICAgdm9pZCogbWlzYyA9IHRoaXMtPm1pc2M7CisKKyAgICBSRUxFQVNF
X0FTU0VSVCh0eXBlID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1
ZSgpOworCisgICAgbmV3ICh0aGlzKSAoaW5kZXgsIElkZW50aWZ5LCB0eXBlLCBvcmlnaW4sIHZh
bHVlKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQg
PSByZXBsYWNlbWVudDsKKyAgICB0aGlzLT5taXNjID0gbWlzYzsKK30KKwordm9pZCBWYWx1ZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4
LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNv
ZGUpOworCisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAg
IGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBwb2ludGVyRHVtcChjaGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0
OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdP
dXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBzdHJpbmcpOworCisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK2Jvb2wgVmFs
dWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3Qg
VmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAor
eworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQor
Citkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQ
cmludFN0cmVhbSYpIGNvbnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9w
Y29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBj
YXNlIElkZW50aXR5OgorICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVs
OgorICAgIGNhc2UgRGl2OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAg
Y2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNl
IFNobDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6
CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4g
Zmlyc3RDaGlsZC0+dHlwZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1
cm4gcG9pbnRlcigpOworICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2Fz
ZSBEVG9JMzI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2Ug
TGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAg
ICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6Cisg
ICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJu
IEludDMyOworICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1
cm4gSW50NjQ7CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1
cm4gRG91YmxlOworICAgIGNhc2UgTm9wOgorICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBkZWZh
dWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1
ZV9oCisKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVmFsdWUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlzdDsKKworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIkAiOworCisgICAgc3RhdGljIGJvb2wg
YWNjZXB0cyhPcGNvZGUpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgflZhbHVlKCk7
CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAK
KyAgICAvLyBOb3RlIHRoYXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVw
bGFjaW5nIHZhbHVlcyB3aXRoIGlkZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7
IHJldHVybiBtX29wY29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fb3JpZ2luOyB9CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAvLyBUaGlzIGNv
bXB1dGVzIHRoZSB0eXBlIHVzaW5nIHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0
dXJuIG1fY2hpbGRyZW47IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBj
b25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRp
dHkoVmFsdWUqKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisKKyAgICAvLyBUaGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBleGFtcGxlLCBp
ZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZlIGEKKyAgICAv
LyBBcmd1bWVudFJlZ1ZhbHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8gaWYgKEFyZ3Vt
ZW50UmVnVmFsdWUqIGFyZ3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCkp
IHsKKyAgICAvLyAgICAgdGhpbmdzCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gVGhpcyB3aWxs
IHJldHVybiBudWxsIGlmIHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRoaXMgd29ya3Mg
YmVjYXVzZSB0aGlzIHJldHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2VwdHMob3Bjb2Rl
KCkpIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhcygp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25zdDsKKyAg
ICAKKyAgICBib29sIGhhc0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0ludDMyKCkgY29u
c3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQ2
NCgpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50
KCkgY29uc3Q7CisgICAgYm9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdDsKKworICAgIGJv
b2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisKKyAg
ICBTdGFja21hcCogc3RhY2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJv
Y2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4
cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxp
Y2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAg
ICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBt
X2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAg
Ly8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hlbiB0
aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6
IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1f
dHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAg
IC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0
eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2Rl
KG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQor
ICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENo
aWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZv
ciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2Rl
IGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKKyAgICBl
eHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdp
bikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkK
KyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAgICAgICAsIG1f
b3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZh
cmFyZ3MuCisgICAgZXhwaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikK
KyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAg
ICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAg
ICwgbV9jaGlsZHJlbihjaGlsZHJlbikKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFR5cGUg
dHlwZUZvcihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKworICAgIC8vIFRoaXMgZ3JvdXAg
b2YgZmllbGRzIGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgorICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgIFR5cGUgbV90eXBlOworICAgIAorICAg
IE9yaWdpbiBtX29yaWdpbjsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisKK3B1Ymxp
YzoKKyAgICBCYXNpY0Jsb2NrKiBvd25lciB7IG51bGxwdHIgfTsgLy8gY29tcHV0ZWQgbGF6aWx5
LgorICAgIFZhbHVlKiByZXBsYWNlbWVudCB7IG51bGxwdHIgfTsgLy8gdXNlZCBmb3IgYW5hbHlz
ZXMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KK307CisKK2NsYXNzIERlZXBWYWx1ZUR1bXAgeworcHVi
bGljOgorICAgIERlZXBWYWx1ZUR1bXAoVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUo
dmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVlLT5k
ZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxs
PiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWYWx1ZSogbV92YWx1ZTsKK307CisKK0RlZXBW
YWx1ZUR1bXAgZGVlcER1bXAoVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVwVmFsdWVE
dW1wKHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNk
ZWZpbmUgQjNWYWx1ZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5j
bHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVl
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QqIFZhbHVlOjphcygpCit7CisgICAgaWYgKFQ6
OmFjY2VwdHMob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHRoaXMp
OworICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZT50eXBlbmFtZSBUPgorY29uc3Qg
VCogVmFsdWU6OmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxWYWx1ZSo+KHRo
aXMpLT5hczxUPigpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAg
cmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbnQzMl90IFZhbHVlOjphc0ludDMy
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgpOworfQor
Citib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3Q2
NFZhbHVlPigpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJ
bnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0KCk7Cit9CisK
K2ludDY0X3QgVmFsdWU6OmFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSA/
IGFzSW50MzIoKSA6IGFzSW50NjQoKTsKK30KKworYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2
YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsK
K30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxD
b25zdERvdWJsZVZhbHVlPigpOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworU3Rh
Y2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUqIGNoZWNrID0g
YXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2ttYXA7CisgICAg
aWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4oKSkK
KyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1ZhbHVlSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1
ZVJlcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1ZVJl
cDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQp
OworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb25lOgorICAgIGNhc2UgU29tZVJl
Z2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAgb3V0
LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNr
OgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
b2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50
OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
Qzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZVJlcDo6
S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVSZXA6OkFu
eToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAg
ICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVl
UmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJT
dGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpDb25z
dGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBf
aAorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0byBk
ZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQgYm90
aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNlbnRh
dGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBzYXkK
Ky8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQgcmVw
cmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQuCisK
K2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFu
eSByZXByZXNlbnRhdGlvbi4gQXMgYW4KKyAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2UgZm9y
IHRoZQorICAgICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBhIENoZWNr
TXVsLgorICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRp
b24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3Vs
ZCBiZSBhCisgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEK
KyAgICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAor
ICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIz
IHBpY2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJl
cHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0
J3Mgbm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAg
IFN0YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZv
cmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAg
ICAgICAgLy8gb2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFz
IGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50
LWZvbGRlZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBW
YWx1ZVJlcCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhw
bGljaXQgVmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAg
ICAgICwgbV92YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZh
bHVlUmVwIHJlZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7
CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21G
UCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICB9
CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9t
U1ApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBTdGFja0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21T
UDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IENvbnN0YW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAg
IHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gVmFsdWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAg
fQorCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisg
ICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lz
dGVyKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKwor
ICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90Piht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90
IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQp
OworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFs
dWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZh
bHVlKCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9t
YXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkzIEBACisjIS91c3IvYmluL2Vu
diBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUg
InBhdGhuYW1lIgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9
IDEKKyAgICAiX3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAg
YXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2Rl
LCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBj
aGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUK
KyAgICAgICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTld
KylcWi8pCisgICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUKKyAg
ICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNo
aWxkcmVuIDogW10KKyAgICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAgICAgb3Bjb2Rl
ICE9IG5pbAorICAgIGVuZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAg
Y2hpbGRyZW4uZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQsIGluZGV4IHwK
KyAgICAgICAgICAgIHlpZWxkIHZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5uYW1l
LAorICAgICAgICAgICAgICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNo
aWxkLmFub255bW91cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDogOmFub25PcGVy
YW5kKSA6IChjaGlsZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisgICAgICAgICAg
ICAgICAgICBpbmRleAorICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZwcm9jKQorICAg
ICAgICB9CisgICAgZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVyIDpu
YW1lLCA6cHJvZHVjdGlvbnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rpb25z
KQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVjdGlv
bnMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5h
bWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVO
dW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVy
ID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2Zp
bGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAg
YXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9y
aWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcg
PSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90
aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAg
IGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgor
ICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0g
YXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50
KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVy
cm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJy
b3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisK
K2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxl
TmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90
IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSop
LworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAg
ICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEK
KyAgICAgICAgd2hlbiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKikvCisgICAgICAgICAg
ICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAk
JikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNl
LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbPSgpLF0vCisgICAgICAgICAgICByZXN1bHQgPDwg
VG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxl
TmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBd
Lmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAg
IGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgIyBXZSBj
YW4gZXh0ZW5kIHRoaXMgYXMgd2UgYWRkIG1vcmUga2V5d29yZHMuIExpa2UsIHdlIG1pZ2h0IHdh
bnQgImluY2x1ZGUiIGV2ZW50dWFsbHkuCisgICAgdG9rZW4gPX4gL1xBKChtYXRjaGVyKSlcWi8K
K2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpBLVow
LTkkXShbYS16QS1aMC05X10qKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitj
bGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAg
QHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQK
KworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBk
ZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVy
cm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VF
cnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0
eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVu
ZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAor
ICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJF
eHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFu
Y2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQg
PSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIp
IHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJl
c3VsdAorICAgIGVuZAorCisgICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcHJv
ZHVjdGlvbikKKyAgICAgICAgaWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkNoaWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJlbnQg
cHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3Qg
eyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAg
cGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAg
cHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAg
ICAgIGNvbnN1bWUoIm1hdGNoZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3VtZUlk
ZW50aWZpZXIKKworICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7Cisg
ICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAg
ICMgV2UgbWlnaHQgd2FudCB0byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQsIGl0
IHdvdWxkIGdvIGhlcmUuCisgICAgICAgICAgICBwcm9kdWN0aW9uID0gcGFyc2VQcm9kdWN0aW9u
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50
cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICAgICAgcGFy
c2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICAgICAgZW5kCisKKyAgICAg
ICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICAgICAgfQorCisgICAgICAgIE1h
dGNoZXIubmV3KG1hdGNoZXJOYW1lLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKKworICAgIGRlZiBw
YXJzZVByb2R1Y3Rpb24KKyAgICAgICAgb3JpZ2luID0gdG9rZW4ub3JpZ2luCisgICAgICAgIG5h
bWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIGlmIHRva2VuID09ICI9IgorICAgICAg
ICAgICAgY29uc3VtZSgiPSIpCisgICAgICAgICAgICBvcGNvZGUgPSBjb25zdW1lSWRlbnRpZmll
cgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgIGVsc2lmIHRva2VuID09ICIoIgor
ICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgICAgICBvcGNvZGUgPSBuYW1lCisgICAg
ICAgICAgICBuYW1lID0gbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQcm9k
dWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG5pbCwgbmlsKQorICAgICAgICBlbmQKKyAgICAgICAg
CisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBi
cmVhayBpZiB0b2tlbiA9PSAiKSIKKworICAgICAgICAgICAgYWRkVW5pcXVlKG5hbWUsIHByb2R1
Y3Rpb25zLCBwYXJzZVByb2R1Y3Rpb24pCisKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09
ICIpIgorICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgIH0KKworICAgICAgICAjIEFk
dmFuY2UgYWZ0ZXIgdGhlICIpIgorICAgICAgICBhZHZhbmNlCisKKyAgICAgICAgUHJvZHVjdGlv
bi5uZXcob3JpZ2luLCBuYW1lLCBvcGNvZGUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorZW5kCisK
K2ZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKGZpbGVO
YW1lKSwgZmlsZU5hbWUpCittYXRjaGVyID0gcGFyc2VyLnBhcnNlCisKK2NsYXNzIFN1Yk1hdGNo
CisgICAgYXR0cl9yZWFkZXIgOmluZGV4TWFwLCA6cHJvZHVjdGlvbnMKKyAgICAKKyAgICBkZWYg
aW5pdGlhbGl6ZShpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICBAaW5kZXhNYXAgPSBb
XQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBpbmRleExpc3QuZWFjaCB7Cisg
ICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcCA8PCBpbmRleAorICAg
ICAgICAgICAgQHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICB9Cisg
ICAgZW5kCisKKyAgICBkZWYgbWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgaW5kZXhM
aXN0Lm1hcCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcFtp
bmRleF0KKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK0ZpbGUub3BlbigiQjMiICsgbWF0Y2hl
ci5uYW1lICsgIi5oIiwgInciKSB7CisgICAgfCBvdXRwIHwKKworICAgIG91dHAucHV0cyAiLy8g
R2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7ZmlsZU5hbWV9
IC0tIGRvIG5vdCBlZGl0ISIKKworICAgIG91dHAucHV0cyAiI2lmbmRlZiBCMyN7bWF0Y2hlci5u
YW1lfV9oIgorICAgIG91dHAucHV0cyAiI2RlZmluZSBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAg
IAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAKKyAgICBvdXRw
LnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyIKKworICAgIG91dHAucHV0cyAi
dGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIHJ1biN7bWF0
Y2hlci5uYW1lfShWYWx1ZSogX3ZhbHVlLCBBZGFwdG9yJiBhZGFwdG9yKSIKKyAgICBvdXRwLnB1
dHMgInsiCisKKyAgICAjIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGVtaXQgcHJvcGVybHkgaW5k
ZW50ZWQgY29kZSwgYmVjYXVzZSBpdCdzIGEgcmVjdXJzaXZlIGVtaXR0ZXIuIElmIHlvdQorICAg
ICMgd2FudCB0byBzZWUgdGhlIGNvZGUgbmljZWx5IGZvcm1hdHRlZCwgb3BlbiBpdCBpbiBhIGdv
b2QgdGV4dCBlZGl0b3IgYW5kIGFzayBpdCB0byBmb3JtYXQgaXQKKyAgICAjIGZvciB5b3UuCisK
KyAgICAjIEluIG9kZCBzaXR1YXRpb25zLCB3ZSBtYXkgbm90IHVzZSB0aGUgaW5wdXQgdmFsdWUu
IFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICBvdXRwLnB1dHMg
IlVOVVNFRF9QQVJBTShfdmFsdWUpOyIKKyAgICAgICAgCisgICAgIyBUaGlzIGp1c3QgcHJvdGVj
dHMgdGhlIGNhbGxlciBmcm9tIGhhdmluZyB0byB3b3JyeSBhYm91dCBwcm9kdWN0aW9ucyBoYXZp
bmcgZGlmZmVyZW50IGxlbmd0aHMuCisgICAgZGVmIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFt
ZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0
aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8
CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0
c1stMV1bMF1dLmNoaWxkcmVuLmxlbmd0aCA9PSBwcm9kdWN0aW9uLmNoaWxkcmVuLmxlbmd0aAor
ICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgfQorCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGlu
ZGV4TGlzdCB8CisgICAgICAgICAgICBsZW5ndGggPSBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1d
LmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgaWYgbGVuZ3RoID4gMAorICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCN7dmFsdWVOYW1lfS0+Y2hpbGRyZW4uc2l6ZSgpID49ICN7bGVu
Z3RofSkgeyIKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeWllbGQg
aW5kZXhMaXN0CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVuZAorCisgICAgIyBU
aGlzIGVmZmljaWVudGx5IHNlbGVjdHMgZnJvbSB0aGUgZ2l2ZW4gc2V0IG9mIHByb2R1Y3Rpb25z
LiBJdCBhc3N1bWVzIHRoYXQgcHJvZHVjdGlvbnMKKyAgICAjIGFyZSBub3QgZHVwbGljYXRlZC4g
SXQgeWllbGRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgcHJvZHVjdGlvbiwgYW5kIHRoZSBjb3Jv
dXRpbmUgaXMKKyAgICAjIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBzcGVjaWZpYyBjb2RlIGZv
ciB0aGF0IHByb2R1Y3Rpb24uIFRoZSBjb3JvdXRpbmUgaXMgZ2l2ZW4gbGlzdHMgb2YKKyAgICAj
IGluZGljZXMgb2YgcG9zc2libHktbWF0Y2hpbmcgcHJvZHVjdGlvbnMuCisgICAgZGVmIG1hdGNo
UHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgIyBGaXJz
dCwgc3BsaXQgdGhlIHByb2R1Y3Rpb25zIGxpc3QgaW50byBydW5zIG9mIHByb2R1Y3Rpb25zIHdp
dGggYW4gb3Bjb2RlIGFuZCBwcm9kdWN0aW9ucworICAgICAgICAjIHdpdGhvdXQgb25lLgorICAg
ICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4
IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5k
ZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5oYXNPcGNvZGUg
PT0gcHJvZHVjdGlvbi5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8
PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwg
W2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICMg
Tm93LCBlbWl0IHBhdHRlcm4gbWF0Y2hpbmcgY29kZS4gV2UgZG8gaXQgZGlmZmVyZW50bHkgZm9y
IGxpc3RzIHdpdGggYW4gb3Bjb2RlIHRoYW4gZm9yCisgICAgICAgICMgbGlzdHMgd2l0aG91dCBv
bmUuCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8
CisgICAgICAgICAgICBpZiBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmhhc09wY29kZQorICAg
ICAgICAgICAgICAgICMgTm93LCB3ZSBzcGxpdCB0aGlzIGluZGV4IGxpc3QgaW50byBncm91cHMg
Zm9yIGVhY2ggb3Bjb2RlLgorICAgICAgICAgICAgICAgIGdyb3VwcyA9IHt9CisgICAgICAgICAg
ICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAg
ICAgICAgICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAg
ICAgICAgICAgICAgICBpZiBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdCisgICAgICAgICAgICAg
ICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdIDw8IGluZGV4CisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9kdWN0aW9u
Lm9wY29kZV0gPSBbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICMgRW1pdCBhIHN3aXRjaCBzdGF0ZW1lbnQuCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7dmFsdWVOYW1lfS0+b3Bjb2RlKCkpIHsi
CisgICAgICAgICAgICAgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgICAgICAgICAgICAg
IHwgb3Bjb2RlLCBzdWJJbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRj
aC5uZXcoc3ViSW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgbWF0
Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICAgICAg
eWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXco
aW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChvdXRw
LCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAgICAg
IHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5k
ZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmQKKyAg
ICAgICAgfQorICAgIGVuZAorCisgICAgIyBUYWtlcyBwcm9kdWN0aW9ucyB0aGF0IGhhdmUgdGhl
IHNhbWUgb3Bjb2RlIGFuZCB0aGUgc2FtZSBsZW5ndGggYW5kIHNlbGVjdHMgZnJvbSB0aGVtIGJh
c2VkIG9uCisgICAgIyB0aGUgcHJvZHVjdGlvbnMgYXQgdGhlIGdpdmVuIGNvbHVtbi4KKyAgICBk
ZWYgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucywgY29sdW1uSW5kZXgp
CisgICAgICAgIGlmIGNvbHVtbkluZGV4ID49IHByb2R1Y3Rpb25zWzBdLmNoaWxkcmVuLmxlbmd0
aAorICAgICAgICAgICAgeWllbGQgKDAuLi4ocHJvZHVjdGlvbnMuc2l6ZSkpLnRvX2EKKyAgICAg
ICAgICAgIHJldHVybgorICAgICAgICBlbmQKKworICAgICAgICBzdWJWYWx1ZSA9IG5ld1Zhcgor
ICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICBvdXRwLnB1dHMgIlZhbHVl
KiAje3N1YlZhbHVlfSA9ICN7dmFsdWVOYW1lfS0+Y2hpbGQoI3tjb2x1bW5JbmRleH0pOyIKKwor
ICAgICAgICAjIFdlIG1heSBub3QgdXNlIHRoaXMgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRv
IGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICAgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oI3tz
dWJWYWx1ZX0pOyIKKyAgICAgICAgCisgICAgICAgIHN1YlByb2R1Y3Rpb25zID0gcHJvZHVjdGlv
bnMubWFwIHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiB8CisgICAgICAgICAgICBwcm9kdWN0
aW9uLmNoaWxkcmVuW2NvbHVtbkluZGV4XQorICAgICAgICB9CisKKyAgICAgICAgbWF0Y2hSZWN1
cnNpdmVseShvdXRwLCBzdWJWYWx1ZSwgc3ViUHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwg
aW5kZXhMaXN0IHwKKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlz
dCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUs
IHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCArIDEpIHsKKyAgICAgICAgICAgICAg
ICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhM
aXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG91dHAu
cHV0cyAifSIKKyAgICBlbmQKKworICAgIGRlZiBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHZhbHVl
TmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVO
YW1lLCBwcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAg
ICAgIyBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoaXMgaW5kZXggbGlzdCBjb250YWlucyBwcm9k
dWN0aW9ucyB3aXRoIHRoZSBzYW1lIG9wY29kZSBhbmQKKyAgICAgICAgICAgICMgdGhlIHNhbWUg
bGVuZ3RoLgorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBw
cm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3Vi
TWF0Y2gucHJvZHVjdGlvbnMsIDApIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8Cisg
ICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgbWF0Y2hSZWN1cnNpdmVseShv
dXRwLCAiX3ZhbHVlIiwgbWF0Y2hlci5wcm9kdWN0aW9ucykgeworICAgICAgICB8IGluZGV4TGlz
dCB8CisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAg
ICAgICAgICAgcHJvZHVjdGlvbiA9IG1hdGNoZXIucHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAg
ICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3Byb2R1
Y3Rpb24udmFyTmFtZX0gPSBfdmFsdWU7IgorICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMg
PSBbXQorICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICB0cnlB
cmd1bWVudHMgPSBbXQorICAgICAgICAgICAgbnVtU2NvcGVzID0gMAorICAgICAgICAgICAgc2Vl
biA9IHt9CisgICAgICAgICAgICBwcm9kdWN0aW9uLmVhY2hWYXJpYWJsZSB7CisgICAgICAgICAg
ICAgICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5hbWUsIGNoaWxkVmFyTmFtZSwga2luZCwgaW5k
ZXggfAorICAgICAgICAgICAgICAgIGxvYWRFeHByID0gIiN7cGFyZW50VmFyTmFtZX0tPmNoaWxk
KCN7aW5kZXh9KSIKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBzZWVuW2No
aWxkVmFyTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3VmFyCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7dG1wfSA9ICN7bG9hZEV4cHJ9OyIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t0bXB9ID09ICN7Y2hpbGRWYXJOYW1lfSkg
eyIKKyAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHNlZW5bY2hpbGRWYXJOYW1lXSA9IHRydWUKKyAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7
Y2hpbGRWYXJOYW1lfSA9ICN7bG9hZEV4cHJ9OyIKKworICAgICAgICAgICAgICAgICAgICBpZiBj
aGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUg
PX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAgICAgICAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW50
ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtp
bmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRz
IDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5kIG9yIGtpbmQgPT0gOmFub25PcGVy
YW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYg
a2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFuZAorICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRhcHRvci5hY2Nl
cHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICBvdXRwLnB1dHMoIiAgICAmJiBhZGFwdG9yLmFj
Y2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAg
ICAgICAgICAgIG91dHAucHV0cygiICAgICYmIGFkYXB0b3IuYWNjZXB0T3BlcmFuZHMoIiArIG9w
ZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIG91dHAucHV0cygi
ICAgICYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1bWVudHMuam9p
bigiLCAiKSArICIpKSIpCisgICAgICAgICAgICBvdXRwLnB1dHMgIiAgICByZXR1cm47IgorICAg
ICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0i
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21hdGNoZXIubmFt
ZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVT
dGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKworI2luY2x1ZGUg
IkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNl
U2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCituYW1lc3BhY2UgeworCitib29sIGF0dGVtcHRBc3NpZ25tZW50KAorICAgIFN0YWNrU2xv
dCogc2xvdCwgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4m
IG90aGVyU2xvdHMpCit7CisgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IG90aGVyU0xv
dHMpIHsKKyAgICAgICAgaWYgKCFvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIGlmIChvZmZzZXRGcm9tRlAgKyBzbG90LT5ieXRlU2l6ZSgp
ID49IG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGlmIChvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpICsgb3RoZXJTbG90LT5ieXRl
U2l6ZSgpID49IG9mZnNldEZyb21GUCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAob2Zmc2V0RnJvbUZQKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBhc3NpZ24oU3RhY2tTbG90KiBzbG90LCBjb25zdCBWZWN0b3I8U3Rh
Y2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgaWYgKGF0dGVtcHRBc3NpZ25tZW50KHNsb3Qs
IC1zbG90LT5ieXRlU2l6ZSgpLCBvdGhlclNsb3RzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Zm9yIChTdGFja1Nsb3QqIG90aGVyU0xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAgICAgaWYgKG90
aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkKKyAgICAgICAgICAgICYmIGF0dGVtcHRBc3NpZ25tZW50
KG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgLSBzbG90LT5ieXRlU2l6ZSgpKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUm
IGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNr
Iik7CisKKyAgICAvLyBBbGxvY2F0ZSBhbGwgb2YgdGhlIGxvY2tlZCBzbG90cyBpbiBvcmRlci4g
VGhpcyBpcyBraW5kIG9mIGEgY3JhenkgYWxnb3JpdGhtIHRvIGFsbG93IGZvcgorICAgIC8vIHRo
ZSBwb3NzaWJpbGl0eSBvZiBzdGFjayBzbG90cyBiZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRz
IGJlZm9yZSB3ZSBldmVuIGdldCBoZXJlLgorICAgIEFTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7
CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90czsKKyAgICBW
ZWN0b3I8U3RhY2tTbG90Kj4gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0OworICAgIGZvciAoU3Rh
Y2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgc3dpdGNoIChzbG90
LT5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAg
ICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICAgICAgYXNzaWduZWRM
b2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBsb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAgICAgIGlm
IChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgICAgIC8vIEFzIGEgbWF0dGVy
IG9mIHNhbml0eSwgdW5hc3NpZ24gdGhpcy4gTWF5YmUgaXQgd291bGQgYmUgZ29vZCB0byBldmVu
IGhhdmUgYQorICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gcnVsZSB0aGF0IHRoaXMgY2Fu
bm90IGhhcHBlbi4KKyAgICAgICAgICAgICAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAoMCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAv
LyBUaGlzIGlzIGEgZmFpcmx5IGV4cGVuc2l2ZSBsb29wLCBidXQgaXQncyBPSyBiZWNhdXNlIHdl
J2xsIHVzdWFsbHkgb25seSBoYXZlIGEgaGFuZGZ1bCBvZgorICAgIC8vIGxvY2tlZCBzdGFjayBz
bG90cy4KKyAgICB3aGlsZSAoIWxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5pc0VtcHR5KCkpIHsK
KyAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LnRha2VM
YXN0KCk7CisgICAgICAgIGFzc2lnbihzbG90LCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMpOwor
ICAgICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgIH0KKwor
ICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIGFub255bW91cyBzbG90cy4gTm90ZSB0aGF0IHRoZW9y
ZXRpY2FsbHkgd2Ugc2hvdWxkIGRvIGFuIGVzY2FwZSBhbmFseXNpcworICAgIC8vIGhlcmUuIEJ1
dCwgY3VycmVudGx5IEFpciBkb2Vzbid0IHN1cHBvcnQgZXNjYXBpbmcgYSBTdGFja1Nsb3QhCisg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBlc2NhcGluZyBhIFN0YWNrU2xvdCBhbmQgYWRk
IGVzY2FwZSBhbmFseXNpcyB0byBhbGxvY2F0ZVN0YWNrKCkuCisgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQzMAorCisgICAgYXV0byBpc1JlbGV2YW50
ID0gW10gKGNvbnN0IEFyZyYgYXJnKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIGFyZy5pc1N0
YWNrKCkgJiYgYXJnLnN0YWNrU2xvdCgpLT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnlt
b3VzOworICAgIH07CisKKyAgICBMaXZlbmVzczxBcmc+IGxpdmVuZXNzKGNvZGUpOworICAgIElu
ZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUu
c2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CisKKyAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxBcmc+OjpMb2NhbENhbGMg
bG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgYXV0byBpbnRlcmZlcmUgPSBb
Jl0gKCkgeworICAgICAgICAgICAgLy8gRm9ybSBhIGNsaXF1ZSBvZiBzdGFjayBzbG90cyB0aGF0
IGludGVyZmVyZS4gRmlyc3QgZmluZCB0aGUgbGlzdCBvZiBzdGFjayBzbG90cworICAgICAgICAg
ICAgLy8gdGhhdCBhcmUgbGl2ZSByaWdodCBub3cuCisgICAgICAgICAgICBzbG90cy5yZXNpemUo
MCk7CisgICAgICAgICAgICBmb3IgKEFyZyBhcmcgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGlzUmVtZXZhbnQoYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgc2xv
dHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2xvdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBTdGFja1Nsb3QqIG91dGVyID0gc2xvdHNbaV07CisgICAgICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gaSArIDE7IGogPCBzbG90cy5zaXplKCk7ICsraikgeworICAgICAgICAgICAg
ICAgICAgICBTdGFja1Nsb3QqIGlubmVyID0gc2xvdHNbaV07CisKKyAgICAgICAgICAgICAgICAg
ICAgU3RhY2tTbG90KiBmaXJzdCA9IG91dGVyOworICAgICAgICAgICAgICAgICAgICBTdGFja1Ns
b3QqIHNlY29uZCA9IGlubmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QtPmluZGV4
KCkgPiBzZWNvbmQtPmluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAo
Zmlyc3QsIHNlY29uZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW2ZpcnN0
XS5hZGQoc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW3NlY29uZF0u
YWRkKGZpcnN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBpbnRlcmZlcmUobG9jYWxDYWxjLmxpdmUoKSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykg
eworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOwor
ICAgICAgICAgICAgaW50ZXJmZXJlKGxvY2FsQ2FsYy5saXZlKCkpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0
aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKKyAgICAvLyBTdGFja1Ns
b3Qgd2UganVzdCB3YW50IHRvIGZpbmQgdGhlIG9mZnNldEZyb21GUCB0aGF0IGlzIGNsb3Nlc3Qg
dG8gemVybyB3aGlsZSBlbnN1cmluZyBubworICAgIC8vIG92ZXJsYXAgd2l0aCBvdGhlciBTdGFj
a1Nsb3RzIHRoYXQgdGhpcyBvdmVybGFwcyB3aXRoLgorICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZv
clN0YWNrU2xvdHMgPSBmcmFtZVNpemVGb3JMb2NrZWQ7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+
IG90aGVyU2xvdHM7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMo
KSkgeworICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgIC8v
IEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0LgorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUaGUgcG9zc2libGUgZmlyc3QgZml0IG9mZnNldHMgYXJlOgor
ICAgICAgICAvLyAtIGZyYW1lU2l6ZUZvckxvY2tlZCAtIHNsb3QtPmJ5dGVTaXplKCkKKyAgICAg
ICAgLy8gLSBmb3IgYWxsIHNsb3QyIGluIGludGVyZmVyZW5jZVtzbG90XSwgc2xvdDItPm9mZnNl
dEZyb21GUCgpIC0gc2xvdC0+Ynl0ZVNpemUoKS4KKyAgICAgICAgLy8gV2UgbmVlZCB0byBmaW5k
IG9uZSBvZiB0aG9zZSB0aGF0IGRvZXNuJ3QgaW50ZXJmZXJlIHdpdGggYW55b25lLgorCisgICAg
ICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGludGVyZmVyaW5nU2xvdHMgPSBpbnRlcmZlcmVuY2Vb
c2xvdF07CisgICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90
cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Nsb3RzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOyArK2kpCisgICAg
ICAgICAgICBvdGhlclNsb3RzW2ldID0gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzW2ldOworICAg
ICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgp
OworICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogaW50ZXJmZXJpbmdTbG90cykK
KyAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dEluZGV4KytdID0gb3RoZXJTbG90OworCisgICAg
ICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKKyAgICB9CisKKyAgICAvLyBGaWd1cmUgb3V0
IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFjayBzbG90cy4KKyAgICB1bnNpZ25l
ZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6
IGNvZGUuc3RhY2tTbG90cygpKQorICAgICAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gc3Rk
OjptYXgoZnJhbWVTaXplRm9yU3RhY2tTbG90cywgLXNsb3QtPm9mZnNldEZyb21GUCgpKTsKKwor
ICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRlZHVjZSBob3cgbXVjaCBhcmd1bWVudCBhcmVhIHdlIG5l
ZWQuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJ
bnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5h
cmdzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZy5pc0NhbGxBcmcoKSkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBhc3N1bWUgdGhhdCB3ZSB1c2UgOCBieXRlcyBvZiB0
aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mgbm90CisgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2gg
YW4gYXdlc29tZSBhc3N1bXB0aW9uLgorICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NAorICAgICAgICAgICAg
ICAgICAgICBBU1NFUlQoYXJnLm9mZnNldCgpID49IDApOworICAgICAgICAgICAgICAgICAgICBj
b2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoYXJnLm9mZnNldCgpICsgOCk7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY29kZS5zZXRG
cmFtZVNpemUoZnJhbWVTaXplRm9yU3RhY2tTbG90cyArIGNvZGUuY2FsbEFyZ0FyZWFTaXplKCkp
OworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBjb2RlIHRvIHVzZSBBZGRyJ3MgaW5z
dGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3NsZXNzCisgICAgLy8gdHJhbnNmb3Jt
YXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tTbG90cyBhcnJheSB0byBmaWd1cmUg
b3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAvLyBvZmZzZXQtZnJvbS1GUCByZWZlcnMgdG8u
CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFy
Z3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAg
ICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRk
cigKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAor
ICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgYXJnLnN0YWNrU2xvdCgpLT5v
ZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFk
ZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQWxs
b2NhdGVTdGFja19oCisjZGVmaW5lIEFpckFsbG9jYXRlU3RhY2tfaAorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRo
aXMgYWxsb2NhdGVzIFN0YWNrU2xvdHMgdG8gcGxhY2VzIG9uIHRoZSBzdGFjay4gSXQgZmlyc3Qg
YWxsb2NhdGVzIHRoZSBwaW5uZWQgb25lcyBpbiBpbmRleAorLy8gb3JkZXIgYW5kIHRoZW4gaXQg
YWxsb2NhdGVzIHRoZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4KKwordm9pZCBhbGxvY2F0ZVN0YWNr
KENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
QWlyQWxsb2NhdGVTdGFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyQXJnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQodG1w
KCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmludCgi
JCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tNjQ6CisgICAgICAg
IG91dC5wcmludGYoIiQweCVsbHgiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFkZHI6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChv
ZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAg
ICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwg
IiwiLCBpbmRleCgpKTsKKyAgICAgICAgaWYgKHNjYWxlKCkgIT0gMSkKKyAgICAgICAgICAgIG91
dC5wcmludCgiLCIsIHNjYWxlKCkpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAg
ICAgIG91dC5wcmludChvZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIigiLCBwb2ludGVyRHVt
cChzdGFja1Nsb3QoKSksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhbGxBcmc6
CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQpOwor
ICAgICAgICBvdXQucHJpbnQoIihjYWxsQXJnKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBSZWxDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNS
ZXN1bHRDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNwZWNpYWw6Cisg
ICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFyZ19oCisjZGVm
aW5lIEFpckFyZ19oCisKKyNpbmNsdWRlICJBaXJUbXAuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFz
cyBTcGVjaWFsOworY2xhc3MgU3RhY2tTbG90OworCisvLyBUaGlzIGNsYXNzIG5hbWUgaXMgYWxz
byBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2lsbCBzYXkgaXQgYSBsb3QuIFlvdSds
bCBzZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjppbW0oNSksIEFyZzo6YWRkcih0aGlu
ZywgYmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6CisgICAgLy8gVGhlc2UgZW51bSBt
ZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2UgaGF2ZSB0byBtZW50aW9u
IHRoZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90IHsKKyAgICAgICAgVG1wLAorICAg
ICAgICBJbW0sCisgICAgICAgIEltbTY0LAorICAgICAgICBBZGRyLAorICAgICAgICBTdGFjaywK
KyAgICAgICAgQ2FsbEFyZywKKyAgICAgICAgSW5kZXgsCisgICAgICAgIFJlbENvbmQsCisgICAg
ICAgIFJlc0NvbmQsCisgICAgICAgIFNwZWNpYWwKKyAgICB9OworCisgICAgZW51bSBSb2xlIDog
aW50OF90IHsKKyAgICAgICAgVXNlLAorICAgICAgICBEZWYsCisgICAgICAgIFVzZURlZgorICAg
IH07CisKKyAgICBlbnVtIFR5cGUgOiBpbnQ4X3QgeworICAgICAgICBHUCwKKyAgICAgICAgRlAK
KyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKKworICAg
IHN0YXRpYyBib29sIGlzVXNlKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9s
ZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xlIHJvbGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVz
ZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAg
c3RhdGljIFR5cGUgdHlwZUZvckIzVHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIEludDMy
OgorICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBj
YXNlIERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBGUDsKKyAgICAgICAgfQorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEdQOworICAgIH0KKworICAgIEFy
ZygpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAgICAgIDogbV9r
aW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFs
dWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW02
NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBhZGRyKEFpcjo6
VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNl
LmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBB
ZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsK
KyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKyAg
ICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmcoaW50MzJfdCBv
ZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNp
Z25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2Fz
ZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgY2FzZSA4Ogor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9n
U2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7Cisg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJu
IDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgoQWlyOjpUbXAg
YmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJU
KGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2NhbGUpKTsKKyAg
ICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4OworICAgICAg
ICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBpbmRleDsK
KyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihzY2FsZSk7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNv
bmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJn
IHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24pCisgICAg
eworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVzQ29uZDsK
KyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNpYWwqIHNwZWNp
YWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
U3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0PGludHB0cl90
PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5kID09IG90aGVy
Lm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAg
ICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBtX3NjYWxlID09
IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFyZyYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlz
ICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJbW0oKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQorCisgICAgYm9v
bCBpc0ltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tNjQ7
CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGtpbmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAgIGJvb2wgaXND
YWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQ2FsbEFyZzsK
KyAgICB9CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQorCisgICAgYm9v
bCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZXND
b25kOworICAgIH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOworICAgIH0K
KworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgaW50NjRfdCB2
YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbSB8fCBraW5k
KCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorCisgICAgdm9p
ZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
SW1tNjQpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxp
bnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gSW5kZXgp
OworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGludDMyX3Qgb2Zmc2V0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9zY2FsZSk7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gQWRkciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpOworICAgIH0KKworICAg
IFN0YWNrU2xvdCogc3RhY2tTbG90KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0YWNrU2xvdCo+KG1f
b2Zmc2V0KTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBpbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgc2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX3NjYWxlOworICAgIH0KKworICAg
IHVuc2lnbmVkIGxvZ1NjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dTY2Fs
ZShzY2FsZSgpKTsKKyAgICB9CisKKyAgICBBaXI6OlNwZWNpYWwqIHNwZWNpYWwoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTcGVjaWFsKTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxBaXI6OlNwZWNpYWwqPihtX29mZnNldCk7CisgICAgfQorCisgICAgYm9v
bCBpc0dQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgp
LmlzR1AoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBUbXAoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAKKyAgICAvLyBU
ZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWly
ZXMgYSBHUCB2YWx1ZS4KKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgSW1tNjQ6Cisg
ICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFj
a1Nsb3Q6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAg
ICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQVG1w
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4g
YmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2YWx1ZS4KKyAgICBib29s
IGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgor
ICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBCYXNlOgorICAg
ICAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNl
IEltbTY0OiAvLyBZZXMsIHdlIGFsbG93IEltbTY0IGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2Ug
dXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFja21hcHMuCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNGUFRtcCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBoYXNUeXBlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIFNw
ZWNpYWw6CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisgICAgCisgICAgLy8gVGhlIHR5cGUgaXMgYW1iaWd1b3VzIGZvciBzb21lIGFyZyBraW5kcy4g
Q2FsbCB3aXRoIGNhcmUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0dQKCkgPyBHUCA6IEZQOworICAgIH0KKworICAgIGJvb2wgaXNUeXBlKFR5cGUgdHlw
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdQ
OgorICAgICAgICAgICAgcmV0dXJuIGlzR1AoKTsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAg
ICAgIHJldHVybiBpc0ZQKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1BSKCk7Cisg
ICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1w
KCkuZ3ByKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQUigpOworICAgIH0KKworICAgIEZQUlJlZyBm
cHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwcigpOworICAgIH0KKyAg
ICAKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgp
ICYmIHRtcCgpLmlzUmVnKCk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdG1wKCkucmVnKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJ
bmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3BUbXBJbmRleCgpOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIHRtcCgpLmZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRl
eCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkudG1wSW5kZXgoKTsKKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZh
c3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5k
KSB7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBm
dW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoK
KyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRl
eCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8g
a25vdyB0aGF0IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNl
IGl0cworICAgIC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoK
KyAgICAvLworICAgIC8vIG1vdiAlcmF4LCAoJXJjeCkKKyAgICAvLworICAgIC8vIFRoaXMgZGVm
cyAoJXJjeCkgYnV0IHVzZXMgJXJjeC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yRWFjaFRtcChSb2xlIGFyZ1JvbGUsIFR5cGUgYXJnVHlwZSwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAg
IGNhc2UgVG1wOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIGFyZ1JvbGUsIGFyZ1R5cGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1
bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAg
ICAgZnVuY3RvcihtX2luZGV4LCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdXQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NCBhc1Ry
dXN0ZWRJbW02NCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW02NCgpKTsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQocG9pbnRlclZhbHVlKCkp
OworICAgIH0KKyNlbmRpZgorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0FkZHIoKSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMy
X3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBh
c0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jh
c2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2Fs
ZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNl
dCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFz
UmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZWxD
b25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlbGF0
aW9uYWxDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
UmVzdWx0Q29uZGl0aW9uIGFzUmVzdWx0Q29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc1Jlc0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fz
c2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29mZnNl
dCB7IDAgfTsKKyAgICBLaW5kIG1fa2luZCB7IEltbSB9OworICAgIGludDMyX3QgbV9zY2FsZSB7
IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9pbmRleDsKK307CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckFyZ19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lk
IEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIz
OjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVt
b3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRl
Y2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxh
Y2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBt
X2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAi
LCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMp
CisgICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNCbG9ja19oCisKKyNpbmNsdWRlICJB
aXJGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworY2xhc3MgSW5zZXJ0aW9uU2V0OworCitj
bGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogZHVtcFByZWZpeCA9ICIjIjsKKworICAgIHR5cGVkZWYgVmVjdG9yPEluc3Q+IEluc3RM
aXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7
CisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0Owor
ICAgIAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsg
fQorICAgIEluc3RMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4o
KTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2luc3RzLmVuZCgp
OyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFz
dCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsg
cmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0Pgor
ICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIG1faW5zdHMu
YXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJk
PEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2Fz
ZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNh
c2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAvLyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQg
dG8gcmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2ggb2YgYSBjb25kaXRpb25hbCBicmFuY2guCisg
ICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5z
aXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2Nr
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07
IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4g
bV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7
IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9u
PEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpCisgICAgeworICAg
ICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0
PihtX3N1Y2Nlc3NvcnMpOworICAgIH0KKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJh
c2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2Nr
LCBjb25zdCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMpOworICAgIH0KKworICAgIHVuc2ln
bmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUo
KTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVj
ZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIGNvbnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4g
bV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3Nv
cnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKworICAgIHZvaWQgYWRkUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIHZvaWQgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayopOworICAgIHZvaWQgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJh
c2ljQmxvY2sqIHRvKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAg
IHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgQ29kZTsKKyAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OworICAgIAorICAg
IEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgeworICAg
IH0KKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBT
dWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNl
c3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxv
Y2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxv
Y2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykK
KyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNC
bG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckJhc2lj
QmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
Q2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6OkNDYWxs
U3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lz
dGVycygpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1Jl
Z2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6cmVz
ZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKworQ0NhbGxTcGVjaWFsOjp+
Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmZvckVhY2hBcmcoSW5z
dCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxi
YWNrKQoreworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpVc2UsIEFyZzo6R1ApOwor
ICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBxdWVyeSB0aGUgYXJnJ3Mg
dHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdlCisgICAgICAgIC8vIHJl
cXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgICAgIGNhbGxi
YWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tpXS50eXBlKCkpOworICAgIH0K
K30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAo
aW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRj
aCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAgIGlm
IChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYgKHNpemVvZih2b2lkKikg
PT0gOCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2Fz
ZSBBcmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6U3RhY2s6Cisg
ICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc0dQKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBp
bnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbaV0uaXNSZWco
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5zdC5hcmdzW2ld
ID09IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuICBmYWxzZTsKKyAg
ICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1pdHNTdGFj
ayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEgY2FuIGJlIGEgc3Rh
Y2sgYWRkcmVzcyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDYWxsU3BlY2lh
bDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQoreworfQor
CitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBD
Q2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIHN3aXRjaCAoaW5z
dC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6Oklt
bVB0cjoKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGluc3Qu
YXJnc1sxXS5wb2ludGVyVmFsdWUoKSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5j
YWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpUbXA6
CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNBZGRy
ZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIEND
YWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFs
OjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9
CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmRlZXBE
dW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiZnVuY3Rp
b24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIpOworfQorCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5lIEFpckNDYWxsU3BlY2lhbF9o
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8g
VXNlIHRoaXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBj
b3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBv
YmplY3QuIEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJl
Z2lzdGVyLCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRo
ZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1l
bnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdv
cmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24g
d2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRv
IGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0
IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSBy
ZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlm
IHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIg
dG8gYmUgbGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwg
d2hpY2hldmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGlj
IFNwZWNpYWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNp
YWwoKTsKKworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1
bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAg
Ly8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhl
IHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3Bl
Y2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcg
c2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMC4KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOwor
ICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikg
b3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhl
bHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1w
SW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBs
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJT
ZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrVXRpbHMuaCIKKyNpbmNsdWRlICJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKK3sKK30KKwor
Q29kZTo6fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhkb3VibGUg
ZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcg
QmFzaWNCbG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sq
IHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxv
Y2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNr
U2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1
ZSogdmFsdWUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3Rh
Y2tTbG90KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1ZSkpOworICAg
IFN0YWNrU2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKKyAgICBtX3N0YWNrU2xvdHMuYXBwZW5k
KFdURjo6bW92ZShzbG90KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lhbCogQ29k
ZTo6YWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKK3sKKyAgICBt
X3NwZWNpYWxzLmFwcGVuZChXVEY6Om1vdmUoc3BlY2lhbCkpOworfQorCitDQ2FsbFNwZWNpYWwq
IENvZGU6OmNDYWxsU3BlY2lhbCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAg
ICAgICBtX2NDYWxsU3BlY2lhbCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAg
ICAgICAgYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAg
IH0KKworICAgIHJldHVybiBtX2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJl
YWNoYWJpbGl0eSgpCit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30K
Kwordm9pZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxv
Y2spKTsKKyAgICBpZiAobnVtU3RhY2tTbG90cygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3Rh
Y2sgc2xvdHM6XG4iKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3Rz
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzbG90KSwgIlxuIik7
CisgICAgfQorICAgIGlmIChudW1TcGVjaWFscygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3Bl
Y2lhbHM6XG4iKTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogc3BlY2lhbHMoKSkK
KyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsK
KyAgICB9CisgICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwgIlxuIik7
CisgICAgb3V0LnByaW50KCJDYWxsIGFyZyBhcmVhIHNpemU6ICIsIG1fY2FsbEFyZ0FyZWFTaXpl
LCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgbV9jYWxsZWVTYXZlUmVn
aXN0ZXJzLCAiXG4iKTsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCh1
bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICB3aGlsZSAoaW5kZXggPCBzaXplKCkgJiYgIWF0
KGluZGV4KSkKKyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3Vuc2ln
bmVkIENvZGU6OmZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCArIDEpOworfQorCitCYXNpY0Jsb2Nr
KiBDb2RlOjpmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAoreworICAgIHJl
dHVybiBhdChmaW5kTmV4dEJsb2NrSW5kZXgoYmxvY2stPmluZGV4KCkpKTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ29kZV9oCisj
ZGVmaW5lIEFpckNvZGVfaAorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUg
IkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKyNpbmNsdWRlICJSZWdp
c3RlckF0T2Zmc2V0TGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgQ0NhbGxTcGVjaWFsOworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWlyIHsK
KworLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwu
IEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0ZWQg
bWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1h
Y2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBDb2Rl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJhc2lj
QmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIFN0YWNrU2xv
dCogYWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Ns
b3RWYWx1ZSogPSBudWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlx
dWVfcHRyPFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQg
dG8gbWFrZSBhIEMgY2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxsU3BlY2lhbCgpOworCisg
ICAgVG1wIG5ld1RtcChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpncFRt
cEZvckluZGV4KG1fbnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAg
ICAgICByZXR1cm4gVG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBzKyspOworICAgICAgICB9
CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUgdHlwZSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAg
ICByZXR1cm4gbV9udW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAg
IHJldHVybiBtX251bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNh
bGxBcmdBcmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9CisKKyAg
ICAvLyBZb3UgY2FuIGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHRvIGZvcmNlIGEg
bWluaW11bSBjYWxsIGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1ZXN0Q2FsbEFyZ0FyZWFT
aXplKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSA9IHN0
ZDo6bWF4KG1fY2FsbEFyZ0FyZWFTaXplLCBzaXplKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBm
cmFtZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8gT25seSBw
aGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBD
dXJyZW50bHksIG9ubHkKKyAgICAvLyBBaXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRoaXMuCisg
ICAgdm9pZCBzZXRGcmFtZVNpemUodW5zaWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAgICAgICAg
bV9mcmFtZVNpemUgPSBmcmFtZVNpemU7CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QmIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7
IH0KKworICAgIC8vIFJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVucmVhY2hh
YmxlIGJsb2Nrcy4KKyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayogb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAg
ICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51
bGwgYW5kIGluZGV4JyA+PSBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kRmlyc3RCbG9ja0luZGV4
KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRl
eCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID4gaW5kZXguCisgICAg
dW5zaWduZWQgZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAg
IEJhc2ljQmxvY2sqIGZpbmROZXh0QmxvY2soQmFzaWNCbG9jayopIGNvbnN0OworCisgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAg
ICAgIDogbV9jb2RlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoQ29kZSYgY29kZSwgdW5zaWduZWQgaW5k
ZXgpCisgICAgICAgICAgICA6IG1fY29kZSgmY29kZSkKKyAgICAgICAgICAgICwgbV9pbmRleCht
X2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jb2RlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fY29k
ZS0+ZmluZEZpcnN0QmxvY2tJbmRleChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9
PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBD
b2RlKiBtX2NvZGU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2Nrcygp
KTsgfQorCisgICAgY2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAg
ICAgICAgU3RhY2tTbG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAg
IDogbV9jb2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAg
ICAgICBTdGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUu
bV9zdGFja1Nsb3RzW2ldLmdldCgpOyB9CisgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3JbXSh1
bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisg
ICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICAgICAs
IG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aXRlcmF0b3IoY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVk
IGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAg
ICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3RhY2tTbG90
c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcih0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25z
dCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHN0YWNr
U2xvdHMoKSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAg
ICAKKyAgICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAg
U3BlY2lhbHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6ZSgpOyB9CisgICAgICAgIFNwZWNp
YWwqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFsc1tp
XS5nZXQoKTsgfQorICAgICAgICBTcGVjaWFsKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6
IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBT
cGVjaWFsc0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAg
ICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9p
bmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
U3BlY2lhbCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiogbV9jb2xsZWN0
aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAg
ICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9Cisg
ICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHNpemUo
KSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAgICB9
OworCisgICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1cm4gU3Bl
Y2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIENDYWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNp
YWwgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07CisgICAgdW5z
aWduZWQgbV9udW1GUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9mcmFtZVNpemUgeyAwIH07
CisgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUgeyAwIH07CisgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckZyZXF1ZW50ZWRCbG9ja19oCisjZGVm
aW5lIEFpckZyZXF1ZW50ZWRCbG9ja19oCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVk
QmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8
QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBBaXJGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5o
IgorCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIK
KyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZl
cnl0aGluZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24u
aCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxs
SGVscGVycyYgaml0KQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZh
bGlkYXRlKGNvZGUsICJpbml0aWFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAg
ICAgICAgZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsK
KyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0aW9ucyBh
bmQgdHJhbnNmb3JtYXRpb25zLgorICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXphdGlvbnMu
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1Ngor
CisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBoYXZlIGEgcmVhbCByZWdpc3RlciBhbGxv
Y2F0b3IuIFRoZW4sIHdlIGNvdWxkIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKQorICAgIC8vIGluIHBs
YWNlIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3Igb25seSBmb3IgdGVzdGluZy4KKyAgICAvLyBG
SVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NworICAg
IHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKKworICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhl
IHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNp
dC4gSXQgYWxzbworICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVl
LXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgorICAgIGhhbmRsZUNhbGxlZVNhdmVz
KGNvZGUpOworCisgICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcgQXJncyBp
bnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcworICAgIC8v
IHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3VsZCBiZSBw
cmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQorICAgIC8vIHNob3VsZG4ndCBoYXZl
IHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgorICAgIGFsbG9jYXRlU3RhY2soY29kZSk7
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBoYXZlIGEgY29kZSBsYXlvdXQgb3B0
aW1pemF0aW9uIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDQ3OAorCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFs
aWRhdGUoY29kZSwgImZpbmFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAg
ICAgZGF0YUxvZygiQWlyIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2co
Y29kZSk7CisgICAgfQorCisgICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJhdGUgY29kZS4KKyAgICBq
aXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuYWRkUHRyKFRydXN0ZWRJbW0zMigt
Y29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisKKyAgICBHZW5lcmF0aW9uQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuY29kZSA9IGNv
ZGU7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tM
YWJlbHMoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVy
czo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0g
WyZdIChDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAg
ICAgIGlmIChibG9ja0xhYmVsc1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAu
bGlua1RvKGJsb2NrTGFiZWxzW3RhcmdldF0sICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAg
ICB9OworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxv
Y2tKdW1wc1tibG9ja10ubGluaygmaml0KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkg
Pj0gMSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0g
MTsgKytpKSB7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGluc3QuZ2Vu
ZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1
bXAuaXNTZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChibG9jay0+bGFz
dCgpLm9wY29kZSgpID09IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9j
aygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlKCkgPT0gUmV0KSB7CisgICAgICAg
ICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2Vw
aWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bworICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92
ZXJyaWRlLgorICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAg
ICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+bGFzdCgpLmdlbmVy
YXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykKKyAg
ICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIHN3
aXRjaCAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAg
ICAgICBBU1NFUlQoIWp1bXAuaXNTZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAxOgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGxpbmso
anVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAgICAgIGlmIChibG9jay0+
c3VjY2Vzc29yQmxvY2soMSkgIT0gY29kZS5maW5kTmV4dEJsb2NrKGJsb2NrKSkKKyAgICAgICAg
ICAgICAgICBsaW5rKGppdC5qdW1wKCksIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygxKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQYXRocykKKyAgICAgICAg
bGF0ZVBhdGgtPnJ1bihqaXQsIGNvbnRleHQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gKKyNk
ZWZpbmUgQWlyR2VuZXJhdGVfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxw
ZXJzOworCituYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKwor
Ly8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFjayBhbGxv
Y2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CisvLyByZWdpc3RlciBhbGxvY2F0
aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLCBhbmQgdGhlbiBnZW5lcmF0ZXMgdGhl
IGNvZGUgdXNpbmcgdGhlIGdpdmVuCisvLyBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhh
dCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcwor
Ly8gZ2VuZXJhdGluZy4KK3ZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYpOworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpckdlbmVyYXRpb25Db250ZXh0X2gKKyNkZWZpbmUgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAor
CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQgeworICAg
IHR5cGVkZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25D
b250ZXh0Jik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQ
YXRoOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKKyAgICBDb2Rl
KiBjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
ckhhbmRsZUNhbGxlZVNhdmVzLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAi
QWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgaGFuZGxlQ2Fs
bGVlU2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwg
ImhhbmRsZUNhbGxlZVNhdmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1c2VkQ2FsbGVlU2F2ZXM7
CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoCisg
ICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAvLyBB
dCBmaXJzdCB3ZSBqdXN0IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAgICAgICAgICAgICAgICAg
ICB1c2VkQ2FsbGVlU2F2ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRvIHJlYWxseSBnZXQgdGhl
IGNhbGxlZSBzYXZlcy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVyKFJlZ2lzdGVyU2V0Ojpj
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkg
PSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworCisgICAgc2l6ZV90IGJ5
dGVTaXplID0gMDsKKyAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5mb3JFYWNoKAorICAg
ICAgICBbJl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSB7CisgICAgICAgICAgICBi
eXRlU2l6ZSA9IHN0ZDo6bWF4KC1lbnRyeS5vZmZzZXQoKSwgYnl0ZVNpemUpOworICAgICAgICB9
KTsKKworICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFja1Nsb3QoYnl0ZVNp
emUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCBz
aW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0YWNrIHNsb3Qg
dG8gdGhpcworICAgIC8vIGFyZWEuCisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAoLWJ5
dGVTaXplKTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0
JiBlbnRyeSkgeworICAgICAgICByZXR1cm4gQXJnOjpTdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9m
ZnNldCgpICsgYnl0ZVNpemUpOworICAgIH07CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9u
U2V0KGNvZGUpOworICAgIAorICAgIC8vIEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUg
cHJvbG9ndWUuCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFjaCgKKyAgICAg
ICAgWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgeworICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAwLCBlbnRyeS5yZWcoKS5pc0dQUigp
ID8gTW92ZSA6IE1vdmVEb3VibGUsIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRyeSkpOwor
ICAgICAgICB9KTsKKyAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKworICAgIC8v
IE5vdyBpbnNlcnQgcmVzdG9yZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsK
KyAgICAgICAgaWYgKGxhc3Qub3Bjb2RlKCkgIT0gUmV0KQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFjaCgKKyAgICAgICAg
ICAgIFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIHsKKyAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICBibG9jay0+c2l6ZSgp
IC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLAorICAgICAgICAg
ICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKKyAgICAgICAgICAg
IH0pOworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKyNk
ZWZpbmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgcGhhc2UgaWRl
bnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jlc3Rv
cmUgdGhlbSBpbiB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdzIGEg
bWFuZGF0b3J5IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtlIHRo
aXMgbW9yZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUKKy8v
IHBvd2VyZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5rIHdyYXBwaW5nOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4CisvLyBXZSBzaG91bGQgbWFrZSB0
aGlzIGludGVyYWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySGFuZGxlQ2Fs
bGVlU2F2ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2Vy
dGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaW5jbHVkZSAi
QWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2Nr
KQoreworICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5tX2luc3RzLCBtX2luc2VydGlvbnMp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisjZGVmaW5lIEFpcklu
c2VydGlvblNldF9oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0luc2Vy
dGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQ29k
ZTsKKwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247CisKK2NsYXNzIElu
c2VydGlvblNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUmIGNvZGUpCisgICAg
ICAgIDogbV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUmIGNvZGUoKSB7IHJl
dHVybiBtX2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBl
bmRJbnNlcnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0aW9ucy5h
cHBlbmQoc3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwgSW5zdCYm
IGluc3QpCisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBz
dGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1l
bnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgSW5z
dChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisgICAg
dm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7
CisgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAi
LCBsaXN0RHVtcChhcmdzKSwgIiAgOyAiLCAqb3JpZ2luKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVmaW5lIEFp
ckluc3RfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25D
b250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJn
LCAzPiBBcmdMaXN0OworCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQor
ICAgICAgICA6IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJ
bnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCisgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAs
IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQor
CisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBh
cmd1bWVudHMpCisgICAgICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9y
aWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0
KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAg
ICAgIDogYXJncyhXVEY6Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2lu
KQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUg
dGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdh
bnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVh
bnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3Qm
IiB0aGVuIHlvdSdyZQorICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8g
VGhpcyBvbmx5IHdhbGtzIHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQs
IGFuZCBpdCBkb2Vzbid0IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcgYXJnIDogYXJncykK
KyAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0
eXBlZGVmIHZvaWQgRWFjaEFyZ0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJnOjpUeXBlKTsK
KyAgICAKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUpLiBU
aGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRv
ci5yYi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEFy
Zyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdp
dGggKHRtcCwgcm9sZSwgdHlwZSkuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2hUbXAoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IGZvckVhY2hBcmdSb2xlKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9s
ZSwgdHlwZSwgZnVuY3Rvcik7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGlu
ZyBjYW4gYmUgZWl0aGVyIEFyZyBvciBUbXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcs
IHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGEgU3Bl
Y2lhbCouIFRoaXMgdW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAgYm9vbCBo
YXNTcGVjaWFsKCkgY29uc3Q7CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFsIHJlZ2lz
dGVycyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5j
eSwKKyAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwo
KSByZXR1cm5zIHRydWUuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVn
cygpOworCisgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2
ZS4gVGhpcyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisgICAgLy8g
dGhhdCBmb3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgaWYg
aGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMo
Y29uc3QgUmVnaXN0ZXJTZXQmKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gb25l
IG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5l
cmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNWYWxpZEZv
cm0oKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBm
b3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisgICAg
Ly8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChvciBhIFN0
YWNrU2xvdCBvciBDYWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVuIGluZGV4
PyBTcGlsbGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvIGZpbmQg
VG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBpdCBjYWxs
cyB0aGlzIHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBhbiBBcmc6
OkFkZHIuIElmIGl0CisgICAgLy8gZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0
aGF0IEFyZydzIGZvckVhY2hUbXAgdG8gZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4KKyAgICAv
LworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVy
YXRvci5yYi4KKyAgICBib29sIGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAg
IC8vIEdlbmVyYXRlIHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBpcywgbGlr
ZSwgbGl0ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRlcm1pbmFs
LCBpdCByZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0aGUgInRo
ZW4iIGNhc2UsIHdpdGggdGhlICJlbHNlIgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10aHJvdWdo
LiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIu
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdlbmVyYXRp
b25Db250ZXh0Jik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAg
IEFyZ0xpc3QgYXJnczsKKyAgICBWYWx1ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVlIHRoYXQg
dGhpcyBvcmlnaW5hdGVkIGZyb20uCisgICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckluc3RfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0SW5saW5lc19oCisjZGVmaW5lIEFp
ckluc3RJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJPcGNv
ZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWxzLmgiCisjaW5jbHVkZSAiQjNTdGFja21h
cC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRm9yRWFj
aDsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8VG1wPiB7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAgICB9
Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1bmN0b3IpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgordm9p
ZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgRm9yRWFjaDxUaGluZz46
OmZvckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitib29sIEluc3Q6Omhhc1NwZWNpYWwoKSBj
b25zdAoreworICAgIHJldHVybiBhcmdzLnNpemUoKSAmJiBhcmdzWzBdLmlzU3BlY2lhbCgpOwor
fQorCitjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sKKyAg
ICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7Cit9
CisKK3ZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycykKK3sKKyAgICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVy
cygqdGhpcywgdXNlZFJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBib29sIGlzU2hpZnRWYWxpZChJ
bnN0JiBpbnN0KQoreworI2lmIENQVShYODYpCisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9PSBU
bXAoWDg2UmVnaXN0ZXI6OmN4KTsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30g
ICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbHVlKEluc3QmIGluc3QpCit7CisgICAgcmV0
dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gQWlySW5zdElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyTGl2ZW5lc3NfaAorI2RlZmluZSBBaXJMaXZlbmVzc19oCisKKyNpbmNsdWRl
ICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIFlvdSBjYW4gY29tcHV0
ZSBsaXZlbmVzcyBvdmVyIFRtcCdzIG9yIG92ZXIgQXJnJ3MuIElmIHlvdSBjb21wdXRlIG92ZXIg
QXJnJ3MsIHlvdSBnZXQgYm90aAorLy8gc3RhY2sgbGl2ZW5lc3MgYW5kIHRtcCBsaXZlbmVzcy4K
K3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nPgorY2xhc3MgTGl2ZW5lc3MgeworcHVibGljOgorICAg
IExpdmVuZXNzKENvZGUmIGNvZGUpCisgICAgeworICAgICAgICBtX2xpdmVBdEhlYWQucmVzaXpl
KGNvZGUuc2l6ZSgpKTsKKyAgICAgICAgbV9saXZlQXRUYWlsLnJlc2l6ZShjb2RlLnNpemUoKSk7
CisKKyAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gc2VlbjsKKworICAgICAgICBib29sIGNo
YW5nZWQgPSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgY2hh
bmdlZCA9IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29k
ZS5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBi
bG9jayA9IGNvZGUuYXQoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgTG9jYWxDYWxjIGxv
Y2FsQ2FsYygqdGhpcywgYmxvY2spOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJ
bmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykKKyAgICAgICAgICAgICAgICAgICAg
bG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgICAg
IGJvb2wgZmlyc3RUaW1lID0gc2Vlbi5hZGQoYmxvY2spOworICAgICAgICAgICAgICAgIGlmICgh
Zmlyc3RUaW1lICYmIGxvY2FsQ2FsYy5saXZlKCkgPT0gbV9saXZlQXRIZWFkW2Jsb2NrXSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2Nr
LT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2xpdmVBdFRhaWxbcHJl
ZGVjZXNzb3JdLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5saXZlKCku
YmVnaW4oKSwgbG9jYWxDYWxjLmxpdmUoKS5lbmQoKSk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIG1fbGl2ZUF0SGVhZFtibG9ja10gPSBsb2NhbENhbGMudGFrZUxpdmUoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhp
bmc+JiBsaXZlQXRIZWFkKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fbGl2ZUF0SGVhZFtibG9ja107CisgICAgfQorCisgICAgY29uc3QgSGFzaFNldDxU
aGluZz4mIGxpdmVBdFRhaWwoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9saXZlQXRUYWlsW2Jsb2NrXTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNhbGN1
bGF0b3IgaGFzIHRvIGJlIHJ1biBpbiByZXZlcnNlLgorICAgIGNsYXNzIExvY2FsQ2FsYyB7Cisg
ICAgcHVibGljOgorICAgICAgICBMb2NhbENhbGMoTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Js
b2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9saXZlKGxpdmVuZXNzLT5saXZlQXRUYWlsKGJs
b2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgSGFzaFNldDxUaGlu
Zz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xpdmU7IH0KKyAgICAgICAgSGFzaFNldDxUaGlu
Zz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6bW92ZShtX2xpdmUpOyB9CisKKyAgICAgICAg
dm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZpcnN0
IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAg
ICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9s
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKGFyZyk7CisgICAgICAg
ICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5leHQgaGFuZGxlIGNsb2JiZXJlZCByZWdp
c3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5oYXNTcGVjaWFsKCkpIHsKKyAgICAgICAgICAg
ICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2goCisgICAgICAgICAgICAgICAg
ICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJl
bW92ZShUaGluZyhyZWcpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmluYWxseSBoYW5kbGUgdXNl
J3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAgICAgICAgICAgICAgIFt0
aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBIYXNoU2V0PFRoaW5nPiBtX2xpdmU7
CisgICAgfTsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNl
dDxUaGluZz4+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0
PFRoaW5nPj4gbV9saXZlQXRUYWlsOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTM0IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9PiB1c2Ugb2YgYSBn
ZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBvZiBhIGdlbmVy
YWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQgZGVmIG9mIGEg
Z2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ugb2YgYSBmbG9h
dCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3Ig
dmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVl
CisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJlZ2lzdGVyCisj
IEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9PiBUcnVzdGVkSW1tNjQKKyMg
QWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKKyMgSW5kZXggPT4g
QmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVzcworIworIyBUaGUgcGFy
c2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVuZGVyc3RhbmRzIHRoYXQg
dGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhpbmdzLiBTbywgYWx0
aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0aW9uIHN0eWxlLCBub25l
IG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJlIG1lYW5pbmdmdWwgdG8g
dGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKyMKKyMgRm9vNDIgVTpH
LCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBhcnNlciB3b3VsZCBrbm93
IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBVRDpGCisjICAgICBJ
bW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28tZm9ybSBpbnN0cnVjdGlv
biB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQgdXNlcytkZWZzIGEgZmxv
YXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2ZSBhIGxlYWRp
bmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9Bc3NlbWJsZXIK
KyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisKK05vcAorCitB
ZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgVG1w
CisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcKKyAg
ICBJbW0sIFRtcCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1t
LCBUbXAKKyAgICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworTHNo
aWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpH
LCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworTW92ZSBVOkcsIEQ6RworICAg
IFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAgQWRkciwgVG1wIGFz
IGxvYWQgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRl
ZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBUbXAsIEFkZHIgYXMgc3RvcmUKKworTW92ZURv
dWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWREb3VibGUK
KyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKworTW92ZTY0VG9Eb3VibGUgVTpHLCBEOkYK
KyAgICBUbXAsIFRtcAorCitNb3ZlRG91YmxlVG82NCBVOkYsIEQ6RworICAgIFRtcCwgVG1wCisK
K0JyYW5jaEFkZDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRt
cAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVz
Q29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE11bDMyIFU6
RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQs
IEFkZHIsIFRtcAorCitCcmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVz
Q29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwg
QWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitC
cmFuY2hOZWczMiBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcAorCitKdW1wIC9i
cmFuY2gKKworUmV0IC90ZXJtaW5hbAorCitCcmVha3BvaW50IC90ZXJtaW5hbAorCisjIEFpciBh
bGxvd3MgZm9yIGV4b3RpYyBiZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVybWlu
ZWQgZW50aXJlbHkgYnkgdGhlIFNwZWNpYWwgb3BlcmFuZCwKKyMgd2hpY2ggbXVzdCBiZSB0aGUg
Zmlyc3Qgb3BlcmFuZC4KK3NwZWNpYWwgUGF0Y2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRl
ICJCM0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciog
bmFtZSkKKyAgICA6IG1fY29kZShjb2RlKQorICAgICwgbV9uYW1lKG5hbWUpCit7CisgICAgaWYg
KHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9y
ZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAg
aWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9IHRv
Q1N0cmluZyhjb2RlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAgIGlm
IChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwg
bV9uYW1lLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNl
U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBo
YXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJQaGFzZVNj
b3BlX2gKKyNkZWZpbmUgQWlyUGhhc2VTY29wZV9oCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBDb2RlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKENvZGUmLCBjb25zdCBj
aGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFsaWRhdGlvbgor
Citwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7Cisg
ICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBBaXJQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9y
aXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQUlJlZz4mIGdwc0luUHJpb3Jp
dHlPcmRlcigpCit7CisgICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+KiByZXN1bHQ7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9u
Y2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8R1BSUmVn
PigpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnOjphbGxHUFJzKCk7CisgICAg
ICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAg
ICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVy
cygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAg
ICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNh
dmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIo
KSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQor
Citjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnBzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0
aWMgVmVjdG9yPEZQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAg
ICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdp
c3RlclNldCBhbGwgPSBSZWc6OmFsbEZQUnMoKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNh
bGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAg
ICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZl
LmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwor
ICAgIHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3Jp
dHlPcmRlcihBcmc6OlR5cGUgdHlwZSkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPFJlZz4qIHJlc3Vs
dFtBcmc6Om51bVR5cGVzXTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBz
dGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAg
cmVzdWx0W0FyZzo6R1BdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEdQ
UlJlZyByZWcgOiBncHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0
W0FyZzo6R1BdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBd
ID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcHJz
SW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdLT5hcHBl
bmQoUmVnKHJlZykpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdFt0eXBlXTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAor
I2RlZmluZSBBaXJSZWdpc3RlclByaW9yaXR5X2gKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2lu
Y2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7Citjb25zdCBW
ZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3JpdHlPcmRlcigpOworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBCYW5rPiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyOwordGVtcGxhdGU8PiBzdHJ1
Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEdQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8
R1BSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZ3BzSW5Qcmlvcml0eU9yZGVyKCk7
IH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5m
bz4geworICAgIGNvbnN0IFZlY3RvcjxGUFJSZWc+JiBpblByaW9yaXR5T3JkZXIoKSB7IHJldHVy
biBmcHNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4K
K2NvbnN0IFZlY3RvcjxCYW5rOjpSZWdpc3RlclR5cGU+JiByZWdzSW5Qcmlvcml0eU9yZGVyKCkK
K3sKKyAgICByZXR1cm4gUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEJhbms+OjppblByaW9yaXR5
T3JkZXIoKTsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJn
OjpUeXBlKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
QWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorCisjaW5jbHVkZSA8d3RmL1N0cmlu
Z1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworU3BlY2lhbDo6U3BlY2lhbChjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9u
YW1lKG5hbWUpCisgICAgLCBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVjaWFsOjp+U3Bl
Y2lhbCgpCit7Cit9CisKK0NTdHJpbmcgU3BlY2lhbDo6bmFtZSgpIGNvbnN0Cit7CisgICAgU3Ry
aW5nUHJpbnRTdHJlYW0gb3V0OworICAgIGR1bXBJbXBsKG91dCk7CisgICAgcmV0dXJuIG91dC50
b0NTdHJpbmcoKTsKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgpOworICAgIGR1bXBJbXBsKG91dCk7Cisg
ICAgaWYgKG1faW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludChtX2luZGV4KTsK
K30KKwordm9pZCBTcGVjaWFsOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgqdGhpcywgIjogIik7CisgICAgZGVlcER1bXBJbXBsKG91dCk7Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFpclNwZWNpYWxfaAorI2RlZmluZSBBaXJTcGVjaWFsX2gKKworI2luY2x1ZGUgIkFpcklu
c3QuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworY2xhc3MgR2VuZXJhdGlvbkNvbnRleHQ7CisKK2NsYXNzIFNwZWNpYWwgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNpYWwpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiYiOwor
ICAgIAorICAgIFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TcGVjaWFsKCk7CisKKyAgICBDU3Ry
aW5nIG5hbWUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBj
b25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpID0gMDsKKyAgICB2aXJ0
dWFsIGJvb2wgaXNWYWxpZChJbnN0JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhZG1pdHNTdGFj
ayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpID0gMDsKKworICAgIC8vIFRoaXMgZ2V0cyBjYWxs
ZWQgb24gZm9yIGVhY2ggSW5zdCB0aGF0IHVzZXMgdGhpcyBTcGVjaWFsLiBOb3RlIHRoYXQgdGhl
cmUgaXMgbm8gd2F5IHRvCisgICAgLy8gZ3VhcmFudGVlIHRoYXQgYSBTcGVjaWFsIGdldHMgdXNl
ZCBmcm9tIGp1c3Qgb25lIEluc3QsIGJlY2F1c2UgQWlyIG1pZ2h0IHRhaWxkdXAgbGF0ZS4gU28s
CisgICAgLy8gaWYgeW91IHdhbnQgdG8gcGFzcyB0aGlzIGluZm9ybWF0aW9uIGRvd24gdG8gZ2Vu
ZXJhdGUoKSwgdGhlbiB5b3UgaGF2ZSB0byBlaXRoZXI6CisgICAgLy8KKyAgICAvLyAxKSBHZW5l
cmF0ZSBBaXIgdGhhdCBzdGFydHMgd2l0aCBhIHNlcGFyYXRlIFNwZWNpYWwgcGVyIFBhdGNoIElu
c3QsIGFuZCB0aGVuIG1lcmdlCisgICAgLy8gICAgdXNlZFJlZ2lzdGVyIHNldHMuIFRoaXMgaXMg
cHJvYmFibHkgbm90IGdyZWF0LCBidXQgaXQgb3B0aW1pemVzIGZvciB0aGUgY29tbW9uIGNhc2Ug
dGhhdAorICAgIC8vICAgIEFpciBkaWRuJ3QgZHVwbGljYXRlIGNvZGUgb3IgdGhhdCBzdWNoIGR1
cGxpY2F0aW9uIGRpZG4ndCBjYXVzZSBhbnkgaW50ZXJlc3RpbmcgY2hhbmdlcyB0bworICAgIC8v
ICAgIHJlZ2lzdGVyIGFzc2lnbm1lbnQuCisgICAgLy8KKyAgICAvLyAyKSBIYXZlIHRoZSBTcGVj
aWFsIG1haW50YWluIGEgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+LiBUaGlzIHdvcmtzIGJl
Y2F1c2UgdGhlIGFuYWx5c2lzCisgICAgLy8gICAgdGhhdCBmZWVkcyBpbnRvIHRoaXMgY2FsbCBp
cyBwZXJmb3JtZWQganVzdCBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIGFuZCB0aGVyZSBpcyBubyB3
YXkKKyAgICAvLyAgICBmb3IgdGhlIFZlY3Rvcjw+J3MgdGhhdCBjb250YWluIHRoZSBJbnN0cyB0
byBiZSByZWFsbG9jYXRlZC4gVGhpcyBhbGxvd3MgZ2VuZXJhdGUoKSB0bworICAgIC8vICAgIGNv
bnN1bHQgdGhlIEhhc2hNYXAuCisgICAgLy8KKyAgICAvLyAzKSBIeWJyaWQ6IHlvdSBjb3VsZCB1
c2UgKDEpIGFuZCBmaXJlIHVwIGEgSGFzaE1hcCBpZiB5b3Ugc2VlIG11bHRpcGxlIGNhbGxzLgor
ICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIHJlbHkgb24gcmVw
b3J0VXNlZFJlZ2lzdGVycygpIGJlaW5nIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlcgorICAgIC8v
IGFzIGdlbmVyYXRlKCkuIElmIHdlIGNvdWxkIHJlbHkgb24gdGhhdCwgdGhlbiB3ZSBjb3VsZCBq
dXN0IGhhdmUgZWFjaCBTcGVjaWFsIGluc3RhbmNlCisgICAgLy8gbWFpbnRhaW4gYSBWZWN0b3Ig
b2YgUmVnaXN0ZXJTZXQncyBhbmQgdGhlbiBwcm9jZXNzIHRoYXQgdmVjdG9yIGluIHRoZSByaWdo
dCBvcmRlciBpbgorICAgIC8vIGdlbmVyYXRlKCkuIEJ1dCwgdGhlIG9yZGVyaW5nIGRpZmZlcmVu
Y2UgaXMgdW5saWtlbHkgdG8gY2hhbmdlIHNpbmNlIGl0IHdvdWxkIGhhcm0gdGhlCisgICAgLy8g
cGVyZm9ybWFuY2Ugb2YgdGhlIGxpdmVuZXNzIGFuYWx5c2lzLgorICAgIC8vCisgICAgLy8gQ3Vy
cmVudGx5LCB3ZSBkbyAoMSkgZm9yIEIzIHN0YWNrbWFwcy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVw
b3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSA9IDA7CisgICAgCisg
ICAgdmlydHVhbCBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVy
cyYsIEdlbmVyYXRpb25Db250ZXh0JikgPSAwOworCisgICAgdmlydHVhbCBjb25zdCBSZWdpc3Rl
clNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSA9IDA7CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBj
b25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNv
bnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAgIGNvbnN0
IGNoYXIqIG1fbmFtZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKworY2xhc3MgRGVlcFNw
ZWNpYWxEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3BlY2lhbERpbXAoU3BlY2lhbCogc3BlY2lh
bCkKKyAgICAgICAgOiBtX3NwZWNpYWwoc3BlY2lhbCkKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zcGVj
aWFsKQorICAgICAgICAgICAgbV9zcGVjaWFsLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBTcGVjaWFsKiBtX3NwZWNpYWw7Cit9OworCitEZWVwU3BlY2lhbER1bXAgZGVlcER1bXAoU3Bl
Y2lhbCogc3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVlcFNwZWNpYWxEdW1wKHNwZWNpYWwpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJTcGVj
aWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5
dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVk
ZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCit7CisgICAg
UGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJzcGlsbEV2ZXJ5dGhpbmciKTsKKworICAgIC8v
IFdlIHdhbnQgdG8ga25vdyB0aGUgc2V0IG9mIHJlZ2lzdGVycyB1c2VkIGF0IGV2ZXJ5IHBvaW50
IGluIGV2ZXJ5IGJhc2ljIGJsb2NrLgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxS
ZWdpc3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOworICAgIExpdmVuZXNzPFRt
cD4gbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsK
KyAgICAgICAgTGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxv
Y2spOworICAgICAgICB1c2VkUmVnaXN0ZXJzW2Jsb2NrXS5yZXNpemUoYmxvY2stPnNpemUoKSAr
IDEpOworCisgICAgICAgIGF1dG8gc2V0VXNlZFJlZ2lzdGVycyA9IFsmXSAodW5zaWduZWQgaW5k
ZXgpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXQgPSB1c2VkUmVnaXN0ZXJzW2Jsb2Nr
XVtpbmRleF07CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsb2NhbENhbGMubGl2ZSgpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBz
ZXQuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBz
ZXRVc2VkUmVnaXN0ZXJzKGJsb2NrLT5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAg
ICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAgICAg
ICAgIHNldFVzZWRyZWdpc3RlcnMoaW5zdEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAuCisgICAgVmVjdG9yPFN0YWNr
U2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1UeXBlc107CisgICAgZm9yICh1bnNpZ25lZCB0
eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyArK3R5cGVJbmRleCkgewor
ICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxTdGFja1Nsb3RzW3R5
cGVJbmRleF07CisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QXJnOjpUeXBl
Pih0eXBlSW5kZXgpOworICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShjb2RlLm51bVRtcHModHlw
ZSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29kZS5udW1UbXBzKHR5cGUp
OyB0bXBJbmRleC0tOykKKyAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0gY29kZS5h
ZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICB9CisKKyAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVy
U2V0JiBzZXRCZWZvcmUgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXhdOworICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQmIHNldEFmdGVyID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdElu
ZGV4ICsgMV07CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7
CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgWyZdIChUbXAm
IHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9IGFsbFN0YWNrU2xvdHNb
dHlwZV1bdG1wLnRtcEluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBBcmcgYXJnID0gQXJn
OjpzdGFjayhzdGFja1Nsb3QpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZmln
dXJlIG91dCBhIHJlZ2lzdGVyIHRvIHVzZS4gSG93IHdlIGRvIHRoYXQgZGVwZW5kcyBvbiB0aGUg
cm9sZS4KKyAgICAgICAgICAgICAgICAgICAgUmVnIGNob3NlblJlZzsKKyAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2U6
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9y
ZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUu
Z2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNl
dChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RGVmOgorICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0
eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QWZ0ZXIuZ2V0KHJl
ZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2VEZWY6CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykg
JiYgIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRC
ZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJl
ZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoY2hvc2VuUmVnKTsKKworICAg
ICAgICAgICAgICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAgICAg
ICAgICBPcGNvZGUgbW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlCisK
KyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAs
IGFyZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwaWxsRXZlcnl0aGluZ19oCisjZGVmaW5lIEFp
clNwaWxsRXZlcnl0aGluZ19oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpcyBhIHBoYXNlIGZvciB0ZXN0
aW5nLiBJdCBiZWhhdmVzIGxpa2UgYSByZWdpc3RlciBhbGxvY2F0b3IgaW4gdGhlIHNlbnNlIHRo
YXQgaXQKKy8vIGVsaW1pbmF0ZXMgdGVtcG9yYXJpZXMgZnJvbSB0aGUgcHJvZ3JhbS4gSXQgYWNj
b21wbGlzaGVzIHRoaXMgYnkgYWx3YXlzIHNwaWxsaW5nIGFsbAorLy8gdGVtcG9yYXJpZXMuIFRo
ZSByZXN1bHRpbmcgY29kZSBpcyBnb2luZyB0byBiZSB2ZXJ5IGluZWZmaWNpZW50LiBUaGlzIHBo
YXNlIGlzIGdyZWF0IGlmIHlvdQorLy8gdGhpbmsgdGhhdCB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUg
cmVnaXN0ZXIgYWxsb2NhdG9yLiBZb3UgY2FuIGNvbmZpcm0gdGhpcyBieSBydW5uaW5nIHRoaXMK
Ky8vIHBoYXNlIGluc3RlYWQgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KKy8vCisvLyBOb3Rl
IHRoYXQgZXZlbiB0aG91Z2ggdGhpcyBwaGFzZSBkb2VzIHRoZSBjaGVhcGVzdCB0aGluZyBwb3Nz
aWJsZSwgaXQncyBub3QgZXZlbiB3cml0dGVuIGluIGEKKy8vIHBhcnRpY3VsYXJseSBlZmZpY2ll
bnQgd2F5LiBTbywgZG9uJ3QgZ2V0IGFueSBpZGVhcyBhYm91dCB1c2luZyB0aGlzIHBoYXNlIHRv
IHJlZHVjZSBjb21waWxlcgorLy8gbGF0ZW5jeS4gSWYgeW91IHdhbnRlZCB0byBkbyB0aGF0LCB5
b3Ugc2hvdWxkIGNvbWUgdXAgd2l0aCBhIGNsZXZlciBhbGdvcml0aG0gaW5zdGVhZCBvZiB1c2lu
ZworLy8gdGhpcyBzaWxseSB0aGluZy4KKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYpOwor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJTcGlsbEV2
ZXJ5dGhpbmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
dGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgU3RhY2tTbG90OjpzZXRPZmZzZXRGcm9t
RlAoaW50cHRyX3QgdmFsdWUpCit7CisgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKKyAgICBp
ZiAobV92YWx1ZSkKKyAgICAgICAgbV92YWx1ZS0+bV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKK30K
Kwordm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkZWVwRHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAi
LCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCwgIiwga2lu
ZCA9ICIsIG1fa2luZCk7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG91dC5wcmludCgiLCB2
YWx1ZSA9ICIsICptX3ZhbHVlKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xv
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3RhY2tTbG90X2gKKyNkZWZp
bmUgQWlyU3RhY2tTbG90X2gKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1
ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTdGFja1Nsb3R2YWx1ZTsKKwor
bmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFN0YWNrU2xvdCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU3RhY2tTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAg
ICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldXRybiBtX2tpbmQ7IH0KKyAgICB1bnNp
Z25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIHVuc2lnbmVkIGFs
aWdubWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAxKQorICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDIpCisgICAgICAg
ICAgICByZXR1cm4gMjsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gNCkKKyAgICAgICAgICAg
IHJldHVybiA0OworICAgICAgICByZXR1cm4gODsKKyAgICB9CisKKyAgICBTdGFja1Nsb3RWYWx1
ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICAvLyBaZXJvIG1lYW5z
IHRoYXQgaXQncyBub3QgeWV0IGFzc2lnbmVkLgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAvLyBUaGlzIHNob3VsZCB1
c3VhbGx5IGp1c3QgYmUgY2FsbGVkIGZyb20gcGhhc2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlv
bi4gQnV0IHlvdSBjYW4KKyAgICAvLyB0b3RhbGx5IGZvcmNlIGEgc3RhY2sgc2xvdCB0byBsYW5k
IGF0IHNvbWUgb2Zmc2V0LgorICAgIHZvaWQgc2V0T2Zmc2V0RnJvbUZQKGludHB0cl90KTsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKwor
ICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xv
dEtpbmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fYnl0ZVNpemUo
Ynl0ZVNpemUpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29mZnNldEZy
b21GUCh2YWx1ZS0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAg
ICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChieXRlU2l6ZSk7Cisg
ICAgfQorICAgIAorICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2lu
ZDsKKyAgICBTdGFja1Nsb3RWYWx1ZSogbV92YWx1ZTsKK307CisKK2NsYXNzIERlZXBTdGFja1Ns
b3REdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3RhY2tTbG90RHVtcChTdGFja1Nsb3QqIHNsb3Qp
CisgICAgICAgIDogbV9zbG90KHNsb3QpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc2xvdCkKKyAgICAg
ICAgICAgIG1fc2xvdC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
b3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RhY2tTbG90KiBt
X3Nsb3Q7Cit9OworCitEZWVwU3RhY2tTbG90RHVtcCBkZWVwRHVtcChTdGFja1Nsb3QqIHNsb3Qp
Cit7CisgICAgcmV0dXJuIERlZXBTdGFja1Nsb3REdW1wKHNsb3QpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJTdGFja1Nsb3RfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgVG1wOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBv
dXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlz
UmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChpc0dQVG1wKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIldG1wIiwgZ3BU
bXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmludCgiJWZ0
bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJUbXBfaAorI2RlZmluZSBBaXJUbXBfaAorCisjaW5jbHVkZSAi
UmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworLy8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBhIHJlZ2lzdGVyLiBJdCBjYW4gYmUg
dXNlZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4gSXQgY2FuIGFsc28KKy8vIGJlIHVzZWQg
dG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0ZXIgKGkuZS4gYSB0ZW1wb3JhcnkpLiBM
aWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQorLy8gZGVsaWJlcmF0ZWx5IHRlcnNlIG5hbWlu
ZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoaXMgbmFtZSBhIGxvdC4KKworY2xhc3MgVG1w
IHsKK3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICB7CisgICAg
fQorCisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcpCisgICAgeworICAgICAgICBpZiAocmVnKSB7
CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgbV92YWx1ZSA9
IGVuY29kZUdQUihyZWcuZ3ByKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1fdmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUbXAoY29uc3QgQXJnJik7
CisKKyAgICBzdGF0aWMgVG1wIGdwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgewor
ICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUdQVG1w
KGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1w
IGZwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0
OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGZvclJhd1ZhbHVlKHVuc2ln
bmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
dmFsdWUgPSBpbmRleDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisKKyAgICBi
b29sIHJhd1ZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0dQ
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5j
b2RlZEZQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29s
IGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUFIobV92YWx1
ZSk7CisgICAgfQorCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNHUFIoKSB8fCBpc0ZQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBG
UFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFIobV92YWx1
ZSk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNH
UCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwcigpOworICAgICAgICByZXR1cm4gZnByKCk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJ
bmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7
CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIHJl
dHVybiBmcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhISp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUg
PT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1w
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitw
cml2YXRlOgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCisgICAgewor
ICAgICAgICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2Rl
RlAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBpbmRleDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkp
OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisgICAgewor
ICAgICAgICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSUmVn
aXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFRtcCh1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxh
c3RSZWdpc3RlcigpKSArIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29k
ZUZQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQUihN
YWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0gaW5kZXg7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1AoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlID4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUChpbnQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPCAwOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzRW5jb2RlZEdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
aXNFbmNvZGVkR1AodmFsdWUpICYmIHZhbHVlIDw9IGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6
bGFzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQUihp
bnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmIHZh
bHVlID49IGVuY29kZWRGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOworICAg
IH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1ZSk7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBSKHZh
bHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2RlR1BSKE1h
Y3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJl
Z2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGludCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBSKE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5j
b2RlZEdQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVHUFIoTWFj
cm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0YXRpYyB1
bnNpZ25lZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNF
bmNvZGVkRlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFjcm9Bc3Nl
bWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyAw
OiBlbXB0eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4KKyAg
ICAvLyBuZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1ZTsK
K307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclRt
cF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGluZXNfaAor
I2RlZmluZSBBaXJUbXBJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUg
IkFpclRtcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK2lubGluZSBUbXA6OlRtcChjb25zdCBBcmcmIGFyZykKK3sKKyAgICAqdGhpcyA9IGFy
Zy50bXAoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gQWlyVG1wSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisKKyNpbmNsdWRlICJBaXJDb2Rl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
bmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIo
Q29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAg
ICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3doZW4od2hlbikKKyAgICAgICAgLCBt
X2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQorCisjZGVmaW5lIFZBTElEQVRF
KGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZhaWwoX19GSUxF
X18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9uLCB0b0NTdHJpbmcg
bWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKyAgICAKKyAgICB2b2lkIHJ1bigpCisg
ICAgeworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+IHZhbGlkU2xvdHM7CisgICAgICAgIEhh
c2hTZXQ8QmFzaWNCbG9jayo+IHZhbGlkQmxvY2tzOworICAgICAgICBIYXNoU2V0PFNwZWNpYWwq
PiB2YWxpZFNwZWNpYWxzOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2Nv
ZGUpCisgICAgICAgICAgICB2YWxpZEJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICBmb3IgKFN0
YWNrU2xvdCogc2xvdCA6IG1fY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgICAgICB2YWxpZFNs
b3RzLmFkZChzbG90KTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogbV9jb2RlLnNw
ZWNpYWxzKCkpCisgICAgICAgICAgICB2YWxpZFNwZWNpYWxzLmFkZChzcGVjaWFsKTsKKworICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5z
dEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5k
ZXgpOworICAgICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAg
ICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgU3RhY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNsb3Rz
LmNvbnRhaW5zKGFyZy5zdGFja1Nsb3QoKSksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU3BlY2lhbHMuY29udGFpbnMoYXJn
LnNwZWNpYWwoKSksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaW5zdC5pc1ZhbGlk
Rm9ybSgpLCAoIkF0ICIsIGluc3QpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdEluZGV4ID09
IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURShpc1Rlcm1p
bmFsKGluc3Qub3Bjb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKCkpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nl
c3NvcnMoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhz
dWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaykpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRl
OgorICAgIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5l
TnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAg
ICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNz
YWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAg
ICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5l
TnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAi
XG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnByaW50
KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2Fn
ZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dC5wcmludChmYWls
dXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIG91
dC5wcmludCgiQmVmb3JlICIsIHdoZW4sICI6XG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCht
X2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIG91dC5wcmludCgiQXQgdGltZSBvZiBm
YWlsdXJlOlxuIik7CisgICAgICAgIG91dC5wcmludChtX2NvZGUpOworCisgICAgICAgIG91dC5w
cmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUo
ZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFT
SCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9k
dW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRh
dGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkK
K3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIHdoZW4sIGR1bXBCZWZvcmUpOworICAg
IHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJWYWxpZGF0ZV9oCisjZGVmaW5lIEFpclZh
bGlkYXRlX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBDb2RlOworCit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVu
ID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3Iu
cmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9n
ZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTUgQEAKKyMhL3Vzci9iaW4v
ZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWly
ZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29kZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3Bl
Y2lhbCwgOm92ZXJsb2FkcworICAgIGF0dHJfYWNjZXNzb3IgOmtpbmQKKworICAgIGRlZiBpbml0
aWFsaXplKG5hbWUsIHNwZWNpYWwpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3Bl
Y2lhbCA9IHNwZWNpYWwKKyAgICAgICAgQGtpbmQgPSA6aW5zdAorICAgICAgICB1bmxlc3Mgc3Bl
Y2lhbAorICAgICAgICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAor
CisgICAgZGVmIG1hc21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0x
XQorICAgIGVuZAorZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlw
ZQorCisgICAgZGVmIGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xl
CisgICAgICAgIEB0eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisg
ICAgYXR0cl9yZWFkZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShz
aWduYXR1cmUsIGZvcm1zKQorICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAg
IEBmb3JtcyA9IGZvcm1zCisgICAgZW5kCitlbmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVh
ZGVyIDpuYW1lCisgICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxp
emUobmFtZSkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UK
KyAgICBlbmQKKworICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3Ry
aW5nCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAg
ICBAbmFtZSA9PSBvdGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAg
ICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAg
aWYga2luZCA9PSAiQWRkciIKKyAgICAgICAgICAgIFsiQWRkciIsICJTdGFja1Nsb3QiLCAiQ2Fs
bEFyZyJdCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAg
ICBlbmQKKworICAgIGRlZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisg
ICAgZW5kCitlbmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5h
bWUKKworICAgIGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMg
PSBraW5kcworICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFz
cyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisg
ICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFt
ZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAor
ICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9Igor
ICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0
cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBA
b3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAK
KyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAg
ICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBA
c3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihv
dGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0
b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAor
ICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVt
cHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBl
bHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFsw
XX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkK
KyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQor
ICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2Fz
ZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50
LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdu
b3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEt
WjAtOV9dKykvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmls
ZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAg
ICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXC9dLwor
ICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5l
TnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJv
ciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVk
IHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0
ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0
b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dG
KHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQo
dG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRl
eCl8KFJlbENvbmQpfChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQor
ICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAg
ICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVu
dGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90
IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6
ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkK
KyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9r
ZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEK
KyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tl
bgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFy
c2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAg
ICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3Ry
aW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9r
ZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1l
SWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VF
cnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQor
ICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1
bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9y
KCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAg
ICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5
cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4
cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFu
Y2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAg
ICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtp
bmQgKEltbSwgSW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQpIikg
dW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0Cisg
ICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisg
ICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0
aAorCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBj
b25zdW1lKCJzcGVjaWFsIikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlk
ZW50aWZpZXIKKworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBh
IHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAg
ICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlm
aWVyCisKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAg
ICAgICAgICAgb3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAg
IHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2Rl
LnNwZWNpYWwKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29k
ZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJl
c3VsdFtvcGNvZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgaXNVRCh0b2tlbikKKyAgICAgICAgICAg
ICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gY29uc3VtZVJv
bGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUpCisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVu
bGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAg
ICAgICBpZiB0b2tlbiA9PSAiLyIKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLyIpCisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW4uc3RyaW5nCisgICAgICAgICAgICAgICAgICAg
IHdoZW4gImJyYW5jaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOmJy
YW5jaAorICAgICAgICAgICAgICAgICAgICB3aGVuICJ0ZXJtaW5hbCIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9wY29kZS5raW5kID0gOnRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkJhZCAvIGRpcmVjdGl2ZSIp
CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBhZHZhbmNlCisg
ICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBpc0tpbmQodG9rZW4pCisg
ICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAga2luZHMg
PSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAorICAgICAgICAgICAg
ICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPDwg
S2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0
b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigi
Q2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5hbWUgPT0gIlRtcCIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNwZWNpYWwgPSB0cnVl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioiKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1
bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Vt
ZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBjb25zdW1lSWRl
bnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9y
IG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUubGVuZ3RoCisgICAg
ICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIkltbTY0IgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnJvbGUgIT0gIlUi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhh
cyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBz
aWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLWdlbmVy
YWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoa2luZHMsIGFs
dE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgaXNLaW5kKHRva2Vu
KQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAg
ICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAgcmFp
c2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8
IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAg
ICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUsIGZvcm1zKQorICAg
ICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAgICBlbmQKK2VuZAor
CiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoJGZp
bGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UKKworZGVmIHdyaXRl
SChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsKKyAg
ICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVk
IGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQh
IgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9X2gi
CisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAgICAg
IHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFpciN7
ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK2RlZiB3cml0ZUNQUChmaWxlbmFtZSkKKyAgICBG
aWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmNwcCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAor
ICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVy
YXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAg
ICAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiY29uZmlnLmhcIiIKKyAgICAgICAgb3V0cC5wdXRz
ICIjaW5jbHVkZSBcIkFpciN7ZmlsZW5hbWV9LmhcIiIKKworICAgICAgICB5aWVsZCBvdXRwCisg
ICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5w
dXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAg
IG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5z
b3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7
b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAic3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6ZX07Igor
ICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAgICAKKyAg
ICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNzIFByaW50
U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBX
VEYiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1
dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVz
cGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7
IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9w
Y29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0
Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29k
ZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0
cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAu
cHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAg
IG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAu
cHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKworIyBGcm9t
IGhlcmUgb24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIHNp
bmNlIHdlJ3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKworZGVmIG1h
dGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0dGVyLCBm
aWx0ZXIsIGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAorCisgICAg
aWYgZmlsdGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIGlmIGNvbHVt
bkluZGV4ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1bmxlc3MgZm9y
bXMubGVuZ3RoID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAgICAgIHJldHVy
bgorICAgIGVuZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFjaCB7CisgICAg
ICAgIHwgZm9ybSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbkluZGV4XS5uYW1l
CisgICAgICAgIGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdIDw8IGZv
cm0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zvcm1dCisgICAg
ICAgIGVuZAorICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91cHMubGVuZ3Ro
ID09IDEKKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4
ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4KKyAg
ICBlbmQKKworICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltjb2x1bW5JbmRl
eF19KSB7IgorICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwgdmFsdWUgfAor
ICAgICAgICBvdXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIK
KyAgICAgICAgS2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAgICAgfCBhcmdLaW5k
IHwKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06IgorICAgICAg
ICB9CisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1bW5JbmRleCAr
IDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIiBpZiBr
ZXkgPT0gIkltbTY0IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYgbWF0Y2hJbnN0T3Zl
cmxvYWQob3V0cCwgc3BlZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0t
Pm9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2Rl
IHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgaWYg
b3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2RlLm92ZXJsb2Fkcy5z
aXplICE9IDEpIG9yIHNwZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKCN7aW5zdH0tPmFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAg
ICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9h
ZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJl
Lmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBv
cGNvZGUsIG92ZXJsb2FkCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5l
ZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0i
CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7
IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7
IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5zdE92ZXJsb2FkRm9y
bShvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwg
aW5zdCkgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUu
c3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAorICAgICAgICBlbHNl
CisgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGNv
bHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sje2NvbHVtbkluZGV4
fV0ua2luZCgpIgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZh
bHNlIH0KKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBm
b3JtIHwKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBvdmVybG9hZC5m
b3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBlbmQKKyAg
ICB9CitlbmQKKword3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91
dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5w
dXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAg
ICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0
cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAg
ICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0
cyAidGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIEluc3Q6
OmZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5wdXRzICJ7Igor
ICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBv
cGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAg
IG91dHAucHV0cyAiZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7IC8vIFRoaXMg
aXMgYmFzaWNhbGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBtb2RlbCBTcGVjaWFs
IGFzIGFuIGltbWVkaWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFyZ3NbMF0uc3BlY2lh
bCgpLT5mb3JFYWNoQXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxiYWNrPihmdW5j
dG9yKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAorICAgICAgICAg
ICAgICAgIHJvbGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCisgICAgICAg
ICAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCisgICAg
ICAgICAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCisg
ICAgICAgICAgICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNl
RGVmIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2FyZy50
eXBlfVApOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0
cyAifSIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPiIK
KyAgICBvdXRwLnB1dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9ybShPcGNvZGUgb3Bj
b2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0
cC5wdXRzICJBcmc6OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyldID0geyBhcmd1bWVu
dHMuLi4gfTsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rl
cy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJj
YXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKHNpemVvZi4u
LihBcmd1bWVudHMpKSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAg
ICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxl
bmd0aH06IgorICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeyB8IGNvbHVtbklu
ZGV4IHwgImtpbmRzWyN7Y29sdW1uSW5kZXh9XSIgfQorICAgICAgICAgICAgICAgIGZpbHRlciA9
IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAg
ICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IChu
b3QgZm9ybS5raW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLnNwZWNpYWwgfSkKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oI3tzcGVjaWFsfSk7IgorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVy
bG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAgICAgICBlbmQKKyAg
ICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQor
ICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0
cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyAiCisgICAgb3V0cC5wdXRz
ICJ9IgorCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBpc1Rlcm1pbmFsKE9wY29kZSBvcGNv
ZGUpIgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFs
dWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29kZS5raW5kID09
IDp0ZXJtaW5hbCBvciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5w
dXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1
dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSIK
KyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9
CisKK3dyaXRlQ1BQKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0
cyAiI2luY2x1ZGUgXCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAi
Ym9vbCBJbnN0Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaElu
c3RPdmVybG9hZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwg
b3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAg
b3V0cC5wdXRzICJpZiAoYXJncy5zaXplKCkgPCAxKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAi
cmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWzBdLmlzU3Bl
Y2lhbCgpKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKCp0
aGlzKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uID0g
ZmFsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMgeworICAg
ICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVybG9hZC5z
aWduYXR1cmVbaW5kZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0gb3ZlcmxvYWQuc2ln
bmF0dXJlW2luZGV4XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZvcm0ua2luZHNbaW5k
ZXhdCisgICAgICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNwZWNpYWwK
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyB0aGF0
IHRoZSBmb3JtIG1hdGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJvbGUsIHNp
bmNlCisgICAgICAgICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBvbmx5IHRo
aW5nIGxlZnQgdG8gdmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUKKyAgICAg
ICAgICAgICAgICAjIHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAuCisgICAg
ICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgorICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZHNNb3JlVmFsaWRh
dGlvbgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFpcyN7b3Bjb2RlLm5hbWV9VmFs
aWQodGhpcykpIgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNl
KTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNl
OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRtaXRz
U3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1
dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAg
ICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06Igor
CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgh
YXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0c1N0
YWNrKCp0aGlzLCBhcmdJbnN0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFN3aXRj
aCBvbiB0aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJnSW5k
ZXgpIHsiCisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRzLm1hcCB7Cisg
ICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2ln
bmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgbnVtQXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRleCB8CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAgICAgICAgICAgICAg
ICMgQ2hlY2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJsb2FkcyBlaXRo
ZXIgZG8sIG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAgICAgICAgIyBhdCB0
aGlzIGluZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9uIGNhc2UuCisgICAg
ICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAg
ICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwg
b3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAgICAgIyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZpcnN0IGJlY2F1
c2UgaWYgd2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAgICAgICAgICAgICAj
IHRvIHNheSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAgICAgICAgICAgIGlm
IG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0LgorCisgICAg
ICAgICAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUub3ZlcmxvYWRzLnNp
emUgIT0gMSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJncy5z
aXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICBvcGNv
ZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVt
IGRvIHdoYXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAg
b3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3Jt
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9
PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVz
ID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0aGluZywganVz
dCBkcm9wIHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9
PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Zlcmxv
YWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3
aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYg
bmVlZE92ZXJsb2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMg
aXMgaG93IHdlIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlzIGFyZ3VtZW50
IHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIHlpZWxkcyBhIHZh
bGlkIGZvcm0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJv
YyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9PSBhcmdJbmRleAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRkciIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnVtWWVzID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLmVhY2gg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJB
ZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAx
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERyb3Ag
ZG93biwgZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgS2VlcCBnb2lu
Zy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIs
IGZpbHRlciwgY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiBuZWVk
T3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVs
dDoiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiI7CisgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0
dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVs
cGVyczo6SnVtcCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNv
bnRleHQmIGNvbnRleHQpIGNvbnN0IgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMg
IlVOVVNFRF9QQVJBTShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShjb250ZXh0
KTsiCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIKKyAgICBtYXRj
aEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29k
ZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAg
ICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdlbmVyYXRlKCp0
aGlzLCBqaXQsIGNvbnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGZvcm0u
YWx0TmFtZQorICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5hbWUKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2RlLm1hc21OYW1l
CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5raW5kID09IDpicmFuY2gK
KyAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgIG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKworICAgICAgICAg
ICAgZm9ybS5raW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwga2luZCwg
aW5kZXggfAorICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAg
Y2FzZSBraW5kLm5hbWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAgICAgICAgICAg
ICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgorICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgd2hlbiAiSW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7
aW5kZXh9XS5hc1RydXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4gIkltbTY0Igor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJ
bW02NCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAgICAg
IHdoZW4gIkluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5k
ZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENv
bmRpdGlvbigpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCisg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dHAucHV0
cyAiKTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1bHQpOyIKKyAg
ICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRwLnB1dHMgIn0i
CisKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2
IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7
IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZh
bGlkKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9
CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0K
IAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4ID09IGRlbGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBjbGFzcyBBbGxSZWdzSXRl
cmFibGUgeworICAgIHB1YmxpYzoKKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkgeyB9CisKKyAgICAgICAgICAgIGV4cGxp
Y2l0IGl0ZXJhdG9yKFJlZyByZWcpCisgICAgICAgICAgICAgICAgOiBtX3JlZyhyZWcpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBj
b25zdCB7IHJldHVybiBtX3JlZzsgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3Ir
KygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9yZWcgPSBtX3JlZy5uZXh0KCk7
CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZyA9PSBvdGhlci5tX3JlZzsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIFJlZyBtX3JlZzsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9CisgICAgfTsKKworICAg
IHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgY29uc3QgeyByZXR1cm4gQWxsUmVnc0l0ZXJh
YmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZhbGlkKCkgeyByZXR1
cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRP
ZmZzZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQyLDcgKzQyLDcgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaQog
ICAgIGlmIChvZmZzZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkKICAgICAgICAgb2Zm
c2V0ID0gLShzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0ZXJzKSAqIHNpemVv
Zih2b2lkKikpOwogCi0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVn
OjpsYXN0KCk7cmVnID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmly
c3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlm
IChyZWdpc3RlclNldC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5kKFJlZ2lzdGVyQXRP
ZmZzZXQocmVnLCBvZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2Yodm9pZCop
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNl
dExpc3QuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlckF0T2Zmc2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMyBAQCBw
dWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldCogZmluZChSZWcpIGNvbnN0OwogICAgIHVuc2ln
bmVkIGluZGV4T2YoUmVnKSBjb25zdDsgLy8gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQu
CiAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChjb25zdCBSZWdp
c3RlckF0T2Zmc2V0JiBlbnRyeSA6IG1fcmVnaXN0ZXJzKQorICAgICAgICAgICAgZnVuY3Rvcihl
bnRyeSk7CisgICAgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0PiBt
X3JlZ2lzdGVyczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNl
dC5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTMgQEAgcHVibGljOgogICAg
IAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0cygpKQorICAg
ICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgIH0KICAgICAKIHBy
aXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJbmRleDogU291
cmNlL1dURi93dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgcHVibGljOiAKICAgICB9OwogICAg
IAogICAgIFNldEJpdHNJdGVyYWJsZSBzZXRCaXRzKCkgY29uc3QgeyByZXR1cm4gU2V0Qml0c0l0
ZXJhYmxlKCp0aGlzKTsgfQotICAgIAorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBi
aXRzSW5Qb2ludGVyKCkKICAgICB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKworbmFt
ZXNwYWNlIFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRs
eSBwYXNzIGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKKy8v
IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxk
IGJlIGRlY2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRo
aW5ncyogKGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKKy8v
CisvLyB2b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAo
aW50IHgsIFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3RlIHRo
YXQgdGhpcyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1i
ZGEgaXMgb25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVuY2Ug
dGhlIG5hbWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+
IGNsYXNzIFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJn
dW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAo
KmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQqIGFy
ZyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmcoYXJn
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgflNjb3BlZExhbWJkYSgpCisgICAgeworICAgIH0K
KworICAgIFJlc3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRz
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPEFyZ3Vt
ZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRU
eXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pIG1faW1wbDsKKyAgICB2
b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5h
bWUgRnVuY3Rvcj4gU2NvcGVkTGFtYmRhRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3Vs
dFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFz
cyBTY29wZWRMYW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5j
dG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+
IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhKGltcGxGdW5jdGlvbiwgdGhpcykKKyAgICAgICAg
LCBtX2Z1bmN0b3IoZnVuY3RvcikKKyAgICB7CisgICAgfQorCisgICAgU2NvcGVkTGFtYmRhRnVu
Y3RvcihGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRMYW1iZGEoaW1wbEZ1bmN0
aW9uLCB0aGlzKQorICAgICAgICAsIG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAg
eworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rpb24o
dm9pZCogYXJndW1lbnQsIEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+
bV9mdW5jdG9yKAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3Vt
ZW50cykuLi4pOworICAgIH0KKworICAgIEZ1bmN0b3IgbV9mdW5jdG9yOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorU2NvcGVkTGFtYmRh
RnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYShjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQoreworICAgIHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlw
ZSwgRnVuY3Rvcj4oZnVuY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gU2NvcGVkTGFtYmRhX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkxMjM5
KQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2
ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFNoYXJlZFRhc2tGdW5jdG9y
KEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3Rv
cikpCisgICAgeworICAgIH0KKwogcHJpdmF0ZToKICAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVu
dFR5cGVzJiYuLi4gYXJndW1lbnRzKSBvdmVycmlkZQogICAgIHsKQEAgLTExMCw2ICsxMTUsMTEg
QEAgUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcgogewogICAgIHJldHVy
biBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4o
ZnVuY3RvcikpOwogfQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBG
dW5jdG9yPgorUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFzayhG
dW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNr
RnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KFdURjo6bW92ZShmdW5jdG9yKSkpOworfQog
CiB9IC8vIG5hbWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263889</attachid>
            <date>2015-10-22 20:43:50 -0700</date>
            <delta_ts>2015-10-22 22:16:58 -0700</delta_ts>
            <desc>lots of progress on B3-&gt;Air lowering</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>422327</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKK0RpcmVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1l
bnRSZWdWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVl
KCkKK3sKK30KKwordm9pZCBBcmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJl
Z1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1l
bnRSZWdWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3Vt
ZW50UmVnVmFsdWVfaAorI2RlZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQXJndW1lbnRSZWdWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUg
PT0gQXJndW1lbnRSZWc7IH0KKyAgICAKKyAgICB+QXJndW1lbnRSZWdWYWx1ZSgpOworCisgICAg
UmVnIGFyZ3VtZW50UmVnKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7IH0KKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQXJndW1lbnRSZWdWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShp
bmRleCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRlcigpIDogRG91YmxlLCBvcmln
aW4pCisgICAgICAgICwgbV9yZWcocmVnKQorICAgIHsKKyAgICB9CisKKyAgICBSZWcgbV9yZWc7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQXJndW1lbnRS
ZWdWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2su
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1
bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisg
ICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Js
b2NrKCkKK3sKK30KKwordm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQorewor
ICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YWRkUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OmFkZFByZWRlY2Vzc29yKHRo
aXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2sp
OworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMs
IGZyb20sIHRvKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lk
IEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4i
KTsKKyAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBkZWVwRHVtcCh2YWx1ZSksICJcbiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9jaworI2RlZmluZSBCM0Jhc2ljQmxv
Y2sKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNTdWNjZXNz
b3JDb2xsZWN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBl
ZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0
Y2hlcyBDb250cm9sVmFsdWU6OlN1Y2Nlc3Nvckxpc3QKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVMaXN0OjppdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6
Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgVmFsdWVMaXN0
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7
IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMu
bGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsg
fQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3
KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3Jz
KCkgY29uc3Q7CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOwor
ICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdDsKKworICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Js
b2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1Y2Nlc3NvckNvbGxl
Y3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCk7CisgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0
PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vz
c29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vz
c29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5k
ZXhdOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3By
ZWRlY2Vzc29yc1tpbmRleF07IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9j
ayopOworICAgIGJvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wg
cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZpYSBQcm9jZWR1cmUuCisgICAgQmFzaWNCbG9j
ayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2lu
ZGV4OworICAgIFZhbHVlTGlzdCBtX3ZhbHVlczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVk
ZWNlc3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2lj
QmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayog
YmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9j
aykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJh
c2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFz
aWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2Nr
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGlu
ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKworI2luY2x1ZGUgIkIzQmFz
aWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNQcm9j
ZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBl
KiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZh
bHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit1bnNpZ25lZCBCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPm51bVN1Y2Nlc3NvcnMo
KTsKK30KKworRnJlcXVlbnRlZEJsb2NrIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1
Y2Nlc3NvcihpbmRleCk7Cit9CisKK0ZyZXF1ZW50ZWRCbG9jayYgQmFzaWNCbG9jazo6c3VjY2Vz
c29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1
ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29y
TGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3Qo
KS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK0Jhc2ljQmxvY2sqIEJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJl
dHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7Cit9CisKK0Jhc2ljQmxvY2sqJiBCYXNpY0Js
b2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gc3VjY2Vz
c29yKGluZGV4KS5ibG9jaygpOworfQorCitTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ss
IFN1Y2Nlc3Nvckxpc3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpCit7CisgICAgcmV0
dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4oc3VjY2Vz
c29ycygpKTsKK30KKworU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25z
dCBTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAorewor
ICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1
Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIzQmFzaWNCbG9j
a1V0aWxzX2gKKworI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhO
b2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCBh
ZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNzb3Ip
Cit7CisgICAgQmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2st
PnByZWRlY2Vzc29ycygpOworCisgICAgaWYgKHByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNl
c3NvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHByZWRlY2Vzc29ycy5hcHBlbmQo
cHJlZGVjZXNzb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
YXNpY0Jsb2NrPgorYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAgQmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYg
cHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRl
Y2Vzc29yc1tpXSA9PSBwcmVkZWNlc3NvcikgeworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2kt
LV0gPSBwcmVkZWNlc3NvcnMubGFzdCgpOworICAgICAgICAgICAgcHJlZGVjZXNzb3JzLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgICAgIC8vIE91dCBvZiBjYXV0aW9uLCB3ZSBrZWVwIGdvaW5nIGV2
ZW4gdGhvdWdoIHRoZSBwcmVkZWNlc3NvciBsaXN0IGNhbm5vdCBoYXZlCisgICAgICAgICAgICAv
LyBkdXBsaWNhdGVzLgorICAgICAgICAgICAgQVNTRVJUKCFwcmVkZWNlc3NvcnMuY29udGFpbnMo
cHJlZGVjZXNzb3IpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4K
K2Jvb2wgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBCYXNpY0Jsb2NrOjpBZGphY2VuY3lMaXN0JiBw
cmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVj
ZXNzb3JzW2ldID09IGZyb20pIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpXSA9IHRvOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCisvLyBUaGlzIHJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCByZW1vdmVzIGJs
b2NrcyB0aGF0IGFyZW4ndCByZWFjaGFibGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2Nr
Pgordm9pZCByZXNldFJlYWNoYWJpbGl0eShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxv
Y2s+PiYgYmxvY2tzKQoreworICAgIC8vIENsZWFyIGFsbCBwcmVkZWNlc3NvciBsaXN0cyBmaXJz
dC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKQorICAgICAgICBibG9jay0+
cHJlZGVjZXNzb3JzKCkucmVzaXplKDApOworCisgICAgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNC
b2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0Lm5vZGUo
YmxvY2tzWzBdKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3Ao
KSkgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNz
b3JCbG9ja3MoKSkgeworICAgICAgICAgICAgaWYgKHdvcmtsaXN0LmFkZChzdWNjZXNzb3IpKQor
ICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzKCkuYXBwZW5kKGJsb2NrKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBibG9ja3Mu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJsb2Nrc1tpXS5wcmVkZWNlc3NvcnMuaXNFbXB0
eSgpKQorICAgICAgICAgICAgYmxvY2tzW2ldID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrVXRpbHNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jsb2NrV29ya2xpc3RfaAorI2RlZmluZSBCM0Js
b2NrV29ya2xpc3RfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJ
bmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3N0cnVj
dCBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJ
bmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tXb3JrbGlzdDsKKworLy8gV2hlbiB5b3Ugc2F5IEJs
b2NrV2l0aDxpbnQ+IHlvdSBzaG91bGQgcmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNp
Y0Jsb2NrKiwgVD47CisKKy8vIEV4dGVuZGVkIGJsb2NrIHdvcmtsaXN0IGlzIHVzZWZ1bCBmb3Ig
ZW5xdWV1ZWluZyBzb21lIG1ldGEtZGF0YSBhbG9uZyB3aXRoIHRoZSBibG9jay4gSXQgYWxzbwor
Ly8gcGVybWl0cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlmIHRoZSBibG9jayBo
YXMgYWxyZWFkeSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgorLy8gdGhpbmdzIGxpa2UgYnVp
bGRpbmcgYSBzcGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBhdXhpbGlhcnkgcGF5
bG9hZCkgd291bGQgYmUgdGhlCisvLyBzdWNjZXNzb3IgaW5kZXguCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmts
aXN0PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47CisKK3R5cGVkZWYgR3Jh
cGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CisKK3R5cGVkZWYgR3JhcGhOb2RlV2l0aE9yZGVyPEJh
c2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKKwordHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVX
b3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRlckJsb2Nr
V29ya2xpc3Q7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCbG9j
a1dvcmtsaXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVj
aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1Nw
ZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisKK3Vuc2lnbmVk
IG51bUIzQXJncyhJbnN0JiBpbnN0KQoreworICAgIHN3aXRjaCAoaW5zdC5vcmlnaW4tPm9wY29k
ZSgpKSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2Ug
Q2hlY2tNdWw6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIHJl
dHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK0NoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5z
aWduZWQgbnVtQXJncykKKyAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQorICAgICwgbV9udW1D
aGVja0FyZ3MobnVtQXJncykKK3sKK30KKworQ2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKCkK
K3sKK30KKworSW5zdCBDaGVja1NwZWNpYWw6OmhpZGRlbkJyYW5jaChjb25zdCBJbnN0JiBpbnN0
KSBjb25zdAoreworICAgIEluc3QgaGlkZGVuQnJhbmNoKG1fY2hlY2tPcGNvZGUsIGluc3Qub3Jp
Z2luKTsKKyAgICBoaWRkZW5CcmFuY2guYXJncy5yZXNpemUobV9udW1DaGVja0FyZ3MpOworICAg
IGZvciAodW5zaWduZWQgaSA9IG1fbnVtQ2hlY2tBcmdzOyBpLS07KQorICAgICAgICBoaWRkZW5C
cmFuY2guYXJnc1tpXSA9IGluc3QuYXJnc1tpICsgMV07CisgICAgcmV0dXJuIGhpZGRlbkJyYW5j
aDsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3Qg
U2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGhp
ZGRlbkJyYW5jaChpbnN0KS5mb3JFYWNoQXJnKGNhbGxiYWNrKTsKKyAgICBmb3JFYWNoQXJnSW1w
bChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgY2FsbGJhY2spOwor
fQorCitib29sIENoZWNrU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIHJldHVy
biBoaWRkZW5CcmFuY2goaW5zdCkuaXNWYWxpZCgpCisgICAgICAgICYmIGlzVmFsaWRJbXBsKG51
bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0KTsKK30KKworYm9vbCBDaGVj
a1NwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQorewor
ICAgIGlmIChhcmdJbmRleCA+PSAxICYmIGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hlY2tBcmdzKQor
ICAgICAgICByZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmFkbWl0c1N0YWNrKGFyZ0luZGV4IC0g
MSk7CisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hl
Y2tBcmdzICsgMSwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hl
Y2tTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJh
dGlvbkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWwgPSBo
aWRkZW5CcmFuY2goaW5zdCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICBBU1NFUlQoZmFp
bC5pc1NldCgpKTsKKworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgVmVj
dG9yPFZhbHVlUmVwPiByZXBzOworICAgIGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkp
KSB7CisgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisgICAgICAgICAg
ICByZXBzLmFwcGVuZChWYWx1ZVJlcCgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPm9wY29k
ZSgpID09IENoZWNrU3ViICYmIHZhbHVlLT5hcmdzWzBdLT5pc0ludCgwKSkKKyAgICAgICAgICAg
IHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNvZGUsIGluc3QuYXJnc1syXSkp
OworICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoY29udGV4dC5jb2RlLCBpbnN0LmFyZ3Nb
MV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENo
ZWNrKTsKKyAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEpKTsKKyAgICB9
CisKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBtX251bUNoZWNrQXJncyArIDEsIGluc3Qs
IHJlcHMpOworICAgIAorICAgIGNvbnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgY3Jl
YXRlU2hhcmVkVGFzazxHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCisgICAg
ICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4
dCkgeworICAgICAgICAgICAgICAgIGZhaWwubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgICAgICAgICAgICAgU3Rh
Y2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICAgIHBhcmFtcy52
YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFw
OworICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICAgICAgICAgICAgICBw
YXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICAg
ICAgICAgICAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisgICAg
ICAgICAgICB9KSk7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2NoZWNrT3Bjb2RlLCAiKCIsIG1fbnVt
Q2hlY2tBcmdzLCAiKSIpOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCMzo6Q2hlY2tWYWx1ZSBs
b3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0aCAiLCBtX251bUNoZWNrQXJncywgIiBh
cmdzLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDaGVja1NwZWNpYWxfaAorI2RlZmluZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNp
bmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ugd2FudCB0byBsb3dlciBDaGVj
ayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVuIHdlIHdhbnQgdG8gcm91dGUgdGhh
dCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2RlIGluc3RlYWQgb2YgZG9pbmcgYW55
dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNrU3BlY2lhbCB3aWxsIHJlbWVtYmVy
CisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2VsZWN0ZWQgYWxvbmcgd2l0aCB0aGUg
bnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdhbnQuIEl0CisvLyB3aWxsIGNyZWF0
ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUgYXBwcm9wcmlhdGUgYXJncyBmcm9t
IHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNhbGwgYW55IG9mIHRoZSBjYWxsYmFj
a3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011
bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFyZSB0aGUgcmV2ZXJzZQorLy8gb2Yg
dGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQzMiBiLCBhKS4gRXhjZXB0OgorLy8g
LSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBCcmFuY2hOZWczMiB4LgorLy8gLSBD
aGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwzMiBiLCBhIGJ1dCB3ZSBwYXNzIEFu
eSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJsaWMgU3RhY2tt
YXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2Rl
LCB1bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKKyAgICAvLyBDb25z
dHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJhbmNoIHRoYXQg
dGhpcyB3aWxsIHVzZS4KKyAgICBJbnN0IGhpZGRlbkJyYW5jaChjb25zdCBJbnN0JikgY29uc3Q7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2Nv
cGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJv
b2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFp
cjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8vIE5PVEU6IHRo
ZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhl
biByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFw
LiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKElu
c3QmLCBDQ2FsbEhlbGVwcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworCisgICAg
dm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVl
cER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
QWlyOjpPcGNvZGUgbV9jaGVja09wY29kZTsKKyAgICB1bnNpZ25lZCBtX251bUNoZWNrQXJnczsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1NwZWNp
YWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
Q2hlY2tWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUoKQoreworfQorCit2b2lkIENoZWNrVmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0
YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzQ2hlY2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgQ2hlY2tWYWx1ZSA6IHB1YmxpYyBDaGVjayB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBD
aGVja1N1YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgY2FzZSBDaGVjazoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfkNoZWNrVmFsdWUoKTsKKworICAg
IFN0YWNrbWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQ
cm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIs
IGFuZCBDaGVja011bC4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICA6
IFZhbHVlKGluZGV4LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luLCBsZWZ0LCByaWdodCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludCh0eXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKGxl
ZnQtPnR5cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBD
aGVja0FkZCB8fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2RlID09IENoZWNrTXVsKTsKKyAg
ICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KKyAgICBDaGVja1ZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGlj
YXRlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGlj
YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY2RlID09IENoZWNrKTsKKyAgICB9Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaW5j
bHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRlICJPcHRp
b25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitib29sIHNob3VsZER1
bXBJUigpCit7CisgICAgcmV0dXJuIEZUTDo6dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpIHx8
IEZUTDo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2Uo
KTsKK30KKworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9w
dGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJ
UigpCit7CisgICAgcmV0dXJuIERGRzo6dmFsaWRhdGlvbkVuYWJsZWQoKSB8fCBzaG91bGRWYWxp
ZGF0ZUlSQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhh
c2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKTsK
K30KKworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlv
bnM6OnZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNDb21tb25faAorI2RlZmluZSBCM0NvbW1vbl9oCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91
bGREdW1wSVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNo
b3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFz
ZSgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29tbW9uX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0NvbW11dGF0aXZpdHkuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkpCit7
CisgICAgc3dpdGNoIChjb21tdXRhdGl2aXR5KSB7CisgICAgY2FzZSBDb21tdXRhdGl2ZToKKyAg
ICAgICAgb3V0LnByaW50KCJDb21tdXRhdGl2ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBOb3RDb21tdXRhdGl2ZToKKyAgICAgICAgb3V0LnByaW50KCJOb3RDb21tdXRhdGl2ZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbW11dGF0aXZpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tdXRhdGl2aXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQ29tbXV0YXRpdml0eV9oCisjZGVmaW5lIEIzQ29tbXV0YXRpdml0eV9oCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIENvbW11dGF0aXZpdHkgeworICAgIENvbW11
dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6Q29tbXV0YXRpdml0eSk7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNDb21tdXRhdGl2aXR5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVy
bnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29u
TWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisjIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIENvbXBhcmlzb25NYXRjaGVy
CisKK1Rlc3RMb2FkTm90WmVybzEgPSBBbmQoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitUZXN0TG9h
ZE5vdFplcm8yID0gQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpCitUZXN0Tm90WmVybyA9IEFuZChs
ZWZ0LCByaWdodCkKKworVGVzdExvYWRaZXJvMSA9IEVxdWFsKEFuZChMb2FkKGFkZHJlc3MpLCBy
aWdodCksICQwKQorVGVzdExvYWRaZXJvMiA9IEVxdWFsKEFuZChsZWZ0LCBMb2FkKGFkZHJlc3Mp
KSwgJDApCitUZXN0WmVybyA9IEVxdWFsKEFuZChsZWZ0LCByaWdodCksICQwKQorCitMb2FkRXF1
YWwxID0gRXF1YWwoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitMb2FkRXF1YWwyID0gRXF1YWwobGVm
dCwgTG9hZChhZGRyZXNzKSkKK05vdCA9IEVxdWFsKHZhbHVlLCAkMCkKK0VxdWFsID0gRXF1YWwo
bGVmdCwgcmlnaHQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Qz
MlZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK0NvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29u
c3QzMlZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzQ29uc3QzMlZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDMyVmFsdWVf
aAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQ29uc3QzMlZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25z
dDMyOyB9CisgICAgCisgICAgfkNvbnN0MzJWYWx1ZSgpOworICAgIAorICAgIGludDMyX3QgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29u
c3QzMiwgSW50MzIsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAg
ICB9CisgICAgCisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBCM0NvbnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0NjRWYWx1ZTo6fkNvbnN0NjRW
YWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2
NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3Q2NFZhbHVlX2gK
KyNkZWZpbmUgQjNDb25zdDY0VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3Q2NFZhbHVlIDogcHVibGlj
IFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUp
IHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdDY0OyB9CisgICAgCisgICAgfkNvbnN0NjRWYWx1ZSgp
OworICAgIAorICAgIGludDY0X3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0
NjRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAg
ICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAgICAgLCBt
X3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50NjRfdCBtX3ZhbHVlOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0NvbnN0NjRWYWx1
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91Ymxl
VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3REb3VibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7
Cit9CisKK3ZvaWQgQ29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
Q29uc3REb3VibGVWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBDb25zdERvdWJsZVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJs
ZTsgfQorICAgIAorICAgIH5Db25zdERvdWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcmlnaW4gb3JpZ2luLCBkb3VibGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb250cm9s
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnRyb2xWYWx1
ZTo6fkNvbnRyb2xWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29udHJvbFZhbHVlOjpkdW1wTWV0YShQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9zdWNjZXNzb3JzKQorICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHBvaW50ZXJEdW1wKGJsb2NrKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb250cm9sVmFsdWVfaAorI2RlZmluZSBC
M0NvbnRyb2xWYWx1ZV9oCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IEJhc2ljQmxvY2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJy
YW5jaDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBU
aGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xW
YWx1ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3d0aWNoVmFsdWUtPmFzPENvbnRyb2xW
YWx1ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlz
dDsKKworICAgIH5Db250cm9sVmFsdWUoKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMo
KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgRnJlcXVlbnRlZEJs
b2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3Jz
W2ldOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fc3VjY2Vzc29yc1tpXTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nl
c3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFVz
ZSB0aGlzIGZvciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBW
YWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKKyAgICB7Cisg
ICAgfQorCisgICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVsYXRlIHRoaXMuCisgICAgU3VjY2Vz
c29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2Nl
ZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgorICAgIENvbnRyb2xWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1
ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAgICBBU1NFUlQob3Bj
b2RlID09IE9vcHMpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBSZXR1cm4uCisgICAg
Q29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2lu
LCBWYWx1ZSogcmVzdWx0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9y
aWdpbiwgcmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBSZXR1cm4pOwor
ICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENvbnRyb2xWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayogdGFy
Z2V0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7
CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5h
cHBlbmQodGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNoLgorICAg
IENvbnRyb2xWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIEJhc2ljQmxvY2sqIHllcywg
QmFzaWNCbG9jayogbm8pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3Jp
Z2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7
CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3Jz
LmFwcGVuZChubyk7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM0NvbnRyb2xWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZy
ZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSkKK3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgeworICAg
IGNhc2UgRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3JtYWwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6CisgICAg
ICAgIG91dC5wcmludCgiUmFyZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0ZyZXF1ZW5jeUNsYXNzX2gKKyNkZWZpbmUgQjNG
cmVxdWVuY3lDbGFzc19oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IGNsYXNzIEZyZXF1ZW5jeUNsYXNzIDogdWludDhfdCB7CisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBh
bnkgaHlwb3RoZXNpcyBhYm91dCB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY29udHJvbCBmbG93IGNv
bnN0cnVjdC4gVGhpcyBpcworICAgIC8vIHRoZSBjb21tb24gY2FzZS4gV2UgY2FuIHN0aWxsIHVz
ZSBiYXNpYyBibG9jayBmcmVxdWVuY3kgaW4gdGhpcyBjYXNlLgorICAgIE5vcm1hbCwKKworICAg
IC8vIFdlIGV4cGVjdCB0aGF0IHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVjdCB3aWxsIGJlIHJl
YWNoZWQgc3VwZXIgcmFyZWx5LiBJdCdzIHZhbGlkIHRvCisgICAgLy8gcGVyZm9ybSBvcHRpbWl6
YXRpb25zIHRoYXQgcHVuaXNoIFJhcmUgY29kZS4gTm90ZSB0aGF0IHRoZXJlIHdpbGwgYmUgc2l0
dWF0aW9ucyB3aGVyZSB5b3UKKyAgICAvLyBoYXZlIHRvIHNvbWVob3cgY29uc3RydWN0IGEgbmV3
IGZyZXF1ZW5jeSBjbGFzcyBmcm9tIGEgbWVyZ2luZyBvZiBtdWx0aXBsZSBjbGFzc2VzLiBXaGVu
CisgICAgLy8gdGhpcyBoYXBwZW5zLCBuZXZlciBjaG9vc2UgUmFyZTsgYWx3YXlzIGdvIHdpdGgg
Tm9ybWFsLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlCisgICAgLy8gcmVhbGx5IGRvIHB1
bmlzaCBSYXJlIGNvZGUgdmVyeSBiYWRseS4KKyAgICBSYXJlCit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpGcmVxdWVuY3lDbGFzcyk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNGcmVxdWVuY3lDbGFzc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNk
ZWZpbmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisjaW5jbHVkZSAiQjNHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNp
Y0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJl
cXVlbnRlZEJsb2NrOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIz
RnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKworI2luY2x1ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEEgZnJlcXVlbnRlZCBibG9j
ayBpcyBhIHR1cGxlIG9mIEJhc2ljQmxvY2sqIGFuZCBGcmVxdWVuY3lDbGFzcy4gSXQncyB1c3Vh
bGx5IHVzZWQgYXMgYQorLy8gc3VjY2Vzc29yIGVkZ2UuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
c2ljQmxvY2s+CitjbGFzcyBHZW5lcmljRnJlcXVlbnRlZEJsb2NrIHsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG51bGxwdHIsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSA9IEZyZXF1ZW5jeUNsYXNzOjpO
b3JtYWwpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX2ZyZXF1ZW5jeShm
cmVxdWVuY3kpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGcmVx
dWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmxvY2sg
PT0gb3RoZXIubV9ibG9jaworICAgICAgICAgICAgJiYgbV9mcmVxdWVuY3kgPT0gb3RoZXIubV9m
cmVxdWVuY3k7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEZyZXF1ZW50ZWRC
bG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gKnRoaXMgIT0gRnJlcXVlbnRlZEJsb2NrKCk7CisgICAgfQorCisgICAg
QmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgQmFzaWNC
bG9jayomIGJsb2NrKCkgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIEZyZXF1ZW5jeUNsYXNzIGZy
ZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGZyZXF1ZW5jeSgpICE9IEZy
ZXF1ZW5jeUNsYXNzOjpOb3JtYWwpCisgICAgICAgICAgICBvdXQucHJpbnQoZnJlcXVlbmN5KCks
ICI6Iik7CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChtX2Jsb2NrKSk7CisgICAgfQor
Citwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgRnJlcXVlbmN5Q2xhc3Mg
bV9mcmVxdWVuY3k7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5kZXhNYXBfaAor
I2RlZmluZSBCM0luZGV4TWFwX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
Ky8vIFRoaXMgaXMgYSBtYXAgZm9yIGtleXMgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3Vw
ZXIgZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9y
IFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIG1hcHMsIHNpbmNl
IFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5CisvLyBzcGFyc2UgaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEg
bG90IG9mIFZhbHVlcy4KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZT4K
K2NsYXNzIEluZGV4TWFwIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbmRleE1hcChzaXplX3Qg
c2l6ZSA9IDApCisgICAgeworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7CisgICAgfQor
CisgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5y
ZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAgVmFsdWUmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsKKyAgICB9CisgICAgCisg
ICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmVjdG9yW2luZGV4XTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IFZlY3RvcjxWYWx1ZT4gbV92ZWN0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2lu
Y2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0
aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNp
Y0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3Qg
Y3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5
IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8g
SWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Js
b2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIElu
ZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUt
PmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0
aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29s
bGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBD
b2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0
ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24p
CisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBt
X2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRl
cmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24s
IG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlv
blR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAg
IH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQu
dmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86Cisg
ICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZh
bHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQor
CisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMo
KS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgs
IGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDM4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWly
LmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisK
K25hbWVzcGFjZSB7CisKK2NsYXNzIExvd2VyVG9BaXIgeworcHVibGljOgorICAgIExvd2VyVG9B
aXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCisgICAgICAgIDogc2VsZWN0b3Io
KnRoaXMpCisgICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBjb2RlKGNv
ZGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgfQorCisgICAg
VG1wIHRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91
bGQgcGluIHRoZSB2YWx1ZS4gV2UgY291bGQgZXZlbiBoYXZlIFRtcCBzZWxlY3Rpb24gYmUgdGhl
IHdheSB3ZSBzYXkKKyAgICAgICAgLy8gdGhhdCBzb21ldGhpbmcgaXMgcGlubmVkLgorICAgIH0K
KworICAgIC8vIFRoaXMgZ2l2ZXMgeW91IHRoZSBhZGRyZXNzIG9mIHRoZSBnaXZlbiBMb2FkIG9y
IFN0b3JlLiBJZiBpdCdzIG5vdCBhIExvYWQgb3IgU3RvcmUsIHRoZW4KKyAgICAvLyBpdCByZXR1
cm5zIEFyZygpLgorICAgIEFyZyBhZGRyKFZhbHVlKiBtZW1vcnlWYWx1ZSkKKyAgICB7CisgICAg
ICAgIE1lbW9yeVZhbHVlKiB2YWx1ZSA9IG1lbW9yeVZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsK
KyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKworICAgICAg
ICBydW5BZGRyZXNzTWF0Y2hlcih2YWx1ZS0+Y2hpbGRyZW4ubGFzdCgpLCBhZGRyZXNzU2VsZWN0
b3IpOworICAgICAgICByZXR1cm4gYWRkcmVzc1NlbGVjdG9yLnNlbGVjdGVkQWRkcmVzcy53aXRo
T2Zmc2V0KHZhbHVlLT5vZmZzZXQoKSk7CisgICAgfQorCisgICAgQXJnIGxvYWRBZGRyKFZhbHVl
KiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICBpZiAobG9hZFZhbHVlLT5vcGNvZGUoKSA9PSBM
b2FkKQorICAgICAgICAgICAgcmV0dXJuIGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW0oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6SW1tKHZh
bHVlLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgfQorCisgICAgQXJn
IGltbU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChBcmcgcmVzdWx0ID0g
aW1tKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB0
bXAodmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPE9wY29kZSBvcGNvZGUsIENvbW11dGF0
aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAgIHZvaWQgYXBwZW5kQmlu
T3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQg
PSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRocmVlLW9wZXJhbmQg
Zm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIsIGMKKyAgICAgICAgLy8gbWVhbiBz
b21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGMgPSBhIE9wIGIKKworICAgICAgICBpZiAo
aXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAg
ICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2Rl
LCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9wZXJhdGlvbiBjb3VsZCBoYXZlIGFuIGltbWVk
aWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAgIGlmIChpbW0obGVmdCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKGxlZnQpLCB0bXAocmlnaHQpLCByZXN1bHQp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGltbShyaWdodCkgJiYgaXNWYWxpZEZv
cm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgeworICAgICAgICAgICAg
YXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0ocmlnaHQpLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHdvLW9wZXJhbmQgZm9ybXMgbGlr
ZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlr
ZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEKKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50
LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGhhdmUgYSBmdXNlZCBs
b2FkIG92ZXIgdGhyZWUKKyAgICAgICAgLy8gb3BlcmFuZCBmb3Jtcy4KKyAgICAgICAgCisgICAg
ICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAgICAgICAgICBBcmcg
bGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShv
cGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kKE1vdmUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9w
Y29kZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQXJnIHJpZ2h0QWRkciA9IGxvYWRBZGRyKHJp
Z2h0KTsKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgcmlnaHRBZGRyLmtpbmQoKSwg
QXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQp
OworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29k
ZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChv
cGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3VsdCk7
CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2ZSA9IE5v
dENvbW11dGF0aXZlPgorICAgIGJvb2wgdHJ5QXBwZW5kU3RvcmVCaW5PcChWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQXJnIHN0b3JlQWRkciA9IGFkZHIoY3VycmVu
dFZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CisKKyAgICAgICAgVmFsdWUqIG90
aGVyVmFsdWU7CisgICAgICAgIGlmIChhZGRyKGxlZnQpID09IHN0b3JlQWRkcikKKyAgICAgICAg
ICAgIG90aGVyVmFsdWUgPSByaWdodDsKKyAgICAgICAgZWxzZSBpZiAoY29tbXV0YXRpdml0eSA9
PSBDb21tdXRhdGl2ZSAmJiBhZGRyKHJpZ2h0KSA9PSBzdG9yZUFkZHIpCisgICAgICAgICAgICBv
dGhlclZhbHVlID0gbGVmdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgc3RvcmVBZGRy
LmtpbmQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXBwZW5kKG9w
Y29kZSwgdG1wKG90aGVyVmFsdWUpLCBzdG9yZUFkZHIpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBh
cHBlbmQoT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IGFwcGVuZCwgc2luY2Ugd2UncmUgcHJv
Y2Vzc2luZyBibG9ja3MgaW4gcmV2ZXJzZSBvcmRlci4KKyAgICAgICAgbG93QmxvY2stPmFwcGVu
ZChvcGNvZGUsIGN1cnJlbnRWYWx1ZSwgYXJndW1lbnRzLi4uKTsKKyAgICB9CisgICAgCisgICAg
SW5kZXhTZXQ8VmFsdWU+IGxvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2
ZSBubyBUbXAgaW4gQWlyLgorICAgIEluZGV4U2V0PFZhbHVlPiBwaW5uZWQ7IC8vIFRoZXNlIGFy
ZSB2YWx1ZXMgdGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLgorICAgIEluZGV4TWFwPFZhbHVl
LCBUbXA+IHZhbHVlVG9UbXA7CisKKyAgICBWYWx1ZSogY3VycmVudFZhbHVlOworCisgICAgY2xh
c3MgQWRkcmVzc1NlbGVjdG9yIHsKKyAgICAgICAgQWRkcmVzc1NlbGVjdG9yKExvd2VyVG9BaXIm
IGxvd2VyKQorICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBhY2NlcHRzUm9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gV2UgYmV0dGVyIG5vdCBoYXZlIGxvY2tlZCB0aGlzIHlldCEKKyAgICAgICAg
ICAgIEFTU0VSVCghbG93ZXIubG9ja2VkLmNvbnRhaW5zKHJvb3QpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290TGF0ZShWYWx1
ZSopIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAg
ICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoQXJndW1lbnRzLi4uKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKEFyZ3VtZW50
cy4uLikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
ICAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2
YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJu
IGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBh
Y2NlcHRPcGVyYW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3Vt
ZW50cy4uLikgeyB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDEoVmFsdWUqIGluZGV4LCBW
YWx1ZSogbG9nU2NhbGUsIFZhbHVlKiBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
bG9nU2NhbGUtPmFzSW50KCkgPCAwIHx8IGxvZ1NjYWxlLT5hc0ludCgpID4gMykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6
OmluZGV4KAorICAgICAgICAgICAgICAgIGxvd2VyLnRtcChpbmRleCksIGxvd2VyLnRtcChpbmRl
eCksIDEgPDwgbG9nU2NhbGUtPmFzSW50KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MihWYWx1ZSogYmFzZSwgVmFsdWUq
IGluZGV4LCB2YWx1ZSogbG9nU2NhbGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0
cnlBZGRTaGlmdDEoaW5kZXgsIGxvZ1NjYWxlLCBiYXNlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGlmIChyaWdodC0+aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMg
cHJvZHVjdGlvbiBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkgc2luY2Ugd2UgZXhwZWN0CisgICAg
ICAgICAgICAgICAgLy8gTG9hZChBZGQoQHgsIEBjb25zdDEpLCBvZmZzZXQgPSBjb25zdDIpIHRv
IGhhdmUgYWxyZWFkeSBiZWVuIHN0cmVuZ3RoLXJlZHVjZWQKKyAgICAgICAgICAgICAgICAvLyB0
byBMb2FkKEB4LCBvZmZzZXQgPSBjb25zdDEgKyBjb25zdDIpLgorICAgICAgICAgICAgICAgIHNl
bGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAobGVmdCksIHJpZ2h0LT5hc0ludDMy
KCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KGxvd2VyLnRtcChsZWZ0KSwgbG93
ZXIudG1wKHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgdHJ5RGlyZWN0KFZhbHVlKiBhZGRyZXNzKQorICAgICAgICB7CisgICAgICAg
ICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIoYWRkcmVzcyk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93ZXJUb0FpciYgbG93
ZXI7CisgICAgICAgIEFyZyBzZWxlY3RlZEFkZHJlc3M7CisgICAgfTsKKyAgICBBZGRyZXNzU2Vs
ZWN0b3IgYWRkcmVzc1NlbGVjdG9yOworICAgIAorICAgIGNsYXNzIExvd2VyaW5nU2VsZWN0b3Ig
eworICAgIHB1YmxpYzoKKyAgICAgICAgTG93ZXJpbmdTZWxlY3RvcihMb3dlclRvQWlyJiBsb3dl
cikKKyAgICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoIWxvd2VyLmxvY2tlZC5jb250YWlucyhyb290KSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWNjZXB0Um9vdExh
dGUoVmFsdWUqKSB7IH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG93ZXIucGlu
bmVkLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0K
KyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAg
IAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQg
YWNjZXB0SW50ZXJuYWxzTGF0ZShWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd2VyLmxvY2tlZC5hZGQodmFsdWUpOworICAgICAg
ICAgICAgYWNjZXB0SW50ZXJuYWxzTGF0ZShhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAg
ICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZSgpIHsgfQorICAgICAgICAKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRz
KFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50
cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygpIHsgcmV0dXJu
IHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
ICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAgICAgICAg
Ym9vbCB0cnlMb2FkKFZhbHVlKiBhZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dl
ci5hcHBlbmQoTW92ZSwgYWRkcihhZGRyZXNzKSwgbG93ZXIudG1wKGxvd2VyLmN1cnJlbnRWYWx1
ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAg
ICAgICBsb3dlci5hcHBlbmRCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgdHJ5U3RvcmVBZGRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIFZhbHVlKikKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvd2VyLnRyeUFwcGVuZFN0b3Jl
QmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHRyeVN0b3JlQW5kTG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBW
YWx1ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiBsb3dlci50cnlB
cHBlbmRTdG9yZUJpbk9wPEFuZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUg
dHlwZXMhCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlTdG9yZShWYWx1ZSogdmFsdWUsIFZhbHVlKikKKyAg
ICAgICAgeworICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUsIGxvd2VyLnRtcCh2YWx1ZSks
IGxvd2VyLmFkZHIobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5UmV0dXJuKFZhbHVlKiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEludDMyOgorICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICBs
b3dlci5hcHBlbmQoTW92ZSwgaW1tT3JUbXAodmFsdWUpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAg
ICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZURvdWJsZSwgbG93ZXIudG1wKHZhbHVlKSwg
R1BSSU5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGxvd2VyLmFwcGVuZChSZXQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxvd2VyOworICAgIH07CisgICAg
TG93ZXJpbmdTZWxlY3RvciBsb3dlcmluZ1NlbGVjdG9yOworICAgIAorICAgIFByb2NlZHVyZSYg
cHJvY2VkdXJlOworICAgIENvZGUmIGNvZGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKKwordm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQor
eworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jZWR1cmUsICJsb3dlclRvQWlyIik7Cisg
ICAgTG93ZXJUb0FpciBsb3dlclRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgbG93ZXJUb0Fp
ci5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzTG93ZXJUb0Fpcl9oCisjZGVmaW5lIEIzTG93ZXJUb0Fpcl9oCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CituYW1lc3BhY2UgQWlyIHsg
Y2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGxvd2VycyB0aGUgY3VycmVudCBCMyBwcm9jZWR1cmUg
dG8gYW4gQWlyIGNvZGUuCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0
dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdN
YXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJp
bmdNYXRjaGVyCisKKyMgVGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBz
dGFydGluZyBhdCB0aGUgdG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0
ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRv
IHRoaXMgbWF0Y2hlciBpcyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5j
ZSEKKworTG9hZCA9IExvYWQoYWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitT
dG9yZUFkZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmVBbmRM
b2FkID0gU3RvcmUoQWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFs
dWUsIGFkZHJlc3MpCisKK1JldHVybiA9IFJldHVybih2YWx1ZSkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVl
KCkKK3sKK30KKwordm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5wcmludCgib2Zmc2V0ID0g
IiwgbV9vZmZzZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzTWVtb3J5VmFsdWVfaAorI2RlZmluZSBCM01lbW9yeVZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIE1lbW9yeVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAg
IGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRG
bG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAg
Y2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNhc2UgU3Rv
cmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1vcnlWYWx1ZSgp
OworCisgICAgaW50cHRyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNl
IHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRo
ZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0
dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLAor
ICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisg
ICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gRG91YmxlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
U3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBBU1NFUlQo
dHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVy
ZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludHB0
cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgb3Bjb2RlID09
IExvYWRGbG9hdCA/IERvdWJsZSA6IEludDMyLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwg
bV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoK
KyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAg
ICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVz
LgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29k
ZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lk
LCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAg
ICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0
b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0
b3JlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gQjNNZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTm9wOgorICAgICAgICBvdXQucHJpbnQoIk5v
cCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJZGVudGl0eToKKyAgICAgICAgb3V0LnBy
aW50KCJJZGVudGl0eSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdDMyOgorICAg
ICAgICBvdXQucHJpbnQoIkNvbnN0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29u
c3Q2NDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDY0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0RG91YmxlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgb3V0LnByaW50KCJT
dGFja1Nsb3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAg
ICAgIG91dC5wcmludCgiQXJndW1lbnRSZWciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RnJhbWVQb2ludGVyOgorICAgICAgICBvdXQucHJpbnQoIkZyYW1lUG9pbnRlciIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBZGQ6CisgICAgICAgIG91dC5wcmludCgiQWRkIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN1YjoKKyAgICAgICAgb3V0LnByaW50KCJTdWIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTXVsOgorICAgICAgICBvdXQucHJpbnQoIk11bCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBEaXY6CisgICAgICAgIG91dC5wcmludCgiRGl2Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICBvdXQucHJpbnQo
IkNoaWxsRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1vZDoKKyAgICAgICAgb3V0
LnByaW50KCJNb2QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0QW5kOgorICAgICAg
ICBvdXQucHJpbnQoIkJpdEFuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRPcjoK
KyAgICAgICAgb3V0LnByaW50KCJCaXRPciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBC
aXRYb3I6CisgICAgICAgIG91dC5wcmludCgiQml0WG9yIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFNobDoKKyAgICAgICAgb3V0LnByaW50KCJTaGwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU1NocjoKKyAgICAgICAgb3V0LnByaW50KCJTU2hyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFpTaHI6CisgICAgICAgIG91dC5wcmludCgiWlNociIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0OCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MTY6CisgICAgICAgIG91dC5wcmludCgiU0V4dDE2
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgb3V0LnByaW50
KCJTRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgWkV4dDMyOgorICAgICAgICBv
dXQucHJpbnQoIlpFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGUm91bmQ6Cisg
ICAgICAgIG91dC5wcmludCgiRlJvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElU
b0Q6CisgICAgICAgIG91dC5wcmludCgiSVRvRCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBEVG9JMzI6CisgICAgICAgIG91dC5wcmludCgiRFRvSTMyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQo
Ikxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAg
ICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IExlc3NFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzRXF1YWwiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJF
cXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZToKKyAgICAgICAgb3V0LnBy
aW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCZWxvdzoKKyAgICAgICAg
b3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZUVxdWFs
OgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvd0VxdWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkOFoi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBvdXQucHJpbnQo
IkxvYWQ4UyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBv
dXQucHJpbnQoIkxvYWQxNloiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2UzoK
KyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IExvYWRGbG9hdDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkRmxvYXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgTG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTgiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgb3V0LnByaW50KCJT
dG9yZTE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAg
IG91dC5wcmludCgiU3RvcmVGbG9hdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDQ2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJDQ2FsbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBQYXRjaHBvaW50OgorICAgICAgICBvdXQucHJpbnQoIlBhdGNocG9pbnQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIG91dC5wcmludCgiQ2hl
Y2tBZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIG91
dC5wcmludCgiQ2hlY2tTdWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tNdWw6
CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tNdWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ2hlY2s6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2siKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgb3V0LnByaW50KCJVcHNpbG9uIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFBoaToKKyAgICAgICAgb3V0LnByaW50KCJQaGkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSnVtcDoKKyAgICAgICAgb3V0LnByaW50KCJKdW1wIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgb3V0LnByaW50KCJCcmFu
Y2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBvdXQucHJp
bnQoIlN3aXRjaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXR1cm46CisgICAgICAg
IG91dC5wcmludCgiUmV0dXJuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9vcHM6Cisg
ICAgICAgIG91dC5wcmludCgiT29wcyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09wY29kZV9oCisKKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIE9w
Y29kZSA6IGludDE2X3QgeworICAgIC8vIEEgbm8tb3AgdGhhdCByZXR1cm5zIFZvaWQsIHVzZWZ1
bCBmb3Igd2hlbiB5b3Ugd2FudCB0byByZW1vdmUgYSB2YWx1ZS4KKyAgICBOb3AsCisgICAgIAor
ICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4K
KyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0YW50cy4gVXNlIHRoZSBDb25zdFZhbHVlKiBj
bGFzc2VzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28gdGhhdCB3ZSBj
YW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUgd2Ugd291bGQgY29uc3RydWN0IHRoZW0uIExh
cmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRvIGNyZWF0ZS4KKyAgICBDb25zdDMyLAorICAg
IENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBz
bG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3Jh
bSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQu
IEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdl
IG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgor
ICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVyLiBU
aGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQorICAg
IC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQsIGFuZCB0
aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1cmUgdGhhdCB3ZQorICAgIC8vIGRvbid0IGNs
b2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFsbG9jYXRpb24gb3IgY2FsbHMgKGVpdGhlciBi
eSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQorICAgIC8vIHN0YWNrIG9yIHByZXNlcnZpbmcg
aXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3RlcikuIFVzZSB0aGUgQXJndW1lbnRSZWdWYWx1ZSBj
bGFzcy4gVGhlIHJldHVybgorICAgIC8vIHR5cGUgaXMgZWl0aGVyIHBvaW50ZXIoKSAoZm9yIEdQ
UnMpIG9yIERvdWJsZSAoZm9yIEZQUnMpLgorICAgIEFyZ3VtZW50UmVnLAorCisgICAgLy8gVGhl
IGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4gcHV0IHRoaXMgYW55d2hlcmUgaW4gY29udHJvbCBmbG93
IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVsZCB0aGUKKyAgICAvLyBmcmFtZSBwb2ludGVyLCB3aXRo
IGEgY2F2ZWF0OiBpZiBvdXIgY29tcGlsZXIgY2hhbmdlcyB0aGUgZnJhbWUgcG9pbnRlciB0ZW1w
b3JhcmlseSBmb3Igc29tZQorICAgIC8vIHNpbGx5IHJlYXNvbiwgdGhlIEZyYW1lUG9pbnRlciBp
bnRyaW5zaWMgd2lsbCByZXR1cm4gd2hlcmUgdGhlIGZyYW1lIHBvaW50ZXIgKnNob3VsZCogYmUg
bm90CisgICAgLy8gd2hlcmUgaXQgaGFwcGVucyB0byBiZSByaWdodCBub3cuCisgICAgRnJhbWVQ
b2ludGVyLAorCisgICAgLy8gUG9seW1vcnBoaWMgbWF0aCwgdXNhYmxlIHdpdGggYW55IHZhbHVl
IHR5cGUuCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorCisgICAgLy8g
SW50ZWdlciBtYXRoLgorICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZl
cyBsaWtlIEpTICh4L3kpfDAuCisgICAgTW9kLAorICAgIEJpdEFuZCwKKyAgICBCaXRPciwKKyAg
ICBCaXRYb3IsCisgICAgU2hsLAorICAgIFNTaHIsCisgICAgWlNociwKKworICAgIC8vIENhc3Rz
IGFuZCBzdWNoLgorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIEludDMyOgorICAgIFNFeHQ4LAor
ICAgIFNFeHQxNiwKKyAgICAvLyBUYWtlcyBJbnQzMiBhbmQgcmV0dXJucyBJbnQ2NDoKKyAgICBT
RXh0MzIsCisgICAgWkV4dDMyLAorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIERvdWJsZToKKyAg
ICBGUm91bmQsCisgICAgLy8gVGFrZXMgaW50cyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgSVRv
RCwKKyAgICAvLyBUYWtlcyBEb3VibGUgYW5kIHJldHVybnMgSW50MzI6CisgICAgRFRvSTMyLAor
CisgICAgLy8gUG9seW1vcnBoaWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0
eXBlLiBSZXR1cm5zIGludDMyIDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCisgICAgLy8gaXMganVz
dCBFcXVhbCh4LCAwKS4KKyAgICBFcXVhbCwKKyAgICBOb3RFcXVhbCwKKyAgICBMZXNzVGhhbiwK
KyAgICBHcmVhdGVyVGhhbiwKKyAgICBMZXNzRXF1YWwsCisgICAgR3JlYXRlckVxdWFsLAorCisg
ICAgLy8gSW50ZWdlciBjb21wYXJpc29ucy4gUmV0dXJucyBpbnQzMiAwIG9yIDEuCisgICAgQWJv
dmUsCisgICAgQmVsb3csCisgICAgQWJvdmVFcXVhbAorICAgIEJlbG93RXF1YWwsCisKKyAgICAv
LyBNZW1vcnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBsb2Fk
ZWQgdHlwZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHJldHVybiBJbnQz
MjoKKyAgICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlosCisgICAgTG9hZDE2UywK
KyAgICAvLyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9hdCwKKyAgICAvLyBUaGlz
IHJldHVybiB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwKKworICAgIC8v
IE1lbW9yeSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBpcyBzdG9yZWQu
IFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIEludDMyIHZhbHVl
OgorICAgIFN0b3JlOCwKKyAgICBTdG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMgYSBEb3VibGUg
dmFsdWU6CisgICAgU3RvcmVGbG9hdCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3Rv
cmUgZm9yIEludDMyLCBJbnQ2NCwgYW5kIERvdWJsZToKKyAgICBTdG9yZSwKKworICAgIC8vIFRo
aXMgaXMgYSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5c3Rl
bSBDIGNhbGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJndW1l
bnRzIGFyZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxsLAorCisgICAg
Ly8gVGhpcyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNzLiBU
aGlzIGlzIHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25seSBl
bWl0cyBjb2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBn
ZXRzIHRvIGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2ttYXAg
YWxvbmcgd2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBtdXN0
IGJlIHBhc3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNrbWFw
IGFyZ3VtZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVzdAor
ICAgIC8vIHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9tIHRo
ZSB0b3Agb2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFjay4K
KyAgICBQYXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNrVmFs
dWUgY2xhc3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBnZW5lcmF0aW9u
CisgICAgLy8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNvbWUgY29kZSBh
ZnRlciB0aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAgICAvLyBmcm9t
IHRoZSBjaGVjaywgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxzbyBnZXQgdG8g
c3VwcGx5IGEgc3RhY2ttYXAuIE5vdGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90IGFsbG93ZWQg
dG8ganVtcCBiYWNrIGludG8gdGhlIG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNsb3cgcGF0aCwg
c2luY2UgdGhlIGNvbXBpbGVyCisgICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgZXhlY3V0aW9u
IG9mIHRoZXNlIGluc3RydWN0aW9ucyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRuJ3QgaGFwcGVu
LiBGb3IKKyAgICAvLyBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQnczoKKyAgICAv
LworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0FkZCh4LCB5KQor
ICAgIC8vCisgICAgLy8gVGhlbiBpdCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRvOgorICAgIC8v
CisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5KGEpCisgICAg
Ly8KKyAgICAvLyBUaGlzIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxiYWNrcyB1c2Vk
IGJ5IHRoZSB0d28gQ2hlY2tBZGRzLiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAorICAgIC8vIGNh
bGxiYWNrcy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhleSBh
cmUgZGlmZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0
IENoZWNrQWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZlIHBv
c3NpYmx5IHRha2VuIHNsb3cKKyAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQgQ2hl
Y2tBZGQncyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIENoZWNrQWRkLAorICAgIENoZWNr
U3ViLAorICAgIENoZWNrTXVsLAorCisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBVc2Ug
dGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMgaGFz
IGEKKyAgICAvLyBzdGFja21hcCB3aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0YWtl
cyBhbiBJbnQzMiBhcmd1bWVudCB0aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgKKyAgICAvLyBm
dWxsIGJyYW5jaCBmdXNpb24gaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBBIHRydWUgdmFs
dWUganVtcHMgdG8gdGhlIGdlbmVyYXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgorICAgIENoZWNr
LAorCisgICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAgIFVw
c2lsb24sIC8vIFRoaXMgdXNlcyB0aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAgIFBoaSwKKwor
ICAgIC8vIEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAorICAg
IAorICAgIC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUu
IEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIENvbnRyb2xW
YWx1ZSBjbGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUgc3Vj
Y2Vzc29yLgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBlaXRo
ZXIgSW50MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3aXRj
aCwKKworICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0
aGVpciByZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlw
ZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIFJldHVybiwKKworICAgIC8vIFRo
aXMgaXMgYSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhl
cmUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9OworCitpbmxpbmUg
Ym9vbCBpc0NoZWNrTWF0aChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7
CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tN
dWw6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3Jp
Z2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIs
IFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNPcmlnaW5faAorCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBX
aG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVz
LiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24g
dG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hp
Y2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBj
YXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0Cisv
LyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4g
eworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0
cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNPcmlnaW5faAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6
On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1l
dGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0g
Iiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50VmFsdWVfaAorI2RlZmluZSBCM1Bh
dGNocG9pbnRWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFj
a21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hw
b2ludFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAg
ICB+UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZh
bHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFj
ZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0
eXBlLCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKwor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRl
ICJCM1ZhbGlkYXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQaGFz
ZVNjb3BlOjpQaGFzZVNjb3BlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBjaGFyKiBuYW1l
KQorICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICwgbV9uYW1lKG5hbWUpCit7Cisg
ICAgaWYgKHNob3VsZER1bXBJUkF0RWFjaFBhaHNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQjMg
YmVmb3JlICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAg
IH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBC
ZWZvcmUgPSB0b0NTdHJpbmcocHJvY2VkdXJlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2Nv
cGUoKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAg
dmFsaWRhdGUocHJvY2VkdXJlLCBtX25hbWUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQaGFzZVNjb3Bl
X2gKKyNkZWZpbmUgQjNQaGFzZVNjb3BlX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOwor
CitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaGFzZVNjb3Bl
KTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIG5hbWUp
OworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6
CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7Cisg
ICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEIzUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sKK30KKworUHJvY2VkdXJlOjp+UHJvY2Vk
dXJlKCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJlOjphZGRCbG9jayhkb3VibGUgZnJl
cXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayA9IHN0ZDo6
bWFrZV91bmlxdWU8QmFzaWNCbG9jaz4obV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpOworICAg
IEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChX
VEY6Om1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVy
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gK
KyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgQmFzaWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisKKyAgICBQcm9jZWR1cmUoKTsKKyAgICB+UHJvY2VkdXJlKCk7CisKKyAg
ICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0
ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICA6
IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVu
c2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAg
ICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9
IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5k
ZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmRO
ZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXgg
PCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgpKQorICAgICAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gaW5leDsKKyAgICAgICAgfQor
CisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgY2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7
CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xsZWN0aW9uKFByb2NlZHVyZSYgcHJvY2Vk
dXJlKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxw
dHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNp
Z25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisg
ICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmJsb2NrKG1faW5kZXgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAgICAgICBQcm9jZWR1cmUqIG1f
cHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2Vk
dXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQorCisgICAgICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXpl
KCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF07IH0KKyAgICAgICAgVmFsdWUqIG9wZXJhdG9yW10o
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgICAgICAKKyAg
ICBwcml2YXRlOgorICAgICAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIH07CisKKyAg
ICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIFZhbHVlc0NvbGxlY3Rpb24oKnRo
aXMpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2Nr
Pj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+IG1fdmFsdWVz
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVy
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxp
bmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlSW5s
aW5lc19oCisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisKKyNpbmNsdWRlICJCM0Jhc2lj
QmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFyZ3VlbnRzLi4uIGFyZ3VtZW50
cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2YWx1ZShuZXcgVmFsdWVUeXBl
KG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7CisgICAgVmFsdWVUeXBlKiByZXN1bHQg
PSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoV1RGOjptb3ZlKHZhbHVlKSk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0YWNrU2xvdEtpbmQuaCIKKworI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja1Ns
b3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTdGFja1Nsb3RL
aW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAgb3V0LnByaW50
KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90
S2luZF9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIGNsYXNzIFN0
YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tlZCBzdGFjayBzbG90IG5lZWRz
IHRvIGJlIGtlZXAgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2UgaW50ZW5kIHRv
IGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBUaGlzIGhhcHBl
bnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNrCisgICAgLy8g
c2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBjb3VsZCBzaGFy
ZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRlZCB0aGF0IHRoZXkgYXJlbid0
IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29tcGlsZXIgc3RpbGwgaGFzIHRv
IGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJlIGVzY2FwZWQKKyAgICAvLyBl
eHBsaWNpdGx5IGluIElSLgorICAgIEFub255bW91cworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3RhY2tTbG90S2luZCk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RLaW5kX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0
YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFj
a1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5
dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0
YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30g
Ly8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVy
biBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAg
IHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0
YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhp
cyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0
b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8g
dGhhdC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dEZyb21GUDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNz
IHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRw
dHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBT
dGFja1Nsb3RWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgYnl0
ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgU3RhY2tT
bG90LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQor
ICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAg
eworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgU3RhY2tTbG90S2luZCBt
X2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwgUmF3
UG9pbnRlcihtX29wYXF1ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAgICAg
ICAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwgY2xv
YmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBt
X3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisjaW5jbHVk
ZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIlJl
Z2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrU3BlY2lhbDsKK2NsYXNzIFN0YWNrbWFw
U3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBTdGFja21hcCB7CitwdWJsaWM6CisgICAg
c3RydWN0IEdlbmVyYXRpb25QYXJhbXMgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBWYWx1ZSBj
b250YWluaW5nIHRoZSBzdGFja21hcC4KKyAgICAgICAgVmFsdWUqIHZhbHVlOworCisgICAgICAg
IC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgorICAgICAgICBTdGFja21hcCogc3RhY2ttYXA7CisK
KyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlv
bnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworCisg
ICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisg
ICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgfTsKKyAgICAKKyAgICB0eXBl
ZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlv
blBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2Vu
ZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2V0
IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2Vm
dWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0
ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0
ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRl
cyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0
cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAg
dm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUg
PSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
b3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNl
cyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGlu
ZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgp
KTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lz
ZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1l
bnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNrbWFwLiBOb3RlIHRoYXQgaW5kZXgg
emVybyByZWZlcnMgdG8gdGhlCisgICAgLy8gZmlyc3QgYXJndW1lbnQgdG8gdGhhdCBWYWx1ZSwg
ZXZlbiBpZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3IgZXhhbXBsZSwg
aW4gYQorICAgIC8vIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25z
dHJhaW4gaW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdCB3b3VsZAorICAgIC8v
IGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhlIGdlbmVyYXRp
b24gY2FsbGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuIGRlcGVuZAorICAgIC8vIG9uIHRoZSByZXBz
IGZvciB0aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNvbnN0cmFpbih1
bnNpZ25lZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAgIGlmIChp
bmRleCArIDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBzLmdyb3coaW5kZXgg
KyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisKKyAgICB2b2lkIGNs
b2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fY2xvYmJlcmVk
Lm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNsb2JiZXJlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lkIHNldEdlbmVyYXRvcihS
ZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9
IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+KGZ1bmN0
b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFsOworICAgIGZyaWVuZCBjbGFz
cyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9vcGFxdWUgeyBudWxscHRyIH07
CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9n
ZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhlciBkdXBsaWNhdGVk
IGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJnZSB0aGUgdXNlZCBy
ZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21h
cFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5h
bWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKGNvbnN0IGNo
YXIqIG5hbWUpCisgICAgOiBTcGVjaWFsKG5hbWUpCit7Cit9CisKK1N0YWNrbWFwU3BlY2lhbDo6
flN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNo
QXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+
JiBjYWxsYmFjaykKK3sKKyAgICByZXR1cm4gZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgY2Fs
bGJhY2spOworfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQor
eworICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsKK30KKworYm9vbCBTdGFja21h
cFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQorewor
ICAgIHJldHVybiBhZG1pdHNTdGFjaygwLCAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK3ZvaWQg
U3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmIGluc3QsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAg
Ly8gRklYTUU6IElmIHRoZSBJbnN0IHRoYXQgdXNlcyB0aGUgU3RhY2ttYXBTcGVjaWFsIGdldHMg
ZHVwbGljYXRlZCwgdGhlbiB3ZSBlbmQgdXAgbWVyZ2luZyB1c2VkCisgICAgLy8gcmVnaXN0ZXIg
c2V0cyBmcm9tIG11bHRpcGxlIHBsYWNlcy4gVGhpcyBjdXJyZW50bHkgd29uJ3QgaGFwcGVuIHNp
bmNlIEFpciBkb2Vzbid0IGhhdmUgdGFpbGR1cAorICAgIC8vIG9yIHRoaW5ncyBsaWtlIHRoYXQu
IEJ1dCBtYXliZSBldmVudHVhbGx5IGl0IGNvdWxkIGJlIGEgcHJvYmxlbS4KKyAgICBzdGFja21h
cC0+bV91c2VkUmVnaXN0ZXJzLm1lcmdlKHVzZWRSZWdpc3RlcnMpOworfQorCitjb25zdCBSZWdp
c3RlclNldCYgU3RhY2ttYXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYgaW5zdCkK
K3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2tt
YXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHJldHVybiBzdGFja21hcC0+Y2xvYmJlcmVk
KCk7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgKKyAgICB1bnNp
Z25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJ
bnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2Fs
bGJhY2spCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVj
ayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3Qu
YXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hp
bGRyZW4uc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChpbnN0LmFyZ3Mu
c2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuLnNpemUoKSAtIG51
bUlnbm9yZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0
LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIEFyZyYgYXJn
ID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAgICAgICAgVmFsdWUqIGNoaWxk
ID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7CisKKyAgICAgICAgY2FsbGJh
Y2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAg
ICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKKyAgICB1bnNpZ25l
ZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJnQXJncywKKyAgICBJbnN0
JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hl
Y2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0
LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNo
aWxkcmVuLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKworICAgIFN0YWNrbWFwKiBzdGFj
a21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAg
IC8vIEZvciB0aGUgSW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMgdG8gaGF2ZSB0aGUgcmlnaHQg
bnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9y
ZWRBaXJBcmdzICE9IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdhcmRsZXNzIG9mIGNvbnN0cmFpbnRz
LCBzdGFja21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVtZW50cyBmb3IgdGhlaXIgYXJndW1l
bnRzLiBGb3IKKyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3QgaGF2ZSBhIG5vbi1GUC1vZmZzZXQg
YWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRpb25zIGFzIHdlbGwgYXMgdGhlCisg
ICAgLy8gYXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3Qu
YXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNo
aWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICAgICAgQXJnJiBh
cmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKKyAgICAgICAgCisgICAgICAg
IHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBj
YXNlIEFyZzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGNhc2UgQXJn
OjpTdGFjazoKKyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICBicmVhazsg
Ly8gT0sKKyAgICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAgICBpZiAoYXJnLmJhc2Uo
KSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpICYmCisgICAgICAgICAgICAgICAg
YXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5
cGUoKSk7CisKKyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5cGUpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIgb2YgY29uc3RyYWludHMgaGFz
IHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIEIzIGNoaWxkcmVuLgorICAgIEFT
U0VSVChzdGFja21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpKTsK
KworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBzdXBwbGllZCBjb25zdHJhaW50cy4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNBcmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVw
cy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7
CisgICAgICAgIFZhbHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBB
cmcmIGFyZyA9IGluc3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJB
cmdzXTsKKworICAgICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6QW55OgorICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3Zl
LgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cjoKKyAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lz
dGVyOgorICAgICAgICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U3RhY2s6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJl
cHJlc2VudGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAg
ICAgICAgIGlmIChhcmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxp
ZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNp
Z25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJ
bnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0
Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKwor
ICAgIHVuc2lnbmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJB
cmdzICsgbnVtSWdub3JlZEIzQXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0
YWNrbWFwLT5tX3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVy
ZSB3YXMgbm8gY29uc3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIC8vIFdlIG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3Qg
YSB2YWxpZCBpbnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5z
bGF0ZXMgdG8gYSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFj
a21hcEFyZ0luZGV4XS5raW5kKCkgPT0gQW55KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IHJldHVybiBmYWxzZTsKK30KKworVmVjdG9yPFZhbHVlUmVwPiBTdGFja21hcFNwZWNpYWw6OnJl
cHMoR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIEluc3QmIGluc3QpCit7CisgICAgVmVjdG9y
PFZhbHVlUmVwPiByZXN1bHQ7CisgICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwgMSwgaW5zdCwg
cmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6
YXBwZW5kUmVwc0ltcGwoCisgICAgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVk
IG51bUlnbm9yZWRBcmdzLCBJbnN0JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+JiByZXN1bHQpCit7
CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Muc2l6
ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKGNvbnRleHQuY29kZSwg
YXJnKSk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgIH0KK30KKworVmFs
dWVSZXAgU3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JBcmcoQ29kZSYgY29kZSwgY29uc3QgQXJnJiBh
cmcpCit7CisgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgY2FzZSBUbXA6CisgICAgICAg
IHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgSW1tOgorICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3Rh
bnQoYXJnLnZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFkZHI6CisgICAgICAg
IGlmIChhcmcuYmFzZSgpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAgICAg
ICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQo
YXJnLmJhc2UoKSA9PSBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
ICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXpl
KCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gVmFsdWVSZXAoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lh
bC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBTcGVjaWFs
X2gKKyNkZWZpbmUgQjNTdGFja21hcFNwZWNpYWxfaAorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5o
IgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWFscyB0aGF0IGhhdmUgc3Rh
Y2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBhc2tpbmcg
Zm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBuZWVkIHRv
IGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNrbWFwLgorCitjbGFzcyBTdGFj
a21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBTdGFja21h
cFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWly
OjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFp
cjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5z
aWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhB
aXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAv
LyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBs
KCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gc3ViY2xhc3NlcyB0
aGF0IGltcGxlbWVudCB0aGF0LgorCisgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKKyAgICAgICAg
dW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisg
ICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mKTsKKyAgICBib29sIGlzVmFsaWRJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1J
Z25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJ
bnN0Jik7CisgICAgYm9vbCBhZG1pdHNTdGFja0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUln
bm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Oklu
c3QmKTsKKworICAgIC8vIEdldHMgdGhlIHJlcHMgYXJyYXkgdGhlIHdheSB0aGF0IHRoZSBzdGFj
a21hcCBnZW5lcmF0b3IgY2FsbGJhY2sgd291bGQgd2FudC4KKyAgICBWZWN0b3I8VmFsdWVSZXA+
IHJlcHMoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIEFpcjo6SW5zdCYpOworCisgICAgLy8gQXBw
ZW5kcyB0aGUgcmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBzdGFydGluZyB3aXRoIG51bUlnbm9y
ZWRBcmdzLCB0byB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgIHZvaWQgYXBwZW5kUmVwc0ltcGwoQWly
OjpHZW5lcmF0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBBaXI6Okluc3Qm
LCBWZWN0b3I8VmFsdWVSZXA+Jik7CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVwRm9yQXJnKEFp
cjo6Q29kZSYsIGNvbnN0IEFpcjo6QXJnJik7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKyNkZWZp
bmUgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKKy8vIFRoaXMgaXMgYSBnZW5lcmljIHdyYXBwZXIgYXJvdW5kIGxpc3RzIG9mIGZyZXF1
ZW50ZWQgYmxvY2tzLCB3aGljaCBnaXZlcyB5b3UganVzdCB0aGUgYmxvY2tzLgorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrLCB0eXBlZGVmIFN1Y2Nlc3Nvckxpc3Q+CitjbGFzcyBTdWNj
ZXNzb3JDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uKFN1Y2Nl
c3Nvckxpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgeworICAgIH0KKwor
ICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgIEJh
c2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9saXN0W2luZGV4XS5i
bG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9s
aXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXShzaXplX3Qg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJhc2ljQmxvY2sqJiBvcGVy
YXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBp
dGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6
IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3NvckNvbGxlY3Rpb24mIGNv
bGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xs
ZWN0aW9uKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgIH0K
KworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2lkbmV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24qIG1fY29s
bGVjdGlvbjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9y
IGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQo
KSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisKK3ByaXZhdGU6CisgICAgU3Vj
Y2Vzc29yTGlzdCYgbV9saXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisjaW5jbHVkZSAiQjNC
YXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN3
aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
bV9jYXNlVmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKG1fdGFyZ2V0KSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
Q2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
Q2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaENhc2VfaAorI2Rl
ZmluZSBCM1N3aXRjaENhc2VfaAorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNp
bmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hDYXNlIHsK
K3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNoQ2Fz
ZShpbnQ2NF90IGNhc2VWYWx1ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAg
ICAgIDogbV9jYXNlVmFsdWUoY2FzZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkK
KyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICEhbV90YXJnZXQ7IH0KKworICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgdGFyZ2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV90YXJnZXQ7IH0KKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fdGFyZ2V0LmJsb2NrKCk7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZTsKKyAgICBGcmVx
dW50ZWRCbG9jayB0YXJnZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbGR1ZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRj
aENhc2UgU3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgU3dp
dGNoQ2FzZSByZXN1bHQgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tp
bmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0
KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6YXBwZW5kQ2Fz
ZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBl
bmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNjZXNzb3JzW21fc3VjY2Vzc29ycy5z
aXplKCkgLSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKHN3
aXRjaENhc2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3aXRjaFZhbHVlOjpkdW1wTWV0YShQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRoaXMgZGVzdHJ1Y3RpdmVseSBvdmVy
cmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAgICBvdXQucHJpbnQobGlzdER1bXAo
KnRoaXMpLCAiLCBmYWxsVGhyb3VnaCA9ICIsIGZhbGxUaHJvdWdoKCkpOworfQorCitTd2l0Y2hW
YWx1ZTo6U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxv
Y2sqIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gsIG9yaWdp
bikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVl
X2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5o
IgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29k
ZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8gbnVtQ2FzZVZh
bHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8gVGhlIHN1Y2Nl
c3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4LgorICAgIGludDY0
X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpXTsg
fQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVlcygpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICBGcmVxdWVudGVkQmxvY2sgZmFsbFRocm91Z2goKSBj
b25zdCB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2Nr
JiBmYWxsVGhyb3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKworICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0
Y2hDYXNlIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN3
aXRjaENhc2UoY2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7CisgICAgfQorICAg
IFN3aXRjaENhc2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3aXRjaChudWxs
cHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGl0ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgp
CisgICAgICAgICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9p
bmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBv
cGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1f
aW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAg
ICAgICB7CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhl
ci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTd2l0Y2hW
YWx1ZSogbV9zd2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAg
IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9Cisg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7
IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEg
Yml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0
aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZp
c2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUg
b3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVk
LgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lk
IGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCk7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoVmFsdWVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlND
OjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkK
K3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmlu
dCgiVm9pZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0
LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAg
ICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6
CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAg
ICBWb2lkLAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5l
IGJvb2wgaXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5
cGUgPT0gSW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAg
IHJldHVybiB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlcigpIGNvbnN0
Cit7CisgICAgaWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgcmV0dXJuIEludDMyOwor
ICAgIHJldHVybiBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVz
cGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxv
blZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNp
bG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworVXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBV
cHNpbG9uVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJeIiwgbV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBC
M1Vwc2lsb25WYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4g
b3Bjb2RlID09IFVwc2lsb247IH0KKworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVl
KiBwaGkoKSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShw
aGkpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7
CisgICAgfQorCisgICAgVmFsdWUqIG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworI2luY2x1ZGUgIkIzUHJvY2Vk
dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2Ugewor
CitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihQcm9jZWR1cmUmIHBy
b2NlZHVyZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAg
ICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgbV93aGVuKHdoZW4pCisgICAg
ICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBW
QUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWls
KF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9D
U3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2b2lkIHJ1bigp
CisgICAgeworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7CisgICAgICAgIEhh
c2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVl
SW5CbG9jazsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUp
IHsKKyAgICAgICAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICAgICAgZm9yIChWYWx1
ZSogdmFsdWUgOiAqYmxvY2spCisgICAgICAgICAgICAgICAgdmFsdWVJbkJsb2NrLmFkZCh2YWx1
ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJl
LnZhbHVlcygpKQorICAgICAgICAgICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsKKworICAgICAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCisgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisKKyAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1
ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZUluUHJvYy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4iLCBwb2ludGVy
RHVtcChjaGlsZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoCisg
ICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpi
bG9jaywgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogRXhwYW5kIHRoaXMgdmFsaWRhdGlv
biBwaGFzZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDQ4MAorICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZhaWwoCisgICAgICAgIGNv
bnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24s
IGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsK
KyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJCMyBWQUxJREFU
SU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9u
LCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBv
dXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4p
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7
CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAg
fQorCisgICAgICAgIG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1
bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQmVmb3JlICIsIHdoZW4sICI6XG4i
KTsKKyAgICAgICAgICAgIG91dC5wcmludChtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAg
ICAgIG91dC5wcmludCgiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIG91dC5wcmlu
dChtX3Byb2NlZHVyZSk7CisKKyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAg
ICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVu
Y3Rpb24sIGNvbmRpdGlvbik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIFBy
b2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVmb3JlOworfTsK
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoUHJvY2VkdXJlJiBw
cm9jZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCit7Cisg
ICAgVmFsaWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUsIHdoZW4sIGR1bXBCZWZvcmUpOworICAg
IHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzVmFsaWRhdGVfaAorI2RlZmluZSBCM1ZhbGlkYXRlX2gKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwordm9pZCB2YWxpZGF0ZShQ
cm9jZWR1cmUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVtcEJl
Zm9yZSA9IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEIzVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitWYWx1ZTo6flZhbHVlKCkK
K3sKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdmFsdWUpCit7
CisgICAgLy8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNl
bWVudCBvZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBs
YWluIElkZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRp
b24gd2UgbmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91cyB2YWx1ZSBp
biBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFj
ZS4KKworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5
cGU7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVy
ID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1l
bnQ7CisgICAgdm9pZCogbWlzYyA9IHRoaXMtPm1pc2M7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0
eXBlID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisg
ICAgbmV3ICh0aGlzKSAoaW5kZXgsIElkZW50aWZ5LCB0eXBlLCBvcmlnaW4sIHZhbHVlKTsKKwor
ICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSByZXBsYWNl
bWVudDsKKyAgICB0aGlzLT5taXNjID0gbWlzYzsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4
KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNvZGUpOworCisg
ICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoVmFs
dWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVy
RHVtcChjaGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0OworICAgIGR1
bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3Ry
aW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBzdHJpbmcpOworCisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0lu
dDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3QgVmFsdWU6OmFz
SW50MzIoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFs
dWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitkb3VibGUg
VmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVh
bSYpIGNvbnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFs
dWUqIGZpcnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50
aXR5OgorICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNh
c2UgRGl2OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRB
bmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAg
ICBjYXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2Fz
ZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGls
ZC0+dHlwZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRl
cigpOworICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBEVG9JMzI6
CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46
CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBjYXNlIEdy
ZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBB
Ym92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEludDMyOwor
ICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7
CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gRG91Ymxl
OworICAgIGNhc2UgTm9wOgorICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNp
bmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoVmFsdWUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHR5cGVkZWYgVmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlzdDsKKworICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIkAiOworCisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgflZhbHVlKCk7CisKKyAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICAvLyBO
b3RlIHRoYXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZh
bHVlcyB3aXRoIGlkZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBt
X29wY29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2lu
OyB9CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9j
aGlsZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRo
ZSB0eXBlIHVzaW5nIHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4g
bV90eXBlOyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hp
bGRyZW47IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJl
dHVybiBtX2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUq
KTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAg
ICAvLyBUaGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2Fu
dCB0byBkbyBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZlIGEKKyAgICAvLyBBcmd1bWVu
dFJlZ1ZhbHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8gaWYgKEFyZ3VtZW50UmVnVmFs
dWUqIGFyZ3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCkpIHsKKyAgICAv
LyAgICAgdGhpbmdzCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBu
dWxsIGlmIHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRoaXMgd29ya3MgYmVjYXVzZSB0
aGlzIHJldHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2VwdHMob3Bjb2RlKCkpIHJldHVy
bnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhcygpOworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25zdDsKKyAgICAKKyAgICBi
b29sIGhhc0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Q7CisgICAg
CisgICAgYm9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0
OworCisgICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50KCkgY29uc3Q7
CisgICAgYm9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91
YmxlKCkgY29uc3Q7CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisKKyAgICBTdGFja21h
cCogc3RhY2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wTWV0YShQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJvY2VkdXJlLgor
ICAgIC8vIFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlw
ZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVu
eyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBm
b3JtIGlzIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hlbiB0aGUgb3Bjb2Rl
IGhhcyBubyBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgo
aW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBl
KQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMg
Zm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20g
dGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkK
KyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQorICAgICAgICAs
IG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1
bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBv
cGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBh
bmQgdGhhdCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKKyAgICBleHBsaWNpdCBW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAg
ICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAg
LCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAgICAgICAsIG1fb3JpZ2luKG9y
aWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCisg
ICAgZXhwaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAg
OiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBt
X3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGls
ZHJlbihjaGlsZHJlbikKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZvcihP
cGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKworICAgIC8vIFRoaXMgZ3JvdXAgb2YgZmllbGRz
IGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgorICAgIHVuc2lnbmVkIG1faW5kZXg7Cisg
ICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgIFR5cGUgbV90eXBlOworICAgIAorICAgIE9yaWdpbiBt
X29yaWdpbjsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisKK3B1YmxpYzoKKyAgICBC
YXNpY0Jsb2NrKiBvd25lciB7IG51bGxwdHIgfTsgLy8gY29tcHV0ZWQgbGF6aWx5LgorICAgIFZh
bHVlKiByZXBsYWNlbWVudCB7IG51bGxwdHIgfTsgLy8gdXNlZCBmb3IgYW5hbHlzZXMgYW5kIHRy
YW5zZm9ybWF0aW9ucy4KK307CisKK2NsYXNzIERlZXBWYWx1ZUR1bXAgeworcHVibGljOgorICAg
IERlZXBWYWx1ZUR1bXAoVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVlLT5kZWVwRHVtcChv
dXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBWYWx1ZSogbV92YWx1ZTsKK307CisKK0RlZXBWYWx1ZUR1bXAg
ZGVlcER1bXAoVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVwVmFsdWVEdW1wKHZhbHVl
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1ZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNkZWZpbmUgQjNW
YWx1ZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjND
b25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
Q29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK1QqIFZhbHVlOjphcygpCit7CisgICAgaWYgKFQ6OmFjY2VwdHMo
b3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIHJl
dHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZT50eXBlbmFtZSBUPgorY29uc3QgVCogVmFsdWU6
OmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxWYWx1ZSo+KHRoaXMpLT5hczxU
PigpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuICEh
YXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZh
bHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3Q2NFZhbHVlPigp
OworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8
Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQoKSBjb25z
dAoreworICAgIHJldHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0KCk7Cit9CisKK2ludDY0X3Qg
VmFsdWU6OmFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSA/IGFzSW50MzIo
KSA6IGFzSW50NjQoKTsKK30KKworYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworYm9v
bCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdERvdWJs
ZVZhbHVlPigpOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworU3RhY2ttYXAqIFZh
bHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hlY2tW
YWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2ttYXA7CisgICAgaWYgKFBhdGNo
cG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4oKSkKKyAgICAgICAg
cmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1ZhbHVlSW5saW5lc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1ZVJlcDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQpOworICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb25lOgorICAgIGNhc2UgU29tZVJlZ2lzdGVyOgor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCIo
IiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAg
ICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJv
bVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAg
ICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZVJlcDo6S2luZCBraW5k
KQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAg
ICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6
OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICBvdXQucHJp
bnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFj
azoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFja0FyZ3Vt
ZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFudDoKKyAg
ICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBfaAorCisjaW5j
bHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0byBkZXNjcmliZSB2
YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQgYm90aCB0byBmb3Jj
ZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNlbnRhdGlvbi4gV2hl
biB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBzYXkKKy8vIHRoYXQg
aXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQgcmVwcmVzZW50YXRp
b24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQuCisKK2NsYXNzIFZh
bHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAvLyBBcyBhbiBpbnB1
dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFueSByZXByZXNl
bnRhdGlvbi4gQXMgYW4KKyAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1l
YW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2UgZm9yIHRoZQorICAg
ICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBhIENoZWNrTXVsLgorICAg
ICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMg
bWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBhCisg
ICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKKyAgICAgICAg
U29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0
aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAorICAgICAgICAv
LyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tlZC4K
KyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0
aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90IGEg
dmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgIFN0YWNrLAor
CisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0aGUg
dmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAgICAgICAgLy8g
b2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1
dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50LWZvbGRlZCB0
aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBWYWx1ZVJlcCgp
CisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVmFs
dWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAgICAgICwgbV92
YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHJl
ZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7CisgICAgfQor
CisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21GUCkKKyAgICB7
CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNr
OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICB9CisKKyAgICBz
dGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9tU1ApCisgICAg
eworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFj
a0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21TUDsKKyAgICB9
CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50
OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gVmFsdWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAg
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJl
ZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAg
ICAgICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0
cl90IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09
IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsK
KyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAg
ICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOwor
ICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJi
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTA1IEBACisjIS91c3IvYmluL2VudiBydWJ5CisK
KyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1l
IgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAi
X3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFk
ZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRy
ZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikK
KyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAg
QGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisg
ICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4gL1xBXCQvID8g
JCcgOiBuYW1lCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0g
Y2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisg
ICAgICAgIG9wY29kZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnBy
b2MpCisgICAgICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNo
aWxkLCBpbmRleCB8CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAg
ICAgY2hpbGQubmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAg
ICAgICAgICAgICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5h
bCA6IDphbm9uT3BlcmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQp
LAorICAgICAgICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJs
ZSgmcHJvYykKKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBh
dHRyX3JlYWRlciA6bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1l
LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9u
cyA9IHByb2R1Y3Rpb25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9y
ZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZp
bGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAg
ICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcwor
ICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFz
cyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYg
aW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAg
ICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQor
ICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhl
ci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAg
ICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJp
bmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3Ry
aW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VF
cnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJh
aXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFp
c2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAg
ICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRo
bmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQor
ICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4g
L1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdo
ZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGlu
ZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSop
LworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBs
aW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAg
ICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAg
ICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwg
JCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09y
aWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNl
ICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBv
c3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2Vu
KQorICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtl
LCB3ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgo
bWF0Y2hlcikpXFovCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9
fiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9r
ZW4pCitlbmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5h
bWUpCisgICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHgg
PSAwCisgICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAg
IGVuZAorCisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAg
ICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAg
IHRva2VuLnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlm
IGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVu
ZCBvZiBmaWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJz
ZSBlcnJvciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAor
ICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAg
cGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZwor
ICAgICAgICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAg
ICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVk
IGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5j
ZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRVbmlxdWUobmFtZSwgcHJv
ZHVjdGlvbnMsIHByb2R1Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0gcHJvZHVjdGlvbi52YXJO
YW1lCisgICAgICAgICAgICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0aW9uIGhhcyBzYW1lIG5h
bWUgYXMgcGFyZW50IHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgaWYgcHJvZHVj
dGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0K
KyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAg
ZW5kCisgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBlbmQKKworICAgIGRl
ZiBwYXJzZQorICAgICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAgICAgICBtYXRjaGVyTmFt
ZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorCisgICAg
ICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAor
CisgICAgICAgICAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVkZSIuIElmIHdl
IGRpZCB0aGF0LCBpdCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHBh
cnNlUHJvZHVjdGlvbgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBwcm9kdWN0aW9ucy5k
ZXRlY3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAg
ICAgICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgICAg
IGVuZAorCisgICAgICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgICAgIH0K
KworICAgICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgZW5k
CisKKyAgICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdpbiA9IHRva2VuLm9yaWdp
bgorICAgICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBpZiB0b2tlbiA9
PSAiPSIKKyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAgICAgICAgICAgb3Bjb2RlID0gY29u
c3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICBlbHNpZiB0
b2tlbiA9PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICAgICAgb3Bjb2Rl
ID0gbmFtZQorICAgICAgICAgICAgbmFtZSA9IG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAg
ICByZXR1cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWwsIG5pbCkKKyAgICAgICAg
ZW5kCisgICAgICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGxvb3Agewor
ICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisKKyAgICAgICAgICAgIGFkZFVuaXF1
ZShuYW1lLCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorCisgICAgICAgICAgICBicmVh
ayBpZiB0b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICB9CisK
KyAgICAgICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAgICAgICAgYWR2YW5jZQorCisgICAg
ICAgIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAg
ICBlbmQKK2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJ
Tzo6cmVhZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hlciA9IHBhcnNlci5wYXJzZQorCitj
bGFzcyBTdWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRleE1hcCwgOnByb2R1Y3Rpb25zCisg
ICAgCisgICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAg
QGluZGV4TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgaW5kZXhM
aXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXAg
PDwgaW5kZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uc1tpbmRleF0K
KyAgICAgICAgfQorICAgIGVuZAorCisgICAgZGVmIG1hcEluZGV4TGlzdChpbmRleExpc3QpCisg
ICAgICAgIGluZGV4TGlzdC5tYXAgeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAg
ICBAaW5kZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitGaWxlLm9wZW4o
IkIzIiArIG1hdGNoZXIubmFtZSArICIuaCIsICJ3IikgeworICAgIHwgb3V0cCB8CisKKyAgICBv
dXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJv
bSAje2ZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisKKyAgICBvdXRwLnB1dHMgIiNpZm5kZWYg
QjMje21hdGNoZXIubmFtZX1faCIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQjMje21hdGNoZXIu
bmFtZX1faCIKKyAgICAKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisg
ICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsiCisKKyAg
ICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IgorICAgIG91dHAucHV0cyAi
dm9pZCBydW4je21hdGNoZXIubmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRhcHRvciYgYWRhcHRvciki
CisgICAgb3V0cC5wdXRzICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0
IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVy
LiBJZiB5b3UKKyAgICAjIHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9w
ZW4gaXQgaW4gYSBnb29kIHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9ybWF0IGl0CisgICAg
IyBmb3IgeW91LgorCisgICAgIyBJbiBvZGQgc2l0dWF0aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhl
IGlucHV0IHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisg
ICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsiCisgICAgICAgIAorICAgICMgVGhp
cyBqdXN0IHByb3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcHJv
ZHVjdGlvbnMgaGF2aW5nIGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBtYXRjaExlbmd0aChv
dXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRleExpc3RzID0gW10KKyAg
ICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVj
dGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rp
b25zW2luZGV4TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJvZHVjdGlvbi5jaGls
ZHJlbi5sZW5ndGgKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAg
ICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAg
ICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNb
aW5kZXhMaXN0WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlmIGxlbmd0aCA+IDAK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0tPmNoaWxkcmVuLnNp
emUoKSA+PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0Cisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBl
bmQKKworICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBv
ZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90
IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24s
IGFuZCB0aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3Bl
Y2lmaWMgY29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxp
c3RzIG9mCisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgor
ICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisg
ICAgICAgICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBw
cm9kdWN0aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRo
b3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVh
Y2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAg
ICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVsw
XV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5k
ZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBp
bmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAg
IAorICAgICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRp
ZmZlcmVudGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxp
c3RzIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAg
fCBpbmRleExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5o
YXNPcGNvZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0
IGludG8gZ3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7
fQorICAgICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAg
fCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tp
bmRleF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQor
ICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRl
eAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91
cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3Rh
dGVtZW50LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0t
Pm9wY29kZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAg
ICAgICAgICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1h
dGNoID0gU3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAg
ICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlv
bnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoi
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0g
U3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0
Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAg
ICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1
Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMg
dGhhdCBoYXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3Rz
IGZyb20gdGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBj
b2x1bW4uCisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMs
IGNvbHVtbkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5j
aGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUp
KS50b19hCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFs
dWUgPSBuZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0
cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1u
SW5kZXh9KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRo
ZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAgIG91dHAucHV0cyAiVU5V
U0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9u
cyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAg
ICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAgICAgICAgfQorCisgICAg
ICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7Cisg
ICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNo
Lm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0
cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7Cisg
ICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1h
dGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVs
eShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25z
KG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0
IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3Qg
Y29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAg
ICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3
KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2
YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAgICAgICAgICAgICAgfCBp
bmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChp
bmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNo
UmVjdXJzaXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKKyAgICAg
ICAgfCBpbmRleExpc3QgfAorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8
IGluZGV4IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2lu
ZGV4XQorICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJW
YWx1ZSogI3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAgICAgICAgIGludGVy
bmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAg
ICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAg
ICAgICAgICAgIHNlZW4gPSB7fQorICAgICAgICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUg
eworICAgICAgICAgICAgICAgIHwgcGFyZW50VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5h
bWUsIGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZh
ck5hbWV9LT5jaGlsZCgje2luZGV4fSkiCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgc2VlbltjaGlsZFZhck5hbWVdCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1Zh
cgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRF
eHByfTsiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2No
aWxkVmFyTmFtZX0pIHsiCisgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0g
PSB0cnVlCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFtZX0gPSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAg
ICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQor
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpp
bnRlcm5hbCBvciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5k
ID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hp
bGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KGFkYXB0b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFs
QXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5h
Y2NlcHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5
PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygi
ICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIg
KyB0cnlBcmd1bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0
cyAiYWRhcHRvci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBp
bnRlcm5hbEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0
b3IuYWNjZXB0SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSAr
ICIpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVu
dHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJh
bmRzTGF0ZSgiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybjsiCisgICAgICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAgICAg
IG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRz
ICJ9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBC
MyN7bWF0Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5o
IgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5j
bHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgYXR0ZW1wdEFzc2lnbm1lbnQo
CisgICAgU3RhY2tTbG90KiBzbG90LCBpbnRwdHJfdCBvZmZzZXRGcm9tRlAsIGNvbnN0IFZlY3Rv
cjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJT
bG90IDogb3RoZXJTTG90cykgeworICAgICAgICBpZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQ
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9mZnNldEZyb21GUCArIHNs
b3QtPmJ5dGVTaXplKCkgPj0gb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgKyBv
dGhlclNsb3QtPmJ5dGVTaXplKCkgPj0gb2Zmc2V0RnJvbUZQKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHNsb3QtPnNldE9mZnNldEZyb21GUChvZmZzZXRGcm9tRlAp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGFzc2lnbihTdGFja1Nsb3QqIHNsb3QsIGNv
bnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBpZiAoYXR0ZW1wdEFz
c2lnbm1lbnQoc2xvdCwgLXNsb3QtPmJ5dGVTaXplKCksIG90aGVyU2xvdHMpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTTG90IDogb3RoZXJTbG90cykgewor
ICAgICAgICBpZiAob3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKQorICAgICAgICAgICAgJiYgYXR0
ZW1wdEFzc2lnbm1lbnQob3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSAtIHNsb3QtPmJ5dGVTaXpl
KCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9j
YXRlU3RhY2soQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwg
ImFsbG9jYXRlU3RhY2siKTsKKworICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0aGUgbG9ja2VkIHNs
b3RzIGluIG9yZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cg
Zm9yCisgICAgLy8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVk
IGZyYW1lIG9mZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCisgICAgQVNTRVJUKCFjb2Rl
LmZyYW1lU2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRMb2NrZWRTdGFj
a1Nsb3RzOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Q7
CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAg
ICBzd2l0Y2ggKHNsb3QtPmtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6Okxv
Y2tlZDoKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAg
ICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGxvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgor
ICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAgICAg
Ly8gQXMgYSBtYXR0ZXIgb2Ygc2FuaXR5LCB1bmFzc2lnbiB0aGlzLiBNYXliZSBpdCB3b3VsZCBi
ZSBnb29kIHRvIGV2ZW4gaGF2ZSBhCisgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBydWxl
IHRoYXQgdGhpcyBjYW5ub3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIHNsb3QtPnNldE9mZnNl
dEZyb21GUCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIC8vIFRoaXMgaXMgYSBmYWlybHkgZXhwZW5zaXZlIGxvb3AsIGJ1dCBpdCdz
IE9LIGJlY2F1c2Ugd2UnbGwgdXN1YWxseSBvbmx5IGhhdmUgYSBoYW5kZnVsIG9mCisgICAgLy8g
bG9ja2VkIHN0YWNrIHNsb3RzLgorICAgIHdoaWxlICghbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0
LmlzRW1wdHkoKSkgeworICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBsb2NrZWRTdGFja1Nsb3Rz
V29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgYXNzaWduKHNsb3QsIGFzc2lnbmVkTG9ja2Vk
U3RhY2tTbG90cyk7CisgICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xv
dCk7CisgICAgfQorCisgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgYW5vbnltb3VzIHNsb3RzLiBO
b3RlIHRoYXQgdGhlb3JldGljYWxseSB3ZSBzaG91bGQgZG8gYW4gZXNjYXBlIGFuYWx5c2lzCisg
ICAgLy8gaGVyZS4gQnV0LCBjdXJyZW50bHkgQWlyIGRvZXNuJ3Qgc3VwcG9ydCBlc2NhcGluZyBh
IFN0YWNrU2xvdCEKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGVzY2FwaW5nIGEgU3Rh
Y2tTbG90IGFuZCBhZGQgZXNjYXBlIGFuYWx5c2lzIHRvIGFsbG9jYXRlU3RhY2soKS4KKyAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDMwCisKKyAgICBh
dXRvIGlzUmVsZXZhbnQgPSBbXSAoY29uc3QgQXJnJiBhcmcpIC0+IGJvb2wgeworICAgICAgICBy
ZXR1cm4gYXJnLmlzU3RhY2soKSAmJiBhcmcuc3RhY2tTbG90KCktPmtpbmQoKSA9PSBTdGFja1Ns
b3RLaW5kOjpBbm9ueW1vdXM7CisgICAgfTsKKworICAgIExpdmVuZXNzPEFyZz4gbGl2ZW5lc3Mo
Y29kZSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRl
cmZlcmVuY2UoY29kZS5zaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzbG90czsKKwor
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIExpdmVuZXNzPEFy
Zz46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBhdXRv
IGludGVyZmVyZSA9IFsmXSAoKSB7CisgICAgICAgICAgICAvLyBGb3JtIGEgY2xpcXVlIG9mIHN0
YWNrIHNsb3RzIHRoYXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0IG9mIHN0YWNrIHNs
b3RzCisgICAgICAgICAgICAvLyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4KKyAgICAgICAgICAg
IHNsb3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6IGxvY2FsQ2FsYy5s
aXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZW1ldmFudChhcmcpKQorICAgICAgICAg
ICAgICAgICAgICBzbG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbG90cy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBzbG90c1tpXTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNsb3RzLnNpemUoKTsgKytqKSB7
CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIgPSBzbG90c1tpXTsKKworICAg
ICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIGZpcnN0ID0gb3V0ZXI7CisgICAgICAgICAgICAg
ICAgICAgIFN0YWNrU2xvdCogc2Vjb25kID0gaW5uZXI7CisgICAgICAgICAgICAgICAgICAgIGlm
IChmaXJzdC0+aW5kZXgoKSA+IHNlY29uZC0+aW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHN0ZDo6c3dhcChmaXJzdCwgc2Vjb25kKTsKKworICAgICAgICAgICAgICAgICAgICBpbnRl
cmZlcmVuY2VbZmlyc3RdLmFkZChzZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBpbnRlcmZl
cmVuY2Vbc2Vjb25kXS5hZGQoZmlyc3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGludGVyZmVyZShsb2NhbENhbGMubGl2ZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsg
aW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQo
aW5zdEluZGV4KSk7CisgICAgICAgICAgICBpbnRlcmZlcmUobG9jYWxDYWxjLmxpdmUoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgYXNzaWduIHN0YWNrIGxvY2F0aW9ucy4g
QXQgaXRzIGhlYXJ0IHRoaXMgYWxnb3JpdGhtIGlzIGp1c3QgZmlyc3QtZml0LiBGb3IgZWFjaAor
ICAgIC8vIFN0YWNrU2xvdCB3ZSBqdXN0IHdhbnQgdG8gZmluZCB0aGUgb2Zmc2V0RnJvbUZQIHRo
YXQgaXMgY2xvc2VzdCB0byB6ZXJvIHdoaWxlIGVuc3VyaW5nIG5vCisgICAgLy8gb3ZlcmxhcCB3
aXRoIG90aGVyIFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdpdGguCisgICAgdW5zaWdu
ZWQgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IGZyYW1lU2l6ZUZvckxvY2tlZDsKKyAgICBWZWN0
b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90czsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNv
ZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgewor
ICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZzZXQuCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBwb3NzaWJsZSBmaXJzdCBmaXQg
b2Zmc2V0cyBhcmU6CisgICAgICAgIC8vIC0gZnJhbWVTaXplRm9yTG9ja2VkIC0gc2xvdC0+Ynl0
ZVNpemUoKQorICAgICAgICAvLyAtIGZvciBhbGwgc2xvdDIgaW4gaW50ZXJmZXJlbmNlW3Nsb3Rd
LCBzbG90Mi0+b2Zmc2V0RnJvbUZQKCkgLSBzbG90LT5ieXRlU2l6ZSgpLgorICAgICAgICAvLyBX
ZSBuZWVkIHRvIGZpbmQgb25lIG9mIHRob3NlIHRoYXQgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCBh
bnlvbmUuCisKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiYgaW50ZXJmZXJpbmdTbG90cyA9
IGludGVyZmVyZW5jZVtzbG90XTsKKyAgICAgICAgb3RoZXJTbG90cy5yZXNpemUoYXNzaWduZWRM
b2NrZWRTdGFja1Nsb3RzLnNpemUoKSArIGludGVyZmVyaW5nU2xvdHMuc2l6ZSgpKTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXpl
KCk7ICsraSkKKyAgICAgICAgICAgIG90aGVyU2xvdHNbaV0gPSBhc3NpZ25lZExvY2tlZFN0YWNr
U2xvdHNbaV07CisgICAgICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90cy5zaXplKCk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBpbnRl
cmZlcmluZ1Nsb3RzKQorICAgICAgICAgICAgb3RoZXJTbG90c1tuZXh0SW5kZXgrK10gPSBvdGhl
clNsb3Q7CisKKyAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOworICAgIH0KKworICAg
IC8vIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3RhY2sgd2UncmUgdXNpbmcgZm9yIHN0YWNrIHNsb3Rz
LgorICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSAwOworICAgIGZvciAoU3Rh
Y2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgIGZyYW1lU2l6ZUZvclN0
YWNrU2xvdHMgPSBzdGQ6Om1heChmcmFtZVNpemVGb3JTdGFja1Nsb3RzLCAtc2xvdC0+b2Zmc2V0
RnJvbUZQKCkpOworCisgICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3Vt
ZW50IGFyZWEgd2UgbmVlZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewor
ICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJn
JiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygp
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVz
ZSA4IGJ5dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKKyAgICAgICAgICAgICAg
ICAgICAgLy8gc3VjaCBhbiBhd2Vzb21lIGFzc3VtcHRpb24uCisgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0
CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7CisgICAgICAg
ICAgICAgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShhcmcub2Zmc2V0KCkgKyA4
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBjb2RlLnNldEZyYW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3RzICsgY29kZS5jYWxs
QXJnQXJlYVNpemUoKSk7CisKKyAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0gdGhlIGNvZGUgdG8g
dXNlIEFkZHIncyBpbnN0ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEgbG9zc2xlc3MKKyAg
ICAvLyB0cmFuc2Zvcm1hdGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBTdGFja1Nsb3RzIGFy
cmF5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggU3RhY2tTbG90IGFueQorICAgIC8vIG9mZnNldC1mcm9t
LUZQIHJlZmVycyB0by4KKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Cisg
ICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcm
IGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkg
eworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAgICAgICAgICAg
YXJnID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0KCkgKyBhcmcu
c3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICAgICAgICAg
IGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpIC0gY29k
ZS5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJBbGxvY2F0ZVN0YWNrX2gKKyNkZWZpbmUgQWlyQWxsb2NhdGVTdGFja19oCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
Q29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFjZXMgb24gdGhlIHN0
YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGluZGV4CisvLyBvcmRl
ciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3QgZml0LgorCit2b2lk
IGFsbG9jYXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBBaXJBbGxvY2F0ZVN0YWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJBcmcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAg
ICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBU
bXA6CisgICAgICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEltbToKKyAgICAgICAgb3V0LnByaW50KCIkIiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIG1fb2Zmc2V0
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgaWYgKG9mZnNldCgp
KQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIo
IiwgYmFzZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmRleDoKKyAgICAg
ICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAg
ICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLCIsIGluZGV4KCkpOworICAgICAgICBpZiAoc2Nh
bGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7CisgICAgICAg
IG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAg
ICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCk7CisgICAgICAg
IG91dC5wcmludCgiKCIsIHBvaW50ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAg
ICAgICAgb3V0LnByaW50KG9mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiKGNhbGxBcmcpIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIG91dC5wcmludChh
c1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlc0Nv
bmQ6CisgICAgICAgIG91dC5wcmludChhc1Jlc3VsdENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHNw
ZWNpYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2luY2x1ZGUgIkFpclRt
cC5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFja1Nsb3Q7CisK
Ky8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3
ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3QoLi4uLCBB
cmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1
YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkgdGVyc2Ug
YmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtpbmQgOiBp
bnQ4X3QgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBUbXAsCisgICAgICAgIEltbSwKKyAg
ICAgICAgSW1tNjQsCisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAorICAgICAgICBDYWxs
QXJnLAorICAgICAgICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAgUmVzQ29uZCwK
KyAgICAgICAgU3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAg
ICAgICBVc2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsKKworICAgIGVu
dW0gVHlwZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAgIH07CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOworCisgICAgc3RhdGljIGJvb2wg
aXNVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAg
IGNhc2UgVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0
eXBlRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNh
c2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgRG91YmxlOgor
ICAgICAgICAgICAgcmV0dXJuIEZQOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gR1A7CisgICAgfQorCisgICAgQXJnKCkKKyAgICAgICAg
OiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorCisgICAgQXJnKEFpcjo6VG1wIHRtcCkK
KyAgICAgICAgOiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFzZSh0bXApCisgICAgeworICAg
IH0KKworICAgIHN0YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBB
cmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tOworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIGltbTY0KGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAgICAgICByZXN1bHQubV9vZmZz
ZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMg
QXJnIGFkZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZhbHVlLCBpbnQzMl90IG9mZnNl
dCA9IDApCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4odmFsdWUpOworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9mZnNldDsgLy8gSSBrbm93LCB5
dWNrLgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgY2Fs
bEFyZyhpbnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNW
YWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkg
eworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2FzZSA0OgorICAg
ICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRp
YyB1bnNpZ25lZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIDQ6CisgICAg
ICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIDM7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIEFyZyBp
bmRleChBaXI6OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5zaWduZWQgc2NhbGUgPSAxLCBp
bnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOwor
ICAgICAgICBBU1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRTY2Fs
ZShzY2FsZSkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
SW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9p
bmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KHNjYWxlKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVsQ29uZDsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNv
bmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBSZXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzcGVjaWFsKEFpcjo6
U3BlY2lhbCogc3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CisgICAgICAgICAgICAmJiBt
X2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9i
YXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAg
ICYmIG1fc2NhbGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAgIGJvb2wgaXNUbXAoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7CisgICAgfQorCisgICAgYm9v
bCBpc0ltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTsKKyAg
ICB9CisKKyAgICBib29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBJbW02NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAgYm9vbCBpc1N0YWNr
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhY2s7CisgICAgfQor
CisgICAgYm9vbCBpc0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBDYWxsQXJnOworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAgIGJvb2wgaXNSZWxD
b25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKKyAg
ICB9CisKKyAgICBib29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
a2luZCgpID09IFJlc0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOworICAgIH0KKworICAgIGJv
b2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSB8fCBpc1N0
YWNrKCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisK
KyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gSW1tIHx8IGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAg
ICB9CisKKyAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIEFpcjo6VG1w
IGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtp
bmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgYm9v
bCBoYXNPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxB
cmc6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2lu
ZCgpID09IFN0YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1f
c2NhbGUpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IENhbGxB
cmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMy
X3Q+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpU
bXAgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7
CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBy
ZXR1cm4gbV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgQWly
OjpTcGVjaWFsKiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gU3BlY2lhbCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4o
bV9vZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9vbCBp
c0ZQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlz
RlAoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVz
ZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBpc0dQ
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW1tOgorICAgICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNh
c2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBjYXNlIENhbGxBcmc6
CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBj
YXNlIFNwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6
CisgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICBjYXNlIEludmFsaWQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxs
cyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMg
YSBGUCB2YWx1ZS4KKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNo
IChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAg
ICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2Ug
SW52YWxpZDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgor
ICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIEJhc2U6CisgICAgICAgIGNhc2UgU3Rh
Y2tTbG90OgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW1tNjQ6IC8vIFll
cywgd2UgYWxsb3cgSW1tNjQgYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3Ig
aW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQVG1wKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBib29sIGhhc1R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChr
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAg
ICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAv
LyBUaGUgdHlwZSBpcyBhbWJpZ3VvdXMgZm9yIHNvbWUgYXJnIGtpbmRzLiBDYWxsIHdpdGggY2Fy
ZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1AoKSA/
IEdQIDogRlA7CisgICAgfQorCisgICAgYm9vbCBpc1R5cGUoVHlwZSB0eXBlKSBjb25zdAorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAg
ICByZXR1cm4gaXNHUCgpOworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIGlz
RlAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKKyAgICB9CisKKyAgICBH
UFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncHIoKTsKKyAg
ICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1Rt
cCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnByKCk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNS
ZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncFRtcEluZGV4KCk7CisgICAgfQorCisgICAg
dW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCku
ZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiB0bXAoKS50bXBJbmRleCgpOworICAgIH0KKworICAgIEFyZyB3
aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghaGFzT2Zmc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIGlm
IChzdW1PdmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0KCksIGFkZGl0aW9uYWxPZmZzZXQpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAg
ICBjYXNlIEFkZHI6CisgICAgICAgICAgICByZXR1cm4gYWRkcihiYXNlKCksIG9mZnNldCgpICsg
YWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICByZXR1
cm4gc3RhY2soc3RhY2tTbG90KCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAg
ICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJldHVybiBjYWxsQXJnKG9mZnNldCgpICsg
YWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1
cm4gaW5kZXgoYmFzZSgpLCBpbmRleCgpLCBzY2FsZSgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxP
ZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFz
dChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQp
IHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1
bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4Ogor
ICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBr
bm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2Ug
aXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgor
ICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQorICAgIC8vCisgICAgLy8gVGhpcyBkZWZz
ICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwgVHlwZSBhcmdUeXBlLCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVu
Y3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAg
ICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0ZWRJbW0zMigpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisj
aWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0IGFzVHJ1
c3RlZEltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChwb2ludGVyVmFsdWUoKSk7
CisgICAgfQorI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhc0FkZHJlc3Mo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQWRkcigpKTsKKyAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5ncHIoKSwgc3RhdGljX2Nhc3Q8aW50MzJf
dD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFz
QmFzZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0luZGV4KCkpOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgIG1fYmFz
ZS5ncHIoKSwgbV9pbmRleC5ncHIoKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlNjYWxl
Pihsb2dTY2FsZSgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0
KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNS
ZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1JlbENv
bmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpS
ZXN1bHRDb25kaXRpb24gYXNSZXN1bHRDb25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzUmVzQ29uZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNz
ZW1ibGVyOjpSZXN1bHRDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fb2Zmc2V0
IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsgSW52YWxpZCB9OworICAgIGludDMyX3QgbV9zY2Fs
ZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9pbmRleDsKK307
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckFyZ19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2Nr
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2
b2lkIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAg
IEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6
cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVBy
ZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJl
cGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4
LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kg
PSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworfQorCitCYXNpY0Js
b2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDog
bV9pbmRleChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFpckJhc2ljQmxvY2tfaAorCisjaW5j
bHVkZSAiQWlyRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1
ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKK2NsYXNzIEluc2VydGlvblNl
dDsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNC
bG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiIyI7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnN0
PiBJbnN0TGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNz
b3JMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29y
TGlzdDsKKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5z
aXplKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2luc3Rz
LmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9pbnN0
cy5lbmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgY29uc3QgSW5zdCYgYXQoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorICAgIEluc3QmIGF0
KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKworICAgIGNvbnN0IElu
c3QmIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorICAgIEluc3QmIGxh
c3QoKSB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
SW5zdD4KKyAgICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBt
X2luc3RzLmFwcGVuZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBcmd1bWVudHMm
Ji4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0KHN0ZDo6
Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAgICAvLyBUaGUg
IjAiIGNhc2UgaXMgdGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28gdGhlICJ0
aGVuIiBjYXNlLiBUaGUgIjEiIGNhc2UgaXMgdGhlCisgICAgLy8gImVsc2UiIGNhc2UsIGFuZCBp
cyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZmFsbC10aHJvdWdoIG9mIGEgY29uZGl0aW9uYWwgYnJh
bmNoLgorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nl
c3NvcnMuc2l6ZSgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEZyZXF1ZW50
ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNb
aW5kZXhdOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsg
cmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNz
b3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorCisgICAgU3VjY2Vzc29yQ29s
bGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vz
c29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxj
b25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFz
aWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29y
cy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayom
IHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRl
eF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJl
ZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisKKyAgICB2b2lk
IGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIHJlbW92ZVByZWRlY2Vzc29y
KEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKKyAg
ICAKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKwor
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBTdWNjZXNz
b3JMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7
CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1w
IHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2spCisg
ICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAg
ICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sq
IG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9jayog
YmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNw
ZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lh
bCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygp
OworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVy
cygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRI
YXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKworQ0NhbGxTcGVjaWFsOjp+Q0NhbGxT
cGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5z
dCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQor
eworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpVc2UsIEFyZzo6R1ApOworICAgIAor
ICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBxdWVyeSB0aGUgYXJnJ3MgdHlwZS4g
VGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdlCisgICAgICAgIC8vIHJlcXVpcmUg
dGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgICAgIGNhbGxiYWNrKGlu
c3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tpXS50eXBlKCkpOworICAgIH0KK30KKwor
Ym9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5h
cmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoaW5z
dC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAgIGlmIChzaXpl
b2Yodm9pZCopID09IDQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYgKHNpemVvZih2b2lkKikgPT0gOCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6
OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgY2Fz
ZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc0dQKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFy
Z3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbaV0uaXNSZWcoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5zdC5hcmdzW2ldID09IFRt
cChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuICBmYWxzZTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0
JiwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEgY2FuIGJlIGEgc3RhY2sgYWRk
cmVzcyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6cmVw
b3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQoreworfQorCitDQ2Fs
bEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhl
bHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIHN3aXRjaCAoaW5zdC5hcmdz
WzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbVB0cjoK
KyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGluc3QuYXJnc1sx
XS5wb2ludGVyVmFsdWUoKSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5jYWxsKHNj
cmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAg
ICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkp
OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIENDYWxsSGVs
cGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFsOjpleHRy
YUNsb2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3Zv
aWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1w
bChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiZnVuY3Rpb24gY2Fs
bCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5lIEFpckNDYWxsU3BlY2lhbF9oCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gVXNlIHRo
aXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBjb3Vyc2Ug
YSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBvYmplY3Qu
IEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJlZ2lzdGVy
LCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRoZSBzZXQg
b2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1lbnRzIHRo
YXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdvcmsgb2Yg
ZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24gd2h5Cisv
LyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRvIGEgY2Fs
bCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0IHRoZXkg
Z2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSByZXBvcnQg
YWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlmIHdlIGhh
ZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIgdG8gYmUg
bGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwgd2hpY2hl
dmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGljIFNwZWNp
YWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNpYWwoKTsK
KworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMu
IEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAgLy8gdXNl
ZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhlIHdheSwg
dGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3BlY2lhbCB0
byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRj
aFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMC4KKworcHJvdGVjdGVkOgorICAgIHZvaWQg
Zm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFj
az4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJv
b2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2
b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJp
ZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMm
LCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBl
eHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV9j
bG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRp
bHMuaCIKKyNpbmNsdWRlICJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKK3sKK30KKworQ29kZTo6
fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhkb3VibGUgZnJlcXVl
bmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNC
bG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3Vs
dCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdCh1
bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFs
dWUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3RhY2tTbG90
KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1ZSkpOworICAgIFN0YWNr
U2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKKyAgICBtX3N0YWNrU2xvdHMuYXBwZW5kKFdURjo6
bW92ZShzbG90KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lhbCogQ29kZTo6YWRk
U3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKK3sKKyAgICBtX3NwZWNp
YWxzLmFwcGVuZChXVEY6Om1vdmUoc3BlY2lhbCkpOworfQorCitDQ2FsbFNwZWNpYWwqIENvZGU6
OmNDYWxsU3BlY2lhbCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAgICAgICBt
X2NDYWxsU3BlY2lhbCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAgICAgICAg
YWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAgIH0KKwor
ICAgIHJldHVybiBtX2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJlYWNoYWJp
bGl0eSgpCit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30KKwordm9p
ZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsK
KyAgICBpZiAobnVtU3RhY2tTbG90cygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xv
dHM6XG4iKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzbG90KSwgIlxuIik7CisgICAg
fQorICAgIGlmIChudW1TcGVjaWFscygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3BlY2lhbHM6
XG4iKTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogc3BlY2lhbHMoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsKKyAgICB9
CisgICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwgIlxuIik7CisgICAg
b3V0LnByaW50KCJDYWxsIGFyZyBhcmVhIHNpemU6ICIsIG1fY2FsbEFyZ0FyZWFTaXplLCAiXG4i
KTsKKyAgICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJz
LCAiXG4iKTsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QKK3sKKyAgICB3aGlsZSAoaW5kZXggPCBzaXplKCkgJiYgIWF0KGluZGV4
KSkKKyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3Vuc2lnbmVkIENv
ZGU6OmZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1
cm4gZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCArIDEpOworfQorCitCYXNpY0Jsb2NrKiBDb2Rl
OjpmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAoreworICAgIHJldHVybiBh
dChmaW5kTmV4dEJsb2NrSW5kZXgoYmxvY2stPmluZGV4KCkpKTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ29kZV9oCisjZGVmaW5l
IEFpckNvZGVfaAorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpclNw
ZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKyNpbmNsdWRlICJSZWdpc3RlckF0
T2Zmc2V0TGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
Q0NhbGxTcGVjaWFsOworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWlyIHsKKworLy8g
VGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJl
cXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0ZWQgbWFjaGlu
ZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUg
Y29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBDb2RlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIFN0YWNrU2xvdCogYWRk
U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1
ZSogPSBudWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRy
PFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8gbWFr
ZSBhIEMgY2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxsU3BlY2lhbCgpOworCisgICAgVG1w
IG5ld1RtcChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpncFRtcEZvcklu
ZGV4KG1fbnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICBy
ZXR1cm4gVG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBzKyspOworICAgICAgICB9CisgICAg
fQorCisgICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1
cm4gbV9udW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJldHVy
biBtX251bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNhbGxBcmdB
cmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9CisKKyAgICAvLyBZ
b3UgY2FuIGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHRvIGZvcmNlIGEgbWluaW11
bSBjYWxsIGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKHVu
c2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSA9IHN0ZDo6bWF4
KG1fY2FsbEFyZ0FyZWFTaXplLCBzaXplKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcmFtZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8gT25seSBwaGFzZXMg
dGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBDdXJyZW50
bHksIG9ubHkKKyAgICAvLyBBaXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRoaXMuCisgICAgdm9p
ZCBzZXRGcmFtZVNpemUodW5zaWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAgICAgICAgbV9mcmFt
ZVNpemUgPSBmcmFtZVNpemU7CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNh
bGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKwor
ICAgIC8vIFJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVucmVhY2hhYmxlIGJs
b2Nrcy4KKyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3Jb
XSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAvLyBG
aW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5k
IGluZGV4JyA+PSBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2ln
bmVkIGluZGV4KSBjb25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3Vj
aCB0aGF0IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID4gaW5kZXguCisgICAgdW5zaWdu
ZWQgZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIEJhc2lj
QmxvY2sqIGZpbmROZXh0QmxvY2soQmFzaWNCbG9jayopIGNvbnN0OworCisgICAgY2xhc3MgaXRl
cmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgIDog
bV9jb2RlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoQ29kZSYgY29kZSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgICAgICAgICA6IG1fY29kZSgmY29kZSkKKyAgICAgICAgICAgICwgbV9pbmRleChtX2NvZGUt
PmZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9jb2RlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fY29kZS0+Zmlu
ZEZpcnN0QmxvY2tJbmRleChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhl
ci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDb2RlKiBt
X2NvZGU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQor
CisgICAgY2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAg
U3RhY2tTbG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAgIDogbV9j
b2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAgICAgICBT
dGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFj
a1Nsb3RzW2ldLmdldCgpOyB9CisgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRl
cmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAg
ICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0
b3IoY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4
KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAg
ICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3RhY2tTbG90c0NvbGxl
Y3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
ICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cih0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcih0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2Rl
JiBtX2NvZGU7CisgICAgfTsKKworICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHN0YWNrU2xvdHMo
KSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKKyAg
ICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3BlY2lh
bHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29kZShjb2Rl
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6ZSgpOyB9CisgICAgICAgIFNwZWNpYWwqIGF0
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFsc1tpXS5nZXQo
KTsgfQorICAgICAgICBTcGVjaWFsKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAg
IHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29s
bGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTcGVjaWFs
c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChp
bmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3BlY2lh
bCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9j
b2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRl
cmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5k
ZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9p
bmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0
ZToKKyAgICAgICAgICAgIGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOwor
ICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgICAg
IGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHNpemUoKSk7IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisg
ICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1cm4gU3BlY2lhbHND
b2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNw
ZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIENDYWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNpYWwgeyBu
dWxscHRyIH07CisgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQg
bV9udW1GUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9mcmFtZVNpemUgeyAwIH07CisgICAg
dW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUgeyAwIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEFp
ckZyZXF1ZW50ZWRCbG9ja19oCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8QmFzaWNC
bG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBBaXJGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorCisj
aW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNs
dWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGlu
Zy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVy
cyYgaml0KQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRl
KGNvZGUsICJpbml0aWFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAg
ZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9
CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0aW9ucyBhbmQgdHJh
bnNmb3JtYXRpb25zLgorICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXphdGlvbnMuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NgorCisgICAg
Ly8gVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBoYXZlIGEgcmVhbCByZWdpc3RlciBhbGxvY2F0b3Iu
IFRoZW4sIHdlIGNvdWxkIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKQorICAgIC8vIGluIHBsYWNlIG9m
IHRoZSByZWdpc3RlciBhbGxvY2F0b3Igb25seSBmb3IgdGVzdGluZy4KKyAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NworICAgIHNwaWxs
RXZlcnl0aGluZyhjb2RlKTsKKworICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHByb2xv
Z3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4gSXQg
YWxzbworICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVz
IHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgorICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUp
OworCisgICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcgQXJncyBpbnRvIEFk
ZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcworICAgIC8vIHRoaXMg
YnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3VsZCBiZSBwcmV0dHkg
ZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQorICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHdv
cnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgorICAgIGFsbG9jYXRlU3RhY2soY29kZSk7CisKKyAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBoYXZlIGEgY29kZSBsYXlvdXQgb3B0aW1pemF0
aW9uIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDQ3OAorCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUo
Y29kZSwgImZpbmFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0
YUxvZygiQWlyIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7
CisgICAgfQorCisgICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJhdGUgY29kZS4KKyAgICBqaXQuZW1p
dEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuYWRkUHRyKFRydXN0ZWRJbW0zMigtY29kZS5m
cmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAg
ICBHZW5lcmF0aW9uQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuY29kZSA9IGNvZGU7Cisg
ICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tMYWJlbHMo
Y29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVt
cExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0gWyZdIChD
Q2FsbEhlbHBlcnM6Okp1bXAganVtcCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAgICAgIGlm
IChibG9ja0xhYmVsc1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAubGlua1Rv
KGJsb2NrTGFiZWxzW3RhcmdldF0sICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisKKyAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAgICB9Owor
CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxvY2tKdW1w
c1tibG9ja10ubGluaygmaml0KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytp
KSB7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGluc3QuZ2VuZXJhdGUo
aml0LCBjb250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNT
ZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9w
Y29kZSgpID09IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9
PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlKCkgPT0gUmV0KSB7CisgICAgICAgICAgICAv
LyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3Vl
IGluIEFpciwgc28gd2UgbmVlZCB0bworICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRl
LgorICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBq
aXQucmV0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+bGFzdCgpLmdlbmVyYXRlKGpp
dCwgY29udGV4dCk7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykKKyAgICAgICAg
ICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIHN3aXRjaCAo
YmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBB
U1NFUlQoIWp1bXAuaXNTZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAx
OgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGxpbmsoanVtcCwg
YmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vz
c29yQmxvY2soMSkgIT0gY29kZS5maW5kTmV4dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgICAg
ICBsaW5rKGppdC5qdW1wKCksIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygxKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQYXRocykKKyAgICAgICAgbGF0ZVBh
dGgtPnJ1bihqaXQsIGNvbnRleHQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gKKyNkZWZpbmUg
QWlyR2VuZXJhdGVfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOwor
CituYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhp
cyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFjayBhbGxvY2F0aW9u
IGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CisvLyByZWdpc3RlciBhbGxvY2F0aW9uIGFu
ZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLCBhbmQgdGhlbiBnZW5lcmF0ZXMgdGhlIGNvZGUg
dXNpbmcgdGhlIGdpdmVuCisvLyBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlz
IG1heSBjYWxsIGNhbGxiYWNrcyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcworLy8gZ2Vu
ZXJhdGluZy4KK3ZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYpOworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25D
b250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdl
bmVyYXRpb25Db250ZXh0X2gKKyNkZWZpbmUgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCisjaW5j
bHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQgeworICAgIHR5cGVk
ZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0
Jik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOwor
CisgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKKyAgICBDb2RlKiBjb2Rl
OworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWly
R2VuZXJhdGlvbkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckhhbmRs
ZUNhbGxlZVNhdmVzLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5z
ZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgaGFuZGxlQ2FsbGVlU2F2
ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImhhbmRs
ZUNhbGxlZVNhdmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1c2VkQ2FsbGVlU2F2ZXM7CisKKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGlu
c3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoCisgICAgICAg
ICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdCBmaXJz
dCB3ZSBqdXN0IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAgICAgICAgICAgICAgICAgICB1c2Vk
Q2FsbGVlU2F2ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRvIHJlYWxseSBnZXQgdGhlIGNhbGxl
ZSBzYXZlcy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOworCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSBSZWdp
c3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworCisgICAgc2l6ZV90IGJ5dGVTaXpl
ID0gMDsKKyAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5mb3JFYWNoKAorICAgICAgICBb
Jl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSB7CisgICAgICAgICAgICBieXRlU2l6
ZSA9IHN0ZDo6bWF4KC1lbnRyeS5vZmZzZXQoKSwgYnl0ZVNpemUpOworICAgICAgICB9KTsKKwor
ICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFja1Nsb3QoYnl0ZVNpemUsIFN0
YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCBzaW5jZSB3
ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0YWNrIHNsb3QgdG8gdGhp
cworICAgIC8vIGFyZWEuCisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAoLWJ5dGVTaXpl
KTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRy
eSkgeworICAgICAgICByZXR1cm4gQXJnOjpTdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgp
ICsgYnl0ZVNpemUpOworICAgIH07CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNv
ZGUpOworICAgIAorICAgIC8vIEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9n
dWUuCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFjaCgKKyAgICAgICAgWyZd
IChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgeworICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAwLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92
ZSA6IE1vdmVEb3VibGUsIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRyeSkpOworICAgICAg
ICB9KTsKKyAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKworICAgIC8vIE5vdyBp
bnNlcnQgcmVzdG9yZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogY29kZSkgeworICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsKKyAgICAg
ICAgaWYgKGxhc3Qub3Bjb2RlKCkgIT0gUmV0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgIFsm
XSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIHsKKyAgICAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICBibG9jay0+c2l6ZSgpIC0gMSwg
ZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLAorICAgICAgICAgICAgICAg
ICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKKyAgICAgICAgICAgIH0pOwor
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKyNkZWZpbmUg
QWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgcGhhc2UgaWRlbnRpZmll
cyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUgdGhl
bSBpbiB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFuZGF0
b3J5IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtlIHRoaXMgbW9y
ZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUKKy8vIHBvd2Vy
ZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5rIHdyYXBwaW5nOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4CisvLyBXZSBzaG91bGQgbWFrZSB0aGlzIGlu
dGVyYWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmKTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySGFuZGxlQ2FsbGVlU2F2
ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNl
cnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaW5jbHVkZSAiQWlyQmFz
aWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQorewor
ICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5tX2luc3RzLCBtX2luc2VydGlvbnMpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisjZGVmaW5lIEFpckluc2VydGlv
blNldF9oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQ29kZTsKKwor
dHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247CisKK2NsYXNzIEluc2VydGlv
blNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUmIGNvZGUpCisgICAgICAgIDog
bV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUmIGNvZGUoKSB7IHJldHVybiBt
X2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmRJbnNl
cnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQo
c3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwgSW5zdCYmIGluc3Qp
CisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZv
cndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgSW5zdChzdGQ6
OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgdm9pZCBl
eGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAg
VmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAiLCBsaXN0
RHVtcChhcmdzKSwgIiAgOyAiLCAqb3JpZ2luKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVmaW5lIEFpckluc3Rf
aAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisKK25hbWVz
cGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0
OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBB
cmdMaXN0OworCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAg
ICA6IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9w
Y29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCisgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAsIG9yaWdp
bihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAg
SW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVu
dHMpCisgICAgICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikK
KyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29k
ZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAgICAgIDog
YXJncyhXVEY6Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAg
ICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0
aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8g
dXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8g
YmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVu
IHlvdSdyZQorICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBv
bmx5IHdhbGtzIHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBp
dCBkb2Vzbid0IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcmIGFyZyA6IGFyZ3MpCisgICAg
ICAgICAgICBhcmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAgfQorCisgICAgdHlwZWRl
ZiB2b2lkIEVhY2hBcmdDYWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSk7CisgICAg
CisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4gVGhpcyBm
dW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBcmcoY29u
c3QgRnVuY3RvciYgZnVuY3Rvcik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0
bXAsIHJvbGUsIHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmb3JFYWNoVG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JF
YWNoQXJnUm9sZSgKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBB
cmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5
cGUsIGZ1bmN0b3IpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gVGhpbmcgY2Fu
IGJlIGVpdGhlciBBcmcgb3IgVG1wLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsK
KworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwq
LiBUaGlzIHVubG9ja3Mgc29tZSBleHRyYSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3Bl
Y2lhbCgpIGNvbnN0OworCisgICAgLy8gUmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMg
Y2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisg
ICAgLy8gZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0
dXJucyB0cnVlLgorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsK
KworICAgIC8vIFVzZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRo
aXMgc2hvdWxkIGJlIGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQg
Zm9yIGVmZmljaWVuY3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1Nw
ZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0
IFJlZ2lzdGVyU2V0Jik7CisKKyAgICAvLyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0
aGUgdmFsaWQgZm9ybXMgcmlnaHQgbm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVk
IGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7
CisKKyAgICAvLyBBc3N1bWluZyB0aGlzIGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSBy
aWdodCBub3csIHdpbGwgaXQgc3RpbGwgYmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZv
cm1zIGlmIHdlIHB1dCBhbiBBZGRyIHJlZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Ns
b3Qgb3IgQ2FsbEFyZywgb2YgY291cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3Bp
bGxpbmcgdXNlcyB0aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMg
dGhhdCBuZWVkIHNwaWxsaW5nOworICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhp
cyB0byBzZWUgaWYgaXQgY2FuIHJlcGxhY2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRy
LiBJZiBpdAorICAgIC8vIGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBB
cmcncyBmb3JFYWNoVG1wIHRvIGRvIGEgcmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3Iu
cmIuCisgICAgYm9vbCBhZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBH
ZW5lcmF0ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxp
dGVyYWxseSBvdXIgYmFja2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQg
cmV0dXJucyB0aGUganVtcCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBj
YXNlLCB3aXRoIHRoZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhp
cyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAg
IENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29u
dGV4dCYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdM
aXN0IGFyZ3M7CisgICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMg
b3JpZ2luYXRlZCBmcm9tLgorICAgIE9wY29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJJbnN0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdElubGluZXNfaAorI2RlZmluZSBBaXJJbnN0
SW5saW5lc19oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlVXRp
bHMuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFscy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZvckVhY2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPFRtcD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBpbnN0LmZvckVhY2hUbXAoZnVuY3Rvcik7CisgICAgfQorfTsK
K3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8QXJnPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgZm9y
RWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JF
YWNoKCp0aGlzLCBmdW5jdG9yKTsKK30KKworYm9vbCBJbnN0OjpoYXNTcGVjaWFsKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYXJncy5zaXplKCkgJiYgYXJnc1swXS5pc1NwZWNpYWwoKTsKK30KKwor
Y29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncygpCit7CisgICAgQVNT
RVJUKGhhc1NwZWNpYWwoKSk7CisgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUNs
b2JiZXJlZFJlZ3MoKnRoaXMpOworfQorCit2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMo
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgQVNTRVJUKGhhc1NwZWNp
YWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdpc3RlcnMoKnRoaXMs
IHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1NoaWZ0VmFsaWQoSW5zdCYgaW5z
dCkKK3sKKyNpZiBDUFUoWDg2KQorICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJl
Z2lzdGVyOjpjeCk7CisjZWxzZQorICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9ICAgCisKK2lu
bGluZSBib29sIGlzTHNoaWZ0MzJWYWx1ZShJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1No
aWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpckxpdmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaW5jbHVkZSAiQWlyQmFz
aWNCbG9jay5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBZb3UgY2FuIGNvbXB1dGUgbGl2ZW5l
c3Mgb3ZlciBUbXAncyBvciBvdmVyIEFyZydzLiBJZiB5b3UgY29tcHV0ZSBvdmVyIEFyZydzLCB5
b3UgZ2V0IGJvdGgKKy8vIHN0YWNrIGxpdmVuZXNzIGFuZCB0bXAgbGl2ZW5lc3MuCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNzIExpdmVuZXNzIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVz
cyhDb2RlJiBjb2RlKQorICAgIHsKKyAgICAgICAgbV9saXZlQXRIZWFkLnJlc2l6ZShjb2RlLnNp
emUoKSk7CisgICAgICAgIG1fbGl2ZUF0VGFpbC5yZXNpemUoY29kZS5zaXplKCkpOworCisgICAg
ICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IHNlZW47CisKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0g
dHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNoYW5nZWQpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBm
YWxzZTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgp
OyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBj
b2RlLmF0KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMo
KnRoaXMsIGJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBi
bG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCisgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2Fs
Yy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBib29sIGZp
cnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VGlt
ZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1fbGl2ZUF0SGVhZFtibG9ja10pCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAg
ICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVj
ZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29y
XS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbENhbGMubGl2ZSgpLmJlZ2luKCks
IGxvY2FsQ2FsYy5saXZlKCkuZW5kKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdID0gbG9jYWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2
ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBs
aXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fbGl2ZUF0VGFpbFtibG9ja107CisgICAgfQorCisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhh
cyB0byBiZSBydW4gaW4gcmV2ZXJzZS4KKyAgICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgTG9jYWxDYWxjKExpdmVuZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxv
Y2spCisgICAgICAgICAgICA6IG1fbGl2ZShsaXZlbmVzcy0+bGl2ZUF0VGFpbChibG9jaykpCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZl
KCkgY29uc3QgeyByZXR1cm4gbV9saXZlOyB9CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+JiYgdGFr
ZUxpdmUoKSB7IHJldHVybiBXVEY6Om1vdmUobV9saXZlKTsgfQorCisgICAgICAgIHZvaWQgZXhl
Y3V0ZShJbnN0JiBpbnN0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUg
ZGVmJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAgICAgICAgICAgICAg
IFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShhcmcpOworICAgICAgICAgICAgICAg
IH0pOworCisgICAgICAgICAgICAvLyBOZXh0IGhhbmRsZSBjbG9iYmVyZWQgcmVnaXN0ZXJzLgor
ICAgICAgICAgICAgaWYgKGluc3QuaGFzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICAgICAgaW5z
dC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbdGhp
c10gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoVGhp
bmcocmVnKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIHVzZSdzLgorICAg
ICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRo
aW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbGl2ZS5hZGQoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFzaFNldDxUaGluZz4gbV9saXZlOworICAgIH07
CisgICAgCitwcml2YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+
PiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+
IG1fbGl2ZUF0VGFpbDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEFpckxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBTeWxs
YWJ1czoKKyMKKyMgUm9sZXMgYW5kIHR5cGVzOgorIyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJhbC1w
dXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1cnBv
c2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVyYWwt
cHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVnaXN0
ZXIgb3IgdmFsdWUKKyMgRDpGID0+IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisj
IFVEOkYgPT4gdXNlIGFuZCBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIworIyBB
cmd1bWVudCBraW5kczoKKyMgVG1wID0+IHRlbXBvcmFyeSBvciByZWdpc3RlcgorIyBJbW0gPT4g
MzItYml0IGltbWVkaWF0ZSBpbnQKKyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0CisjIEFkZHIgPT4g
YWRkcmVzcyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJhc2VJbmRl
eCBhZGRyZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhlIHBhcnNlciB2aWV3
cyB0aGVzZSB0aGluZ3MgYXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0aGF0IHRoZXkgZmFs
bCBpbnRvIHR3byBkaXN0aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28sIGFsdGhvdWdoIHRo
aXMgZmlsZSB1c2VzIGEgcGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwgbm9uZSBvZiB0aGUg
d2hpdGVzcGFjZSBvcgorIyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBwYXJz
ZXIuIEZvciBleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQyIFU6RywgVUQ6RiBJ
bW0sIFRtcCBBZGRyLCBUbXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQga25vdyB0aGF0IHRo
aXMgaXMgdGhlIHNhbWUgYXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAgICAgSW1tLCBUbXAK
KyMgICAgIEFkZHIsIFRtcAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1Y3Rpb24gdGhhdCB1
c2VzIGEgR1BSIG9yIGFuIGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBhIGZsb2F0IHJlZ2lz
dGVyLgorCisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBsZWFkaW5nIGNhcGl0
YWwgKEFkZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1ibGVyCisjIEFQSSB0
aGF0IGhhcyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitOb3AKKworQWRkMzIgVTpH
LCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAgIEFk
ZHIsIFRtcAorICAgIFRtcCwgQWRkcgorCitBZGQzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBU
bXAsIFRtcAorCitBbmQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisg
ICAgVG1wLCBBZGRyCisgICAgQWRkciwgVG1wCisgICAgSW1tLCBBZGRyCisKK0xzaGlmdDMyIFU6
RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisKK011bDMyIFU6RywgVUQ6Rwor
ICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisKK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRt
cAorICAgIEltbSwgVG1wCisgICAgSW1tNjQsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkICMg
VGhpcyBtZWFucyB0aGF0ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMgImxv
YWQiIG5vdCAibW92ZSIuCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlCisKK01vdmVEb3VibGUgVTpG
LCBEOkYKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgVG1w
LCBBZGRyIGFzIHN0b3JlRG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1w
LCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAorCitCcmFuY2hB
ZGQzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBS
ZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRt
cCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hNdWwzMiBVOkcsIFU6Rywg
VUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBBZGRyLCBU
bXAKKworQnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRt
cCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAg
ICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTmVn
MzIgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKworSnVtcCAvYnJhbmNoCisK
K1JldCAvdGVybWluYWwKKworQnJlYWtwb2ludCAvdGVybWluYWwKKworIyBBaXIgYWxsb3dzIGZv
ciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGly
ZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9w
ZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCisjaW5jbHVk
ZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21t
b24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIG5hbWUpCisg
ICAgOiBtX2NvZGUoY29kZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGRE
dW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgIiwgbmFt
ZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIGlmIChzaG91
bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJpbmco
Y29kZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBpZiAoc2hvdWxk
VmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUsIG1fbmFtZSwg
bV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3Bl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNl
U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUGhhc2VTY29wZV9oCisj
ZGVmaW5lIEFpclBoYXNlU2NvcGVfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
Q29kZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhh
c2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShDb2RlJiwgY29uc3QgY2hhciogbmFt
ZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0
ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJp
bmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gQWlyUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWly
UmVnaXN0ZXJQcmlvcml0eS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHNJblByaW9yaXR5T3JkZXIo
KQoreworICAgIHN0YXRpYyBWZWN0b3I8R1BSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAg
ICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEdQUlJlZz4oKTsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJlZzo6YWxsR1BScygpOworICAgICAgICAgICAg
YWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAg
YWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7Cisg
ICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbCkgeworICAgICAg
ICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZv
ciAoUmVnIHJlZyA6IGFsbCkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChy
ZWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdDsKK30KKworY29uc3Qg
VmVjdG9yPEZQUlJlZz4mIGZwc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgc3RhdGljIFZlY3Rv
cjxGUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAg
c3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAg
IHJlc3VsdCA9IG5ldyBWZWN0b3I8RlBSUmVnPigpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQg
YWxsID0gUmVnOjphbGxGUFJzKCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZl
ID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGZvciAo
UmVnIHJlZyA6IGFsbCkgeworICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVn
KSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbCkgeworICAgICAgICAgICAg
ICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQt
PmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICByZXR1
cm4gKnJlc3VsdDsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIo
QXJnOjpUeXBlIHR5cGUpCit7CisgICAgc3RhdGljIFZlY3RvcjxSZWc+KiByZXN1bHRbQXJnOjpu
dW1UeXBlc107CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxs
X29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdFtB
cmc6OkdQXSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChHUFJSZWcgcmVn
IDogZ3Byc0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQ
XS0+YXBwZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXSA9IG5ldyBW
ZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChGUFJSZWcgcmVnIDogZnByc0luUHJpb3Jp
dHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXS0+YXBwZW5kKFJlZyhy
ZWcpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHRbdHlwZV07Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJSZWdpc3RlclByaW9yaXR5X2gKKyNkZWZpbmUg
QWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJG
UFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25z
dCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpOworY29uc3QgVmVjdG9yPEZQ
UlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4g
c3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lz
dGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEdQUlJlZz4m
IGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGdwc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9Owor
dGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+IHsKKyAg
ICBjb25zdCBWZWN0b3I8RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZnBzSW5Q
cmlvcml0eU9yZGVyKCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+Citjb25zdCBW
ZWN0b3I8QmFuazo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAg
cmV0dXJuIFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7
Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclJlZ2lz
dGVyUHJpb3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNw
ZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0
cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK1NwZWNpYWw6OlNwZWNpYWwoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1fbmFtZShuYW1l
KQorICAgICwgbV9pbmRleChVSU5UX01BWCkKK3sKK30KKworU3BlY2lhbDo6flNwZWNpYWwoKQor
eworfQorCitDU3RyaW5nIFNwZWNpYWw6Om5hbWUoKSBjb25zdAoreworICAgIFN0cmluZ1ByaW50
U3RyZWFtIG91dDsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIHJldHVybiBvdXQudG9DU3RyaW5n
KCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChkdW1wUHJlZml4KTsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIGlmICht
X2luZGV4ICE9IFVJTlRfTUFYKQorICAgICAgICBvdXQucHJpbnQobV9pbmRleCk7Cit9CisKK3Zv
aWQgU3BlY2lhbDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoKnRoaXMsICI6ICIpOworICAgIGRlZXBEdW1wSW1wbChvdXQpOworfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJT
cGVjaWFsX2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIEdlbmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICImIjsKKyAgICAKKyAg
ICBTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+U3BlY2lhbCgpOworCisgICAgQ1N0cmluZyBuYW1l
KCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2Nv
cGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAgdmlydHVhbCBib29s
IGlzVmFsaWQoSW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYs
IHVuc2lnbmVkIGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMgY2FsbGVkIG9uIGZv
ciBlYWNoIEluc3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0IHRoZXJlIGlzIG5v
IHdheSB0bworICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRzIHVzZWQgZnJvbSBq
dXN0IG9uZSBJbnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUuIFNvLAorICAgIC8v
IGlmIHlvdSB3YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRvIGdlbmVyYXRlKCks
IHRoZW4geW91IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkgR2VuZXJhdGUgQWly
IHRoYXQgc3RhcnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRjaCBJbnN0LCBhbmQg
dGhlbiBtZXJnZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlzIGlzIHByb2JhYmx5
IG5vdCBncmVhdCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlIHRoYXQKKyAg
ICAvLyAgICBBaXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3VjaCBkdXBsaWNhdGlv
biBkaWRuJ3QgY2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAgICAvLyAgICByZWdp
c3RlciBhc3NpZ25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUgU3BlY2lhbCBtYWlu
dGFpbiBhIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3JrcyBiZWNhdXNlIHRo
ZSBhbmFseXNpcworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNhbGwgaXMgcGVyZm9y
bWVkIGp1c3QgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMgbm8gd2F5CisgICAg
Ly8gICAgZm9yIHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5zdHMgdG8gYmUgcmVh
bGxvY2F0ZWQuIFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAgICBjb25zdWx0IHRo
ZSBIYXNoTWFwLgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291bGQgdXNlICgxKSBh
bmQgZmlyZSB1cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxscy4KKyAgICAvLwor
ICAgIC8vIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIHJlcG9ydFVzZWRS
ZWdpc3RlcnMoKSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAvLyBhcyBnZW5l
cmF0ZSgpLiBJZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291bGQganVzdCBoYXZl
IGVhY2ggU3BlY2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVjdG9yIG9mIFJlZ2lz
dGVyU2V0J3MgYW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUgcmlnaHQgb3JkZXIg
aW4KKyAgICAvLyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZmZXJlbmNlIGlzIHVu
bGlrZWx5IHRvIGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAgIC8vIHBlcmZvcm1h
bmNlIG9mIHRoZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8vIEN1cnJlbnRseSwg
d2UgZG8gKDEpIGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydFVzZWRS
ZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAgIAorICAgIHZpcnR1
YWwgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5l
cmF0aW9uQ29udGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVnaXN0ZXJTZXQmIGV4
dHJhQ2xvYmJlcmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcm90
ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAw
OworICAgIHZpcnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBjb25zdCBjaGFyKiBt
X25hbWU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERlZXBTcGVjaWFsRHVt
cCB7CitwdWJsaWM6CisgICAgRGVlcFNwZWNpYWxEaW1wKFNwZWNpYWwqIHNwZWNpYWwpCisgICAg
ICAgIDogbV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3BlY2lhbCkKKyAg
ICAgICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3BlY2lh
bCogbV9zcGVjaWFsOworfTsKKworRGVlcFNwZWNpYWxEdW1wIGRlZXBEdW1wKFNwZWNpYWwqIHNw
ZWNpYWwpCit7CisgICAgcmV0dXJuIERlZXBTcGVjaWFsRHVtcChzcGVjaWFsKTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZl
cnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpclBo
YXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2Nv
cGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxFdmVyeXRoaW5nIik7CisKKyAgICAvLyBXZSB3YW50
IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVy
eSBiYXNpYyBibG9jay4KKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJT
ZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBMaXZlbmVzczxUbXA+IGxpdmVu
ZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAg
IExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAg
ICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkgKyAxKTsKKwor
ICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVkIGluZGV4KSB7Cisg
ICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0ID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5kZXhd
OworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAg
ICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0LnNldCh0
bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2V0VXNlZFJl
Z2lzdGVycyhibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBs
b2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAgICBzZXRV
c2VkcmVnaXN0ZXJzKGluc3RJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbGxv
Y2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBh
bGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOworICAgIGZvciAodW5zaWduZWQgdHlwZUluZGV4
ID0gMDsgdHlwZUluZGV4IDwgQXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgpIHsKKyAgICAgICAg
VmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90c1t0eXBlSW5kZXhd
OworICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6VHlwZT4odHlwZUlu
ZGV4KTsKKyAgICAgICAgc3RhY2tTbG90cy5yZXNpemUoY29kZS5udW1UbXBzKHR5cGUpKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNvZGUubnVtVG1wcyh0eXBlKTsgdG1wSW5k
ZXgtLTspCisgICAgICAgICAgICBzdGFja1Nsb3RzW3RtcEluZGV4XSA9IGNvZGUuYWRkU3RhY2tT
bG90KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgfQorCisgICAgSW5zZXJ0aW9u
U2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJs
b2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0
QmVmb3JlID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4XTsKKyAgICAgICAgICAgIFJl
Z2lzdGVyU2V0JiBzZXRBZnRlciA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleCArIDFd
OworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAg
ICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBhbGxTdGFja1Nsb3RzW3R5cGVdW3Rt
cC50bXBJbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3RhY2so
c3RhY2tTbG90KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGZpZ3VyZSBvdXQg
YSByZWdpc3RlciB0byB1c2UuIEhvdyB3ZSBkbyB0aGF0IGRlcGVuZHMgb24gdGhlIHJvbGUuCisg
ICAgICAgICAgICAgICAgICAgIFJlZyBjaG9zZW5SZWc7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAocm9sZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkRlZjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEFmdGVyLmdldChyZWcpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlRGVmOgorICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRB
ZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRl
ci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNl
dChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKGNob3NlblJlZyk7CisKKyAgICAgICAgICAg
ICAgICAgICAgdG1wID0gVG1wKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAgICAgICAgT3Bj
b2RlIG1vdmUgPSB0eXBlID09IEFyZzo6R1AgPyBNb3ZlIDogTW92ZURvdWJsZQorCisgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorI2RlZmluZSBBaXJTcGlsbEV2
ZXJ5dGhpbmdfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaXMgYSBwaGFzZSBmb3IgdGVzdGluZy4gSXQg
YmVoYXZlcyBsaWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGluIHRoZSBzZW5zZSB0aGF0IGl0Cisv
LyBlbGltaW5hdGVzIHRlbXBvcmFyaWVzIGZyb20gdGhlIHByb2dyYW0uIEl0IGFjY29tcGxpc2hl
cyB0aGlzIGJ5IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8vIHRlbXBvcmFyaWVzLiBUaGUgcmVzdWx0
aW5nIGNvZGUgaXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVmZmljaWVudC4gVGhpcyBwaGFzZSBpcyBn
cmVhdCBpZiB5b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUgaXMgYSBidWcgaW4gdGhlIHJlZ2lzdGVy
IGFsbG9jYXRvci4gWW91IGNhbiBjb25maXJtIHRoaXMgYnkgcnVubmluZyB0aGlzCisvLyBwaGFz
ZSBpbnN0ZWFkIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisvLworLy8gTm90ZSB0aGF0IGV2
ZW4gdGhvdWdoIHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBlc3QgdGhpbmcgcG9zc2libGUsIGl0
J3Mgbm90IGV2ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1bGFybHkgZWZmaWNpZW50IHdheS4g
U28sIGRvbid0IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcgdGhpcyBwaGFzZSB0byByZWR1Y2Ug
Y29tcGlsZXIKKy8vIGxhdGVuY3kuIElmIHlvdSB3YW50ZWQgdG8gZG8gdGhhdCwgeW91IHNob3Vs
ZCBjb21lIHVwIHdpdGggYSBjbGV2ZXIgYWxnb3JpdGhtIGluc3RlYWQgb2YgdXNpbmcKKy8vIHRo
aXMgc2lsbHkgdGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmKTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3BpbGxFdmVyeXRoaW5n
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Rh
Y2tTbG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFN0YWNrU2xvdDo6c2V0T2Zmc2V0RnJvbUZQKGludHB0
cl90IHZhbHVlKQoreworICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgaWYgKG1fdmFs
dWUpCisgICAgICAgIG1fdmFsdWUtPm1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7Cit9CisKK3ZvaWQg
U3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJzdGFjayIsIG1faW5kZXgpOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRl
U2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBt
X2tpbmQpOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBvdXQucHJpbnQoIiwgdmFsdWUgPSAi
LCAqbV92YWx1ZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclN0YWNrU2xvdF9oCisjZGVmaW5lIEFpclN0
YWNrU2xvdF9oCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlIDx3dGYv
Tm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90dmFsdWU7CisKK25hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBTdGFja1Nsb3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0
YWNrU2xvdCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5z
aWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tT
bG90S2luZCBraW5kKCkgY29uc3QgeyByZXV0cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB1bnNpZ25lZCBhbGlnbm1lbnQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkKKyAgICAgICAgICAg
IHJldHVybiAxOworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAyKQorICAgICAgICAgICAgcmV0
dXJuIDI7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDQpCisgICAgICAgICAgICByZXR1cm4g
NDsKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorCisgICAgU3RhY2tTbG90VmFsdWUqIHZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgLy8gWmVybyBtZWFucyB0aGF0IGl0
J3Mgbm90IHlldCBhc3NpZ25lZC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7
IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBq
dXN0IGJlIGNhbGxlZCBmcm9tIHBoYXNlcyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24uIEJ1dCB5
b3UgY2FuCisgICAgLy8gdG90YWxseSBmb3JjZSBhIHN0YWNrIHNsb3QgdG8gbGFuZCBhdCBzb21l
IG9mZnNldC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCk7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFj
a1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtp
bmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXpl
KQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAodmFs
dWUtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoYnl0ZVNpemUpOworICAgIH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
aW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAg
U3RhY2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7
CitwdWJsaWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoU3RhY2tTbG90KiBzbG90KQorICAgICAg
ICA6IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisgICAgICAgICAgICBt
X3Nsb3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0YWNrU2xvdCogbV9zbG90Owor
fTsKKworRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoU3RhY2tTbG90KiBzbG90KQoreworICAg
IHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3RhY2tTbG90X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFRtcDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50
KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc1JlZygpKSB7
CisgICAgICAgIG91dC5wcmludChyZWcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoaXNHUFRtcCgpKSB7CisgICAgICAgIG91dC5wcmludCgiJXRtcCIsIGdwVG1wSW5kZXgo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIiVmdG1wIiwgZnBU
bXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyVG1wX2gKKyNkZWZpbmUgQWlyVG1wX2gKKworI2luY2x1ZGUgIlJlZy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIEEg
VG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgYSByZWdpc3Rlci4gSXQgY2FuIGJlIHVzZWQgdG8g
cmVmZXIgdG8gYW55IEdQUiBvciBGUFIuIEl0IGNhbiBhbHNvCisvLyBiZSB1c2VkIHRvIHJlZmVy
IHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9yYXJ5KS4gTGlrZSBtYW55
IEFpciBjbGFzc2VzLCB3ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJzZSBuYW1pbmcgc2luY2Ug
d2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGlzIG5hbWUgYSBsb3QuCisKK2NsYXNzIFRtcCB7CitwdWJs
aWM6CisgICAgVG1wKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgeworICAgIH0KKworICAg
IGV4cGxpY2l0IFRtcChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJlZykgeworICAgICAg
ICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVH
UFIocmVnLmdwcigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3ZhbHVl
ID0gZW5jb2RlRlBSKHJlZy5mcHIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV92
YWx1ZSA9IDA7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKGNvbnN0IEFyZyYpOworCisgICAg
c3RhdGljIFRtcCBncFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAg
VG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVHUFRtcChpbmRleCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBmcFRtcEZv
ckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICEhbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlAoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUpOworICAgIH0K
KworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2Rl
ZEdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0VuY29kZWRGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBp
c1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUFIoKSB8fCBpc0ZQUigpOwor
ICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRl
Y29kZUdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBkZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgUmVnIHJl
ZygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJu
IGdwcigpOworICAgICAgICByZXR1cm4gZnByKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNUbXBJ
bmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzUmVnKCk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVj
b2RlR1BUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1Ao
KSkKKyAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIHJldHVybiBmcFRt
cEluZGV4KCk7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhISp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBU
bXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIu
bV92YWx1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlAodW5zaWdu
ZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBpbmRleDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0K
KworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICBy
ZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSUmVnaXN0ZXIoKSk7
CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3Rl
cigpKSArIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQVG1wKHVu
c2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQUihNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0gaW5kZXg7CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgaXNFbmNvZGVkR1AoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVl
ID4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUChpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPCAwOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGlzRW5jb2RlZEdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVk
R1AodmFsdWUpICYmIHZhbHVlIDw9IGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lz
dGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQUihpbnQgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmIHZhbHVlID49IGVu
Y29kZWRGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1ZSk7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBSKHZhbHVlKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFsdWUpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2RlR1BSKE1hY3JvQXNzZW1i
bGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkp
OworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGludCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVy
OjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVj
b2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQVG1w
KHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVHUFIoTWFjcm9Bc3NlbWJs
ZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBk
ZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBU
bXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxh
c3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyAwOiBlbXB0eSBU
bXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4KKyAgICAvLyBuZWdh
dGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1ZTsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclRtcF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGluZXNfaAorI2RlZmluZSBB
aXJUbXBJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpclRtcC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2lu
bGluZSBUbXA6OlRtcChjb25zdCBBcmcmIGFyZykKK3sKKyAgICAqdGhpcyA9IGFyZy50bXAoKTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyVG1w
SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRh
dGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFs
aWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNl
IHsKKworY2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoQ29kZSYgY29k
ZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBt
X2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3doZW4od2hlbikKKyAgICAgICAgLCBtX2R1bXBCZWZv
cmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQorCisjZGVmaW5lIFZBTElEQVRFKGNvbmRpdGlv
biwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZhaWwoX19GSUxFX18sIF9fTElO
RV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9uLCB0b0NTdHJpbmcgbWVzc2FnZSk7
IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAg
ICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+IHZhbGlkU2xvdHM7CisgICAgICAgIEhhc2hTZXQ8QmFz
aWNCbG9jayo+IHZhbGlkQmxvY2tzOworICAgICAgICBIYXNoU2V0PFNwZWNpYWwqPiB2YWxpZFNw
ZWNpYWxzOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAg
ICAgICAgICB2YWxpZEJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICBmb3IgKFN0YWNrU2xvdCog
c2xvdCA6IG1fY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgICAgICB2YWxpZFNsb3RzLmFkZChz
bG90KTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogbV9jb2RlLnNwZWNpYWxzKCkp
CisgICAgICAgICAgICB2YWxpZFNwZWNpYWxzLmFkZChzcGVjaWFsKTsKKworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7
CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAg
ICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU3Rh
Y2s6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNsb3RzLmNvbnRhaW5z
KGFyZy5zdGFja1Nsb3QoKSksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU3BlY2lhbHMuY29udGFpbnMoYXJnLnNwZWNpYWwo
KSksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaW5zdC5pc1ZhbGlkRm9ybSgpLCAo
IkF0ICIsIGluc3QpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdEluZGV4ID09IGJsb2NrLT5z
aXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURShpc1Rlcm1pbmFsKGluc3Qu
b3Bjb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3Ip
LCAoIkF0ICIsICpibG9jaykpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHZv
aWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3Ry
aW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAg
ICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBv
dXQucHJpbnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnBy
aW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAi
KVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAg
ICAgICAgICAgIGlmIChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVy
aW5nICIsIG1fd2hlbiwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50
b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dC5wcmludChmYWlsdXJlTWVzc2Fn
ZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgi
QmVmb3JlICIsIHdoZW4sICI6XG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludChtX2R1bXBCZWZv
cmUpOworICAgICAgICB9CisgICAgICAgIG91dC5wcmludCgiQXQgdGltZSBvZiBmYWlsdXJlOlxu
Iik7CisgICAgICAgIG91dC5wcmludChtX2NvZGUpOworCisgICAgICAgIG91dC5wcmludChmYWls
dXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUs
IGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAg
IH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVmb3Jl
OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYg
Y29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBW
YWxpZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIHdoZW4sIGR1bXBCZWZvcmUpOworICAgIHZhbGlkYXRl
ci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJWYWxpZGF0ZV9oCisjZGVmaW5lIEFpclZhbGlkYXRlX2gK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFz
cyBDb2RlOworCit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0
ciwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3Iu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTUgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkK
KworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5h
bWUiCisKK2NsYXNzIE9wY29kZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92
ZXJsb2FkcworICAgIGF0dHJfYWNjZXNzb3IgOmtpbmQKKworICAgIGRlZiBpbml0aWFsaXplKG5h
bWUsIHNwZWNpYWwpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IHNw
ZWNpYWwKKyAgICAgICAgQGtpbmQgPSA6aW5zdAorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAg
ICAgICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IG1hc21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVu
ZAorZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAg
ZGVmIGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAg
IEB0eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9y
ZWFkZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUs
IGZvcm1zKQorICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9
IGZvcm1zCisgICAgZW5kCitlbmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1l
CisgICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkK
KyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQK
KworICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAg
ICAgICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9
PSBvdGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAor
ICAgIGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9
PSAiQWRkciIKKyAgICAgICAgICAgIFsiQWRkciIsICJTdGFja1Nsb3QiLCAiQ2FsbEFyZyJdCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKwor
ICAgIGRlZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitl
bmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAg
IGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcwor
ICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4K
KyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGlu
aXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVO
YW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAg
IGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAor
ZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAg
IAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0g
b3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYg
PT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3Ry
aW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09
IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAg
ICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAg
ICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAg
IGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAg
ICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAg
ICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAg
ICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxl
TmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVO
dW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAg
ICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUK
KyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAg
ICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykv
CisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxp
bmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAg
IyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXC9dLworICAgICAgICAg
ICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwg
JCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09y
aWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNl
ICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBv
c3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAg
ICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQor
ICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisg
ICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENv
bmQpfChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQo
dG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4g
PT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRv
a2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29y
ZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBm
aWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAg
QGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhd
CisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQK
KworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAg
ICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3Ig
YXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2Ug
IlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAg
ZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3Ry
aW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmll
cgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhw
ZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBh
ZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisg
ICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3Rl
ZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFu
Y2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAg
ICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5
cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAg
ICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0
ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwg
SW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlz
S2luZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisK
KyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisgICAgICAgIGxv
b3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAg
ICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBjb25zdW1lKCJz
cGVjaWFsIikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIK
KworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwg
b3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAgICByZXN1bHRb
b3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAg
ICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAg
b3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IE9wY29k
ZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNv
ZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAg
c2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgaWYgaXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAg
bG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAg
dHlwZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tl
biA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0
b2tlbiA9PSAiLyIKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLyIpCisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgdG9rZW4uc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIHdoZW4gImJy
YW5jaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOmJyYW5jaAorICAg
ICAgICAgICAgICAgICAgICB3aGVuICJ0ZXJtaW5hbCIKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wY29kZS5raW5kID0gOnRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkJhZCAvIGRpcmVjdGl2ZSIpCisgICAgICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBhZHZhbmNlCisgICAgICAgICAg
ICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBpc0tpbmQodG9rZW4pCisgICAgICAgICAg
ICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPSBbXQorICAg
ICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAorICAgICAgICAgICAgICAgICAgICAg
ICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPDwgS2luZC5uZXco
Y29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAi
KiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2FuIG9ubHkg
YXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5hbWUgPT0gIlRtcCIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNwZWNpYWwgPSB0cnVlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioiKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNz
IHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0
b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiYXMiKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgor
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2Fk
IikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICAg
ICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtp
bmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIkltbTY0IgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnJvbGUgIT0gIlUiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1l
ZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVb
aW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVycG9z
ZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoa2luZHMsIGFsdE5hbWUpCisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgaXNLaW5kKHRva2VuKQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBp
ZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNz
IGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3
KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBvcGNvZGUu
b3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAgICBlbmQKK2VuZAorCiskZmlsZU5h
bWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoJGZpbGVOYW1lKSwg
JGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UKKworZGVmIHdyaXRlSChmaWxlbmFt
ZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBv
dXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29k
ZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAg
ICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAg
IG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91
dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9
X2giCisgICAgfQorZW5kCisKK2RlZiB3cml0ZUNQUChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4o
IkFpciN7ZmlsZW5hbWV9LmNwcCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAK
KyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBm
cm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRw
LnB1dHMgIiNpbmNsdWRlIFwiY29uZmlnLmhcIiIKKyAgICAgICAgb3V0cC5wdXRzICIjaW5jbHVk
ZSBcIkFpciN7ZmlsZW5hbWV9LmhcIiIKKworICAgICAgICB5aWVsZCBvdXRwCisgICAgfQorZW5k
CisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0
cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2gg
eworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwi
CisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAic3RhdGljIGNvbnN0
IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6ZX07IgorICAgIG91dHAu
cHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAgICAKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNzIFByaW50U3RyZWFtOyIK
KyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6
OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisK
K3dyaXRlQ1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNs
dWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYg
eyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91
dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNv
ZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29k
ZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAg
ICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIg
ICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0cyAiICAg
ICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0
cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIK
KyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKworIyBGcm9tIGhlcmUgb24s
IHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIHNpbmNlIHdlJ3Jl
IHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKworZGVmIG1hdGNoRm9ybXMo
b3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNh
bGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAorCisgICAgaWYgZmlsdGVy
W2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIGlmIGNvbHVtbkluZGV4ID49
IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3Ro
ID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAgICAgIHJldHVybgorICAgIGVu
ZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFjaCB7CisgICAgICAgIHwgZm9y
bSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbkluZGV4XS5uYW1lCisgICAgICAg
IGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdIDw8IGZvcm0KKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zvcm1dCisgICAgICAgIGVuZAor
ICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91cHMubGVuZ3RoID09IDEKKyAg
ICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4ICsgMSwgY29s
dW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKwor
ICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltjb2x1bW5JbmRleF19KSB7Igor
ICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwgdmFsdWUgfAorICAgICAgICBv
dXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICAgICAg
S2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAgICAgfCBhcmdLaW5kIHwKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06IgorICAgICAgICB9CisgICAg
ICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1bW5JbmRleCArIDEsIGNvbHVt
bkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIklt
bTY0IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0
cCwgc3BlZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPm9wY29kZSkg
eyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAg
ICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgaWYgb3Bjb2RlLnNw
ZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEp
IG9yIHNwZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5z
dH0tPmFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIG9w
Y29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06
IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92
ZXJsb2FkCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNo
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0K
KyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91
dHAucHV0cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCBz
cGVlZCwgaW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkgewor
ICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAor
ICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAorICAgICAgICBlbHNlCisgICAgICAg
ICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4
IHwKKyAgICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgp
IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAg
ICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAg
ICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtCisgICAgICAgICAgICB9
CisgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBvdmVybG9hZC5mb3JtcywgMCwg
Y29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBlbmQKKyAgICB9CitlbmQK
Kword3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAi
I2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5wdXRzICJpbmxp
bmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRwLnB1
dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIg
ICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0
dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAidGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIEluc3Q6OmZvckVhY2hB
cmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNo
SW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92
ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0
cyAiZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7IC8vIFRoaXMgaXMgYmFzaWNh
bGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBtb2RlbCBTcGVjaWFsIGFzIGFuIGlt
bWVkaWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFyZ3NbMF0uc3BlY2lhbCgpLT5mb3JF
YWNoQXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxiYWNrPihmdW5jdG9yKSk7Igor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFjaF93aXRoX2lu
ZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAorICAgICAgICAgICAgICAgIHJv
bGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCisgICAgICAgICAgICAgICAg
d2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCisgICAgICAgICAgICAg
ICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCisgICAgICAgICAg
ICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVmIgorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1
bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2FyZy50eXBlfVApOyIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKwor
ICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPiIKKyAgICBvdXRw
LnB1dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9ybShPcGNvZGUgb3Bjb2RlLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJB
cmc6OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyldID0geyBhcmd1bWVudHMuLi4gfTsi
CisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMu
ZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bj
b2RlLm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKHNpemVvZi4uLihBcmd1bWVu
dHMpKSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG9wY29k
ZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06Igor
ICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeyB8IGNvbHVtbkluZGV4IHwgImtp
bmRzWyN7Y29sdW1uSW5kZXh9XSIgfQorICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBm
YWxzZSB9CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAg
ICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IChub3QgZm9ybS5r
aW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLnNwZWNpYWwgfSkKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oI3tzcGVjaWFsfSk7IgorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3Jt
cywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAgICAgICBlbmQKKyAgICAgICAgb3V0
cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91
dHAucHV0cyAifSIKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9
IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyAiCisgICAgb3V0cC5wdXRzICJ9IgorCisg
ICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBpc1Rlcm1pbmFsKE9wY29kZSBvcGNvZGUpIgorICAg
IG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2gg
eworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5h
bCBvciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2Ug
I3tvcGNvZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1
cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVy
biBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAg
ICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRl
Q1BQKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1
ZGUgXCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiYm9vbCBJbnN0
Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9h
ZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQs
IGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoYXJncy5zaXplKCkgPCAxKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZh
bHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWzBdLmlzU3BlY2lhbCgpKSIK
KyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKCp0aGlzKSk7Igor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uID0gZmFsc2UKKyAg
ICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMgeworICAgICAgICAgICAg
ICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVybG9hZC5zaWduYXR1cmVb
aW5kZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2lu
ZGV4XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZvcm0ua2luZHNbaW5kZXhdCisgICAg
ICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNwZWNpYWwKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBmb3Jt
IG1hdGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJvbGUsIHNpbmNlCisgICAg
ICAgICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBvbmx5IHRoaW5nIGxlZnQg
dG8gdmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAg
ICAjIHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAuCisgICAgICAgICAgICAg
ICAgaWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
aWYgKCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZHNNb3JlVmFsaWRhdGlvbgorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFpcyN7b3Bjb2RlLm5hbWV9VmFsaWQodGhpcykp
IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIK
KyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBv
dXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5z
aWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRj
aCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNv
ZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAg
IGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgp
IgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0
cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlz
LCBhcmdJbnN0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFN3aXRjaCBvbiB0aGUg
YXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJnSW5kZXgpIHsiCisK
KyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRzLm1hcCB7CisgICAgICAgICAg
ICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxl
bmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbnVtQXJn
cy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRleCB8CisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAgICAgICAgICAgICAgICMgQ2hlY2sg
aWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJsb2FkcyBlaXRoZXIgZG8sIG9y
IGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAgICAgICAgIyBhdCB0aGlzIGluZGV4
LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9uIGNhc2UuCisgICAgICAgICAgICAg
ICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAg
IG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtp
bmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1Z
ZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIyBO
b3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZpcnN0IGJlY2F1c2UgaWYgd2Ug
ZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAgICAgICAgICAgICAjIHRvIHNheSB0
aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAgICAgICAgICAgIGlmIG51bVllcyA9
PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsi
CisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0LgorCisgICAgICAgICAgICAg
ICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkK
KworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJncy5zaXplKCkpIHsi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3Zlcmxv
YWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdoYXQg
d2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQu
Zm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0aGluZywganVzdCBkcm9wIHRv
IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0
dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgaG93IHdl
IHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlzIGFyZ3VtZW50IHRvIGFuCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIHlpZWxkcyBhIHZhbGlkIGZvcm0u
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9PSBhcmdJbmRleAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRkciIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0g
MAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLmVhY2ggeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9
PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERyb3AgZG93biwgZW1p
dCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgS2VlcCBnb2luZy4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoRm9y
bXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwg
Y2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHAucHV0
cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAg
IG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiI7CisgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNl
OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVscGVyczo6SnVt
cCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNv
bnRleHQpIGNvbnN0IgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9Q
QVJBTShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShjb250ZXh0KTsiCisgICAg
b3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIKKyAgICBtYXRjaEluc3RPdmVy
bG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3Zlcmxv
YWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdlbmVyYXRlKCp0aGlzLCBqaXQs
IGNvbnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGZvcm0uYWx0TmFtZQor
ICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2RlLm1hc21OYW1lCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgIG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKworICAgICAgICAgICAgZm9ybS5r
aW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAor
ICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgY2FzZSBraW5k
Lm5hbWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAgICAgICAgICAgICAgICAgIGlm
IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgorICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5k
ZXh9XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgd2hl
biAiSW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5h
c1RydXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4gIkltbTY0IgorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW02NCgpIgor
ICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJp
bnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIklu
ZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jh
c2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigp
IgorICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCisgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dHAucHV0cyAiKTsiCisg
ICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1bHQpOyIKKyAgICAgICAgZW5k
CisgICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisg
ICAgb3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBv
dXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAK
ICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZhbGlkKCk7IH0K
LSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KIAogICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IGRl
bGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBjbGFzcyBBbGxSZWdzSXRlcmFibGUgewor
ICAgIHB1YmxpYzoKKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIGl0ZXJhdG9yKCkgeyB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJh
dG9yKFJlZyByZWcpCisgICAgICAgICAgICAgICAgOiBtX3JlZyhyZWcpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiBtX3JlZzsgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9yZWcgPSBtX3JlZy5uZXh0KCk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZyA9PSBvdGhlci5tX3JlZzsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIFJl
ZyBtX3JlZzsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBB
bGxSZWdzSXRlcmFibGUgYWxsKCkgY29uc3QgeyByZXR1cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0K
KwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZhbGlkKCkgeyByZXR1cm4gMHhmZjsg
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRP
ZmZzZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQy
LDcgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaQogICAgIGlmIChv
ZmZzZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkKICAgICAgICAgb2Zmc2V0ID0gLShz
dGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0ZXJzKSAqIHNpemVvZih2b2lkKikp
OwogCi0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7
cmVnID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVn
IDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmIChyZWdpc3Rl
clNldC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQocmVn
LCBvZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2Yodm9pZCopOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAko
cmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0
T2Zmc2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMyBAQCBwdWJsaWM6CiAg
ICAgUmVnaXN0ZXJBdE9mZnNldCogZmluZChSZWcpIGNvbnN0OwogICAgIHVuc2lnbmVkIGluZGV4
T2YoUmVnKSBjb25zdDsgLy8gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQuCiAKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zm
c2V0JiBlbnRyeSA6IG1fcmVnaXN0ZXJzKQorICAgICAgICAgICAgZnVuY3RvcihlbnRyeSk7Cisg
ICAgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0PiBtX3JlZ2lzdGVy
czsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZp
c2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTMgQEAgcHVibGljOgogICAgIAogICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1f
dmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsg
cmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0cygpKQorICAgICAgICAgICAg
ZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJbmRleDogU291cmNlL1dURi93
dGYvQml0VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJ
KHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMjAsNyArMzIwLDcgQEAgcHVibGljOiAKICAgICB9OwogICAgIAogICAgIFNl
dEJpdHNJdGVyYWJsZSBzZXRCaXRzKCkgY29uc3QgeyByZXR1cm4gU2V0Qml0c0l0ZXJhYmxlKCp0
aGlzKTsgfQotICAgIAorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2lu
dGVyKCkKICAgICB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKworbmFtZXNwYWNlIFdU
RiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRseSBwYXNzIGxh
bWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKKy8vIHRlbXBsYXRl
IHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxkIGJlIGRlY2xh
cmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGlu
dCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKKy8vCisvLyB2b2lk
IGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAoaW50IHgsIFN0
dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBy
ZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1iZGEgaXMgb25s
eSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVuY2UgdGhlIG5hbWUg
U2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNj
b3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBl
cy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwpKHZv
aWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQqIGFyZyA9IG51bGxw
dHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmcoYXJnKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgflNjb3BlZExhbWJkYSgpCisgICAgeworICAgIH0KKworICAgIFJl
c3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+
KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRUeXBlICgqaW1w
bCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pIG1faW1wbDsKKyAgICB2b2lkICptX2Fy
ZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rv
cj4gU2NvcGVkTGFtYmRhRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRM
YW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1
YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1Ymxp
YzoKKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
ICAgIDogU2NvcGVkTGFtYmRhKGltcGxGdW5jdGlvbiwgdGhpcykKKyAgICAgICAgLCBtX2Z1bmN0
b3IoZnVuY3RvcikKKyAgICB7CisgICAgfQorCisgICAgU2NvcGVkTGFtYmRhRnVuY3RvcihGdW5j
dG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRMYW1iZGEoaW1wbEZ1bmN0aW9uLCB0aGlz
KQorICAgICAgICAsIG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAgeworICAgIH0K
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rpb24odm9pZCogYXJn
dW1lbnQsIEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5jdG9y
KAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4p
OworICAgIH0KKworICAgIEZ1bmN0b3IgbV9mdW5jdG9yOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorU2NvcGVkTGFtYmRhRnVuY3RvcjxG
dW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYShjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQoreworICAgIHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rv
cj4oZnVuY3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gU2NvcGVk
TGFtYmRhX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291
cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwxMSBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFNoYXJlZFRhc2tGdW5jdG9yKEZ1bmN0b3Im
JiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAg
eworICAgIH0KKwogcHJpdmF0ZToKICAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzJiYu
Li4gYXJndW1lbnRzKSBvdmVycmlkZQogICAgIHsKQEAgLTExMCw2ICsxMTUsMTEgQEAgUmVmPFNo
YXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcgogewogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3Rvcikp
OwogfQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgor
UmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFzayhGdW5jdG9yJiYg
ZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxG
dW5jdGlvblR5cGUsIEZ1bmN0b3I+KFdURjo6bW92ZShmdW5jdG9yKSkpOworfQogCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263900</attachid>
            <date>2015-10-22 22:16:58 -0700</date>
            <delta_ts>2015-10-23 12:06:59 -0700</delta_ts>
            <desc>I think that the B3-&gt;Air lowering is &quot;done&quot;</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>425228</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKK0RpcmVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1l
bnRSZWdWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVl
KCkKK3sKK30KKwordm9pZCBBcmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJl
Z1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1l
bnRSZWdWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3Vt
ZW50UmVnVmFsdWVfaAorI2RlZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQXJndW1lbnRSZWdWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUg
PT0gQXJndW1lbnRSZWc7IH0KKyAgICAKKyAgICB+QXJndW1lbnRSZWdWYWx1ZSgpOworCisgICAg
UmVnIGFyZ3VtZW50UmVnKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7IH0KKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQXJndW1lbnRSZWdWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShp
bmRleCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRlcigpIDogRG91YmxlLCBvcmln
aW4pCisgICAgICAgICwgbV9yZWcocmVnKQorICAgIHsKKyAgICB9CisKKyAgICBSZWcgbV9yZWc7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQXJndW1lbnRS
ZWdWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2su
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1
bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisg
ICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Js
b2NrKCkKK3sKK30KKwordm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQorewor
ICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YWRkUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OmFkZFByZWRlY2Vzc29yKHRo
aXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2sp
OworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMs
IGZyb20sIHRvKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lk
IEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4i
KTsKKyAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBkZWVwRHVtcCh2YWx1ZSksICJcbiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9jaworI2RlZmluZSBCM0Jhc2ljQmxv
Y2sKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNTdWNjZXNz
b3JDb2xsZWN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBl
ZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0
Y2hlcyBDb250cm9sVmFsdWU6OlN1Y2Nlc3Nvckxpc3QKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVMaXN0OjppdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6
Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgVmFsdWVMaXN0
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7
IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMu
bGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsg
fQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3
KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3Jz
KCkgY29uc3Q7CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOwor
ICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdDsKKworICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Js
b2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1Y2Nlc3NvckNvbGxl
Y3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCk7CisgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0
PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vz
c29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vz
c29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5k
ZXhdOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3By
ZWRlY2Vzc29yc1tpbmRleF07IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9j
ayopOworICAgIGJvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wg
cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKwor
ICAgIGRvdWJsZSBmcmVxdWVuY3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisgICAgCisgICAgLy8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2Nr
KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgVmFsdWVMaXN0IG1fdmFsdWVzOworICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRl
Y2Vzc29yczsKKyAgICBkb3VibGUgbV9mcmVxdWVuY3k7Cit9OworCitjbGFzcyBEZWVwQmFzaWNC
bG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBi
bG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2Nr
KQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
a0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5s
aW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlVHlwZSB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUq
IEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFs
dWVUeXBlPihhcmd1bWVudHMuLi4pOworICAgIGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAor
eworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygp
OworfQorCitGcmVxdWVudGVkQmxvY2sgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3Vj
Y2Vzc29yKGluZGV4KTsKK30KKworRnJlcXVlbnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVl
PigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JM
aXN0JiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgp
LT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworQmFzaWNCbG9jayogQmFz
aWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworQmFzaWNCbG9jayomIEJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBzdWNjZXNz
b3IoaW5kZXgpLmJsb2NrKCk7Cit9CisKK1N1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywg
U3VjY2Vzc29yTGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkKK3sKKyAgICByZXR1
cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihzdWNjZXNz
b3JzKCkpOworfQorCitTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0
IFN1Y2Nlc3Nvckxpc3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3Vj
Y2Vzc29yTGlzdD4oc3VjY2Vzc29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9ja1V0aWxzX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2Nr
VXRpbHNfaAorCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5v
ZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIGFk
ZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikK
K3sKKyAgICBCYXNpY0Jsb2NrOjpBZGphY2VuY3lMaXN0JiBwcmVkZWNlc3NvcnMgPSBibG9jay0+
cHJlZGVjZXNzb3JzKCk7CisKKyAgICBpZiAocHJlZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vz
c29yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcHJlZGVjZXNzb3JzLmFwcGVuZChw
cmVkZWNlc3Nvcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
c2ljQmxvY2s+Citib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNp
Y0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAgICBCYXNpY0Jsb2NrOjpBZGphY2VuY3lMaXN0JiBw
cmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVj
ZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnNbaS0t
XSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnMucmVtb3Zl
TGFzdCgpOworICAgICAgICAgICAgLy8gT3V0IG9mIGNhdXRpb24sIHdlIGtlZXAgZ29pbmcgZXZl
biB0aG91Z2ggdGhlIHByZWRlY2Vzc29yIGxpc3QgY2Fubm90IGhhdmUKKyAgICAgICAgICAgIC8v
IGR1cGxpY2F0ZXMuCisgICAgICAgICAgICBBU1NFUlQoIXByZWRlY2Vzc29ycy5jb250YWlucyhw
cmVkZWNlc3NvcikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgor
Ym9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZy
b20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIEJhc2ljQmxvY2s6OkFkamFjZW5jeUxpc3QmIHBy
ZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNl
c3NvcnNbaV0gPT0gZnJvbSkgeworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ldID0gdG87Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKKy8vIFRoaXMgcmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxv
Y2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+
Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9j
az4+JiBibG9ja3MpCit7CisgICAgLy8gQ2xlYXIgYWxsIHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0
LgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3MpCisgICAgICAgIGJsb2NrLT5w
cmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisKKyAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jv
Y2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gd29ya2xpc3Q7CisgICAgd29ya2xpc3Qubm9kZShi
bG9ja3NbMF0pOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgp
KSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3Nv
ckJsb2NrcygpKSB7CisgICAgICAgICAgICBpZiAod29ya2xpc3QuYWRkKHN1Y2Nlc3NvcikpCisg
ICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMoKS5hcHBlbmQoYmxvY2spOwor
ICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGJsb2Nrcy5z
aXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmxvY2tzW2ldLnByZWRlY2Vzc29ycy5pc0VtcHR5
KCkpCisgICAgICAgICAgICBibG9ja3NbaV0gPSBudWxscHRyOworICAgIH0KK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIzQmxv
Y2tXb3JrbGlzdF9oCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0lu
ZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworc3RydWN0
IEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIElu
ZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBXaGVuIHlvdSBzYXkgQmxv
Y2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2lj
QmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3QgaXMgdXNlZnVsIGZvciBl
bnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJsb2NrLiBJdCBhbHNvCisv
LyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhh
cyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0aGluZ3MgbGlrZSBidWls
ZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXls
b2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xp
c3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKKwordHlwZWRlZiBHcmFw
aFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFz
aWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdv
cmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tX
b3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jsb2Nr
V29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3Bl
Y2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsKKwordW5zaWduZWQg
bnVtQjNBcmdzKEluc3QmIGluc3QpCit7CisgICAgc3dpdGNoIChpbnN0Lm9yaWdpbi0+b3Bjb2Rl
KCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBD
aGVja011bDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgcmV0
dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKKworQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNp
Z25lZCBudW1BcmdzKQorICAgIDogbV9jaGVja09wY29kZShvcGNvZGUpCisgICAgLCBtX251bUNo
ZWNrQXJncyhudW1BcmdzKQoreworfQorCitDaGVja1NwZWNpYWw6On5DaGVja1NwZWNpYWwoKQor
eworfQorCitJbnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNvbnN0IEluc3QmIGluc3Qp
IGNvbnN0Cit7CisgICAgSW5zdCBoaWRkZW5CcmFuY2gobV9jaGVja09wY29kZSwgaW5zdC5vcmln
aW4pOworICAgIGhpZGRlbkJyYW5jaC5hcmdzLnJlc2l6ZShtX251bUNoZWNrQXJncyk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gbV9udW1DaGVja0FyZ3M7IGktLTspCisgICAgICAgIGhpZGRlbkJy
YW5jaC5hcmdzW2ldID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNo
OworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBT
Y29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaGlk
ZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmcoY2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJbXBs
KG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7Cit9
CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJu
IGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlkKCkKKyAgICAgICAgJiYgaXNWYWxpZEltcGwobnVt
QjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOworfQorCitib29sIENoZWNr
U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7Cisg
ICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9udW1DaGVja0FyZ3MpCisg
ICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3RhY2soYXJnSW5kZXggLSAx
KTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVj
a0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDaGVj
a1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0
aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZmFpbCA9IGhp
ZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgIEFTU0VSVChmYWls
LmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICBWZWN0
b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZhbHVlLT5vcGNvZGUoKSkp
IHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCkKKyAgICAgICAgICAg
IHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+b3Bjb2Rl
KCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmFyZ3NbMF0tPmlzSW50KDApKQorICAgICAgICAgICAg
cmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDApKTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKGNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzJdKSk7
CisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNvZGUsIGluc3QuYXJnc1sx
XSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hl
Y2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMSkpOworICAgIH0K
KworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwg
cmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5kKAorICAgICAgICBjcmVh
dGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1bmN0aW9uPigKKyAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0
KSB7CisgICAgICAgICAgICAgICAgZmFpbC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAgICAgICAgICAgICBTdGFj
a21hcDo6R2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnZh
bHVlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcGFyYW1zLnN0YWNrbWFwID0gc3RhY2ttYXA7
CisgICAgICAgICAgICAgICAgcGFyYW1zLnJlcHMgPSByZXBzOworICAgICAgICAgICAgICAgIHBh
cmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVyczsKKworICAgICAg
ICAgICAgICAgIHN0YWNrbWFwLT5tX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKyAgICAg
ICAgICAgIH0pKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2hlY2tPcGNvZGUsICIoIiwgbV9udW1D
aGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkIzOjpDaGVja1ZhbHVlIGxv
d2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwgIiB3aXRoICIsIG1fbnVtQ2hlY2tBcmdzLCAiIGFy
Z3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0NoZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2lu
Y2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB3YW50IHRvIGxvd2VyIENoZWNr
IGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2FudCB0byByb3V0ZSB0aGF0
IGJyYW5jaCB0byBvdXIKKy8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVhZCBvZiBkb2luZyBhbnl0
aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFsIHdpbGwgcmVtZW1iZXIK
Ky8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBu
dW1iZXIgb2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQKKy8vIHdpbGwgY3JlYXRl
IGFuIEluc3Qgd2l0aCB0aGF0IG9wY29kZSBwbHVzIHRoZSBhcHByb3ByaWF0ZSBhcmdzIGZyb20g
dGhlIG93bmluZyBJbnN0IHdoZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkgb2YgdGhlIGNhbGxiYWNr
cy4KKy8vCisvLyBOb3RlIHRoYXQgZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVs
IHdlIGV4cGVjdCB0aGF0IHRoZSBCMyBhcmd1bWVudHMgYXJlIHRoZSByZXZlcnNlCisvLyBvZiB0
aGUgQWlyIGFyZ3VtZW50cyAoQWRkKGEsIGIpID0+IEFkZDMyIGIsIGEpLiBFeGNlcHQ6CisvLyAt
IENoZWNrU3ViKDAsIHgpLCB3aGljaCB0dXJucyBpbnRvIEJyYW5jaE5lZzMyIHguCisvLyAtIENo
ZWNrTXVsKGEsIGIpLCB3aGljaCB0dXJucyBpbnRvIE11bDMyIGIsIGEgYnV0IHdlIHBhc3MgQW55
IGZvciBhJ3MgVmFsdWVSZXAuCisKK2NsYXNzIENoZWNrU3BlY2lhbCA6IHB1YmxpYyBTdGFja21h
cFNwZWNpYWwgeworcHVibGljOgorICAgIENoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUs
IHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsKKworICAgIC8vIENvbnN0
cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRoZSBicmFuY2ggdGhhdCB0
aGlzIHdpbGwgdXNlLgorICAgIEluc3QgaGlkZGVuQnJhbmNoKGNvbnN0IEluc3QmKSBjb25zdDsK
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29w
ZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9v
bCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWly
OjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisgICAgLy8gTk9URTogdGhl
IGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4gYnJhbmNoIGFuZCB0aGVu
IHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRlcyB0aGUgc3RhY2ttYXAu
IFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5z
dCYsIENDYWxsSGVsZXBycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVw
RHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBB
aXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdzOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0NoZWNrU3BlY2lh
bF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjND
aGVja1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVja1Zh
bHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3Rh
Y2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2luY2x1ZGUgIkIz
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNlIENo
ZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisgICAg
U3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1Yiwg
YW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQobGVm
dC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09IENo
ZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOworICAg
IH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNh
dGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNh
dGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gKKwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKKyNpbmNs
dWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIk9wdGlv
bnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVt
cElSKCkKK3sKKyAgICByZXR1cm4gRlRMOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkgfHwg
RlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgp
OworfQorCitib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0
aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0ZUlS
KCkKK3sKKyAgICByZXR1cm4gREZHOjp2YWxpZGF0aW9uRW5hYmxlZCgpIHx8IHNob3VsZFZhbGlk
YXRlSVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFz
ZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpOwor
fQorCitib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9u
czo6dmVyYm9zZVZhbGlkYXRpb25GYWlsdXJlKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVmaW5lIEIzQ29tbW9uX2gKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVtcElSKCk7Citib29sIHNob3Vs
ZER1bXBJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVIoKTsKK2Jvb2wgc2hv
dWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNl
KCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb21tb25faAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzQ29tbXV0YXRpdml0eS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sK
KyAgICBzd2l0Y2ggKGNvbW11dGF0aXZpdHkpIHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAg
ICAgICBvdXQucHJpbnQoIkNvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE5vdENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDb21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gQ29tbXV0YXRpdml0eSB7CisgICAgQ29tbXV0
YXRpdmUsCisgICAgTm90Q29tbXV0YXRpdmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07Cit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpDb21tdXRhdGl2aXR5KTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM0NvbW11dGF0aXZpdHlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJu
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25N
YXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIK
KworVGVzdExvYWROb3RaZXJvMSA9IEFuZChMb2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2Fk
Tm90WmVybzIgPSBBbmQobGVmdCwgTG9hZChhZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxl
ZnQsIHJpZ2h0KQorCitUZXN0TG9hZFplcm8xID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJp
Z2h0KSwgJDApCitUZXN0TG9hZFplcm8yID0gRXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykp
LCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwoQW5kKGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVh
bDEgPSBFcXVhbChMb2FkKGFkZHJlc3MpLCByaWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0
LCBMb2FkKGFkZHJlc3MpKQorTm90ID0gRXF1YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChs
ZWZ0LCByaWdodCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMy
VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9o
CisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0
YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0
MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVt
cE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25z
dDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZh
bHVlKCkKK3sKK30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAor
I2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkg
eyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7
CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2
NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1f
dmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sK
K30KKwordm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RE
b3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjND
b25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVlX2gKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91Ymxl
OyB9CisgICAgCisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwg
Q29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVl
Ojp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisgICAgICAgIG91dC5wcmludChj
b21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIz
Q29udHJvbFZhbHVlX2gKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
QmFzaWNCbG9jazsKKworY2xhc3MgQ29udHJvbFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIEp1bXA6CisgICAgICAgIGNhc2UgQnJh
bmNoOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBPb3BzOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU3dpdGNoOiAKKyAgICAgICAgICAgIC8vIFRo
aXMgaXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEgc3ViY2xhc3Mgb2YgQ29udHJvbFZh
bHVlLCBzbyB3ZSB3YW50CisgICAgICAgICAgICAvLyBzd3RpY2hWYWx1ZS0+YXM8Q29udHJvbFZh
bHVlPigpIHRvIHJldHVybiBub24tbnVsbC4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0
OworCisgICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygp
IGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxv
Y2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNb
aV07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gbV9zdWNjZXNzb3JzW2ldOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vz
c29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNl
IHRoaXMgZm9yIHN1YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAg
ICB9CisKKyAgICAvLyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNz
b3JMaXN0IG1fc3VjY2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNv
ZGUgPT0gT29wcyk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBD
b250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiByZXN1bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3Jp
Z2luLCByZXN1bHQpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7Cisg
ICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0YXJn
ZXQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFw
cGVuZCh0YXJnZXQpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAg
Q29udHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVzLCBC
YXNpY0Jsb2NrKiBubykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmln
aW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsK
KyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMu
YXBwZW5kKG5vKTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRnJlcXVlbmN5Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRnJl
cXVlbmN5Q2xhc3MgZnJlcXVlbmN5KQoreworICAgIHN3aXRjaCAoZnJlcXVlbmN5KSB7CisgICAg
Y2FzZSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vcm1hbCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGcmVxdWVuY3lDbGFzczo6UmFyZToKKyAgICAg
ICAgb3V0LnByaW50KCJSYXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbmN5Q2xhc3NfaAorI2RlZmluZSBCM0Zy
ZXF1ZW5jeUNsYXNzX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0g
Y2xhc3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFu
eSBoeXBvdGhlc2lzIGFib3V0IHRoZSBmcmVxdWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29u
c3RydWN0LiBUaGlzIGlzCisgICAgLy8gdGhlIGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNl
IGJhc2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAg
Ly8gV2UgZXhwZWN0IHRoYXQgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVh
Y2hlZCBzdXBlciByYXJlbHkuIEl0J3MgdmFsaWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXph
dGlvbnMgdGhhdCBwdW5pc2ggUmFyZSBjb2RlLiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1
YXRpb25zIHdoZXJlIHlvdQorICAgIC8vIGhhdmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcg
ZnJlcXVlbmN5IGNsYXNzIGZyb20gYSBtZXJnaW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4K
KyAgICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVyIGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBO
b3JtYWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVu
aXNoIFJhcmUgY29kZSB2ZXJ5IGJhZGx5LgorICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW5jeUNsYXNzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVudGVkQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVudGVkQmxvY2tfaAorI2Rl
ZmluZSBCM0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVk
QmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2lj
QmxvY2s7CisKK3R5cGVkZWYgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVx
dWVudGVkQmxvY2s7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNG
cmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBCM0dl
bmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVxdWVudGVkIGJsb2Nr
IGlzIGEgdHVwbGUgb2YgQmFzaWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNzLiBJdCdzIHVzdWFs
bHkgdXNlZCBhcyBhCisvLyBzdWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFz
aWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVibGljOgorICAgIGV4
cGxpY2l0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2soCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2Nr
ID0gbnVsbHB0ciwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVlbmN5Q2xhc3M6Ok5v
cm1hbCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fZnJlcXVlbmN5KGZy
ZXF1ZW5jeSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZXF1
ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jayA9
PSBvdGhlci5tX2Jsb2NrCisgICAgICAgICAgICAmJiBtX2ZyZXF1ZW5jeSA9PSBvdGhlci5tX2Zy
ZXF1ZW5jeTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJlcXVlbnRlZEJs
b2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAqdGhpcyAhPSBGcmVxdWVudGVkQmxvY2soKTsKKyAgICB9CisKKyAgICBC
YXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICBCYXNpY0Js
b2NrKiYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgRnJlcXVlbmN5Q2xhc3MgZnJl
cXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZnJlcXVlbmN5KCkgIT0gRnJl
cXVlbmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgICAgIG91dC5wcmludChmcmVxdWVuY3koKSwg
IjoiKTsKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKG1fYmxvY2spKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBGcmVxdWVuY3lDbGFzcyBt
X2ZyZXF1ZW5jeTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
QjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNJbmRleE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
SW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisj
ZGVmaW5lIEIzSW5kZXhNYXBfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Ly8gVGhpcyBpcyBhIG1hcCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBl
ciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3Ig
VmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2Ug
VmFsdWVzIGNhbiBoYXZlIHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBs
b3Qgb2YgVmFsdWVzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgor
Y2xhc3MgSW5kZXhNYXAgeworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBz
aXplID0gMCkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisK
KyAgICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJl
c2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKKyAg
ICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV92ZWN0b3JbaW5kZXhdOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAg
VmVjdG9yPFZhbHVlPiBtX3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5j
bHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRo
aW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2lj
QmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBj
cmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkg
c3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJ
ZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxv
Y2s+LiBTbywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5k
ZXhTZXQgeworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBhZGQoVCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+
aW5kZXgoKSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAg
IHB1YmxpYzoKKyAgICAgICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rp
b24sIGNvbnN0IEluZGV4U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xs
ZWN0aW9uKQorICAgICAgICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
aXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENv
bGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRl
cmF0b3IgaXRlcikKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikK
KyAgICAgICAgICAgICAgICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2l0ZXIgPT0gb3RoZXIubV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1f
Y29sbGVjdGlvbjsKKyAgICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVy
YXRvciBtX2l0ZXI7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAg
ICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwg
bV9zZXQuZW5kKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9u
VHlwZSYgbV9jb2xsZWN0aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAg
fTsKKworICAgIC8vIEZvciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52
YWx1ZXMocHJvY2VkdXJlKTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAg
ICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFs
dWVzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisK
KyAgICBjb25zdCBCaXRWZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBD
b21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygp
LnNldEJpdHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwg
aW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIu
aCIKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJCM0FkZHJlc3NNYXRjaGVyLmgi
CisjaW5jbHVkZSAiQjNMb3dlcmluZ01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFp
cjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTG93ZXJUb0FpciB7CitwdWJsaWM6CisgICAgTG93
ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ29kZSYgY29kZSkKKyAgICAgICAgOiB2YWx1
ZVRvVG1wKGNvZGUudmFsdWVzKCkuc2l6ZSgpKQorICAgICAgICAsIGJsb2NrVG9CbG9jayhjb2Rl
LnNpemUoKSkKKyAgICAgICAgLCBhZGRyZXNzU2VsZWN0b3IoKnRoaXMpCisgICAgICAgICwgbG93
ZXJpbmdTZWxlY3RvcigqdGhpcykKKyAgICAgICAgLCBwcm9jZWR1cmUocHJvY2VkdXJlKQorICAg
ICAgICAsIGNvZGUoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBydW4oKQorICAgIHsK
KyAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1cmUpCisgICAgICAg
ICAgICBibG9ja1RvQmxvY2tbYmxvY2tdID0gY29kZS5hZGRCbG9jayhibG9jay0+ZnJlcXVlbmN5
KCkpOworCisgICAgICAgIC8vIExvd2VyIGRlZnMgYmVmb3JlIHVzZXMgb24gYSBnbG9iYWwgbGV2
ZWwuIFRoaXMgaXMgYSBnb29kIGhldXJpc3RpYyB0byBsb2NrIGRvd24gYQorICAgICAgICAvLyBo
b2lzdGVkIGFkZHJlc3MgZXhwcmVzc2lvbiBiZWZvcmUgd2UgZHVwbGljYXRlIGl0IGJhY2sgaW50
byB0aGUgbG9vcC4KKyAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1
cmUuYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRl
LgorICAgICAgICAgICAgaW5zdHMucmVzaXplKDApOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBQcm9jZXNzIGJsb2NrcyBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9y
ZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxvd3MgdXMKKyAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBh
dHRlcm5zIGVmZmVjdGl2ZWx5LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2st
PnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIGluc3RzLmFwcGVuZChWZWN0b3I8SW5z
dD4oKSk7CisgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gYmxvY2stPmF0KGkpOworICAg
ICAgICAgICAgICAgIHJ1bkxvd2VyaW5nTWF0Y2hlcihjdXJyZW50VmFsdWUsIGxvd2VyaW5nU2Vs
ZWN0b3IpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBp
bnN0cnVjdGlvbnMuIGluc3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2Ug
cHJvY2VzcworICAgICAgICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGluc3RzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIGZvciAo
SW5zdCYgaW5zdCA6IGluc3RzW2ldKQorICAgICAgICAgICAgICAgICAgICBibG9ja1RvQmxvY2tb
YmxvY2tdLT5hcHBlbmRJbnN0KFdURjo6bW92ZShpbnN0KSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAgY29y
cmVjdGx5LgorICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5zdWNjZXNzb3JzKCkgPD0gMik7Cisg
ICAgICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vz
c29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vz
c29ycygpLmFwcGVuZChibG9ja1RvQmxvY2tbc3VjY2Vzc29yXSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBUbXAgdG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1wID0g
dmFsdWVUb1RtcFt2YWx1ZV07CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1wID0g
Y29kZS5uZXdUbXAoaXNJbnQodmFsdWUpID8gQXJnOjpHUCA6IEFyZzo6RlApOworICAgICAgICBy
ZXR1cm4gdG1wOworICAgIH0KKworICAgIC8vIFRoaXMgZ2l2ZXMgeW91IHRoZSBhZGRyZXNzIG9m
IHRoZSBnaXZlbiBMb2FkIG9yIFN0b3JlLiBJZiBpdCdzIG5vdCBhIExvYWQgb3IgU3RvcmUsIHRo
ZW4KKyAgICAvLyBpdCByZXR1cm5zIEFyZygpLgorICAgIEFyZyBhZGRyKFZhbHVlKiBtZW1vcnlW
YWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiB2YWx1ZSA9IG1lbW9yeVZhbHVlLT5h
czxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVy
biBBcmcoKTsKKworICAgICAgICBydW5BZGRyZXNzTWF0Y2hlcih2YWx1ZS0+Y2hpbGRyZW4ubGFz
dCgpLCBhZGRyZXNzU2VsZWN0b3IpOworICAgICAgICByZXR1cm4gYWRkcmVzc1NlbGVjdG9yLnNl
bGVjdGVkQWRkcmVzcy53aXRoT2Zmc2V0KHZhbHVlLT5vZmZzZXQoKSk7CisgICAgfQorCisgICAg
QXJnIGxvYWRBZGRyKFZhbHVlKiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICBpZiAobG9hZFZh
bHVlLT5vcGNvZGUoKSA9PSBMb2FkKQorICAgICAgICAgICAgcmV0dXJuIGFkZHIobG9hZFZhbHVl
KTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW0oVmFsdWUqIHZh
bHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAgICAgICAgICAg
cmV0dXJuIEFyZzo6SW1tKHZhbHVlLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gQXJnKCk7
CisgICAgfQorCisgICAgQXJnIGltbU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IGlmIChBcmcgcmVzdWx0ID0gaW1tKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgICAgIHJldHVybiB0bXAodmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPE9wY29k
ZSBvcGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgor
ICAgIHZvaWQgYXBwZW5kQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7Cisg
ICAgICAgIFRtcCByZXN1bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAgCisgICAgICAg
IC8vIFRocmVlLW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIsIGMK
KyAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGMgPSBhIE9w
IGIKKworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXAs
IEFyZzo6VG1wKSkgeworICAgICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRp
dmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAgICAgICAgICAg
ICAgICBhcHBlbmQob3Bjb2RlLCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9wZXJhdGlvbiBj
b3VsZCBoYXZlIGFuIGltbWVkaWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAgIGlmIChpbW0o
bGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKGxlZnQpLCB0
bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGltbShy
aWdodCkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1w
KSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0ocmlnaHQpLCBy
ZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHdv
LW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAgICAgICAgLy8g
bWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEKKworICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGlvbiB0
aGF0IGhhdmUgYSBmdXNlZCBsb2FkIG92ZXIgdGhyZWUKKyAgICAgICAgLy8gb3BlcmFuZCBmb3Jt
cy4KKyAgICAgICAgCisgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7
CisgICAgICAgICAgICBBcmcgbGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAgICAgICAgICAg
IGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7Cisg
ICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKG9wY29kZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQXJnIHJpZ2h0
QWRkciA9IGxvYWRBZGRyKHJpZ2h0KTsKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwg
cmlnaHRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwg
dG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRy
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYg
KGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAg
ICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGVuZChNb3ZlLCB0
bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChyaWdodCksIHJl
c3VsdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0
eSBjb21tdXRhdGl2ZSA9IE5vdENvbW11dGF0aXZlPgorICAgIGJvb2wgdHJ5QXBwZW5kU3RvcmVC
aW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQXJnIHN0b3Jl
QWRkciA9IGFkZHIoY3VycmVudFZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CisK
KyAgICAgICAgVmFsdWUqIG90aGVyVmFsdWU7CisgICAgICAgIGlmIChhZGRyKGxlZnQpID09IHN0
b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSByaWdodDsKKyAgICAgICAgZWxzZSBp
ZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSAmJiBhZGRyKHJpZ2h0KSA9PSBzdG9yZUFk
ZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gbGVmdDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBB
cmc6OlRtcCwgc3RvcmVBZGRyLmtpbmQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG90aGVyVmFsdWUpLCBzdG9yZUFkZHIpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgdm9pZCBhcHBlbmQoT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJn
dW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9wY29kZSwg
Y3VycmVudFZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7Cisg
ICAgfQorICAgIAorICAgIEluZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1
ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1ZSwgVG1w
PiB2YWx1ZVRvVG1wOworICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxv
Y2sqPiBibG9ja1RvQmxvY2s7CisKKyAgICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBpbnN0czsK
KworICAgIFZhbHVlKiBjdXJyZW50VmFsdWU7CisKKyAgICBjbGFzcyBBZGRyZXNzU2VsZWN0b3Ig
eworICAgICAgICBBZGRyZXNzU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIpCisgICAgICAgICAg
ICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGFj
Y2VwdHNSb290KFZhbHVlKiByb290KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSBkb24n
dCB3YW50IHRvIG1hdGNoIGFuIGFkZHJlc3MgZXhwcmVzc2lvbiB0aGF0IGhhcyBhbHJlYWR5IGJl
ZW4gY29tcHV0ZWQKKyAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkuCisgICAgICAgICAgICByZXR1
cm4gIXZhbHVlVG9UbXBbcm9vdF07CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFjY2VwdFJv
b3RMYXRlKFZhbHVlKikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgICAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2YWx1ZVRvVG1wW3Zh
bHVlXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXRydW4g
YWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBh
Y2NlcHRJbnRlcm5hbHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoQXJn
dW1lbnRzLi4uKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG93ZXIubG9ja2VkLmNvbnRh
aW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gYWNjZXB0T3BlcmFuZHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBi
b29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUo
QXJndW1lbnRzLi4uKSB7IH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MShWYWx1ZSogaW5k
ZXgsIFZhbHVlKiBsb2dTY2FsZSwgVmFsdWUqIGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChsb2dTY2FsZS0+YXNJbnQoKSA8IDAgfHwgbG9nU2NhbGUtPmFzSW50KCkgPiAzKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9
IEFyZzo6aW5kZXgoCisgICAgICAgICAgICAgICAgbG93ZXIudG1wKGluZGV4KSwgbG93ZXIudG1w
KGluZGV4KSwgMSA8PCBsb2dTY2FsZS0+YXNJbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQyKFZhbHVlKiBiYXNlLCBW
YWx1ZSogaW5kZXgsIHZhbHVlKiBsb2dTY2FsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIHRyeUFkZFNoaWZ0MShpbmRleCwgbG9nU2NhbGUsIGJhc2UpOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCB0cnlBZGQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKHJpZ2h0LT5oYXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgLy8g
VGhpcyBwcm9kdWN0aW9uIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5jZSB3ZSBleHBlY3QK
KyAgICAgICAgICAgICAgICAvLyBMb2FkKEFkZChAeCwgQGNvbnN0MSksIG9mZnNldCA9IGNvbnN0
MikgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gc3RyZW5ndGgtcmVkdWNlZAorICAgICAgICAgICAgICAg
IC8vIHRvIExvYWQoQHgsIG9mZnNldCA9IGNvbnN0MSArIGNvbnN0MikuCisgICAgICAgICAgICAg
ICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChsZWZ0KSwgcmlnaHQtPmFz
SW50MzIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6aW5kZXgobG93ZXIudG1wKGxlZnQp
LCBsb3dlci50bXAocmlnaHQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCB0cnlEaXJlY3QoVmFsdWUqIGFkZHJlc3MpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihhZGRyZXNzKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMb3dlclRvQWly
JiBsb3dlcjsKKyAgICAgICAgQXJnIHNlbGVjdGVkQWRkcmVzczsKKyAgICB9OworICAgIEFkZHJl
c3NTZWxlY3RvciBhZGRyZXNzU2VsZWN0b3I7CisgICAgCisgICAgY2xhc3MgTG93ZXJpbmdTZWxl
Y3RvciB7CisgICAgcHVibGljOgorICAgICAgICBMb3dlcmluZ1NlbGVjdG9yKExvd2VyVG9BaXIm
IGxvd2VyKQorICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAgICAgeworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBib29sIGFjY2VwdFJvb3QoVmFsdWUqIHJvb3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVCghbG93ZXIubG9ja2VkLmNvbnRhaW5zKHJvb3QpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRS
b290TGF0ZShWYWx1ZSopIHsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUs
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dl
ci52YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0K
KyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAg
IAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQg
YWNjZXB0SW50ZXJuYWxzTGF0ZShWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd2VyLmxvY2tlZC5hZGQodmFsdWUpOworICAgICAg
ICAgICAgYWNjZXB0SW50ZXJuYWxzTGF0ZShhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAg
ICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZSgpIHsgfQorICAgICAgICAKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRz
KFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50
cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygpIHsgcmV0dXJu
IHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
ICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAgICAgICAg
Ym9vbCB0cnlMb2FkKFZhbHVlKiBhZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dl
ci5hcHBlbmQoTW92ZSwgYWRkcihhZGRyZXNzKSwgbG93ZXIudG1wKGxvd2VyLmN1cnJlbnRWYWx1
ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAg
ICAgICBsb3dlci5hcHBlbmRCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgdHJ5U3RvcmVBZGRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIFZhbHVlKikKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvd2VyLnRyeUFwcGVuZFN0b3Jl
QmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHRyeVN0b3JlQW5kTG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBW
YWx1ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiBsb3dlci50cnlB
cHBlbmRTdG9yZUJpbk9wPEFuZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUg
dHlwZXMhCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlTdG9yZShWYWx1ZSogdmFsdWUsIFZhbHVlKikKKyAg
ICAgICAgeworICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUsIGxvd2VyLnRtcCh2YWx1ZSks
IGxvd2VyLmFkZHIobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5UmV0dXJuKFZhbHVlKiB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEludDMyOgorICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICBs
b3dlci5hcHBlbmQoTW92ZSwgaW1tT3JUbXAodmFsdWUpLCBHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQ
Uik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAg
ICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZURvdWJsZSwgbG93ZXIudG1wKHZhbHVlKSwg
R1BSSU5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGxvd2VyLmFwcGVuZChSZXQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxvd2VyOworICAgIH07CisgICAg
TG93ZXJpbmdTZWxlY3RvciBsb3dlcmluZ1NlbGVjdG9yOworICAgIAorICAgIFByb2NlZHVyZSYg
cHJvY2VkdXJlOworICAgIENvZGUmIGNvZGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKKwordm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQor
eworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jZWR1cmUsICJsb3dlclRvQWlyIik7Cisg
ICAgTG93ZXJUb0FpciBsb3dlclRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgbG93ZXJUb0Fp
ci5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzTG93ZXJUb0Fpcl9oCisjZGVmaW5lIEIzTG93ZXJUb0Fpcl9oCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CituYW1lc3BhY2UgQWlyIHsg
Y2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGxvd2VycyB0aGUgY3VycmVudCBCMyBwcm9jZWR1cmUg
dG8gYW4gQWlyIGNvZGUuCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0
dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdN
YXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJp
bmdNYXRjaGVyCisKKyMgVGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBz
dGFydGluZyBhdCB0aGUgdG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0
ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRv
IHRoaXMgbWF0Y2hlciBpcyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5j
ZSEKKworTG9hZCA9IExvYWQoYWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitT
dG9yZUFkZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmVBbmRM
b2FkID0gU3RvcmUoQWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFs
dWUsIGFkZHJlc3MpCisKK1JldHVybiA9IFJldHVybih2YWx1ZSkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVl
KCkKK3sKK30KKwordm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5wcmludCgib2Zmc2V0ID0g
IiwgbV9vZmZzZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzTWVtb3J5VmFsdWVfaAorI2RlZmluZSBCM01lbW9yeVZhbHVlX2gKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIE1lbW9yeVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAg
IGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRG
bG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAg
Y2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNhc2UgU3Rv
cmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1vcnlWYWx1ZSgp
OworCisgICAgaW50cHRyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNl
IHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRo
ZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0
dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLAor
ICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisg
ICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAg
ICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gRG91YmxlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
U3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBBU1NFUlQo
dHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVy
ZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludHB0
cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgb3Bjb2RlID09
IExvYWRGbG9hdCA/IERvdWJsZSA6IEludDMyLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwg
bV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoK
KyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAg
ICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVz
LgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29k
ZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lk
LCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAg
ICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0
b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0
b3JlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gQjNNZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTm9wOgorICAgICAgICBvdXQucHJpbnQoIk5v
cCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJZGVudGl0eToKKyAgICAgICAgb3V0LnBy
aW50KCJJZGVudGl0eSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdDMyOgorICAg
ICAgICBvdXQucHJpbnQoIkNvbnN0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29u
c3Q2NDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDY0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0RG91YmxlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgb3V0LnByaW50KCJT
dGFja1Nsb3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAg
ICAgIG91dC5wcmludCgiQXJndW1lbnRSZWciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RnJhbWVQb2ludGVyOgorICAgICAgICBvdXQucHJpbnQoIkZyYW1lUG9pbnRlciIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBZGQ6CisgICAgICAgIG91dC5wcmludCgiQWRkIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN1YjoKKyAgICAgICAgb3V0LnByaW50KCJTdWIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTXVsOgorICAgICAgICBvdXQucHJpbnQoIk11bCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBEaXY6CisgICAgICAgIG91dC5wcmludCgiRGl2Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICBvdXQucHJpbnQo
IkNoaWxsRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1vZDoKKyAgICAgICAgb3V0
LnByaW50KCJNb2QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0QW5kOgorICAgICAg
ICBvdXQucHJpbnQoIkJpdEFuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRPcjoK
KyAgICAgICAgb3V0LnByaW50KCJCaXRPciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBC
aXRYb3I6CisgICAgICAgIG91dC5wcmludCgiQml0WG9yIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFNobDoKKyAgICAgICAgb3V0LnByaW50KCJTaGwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU1NocjoKKyAgICAgICAgb3V0LnByaW50KCJTU2hyIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFpTaHI6CisgICAgICAgIG91dC5wcmludCgiWlNociIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0OCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MTY6CisgICAgICAgIG91dC5wcmludCgiU0V4dDE2
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgb3V0LnByaW50
KCJTRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgWkV4dDMyOgorICAgICAgICBv
dXQucHJpbnQoIlpFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGUm91bmQ6Cisg
ICAgICAgIG91dC5wcmludCgiRlJvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElU
b0Q6CisgICAgICAgIG91dC5wcmludCgiSVRvRCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBEVG9JMzI6CisgICAgICAgIG91dC5wcmludCgiRFRvSTMyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQo
Ikxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAg
ICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IExlc3NFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzRXF1YWwiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJF
cXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZToKKyAgICAgICAgb3V0LnBy
aW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCZWxvdzoKKyAgICAgICAg
b3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZUVxdWFs
OgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvd0VxdWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkOFoi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBvdXQucHJpbnQo
IkxvYWQ4UyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBv
dXQucHJpbnQoIkxvYWQxNloiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2UzoK
KyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IExvYWRGbG9hdDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkRmxvYXQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgTG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTgiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgb3V0LnByaW50KCJT
dG9yZTE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAg
IG91dC5wcmludCgiU3RvcmVGbG9hdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDQ2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJDQ2FsbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBQYXRjaHBvaW50OgorICAgICAgICBvdXQucHJpbnQoIlBhdGNocG9pbnQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIG91dC5wcmludCgiQ2hl
Y2tBZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIG91
dC5wcmludCgiQ2hlY2tTdWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tNdWw6
CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tNdWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ2hlY2s6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2siKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgb3V0LnByaW50KCJVcHNpbG9uIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFBoaToKKyAgICAgICAgb3V0LnByaW50KCJQaGkiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSnVtcDoKKyAgICAgICAgb3V0LnByaW50KCJKdW1wIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgb3V0LnByaW50KCJCcmFu
Y2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBvdXQucHJp
bnQoIlN3aXRjaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXR1cm46CisgICAgICAg
IG91dC5wcmludCgiUmV0dXJuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9vcHM6Cisg
ICAgICAgIG91dC5wcmludCgiT29wcyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09wY29kZV9oCisKKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIE9w
Y29kZSA6IGludDE2X3QgeworICAgIC8vIEEgbm8tb3AgdGhhdCByZXR1cm5zIFZvaWQsIHVzZWZ1
bCBmb3Igd2hlbiB5b3Ugd2FudCB0byByZW1vdmUgYSB2YWx1ZS4KKyAgICBOb3AsCisgICAgIAor
ICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4K
KyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0YW50cy4gVXNlIHRoZSBDb25zdFZhbHVlKiBj
bGFzc2VzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28gdGhhdCB3ZSBj
YW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUgd2Ugd291bGQgY29uc3RydWN0IHRoZW0uIExh
cmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRvIGNyZWF0ZS4KKyAgICBDb25zdDMyLAorICAg
IENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBz
bG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3Jh
bSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQu
IEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdl
IG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgor
ICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVyLiBU
aGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQorICAg
IC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQsIGFuZCB0
aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1cmUgdGhhdCB3ZQorICAgIC8vIGRvbid0IGNs
b2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFsbG9jYXRpb24gb3IgY2FsbHMgKGVpdGhlciBi
eSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQorICAgIC8vIHN0YWNrIG9yIHByZXNlcnZpbmcg
aXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3RlcikuIFVzZSB0aGUgQXJndW1lbnRSZWdWYWx1ZSBj
bGFzcy4gVGhlIHJldHVybgorICAgIC8vIHR5cGUgaXMgZWl0aGVyIHBvaW50ZXIoKSAoZm9yIEdQ
UnMpIG9yIERvdWJsZSAoZm9yIEZQUnMpLgorICAgIEFyZ3VtZW50UmVnLAorCisgICAgLy8gVGhl
IGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4gcHV0IHRoaXMgYW55d2hlcmUgaW4gY29udHJvbCBmbG93
IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVsZCB0aGUKKyAgICAvLyBmcmFtZSBwb2ludGVyLCB3aXRo
IGEgY2F2ZWF0OiBpZiBvdXIgY29tcGlsZXIgY2hhbmdlcyB0aGUgZnJhbWUgcG9pbnRlciB0ZW1w
b3JhcmlseSBmb3Igc29tZQorICAgIC8vIHNpbGx5IHJlYXNvbiwgdGhlIEZyYW1lUG9pbnRlciBp
bnRyaW5zaWMgd2lsbCByZXR1cm4gd2hlcmUgdGhlIGZyYW1lIHBvaW50ZXIgKnNob3VsZCogYmUg
bm90CisgICAgLy8gd2hlcmUgaXQgaGFwcGVucyB0byBiZSByaWdodCBub3cuCisgICAgRnJhbWVQ
b2ludGVyLAorCisgICAgLy8gUG9seW1vcnBoaWMgbWF0aCwgdXNhYmxlIHdpdGggYW55IHZhbHVl
IHR5cGUuCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorCisgICAgLy8g
SW50ZWdlciBtYXRoLgorICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZl
cyBsaWtlIEpTICh4L3kpfDAuCisgICAgTW9kLAorICAgIEJpdEFuZCwKKyAgICBCaXRPciwKKyAg
ICBCaXRYb3IsCisgICAgU2hsLAorICAgIFNTaHIsCisgICAgWlNociwKKworICAgIC8vIENhc3Rz
IGFuZCBzdWNoLgorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIEludDMyOgorICAgIFNFeHQ4LAor
ICAgIFNFeHQxNiwKKyAgICAvLyBUYWtlcyBJbnQzMiBhbmQgcmV0dXJucyBJbnQ2NDoKKyAgICBT
RXh0MzIsCisgICAgWkV4dDMyLAorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIERvdWJsZToKKyAg
ICBGUm91bmQsCisgICAgLy8gVGFrZXMgaW50cyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgSVRv
RCwKKyAgICAvLyBUYWtlcyBEb3VibGUgYW5kIHJldHVybnMgSW50MzI6CisgICAgRFRvSTMyLAor
CisgICAgLy8gUG9seW1vcnBoaWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0
eXBlLiBSZXR1cm5zIGludDMyIDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCisgICAgLy8gaXMganVz
dCBFcXVhbCh4LCAwKS4KKyAgICBFcXVhbCwKKyAgICBOb3RFcXVhbCwKKyAgICBMZXNzVGhhbiwK
KyAgICBHcmVhdGVyVGhhbiwKKyAgICBMZXNzRXF1YWwsCisgICAgR3JlYXRlckVxdWFsLAorCisg
ICAgLy8gSW50ZWdlciBjb21wYXJpc29ucy4gUmV0dXJucyBpbnQzMiAwIG9yIDEuCisgICAgQWJv
dmUsCisgICAgQmVsb3csCisgICAgQWJvdmVFcXVhbAorICAgIEJlbG93RXF1YWwsCisKKyAgICAv
LyBNZW1vcnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBsb2Fk
ZWQgdHlwZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHJldHVybiBJbnQz
MjoKKyAgICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlosCisgICAgTG9hZDE2UywK
KyAgICAvLyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9hdCwKKyAgICAvLyBUaGlz
IHJldHVybiB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwKKworICAgIC8v
IE1lbW9yeSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBpcyBzdG9yZWQu
IFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIEludDMyIHZhbHVl
OgorICAgIFN0b3JlOCwKKyAgICBTdG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMgYSBEb3VibGUg
dmFsdWU6CisgICAgU3RvcmVGbG9hdCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3Rv
cmUgZm9yIEludDMyLCBJbnQ2NCwgYW5kIERvdWJsZToKKyAgICBTdG9yZSwKKworICAgIC8vIFRo
aXMgaXMgYSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5c3Rl
bSBDIGNhbGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJndW1l
bnRzIGFyZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxsLAorCisgICAg
Ly8gVGhpcyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNzLiBU
aGlzIGlzIHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25seSBl
bWl0cyBjb2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBn
ZXRzIHRvIGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2ttYXAg
YWxvbmcgd2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBtdXN0
IGJlIHBhc3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNrbWFw
IGFyZ3VtZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVzdAor
ICAgIC8vIHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9tIHRo
ZSB0b3Agb2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFjay4K
KyAgICBQYXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNrVmFs
dWUgY2xhc3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBnZW5lcmF0aW9u
CisgICAgLy8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNvbWUgY29kZSBh
ZnRlciB0aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAgICAvLyBmcm9t
IHRoZSBjaGVjaywgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxzbyBnZXQgdG8g
c3VwcGx5IGEgc3RhY2ttYXAuIE5vdGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90IGFsbG93ZWQg
dG8ganVtcCBiYWNrIGludG8gdGhlIG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNsb3cgcGF0aCwg
c2luY2UgdGhlIGNvbXBpbGVyCisgICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgZXhlY3V0aW9u
IG9mIHRoZXNlIGluc3RydWN0aW9ucyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRuJ3QgaGFwcGVu
LiBGb3IKKyAgICAvLyBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQnczoKKyAgICAv
LworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0FkZCh4LCB5KQor
ICAgIC8vCisgICAgLy8gVGhlbiBpdCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRvOgorICAgIC8v
CisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5KGEpCisgICAg
Ly8KKyAgICAvLyBUaGlzIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxiYWNrcyB1c2Vk
IGJ5IHRoZSB0d28gQ2hlY2tBZGRzLiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAorICAgIC8vIGNh
bGxiYWNrcy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhleSBh
cmUgZGlmZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0
IENoZWNrQWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZlIHBv
c3NpYmx5IHRha2VuIHNsb3cKKyAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQgQ2hl
Y2tBZGQncyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIENoZWNrQWRkLAorICAgIENoZWNr
U3ViLAorICAgIENoZWNrTXVsLAorCisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBVc2Ug
dGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMgaGFz
IGEKKyAgICAvLyBzdGFja21hcCB3aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0YWtl
cyBhbiBJbnQzMiBhcmd1bWVudCB0aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgKKyAgICAvLyBm
dWxsIGJyYW5jaCBmdXNpb24gaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBBIHRydWUgdmFs
dWUganVtcHMgdG8gdGhlIGdlbmVyYXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgorICAgIENoZWNr
LAorCisgICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAgIFVw
c2lsb24sIC8vIFRoaXMgdXNlcyB0aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAgIFBoaSwKKwor
ICAgIC8vIEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAorICAg
IAorICAgIC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUu
IEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIENvbnRyb2xW
YWx1ZSBjbGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUgc3Vj
Y2Vzc29yLgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBlaXRo
ZXIgSW50MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3aXRj
aCwKKworICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0
aGVpciByZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlw
ZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIFJldHVybiwKKworICAgIC8vIFRo
aXMgaXMgYSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhl
cmUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9OworCitpbmxpbmUg
Ym9vbCBpc0NoZWNrTWF0aChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7
CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tN
dWw6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3Jp
Z2luLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIs
IFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNPcmlnaW5faAorCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBX
aG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVz
LiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24g
dG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hp
Y2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBj
YXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0Cisv
LyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4g
eworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0
cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNPcmlnaW5faAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6
On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1l
dGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0g
Iiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50VmFsdWVfaAorI2RlZmluZSBCM1Bh
dGNocG9pbnRWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFj
a21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hw
b2ludFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAg
ICB+UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZh
bHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFj
ZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0
eXBlLCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKwor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRl
ICJCM1ZhbGlkYXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQaGFz
ZVNjb3BlOjpQaGFzZVNjb3BlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBjaGFyKiBuYW1l
KQorICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICwgbV9uYW1lKG5hbWUpCit7Cisg
ICAgaWYgKHNob3VsZER1bXBJUkF0RWFjaFBhaHNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQjMg
YmVmb3JlICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAg
IH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBC
ZWZvcmUgPSB0b0NTdHJpbmcocHJvY2VkdXJlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2Nv
cGUoKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAg
dmFsaWRhdGUocHJvY2VkdXJlLCBtX25hbWUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQaGFzZVNjb3Bl
X2gKKyNkZWZpbmUgQjNQaGFzZVNjb3BlX2gKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOwor
CitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaGFzZVNjb3Bl
KTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIG5hbWUp
OworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6
CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7Cisg
ICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEIzUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJl
KCkKK3sKK30KKworUHJvY2VkdXJlOjp+UHJvY2VkdXJlKCkKK3sKK30KKworQmFzaWNCbG9jayog
UHJvY2VkdXJlOjphZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPiBibG9jayA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jaz4obV9i
bG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2Nr
LmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0
LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2Vk
dXJlOjpibG9ja3NJblByZU9yZGVyKCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IHJlc3Vs
dDsKKyAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goYmxvY2so
MCkpOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7Cisg
ICAgICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBi
bG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgd29ya2xpc3QucHVzaChi
bG9jay0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQor
CitWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5Qb3N0T3JkZXIoKQorewor
ICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0OworICAgIFBvc3RPcmRlckJsb2NrV29ya2xp
c3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChibG9jaygwKSk7CisgICAgd2hpbGUgKEJs
b2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBzd2l0Y2ggKGl0
ZW0ub3JkZXIpIHsKKyAgICAgICAgY2FzZSBQcmVPcmRlcjoKKyAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2hQb3N0KGl0ZW0uYmxvY2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRl
bS5ibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2goaXRlbS5ibG9jay0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgUG9zdE9yZGVyOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVt
LmJsb2NrKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzUHJvY2VkdXJlX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaW5jbHVkZSA8d3RmL0Jh
Zy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlh
YmxlLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9j
ZWR1cmUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICBQcm9jZWR1cmUoKTsKKyAgICB+UHJv
Y2VkdXJlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0g
UE5hTik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2Nr
KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0K
KworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6
CisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgm
cHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAgICAg
ICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4
ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAg
ICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQo
aW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gaW5l
eDsKKyAgICAgICAgfQorCisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgVmVjdG9yPEJh
c2ljQmxvY2sqPiBibG9ja3NJblByZU9yZGVyKCk7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBi
bG9ja3NJblBvc3RPcmRlcigpOworCisgICAgY2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7CisgICAg
cHVibGljOgorICAgICAgICBWYWx1ZXNDb2xsZWN0aW9uKFByb2NlZHVyZSYgcHJvY2VkdXJlKQor
ICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisg
ICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAg
ICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmJsb2NrKG1faW5kZXgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAgICAgICBQcm9jZWR1cmUqIG1fcHJvY2Vk
dXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAg
ICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAw
KTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3By
b2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQorCisgICAgICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0K
KyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2Nl
ZHVyZS5tX3ZhbHVlc1tpbmRleF07IH0KKyAgICAgICAgVmFsdWUqIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgICAgICAKKyAgICBwcml2
YXRlOgorICAgICAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIH07CisKKyAgICBWYWx1
ZXNDb2xsZWN0aW9uIHZhbHVlcygpIHsgcmV0dXJuIFZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9i
bG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+IG1fdmFsdWVzOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlSW5saW5lc19o
CisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2su
aCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFyZ3VlbnRzLi4uIGFyZ3VtZW50cykKK3sK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2YWx1ZShuZXcgVmFsdWVUeXBlKG1fdmFs
dWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSB2YWx1
ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoV1RGOjptb3ZlKHZhbHVlKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RLaW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0YWNrU2xvdEtpbmQuaCIKKworI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6
QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5k
IGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpM
b2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAgb3V0LnByaW50KCJBbm9u
eW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9o
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIGNsYXNzIFN0YWNrU2xv
dEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tlZCBzdGFjayBzbG90IG5lZWRzIHRvIGJl
IGtlZXAgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2Fw
ZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hl
biB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNrCisgICAgLy8gc2xvdC4K
KyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBjb3VsZCBzaGFyZSBzcGFj
ZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRlZCB0aGF0IHRoZXkgYXJlbid0IGxpdmUK
KyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29tcGlsZXIgc3RpbGwgaGFzIHRvIGRvIGVz
Y2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJlIGVzY2FwZWQKKyAgICAvLyBleHBsaWNp
dGx5IGluIElSLgorICAgIEFub255bW91cworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3RhY2tTbG90S2luZCk7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RLaW5kX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xv
dFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RW
YWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVt
cE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXpl
ID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Ns
b3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xv
dFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFt
ZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNv
ZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2ln
bmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xv
dEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRz
IGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5
IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4K
KyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21G
UDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBz
dGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTdGFja1Ns
b3RWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgYnl0ZVNpemUs
IFN0YWNrU2xvdEtpbmQga2luZCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgU3RhY2tTbG90LCBw
b2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAg
ICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgeworICAg
IH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7
CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRl
cihtX29wYXF1ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAgICAgICAiLCBn
ZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJlcmVk
ID0gIiwgbV9jbG9iYmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRS
ZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisjaW5jbHVkZSAiQjNW
YWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVy
U2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrU3BlY2lhbDsKK2NsYXNzIFN0YWNrbWFwU3BlY2lh
bDsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBTdGFja21hcCB7CitwdWJsaWM6CisgICAgc3RydWN0
IEdlbmVyYXRpb25QYXJhbXMgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBWYWx1ZSBjb250YWlu
aW5nIHRoZSBzdGFja21hcC4KKyAgICAgICAgVmFsdWUqIHZhbHVlOworCisgICAgICAgIC8vIFRo
aXMgaXMgdGhlIHN0YWNrbWFwLgorICAgICAgICBTdGFja21hcCogc3RhY2ttYXA7CisKKyAgICAg
ICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhh
dCB3ZXJlIGNob3Nlbi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworCisgICAgICAg
IC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgICAg
IFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZv
aWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFt
cyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9y
OworICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUg
b3BhcXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVj
YXVzZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFu
ZCBlYWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxs
b2NhdGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBi
ZSBhYmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVy
ZXMKKyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBz
ZXRPcGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJh
bWV0ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVl
OyB9CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0
ZWFkIG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQor
ICAgIHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAg
ICB9CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0
PHNpemVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8g
dGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNrbWFwLiBOb3RlIHRoYXQgaW5kZXggemVybyBy
ZWZlcnMgdG8gdGhlCisgICAgLy8gZmlyc3QgYXJndW1lbnQgdG8gdGhhdCBWYWx1ZSwgZXZlbiBp
ZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3IgZXhhbXBsZSwgaW4gYQor
ICAgIC8vIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4g
aW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdCB3b3VsZAorICAgIC8vIGJlIGFu
IGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhlIGdlbmVyYXRpb24gY2Fs
bGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuIGRlcGVuZAorICAgIC8vIG9uIHRoZSByZXBzIGZvciB0
aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNvbnN0cmFpbih1bnNpZ25l
ZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCAr
IDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBzLmdyb3coaW5kZXggKyAxKTsK
KyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisKKyAgICB2b2lkIGNsb2JiZXIo
Y29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fY2xvYmJlcmVkLm1lcmdl
KHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNsb2JiZXJlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lkIHNldEdlbmVyYXRvcihSZWZQdHI8
R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGdlbmVy
YXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
c2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX2dl
bmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+KGZ1bmN0b3IpOwor
ICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFsOworICAgIGZyaWVuZCBjbGFzcyBTdGFj
a21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9vcGFxdWUgeyBudWxscHRyIH07CisgICAg
VmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0
b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV91c2Vk
UmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhlciBkdXBsaWNhdGVkIGJ5IEFp
ciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJnZSB0aGUgdXNlZCByZWdpc3Rl
cnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDI0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNp
YWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKGNvbnN0IGNoYXIqIG5h
bWUpCisgICAgOiBTcGVjaWFsKG5hbWUpCit7Cit9CisKK1N0YWNrbWFwU3BlY2lhbDo6flN0YWNr
bWFwU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnKElu
c3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxs
YmFjaykKK3sKKyAgICByZXR1cm4gZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgY2FsbGJhY2sp
OworfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAg
IHJldHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsKK30KKworYm9vbCBTdGFja21hcFNwZWNp
YWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIHJl
dHVybiBhZG1pdHNTdGFjaygwLCAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK3ZvaWQgU3RhY2tt
YXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmIGluc3QsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOwor
ICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgLy8gRklY
TUU6IElmIHRoZSBJbnN0IHRoYXQgdXNlcyB0aGUgU3RhY2ttYXBTcGVjaWFsIGdldHMgZHVwbGlj
YXRlZCwgdGhlbiB3ZSBlbmQgdXAgbWVyZ2luZyB1c2VkCisgICAgLy8gcmVnaXN0ZXIgc2V0cyBm
cm9tIG11bHRpcGxlIHBsYWNlcy4gVGhpcyBjdXJyZW50bHkgd29uJ3QgaGFwcGVuIHNpbmNlIEFp
ciBkb2Vzbid0IGhhdmUgdGFpbGR1cAorICAgIC8vIG9yIHRoaW5ncyBsaWtlIHRoYXQuIEJ1dCBt
YXliZSBldmVudHVhbGx5IGl0IGNvdWxkIGJlIGEgcHJvYmxlbS4KKyAgICBzdGFja21hcC0+bV91
c2VkUmVnaXN0ZXJzLm1lcmdlKHVzZWRSZWdpc3RlcnMpOworfQorCitjb25zdCBSZWdpc3RlclNl
dCYgU3RhY2ttYXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYgaW5zdCkKK3sKKyAg
ICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2
YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHJldHVybiBzdGFja21hcC0+Y2xvYmJlcmVkKCk7Cit9
CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgKKyAgICB1bnNpZ25lZCBu
dW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBp
bnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2sp
Cit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0
IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5z
aXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4u
c2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgp
IC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuLnNpemUoKSAtIG51bUlnbm9y
ZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIEFyZyYgYXJnID0gaW5z
dC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFs
dWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7CisKKyAgICAgICAgY2FsbGJhY2soYXJn
LCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICB9Cit9
CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKKyAgICB1bnNpZ25lZCBudW1J
Z25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJnQXJncywKKyAgICBJbnN0JiBpbnN0
KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhh
dCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Mu
c2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVu
LnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9
IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgIC8vIEZv
ciB0aGUgSW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMgdG8gaGF2ZSB0aGUgcmlnaHQgbnVtYmVy
IG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJB
cmdzICE9IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdhcmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFj
a21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVtZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBG
b3IKKyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3QgaGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVz
cy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRpb25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8g
YXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5z
aXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0g
dmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBp
bnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFy
Zzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFj
azoKKyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICBicmVhazsgLy8gT0sK
KyAgICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBU
bXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpICYmCisgICAgICAgICAgICAgICAgYXJnLmJh
c2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7
CisKKyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJl
IG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChz
dGFja21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpKTsKKworICAg
IC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBzdXBwbGllZCBjb25zdHJhaW50cy4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNBcmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAg
ICAgIFZhbHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFy
ZyA9IGluc3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsK
KworICAgICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
QW55OgorICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAg
ICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgor
ICAgICAgICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
U3RhY2s6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAg
IGlmIChhcmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFs
dWVSZXA6OkNvbnN0YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1
dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBu
dW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBp
bnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdp
bjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVu
c2lnbmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsg
bnVtSWdub3JlZEIzQXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFw
LT5tX3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMg
bm8gY29uc3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8v
IFdlIG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxp
ZCBpbnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMg
dG8gYSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFy
Z0luZGV4XS5raW5kKCkgPT0gQW55KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKworVmVjdG9yPFZhbHVlUmVwPiBTdGFja21hcFNwZWNpYWw6OnJlcHMoR2Vu
ZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIEluc3QmIGluc3QpCit7CisgICAgVmVjdG9yPFZhbHVl
UmVwPiByZXN1bHQ7CisgICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwgMSwgaW5zdCwgcmVzdWx0
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5k
UmVwc0ltcGwoCisgICAgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bUln
bm9yZWRBcmdzLCBJbnN0JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+JiByZXN1bHQpCit7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyAr
K2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKGNvbnRleHQuY29kZSwgYXJnKSk7
CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2ldOworICAgIH0KK30KKworVmFsdWVSZXAg
U3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JBcmcoQ29kZSYgY29kZSwgY29uc3QgQXJnJiBhcmcpCit7
CisgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgY2FzZSBUbXA6CisgICAgICAgIHJldHVy
biBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgSW1t
OgorICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQoYXJn
LnZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChh
cmcuYmFzZSgpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAgICAgICAgcmV0
dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoYXJnLmJh
c2UoKSA9PSBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBy
ZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gVmFsdWVSZXAoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBTcGVjaWFsX2gKKyNk
ZWZpbmUgQjNTdGFja21hcFNwZWNpYWxfaAorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2lu
Y2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
Ky8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWFscyB0aGF0IGhhdmUgc3RhY2ttYXBz
LiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBhc2tpbmcgZm9yIHRo
ZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBuZWVkIHRvIGV2ZW4g
aG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNrbWFwLgorCitjbGFzcyBTdGFja21hcFNw
ZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBTdGFja21hcFNwZWNp
YWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5z
dCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQg
YXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhBaXI6Oklu
c3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0
JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVl
cER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGlt
cGxlbWVudCB0aGF0LgorCisgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKKyAgICAgICAgdW5zaWdu
ZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAg
IEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFj
az4mKTsKKyAgICBib29sIGlzVmFsaWRJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVk
QjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7
CisgICAgYm9vbCBhZG1pdHNTdGFja0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRC
M0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmKTsK
KworICAgIC8vIEdldHMgdGhlIHJlcHMgYXJyYXkgdGhlIHdheSB0aGF0IHRoZSBzdGFja21hcCBn
ZW5lcmF0b3IgY2FsbGJhY2sgd291bGQgd2FudC4KKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHMo
QWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIEFpcjo6SW5zdCYpOworCisgICAgLy8gQXBwZW5kcyB0
aGUgcmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBzdGFydGluZyB3aXRoIG51bUlnbm9yZWRBcmdz
LCB0byB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgIHZvaWQgYXBwZW5kUmVwc0ltcGwoQWlyOjpHZW5l
cmF0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBBaXI6Okluc3QmLCBWZWN0
b3I8VmFsdWVSZXA+Jik7CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVwRm9yQXJnKEFpcjo6Q29k
ZSYsIGNvbnN0IEFpcjo6QXJnJik7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNT
dWNjZXNzb3JDb2xsZWN0aW9uX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
Ky8vIFRoaXMgaXMgYSBnZW5lcmljIHdyYXBwZXIgYXJvdW5kIGxpc3RzIG9mIGZyZXF1ZW50ZWQg
YmxvY2tzLCB3aGljaCBnaXZlcyB5b3UganVzdCB0aGUgYmxvY2tzLgorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCYXNpY0Jsb2NrLCB0eXBlZGVmIFN1Y2Nlc3Nvckxpc3Q+CitjbGFzcyBTdWNjZXNzb3JD
b2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uKFN1Y2Nlc3Nvckxp
c3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgeworICAgIH0KKworICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgIEJhc2ljQmxv
Y2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygp
OyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9saXN0W2lu
ZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvcltd
KHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRv
ciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fY29s
bGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3NvckNvbGxlY3Rpb24mIGNvbGxlY3Rp
b24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9u
KQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5k
ZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2lkbmV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24qIG1fY29sbGVjdGlv
bjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJl
dHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisKK3ByaXZhdGU6CisgICAgU3VjY2Vzc29y
TGlzdCYgbV9saXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN3aXRjaENh
c2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jYXNl
VmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKG1fdGFyZ2V0KSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaENhc2VfaAorI2RlZmluZSBC
M1N3aXRjaENhc2VfaAorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hDYXNlIHsKK3B1Ymxp
YzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNoQ2FzZShpbnQ2
NF90IGNhc2VWYWx1ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDog
bV9jYXNlVmFsdWUoY2FzZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7
CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEh
bV90YXJnZXQ7IH0KKworICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9j
YXNlVmFsdWU7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXQ7IH0KKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jaygpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0LmJsb2NrKCk7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZTsKKyAgICBGcmVxdW50ZWRC
bG9jayB0YXJnZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbGR1ZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2Ug
U3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgU3dpdGNoQ2Fz
ZSByZXN1bHQgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0g
PSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6YXBwZW5kQ2FzZShjb25z
dCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobV9z
dWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNjZXNzb3JzW21fc3VjY2Vzc29ycy5zaXplKCkg
LSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKHN3aXRjaENh
c2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3aXRjaFZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRoaXMgZGVzdHJ1Y3RpdmVseSBvdmVycmlkZXMg
Q29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAgICBvdXQucHJpbnQobGlzdER1bXAoKnRoaXMp
LCAiLCBmYWxsVGhyb3VnaCA9ICIsIGZhbGxUaHJvdWdoKCkpOworfQorCitTd2l0Y2hWYWx1ZTo6
U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sqIGZh
bGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gsIG9yaWdpbikKK3sK
KyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVlX2gKKyNk
ZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBT
d2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8gbnVtQ2FzZVZhbHVlcygp
ICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8gVGhlIHN1Y2Nlc3NvciBm
b3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4LgorICAgIGludDY0X3QgY2Fz
ZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpXTsgfQorICAg
IAorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzOyB9CisKKyAgICBGcmVxdWVudGVkQmxvY2sgZmFsbFRocm91Z2goKSBjb25zdCB7
IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBmYWxs
VGhyb3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNl
IGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENh
c2UoY2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7CisgICAgfQorICAgIFN3aXRj
aENhc2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3aXRjaChudWxscHRyKQor
ICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChp
bmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRv
ciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgp
OworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTd2l0Y2hWYWx1ZSog
bV9zd2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKwor
ICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJ
ZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlv
dSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRo
aXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIg
Y2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAg
IFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVu
ZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCk7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9p
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50
KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0
LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAg
ICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5
cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lk
LAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJvb2wg
aXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUgPT0g
SW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJldHVy
biB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlcigpIGNvbnN0Cit7Cisg
ICAgaWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJl
dHVybiBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
QjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxv
blZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworVXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9u
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJeIiwgbV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2ls
b25WYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IFVwc2lsb247IH0KKworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGko
KSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUo
aW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisg
ICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAg
fQorCisgICAgVmFsdWUqIG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgeworCitjbGFz
cyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihQcm9jZWR1cmUmIHByb2NlZHVy
ZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBt
X3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgbV93aGVuKHdoZW4pCisgICAgICAgICwg
bV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBWQUxJREFU
RShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWlsKF9fRklM
RV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3RyaW5n
IG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2b2lkIHJ1bigpCisgICAg
eworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7CisgICAgICAgIEhhc2hTZXQ8
VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5CbG9j
azsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUpIHsKKyAg
ICAgICAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFs
dWUgOiAqYmxvY2spCisgICAgICAgICAgICAgICAgdmFsdWVJbkJsb2NrLmFkZCh2YWx1ZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJlLnZhbHVl
cygpKQorICAgICAgICAgICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsKKworICAgICAgICBmb3Ig
KFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJ
bkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCisgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUlu
UHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisKKyAgICAgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hp
bGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUlu
UHJvYy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4iLCBwb2ludGVyRHVtcChj
aGlsZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBi
bG9ja3MpIHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2st
PnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAg
ICAgICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaywg
Ii0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogRXhwYW5kIHRoaXMgdmFsaWRhdGlvbiBwaGFz
ZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDQ4MAorICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNo
YXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0
IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAg
ICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5n
UHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJCMyBWQUxJREFUSU9OIEZB
SUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgi
LCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJp
bnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4pCisgICAg
ICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7CisgICAg
ICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZv
cmUpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQmVmb3JlICIsIHdoZW4sICI6XG4iKTsKKyAg
ICAgICAgICAgIG91dC5wcmludChtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIG91
dC5wcmludCgiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIG91dC5wcmludChtX3By
b2NlZHVyZSk7CisKKyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAg
V1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVuY3Rpb24s
IGNvbmRpdGlvbik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIFByb2NlZHVy
ZSYgbV9wcm9jZWR1cmU7CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVmb3JlOworfTsKKworfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFs
aWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUsIHdoZW4sIGR1bXBCZWZvcmUpOworICAgIHZhbGlk
YXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzVmFsaWRhdGVfaAorI2RlZmluZSBCM1ZhbGlkYXRlX2gKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1
cmUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9
IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzVmFs
aWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitWYWx1ZTo6flZhbHVlKCkKK3sKK30K
Kwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdmFsdWUpCit7CisgICAg
Ly8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNlbWVudCBv
ZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBsYWluIElk
ZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd2Ug
bmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFj
ZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4KKwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5cGU7Cisg
ICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhp
cy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7Cisg
ICAgdm9pZCogbWlzYyA9IHRoaXMtPm1pc2M7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlID09
IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3
ICh0aGlzKSAoaW5kZXgsIElkZW50aWZ5LCB0eXBlLCBvcmlnaW4sIHZhbHVlKTsKKworICAgIHRo
aXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsK
KyAgICB0aGlzLT5taXNjID0gbWlzYzsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30K
Kwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNvZGUpOworCisgICAgb3V0
LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNo
aWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChj
aGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0OworICAgIGR1bXBNZXRh
KHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7
CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJp
bmcpOworCisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3QgVmFsdWU6OmFzSW50MzIo
KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhh
c0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitkb3VibGUgVmFsdWU6
OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiAwOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZp
cnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5Ogor
ICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2
OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6Cisg
ICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNl
IFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVj
a1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlw
ZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRlcigpOwor
ICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBEVG9JMzI6CisgICAg
Y2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAg
Y2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJF
cXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVx
dWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGNh
c2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7CisgICAg
Y2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gRG91YmxlOworICAg
IGNhc2UgTm9wOgorICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpbmNsdWRl
ICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
VmFsdWUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVk
ZWYgVmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlzdDsKKworICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBkdW1wUHJlZml4ID0gIkAiOworCisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUp
IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgflZhbHVlKCk7CisKKyAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICAvLyBOb3RlIHRo
YXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZhbHVlcyB3
aXRoIGlkZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29k
ZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9Cisg
ICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJl
bltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBl
IHVzaW5nIHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47
IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBt
X2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAg
ICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICAvLyBU
aGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBk
byBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZlIGEKKyAgICAvLyBBcmd1bWVudFJlZ1Zh
bHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8gaWYgKEFyZ3VtZW50UmVnVmFsdWUqIGFy
Z3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCkpIHsKKyAgICAvLyAgICAg
dGhpbmdzCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlm
IHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGlzIHJl
dHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2VwdHMob3Bjb2RlKCkpIHJldHVybnMgZmFs
c2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhcygpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhh
c0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Q7CisgICAgCisgICAg
Ym9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisg
ICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50KCkgY29uc3Q7CisgICAg
Ym9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkg
Y29uc3Q7CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisKKyAgICBTdGFja21hcCogc3Rh
Y2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIC8v
IFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgo
aW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBl
KQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJz
dENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlz
IGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBu
byBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgp
CisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAg
ICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBp
cyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9w
Y29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAg
ICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAg
ICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQorICAgICAgICAsIG1fb3Jp
Z2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMu
Li4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVz
IHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhh
dCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKKyAgICBleHBsaWNpdCBWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBt
X2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5
cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikK
KyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCisgICAgZXhw
aWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmln
aW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbihj
aGlsZHJlbikKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZvcihPcGNvZGUs
IFZhbHVlKiBmaXJzdENoaWxkKTsKKworICAgIC8vIFRoaXMgZ3JvdXAgb2YgZmllbGRzIGlzIGFy
cmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgorICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgT3Bj
b2RlIG1fb3Bjb2RlOworICAgIFR5cGUgbV90eXBlOworICAgIAorICAgIE9yaWdpbiBtX29yaWdp
bjsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisKK3B1YmxpYzoKKyAgICBCYXNpY0Js
b2NrKiBvd25lciB7IG51bGxwdHIgfTsgLy8gY29tcHV0ZWQgbGF6aWx5LgorICAgIFZhbHVlKiBy
ZXBsYWNlbWVudCB7IG51bGxwdHIgfTsgLy8gdXNlZCBmb3IgYW5hbHlzZXMgYW5kIHRyYW5zZm9y
bWF0aW9ucy4KK307CisKK2NsYXNzIERlZXBWYWx1ZUR1bXAgeworcHVibGljOgorICAgIERlZXBW
YWx1ZUR1bXAoVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVlLT5kZWVwRHVtcChvdXQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBWYWx1ZSogbV92YWx1ZTsKK307CisKK0RlZXBWYWx1ZUR1bXAgZGVlcER1
bXAoVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVwVmFsdWVEdW1wKHZhbHVlKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1ZhbHVlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNkZWZpbmUgQjNWYWx1ZUlu
bGluZXNfaAorCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDMy
VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3RE
b3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4KK1QqIFZhbHVlOjphcygpCit7CisgICAgaWYgKFQ6OmFjY2VwdHMob3Bjb2Rl
KCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit0ZW1wbGF0ZT50eXBlbmFtZSBUPgorY29uc3QgVCogVmFsdWU6OmFzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxWYWx1ZSo+KHRoaXMpLT5hczxUPigpOwor
fQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29u
c3QzMlZhbHVlPigpOworfQorCitpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpo
YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3Q2NFZhbHVlPigpOworfQor
CitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2
NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQoKSBjb25zdAorewor
ICAgIHJldHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0KCk7Cit9CisKK2ludDY0X3QgVmFsdWU6
OmFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSA/IGFzSW50MzIoKSA6IGFz
SW50NjQoKTsKK30KKworYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3QKK3sK
KyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworYm9vbCBWYWx1
ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVl
PigpOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
YXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworU3RhY2ttYXAqIFZhbHVlOjpz
dGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4o
KSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2ttYXA7CisgICAgaWYgKFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJu
ICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1ZhbHVlSW5saW5lc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1ZVJlcDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tpbmQpOworICAgIHN3aXRjaCAo
bV9raW5kKSB7CisgICAgY2FzZSBOb25lOgorICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgcmVn
KCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAgICBvdXQu
cHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbVNQKCks
ICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBvdXQu
cHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZVJlcDo6S2luZCBraW5kKQorewor
ICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAgb3V0
LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIlJl
Z2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAg
ICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1
ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFja0FyZ3VtZW50Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFudDoKKyAgICAgICAg
b3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBfaAorCisjaW5jbHVkZSAi
UmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0byBkZXNjcmliZSB2YWx1ZSBy
ZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQgYm90aCB0byBmb3JjZSBhCisv
LyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNlbnRhdGlvbi4gV2hlbiB0aGUg
QjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBzYXkKKy8vIHRoYXQgaXQncyBh
biBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQgcmVwcmVzZW50YXRpb24gaXQg
cGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQuCisKK2NsYXNzIFZhbHVlUmVw
IHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXBy
ZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFueSByZXByZXNlbnRhdGlv
bi4gQXMgYW4KKyAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRo
YXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2UgZm9yIHRoZQorICAgICAgICAv
LyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBhIENoZWNrTXVsLgorICAgICAgICBB
bnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMg
dGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBhCisgICAgICAg
IC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKKyAgICAgICAgU29tZVJl
Z2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZv
cmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAorICAgICAgICAvLyByZXBy
ZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tlZC4KKyAgICAg
ICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0
aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90IGEgdmFsaWQK
KyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgIFN0YWNrLAorCisgICAg
ICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0aGUgdmFsdWUg
dG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAgICAgICAgLy8gb2Zmc2V0
LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXBy
ZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50LWZvbGRlZCB0aGUgdmFs
dWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBWYWx1ZVJlcCgpCisgICAg
ICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVmFsdWVSZXAo
UmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAgICAgICwgbV92YWx1ZShy
ZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHJlZyhSZWcg
cmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7CisgICAgfQorCisgICAg
c3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21GUCkKKyAgICB7CisgICAg
ICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAg
ICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICB9CisKKyAgICBzdGF0aWMg
VmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9tU1ApCisgICAgeworICAg
ICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFja0FyZ3Vt
ZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21TUDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50OworICAg
ICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJl
cCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVmFs
dWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgS2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJlZygpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAgICAgICAg
cmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9m
ZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNr
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9
CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1
cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAgIH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEtp
bmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
Z2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTA1IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisj
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JT
IGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklC
VVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MK
KyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQg
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCisk
dmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7
JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9y
aWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKwor
ICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAg
ICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255
bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAg
IEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4gL1xBXCQvID8gJCcgOiBu
YW1lCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRy
ZW4gPyBjaGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAg
IG9wY29kZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisg
ICAgICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNoaWxkLCBp
bmRleCB8CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hp
bGQubmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAgICAgICAg
ICAgICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDph
bm9uT3BlcmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAorICAg
ICAgICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJv
YykKKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3Jl
YWRlciA6bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9k
dWN0aW9ucykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHBy
b2R1Y3Rpb25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIg
OmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1l
LCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGlu
ZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAg
ICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tl
bgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlh
bGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBA
c3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAg
ICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJp
bmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBl
bmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4g
b3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmlu
c3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigq
Y29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQ
YXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBh
cnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQK
K2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5u
ZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdo
aWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMo
W15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xB
XG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJl
ciArPSAxCisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLworICAg
ICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVt
YmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hp
dGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVz
dWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5u
ZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3Ry
WzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0
Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAg
ICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBt
aWdodCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hl
cikpXFovCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEFb
YS16QS1aMC05JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitl
bmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisg
ICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisg
ICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAor
CisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYg
cGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2Vu
LnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1l
bnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBm
aWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJv
ciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAg
ICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VF
cnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAg
ICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAg
cmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50
aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAg
ICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlv
bnMsIHByb2R1Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0gcHJvZHVjdGlvbi52YXJOYW1lCisg
ICAgICAgICAgICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0aW9uIGhhcyBzYW1lIG5hbWUgYXMg
cGFyZW50IHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgaWYgcHJvZHVjdGlvbnMu
ZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAg
ICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisg
ICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBlbmQKKworICAgIGRlZiBwYXJz
ZQorICAgICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAgICAgICBtYXRjaGVyTmFtZSA9IGNv
bnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorCisgICAgICAgIGxv
b3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAg
ICAgICAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVkZSIuIElmIHdlIGRpZCB0
aGF0LCBpdCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHBhcnNlUHJv
ZHVjdGlvbgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3Qg
eyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgICAgIGVuZAor
CisgICAgICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgICAgIH0KKworICAg
ICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAg
ICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAg
ICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBpZiB0b2tlbiA9PSAiPSIK
KyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAgICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlk
ZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9
PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICAgICAgb3Bjb2RlID0gbmFt
ZQorICAgICAgICAgICAgbmFtZSA9IG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1
cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisg
ICAgICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGxvb3AgeworICAgICAg
ICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisKKyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1l
LCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorCisgICAgICAgICAgICBicmVhayBpZiB0
b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICB9CisKKyAgICAg
ICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAgICAgICAgYWR2YW5jZQorCisgICAgICAgIFBy
b2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQK
K2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVh
ZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hlciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBT
dWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRleE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisg
ICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4
TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVh
Y2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5k
ZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAg
ICAgfQorICAgIGVuZAorCisgICAgZGVmIG1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAg
IGluZGV4TGlzdC5tYXAgeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5k
ZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitGaWxlLm9wZW4oIkIzIiAr
IG1hdGNoZXIubmFtZSArICIuaCIsICJ3IikgeworICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1
dHMgIi8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2Zp
bGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisKKyAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21h
dGNoZXIubmFtZX1faCIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1f
aCIKKyAgICAKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisg
ICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRw
LnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBy
dW4je21hdGNoZXIubmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAg
b3V0cC5wdXRzICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Bl
cmx5IGluZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5
b3UKKyAgICAjIHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQg
aW4gYSBnb29kIHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3Ig
eW91LgorCisgICAgIyBJbiBvZGQgc2l0dWF0aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0
IHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0
cC5wdXRzICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsiCisgICAgICAgIAorICAgICMgVGhpcyBqdXN0
IHByb3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlv
bnMgaGF2aW5nIGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2
YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAg
cHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwg
aW5kZXggfAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2lu
ZGV4TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5s
ZW5ndGgKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAg
ICAgZW5kCisgICAgICAgIH0KKworICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAg
ICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhM
aXN0WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0tPmNoaWxkcmVuLnNpemUoKSA+
PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKwor
ICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9k
dWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxp
Y2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0
aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMg
Y29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9m
CisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRl
ZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAg
ICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0
aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9u
ZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0
aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAg
IGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFz
T3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0
c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExp
c3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVu
dGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdp
dGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRl
eExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNv
ZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8g
Z3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAg
ICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRl
eCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0K
KyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJv
ZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50
LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29k
ZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAg
ICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0g
U3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAg
ICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0
Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5n
dGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAg
ICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNo
Lm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBo
YXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20g
dGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4u
CisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVt
bkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJl
bi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19h
CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBu
ZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRz
ICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9
KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21w
aWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BB
UkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHBy
b2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAg
cHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1h
dGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhp
bmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFs
dWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAg
ICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1h
cEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRw
LCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAs
IHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAg
ICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFp
bnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRo
ZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4
TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5h
bWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExp
c3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJz
aXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBp
bmRleExpc3QgfAorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4
IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQor
ICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSog
I3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAgICAgICAgIGludGVybmFsQXJn
dW1lbnRzID0gW10KKyAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAg
ICAgdHJ5QXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAg
ICAgIHNlZW4gPSB7fQorICAgICAgICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAg
ICAgICAgICAgICAgIHwgcGFyZW50VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtp
bmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9
LT5jaGlsZCgje2luZGV4fSkiCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
c2VlbltjaGlsZFZhck5hbWVdCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsi
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFy
TmFtZX0pIHsiCisgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVl
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZh
bHVlKiAje2NoaWxkVmFyTmFtZX0gPSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAg
ICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hp
bGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5h
bCBvciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZEFy
Z3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5kID09IDph
bm9uT3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRWYXJO
YW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFkYXB0
b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJndW1l
bnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRJ
bnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5PworICAg
ICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygiICsgb3Bl
cmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlB
cmd1bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0cyAiYWRh
cHRvci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBpbnRlcm5h
bEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNj
ZXB0SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpOyIK
KyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1w
dHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJhbmRzTGF0
ZSgiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybjsiCisgICAgICAgICAgICBvdXRwLnB1dHMg
In0iCisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0
Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorCisj
aW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAi
QWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgYXR0ZW1wdEFzc2lnbm1lbnQoCisgICAg
U3RhY2tTbG90KiBzbG90LCBpbnRwdHJfdCBvZmZzZXRGcm9tRlAsIGNvbnN0IFZlY3RvcjxTdGFj
a1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDog
b3RoZXJTTG90cykgeworICAgICAgICBpZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9mZnNldEZyb21GUCArIHNsb3QtPmJ5
dGVTaXplKCkgPj0gb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgKyBvdGhlclNs
b3QtPmJ5dGVTaXplKCkgPj0gb2Zmc2V0RnJvbUZQKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIHNsb3QtPnNldE9mZnNldEZyb21GUChvZmZzZXRGcm9tRlApOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIGFzc2lnbihTdGFja1Nsb3QqIHNsb3QsIGNvbnN0IFZl
Y3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBpZiAoYXR0ZW1wdEFzc2lnbm1l
bnQoc2xvdCwgLXNsb3QtPmJ5dGVTaXplKCksIG90aGVyU2xvdHMpKQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTTG90IDogb3RoZXJTbG90cykgeworICAgICAg
ICBpZiAob3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKQorICAgICAgICAgICAgJiYgYXR0ZW1wdEFz
c2lnbm1lbnQob3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSAtIHNsb3QtPmJ5dGVTaXplKCkpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlU3Rh
Y2soQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9j
YXRlU3RhY2siKTsKKworICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0aGUgbG9ja2VkIHNsb3RzIGlu
IG9yZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCisg
ICAgLy8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1l
IG9mZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCisgICAgQVNTRVJUKCFjb2RlLmZyYW1l
U2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3Rz
OworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Q7CisgICAg
Zm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBzd2l0
Y2ggKHNsb3QtPmtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoK
KyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgICAgICBh
c3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGxvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAg
ICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQXMg
YSBtYXR0ZXIgb2Ygc2FuaXR5LCB1bmFzc2lnbiB0aGlzLiBNYXliZSBpdCB3b3VsZCBiZSBnb29k
IHRvIGV2ZW4gaGF2ZSBhCisgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBydWxlIHRoYXQg
dGhpcyBjYW5ub3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIHNsb3QtPnNldE9mZnNldEZyb21G
UCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIC8vIFRoaXMgaXMgYSBmYWlybHkgZXhwZW5zaXZlIGxvb3AsIGJ1dCBpdCdzIE9LIGJl
Y2F1c2Ugd2UnbGwgdXN1YWxseSBvbmx5IGhhdmUgYSBoYW5kZnVsIG9mCisgICAgLy8gbG9ja2Vk
IHN0YWNrIHNsb3RzLgorICAgIHdoaWxlICghbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LmlzRW1w
dHkoKSkgeworICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBsb2NrZWRTdGFja1Nsb3RzV29ya2xp
c3QudGFrZUxhc3QoKTsKKyAgICAgICAgYXNzaWduKHNsb3QsIGFzc2lnbmVkTG9ja2VkU3RhY2tT
bG90cyk7CisgICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7Cisg
ICAgfQorCisgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgYW5vbnltb3VzIHNsb3RzLiBOb3RlIHRo
YXQgdGhlb3JldGljYWxseSB3ZSBzaG91bGQgZG8gYW4gZXNjYXBlIGFuYWx5c2lzCisgICAgLy8g
aGVyZS4gQnV0LCBjdXJyZW50bHkgQWlyIGRvZXNuJ3Qgc3VwcG9ydCBlc2NhcGluZyBhIFN0YWNr
U2xvdCEKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGVzY2FwaW5nIGEgU3RhY2tTbG90
IGFuZCBhZGQgZXNjYXBlIGFuYWx5c2lzIHRvIGFsbG9jYXRlU3RhY2soKS4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDMwCisKKyAgICBhdXRvIGlz
UmVsZXZhbnQgPSBbXSAoY29uc3QgQXJnJiBhcmcpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4g
YXJnLmlzU3RhY2soKSAmJiBhcmcuc3RhY2tTbG90KCktPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5k
OjpBbm9ueW1vdXM7CisgICAgfTsKKworICAgIExpdmVuZXNzPEFyZz4gbGl2ZW5lc3MoY29kZSk7
CisgICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVu
Y2UoY29kZS5zaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzbG90czsKKworICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIExpdmVuZXNzPEFyZz46Okxv
Y2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBhdXRvIGludGVy
ZmVyZSA9IFsmXSAoKSB7CisgICAgICAgICAgICAvLyBGb3JtIGEgY2xpcXVlIG9mIHN0YWNrIHNs
b3RzIHRoYXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0IG9mIHN0YWNrIHNsb3RzCisg
ICAgICAgICAgICAvLyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgIHNsb3Rz
LnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6IGxvY2FsQ2FsYy5saXZlKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZW1ldmFudChhcmcpKQorICAgICAgICAgICAgICAg
ICAgICBzbG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbG90cy5zaXplKCk7ICsraSkgeworICAg
ICAgICAgICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBzbG90c1tpXTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNsb3RzLnNpemUoKTsgKytqKSB7CisgICAg
ICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIgPSBzbG90c1tpXTsKKworICAgICAgICAg
ICAgICAgICAgICBTdGFja1Nsb3QqIGZpcnN0ID0gb3V0ZXI7CisgICAgICAgICAgICAgICAgICAg
IFN0YWNrU2xvdCogc2Vjb25kID0gaW5uZXI7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJz
dC0+aW5kZXgoKSA+IHNlY29uZC0+aW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0
ZDo6c3dhcChmaXJzdCwgc2Vjb25kKTsKKworICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmVu
Y2VbZmlyc3RdLmFkZChzZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmVuY2Vb
c2Vjb25kXS5hZGQoZmlyc3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGludGVyZmVyZShsb2NhbENhbGMubGl2ZSgpKTsKKyAgICAgICAg
CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdElu
ZGV4LS07KSB7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdElu
ZGV4KSk7CisgICAgICAgICAgICBpbnRlcmZlcmUobG9jYWxDYWxjLmxpdmUoKSk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgYXNzaWduIHN0YWNrIGxvY2F0aW9ucy4gQXQgaXRz
IGhlYXJ0IHRoaXMgYWxnb3JpdGhtIGlzIGp1c3QgZmlyc3QtZml0LiBGb3IgZWFjaAorICAgIC8v
IFN0YWNrU2xvdCB3ZSBqdXN0IHdhbnQgdG8gZmluZCB0aGUgb2Zmc2V0RnJvbUZQIHRoYXQgaXMg
Y2xvc2VzdCB0byB6ZXJvIHdoaWxlIGVuc3VyaW5nIG5vCisgICAgLy8gb3ZlcmxhcCB3aXRoIG90
aGVyIFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdpdGguCisgICAgdW5zaWduZWQgZnJh
bWVTaXplRm9yU3RhY2tTbG90cyA9IGZyYW1lU2l6ZUZvckxvY2tlZDsKKyAgICBWZWN0b3I8U3Rh
Y2tTbG90Kj4gb3RoZXJTbG90czsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3Rh
Y2tTbG90cygpKSB7CisgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAg
ICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZzZXQuCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBwb3NzaWJsZSBmaXJzdCBmaXQgb2Zmc2V0
cyBhcmU6CisgICAgICAgIC8vIC0gZnJhbWVTaXplRm9yTG9ja2VkIC0gc2xvdC0+Ynl0ZVNpemUo
KQorICAgICAgICAvLyAtIGZvciBhbGwgc2xvdDIgaW4gaW50ZXJmZXJlbmNlW3Nsb3RdLCBzbG90
Mi0+b2Zmc2V0RnJvbUZQKCkgLSBzbG90LT5ieXRlU2l6ZSgpLgorICAgICAgICAvLyBXZSBuZWVk
IHRvIGZpbmQgb25lIG9mIHRob3NlIHRoYXQgZG9lc24ndCBpbnRlcmZlcmUgd2l0aCBhbnlvbmUu
CisKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiYgaW50ZXJmZXJpbmdTbG90cyA9IGludGVy
ZmVyZW5jZVtzbG90XTsKKyAgICAgICAgb3RoZXJTbG90cy5yZXNpemUoYXNzaWduZWRMb2NrZWRT
dGFja1Nsb3RzLnNpemUoKSArIGludGVyZmVyaW5nU2xvdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7ICsr
aSkKKyAgICAgICAgICAgIG90aGVyU2xvdHNbaV0gPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHNb
aV07CisgICAgICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90
cy5zaXplKCk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBpbnRlcmZlcmlu
Z1Nsb3RzKQorICAgICAgICAgICAgb3RoZXJTbG90c1tuZXh0SW5kZXgrK10gPSBvdGhlclNsb3Q7
CisKKyAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOworICAgIH0KKworICAgIC8vIEZp
Z3VyZSBvdXQgaG93IG11Y2ggc3RhY2sgd2UncmUgdXNpbmcgZm9yIHN0YWNrIHNsb3RzLgorICAg
IHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSAwOworICAgIGZvciAoU3RhY2tTbG90
KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xv
dHMgPSBzdGQ6Om1heChmcmFtZVNpemVGb3JTdGFja1Nsb3RzLCAtc2xvdC0+b2Zmc2V0RnJvbUZQ
KCkpOworCisgICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFy
ZWEgd2UgbmVlZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAg
ICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcg
OiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5
dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKKyAgICAgICAgICAgICAgICAgICAg
Ly8gc3VjaCBhbiBhd2Vzb21lIGFzc3VtcHRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAg
ICAgICAgICAgICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7CisgICAgICAgICAgICAg
ICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShhcmcub2Zmc2V0KCkgKyA4KTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBj
b2RlLnNldEZyYW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3RzICsgY29kZS5jYWxsQXJnQXJl
YVNpemUoKSk7CisKKyAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0gdGhlIGNvZGUgdG8gdXNlIEFk
ZHIncyBpbnN0ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEgbG9zc2xlc3MKKyAgICAvLyB0
cmFuc2Zvcm1hdGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBTdGFja1Nsb3RzIGFycmF5IHRv
IGZpZ3VyZSBvdXQgd2hpY2ggU3RhY2tTbG90IGFueQorICAgIC8vIG9mZnNldC1mcm9tLUZQIHJl
ZmVycyB0by4KKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAg
IGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6
IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0g
QXJnOjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0KCkgKyBhcmcuc3RhY2tT
bG90KCktPm9mZnNldEZyb21GUCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICAgICAgICAgIGFyZyA9
IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpIC0gY29kZS5mcmFt
ZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlU3RhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJBbGxvY2F0ZVN0YWNrX2gKKyNkZWZpbmUgQWlyQWxsb2NhdGVTdGFja19oCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsK
KworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFjZXMgb24gdGhlIHN0YWNrLiBJ
dCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGluZGV4CisvLyBvcmRlciBhbmQg
dGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3QgZml0LgorCit2b2lkIGFsbG9j
YXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBBaXJBbGxvY2F0ZVN0YWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBaXJBcmcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBv
dXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUbXA6Cisg
ICAgICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEltbToK
KyAgICAgICAgb3V0LnByaW50KCIkIiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbW02NDoKKyAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIG1fb2Zmc2V0KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAg
ICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFz
ZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmRleDoKKyAgICAgICAgaWYg
KG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0
LnByaW50KCIoIiwgYmFzZSgpLCAiLCIsIGluZGV4KCkpOworICAgICAgICBpZiAoc2NhbGUoKSAh
PSAxKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7CisgICAgICAgIG91dC5w
cmludCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgaWYg
KG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCk7CisgICAgICAgIG91dC5w
cmludCgiKCIsIHBvaW50ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAg
b3V0LnByaW50KG9mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiKGNhbGxBcmcpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIG91dC5wcmludChhc1JlbGF0
aW9uYWxDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlc0NvbmQ6Cisg
ICAgICAgIG91dC5wcmludChhc1Jlc3VsdENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHNwZWNpYWwo
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2luY2x1ZGUgIkFpclRtcC5oIgor
I2luY2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFja1Nsb3Q7CisKKy8vIFRo
aXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSB3aWxs
IHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3QoLi4uLCBBcmc6Omlt
bSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1YmxpYzoK
KyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVz
ZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtpbmQgOiBpbnQ4X3Qg
eworICAgICAgICBJbnZhbGlkLAorICAgICAgICBUbXAsCisgICAgICAgIEltbSwKKyAgICAgICAg
SW1tNjQsCisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAorICAgICAgICBDYWxsQXJnLAor
ICAgICAgICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAgUmVzQ29uZCwKKyAgICAg
ICAgU3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAgICAgICBV
c2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsKKworICAgIGVudW0gVHlw
ZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAgIH07CisKKyAgICBzdGF0
aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOworCisgICAgc3RhdGljIGJvb2wgaXNVc2Uo
Um9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2Ug
VXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9y
QjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNhc2UgSW50
NjQ6CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAg
ICAgICAgcmV0dXJuIEZQOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gR1A7CisgICAgfQorCisgICAgQXJnKCkKKyAgICAgICAgOiBtX2tp
bmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorCisgICAgQXJnKEFpcjo6VG1wIHRtcCkKKyAgICAg
ICAgOiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFzZSh0bXApCisgICAgeworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tOworICAgICAgICByZXN1bHQubV9vZmZz
ZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMg
QXJnIGltbTY0KGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2
YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGFk
ZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgc3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZhbHVlLCBpbnQzMl90IG9mZnNldCA9IDAp
CisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3Rh
Y2s7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFs
dWUpOworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9mZnNldDsgLy8gSSBrbm93LCB5dWNrLgor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgY2FsbEFyZyhp
bnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNj
YWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgeworICAg
ICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2FzZSA0OgorICAgICAgICBj
YXNlIDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB1bnNp
Z25lZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2Nh
bGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNh
c2UgMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAg
ICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbmRleChB
aXI6OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5zaWduZWQgc2NhbGUgPSAxLCBpbnQzMl90
IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAg
ICBBU1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRTY2FsZShzY2Fs
ZSkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW5kZXg7
CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9pbmRleCA9
IGluZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KHNj
YWxlKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVsQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0
YXRpYyBBcmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlv
bikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBS
ZXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzcGVjaWFsKEFpcjo6U3BlY2lh
bCogc3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CisgICAgICAgICAgICAmJiBtX2tpbmQg
PT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisg
ICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAgICYmIG1f
c2NhbGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1
cm4gKnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAgIGJvb2wgaXNUbXAoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7CisgICAgfQorCisgICAgYm9vbCBpc0lt
bSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTsKKyAgICB9CisK
KyAgICBib29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9
PSBJbW02NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAgYm9vbCBpc1N0YWNrKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhY2s7CisgICAgfQorCisgICAg
Ym9vbCBpc0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBD
YWxsQXJnOworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAgIGJvb2wgaXNSZWxDb25kKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKKyAgICB9CisK
KyAgICBib29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgp
ID09IFJlc0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOworICAgIH0KKworICAgIGJvb2wgaXNB
bGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSB8fCBpc1N0YWNrKCk7
CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisKKyAgICBp
bnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW1t
IHx8IGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisK
KyAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRp
Y19jYXN0PGludHB0cl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIEFpcjo6VG1wIGJhc2Uo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9
PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgYm9vbCBoYXNP
ZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6Cisg
ICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2luZCgpID09
IFN0YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fc2NhbGUp
OworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwg
a2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1f
b2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgaW5k
ZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAg
ICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4g
bV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgQWlyOjpTcGVj
aWFsKiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3Bl
Y2lhbCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZz
ZXQpOworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQVG1w
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlAoKTsK
KyAgICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4g
YSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBpc0dQKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgor
ICAgICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5k
ZXg6CisgICAgICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAg
ICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNw
ZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAg
ICAgICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBp
ZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2
YWx1ZS4KKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5k
KCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAg
Y2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgSW52YWxp
ZDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAg
ICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIEJhc2U6CisgICAgICAgIGNhc2UgU3RhY2tTbG90
OgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW1tNjQ6IC8vIFllcywgd2Ug
YWxsb3cgSW1tNjQgYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3IgaW1wbGVt
ZW50aW5nIHN0YWNrbWFwcy4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBib29sIGhhc1R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2Fz
ZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUg
dHlwZSBpcyBhbWJpZ3VvdXMgZm9yIHNvbWUgYXJnIGtpbmRzLiBDYWxsIHdpdGggY2FyZS4KKyAg
ICBUeXBlIHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1AoKSA/IEdQIDog
RlA7CisgICAgfQorCisgICAgYm9vbCBpc1R5cGUoVHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1
cm4gaXNHUCgpOworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIGlzRlAoKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcg
Z3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncHIoKTsKKyAgICB9CisK
KyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYm
IHRtcCgpLmlzRlBSKCk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdG1wKCkuZnByKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNSZWco
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNSZWcoKTsK
KyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAo
KS5yZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB0bXAoKS5ncFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnBUbXBJ
bmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0bXAoKS50bXBJbmRleCgpOworICAgIH0KKworICAgIEFyZyB3aXRoT2Zm
c2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICgh
aGFzT2Zmc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIGlmIChzdW1P
dmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0KCksIGFkZGl0aW9uYWxPZmZzZXQpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNl
IEFkZHI6CisgICAgICAgICAgICByZXR1cm4gYWRkcihiYXNlKCksIG9mZnNldCgpICsgYWRkaXRp
b25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICByZXR1cm4gc3Rh
Y2soc3RhY2tTbG90KCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNh
c2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJldHVybiBjYWxsQXJnKG9mZnNldCgpICsgYWRkaXRp
b25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaW5k
ZXgoYmFzZSgpLCBpbmRleCgpLCBzY2FsZSgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQp
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3Io
bV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4OgorICAgICAg
ICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4KTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRo
YXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCisg
ICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgorICAgIC8v
CisgICAgLy8gbW92ICVyYXgsICglcmN4KQorICAgIC8vCisgICAgLy8gVGhpcyBkZWZzICglcmN4
KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwgVHlwZSBhcmdUeXBlLCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBU
bXA6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3Rvciht
X2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6
CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBmdW5j
dG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0ZWRJbW0zMigpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0IGFzVHJ1c3RlZElt
bTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChwb2ludGVyVmFsdWUoKSk7CisgICAg
fQorI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhc0FkZHJlc3MoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQWRkcigpKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5ncHIoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9v
ZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFzQmFzZUlu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0luZGV4KCkpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgIG1fYmFzZS5ncHIo
KSwgbV9pbmRleC5ncHIoKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlNjYWxlPihsb2dT
Y2FsZSgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7Cisg
ICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlv
bmFsQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENv
bmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRD
b25kaXRpb24gYXNSZXN1bHRDb25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzUmVzQ29uZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVy
OjpSZXN1bHRDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fb2Zmc2V0IHsgMCB9
OworICAgIEtpbmQgbV9raW5kIHsgSW52YWxpZCB9OworICAgIGludDMyX3QgbV9zY2FsZSB7IDEg
fTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9pbmRleDsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckFyZ19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEJh
c2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIzOjph
ZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVtb3Zl
UHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRlY2Vz
c29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxhY2VQ
cmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2lu
ZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBt
X2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMpCisg
ICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworfQorCitCYXNpY0Jsb2NrOjpC
YXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRl
eChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFpckJhc2ljQmxvY2tfaAorCisjaW5jbHVkZSAi
QWlyRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKK2NsYXNzIEluc2VydGlvblNldDsKKwor
Y2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGR1bXBQcmVmaXggPSAiIyI7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnN0PiBJbnN0
TGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0
OworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsK
KyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXplKCk7
IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2luc3RzLmJlZ2lu
KCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9pbnN0cy5lbmQo
KTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgY29uc3QgSW5zdCYgYXQoc2l6ZV90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorICAgIEluc3QmIGF0KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKworICAgIGNvbnN0IEluc3QmIGxh
c3QoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorICAgIEluc3QmIGxhc3QoKSB7
IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4K
KyAgICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBtX2luc3Rz
LmFwcGVuZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0KHN0ZDo6Zm9yd2Fy
ZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAgICAvLyBUaGUgIjAiIGNh
c2UgaXMgdGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28gdGhlICJ0aGVuIiBj
YXNlLiBUaGUgIjEiIGNhc2UgaXMgdGhlCisgICAgLy8gImVsc2UiIGNhc2UsIGFuZCBpcyB1c2Vk
IHRvIHJlcHJlc2VudCB0aGUgZmFsbC10aHJvdWdoIG9mIGEgY29uZGl0aW9uYWwgYnJhbmNoLgor
ICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMu
c2l6ZSgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEZyZXF1ZW50ZWRCbG9j
ayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhd
OyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkg
eyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorCisgICAgU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlz
dD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBC
YXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9j
aywgY29uc3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXpl
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRl
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0K
KyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNz
b3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisKKyAgICB2b2lkIGFkZFBy
ZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIHJlbW92ZVByZWRlY2Vzc29yKEJhc2lj
QmxvY2sqKTsKKyAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBC
YXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAg
ICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKKyAgICAKKyAg
ICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVu
c2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBTdWNjZXNzb3JMaXN0
IG1fc3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAg
ZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1
YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAg
IDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAg
IG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5w
cmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2sp
Cit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgpCit7
CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAg
IG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsK
KyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2Fy
ZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKworQ0NhbGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFs
KCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29u
c3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAg
IGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpVc2UsIEFyZzo6R1ApOworICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
Ly8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBxdWVyeSB0aGUgYXJnJ3MgdHlwZS4gVGhlIGFy
ZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdlCisgICAgICAgIC8vIHJlcXVpcmUgdGhlc2Ug
YXJncyB0byBiZSBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgICAgIGNhbGxiYWNrKGluc3QuYXJn
c1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tpXS50eXBlKCkpOworICAgIH0KK30KKworYm9vbCBD
Q2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNp
emUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoaW5zdC5hcmdz
WzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAgIGlmIChzaXplb2Yodm9p
ZCopID09IDQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYgKHNpemVvZih2b2lkKikgPT0gOCkKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6OlRtcDoK
KyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgY2FzZSBBcmc6
OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc0dQKCkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbaV0uaXNSZWcoKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5zdC5hcmdzW2ldID09IFRtcChzY3Jh
dGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuICBmYWxzZTsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiwgdW5z
aWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEgY2FuIGJlIGEgc3RhY2sgYWRkcmVzcyBm
b3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6cmVwb3J0VXNl
ZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQoreworfQorCitDQ2FsbEhlbHBl
cnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMm
IGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtp
bmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbVB0cjoKKyAgICAg
ICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGluc3QuYXJnc1sxXS5wb2lu
dGVyVmFsdWUoKSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hS
ZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGpp
dC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJn
OjpBZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOworICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6
SnVtcCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNsb2Ji
ZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3ZvaWQgQ0Nh
bGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiZnVuY3Rpb24gY2FsbCB0aGF0
IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5lIEFpckNDYWxsU3BlY2lhbF9oCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gVXNlIHRoaXMgc3Bl
Y2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBjb3Vyc2UgYSBTcGVj
aWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBvYmplY3QuIEFyZyAx
IGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJlZ2lzdGVyLCBvciBh
biBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRoZSBzZXQgb2YgYXJn
dW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1lbnRzIHRoYXQgZ28g
dG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdvcmsgb2YgZG9pbmcg
dGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24gd2h5CisvLyB3ZSBz
cGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRvIGEgY2FsbCBpcyBz
byB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0IHRoZXkgZ2V0IHVz
ZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSByZXBvcnQgYWxsIGFy
Z3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlmIHdlIGhhZCBhIGNh
bGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIgdG8gYmUgbGl2ZSB1
bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwgd2hpY2hldmVyIGhh
cHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGljIFNwZWNpYWwgewor
cHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNpYWwoKTsKKworICAg
IC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1
c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAgLy8gdXNlZCBmb3Ig
YXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBp
cyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBz
cGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lz
dGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMC4KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFj
aEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBv
dmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRt
aXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJl
cG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5l
cmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNs
b2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFt
JikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVy
ZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIK
KyNpbmNsdWRlICJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKK3sKK30KKworQ29kZTo6fkNvZGUo
KQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5KQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayht
X2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJs
b2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdCh1bnNpZ25l
ZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCit7
CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3RhY2tTbG90KGJ5dGVT
aXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1ZSkpOworICAgIFN0YWNrU2xvdCog
cmVzdWx0ID0gc2xvdC5nZXQoKTsKKyAgICBtX3N0YWNrU2xvdHMuYXBwZW5kKFdURjo6bW92ZShz
bG90KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lhbCogQ29kZTo6YWRkU3BlY2lh
bChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKK3sKKyAgICBtX3NwZWNpYWxzLmFw
cGVuZChXVEY6Om1vdmUoc3BlY2lhbCkpOworfQorCitDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxs
U3BlY2lhbCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAgICAgICBtX2NDYWxs
U3BlY2lhbCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAgICAgICAgYWRkU3Bl
Y2lhbChzdGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAgIH0KKworICAgIHJl
dHVybiBtX2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgp
Cit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30KKwordm9pZCBDb2Rl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBp
ZiAobnVtU3RhY2tTbG90cygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xvdHM6XG4i
KTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisgICAgICAg
ICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzbG90KSwgIlxuIik7CisgICAgfQorICAg
IGlmIChudW1TcGVjaWFscygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3BlY2lhbHM6XG4iKTsK
KyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogc3BlY2lhbHMoKSkKKyAgICAgICAgICAg
IG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsKKyAgICB9CisgICAg
b3V0LnByaW50KCJGcmFtZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwgIlxuIik7CisgICAgb3V0LnBy
aW50KCJDYWxsIGFyZyBhcmVhIHNpemU6ICIsIG1fY2FsbEFyZ0FyZWFTaXplLCAiXG4iKTsKKyAg
ICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzLCAiXG4i
KTsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKK3sKKyAgICB3aGlsZSAoaW5kZXggPCBzaXplKCkgJiYgIWF0KGluZGV4KSkKKyAg
ICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3Vuc2lnbmVkIENvZGU6OmZp
bmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmlu
ZEZpcnN0QmxvY2tJbmRleChpbmRleCArIDEpOworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjpmaW5k
TmV4dEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAoreworICAgIHJldHVybiBhdChmaW5k
TmV4dEJsb2NrSW5kZXgoYmxvY2stPmluZGV4KCkpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ29kZV9oCisjZGVmaW5lIEFpckNv
ZGVfaAorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwu
aCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKyNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0
TGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ0NhbGxT
cGVjaWFsOworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWlyIHsKKworLy8gVGhpcyBp
cyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVz
IGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0ZWQgbWFjaGluZSBjb2Rl
IC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUgY29kZSwg
eW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBDb2RlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFkZEJs
b2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIFN0YWNrU2xvdCogYWRkU3RhY2tT
bG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBu
dWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNp
YWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8gbWFrZSBhIEMg
Y2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxsU3BlY2lhbCgpOworCisgICAgVG1wIG5ld1Rt
cChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAg
ICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpncFRtcEZvckluZGV4KG1f
bnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1cm4g
VG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBzKyspOworICAgICAgICB9CisgICAgfQorCisg
ICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gbV9u
dW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJldHVybiBtX251
bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNhbGxBcmdBcmVhU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9CisKKyAgICAvLyBZb3UgY2Fu
IGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHRvIGZvcmNlIGEgbWluaW11bSBjYWxs
IGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKHVuc2lnbmVk
IHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSA9IHN0ZDo6bWF4KG1fY2Fs
bEFyZ0FyZWFTaXplLCBzaXplKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8gT25seSBwaGFzZXMgdGhhdCBk
byBzdGFjayBhbGxvY2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBDdXJyZW50bHksIG9u
bHkKKyAgICAvLyBBaXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRoaXMuCisgICAgdm9pZCBzZXRG
cmFtZVNpemUodW5zaWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAgICAgICAgbV9mcmFtZVNpemUg
PSBmcmFtZVNpemU7CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNh
dmVSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKworICAgIC8v
IFJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVucmVhY2hhYmxlIGJsb2Nrcy4K
KyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nr
cy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAvLyBGaW5kcyB0
aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4
JyA+PSBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0
IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID4gaW5kZXguCisgICAgdW5zaWduZWQgZmlu
ZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIEJhc2ljQmxvY2sq
IGZpbmROZXh0QmxvY2soQmFzaWNCbG9jayopIGNvbnN0OworCisgICAgY2xhc3MgaXRlcmF0b3Ig
eworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgIDogbV9jb2Rl
KG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgaXRlcmF0b3IoQ29kZSYgY29kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAg
ICAgICA6IG1fY29kZSgmY29kZSkKKyAgICAgICAgICAgICwgbV9pbmRleChtX2NvZGUtPmZpbmRG
aXJzdEJsb2NrSW5kZXgoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBC
YXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9j
b2RlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fY29kZS0+ZmluZEZpcnN0
QmxvY2tJbmRleChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBDb2RlKiBtX2NvZGU7
CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAg
Y2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3RhY2tT
bG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAgIDogbV9jb2RlKGNv
ZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAgICAgICBTdGFja1Ns
b3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3Rz
W2ldLmdldCgpOyB9CisgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3Ig
eworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAg
ICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29u
c3QgU3RhY2tTbG90c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24q
IG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07
CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlz
LCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0
aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2Nv
ZGU7CisgICAgfTsKKworICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHN0YWNrU2xvdHMoKSBjb25z
dCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKKyAgICBjbGFz
cyBTcGVjaWFsc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3BlY2lhbHNDb2xs
ZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6ZSgpOyB9CisgICAgICAgIFNwZWNpYWwqIGF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFsc1tpXS5nZXQoKTsgfQor
ICAgICAgICBTcGVjaWFsKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlv
bihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTcGVjaWFsc0NvbGxl
Y3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3BlY2lhbCogb3Bl
cmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0
aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsK
KyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAg
ICAgICAgICAgIGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAg
ICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIHNpemUoKSk7IH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAgU3Bl
Y2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1cm4gU3BlY2lhbHNDb2xsZWN0
aW9uKCp0aGlzKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJh
c2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+
PiBtX3NwZWNpYWxzOworICAgIENDYWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNpYWwgeyBudWxscHRy
IH07CisgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1G
UFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9mcmFtZVNpemUgeyAwIH07CisgICAgdW5zaWdu
ZWQgbV9jYWxsQXJnQXJlYVNpemUgeyAwIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9j
YWxsZWVTYXZlUmVnaXN0ZXJzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEFpckZyZXF1
ZW50ZWRCbG9ja19oCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBC
YXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8QmFzaWNCbG9jaz4g
RnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBBaXJGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorCisjaW5jbHVk
ZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJB
aXJIYW5kbGVDYWxsZWVTYXZlcy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgor
I2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCit2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgaml0
KQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUs
ICJpbml0aWFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxv
ZygiSW5pdGlhbCBhaXI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAg
ICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0aW9ucyBhbmQgdHJhbnNmb3Jt
YXRpb25zLgorICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXphdGlvbnMuCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NgorCisgICAgLy8gVGhp
cyBpcyB3aGVyZSB3ZSB3b3VsZCBoYXZlIGEgcmVhbCByZWdpc3RlciBhbGxvY2F0b3IuIFRoZW4s
IHdlIGNvdWxkIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKQorICAgIC8vIGluIHBsYWNlIG9mIHRoZSBy
ZWdpc3RlciBhbGxvY2F0b3Igb25seSBmb3IgdGVzdGluZy4KKyAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NworICAgIHNwaWxsRXZlcnl0
aGluZyhjb2RlKTsKKworICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHByb2xvZ3VlIGFu
ZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4gSXQgYWxzbwor
ICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVzIHdlJ3Jl
IHVzaW5nIGFuZCBzYXZlcyB0aGVtLgorICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUpOworCisg
ICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcgQXJncyBpbnRvIEFkZHIgYXJn
cyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcworICAgIC8vIHRoaXMgYnkgZmly
c3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3VsZCBiZSBwcmV0dHkgZGFybiBj
bG9zZSB0byBvcHRpbWFsLCBzbyB3ZQorICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFi
b3V0IHRoaXMgdmVyeSBtdWNoLgorICAgIGFsbG9jYXRlU3RhY2soY29kZSk7CisKKyAgICAvLyBG
SVhNRTogV2Ugc2hvdWxkIHJlYWxseSBoYXZlIGEgY29kZSBsYXlvdXQgb3B0aW1pemF0aW9uIGhl
cmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ3
OAorCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwg
ImZpbmFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygi
QWlyIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAg
fQorCisgICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJhdGUgY29kZS4KKyAgICBqaXQuZW1pdEZ1bmN0
aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuYWRkUHRyKFRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNp
emUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBHZW5l
cmF0aW9uQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuY29kZSA9IGNvZGU7CisgICAgSW5k
ZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tMYWJlbHMoY29kZS5z
aXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+
IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhl
bHBlcnM6Okp1bXAganVtcCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAgICAgIGlmIChibG9j
a0xhYmVsc1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAubGlua1RvKGJsb2Nr
TGFiZWxzW3RhcmdldF0sICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAgICB9OworCisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxvY2tKdW1wc1tibG9j
a10ubGluaygmaml0KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7Cisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGluc3QuZ2VuZXJhdGUoaml0LCBj
b250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9wY29kZSgp
ID09IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2Rl
LmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlKCkgPT0gUmV0KSB7CisgICAgICAgICAgICAvLyBXZSBj
dXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFp
ciwgc28gd2UgbmVlZCB0bworICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgorICAg
ICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0
KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+bGFzdCgpLmdlbmVyYXRlKGppdCwgY29u
dGV4dCk7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykKKyAgICAgICAgICAgIGp1
bXAgPSBpbnN0LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIHN3aXRjaCAoYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBBU1NFUlQo
IWp1bXAuaXNTZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAg
ICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2st
PnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxv
Y2soMSkgIT0gY29kZS5maW5kTmV4dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgICAgICBsaW5r
KGppdC5qdW1wKCksIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygxKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo
YXV0byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQYXRocykKKyAgICAgICAgbGF0ZVBhdGgtPnJ1
bihqaXQsIGNvbnRleHQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gKKyNkZWZpbmUgQWlyR2Vu
ZXJhdGVfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworCituYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyB0YWtl
cyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFjayBhbGxvY2F0aW9uIGFuZCBv
cHRpb25hbGx5IGhhc24ndCBoYWQgYW55CisvLyByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBkb2Vz
IGJvdGggb2YgdGhvc2UgdGhpbmdzLCBhbmQgdGhlbiBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcg
dGhlIGdpdmVuCisvLyBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBj
YWxsIGNhbGxiYWNrcyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcworLy8gZ2VuZXJhdGlu
Zy4KK3ZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYpOworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRp
b25Db250ZXh0X2gKKyNkZWZpbmUgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCisjaW5jbHVkZSA8
d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQgeworICAgIHR5cGVkZWYgdm9p
ZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7Cisg
ICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOworCisgICAg
VmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKKyAgICBDb2RlKiBjb2RlOworfTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyR2VuZXJh
dGlvbkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckhh
bmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxl
ZVNhdmVzLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9u
U2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29k
ZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImhhbmRsZUNhbGxl
ZVNhdmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1c2VkQ2FsbGVlU2F2ZXM7CisKKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAq
YmxvY2spIHsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAgICAg
ICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdCBmaXJzdCB3ZSBq
dXN0IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAgICAgICAgICAgICAgICAgICB1c2VkQ2FsbGVl
U2F2ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRvIHJlYWxseSBnZXQgdGhlIGNhbGxlZSBzYXZl
cy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOworCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSBSZWdpc3RlckF0
T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworCisgICAgc2l6ZV90IGJ5dGVTaXplID0gMDsK
KyAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5mb3JFYWNoKAorICAgICAgICBbJl0gKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSB7CisgICAgICAgICAgICBieXRlU2l6ZSA9IHN0
ZDo6bWF4KC1lbnRyeS5vZmZzZXQoKSwgYnl0ZVNpemUpOworICAgICAgICB9KTsKKworICAgIFN0
YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFja1Nsb3QoYnl0ZVNpemUsIFN0YWNrU2xv
dEtpbmQ6OkxvY2tlZCk7CisgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCBzaW5jZSB3ZSBjb3Vs
ZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0YWNrIHNsb3QgdG8gdGhpcworICAg
IC8vIGFyZWEuCisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAoLWJ5dGVTaXplKTsKKwor
ICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgewor
ICAgICAgICByZXR1cm4gQXJnOjpTdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgpICsgYnl0
ZVNpemUpOworICAgIH07CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwor
ICAgIAorICAgIC8vIEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9ndWUuCisg
ICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFjaCgKKyAgICAgICAgWyZdIChjb25z
dCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmlu
c2VydCgKKyAgICAgICAgICAgICAgICAwLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92ZSA6IE1v
dmVEb3VibGUsIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRyeSkpOworICAgICAgICB9KTsK
KyAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKworICAgIC8vIE5vdyBpbnNlcnQg
cmVzdG9yZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
Y29kZSkgeworICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgaWYg
KGxhc3Qub3Bjb2RlKCkgIT0gUmV0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Y29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgIFsmXSAoY29u
c3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIHsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICBibG9jay0+c2l6ZSgpIC0gMSwgZW50cnku
cmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLAorICAgICAgICAgICAgICAgICAgICBh
cmdGb3IoZW50cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKKyAgICAgICAgICAgIH0pOworICAgICAg
ICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKyNkZWZpbmUgQWlySGFu
ZGxlQ2FsbGVlU2F2ZXNfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgcGhhc2UgaWRlbnRpZmllcyBjYWxs
ZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUgdGhlbSBpbiB0
aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFuZGF0b3J5IHBo
YXNlLgorCisvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtlIHRoaXMgbW9yZSBpbnRl
cmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUKKy8vIHBvd2VyZnVsLgor
Ly8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5rIHdyYXBwaW5nOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4CisvLyBXZSBzaG91bGQgbWFrZSB0aGlzIGludGVyYWN0
IHdpdGggdGhlIGNsaWVudDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDQ1OQorCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25T
ZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9j
ay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4
ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5tX2luc3RzLCBtX2luc2VydGlvbnMpOworfQorCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisjZGVmaW5lIEFpckluc2VydGlvblNldF9o
CisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQ29kZTsKKwordHlwZWRl
ZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247CisKK2NsYXNzIEluc2VydGlvblNldCB7
CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2Rl
KGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUmIGNvZGUoKSB7IHJldHVybiBtX2NvZGU7
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmRJbnNlcnRpb24o
VCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoc3RkOjpm
b3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIElu
c3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwgSW5zdCYmIGluc3QpCisgICAg
eworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8
SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYuLi4gYXJn
dW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgSW5zdChzdGQ6OmZvcndh
cmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgdm9pZCBleGVjdXRl
KEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9y
PEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAiLCBsaXN0RHVtcChh
cmdzKSwgIiAgOyAiLCAqb3JpZ2luKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVmaW5lIEFpckluc3RfaAorCisj
aW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisKK25hbWVzcGFjZSBK
U0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZh
bHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0OworCitz
dHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBBcmdMaXN0
OworCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAgICA6IG9y
aWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9wY29kZSBv
cGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisg
ICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAsIG9yaWdpbihvcmln
aW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChP
cGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCisg
ICAgICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAg
ICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNv
ZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhX
VEY6Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAs
IG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBm
dW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRo
ZW0gZm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRp
dGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdy
ZQorICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBvbmx5IHdh
bGtzIHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBpdCBkb2Vz
bid0IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcmIGFyZyA6IGFyZ3MpCisgICAgICAgICAg
ICBhcmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAgfQorCisgICAgdHlwZWRlZiB2b2lk
IEVhY2hBcmdDYWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSk7CisgICAgCisgICAg
Ly8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4gVGhpcyBmdW5jdGlv
biBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBcmcoY29uc3QgRnVu
Y3RvciYgZnVuY3Rvcik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0bXAsIHJv
bGUsIHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JF
YWNoVG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JFYWNoQXJn
Um9sZSgKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5
cGUgdHlwZSkgeworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIGZ1
bmN0b3IpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gVGhpbmcgY2FuIGJlIGVp
dGhlciBBcmcgb3IgVG1wLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlz
IHVubG9ja3Mgc29tZSBleHRyYSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgp
IGNvbnN0OworCisgICAgLy8gUmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJl
cmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8g
ZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0
cnVlLgorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAg
IC8vIFVzZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hv
dWxkIGJlIGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVm
ZmljaWVuY3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwo
KSByZXR1cm5zIHRydWUuCisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lz
dGVyU2V0Jik7CisKKyAgICAvLyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFs
aWQgZm9ybXMgcmlnaHQgbm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5Cisg
ICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAg
ICAvLyBBc3N1bWluZyB0aGlzIGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBu
b3csIHdpbGwgaXQgc3RpbGwgYmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlm
IHdlIHB1dCBhbiBBZGRyIHJlZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3Ig
Q2FsbEFyZywgb2YgY291cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcg
dXNlcyB0aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBu
ZWVkIHNwaWxsaW5nOworICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBz
ZWUgaWYgaXQgY2FuIHJlcGxhY2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBp
dAorICAgIC8vIGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBm
b3JFYWNoVG1wIHRvIGRvIGEgcmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisg
ICAgYm9vbCBhZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0
ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxs
eSBvdXIgYmFja2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJu
cyB0aGUganVtcCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3
aXRoIHRoZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5j
dGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxs
SGVscGVyczo6SnVtcCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYp
OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFy
Z3M7CisgICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2lu
YXRlZCBmcm9tLgorICAgIE9wY29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJJbnN0X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlySW5zdElubGluZXNfaAorI2RlZmluZSBBaXJJbnN0SW5saW5l
c19oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIK
KyNpbmNsdWRlICJBaXJTcGVjaWFscy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZvckVhY2g7Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBGb3JFYWNoPFRtcD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBpbnN0LmZvckVhY2hUbXAoZnVuY3Rvcik7CisgICAgfQorfTsKK3RlbXBs
YXRlPD4gc3RydWN0IEZvckVhY2g8QXJnPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgZm9yRWFjaChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JFYWNoKCp0
aGlzLCBmdW5jdG9yKTsKK30KKworYm9vbCBJbnN0OjpoYXNTcGVjaWFsKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYXJncy5zaXplKCkgJiYgYXJnc1swXS5pc1NwZWNpYWwoKTsKK30KKworY29uc3Qg
UmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncygpCit7CisgICAgQVNTRVJUKGhh
c1NwZWNpYWwoKSk7CisgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUNsb2JiZXJl
ZFJlZ3MoKnRoaXMpOworfQorCit2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgQVNTRVJUKGhhc1NwZWNpYWwoKSk7
CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdpc3RlcnMoKnRoaXMsIHVzZWRS
ZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1NoaWZ0VmFsaWQoSW5zdCYgaW5zdCkKK3sK
KyNpZiBDUFUoWDg2KQorICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVy
OjpjeCk7CisjZWxzZQorICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9ICAgCisKK2lubGluZSBi
b29sIGlzTHNoaWZ0MzJWYWx1ZShJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1NoaWZ0VmFs
aWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckxp
dmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBZb3UgY2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3Zl
ciBUbXAncyBvciBvdmVyIEFyZydzLiBJZiB5b3UgY29tcHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0
IGJvdGgKKy8vIHN0YWNrIGxpdmVuZXNzIGFuZCB0bXAgbGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUaGluZz4KK2NsYXNzIExpdmVuZXNzIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzcyhDb2Rl
JiBjb2RlKQorICAgIHsKKyAgICAgICAgbV9saXZlQXRIZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7
CisgICAgICAgIG1fbGl2ZUF0VGFpbC5yZXNpemUoY29kZS5zaXplKCkpOworCisgICAgICAgIElu
ZGV4U2V0PEJhc2ljQmxvY2s+IHNlZW47CisKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsK
KyAgICAgICAgd2hpbGUgKGNoYW5nZWQpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsK
KworICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9j
a0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlLmF0
KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMs
IGJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+
c2l6ZSgpOyBpbnN0SW5kZXgtLTspCisgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVj
dXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0VGlt
ZSA9IHNlZW4uYWRkKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiBs
b2NhbENhbGMubGl2ZSgpID09IG1fbGl2ZUF0SGVhZFtibG9ja10pCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3Jz
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQo
CisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbENhbGMubGl2ZSgpLmJlZ2luKCksIGxvY2Fs
Q2FsYy5saXZlKCkuZW5kKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBt
X2xpdmVBdEhlYWRbYmxvY2tdID0gbG9jYWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVh
ZChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVB
dEhlYWRbYmxvY2tdOworICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRU
YWlsKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2
ZUF0VGFpbFtibG9ja107CisgICAgfQorCisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBi
ZSBydW4gaW4gcmV2ZXJzZS4KKyAgICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgTG9jYWxDYWxjKExpdmVuZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisg
ICAgICAgICAgICA6IG1fbGl2ZShsaXZlbmVzcy0+bGl2ZUF0VGFpbChibG9jaykpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlKCkgY29u
c3QgeyByZXR1cm4gbV9saXZlOyB9CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+JiYgdGFrZUxpdmUo
KSB7IHJldHVybiBXVEY6Om1vdmUobV9saXZlKTsgfQorCisgICAgICAgIHZvaWQgZXhlY3V0ZShJ
bnN0JiBpbnN0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgZGVmJ3Mu
CisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAgICAgICAgICAgICAgIFt0aGlz
XSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShhcmcpOworICAgICAgICAgICAgICAgIH0pOwor
CisgICAgICAgICAgICAvLyBOZXh0IGhhbmRsZSBjbG9iYmVyZWQgcmVnaXN0ZXJzLgorICAgICAg
ICAgICAgaWYgKGluc3QuaGFzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICAgICAgaW5zdC5leHRy
YUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbdGhpc10gKFJl
ZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoVGhpbmcocmVn
KSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIHVzZSdzLgorICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBh
cmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbGl2ZS5hZGQoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgSGFzaFNldDxUaGluZz4gbV9saXZlOworICAgIH07CisgICAg
Citwcml2YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xp
dmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2
ZUF0VGFpbDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEFpckxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEz
NCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBTeWxsYWJ1czoK
KyMKKyMgUm9sZXMgYW5kIHR5cGVzOgorIyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJhbC1wdXJwb3Nl
IHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVn
aXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVyYWwtcHVycG9z
ZSByZWdpc3RlciBvciB2YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3Ig
dmFsdWUKKyMgRDpGID0+IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkYg
PT4gdXNlIGFuZCBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIworIyBBcmd1bWVu
dCBraW5kczoKKyMgVG1wID0+IHRlbXBvcmFyeSBvciByZWdpc3RlcgorIyBJbW0gPT4gMzItYml0
IGltbWVkaWF0ZSBpbnQKKyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0CisjIEFkZHIgPT4gYWRkcmVz
cyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJhc2VJbmRleCBhZGRy
ZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhlIHBhcnNlciB2aWV3cyB0aGVz
ZSB0aGluZ3MgYXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0aGF0IHRoZXkgZmFsbCBpbnRv
IHR3byBkaXN0aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28sIGFsdGhvdWdoIHRoaXMgZmls
ZSB1c2VzIGEgcGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwgbm9uZSBvZiB0aGUgd2hpdGVz
cGFjZSBvcgorIyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBwYXJzZXIuIEZv
ciBleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQyIFU6RywgVUQ6RiBJbW0sIFRt
cCBBZGRyLCBUbXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQga25vdyB0aGF0IHRoaXMgaXMg
dGhlIHNhbWUgYXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAgICAgSW1tLCBUbXAKKyMgICAg
IEFkZHIsIFRtcAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1Y3Rpb24gdGhhdCB1c2VzIGEg
R1BSIG9yIGFuIGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBhIGZsb2F0IHJlZ2lzdGVyLgor
CisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBsZWFkaW5nIGNhcGl0YWwgKEFk
ZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1ibGVyCisjIEFQSSB0aGF0IGhh
cyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitOb3AKKworQWRkMzIgVTpHLCBVRDpH
CisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAgIEFkZHIsIFRt
cAorICAgIFRtcCwgQWRkcgorCitBZGQzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRt
cAorCitBbmQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAgVG1w
LCBBZGRyCisgICAgQWRkciwgVG1wCisgICAgSW1tLCBBZGRyCisKK0xzaGlmdDMyIFU6RywgVUQ6
RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisKK011bDMyIFU6RywgVUQ6RworICAgIFRt
cCwgVG1wCisgICAgQWRkciwgVG1wCisKK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAg
IEltbSwgVG1wCisgICAgSW1tNjQsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkICMgVGhpcyBt
ZWFucyB0aGF0ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMgImxvYWQiIG5v
dCAibW92ZSIuCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlCisKK01vdmVEb3VibGUgVTpGLCBEOkYK
KyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgVG1wLCBBZGRy
IGFzIHN0b3JlRG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1wLCBUbXAK
KworTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAorCitCcmFuY2hBZGQzMiBV
OkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25k
LCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRk
cgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hNdWwzMiBVOkcsIFU6RywgVUQ6RyAv
YnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKwor
QnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1w
CisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXND
b25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTmVnMzIgVTpH
LCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKworSnVtcCAvYnJhbmNoCisKK1JldCAv
dGVybWluYWwKKworQnJlYWtwb2ludCAvdGVybWluYWwKKworIyBBaXIgYWxsb3dzIGZvciBleG90
aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5
IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQu
CitzcGVjaWFsIFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCisjaW5jbHVkZSAiQWly
Q29kZS5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitQaGFz
ZVNjb3BlOjpQaGFzZVNjb3BlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBt
X2NvZGUoY29kZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgIiwgbmFtZSwgIjpc
biIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIGlmIChzaG91bGRTYXZl
SVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJpbmcoY29kZSk7
Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRh
dGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUsIG1fbmFtZSwgbV9kdW1w
QmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUGhhc2VTY29wZV9oCisjZGVmaW5l
IEFpclBoYXNlU2NvcGVfaAorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsK
KworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29w
ZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShDb2RlJiwgY29uc3QgY2hhciogbmFtZSk7Cisg
ICAgflBoYXNlU2NvcGUoKTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAg
ICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9k
dW1wQmVmb3JlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gQWlyUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0
ZXJQcmlvcml0eS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHNJblByaW9yaXR5T3JkZXIoKQorewor
ICAgIHN0YXRpYyBWZWN0b3I8R1BSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBb
XSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEdQUlJlZz4oKTsKKyAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJlZzo6YWxsR1BScygpOworICAgICAgICAgICAgYWxsLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgYWxsLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgICAg
ICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdp
c3RlcnMoKTsKKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbCkgeworICAgICAgICAgICAg
ICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0
LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoUmVn
IHJlZyA6IGFsbCkgeworICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdDsKK30KKworY29uc3QgVmVjdG9y
PEZQUlJlZz4mIGZwc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgc3RhdGljIFZlY3RvcjxGUFJS
ZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpj
YWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3Vs
dCA9IG5ldyBWZWN0b3I8RlBSUmVnPigpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0g
UmVnOjphbGxGUFJzKCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVn
aXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGZvciAoUmVnIHJl
ZyA6IGFsbCkgeworICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbCkgeworICAgICAgICAgICAgICAgIGlm
IChjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVu
ZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJl
c3VsdDsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpU
eXBlIHR5cGUpCit7CisgICAgc3RhdGljIFZlY3RvcjxSZWc+KiByZXN1bHRbQXJnOjpudW1UeXBl
c107CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uo
CisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQ
XSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChHUFJSZWcgcmVnIDogZ3By
c0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQXS0+YXBw
ZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXSA9IG5ldyBWZWN0b3I8
UmVnPigpOworICAgICAgICAgICAgZm9yIChGUFJSZWcgcmVnIDogZnByc0luUHJpb3JpdHlPcmRl
cigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXS0+YXBwZW5kKFJlZyhyZWcpKTsK
KyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHRbdHlwZV07Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJSZWdpc3RlclByaW9yaXR5X2gKKyNkZWZpbmUgQWlyUmVn
aXN0ZXJQcmlvcml0eV9oCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJGUFJJbmZv
LmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0
b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpOworY29uc3QgVmVjdG9yPEZQUlJlZz4m
IGZwcnNJblByaW9yaXR5T3JkZXIoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4gc3RydWN0
IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0lu
UHJpb3JpdHlPcmRlcjxHUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEdQUlJlZz4mIGluUHJp
b3JpdHlPcmRlcigpIHsgcmV0dXJuIGdwc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OwordGVtcGxh
dGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+IHsKKyAgICBjb25z
dCBWZWN0b3I8RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZnBzSW5Qcmlvcml0
eU9yZGVyKCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+Citjb25zdCBWZWN0b3I8
QmFuazo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgcmV0dXJu
IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7Cit9CisK
K2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclJlZ2lzdGVyUHJp
b3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lh
bC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNw
ZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK1Nw
ZWNpYWw6OlNwZWNpYWwoY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1fbmFtZShuYW1lKQorICAg
ICwgbV9pbmRleChVSU5UX01BWCkKK3sKK30KKworU3BlY2lhbDo6flNwZWNpYWwoKQoreworfQor
CitDU3RyaW5nIFNwZWNpYWw6Om5hbWUoKSBjb25zdAoreworICAgIFN0cmluZ1ByaW50U3RyZWFt
IG91dDsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7Cit9
CisKK3ZvaWQgU3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChkdW1wUHJlZml4KTsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIGlmIChtX2luZGV4
ICE9IFVJTlRfTUFYKQorICAgICAgICBvdXQucHJpbnQobV9pbmRleCk7Cit9CisKK3ZvaWQgU3Bl
Y2lhbDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
KnRoaXMsICI6ICIpOworICAgIGRlZXBEdW1wSW1wbChvdXQpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGVjaWFs
X2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVk
ZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IEdlbmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICImIjsKKyAgICAKKyAgICBTcGVj
aWFsKCk7CisgICAgdmlydHVhbCB+U3BlY2lhbCgpOworCisgICAgQ1N0cmluZyBuYW1lKCkgY29u
c3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFt
YmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVmFs
aWQoSW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2ln
bmVkIGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMgY2FsbGVkIG9uIGZvciBlYWNo
IEluc3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSB0
bworICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRzIHVzZWQgZnJvbSBqdXN0IG9u
ZSBJbnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUuIFNvLAorICAgIC8vIGlmIHlv
dSB3YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRvIGdlbmVyYXRlKCksIHRoZW4g
eW91IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkgR2VuZXJhdGUgQWlyIHRoYXQg
c3RhcnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRjaCBJbnN0LCBhbmQgdGhlbiBt
ZXJnZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBn
cmVhdCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlIHRoYXQKKyAgICAvLyAg
ICBBaXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3VjaCBkdXBsaWNhdGlvbiBkaWRu
J3QgY2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAgICAvLyAgICByZWdpc3RlciBh
c3NpZ25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUgU3BlY2lhbCBtYWludGFpbiBh
IEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBhbmFs
eXNpcworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNhbGwgaXMgcGVyZm9ybWVkIGp1
c3QgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMgbm8gd2F5CisgICAgLy8gICAg
Zm9yIHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5zdHMgdG8gYmUgcmVhbGxvY2F0
ZWQuIFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAgICBjb25zdWx0IHRoZSBIYXNo
TWFwLgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291bGQgdXNlICgxKSBhbmQgZmly
ZSB1cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxscy4KKyAgICAvLworICAgIC8v
IE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIHJlcG9ydFVzZWRSZWdpc3Rl
cnMoKSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAvLyBhcyBnZW5lcmF0ZSgp
LiBJZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291bGQganVzdCBoYXZlIGVhY2gg
U3BlY2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVjdG9yIG9mIFJlZ2lzdGVyU2V0
J3MgYW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUgcmlnaHQgb3JkZXIgaW4KKyAg
ICAvLyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZmZXJlbmNlIGlzIHVubGlrZWx5
IHRvIGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAgIC8vIHBlcmZvcm1hbmNlIG9m
IHRoZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8vIEN1cnJlbnRseSwgd2UgZG8g
KDEpIGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydFVzZWRSZWdpc3Rl
cnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAgIAorICAgIHZpcnR1YWwgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9u
Q29udGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xv
YmJlcmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcm90ZWN0ZWQ6
CisgICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7
CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERlZXBTcGVjaWFsRHVtcCB7Citw
dWJsaWM6CisgICAgRGVlcFNwZWNpYWxEaW1wKFNwZWNpYWwqIHNwZWNpYWwpCisgICAgICAgIDog
bV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3BlY2lhbCkKKyAgICAgICAg
ICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
b3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3BlY2lhbCogbV9z
cGVjaWFsOworfTsKKworRGVlcFNwZWNpYWxEdW1wIGRlZXBEdW1wKFNwZWNpYWwqIHNwZWNpYWwp
Cit7CisgICAgcmV0dXJuIERlZXBTcGVjaWFsRHVtcChzcGVjaWFsKTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGlu
Zy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNw
aWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2Nv
cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
Cit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhh
c2VTY29wZShjb2RlLCAic3BpbGxFdmVyeXRoaW5nIik7CisKKyAgICAvLyBXZSB3YW50IHRvIGtu
b3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBiYXNp
YyBibG9jay4KKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1
c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBMaXZlbmVzczxUbXA+IGxpdmVuZXNzKGNv
ZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIExpdmVu
ZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAg
dXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkgKyAxKTsKKworICAgICAg
ICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVkIGluZGV4KSB7CisgICAgICAg
ICAgICBSZWdpc3RlclNldCYgc2V0ID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5kZXhdOworICAg
ICAgICAgICAgZm9yIChUbXAgdG1wIDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAgICAgICAg
ICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0LnNldCh0bXAucmVn
KCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgc2V0VXNlZFJlZ2lzdGVy
cyhibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdElu
ZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBsb2NhbENh
bGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAgICBzZXRVc2VkcmVn
aXN0ZXJzKGluc3RJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbGxvY2F0ZSBh
IHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhbGxTdGFj
a1Nsb3RzW0FyZzo6bnVtVHlwZXNdOworICAgIGZvciAodW5zaWduZWQgdHlwZUluZGV4ID0gMDsg
dHlwZUluZGV4IDwgQXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgpIHsKKyAgICAgICAgVmVjdG9y
PFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90c1t0eXBlSW5kZXhdOworICAg
ICAgICBBcmc6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6VHlwZT4odHlwZUluZGV4KTsK
KyAgICAgICAgc3RhY2tTbG90cy5yZXNpemUoY29kZS5udW1UbXBzKHR5cGUpKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNvZGUubnVtVG1wcyh0eXBlKTsgdG1wSW5kZXgtLTsp
CisgICAgICAgICAgICBzdGFja1Nsb3RzW3RtcEluZGV4XSA9IGNvZGUuYWRkU3RhY2tTbG90KDgs
IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgfQorCisgICAgSW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0QmVmb3Jl
ID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4XTsKKyAgICAgICAgICAgIFJlZ2lzdGVy
U2V0JiBzZXRBZnRlciA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleCArIDFdOworICAg
ICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAg
aW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9s
ZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlz
UmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAg
ICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBhbGxTdGFja1Nsb3RzW3R5cGVdW3RtcC50bXBJ
bmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tT
bG90KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgYSByZWdp
c3RlciB0byB1c2UuIEhvdyB3ZSBkbyB0aGF0IGRlcGVuZHMgb24gdGhlIHJvbGUuCisgICAgICAg
ICAgICAgICAgICAgIFJlZyBjaG9zZW5SZWc7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAo
cm9sZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgorICAgICAgICAgICAg
ICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkRlZjoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlRGVmOgorICAgICAgICAgICAgICAgICAgICAg
ICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRBZnRlci5n
ZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQo
cmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcp
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAgICAg
ICAgdG1wID0gVG1wKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1v
dmUgPSB0eXBlID09IEFyZzo6R1AgPyBNb3ZlIDogTW92ZURvdWJsZQorCisgICAgICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRl
eCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAg
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwaWxsRXZlcnl0aGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorI2RlZmluZSBBaXJTcGlsbEV2ZXJ5dGhp
bmdfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaXMgYSBwaGFzZSBmb3IgdGVzdGluZy4gSXQgYmVoYXZl
cyBsaWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGluIHRoZSBzZW5zZSB0aGF0IGl0CisvLyBlbGlt
aW5hdGVzIHRlbXBvcmFyaWVzIGZyb20gdGhlIHByb2dyYW0uIEl0IGFjY29tcGxpc2hlcyB0aGlz
IGJ5IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8vIHRlbXBvcmFyaWVzLiBUaGUgcmVzdWx0aW5nIGNv
ZGUgaXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVmZmljaWVudC4gVGhpcyBwaGFzZSBpcyBncmVhdCBp
ZiB5b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUgaXMgYSBidWcgaW4gdGhlIHJlZ2lzdGVyIGFsbG9j
YXRvci4gWW91IGNhbiBjb25maXJtIHRoaXMgYnkgcnVubmluZyB0aGlzCisvLyBwaGFzZSBpbnN0
ZWFkIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisvLworLy8gTm90ZSB0aGF0IGV2ZW4gdGhv
dWdoIHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBlc3QgdGhpbmcgcG9zc2libGUsIGl0J3Mgbm90
IGV2ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1bGFybHkgZWZmaWNpZW50IHdheS4gU28sIGRv
bid0IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcgdGhpcyBwaGFzZSB0byByZWR1Y2UgY29tcGls
ZXIKKy8vIGxhdGVuY3kuIElmIHlvdSB3YW50ZWQgdG8gZG8gdGhhdCwgeW91IHNob3VsZCBjb21l
IHVwIHdpdGggYSBjbGV2ZXIgYWxnb3JpdGhtIGluc3RlYWQgb2YgdXNpbmcKKy8vIHRoaXMgc2ls
bHkgdGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3BpbGxFdmVyeXRoaW5nX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJBaXJTdGFja1Nsb3QuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCit2b2lkIFN0YWNrU2xvdDo6c2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZh
bHVlKQoreworICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgaWYgKG1fdmFsdWUpCisg
ICAgICAgIG1fdmFsdWUtPm1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7Cit9CisKK3ZvaWQgU3RhY2tT
bG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFj
ayIsIG1faW5kZXgpOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwg
Iiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBtX2tpbmQp
OworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBvdXQucHJpbnQoIiwgdmFsdWUgPSAiLCAqbV92
YWx1ZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclN0YWNrU2xvdF9oCisjZGVmaW5lIEFpclN0YWNrU2xv
dF9oCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlIDx3dGYvTm9uQ29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90dmFsdWU7CisKK25hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBTdGFja1Nsb3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xv
dCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQg
Ynl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2lu
ZCBraW5kKCkgY29uc3QgeyByZXV0cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB1bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkKKyAgICAgICAgICAgIHJldHVy
biAxOworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAyKQorICAgICAgICAgICAgcmV0dXJuIDI7
CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDQpCisgICAgICAgICAgICByZXR1cm4gNDsKKyAg
ICAgICAgcmV0dXJuIDg7CisgICAgfQorCisgICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgLy8gWmVybyBtZWFucyB0aGF0IGl0J3Mgbm90
IHlldCBhc3NpZ25lZC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJl
IGNhbGxlZCBmcm9tIHBoYXNlcyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24uIEJ1dCB5b3UgY2Fu
CisgICAgLy8gdG90YWxseSBmb3JjZSBhIHN0YWNrIHNsb3QgdG8gbGFuZCBhdCBzb21lIG9mZnNl
dC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCk7CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3Qo
dW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0
YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUtPm9m
ZnNldEZyb21GUCgpKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoYnl0ZVNpemUpOworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgaW50cHRy
X3QgbV9vZmZzZXRGcm9tRlA7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgU3RhY2tT
bG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7CitwdWJs
aWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoU3RhY2tTbG90KiBzbG90KQorICAgICAgICA6IG1f
c2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisgICAgICAgICAgICBtX3Nsb3Qt
PmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51
bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0YWNrU2xvdCogbV9zbG90OworfTsKKwor
RGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoU3RhY2tTbG90KiBzbG90KQoreworICAgIHJldHVy
biBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3RhY2tTbG90X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFRtcDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8bm9u
ZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc1JlZygpKSB7CisgICAg
ICAgIG91dC5wcmludChyZWcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAo
aXNHUFRtcCgpKSB7CisgICAgICAgIG91dC5wcmludCgiJXRtcCIsIGdwVG1wSW5kZXgoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIiVmdG1wIiwgZnBUbXBJbmRl
eCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjUx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyVG1wX2gKKyNkZWZpbmUgQWlyVG1wX2gKKworI2luY2x1ZGUgIlJlZy5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIEEgVG1wIGlz
IGEgZ2VuZXJhbGl6YXRpb24gb2YgYSByZWdpc3Rlci4gSXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIg
dG8gYW55IEdQUiBvciBGUFIuIEl0IGNhbiBhbHNvCisvLyBiZSB1c2VkIHRvIHJlZmVyIHRvIGFu
IHVuYWxsb2NhdGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9yYXJ5KS4gTGlrZSBtYW55IEFpciBj
bGFzc2VzLCB3ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJzZSBuYW1pbmcgc2luY2Ugd2Ugd2ls
bCBoYXZlIHRvIHVzZSB0aGlzIG5hbWUgYSBsb3QuCisKK2NsYXNzIFRtcCB7CitwdWJsaWM6Cisg
ICAgVG1wKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxp
Y2l0IFRtcChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJlZykgeworICAgICAgICAgICAg
aWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVHUFIocmVn
LmdwcigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5j
b2RlRlBSKHJlZy5mcHIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV92YWx1ZSA9
IDA7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKGNvbnN0IEFyZyYpOworCisgICAgc3RhdGlj
IFRtcCBncFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVHUFRtcChpbmRleCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBmcFRtcEZvckluZGV4
KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEh
bV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBpc0VuY29kZWRHUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlAoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUpOworICAgIH0KKworICAg
IGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQUiht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc1JlZygp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUFIoKSB8fCBpc0ZQUigpOworICAgIH0K
KworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQ
UihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBkZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwcigp
OworICAgICAgICByZXR1cm4gZnByKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNUbXBJbmRleCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzUmVnKCk7CisgICAgfQorCisgICAgdW5z
aWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BU
bXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAg
dW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAg
ICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIHJldHVybiBmcFRtcEluZGV4
KCk7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhISp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUbXAmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1
ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIHN0
YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4g
MSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlAodW5zaWduZWQgaW5k
ZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29k
ZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAg
IHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICByZXR1cm4g
ZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSUmVnaXN0ZXIoKSk7CisgICAg
fQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSAr
IDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQVG1wKHVuc2lnbmVk
IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6
bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0gaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wg
aXNFbmNvZGVkR1AoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID4gMDsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUChpbnQgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gdmFsdWUgPCAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5j
b2RlZEdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFs
dWUpICYmIHZhbHVlIDw9IGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkp
OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQUihpbnQgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmIHZhbHVlID49IGVuY29kZWRG
UFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1ZSk7CisgICAgfQorCisgICAg
c3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBSKHZhbHVlKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBB
U1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxH
UFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpm
aXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAg
IH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpmaXJz
dEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmZp
cnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlR1BU
bXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQVG1wKHZhbHVl
KSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxh
c3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVG
UFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBUbXAodmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJl
Z2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyAwOiBlbXB0eSBUbXAKKyAg
ICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4KKyAgICAvLyBuZWdhdGl2ZTog
RlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1ZTsKK307CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpclRtcF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGluZXNfaAorI2RlZmluZSBBaXJUbXBJ
bmxpbmVzX2gKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2lubGluZSBU
bXA6OlRtcChjb25zdCBBcmcmIGFyZykKK3sKKyAgICAqdGhpcyA9IGFyZy50bXAoKTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyVG1wSW5saW5l
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxp
ZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpclZhbGlkYXRlLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKwor
Y2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoQ29kZSYgY29kZSwgY29u
c3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX2NvZGUo
Y29kZSkKKyAgICAgICAgLCBtX3doZW4od2hlbikKKyAgICAgICAgLCBtX2R1bXBCZWZvcmUoZHVt
cEJlZm9yZSkKKyAgICB7CisgICAgfQorCisjZGVmaW5lIFZBTElEQVRFKGNvbmRpdGlvbiwgbWVz
c2FnZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChj
b25kaXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZhaWwoX19GSUxFX18sIF9fTElORV9fLCBX
VEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9uLCB0b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAg
ICB9IHdoaWxlIChmYWxzZSkKKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBI
YXNoU2V0PFN0YWNrU2xvdCo+IHZhbGlkU2xvdHM7CisgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9j
ayo+IHZhbGlkQmxvY2tzOworICAgICAgICBIYXNoU2V0PFNwZWNpYWwqPiB2YWxpZFNwZWNpYWxz
OworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAg
ICB2YWxpZEJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6
IG1fY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgICAgICB2YWxpZFNsb3RzLmFkZChzbG90KTsK
KyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogbV9jb2RlLnNwZWNpYWxzKCkpCisgICAg
ICAgICAgICB2YWxpZFNwZWNpYWxzLmFkZChzcGVjaWFsKTsKKworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJ
bmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAg
ICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAg
ICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU3RhY2s6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNsb3RzLmNvbnRhaW5zKGFyZy5z
dGFja1Nsb3QoKSksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbGlkU3BlY2lhbHMuY29udGFpbnMoYXJnLnNwZWNpYWwoKSksICgi
QXQgIiwgaW5zdCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaW5zdC5pc1ZhbGlkRm9ybSgpLCAoIkF0ICIs
IGluc3QpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdEluZGV4ID09IGJsb2NrLT5zaXplKCkg
LSAxKQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURShpc1Rlcm1pbmFsKGluc3Qub3Bjb2Rl
KCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvcnMoKSkKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0
ICIsICpibG9jaykpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZmFp
bCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBj
aGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1l
c3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7
CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJp
bnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIg
ICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAg
ICAgIGlmIChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIs
IG1fd2hlbiwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJp
bmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7Cisg
ICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQmVmb3Jl
ICIsIHdoZW4sICI6XG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludChtX2R1bXBCZWZvcmUpOwor
ICAgICAgICB9CisgICAgICAgIG91dC5wcmludCgiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7Cisg
ICAgICAgIG91dC5wcmludChtX2NvZGUpOworCisgICAgICAgIG91dC5wcmludChmYWlsdXJlTWVz
c2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVO
dW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAg
ICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVmb3JlOworfTsK
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYgY29kZSwg
Y29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0
ZXIgdmFsaWRhdGVyKGNvZGUsIHdoZW4sIGR1bXBCZWZvcmUpOworICAgIHZhbGlkYXRlci5ydW4o
KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBaXJWYWxpZGF0ZV9oCisjZGVmaW5lIEFpclZhbGlkYXRlX2gKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2Rl
OworCit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29u
c3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTUgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisK
K2NsYXNzIE9wY29kZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2Fk
cworICAgIGF0dHJfYWNjZXNzb3IgOmtpbmQKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHNw
ZWNpYWwpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IHNwZWNpYWwK
KyAgICAgICAgQGtpbmQgPSA6aW5zdAorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAgICAgICAg
ICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIG1hc21O
YW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVuZAorZW5k
CisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAgZGVmIGlu
aXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAgIEB0eXBl
ID0gdHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9yZWFkZXIg
OnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUsIGZvcm1z
KQorICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9IGZvcm1z
CisgICAgZW5kCitlbmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAg
YXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkKKyAgICAg
ICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQKKworICAg
IGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAgICAgICAg
ICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhl
ci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAorICAgIGVu
ZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9PSAiQWRk
ciIKKyAgICAgICAgICAgIFsiQWRkciIsICJTdGFja1Nsb3QiLCAiQ2FsbEFyZyJdCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRl
ZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQKKwor
Y2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBp
bml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcworICAgICAg
ICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBh
dHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxp
emUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisg
ICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0
b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisK
K2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAg
IGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2lu
CisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3Ro
ZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09
IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVy
CisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAg
QHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIj
e0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBw
YXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAg
ICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAg
ICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVu
ZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9
IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIg
PSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAg
d2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAg
ICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAg
ICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisgICAg
ICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1i
ZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0
ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXC9dLworICAgICAgICAgICAgcmVz
dWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5u
ZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3Ry
WzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0
Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tl
biA9fiAvXEEoKFUpfChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRv
a2VuID1+IC9cQSgoRyl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9r
ZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChS
ZXNDb25kKSlcWi8KK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4p
IG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNw
ZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQor
ICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tl
bikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFt
ZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9
IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAg
ZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAg
IGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAg
dG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYg
Y29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5k
IG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNl
IGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisg
ICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBw
YXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisg
ICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAg
ICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQg
aWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNl
CisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAg
IHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xl
IChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAg
ICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVz
dWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcg
b3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVz
dWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9r
ZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQs
IFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlzS2luZChy
ZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBk
ZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisgICAgICAgIGxvb3Agewor
ICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAg
ICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBjb25zdW1lKCJzcGVjaWFs
IikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAg
ICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2Rl
IikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2Rl
TmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAg
ICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2Rl
ID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNh
bm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IE9wY29kZS5uZXco
b3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1l
XSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgc2lnbmF0
dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgaXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7
CisgICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN1bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9
IGNvbnN1bWVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNpZ25hdHVyZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAi
LCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0b2tlbiA9
PSAiLyIKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLyIpCisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgdG9rZW4uc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIHdoZW4gImJyYW5jaCIK
KyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOmJyYW5jaAorICAgICAgICAg
ICAgICAgICAgICB3aGVuICJ0ZXJtaW5hbCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29k
ZS5raW5kID0gOnRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkJhZCAvIGRpcmVjdGl2ZSIpCisgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBhZHZhbmNlCisgICAgICAgICAgICAgICAg
ZW5kCisKKyAgICAgICAgICAgICAgICBpZiBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAg
ICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPSBbXQorICAgICAgICAg
ICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgbG9v
cCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPDwgS2luZC5uZXcoY29uc3Vt
ZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkg
KiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNwZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioiKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2Vu
ID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9
PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiYXMiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5s
ZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICAgICAgICAg
ICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtpbmQubmFt
ZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIkltbTY0IgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnJvbGUgIT0gIlUiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUg
Zm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhd
LnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVy
cm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1
bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBzaWdu
YXR1cmUubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1z
Lmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBu
aWwpCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBvcGNvZGUub3Zlcmxv
YWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICAgICAgZW5kCisg
ICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAgICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBB
UkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVO
YW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UKKworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAg
ICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwK
KyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5l
cmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAg
ICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAu
cHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAg
ICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisg
ICAgfQorZW5kCisKK2RlZiB3cml0ZUNQUChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7
ZmlsZW5hbWV9LmNwcCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAKKyAgICAg
ICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7
JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMg
IiNpbmNsdWRlIFwiY29uZmlnLmhcIiIKKyAgICAgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFp
ciN7ZmlsZW5hbWV9LmhcIiIKKworICAgICAgICB5aWVsZCBvdXRwCisgICAgfQorZW5kCisKK3dy
aXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiZW51
bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2ggeworICAg
ICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAg
fQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2ln
bmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAi
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5h
bWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBv
dXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6
T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKK3dyaXRl
Q1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwi
d3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAg
ICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0
cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgor
ICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIK
KyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91
dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAg
IG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICBy
ZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0cyAiICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBv
dXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKworIyBGcm9tIGhlcmUgb24sIHdlIGRv
bid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIHNpbmNlIHdlJ3JlIHVzaW5n
IGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKworZGVmIG1hdGNoRm9ybXMob3V0cCwg
c3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNr
KQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAorCisgICAgaWYgZmlsdGVyW2Zvcm1z
XQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIGlmIGNvbHVtbkluZGV4ID49IGZvcm1z
WzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEK
KyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAgICAgIHJldHVybgorICAgIGVuZAorICAg
IAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFjaCB7CisgICAgICAgIHwgZm9ybSB8Cisg
ICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbkluZGV4XS5uYW1lCisgICAgICAgIGlmIGdy
b3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdIDw8IGZvcm0KKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zvcm1dCisgICAgICAgIGVuZAorICAgIH0K
KworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91cHMubGVuZ3RoID09IDEKKyAgICAgICAg
bWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0
dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIG91
dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltjb2x1bW5JbmRleF19KSB7IgorICAgIGdy
b3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwgdmFsdWUgfAorICAgICAgICBvdXRwLnB1
dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICAgICAgS2luZC5h
cmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAgICAgfCBhcmdLaW5kIHwKKyAgICAgICAgICAg
IG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06IgorICAgICAgICB9CisgICAgICAgIG1h
dGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRl
ciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAg
IG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0Igor
ICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3Bl
ZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPm9wY29kZSkgeyIKKyAg
ICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0
cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwK
KyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpIG9yIHNw
ZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPmFy
Z3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIG9wY29kZS5v
dmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBu
ZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2Fk
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRj
aAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBl
bmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBv
dXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0
cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCBzcGVlZCwg
aW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkgeworICAgICAg
ICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAg
ICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBj
b2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAg
ICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAg
ICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAg
ICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1u
R2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBlbmQKKyAgICB9CitlbmQKKword3Jp
dGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1
ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9v
bCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgIiNk
ZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYg
KG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZh
bHVlO1xcIgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIEluc3Q6OmZvckVhY2hBcmcoY29u
c3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92
ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2Fk
IHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiZnVu
Y3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7IC8vIFRoaXMgaXMgYmFzaWNhbGx5IGJv
Z3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBtb2RlbCBTcGVjaWFsIGFzIGFuIGltbWVkaWF0
ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFyZ3NbMF0uc3BlY2lhbCgpLT5mb3JFYWNoQXJn
KCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxiYWNrPihmdW5jdG9yKSk7IgorICAgICAg
ICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFjaF93aXRoX2luZGV4IHsK
KyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBu
aWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCisgICAgICAgICAgICAgICAgd2hlbiAi
VSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCisgICAgICAgICAgICAgICAgd2hl
biAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCisgICAgICAgICAgICAgICAg
d2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVmIgorICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3Io
YXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2FyZy50eXBlfVApOyIKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91
dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPiIKKyAgICBvdXRwLnB1dHMg
IkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9ybShPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJBcmc6Oktp
bmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyldID0geyBhcmd1bWVudHMuLi4gfTsiCisgICAg
b3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7
CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5h
bWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKHNpemVvZi4uLihBcmd1bWVudHMpKSB7
IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG9wY29kZS5vdmVy
bG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IgorICAgICAg
ICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeyB8IGNvbHVtbkluZGV4IHwgImtpbmRzWyN7
Y29sdW1uSW5kZXh9XSIgfQorICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9
CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAg
fCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgc3BlY2lhbCA9IChub3QgZm9ybS5raW5kcy5k
ZXRlY3QgeyB8IGtpbmQgfCBraW5kLnNwZWNpYWwgfSkKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJPUEdFTl9SRVRVUk4oI3tzcGVjaWFsfSk7IgorICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwg
Y29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRz
ICJkZWZhdWx0OiIKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91dHAucHV0
cyAifSIKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAi
ZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAg
IG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyAiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0
cC5wdXRzICJpbmxpbmUgYm9vbCBpc1Rlcm1pbmFsKE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAu
cHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAg
ICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5hbCBvciBv
cGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNv
ZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1
ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxz
ZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRw
LnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlQ1BQKCJP
cGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJB
aXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiYm9vbCBJbnN0Ojppc1Zh
bGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0o
b3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0g
fAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAo
YXJncy5zaXplKCkgPCAxKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIK
KyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWzBdLmlzU3BlY2lhbCgpKSIKKyAgICAg
ICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKCp0aGlzKSk7IgorICAgICAg
ICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uID0gZmFsc2UKKyAgICAgICAg
ICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMgeworICAgICAgICAgICAgICAgIHwg
aW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhd
LnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS50
eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZvcm0ua2luZHNbaW5kZXhdCisgICAgICAgICAg
ICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNwZWNpYWwKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBmb3JtIG1hdGNo
ZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJvbGUsIHNpbmNlCisgICAgICAgICAg
ICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gdmFs
aWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAgICAjIHRv
IHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAuCisgICAgICAgICAgICAgICAgaWYg
a2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFh
cmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZHNNb3JlVmFsaWRhdGlvbgorICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiaWYgKCFpcyN7b3Bjb2RlLm5hbWV9VmFsaWQodGhpcykpIgorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAg
ICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1
dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5zaWduZWQg
YXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bj
b2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAor
ICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAgIGlmIG9w
Y29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgpIgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlzLCBhcmdJ
bnN0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFN3aXRjaCBvbiB0aGUgYXJnSW5k
ZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJnSW5kZXgpIHsiCisKKyAgICAg
ICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRzLm1hcCB7CisgICAgICAgICAgICAgICAg
fCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aAor
ICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbnVtQXJncy50aW1l
cyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRleCB8CisgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgYWxs
IG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJsb2FkcyBlaXRoZXIgZG8sIG9yIGRvbid0
LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAgICAgICAgIyBhdCB0aGlzIGluZGV4LiBXZSBl
eHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9uIGNhc2UuCisgICAgICAgICAgICAgICAgbnVt
WWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgIG9wY29k
ZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAg
ICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2Fy
Z0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0g
MQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIyBOb3RlIHRo
YXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZpcnN0IGJlY2F1c2UgaWYgd2UgZW5kIHVw
IHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAgICAgICAgICAgICAjIHRvIHNheSB0aGF0IEFk
ZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAg
ICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0LgorCisgICAgICAgICAgICAgICAgICAg
IG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkKKworICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJncy5zaXplKCkpIHsiIGlmIG5l
ZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVh
Y2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdoYXQgd2Ugd2Fu
dC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMu
ZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9
IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0aGluZywganVzdCBkcm9wIHRvIGRlZmF1
bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxl
bmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgaG93IHdlIHRlc3Qg
dGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlzIGFyZ3VtZW50IHRvIGFuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIHlpZWxkcyBhIHZhbGlkIGZvcm0uCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9PSBhcmdJbmRleAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3Nb
I3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8
IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLmVhY2ggeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERyb3AgZG93biwgZW1pdCBubyBj
b2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgS2VlcCBnb2luZy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0
cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJh
Y2spCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYg
bmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAifSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHAucHV0cyAiZGVm
YXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIG91dHAu
cHV0cyAifSIKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiI7CisgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAg
ICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVscGVyczo6SnVtcCBJbnN0
OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQp
IGNvbnN0IgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShq
aXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShjb250ZXh0KTsiCisgICAgb3V0cC5w
dXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZv
cm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZv
cm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdlbmVyYXRlKCp0aGlzLCBqaXQsIGNvbnRl
eHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGZvcm0uYWx0TmFtZQorICAgICAg
ICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2RlLm1hc21OYW1lCisgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91
dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKworICAgICAgICAgICAgZm9ybS5raW5kcy5l
YWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAg
ICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
LCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgY2FzZSBraW5kLm5hbWUK
KyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAgICAgICAgICAgICAgICAgIGlmIG92ZXJs
b2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgorICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5m
cHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgd2hlbiAiSW1t
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0
ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4gIkltbTY0IgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW02NCgpIgorICAgICAg
ICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFy
Z3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4Igor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRl
eCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgorICAg
ICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJp
bnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCisgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dHAucHV0cyAiKTsiCisgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1bHQpOyIKKyAgICAgICAgZW5kCisgICAg
fQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0
cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1
dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWcuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAKICAgICBi
b29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZhbGlkKCk7IH0KLSAgICBi
b29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KIAogICAgIGJvb2wgaXNI
YXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IGRlbGV0ZWQo
KTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBjbGFzcyBBbGxSZWdzSXRlcmFibGUgeworICAgIHB1
YmxpYzoKKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAg
ICAgICAgIGl0ZXJhdG9yKCkgeyB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKFJl
ZyByZWcpCisgICAgICAgICAgICAgICAgOiBtX3JlZyhyZWcpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBt
X3JlZzsgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9yZWcgPSBtX3JlZy5uZXh0KCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtX3JlZyA9PSBvdGhlci5tX3JlZzsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIFJlZyBtX3Jl
ZzsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdz
SXRlcmFibGUgYWxsKCkgY29uc3QgeyByZXR1cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJp
dmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRM
aXN0LmNwcAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAg
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaQogICAgIGlmIChvZmZzZXRC
YXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkKICAgICAgICAgb2Zmc2V0ID0gLShzdGF0aWNf
Y2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0ZXJzKSAqIHNpemVvZih2b2lkKikpOwogCi0g
ICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7cmVnID0g
cmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJl
Zzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmIChyZWdpc3RlclNldC5n
ZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQocmVnLCBvZmZz
ZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2Yodm9pZCopOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAkocmV2aXNp
b24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0
TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2NiwxMyBAQCBwdWJsaWM6CiAgICAgUmVn
aXN0ZXJBdE9mZnNldCogZmluZChSZWcpIGNvbnN0OwogICAgIHVuc2lnbmVkIGluZGV4T2YoUmVn
KSBjb25zdDsgLy8gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQuCiAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBl
bnRyeSA6IG1fcmVnaXN0ZXJzKQorICAgICAgICAgICAgZnVuY3RvcihlbnRyeSk7CisgICAgfQor
CiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0PiBtX3JlZ2lzdGVyczsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAx
OTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTMgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
ID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZv
ciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0cygpKQorICAgICAgICAgICAgZnVuY3Rv
cihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9p
ZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJbmRleDogU291cmNlL1dURi93dGYvQml0
VmVjdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvQml0VmVjdG9yLmgJKHJldmlz
aW9uIDE5MTIzOSkKKysrIFNvdXJjZS9XVEYvd3RmL0JpdFZlY3Rvci5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMjAsNyArMzIwLDcgQEAgcHVibGljOiAKICAgICB9OwogICAgIAogICAgIFNldEJpdHNJ
dGVyYWJsZSBzZXRCaXRzKCkgY29uc3QgeyByZXR1cm4gU2V0Qml0c0l0ZXJhYmxlKCp0aGlzKTsg
fQotICAgIAorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1bnNpZ25lZCBiaXRzSW5Qb2ludGVyKCkK
ICAgICB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
VEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2Nv
cGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRseSBwYXNzIGxhbWJkYXMg
d2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKKy8vIHRlbXBsYXRlIHNwZWNp
YWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxkIGJlIGRlY2xhcmVkIGFz
OgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGludCwgU3R1
ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKKy8vCisvLyB2b2lkIGZvbyhz
Y29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAoaW50IHgsIFN0dWZmJiB5
KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3RlIHRoYXQgdGhpcyByZWxpZXMg
b24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1iZGEgaXMgb25seSB2YWxp
ZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVuY2UgdGhlIG5hbWUgU2NvcGVk
TGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNjb3BlZExh
bWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+
IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwpKHZvaWQqIGFy
ZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQqIGFyZyA9IG51bGxwdHIpCisg
ICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmcoYXJnKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgflNjb3BlZExhbWJkYSgpCisgICAgeworICAgIH0KKworICAgIFJlc3VsdFR5
cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3Vt
ZW50cykuLi4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRUeXBlICgqaW1wbCkodm9p
ZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pIG1faW1wbDsKKyAgICB2b2lkICptX2FyZzsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gU2Nv
cGVkTGFtYmRhRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFG
dW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBT
Y29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAg
ICBTY29wZWRMYW1iZGFGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgICAgIDog
U2NvcGVkTGFtYmRhKGltcGxGdW5jdGlvbiwgdGhpcykKKyAgICAgICAgLCBtX2Z1bmN0b3IoZnVu
Y3RvcikKKyAgICB7CisgICAgfQorCisgICAgU2NvcGVkTGFtYmRhRnVuY3RvcihGdW5jdG9yJiYg
ZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRMYW1iZGEoaW1wbEZ1bmN0aW9uLCB0aGlzKQorICAg
ICAgICAsIG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAgeworICAgIH0KKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rpb24odm9pZCogYXJndW1lbnQs
IEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5jdG9yKAorICAg
ICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAg
IH0KKworICAgIEZ1bmN0b3IgbV9mdW5jdG9yOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorU2NvcGVkTGFtYmRhRnVuY3RvcjxGdW5jdGlv
blR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYShjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorewor
ICAgIHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVu
Y3Rvcik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gU2NvcGVkTGFtYmRh
X2gKKwpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL1dU
Ri93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwxMSBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KIAorICAgIFNoYXJlZFRhc2tGdW5jdG9yKEZ1bmN0b3ImJiBmdW5j
dG9yKQorICAgICAgICA6IG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAgeworICAg
IH0KKwogcHJpdmF0ZToKICAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzJiYuLi4gYXJn
dW1lbnRzKSBvdmVycmlkZQogICAgIHsKQEAgLTExMCw2ICsxMTUsMTEgQEAgUmVmPFNoYXJlZFRh
c2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcgogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3RvcikpOwogfQor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorUmVmPFNo
YXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFzayhGdW5jdG9yJiYgZnVuY3Rv
cikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlv
blR5cGUsIEZ1bmN0b3I+KFdURjo6bW92ZShmdW5jdG9yKSkpOworfQogCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263934</attachid>
            <date>2015-10-23 12:06:59 -0700</date>
            <delta_ts>2015-10-23 13:11:00 -0700</delta_ts>
            <desc>it is written</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>440469</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKK0RpcmVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1l
bnRSZWdWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVl
KCkKK3sKK30KKwordm9pZCBBcmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJl
Z1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1l
bnRSZWdWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QXJndW1lbnRSZWdWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3Vt
ZW50UmVnVmFsdWVfaAorI2RlZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQXJndW1lbnRSZWdWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUg
PT0gQXJndW1lbnRSZWc7IH0KKyAgICAKKyAgICB+QXJndW1lbnRSZWdWYWx1ZSgpOworCisgICAg
UmVnIGFyZ3VtZW50UmVnKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7IH0KKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQXJndW1lbnRSZWdWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShp
bmRleCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRlcigpIDogRG91YmxlLCBvcmln
aW4pCisgICAgICAgICwgbV9yZWcocmVnKQorICAgIHsKKyAgICB9CisKKyAgICBSZWcgbV9yZWc7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQXJndW1lbnRS
ZWdWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2su
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1
bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisg
ICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Js
b2NrKCkKK3sKK30KKwordm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQorewor
ICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YWRkUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OmFkZFByZWRlY2Vzc29yKHRo
aXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2sp
OworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMs
IGZyb20sIHRvKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lk
IEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4i
KTsKKyAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBkZWVwRHVtcCh2YWx1ZSksICJcbiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9jaworI2RlZmluZSBCM0Jhc2ljQmxv
Y2sKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNTdWNjZXNz
b3JDb2xsZWN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBl
ZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0
Y2hlcyBDb250cm9sVmFsdWU6OlN1Y2Nlc3Nvckxpc3QKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVMaXN0OjppdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6
Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgVmFsdWVMaXN0
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7
IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMu
bGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsg
fQorCisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3
KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3Jz
KCkgY29uc3Q7CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOwor
ICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdDsKKworICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Js
b2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1Y2Nlc3NvckNvbGxl
Y3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCk7CisgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0
PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vz
c29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vz
c29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5k
ZXhdOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3By
ZWRlY2Vzc29yc1tpbmRleF07IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9j
ayopOworICAgIGJvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wg
cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKwor
ICAgIGRvdWJsZSBmcmVxdWVuY3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisgICAgCisgICAgLy8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2Nr
KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgVmFsdWVMaXN0IG1fdmFsdWVzOworICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRl
Y2Vzc29yczsKKyAgICBkb3VibGUgbV9mcmVxdWVuY3k7Cit9OworCitjbGFzcyBEZWVwQmFzaWNC
bG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBi
bG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2Nr
KQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5l
cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
a0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5s
aW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlVHlwZSB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUq
IEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFs
dWVUeXBlPihhcmd1bWVudHMuLi4pOworICAgIGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAor
eworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygp
OworfQorCitGcmVxdWVudGVkQmxvY2sgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3Vj
Y2Vzc29yKGluZGV4KTsKK30KKworRnJlcXVlbnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVl
PigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JM
aXN0JiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgp
LT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworQmFzaWNCbG9jayogQmFz
aWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworQmFzaWNCbG9jayomIEJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBzdWNjZXNz
b3IoaW5kZXgpLmJsb2NrKCk7Cit9CisKK1N1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywg
U3VjY2Vzc29yTGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkKK3sKKyAgICByZXR1
cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihzdWNjZXNz
b3JzKCkpOworfQorCitTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0
IFN1Y2Nlc3Nvckxpc3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3Vj
Y2Vzc29yTGlzdD4oc3VjY2Vzc29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9ja1V0aWxzX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2Nr
VXRpbHNfaAorCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5v
ZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIGFk
ZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikK
K3sKKyAgICBCYXNpY0Jsb2NrOjpBZGphY2VuY3lMaXN0JiBwcmVkZWNlc3NvcnMgPSBibG9jay0+
cHJlZGVjZXNzb3JzKCk7CisKKyAgICBpZiAocHJlZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vz
c29yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcHJlZGVjZXNzb3JzLmFwcGVuZChw
cmVkZWNlc3Nvcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
c2ljQmxvY2s+Citib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNp
Y0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAgICBCYXNpY0Jsb2NrOjpBZGphY2VuY3lMaXN0JiBw
cmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVj
ZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnNbaS0t
XSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnMucmVtb3Zl
TGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKCFwcmVkZWNlc3NvcnMuY29udGFpbnMocHJlZGVj
ZXNzb3IpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wg
cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBmcm9tLCBC
YXNpY0Jsb2NrKiB0bykKK3sKKyAgICBCYXNpY0Jsb2NrOjpBZGphY2VuY3lMaXN0JiBwcmVkZWNl
c3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVjZXNzb3Jz
W2ldID09IGZyb20pIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpXSA9IHRvOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCisvLyBUaGlzIHJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCByZW1vdmVzIGJsb2NrcyB0
aGF0IGFyZW4ndCByZWFjaGFibGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgordm9p
ZCByZXNldFJlYWNoYWJpbGl0eShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYg
YmxvY2tzKQoreworICAgIC8vIENsZWFyIGFsbCBwcmVkZWNlc3NvciBsaXN0cyBmaXJzdC4KKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKQorICAgICAgICBibG9jay0+cHJlZGVj
ZXNzb3JzKCkucmVzaXplKDApOworCisgICAgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCb2NrKiwg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0Lm5vZGUoYmxvY2tz
WzBdKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgewor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9j
a3MoKSkgeworICAgICAgICAgICAgaWYgKHdvcmtsaXN0LmFkZChzdWNjZXNzb3IpKQorICAgICAg
ICAgICAgICAgIHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzKCkuYXBwZW5kKGJsb2NrKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBibG9ja3Muc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKGJsb2Nrc1tpXS5wcmVkZWNlc3NvcnMuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgYmxvY2tzW2ldID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrVXRpbHNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0Jsb2NrV29ya2xpc3RfaAorI2RlZmluZSBCM0Jsb2NrV29y
a2xpc3RfaAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleFNl
dC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3N0cnVjdCBCYXNp
Y0Jsb2NrOworCit0eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNl
dDxCYXNpY0Jsb2NrPj4gQmxvY2tXb3JrbGlzdDsKKworLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0
aDxpbnQ+IHlvdSBzaG91bGQgcmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2Nr
KiwgVD47CisKKy8vIEV4dGVuZGVkIGJsb2NrIHdvcmtsaXN0IGlzIHVzZWZ1bCBmb3IgZW5xdWV1
ZWluZyBzb21lIG1ldGEtZGF0YSBhbG9uZyB3aXRoIHRoZSBibG9jay4gSXQgYWxzbworLy8gcGVy
bWl0cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlmIHRoZSBibG9jayBoYXMgYWxy
ZWFkeSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgorLy8gdGhpbmdzIGxpa2UgYnVpbGRpbmcg
YSBzcGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBhdXhpbGlhcnkgcGF5bG9hZCkg
d291bGQgYmUgdGhlCisvLyBzdWNjZXNzb3IgaW5kZXguCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1
c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47CisKK3R5cGVkZWYgR3JhcGhWaXNp
dE9yZGVyIFZpc2l0T3JkZXI7CisKK3R5cGVkZWYgR3JhcGhOb2RlV2l0aE9yZGVyPEJhc2ljQmxv
Y2sqPiBCbG9ja1dpdGhPcmRlcjsKKwordHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlz
dDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRlckJsb2NrV29ya2xp
c3Q7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNCbG9ja1dvcmts
aXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVj
aWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisKK3Vuc2lnbmVkIG51bUIz
QXJncyhJbnN0JiBpbnN0KQoreworICAgIHN3aXRjaCAoaW5zdC5vcmlnaW4tPm9wY29kZSgpKSB7
CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tN
dWw6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIHJldHVybiAx
OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K0NoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQg
bnVtQXJncykKKyAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQorICAgICwgbV9udW1DaGVja0Fy
Z3MobnVtQXJncykKK3sKK30KKworQ2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKCkKK3sKK30K
KworSW5zdCBDaGVja1NwZWNpYWw6OmhpZGRlbkJyYW5jaChjb25zdCBJbnN0JiBpbnN0KSBjb25z
dAoreworICAgIEluc3QgaGlkZGVuQnJhbmNoKG1fY2hlY2tPcGNvZGUsIGluc3Qub3JpZ2luKTsK
KyAgICBoaWRkZW5CcmFuY2guYXJncy5yZXNpemUobV9udW1DaGVja0FyZ3MpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fbnVtQ2hlY2tBcmdzOyBpLS07KQorICAgICAgICBoaWRkZW5CcmFuY2gu
YXJnc1tpXSA9IGluc3QuYXJnc1tpICsgMV07CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaDsKK30K
Kwordm9pZCBDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVk
TGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGhpZGRlbkJy
YW5jaChpbnN0KS5mb3JFYWNoQXJnKGNhbGxiYWNrKTsKKyAgICBmb3JFYWNoQXJnSW1wbChudW1C
M0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgY2FsbGJhY2spOworfQorCiti
b29sIENoZWNrU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBoaWRk
ZW5CcmFuY2goaW5zdCkuaXNWYWxpZCgpCisgICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJn
cyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0KTsKK30KKworYm9vbCBDaGVja1NwZWNp
YWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlm
IChhcmdJbmRleCA+PSAxICYmIGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hlY2tBcmdzKQorICAgICAg
ICByZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmFkbWl0c1N0YWNrKGFyZ0luZGV4IC0gMSk7Cisg
ICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdz
ICsgMSwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVj
aWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNv
bnRleHQmIGNvbnRleHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWwgPSBoaWRkZW5C
cmFuY2goaW5zdCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICBBU1NFUlQoZmFpbC5pc1Nl
dCgpKTsKKworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgVmVjdG9yPFZh
bHVlUmVwPiByZXBzOworICAgIGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7Cisg
ICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisgICAgICAgICAgICByZXBz
LmFwcGVuZChWYWx1ZVJlcCgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPm9wY29kZSgpID09
IENoZWNrU3ViICYmIHZhbHVlLT5hcmdzWzBdLT5pc0ludCgwKSkKKyAgICAgICAgICAgIHJlcHMu
YXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJlcHMuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNvZGUsIGluc3QuYXJnc1syXSkpOworICAg
ICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMV0pKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENoZWNrKTsK
KyAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEpKTsKKyAgICB9CisKKyAg
ICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIHJlcHMp
OworICAgIAorICAgIGNvbnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgY3JlYXRlU2hh
cmVkVGFzazxHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCisgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkgewor
ICAgICAgICAgICAgICAgIGZhaWwubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAgICAg
ICAgICAgICAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgICAgICAgICAgICAgU3RhY2ttYXA6
OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICAgIHBhcmFtcy52YWx1ZSA9
IHZhbHVlOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAg
ICAgICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
dXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICAgICAgICAg
ICAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisgICAgICAgICAg
ICB9KSk7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChtX2NoZWNrT3Bjb2RlLCAiKCIsIG1fbnVtQ2hlY2tB
cmdzLCAiKSIpOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVk
IHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0aCAiLCBtX251bUNoZWNrQXJncywgIiBhcmdzLiIp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNDaGVja1NwZWNpYWxfaAorI2RlZmluZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNpbmNsdWRl
ICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ugd2FudCB0byBsb3dlciBDaGVjayBpbnN0
cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVuIHdlIHdhbnQgdG8gcm91dGUgdGhhdCBicmFu
Y2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2RlIGluc3RlYWQgb2YgZG9pbmcgYW55dGhpbmcg
ZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNrU3BlY2lhbCB3aWxsIHJlbWVtYmVyCisvLyB3
aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2VsZWN0ZWQgYWxvbmcgd2l0aCB0aGUgbnVtYmVy
IG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdhbnQuIEl0CisvLyB3aWxsIGNyZWF0ZSBhbiBJ
bnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUgYXBwcm9wcmlhdGUgYXJncyBmcm9tIHRoZSBv
d25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNhbGwgYW55IG9mIHRoZSBjYWxsYmFja3MuCisv
LworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011bCB3ZSBl
eHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFyZSB0aGUgcmV2ZXJzZQorLy8gb2YgdGhlIEFp
ciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQzMiBiLCBhKS4gRXhjZXB0OgorLy8gLSBDaGVj
a1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBCcmFuY2hOZWczMiB4LgorLy8gLSBDaGVja011
bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwzMiBiLCBhIGJ1dCB3ZSBwYXNzIEFueSBmb3Ig
YSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVj
aWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNp
Z25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKKyAgICAvLyBDb25zdHJ1Y3Rz
IGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJhbmNoIHRoYXQgdGhpcyB3
aWxsIHVzZS4KKyAgICBJbnN0IGhpZGRlbkJyYW5jaChjb25zdCBJbnN0JikgY29uc3Q7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFt
YmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNW
YWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5z
dCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8vIE5PVEU6IHRoZSBnZW5l
cmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdp
c3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBl
ciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBD
Q2FsbEhlbGVwcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBk
dW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJ
bXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgQWlyOjpP
cGNvZGUgbV9jaGVja09wY29kZTsKKyAgICB1bnNpZ25lZCBtX251bUNoZWNrQXJnczsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNDaGVja1NwZWNpYWxfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ2hlY2tWYWx1ZTo6
fkNoZWNrVmFsdWUoKQoreworfQorCit2b2lkIENoZWNrVmFsdWU6OmR1bXBNZXRhKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0YWNrbWFw
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
Q2hlY2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQ2hlY2tWYWx1ZSA6IHB1YmxpYyBDaGVjayB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVja1N1
YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfkNoZWNrVmFsdWUoKTsKKworICAgIFN0YWNr
bWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1
cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBD
aGVja011bC4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luLCBsZWZ0LCByaWdodCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0ludCh0eXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKGxlZnQtPnR5
cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBDaGVja0Fk
ZCB8fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2RlID09IENoZWNrTXVsKTsKKyAgICB9CisK
KyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY2RlID09IENoZWNrKTsKKyAgICB9Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaW5jbHVkZSAi
REZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitib29sIHNob3VsZER1bXBJUigp
Cit7CisgICAgcmV0dXJuIEZUTDo6dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpIHx8IEZUTDo6
c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKTsKK30K
KworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6
OmR1bXBHcmFwaEF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUigpCit7
CisgICAgcmV0dXJuIERGRzo6dmFsaWRhdGlvbkVuYWJsZWQoKSB8fCBzaG91bGRWYWxpZGF0ZUlS
QXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKQor
eworICAgIHJldHVybiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKwor
Ym9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZl
cmJvc2VWYWxpZGF0aW9uRmFpbHVyZSgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDb21tb25faAorI2RlZmluZSBCM0NvbW1vbl9oCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1w
SVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZh
bGlkYXRlSVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29tbW9uX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Nv
bW11dGF0aXZpdHkuaCIKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkpCit7CisgICAg
c3dpdGNoIChjb21tdXRhdGl2aXR5KSB7CisgICAgY2FzZSBDb21tdXRhdGl2ZToKKyAgICAgICAg
b3V0LnByaW50KCJDb21tdXRhdGl2ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOb3RD
b21tdXRhdGl2ZToKKyAgICAgICAgb3V0LnByaW50KCJOb3RDb21tdXRhdGl2ZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW11dGF0aXZpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21tdXRhdGl2aXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21tdXRhdGl2aXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29t
bXV0YXRpdml0eV9oCisjZGVmaW5lIEIzQ29tbXV0YXRpdml0eV9oCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitlbnVtIENvbW11dGF0aXZpdHkgeworICAgIENvbW11dGF0aXZl
LAorICAgIE5vdENvbW11dGF0aXZlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
bmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpCMzo6Q29tbXV0YXRpdml0eSk7CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gQjNDb21tdXRhdGl2aXR5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hl
ci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisjIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisj
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIENvbXBhcmlzb25NYXRjaGVyCisKK1Rl
c3RMb2FkTm90WmVybzEgPSBBbmQoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitUZXN0TG9hZE5vdFpl
cm8yID0gQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpCitUZXN0Tm90WmVybyA9IEFuZChsZWZ0LCBy
aWdodCkKKworVGVzdExvYWRaZXJvMSA9IEVxdWFsKEFuZChMb2FkKGFkZHJlc3MpLCByaWdodCks
ICQwKQorVGVzdExvYWRaZXJvMiA9IEVxdWFsKEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKSwgJDAp
CitUZXN0WmVybyA9IEVxdWFsKEFuZChsZWZ0LCByaWdodCksICQwKQorCitMb2FkRXF1YWwxID0g
RXF1YWwoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitMb2FkRXF1YWwyID0gRXF1YWwobGVmdCwgTG9h
ZChhZGRyZXNzKSkKK05vdCA9IEVxdWFsKHZhbHVlLCAkMCkKK0VxdWFsID0gRXF1YWwobGVmdCwg
cmlnaHQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0NvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3QzMlZh
bHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCht
X3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzQ29uc3QzMlZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDMyVmFsdWVfaAorCisj
aW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgQ29uc3QzMlZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdDMyOyB9
CisgICAgCisgICAgfkNvbnN0MzJWYWx1ZSgpOworICAgIAorICAgIGludDMyX3QgdmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRh
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2lu
IG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3QzMiwg
SW50MzIsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBCM0NvbnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0NjRWYWx1ZTo6fkNvbnN0NjRWYWx1ZSgp
Cit7Cit9CisKK3ZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3Q2NFZhbHVlX2gKKyNkZWZp
bmUgQjNDb25zdDY0VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3Q2NFZhbHVlIDogcHVibGljIFZhbHVl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0
dXJuIG9wY29kZSA9PSBDb25zdDY0OyB9CisgICAgCisgICAgfkNvbnN0NjRWYWx1ZSgpOworICAg
IAorICAgIGludDY0X3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0NjRWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAg
OiBWYWx1ZShpbmRleCwgQ29uc3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVl
KHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0NvbnN0NjRWYWx1ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisK
K3ZvaWQgQ29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91Ymxl
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3RE
b3VibGVWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25z
dERvdWJsZVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQor
ICAgIAorICAgIH5Db25zdERvdWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBkb3VibGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0
RG91YmxlLCBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnRyb2xWYWx1ZTo6fkNv
bnRyb2xWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29udHJvbFZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogbV9zdWNjZXNzb3JzKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
IHBvaW50ZXJEdW1wKGJsb2NrKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb250cm9sVmFsdWVfaAorI2RlZmluZSBCM0NvbnRy
b2xWYWx1ZV9oCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkIz
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2lj
QmxvY2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoK
KyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlz
IGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwg
c28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3dpdGNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4o
KSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKwor
ICAgIH5Db250cm9sVmFsdWUoKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25z
dCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1
Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2ldOyB9
CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IG1fc3VjY2Vzc29yc1tpXTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMo
KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQg
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFVzZSB0aGlz
IGZvciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShp
bmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKKyAgICB7CisgICAgfQor
CisgICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVsYXRlIHRoaXMuCisgICAgU3VjY2Vzc29yTGlz
dCBtX3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KworICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09
IE9vcHMpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBSZXR1cm4uCisgICAgQ29udHJv
bFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogcmVzdWx0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwg
cmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBSZXR1cm4pOworICAgIH0K
KworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayogdGFyZ2V0KQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAg
ICAgIEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQo
dGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRy
b2xWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIEJhc2ljQmxvY2sqIHllcywgQmFzaWNC
bG9jayogbm8pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBw
cmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAg
ICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVu
ZChubyk7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM0NvbnRyb2xWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Zy
ZXF1ZW5jeUNsYXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGcmVxdWVuY3lDbGFzcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZyZXF1ZW5j
eUNsYXNzIGZyZXF1ZW5jeSkKK3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgeworICAgIGNhc2Ug
RnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3JtYWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6CisgICAgICAgIG91
dC5wcmludCgiUmFyZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0ZyZXF1ZW5jeUNsYXNzX2gKKyNkZWZpbmUgQjNGcmVxdWVu
Y3lDbGFzc19oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIGNsYXNz
IEZyZXF1ZW5jeUNsYXNzIDogdWludDhfdCB7CisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgaHlw
b3RoZXNpcyBhYm91dCB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVj
dC4gVGhpcyBpcworICAgIC8vIHRoZSBjb21tb24gY2FzZS4gV2UgY2FuIHN0aWxsIHVzZSBiYXNp
YyBibG9jayBmcmVxdWVuY3kgaW4gdGhpcyBjYXNlLgorICAgIE5vcm1hbCwKKworICAgIC8vIFdl
IGV4cGVjdCB0aGF0IHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVjdCB3aWxsIGJlIHJlYWNoZWQg
c3VwZXIgcmFyZWx5LiBJdCdzIHZhbGlkIHRvCisgICAgLy8gcGVyZm9ybSBvcHRpbWl6YXRpb25z
IHRoYXQgcHVuaXNoIFJhcmUgY29kZS4gTm90ZSB0aGF0IHRoZXJlIHdpbGwgYmUgc2l0dWF0aW9u
cyB3aGVyZSB5b3UKKyAgICAvLyBoYXZlIHRvIHNvbWVob3cgY29uc3RydWN0IGEgbmV3IGZyZXF1
ZW5jeSBjbGFzcyBmcm9tIGEgbWVyZ2luZyBvZiBtdWx0aXBsZSBjbGFzc2VzLiBXaGVuCisgICAg
Ly8gdGhpcyBoYXBwZW5zLCBuZXZlciBjaG9vc2UgUmFyZTsgYWx3YXlzIGdvIHdpdGggTm9ybWFs
LiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlCisgICAgLy8gcmVhbGx5IGRvIHB1bmlzaCBS
YXJlIGNvZGUgdmVyeSBiYWRseS4KKyAgICBSYXJlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpGcmVxdWVuY3lDbGFzcyk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gQjNGcmVxdWVuY3lDbGFzc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUg
QjNGcmVxdWVudGVkQmxvY2tfaAorCisjaW5jbHVkZSAiQjNHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2Nr
OworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRl
ZEJsb2NrOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzRnJlcXVl
bnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M0dlbmVyYXRlLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJh
dGUuaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5o
IgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENDYWxsSGVscGVycyYg
aml0KQoreworICAgIEFpcjo6Q29kZSBjb2RlOworICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJl
LCBjb2RlKTsKKyAgICBBaXI6OmdlbmVyYXRlKGNvZGUsIGppdCk7Cit9CisKK3ZvaWQgZ2VuZXJh
dGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQWlyOjpDb2RlJiBjb2RlKQoreworICAgIGlm
IChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKHByb2NlZHVyZSwgImluaXRp
YWwiKTsKKworICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0
aWFsIEIzOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisgICAgCisg
ICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CisKKyAgICBpZiAoc2hvdWxk
VmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJmaW5hbCIpOworICAg
IAorICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBiZWZvcmUg
Z2VuZXJhdGlvbjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorCisg
ICAgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyYXRlX2gKKyNkZWZpbmUgQjNHZW5lcmF0ZV9o
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisK
Ky8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGFu
ZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBjb2RlIGJ5IGZpcnN0CisvLyBpbnRlcm5hbGx5IGNv
bnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFuZCB0aGVuIGdlbmVyYXRpbmcgdGhhdC4KK3ZvaWQg
Z2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0NhbGxIZWxwZXJzJik7CisKKy8vIFRoaXMgdGFrZXMgYSBC
Mzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWly
LiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKKy8vIHRoZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5n
IEFpcjo6Z2VuZXJhdGUoKS4gTm90ZSB0aGF0IGFuIEFpcjo6Q29kZSB3aWxsIGhhdmUgcG9pbnRl
cnMgaW50byB0aGUKKy8vIEIzOjpQcm9jZWR1cmUsIHNvIHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0
IHRoZSBCMzo6UHJvY2VkdXJlIG91dGxpdmVzIHRoZSBBaXI6OkNvZGUuCit2b2lkIGdlbmVyYXRl
VG9BaXIoUHJvY2VkdXJlJiwgQ29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzR2VuZXJhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmlu
ZSBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFz
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVxdWVudGVk
IGJsb2NrIGlzIGEgdHVwbGUgb2YgQmFzaWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNzLiBJdCdz
IHVzdWFsbHkgdXNlZCBhcyBhCisvLyBzdWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8dHlwZW5h
bWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2soCisgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbnVsbHB0ciwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVlbmN5Q2xh
c3M6Ok5vcm1hbCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fZnJlcXVl
bmN5KGZyZXF1ZW5jeSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZyZXF1ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9i
bG9jayA9PSBvdGhlci5tX2Jsb2NrCisgICAgICAgICAgICAmJiBtX2ZyZXF1ZW5jeSA9PSBvdGhl
ci5tX2ZyZXF1ZW5jeTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgRnJlcXVl
bnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBGcmVxdWVudGVkQmxvY2soKTsKKyAgICB9CisK
KyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICBC
YXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgRnJlcXVlbmN5Q2xh
c3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZnJlcXVlbmN5KCkg
IT0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgICAgIG91dC5wcmludChmcmVxdWVu
Y3koKSwgIjoiKTsKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKG1fYmxvY2spKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBGcmVxdWVuY3lD
bGFzcyBtX2ZyZXF1ZW5jeTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzSW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNJbmRleE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1h
cF9oCisjZGVmaW5lIEIzSW5kZXhNYXBfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworLy8gVGhpcyBpcyBhIG1hcCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQn
cyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVu
dCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywg
c2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBh
cmUgYSBsb3Qgb2YgVmFsdWVzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZh
bHVlPgorY2xhc3MgSW5kZXhNYXAgeworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNp
emVfdCBzaXplID0gMCkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAg
ICB9CisKKyAgICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVj
dG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtl
eSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgIH0K
KyAgICAKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhT
ZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVBy
aW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMg
YSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2ll
bnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlm
IHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNh
biBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFs
dWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4
U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorY2xhc3MgSW5kZXhTZXQgeworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAg
fQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0
LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJh
YmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBl
JiBjb2xsZWN0aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxl
Y3Rpb24oY29sbGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAg
ICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxs
cHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRv
cihjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRl
cmFibGU6Oml0ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNv
bGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rp
b25UeXBlKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVy
YWJsZTo6aXRlcmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigp
KTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2Nv
bGxlY3Rpb24sIG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3Qg
Q29sbGVjdGlvblR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1f
c2V0OworICAgIH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8g
aW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5
b3UgZG86CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlv
blR5cGU+IHZhbHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7
CisgICAgfQorCisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4g
bV9zZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6
IGluZGljZXMoKS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1
bXBQcmVmaXgsIGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNM
b3dlclRvQWlyLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQjNBZGRyZXNz
TWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzTG93ZXJpbmdNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNQ
cm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5h
bWVzcGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIExvd2VyVG9BaXIgeworcHVibGlj
OgorICAgIExvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCisgICAg
ICAgIDogdmFsdWVUb1RtcChjb2RlLnZhbHVlcygpLnNpemUoKSkKKyAgICAgICAgLCBibG9ja1Rv
QmxvY2soY29kZS5zaXplKCkpCisgICAgICAgICwgdXNlQ291bnRzKHByb2NlZHVyZSkKKyAgICAg
ICAgLCBhZGRyZXNzU2VsZWN0b3IoKnRoaXMpCisgICAgICAgICwgbG93ZXJpbmdTZWxlY3Rvcigq
dGhpcykKKyAgICAgICAgLCBwcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICAsIGNvZGUoY29k
ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChC
Mzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1cmUpCisgICAgICAgICAgICBibG9ja1RvQmxv
Y2tbYmxvY2tdID0gY29kZS5hZGRCbG9jayhibG9jay0+ZnJlcXVlbmN5KCkpOworCisgICAgICAg
IC8vIExvd2VyIGRlZnMgYmVmb3JlIHVzZXMgb24gYSBnbG9iYWwgbGV2ZWwuIFRoaXMgaXMgYSBn
b29kIGhldXJpc3RpYyB0byBsb2NrIGRvd24gYQorICAgICAgICAvLyBob2lzdGVkIGFkZHJlc3Mg
ZXhwcmVzc2lvbiBiZWZvcmUgd2UgZHVwbGljYXRlIGl0IGJhY2sgaW50byB0aGUgbG9vcC4KKyAg
ICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1cmUuYmxvY2tzSW5QcmVP
cmRlcigpKSB7CisgICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgorICAgICAgICAgICAg
aW5zdHMucmVzaXplKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBQcm9jZXNzIGJs
b2NrcyBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mg
d2hhdCBhbGxvd3MgdXMKKyAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2
ZWx5LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgICAgIGluc3RzLmFwcGVuZChWZWN0b3I8SW5zdD4oKSk7CisgICAgICAg
ICAgICAgICAgY3VycmVudFZhbHVlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIHJ1
bkxvd2VyaW5nTWF0Y2hlcihjdXJyZW50VmFsdWUsIGxvd2VyaW5nU2VsZWN0b3IpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIGlu
c3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcworICAgICAg
ICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlu
c3RzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IGlu
c3RzW2ldKQorICAgICAgICAgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJ
bnN0KFdURjo6bW92ZShpbnN0KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1h
a2Ugc3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgorICAgICAg
ICAgICAgQVNTRVJUKGJsb2NrLT5zdWNjZXNzb3JzKCkgPD0gMik7CisgICAgICAgICAgICBmb3Ig
KEIzOjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisg
ICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZChi
bG9ja1RvQmxvY2tbc3VjY2Vzc29yXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUbXAgdG1w
KFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1wID0gdmFsdWVUb1RtcFt2YWx1
ZV07CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1wID0gY29kZS5uZXdUbXAoaXNJ
bnQodmFsdWUpID8gQXJnOjpHUCA6IEFyZzo6RlApOworICAgICAgICByZXR1cm4gdG1wOworICAg
IH0KKworICAgIC8vIFRoaXMgZ2l2ZXMgeW91IHRoZSBhZGRyZXNzIG9mIHRoZSBnaXZlbiBMb2Fk
IG9yIFN0b3JlLiBJZiBpdCdzIG5vdCBhIExvYWQgb3IgU3RvcmUsIHRoZW4KKyAgICAvLyBpdCBy
ZXR1cm5zIEFyZygpLgorICAgIEFyZyBhZGRyKFZhbHVlKiBtZW1vcnlWYWx1ZSkKKyAgICB7Cisg
ICAgICAgIE1lbW9yeVZhbHVlKiB2YWx1ZSA9IG1lbW9yeVZhbHVlLT5hczxNZW1vcnlWYWx1ZT4o
KTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKworICAg
ICAgICBydW5BZGRyZXNzTWF0Y2hlcih2YWx1ZS0+Y2hpbGRyZW4ubGFzdCgpLCBhZGRyZXNzU2Vs
ZWN0b3IpOworICAgICAgICByZXR1cm4gYWRkcmVzc1NlbGVjdG9yLnNlbGVjdGVkQWRkcmVzcy53
aXRoT2Zmc2V0KHZhbHVlLT5vZmZzZXQoKSk7CisgICAgfQorCisgICAgQXJnIGxvYWRBZGRyKFZh
bHVlKiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICBpZiAobG9hZFZhbHVlLT5vcGNvZGUoKSA9
PSBMb2FkKQorICAgICAgICAgICAgcmV0dXJuIGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgcmV0
dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW0oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAg
ICAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6SW1t
KHZhbHVlLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgfQorCisgICAg
QXJnIGltbU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChBcmcgcmVzdWx0
ID0gaW1tKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVy
biB0bXAodmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPE9wY29kZSBvcGNvZGUsIENvbW11
dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAgIHZvaWQgYXBwZW5k
QmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1
bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRocmVlLW9wZXJh
bmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIsIGMKKyAgICAgICAgLy8gbWVh
biBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGMgPSBhIE9wIGIKKworICAgICAgICBp
ZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgewor
ICAgICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9wZXJhdGlvbiBjb3VsZCBoYXZlIGFuIGlt
bWVkaWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAgIGlmIChpbW0obGVmdCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKGxlZnQpLCB0bXAocmlnaHQpLCByZXN1
bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGltbShyaWdodCkgJiYgaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgeworICAgICAgICAg
ICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0ocmlnaHQpLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHdvLW9wZXJhbmQgZm9ybXMg
bGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcg
bGlrZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEKKworICAgICAgICAvLyBBdCB0aGlzIHBv
aW50LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGhhdmUgYSBmdXNl
ZCBsb2FkIG92ZXIgdGhyZWUKKyAgICAgICAgLy8gb3BlcmFuZCBmb3Jtcy4KKyAgICAgICAgCisg
ICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAgICAgICAgICBB
cmcgbGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAg
YXBwZW5kKE1vdmUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5k
KG9wY29kZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQXJnIHJpZ2h0QWRkciA9IGxvYWRBZGRy
KHJpZ2h0KTsKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgcmlnaHRBZGRyLmtpbmQo
KSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1
bHQpOworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLCByZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9w
Y29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3Vs
dCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2ZSA9
IE5vdENvbW11dGF0aXZlPgorICAgIGJvb2wgdHJ5QXBwZW5kU3RvcmVCaW5PcChWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQXJnIHN0b3JlQWRkciA9IGFkZHIoY3Vy
cmVudFZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CisKKyAgICAgICAgVmFsdWUq
IG90aGVyVmFsdWU7CisgICAgICAgIGlmIChhZGRyKGxlZnQpID09IHN0b3JlQWRkcikKKyAgICAg
ICAgICAgIG90aGVyVmFsdWUgPSByaWdodDsKKyAgICAgICAgZWxzZSBpZiAoY29tbXV0YXRpdml0
eSA9PSBDb21tdXRhdGl2ZSAmJiBhZGRyKHJpZ2h0KSA9PSBzdG9yZUFkZHIpCisgICAgICAgICAg
ICBvdGhlclZhbHVlID0gbGVmdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgc3RvcmVB
ZGRyLmtpbmQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXBwZW5k
KG9wY29kZSwgdG1wKG90aGVyVmFsdWUpLCBzdG9yZUFkZHIpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9p
ZCBhcHBlbmQoT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsK
KyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9wY29kZSwgY3VycmVudFZhbHVlLCBz
dGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorICAgIAorICAg
IEluZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhh
dmUgbm8gVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiB2YWx1ZVRvVG1wOwor
ICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBibG9ja1RvQmxv
Y2s7CisKKyAgICBVc2VDb3VudHMgdXNlQ291bnRzOworCisgICAgVmVjdG9yPFZlY3RvcjxJbnN0
LCA0Pj4gaW5zdHM7CisKKyAgICBWYWx1ZSogY3VycmVudFZhbHVlOworCisgICAgLy8gVGhlIGFk
ZHJlc3Mgc2VsZWN0b3Igd2lsbCBtYXRjaCBhbnkgcGF0dGVybiB3aGVyZSB0aGUgaW5wdXQgb3Bl
cmFuZHMgYXJlIGF2YWlsYWJsZSBhcyBUbXBzLgorICAgIC8vIEl0IGRvZXNuJ3QgY2FyZSBhYm91
dCBzaGFyaW5nLiBJdCB3aWxsIGhhcHBpbHkgZW1pdCB0aGUgc2FtZSBhZGRyZXNzIGV4cHJlc3Np
b24gb3ZlciBhbmQgb3ZlcgorICAgIC8vIGFnYWluIHJlZ2FyZGxlc3Mgb2YgdGhlIGV4cHJlc3Np
b24ncyBjb21wbGV4aXR5LiBUaGlzIHdvcmtzIG91dCBmaW5lLCBzaW5jZSBhdCB0aGUgbWFjaGlu
ZQorICAgIC8vIGxldmVsLCBhZGRyZXNzIGV4cHJlc3Npb25zIGFyZSBzdXBlciBjaGVhcC4gSG93
ZXZlciwgdGhpcyBkb2VzIGhhdmUgYSBoYWNrIHRvIGF2b2lkCisgICAgLy8gInVuaG9pc3Rpbmci
IGFkZHJlc3MgZXhwcmVzc2lvbnMuCisgICAgY2xhc3MgQWRkcmVzc1NlbGVjdG9yIHsKKyAgICAg
ICAgQWRkcmVzc1NlbGVjdG9yKExvd2VyVG9BaXImIGxvd2VyKQorICAgICAgICAgICAgOiBsb3dl
cihsb3dlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBhY2NlcHRzUm9v
dChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0
byBtYXRjaCBhbiBhZGRyZXNzIGV4cHJlc3Npb24gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1
dGVkCisgICAgICAgICAgICAvLyBleHBsaWNpdGx5LgorICAgICAgICAgICAgcmV0dXJuICF2YWx1
ZVRvVG1wW3Jvb3RdOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290TGF0ZShW
YWx1ZSopIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFsdWVUb1RtcFt2YWx1ZV0pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0cnVuIGFjY2VwdElu
dGVybmFscyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50
ZXJuYWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKEFyZ3VtZW50cy4u
LikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAg
ICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1
ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFj
Y2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2Nl
cHRPcGVyYW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50
cy4uLikgeyB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDEoVmFsdWUqIGluZGV4LCBWYWx1
ZSogbG9nU2NhbGUsIFZhbHVlKiBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG9n
U2NhbGUtPmFzSW50KCkgPCAwIHx8IGxvZ1NjYWxlLT5hc0ludCgpID4gMykKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6Omlu
ZGV4KAorICAgICAgICAgICAgICAgIGxvd2VyLnRtcChpbmRleCksIGxvd2VyLnRtcChpbmRleCks
IDEgPDwgbG9nU2NhbGUtPmFzSW50KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MihWYWx1ZSogYmFzZSwgVmFsdWUqIGlu
ZGV4LCB2YWx1ZSogbG9nU2NhbGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnlB
ZGRTaGlmdDEoaW5kZXgsIGxvZ1NjYWxlLCBiYXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChyaWdodC0+aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJv
ZHVjdGlvbiBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkgc2luY2Ugd2UgZXhwZWN0CisgICAgICAg
ICAgICAgICAgLy8gTG9hZChBZGQoQHgsIEBjb25zdDEpLCBvZmZzZXQgPSBjb25zdDIpIHRvIGhh
dmUgYWxyZWFkeSBiZWVuIHN0cmVuZ3RoLXJlZHVjZWQKKyAgICAgICAgICAgICAgICAvLyB0byBM
b2FkKEB4LCBvZmZzZXQgPSBjb25zdDEgKyBjb25zdDIpLgorICAgICAgICAgICAgICAgIHNlbGVj
dGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAobGVmdCksIHJpZ2h0LT5hc0ludDMyKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KGxvd2VyLnRtcChsZWZ0KSwgbG93ZXIu
dG1wKHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgdHJ5RGlyZWN0KFZhbHVlKiBhZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAg
ICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIoYWRkcmVzcyk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93ZXJUb0FpciYgbG93ZXI7
CisgICAgICAgIEFyZyBzZWxlY3RlZEFkZHJlc3M7CisgICAgfTsKKyAgICBBZGRyZXNzU2VsZWN0
b3IgYWRkcmVzc1NlbGVjdG9yOworCisgICAgLy8gVGhpcyB3aWxsIG1hdGNoIGNvbXBsZXggbXVs
dGktdmFsdWUgZXhwcmVzc2lvbnMsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG5vIHNoYXJpbmcuIEZv
ciBleGFtcGxlLAorICAgIC8vIGl0IHdvbid0IG1hdGNoIGEgTG9hZCB0d2ljZSBhbmQgY2F1c2Ug
dGhlIGdlbmVyYXRlZCBjb2RlIHRvIGRvIHR3byBsb2FkcyB3aGVuIHRoZSBvcmlnaW5hbAorICAg
IC8vIGNvZGUganVzdCBkaWQgb25lLgorICAgIGNsYXNzIExvd2VyaW5nU2VsZWN0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgTG93ZXJpbmdTZWxlY3RvcihMb3dlclRvQWlyJiBsb3dlcikKKyAg
ICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoIWxvd2VyLmxvY2tlZC5jb250YWlucyhyb290KSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWNjZXB0Um9vdExhdGUoVmFs
dWUqKSB7IH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGlu
dGVybmFsIHRoaW5ncyBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLCB0aGVuIHdlIGRvbid0IHdh
bnQgdG8gY2F1c2UKKyAgICAgICAgICAgIC8vIGl0IHRvIGJlIHJlY29tcHV0ZWQgYWdhaW4uCisg
ICAgICAgICAgICBpZiAobG93ZXIudmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSByZXF1aXJlIGlu
dGVybmFscyB0byBoYXZlIG9ubHkgb25lIHVzZSAtIHVzLgorICAgICAgICAgICAgaWYgKHVzZUNv
dW50c1t2YWx1ZV0gIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIHJldHVybiBhY2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsK
KyAgICAgICAgfQorICAgICAgICBib29sIGFjY2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgbG93ZXIubG9ja2VkLmFkZCh2YWx1
ZSk7CisgICAgICAgICAgICBhY2NlcHRJbnRlcm5hbHNMYXRlKGFyZ3VtZW50cy4uLik7CisgICAg
ICAgIH0KKyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKCkgeyB9CisgICAgICAgIAor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNj
ZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobG93ZXIubG9ja2VkLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYWNjZXB0T3BlcmFu
ZHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRz
KCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0K
KworICAgICAgICBib29sIHRyeUxvYWQoVmFsdWUqIGFkZHJlc3MpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBhZGRyKGFkZHJlc3MpLCBsb3dlci50bXAobG93ZXIu
Y3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgor
ICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZEJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVm
dCwgcmlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwg
VmFsdWUqKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgewor
ICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbG93ZXIudHJ5
QXBwZW5kU3RvcmVCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3Jl
IHR5cGVzIQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmVBbmRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1
ZSogcmlnaHQsIFZhbHVlKikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50
eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJu
IGxvd2VyLnRyeUFwcGVuZFN0b3JlQmluT3A8QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdo
dCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBs
ZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVN0b3JlKFZhbHVlKiB2YWx1ZSwg
VmFsdWUqKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgbG93ZXIu
dG1wKHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlSZXR1cm4oVmFsdWUq
IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsK
KyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAg
ICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBpbW1PclRtcCh2YWx1ZSksIEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
RG91YmxlOgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dlci50
bXAodmFsdWUpLCBHUFJJTmZvOjpyZXR1cm5WYWx1ZUZQUik7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgbG93ZXIuYXBwZW5kKFJldCk7CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93ZXJUb0FpciYgbG93ZXI7Cisg
ICAgfTsKKyAgICBMb3dlcmluZ1NlbGVjdG9yIGxvd2VyaW5nU2VsZWN0b3I7CisgICAgCisgICAg
UHJvY2VkdXJlJiBwcm9jZWR1cmU7CisgICAgQ29kZSYgY29kZTsKK307CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCit2b2lkIGxvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENv
ZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2NlZHVyZSwgImxvd2Vy
VG9BaXIiKTsKKyAgICBMb3dlclRvQWlyIGxvd2VyVG9BaXIocHJvY2VkdXJlLCBjb2RlKTsKKyAg
ICBsb3dlclRvQWlyLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNMb3dlclRvQWlyX2gKKyNkZWZpbmUgQjNMb3dlclRvQWlyX2gKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVz
cGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgbG93ZXJzIHRoZSBjdXJyZW50IEIz
IHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKwordm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYs
IEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIz
TG93ZXJUb0Fpcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5n
TWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
IyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0
Y2hlciBMb3dlcmluZ01hdGNoZXIKKworIyBUaGVzZSBydWxlcyBhcmUgY29uc2lkZXJlZCBpbiBh
IGNhc2NhZGUsIHN0YXJ0aW5nIGF0IHRoZSB0b3AuIEl0J3MgaW1wbGVuZW50ZWQgdXNpbmcgc3dp
dGNoCisjIHN0YXRlbWVudHMgd2hlcmV2ZXIgcG9zc2libGUuCisKKyMgTm90ZTogYWRkaW5nIG1v
cmUgcnVsZXMgdG8gdGhpcyBtYXRjaGVyIGlzIGFuIGV4Y2VsbGVudCB3YXkgb2YgaW1wcm92aW5n
IHBlcmZvcm1hbmNlIQorCitMb2FkID0gTG9hZChhZGRyZXNzKQorCitBZGQgPSBBZGQobGVmdCwg
cmlnaHQpCisKK1N0b3JlQWRkTG9hZCA9IFN0b3JlKEFkZChsZWZ0LCByaWdodCksIGFkZHJlc3Mp
CitTdG9yZUFuZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmUg
PSBTdG9yZSh2YWx1ZSwgYWRkcmVzcykKKworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+
TWVtb3J5VmFsdWUoKQoreworfQorCit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50
KCJvZmZzZXQgPSAiLCBtX29mZnNldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5
VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4
UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAg
IGNhc2UgTG9hZEZsb2F0OgorICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4
OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAg
ICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1l
bW9yeVZhbHVlKCk7CisKKyAgICBpbnRwdHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisK
KyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBv
ciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3Jp
YmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IHBvaW50ZXIsCisgICAgICAgIGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUo
aW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNl
IExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9h
ZDE2UzoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodHlwZSA9PSBEb3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAg
ICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAg
ICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9y
IGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9p
bnRlciwgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2Rl
LCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikK
KyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExv
YWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRG
bG9hdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3Jt
IGZvciBzdG9yZXMuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVy
LAorICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBv
cGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQo
b2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAg
ICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAg
ICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKworI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
Qzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bj
b2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBOb3A6CisgICAgICAgIG91
dC5wcmludCgiTm9wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElkZW50aXR5OgorICAg
ICAgICBvdXQucHJpbnQoIklkZW50aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENv
bnN0MzI6CisgICAgICAgIG91dC5wcmludCgiQ29uc3QzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDb25zdDY0OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0NjQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RE
b3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBv
dXQucHJpbnQoIlN0YWNrU2xvdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmd1bWVu
dFJlZzoKKyAgICAgICAgb3V0LnByaW50KCJBcmd1bWVudFJlZyIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIG91dC5wcmludCgiRnJhbWVQb2ludGVy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFkZDoKKyAgICAgICAgb3V0LnByaW50KCJB
ZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3ViOgorICAgICAgICBvdXQucHJpbnQo
IlN1YiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNdWw6CisgICAgICAgIG91dC5wcmlu
dCgiTXVsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERpdjoKKyAgICAgICAgb3V0LnBy
aW50KCJEaXYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAg
IG91dC5wcmludCgiQ2hpbGxEaXYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTW9kOgor
ICAgICAgICBvdXQucHJpbnQoIk1vZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRB
bmQ6CisgICAgICAgIG91dC5wcmludCgiQml0QW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEJpdE9yOgorICAgICAgICBvdXQucHJpbnQoIkJpdE9yIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRYb3IiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU2hsOgorICAgICAgICBvdXQucHJpbnQoIlNobCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTU2hyOgorICAgICAgICBvdXQucHJpbnQoIlNTaHIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgWlNocjoKKyAgICAgICAgb3V0LnByaW50KCJaU2hyIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQ4OgorICAgICAgICBvdXQucHJpbnQoIlNF
eHQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAgb3V0LnBy
aW50KCJTRXh0MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDMyOgorICAgICAg
ICBvdXQucHJpbnQoIlNFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBaRXh0MzI6
CisgICAgICAgIG91dC5wcmludCgiWkV4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEZSb3VuZDoKKyAgICAgICAgb3V0LnByaW50KCJGUm91bmQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSVRvRDoKKyAgICAgICAgb3V0LnByaW50KCJJVG9EIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIERUb0kzMjoKKyAgICAgICAgb3V0LnByaW50KCJEVG9JMzIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIG91dC5wcmludCgi
Tm90RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAg
IG91dC5wcmludCgiTGVzc1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRl
clRoYW46CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NFcXVhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgICAgIG91dC5wcmlu
dCgiR3JlYXRlckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlOgorICAg
ICAgICBvdXQucHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJlbG93
OgorICAgICAgICBvdXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFib3ZlRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQWJvdmVFcXVhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkJlbG93RXF1
YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBvdXQucHJp
bnQoIkxvYWQ4WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFM6CisgICAgICAg
IG91dC5wcmludCgiTG9hZDhTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQxNlo6
CisgICAgICAgIG91dC5wcmludCgiTG9hZDE2WiIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBMb2FkMTZTOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNlMiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGbG9hdCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBvdXQucHJpbnQo
IlN0b3JlOCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBv
dXQucHJpbnQoIlN0b3JlMTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVGbG9h
dDoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZUZsb2F0Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENDYWxsOgorICAgICAgICBvdXQucHJpbnQoIkNDYWxsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFBhdGNocG9pbnQ6CisgICAgICAgIG91dC5wcmludCgiUGF0Y2hw
b2ludCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgb3V0
LnByaW50KCJDaGVja0FkZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja1N1YjoK
KyAgICAgICAgb3V0LnByaW50KCJDaGVja1N1YiIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDaGVja011bDoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja011bCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgb3V0LnByaW50KCJDaGVjayIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBvdXQucHJpbnQoIlVwc2lsb24i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUGhpOgorICAgICAgICBvdXQucHJpbnQoIlBo
aSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKdW1wOgorICAgICAgICBvdXQucHJpbnQo
Ikp1bXAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBvdXQu
cHJpbnQoIkJyYW5jaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTd2l0Y2g6CisgICAg
ICAgIG91dC5wcmludCgiU3dpdGNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJldHVy
bjoKKyAgICAgICAgb3V0LnByaW50KCJSZXR1cm4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgT29wczoKKyAgICAgICAgb3V0LnByaW50KCJPb3BzIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2VudW0gT3Bjb2RlIDogaW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMg
Vm9pZCwgdXNlZnVsIGZvciB3aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5v
cCwKKyAgICAgCisgICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2
YWx1ZSB0eXBlLgorICAgIElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENv
bnN0VmFsdWUqIGNsYXNzZXMuIENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBz
byB0aGF0IHdlIGNhbgorICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1
Y3QgdGhlbS4gTGFyZ2UgY29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENv
bnN0MzIsCisgICAgQ29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdp
Y2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9m
IHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cg
eW91IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlz
am9pbnQgcmFuZ2Ugb2YKKyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFs
dWUgY2xhc3MuCisgICAgU3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQg
cmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBw
cm9ncmFtCisgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1
dCBpdCwgYW5kIHRoZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAg
Ly8gZG9uJ3QgY2xvYmJlciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxs
cyAoZWl0aGVyIGJ5IHNhdmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3Ig
cHJlc2VydmluZyBpdCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVu
dFJlZ1ZhbHVlIGNsYXNzLiBUaGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRl
cigpIChmb3IgR1BScykgb3IgRG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisK
KyAgICAvLyBUaGUgZnJhbWUgcG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBj
b250cm9sIGZsb3cgYnV0IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBv
aW50ZXIsIHdpdGggYSBjYXZlYXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBw
b2ludGVyIHRlbXBvcmFyaWx5IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJh
bWVQb2ludGVyIGludHJpbnNpYyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAq
c2hvdWxkKiBiZSBub3QKKyAgICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4K
KyAgICBGcmFtZVBvaW50ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0
aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYs
CisKKyAgICAvLyBJbnRlZ2VyIG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBl
dmVyLCBiZWhhdmVzIGxpa2UgSlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAg
IEJpdE9yLAorICAgIEJpdFhvciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisg
ICAgLy8gQ2FzdHMgYW5kIHN1Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6Cisg
ICAgU0V4dDgsCisgICAgU0V4dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIElu
dDY0OgorICAgIFNFeHQzMiwKKyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMg
RG91YmxlOgorICAgIEZSb3VuZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJs
ZToKKyAgICBJVG9ELAorICAgIC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAg
ICBEVG9JMzIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGgg
YW55IHZhbHVlIHR5cGUuIFJldHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAg
ICAvLyBpcyBqdXN0IEVxdWFsKHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAg
IExlc3NUaGFuLAorICAgIEdyZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVy
RXF1YWwsCisKKyAgICAvLyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3Ig
MS4KKyAgICBBYm92ZSwKKyAgICBCZWxvdywKKyAgICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVh
bCwKKworICAgIC8vIE1lbW9yeSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBh
bmQgdGhlIGxvYWRlZCB0eXBlLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2Ug
cmV0dXJuIEludDMyOgorICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAg
ICBMb2FkMTZTLAorICAgIC8vIFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAor
ICAgIC8vIFRoaXMgcmV0dXJuIHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2Fk
LAorCisgICAgLy8gTWVtb3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVl
IGlzIHN0b3JlZC4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4g
SW50MzIgdmFsdWU6CisgICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtl
cyBhIERvdWJsZSB2YWx1ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5
bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAor
CisgICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2lu
ZyB0aGUgc3lzdGVtIEMgY2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0
IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0Nh
bGwsCisKKyAgICAvLyBUaGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFs
dWUgY2xhc3MuIFRoaXMgaXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8v
IGJ1dCBvbmx5IGVtaXRzIGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0
IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3Mg
YSBzdGFja21hcCBhbG9uZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFy
Z3VtZW50IG11c3QgYmUgcGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0
IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0
byByZXF1ZXN0CisgICAgLy8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zm
c2V0IGZyb20gdGhlIHRvcCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAg
IC8vIHN0YWNrLgorICAgIFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0
aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2Rl
IGdlbmVyYXRpb24KKyAgICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQg
c29tZSBjb2RlIGFmdGVyIHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAor
ICAgIC8vIGZyb20gdGhlIGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBh
bHNvIGdldCB0byBzdXBwbHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBu
b3QgYWxsb3dlZCB0byBqdW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIg
c2xvdyBwYXRoLCBzaW5jZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRo
ZSBleGVjdXRpb24gb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRp
ZG4ndCBoYXBwZW4uIEZvcgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0Fk
ZCdzOgorICAgIC8vCisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNr
QWRkKHgsIHkpCisgICAgLy8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMg
dG86CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRp
dHkoYSkKKyAgICAvLworICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2Fs
bGJhY2tzIHVzZWQgYnkgdGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50
CisgICAgLy8gY2FsbGJhY2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZl
biBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRl
ciB0aGUgZmlyc3QgQ2hlY2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQg
bm90IGhhdmUgcG9zc2libHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhl
IHNlY29uZCBDaGVja0FkZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQs
CisgICAgQ2hlY2tTdWIsCisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUt
ZXhpdHMuIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5k
cywgdGhpcyBoYXMgYQorICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNr
LiBUaGlzIHRha2VzIGFuIEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0
aAorICAgIC8vIGZ1bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3Iu
IEEgdHJ1ZSB2YWx1ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGgu
CisgICAgQ2hlY2ssCisKKyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBT
U0EuCisgICAgVXBzaWxvbiwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisg
ICAgUGhpLAorCisgICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAg
IEp1bXAsCisgICAgCisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkg
dmFsdWUgdHlwZS4gQnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAg
Ly8gQ29udHJvbFZhbHVlIGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0
aGUgdHJ1ZSBzdWNjZXNzb3IuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hl
cyBvdmVyIGVpdGhlciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3Mu
CisgICAgU3dpdGNoLAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBk
b24ndCBrbm93IHRoZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkK
KyAgICAvLyB0eXBlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAor
CisgICAgLy8gVGhpcyBpcyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBu
ZXZlciBnZXQgaGVyZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307
CisKK2lubGluZSBib29sIGlzQ2hlY2tNYXRoKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAg
Y2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
K25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6T3Bjb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBCM09wY29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNPcmlnaW4uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3Zv
aWQgT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJPcmlnaW4oIiwgUmF3UG9pbnRlcihtX2RhdGEpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNPcmlnaW5faAorI2RlZmluZSBCM09yaWdpbl9oCisKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIgY2FuIGNob29zZSB0byBwdXQgb3JpZ2lu
cyBvbiB2YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIzIHdpbGwgYmUgYWJsZSB0bworLy8gYWNj
b3VudCwgZG93biB0byB0aGUgbWFjaGluZSBjb2RlLCB3aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNw
b25kcyB0byB3aGljaCBvcmlnaW4uIEIzCisvLyB0cmFuc2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2
ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQncyBhbiBlcnJvciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0
aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9wcyBPcmlnaW5zIG9yIGxpZXMgYWJvdXQgdGhlbS4KK2Ns
YXNzIE9yaWdpbiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRh
dGEgPSBudWxscHRyKQorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAg
ICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3Qgdm9p
ZCogbV9kYXRhOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M09yaWdpbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRT
cGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50U3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFNwZWNpYWwuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1BhdGNo
cG9pbnRTcGVjaWFsOjpQYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9CisKK1BhdGNocG9pbnRTcGVj
aWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFs
Ojpmb3JFYWNoQXJnKAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpF
YWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUo
KSA9PSBWb2lkKSB7CisgICAgICAgIGZvckVhY2hBcmdJbXBsKDAsIDEsIGluc3QsIGNhbGxiYWNr
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwg
QXJnOjpEZWYsIGluc3Qub3JpZ2luLT5haXJUeXBlKCkpOworICAgIGZvckVhY2hBcmdJbXBsKDAs
IDIsIGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6aXNWYWxp
ZChJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisg
ICAgICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsKKworICAgIGlmIChpbnN0LmFy
Z3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpbnN0LmFyZ3Nb
MV0ua2luZCgpICE9IEFyZzo6VG1wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFp
bnN0LmFyZ3NbMV0uaXNUeXBlKGluc3Qub3JpZ2luLT5haXJUeXBlKCkpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMiwgaW5zdCk7Cit9CisKK2Jv
b2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFy
Z0luZGV4KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAg
IHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwgMSwgaW5zdCwgYXJnSW5kZXgpOworCisgICAgaWYg
KGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhZG1p
dHNTdGFja0ltcGwoMCwgMiwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1
bXAgUGF0Y2hwb2ludFNwZWNpYWw6OmdlbmVyYXRlKAorICAgIEluc3QmIGluc3QsIENDYWxsSGVs
cGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBWYWx1ZSogdmFs
dWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2tt
YXAoKTsKKyAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBz
OworICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkg
IT0gVm9pZCkKKyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGlu
c3QuYXJnc1tvZmZzZXQrK10pKTsKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBvZmZzZXQs
IGluc3QsIHJlcHMpOworICAgIAorICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFt
czsKKyAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFj
a21hcDsKKyAgICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMg
PSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9y
LT5ydW4oaml0LCBwYXJhbXMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50U3BlY2lhbF9o
CisjZGVmaW5lIEIzUGF0Y2hwb2ludFNwZWNpYWxfaAorCisjaW5jbHVkZSAiQjNTdGFja21hcFNw
ZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMg
YSBzcGVjaWFsIHRoYXQgcmVjb2duaXplcyB0aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQYXRj
aHBvaW50OiBWb2lkIGFuZCBhbmQgbm9uLVZvaWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0aGUg
c3ludGF4IG9mIHRoZSBBaXIgUGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBhdGNo
ICZwYXRjaHBvaW50LCBhcmdzLi4uCisvLworLy8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUgbG93
ZXJlZCBhcmd1bWVudHMgdG8gdGhlIFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBub24t
Vm9pZCBjYXNlCisvLyB3ZSB3aWxsIGhhdmU6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50
LCByZXN1bHQsIGFyZ3MuLi4KKworY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMgQWly
OjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAgIHZpcnR1
YWwgflBhdGNocG9pbnRTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hB
cmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxi
YWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsK
KyAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVy
cmlkZTsKKworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0
aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAv
LyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVsZXBycyYsIEFpcjo6R2Vu
ZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgor
CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworUGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sKK30KKwor
dm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bh
dGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0
Y2hwb2ludFZhbHVlX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50VmFsdWVfaAorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBv
cGNvZGUgPT0gUGF0Y2hwb2ludDsgfQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAg
U3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKworICAgIFBhdGNocG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAg
OiBWYWx1ZShpbmRleCwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luLCBjaGlsZHJlbikKKyAgICB7
CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1Bh
dGNocG9pbnRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNl
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNl
U2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhh
c2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1
ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29wZShQcm9jZWR1cmUm
IHByb2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVy
ZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGREdW1wSVJBdEVhY2hQYWhz
ZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGJlZm9yZSAiLCBuYW1lLCAiOlxuIik7CisgICAg
ICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVm
b3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3RyaW5nKHByb2NlZHVyZSk7
Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRh
dGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKHByb2NlZHVyZSwgbV9uYW1lLCBt
X2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzUGhhc2VTY29wZV9oCisjZGVmaW5lIEIzUGhhc2VTY29wZV9oCisK
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShQ
cm9jZWR1cmUmLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlz
IGRvZXMgdmFsaWRhdGlvbgorCitwcml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7
CisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1BoYXNlU2NvcGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xp
c3QuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2Nl
ZHVyZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soZG91YmxlIGZy
ZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sgPSBzdGQ6
Om1ha2VfdW5pcXVlPEJhc2ljQmxvY2s+KG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KTsKKyAg
ICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQo
V1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1
cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworfQor
CitWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcigpCit7Cisg
ICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlz
dDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayog
YmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykK
KyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpKTsKKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1
cmU6OmJsb2Nrc0luUG9zdE9yZGVyKCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IHJlc3Vs
dDsKKyAgICBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1
c2goYmxvY2soMCkpOworICAgIHdoaWxlIChCbG9ja1dpdGhPcmRlciBpdGVtID0gd29ya2xpc3Qu
cG9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChpdGVtLm9yZGVyKSB7CisgICAgICAgIGNhc2UgUHJl
T3JkZXI6CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoUG9zdChpdGVtLmJsb2NrKTsKKyAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZW0uYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0t
OykKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGl0ZW0uYmxvY2stPnN1Y2Nlc3NvckJs
b2NrKGkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFBvc3RPcmRlcjoKKyAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS5ibG9jayk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxODAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJv
Y2VkdXJlX2gKKworI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7
CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQcm9jZWR1cmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
CisgICAgUHJvY2VkdXJlKCk7CisgICAgflByb2NlZHVyZSgpOworCisgICAgQmFzaWNCbG9jayog
YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSog
YWRkKEFyZ3VtZW50cy4uLik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0K
KyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
a3NbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
cHVibGljOgorICAgICAgICBpdGVyYXRvcigpOgorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShu
dWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkK
KyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9p
bmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJh
c2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3By
b2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2lu
ZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1cmUt
PnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRl
eCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKworICAgICAgICBQcm9j
ZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisK
KyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsg
fQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBudW1C
bG9ja3MoKSk7IH0KKworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRlcigp
OworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsKKworICAgIGNs
YXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29sbGVj
dGlvbihQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUocHJv
Y2VkdXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICAg
ICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX3By
b2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9y
KigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5i
bG9jayhtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9w
ZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgq
dGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAg
ICAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVz
LnNpemUoKSk7IH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9w
cm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdOyB9CisgICAg
ICAgIFZhbHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChp
bmRleCk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJvY2VkdXJlJiBtX3By
b2NlZHVyZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSB7IHJldHVy
biBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gQjNQcm9jZWR1cmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1Byb2NlZHVyZUlubGluZXNfaAorI2RlZmluZSBCM1Byb2NlZHVyZUlubGluZXNf
aAorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFk
ZChBcmd1ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlw
ZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOwor
ICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5k
KFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVJbmxpbmVzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTdGFja1Ns
b3RLaW5kLmgiCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdU
RiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgU3RhY2tTbG90S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkg
eworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgorICAgICAgICBvdXQucHJpbnQoIkxv
Y2tlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1v
dXM6CisgICAgICAgIG91dC5wcmludCgiQW5vbnltb3VzIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RL
aW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90
S2luZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xvdEtpbmRf
aAorI2RlZmluZSBCM1N0YWNrU2xvdEtpbmRfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworZW51bSBjbGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7CisgICAgLy8gQSBs
b2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVy
cyBiZWNhdXNlIHdlIGludGVuZCB0byBlc2NhcGUKKyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBu
b3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJl
c3Mgb2YgYSBzdGFjaworICAgIC8vIHNsb3QuCisgICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ug
c3RhY2sgc2xvdHMgY291bGQgc2hhcmUgc3BhY2Ugd2l0aCBvdGhlciBzdGFjayBzbG90cywgcHJv
dmlkZWQgdGhhdCB0aGV5IGFyZW4ndCBsaXZlCisgICAgLy8gYXQgdGhlIHNhbWUgdGltZS4gVGhl
IGNvbXBpbGVyIHN0aWxsIGhhcyB0byBkbyBlc2NhcGUgYW5hbHlzaXMsIHNpbmNlIHRoZXNlIGNh
biBiZSBlc2NhcGVkCisgICAgLy8gZXhwbGljaXRseSBpbiBJUi4KKyAgICBBbm9ueW1vdXMKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3Mg
UHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6
OlN0YWNrU2xvdEtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzU3Rh
Y2tTbG90S2luZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90VmFsdWU6On5TdGFja1Nsb3RWYWx1ZSgpCit7Cit9
CisKK3ZvaWQgU3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIGtpbmQgPSAi
LCBtX2tpbmQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCisjZGVmaW5lIEIzU3RhY2tTbG90
VmFsdWVfaAorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90S2lu
ZC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIEFpciB7
CitjbGFzcyBTdGFja1Nsb3Q7Cit9IC8vIG5hbWVzcGFjZSBBaXIKKworY2xhc3MgU3RhY2tTbG90
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN0YWNrU2xvdDsgfQorCisgICAgflN0
YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQ7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBp
bGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBwaW4gc3RhY2sgc2xvdHMuIFVzZSB0aGUKKyAg
ICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkg
Y29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGlz
IGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUgc3RhY2sgc2xvdCBpcyBMb2NrZWQuCisgICAgdm9p
ZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCisgICAgeworICAgICAgICBtX29mZnNl
dEZyb21GUCA9IHZhbHVlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIFN0YWNrU2xvdCwgcG9pbnRlcigpLCBvcmlnaW4pCisgICAgICAgICwg
bV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBt
X29mZnNldEZyb21GUCgwKQorICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXpl
OworICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOworICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQ
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xv
dFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0
YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN0YWNr
bWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KAorICAg
ICAgICAie29wYXF1ZSA9ICIsIFJhd1BvaW50ZXIobV9vcGFxdWUpLCAiLCByZXBzID0gIiwgbGlz
dER1bXAobV9yZXBzKSwKKyAgICAgICAgIiwgZ2VuZXJhdG9yID0gIiwgUmF3UG9pbnRlcihtX2dl
bmVyYXRvci5nZXQoKSksICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJlcmVkLAorICAgICAgICAi
LCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAifSIpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBC
M1N0YWNrbWFwX2gKKworI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRU
YXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1Nw
ZWNpYWw7CitjbGFzcyBTdGFja21hcFNwZWNpYWw7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgU3Rh
Y2ttYXAgeworcHVibGljOgorICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgVmFsdWUgY29udGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZh
bHVlKiB2YWx1ZTsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAg
U3RhY2ttYXAqIHN0YWNrbWFwOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBhY3R1
YWwgdmFsdWUgcmVwcmVzZW50YXRpb25zIHRoYXQgd2VyZSBjaG9zZW4uCisgICAgICAgIFZlY3Rv
cjxWYWx1ZVJlcD4gcmVwczsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgcmVnaXN0
ZXJzIHRoYXQgd2VyZSB1c2VkLgorICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOwor
ICAgIH07CisgICAgCisgICAgdHlwZWRlZiB2b2lkIEdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVs
cGVycyYsIGNvbnN0IEdlbmVyYXRpb25QYXJhbXMmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8
R2VuZXJhdG9yRnVuY3Rpb24+IEdlbmVyYXRvcjsKKyAgICAKKyAgICBTdGFja21hcCgpCisgICAg
eworICAgIH0KKworICAgIC8vIFNldCBzb21lIG9wYXF1ZSBkYXRhIHRvIGlkZW50aWZ5IHRoaXMg
c3RhY2ttYXAuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgYSBTdGFja21hcC11c2luZyBWYWx1ZQor
ICAgIC8vIGNhbiBiZSBkdXBsaWNhdGVkLCBhbmQgZWFjaCBkdXBsaWNhdGUgbWF5IGVuZCB1cCBo
YXZpbmcgZGlmZmVyZW50IHJlZ2lzdGVyIGFsbG9jYXRpb24uIFRoaXMKKyAgICAvLyBhbGxvd3Mg
YWxsIG9mIHRob3NlIGR1cGxpY2F0ZXMgdG8gYmUgYWJsZSB0byByZWZlciBiYWNrIHRvIHdoYXRl
dmVyIGhpZ2gtbGV2ZWwgZGF0YSBzdHJ1Y3R1cmVzCisgICAgLy8gd2Ugd2VyZSB1c2luZyB0byBj
cmVhdGUgdGhlIHZhbHVlLgorICAgIHZvaWQgc2V0T3BhcXVlKHZvaWQqIHBhcmFtZXRlcikKKyAg
ICB7CisgICAgICAgIG1fb3BhcXVlID0gcGFyYW1ldGVyOworICAgIH0KKyAgICB2b2lkKiBvcGFx
dWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQorCisgICAgLy8gQ29udmVuaWVuY2UgaGVs
cGVycyB3aGVuIHVzaW5nIGluZGljZXMgaW5zdGVhZCBvZiBwb2ludGVycy4KKyAgICB2b2lkIHNl
dE9wYXF1ZUluZGV4KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIHNldE9wYXF1ZShiaXR3
aXNlX2Nhc3Q8dm9pZCo+KGluZGV4KSk7CisgICAgfQorICAgIHNpemVfdCBvcGFxdWVJbmRleCgp
IGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxzaXplX3Q+KG9wYXF1ZSgpKTsgfQorCisgICAg
Ly8gQ29uc3RyYWluIGFuIGFyZ3VtZW50IHRvIHRoZSBWYWx1ZSB0aGF0IHVzZXMgdGhpcyBTdGFj
a21hcC4gSW4gY2FzZSBvZiBhIFBhdGNocG9pbnQgdGhhdAorICAgIC8vIHJldHVybnMgYSB2YWx1
ZSwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSByZXN1bHQgdmFsdWUuIEluIGFsbCBvdGhlciBj
YXNlcywgaW5kZXggemVybyByZWZlcnMKKyAgICAvLyB0byB0aGUgZmlyc3QgYXJndW1lbnQgdG8g
dGhhdCBWYWx1ZSwgZXZlbiBpZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBG
b3IgZXhhbXBsZSwKKyAgICAvLyBpbiBhIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBl
cnJvciB0byBjb25zdHJhaW4gaW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdAor
ICAgIC8vIHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4g
dGhlIGdlbmVyYXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuCisgICAgLy8gZGVwZW5k
IG9uIHRoZSByZXBzIGZvciB0aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lk
IGNvbnN0cmFpbih1bnNpZ25lZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7Cisg
ICAgICAgIGlmIChpbmRleCArIDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBz
Lmdyb3coaW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisK
KyAgICB2b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAg
IG1fY2xvYmJlcmVkLm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJTZXQm
IGNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lkIHNl
dEdlbmVyYXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICBt
X2dlbmVyYXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVu
Y3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFsOworICAg
IGZyaWVuZCBjbGFzcyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9vcGFxdWUg
eyBudWxscHRyIH07CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdl
bmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAg
UmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhl
ciBkdXBsaWNhdGVkIGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJn
ZSB0aGUgdXNlZCByZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVj
aWFsKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBTcGVjaWFsKG5hbWUpCit7Cit9CisKK1N0YWNr
bWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVj
aWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmIGluc3QsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0
YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgLy8gRklYTUU6IElm
IHRoZSBJbnN0IHRoYXQgdXNlcyB0aGUgU3RhY2ttYXBTcGVjaWFsIGdldHMgZHVwbGljYXRlZCwg
dGhlbiB3ZSBlbmQgdXAgbWVyZ2luZyB1c2VkCisgICAgLy8gcmVnaXN0ZXIgc2V0cyBmcm9tIG11
bHRpcGxlIHBsYWNlcy4gVGhpcyBjdXJyZW50bHkgd29uJ3QgaGFwcGVuIHNpbmNlIEFpciBkb2Vz
bid0IGhhdmUgdGFpbGR1cAorICAgIC8vIG9yIHRoaW5ncyBsaWtlIHRoYXQuIEJ1dCBtYXliZSBl
dmVudHVhbGx5IGl0IGNvdWxkIGJlIGEgcHJvYmxlbS4KKyAgICBzdGFja21hcC0+bV91c2VkUmVn
aXN0ZXJzLm1lcmdlKHVzZWRSZWdpc3RlcnMpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgU3Rh
Y2ttYXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBWYWx1
ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+
c3RhY2ttYXAoKTsKKworICAgIHJldHVybiBzdGFja21hcC0+Y2xvYmJlcmVkKCk7Cit9CisKK3Zv
aWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25v
cmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCBj
b25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7Cisg
ICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2Fu
ZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkg
Pj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgp
ID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVt
SWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuLnNpemUoKSAtIG51bUlnbm9yZWRCM0Fy
Z3MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgp
IC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdz
W2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNo
aWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7CisKKyAgICAgICAgY2FsbGJhY2soYXJnLCBBcmc6
OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICB9Cit9CisKK2Jv
b2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVk
QjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJnQXJncywKKyAgICBJbnN0JiBpbnN0KQorewor
ICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNh
bmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgp
ID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuLnNpemUo
KSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVl
LT5zdGFja21hcCgpOworCisgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgIC8vIEZvciB0aGUg
SW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMgdG8gaGF2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGFy
Z3VtZW50cy4KKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzICE9
IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBSZWdhcmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMg
aGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVtZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAg
ICAvLyBleGFtcGxlLCB5b3UgY2FuJ3QgaGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhp
cyB2ZXJpZmllcyB0aG9zZSBjb25kaXRpb25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1l
bnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkg
LSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUt
PmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFy
Z3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJn
LmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1t
OgorICAgICAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAg
ICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICBicmVhazsgLy8gT0sKKyAgICAg
ICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpICYmCisgICAgICAgICAgICAgICAgYXJnLmJhc2UoKSAh
PSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
QXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAg
ICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdy
ZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChzdGFja21h
cC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpKTsKKworICAgIC8vIFZl
cmlmeSBhbnkgZXhwbGljaXRseSBzdXBwbGllZCBjb25zdHJhaW50cy4KKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1JZ25vcmVkQjNBcmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXplKCk7ICsr
aSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAgIFZh
bHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFyZyA9IGlu
c3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsKKworICAg
ICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55Ogor
ICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAg
ICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAg
ICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6
CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9u
LgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChh
cmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6
OkNvbnN0YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXBy
ZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25v
cmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCB1
bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAg
ICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVuc2lnbmVk
IHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsgbnVtSWdu
b3JlZEIzQXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5tX3Jl
cHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8gY29u
c3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9u
bHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBpbnB1
dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8gYSBD
YWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0luZGV4
XS5raW5kKCkgPT0gQW55KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKAorICAgIEdlbmVy
YXRpb25Db250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgSW5zdCYgaW5z
dCwgVmVjdG9yPFZhbHVlUmVwPiYgcmVzdWx0KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG51
bUlnbm9yZWRBcmdzOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQu
YXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkpOworfQorCitWYWx1
ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBjb25zdCBBcmcmIGFy
ZykKK3sKKyAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICBjYXNlIFRtcDoKKyAgICAgICAg
cmV0dXJuIFZhbHVlUmVwOjpyZWcoYXJnLnJlZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBJbW06CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFu
dChhcmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWRkcjoKKyAgICAgICAg
aWYgKGFyZy5iYXNlKCkgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgICAgICAg
ICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChh
cmcuYmFzZSgpID09IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAg
ICAgIHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUo
KSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IHJldHVybiBWYWx1ZVJlcCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNw
ZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcFNwZWNpYWxf
aAorI2RlZmluZSBCM1N0YWNrbWFwU3BlY2lhbF9oCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgi
CisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworLy8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRoYXQgaGF2ZSBzdGFj
a21hcHMuIE5vdGUgdGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAgYnkKKy8vIGFza2luZyBm
b3IgdGhlIEluc3QncyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3RzIGRvbid0IG5lZWQgdG8g
ZXZlbiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAuCisKK2NsYXNzIFN0YWNr
bWFwU3BlY2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGljOgorICAgIFN0YWNrbWFw
U3BlY2lhbCgpOworICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEFpcjo6SW5zdCYsIGNvbnN0IFJlZ2lzdGVy
U2V0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVn
cyhBaXI6Okluc3QmKSBvdmVycmlkZTsKKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90
IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4gV2UgaGF2
ZSBtYW55IHNvbWUKKyAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCisKKyAg
ICB2b2lkIGZvckVhY2hBcmdJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdz
LCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0JiwgY29uc3Qg
U2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOworICAgIGJvb2wgaXNW
YWxpZEltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51
bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmKTsKKyAgICBib29sIGFkbWl0c1N0
YWNrSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVt
SWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYpOworCisgICAgLy8gQXBwZW5kcyB0
aGUgcmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBzdGFydGluZyB3aXRoIG51bUlnbm9yZWRBcmdz
LCB0byB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgIHZvaWQgYXBwZW5kUmVwc0ltcGwoQWlyOjpHZW5l
cmF0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBBaXI6Okluc3QmLCBWZWN0
b3I8VmFsdWVSZXA+Jik7CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVwRm9yQXJnKEFpcjo6Q29k
ZSYsIGNvbnN0IEFpcjo6QXJnJik7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNT
dWNjZXNzb3JDb2xsZWN0aW9uX2gKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
Ky8vIFRoaXMgaXMgYSBnZW5lcmljIHdyYXBwZXIgYXJvdW5kIGxpc3RzIG9mIGZyZXF1ZW50ZWQg
YmxvY2tzLCB3aGljaCBnaXZlcyB5b3UganVzdCB0aGUgYmxvY2tzLgorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCYXNpY0Jsb2NrLCB0eXBlZGVmIFN1Y2Nlc3Nvckxpc3Q+CitjbGFzcyBTdWNjZXNzb3JD
b2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uKFN1Y2Nlc3Nvckxp
c3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgeworICAgIH0KKworICAgIHNp
emVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgIEJhc2ljQmxv
Y2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygp
OyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9saXN0W2lu
ZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvcltd
KHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRv
ciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fY29s
bGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3NvckNvbGxlY3Rpb24mIGNvbGxlY3Rp
b24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9u
KQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5k
ZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2lkbmV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24qIG1fY29sbGVjdGlv
bjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJl
dHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisKK3ByaXZhdGU6CisgICAgU3VjY2Vzc29y
TGlzdCYgbV9saXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN3aXRjaENh
c2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jYXNl
VmFsdWUsICItPiIsIHBvaW50ZXJEdW1wKG1fdGFyZ2V0KSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaENhc2VfaAorI2RlZmluZSBC
M1N3aXRjaENhc2VfaAorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hDYXNlIHsKK3B1Ymxp
YzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNoQ2FzZShpbnQ2
NF90IGNhc2VWYWx1ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDog
bV9jYXNlVmFsdWUoY2FzZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7
CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEh
bV90YXJnZXQ7IH0KKworICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9j
YXNlVmFsdWU7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4g
bV90YXJnZXQ7IH0KKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jaygpIGNvbnN0IHsgcmV0dXJu
IG1fdGFyZ2V0LmJsb2NrKCk7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZTsKKyAgICBGcmVxdW50ZWRC
bG9jayB0YXJnZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbGR1ZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2Ug
U3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgU3dpdGNoQ2Fz
ZSByZXN1bHQgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0g
PSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6YXBwZW5kQ2FzZShjb25z
dCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobV9z
dWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNjZXNzb3JzW21fc3VjY2Vzc29ycy5zaXplKCkg
LSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKHN3aXRjaENh
c2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3aXRjaFZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRoaXMgZGVzdHJ1Y3RpdmVseSBvdmVycmlkZXMg
Q29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAgICBvdXQucHJpbnQobGlzdER1bXAoKnRoaXMp
LCAiLCBmYWxsVGhyb3VnaCA9ICIsIGZhbGxUaHJvdWdoKCkpOworfQorCitTd2l0Y2hWYWx1ZTo6
U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIEJhc2ljQmxvY2sqIGZh
bGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gsIG9yaWdpbikKK3sK
KyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVlX2gKKyNk
ZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBT
d2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8gbnVtQ2FzZVZhbHVlcygp
ICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8gVGhlIHN1Y2Nlc3NvciBm
b3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4LgorICAgIGludDY0X3QgY2Fz
ZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpXTsgfQorICAg
IAorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzOyB9CisKKyAgICBGcmVxdWVudGVkQmxvY2sgZmFsbFRocm91Z2goKSBjb25zdCB7
IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBmYWxs
VGhyb3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNl
IGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENh
c2UoY2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7CisgICAgfQorICAgIFN3aXRj
aENhc2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3aXRjaChudWxscHRyKQor
ICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChp
bmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRv
ciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgp
OworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTd2l0Y2hWYWx1ZSog
bV9zd2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKwor
ICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJ
ZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlv
dSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRo
aXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIg
Y2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAg
IFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVu
ZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCk7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9p
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50
KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0
LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAg
ICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5
cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lk
LAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJvb2wg
aXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUgPT0g
SW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJldHVy
biB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlcigpIGNvbnN0Cit7Cisg
ICAgaWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJl
dHVybiBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
QjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxv
blZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworVXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9u
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJeIiwgbV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2ls
b25WYWx1ZV9oCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IFVwc2lsb247IH0KKworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGko
KSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUo
aW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisg
ICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAg
fQorCisgICAgVmFsdWUqIG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1VzZUNvdW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVXNlQ291bnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1VzZUNvdW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVc2VDb3VudHM6OlVzZUNv
dW50cyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICA6IG1fY291bnRzKHByb2NlZHVyZS52YWx1
ZXMoKS5zaXplKCkpCit7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jZWR1cmUudmFsdWVz
KCkpIHsKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAg
ICAgICAgICAgIG1fY291bnRzW2NoaWxkXSsrOworICAgIH0KK30KKworVXNlQ291bnRzOjp+VXNl
Q291bnRzKCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzVXNlQ291bnRzX2gKKyNkZWZpbmUgQjNVc2VDb3VudHNfaAorCisjaW5jbHVkZSAiQjNJ
bmRleE1hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgVXNlQ291bnRzIHsKK3B1Ymxp
YzoKKyAgICBVc2VDb3VudHMoUHJvY2VkdXJlJik7CisgICAgflVzZUNvdW50cygpOworCisgICAg
dW5zaWduZWQgb3BlcmF0b3JbXShWYWx1ZSogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9jb3VudHNbdmFsdWVdOworICAgIH0KK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8VmFs
dWUsIHVuc2lnbmVkPiBtX2NvdW50czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gQjNVc2VDb3VudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
VmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUs
IGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9w
cm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1f
ZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUo
Y29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVf
XywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBt
ZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisgICAgdm9pZCBydW4oKQorICAgIHsK
KyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzOworICAgICAgICBIYXNoU2V0PFZh
bHVlKj4gdmFsdWVJblByb2M7CisgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluQmxvY2s7
CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2VkdXJlKSB7CisgICAg
ICAgICAgICBibG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVl
IDogKmJsb2NrKQorICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQodmFsdWUpOworICAg
ICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2NlZHVyZS52YWx1ZXMo
KSkKKyAgICAgICAgICAgIHZhbHVlSW5Qcm9jLmFkZCh2YWx1ZSk7CisKKyAgICAgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykKKyAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5C
bG9jay5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIGZvciAoVmFs
dWUqIHZhbHVlIDogdmFsdWVJbkJsb2NrKQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblBy
b2MuY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOworCisgICAgICAgIGZvciAoVmFs
dWUqIHZhbHVlIDogdmFsdWVJblByb2MpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxk
IDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblBy
b2MuY29udGFpbnMoY2hpbGQpLCAoIkF0ICIsICp2YWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAoY2hp
bGQpKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxv
Y2tzKSB7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5z
dWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAg
ICAgICAgICAgICBibG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJBdCAiLCAqYmxvY2ssICIt
PiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvcikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEV4cGFuZCB0aGlzIHZhbGlkYXRpb24gcGhhc2Uu
CisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0
ODAKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBmYWlsKAorICAgICAgICBjb25zdCBjaGFy
KiBmaWxlbmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBj
aGFyKiBjb25kaXRpb24sCisgICAgICAgIENTdHJpbmcgbWVzc2FnZSkKKyAgICB7CisgICAgICAg
IENTdHJpbmcgZmFpbHVyZU1lc3NhZ2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ1By
aW50U3RyZWFtIG91dDsKKyAgICAgICAgICAgIG91dC5wcmludCgiQjMgVkFMSURBVElPTiBGQUlM
VVJFXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGNvbmRpdGlvbiwgIiAoIiwg
ZmlsZW5hbWUsICI6IiwgbGluZU51bWJlciwgIilcbiIpOworICAgICAgICAgICAgb3V0LnByaW50
KCIgICAgIiwgbWVzc2FnZSwgIlxuIik7CisgICAgICAgICAgICBpZiAobV93aGVuKQorICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiICAgIER1cmluZyAiLCBtX3doZW4sICJcbiIpOworICAgICAg
ICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKworICAg
ICAgICBvdXQucHJpbnQoZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBpZiAobV9kdW1wQmVmb3Jl
KSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIkJlZm9yZSAiLCB3aGVuLCAiOlxuIik7CisgICAg
ICAgICAgICBvdXQucHJpbnQobV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAgICAgICBvdXQu
cHJpbnQoIkF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgICAgICBvdXQucHJpbnQobV9wcm9j
ZWR1cmUpOworCisgICAgICAgIG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdU
RlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBj
b25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1cmUm
IG1fcHJvY2VkdXJlOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJl
LCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQoreworICAgIFZhbGlk
YXRlciB2YWxpZGF0ZXIocHJvY2VkdXJlLCB3aGVuLCBkdW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0
ZXIucnVuKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1ZhbGlkYXRlX2gKKyNkZWZpbmUgQjNWYWxpZGF0ZV9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK3ZvaWQgdmFsaWRhdGUoUHJvY2VkdXJl
JiwgY29uc3QgY2hhciogd2hlbiA9IG51bGxwdHIsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUgPSBu
dWxscHRyKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1ZhbGlk
YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFsdWU6On5WYWx1ZSgpCit7Cit9CisK
K3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqIHZhbHVlKQoreworICAgIC8v
IFRoaXMgaXMgYSBiaXQgY3JhenkuIEl0IGRvZXMgYW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQgb2Yg
d2hhdGV2ZXIgVmFsdWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRoCisgICAgLy8gYSBwbGFpbiBJZGVu
dGl0eSBWYWx1ZS4gV2UgZmlyc3QgY29sbGVjdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIG5l
ZWQsIHRoZW4gd2UgZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2Us
IGFuZCB0aGVuIHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCisKKyAg
ICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgVHlwZSB0eXBlID0gbV90eXBlOworICAg
IE9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMt
Pm93bmVyOworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworICAg
IHZvaWQqIG1pc2MgPSB0aGlzLT5taXNjOworCisgICAgUkVMRUFTRV9BU1NFUlQodHlwZSA9PSB2
YWx1ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKworICAgIG5ldyAo
dGhpcykgKGluZGV4LCBJZGVudGlmeSwgdHlwZSwgb3JpZ2luLCB2YWx1ZSk7CisKKyAgICB0aGlz
LT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7Cisg
ICAgdGhpcy0+bWlzYyA9IG1pc2M7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisK
K3ZvaWQgVmFsdWU6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1fdHlwZSwgIiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bjb2RlKTsKKworICAgIG91dC5w
cmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKFZhbHVlKiBjaGls
ZCA6IGNoaWxkcmVuKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoY2hp
bGQpKTsKKworICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0cmluZ091dDsKKyAgICBkdW1wTWV0YShz
dHJpbmdPdXQpOworICAgIENTdHJpbmcgc3RyaW5nID0gc3RyaW5nT3V0LnRvQ1N0cmluZygpOwor
ICAgIGlmIChzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgc3RyaW5n
KTsKKworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQzMl90IFZhbHVlOjphc0ludDMyKCkg
Y29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAw
OworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29sIFZhbHVlOjpoYXNE
b3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworZG91YmxlIFZhbHVlOjph
c0RvdWJsZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25z
dAoreworfQorCitUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVlKiBmaXJz
dENoaWxkKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToKKyAg
ICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIERpdjoK
KyAgICBjYXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAg
IGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBT
U2hyOgorICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tT
dWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQtPnR5cGUo
KTsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHBvaW50ZXIoKTsKKyAg
ICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNh
c2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNh
c2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1
YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVFcXVh
bDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBjYXNl
IFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0OworICAgIGNh
c2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICBj
YXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNWYWx1ZV9oCisjZGVmaW5lIEIzVmFsdWVfaAorCisjaW5jbHVkZSAi
QWlyQXJnLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWUgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSosIDM+IEFkamFjZW5jeUxpc3Q7CisK
KyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICJAIjsKKworICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIH5WYWx1
ZSgpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Cisg
ICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNvZGUgaXMgaW1tdXRhYmxlLCBleGNlcHQgZm9y
IHJlcGxhY2luZyB2YWx1ZXMgd2l0aCBpZGVudGl0eS4KKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29u
c3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKworICAgIE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJl
dHVybiBtX29yaWdpbjsgfQorICAgIAorICAgIFZhbHVlKiYgY2hpbGQodW5zaWduZWQgaW5kZXgp
IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisgICAgVmFsdWUqIGNoaWxkKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorCisgICAgLy8gVGhp
cyBjb21wdXRlcyB0aGUgdHlwZSB1c2luZyB0aGUgb3Bjb2RlLgorICAgIFR5cGUgdHlwZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgLy8gVGhpcyBpcyB1c2VmdWwgd2hlbiBsb3dl
cmluZy4gTm90ZSB0aGF0IHRoaXMgaXMgb25seSB2YWxpZCBmb3Igbm9uLXZvaWQgdmFsdWVzLgor
ICAgIEFpcjo6QXJnOjpUeXBlIGFpclR5cGUoKSBjb25zdCB7IHJldHVybiBBcmc6OkFyZzo6dHlw
ZUZvckIzVHlwZSh0eXBlKCkpOyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsg
cmV0dXJuIG1fY2hpbGRyZW47IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4o
KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRl
bnRpdHkoVmFsdWUqKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKKyAgICAvLyBUaGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBleGFtcGxl
LCBpZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZlIGEKKyAg
ICAvLyBBcmd1bWVudFJlZ1ZhbHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8gaWYgKEFy
Z3VtZW50UmVnVmFsdWUqIGFyZ3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+
KCkpIHsKKyAgICAvLyAgICAgdGhpbmdzCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gVGhpcyB3
aWxsIHJldHVybiBudWxsIGlmIHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRoaXMgd29y
a3MgYmVjYXVzZSB0aGlzIHJldHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2VwdHMob3Bj
b2RlKCkpIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBh
cygpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25zdDsK
KyAgICAKKyAgICBib29sIGhhc0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0ludDMyKCkg
Y29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJ
bnQ2NCgpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFz
SW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdDsKKworICAg
IGJvb2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisK
KyAgICBTdGFja21hcCogc3RhY2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEg
UHJvY2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBl
IGV4cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4
cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQor
ICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAg
ICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAg
LCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9Cisg
ICAgLy8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hl
biB0aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAg
ICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAs
IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQor
ICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVp
ciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bj
b2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQp
KQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJz
dENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlz
IGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bj
b2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKKyAg
ICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29k
ZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAgICAgICAs
IG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9y
IHZhcmFyZ3MuCisgICAgZXhwaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29k
ZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJl
bikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkK
KyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAg
ICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFR5
cGUgdHlwZUZvcihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKworICAgIC8vIFRoaXMgZ3Jv
dXAgb2YgZmllbGRzIGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgorICAgIHVuc2lnbmVk
IG1faW5kZXg7CisgICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgIFR5cGUgbV90eXBlOworICAgIAor
ICAgIE9yaWdpbiBtX29yaWdpbjsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisKK3B1
YmxpYzoKKyAgICBCYXNpY0Jsb2NrKiBvd25lciB7IG51bGxwdHIgfTsgLy8gY29tcHV0ZWQgbGF6
aWx5LgorICAgIFZhbHVlKiByZXBsYWNlbWVudCB7IG51bGxwdHIgfTsgLy8gdXNlZCBmb3IgYW5h
bHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KK307CisKK2NsYXNzIERlZXBWYWx1ZUR1bXAgewor
cHVibGljOgorICAgIERlZXBWYWx1ZUR1bXAoVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fdmFs
dWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVl
LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxu
dWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBWYWx1ZSogbV92YWx1ZTsKK307CisKK0Rl
ZXBWYWx1ZUR1bXAgZGVlcER1bXAoVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVwVmFs
dWVEdW1wKHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBCM1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxp
bmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwOSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gK
KyNkZWZpbmUgQjNWYWx1ZUlubGluZXNfaAorCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisj
aW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZh
bHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QqIFZhbHVlOjphcygpCit7CisgICAgaWYg
KFQ6OmFjY2VwdHMob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHRo
aXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29u
c3QgVCogVmFsdWU6OmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxWYWx1ZSo+
KHRoaXMpLT5hczxUPigpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbnQzMl90IFZhbHVlOjphc0lu
dDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgpOwor
fQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29u
c3Q2NFZhbHVlPigpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpo
YXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0KCk7Cit9
CisKK2ludDY0X3QgVmFsdWU6OmFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIo
KSA/IGFzSW50MzIoKSA6IGFzSW50NjQoKTsKK30KKworYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRf
dCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1
ZTsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFh
czxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKwor
U3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUqIGNoZWNr
ID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2ttYXA7Cisg
ICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4o
KSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM1ZhbHVl
SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNW
YWx1ZVJlcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1
ZVJlcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tp
bmQpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb25lOgorICAgIGNhc2UgU29t
ZVJlZ2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAg
b3V0LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
YWNrOgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCIo
Iiwgb2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0
YW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZVJl
cDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVSZXA6
OkFueToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0
ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAg
ICAgICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZh
bHVlUmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50
KCJTdGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpD
b25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVS
ZXBfaAorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0
byBkZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQg
Ym90aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNl
bnRhdGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBz
YXkKKy8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQg
cmVwcmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQu
CisKK2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAv
LyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNr
IGFueSByZXByZXNlbnRhdGlvbi4gQXMgYW4KKyAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2VudGF0
aW9uLCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2Ug
Zm9yIHRoZQorICAgICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBhIENo
ZWNrTXVsLgorICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBj
b3VsZCBiZSBhCisgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJl
ciEKKyAgICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJl
c2VudGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1
dAorICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVy
IEIzIHBpY2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0
IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQu
IEl0J3Mgbm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAg
ICAgIFN0YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlz
IGZvcmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUK
KyAgICAgICAgLy8gb2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8v
IEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0
YW50LWZvbGRlZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAg
ICBWYWx1ZVJlcCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAg
ZXhwbGljaXQgVmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisg
ICAgICAgICwgbV92YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGlj
IFZhbHVlUmVwIHJlZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJl
Zyk7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZy
b21GUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRG
cm9tU1ApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBTdGFja0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZy
b21TUDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IENvbnN0YW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKwor
ICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUpCisgICAgewor
ICAgICAgICByZXR1cm4gVmFsdWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7Cisg
ICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQor
CisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJl
Z2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0K
KworICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90
PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2
NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3Rh
bnQpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91Ymxl
VmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+
KHZhbHVlKCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVy
bl9tYXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTA1IEBACisjIS91c3IvYmlu
L2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVp
cmUgInBhdGhuYW1lIgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4
ICs9IDEKKyAgICAiX3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisg
ICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bj
b2RlLCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2Rl
LCBjaGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5h
bWUKKyAgICAgICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFsw
LTldKylcWi8pCisgICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUg
PX4gL1xBXCQvID8gJCcgOiBuYW1lCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAg
QGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYg
aGFzT3Bjb2RlCisgICAgICAgIG9wY29kZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNo
VmFyaWFibGUoJnByb2MpCisgICAgICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAg
ICAgICAgICB8IGNoaWxkLCBpbmRleCB8CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAg
ICAgICAgICAgICAgICAgY2hpbGQubmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5h
bWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8g
OmFub25JbnRlcm5hbCA6IDphbm9uT3BlcmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFs
IDogOm9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxk
LmVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1h
dGNoZXIKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5p
dGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAg
IEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2lu
CisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBp
bml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxl
TmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAg
ICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQK
K2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAg
ICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9
IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVm
ID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0
cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9
PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisg
ICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAg
ICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAg
ICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAg
ICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAg
ICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmls
ZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5l
TnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisg
ICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3Jl
CisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAg
ICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFth
LXpBLVowLTlfXSopLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3
KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8K
KyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxd
LworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBs
aW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBl
cnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVj
dGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAg
IHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNL
ZXl3b3JkKHRva2VuKQorICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtl
eXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRv
a2VuID1+IC9cQSgobWF0Y2hlcikpXFovCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikK
KyAgICB0b2tlbiA9fiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5vdCBp
c0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUo
ZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisg
ICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vu
c1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisg
ICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4K
KyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNl
IGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAg
ICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmlu
ZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2Vu
ID09IHN0cmluZworICAgICAgICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlk
ZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJy
b3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAg
ICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRVbmlx
dWUobmFtZSwgcHJvZHVjdGlvbnMsIHByb2R1Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0gcHJv
ZHVjdGlvbi52YXJOYW1lCisgICAgICAgICAgICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0aW9u
IGhhcyBzYW1lIG5hbWUgYXMgcGFyZW50IHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAg
ICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVj
dGlvbi5uYW1lIH0KKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9u
IikKKyAgICAgICAgZW5kCisgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBl
bmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAgICAg
ICBtYXRjaGVyTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMg
PSBbXQorCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9r
ZW5zLmxlbmd0aAorCisgICAgICAgICAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5j
bHVkZSIuIElmIHdlIGRpZCB0aGF0LCBpdCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAgcHJv
ZHVjdGlvbiA9IHBhcnNlUHJvZHVjdGlvbgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBw
cm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5h
bWUgfQorICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikK
KyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9u
CisgICAgICAgIH0KKworICAgICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVjdGlv
bnMpCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdpbiA9
IHRva2VuLm9yaWdpbgorICAgICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAg
ICBpZiB0b2tlbiA9PSAiPSIKKyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAgICAgICAgICAg
b3Bjb2RlID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAg
ICAgICBlbHNpZiB0b2tlbiA9PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAg
ICAgICAgb3Bjb2RlID0gbmFtZQorICAgICAgICAgICAgbmFtZSA9IG5pbAorICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXR1cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWwsIG5p
bCkKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisgICAg
ICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisKKyAgICAgICAg
ICAgIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorCisgICAg
ICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1bWUoIiwiKQor
ICAgICAgICB9CisKKyAgICAgICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAgICAgICAgYWR2
YW5jZQorCisgICAgICAgIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBwcm9k
dWN0aW9ucykKKyAgICBlbmQKK2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0g
UGFyc2VyLm5ldyhJTzo6cmVhZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hlciA9IHBhcnNl
ci5wYXJzZQorCitjbGFzcyBTdWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRleE1hcCwgOnBy
b2R1Y3Rpb25zCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0aW9u
cykKKyAgICAgICAgQGluZGV4TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25zID0gW10KKyAg
ICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAg
ICBAaW5kZXhNYXAgPDwgaW5kZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0
aW9uc1tpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgZGVmIG1hcEluZGV4TGlzdChp
bmRleExpc3QpCisgICAgICAgIGluZGV4TGlzdC5tYXAgeworICAgICAgICAgICAgfCBpbmRleCB8
CisgICAgICAgICAgICBAaW5kZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAor
CitGaWxlLm9wZW4oIkIzIiArIG1hdGNoZXIubmFtZSArICIuaCIsICJ3IikgeworICAgIHwgb3V0
cCB8CisKKyAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJuX21h
dGNoZXIucmIgZnJvbSAje2ZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisKKyAgICBvdXRwLnB1
dHMgIiNpZm5kZWYgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUg
QjMje21hdGNoZXIubmFtZX1faCIKKyAgICAKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQjNW
YWx1ZS5oXCIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsiCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IgorICAg
IG91dHAucHV0cyAidm9pZCBydW4je21hdGNoZXIubmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRhcHRv
ciYgYWRhcHRvcikiCisgICAgb3V0cC5wdXRzICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBk
b2VzIG5vdCBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vy
c2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAgICAjIHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBm
b3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBnb29kIHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9y
bWF0IGl0CisgICAgIyBmb3IgeW91LgorCisgICAgIyBJbiBvZGQgc2l0dWF0aW9ucywgd2UgbWF5
IG5vdCB1c2UgdGhlIGlucHV0IHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQg
YWJvdXQgaXQuCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsiCisgICAgICAg
IAorICAgICMgVGhpcyBqdXN0IHByb3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29y
cnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5nIGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBt
YXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRleExp
c3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAg
ICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0g
YW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJv
ZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8
PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwg
W2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICBpbmRleExpc3Rz
LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgbGVuZ3RoID0g
cHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlm
IGxlbmd0aCA+IDAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0t
PmNoaWxkcmVuLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQg
aW5kZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAg
ICAgIH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhl
IGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisg
ICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5k
IHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3Ig
ZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5l
IGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHBy
b2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJv
ZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGlu
dG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAg
ICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHBy
b2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGlu
ZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRl
eExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAg
ICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUu
IFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgor
ICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzLmVhY2ggewor
ICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5k
ZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhp
cyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAg
ICBncm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAg
ICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBw
cm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rp
b24ub3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bj
b2RlXSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQg
YSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgj
e3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3Bh
aXIgeworICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAg
ICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMp
CisgICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0
Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwK
KyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRl
eExpc3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAg
ICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9u
cykgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAg
ICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMg
cHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3Ro
IGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0
IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwg
cHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9k
dWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1
Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAg
ICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIK
KyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNo
aWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlzIHZh
bHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAgIG91
dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAgICAgICBz
dWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rp
b24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAgICAg
ICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1
Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJNYXRj
aCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0
Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1uSW5k
ZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAg
IHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYgbWF0
Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBtYXRj
aFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAg
IHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlz
IGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5k
CisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNoID0g
U3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENv
bHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAgICAg
ICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1h
cEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbmQK
KworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlv
bnMpIHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICBpbmRleExpc3QuZWFjaCB7Cisg
ICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVyLnBy
b2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAgICAg
b3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAg
ICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVu
dHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG51bVNj
b3BlcyA9IDAKKyAgICAgICAgICAgIHNlZW4gPSB7fQorICAgICAgICAgICAgcHJvZHVjdGlvbi5l
YWNoVmFyaWFibGUgeworICAgICAgICAgICAgICAgIHwgcGFyZW50VmFyTmFtZSwgY2hpbGROYW1l
LCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBsb2FkRXhwciA9
ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgje2luZGV4fSkiCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgaWYgc2VlbltjaGlsZFZhck5hbWVdCisgICAgICAgICAgICAgICAgICAg
IHRtcCA9IG5ld1ZhcgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3Rt
cH0gPSAje2xvYWRFeHByfTsiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7
dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsiCisgICAgICAgICAgICAgICAgICAgIG51bVNjb3Bl
cyArPSAxCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWVuW2No
aWxkVmFyTmFtZV0gPSB0cnVlCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFtZX0gPSAje2xvYWRFeHByfTsiCisK
KyAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7
JDF9KSkgeyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7Igor
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1T
Y29wZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBp
ZiBraW5kID09IDppbnRlcm5hbCBvciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAg
ICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3Bl
cmFuZCBvciBraW5kID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1
bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9w
ZXJhbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKGFkYXB0b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5s
ZXNzIGludGVybmFsQXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygi
JiYgYWRhcHRvci5hY2NlcHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwg
IikgKyAiKSIpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJn
dW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2Nl
cHRPcGVyYW5kcygiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0
aW9uLm5hbWV9KCIgKyB0cnlBcmd1bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAg
ICAgIHVubGVzcyBpbnRlcm5hbEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImFkYXB0b3IuYWNjZXB0SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMu
am9pbigiLCAiKSArICIpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9w
ZXJhbmRBcmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9y
LmFjY2VwdE9wZXJhbmRzTGF0ZSgiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7
IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybjsiCisgICAg
ICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91
dHAucHV0cyAifSIKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisg
ICAgb3V0cC5wdXRzICJ9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMg
IiNlbmRpZiAvLyBCMyN7bWF0Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxs
b2NhdGVTdGFjay5oIgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckxpdmVu
ZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgYXR0ZW1w
dEFzc2lnbm1lbnQoCisgICAgU3RhY2tTbG90KiBzbG90LCBpbnRwdHJfdCBvZmZzZXRGcm9tRlAs
IGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBmb3IgKFN0YWNr
U2xvdCogb3RoZXJTbG90IDogb3RoZXJTTG90cykgeworICAgICAgICBpZiAoIW90aGVyU2xvdC0+
b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9mZnNl
dEZyb21GUCArIHNsb3QtPmJ5dGVTaXplKCkgPj0gb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVyU2xvdC0+b2Zmc2V0
RnJvbUZQKCkgKyBvdGhlclNsb3QtPmJ5dGVTaXplKCkgPj0gb2Zmc2V0RnJvbUZQKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNsb3QtPnNldE9mZnNldEZyb21GUChv
ZmZzZXRGcm9tRlApOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGFzc2lnbihTdGFja1Ns
b3QqIHNsb3QsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBp
ZiAoYXR0ZW1wdEFzc2lnbm1lbnQoc2xvdCwgLXNsb3QtPmJ5dGVTaXplKCksIG90aGVyU2xvdHMp
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTTG90IDogb3Ro
ZXJTbG90cykgeworICAgICAgICBpZiAob3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKQorICAgICAg
ICAgICAgJiYgYXR0ZW1wdEFzc2lnbm1lbnQob3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSAtIHNs
b3QtPmJ5dGVTaXplKCkpKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQor
Cit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUoY29kZSwgImFsbG9jYXRlU3RhY2siKTsKKworICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0
aGUgbG9ja2VkIHNsb3RzIGluIG9yZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0
aG0gdG8gYWxsb3cgZm9yCisgICAgLy8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJl
aW5nIGFzc2lnbmVkIGZyYW1lIG9mZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCisgICAg
QVNTRVJUKCFjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWdu
ZWRMb2NrZWRTdGFja1Nsb3RzOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBsb2NrZWRTdGFja1Ns
b3RzV29ya2xpc3Q7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMo
KSkgeworICAgICAgICBzd2l0Y2ggKHNsb3QtPmtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNr
U2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkK
KyAgICAgICAgICAgICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvY2tlZFN0YWNrU2xvdHMuYXBwZW5k
KHNsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tTbG90S2luZDo6
QW5vbnltb3VzOgorICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gQXMgYSBtYXR0ZXIgb2Ygc2FuaXR5LCB1bmFzc2lnbiB0aGlzLiBNYXli
ZSBpdCB3b3VsZCBiZSBnb29kIHRvIGV2ZW4gaGF2ZSBhCisgICAgICAgICAgICAgICAgLy8gdmFs
aWRhdGlvbiBydWxlIHRoYXQgdGhpcyBjYW5ub3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIHNs
b3QtPnNldE9mZnNldEZyb21GUCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorICAgIC8vIFRoaXMgaXMgYSBmYWlybHkgZXhwZW5zaXZlIGxv
b3AsIGJ1dCBpdCdzIE9LIGJlY2F1c2Ugd2UnbGwgdXN1YWxseSBvbmx5IGhhdmUgYSBoYW5kZnVs
IG9mCisgICAgLy8gbG9ja2VkIHN0YWNrIHNsb3RzLgorICAgIHdoaWxlICghbG9ja2VkU3RhY2tT
bG90c1dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBsb2Nr
ZWRTdGFja1Nsb3RzV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgYXNzaWduKHNsb3QsIGFz
c2lnbmVkTG9ja2VkU3RhY2tTbG90cyk7CisgICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90
cy5hcHBlbmQoc2xvdCk7CisgICAgfQorCisgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgYW5vbnlt
b3VzIHNsb3RzLiBOb3RlIHRoYXQgdGhlb3JldGljYWxseSB3ZSBzaG91bGQgZG8gYW4gZXNjYXBl
IGFuYWx5c2lzCisgICAgLy8gaGVyZS4gQnV0LCBjdXJyZW50bHkgQWlyIGRvZXNuJ3Qgc3VwcG9y
dCBlc2NhcGluZyBhIFN0YWNrU2xvdCEKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGVz
Y2FwaW5nIGEgU3RhY2tTbG90IGFuZCBhZGQgZXNjYXBlIGFuYWx5c2lzIHRvIGFsbG9jYXRlU3Rh
Y2soKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
NDMwCisKKyAgICBhdXRvIGlzUmVsZXZhbnQgPSBbXSAoY29uc3QgQXJnJiBhcmcpIC0+IGJvb2wg
eworICAgICAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAmJiBhcmcuc3RhY2tTbG90KCktPmtpbmQo
KSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM7CisgICAgfTsKKworICAgIExpdmVuZXNzPEFy
Zz4gbGl2ZW5lc3MoY29kZSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNr
U2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3Qq
PiBzbG90czsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAg
IExpdmVuZXNzPEFyZz46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKwor
ICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAoKSB7CisgICAgICAgICAgICAvLyBGb3JtIGEg
Y2xpcXVlIG9mIHN0YWNrIHNsb3RzIHRoYXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0
IG9mIHN0YWNrIHNsb3RzCisgICAgICAgICAgICAvLyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4K
KyAgICAgICAgICAgIHNsb3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6
IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZW1ldmFudChhcmcp
KQorICAgICAgICAgICAgICAgICAgICBzbG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbG90cy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBzbG90c1tp
XTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNsb3RzLnNp
emUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIgPSBzbG90
c1tpXTsKKworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIGZpcnN0ID0gb3V0ZXI7Cisg
ICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2Vjb25kID0gaW5uZXI7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChmaXJzdC0+aW5kZXgoKSA+IHNlY29uZC0+aW5kZXgoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChmaXJzdCwgc2Vjb25kKTsKKworICAgICAgICAgICAg
ICAgICAgICBpbnRlcmZlcmVuY2VbZmlyc3RdLmFkZChzZWNvbmQpOworICAgICAgICAgICAgICAg
ICAgICBpbnRlcmZlcmVuY2Vbc2Vjb25kXS5hZGQoZmlyc3QpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGludGVyZmVyZShsb2NhbENhbGMu
bGl2ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxv
Y2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0
ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAgICBpbnRlcmZlcmUobG9jYWxDYWxj
LmxpdmUoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgYXNzaWduIHN0YWNr
IGxvY2F0aW9ucy4gQXQgaXRzIGhlYXJ0IHRoaXMgYWxnb3JpdGhtIGlzIGp1c3QgZmlyc3QtZml0
LiBGb3IgZWFjaAorICAgIC8vIFN0YWNrU2xvdCB3ZSBqdXN0IHdhbnQgdG8gZmluZCB0aGUgb2Zm
c2V0RnJvbUZQIHRoYXQgaXMgY2xvc2VzdCB0byB6ZXJvIHdoaWxlIGVuc3VyaW5nIG5vCisgICAg
Ly8gb3ZlcmxhcCB3aXRoIG90aGVyIFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdpdGgu
CisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IGZyYW1lU2l6ZUZvckxvY2tl
ZDsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90czsKKyAgICBmb3IgKFN0YWNrU2xv
dCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGlmIChzbG90LT5vZmZzZXRG
cm9tRlAoKSkgeworICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZzZXQuCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFRoZSBwb3NzaWJs
ZSBmaXJzdCBmaXQgb2Zmc2V0cyBhcmU6CisgICAgICAgIC8vIC0gZnJhbWVTaXplRm9yTG9ja2Vk
IC0gc2xvdC0+Ynl0ZVNpemUoKQorICAgICAgICAvLyAtIGZvciBhbGwgc2xvdDIgaW4gaW50ZXJm
ZXJlbmNlW3Nsb3RdLCBzbG90Mi0+b2Zmc2V0RnJvbUZQKCkgLSBzbG90LT5ieXRlU2l6ZSgpLgor
ICAgICAgICAvLyBXZSBuZWVkIHRvIGZpbmQgb25lIG9mIHRob3NlIHRoYXQgZG9lc24ndCBpbnRl
cmZlcmUgd2l0aCBhbnlvbmUuCisKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiYgaW50ZXJm
ZXJpbmdTbG90cyA9IGludGVyZmVyZW5jZVtzbG90XTsKKyAgICAgICAgb3RoZXJTbG90cy5yZXNp
emUoYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKSArIGludGVyZmVyaW5nU2xvdHMuc2l6
ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG90aGVyU2xvdHNbaV0gPSBhc3NpZ25l
ZExvY2tlZFN0YWNrU2xvdHNbaV07CisgICAgICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGFzc2ln
bmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhl
clNsb3QgOiBpbnRlcmZlcmluZ1Nsb3RzKQorICAgICAgICAgICAgb3RoZXJTbG90c1tuZXh0SW5k
ZXgrK10gPSBvdGhlclNsb3Q7CisKKyAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOwor
ICAgIH0KKworICAgIC8vIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3RhY2sgd2UncmUgdXNpbmcgZm9y
IHN0YWNrIHNsb3RzLgorICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSAwOwor
ICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgIGZy
YW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBzdGQ6Om1heChmcmFtZVNpemVGb3JTdGFja1Nsb3RzLCAt
c2xvdC0+b2Zmc2V0RnJvbUZQKCkpOworCisgICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhv
dyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVlZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAg
ICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJn
LmlzQ2FsbEFyZygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3Vt
ZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKKyAg
ICAgICAgICAgICAgICAgICAgLy8gc3VjaCBhbiBhd2Vzb21lIGFzc3VtcHRpb24uCisgICAgICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwNDU0CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0g
MCk7CisgICAgICAgICAgICAgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShhcmcu
b2Zmc2V0KCkgKyA4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBjb2RlLnNldEZyYW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3Rz
ICsgY29kZS5jYWxsQXJnQXJlYVNpemUoKSk7CisKKyAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0g
dGhlIGNvZGUgdG8gdXNlIEFkZHIncyBpbnN0ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEg
bG9zc2xlc3MKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBT
dGFja1Nsb3RzIGFycmF5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggU3RhY2tTbG90IGFueQorICAgIC8v
IG9mZnNldC1mcm9tLUZQIHJlZmVycyB0by4KKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAg
ICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAo
YXJnLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAg
ICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zm
c2V0KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAg
ICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9m
ZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJBbGxvY2F0ZVN0YWNrX2gKKyNkZWZpbmUgQWlyQWxsb2Nh
dGVTdGFja19oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFj
ZXMgb24gdGhlIHN0YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGlu
ZGV4CisvLyBvcmRlciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3Qg
Zml0LgorCit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJBbGxvY2F0ZVN0YWNrX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBcmcuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEFyZzo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJ
bnZhbGlkOgorICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBUbXA6CisgICAgICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEltbToKKyAgICAgICAgb3V0LnByaW50KCIkIiwgbV9vZmZzZXQpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAgb3V0LnByaW50ZigiJDB4JWxs
eCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkcjoKKyAgICAgICAg
aWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAg
b3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
bmRleDoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLCIsIGluZGV4KCkpOworICAg
ICAgICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUo
KSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFjazoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNl
dCk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgaWYgKG9mZnNl
dCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCk7CisgICAgICAgIG91dC5wcmludCgi
KGNhbGxBcmcpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbENvbmQ6CisgICAgICAg
IG91dC5wcmludChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIG91dC5wcmludChhc1Jlc3VsdENvbmRpdGlvbigpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50KHBv
aW50ZXJEdW1wKHNwZWNpYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2lu
Y2x1ZGUgIkFpclRtcC5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBT
dGFja1Nsb3Q7CisKKy8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVy
c2UgYmVjYXVzZSB3ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8v
IEluc3QoLi4uLCBBcmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xh
c3MgQXJnIHsKK3B1YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlv
bmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBl
bnVtIEtpbmQgOiBpbnQ4X3QgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBUbXAsCisgICAg
ICAgIEltbSwKKyAgICAgICAgSW1tNjQsCisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAor
ICAgICAgICBDYWxsQXJnLAorICAgICAgICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAg
ICAgUmVzQ29uZCwKKyAgICAgICAgU3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBp
bnQ4X3QgeworICAgICAgICBVc2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAg
fTsKKworICAgIGVudW0gVHlwZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAor
ICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOworCisgICAg
c3RhdGljIGJvb2wgaXNVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xl
KSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNl
RGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBz
dGF0aWMgVHlwZSB0eXBlRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgSW50MzI6
CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNh
c2UgRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIEZQOworICAgICAgICB9CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gR1A7CisgICAgfQorCisgICAgQXJn
KCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorCisgICAgQXJnKEFp
cjo6VG1wIHRtcCkKKyAgICAgICAgOiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFzZSh0bXAp
CisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUpCisgICAg
eworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tOworICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgQXJnIGltbTY0KGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAgICAgICBy
ZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBzdGF0aWMgQXJnIGFkZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQgPSAwKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBi
YXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZhbHVlLCBp
bnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2Vf
Y2FzdDxpbnRwdHJfdD4odmFsdWUpOworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9mZnNldDsg
Ly8gSSBrbm93LCB5dWNrLgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0
YXRpYyBBcmcgY2FsbEFyZyhpbnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1bHQubV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAg
Y2FzZSA0OgorICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHN0YXRpYyB1bnNpZ25lZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0
dXJuIDA7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBj
YXNlIDQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAg
ICAgcmV0dXJuIDM7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAg
c3RhdGljIEFyZyBpbmRleChBaXI6OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5zaWduZWQg
c2NhbGUgPSAxLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFz
ZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAgQVNTRVJU
KGlzVmFsaWRTY2FsZShzY2FsZSkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gSW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAg
ICByZXN1bHQubV9pbmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IHN0YXRp
Y19jYXN0PGludDMyX3Q+KHNjYWxlKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVsQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgewor
ICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVsQ29uZDsKKyAg
ICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0
Q29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBSZXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25k
aXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBz
cGVjaWFsKEFpcjo6U3BlY2lhbCogc3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQubV9vZmZz
ZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CisgICAg
ICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2Jhc2Ug
PT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgK
KyAgICAgICAgICAgICYmIG1fc2NhbGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQga2luZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAgIGJvb2wg
aXNUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7CisgICAg
fQorCisgICAgYm9vbCBpc0ltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgp
ID09IEltbTsKKyAgICB9CisKKyAgICBib29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBJbW02NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAg
Ym9vbCBpc1N0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3Rh
Y2s7CisgICAgfQorCisgICAgYm9vbCBpc0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBDYWxsQXJnOworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAg
IGJvb2wgaXNSZWxDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
UmVsQ29uZDsKKyAgICB9CisKKyAgICBib29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4ga2luZCgpID09IFJlc0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1NwZWNp
YWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOworICAg
IH0KKworICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNU
bXAoKSB8fCBpc1N0YWNrKCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFz
ZTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gSW1tIHx8IGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBt
X29mZnNldDsKKyAgICB9CisKKyAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihtX29mZnNldCkpOworICAgIH0KKwor
ICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAg
fQorCisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChr
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAg
ICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoa2luZCgpID09IFN0YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludDMyX3Q+KG1fc2NhbGUpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2lu
ZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNr
U2xvdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQor
CisgICAgQWlyOjpUbXAgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2ln
bmVkIHNjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgp
OworICAgICAgICByZXR1cm4gbV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2Fs
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAg
fQorCisgICAgQWlyOjpTcGVjaWFsKiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gU3BlY2lhbCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWly
OjpTcGVjaWFsKj4obV9vZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQor
CisgICAgYm9vbCBpc0ZQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgp
ICYmIHRtcCgpLmlzRlAoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBB
cmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisg
ICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6
CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBj
YXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25k
OgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICBjYXNl
IEludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRo
YXQgcmVxdWlyZXMgYSBGUCB2YWx1ZS4KKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2Ug
UmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6Cisg
ICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
Y2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIEJhc2U6CisgICAg
ICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2Ug
SW1tNjQ6IC8vIFllcywgd2UgYWxsb3cgSW1tNjQgYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1
c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQVG1wKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhhc1R5cGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgU3Bl
Y2lhbDoKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICAvLyBUaGUgdHlwZSBpcyBhbWJpZ3VvdXMgZm9yIHNvbWUgYXJnIGtpbmRzLiBD
YWxsIHdpdGggY2FyZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzR1AoKSA/IEdQIDogRlA7CisgICAgfQorCisgICAgYm9vbCBpc1R5cGUoVHlwZSB0eXBl
KSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR1A6
CisgICAgICAgICAgICByZXR1cm4gaXNHUCgpOworICAgICAgICBjYXNlIEZQOgorICAgICAgICAg
ICAgcmV0dXJuIGlzRlAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKKyAg
ICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAo
KS5ncHIoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAgfQorCisgICAgRlBSUmVnIGZw
cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnByKCk7CisgICAgfQorICAg
IAorICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkg
JiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcElu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncFRtcEluZGV4KCk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS50bXBJbmRleCgpOworICAgIH0K
KworICAgIEFyZyB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmICghaGFzT2Zmc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7
CisgICAgICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0KCksIGFkZGl0aW9uYWxP
ZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICByZXR1cm4gYWRkcihiYXNlKCks
IG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAg
ICAgICAgICByZXR1cm4gc3RhY2soc3RhY2tTbG90KCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9m
ZnNldCk7CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJldHVybiBjYWxsQXJn
KG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAg
ICAgICAgICByZXR1cm4gaW5kZXgoYmFzZSgpLCBpbmRleCgpLCBzY2FsZSgpLCBvZmZzZXQoKSAr
IGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBm
b3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNhc2UgQWRkcjoKKyAg
ICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgZnVu
Y3RvcihtX2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHNtYXJ0
IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1
bGUgd2lsbCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFt
cGxlLCB0aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQorICAgIC8vCisgICAg
Ly8gVGhpcyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwgVHlwZSBhcmdUeXBl
LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQp
IHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgYXJnUm9s
ZSwgYXJnVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBZGRyOgorICAg
ICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7
CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1dDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0ZWRJbW0zMigpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7
CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTY0IGFzVHJ1c3RlZEltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0lt
bTY0KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChwb2lu
dGVyVmFsdWUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyBhc0FkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQWRkcigpKTsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5ncHIoKSwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4IGFzQmFzZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0lu
ZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAg
ICAgICAgIG1fYmFzZS5ncHIoKSwgbV9pbmRleC5ncHIoKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlPihsb2dTY2FsZSgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMy
X3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc1JlbENvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIE1hY3Jv
QXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gYXNSZXN1bHRDb25kaXRpb24oKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzUmVzQ29uZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2
NF90IG1fb2Zmc2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsgSW52YWxpZCB9OworICAgIGlu
dDMyX3QgbV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAg
bV9pbmRleDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEFpckFyZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCit2b2lkIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJs
b2NrKQoreworICAgIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQg
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAg
QjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2Nr
OjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7
CisgICAgQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQg
QmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjog
OyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0
JiBpbnN0IDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOwor
fQorCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVl
bmN5KQorICAgIDogbV9pbmRleChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkK
K3sKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFpckJhc2ljQmxv
Y2tfaAorCisjaW5jbHVkZSAiQWlyRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQWlySW5z
dC5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9O
b25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKK2NsYXNz
IEluc2VydGlvblNldDsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiIyI7CisKKyAgICB0eXBlZGVm
IFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwg
Mj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywg
Mj4gU3VjY2Vzc29yTGlzdDsKKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJl
dHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyBy
ZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpjb25z
dF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgY29uc3Qg
SW5zdCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQor
ICAgIEluc3QmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKwor
ICAgIGNvbnN0IEluc3QmIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQor
ICAgIEluc3QmIGxhc3QoKSB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAg
eworICAgICAgICBtX2luc3RzLmFwcGVuZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVu
ZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVu
ZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisK
KyAgICAvLyBUaGUgIjAiIGNhc2UgaXMgdGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1w
cywgc28gdGhlICJ0aGVuIiBjYXNlLiBUaGUgIjEiIGNhc2UgaXMgdGhlCisgICAgLy8gImVsc2Ui
IGNhc2UsIGFuZCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZmFsbC10aHJvdWdoIG9mIGEgY29u
ZGl0aW9uYWwgYnJhbmNoLgorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJl
dHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nv
cih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQor
ICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBTdWNjZXNzb3JM
aXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorCisgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JC
bG9ja3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNC
bG9jaywgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29y
Q29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNz
b3JCbG9ja3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rp
b248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBt
X3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAg
QmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRl
Y2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIFByZWRlY2Vz
c29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9
CisKKyAgICB2b2lkIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIHJlbW92
ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNzIEluc2Vy
dGlvblNldDsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJl
cXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsK
KyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9w
cmVkZWNlc3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJh
c2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9j
ayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9i
bG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAg
IEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAo
QmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9j
ayk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFp
ckJhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckND
YWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6
OkNDYWxsU3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OmFs
bFJlZ2lzdGVycygpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNl
dDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhj
bHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKworQ0NhbGxTcGVj
aWFsOjp+Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmZvckVhY2hB
cmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4m
IGNhbGxiYWNrKQoreworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpVc2UsIEFyZzo6
R1ApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBxdWVyeSB0aGUg
YXJnJ3MgdHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdlCisgICAgICAg
IC8vIHJlcXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgICAg
IGNhbGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tpXS50eXBlKCkpOwor
ICAgIH0KK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAg
ICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAg
ICAgIGlmIChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYgKHNpemVvZih2
b2lkKikgPT0gOCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY2FzZSBBcmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6U3Rh
Y2s6CisgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5p
c0dQKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7
IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbaV0u
aXNSZWcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5zdC5h
cmdzW2ldID09IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuICBmYWxz
ZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1p
dHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEgY2FuIGJl
IGEgc3RhY2sgYWRkcmVzcyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDYWxs
U3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQor
eworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBp
bnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIHN3aXRj
aCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBB
cmc6OkltbVB0cjoKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGluc3QuYXJnc1sxXS5wb2ludGVyVmFsdWUoKSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAg
IGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJn
OjpUbXA6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0u
YXNBZGRyZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxT
cGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJl
Z3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6
OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
ZnVuY3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5lIEFpckNDYWxsU3Bl
Y2lhbF9oCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworLy8gVXNlIHRoaXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBp
cyBvZiBjb3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3Bl
Y2lhbCBvYmplY3QuIEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRy
LCBhIHJlZ2lzdGVyLCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBq
dXN0IHRoZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3Ig
YXJndW1lbnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdy
dW50IHdvcmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSBy
ZWFzb24gd2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1l
bnRzIHRvIGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisv
LyB0aGF0IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2lj
YWxseSByZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNh
dXNlIGlmIHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBh
cHBlYXIgdG8gYmUgbGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9s
b2d1ZSwgd2hpY2hldmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDog
cHVibGljIFNwZWNpYWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2Fs
bFNwZWNpYWwoKTsKKworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFz
cyBhcmd1bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90
CisgICAgLy8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4g
QnkgdGhlIHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRo
aXMgc3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBH
UFJSZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMC4KKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVh
Y2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJy
aWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVy
cmlkZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVy
U2V0Jikgb3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBD
Q2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJl
Z2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9p
ZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1
bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVn
aXN0ZXJTZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorCisjaW5jbHVkZSAiQjNC
YXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJDQ2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKK3sK
K30KKworQ29kZTo6fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhk
b3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9j
ayhuZXcgQmFzaWNCbG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2lj
QmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1v
dmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdGFja1Nsb3QqIENvZGU6OmFk
ZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Ns
b3RWYWx1ZSogdmFsdWUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChu
ZXcgU3RhY2tTbG90KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1ZSkp
OworICAgIFN0YWNrU2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKKyAgICBtX3N0YWNrU2xvdHMu
YXBwZW5kKFdURjo6bW92ZShzbG90KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lh
bCogQ29kZTo6YWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKK3sK
KyAgICBtX3NwZWNpYWxzLmFwcGVuZChXVEY6Om1vdmUoc3BlY2lhbCkpOworfQorCitDQ2FsbFNw
ZWNpYWwqIENvZGU6OmNDYWxsU3BlY2lhbCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkg
eworICAgICAgICBtX2NDYWxsU3BlY2lhbCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAor
ICAgICAgICAgICAgYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkp
OworICAgIH0KKworICAgIHJldHVybiBtX2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpy
ZXNldFJlYWNoYWJpbGl0eSgpCit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tz
KTsKK30KKwordm9pZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1
bXAoYmxvY2spKTsKKyAgICBpZiAobnVtU3RhY2tTbG90cygpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2sgc2xvdHM6XG4iKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFj
a1Nsb3RzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzbG90KSwg
IlxuIik7CisgICAgfQorICAgIGlmIChudW1TcGVjaWFscygpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogc3BlY2lh
bHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAi
XG4iKTsKKyAgICB9CisgICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwg
IlxuIik7CisgICAgb3V0LnByaW50KCJDYWxsIGFyZyBhcmVhIHNpemU6ICIsIG1fY2FsbEFyZ0Fy
ZWFTaXplLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgbV9jYWxsZWVT
YXZlUmVnaXN0ZXJzLCAiXG4iKTsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZEZpcnN0QmxvY2tJ
bmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICB3aGlsZSAoaW5kZXggPCBzaXplKCkg
JiYgIWF0KGluZGV4KSkKKyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisK
K3Vuc2lnbmVkIENvZGU6OmZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCArIDEpOworfQorCitCYXNp
Y0Jsb2NrKiBDb2RlOjpmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorewor
ICAgIHJldHVybiBhdChmaW5kTmV4dEJsb2NrSW5kZXgoYmxvY2stPmluZGV4KCkpKTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjk1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ29k
ZV9oCisjZGVmaW5lIEFpckNvZGVfaAorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKyNpbmNsdWRl
ICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQ0NhbGxTcGVjaWFsOworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2Ug
QWlyIHsKKworLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUg
bWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5l
cmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1C
IG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFz
cyBDb2RlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAg
IEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIFN0
YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBT
dGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3Rk
Ojp1bmlxdWVfcHRyPFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91
IG5lZWQgdG8gbWFrZSBhIEMgY2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxsU3BlY2lhbCgp
OworCisgICAgVG1wIG5ld1RtcChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gVG1w
OjpncFRtcEZvckluZGV4KG1fbnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFyZzo6RlA6Cisg
ICAgICAgICAgICByZXR1cm4gVG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBzKyspOworICAg
ICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAg
ICAgICAgICByZXR1cm4gbV9udW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAg
ICAgICAgIHJldHVybiBtX251bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2ln
bmVkIGNhbGxBcmdBcmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9
CisKKyAgICAvLyBZb3UgY2FuIGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHRvIGZv
cmNlIGEgbWluaW11bSBjYWxsIGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1ZXN0Q2FsbEFy
Z0FyZWFTaXplKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxBcmdBcmVhU2l6
ZSA9IHN0ZDo6bWF4KG1fY2FsbEFyZ0FyZWFTaXplLCBzaXplKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBmcmFtZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8g
T25seSBwaGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0
aGlzLiBDdXJyZW50bHksIG9ubHkKKyAgICAvLyBBaXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRo
aXMuCisgICAgdm9pZCBzZXRGcmFtZVNpemUodW5zaWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAg
ICAgICAgbV9mcmFtZVNpemUgPSBmcmFtZVNpemU7CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QmIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdp
c3RlcnM7IH0KKworICAgIC8vIFJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVu
cmVhY2hhYmxlIGJsb2Nrcy4KKyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9j
ayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9
CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcp
ICE9IG51bGwgYW5kIGluZGV4JyA+PSBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kRmlyc3RCbG9j
a0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVz
dCBpbmRleCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID4gaW5kZXgu
CisgICAgdW5zaWduZWQgZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsK
KworICAgIEJhc2ljQmxvY2sqIGZpbmROZXh0QmxvY2soQmFzaWNCbG9jayopIGNvbnN0OworCisg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAg
ICAgICAgICAgIDogbV9jb2RlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoQ29kZSYgY29kZSwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29kZSgmY29kZSkKKyAgICAgICAgICAgICwgbV9p
bmRleChtX2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgpKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jb2RlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9
IG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9p
bmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAg
ICAgICBDb2RlKiBtX2NvZGU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKwor
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9
CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIG51bUJs
b2NrcygpKTsgfQorCisgICAgY2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24geworICAgIHB1Ymxp
YzoKKyAgICAgICAgU3RhY2tTbG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAg
ICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzLnNpemUoKTsg
fQorICAgICAgICBTdGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2NvZGUubV9zdGFja1Nsb3RzW2ldLmdldCgpOyB9CisgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0
b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAg
ICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaXRlcmF0b3IoY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVu
c2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9u
KQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3Rh
Y2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBjb25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9u
IHN0YWNrU2xvdHMoKSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVjdGlvbigqdGhpcyk7
IH0KKyAgICAKKyAgICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAg
ICAgICAgU3BlY2lhbHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6
IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6ZSgpOyB9CisgICAgICAg
IFNwZWNpYWwqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVj
aWFsc1tpXS5nZXQoKTsgfQorICAgICAgICBTcGVjaWFsKiBvcGVyYXRvcltdKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRv
ciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihj
b25zdCBTcGVjaWFsc0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgU3BlY2lhbCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXgg
PT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiogbV9j
b2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDAp
OyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMs
IHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsK
KyAgICB9OworCisgICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1
cm4gU3BlY2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIENDYWxsU3BlY2lhbCogbV9jQ2Fs
bFNwZWNpYWwgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07Cisg
ICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9mcmFtZVNpemUg
eyAwIH07CisgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUgeyAwIH07CisgICAgUmVnaXN0
ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworfTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckZyZXF1ZW50ZWRCbG9ja19o
CisjZGVmaW5lIEFpckZyZXF1ZW50ZWRCbG9ja19oCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVk
QmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJHZW5l
cmF0ZS5oIgorCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgorI2luY2x1ZGUgIkFpclNw
aWxsRXZlcnl0aGluZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjND
b21tb24uaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUs
IENDYWxsSGVscGVycyYgaml0KQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAg
ICAgIHZhbGlkYXRlKGNvZGUsICJpbml0aWFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkp
IHsKKyAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhj
b2RlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0
aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXph
dGlvbnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDQ1NgorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBoYXZlIGEgcmVhbCByZWdpc3Rl
ciBhbGxvY2F0b3IuIFRoZW4sIHdlIGNvdWxkIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKQorICAgIC8v
IGluIHBsYWNlIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3Igb25seSBmb3IgdGVzdGluZy4KKyAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1
NworICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKKworICAgIC8vIFByaW9yIHRvIHRoaXMgcG9p
bnQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBl
eHBsaWNpdC4gSXQgYWxzbworICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2gg
Y2FsbGVlLXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgorICAgIGhhbmRsZUNhbGxl
ZVNhdmVzKGNvZGUpOworCisgICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcg
QXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcwor
ICAgIC8vIHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3Vs
ZCBiZSBwcmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQorICAgIC8vIHNob3VsZG4n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgorICAgIGFsbG9jYXRlU3RhY2so
Y29kZSk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBoYXZlIGEgY29kZSBsYXlv
dXQgb3B0aW1pemF0aW9uIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ3OAorCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAg
ICAgdmFsaWRhdGUoY29kZSwgImZpbmFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsK
KyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRh
dGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJhdGUgY29kZS4K
KyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuYWRkUHRyKFRydXN0ZWRJ
bW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisKKyAgICBHZW5lcmF0aW9uQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuY29k
ZSA9IGNvZGU7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4g
YmxvY2tMYWJlbHMoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxs
SGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworCisgICAgYXV0byBs
aW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7
CisgICAgICAgIGlmIChibG9ja0xhYmVsc1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAgICAgICAgICAg
IGp1bXAubGlua1RvKGJsb2NrTGFiZWxzW3RhcmdldF0sICZqaXQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1w
KTsKKyAgICB9OworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAg
ICAgYmxvY2tKdW1wc1tibG9ja10ubGluaygmaml0KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5z
aXplKCkgPj0gMSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6
ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGlu
c3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVt
cCwgIWp1bXAuaXNTZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChibG9j
ay0+bGFzdCgpLm9wY29kZSgpID09IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNz
b3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlKCkgPT0gUmV0KSB7Cisg
ICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xv
Z3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bworICAgICAgICAgICAgLy8gaGF2ZSB0
aGlzIG92ZXJyaWRlLgorICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7Cisg
ICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
ICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+bGFzdCgp
LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9j
aykKKyAgICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAg
ICAgIHN3aXRjaCAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICBBU1NFUlQoIWp1bXAuaXNTZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3VjY2Vzc29yQmxv
Y2soMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAg
IGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAgICAgIGlmIChi
bG9jay0+c3VjY2Vzc29yQmxvY2soMSkgIT0gY29kZS5maW5kTmV4dEJsb2NrKGJsb2NrKSkKKyAg
ICAgICAgICAgICAgICBsaW5rKGppdC5qdW1wKCksIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygxKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQYXRocykKKyAg
ICAgICAgbGF0ZVBhdGgtPnJ1bihqaXQsIGNvbnRleHQpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRl
X2gKKyNkZWZpbmUgQWlyR2VuZXJhdGVfaAorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0Nh
bGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29k
ZTsKKworLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFj
ayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CisvLyByZWdpc3RlciBh
bGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLCBhbmQgdGhlbiBnZW5lcmF0
ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuCisvLyBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5v
dGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBp
dCBpcworLy8gZ2VuZXJhdGluZy4KK3ZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYp
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJHZW5l
cmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlv
bkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKyNkZWZpbmUgQWlyR2VuZXJhdGlvbkNvbnRl
eHRfaAorCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQg
eworICAgIHR5cGVkZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVy
YXRpb25Db250ZXh0Jik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+
IExhdGVQYXRoOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKKyAg
ICBDb2RlKiBjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5j
bHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgaGFu
ZGxlQ2FsbGVlU2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
Y29kZSwgImhhbmRsZUNhbGxlZVNhdmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1c2VkQ2FsbGVl
U2F2ZXM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBm
b3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZh
c3QoCisgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAg
ICAvLyBBdCBmaXJzdCB3ZSBqdXN0IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAgICAgICAgICAg
ICAgICAgICB1c2VkQ2FsbGVlU2F2ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRvIHJlYWxseSBn
ZXQgdGhlIGNhbGxlZSBzYXZlcy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVyKFJlZ2lzdGVy
U2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0
ZXJzKCkgPSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworCisgICAgc2l6
ZV90IGJ5dGVTaXplID0gMDsKKyAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5mb3JFYWNo
KAorICAgICAgICBbJl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSB7CisgICAgICAg
ICAgICBieXRlU2l6ZSA9IHN0ZDo6bWF4KC1lbnRyeS5vZmZzZXQoKSwgYnl0ZVNpemUpOworICAg
ICAgICB9KTsKKworICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFja1Nsb3Qo
Ynl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgLy8gVGhpcyBpcyBhIGJpdCB3
ZWlyZCBzaW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0YWNr
IHNsb3QgdG8gdGhpcworICAgIC8vIGFyZWEuCisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9t
RlAoLWJ5dGVTaXplKTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0
T2Zmc2V0JiBlbnRyeSkgeworICAgICAgICByZXR1cm4gQXJnOjpTdGFjayhzYXZlc0FyZWEsIGVu
dHJ5Lm9mZnNldCgpICsgYnl0ZVNpemUpOworICAgIH07CisKKyAgICBJbnNlcnRpb25TZXQgaW5z
ZXJ0aW9uU2V0KGNvZGUpOworICAgIAorICAgIC8vIEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBp
biB0aGUgcHJvbG9ndWUuCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFjaCgK
KyAgICAgICAgWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgeworICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAwLCBlbnRyeS5yZWcoKS5p
c0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRy
eSkpOworICAgICAgICB9KTsKKyAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKwor
ICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9yZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxh
c3QoKTsKKyAgICAgICAgaWYgKGxhc3Qub3Bjb2RlKCkgIT0gUmV0KQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFjaCgKKyAg
ICAgICAgICAgIFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIHsKKyAgICAgICAg
ICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICBibG9jay0+
c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLAorICAg
ICAgICAgICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNh
dmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRsZUNhbGxlZVNhdmVz
X2gKKyNkZWZpbmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgcGhh
c2UgaWRlbnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZl
L3Jlc3RvcmUgdGhlbSBpbiB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJ
dCdzIGEgbWFuZGF0b3J5IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBt
YWtlIHRoaXMgbW9yZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1v
cmUKKy8vIHBvd2VyZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5rIHdyYXBwaW5nOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4CisvLyBXZSBzaG91bGQg
bWFrZSB0aGlzIGludGVyYWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUm
KTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySGFu
ZGxlQ2FsbGVlU2F2ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaW5j
bHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sq
IGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5tX2luc3RzLCBtX2luc2Vy
dGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisjZGVmaW5l
IEFpckluc2VydGlvblNldF9oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3Rm
L0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xh
c3MgQ29kZTsKKwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247CisKK2Ns
YXNzIEluc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUmIGNvZGUp
CisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUmIGNvZGUo
KSB7IHJldHVybiBtX2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9p
ZCBhcHBlbmRJbnNlcnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0
aW9ucy5hcHBlbmQoc3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwg
SW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGlu
ZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwg
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRl
eCwgSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQor
CisgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBt
X2NvZGU7CisgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0
LmgiCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJ
bnN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29k
ZSwgIiAiLCBsaXN0RHVtcChhcmdzKSwgIiAgOyAiLCAqb3JpZ2luKTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVm
aW5lIEFpckluc3RfaAorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyT3Bjb2Rl
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVy
YXRpb25Db250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0
b3I8QXJnLCAzPiBBcmdMaXN0OworCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3Jp
Z2luKQorICAgICAgICA6IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkK
KyAgICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAg
ICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7Cisg
ICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdM
aXN0JiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3Jp
Z2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAg
ICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMp
CisgICAgICAgIDogYXJncyhXVEY6Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4o
b3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8v
IE5vdGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNl
IHdlIHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIg
aXMgbWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0
IEluc3QmIiB0aGVuIHlvdSdyZQorICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisg
ICAgLy8gVGhpcyBvbmx5IHdhbGtzIHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50
aW9uZWQsIGFuZCBpdCBkb2Vzbid0IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBl
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFz
dChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcmIGFyZyA6
IGFyZ3MpCisgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAgfQor
CisgICAgdHlwZWRlZiB2b2lkIEVhY2hBcmdDYWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6
VHlwZSk7CisgICAgCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0
eXBlKS4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9n
ZW5lcmF0b3IucmIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZv
ckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVu
Y3RvciB3aXRoICh0bXAsIHJvbGUsIHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICBmb3JFYWNoQXJnUm9sZSgKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6
Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNo
VG1wKHJvbGUsIHR5cGUsIGZ1bmN0b3IpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAg
Ly8gVGhpbmcgY2FuIGJlIGVpdGhlciBBcmcgb3IgVG1wLgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
IFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhh
cyBhIFNwZWNpYWwqLiBUaGlzIHVubG9ja3Mgc29tZSBleHRyYSBmdW5jdGlvbmFsaXR5LgorICAg
IGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0OworCisgICAgLy8gUmVwb3J0cyBhbnkgYWRkaXRpb25h
bCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVm
ZmljaWVuY3ksCisgICAgLy8gZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNT
cGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2Ji
ZXJlZFJlZ3MoKTsKKworICAgIC8vIFVzZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMg
YXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQor
ICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdv
cmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgdm9pZCByZXBvcnRVc2VkUmVn
aXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7CisKKyAgICAvLyBJcyB0aGlzIGluc3RydWN0aW9u
IGluIG9uZSBvZiB0aGUgdmFsaWQgZm9ybXMgcmlnaHQgbm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1
dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGlz
VmFsaWRGb3JtKCk7CisKKyAgICAvLyBBc3N1bWluZyB0aGlzIGluc3RydWN0aW9uIGlzIGluIGEg
dmFsaWQgZm9ybSByaWdodCBub3csIHdpbGwgaXQgc3RpbGwgYmUgaW4gb25lIG9mIHRoZSB2YWxp
ZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1dCBhbiBBZGRyIHJlZmVyZW5jaW5nIHRoZSBzdGFjayAo
b3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFyZywgb2YgY291cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZl
biBpbmRleD8gU3BpbGxpbmcgdXNlcyB0aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRleCB0
byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNwaWxsaW5nOworICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwg
aXQgY2FsbHMgdGhpcyB0byBzZWUgaWYgaXQgY2FuIHJlcGxhY2UgdGhlIEFyZzo6VG1wIHdpdGgg
YW4gQXJnOjpBZGRyLiBJZiBpdAorICAgIC8vIGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQg
Y2FsbHMgdGhhdCBBcmcncyBmb3JFYWNoVG1wIHRvIGRvIGEgcmVwbGFjZW1lbnQgdGhhdCB3YXku
CisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29k
ZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBhZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7
CisKKyAgICAvLyBHZW5lcmF0ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMg
aXMsIGxpa2UsIGxpdGVyYWxseSBvdXIgYmFja2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0
ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUganVtcCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3Ig
dGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRoZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZhbGwt
dGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJh
dG9yLnJiLgorICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBH
ZW5lcmF0aW9uQ29udGV4dCYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKKyAgICBBcmdMaXN0IGFyZ3M7CisgICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1
ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLgorICAgIE9wY29kZSBvcGNvZGU7Cit9OworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBBaXJJbnN0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdElubGluZXNfaAorI2Rl
ZmluZSBBaXJJbnN0SW5saW5lc19oCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAi
QWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFscy5oIgorI2luY2x1ZGUgIkIz
U3RhY2ttYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEZvckVhY2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPFRtcD4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKEluc3QmIGluc3QsIGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpbnN0LmZvckVhY2hUbXAoZnVuY3Rvcik7
CisgICAgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8QXJnPiB7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9y
KTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rv
cj4KK3ZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8
VGhpbmc+Ojpmb3JFYWNoKCp0aGlzLCBmdW5jdG9yKTsKK30KKworYm9vbCBJbnN0OjpoYXNTcGVj
aWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXJncy5zaXplKCkgJiYgYXJnc1swXS5pc1NwZWNp
YWwoKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncygp
Cit7CisgICAgQVNTRVJUKGhhc1NwZWNpYWwoKSk7CisgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lh
bCgpLT5leHRyYUNsb2JiZXJlZFJlZ3MoKnRoaXMpOworfQorCit2b2lkIEluc3Q6OnJlcG9ydFVz
ZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgQVNT
RVJUKGhhc1NwZWNpYWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdp
c3RlcnMoKnRoaXMsIHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1NoaWZ0VmFs
aWQoSW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KQorICAgIHJldHVybiBpbnN0LmFyZ3NbMF0g
PT0gVG1wKFg4NlJlZ2lzdGVyOjpjeCk7CisjZWxzZQorICAgIHJldHVybiB0cnVlOworI2VuZGlm
Cit9ICAgCisKK2lubGluZSBib29sIGlzTHNoaWZ0MzJWYWx1ZShJbnN0JiBpbnN0KQoreworICAg
IHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpckxpdmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaW5j
bHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBZb3UgY2FuIGNv
bXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVyIEFyZydzLiBJZiB5b3UgY29tcHV0ZSBv
dmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNrIGxpdmVuZXNzIGFuZCB0bXAgbGl2ZW5l
c3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNzIExpdmVuZXNzIHsKK3B1YmxpYzoK
KyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsKKyAgICAgICAgbV9saXZlQXRIZWFkLnJl
c2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2ZUF0VGFpbC5yZXNpemUoY29kZS5zaXpl
KCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IHNlZW47CisKKyAgICAgICAgYm9v
bCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNoYW5nZWQpIHsKKyAgICAgICAgICAg
IGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9
IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIExvY2FsQ2Fs
YyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
bnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCisgICAgICAgICAgICAgICAg
ICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAgICAgICAg
ICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1fbGl2ZUF0SGVhZFtibG9ja10p
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBi
bG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZlQXRUYWls
W3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbENhbGMubGl2
ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5kKCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdID0gbG9jYWxDYWxjLnRha2VMaXZl
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBIYXNoU2V0
PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKworICAgIGNvbnN0IEhhc2hT
ZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107CisgICAgfQorCisgICAgLy8gVGhpcyBj
YWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJzZS4KKyAgICBjbGFzcyBMb2NhbENhbGMg
eworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxjKExpdmVuZXNzJiBsaXZlbmVzcywgQmFz
aWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1fbGl2ZShsaXZlbmVzcy0+bGl2ZUF0VGFp
bChibG9jaykpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEhhc2hTZXQ8
VGhpbmc+JiBsaXZlKCkgY29uc3QgeyByZXR1cm4gbV9saXZlOyB9CisgICAgICAgIEhhc2hTZXQ8
VGhpbmc+JiYgdGFrZUxpdmUoKSB7IHJldHVybiBXVEY6Om1vdmUobV9saXZlKTsgfQorCisgICAg
ICAgIHZvaWQgZXhlY3V0ZShJbnN0JiBpbnN0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBG
aXJzdCBoYW5kbGUgZGVmJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAg
ICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVm
KHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShhcmcpOworICAg
ICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBOZXh0IGhhbmRsZSBjbG9iYmVyZWQg
cmVnaXN0ZXJzLgorICAgICAgICAgICAgaWYgKGluc3QuaGFzU3BlY2lhbCgpKSB7CisgICAgICAg
ICAgICAgICAgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAg
ICAgICAgICBbdGhpc10gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2
ZS5yZW1vdmUoVGhpbmcocmVnKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxl
IHVzZSdzLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAg
ICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5hZGQoYXJnKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFzaFNldDxUaGluZz4gbV9s
aXZlOworICAgIH07CisgICAgCitwcml2YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhh
c2hTZXQ8VGhpbmc+PiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFz
aFNldDxUaGluZz4+IG1fbGl2ZUF0VGFpbDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEFpckxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEzNCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIyBTeWxsYWJ1czoKKyMKKyMgUm9sZXMgYW5kIHR5cGVzOgorIyBVOkcgPT4gdXNlIG9m
IGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBn
ZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBv
ZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEg
ZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpGID0+IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVy
IG9yIHZhbHVlCisjIFVEOkYgPT4gdXNlIGFuZCBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2
YWx1ZQorIworIyBBcmd1bWVudCBraW5kczoKKyMgVG1wID0+IHRlbXBvcmFyeSBvciByZWdpc3Rl
cgorIyBJbW0gPT4gMzItYml0IGltbWVkaWF0ZSBpbnQKKyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0
CisjIEFkZHIgPT4gYWRkcmVzcyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4
ID0+IEJhc2VJbmRleCBhZGRyZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhl
IHBhcnNlciB2aWV3cyB0aGVzZSB0aGluZ3MgYXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0
aGF0IHRoZXkgZmFsbCBpbnRvIHR3byBkaXN0aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28s
IGFsdGhvdWdoIHRoaXMgZmlsZSB1c2VzIGEgcGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwg
bm9uZSBvZiB0aGUgd2hpdGVzcGFjZSBvcgorIyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVs
IHRvIHRoZSBwYXJzZXIuIEZvciBleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQy
IFU6RywgVUQ6RiBJbW0sIFRtcCBBZGRyLCBUbXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQg
a25vdyB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAg
ICAgSW1tLCBUbXAKKyMgICAgIEFkZHIsIFRtcAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1
Y3Rpb24gdGhhdCB1c2VzIGEgR1BSIG9yIGFuIGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBh
IGZsb2F0IHJlZ2lzdGVyLgorCisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBs
ZWFkaW5nIGNhcGl0YWwgKEFkZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1i
bGVyCisjIEFQSSB0aGF0IGhhcyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitOb3AK
KworQWRkMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0s
IFRtcAorICAgIEFkZHIsIFRtcAorICAgIFRtcCwgQWRkcgorCitBZGQzMiBVOkcsIFU6RywgRDpH
CisgICAgSW1tLCBUbXAsIFRtcAorCitBbmQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAg
IEltbSwgVG1wCisgICAgVG1wLCBBZGRyCisgICAgQWRkciwgVG1wCisgICAgSW1tLCBBZGRyCisK
K0xzaGlmdDMyIFU6RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisKK011bDMy
IFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisKK01vdmUgVTpHLCBEOkcK
KyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAgSW1tNjQsIFRtcAorICAgIEFkZHIsIFRt
cCBhcyBsb2FkICMgVGhpcyBtZWFucyB0aGF0ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5l
cmF0ZWQgYXMgImxvYWQiIG5vdCAibW92ZSIuCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlCisKK01v
dmVEb3VibGUgVTpGLCBEOkYKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91
YmxlCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlRG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6Rywg
RDpGCisgICAgVG1wLCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRt
cAorCitCcmFuY2hBZGQzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1w
LCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAg
IFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hNdWwz
MiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXND
b25kLCBBZGRyLCBUbXAKKworQnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAg
IFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJ
bW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAK
KworQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKworSnVt
cCAvYnJhbmNoCisKK1JldCAvdGVybWluYWwKKworQnJlYWtwb2ludCAvdGVybWluYWwKKworIyBB
aXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRl
cm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUg
dGhlIGZpcnN0IG9wZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5j
bHVkZSAiQjNDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKENvZGUmIGNvZGUsIGNvbnN0IGNo
YXIqIG5hbWUpCisgICAgOiBtX2NvZGUoY29kZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAg
IGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBi
ZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKwor
ICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUg
PSB0b0NTdHJpbmcoY29kZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAg
ICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKGNv
ZGUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQ
aGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclBoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUGhh
c2VTY29wZV9oCisjZGVmaW5lIEFpclBoYXNlU2NvcGVfaAorCisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworY2xhc3MgQ29kZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShDb2RlJiwgY29u
c3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRp
b24KKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9uYW1l
OworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQ
cmlvcml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHNJblBy
aW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBWZWN0b3I8R1BSUmVnPiogcmVzdWx0OworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAg
ICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEdQ
UlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJlZzo6YWxsR1BScygpOwor
ICAgICAgICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOwor
ICAgICAgICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdp
c3RlcnMoKSk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGFs
bCkgeworICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbCkgeworICAgICAgICAgICAgICAgIGlmIChjYWxs
ZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcu
Z3ByKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdDsK
K30KKworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAg
c3RhdGljIFZlY3RvcjxGUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFn
IG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsK
KyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8RlBSUmVnPigpOworICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgYWxsID0gUmVnOjphbGxGUFJzKCk7CisgICAgICAgICAgICBSZWdpc3RlclNl
dCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAg
ICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbCkgeworICAgICAgICAgICAgICAgIGlmICghY2FsbGVl
U2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdw
cigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IGFsbCkgewor
ICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9
KTsKKyAgICByZXR1cm4gKnJlc3VsdDsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblBy
aW9yaXR5T3JkZXIoQXJnOjpUeXBlIHR5cGUpCit7CisgICAgc3RhdGljIFZlY3RvcjxSZWc+KiBy
ZXN1bHRbQXJnOjpudW1UeXBlc107CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7Cisg
ICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAg
ICAgIHJlc3VsdFtBcmc6OkdQXSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9y
IChHUFJSZWcgcmVnIDogZ3Byc0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJl
c3VsdFtBcmc6OkdQXS0+YXBwZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6
OkZQXSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChGUFJSZWcgcmVnIDog
ZnByc0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXS0+
YXBwZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHRbdHlwZV07
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJSZWdpc3RlclByaW9yaXR5
X2gKKyNkZWZpbmUgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKKyNpbmNsdWRlICJBaXJBcmcuaCIK
KyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpOworY29u
c3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgQmFuaz4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjsKK3RlbXBsYXRlPD4g
c3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPiB7CisgICAgY29uc3QgVmVj
dG9yPEdQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGdwc0luUHJpb3JpdHlPcmRl
cigpOyB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQ
UkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyBy
ZXR1cm4gZnBzSW5Qcmlvcml0eU9yZGVyKCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
bms+Citjb25zdCBWZWN0b3I8QmFuazo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRl
cigpCit7CisgICAgcmV0dXJuIFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlv
cml0eU9yZGVyKCk7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVy
KEFyZzo6VHlwZSk7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK1NwZWNpYWw6OlNwZWNpYWwoY29uc3QgY2hhciogbmFtZSkKKyAgICA6
IG1fbmFtZShuYW1lKQorICAgICwgbV9pbmRleChVSU5UX01BWCkKK3sKK30KKworU3BlY2lhbDo6
flNwZWNpYWwoKQoreworfQorCitDU3RyaW5nIFNwZWNpYWw6Om5hbWUoKSBjb25zdAoreworICAg
IFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIHJldHVybiBv
dXQudG9DU3RyaW5nKCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4KTsKKyAgICBkdW1wSW1wbChvdXQp
OworICAgIGlmIChtX2luZGV4ICE9IFVJTlRfTUFYKQorICAgICAgICBvdXQucHJpbnQobV9pbmRl
eCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoKnRoaXMsICI6ICIpOworICAgIGRlZXBEdW1wSW1wbChvdXQpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJTcGVjaWFsX2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNpbmNsdWRlICJB
aXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIEdlbmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICIm
IjsKKyAgICAKKyAgICBTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+U3BlY2lhbCgpOworCisgICAg
Q1N0cmluZyBuYW1lKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0
JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGlzVmFsaWQoSW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRz
U3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMg
Y2FsbGVkIG9uIGZvciBlYWNoIEluc3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0
IHRoZXJlIGlzIG5vIHdheSB0bworICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRz
IHVzZWQgZnJvbSBqdXN0IG9uZSBJbnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUu
IFNvLAorICAgIC8vIGlmIHlvdSB3YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRv
IGdlbmVyYXRlKCksIHRoZW4geW91IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkg
R2VuZXJhdGUgQWlyIHRoYXQgc3RhcnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRj
aCBJbnN0LCBhbmQgdGhlbiBtZXJnZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlz
IGlzIHByb2JhYmx5IG5vdCBncmVhdCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBj
YXNlIHRoYXQKKyAgICAvLyAgICBBaXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3Vj
aCBkdXBsaWNhdGlvbiBkaWRuJ3QgY2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAg
ICAvLyAgICByZWdpc3RlciBhc3NpZ25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUg
U3BlY2lhbCBtYWludGFpbiBhIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3Jr
cyBiZWNhdXNlIHRoZSBhbmFseXNpcworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNh
bGwgaXMgcGVyZm9ybWVkIGp1c3QgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMg
bm8gd2F5CisgICAgLy8gICAgZm9yIHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5z
dHMgdG8gYmUgcmVhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAg
ICBjb25zdWx0IHRoZSBIYXNoTWFwLgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291
bGQgdXNlICgxKSBhbmQgZmlyZSB1cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxs
cy4KKyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9u
IHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAg
ICAvLyBhcyBnZW5lcmF0ZSgpLiBJZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291
bGQganVzdCBoYXZlIGVhY2ggU3BlY2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVj
dG9yIG9mIFJlZ2lzdGVyU2V0J3MgYW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUg
cmlnaHQgb3JkZXIgaW4KKyAgICAvLyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZm
ZXJlbmNlIGlzIHVubGlrZWx5IHRvIGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAg
IC8vIHBlcmZvcm1hbmNlIG9mIHRoZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8v
IEN1cnJlbnRseSwgd2UgZG8gKDEpIGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lk
IHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAg
IAorICAgIHZpcnR1YWwgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhl
bHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVn
aXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFt
JikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0m
KSBjb25zdCA9IDA7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBj
b25zdCBjaGFyKiBtX25hbWU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERl
ZXBTcGVjaWFsRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFNwZWNpYWxEaW1wKFNwZWNpYWwqIHNw
ZWNpYWwpCisgICAgICAgIDogbV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1f
c3BlY2lhbCkKKyAgICAgICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgU3BlY2lhbCogbV9zcGVjaWFsOworfTsKKworRGVlcFNwZWNpYWxEdW1wIGRlZXBEdW1w
KFNwZWNpYWwqIHNwZWNpYWwpCit7CisgICAgcmV0dXJuIERlZXBTcGVjaWFsRHVtcChzcGVjaWFs
KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWly
U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxF
dmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2lu
Y2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQorewor
ICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxFdmVyeXRoaW5nIik7CisKKyAg
ICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBw
b2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0
b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBMaXZlbmVz
czxUbXA+IGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CisgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3Ms
IGJsb2NrKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5zaXpl
KCkgKyAxKTsKKworICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVk
IGluZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0ID0gdXNlZFJlZ2lzdGVyc1ti
bG9ja11baW5kZXhdOworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbG9jYWxDYWxjLmxpdmUo
KSkgeworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAg
ICAgc2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgc2V0VXNlZFJlZ2lzdGVycyhibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7Cisg
ICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAg
ICAgICAgICBzZXRVc2VkcmVnaXN0ZXJzKGluc3RJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgorICAgIFZlY3RvcjxT
dGFja1Nsb3QqPiBhbGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOworICAgIGZvciAodW5zaWdu
ZWQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgQXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgp
IHsKKyAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90
c1t0eXBlSW5kZXhdOworICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6
VHlwZT4odHlwZUluZGV4KTsKKyAgICAgICAgc3RhY2tTbG90cy5yZXNpemUoY29kZS5udW1UbXBz
KHR5cGUpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNvZGUubnVtVG1wcyh0
eXBlKTsgdG1wSW5kZXgtLTspCisgICAgICAgICAgICBzdGFja1Nsb3RzW3RtcEluZGV4XSA9IGNv
ZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgfQorCisg
ICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGlu
c3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBSZWdp
c3RlclNldCYgc2V0QmVmb3JlID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4XTsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRBZnRlciA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2lu
c3RJbmRleCArIDFdOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5k
ZXgpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAo
VG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBhbGxTdGFja1Ns
b3RzW3R5cGVdW3RtcC50bXBJbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9
IEFyZzo6c3RhY2soc3RhY2tTbG90KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRv
IGZpZ3VyZSBvdXQgYSByZWdpc3RlciB0byB1c2UuIEhvdyB3ZSBkbyB0aGF0IGRlcGVuZHMgb24g
dGhlIHJvbGUuCisgICAgICAgICAgICAgICAgICAgIFJlZyBjaG9zZW5SZWc7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
VXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3Jp
dHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVm
b3JlLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9y
ZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0g
cmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkRlZjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3Jk
ZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEFmdGVyLmdl
dChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChy
ZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlRGVmOgorICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0
eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChy
ZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9z
ZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKGNob3NlblJlZyk7CisK
KyAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKGNob3NlblJlZyk7CisKKyAgICAgICAgICAg
ICAgICAgICAgT3Bjb2RlIG1vdmUgPSB0eXBlID09IEFyZzo6R1AgPyBNb3ZlIDogTW92ZURvdWJs
ZQorCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwg
dG1wLCBhcmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorI2RlZmlu
ZSBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaXMgYSBwaGFzZSBmb3Ig
dGVzdGluZy4gSXQgYmVoYXZlcyBsaWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGluIHRoZSBzZW5z
ZSB0aGF0IGl0CisvLyBlbGltaW5hdGVzIHRlbXBvcmFyaWVzIGZyb20gdGhlIHByb2dyYW0uIEl0
IGFjY29tcGxpc2hlcyB0aGlzIGJ5IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8vIHRlbXBvcmFyaWVz
LiBUaGUgcmVzdWx0aW5nIGNvZGUgaXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVmZmljaWVudC4gVGhp
cyBwaGFzZSBpcyBncmVhdCBpZiB5b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUgaXMgYSBidWcgaW4g
dGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gWW91IGNhbiBjb25maXJtIHRoaXMgYnkgcnVubmluZyB0
aGlzCisvLyBwaGFzZSBpbnN0ZWFkIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisvLworLy8g
Tm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBlc3QgdGhpbmcg
cG9zc2libGUsIGl0J3Mgbm90IGV2ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1bGFybHkgZWZm
aWNpZW50IHdheS4gU28sIGRvbid0IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcgdGhpcyBwaGFz
ZSB0byByZWR1Y2UgY29tcGlsZXIKKy8vIGxhdGVuY3kuIElmIHlvdSB3YW50ZWQgdG8gZG8gdGhh
dCwgeW91IHNob3VsZCBjb21lIHVwIHdpdGggYSBjbGV2ZXIgYWxnb3JpdGhtIGluc3RlYWQgb2Yg
dXNpbmcKKy8vIHRoaXMgc2lsbHkgdGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUm
KTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3Bp
bGxFdmVyeXRoaW5nX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
dGFja1Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3RhY2tTbG90LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3RhY2tTbG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFN0YWNrU2xvdDo6c2V0T2Zmc2V0
RnJvbUZQKGludHB0cl90IHZhbHVlKQoreworICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7Cisg
ICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG1fdmFsdWUtPm1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7
Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJzdGFjayIsIG1faW5kZXgpOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZGVl
cER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXpl
ID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIs
IGtpbmQgPSAiLCBtX2tpbmQpOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBvdXQucHJpbnQo
IiwgdmFsdWUgPSAiLCAqbV92YWx1ZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xv
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFj
a1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclN0YWNrU2xvdF9oCisj
ZGVmaW5lIEFpclN0YWNrU2xvdF9oCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNp
bmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90dmFsdWU7
CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFja1Nsb3QgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9
CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXV0cm4gbV9raW5kOyB9CisgICAg
dW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB1bnNpZ25l
ZCBhbGlnbm1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkK
KyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAyKQorICAg
ICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDQpCisgICAgICAg
ICAgICByZXR1cm4gNDsKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorCisgICAgU3RhY2tTbG90
VmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgLy8gWmVybyBt
ZWFucyB0aGF0IGl0J3Mgbm90IHlldCBhc3NpZ25lZC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9t
RlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gVGhpcyBzaG91
bGQgdXN1YWxseSBqdXN0IGJlIGNhbGxlZCBmcm9tIHBoYXNlcyB0aGF0IGRvIHN0YWNrIGFsbG9j
YXRpb24uIEJ1dCB5b3UgY2FuCisgICAgLy8gdG90YWxseSBmb3JjZSBhIHN0YWNrIHNsb3QgdG8g
bGFuZCBhdCBzb21lIG9mZnNldC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCk7
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7
CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFj
a1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX2J5dGVT
aXplKGJ5dGVTaXplKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vZmZz
ZXRGcm9tRlAodmFsdWUtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAsIG1fa2luZChraW5kKQor
ICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoYnl0ZVNpemUp
OworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7CisgICAgU3RhY2tTbG90S2luZCBt
X2tpbmQ7CisgICAgU3RhY2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3Rh
Y2tTbG90RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoU3RhY2tTbG90KiBz
bG90KQorICAgICAgICA6IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisg
ICAgICAgICAgICBtX3Nsb3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0YWNrU2xv
dCogbV9zbG90OworfTsKKworRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoU3RhY2tTbG90KiBz
bG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gQWlyU3RhY2tTbG90X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFRtcDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAg
ICAgb3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChpc1JlZygpKSB7CisgICAgICAgIG91dC5wcmludChyZWcoKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBpZiAoaXNHUFRtcCgpKSB7CisgICAgICAgIG91dC5wcmludCgiJXRtcCIs
IGdwVG1wSW5kZXgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQo
IiVmdG1wIiwgZnBUbXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wX2gKKyNkZWZpbmUgQWlyVG1wX2gKKworI2luY2x1
ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgYSByZWdpc3Rlci4gSXQgY2Fu
IGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBvciBGUFIuIEl0IGNhbiBhbHNvCisvLyBiZSB1
c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9yYXJ5
KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJzZSBu
YW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGlzIG5hbWUgYSBsb3QuCisKK2NsYXNz
IFRtcCB7CitwdWJsaWM6CisgICAgVG1wKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgewor
ICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJl
ZykgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIG1fdmFs
dWUgPSBlbmNvZGVHUFIocmVnLmdwcigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJlZy5mcHIoKSk7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV92YWx1ZSA9IDA7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKGNvbnN0IEFy
ZyYpOworCisgICAgc3RhdGljIFRtcCBncFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVH
UFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChpbmRleCk7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBi
b29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFs
dWUpOworICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUFIobV92YWx1ZSk7CisgICAgfQor
CisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUFIoKSB8
fCBpc0ZQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZUdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQor
CisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAg
ICAgICAgcmV0dXJuIGdwcigpOworICAgICAgICByZXR1cm4gZnByKCk7CisgICAgfQorCisgICAg
Ym9vbCBoYXNUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzUmVnKCk7
CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBU
bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1
ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAg
IHJldHVybiBmcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhISp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFs
dWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
VG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAg
Citwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5j
b2RlRlAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBpbmRleDsK
KyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVy
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisgICAg
eworICAgICAgICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBS
UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFRtcCh1bnNpZ25l
ZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6
Omxhc3RSZWdpc3RlcigpKSArIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVu
Y29kZUZQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQ
UihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0gaW5kZXg7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1AoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIHZhbHVlID4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUChp
bnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPCAwOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzRW5jb2RlZEdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmIHZhbHVlIDw9IGVuY29kZUdQUihNYWNyb0Fzc2VtYmxl
cjo6bGFzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQ
UihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYm
IHZhbHVlID49IGVuY29kZWRGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1
ZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBS
KHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFsdWUp
CisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2RlR1BS
KE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpmaXJz
dFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGludCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBSKE1h
Y3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
dW5zaWduZWQgZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
RW5jb2RlZEdQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVHUFIo
TWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0YXRp
YyB1bnNpZ25lZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQo
aXNFbmNvZGVkRlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFjcm9B
c3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAgICAv
LyAwOiBlbXB0eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4K
KyAgICAvLyBuZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1
ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEFp
clRtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5s
aW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJU
bXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGluZXNf
aAorI2RlZmluZSBBaXJUbXBJbmxpbmVzX2gKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1
ZGUgIkFpclRtcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2lubGluZSBUbXA6OlRtcChjb25zdCBBcmcmIGFyZykKK3sKKyAgICAqdGhpcyA9
IGFyZy50bXAoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gQWlyVG1wSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisKKyNpbmNsdWRlICJBaXJD
b2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0
ZXIoQ29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkK
KyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3doZW4od2hlbikKKyAgICAgICAg
LCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQorCisjZGVmaW5lIFZBTElE
QVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZhaWwoX19G
SUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9uLCB0b0NTdHJp
bmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKyAgICAKKyAgICB2b2lkIHJ1bigp
CisgICAgeworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+IHZhbGlkU2xvdHM7CisgICAgICAg
IEhhc2hTZXQ8QmFzaWNCbG9jayo+IHZhbGlkQmxvY2tzOworICAgICAgICBIYXNoU2V0PFNwZWNp
YWwqPiB2YWxpZFNwZWNpYWxzOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X2NvZGUpCisgICAgICAgICAgICB2YWxpZEJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICBmb3Ig
KFN0YWNrU2xvdCogc2xvdCA6IG1fY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgICAgICB2YWxp
ZFNsb3RzLmFkZChzbG90KTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogbV9jb2Rl
LnNwZWNpYWxzKCkpCisgICAgICAgICAgICB2YWxpZFNwZWNpYWxzLmFkZChzcGVjaWFsKTsKKwor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsr
aW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0
SW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNs
b3RzLmNvbnRhaW5zKGFyZy5zdGFja1Nsb3QoKSksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgU3BlY2lhbDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU3BlY2lhbHMuY29udGFpbnMo
YXJnLnNwZWNpYWwoKSksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaW5zdC5pc1Zh
bGlkRm9ybSgpLCAoIkF0ICIsIGluc3QpKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdEluZGV4
ID09IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURShpc1Rl
cm1pbmFsKGluc3Qub3Bjb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKCkpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1
Y2Nlc3NvcnMoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlu
cyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaykpOworICAgICAgICB9CisgICAgfQorCitwcml2
YXRlOgorICAgIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBs
aW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAor
ICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVN
ZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7Cisg
ICAgICAgICAgICBvdXQucHJpbnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBs
aW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdl
LCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnBy
aW50KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVz
c2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIG91dC5wcmludChm
YWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAg
IG91dC5wcmludCgiQmVmb3JlICIsIHdoZW4sICI6XG4iKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dChtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIG91dC5wcmludCgiQXQgdGltZSBv
ZiBmYWlsdXJlOlxuIik7CisgICAgICAgIG91dC5wcmludChtX2NvZGUpOworCisgICAgICAgIG91
dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1
cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBD
UkFTSCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciog
bV93aGVuOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIHdo
ZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihj
b2RlLCB3aGVuLCBkdW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyVmFsaWRhdGVfaAorI2RlZmluZSBBaXJWYWxpZGF0ZV9oCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKwordm9pZCB2YWxp
ZGF0ZShDb2RlJiwgY29uc3QgY2hhciogd2hlbiA9IG51bGxwdHIsIGNvbnN0IGNoYXIqIGR1bXBC
ZWZvcmUgPSBudWxscHRyKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gQWlyVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODU1IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNvZGUK
KyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnNwZWNpYWwsIDpvdmVybG9hZHMKKyAgICBhdHRyX2Fj
Y2Vzc29yIDpraW5kCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBzcGVjaWFsKQorICAgICAg
ICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBzcGVjaWFsCisgICAgICAgIEBraW5k
ID0gOmluc3QKKyAgICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBvdmVybG9hZHMg
PSBbXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQorICAgICAgICBu
YW1lWzBdLmRvd25jYXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBBcmcK
KyAgICBhdHRyX3JlYWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFsaXplKHJvbGUs
IHR5cGUpCisgICAgICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5cGUKKyAgICBl
bmQKK2VuZAorCitjbGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1cmUsIDpm
b3JtcworCisgICAgZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgQHNp
Z25hdHVyZSA9IHNpZ25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3JtcworICAgIGVuZAorZW5k
CisKK2NsYXNzIEtpbmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfYWNjZXNzb3Ig
OnNwZWNpYWwKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAgIEBuYW1lID0gbmFt
ZQorICAgICAgICBAc3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYgPT0ob3RoZXIp
CisgICAgICAgIGlmIG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAgQG5hbWUgPT0gb3Ro
ZXIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFtZSBhbmQgQHNw
ZWNpYWwgPT0gb3RoZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBL
aW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgICAgIGlmIGtpbmQgPT0gIkFkZHIiCisgICAgICAgICAg
ICBbIkFkZHIiLCAiU3RhY2tTbG90IiwgIkNhbGxBcmciXQorICAgICAgICBlbHNlCisgICAgICAg
ICAgICBba2luZF0KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgYXJnS2luZHMKKyAg
ICAgICAgS2luZC5hcmdLaW5kcyhraW5kKQorICAgIGVuZAorZW5kCisKK2NsYXNzIEZvcm0KKyAg
ICBhdHRyX3JlYWRlciA6a2luZHMsIDphbHROYW1lCisKKyAgICBkZWYgaW5pdGlhbGl6ZShraW5k
cywgYWx0TmFtZSkKKyAgICAgICAgQGtpbmRzID0ga2luZHMKKyAgICAgICAgQGFsdE5hbWUgPSBh
bHROYW1lCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZp
bGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBs
aW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51
bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAi
I3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgor
ICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6
ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3Ry
aW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBp
ZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQK
KyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3Ro
ZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3Bl
Y3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29t
bWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJz
ZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNl
IGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2Vu
ZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXco
ZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxl
IG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15c
bl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4v
CisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciAr
PSAxCisgICAgICAgIHdoZW4gL1xBKFthLXpBLVowLTlfXSspLworICAgICAgICAgICAgcmVzdWx0
IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAg
ICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3Jl
CisgICAgICAgIHdoZW4gL1xBWyw6KlwvXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5u
ZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisg
ICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBs
aW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVj
dH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisg
ICAgcmVzdWx0CitlbmQKKworZGVmIGlzVUQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChVKXwo
RCl8KFVEKSlcWi8KK2VuZAorCitkZWYgaXNHRih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKEcp
fChGKSlcWi8KK2VuZAorCitkZWYgaXNLaW5kKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVG1w
KXwoSW1tKXwoSW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCkpXFovCitl
bmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICBpc1VEKHRva2VuKSBvciBpc0dGKHRva2Vu
KSBvciBpc0tpbmQodG9rZW4pIG9yCisgICAgICAgIHRva2VuID09ICJzcGVjaWFsIiBvciB0b2tl
biA9PSAiYXMiCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAv
XEEoW2EtekEtWjAtOV9dKylcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xh
c3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0
b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisK
KyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVm
IGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJv
cigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJy
b3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/
CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQg
b2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAg
ICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhw
ZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNl
CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0g
dG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1
bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1
bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lUm9sZQorICAgICAgICByZXN1bHQgPSB0b2tl
bi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgcm9sZSAoVSwgRCwgb3IgVUQp
IikgdW5sZXNzIGlzVUQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAor
ICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVUeXBlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0
cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCB0eXBlIChHIG9yIEYpIikgdW5sZXNz
IGlzR0YocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAor
CisgICAgZGVmIGNvbnN1bWVLaW5kCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEltbTY0LCBUbXAsIEFkZHIsIElu
ZGV4LCBSZWxDb25kLCBvciBSZXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAg
ICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAg
ICAgIHJlc3VsdCA9IHt9CisgICAgICAgIAorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJy
ZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgaWYgdG9rZW4gPT0g
InNwZWNpYWwiCisgICAgICAgICAgICAgICAgY29uc3VtZSgic3BlY2lhbCIpCisgICAgICAgICAg
ICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIHJlc3VsdFtv
cGNvZGVOYW1lXQorCisgICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gT3Bjb2Rl
Lm5ldyhvcGNvZGVOYW1lLCB0cnVlKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgaWYgcmVz
dWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IHJlc3VsdFtvcGNv
ZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQg
YSBzcGVjaWFsIG9wY29kZSIpIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIGZh
bHNlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUKKyAg
ICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAg
ICAgICAgICAgICAgZm9ybXMgPSBbXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIGlzVUQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcm9sZSA9IGNvbnN1bWVSb2xlCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdW1lKCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb25zdW1lVHlwZQor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1
cmUgPDwgQXJnLm5ldyhyb2xlLCB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gIi8iCisgICAgICAg
ICAgICAgICAgICAgIGNvbnN1bWUoIi8iKQorICAgICAgICAgICAgICAgICAgICBjYXNlIHRva2Vu
LnN0cmluZworICAgICAgICAgICAgICAgICAgICB3aGVuICJicmFuY2giCisgICAgICAgICAgICAg
ICAgICAgICAgICBvcGNvZGUua2luZCA9IDpicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgd2hl
biAidGVybWluYWwiCisgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUua2luZCA9IDp0ZXJt
aW5hbAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJCYWQgLyBkaXJlY3RpdmUiKQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgYWR2YW5jZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgaWYgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGtpbmRzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAg
IGFsdE5hbWUgPSBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtpbmRzIDw8IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gIioiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5s
ZXNzIGtpbmRzWy0xXS5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtpbmRzWy0xXS5zcGVjaWFsID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKCIqIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gImFzIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoImFzIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbHROYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3
cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5n
dGggPT0gc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Ig
a2luZC5uYW1lID09ICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
c2lnbmF0dXJlW2luZGV4XS5yb2xlICE9ICJVIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2Ug
YXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMg
YW4gaW1tZWRpYXRlIGZvciBhIG5vbi1nZW5lcmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvcm1zIDw8IEZvcm0ubmV3KGtpbmRzLCBhbHROYW1lKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsgdW5sZXNzIGlzS2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlLmxlbmd0aCA9
PSAwCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMAor
ICAgICAgICAgICAgICAgICAgICBmb3JtcyA8PCBGb3JtLm5ldyhbXSwgbmlsKQorICAgICAgICAg
ICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9h
ZC5uZXcoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAg
ICAgICAgcmVzdWx0CisgICAgZW5kCitlbmQKKworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJz
ZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKCRmaWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVz
ID0gcGFyc2VyLnBhcnNlCisKK2RlZiB3cml0ZUgoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJB
aXIje2ZpbGVuYW1lfS5oIiwgInciKSB7CisgICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAg
ICAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20g
I3skZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0
cyAiI2lmbmRlZiBBaXIje2ZpbGVuYW1lfV9oIgorICAgICAgICBvdXRwLnB1dHMgIiNkZWZpbmUg
QWlyI3tmaWxlbmFtZX1faCIKKworICAgICAgICB5aWVsZCBvdXRwCisgICAgICAgIAorICAgICAg
ICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBBaXIje2ZpbGVuYW1lfV9oIgorICAgIH0KK2VuZAorCitk
ZWYgd3JpdGVDUFAoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5jcHAi
LCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAi
Ly8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0g
ZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcImNv
bmZpZy5oXCIiCisgICAgICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXIje2ZpbGVuYW1lfS5o
XCIiCisKKyAgICAgICAgeWllbGQgb3V0cAorICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZSIp
IHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImVudW0gT3Bjb2RlIDogaW50
MTZfdCB7IgorICAgICRvcGNvZGVzLmtleXMuc29ydC5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUg
fAorICAgICAgICBvdXRwLnB1dHMgIiAgICAje29wY29kZX0sIgorICAgIH0KKyAgICBvdXRwLnB1
dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1PcGNvZGVz
ID0gI3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsi
CisgICAgb3V0cC5wdXRzICJjbGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7IgorICAg
IG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorfQorCit3cml0ZUNQUCgiT3Bjb2RlIikg
eworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcInd0Zi9QcmludFN0cmVh
bS5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJ1
c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMg
InsiCisgICAgb3V0cC5wdXRzICIgICAgc3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMu
a2V5cy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICBj
YXNlICN7b3Bjb2RlfToiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICBvdXQucHJpbnQoXCIj
e29wY29kZX1cIik7IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuOyIKKyAgICB9
CisgICAgb3V0cC5wdXRzICIgICAgfSIKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IC8v
IG5hbWVzcGFjZSBXVEYiCit9CisKKyMgRnJvbSBoZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1p
dCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBzaW5jZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBw
YXR0ZXJuCisjIG1hdGNoZXIuCisKK2RlZiBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3Jtcywg
Y29sdW1uSW5kZXgsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICByZXR1cm4g
aWYgZm9ybXMubGVuZ3RoID09IDAKKworICAgIGlmIGZpbHRlcltmb3Jtc10KKyAgICAgICAgcmV0
dXJuCisgICAgZW5kCisKKyAgICBpZiBjb2x1bW5JbmRleCA+PSBmb3Jtc1swXS5raW5kcy5sZW5n
dGgKKyAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAxCisgICAgICAgIGNhbGxi
YWNrW2Zvcm1zWzBdXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKyAgICAKKyAgICBncm91cHMg
PSB7fQorICAgIGZvcm1zLmVhY2ggeworICAgICAgICB8IGZvcm0gfAorICAgICAgICBraW5kID0g
Zm9ybS5raW5kc1tjb2x1bW5JbmRleF0ubmFtZQorICAgICAgICBpZiBncm91cHNba2luZF0KKyAg
ICAgICAgICAgIGdyb3Vwc1traW5kXSA8PCBmb3JtCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGdyb3Vwc1traW5kXSA9IFtmb3JtXQorICAgICAgICBlbmQKKyAgICB9CisKKyAgICBpZiBzcGVl
ZCA9PSA6ZmFzdCBhbmQgZ3JvdXBzLmxlbmd0aCA9PSAxCisgICAgICAgIG1hdGNoRm9ybXMob3V0
cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBj
YWxsYmFjaykKKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBvdXRwLnB1dHMgInN3aXRj
aCAoI3tjb2x1bW5HZXR0ZXJbY29sdW1uSW5kZXhdfSkgeyIKKyAgICBncm91cHMuZWFjaF9wYWly
IHsKKyAgICAgICAgfCBrZXksIHZhbHVlIHwKKyAgICAgICAgb3V0cC5wdXRzICIjaWYgVVNFKEpT
VkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisgICAgICAgIEtpbmQuYXJnS2luZHMoa2V5KS5l
YWNoIHsKKyAgICAgICAgICAgIHwgYXJnS2luZCB8CisgICAgICAgICAgICBvdXRwLnB1dHMgImNh
c2UgQXJnOjoje2FyZ0tpbmR9OiIKKyAgICAgICAgfQorICAgICAgICBtYXRjaEZvcm1zKG91dHAs
IHNwZWVkLCB2YWx1ZSwgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2Fs
bGJhY2spCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIiNl
bmRpZiAvLyBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICB9CisgICAgb3V0
cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMg
In0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAg
IG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5vcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFs
dWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e29wY29kZS5uYW1lfToiCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5
aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRT
d2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkK
KyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIg
aWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2gg
eworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZAorICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVu
ZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZh
dWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAg
ICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0
Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGluc3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92
ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9w
Y29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29sdW1uR2V0dGVyID0g
cHJvYyB7CisgICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAg
IiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9
IHByb2MgeworICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgeWllbGQg
b3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hG
b3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVy
LCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRp
bHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5o
XCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7IgorICAgIAorICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wgb3BnZW5IaWRkZW5U
cnV0aCgpIHsgcmV0dXJuIHRydWU7IH0iCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIE9QR0VOX1JF
VFVSTih2YWx1ZSkgZG8ge1xcIgorICAgIG91dHAucHV0cyAiICAgIGlmIChvcGdlbkhpZGRlblRy
dXRoKCkpXFwiCisgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVybiB2YWx1ZTtcXCIKKyAgICBv
dXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
IgorICAgIG91dHAucHV0cyAidm9pZCBJbnN0Ojpmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCA6
ZmFzdCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlm
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1swXSwg
QXJnOjpVc2UsIEFyZzo6R1ApOyAvLyBUaGlzIGlzIGJhc2ljYWxseSBib2d1cywgYnV0IGl0IHdv
cmtzIGYgYW5hbHlzZXMgbW9kZWwgU3BlY2lhbCBhcyBhbiBpbW1lZGlhdGUuIgorICAgICAgICAg
ICAgb3V0cC5wdXRzICJhcmdzWzBdLnNwZWNpYWwoKS0+Zm9yRWFjaEFyZygqdGhpcywgc2NvcGVk
TGFtYmRhPEVhY2hBcmdDYWxsYmFjaz4oZnVuY3RvcikpOyIKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAg
ICAgfCBhcmcsIGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xlID0gbmlsCisgICAgICAgICAg
ICAgICAgY2FzZSBhcmcucm9sZQorICAgICAgICAgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAg
ICAgICAgICAgIHJvbGUgPSAiVXNlIgorICAgICAgICAgICAgICAgIHdoZW4gIkQiCisgICAgICAg
ICAgICAgICAgICAgIHJvbGUgPSAiRGVmIgorICAgICAgICAgICAgICAgIHdoZW4gIlVEIgorICAg
ICAgICAgICAgICAgICAgICByb2xlID0gIlVzZURlZiIKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1d
LCBBcmc6OiN7cm9sZX0sIEFyZzo6I3thcmcudHlwZX1QKTsiCisgICAgICAgICAgICB9CisgICAg
ICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4iCisgICAgb3V0cC5wdXRzICJBTFdBWVNfSU5MSU5F
IGJvb2wgaXNWYWxpZEZvcm0oT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cyki
CisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiQXJnOjpLaW5kIGtpbmRzW3NpemVv
Zi4uLihBcmd1bWVudHMpXSA9IHsgYXJndW1lbnRzLi4uIH07IgorICAgIG91dHAucHV0cyAic3dp
dGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9w
Y29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAg
IG91dHAucHV0cyAic3dpdGNoIChzaXplb2YuLi4oQXJndW1lbnRzKSkgeyIKKyAgICAgICAgdW5s
ZXNzIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggewor
ICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
Y2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIKKyAgICAgICAgICAgICAgICBjb2x1
bW5HZXR0ZXIgPSBwcm9jIHsgfCBjb2x1bW5JbmRleCB8ICJraW5kc1sje2NvbHVtbkluZGV4fV0i
IH0KKyAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAg
ICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAg
ICAgICAgICAgICAgICAgIHNwZWNpYWwgPSAobm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBraW5k
IHwga2luZC5zcGVjaWFsIH0pCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKCN7c3BlY2lhbH0pOyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwg
ZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJl
dHVybiBmYWxzZTsgIgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiaW5saW5l
IGJvb2wgaXNUZXJtaW5hbChPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAo
b3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUg
fAorICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6dGVybWluYWwgb3Igb3Bjb2RlLmtpbmQgPT0g
OmJyYW5jaAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAg
ICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAu
cHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCit3cml0ZUNQUCgiT3Bjb2RlVXRpbHMiKSB7
CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdElubGluZXMu
aFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6aXNWYWxpZEZvcm0oKSIKKyAg
ICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpzYWZlLCAi
dGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAgaWYg
b3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFyZ3Muc2l6ZSgpIDwg
MSkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICghYXJnc1swXS5pc1NwZWNpYWwoKSkiCisgICAgICAgICAgICBvdXRwLnB1
dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihh
cmdzWzBdLnNwZWNpYWwoKS0+aXNWYWxpZCgqdGhpcykpOyIKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiA9IGZhbHNlCisgICAgICAgICAgICBvdmVybG9hZC5z
aWduYXR1cmUubGVuZ3RoLnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAg
ICAgICAgICAgICByb2xlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS5yb2xlCisgICAgICAg
ICAgICAgICAgdHlwZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZQorICAgICAgICAg
ICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2luZGV4XQorICAgICAgICAgICAgICAgIG5lZWRzTW9y
ZVZhbGlkYXRpb24gfD0ga2luZC5zcGVjaWFsCisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgIyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgZm9ybSBtYXRjaGVzLiBXZSBkb24ndCBo
YXZlIHRvIHZhbGlkYXRlIHRoZSByb2xlLCBzaW5jZQorICAgICAgICAgICAgICAgICMga2luZCBp
bXBsaWVzIHJvbGUuIFNvLCB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHZhbGlkYXRlIGlzIHRoZSB0
eXBlLiBBbmQgd2Ugb25seSBoYXZlCisgICAgICAgICAgICAgICAgIyB0byB2YWxpZGF0ZSB0aGUg
dHlwZSBpZiB3ZSBoYXZlIGEgVG1wLgorICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAi
VG1wIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1sje2luZGV4fV0u
dG1wKCkuaXMje3R5cGV9UCgpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdF
Tl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGlmIG5lZWRzTW9yZVZhbGlkYXRpb24KKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImlmICghaXMje29wY29kZS5uYW1lfVZhbGlkKHRoaXMpKSIKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgIGVuZAorICAgIH0K
KyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAg
b3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KSIKKyAg
ICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAk
b3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5w
dXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKworICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAor
ICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ0luZGV4KSIKKyAgICAgICAgICAgIG91dHAu
cHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KGFyZ3NbMF0uc3BlY2lhbCgpLT5hZG1pdHNTdGFjaygqdGhpcywgYXJnSW5zdCkpOyIKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhlIGFyZ0luZGV4LgorICAgICAgICAg
ICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7IgorCisgICAgICAgICAgICBudW1Bcmdz
ID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAor
ICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgIH0u
bWF4CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFyZ3MudGltZXMgeworICAgICAgICAg
ICAgICAgIHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje2Fy
Z0luZGV4fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGFsbCBvZiB0aGUgZm9ybXMg
b2YgYWxsIG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBvciBkb24ndCwgYWRtaXQgYW4gYWRk
cmVzcworICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRleC4gV2UgZXhwZWN0IHRoaXMgdG8g
YmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAg
ICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVh
Y2ggeworICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICAg
ICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0g
fAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFk
ZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAx
CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRlbGliZXJh
dGVseSB0ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdlIGVuZCB1cCB3aXRoIG5vIGZvcm1z
LCB3ZSB3YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkgdGhhdCBBZGRyZXNzIGlzIGluYWRt
aXNzaWJsZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVs
c2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRV
Uk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIyBO
b3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAgICAgICAgICBuZWVkT3ZlcmxvYWRT
d2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpCisKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0
Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAgICAgICAgICAgICAgICAgICAgICAj
IEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0IHdlIHdhbnQuCisgICAgICAgICAg
ICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyA9
IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAg
ICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0byBkZWZhdWx0LgorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVl
ZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVy
bG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3ZSB0ZXN0IHRoZSBoeXBvdGhlc2lz
IHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3JtLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmdzWyN7Y29sdW1uSW5kZXh9
XS5raW5kKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIg
PSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtcyB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVtaXQgbm8gY29kZSwgc2luY2Ugd2Ug
Y2Fubm90IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVy
bG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3
aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0i
CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAg
fQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgIGVuZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAg
IG91dHAucHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAu
cHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9
IgorCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgSW5zdDo6Z2VuZXJhdGUoQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KSBjb25zdCIKKyAgICBv
dXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oaml0KTsiCisgICAgb3V0
cC5wdXRzICJVTlVTRURfUEFSQU0oY29udGV4dCk7IgorICAgIG91dHAucHV0cyAiQ0NhbGxIZWxw
ZXJzOjpKdW1wIHJlc3VsdDsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpmYXN0
LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAg
aWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFy
Z3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250ZXh0KSk7IgorICAgICAg
ICBlbHNlCisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgICAgICBtZXRo
b2ROYW1lID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
bWV0aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICBpZiBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
cmVzdWx0ID0gIgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnByaW50ICJqaXQu
I3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMuZWFjaF93aXRoX2luZGV4
IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBpZiBp
bmRleCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgIiwgIgorICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1lCisgICAgICAgICAgICAg
ICAgd2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVb
aW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZnByKCkiCisgICAgICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIkltbSIKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIKKyAg
ICAgICAgICAgICAgICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmlu
dCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tNjQoKSIKKyAgICAgICAgICAgICAgICB3aGVu
ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5h
c0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAg
ICAgICAgICB3aGVuICJSZWxDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3
aGVuICJSZXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5k
ZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1
dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAicmV0dXJu
IHJlc3VsdDsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJ
KHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5kZXggIT0gaW52YWxpZCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEo
KSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRl
ZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBkZWxldGVkKCk7IH0KQEAgLTE3MCw2
ICsxNjksNDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OwogCisgICAgY2xhc3MgQWxsUmVnc0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpIHsgfQorCisgICAgICAgICAgICBleHBsaWNpdCBpdGVyYXRvcihSZWcgcmVnKQorICAgICAg
ICAgICAgICAgIDogbV9yZWcocmVnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBSZWcgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7IH0KKworICAg
ICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1fcmVnID0gbV9yZWcubmV4dCgpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9yZWcgPT0gb3RoZXIubV9yZWc7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAg
fQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBSZWcgbV9yZWc7CisgICAgICAgIH07
CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWc6
OmZpcnN0KCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKFJlZygpKTsgfQorICAgIH07CisKKyAgICBzdGF0aWMgQWxsUmVnc0l0ZXJhYmxlIGFsbCgp
IGNvbnN0IHsgcmV0dXJuIEFsbFJlZ3NJdGVyYWJsZSgpOyB9CisKIHByaXZhdGU6CiAgICAgc3Rh
dGljIHVpbnQ4X3QgaW52YWxpZCgpIHsgcmV0dXJuIDB4ZmY7IH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHJldmlz
aW9uIDE5MTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNl
dExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIFJlZ2lzdGVyQXRPZmZz
ZXRMaXN0OjpSZWdpc3RlckF0T2Zmc2V0TGkKICAgICBpZiAob2Zmc2V0QmFzZVR5cGUgPT0gRnJh
bWVQb2ludGVyQmFzZWQpCiAgICAgICAgIG9mZnNldCA9IC0oc3RhdGljX2Nhc3Q8cHRyZGlmZl90
PihudW1iZXJPZlJlZ2lzdGVycykgKiBzaXplb2Yodm9pZCopKTsKIAotICAgIGZvciAoUmVnIHJl
ZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpO3JlZyA9IHJlZy5uZXh0KCkpIHsK
KyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVn
ID0gcmVnLm5leHQoKSkgewogICAgICAgICBpZiAocmVnaXN0ZXJTZXQuZ2V0KHJlZykpIHsKICAg
ICAgICAgICAgIGFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KHJlZywgb2Zmc2V0KSk7CiAgICAgICAg
ICAgICBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgJKHJldmlzaW9uIDE5MTIzOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjYsNiArNjYsOSBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldCog
ZmluZChSZWcpIGNvbnN0OwogICAgIHVuc2lnbmVkIGluZGV4T2YoUmVnKSBjb25zdDsgLy8gUmV0
dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQuCiAKKyAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNl
dD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnMuYmVn
aW4oKTsgfQorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnMuZW5kKCk7IH0KKwogcHJpdmF0ZToKICAgICBW
ZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD4gbV9yZWdpc3RlcnM7CiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcs
NiArMTE3LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVn
aXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3Rv
cjsgfQogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5oYXNoKCk7
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6
IG1fdmVjdG9yLnNldEJpdHMoKSkKKyAgICAgICAgICAgIGZ1bmN0b3IoUmVnOjpmcm9tSW5kZXgo
aW5kZXgpKTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgc2V0QW55KFJlZyByZWcp
IHsgc2V0KHJlZyk7IH0KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFNjb3BlZExhbWJkYV9oCisjZGVmaW5lIFNjb3BlZExhbWJkYV9oCisKK25hbWVzcGFjZSBX
VEYgeworCisvLyBZb3UgY2FuIHVzZSBTY29wZWRMYW1iZGEgdG8gZWZmaWNpZW50bHkgcGFzcyBs
YW1iZGFzIHdpdGhvdXQgYWxsb2NhdGluZyBtZW1vcnkgb3IgcmVxdWlyaW5nCisvLyB0ZW1wbGF0
ZSBzcGVjaWFsaXphdGlvbiBvZiB0aGUgY2FsbGVlLiBUaGUgY2FsbGVlIHNob3VsZCBiZSBkZWNs
YXJlZCBhczoKKy8vCisvLyB2b2lkIGZvbyhjb25zdCBTY29wZWRMYW1iZGE8TXlUaGluZ3MqIChp
bnQsIFN0dWZmJik+Jik7CisvLworLy8gVGhlIGNhbGxlciBqdXN0IGRvZXM6CisvLworLy8gdm9p
ZCBmb28oc2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPihbJl0gKGludCB4LCBT
dHVmZiYgeSkgLT4gTXlUaGluZ3MqIHsgYmxhaCB9KSk7CisvLworLy8gTm90ZSB0aGF0IHRoaXMg
cmVsaWVzIG9uIGZvbygpIG5vdCBlc2NhcGluZyB0aGUgbGFtYmRhLiBUaGUgbGFtYmRhIGlzIG9u
bHkgdmFsaWQgd2hpbGUgZm9vKCkgaXMKKy8vIG9uIHRoZSBzdGFjayAtIGhlbmNlIHRoZSBuYW1l
IFNjb3BlZExhbWJkYS4KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBT
Y29wZWRMYW1iZGE7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBB
cmd1bWVudFR5cGVzPgorY2xhc3MgU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlw
ZXMuLi4pPiB7CitwdWJsaWM6CisgICAgU2NvcGVkTGFtYmRhKFJlc3VsdFR5cGUgKCppbXBsKSh2
b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLikgPSBudWxscHRyLCB2b2lkKiBhcmcgPSBudWxs
cHRyKQorICAgICAgICA6IG1faW1wbChpbXBsKQorICAgICAgICAsIG1fYXJnKGFyZykKKyAgICB7
CisgICAgfQorICAgIAorICAgIFJlc3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYu
Li4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpm
b3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBSZXN1bHRUeXBlICgqbV9pbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLik7
CisgICAgdm9pZCAqbV9hcmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUs
IHR5cGVuYW1lIEZ1bmN0b3I+IFNjb3BlZExhbWJkYUZ1bmN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzLCB0eXBlbmFtZSBGdW5jdG9y
PgorY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4u
KSwgRnVuY3Rvcj4gOiBwdWJsaWMgU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlw
ZXMuLi4pPiB7CitwdWJsaWM6CisgICAgU2NvcGVkTGFtYmRhRnVuY3Rvcihjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgICAgICA6IFNjb3BlZExhbWJkYShpbXBsRnVuY3Rpb24sIHRoaXMpCisg
ICAgICAgICwgbV9mdW5jdG9yKGZ1bmN0b3IpCisgICAgeworICAgIH0KKworICAgIFNjb3BlZExh
bWJkYUZ1bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhKGlt
cGxGdW5jdGlvbiwgdGhpcykKKyAgICAgICAgLCBtX2Z1bmN0b3IoV1RGOjptb3ZlKGZ1bmN0b3Ip
KQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFJlc3VsdFR5cGUgaW1wbEZ1
bmN0aW9uKHZvaWQqIGFyZ3VtZW50LCBBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjb3BlZExhbWJkYUZ1bmN0b3IqPihhcmd1
bWVudCktPm1fZnVuY3RvcigKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVz
Pihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICBGdW5jdG9yIG1fZnVuY3RvcjsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1Njb3Bl
ZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1iZGEoY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gU2NvcGVkTGFtYmRhRnVuY3RvcjxGdW5j
dGlvblR5cGUsIEZ1bmN0b3I+KGZ1bmN0b3IpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIFNjb3BlZExhbWJkYV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRh
c2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHJldmlzaW9u
IDE5MTIzOSkKKysrIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkod29ya2luZyBjb3B5KQpA
QCAtNzksNiArNzksMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBTaGFyZWRUYXNr
RnVuY3RvcihGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBtX2Z1bmN0b3IoV1RGOjptb3Zl
KGZ1bmN0b3IpKQorICAgIHsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgUmVzdWx0VHlwZSBydW4o
QXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykgb3ZlcnJpZGUKICAgICB7CkBAIC0xMTAsNiAr
MTE1LDExIEBAIFJlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0ZVNoYXIKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1
bmN0b3I+KGZ1bmN0b3IpKTsKIH0KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rvcj4KK1JlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0ZVNoYXJl
ZFRhc2soRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hh
cmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihXVEY6Om1vdmUoZnVuY3Rvcikp
KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263937</attachid>
            <date>2015-10-23 13:11:00 -0700</date>
            <delta_ts>2015-10-23 13:20:55 -0700</delta_ts>
            <desc>added a feature flag, ENABLE(B3_JIT)</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>447397</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hl
cgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNz
b2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5l
dmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZl
IGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3Qy
KS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3Vs
ZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBp
biB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXph
dGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3Qg
bmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQg
aW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5
IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0Fk
ZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBB
ZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKK0RpcmVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1l
bnRSZWdWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1Zh
bHVlOjp+QXJndW1lbnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRS
ZWdWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3VtZW50UmVnVmFs
dWVfaAorI2RlZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFs
dWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyBy
ZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFs
dWUoKTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3Vt
ZW50UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6
IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgfQorCisg
ICAgUmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDc5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2su
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQmFzaWNCbG9jazo6QmFzaWNC
bG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5k
ZXgpCisgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5C
YXNpY0Jsb2NrKCkKK3sKK30KKwordm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVl
KQoreworICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6
YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OmFkZFByZWRlY2Vz
c29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywg
YmxvY2spOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Js
b2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBCMzo6cmVwbGFjZVByZWRlY2Vzc29y
KHRoaXMsIGZyb20sIHRvKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQor
Cit2b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5
LCAiXG4iKTsKKyAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICp0aGlzKQorICAgICAgICBvdXQucHJp
bnQoIiAgICAiLCBkZWVwRHVtcCh2YWx1ZSksICJcbiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNCYXNpY0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNCbG9jaworCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNTdWNjZXNzb3JD
b2xsZWN0aW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQ
cm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAgdHlw
ZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBlZGVm
IFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0Y2hl
cyBDb250cm9sVmFsdWU6OlN1Y2Nlc3Nvckxpc3QKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBk
dW1wUHJlZml4ID0gIiMiOworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVkIGlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVMaXN0OjppdGVyYXRv
ciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6Oml0
ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgVmFsdWVMaXN0Ojpj
b25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0K
KyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBt
X3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMubGFz
dCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsgfQor
CisgICAgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVl
VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3KFBy
b2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkg
Y29uc3Q7CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29u
c3Q7CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOworICAg
IGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdDsKKworICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2Nr
KiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1Y2Nlc3NvckNvbGxlY3Rp
b248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCk7CisgICAgU3Vj
Y2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBz
dWNjZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sq
IHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29y
c1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgp
IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vzc29y
TGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhd
OyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRl
Y2Vzc29yc1tpbmRleF07IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayop
OworICAgIGJvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVw
bGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAg
IGRvdWJsZSBmcmVxdWVuY3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7Cisg
ICAgCisgICAgLy8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVu
c2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgVmFsdWVMaXN0IG1fdmFsdWVzOworICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vz
c29yczsKKyAgICBkb3VibGUgbV9mcmVxdWVuY3k7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9j
a0R1bXAgeworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChCYXNpY0Jsb2NrKiBibG9j
aykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQor
ICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNC
bG9jayogbV9ibG9jazsKK307CisKK0RlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChCYXNpY0Js
b2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzQmFzaWNCbG9ja0lubGluZXNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tJbmxp
bmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIK
KyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogQmFzaWNCbG9j
azo6YXBwZW5kTmV3KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcHJvY2VkdXJlLmFkZDxWYWx1ZVR5cGU+KGFy
Z3VtZW50cy4uLik7CisgICAgYXBwZW5kKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KwordW5zaWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5udW1TdWNjZXNzb3JzKCk7Cit9CisKK0Zy
ZXF1ZW50ZWRCbG9jayBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5k
ZXgpOworfQorCitGcmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nl
c3NvcihpbmRleCk7Cit9CisKK2NvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2lj
QmxvY2s6OnN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBCYXNpY0Jsb2NrOjpz
dWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3VjY2Vz
c29yKGluZGV4KS5ibG9jaygpOworfQorCitCYXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6c3VjY2Vz
c29yQmxvY2sodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCku
YmxvY2soKTsKK30KKworU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JM
aXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKQoreworICAgIHJldHVybiBTdWNjZXNz
b3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9
CisKK1N1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29y
TGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0
PihzdWNjZXNzb3JzKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9ja1V0aWxzX2gKKyNk
ZWZpbmUgQjNCYXNpY0Jsb2NrVXRpbHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNp
Y0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAgQmFzaWNCbG9j
azo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOwor
CisgICAgaWYgKHByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNzb3IpOworICAg
IHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCBy
ZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNz
b3IpCit7CisgICAgQmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxv
Y2stPnByZWRlY2Vzc29ycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBwcmVk
ZWNlc3NvcikgeworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ktLV0gPSBwcmVkZWNlc3NvcnMu
bGFzdCgpOworICAgICAgICAgICAgcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghcHJlZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vzc29yKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlcGxhY2VQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7
CisgICAgQmFzaWNCbG9jazo6QWRqYWNlbmN5TGlzdCYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnBy
ZWRlY2Vzc29ycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBmcm9tKSB7Cisg
ICAgICAgICAgICBwcmVkZWNlc3NvcnNbaV0gPSB0bzsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyByZWNv
bXB1dGVzIHByZWRlY2Vzc29ycyBhbmQgcmVtb3ZlcyBibG9ja3MgdGhhdCBhcmVuJ3QgcmVhY2hh
YmxlLgordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK3ZvaWQgcmVzZXRSZWFjaGFiaWxp
dHkoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykKK3sKKyAgICAv
LyBDbGVhciBhbGwgcHJlZGVjZXNzb3IgbGlzdHMgZmlyc3QuCisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGJsb2NrcykKKyAgICAgICAgYmxvY2stPnByZWRlY2Vzc29ycygpLnJlc2l6ZSgw
KTsKKworICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQm9jayosIEluZGV4U2V0PEJhc2ljQmxv
Y2s+PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5ub2RlKGJsb2Nrc1swXSk7CisgICAgd2hpbGUg
KEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAg
ICAgIGlmICh3b3JrbGlzdC5hZGQoc3VjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBzdWNjZXNz
b3ItPnByZWRlY2Vzc29ycygpLmFwcGVuZChibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChibG9ja3NbaV0ucHJlZGVjZXNzb3JzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJsb2Nr
c1tpXSA9IG51bGxwdHI7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5l
IEIzQmxvY2tXb3JrbGlzdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNC
YXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFw
aE5vZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3N0cnVjdCBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdyYXBo
Tm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tXb3Jr
bGlzdDsKKworLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91bGQgcmVhZCBp
dCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxv
Y2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2NrKiwgVD47CisKKy8vIEV4dGVuZGVkIGJs
b2NrIHdvcmtsaXN0IGlzIHVzZWZ1bCBmb3IgZW5xdWV1ZWluZyBzb21lIG1ldGEtZGF0YSBhbG9u
ZyB3aXRoIHRoZSBibG9jay4gSXQgYWxzbworLy8gcGVybWl0cyBmb3JjaWJseSBlbnF1ZXVlaW5n
IHRoaW5ncyBldmVuIGlmIHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uIEl0J3MgdXNl
ZnVsIGZvcgorLy8gdGhpbmdzIGxpa2UgYnVpbGRpbmcgYSBzcGFubmluZyB0cmVlLCBpbiB3aGlj
aCBjYXNlIFQgKHRoZSBhdXhpbGlhcnkgcGF5bG9hZCkgd291bGQgYmUgdGhlCisvLyBzdWNjZXNz
b3IgaW5kZXguCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xp
c3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxC
YXNpY0Jsb2NrPj47CisKK3R5cGVkZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CisKK3R5
cGVkZWYgR3JhcGhOb2RlV2l0aE9yZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKKwor
dHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8
QmFzaWNCbG9jaz4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmxvY2tX
b3JrbGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVj
aWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzQ2hlY2tTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFt
ZXNwYWNlIHsKKwordW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCit7CisgICAgc3dpdGNo
IChpbnN0Lm9yaWdpbi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2Ug
Q2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIDI7CisgICAgY2Fz
ZSBDaGVjazoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWly
OjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQorICAgIDogbV9jaGVja09wY29kZShv
cGNvZGUpCisgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQoreworfQorCitDaGVja1NwZWNp
YWw6On5DaGVja1NwZWNpYWwoKQoreworfQorCitJbnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJh
bmNoKGNvbnN0IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAgSW5zdCBoaWRkZW5CcmFuY2gobV9j
aGVja09wY29kZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRlbkJyYW5jaC5hcmdzLnJlc2l6ZSht
X251bUNoZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DaGVja0FyZ3M7IGkt
LTspCisgICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzW2ldID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAg
ICByZXR1cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFy
ZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYg
Y2FsbGJhY2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmcoY2FsbGJhY2sp
OworICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAx
LCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1ZhbGlkKEluc3Qm
IGluc3QpCit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlkKCkKKyAgICAg
ICAgJiYgaXNWYWxpZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGlu
c3QpOworfQorCitib29sIENoZWNrU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5z
aWduZWQgYXJnSW5kZXgpCit7CisgICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAx
ICsgbV9udW1DaGVja0FyZ3MpCisgICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRt
aXRzU3RhY2soYXJnSW5kZXggLSAxKTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIz
QXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0ND
YWxsSGVscGVyczo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxs
SGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhl
bHBlcnM6Okp1bXAgZmFpbCA9IGhpZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRl
eHQpOworICAgIEFTU0VSVChmYWlsLmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5z
dC5vcmlnaW47CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tN
YXRoKHZhbHVlLT5vcGNvZGUoKSkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBD
aGVja011bCkKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBl
bHNlIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmFyZ3NbMF0tPmlz
SW50KDApKQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDApKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKGNvbnRleHQu
Y29kZSwgaW5zdC5hcmdzWzJdKSk7CisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZyhjb250
ZXh0LmNvZGUsIGluc3QuYXJnc1sxXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2
YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6
Y29uc3RhbnQoMSkpOworICAgIH0KKworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVt
Q2hlY2tBcmdzICsgMSwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMu
YXBwZW5kKAorICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRl
UGF0aEZ1bmN0aW9uPigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVy
YXRpb25Db250ZXh0JiBjb250ZXh0KSB7CisgICAgICAgICAgICAgICAgZmFpbC5saW5rKCZqaXQp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcCA9
IHZhbHVlLT5zdGFja21hcCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGFja21hcCk7CisK
KyAgICAgICAgICAgICAgICBTdGFja21hcDo6R2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcGFyYW1z
LnN0YWNrbWFwID0gc3RhY2ttYXA7CisgICAgICAgICAgICAgICAgcGFyYW1zLnJlcHMgPSByZXBz
OworICAgICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNl
ZFJlZ2lzdGVyczsKKworICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5tX2dlbmVyYXRvci0+cnVu
KGppdCwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0pKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6
OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2hl
Y2tPcGNvZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQgQ2hlY2tTcGVj
aWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIkIzOjpDaGVja1ZhbHVlIGxvd2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwgIiB3aXRoICIs
IG1fbnVtQ2hlY2tBcmdzLCAiIGFyZ3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
Q2hlY2tTcGVjaWFsX2gKKyNkZWZpbmUgQjNDaGVja1NwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVj
aWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB3YW50IHRv
IGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2FudCB0
byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKKy8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVhZCBv
ZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFsIHdp
bGwgcmVtZW1iZXIKKy8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBhbG9u
ZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQKKy8v
IHdpbGwgY3JlYXRlIGFuIEluc3Qgd2l0aCB0aGF0IG9wY29kZSBwbHVzIHRoZSBhcHByb3ByaWF0
ZSBhcmdzIGZyb20gdGhlIG93bmluZyBJbnN0IHdoZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkgb2Yg
dGhlIGNhbGxiYWNrcy4KKy8vCisvLyBOb3RlIHRoYXQgZm9yIENoZWNrQWRkLCBDaGVja1N1Yiwg
YW5kIENoZWNrTXVsIHdlIGV4cGVjdCB0aGF0IHRoZSBCMyBhcmd1bWVudHMgYXJlIHRoZSByZXZl
cnNlCisvLyBvZiB0aGUgQWlyIGFyZ3VtZW50cyAoQWRkKGEsIGIpID0+IEFkZDMyIGIsIGEpLiBF
eGNlcHQ6CisvLyAtIENoZWNrU3ViKDAsIHgpLCB3aGljaCB0dXJucyBpbnRvIEJyYW5jaE5lZzMy
IHguCisvLyAtIENoZWNrTXVsKGEsIGIpLCB3aGljaCB0dXJucyBpbnRvIE11bDMyIGIsIGEgYnV0
IHdlIHBhc3MgQW55IGZvciBhJ3MgVmFsdWVSZXAuCisKK2NsYXNzIENoZWNrU3BlY2lhbCA6IHB1
YmxpYyBTdGFja21hcFNwZWNpYWwgeworcHVibGljOgorICAgIENoZWNrU3BlY2lhbChBaXI6Ok9w
Y29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsKKwor
ICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRoZSBi
cmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAgIEluc3QgaGlkZGVuQnJhbmNoKGNvbnN0IElu
c3QmKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3Qm
LCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRt
aXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisgICAg
Ly8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4gYnJh
bmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRlcyB0
aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
Z2VuZXJhdGUoSW5zdCYsIENDYWxsSGVsZXBycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1fbnVt
Q2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1NwZWNpYWxfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0No
ZWNrVmFsdWU6On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9pZCBDaGVja1ZhbHVlOjpkdW1wTWV0
YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgic3RhY2ttYXAgPSAi
LCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tWYWx1ZV9oCisjZGVmaW5l
IEIzQ2hlY2tWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIENoZWNrVmFsdWUgOiBwdWJsaWMgQ2hlY2sgeworcHVibGljOgorICAg
IHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIGNhc2UgQ2hlY2tT
dWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIGNhc2UgQ2hlY2s6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5DaGVja1ZhbHVlKCk7CisKKyAgICBTdGFj
a21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQg
Q2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgOiBWYWx1
ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbiwgbGVmdCwgcmlnaHQpCisgICAg
eworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChsZWZ0LT50
eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2tB
ZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9PSBDaGVja011bCk7CisgICAgfQor
CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSkK
KyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChvcGNkZSA9PSBDaGVjayk7CisgICAgfQorfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNDaGVja1ZhbHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bW1vbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21t
b24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzQ29tbW9uLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiREZHQ29t
bW9uLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitib29sIHNob3VsZER1bXBJUigpCit7Cisg
ICAgcmV0dXJuIEZUTDo6dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpIHx8IEZUTDo6c2hvdWxk
RHVtcERpc2Fzc2VtYmx5KCkgfHwgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKTsKK30KKworYm9v
bCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBH
cmFwaEF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUigpCit7CisgICAg
cmV0dXJuIERGRzo6dmFsaWRhdGlvbkVuYWJsZWQoKSB8fCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNo
UGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKQoreworICAg
IHJldHVybiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBz
aG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZlcmJvc2VW
YWxpZGF0aW9uRmFpbHVyZSgpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1v
bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29tbW9uX2gKKyNkZWZpbmUgQjNDb21t
b25faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2Jvb2wgc2hvdWxkRHVtcElSKCk7Citib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNl
KCk7Citib29sIHNob3VsZFZhbGlkYXRlSVIoKTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFj
aFBoYXNlKCk7Citib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCk7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
Q29tbW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0
eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRp
dml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21t
dXRhdGl2aXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0NvbW11dGF0aXZpdHkuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
Q29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5KQoreworICAgIHN3aXRjaCAoY29tbXV0YXRpdml0
eSkgeworICAgIGNhc2UgQ29tbXV0YXRpdmU6CisgICAgICAgIG91dC5wcmludCgiQ29tbXV0YXRp
dmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTm90Q29tbXV0YXRpdmU6CisgICAgICAg
IG91dC5wcmludCgiTm90Q29tbXV0YXRpdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21tdXRhdGl2aXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tbXV0YXRpdml0eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M0NvbW11dGF0aXZpdHlfaAorI2RlZmluZSBCM0NvbW11dGF0aXZpdHlfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gQ29tbXV0
YXRpdml0eSB7CisgICAgQ29tbXV0YXRpdmUsCisgICAgTm90Q29tbXV0YXRpdmUKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRT
dHJlYW07Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpDb21tdXRh
dGl2aXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNDb21tdXRhdGl2aXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5w
YXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisjIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIENvbXBhcmlzb25NYXRjaGVyCisKK1Rlc3RM
b2FkTm90WmVybzEgPSBBbmQoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitUZXN0TG9hZE5vdFplcm8y
ID0gQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpCitUZXN0Tm90WmVybyA9IEFuZChsZWZ0LCByaWdo
dCkKKworVGVzdExvYWRaZXJvMSA9IEVxdWFsKEFuZChMb2FkKGFkZHJlc3MpLCByaWdodCksICQw
KQorVGVzdExvYWRaZXJvMiA9IEVxdWFsKEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKSwgJDApCitU
ZXN0WmVybyA9IEVxdWFsKEFuZChsZWZ0LCByaWdodCksICQwKQorCitMb2FkRXF1YWwxID0gRXF1
YWwoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitMb2FkRXF1YWwyID0gRXF1YWwobGVmdCwgTG9hZChh
ZGRyZXNzKSkKK05vdCA9IEVxdWFsKHZhbHVlLCAkMCkKK0VxdWFsID0gRXF1YWwobGVmdCwgcmln
aHQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNDb25zdDMyVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDMyVmFsdWU6On5Db25zdDMyVmFsdWUoKQorewor
fQorCit2b2lkIENvbnN0MzJWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
Q29uc3QzMlZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDMyVmFsdWVfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIENvbnN0MzJWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0g
Q29uc3QzMjsgfQorICAgIAorICAgIH5Db25zdDMyVmFsdWUoKTsKKyAgICAKKyAgICBpbnQzMl90
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDMyVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IENvbnN0MzIsIEludDMyLCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIGludDMyX3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29u
c3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0
VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0NjRWYWx1ZTo6fkNvbnN0NjRWYWx1
ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3Q2NFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9w
Y29kZSA9PSBDb25zdDY0OyB9CisgICAgCisgICAgfkNvbnN0NjRWYWx1ZSgpOworICAgIAorICAg
IGludDY0X3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0NjRWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1
ZShpbmRleCwgQ29uc3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVl
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNDb25zdDY0VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Nv
bnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERv
dWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdERvdWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NvbnN0RG91YmxlVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0RG91YmxlVmFsdWVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkg
eyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91Ymxl
VmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2
YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2lu
KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3Vi
bGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb250cm9s
VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKQoreworfQorCit2b2lkIENv
bnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBDb21t
YVByaW50ZXIgY29tbWE7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fc3VjY2Vzc29y
cykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChibG9jaykpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNDb250cm9sVmFsdWVfaAorI2RlZmluZSBCM0NvbnRyb2xW
YWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxv
Y2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCitjbGFzcyBDb250cm9sVmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgSnVtcDoKKyAg
ICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIE9v
cHM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBTd2l0Y2g6IAorICAg
ICAgICAgICAgLy8gVGhpcyBpcyBoZXJlIGJlY2F1c2UgU3dpdGNoVmFsdWUgaXMgYSBzdWJjbGFz
cyBvZiBDb250cm9sVmFsdWUsIHNvIHdlIHdhbnQKKyAgICAgICAgICAgIC8vIHN3aXRjaFZhbHVl
LT5hczxDb250cm9sVmFsdWU+KCkgdG8gcmV0dXJuIG5vbi1udWxsLgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+
IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICB+Q29udHJvbFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBu
dW1TdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAg
IEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fc3VjY2Vzc29yc1tpXTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaV07IH0KKyAgICBjb25zdCBTdWNjZXNz
b3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICAvLyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMu
Li4pCisgICAgeworICAgIH0KKworICAgIC8vIFN1YmNsYXNzZXMgd2lsbCBwb3B1bGF0ZSB0aGlz
LgorICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgT29wcy4KKyAgICBDb250
cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG9wY29kZSA9PSBPb3BzKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3Ig
UmV0dXJuLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHJlc3VsdCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bj
b2RlLCBWb2lkLCBvcmlnaW4sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUg
PT0gUmV0dXJuKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KKyAgICBDb250
cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIEJh
c2ljQmxvY2sqIHRhcmdldCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBv
cmlnaW4pCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEp1bXApOworICAgICAgICBt
X3N1Y2Nlc3NvcnMuYXBwZW5kKHRhcmdldCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9y
IEJyYW5jaC4KKyAgICBDb250cm9sVmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlLAorICAgICAgICBCYXNp
Y0Jsb2NrKiB5ZXMsIEJhc2ljQmxvY2sqIG5vKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29k
ZSA9PSBCcmFuY2gpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHllcyk7CisgICAgICAg
IG1fc3VjY2Vzc29ycy5hcHBlbmQobm8pOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29udHJv
bFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xh
c3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5j
eUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Zy
ZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSkKK3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkg
eworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJO
b3JtYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6
CisgICAgICAgIG91dC5wcmludCgiUmFyZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNGcmVxdWVuY3lDbGFzc19oCisjZGVmaW5lIEIzRnJlcXVlbmN5Q2xhc3NfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0g
Y2xhc3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFu
eSBoeXBvdGhlc2lzIGFib3V0IHRoZSBmcmVxdWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29u
c3RydWN0LiBUaGlzIGlzCisgICAgLy8gdGhlIGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNl
IGJhc2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAg
Ly8gV2UgZXhwZWN0IHRoYXQgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVh
Y2hlZCBzdXBlciByYXJlbHkuIEl0J3MgdmFsaWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXph
dGlvbnMgdGhhdCBwdW5pc2ggUmFyZSBjb2RlLiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1
YXRpb25zIHdoZXJlIHlvdQorICAgIC8vIGhhdmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcg
ZnJlcXVlbmN5IGNsYXNzIGZyb20gYSBtZXJnaW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4K
KyAgICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVyIGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBO
b3JtYWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVu
aXNoIFJhcmUgY29kZSB2ZXJ5IGJhZGx5LgorICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNGcmVxdWVuY3lDbGFzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsK
KwordHlwZWRlZiBHZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRC
bG9jazsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNp
bmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1
ZGUgIkIzVmFsaWRhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3Zv
aWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENDYWxsSGVscGVycyYgaml0KQorewor
ICAgIEFpcjo6Q29kZSBjb2RlOworICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBjb2RlKTsK
KyAgICBBaXI6OmdlbmVyYXRlKGNvZGUsIGppdCk7Cit9CisKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQ
cm9jZWR1cmUmIHByb2NlZHVyZSwgQWlyOjpDb2RlJiBjb2RlKQoreworICAgIGlmIChzaG91bGRW
YWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKHByb2NlZHVyZSwgImluaXRpYWwiKTsKKwor
ICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIEIzOlxu
Iik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisgICAgCisgICAgLy8gRklY
TUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CisKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJ
UigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJmaW5hbCIpOworICAgIAorICAgIGlm
IChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBiZWZvcmUgZ2VuZXJhdGlv
bjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorCisgICAgbG93ZXJU
b0Fpcihwcm9jZWR1cmUsIGNvZGUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0dlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
R2VuZXJhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJhdGVfaAorI2Rl
ZmluZSBCM0dlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2Nl
ZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgdGFrZXMgYSBC
Mzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGFuZCBnZW5lcmF0ZXMgaXQgdG8g
bWFjaGluZSBjb2RlIGJ5IGZpcnN0CisvLyBpbnRlcm5hbGx5IGNvbnZlcnRpbmcgdG8gYW4gQWly
OjpDb2RlIGFuZCB0aGVuIGdlbmVyYXRpbmcgdGhhdC4KK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJl
JiwgQ0NhbGxIZWxwZXJzJik7CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRp
bWl6ZXMgaXQgaW4tcGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2Vu
ZXJhdGUKKy8vIHRoZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6Z2VuZXJhdGUoKS4g
Tm90ZSB0aGF0IGFuIEFpcjo6Q29kZSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0aGUKKy8vIEIz
OjpQcm9jZWR1cmUsIHNvIHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCMzo6UHJvY2VkdXJl
IG91dGxpdmVzIHRoZSBBaXI6OkNvZGUuCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwg
Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM0dlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
X2gKKyNkZWZpbmUgQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCisvLyBBIGZyZXF1ZW50ZWQgYmxvY2sgaXMgYSB0dXBsZSBvZiBCYXNp
Y0Jsb2NrKiBhbmQgRnJlcXVlbmN5Q2xhc3MuIEl0J3MgdXN1YWxseSB1c2VkIGFzIGEKKy8vIHN1
Y2Nlc3NvciBlZGdlLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorY2xhc3MgR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jayB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR2VuZXJpY0ZyZXF1
ZW50ZWRCbG9jaygKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBudWxscHRyLCBGcmVxdWVu
Y3lDbGFzcyBmcmVxdWVuY3kgPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAgICAgICA6IG1f
YmxvY2soYmxvY2spCisgICAgICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQorICAgIHsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAg
ICAgICAgICAgICYmIG1fZnJlcXVlbmN5ID09IG90aGVyLm1fZnJlcXVlbmN5OworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlz
ICE9IEZyZXF1ZW50ZWRCbG9jaygpOworICAgIH0KKworICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIEJhc2ljQmxvY2sqJiBibG9jaygpIHsgcmV0
dXJuIG1fYmxvY2s7IH0KKyAgICBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3koKSBjb25zdCB7IHJl
dHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3QK
KyAgICB7CisgICAgICAgIGlmIChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFs
KQorICAgICAgICAgICAgb3V0LnByaW50KGZyZXF1ZW5jeSgpLCAiOiIpOworICAgICAgICBvdXQu
cHJpbnQocG9pbnRlckR1bXAobV9ibG9jaykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNp
Y0Jsb2NrKiBtX2Jsb2NrOworICAgIEZyZXF1ZW5jeUNsYXNzIG1fZnJlcXVlbmN5OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNJbmRleE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRl
eE1hcF9oCisjZGVmaW5lIEIzSW5kZXhNYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBtYXAgZm9yIGtleXMg
dGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nr
cy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRl
IHRvbyBtYW55IG9mIHRoZXNlIG1hcHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5CisvLyBz
cGFyc2UgaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKwordGVtcGxhdGU8
dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZT4KK2NsYXNzIEluZGV4TWFwIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBJbmRleE1hcChzaXplX3Qgc2l6ZSA9IDApCisgICAgeworICAgICAgICBt
X3ZlY3Rvci5yZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCByZXNpemUoc2l6ZV90IHNp
emUpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAg
VmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0
b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVmFsdWUmIG9wZXJhdG9y
W10oS2V5KiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5p
bmRleCgpXTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV92ZWN0
b3I7Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJbmRleFNldF9o
CisKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRl
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNl
dCBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVudCBm
b3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYgeW91
IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1ZXMgY2FuIGhh
dmUgdmVyeSBzcGFyc2UKKy8vIGluZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1ZXMu
CisKKy8vIElmIHlvdSB3YW50IGEgc2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8gSW5kZXhTZXQ8
QmFzaWNCbG9jaz4uIFNvLCBUID0gQmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citj
bGFzcyBJbmRleFNldCB7CitwdWJsaWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zZXQuc2V0
KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQqIHZhbHVlKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUg
eworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNv
bGxlY3Rpb24sIGNvbnN0IEluZGV4U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlv
bihjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNv
bnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJs
ZTo6aXRlcmF0b3IgaXRlcikKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVj
dGlvbikKKyAgICAgICAgICAgICAgICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2l0ZXIgPT0gb3RoZXIubV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5
cGUqIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxl
OjppdGVyYXRvciBtX2l0ZXI7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVj
dGlvbiwgbV9zZXQuZW5kKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xs
ZWN0aW9uVHlwZSYgbV9jb2xsZWN0aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7
CisgICAgfTsKKworICAgIC8vIEZvciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRl
eFNldC52YWx1ZXMocHJvY2VkdXJlKTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBk
bzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlw
ZT4gdmFsdWVzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAg
ICB9CisKKyAgICBjb25zdCBCaXRWZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3Nl
dDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAg
ICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5k
aWNlcygpLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFBy
ZWZpeCwgaW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0xvd2Vy
VG9BaXIuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQjNBZGRyZXNzTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzTG93ZXJpbmdNYXRjaGVy
LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIExv
d2VyVG9BaXIgeworcHVibGljOgorICAgIExvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUs
IENvZGUmIGNvZGUpCisgICAgICAgIDogdmFsdWVUb1RtcChjb2RlLnZhbHVlcygpLnNpemUoKSkK
KyAgICAgICAgLCBibG9ja1RvQmxvY2soY29kZS5zaXplKCkpCisgICAgICAgICwgdXNlQ291bnRz
KHByb2NlZHVyZSkKKyAgICAgICAgLCBhZGRyZXNzU2VsZWN0b3IoKnRoaXMpCisgICAgICAgICwg
bG93ZXJpbmdTZWxlY3RvcigqdGhpcykKKyAgICAgICAgLCBwcm9jZWR1cmUocHJvY2VkdXJlKQor
ICAgICAgICAsIGNvZGUoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBydW4oKQorICAg
IHsKKyAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1cmUpCisgICAg
ICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdID0gY29kZS5hZGRCbG9jayhibG9jay0+ZnJlcXVl
bmN5KCkpOworCisgICAgICAgIC8vIExvd2VyIGRlZnMgYmVmb3JlIHVzZXMgb24gYSBnbG9iYWwg
bGV2ZWwuIFRoaXMgaXMgYSBnb29kIGhldXJpc3RpYyB0byBsb2NrIGRvd24gYQorICAgICAgICAv
LyBob2lzdGVkIGFkZHJlc3MgZXhwcmVzc2lvbiBiZWZvcmUgd2UgZHVwbGljYXRlIGl0IGJhY2sg
aW50byB0aGUgbG9vcC4KKyAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9j
ZWR1cmUuYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0
YXRlLgorICAgICAgICAgICAgaW5zdHMucmVzaXplKDApOworICAgICAgICAgICAgCisgICAgICAg
ICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJl
Zm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxvd3MgdXMKKyAgICAgICAgICAgIC8vIHRvIG1hdGNo
IHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxv
Y2stPnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIGluc3RzLmFwcGVuZChWZWN0b3I8
SW5zdD4oKSk7CisgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gYmxvY2stPmF0KGkpOwor
ICAgICAgICAgICAgICAgIHJ1bkxvd2VyaW5nTWF0Y2hlcihjdXJyZW50VmFsdWUsIGxvd2VyaW5n
U2VsZWN0b3IpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRo
ZSBpbnN0cnVjdGlvbnMuIGluc3RzIGNvbnRhaW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28g
d2UgcHJvY2VzcworICAgICAgICAgICAgLy8gaXQgaW4gcmV2ZXJzZS4KKyAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IGluc3RzLnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIGZv
ciAoSW5zdCYgaW5zdCA6IGluc3RzW2ldKQorICAgICAgICAgICAgICAgICAgICBibG9ja1RvQmxv
Y2tbYmxvY2tdLT5hcHBlbmRJbnN0KFdURjo6bW92ZShpbnN0KSk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAg
Y29ycmVjdGx5LgorICAgICAgICAgICAgQVNTRVJUKGJsb2NrLT5zdWNjZXNzb3JzKCkgPD0gMik7
CisgICAgICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3Vj
Y2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3Vj
Y2Vzc29ycygpLmFwcGVuZChibG9ja1RvQmxvY2tbc3VjY2Vzc29yXSk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBUbXAgdG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1w
ID0gdmFsdWVUb1RtcFt2YWx1ZV07CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1w
ID0gY29kZS5uZXdUbXAoaXNJbnQodmFsdWUpID8gQXJnOjpHUCA6IEFyZzo6RlApOworICAgICAg
ICByZXR1cm4gdG1wOworICAgIH0KKworICAgIC8vIFRoaXMgZ2l2ZXMgeW91IHRoZSBhZGRyZXNz
IG9mIHRoZSBnaXZlbiBMb2FkIG9yIFN0b3JlLiBJZiBpdCdzIG5vdCBhIExvYWQgb3IgU3RvcmUs
IHRoZW4KKyAgICAvLyBpdCByZXR1cm5zIEFyZygpLgorICAgIEFyZyBhZGRyKFZhbHVlKiBtZW1v
cnlWYWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiB2YWx1ZSA9IG1lbW9yeVZhbHVl
LT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiBBcmcoKTsKKworICAgICAgICBydW5BZGRyZXNzTWF0Y2hlcih2YWx1ZS0+Y2hpbGRyZW4u
bGFzdCgpLCBhZGRyZXNzU2VsZWN0b3IpOworICAgICAgICByZXR1cm4gYWRkcmVzc1NlbGVjdG9y
LnNlbGVjdGVkQWRkcmVzcy53aXRoT2Zmc2V0KHZhbHVlLT5vZmZzZXQoKSk7CisgICAgfQorCisg
ICAgQXJnIGxvYWRBZGRyKFZhbHVlKiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICBpZiAobG9h
ZFZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkKQorICAgICAgICAgICAgcmV0dXJuIGFkZHIobG9hZFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW0oVmFsdWUq
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAgICAgICAg
ICAgcmV0dXJuIEFyZzo6SW1tKHZhbHVlLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gQXJn
KCk7CisgICAgfQorCisgICAgQXJnIGltbU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChBcmcgcmVzdWx0ID0gaW1tKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJldHVybiB0bXAodmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPE9w
Y29kZSBvcGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZl
PgorICAgIHZvaWQgYXBwZW5kQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7
CisgICAgICAgIFRtcCByZXN1bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIFRocmVlLW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIs
IGMKKyAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGMgPSBh
IE9wIGIKKworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpU
bXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0
YXRpdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAgICAgICAg
ICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9wZXJhdGlv
biBjb3VsZCBoYXZlIGFuIGltbWVkaWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAgIGlmIChp
bW0obGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKGxlZnQp
LCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGlt
bShyaWdodCkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6
VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0ocmlnaHQp
LCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8g
VHdvLW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAgICAgICAg
Ly8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEKKworICAg
ICAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGlv
biB0aGF0IGhhdmUgYSBmdXNlZCBsb2FkIG92ZXIgdGhyZWUKKyAgICAgICAgLy8gb3BlcmFuZCBm
b3Jtcy4KKyAgICAgICAgCisgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZl
KSB7CisgICAgICAgICAgICBBcmcgbGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAgICAgICAg
ICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7
CisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAg
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQXJnIHJp
Z2h0QWRkciA9IGxvYWRBZGRyKHJpZ2h0KTsKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29k
ZSwgcmlnaHRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92
ZSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRB
ZGRyLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsK
KyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGVuZChNb3Zl
LCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChyaWdodCks
IHJlc3VsdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRp
dml0eSBjb21tdXRhdGl2ZSA9IE5vdENvbW11dGF0aXZlPgorICAgIGJvb2wgdHJ5QXBwZW5kU3Rv
cmVCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQXJnIHN0
b3JlQWRkciA9IGFkZHIoY3VycmVudFZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7
CisKKyAgICAgICAgVmFsdWUqIG90aGVyVmFsdWU7CisgICAgICAgIGlmIChhZGRyKGxlZnQpID09
IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSByaWdodDsKKyAgICAgICAgZWxz
ZSBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSAmJiBhZGRyKHJpZ2h0KSA9PSBzdG9y
ZUFkZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gbGVmdDsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2Rl
LCBBcmc6OlRtcCwgc3RvcmVBZGRyLmtpbmQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG90aGVyVmFsdWUpLCBzdG9yZUFkZHIpOwor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4g
YXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9wY29k
ZSwgY3VycmVudFZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7
CisgICAgfQorICAgIAorICAgIEluZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFyZSB2
YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1ZSwg
VG1wPiB2YWx1ZVRvVG1wOworICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2lj
QmxvY2sqPiBibG9ja1RvQmxvY2s7CisKKyAgICBVc2VDb3VudHMgdXNlQ291bnRzOworCisgICAg
VmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gaW5zdHM7CisKKyAgICBWYWx1ZSogY3VycmVudFZhbHVl
OworCisgICAgLy8gVGhlIGFkZHJlc3Mgc2VsZWN0b3Igd2lsbCBtYXRjaCBhbnkgcGF0dGVybiB3
aGVyZSB0aGUgaW5wdXQgb3BlcmFuZHMgYXJlIGF2YWlsYWJsZSBhcyBUbXBzLgorICAgIC8vIEl0
IGRvZXNuJ3QgY2FyZSBhYm91dCBzaGFyaW5nLiBJdCB3aWxsIGhhcHBpbHkgZW1pdCB0aGUgc2Ft
ZSBhZGRyZXNzIGV4cHJlc3Npb24gb3ZlciBhbmQgb3ZlcgorICAgIC8vIGFnYWluIHJlZ2FyZGxl
c3Mgb2YgdGhlIGV4cHJlc3Npb24ncyBjb21wbGV4aXR5LiBUaGlzIHdvcmtzIG91dCBmaW5lLCBz
aW5jZSBhdCB0aGUgbWFjaGluZQorICAgIC8vIGxldmVsLCBhZGRyZXNzIGV4cHJlc3Npb25zIGFy
ZSBzdXBlciBjaGVhcC4gSG93ZXZlciwgdGhpcyBkb2VzIGhhdmUgYSBoYWNrIHRvIGF2b2lkCisg
ICAgLy8gInVuaG9pc3RpbmciIGFkZHJlc3MgZXhwcmVzc2lvbnMuCisgICAgY2xhc3MgQWRkcmVz
c1NlbGVjdG9yIHsKKyAgICAgICAgQWRkcmVzc1NlbGVjdG9yKExvd2VyVG9BaXImIGxvd2VyKQor
ICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBhY2NlcHRzUm9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAgICAgICAgICAg
Ly8gV2UgZG9uJ3Qgd2FudCB0byBtYXRjaCBhbiBhZGRyZXNzIGV4cHJlc3Npb24gdGhhdCBoYXMg
YWxyZWFkeSBiZWVuIGNvbXB1dGVkCisgICAgICAgICAgICAvLyBleHBsaWNpdGx5LgorICAgICAg
ICAgICAgcmV0dXJuICF2YWx1ZVRvVG1wW3Jvb3RdOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBhY2NlcHRSb290TGF0ZShWYWx1ZSopIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVl
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodmFs
dWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgcmV0cnVuIGFjY2VwdEludGVybmFscyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAg
ICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5h
bHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLmxv
Y2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0K
KyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3Bl
cmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDEo
VmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUsIFZhbHVlKiBiYXNlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAobG9nU2NhbGUtPmFzSW50KCkgPCAwIHx8IGxvZ1NjYWxlLT5hc0ludCgp
ID4gMykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzZWxlY3Rl
ZEFkZHJlc3MgPSBBcmc6OmluZGV4KAorICAgICAgICAgICAgICAgIGxvd2VyLnRtcChpbmRleCks
IGxvd2VyLnRtcChpbmRleCksIDEgPDwgbG9nU2NhbGUtPmFzSW50KCkpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MihWYWx1
ZSogYmFzZSwgVmFsdWUqIGluZGV4LCB2YWx1ZSogbG9nU2NhbGUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiB0cnlBZGRTaGlmdDEoaW5kZXgsIGxvZ1NjYWxlLCBiYXNlKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyaWdodC0+aGFzSW50MzIoKSkgeworICAgICAgICAg
ICAgICAgIC8vIFRoaXMgcHJvZHVjdGlvbiBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkgc2luY2Ug
d2UgZXhwZWN0CisgICAgICAgICAgICAgICAgLy8gTG9hZChBZGQoQHgsIEBjb25zdDEpLCBvZmZz
ZXQgPSBjb25zdDIpIHRvIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmVuZ3RoLXJlZHVjZWQKKyAgICAg
ICAgICAgICAgICAvLyB0byBMb2FkKEB4LCBvZmZzZXQgPSBjb25zdDEgKyBjb25zdDIpLgorICAg
ICAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAobGVmdCks
IHJpZ2h0LT5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KGxvd2Vy
LnRtcChsZWZ0KSwgbG93ZXIudG1wKHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5RGlyZWN0KFZhbHVlKiBhZGRyZXNzKQorICAg
ICAgICB7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIoYWRkcmVzcyk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
TG93ZXJUb0FpciYgbG93ZXI7CisgICAgICAgIEFyZyBzZWxlY3RlZEFkZHJlc3M7CisgICAgfTsK
KyAgICBBZGRyZXNzU2VsZWN0b3IgYWRkcmVzc1NlbGVjdG9yOworCisgICAgLy8gVGhpcyB3aWxs
IG1hdGNoIGNvbXBsZXggbXVsdGktdmFsdWUgZXhwcmVzc2lvbnMsIGJ1dCBvbmx5IGlmIHRoZXJl
IGlzIG5vIHNoYXJpbmcuIEZvciBleGFtcGxlLAorICAgIC8vIGl0IHdvbid0IG1hdGNoIGEgTG9h
ZCB0d2ljZSBhbmQgY2F1c2UgdGhlIGdlbmVyYXRlZCBjb2RlIHRvIGRvIHR3byBsb2FkcyB3aGVu
IHRoZSBvcmlnaW5hbAorICAgIC8vIGNvZGUganVzdCBkaWQgb25lLgorICAgIGNsYXNzIExvd2Vy
aW5nU2VsZWN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG93ZXJpbmdTZWxlY3RvcihMb3dl
clRvQWlyJiBsb3dlcikKKyAgICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIWxvd2VyLmxvY2tlZC5jb250YWlucyhyb290
KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
YWNjZXB0Um9vdExhdGUoVmFsdWUqKSB7IH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUq
IHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBJZiBvbmUgb2YgdGhlIGludGVybmFsIHRoaW5ncyBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVk
LCB0aGVuIHdlIGRvbid0IHdhbnQgdG8gY2F1c2UKKyAgICAgICAgICAgIC8vIGl0IHRvIGJlIHJl
Y29tcHV0ZWQgYWdhaW4uCisgICAgICAgICAgICBpZiAobG93ZXIudmFsdWVUb1RtcFt2YWx1ZV0p
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAg
ICAvLyBXZSByZXF1aXJlIGludGVybmFscyB0byBoYXZlIG9ubHkgb25lIHVzZSAtIHVzLgorICAg
ICAgICAgICAgaWYgKHVzZUNvdW50c1t2YWx1ZV0gIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHJldHVybiBhY2NlcHRJbnRlcm5h
bHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFjY2VwdEludGVybmFs
cygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKFZhbHVlKiB2
YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgbG93
ZXIubG9ja2VkLmFkZCh2YWx1ZSk7CisgICAgICAgICAgICBhY2NlcHRJbnRlcm5hbHNMYXRlKGFy
Z3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRl
KCkgeyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG93ZXIubG9ja2VkLmNvbnRh
aW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gYWNjZXB0T3BlcmFuZHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBi
b29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUo
QXJndW1lbnRzLi4uKSB7IH0KKworICAgICAgICBib29sIHRyeUxvYWQoVmFsdWUqIGFkZHJlc3Mp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBhZGRyKGFkZHJlc3Mp
LCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgICAg
ICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZEJpbk9wPEFkZDMy
LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxl
ZnQsIFZhbHVlKiByaWdodCwgVmFsdWUqKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KGxlZnQtPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbG93ZXIudHJ5QXBwZW5kU3RvcmVCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+KGxl
ZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmVBbmRMb2Fk
KFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIFZhbHVlKikKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGxvd2VyLnRyeUFwcGVuZFN0b3JlQmluT3A8QW5kMzIsIENvbW11
dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVN0
b3JlKFZhbHVlKiB2YWx1ZSwgVmFsdWUqKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dlci5h
cHBlbmQoTW92ZSwgbG93ZXIudG1wKHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFs
dWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCB0cnlSZXR1cm4oVmFsdWUqIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2gg
KHZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBj
YXNlIEludDY0OgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBpbW1PclRtcCh2
YWx1ZSksIEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChN
b3ZlRG91YmxlLCBsb3dlci50bXAodmFsdWUpLCBHUFJJTmZvOjpyZXR1cm5WYWx1ZUZQUik7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG93ZXIuYXBwZW5kKFJldCk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93
ZXJUb0FpciYgbG93ZXI7CisgICAgfTsKKyAgICBMb3dlcmluZ1NlbGVjdG9yIGxvd2VyaW5nU2Vs
ZWN0b3I7CisgICAgCisgICAgUHJvY2VkdXJlJiBwcm9jZWR1cmU7CisgICAgQ29kZSYgY29kZTsK
K307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGxvd2VyVG9BaXIoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KHByb2NlZHVyZSwgImxvd2VyVG9BaXIiKTsKKyAgICBMb3dlclRvQWlyIGxvd2VyVG9BaXIocHJv
Y2VkdXJlLCBjb2RlKTsKKyAgICBsb3dlclRvQWlyLnJ1bigpOworfQorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzTG93ZXJUb0Fpcl9oCisjZGVmaW5lIEIzTG93ZXJUb0Fpcl9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2Vk
dXJlOworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKworLy8gVGhpcyBsb3dlcnMgdGhl
IGN1cnJlbnQgQjMgcHJvY2VkdXJlIHRvIGFuIEFpciBjb2RlLgorCit2b2lkIGxvd2VyVG9BaXIo
UHJvY2VkdXJlJiwgQWlyOjpDb2RlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzTG93ZXJUb0Fpcl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIu
cGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
cmluZ01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBMb3dlcmluZ01hdGNo
ZXIKKworIyBUaGVzZSBydWxlcyBhcmUgY29uc2lkZXJlZCBpbiBhIGNhc2NhZGUsIHN0YXJ0aW5n
IGF0IHRoZSB0b3AuIEl0J3MgaW1wbGVuZW50ZWQgdXNpbmcgc3dpdGNoCisjIHN0YXRlbWVudHMg
d2hlcmV2ZXIgcG9zc2libGUuCisKKyMgTm90ZTogYWRkaW5nIG1vcmUgcnVsZXMgdG8gdGhpcyBt
YXRjaGVyIGlzIGFuIGV4Y2VsbGVudCB3YXkgb2YgaW1wcm92aW5nIHBlcmZvcm1hbmNlIQorCitM
b2FkID0gTG9hZChhZGRyZXNzKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK1N0b3JlQWRk
TG9hZCA9IFN0b3JlKEFkZChsZWZ0LCByaWdodCksIGFkZHJlc3MpCitTdG9yZUFuZExvYWQgPSBT
dG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRk
cmVzcykKKworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1
ZTo6fk1lbW9yeVZhbHVlKCkKK3sKK30KKwordm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5w
cmludCgib2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNN
ZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIE1lbW9yeVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNl
IExvYWRGbG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAg
ICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNh
c2UgU3RvcmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1vcnlW
YWx1ZSgpOworCisgICAgaW50cHRyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55
IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJlcyB0
aGUgcmV0dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2lu
dGVyLAorICAgICAgICBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4
LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2Fk
OFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6
CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gRG91YmxlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2Fz
ZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBB
U1NFUlQodHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2Fk
cyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIs
IGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgb3Bj
b2RlID09IExvYWRGbG9hdCA/IERvdWJsZSA6IEludDMyLCBvcmlnaW4sIHBvaW50ZXIpCisgICAg
ICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJM
RUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExv
YWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZa
OgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
c3RvcmVzLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2Rl
IG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwKKyAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2Rl
LCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBj
YXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBj
YXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
TWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM09w
Y29kZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKQoreworICAg
IHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBOb3A6CisgICAgICAgIG91dC5wcmludCgiTm9w
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJp
bnQoIklkZW50aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0MzI6CisgICAg
ICAgIG91dC5wcmludCgiQ29uc3QzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25z
dDY0OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ29uc3REb3VibGU6CisgICAgICAgIG91dC5wcmludCgiQ29uc3REb3VibGUiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBvdXQucHJpbnQoIlN0
YWNrU2xvdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAgICAg
ICAgb3V0LnByaW50KCJBcmd1bWVudFJlZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBG
cmFtZVBvaW50ZXI6CisgICAgICAgIG91dC5wcmludCgiRnJhbWVQb2ludGVyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFkZDoKKyAgICAgICAgb3V0LnByaW50KCJBZGQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3ViOgorICAgICAgICBvdXQucHJpbnQoIlN1YiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNdWw6CisgICAgICAgIG91dC5wcmludCgiTXVsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIERpdjoKKyAgICAgICAgb3V0LnByaW50KCJEaXYiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAgIG91dC5wcmludCgi
Q2hpbGxEaXYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTW9kOgorICAgICAgICBvdXQu
cHJpbnQoIk1vZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRBbmQ6CisgICAgICAg
IG91dC5wcmludCgiQml0QW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdE9yOgor
ICAgICAgICBvdXQucHJpbnQoIkJpdE9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJp
dFhvcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRYb3IiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgU2hsOgorICAgICAgICBvdXQucHJpbnQoIlNobCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBTU2hyOgorICAgICAgICBvdXQucHJpbnQoIlNTaHIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgWlNocjoKKyAgICAgICAgb3V0LnByaW50KCJaU2hyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFNFeHQ4OgorICAgICAgICBvdXQucHJpbnQoIlNFeHQ4Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0MTYi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDMyOgorICAgICAgICBvdXQucHJpbnQo
IlNFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIG91
dC5wcmludCgiWkV4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZSb3VuZDoKKyAg
ICAgICAgb3V0LnByaW50KCJGUm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSVRv
RDoKKyAgICAgICAgb3V0LnByaW50KCJJVG9EIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IERUb0kzMjoKKyAgICAgICAgb3V0LnByaW50KCJEVG9JMzIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTm90RXF1YWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgIG91dC5wcmludCgi
TGVzc1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAg
ICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
TGVzc0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NFcXVhbCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlckVx
dWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlOgorICAgICAgICBvdXQucHJp
bnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJlbG93OgorICAgICAgICBv
dXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlRXF1YWw6
CisgICAgICAgIG91dC5wcmludCgiQWJvdmVFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBCZWxvd0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkJlbG93RXF1YWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4WiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIG91dC5wcmludCgi
TG9hZDhTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIG91
dC5wcmludCgiTG9hZDE2WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZTOgor
ICAgICAgICBvdXQucHJpbnQoIkxvYWQxNlMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
TG9hZEZsb2F0OgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGbG9hdCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlOCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBvdXQucHJpbnQoIlN0
b3JlMTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAg
b3V0LnByaW50KCJTdG9yZUZsb2F0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3Jl
OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENDYWxsOgorICAgICAgICBvdXQucHJpbnQoIkNDYWxsIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFBhdGNocG9pbnQ6CisgICAgICAgIG91dC5wcmludCgiUGF0Y2hwb2ludCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgb3V0LnByaW50KCJDaGVj
a0FkZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgb3V0
LnByaW50KCJDaGVja1N1YiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja011bDoK
KyAgICAgICAgb3V0LnByaW50KCJDaGVja011bCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDaGVjazoKKyAgICAgICAgb3V0LnByaW50KCJDaGVjayIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBvdXQucHJpbnQoIlVwc2lsb24iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUGhpOgorICAgICAgICBvdXQucHJpbnQoIlBoaSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBKdW1wOgorICAgICAgICBvdXQucHJpbnQoIkp1bXAiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBvdXQucHJpbnQoIkJyYW5j
aCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgIG91dC5wcmlu
dCgiU3dpdGNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJldHVybjoKKyAgICAgICAg
b3V0LnByaW50KCJSZXR1cm4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT29wczoKKyAg
ICAgICAgb3V0LnByaW50KCJPb3BzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2Rl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNv
ZGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDogaW50
MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZvciB3aGVu
IHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAgLy8gUG9s
eW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElkZW50
aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMuIENv
bnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAgIC8v
IHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29uc3Rh
bnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2NCwK
KyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMg
aXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxl
c3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0
YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAgICAv
LyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3RhY2tT
bG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmll
d2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVnYXJk
bGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21waWxl
ciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0aGUg
dmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmluZyB0
aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBhIGNh
bGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBUaGUg
cmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3IgRG91
YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUgcG9p
bnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0IHdp
bGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZlYXQ6
IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5IGZv
ciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNpYyB3
aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAgICAv
LyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIsCisK
KyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAg
ICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2VyIG1h
dGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2UgSlMg
KHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhvciwK
KyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1Y2gu
CisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4dDE2
LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwKKyAg
ICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3VuZCwK
KyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAgIC8v
IFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAvLyBQ
b2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJldHVy
bnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFsKHgs
IDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdyZWF0
ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJbnRl
Z2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAgICBC
ZWxvdywKKyAgICBBYm92ZUVxdWFsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1lbW9yeSBs
b2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0eXBlLiBU
aGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgorICAgIExv
YWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAgIC8vIFRo
aXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMgcmV0dXJuIHdo
YXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8gTWVtb3J5IHN0
b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4gVGhlc2UgdXNl
IE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAgU3Rv
cmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2YWx1ZToKKyAg
ICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50
MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhpcyBpcyBhIHJl
Z3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVtIEMgY2FsbGlu
ZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIHBh
c3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAvLyBUaGlzIGlz
IGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRoaXMgaXMgdmll
d2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVtaXRzIGNvZGUg
dmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1p
dCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBhbG9uZyB3aXRo
IGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3QgYmUgcGFzc2Vk
LgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQg
aXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0CisgICAgLy8gdGhh
dCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhlIHRvcCBvZiB0
aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgorICAgIFBhdGNo
cG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4g
TGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24KKyAgICAvLyBj
YWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFmdGVyIHRoZSBl
cGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20gdGhlIGNoZWNr
LCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBzdXBwbHkgYSBz
dGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBqdW1wIGJh
Y2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBzaW5jZSB0aGUg
Y29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24gb2YgdGhlc2Ug
aW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4uIEZvcgorICAg
IC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8vCisgICAgLy8g
YSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8KKyAg
ICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8KKyAgICAvLyBh
ID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAvLworICAgIC8v
IFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQgYnkgdGhlIHR3
byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2FsbGJhY2tzLiBZ
ZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFyZSBkaWZmZXJl
bnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3QgQ2hlY2tBZGQg
ZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9zc2libHkgdGFr
ZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVja0FkZCdzIGNh
bGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tTdWIsCisgICAg
Q2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0aGUgQ2hlY2tW
YWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMgYQorICAgIC8v
IHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFuIEludDMy
IGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1bGwgYnJhbmNo
IGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1wcyB0
byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ssCisKKyAgICAv
LyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBzaWxvbiwgLy8g
VGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisgICAgLy8gSnVt
cC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAgCisgICAgLy8g
UG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gQnJhbmNoZXMg
aWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZhbHVlIGNsYXNz
LCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNjZXNzb3IuCisg
ICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJbnQzMiBv
ciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNoLAorCisgICAg
Ly8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRoZWlyIHJldHVy
biB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBlLiBVc2VzIHRo
ZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhpcyBpcyBhIHRl
cm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZS4gVXNlcyB0
aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK2lubGluZSBib29sIGlzQ2hl
Y2tNYXRoKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNl
IENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpCMzo6T3Bjb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9yaWdpbigiLCBSYXdQb2ludGVyKG1fZGF0
YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNPcmlnaW5faAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2hvZXZlciBnZW5lcmF0ZXMgQjNJUiBjYW4g
Y2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZhbHVlcy4gV2hlbiB5b3UgZG8gdGhpcywgQjMgd2ls
bCBiZSBhYmxlIHRvCisvLyBhY2NvdW50LCBkb3duIHRvIHRoZSBtYWNoaW5lIGNvZGUsIHdoaWNo
IGluc3RydWN0aW9uIGNvcnJlc3BvbmRzIHRvIHdoaWNoIG9yaWdpbi4gQjMKKy8vIHRyYW5zZm9y
bWF0aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdpbnMgY2FyZWZ1bGx5LiBJdCdzIGFuIGVycm9yIHRv
IHdyaXRlIGEgdHJhbnNmb3JtYXRpb24gdGhhdAorLy8gZWl0aGVyIGRyb3BzIE9yaWdpbnMgb3Ig
bGllcyBhYm91dCB0aGVtLgorY2xhc3MgT3JpZ2luIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBP
cmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9IG51bGxwdHIpCisgICAgICAgIDogbV9kYXRhKGRhdGEp
CisgICAgeworICAgIH0KKworICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBt
X2RhdGE7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJp
dmF0ZToKKyAgICBjb25zdCB2b2lkKiBtX2RhdGE7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM09yaWdpbl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3Bl
Y2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2Ug
QWlyOworCitQYXRjaHBvaW50U3BlY2lhbDo6UGF0Y2hwb2ludFNwZWNpYWwoKQoreworfQorCitQ
YXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKCkKK3sKK30KKwordm9pZCBQYXRj
aHBvaW50U3BlY2lhbDo6Zm9yRWFjaEFyZygKKyAgICBJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRM
YW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaWYgKGluc3Qu
b3JpZ2luLT50eXBlKCkgPT0gVm9pZCkgeworICAgICAgICBmb3JFYWNoQXJnSW1wbCgwLCAxLCBp
bnN0LCBjYWxsYmFjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYWxsYmFjayhp
bnN0LmFyZ3NbMV0sIEFyZzo6RGVmLCBpbnN0Lm9yaWdpbi0+YWlyVHlwZSgpKTsKKyAgICBmb3JF
YWNoQXJnSW1wbCgwLCAyLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgUGF0Y2hwb2ludFNw
ZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUo
KSA9PSBWb2lkKQorICAgICAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMSwgaW5zdCk7CisKKyAg
ICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoaW5zdC5hcmdzWzFdLmtpbmQoKSAhPSBBcmc6OlRtcCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghaW5zdC5hcmdzWzFdLmlzVHlwZShpbnN0Lm9yaWdpbi0+YWlyVHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDIsIGlu
c3QpOworfQorCitib29sIFBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiBpbnN0
LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBW
b2lkKQorICAgICAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKDAsIDEsIGluc3QsIGFyZ0luZGV4
KTsKKworICAgIGlmIChhcmdJbmRleCA9PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKDAsIDIsIGluc3QsIGFyZ0luZGV4KTsKK30KKworQ0Nh
bGxIZWxwZXJzOjpKdW1wIFBhdGNocG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSgKKyAgICBJbnN0JiBp
bnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpCit7Cisg
ICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0g
dmFsdWUtPnN0YWNrbWFwKCk7CisgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgIFZlY3RvcjxW
YWx1ZVJlcD4gcmVwczsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOworICAgIGlmIChpbnN0Lm9y
aWdpbi0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29u
dGV4dC5jb2RlLCBpbnN0LmFyZ3Nbb2Zmc2V0KytdKSk7CisgICAgYXBwZW5kUmVwc0ltcGwoY29u
dGV4dCwgb2Zmc2V0LCBpbnN0LCByZXBzKTsKKyAgICAKKyAgICBTdGFja21hcDo6R2VuZXJhdGlv
blBhcmFtcyBwYXJhbXM7CisgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgcGFyYW1zLnN0
YWNrbWFwID0gc3RhY2ttYXA7CisgICAgcGFyYW1zLnJlcHMgPSByZXBzOworICAgIHBhcmFtcy51
c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVyczsKKworICAgIHN0YWNrbWFw
LT5tX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisjZGVmaW5lIEIzUGF0Y2hw
b2ludFNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tt
YXBTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlz
IGlzIGEgc3BlY2lhbCB0aGF0IHJlY29nbml6ZXMgdGhhdCB0aGVyZSBhcmUgdHdvIHVzZXMgb2Yg
UGF0Y2hwb2ludDogVm9pZCBhbmQgYW5kIG5vbi1Wb2lkLgorLy8gSW4gdGhlIFZvaWQgY2FzZSwg
dGhlIHN5bnRheCBvZiB0aGUgQWlyIFBhdGNoIGluc3RydWN0aW9uIGlzOgorLy8KKy8vICAgICBQ
YXRjaCAmcGF0Y2hwb2ludCwgYXJncy4uLgorLy8KKy8vIFdoZXJlICJhcmdzLi4uIiBhcmUgdGhl
IGxvd2VyZWQgYXJndW1lbnRzIHRvIHRoZSBQYXRjaHBvaW50IGluc3RydWN0aW9uLiBJbiB0aGUg
bm9uLVZvaWQgY2FzZQorLy8gd2Ugd2lsbCBoYXZlOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmdzLi4uCisKK2NsYXNzIFBhdGNocG9pbnRTcGVjaWFsIDogcHVibGlj
IEFpcjo6U3BlY2lhbCB7CitwdWJsaWM6CisgICAgUGF0Y2hwb2ludFNwZWNpYWwoKTsKKyAgICB2
aXJ0dWFsIH5QYXRjaHBvaW50U3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JF
YWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJp
ZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkg
b3ZlcnJpZGU7CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJh
dGUgdGhlIGhpZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0Cisg
ICAgLy8gZ2VuZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIEND
YWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbGVwcnMmLCBBaXI6
OkdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFNwZWNpYWxf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBv
aW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworUGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9p
ZCBQYXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50VmFsdWVfaAorI2RlZmluZSBCM1BhdGNocG9p
bnRWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0
Y2hwb2ludDsgfQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3Rh
Y2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIFBhdGNocG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3Jp
Z2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luLCBjaGlsZHJlbikKKyAgICB7CisgICAgfQorfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNQYXRjaHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIK
KyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBj
aGFyKiBuYW1lKQorICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICwgbV9uYW1lKG5h
bWUpCit7CisgICAgaWYgKHNob3VsZER1bXBJUkF0RWFjaFBhaHNlKCkpIHsKKyAgICAgICAgZGF0
YUxvZygiQjMgYmVmb3JlICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1
cmUpOworICAgIH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAg
ICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJpbmcocHJvY2VkdXJlKTsKK30KKworUGhhc2VTY29wZTo6
flBoYXNlU2NvcGUoKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkK
KyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlLCBtX25hbWUsIG1fZHVtcEJlZm9yZS5kYXRhKCkp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BoYXNlU2NvcGVfaAorI2RlZmluZSBCM1BoYXNlU2Nv
cGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOwor
CitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaGFzZVNjb3Bl
KTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIG5hbWUp
OworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6
CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7Cisg
ICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BoYXNlU2NvcGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisj
aW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQorewor
fQorCitQcm9jZWR1cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1
cmU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJh
c2ljQmxvY2s+IGJsb2NrID0gc3RkOjptYWtlX3VuaXF1ZTxCYXNpY0Jsb2NrPihtX2Jsb2Nrcy5z
aXplKCksIGZyZXF1ZW5jeSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7
CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQo
ZGVlcER1bXAoYmxvY2spKTsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJs
b2Nrc0luUHJlT3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0OworICAg
IEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChibG9jaygwKSk7Cisg
ICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5u
dW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrLT5z
dWNjZXNzb3JCbG9jayhpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3Rv
cjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcigpCit7CisgICAgVmVj
dG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgUG9zdE9yZGVyQmxvY2tXb3JrbGlzdCB3b3Jr
bGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsKKyAgICB3aGlsZSAoQmxvY2tXaXRo
T3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRl
cikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAgICAgICAgICAgd29ya2xpc3QucHVzaFBv
c3QoaXRlbS5ibG9jayk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVtLmJsb2Nr
LT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChp
dGVtLmJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBQb3N0T3JkZXI6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0uYmxvY2sp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvL0VOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1Byb2NlZHVyZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgQmFzaWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisKKyAgICBQcm9jZWR1cmUoKTsKKyAgICB+UHJvY2VkdXJlKCk7CisKKyAg
ICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0
ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICA6
IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVu
c2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAg
ICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9
IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5k
ZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmRO
ZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXgg
PCBtX3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgpKQorICAgICAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gaW5leDsKKyAgICAgICAgfQor
CisgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9j
a3NJblByZU9yZGVyKCk7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRl
cigpOworCisgICAgY2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAg
ICBWYWx1ZXNDb2xsZWN0aW9uKFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBt
X3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNs
YXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKToK
KyAgICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAg
LCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGl0ZXJhdG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAg
ICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBW
YWx1ZSogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9wcm9jZWR1cmUtPmJsb2NrKG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhl
ci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBw
cml2YXRlOgorCisgICAgICAgICAgICBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICAg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAwKTsgfQorICAgICAgICBp
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgbV9wcm9j
ZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0KKyAgICAgICAgVmFsdWUq
IGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tp
bmRleF07IH0KKyAgICAgICAgVmFsdWUqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBQ
cm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZh
bHVlcygpIHsgcmV0dXJuIFZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKK3ByaXZhdGU6Cisg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQ
cm9jZWR1cmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2Nl
ZHVyZUlubGluZXNfaAorI2RlZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2Vk
dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogUHJvY2Vk
dXJlOjphZGQoQXJndWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxW
YWx1ZVR5cGU+IHZhbHVlKG5ldyBWYWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1bWVudHMu
Li4pKTsKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgIG1fdmFsdWVz
LmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN0YWNrU2xvdEtpbmQuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdU
RiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgU3RhY2tTbG90S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkg
eworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgorICAgICAgICBvdXQucHJpbnQoIkxv
Y2tlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1v
dXM6CisgICAgICAgIG91dC5wcmludCgiQW5vbnltb3VzIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tlZCBzdGFjayBz
bG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2Ug
aW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBU
aGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNr
CisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBj
b3VsZCBzaGFyZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRlZCB0aGF0IHRo
ZXkgYXJlbid0IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29tcGlsZXIgc3Rp
bGwgaGFzIHRvIGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJlIGVzY2FwZWQK
KyAgICAvLyBleHBsaWNpdGx5IGluIElSLgorICAgIEFub255bW91cworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3RhY2tTbG90S2lu
ZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzU3RhY2tTbG90S2luZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N0
YWNrU2xvdFZhbHVlOjp+U3RhY2tTbG90VmFsdWUoKQoreworfQorCit2b2lkIFN0YWNrU2xvdFZh
bHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
Ynl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBraW5kID0gIiwgbV9raW5kKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDgzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCisjZGVmaW5lIEIzU3Rh
Y2tTbG90VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK25hbWVzcGFjZSBBaXIgeworY2xhc3MgU3RhY2tTbG90OworfSAvLyBuYW1l
c3BhY2UgQWlyCisKK2NsYXNzIFN0YWNrU2xvdFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29k
ZSA9PSBTdGFja1Nsb3Q7IH0KKworICAgIH5TdGFja1Nsb3RWYWx1ZSgpOworCisgICAgdW5zaWdu
ZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90
S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICAvLyBUaGlzIGdldHMg
YXNzaWduZWQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkg
cGluIHN0YWNrIHNsb3RzLiBVc2UgdGhlCisgICAgLy8gc2V0IG1ldGhvZCB0byBkbyB0aGF0Lgor
ICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQ
OyB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBtZWFuaW5nbGVzcyB1bmxlc3MgdGhlIHN0
YWNrIHNsb3QgaXMgTG9ja2VkLgorICAgIHZvaWQgc2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZh
bHVlKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN0YWNrU2xv
dFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6ZSwg
U3RhY2tTbG90S2luZCBraW5kKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBv
aW50ZXIoKSwgb3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAg
ICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAoMCkKKyAgICB7CisgICAg
fQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsK
KyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90
VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3Rh
Y2ttYXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit2b2lkIFN0YWNrbWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KAorICAgICAgICAie29wYXF1ZSA9ICIsIFJhd1BvaW50ZXIobV9vcGFx
dWUpLCAiLCByZXBzID0gIiwgbGlzdER1bXAobV9yZXBzKSwKKyAgICAgICAgIiwgZ2VuZXJhdG9y
ID0gIiwgUmF3UG9pbnRlcihtX2dlbmVyYXRvci5nZXQoKSksICIsIGNsb2JiZXJlZCA9ICIsIG1f
Y2xvYmJlcmVkLAorICAgICAgICAiLCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJz
LCAifSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21h
cF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2lu
Y2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVk
ZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIENoZWNrU3BlY2lhbDsKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVl
OworCitjbGFzcyBTdGFja21hcCB7CitwdWJsaWM6CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJh
bXMgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBWYWx1ZSBjb250YWluaW5nIHRoZSBzdGFja21h
cC4KKyAgICAgICAgVmFsdWUqIHZhbHVlOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNr
bWFwLgorICAgICAgICBTdGFja21hcCogc3RhY2ttYXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxs
cyB5b3UgdGhlIGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4K
KyAgICAgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMg
eW91IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVz
ZWRSZWdpc3RlcnM7CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVu
Y3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVk
ZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0
YWNrbWFwKCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUgb3BhcXVlIGRhdGEgdG8g
aWRlbnRpZnkgdGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBhIFN0YWNrbWFw
LXVzaW5nIFZhbHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFuZCBlYWNoIGR1cGxpY2F0
ZSBtYXkgZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gVGhpcwor
ICAgIC8vIGFsbG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBiZSBhYmxlIHRvIHJlZmVy
IGJhY2sgdG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAvLyB3ZSB3
ZXJlIHVzaW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBzZXRPcGFxdWUodm9pZCog
cGFyYW1ldGVyKQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJhbWV0ZXI7CisgICAgfQor
ICAgIHZvaWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisKKyAgICAvLyBD
b252ZW5pZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJz
LgorICAgIHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAg
c2V0T3BhcXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAgICB9CisgICAgc2l6ZV90
IG9wYXF1ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHNpemVfdD4ob3BhcXVl
KCkpOyB9CisKKyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQg
dXNlcyB0aGlzIFN0YWNrbWFwLiBJbiBjYXNlIG9mIGEgUGF0Y2hwb2ludCB0aGF0CisgICAgLy8g
cmV0dXJucyBhIHZhbHVlLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHJlc3VsdCB2YWx1ZS4g
SW4gYWxsIG90aGVyIGNhc2VzLCBpbmRleCB6ZXJvIHJlZmVycworICAgIC8vIHRvIHRoZSBmaXJz
dCBhcmd1bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90IGNv
bnN0cmFpbmFibGUuIEZvciBleGFtcGxlLAorICAgIC8vIGluIGEgQ2hlY2tBZGQgdmFsdWUsIGl0
IHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEgQ2hl
Y2sgdmFsdWUsIGl0CisgICAgLy8gd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGV4
IDAuIEJ1dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBjYW4K
KyAgICAvLyBkZXBlbmQgb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmlsbGVk
IGluLgorICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYg
cmVwKQorICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXplKCkpCisgICAg
ICAgICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhdID0g
cmVwOworICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0KQor
ICAgIHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICBjb25z
dCBSZWdpc3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVyZWQ7IH0K
KworICAgIHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcikKKyAg
ICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFz
azxHZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVj
a1NwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNzIFN0YWNrbWFwU3BlY2lhbDsKKyAgICAKKyAgICB2
b2lkKiBtX29wYXF1ZSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsK
KyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBtX2Ns
b2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7IC8vIFN0YWNrbWFwcyBj
b3VsZCBiZSBmdXJ0aGVyIGR1cGxpY2F0ZWQgYnkgQWlyLCBidXQgdGhhdCdzIHVubGlrZWx5LCBz
byB3ZSBqdXN0IG1lcmdlIHRoZSB1c2VkIHJlZ2lzdGVycyBzZXRzIGlmIHRoYXQgd2VyZSB0byBo
YXBwZW4uCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNw
ZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCitTdGFja21hcFNwZWNpYWw6OlN0YWNr
bWFwU3BlY2lhbChjb25zdCBjaGFyKiBuYW1lKQorICAgIDogU3BlY2lhbChuYW1lKQoreworfQor
CitTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwoKQoreworfQorCit2b2lkIFN0YWNr
bWFwU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiBpbnN0LCBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsK
KyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIC8vIEZJ
WE1FOiBJZiB0aGUgSW5zdCB0aGF0IHVzZXMgdGhlIFN0YWNrbWFwU3BlY2lhbCBnZXRzIGR1cGxp
Y2F0ZWQsIHRoZW4gd2UgZW5kIHVwIG1lcmdpbmcgdXNlZAorICAgIC8vIHJlZ2lzdGVyIHNldHMg
ZnJvbSBtdWx0aXBsZSBwbGFjZXMuIFRoaXMgY3VycmVudGx5IHdvbid0IGhhcHBlbiBzaW5jZSBB
aXIgZG9lc24ndCBoYXZlIHRhaWxkdXAKKyAgICAvLyBvciB0aGluZ3MgbGlrZSB0aGF0LiBCdXQg
bWF5YmUgZXZlbnR1YWxseSBpdCBjb3VsZCBiZSBhIHByb2JsZW0uCisgICAgc3RhY2ttYXAtPm1f
dXNlZFJlZ2lzdGVycy5tZXJnZSh1c2VkUmVnaXN0ZXJzKTsKK30KKworY29uc3QgUmVnaXN0ZXJT
ZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmIGluc3QpCit7Cisg
ICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0g
dmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICByZXR1cm4gc3RhY2ttYXAtPmNsb2JiZXJlZCgpOwor
fQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCisgICAgdW5zaWduZWQg
bnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYg
aW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNr
KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhh
dCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Mu
c2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVu
LnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUo
KSAtIG51bUlnbm9yZWRBaXJBcmdzID09IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgLSBudW1JZ25v
cmVkQjNBcmdzKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdz
LnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3M7ICsraSkgeworICAgICAgICBBcmcmIGFyZyA9IGlu
c3QuYXJnc1tpICsgbnVtSWdub3JlZEIzQXJnc107CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZh
bHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEFpckFyZ3MpOworCisgICAgICAgIGNhbGxiYWNrKGFy
ZywgQXJnOjpVc2UsIEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSk7CisgICAgfQor
fQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNWYWxpZEltcGwoCisgICAgdW5zaWduZWQgbnVt
SWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFyZ0FyZ3MsCisgICAgSW5zdCYgaW5z
dCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIC8vIENoZWNrIHRo
YXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdz
LnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJl
bi5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CisKKyAgICBTdGFja21hcCogc3RhY2ttYXAg
PSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAvLyBG
b3IgdGhlIEluc3QgdG8gYmUgdmFsaWQsIGl0IG5lZWRzIHRvIGhhdmUgdGhlIHJpZ2h0IG51bWJl
ciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWly
QXJncyAhPSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUmVnYXJkbGVzcyBvZiBjb25zdHJhaW50cywgc3Rh
Y2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1aXJlbWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4g
Rm9yCisgICAgLy8gZXhhbXBsZSwgeW91IGNhbid0IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFkZHJl
c3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29uZGl0aW9ucyBhcyB3ZWxsIGFzIHRoZQorICAgIC8v
IGFyZ3VtZW50IHR5cGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9
IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7CisgICAgICAgIEFyZyYgYXJnID0g
aW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc107CisgICAgICAgIAorICAgICAgICBzd2l0
Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgY2FzZSBB
cmc6OkltbToKKyAgICAgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICBjYXNlIEFyZzo6U3Rh
Y2s6CisgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgYnJlYWs7IC8vIE9L
CisgICAgICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0g
VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSAmJgorICAgICAgICAgICAgICAgIGFyZy5i
YXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkp
OworCisgICAgICAgIGlmICghYXJnLmlzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGNvbnN0cmFpbnRzIGhhcyB0byBi
ZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBCMyBjaGlsZHJlbi4KKyAgICBBU1NFUlQo
c3RhY2ttYXAtPm1fcmVwcy5zaXplKCkgPD0gdmFsdWUtPmNoaWxkcmVuLnNpemUoKSk7CisKKyAg
ICAvLyBWZXJpZnkgYW55IGV4cGxpY2l0bHkgc3VwcGxpZWQgY29uc3RyYWludHMuCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEIzQXJnczsgaSA8IHN0YWNrbWFwLT5tX3JlcHMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkpOworICAg
ICAgICBWYWx1ZVJlcCYgcmVwID0gc3RhY2ttYXAtPm1fcmVwc1tpXTsKKyAgICAgICAgQXJnJiBh
cmcgPSBpbnN0LmFyZ3NbaSAtIG51bUlnbm9yZWRCM0FyZ3MgKyBudW1JZ25vcmVkQWlyQXJnc107
CisKKyAgICAgICAgc3dpdGNoIChyZXAua2luZCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6
OkFueToKKyAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgdmVyaWZpZWQgdGhpcyBhYm92ZS4KKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6Cisg
ICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoK
KyAgICAgICAgICAgIGlmIChhcmcgIT0gVG1wKHJlcC5yZWcoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6
OlN0YWNrOgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNl
bnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAg
ICBpZiAoYXJnICE9IEFyZzo6Y2FsbEFyZyhyZXAub2Zmc2V0RnJvbVNQKCkpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZh
bHVlUmVwOjpDb25zdGFudDoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5w
dXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9
CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwoCisgICAgdW5zaWduZWQg
bnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYg
aW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmln
aW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICB1
bnNpZ25lZCBzdGFja21hcEFyZ0luZGV4ID0gYXJnSW5kZXggLSBudW1JZ25vcmVkQWlyQXJncyAr
IG51bUlnbm9yZWRCM0FyZ3M7CisKKyAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSBzdGFja21h
cC0+bV9yZXBzLnNpemUoKSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2Fz
IG5vIGNvbnN0cmFpbnQuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAv
LyBXZSBvbmx5IGFkbWl0IHN0YWNrIGZvciBBbnkncywgc2luY2UgU3RhY2sgaXMgbm90IGEgdmFs
aWQgaW5wdXQgY29uc3RyYWludCwgYW5kIFN0YWNrQXJndW1lbnQKKyAgICAvLyB0cmFuc2xhdGVz
IHRvIGEgQ2FsbEFyZyBpbiBBaXIuCisgICAgaWYgKHN0YWNrbWFwLT5tX3JlcHNbc3RhY2ttYXBB
cmdJbmRleF0ua2luZCgpID09IEFueSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgKKyAg
ICBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIElu
c3QmIGluc3QsIFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBudW1JZ25vcmVkQXJnczsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAg
cmVzdWx0LmFwcGVuZChyZXBGb3JBcmcoY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbaV0pKTsKK30K
KworVmFsdWVSZXAgU3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JBcmcoQ29kZSYgY29kZSwgY29uc3Qg
QXJnJiBhcmcpCit7CisgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgY2FzZSBUbXA6Cisg
ICAgICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgSW1tOgorICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6
Y29uc3RhbnQoYXJnLnZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFkZHI6Cisg
ICAgICAgIGlmIChhcmcuYmFzZSgpID09IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAg
ICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkpOworICAgICAgICBB
U1NFUlQoYXJnLmJhc2UoKSA9PSBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJh
bWVTaXplKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gVmFsdWVSZXAoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzU3RhY2ttYXBTcGVjaWFsX2gKKyNkZWZpbmUgQjNTdGFja21hcFNwZWNp
YWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNp
bmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CisvLyBUaGlzIGlzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lhbHMgdGhhdCBoYXZlIHN0YWNrbWFw
cy4gTm90ZSB0aGF0IGl0IGNhbiBmaW5kIHRoZSBTdGFja21hcCBieQorLy8gYXNraW5nIGZvciB0
aGUgSW5zdCdzIG9yaWdpbi4gSGVuY2UsIHRoZXNlIG9iamVjdHMgZG9uJ3QgbmVlZCB0byBldmVu
IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlCisvLyBTdGFja21hcC4KKworY2xhc3MgU3RhY2ttYXBT
cGVjaWFsIDogcHVibGljIEFpcjo6U3BlY2lhbCB7CitwdWJsaWM6CisgICAgU3RhY2ttYXBTcGVj
aWFsKCk7CisgICAgdmlydHVhbCB+U3RhY2ttYXBTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQWlyOjpJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQm
KSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEFp
cjo6SW5zdCYpIG92ZXJyaWRlOworCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3Zl
cnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1h
bnkgc29tZQorICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KKworICAgIHZv
aWQgZm9yRWFjaEFyZ0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVu
c2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCBjb25zdCBTY29w
ZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jik7CisgICAgYm9vbCBpc1ZhbGlk
SW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdu
b3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYpOworICAgIGJvb2wgYWRtaXRzU3RhY2tJ
bXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25v
cmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisKKyAgICAvLyBBcHBlbmRzIHRoZSBy
ZXBzIGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0YXJ0aW5nIHdpdGggbnVtSWdub3JlZEFyZ3MsIHRv
IHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgdm9pZCBhcHBlbmRSZXBzSW1wbChBaXI6OkdlbmVyYXRp
b25Db250ZXh0JiwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxW
YWx1ZVJlcD4mKTsKKworICAgIHN0YXRpYyBWYWx1ZVJlcCByZXBGb3JBcmcoQWlyOjpDb2RlJiwg
Y29uc3QgQWlyOjpBcmcmKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rp
b24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3VjY2Vzc29y
Q29sbGVjdGlvbl9oCisjZGVmaW5lIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBp
cyBhIGdlbmVyaWMgd3JhcHBlciBhcm91bmQgbGlzdHMgb2YgZnJlcXVlbnRlZCBibG9ja3MsIHdo
aWNoIGdpdmVzIHlvdSBqdXN0IHRoZSBibG9ja3MuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2lj
QmxvY2ssIHR5cGVkZWYgU3VjY2Vzc29yTGlzdD4KK2NsYXNzIFN1Y2Nlc3NvckNvbGxlY3Rpb24g
eworcHVibGljOgorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24oU3VjY2Vzc29yTGlzdCYgbGlzdCkK
KyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBC
YXNpY0Jsb2NrKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2Nr
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQmFzaWNCbG9jayomIG9wZXJhdG9yW10oc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51
bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgaXRlcmF0b3IoU3VjY2Vzc29yQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgc2l6ZV90
IGluZGV4KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJh
c2ljQmxvY2sqJiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1faWRuZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAg
ICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJh
dG9yKHRoaXMsIHNpemUoKSk7IH0KKworcHJpdmF0ZToKKyAgICBTdWNjZXNzb3JMaXN0JiBtX2xp
c3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2FzZVZhbHVlLCAiLT4iLCBwb2lu
dGVyRHVtcChtX3RhcmdldCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaENhc2VfaAor
I2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgU3dpdGNoQ2FzZSB7CitwdWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisgICAg
eworICAgIH0KKworICAgIFN3aXRjaENhc2UoaW50NjRfdCBjYXNlVmFsdWUsIGNvbnN0IEZyZXF1
ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IG1fY2FzZVZhbHVlKGNhc2VWYWx1ZSkKKyAg
ICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdGFyZ2V0OyB9CisKKyAgICBpbnQ2NF90
IGNhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FzZVZhbHVlOyB9CisgICAgRnJlcXVlbnRl
ZEJsb2NrIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CisgICAgQmFzaWNCbG9j
ayogdGFyZ2V0QmxvY2soKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5ibG9jaygpOyB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50
NjRfdCBjYXNlVmFsdWU7CisgICAgRnJlcXVudGVkQmxvY2sgdGFyZ2V0OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsZHVlICJCM1N3aXRjaFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1
ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQg
aW5kZXgpCit7CisgICAgU3dpdGNoQ2FzZSByZXN1bHQgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOwor
ICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3Vj
Y2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTd2l0
Y2hWYWx1ZTo6YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAg
IG1fc3VjY2Vzc29ycy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNjZXNz
b3JzW21fc3VjY2Vzc29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7CisgICAg
bV92YWx1ZXMuYXBwZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3aXRj
aFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRoaXMg
ZGVzdHJ1Y3RpdmVseSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAgICBv
dXQucHJpbnQobGlzdER1bXAoKnRoaXMpLCAiLCBmYWxsVGhyb3VnaCA9ICIsIGZhbGxUaHJvdWdo
KCkpOworfQorCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGlu
ZGV4LCBTd2l0Y2gsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJv
dWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAorI2RlZmluZSBC
M1N3aXRjaFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbnRy
b2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0
dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8g
bnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVt
Q2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8g
VGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4Lgor
ICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlc1tpXTsgfQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVlcygp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICBGcmVxdWVudGVkQmxvY2sgZmFsbFRo
cm91Z2goKSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisgICAgRnJlcXVl
bnRlZEJsb2NrJiBmYWxsVGhyb3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0K
KworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0K
KyAgICBTd2l0Y2hDYXNlIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN3aXRjaENhc2UoY2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7Cisg
ICAgfQorICAgIFN3aXRjaENhc2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3
aXRjaChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dp
dGNoQ2FzZSBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0
Y2gtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBTd2l0Y2hWYWx1ZSogbV9zd2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
fTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IHNpemUoKSk7IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMg
dGhpbmdzIGEgYml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwK
KyAgICAvLyB0aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFz
IHlvdSByZXZpc2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250
YWluIHNvbWUgb3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdh
cyByZW1vdmVkLgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisK
KyAgICB2b2lkIGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3Vn
aCk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM1N3aXRjaFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1R5cGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgb3V0LnBy
aW50KCJWb2lkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBv
dXQucHJpbnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDY0OgorICAg
ICAgICBvdXQucHJpbnQoIkludDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJs
ZToKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gVHlwZSB7CisgICAgVm9p
ZCwKKyAgICBJbnQzMiwKKyAgICBJbnQ2NCwKKyAgICBEb3VibGUKK307CisKK2lubGluZSBib29s
IGlzSW50KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBJbnQzMiB8fCB0eXBlID09
IEludDY0OworfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1
cm4gdHlwZSA9PSBEb3VibGU7Cit9CisKK2lubGluZSBUeXBlIHBvaW50ZXIoKSBjb25zdAorewor
ICAgIGlmIChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBy
ZXR1cm4gSW50NjQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QjM6OlR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJeIiwg
bV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNp
bG9uVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNp
bG9uVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vw
c2lsb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2lsb25WYWx1
ZV9oCisjZGVmaW5lIEIzVXBzaWxvblZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVwc2lsb247IH0K
KworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBjb25zdCB7IHJldHVy
biBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBoaSwgVm9p
ZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAgeworICAgICAgICBB
U1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQorCisgICAgVmFsdWUq
IG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNVcHNpbG9uVmFsdWVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK1VzZUNvdW50czo6VXNlQ291bnRzKFByb2NlZHVyZSYgcHJvY2Vk
dXJlKQorICAgIDogbV9jb3VudHMocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKK3sKKyAgICBm
b3IgKFZhbHVlKiB2YWx1ZSA6IHByb2NlZHVyZS52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKFZh
bHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgbV9jb3VudHNbY2hp
bGRdKys7CisgICAgfQorfQorCitVc2VDb3VudHM6On5Vc2VDb3VudHMoKQoreworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1VzZUNvdW50c19oCisjZGVmaW5lIEIzVXNlQ291bnRzX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOwor
CitjbGFzcyBVc2VDb3VudHMgeworcHVibGljOgorICAgIFVzZUNvdW50cyhQcm9jZWR1cmUmKTsK
KyAgICB+VXNlQ291bnRzKCk7CisKKyAgICB1bnNpZ25lZCBvcGVyYXRvcltdKFZhbHVlKiB2YWx1
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvdW50c1t2YWx1ZV07CisgICAgfQor
cHJpdmF0ZToKKyAgICBJbmRleE1hcDxWYWx1ZSwgdW5zaWduZWQ+IG1fY291bnRzOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNVc2VDb3VudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25h
bWVzcGFjZSB7CisKK2NsYXNzIFZhbGlkYXRlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVyKFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVm
b3JlKQorICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBtX3doZW4o
d2hlbikKKyAgICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQor
CisjZGVmaW5lIFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIGZhaWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29u
ZGl0aW9uLCB0b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworICAg
IHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IGJsb2NrczsK
KyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5Qcm9jOworICAgICAgICBIYXNoU2V0PFZh
bHVlKj4gdmFsdWVJbkJsb2NrOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2NlZHVyZSkgeworICAgICAgICAgICAgYmxvY2tzLmFkZChibG9jayk7CisgICAgICAgICAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykKKyAgICAgICAgICAgICAgICB2YWx1ZUluQmxv
Y2suYWRkKHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDog
bV9wcm9jZWR1cmUudmFsdWVzKCkpCisgICAgICAgICAgICB2YWx1ZUluUHJvYy5hZGQodmFsdWUp
OworCisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2MpCisgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZUluQmxvY2suY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5CbG9jaykKKyAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsK
KworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKSB7CisgICAgICAgICAg
ICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKGNoaWxkKSwgKCJBdCAiLCAqdmFsdWUsICIt
PiIsIHBvaW50ZXJEdW1wKGNoaWxkKSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGJsb2NrcykgeworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSgKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3Nvciks
ICgiQXQgIiwgKmJsb2NrLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBFeHBhbmQgdGhp
cyB2YWxpZGF0aW9uIHBoYXNlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUwNDgwCisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZmFpbCgK
KyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFy
KiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3Nh
Z2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7Cisg
ICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQo
IkIzIFZBTElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAi
LCBjb25kaXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAg
ICAgICAgICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAg
aWYgKG1fd2hlbikKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBEdXJpbmcgIiwgbV93
aGVuLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmluZygp
OworICAgICAgICB9CisKKyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAgICAg
ICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJCZWZvcmUgIiwg
d2hlbiwgIjpcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KG1fZHVtcEJlZm9yZSk7CisgICAg
ICAgIH0KKyAgICAgICAgb3V0LnByaW50KCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAg
ICAgb3V0LnByaW50KG1fcHJvY2VkdXJlKTsKKworICAgICAgICBvdXQucHJpbnQoZmFpbHVyZU1l
c3NhZ2UpOworICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5l
TnVtYmVyLCBmdW5jdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9Cisg
ICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX2R1bXBC
ZWZvcmU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxpZGF0ZShQ
cm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJl
Zm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKHByb2NlZHVyZSwgd2hlbiwgZHVtcEJl
Zm9yZSk7CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbGlkYXRlX2gK
KyNkZWZpbmUgQjNWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCit2b2lkIHZhbGlkYXRl
KFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIHdoZW4gPSBudWxscHRyLCBjb25zdCBjaGFyKiBkdW1w
QmVmb3JlID0gbnVsbHB0cik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsaWRhdGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFsdWU6On5WYWx1ZSgpCit7Cit9
CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqIHZhbHVlKQoreworICAg
IC8vIFRoaXMgaXMgYSBiaXQgY3JhenkuIEl0IGRvZXMgYW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQg
b2Ygd2hhdGV2ZXIgVmFsdWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRoCisgICAgLy8gYSBwbGFpbiBJ
ZGVudGl0eSBWYWx1ZS4gV2UgZmlyc3QgY29sbGVjdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdl
IG5lZWQsIHRoZW4gd2UgZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxh
Y2UsIGFuZCB0aGVuIHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCisK
KyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgVHlwZSB0eXBlID0gbV90eXBlOwor
ICAgIE9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRo
aXMtPm93bmVyOworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50Owor
ICAgIHZvaWQqIG1pc2MgPSB0aGlzLT5taXNjOworCisgICAgUkVMRUFTRV9BU1NFUlQodHlwZSA9
PSB2YWx1ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKworICAgIG5l
dyAodGhpcykgKGluZGV4LCBJZGVudGl0eSwgdHlwZSwgb3JpZ2luLCB2YWx1ZSk7CisKKyAgICB0
aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7
CisgICAgdGhpcy0+bWlzYyA9IG1pc2M7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoTm9w
KCkKK3sKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgT3JpZ2luIG9yaWdpbiA9
IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFs
dWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisgICAgdm9pZCogbWlzYyA9IHRo
aXMtPm1pc2M7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMp
IChpbmRleCwgTm9wLCBWb2lkLCBvcmlnaW4pOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsK
KyAgICB0aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworICAgIHRoaXMtPm1pc2MgPSBt
aXNjOworfQorCit2b2lkIFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIFZhbHVlOjpkZWVw
RHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICIg
IiwgKnRoaXMsICIgPSAiLCBtX29wY29kZSk7CisKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBD
b21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChWYWx1ZSogY2hpbGQgOiBjaGlsZHJlbigpKQor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGNoaWxkKSk7CisKKyAgICBTdHJp
bmdQcmludFN0cmVhbSBzdHJpbmdPdXQ7CisgICAgZHVtcE1ldGEoc3RyaW5nT3V0KTsKKyAgICBD
U3RyaW5nIHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKKyAgICBpZiAoc3RyaW5nLmxl
bmd0aCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cmluZyk7CisKKyAgICBvdXQucHJp
bnQoIikiKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVy
biBmYWxzZTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1
ZTo6aGFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50NjRfdCBW
YWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAor
eworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3ZvaWQgVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3QKK3sKK30KKworVHlwZSBW
YWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkKK3sKKyAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBBZGQ6CisgICAg
Y2FzZSBTdWI6CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBEaXY6CisgICAgY2FzZSBDaGlsbERp
djoKKyAgICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAg
IGNhc2UgQml0WG9yOgorICAgIGNhc2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAgICBjYXNlIFpT
aHI6CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hl
Y2tNdWw6CisgICAgICAgIHJldHVybiBmaXJzdENoaWxkLT50eXBlKCk7CisgICAgY2FzZSBGcmFt
ZVBvaW50ZXI6CisgICAgICAgIHJldHVybiBwb2ludGVyKCk7CisgICAgY2FzZSBTRXh0ODoKKyAg
ICBjYXNlIFNFeHQxNjoKKyAgICBjYXNlIERUb0kzMjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNh
c2UgTm90RXF1YWw6CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgor
ICAgIGNhc2UgTGVzc0VxdWFsOgorICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgIGNhc2UgQWJv
dmU6CisgICAgY2FzZSBCZWxvdzoKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxv
d0VxdWFsOgorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2Fz
ZSBaRXh0MzI6CisgICAgICAgIHJldHVybiBJbnQ2NDsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBj
YXNlIElUb0Q6CisgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgY2FzZSBOb3A6CisgICAgICAg
IHJldHVybiBWb2lkOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZV9oCisjZGVmaW5lIEIzVmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkIzT3Jp
Z2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0
b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1
bXBQcmVmaXggPSAiQCI7CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUg
b3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRl
bnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisK
KyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAg
ICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4
XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9j
aGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcg
dGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKwor
ICAgIC8vIFRoaXMgaXMgdXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5vdGUgdGhhdCB0aGlzIGlzIG9u
bHkgdmFsaWQgZm9yIG5vbi12b2lkIHZhbHVlcy4KKyAgICBBaXI6OkFyZzo6VHlwZSBhaXJUeXBl
KCkgY29uc3QgeyByZXR1cm4gQXJnOjpBcmc6OnR5cGVGb3JCM1R5cGUodHlwZSgpKTsgfQorCisg
ICAgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAg
IGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJl
bjsgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCBy
ZXBsYWNlV2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBo
b3cgeW91IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRo
aW5nIHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91
IGNhbiBkbzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJl
ZyA9IHZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncwor
ICAgIC8vIH0KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9w
Y29kZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51
bGxwdHIKKyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigp
IGNvbnN0OworICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFz
SW50NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wg
aGFzSW50KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJ
bnQoaW50NjRfdCB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0Owor
ICAgIGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAK
KyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KKyAgICAvLyBUaGlzIGZv
cm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5OgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RD
aGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQor
ICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAg
ICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwg
YXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3Igc3Bl
Y2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29kZSBoYXMgbm8gY2hpbGRy
ZW46CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAg
ICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBt
X29yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRo
b3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5k
IGZpcnN0IGNoaWxkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBl
eHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDog
bV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90
eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmln
aW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAg
ICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNh
biBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5kIHRoYXQgZG9uJ3QK
KyAgICAvLyB0YWtlIGFueSBhcmd1bWVudHM6CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQg
aW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChp
bmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVG
b3Iob3Bjb2RlLCBudWxscHRyKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgewor
ICAgIH0KKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciB2YXJhcmdzLgorICAgIGV4cGljaXQgVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9pbmRleChpbmRl
eCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisg
ICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4p
CisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSog
Zmlyc3RDaGlsZCk7CisKKyAgICAvLyBUaGlzIGdyb3VwIG9mIGZpZWxkcyBpcyBhcnJhbmdlZCB0
byBmaXQgaW4gNjQgYml0cy4KKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIE9wY29kZSBtX29w
Y29kZTsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICAKKyAgICBPcmlnaW4gbV9vcmlnaW47CisgICAg
QWRqYWNlbmN5TGlzdCBtX2NoaWxkcmVuOworCitwdWJsaWM6CisgICAgQmFzaWNCbG9jayogb3du
ZXIgeyBudWxscHRyIH07IC8vIGNvbXB1dGVkIGxhemlseS4KKyAgICBWYWx1ZSogcmVwbGFjZW1l
bnQgeyBudWxscHRyIH07IC8vIHVzZWQgZm9yIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMu
Cit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1w
KFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChtX3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgVmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVl
KiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZUlubGluZXNf
aAorI2RlZmluZSBCM1ZhbHVlSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNs
dWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1Qq
IFZhbHVlOjphcygpCit7CisgICAgaWYgKFQ6OmFjY2VwdHMob3Bjb2RlKCkpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3QgVCogVmFsdWU6OmFzKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gY29uc3RfY2FzdDxWYWx1ZSo+KHRoaXMpLT5hczxUPigpOworfQorCitib29sIFZhbHVl
OjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOwor
fQorCitpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29u
c3QzMlZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0
Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3Q2NFZhbHVlPigpOworfQorCitpbnQ2NF90IFZhbHVl
Ojphc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1
ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJ
bnQzMigpIHx8IGhhc0ludDY0KCk7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50KCkgY29uc3QK
K3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSA/IGFzSW50MzIoKSA6IGFzSW50NjQoKTsKK30KKwor
Ym9vbCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
SW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitkb3Vi
bGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVW
YWx1ZT4oKS0+dmFsdWUoKTsKK30KKworU3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7Cisg
ICAgaWYgKENoZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0
dXJuICZjaGVjay0+c3RhY2ttYXA7CisgICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5z
dGFja21hcDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZUlubGlu
ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVS
ZXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE5v
bmU6CisgICAgY2FzZSBTb21lUmVnaXN0ZXI6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJl
Z2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIigiLCByZWcoKSwgIikiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21G
UCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja0FyZ3VtZW50OgorICAg
ICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tU1AoKSwgIikiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIHZhbHVlKCksICIp
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFZhbHVlUmVwOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICBvdXQucHJpbnQoIkFueSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICBvdXQu
cHJpbnQoIlNvbWVSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJl
cDo6UmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNr
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50Ogor
ICAgICAgICBvdXQucHJpbnQoIlN0YWNrQXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzVmFsdWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHVzZSB0aGlz
IGNsYXNzIHRvIGRlc2NyaWJlIHZhbHVlIHJlcHJlc2VudGF0aW9ucyBhdCBzdGFja21hcHMuIEl0
J3MgdXNlZCBib3RoIHRvIGZvcmNlIGEKKy8vIHJlcHJlc2VudGF0aW9uIGFuZCB0byBnZXQgdGhl
IHJlcHJlc2VudGF0aW9uLiBXaGVuIHRoZSBCMyBjbGllbnQgZm9yY2VzIGEgcmVwcmVzZW50YXRp
b24sIHdlIHNheQorLy8gdGhhdCBpdCdzIGFuIGlucHV0LiBXaGVuIEIzIHRlbGxzIHRoZSBjbGll
bnQgd2hhdCByZXByZXNlbnRhdGlvbiBpdCBwaWNrZWQsIHdlIHNheSB0aGF0IGl0J3MgYW4KKy8v
IG91dHB1dC4KKworY2xhc3MgVmFsdWVSZXAgeworcHVibGljOgorICAgIGVudW0gS2luZCB7Cisg
ICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMg
Y2FuIHBpY2sgYW55IHJlcHJlc2VudGF0aW9uLiBBcyBhbgorICAgICAgICAvLyBvdXRwdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93LiBUaGlzIHdpbGwgb25s
eSBhcmlzZSBmb3IgdGhlCisgICAgICAgIC8vIHJpZ2h0IG9wZXJhbmQgKGkuZS4gY2hpbGQoMSkp
IG9mIGEgQ2hlY2tNdWwuCisgICAgICAgIEFueSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCBy
ZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0
ZXIuIEl0IGNvdWxkIGJlIGEKKyAgICAgICAgLy8gcmVnaXN0ZXIgdGhhdCB0aGlzIGNsYWltcyB0
byBjbG9iYmVyIQorICAgICAgICBTb21lUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gaW5w
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdpc3Rlci4gQXMg
YW4gb3V0cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQg
cmVnaXN0ZXIgQjMgcGlja2VkLgorICAgICAgICBSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBh
biBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIz
IHBpY2tlZC4gSXQncyBub3QgYSB2YWxpZAorICAgICAgICAvLyBpbnB1dCByZXByZXNlbnRhdGlv
bi4KKyAgICAgICAgU3RhY2ssCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRp
b24sIHRoaXMgZm9yY2VzIHRoZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhlIGFyZ3VtZW50IGFyZWEg
YXQgc29tZQorICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAg
ICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQg
QjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9Owor
ICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdp
c3RlcikKKyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFs
dWVSZXAocmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qg
b2Zmc2V0RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJv
bUZQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50KGludHB0cl90
IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
b2Zmc2V0RnJvbVNQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudChpbnQ2
NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7Cisg
ICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50RG91YmxlKGRvdWJsZSB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFs
dWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0K
KworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0g
QW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92YWx1ZSk7
CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21TUCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrQXJndW1lbnQpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKwor
ICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAgIGRvdWJs
ZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50NjRfdCBtX3ZhbHVl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2luZCk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2Vu
ZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTA1IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCiskdmFy
SW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7JHZh
ckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9yaWdp
biwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAg
IGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAgICAg
QG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255bW91
cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAgIEB2
YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4gL1xBXCQvID8gJCcgOiBuYW1l
CisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4g
PyBjaGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAgIG9w
Y29kZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisgICAg
ICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNoaWxkLCBpbmRl
eCB8CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQu
bmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAgICAgICAgICAg
ICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9u
T3BlcmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAorICAgICAg
ICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykK
KyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3JlYWRl
ciA6bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0
aW9ucykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1
Y3Rpb25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZp
bGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBs
aW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51
bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAi
I3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgor
ICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6
ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3Ry
aW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBp
ZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQK
KyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3Ro
ZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3Bl
Y3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29t
bWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJz
ZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNl
IGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2Vu
ZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXco
ZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxl
IG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15c
bl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4v
CisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciAr
PSAxCisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLworICAgICAg
ICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVy
KSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVz
cGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0
IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXco
ZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAu
LjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gK
KyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMg
V2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdo
dCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcikp
XFovCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEFbYS16
QS1aMC05JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQK
KworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAg
ICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAg
ZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisg
ICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFy
c2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBh
cnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQu
ZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxl
IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBh
dCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBl
bmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJv
cigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBh
ZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVz
dWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZp
ZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAg
ICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMs
IHByb2R1Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0gcHJvZHVjdGlvbi52YXJOYW1lCisgICAg
ICAgICAgICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0aW9uIGhhcyBzYW1lIG5hbWUgYXMgcGFy
ZW50IHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0
ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAg
ICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQor
ICAgICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAgICAgICBtYXRjaGVyTmFtZSA9IGNvbnN1
bWVJZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorCisgICAgICAgIGxvb3Ag
eworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAg
ICAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVkZSIuIElmIHdlIGRpZCB0aGF0
LCBpdCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHBhcnNlUHJvZHVj
dGlvbgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8
IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgICAg
IHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgICAgIGVuZAorCisg
ICAgICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgICAgIH0KKworICAgICAg
ICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAgICBk
ZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAgICAg
ICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBpZiB0b2tlbiA9PSAiPSIKKyAg
ICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAgICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlkZW50
aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9PSAi
KCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICAgICAgb3Bjb2RlID0gbmFtZQor
ICAgICAgICAgICAgbmFtZSA9IG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g
UHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisgICAg
ICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGxvb3AgeworICAgICAgICAg
ICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisKKyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1lLCBw
cm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorCisgICAgICAgICAgICBicmVhayBpZiB0b2tl
biA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICB9CisKKyAgICAgICAg
IyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAgICAgICAgYWR2YW5jZQorCisgICAgICAgIFByb2R1
Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKK2Vu
ZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZChm
aWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hlciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBTdWJN
YXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRleE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisgICAg
ZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4TWFw
ID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVhY2gg
eworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5kZXgK
KyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAg
fQorICAgIGVuZAorCisgICAgZGVmIG1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgIGlu
ZGV4TGlzdC5tYXAgeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhN
YXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitGaWxlLm9wZW4oIkIzIiArIG1h
dGNoZXIubmFtZSArICIuaCIsICJ3IikgeworICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMg
Ii8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVO
YW1lfSAtLSBkbyBub3QgZWRpdCEiCisKKyAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNo
ZXIubmFtZX1faCIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIK
KyAgICAKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAg
b3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1
dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBydW4j
e21hdGNoZXIubmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0
cC5wdXRzICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5
IGluZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UK
KyAgICAjIHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4g
YSBnb29kIHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91
LgorCisgICAgIyBJbiBvZGQgc2l0dWF0aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZh
bHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5w
dXRzICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsiCisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHBy
b3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMg
aGF2aW5nIGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1
ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJv
ZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5k
ZXggfAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4
TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5n
dGgKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKworICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAg
fCBpbmRleExpc3QgfAorICAgICAgICAgICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0
WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0tPmNoaWxkcmVuLnNpemUoKSA+PSAj
e2xlbmd0aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlp
ZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAg
ICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0
aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0
ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUg
Y29yb3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29k
ZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisg
ICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBt
YXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMg
Rmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9u
cyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4K
KyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9p
bmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlm
IGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bj
b2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1st
MV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3Rz
IDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5
IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhv
dXQgb25lLgorICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUK
KyAgICAgICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3Jv
dXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAg
ICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8
CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAg
ICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVj
dGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50Lgor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgp
KSB7IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAg
ICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3Vi
TWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAg
IG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gu
bmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgo
b3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1h
cEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5k
CisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZl
IHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhl
bSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisg
ICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbklu
ZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5s
ZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisg
ICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdW
YXIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJW
YWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsi
CisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxl
ciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFN
KCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1
Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJv
ZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNo
UmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAg
ICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRl
eExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVO
YW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAg
ICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcElu
ZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2
YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZh
bHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAg
ICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMg
cHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBz
YW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlz
dCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUs
IHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3Qg
fAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3Qp
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZl
bHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRl
eExpc3QgfAorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwK
KyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAg
ICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tw
cm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1l
bnRzID0gW10KKyAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAg
dHJ5QXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAg
IHNlZW4gPSB7fQorICAgICAgICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAgICAg
ICAgICAgICAgIHwgcGFyZW50VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtpbmQs
IGluZGV4IHwKKyAgICAgICAgICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9LT5j
aGlsZCgje2luZGV4fSkiCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc2Vl
bltjaGlsZFZhck5hbWVdCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsiCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFyTmFt
ZX0pIHsiCisgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVlCisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVl
KiAje2NoaWxkVmFyTmFtZX0gPSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAgICAg
aWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGRO
YW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBv
ciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZEFyZ3Vt
ZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5kID09IDphbm9u
T3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1l
IGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFkYXB0b3Iu
YWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJndW1lbnRz
LmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRJbnRl
cm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5PworICAgICAg
ICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygiICsgb3BlcmFu
ZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1
bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRv
ci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBpbnRlcm5hbEFy
Z3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0
SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpOyIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1wdHk/
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJhbmRzTGF0ZSgi
ICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybjsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0i
CisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAgICAgIG91dHAucHV0
cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0Y2hl
ci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJMaXZl
bmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitib29sIGF0dGVt
cHRBc3NpZ25tZW50KAorICAgIFN0YWNrU2xvdCogc2xvdCwgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQ
LCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgZm9yIChTdGFj
a1Nsb3QqIG90aGVyU2xvdCA6IG90aGVyU0xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhlclNsb3Qt
Pm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChvZmZz
ZXRGcm9tRlAgKyBzbG90LT5ieXRlU2l6ZSgpID49IG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvdGhlclNsb3QtPm9mZnNl
dEZyb21GUCgpICsgb3RoZXJTbG90LT5ieXRlU2l6ZSgpID49IG9mZnNldEZyb21GUCkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAo
b2Zmc2V0RnJvbUZQKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBhc3NpZ24oU3RhY2tT
bG90KiBzbG90LCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAg
aWYgKGF0dGVtcHRBc3NpZ25tZW50KHNsb3QsIC1zbG90LT5ieXRlU2l6ZSgpLCBvdGhlclNsb3Rz
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU0xvdCA6IG90
aGVyU2xvdHMpIHsKKyAgICAgICAgaWYgKG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkKKyAgICAg
ICAgICAgICYmIGF0dGVtcHRBc3NpZ25tZW50KG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgLSBz
bG90LT5ieXRlU2l6ZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
Kwordm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrIik7CisKKyAgICAvLyBBbGxvY2F0ZSBhbGwgb2Yg
dGhlIGxvY2tlZCBzbG90cyBpbiBvcmRlci4gVGhpcyBpcyBraW5kIG9mIGEgY3JhenkgYWxnb3Jp
dGhtIHRvIGFsbG93IGZvcgorICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBvZiBzdGFjayBzbG90cyBi
ZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVuIGdldCBoZXJlLgorICAg
IEFTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2ln
bmVkTG9ja2VkU3RhY2tTbG90czsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gbG9ja2VkU3RhY2tT
bG90c1dvcmtsaXN0OworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3Rz
KCkpIHsKKyAgICAgICAgc3dpdGNoIChzbG90LT5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdGFj
a1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
CisgICAgICAgICAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2NrZWRTdGFja1Nsb3RzLmFwcGVu
ZChzbG90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6
OkFub255bW91czoKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAg
ICAgICAgICAgICAgIC8vIEFzIGEgbWF0dGVyIG9mIHNhbml0eSwgdW5hc3NpZ24gdGhpcy4gTWF5
YmUgaXQgd291bGQgYmUgZ29vZCB0byBldmVuIGhhdmUgYQorICAgICAgICAgICAgICAgIC8vIHZh
bGlkYXRpb24gcnVsZSB0aGF0IHRoaXMgY2Fubm90IGhhcHBlbi4KKyAgICAgICAgICAgICAgICBz
bG90LT5zZXRPZmZzZXRGcm9tRlAoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBUaGlzIGlzIGEgZmFpcmx5IGV4cGVuc2l2ZSBs
b29wLCBidXQgaXQncyBPSyBiZWNhdXNlIHdlJ2xsIHVzdWFsbHkgb25seSBoYXZlIGEgaGFuZGZ1
bCBvZgorICAgIC8vIGxvY2tlZCBzdGFjayBzbG90cy4KKyAgICB3aGlsZSAoIWxvY2tlZFN0YWNr
U2xvdHNXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gbG9j
a2VkU3RhY2tTbG90c1dvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGFzc2lnbihzbG90LCBh
c3NpZ25lZExvY2tlZFN0YWNrU2xvdHMpOworICAgICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xv
dHMuYXBwZW5kKHNsb3QpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIGFub255
bW91cyBzbG90cy4gTm90ZSB0aGF0IHRoZW9yZXRpY2FsbHkgd2Ugc2hvdWxkIGRvIGFuIGVzY2Fw
ZSBhbmFseXNpcworICAgIC8vIGhlcmUuIEJ1dCwgY3VycmVudGx5IEFpciBkb2Vzbid0IHN1cHBv
cnQgZXNjYXBpbmcgYSBTdGFja1Nsb3QhCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBl
c2NhcGluZyBhIFN0YWNrU2xvdCBhbmQgYWRkIGVzY2FwZSBhbmFseXNpcyB0byBhbGxvY2F0ZVN0
YWNrKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDQzMAorCisgICAgYXV0byBpc1JlbGV2YW50ID0gW10gKGNvbnN0IEFyZyYgYXJnKSAtPiBib29s
IHsKKyAgICAgICAgcmV0dXJuIGFyZy5pc1N0YWNrKCkgJiYgYXJnLnN0YWNrU2xvdCgpLT5raW5k
KCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOworICAgIH07CisKKyAgICBMaXZlbmVzczxB
cmc+IGxpdmVuZXNzKGNvZGUpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFj
a1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90
Kj4gc2xvdHM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAg
ICBMaXZlbmVzczxBcmc+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisK
KyAgICAgICAgYXV0byBpbnRlcmZlcmUgPSBbJl0gKCkgeworICAgICAgICAgICAgLy8gRm9ybSBh
IGNsaXF1ZSBvZiBzdGFjayBzbG90cyB0aGF0IGludGVyZmVyZS4gRmlyc3QgZmluZCB0aGUgbGlz
dCBvZiBzdGFjayBzbG90cworICAgICAgICAgICAgLy8gdGhhdCBhcmUgbGl2ZSByaWdodCBub3cu
CisgICAgICAgICAgICBzbG90cy5yZXNpemUoMCk7CisgICAgICAgICAgICBmb3IgKEFyZyBhcmcg
OiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUmVtZXZhbnQoYXJn
KSkKKyAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2xvdHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIG91dGVyID0gc2xvdHNb
aV07CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBzbG90cy5z
aXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIGlubmVyID0gc2xv
dHNbaV07CisKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBmaXJzdCA9IG91dGVyOwor
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNlY29uZCA9IGlubmVyOworICAgICAgICAg
ICAgICAgICAgICBpZiAoZmlyc3QtPmluZGV4KCkgPiBzZWNvbmQtPmluZGV4KCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoZmlyc3QsIHNlY29uZCk7CisKKyAgICAgICAgICAg
ICAgICAgICAgaW50ZXJmZXJlbmNlW2ZpcnN0XS5hZGQoc2Vjb25kKTsKKyAgICAgICAgICAgICAg
ICAgICAgaW50ZXJmZXJlbmNlW3NlY29uZF0uYWRkKGZpcnN0KTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnRlcmZlcmUobG9jYWxDYWxj
LmxpdmUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJs
b2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1
dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgaW50ZXJmZXJlKGxvY2FsQ2Fs
Yy5saXZlKCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFj
ayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZp
dC4gRm9yIGVhY2gKKyAgICAvLyBTdGFja1Nsb3Qgd2UganVzdCB3YW50IHRvIGZpbmQgdGhlIG9m
ZnNldEZyb21GUCB0aGF0IGlzIGNsb3Nlc3QgdG8gemVybyB3aGlsZSBlbnN1cmluZyBubworICAg
IC8vIG92ZXJsYXAgd2l0aCBvdGhlciBTdGFja1Nsb3RzIHRoYXQgdGhpcyBvdmVybGFwcyB3aXRo
LgorICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBmcmFtZVNpemVGb3JMb2Nr
ZWQ7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IG90aGVyU2xvdHM7CisgICAgZm9yIChTdGFja1Ns
b3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0
RnJvbUZQKCkpIHsKKyAgICAgICAgICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0Lgor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgcG9zc2li
bGUgZmlyc3QgZml0IG9mZnNldHMgYXJlOgorICAgICAgICAvLyAtIGZyYW1lU2l6ZUZvckxvY2tl
ZCAtIHNsb3QtPmJ5dGVTaXplKCkKKyAgICAgICAgLy8gLSBmb3IgYWxsIHNsb3QyIGluIGludGVy
ZmVyZW5jZVtzbG90XSwgc2xvdDItPm9mZnNldEZyb21GUCgpIC0gc2xvdC0+Ynl0ZVNpemUoKS4K
KyAgICAgICAgLy8gV2UgbmVlZCB0byBmaW5kIG9uZSBvZiB0aG9zZSB0aGF0IGRvZXNuJ3QgaW50
ZXJmZXJlIHdpdGggYW55b25lLgorCisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGludGVy
ZmVyaW5nU2xvdHMgPSBpbnRlcmZlcmVuY2Vbc2xvdF07CisgICAgICAgIG90aGVyU2xvdHMucmVz
aXplKGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Nsb3RzLnNp
emUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhc3NpZ25lZExvY2tlZFN0
YWNrU2xvdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdGhlclNsb3RzW2ldID0gYXNzaWdu
ZWRMb2NrZWRTdGFja1Nsb3RzW2ldOworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3Np
Z25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3Ro
ZXJTbG90IDogaW50ZXJmZXJpbmdTbG90cykKKyAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dElu
ZGV4KytdID0gb3RoZXJTbG90OworCisgICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsK
KyAgICB9CisKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZv
ciBzdGFjayBzbG90cy4KKyAgICB1bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsK
KyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKQorICAgICAgICBm
cmFtZVNpemVGb3JTdGFja1Nsb3RzID0gc3RkOjptYXgoZnJhbWVTaXplRm9yU3RhY2tTbG90cywg
LXNsb3QtPm9mZnNldEZyb21GUCgpKTsKKworICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRlZHVjZSBo
b3cgbXVjaCBhcmd1bWVudCBhcmVhIHdlIG5lZWQuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAg
ICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFy
Zy5pc0NhbGxBcmcoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBhc3N1
bWUgdGhhdCB3ZSB1c2UgOCBieXRlcyBvZiB0aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mgbm90Cisg
ICAgICAgICAgICAgICAgICAgIC8vIHN1Y2ggYW4gYXdlc29tZSBhc3N1bXB0aW9uLgorICAgICAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDQ1NAorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLm9mZnNldCgpID49
IDApOworICAgICAgICAgICAgICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoYXJn
Lm9mZnNldCgpICsgOCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgY29kZS5zZXRGcmFtZVNpemUoZnJhbWVTaXplRm9yU3RhY2tTbG90
cyArIGNvZGUuY2FsbEFyZ0FyZWFTaXplKCkpOworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3Jt
IHRoZSBjb2RlIHRvIHVzZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBh
IGxvc3NsZXNzCisgICAgLy8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUg
U3RhY2tTbG90cyBhcnJheSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAv
LyBvZmZzZXQtZnJvbS1GUCByZWZlcnMgdG8uCisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAg
ICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2gg
KGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAg
ICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQ
UkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9m
ZnNldCgpICsgYXJnLnN0YWNrU2xvdCgpLT5vZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAg
ICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5v
ZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQWxs
b2NhdGVTdGFja19oCisjZGVmaW5lIEFpckFsbG9jYXRlU3RhY2tfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBDb2RlOworCisvLyBUaGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBv
biB0aGUgc3RhY2suIEl0IGZpcnN0IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgK
Ky8vIG9yZGVyIGFuZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQu
CisKK3ZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJBbGxv
Y2F0ZVN0YWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJBcmcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAg
ICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VG1wOgorICAgICAgICBvdXQucHJpbnQodG1wKCkpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBJbW06CisgICAgICAgIG91dC5wcmludCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBtX29mZnNl
dCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChvZmZzZXQo
KSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgi
KCIsIGJhc2UoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5kZXg6CisgICAg
ICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAg
ICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIiwiLCBpbmRleCgpKTsKKyAgICAgICAgaWYgKHNj
YWxlKCkgIT0gMSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOworICAgICAg
ICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAg
ICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQpOworICAgICAg
ICBvdXQucHJpbnQoIigiLCBwb2ludGVyRHVtcChzdGFja1Nsb3QoKSksICIpIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIihjYWxsQXJnKSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBvdXQucHJpbnQo
YXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXND
b25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZXN1bHRDb25kaXRpb24oKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChz
cGVjaWFsKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjI1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUg
QWlyQXJnX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJUbXAuaCIKKyNp
bmNsdWRlICJCM1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBTcGVjaWFsOworY2xhc3MgU3RhY2tTbG90OworCisvLyBUaGlz
IGNsYXNzIG5hbWUgaXMgYWxzbyBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2lsbCBz
YXkgaXQgYSBsb3QuIFlvdSdsbCBzZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjppbW0o
NSksIEFyZzo6YWRkcih0aGluZywgYmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6Cisg
ICAgLy8gVGhlc2UgZW51bSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ug
d2UgaGF2ZSB0byBtZW50aW9uIHRoZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90IHsK
KyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgVG1wLAorICAgICAgICBJbW0sCisgICAgICAgIElt
bTY0LAorICAgICAgICBBZGRyLAorICAgICAgICBTdGFjaywKKyAgICAgICAgQ2FsbEFyZywKKyAg
ICAgICAgSW5kZXgsCisgICAgICAgIFJlbENvbmQsCisgICAgICAgIFJlc0NvbmQsCisgICAgICAg
IFNwZWNpYWwKKyAgICB9OworCisgICAgZW51bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAgVXNl
LAorICAgICAgICBEZWYsCisgICAgICAgIFVzZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5cGUg
OiBpbnQ4X3QgeworICAgICAgICBHUCwKKyAgICAgICAgRlAKKyAgICB9OworCisgICAgc3RhdGlj
IGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKKworICAgIHN0YXRpYyBib29sIGlzVXNlKFJv
bGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVz
ZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgY2FzZSBEZWY6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZvckIz
VHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIEludDY0
OgorICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAg
ICAgIHJldHVybiBGUDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgcmV0dXJuIEdQOworICAgIH0KKworICAgIEFyZygpCisgICAgICAgIDogbV9raW5k
KEludmFsaWQpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAgICAg
IDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFy
ZyBpbW02NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFs
dWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBhZGRy
KEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBBZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHN0YXRpYyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAwKQor
ICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNr
OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhbHVl
KTsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4KKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmcoaW50
MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2Fs
ZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAg
ICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgY2Fz
ZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxl
KSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNl
IDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAg
cmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgoQWly
OjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJfdCBv
ZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAg
QVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2NhbGUp
KTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4Owor
ICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBp
bmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihzY2Fs
ZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNl
dCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0
aWMgQXJnIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24p
CisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVz
Q29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNpYWwq
IHNwZWNpYWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gU3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0PGlu
dHB0cl90PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5kID09
IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAg
ICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBtX3Nj
YWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
ICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJbW0o
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQorCisg
ICAgYm9vbCBpc0ltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
SW1tNjQ7CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAgIGJv
b2wgaXNDYWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQ2Fs
bEFyZzsKKyAgICB9CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQorCisg
ICAgYm9vbCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9
PSBSZXNDb25kOworICAgIH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlzQWxp
dmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOwor
ICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgaW50
NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbSB8
fCBraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorCisg
ICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0g
SW5kZXgpOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGJvb2wgaGFzT2Zm
c2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNh
c2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAg
ICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisg
ICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSA9PSBT
dGFjaykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3NjYWxlKTsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtp
bmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29m
ZnNldCk7CisgICAgfQorCisgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8U3RhY2tTbG90Kj4obV9vZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAg
ICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzY2FsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1f
c2NhbGU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9nU2NhbGUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOworICAgIH0KKworICAgIEFpcjo6U3BlY2lh
bCogc3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNwZWNp
YWwpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0
KTsKKyAgICB9CisKKyAgICBib29sIGlzR1BUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOworICAgIH0KKworICAgIGJvb2wgaXNGUFRtcCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQKCk7Cisg
ICAgfQorICAgIAorICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEg
cG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEdQIHZhbHVlLgorICAgIGJvb2wgaXNHUCgpIGNvbnN0
CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAg
ICAgICAgY2FzZSBJbW02NDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4
OgorICAgICAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAg
ICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgY2FzZSBTcGVj
aWFsOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAg
ICAgICAgcmV0dXJuIGlzR1BUbXAoKTsKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGVsbHMgdXMgaWYg
dGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgRlAgdmFs
dWUuCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgp
KSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNh
c2UgUmVzQ29uZDoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIEludmFsaWQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAg
Y2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBCYXNlOgorICAgICAgICBjYXNlIFN0YWNrU2xvdDoK
KyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEltbTY0OiAvLyBZZXMsIHdlIGFs
bG93IEltbTY0IGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVu
dGluZyBzdGFja21hcHMuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBU
bXA6CisgICAgICAgICAgICByZXR1cm4gaXNGUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgYm9vbCBoYXNUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7
CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2Ug
VG1wOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHR5
cGUgaXMgYW1iaWd1b3VzIGZvciBzb21lIGFyZyBraW5kcy4gQ2FsbCB3aXRoIGNhcmUuCisgICAg
VHlwZSB0eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0dQKCkgPyBHUCA6IEZQ
OworICAgIH0KKworICAgIGJvb2wgaXNUeXBlKFR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJu
IGlzR1AoKTsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1BSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdw
cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3ByKCk7CisgICAgfQorCisg
ICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0
bXAoKS5pc0ZQUigpOworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRtcCgpLmZwcigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzUmVnKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzUmVnKCk7Cisg
ICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCku
cmVnKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdG1wKCkuZ3BUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVk
IGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwVG1wSW5k
ZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdG1wKCkudG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBBcmcgd2l0aE9mZnNl
dChpbnQzMl90IGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhh
c09mZnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBpZiAoc3VtT3Zl
cmZsb3dzPGludDMyX3Q+KG9mZnNldCgpLCBhZGRpdGlvbmFsT2Zmc2V0KSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBB
ZGRyOgorICAgICAgICAgICAgcmV0dXJuIGFkZHIoYmFzZSgpLCBvZmZzZXQoKSArIGFkZGl0aW9u
YWxPZmZzZXQpOworICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICAgICAgcmV0dXJuIHN0YWNr
KHN0YWNrU2xvdCgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBjYXNl
IENhbGxBcmc6CisgICAgICAgICAgICByZXR1cm4gY2FsbEFyZyhvZmZzZXQoKSArIGFkZGl0aW9u
YWxPZmZzZXQpOworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGluZGV4
KGJhc2UoKSwgaW5kZXgoKSwgc2NhbGUoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAg
ICAgIGNhc2UgVG1wOgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1f
YmFzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAg
ICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0
IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cworICAg
IC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoKKyAgICAvLwor
ICAgIC8vIG1vdiAlcmF4LCAoJXJjeCkKKyAgICAvLworICAgIC8vIFRoaXMgZGVmcyAoJXJjeCkg
YnV0IHVzZXMgJXJjeC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaFRtcChSb2xlIGFyZ1JvbGUsIFR5cGUgYXJnVHlwZSwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgVG1w
OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIGFyZ1JvbGUsIGFyZ1R5cGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9i
YXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4Ogor
ICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgZnVuY3Rv
cihtX2luZGV4LCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdXQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzSW1tKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NCBhc1RydXN0ZWRJbW02
NCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW02NCgpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQocG9pbnRlclZhbHVlKCkpOworICAgIH0K
KyNlbmRpZgorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zm
c2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRl
eCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCks
IG1faW5kZXguZ3ByKCksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2Nh
bGUoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAg
IH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25h
bENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29u
ZGl0aW9uIGFzUmVzdWx0Q29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c1Jlc0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6
UmVzdWx0Q29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29mZnNldCB7IDAgfTsK
KyAgICBLaW5kIG1fa2luZCB7IEludmFsaWQgfTsKKyAgICBpbnQzMl90IG1fc2NhbGUgeyAxIH07
CisgICAgQWlyOjpUbXAgbV9iYXNlOworICAgIEFpcjo6VG1wIG1faW5kZXg7Cit9OworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQWlyQXJnX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEJhc2ljQmxvY2s6
OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIzOjphZGRQcmVkZWNl
c3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMs
IGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxhY2VQcmVkZWNlc3Nv
cih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30K
Kwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5j
eSwgIlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMpCisgICAgICAgIG91
dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworfQorCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2Nr
KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRleCkK
KyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNCbG9j
a19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyRnJlcXVlbnRlZEJsb2Nr
LmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlv
bi5oIgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgQ29kZTsKK2NsYXNzIEluc2VydGlvblNldDsKKworY2xhc3MgQmFzaWNCbG9jayB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXgg
PSAiIyI7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAgICB0eXBlZGVm
IFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5cGVkZWYgVmVj
dG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKyAgICAKKyAgICB1bnNpZ25l
ZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlzdDo6
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlz
dDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RMaXN0
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsg
fQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2lu
c3RzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMu
c2l6ZSgpOyB9CisgICAgY29uc3QgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2luc3RzW2luZGV4XTsgfQorICAgIEluc3QmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4g
bV9pbnN0c1tpbmRleF07IH0KKworICAgIGNvbnN0IEluc3QmIGxhc3QoKSBjb25zdCB7IHJldHVy
biBtX2luc3RzLmxhc3QoKTsgfQorICAgIEluc3QmIGxhc3QoKSB7IHJldHVybiBtX2luc3RzLmxh
c3QoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGFwcGVuZElu
c3QoSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVuZChzdGQ6OmZvcndh
cmQ8SW5zdD4oaW5zdCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICB2b2lkIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykuLi4pKTsKKyAgICB9CisKKyAgICAvLyBUaGUgIjAiIGNhc2UgaXMgdGhlIGNhc2UgdG8g
d2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28gdGhlICJ0aGVuIiBjYXNlLiBUaGUgIjEiIGNhc2Ug
aXMgdGhlCisgICAgLy8gImVsc2UiIGNhc2UsIGFuZCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUg
ZmFsbC10aHJvdWdoIG9mIGEgY29uZGl0aW9uYWwgYnJhbmNoLgorICAgIHVuc2lnbmVkIG51bVN1
Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgRnJl
cXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9z
dWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgU3Vj
Y2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRl
eF07IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNz
b3JzW2luZGV4XTsgfQorCisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNj
ZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nl
c3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsK
KyAgICB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBT
dWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29y
TGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3Nv
cnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Js
b2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNl
c3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNl
c3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2lu
ZGV4XTsgfQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9w
cmVkZWNlc3NvcnNbaW5kZXhdOyB9CisKKyAgICB2b2lkIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqKTsKKyAgICB2b2lkIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICB2b2lk
IHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7Cisg
ICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKHVuc2ln
bmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7Cisg
ICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKyAg
ICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5
OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFz
aWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1w
KG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFz
aWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERl
ZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJCYXNpY0Js
b2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0Nh
bGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K0NDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKCkKK3sKKyAgICBtX2Nsb2JiZXJlZFJlZ3MgPSBS
ZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUo
UmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNs
dWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgIG1fY2xv
YmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwor
fQorCitDQ2FsbFNwZWNpYWw6On5DQ2FsbFNwZWNpYWwoKQoreworfQorCit2b2lkIENDYWxsU3Bl
Y2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFj
aEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBB
cmc6OlVzZSwgQXJnOjpHUCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IGlu
c3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBGb3IgdGhlIHR5cGUsIHdlIGNhbiBq
dXN0IHF1ZXJ5IHRoZSBhcmcncyB0eXBlLiBUaGUgYXJnIHdpbGwgaGF2ZSBhIHR5cGUsIGJlY2F1
c2Ugd2UKKyAgICAgICAgLy8gcmVxdWlyZSB0aGVzZSBhcmdzIHRvIGJlIGFyZ3VtZW50IHJlZ2lz
dGVycy4KKyAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzW2ldLCBBcmc6OlVzZSwgaW5zdC5hcmdz
W2ldLnR5cGUoKSk7CisgICAgfQorfQorCitib29sIENDYWxsU3BlY2lhbDo6aXNWYWxpZChJbnN0
JiBpbnN0KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgc3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBB
cmc6OkltbToKKyAgICAgICAgaWYgKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAg
ICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA4KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgIGNhc2UgQXJnOjpBZGRyOgorICAg
IGNhc2UgQXJnOjpTdGFjazoKKyAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICgh
aW5zdC5hcmdzWzFdLmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
IWluc3QuYXJnc1tpXS5pc1JlZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIGlmIChpbnN0LmFyZ3NbaV0gPT0gVG1wKHNjcmF0Y2hSZWdpc3RlcikpCisgICAgICAgICAg
ICByZXR1cm4gIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQ2Fs
bFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICAv
LyBBcmcgMSBjYW4gYmUgYSBzdGFjayBhZGRyZXNzIGZvciBzdXJlLgorICAgIGlmIChhcmdJbmRl
eCA9PSAxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBS
ZWdpc3RlclNldCYpCit7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6Omdl
bmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYp
Cit7CisgICAgc3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6Oklt
bToKKyAgICBjYXNlIEFyZzo6SW1tUHRyOgorICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoaW5zdC5hcmdzWzFdLnBvaW50ZXJWYWx1ZSgpKSwgc2NyYXRjaFJlZ2lz
dGVyKTsKKyAgICAgICAgaml0LmNhbGwoc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzWzFdLmdwcigp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgIGppdC5jYWxs
KGluc3QuYXJnc1sxXS5hc0FkZHJlc3MoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK2NvbnN0IFJlZ2lz
dGVyU2V0JiBDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncygpCit7CisgICAgcmV0dXJu
IG1fY2xvYmJlcmVkUmVnczsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmR1bXBJbXBsKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJDQ2FsbCIpOworfQorCit2b2lk
IENDYWxsU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJmdW5jdGlvbiBjYWxsIHRoYXQgdXNlcyB0aGUgQyBjYWxsaW5nIGNvbnZl
bnRpb24uIik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJDQ2FsbFNwZWNpYWxfaAorI2RlZmluZSBBaXJDQ2FsbFNwZWNpYWxfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCisvLyBVc2UgdGhpcyBzcGVjaWFsIGZvciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFy
ZyAwIGlzIG9mIGNvdXJzZSBhIFNwZWNpYWwgYXJnIHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0Nh
bGxTcGVjaWFsIG9iamVjdC4gQXJnIDEgaXMgdGhlIGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJ
bW1QdHIsIGEgcmVnaXN0ZXIsIG9yIGFuIGFkZHJlc3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3Mg
YXJlIGp1c3QgdGhlIHNldCBvZiBhcmd1bWVudCByZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwu
IEZvciBhcmd1bWVudHMgdGhhdCBnbyB0bworLy8gdGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0
aGUgZ3J1bnQgd29yayBvZiBkb2luZyB0aG9zZSBzdGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBv
bmx5IHJlYXNvbiB3aHkKKy8vIHdlIHNwZWNpZnkgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBh
cmd1bWVudHMgdG8gYSBjYWxsIGlzIHNvIHRoYXQgdGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBz
ZWUKKy8vIHRoYXQgdGhleSBnZXQgdXNlZCBoZXJlLiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRv
bWFnaWNhbGx5IHJlcG9ydCBhbGwgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2Vk
IGJlY2F1c2UgaWYgd2UgaGFkIGEgY2FsbCB0aGF0IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhl
eSdkIGFwcGVhciB0byBiZSBsaXZlIHVudGlsIHNvbWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhl
IHByb2xvZ3VlLCB3aGljaGV2ZXIgaGFwcGVuZWQgc29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNp
YWwgOiBwdWJsaWMgU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAg
fkNDYWxsU3BlY2lhbCgpOworCisgICAgLy8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0
byBwYXNzIGFyZ3VtZW50cy4gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBp
cyBub3QKKyAgICAvLyB1c2VkIGZvciBhcmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50
aW9uLiBCeSB0aGUgd2F5LCB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAg
Ly8gdGhpcyBzcGVjaWFsIHRvIGJlIHNwZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNv
bnN0IEdQUlJlZyBzY3JhdGNoUmVnaXN0ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwLgorCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5z
dDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikg
b3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgp
IG92ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVn
aXN0ZXJTZXQmKSBvdmVycmlkZTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5z
dCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBk
ZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZFJlZ3M7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWly
Q0NhbGxTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExOCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyQ29kZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFz
aWNCbG9ja1V0aWxzLmgiCisjaW5jbHVkZSAiQ0NhbGxTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ29kZTo6Q29kZSgpCit7Cit9
CisKK0NvZGU6On5Db2RlKCkKK3sKK30KKworQmFzaWNCbG9jayogQ29kZTo6YWRkQmxvY2soZG91
YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2so
bmV3IEJhc2ljQmxvY2sobV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Js
b2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3Zl
KGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3RhY2tTbG90KiBDb2RlOjphZGRT
dGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCwgU3RhY2tTbG90
VmFsdWUqIHZhbHVlKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3
IFN0YWNrU2xvdChieXRlU2l6ZSwgbV9zdGFja1Nsb3RzLnNpemUoKSwga2luZCwgdmFsdWUpKTsK
KyAgICBTdGFja1Nsb3QqIHJlc3VsdCA9IHNsb3QuZ2V0KCk7CisgICAgbV9zdGFja1Nsb3RzLmFw
cGVuZChXVEY6Om1vdmUoc2xvdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NwZWNpYWwq
IENvZGU6OmFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+IHNwZWNpYWwpCit7Cisg
ICAgbV9zcGVjaWFscy5hcHBlbmQoV1RGOjptb3ZlKHNwZWNpYWwpKTsKK30KKworQ0NhbGxTcGVj
aWFsKiBDb2RlOjpjQ2FsbFNwZWNpYWwoKQoreworICAgIGlmICghbV9jQ2FsbFNwZWNpYWwpIHsK
KyAgICAgICAgbV9jQ2FsbFNwZWNpYWwgPSBzdGF0aWNfY2FzdDxDQ2FsbFNwZWNpYWwqPigKKyAg
ICAgICAgICAgIGFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbFNwZWNpYWw+KCkpKTsK
KyAgICB9CisKKyAgICByZXR1cm4gbV9jQ2FsbFNwZWNpYWw7Cit9CisKK3ZvaWQgQ29kZTo6cmVz
ZXRSZWFjaGFiaWxpdHkoKQoreworICAgIEIzOjpyZXNldFJlYWNoYWJpbGl0eShtX2Jsb2Nrcyk7
Cit9CisKK3ZvaWQgQ29kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1w
KGJsb2NrKSk7CisgICAgaWYgKG51bVN0YWNrU2xvdHMoKSkgeworICAgICAgICBvdXQucHJpbnQo
IlN0YWNrIHNsb3RzOlxuIik7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tT
bG90cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc2xvdCksICJc
biIpOworICAgIH0KKyAgICBpZiAobnVtU3BlY2lhbHMoKSkgeworICAgICAgICBvdXQucHJpbnQo
IlNwZWNpYWxzOlxuIik7CisgICAgICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6IHNwZWNpYWxz
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzcGVjaWFsKSwgIlxu
Iik7CisgICAgfQorICAgIG91dC5wcmludCgiRnJhbWUgc2l6ZTogIiwgbV9mcmFtZVNpemUsICJc
biIpOworICAgIG91dC5wcmludCgiQ2FsbCBhcmcgYXJlYSBzaXplOiAiLCBtX2NhbGxBcmdBcmVh
U2l6ZSwgIlxuIik7CisgICAgb3V0LnByaW50KCJDYWxsZWUgc2F2ZXM6ICIsIG1fY2FsbGVlU2F2
ZVJlZ2lzdGVycywgIlxuIik7Cit9CisKK3Vuc2lnbmVkIENvZGU6OmZpbmRGaXJzdEJsb2NrSW5k
ZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSgpICYm
ICFhdChpbmRleCkpCisgICAgICAgIGluZGV4Kys7CisgICAgcmV0dXJuIGluZGV4OworfQorCit1
bnNpZ25lZCBDb2RlOjpmaW5kTmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXggKyAxKTsKK30KKworQmFzaWNC
bG9jayogQ29kZTo6ZmluZE5leHRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAg
ICByZXR1cm4gYXQoZmluZE5leHRCbG9ja0luZGV4KGJsb2NrLT5pbmRleCgpKSk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyQ29kZV9oCisjZGVmaW5lIEFpckNvZGVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJT
cGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJB
dE9mZnNldExpc3QuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IENDYWxsU3BlY2lhbDsKK2NsYXNzIFByb2NlZHVyZTsKKworbmFtZXNwYWNlIEFpciB7CisKKy8v
IFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJdCBy
ZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFuIHRoZQorLy8gZ2VuZXJhdGVkIG1hY2hp
bmUgY29kZSAtIGZvciBleGFtcGxlIGlmIHlvdSdyZSBnZW5lcmF0aW5nIDFNQiBvZiBtYWNoaW5l
IGNvZGUsIHlvdSBuZWVkIGFib3V0CisvLyA0ME1CIG9mIEFpci4KKworY2xhc3MgQ29kZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29kZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgQ29kZSgpOworICAgIH5Db2RlKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBTdGFja1Nsb3QqIGFk
ZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFs
dWUqID0gbnVsbHB0cik7CisKKyAgICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0
cjxTcGVjaWFsPik7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBzcGVjaWFsIHlvdSBuZWVkIHRvIG1h
a2UgYSBDIGNhbGwhCisgICAgQ0NhbGxTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIFRt
cCBuZXdUbXAoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6Z3BUbXBGb3JJ
bmRleChtX251bUdQVG1wcysrKTsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAg
cmV0dXJuIFRtcDo6ZnBUbXBGb3JJbmRleChtX251bUZQVG1wcysrKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHVuc2lnbmVkIG51bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0
dXJuIG1fbnVtR1BUbXBzOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1
cm4gbV9udW1GUFRtcHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYWxsQXJn
QXJlYVNpemUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxBcmdBcmVhU2l6ZTsgfQorCisgICAgLy8g
WW91IGNhbiBjYWxsIHRoaXMgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiB0byBmb3JjZSBhIG1pbmlt
dW0gY2FsbCBhcmcgYXJlYSBzaXplLgorICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6ZSh1
bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUgPSBzdGQ6Om1h
eChtX2NhbGxBcmdBcmVhU2l6ZSwgc2l6ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnJhbWVT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVNpemU7IH0KKworICAgIC8vIE9ubHkgcGhhc2Vz
IHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbiBhcmUgYWxsb3dlZCB0byBzZXQgdGhpcy4gQ3VycmVu
dGx5LCBvbmx5CisgICAgLy8gQWlyOjphbGxvY2F0ZVN0YWNrKCkgZG9lcyB0aGlzLgorICAgIHZv
aWQgc2V0RnJhbWVTaXplKHVuc2lnbmVkIGZyYW1lU2l6ZSkKKyAgICB7CisgICAgICAgIG1fZnJh
bWVTaXplID0gZnJhbWVTaXplOworICAgIH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBj
YWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisK
KyAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBhbmQgZGVsZXRlcyB1bnJlYWNoYWJsZSBi
bG9ja3MuCisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOworCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9y
W10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgLy8g
RmluZHMgdGhlIHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFu
ZCBpbmRleCcgPj0gaW5kZXguCisgICAgdW5zaWduZWQgZmluZEZpcnN0QmxvY2tJbmRleCh1bnNp
Z25lZCBpbmRleCkgY29uc3Q7CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1
Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+IGluZGV4LgorICAgIHVuc2ln
bmVkIGZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICBCYXNp
Y0Jsb2NrKiBmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqKSBjb25zdDsKKworICAgIGNsYXNzIGl0
ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAgICA6
IG1fY29kZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKENvZGUmIGNvZGUsIHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICAgICAgOiBtX2NvZGUoJmNvZGUpCisgICAgICAgICAgICAsIG1faW5kZXgobV9jb2Rl
LT5maW5kRmlyc3RCbG9ja0luZGV4KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY29kZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBtX2NvZGUtPmZp
bmRGaXJzdEJsb2NrSW5kZXgobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQ29kZSog
bV9jb2RlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBudW1CbG9ja3MoKSk7IH0K
KworICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1f
Y29kZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90cy5zaXplKCk7IH0KKyAgICAgICAg
U3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3Rh
Y2tTbG90c1tpXS5nZXQoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0
ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJh
dG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAg
ICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFN0YWNrU2xvdHNDb2xs
ZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
ICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IodGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IodGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29k
ZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Nsb3Rz
KCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAgCisg
ICAgY2xhc3MgU3BlY2lhbHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNwZWNp
YWxzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQorICAgICAgICAgICAgOiBtX2NvZGUoY29k
ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzLnNpemUoKTsgfQorICAgICAgICBTcGVjaWFsKiBh
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHNbaV0uZ2V0
KCk7IH0KKyAgICAgICAgU3BlY2lhbCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2Nv
bGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3BlY2lh
bHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAg
ICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgo
aW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNwZWNp
YWwqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
Y29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0
ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2lu
ZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1f
aW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsK
KyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgICAg
ICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKwor
ICAgIFNwZWNpYWxzQ29sbGVjdGlvbiBzcGVjaWFscygpIGNvbnN0IHsgcmV0dXJuIFNwZWNpYWxz
Q29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxT
cGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBDQ2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsg
bnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9OworICAgIHVuc2lnbmVk
IG1fbnVtRlBUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9OworICAg
IHVuc2lnbmVkIG1fY2FsbEFyZ0FyZWFTaXplIHsgMCB9OworICAgIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDb2Rl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1
ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJGcmVxdWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWly
RnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQWlyRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBC
YXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8QmFzaWNCbG9jaz4g
RnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyRnJlcXVlbnRlZEJsb2NrX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyR2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJB
bGxvY2F0ZVN0YWNrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckhhbmRs
ZUNhbGxlZVNhdmVzLmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisjaW5jbHVk
ZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkNDYWxs
SGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK3ZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7Cisg
ICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgImluaXRp
YWwiKTsKKworICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0
aWFsIGFpcjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIFRo
aXMgaXMgd2hlcmUgd2UgcnVuIG91ciBvcHRpbWl6YXRpb25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMu
CisgICAgLy8gRklYTUU6IEFkZCBBaXIgb3B0aW1pemF0aW9ucy4KKyAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU2CisKKyAgICAvLyBUaGlzIGlzIHdo
ZXJlIHdlIHdvdWxkIGhhdmUgYSByZWFsIHJlZ2lzdGVyIGFsbG9jYXRvci4gVGhlbiwgd2UgY291
bGQgdXNlIHNwaWxsRXZlcnl0aGluZygpCisgICAgLy8gaW4gcGxhY2Ugb2YgdGhlIHJlZ2lzdGVy
IGFsbG9jYXRvciBvbmx5IGZvciB0ZXN0aW5nLgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU3CisgICAgc3BpbGxFdmVyeXRoaW5nKGNv
ZGUpOworCisgICAgLy8gUHJpb3IgdG8gdGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxv
Z3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCisgICAgLy8g
ZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcg
YW5kIHNhdmVzIHRoZW0uCisgICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CisKKyAgICAvLyBU
aGlzIHR1cm5zIGFsbCBTdGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQg
dXNlIHRoZSBmcmFtZSBwb2ludGVyLiBJdCBkb2VzCisgICAgLy8gdGhpcyBieSBmaXJzdC1maXQg
YWxsb2NhdGluZyBzdGFjayBzbG90cy4gSXQgc2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRv
IG9wdGltYWwsIHNvIHdlCisgICAgLy8gc2hvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhp
cyB2ZXJ5IG11Y2guCisgICAgYWxsb2NhdGVTdGFjayhjb2RlKTsKKworICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgcmVhbGx5IGhhdmUgYSBjb2RlIGxheW91dCBvcHRpbWl6YXRpb24gaGVyZS4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc4CisKKyAg
ICAvLyBGSVhNRTogV2UgbmVlZCBhIGxhdGUgbGl2ZW5lc3MgYW5hbHlzaXMgb3ZlciByZWdpc3Rl
cnMgdG8gZmlsbCBpbiB0aGUKKyAgICAvLyBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCku
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUxMQor
CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgImZp
bmFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWly
IGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQor
CisgICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJhdGUgY29kZS4KKyAgICBqaXQuZW1pdEZ1bmN0aW9u
UHJvbG9ndWUoKTsKKyAgICBqaXQuYWRkUHRyKFRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUo
KSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBHZW5lcmF0
aW9uQ29udGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuY29kZSA9IGNvZGU7CisgICAgSW5kZXhN
YXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tMYWJlbHMoY29kZS5zaXpl
KCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJs
b2NrSnVtcHMoY29kZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBl
cnM6Okp1bXAganVtcCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAgICAgIGlmIChibG9ja0xh
YmVsc1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAubGlua1RvKGJsb2NrTGFi
ZWxzW3RhcmdldF0sICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAgICB9OworCisgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxvY2tKdW1wc1tibG9ja10u
bGluaygmaml0KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CisgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGluc3QuZ2VuZXJhdGUoaml0LCBjb250
ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9wY29kZSgpID09
IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZp
bmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYg
KGJsb2NrLT5sYXN0KCkub3Bjb2RlKCkgPT0gUmV0KSB7CisgICAgICAgICAgICAvLyBXZSBjdXJy
ZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwg
c28gd2UgbmVlZCB0bworICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgorICAgICAg
ICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+bGFzdCgpLmdlbmVyYXRlKGppdCwgY29udGV4
dCk7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykKKyAgICAgICAgICAgIGp1bXAg
PSBpbnN0LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIHN3aXRjaCAoYmxvY2stPm51
bVN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBBU1NFUlQoIWp1
bXAuaXNTZXQoKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAg
ICAgICAgbGluayhqdW1wLCBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1
Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxvY2so
MSkgIT0gY29kZS5maW5kTmV4dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgICAgICBsaW5rKGpp
dC5qdW1wKCksIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygxKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0
byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQYXRocykKKyAgICAgICAgbGF0ZVBhdGgtPnJ1bihq
aXQsIGNvbnRleHQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2Vu
ZXJhdGVfaAorI2RlZmluZSBBaXJHZW5lcmF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNv
ZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFjayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhh
c24ndCBoYWQgYW55CisvLyByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhv
c2UgdGhpbmdzLCBhbmQgdGhlbiBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuCisv
LyBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNr
cyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBpdCBpcworLy8gZ2VuZXJhdGluZy4KK3ZvaWQgZ2Vu
ZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2VuZXJh
dGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25D
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0aW9uQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisjZGVmaW5lIEFpckdlbmVyYXRpb25Db250ZXh0
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVj
dCBHZW5lcmF0aW9uQ29udGV4dCB7CisgICAgdHlwZWRlZiB2b2lkIExhdGVQYXRoRnVuY3Rpb24o
Q0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRh
c2s8TGF0ZVBhdGhGdW5jdGlvbj4gTGF0ZVBhdGg7CisKKyAgICBWZWN0b3I8UmVmUHRyPExhdGVQ
YXRoPj4gbGF0ZVBhdGhzOworICAgIENvZGUqIGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJI
YW5kbGVDYWxsZWVTYXZlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFz
ZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKwordm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2Nv
cGUgcGhhc2VTY29wZShjb2RlLCAiaGFuZGxlQ2FsbGVlU2F2ZXMiKTsKKworICAgIFJlZ2lzdGVy
U2V0IHVzZWRDYWxsZWVTYXZlczsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgaW5z
dC5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEF0IGZpcnN0IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2VkIHJlZ3Mu
CisgICAgICAgICAgICAgICAgICAgIHVzZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3ZSBmaWx0
ZXIgdG8gcmVhbGx5IGdldCB0aGUgY2FsbGVlIHNhdmVzLgorICAgIHVzZWRDYWxsZWVTYXZlcy5m
aWx0ZXIoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKKyAgICBjb2RlLmNh
bGxlZVNhdmVSZWdpc3RlcnMoKSA9IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KHVzZWRDYWxsZWVTYXZl
cyk7CisKKyAgICBzaXplX3QgYnl0ZVNpemUgPSAwOworICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lz
dGVycygpLmZvckVhY2goCisgICAgICAgIFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50
cnkpIHsKKyAgICAgICAgICAgIGJ5dGVTaXplID0gc3RkOjptYXgoLWVudHJ5Lm9mZnNldCgpLCBi
eXRlU2l6ZSk7CisgICAgICAgIH0pOworCisgICAgU3RhY2tTbG90KiBzYXZlc0FyZWEgPSBjb2Rl
LmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICAvLyBU
aGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUgYWxyZWFkeSBwaW5uZWQgYSBk
aWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCisgICAgLy8gYXJlYS4KKyAgICBzYXZlc0FyZWEt
PnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOworCisgICAgYXV0byBhcmdGb3IgPSBbJl0gKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSB7CisgICAgICAgIHJldHVybiBBcmc6OlN0YWNr
KHNhdmVzQXJlYSwgZW50cnkub2Zmc2V0KCkgKyBieXRlU2l6ZSk7CisgICAgfTsKKworICAgIElu
c2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgCisgICAgLy8gRmlyc3QgaW5zZXJ0
IHNhdmluZyBjb2RlIGluIHRoZSBwcm9sb2d1ZS4KKyAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKS5mb3JFYWNoKAorICAgICAgICBbJl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5
KSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgIDAs
IGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgVG1wKGVudHJ5LnJlZygp
KSwgYXJnRm9yKGVudHJ5KSk7CisgICAgICAgIH0pOworICAgIGluc2VydGlvblNldC5leGVjdXRl
KGNvZGVbMF0pOworCisgICAgLy8gTm93IGluc2VydCByZXN0b3JlIGNvZGUgYXQgZXBpbG9ndWVz
LgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIEluc3QmIGxh
c3QgPSBibG9jay0+bGFzdCgpOworICAgICAgICBpZiAobGFzdC5vcGNvZGUoKSAhPSBSZXQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMo
KS5mb3JFYWNoKAorICAgICAgICAgICAgWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRy
eSkgeworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrLT5zaXplKCkgLSAxLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92ZSA6IE1v
dmVEb3VibGUsCisgICAgICAgICAgICAgICAgICAgIGFyZ0ZvcihlbnRyeSksIFRtcChlbnRyeS5y
ZWcoKSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJs
b2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisjZGVmaW5lIEFpckhh
bmRsZUNhbGxlZVNhdmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhp
cyBwaGFzZSBpZGVudGlmaWVzIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBhbmQgYWRkcyBjb2RlIHRv
IHNhdmUvcmVzdG9yZSB0aGVtIGluIHRoZQorLy8gcHJvbG9ndWUvZXBpbG9ndWUgdG8gdGhlIGNv
ZGUuIEl0J3MgYSBtYW5kYXRvcnkgcGhhc2UuCisKKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBjb29s
IHRvIG1ha2UgdGhpcyBtb3JlIGludGVyYWN0aXZlIHdpdGggdGhlIEFpciBjbGllbnQgYW5kIGFs
c28gbW9yZQorLy8gcG93ZXJmdWwuCisvLyBXZSBzaG91bGQgaGF2ZSBzaHJpbmsgd3JhcHBpbmc6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTgKKy8vIFdlIHNo
b3VsZCBtYWtlIHRoaXMgaW50ZXJhY3Qgd2l0aCB0aGUgY2xpZW50OiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU5CisKK3ZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMo
Q29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRp
b25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkFpckJhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCit2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhibG9jay0+bV9pbnN0cywgbV9pbnNlcnRp
b25zKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlySW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgQWlySW5zZXJ0aW9uU2V0X2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlv
bi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQ29kZTsK
KwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247CisKK2NsYXNzIEluc2Vy
dGlvblNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUmIGNvZGUpCisgICAgICAg
IDogbV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUmIGNvZGUoKSB7IHJldHVy
biBtX2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmRJ
bnNlcnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBl
bmQoc3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwgSW5zdCYmIGlu
c3QpCisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6
OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRz
JiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgSW5zdChz
dGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgdm9p
ZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7Cisg
ICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckluc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlySW5zdC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc3Q6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQob3Bjb2RlLCAiICIsIGxpc3REdW1w
KGFyZ3MpLCAiICA7ICIsICpvcmlnaW4pOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpcklu
c3RfaAorI2RlZmluZSBBaXJJbnN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisK
K25hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK3N0cnVjdCBJ
bnN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAg
ICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgICAgIDogb3JpZ2luKG9y
aWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwg
VmFsdWUqIG9yaWdpbiwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
OiBhcmdzeyBhcmcsIGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAg
ICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBv
cGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKKyAgICAgICAg
OiBhcmdzKGFyZ3VtZW50cykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9w
Y29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFs
dWUqIG9yaWdpbiwgQXJnTGlzdCYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzKFdURjo6bW92
ZShhcmd1bWVudHMpKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2Rl
KG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3Jz
IGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBmb3Ig
dGhpbmdzIHRoYXQKKyAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlm
IHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4geW91J3JlCisgICAg
Ly8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCisKKyAgICAvLyBUaGlzIG9ubHkgd2Fsa3MgdGhv
c2UgVG1wcyB0aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCwgYW5kIGl0IGRvZXNuJ3QgdGVs
bCB5b3UgdGhlaXIgcm9sZQorICAgIC8vIG9yIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CisgICAgeworICAgICAgICBmb3IgKEFyZyYgYXJnIDogYXJncykKKyAgICAgICAgICAgIGFyZy5m
b3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0eXBlZGVmIHZvaWQgRWFjaEFy
Z0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJnOjpUeXBlKTsKKyAgICAKKyAgICAvLyBDYWxs
cyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUpLiBUaGlzIGZ1bmN0aW9uIGlzIGF1
dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEFyZyhjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKTsKKworICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKHRtcCwgcm9sZSwgdHlw
ZSkuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAo
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvckVhY2hBcmdSb2xlKAor
ICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBl
KSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlwZSwgZnVuY3Rvcik7
CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGluZyBjYW4gYmUgZWl0aGVyIEFy
ZyBvciBUbXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOworCisgICAgLy8gUmV0
dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGEgU3BlY2lhbCouIFRoaXMgdW5sb2Nr
cyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAgYm9vbCBoYXNTcGVjaWFsKCkgY29uc3Q7
CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFsIHJlZ2lzdGVycyBjbG9iYmVyZWQgYnkg
dGhpcyBvcGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5jeSwKKyAgICAvLyBleHRyYUNs
b2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisg
ICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpOworCisgICAgLy8gVXNl
IHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4gVGhpcyBzaG91bGQgYmUg
ZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisgICAgLy8gdGhhdCBmb3IgZWZmaWNpZW5j
eSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgaWYgaGFzU3BlY2lhbCgpIHJldHVy
bnMgdHJ1ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQm
KTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gb25lIG9mIHRoZSB2YWxpZCBmb3Jt
cyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBv
cGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNWYWxpZEZvcm0oKTsKKworICAgIC8vIEFz
c3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBmb3JtIHJpZ2h0IG5vdywgd2ls
bCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisgICAgLy8gZm9ybXMgaWYgd2UgcHV0
IGFuIEFkZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChvciBhIFN0YWNrU2xvdCBvciBDYWxsQXJn
LCBvZiBjb3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVuIGluZGV4PyBTcGlsbGluZyB1c2VzIHRo
aXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvIGZpbmQgVG1wcyB0aGF0IG5lZWQgc3Bp
bGxpbmc7CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlzIHRvIHNlZSBpZiBp
dCBjYW4gcmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBhbiBBcmc6OkFkZHIuIElmIGl0CisgICAg
Ly8gZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFyZydzIGZvckVhY2hU
bXAgdG8gZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4KKyAgICAvLworICAgIC8vIFRoaXMgZnVu
Y3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29s
IGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEdlbmVyYXRlIHNvbWUg
Y29kZSBmb3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBpcywgbGlrZSwgbGl0ZXJhbGx5IG91ciBi
YWNrZW5kLiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRlcm1pbmFsLCBpdCByZXR1cm5zIHRoZSBq
dW1wIHRoYXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0aGUgInRoZW4iIGNhc2UsIHdpdGggdGhl
ICJlbHNlIgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10aHJvdWdoLiBUaGlzIGZ1bmN0aW9uIGlz
IGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIEFyZ0xpc3QgYXJnczsKKyAg
ICBWYWx1ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVlIHRoYXQgdGhpcyBvcmlnaW5hdGVkIGZy
b20uCisgICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdElubGluZXNfaAor
I2RlZmluZSBBaXJJbnN0SW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCisjaW5jbHVkZSAiQWly
U3BlY2lhbHMuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9y
RWFjaDxUbXA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9y
RWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
aW5zdC5mb3JFYWNoVG1wKGZ1bmN0b3IpOworICAgIH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBG
b3JFYWNoPEFyZz4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBm
b3JFYWNoKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoZnVuY3Rvcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKK3sKKyAgICBGb3JFYWNoPFRoaW5nPjo6Zm9yRWFjaCgqdGhpcywgZnVuY3Rvcik7
Cit9CisKK2Jvb2wgSW5zdDo6aGFzU3BlY2lhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFyZ3Mu
c2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBJ
bnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOwor
ICAgIHJldHVybiBhcmdzWzBdLnNwZWNpYWwoKS0+ZXh0cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsK
K30KKwordm9pZCBJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOworICAgIGFyZ3NbMF0u
c3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0ZXJzKCp0aGlzLCB1c2VkUmVnaXN0ZXJzKTsKK30K
KworaW5saW5lIGJvb2wgaXNTaGlmdFZhbGlkKEluc3QmIGluc3QpCit7CisjaWYgQ1BVKFg4NikK
KyAgICByZXR1cm4gaW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3Rlcjo6Y3gpOworI2Vsc2UK
KyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfSAgIAorCitpbmxpbmUgYm9vbCBpc0xzaGlmdDMy
VmFsdWUoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNTaGlmdFZhbGlkKGluc3QpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlySW5zdElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyTGl2ZW5lc3NfaAorI2RlZmluZSBBaXJMaXZlbmVzc19oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzSW5k
ZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCisvLyBZb3UgY2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVyIEFyZydz
LiBJZiB5b3UgY29tcHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNrIGxpdmVu
ZXNzIGFuZCB0bXAgbGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNzIExp
dmVuZXNzIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsKKyAgICAg
ICAgbV9saXZlQXRIZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2ZUF0VGFp
bC5yZXNpemUoY29kZS5zaXplKCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IHNl
ZW47CisKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNoYW5n
ZWQpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgZm9yIChz
aXplX3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAg
ICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOworICAgICAg
ICAgICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTsp
CisgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5k
ZXgpKTsKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsK
KyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1f
bGl2ZUF0SGVhZFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAgICAgICAg
ICAgICBsb2NhbENhbGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5kKCkpOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdID0g
bG9jYWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0K
KworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107CisgICAg
fQorCisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJzZS4KKyAg
ICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxjKExpdmVu
ZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1fbGl2ZShs
aXZlbmVzcy0+bGl2ZUF0VGFpbChibG9jaykpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlKCkgY29uc3QgeyByZXR1cm4gbV9saXZlOyB9
CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+JiYgdGFrZUxpdmUoKSB7IHJldHVybiBXVEY6Om1vdmUo
bV9saXZlKTsgfQorCisgICAgICAgIHZvaWQgZXhlY3V0ZShJbnN0JiBpbnN0KQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgZGVmJ3MuCisgICAgICAgICAgICBpbnN0LmZv
ckVhY2g8VGhpbmc+KAorICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0Fs
aXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZl
LnJlbW92ZShhcmcpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBOZXh0
IGhhbmRsZSBjbG9iYmVyZWQgcmVnaXN0ZXJzLgorICAgICAgICAgICAgaWYgKGluc3QuaGFzU3Bl
Y2lhbCgpKSB7CisgICAgICAgICAgICAgICAgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JF
YWNoKAorICAgICAgICAgICAgICAgICAgICBbdGhpc10gKFJlZyByZWcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoVGhpbmcocmVnKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIEZpbmFsbHkgaGFuZGxlIHVzZSdzLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5n
PigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBB
cmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJn
Ojppc1VzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5hZGQoYXJnKTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
SGFzaFNldDxUaGluZz4gbV9saXZlOworICAgIH07CisgICAgCitwcml2YXRlOgorICAgIEluZGV4
TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhN
YXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0VGFpbDsKK307CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBBaXJMaXZlbmVzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMzQgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgU3ls
bGFidXM6CisjCisjIFJvbGVzIGFuZCB0eXBlczoKKyMgVTpHID0+IHVzZSBvZiBhIGdlbmVyYWwt
cHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBEOkcgPT4gZGVmIG9mIGEgZ2VuZXJhbC1wdXJw
b3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkcgPT4gdXNlIGFuZCBkZWYgb2YgYSBnZW5lcmFs
LXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVTpGID0+IHVzZSBvZiBhIGZsb2F0IHJlZ2lz
dGVyIG9yIHZhbHVlCisjIEQ6RiA9PiBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQor
IyBVRDpGID0+IHVzZSBhbmQgZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMKKyMg
QXJndW1lbnQga2luZHM6CisjIFRtcCA9PiB0ZW1wb3Jhcnkgb3IgcmVnaXN0ZXIKKyMgSW1tID0+
IDMyLWJpdCBpbW1lZGlhdGUgaW50CisjIEltbTY0ID0+IFRydXN0ZWRJbW02NAorIyBBZGRyID0+
IGFkZHJlc3MgYXMgdGVtcG9yYXJ5L3JlZ2lzdGVyK29mZnNldAorIyBJbmRleCA9PiBCYXNlSW5k
ZXggYWRkcmVzcworIyBBYnMgPT4gQWJzb2x1dGVBZGRyZXNzCisjCisjIFRoZSBwYXJzZXIgdmll
d3MgdGhlc2UgdGhpbmdzIGFzIGtleXdvcmRzLCBhbmQgdW5kZXJzdGFuZHMgdGhhdCB0aGV5IGZh
bGwgaW50byB0d28gZGlzdGluY3QgY2xhc3NlcworIyBvZiB0aGluZ3MuIFNvLCBhbHRob3VnaCB0
aGlzIGZpbGUgdXNlcyBhIHBhcnRpY3VsYXIgaW5kZW50YXRpb24gc3R5bGUsIG5vbmUgb2YgdGhl
IHdoaXRlc3BhY2Ugb3IKKyMgZXZlbiBuZXdsaW5lcyBhcmUgbWVhbmluZ2Z1bCB0byB0aGUgcGFy
c2VyLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHdyaXRlOgorIworIyBGb280MiBVOkcsIFVEOkYg
SW1tLCBUbXAgQWRkciwgVG1wCisjCisjIEFuZCB0aGUgcGFyc2VyIHdvdWxkIGtub3cgdGhhdCB0
aGlzIGlzIHRoZSBzYW1lIGFzOgorIworIyBGb280MiBVOkcsIFVEOkYKKyMgICAgIEltbSwgVG1w
CisjICAgICBBZGRyLCBUbXAKKyMKKyMgSS5lLiBhIHR3by1mb3JtIGluc3RydWN0aW9uIHRoYXQg
dXNlcyBhIEdQUiBvciBhbiBpbnQgaW1tZWRpYXRlIGFuZCB1c2VzK2RlZnMgYSBmbG9hdCByZWdp
c3Rlci4KKworIyBOb3RlIHRoYXQgdGhlIG9wY29kZXMgaGVyZSBoYXZlIGEgbGVhZGluZyBjYXBp
dGFsIChBZGQzMikgYnV0IG11c3QgY29ycmVzcG9uZCB0byBNYWNyb0Fzc2VtYmxlcgorIyBBUEkg
dGhhdCBoYXMgYSBsZWFkaW5nIGxvd2VyLWNhc2UgKGFkZDMyKS4KKworTm9wCisKK0FkZDMyIFU6
RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBUbXAKKyAgICBB
ZGRyLCBUbXAKKyAgICBUbXAsIEFkZHIKKworQWRkMzIgVTpHLCBVOkcsIEQ6RworICAgIEltbSwg
VG1wLCBUbXAKKworQW5kMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAor
ICAgIFRtcCwgQWRkcgorICAgIEFkZHIsIFRtcAorICAgIEltbSwgQWRkcgorCitMc2hpZnQzMiBV
OkcsIFVEOkcKKyAgICBUbXAqLCBUbXAKKyAgICBJbW0sIFRtcAorCitNdWwzMiBVOkcsIFVEOkcK
KyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorCitNb3ZlIFU6RywgRDpHCisgICAgVG1wLCBU
bXAKKyAgICBJbW0sIFRtcAorICAgIEltbTY0LCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9hZCAj
IFRoaXMgbWVhbnMgdGhhdCAiTW92ZSBBZGRyLCBUbXAiIGlzIGNvZGUtZ2VuZXJhdGVkIGFzICJs
b2FkIiBub3QgIm1vdmUiLgorICAgIFRtcCwgQWRkciBhcyBzdG9yZQorCitNb3ZlRG91YmxlIFU6
RiwgRDpGCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9hZERvdWJsZQorICAgIFRt
cCwgQWRkciBhcyBzdG9yZURvdWJsZQorCitNb3ZlNjRUb0RvdWJsZSBVOkcsIEQ6RgorICAgIFRt
cCwgVG1wCisKK01vdmVEb3VibGVUbzY0IFU6RiwgRDpHCisgICAgVG1wLCBUbXAKKworQnJhbmNo
QWRkMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAg
UmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBU
bXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTXVsMzIgVTpHLCBVOkcs
IFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgQWRkciwg
VG1wCisKK0JyYW5jaFN1YjMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBU
bXAsIFRtcAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisg
ICAgUmVzQ29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE5l
ZzMyIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wCisKK0p1bXAgL2JyYW5jaAor
CitSZXQgL3Rlcm1pbmFsCisKK0JyZWFrcG9pbnQgL3Rlcm1pbmFsCisKKyMgQWlyIGFsbG93cyBm
b3IgZXhvdGljIGJlaGF2aW9yLiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRp
cmVseSBieSB0aGUgU3BlY2lhbCBvcGVyYW5kLAorIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBv
cGVyYW5kLgorc3BlY2lhbCBQYXRjaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclBoYXNlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRh
dGUuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29k
ZSwgY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1fY29kZShjb2RlKQorICAgICwgbV9uYW1lKG5h
bWUpCit7CisgICAgaWYgKHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0
YUxvZygiQWlyIGJlZm9yZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7
CisgICAgfQorCisgICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1f
ZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhjb2RlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2Nv
cGUoKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAg
dmFsaWRhdGUoY29kZSwgbV9uYW1lLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclBoYXNlU2NvcGVfaAorI2RlZmluZSBB
aXJQaGFzZVNjb3BlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTm9u
Y29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKENvZGUmLCBj
b25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFsaWRh
dGlvbgorCitwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBtX25h
bWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWly
UGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVn
aXN0ZXJQcmlvcml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0
eS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3BzSW5Qcmlvcml0
eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPEdQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25j
ZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxHUFJSZWc+
KCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBhbGwgPSBSZWc6OmFsbEdQUnMoKTsKKyAgICAg
ICAgICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICAg
ICAgICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJz
KCkpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0Ojpj
YWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGwpIHsK
KyAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAg
ICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBmb3IgKFJlZyByZWcgOiBhbGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoY2FsbGVlU2F2
ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisK
K2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRp
YyBWZWN0b3I8RlBSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNl
OworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAg
ICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEZQUlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lz
dGVyU2V0IGFsbCA9IFJlZzo6YWxsRlBScygpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2Fs
bGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAg
ICBmb3IgKFJlZyByZWcgOiBhbGwpIHsKKyAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUu
Z2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBhbGwpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAg
cmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7Cisg
ICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0
eU9yZGVyKEFyZzo6VHlwZSB0eXBlKQoreworICAgIHN0YXRpYyBWZWN0b3I8UmVnPiogcmVzdWx0
W0FyZzo6bnVtVHlwZXNdOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0
ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICBy
ZXN1bHRbQXJnOjpHUF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoR1BS
UmVnIHJlZyA6IGdwcnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRb
QXJnOjpHUF0tPmFwcGVuZChSZWcocmVnKSk7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0g
PSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoRlBSUmVnIHJlZyA6IGZwcnNJ
blByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0tPmFwcGVu
ZChSZWcocmVnKSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0W3R5cGVdOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9y
aXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyUmVnaXN0ZXJQcmlvcml0eV9oCisjZGVmaW5lIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkZQUklu
Zm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZl
Y3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7Citjb25zdCBWZWN0b3I8RlBSUmVn
PiYgZnByc0luUHJpb3JpdHlPcmRlcigpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPiBzdHJ1
Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyOwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJz
SW5Qcmlvcml0eU9yZGVyPEdQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8R1BSUmVnPiYgaW5Q
cmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZ3BzSW5Qcmlvcml0eU9yZGVyKCk7IH0KK307Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz4geworICAgIGNv
bnN0IFZlY3RvcjxGUFJSZWc+JiBpblByaW9yaXR5T3JkZXIoKSB7IHJldHVybiBmcHNJblByaW9y
aXR5T3JkZXIoKTsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4KK2NvbnN0IFZlY3Rv
cjxCYW5rOjpSZWdpc3RlclR5cGU+JiByZWdzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICByZXR1
cm4gUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEJhbms+OjppblByaW9yaXR5T3JkZXIoKTsKK30K
KworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitTcGVjaWFs
OjpTcGVjaWFsKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX25hbWUobmFtZSkKKyAgICAsIG1f
aW5kZXgoVUlOVF9NQVgpCit7Cit9CisKK1NwZWNpYWw6On5TcGVjaWFsKCkKK3sKK30KKworQ1N0
cmluZyBTcGVjaWFsOjpuYW1lKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7
CisgICAgZHVtcEltcGwob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOworfQorCit2
b2lkIFNwZWNpYWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoZHVtcFByZWZpeCk7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICBpZiAobV9pbmRleCAhPSBV
SU5UX01BWCkKKyAgICAgICAgb3V0LnByaW50KG1faW5kZXgpOworfQorCit2b2lkIFNwZWNpYWw6
OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCp0aGlz
LCAiOiAiKTsKKyAgICBkZWVwRHVtcEltcGwob3V0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBaXJTcGVjaWFsX2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Njb3Bl
ZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBHZW5lcmF0aW9uQ29u
dGV4dDsKKworY2xhc3MgU3BlY2lhbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlY2lh
bCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiJiI7CisgICAgCisgICAgU3BlY2lhbCgpOworICAgIHZp
cnR1YWwgflNwZWNpYWwoKTsKKworICAgIENTdHJpbmcgbmFtZSgpIGNvbnN0OworCisgICAgdmly
dHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNo
QXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKEluc3QmKSA9IDA7
CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkg
PSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCBvbiBmb3IgZWFjaCBJbnN0IHRoYXQgdXNl
cyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8KKyAgICAvLyBndWFy
YW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2VkIGZyb20ganVzdCBvbmUgSW5zdCwgYmVjYXVz
ZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywKKyAgICAvLyBpZiB5b3Ugd2FudCB0byBwYXNz
IHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5lcmF0ZSgpLCB0aGVuIHlvdSBoYXZlIHRvIGVp
dGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVyYXRlIEFpciB0aGF0IHN0YXJ0cyB3aXRoIGEg
c2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5zdCwgYW5kIHRoZW4gbWVyZ2UKKyAgICAvLyAg
ICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBwcm9iYWJseSBub3QgZ3JlYXQsIGJ1dCBpdCBv
cHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0aGF0CisgICAgLy8gICAgQWlyIGRpZG4ndCBk
dXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVwbGljYXRpb24gZGlkbid0IGNhdXNlIGFueSBp
bnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8gICAgcmVnaXN0ZXIgYXNzaWdubWVudC4KKyAg
ICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNpYWwgbWFpbnRhaW4gYSBIYXNoTWFwPEluc3Qq
LCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYW5hbHlzaXMKKyAgICAvLyAg
ICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlzIHBlcmZvcm1lZCBqdXN0IGJlZm9yZSBjb2Rl
IGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdheQorICAgIC8vICAgIGZvciB0aGUgVmVjdG9y
PD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRvIGJlIHJlYWxsb2NhdGVkLiBUaGlzIGFsbG93
cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29uc3VsdCB0aGUgSGFzaE1hcC4KKyAgICAvLwor
ICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVzZSAoMSkgYW5kIGZpcmUgdXAgYSBIYXNoTWFw
IGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaXQn
cyBub3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgYmVpbmcgY2Fs
bGVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8gYXMgZ2VuZXJhdGUoKS4gSWYgd2UgY291bGQg
cmVseSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1c3QgaGF2ZSBlYWNoIFNwZWNpYWwgaW5zdGFu
Y2UKKyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBvZiBSZWdpc3RlclNldCdzIGFuZCB0aGVuIHBy
b2Nlc3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0IG9yZGVyIGluCisgICAgLy8gZ2VuZXJhdGUo
KS4gQnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5jZSBpcyB1bmxpa2VseSB0byBjaGFuZ2Ugc2lu
Y2UgaXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBwZXJmb3JtYW5jZSBvZiB0aGUgbGl2ZW5lc3Mg
YW5hbHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJyZW50bHksIHdlIGRvICgxKSBmb3IgQjMgc3Rh
Y2ttYXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25z
dCBSZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIENDYWxsSGVscGVyczo6SnVt
cCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7
CisKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5z
dCYpID0gMDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQg
ZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwg
dm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBDb2RlOworCisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIHVuc2lnbmVk
IG1faW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3BlY2lhbER1bXAgeworcHVibGljOgorICAgIERl
ZXBTcGVjaWFsRGltcChTcGVjaWFsKiBzcGVjaWFsKQorICAgICAgICA6IG1fc3BlY2lhbChzcGVj
aWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChtX3NwZWNpYWwpCisgICAgICAgICAgICBtX3NwZWNpYWwt
PmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51
bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFNwZWNpYWwqIG1fc3BlY2lhbDsKK307CisK
K0RlZXBTcGVjaWFsRHVtcCBkZWVwRHVtcChTcGVjaWFsKiBzcGVjaWFsKQoreworICAgIHJldHVy
biBEZWVwU3BlY2lhbER1bXAoc3BlY2lhbCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGVj
aWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5
dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpcklu
c2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGlu
ZyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxF
dmVyeXRoaW5nIik7CisKKyAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3Rl
cnMgdXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KKyAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6
ZSgpKTsKKyAgICBMaXZlbmVzczxUbXA+IGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBs
b2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10u
cmVzaXplKGJsb2NrLT5zaXplKCkgKyAxKTsKKworICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3Rl
cnMgPSBbJl0gKHVuc2lnbmVkIGluZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0
ID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5kZXhdOworICAgICAgICAgICAgZm9yIChUbXAgdG1w
IDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkK
KyAgICAgICAgICAgICAgICAgICAgc2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgc2V0VXNlZFJlZ2lzdGVycyhibG9jay0+c2l6ZSgpKTsKKyAg
ICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsg
aW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQo
aW5zdEluZGV4KSk7CisgICAgICAgICAgICBzZXRVc2VkcmVnaXN0ZXJzKGluc3RJbmRleCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2gg
dG1wLgorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhbGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNd
OworICAgIGZvciAodW5zaWduZWQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgQXJnOjpudW1U
eXBlczsgKyt0eXBlSW5kZXgpIHsKKyAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Ns
b3RzID0gYWxsU3RhY2tTbG90c1t0eXBlSW5kZXhdOworICAgICAgICBBcmc6OlR5cGUgdHlwZSA9
IHN0YXRpY19jYXN0PEFyZzo6VHlwZT4odHlwZUluZGV4KTsKKyAgICAgICAgc3RhY2tTbG90cy5y
ZXNpemUoY29kZS5udW1UbXBzKHR5cGUpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRl
eCA9IGNvZGUubnVtVG1wcyh0eXBlKTsgdG1wSW5kZXgtLTspCisgICAgICAgICAgICBzdGFja1Ns
b3RzW3RtcEluZGV4XSA9IGNvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255
bW91cyk7CisgICAgfQorCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVk
IGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7
CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0QmVmb3JlID0gdXNlZFJlZ2lzdGVyc1tibG9j
a11baW5zdEluZGV4XTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRBZnRlciA9IHVzZWRS
ZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleCArIDFdOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9
IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAg
ICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFj
a1Nsb3QgPSBhbGxTdGFja1Nsb3RzW3R5cGVdW3RtcC50bXBJbmRleCgpXTsKKyAgICAgICAgICAg
ICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90KTsKKworICAgICAgICAgICAg
ICAgICAgICAvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgYSByZWdpc3RlciB0byB1c2UuIEhvdyB3ZSBk
byB0aGF0IGRlcGVuZHMgb24gdGhlIHJvbGUuCisgICAgICAgICAgICAgICAgICAgIFJlZyBjaG9z
ZW5SZWc7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6VXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcg
cmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBBcmc6OkRlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6
IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6VXNlRGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVn
c0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKGNob3NlblJl
Zyk7CisKKyAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSB0eXBlID09IEFyZzo6R1Ag
PyBNb3ZlIDogTW92ZURvdWJsZQorCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNl
KHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4s
IGFyZywgdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc0RlZihyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBt
b3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
YmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpclNwaWxsRXZlcnl0aGluZ19oCisjZGVmaW5lIEFpclNwaWxsRXZl
cnl0aGluZ19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaXMgYSBw
aGFzZSBmb3IgdGVzdGluZy4gSXQgYmVoYXZlcyBsaWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGlu
IHRoZSBzZW5zZSB0aGF0IGl0CisvLyBlbGltaW5hdGVzIHRlbXBvcmFyaWVzIGZyb20gdGhlIHBy
b2dyYW0uIEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8vIHRl
bXBvcmFyaWVzLiBUaGUgcmVzdWx0aW5nIGNvZGUgaXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVmZmlj
aWVudC4gVGhpcyBwaGFzZSBpcyBncmVhdCBpZiB5b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUgaXMg
YSBidWcgaW4gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gWW91IGNhbiBjb25maXJtIHRoaXMgYnkg
cnVubmluZyB0aGlzCisvLyBwaGFzZSBpbnN0ZWFkIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3Iu
CisvLworLy8gTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBl
c3QgdGhpbmcgcG9zc2libGUsIGl0J3Mgbm90IGV2ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1
bGFybHkgZWZmaWNpZW50IHdheS4gU28sIGRvbid0IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcg
dGhpcyBwaGFzZSB0byByZWR1Y2UgY29tcGlsZXIKKy8vIGxhdGVuY3kuIElmIHlvdSB3YW50ZWQg
dG8gZG8gdGhhdCwgeW91IHNob3VsZCBjb21lIHVwIHdpdGggYSBjbGV2ZXIgYWxnb3JpdGhtIGlu
c3RlYWQgb2YgdXNpbmcKKy8vIHRoaXMgc2lsbHkgdGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRo
aW5nKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclNwaWxsRXZlcnl0aGluZ19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyU3RhY2tTbG90LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgU3RhY2tTbG90OjpzZXRPZmZz
ZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCit7CisgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsK
KyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgbV92YWx1ZS0+bV9vZmZzZXRGcm9tRlAgPSB2YWx1
ZTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgU3RhY2tTbG90Ojpk
ZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYnl0ZVNp
emUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCwg
Iiwga2luZCA9ICIsIG1fa2luZCk7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG91dC5wcmlu
dCgiLCB2YWx1ZSA9ICIsICptX3ZhbHVlKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBaXJTdGFja1Nsb3RfaAorI2RlZmluZSBBaXJTdGFja1Nsb3RfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUg
PHd0Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTdGFja1Nsb3R2YWx1ZTsKKworbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIFN0YWNrU2xvdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU3RhY2tTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBT
dGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldXRybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIHVuc2lnbmVkIGFsaWdu
bWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAxKQorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDIpCisgICAgICAgICAg
ICByZXR1cm4gMjsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gNCkKKyAgICAgICAgICAgIHJl
dHVybiA0OworICAgICAgICByZXR1cm4gODsKKyAgICB9CisKKyAgICBTdGFja1Nsb3RWYWx1ZSog
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICAvLyBaZXJvIG1lYW5zIHRo
YXQgaXQncyBub3QgeWV0IGFzc2lnbmVkLgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAvLyBUaGlzIHNob3VsZCB1c3Vh
bGx5IGp1c3QgYmUgY2FsbGVkIGZyb20gcGhhc2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbi4g
QnV0IHlvdSBjYW4KKyAgICAvLyB0b3RhbGx5IGZvcmNlIGEgc3RhY2sgc2xvdCB0byBsYW5kIGF0
IHNvbWUgb2Zmc2V0LgorICAgIHZvaWQgc2V0T2Zmc2V0RnJvbUZQKGludHB0cl90KTsKKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAg
IFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtp
bmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fYnl0ZVNpemUoYnl0
ZVNpemUpCisgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29mZnNldEZyb21G
UCh2YWx1ZS0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAg
ICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChieXRlU2l6ZSk7CisgICAg
fQorICAgIAorICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgdW5zaWduZWQgbV9pbmRleDsK
KyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsK
KyAgICBTdGFja1Nsb3RWYWx1ZSogbV92YWx1ZTsKK307CisKK2NsYXNzIERlZXBTdGFja1Nsb3RE
dW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3RhY2tTbG90RHVtcChTdGFja1Nsb3QqIHNsb3QpCisg
ICAgICAgIDogbV9zbG90KHNsb3QpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc2xvdCkKKyAgICAgICAg
ICAgIG1fc2xvdC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0
LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgU3RhY2tTbG90KiBtX3Ns
b3Q7Cit9OworCitEZWVwU3RhY2tTbG90RHVtcCBkZWVwRHVtcChTdGFja1Nsb3QqIHNsb3QpCit7
CisgICAgcmV0dXJuIERlZXBTdGFja1Nsb3REdW1wKHNsb3QpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyU3RhY2tTbG90X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJUbXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBUbXA6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgi
PG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNSZWcoKSkgewor
ICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGlzR1BUbXAoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0bXAiLCBncFRtcEluZGV4KCkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCIlZnRtcCIsIGZwVG1w
SW5kZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1w
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wX2gKKyNkZWZpbmUgQWlyVG1w
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBBIFRtcCBpcyBhIGdl
bmVyYWxpemF0aW9uIG9mIGEgcmVnaXN0ZXIuIEl0IGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIGFu
eSBHUFIgb3IgRlBSLiBJdCBjYW4gYWxzbworLy8gYmUgdXNlZCB0byByZWZlciB0byBhbiB1bmFs
bG9jYXRlZCByZWdpc3RlciAoaS5lLiBhIHRlbXBvcmFyeSkuIExpa2UgbWFueSBBaXIgY2xhc3Nl
cywgd2UgdXNlCisvLyBkZWxpYmVyYXRlbHkgdGVyc2UgbmFtaW5nIHNpbmNlIHdlIHdpbGwgaGF2
ZSB0byB1c2UgdGhpcyBuYW1lIGEgbG90LgorCitjbGFzcyBUbXAgeworcHVibGljOgorICAgIFRt
cCgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBU
bXAoUmVnIHJlZykKKyAgICB7CisgICAgICAgIGlmIChyZWcpIHsKKyAgICAgICAgICAgIGlmIChy
ZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlR1BSKHJlZy5ncHIo
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUZQ
UihyZWcuZnByKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fdmFsdWUgPSAwOwor
ICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChjb25zdCBBcmcmKTsKKworICAgIHN0YXRpYyBUbXAg
Z3BUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlR1BUbXAoaW5kZXgpOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZnBUbXBGb3JJbmRleCh1bnNp
Z25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFs
dWU7IH0KKworICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNF
bmNvZGVkR1AobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29s
IGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUFIobV92YWx1
ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNFbmNvZGVkRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNSZWcoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1BSKCkgfHwgaXNGUFIoKTsKKyAgICB9CisKKyAg
ICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFIobV92
YWx1ZSk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZGVjb2RlRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAg
ICAgICAgcmV0dXJuIGZwcigpOworICAgIH0KKworICAgIGJvb2wgaGFzVG1wSW5kZXgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc1JlZygpOworICAgIH0KKworICAgIHVuc2lnbmVk
IGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQVG1wKG1f
dmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGRlY29kZUZQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2ln
bmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAg
ICAgICByZXR1cm4gZ3BUbXBJbmRleCgpOworICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOwor
ICAgIH0KKworICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ISEqdGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVG1wJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7Cisg
ICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMg
aW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDEgKyBp
bmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQKHVuc2lnbmVkIGluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIC0xIC0gaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGlu
dCBlbmNvZGVHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUChn
cHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW50IGVuY29kZUZQUihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29k
ZUZQKGZwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUlJlZ2lzdGVyKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxICsg
aW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFRtcCh1bnNpZ25lZCBpbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RG
UFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5j
b2RlZEdQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA+IDA7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlAoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRH
UFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAm
JiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFIoaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiB2YWx1ZSA+PSBlbmNvZGVkRlBSKE1h
Y3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNv
ZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRHUFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEZQUih2YWx1ZSk7CisgICAgfQorCisgICAg
c3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVn
PigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RS
ZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBB
U1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxG
UFJSZWc+KAorICAgICAgICAgICAgKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJl
Z2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQ
UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29kZUdQVG1wKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFRtcCh2YWx1ZSkpOwor
ICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVn
aXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlRlBUbXAo
aW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQVG1wKHZhbHVlKSk7
CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3Rl
cigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQorCisgICAgLy8gMDogZW1wdHkgVG1wCisgICAgLy8g
cG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1AgdGVtcHMuCisgICAgLy8gbmVnYXRpdmU6IEZQUnMg
YW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50IG1fdmFsdWU7Cit9OworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyVG1wX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJU
bXBJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclRtcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wSW5s
aW5lc19oCisjZGVmaW5lIEFpclRtcElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2lubGluZSBUbXA6OlRtcChjb25z
dCBBcmcmIGFyZykKK3sKKyAgICAqdGhpcyA9IGFyZy50bXAoKTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpclRtcElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclZhbGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgewor
cHVibGljOgorICAgIFZhbGlkYXRlcihDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25z
dCBjaGFyKiBkdW1wQmVmb3JlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1f
d2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAg
ICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04s
ICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQor
ICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4g
dmFsaWRTbG90czsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gdmFsaWRCbG9ja3M7Cisg
ICAgICAgIEhhc2hTZXQ8U3BlY2lhbCo+IHZhbGlkU3BlY2lhbHM7CisKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAgICAgICAgICAgIHZhbGlkQmxvY2tzLmFkZChi
bG9jayk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMo
KSkKKyAgICAgICAgICAgIHZhbGlkU2xvdHMuYWRkKHNsb3QpOworICAgICAgICBmb3IgKFNwZWNp
YWwqIHNwZWNpYWwgOiBtX2NvZGUuc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIHZhbGlkU3BlY2lh
bHMuYWRkKHNwZWNpYWwpOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2Nv
ZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBp
bnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChBcmcmIGFy
ZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbGlkU2xvdHMuY29udGFpbnMoYXJnLnN0YWNrU2xvdCgpKSwgKCJBdCAi
LCBpbnN0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
aWRTcGVjaWFscy5jb250YWlucyhhcmcuc3BlY2lhbCgpKSwgKCJBdCAiLCBpbnN0KSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBWQUxJREFURShpbnN0LmlzVmFsaWRGb3JtKCksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAg
ICAgICAgIGlmIChpbnN0SW5kZXggPT0gYmxvY2stPnNpemUoKSAtIDEpCisgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUoKSkpOworICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoIWlzVGVybWluYWwoaW5zdC5v
cGNvZGUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKQorICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbGlkQmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiQXQgIiwgKmJsb2NrKSk7CisgICAg
ICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBmYWlsKAorICAgICAgICBjb25zdCBj
aGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25z
dCBjaGFyKiBjb25kaXRpb24sCisgICAgICAgIENTdHJpbmcgbWVzc2FnZSkKKyAgICB7CisgICAg
ICAgIENTdHJpbmcgZmFpbHVyZU1lc3NhZ2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmlu
Z1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgICAgIG91dC5wcmludCgiQUlSIFZBTElEQVRJT04g
RkFJTFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIg
KCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5w
cmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgaWYgKG1fd2hlbikKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBEdXJpbmcgIiwgbV93aGVuLCAiXG4iKTsKKyAg
ICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmluZygpOworICAgICAgICB9CisK
KyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgaWYgKG1fZHVtcEJl
Zm9yZSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJCZWZvcmUgIiwgd2hlbiwgIjpcbiIpOwor
ICAgICAgICAgICAgb3V0LnByaW50KG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0KKyAgICAgICAg
b3V0LnByaW50KCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgb3V0LnByaW50KG1f
Y29kZSk7CisKKyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgV1RG
UmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVuY3Rpb24sIGNv
bmRpdGlvbik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIENvZGUmIG1fY29k
ZTsKKyAgICBjb25zdCBjaGFyKiBtX3doZW47CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVmb3Jl
OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYg
Y29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBW
YWxpZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIHdoZW4sIGR1bXBCZWZvcmUpOworICAgIHZhbGlkYXRl
ci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVmFsaWRh
dGVfaAorI2RlZmluZSBBaXJWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7
CisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYsIGNvbnN0IGNoYXIqIHdoZW4gPSBudWxscHRyLCBjb25z
dCBjaGFyKiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJWYWxp
ZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVy
YXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29k
ZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTUgQEAK
KyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29kZQorICAgIGF0dHJfcmVhZGVy
IDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2FkcworICAgIGF0dHJfYWNjZXNzb3IgOmtpbmQKKwor
ICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHNwZWNpYWwpCisgICAgICAgIEBuYW1lID0gbmFtZQor
ICAgICAgICBAc3BlY2lhbCA9IHNwZWNpYWwKKyAgICAgICAgQGtpbmQgPSA6aW5zdAorICAgICAg
ICB1bmxlc3Mgc3BlY2lhbAorICAgICAgICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVu
ZAorICAgIGVuZAorCisgICAgZGVmIG1hc21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNhc2Ug
KyBuYW1lWzEuLi0xXQorICAgIGVuZAorZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVy
IDpyb2xlLCA6dHlwZQorCisgICAgZGVmIGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAg
QHJvbGUgPSByb2xlCisgICAgICAgIEB0eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNz
IE92ZXJsb2FkCisgICAgYXR0cl9yZWFkZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYg
aW5pdGlhbGl6ZShzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0
dXJlCisgICAgICAgIEBmb3JtcyA9IGZvcm1zCisgICAgZW5kCitlbmQKKworY2xhc3MgS2luZAor
ICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAg
ZGVmIGluaXRpYWxpemUobmFtZSkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVj
aWFsID0gZmFsc2UKKyAgICBlbmQKKworICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3Ro
ZXIuaXNfYT8gU3RyaW5nCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNl
CisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5z
cGVjaWFsCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2lu
ZCkKKyAgICAgICAgaWYga2luZCA9PSAiQWRkciIKKyAgICAgICAgICAgIFsiQWRkciIsICJTdGFj
a1Nsb3QiLCAiQ2FsbEFyZyJdCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAg
ICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tp
bmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpr
aW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAg
ICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQK
K2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVt
YmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAg
ICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJl
cgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xp
bmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIg
Om9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5n
KQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRv
a2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAor
ICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAg
IAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59
IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBp
ZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9
IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306
ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3Ry
LCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICBy
ZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8K
KyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAg
ICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMg
bmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hl
biAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9y
aWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBc
dFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAv
XEFbLDoqXC9dLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZp
bGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNl
ICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9
LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5k
CisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAor
CitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxaLworZW5k
CisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLworZW5kCisK
K2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8
KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYgaXNLZXl3
b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tl
bikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAor
CitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10r
KVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBk
ZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRh
LCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgor
ICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAg
ICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAg
ICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAg
ICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1l
bnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30i
KSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAg
IGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZp
ZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisg
ICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAg
ICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChy
ZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBk
ZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBh
cnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisg
ICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3Vt
ZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3Io
IkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIG9y
IFJlc0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAg
ICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30K
KyAgICAgICAgCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBA
dG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAg
ICAgICAgICAgICBjb25zdW1lKCJzcGVjaWFsIikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1l
ID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5v
dCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAg
ICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUs
IHRydWUpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNv
bnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0K
KyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2Rl
IikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIG9wY29kZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVu
ZAorCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3Jt
cyA9IFtdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgaXNVRCh0b2tlbikK
KyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICByb2xl
ID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoiKQorICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcubmV3KHJv
bGUsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisK
KyAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiLyIKKyAgICAgICAgICAgICAgICAgICAgY29u
c3VtZSgiLyIpCisgICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW4uc3RyaW5nCisgICAgICAg
ICAgICAgICAgICAgIHdoZW4gImJyYW5jaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29k
ZS5raW5kID0gOmJyYW5jaAorICAgICAgICAgICAgICAgICAgICB3aGVuICJ0ZXJtaW5hbCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOnRlcm1pbmFsCisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkJhZCAv
IGRpcmVjdGl2ZSIpCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAg
ICBhZHZhbmNlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBpc0tp
bmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAg
ICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5h
bWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNw
ZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioi
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUg
PSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBh
cmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUu
bGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIklt
bTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhd
LnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVy
cm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9y
IGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5u
ZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3Mg
aXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5k
CisKKyAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAg
ICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5kCisKKyAg
ICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUs
IGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAg
ICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXco
SU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UK
KworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9Lmgi
LCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAi
Ly8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0g
ZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7
ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9o
IgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2Vu
ZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK2RlZiB3cml0ZUNQUChmaWxl
bmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmNwcCIsICJ3IikgeworICAgICAg
ICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkg
b3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisg
ICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiY29uZmlnLmhcIiIKKyAgICAg
ICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpciN7ZmlsZW5hbWV9LmhcIiIKKworICAgICAgICB5
aWVsZCBvdXRwCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8
CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9w
Y29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAu
cHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAgIG91
dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtl
eXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
ciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMg
ImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8v
IG5hbWVzcGFjZSBXVEYiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwK
KyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRw
LnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1
dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAg
ICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIK
KyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisg
ICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMg
IiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIK
K30KKworIyBGcm9tIGhlcmUgb24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVu
dGVkIGNvZGUsIHNpbmNlIHdlJ3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hl
ci4KKworZGVmIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29s
dW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGgg
PT0gMAorCisgICAgaWYgZmlsdGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKwor
ICAgIGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlz
ZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisg
ICAgICAgIHJldHVybgorICAgIGVuZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMu
ZWFjaCB7CisgICAgICAgIHwgZm9ybSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVt
bkluZGV4XS5uYW1lCisgICAgICAgIGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBz
W2tpbmRdIDw8IGZvcm0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0g
W2Zvcm1dCisgICAgICAgIGVuZAorICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBn
cm91cHMubGVuZ3RoID09IDEKKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMs
IGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAg
ICByZXR1cm4KKyAgICBlbmQKKworICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRl
cltjb2x1bW5JbmRleF19KSB7IgorICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtl
eSwgdmFsdWUgfAorICAgICAgICBvdXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5
ID09ICJJbW02NCIKKyAgICAgICAgS2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAg
ICAgfCBhcmdLaW5kIHwKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2lu
ZH06IgorICAgICAgICB9CisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBj
b2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZB
TFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6
IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYg
bWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKCN7aW5zdH0tPm9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAg
ICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIK
KyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmls
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2Rl
Lm92ZXJsb2Fkcy5zaXplICE9IDEpIG9yIHNwZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0
cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPmFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAg
ICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Zlcmxv
YWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAg
ICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0
OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5z
dE92ZXJsb2FkRm9ybShvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChv
dXRwLCBzcGVlZCwgaW5zdCkgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAg
ICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAg
ICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sj
e2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVy
ID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAg
ICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2Fk
LCBmb3JtCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVk
LCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAg
ICAgICBlbmQKKyAgICB9CitlbmQKKword3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91
dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAg
CisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4g
dHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7
XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBv
dXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSIKKwor
ICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRz
ICJ2b2lkIEluc3Q6OmZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0
cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsK
KyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwK
KyAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpH
UCk7IC8vIFRoaXMgaXMgYmFzaWNhbGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBt
b2RlbCBTcGVjaWFsIGFzIGFuIGltbWVkaWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFy
Z3NbMF0uc3BlY2lhbCgpLT5mb3JFYWNoQXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0Nh
bGxiYWNrPihmdW5jdG9yKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5z
aWduYXR1cmUuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXgg
fAorICAgICAgICAgICAgICAgIHJvbGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5y
b2xlCisgICAgICAgICAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9
ICJVc2UiCisgICAgICAgICAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9s
ZSA9ICJEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAg
IHJvbGUgPSAiVXNlRGVmIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgcmFpc2UKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwg
QXJnOjoje2FyZy50eXBlfVApOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQor
ICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPiIKKyAgICBvdXRwLnB1dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9y
bShPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMg
InsiCisgICAgb3V0cC5wdXRzICJBcmc6OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyld
ID0geyBhcmd1bWVudHMuLi4gfTsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIK
KyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAg
b3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKHNpemVvZi4uLihBcmd1bWVudHMpKSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNp
YWwKKyAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAg
fCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQu
c2lnbmF0dXJlLmxlbmd0aH06IgorICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2Mg
eyB8IGNvbHVtbkluZGV4IHwgImtpbmRzWyN7Y29sdW1uSW5kZXh9XSIgfQorICAgICAgICAgICAg
ICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBw
cm9jIHsKKyAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAg
c3BlY2lhbCA9IChub3QgZm9ybS5raW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLnNwZWNpYWwg
fSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oI3tzcGVjaWFs
fSk7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAs
IDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNr
KQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAg
ICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyAiCisg
ICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBpc1Rlcm1pbmFs
KE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAg
JG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9w
Y29kZS5raW5kID09IDp0ZXJtaW5hbCBvciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAg
ICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9
CisgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIK
KyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91
dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAor
ICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5w
dXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAg
IG91dHAucHV0cyAiYm9vbCBJbnN0Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIK
KyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAg
ICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAor
ICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYXJncy5zaXplKCkgPCAxKSIKKyAgICAgICAgICAg
IG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFh
cmdzWzBdLmlzU3BlY2lhbCgpKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNl
OyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgp
LT5pc1ZhbGlkKCp0aGlzKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVW
YWxpZGF0aW9uID0gZmFsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgu
dGltZXMgeworICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUg
PSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0g
b3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZv
cm0ua2luZHNbaW5kZXhdCisgICAgICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBr
aW5kLnNwZWNpYWwKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVh
ZHkga25vdyB0aGF0IHRoZSBmb3JtIG1hdGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUg
dGhlIHJvbGUsIHNpbmNlCisgICAgICAgICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28s
IHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gdmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5
IGhhdmUKKyAgICAgICAgICAgICAgICAjIHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUg
YSBUbXAuCisgICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1Q
KCkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7
IgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVl
ZHNNb3JlVmFsaWRhdGlvbgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFpcyN7b3Bj
b2RlLm5hbWV9VmFsaWQodGhpcykpIgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAi
cmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wg
SW5zdDo6YWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIK
KyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5l
YWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNv
ZGUubmFtZX06IgorCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICghYXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFs
c2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFs
KCktPmFkbWl0c1N0YWNrKCp0aGlzLCBhcmdJbnN0KSk7IgorICAgICAgICBlbHNlCisgICAgICAg
ICAgICAjIFN3aXRjaCBvbiB0aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3
aXRjaCAoYXJnSW5kZXgpIHsiCisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3Zlcmxv
YWRzLm1hcCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAg
b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAg
IAorICAgICAgICAgICAgbnVtQXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRl
eCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAg
ICAgICAgICAgICAgICMgQ2hlY2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92
ZXJsb2FkcyBlaXRoZXIgZG8sIG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAg
ICAgICAgIyBhdCB0aGlzIGluZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9u
IGNhc2UuCisgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5v
ID0gMAorICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAg
ICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jt
cy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAg
ICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVz
IGZpcnN0IGJlY2F1c2UgaWYgd2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAg
ICAgICAgICAgICAjIHRvIHNheSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAg
ICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0
ZXN0LgorCisgICAgICAgICAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUu
b3ZlcmxvYWRzLnNpemUgIT0gMSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3
aXRjaCAoYXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAg
ICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAg
fCBvdmVybG9hZCB8CisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlm
IGFsbCBvZiB0aGVtIGRvIHdoYXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51
bVllcyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAg
ICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRz
W2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
WWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBh
bnl0aGluZywganVzdCBkcm9wIHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBl
bHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJj
YXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVl
KTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5l
ZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5s
ZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjIFRoaXMgaXMgaG93IHdlIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0
aGlzIGFyZ3VtZW50IHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNz
IHlpZWxkcyBhIHZhbGlkIGZvcm0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1u
R2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1u
SW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9
PSBhcmdJbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRk
ciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtWWVzID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3Jt
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJn
SW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAjIERyb3AgZG93biwgZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgS2VlcCBnb2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2Mg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVS
Tih0cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBj
b2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAgICAg
IAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZh
dWx0OiI7CisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91
dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1
dHMgIkNDYWxsSGVscGVyczo6SnVtcCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwg
R2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0IgorICAgIG91dHAucHV0cyAieyIKKyAg
ICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9Q
QVJBTShjb250ZXh0KTsiCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0
OyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAg
ICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lh
bAorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCkt
PmdlbmVyYXRlKCp0aGlzLCBqaXQsIGNvbnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGlmIGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFs
dE5hbWUKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bj
b2RlLm1hc21OYW1lCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5raW5k
ID09IDpicmFuY2gKKyAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIK
KworICAgICAgICAgICAgZm9ybS5raW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAg
ICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgY2FzZSBraW5kLm5hbWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisg
ICAgICAgICAgICAgICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAi
RyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdw
cigpIgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICAgICAgd2hlbiAiSW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdo
ZW4gIkltbTY0IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5hc1RydXN0ZWRJbW02NCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAg
ICAgICAgICAgICAgIHdoZW4gIkluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJl
bENvbmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFz
UmVsYXRpb25hbENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29u
ZGl0aW9uKCkiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiKTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihy
ZXN1bHQpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBv
dXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIiCit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2aXNpb24gMTkxMjM5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXg7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleCAhPSBpbnZhbGlkKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJu
ICFpc1NldCgpOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
IGlzU2V0KCk7IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4ID09IGRlbGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBAQCBwdWJs
aWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBjbGFz
cyBBbGxSZWdzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKworICAgICAgICBjbGFzcyBpdGVyYXRv
ciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkgeyB9CisKKyAgICAg
ICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKFJlZyByZWcpCisgICAgICAgICAgICAgICAgOiBtX3Jl
ZyhyZWcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBv
cGVyYXRvciooKSBjb25zdCB7IHJldHVybiBtX3JlZzsgfQorCisgICAgICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9yZWcgPSBt
X3JlZy5uZXh0KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZyA9PSBvdGhl
ci5tX3JlZzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIFJlZyBtX3JlZzsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAg
ICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9Cisg
ICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgY29uc3QgeyByZXR1cm4g
QWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZh
bGlkKCkgeyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxMjM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVy
QXRPZmZzZXRMaQogICAgIGlmIChvZmZzZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkK
ICAgICAgICAgb2Zmc2V0ID0gLShzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0
ZXJzKSAqIHNpemVvZih2b2lkKikpOwogCi0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgp
OyByZWcgPD0gUmVnOjpsYXN0KCk7cmVnID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJl
ZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7
CiAgICAgICAgIGlmIChyZWdpc3RlclNldC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5k
KFJlZ2lzdGVyQXRPZmZzZXQocmVnLCBvZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBz
aXplb2Yodm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0
T2Zmc2V0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJBdE9mZnNldExpc3QuaAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2
ICs2Niw5IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zmc2V0KiBmaW5kKFJlZykgY29uc3Q7
CiAgICAgdW5zaWduZWQgaW5kZXhPZihSZWcpIGNvbnN0OyAvLyBSZXR1cm5zIFVJTlRfTUFYIGlm
IG5vdCBmb3VuZC4KIAorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVycy5iZWdpbigpOyB9CisgICAgVmVj
dG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBtX3JlZ2lzdGVycy5lbmQoKTsgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0
T2Zmc2V0PiBtX3JlZ2lzdGVyczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlclNldC5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExNyw2ICsxMTcsMTMgQEAgcHVi
bGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0
cygpKQorICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgIH0K
ICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJ
bmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTIgKzc3NiwyMCBAQAogI2RlZmluZSBFTkFC
TEVfQ09OQ1VSUkVOVF9KSVQgMQogI2VuZGlmCiAKKy8qIFRoZSBCMyBjb21waWxlciBpcyBhbiBl
eHBlcmltZW50YWwgYmFja2VuZCB0aGF0IGlzIHN0aWxsIGluIGRldmVsb3BtZW50LiBXZSB3aWxs
IGtlZXAgaXQgYnVpbGRpbmcKKyAgIG9uIERhcndpbi94ODYtNjQgZm9yIG5vdywgdGhvdWdoIGl0
IGlzIHVudXNlZCBleGNlcHQgZm9yIHRlc3RzLiAqLworI2lmIE9TKERBUldJTikgJiYgQ1BVKFg4
Nl82NCkKKyNkZWZpbmUgRU5BQkxFX0IzX0pJVAorI2VuZGlmCisKIC8qIElmIHRoZSBiYXNlbGlu
ZSBqaXQgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBkaXNhYmxlIHVwcGVyIHRpZXJzIGFzIHdlbGw6
ICovCiAjaWYgIUVOQUJMRShKSVQpCi0jdW5kZWYgRU5BQkxFX0RGR19KSVQgICAgICAvKiBVbmRl
ZiBzbyB0aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KLSN1bmRlZiBFTkFCTEVfRlRMX0pJVCAg
ICAgIC8qIFVuZGVmIHNvIHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0LiAqLworI3VuZGVmIEVOQUJM
RV9ERkdfSklUCisjdW5kZWYgRU5BQkxFX0ZUTF9KSVQKKyN1bmRlZiBFTkFCTEVfQjNfSklUCiAj
ZGVmaW5lIEVOQUJMRV9ERkdfSklUIDAKICNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMAorI2RlZmlu
ZSBFbmFibGVfQjNfSklUIDAKICNlbmRpZgogCiAvKiBDb3VudHMgdXNlcyBvZiB3cml0ZSBiYXJy
aWVycyB1c2luZyBzYW1wbGluZyBjb3VudGVycy4gQmUgc3VyZSB0byBhbHNvCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9T
Y29wZWRMYW1iZGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJk
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRMYW1iZGFfaAorI2RlZmlu
ZSBTY29wZWRMYW1iZGFfaAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gWW91IGNhbiB1c2UgU2Nv
cGVkTGFtYmRhIHRvIGVmZmljaWVudGx5IHBhc3MgbGFtYmRhcyB3aXRob3V0IGFsbG9jYXRpbmcg
bWVtb3J5IG9yIHJlcXVpcmluZworLy8gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gb2YgdGhlIGNh
bGxlZS4gVGhlIGNhbGxlZSBzaG91bGQgYmUgZGVjbGFyZWQgYXM6CisvLworLy8gdm9pZCBmb28o
Y29uc3QgU2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPiYpOworLy8KKy8vIFRo
ZSBjYWxsZXIganVzdCBkb2VzOgorLy8KKy8vIHZvaWQgZm9vKHNjb3BlZExhbWJkYTxNeVRoaW5n
cyogKGludCwgU3R1ZmYmKT4oWyZdIChpbnQgeCwgU3R1ZmYmIHkpIC0+IE15VGhpbmdzKiB7IGJs
YWggfSkpOworLy8KKy8vIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBmb28oKSBub3QgZXNjYXBp
bmcgdGhlIGxhbWJkYS4gVGhlIGxhbWJkYSBpcyBvbmx5IHZhbGlkIHdoaWxlIGZvbygpIGlzCisv
LyBvbiB0aGUgc3RhY2sgLSBoZW5jZSB0aGUgbmFtZSBTY29wZWRMYW1iZGEuCisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2NvcGVkTGFtYmRhOwordGVtcGxhdGU8dHlw
ZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNjb3Bl
ZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgorICAgIFNj
b3BlZExhbWJkYShSZXN1bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYu
Li4pID0gbnVsbHB0ciwgdm9pZCogYXJnID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2ltcGwoaW1w
bCkKKyAgICAgICAgLCBtX2FyZyhhcmcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZXN1bHRU
eXBlIG9wZXJhdG9yKCkoQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2ltcGwobV9hcmcsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1
bWVudHMpLi4uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzdWx0VHlwZSAoKm1faW1wbCko
dm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pOworICAgIHZvaWQgKm1fYXJnOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBTY29wZWRM
YW1iZGFGdW5jdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4g
QXJndW1lbnRUeXBlcywgdHlwZW5hbWUgRnVuY3Rvcj4KK2NsYXNzIFNjb3BlZExhbWJkYUZ1bmN0
b3I8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLiksIEZ1bmN0b3I+IDogcHVibGljIFNjb3Bl
ZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgorICAgIFNj
b3BlZExhbWJkYUZ1bmN0b3IoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICAgICAgOiBTY29w
ZWRMYW1iZGEoaW1wbEZ1bmN0aW9uLCB0aGlzKQorICAgICAgICAsIG1fZnVuY3RvcihmdW5jdG9y
KQorICAgIHsKKyAgICB9CisKKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKEZ1bmN0b3ImJiBmdW5j
dG9yKQorICAgICAgICA6IFNjb3BlZExhbWJkYShpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAg
ICwgbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwgQXJn
dW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisgICAgICAg
ICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQor
CisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
blR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlw
ZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAg
cmV0dXJuIFNjb3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9y
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBTY29wZWRMYW1iZGFfaAor
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3Ip
CisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkKKyAgICB7CisgICAgfQor
CiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVu
dHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwxMSBAQCBSZWY8U2hhcmVkVGFzazxG
dW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hh
cmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVk
VGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNrKEZ1bmN0b3ImJiBmdW5jdG9yKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlw
ZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263938</attachid>
            <date>2015-10-23 13:20:55 -0700</date>
            <delta_ts>2015-10-23 13:43:52 -0700</delta_ts>
            <desc>ready to be compiled</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>548401</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAxOTEyMzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQko
d29ya2luZyBjb3B5KQpAQCAtNzIsMTEgKzcyLDE5IEBAIGFsbCA6IFwKICAgICBCeXRlY29kZXMu
aCBcCiAgICAgSW5pdEJ5dGVjb2Rlcy5hc20gXAogICAgIEpTQ0J1aWx0aW5zIFwKKyAgICBCM0xv
d2VyaW5nTWF0Y2hlci5oIFwKKyAgICBCM0FkZHJlc3NNYXRjaGVyLmggXAorICAgIEIzQ29tcGFy
aXNvbk1hdGNoZXIuaCBcCisgICAgQWlyT3Bjb2RlLmggXAorICAgIEFpck9wY29kZS5jcHAgXAor
ICAgIEFpck9wY29kZVV0aWxzLmggXAorICAgIEFpck9wY29kZVV0aWxzLmNwcCBcCiAjCiAKICMg
YnVpbHRpbiBmdW5jdGlvbnMKIFBZVEhPTiA9IHB5dGhvbgogUEVSTCA9IHBlcmwKK1JVQlkgPSBy
dWJ5CiAKIGlmZXEgKCQoT1MpLFdpbmRvd3NfTlQpCiAgICAgREVMRVRFID0gY21kIC8vQyBkZWwK
QEAgLTIzMCwzICsyMzgsMTkgQEAgYWxsIDogSlNSZXBsYXlJbnB1dHMuaAogCiBKU1JlcGxheUlu
cHV0cy5oIDogJChJTlBVVF9HRU5FUkFUT1JfU1BFQ0lGSUNBVElPTlMpICQoSU5QVVRfR0VORVJB
VE9SX1NDUklQVFMpCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3JlcGxheS9zY3JpcHRz
L0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgLS1vdXRwdXREaXIgLiAtLWZyYW1ld29yayBK
YXZhU2NyaXB0Q29yZSAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykKKworQjNMb3dl
cmluZ01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRj
aGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCisJ
JChSVUJZKSAkXiAKK0IzQWRkcmVzc01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2Vu
ZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzQWRkcmVzc01h
dGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReCitCM0NvbXBhcmlzb25NYXRjaGVyLmg6ICQoSmF2
YVNjcmlwdENvcmUpL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRD
b3JlKS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXgorCitBaXJP
cGNvZGUuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChK
YXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWly
T3Bjb2RlLmNwcDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIg
JChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgor
QWlyT3Bjb2RlVXRpbHMuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0
b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZ
KSAkXgorQWlyT3Bjb2RlVXRpbHMuY3BwOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2Rl
X2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMK
KwkkKFJVQlkpICReCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTkxMjQwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY4Niw2ICs2ODYsMTE3IEBACiAJ
CTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8q
IERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IH07CiAJCTBG
RUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3
QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovOyB9OworCQkwRkVDODRGRTFCREFDREFDMDA4MEZG
NzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50
UmVnVmFsdWUuY3BwICovOyB9OworCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1
bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87
IH07CisJCTBGRUM4NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTAxMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2su
aCAqLzsgfTsKKwkJMEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi87IH07CisJCTBG
RUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi87IH07CisJCTBGRUM4NTA0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xp
c3QuaCAqLzsgfTsKKwkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4
NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi87IH07
CisJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJFMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi87IH07CisJ
CTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29tbW9uLmggKi87IH07CisJCTBGRUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11
dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi87IH07
CisJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLzsgfTsKKwkJMEZFQzg1MEQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJW
YWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJW
YWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi87IH07CisJCTBGRUM4
NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDY0VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICov
OyB9OworCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM3
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwICovOyB9OworCQkwRkVD
ODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDODFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi87IH07CisJCTBGRUM4NTEzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFs
dWUuY3BwICovOyB9OworCQkwRkVDODUxNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFs
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oICovOyB9OworCQkwRkVDODUx
NTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQjFCREFDREFDMDA4MEZGNzQg
LyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi87IH07CisJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFz
cy5oICovOyB9OworCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxv
Y2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVD
ODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dl
bmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovOyB9OworCQkwRkVDODUx
QTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMDFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTFCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1h
cC5oICovOyB9OworCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLzsgfTsKKwkJMEZFQzg1MUQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWly
LmNwcCAqLzsgfTsKKwkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovOyB9OworCQkwRkVDODUxRjFCREFD
REFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1v
cnlWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9y
eVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovOyB9OworCQkwRkVD
ODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
T3Bjb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2Rl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRE
ODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLzsgfTsKKwkJMEZFQzg1MjMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAg
Ki87IH07CisJCTBGRUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3JpZ2luLmggKi87IH07CisJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRT
cGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi87
IH07CisJCTBGRUM4NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERDFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUy
ODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1BhdGNocG9pbnRWYWx1ZS5oICovOyB9OworCQkwRkVDODUyOTFCREFDREFDMDA4MEZGNzQg
LyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICov
OyB9OworCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMDFCREFDREFD
MDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTJCMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3Bw
ICovOyB9OworCQkwRkVDODUyQzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovOyB9OworCQkwRkVDODUyRDFCREFDREFDMDA4
MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLzsgfTsKKwkJMEZFQzg1
MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrbWFwLmggKi87IH07CisJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFw
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovOyB9
OworCQkwRkVDODUzMTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU3MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovOyB9OworCQkwRkVDODUzMjFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrU2xvdEtpbmQuY3BwICovOyB9OworCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi87IH07
CisJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrU2xvdFZhbHVlLmggKi87IH07CisJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rp
b24uaCAqLzsgfTsKKwkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
RDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLzsgfTsKKwkJMEZFQzg1Mzgx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoQ2FzZS5oICovOyB9OworCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi87IH07CisJCTBG
RUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMDFCREFDREFDMDA4MEZGNzQg
LyogQjNTd2l0Y2hWYWx1ZS5oICovOyB9OworCQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyog
QjNUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovOyB9OworCQkwRkVDODUz
QzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmgg
Ki87IH07CisJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMzFC
REFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzRTFC
REFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5oICovOyB9OworCQkwRkVDODUzRjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VD
b3VudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyog
QjNVc2VDb3VudHMuaCAqLzsgfTsKKwkJMEZFQzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
aWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVD
ODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovOyB9OworCQkwRkVDODU0NDFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGQjFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1NDYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3Bw
ICovOyB9OworCQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZFQzg1NkQxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRl
U3RhY2suY3BwICovOyB9OworCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2Nh
dGVTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLzsgfTsKKwkJ
MEZFQzg1NkYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQXJnLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovOyB9OworCQkwRkVDODU3MTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9j
ay5jcHAgKi87IH07CisJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0
RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovOyB9OworCQkwRkVDODU3MzFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDQ2FsbFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi87
IH07CisJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUwMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi87IH07CisJCTBGRUM4NTc3
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi87
IH07CisJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTQxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi87IH07CisJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRp
b25Db250ZXh0LmggKi87IH07CisJCTBGRUM4NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5k
bGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
Y3BwICovOyB9OworCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVl
U2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oICovOyB9Owor
CQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU4MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkVDODU3RTFCREFDREM3
MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0
aW9uU2V0LmggKi87IH07CisJCTBGRUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVB
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODAxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi87IH07
CisJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTgyMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi87
IH07CisJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVFMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODQxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNj
b3BlLmggKi87IH07CisJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclBy
aW9yaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLzsg
fTsKKwkJMEZFQzg1ODYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYxMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi87IH07CisJCTBGRUM4NTg3
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
cGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNp
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTg5MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi87IH07CisJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaCAqLzsgfTsKKwkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xv
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLzsgfTsKKwkJMEZFQzg1
OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clN0YWNrU2xvdC5oICovOyB9OworCQkwRkVDODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1w
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovOyB9OworCQkwRkVDODU4RTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi87IH07
CisJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovOyB9OworCQkwRkVDODU5MDFCREFDREM3MDA4MEZG
NzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAq
LzsgfTsKKwkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QzFCREFDREM3
MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZH
Q29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMg
LyogU2V0dXBWYXJhcmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFt
ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0y
NTU0LDYgKzI2NjUsMTE3IEBACiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUu
Y3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3
QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRo
ID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0Iz
QmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNCYXNpY0Jsb2NrLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNp
Y0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Js
b2NrVXRpbHMuaDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9ja1V0aWxzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xp
c3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCbG9ja1dvcmtsaXN0Lmg7
IHBhdGggPSBiMy9CM0Jsb2NrV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hlY2tTcGVjaWFsLmNwcDsgcGF0aCA9
IGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tTcGVjaWFsLmg7IHBhdGggPSBiMy9CM0NoZWNrU3Bl
Y2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRDFCREFDREFDMDA4
MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NoZWNrVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tWYWx1
ZS5oOyBwYXRoID0gYjMvQjNDaGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbW1vbi5jcHA7IHBhdGggPSBiMy9CM0NvbW1v
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Nv
bW1vbi5oOyBwYXRoID0gYjMvQjNDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbW11dGF0aXZpdHkuY3BwOyBwYXRo
ID0gYjMvQjNDb21tdXRhdGl2aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbW11dGF0aXZpdHkuaDsgcGF0aCA9IGIzL0IzQ29t
bXV0YXRpdml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMzFCREFD
REFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNDb25zdDMyVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDMyVmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNDFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNDb25zdDMyVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
NjRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0
NjRWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5oOyBw
YXRoID0gYjMvQjNDb25zdDY0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBw
YXRoID0gYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuaDsgcGF0
aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb250cm9sVmFsdWUuY3BwOyBwYXRoID0g
YjMvQjNDb250cm9sVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNDb250cm9sVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29udHJvbFZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENCMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3MuY3BwOyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFz
cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENDMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzRnJlcXVlbmN5Q2xhc3MuaDsgcGF0aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
RnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJl
cXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9CM0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0dlbmVyYXRlLmNw
cDsgcGF0aCA9IGIzL0IzR2VuZXJhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVyYXRlLmg7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9CM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNJbmRleE1hcC5oOyBwYXRoID0gYjMvQjNJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0luZGV4U2V0Lmg7IHBhdGggPSBi
My9CM0luZGV4U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQzMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNMb3dlclRvQWlyLmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0xvd2VyVG9BaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNM
b3dlclRvQWlyLmg7IHBhdGggPSBiMy9CM0xvd2VyVG9BaXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5jcHA7
IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5oOyBwYXRoID0gYjMvQjNNZW1v
cnlWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENzFCREFDREFD
MDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNPcGNvZGUuY3BwOyBwYXRoID0gYjMvQjNPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcGNvZGUuaDsgcGF0aCA9IGIzL0Iz
T3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM09yaWdpbi5jcHA7IHBhdGggPSBiMy9CM09yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbi5oOyBwYXRoID0gYjMvQjNP
cmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM1BhdGNo
cG9pbnRTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBvaW50U3BlY2lhbC5oOyBwYXRoID0gYjMvQjNQYXRj
aHBvaW50U3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERDFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRjaHBvaW50VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNQ
YXRjaHBvaW50VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRE
RTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBvaW50VmFsdWUuaDsgcGF0aCA9IGIzL0IzUGF0Y2hw
b2ludFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERGMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNQaGFzZVNjb3BlLmNwcDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1BoYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQaGFz
ZVNjb3BlLmg7IHBhdGggPSBiMy9CM1BoYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUHJvY2VkdXJlLmNwcDsgcGF0aCA9
IGIzL0IzUHJvY2VkdXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlLmg7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJv
Y2VkdXJlSW5saW5lcy5oOyBwYXRoID0gYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXAu
Y3BwOyBwYXRoID0gYjMvQjNTdGFja21hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2ttYXAuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzU3RhY2tTbG90S2luZC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja1Nsb3RLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tT
bG90S2luZC5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsg
cGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsg
cGF0aCA9IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoQ2FzZS5jcHA7IHBhdGgg
PSBiMy9CM1N3aXRjaENhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoQ2FzZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzU3dpdGNoVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hWYWx1ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRj
aFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUu
aDsgcGF0aCA9IGIzL0IzU3dpdGNoVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1R5cGUuY3BwOyBwYXRoID0gYjMvQjNUeXBlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1R5cGUuaDsgcGF0
aCA9IGIzL0IzVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMzFC
REFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNVcHNpbG9uVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNVcHNpbG9u
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNDFCREFDREFD
MDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNVcHNpbG9uVmFsdWUuaDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vz
ZUNvdW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1VzZUNv
dW50cy5jcHA7IHBhdGggPSBiMy9CM1VzZUNvdW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1VzZUNvdW50cy5oOyBwYXRoID0gYjMvQjNV
c2VDb3VudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjcxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNWYWxpZGF0ZS5jcHA7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
aWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWxpZGF0ZS5oOyBw
YXRoID0gYjMvQjNWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlLmg7IHBhdGgg
PSBiMy9CM1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM1ZhbHVlSW5saW5lcy5oOyBwYXRoID0gYjMvQjNWYWx1ZUlubGluZXMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsdWVSZXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNW
YWx1ZVJlcC5jcHA7IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZVJlcC5oOyBwYXRoID0gYjMvQjNW
YWx1ZVJlcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0ODFCREFDREM3
MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVN0YWNrLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NDkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFjay5oOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRl
U3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJBcmcuY3BwOyBwYXRoID0gYjMvYWlyL0FpckFyZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQXJnLmg7IHBhdGggPSBiMy9haXIvQWlyQXJn
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpckJhc2ljQmxvY2suY3BwOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyog
QWlyQmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJCYXNp
Y0Jsb2NrLmg7IHBhdGggPSBiMy9haXIvQWlyQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFs
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNDYWxsU3BlY2lh
bC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lh
bC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuaDsg
cGF0aCA9IGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWly
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUxMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckNvZGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHBh
dGggPSBiMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZS5jcHA7IHBhdGggPSBi
My9haXIvQWlyR2VuZXJhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0aW9uQ29u
dGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NjFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHBhdGggPSBi
My9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnNlcnRpb25TZXQuY3BwOyBwYXRo
ID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTU5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlySW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9h
aXIvQWlySW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFpckluc3QuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyog
QWlySW5zdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0Lmg7IHBh
dGggPSBiMy9haXIvQWlySW5zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWlySW5zdElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0
SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1RDFCREFDREM3
MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyTGl2ZW5lc3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VT
Y29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQaGFzZVNj
b3BlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyUGhhc2VTY29wZS5oOyBwYXRo
ID0gYjMvYWlyL0FpclBoYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7
IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9y
aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclJlZ2lzdGVyUHJpb3Jp
dHkuaDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwZWNpYWwuY3BwOyBw
YXRoID0gYjMvYWlyL0FpclNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lh
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NDFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpclNwaWxsRXZlcnl0aGluZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BpbGxF
dmVyeXRoaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjUxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGls
bEV2ZXJ5dGhpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJTdGFja1Nsb3QuY3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xv
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyU3RhY2tTbG90Lmg7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyVG1wLmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJUbXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2
OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEFpclRtcC5oOyBwYXRoID0gYjMvYWlyL0FpclRtcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXBJbmxpbmVzLmg7IHBhdGgg
PSBiMy9haXIvQWlyVG1wSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
clZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEFpclZhbGlkYXRlLmg7IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50
SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I4
MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHBhdGgg
PSBkZmcvREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZhcmFyZ3NGcmFtZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzgzOCw2ICs0MDYwLDcgQEAKIAkJCQlBN0MyMjVD
QzEzOTk4MUYxMDBGRjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkx
NDMyRUJENzBBMzRDQUQ0MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUw
MDFENjQ5RiAvKiBhc3NlbWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8q
IGIzICovLAogCQkJCUE1NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBiaW5kaW5ncyAqLywKIAkJ
CQlBN0Q4MDE5RjE4ODBENjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYw
RUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovLApAQCAtNDA1MCw2ICs0MjczLDEzMiBAQAog
CQkJbmFtZSA9IGZ0bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRUM4
NEIyMUJEQUNENUUwMDgwRkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJ
Y2hpbGRyZW4gPSAoCisJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKKwkJ
CQkwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywK
KwkJCQkwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8s
CisJCQkJMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCisJ
CQkJMEZFQzg0QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovLAorCQkJCTBG
RUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCisJCQkJ
MEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8sCisJCQkJ
MEZFQzg0QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBG
RUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZF
Qzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0
QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QkUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJCTBGRUM4NEJGMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbW9uLmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29tbXV0YXRpdml0eS5jcHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29tbXV0YXRpdml0eS5oICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnN0MzJWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
c3QzMlZhbHVlLmggKi8sCisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2
NFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0
VmFsdWUuaCAqLywKKwkJCQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJs
ZVZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERv
dWJsZVZhbHVlLmggKi8sCisJCQkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJv
bFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9s
VmFsdWUuaCAqLywKKwkJCQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lD
bGFzcy5jcHAgKi8sCisJCQkJMEZFQzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5
Q2xhc3MuaCAqLywKKwkJCQkwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVk
QmxvY2suaCAqLywKKwkJCQkwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5j
cHAgKi8sCisJCQkJMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLywK
KwkJCQkwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
LmggKi8sCisJCQkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLywK
KwkJCQkwRkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovLAorCQkJCTBG
RUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovLAorCQkJCTBGRUM4
NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLywKKwkJCQkwRkVDODRENTFC
REFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RDYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywKKwkJCQkwRkVDODRENzFCREFDREFD
MDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICovLAorCQkJCTBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM09wY29kZS5oICovLAorCQkJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09y
aWdpbi5jcHAgKi8sCisJCQkJMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmgg
Ki8sCisJCQkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwICovLAorCQkJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVj
aWFsLmggKi8sCisJCQkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZh
bHVlLmNwcCAqLywKKwkJCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50
VmFsdWUuaCAqLywKKwkJCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3Bl
LmNwcCAqLywKKwkJCQkwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmgg
Ki8sCisJCQkJMEZFQzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLywK
KwkJCQkwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCAqLywKKwkJCQkw
RkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8sCisJCQkJ
MEZFQzg0RTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwICovLAorCQkJCTBGRUM4
NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi8sCisJCQkJMEZFQzg0RTYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODRFNzFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODRFODFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLywKKwkJCQkwRkVDODRFOTFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8sCisJCQkJMEZFQzg0RUExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEVCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RUMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovLAorCQkJCTBGRUM4NEVE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovLAorCQkJCTBGRUM4NEVFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLywKKwkJCQkwRkVDODRFRjFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjAxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGMTFCREFDREFDMDA4MEZG
NzQgLyogQjNUeXBlLmNwcCAqLywKKwkJCQkwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNU
eXBlLmggKi8sCisJCQkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVl
LmNwcCAqLywKKwkJCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUu
aCAqLywKKwkJCQkwRkVDODRGNTFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICov
LAorCQkJCTBGRUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovLAorCQkJ
CTBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRkVD
ODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovLAorCQkJCTBGRUM4NEY5MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRGQTFCREFDREFDMDA4
MEZGNzQgLyogQjNWYWx1ZS5oICovLAorCQkJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1ZhbHVlSW5saW5lcy5oICovLAorCQkJCTBGRUM4NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmNwcCAqLywKKwkJCQkwRkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJl
cC5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBiMzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CisJCX07CisJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8gPSB7CisJCQlpc2Eg
PSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLywKKwkJCQkwRkVDODU0OTFCREFDREM3MDA4MEZG
NzQgLyogQWlyQWxsb2NhdGVTdGFjay5oICovLAorCQkJCTBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJBcmcuY3BwICovLAorCQkJCTBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
cmcuaCAqLywKKwkJCQkwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5j
cHAgKi8sCisJCQkJMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAq
LywKKwkJCQkwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAq
LywKKwkJCQkwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi8s
CisJCQkJMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovLAorCQkJCTBG
RUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8sCisJCQkJMEZFQzg1NTIxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NTUzMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8sCisJCQkJMEZFQzg1NTQxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi8sCisJCQkJMEZFQzg1NTUxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi8sCisJCQkJMEZFQzg1NTYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLywKKwkJCQkwRkVDODU1NzFCREFD
REM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLywKKwkJCQkwRkVDODU1ODFC
REFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkVDODU1OTFC
REFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEZFQzg1NUExQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwICovLAorCQkJCTBGRUM4NTVCMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0LmggKi8sCisJCQkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3RJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxp
dmVuZXNzLmggKi8sCisJCQkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2Nv
cGUuY3BwICovLAorCQkJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmggKi8sCisJCQkJMEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3Jp
dHkuY3BwICovLAorCQkJCTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclBy
aW9yaXR5LmggKi8sCisJCQkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwu
Y3BwICovLAorCQkJCTBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi8s
CisJCQkJMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAg
Ki8sCisJCQkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5o
ICovLAorCQkJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICov
LAorCQkJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLywKKwkJ
CQkwRkVDODU2ODFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLywKKwkJCQkwRkVDODU2
OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi8sCisJCQkJMEZFQzg1NkExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclRtcElubGluZXMuaCAqLywKKwkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAorCQkJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJWYWxpZGF0ZS5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBhaXI7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OwogCQkwRkY0MjcyRTE1OEVCQ0NFMDA0Q0I5RkYgLyogZGlzYXNz
ZW1ibGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTU5
OTQsNiArNjM0Myw3IEBACiAJCQkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVh
c29uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFMzBGM0E4M0MxMDBGODQ3MTAgLyogQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NUYwRjUxNEQxMDYz
QzAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3
MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVu
Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBB
UElDYXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYwMjMsMTMgKzYzNzMsMTYgQEAKIAkJCQlBNUVB
NzBFODE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFz
aWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0
Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dp
dGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9v
bGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUx
IC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE1MTg4MEQ2NkUwMDI2
QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NUVFOUIy
MThBQUI3RTIwMEFBRDA0MyAvKiBCdWlsdGluTmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQx
REVBMTMyMUI5RjMxNjMwMDZENjVERCAvKiBCdWlsdGluVXRpbHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTEwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOUU3Mjk0MEIxOTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYwNDAsNiArNjM5Myw3IEBACiAJCQkJMEYyREQ4
MEIxQUIzRDg1ODAwQkJCOEU4IC8qIEJ5dGVjb2RlS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxp
dmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNjFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MTRG
MjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
ODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MDc1LDEzICs2NDI5LDE2IEBACiAJCQkJMEYxNUYxNUYxNEI3QTczRTAwNURFMzdE
IC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1M0EzMzIxN0ExRjFF
RTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QTNBODE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRp
b25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQw
MkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRUExNzQ4
OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNTNDRTA4QTE4QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAwNjMzMjMxIC8qIENv
bnNvbGVNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4NjE4QkMxQTU2MDBCRURG
NzYgLyogQ29uc29sZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwNzQxODlC
MDM4QzAwNjMzMjMxIC8qIENvbnNvbGVUeXBlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDk1LDYg
KzY0NTIsNyBAQAogCQkJCUMyRkM5QkQzMTY2NDRERkIwMDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRUFBM0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBD
b3BpZWRTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1
IC8qIENvcGllZFNwYWNlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNTJEMDE3
QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQx
ODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUMy
MjM5RDE5MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5VmlzaXRvcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjEwNSw2ICs2NDYzLDcgQEAKIAkJCQlBNTg0MEUyNzE4N0M5ODFFMDA4NDNCMTAg
LyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThE
IC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYw
Q0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTYxMjQsNiArNjQ4Myw3IEBACiAJCQkJQTcwNEQ5MDMxN0EwQkFB
ODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MDREOTA0MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fi
c3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcwMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUx
RSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYxMzQsNyArNjQ5
NCw5IEBACiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0aWxp
dGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3IC8qIERG
R0FyaXRoTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVC
IC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTE3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDlBMjk1MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEg
LyogREZHQXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFMzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNDQs
NiArNjUwNiw3IEBACiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGQzE5QURBNDEwMDA2QUM3MkEg
LyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZEMTlBREE0MTAwMDZB
QzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQzNDQ0ZFMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
V29ya2xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjE4Miw4ICs2NTQ1LDEwIEBACiAJCQkJMEY2
NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
RDlBMjk2MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdFZGdlRG9taW5hdGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzk4NkQ1NzE3QTBCQjFFMDBBOTVERDAgLyogREZHRWRnZVVzZXNTdHJ1Y3R1cmUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNDFBREYwOTAxMDBFRDc5MkMgLyog
REZHRXBvY2guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAv
KiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3
NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXpl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjE1LDYgKzY1ODAsNyBAQAogCQkJCTYyRjJBQTM4MUIw
QkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEy
OTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzlDNEIxNUUxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg2MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBC
OENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkYwRjE5QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjIzLDYgKzY1ODksNyBAQAog
CQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlm
aWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNjFBREYwOTAxMDBF
RDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
MkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0
b3JzLmggaW4gSGVhZGVycyAqLywKQEAgLTYyNDEsNiArNjYwOCw3IEBACiAJCQkJMEZDMDk3NkEx
NDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1
QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIg
LyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRC
MEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFk
ZXJzICovLApAQCAtNjI1OCw2ICs2NjI2LDggQEAKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURE
NjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MzE5
NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNB
MUJGQTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNr
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJREVBN0UyNDUxQkJDNjc3RjAwRDc4
NDQwIC8qIEpTVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtNjI4NCw2ICs2NjU0LDcgQEAKIAkJCQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZH
VGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkEx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExG
b3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNjM5NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBERkdUeXBlQ2hl
Y2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NzE2QzFEQjEyMDA4
MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02Mjk1LDYg
KzY2NjYsNyBAQAogCQkJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFj
Y2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAv
KiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0
OTE1MjI4MDk2MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQkRDNEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJl
YW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUzMiAvKiBERkdW
aXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzk3
RjQyMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmggaW4g
SGVhZGVycyAqLywKQEAgLTYzMjQsNiArNjY5Niw3IEBACiAJCQkJMEY1NkExRDMxNTAwMEYzNTAw
Mjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGM0FDNzU0
MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdlSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8qIEZsb2F0MzJB
cnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFCMTc0IC8qIEZs
b2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzgwLDYgKzY3NTMsNyBAQAogCQkJCTBG
RUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVGcm9tQmxv
Y2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJG
cmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4RDQwMDcy
QzlERiAvKiBGVExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDNjE4QjUz
RkE5MDA1Rjk3OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJDODE4
QjU0NkVDMDA1Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICovLApAQCAt
NjM4Nyw4ICs2NzYxLDEwIEBACiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8qIEZ1bGxH
Q0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDA0MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYw
RjFBMDE2QjcyQTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5jdGlvbkhh
c0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEJGRjJDMUFENDc2RTcwMDA4
OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MkYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
NDA1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2aXR5Q2Fs
bGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNjQyNSw2ICs2ODAxLDcgQEAKIAkJCQlDNDcwM0NE
NTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICov
LAogCQkJCTBGRTA1MDE5MUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQTFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY0FyZ3Vt
ZW50c0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUIxQUE5MDkxMTAwRDMz
QjMzIC8qIEdlbmVyaWNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUwMTdCNkI1
QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKQEAgLTY0NDksNiArNjgyNiw3IEBACiAJCQkJQzJFNTI2QkUxNTkw
RUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3QkE2MTAx
QTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0
NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0NEFCMDBBMzgzRDAgLyogSWRlbnRp
ZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDc2MTg5QjAzOEMwMDYzMzIz
MSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLApAQCAtNjUwMiw2ICs2ODgw
LDcgQEAKIAkJCQlBMUI5RTIzQzFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUExODE5M0UzMUI0RTBDREIwMEZDMTAyOSAvKiBJ
bnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExQjlFMjNF
MUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTgxOTNFNDFCNEUwQ0RCMDBGQzEwMjkgLyogSW50bENvbGxhdG9y
UHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENkUxQjREQzE0MTAwRDY5
ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENzAx
QjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmggaW4gSGVh
ZGVycyAqLywKQEAgLTY1MzIsNiArNjkxMSw3IEBACiAJCQkJMEYyNEU1NEQxN0VFMjc0OTAwQUJC
MjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDMxMTVBQTgx
MTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZE
MkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODU5MTFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0RlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwOTgxRjgxQkM1RTU2
NTAwNDgxNEY4IC8qIERGR0NvcHlCYXJyaWVyT3B0aW1pemF0aW9uUGhhc2UuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjU0Niw2ICs2OTI2LDcgQEAKIAkJCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JEQUVD
QjE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4QjE0MTg2RDFCNjI1MjdGMDBGQjIwNjggLyogSlNBcnJvd0Z1bmN0aW9uLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNCYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDBEMTdENzBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNl
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZGQTlFOTIxNDJCQkIyRTAwMTc3M0I3IC8q
IEpTQm91bmRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTYyLDYgKzY5NDMsOCBAQAog
CQkJCTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU0NKU1ZhbHVlSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2xhc3NSZWYuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1M0NFMDg4MThCQzFBNTYwMEJFREY3NiAvKiBKU0NvbnNvbGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2
MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2
RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1OEMwMjQy
MThFNEE0MUEwMDAzMkJDNSAvKiBKU0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAg
LTY1NzcsNiArNjk2MCw3IEBACiAJCQkJRkUzODRFRTYxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9s
bGFyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU4MUFEREI3QUQwMDU1REUyQyAvKiBK
U0RvbGxhclZNUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyRDBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNFbnZpcm9ubWVudFJlY29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1MjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2RTNDNjE0MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdCNEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXku
aCBpbiBIZWFkZXJzICovLApAQCAtNjU4NywxMCArNjk3MSwxMiBAQAogCQkJCTBGMkI2NkYxMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5N0UwN0FBMUI4
RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFs
T2JqZWN0Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzRDNDU3QzFCQzcyNDEx
MDA3NDc2QTcgLyogSlNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
QEAgLTY2MjIsNiArNzAwOCw3IEBACiAJCQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpT
TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNN
YXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDBFMkIxODdDQTc1QjAwODQzQjEw
IC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJC
RUY2NyAvKiBKU01vZHVsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JD
MTFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02NjUyLDYgKzcwMzksNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYw
MDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0Mjcw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUz
OTExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdK
b2luZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U1N0cmluZ1JlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzAyLDkgKzcwOTAsMTEgQEAKIAkJCQkw
RjQ2ODBBMzE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJbnRPZmZsaW5lQXNtQ29uZmln
LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRP
cGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBCRkUyNzIg
LyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRCQ0Y0NjYw
MDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQ0UxODA1
RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThDMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VG
QUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmgg
aW4gSGVhZGVycyAqLywKQEAgLTY3MTcsMTIgKzcxMDcsMTQgQEAKIAkJCQk4NkQzQjJDNjEwMTU2
QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
QTAwOUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12
Ny5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTExMUEyMTNFRTAw
MDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2OEM2
MzcxQjkwREUwNDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8qIE1hY3JvQXNzZW1ibGVyU0g0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3Nl
bWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAv
KiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEExQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBE
YXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTY3NDcsNiArNzEzOSw3IEBACiAJCQkJQkMwMkU5MTEw
RTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvclByb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMjExQjkwMTNERTAwMzQ2QjUyIC8qIE5hdGl2ZVN0
ZEZ1bmN0aW9uQ2VsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2
RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJtaW5pc3RpY0lucHV0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTY3NjcsNiArNzE2MCw3IEBACiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5
MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERCMUY2MzE4RDc3
REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3
OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
N0MxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25z
LmggaW4gSGVhZGVycyAqLywKQEAgLTY3NzksMTQgKzcxNzMsMTggQEAKIAkJCQkwRkY5Q0U3NDFC
OUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRTgzNDE4MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VK
dW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0ExQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg5MTZCMDE1
NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1
Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjdDMTFBRDFCQzM4NjJDMDBDNzRDREIgLyogQ29weUJhcnJpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDUxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlTm9kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QTUxNjZBRDM1MTAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0
ZWNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1ZhbHVlUmVwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMg
LyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM5MTJBMTY3NzFD
MzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxl
ckNvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVC
QTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcy
OUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjgwOCwxMCArNzIwNiwxMyBAQAogCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYx
NjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc0QzMzQjE2
QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU4NDFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY1NzgwQTIxOEZFMUU5ODAwMUU3MkQ5IC8qIFB1cmVOYU4uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMTVDRDIzMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODU4MDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJp
YW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3OTFCREFDREM3MDA4MEZGNzQgLyogQWly
R2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAv
KiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2
MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRF
NkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKQEAgLTY4MzEs
NiArNzIzMiw3IEBACiAJCQkJMEZDMzE0MTIxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTdEMjNFRTE4OTFCNTU0MDAzMUM3RkEgLyogUmVndWxh
ckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdC
MiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTI2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFODE4
MjM0MEIzMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NUJBMTVFQTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yQ29uc3RhbnRzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUJBMTVGMDE4MjM0NUFGMDBBODJFNjkgLyogUmVtb3RlSW5zcGVj
dG9yRGVidWdnYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODM4LDYgKzcyNDAsNyBAQAogCQkJ
CUE1QkExNUVEMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRj
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3Vs
dFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEIwQTlEMTFBOUI2NjQ2MDAwMTMwNkEgLyog
UnVudGltZUZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkMwNjExRjFBQTUxRTFDMDBCNEFE
QkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMkIzMUI5MTQwNTc3RDcw
MERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjg2Nyw2ICs3
MjcwLDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJp
bmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291
cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MEUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBC
MzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJF
RjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBp
biBIZWFkZXJzICovLApAQCAtNjg4Niw2ICs3MjkwLDcgQEAKIAkJCQlCQzE4QzQ2QTBFMTZGNUNE
MDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEz
QjEzNEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDU3MjI4
NjE0MzdFMTQwMDA1RkRFMjYgLyogU3Ryb25nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1ODIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJs
b2IuaCBpbiBIZWFkZXJzICovLApAQCAtNjkyMiwxMCArNzMyNywxMiBAQAogCQkJCTBGMkQ0REVB
MTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUy
QjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERUMxOTgzMkRDNDAwN0Q0QjE5IC8qIFR5cGVQ
cm9maWxlckxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERjAxOTgzMkRENjAwN0Q0QjE5
IC8qIFR5cGVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlG
RiAvKiB1ZGlzODYuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NEZGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQxMTU4
RUJFOEQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0
Mjc0MjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2V4dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNDI3NDQxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9pbnB1dC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02OTYxLDggKzczNjgsMTAgQEAKIAkJCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQg
LyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDI2MTU4NTNDRTMwMDRBNEU3
RCAvKiBXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQzEzNEZGMEE2MDBB
RkFEQjUgLyogV2Vhay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RjlG
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QkZD
RTY5MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93
bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vh
a0ltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtNjk4NCw5ICs3MzkzLDEyIEBACiAJCQkJQTU4NDBF
MkExODdDQTc1OTAwODQzQjEwIC8qIHh4ZC5wbCBpbiBIZWFkZXJzICovLAogCQkJCTQ1MTUzOUI5
MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEy
REJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUzMTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQ
YXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MTFCREFDREM3MDA4MEZGNzQgLyog
QWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjQzMTJEQjhBODEwMEE5
RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC03NDY4LDYgKzc4ODAsNyBA
QAogCQkJCTBGNTVGMEY0MTREMTA2MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAy
ODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODUwMTcx
Nzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2NUMwMjg1QzE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzQ3NSw4ICs3ODg4LDEwIEBACiAJCQkJQTdBOEFGMzQxN0FEQjVGMzAwNUFCMTc0
IC8qIEFycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5OUQ0MTg0RUUzMTgw
MDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdBOEFGMzYxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyVmlldy5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzRDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkYxMDdFQzM3NjAwNDI3QTQ4IC8q
IEFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdCREFFQzgxN0Y0RUEx
NDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NTQxNUQwNzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmls
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMDEwN0VDMzc2MDA0MjdBNDggLyogQXJy
YXlQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNEU1NDAxN0VBOUY1OTAwQUJC
MjE3IC8qIEFzc2VtYmx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc0OTgsOCArNzkx
MywxMCBAQAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjJFQzlCQjYxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNo
dWZmbGVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ2MUI4NEZCNDYwMDE4MDFG
QSAvKiBDYWxsRnJhbWVTaHVmZmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxMzFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjJENzU1RDUxQjg0RkI0MDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENhbGxGcmFtZVNo
dWZmbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzkxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcx
NjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5
RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjI3NjczMjMxQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzUyMCw2ICs3OTM3LDcgQEAKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyog
Q29tbW9uU2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUw
MDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3RTVBM0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21w
bGV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAv
KiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJFQjVC
NTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1
NDYsNiArNzk2NCw3IEBACiAJCQkJMEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1
RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3N0E0MjNEMTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZH
QWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdh
dGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTU1LDYgKzc5NzQsNyBAQAogCQkJCTBG
NjM5NDg0MTVFNDgxMTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2
YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4NzFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdE
MDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNp
Y0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzU2NCw2ICs3OTg0LDcgQEAKIAkJCQk4NkVD
OURDNDEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZG
IC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
RDM2OTQxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc2MDAsNiArODAyMSw3IEBACiAJCQkJMkE4ODA2NzgxOTEwN0Q1NTAw
Q0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjJGQ0NGOTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3Rh
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERG
R0hlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2
MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcw
NEQ5MDUxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzY0MiwxNCArODA2NCwxNyBAQAogCQkJCTBGQzA5NzcyMTQ2OTNBRjkw
MENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMzkyQzg5MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0
RnV6ei5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMg
LyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIz
NUJFRDE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGNjIzNzk3MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUIxNEVGOTBBRDAwQzcyNTMy
IC8qIERGR1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQTE5
RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc4QTk3N0ExNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90
ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAw
OTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NjcsNiArODA5
Miw4IEBACiAJCQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0
IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3
OTA4NTUxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3
MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3
QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTc2OTQsNiArODEyMSw3IEBACiAJCQkJMkE4MzYzODUxOEQ3
RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJOTlFNDVBMjUxOEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAv
KiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdF
QzM3NjAwNDI3QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzM3
LDYgKzgxNjUsNyBAQAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyog
RlRMTG93ZXJERkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDAxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNG
ODE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC03NzQ0LDYgKzgxNzMsNyBAQAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJC
NzIyQyAvKiBGVExPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjkxODdERkRF
QzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
Q0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93
UGF0aENhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5
IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4
MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc3
NSw2ICs4MjA1LDcgQEAKIAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmll
cnNGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3
MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxM0UwNEUx
NjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUyNzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRU
eXBlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0
IC8qIEluZmVycmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzgyLDYgKzgyMTMsNyBA
QAogCQkJCTlFQTVDN0EyMTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0aWFsaXplTExWTU1hYy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwODE5MEYwMjFFMDAxQTkxQjUgLyogSW5pdGlhbGl6
ZUxMVk1QT1NJWC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkx
QjUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3
QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNj
cmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZF
IC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3OTMsNiArODIy
NSw3IEBACiAJCQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVn
aXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYwMzAwQkZDRTI3IC8q
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0
Mzg3MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2Fz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5z
cGVjdG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U1MTg5MENF
QkYwMDMxQzdGQSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MzI0Mzg5MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNo
ZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg0OSw2ICs4MjgyLDcgQEAKIAkJCQk4NkZBOUU5
MTE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAwMDVGMDYxIC8qIEpTQ2FsbGJh
Y2tGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU2RjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QUJERjYwMEE0MzdGRUYwMEVD
Q0EwMSAvKiBKU0NhbGxiYWNrT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1N0NGNDU4
MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4
MDFBODE4ODBENkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03ODU2LDYgKzgyOTAsOCBAQAogCQkJCTE0N0YzOUQ2MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0NK
U1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGQ0U0MEE1MUU0NkIwMDA1RjA2MSAv
KiBKU0NsYXNzUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg3MThCQzFBNTYwMEJF
REY3NiAvKiBKU0NvbnNvbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OTAxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTcz
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICov
LAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcyMDI4QjYxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJV
dGlscy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4NjYsMTYgKzgzMDIsMTkgQEAKIAkJCQlGRTM4
NEVFNzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlENzEwN0VDMzc2MDA0MjdBNDggLyogSlNFbnZpcm9ubWVudFJlY29y
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyogSlNG
dW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxRDFCREFDREFDMDA4MEZGNzQg
LyogQjNMb3dlclRvQWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5N0UwN0E5MUI4RkNGQjkw
MDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTVGRDAwODUxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0
Q29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QzNBMUE1MThDMDQ5MDIwMEM5
NTkzQSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1OTQ1NTkyMTgyNDc0NDcwMENDMzg0MyAvKiBKU0dsb2JhbE9iamVjdERl
YnVnZ2FibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRTkxODkxQjA3NzAwMzFDN0ZB
IC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEU5RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2Jq
ZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTBFNEI2MzE4
ODA5REQ1MDA2OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUwM0ZBMjkxODhGMTA1OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2Ny
aXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUJGMTg1QkZB
Q0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTEzRTVDMTE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwODAxQjg0MjlBNDAwNDEzODU2IC8qIEpT
SW50ZXJuYWxQcm9taXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg5NCw2ICs4MzMzLDcgQEAK
IAkJCQlFMzE4Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9k
dWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0U4RDFDMUI5MDEzQzMwMDM0NkI1
MiAvKiBKU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTE4
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
MjcwMDkwMERBQzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03OTA3LDYgKzgzNDcsNyBAQAogCQkJCUUzRUY4ODc0MUI2NkRGMjMw
MDNGMjZDQiAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1NTJDMzdGMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90ZUluc3BlY3Rvci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJs
ZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5MjhGRjNCMThBQzRBRUMwMEI4Q0YxMiAv
KiBKU1JlcGxheUlucHV0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRB
MDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2ODEw
NjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTMzLDYg
KzgzNzQsNyBAQAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNj
b3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBK
U1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxNTFCREFDREFDMDA4MEZG
NzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEw
N0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzk0MCw5ICs4MzgyLDEyIEBACiAJCQkJMTQ4RjIxQjAx
MDdFQzU0MTAwNDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzU3
MTU5MTRBMjAwMDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
RTJFQTZDMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9v
cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJ
bnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NEZFMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOEIw
MTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjQ2ODBBODE0QkE3RkFCMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRo
cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5NTEsNiArODM5Niw3IEBACiAJCQkJQTdFNUFCMzcx
Nzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyog
TWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUIzRUNGMTYyMzdG
NkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkM1
NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC03OTU5LDEwICs4NDA1LDEyIEBACiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIx
IC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4
NzM5MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzRERUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyog
TWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENC
QUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMDgx
MzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTQzNDBBNDg0MUE5MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAwMiwxNyArODQ1MCwyMSBAQAogCQkJCTBGRjcyOUFE
MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRjcyOUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRl
Y29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTBCMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUYx
NjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5k
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9m
aWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZB
RDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBT
cGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAv
KiBQcm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVD
MDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4
aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAv
KiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNF
NDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTgxMDdFQzdFNzAwNjUwNDQ2IC8qIFByb3Bl
cnR5U2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBREUzOUZGRjE2REQxNDRCMDAwM0NENEEg
LyogUHJvcGVydHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMjEsMTAgKzg0NzMsMTIg
QEAKIAkJCQkwRjE1Q0QyMjFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRC
eUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyQjFCREFDREFDMDA4MEZG
NzQgLyogQjNQcm9jZWR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4
ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMz
NjM3QTUxQjYzMjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDI4MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENh
Y2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3
QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDM5LDYgKzg0
OTMsNyBAQAogCQkJCUE1QkExNUU5MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3Iu
bW0gaW4gU291cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1RUZEMDBDQzM4NDMgLyogUmVtb3Rl
SW5zcGVjdG9yRGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVFQzE4MjM0
MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0gaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUwNTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNp
YWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RUUxODIzNDBCNDAwQTgyRTY5IC8qIFJl
bW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1
MDE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Mjc3
NzNERTFBQUY4M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04MDU3LDYgKzg1MTIsNyBAQAogCQkJCUE1NENGMkY5MTg0RUFFREEwMDIzN0YxOSAvKiBTY3Jp
cHRPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0Q0YyRjUxODRFQUIyNDAwMjM3RjE5
IC8qIFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REE1MTdEMTI4NTgw
MDVGNUZGOSAvKiBTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4
NTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzkwREQ2RDE4MkY0OTk3MDA1ODg4MDcgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTlEQTExN0QxMjg0ODAwNUY1RkY5IC8qIFNldFBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVFOTg0MzFBODkyMjc1MDA3NTRFOTMg
LyogU2V0dXBWYXJhcmdzRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDcxLDYgKzg1Mjcs
NyBAQAogCQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0MxRUFGMTE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNp
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MzBCNjEzMTI1MDA2OEYwMDlEMjVCMSAvKiBT
dHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyMTFCREFD
REFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUIx
MDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTcwRUMwRUM2MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQzEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5n
T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA4OCw2ICs4NTQ1LDcgQEAKIAkJCQk3MDVC
NDFBRDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzA1QjQxQUYxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVjdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1VzZUNvdW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRF
N0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQ0E2MDcxQUZEQkVB
MjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZD
MzE0MTMxODE0NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTgxMTcsNiArODU3NSw3IEBACiAJCQkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8q
IFZhbHVlUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlFRTBCRkYxQjRBRkI4NTAw
MDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2
QzczNTAxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTA1MDJDMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJP
ZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8q
IFZpcnR1YWxSZWdpc3Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhD
MDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTM2LDYgKzg1OTUsNyBAQAog
CQkJCTcwOUZCODY5MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNzA5RkI4NkIxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90
b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8q
IFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3RDFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMDk4MUY3MUJDNUU1NjUwMDQ4MTRGOCAvKiBERkdDb3B5QmFycmllck9w
dGltaXphdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBQjNBMTc5OUU0QjIw
MEQyODMzRCAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVy
LnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgQWRkcmVzc01hdGNoZXIKKworIyBOb3Rl
IHRoYXQgdGhpcyByZWxpZXMgb24gQjMgZG9pbmcgYWdncmVzc2l2ZSByZWFzc29jaWF0aW9uIGFu
ZCBjYW5vbmNhbGl6YXRpb24gb2YgaW50ZWdlciBhZGRzLgorIyBXZSdsbCBuZXZlciBzZWUgQWRk
KEFkZCh4LCBjb25zdDEpLCBjb25zdDIpIGJlY2F1c2UgaXQgd291bGQgaGF2ZSBhbHJlYWR5IGJl
ZW4gcmVhc3NvY2lhdGVkIGludG8KKyMgQWRkKHgsIGNvbnN0MSArIGNvbnN0MikuIEFsc28sIHdl
IHdpbGwgbmV2ZXIgc2VlIEFkZChjb25zdCwgeCksIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBjYW5v
bmljYWxpemVkCisjIGl0IHRvIEFkZCh4LCBjb25zdCkuIFRoYXQgc2FpZCwgaW4gdGhpcyBjb2Rl
IHdlIG5ldmVyIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCB0aGVzZSBvcHRpbWl6YXRpb25zCisjIGhh
dmluZyBiZWVuIHBlcmZvcm1lZC4gQWxzbywgc2luY2UgdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rp
b25zIGluIEIzIGhhdmUgYSBidWlsdC1pbiBvZmZzZXQsIHdlCisjIGRvbid0IG5lZWQgdG8gbWF0
Y2ggQWRkKHgsIGNvbnN0KS4gVGhhdCB3b3VsZCBoYXZlIGJlZW4gZm9sZGVkIGludG8gdGhlIExv
YWQvU3RvcmUgaW5zdHJ1Y3Rpb25zCisjIGFscmVhZHkuIFNvLCB0aGUgb25seSBmYW5jeSBtYXRo
aW5nIHRoaXMgY2FuIGRvIGlzIGp1c3QgQmFzZUluZGV4IGZvcm1zLgorCitBZGRTaGlmdDEgPSBB
ZGQoU2hsKGluZGV4LCAkbG9nU2NhbGUpLCBiYXNlKQorQWRkU2hpZnQyID0gQWRkKGJhc2UsIFNo
bChpbmRleCwgJGxvZ1NjYWxlKSkKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitEaXJlY3QK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRS
ZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXJndW1lbnRSZWdWYWx1ZTo6fkFyZ3Vt
ZW50UmVnVmFsdWUoKQoreworfQorCit2b2lkIEFyZ3VtZW50UmVnVmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fcmVnKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZp
bmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiUmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBBcmd1bWVudFJlZ1ZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29k
ZSA9PSBBcmd1bWVudFJlZzsgfQorICAgIAorICAgIH5Bcmd1bWVudFJlZ1ZhbHVlKCk7CisKKyAg
ICBSZWcgYXJndW1lbnRSZWcoKSBjb25zdCB7IHJldHVybiBtX3JlZzsgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBBcmd1bWVudFJlZ1ZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkgPyBwb2ludGVyKCkgOiBEb3VibGUsIG9y
aWdpbikKKyAgICAgICAgLCBtX3JlZyhyZWcpCisgICAgeworICAgIH0KKworICAgIFJlZyBtX3Jl
ZzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2sodW5zaWdu
ZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2luZGV4KGluZGV4KQorICAgICwg
bV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygp
Cit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBt
X3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBi
bG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9j
ayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30K
Kwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwg
QmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9t
LCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNp
Y0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7Cisg
ICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwg
ZGVlcER1bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9j
aworI2RlZmluZSBCM0Jhc2ljQmxvY2sKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOwor
Y2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9y
PEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8RnJl
cXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZh
bHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogZHVtcFByZWZpeCA9
ICIjIjsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFZhbHVlTGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0OjppdGVyYXRvciBlbmQo
KSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVM
aXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsg
fQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0K
KyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRl
eF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5k
ZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3Qo
KTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorCisg
ICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQor
ICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIHZvaWQg
YXBwZW5kKFZhbHVlKik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBB
cmd1bWVudHMuLi4pOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAg
IEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEZy
ZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KTsKKyAgICBjb25zdCBTdWNj
ZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNz
b3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3Nv
ckJsb2NrKHVuc2lnbmVkIGluZGV4KTsKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxv
Y2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpOworICAgIFN1Y2Nlc3NvckNvbGxl
Y3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxv
Y2tzKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJl
dHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nv
cih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9
CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRl
Y2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIFBy
ZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5k
ZXhdOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29s
IHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICBkb3VibGUgZnJl
cXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8v
IEluc3RhbnRpYXRlIHZpYSBQcm9jZWR1cmUuCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRl
eCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVl
TGlzdCBtX3ZhbHVlczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAg
ZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1
YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxvY2spCisgICAgICAg
IDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAg
IG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5w
cmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNCbG9jayogYmxvY2sp
Cit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzQmFzaWNCbG9jaworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Js
b2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jh
c2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M0Jhc2ljQmxvY2tJbmxpbmVzX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
QjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5l
dyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBW
YWx1ZVR5cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4p
OworICAgIGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVk
IEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCkt
PmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitGcmVxdWVudGVkQmxv
Y2sgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJl
dHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKwor
RnJlcXVlbnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgp
OworfQorCitjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCkt
PnN1Y2Nlc3NvcnMoKTsKK30KKworQmFzaWNCbG9jayogQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxv
Y2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCku
YmxvY2soKTsKK30KKworQmFzaWNCbG9jayomIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKHVu
c2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7Cit9
CisKK1N1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gQmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2tzKCkKK3sKKyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihzdWNjZXNzb3JzKCkpOworfQorCitTdWNjZXNz
b3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IEJhc2lj
QmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN1Y2Nlc3NvckNv
bGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4oc3VjY2Vzc29y
cygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIzQmFz
aWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0luZGV4
U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxv
Y2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIEJhc2ljQmxvY2s6OkFkamFjZW5j
eUxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChw
cmVkZWNlc3NvcnMuY29udGFpbnMocHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBwcmVkZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAg
IEJhc2ljQmxvY2s6OkFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNl
c3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gcHJlZGVjZXNzb3IpIHsK
KyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpLS1dID0gcHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAg
ICAgICAgICAgIHByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQo
IXByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9j
ayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIEJhc2lj
QmxvY2s6OkFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMo
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgeworICAgICAgICAgICAg
cHJlZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVjb21wdXRlcyBwcmVk
ZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KK3RlbXBs
YXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAgLy8gQ2xlYXIgYWxs
IHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBi
bG9ja3MpCisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisKKyAgICBH
cmFwaE5vZGVXb3JrbGlzdDxCYXNpY0JvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gd29ya2xp
c3Q7CisgICAgd29ya2xpc3Qubm9kZShibG9ja3NbMF0pOworICAgIHdoaWxlIChCYXNpY0Jsb2Nr
KiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3Vj
Y2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICBpZiAod29y
a2xpc3QuYWRkKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNl
c3NvcnMoKS5hcHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmxvY2tz
W2ldLnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICBibG9ja3NbaV0gPSBudWxs
cHRyOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrVXRpbHNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0Jsb2NrV29ya2xpc3RfaAorI2RlZmluZSBCM0Jsb2NrV29y
a2xpc3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5o
IgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xp
c3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitzdHJ1Y3QgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlz
dDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29ya2xpc3Q7CisKKy8v
IFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ugc2hvdWxkIHJlYWQgaXQgYXMgImJsb2Nr
IHdpdGggYW4gaW50Ii4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEdy
YXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OworCisvLyBFeHRlbmRlZCBibG9jayB3b3JrbGlz
dCBpcyB1c2VmdWwgZm9yIGVucXVldWVpbmcgc29tZSBtZXRhLWRhdGEgYWxvbmcgd2l0aCB0aGUg
YmxvY2suIEl0IGFsc28KKy8vIHBlcm1pdHMgZm9yY2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZl
biBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJdCdzIHVzZWZ1bCBmb3IKKy8v
IHRoaW5ncyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwgaW4gd2hpY2ggY2FzZSBUICh0
aGUgYXV4aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQorLy8gc3VjY2Vzc29yIGluZGV4Lgor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5k
ZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+
OworCit0eXBlZGVmIEdyYXBoVmlzaXRPcmRlciBWaXNpdE9yZGVyOworCit0eXBlZGVmIEdyYXBo
Tm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7CisKK3R5cGVkZWYgUG9z
dE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+
PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jsb2NrV29ya2xpc3RfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M0NoZWNrU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisK
K3Vuc2lnbmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQoreworICAgIHN3aXRjaCAoaW5zdC5vcmln
aW4tPm9wY29kZSgpKSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgor
ICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgQ2hlY2s6Cisg
ICAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKK0NoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9w
Y29kZSwgdW5zaWduZWQgbnVtQXJncykKKyAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQorICAg
ICwgbV9udW1DaGVja0FyZ3MobnVtQXJncykKK3sKK30KKworQ2hlY2tTcGVjaWFsOjp+Q2hlY2tT
cGVjaWFsKCkKK3sKK30KKworSW5zdCBDaGVja1NwZWNpYWw6OmhpZGRlbkJyYW5jaChjb25zdCBJ
bnN0JiBpbnN0KSBjb25zdAoreworICAgIEluc3QgaGlkZGVuQnJhbmNoKG1fY2hlY2tPcGNvZGUs
IGluc3Qub3JpZ2luKTsKKyAgICBoaWRkZW5CcmFuY2guYXJncy5yZXNpemUobV9udW1DaGVja0Fy
Z3MpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbnVtQ2hlY2tBcmdzOyBpLS07KQorICAgICAg
ICBoaWRkZW5CcmFuY2guYXJnc1tpXSA9IGluc3QuYXJnc1tpICsgMV07CisgICAgcmV0dXJuIGhp
ZGRlbkJyYW5jaDsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5z
dCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQor
eworICAgIGhpZGRlbkJyYW5jaChpbnN0KS5mb3JFYWNoQXJnKGNhbGxiYWNrKTsKKyAgICBmb3JF
YWNoQXJnSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgY2Fs
bGJhY2spOworfQorCitib29sIENoZWNrU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQorewor
ICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuaXNWYWxpZCgpCisgICAgICAgICYmIGlzVmFs
aWRJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0KTsKK30KKwor
Ym9vbCBDaGVja1NwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0lu
ZGV4KQoreworICAgIGlmIChhcmdJbmRleCA+PSAxICYmIGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hl
Y2tBcmdzKQorICAgICAgICByZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmFkbWl0c1N0YWNrKGFy
Z0luZGV4IC0gMSk7CisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbChudW1CM0FyZ3MoaW5zdCks
IG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6
Okp1bXAgQ2hlY2tTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGpp
dCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGZhaWwgPSBoaWRkZW5CcmFuY2goaW5zdCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICBB
U1NFUlQoZmFpbC5pc1NldCgpKTsKKworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOwor
CisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAgIGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+
b3Bjb2RlKCkpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisg
ICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcCgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFs
dWUtPm9wY29kZSgpID09IENoZWNrU3ViICYmIHZhbHVlLT5hcmdzWzBdLT5pc0ludCgwKSkKKyAg
ICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNvZGUsIGluc3Qu
YXJnc1syXSkpOworICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoY29udGV4dC5jb2RlLCBp
bnN0LmFyZ3NbMV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29k
ZSgpID09IENoZWNrKTsKKyAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEp
KTsKKyAgICB9CisKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBtX251bUNoZWNrQXJncyAr
IDEsIGluc3QsIHJlcHMpOworICAgIAorICAgIGNvbnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAg
ICAgICAgY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlv
bj4oCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4
dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgIGZhaWwubGluaygmaml0KTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3Rh
Y2ttYXAoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgICAgICAg
ICAgICAgU3RhY2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICAg
IHBhcmFtcy52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFja21hcCA9
IHN0YWNrbWFwOworICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICAgICAg
ICAgICAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7
CisKKyAgICAgICAgICAgICAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFt
cyk7CisgICAgICAgICAgICB9KSk7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpkdW1wSW1wbChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2NoZWNrT3Bjb2RlLCAi
KCIsIG1fbnVtQ2hlY2tBcmdzLCAiKSIpOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6ZGVlcER1
bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCMzo6Q2hl
Y2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0aCAiLCBtX251bUNoZWNr
QXJncywgIiBhcmdzLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrU3BlY2lh
bF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ugd2FudCB0byBsb3dlciBDaGVj
ayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVuIHdlIHdhbnQgdG8gcm91dGUgdGhh
dCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2RlIGluc3RlYWQgb2YgZG9pbmcgYW55
dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNrU3BlY2lhbCB3aWxsIHJlbWVtYmVy
CisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2VsZWN0ZWQgYWxvbmcgd2l0aCB0aGUg
bnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdhbnQuIEl0CisvLyB3aWxsIGNyZWF0
ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUgYXBwcm9wcmlhdGUgYXJncyBmcm9t
IHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNhbGwgYW55IG9mIHRoZSBjYWxsYmFj
a3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011
bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFyZSB0aGUgcmV2ZXJzZQorLy8gb2Yg
dGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQzMiBiLCBhKS4gRXhjZXB0OgorLy8g
LSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBCcmFuY2hOZWczMiB4LgorLy8gLSBD
aGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwzMiBiLCBhIGJ1dCB3ZSBwYXNzIEFu
eSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJsaWMgU3RhY2tt
YXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2Rl
LCB1bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKKyAgICAvLyBDb25z
dHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJhbmNoIHRoYXQg
dGhpcyB3aWxsIHVzZS4KKyAgICBJbnN0IGhpZGRlbkJyYW5jaChjb25zdCBJbnN0JikgY29uc3Q7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2Nv
cGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJv
b2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFp
cjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8vIE5PVEU6IHRo
ZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhl
biByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFw
LiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKElu
c3QmLCBDQ2FsbEhlbGVwcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworCisgICAg
dm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVl
cER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
QWlyOjpPcGNvZGUgbV9jaGVja09wY29kZTsKKyAgICB1bnNpZ25lZCBtX251bUNoZWNrQXJnczsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzQ2hlY2tTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVja1ZhbHVlOjp+
Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXAp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrVmFsdWVfaAorI2RlZmluZSBCM0NoZWNrVmFs
dWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNs
dWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9v
bCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkg
eworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAg
ICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2tt
YXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgor
ICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9w
Y29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KQorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJp
Z2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29k
ZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOworICAgIH0KKworICAgIC8vIFVz
ZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9w
Y29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAg
ICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hl
Y2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW1v
bi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2lu
Y2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBzaG91bGREdW1wSVIoKQoreworICAgIHJldHVybiBG
VEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBGVEw6OnNob3VsZER1bXBEaXNhc3Nl
bWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkRHVt
cElSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQ
aGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVIoKQoreworICAgIHJldHVybiBERkc6
OnZhbGlkYXRpb25FbmFibGVkKCkgfHwgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Cit9
CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0
aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkU2F2ZUlS
QmVmb3JlUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZh
aWx1cmUoKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVmaW5lIEIzQ29tbW9uX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitib29s
IHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpOworYm9vbCBz
aG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOwor
Ym9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbW1vbl9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlND
OjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENvbW11dGF0aXZp
dHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNvbW11dGF0aXZpdHkpIHsKKyAgICBj
YXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIkNvbW11dGF0aXZlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQo
Ik5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0
YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11
dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb21tdXRhdGl2
aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIENvbW11dGF0aXZpdHkgewor
ICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZlCit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6Q29tbXV0YXRpdml0eSk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworbWF0Y2hlciBDb21wYXJpc29uTWF0Y2hlcgorCitUZXN0TG9hZE5vdFplcm8x
ID0gQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorVGVzdExvYWROb3RaZXJvMiA9IEFuZChsZWZ0
LCBMb2FkKGFkZHJlc3MpKQorVGVzdE5vdFplcm8gPSBBbmQobGVmdCwgcmlnaHQpCisKK1Rlc3RM
b2FkWmVybzEgPSBFcXVhbChBbmQoTG9hZChhZGRyZXNzKSwgcmlnaHQpLCAkMCkKK1Rlc3RMb2Fk
WmVybzIgPSBFcXVhbChBbmQobGVmdCwgTG9hZChhZGRyZXNzKSksICQwKQorVGVzdFplcm8gPSBF
cXVhbChBbmQobGVmdCwgcmlnaHQpLCAkMCkKKworTG9hZEVxdWFsMSA9IEVxdWFsKExvYWQoYWRk
cmVzcyksIHJpZ2h0KQorTG9hZEVxdWFsMiA9IEVxdWFsKGxlZnQsIExvYWQoYWRkcmVzcykpCitO
b3QgPSBFcXVhbCh2YWx1ZSwgJDApCitFcXVhbCA9IEVxdWFsKGxlZnQsIHJpZ2h0KQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3Qz
MlZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBD
b25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0MzJWYWx1
ZV9oCisjZGVmaW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0K
KyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJ
bnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0MzJWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6On5Db25zdDY0VmFsdWUoKQoreworfQor
Cit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29u
c3Q2NFZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIENvbnN0NjRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQ29u
c3Q2NDsgfQorICAgIAorICAgIH5Db25zdDY0VmFsdWUoKTsKKyAgICAKKyAgICBpbnQ2NF90IHZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0VmFsdWUodW5zaWduZWQgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENv
bnN0NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3Q2
NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RE
b3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdERvdWJsZVZh
bHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3REb3VibGVWYWx1ZTo6
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnRmKCIlbGUi
LCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25z
dERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVlX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBDb25zdERvdWJsZVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9w
Y29kZSA9PSBDb25zdERvdWJsZTsgfQorICAgIAorICAgIH5Db25zdERvdWJsZVZhbHVlKCk7Cisg
ICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdERvdWJs
ZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBkb3VibGUgdmFsdWUpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKKyAgICAgICAg
LCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZG91YmxlIG1fdmFsdWU7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Q29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQcmludGVyIGNv
bW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1Y2Nlc3NvcnMpCisgICAgICAg
IG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzQ29udHJvbFZhbHVlX2gKKyNkZWZpbmUgQjNDb250cm9sVmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgQmFzaWNCbG9jazsKKworY2xhc3MgQ29udHJvbFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIEp1bXA6CisgICAgICAgIGNhc2Ug
QnJhbmNoOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBPb3BzOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU3dpdGNoOiAKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEgc3ViY2xhc3Mgb2YgQ29udHJv
bFZhbHVlLCBzbyB3ZSB3YW50CisgICAgICAgICAgICAvLyBzd2l0Y2hWYWx1ZS0+YXM8Q29udHJv
bFZhbHVlPigpIHRvIHJldHVybiBub24tbnVsbC4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JM
aXN0OworCisgICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVk
QmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3Nv
cnNbaV07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gbV9zdWNjZXNzb3JzW2ldOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3Vj
Y2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8g
VXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlw
ZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6
IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsK
KyAgICB9CisKKyAgICAvLyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNj
ZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChv
cGNvZGUgPT0gT29wcyk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAg
ICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiByZXN1bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCByZXN1bHQpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiB0
YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3Jz
LmFwcGVuZCh0YXJnZXQpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisg
ICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgQmFzaWNCbG9jayogeWVz
LCBCYXNpY0Jsb2NrKiBubykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBv
cmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNo
KTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3Nv
cnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnRyb2xWYWx1ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFz
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGcmVxdWVu
Y3lDbGFzcyBmcmVxdWVuY3kpCit7CisgICAgc3dpdGNoIChmcmVxdWVuY3kpIHsKKyAgICBjYXNl
IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWw6CisgICAgICAgIG91dC5wcmludCgiTm9ybWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZyZXF1ZW5jeUNsYXNzOjpSYXJlOgorICAgICAgICBv
dXQucHJpbnQoIlJhcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1
ZW5jeUNsYXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJl
cXVlbmN5Q2xhc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZyZXF1ZW5jeUNsYXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVl
bmN5Q2xhc3NfaAorI2RlZmluZSBCM0ZyZXF1ZW5jeUNsYXNzX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIGNsYXNzIEZyZXF1
ZW5jeUNsYXNzIDogdWludDhfdCB7CisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgaHlwb3RoZXNp
cyBhYm91dCB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVjdC4gVGhp
cyBpcworICAgIC8vIHRoZSBjb21tb24gY2FzZS4gV2UgY2FuIHN0aWxsIHVzZSBiYXNpYyBibG9j
ayBmcmVxdWVuY3kgaW4gdGhpcyBjYXNlLgorICAgIE5vcm1hbCwKKworICAgIC8vIFdlIGV4cGVj
dCB0aGF0IHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVjdCB3aWxsIGJlIHJlYWNoZWQgc3VwZXIg
cmFyZWx5LiBJdCdzIHZhbGlkIHRvCisgICAgLy8gcGVyZm9ybSBvcHRpbWl6YXRpb25zIHRoYXQg
cHVuaXNoIFJhcmUgY29kZS4gTm90ZSB0aGF0IHRoZXJlIHdpbGwgYmUgc2l0dWF0aW9ucyB3aGVy
ZSB5b3UKKyAgICAvLyBoYXZlIHRvIHNvbWVob3cgY29uc3RydWN0IGEgbmV3IGZyZXF1ZW5jeSBj
bGFzcyBmcm9tIGEgbWVyZ2luZyBvZiBtdWx0aXBsZSBjbGFzc2VzLiBXaGVuCisgICAgLy8gdGhp
cyBoYXBwZW5zLCBuZXZlciBjaG9vc2UgUmFyZTsgYWx3YXlzIGdvIHdpdGggTm9ybWFsLiBUaGlz
IGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlCisgICAgLy8gcmVhbGx5IGRvIHB1bmlzaCBSYXJlIGNv
ZGUgdmVyeSBiYWRseS4KKyAgICBSYXJlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpGcmVxdWVuY3lDbGFzcyk7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzRnJl
cXVlbmN5Q2xhc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVu
dGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVx
dWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0ZyZXF1
ZW50ZWRCbG9ja19oCisjZGVmaW5lIEIzRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYg
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVkQmxvY2s7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQjNM
b3dlclRvQWlyLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbGlk
YXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIGdlbmVyYXRl
KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBBaXI6OkNv
ZGUgY29kZTsKKyAgICBnZW5lcmF0ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgQWlyOjpn
ZW5lcmF0ZShjb2RlLCBqaXQpOworfQorCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBw
cm9jZWR1cmUsIEFpcjo6Q29kZSYgY29kZSkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigp
KQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJpbml0aWFsIik7CisKKyAgICBpZiAoc2hv
dWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBCMzpcbiIpOworICAgICAg
ICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1FOiBBZGQgbW9y
ZSBvcHRpbWl6YXRpb25zIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDUwNworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAg
ICAgdmFsaWRhdGUocHJvY2VkdXJlLCAiZmluYWwiKTsKKyAgICAKKyAgICBpZiAoc2hvdWxkRHVt
cElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQjMgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsKKyAg
ICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIGxvd2VyVG9BaXIocHJvY2Vk
dXJlLCBjb2RlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyYXRlX2gKKyNkZWZpbmUgQjNHZW5l
cmF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
Q0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CituYW1l
c3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVy
ZSwgb3B0aW1pemVzIGl0IGluLXBsYWNlLCBhbmQgZ2VuZXJhdGVzIGl0IHRvIG1hY2hpbmUgY29k
ZSBieSBmaXJzdAorLy8gaW50ZXJuYWxseSBjb252ZXJ0aW5nIHRvIGFuIEFpcjo6Q29kZSBhbmQg
dGhlbiBnZW5lcmF0aW5nIHRoYXQuCit2b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYsIENDYWxsSGVs
cGVycyYpOworCisvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0aW1pemVzIGl0IGlu
LXBsYWNlLCBhbmQgbG93ZXJzIGl0IHRvIEFpci4gWW91IGNhbiB0aGVuIGdlbmVyYXRlCisvLyB0
aGUgQWlyIHRvIG1hY2hpbmUgY29kZSB1c2luZyBBaXI6OmdlbmVyYXRlKCkuIE5vdGUgdGhhdCBh
biBBaXI6OkNvZGUgd2lsbCBoYXZlIHBvaW50ZXJzIGludG8gdGhlCisvLyBCMzo6UHJvY2VkdXJl
LCBzbyB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQjM6OlByb2NlZHVyZSBvdXRsaXZlcyB0
aGUgQWlyOjpDb2RlLgordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIENvZGUmKTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNHZW5lcmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5l
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworLy8gQSBmcmVxdWVudGVkIGJsb2NrIGlzIGEgdHVwbGUgb2YgQmFzaWNCbG9jayogYW5k
IEZyZXF1ZW5jeUNsYXNzLiBJdCdzIHVzdWFsbHkgdXNlZCBhcyBhCisvLyBzdWNjZXNzb3IgZWRn
ZS4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNGcmVxdWVu
dGVkQmxvY2sgeworcHVibGljOgorICAgIGV4cGxpY2l0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2so
CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbnVsbHB0ciwgRnJlcXVlbmN5Q2xhc3MgZnJl
cXVlbmN5ID0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2Nr
KQorICAgICAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKKyAgICB7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9ibG9jayA9PSBvdGhlci5tX2Jsb2NrCisgICAgICAgICAgICAm
JiBtX2ZyZXF1ZW5jeSA9PSBvdGhlci5tX2ZyZXF1ZW5jeTsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBGcmVxdWVu
dGVkQmxvY2soKTsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2s7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2Nr
OyB9CisgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVx
dWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoZnJlcXVlbmN5KCkgIT0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAg
ICAgIG91dC5wcmludChmcmVxdWVuY3koKSwgIjoiKTsKKyAgICAgICAgb3V0LnByaW50KHBvaW50
ZXJEdW1wKG1fYmxvY2spKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9i
bG9jazsKKyAgICBGcmVxdWVuY3lDbGFzcyBtX2ZyZXF1ZW5jeTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
SW5kZXhNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0lu
ZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5kZXhNYXBfaAorI2Rl
ZmluZSBCM0luZGV4TWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgbWFwIGZvciBrZXlzIHRoYXQgaGF2ZSBh
biBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25s
eQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBv
ZiB0aGVzZSBtYXBzLCBzaW5jZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeQorLy8gc3BhcnNlIGluZGlj
ZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1ZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWU+CitjbGFzcyBJbmRleE1hcCB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgSW5kZXhNYXAoc2l6ZV90IHNpemUgPSAwKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IucmVz
aXplKHNpemUpOworICAgIH0KKworICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKQorICAgIHsK
KyAgICAgICAgbV92ZWN0b3IucmVzaXplKHNpemUpOworICAgIH0KKworICAgIFZhbHVlJiBvcGVy
YXRvcltdKEtleSoga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5k
ZXgoKV07CisgICAgfQorICAgIAorICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworfTsKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVk
ZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5n
cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxv
Y2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVh
dGUgdG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3Bh
cnNlCisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5
b3Ugd2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+
LiBTbywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhT
ZXQgeworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBh
ZGQoVCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5k
ZXgoKSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBj
b25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29sbGVjdGlv
bikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJh
dG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBDb2xsZWN0
aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9y
IGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAg
ICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pdGVy
ID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBtX2NvbGxl
Y3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3Ig
bV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAgICAgICBp
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0
LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUm
IG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAgIH07CisK
KyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQudmFsdWVz
KHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86CisgICAgLy8g
aW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZhbHVlcyhj
b25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQorCisgICAg
Y29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQ29tbWFQ
cmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMoKS5zZXRC
aXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgsIGluZGV4
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIz
QWRkcmVzc01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM0xvd2VyaW5nTWF0Y2hlci5oIgorI2luY2x1
ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1
c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2UgeworCitjbGFzcyBMb3dlclRvQWlyIHsK
K3B1YmxpYzoKKyAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2Rl
KQorICAgICAgICA6IHZhbHVlVG9UbXAoY29kZS52YWx1ZXMoKS5zaXplKCkpCisgICAgICAgICwg
YmxvY2tUb0Jsb2NrKGNvZGUuc2l6ZSgpKQorICAgICAgICAsIHVzZUNvdW50cyhwcm9jZWR1cmUp
CisgICAgICAgICwgYWRkcmVzc1NlbGVjdG9yKCp0aGlzKQorICAgICAgICAsIGxvd2VyaW5nU2Vs
ZWN0b3IoKnRoaXMpCisgICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBj
b2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAg
IGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlKQorICAgICAgICAgICAgYmxv
Y2tUb0Jsb2NrW2Jsb2NrXSA9IGNvZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1ZW5jeSgpKTsKKwor
ICAgICAgICAvLyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlz
IGlzIGEgZ29vZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKKyAgICAgICAgLy8gaG9pc3RlZCBh
ZGRyZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxv
b3AuCisgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlLmJsb2Nr
c0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KKyAgICAg
ICAgICAgIGluc3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJv
Y2VzcyBibG9ja3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4g
VGhhdCdzIHdoYXQgYWxsb3dzIHVzCisgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBl
ZmZlY3RpdmVseS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOwor
ICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAg
ICAgICBydW5Mb3dlcmluZ01hdGNoZXIoY3VycmVudFZhbHVlLCBsb3dlcmluZ1NlbGVjdG9yKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rp
b25zLiBpbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MK
KyAgICAgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBpbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGlu
c3QgOiBpbnN0c1tpXSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+
YXBwZW5kSW5zdChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4K
KyAgICAgICAgICAgIEFTU0VSVChibG9jay0+c3VjY2Vzc29ycygpIDw9IDIpOworICAgICAgICAg
ICAgZm9yIChCMzo6QmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2Nr
cygpKQorICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3NvcnMoKS5h
cHBlbmQoYmxvY2tUb0Jsb2NrW3N1Y2Nlc3Nvcl0pOworICAgICAgICB9CisgICAgfQorCisgICAg
VG1wIHRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBUbXAmIHRtcCA9IHZhbHVlVG9U
bXBbdmFsdWVdOworICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgIHRtcCA9IGNvZGUubmV3
VG1wKGlzSW50KHZhbHVlKSA/IEFyZzo6R1AgOiBBcmc6OkZQKTsKKyAgICAgICAgcmV0dXJuIHRt
cDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGdpdmVzIHlvdSB0aGUgYWRkcmVzcyBvZiB0aGUgZ2l2
ZW4gTG9hZCBvciBTdG9yZS4gSWYgaXQncyBub3QgYSBMb2FkIG9yIFN0b3JlLCB0aGVuCisgICAg
Ly8gaXQgcmV0dXJucyBBcmcoKS4KKyAgICBBcmcgYWRkcihWYWx1ZSogbWVtb3J5VmFsdWUpCisg
ICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogdmFsdWUgPSBtZW1vcnlWYWx1ZS0+YXM8TWVtb3J5
VmFsdWU+KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7
CisKKyAgICAgICAgcnVuQWRkcmVzc01hdGNoZXIodmFsdWUtPmNoaWxkcmVuLmxhc3QoKSwgYWRk
cmVzc1NlbGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFk
ZHJlc3Mud2l0aE9mZnNldCh2YWx1ZS0+b2Zmc2V0KCkpOworICAgIH0KKworICAgIEFyZyBsb2Fk
QWRkcihWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+b3Bj
b2RlKCkgPT0gTG9hZCkKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGxvYWRWYWx1ZSk7CisgICAg
ICAgIHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcgaW1tKFZhbHVlKiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBB
cmc6OkltbSh2YWx1ZS0+YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0K
KworICAgIEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoQXJn
IHJlc3VsdCA9IGltbSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXR1cm4gdG1wKHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxPcGNvZGUgb3Bjb2Rl
LCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICB2b2lk
IGFwcGVuZEJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBU
bXAgcmVzdWx0ID0gdG1wKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIAorICAgICAgICAvLyBUaHJl
ZS1vcGVyYW5kIGZvcm1zIGxpa2U6CisgICAgICAgIC8vICAgICBPcCBhLCBiLCBjCisgICAgICAg
IC8vIG1lYW4gc29tZXRoaW5nIGxpa2U6CisgICAgICAgIC8vICAgICBjID0gYSBPcCBiCisKKyAg
ICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFyZzo6VG1wLCBBcmc6OlRt
cCkpIHsKKyAgICAgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGltbShyaWdodCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBw
ZW5kKG9wY29kZSwgaW1tKHJpZ2h0KSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvLyBBIG5vbi1jb21tdXRhdGl2ZSBvcGVyYXRpb24gY291bGQgaGF2
ZSBhbiBpbW1lZGlhdGUgaW4gbGVmdC4KKyAgICAgICAgICAgICAgICBpZiAoaW1tKGxlZnQpKSB7
CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShsZWZ0KSwgdG1wKHJpZ2h0
KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbW0ocmlnaHQpICYm
IGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIHsKKyAg
ICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgaW1tKHJpZ2h0KSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFR3by1vcGVyYW5k
IGZvcm1zIGxpa2U6CisgICAgICAgIC8vICAgICBPcCBhLCBiCisgICAgICAgIC8vIG1lYW4gc29t
ZXRoaW5nIGxpa2U6CisgICAgICAgIC8vICAgICBiID0gYiBPcCBhCisKKyAgICAgICAgLy8gQXQg
dGhpcyBwb2ludCwgd2UgcHJlZmVyIHZlcnNpb25zIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBoYXZl
IGEgZnVzZWQgbG9hZCBvdmVyIHRocmVlCisgICAgICAgIC8vIG9wZXJhbmQgZm9ybXMuCisgICAg
ICAgIAorICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAg
ICAgICAgQXJnIGxlZnRBZGRyID0gbG9hZEFkZHIobGVmdCk7CisgICAgICAgICAgICBpZiAoaXNW
YWxpZEZvcm0ob3Bjb2RlLCBsZWZ0QWRkci5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAgICAg
ICAgICAgIGFwcGVuZChNb3ZlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAg
IGFwcGVuZChvcGNvZGUsIGxlZnRBZGRyLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFyZyByaWdodEFkZHIgPSBs
b2FkQWRkcihyaWdodCk7CisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRk
ci5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChsZWZ0
KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkciwgcmVzdWx0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1ZhbGlk
Rm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAg
ICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQp
LCByZXN1bHQpOworICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAocmlnaHQpLCByZXN1bHQpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPE9wY29kZSBvcGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0
YXRpdmUgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICBib29sIHRyeUFwcGVuZFN0b3JlQmluT3AoVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIEFyZyBzdG9yZUFkZHIgPSBh
ZGRyKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOworCisgICAgICAg
IFZhbHVlKiBvdGhlclZhbHVlOworICAgICAgICBpZiAoYWRkcihsZWZ0KSA9PSBzdG9yZUFkZHIp
CisgICAgICAgICAgICBvdGhlclZhbHVlID0gcmlnaHQ7CisgICAgICAgIGVsc2UgaWYgKGNvbW11
dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUgJiYgYWRkcihyaWdodCkgPT0gc3RvcmVBZGRyKQorICAg
ICAgICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAs
IHN0b3JlQWRkci5raW5kKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGFwcGVuZChvcGNvZGUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIHZvaWQgYXBwZW5kKE9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoSW5zdChvcGNvZGUsIGN1cnJlbnRW
YWx1ZSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKyAg
ICAKKyAgICBJbmRleFNldDxWYWx1ZT4gbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQg
d2lsbCBoYXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gdmFsdWVU
b1RtcDsKKyAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gYmxv
Y2tUb0Jsb2NrOworCisgICAgVXNlQ291bnRzIHVzZUNvdW50czsKKworICAgIFZlY3RvcjxWZWN0
b3I8SW5zdCwgND4+IGluc3RzOworCisgICAgVmFsdWUqIGN1cnJlbnRWYWx1ZTsKKworICAgIC8v
IFRoZSBhZGRyZXNzIHNlbGVjdG9yIHdpbGwgbWF0Y2ggYW55IHBhdHRlcm4gd2hlcmUgdGhlIGlu
cHV0IG9wZXJhbmRzIGFyZSBhdmFpbGFibGUgYXMgVG1wcy4KKyAgICAvLyBJdCBkb2Vzbid0IGNh
cmUgYWJvdXQgc2hhcmluZy4gSXQgd2lsbCBoYXBwaWx5IGVtaXQgdGhlIHNhbWUgYWRkcmVzcyBl
eHByZXNzaW9uIG92ZXIgYW5kIG92ZXIKKyAgICAvLyBhZ2FpbiByZWdhcmRsZXNzIG9mIHRoZSBl
eHByZXNzaW9uJ3MgY29tcGxleGl0eS4gVGhpcyB3b3JrcyBvdXQgZmluZSwgc2luY2UgYXQgdGhl
IG1hY2hpbmUKKyAgICAvLyBsZXZlbCwgYWRkcmVzcyBleHByZXNzaW9ucyBhcmUgc3VwZXIgY2hl
YXAuIEhvd2V2ZXIsIHRoaXMgZG9lcyBoYXZlIGEgaGFjayB0byBhdm9pZAorICAgIC8vICJ1bmhv
aXN0aW5nIiBhZGRyZXNzIGV4cHJlc3Npb25zLgorICAgIGNsYXNzIEFkZHJlc3NTZWxlY3RvciB7
CisgICAgICAgIEFkZHJlc3NTZWxlY3RvcihMb3dlclRvQWlyJiBsb3dlcikKKyAgICAgICAgICAg
IDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgYWNj
ZXB0c1Jvb3QoVmFsdWUqIHJvb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0
IHdhbnQgdG8gbWF0Y2ggYW4gYWRkcmVzcyBleHByZXNzaW9uIHRoYXQgaGFzIGFscmVhZHkgYmVl
biBjb21wdXRlZAorICAgICAgICAgICAgLy8gZXhwbGljaXRseS4KKyAgICAgICAgICAgIHJldHVy
biAhdmFsdWVUb1RtcFtyb290XTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWNjZXB0Um9v
dExhdGUoVmFsdWUqKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZhbHVlVG9UbXBbdmFs
dWVdKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHJ1biBh
Y2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFj
Y2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZShBcmd1
bWVudHMuLi4pIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQuY29udGFp
bnModmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJv
b2wgYWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShB
cmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQxKFZhbHVlKiBpbmRl
eCwgVmFsdWUqIGxvZ1NjYWxlLCBWYWx1ZSogYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGxvZ1NjYWxlLT5hc0ludCgpIDwgMCB8fCBsb2dTY2FsZS0+YXNJbnQoKSA+IDMpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0g
QXJnOjppbmRleCgKKyAgICAgICAgICAgICAgICBsb3dlci50bXAoaW5kZXgpLCBsb3dlci50bXAo
aW5kZXgpLCAxIDw8IGxvZ1NjYWxlLT5hc0ludCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDIoVmFsdWUqIGJhc2UsIFZh
bHVlKiBpbmRleCwgdmFsdWUqIGxvZ1NjYWxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gdHJ5QWRkU2hpZnQxKGluZGV4LCBsb2dTY2FsZSwgYmFzZSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAocmlnaHQtPmhhc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBU
aGlzIHByb2R1Y3Rpb24gaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHNpbmNlIHdlIGV4cGVjdAor
ICAgICAgICAgICAgICAgIC8vIExvYWQoQWRkKEB4LCBAY29uc3QxKSwgb2Zmc2V0ID0gY29uc3Qy
KSB0byBoYXZlIGFscmVhZHkgYmVlbiBzdHJlbmd0aC1yZWR1Y2VkCisgICAgICAgICAgICAgICAg
Ly8gdG8gTG9hZChAeCwgb2Zmc2V0ID0gY29uc3QxICsgY29uc3QyKS4KKyAgICAgICAgICAgICAg
ICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIobG93ZXIudG1wKGxlZnQpLCByaWdodC0+YXNJ
bnQzMigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjppbmRleChsb3dlci50bXAobGVmdCks
IGxvd2VyLnRtcChyaWdodCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHRyeURpcmVjdChWYWx1ZSogYWRkcmVzcykKKyAgICAgICAgeworICAg
ICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGFkZHJlc3MpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXIm
IGxvd2VyOworICAgICAgICBBcmcgc2VsZWN0ZWRBZGRyZXNzOworICAgIH07CisgICAgQWRkcmVz
c1NlbGVjdG9yIGFkZHJlc3NTZWxlY3RvcjsKKworICAgIC8vIFRoaXMgd2lsbCBtYXRjaCBjb21w
bGV4IG11bHRpLXZhbHVlIGV4cHJlc3Npb25zLCBidXQgb25seSBpZiB0aGVyZSBpcyBubyBzaGFy
aW5nLiBGb3IgZXhhbXBsZSwKKyAgICAvLyBpdCB3b24ndCBtYXRjaCBhIExvYWQgdHdpY2UgYW5k
IGNhdXNlIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBkbyB0d28gbG9hZHMgd2hlbiB0aGUgb3JpZ2lu
YWwKKyAgICAvLyBjb2RlIGp1c3QgZGlkIG9uZS4KKyAgICBjbGFzcyBMb3dlcmluZ1NlbGVjdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIExvd2VyaW5nU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93
ZXIpCisgICAgICAgICAgICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKCFsb3dlci5sb2NrZWQuY29udGFpbnMocm9vdCkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFjY2VwdFJvb3RM
YXRlKFZhbHVlKikgeyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgb25lIG9m
IHRoZSBpbnRlcm5hbCB0aGluZ3MgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZCwgdGhlbiB3ZSBk
b24ndCB3YW50IHRvIGNhdXNlCisgICAgICAgICAgICAvLyBpdCB0byBiZSByZWNvbXB1dGVkIGFn
YWluLgorICAgICAgICAgICAgaWYgKGxvd2VyLnZhbHVlVG9UbXBbdmFsdWVdKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgcmVx
dWlyZSBpbnRlcm5hbHMgdG8gaGF2ZSBvbmx5IG9uZSB1c2UgLSB1cy4KKyAgICAgICAgICAgIGlm
ICh1c2VDb3VudHNbdmFsdWVdICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50
cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJldHVy
biB0cnVlOyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZShWYWx1ZSogdmFsdWUsIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd2VyLmxvY2tlZC5h
ZGQodmFsdWUpOworICAgICAgICAgICAgYWNjZXB0SW50ZXJuYWxzTGF0ZShhcmd1bWVudHMuLi4p
OworICAgICAgICB9CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZSgpIHsgfQorICAg
ICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBi
b29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2Vw
dE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRP
cGVyYW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4u
LikgeyB9CisKKyAgICAgICAgYm9vbCB0cnlMb2FkKFZhbHVlKiBhZGRyZXNzKQorICAgICAgICB7
CisgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgYWRkcihhZGRyZXNzKSwgbG93ZXIudG1w
KGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJ
bnQzMjoKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmRCaW5PcDxBZGQzMiwgQ29tbXV0YXRp
dmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5
cGVzIQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmVBZGRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQsIFZhbHVlKikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxv
d2VyLnRyeUFwcGVuZFN0b3JlQmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVN0b3JlQW5kTG9hZChWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bGVmdC0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAg
IHJldHVybiBsb3dlci50cnlBcHBlbmRTdG9yZUJpbk9wPEFuZDMyLCBDb21tdXRhdGl2ZT4obGVm
dCwgcmlnaHQpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlTdG9yZShWYWx1ZSog
dmFsdWUsIFZhbHVlKikKKyAgICAgICAgeworICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUs
IGxvd2VyLnRtcCh2YWx1ZSksIGxvd2VyLmFkZHIobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5UmV0dXJu
KFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgY2FzZSBJbnQ2NDoK
KyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgaW1tT3JUbXAodmFsdWUpLCBHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZURvdWJsZSwg
bG93ZXIudG1wKHZhbHVlKSwgR1BSSU5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvd2VyLmFwcGVuZChSZXQpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxv
d2VyOworICAgIH07CisgICAgTG93ZXJpbmdTZWxlY3RvciBsb3dlcmluZ1NlbGVjdG9yOworICAg
IAorICAgIFByb2NlZHVyZSYgcHJvY2VkdXJlOworICAgIENvZGUmIGNvZGU7Cit9OworCit9IC8v
IGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jZWR1cmUs
ICJsb3dlclRvQWlyIik7CisgICAgTG93ZXJUb0FpciBsb3dlclRvQWlyKHByb2NlZHVyZSwgY29k
ZSk7CisgICAgbG93ZXJUb0Fpci5ydW4oKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlclRvQWlyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0xvd2Vy
VG9BaXJfaAorI2RlZmluZSBCM0xvd2VyVG9BaXJfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVz
cGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgbG93ZXJzIHRoZSBjdXJyZW50IEIz
IHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKwordm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYs
IEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVy
LnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisKKyMgVGhl
c2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0aGUgdG9w
LiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJldmVyIHBv
c3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hlciBpcyBh
biBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9IExvYWQo
YWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitTdG9yZUFkZExvYWQgPSBTdG9y
ZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmVBbmRMb2FkID0gU3RvcmUoQWRkKGxl
ZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFsdWUsIGFkZHJlc3MpCisKK1Jl
dHVybiA9IFJldHVybih2YWx1ZSkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworTWVtb3J5VmFsdWU6On5NZW1vcnlW
YWx1ZSgpCit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIm9mZnNl
dCA9ICIsIG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVt
b3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1v
cnlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVt
b3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTWVtb3J5VmFsdWVf
aAorI2RlZmluZSBCM01lbW9yeVZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
YWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsK
KyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNl
IExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkRmxvYXQ6
CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2Ug
U3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0b3JlOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUoKTsKKwor
ICAgIGludHB0cl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlz
IGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9h
ZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVk
IHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2Rl
IG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAgICAg
ICAgaW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0
eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsK
KyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bj
b2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAg
ICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAg
ICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09
IERvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3Jl
ODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9h
dDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUg
PT0gVm9pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhl
IHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnRwdHJfdCBv
ZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBMb2Fk
RmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAg
ICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAg
ICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KKyAg
ICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludHB0
cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3Jp
Z2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgewor
ICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2
OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgIGNhc2UgTm9wOgorICAgICAgICBvdXQucHJpbnQoIk5vcCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBJZGVudGl0eToKKyAgICAgICAgb3V0LnByaW50KCJJZGVudGl0
eSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdDMyOgorICAgICAgICBvdXQucHJp
bnQoIkNvbnN0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAg
ICAgb3V0LnByaW50KCJDb25zdDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0
RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0RG91YmxlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFja1Nsb3QiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAgICAgIG91dC5wcmlu
dCgiQXJndW1lbnRSZWciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJhbWVQb2ludGVy
OgorICAgICAgICBvdXQucHJpbnQoIkZyYW1lUG9pbnRlciIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBZGQ6CisgICAgICAgIG91dC5wcmludCgiQWRkIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFN1YjoKKyAgICAgICAgb3V0LnByaW50KCJTdWIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTXVsOgorICAgICAgICBvdXQucHJpbnQoIk11bCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBEaXY6CisgICAgICAgIG91dC5wcmludCgiRGl2Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICBvdXQucHJpbnQoIkNoaWxsRGl2Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1vZDoKKyAgICAgICAgb3V0LnByaW50KCJNb2Qi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0QW5kOgorICAgICAgICBvdXQucHJpbnQo
IkJpdEFuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgb3V0
LnByaW50KCJCaXRPciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRYb3I6CisgICAg
ICAgIG91dC5wcmludCgiQml0WG9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNobDoK
KyAgICAgICAgb3V0LnByaW50KCJTaGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1No
cjoKKyAgICAgICAgb3V0LnByaW50KCJTU2hyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFpTaHI6CisgICAgICAgIG91dC5wcmludCgiWlNociIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTRXh0ODoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0OCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBTRXh0MTY6CisgICAgICAgIG91dC5wcmludCgiU0V4dDE2Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0MzIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgWkV4dDMyOgorICAgICAgICBvdXQucHJpbnQoIlpF
eHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGUm91bmQ6CisgICAgICAgIG91dC5w
cmludCgiRlJvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElUb0Q6CisgICAgICAg
IG91dC5wcmludCgiSVRvRCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEVG9JMzI6Cisg
ICAgICAgIG91dC5wcmludCgiRFRvSTMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVx
dWFsOgorICAgICAgICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIE5vdEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgICAgICBvdXQucHJp
bnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NFcXVhbDoK
KyAgICAgICAgb3V0LnByaW50KCJMZXNzRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgR3JlYXRlckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJFcXVhbCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZToKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJC
ZWxvdyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICBv
dXQucHJpbnQoIkFib3ZlRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3dF
cXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvd0VxdWFsIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkOFoiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4UyIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBvdXQucHJpbnQoIkxv
YWQxNloiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgb3V0
LnByaW50KCJMb2FkMTZTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGbG9hdDoK
KyAgICAgICAgb3V0LnByaW50KCJMb2FkRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFN0b3JlODoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTgiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTE2Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgi
U3RvcmVGbG9hdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAg
b3V0LnByaW50KCJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDQ2FsbDoKKyAg
ICAgICAgb3V0LnByaW50KCJDQ2FsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQYXRj
aHBvaW50OgorICAgICAgICBvdXQucHJpbnQoIlBhdGNocG9pbnQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tBZGQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIG91dC5wcmludCgiQ2hl
Y2tTdWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIG91
dC5wcmludCgiQ2hlY2tNdWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2s6Cisg
ICAgICAgIG91dC5wcmludCgiQ2hlY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVXBz
aWxvbjoKKyAgICAgICAgb3V0LnByaW50KCJVcHNpbG9uIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFBoaToKKyAgICAgICAgb3V0LnByaW50KCJQaGkiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSnVtcDoKKyAgICAgICAgb3V0LnByaW50KCJKdW1wIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgb3V0LnByaW50KCJCcmFuY2giKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBvdXQucHJpbnQoIlN3aXRjaCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXR1cm46CisgICAgICAgIG91dC5wcmludCgi
UmV0dXJuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9vcHM6CisgICAgICAgIG91dC5w
cmludCgiT29wcyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIE9wY29kZSA6IGludDE2X3QgeworICAg
IC8vIEEgbm8tb3AgdGhhdCByZXR1cm5zIFZvaWQsIHVzZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0
byByZW1vdmUgYSB2YWx1ZS4KKyAgICBOb3AsCisgICAgIAorICAgIC8vIFBvbHltb3JwaGljIGlk
ZW50aXR5LCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBJZGVudGl0eSwKKworICAg
IC8vIENvbnN0YW50cy4gVXNlIHRoZSBDb25zdFZhbHVlKiBjbGFzc2VzLiBDb25zdGFudHMgZXhp
c3QgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28gdGhhdCB3ZSBjYW4KKyAgICAvLyByZWFzb24gYWJv
dXQgd2hlcmUgd2Ugd291bGQgY29uc3RydWN0IHRoZW0uIExhcmdlIGNvbnN0YW50cyBhcmUgZXhw
ZW5zaXZlIHRvIGNyZWF0ZS4KKyAgICBDb25zdDMyLAorICAgIENvbnN0NjQsCisgICAgQ29uc3RE
b3VibGUsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBzbG90LiBUaGlzIGlzIHZpZXdlZCBh
cyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdhcmRsZXNzIG9mCisgICAg
Ly8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBT
dGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdlIG9mCisgICAgLy8gc3RhY2sgbWVt
b3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgorICAgIFN0YWNrU2xvdCwKKworICAg
IC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBhcyBleGVj
dXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hl
cmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQsIGFuZCB0aGUgY29tcGlsZXIgdGFrZXMgY2Fy
ZSB0byBlbnN1cmUgdGhhdCB3ZQorICAgIC8vIGRvbid0IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJl
Z2lzdGVyIGFsbG9jYXRpb24gb3IgY2FsbHMgKGVpdGhlciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50
IHRvIHRoZQorICAgIC8vIHN0YWNrIG9yIHByZXNlcnZpbmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSBy
ZWdpc3RlcikuIFVzZSB0aGUgQXJndW1lbnRSZWdWYWx1ZSBjbGFzcy4gVGhlIHJldHVybgorICAg
IC8vIHR5cGUgaXMgZWl0aGVyIHBvaW50ZXIoKSAoZm9yIEdQUnMpIG9yIERvdWJsZSAoZm9yIEZQ
UnMpLgorICAgIEFyZ3VtZW50UmVnLAorCisgICAgLy8gVGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBj
YW4gcHV0IHRoaXMgYW55d2hlcmUgaW4gY29udHJvbCBmbG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5
aWVsZCB0aGUKKyAgICAvLyBmcmFtZSBwb2ludGVyLCB3aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29t
cGlsZXIgY2hhbmdlcyB0aGUgZnJhbWUgcG9pbnRlciB0ZW1wb3JhcmlseSBmb3Igc29tZQorICAg
IC8vIHNpbGx5IHJlYXNvbiwgdGhlIEZyYW1lUG9pbnRlciBpbnRyaW5zaWMgd2lsbCByZXR1cm4g
d2hlcmUgdGhlIGZyYW1lIHBvaW50ZXIgKnNob3VsZCogYmUgbm90CisgICAgLy8gd2hlcmUgaXQg
aGFwcGVucyB0byBiZSByaWdodCBub3cuCisgICAgRnJhbWVQb2ludGVyLAorCisgICAgLy8gUG9s
eW1vcnBoaWMgbWF0aCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgQWRkLAorICAg
IFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorCisgICAgLy8gSW50ZWdlciBtYXRoLgorICAgIENo
aWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCisg
ICAgTW9kLAorICAgIEJpdEFuZCwKKyAgICBCaXRPciwKKyAgICBCaXRYb3IsCisgICAgU2hsLAor
ICAgIFNTaHIsCisgICAgWlNociwKKworICAgIC8vIENhc3RzIGFuZCBzdWNoLgorICAgIC8vIFRh
a2VzIGFuZCByZXR1cm5zIEludDMyOgorICAgIFNFeHQ4LAorICAgIFNFeHQxNiwKKyAgICAvLyBU
YWtlcyBJbnQzMiBhbmQgcmV0dXJucyBJbnQ2NDoKKyAgICBTRXh0MzIsCisgICAgWkV4dDMyLAor
ICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBGUm91bmQsCisgICAgLy8gVGFr
ZXMgaW50cyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgSVRvRCwKKyAgICAvLyBUYWtlcyBEb3Vi
bGUgYW5kIHJldHVybnMgSW50MzI6CisgICAgRFRvSTMyLAorCisgICAgLy8gUG9seW1vcnBoaWMg
Y29tcGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBSZXR1cm5zIGludDMyIDAg
b3IgMS4gTm90ZSB0aGF0ICJOb3QiCisgICAgLy8gaXMganVzdCBFcXVhbCh4LCAwKS4KKyAgICBF
cXVhbCwKKyAgICBOb3RFcXVhbCwKKyAgICBMZXNzVGhhbiwKKyAgICBHcmVhdGVyVGhhbiwKKyAg
ICBMZXNzRXF1YWwsCisgICAgR3JlYXRlckVxdWFsLAorCisgICAgLy8gSW50ZWdlciBjb21wYXJp
c29ucy4gUmV0dXJucyBpbnQzMiAwIG9yIDEuCisgICAgQWJvdmUsCisgICAgQmVsb3csCisgICAg
QWJvdmVFcXVhbAorICAgIEJlbG93RXF1YWwsCisKKyAgICAvLyBNZW1vcnkgbG9hZHMuIE9wY29k
ZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBsb2FkZWQgdHlwZS4gVGhlc2UgdXNlIE1l
bW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHJldHVybiBJbnQzMjoKKyAgICBMb2FkOFosCisgICAg
TG9hZDhTLAorICAgIExvYWQxNlosCisgICAgTG9hZDE2UywKKyAgICAvLyBUaGlzIHJldHVybnMg
RG91YmxlOgorICAgIExvYWRGbG9hdCwKKyAgICAvLyBUaGlzIHJldHVybiB3aGF0ZXZlciB0aGUg
cmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwKKworICAgIC8vIE1lbW9yeSBzdG9yZXMuIE9wY29k
ZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBpcyBzdG9yZWQuIFRoZXNlIHVzZSBNZW1vcnlWYWx1
ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIEludDMyIHZhbHVlOgorICAgIFN0b3JlOCwKKyAgICBT
dG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMgYSBEb3VibGUgdmFsdWU6CisgICAgU3RvcmVGbG9h
dCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwg
YW5kIERvdWJsZToKKyAgICBTdG9yZSwKKworICAgIC8vIFRoaXMgaXMgYSByZWd1bGFyIG9yZGlu
YXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5c3RlbSBDIGNhbGxpbmcgY29udmVudGlv
bi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdXNpbmcg
dGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxsLAorCisgICAgLy8gVGhpcyBpcyBhIHBhdGNocG9p
bnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNzLiBUaGlzIGlzIHZpZXdlZCBhcyBiZWhh
dmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25seSBlbWl0cyBjb2RlIHZpYSBhIGNvZGUg
Z2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgY29kZSBpbmxp
bmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2ttYXAgYWxvbmcgd2l0aCBjb25zdHJhaW50
cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBtdXN0IGJlIHBhc3NlZC4KKyAgICAvLyBJ
dCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGluIHNvbWUg
cmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVzdAorICAgIC8vIHRoYXQgYSBzdGFja21h
cCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9tIHRoZSB0b3Agb2YgdGhlIGFyZ3VtZW50
IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFjay4KKyAgICBQYXRjaHBvaW50LAorCisg
ICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2UgYSBQYXRj
aHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBnZW5lcmF0aW9uCisgICAgLy8gY2FsbGJhY2suIFRo
YXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNvbWUgY29kZSBhZnRlciB0aGUgZXBpbG9ndWUsIGFu
ZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAgICAvLyBmcm9tIHRoZSBjaGVjaywgYW5kIHRoZSBj
aG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxzbyBnZXQgdG8gc3VwcGx5IGEgc3RhY2ttYXAuIE5v
dGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90IGFsbG93ZWQgdG8ganVtcCBiYWNrIGludG8gdGhl
IG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNsb3cgcGF0aCwgc2luY2UgdGhlIGNvbXBpbGVyCisg
ICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgZXhlY3V0aW9uIG9mIHRoZXNlIGluc3RydWN0aW9u
cyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRuJ3QgaGFwcGVuLiBGb3IKKyAgICAvLyBleGFtcGxl
LCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQnczoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0Fk
ZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vCisgICAgLy8gVGhlbiBp
dCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRvOgorICAgIC8vCisgICAgLy8gYSA9IENoZWNrQWRk
KHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5KGEpCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHZh
bGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxiYWNrcyB1c2VkIGJ5IHRoZSB0d28gQ2hlY2tBZGRz
LiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAorICAgIC8vIGNhbGxiYWNrcy4gWWV0LCB0aGlzIHRy
YW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhleSBhcmUgZGlmZmVyZW50IGJlY2F1c2Ug
d2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IENoZWNrQWRkIGV4ZWN1dGVzLCB0
aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZlIHBvc3NpYmx5IHRha2VuIHNsb3cKKyAg
ICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQgQ2hlY2tBZGQncyBjYWxsYmFjayBpcyBp
cnJlbGV2YW50LgorICAgIENoZWNrQWRkLAorICAgIENoZWNrU3ViLAorICAgIENoZWNrTXVsLAor
CisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xhc3Mu
IExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMgaGFzIGEKKyAgICAvLyBzdGFja21hcCB3
aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0YWtlcyBhbiBJbnQzMiBhcmd1bWVudCB0
aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgKKyAgICAvLyBmdWxsIGJyYW5jaCBmdXNpb24gaW4g
dGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBBIHRydWUgdmFsdWUganVtcHMgdG8gdGhlIGdlbmVy
YXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgorICAgIENoZWNrLAorCisgICAgLy8gU1NBIHN1cHBv
cnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAgIFVwc2lsb24sIC8vIFRoaXMgdXNlcyB0
aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAgIFBoaSwKKworICAgIC8vIEp1bXAuIFVzZXMgdGhl
IENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAorICAgIAorICAgIC8vIFBvbHltb3JwaGlj
IGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVh
bCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIENvbnRyb2xWYWx1ZSBjbGFzcywgd2l0aCB0aGUg
MC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUgc3VjY2Vzc29yLgorICAgIEJyYW5jaCwK
KworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBlaXRoZXIgSW50MzIgb3IgSW50NjQuIFVz
ZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3aXRjaCwKKworICAgIC8vIFJldHVybi4g
Tm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0aGVpciByZXR1cm4gdHlwZSwgc28g
dGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlwZS4gVXNlcyB0aGUgQ29udHJvbFZh
bHVlIGNsYXNzLgorICAgIFJldHVybiwKKworICAgIC8vIFRoaXMgaXMgYSB0ZXJtaW5hbCB0aGF0
IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUuIFVzZXMgdGhlIENvbnRyb2xW
YWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9OworCitpbmxpbmUgYm9vbCBpc0NoZWNrTWF0aChPcGNv
ZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBDaGVja0FkZDoK
KyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRT
dHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29k
ZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmln
aW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM09yaWdpbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3UG9pbnRlcihtX2RhdGEpLCAiKSIpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIgY2FuIGNob29zZSB0byBw
dXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIzIHdpbGwgYmUgYWJsZSB0
bworLy8gYWNjb3VudCwgZG93biB0byB0aGUgbWFjaGluZSBjb2RlLCB3aGljaCBpbnN0cnVjdGlv
biBjb3JyZXNwb25kcyB0byB3aGljaCBvcmlnaW4uIEIzCisvLyB0cmFuc2Zvcm1hdGlvbnMgbXVz
dCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQncyBhbiBlcnJvciB0byB3cml0ZSBhIHRy
YW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9wcyBPcmlnaW5zIG9yIGxpZXMgYWJvdXQg
dGhlbS4KK2NsYXNzIE9yaWdpbiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgT3JpZ2luKGNvbnN0
IHZvaWQqIGRhdGEgPSBudWxscHRyKQorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAg
ICB9CisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAg
Y29uc3Qgdm9pZCogbV9kYXRhOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM1BhdGNocG9pbnRTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworUGF0
Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKCkKK3sKK30KKworUGF0Y2hwb2ludFNw
ZWNpYWw6On5QYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNp
YWw6OmZvckVhY2hBcmcoCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6
OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlw
ZSgpID09IFZvaWQpIHsKKyAgICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgY2FsbGJh
Y2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFd
LCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5cGUoKSk7CisgICAgZm9yRWFjaEFyZ0ltcGwo
MCwgMiwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29sIFBhdGNocG9pbnRTcGVjaWFsOjppc1Zh
bGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkK
KyAgICAgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDEsIGluc3QpOworCisgICAgaWYgKGluc3Qu
YXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGluc3QuYXJn
c1sxXS5raW5kKCkgIT0gQXJnOjpUbXApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAo
IWluc3QuYXJnc1sxXS5pc1R5cGUoaW5zdC5vcmlnaW4tPmFpclR5cGUoKSkpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAyLCBpbnN0KTsKK30KKwor
Ym9vbCBQYXRjaHBvaW50U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQg
YXJnSW5kZXgpCit7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAg
ICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAxLCBpbnN0LCBhcmdJbmRleCk7CisKKyAgICBp
ZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGFk
bWl0c1N0YWNrSW1wbCgwLCAyLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6
SnVtcCBQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUoCisgICAgSW5zdCYgaW5zdCwgQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KQoreworICAgIFZhbHVlKiB2
YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFj
a21hcCgpOworICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJl
cHM7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUo
KSAhPSBWb2lkKQorICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwg
aW5zdC5hcmdzW29mZnNldCsrXSkpOworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG9mZnNl
dCwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgU3RhY2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFy
YW1zOworICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOworICAgIHBhcmFtcy5zdGFja21hcCA9IHN0
YWNrbWFwOworICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICBwYXJhbXMudXNlZFJlZ2lzdGVy
cyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICBzdGFja21hcC0+bV9nZW5lcmF0
b3ItPnJ1bihqaXQsIHBhcmFtcyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BhdGNocG9pbnRTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzUGF0Y2hwb2ludFNwZWNpYWxfaAorI2RlZmluZSBCM1BhdGNocG9pbnRTcGVjaWFs
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNwZWNp
YWwgdGhhdCByZWNvZ25pemVzIHRoYXQgdGhlcmUgYXJlIHR3byB1c2VzIG9mIFBhdGNocG9pbnQ6
IFZvaWQgYW5kIGFuZCBub24tVm9pZC4KKy8vIEluIHRoZSBWb2lkIGNhc2UsIHRoZSBzeW50YXgg
b2YgdGhlIEFpciBQYXRjaCBpbnN0cnVjdGlvbiBpczoKKy8vCisvLyAgICAgUGF0Y2ggJnBhdGNo
cG9pbnQsIGFyZ3MuLi4KKy8vCisvLyBXaGVyZSAiYXJncy4uLiIgYXJlIHRoZSBsb3dlcmVkIGFy
Z3VtZW50cyB0byB0aGUgUGF0Y2hwb2ludCBpbnN0cnVjdGlvbi4gSW4gdGhlIG5vbi1Wb2lkIGNh
c2UKKy8vIHdlIHdpbGwgaGF2ZToKKy8vCisvLyAgICAgUGF0Y2ggJnBhdGNocG9pbnQsIHJlc3Vs
dCwgYXJncy4uLgorCitjbGFzcyBQYXRjaHBvaW50U3BlY2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNp
YWwgeworcHVibGljOgorICAgIFBhdGNocG9pbnRTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+UGF0
Y2hwb2ludFNwZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6
Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikg
b3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJv
b2wgYWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOwor
CisgICAgLy8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRk
ZW4gYnJhbmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVy
YXRlcyB0aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZ2VuZXJhdGUoQWlyOjpJbnN0JiwgQ0NhbGxIZWxlcHJzJiwgQWlyOjpHZW5lcmF0aW9u
Q29udGV4dCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1BhdGNocG9pbnRWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Bh
dGNocG9pbnRWYWx1ZTo6flBhdGNocG9pbnRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2lu
dFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgic3RhY2ttYXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50VmFsdWVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJC
M1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQ
YXRjaHBvaW50VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFBhdGNocG9pbnQ7IH0K
KworICAgIH5QYXRjaHBvaW50VmFsdWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOworCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBv
aW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3Qg
QWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBhdGNocG9p
bnQsIHR5cGUsIG9yaWdpbiwgY2hpbGRyZW4pCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzUGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGhhc2VTY29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAi
QjNWYWxpZGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VT
Y29wZTo6UGhhc2VTY29wZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkK
KyAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAg
IGlmIChzaG91bGREdW1wSVJBdEVhY2hQYWhzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGJl
Zm9yZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9
CisKKyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVm
b3JlID0gdG9DU3RyaW5nKHByb2NlZHVyZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3Bl
KCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZh
bGlkYXRlKHByb2NlZHVyZSwgbV9uYW1lLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQjNQaGFzZVNjb3BlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgUGhh
c2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6
CisgICAgUGhhc2VTY29wZShQcm9jZWR1cmUmLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhh
c2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFsaWRhdGlvbgorCitwcml2YXRlOgorICAgIFByb2Nl
ZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcg
bV9kdW1wQmVmb3JlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQaGFzZVNjb3BlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIz
QmxvY2tXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sKK30KKworUHJvY2Vk
dXJlOjp+UHJvY2VkdXJlKCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJlOjphZGRCbG9j
ayhkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBi
bG9jayA9IHN0ZDo6bWFrZV91bmlxdWU8QmFzaWNCbG9jaz4obV9ibG9ja3Muc2l6ZSgpLCBmcmVx
dWVuY3kpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxv
Y2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2
b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJs
b2NrKSk7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblByZU9y
ZGVyKCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBCbG9ja1dvcmts
aXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goYmxvY2soMCkpOworICAgIHdoaWxlIChC
YXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHJlc3VsdC5hcHBl
bmQoYmxvY2spOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29y
cygpOyBpLS07KQorICAgICAgICAgICAgd29ya2xpc3QucHVzaChibG9jay0+c3VjY2Vzc29yQmxv
Y2soaSkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitWZWN0b3I8QmFzaWNCbG9j
ayo+IFByb2NlZHVyZTo6YmxvY2tzSW5Qb3N0T3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gcmVzdWx0OworICAgIFBvc3RPcmRlckJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAg
d29ya2xpc3QucHVzaChibG9jaygwKSk7CisgICAgd2hpbGUgKEJsb2NrV2l0aE9yZGVyIGl0ZW0g
PSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsKKyAgICAg
ICAgY2FzZSBQcmVPcmRlcjoKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2hQb3N0KGl0ZW0uYmxv
Y2spOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlbS5ibG9jay0+bnVtU3VjY2Vz
c29ycygpOyBpLS07KQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goaXRlbS5ibG9jay0+
c3VjY2Vzc29yQmxvY2soaSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUG9z
dE9yZGVyOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpdGVtLmJsb2NrKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy9FTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzUHJvY2VkdXJlX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1h
bGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxv
Y2s7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQcm9jZWR1cmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorCisgICAgUHJvY2VkdXJlKCk7CisgICAgflByb2NlZHVyZSgpOworCisgICAgQmFzaWNCbG9j
ayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlw
ZSogYWRkKEFyZ3VtZW50cy4uLik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7
IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9i
bG9ja3NbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7Cisg
ICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpOgorICAgICAgICAgICAgOiBtX3Byb2NlZHVy
ZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIGl0ZXJhdG9yKFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwg
bV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dCht
X2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
ICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25l
ZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1
cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBp
bmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZXg7CisgICAgICAgIH0KKworICAgICAgICBQ
cm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07
CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAw
KTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBu
dW1CbG9ja3MoKSk7IH0KKworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRl
cigpOworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsKKworICAg
IGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29s
bGVjdGlvbihQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUo
cHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRv
ciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCk6CisgICAgICAgICAg
ICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihQ
cm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBt
X3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmFsdWUqIG9wZXJh
dG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJl
LT5ibG9jayhtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsK
KyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKwor
ICAgICAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFs
dWVzLnNpemUoKSk7IH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdOyB9Cisg
ICAgICAgIFZhbHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBh
dChpbmRleCk7IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJvY2VkdXJlJiBt
X3Byb2NlZHVyZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSB7IHJl
dHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitwcml2YXRlOgorICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxpbmVz
X2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVU
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFy
Z3VlbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2
YWx1ZShuZXcgVmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7CisgICAg
VmFsdWVUeXBlKiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoV1RG
Ojptb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQcm9j
ZWR1cmVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90S2luZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAg
ICBvdXQucHJpbnQoIkFub255bW91cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3Rh
Y2tTbG90S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBTdGFj
a1Nsb3RLaW5kIDogdWludDhfdCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0
byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVuZCB0byBl
c2NhcGUKKyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5z
IHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjaworICAgIC8vIHNs
b3QuCisgICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgY291bGQgc2hhcmUg
c3BhY2Ugd2l0aCBvdGhlciBzdGFjayBzbG90cywgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZW4ndCBs
aXZlCisgICAgLy8gYXQgdGhlIHNhbWUgdGltZS4gVGhlIGNvbXBpbGVyIHN0aWxsIGhhcyB0byBk
byBlc2NhcGUgYW5hbHlzaXMsIHNpbmNlIHRoZXNlIGNhbiBiZSBlc2NhcGVkCisgICAgLy8gZXhw
bGljaXRseSBpbiBJUi4KKyAgICBBbm9ueW1vdXMKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1N0YWNrU2xvdEtpbmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1
ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1l
dGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0g
IiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzU3RhY2tTbG90VmFsdWVfaAorI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVk
ZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CituYW1lc3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgor
CitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tT
bG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0
IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBz
bG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJf
dCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlz
IExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTdGFja1Nsb3RWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtp
bmQga2luZCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgU3RhY2tTbG90LCBwb2ludGVyKCksIG9y
aWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fa2luZChr
aW5kKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVu
c2lnbmVkIG1fYnl0ZVNpemU7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRy
X3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgKKyAgICAgICAgIntvcGFxdWUgPSAiLCBSYXdQb2ludGVyKG1fb3BhcXVlKSwgIiwgcmVw
cyA9ICIsIGxpc3REdW1wKG1fcmVwcyksCisgICAgICAgICIsIGdlbmVyYXRvciA9ICIsIFJhd1Bv
aW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBjbG9iYmVyZWQgPSAiLCBtX2Nsb2JiZXJlZCwK
KyAgICAgICAgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIn0iKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKyNpbmNsdWRlICJDQ2Fs
bEhlbHBlcnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9TaGFy
ZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVj
a1NwZWNpYWw7CitjbGFzcyBTdGFja21hcFNwZWNpYWw7CitjbGFzcyBWYWx1ZTsKKworY2xhc3Mg
U3RhY2ttYXAgeworcHVibGljOgorICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAg
ICAgLy8gVGhpcyBpcyB0aGUgVmFsdWUgY29udGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAg
IFZhbHVlKiB2YWx1ZTsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAg
ICAgU3RhY2ttYXAqIHN0YWNrbWFwOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBh
Y3R1YWwgdmFsdWUgcmVwcmVzZW50YXRpb25zIHRoYXQgd2VyZSBjaG9zZW4uCisgICAgICAgIFZl
Y3RvcjxWYWx1ZVJlcD4gcmVwczsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgcmVn
aXN0ZXJzIHRoYXQgd2VyZSB1c2VkLgorICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
OworICAgIH07CisgICAgCisgICAgdHlwZWRlZiB2b2lkIEdlbmVyYXRvckZ1bmN0aW9uKENDYWxs
SGVscGVycyYsIGNvbnN0IEdlbmVyYXRpb25QYXJhbXMmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRh
c2s8R2VuZXJhdG9yRnVuY3Rpb24+IEdlbmVyYXRvcjsKKyAgICAKKyAgICBTdGFja21hcCgpCisg
ICAgeworICAgIH0KKworICAgIC8vIFNldCBzb21lIG9wYXF1ZSBkYXRhIHRvIGlkZW50aWZ5IHRo
aXMgc3RhY2ttYXAuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgYSBTdGFja21hcC11c2luZyBWYWx1
ZQorICAgIC8vIGNhbiBiZSBkdXBsaWNhdGVkLCBhbmQgZWFjaCBkdXBsaWNhdGUgbWF5IGVuZCB1
cCBoYXZpbmcgZGlmZmVyZW50IHJlZ2lzdGVyIGFsbG9jYXRpb24uIFRoaXMKKyAgICAvLyBhbGxv
d3MgYWxsIG9mIHRob3NlIGR1cGxpY2F0ZXMgdG8gYmUgYWJsZSB0byByZWZlciBiYWNrIHRvIHdo
YXRldmVyIGhpZ2gtbGV2ZWwgZGF0YSBzdHJ1Y3R1cmVzCisgICAgLy8gd2Ugd2VyZSB1c2luZyB0
byBjcmVhdGUgdGhlIHZhbHVlLgorICAgIHZvaWQgc2V0T3BhcXVlKHZvaWQqIHBhcmFtZXRlcikK
KyAgICB7CisgICAgICAgIG1fb3BhcXVlID0gcGFyYW1ldGVyOworICAgIH0KKyAgICB2b2lkKiBv
cGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQorCisgICAgLy8gQ29udmVuaWVuY2Ug
aGVscGVycyB3aGVuIHVzaW5nIGluZGljZXMgaW5zdGVhZCBvZiBwb2ludGVycy4KKyAgICB2b2lk
IHNldE9wYXF1ZUluZGV4KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIHNldE9wYXF1ZShi
aXR3aXNlX2Nhc3Q8dm9pZCo+KGluZGV4KSk7CisgICAgfQorICAgIHNpemVfdCBvcGFxdWVJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxzaXplX3Q+KG9wYXF1ZSgpKTsgfQorCisg
ICAgLy8gQ29uc3RyYWluIGFuIGFyZ3VtZW50IHRvIHRoZSBWYWx1ZSB0aGF0IHVzZXMgdGhpcyBT
dGFja21hcC4gSW4gY2FzZSBvZiBhIFBhdGNocG9pbnQgdGhhdAorICAgIC8vIHJldHVybnMgYSB2
YWx1ZSwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSByZXN1bHQgdmFsdWUuIEluIGFsbCBvdGhl
ciBjYXNlcywgaW5kZXggemVybyByZWZlcnMKKyAgICAvLyB0byB0aGUgZmlyc3QgYXJndW1lbnQg
dG8gdGhhdCBWYWx1ZSwgZXZlbiBpZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxl
LiBGb3IgZXhhbXBsZSwKKyAgICAvLyBpbiBhIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBh
biBlcnJvciB0byBjb25zdHJhaW4gaW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBp
dAorICAgIC8vIHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdo
ZW4gdGhlIGdlbmVyYXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuCisgICAgLy8gZGVw
ZW5kIG9uIHRoZSByZXBzIGZvciB0aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2
b2lkIGNvbnN0cmFpbih1bnNpZ25lZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7
CisgICAgICAgIGlmIChpbmRleCArIDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9y
ZXBzLmdyb3coaW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9
CisKKyAgICB2b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAg
ICAgIG1fY2xvYmJlcmVkLm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIGNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lk
IHNldEdlbmVyYXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAg
ICBtX2dlbmVyYXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9y
RnVuY3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFsOwor
ICAgIGZyaWVuZCBjbGFzcyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9vcGFx
dWUgeyBudWxscHRyIH07CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRy
PEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7Cisg
ICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVy
dGhlciBkdXBsaWNhdGVkIGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBt
ZXJnZSB0aGUgdXNlZCByZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNTdGFja21hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEFpcjsKKworU3RhY2ttYXBTcGVjaWFsOjpTdGFja21hcFNwZWNpYWwo
Y29uc3QgY2hhciogbmFtZSkKKyAgICA6IFNwZWNpYWwobmFtZSkKK3sKK30KKworU3RhY2ttYXBT
cGVjaWFsOjp+U3RhY2ttYXBTcGVjaWFsKCkKK3sKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6
OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYgaW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2tt
YXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhl
IEluc3QgdGhhdCB1c2VzIHRoZSBTdGFja21hcFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVu
IHdlIGVuZCB1cCBtZXJnaW5nIHVzZWQKKyAgICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlw
bGUgcGxhY2VzLiBUaGlzIGN1cnJlbnRseSB3b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3Qg
aGF2ZSB0YWlsZHVwCisgICAgLy8gb3IgdGhpbmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50
dWFsbHkgaXQgY291bGQgYmUgYSBwcm9ibGVtLgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3Rl
cnMubWVyZ2UodXNlZFJlZ2lzdGVycyk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21h
cFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2
YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFj
a21hcCgpOworCisgICAgcmV0dXJuIHN0YWNrbWFwLT5jbG9iYmVyZWQoKTsKK30KKwordm9pZCBT
dGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRC
M0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIGNvbnN0
IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBW
YWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRo
aW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBu
dW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgPj0g
bnVtSWdub3JlZEIzQXJncyk7CisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25v
cmVkQWlyQXJncyA9PSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBu
dW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSAr
IG51bUlnbm9yZWRCM0FyZ3NdOworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQo
aSArIG51bUlnbm9yZWRBaXJBcmdzKTsKKworICAgICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNl
LCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAgIH0KK30KKworYm9vbCBT
dGFja21hcFNwZWNpYWw6OmlzVmFsaWRJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0Fy
Z3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdBcmdzLAorICAgIEluc3QmIGluc3QpCit7CisgICAg
VmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0
aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0g
bnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpID49
IG51bUlnbm9yZWRCM0FyZ3MpOworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0
YWNrbWFwKCk7CisKKyAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgLy8gRm9yIHRoZSBJbnN0
IHRvIGJlIHZhbGlkLCBpdCBuZWVkcyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1l
bnRzLgorICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFs
dWUtPmNoaWxkcmVuLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIC8vIFJlZ2FyZGxlc3Mgb2YgY29uc3RyYWludHMsIHN0YWNrbWFwcyBoYXZl
IHNvbWUgYmFzaWMgcmVxdWlyZW1lbnRzIGZvciB0aGVpciBhcmd1bWVudHMuIEZvcgorICAgIC8v
IGV4YW1wbGUsIHlvdSBjYW4ndCBoYXZlIGEgbm9uLUZQLW9mZnNldCBhZGRyZXNzLiBUaGlzIHZl
cmlmaWVzIHRob3NlIGNvbmRpdGlvbnMgYXMgd2VsbCBhcyB0aGUKKyAgICAvLyBhcmd1bWVudCB0
eXBlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51
bUlnbm9yZWRCM0FyZ3M7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hp
bGQoaSArIG51bUlnbm9yZWRCM0FyZ3MpOworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tp
ICsgbnVtSWdub3JlZEFpckFyZ3NdOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChhcmcua2lu
ZCgpKSB7CisgICAgICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGNhc2UgQXJnOjpJbW06Cisg
ICAgICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAg
ICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgICAgIGJyZWFrOyAvLyBPSworICAgICAgICBj
YXNlIEFyZzo6QWRkcjoKKyAgICAgICAgICAgIGlmIChhcmcuYmFzZSgpICE9IFRtcChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlcikgJiYKKyAgICAgICAgICAgICAgICBhcmcuYmFzZSgpICE9IFRt
cChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBBcmc6
OlR5cGUgdHlwZSA9IEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKTsKKworICAgICAg
ICBpZiAoIWFyZy5pc1R5cGUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorCisgICAgLy8gVGhlIG51bWJlciBvZiBjb25zdHJhaW50cyBoYXMgdG8gYmUgbm8gZ3JlYXRl
ciB0aGFuIHRoZSBudW1iZXIgb2YgQjMgY2hpbGRyZW4uCisgICAgQVNTRVJUKHN0YWNrbWFwLT5t
X3JlcHMuc2l6ZSgpIDw9IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkpOworCisgICAgLy8gVmVyaWZ5
IGFueSBleHBsaWNpdGx5IHN1cHBsaWVkIGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQg
aSA9IG51bUlnbm9yZWRCM0FyZ3M7IGkgPCBzdGFja21hcC0+bV9yZXBzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpKTsKKyAgICAgICAgVmFsdWVS
ZXAmIHJlcCA9IHN0YWNrbWFwLT5tX3JlcHNbaV07CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5h
cmdzW2kgLSBudW1JZ25vcmVkQjNBcmdzICsgbnVtSWdub3JlZEFpckFyZ3NdOworCisgICAgICAg
IHN3aXRjaCAocmVwLmtpbmQoKSkgeworICAgICAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAg
ICAgICAgICAvLyBXZSBhbHJlYWR5IHZlcmlmaWVkIHRoaXMgYWJvdmUuCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAg
aWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAg
ICBpZiAoYXJnICE9IFRtcChyZXAucmVnKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50YXRpb24uCisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAgICAgICAgaWYgKGFyZyAh
PSBBcmc6OmNhbGxBcmcocmVwLm9mZnNldEZyb21TUCgpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29u
c3RhbnQ6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0
YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRC
M0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIHVuc2ln
bmVkIGFyZ0luZGV4KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0
YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgdW5zaWduZWQgc3Rh
Y2ttYXBBcmdJbmRleCA9IGFyZ0luZGV4IC0gbnVtSWdub3JlZEFpckFyZ3MgKyBudW1JZ25vcmVk
QjNBcmdzOworCisgICAgaWYgKHN0YWNrbWFwQXJnSW5kZXggPj0gc3RhY2ttYXAtPm1fcmVwcy5z
aXplKCkpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlIHdhcyBubyBjb25zdHJh
aW50LgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gV2Ugb25seSBh
ZG1pdCBzdGFjayBmb3IgQW55J3MsIHNpbmNlIFN0YWNrIGlzIG5vdCBhIHZhbGlkIGlucHV0IGNv
bnN0cmFpbnQsIGFuZCBTdGFja0FyZ3VtZW50CisgICAgLy8gdHJhbnNsYXRlcyB0byBhIENhbGxB
cmcgaW4gQWlyLgorICAgIGlmIChzdGFja21hcC0+bV9yZXBzW3N0YWNrbWFwQXJnSW5kZXhdLmtp
bmQoKSA9PSBBbnkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwoCisgICAgR2VuZXJhdGlv
bkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBJbnN0JiBpbnN0LCBW
ZWN0b3I8VmFsdWVSZXA+JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdu
b3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQocmVwRm9yQXJnKGNvbnRleHQuY29kZSwgaW5zdC5hcmdzW2ldKSk7Cit9CisKK1ZhbHVlUmVw
IFN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKENvZGUmIGNvZGUsIGNvbnN0IEFyZyYgYXJnKQor
eworICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgIGNhc2UgVG1wOgorICAgICAgICByZXR1
cm4gVmFsdWVSZXA6OnJlZyhhcmcucmVnKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIElt
bToKKyAgICBjYXNlIEltbTY0OgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OmNvbnN0YW50KGFy
Zy52YWx1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBZGRyOgorICAgICAgICBpZiAo
YXJnLmJhc2UoKSA9PSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgIHJl
dHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKGFyZy5i
YXNlKCkgPT0gTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAg
cmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIFZhbHVlUmVwKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1N0YWNrbWFwU3BlY2lhbF9oCisjZGVmaW5lIEIzU3RhY2ttYXBTcGVjaWFsX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNT
dGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBp
cyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRoYXQgaGF2ZSBzdGFja21hcHMuIE5vdGUgdGhh
dCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAgYnkKKy8vIGFza2luZyBmb3IgdGhlIEluc3QncyBv
cmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3RzIGRvbid0IG5lZWQgdG8gZXZlbiBob2xkIGEgcmVm
ZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAuCisKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbCA6IHB1
YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGljOgorICAgIFN0YWNrbWFwU3BlY2lhbCgpOworICAg
IHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCByZXBv
cnRVc2VkUmVnaXN0ZXJzKEFpcjo6SW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7
CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBv
dmVycmlkZTsKKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG92ZXJyaWRlIGdlbmVy
YXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4gV2UgaGF2ZSBtYW55IHNvbWUKKyAg
ICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCisKKyAgICB2b2lkIGZvckVhY2hB
cmdJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFp
cjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOworICAgIGJvb2wgaXNWYWxpZEltcGwoCisgICAg
ICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdz
LAorICAgICAgICBBaXI6Okluc3QmKTsKKyAgICBib29sIGFkbWl0c1N0YWNrSW1wbCgKKyAgICAg
ICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3Ms
CisgICAgICAgIEFpcjo6SW5zdCYpOworCisgICAgLy8gQXBwZW5kcyB0aGUgcmVwcyBmb3IgdGhl
IEluc3QncyBhcmdzLCBzdGFydGluZyB3aXRoIG51bUlnbm9yZWRBcmdzLCB0byB0aGUgZ2l2ZW4g
dmVjdG9yLgorICAgIHZvaWQgYXBwZW5kUmVwc0ltcGwoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYs
IHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBBaXI6Okluc3QmLCBWZWN0b3I8VmFsdWVSZXA+Jik7
CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVwRm9yQXJnKEFpcjo6Q29kZSYsIGNvbnN0IEFpcjo6
QXJnJik7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9u
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25f
aAorI2RlZmluZSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBnZW5lcmlj
IHdyYXBwZXIgYXJvdW5kIGxpc3RzIG9mIGZyZXF1ZW50ZWQgYmxvY2tzLCB3aGljaCBnaXZlcyB5
b3UganVzdCB0aGUgYmxvY2tzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrLCB0eXBl
ZGVmIFN1Y2Nlc3Nvckxpc3Q+CitjbGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsKK3B1YmxpYzoK
KyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisgICAgICAgIDog
bV9saXN0KGxpc3QpCisgICAgeworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayom
IGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAg
QmFzaWNCbG9jayogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGlu
ZGV4KTsgfQorICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1
cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAg
ICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0
ZXJhdG9yKFN1Y2Nlc3NvckNvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAg
ICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2lu
ZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiYg
b3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVj
dGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lk
bmV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgc2l6ZV90IG1f
aW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3Io
dGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBz
aXplKCkpOyB9CisKK3ByaXZhdGU6CisgICAgU3VjY2Vzc29yTGlzdCYgbV9saXN0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3ZvaWQgU3dpdGNoQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChtX2Nhc2VWYWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAobV90
YXJnZXQpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hDYXNlX2gKKyNkZWZpbmUgQjNT
d2l0Y2hDYXNlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50
ZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRjaENhc2UoKQorICAgIHsKKyAgICB9CisK
KyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVlLCBjb25zdCBGcmVxdWVudGVkQmxvY2sm
IHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VWYWx1ZShjYXNlVmFsdWUpCisgICAgICAgICwgbV90
YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFtX3RhcmdldDsgfQorCisgICAgaW50NjRfdCBjYXNlVmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1ZTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayB0YXJn
ZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuYmxvY2soKTsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludDY0X3QgY2FzZVZh
bHVlOworICAgIEZyZXF1bnRlZEJsb2NrIHRhcmdldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3dpdGNo
Q2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbGR1
ZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK1N3aXRjaFZhbHVlOjp+U3dpdGNoVmFsdWUoKQoreworfQor
CitTd2l0Y2hDYXNlIFN3aXRjaFZhbHVlOjpyZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KQorewor
ICAgIFN3aXRjaENhc2UgcmVzdWx0ID0gbV9zdWNjZXNzb3JzW2luZGV4XTsKKyAgICBtX3N1Y2Nl
c3NvcnNbaW5kZXhdID0gbV9zdWNjZXNzb3JzLmxhc3QoKTsKKyAgICBtX3N1Y2Nlc3NvcnMucmVt
b3ZlTGFzdCgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFw
cGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3Nv
cnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nl
c3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOworICAgIG1fdmFsdWVzLmFw
cGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVt
cE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRlc3RydWN0aXZl
bHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisgICAgb3V0LnByaW50KGxp
c3REdW1wKCp0aGlzKSwgIiwgZmFsbFRocm91Z2ggPSAiLCBmYWxsVGhyb3VnaCgpKTsKK30KKwor
U3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBC
YXNpY0Jsb2NrKiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xWYWx1ZShpbmRleCwgU3dpdGNo
LCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVibGljIENvbnRyb2xWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUg
PT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFsdWUoKTsKKworICAgIC8vIG51bUNhc2VWYWx1
ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgorICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1ZXMo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKworICAgIC8vIFRoZSBzdWNjZXNz
b3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2NF90
IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaV07IH0K
KyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQorCisgICAgRnJlcXVlbnRlZEJsb2NrIGZhbGxUaHJvdWdoKCkgY29u
c3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYg
ZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtQ2FzZVZhbHVlcygpOyB9CisgICAgU3dpdGNo
Q2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTd2l0
Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nlc3NvcihpbmRleCkpOworICAgIH0KKyAgICBT
d2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2gobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvcihTd2l0Y2hWYWx1ZSYgc3dpdGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dpdGNoVmFsdWUpCisgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFN3aXRjaENhc2Ugb3Bl
cmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2lu
ZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIu
bV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3dpdGNoVmFs
dWUqIG1fc3dpdGNoOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAgICBp
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAg
IGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9
CisKKyAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIGNhc2UgYW5kIHJlb3JkZXJzIHRoaW5ncyBhIGJp
dC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0aGUgY2FzZXMgZnJvbSAwIHRvIE4sCisgICAgLy8gdGhl
biB5b3UgY2FuIGtlZXAgaXRlcmF0aW5nIGFmdGVyIHRoaXMgc28gbG9uZyBhcyB5b3UgcmV2aXNp
dCB0aGlzIHNhbWUgaW5kZXggKHdoaWNoIHdpbGwgbm93CisgICAgLy8gY29udGFpbiBzb21lIG90
aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJlbW92ZXMgdGhlIGNhc2UgdGhhdCB3YXMgcmVtb3ZlZC4K
KyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgpOworCisgICAgdm9pZCBh
cHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpOworCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTd2l0Y2hWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgQmFzaWNCbG9jayogZmFsbFRocm91Z2gpOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5
cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNUeXBlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBz
d2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJ
bnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnBy
aW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAg
IG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlw
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgeworICAgIFZvaWQsCisgICAgSW50
MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxpbmUgYm9vbCBpc0ludChUeXBl
IHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9PSBJbnQ2NDsKK30K
KworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0g
RG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyKCkgY29uc3QKK3sKKyAgICBpZiAoc2l6
ZW9mKHZvaWQqKSA9PSA0KQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2Ns
YXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1
ZTo6flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0YShQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiXiIsIG1fcGhpLT5pbmRl
eCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmlu
ZSBCM1Vwc2lsb25WYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVXBzaWxv
blZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9CisKKyAgICB+VXBz
aWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkgY29uc3QgeyByZXR1cm4gbV9waGk7IH0K
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAg
IFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVl
LCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwg
dmFsdWUpCisgICAgICAgICwgbV9waGkocGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVl
LT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0KKworICAgIFZhbHVlKiBtX3BoaTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVc2VDb3VudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitVc2VDb3VudHM6OlVzZUNvdW50cyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICA6
IG1fY291bnRzKHByb2NlZHVyZS52YWx1ZXMoKS5zaXplKCkpCit7CisgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiBwcm9jZWR1cmUudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgIG1fY291bnRzW2NoaWxkXSsrOworICAg
IH0KK30KKworVXNlQ291bnRzOjp+VXNlQ291bnRzKCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNV
c2VDb3VudHNfaAorI2RlZmluZSBCM1VzZUNvdW50c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgVXNl
Q291bnRzIHsKK3B1YmxpYzoKKyAgICBVc2VDb3VudHMoUHJvY2VkdXJlJik7CisgICAgflVzZUNv
dW50cygpOworCisgICAgdW5zaWduZWQgb3BlcmF0b3JbXShWYWx1ZSogdmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9jb3VudHNbdmFsdWVdOworICAgIH0KK3ByaXZhdGU6Cisg
ICAgSW5kZXhNYXA8VmFsdWUsIHVuc2lnbmVkPiBtX2NvdW50czsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
VXNlQ291bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2Vk
dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2Ugewor
CitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihQcm9jZWR1cmUmIHBy
b2NlZHVyZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAg
ICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgbV93aGVuKHdoZW4pCisgICAg
ICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBW
QUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWls
KF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9D
U3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2b2lkIHJ1bigp
CisgICAgeworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7CisgICAgICAgIEhh
c2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVl
SW5CbG9jazsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUp
IHsKKyAgICAgICAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICAgICAgZm9yIChWYWx1
ZSogdmFsdWUgOiAqYmxvY2spCisgICAgICAgICAgICAgICAgdmFsdWVJbkJsb2NrLmFkZCh2YWx1
ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJl
LnZhbHVlcygpKQorICAgICAgICAgICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsKKworICAgICAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCisgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisKKyAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1
ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZUluUHJvYy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4iLCBwb2ludGVy
RHVtcChjaGlsZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoCisg
ICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpi
bG9jaywgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogRXhwYW5kIHRoaXMgdmFsaWRhdGlv
biBwaGFzZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDQ4MAorICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZhaWwoCisgICAgICAgIGNv
bnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24s
IGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsK
KyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJCMyBWQUxJREFU
SU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9u
LCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBv
dXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4p
CisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7
CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAg
fQorCisgICAgICAgIG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1
bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQmVmb3JlICIsIHdoZW4sICI6XG4i
KTsKKyAgICAgICAgICAgIG91dC5wcmludChtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAg
ICAgIG91dC5wcmludCgiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIG91dC5wcmlu
dChtX3Byb2NlZHVyZSk7CisKKyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAg
ICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVu
Y3Rpb24sIGNvbmRpdGlvbik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIFBy
b2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVmb3JlOworfTsK
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoUHJvY2VkdXJlJiBw
cm9jZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCit7Cisg
ICAgVmFsaWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUsIHdoZW4sIGR1bXBCZWZvcmUpOworICAg
IHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
aWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWxpZGF0ZV9oCisjZGVmaW5lIEIz
VmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUm
LCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51
bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhbHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZh
bHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlz
IGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVy
IFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFs
dWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVu
IHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhl
biB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWdu
ZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4g
b3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsK
KyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKyAgICB2b2lkKiBt
aXNjID0gdGhpcy0+bWlzYzsKKworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5
cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIChp
bmRleCwgSWRlbnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOworCisgICAgdGhpcy0+b3duZXIg
PSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworICAgIHRoaXMt
Pm1pc2MgPSBtaXNjOworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aE5vcCgpCit7CisgICAg
dW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIE9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsK
KyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworICAgIFZhbHVlKiByZXBsYWNl
bWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworICAgIHZvaWQqIG1pc2MgPSB0aGlzLT5taXNjOwor
CisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSAoaW5kZXgsIE5v
cCwgVm9pZCwgb3JpZ2luKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+
cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKKyAgICB0aGlzLT5taXNjID0gbWlzYzsKK30KKwor
dm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAi
ID0gIiwgbV9vcGNvZGUpOworCisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVy
IGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJl
YW0gc3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJp
bmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOworCisgICAgb3V0LnByaW50KCIpIik7Cit9
CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK2ludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50
NjQoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFZhbHVl
OjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVG
b3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgor
ICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2Fz
ZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhv
cjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNh
c2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAg
ICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgor
ICAgICAgICByZXR1cm4gcG9pbnRlcigpOworICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0
MTY6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFs
OgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExl
c3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNh
c2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAg
ICAgICAgcmV0dXJuIEludDMyOworICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgor
ICAgICAgICByZXR1cm4gSW50NjQ7CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgor
ICAgICAgICByZXR1cm4gRG91YmxlOworICAgIGNhc2UgTm9wOgorICAgICAgICByZXR1cm4gVm9p
ZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1ZhbHVlX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2lu
Y2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBWYWx1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFsdWUpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKiwg
Mz4gQWRqYWNlbmN5TGlzdDsKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0g
IkAiOworCisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUpIHsgcmV0dXJuIHRydWU7IH0K
KworICAgIHZpcnR1YWwgflZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIG9wY29kZSBpcyBp
bW11dGFibGUsIGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZhbHVlcyB3aXRoIGlkZW50aXR5LgorICAg
IE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorCisgICAgT3JpZ2lu
IG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgCisgICAgVmFsdWUqJiBj
aGlsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKyAgICBW
YWx1ZSogY2hpbGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5k
ZXhdOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBlIHVzaW5nIHRoZSBvcGNvZGUu
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICAvLyBUaGlz
IGlzIHVzZWZ1bCB3aGVuIGxvd2VyaW5nLiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IHZhbGlkIGZv
ciBub24tdm9pZCB2YWx1ZXMuCisgICAgQWlyOjpBcmc6OlR5cGUgYWlyVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIEFyZzo6QXJnOjp0eXBlRm9yQjNUeXBlKHR5cGUoKSk7IH0KKworICAgIEFkamFjZW5j
eUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGph
Y2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAg
IHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdpdGhO
b3AoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVl
cER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBjYXN0
IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92aWRl
ZCB0aGF0IHdlIGhhdmUgYQorICAgIC8vIEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86Cisg
ICAgLy8KKyAgICAvLyBpZiAoQXJndW1lbnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1ZS0+
YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkgeworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9Cisg
ICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAhPSBB
cmd1bWVudFJlZy4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisgICAg
Ly8gaWYgVDo6YWNjZXB0cyhvcGNvZGUoKSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBj
b25zdCBUKiBhcygpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKKyAg
ICBpbnQzMl90IGFzSW50MzIoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0ludDY0KCkgY29u
c3Q7CisgICAgaW50NjRfdCBhc0ludDY0KCkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludCgpIGNv
bnN0OworICAgIGludDY0X3QgYXNJbnQoKSBjb25zdDsKKyAgICBib29sIGlzSW50KGludDY0X3Qg
dmFsdWUpIGNvbnN0OworCisgICAgYm9vbCBoYXNEb3VibGUoKSBjb25zdDsKKyAgICBkb3VibGUg
YXNEb3VibGUoKSBjb25zdDsKKworICAgIFN0YWNrbWFwKiBzdGFja21hcCgpOworCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAg
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5z
dGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUuCisgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVz
IHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBt
X29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmln
aW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4u
LiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhl
IHR5cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVuOgorICAgIGV4
cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9y
aWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29k
ZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3Jp
Z2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVz
IHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGls
ZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBm
aXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5k
ZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9y
KG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAg
ICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0K
KyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhl
aXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFr
ZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAg
ICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwg
bnVsbHB0cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAg
Ly8gVXNlIHRoaXMgZm9ybSBmb3IgdmFyYXJncy4KKyAgICBleHBpY2l0IFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFk
amFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAg
ICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1f
b3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgIHsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQp
OworCisgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0
IGJpdHMuCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAg
VHlwZSBtX3R5cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxp
c3QgbV9jaGlsZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0
ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0
ciB9OyAvLyB1c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorfTsKKworY2xh
c3MgRGVlcFZhbHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVlRHVtcChWYWx1ZSogdmFs
dWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSkK
KyAgICAgICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFZhbHVl
KiBtX3ZhbHVlOworfTsKKworRGVlcFZhbHVlRHVtcCBkZWVwRHVtcChWYWx1ZSogdmFsdWUpCit7
CisgICAgcmV0dXJuIERlZXBWYWx1ZUR1bXAodmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNkZWZpbmUg
QjNWYWx1ZUlubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ2hl
Y2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25z
dDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKyNpbmNsdWRlICJC
M1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUKiBWYWx1ZTo6YXMo
KQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50MzIo
KSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1ZT4oKTsKK30KKworaW50MzJf
dCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4o
KS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAoreworICAgIHJl
dHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKwor
Ym9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSB8fCBo
YXNJbnQ2NCgpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGhhc0ludDMyKCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9CisKK2Jvb2wgVmFsdWU6
OmlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludCgpICYmIGFz
SW50KCkgPT0gdmFsdWU7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKworZG91YmxlIFZhbHVlOjph
c0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91YmxlVmFsdWU+KCktPnZh
bHVlKCk7Cit9CisKK1N0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQoreworICAgIGlmIChDaGVj
a1ZhbHVlKiBjaGVjayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmY2hlY2st
PnN0YWNrbWFwOworICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhczxQYXRj
aHBvaW50VmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2ludC0+c3RhY2ttYXA7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVJbmxpbmVzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9p
ZCBWYWx1ZVJlcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChtX2tpbmQpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBOb25lOgorICAgIGNh
c2UgU29tZVJlZ2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAg
ICAgICAgb3V0LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnBy
aW50KCIoIiwgb2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBW
YWx1ZVJlcDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFs
dWVSZXA6OkFueToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21l
UmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVy
OgorICAgICAgICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0
LnByaW50KCJTdGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVl
UmVwOjpDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1ZhbHVlUmVwX2gKKyNkZWZpbmUgQjNWYWx1ZVJlcF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0byBk
ZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQgYm90
aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNlbnRh
dGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBzYXkK
Ky8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQgcmVw
cmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQuCisK
K2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFu
eSByZXByZXNlbnRhdGlvbi4gQXMgYW4KKyAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2UgZm9y
IHRoZQorICAgICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBhIENoZWNr
TXVsLgorICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRp
b24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3Vs
ZCBiZSBhCisgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEK
KyAgICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAor
ICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIz
IHBpY2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJl
cHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0
J3Mgbm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAg
IFN0YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZv
cmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAg
ICAgICAgLy8gb2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFz
IGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50
LWZvbGRlZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBW
YWx1ZVJlcCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhw
bGljaXQgVmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAg
ICAgICwgbV92YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZh
bHVlUmVwIHJlZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7
CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21G
UCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICB9
CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9t
U1ApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBTdGFja0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21T
UDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IENvbnN0YW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgIH0KKworICAg
IHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gVmFsdWVSZXAoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAg
fQorCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisg
ICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lz
dGVyKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKwor
ICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90Piht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90
IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQp
OworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFs
dWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZh
bHVlKCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Zh
bHVlUmVwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRl
cm5fbWF0Y2hlci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2Vu
ZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUwNSBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKworJHZhckluZGV4ID0gMAor
ZGVmIG5ld1ZhcgorICAgICR2YXJJbmRleCArPSAxCisgICAgIl90bXAjeyR2YXJJbmRleH0iCitl
bmQKKworY2xhc3MgUHJvZHVjdGlvbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpuYW1lLCA6
dmFyTmFtZSwgOmFub255bW91cywgOm9wY29kZSwgOmNoaWxkcmVuCisKKyAgICBkZWYgaW5pdGlh
bGl6ZShvcmlnaW4sIG5hbWUsIG9wY29kZSwgY2hpbGRyZW4pCisgICAgICAgIEBvcmlnaW4gPSBv
cmlnaW4KKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBhbm9ueW1vdXMgPSAobmFtZSA9
PSBuaWwgb3IgbmFtZSA9fiAvXEFcJChbMC05XSspXFovKQorICAgICAgICBAdmFyTmFtZSA9IEBh
bm9ueW1vdXMgPyBuZXdWYXIgOiBuYW1lID1+IC9cQVwkLyA/ICQnIDogbmFtZQorICAgICAgICBA
b3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIEBjaGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4g
OiBbXQorICAgIGVuZAorCisgICAgZGVmIGhhc09wY29kZQorICAgICAgICBvcGNvZGUgIT0gbmls
CisgICAgZW5kCisKKyAgICBkZWYgZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICBjaGlsZHJl
bi5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBjaGlsZCwgaW5kZXggfAorICAgICAg
ICAgICAgeWllbGQgdmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLm5hbWUsCisgICAg
ICAgICAgICAgICAgICBjaGlsZC52YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQuYW5v
bnltb3VzID8gKGNoaWxkLm9wY29kZSA/IDphbm9uSW50ZXJuYWwgOiA6YW5vbk9wZXJhbmQpIDog
KGNoaWxkLm9wY29kZSA/IDppbnRlcm5hbCA6IDpvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAg
IGluZGV4CisgICAgICAgICAgICBjaGlsZC5lYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIH0K
KyAgICBlbmQKK2VuZAorCitjbGFzcyBNYXRjaGVyCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpw
cm9kdWN0aW9ucworCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgcHJvZHVjdGlvbnMpCisgICAg
ICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucworICAg
IGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxp
bmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikK
KyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5l
TnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9
OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3Jl
YWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBz
dHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmlu
ZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNf
YT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisg
ICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5k
CisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29y
aWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAg
ICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7
dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0
b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxl
eChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQor
ICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVt
cHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAg
ICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAg
ICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAg
ICB3aGVuIC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKS8KKyAgICAgICAgICAgIHJlc3Vs
dCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAg
ICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9y
ZQorICAgICAgICB3aGVuIC9cQVs9KCksXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5u
ZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisg
ICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBs
aW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVj
dH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisg
ICAgcmVzdWx0CitlbmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICAjIFdlIGNhbiBleHRl
bmQgdGhpcyBhcyB3ZSBhZGQgbW9yZSBrZXl3b3Jkcy4gTGlrZSwgd2UgbWlnaHQgd2FudCAiaW5j
bHVkZSIgZXZlbnR1YWxseS4KKyAgICB0b2tlbiA9fiAvXEEoKG1hdGNoZXIpKVxaLworZW5kCisK
K2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBW2EtekEtWjAtOSRdKFth
LXpBLVowLTlfXSopXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBh
cnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5z
ID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAg
ZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZh
bmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNv
bW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpj
b21tZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAg
ICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZp
bGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5k
CisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVk
ICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAg
IGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2Vu
LnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNz
IGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0Cisg
ICAgZW5kCisKKyAgICBkZWYgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwcm9kdWN0aW9u
KQorICAgICAgICBpZiBuYW1lID09IHByb2R1Y3Rpb24udmFyTmFtZQorICAgICAgICAgICAgcGFy
c2VFcnJvcigiQ2hpbGQgcHJvZHVjdGlvbiBoYXMgc2FtZSBuYW1lIGFzIHBhcmVudCBwcm9kdWN0
aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50
cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICBwYXJzZUVy
cm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBwcm9kdWN0
aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgY29u
c3VtZSgibWF0Y2hlciIpCisKKyAgICAgICAgbWF0Y2hlck5hbWUgPSBjb25zdW1lSWRlbnRpZmll
cgorCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKworICAgICAgICBsb29wIHsKKyAgICAgICAg
ICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgIyBXZSBt
aWdodCB3YW50IHRvIHN1cHBvcnQgImluY2x1ZGUiLiBJZiB3ZSBkaWQgdGhhdCwgaXQgd291bGQg
Z28gaGVyZS4KKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwYXJzZVByb2R1Y3Rpb24KKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVu
dHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAgICAgICBwYXJzZUVycm9y
KCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAg
cHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgICAgICB9CisKKyAgICAgICAgTWF0Y2hlci5u
ZXcobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlUHJv
ZHVjdGlvbgorICAgICAgICBvcmlnaW4gPSB0b2tlbi5vcmlnaW4KKyAgICAgICAgbmFtZSA9IGNv
bnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgaWYgdG9rZW4gPT0gIj0iCisgICAgICAgICAgICBj
b25zdW1lKCI9IikKKyAgICAgICAgICAgIG9wY29kZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAg
ICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgZWxzaWYgdG9rZW4gPT0gIigiCisgICAgICAg
ICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgICAgIG9wY29kZSA9IG5hbWUKKyAgICAgICAgICAg
IG5hbWUgPSBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFByb2R1Y3Rpb24u
bmV3KG9yaWdpbiwgbmFtZSwgbmlsLCBuaWwpCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAg
ICAgcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlm
IHRva2VuID09ICIpIgorCisgICAgICAgICAgICBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMs
IHBhcnNlUHJvZHVjdGlvbikKKworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisg
ICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgfQorCisgICAgICAgICMgQWR2YW5jZSBh
ZnRlciB0aGUgIikiCisgICAgICAgIGFkdmFuY2UKKworICAgICAgICBQcm9kdWN0aW9uLm5ldyhv
cmlnaW4sIG5hbWUsIG9wY29kZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCitlbmQKKworZmlsZU5h
bWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoZmlsZU5hbWUpLCBm
aWxlTmFtZSkKK21hdGNoZXIgPSBwYXJzZXIucGFyc2UKKworY2xhc3MgU3ViTWF0Y2gKKyAgICBh
dHRyX3JlYWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0aW9ucworICAgIAorICAgIGRlZiBpbml0aWFs
aXplKGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBpbmRleE1hcCA9IFtdCisgICAg
ICAgIEBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAg
ICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwIDw8IGluZGV4CisgICAgICAgICAg
ICBAcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQK
KworICAgIGRlZiBtYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICBpbmRleExpc3QubWFw
IHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwW2luZGV4XQor
ICAgICAgICB9CisgICAgZW5kCitlbmQKKworRmlsZS5vcGVuKCJCMyIgKyBtYXRjaGVyLm5hbWUg
KyAiLmgiLCAidyIpIHsKKyAgICB8IG91dHAgfAorCisgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0
ZWQgYnkgZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxlTmFtZX0gLS0gZG8g
bm90IGVkaXQhIgorCisgICAgb3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRjaGVyLm5hbWV9X2gi
CisgICAgb3V0cC5wdXRzICIjZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgCisgICAg
b3V0cC5wdXRzICIjaW5jbHVkZSBcIkIzVmFsdWUuaFwiIgorICAgIAorICAgIG91dHAucHV0cyAi
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0
ZTx0eXBlbmFtZSBBZGFwdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgcnVuI3ttYXRjaGVyLm5h
bWV9KFZhbHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91dHAucHV0cyAieyIK
KworICAgICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBj
b2RlLCBiZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91CisgICAgIyB3YW50
IHRvIHNlZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGluIGEgZ29vZCB0ZXh0
IGVkaXRvciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlvdS4KKworICAgICMg
SW4gb2RkIHNpdHVhdGlvbnMsIHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2YWx1ZS4gVGVsbCB0
aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgIG91dHAucHV0cyAiVU5VU0VE
X1BBUkFNKF92YWx1ZSk7IgorICAgICAgICAKKyAgICAjIFRoaXMganVzdCBwcm90ZWN0cyB0aGUg
Y2FsbGVyIGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25zIGhhdmluZyBkaWZm
ZXJlbnQgbGVuZ3Rocy4KKyAgICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBwcm9k
dWN0aW9ucykKKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVh
Y2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAg
ICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVsw
XV0uY2hpbGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAg
ICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAg
ICB9CisKKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0
IHwKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uY2hpbGRy
ZW4ubGVuZ3RoCisgICAgICAgICAgICBpZiBsZW5ndGggPiAwCisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGlsZHJlbi5zaXplKCkgPj0gI3tsZW5ndGh9KSB7
IgorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExp
c3QKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRoaXMgZWZm
aWNpZW50bHkgc2VsZWN0cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgcHJvZHVjdGlvbnMuIEl0IGFz
c3VtZXMgdGhhdCBwcm9kdWN0aW9ucworICAgICMgYXJlIG5vdCBkdXBsaWNhdGVkLiBJdCB5aWVs
ZHMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBhbmQgdGhlIGNvcm91dGluZSBp
cworICAgICMgcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIHNwZWNpZmljIGNvZGUgZm9yIHRoYXQg
cHJvZHVjdGlvbi4gVGhlIGNvcm91dGluZSBpcyBnaXZlbiBsaXN0cyBvZgorICAgICMgaW5kaWNl
cyBvZiBwb3NzaWJseS1tYXRjaGluZyBwcm9kdWN0aW9ucy4KKyAgICBkZWYgbWF0Y2hQcm9kdWN0
aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICAjIEZpcnN0LCBzcGxp
dCB0aGUgcHJvZHVjdGlvbnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJvZHVjdGlvbnMgd2l0aCBhbiBv
cGNvZGUgYW5kIHByb2R1Y3Rpb25zCisgICAgICAgICMgd2l0aG91dCBvbmUuCisgICAgICAgIGlu
ZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAg
ICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3Rz
Wy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmhhc09wY29kZSA9PSBwcm9k
dWN0aW9uLmhhc09wY29kZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhd
CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgIyBOb3csIGVt
aXQgcGF0dGVybiBtYXRjaGluZyBjb2RlLiBXZSBkbyBpdCBkaWZmZXJlbnRseSBmb3IgbGlzdHMg
d2l0aCBhbiBvcGNvZGUgdGhhbiBmb3IKKyAgICAgICAgIyBsaXN0cyB3aXRob3V0IG9uZS4KKyAg
ICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAg
ICAgICAgIGlmIHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFzT3Bjb2RlCisgICAgICAgICAg
ICAgICAgIyBOb3csIHdlIHNwbGl0IHRoaXMgaW5kZXggbGlzdCBpbnRvIGdyb3VwcyBmb3IgZWFj
aCBvcGNvZGUuCisgICAgICAgICAgICAgICAgZ3JvdXBzID0ge30KKyAgICAgICAgICAgICAgICBp
bmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAg
ICAgICAgICAgICBwcm9kdWN0aW9uID0gcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICAg
ICAgICAgIGlmIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0gPDwgaW5kZXgKKyAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2Rl
XSA9IFtpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRlbWVudC4KKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5vcGNvZGUoKSkgeyIKKyAgICAg
ICAgICAgICAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvcGNv
ZGUsIHN1YkluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e29wY29kZX06IgorICAgICAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhz
dWJJbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgICAgICBtYXRjaExlbmd0
aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBz
dWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVl
TmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRl
eExpc3QgfAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3Qo
aW5kZXhMaXN0KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9
CisgICAgZW5kCisKKyAgICAjIFRha2VzIHByb2R1Y3Rpb25zIHRoYXQgaGF2ZSB0aGUgc2FtZSBv
cGNvZGUgYW5kIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBmcm9tIHRoZW0gYmFzZWQgb24K
KyAgICAjIHRoZSBwcm9kdWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29sdW1uLgorICAgIGRlZiBtYXRj
aENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCkKKyAgICAg
ICAgaWYgY29sdW1uSW5kZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hpbGRyZW4ubGVuZ3RoCisgICAg
ICAgICAgICB5aWVsZCAoMC4uLihwcm9kdWN0aW9ucy5zaXplKSkudG9fYQorICAgICAgICAgICAg
cmV0dXJuCisgICAgICAgIGVuZAorCisgICAgICAgIHN1YlZhbHVlID0gbmV3VmFyCisgICAgICAg
IAorICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7c3Vi
VmFsdWV9ID0gI3t2YWx1ZU5hbWV9LT5jaGlsZCgje2NvbHVtbkluZGV4fSk7IgorCisgICAgICAg
ICMgV2UgbWF5IG5vdCB1c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwg
b3V0IGFib3V0IGl0LgorICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3N1YlZhbHVl
fSk7IgorICAgICAgICAKKyAgICAgICAgc3ViUHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucy5tYXAg
eworICAgICAgICAgICAgfCBwcm9kdWN0aW9uIHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uY2hp
bGRyZW5bY29sdW1uSW5kZXhdCisgICAgICAgIH0KKworICAgICAgICBtYXRjaFJlY3Vyc2l2ZWx5
KG91dHAsIHN1YlZhbHVlLCBzdWJQcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9k
dWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0
Y2gucHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4ICsgMSkgeworICAgICAgICAgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5k
ZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgIGVuZAorCisgICAgZGVmIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgdmFsdWVOYW1lLCBw
cm9kdWN0aW9ucykKKyAgICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHBy
b2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAjIFdl
IGFyZSBndWFyYW50ZWVkIHRoYXQgdGhpcyBpbmRleCBsaXN0IGNvbnRhaW5zIHByb2R1Y3Rpb25z
IHdpdGggdGhlIHNhbWUgb3Bjb2RlIGFuZAorICAgICAgICAgICAgIyB0aGUgc2FtZSBsZW5ndGgu
CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rp
b25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5w
cm9kdWN0aW9ucywgMCkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAg
ICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsICJf
dmFsdWUiLCBtYXRjaGVyLnByb2R1Y3Rpb25zKSB7CisgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAg
ICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAg
ICBwcm9kdWN0aW9uID0gbWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgIG91
dHAucHV0cyAieyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7cHJvZHVjdGlvbi52
YXJOYW1lfSA9IF92YWx1ZTsiCisgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA9IFtdCisg
ICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIHRyeUFyZ3VtZW50
cyA9IFtdCisgICAgICAgICAgICBudW1TY29wZXMgPSAwCisgICAgICAgICAgICBzZWVuID0ge30K
KyAgICAgICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxlIHsKKyAgICAgICAgICAgICAgICB8
IHBhcmVudFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJOYW1lLCBraW5kLCBpbmRleCB8Cisg
ICAgICAgICAgICAgICAgbG9hZEV4cHIgPSAiI3twYXJlbnRWYXJOYW1lfS0+Y2hpbGQoI3tpbmRl
eH0pIgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIHNlZW5bY2hpbGRWYXJO
YW1lXQorICAgICAgICAgICAgICAgICAgICB0bXAgPSBuZXdWYXIKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJWYWx1ZSogI3t0bXB9ID0gI3tsb2FkRXhwcn07IgorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImlmICgje3RtcH0gPT0gI3tjaGlsZFZhck5hbWV9KSB7IgorICAg
ICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgc2VlbltjaGlsZFZhck5hbWVdID0gdHJ1ZQorICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tjaGlsZFZh
ck5hbWV9ID0gI3tsb2FkRXhwcn07IgorCisgICAgICAgICAgICAgICAgICAgIGlmIGNoaWxkTmFt
ZSA9fiAvXEFcJC8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFc
JChbMC05XSspXFovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAo
I3tjaGlsZFZhck5hbWV9LT5pc0ludCgjeyQxfSkpIHsiCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3tjaGls
ZFZhck5hbWV9LT5oYXNJbnQoKSkgeyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEFy
Z3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6
YW5vbkludGVybmFsCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPDwgY2hp
bGRWYXJOYW1lIGlmIGtpbmQgPT0gOm9wZXJhbmQgb3Iga2luZCA9PSA6YW5vbk9wZXJhbmQKKyAg
ICAgICAgICAgICAgICAgICAgdHJ5QXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09
IDppbnRlcm5hbCBvciBraW5kID09IDpvcGVyYW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhZGFwdG9yLmFjY2VwdFJvb3Qo
X3ZhbHVlKSIKKyAgICAgICAgICAgIHVubGVzcyBpbnRlcm5hbEFyZ3VtZW50cy5lbXB0eT8KKyAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IuYWNjZXB0SW50ZXJuYWxzKCIgKyBp
bnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICB1bmxlc3Mgb3BlcmFuZEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMoIiYmIGFkYXB0b3IuYWNjZXB0T3BlcmFuZHMoIiArIG9wZXJhbmRBcmd1bWVudHMu
am9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wdXRz
KCImJiBhZGFwdG9yLnRyeSN7cHJvZHVjdGlvbi5uYW1lfSgiICsgdHJ5QXJndW1lbnRzLmpvaW4o
IiwgIikgKyAiKSkgeyIpCisgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0Um9v
dExhdGUoX3ZhbHVlKTsiCisgICAgICAgICAgICB1bmxlc3MgaW50ZXJuYWxBcmd1bWVudHMuZW1w
dHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdEludGVybmFsc0xh
dGUoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKTsiCisgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5PworICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2NlcHRPcGVyYW5kc0xhdGUoIiArIG9wZXJhbmRB
cmd1bWVudHMuam9pbigiLCAiKSArICIpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
b3V0cC5wdXRzICJyZXR1cm47IgorICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAg
ICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisg
ICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21hdGNoZXIubmFtZX1faCIK
K30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNp
bmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworYm9vbCBhdHRlbXB0QXNzaWdubWVu
dCgKKyAgICBTdGFja1Nsb3QqIHNsb3QsIGludHB0cl90IG9mZnNldEZyb21GUCwgY29uc3QgVmVj
dG9yPFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGZvciAoU3RhY2tTbG90KiBvdGhl
clNsb3QgOiBvdGhlclNMb3RzKSB7CisgICAgICAgIGlmICghb3RoZXJTbG90LT5vZmZzZXRGcm9t
RlAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAob2Zmc2V0RnJvbUZQICsg
c2xvdC0+Ynl0ZVNpemUoKSA+PSBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSAr
IG90aGVyU2xvdC0+Ynl0ZVNpemUoKSA+PSBvZmZzZXRGcm9tRlApCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQKG9mZnNldEZyb21G
UCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgYXNzaWduKFN0YWNrU2xvdCogc2xvdCwg
Y29uc3QgVmVjdG9yPFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGlmIChhdHRlbXB0
QXNzaWdubWVudChzbG90LCAtc2xvdC0+Ynl0ZVNpemUoKSwgb3RoZXJTbG90cykpCisgICAgICAg
IHJldHVybjsKKworICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNMb3QgOiBvdGhlclNsb3RzKSB7
CisgICAgICAgIGlmIChvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpCisgICAgICAgICAgICAmJiBh
dHRlbXB0QXNzaWdubWVudChvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpIC0gc2xvdC0+Ynl0ZVNp
emUoKSkpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxs
b2NhdGVTdGFjayhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2Rl
LCAiYWxsb2NhdGVTdGFjayIpOworCisgICAgLy8gQWxsb2NhdGUgYWxsIG9mIHRoZSBsb2NrZWQg
c2xvdHMgaW4gb3JkZXIuIFRoaXMgaXMga2luZCBvZiBhIGNyYXp5IGFsZ29yaXRobSB0byBhbGxv
dyBmb3IKKyAgICAvLyB0aGUgcG9zc2liaWxpdHkgb2Ygc3RhY2sgc2xvdHMgYmVpbmcgYXNzaWdu
ZWQgZnJhbWUgb2Zmc2V0cyBiZWZvcmUgd2UgZXZlbiBnZXQgaGVyZS4KKyAgICBBU1NFUlQoIWNv
ZGUuZnJhbWVTaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25lZExvY2tlZFN0
YWNrU2xvdHM7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlz
dDsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAg
ICAgIHN3aXRjaCAoc2xvdC0+a2luZCgpKSB7CisgICAgICAgIGNhc2UgU3RhY2tTbG90S2luZDo6
TG9ja2VkOgorICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAg
ICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgbG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6
CisgICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBBcyBhIG1hdHRlciBvZiBzYW5pdHksIHVuYXNzaWduIHRoaXMuIE1heWJlIGl0IHdvdWxk
IGJlIGdvb2QgdG8gZXZlbiBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIHJ1
bGUgdGhhdCB0aGlzIGNhbm5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgc2xvdC0+c2V0T2Zm
c2V0RnJvbUZQKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgLy8gVGhpcyBpcyBhIGZhaXJseSBleHBlbnNpdmUgbG9vcCwgYnV0IGl0
J3MgT0sgYmVjYXVzZSB3ZSdsbCB1c3VhbGx5IG9ubHkgaGF2ZSBhIGhhbmRmdWwgb2YKKyAgICAv
LyBsb2NrZWQgc3RhY2sgc2xvdHMuCisgICAgd2hpbGUgKCFsb2NrZWRTdGFja1Nsb3RzV29ya2xp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGxvY2tlZFN0YWNrU2xv
dHNXb3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBhc3NpZ24oc2xvdCwgYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzKTsKKyAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChz
bG90KTsKKyAgICB9CisKKyAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMu
IE5vdGUgdGhhdCB0aGVvcmV0aWNhbGx5IHdlIHNob3VsZCBkbyBhbiBlc2NhcGUgYW5hbHlzaXMK
KyAgICAvLyBoZXJlLiBCdXQsIGN1cnJlbnRseSBBaXIgZG9lc24ndCBzdXBwb3J0IGVzY2FwaW5n
IGEgU3RhY2tTbG90IQorICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZXNjYXBpbmcgYSBT
dGFja1Nsb3QgYW5kIGFkZCBlc2NhcGUgYW5hbHlzaXMgdG8gYWxsb2NhdGVTdGFjaygpLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0MzAKKworICAg
IGF1dG8gaXNSZWxldmFudCA9IFtdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7CisgICAgICAg
IHJldHVybiBhcmcuaXNTdGFjaygpICYmIGFyZy5zdGFja1Nsb3QoKS0+a2luZCgpID09IFN0YWNr
U2xvdEtpbmQ6OkFub255bW91czsKKyAgICB9OworCisgICAgTGl2ZW5lc3M8QXJnPiBsaXZlbmVz
cyhjb2RlKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGlu
dGVyZmVyZW5jZShjb2RlLnNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOwor
CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8
QXJnPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworCisgICAgICAgIGF1
dG8gaW50ZXJmZXJlID0gWyZdICgpIHsKKyAgICAgICAgICAgIC8vIEZvcm0gYSBjbGlxdWUgb2Yg
c3RhY2sgc2xvdHMgdGhhdCBpbnRlcmZlcmUuIEZpcnN0IGZpbmQgdGhlIGxpc3Qgb2Ygc3RhY2sg
c2xvdHMKKyAgICAgICAgICAgIC8vIHRoYXQgYXJlIGxpdmUgcmlnaHQgbm93LgorICAgICAgICAg
ICAgc2xvdHMucmVzaXplKDApOworICAgICAgICAgICAgZm9yIChBcmcgYXJnIDogbG9jYWxDYWxj
LmxpdmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1JlbWV2YW50KGFyZykpCisgICAgICAg
ICAgICAgICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tTbG90KCkpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNsb3RzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBvdXRlciA9IHNsb3RzW2ldOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgc2xvdHMuc2l6ZSgpOyArK2op
IHsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBpbm5lciA9IHNsb3RzW2ldOworCisg
ICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogZmlyc3QgPSBvdXRlcjsKKyAgICAgICAgICAg
ICAgICAgICAgU3RhY2tTbG90KiBzZWNvbmQgPSBpbm5lcjsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKGZpcnN0LT5pbmRleCgpID4gc2Vjb25kLT5pbmRleCgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgc3RkOjpzd2FwKGZpcnN0LCBzZWNvbmQpOworCisgICAgICAgICAgICAgICAgICAgIGlu
dGVyZmVyZW5jZVtmaXJzdF0uYWRkKHNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIGludGVy
ZmVyZW5jZVtzZWNvbmRdLmFkZChmaXJzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaW50ZXJmZXJlKGxvY2FsQ2FsYy5saXZlKCkpOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgp
OyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5h
dChpbnN0SW5kZXgpKTsKKyAgICAgICAgICAgIGludGVyZmVyZShsb2NhbENhbGMubGl2ZSgpKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25z
LiBBdCBpdHMgaGVhcnQgdGhpcyBhbGdvcml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNo
CisgICAgLy8gU3RhY2tTbG90IHdlIGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAg
dGhhdCBpcyBjbG9zZXN0IHRvIHplcm8gd2hpbGUgZW5zdXJpbmcgbm8KKyAgICAvLyBvdmVybGFw
IHdpdGggb3RoZXIgU3RhY2tTbG90cyB0aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KKyAgICB1bnNp
Z25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gZnJhbWVTaXplRm9yTG9ja2VkOworICAgIFZl
Y3RvcjxTdGFja1Nsb3QqPiBvdGhlclNsb3RzOworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDog
Y29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7
CisgICAgICAgICAgICAvLyBBbHJlYWR5IGFzc2lnbmVkIGFuIG9mZnNldC4KKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLy8gVGhlIHBvc3NpYmxlIGZpcnN0IGZp
dCBvZmZzZXRzIGFyZToKKyAgICAgICAgLy8gLSBmcmFtZVNpemVGb3JMb2NrZWQgLSBzbG90LT5i
eXRlU2l6ZSgpCisgICAgICAgIC8vIC0gZm9yIGFsbCBzbG90MiBpbiBpbnRlcmZlcmVuY2Vbc2xv
dF0sIHNsb3QyLT5vZmZzZXRGcm9tRlAoKSAtIHNsb3QtPmJ5dGVTaXplKCkuCisgICAgICAgIC8v
IFdlIG5lZWQgdG8gZmluZCBvbmUgb2YgdGhvc2UgdGhhdCBkb2Vzbid0IGludGVyZmVyZSB3aXRo
IGFueW9uZS4KKworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+JiBpbnRlcmZlcmluZ1Nsb3Rz
ID0gaW50ZXJmZXJlbmNlW3Nsb3RdOworICAgICAgICBvdGhlclNsb3RzLnJlc2l6ZShhc3NpZ25l
ZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpICsgaW50ZXJmZXJpbmdTbG90cy5zaXplKCkpOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLnNp
emUoKTsgKytpKQorICAgICAgICAgICAgb3RoZXJTbG90c1tpXSA9IGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90c1tpXTsKKyAgICAgICAgdW5zaWduZWQgbmV4dEluZGV4ID0gYXNzaWduZWRMb2NrZWRT
dGFja1Nsb3RzLnNpemUoKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGlu
dGVyZmVyaW5nU2xvdHMpCisgICAgICAgICAgICBvdGhlclNsb3RzW25leHRJbmRleCsrXSA9IG90
aGVyU2xvdDsKKworICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90cyk7CisgICAgfQorCisg
ICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzdGFjayB3ZSdyZSB1c2luZyBmb3Igc3RhY2sgc2xv
dHMuCisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IDA7CisgICAgZm9yIChT
dGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgZnJhbWVTaXplRm9y
U3RhY2tTbG90cyA9IHN0ZDo6bWF4KGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMsIC1zbG90LT5vZmZz
ZXRGcm9tRlAoKSk7CisKKyAgICAvLyBOb3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJn
dW1lbnQgYXJlYSB3ZSBuZWVkLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChB
cmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJn
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2Ug
dXNlIDggYnl0ZXMgb2YgdGhlIGNhbGwgYXJnLiBCdXQgdGhhdCdzIG5vdAorICAgICAgICAgICAg
ICAgICAgICAvLyBzdWNoIGFuIGF3ZXNvbWUgYXNzdW1wdGlvbi4KKyAgICAgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0
NTQKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKKyAgICAg
ICAgICAgICAgICAgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKGFyZy5vZmZzZXQoKSAr
IDgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGNvZGUuc2V0RnJhbWVTaXplKGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgKyBjb2RlLmNh
bGxBcmdBcmVhU2l6ZSgpKTsKKworICAgIC8vIEZpbmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0
byB1c2UgQWRkcidzIGluc3RlYWQgb2YgU3RhY2tTbG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcwor
ICAgIC8vIHRyYW5zZm9ybWF0aW9uIHNpbmNlIHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMg
YXJyYXkgdG8gZmlndXJlIG91dCB3aGljaCBTdGFja1Nsb3QgYW55CisgICAgLy8gb2Zmc2V0LWZy
b20tRlAgcmVmZXJzIHRvLgorCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsK
KyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFy
ZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgp
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAg
ICBhcmcgPSBBcmc6OmFkZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGFy
Zy5zdGFja1Nsb3QoKS0+b2Zmc2V0RnJvbUZQKCkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgICAgICAgICAg
ICAgYXJnID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0KCkgLSBj
b2RlLmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFsbG9jYXRlU3RhY2tf
aAorI2RlZmluZSBBaXJBbGxvY2F0ZVN0YWNrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29k
ZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFjZXMgb24gdGhlIHN0YWNr
LiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGluZGV4CisvLyBvcmRlciBh
bmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3QgZml0LgorCit2b2lkIGFs
bG9jYXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQWxsb2NhdGVTdGFja19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQXJnLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK3ZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIG91dC5w
cmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFRtcDoKKyAgICAg
ICAgb3V0LnByaW50KHRtcCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tOgorICAg
ICAgICBvdXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEltbTY0OgorICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4IiwgbV9vZmZzZXQpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBZGRyOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAg
ICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCks
ICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZGV4OgorICAgICAgICBpZiAob2Zm
c2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJp
bnQoIigiLCBiYXNlKCksICIsIiwgaW5kZXgoKSk7CisgICAgICAgIGlmIChzY2FsZSgpICE9IDEp
CisgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKKyAgICAgICAgb3V0LnByaW50
KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAgICBpZiAob2Zm
c2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50
KCIoIiwgcG9pbnRlckR1bXAoc3RhY2tTbG90KCkpLCAiKSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQob2Zmc2V0KTsKKyAgICAgICAgb3V0LnByaW50KCIoY2FsbEFyZykiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVsYXRpb25h
bENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVzQ29uZDoKKyAgICAg
ICAgb3V0LnByaW50KGFzUmVzdWx0Q29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTcGVjaWFsOgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYyNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFyZ19oCisjZGVmaW5lIEFpckFyZ19oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAiQjNU
eXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgU3BlY2lhbDsKK2NsYXNzIFN0YWNrU2xvdDsKKworLy8gVGhpcyBjbGFzcyBuYW1l
IGlzIGFsc28gaW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIHdpbGwgc2F5IGl0IGEgbG90
LiBZb3UnbGwgc2VlIGNvZGUgbGlrZQorLy8gSW5zdCguLi4sIEFyZzo6aW1tKDUpLCBBcmc6OmFk
ZHIodGhpbmcsIGJsYWgpLCAuLi4pCitjbGFzcyBBcmcgeworcHVibGljOgorICAgIC8vIFRoZXNl
IGVudW0gbWVtYmVycyBhcmUgaW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIGhhdmUgdG8g
bWVudGlvbiB0aGVtIGEgbG90LgorICAgIGVudW0gS2luZCA6IGludDhfdCB7CisgICAgICAgIElu
dmFsaWQsCisgICAgICAgIFRtcCwKKyAgICAgICAgSW1tLAorICAgICAgICBJbW02NCwKKyAgICAg
ICAgQWRkciwKKyAgICAgICAgU3RhY2ssCisgICAgICAgIENhbGxBcmcsCisgICAgICAgIEluZGV4
LAorICAgICAgICBSZWxDb25kLAorICAgICAgICBSZXNDb25kLAorICAgICAgICBTcGVjaWFsCisg
ICAgfTsKKworICAgIGVudW0gUm9sZSA6IGludDhfdCB7CisgICAgICAgIFVzZSwKKyAgICAgICAg
RGVmLAorICAgICAgICBVc2VEZWYKKyAgICB9OworCisgICAgZW51bSBUeXBlIDogaW50OF90IHsK
KyAgICAgICAgR1AsCisgICAgICAgIEZQCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNp
Z25lZCBudW1UeXBlcyA9IDI7CisKKyAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAg
IGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGVm
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNEZWYoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7
CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBj
YXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3JCM1R5cGUoQjM6OlR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZv
aWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVy
biBHUDsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAg
ICAgIHJldHVybiBHUDsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICByZXR1cm4g
RlA7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybiBHUDsKKyAgICB9CisKKyAgICBBcmcoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkKQor
ICAgIHsKKyAgICB9CisKKyAgICBBcmcoQWlyOjpUbXAgdG1wKQorICAgICAgICA6IG1fa2luZChU
bXApCisgICAgICAgICwgbV9iYXNlKHRtcCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIEFy
ZyBpbW0oaW50MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBJbW07CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tNjQoaW50
cHRyX3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gSW1tNjQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgYWRkcihBaXI6OlRtcCBi
YXNlLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQ
KCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQWRkcjsK
KyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJn
IHN0YWNrKFN0YWNrU2xvdCogdmFsdWUsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAg
ICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YWx1ZSk7CisgICAgICAg
IHJlc3VsdC5tX3NjYWxlID0gb2Zmc2V0OyAvLyBJIGtub3csIHl1Y2suCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBjYWxsQXJnKGludDMyX3Qgb2Zmc2V0
KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENh
bGxBcmc7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2NhbGUodW5zaWduZWQg
c2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToK
KyAgICAgICAgY2FzZSAyOgorICAgICAgICBjYXNlIDQ6CisgICAgICAgIGNhc2UgODoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGxvZ1NjYWxl
KHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgeworICAgICAg
ICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAyOgorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIHJldHVybiAyOwor
ICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGluZGV4KEFpcjo6VG1wIGJhc2Us
IEFpcjo6VG1wIGluZGV4LCB1bnNpZ25lZCBzY2FsZSA9IDEsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
KyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpbmRl
eC5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNWYWxpZFNjYWxlKHNjYWxlKSk7CisgICAgICAg
IEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbmRleDsKKyAgICAgICAgcmVz
dWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX2luZGV4ID0gaW5kZXg7CisgICAg
ICAgIHJlc3VsdC5tX3NjYWxlID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2NhbGUpOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBSZWxDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRp
b247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyByZXND
b25kKE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAg
ICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlc0NvbmQ7CisgICAg
ICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQor
ICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFNwZWNp
YWw7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oc3Bl
Y2lhbCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZz
ZXQgPT0gb3RoZXIubV9vZmZzZXQKKyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tp
bmQKKyAgICAgICAgICAgICYmIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYm
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleAorICAgICAgICAgICAgJiYgbV9zY2FsZSA9PSBvdGhl
ci5tX3NjYWxlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcmcmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0K
KworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAqdGhpcyAhPSBB
cmcoKTsgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2tpbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4ga2luZCgpID09IFRtcDsKKyAgICB9CisKKyAgICBib29sIGlzSW1tKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tOworICAgIH0KKworICAgIGJvb2wgaXNJ
bW02NCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OworICAg
IH0KKworICAgIGJvb2wgaXNBZGRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5k
KCkgPT0gQWRkcjsKKyAgICB9CisKKyAgICBib29sIGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTdGFjazsKKyAgICB9CisKKyAgICBib29sIGlzQ2FsbEFy
ZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IENhbGxBcmc7CisgICAg
fQorCisgICAgYm9vbCBpc0luZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5k
KCkgPT0gSW5kZXg7CisgICAgfQorCisgICAgYm9vbCBpc1JlbENvbmQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZWxDb25kOworICAgIH0KKworICAgIGJvb2wgaXNS
ZXNDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVzQ29uZDsK
KyAgICB9CisKKyAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4ga2luZCgpID09IFNwZWNpYWw7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKKyAgICB9CisKKyAg
ICBBaXI6OlRtcCB0bXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBU
bXApOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW0gfHwga2luZCgpID09
IEltbTY0KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKworICAgIHZvaWQqIHBv
aW50ZXJWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbTY0
KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CisgICAg
eworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAg
ICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisKKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0
CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6Cisg
ICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJ
bmRleDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGludDMyX3Qg
b2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCisgICAg
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9zY2FsZSk7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5k
ZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpOworICAg
IH0KKworICAgIFN0YWNrU2xvdCogc3RhY2tTbG90KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0YWNr
U2xvdCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBpbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1f
aW5kZXg7CisgICAgfQorCisgICAgdW5zaWduZWQgc2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX3NjYWxlOworICAg
IH0KKworICAgIHVuc2lnbmVkIGxvZ1NjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBsb2dTY2FsZShzY2FsZSgpKTsKKyAgICB9CisKKyAgICBBaXI6OlNwZWNpYWwqIHNwZWNpYWwo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTcGVjaWFsKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBaXI6OlNwZWNpYWwqPihtX29mZnNldCk7CisgICAgfQor
CisgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgp
ICYmIHRtcCgpLmlzR1AoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBUbXAoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAK
KyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRo
YXQgcmVxdWlyZXMgYSBHUCB2YWx1ZS4KKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2Ug
SW1tNjQ6CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAg
Y2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBSZWxD
b25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVy
biBpc0dQVG1wKCk7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNh
biBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEZQIHZhbHVlLgorICAgIGJv
b2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAg
ICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6
CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6
CisgICAgICAgIGNhc2UgQmFzZToKKyAgICAgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIGNh
c2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxvdyBJbW02NCBh
cyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2tt
YXBzLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAg
ICAgICAgcmV0dXJuIGlzRlBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFz
VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBj
YXNlIEltbToKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmln
dW91cyBmb3Igc29tZSBhcmcga2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisK
KyAgICBib29sIGlzVHlwZShUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQKCk7Cisg
ICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gaXNGUCgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNU
bXAoKSAmJiB0bXAoKS5pc0dQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNG
UFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIo
KTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0bXAoKS5mcHIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAg
IFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAg
IH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRtcCgpLmdwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAg
fQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRtcCgpLnRtcEluZGV4KCk7CisgICAgfQorCisgICAgQXJnIHdpdGhPZmZzZXQoaW50MzJfdCBh
ZGRpdGlvbmFsT2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNPZmZzZXQoKSkK
KyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQz
Ml90PihvZmZzZXQoKSwgYWRkaXRpb25hbE9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAg
ICAgICAgIHJldHVybiBhZGRyKGJhc2UoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsK
KyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgICAgIHJldHVybiBzdGFjayhzdGFja1Nsb3Qo
KSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBDYWxsQXJnOgor
ICAgICAgICAgICAgcmV0dXJuIGNhbGxBcmcob2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsK
KyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpbmRleChiYXNlKCksIGlu
ZGV4KCksIHNjYWxlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRt
cDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9y
KG1fYmFzZSk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFRoaXMgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNz
IGFyZyBpbiBhIERlZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFu
ZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3Yg
JXJheCwgKCVyY3gpCisgICAgLy8KKyAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVy
Y3guCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAo
Um9sZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAg
ICAgIGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xlLCBhcmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBH
UCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAg
IGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwg
VXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXV0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0lt
bSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQgYXNUcnVzdGVkSW1tNjQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KHBvaW50ZXJWYWx1ZSgpKTsKKyAgICB9CisjZW5kaWYKKwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFk
ZHJlc3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAg
IH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgbV9iYXNlLmdwcigpLCBtX2luZGV4Lmdw
cigpLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U2NhbGU+KGxvZ1NjYWxlKCkpLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9uYWxDb25kaXRpb24o
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uPihtX29m
ZnNldCk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBhc1Jl
c3VsdENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZXNDb25kKCkp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRp
dGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGludDY0X3QgbV9vZmZzZXQgeyAwIH07CisgICAgS2luZCBt
X2tpbmQgeyBJbnZhbGlkIH07CisgICAgaW50MzJfdCBtX3NjYWxlIHsgMSB9OworICAgIEFpcjo6
VG1wIG1fYmFzZTsKKyAgICBBaXI6OlRtcCBtX2luZGV4OworfTsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpckFyZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
YXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywg
YmxvY2spOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqIGJsb2NrKQoreworICAgIEIzOjpyZW1vdmVQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9
CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20s
IEJhc2ljQmxvY2sqIHRvKQoreworICAgIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJv
bSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFz
aWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIkJCIiwgKnRoaXMsICI6IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOwor
ICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBpbnN0LCAiXG4iKTsKK30KKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2Zy
ZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFpckJhc2ljQmxvY2tfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1
ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNs
dWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENv
ZGU7CitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMiOworCisg
ICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFz
aWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVu
dGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisgICAgCisgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgSW5zdExpc3Q6Oml0ZXJhdG9yIGJl
Z2luKCkgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5zdExpc3Q6Oml0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKyAgICBJbnN0TGlzdDo6Y29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0
TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5lbmQoKTsg
fQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQor
ICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9pbnN0c1tp
bmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1faW5zdHNbaW5k
ZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5s
YXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBhcHBlbmRJbnN0KEluc3QmJiBp
bnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3YXJkPEluc3Q+KGlu
c3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
dm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgbV9p
bnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7
CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBjYXNlIHRvIHdoaWNoIHRoZSBi
cmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIxIiBjYXNlIGlzIHRoZQorICAg
IC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGZhbGwtdGhyb3Vn
aCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9j
ayBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tp
bmRleF07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3Qm
IHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAg
U3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07
IH0KKworICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4g
c3VjY2Vzc29yQmxvY2tzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0
aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+KG1fc3VjY2Vzc29ycyk7CisgICAgfQorICAg
IFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlz
dD4gc3VjY2Vzc29yQmxvY2tzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTdWNjZXNz
b3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+KG1fc3Vj
Y2Vzc29ycyk7CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkgY29uc3Qg
eyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogcHJlZGVj
ZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4
XTsgfQorICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgUHJlZGVjZXNzb3JMaXN0JiBw
cmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAg
ICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3Jz
W2luZGV4XTsgfQorCisgICAgdm9pZCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAg
dm9pZCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgdm9pZCByZXBsYWNlUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworICAgIGZyaWVuZCBj
bGFzcyBJbnNlcnRpb25TZXQ7CisgICAgCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwg
ZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIEluc3RMaXN0
IG1faW5zdHM7CisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisgICAgUHJlZGVjZXNz
b3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2Ns
YXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1w
KEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworRGVlcEJhc2ljQmxvY2tEdW1w
IGRlZXBEdW1wKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9j
a0R1bXAoYmxvY2spOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQmFzaWNCbG9ja19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxs
U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNwZWNp
YWw6OkNDYWxsU3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0ZXJTZXQ6
OmFsbFJlZ2lzdGVycygpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0
OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3Rl
clNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3Mu
ZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKworQ0NhbGxT
cGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmZvckVh
Y2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFj
az4mIGNhbGxiYWNrKQoreworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpVc2UsIEFy
Zzo6R1ApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBxdWVyeSB0
aGUgYXJnJ3MgdHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdlCisgICAg
ICAgIC8vIHJlcXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCByZWdpc3RlcnMuCisgICAg
ICAgIGNhbGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tpXS50eXBlKCkp
OworICAgIH0KK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sK
KyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06Cisg
ICAgICAgIGlmIChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYgKHNpemVv
Zih2b2lkKikgPT0gOCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6
U3RhY2s6CisgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJnc1sx
XS5pc0dQKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9
IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3Nb
aV0uaXNSZWcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5z
dC5hcmdzW2ldID09IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuICBm
YWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjph
ZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEgY2Fu
IGJlIGEgc3RhY2sgYWRkcmVzcyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEND
YWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQm
KQoreworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0
JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIHN3
aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2Fz
ZSBBcmc6OkltbVB0cjoKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGluc3QuYXJnc1sxXS5wb2ludGVyVmFsdWUoKSksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAg
ICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJnOjpUbXA6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3Nb
MV0uYXNBZGRyZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0Nh
bGxTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJl
ZFJlZ3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNwZWNp
YWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiZnVuY3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNp
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxs
U3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxT
cGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8g
VXNlIHRoaXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBj
b3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBv
YmplY3QuIEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJl
Z2lzdGVyLCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRo
ZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1l
bnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdv
cmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24g
d2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRv
IGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0
IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSBy
ZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlm
IHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIg
dG8gYmUgbGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwg
d2hpY2hldmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGlj
IFNwZWNpYWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNp
YWwoKTsKKworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1
bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAg
Ly8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhl
IHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3Bl
Y2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcg
c2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMC4KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOwor
ICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikg
b3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhl
bHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1w
SW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBs
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJT
ZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNDYWxsU3BlY2lh
bF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGls
cy5oIgorI2luY2x1ZGUgIkNDYWxsU3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0NvZGU6OkNvZGUoKQoreworfQorCitDb2RlOjp+
Q29kZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVu
Y3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Js
b2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0
ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KHVu
c2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFja1Nsb3Qo
Ynl0ZVNpemUsIG1fc3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7CisgICAgU3RhY2tT
bG90KiByZXN1bHQgPSBzbG90LmdldCgpOworICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RGOjpt
b3ZlKHNsb3QpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTcGVjaWFsKiBDb2RlOjphZGRT
cGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQoreworICAgIG1fc3BlY2lh
bHMuYXBwZW5kKFdURjo6bW92ZShzcGVjaWFsKSk7Cit9CisKK0NDYWxsU3BlY2lhbCogQ29kZTo6
Y0NhbGxTcGVjaWFsKCkKK3sKKyAgICBpZiAoIW1fY0NhbGxTcGVjaWFsKSB7CisgICAgICAgIG1f
Y0NhbGxTcGVjaWFsID0gc3RhdGljX2Nhc3Q8Q0NhbGxTcGVjaWFsKj4oCisgICAgICAgICAgICBh
ZGRTcGVjaWFsKHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxTcGVjaWFsPigpKSk7CisgICAgfQorCisg
ICAgcmV0dXJuIG1fY0NhbGxTcGVjaWFsOworfQorCit2b2lkIENvZGU6OnJlc2V0UmVhY2hhYmls
aXR5KCkKK3sKKyAgICBCMzo6cmVzZXRSZWFjaGFiaWxpdHkobV9ibG9ja3MpOworfQorCit2b2lk
IENvZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOwor
ICAgIGlmIChudW1TdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayBzbG90
czpcbiIpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IHN0YWNrU2xvdHMoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNsb3QpLCAiXG4iKTsKKyAgICB9
CisgICAgaWYgKG51bVNwZWNpYWxzKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsczpc
biIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFscygpKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCksICJcbiIpOworICAgIH0K
KyAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCAiXG4iKTsKKyAgICBv
dXQucHJpbnQoIkNhbGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIp
OworICAgIG91dC5wcmludCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMs
ICJcbiIpOworfQorCit1bnNpZ25lZCBDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVk
IGluZGV4KSBjb25zdAoreworICAgIHdoaWxlIChpbmRleCA8IHNpemUoKSAmJiAhYXQoaW5kZXgp
KQorICAgICAgICBpbmRleCsrOworICAgIHJldHVybiBpbmRleDsKK30KKwordW5zaWduZWQgQ29k
ZTo6ZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVy
biBmaW5kRmlyc3RCbG9ja0luZGV4KGluZGV4ICsgMSk7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6
OmZpbmROZXh0QmxvY2soQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Cit7CisgICAgcmV0dXJuIGF0
KGZpbmROZXh0QmxvY2tJbmRleChibG9jay0+aW5kZXgoKSkpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDI5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckNvZGVfaAorI2RlZmluZSBBaXJDb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgor
I2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDQ2FsbFNwZWNp
YWw7CitjbGFzcyBQcm9jZWR1cmU7CisKK25hbWVzcGFjZSBBaXIgeworCisvLyBUaGlzIGlzIGFu
IElSIHRoYXQgaXMgdmVyeSBjbG9zZSB0byB0aGUgYmFyZSBtZXRhbC4gSXQgcmVxdWlyZXMgYWJv
dXQgNDB4IG1vcmUgYnl0ZXMgdGhhbiB0aGUKKy8vIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgLSBm
b3IgZXhhbXBsZSBpZiB5b3UncmUgZ2VuZXJhdGluZyAxTUIgb2YgbWFjaGluZSBjb2RlLCB5b3Ug
bmVlZCBhYm91dAorLy8gNDBNQiBvZiBBaXIuCisKK2NsYXNzIENvZGUgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKENvZGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIENvZGUoKTsKKyAgICB+Q29kZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2so
ZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3Qo
dW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxw
dHIpOworCisgICAgU3BlY2lhbCogYWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4p
OworCisgICAgLy8gVGhpcyBpcyB0aGUgc3BlY2lhbCB5b3UgbmVlZCB0byBtYWtlIGEgQyBjYWxs
IQorICAgIENDYWxsU3BlY2lhbCogY0NhbGxTcGVjaWFsKCk7CisKKyAgICBUbXAgbmV3VG1wKEFy
Zzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgQXJnOjpHUDoKKyAgICAgICAgICAgIHJldHVybiBUbXA6OmdwVG1wRm9ySW5kZXgobV9udW1H
UFRtcHMrKyk7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJldHVybiBUbXA6
OmZwVG1wRm9ySW5kZXgobV9udW1GUFRtcHMrKyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1
bnNpZ25lZCBudW1UbXBzKEFyZzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAgICAgICAgIHJldHVybiBtX251bUdQ
VG1wczsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtRlBU
bXBzOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgY2FsbEFyZ0FyZWFTaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsQXJnQXJlYVNpemU7IH0KKworICAgIC8vIFlvdSBjYW4gY2Fs
bCB0aGlzIGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gdG8gZm9yY2UgYSBtaW5pbXVtIGNhbGwgYXJn
IGFyZWEgc2l6ZS4KKyAgICB2b2lkIHJlcXVlc3RDYWxsQXJnQXJlYVNpemUodW5zaWduZWQgc2l6
ZSkKKyAgICB7CisgICAgICAgIG1fY2FsbEFyZ0FyZWFTaXplID0gc3RkOjptYXgobV9jYWxsQXJn
QXJlYVNpemUsIHNpemUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZyYW1lU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhbWVTaXplOyB9CisKKyAgICAvLyBPbmx5IHBoYXNlcyB0aGF0IGRvIHN0
YWNrIGFsbG9jYXRpb24gYXJlIGFsbG93ZWQgdG8gc2V0IHRoaXMuIEN1cnJlbnRseSwgb25seQor
ICAgIC8vIEFpcjo6YWxsb2NhdGVTdGFjaygpIGRvZXMgdGhpcy4KKyAgICB2b2lkIHNldEZyYW1l
U2l6ZSh1bnNpZ25lZCBmcmFtZVNpemUpCisgICAgeworICAgICAgICBtX2ZyYW1lU2l6ZSA9IGZy
YW1lU2l6ZTsKKyAgICB9CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJl
Z2lzdGVycygpIHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQorCisgICAgLy8gUmVj
b21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIGRlbGV0ZXMgdW5yZWFjaGFibGUgYmxvY2tzLgorICAg
IHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNp
emUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2Jsb2Nrc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIC8vIEZpbmRzIHRoZSBz
bWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID49
IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmRGaXJzdEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0OworCisgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQo
aW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPiBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kTmV4
dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0OworCisgICAgQmFzaWNCbG9jayogZmlu
ZE5leHRCbG9jayhCYXNpY0Jsb2NrKikgY29uc3Q7CisKKyAgICBjbGFzcyBpdGVyYXRvciB7Cisg
ICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpOgorICAgICAgICAgICAgOiBtX2NvZGUobnVs
bHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBpdGVyYXRvcihDb2RlJiBjb2RlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAg
IDogbV9jb2RlKCZjb2RlKQorICAgICAgICAgICAgLCBtX2luZGV4KG1fY29kZS0+ZmluZEZpcnN0
QmxvY2tJbmRleChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJhc2lj
QmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvZGUt
PmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKyso
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gbV9jb2RlLT5maW5kRmlyc3RCbG9j
a0luZGV4KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIENvZGUqIG1fY29kZTsKKyAg
ICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgbnVtQmxvY2tzKCkpOyB9CisKKyAgICBjbGFz
cyBTdGFja1Nsb3RzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBTdGFja1Nsb3Rz
Q29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQorICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZS5tX3N0YWNrU2xvdHMuc2l6ZSgpOyB9CisgICAgICAgIFN0YWNrU2xvdCog
YXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNrU2xvdHNbaV0u
Z2V0KCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6
IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBT
dGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAg
ICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBt
X2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiogbV9j
b2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMsIDAp
OyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKHRoaXMs
IHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsK
KyAgICB9OworCisgICAgU3RhY2tTbG90c0NvbGxlY3Rpb24gc3RhY2tTbG90cygpIGNvbnN0IHsg
cmV0dXJuIFN0YWNrU2xvdHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAorICAgIGNsYXNzIFNw
ZWNpYWxzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBTcGVjaWFsc0NvbGxlY3Rp
b24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2NvZGUubV9zcGVjaWFscy5zaXplKCk7IH0KKyAgICAgICAgU3BlY2lhbCogYXQodW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzW2ldLmdldCgpOyB9CisgICAg
ICAgIFNwZWNpYWwqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0
KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgor
ICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51
bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlv
biYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxl
Y3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTcGVjaWFsKiBvcGVyYXRv
ciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24t
PmF0KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IodGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTcGVjaWFs
c0NvbGxlY3Rpb24gc3BlY2lhbHMoKSBjb25zdCB7IHJldHVybiBTcGVjaWFsc0NvbGxlY3Rpb24o
KnRoaXMpOyB9CisgICAgCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3Rh
Y2tTbG90Pj4gbV9zdGFja1Nsb3RzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNC
bG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4+IG1f
c3BlY2lhbHM7CisgICAgQ0NhbGxTcGVjaWFsKiBtX2NDYWxsU3BlY2lhbCB7IG51bGxwdHIgfTsK
KyAgICB1bnNpZ25lZCBtX251bUdQVG1wcyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUZQVG1w
cyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X2NhbGxBcmdBcmVhU2l6ZSB7IDAgfTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxl
ZVNhdmVSZWdpc3RlcnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2su
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVl
bnRlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckZyZXF1ZW50ZWRC
bG9ja19oCisjZGVmaW5lIEFpckZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsK
KwordHlwZWRlZiBHZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRC
bG9jazsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckdlbmVy
YXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFj
ay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZl
cy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorI2luY2x1ZGUgIkFpclZhbGlk
YXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lk
IGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIGlmIChzaG91
bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUsICJpbml0aWFsIik7CisKKyAg
ICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4i
KTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHdoZXJl
IHdlIHJ1biBvdXIgb3B0aW1pemF0aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIC8vIEZJ
WE1FOiBBZGQgQWlyIG9wdGltaXphdGlvbnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NgorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSB3b3Vs
ZCBoYXZlIGEgcmVhbCByZWdpc3RlciBhbGxvY2F0b3IuIFRoZW4sIHdlIGNvdWxkIHVzZSBzcGls
bEV2ZXJ5dGhpbmcoKQorICAgIC8vIGluIHBsYWNlIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3Ig
b25seSBmb3IgdGVzdGluZy4KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDQ1NworICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKKworICAg
IC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBs
aWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4gSXQgYWxzbworICAgIC8vIGRvZXMgdGhpbmdz
IGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0
aGVtLgorICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUpOworCisgICAgLy8gVGhpcyB0dXJucyBh
bGwgU3RhY2sgYW5kIENhbGxBcmcgQXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJh
bWUgcG9pbnRlci4gSXQgZG9lcworICAgIC8vIHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcg
c3RhY2sgc2xvdHMuIEl0IHNob3VsZCBiZSBwcmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBz
byB3ZQorICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNo
LgorICAgIGFsbG9jYXRlU3RhY2soY29kZSk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJl
YWxseSBoYXZlIGEgY29kZSBsYXlvdXQgb3B0aW1pemF0aW9uIGhlcmUuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ3OAorCisgICAgLy8gRklYTUU6
IFdlIG5lZWQgYSBsYXRlIGxpdmVuZXNzIGFuYWx5c2lzIG92ZXIgcmVnaXN0ZXJzIHRvIGZpbGwg
aW4gdGhlCisgICAgLy8gU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycygpLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MTEKKworICAgIGlmIChz
aG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUsICJmaW5hbCIpOworCisg
ICAgaWYgKHNob3VsZER1bXBJUigpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgZ2Vu
ZXJhdGlvbjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIEFu
ZCBub3csIHdlIGdlbmVyYXRlIGNvZGUuCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7
CisgICAgaml0LmFkZFB0cihUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgR2VuZXJhdGlvbkNvbnRleHQg
Y29udGV4dDsKKyAgICBjb250ZXh0LmNvZGUgPSBjb2RlOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIENDYWxsSGVscGVyczo6TGFiZWw+IGJsb2NrTGFiZWxzKGNvZGUuc2l6ZSgpKTsKKyAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNv
ZGUuc2l6ZSgpKTsKKworICAgIGF1dG8gbGluayA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpKdW1wIGp1
bXAsIEJhc2ljQmxvY2sqIHRhcmdldCkgeworICAgICAgICBpZiAoYmxvY2tMYWJlbHNbdGFyZ2V0
XS5pc1NldCgpKSB7CisgICAgICAgICAgICBqdW1wLmxpbmtUbyhibG9ja0xhYmVsc1t0YXJnZXRd
LCAmaml0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJsb2Nr
SnVtcHNbdGFyZ2V0XS5hcHBlbmQoanVtcCk7CisgICAgfTsKKworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGJsb2NrSnVtcHNbYmxvY2tdLmxpbmsoJmppdCk7
CisgICAgICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49IDEpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBpbnN0LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKGp1bXAsICFqdW1wLmlzU2V0KCkpOworICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5vcGNvZGUoKSA9PSBKdW1wCisgICAg
ICAgICAgICAmJiBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkgPT0gY29kZS5maW5kTmV4dEJsb2Nr
KGJsb2NrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChibG9jay0+bGFz
dCgpLm9wY29kZSgpID09IFJldCkgeworICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGRvbid0
IHJlcHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1ZS9lcGlsb2d1ZSBpbiBBaXIsIHNvIHdlIG5lZWQg
dG8KKyAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlkZS4KKyAgICAgICAgICAgIGppdC5l
bWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBqdW1wID0gYmxvY2stPmxhc3QoKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAg
ICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spCisgICAgICAgICAgICBqdW1wID0gaW5zdC5nZW5l
cmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICBzd2l0Y2ggKGJsb2NrLT5udW1TdWNjZXNzb3Jz
KCkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgQVNTRVJUKCFqdW1wLmlzU2V0KCkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGxpbmso
anVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIDI6CisgICAgICAgICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9j
aygwKSk7CisgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpICE9IGNvZGUu
ZmluZE5leHRCbG9jayhibG9jaykpCisgICAgICAgICAgICAgICAgbGluayhqaXQuanVtcCgpLCBi
bG9jay0+c3VjY2Vzc29yQmxvY2soMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGxhdGVQYXRo
IDogY29udGV4dC5sYXRlUGF0aHMpCisgICAgICAgIGxhdGVQYXRoLT5ydW4oaml0LCBjb250ZXh0
KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gKKyNk
ZWZpbmUgQWlyR2VuZXJhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFz
bid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFu
eQorLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncywg
YW5kIHRoZW4gZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbgorLy8gQ0NhbGxIZWxw
ZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxsYmFja3MgaW4gdGhlIHN1
cHBsaWVkIGNvZGUgYXMgaXQgaXMKKy8vIGdlbmVyYXRpbmcuCit2b2lkIGdlbmVyYXRlKENvZGUm
LCBDQ2FsbEhlbHBlcnMmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNv
bnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2Vu
ZXJhdGlvbkNvbnRleHRfaAorI2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlv
bkNvbnRleHQgeworICAgIHR5cGVkZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVy
cyYsIEdlbmVyYXRpb25Db250ZXh0Jik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRo
RnVuY3Rpb24+IExhdGVQYXRoOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQ
YXRoczsKKyAgICBDb2RlKiBjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRp
b25Db250ZXh0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5k
bGVDYWxsZWVTYXZlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVl
U2F2ZXMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
aGFuZGxlQ2FsbGVlU2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgImhhbmRsZUNhbGxlZVNhdmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1c2VkQ2Fs
bGVlU2F2ZXM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAg
ICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRt
cEZhc3QoCisgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAg
ICAgICAvLyBBdCBmaXJzdCB3ZSBqdXN0IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAgICAgICAg
ICAgICAgICAgICB1c2VkQ2FsbGVlU2F2ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRvIHJlYWxs
eSBnZXQgdGhlIGNhbGxlZSBzYXZlcy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVyKFJlZ2lz
dGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCisgICAgY29kZS5jYWxsZWVTYXZlUmVn
aXN0ZXJzKCkgPSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworCisgICAg
c2l6ZV90IGJ5dGVTaXplID0gMDsKKyAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5mb3JF
YWNoKAorICAgICAgICBbJl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSB7CisgICAg
ICAgICAgICBieXRlU2l6ZSA9IHN0ZDo6bWF4KC1lbnRyeS5vZmZzZXQoKSwgYnl0ZVNpemUpOwor
ICAgICAgICB9KTsKKworICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFja1Ns
b3QoYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgLy8gVGhpcyBpcyBhIGJp
dCB3ZWlyZCBzaW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0
YWNrIHNsb3QgdG8gdGhpcworICAgIC8vIGFyZWEuCisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRG
cm9tRlAoLWJ5dGVTaXplKTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiBlbnRyeSkgeworICAgICAgICByZXR1cm4gQXJnOjpTdGFjayhzYXZlc0FyZWEs
IGVudHJ5Lm9mZnNldCgpICsgYnl0ZVNpemUpOworICAgIH07CisKKyAgICBJbnNlcnRpb25TZXQg
aW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIAorICAgIC8vIEZpcnN0IGluc2VydCBzYXZpbmcgY29k
ZSBpbiB0aGUgcHJvbG9ndWUuCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFj
aCgKKyAgICAgICAgWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgeworICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAwLCBlbnRyeS5yZWco
KS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIFRtcChlbnRyeS5yZWcoKSksIGFyZ0Zvcihl
bnRyeSkpOworICAgICAgICB9KTsKKyAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsK
KworICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9yZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2st
Pmxhc3QoKTsKKyAgICAgICAgaWYgKGxhc3Qub3Bjb2RlKCkgIT0gUmV0KQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFjaCgK
KyAgICAgICAgICAgIFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIHsKKyAgICAg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICBibG9j
ay0+c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLAor
ICAgICAgICAgICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKKyAg
ICAgICAgICAgIH0pOworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAg
fQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVD
YWxsZWVTYXZlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorI2RlZmluZSBBaXJIYW5kbGVDYWxsZWVT
YXZlc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgcGhhc2UgaWRl
bnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jlc3Rv
cmUgdGhlbSBpbiB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdzIGEg
bWFuZGF0b3J5IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtlIHRo
aXMgbW9yZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUKKy8v
IHBvd2VyZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5rIHdyYXBwaW5nOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4CisvLyBXZSBzaG91bGQgbWFrZSB0
aGlzIGludGVyYWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJ
bnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNp
Y0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKwordm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCit7Cisg
ICAgZXhlY3V0ZUluc2VydGlvbnMoYmxvY2stPm1faW5zdHMsIG1faW5zZXJ0aW9ucyk7Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRp
b25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2VydGlv
blNldF9oCisjZGVmaW5lIEFpckluc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIENvZGU7CisKK3R5cGVkZWYg
V1RGOjpJbnNlcnRpb248SW5zdD4gSW5zZXJ0aW9uOworCitjbGFzcyBJbnNlcnRpb25TZXQgewor
cHVibGljOgorICAgIEluc2VydGlvblNldChDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29kZShj
b2RlKQorICAgIHsKKyAgICB9CisKKyAgICBDb2RlJiBjb2RlKCkgeyByZXR1cm4gbV9jb2RlOyB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kSW5zZXJ0aW9uKFQm
JiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5kKHN0ZDo6Zm9y
d2FyZDxUPihpbnNlcnRpb24pKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0
PgorICAgIHZvaWQgaW5zZXJ0SW5zdChzaXplX3QgaW5kZXgsIEluc3QmJiBpbnN0KQorICAgIHsK
KyAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJkPElu
c3Q+KGluc3QpKSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cyYmLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIEluc3Qoc3RkOjpmb3J3YXJk
PEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZShC
YXNpY0Jsb2NrKik7CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxJ
bnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnNl
cnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFpckluc3QuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAiLCBsaXN0RHVtcChhcmdzKSwgIiAg
OyAiLCAqb3JpZ2luKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0X2gKKyNkZWZp
bmUgQWlySW5zdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgi
CisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2Fs
bEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2Ug
QWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJs
aWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBBcmdMaXN0OworCisgICAgSW5zdChPcGNv
ZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAgICA6IG9yaWdpbihvcmlnaW4pCisgICAg
ICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmln
aW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogYXJnc3sgYXJn
LCBhcmd1bWVudHMuLi4gfQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bj
b2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1
ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhhcmd1
bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2Rl
KQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4s
IEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhXVEY6Om1vdmUoYXJndW1lbnRz
KSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisg
ICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQg
dXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0
CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2Fy
cnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQorICAgIC8vIHByb2JhYmx5
IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBvbmx5IHdhbGtzIHRob3NlIFRtcHMgdGhh
dCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBpdCBkb2Vzbid0IHRlbGwgeW91IHRoZWly
IHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAg
ICAgICAgZm9yIChBcmcmIGFyZyA6IGFyZ3MpCisgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcEZh
c3QoZnVuY3Rvcik7CisgICAgfQorCisgICAgdHlwZWRlZiB2b2lkIEVhY2hBcmdDYWxsYmFjayhB
cmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSk7CisgICAgCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0
b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRl
ZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisK
KyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0bXAsIHJvbGUsIHR5cGUpLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JFYWNoQXJnUm9sZSgKKyAgICAgICAgICAg
IFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAg
ICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIGZ1bmN0b3IpOworICAgICAgICAg
ICAgfSk7CisgICAgfQorCisgICAgLy8gVGhpbmcgY2FuIGJlIGVpdGhlciBBcmcgb3IgVG1wLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBp
ZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9ja3Mgc29tZSBleHRy
YSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0OworCisgICAgLy8g
UmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0
aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFDbG9iYmVyZWRSZWdz
KCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIGNvbnN0IFJl
Z2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVzZSB0aGlzIHRvIHJl
cG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBi
ZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9ydFVz
ZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisg
ICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7CisKKyAgICAv
LyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9ybXMgcmlnaHQgbm93
PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVy
YXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBBc3N1bWluZyB0aGlz
IGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdpbGwgaXQgc3RpbGwg
YmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1dCBhbiBBZGRyIHJl
ZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFyZywgb2YgY291cnNl
KSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0aGlzOiBpdCB3YWxr
cyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNwaWxsaW5nOworICAg
IC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYgaXQgY2FuIHJlcGxh
Y2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAgIC8vIGZpbmRzIGEg
bm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNoVG1wIHRvIGRvIGEg
cmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGF1
dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBhZG1pdHNTdGFj
ayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21lIGNvZGUgZm9yIHRo
aXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIgYmFja2VuZC4gSWYg
dGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUganVtcCB0aGF0IG5l
ZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRoZSAiZWxzZSIKKyAg
ICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVy
YXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5l
cmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFyZ3M7CisgICAgVmFsdWUqIG9y
aWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLgorICAgIE9w
Y29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gKKyNkZWZpbmUgQWly
SW5zdElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3Qu
aCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWxzLmgi
CisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRm9yRWFjaDsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8VG1wPiB7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goSW5zdCYg
aW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFj
aFRtcChmdW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxBcmc+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChJbnN0
JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JF
YWNoQXJnKGZ1bmN0b3IpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0
eXBlbmFtZSBGdW5jdG9yPgordm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7
CisgICAgRm9yRWFjaDxUaGluZz46OmZvckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitib29s
IEluc3Q6Omhhc1NwZWNpYWwoKSBjb25zdAoreworICAgIHJldHVybiBhcmdzLnNpemUoKSAmJiBh
cmdzWzBdLmlzU3BlY2lhbCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFD
bG9iYmVyZWRSZWdzKCkKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICByZXR1cm4g
YXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7Cit9CisKK3ZvaWQg
SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cykKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICBhcmdzWzBdLnNwZWNpYWwoKS0+
cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBi
b29sIGlzU2hpZnRWYWxpZChJbnN0JiBpbnN0KQoreworI2lmIENQVShYODYpCisgICAgcmV0dXJu
IGluc3QuYXJnc1swXSA9PSBUbXAoWDg2UmVnaXN0ZXI6OmN4KTsKKyNlbHNlCisgICAgcmV0dXJu
IHRydWU7CisjZW5kaWYKK30gICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbHVlKEluc3Qm
IGluc3QpCit7CisgICAgcmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
ckxpdmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gWW91
IGNhbiBjb21wdXRlIGxpdmVuZXNzIG92ZXIgVG1wJ3Mgb3Igb3ZlciBBcmcncy4gSWYgeW91IGNv
bXB1dGUgb3ZlciBBcmcncywgeW91IGdldCBib3RoCisvLyBzdGFjayBsaXZlbmVzcyBhbmQgdG1w
IGxpdmVuZXNzLgordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+CitjbGFzcyBMaXZlbmVzcyB7Citw
dWJsaWM6CisgICAgTGl2ZW5lc3MoQ29kZSYgY29kZSkKKyAgICB7CisgICAgICAgIG1fbGl2ZUF0
SGVhZC5yZXNpemUoY29kZS5zaXplKCkpOworICAgICAgICBtX2xpdmVBdFRhaWwucmVzaXplKGNv
ZGUuc2l6ZSgpKTsKKworICAgICAgICBJbmRleFNldDxCYXNpY0Jsb2NrPiBzZWVuOworCisgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7CisgICAg
ICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGJsb2Nr
SW5kZXggPSBjb2RlLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gY29kZS5hdChibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBM
b2NhbENhbGMgbG9jYWxDYWxjKCp0aGlzLCBibG9jayk7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KQorICAgICAgICAg
ICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAg
ICAgICAgICAgICAgYm9vbCBmaXJzdFRpbWUgPSBzZWVuLmFkZChibG9jayk7CisgICAgICAgICAg
ICAgICAgaWYgKCFmaXJzdFRpbWUgJiYgbG9jYWxDYWxjLmxpdmUoKSA9PSBtX2xpdmVBdEhlYWRb
YmxvY2tdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbGl2
ZUF0VGFpbFtwcmVkZWNlc3Nvcl0uYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxD
YWxjLmxpdmUoKS5iZWdpbigpLCBsb2NhbENhbGMubGl2ZSgpLmVuZCgpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgbV9saXZlQXRIZWFkW2Jsb2NrXSA9IGxvY2FsQ2FsYy50
YWtlTGl2ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY29uc3Qg
SGFzaFNldDxUaGluZz4mIGxpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKKyAgICBjb25z
dCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdFRhaWxbYmxvY2tdOworICAgIH0KKworICAgIC8v
IFRoaXMgY2FsY3VsYXRvciBoYXMgdG8gYmUgcnVuIGluIHJldmVyc2UuCisgICAgY2xhc3MgTG9j
YWxDYWxjIHsKKyAgICBwdWJsaWM6CisgICAgICAgIExvY2FsQ2FsYyhMaXZlbmVzcyYgbGl2ZW5l
c3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2xpdmUobGl2ZW5lc3MtPmxp
dmVBdFRhaWwoYmxvY2spKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBI
YXNoU2V0PFRoaW5nPiYgbGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZTsgfQorICAgICAgICBI
YXNoU2V0PFRoaW5nPiYmIHRha2VMaXZlKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fbGl2ZSk7IH0K
KworICAgICAgICB2b2lkIGV4ZWN1dGUoSW5zdCYgaW5zdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gRmlyc3QgaGFuZGxlIGRlZidzLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5n
PigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBB
cmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJn
Ojppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoYXJn
KTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gTmV4dCBoYW5kbGUgY2xv
YmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAgICAgIGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgewor
ICAgICAgICAgICAgICAgIGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAg
ICAgICAgICAgICAgICAgW3RoaXNdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2xpdmUucmVtb3ZlKFRoaW5nKHJlZykpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaW5hbGx5
IGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAg
ICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9s
ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUuYWRkKGFyZyk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhc2hTZXQ8VGhp
bmc+IG1fbGl2ZTsKKyAgICB9OworICAgIAorcHJpdmF0ZToKKyAgICBJbmRleE1hcDxCYXNpY0Js
b2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdFRhaWw7Cit9OworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBA
CisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFN5bGxhYnVzOgorIwor
IyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9PiB1c2Ugb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVn
aXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3Rl
ciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQgZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJl
Z2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ugb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1
ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RiA9PiB1
c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjCisjIEFyZ3VtZW50IGtp
bmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJlZ2lzdGVyCisjIEltbSA9PiAzMi1iaXQgaW1t
ZWRpYXRlIGludAorIyBJbW02NCA9PiBUcnVzdGVkSW1tNjQKKyMgQWRkciA9PiBhZGRyZXNzIGFz
IHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MK
KyMgQWJzID0+IEFic29sdXRlQWRkcmVzcworIworIyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRo
aW5ncyBhcyBrZXl3b3JkcywgYW5kIHVuZGVyc3RhbmRzIHRoYXQgdGhleSBmYWxsIGludG8gdHdv
IGRpc3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhpbmdzLiBTbywgYWx0aG91Z2ggdGhpcyBmaWxlIHVz
ZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0aW9uIHN0eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNwYWNl
IG9yCisjIGV2ZW4gbmV3bGluZXMgYXJlIG1lYW5pbmdmdWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4
YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKyMKKyMgRm9vNDIgVTpHLCBVRDpGIEltbSwgVG1wIEFk
ZHIsIFRtcAorIworIyBBbmQgdGhlIHBhcnNlciB3b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUg
c2FtZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBVRDpGCisjICAgICBJbW0sIFRtcAorIyAgICAgQWRk
ciwgVG1wCisjCisjIEkuZS4gYSB0d28tZm9ybSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIg
b3IgYW4gaW50IGltbWVkaWF0ZSBhbmQgdXNlcytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMg
Tm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIp
IGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEg
bGVhZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisKK05vcAorCitBZGQzMiBVOkcsIFVEOkcKKyAg
ICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgVG1wCisgICAgQWRkciwgVG1wCisg
ICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRtcCwgVG1wCisK
K0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBUbXAsIEFk
ZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisg
ICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBU
bXAKKyAgICBBZGRyLCBUbXAKKworTW92ZSBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1t
LCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQgIyBUaGlzIG1lYW5z
IHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJt
b3ZlIi4KKyAgICBUbXAsIEFkZHIgYXMgc3RvcmUKKworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAg
IFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMg
c3RvcmVEb3VibGUKKworTW92ZTY0VG9Eb3VibGUgVTpHLCBEOkYKKyAgICBUbXAsIFRtcAorCitN
b3ZlRG91YmxlVG82NCBVOkYsIEQ6RworICAgIFRtcCwgVG1wCisKK0JyYW5jaEFkZDMyIFU6Rywg
VTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIElt
bSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisg
ICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE11bDMyIFU6RywgVTpHLCBVRDpHIC9icmFu
Y2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFu
Y2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAg
ICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQs
IFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hOZWczMiBVOkcsIFVE
OkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcAorCitKdW1wIC9icmFuY2gKKworUmV0IC90ZXJt
aW5hbAorCitCcmVha3BvaW50IC90ZXJtaW5hbAorCisjIEFpciBhbGxvd3MgZm9yIGV4b3RpYyBi
ZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhl
IFNwZWNpYWwgb3BlcmFuZCwKKyMgd2hpY2ggbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4KK3Nw
ZWNpYWwgUGF0Y2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFz
ZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clBoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5j
bHVkZSAiQjNDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKENvZGUmIGNvZGUsIGNvbnN0IGNo
YXIqIG5hbWUpCisgICAgOiBtX2NvZGUoY29kZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAg
IGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBi
ZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKwor
ICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUg
PSB0b0NTdHJpbmcoY29kZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAg
ICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKGNv
ZGUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQWlyUGhhc2VTY29w
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xh
c3MgQ29kZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShDb2RlJiwgY29uc3QgY2hhciog
bmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJp
dmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENT
dHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclBoYXNlU2NvcGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3Jp
dHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVn
aXN0ZXJQcmlvcml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQUlJlZz4mIGdwc0luUHJpb3JpdHlPcmRlcigpCit7
CisgICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAg
IFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8R1BSUmVnPigpOworICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnOjphbGxHUFJzKCk7CisgICAgICAgICAgICBhbGwu
ZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBhbGwu
ZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAg
ICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1
bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChS
ZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykp
CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0
b3I8RlBSUmVnPiYgZnBzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPEZQ
UlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6
OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVz
dWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBhbGwg
PSBSZWc6OmFsbEZQUnMoKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgZm9yIChSZWcg
cmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQor
ICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAg
aWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBw
ZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIHJldHVybiAq
cmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6
OlR5cGUgdHlwZSkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPFJlZz4qIHJlc3VsdFtBcmc6Om51bVR5
cGVzXTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25j
ZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0W0FyZzo6
R1BdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBn
cHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdLT5h
cHBlbmQoUmVnKHJlZykpOworICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdID0gbmV3IFZlY3Rv
cjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcHJzSW5Qcmlvcml0eU9y
ZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdLT5hcHBlbmQoUmVnKHJlZykp
OworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdFt0eXBlXTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lzdGVy
UHJpb3JpdHlfaAorI2RlZmluZSBBaXJSZWdpc3RlclByaW9yaXR5X2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5j
bHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVn
PiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpOworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblBy
aW9yaXR5T3JkZXIoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4gc3RydWN0IFJlZ2lzdGVy
c0luUHJpb3JpdHlPcmRlcjsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlP
cmRlcjxHUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEdQUlJlZz4mIGluUHJpb3JpdHlPcmRl
cigpIHsgcmV0dXJuIGdwc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8
RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZnBzSW5Qcmlvcml0eU9yZGVyKCk7
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+Citjb25zdCBWZWN0b3I8QmFuazo6UmVn
aXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgcmV0dXJuIFJlZ2lzdGVy
c0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7Cit9CisKK2NvbnN0IFZl
Y3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBBaXJSZWdpc3RlclByaW9yaXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworU3BlY2lhbDo6U3BlY2lhbChj
b25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9uYW1lKG5hbWUpCisgICAgLCBtX2luZGV4KFVJTlRf
TUFYKQoreworfQorCitTcGVjaWFsOjp+U3BlY2lhbCgpCit7Cit9CisKK0NTdHJpbmcgU3BlY2lh
bDo6bmFtZSgpIGNvbnN0Cit7CisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIGR1bXBJ
bXBsKG91dCk7CisgICAgcmV0dXJuIG91dC50b0NTdHJpbmcoKTsKK30KKwordm9pZCBTcGVjaWFs
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVm
aXgpOworICAgIGR1bXBJbXBsKG91dCk7CisgICAgaWYgKG1faW5kZXggIT0gVUlOVF9NQVgpCisg
ICAgICAgIG91dC5wcmludChtX2luZGV4KTsKK30KKwordm9pZCBTcGVjaWFsOjpkZWVwRHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgqdGhpcywgIjogIik7Cisg
ICAgZGVlcER1bXBJbXBsKG91dCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2lu
Y2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgR2VuZXJhdGlvbkNvbnRleHQ7CisKK2Ns
YXNzIFNwZWNpYWwgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNpYWwpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBk
dW1wUHJlZml4ID0gIiYiOworICAgIAorICAgIFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TcGVj
aWFsKCk7CisKKyAgICBDU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBm
b3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNr
PiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZChJbnN0JikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpID0gMDsKKworICAg
IC8vIFRoaXMgZ2V0cyBjYWxsZWQgb24gZm9yIGVhY2ggSW5zdCB0aGF0IHVzZXMgdGhpcyBTcGVj
aWFsLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvCisgICAgLy8gZ3VhcmFudGVlIHRoYXQg
YSBTcGVjaWFsIGdldHMgdXNlZCBmcm9tIGp1c3Qgb25lIEluc3QsIGJlY2F1c2UgQWlyIG1pZ2h0
IHRhaWxkdXAgbGF0ZS4gU28sCisgICAgLy8gaWYgeW91IHdhbnQgdG8gcGFzcyB0aGlzIGluZm9y
bWF0aW9uIGRvd24gdG8gZ2VuZXJhdGUoKSwgdGhlbiB5b3UgaGF2ZSB0byBlaXRoZXI6CisgICAg
Ly8KKyAgICAvLyAxKSBHZW5lcmF0ZSBBaXIgdGhhdCBzdGFydHMgd2l0aCBhIHNlcGFyYXRlIFNw
ZWNpYWwgcGVyIFBhdGNoIEluc3QsIGFuZCB0aGVuIG1lcmdlCisgICAgLy8gICAgdXNlZFJlZ2lz
dGVyIHNldHMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGdyZWF0LCBidXQgaXQgb3B0aW1pemVzIGZv
ciB0aGUgY29tbW9uIGNhc2UgdGhhdAorICAgIC8vICAgIEFpciBkaWRuJ3QgZHVwbGljYXRlIGNv
ZGUgb3IgdGhhdCBzdWNoIGR1cGxpY2F0aW9uIGRpZG4ndCBjYXVzZSBhbnkgaW50ZXJlc3Rpbmcg
Y2hhbmdlcyB0bworICAgIC8vICAgIHJlZ2lzdGVyIGFzc2lnbm1lbnQuCisgICAgLy8KKyAgICAv
LyAyKSBIYXZlIHRoZSBTcGVjaWFsIG1haW50YWluIGEgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJT
ZXQ+LiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGFuYWx5c2lzCisgICAgLy8gICAgdGhhdCBmZWVk
cyBpbnRvIHRoaXMgY2FsbCBpcyBwZXJmb3JtZWQganVzdCBiZWZvcmUgY29kZSBnZW5lcmF0aW9u
IGFuZCB0aGVyZSBpcyBubyB3YXkKKyAgICAvLyAgICBmb3IgdGhlIFZlY3Rvcjw+J3MgdGhhdCBj
b250YWluIHRoZSBJbnN0cyB0byBiZSByZWFsbG9jYXRlZC4gVGhpcyBhbGxvd3MgZ2VuZXJhdGUo
KSB0bworICAgIC8vICAgIGNvbnN1bHQgdGhlIEhhc2hNYXAuCisgICAgLy8KKyAgICAvLyAzKSBI
eWJyaWQ6IHlvdSBjb3VsZCB1c2UgKDEpIGFuZCBmaXJlIHVwIGEgSGFzaE1hcCBpZiB5b3Ugc2Vl
IG11bHRpcGxlIGNhbGxzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGl0J3Mgbm90IHBvc3Np
YmxlIHRvIHJlbHkgb24gcmVwb3J0VXNlZFJlZ2lzdGVycygpIGJlaW5nIGNhbGxlZCBpbiB0aGUg
c2FtZSBvcmRlcgorICAgIC8vIGFzIGdlbmVyYXRlKCkuIElmIHdlIGNvdWxkIHJlbHkgb24gdGhh
dCwgdGhlbiB3ZSBjb3VsZCBqdXN0IGhhdmUgZWFjaCBTcGVjaWFsIGluc3RhbmNlCisgICAgLy8g
bWFpbnRhaW4gYSBWZWN0b3Igb2YgUmVnaXN0ZXJTZXQncyBhbmQgdGhlbiBwcm9jZXNzIHRoYXQg
dmVjdG9yIGluIHRoZSByaWdodCBvcmRlciBpbgorICAgIC8vIGdlbmVyYXRlKCkuIEJ1dCwgdGhl
IG9yZGVyaW5nIGRpZmZlcmVuY2UgaXMgdW5saWtlbHkgdG8gY2hhbmdlIHNpbmNlIGl0IHdvdWxk
IGhhcm0gdGhlCisgICAgLy8gcGVyZm9ybWFuY2Ugb2YgdGhlIGxpdmVuZXNzIGFuYWx5c2lzLgor
ICAgIC8vCisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyAoMSkgZm9yIEIzIHN0YWNrbWFwcy4KKyAg
ICB2aXJ0dWFsIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJT
ZXQmKSA9IDA7CisgICAgCisgICAgdmlydHVhbCBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUo
SW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikgPSAwOworCisgICAgdmly
dHVhbCBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSA9IDA7CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcElt
cGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlZXBEdW1wSW1w
bChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
Q29kZTsKKworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4Owor
fTsKKworY2xhc3MgRGVlcFNwZWNpYWxEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3BlY2lhbERp
bXAoU3BlY2lhbCogc3BlY2lhbCkKKyAgICAgICAgOiBtX3NwZWNpYWwoc3BlY2lhbCkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV9zcGVjaWFsKQorICAgICAgICAgICAgbV9zcGVjaWFsLT5kZWVwRHVtcChv
dXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBTcGVjaWFsKiBtX3NwZWNpYWw7Cit9OworCitEZWVwU3BlY2lh
bER1bXAgZGVlcER1bXAoU3BlY2lhbCogc3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVlcFNwZWNp
YWxEdW1wKHNwZWNpYWwpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0
aGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQu
aCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29k
ZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNwaWxsRXZlcnl0aGluZyIp
OworCisgICAgLy8gV2Ugd2FudCB0byBrbm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQg
ZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFzaWMgYmxvY2suCisgICAgSW5kZXhNYXA8QmFzaWNCbG9j
aywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CisgICAg
TGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxp
dmVuZXNzLCBibG9jayk7CisgICAgICAgIHVzZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6ZShibG9j
ay0+c2l6ZSgpICsgMSk7CisKKyAgICAgICAgYXV0byBzZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1
bnNpZ25lZCBpbmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVzZWRSZWdp
c3RlcnNbYmxvY2tdW2luZGV4XTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2FsQ2Fs
Yy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAg
ICAgICAgICAgIHNldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHNldFVzZWRSZWdpc3RlcnMoYmxvY2stPnNpemUoKSk7CisgICAgICAgIAorICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0t
OykgeworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkp
OworICAgICAgICAgICAgc2V0VXNlZHJlZ2lzdGVycyhpbnN0SW5kZXgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KKyAgICBW
ZWN0b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6Om51bVR5cGVzXTsKKyAgICBmb3Ig
KHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsrdHlw
ZUluZGV4KSB7CisgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0
YWNrU2xvdHNbdHlwZUluZGV4XTsKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2Fz
dDxBcmc6OlR5cGU+KHR5cGVJbmRleCk7CisgICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUu
bnVtVG1wcyh0eXBlKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51
bVRtcHModHlwZSk7IHRtcEluZGV4LS07KQorICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRl
eF0gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAg
IH0KKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXgg
PSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQmIHNldEJlZm9yZSA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRl
eF07CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJzW2Js
b2NrXVtpbnN0SW5kZXggKyAxXTsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQo
aW5zdEluZGV4KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAg
ICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxs
U3RhY2tTbG90c1t0eXBlXVt0bXAudG1wSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIEFy
ZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8g
TmVlZCB0byBmaWd1cmUgb3V0IGEgcmVnaXN0ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBkZXBl
bmRzIG9uIHRoZSByb2xlLgorICAgICAgICAgICAgICAgICAgICBSZWcgY2hvc2VuUmVnOworICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OlVzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJ
blByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXNldEJlZm9yZS5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nl
blJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlv
cml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRB
ZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRl
ci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0g
cmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZURl
ZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5
T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9y
ZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRChjaG9zZW5S
ZWcpOworCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOworCisgICAg
ICAgICAgICAgICAgICAgIE9wY29kZSBtb3ZlID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1v
dmVEb3VibGUKKworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNE
ZWYocm9sZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5v
cmlnaW4sIHRtcCwgYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAg
ICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxs
RXZlcnl0aGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorI2RlZmluZSBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRl
c3RpbmcuIEl0IGJlaGF2ZXMgbGlrZSBhIHJlZ2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2Ug
dGhhdCBpdAorLy8gZWxpbWluYXRlcyB0ZW1wb3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBh
Y2NvbXBsaXNoZXMgdGhpcyBieSBhbHdheXMgc3BpbGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmllcy4g
VGhlIHJlc3VsdGluZyBjb2RlIGlzIGdvaW5nIHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMg
cGhhc2UgaXMgZ3JlYXQgaWYgeW91CisvLyB0aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRo
ZSByZWdpc3RlciBhbGxvY2F0b3IuIFlvdSBjYW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhp
cworLy8gcGhhc2UgaW5zdGVhZCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8vIE5v
dGUgdGhhdCBldmVuIHRob3VnaCB0aGlzIHBoYXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBv
c3NpYmxlLCBpdCdzIG5vdCBldmVuIHdyaXR0ZW4gaW4gYQorLy8gcGFydGljdWxhcmx5IGVmZmlj
aWVudCB3YXkuIFNvLCBkb24ndCBnZXQgYW55IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2Ug
dG8gcmVkdWNlIGNvbXBpbGVyCisvLyBsYXRlbmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQs
IHlvdSBzaG91bGQgY29tZSB1cCB3aXRoIGEgY2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVz
aW5nCisvLyB0aGlzIHNpbGx5IHRoaW5nLgorCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xv
dC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFN0YWNrU2xvdDo6c2V0T2Zmc2V0RnJvbUZQKGlu
dHB0cl90IHZhbHVlKQoreworICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgaWYgKG1f
dmFsdWUpCisgICAgICAgIG1fdmFsdWUtPm1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7Cit9CisKK3Zv
aWQgU3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJzdGFjayIsIG1faW5kZXgpOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9i
eXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAi
LCBtX2tpbmQpOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBvdXQucHJpbnQoIiwgdmFsdWUg
PSAiLCAqbV92YWx1ZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyU3RhY2tTbG90X2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90X2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlIDx3dGYvTm9uQ29w
eWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90dmFsdWU7CisKK25hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBTdGFja1Nsb3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xv
dCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQg
Ynl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2lu
ZCBraW5kKCkgY29uc3QgeyByZXV0cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB1bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkKKyAgICAgICAgICAgIHJldHVy
biAxOworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAyKQorICAgICAgICAgICAgcmV0dXJuIDI7
CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDQpCisgICAgICAgICAgICByZXR1cm4gNDsKKyAg
ICAgICAgcmV0dXJuIDg7CisgICAgfQorCisgICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgLy8gWmVybyBtZWFucyB0aGF0IGl0J3Mgbm90
IHlldCBhc3NpZ25lZC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJl
IGNhbGxlZCBmcm9tIHBoYXNlcyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24uIEJ1dCB5b3UgY2Fu
CisgICAgLy8gdG90YWxseSBmb3JjZSBhIHN0YWNrIHNsb3QgdG8gbGFuZCBhdCBzb21lIG9mZnNl
dC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCk7CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3Qo
dW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0
YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUtPm9m
ZnNldEZyb21GUCgpKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fdmFsdWUo
dmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoYnl0ZVNpemUpOworICAgIH0KKyAgICAKKyAg
ICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgaW50cHRy
X3QgbV9vZmZzZXRGcm9tRlA7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgU3RhY2tT
bG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7CitwdWJs
aWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoU3RhY2tTbG90KiBzbG90KQorICAgICAgICA6IG1f
c2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisgICAgICAgICAgICBtX3Nsb3Qt
PmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51
bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIFN0YWNrU2xvdCogbV9zbG90OworfTsKKwor
RGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoU3RhY2tTbG90KiBzbG90KQoreworICAgIHJldHVy
biBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclN0YWNr
U2xvdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1w
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxub25lPiIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzUmVnKCkpIHsKKyAgICAgICAgb3V0
LnByaW50KHJlZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0dQVG1w
KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIldG1wIiwgZ3BUbXBJbmRleCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmludCgiJWZ0bXAiLCBmcFRtcEluZGV4KCkpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiUmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlv
biBvZiBhIHJlZ2lzdGVyLiBJdCBjYW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQ
Ui4gSXQgY2FuIGFsc28KKy8vIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVn
aXN0ZXIgKGkuZS4gYSB0ZW1wb3JhcnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQor
Ly8gZGVsaWJlcmF0ZWx5IHRlcnNlIG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRo
aXMgbmFtZSBhIGxvdC4KKworY2xhc3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAg
ICA6IG1fdmFsdWUoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcp
CisgICAgeworICAgICAgICBpZiAocmVnKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkp
CisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkpOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigp
KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBUbXAoY29uc3QgQXJnJik7CisKKyAgICBzdGF0aWMgVG1wIGdwVG1wRm9ySW5k
ZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9IGVuY29kZUdQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGZwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgp
CisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVu
Y29kZUZQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisKKyAg
ICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1f
dmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNFbmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0K
KworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2Rl
ZEZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdw
cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAg
IH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29k
ZUZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVy
biBmcHIoKTsKKyAgICB9CisKKyAgICBib29sIGhhc1RtcEluZGV4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhaXNSZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBkZWNvZGVGUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRl
eCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJu
IGdwVG1wSW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAg
ICBib29sIGlzQWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRoaXM7Cisg
ICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBlbmNvZGVH
UCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAxICsgaW5kZXg7CisgICAg
fQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAtMSAtIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BS
KEdQUlJlZyBncHIpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9B
c3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNv
ZGVGUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUChmcHIgLSBN
YWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
aW50IGVuY29kZUdQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVu
Y29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSArIGluZGV4OworICAg
IH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBUbXAodW5zaWduZWQgaW5kZXgpCisgICAgewor
ICAgICAgICByZXR1cm4gZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3Rlcigp
KSAtIDEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUChpbnQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPiAwOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzRW5jb2RlZEZQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZSA8IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BSKGludCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUgPD0g
ZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAg
c3RhdGljIGJvb2wgaXNFbmNvZGVkRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgdmFsdWUgPj0gZW5jb2RlZEZQUihNYWNyb0Fzc2VtYmxl
cjo6bGFzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVk
R1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVl
KSAmJiAhaXNFbmNvZGVkR1BSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0Vu
Y29kZWRGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAo
dmFsdWUpICYmICFpc0VuY29kZWRGUFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBHUFJS
ZWcgZGVjb2RlR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRH
UFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQUlJlZz4oCisgICAgICAg
ICAgICAodmFsdWUgLSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSkp
ICsgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGlj
IEZQUlJlZyBkZWNvZGVGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5j
b2RlZEZQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPigKKyAg
ICAgICAgICAgIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKSAt
IHZhbHVlKSArCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkp
OworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVHUFRtcChpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIHZhbHVlIC0gKGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsg
MSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29kZUZQVG1wKGludCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFRtcCh2YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxKSAt
IHZhbHVlOworICAgIH0KKworICAgIC8vIDA6IGVtcHR5IFRtcAorICAgIC8vIHBvc2l0aXZlOiBH
UFJzIGFuZCB0aGVuIEdQIHRlbXBzLgorICAgIC8vIG5lZ2F0aXZlOiBGUFJzIGFuZCB0aGVuIEZQ
IHRlbXBzLgorICAgIGludCBtX3ZhbHVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGluZXNfaAorI2Rl
ZmluZSBBaXJUbXBJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJBcmcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitpbmxpbmUgVG1wOjpUbXAoY29uc3QgQXJnJiBhcmcp
Cit7CisgICAgKnRoaXMgPSBhcmcudG1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBJ
bmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAg
ICBWYWxpZGF0ZXIoQ29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVt
cEJlZm9yZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX3doZW4od2hlbikK
KyAgICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQorCisjZGVm
aW5lIFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IGZhaWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9u
LCB0b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKyAgICAKKyAgICB2
b2lkIHJ1bigpCisgICAgeworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+IHZhbGlkU2xvdHM7
CisgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHZhbGlkQmxvY2tzOworICAgICAgICBIYXNo
U2V0PFNwZWNpYWwqPiB2YWxpZFNwZWNpYWxzOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAgICB2YWxpZEJsb2Nrcy5hZGQoYmxvY2spOworICAg
ICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAg
ICAgICB2YWxpZFNsb3RzLmFkZChzbG90KTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFs
IDogbV9jb2RlLnNwZWNpYWxzKCkpCisgICAgICAgICAgICB2YWxpZFNwZWNpYWxzLmFkZChzcGVj
aWFsKTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFy
Z3MpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWxpZFNsb3RzLmNvbnRhaW5zKGFyZy5zdGFja1Nsb3QoKSksICgiQXQgIiwgaW5zdCkpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
U3BlY2lhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU3BlY2lhbHMu
Y29udGFpbnMoYXJnLnNwZWNpYWwoKSksICgiQXQgIiwgaW5zdCkpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
aW5zdC5pc1ZhbGlkRm9ybSgpLCAoIkF0ICIsIGluc3QpKTsKKyAgICAgICAgICAgICAgICBpZiAo
aW5zdEluZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURShpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKCkpKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKCkpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvcnMoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nr
cy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaykpOworICAgICAgICB9CisgICAg
fQorCitwcml2YXRlOgorICAgIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5h
bWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29u
ZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5n
IGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVh
bSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIp
OworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFt
ZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAi
LCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4pCisgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7CisgICAgICAgICAgICBm
YWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIG91
dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAg
ICAgICAgICAgIG91dC5wcmludCgiQmVmb3JlICIsIHdoZW4sICI6XG4iKTsKKyAgICAgICAgICAg
IG91dC5wcmludChtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIG91dC5wcmludCgi
QXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIG91dC5wcmludChtX2NvZGUpOworCisg
ICAgICAgIG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2Vy
dGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOwor
ICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29u
c3QgY2hhciogbV93aGVuOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKENvZGUmIGNvZGUsIGNvbnN0
IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRhdGVyIHZh
bGlkYXRlcihjb2RlLCB3aGVuLCBkdW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlk
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclZhbGlkYXRlX2gKKyNkZWZp
bmUgQWlyVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2b2lkIHZh
bGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVt
cEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVmFsaWRhdGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9y
LnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVf
Z2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODU1IEBACisjIS91c3IvYmlu
L2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFO
RCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgor
IyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVp
cmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNvZGUKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnNw
ZWNpYWwsIDpvdmVybG9hZHMKKyAgICBhdHRyX2FjY2Vzc29yIDpraW5kCisKKyAgICBkZWYgaW5p
dGlhbGl6ZShuYW1lLCBzcGVjaWFsKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNw
ZWNpYWwgPSBzcGVjaWFsCisgICAgICAgIEBraW5kID0gOmluc3QKKyAgICAgICAgdW5sZXNzIHNw
ZWNpYWwKKyAgICAgICAgICAgIEBvdmVybG9hZHMgPSBbXQorICAgICAgICBlbmQKKyAgICBlbmQK
KworICAgIGRlZiBtYXNtTmFtZQorICAgICAgICBuYW1lWzBdLmRvd25jYXNlICsgbmFtZVsxLi4t
MV0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBBcmcKKyAgICBhdHRyX3JlYWRlciA6cm9sZSwgOnR5
cGUKKworICAgIGRlZiBpbml0aWFsaXplKHJvbGUsIHR5cGUpCisgICAgICAgIEByb2xlID0gcm9s
ZQorICAgICAgICBAdHlwZSA9IHR5cGUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPdmVybG9hZAor
ICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1cmUsIDpmb3JtcworCisgICAgZGVmIGluaXRpYWxpemUo
c2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgQHNpZ25hdHVyZSA9IHNpZ25hdHVyZQorICAgICAg
ICBAZm9ybXMgPSBmb3JtcworICAgIGVuZAorZW5kCisKK2NsYXNzIEtpbmQKKyAgICBhdHRyX3Jl
YWRlciA6bmFtZQorICAgIGF0dHJfYWNjZXNzb3IgOnNwZWNpYWwKKworICAgIGRlZiBpbml0aWFs
aXplKG5hbWUpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IGZhbHNl
CisgICAgZW5kCisKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFN0
cmluZworICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgQG5hbWUgPT0gb3RoZXIubmFtZSBhbmQgQHNwZWNpYWwgPT0gb3RoZXIuc3BlY2lhbAorICAg
ICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgICAg
IGlmIGtpbmQgPT0gIkFkZHIiCisgICAgICAgICAgICBbIkFkZHIiLCAiU3RhY2tTbG90IiwgIkNh
bGxBcmciXQorICAgICAgICBlbHNlCisgICAgICAgICAgICBba2luZF0KKyAgICAgICAgZW5kCisg
ICAgZW5kCisKKyAgICBkZWYgYXJnS2luZHMKKyAgICAgICAgS2luZC5hcmdLaW5kcyhraW5kKQor
ICAgIGVuZAorZW5kCisKK2NsYXNzIEZvcm0KKyAgICBhdHRyX3JlYWRlciA6a2luZHMsIDphbHRO
YW1lCisKKyAgICBkZWYgaW5pdGlhbGl6ZShraW5kcywgYWx0TmFtZSkKKyAgICAgICAgQGtpbmRz
ID0ga2luZHMKKyAgICAgICAgQGFsdE5hbWUgPSBhbHROYW1lCisgICAgZW5kCitlbmQKKworY2xh
c3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAor
ICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5h
bWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQK
KyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIK
KyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpz
dHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAg
QG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAg
CisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAg
ICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
QHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4o
b3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYg
dG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQK
KyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5l
bXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRb
MF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUp
CisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10K
KyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNh
c2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVu
dCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGln
bm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBKFthLXpB
LVowLTlfXSspLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZp
bGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAg
ICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWyw6KlwvXS8K
KyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGlu
ZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJy
b3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3Rl
ZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBz
dHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzVUQo
dG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKSlcWi8KK2VuZAorCitkZWYgaXNH
Rih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKEcpfChGKSlcWi8KK2VuZAorCitkZWYgaXNLaW5k
KHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoSW1tNjQpfChBZGRyKXwoSW5k
ZXgpfChSZWxDb25kKXwoUmVzQ29uZCkpXFovCitlbmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikK
KyAgICBpc1VEKHRva2VuKSBvciBpc0dGKHRva2VuKSBvciBpc0tpbmQodG9rZW4pIG9yCisgICAg
ICAgIHRva2VuID09ICJzcGVjaWFsIiBvciB0b2tlbiA9PSAiYXMiCitlbmQKKworZGVmIGlzSWRl
bnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoW2EtekEtWjAtOV9dKylcWi8gYW5kIG5v
dCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxp
emUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUp
CisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRv
a2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAx
CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9r
ZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBh
cnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0
cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRv
a2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3Vt
ZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNl
RXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkK
KyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25z
dW1lUm9sZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJv
cigiRXhwZWN0ZWQgcm9sZSAoVSwgRCwgb3IgVUQpIikgdW5sZXNzIGlzVUQocmVzdWx0KQorICAg
ICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVU
eXBlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJF
eHBlY3RlZCB0eXBlIChHIG9yIEYpIikgdW5sZXNzIGlzR0YocmVzdWx0KQorICAgICAgICBhZHZh
bmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVLaW5kCisgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBr
aW5kIChJbW0sIEltbTY0LCBUbXAsIEFkZHIsIEluZGV4LCBSZWxDb25kLCBvciBSZXNDb25kKSIp
IHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAor
ICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIAor
ICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5n
dGgKKworICAgICAgICAgICAgaWYgdG9rZW4gPT0gInNwZWNpYWwiCisgICAgICAgICAgICAgICAg
Y29uc3VtZSgic3BlY2lhbCIpCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJ
ZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQg
YSBzcGVjaWFsIG9wY29kZSIpIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorCisgICAgICAgICAgICAg
ICAgcmVzdWx0W29wY29kZU5hbWVdID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCB0cnVlKQorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRp
ZmllcgorCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAg
ICAgICAgICAgIG9wY29kZSA9IHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAg
ICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIG9wY29k
ZS5zcGVjaWFsCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGNv
ZGUgPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAg
ICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAgICAgICAgICAgICAgZm9ybXMgPSBbXQorICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIGlzVUQodG9rZW4pCisgICAgICAgICAg
ICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9IGNvbnN1bWVS
b2xlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCI6IikKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHR5cGUgPSBjb25zdW1lVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgPDwgQXJnLm5ldyhyb2xlLCB0eXBlKQor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1
bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIsIikK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAg
ICAgICAgaWYgdG9rZW4gPT0gIi8iCisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIi8iKQor
ICAgICAgICAgICAgICAgICAgICBjYXNlIHRva2VuLnN0cmluZworICAgICAgICAgICAgICAgICAg
ICB3aGVuICJicmFuY2giCisgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUua2luZCA9IDpi
cmFuY2gKKyAgICAgICAgICAgICAgICAgICAgd2hlbiAidGVybWluYWwiCisgICAgICAgICAgICAg
ICAgICAgICAgICBvcGNvZGUua2luZCA9IDp0ZXJtaW5hbAorICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJCYWQgLyBkaXJlY3RpdmUi
KQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgYWR2YW5jZQor
ICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgaXNLaW5kKHRva2VuKQor
ICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRz
ID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBuaWwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzIDw8
IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
dG9rZW4gPT0gIioiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5sZXNzIGtpbmRzWy0xXS5uYW1lID09ICJUbXAi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzWy0xXS5zcGVjaWFsID0gdHJ1
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIqIikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgdG9rZW4gPT0gImFzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1
bWUoImFzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0gY29uc3VtZUlk
ZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZv
ciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5ndGggPT0gc2lnbmF0dXJlLmxlbmd0aAorICAg
ICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Iga2luZC5uYW1lID09ICJJbW02NCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS5yb2xlICE9ICJV
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBo
YXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
c2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi1nZW5l
cmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KGtpbmRzLCBh
bHROYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIGlzS2luZCh0b2tl
bikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgaWYgc2lnbmF0dXJlLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAgICAgIHJh
aXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMAorICAgICAgICAgICAgICAgICAgICBmb3JtcyA8
PCBGb3JtLm5ldyhbXSwgbmlsKQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAg
ICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9hZC5uZXcoc2lnbmF0dXJlLCBmb3JtcykKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCitlbmQK
KworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKCRm
aWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVzID0gcGFyc2VyLnBhcnNlCisKK2RlZiB3cml0
ZUgoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5oIiwgInciKSB7Cisg
ICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRl
ZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0
ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2lmbmRlZiBBaXIje2ZpbGVuYW1lfV9o
IgorICAgICAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQWlyI3tmaWxlbmFtZX1faCIKKworICAgICAg
ICB5aWVsZCBvdXRwCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBBaXIj
e2ZpbGVuYW1lfV9oIgorICAgIH0KK2VuZAorCitkZWYgd3JpdGVDUFAoZmlsZW5hbWUpCisgICAg
RmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5jcHAiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwK
KyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5l
cmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAg
ICAgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcImNvbmZpZy5oXCIiCisgICAgICAgIG91dHAucHV0
cyAiI2luY2x1ZGUgXCJBaXIje2ZpbGVuYW1lfS5oXCIiCisKKyAgICAgICAgeWllbGQgb3V0cAor
ICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZSIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAu
cHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAg
ICBvdXRwLnB1dHMgImVudW0gT3Bjb2RlIDogaW50MTZfdCB7IgorICAgICRvcGNvZGVzLmtleXMu
c29ydC5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICAj
e29wY29kZX0sIgorICAgIH0KKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInN0
YXRpYyBjb25zdCB1bnNpZ25lZCBudW1PcGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIK
KyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCisgICAgCisg
ICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJjbGFzcyBQcmlu
dFN0cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7IgorICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2Ug
V1RGIgorfQorCit3cml0ZUNQUCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5w
dXRzICIjaW5jbHVkZSBcInd0Zi9QcmludFN0cmVhbS5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1l
c3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJ1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
OyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBP
cGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICIgICAgc3dp
dGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMua2V5cy5lYWNoIHsKKyAgICAgICAgfCBvcGNv
ZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICBjYXNlICN7b3Bjb2RlfToiCisgICAgICAgIG91
dHAucHV0cyAiICAgICAgICBvdXQucHJpbnQoXCIje29wY29kZX1cIik7IgorICAgICAgICBvdXRw
LnB1dHMgIiAgICAgICAgcmV0dXJuOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICIgICAgfSIKKyAg
ICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRw
LnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKKyMgRnJv
bSBoZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBz
aW5jZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuCisjIG1hdGNoZXIuCisKK2RlZiBt
YXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXgsIGNvbHVtbkdldHRlciwg
ZmlsdGVyLCBjYWxsYmFjaykKKyAgICByZXR1cm4gaWYgZm9ybXMubGVuZ3RoID09IDAKKworICAg
IGlmIGZpbHRlcltmb3Jtc10KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBpZiBjb2x1
bW5JbmRleCA+PSBmb3Jtc1swXS5raW5kcy5sZW5ndGgKKyAgICAgICAgcmFpc2UgdW5sZXNzIGZv
cm1zLmxlbmd0aCA9PSAxCisgICAgICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQorICAgICAgICByZXR1
cm4KKyAgICBlbmQKKyAgICAKKyAgICBncm91cHMgPSB7fQorICAgIGZvcm1zLmVhY2ggeworICAg
ICAgICB8IGZvcm0gfAorICAgICAgICBraW5kID0gZm9ybS5raW5kc1tjb2x1bW5JbmRleF0ubmFt
ZQorICAgICAgICBpZiBncm91cHNba2luZF0KKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA8PCBm
b3JtCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA9IFtmb3JtXQorICAg
ICAgICBlbmQKKyAgICB9CisKKyAgICBpZiBzcGVlZCA9PSA6ZmFzdCBhbmQgZ3JvdXBzLmxlbmd0
aCA9PSAxCisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRl
eCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuCisg
ICAgZW5kCisKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tjb2x1bW5HZXR0ZXJbY29sdW1uSW5k
ZXhdfSkgeyIKKyAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgfCBrZXksIHZhbHVlIHwK
KyAgICAgICAgb3V0cC5wdXRzICIjaWYgVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQi
CisgICAgICAgIEtpbmQuYXJnS2luZHMoa2V5KS5lYWNoIHsKKyAgICAgICAgICAgIHwgYXJnS2lu
ZCB8CisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgQXJnOjoje2FyZ0tpbmR9OiIKKyAgICAg
ICAgfQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCB2YWx1ZSwgY29sdW1uSW5kZXgg
KyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSIgaWYg
a2V5ID09ICJJbW02NCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRw
LnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92
ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9
LT5vcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29k
ZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlm
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBl
bHNlCisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMu
c2l6ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkKKyAgICAgICAgICAgIG91dHAucHV0cyAic3dp
dGNoICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3Zlcmxv
YWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgeWllbGQg
b3Bjb2RlLCBvdmVybG9hZAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBu
ZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVy
bG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAgICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZv
cm0ob3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQs
IGluc3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2Rl
LnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBj
b2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgIiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRl
eH1dLmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBm
YWxzZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgIHwg
Zm9ybSB8CisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQu
Zm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisg
ICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBv
dXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIAorICAgIG91dHAu
cHV0cyAiaW5saW5lIGJvb2wgb3BnZW5IaWRkZW5UcnV0aCgpIHsgcmV0dXJuIHRydWU7IH0iCisg
ICAgb3V0cC5wdXRzICIjZGVmaW5lIE9QR0VOX1JFVFVSTih2YWx1ZSkgZG8ge1xcIgorICAgIG91
dHAucHV0cyAiICAgIGlmIChvcGdlbkhpZGRlblRydXRoKCkpXFwiCisgICAgb3V0cC5wdXRzICIg
ICAgICAgIHJldHVybiB2YWx1ZTtcXCIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1
dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBJbnN0
Ojpmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIgorICAgIG91dHAucHV0cyAieyIK
KyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAgIHwg
b3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAg
ICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1swXSwgQXJnOjpVc2UsIEFyZzo6R1ApOyAvLyBUaGlz
IGlzIGJhc2ljYWxseSBib2d1cywgYnV0IGl0IHdvcmtzIGYgYW5hbHlzZXMgbW9kZWwgU3BlY2lh
bCBhcyBhbiBpbW1lZGlhdGUuIgorICAgICAgICAgICAgb3V0cC5wdXRzICJhcmdzWzBdLnNwZWNp
YWwoKS0+Zm9yRWFjaEFyZygqdGhpcywgc2NvcGVkTGFtYmRhPEVhY2hBcmdDYWxsYmFjaz4oZnVu
Y3RvcikpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmVh
Y2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKKyAgICAgICAg
ICAgICAgICByb2xlID0gbmlsCisgICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQorICAgICAg
ICAgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgorICAg
ICAgICAgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVmIgor
ICAgICAgICAgICAgICAgIHdoZW4gIlVEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVz
ZURlZiIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7cm9sZX0sIEFyZzo6I3thcmcu
dHlwZX1QKTsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1
dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4i
CisgICAgb3V0cC5wdXRzICJBTFdBWVNfSU5MSU5FIGJvb2wgaXNWYWxpZEZvcm0oT3Bjb2RlIG9w
Y29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91
dHAucHV0cyAiQXJnOjpLaW5kIGtpbmRzW3NpemVvZi4uLihBcmd1bWVudHMpXSA9IHsgYXJndW1l
bnRzLi4uIH07IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29k
ZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAi
Y2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChzaXplb2Yu
Li4oQXJndW1lbnRzKSkgeyIKKyAgICAgICAgdW5sZXNzIG9wY29kZS5zcGVjaWFsCisgICAgICAg
ICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5s
ZW5ndGh9OiIKKyAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsgfCBjb2x1bW5J
bmRleCB8ICJraW5kc1sje2NvbHVtbkluZGV4fV0iIH0KKyAgICAgICAgICAgICAgICBmaWx0ZXIg
PSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAg
ICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgPSAo
bm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBraW5kIHwga2luZC5zcGVjaWFsIH0pCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKCN7c3BlY2lhbH0pOyIKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3Zl
cmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisg
ICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0K
KyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91
dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsgIgorICAgIG91dHAucHV0
cyAifSIKKworICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wgaXNUZXJtaW5hbChPcGNvZGUgb3Bj
b2RlKSIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZh
bHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBpZiBvcGNvZGUua2luZCA9
PSA6dGVybWluYWwgb3Igb3Bjb2RlLmtpbmQgPT0gOmJyYW5jaAorICAgICAgICAgICAgb3V0cC5w
dXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAu
cHV0cyAicmV0dXJuIHRydWU7IgorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5w
dXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0i
CisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgor
fQorCit3cml0ZUNQUCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1
dHMgIiNpbmNsdWRlIFwiQWlySW5zdElubGluZXMuaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMg
ImJvb2wgSW5zdDo6aXNWYWxpZEZvcm0oKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJ
bnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpzYWZlLCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUs
IG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKGFyZ3Muc2l6ZSgpIDwgMSkiCisgICAgICAgICAgICBvdXRwLnB1dHMg
InJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1swXS5pc1Nw
ZWNpYWwoKSkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+aXNWYWxpZCgq
dGhpcykpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiA9
IGZhbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoLnRpbWVzIHsKKyAg
ICAgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xlID0gb3ZlcmxvYWQu
c2lnbmF0dXJlW2luZGV4XS5yb2xlCisgICAgICAgICAgICAgICAgdHlwZSA9IG92ZXJsb2FkLnNp
Z25hdHVyZVtpbmRleF0udHlwZQorICAgICAgICAgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2lu
ZGV4XQorICAgICAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gfD0ga2luZC5zcGVjaWFs
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIyBXZSBhbHJlYWR5IGtub3cgdGhh
dCB0aGUgZm9ybSBtYXRjaGVzLiBXZSBkb24ndCBoYXZlIHRvIHZhbGlkYXRlIHRoZSByb2xlLCBz
aW5jZQorICAgICAgICAgICAgICAgICMga2luZCBpbXBsaWVzIHJvbGUuIFNvLCB0aGUgb25seSB0
aGluZyBsZWZ0IHRvIHZhbGlkYXRlIGlzIHRoZSB0eXBlLiBBbmQgd2Ugb25seSBoYXZlCisgICAg
ICAgICAgICAgICAgIyB0byB2YWxpZGF0ZSB0aGUgdHlwZSBpZiB3ZSBoYXZlIGEgVG1wLgorICAg
ICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICghYXJnc1sje2luZGV4fV0udG1wKCkuaXMje3R5cGV9UCgpKSIKKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRzTW9yZVZhbGlk
YXRpb24KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghaXMje29wY29kZS5uYW1lfVZh
bGlkKHRoaXMpKSIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxz
ZSk7IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVS
Tih0cnVlKTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxz
ZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0
c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5w
dXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAg
ICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIK
KworICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAo
IWFyZ0luZGV4KSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5hZG1pdHNT
dGFjaygqdGhpcywgYXJnSW5zdCkpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBTd2l0
Y2ggb24gdGhlIGFyZ0luZGV4LgorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ0lu
ZGV4KSB7IgorCisgICAgICAgICAgICBudW1BcmdzID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAgewor
ICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNp
Z25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgIH0ubWF4CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIG51bUFyZ3MudGltZXMgeworICAgICAgICAgICAgICAgIHwgYXJnSW5kZXggfAorICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4fToiCisKKyAgICAgICAgICAgICAg
ICAjIENoZWNrIGlmIGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxsIG9mIHRoZSBvdmVybG9hZHMgZWl0
aGVyIGRvLCBvciBkb24ndCwgYWRtaXQgYW4gYWRkcmVzcworICAgICAgICAgICAgICAgICMgYXQg
dGhpcyBpbmRleC4gV2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgorICAg
ICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAg
ICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8
IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAg
aWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICMgTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0ZXN0IG51bVllcyBmaXJzdCBiZWNh
dXNlIGlmIHdlIGVuZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3YW50CisgICAgICAgICAgICAgICAg
IyB0byBzYXkgdGhhdCBBZGRyZXNzIGlzIGluYWRtaXNzaWJsZS4KKyAgICAgICAgICAgICAgICBp
ZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVS
TihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAg
ICAgICAgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5z
aXplICE9IDEpCisKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Mu
c2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bj
b2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorCisgICAgICAgICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhl
bSBkbyB3aGF0IHdlIHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAg
IG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9y
bSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0g
PT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVll
cyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1
c3QgZHJvcCB0byBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8g
PT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJs
b2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlm
IG5lZWRPdmVybG9hZFN3aXRjaAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlz
IGlzIGhvdyB3ZSB0ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVu
dCB0byBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2
YWxpZCBmb3JtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHBy
b2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmc6OkFkZHIiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJhcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBmb3JtcyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bVllcyA9IDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNo
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAi
QWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0g
MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEcm9w
IGRvd24sIGVtaXQgbm8gY29kZSwgc2luY2Ugd2UgY2Fubm90IG1hdGNoLgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEtlZXAgZ29p
bmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7Igor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVy
LCBmaWx0ZXIsIGNhbGxiYWNrKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbmVl
ZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1
bHQ6IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOworICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJl
dHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJDQ2FsbEhl
bHBlcnM6Okp1bXAgSW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25D
b250ZXh0JiBjb250ZXh0KSBjb25zdCIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRz
ICJVTlVTRURfUEFSQU0oaml0KTsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oY29udGV4
dCk7IgorICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIHJlc3VsdDsiCisgICAgbWF0
Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNv
ZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgq
dGhpcywgaml0LCBjb250ZXh0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBmb3Jt
LmFsdE5hbWUKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gZm9ybS5hbHROYW1lCisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFt
ZQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6YnJhbmNo
CisgICAgICAgICAgICAgICAgb3V0cC5wcmludCAicmVzdWx0ID0gIgorICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICBvdXRwLnByaW50ICJqaXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAg
ICAgIGZvcm0ua2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQs
IGluZGV4IHwKKyAgICAgICAgICAgICAgICBpZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgIiwgIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
IGNhc2Uga2luZC5uYW1lCisgICAgICAgICAgICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAg
ICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uZnByKCkiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgIHdoZW4gIkltbSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sj
e2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbW02NCIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVk
SW1tNjQoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJBZGRyIgorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAg
ICB3aGVuICJJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxD
b25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgor
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRwLnB1
dHMgIik7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4ocmVzdWx0KTsiCisg
ICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IgorICAgIG91dHAucHV0cyAicmV0dXJuIHJlc3VsdDsiCisgICAgb3V0cC5wdXRzICJ9
IgorCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUs
NiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggIT0gaW52
YWxpZCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9
CiAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleCA9PSBkZWxldGVkKCk7IH0KQEAgLTE3MCw2ICsxNjksNDYgQEAgcHVibGljOgogICAgIAog
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCisgICAgY2xhc3MgQWxsUmVnc0l0
ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAg
ICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpIHsgfQorCisgICAgICAgICAgICBleHBs
aWNpdCBpdGVyYXRvcihSZWcgcmVnKQorICAgICAgICAgICAgICAgIDogbV9yZWcocmVnKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWcgb3BlcmF0b3IqKCkg
Y29uc3QgeyByZXR1cm4gbV9yZWc7IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fcmVnID0gbV9yZWcubmV4dCgp
OworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9yZWcgPT0gb3RoZXIubV9yZWc7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBSZWcgbV9yZWc7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWc6OmZpcnN0KCkpOyB9CisgICAgICAgIGl0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZygpKTsgfQorICAgIH07CisKKyAg
ICBzdGF0aWMgQWxsUmVnc0l0ZXJhYmxlIGFsbCgpIGNvbnN0IHsgcmV0dXJuIEFsbFJlZ3NJdGVy
YWJsZSgpOyB9CisKIHByaXZhdGU6CiAgICAgc3RhdGljIHVpbnQ4X3QgaW52YWxpZCgpIHsgcmV0
dXJuIDB4ZmY7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0
T2Zmc2V0TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpSZWdpc3RlckF0T2Zmc2V0TGkK
ICAgICBpZiAob2Zmc2V0QmFzZVR5cGUgPT0gRnJhbWVQb2ludGVyQmFzZWQpCiAgICAgICAgIG9m
ZnNldCA9IC0oc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihudW1iZXJPZlJlZ2lzdGVycykgKiBzaXpl
b2Yodm9pZCopKTsKIAotICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJl
Zzo6bGFzdCgpO3JlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZp
cnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewogICAgICAgICBp
ZiAocmVnaXN0ZXJTZXQuZ2V0KHJlZykpIHsKICAgICAgICAgICAgIGFwcGVuZChSZWdpc3RlckF0
T2Zmc2V0KHJlZywgb2Zmc2V0KSk7CiAgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZz
ZXRMaXN0LmgJKHJldmlzaW9uIDE5MTIzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJBdE9mZnNldExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsOSBAQCBw
dWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldCogZmluZChSZWcpIGNvbnN0OwogICAgIHVuc2ln
bmVkIGluZGV4T2YoUmVnKSBjb25zdDsgLy8gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQu
CiAKKyAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnMuYmVnaW4oKTsgfQorICAgIFZlY3RvcjxSZWdpc3Rl
ckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3Rl
cnMuZW5kKCk7IH0KKwogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD4gbV9y
ZWdpc3RlcnM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQu
aAkocmV2aXNpb24gMTkxMjM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTcsNiArMTE3LDEzIEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsgfQogICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdCB7IHJldHVybiBtX3ZlY3Rvci5oYXNoKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IG1fdmVjdG9yLnNldEJpdHMoKSkKKyAgICAg
ICAgICAgIGZ1bmN0b3IoUmVnOjpmcm9tSW5kZXgoaW5kZXgpKTsKKyAgICB9CiAgICAgCiBwcml2
YXRlOgogICAgIHZvaWQgc2V0QW55KFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KSW5kZXg6IFNvdXJj
ZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxMjM5KQorKysg
U291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNTAsNiArNTAsNyBAQAogCQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0NzlC
MUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovOyB9OwogCQkwRkVCM0RDRjFCQjVENjg0
MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCAq
LzsgfTsKIAkJMEZFQjNERDExQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0
b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIz
REQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi87IH07CisJ
CTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3
NCAvKiBTY29wZWRMYW1iZGEuaCAqLzsgfTsKIAkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8q
IFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi87IH07CiAJCTBG
Rjg2MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGODYwOTQxQkNDQkQ3NDAwNDUx
MjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi87IH07CiAJCTBGRkYxOURDMUJCMzM0RUIwMDg4
NkQ5MSAvKiBQYXJhbGxlbEhlbHBlclBvb2wuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGRjE5REExQkIzMzRFQjAwODg2RDkxIC8qIFBhcmFsbGVs
SGVscGVyUG9vbC5jcHAgKi87IH07CkBAIC0zNDQsNiArMzQ1LDcgQEAKIAkJMEZFNDQ3OUIxQjdB
QUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdvcmRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzRENFMUJC
NUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFNoYXJlZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNE
RDAxQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVk
TGFtYmRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZExhbWJkYS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUg
LyogVGlueVB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55UHRy
U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjg2MDk0MUJDQ0JENzQwMDQ1
MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBQb2ludGVyQ29tcGFyaXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkZGMTlEQTFCQjMzNEVCMDA4ODZEOTEgLyogUGFyYWxsZWxIZWxwZXJQb29sLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBhcmFsbGVsSGVscGVyUG9vbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NjcsNiArODY5LDcgQEAKIAkJCQkxNDY5NDE5
NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVB
QjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFB
RkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNE
MzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0
MTIzRkYgLyogU2VnbWVudGVkVmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEy
M0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQx
MjNGRiAvKiBTSEExLmNwcCAqLywKQEAgLTEyNDEsNiArMTI0NCw3IEBACiAJCQkJQThBNDc0NDkx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmlt
aXRpdmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyog
U2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTIgKzc3NiwyMCBAQAogI2RlZmluZSBFTkFC
TEVfQ09OQ1VSUkVOVF9KSVQgMQogI2VuZGlmCiAKKy8qIFRoZSBCMyBjb21waWxlciBpcyBhbiBl
eHBlcmltZW50YWwgYmFja2VuZCB0aGF0IGlzIHN0aWxsIGluIGRldmVsb3BtZW50LiBXZSB3aWxs
IGtlZXAgaXQgYnVpbGRpbmcKKyAgIG9uIERhcndpbi94ODYtNjQgZm9yIG5vdywgdGhvdWdoIGl0
IGlzIHVudXNlZCBleGNlcHQgZm9yIHRlc3RzLiAqLworI2lmIE9TKERBUldJTikgJiYgQ1BVKFg4
Nl82NCkKKyNkZWZpbmUgRU5BQkxFX0IzX0pJVAorI2VuZGlmCisKIC8qIElmIHRoZSBiYXNlbGlu
ZSBqaXQgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBkaXNhYmxlIHVwcGVyIHRpZXJzIGFzIHdlbGw6
ICovCiAjaWYgIUVOQUJMRShKSVQpCi0jdW5kZWYgRU5BQkxFX0RGR19KSVQgICAgICAvKiBVbmRl
ZiBzbyB0aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KLSN1bmRlZiBFTkFCTEVfRlRMX0pJVCAg
ICAgIC8qIFVuZGVmIHNvIHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0LiAqLworI3VuZGVmIEVOQUJM
RV9ERkdfSklUCisjdW5kZWYgRU5BQkxFX0ZUTF9KSVQKKyN1bmRlZiBFTkFCTEVfQjNfSklUCiAj
ZGVmaW5lIEVOQUJMRV9ERkdfSklUIDAKICNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMAorI2RlZmlu
ZSBFbmFibGVfQjNfSklUIDAKICNlbmRpZgogCiAvKiBDb3VudHMgdXNlcyBvZiB3cml0ZSBiYXJy
aWVycyB1c2luZyBzYW1wbGluZyBjb3VudGVycy4gQmUgc3VyZSB0byBhbHNvCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9T
Y29wZWRMYW1iZGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJk
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRMYW1iZGFfaAorI2RlZmlu
ZSBTY29wZWRMYW1iZGFfaAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gWW91IGNhbiB1c2UgU2Nv
cGVkTGFtYmRhIHRvIGVmZmljaWVudGx5IHBhc3MgbGFtYmRhcyB3aXRob3V0IGFsbG9jYXRpbmcg
bWVtb3J5IG9yIHJlcXVpcmluZworLy8gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gb2YgdGhlIGNh
bGxlZS4gVGhlIGNhbGxlZSBzaG91bGQgYmUgZGVjbGFyZWQgYXM6CisvLworLy8gdm9pZCBmb28o
Y29uc3QgU2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPiYpOworLy8KKy8vIFRo
ZSBjYWxsZXIganVzdCBkb2VzOgorLy8KKy8vIHZvaWQgZm9vKHNjb3BlZExhbWJkYTxNeVRoaW5n
cyogKGludCwgU3R1ZmYmKT4oWyZdIChpbnQgeCwgU3R1ZmYmIHkpIC0+IE15VGhpbmdzKiB7IGJs
YWggfSkpOworLy8KKy8vIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBmb28oKSBub3QgZXNjYXBp
bmcgdGhlIGxhbWJkYS4gVGhlIGxhbWJkYSBpcyBvbmx5IHZhbGlkIHdoaWxlIGZvbygpIGlzCisv
LyBvbiB0aGUgc3RhY2sgLSBoZW5jZSB0aGUgbmFtZSBTY29wZWRMYW1iZGEuCisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2NvcGVkTGFtYmRhOwordGVtcGxhdGU8dHlw
ZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNjb3Bl
ZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgorICAgIFNj
b3BlZExhbWJkYShSZXN1bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYu
Li4pID0gbnVsbHB0ciwgdm9pZCogYXJnID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2ltcGwoaW1w
bCkKKyAgICAgICAgLCBtX2FyZyhhcmcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZXN1bHRU
eXBlIG9wZXJhdG9yKCkoQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2ltcGwobV9hcmcsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1
bWVudHMpLi4uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzdWx0VHlwZSAoKm1faW1wbCko
dm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pOworICAgIHZvaWQgKm1fYXJnOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBTY29wZWRM
YW1iZGFGdW5jdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4g
QXJndW1lbnRUeXBlcywgdHlwZW5hbWUgRnVuY3Rvcj4KK2NsYXNzIFNjb3BlZExhbWJkYUZ1bmN0
b3I8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLiksIEZ1bmN0b3I+IDogcHVibGljIFNjb3Bl
ZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgorICAgIFNj
b3BlZExhbWJkYUZ1bmN0b3IoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICAgICAgOiBTY29w
ZWRMYW1iZGEoaW1wbEZ1bmN0aW9uLCB0aGlzKQorICAgICAgICAsIG1fZnVuY3RvcihmdW5jdG9y
KQorICAgIHsKKyAgICB9CisKKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKEZ1bmN0b3ImJiBmdW5j
dG9yKQorICAgICAgICA6IFNjb3BlZExhbWJkYShpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAg
ICwgbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwgQXJn
dW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisgICAgICAg
ICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQor
CisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
blR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlw
ZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAg
cmV0dXJuIFNjb3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9y
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBTY29wZWRMYW1iZGFfaAor
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTEyMzkpCisrKyBTb3VyY2UvV1RGL3d0
Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3Ip
CisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkKKyAgICB7CisgICAgfQor
CiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVu
dHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwxMSBAQCBSZWY8U2hhcmVkVGFzazxG
dW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hh
cmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVk
VGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNrKEZ1bmN0b3ImJiBmdW5jdG9yKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlw
ZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263941</attachid>
            <date>2015-10-23 13:43:52 -0700</date>
            <delta_ts>2015-10-23 15:05:19 -0700</delta_ts>
            <desc>rebased</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>548613</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQko
d29ya2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDE4IEBAIGFsbCA6IFwKICAgICBCeXRlY29kZXMu
aCBcCiAgICAgSW5pdEJ5dGVjb2Rlcy5hc20gXAogICAgIEpTQ0J1aWx0aW5zLmggXAorICAgIEIz
TG93ZXJpbmdNYXRjaGVyLmggXAorICAgIEIzQWRkcmVzc01hdGNoZXIuaCBcCisgICAgQjNDb21w
YXJpc29uTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBcCisgICAgQWlyT3Bjb2RlLmNwcCBc
CisgICAgQWlyT3Bjb2RlVXRpbHMuaCBcCisgICAgQWlyT3Bjb2RlVXRpbHMuY3BwIFwKICMKIAog
UFlUSE9OID0gcHl0aG9uCiBQRVJMID0gcGVybAorUlVCWSA9IHJ1YnkKIAogSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIgPSAkKEphdmFTY3JpcHRDb3JlKS9TY3JpcHRzCiAKQEAgLTI1MiwzICsy
NjAsMTkgQEAgYWxsIDogSlNSZXBsYXlJbnB1dHMuaAogCiBKU1JlcGxheUlucHV0cy5oIDogJChJ
TlBVVF9HRU5FUkFUT1JfU1BFQ0lGSUNBVElPTlMpICQoSU5QVVRfR0VORVJBVE9SX1NDUklQVFMp
CiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JSZXBsYXlJbnB1dHMucHkgLS1vdXRwdXREaXIgLiAtLWZyYW1ld29yayBKYXZhU2NyaXB0Q29y
ZSAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykKKworQjNMb3dlcmluZ01hdGNoZXIu
aDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2
YVNjcmlwdENvcmUpL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXiAK
K0IzQWRkcmVzc01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVy
bl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVy
bnMKKwkkKFJVQlkpICReCitCM0NvbXBhcmlzb25NYXRjaGVyLmg6ICQoSmF2YVNjcmlwdENvcmUp
L2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9CM0Nv
bXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXgorCitBaXJPcGNvZGUuaDogJChK
YXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0Q29y
ZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bjb2RlLmNwcDog
JChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0
Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bjb2RlVXRp
bHMuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZh
U2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bj
b2RlVXRpbHMuY3BwOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5y
YiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICRe
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxNTA3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY4NSw2ICs2ODUsMTE3IEBACiAJCTBGRUEwQTMzMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMw
MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdG
NkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9B
c3NlbWJsZXIuY3BwICovOyB9OworCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1
bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3Bw
ICovOyB9OworCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4
NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJ
MEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja1V0aWxzLmggKi87IH07CisJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Js
b2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsK
KwkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVj
aWFsLmggKi87IH07CisJCTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmgg
Ki87IH07CisJCTBGRUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW11dGF0aXZpdHkuaCAqLzsgfTsKKwkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87
IH07CisJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0
VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVD
ODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmggKi87IH07CisJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUxNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVu
Y3lDbGFzcy5jcHAgKi87IH07CisJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1
ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9Owor
CQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5j
cHAgKi87IH07CisJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9Owor
CQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzSW5kZXhTZXQuaCAqLzsgfTsKKwkJMEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
TG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsK
KwkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzTG93ZXJUb0Fpci5oICovOyB9OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQg
LyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAg
Ki87IH07CisJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFD
REFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFD
MDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4
MEZGNzQgLyogQjNPcGNvZGUuaCAqLzsgfTsKKwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBG
RUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
T3JpZ2luLmggKi87IH07CisJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9p
bnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4
NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9p
bnRWYWx1ZS5oICovOyB9OworCQkwRkVDODUyOTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNj
b3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVD
ODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyog
QjNQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1By
b2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkw
RkVDODUyQzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5oICovOyB9OworCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmgg
Ki87IH07CisJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87
IH07CisJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUz
MTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrbWFwU3BlY2lhbC5oICovOyB9OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQg
LyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQu
Y3BwICovOyB9OworCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
OTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmggKi87IH07CisJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxl
Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsK
KwkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICov
OyB9OworCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hW
YWx1ZS5oICovOyB9OworCQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBG
RUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5o
ICovOyB9OworCQkwRkVDODUzRjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMu
aCAqLzsgfTsKKwkJMEZFQzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAq
LzsgfTsKKwkJMEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWUuY3BwICovOyB9OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQg
LyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1
NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZUlubGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkw
RkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFs
bG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICov
OyB9OworCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAq
LzsgfTsKKwkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFyZy5oICovOyB9OworCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWly
QmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07
CisJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovOyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNp
YWwuY3BwICovOyB9OworCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVj
aWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4
NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVu
dGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVy
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4
NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckdlbmVyYXRlLmggKi87IH07CisJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0Lmgg
Ki87IH07CisJCTBGRUM4NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9Owor
CQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFC
REFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyog
QWlySW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87
IH07CisJCTBGRUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgx
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3RJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJM
aXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4
NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07
CisJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1
ODYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAq
LzsgfTsKKwkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZl
cnl0aGluZy5jcHAgKi87IH07CisJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGls
bEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsg
fTsKKwkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
ICovOyB9OworCQkwRkVDODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJUbXAuY3BwICovOyB9OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wSW5saW5lcy5oICovOyB9OworCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyog
QWlyVmFsaWRhdGUuaCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lz
dGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMgLyogU2V0dXBWYXJh
cmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNTYzLDYgKzI2NzQs
MTE3IEBACiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0g
ZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEz
MDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9B
c3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9B
c3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNDFCREFD
REFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1
bWVudFJlZ1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI2MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNC
YXNpY0Jsb2NrLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrSW5saW5l
cy5oOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrVXRpbHMuaDsg
cGF0aCA9IGIzL0IzQmFzaWNCbG9ja1V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCbG9ja1dvcmtsaXN0Lmg7IHBhdGggPSBiMy9C
M0Jsb2NrV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hlY2tTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzQ2hlY2tT
cGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQ2hlY2tTcGVjaWFsLmg7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hl
Y2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5oOyBwYXRoID0g
YjMvQjNDaGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM0NvbW1vbi5jcHA7IHBhdGggPSBiMy9CM0NvbW1vbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbW1vbi5oOyBwYXRo
ID0gYjMvQjNDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbW11dGF0aXZpdHkuY3BwOyBwYXRoID0gYjMvQjNDb21t
dXRhdGl2aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NvbW11dGF0aXZpdHkuaDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDMyVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNDb25zdDMyVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDMyVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDMyVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdDMy
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5jcHA7
IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5oOyBwYXRoID0gYjMvQjND
b25zdDY0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBwYXRoID0gYjMvQjND
b25zdERvdWJsZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29u
c3REb3VibGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDOTFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNDb250cm9sVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb250cm9s
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNDb250cm9sVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Zy
ZXF1ZW5jeUNsYXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
RnJlcXVlbmN5Q2xhc3MuY3BwOyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Zy
ZXF1ZW5jeUNsYXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVl
bmN5Q2xhc3MuaDsgcGF0aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJs
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbnRlZEJsb2Nr
Lmg7IHBhdGggPSBiMy9CM0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0dlbmVyYXRlLmNwcDsgcGF0aCA9IGIz
L0IzR2VuZXJhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRjFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0dlbmVyYXRlLmg7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzSW5kZXhNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbmRl
eE1hcC5oOyBwYXRoID0gYjMvQjNJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0luZGV4U2V0Lmg7IHBhdGggPSBiMy9CM0luZGV4U2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNMb3dlclRvQWlyLmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlclRvQWlyLmg7
IHBhdGggPSBiMy9CM0xvd2VyVG9BaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5jcHA7IHBhdGggPSBiMy9C
M01lbW9yeVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5oOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyog
QjNPcGNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcGNv
ZGUuY3BwOyBwYXRoID0gYjMvQjNPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcGNvZGUuaDsgcGF0aCA9IGIzL0IzT3Bjb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M09yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdp
bi5jcHA7IHBhdGggPSBiMy9CM09yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbi5oOyBwYXRoID0gYjMvQjNPcmlnaW4uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNQYXRjaHBvaW50U3BlY2lhbC5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERDFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNQYXRjaHBvaW50VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERTFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNQYXRjaHBvaW50VmFsdWUuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1BoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNQaGFzZVNjb3BlLmNwcDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQaGFzZVNjb3BlLmg7IHBh
dGggPSBiMy9CM1BoYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUHJvY2VkdXJlLmNwcDsgcGF0aCA9IGIzL0IzUHJvY2Vk
dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzUHJvY2VkdXJlLmg7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlSW5saW5l
cy5oOyBwYXRoID0gYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXAuY3BwOyBwYXRoID0g
YjMvQjNTdGFja21hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU1
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3RhY2ttYXAuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXBTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3Rh
Y2ttYXBTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2ttYXBTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tt
YXBTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RL
aW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90
S2luZC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5oOyBw
YXRoID0gYjMvQjNTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuY3BwOyBwYXRo
ID0gYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsgcGF0aCA9IGIzL0Iz
U3RhY2tTbG90VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0Iz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoQ2FzZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRj
aENhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRTFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzU3dpdGNoQ2FzZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuaDsgcGF0aCA9IGIz
L0IzU3dpdGNoVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1R5cGUuY3BwOyBwYXRoID0gYjMvQjNUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1R5cGUuaDsgcGF0aCA9IGIzL0IzVHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMzFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNVcHNpbG9uVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyog
QjNVcHNpbG9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVcHNp
bG9uVmFsdWUuaDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1VzZUNvdW50cy5jcHA7IHBh
dGggPSBiMy9CM1VzZUNvdW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1VzZUNvdW50cy5oOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNW
YWxpZGF0ZS5jcHA7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWxpZGF0ZS5oOyBwYXRoID0gYjMvQjNW
YWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGOTFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlLmg7IHBhdGggPSBiMy9CM1ZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M1ZhbHVlSW5saW5lcy5oOyBwYXRoID0gYjMvQjNWYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZVJlcC5jcHA7
IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZVJlcC5oOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyog
QWlyQWxsb2NhdGVTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJBbGxvY2F0ZVN0YWNrLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyQWxsb2NhdGVTdGFjay5oOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckFyZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBcmcuY3Bw
OyBwYXRoID0gYjMvYWlyL0FpckFyZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQXJnLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJhc2lj
QmxvY2suY3BwOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmg7IHBh
dGggPSBiMy9haXIvQWlyQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNvZGUuaDsgcGF0
aCA9IGIzL2Fpci9BaXJDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9haXIv
QWlyRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2Vu
ZXJhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NDFCREFDREM3
MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyR2VuZXJhdGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGlvbkNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJh
dGlvbkNvbnRleHQuaDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTcxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlySGFu
ZGxlQ2FsbGVlU2F2ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTgx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckluc2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlySW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0
aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVBMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpckluc3QuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0Lmg7IHBhdGggPSBiMy9haXIv
QWlySW5zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1QzFCREFDREM3
MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlySW5zdElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyog
QWlyTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5l
c3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvYWlyL0Fp
clBoYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjAxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHBhdGggPSBiMy9h
aXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclJlZ2lzdGVyUHJpb3JpdHkuaDsgcGF0aCA9
IGIzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWly
L0FpclNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MzFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bp
bGxFdmVyeXRoaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
clNwaWxsRXZlcnl0aGluZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJTdGFja1Nsb3QuY3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
dGFja1Nsb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tTbG90
Lmg7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyVG1wLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJU
bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRt
cC5oOyBwYXRoID0gYjMvYWlyL0FpclRtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXBJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWly
VG1wSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QjFCREFD
REM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpclZhbGlkYXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclZh
bGlkYXRlLmg7IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I4MUIyNjI1NkQwMDY2
Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUU5
ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZhcmFyZ3NGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzg1OCw2ICs0MDgwLDcgQEAKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBG
RjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRD
QUQ0MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBh
c3NlbWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovLAogCQkJ
CUE1NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBiaW5kaW5ncyAqLywKIAkJCQlBN0Q4MDE5RjE4
ODBENjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFG
NjgxIC8qIGJ5dGVjb2RlICovLApAQCAtNDA3MSw2ICs0Mjk0LDEzMiBAQAogCQkJbmFtZSA9IGZ0
bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRUM4NEIyMUJEQUNENUUw
MDgwRkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKKwkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0
QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJMEZFQzg0Qjcx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NEI4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8sCisJCQkJMEZFQzg0QkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGRUM4NEJCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0QkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0QkQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QkUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29t
bW9uLmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5jcHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5oICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgKi8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLywK
KwkJCQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCAqLywK
KwkJCQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8s
CisJCQkJMEZFQzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLywK
KwkJCQkwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLywK
KwkJCQkwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLywKKwkJCQkwRkVDODRE
MDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJ
MEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLywKKwkJCQkwRkVDODRE
MjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovLAorCQkJCTBGRUM4NEQzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovLAorCQkJCTBGRUM4NEQ0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLywKKwkJCQkwRkVDODRENTFCREFDREFDMDA4MEZG
NzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywKKwkJCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyog
QjNPcGNvZGUuY3BwICovLAorCQkJCTBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29k
ZS5oICovLAorCQkJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8s
CisJCQkJMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi8sCisJCQkJMEZF
Qzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwICovLAorCQkJ
CTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi8sCisJ
CQkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLywK
KwkJCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLywK
KwkJCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLywKKwkJ
CQkwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8sCisJCQkJMEZF
Qzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLywKKwkJCQkwRkVDODRF
MjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCAqLywKKwkJCQkwRkVDODRFMzFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0RTQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwICovLAorCQkJCTBGRUM4NEU1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi8sCisJCQkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODRFNzFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODRFODFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLywKKwkJCQkwRkVDODRFOTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8sCisJCQkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovLAorCQkJCTBGRUM4NEVEMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovLAorCQkJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaENhc2UuaCAqLywKKwkJCQkwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3dpdGNoVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGMTFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBl
LmNwcCAqLywKKwkJCQkwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8sCisJ
CQkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCAqLywKKwkJ
CQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLywKKwkJCQkw
RkVDODRGNTFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICovLAorCQkJCTBGRUM4
NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovLAorCQkJCTBGRUM4NEY3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRkVDODRGODFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovLAorCQkJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZS5oICovLAorCQkJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5l
cy5oICovLAorCQkJCTBGRUM4NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAq
LywKKwkJCQkwRkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovLAorCQkJ
KTsKKwkJCW5hbWUgPSBiMzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTBG
RUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxv
Y2F0ZVN0YWNrLmNwcCAqLywKKwkJCQkwRkVDODU0OTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5oICovLAorCQkJCTBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
Y3BwICovLAorCQkJCTBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLywKKwkJ
CQkwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJ
MEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLywKKwkJCQkwRkVD
ODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVD
ODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg1
NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovLAorCQkJCTBGRUM4NTUxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8sCisJCQkJMEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8sCisJCQkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckdlbmVyYXRlLmggKi8sCisJCQkJMEZFQzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdl
bmVyYXRpb25Db250ZXh0LmggKi8sCisJCQkJMEZFQzg1NTYxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLywKKwkJCQkwRkVDODU1NzFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLywKKwkJCQkwRkVDODU1ODFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkVDODU1OTFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc3QuY3BwICovLAorCQkJCTBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmggKi8sCisJCQkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVz
LmggKi8sCisJCQkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi8s
CisJCQkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovLAor
CQkJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8sCisJCQkJ
MEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovLAor
CQkJCTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8s
CisJCQkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovLAorCQkJ
CTBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg1
NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8sCisJCQkJMEZF
Qzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovLAorCQkJCTBG
RUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICovLAorCQkJCTBGRUM4
NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLywKKwkJCQkwRkVDODU2ODFC
REFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLywKKwkJCQkwRkVDODU2OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wLmggKi8sCisJCQkJMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clRtcElubGluZXMuaCAqLywKKwkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuY3BwICovLAorCQkJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0
ZS5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBhaXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQkwRkY0MjcyRTE1OEVCQ0NFMDA0Q0I5RkYgLyogZGlzYXNzZW1ibGVyICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTYwNDIsNiArNjM5MSw3
IEBACiAJCQkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjAxNjFFMzBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NUYwRjUxNEQxMDYzQzAwQUM3NjQ5IC8q
IEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEw
MDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDM0U1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBUElDYXN0LmggaW4g
SGVhZGVycyAqLywKQEAgLTYwNzEsOCArNjQyMSwxMCBAQAogCQkJCUE1RUE3MEU4MTlGNUIxMDEw
MDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRj
aGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjRCMjcyMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NThFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODAxQTUxODgwRDY2RTAwMjZDMzlCIC8qIEJ1aWx0
aW5FeGVjdXRhYmxlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDg3LDYgKzY0MzksNyBAQAogCQkJ
CTk5REEwMEE0MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19tb2RlbC5weSBpbiBIZWFkZXJz
ICovLAogCQkJCTk5REEwMEE1MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc190ZW1wbGF0ZXMu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQk0MURFQTEzMjFCOUYzMTYzMDA2RDY1REQgLyogQnVpbHRp
blV0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyog
QjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlFNzI5NDBCMTkwRjA1MTQwMDFB
OTFCNSAvKiBCdW5kbGVQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2
MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5ODE1RUQ4
RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDk3
LDYgKzY0NTAsNyBAQAogCQkJCTBGMkREODBCMUFCM0Q4NTgwMEJCQjhFOCAvKiBCeXRlY29kZUtp
bGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVDMDE4MzU2
NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNv
ZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAv
KiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNjEzMywxMyArNjQ4NywxNiBAQAogCQkJ
CTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNl
cHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJDMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUEzQTgxNzk3
NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREIyQ0VBMTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZp
Zy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
ZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBD
b25zZXJ2YXRpdmVSb290cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwOEExOEJDMjFDMzAw
QkVERjc2IC8qIENvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQw
MDdBMTg5QjA1MTAwMDYzMzIzMSAvKiBDb25zb2xlTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTUzQ0UwODYxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RkQwMDc0MTg5QjAzOEMwMDYzMzIzMSAvKiBDb25zb2xlVHlwZXMuaCBp
biBIZWFkZXJzICovLApAQCAtNjE1Myw2ICs2NTEwLDcgQEAKIAkJCQlDMkZDOUJEMzE2NjQ0REZC
MDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkVB
QTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2Vu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZp
c2l0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjE2NCw2ICs2NTIyLDcgQEAKIAkJCQk5OTU5RTky
QjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEy
NDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8q
IERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTYxODMsNiArNjU0Miw3IEBACiAJ
CQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3MDREOTA0MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzcxNDNGQ0Qz
RjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNF
NDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAv
KiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAq
LywKQEAgLTYxOTMsNyArNjU1Myw5IEBACiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8q
IERGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3
NTA1NjAwODNCNjg3IC8qIERGR0FyaXRoTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMz
QjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTE3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERG
R0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk1MTdBMEJDNzQwMEVFMjYx
OCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVD
NzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYyMDMsNiArNjU2NSw3IEBACiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZFMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERG
R0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAw
NkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjI0Miw4ICs2
NjA1LDEwIEBACiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDlBMjk2MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdFZGdlRG9taW5h
dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzk4NkQ1NzE3QTBCQjFFMDBBOTVERDAgLyogREZH
RWRnZVVzZXNTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcyMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNDFB
REYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkMwQUU4
MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmls
dHJhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURG
NzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjczLDYgKzY2MzgsNyBA
QAogCQkJCTYyRjJBQTM4MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzlDNEIxNUUxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRj
aFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg2
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9u
Z0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0
MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02
MjgxLDYgKzY2NDcsNyBAQAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5p
ZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIg
LyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAw
Q0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjhGMTQzNjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEg
LyogREZHTmFpdmVEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKQEAgLTYyOTksNiArNjY2Niw3
IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4
aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc3
MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NS
RXhpdEZ1enouaCBpbiBIZWFkZXJzICovLApAQCAtNjMxNiw2ICs2Njg0LDggQEAKIAkJCQkwRkZD
OTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkIxNzY2MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjNBMUJGQTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5r
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBbGxvY2F0ZVN0YWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQzFCREFDREFD
MDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4
REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RkNDRkMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjM0MCw2ICs2NzEwLDcgQEAKIAkJCQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyog
REZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5z
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBE
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NzE2
QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MzUxLDYgKzY3MjIsNyBAQAogCQkJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCREM0OTE1MjI4MDk2MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUz
MiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQzk3RjQyMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTYzODAsNiArNjc1Miw3IEBACiAJCQkJMEY1NkExRDMx
NTAwMEYzNTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVzc2lvblJh
bmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8q
IEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFC
MTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDM4LDYgKzY4MTEsNyBA
QAogCQkJCTBGRUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFs
dWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4
Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAz
MzJDNjE4QjUzRkE5MDA1Rjk3OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjAzMzJDODE4QjU0NkVDMDA1Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjQ0NSw4ICs2ODE5LDEwIEBACiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkND
IC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDA0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNo
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBG
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEJGRjJDMUFE
NDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDA1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvblByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNjQ4Myw2ICs2ODU5LDcgQEAKIAkJ
CQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTA1MDE5MUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1l
bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQTFBQTkwOTExMDBEMzNCMzMgLyogR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUIxQUE5
MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTY1MDgsNiArNjg4NSw3IEBACiAJCQkJQzJF
NTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0
aXZpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBJ
ZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0NEFCMDBBMzgzRDAg
LyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDc2MTg5QjAz
OEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLApAQCAtNjU2
MSw2ICs2OTM5LDcgQEAKIAkJCQlBMUI5RTIzQzFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxh
dG9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUExODE5M0UzMUI0RTBDREIwMEZD
MTAyOSAvKiBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExQjlFMjNFMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNs
YXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgxOTNFNDFCNEUwQ0RCMDBGQzEwMjkgLyogSW50
bENvbGxhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENkUxQjRE
QzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE1ODdENzAxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTY1OTEsNiArNjk3MCw3IEBACiAJCQkJMEYyNEU1NEQxN0VF
Mjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2
RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU5MTFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RG
R0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2RjU0
QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NjA0LDYgKzY5ODQsNyBAQAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QkRBRUNCMTdGNEVB
MTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCMTQx
ODZEMUI2MjUyN0YwMEZCMjA2OCAvKiBKU0Fycm93RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDE4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Jhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MEQxN0Q3MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3Vu
ZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTY2MjAsNiArNzAwMSw4IEBACiAJCQkJODY1
QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUzQ0UwODgxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBK
U0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAv
KiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4QzAyNDIxOEU0QTQx
QTAwMDMyQkM1IC8qIEpTQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjYzNSw2
ICs3MDE4LDcgQEAKIAkJCQlGRTM4NEVFNjFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTgxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFy
Vk1Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJEMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyMDFC
REFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
M0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCkBAIC02NjQ0LDExICs3MDI4LDEzIEBACiAJCQkJMEYyQjY2RjExN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODU0NTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFCMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMTBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDg2
MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVDM0ExQTYxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29u
c29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Njc5LDYgKzcwNjUsNyBAQAogCQkJCUE3
MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxOENCQzExQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzlEQTRBNzFCN0U4QjdDMDA4
NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovLApAQCAtNjcwOCw2ICs3MDk1
LDcgQEAKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFODU1MzkxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5n
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEVDMEVDMzFBQTBEN0RBMDBC
NkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYwMEI1QTcx
NTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLApA
QCAtNjc2MSw5ICs3MTQ5LDExIEBACiAJCQkJMEY0NjgwQTMxNEJBN0Y4RDAwQkZFMjcyIC8qIExM
SW50RXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0IxNEJCQjE3MjAwQkZF
MjcyIC8qIExMSW50T2ZmbGluZUFzbUNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEMjg3
QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwQTUxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQ0VGQUNFMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDRjE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQ
SUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzgxNzk5RTRCMjAwRDI4MzNE
IC8qIExMVk1EaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUQzMTgwNUVE
Q0MwMDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02Nzc2LDEyICs3
MTY2LDE0IEBACiAJCQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJEMDBDRjg3MTEgLyogTWFj
cm9Bc3NlbWJsZXJBUk02NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDYwRkRERUE5ODAw
MDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2M0Iy
M0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQyQkNCMyAvKiBNYWNyb0Fz
c2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2NEE5MTM1RTVFMUMwMDk2
MzAxMiAvKiBNYWNyb0Fzc2VtYmxlclNINC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTQw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3M0ExN0NC
RTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg1
MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODA2
LDYgKzcxOTgsNyBAQAogCQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMzBFMTgzOURCMDAwRjky
OTcgLyogTmF0aXZlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0U4RDIx
MUI5MDEzREUwMDM0NkI1MiAvKiBOYXRpdmVTdGRGdW5jdGlvbkNlbGwuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1
Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBO
b2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjgxOEExQjI1OTAwMjZEODhGIC8qIE5v
bmRldGVybWluaXN0aWNJbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODI2LDYgKzcyMTksNyBA
QAogCQkJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5k
bGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4
OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NDdFQTE3QTBCRDQ2MDBG
NTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0ODBF
MTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODM4LDEz
ICs3MjMyLDE3IEBACiAJCQkJMEZGOUNFNzQxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGlj
QWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU4MzQxODFBNkVGOTdCMDBEMDQ4NDcgLyog
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYx
MTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1l
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyMjFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNv
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9m
aWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJv
ZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0
NDYwIC8qIFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUx
MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1
ZW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29t
cGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODY2LDEwICs3MjY0LDEzIEBACiAJ
CQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNj
b3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVy
ZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1
dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2
IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgwMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzQjRBQTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
Q0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBp
biBIZWFkZXJzICovLApAQCAtNjg4OSw2ICs3MjkwLDcgQEAKIAkJCQkwRkMzMTQxMjE4MTQ1NTkx
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1N0QyM0VFMTg5
MUI1NTQwMDMxQzdGQSAvKiBSZWd1bGFyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJ
bnNwZWN0b3JDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUYwMTgyMzQ1QUYw
MEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmggaW4gSGVhZGVycyAqLywKQEAg
LTY4OTYsNiArNzI5OCw3IEBACiAJCQkJQTVCQTE1RUQxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUxMTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBF
OEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjBB
OUQxMUE5QjY2NDYwMDAxMzA2QSAvKiBSdW50aW1lRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhl
YWRlcnMgKi8sCkBAIC02OTI1LDYgKzczMjgsNyBAQAogCQkJCUE3MDlGMkYwMTdBMEFDMDQwMDUx
MkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA0MDA0MEU2QTc0
OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUwRTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3Vy
Y2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTQ0LDYgKzczNDgsNyBA
QAogCQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MkUzMTNCMTM0RkYwQTYwMEFGQURCNSAvKiBTdHJvbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVGREUyNiAvKiBTdHJvbmdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2
ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBT
dHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAv
KiBTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQUEzMTIxOEJENDlEMTAw
Mzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTgwLDEwICs3
Mzg1LDEyIEBACiAJCQkJMEYyRDRERUExOTgzMkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2Nh
dGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCNkMzOTFBRjQ4RERDMDBEQjFCRjcg
LyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkM5NTJCNzE5QTI4OTg1
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERFQzE5
ODMyREM0MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJENERGMDE5ODMyREQ2MDA3RDRCMTkgLyogVHlwZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQyMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfZXh0
ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0NDE1OEVCRTkxMDA0Q0I5RkYgLyogdWRp
czg2X2lucHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTcwMjAsOCArNzQyNywxMCBAQAogCQkJCUZF
RDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MkUzMTNDMTM0RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUwMjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRCRkNFNjkxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tT
bG90S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8q
IFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RjcyNTY2MTRFRTI2NUUw
MEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RkEy
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDQzLDkg
Kzc0NTIsMTIgQEAKIAkJCQk5OTU5RTkyRTFCRDE3RkE0MDAxQUE0MTMgLyogeHhkLnBsIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRCQTMz
NzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEz
MzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEy
REJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY3MDRCNDMxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKQEAgLTc1MjcsNiArNzkzOSw3IEBACiAJCQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8q
IEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkQxMDdFQzM3NjAwNDI3
QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NDNCQUExNkI4ODI0OTAw
OUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12
N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTM0LDggKzc5NDcsMTAgQEAKIAkJCQlB
N0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIxNzQg
LyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNEMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3MDU1
MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMw
MTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzU1Niw4ICs3OTcxLDEwIEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5
NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkVDOUJCNjFCN0VCMDdD
MDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2FsbEZy
YW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENDFCODRGQjNE
MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyogQ2Fs
bE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTc3LDYgKzc5OTQsNyBAQAogCQkJCUE3MDlG
MkYyMTdBMEFDMkEwMDUxMkU5OCAvKiBDb21tb25TbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjU1M0EzMzExN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENv
bXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NThCMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIx
MDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2
RkM3NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNzYwNCw2ICs4MDIyLDcgQEAKIAkJCQkwRkM3MTJERTE3Q0Q4
Nzc5MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFNTA2ODY3MUFFMjVFMjgwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fi
c3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4RDFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENF
QUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDAx
MUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8q
IERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2
MTMsNiArODAzMiw3IEBACiAJCQkJMEY2Mzk0ODQxNUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5
TW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q5QTI5NDE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2NkVDNjE4
MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjIx
LDYgKzgwNDEsNyBAQAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29k
ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQg
LyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU3MTRFRjkw
QTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0
NjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzY5NDFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5V
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyaXplLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY1OCw2ICs4MDc5LDcgQEAK
IAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdH
cmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU2RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2
MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkwNTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzAwLDE0ICs4MTIyLDE3IEBA
CiAJCQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOTJDODkxQjQ2MTg4
NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVEMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
UHJlcGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQw
MkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyogREZHUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc3QTE3OTczOEI4MDA5REY3NDQgLyogREZHUGxh
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyogREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVE
MTRFRjkwQjMwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RL
aW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBE
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0VDMTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkIxNzY2MjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzcyNSw2ICs4MTUwLDggQEAKIAkJCQkwRkMyMENCNTE4NTJFMkM2MDBDOUU5
NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
Rjg5M0JEQjE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjc5MDg1NTE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3RydWN0
dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJGQ0NGRTE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc1Miw2ICs4MTc5
LDcgQEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxs
YmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyog
RW5jb2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQy
N0E0OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwOTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzgxMDdFQzM3
NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVC
NThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3JJbnN0YW5jZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc3OTYsNiArODIyNCw3IEBACiAJCQkJMEY4RjJCOTUxNzJFMDRB
MDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYxODA3
MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEw
QTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUwMDFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBGVExP
U1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4MDMsNiArODIzMiw3IEBACiAJ
CQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjQ4NTMyOTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVS
ZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjExODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjI1RjFCMzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzlBMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC03ODM1LDYgKzgyNjUsNyBAQAogCQkJCUE1RkQwMDc1MTg5QjAz
OEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI1RjhCQ0QxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2
NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5MjExMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc4NDIsNiArODI3Myw3IEBACiAJCQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8q
IEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5NDA4MTkwRjAy
MUUwMDFBOTFCNSAvKiBJbml0aWFsaXplTExWTVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQg
LyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0
NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzg1Myw2ICs4Mjg1LDcgQEAKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNF
MjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkz
Q0Y3QzE4NDAzNjAzMDBCRkNFMjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODcxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzNzFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgx
MTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU3RDIzRTUxODkwQ0VCRjAwMzFDN0ZBIC8qIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODkxODU2ODMzNTAwMkVENjkyIC8qIElu
c3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA5LDYg
KzgzNDIsNyBAQAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8qIEpT
Q2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRjg5MjBBNTA4
QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlu
cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTYsNiArODM1MCw4IEBACiAJCQkJMTQ3RjM5RDYx
MDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lh
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlND
b250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlDIC8q
IEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzIwMjhCNjE3OTc2MDFFMDA5
ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkyNiwx
NiArODM2MiwxOSBAQAogCQkJCUZFMzg0RUU3MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYwMDQyN0E0
OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDU2NkQ2
MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0OCAvKiBK
U0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4NTE4OUIxQjdFMDA2
MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTVDM0ExQTUxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OTIxODI0NzQ0NzAwQ0Mz
ODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTdEMjNFOTE4OTFCMDc3MDAzMUM3RkEgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2Jh
bE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0NDM0M2
MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1
bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5MDAxMTBG
MTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODUyMzFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUMxMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0lu
amVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA4
MDFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03OTU0LDYgKzgzOTMsNyBAQAogCQkJCUUzMThDQkMwMUI4QUVGNTEwMEEyOTI5RCAvKiBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFC
N0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5P
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8q
IEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NG
QyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5NjcsNiArODQwNyw3IEBA
CiAJCQkJRTNFRjg4NzQxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJv
eHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MkMzN0YxQUREQjhGRTAwMTM5NzI2IC8qIEpT
UmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTExMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTky
OEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0ODc0QUU1MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3QzBDNEFEMTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc5OTUsNiArODQzNiw3IEBACiAJCQkJNzA5RkI4NjcxQUUzMzVDNjAw
MzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURF
OThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2
MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDAyLDkgKzg0
NDQsMTIgQEAKIAkJCQkxNDhGMjFCMDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1N0YxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAwRURBRjcx
IC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEQy
MTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZF
Qzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU0MTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBv
aW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBM
TEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAw
QkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAxMyw2ICs4
NDU4LDcgQEAKIAkJCQlBN0U1QUIzNzE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERTEwN0VDN0U3MDA2NTA0NDYgLyogTG9v
a3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBM
b3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTFGMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Qjcy
M0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2Vt
YmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMjIsMTAgKzg0NjgsMTIgQEAKIAkJCQlB
N0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3MzkxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkzMTgyRDk5MTQwMDUyMkMyMiAvKiBN
YXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwNzFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4
NzNEMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNw
YWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAv
KiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MEE0ODQxQTkwNTFBRjAwRDcz
Q0NBIC8qIE1hdGhDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYxMDdFQzdF
NzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDY0LDE3ICs4
NTEyLDIxIEBACiAJCQkJMEZGNzI5QUQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUUxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTI5MTY3NzFDMzMw
MDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyog
UHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjEx
NjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmls
ZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMDFCREFDREFD
MDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQ
cm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAw
RjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYx
MzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29u
ZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNCMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2
IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFODEw
N0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFE
RTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtODA4MywxMCArODUzNSwxMiBAQAogCQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAv
KiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMzM2MzdBNTFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyog
UmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBS
ZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNzEyQjNCMTFDN0IyMTIwMDdB
NTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjQyQzUxMDE1MUMw
NkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTgxMDAsNiArODU1NCw3IEBACiAJCQkJQTVCQTE1RTkxODIzNDBCMzAwQTgy
RTY5IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgy
NDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1QkExNUVDMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1
Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVF
RTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RFMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMTgsNiArODU3Myw3IEBACiAJCQkJQTU0Q0YyRjkx
ODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTRDRjJGNTE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcyOTlEQTUxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclBy
aW9yaXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OTBERDZEMTgyRjQ5OTcwMDU4ODgwNyAv
KiBTZXRJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5OURBMTE3
RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUU5ODQzMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTgxMzIsNiArODU4OCw3IEBACiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0
IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzFFQUYxMTc5ODdB
QjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczMEI2
MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTIxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8qIFN0
cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVDMTA3
RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTQ4
LDYgKzg2MDUsNyBAQAogCQkJCTcwNUI0MUFEMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDVCNDFBRjFBNkU1MDFFMDA3MTY3NTcg
LyogU3ltYm9sT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwNUI0MUIxMUE2RTUwMUUw
MDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3MEVDQTYwNzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lz
dGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODE3Niw2ICs4NjM0LDcgQEAKIAkJCQkwRjI0
RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMx
QUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIw
QzI1OTFBODAxM0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTgxOTUsNiArODY1NCw3IEBACiAJCQkJNzA5RkI4NjkxQUUzMzVDNjAwMzlEMDY5IC8qIFdl
YWtTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2
MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTRF
QzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTdEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFy
cmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAwRDI4
MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjNDNkQ5QzE1
MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJu
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hl
ci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fk
ZHJlc3NNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgQWRkcmVzc01hdGNo
ZXIKKworIyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24gQjMgZG9pbmcgYWdncmVzc2l2ZSByZWFz
c29jaWF0aW9uIGFuZCBjYW5vbmNhbGl6YXRpb24gb2YgaW50ZWdlciBhZGRzLgorIyBXZSdsbCBu
ZXZlciBzZWUgQWRkKEFkZCh4LCBjb25zdDEpLCBjb25zdDIpIGJlY2F1c2UgaXQgd291bGQgaGF2
ZSBhbHJlYWR5IGJlZW4gcmVhc3NvY2lhdGVkIGludG8KKyMgQWRkKHgsIGNvbnN0MSArIGNvbnN0
MikuIEFsc28sIHdlIHdpbGwgbmV2ZXIgc2VlIEFkZChjb25zdCwgeCksIGJlY2F1c2Ugd2Ugd291
bGQgaGF2ZSBjYW5vbmljYWxpemVkCisjIGl0IHRvIEFkZCh4LCBjb25zdCkuIFRoYXQgc2FpZCwg
aW4gdGhpcyBjb2RlIHdlIG5ldmVyIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCB0aGVzZSBvcHRpbWl6
YXRpb25zCisjIGhhdmluZyBiZWVuIHBlcmZvcm1lZC4gQWxzbywgc2luY2UgdGhlIExvYWQvU3Rv
cmUgaW5zdHJ1Y3Rpb25zIGluIEIzIGhhdmUgYSBidWlsdC1pbiBvZmZzZXQsIHdlCisjIGRvbid0
IG5lZWQgdG8gbWF0Y2ggQWRkKHgsIGNvbnN0KS4gVGhhdCB3b3VsZCBoYXZlIGJlZW4gZm9sZGVk
IGludG8gdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zCisjIGFscmVhZHkuIFNvLCB0aGUgb25s
eSBmYW5jeSBtYXRoaW5nIHRoaXMgY2FuIGRvIGlzIGp1c3QgQmFzZUluZGV4IGZvcm1zLgorCitB
ZGRTaGlmdDEgPSBBZGQoU2hsKGluZGV4LCAkbG9nU2NhbGUpLCBiYXNlKQorQWRkU2hpZnQyID0g
QWRkKGJhc2UsIFNobChpbmRleCwgJGxvZ1NjYWxlKSkKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0
KQorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3Vt
ZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXJndW1lbnRSZWdW
YWx1ZTo6fkFyZ3VtZW50UmVnVmFsdWUoKQoreworfQorCit2b2lkIEFyZ3VtZW50UmVnVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fcmVn
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50
UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNBcmd1bWVudFJlZ1Zh
bHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiUmVnLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBBcmd1bWVudFJlZ1ZhbHVlIDogcHVibGljIFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsg
cmV0dXJuIG9wY29kZSA9PSBBcmd1bWVudFJlZzsgfQorICAgIAorICAgIH5Bcmd1bWVudFJlZ1Zh
bHVlKCk7CisKKyAgICBSZWcgYXJndW1lbnRSZWcoKSBjb25zdCB7IHJldHVybiBtX3JlZzsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBBcmd1
bWVudFJlZ1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcgcmVnKQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkgPyBwb2ludGVyKCkg
OiBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3JlZyhyZWcpCisgICAgeworICAgIH0KKwor
ICAgIFJlZyBtX3JlZzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jhc2ljQmxvY2s6OkJhc2lj
QmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2luZGV4KGlu
ZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNpY0Jsb2NrOjp+
QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCit2b2lkIEJhc2ljQmxvY2s6
OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIzOjphZGRQcmVkZWNl
c3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMs
IGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxhY2VQcmVkZWNlc3Nv
cih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30K
Kwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5j
eSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0LnBy
aW50KCIgICAgIiwgZGVlcER1bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQmFzaWNCbG9jaworI2RlZmluZSBCM0Jhc2ljQmxvY2sKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29y
Q29sbGVjdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
UHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5
cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisgICAgdHlwZWRl
ZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlzIG1hdGNo
ZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
ZHVtcFByZWZpeCA9ICIjIjsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAgICB1bnNpZ25lZCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFZhbHVlTGlzdDo6aXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0Ojpp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIFZhbHVlTGlzdDo6
Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9
CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4g
bV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVzLmxh
c3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0K
KworICAgIHZvaWQgYXBwZW5kKFZhbHVlKik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQ
cm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygp
IGNvbnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNv
bnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KTsKKyAg
ICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisKKyAgICBCYXNpY0Js
b2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9j
ayomIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KTsKKyAgICBTdWNjZXNzb3JDb2xsZWN0
aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpOworICAgIFN1
Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4g
c3VjY2Vzc29yQmxvY2tzKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMo
KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2Nr
KiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3Nv
cnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4
KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nv
ckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4
XTsgfQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVk
ZWNlc3NvcnNbaW5kZXhdOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sq
KTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJl
cGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAg
ICBkb3VibGUgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwor
ICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZpYSBQcm9jZWR1cmUuCisgICAgQmFzaWNCbG9jayh1
bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIFZhbHVlTGlzdCBtX3ZhbHVlczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNl
c3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxv
Y2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoQmFzaWNCbG9jayogYmxv
Y2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykK
KyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7Cit9OworCitEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoQmFzaWNC
bG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzQmFzaWNCbG9jaworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2NrSW5s
aW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxv
Y2s6OmFwcGVuZE5ldyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKK3sKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihh
cmd1bWVudHMuLi4pOworICAgIGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3Vuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJl
dHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitG
cmVxdWVudGVkQmxvY2sgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25z
dAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGlu
ZGV4KTsKK30KKworRnJlcXVlbnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNj
ZXNzb3IoaW5kZXgpOworfQorCitjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNp
Y0Jsb2NrOjpzdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250
cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworQmFzaWNCbG9jayogQmFzaWNCbG9jazo6
c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1Y2Nl
c3NvcihpbmRleCkuYmxvY2soKTsKK30KKworQmFzaWNCbG9jayomIEJhc2ljQmxvY2s6OnN1Y2Nl
c3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBzdWNjZXNzb3IoaW5kZXgp
LmJsb2NrKCk7Cit9CisKK1N1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29y
TGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkKK3sKKyAgICByZXR1cm4gU3VjY2Vz
c29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihzdWNjZXNzb3JzKCkpOwor
fQorCitTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nv
ckxpc3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlz
dD4oc3VjY2Vzc29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisj
ZGVmaW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRkUHJlZGVjZXNzb3IoQmFz
aWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIEJhc2ljQmxv
Y2s6OkFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsK
KworICAgIGlmIChwcmVkZWNlc3NvcnMuY29udGFpbnMocHJlZGVjZXNzb3IpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBwcmVkZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wg
cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yKQoreworICAgIEJhc2ljQmxvY2s6OkFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycyA9IGJs
b2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVj
ZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gcHJl
ZGVjZXNzb3IpIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpLS1dID0gcHJlZGVjZXNzb3Jz
Lmxhc3QoKTsKKyAgICAgICAgICAgIHByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgICAg
ICAgICBBU1NFUlQoIXByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBsYWNlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
eworICAgIEJhc2ljQmxvY2s6OkFkamFjZW5jeUxpc3QmIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5w
cmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3Jz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgewor
ICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVj
b21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNo
YWJsZS4KK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmls
aXR5KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAg
Ly8gQ2xlYXIgYWxsIHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBibG9ja3MpCisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUo
MCk7CisKKyAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0JvY2sqLCBJbmRleFNldDxCYXNpY0Js
b2NrPj4gd29ya2xpc3Q7CisgICAgd29ya2xpc3Qubm9kZShibG9ja3NbMF0pOworICAgIHdoaWxl
IChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIGZvciAoQmFz
aWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAg
ICAgICBpZiAod29ya2xpc3QuYWRkKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3VjY2Vz
c29yLT5wcmVkZWNlc3NvcnMoKS5hcHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoYmxvY2tzW2ldLnByZWRlY2Vzc29ycy5pc0VtcHR5KCkpCisgICAgICAgICAgICBibG9j
a3NbaV0gPSBudWxscHRyOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrVXRpbHNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jsb2NrV29ya2xpc3RfaAorI2RlZmlu
ZSBCM0Jsb2NrV29ya2xpc3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3Jh
cGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitzdHJ1Y3QgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29y
a2xpc3Q7CisKKy8vIFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ugc2hvdWxkIHJlYWQg
aXQgYXMgImJsb2NrIHdpdGggYW4gaW50Ii4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJs
b2NrV2l0aCA9IEdyYXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OworCisvLyBFeHRlbmRlZCBi
bG9jayB3b3JrbGlzdCBpcyB1c2VmdWwgZm9yIGVucXVldWVpbmcgc29tZSBtZXRhLWRhdGEgYWxv
bmcgd2l0aCB0aGUgYmxvY2suIEl0IGFsc28KKy8vIHBlcm1pdHMgZm9yY2libHkgZW5xdWV1ZWlu
ZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJdCdzIHVz
ZWZ1bCBmb3IKKy8vIHRoaW5ncyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwgaW4gd2hp
Y2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQorLy8gc3VjY2Vz
c29yIGluZGV4LgordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmts
aXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8
QmFzaWNCbG9jaz4+OworCit0eXBlZGVmIEdyYXBoVmlzaXRPcmRlciBWaXNpdE9yZGVyOworCit0
eXBlZGVmIEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7CisK
K3R5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0
PEJhc2ljQmxvY2s+PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jsb2Nr
V29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3Bl
Y2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25h
bWVzcGFjZSB7CisKK3Vuc2lnbmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQoreworICAgIHN3aXRj
aCAoaW5zdC5vcmlnaW4tPm9wY29kZSgpKSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNl
IENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiAyOworICAgIGNh
c2UgQ2hlY2s6CisgICAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0NoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFp
cjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncykKKyAgICA6IG1fY2hlY2tPcGNvZGUo
b3Bjb2RlKQorICAgICwgbV9udW1DaGVja0FyZ3MobnVtQXJncykKK3sKK30KKworQ2hlY2tTcGVj
aWFsOjp+Q2hlY2tTcGVjaWFsKCkKK3sKK30KKworSW5zdCBDaGVja1NwZWNpYWw6OmhpZGRlbkJy
YW5jaChjb25zdCBJbnN0JiBpbnN0KSBjb25zdAoreworICAgIEluc3QgaGlkZGVuQnJhbmNoKG1f
Y2hlY2tPcGNvZGUsIGluc3Qub3JpZ2luKTsKKyAgICBoaWRkZW5CcmFuY2guYXJncy5yZXNpemUo
bV9udW1DaGVja0FyZ3MpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbnVtQ2hlY2tBcmdzOyBp
LS07KQorICAgICAgICBoaWRkZW5CcmFuY2guYXJnc1tpXSA9IGluc3QuYXJnc1tpICsgMV07Cisg
ICAgcmV0dXJuIGhpZGRlbkJyYW5jaDsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmZvckVhY2hB
cmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4m
IGNhbGxiYWNrKQoreworICAgIGhpZGRlbkJyYW5jaChpbnN0KS5mb3JFYWNoQXJnKGNhbGxiYWNr
KTsKKyAgICBmb3JFYWNoQXJnSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsg
MSwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29sIENoZWNrU3BlY2lhbDo6aXNWYWxpZChJbnN0
JiBpbnN0KQoreworICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuaXNWYWxpZCgpCisgICAg
ICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBp
bnN0KTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVu
c2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChhcmdJbmRleCA+PSAxICYmIGFyZ0luZGV4IDwg
MSArIG1fbnVtQ2hlY2tBcmdzKQorICAgICAgICByZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmFk
bWl0c1N0YWNrKGFyZ0luZGV4IC0gMSk7CisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbChudW1C
M0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgYXJnSW5kZXgpOworfQorCitD
Q2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2Fs
bEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGZhaWwgPSBoaWRkZW5CcmFuY2goaW5zdCkuZ2VuZXJhdGUoaml0LCBjb250
ZXh0KTsKKyAgICBBU1NFUlQoZmFpbC5pc1NldCgpKTsKKworICAgIFZhbHVlKiB2YWx1ZSA9IGlu
c3Qub3JpZ2luOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAgIGlmIChpc0NoZWNr
TWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0g
Q2hlY2tNdWwpCisgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcCgpKTsKKyAgICAgICAg
ZWxzZSBpZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNrU3ViICYmIHZhbHVlLT5hcmdzWzBdLT5p
c0ludCgwKSkKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0
LmNvZGUsIGluc3QuYXJnc1syXSkpOworICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoY29u
dGV4dC5jb2RlLCBpbnN0LmFyZ3NbMV0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQo
dmFsdWUtPm9wY29kZSgpID09IENoZWNrKTsKKyAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6
OmNvbnN0YW50KDEpKTsKKyAgICB9CisKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBtX251
bUNoZWNrQXJncyArIDEsIGluc3QsIHJlcHMpOworICAgIAorICAgIGNvbnRleHQubGF0ZVBhdGhz
LmFwcGVuZCgKKyAgICAgICAgY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0aW9uQ29udGV4dDo6TGF0
ZVBhdGhGdW5jdGlvbj4oCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBHZW5l
cmF0aW9uQ29udGV4dCYgY29udGV4dCkgeworICAgICAgICAgICAgICAgIGZhaWwubGluaygmaml0
KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBTdGFja21hcCogc3RhY2ttYXAg
PSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RhY2ttYXApOwor
CisgICAgICAgICAgICAgICAgU3RhY2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAg
ICAgICAgICAgICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHBhcmFt
cy5zdGFja21hcCA9IHN0YWNrbWFwOworICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVw
czsKKyAgICAgICAgICAgICAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3Vz
ZWRSZWdpc3RlcnM7CisKKyAgICAgICAgICAgICAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1
bihqaXQsIHBhcmFtcyk7CisgICAgICAgICAgICB9KSk7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFs
OjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2No
ZWNrT3Bjb2RlLCAiKCIsIG1fbnVtQ2hlY2tBcmdzLCAiKSIpOworfQorCit2b2lkIENoZWNrU3Bl
Y2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0aCAi
LCBtX251bUNoZWNrQXJncywgIiBhcmdzLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M0NoZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3Bl
Y2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ugd2FudCB0
byBsb3dlciBDaGVjayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVuIHdlIHdhbnQg
dG8gcm91dGUgdGhhdCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2RlIGluc3RlYWQg
b2YgZG9pbmcgYW55dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNrU3BlY2lhbCB3
aWxsIHJlbWVtYmVyCisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2VsZWN0ZWQgYWxv
bmcgd2l0aCB0aGUgbnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdhbnQuIEl0Cisv
LyB3aWxsIGNyZWF0ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUgYXBwcm9wcmlh
dGUgYXJncyBmcm9tIHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNhbGwgYW55IG9m
IHRoZSBjYWxsYmFja3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwgQ2hlY2tTdWIs
IGFuZCBDaGVja011bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFyZSB0aGUgcmV2
ZXJzZQorLy8gb2YgdGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQzMiBiLCBhKS4g
RXhjZXB0OgorLy8gLSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBCcmFuY2hOZWcz
MiB4LgorLy8gLSBDaGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwzMiBiLCBhIGJ1
dCB3ZSBwYXNzIEFueSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1NwZWNpYWwgOiBw
dWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNpYWwoQWlyOjpP
cGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisK
KyAgICAvLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUg
YnJhbmNoIHRoYXQgdGhpcyB3aWxsIHVzZS4KKyAgICBJbnN0IGhpZGRlbkJyYW5jaChjb25zdCBJ
bnN0JikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0
JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJy
aWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFk
bWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAg
IC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJy
YW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMg
dGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbGVwcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJy
aWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgQWlyOjpPcGNvZGUgbV9jaGVja09wY29kZTsKKyAgICB1bnNpZ25lZCBtX251
bUNoZWNrQXJnczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tTcGVjaWFsX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitD
aGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1l
dGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0g
Iiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrVmFsdWVfaAorI2RlZmlu
ZSBCM0NoZWNrVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIENoZWNrIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNlIENoZWNr
U3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisgICAgU3Rh
Y2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2Nl
ZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5k
IENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQobGVmdC0+
dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNr
QWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOworICAgIH0K
KworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUp
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUp
CisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
bW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBzaG91bGREdW1wSVIoKQorewor
ICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBGVEw6OnNob3Vs
ZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jv
b2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjpkdW1w
R3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVIoKQoreworICAg
IHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkgfHwgc2hvdWxkVmFsaWRhdGVJUkF0RWFj
aFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkKK3sKKyAg
ICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wg
c2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2ZXJib3Nl
VmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21t
b24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVmaW5lIEIzQ29t
bW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFz
ZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVJBdEVh
Y2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0NvbW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZp
dHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0
aXZpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
bXV0YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBu
YW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNvbW11dGF0aXZp
dHkpIHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIkNvbW11dGF0
aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZlOgorICAgICAg
ICBvdXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDb21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIENvbW11
dGF0aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZlCit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50
U3RyZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6Q29tbXV0
YXRpdml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIu
cGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBDb21wYXJpc29uTWF0Y2hlcgorCitUZXN0
TG9hZE5vdFplcm8xID0gQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorVGVzdExvYWROb3RaZXJv
MiA9IEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorVGVzdE5vdFplcm8gPSBBbmQobGVmdCwgcmln
aHQpCisKK1Rlc3RMb2FkWmVybzEgPSBFcXVhbChBbmQoTG9hZChhZGRyZXNzKSwgcmlnaHQpLCAk
MCkKK1Rlc3RMb2FkWmVybzIgPSBFcXVhbChBbmQobGVmdCwgTG9hZChhZGRyZXNzKSksICQwKQor
VGVzdFplcm8gPSBFcXVhbChBbmQobGVmdCwgcmlnaHQpLCAkMCkKKworTG9hZEVxdWFsMSA9IEVx
dWFsKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorTG9hZEVxdWFsMiA9IEVxdWFsKGxlZnQsIExvYWQo
YWRkcmVzcykpCitOb3QgPSBFcXVhbCh2YWx1ZSwgJDApCitFcXVhbCA9IEVxdWFsKGxlZnQsIHJp
Z2h0KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sK
K30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09
IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJf
dCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4
LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAg
eworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Nv
bnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2
NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6On5Db25zdDY0VmFs
dWUoKQoreworfQorCit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQ29uc3Q2NFZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0NjRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBv
cGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25zdDY0VmFsdWUoKTsKKyAgICAKKyAg
ICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0VmFsdWUodW5z
aWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1
ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitD
b25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3RE
b3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdERvdWJsZVZhbHVlIDogcHVibGlj
IFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUp
IHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQorICAgIAorICAgIH5Db25zdERvdWJs
ZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAg
ICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBkb3VibGUg
dmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdp
bikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZG91
YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29udHJv
bFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBD
b250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29t
bWFQcmludGVyIGNvbW1hOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3N1Y2Nlc3Nv
cnMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoYmxvY2spKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29udHJvbFZhbHVlX2gKKyNkZWZpbmUgQjNDb250cm9s
VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJs
b2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKworY2xhc3MgQ29udHJvbFZhbHVlIDogcHVibGlj
IFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIEp1bXA6Cisg
ICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBP
b3BzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU3dpdGNoOiAKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEgc3ViY2xh
c3Mgb2YgQ29udHJvbFZhbHVlLCBzbyB3ZSB3YW50CisgICAgICAgICAgICAvLyBzd2l0Y2hWYWx1
ZS0+YXM8Q29udHJvbFZhbHVlPigpIHRvIHJldHVybiBub24tbnVsbC4KKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAy
PiBTdWNjZXNzb3JMaXN0OworCisgICAgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQg
bnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAg
ICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3N1Y2Nlc3NvcnNbaV07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNp
Z25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2ldOyB9CisgICAgY29uc3QgU3VjY2Vz
c29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2Rl
IG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRz
Li4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhp
cy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29u
dHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAg
ICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9y
IFJldHVybi4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9w
Y29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2Rl
ID09IFJldHVybik7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29u
dHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBC
YXNpY0Jsb2NrKiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAg
bV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZv
ciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgQmFz
aWNCbG9jayogeWVzLCBCYXNpY0Jsb2NrKiBubykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bj
b2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNv
ZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAg
ICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnRy
b2xWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNs
YXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVu
Y3lDbGFzcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNG
cmVxdWVuY3lDbGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3kpCit7CisgICAgc3dpdGNoIChmcmVxdWVuY3kp
IHsKKyAgICBjYXNlIEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWw6CisgICAgICAgIG91dC5wcmludCgi
Tm9ybWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZyZXF1ZW5jeUNsYXNzOjpSYXJl
OgorICAgICAgICBvdXQucHJpbnQoIlJhcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzRnJlcXVlbmN5Q2xhc3NfaAorI2RlZmluZSBCM0ZyZXF1ZW5jeUNsYXNzX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IGNsYXNzIEZyZXF1ZW5jeUNsYXNzIDogdWludDhfdCB7CisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBh
bnkgaHlwb3RoZXNpcyBhYm91dCB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY29udHJvbCBmbG93IGNv
bnN0cnVjdC4gVGhpcyBpcworICAgIC8vIHRoZSBjb21tb24gY2FzZS4gV2UgY2FuIHN0aWxsIHVz
ZSBiYXNpYyBibG9jayBmcmVxdWVuY3kgaW4gdGhpcyBjYXNlLgorICAgIE5vcm1hbCwKKworICAg
IC8vIFdlIGV4cGVjdCB0aGF0IHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVjdCB3aWxsIGJlIHJl
YWNoZWQgc3VwZXIgcmFyZWx5LiBJdCdzIHZhbGlkIHRvCisgICAgLy8gcGVyZm9ybSBvcHRpbWl6
YXRpb25zIHRoYXQgcHVuaXNoIFJhcmUgY29kZS4gTm90ZSB0aGF0IHRoZXJlIHdpbGwgYmUgc2l0
dWF0aW9ucyB3aGVyZSB5b3UKKyAgICAvLyBoYXZlIHRvIHNvbWVob3cgY29uc3RydWN0IGEgbmV3
IGZyZXF1ZW5jeSBjbGFzcyBmcm9tIGEgbWVyZ2luZyBvZiBtdWx0aXBsZSBjbGFzc2VzLiBXaGVu
CisgICAgLy8gdGhpcyBoYXBwZW5zLCBuZXZlciBjaG9vc2UgUmFyZTsgYWx3YXlzIGdvIHdpdGgg
Tm9ybWFsLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlCisgICAgLy8gcmVhbGx5IGRvIHB1
bmlzaCBSYXJlIGNvZGUgdmVyeSBiYWRseS4KKyAgICBSYXJlCit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpGcmVxdWVuY3lDbGFzcyk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzRnJlcXVlbmN5Q2xhc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0ZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEIzRnJlcXVlbnRlZEJsb2NrX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7
CisKK3R5cGVkZWYgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVk
QmxvY2s7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisj
aW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNs
dWRlICJCM1ZhbGlkYXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2
b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sK
KyAgICBBaXI6OkNvZGUgY29kZTsKKyAgICBnZW5lcmF0ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7
CisgICAgQWlyOjpnZW5lcmF0ZShjb2RlLCBqaXQpOworfQorCit2b2lkIGdlbmVyYXRlVG9BaXIo
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFpcjo6Q29kZSYgY29kZSkKK3sKKyAgICBpZiAoc2hvdWxk
VmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJpbml0aWFsIik7CisK
KyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBCMzpc
biIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorICAgIAorICAgIC8vIEZJ
WE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworCisgICAgaWYgKHNob3VsZFZhbGlkYXRl
SVIoKSkKKyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlLCAiZmluYWwiKTsKKyAgICAKKyAgICBp
ZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQjMgYmVmb3JlIGdlbmVyYXRp
b246XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIGxvd2Vy
VG9BaXIocHJvY2VkdXJlLCBjb2RlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0dlbmVyYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyYXRlX2gKKyNk
ZWZpbmUgQjNHZW5lcmF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9j
ZWR1cmU7CituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIHRha2VzIGEg
QjM6OlByb2NlZHVyZSwgb3B0aW1pemVzIGl0IGluLXBsYWNlLCBhbmQgZ2VuZXJhdGVzIGl0IHRv
IG1hY2hpbmUgY29kZSBieSBmaXJzdAorLy8gaW50ZXJuYWxseSBjb252ZXJ0aW5nIHRvIGFuIEFp
cjo6Q29kZSBhbmQgdGhlbiBnZW5lcmF0aW5nIHRoYXQuCit2b2lkIGdlbmVyYXRlKFByb2NlZHVy
ZSYsIENDYWxsSGVscGVycyYpOworCisvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBhbmQgbG93ZXJzIGl0IHRvIEFpci4gWW91IGNhbiB0aGVuIGdl
bmVyYXRlCisvLyB0aGUgQWlyIHRvIG1hY2hpbmUgY29kZSB1c2luZyBBaXI6OmdlbmVyYXRlKCku
IE5vdGUgdGhhdCBhbiBBaXI6OkNvZGUgd2lsbCBoYXZlIHBvaW50ZXJzIGludG8gdGhlCisvLyBC
Mzo6UHJvY2VkdXJlLCBzbyB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQjM6OlByb2NlZHVy
ZSBvdXRsaXZlcyB0aGUgQWlyOjpDb2RlLgordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYs
IENvZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNHZW5lcmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9j
a19oCisjZGVmaW5lIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVx
dWVudGVkIGJsb2NrIGlzIGEgdHVwbGUgb2YgQmFzaWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNz
LiBJdCdzIHVzdWFsbHkgdXNlZCBhcyBhCisvLyBzdWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8
dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVi
bGljOgorICAgIGV4cGxpY2l0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2soCisgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbnVsbHB0ciwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVl
bmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1f
ZnJlcXVlbmN5KGZyZXF1ZW5jeSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIG1fYmxvY2sgPT0gb3RoZXIubV9ibG9jaworICAgICAgICAgICAgJiYgbV9mcmVx
dWVuY3kgPT0gb3RoZXIubV9mcmVxdWVuY3k7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IEdlbmVyaWNG
cmVxdWVudGVkQmxvY2soKTsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVybiBt
X2Jsb2NrOyB9CisgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4g
bV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGZyZXF1ZW5jeSgpICE9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwp
CisgICAgICAgICAgICBvdXQucHJpbnQoZnJlcXVlbmN5KCksICI6Iik7CisgICAgICAgIG91dC5w
cmludChwb2ludGVyRHVtcChtX2Jsb2NrKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2lj
QmxvY2sqIG1fYmxvY2s7CisgICAgRnJlcXVlbmN5Q2xhc3MgbV9mcmVxdWVuY3k7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0luZGV4TWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNJbmRleE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4
TWFwX2gKKyNkZWZpbmUgQjNJbmRleE1hcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIG1hcCBmb3Iga2V5cyB0
aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tz
LiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUg
dG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkKKy8vIHNw
YXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5kZXhNYXAgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkKKyAgICB7CisgICAgICAgIG1f
dmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6
ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBW
YWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3Rv
cltrZXktPmluZGV4KCldOworICAgIH0KKyAgICAKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3Jb
XShLZXkqIGtleSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmlu
ZGV4KCldOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX3ZlY3Rv
cjsKK307CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gK
KworI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0
IGZvciB0aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZv
ciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3Ug
ZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2
ZSB2ZXJ5IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4K
KworLy8gSWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxC
YXNpY0Jsb2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Ns
YXNzIEluZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKwor
ICAgIGJvb2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQo
dmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBjbGFzcyBJdGVyYWJsZSB7
CisgICAgcHVibGljOgorICAgICAgICBJdGVyYWJsZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29s
bGVjdGlvbiwgY29uc3QgSW5kZXhTZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9u
KGNvbGxlY3Rpb24pCisgICAgICAgICAgICAsIG1fc2V0KHNldCkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29u
c3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxl
OjppdGVyYXRvciBpdGVyKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0
aW9uKQorICAgICAgICAgICAgICAgICwgbV9pdGVyKGl0ZXIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRlcik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtX2l0ZXIrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1faXRlciA9PSBvdGhlci5tX2l0ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlw
ZSogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6
Oml0ZXJhdG9yIG1faXRlcjsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuYmVnaW4oKSk7IH0K
KyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0
aW9uLCBtX3NldC5lbmQoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvbGxl
Y3Rpb25UeXBlJiBtX2NvbGxlY3Rpb247CisgICAgICAgIGNvbnN0IEluZGV4U2V0JiBtX3NldDsK
KyAgICB9OworCisgICAgLy8gRm9yIGJhc2ljIGJsb2NrcywgeW91IGRvOgorICAgIC8vIGluZGV4
U2V0LnZhbHVlcyhwcm9jZWR1cmUpOworICAgIC8vCisgICAgLy8gRm9yIHZhbHVlcywgeW91IGRv
OgorICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUudmFsdWVzKCkpOworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBl
PiB2YWx1ZXMoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+KGNvbGxlY3Rpb24pOworICAg
IH0KKworICAgIGNvbnN0IEJpdFZlY3RvciYgaW5kaWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0
OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBpbmRp
Y2VzKCkuc2V0Qml0cygpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBUOjpkdW1wUHJl
Zml4LCBpbmRleCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJpdFZlY3RvciBtX3NldDsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNJbmRleFNldF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJU
b0Fpci5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJCM0FkZHJlc3NNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNMb3dlcmluZ01hdGNoZXIu
aCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTG93
ZXJUb0FpciB7CitwdWJsaWM6CisgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwg
Q29kZSYgY29kZSkKKyAgICAgICAgOiB2YWx1ZVRvVG1wKGNvZGUudmFsdWVzKCkuc2l6ZSgpKQor
ICAgICAgICAsIGJsb2NrVG9CbG9jayhjb2RlLnNpemUoKSkKKyAgICAgICAgLCB1c2VDb3VudHMo
cHJvY2VkdXJlKQorICAgICAgICAsIGFkZHJlc3NTZWxlY3RvcigqdGhpcykKKyAgICAgICAgLCBs
b3dlcmluZ1NlbGVjdG9yKCp0aGlzKQorICAgICAgICAsIHByb2NlZHVyZShwcm9jZWR1cmUpCisg
ICAgICAgICwgY29kZShjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisgICAg
eworICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZSkKKyAgICAg
ICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10gPSBjb2RlLmFkZEJsb2NrKGJsb2NrLT5mcmVxdWVu
Y3koKSk7CisKKyAgICAgICAgLy8gTG93ZXIgZGVmcyBiZWZvcmUgdXNlcyBvbiBhIGdsb2JhbCBs
ZXZlbC4gVGhpcyBpcyBhIGdvb2QgaGV1cmlzdGljIHRvIGxvY2sgZG93biBhCisgICAgICAgIC8v
IGhvaXN0ZWQgYWRkcmVzcyBleHByZXNzaW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBp
bnRvIHRoZSBsb29wLgorICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2Nl
ZHVyZS5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3Rh
dGUuCisgICAgICAgICAgICBpbnN0cy5yZXNpemUoMCk7CisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFByb2Nlc3MgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVm
b3JlIGRlZnMuIFRoYXQncyB3aGF0IGFsbG93cyB1cworICAgICAgICAgICAgLy8gdG8gbWF0Y2gg
cGF0dGVybnMgZWZmZWN0aXZlbHkuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9j
ay0+c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgaW5zdHMuYXBwZW5kKFZlY3RvcjxJ
bnN0PigpKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBibG9jay0+YXQoaSk7Cisg
ICAgICAgICAgICAgICAgcnVuTG93ZXJpbmdNYXRjaGVyKGN1cnJlbnRWYWx1ZSwgbG93ZXJpbmdT
ZWxlY3Rvcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhl
IGluc3RydWN0aW9ucy4gaW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3
ZSBwcm9jZXNzCisgICAgICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgorICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gaW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgZm9y
IChJbnN0JiBpbnN0IDogaW5zdHNbaV0pCisgICAgICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9j
a1tibG9ja10tPmFwcGVuZEluc3QoV1RGOjptb3ZlKGluc3QpKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBj
b3JyZWN0bHkuCisgICAgICAgICAgICBBU1NFUlQoYmxvY2stPnN1Y2Nlc3NvcnMoKSA8PSAyKTsK
KyAgICAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNj
ZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNj
ZXNzb3JzKCkuYXBwZW5kKGJsb2NrVG9CbG9ja1tzdWNjZXNzb3JdKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIFRtcCB0bXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgVG1wJiB0bXAg
PSB2YWx1ZVRvVG1wW3ZhbHVlXTsKKyAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAgICB0bXAg
PSBjb2RlLm5ld1RtcChpc0ludCh2YWx1ZSkgPyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgICAg
IHJldHVybiB0bXA7CisgICAgfQorCisgICAgLy8gVGhpcyBnaXZlcyB5b3UgdGhlIGFkZHJlc3Mg
b2YgdGhlIGdpdmVuIExvYWQgb3IgU3RvcmUuIElmIGl0J3Mgbm90IGEgTG9hZCBvciBTdG9yZSwg
dGhlbgorICAgIC8vIGl0IHJldHVybnMgQXJnKCkuCisgICAgQXJnIGFkZHIoVmFsdWUqIG1lbW9y
eVZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIHZhbHVlID0gbWVtb3J5VmFsdWUt
PmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIEFyZygpOworCisgICAgICAgIHJ1bkFkZHJlc3NNYXRjaGVyKHZhbHVlLT5jaGlsZHJlbi5s
YXN0KCksIGFkZHJlc3NTZWxlY3Rvcik7CisgICAgICAgIHJldHVybiBhZGRyZXNzU2VsZWN0b3Iu
c2VsZWN0ZWRBZGRyZXNzLndpdGhPZmZzZXQodmFsdWUtPm9mZnNldCgpKTsKKyAgICB9CisKKyAg
ICBBcmcgbG9hZEFkZHIoVmFsdWUqIGxvYWRWYWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChsb2Fk
VmFsdWUtPm9wY29kZSgpID09IExvYWQpCisgICAgICAgICAgICByZXR1cm4gYWRkcihsb2FkVmFs
dWUpOworICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgfQorCisgICAgQXJnIGltbShWYWx1ZSog
dmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkpCisgICAgICAgICAg
ICByZXR1cm4gQXJnOjpJbW0odmFsdWUtPmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiBBcmco
KTsKKyAgICB9CisKKyAgICBBcmcgaW1tT3JUbXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKEFyZyByZXN1bHQgPSBpbW0odmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICAgICAgcmV0dXJuIHRtcCh2YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8T3Bj
b2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+
CisgICAgdm9pZCBhcHBlbmRCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsK
KyAgICAgICAgVG1wIHJlc3VsdCA9IHRtcChjdXJyZW50VmFsdWUpOworICAgICAgICAKKyAgICAg
ICAgLy8gVGhyZWUtb3BlcmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAgICAgT3AgYSwgYiwg
YworICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAgICAgYyA9IGEg
T3AgYgorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRt
cCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRh
dGl2ZSkgeworICAgICAgICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7CisgICAgICAgICAgICAg
ICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQSBub24tY29tbXV0YXRpdmUgb3BlcmF0aW9u
IGNvdWxkIGhhdmUgYW4gaW1tZWRpYXRlIGluIGxlZnQuCisgICAgICAgICAgICAgICAgaWYgKGlt
bShsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0obGVmdCks
IHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW1t
KHJpZ2h0KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpU
bXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIGltbShyaWdodCks
IHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBU
d28tb3BlcmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAgICAgT3AgYSwgYgorICAgICAgICAv
LyBtZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAgICAgYiA9IGIgT3AgYQorCisgICAg
ICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIHByZWZlciB2ZXJzaW9ucyBvZiB0aGUgb3BlcmF0aW9u
IHRoYXQgaGF2ZSBhIGZ1c2VkIGxvYWQgb3ZlciB0aHJlZQorICAgICAgICAvLyBvcGVyYW5kIGZv
cm1zLgorICAgICAgICAKKyAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUp
IHsKKyAgICAgICAgICAgIEFyZyBsZWZ0QWRkciA9IGxvYWRBZGRyKGxlZnQpOworICAgICAgICAg
ICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgbGVmdEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsK
KyAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBsZWZ0QWRkciwgcmVzdWx0KTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBcmcgcmln
aHRBZGRyID0gbG9hZEFkZHIocmlnaHQpOworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2Rl
LCByaWdodEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChNb3Zl
LCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCByaWdodEFk
ZHIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgewor
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmlnaHQpLCByZXN1bHQp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYXBwZW5kKE1vdmUs
IHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHJpZ2h0KSwg
cmVzdWx0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxPcGNvZGUgb3Bjb2RlLCBDb21tdXRhdGl2
aXR5IGNvbW11dGF0aXZlID0gTm90Q29tbXV0YXRpdmU+CisgICAgYm9vbCB0cnlBcHBlbmRTdG9y
ZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBBcmcgc3Rv
cmVBZGRyID0gYWRkcihjdXJyZW50VmFsdWUpOworICAgICAgICBBU1NFUlQoc3RvcmVBZGRyKTsK
KworICAgICAgICBWYWx1ZSogb3RoZXJWYWx1ZTsKKyAgICAgICAgaWYgKGFkZHIobGVmdCkgPT0g
c3RvcmVBZGRyKQorICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IHJpZ2h0OworICAgICAgICBlbHNl
IGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlICYmIGFkZHIocmlnaHQpID09IHN0b3Jl
QWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSBsZWZ0OworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUs
IEFyZzo6VG1wLCBzdG9yZUFkZHIua2luZCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAob3RoZXJWYWx1ZSksIHN0b3JlQWRkcik7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKEluc3Qob3Bjb2Rl
LCBjdXJyZW50VmFsdWUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsK
KyAgICB9CisgICAgCisgICAgSW5kZXhTZXQ8VmFsdWU+IGxvY2tlZDsgLy8gVGhlc2UgYXJlIHZh
bHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgorICAgIEluZGV4TWFwPFZhbHVlLCBU
bXA+IHZhbHVlVG9UbXA7CisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2ssIEFpcjo6QmFzaWNC
bG9jayo+IGJsb2NrVG9CbG9jazsKKworICAgIFVzZUNvdW50cyB1c2VDb3VudHM7CisKKyAgICBW
ZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBpbnN0czsKKworICAgIFZhbHVlKiBjdXJyZW50VmFsdWU7
CisKKyAgICAvLyBUaGUgYWRkcmVzcyBzZWxlY3RvciB3aWxsIG1hdGNoIGFueSBwYXR0ZXJuIHdo
ZXJlIHRoZSBpbnB1dCBvcGVyYW5kcyBhcmUgYXZhaWxhYmxlIGFzIFRtcHMuCisgICAgLy8gSXQg
ZG9lc24ndCBjYXJlIGFib3V0IHNoYXJpbmcuIEl0IHdpbGwgaGFwcGlseSBlbWl0IHRoZSBzYW1l
IGFkZHJlc3MgZXhwcmVzc2lvbiBvdmVyIGFuZCBvdmVyCisgICAgLy8gYWdhaW4gcmVnYXJkbGVz
cyBvZiB0aGUgZXhwcmVzc2lvbidzIGNvbXBsZXhpdHkuIFRoaXMgd29ya3Mgb3V0IGZpbmUsIHNp
bmNlIGF0IHRoZSBtYWNoaW5lCisgICAgLy8gbGV2ZWwsIGFkZHJlc3MgZXhwcmVzc2lvbnMgYXJl
IHN1cGVyIGNoZWFwLiBIb3dldmVyLCB0aGlzIGRvZXMgaGF2ZSBhIGhhY2sgdG8gYXZvaWQKKyAg
ICAvLyAidW5ob2lzdGluZyIgYWRkcmVzcyBleHByZXNzaW9ucy4KKyAgICBjbGFzcyBBZGRyZXNz
U2VsZWN0b3IgeworICAgICAgICBBZGRyZXNzU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIpCisg
ICAgICAgICAgICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIGFjY2VwdHNSb290KFZhbHVlKiByb290KQorICAgICAgICB7CisgICAgICAgICAgICAv
LyBXZSBkb24ndCB3YW50IHRvIG1hdGNoIGFuIGFkZHJlc3MgZXhwcmVzc2lvbiB0aGF0IGhhcyBh
bHJlYWR5IGJlZW4gY29tcHV0ZWQKKyAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkuCisgICAgICAg
ICAgICByZXR1cm4gIXZhbHVlVG9UbXBbcm9vdF07CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGFjY2VwdFJvb3RMYXRlKFZhbHVlKikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUs
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh2YWx1
ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICByZXRydW4gYWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAg
ICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFs
c0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG93ZXIubG9j
a2VkLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gYWNjZXB0T3BlcmFuZHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQor
ICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRPcGVy
YW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MShW
YWx1ZSogaW5kZXgsIFZhbHVlKiBsb2dTY2FsZSwgVmFsdWUqIGJhc2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChsb2dTY2FsZS0+YXNJbnQoKSA8IDAgfHwgbG9nU2NhbGUtPmFzSW50KCkg
PiAzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNlbGVjdGVk
QWRkcmVzcyA9IEFyZzo6aW5kZXgoCisgICAgICAgICAgICAgICAgbG93ZXIudG1wKGluZGV4KSwg
bG93ZXIudG1wKGluZGV4KSwgMSA8PCBsb2dTY2FsZS0+YXNJbnQoKSk7CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQyKFZhbHVl
KiBiYXNlLCBWYWx1ZSogaW5kZXgsIHZhbHVlKiBsb2dTY2FsZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIHRyeUFkZFNoaWZ0MShpbmRleCwgbG9nU2NhbGUsIGJhc2UpOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKHJpZ2h0LT5oYXNJbnQzMigpKSB7CisgICAgICAgICAg
ICAgICAgLy8gVGhpcyBwcm9kdWN0aW9uIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5jZSB3
ZSBleHBlY3QKKyAgICAgICAgICAgICAgICAvLyBMb2FkKEFkZChAeCwgQGNvbnN0MSksIG9mZnNl
dCA9IGNvbnN0MikgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gc3RyZW5ndGgtcmVkdWNlZAorICAgICAg
ICAgICAgICAgIC8vIHRvIExvYWQoQHgsIG9mZnNldCA9IGNvbnN0MSArIGNvbnN0MikuCisgICAg
ICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChsZWZ0KSwg
cmlnaHQtPmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6aW5kZXgobG93ZXIu
dG1wKGxlZnQpLCBsb3dlci50bXAocmlnaHQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlEaXJlY3QoVmFsdWUqIGFkZHJlc3MpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihhZGRyZXNzKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBM
b3dlclRvQWlyJiBsb3dlcjsKKyAgICAgICAgQXJnIHNlbGVjdGVkQWRkcmVzczsKKyAgICB9Owor
ICAgIEFkZHJlc3NTZWxlY3RvciBhZGRyZXNzU2VsZWN0b3I7CisKKyAgICAvLyBUaGlzIHdpbGwg
bWF0Y2ggY29tcGxleCBtdWx0aS12YWx1ZSBleHByZXNzaW9ucywgYnV0IG9ubHkgaWYgdGhlcmUg
aXMgbm8gc2hhcmluZy4gRm9yIGV4YW1wbGUsCisgICAgLy8gaXQgd29uJ3QgbWF0Y2ggYSBMb2Fk
IHR3aWNlIGFuZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gZG8gdHdvIGxvYWRzIHdoZW4g
dGhlIG9yaWdpbmFsCisgICAgLy8gY29kZSBqdXN0IGRpZCBvbmUuCisgICAgY2xhc3MgTG93ZXJp
bmdTZWxlY3RvciB7CisgICAgcHVibGljOgorICAgICAgICBMb3dlcmluZ1NlbGVjdG9yKExvd2Vy
VG9BaXImIGxvd2VyKQorICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAgICAgeworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFjY2VwdFJvb3QoVmFsdWUqIHJvb3QpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghbG93ZXIubG9ja2VkLmNvbnRhaW5zKHJvb3Qp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBh
Y2NlcHRSb290TGF0ZShWYWx1ZSopIHsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSog
dmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8v
IElmIG9uZSBvZiB0aGUgaW50ZXJuYWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQs
IHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQorICAgICAgICAgICAgLy8gaXQgdG8gYmUgcmVj
b21wdXRlZCBhZ2Fpbi4KKyAgICAgICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3ZhbHVlXSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFdlIHJlcXVpcmUgaW50ZXJuYWxzIHRvIGhhdmUgb25seSBvbmUgdXNlIC0gdXMuCisgICAg
ICAgICAgICBpZiAodXNlQ291bnRzW3ZhbHVlXSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFs
cyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxz
KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoVmFsdWUqIHZh
bHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dl
ci5sb2NrZWQuYWRkKHZhbHVlKTsKKyAgICAgICAgICAgIGFjY2VwdEludGVybmFsc0xhdGUoYXJn
dW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUo
KSB7IH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQuY29udGFp
bnModmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJv
b2wgYWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShB
cmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5TG9hZChWYWx1ZSogYWRkcmVzcykK
KyAgICAgICAgeworICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUsIGFkZHIoYWRkcmVzcyks
IGxvd2VyLnRtcChsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGQoVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh0eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kQmluT3A8QWRkMzIs
IENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVN0b3JlQWRkTG9hZChWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bGVmdC0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAg
IHJldHVybiBsb3dlci50cnlBcHBlbmRTdG9yZUJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVm
dCwgcmlnaHQpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlTdG9yZUFuZExvYWQo
VmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFsdWUqKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbG93ZXIudHJ5QXBwZW5kU3RvcmVCaW5PcDxBbmQzMiwgQ29tbXV0
YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3Rv
cmUoVmFsdWUqIHZhbHVlLCBWYWx1ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd2VyLmFw
cGVuZChNb3ZlLCBsb3dlci50bXAodmFsdWUpLCBsb3dlci5hZGRyKGxvd2VyLmN1cnJlbnRWYWx1
ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHRyeVJldHVybihWYWx1ZSogdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
dmFsdWUtPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGNh
c2UgSW50NjQ6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUsIGltbU9yVG1wKHZh
bHVlKSwgR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1v
dmVEb3VibGUsIGxvd2VyLnRtcCh2YWx1ZSksIEdQUklOZm86OnJldHVyblZhbHVlRlBSKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsb3dlci5hcHBlbmQoUmV0KTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMb3dl
clRvQWlyJiBsb3dlcjsKKyAgICB9OworICAgIExvd2VyaW5nU2VsZWN0b3IgbG93ZXJpbmdTZWxl
Y3RvcjsKKyAgICAKKyAgICBQcm9jZWR1cmUmIHByb2NlZHVyZTsKKyAgICBDb2RlJiBjb2RlOwor
fTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1
cmUmIHByb2NlZHVyZSwgQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
cHJvY2VkdXJlLCAibG93ZXJUb0FpciIpOworICAgIExvd2VyVG9BaXIgbG93ZXJUb0Fpcihwcm9j
ZWR1cmUsIGNvZGUpOworICAgIGxvd2VyVG9BaXIucnVuKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNMb3dlclRvQWlyX2gKKyNkZWZpbmUgQjNMb3dlclRvQWlyX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1
cmU7CituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGxvd2VycyB0aGUg
Y3VycmVudCBCMyBwcm9jZWR1cmUgdG8gYW4gQWlyIGNvZGUuCisKK3ZvaWQgbG93ZXJUb0FpcihQ
cm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNMb3dlclRvQWlyX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5w
YXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2Vy
aW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisjIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5nTWF0Y2hl
cgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcg
YXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50cyB3
aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1h
dGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCisKK0xv
YWQgPSBMb2FkKGFkZHJlc3MpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRM
b2FkID0gU3RvcmUoQWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0
b3JlKEFkZChsZWZ0LCByaWdodCksIGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZhbHVlLCBhZGRy
ZXNzKQorCitSZXR1cm4gPSBSZXR1cm4odmFsdWUpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVl
Ojp+TWVtb3J5VmFsdWUoKQoreworfQorCit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnBy
aW50KCJvZmZzZXQgPSAiLCBtX29mZnNldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM01l
bW9yeVZhbHVlX2gKKyNkZWZpbmUgQjNNZW1vcnlWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0
YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAg
ICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2Ug
TG9hZEZsb2F0OgorICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAg
ICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2Fz
ZSBTdG9yZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZh
bHVlKCk7CisKKyAgICBpbnRwdHJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAv
LyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkg
b2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRo
ZSByZXR1cm5lZCB0eXBlKS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50
ZXIsCisgICAgICAgIGludHB0cl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IG9wY29kZSwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4
UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoK
KyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlQodHlwZSA9PSBEb3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNl
IFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFT
U0VSVCh0eXBlID09IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRz
IHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwg
aW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNv
ZGUgPT0gTG9hZEZsb2F0ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAg
ICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxF
RCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9h
ZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6
CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBz
dG9yZXMuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAg
ICAgICBpbnRwdHJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0
KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3
aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNh
c2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNh
c2UgU3RvcmU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNN
ZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bj
b2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7CisgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgb3V0LnByaW50KCJOb3Ai
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIG91dC5wcmlu
dCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3QzMjoKKyAgICAg
ICAgb3V0LnByaW50KCJDb25zdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0
NjQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3Q2NCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDb25zdERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJDb25zdERvdWJsZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIG91dC5wcmludCgiU3Rh
Y2tTbG90Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZ3VtZW50UmVnOgorICAgICAg
ICBvdXQucHJpbnQoIkFyZ3VtZW50UmVnIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZy
YW1lUG9pbnRlcjoKKyAgICAgICAgb3V0LnByaW50KCJGcmFtZVBvaW50ZXIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWRkOgorICAgICAgICBvdXQucHJpbnQoIkFkZCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTdWI6CisgICAgICAgIG91dC5wcmludCgiU3ViIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE11bDoKKyAgICAgICAgb3V0LnByaW50KCJNdWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgRGl2OgorICAgICAgICBvdXQucHJpbnQoIkRpdiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICAgICAgb3V0LnByaW50KCJD
aGlsbERpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNb2Q6CisgICAgICAgIG91dC5w
cmludCgiTW9kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAg
b3V0LnByaW50KCJCaXRBbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0T3I6Cisg
ICAgICAgIG91dC5wcmludCgiQml0T3IiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0
WG9yOgorICAgICAgICBvdXQucHJpbnQoIkJpdFhvciIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTaGw6CisgICAgICAgIG91dC5wcmludCgiU2hsIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFNTaHI6CisgICAgICAgIG91dC5wcmludCgiU1NociIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBaU2hyOgorICAgICAgICBvdXQucHJpbnQoIlpTaHIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU0V4dDg6CisgICAgICAgIG91dC5wcmludCgiU0V4dDgiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDE2OgorICAgICAgICBvdXQucHJpbnQoIlNFeHQxNiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MzI6CisgICAgICAgIG91dC5wcmludCgi
U0V4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgb3V0
LnByaW50KCJaRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRlJvdW5kOgorICAg
ICAgICBvdXQucHJpbnQoIkZSb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJVG9E
OgorICAgICAgICBvdXQucHJpbnQoIklUb0QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RFRvSTMyOgorICAgICAgICBvdXQucHJpbnQoIkRUb0kzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RFcXVhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJM
ZXNzVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICAg
ICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBM
ZXNzRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc0VxdWFsIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyRXF1
YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJvdmU6CisgICAgICAgIG91dC5wcmlu
dCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3c6CisgICAgICAgIG91
dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJvdmVFcXVhbDoK
KyAgICAgICAgb3V0LnByaW50KCJBYm92ZUVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEJlbG93RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dFcXVhbCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIG91dC5wcmludCgiTG9hZDhaIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgb3V0LnByaW50KCJM
b2FkOFMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgb3V0
LnByaW50KCJMb2FkMTZaIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQxNlM6Cisg
ICAgICAgIG91dC5wcmludCgiTG9hZDE2UyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBM
b2FkRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZEZsb2F0Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIG91dC5wcmludCgiU3RvcmU4Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIG91dC5wcmludCgiU3Rv
cmUxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBv
dXQucHJpbnQoIlN0b3JlRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmU6
CisgICAgICAgIG91dC5wcmludCgiU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q0NhbGw6CisgICAgICAgIG91dC5wcmludCgiQ0NhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUGF0Y2hwb2ludDoKKyAgICAgICAgb3V0LnByaW50KCJQYXRjaHBvaW50Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNr
QWRkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBvdXQu
cHJpbnQoIkNoZWNrU3ViIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrTXVsOgor
ICAgICAgICBvdXQucHJpbnQoIkNoZWNrTXVsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENoZWNrOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFVwc2lsb246CisgICAgICAgIG91dC5wcmludCgiVXBzaWxvbiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBQaGk6CisgICAgICAgIG91dC5wcmludCgiUGhpIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEp1bXA6CisgICAgICAgIG91dC5wcmludCgiSnVtcCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIG91dC5wcmludCgiQnJhbmNo
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgb3V0LnByaW50
KCJTd2l0Y2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBv
dXQucHJpbnQoIlJldHVybiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPb3BzOgorICAg
ICAgICBvdXQucHJpbnQoIk9vcHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09wY29k
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBPcGNvZGUgOiBpbnQx
Nl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1c2VmdWwgZm9yIHdoZW4g
eW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAgICAKKyAgICAvLyBQb2x5
bW9ycGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgSWRlbnRp
dHksCisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUgQ29uc3RWYWx1ZSogY2xhc3Nlcy4gQ29u
c3RhbnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3csIHNvIHRoYXQgd2UgY2FuCisgICAgLy8g
cmVhc29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0aGVtLiBMYXJnZSBjb25zdGFu
dHMgYXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgQ29uc3QzMiwKKyAgICBDb25zdDY0LAor
ICAgIENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1hZ2ljYWwgc3RhY2sgc2xvdC4gVGhpcyBp
cyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0gcmVnYXJkbGVz
cyBvZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LiBFYWNoIGluc3Rh
bmNlIG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBkaXNqb2ludCByYW5nZSBvZgorICAgIC8v
IHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFzcy4KKyAgICBTdGFja1Ns
b3QsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdpc3Rlci4gVGhpcyBpcyB2aWV3
ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0KKyAgICAvLyByZWdhcmRs
ZXNzIG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LCBhbmQgdGhlIGNvbXBpbGVy
IHRha2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBkb24ndCBjbG9iYmVyIHRoZSB2
YWx1ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNhbGxzIChlaXRoZXIgYnkgc2F2aW5nIHRo
ZSBhcmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBvciBwcmVzZXJ2aW5nIGl0IGluIGEgY2Fs
bGVlLXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVnVmFsdWUgY2xhc3MuIFRoZSBy
ZXR1cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2ludGVyKCkgKGZvciBHUFJzKSBvciBEb3Vi
bGUgKGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywKKworICAgIC8vIFRoZSBmcmFtZSBwb2lu
dGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRyb2wgZmxvdyBidXQgaXQgd2ls
bCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRlciwgd2l0aCBhIGNhdmVhdDog
aWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50ZXIgdGVtcG9yYXJpbHkgZm9y
IHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBvaW50ZXIgaW50cmluc2ljIHdp
bGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91bGQqIGJlIG5vdAorICAgIC8v
IHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAgIEZyYW1lUG9pbnRlciwKKwor
ICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAg
IEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKworICAgIC8vIEludGVnZXIgbWF0
aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIsIGJlaGF2ZXMgbGlrZSBKUyAo
eC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0T3IsCisgICAgQml0WG9yLAor
ICAgIFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisKKyAgICAvLyBDYXN0cyBhbmQgc3VjaC4K
KyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBTRXh0OCwKKyAgICBTRXh0MTYs
CisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6CisgICAgU0V4dDMyLAorICAg
IFpFeHQzMiwKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgRlJvdW5kLAor
ICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIElUb0QsCisgICAgLy8g
VGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERUb0kzMiwKKworICAgIC8vIFBv
bHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gUmV0dXJu
cyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8vIGlzIGp1c3QgRXF1YWwoeCwg
MCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVzc1RoYW4sCisgICAgR3JlYXRl
clRoYW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVhbCwKKworICAgIC8vIEludGVn
ZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgorICAgIEFib3ZlLAorICAgIEJl
bG93LAorICAgIEFib3ZlRXF1YWwKKyAgICBCZWxvd0VxdWFsLAorCisgICAgLy8gTWVtb3J5IGxv
YWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUgbG9hZGVkIHR5cGUuIFRo
ZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4gSW50MzI6CisgICAgTG9h
ZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAorICAgIExvYWQxNlMsCisgICAgLy8gVGhp
cyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisgICAgLy8gVGhpcyByZXR1cm4gd2hh
dGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExvYWQsCisKKyAgICAvLyBNZW1vcnkgc3Rv
cmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3RvcmVkLiBUaGVzZSB1c2Ug
TWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2YWx1ZToKKyAgICBTdG9y
ZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91YmxlIHZhbHVlOgorICAg
IFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJbnQz
MiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAgICAvLyBUaGlzIGlzIGEgcmVn
dWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0gQyBjYWxsaW5n
IGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFz
c2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8vIFRoaXMgaXMg
YSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFzcy4gVGhpcyBpcyB2aWV3
ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9ubHkgZW1pdHMgY29kZSB2
aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0
IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNrbWFwIGFsb25nIHdpdGgg
Y29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQu
CisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBp
cyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVlc3QKKyAgICAvLyB0aGF0
IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRo
ZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3RhY2suCisgICAgUGF0Y2hw
b2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBM
aWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJhdGlvbgorICAgIC8vIGNh
bGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNvZGUgYWZ0ZXIgdGhlIGVw
aWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8gZnJvbSB0aGUgY2hlY2ss
IGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0IHRvIHN1cHBseSBhIHN0
YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJlIG5vdCBhbGxvd2VkIHRvIGp1bXAgYmFj
ayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91ciBzbG93IHBhdGgsIHNpbmNlIHRoZSBj
b21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBp
bnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhhcHBlbi4gRm9yCisgICAg
Ly8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6CisgICAgLy8KKyAgICAvLyBh
ID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLworICAg
IC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAgICAvLworICAgIC8vIGEg
PSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVudGl0eShhKQorICAgIC8vCisgICAgLy8g
VGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFja3MgdXNlZCBieSB0aGUgdHdv
IENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAvLyBjYWxsYmFja3MuIFll
dCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRoZXkgYXJlIGRpZmZlcmVu
dCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBDaGVja0FkZCBl
eGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2ZSBwb3NzaWJseSB0YWtl
biBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25kIENoZWNrQWRkJ3MgY2Fs
bGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0FkZCwKKyAgICBDaGVja1N1YiwKKyAgICBD
aGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lkZS1leGl0cy4gVXNlIHRoZSBDaGVja1Zh
bHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlzIGhhcyBhCisgICAgLy8g
c3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoaXMgdGFrZXMgYW4gSW50MzIg
YXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisgICAgLy8gZnVsbCBicmFuY2gg
ZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVlIHZhbHVlIGp1bXBzIHRv
IHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0aC4KKyAgICBDaGVjaywKKworICAgIC8v
IFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAgICBVcHNpbG9uLCAvLyBU
aGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQaGksCisKKyAgICAvLyBKdW1w
LiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgSnVtcCwKKyAgICAKKyAgICAvLyBQ
b2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBCcmFuY2hlcyBp
ZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBDb250cm9sVmFsdWUgY2xhc3Ms
IHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVlIHN1Y2Nlc3Nvci4KKyAg
ICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIgZWl0aGVyIEludDMyIG9y
IEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBTd2l0Y2gsCisKKyAgICAv
LyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0IGtub3cgdGhlaXIgcmV0dXJu
IHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFueQorICAgIC8vIHR5cGUuIFVzZXMgdGhl
IENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisKKyAgICAvLyBUaGlzIGlzIGEgdGVy
bWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJlLiBVc2VzIHRo
ZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcworfTsKKworaW5saW5lIGJvb2wgaXNDaGVj
a01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2Ug
Q2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2Ns
YXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM09wY29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRh
KSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNPcmlnaW5faAorI2RlZmluZSBCM09yaWdpbl9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBj
aG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxs
IGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2gg
aW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3Jt
YXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8g
d3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBs
aWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9y
aWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkK
KyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2
YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3JpZ2luX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVj
aWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50U3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBB
aXI7CisKK1BhdGNocG9pbnRTcGVjaWFsOjpQYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9CisKK1Bh
dGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwoKQoreworfQorCit2b2lkIFBhdGNo
cG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExh
bWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBpZiAoaW5zdC5v
cmlnaW4tPnR5cGUoKSA9PSBWb2lkKSB7CisgICAgICAgIGZvckVhY2hBcmdJbXBsKDAsIDEsIGlu
c3QsIGNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxiYWNrKGlu
c3QuYXJnc1sxXSwgQXJnOjpEZWYsIGluc3Qub3JpZ2luLT5haXJUeXBlKCkpOworICAgIGZvckVh
Y2hBcmdJbXBsKDAsIDIsIGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9vbCBQYXRjaHBvaW50U3Bl
Y2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgp
ID09IFZvaWQpCisgICAgICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsKKworICAg
IGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlm
IChpbnN0LmFyZ3NbMV0ua2luZCgpICE9IEFyZzo6VG1wKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNUeXBlKGluc3Qub3JpZ2luLT5haXJUeXBlKCkpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMiwgaW5z
dCk7Cit9CisKK2Jvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3Qs
IHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZv
aWQpCisgICAgICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwgMSwgaW5zdCwgYXJnSW5kZXgp
OworCisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwgMiwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2Fs
bEhlbHBlcnM6Okp1bXAgUGF0Y2hwb2ludFNwZWNpYWw6OmdlbmVyYXRlKAorICAgIEluc3QmIGlu
c3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAg
ICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2
YWx1ZS0+c3RhY2ttYXAoKTsKKyAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgVmVjdG9yPFZh
bHVlUmVwPiByZXBzOworICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7CisgICAgaWYgKGluc3Qub3Jp
Z2luLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250
ZXh0LmNvZGUsIGluc3QuYXJnc1tvZmZzZXQrK10pKTsKKyAgICBhcHBlbmRSZXBzSW1wbChjb250
ZXh0LCBvZmZzZXQsIGluc3QsIHJlcHMpOworICAgIAorICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9u
UGFyYW1zIHBhcmFtczsKKyAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICBwYXJhbXMuc3Rh
Y2ttYXAgPSBzdGFja21hcDsKKyAgICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgcGFyYW1zLnVz
ZWRSZWdpc3RlcnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgc3RhY2ttYXAt
Pm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKyNkZWZpbmUgQjNQYXRjaHBv
aW50U3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21h
cFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMg
aXMgYSBzcGVjaWFsIHRoYXQgcmVjb2duaXplcyB0aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQ
YXRjaHBvaW50OiBWb2lkIGFuZCBhbmQgbm9uLVZvaWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0
aGUgc3ludGF4IG9mIHRoZSBBaXIgUGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBh
dGNoICZwYXRjaHBvaW50LCBhcmdzLi4uCisvLworLy8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUg
bG93ZXJlZCBhcmd1bWVudHMgdG8gdGhlIFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBu
b24tVm9pZCBjYXNlCisvLyB3ZSB3aWxsIGhhdmU6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBv
aW50LCByZXN1bHQsIGFyZ3MuLi4KKworY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMg
QWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAgIHZp
cnR1YWwgflBhdGNocG9pbnRTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVh
Y2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0Nh
bGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlk
ZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBv
dmVycmlkZTsKKworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0
ZSB0aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAg
ICAvLyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVsZXBycyYsIEFpcjo6
R2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50U3BlY2lhbF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9p
bnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lk
IFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9pbnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2lu
dFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisj
aW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgUGF0Y2hwb2ludFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRj
aHBvaW50OyB9CisKKyAgICB+UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFj
a21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisg
ICAgUGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmln
aW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4
LCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgor
I2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNo
YXIqIG5hbWUpCisgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgLCBtX25hbWUobmFt
ZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGFoc2UoKSkgeworICAgICAgICBkYXRh
TG9nKCJCMyBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVy
ZSk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAg
IG1fZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhwcm9jZWR1cmUpOworfQorCitQaGFzZVNjb3BlOjp+
UGhhc2VTY29wZSgpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQor
ICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGhhc2VTY29wZV9oCisjZGVmaW5lIEIzUGhhc2VTY29w
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisK
K2NsYXNzIFBoYXNlU2NvcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBoYXNlU2NvcGUp
OworcHVibGljOgorICAgIFBoYXNlU2NvcGUoUHJvY2VkdXJlJiwgY29uc3QgY2hhciogbmFtZSk7
CisgICAgflBoYXNlU2NvcGUoKTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToK
KyAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAg
ICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUGhhc2VTY29wZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNp
bmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9
CisKK1Byb2NlZHVyZTo6flByb2NlZHVyZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVy
ZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFz
aWNCbG9jaz4gYmxvY2sgPSBzdGQ6Om1ha2VfdW5pcXVlPEJhc2ljQmxvY2s+KG1fYmxvY2tzLnNp
emUoKSwgZnJlcXVlbmN5KTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsK
KyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChk
ZWVwRHVtcChibG9jaykpOworfQorCitWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6Ymxv
Y2tzSW5QcmVPcmRlcigpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAg
QmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsKKyAg
ICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBy
ZXN1bHQuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPm51
bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goYmxvY2stPnN1
Y2Nlc3NvckJsb2NrKGkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworVmVjdG9y
PEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUG9zdE9yZGVyKCkKK3sKKyAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0IHdvcmts
aXN0OworICAgIHdvcmtsaXN0LnB1c2goYmxvY2soMCkpOworICAgIHdoaWxlIChCbG9ja1dpdGhP
cmRlciBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChpdGVtLm9yZGVy
KSB7CisgICAgICAgIGNhc2UgUHJlT3JkZXI6CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoUG9z
dChpdGVtLmJsb2NrKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGl0ZW0uYmxvY2st
Pm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGl0
ZW0uYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIFBvc3RPcmRlcjoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS5ibG9jayk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBCYXNpY0Jsb2NrOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFByb2NlZHVyZSB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoUHJvY2VkdXJlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKworICAgIFByb2NlZHVyZSgpOworICAgIH5Qcm9jZWR1cmUoKTsKKworICAg
IEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
a3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fYmxvY2tzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRl
cmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgIDog
bV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5z
aWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAg
ICAgICAgICAsIG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9wcm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAg
aXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0g
ZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRl
eDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5l
eHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8
IG1fcHJvY2VkdXJlLT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisgICAgICAg
ICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmV4OworICAgICAgICB9CisK
KyAgICAgICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgbnVtQmxvY2tzKCkpOyB9CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nr
c0luUHJlT3JkZXIoKTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVy
KCk7CisKKyAgICBjbGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFZhbHVlc0NvbGxlY3Rpb24oUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1f
cHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpOgor
ICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAs
IG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aXRlcmF0b3IoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAg
ICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZh
bHVlKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X3Byb2NlZHVyZS0+YmxvY2sobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
X2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVy
Lm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHBy
aXZhdGU6CisKKyAgICAgICAgICAgIFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgICAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIDApOyB9CisgICAgICAgIGl0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCBtX3Byb2Nl
ZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKTsgfQorICAgICAgICBWYWx1ZSog
YXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzW2lu
ZGV4XTsgfQorICAgICAgICBWYWx1ZSogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIFBy
b2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgfTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFs
dWVzKCkgeyByZXR1cm4gVmFsdWVzQ29sbGVjdGlvbigqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlPj4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1By
b2NlZHVyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2Vk
dXJlSW5saW5lc19oCisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1
cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1
cmU6OmFkZChBcmd1ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZh
bHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4u
LikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMu
YXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzUHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU3RhY2tTbG90S2luZC5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RG
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9j
a2VkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91
czoKKyAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1N0YWNrU2xvdEtpbmRfaAorI2RlZmluZSBCM1N0YWNrU2xvdEtpbmRfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0g
Y2xhc3MgU3RhY2tTbG90S2luZCA6IHVpbnQ4X3QgeworICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNs
b3QgbmVlZHMgdG8gYmUga2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhlcnMgYmVjYXVzZSB3ZSBp
bnRlbmQgdG8gZXNjYXBlCisgICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mgbm90IG9idmlvdXMuIFRo
aXMgaGFwcGVucyB3aGVuIHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRyZXNzIG9mIGEgc3RhY2sK
KyAgICAvLyBzbG90LgorICAgIExvY2tlZCwKKworICAgIC8vIFRoZXNlIHN0YWNrIHNsb3RzIGNv
dWxkIHNoYXJlIHNwYWNlIHdpdGggb3RoZXIgc3RhY2sgc2xvdHMsIHByb3ZpZGVkIHRoYXQgdGhl
eSBhcmVuJ3QgbGl2ZQorICAgIC8vIGF0IHRoZSBzYW1lIHRpbWUuIFRoZSBjb21waWxlciBzdGls
bCBoYXMgdG8gZG8gZXNjYXBlIGFuYWx5c2lzLCBzaW5jZSB0aGVzZSBjYW4gYmUgZXNjYXBlZAor
ICAgIC8vIGV4cGxpY2l0bHkgaW4gSVIuCisgICAgQW5vbnltb3VzCit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpTdGFja1Nsb3RLaW5k
KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNTdGFja1Nsb3RLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3Rh
Y2tTbG90VmFsdWU6On5TdGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90VmFs
dWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJi
eXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFj
a1Nsb3RWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworbmFtZXNwYWNlIEFpciB7CitjbGFzcyBTdGFja1Nsb3Q7Cit9IC8vIG5hbWVz
cGFjZSBBaXIKKworY2xhc3MgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IFN0YWNrU2xvdDsgfQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25l
ZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBh
c3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBw
aW4gc3RhY2sgc2xvdHMuIFVzZSB0aGUKKyAgICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQuCisg
ICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7
IH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUgc3Rh
Y2sgc2xvdCBpcyBMb2NrZWQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFs
dWUpCisgICAgeworICAgICAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAgIH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tTbG90
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplLCBT
dGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFN0YWNrU2xvdCwgcG9p
bnRlcigpLCBvcmlnaW4pCisgICAgICAgICwgbV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAgICAgICAg
LCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29mZnNldEZyb21GUCgwKQorICAgIHsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOwor
ICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFj
a21hcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRlcihtX29wYXF1
ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAgICAgICAiLCBnZW5lcmF0b3Ig
PSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0gIiwgbV9j
bG9iYmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMs
ICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNrbWFw
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5j
bHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRl
IDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgQ2hlY2tTcGVjaWFsOworY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7
CisKK2NsYXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFt
cyB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFw
LgorICAgICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2tt
YXAuCisgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxz
IHlvdSB0aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgor
ICAgICAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5
b3UgdGhlIHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVyczsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5j
dGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRl
ZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3Rh
Y2ttYXAoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBp
ZGVudGlmeSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAt
dXNpbmcgVmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRl
IG1heSBlbmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisg
ICAgLy8gYWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIg
YmFjayB0byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdl
cmUgdXNpbmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBw
YXJhbWV0ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9Cisg
ICAgdm9pZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENv
bnZlbmllbmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMu
CisgICAgdm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBz
ZXRPcGFxdWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qg
b3BhcXVlSW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUo
KSk7IH0KKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1
c2VzIHRoaXMgU3RhY2ttYXAuIEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50IHRoYXQKKyAgICAvLyBy
ZXR1cm5zIGEgdmFsdWUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgcmVzdWx0IHZhbHVlLiBJ
biBhbGwgb3RoZXIgY2FzZXMsIGluZGV4IHplcm8gcmVmZXJzCisgICAgLy8gdG8gdGhlIGZpcnN0
IGFyZ3VtZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVudCBpcyBub3QgY29u
c3RyYWluYWJsZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gaW4gYSBDaGVja0FkZCB2YWx1ZSwgaXQg
d291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQgMS4gSW4gYSBDaGVj
ayB2YWx1ZSwgaXQKKyAgICAvLyB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kZXgg
MC4gQnV0LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCwgeW91IGNhbgor
ICAgIC8vIGRlcGVuZCBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBiZWluZyBmaWxsZWQg
aW4uCisgICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0IFZhbHVlUmVwJiBy
ZXApCisgICAgeworICAgICAgICBpZiAoaW5kZXggKyAxIDwgbV9yZXBzLnNpemUoKSkKKyAgICAg
ICAgICAgIG1fcmVwcy5ncm93KGluZGV4ICsgMSk7CisgICAgICAgIG1fcmVwc1tpbmRleF0gPSBy
ZXA7CisgICAgfQorCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpCisg
ICAgeworICAgICAgICBtX2Nsb2JiZXJlZC5tZXJnZShzZXQpOworICAgIH0KKworICAgIGNvbnN0
IFJlZ2lzdGVyU2V0JiBjbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb2JiZXJlZDsgfQor
CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yKQorICAg
IHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNr
PEdlbmVyYXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENoZWNr
U3BlY2lhbDsKKyAgICBmcmllbmQgY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworICAgIAorICAgIHZv
aWQqIG1fb3BhcXVlIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBzOwor
ICAgIFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIFJlZ2lzdGVyU2V0IG1fY2xv
YmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsgLy8gU3RhY2ttYXBzIGNv
dWxkIGJlIGZ1cnRoZXIgZHVwbGljYXRlZCBieSBBaXIsIGJ1dCB0aGF0J3MgdW5saWtlbHksIHNv
IHdlIGp1c3QgbWVyZ2UgdGhlIHVzZWQgcmVnaXN0ZXJzIHNldHMgaWYgdGhhdCB3ZXJlIHRvIGhh
cHBlbi4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3Bl
Y2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2tt
YXBTcGVjaWFsKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBTcGVjaWFsKG5hbWUpCit7Cit9CisK
K1N0YWNrbWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgU3RhY2tt
YXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmIGluc3QsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOwor
ICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgLy8gRklY
TUU6IElmIHRoZSBJbnN0IHRoYXQgdXNlcyB0aGUgU3RhY2ttYXBTcGVjaWFsIGdldHMgZHVwbGlj
YXRlZCwgdGhlbiB3ZSBlbmQgdXAgbWVyZ2luZyB1c2VkCisgICAgLy8gcmVnaXN0ZXIgc2V0cyBm
cm9tIG11bHRpcGxlIHBsYWNlcy4gVGhpcyBjdXJyZW50bHkgd29uJ3QgaGFwcGVuIHNpbmNlIEFp
ciBkb2Vzbid0IGhhdmUgdGFpbGR1cAorICAgIC8vIG9yIHRoaW5ncyBsaWtlIHRoYXQuIEJ1dCBt
YXliZSBldmVudHVhbGx5IGl0IGNvdWxkIGJlIGEgcHJvYmxlbS4KKyAgICBzdGFja21hcC0+bV91
c2VkUmVnaXN0ZXJzLm1lcmdlKHVzZWRSZWdpc3RlcnMpOworfQorCitjb25zdCBSZWdpc3RlclNl
dCYgU3RhY2ttYXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYgaW5zdCkKK3sKKyAg
ICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2
YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHJldHVybiBzdGFja21hcC0+Y2xvYmJlcmVkKCk7Cit9
CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgKKyAgICB1bnNpZ25lZCBu
dW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBp
bnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2sp
Cit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0
IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5z
aXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4u
c2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgp
IC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuLnNpemUoKSAtIG51bUlnbm9y
ZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIEFyZyYgYXJnID0gaW5z
dC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFs
dWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7CisKKyAgICAgICAgY2FsbGJhY2soYXJn
LCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICB9Cit9
CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKKyAgICB1bnNpZ25lZCBudW1J
Z25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJnQXJncywKKyAgICBJbnN0JiBpbnN0
KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhh
dCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Mu
c2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVu
LnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9
IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgIC8vIEZv
ciB0aGUgSW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMgdG8gaGF2ZSB0aGUgcmlnaHQgbnVtYmVy
IG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJB
cmdzICE9IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdhcmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFj
a21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVtZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBG
b3IKKyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3QgaGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVz
cy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRpb25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8g
YXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5z
aXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0g
dmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBp
bnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKKyAgICAgICAgCisgICAgICAgIHN3aXRj
aCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFy
Zzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFj
azoKKyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICBicmVhazsgLy8gT0sK
KyAgICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBU
bXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpICYmCisgICAgICAgICAgICAgICAgYXJnLmJh
c2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7
CisKKyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJl
IG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChz
dGFja21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpKTsKKworICAg
IC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBzdXBwbGllZCBjb25zdHJhaW50cy4KKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNBcmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAg
ICAgIFZhbHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFy
ZyA9IGluc3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsK
KworICAgICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
QW55OgorICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAg
ICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgor
ICAgICAgICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
U3RhY2s6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAg
IGlmIChhcmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFs
dWVSZXA6OkNvbnN0YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1
dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBu
dW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBp
bnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdp
bjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVu
c2lnbmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsg
bnVtSWdub3JlZEIzQXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFw
LT5tX3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMg
bm8gY29uc3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8v
IFdlIG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxp
ZCBpbnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMg
dG8gYSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFy
Z0luZGV4XS5raW5kKCkgPT0gQW55KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVy
biBmYWxzZTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKAorICAg
IEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgSW5z
dCYgaW5zdCwgVmVjdG9yPFZhbHVlUmVwPiYgcmVzdWx0KQoreworICAgIGZvciAodW5zaWduZWQg
aSA9IG51bUlnbm9yZWRBcmdzOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKQorICAgICAgICBy
ZXN1bHQuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkpOworfQor
CitWYWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBjb25zdCBB
cmcmIGFyZykKK3sKKyAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICBjYXNlIFRtcDoKKyAg
ICAgICAgcmV0dXJuIFZhbHVlUmVwOjpyZWcoYXJnLnJlZygpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBJbW06CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpj
b25zdGFudChhcmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWRkcjoKKyAg
ICAgICAgaWYgKGFyZy5iYXNlKCkgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAg
ICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSk7CisgICAgICAgIEFT
U0VSVChhcmcuYmFzZSgpID09IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpIC0gY29kZS5mcmFt
ZVNpemUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBWYWx1ZVJlcCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNTdGFja21hcFNwZWNpYWxfaAorI2RlZmluZSBCM1N0YWNrbWFwU3BlY2lh
bF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2lu
Y2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
Ky8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWFscyB0aGF0IGhhdmUgc3RhY2ttYXBz
LiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBhc2tpbmcgZm9yIHRo
ZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBuZWVkIHRvIGV2ZW4g
aG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNrbWFwLgorCitjbGFzcyBTdGFja21hcFNw
ZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBTdGFja21hcFNwZWNp
YWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYp
IG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWly
OjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVy
cmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFu
eSBzb21lCisgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgorCisgICAgdm9p
ZCBmb3JFYWNoQXJnSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5z
aWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0IFNjb3Bl
ZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBib29sIGlzVmFsaWRJ
bXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25v
cmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBhZG1pdHNTdGFja0lt
cGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9y
ZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmKTsKKworICAgIC8vIEFwcGVuZHMgdGhlIHJl
cHMgZm9yIHRoZSBJbnN0J3MgYXJncywgc3RhcnRpbmcgd2l0aCBudW1JZ25vcmVkQXJncywgdG8g
dGhlIGdpdmVuIHZlY3Rvci4KKyAgICB2b2lkIGFwcGVuZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlv
bkNvbnRleHQmLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgQWlyOjpJbnN0JiwgVmVjdG9yPFZh
bHVlUmVwPiYpOworCisgICAgc3RhdGljIFZhbHVlUmVwIHJlcEZvckFyZyhBaXI6OkNvZGUmLCBj
b25zdCBBaXI6OkFyZyYpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja21hcFNwZWNpYWxfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlv
bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29y
Q29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdWNjZXNzb3JD
b2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlz
IGEgZ2VuZXJpYyB3cmFwcGVyIGFyb3VuZCBsaXN0cyBvZiBmcmVxdWVudGVkIGJsb2Nrcywgd2hp
Y2ggZ2l2ZXMgeW91IGp1c3QgdGhlIGJsb2Nrcy4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNC
bG9jaywgdHlwZW5hbWUgU3VjY2Vzc29yTGlzdD4KK2NsYXNzIFN1Y2Nlc3NvckNvbGxlY3Rpb24g
eworcHVibGljOgorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24oU3VjY2Vzc29yTGlzdCYgbGlzdCkK
KyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQoc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBC
YXNpY0Jsb2NrKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2Nr
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQmFzaWNCbG9jayomIG9wZXJhdG9yW10oc2l6ZV90IGlu
ZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51
bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgaXRlcmF0b3IoU3VjY2Vzc29yQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgc2l6ZV90
IGluZGV4KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJh
c2ljQmxvY2sqJiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAg
ICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJh
dG9yKHRoaXMsIHNpemUoKSk7IH0KKworcHJpdmF0ZToKKyAgICBTdWNjZXNzb3JMaXN0JiBtX2xp
c3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2FzZVZhbHVlLCAiLT4iLCBwb2lu
dGVyRHVtcChtX3RhcmdldCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaENhc2VfaAor
I2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgU3dpdGNoQ2FzZSB7CitwdWJsaWM6CisgICAgU3dpdGNoQ2FzZSgpCisgICAg
eworICAgIH0KKworICAgIFN3aXRjaENhc2UoaW50NjRfdCBjYXNlVmFsdWUsIGNvbnN0IEZyZXF1
ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IG1fY2FzZVZhbHVlKGNhc2VWYWx1ZSkKKyAg
ICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdGFyZ2V0OyB9CisKKyAgICBpbnQ2NF90
IGNhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FzZVZhbHVlOyB9CisgICAgRnJlcXVlbnRl
ZEJsb2NrIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CisgICAgQmFzaWNCbG9j
ayogdGFyZ2V0QmxvY2soKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5ibG9jaygpOyB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgaW50
NjRfdCBjYXNlVmFsdWU7CisgICAgRnJlcXVudGVkQmxvY2sgdGFyZ2V0OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsZHVlICJCM1N3aXRjaFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1
ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQg
aW5kZXgpCit7CisgICAgU3dpdGNoQ2FzZSByZXN1bHQgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOwor
ICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3Vj
Y2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBTd2l0
Y2hWYWx1ZTo6YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAg
IG1fc3VjY2Vzc29ycy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNjZXNz
b3JzW21fc3VjY2Vzc29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7CisgICAg
bV92YWx1ZXMuYXBwZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3aXRj
aFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRoaXMg
ZGVzdHJ1Y3RpdmVseSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAgICBv
dXQucHJpbnQobGlzdER1bXAoKnRoaXMpLCAiLCBmYWxsVGhyb3VnaCA9ICIsIGZhbGxUaHJvdWdo
KCkpOworfQorCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIEJhc2ljQmxvY2sqIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGlu
ZGV4LCBTd2l0Y2gsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJv
dWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAorI2RlZmluZSBC
M1N3aXRjaFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbnRy
b2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0
dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8g
bnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVt
Q2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8g
VGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4Lgor
ICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlc1tpXTsgfQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVlcygp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICBGcmVxdWVudGVkQmxvY2sgZmFsbFRo
cm91Z2goKSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisgICAgRnJlcXVl
bnRlZEJsb2NrJiBmYWxsVGhyb3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0K
KworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0K
KyAgICBTd2l0Y2hDYXNlIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN3aXRjaENhc2UoY2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7Cisg
ICAgfQorICAgIFN3aXRjaENhc2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0
b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3
aXRjaChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dp
dGNoQ2FzZSBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0
Y2gtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBTd2l0Y2hWYWx1ZSogbV9zd2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
fTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IHNpemUoKSk7IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMg
dGhpbmdzIGEgYml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwK
KyAgICAvLyB0aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFz
IHlvdSByZXZpc2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250
YWluIHNvbWUgb3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdh
cyByZW1vdmVkLgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisK
KyAgICB2b2lkIGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBCYXNpY0Jsb2NrKiBmYWxsVGhyb3Vn
aCk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM1N3aXRjaFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1R5cGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZSB0eXBl
KQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgb3V0LnBy
aW50KCJWb2lkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBv
dXQucHJpbnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDY0OgorICAg
ICAgICBvdXQucHJpbnQoIkludDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJs
ZToKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gVHlwZSB7CisgICAgVm9p
ZCwKKyAgICBJbnQzMiwKKyAgICBJbnQ2NCwKKyAgICBEb3VibGUKK307CisKK2lubGluZSBib29s
IGlzSW50KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBJbnQzMiB8fCB0eXBlID09
IEludDY0OworfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1
cm4gdHlwZSA9PSBEb3VibGU7Cit9CisKK2lubGluZSBUeXBlIHBvaW50ZXIoKQoreworICAgIGlm
IChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICByZXR1cm4g
SW50NjQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsK
KworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6OlR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVXBzaWxv
blZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJeIiwgbV9waGkt
PmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25W
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2lsb25WYWx1ZV9oCisj
ZGVmaW5lIEIzVXBzaWxvblZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBV
cHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVwc2lsb247IH0KKworICAg
IH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBjb25zdCB7IHJldHVybiBtX3Bo
aTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAg
CisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
dmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBoaSwgVm9pZCwgb3Jp
Z2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAgeworICAgICAgICBBU1NFUlQo
dmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQorCisgICAgVmFsdWUqIG1fcGhp
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNVcHNpbG9uVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK1VzZUNvdW50czo6VXNlQ291bnRzKFByb2NlZHVyZSYgcHJvY2VkdXJlKQor
ICAgIDogbV9jb3VudHMocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKK3sKKyAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6IHByb2NlZHVyZS52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKFZhbHVlKiBj
aGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgbV9jb3VudHNbY2hpbGRdKys7
CisgICAgfQorfQorCitVc2VDb3VudHM6On5Vc2VDb3VudHMoKQoreworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1VzZUNvdW50c19oCisjZGVmaW5lIEIzVXNlQ291bnRzX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCitjbGFz
cyBVc2VDb3VudHMgeworcHVibGljOgorICAgIFVzZUNvdW50cyhQcm9jZWR1cmUmKTsKKyAgICB+
VXNlQ291bnRzKCk7CisKKyAgICB1bnNpZ25lZCBvcGVyYXRvcltdKFZhbHVlKiB2YWx1ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvdW50c1t2YWx1ZV07CisgICAgfQorcHJpdmF0
ZToKKyAgICBJbmRleE1hcDxWYWx1ZSwgdW5zaWduZWQ+IG1fY291bnRzOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNVc2VDb3VudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxp
ZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM1ZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNQ
cm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFj
ZSB7CisKK2NsYXNzIFZhbGlkYXRlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVyKFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQor
ICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBtX3doZW4od2hlbikK
KyAgICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQorCisjZGVm
aW5lIFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IGZhaWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9u
LCB0b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworICAgIHZvaWQg
cnVuKCkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IGJsb2NrczsKKyAgICAg
ICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5Qcm9jOworICAgICAgICBIYXNoU2V0PFZhbHVlKj4g
dmFsdWVJbkJsb2NrOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2Nl
ZHVyZSkgeworICAgICAgICAgICAgYmxvY2tzLmFkZChibG9jayk7CisgICAgICAgICAgICBmb3Ig
KFZhbHVlKiB2YWx1ZSA6ICpibG9jaykKKyAgICAgICAgICAgICAgICB2YWx1ZUluQmxvY2suYWRk
KHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbV9wcm9j
ZWR1cmUudmFsdWVzKCkpCisgICAgICAgICAgICB2YWx1ZUluUHJvYy5hZGQodmFsdWUpOworCisg
ICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2MpCisgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZUluQmxvY2suY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5CbG9jaykKKyAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKworICAg
ICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKSB7CisgICAgICAgICAgICBmb3Ig
KFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKGNoaWxkKSwgKCJBdCAiLCAqdmFsdWUsICItPiIsIHBv
aW50ZXJEdW1wKGNoaWxkKSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGJsb2NrcykgeworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSgKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiQXQg
IiwgKmJsb2NrLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpKSk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBFeHBhbmQgdGhpcyB2YWxp
ZGF0aW9uIHBoYXNlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTUwNDgwCisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgZmFpbCgKKyAgICAg
ICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5j
dGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisg
ICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAg
ICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkIzIFZB
TElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25k
aXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgaWYgKG1f
d2hlbikKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBEdXJpbmcgIiwgbV93aGVuLCAi
XG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmluZygpOworICAg
ICAgICB9CisKKyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgaWYg
KG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJCZWZvcmUgIiwgd2hlbiwg
IjpcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0K
KyAgICAgICAgb3V0LnByaW50KCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgb3V0
LnByaW50KG1fcHJvY2VkdXJlKTsKKworICAgICAgICBvdXQucHJpbnQoZmFpbHVyZU1lc3NhZ2Up
OworICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVy
LCBmdW5jdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisg
ICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7
Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1
cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkK
K3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKHByb2NlZHVyZSwgd2hlbiwgZHVtcEJlZm9yZSk7
CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxp
ZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbGlkYXRlX2gKKyNkZWZp
bmUgQjNWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCit2b2lkIHZhbGlkYXRlKFByb2Nl
ZHVyZSYsIGNvbnN0IGNoYXIqIHdoZW4gPSBudWxscHRyLCBjb25zdCBjaGFyKiBkdW1wQmVmb3Jl
ID0gbnVsbHB0cik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFsdWU6On5WYWx1ZSgpCit7Cit9CisKK3Zv
aWQgVmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqIHZhbHVlKQoreworICAgIC8vIFRo
aXMgaXMgYSBiaXQgY3JhenkuIEl0IGRvZXMgYW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQgb2Ygd2hh
dGV2ZXIgVmFsdWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRoCisgICAgLy8gYSBwbGFpbiBJZGVudGl0
eSBWYWx1ZS4gV2UgZmlyc3QgY29sbGVjdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQs
IHRoZW4gd2UgZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFu
ZCB0aGVuIHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCisKKyAgICB1
bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgVHlwZSB0eXBlID0gbV90eXBlOworICAgIE9y
aWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93
bmVyOworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworICAgIHZv
aWQqIG1pc2MgPSB0aGlzLT5taXNjOworCisgICAgUkVMRUFTRV9BU1NFUlQodHlwZSA9PSB2YWx1
ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKworICAgIG5ldyAodGhp
cykgKGluZGV4LCBJZGVudGl0eSwgdHlwZSwgb3JpZ2luLCB2YWx1ZSk7CisKKyAgICB0aGlzLT5v
d25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7CisgICAg
dGhpcy0+bWlzYyA9IG1pc2M7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoTm9wKCkKK3sK
KyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3Jp
Z2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJl
cGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisgICAgdm9pZCogbWlzYyA9IHRoaXMtPm1p
c2M7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIChpbmRl
eCwgTm9wLCBWb2lkLCBvcmlnaW4pOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0
aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworICAgIHRoaXMtPm1pc2MgPSBtaXNjOwor
fQorCit2b2lkIFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIFZhbHVlOjpkZWVwRHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICIgIiwgKnRo
aXMsICIgPSAiLCBtX29wY29kZSk7CisKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBDb21tYVBy
aW50ZXIgY29tbWE7CisgICAgZm9yIChWYWx1ZSogY2hpbGQgOiBjaGlsZHJlbigpKQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGNoaWxkKSk7CisKKyAgICBTdHJpbmdQcmlu
dFN0cmVhbSBzdHJpbmdPdXQ7CisgICAgZHVtcE1ldGEoc3RyaW5nT3V0KTsKKyAgICBDU3RyaW5n
IHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgp
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cmluZyk7CisKKyAgICBvdXQucHJpbnQoIiki
KTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFz
SW50NjQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50NjRfdCBWYWx1ZTo6
YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2RvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQg
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3QKK3sKK30KKworVHlwZSBWYWx1ZTo6
dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkKK3sKKyAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBT
dWI6CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBEaXY6CisgICAgY2FzZSBDaGlsbERpdjoKKyAg
ICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2Ug
Qml0WG9yOgorICAgIGNhc2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAgICBjYXNlIFpTaHI6Cisg
ICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6
CisgICAgICAgIHJldHVybiBmaXJzdENoaWxkLT50eXBlKCk7CisgICAgY2FzZSBGcmFtZVBvaW50
ZXI6CisgICAgICAgIHJldHVybiBwb2ludGVyKCk7CisgICAgY2FzZSBTRXh0ODoKKyAgICBjYXNl
IFNFeHQxNjoKKyAgICBjYXNlIERUb0kzMjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNhc2UgTm90
RXF1YWw6CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgIGNh
c2UgTGVzc0VxdWFsOgorICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgIGNhc2UgQWJvdmU6Cisg
ICAgY2FzZSBCZWxvdzoKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFs
OgorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2FzZSBaRXh0
MzI6CisgICAgICAgIHJldHVybiBJbnQ2NDsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBjYXNlIElU
b0Q6CisgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgY2FzZSBOb3A6CisgICAgICAgIHJldHVy
biBWb2lkOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNWYWx1ZV9oCisjZGVmaW5lIEIzVmFsdWVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgi
CisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFs
dWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGR1bXBQcmVm
aXggPSAiQCI7CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2Rl
IGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHku
CisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBP
cmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1
ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQor
ICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJl
bltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9w
Y29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIC8v
IFRoaXMgaXMgdXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgdmFs
aWQgZm9yIG5vbi12b2lkIHZhbHVlcy4KKyAgICBBaXI6OkFyZzo6VHlwZSBhaXJUeXBlKCkgY29u
c3QgeyByZXR1cm4gQXJnOjpBcmc6OnR5cGVGb3JCM1R5cGUodHlwZSgpKTsgfQorCisgICAgQWRq
YWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNvbnN0
IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQor
CisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCByZXBsYWNl
V2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9p
ZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBob3cgeW91
IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHBy
b3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBk
bzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZh
bHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncworICAgIC8v
IH0KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgp
ICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxwdHIK
KyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0
OworICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQo
KSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSW50
KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnQoaW50
NjRfdCB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OworICAgIGRv
dWJsZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7CisKK3By
b3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAv
LyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KKyAgICAvLyBUaGlzIGZvcm0gcmVx
dWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5OgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAg
ICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBt
X29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1l
bnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3Igc3BlY2lmeWlu
ZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29kZSBoYXMgbm8gY2hpbGRyZW46Cisg
ICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1f
b3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdp
bihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9w
Y29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0
IGNoaWxkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNp
dCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRl
eChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5
cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisg
ICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7Cisg
ICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZl
ciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5kIHRoYXQgZG9uJ3QKKyAgICAv
LyB0YWtlIGFueSBhcmd1bWVudHM6CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkK
KyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bj
b2RlLCBudWxscHRyKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0K
KyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciB2YXJhcmdzLgorICAgIGV4cGljaXQgVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAg
eworICAgIH0KKworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSogZmlyc3RD
aGlsZCk7CisKKyAgICAvLyBUaGlzIGdyb3VwIG9mIGZpZWxkcyBpcyBhcnJhbmdlZCB0byBmaXQg
aW4gNjQgYml0cy4KKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIE9wY29kZSBtX29wY29kZTsK
KyAgICBUeXBlIG1fdHlwZTsKKyAgICAKKyAgICBPcmlnaW4gbV9vcmlnaW47CisgICAgQWRqYWNl
bmN5TGlzdCBtX2NoaWxkcmVuOworCitwdWJsaWM6CisgICAgQmFzaWNCbG9jayogb3duZXIgeyBu
dWxscHRyIH07IC8vIGNvbXB1dGVkIGxhemlseS4KKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgeyBu
dWxscHRyIH07IC8vIHVzZWQgZm9yIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCit9Owor
CitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKFZhbHVl
KiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Zh
bHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
VmFsdWUqIG1fdmFsdWU7Cit9OworCitEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKFZhbHVlKiB2YWx1
ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZUlubGluZXNfaAorI2Rl
ZmluZSBCM1ZhbHVlSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJC
M0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QqIFZhbHVl
OjphcygpCit7CisgICAgaWYgKFQ6OmFjY2VwdHMob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY29uc3QgVCogVmFsdWU6OmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
Y29uc3RfY2FzdDxWYWx1ZSo+KHRoaXMpLT5hczxUPigpOworfQorCitib29sIFZhbHVlOjpoYXNJ
bnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitp
bnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZh
bHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuICEhYXM8Q29uc3Q2NFZhbHVlPigpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0lu
dDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOwor
fQorCitib29sIFZhbHVlOjpoYXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigp
IHx8IGhhc0ludDY0KCk7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gaGFzSW50MzIoKSA/IGFzSW50MzIoKSA6IGFzSW50NjQoKTsKK30KKworYm9vbCBW
YWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkg
JiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitkb3VibGUgVmFs
dWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4o
KS0+dmFsdWUoKTsKK30KKworU3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYg
KENoZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZj
aGVjay0+c3RhY2ttYXA7CisgICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFz
PFBhdGNocG9pbnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21h
cDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIE5vbmU6Cisg
ICAgY2FzZSBTb21lUmVnaXN0ZXI6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlZ2lzdGVy
OgorICAgICAgICBvdXQucHJpbnQoIigiLCByZWcoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21GUCgpLCAi
KSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja0FyZ3VtZW50OgorICAgICAgICBv
dXQucHJpbnQoIigiLCBvZmZzZXRGcm9tU1AoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIHZhbHVlKCksICIpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFZhbHVlUmVwOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2Fz
ZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICBvdXQucHJpbnQoIkFueSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQo
IlNvbWVSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6UmVn
aXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAg
ICBvdXQucHJpbnQoIlN0YWNrQXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzVmFsdWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHVzZSB0aGlzIGNsYXNz
IHRvIGRlc2NyaWJlIHZhbHVlIHJlcHJlc2VudGF0aW9ucyBhdCBzdGFja21hcHMuIEl0J3MgdXNl
ZCBib3RoIHRvIGZvcmNlIGEKKy8vIHJlcHJlc2VudGF0aW9uIGFuZCB0byBnZXQgdGhlIHJlcHJl
c2VudGF0aW9uLiBXaGVuIHRoZSBCMyBjbGllbnQgZm9yY2VzIGEgcmVwcmVzZW50YXRpb24sIHdl
IHNheQorLy8gdGhhdCBpdCdzIGFuIGlucHV0LiBXaGVuIEIzIHRlbGxzIHRoZSBjbGllbnQgd2hh
dCByZXByZXNlbnRhdGlvbiBpdCBwaWNrZWQsIHdlIHNheSB0aGF0IGl0J3MgYW4KKy8vIG91dHB1
dC4KKworY2xhc3MgVmFsdWVSZXAgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAg
IC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgY2FuIHBp
Y2sgYW55IHJlcHJlc2VudGF0aW9uLiBBcyBhbgorICAgICAgICAvLyBvdXRwdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93LiBUaGlzIHdpbGwgb25seSBhcmlz
ZSBmb3IgdGhlCisgICAgICAgIC8vIHJpZ2h0IG9wZXJhbmQgKGkuZS4gY2hpbGQoMSkpIG9mIGEg
Q2hlY2tNdWwuCisgICAgICAgIEFueSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNl
bnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIuIEl0
IGNvdWxkIGJlIGEKKyAgICAgICAgLy8gcmVnaXN0ZXIgdGhhdCB0aGlzIGNsYWltcyB0byBjbG9i
YmVyIQorICAgICAgICBTb21lUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdpc3Rlci4gQXMgYW4gb3V0
cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgcmVnaXN0
ZXIgQjMgcGlja2VkLgorICAgICAgICBSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBvdXRw
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tl
ZC4gSXQncyBub3QgYSB2YWxpZAorICAgICAgICAvLyBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAg
ICAgICAgU3RhY2ssCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgZm9yY2VzIHRoZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhlIGFyZ3VtZW50IGFyZWEgYXQgc29t
ZQorICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAgICAgICAg
Ly8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgY29u
c3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9OworICAgIAor
ICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdpc3RlcikK
KyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXAo
cmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qgb2Zmc2V0
RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbUZQOwor
ICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50KGludHB0cl90IG9mZnNl
dEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0
RnJvbVNQOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZh
bHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgfQor
CisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50RG91YmxlKGRvdWJsZSB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsK
KyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAg
IGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gQW55OyB9
CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
UmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92YWx1ZSk7CisgICAg
fQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21TUCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrQXJndW1lbnQpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGlu
dDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25z
dGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAgIGRvdWJsZSBkb3Vi
bGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJs
ZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2luZCk7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVf
cGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTA1IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCiskdmFySW5kZXgg
PSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7JHZhckluZGV4
fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5h
bWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAgIGRlZiBp
bml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAgICAgQG9yaWdp
biA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255bW91cyA9IChu
YW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAgIEB2YXJOYW1l
ID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4gL1xBXCQvID8gJCcgOiBuYW1lCisgICAg
ICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGls
ZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAgIG9wY29kZSAh
PSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIGNo
aWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNoaWxkLCBpbmRleCB8Cisg
ICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQubmFtZSwK
KyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGls
ZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9uT3BlcmFu
ZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAorICAgICAgICAgICAg
ICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAg
ICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3JlYWRlciA6bmFt
ZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9ucykK
KyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25z
CisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1l
LCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVt
YmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJlciA9
IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tmaWxl
TmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0
dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmln
aW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0g
c3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhl
ci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBl
bmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0
ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkK
KyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJv
cjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9y
OiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitk
ZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5h
bWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBz
dHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8K
KyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAg
ICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisg
ICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLworICAgICAgICAgICAg
cmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYp
CisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwg
aWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0IDw8IFRv
a2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5h
bWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5p
bnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBl
bmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMgV2UgY2Fu
IGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50
ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcikpXFovCitl
bmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEFbYS16QS1aMC05
JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xh
c3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0
b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisK
KyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVm
IGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJv
cigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJy
b3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/
CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQg
b2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAg
ICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhw
ZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNl
CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0g
dG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1
bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1
bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHByb2R1
Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0gcHJvZHVjdGlvbi52YXJOYW1lCisgICAgICAgICAg
ICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0aW9uIGhhcyBzYW1lIG5hbWUgYXMgcGFyZW50IHBy
b2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsg
fCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAgIHBh
cnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIHBy
b2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAg
ICBjb25zdW1lKCJtYXRjaGVyIikKKworICAgICAgICBtYXRjaGVyTmFtZSA9IGNvbnN1bWVJZGVu
dGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorCisgICAgICAgIGxvb3AgeworICAg
ICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICAj
IFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVkZSIuIElmIHdlIGRpZCB0aGF0LCBpdCB3
b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHBhcnNlUHJvZHVjdGlvbgor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5
IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgICAgIHBhcnNl
RXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgICAgIH0KKworICAgICAgICBNYXRj
aGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAgICBkZWYgcGFy
c2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAgICAgICBuYW1l
ID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBpZiB0b2tlbiA9PSAiPSIKKyAgICAgICAg
ICAgIGNvbnN1bWUoIj0iKQorICAgICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlkZW50aWZpZXIK
KyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9PSAiKCIKKyAg
ICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICAgICAgb3Bjb2RlID0gbmFtZQorICAgICAg
ICAgICAgbmFtZSA9IG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHJvZHVj
dGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisgICAgICAgIAor
ICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJl
YWsgaWYgdG9rZW4gPT0gIikiCisKKyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0
aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorCisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAi
KSIKKyAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICB9CisKKyAgICAgICAgIyBBZHZh
bmNlIGFmdGVyIHRoZSAiKSIKKyAgICAgICAgYWR2YW5jZQorCisgICAgICAgIFByb2R1Y3Rpb24u
bmV3KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKK2VuZAorCitm
aWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZChmaWxlTmFt
ZSksIGZpbGVOYW1lKQorbWF0Y2hlciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBTdWJNYXRjaAor
ICAgIGF0dHJfcmVhZGVyIDppbmRleE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisgICAgZGVmIGlu
aXRpYWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4TWFwID0gW10K
KyAgICAgICAgQHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAg
ICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5kZXgKKyAgICAg
ICAgICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgfQorICAg
IGVuZAorCisgICAgZGVmIG1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgIGluZGV4TGlz
dC5tYXAgeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXBbaW5k
ZXhdCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitGaWxlLm9wZW4oIkIzIiArIG1hdGNoZXIu
bmFtZSArICIuaCIsICJ3IikgeworICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMgIi8vIEdl
bmVyYXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVOYW1lfSAt
LSBkbyBub3QgZWRpdCEiCisKKyAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNoZXIubmFt
ZX1faCIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICAK
KyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAgb3V0cC5w
dXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1dHMgInRl
bXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBydW4je21hdGNo
ZXIubmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0cC5wdXRz
ICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5IGluZGVu
dGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAgICAj
IHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBnb29k
IHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91LgorCisg
ICAgIyBJbiBvZGQgc2l0dWF0aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZhbHVlLiBU
ZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5wdXRzICJV
TlVTRURfUEFSQU0oX3ZhbHVlKTsiCisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHByb3RlY3Rz
IHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5n
IGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUs
IHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlv
bnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAor
ICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNb
LTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAg
ICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisg
ICAgICAgIH0KKworICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRl
eExpc3QgfAorICAgICAgICAgICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5j
aGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0tPmNoaWxkcmVuLnNpemUoKSA+PSAje2xlbmd0
aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGlu
ZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhp
cyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4g
SXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0
IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0
aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3Ig
dGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBp
bmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFBy
b2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3Qs
IHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRo
IGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAg
ICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7
CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4
TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09
IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwg
aW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtp
bmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5v
dywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBs
aXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25l
LgorICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAor
ICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAg
ICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZv
ciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAg
ICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAg
ICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAg
ICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAg
ICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5v
cGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7Igor
ICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8
IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJj
YXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gu
bmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNo
TGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlp
ZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGlu
ZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwg
dmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8
IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4
TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAg
ICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBz
YW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNl
ZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVm
IG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQor
ICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgK
KyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAg
ICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAg
ICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSog
I3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAg
ICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBj
aGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3Vi
VmFsdWV9KTsiCisgICAgICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25z
Lm1hcCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlv
bi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJz
aXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGlu
ZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3Qs
IHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBz
dWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAg
fCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlz
dChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1
dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5h
bWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFt
ZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAg
ICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVj
dGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxl
bmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJv
ZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1h
dGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAg
ICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0
cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExpc3Qg
fAorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAg
ICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAg
ICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0
aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0g
W10KKyAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJn
dW1lbnRzID0gW10KKyAgICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHNlZW4g
PSB7fQorICAgICAgICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAgICAgICAgICAg
ICAgIHwgcGFyZW50VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4
IHwKKyAgICAgICAgICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgj
e2luZGV4fSkiCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc2VlbltjaGls
ZFZhck5hbWVdCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsiCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsi
CisgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVlCisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2No
aWxkVmFyTmFtZX0gPSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hp
bGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGROYW1lID1+
IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgj
e2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGludGVy
bmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBvciBraW5k
ID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA8
PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5kID09IDphbm9uT3BlcmFu
ZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtp
bmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFkYXB0b3IuYWNjZXB0
Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJndW1lbnRzLmVtcHR5
PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRJbnRlcm5hbHMo
IiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAg
ICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygiICsgb3BlcmFuZEFyZ3Vt
ZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRw
LnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1bWVudHMu
am9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2Nl
cHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBpbnRlcm5hbEFyZ3VtZW50
cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0SW50ZXJu
YWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpOyIKKyAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1wdHk/CisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJhbmRzTGF0ZSgiICsgb3Bl
cmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICBvdXRwLnB1dHMgInJldHVybjsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0Y2hlci5uYW1l
fV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5o
IgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitib29sIGF0dGVtcHRBc3Np
Z25tZW50KAorICAgIFN0YWNrU2xvdCogc2xvdCwgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25z
dCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgZm9yIChTdGFja1Nsb3Qq
IG90aGVyU2xvdCA6IG90aGVyU0xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhlclNsb3QtPm9mZnNl
dEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmIChvZmZzZXRGcm9t
RlAgKyBzbG90LT5ieXRlU2l6ZSgpID49IG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGlmIChvdGhlclNsb3QtPm9mZnNldEZyb21G
UCgpICsgb3RoZXJTbG90LT5ieXRlU2l6ZSgpID49IG9mZnNldEZyb21GUCkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAob2Zmc2V0
RnJvbUZQKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBhc3NpZ24oU3RhY2tTbG90KiBz
bG90LCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgaWYgKGF0
dGVtcHRBc3NpZ25tZW50KHNsb3QsIC1zbG90LT5ieXRlU2l6ZSgpLCBvdGhlclNsb3RzKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU0xvdCA6IG90aGVyU2xv
dHMpIHsKKyAgICAgICAgaWYgKG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkKKyAgICAgICAgICAg
ICYmIGF0dGVtcHRBc3NpZ25tZW50KG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgLSBzbG90LT5i
eXRlU2l6ZSgpKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9p
ZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KGNvZGUsICJhbGxvY2F0ZVN0YWNrIik7CisKKyAgICAvLyBBbGxvY2F0ZSBhbGwgb2YgdGhlIGxv
Y2tlZCBzbG90cyBpbiBvcmRlci4gVGhpcyBpcyBraW5kIG9mIGEgY3JhenkgYWxnb3JpdGhtIHRv
IGFsbG93IGZvcgorICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBvZiBzdGFjayBzbG90cyBiZWluZyBh
c3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVuIGdldCBoZXJlLgorICAgIEFTU0VS
VCghY29kZS5mcmFtZVNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkTG9j
a2VkU3RhY2tTbG90czsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gbG9ja2VkU3RhY2tTbG90c1dv
cmtsaXN0OworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsK
KyAgICAgICAgc3dpdGNoIChzbG90LT5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RL
aW5kOjpMb2NrZWQ6CisgICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAg
ICAgICAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255
bW91czoKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAg
ICAgICAgIC8vIEFzIGEgbWF0dGVyIG9mIHNhbml0eSwgdW5hc3NpZ24gdGhpcy4gTWF5YmUgaXQg
d291bGQgYmUgZ29vZCB0byBldmVuIGhhdmUgYQorICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRp
b24gcnVsZSB0aGF0IHRoaXMgY2Fubm90IGhhcHBlbi4KKyAgICAgICAgICAgICAgICBzbG90LT5z
ZXRPZmZzZXRGcm9tRlAoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAvLyBUaGlzIGlzIGEgZmFpcmx5IGV4cGVuc2l2ZSBsb29wLCBi
dXQgaXQncyBPSyBiZWNhdXNlIHdlJ2xsIHVzdWFsbHkgb25seSBoYXZlIGEgaGFuZGZ1bCBvZgor
ICAgIC8vIGxvY2tlZCBzdGFjayBzbG90cy4KKyAgICB3aGlsZSAoIWxvY2tlZFN0YWNrU2xvdHNX
b3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gbG9ja2VkU3Rh
Y2tTbG90c1dvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGFzc2lnbihzbG90LCBhc3NpZ25l
ZExvY2tlZFN0YWNrU2xvdHMpOworICAgICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBw
ZW5kKHNsb3QpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIGFub255bW91cyBz
bG90cy4gTm90ZSB0aGF0IHRoZW9yZXRpY2FsbHkgd2Ugc2hvdWxkIGRvIGFuIGVzY2FwZSBhbmFs
eXNpcworICAgIC8vIGhlcmUuIEJ1dCwgY3VycmVudGx5IEFpciBkb2Vzbid0IHN1cHBvcnQgZXNj
YXBpbmcgYSBTdGFja1Nsb3QhCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBlc2NhcGlu
ZyBhIFN0YWNrU2xvdCBhbmQgYWRkIGVzY2FwZSBhbmFseXNpcyB0byBhbGxvY2F0ZVN0YWNrKCku
CisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQzMAor
CisgICAgYXV0byBpc1JlbGV2YW50ID0gW10gKGNvbnN0IEFyZyYgYXJnKSAtPiBib29sIHsKKyAg
ICAgICAgcmV0dXJuIGFyZy5pc1N0YWNrKCkgJiYgYXJnLnN0YWNrU2xvdCgpLT5raW5kKCkgPT0g
U3RhY2tTbG90S2luZDo6QW5vbnltb3VzOworICAgIH07CisKKyAgICBMaXZlbmVzczxBcmc+IGxp
dmVuZXNzKGNvZGUpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3Qq
Pj4gaW50ZXJmZXJlbmNlKGNvZGUuc2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xv
dHM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZl
bmVzczxBcmc+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAg
ICAgYXV0byBpbnRlcmZlcmUgPSBbJl0gKCkgeworICAgICAgICAgICAgLy8gRm9ybSBhIGNsaXF1
ZSBvZiBzdGFjayBzbG90cyB0aGF0IGludGVyZmVyZS4gRmlyc3QgZmluZCB0aGUgbGlzdCBvZiBz
dGFjayBzbG90cworICAgICAgICAgICAgLy8gdGhhdCBhcmUgbGl2ZSByaWdodCBub3cuCisgICAg
ICAgICAgICBzbG90cy5yZXNpemUoMCk7CisgICAgICAgICAgICBmb3IgKEFyZyBhcmcgOiBsb2Nh
bENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzUmVtZXZhbnQoYXJnKSkKKyAg
ICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2xvdHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIG91dGVyID0gc2xvdHNbaV07Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBzbG90cy5zaXplKCk7
ICsraikgeworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIGlubmVyID0gc2xvdHNbaV07
CisKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBmaXJzdCA9IG91dGVyOworICAgICAg
ICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNlY29uZCA9IGlubmVyOworICAgICAgICAgICAgICAg
ICAgICBpZiAoZmlyc3QtPmluZGV4KCkgPiBzZWNvbmQtPmluZGV4KCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICBzdGQ6OnN3YXAoZmlyc3QsIHNlY29uZCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgaW50ZXJmZXJlbmNlW2ZpcnN0XS5hZGQoc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAg
aW50ZXJmZXJlbmNlW3NlY29uZF0uYWRkKGZpcnN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpbnRlcmZlcmUobG9jYWxDYWxjLmxpdmUo
KSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5z
aXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxv
Y2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgaW50ZXJmZXJlKGxvY2FsQ2FsYy5saXZl
KCkpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFjayBsb2Nh
dGlvbnMuIEF0IGl0cyBoZWFydCB0aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9y
IGVhY2gKKyAgICAvLyBTdGFja1Nsb3Qgd2UganVzdCB3YW50IHRvIGZpbmQgdGhlIG9mZnNldEZy
b21GUCB0aGF0IGlzIGNsb3Nlc3QgdG8gemVybyB3aGlsZSBlbnN1cmluZyBubworICAgIC8vIG92
ZXJsYXAgd2l0aCBvdGhlciBTdGFja1Nsb3RzIHRoYXQgdGhpcyBvdmVybGFwcyB3aXRoLgorICAg
IHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBmcmFtZVNpemVGb3JMb2NrZWQ7Cisg
ICAgVmVjdG9yPFN0YWNrU2xvdCo+IG90aGVyU2xvdHM7CisgICAgZm9yIChTdGFja1Nsb3QqIHNs
b3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQ
KCkpIHsKKyAgICAgICAgICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0LgorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvLyBUaGUgcG9zc2libGUgZmly
c3QgZml0IG9mZnNldHMgYXJlOgorICAgICAgICAvLyAtIGZyYW1lU2l6ZUZvckxvY2tlZCAtIHNs
b3QtPmJ5dGVTaXplKCkKKyAgICAgICAgLy8gLSBmb3IgYWxsIHNsb3QyIGluIGludGVyZmVyZW5j
ZVtzbG90XSwgc2xvdDItPm9mZnNldEZyb21GUCgpIC0gc2xvdC0+Ynl0ZVNpemUoKS4KKyAgICAg
ICAgLy8gV2UgbmVlZCB0byBmaW5kIG9uZSBvZiB0aG9zZSB0aGF0IGRvZXNuJ3QgaW50ZXJmZXJl
IHdpdGggYW55b25lLgorCisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGludGVyZmVyaW5n
U2xvdHMgPSBpbnRlcmZlcmVuY2Vbc2xvdF07CisgICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFz
c2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Nsb3RzLnNpemUoKSk7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhc3NpZ25lZExvY2tlZFN0YWNrU2xv
dHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdGhlclNsb3RzW2ldID0gYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzW2ldOworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3NpZ25lZExv
Y2tlZFN0YWNrU2xvdHMuc2l6ZSgpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90
IDogaW50ZXJmZXJpbmdTbG90cykKKyAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dEluZGV4Kytd
ID0gb3RoZXJTbG90OworCisgICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKKyAgICB9
CisKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFj
ayBzbG90cy4KKyAgICB1bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsKKyAgICBm
b3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKQorICAgICAgICBmcmFtZVNp
emVGb3JTdGFja1Nsb3RzID0gc3RkOjptYXgoZnJhbWVTaXplRm9yU3RhY2tTbG90cywgLXNsb3Qt
Pm9mZnNldEZyb21GUCgpKTsKKworICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRlZHVjZSBob3cgbXVj
aCBhcmd1bWVudCBhcmVhIHdlIG5lZWQuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBm
b3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZy5pc0Nh
bGxBcmcoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBhc3N1bWUgdGhh
dCB3ZSB1c2UgOCBieXRlcyBvZiB0aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mgbm90CisgICAgICAg
ICAgICAgICAgICAgIC8vIHN1Y2ggYW4gYXdlc29tZSBhc3N1bXB0aW9uLgorICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDQ1NAorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLm9mZnNldCgpID49IDApOwor
ICAgICAgICAgICAgICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoYXJnLm9mZnNl
dCgpICsgOCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgY29kZS5zZXRGcmFtZVNpemUoZnJhbWVTaXplRm9yU3RhY2tTbG90cyArIGNv
ZGUuY2FsbEFyZ0FyZWFTaXplKCkpOworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBj
b2RlIHRvIHVzZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3Ns
ZXNzCisgICAgLy8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tT
bG90cyBhcnJheSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAvLyBvZmZz
ZXQtZnJvbS1GUCByZWZlcnMgdG8uCisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZv
ciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5r
aW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgICAgICAg
ICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgp
ICsgYXJnLnN0YWNrU2xvdCgpLT5vZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAg
ICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQo
KSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQWxsb2NhdGVT
dGFja19oCisjZGVmaW5lIEFpckFsbG9jYXRlU3RhY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFz
cyBDb2RlOworCisvLyBUaGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBvbiB0aGUg
c3RhY2suIEl0IGZpcnN0IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgKKy8vIG9y
ZGVyIGFuZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQuCisKK3Zv
aWQgYWxsb2NhdGVTdGFjayhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJBbGxvY2F0ZVN0
YWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBcmcu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAg
b3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVG1wOgor
ICAgICAgICBvdXQucHJpbnQodG1wKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06
CisgICAgICAgIG91dC5wcmludCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSW1tNjQ6CisgICAgICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBtX29mZnNldCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJh
c2UoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGlm
IChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91
dC5wcmludCgiKCIsIGJhc2UoKSwgIiwiLCBpbmRleCgpKTsKKyAgICAgICAgaWYgKHNjYWxlKCkg
IT0gMSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOworICAgICAgICBvdXQu
cHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGlm
IChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQpOworICAgICAgICBvdXQu
cHJpbnQoIigiLCBwb2ludGVyRHVtcChzdGFja1Nsb3QoKSksICIpIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAg
IG91dC5wcmludChvZmZzZXQpOworICAgICAgICBvdXQucHJpbnQoIihjYWxsQXJnKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZWxh
dGlvbmFsQ29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXNDb25kOgor
ICAgICAgICBvdXQucHJpbnQoYXNSZXN1bHRDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFs
KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJn
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJUbXAuaCIKKyNpbmNsdWRl
ICJCM1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBTcGVjaWFsOworY2xhc3MgU3RhY2tTbG90OworCisvLyBUaGlzIGNsYXNz
IG5hbWUgaXMgYWxzbyBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2lsbCBzYXkgaXQg
YSBsb3QuIFlvdSdsbCBzZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjppbW0oNSksIEFy
Zzo6YWRkcih0aGluZywgYmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6CisgICAgLy8g
VGhlc2UgZW51bSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2UgaGF2
ZSB0byBtZW50aW9uIHRoZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90IHsKKyAgICAg
ICAgSW52YWxpZCwKKyAgICAgICAgVG1wLAorICAgICAgICBJbW0sCisgICAgICAgIEltbTY0LAor
ICAgICAgICBBZGRyLAorICAgICAgICBTdGFjaywKKyAgICAgICAgQ2FsbEFyZywKKyAgICAgICAg
SW5kZXgsCisgICAgICAgIFJlbENvbmQsCisgICAgICAgIFJlc0NvbmQsCisgICAgICAgIFNwZWNp
YWwKKyAgICB9OworCisgICAgZW51bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAgVXNlLAorICAg
ICAgICBEZWYsCisgICAgICAgIFVzZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5cGUgOiBpbnQ4
X3QgeworICAgICAgICBHUCwKKyAgICAgICAgRlAKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKKworICAgIHN0YXRpYyBib29sIGlzVXNlKFJvbGUgcm9s
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAg
ICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2Fz
ZSBEZWY6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc0RlZihSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJv
bGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZvckIzVHlwZShC
Mzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgVm9pZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
cmV0dXJuIEdQOworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIEludDY0OgorICAg
ICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIHJl
dHVybiBGUDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIEdQOworICAgIH0KKworICAgIEFyZygpCisgICAgICAgIDogbV9raW5kKEludmFs
aWQpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAgICAgIDogbV9r
aW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFs
dWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW02
NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBhZGRyKEFpcjo6
VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNl
LmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBB
ZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsK
KyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKyAg
ICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4KKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmcoaW50MzJfdCBv
ZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNp
Z25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2Fz
ZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgY2FzZSA4Ogor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9n
U2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7Cisg
ICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJu
IDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgoQWlyOjpUbXAg
YmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJU
KGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2NhbGUpKTsKKyAg
ICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4OworICAgICAg
ICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBpbmRleDsK
KyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihzY2FsZSk7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNv
bmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJn
IHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24pCisgICAg
eworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVzQ29uZDsK
KyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNpYWwqIHNwZWNp
YWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
U3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0PGludHB0cl90
PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5kID09IG90aGVy
Lm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAg
ICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBtX3NjYWxlID09
IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFyZyYg
b3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlz
ICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJbW0oKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQorCisgICAgYm9v
bCBpc0ltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tNjQ7
CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGtpbmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAgIGJvb2wgaXND
YWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQ2FsbEFyZzsK
KyAgICB9CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQorCisgICAgYm9v
bCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZXND
b25kOworICAgIH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOworICAgIH0K
KworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgaW50NjRfdCB2
YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbSB8fCBraW5k
KCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorCisgICAgdm9p
ZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
SW1tNjQpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxp
bnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNlKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gSW5kZXgp
OworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGJvb2wgaGFzT2Zmc2V0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRk
cjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaW50
MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykK
KyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3NjYWxlKTsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9
PSBJbmRleCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCk7
CisgICAgfQorCisgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
U3RhY2tTbG90Kj4obV9vZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1
cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzY2FsZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fc2NhbGU7
CisgICAgfQorCisgICAgdW5zaWduZWQgbG9nU2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOworICAgIH0KKworICAgIEFpcjo6U3BlY2lhbCogc3Bl
Y2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNwZWNpYWwpOwor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBib29sIGlzR1BUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
VG1wKCkgJiYgdG1wKCkuaXNHUCgpOworICAgIH0KKworICAgIGJvb2wgaXNGUFRtcCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQKCk7CisgICAgfQor
ICAgIAorICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRp
b24gdGhhdCByZXF1aXJlcyBhIEdQIHZhbHVlLgorICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAg
eworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAg
Y2FzZSBJbW02NDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAg
ICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgUmVs
Q29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1
cm4gaXNHUFRtcCgpOworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBj
YW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2YWx1ZS4KKyAgICBi
b29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25k
OgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4
OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNh
c2UgSW1tNjQ6IC8vIFllcywgd2UgYWxsb3cgSW1tNjQgYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBX
ZSB1c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQVG1wKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhhc1R5cGUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2Ug
U3BlY2lhbDoKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICAKKyAgICAvLyBUaGUgdHlwZSBpcyBhbWJpZ3VvdXMgZm9yIHNvbWUgYXJnIGtpbmRz
LiBDYWxsIHdpdGggY2FyZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzR1AoKSA/IEdQIDogRlA7CisgICAgfQorCisgICAgYm9vbCBpc1R5cGUoVHlwZSB0
eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
R1A6CisgICAgICAgICAgICByZXR1cm4gaXNHUCgpOworICAgICAgICBjYXNlIEZQOgorICAgICAg
ICAgICAgcmV0dXJuIGlzRlAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaXNHUFIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsK
KyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0
bXAoKS5ncHIoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAgfQorCisgICAgRlBSUmVn
IGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnByKCk7CisgICAgfQor
ICAgIAorICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1w
KCkgJiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRt
cEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncFRtcEluZGV4KCk7
CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcElu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS50bXBJbmRleCgpOworICAg
IH0KKworICAgIEFyZyB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghaGFzT2Zmc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gQXJn
KCk7CisgICAgICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0KCksIGFkZGl0aW9u
YWxPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBzd2l0Y2ggKGtp
bmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICByZXR1cm4gYWRkcihiYXNl
KCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgU3RhY2s6Cisg
ICAgICAgICAgICByZXR1cm4gc3RhY2soc3RhY2tTbG90KCksIG9mZnNldCgpICsgYWRkaXRpb25h
bE9mZnNldCk7CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJldHVybiBjYWxs
QXJnKG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgSW5kZXg6Cisg
ICAgICAgICAgICByZXR1cm4gaW5kZXgoYmFzZSgpLCBpbmRleCgpLCBzY2FsZSgpLCBvZmZzZXQo
KSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNhc2UgQWRkcjoK
KyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAg
ZnVuY3RvcihtX2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHNt
YXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVm
IHJ1bGUgd2lsbCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBl
eGFtcGxlLCB0aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQorICAgIC8vCisg
ICAgLy8gVGhpcyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwgVHlwZSBhcmdU
eXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgYXJn
Um9sZSwgYXJnVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBZGRyOgor
ICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBH
UCk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICByZXR1cm4g
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNl
dCkpOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW02NCBhc1RydXN0ZWRJbW02NCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNJbW02NCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
dmFsdWUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBh
c0FkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQWRkcigpKTsKKyAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5ncHIoKSwgc3RhdGljX2Nh
c3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QmFz
ZUluZGV4IGFzQmFzZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0luZGV4
KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAg
ICAgIG1fYmFzZS5ncHIoKSwgbV9pbmRleC5ncHIoKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlNjYWxlPihsb2dTY2FsZSgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+
KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc1JlbENvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxl
cjo6UmVsYXRpb25hbENvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIE1hY3JvQXNz
ZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gYXNSZXN1bHRDb25kaXRpb24oKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzUmVzQ29uZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90
IG1fb2Zmc2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsgSW52YWxpZCB9OworICAgIGludDMy
X3QgbV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9p
bmRleDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJBcmdfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJhc2ljQmxv
Y2suaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGls
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K3ZvaWQgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7Cisg
ICAgQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2Nr
OjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBCMzo6cmVtb3Zl
UHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBCMzo6
cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKK30KKwordm9pZCBCYXNpY0Jsb2Nr
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVm
aXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5j
eSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsKKyAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAq
dGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9CisKK0Jhc2lj
QmxvY2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAg
OiBtX2luZGV4KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckJhc2ljQmxvY2tfaAorI2Rl
ZmluZSBBaXJCYXNpY0Jsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworY2xhc3MgSW5zZXJ0aW9uU2V0OworCitj
bGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3Rl
eHByIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiIyI7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJ
bnN0PiBJbnN0TGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVj
ZXNzb3JMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vz
c29yTGlzdDsKKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0
cy5zaXplKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2lu
c3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9p
bnN0cy5lbmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAgICBjb25zdCBJbnN0
JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisgICAg
SW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorCisgICAg
Y29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisgICAg
SW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0JiYgaW5zdCkKKyAgICB7Cisg
ICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFy
Z3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKElu
c3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAg
IC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBz
byB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAvLyAiZWxzZSIgY2Fz
ZSwgYW5kIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2ggb2YgYSBjb25kaXRp
b25hbCBicmFuY2guCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAg
RnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3Vj
Y2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vz
c29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCisgICAgU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlz
dD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBC
YXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9j
aywgY29uc3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXpl
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRl
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0K
KyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlZGVjZXNzb3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7
IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorCisgICAgdm9pZCBhZGRQcmVkZWNlc3NvcihCYXNp
Y0Jsb2NrKik7CisgICAgdm9pZCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAg
dm9pZCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8p
OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2Rl
OworICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAgCisgICAgQmFzaWNCbG9jayh1
bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIEluc3RMaXN0IG1faW5zdHM7CisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7
CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1
ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVl
cEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxv
Y2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Jsb2Nr
LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxu
dWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2Nr
OworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Js
b2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2Fs
bFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ0NhbGxTcGVjaWFsOjpDQ2FsbFNwZWNpYWwo
KQoreworICAgIG1fY2xvYmJlcmVkUmVncyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsK
KyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMo
KSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFy
ZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK0NDYWxsU3BlY2lhbDo6fkNDYWxsU3Bl
Y2lhbCgpCit7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3Qs
IGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sK
KyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6VXNlLCBBcmc6OkdQKTsKKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIC8vIEZvciB0aGUgdHlwZSwgd2UgY2FuIGp1c3QgcXVlcnkgdGhlIGFyZydzIHR5cGUuIFRo
ZSBhcmcgd2lsbCBoYXZlIGEgdHlwZSwgYmVjYXVzZSB3ZQorICAgICAgICAvLyByZXF1aXJlIHRo
ZXNlIGFyZ3MgdG8gYmUgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAgICAgICBjYWxsYmFjayhpbnN0
LmFyZ3NbaV0sIEFyZzo6VXNlLCBpbnN0LmFyZ3NbaV0udHlwZSgpKTsKKyAgICB9Cit9CisKK2Jv
b2wgQ0NhbGxTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJn
cy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGluc3Qu
YXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBpZiAoc2l6ZW9m
KHZvaWQqKSA9PSA0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGlmIChzaXplb2Yodm9pZCopID09IDgpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpU
bXA6CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgIGNhc2Ug
QXJnOjpDYWxsQXJnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNHUCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5zdC5hcmdzW2ldLmlzUmVnKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGluc3QuYXJnc1tpXSA9PSBUbXAo
c2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVybiAgZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIENDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYs
IHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIC8vIEFyZyAxIGNhbiBiZSBhIHN0YWNrIGFkZHJl
c3MgZm9yIHN1cmUuCisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OnJlcG9y
dFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikKK3sKK30KKworQ0NhbGxI
ZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sx
XS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW1QdHI6Cisg
ICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihpbnN0LmFyZ3NbMV0u
cG9pbnRlclZhbHVlKCkpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBqaXQuY2FsbChzY3Jh
dGNoUmVnaXN0ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgICAg
ICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uZ3ByKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFyZzo6QWRkcjoKKyAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzWzFdLmFzQWRkcmVzcygpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBDQ2FsbEhlbHBl
cnM6Okp1bXAoKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIENDYWxsU3BlY2lhbDo6ZXh0cmFD
bG9iYmVyZWRSZWdzKCkKK3sKKyAgICByZXR1cm4gbV9jbG9iYmVyZWRSZWdzOworfQorCit2b2lk
IENDYWxsU3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoIkNDYWxsIik7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkZWVwRHVtcEltcGwo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImZ1bmN0aW9uIGNhbGwg
dGhhdCB1c2VzIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4iKTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5l
IEFpckNDYWxsU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIFVzZSB0aGlzIHNwZWNpYWwg
Zm9yIGNvbnN0cnVjdGluZyBhIEMgY2FsbC4gQXJnIDAgaXMgb2YgY291cnNlIGEgU3BlY2lhbCBh
cmcgdGhhdCByZWZlcnMgdG8gdGhlCisvLyBDQ2FsbFNwZWNpYWwgb2JqZWN0LiBBcmcgMSBpcyB0
aGUgY2FsbGVlLCBhbmQgaXQgY2FuIGJlIGFuIEltbVB0ciwgYSByZWdpc3Rlciwgb3IgYW4gYWRk
cmVzcy4gVGhlCisvLyByZW1haW5pbmcgYXJncyBhcmUganVzdCB0aGUgc2V0IG9mIGFyZ3VtZW50
IHJlZ2lzdGVycyB1c2VkIGJ5IHRoaXMgY2FsbC4gRm9yIGFyZ3VtZW50cyB0aGF0IGdvIHRvCisv
LyB0aGUgc3RhY2ssIHlvdSBoYXZlIHRvIGRvIHRoZSBncnVudCB3b3JrIG9mIGRvaW5nIHRob3Nl
IHN0YWNrIHN0b3Jlcy4gSW4gZmFjdCwgdGhlIG9ubHkgcmVhc29uIHdoeQorLy8gd2Ugc3BlY2lm
eSB0aGUgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGFyZ3VtZW50cyB0byBhIGNhbGwgaXMgc28gdGhh
dCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgY2FuIHNlZQorLy8gdGhhdCB0aGV5IGdldCB1c2VkIGhl
cmUuIEl0IHdvdWxkIGJlIHdyb25nIHRvIGF1dG9tYWdpY2FsbHkgcmVwb3J0IGFsbCBhcmd1bWVu
dCByZWdpc3RlcnMgYXMgYmVpbmcKKy8vIHVzZWQgYmVjYXVzZSBpZiB3ZSBoYWQgYSBjYWxsIHRo
YXQgZGlkbid0IHBhc3MgdGhlbSwgdGhlbiB0aGV5J2QgYXBwZWFyIHRvIGJlIGxpdmUgdW50aWwg
c29tZQorLy8gY2xvYmJlciBwb2ludCBvciB0aGUgcHJvbG9ndWUsIHdoaWNoZXZlciBoYXBwZW5l
ZCBzb29uZXIuCisKK2NsYXNzIENDYWxsU3BlY2lhbCA6IHB1YmxpYyBTcGVjaWFsIHsKK3B1Ymxp
YzoKKyAgICBDQ2FsbFNwZWNpYWwoKTsKKyAgICB+Q0NhbGxTcGVjaWFsKCk7CisKKyAgICAvLyBZ
b3UgY2Fubm90IHVzZSB0aGlzIHJlZ2lzdGVyIHRvIHBhc3MgYXJndW1lbnRzLiBJdCBqdXN0IHNv
IGhhcHBlbnMgdGhhdCB0aGlzIHJlZ2lzdGVyIGlzIG5vdAorICAgIC8vIHVzZWQgZm9yIGFyZ3Vt
ZW50cyBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIEJ5IHRoZSB3YXksIHRoaXMgaXMgdGhl
IG9ubHkgdGhpbmcgdGhhdCBjYXVzZXMKKyAgICAvLyB0aGlzIHNwZWNpYWwgdG8gYmUgc3BlY2lm
aWMgdG8gQyBjYWxscy4KKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHNjcmF0Y2hSZWdpc3RlciA9
IEdQUkluZm86Om5vbkFyZ0dQUjAuCisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmco
SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc1ZhbGlkKEluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0
YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXBvcnRV
c2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIEND
YWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlv
bkNvbnRleHQmKSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVy
ZWRSZWdzKEluc3QmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlZ2lzdGVyU2V0IG1fY2xvYmJlcmVkUmVn
czsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDQ2FsbFNwZWNpYWxfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJD
Q2FsbFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitDb2RlOjpDb2RlKCkKK3sKK30KKworQ29kZTo6fkNvZGUoKQoreworfQorCitC
YXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6
dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhtX2Jsb2Nrcy5zaXpl
KCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOwor
ICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwg
U3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCit7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3RhY2tTbG90KGJ5dGVTaXplLCBtX3N0YWNr
U2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1ZSkpOworICAgIFN0YWNrU2xvdCogcmVzdWx0ID0gc2xv
dC5nZXQoKTsKKyAgICBtX3N0YWNrU2xvdHMuYXBwZW5kKFdURjo6bW92ZShzbG90KSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lhbCogQ29kZTo6YWRkU3BlY2lhbChzdGQ6OnVuaXF1
ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKK3sKKyAgICBtX3NwZWNpYWxzLmFwcGVuZChXVEY6Om1v
dmUoc3BlY2lhbCkpOworfQorCitDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3BlY2lhbCgpCit7
CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAgICAgICBtX2NDYWxsU3BlY2lhbCA9IHN0
YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAgICAgICAgYWRkU3BlY2lhbChzdGQ6Om1h
a2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAgIH0KKworICAgIHJldHVybiBtX2NDYWxs
U3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7CisgICAgQjM6
OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30KKwordm9pZCBDb2RlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlz
KQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAobnVtU3RhY2tT
bG90cygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xvdHM6XG4iKTsKKyAgICAgICAg
Zm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisgICAgICAgICAgICBvdXQucHJp
bnQoIiAgICAiLCBkZWVwRHVtcChzbG90KSwgIlxuIik7CisgICAgfQorICAgIGlmIChudW1TcGVj
aWFscygpKSB7CisgICAgICAgIG91dC5wcmludCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9y
IChTcGVjaWFsKiBzcGVjaWFsIDogc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgi
ICAgICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsKKyAgICB9CisgICAgb3V0LnByaW50KCJG
cmFtZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwgIlxuIik7CisgICAgb3V0LnByaW50KCJDYWxsIGFy
ZyBhcmVhIHNpemU6ICIsIG1fY2FsbEFyZ0FyZWFTaXplLCAiXG4iKTsKKyAgICBvdXQucHJpbnQo
IkNhbGxlZSBzYXZlczogIiwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzLCAiXG4iKTsKK30KKwordW5z
aWduZWQgQ29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sK
KyAgICB3aGlsZSAoaW5kZXggPCBzaXplKCkgJiYgIWF0KGluZGV4KSkKKyAgICAgICAgaW5kZXgr
KzsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3Vuc2lnbmVkIENvZGU6OmZpbmROZXh0QmxvY2tJ
bmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmluZEZpcnN0QmxvY2tJ
bmRleChpbmRleCArIDEpOworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjpmaW5kTmV4dEJsb2NrKEJh
c2ljQmxvY2sqIGJsb2NrKSBjb25zdAoreworICAgIHJldHVybiBhdChmaW5kTmV4dEJsb2NrSW5k
ZXgoYmxvY2stPmluZGV4KCkpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDb2RlX2gK
KyNkZWZpbmUgQWlyQ29kZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
QmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFj
a1Nsb3QuaCIKKyNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ0NhbGxTcGVjaWFsOworY2xhc3MgUHJvY2Vk
dXJlOworCituYW1lc3BhY2UgQWlyIHsKKworLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkg
Y2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVz
IHRoYW4gdGhlCisvLyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91
J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQw
TUIgb2YgQWlyLgorCitjbGFzcyBDb2RlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2Rl
KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7Cisg
ICAgfkNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kg
PSBQTmFOKTsKKworICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXpl
LCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsKKworICAgIFNwZWNp
YWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMg
aXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8gbWFrZSBhIEMgY2FsbCEKKyAgICBDQ2FsbFNwZWNp
YWwqIGNDYWxsU3BlY2lhbCgpOworCisgICAgVG1wIG5ld1RtcChBcmc6OlR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAg
ICAgICAgICByZXR1cm4gVG1wOjpncFRtcEZvckluZGV4KG1fbnVtR1BUbXBzKyspOworICAgICAg
ICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpmcFRtcEZvckluZGV4KG1f
bnVtRlBUbXBzKyspOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtVG1wcyhB
cmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBj
YXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gbV9udW1HUFRtcHM7CisgICAgICAgIGNh
c2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJldHVybiBtX251bUZQVG1wczsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHVuc2lnbmVkIGNhbGxBcmdBcmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y2FsbEFyZ0FyZWFTaXplOyB9CisKKyAgICAvLyBZb3UgY2FuIGNhbGwgdGhpcyBiZWZvcmUgY29k
ZSBnZW5lcmF0aW9uIHRvIGZvcmNlIGEgbWluaW11bSBjYWxsIGFyZyBhcmVhIHNpemUuCisgICAg
dm9pZCByZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAg
ICBtX2NhbGxBcmdBcmVhU2l6ZSA9IHN0ZDo6bWF4KG1fY2FsbEFyZ0FyZWFTaXplLCBzaXplKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1l
U2l6ZTsgfQorCisgICAgLy8gT25seSBwaGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uIGFy
ZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBDdXJyZW50bHksIG9ubHkKKyAgICAvLyBBaXI6OmFsbG9j
YXRlU3RhY2soKSBkb2VzIHRoaXMuCisgICAgdm9pZCBzZXRGcmFtZVNpemUodW5zaWduZWQgZnJh
bWVTaXplKQorICAgIHsKKyAgICAgICAgbV9mcmFtZVNpemUgPSBmcmFtZVNpemU7CisgICAgfQor
CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVy
biBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKworICAgIC8vIFJlY29tcHV0ZXMgcHJlZGVjZXNz
b3JzIGFuZCBkZWxldGVzIHVucmVhY2hhYmxlIGJsb2Nrcy4KKyAgICB2b2lkIHJlc2V0UmVhY2hh
YmlsaXR5KCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhd
OyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1
Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+PSBpbmRleC4KKyAgICB1bnNp
Z25lZCBmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIC8v
IEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVsbCBh
bmQgaW5kZXgnID4gaW5kZXguCisgICAgdW5zaWduZWQgZmluZE5leHRCbG9ja0luZGV4KHVuc2ln
bmVkIGluZGV4KSBjb25zdDsKKworICAgIEJhc2ljQmxvY2sqIGZpbmROZXh0QmxvY2soQmFzaWNC
bG9jayopIGNvbnN0OworCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgaXRlcmF0b3IoKToKKyAgICAgICAgICAgIDogbV9jb2RlKG51bGxwdHIpCisgICAgICAgICAg
ICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3Io
Q29kZSYgY29kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29kZSgmY29kZSkK
KyAgICAgICAgICAgICwgbV9pbmRleChtX2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgp
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcioo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2RlLT5hdChtX2luZGV4KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9pbmRleCA9IG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleChtX2luZGV4ICsg
MSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBDb2RlKiBtX2NvZGU7CisgICAgICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIG51bUJsb2NrcygpKTsgfQorCisgICAgY2xhc3MgU3RhY2tTbG90c0NvbGxl
Y3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3RhY2tTbG90c0NvbGxlY3Rpb24oY29uc3Qg
Q29kZSYgY29kZSkKKyAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9z
dGFja1Nsb3RzLnNpemUoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzW2ldLmdldCgpOyB9CisgICAgICAg
IFN0YWNrU2xvdCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQo
aW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVs
bHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rp
b24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xs
ZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVy
YXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rp
b24tPmF0KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOwor
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCAwKTsgfQorICAgICAgICBpdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcih0aGlzLCBzaXplKCkpOyB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFN0
YWNrU2xvdHNDb2xsZWN0aW9uIHN0YWNrU2xvdHMoKSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3Rz
Q29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKKyAgICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24g
eworICAgIHB1YmxpYzoKKyAgICAgICAgU3BlY2lhbHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNv
ZGUpCisgICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMu
c2l6ZSgpOyB9CisgICAgICAgIFNwZWNpYWwqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NvZGUubV9zcGVjaWFsc1tpXS5nZXQoKTsgfQorICAgICAgICBTcGVjaWFsKiBvcGVy
YXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAg
ICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJh
dG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAg
ICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpdGVyYXRvcihjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVu
c2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9u
KQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgU3BlY2lhbCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFNwZWNp
YWxzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKHRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKHRoaXMsIHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNv
bnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNp
YWxzKCkgY29uc3QgeyByZXR1cm4gU3BlY2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAor
cHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tT
bG90czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIEND
YWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9u
dW1HUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CisgICAgdW5z
aWduZWQgbV9mcmFtZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUg
eyAwIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwor
fTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBB
aXJGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR2VuZXJp
Y0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVkQmxvY2s7CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKyNpbmNsdWRlICJB
aXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBnZW5lcmF0ZShDb2RlJiBj
b2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQor
ICAgICAgICB2YWxpZGF0ZShjb2RlLCAiaW5pdGlhbCIpOworCisgICAgaWYgKHNob3VsZER1bXBJ
UigpKSB7CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgYWlyOlxuIik7CisgICAgICAgIGRhdGFM
b2coY29kZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9wdGlt
aXphdGlvbnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KKyAgICAvLyBGSVhNRTogQWRkIEFpciBvcHRp
bWl6YXRpb25zLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA0NTYKKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBhIHJlYWwgcmVn
aXN0ZXIgYWxsb2NhdG9yLiBUaGVuLCB3ZSBjb3VsZCB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkKKyAg
ICAvLyBpbiBwbGFjZSBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG9ubHkgZm9yIHRlc3Rpbmcu
CisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA0NTcKKyAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7CisKKyAgICAvLyBQcmlvciB0byB0aGlz
IHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMg
aXQgZXhwbGljaXQuIEl0IGFsc28KKyAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdo
aWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KKyAgICBoYW5kbGVD
YWxsZWVTYXZlcyhjb2RlKTsKKworICAgIC8vIFRoaXMgdHVybnMgYWxsIFN0YWNrIGFuZCBDYWxs
QXJnIEFyZ3MgaW50byBBZGRyIGFyZ3MgdGhhdCB1c2UgdGhlIGZyYW1lIHBvaW50ZXIuIEl0IGRv
ZXMKKyAgICAvLyB0aGlzIGJ5IGZpcnN0LWZpdCBhbGxvY2F0aW5nIHN0YWNrIHNsb3RzLiBJdCBz
aG91bGQgYmUgcHJldHR5IGRhcm4gY2xvc2UgdG8gb3B0aW1hbCwgc28gd2UKKyAgICAvLyBzaG91
bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHZlcnkgbXVjaC4KKyAgICBhbGxvY2F0ZVN0
YWNrKGNvZGUpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWFsbHkgaGF2ZSBhIGNvZGUg
bGF5b3V0IG9wdGltaXphdGlvbiBoZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA0NzgKKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgbGF0ZSBs
aXZlbmVzcyBhbmFseXNpcyBvdmVyIHJlZ2lzdGVycyB0byBmaWxsIGluIHRoZQorICAgIC8vIFNw
ZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTExCisKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigp
KQorICAgICAgICB2YWxpZGF0ZShjb2RlLCAiZmluYWwiKTsKKworICAgIGlmIChzaG91bGREdW1w
SVIoKSkgeworICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsKKyAg
ICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICAvLyBBbmQgbm93LCB3ZSBnZW5lcmF0
ZSBjb2RlLgorICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5hZGRQdHIo
VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKworICAgIEdlbmVyYXRpb25Db250ZXh0IGNvbnRleHQ7CisgICAgY29u
dGV4dC5jb2RlID0gY29kZTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6
OkxhYmVsPiBibG9ja0xhYmVscyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9j
aywgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CisKKyAg
ICBhdXRvIGxpbmsgPSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiB0
YXJnZXQpIHsKKyAgICAgICAgaWYgKGJsb2NrTGFiZWxzW3RhcmdldF0uaXNTZXQoKSkgeworICAg
ICAgICAgICAganVtcC5saW5rVG8oYmxvY2tMYWJlbHNbdGFyZ2V0XSwgJmppdCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBibG9ja0p1bXBzW3RhcmdldF0uYXBw
ZW5kKGp1bXApOworICAgIH07CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
eworICAgICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQpOworICAgICAgICBBU1NFUlQo
YmxvY2stPnNpemUoKSA+PSAxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLT5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBq
dW1wID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUX1VO
VVNFRChqdW1wLCAhanVtcC5pc1NldCgpKTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
aWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlKCkgPT0gSnVtcAorICAgICAgICAgICAgJiYgYmxvY2st
PnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmluZE5leHRCbG9jayhibG9jaykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5vcGNvZGUoKSA9PSBS
ZXQpIHsKKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCByZXByZXNlbnQgdGhlIGZ1
bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBzbyB3ZSBuZWVkIHRvCisgICAgICAgICAgICAv
LyBoYXZlIHRoaXMgb3ZlcnJpZGUuCisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9n
dWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2Nr
LT5sYXN0KCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0
IDogKmJsb2NrKQorICAgICAgICAgICAganVtcCA9IGluc3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0
KTsKKyAgICAgICAgc3dpdGNoIChibG9jay0+bnVtU3VjY2Vzc29ycygpKSB7CisgICAgICAgIGNh
c2UgMDoKKyAgICAgICAgICAgIEFTU0VSVCghanVtcC5pc1NldCgpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNj
ZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAg
ICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkpOworICAgICAgICAg
ICAgaWYgKGJsb2NrLT5zdWNjZXNzb3JCbG9jaygxKSAhPSBjb2RlLmZpbmROZXh0QmxvY2soYmxv
Y2spKQorICAgICAgICAgICAgICAgIGxpbmsoaml0Lmp1bXAoKSwgYmxvY2stPnN1Y2Nlc3NvckJs
b2NrKDEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvJiBsYXRlUGF0aCA6IGNvbnRleHQubGF0ZVBh
dGhzKQorICAgICAgICBsYXRlUGF0aC0+cnVuKGppdCwgY29udGV4dCk7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5lcmF0ZV9oCisjZGVmaW5lIEFpckdlbmVyYXRl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2Fs
bEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2Rl
OworCisvLyBUaGlzIHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0IGhhc24ndCBoYWQgYW55IHN0YWNr
IGFsbG9jYXRpb24gYW5kIG9wdGlvbmFsbHkgaGFzbid0IGhhZCBhbnkKKy8vIHJlZ2lzdGVyIGFs
bG9jYXRpb24gYW5kIGRvZXMgYm90aCBvZiB0aG9zZSB0aGluZ3MsIGFuZCB0aGVuIGdlbmVyYXRl
cyB0aGUgY29kZSB1c2luZyB0aGUgZ2l2ZW4KKy8vIENDYWxsSGVscGVycyBpbnN0YW5jZS4gTm90
ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJhY2tzIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0
IGlzCisvLyBnZW5lcmF0aW5nLgordm9pZCBnZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRpb25Db250ZXh0X2gK
KyNkZWZpbmUgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0IHsKKyAgICB0
eXBlZGVmIHZvaWQgTGF0ZVBhdGhGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29u
dGV4dCYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0
aDsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7CisgICAgQ29kZSog
Y29kZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2Vy
dGlvblNldC5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVz
KENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJoYW5kbGVD
YWxsZWVTYXZlcyIpOworCisgICAgUmVnaXN0ZXJTZXQgdXNlZENhbGxlZVNhdmVzOworCisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0
IDogKmJsb2NrKSB7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KAorICAgICAgICAg
ICAgICAgIFsmXSAoVG1wJiB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXQgZmlyc3Qg
d2UganVzdCByZWNvcmQgYWxsIHVzZWQgcmVncy4KKyAgICAgICAgICAgICAgICAgICAgdXNlZENh
bGxlZVNhdmVzLnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gTm93IHdlIGZpbHRlciB0byByZWFsbHkgZ2V0IHRoZSBjYWxsZWUg
c2F2ZXMuCisgICAgdXNlZENhbGxlZVNhdmVzLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKKworICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpID0gUmVnaXN0
ZXJBdE9mZnNldExpc3QodXNlZENhbGxlZVNhdmVzKTsKKworICAgIHNpemVfdCBieXRlU2l6ZSA9
IDA7CisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkuZm9yRWFjaCgKKyAgICAgICAgWyZd
IChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgeworICAgICAgICAgICAgYnl0ZVNpemUg
PSBzdGQ6Om1heCgtZW50cnkub2Zmc2V0KCksIGJ5dGVTaXplKTsKKyAgICAgICAgfSk7CisKKyAg
ICBTdGFja1Nsb3QqIHNhdmVzQXJlYSA9IGNvZGUuYWRkU3RhY2tTbG90KGJ5dGVTaXplLCBTdGFj
a1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgc2luY2Ugd2Ug
Y291bGQgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVudCBzdGFjayBzbG90IHRvIHRoaXMK
KyAgICAvLyBhcmVhLgorICAgIHNhdmVzQXJlYS0+c2V0T2Zmc2V0RnJvbUZQKC1ieXRlU2l6ZSk7
CisKKyAgICBhdXRvIGFyZ0ZvciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkp
IHsKKyAgICAgICAgcmV0dXJuIEFyZzo6U3RhY2soc2F2ZXNBcmVhLCBlbnRyeS5vZmZzZXQoKSAr
IGJ5dGVTaXplKTsKKyAgICB9OworCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2Rl
KTsKKyAgICAKKyAgICAvLyBGaXJzdCBpbnNlcnQgc2F2aW5nIGNvZGUgaW4gdGhlIHByb2xvZ3Vl
LgorICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpLmZvckVhY2goCisgICAgICAgIFsmXSAo
Y29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoCisgICAgICAgICAgICAgICAgMCwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUg
OiBNb3ZlRG91YmxlLCBUbXAoZW50cnkucmVnKCkpLCBhcmdGb3IoZW50cnkpKTsKKyAgICAgICAg
fSk7CisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29kZVswXSk7CisKKyAgICAvLyBOb3cgaW5z
ZXJ0IHJlc3RvcmUgY29kZSBhdCBlcGlsb2d1ZXMuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKKyAgICAgICAgSW5zdCYgbGFzdCA9IGJsb2NrLT5sYXN0KCk7CisgICAgICAg
IGlmIChsYXN0Lm9wY29kZSgpICE9IFJldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpLmZvckVhY2goCisgICAgICAgICAgICBbJl0g
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIGVu
dHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwKKyAgICAgICAgICAgICAgICAg
ICAgYXJnRm9yKGVudHJ5KSwgVG1wKGVudHJ5LnJlZygpKSk7CisgICAgICAgICAgICB9KTsKKyAg
ICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNh
dmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckhh
bmRsZUNhbGxlZVNhdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRs
ZUNhbGxlZVNhdmVzX2gKKyNkZWZpbmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHBoYXNlIGlkZW50aWZpZXMgY2FsbGVlLXNh
dmUgcmVnaXN0ZXJzIGFuZCBhZGRzIGNvZGUgdG8gc2F2ZS9yZXN0b3JlIHRoZW0gaW4gdGhlCisv
LyBwcm9sb2d1ZS9lcGlsb2d1ZSB0byB0aGUgY29kZS4gSXQncyBhIG1hbmRhdG9yeSBwaGFzZS4K
KworLy8gRklYTUU6IEl0IHdvdWxkIGJlIGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3Rp
dmUgd2l0aCB0aGUgQWlyIGNsaWVudCBhbmQgYWxzbyBtb3JlCisvLyBwb3dlcmZ1bC4KKy8vIFdl
IHNob3VsZCBoYXZlIHNocmluayB3cmFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ1OAorLy8gV2Ugc2hvdWxkIG1ha2UgdGhpcyBpbnRlcmFjdCB3aXRo
IHRoZSBjbGllbnQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0
NTkKKwordm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJIYW5kbGVDYWxsZWVTYXZlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0
aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRp
b25zKGJsb2NrLT5tX2luc3RzLCBtX2luc2VydGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnNlcnRpb25TZXRfaAorI2RlZmluZSBB
aXJJbnNlcnRpb25TZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpcklu
c3QuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIEJhc2ljQmxvY2s7CitjbGFzcyBDb2RlOworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPElu
c3Q+IEluc2VydGlvbjsKKworY2xhc3MgSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBJbnNl
cnRpb25TZXQoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAg
fQorCisgICAgQ29kZSYgY29kZSgpIHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYgaW5zZXJ0aW9uKQorICAg
IHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oaW5zZXJ0aW9u
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGluc2Vy
dEluc3Qoc2l6ZV90IGluZGV4LCBJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVuZElu
c2VydGlvbihJbnNlcnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBp
bnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAg
ICAgICBpbnNlcnRJbnN0KGluZGV4LCBJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykuLi4pKTsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitw
cml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2lu
c2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9M
aXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK3ZvaWQgSW5zdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChvcGNvZGUsICIgIiwgbGlzdER1bXAoYXJncyksICIgIDsgIiwgKm9yaWdpbik7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVmaW5lIEFpckluc3RfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpck9w
Y29kZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQ0NhbGxIZWxwZXJzOworY2xhc3MgUmVnaXN0ZXJTZXQ7CisKK25hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25D
b250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJn
LCAzPiBBcmdMaXN0OworCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQor
ICAgICAgICA6IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7
CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJ
bnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCisgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAs
IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQor
CisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBh
cmd1bWVudHMpCisgICAgICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9y
aWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0
KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAg
ICAgIDogYXJncyhXVEY6Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2lu
KQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUg
dGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdh
bnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVh
bnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3Qm
IiB0aGVuIHlvdSdyZQorICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8g
VGhpcyBvbmx5IHdhbGtzIHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQs
IGFuZCBpdCBkb2Vzbid0IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcmIGFyZyA6IGFyZ3Mp
CisgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAgfQorCisgICAg
dHlwZWRlZiB2b2lkIEVhY2hBcmdDYWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSk7
CisgICAgCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4g
VGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0
b3IucmIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hB
cmcoY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3
aXRoICh0bXAsIHJvbGUsIHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgdm9pZCBmb3JFYWNoVG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICBmb3JFYWNoQXJnUm9sZSgKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSBy
b2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJv
bGUsIHR5cGUsIGZ1bmN0b3IpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gVGhp
bmcgY2FuIGJlIGVpdGhlciBBcmcgb3IgVG1wLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5n
LCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNw
ZWNpYWwqLiBUaGlzIHVubG9ja3Mgc29tZSBleHRyYSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wg
aGFzU3BlY2lhbCgpIGNvbnN0OworCisgICAgLy8gUmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdp
c3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVu
Y3ksCisgICAgLy8gZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFs
KCkgcmV0dXJucyB0cnVlLgorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJl
Z3MoKTsKKworICAgIC8vIFVzZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxp
dmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8v
IHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlm
IGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJz
KGNvbnN0IFJlZ2lzdGVyU2V0Jik7CisKKyAgICAvLyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9u
ZSBvZiB0aGUgdmFsaWQgZm9ybXMgcmlnaHQgbm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2Vu
ZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRG
b3JtKCk7CisKKyAgICAvLyBBc3N1bWluZyB0aGlzIGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQg
Zm9ybSByaWdodCBub3csIHdpbGwgaXQgc3RpbGwgYmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAg
IC8vIGZvcm1zIGlmIHdlIHB1dCBhbiBBZGRyIHJlZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBT
dGFja1Nsb3Qgb3IgQ2FsbEFyZywgb2YgY291cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRl
eD8gU3BpbGxpbmcgdXNlcyB0aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5k
IFRtcHMgdGhhdCBuZWVkIHNwaWxsaW5nOworICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2Fs
bHMgdGhpcyB0byBzZWUgaWYgaXQgY2FuIHJlcGxhY2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJn
OjpBZGRyLiBJZiBpdAorICAgIC8vIGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMg
dGhhdCBBcmcncyBmb3JFYWNoVG1wIHRvIGRvIGEgcmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAg
Ly8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5l
cmF0b3IucmIuCisgICAgYm9vbCBhZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAg
ICAvLyBHZW5lcmF0ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxp
a2UsIGxpdGVyYWxseSBvdXIgYmFja2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5h
bCwgaXQgcmV0dXJucyB0aGUganVtcCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0
aGVuIiBjYXNlLCB3aXRoIHRoZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3Vn
aC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJi
LgorICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0
aW9uQ29udGV4dCYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAg
ICBBcmdMaXN0IGFyZ3M7CisgICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0
IHRoaXMgb3JpZ2luYXRlZCBmcm9tLgorICAgIE9wY29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQWlySW5zdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpckluc3RJbmxpbmVzX2gKKyNkZWZpbmUgQWlySW5zdElubGluZXNfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGls
cy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWxzLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRm9yRWFjaDsKK3Rl
bXBsYXRlPD4gc3RydWN0IEZvckVhY2g8VG1wPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAgICB9Cit9Owor
dGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1bmN0b3IpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBmb3JF
YWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgRm9yRWFjaDxUaGluZz46OmZvckVh
Y2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitib29sIEluc3Q6Omhhc1NwZWNpYWwoKSBjb25zdAor
eworICAgIHJldHVybiBhcmdzLnNpemUoKSAmJiBhcmdzWzBdLmlzU3BlY2lhbCgpOworfQorCitj
b25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sKKyAgICBBU1NF
UlQoaGFzU3BlY2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xv
YmJlcmVkUmVncygqdGhpcyk7Cit9CisKK3ZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lh
bCgpKTsKKyAgICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywg
dXNlZFJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBib29sIGlzU2hpZnRWYWxpZChJbnN0JiBpbnN0
KQoreworI2lmIENQVShYODYpCisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9PSBUbXAoWDg2UmVn
aXN0ZXI6OmN4KTsKKyNlbHNlCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30gICAKKworaW5s
aW5lIGJvb2wgaXNMc2hpZnQzMlZhbHVlKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzU2hp
ZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckluc3RJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckxpdmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2
ZW5lc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2su
aCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gWW91IGNhbiBjb21wdXRlIGxpdmVuZXNzIG92ZXIg
VG1wJ3Mgb3Igb3ZlciBBcmcncy4gSWYgeW91IGNvbXB1dGUgb3ZlciBBcmcncywgeW91IGdldCBi
b3RoCisvLyBzdGFjayBsaXZlbmVzcyBhbmQgdG1wIGxpdmVuZXNzLgordGVtcGxhdGU8dHlwZW5h
bWUgVGhpbmc+CitjbGFzcyBMaXZlbmVzcyB7CitwdWJsaWM6CisgICAgTGl2ZW5lc3MoQ29kZSYg
Y29kZSkKKyAgICB7CisgICAgICAgIG1fbGl2ZUF0SGVhZC5yZXNpemUoY29kZS5zaXplKCkpOwor
ICAgICAgICBtX2xpdmVBdFRhaWwucmVzaXplKGNvZGUuc2l6ZSgpKTsKKworICAgICAgICBJbmRl
eFNldDxCYXNpY0Jsb2NrPiBzZWVuOworCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSBjb2RlLnNpemUoKTsgYmxvY2tJ
bmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gY29kZS5hdChi
bG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBMb2NhbENhbGMgbG9jYWxDYWxjKCp0aGlzLCBi
bG9jayk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaW5zdEluZGV4ID0gYmxvY2stPnNp
emUoKTsgaW5zdEluZGV4LS07KQorICAgICAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0
ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAgICAgICAgYm9vbCBmaXJzdFRpbWUg
PSBzZWVuLmFkZChibG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFRpbWUgJiYgbG9j
YWxDYWxjLmxpdmUoKSA9PSBtX2xpdmVBdEhlYWRbYmxvY2tdKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycygp
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl0uYWRkKAor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmxpdmUoKS5iZWdpbigpLCBsb2NhbENh
bGMubGl2ZSgpLmVuZCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9s
aXZlQXRIZWFkW2Jsb2NrXSA9IGxvY2FsQ2FsYy50YWtlTGl2ZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmVBdEhlYWQo
QmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9saXZlQXRI
ZWFkW2Jsb2NrXTsKKyAgICB9CisKKyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0VGFp
bChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVB
dFRhaWxbYmxvY2tdOworICAgIH0KKworICAgIC8vIFRoaXMgY2FsY3VsYXRvciBoYXMgdG8gYmUg
cnVuIGluIHJldmVyc2UuCisgICAgY2xhc3MgTG9jYWxDYWxjIHsKKyAgICBwdWJsaWM6CisgICAg
ICAgIExvY2FsQ2FsYyhMaXZlbmVzcyYgbGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAg
ICAgICAgICAgOiBtX2xpdmUobGl2ZW5lc3MtPmxpdmVBdFRhaWwoYmxvY2spKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGl2ZTsgfQorICAgICAgICBIYXNoU2V0PFRoaW5nPiYmIHRha2VMaXZlKCkg
eyByZXR1cm4gV1RGOjptb3ZlKG1fbGl2ZSk7IH0KKworICAgICAgICB2b2lkIGV4ZWN1dGUoSW5z
dCYgaW5zdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGRlZidzLgor
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10g
KFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKwor
ICAgICAgICAgICAgLy8gTmV4dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAg
ICAgIGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgICAgIGluc3QuZXh0cmFD
bG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgW3RoaXNdIChSZWcg
cmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKFRoaW5nKHJlZykp
OworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAg
IGluc3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJn
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICgh
YXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAg
ICBtX2xpdmUuYWRkKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+IG1fbGl2ZTsKKyAgICB9OworICAgIAor
cHJpdmF0ZToKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZl
QXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVB
dFRhaWw7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisj
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorCisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9
PiB1c2Ugb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRl
ZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBh
bmQgZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1
c2Ugb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQg
cmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lz
dGVyIG9yIHZhbHVlCisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9y
IHJlZ2lzdGVyCisjIEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9PiBUcnVz
dGVkSW1tNjQKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQK
KyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVzcwor
IworIyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVuZGVy
c3RhbmRzIHRoYXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhp
bmdzLiBTbywgYWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0aW9u
IHN0eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJlIG1l
YW5pbmdmdWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKyMK
KyMgRm9vNDIgVTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBhcnNl
ciB3b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBV
RDpGCisjICAgICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28tZm9y
bSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQgdXNl
cytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUg
aGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFj
cm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQzMiku
CisKK05vcAorCitBZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgor
ICAgIEltbSwgVG1wCisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6Rywg
VTpHLCBEOkcKKyAgICBJbW0sIFRtcCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwg
VG1wCisgICAgSW1tLCBUbXAKKyAgICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0s
IEFkZHIKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAK
KworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworTW92ZSBV
OkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAg
QWRkciwgVG1wIGFzIGxvYWQgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBj
b2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBUbXAsIEFkZHIgYXMgc3Rv
cmUKKworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFz
IGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKworTW92ZTY0VG9Eb3Vi
bGUgVTpHLCBEOkYKKyAgICBUbXAsIFRtcAorCitNb3ZlRG91YmxlVG82NCBVOkYsIEQ6RworICAg
IFRtcCwgVG1wCisKK0JyYW5jaEFkZDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXND
b25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBB
ZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0Jy
YW5jaE11bDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAor
ICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJh
bmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJl
c0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFk
ZHIsIFRtcAorCitCcmFuY2hOZWczMiBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRt
cAorCitKdW1wIC9icmFuY2gKKworUmV0IC90ZXJtaW5hbAorCitCcmVha3BvaW50IC90ZXJtaW5h
bAorCisjIEFpciBhbGxvd3MgZm9yIGV4b3RpYyBiZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9y
IGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIFNwZWNpYWwgb3BlcmFuZCwKKyMgd2hpY2gg
bXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4KK3NwZWNpYWwgUGF0Y2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFz
ZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitQaGFzZVNjb3BlOjpQ
aGFzZVNjb3BlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX2NvZGUoY29k
ZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFz
ZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAg
ICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQ
aGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJpbmcoY29kZSk7Cit9CisKK1Bo
YXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFj
aFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRh
dGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBo
YXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clBoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJQaGFz
ZVNjb3BlX2gKKyNkZWZpbmUgQWlyUGhhc2VTY29wZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworY2xhc3MgUGhhc2VTY29w
ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAg
UGhhc2VTY29wZShDb2RlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsg
Ly8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7Cisg
ICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpclBoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQ
UlJlZz4mIGdwc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+
KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxs
X29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9
IG5ldyBWZWN0b3I8R1BSUmVnPigpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVn
OjphbGxHUFJzKCk7CisgICAgICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tS
ZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2
ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNh
dmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgZm9y
IChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChy
ZWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIHJl
dHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnBzSW5Qcmlvcml0eU9y
ZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPEZQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwK
KyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7
CisgICAgICAgICAgICBSZWdpc3RlclNldCBhbGwgPSBSZWc6OmFsbEZQUnMoKTsKKyAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpOworICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICByZXN1bHQt
PmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChSZWcg
cmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8
UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUgdHlwZSkKK3sKKyAgICBzdGF0aWMg
VmVjdG9yPFJlZz4qIHJlc3VsdFtBcmc6Om51bVR5cGVzXTsKKyAgICBzdGF0aWMgc3RkOjpvbmNl
X2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAg
W10geworICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdID0gbmV3IFZlY3RvcjxSZWc+KCk7Cisg
ICAgICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBncHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAg
ICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICAg
ICAgcmVzdWx0W0FyZzo6RlBdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3Ig
KEZQUlJlZyByZWcgOiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVz
dWx0W0FyZzo6RlBdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICB9KTsKKyAgICByZXR1cm4g
KnJlc3VsdFt0eXBlXTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorI2RlZmluZSBBaXJSZWdp
c3RlclByaW9yaXR5X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcu
aCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUg
PHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpOwor
Y29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQmFuaz4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjsKK3RlbXBsYXRl
PD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPiB7CisgICAgY29uc3Qg
VmVjdG9yPEdQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGdwc0luUHJpb3JpdHlP
cmRlcigpOyB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVy
PEZQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkg
eyByZXR1cm4gZnBzSW5Qcmlvcml0eU9yZGVyKCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEJhbms+Citjb25zdCBWZWN0b3I8QmFuazo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlP
cmRlcigpCit7CisgICAgcmV0dXJuIFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Q
cmlvcml0eU9yZGVyKCk7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9y
ZGVyKEFyZzo6VHlwZSk7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJSZWdpc3RlclByaW9yaXR5X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0cmlu
Z1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworU3BlY2lhbDo6U3BlY2lhbChjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9u
YW1lKG5hbWUpCisgICAgLCBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVjaWFsOjp+U3Bl
Y2lhbCgpCit7Cit9CisKK0NTdHJpbmcgU3BlY2lhbDo6bmFtZSgpIGNvbnN0Cit7CisgICAgU3Ry
aW5nUHJpbnRTdHJlYW0gb3V0OworICAgIGR1bXBJbXBsKG91dCk7CisgICAgcmV0dXJuIG91dC50
b0NTdHJpbmcoKTsKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgpOworICAgIGR1bXBJbXBsKG91dCk7Cisg
ICAgaWYgKG1faW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludChtX2luZGV4KTsK
K30KKwordm9pZCBTcGVjaWFsOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgqdGhpcywgIjogIik7CisgICAgZGVlcER1bXBJbXBsKG91dCk7Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNw
ZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5n
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
Y2xhc3MgR2VuZXJhdGlvbkNvbnRleHQ7CisKK2NsYXNzIFNwZWNpYWwgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFNwZWNpYWwpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiYiOworICAgIAorICAg
IFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TcGVjaWFsKCk7CisKKyAgICBDU3RyaW5nIG5hbWUo
KSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29w
ZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wg
aXNWYWxpZChJbnN0JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhZG1pdHNTdGFjayhJbnN0Jiwg
dW5zaWduZWQgYXJnSW5kZXgpID0gMDsKKworICAgIC8vIFRoaXMgZ2V0cyBjYWxsZWQgb24gZm9y
IGVhY2ggSW5zdCB0aGF0IHVzZXMgdGhpcyBTcGVjaWFsLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8g
d2F5IHRvCisgICAgLy8gZ3VhcmFudGVlIHRoYXQgYSBTcGVjaWFsIGdldHMgdXNlZCBmcm9tIGp1
c3Qgb25lIEluc3QsIGJlY2F1c2UgQWlyIG1pZ2h0IHRhaWxkdXAgbGF0ZS4gU28sCisgICAgLy8g
aWYgeW91IHdhbnQgdG8gcGFzcyB0aGlzIGluZm9ybWF0aW9uIGRvd24gdG8gZ2VuZXJhdGUoKSwg
dGhlbiB5b3UgaGF2ZSB0byBlaXRoZXI6CisgICAgLy8KKyAgICAvLyAxKSBHZW5lcmF0ZSBBaXIg
dGhhdCBzdGFydHMgd2l0aCBhIHNlcGFyYXRlIFNwZWNpYWwgcGVyIFBhdGNoIEluc3QsIGFuZCB0
aGVuIG1lcmdlCisgICAgLy8gICAgdXNlZFJlZ2lzdGVyIHNldHMuIFRoaXMgaXMgcHJvYmFibHkg
bm90IGdyZWF0LCBidXQgaXQgb3B0aW1pemVzIGZvciB0aGUgY29tbW9uIGNhc2UgdGhhdAorICAg
IC8vICAgIEFpciBkaWRuJ3QgZHVwbGljYXRlIGNvZGUgb3IgdGhhdCBzdWNoIGR1cGxpY2F0aW9u
IGRpZG4ndCBjYXVzZSBhbnkgaW50ZXJlc3RpbmcgY2hhbmdlcyB0bworICAgIC8vICAgIHJlZ2lz
dGVyIGFzc2lnbm1lbnQuCisgICAgLy8KKyAgICAvLyAyKSBIYXZlIHRoZSBTcGVjaWFsIG1haW50
YWluIGEgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+LiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhl
IGFuYWx5c2lzCisgICAgLy8gICAgdGhhdCBmZWVkcyBpbnRvIHRoaXMgY2FsbCBpcyBwZXJmb3Jt
ZWQganVzdCBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIGFuZCB0aGVyZSBpcyBubyB3YXkKKyAgICAv
LyAgICBmb3IgdGhlIFZlY3Rvcjw+J3MgdGhhdCBjb250YWluIHRoZSBJbnN0cyB0byBiZSByZWFs
bG9jYXRlZC4gVGhpcyBhbGxvd3MgZ2VuZXJhdGUoKSB0bworICAgIC8vICAgIGNvbnN1bHQgdGhl
IEhhc2hNYXAuCisgICAgLy8KKyAgICAvLyAzKSBIeWJyaWQ6IHlvdSBjb3VsZCB1c2UgKDEpIGFu
ZCBmaXJlIHVwIGEgSGFzaE1hcCBpZiB5b3Ugc2VlIG11bHRpcGxlIGNhbGxzLgorICAgIC8vCisg
ICAgLy8gTm90ZSB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIHJlbHkgb24gcmVwb3J0VXNlZFJl
Z2lzdGVycygpIGJlaW5nIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlcgorICAgIC8vIGFzIGdlbmVy
YXRlKCkuIElmIHdlIGNvdWxkIHJlbHkgb24gdGhhdCwgdGhlbiB3ZSBjb3VsZCBqdXN0IGhhdmUg
ZWFjaCBTcGVjaWFsIGluc3RhbmNlCisgICAgLy8gbWFpbnRhaW4gYSBWZWN0b3Igb2YgUmVnaXN0
ZXJTZXQncyBhbmQgdGhlbiBwcm9jZXNzIHRoYXQgdmVjdG9yIGluIHRoZSByaWdodCBvcmRlciBp
bgorICAgIC8vIGdlbmVyYXRlKCkuIEJ1dCwgdGhlIG9yZGVyaW5nIGRpZmZlcmVuY2UgaXMgdW5s
aWtlbHkgdG8gY2hhbmdlIHNpbmNlIGl0IHdvdWxkIGhhcm0gdGhlCisgICAgLy8gcGVyZm9ybWFu
Y2Ugb2YgdGhlIGxpdmVuZXNzIGFuYWx5c2lzLgorICAgIC8vCisgICAgLy8gQ3VycmVudGx5LCB3
ZSBkbyAoMSkgZm9yIEIzIHN0YWNrbWFwcy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0VXNlZFJl
Z2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSA9IDA7CisgICAgCisgICAgdmlydHVh
bCBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVy
YXRpb25Db250ZXh0JikgPSAwOworCisgICAgdmlydHVhbCBjb25zdCBSZWdpc3RlclNldCYgZXh0
cmFDbG9iYmVyZWRSZWdzKEluc3QmKSA9IDA7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7
CisgICAgdmlydHVhbCB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAgIGNvbnN0IGNoYXIqIG1f
bmFtZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKworY2xhc3MgRGVlcFNwZWNpYWxEdW1w
IHsKK3B1YmxpYzoKKyAgICBEZWVwU3BlY2lhbERpbXAoU3BlY2lhbCogc3BlY2lhbCkKKyAgICAg
ICAgOiBtX3NwZWNpYWwoc3BlY2lhbCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zcGVjaWFsKQorICAg
ICAgICAgICAgbV9zcGVjaWFsLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBTcGVjaWFs
KiBtX3NwZWNpYWw7Cit9OworCitEZWVwU3BlY2lhbER1bXAgZGVlcER1bXAoU3BlY2lhbCogc3Bl
Y2lhbCkKK3sKKyAgICByZXR1cm4gRGVlcFNwZWNpYWxEdW1wKHNwZWNpYWwpOworfQorCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxs
RXZlcnl0aGluZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3Bl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
dm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUoY29kZSwgInNwaWxsRXZlcnl0aGluZyIpOworCisgICAgLy8gV2Ugd2FudCB0byBrbm93
IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFzaWMg
YmxvY2suCisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNl
ZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CisgICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhjb2Rl
KTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVz
czxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgIHVz
ZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgpICsgMSk7CisKKyAgICAgICAg
YXV0byBzZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBpbmRleCkgeworICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luZGV4XTsKKyAgICAg
ICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAg
ICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQodG1wLnJlZygp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNldFVzZWRSZWdpc3RlcnMo
YmxvY2stPnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRl
eCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgbG9jYWxDYWxj
LmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgc2V0VXNlZHJlZ2lz
dGVycyhpbnN0SW5kZXgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gQWxsb2NhdGUgYSBz
dGFjayBzbG90IGZvciBlYWNoIHRtcC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tT
bG90c1tBcmc6Om51bVR5cGVzXTsKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5
cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsrdHlwZUluZGV4KSB7CisgICAgICAgIFZlY3RvcjxT
dGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0YWNrU2xvdHNbdHlwZUluZGV4XTsKKyAgICAg
ICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxBcmc6OlR5cGU+KHR5cGVJbmRleCk7Cisg
ICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUubnVtVG1wcyh0eXBlKSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51bVRtcHModHlwZSk7IHRtcEluZGV4LS07KQor
ICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBT
dGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgIH0KKworICAgIEluc2VydGlvblNldCBpbnNl
cnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6
ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldEJlZm9yZSA9
IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleF07CisgICAgICAgICAgICBSZWdpc3RlclNl
dCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXggKyAxXTsKKyAgICAg
ICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGlu
c3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxsU3RhY2tTbG90c1t0eXBlXVt0bXAudG1wSW5k
ZXgoKV07CisgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xv
dCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBmaWd1cmUgb3V0IGEgcmVnaXN0
ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBkZXBlbmRzIG9uIHRoZSByb2xlLgorICAgICAgICAg
ICAgICAgICAgICBSZWcgY2hvc2VuUmVnOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJv
bGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZToKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpEZWY6CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZURlZjoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0
KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJl
Zyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAg
IHRtcCA9IFRtcChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAgIE9wY29kZSBtb3Zl
ID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGUKKworICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgs
IG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGlu
c2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGlu
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAor
I2RlZmluZSBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2Rl
OworCisvLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRlc3RpbmcuIEl0IGJlaGF2ZXMgbGlrZSBhIHJl
Z2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2UgdGhhdCBpdAorLy8gZWxpbWluYXRlcyB0ZW1w
b3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBhbHdheXMg
c3BpbGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmllcy4gVGhlIHJlc3VsdGluZyBjb2RlIGlzIGdvaW5n
IHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMgcGhhc2UgaXMgZ3JlYXQgaWYgeW91CisvLyB0
aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuIFlvdSBj
YW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhpcworLy8gcGhhc2UgaW5zdGVhZCBvZiB0aGUg
cmVnaXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8vIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGlzIHBo
YXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBvc3NpYmxlLCBpdCdzIG5vdCBldmVuIHdyaXR0
ZW4gaW4gYQorLy8gcGFydGljdWxhcmx5IGVmZmljaWVudCB3YXkuIFNvLCBkb24ndCBnZXQgYW55
IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2UgdG8gcmVkdWNlIGNvbXBpbGVyCisvLyBsYXRl
bmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQsIHlvdSBzaG91bGQgY29tZSB1cCB3aXRoIGEg
Y2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVzaW5nCisvLyB0aGlzIHNpbGx5IHRoaW5nLgor
Cit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGls
bEV2ZXJ5dGhpbmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0
YWNrU2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lk
IFN0YWNrU2xvdDo6c2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQoreworICAgIG1fb2Zm
c2V0RnJvbUZQID0gdmFsdWU7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG1fdmFsdWUtPm1f
b2Zmc2V0RnJvbUZQID0gdmFsdWU7Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFjayIsIG1faW5kZXgpOworfQor
Cit2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0g
IiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworICAgIGlmIChtX3ZhbHVl
KQorICAgICAgICBvdXQucHJpbnQoIiwgdmFsdWUgPSAiLCAqbV92YWx1ZSk7Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3RhY2tTbG90X2gKKyNkZWZpbmUgQWly
U3RhY2tTbG90X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xv
dEtpbmQuaCIKKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3Rh
Y2tTbG90dmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFja1Nsb3QgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBt
X2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXV0cm4gbV9r
aW5kOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisK
KyAgICB1bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGJ5dGVT
aXplKCkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBpZiAoYnl0ZVNpemUo
KSA8PSAyKQorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9
IDQpCisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorCisg
ICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisg
ICAgLy8gWmVybyBtZWFucyB0aGF0IGl0J3Mgbm90IHlldCBhc3NpZ25lZC4KKyAgICBpbnRwdHJf
dCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAg
Ly8gVGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGNhbGxlZCBmcm9tIHBoYXNlcyB0aGF0IGRv
IHN0YWNrIGFsbG9jYXRpb24uIEJ1dCB5b3UgY2FuCisgICAgLy8gdG90YWxseSBmb3JjZSBhIHN0
YWNrIHNsb3QgdG8gbGFuZCBhdCBzb21lIG9mZnNldC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21G
UChpbnRwdHJfdCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2
b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVk
IGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICAg
ICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
ICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAsIG1f
a2luZChraW5kKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgICAgICBBU1NF
UlQoYnl0ZVNpemUpOworICAgIH0KKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7CisgICAgU3Rh
Y2tTbG90S2luZCBtX2tpbmQ7CisgICAgU3RhY2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitj
bGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAo
U3RhY2tTbG90KiBzbG90KQorICAgICAgICA6IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChtX3Nsb3QpCisgICAgICAgICAgICBtX3Nsb3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFN0YWNrU2xvdCogbV9zbG90OworfTsKKworRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAo
U3RhY2tTbG90KiBzbG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
VG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgewor
ICAgICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGlzUmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChpc0dQVG1wKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIl
dG1wIiwgZ3BUbXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5w
cmludCgiJWZ0bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRt
cF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
RlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBBcmc7
CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgYSByZWdpc3Rlci4gSXQgY2FuIGJl
IHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBvciBGUFIuIEl0IGNhbiBhbHNvCisvLyBiZSB1c2Vk
IHRvIHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9yYXJ5KS4g
TGlrZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJzZSBuYW1p
bmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGlzIG5hbWUgYSBsb3QuCisKK2NsYXNzIFRt
cCB7CitwdWJsaWM6CisgICAgVG1wKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgeworICAg
IH0KKworICAgIGV4cGxpY2l0IFRtcChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJlZykg
eworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIG1fdmFsdWUg
PSBlbmNvZGVHUFIocmVnLmdwcigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJlZy5mcHIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgbV92YWx1ZSA9IDA7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKGNvbnN0IEFyZyYp
OworCisgICAgc3RhdGljIFRtcCBncFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsK
KyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVHUFRt
cChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRt
cCBmcFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChpbmRleCk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNv
bnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29s
IGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUp
OworICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUFIobV92YWx1ZSk7CisgICAgfQorCisg
ICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUFIoKSB8fCBp
c0ZQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGRlY29kZUdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQorCisg
ICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGdwcigpOworICAgICAgICByZXR1cm4gZnByKCk7CisgICAgfQorCisgICAgYm9v
bCBoYXNUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzUmVnKCk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJ
bmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7
CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIHJl
dHVybiBmcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhISp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUg
PT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1w
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisgICAgCitw
cml2YXRlOgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCisgICAgewor
ICAgICAgICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2Rl
RlAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBpbmRleDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkp
OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisgICAgewor
ICAgICAgICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdp
c3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQVG1wKHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFz
dFJlZ2lzdGVyKCkpICsgMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2Rl
RlBUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlBSKE1h
Y3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEgLSBpbmRleDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gdmFsdWUgPiAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQKGludCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA8IDA7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNFbmNvZGVkR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjps
YXN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBSKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgdmFs
dWUgPj0gZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRHUFIodmFsdWUpOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEZQUih2YWx1
ZSk7CisgICAgfQorCisgICAgc3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50IHZhbHVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8R1BSUmVnPigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVuY29kZUdQUihNYWNy
b0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdp
c3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQUihpbnQgdmFsdWUp
CisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KAorICAgICAgICAgICAgKGVuY29kZUZQUihNYWNyb0Fz
c2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2ln
bmVkIGRlY29kZUdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29k
ZWRHUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5jb2RlR1BSKE1hY3Jv
QXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgZGVjb2RlRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5j
b2RlZEZQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBSKE1hY3JvQXNzZW1i
bGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQorCisgICAgLy8gMDog
ZW1wdHkgVG1wCisgICAgLy8gcG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1AgdGVtcHMuCisgICAg
Ly8gbmVnYXRpdmU6IEZQUnMgYW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50IG1fdmFsdWU7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQWlyVG1wX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyVG1wSW5saW5lc19oCisjZGVmaW5lIEFpclRtcElubGluZXNfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpclRtcC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2lu
bGluZSBUbXA6OlRtcChjb25zdCBBcmcmIGFyZykKK3sKKyAgICAqdGhpcyA9IGFyZy50bXAoKTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitj
bGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihDb2RlJiBjb2RlLCBjb25z
dCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQorICAgICAgICA6IG1fY29kZShj
b2RlKQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1w
QmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNz
YWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNv
bmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdU
Rl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAg
IH0gd2hpbGUgKGZhbHNlKQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIEhh
c2hTZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90czsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2Nr
Kj4gdmFsaWRCbG9ja3M7CisgICAgICAgIEhhc2hTZXQ8U3BlY2lhbCo+IHZhbGlkU3BlY2lhbHM7
CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAgICAgICAgICAg
IHZhbGlkQmxvY2tzLmFkZChibG9jayk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDog
bV9jb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIHZhbGlkU2xvdHMuYWRkKHNsb3QpOwor
ICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBtX2NvZGUuc3BlY2lhbHMoKSkKKyAgICAg
ICAgICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNwZWNpYWwpOworCisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdElu
ZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAg
ICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTdGFjazoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU2xvdHMuY29udGFpbnMoYXJnLnN0
YWNrU2xvdCgpKSwgKCJBdCAiLCBpbnN0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsaWRTcGVjaWFscy5jb250YWlucyhhcmcuc3BlY2lhbCgpKSwgKCJB
dCAiLCBpbnN0KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBWQUxJREFURShpbnN0LmlzVmFsaWRGb3JtKCksICgiQXQgIiwg
aW5zdCkpOworICAgICAgICAgICAgICAgIGlmIChpbnN0SW5kZXggPT0gYmxvY2stPnNpemUoKSAt
IDEpCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUo
KSkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
IWlzVGVybWluYWwoaW5zdC5vcGNvZGUoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29ycygpKQorICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbGlkQmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiQXQg
IiwgKmJsb2NrKSk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBmYWls
KAorICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNo
YXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBjb25kaXRpb24sCisgICAgICAgIENTdHJpbmcgbWVz
c2FnZSkKKyAgICB7CisgICAgICAgIENTdHJpbmcgZmFpbHVyZU1lc3NhZ2U7CisgICAgICAgIHsK
KyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiQUlSIFZBTElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAg
ICAgaWYgKG1fd2hlbikKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBEdXJpbmcgIiwg
bV93aGVuLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmlu
ZygpOworICAgICAgICB9CisKKyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAg
ICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAgb3V0LnByaW50KCJCZWZvcmUg
Iiwgd2hlbiwgIjpcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KG1fZHVtcEJlZm9yZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgb3V0LnByaW50KCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAg
ICAgICAgb3V0LnByaW50KG1fY29kZSk7CisKKyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNz
YWdlKTsKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShmaWxlbmFtZSwgbGluZU51
bWJlciwgZnVuY3Rpb24sIGNvbmRpdGlvbik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAg
IAorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBtX3doZW47CisgICAgY29uc3Qg
Y2hhciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3Zv
aWQgdmFsaWRhdGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVt
cEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIHdoZW4sIGR1bXBCZWZv
cmUpOworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyVmFsaWRhdGVfaAorI2RlZmluZSBBaXJWYWxpZGF0ZV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK2NsYXNzIENvZGU7CisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYsIGNvbnN0IGNoYXIqIHdo
ZW4gPSBudWxscHRyLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4NTUgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29k
ZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2FkcworICAgIGF0dHJf
YWNjZXNzb3IgOmtpbmQKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHNwZWNpYWwpCisgICAg
ICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IHNwZWNpYWwKKyAgICAgICAgQGtp
bmQgPSA6aW5zdAorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAgICAgICAgICAgQG92ZXJsb2Fk
cyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIG1hc21OYW1lCisgICAgICAg
IG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVuZAorZW5kCisKK2NsYXNzIEFy
ZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAgZGVmIGluaXRpYWxpemUocm9s
ZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAgIEB0eXBlID0gdHlwZQorICAg
IGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9yZWFkZXIgOnNpZ25hdHVyZSwg
OmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICBA
c2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9IGZvcm1zCisgICAgZW5kCitl
bmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0cl9hY2Nlc3Nv
ciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkKKyAgICAgICAgQG5hbWUgPSBu
YW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQKKworICAgIGRlZiA9PShvdGhl
cikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAgICAgICAgICBAbmFtZSA9PSBv
dGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlci5uYW1lIGFuZCBA
c3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9PSAiQWRkciIKKyAgICAgICAg
ICAgIFsiQWRkciIsICJTdGFja1Nsb3QiLCAiQ2FsbEFyZyJdCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBhcmdLaW5kcwor
ICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xhc3MgRm9ybQor
ICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0aWFsaXplKGtp
bmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBAYWx0TmFtZSA9
IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6
ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUs
IGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5l
TnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAg
ICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2Vu
CisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFs
aXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBz
dHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAg
IGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmlu
ZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVu
ZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBv
dGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5z
cGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpj
b21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBh
cnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFy
c2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAor
ZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5l
dyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hp
bGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhb
XlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFc
bi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVy
ICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAgICAgICByZXN1
bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAg
ICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25v
cmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXC9dLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2Vu
Lm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUs
IGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNw
ZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQK
KyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFUp
fChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgo
Ryl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChU
bXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKSlcWi8K
K2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9r
ZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRv
a2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+
IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitj
bGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAg
QHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQK
KworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBk
ZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVy
cm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VF
cnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0
eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVu
ZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAor
ICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJF
eHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFu
Y2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQg
PSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIp
IHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJl
c3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRv
a2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBV
RCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0
CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4u
c3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxl
c3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5k
CisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisg
ICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQsIFRtcCwgQWRkciwg
SW5kZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAg
ICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAg
ICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAg
YnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICBpZiB0b2tlbiA9
PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBjb25zdW1lKCJzcGVjaWFsIikKKyAgICAgICAg
ICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAg
IHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVzdWx0
W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBPcGNv
ZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBpZiBy
ZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gcmVzdWx0W29w
Y29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9h
ZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwg
ZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IG9wY29kZQor
ICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAg
ICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgaXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAg
ICAgICAgICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN1bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBl
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25h
dHVyZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiLyIKKyAgICAg
ICAgICAgICAgICAgICAgY29uc3VtZSgiLyIpCisgICAgICAgICAgICAgICAgICAgIGNhc2UgdG9r
ZW4uc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIHdoZW4gImJyYW5jaCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOmJyYW5jaAorICAgICAgICAgICAgICAgICAgICB3
aGVuICJ0ZXJtaW5hbCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOnRl
cm1pbmFsCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnNlRXJyb3IoIkJhZCAvIGRpcmVjdGl2ZSIpCisgICAgICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgICAgICBhZHZhbmNlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAg
ICAgICAgICAgICBpZiBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3Agewor
ICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAg
ICAgYWx0TmFtZSA9IG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1
bmxlc3Mga2luZHNbLTFdLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAga2luZHNbLTFdLnNwZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN1bWUoIioiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGFsdE5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFz
IHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxl
bmd0aCA9PSBzaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5l
YWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5k
ZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBv
ciBraW5kLm5hbWUgPT0gIkltbTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBzaWduYXR1cmVbaW5kZXhdLnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVz
ZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkci
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhh
cyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgZm9ybXMgPDwgRm9ybS5uZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhayB1bmxlc3MgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3Ro
ID09IDAKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAw
CisgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAg
ICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJs
b2FkLm5ldyhzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKwor
ICAgICAgICByZXN1bHQKKyAgICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3Bh
cnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29k
ZXMgPSBwYXJzZXIucGFyc2UKKworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4o
IkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisg
ICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJv
bSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5w
dXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmlu
ZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAg
ICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisK
K2RlZiB3cml0ZUNQUChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmNw
cCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRz
ICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAt
LSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwi
Y29uZmlnLmhcIiIKKyAgICAgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpciN7ZmlsZW5hbWV9
LmhcIiIKKworICAgICAgICB5aWVsZCBvdXRwCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2Rl
IikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBp
bnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29k
ZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAu
cHV0cyAifTsiCisKKyAgICBvdXRwLnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1PcGNv
ZGVzID0gI3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RG
IHsiCisgICAgb3V0cC5wdXRzICJjbGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7Igor
ICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorfQorCit3cml0ZUNQUCgiT3Bjb2Rl
IikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcInd0Zi9QcmludFN0
cmVhbS5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRz
ICJ1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1
dHMgInsiCisgICAgb3V0cC5wdXRzICIgICAgc3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29k
ZXMua2V5cy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAg
ICBjYXNlICN7b3Bjb2RlfToiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICBvdXQucHJpbnQo
XCIje29wY29kZX1cIik7IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuOyIKKyAg
ICB9CisgICAgb3V0cC5wdXRzICIgICAgfSIKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9
IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKKyMgRnJvbSBoZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8g
ZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBzaW5jZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2
ZSBwYXR0ZXJuCisjIG1hdGNoZXIuCisKK2RlZiBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3Jt
cywgY29sdW1uSW5kZXgsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICByZXR1
cm4gaWYgZm9ybXMubGVuZ3RoID09IDAKKworICAgIGlmIGZpbHRlcltmb3Jtc10KKyAgICAgICAg
cmV0dXJuCisgICAgZW5kCisKKyAgICBpZiBjb2x1bW5JbmRleCA+PSBmb3Jtc1swXS5raW5kcy5s
ZW5ndGgKKyAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAxCisgICAgICAgIGNh
bGxiYWNrW2Zvcm1zWzBdXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKyAgICAKKyAgICBncm91
cHMgPSB7fQorICAgIGZvcm1zLmVhY2ggeworICAgICAgICB8IGZvcm0gfAorICAgICAgICBraW5k
ID0gZm9ybS5raW5kc1tjb2x1bW5JbmRleF0ubmFtZQorICAgICAgICBpZiBncm91cHNba2luZF0K
KyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA8PCBmb3JtCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGdyb3Vwc1traW5kXSA9IFtmb3JtXQorICAgICAgICBlbmQKKyAgICB9CisKKyAgICBpZiBz
cGVlZCA9PSA6ZmFzdCBhbmQgZ3JvdXBzLmxlbmd0aCA9PSAxCisgICAgICAgIG1hdGNoRm9ybXMo
b3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVy
LCBjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBvdXRwLnB1dHMgInN3
aXRjaCAoI3tjb2x1bW5HZXR0ZXJbY29sdW1uSW5kZXhdfSkgeyIKKyAgICBncm91cHMuZWFjaF9w
YWlyIHsKKyAgICAgICAgfCBrZXksIHZhbHVlIHwKKyAgICAgICAgb3V0cC5wdXRzICIjaWYgVVNF
KEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisgICAgICAgIEtpbmQuYXJnS2luZHMoa2V5
KS5lYWNoIHsKKyAgICAgICAgICAgIHwgYXJnS2luZCB8CisgICAgICAgICAgICBvdXRwLnB1dHMg
ImNhc2UgQXJnOjoje2FyZ0tpbmR9OiIKKyAgICAgICAgfQorICAgICAgICBtYXRjaEZvcm1zKG91
dHAsIHNwZWVkLCB2YWx1ZSwgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwg
Y2FsbGJhY2spCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMg
IiNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICB9CisgICAg
b3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1
dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQor
ICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5vcGNvZGUpIHsiCisgICAgJG9wY29kZXMu
dmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2Fz
ZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAg
ICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkT3Zlcmxv
YWRTd2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2Fm
ZSkKKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5hcmdzLnNpemUoKSkg
eyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVh
Y2ggeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2Fk
U3dpdGNoCisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZAorICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZW5kCisgICAgICAg
IGVuZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJk
ZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQK
KyAgICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgc3BlZWQsIGluc3QpCisgICAg
bWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGluc3QpIHsKKyAgICAgICAgfCBvcGNvZGUs
IG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxk
IG9wY29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29sdW1uR2V0dGVy
ID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAg
ICAgIiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICBjYWxsYmFj
ayA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgeWll
bGQgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0
Y2hGb3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmls
dGVyLCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2Rl
VXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5z
dC5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7IgorICAgIAorICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wgb3BnZW5IaWRk
ZW5UcnV0aCgpIHsgcmV0dXJuIHRydWU7IH0iCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIE9QR0VO
X1JFVFVSTih2YWx1ZSkgZG8ge1xcIgorICAgIG91dHAucHV0cyAiICAgIGlmIChvcGdlbkhpZGRl
blRydXRoKCkpXFwiCisgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVybiB2YWx1ZTtcXCIKKyAg
ICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBJbnN0Ojpmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRw
LCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAg
IGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sw
XSwgQXJnOjpVc2UsIEFyZzo6R1ApOyAvLyBUaGlzIGlzIGJhc2ljYWxseSBib2d1cywgYnV0IGl0
IHdvcmtzIGYgYW5hbHlzZXMgbW9kZWwgU3BlY2lhbCBhcyBhbiBpbW1lZGlhdGUuIgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJhcmdzWzBdLnNwZWNpYWwoKS0+Zm9yRWFjaEFyZygqdGhpcywgc2Nv
cGVkTGFtYmRhPEVhY2hBcmdDYWxsYmFjaz4oZnVuY3RvcikpOyIKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAg
ICAgICAgfCBhcmcsIGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xlID0gbmlsCisgICAgICAg
ICAgICAgICAgY2FzZSBhcmcucm9sZQorICAgICAgICAgICAgICAgIHdoZW4gIlUiCisgICAgICAg
ICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgorICAgICAgICAgICAgICAgIHdoZW4gIkQiCisgICAg
ICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVmIgorICAgICAgICAgICAgICAgIHdoZW4gIlVEIgor
ICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZURlZiIKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRl
eH1dLCBBcmc6OiN7cm9sZX0sIEFyZzo6I3thcmcudHlwZX1QKTsiCisgICAgICAgICAgICB9Cisg
ICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4iCisgICAgb3V0cC5wdXRzICJBTFdBWVNfSU5M
SU5FIGJvb2wgaXNWYWxpZEZvcm0oT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiQXJnOjpLaW5kIGtpbmRzW3Np
emVvZi4uLihBcmd1bWVudHMpXSA9IHsgYXJndW1lbnRzLi4uIH07IgorICAgIG91dHAucHV0cyAi
c3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8
IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAg
ICAgIG91dHAucHV0cyAic3dpdGNoIChzaXplb2YuLi4oQXJndW1lbnRzKSkgeyIKKyAgICAgICAg
dW5sZXNzIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2gg
eworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIKKyAgICAgICAgICAgICAgICBj
b2x1bW5HZXR0ZXIgPSBwcm9jIHsgfCBjb2x1bW5JbmRleCB8ICJraW5kc1sje2NvbHVtbkluZGV4
fV0iIH0KKyAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAg
ICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8Cisg
ICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgPSAobm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBr
aW5kIHwga2luZC5zcGVjaWFsIH0pCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKCN7c3BlY2lhbH0pOyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRl
ciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoi
CisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6Igor
ICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMg
InJldHVybiBmYWxzZTsgIgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiaW5s
aW5lIGJvb2wgaXNUZXJtaW5hbChPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInN3aXRj
aCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNv
ZGUgfAorICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6dGVybWluYWwgb3Igb3Bjb2RlLmtpbmQg
PT0gOmJyYW5jaAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIK
KyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAgIG91
dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91
dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCit3cml0ZUNQUCgiT3Bjb2RlVXRpbHMi
KSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdElubGlu
ZXMuaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6aXNWYWxpZEZvcm0oKSIK
KyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpzYWZl
LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAg
aWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFyZ3Muc2l6ZSgp
IDwgMSkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICghYXJnc1swXS5pc1NwZWNpYWwoKSkiCisgICAgICAgICAgICBvdXRw
LnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVS
TihhcmdzWzBdLnNwZWNpYWwoKS0+aXNWYWxpZCgqdGhpcykpOyIKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiA9IGZhbHNlCisgICAgICAgICAgICBvdmVybG9h
ZC5zaWduYXR1cmUubGVuZ3RoLnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAg
ICAgICAgICAgICAgICByb2xlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS5yb2xlCisgICAg
ICAgICAgICAgICAgdHlwZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZQorICAgICAg
ICAgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2luZGV4XQorICAgICAgICAgICAgICAgIG5lZWRz
TW9yZVZhbGlkYXRpb24gfD0ga2luZC5zcGVjaWFsCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgIyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgZm9ybSBtYXRjaGVzLiBXZSBkb24n
dCBoYXZlIHRvIHZhbGlkYXRlIHRoZSByb2xlLCBzaW5jZQorICAgICAgICAgICAgICAgICMga2lu
ZCBpbXBsaWVzIHJvbGUuIFNvLCB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHZhbGlkYXRlIGlzIHRo
ZSB0eXBlLiBBbmQgd2Ugb25seSBoYXZlCisgICAgICAgICAgICAgICAgIyB0byB2YWxpZGF0ZSB0
aGUgdHlwZSBpZiB3ZSBoYXZlIGEgVG1wLgorICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9
PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1sje2luZGV4
fV0udG1wKCkuaXMje3R5cGV9UCgpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIG5lZWRzTW9yZVZhbGlkYXRpb24KKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICghaXMje29wY29kZS5uYW1lfVZhbGlkKHRoaXMpKSIKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgIGVuZAorICAg
IH0KKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisg
ICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KSIK
KyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAg
ICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0
cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKworICAgICAgICBpZiBvcGNvZGUuc3BlY2lh
bAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ0luZGV4KSIKKyAgICAgICAgICAgIG91
dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVU
VVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5hZG1pdHNTdGFjaygqdGhpcywgYXJnSW5zdCkpOyIKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhlIGFyZ0luZGV4LgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7IgorCisgICAgICAgICAgICBudW1B
cmdzID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAg
IH0ubWF4CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFyZ3MudGltZXMgeworICAgICAg
ICAgICAgICAgIHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e2FyZ0luZGV4fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGFsbCBvZiB0aGUgZm9y
bXMgb2YgYWxsIG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBvciBkb24ndCwgYWRtaXQgYW4g
YWRkcmVzcworICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRleC4gV2UgZXhwZWN0IHRoaXMg
dG8gYmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAg
ICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRz
LmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAg
ICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGZv
cm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0g
IkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyAr
PSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRlbGli
ZXJhdGVseSB0ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdlIGVuZCB1cCB3aXRoIG5vIGZv
cm1zLCB3ZSB3YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkgdGhhdCBBZGRyZXNzIGlzIGlu
YWRtaXNzaWJsZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAg
IGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9S
RVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
IyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAgICAgICAgICBuZWVkT3Zlcmxv
YWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpCisKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAgICAgICAgICAgICAgICAgICAg
ICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0IHdlIHdhbnQuCisgICAgICAg
ICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBudW1O
byA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAg
ICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0byBkZWZhdWx0LgorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYg
bmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tv
dmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3ZSB0ZXN0IHRoZSBoeXBvdGhl
c2lzIHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3JtLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmdzWyN7Y29sdW1uSW5k
ZXh9XS5raW5kKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0
ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtcyB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVtaXQgbm8gY29kZSwgc2luY2Ug
d2UgY2Fubm90IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBv
dmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
In0iCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisg
ICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQor
ICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91
dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRz
ICJ9IgorCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgSW5zdDo6Z2VuZXJhdGUo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KSBjb25zdCIKKyAg
ICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oaml0KTsiCisgICAg
b3V0cC5wdXRzICJVTlVTRURfUEFSQU0oY29udGV4dCk7IgorICAgIG91dHAucHV0cyAiQ0NhbGxI
ZWxwZXJzOjpKdW1wIHJlc3VsdDsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpm
YXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAg
ICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KGFyZ3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250ZXh0KSk7IgorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgICAgICBt
ZXRob2ROYW1lID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbWV0aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICBpZiBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICAgICAgb3V0cC5wcmlu
dCAicmVzdWx0ID0gIgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnByaW50ICJq
aXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMuZWFjaF93aXRoX2lu
ZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBp
ZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgIiwgIgorICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1lCisgICAgICAgICAg
ICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1
cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZnByKCkiCisgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIkltbSIKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIK
KyAgICAgICAgICAgICAgICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tNjQoKSIKKyAgICAgICAgICAgICAgICB3
aGVuICJBZGRyIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJSZWxDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAg
ICB3aGVuICJSZXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7
aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRw
LnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAicmV0
dXJuIHJlc3VsdDsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
LmgJKHJldmlzaW9uIDE5MTUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXggIT0gaW52YWxpZCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAKICAgICBib29sIGlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBkZWxldGVkKCk7IH0KQEAgLTE3
MCw2ICsxNjksNDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogCisgICAgY2xhc3MgQWxsUmVnc0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpIHsgfQorCisgICAgICAgICAgICBleHBsaWNpdCBpdGVyYXRvcihSZWcgcmVnKQorICAg
ICAgICAgICAgICAgIDogbV9yZWdJbmRleChyZWcuaW5kZXgoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVnIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu
IFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpOyB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3JlZ0luZGV4ID0g
UmVnOjpmcm9tSW5kZXgobV9yZWdJbmRleCkubmV4dCgpLmluZGV4KCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtX3JlZ0luZGV4ID09IG90aGVyLm1fcmVnSW5kZXg7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICB1bnNpZ25lZCBtX3JlZ0luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJzdCgpKTsgfQorICAgICAgICBp
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWcoKSk7IH0KKyAgICB9Owor
CisgICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSB7IHJldHVybiBBbGxSZWdzSXRlcmFi
bGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90IGludmFsaWQoKSB7IHJldHVy
biAweGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9m
ZnNldExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJBdE9mZnNldExpc3QuY3BwCShyZXZpc2lvbiAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6UmVnaXN0ZXJBdE9mZnNldExpCiAg
ICAgaWYgKG9mZnNldEJhc2VUeXBlID09IEZyYW1lUG9pbnRlckJhc2VkKQogICAgICAgICBvZmZz
ZXQgPSAtKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obnVtYmVyT2ZSZWdpc3RlcnMpICogc2l6ZW9m
KHZvaWQqKSk7CiAKLSAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6
Omxhc3QoKTtyZWcgPSByZWcubmV4dCgpKSB7CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJz
dCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAgaWYg
KHJlZ2lzdGVyU2V0LmdldChyZWcpKSB7CiAgICAgICAgICAgICBhcHBlbmQoUmVnaXN0ZXJBdE9m
ZnNldChyZWcsIG9mZnNldCkpOwogICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih2b2lkKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0
TGlzdC5oCShyZXZpc2lvbiAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyQXRPZmZzZXRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDkgQEAgcHVi
bGljOgogICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGZpbmQoUmVnKSBjb25zdDsKICAgICB1bnNpZ25l
ZCBpbmRleE9mKFJlZykgY29uc3Q7IC8vIFJldHVybnMgVUlOVF9NQVggaWYgbm90IGZvdW5kLgog
CisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzLmJlZ2luKCk7IH0KKyAgICBWZWN0b3I8UmVnaXN0ZXJB
dE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJz
LmVuZCgpOyB9CisKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+IG1fcmVn
aXN0ZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJ
KHJldmlzaW9uIDE5MTUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxMyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3QgeyByZXR1
cm4gbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3QgeyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRCaXRzKCkpCisgICAgICAg
ICAgICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7CisgICAgfQogICAgIAogcHJpdmF0
ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9CkluZGV4OiBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTUwNykKKysrIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5QjFC
N0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJMEZFQjNEQ0YxQkI1RDY4NDAw
OUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi87
IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0RE
MDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICovOyB9OworCQkw
RkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQg
LyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJEODI1MzEwMDgwRkY3NCAvKiBH
cmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0Lmgg
Ki87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4
MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkwRkY4NjA5NTFCQ0NCRDc0MDA0NTEy
N0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFy
aXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0
OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3Jk
TG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0RDRTFCQjVENjg0MDA5
RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
aGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzREQwMUJCNzM2
NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRMYW1iZGEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBo
Tm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoTm9k
ZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0
RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGODYwOTQx
QkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5NDE2RUFBRkY4MDAyNEUxNDYg
LyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNj
aGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2No
ZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29w
ZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0MTIzRkYgLyogU2VnbWVudGVk
VmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlu
a2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQxMjNGRiAvKiBTSEExLmNwcCAq
LywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QjYxQjIyRDREODAw
NjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShy
ZXZpc2lvbiAxOTE1MDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NzYsMTIgKzc3NiwyMCBAQAogI2RlZmluZSBFTkFCTEVfQ09OQ1VSUkVOVF9KSVQg
MQogI2VuZGlmCiAKKy8qIFRoZSBCMyBjb21waWxlciBpcyBhbiBleHBlcmltZW50YWwgYmFja2Vu
ZCB0aGF0IGlzIHN0aWxsIGluIGRldmVsb3BtZW50LiBXZSB3aWxsIGtlZXAgaXQgYnVpbGRpbmcK
KyAgIG9uIERhcndpbi94ODYtNjQgZm9yIG5vdywgdGhvdWdoIGl0IGlzIHVudXNlZCBleGNlcHQg
Zm9yIHRlc3RzLiAqLworI2lmIE9TKERBUldJTikgJiYgQ1BVKFg4Nl82NCkKKyNkZWZpbmUgRU5B
QkxFX0IzX0pJVCAxCisjZW5kaWYKKwogLyogSWYgdGhlIGJhc2VsaW5lIGppdCBpcyBub3QgYXZh
aWxhYmxlLCB0aGVuIGRpc2FibGUgdXBwZXIgdGllcnMgYXMgd2VsbDogKi8KICNpZiAhRU5BQkxF
KEpJVCkKLSN1bmRlZiBFTkFCTEVfREZHX0pJVCAgICAgIC8qIFVuZGVmIHNvIHRoYXQgd2UgY2Fu
IHJlZGVmaW5lIGl0LiAqLwotI3VuZGVmIEVOQUJMRV9GVExfSklUICAgICAgLyogVW5kZWYgc28g
dGhhdCB3ZSBjYW4gcmVkZWZpbmUgaXQuICovCisjdW5kZWYgRU5BQkxFX0RGR19KSVQKKyN1bmRl
ZiBFTkFCTEVfRlRMX0pJVAorI3VuZGVmIEVOQUJMRV9CM19KSVQKICNkZWZpbmUgRU5BQkxFX0RG
R19KSVQgMAogI2RlZmluZSBFTkFCTEVfRlRMX0pJVCAwCisjZGVmaW5lIEVuYWJsZV9CM19KSVQg
MAogI2VuZGlmCiAKIC8qIENvdW50cyB1c2VzIG9mIHdyaXRlIGJhcnJpZXJzIHVzaW5nIHNhbXBs
aW5nIGNvdW50ZXJzLiBCZSBzdXJlIHRvIGFsc28KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3Bl
ZExhbWJkYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFNjb3BlZExhbWJkYV9oCisjZGVmaW5lIFNjb3BlZExhbWJkYV9o
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBZb3UgY2FuIHVzZSBTY29wZWRMYW1iZGEgdG8gZWZm
aWNpZW50bHkgcGFzcyBsYW1iZGFzIHdpdGhvdXQgYWxsb2NhdGluZyBtZW1vcnkgb3IgcmVxdWly
aW5nCisvLyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBvZiB0aGUgY2FsbGVlLiBUaGUgY2FsbGVl
IHNob3VsZCBiZSBkZWNsYXJlZCBhczoKKy8vCisvLyB2b2lkIGZvbyhjb25zdCBTY29wZWRMYW1i
ZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+Jik7CisvLworLy8gVGhlIGNhbGxlciBqdXN0IGRv
ZXM6CisvLworLy8gdm9pZCBmb28oc2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYp
PihbJl0gKGludCB4LCBTdHVmZiYgeSkgLT4gTXlUaGluZ3MqIHsgYmxhaCB9KSk7CisvLworLy8g
Tm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIGZvbygpIG5vdCBlc2NhcGluZyB0aGUgbGFtYmRhLiBU
aGUgbGFtYmRhIGlzIG9ubHkgdmFsaWQgd2hpbGUgZm9vKCkgaXMKKy8vIG9uIHRoZSBzdGFjayAt
IGhlbmNlIHRoZSBuYW1lIFNjb3BlZExhbWJkYS4KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b25UeXBlPiBjbGFzcyBTY29wZWRMYW1iZGE7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBl
LCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2NvcGVkTGFtYmRhPFJlc3VsdFR5
cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAgU2NvcGVkTGFtYmRhKFJlc3Vs
dFR5cGUgKCppbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLikgPSBudWxscHRyLCB2
b2lkKiBhcmcgPSBudWxscHRyKQorICAgICAgICA6IG1faW1wbChpbXBsKQorICAgICAgICAsIG1f
YXJnKGFyZykKKyAgICB7CisgICAgfQorICAgIAorICAgIFJlc3VsdFR5cGUgb3BlcmF0b3IoKShB
cmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1w
bChtX2FyZywgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRUeXBlICgqbV9pbXBsKSh2b2lkKiBhcmcsIEFyZ3Vt
ZW50VHlwZXMmJi4uLik7CisgICAgdm9pZCAqbV9hcmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IFNjb3BlZExhbWJkYUZ1bmN0b3I7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzLCB0
eXBlbmFtZSBGdW5jdG9yPgorY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjxSZXN1bHRUeXBlIChB
cmd1bWVudFR5cGVzLi4uKSwgRnVuY3Rvcj4gOiBwdWJsaWMgU2NvcGVkTGFtYmRhPFJlc3VsdFR5
cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAgU2NvcGVkTGFtYmRhRnVuY3Rv
cihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgICAgICA6IFNjb3BlZExhbWJkYShpbXBsRnVu
Y3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9yKGZ1bmN0b3IpCisgICAgeworICAgIH0K
KworICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDog
U2NvcGVkTGFtYmRhKGltcGxGdW5jdGlvbiwgdGhpcykKKyAgICAgICAgLCBtX2Z1bmN0b3IoV1RG
Ojptb3ZlKGZ1bmN0b3IpKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFJl
c3VsdFR5cGUgaW1wbEZ1bmN0aW9uKHZvaWQqIGFyZ3VtZW50LCBBcmd1bWVudFR5cGVzJiYuLi4g
YXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjb3BlZExhbWJk
YUZ1bmN0b3IqPihhcmd1bWVudCktPm1fZnVuY3RvcigKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2Fy
ZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICBGdW5jdG9yIG1f
ZnVuY3RvcjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUg
RnVuY3Rvcj4KK1Njb3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPiBzY29w
ZWRMYW1iZGEoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gU2NvcGVkTGFt
YmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KGZ1bmN0b3IpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIFNjb3BlZExhbWJkYV9oCisKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1NoYXJlZFRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRU
YXNrLmgJKHJldmlzaW9uIDE5MTUwNykKKysrIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAko
d29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAK
KyAgICBTaGFyZWRUYXNrRnVuY3RvcihGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBtX2Z1
bmN0b3IoV1RGOjptb3ZlKGZ1bmN0b3IpKQorICAgIHsKKyAgICB9CisKIHByaXZhdGU6CiAgICAg
UmVzdWx0VHlwZSBydW4oQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykgb3ZlcnJpZGUKICAg
ICB7CkBAIC0xMTAsNiArMTE1LDExIEBAIFJlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+IGNy
ZWF0ZVNoYXIKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxG
dW5jdGlvblR5cGUsIEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1JlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlw
ZT4+IGNyZWF0ZVNoYXJlZFRhc2soRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihXVEY6
Om1vdmUoZnVuY3RvcikpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263947</attachid>
            <date>2015-10-23 15:05:19 -0700</date>
            <delta_ts>2015-10-23 17:08:08 -0700</delta_ts>
            <desc>closer to compiling</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>551827</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQko
d29ya2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDE4IEBAIGFsbCA6IFwKICAgICBCeXRlY29kZXMu
aCBcCiAgICAgSW5pdEJ5dGVjb2Rlcy5hc20gXAogICAgIEpTQ0J1aWx0aW5zLmggXAorICAgIEIz
TG93ZXJpbmdNYXRjaGVyLmggXAorICAgIEIzQWRkcmVzc01hdGNoZXIuaCBcCisgICAgQjNDb21w
YXJpc29uTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBcCisgICAgQWlyT3Bjb2RlLmNwcCBc
CisgICAgQWlyT3Bjb2RlVXRpbHMuaCBcCisgICAgQWlyT3Bjb2RlVXRpbHMuY3BwIFwKICMKIAog
UFlUSE9OID0gcHl0aG9uCiBQRVJMID0gcGVybAorUlVCWSA9IHJ1YnkKIAogSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIgPSAkKEphdmFTY3JpcHRDb3JlKS9TY3JpcHRzCiAKQEAgLTI1MiwzICsy
NjAsMTkgQEAgYWxsIDogSlNSZXBsYXlJbnB1dHMuaAogCiBKU1JlcGxheUlucHV0cy5oIDogJChJ
TlBVVF9HRU5FUkFUT1JfU1BFQ0lGSUNBVElPTlMpICQoSU5QVVRfR0VORVJBVE9SX1NDUklQVFMp
CiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JSZXBsYXlJbnB1dHMucHkgLS1vdXRwdXREaXIgLiAtLWZyYW1ld29yayBKYXZhU2NyaXB0Q29y
ZSAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykKKworQjNMb3dlcmluZ01hdGNoZXIu
aDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2
YVNjcmlwdENvcmUpL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXiAK
K0IzQWRkcmVzc01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVy
bl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVy
bnMKKwkkKFJVQlkpICReCitCM0NvbXBhcmlzb25NYXRjaGVyLmg6ICQoSmF2YVNjcmlwdENvcmUp
L2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9CM0Nv
bXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXgorCitBaXJPcGNvZGUuaDogJChK
YXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0Q29y
ZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bjb2RlLmNwcDog
JChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0
Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bjb2RlVXRp
bHMuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZh
U2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bj
b2RlVXRpbHMuY3BwOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5y
YiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICRe
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxNTA3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY4NSw2ICs2ODUsMTE3IEBACiAJCTBGRUEwQTMzMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMw
MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdG
NkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9B
c3NlbWJsZXIuY3BwICovOyB9OworCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1
bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3Bw
ICovOyB9OworCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4
NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJ
MEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja1V0aWxzLmggKi87IH07CisJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Js
b2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsK
KwkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVj
aWFsLmggKi87IH07CisJCTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmgg
Ki87IH07CisJCTBGRUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW11dGF0aXZpdHkuaCAqLzsgfTsKKwkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87
IH07CisJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0
VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVD
ODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmggKi87IH07CisJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUxNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVu
Y3lDbGFzcy5jcHAgKi87IH07CisJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1
ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9Owor
CQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5j
cHAgKi87IH07CisJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9Owor
CQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzSW5kZXhTZXQuaCAqLzsgfTsKKwkJMEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
TG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsK
KwkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzTG93ZXJUb0Fpci5oICovOyB9OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQg
LyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAg
Ki87IH07CisJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFD
REFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFD
MDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4
MEZGNzQgLyogQjNPcGNvZGUuaCAqLzsgfTsKKwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBG
RUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
T3JpZ2luLmggKi87IH07CisJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9p
bnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4
NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9p
bnRWYWx1ZS5oICovOyB9OworCQkwRkVDODUyOTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNj
b3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVD
ODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyog
QjNQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1By
b2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkw
RkVDODUyQzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5oICovOyB9OworCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmgg
Ki87IH07CisJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87
IH07CisJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUz
MTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrbWFwU3BlY2lhbC5oICovOyB9OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQg
LyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQu
Y3BwICovOyB9OworCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
OTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmggKi87IH07CisJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxl
Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsK
KwkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICov
OyB9OworCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hW
YWx1ZS5oICovOyB9OworCQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBG
RUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5o
ICovOyB9OworCQkwRkVDODUzRjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMu
aCAqLzsgfTsKKwkJMEZFQzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAq
LzsgfTsKKwkJMEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWUuY3BwICovOyB9OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQg
LyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1
NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZUlubGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkw
RkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFs
bG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICov
OyB9OworCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAq
LzsgfTsKKwkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFyZy5oICovOyB9OworCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWly
QmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07
CisJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovOyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNp
YWwuY3BwICovOyB9OworCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVj
aWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4
NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVu
dGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVy
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4
NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckdlbmVyYXRlLmggKi87IH07CisJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0Lmgg
Ki87IH07CisJCTBGRUM4NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9Owor
CQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFC
REFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyog
QWlySW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87
IH07CisJCTBGRUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgx
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3RJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJM
aXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4
NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07
CisJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1
ODYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAq
LzsgfTsKKwkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZl
cnl0aGluZy5jcHAgKi87IH07CisJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGls
bEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsg
fTsKKwkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
ICovOyB9OworCQkwRkVDODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJUbXAuY3BwICovOyB9OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wSW5saW5lcy5oICovOyB9OworCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyog
QWlyVmFsaWRhdGUuaCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lz
dGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMgLyogU2V0dXBWYXJh
cmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNTYzLDYgKzI2NzQs
MTE3IEBACiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0g
ZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEz
MDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9B
c3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9B
c3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNDFCREFD
REFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1
bWVudFJlZ1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI2MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNC
YXNpY0Jsb2NrLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrSW5saW5l
cy5oOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrVXRpbHMuaDsg
cGF0aCA9IGIzL0IzQmFzaWNCbG9ja1V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCbG9ja1dvcmtsaXN0Lmg7IHBhdGggPSBiMy9C
M0Jsb2NrV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hlY2tTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzQ2hlY2tT
cGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQ2hlY2tTcGVjaWFsLmg7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hl
Y2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5oOyBwYXRoID0g
YjMvQjNDaGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM0NvbW1vbi5jcHA7IHBhdGggPSBiMy9CM0NvbW1vbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbW1vbi5oOyBwYXRo
ID0gYjMvQjNDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbW11dGF0aXZpdHkuY3BwOyBwYXRoID0gYjMvQjNDb21t
dXRhdGl2aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NvbW11dGF0aXZpdHkuaDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDMyVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNDb25zdDMyVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDMyVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDMyVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdDMy
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5jcHA7
IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5oOyBwYXRoID0gYjMvQjND
b25zdDY0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBwYXRoID0gYjMvQjND
b25zdERvdWJsZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29u
c3REb3VibGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDOTFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNDb250cm9sVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb250cm9s
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNDb250cm9sVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Zy
ZXF1ZW5jeUNsYXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
RnJlcXVlbmN5Q2xhc3MuY3BwOyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Zy
ZXF1ZW5jeUNsYXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVl
bmN5Q2xhc3MuaDsgcGF0aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJs
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbnRlZEJsb2Nr
Lmg7IHBhdGggPSBiMy9CM0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0dlbmVyYXRlLmNwcDsgcGF0aCA9IGIz
L0IzR2VuZXJhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRjFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0dlbmVyYXRlLmg7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzSW5kZXhNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbmRl
eE1hcC5oOyBwYXRoID0gYjMvQjNJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0luZGV4U2V0Lmg7IHBhdGggPSBiMy9CM0luZGV4U2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNMb3dlclRvQWlyLmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlclRvQWlyLmg7
IHBhdGggPSBiMy9CM0xvd2VyVG9BaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5jcHA7IHBhdGggPSBiMy9C
M01lbW9yeVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5oOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyog
QjNPcGNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcGNv
ZGUuY3BwOyBwYXRoID0gYjMvQjNPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcGNvZGUuaDsgcGF0aCA9IGIzL0IzT3Bjb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M09yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdp
bi5jcHA7IHBhdGggPSBiMy9CM09yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbi5oOyBwYXRoID0gYjMvQjNPcmlnaW4uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNQYXRjaHBvaW50U3BlY2lhbC5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERDFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNQYXRjaHBvaW50VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERTFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNQYXRjaHBvaW50VmFsdWUuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1BoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNQaGFzZVNjb3BlLmNwcDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQaGFzZVNjb3BlLmg7IHBh
dGggPSBiMy9CM1BoYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUHJvY2VkdXJlLmNwcDsgcGF0aCA9IGIzL0IzUHJvY2Vk
dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzUHJvY2VkdXJlLmg7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlSW5saW5l
cy5oOyBwYXRoID0gYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXAuY3BwOyBwYXRoID0g
YjMvQjNTdGFja21hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU1
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3RhY2ttYXAuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXBTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3Rh
Y2ttYXBTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2ttYXBTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tt
YXBTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RL
aW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90
S2luZC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5oOyBw
YXRoID0gYjMvQjNTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuY3BwOyBwYXRo
ID0gYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsgcGF0aCA9IGIzL0Iz
U3RhY2tTbG90VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0Iz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoQ2FzZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRj
aENhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRTFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzU3dpdGNoQ2FzZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuaDsgcGF0aCA9IGIz
L0IzU3dpdGNoVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1R5cGUuY3BwOyBwYXRoID0gYjMvQjNUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1R5cGUuaDsgcGF0aCA9IGIzL0IzVHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMzFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNVcHNpbG9uVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyog
QjNVcHNpbG9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVcHNp
bG9uVmFsdWUuaDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1VzZUNvdW50cy5jcHA7IHBh
dGggPSBiMy9CM1VzZUNvdW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1VzZUNvdW50cy5oOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNW
YWxpZGF0ZS5jcHA7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWxpZGF0ZS5oOyBwYXRoID0gYjMvQjNW
YWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGOTFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlLmg7IHBhdGggPSBiMy9CM1ZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M1ZhbHVlSW5saW5lcy5oOyBwYXRoID0gYjMvQjNWYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZVJlcC5jcHA7
IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZVJlcC5oOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyog
QWlyQWxsb2NhdGVTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJBbGxvY2F0ZVN0YWNrLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyQWxsb2NhdGVTdGFjay5oOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckFyZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBcmcuY3Bw
OyBwYXRoID0gYjMvYWlyL0FpckFyZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQXJnLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJhc2lj
QmxvY2suY3BwOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmg7IHBh
dGggPSBiMy9haXIvQWlyQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNvZGUuaDsgcGF0
aCA9IGIzL2Fpci9BaXJDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9haXIv
QWlyRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2Vu
ZXJhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NDFCREFDREM3
MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyR2VuZXJhdGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGlvbkNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJh
dGlvbkNvbnRleHQuaDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTcxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlySGFu
ZGxlQ2FsbGVlU2F2ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTgx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckluc2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlySW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0
aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVBMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpckluc3QuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0Lmg7IHBhdGggPSBiMy9haXIv
QWlySW5zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1QzFCREFDREM3
MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlySW5zdElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyog
QWlyTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5l
c3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvYWlyL0Fp
clBoYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjAxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHBhdGggPSBiMy9h
aXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclJlZ2lzdGVyUHJpb3JpdHkuaDsgcGF0aCA9
IGIzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWly
L0FpclNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MzFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bp
bGxFdmVyeXRoaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
clNwaWxsRXZlcnl0aGluZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJTdGFja1Nsb3QuY3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
dGFja1Nsb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tTbG90
Lmg7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyVG1wLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJU
bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRt
cC5oOyBwYXRoID0gYjMvYWlyL0FpclRtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXBJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWly
VG1wSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QjFCREFD
REM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpclZhbGlkYXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclZh
bGlkYXRlLmg7IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I4MUIyNjI1NkQwMDY2
Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUU5
ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZhcmFyZ3NGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzg1OCw2ICs0MDgwLDcgQEAKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBG
RjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRD
QUQ0MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBh
c3NlbWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovLAogCQkJ
CUE1NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBiaW5kaW5ncyAqLywKIAkJCQlBN0Q4MDE5RjE4
ODBENjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFG
NjgxIC8qIGJ5dGVjb2RlICovLApAQCAtNDA3MSw2ICs0Mjk0LDEzMiBAQAogCQkJbmFtZSA9IGZ0
bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRUM4NEIyMUJEQUNENUUw
MDgwRkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKKwkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0
QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJMEZFQzg0Qjcx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NEI4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8sCisJCQkJMEZFQzg0QkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGRUM4NEJCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0QkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0QkQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QkUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29t
bW9uLmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5jcHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5oICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgKi8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLywK
KwkJCQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCAqLywK
KwkJCQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8s
CisJCQkJMEZFQzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLywK
KwkJCQkwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLywK
KwkJCQkwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLywKKwkJCQkwRkVDODRE
MDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJ
MEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLywKKwkJCQkwRkVDODRE
MjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovLAorCQkJCTBGRUM4NEQzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovLAorCQkJCTBGRUM4NEQ0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLywKKwkJCQkwRkVDODRENTFCREFDREFDMDA4MEZG
NzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywKKwkJCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyog
QjNPcGNvZGUuY3BwICovLAorCQkJCTBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29k
ZS5oICovLAorCQkJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8s
CisJCQkJMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi8sCisJCQkJMEZF
Qzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwICovLAorCQkJ
CTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi8sCisJ
CQkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLywK
KwkJCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLywK
KwkJCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLywKKwkJ
CQkwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8sCisJCQkJMEZF
Qzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLywKKwkJCQkwRkVDODRF
MjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCAqLywKKwkJCQkwRkVDODRFMzFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0RTQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwICovLAorCQkJCTBGRUM4NEU1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi8sCisJCQkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODRFNzFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODRFODFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLywKKwkJCQkwRkVDODRFOTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8sCisJCQkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovLAorCQkJCTBGRUM4NEVEMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovLAorCQkJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaENhc2UuaCAqLywKKwkJCQkwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3dpdGNoVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGMTFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBl
LmNwcCAqLywKKwkJCQkwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8sCisJ
CQkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCAqLywKKwkJ
CQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLywKKwkJCQkw
RkVDODRGNTFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICovLAorCQkJCTBGRUM4
NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovLAorCQkJCTBGRUM4NEY3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRkVDODRGODFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovLAorCQkJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZS5oICovLAorCQkJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5l
cy5oICovLAorCQkJCTBGRUM4NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAq
LywKKwkJCQkwRkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovLAorCQkJ
KTsKKwkJCW5hbWUgPSBiMzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTBG
RUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxv
Y2F0ZVN0YWNrLmNwcCAqLywKKwkJCQkwRkVDODU0OTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5oICovLAorCQkJCTBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
Y3BwICovLAorCQkJCTBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLywKKwkJ
CQkwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJ
MEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLywKKwkJCQkwRkVD
ODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVD
ODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg1
NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovLAorCQkJCTBGRUM4NTUxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8sCisJCQkJMEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8sCisJCQkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckdlbmVyYXRlLmggKi8sCisJCQkJMEZFQzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdl
bmVyYXRpb25Db250ZXh0LmggKi8sCisJCQkJMEZFQzg1NTYxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLywKKwkJCQkwRkVDODU1NzFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLywKKwkJCQkwRkVDODU1ODFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkVDODU1OTFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc3QuY3BwICovLAorCQkJCTBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmggKi8sCisJCQkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVz
LmggKi8sCisJCQkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi8s
CisJCQkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovLAor
CQkJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8sCisJCQkJ
MEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovLAor
CQkJCTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8s
CisJCQkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovLAorCQkJ
CTBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg1
NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8sCisJCQkJMEZF
Qzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovLAorCQkJCTBG
RUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICovLAorCQkJCTBGRUM4
NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLywKKwkJCQkwRkVDODU2ODFC
REFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLywKKwkJCQkwRkVDODU2OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wLmggKi8sCisJCQkJMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clRtcElubGluZXMuaCAqLywKKwkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuY3BwICovLAorCQkJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0
ZS5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBhaXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQkwRkY0MjcyRTE1OEVCQ0NFMDA0Q0I5RkYgLyogZGlzYXNzZW1ibGVyICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTYwNDIsNiArNjM5MSw3
IEBACiAJCQkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjAxNjFFMzBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NUYwRjUxNEQxMDYzQzAwQUM3NjQ5IC8q
IEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEw
MDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDM0U1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBUElDYXN0LmggaW4g
SGVhZGVycyAqLywKQEAgLTYwNzEsOCArNjQyMSwxMCBAQAogCQkJCUE1RUE3MEU4MTlGNUIxMDEw
MDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRj
aGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjRCMjcyMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NThFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODAxQTUxODgwRDY2RTAwMjZDMzlCIC8qIEJ1aWx0
aW5FeGVjdXRhYmxlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDg3LDYgKzY0MzksNyBAQAogCQkJ
CTk5REEwMEE0MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19tb2RlbC5weSBpbiBIZWFkZXJz
ICovLAogCQkJCTk5REEwMEE1MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc190ZW1wbGF0ZXMu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQk0MURFQTEzMjFCOUYzMTYzMDA2RDY1REQgLyogQnVpbHRp
blV0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyog
QjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlFNzI5NDBCMTkwRjA1MTQwMDFB
OTFCNSAvKiBCdW5kbGVQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2
MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5ODE1RUQ4
RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDk3
LDYgKzY0NTAsNyBAQAogCQkJCTBGMkREODBCMUFCM0Q4NTgwMEJCQjhFOCAvKiBCeXRlY29kZUtp
bGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVDMDE4MzU2
NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNv
ZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAv
KiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNjEzMywxMyArNjQ4NywxNiBAQAogCQkJ
CTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNl
cHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJDMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUEzQTgxNzk3
NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREIyQ0VBMTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZp
Zy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
ZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBD
b25zZXJ2YXRpdmVSb290cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwOEExOEJDMjFDMzAw
QkVERjc2IC8qIENvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQw
MDdBMTg5QjA1MTAwMDYzMzIzMSAvKiBDb25zb2xlTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTUzQ0UwODYxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RkQwMDc0MTg5QjAzOEMwMDYzMzIzMSAvKiBDb25zb2xlVHlwZXMuaCBp
biBIZWFkZXJzICovLApAQCAtNjE1Myw2ICs2NTEwLDcgQEAKIAkJCQlDMkZDOUJEMzE2NjQ0REZC
MDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkVB
QTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2Vu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZp
c2l0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjE2NCw2ICs2NTIyLDcgQEAKIAkJCQk5OTU5RTky
QjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEy
NDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8q
IERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTYxODMsNiArNjU0Miw3IEBACiAJ
CQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3MDREOTA0MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzcxNDNGQ0Qz
RjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNF
NDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAv
KiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAq
LywKQEAgLTYxOTMsNyArNjU1Myw5IEBACiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8q
IERGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3
NTA1NjAwODNCNjg3IC8qIERGR0FyaXRoTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMz
QjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTE3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERG
R0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk1MTdBMEJDNzQwMEVFMjYx
OCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVD
NzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYyMDMsNiArNjU2NSw3IEBACiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZFMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERG
R0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAw
NkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjI0Miw4ICs2
NjA1LDEwIEBACiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDlBMjk2MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdFZGdlRG9taW5h
dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzk4NkQ1NzE3QTBCQjFFMDBBOTVERDAgLyogREZH
RWRnZVVzZXNTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcyMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNDFB
REYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkMwQUU4
MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmls
dHJhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURG
NzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjczLDYgKzY2MzgsNyBA
QAogCQkJCTYyRjJBQTM4MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzlDNEIxNUUxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRj
aFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg2
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9u
Z0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0
MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02
MjgxLDYgKzY2NDcsNyBAQAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5p
ZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIg
LyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAw
Q0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjhGMTQzNjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEg
LyogREZHTmFpdmVEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKQEAgLTYyOTksNiArNjY2Niw3
IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4
aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc3
MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NS
RXhpdEZ1enouaCBpbiBIZWFkZXJzICovLApAQCAtNjMxNiw2ICs2Njg0LDggQEAKIAkJCQkwRkZD
OTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkIxNzY2MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjNBMUJGQTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5r
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBbGxvY2F0ZVN0YWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQzFCREFDREFD
MDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4
REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RkNDRkMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjM0MCw2ICs2NzEwLDcgQEAKIAkJCQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyog
REZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5z
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBE
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NzE2
QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MzUxLDYgKzY3MjIsNyBAQAogCQkJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCREM0OTE1MjI4MDk2MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUz
MiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQzk3RjQyMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTYzODAsNiArNjc1Miw3IEBACiAJCQkJMEY1NkExRDMx
NTAwMEYzNTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVzc2lvblJh
bmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8q
IEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFC
MTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDM4LDYgKzY4MTEsNyBA
QAogCQkJCTBGRUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFs
dWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4
Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAz
MzJDNjE4QjUzRkE5MDA1Rjk3OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjAzMzJDODE4QjU0NkVDMDA1Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjQ0NSw4ICs2ODE5LDEwIEBACiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkND
IC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDA0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNo
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBG
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEJGRjJDMUFE
NDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDA1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvblByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNjQ4Myw2ICs2ODU5LDcgQEAKIAkJ
CQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTA1MDE5MUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1l
bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQTFBQTkwOTExMDBEMzNCMzMgLyogR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUIxQUE5
MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTY1MDgsNiArNjg4NSw3IEBACiAJCQkJQzJF
NTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0
aXZpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBJ
ZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0NEFCMDBBMzgzRDAg
LyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDc2MTg5QjAz
OEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLApAQCAtNjU2
MSw2ICs2OTM5LDcgQEAKIAkJCQlBMUI5RTIzQzFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxh
dG9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUExODE5M0UzMUI0RTBDREIwMEZD
MTAyOSAvKiBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExQjlFMjNFMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNs
YXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgxOTNFNDFCNEUwQ0RCMDBGQzEwMjkgLyogSW50
bENvbGxhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENkUxQjRE
QzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE1ODdENzAxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTY1OTEsNiArNjk3MCw3IEBACiAJCQkJMEYyNEU1NEQxN0VF
Mjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2
RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU5MTFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RG
R0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2RjU0
QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NjA0LDYgKzY5ODQsNyBAQAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QkRBRUNCMTdGNEVB
MTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCMTQx
ODZEMUI2MjUyN0YwMEZCMjA2OCAvKiBKU0Fycm93RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDE4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Jhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MEQxN0Q3MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3Vu
ZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTY2MjAsNiArNzAwMSw4IEBACiAJCQkJODY1
QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUzQ0UwODgxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBK
U0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAv
KiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4QzAyNDIxOEU0QTQx
QTAwMDMyQkM1IC8qIEpTQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjYzNSw2
ICs3MDE4LDcgQEAKIAkJCQlGRTM4NEVFNjFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTgxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFy
Vk1Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJEMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyMDFC
REFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
M0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCkBAIC02NjQ0LDExICs3MDI4LDEzIEBACiAJCQkJMEYyQjY2RjExN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODU0NTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFCMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMTBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDg2
MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVDM0ExQTYxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29u
c29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Njc5LDYgKzcwNjUsNyBAQAogCQkJCUE3
MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxOENCQzExQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzlEQTRBNzFCN0U4QjdDMDA4
NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovLApAQCAtNjcwOCw2ICs3MDk1
LDcgQEAKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFODU1MzkxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5n
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEVDMEVDMzFBQTBEN0RBMDBC
NkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYwMEI1QTcx
NTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLApA
QCAtNjc2MSw5ICs3MTQ5LDExIEBACiAJCQkJMEY0NjgwQTMxNEJBN0Y4RDAwQkZFMjcyIC8qIExM
SW50RXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0IxNEJCQjE3MjAwQkZF
MjcyIC8qIExMSW50T2ZmbGluZUFzbUNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEMjg3
QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwQTUxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQ0VGQUNFMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDRjE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQ
SUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzgxNzk5RTRCMjAwRDI4MzNE
IC8qIExMVk1EaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUQzMTgwNUVE
Q0MwMDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02Nzc2LDEyICs3
MTY2LDE0IEBACiAJCQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJEMDBDRjg3MTEgLyogTWFj
cm9Bc3NlbWJsZXJBUk02NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDYwRkRERUE5ODAw
MDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2M0Iy
M0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQyQkNCMyAvKiBNYWNyb0Fz
c2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2NEE5MTM1RTVFMUMwMDk2
MzAxMiAvKiBNYWNyb0Fzc2VtYmxlclNINC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTQw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3M0ExN0NC
RTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg1
MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODA2
LDYgKzcxOTgsNyBAQAogCQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMzBFMTgzOURCMDAwRjky
OTcgLyogTmF0aXZlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0U4RDIx
MUI5MDEzREUwMDM0NkI1MiAvKiBOYXRpdmVTdGRGdW5jdGlvbkNlbGwuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1
Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBO
b2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjgxOEExQjI1OTAwMjZEODhGIC8qIE5v
bmRldGVybWluaXN0aWNJbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODI2LDYgKzcyMTksNyBA
QAogCQkJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5k
bGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4
OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NDdFQTE3QTBCRDQ2MDBG
NTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0ODBF
MTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODM4LDEz
ICs3MjMyLDE3IEBACiAJCQkJMEZGOUNFNzQxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGlj
QWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU4MzQxODFBNkVGOTdCMDBEMDQ4NDcgLyog
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYx
MTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1l
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyMjFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNv
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9m
aWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJv
ZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0
NDYwIC8qIFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUx
MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1
ZW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29t
cGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODY2LDEwICs3MjY0LDEzIEBACiAJ
CQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNj
b3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVy
ZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1
dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2
IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgwMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzQjRBQTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
Q0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBp
biBIZWFkZXJzICovLApAQCAtNjg4OSw2ICs3MjkwLDcgQEAKIAkJCQkwRkMzMTQxMjE4MTQ1NTkx
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1N0QyM0VFMTg5
MUI1NTQwMDMxQzdGQSAvKiBSZWd1bGFyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJ
bnNwZWN0b3JDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUYwMTgyMzQ1QUYw
MEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmggaW4gSGVhZGVycyAqLywKQEAg
LTY4OTYsNiArNzI5OCw3IEBACiAJCQkJQTVCQTE1RUQxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUxMTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBF
OEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjBB
OUQxMUE5QjY2NDYwMDAxMzA2QSAvKiBSdW50aW1lRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhl
YWRlcnMgKi8sCkBAIC02OTI1LDYgKzczMjgsNyBAQAogCQkJCUE3MDlGMkYwMTdBMEFDMDQwMDUx
MkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA0MDA0MEU2QTc0
OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUwRTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3Vy
Y2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTQ0LDYgKzczNDgsNyBA
QAogCQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MkUzMTNCMTM0RkYwQTYwMEFGQURCNSAvKiBTdHJvbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVGREUyNiAvKiBTdHJvbmdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2
ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBT
dHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAv
KiBTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQUEzMTIxOEJENDlEMTAw
Mzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTgwLDEwICs3
Mzg1LDEyIEBACiAJCQkJMEYyRDRERUExOTgzMkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2Nh
dGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCNkMzOTFBRjQ4RERDMDBEQjFCRjcg
LyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkM5NTJCNzE5QTI4OTg1
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERFQzE5
ODMyREM0MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJENERGMDE5ODMyREQ2MDA3RDRCMTkgLyogVHlwZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQyMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfZXh0
ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0NDE1OEVCRTkxMDA0Q0I5RkYgLyogdWRp
czg2X2lucHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTcwMjAsOCArNzQyNywxMCBAQAogCQkJCUZF
RDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MkUzMTNDMTM0RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUwMjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRCRkNFNjkxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tT
bG90S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8q
IFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RjcyNTY2MTRFRTI2NUUw
MEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RkEy
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDQzLDkg
Kzc0NTIsMTIgQEAKIAkJCQk5OTU5RTkyRTFCRDE3RkE0MDAxQUE0MTMgLyogeHhkLnBsIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRCQTMz
NzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEz
MzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEy
REJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY3MDRCNDMxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKQEAgLTc1MjcsNiArNzkzOSw3IEBACiAJCQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8q
IEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkQxMDdFQzM3NjAwNDI3
QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NDNCQUExNkI4ODI0OTAw
OUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12
N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTM0LDggKzc5NDcsMTAgQEAKIAkJCQlB
N0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIxNzQg
LyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNEMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3MDU1
MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMw
MTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzU1Niw4ICs3OTcxLDEwIEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5
NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkVDOUJCNjFCN0VCMDdD
MDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2FsbEZy
YW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENDFCODRGQjNE
MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyogQ2Fs
bE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTc3LDYgKzc5OTQsNyBAQAogCQkJCUE3MDlG
MkYyMTdBMEFDMkEwMDUxMkU5OCAvKiBDb21tb25TbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjU1M0EzMzExN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENv
bXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NThCMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIx
MDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2
RkM3NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNzYwNCw2ICs4MDIyLDcgQEAKIAkJCQkwRkM3MTJERTE3Q0Q4
Nzc5MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFNTA2ODY3MUFFMjVFMjgwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fi
c3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4RDFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENF
QUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDAx
MUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8q
IERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2
MTMsNiArODAzMiw3IEBACiAJCQkJMEY2Mzk0ODQxNUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5
TW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q5QTI5NDE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2NkVDNjE4
MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjIx
LDYgKzgwNDEsNyBAQAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29k
ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQg
LyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU3MTRFRjkw
QTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0
NjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzY5NDFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5V
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyaXplLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY1OCw2ICs4MDc5LDcgQEAK
IAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdH
cmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU2RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2
MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkwNTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzAwLDE0ICs4MTIyLDE3IEBA
CiAJCQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOTJDODkxQjQ2MTg4
NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVEMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
UHJlcGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQw
MkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyogREZHUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc3QTE3OTczOEI4MDA5REY3NDQgLyogREZHUGxh
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyogREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVE
MTRFRjkwQjMwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RL
aW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBE
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0VDMTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkIxNzY2MjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzcyNSw2ICs4MTUwLDggQEAKIAkJCQkwRkMyMENCNTE4NTJFMkM2MDBDOUU5
NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
Rjg5M0JEQjE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjc5MDg1NTE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3RydWN0
dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJGQ0NGRTE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc1Miw2ICs4MTc5
LDcgQEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxs
YmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyog
RW5jb2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQy
N0E0OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwOTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzgxMDdFQzM3
NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVC
NThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3JJbnN0YW5jZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc3OTYsNiArODIyNCw3IEBACiAJCQkJMEY4RjJCOTUxNzJFMDRB
MDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYxODA3
MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEw
QTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUwMDFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBGVExP
U1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4MDMsNiArODIzMiw3IEBACiAJ
CQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjQ4NTMyOTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVS
ZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjExODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjI1RjFCMzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzlBMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC03ODM1LDYgKzgyNjUsNyBAQAogCQkJCUE1RkQwMDc1MTg5QjAz
OEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI1RjhCQ0QxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2
NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5MjExMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc4NDIsNiArODI3Myw3IEBACiAJCQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8q
IEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5NDA4MTkwRjAy
MUUwMDFBOTFCNSAvKiBJbml0aWFsaXplTExWTVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQg
LyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0
NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzg1Myw2ICs4Mjg1LDcgQEAKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNF
MjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkz
Q0Y3QzE4NDAzNjAzMDBCRkNFMjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODcxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzNzFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgx
MTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU3RDIzRTUxODkwQ0VCRjAwMzFDN0ZBIC8qIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODkxODU2ODMzNTAwMkVENjkyIC8qIElu
c3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA5LDYg
KzgzNDIsNyBAQAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8qIEpT
Q2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRjg5MjBBNTA4
QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlu
cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTYsNiArODM1MCw4IEBACiAJCQkJMTQ3RjM5RDYx
MDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lh
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlND
b250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlDIC8q
IEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzIwMjhCNjE3OTc2MDFFMDA5
ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkyNiwx
NiArODM2MiwxOSBAQAogCQkJCUZFMzg0RUU3MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYwMDQyN0E0
OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDU2NkQ2
MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0OCAvKiBK
U0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4NTE4OUIxQjdFMDA2
MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTVDM0ExQTUxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OTIxODI0NzQ0NzAwQ0Mz
ODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTdEMjNFOTE4OTFCMDc3MDAzMUM3RkEgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2Jh
bE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0NDM0M2
MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1
bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5MDAxMTBG
MTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODUyMzFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUMxMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0lu
amVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA4
MDFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03OTU0LDYgKzgzOTMsNyBAQAogCQkJCUUzMThDQkMwMUI4QUVGNTEwMEEyOTI5RCAvKiBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFC
N0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5P
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8q
IEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NG
QyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5NjcsNiArODQwNyw3IEBA
CiAJCQkJRTNFRjg4NzQxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJv
eHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MkMzN0YxQUREQjhGRTAwMTM5NzI2IC8qIEpT
UmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTExMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTky
OEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0ODc0QUU1MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3QzBDNEFEMTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc5OTUsNiArODQzNiw3IEBACiAJCQkJNzA5RkI4NjcxQUUzMzVDNjAw
MzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURF
OThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2
MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDAyLDkgKzg0
NDQsMTIgQEAKIAkJCQkxNDhGMjFCMDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1N0YxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAwRURBRjcx
IC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEQy
MTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZF
Qzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU0MTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBv
aW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBM
TEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAw
QkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAxMyw2ICs4
NDU4LDcgQEAKIAkJCQlBN0U1QUIzNzE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERTEwN0VDN0U3MDA2NTA0NDYgLyogTG9v
a3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBM
b3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTFGMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Qjcy
M0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2Vt
YmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMjIsMTAgKzg0NjgsMTIgQEAKIAkJCQlB
N0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3MzkxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkzMTgyRDk5MTQwMDUyMkMyMiAvKiBN
YXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwNzFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4
NzNEMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNw
YWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAv
KiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MEE0ODQxQTkwNTFBRjAwRDcz
Q0NBIC8qIE1hdGhDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYxMDdFQzdF
NzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDY0LDE3ICs4
NTEyLDIxIEBACiAJCQkJMEZGNzI5QUQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUUxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTI5MTY3NzFDMzMw
MDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyog
UHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjEx
NjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmls
ZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMDFCREFDREFD
MDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQ
cm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAw
RjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYx
MzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29u
ZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNCMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2
IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFODEw
N0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFE
RTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtODA4MywxMCArODUzNSwxMiBAQAogCQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAv
KiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMzM2MzdBNTFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyog
UmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBS
ZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNzEyQjNCMTFDN0IyMTIwMDdB
NTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjQyQzUxMDE1MUMw
NkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTgxMDAsNiArODU1NCw3IEBACiAJCQkJQTVCQTE1RTkxODIzNDBCMzAwQTgy
RTY5IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgy
NDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1QkExNUVDMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1
Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVF
RTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RFMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMTgsNiArODU3Myw3IEBACiAJCQkJQTU0Q0YyRjkx
ODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTRDRjJGNTE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcyOTlEQTUxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclBy
aW9yaXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OTBERDZEMTgyRjQ5OTcwMDU4ODgwNyAv
KiBTZXRJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5OURBMTE3
RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUU5ODQzMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTgxMzIsNiArODU4OCw3IEBACiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0
IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzFFQUYxMTc5ODdB
QjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczMEI2
MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTIxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8qIFN0
cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVDMTA3
RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTQ4
LDYgKzg2MDUsNyBAQAogCQkJCTcwNUI0MUFEMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDVCNDFBRjFBNkU1MDFFMDA3MTY3NTcg
LyogU3ltYm9sT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwNUI0MUIxMUE2RTUwMUUw
MDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3MEVDQTYwNzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lz
dGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODE3Niw2ICs4NjM0LDcgQEAKIAkJCQkwRjI0
RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMx
QUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIw
QzI1OTFBODAxM0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTgxOTUsNiArODY1NCw3IEBACiAJCQkJNzA5RkI4NjkxQUUzMzVDNjAwMzlEMDY5IC8qIFdl
YWtTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2
MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTRF
QzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTdEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFy
cmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAwRDI4
MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjNDNkQ5QzE1
MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJu
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hl
ci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fk
ZHJlc3NNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgQWRkcmVzc01hdGNo
ZXIKKworIyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24gQjMgZG9pbmcgYWdncmVzc2l2ZSByZWFz
c29jaWF0aW9uIGFuZCBjYW5vbmNhbGl6YXRpb24gb2YgaW50ZWdlciBhZGRzLgorIyBXZSdsbCBu
ZXZlciBzZWUgQWRkKEFkZCh4LCBjb25zdDEpLCBjb25zdDIpIGJlY2F1c2UgaXQgd291bGQgaGF2
ZSBhbHJlYWR5IGJlZW4gcmVhc3NvY2lhdGVkIGludG8KKyMgQWRkKHgsIGNvbnN0MSArIGNvbnN0
MikuIEFsc28sIHdlIHdpbGwgbmV2ZXIgc2VlIEFkZChjb25zdCwgeCksIGJlY2F1c2Ugd2Ugd291
bGQgaGF2ZSBjYW5vbmljYWxpemVkCisjIGl0IHRvIEFkZCh4LCBjb25zdCkuIFRoYXQgc2FpZCwg
aW4gdGhpcyBjb2RlIHdlIG5ldmVyIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCB0aGVzZSBvcHRpbWl6
YXRpb25zCisjIGhhdmluZyBiZWVuIHBlcmZvcm1lZC4gQWxzbywgc2luY2UgdGhlIExvYWQvU3Rv
cmUgaW5zdHJ1Y3Rpb25zIGluIEIzIGhhdmUgYSBidWlsdC1pbiBvZmZzZXQsIHdlCisjIGRvbid0
IG5lZWQgdG8gbWF0Y2ggQWRkKHgsIGNvbnN0KS4gVGhhdCB3b3VsZCBoYXZlIGJlZW4gZm9sZGVk
IGludG8gdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zCisjIGFscmVhZHkuIFNvLCB0aGUgb25s
eSBmYW5jeSBtYXRoaW5nIHRoaXMgY2FuIGRvIGlzIGp1c3QgQmFzZUluZGV4IGZvcm1zLgorCitB
ZGRTaGlmdDEgPSBBZGQoU2hsKGluZGV4LCAkbG9nU2NhbGUpLCBiYXNlKQorQWRkU2hpZnQyID0g
QWRkKGJhc2UsIFNobChpbmRleCwgJGxvZ1NjYWxlKSkKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0
KQorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3Vt
ZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXJndW1lbnRSZWdW
YWx1ZTo6fkFyZ3VtZW50UmVnVmFsdWUoKQoreworfQorCit2b2lkIEFyZ3VtZW50UmVnVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fcmVn
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50
UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNBcmd1bWVudFJlZ1Zh
bHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiUmVnLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBBcmd1bWVudFJlZ1ZhbHVlIDogcHVibGljIFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsg
cmV0dXJuIG9wY29kZSA9PSBBcmd1bWVudFJlZzsgfQorICAgIAorICAgIH5Bcmd1bWVudFJlZ1Zh
bHVlKCk7CisKKyAgICBSZWcgYXJndW1lbnRSZWcoKSBjb25zdCB7IHJldHVybiBtX3JlZzsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBBcmd1
bWVudFJlZ1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcgcmVnKQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkgPyBwb2ludGVyKCkg
OiBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3JlZyhyZWcpCisgICAgeworICAgIH0KKwor
ICAgIFJlZyBtX3JlZzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Jhc2ljQmxvY2s6OkJhc2lj
QmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2luZGV4KGlu
ZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNpY0Jsb2NrOjp+
QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCit2b2lkIEJhc2ljQmxvY2s6
OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIEIzOjphZGRQcmVkZWNl
c3Nvcih0aGlzLCBibG9jayk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMs
IGJsb2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgQjM6OnJlcGxhY2VQcmVkZWNlc3Nv
cih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30K
Kwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5j
eSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0LnBy
aW50KCIgICAgIiwgZGVlcER1bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQmFzaWNCbG9jaworI2RlZmluZSBCM0Jhc2ljQmxvY2sKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29y
Q29sbGVjdGlvbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
UHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5
cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisgICAgdHlwZWRl
ZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlzIG1hdGNo
ZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3RleHByIGNv
bnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiIyI7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisgICAg
dW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBWYWx1ZUxp
c3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZh
bHVlTGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBW
YWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
YmVnaW4oKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgVmFsdWUqIGF0KHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgVmFsdWUqJiBhdChzaXplX3QgaW5kZXgp
IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorCisgICAgVmFsdWUqIGxhc3QoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICBWYWx1ZSomIGxhc3QoKSB7IHJldHVybiBt
X3ZhbHVlcy5sYXN0KCk7IH0KKworICAgIGNvbnN0IFZhbHVlTGlzdCYgdmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXM7IH0KKyAgICBWYWx1ZUxpc3QmIHZhbHVlcygpIHsgcmV0dXJuIG1f
dmFsdWVzOyB9CisKKyAgICB2b2lkIGFwcGVuZChWYWx1ZSopOworCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBh
cHBlbmROZXcoUHJvY2VkdXJlJiwgQXJndW1lbnRzLi4uKTsKKworICAgIHVuc2lnbmVkIG51bVN1
Y2Nlc3NvcnMoKSBjb25zdDsKKyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVk
IGluZGV4KSBjb25zdDsKKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCk7CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0OworICAg
IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKTsKKworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29y
QmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9j
aywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCk7CisgICAgU3VjY2Vzc29yQ29sbGVj
dGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9j
a3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0K
KyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1f
cHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVj
ZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nv
ckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisKKyAgICBi
b29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICBkb3VibGUgZnJlcXVlbmN5KCkgY29uc3Qg
eyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZp
YSBQcm9jZWR1cmUuCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1
ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVlTGlzdCBtX3ZhbHVlczsK
KyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVl
bmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVw
QmFzaWNCbG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9j
ayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2st
PmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51
bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEJhc2ljQmxvY2sqIG1fYmxvY2s7
Cit9OworCitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKGNvbnN0IEJhc2ljQmxv
Y2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxvY2spOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lubGlu
ZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgor
I2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZVR5cGUgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBCYXNpY0Jsb2Nr
OjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
Cit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJn
dW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit1bnNpZ25lZCBCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPm51bVN1Y2Nlc3NvcnMoKTsKK30KKworRnJl
cXVlbnRlZEJsb2NrIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRl
eCk7Cit9CisKK0ZyZXF1ZW50ZWRCbG9jayYgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVk
IGluZGV4KQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vz
c29yKGluZGV4KTsKK30KKworY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNC
bG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJv
bFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK0Jhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Qm
IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrKiBCYXNpY0Jsb2NrOjpz
dWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3VjY2Vz
c29yKGluZGV4KS5ibG9jaygpOworfQorCitCYXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6c3VjY2Vz
c29yQmxvY2sodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCku
YmxvY2soKTsKK30KKworU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JM
aXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKQoreworICAgIHJldHVybiBTdWNjZXNz
b3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9
CisKK1N1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29y
TGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
U3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0
PihzdWNjZXNzb3JzKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9ja1V0aWxzX2gKKyNk
ZWZpbmUgQjNCYXNpY0Jsb2NrVXRpbHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNp
Y0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAgYXV0byYgcHJl
ZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworCisgICAgaWYgKHByZWRlY2Vzc29y
cy5jb250YWlucyhwcmVkZWNlc3NvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHBy
ZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNp
Y0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAgYXV0byYgcHJl
ZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vz
c29yc1tpXSA9PSBwcmVkZWNlc3NvcikgeworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ktLV0g
PSBwcmVkZWNlc3NvcnMubGFzdCgpOworICAgICAgICAgICAgcHJlZGVjZXNzb3JzLnJlbW92ZUxh
c3QoKTsKKyAgICAgICAgICAgIEFTU0VSVCghcHJlZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vz
c29yKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJl
cGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogZnJvbSwgQmFz
aWNCbG9jayogdG8pCit7CisgICAgYXV0byYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vz
c29ycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBmcm9tKSB7CisgICAgICAg
ICAgICBwcmVkZWNlc3NvcnNbaV0gPSB0bzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyByZWNvbXB1dGVz
IHByZWRlY2Vzc29ycyBhbmQgcmVtb3ZlcyBibG9ja3MgdGhhdCBhcmVuJ3QgcmVhY2hhYmxlLgor
dGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK3ZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykKK3sKKyAgICAvLyBDbGVh
ciBhbGwgcHJlZGVjZXNzb3IgbGlzdHMgZmlyc3QuCisgICAgZm9yIChhdXRvJiBibG9jayA6IGJs
b2NrcykKKyAgICAgICAgYmxvY2stPnByZWRlY2Vzc29ycygpLnJlc2l6ZSgwKTsKKworICAgIEdy
YXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gd29ya2xp
c3Q7CisgICAgd29ya2xpc3QucHVzaChibG9ja3NbMF0uZ2V0KCkpOworICAgIHdoaWxlIChCYXNp
Y0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICBp
ZiAod29ya2xpc3QucHVzaChzdWNjZXNzb3IpKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+
cHJlZGVjZXNzb3JzKCkuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDE7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KGJsb2Nrc1tpXS0+cHJlZGVjZXNzb3JzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgYmxvY2tz
W2ldID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja1V0aWxzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCbG9ja1dvcmtsaXN0X2gKKyNkZWZpbmUg
QjNCbG9ja1dvcmtsaXN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBo
Tm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworc3RydWN0IEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhO
b2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmts
aXN0OworCisvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0
IGFzICJibG9jayB3aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9j
a1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxv
Y2sgd29ya2xpc3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25n
IHdpdGggdGhlIGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcg
dGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2Vm
dWwgZm9yCisvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNo
IGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3Nv
ciBpbmRleC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlz
dCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJh
c2ljQmxvY2s+PjsKKwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlw
ZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0
eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxC
YXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja1dv
cmtsaXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFs
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNp
YWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tT
cGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1l
c3BhY2UgeworCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBzd2l0Y2gg
KGluc3Qub3JpZ2luLT5vcGNvZGUoKSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBD
aGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNl
IENoZWNrOgorICAgICAgICByZXR1cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitDaGVja1NwZWNpYWw6OkNoZWNrU3BlY2lhbChBaXI6
Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpCisgICAgOiBtX2NoZWNrT3Bjb2RlKG9w
Y29kZSkKKyAgICAsIG1fbnVtQ2hlY2tBcmdzKG51bUFyZ3MpCit7Cit9CisKK0NoZWNrU3BlY2lh
bDo6fkNoZWNrU3BlY2lhbCgpCit7Cit9CisKK0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFu
Y2goY29uc3QgSW5zdCYgaW5zdCkgY29uc3QKK3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2No
ZWNrT3Bjb2RlLCBpbnN0Lm9yaWdpbik7CisgICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzaXplKG1f
bnVtQ2hlY2tBcmdzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX251bUNoZWNrQXJnczsgaS0t
OykKKyAgICAgICAgaGlkZGVuQnJhbmNoLmFyZ3NbaV0gPSBpbnN0LmFyZ3NbaSArIDFdOworICAg
IHJldHVybiBoaWRkZW5CcmFuY2g7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJn
KEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBj
YWxsYmFjaykKK3sKKyAgICBoaWRkZW5CcmFuY2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7
CisgICAgZm9yRWFjaEFyZ0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEs
IGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5zdCYg
aW5zdCkKK3sKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmlzVmFsaWQoKQorICAgICAg
ICAmJiBpc1ZhbGlkSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5z
dCk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiBpbnN0LCB1bnNp
Z25lZCBhcmdJbmRleCkKK3sKKyAgICBpZiAoYXJnSW5kZXggPj0gMSAmJiBhcmdJbmRleCA8IDEg
KyBtX251bUNoZWNrQXJncykKKyAgICAgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5hZG1p
dHNTdGFjayhhcmdJbmRleCAtIDEpOworICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwobnVtQjNB
cmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGFyZ0luZGV4KTsKK30KKworQ0Nh
bGxIZWxwZXJzOjpKdW1wIENoZWNrU3BlY2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KQoreworICAgIENDYWxsSGVs
cGVyczo6SnVtcCBmYWlsID0gaGlkZGVuQnJhbmNoKGluc3QpLmdlbmVyYXRlKGppdCwgY29udGV4
dCk7CisgICAgQVNTRVJUKGZhaWwuaXNTZXQoKSk7CisKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0
Lm9yaWdpbjsKKworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKKyAgICBpZiAoaXNDaGVja01h
dGgodmFsdWUtPm9wY29kZSgpKSkgeworICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IENo
ZWNrTXVsKQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXAoKSk7CisgICAgICAgIGVs
c2UgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja1N1YiAmJiB2YWx1ZS0+YXJnc1swXS0+aXNJ
bnQoMCkpCisgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoY29udGV4dC5j
b2RlLCBpbnN0LmFyZ3NbMl0pKTsKKyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKGNvbnRl
eHQuY29kZSwgaW5zdC5hcmdzWzFdKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHZh
bHVlLT5vcGNvZGUoKSA9PSBDaGVjayk7CisgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpj
b25zdGFudCgxKSk7CisgICAgfQorCisgICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwgbV9udW1D
aGVja0FyZ3MgKyAxLCBpbnN0LCByZXBzKTsKKyAgICAKKyAgICBjb250ZXh0LmxhdGVQYXRocy5h
cHBlbmQoCisgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdGlvbkNvbnRleHQ6OkxhdGVQ
YXRoRnVuY3Rpb24+KAorICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJh
dGlvbkNvbnRleHQmIGNvbnRleHQpIHsKKyAgICAgICAgICAgICAgICBmYWlsLmxpbmsoJmppdCk7
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0g
dmFsdWUtPnN0YWNrbWFwKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0YWNrbWFwKTsKKwor
ICAgICAgICAgICAgICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKKyAgICAg
ICAgICAgICAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
c3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICAgICAgICAgICAgICBwYXJhbXMucmVwcyA9IHJlcHM7
CisgICAgICAgICAgICAgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21hcC0+bV91c2Vk
UmVnaXN0ZXJzOworCisgICAgICAgICAgICAgICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4o
aml0LCBwYXJhbXMpOworICAgICAgICAgICAgfSkpOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6
ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jaGVj
a09wY29kZSwgIigiLCBtX251bUNoZWNrQXJncywgIikiKTsKK30KKwordm9pZCBDaGVja1NwZWNp
YWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiQjM6OkNoZWNrVmFsdWUgbG93ZXJlZCB0byAiLCBtX2NoZWNrT3Bjb2RlLCAiIHdpdGggIiwg
bV9udW1DaGVja0FyZ3MsICIgYXJncy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjND
aGVja1NwZWNpYWxfaAorI2RlZmluZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNp
YWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHdhbnQgdG8g
bG93ZXIgQ2hlY2sgaW5zdHJ1Y3Rpb25zIHRvIGEgYnJhbmNoLCBidXQgdGhlbiB3ZSB3YW50IHRv
IHJvdXRlIHRoYXQgYnJhbmNoIHRvIG91cgorLy8gb3V0LW9mLWxpbmUgY29kZSBpbnN0ZWFkIG9m
IGRvaW5nIGFueXRoaW5nIGVsc2UuIEZvciB0aGlzIHJlYXNvbiwgYSBDaGVja1NwZWNpYWwgd2ls
bCByZW1lbWJlcgorLy8gd2hpY2ggYnJhbmNoIG9wY29kZSB3ZSBoYXZlIHNlbGVjdGVkIGFsb25n
IHdpdGggdGhlIG51bWJlciBvZiBhcmdzIGluIHRoZSBvdmVybG9hZCB3ZSB3YW50LiBJdAorLy8g
d2lsbCBjcmVhdGUgYW4gSW5zdCB3aXRoIHRoYXQgb3Bjb2RlIHBsdXMgdGhlIGFwcHJvcHJpYXRl
IGFyZ3MgZnJvbSB0aGUgb3duaW5nIEluc3Qgd2hlbmV2ZXIgeW91CisvLyBjYWxsIGFueSBvZiB0
aGUgY2FsbGJhY2tzLgorLy8KKy8vIE5vdGUgdGhhdCBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBh
bmQgQ2hlY2tNdWwgd2UgZXhwZWN0IHRoYXQgdGhlIEIzIGFyZ3VtZW50cyBhcmUgdGhlIHJldmVy
c2UKKy8vIG9mIHRoZSBBaXIgYXJndW1lbnRzIChBZGQoYSwgYikgPT4gQWRkMzIgYiwgYSkuIEV4
Y2VwdDoKKy8vIC0gQ2hlY2tTdWIoMCwgeCksIHdoaWNoIHR1cm5zIGludG8gQnJhbmNoTmVnMzIg
eC4KKy8vIC0gQ2hlY2tNdWwoYSwgYiksIHdoaWNoIHR1cm5zIGludG8gTXVsMzIgYiwgYSBidXQg
d2UgcGFzcyBBbnkgZm9yIGEncyBWYWx1ZVJlcC4KKworY2xhc3MgQ2hlY2tTcGVjaWFsIDogcHVi
bGljIFN0YWNrbWFwU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bj
b2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncyk7CisgICAgfkNoZWNrU3BlY2lhbCgpOworCisg
ICAgLy8gQ29uc3RydWN0cyBhbmQgcmV0dXJucyB0aGUgSW5zdCByZXByZXNlbnRpbmcgdGhlIGJy
YW5jaCB0aGF0IHRoaXMgd2lsbCB1c2UuCisgICAgSW5zdCBoaWRkZW5CcmFuY2goY29uc3QgSW5z
dCYpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYs
IGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlk
ZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1p
dHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisKKyAgICAv
LyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhpZGRlbiBicmFu
Y2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2VuZXJhdGVzIHRo
ZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBn
ZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxlcHJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIEFpcjo6T3Bjb2RlIG1fY2hlY2tPcGNvZGU7CisgICAgdW5zaWduZWQgbV9udW1D
aGVja0FyZ3M7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NoZWNrU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ2hl
Y2tWYWx1ZTo6fkNoZWNrVmFsdWUoKQoreworfQorCit2b2lkIENoZWNrVmFsdWU6OmR1bXBNZXRh
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIs
IHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUg
QjNDaGVja1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQ2hlY2tWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVja1N1
YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfkNoZWNrVmFsdWUoKTsKKworICAgIFN0YWNr
bWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1
cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBD
aGVja011bC4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luLCBsZWZ0LCByaWdodCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0ludCh0eXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKGxlZnQtPnR5
cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBDaGVja0Fk
ZCB8fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2RlID09IENoZWNrTXVsKTsKKyAgICB9CisK
KyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY2RlID09IENoZWNrKTsKKyAgICB9Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM0NoZWNrVmFsdWVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
bW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1v
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNDb21tb24uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJERkdDb21t
b24uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVtcElSKCkKK3sKKyAg
ICByZXR1cm4gRlRMOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkgfHwgRlRMOjpzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSB8fCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpOworfQorCitib29s
IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEdy
YXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCkKK3sKKyAgICBy
ZXR1cm4gREZHOjp2YWxpZGF0aW9uRW5hYmxlZCgpIHx8IHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQ
aGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpCit7CisgICAg
cmV0dXJuIE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNo
b3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZVZh
bGlkYXRpb25GYWlsdXJlKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9u
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb21tb25faAorI2RlZmluZSBCM0NvbW1v
bl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworYm9vbCBzaG91bGREdW1wSVIoKTsKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2Uo
KTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUigpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNo
UGhhc2UoKTsKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjND
b21tb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2
aXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11
dGF0aXZpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzQ29tbXV0YXRpdml0eS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBD
b21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkpCit7CisgICAgc3dpdGNoIChjb21tdXRhdGl2aXR5
KSB7CisgICAgY2FzZSBDb21tdXRhdGl2ZToKKyAgICAgICAgb3V0LnByaW50KCJDb21tdXRhdGl2
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOb3RDb21tdXRhdGl2ZToKKyAgICAgICAg
b3V0LnByaW50KCJOb3RDb21tdXRhdGl2ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbW11dGF0aXZpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21tdXRhdGl2aXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tdXRhdGl2aXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
Q29tbXV0YXRpdml0eV9oCisjZGVmaW5lIEIzQ29tbXV0YXRpdml0eV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBDb21tdXRh
dGl2aXR5IHsKKyAgICBDb21tdXRhdGl2ZSwKKyAgICBOb3RDb21tdXRhdGl2ZQorfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0
cmVhbTsKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkNvbW11dGF0
aXZpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM0NvbW11dGF0aXZpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBh
dHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExv
YWROb3RaZXJvMSA9IEFuZChMb2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIg
PSBBbmQobGVmdCwgTG9hZChhZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0
KQorCitUZXN0TG9hZFplcm8xID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDAp
CitUZXN0TG9hZFplcm8yID0gRXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rl
c3RaZXJvID0gRXF1YWwoQW5kKGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVh
bChMb2FkKGFkZHJlc3MpLCByaWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFk
ZHJlc3MpKQorTm90ID0gRXF1YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdo
dCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0NvbnN0MzJWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSgpCit7Cit9
CisKK3ZvaWQgQ29uc3QzMlZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjND
b25zdDMyVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQ29uc3QzMlZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBD
b25zdDMyOyB9CisgICAgCisgICAgfkNvbnN0MzJWYWx1ZSgpOworICAgIAorICAgIGludDMyX3Qg
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwg
Q29uc3QzMiwgSW50MzIsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25z
dDMyVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDY0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVl
KCkKK3sKK30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NvbnN0NjRWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3Q2NFZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAg
aW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBDb25zdDY0LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0NvbnN0NjRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0RG91YmxlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29u
c3REb3VibGVWYWx1ZTo6fkNvbnN0RG91YmxlVmFsdWUoKQoreworfQorCit2b2lkIENvbnN0RG91
YmxlVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50ZigiJWxlIiwgbV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzQ29uc3REb3VibGVWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3REb3VibGVWYWx1ZSA6IHB1YmxpYyBW
YWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7
IHJldHVybiBvcGNvZGUgPT0gQ29uc3REb3VibGU7IH0KKyAgICAKKyAgICB+Q29uc3REb3VibGVW
YWx1ZSgpOworICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Q29uc3REb3VibGVWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZh
bHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdERvdWJsZSwgRG91YmxlLCBvcmlnaW4p
CisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGRvdWJs
ZSBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xW
YWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5o
IgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250
cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KGxpc3REdW1wKG1fc3VjY2Vzc29ycykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDb250cm9sVmFsdWVfaAorI2RlZmluZSBCM0NvbnRyb2xWYWx1ZV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1Zh
bHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Js
b2NrOworCitjbGFzcyBDb250cm9sVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAg
IHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBCcmFuY2g6Cisg
ICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIE9vcHM6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBTd2l0Y2g6IAorICAgICAgICAgICAgLy8gVGhpcyBpcyBo
ZXJlIGJlY2F1c2UgU3dpdGNoVmFsdWUgaXMgYSBzdWJjbGFzcyBvZiBDb250cm9sVmFsdWUsIHNv
IHdlIHdhbnQKKyAgICAgICAgICAgIC8vIHN3aXRjaFZhbHVlLT5hczxDb250cm9sVmFsdWU+KCkg
dG8gcmV0dXJuIG5vbi1udWxsLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAg
ICB+Q29udHJvbFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgY29uc3Qg
eyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayBzdWNj
ZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07
IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nl
c3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNjZXNzb3JMaXN0
JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBV
c2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCisgICAgewor
ICAgIH0KKworICAgIC8vIFN1YmNsYXNzZXMgd2lsbCBwb3B1bGF0ZSB0aGlzLgorICAgIFN1Y2Nl
c3Nvckxpc3QgbV9zdWNjZXNzb3JzOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgT29wcy4KKyAgICBDb250cm9sVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9w
Y29kZSA9PSBPb3BzKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgUmV0dXJuLgorICAg
IENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIHJlc3VsdCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBv
cmlnaW4sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gUmV0dXJuKTsK
KyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KKyAgICBDb250cm9sVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50
ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9y
aWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIG1f
c3VjY2Vzc29ycy5hcHBlbmQodGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3Ig
QnJhbmNoLgorICAgIENvbnRyb2xWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIGNvbnN0
IEZyZXF1ZW50ZWRCbG9jayYgeWVzLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIG5vKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBCcmFuY2gpOworICAgICAgICBtX3N1Y2Nlc3NvcnMu
YXBwZW5kKHllcyk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobm8pOworICAgIH0KK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSkKK3sKKyAg
ICBzd2l0Y2ggKGZyZXF1ZW5jeSkgeworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDoK
KyAgICAgICAgb3V0LnByaW50KCJOb3JtYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
RnJlcXVlbmN5Q2xhc3M6OlJhcmU6CisgICAgICAgIG91dC5wcmludCgiUmFyZSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVuY3lDbGFzc19oCisjZGVmaW5lIEIzRnJl
cXVlbmN5Q2xhc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50OF90IHsKKyAg
ICAvLyBXZSBkb24ndCBoYXZlIGFueSBoeXBvdGhlc2lzIGFib3V0IHRoZSBmcmVxdWVuY3kgb2Yg
dGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0LiBUaGlzIGlzCisgICAgLy8gdGhlIGNvbW1vbiBj
YXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJhc2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0aGlzIGNhc2Uu
CisgICAgTm9ybWFsLAorCisgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhpcyBjb250cm9sIGZsb3cg
Y29uc3RydWN0IHdpbGwgYmUgcmVhY2hlZCBzdXBlciByYXJlbHkuIEl0J3MgdmFsaWQgdG8KKyAg
ICAvLyBwZXJmb3JtIG9wdGltaXphdGlvbnMgdGhhdCBwdW5pc2ggUmFyZSBjb2RlLiBOb3RlIHRo
YXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRpb25zIHdoZXJlIHlvdQorICAgIC8vIGhhdmUgdG8gc29t
ZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJlcXVlbmN5IGNsYXNzIGZyb20gYSBtZXJnaW5nIG9mIG11
bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAgICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVyIGNob29zZSBS
YXJlOyBhbHdheXMgZ28gd2l0aCBOb3JtYWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UK
KyAgICAvLyByZWFsbHkgZG8gcHVuaXNoIFJhcmUgY29kZSB2ZXJ5IGJhZGx5LgorICAgIFJhcmUK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xh
c3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVuY3lDbGFzc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQjNG
cmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJh
c2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVudGVkQmxvY2tf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKyNpbmNsdWRlICJC
M1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEND
YWxsSGVscGVycyYgaml0KQoreworICAgIEFpcjo6Q29kZSBjb2RlOworICAgIGdlbmVyYXRlVG9B
aXIocHJvY2VkdXJlLCBjb2RlKTsKKyAgICBBaXI6OmdlbmVyYXRlKGNvZGUsIGppdCk7Cit9CisK
K3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQWlyOjpDb2RlJiBjb2Rl
KQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKHByb2Nl
ZHVyZSwgImluaXRpYWwiKTsKKworICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBk
YXRhTG9nKCJJbml0aWFsIEIzOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAg
ICB9CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CisKKyAg
ICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJm
aW5hbCIpOworICAgIAorICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9n
KCJCMyBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7
CisgICAgfQorCisgICAgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzR2VuZXJhdGVfaAorI2RlZmluZSBCM0dlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9
CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2Us
IGFuZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBjb2RlIGJ5IGZpcnN0CisvLyBpbnRlcm5hbGx5
IGNvbnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFuZCB0aGVuIGdlbmVyYXRpbmcgdGhhdC4KK3Zv
aWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0NhbGxIZWxwZXJzJik7CisKKy8vIFRoaXMgdGFrZXMg
YSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8g
QWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKKy8vIHRoZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVz
aW5nIEFpcjo6Z2VuZXJhdGUoKS4gTm90ZSB0aGF0IGFuIEFpcjo6Q29kZSB3aWxsIGhhdmUgcG9p
bnRlcnMgaW50byB0aGUKKy8vIEIzOjpQcm9jZWR1cmUsIHNvIHlvdSBuZWVkIHRvIGVuc3VyZSB0
aGF0IHRoZSBCMzo6UHJvY2VkdXJlIG91dGxpdmVzIHRoZSBBaXI6OkNvZGUuCit2b2lkIGdlbmVy
YXRlVG9BaXIoUHJvY2VkdXJlJiwgQ29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0dlbmVyYXRlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVu
dGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyaWNGcmVxdWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQjNHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgi
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCisvLyBBIGZyZXF1ZW50ZWQgYmxvY2sgaXMgYSB0dXBsZSBvZiBCYXNpY0Jsb2Nr
KiBhbmQgRnJlcXVlbmN5Q2xhc3MuIEl0J3MgdXN1YWxseSB1c2VkIGFzIGEKKy8vIHN1Y2Nlc3Nv
ciBlZGdlLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorY2xhc3MgR2VuZXJpY0Zy
ZXF1ZW50ZWRCbG9jayB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jaygKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBudWxscHRyLCBGcmVxdWVuY3lDbGFz
cyBmcmVxdWVuY3kgPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAgICAgICA6IG1fYmxvY2so
YmxvY2spCisgICAgICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jayA9PSBvdGhlci5tX2Jsb2NrCisg
ICAgICAgICAgICAmJiBtX2ZyZXF1ZW5jeSA9PSBvdGhlci5tX2ZyZXF1ZW5jeTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gKnRoaXMgIT0gR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jaygpOworICAgIH0KKworICAgIEJhc2lj
QmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIEJhc2ljQmxvY2sq
JiBibG9jaygpIHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICBGcmVxdWVuY3lDbGFzcyBmcmVxdWVu
Y3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZnJlcXVlbmN5KCkgIT0gRnJl
cXVlbmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgICAgIG91dC5wcmludChmcmVxdWVuY3koKSwg
IjoiKTsKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKG1fYmxvY2spKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBGcmVxdWVuY3lDbGFzcyBt
X2ZyZXF1ZW5jeTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzSW5kZXhNYXBfaAorI2RlZmluZSBCM0luZGV4TWFwX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlz
IGlzIGEgbWFwIGZvciBrZXlzIHRoYXQgaGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmlj
aWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMg
aWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVzZSBtYXBzLCBzaW5jZSBWYWx1ZXMg
Y2FuIGhhdmUgdmVyeQorLy8gc3BhcnNlIGluZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBW
YWx1ZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+CitjbGFzcyBJ
bmRleE1hcCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW5kZXhNYXAoc2l6ZV90IHNpemUgPSAw
KQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IucmVzaXplKHNpemUpOworICAgIH0KKworICAgIHZv
aWQgcmVzaXplKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IucmVzaXplKHNp
emUpOworICAgIH0KKworICAgIFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgfQorICAgIAorICAgIGNv
bnN0IFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBW
ZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNJbmRleE1hcF9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8
d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0
aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tz
LiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUg
dG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNl
CisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ug
d2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBT
bywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQg
eworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhZGQo
VCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgo
KSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25z
dCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29sbGVjdGlvbikK
KyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9y
KCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBDb2xsZWN0aW9u
VHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yIGl0
ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAg
ICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pdGVyID09
IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBtX2NvbGxlY3Rp
b247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgbV9p
dGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAgICAgICBpdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmVu
ZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUmIG1f
Y29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAgIH07CisKKyAg
ICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHBy
b2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86CisgICAgLy8gaW5k
ZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZhbHVlcyhjb25z
dCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQorCisgICAgY29u
c3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMoKS5zZXRCaXRz
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgsIGluZGV4KTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkIzQWRk
cmVzc01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM0xvd2VyaW5nTWF0Y2hlci5oIgorI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2lu
ZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2UgeworCitjbGFzcyBMb3dlclRvQWlyIHsKK3B1
YmxpYzoKKyAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQor
ICAgICAgICA6IHZhbHVlVG9UbXAoY29kZS52YWx1ZXMoKS5zaXplKCkpCisgICAgICAgICwgYmxv
Y2tUb0Jsb2NrKGNvZGUuc2l6ZSgpKQorICAgICAgICAsIHVzZUNvdW50cyhwcm9jZWR1cmUpCisg
ICAgICAgICwgYWRkcmVzc1NlbGVjdG9yKCp0aGlzKQorICAgICAgICAsIGxvd2VyaW5nU2VsZWN0
b3IoKnRoaXMpCisgICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBjb2Rl
KGNvZGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGZv
ciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlKQorICAgICAgICAgICAgYmxvY2tU
b0Jsb2NrW2Jsb2NrXSA9IGNvZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1ZW5jeSgpKTsKKworICAg
ICAgICAvLyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlz
IGEgZ29vZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKKyAgICAgICAgLy8gaG9pc3RlZCBhZGRy
ZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3Au
CisgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlLmJsb2Nrc0lu
UHJlT3JkZXIoKSkgeworICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KKyAgICAgICAg
ICAgIGluc3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2Vz
cyBibG9ja3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhh
dCdzIHdoYXQgYWxsb3dzIHVzCisgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZl
Y3RpdmVseS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOworICAg
ICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAg
ICBydW5Mb3dlcmluZ01hdGNoZXIoY3VycmVudFZhbHVlLCBsb3dlcmluZ1NlbGVjdG9yKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25z
LiBpbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MKKyAg
ICAgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBpbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3Qg
OiBpbnN0c1tpXSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+YXBw
ZW5kSW5zdChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAg
ICAgICAgICAgIEFTU0VSVChibG9jay0+c3VjY2Vzc29ycygpIDw9IDIpOworICAgICAgICAgICAg
Zm9yIChCMzo6QmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2Nrcygp
KQorICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3NvcnMoKS5hcHBl
bmQoYmxvY2tUb0Jsb2NrW3N1Y2Nlc3Nvcl0pOworICAgICAgICB9CisgICAgfQorCisgICAgVG1w
IHRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBUbXAmIHRtcCA9IHZhbHVlVG9UbXBb
dmFsdWVdOworICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgIHRtcCA9IGNvZGUubmV3VG1w
KGlzSW50KHZhbHVlKSA/IEFyZzo6R1AgOiBBcmc6OkZQKTsKKyAgICAgICAgcmV0dXJuIHRtcDsK
KyAgICB9CisKKyAgICAvLyBUaGlzIGdpdmVzIHlvdSB0aGUgYWRkcmVzcyBvZiB0aGUgZ2l2ZW4g
TG9hZCBvciBTdG9yZS4gSWYgaXQncyBub3QgYSBMb2FkIG9yIFN0b3JlLCB0aGVuCisgICAgLy8g
aXQgcmV0dXJucyBBcmcoKS4KKyAgICBBcmcgYWRkcihWYWx1ZSogbWVtb3J5VmFsdWUpCisgICAg
eworICAgICAgICBNZW1vcnlWYWx1ZSogdmFsdWUgPSBtZW1vcnlWYWx1ZS0+YXM8TWVtb3J5VmFs
dWU+KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisK
KyAgICAgICAgcnVuQWRkcmVzc01hdGNoZXIodmFsdWUtPmNoaWxkcmVuLmxhc3QoKSwgYWRkcmVz
c1NlbGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFkZHJl
c3Mud2l0aE9mZnNldCh2YWx1ZS0+b2Zmc2V0KCkpOworICAgIH0KKworICAgIEFyZyBsb2FkQWRk
cihWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+b3Bjb2Rl
KCkgPT0gTG9hZCkKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAg
IHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcgaW1tKFZhbHVlKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBBcmc6
OkltbSh2YWx1ZS0+YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKwor
ICAgIEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoQXJnIHJl
c3VsdCA9IGltbSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICBy
ZXR1cm4gdG1wKHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxPcGNvZGUgb3Bjb2RlLCBD
b21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICB2b2lkIGFw
cGVuZEJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBUbXAg
cmVzdWx0ID0gdG1wKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIAorICAgICAgICAvLyBUaHJlZS1v
cGVyYW5kIGZvcm1zIGxpa2U6CisgICAgICAgIC8vICAgICBPcCBhLCBiLCBjCisgICAgICAgIC8v
IG1lYW4gc29tZXRoaW5nIGxpa2U6CisgICAgICAgIC8vICAgICBjID0gYSBPcCBiCisKKyAgICAg
ICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFyZzo6VG1wLCBBcmc6OlRtcCkp
IHsKKyAgICAgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGltbShyaWdodCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5k
KG9wY29kZSwgaW1tKHJpZ2h0KSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgICAgICAvLyBBIG5vbi1jb21tdXRhdGl2ZSBvcGVyYXRpb24gY291bGQgaGF2ZSBh
biBpbW1lZGlhdGUgaW4gbGVmdC4KKyAgICAgICAgICAgICAgICBpZiAoaW1tKGxlZnQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShsZWZ0KSwgdG1wKHJpZ2h0KSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbW0ocmlnaHQpICYmIGlz
VmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIHsKKyAgICAg
ICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgaW1tKHJpZ2h0KSwgcmVzdWx0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFR3by1vcGVyYW5kIGZv
cm1zIGxpa2U6CisgICAgICAgIC8vICAgICBPcCBhLCBiCisgICAgICAgIC8vIG1lYW4gc29tZXRo
aW5nIGxpa2U6CisgICAgICAgIC8vICAgICBiID0gYiBPcCBhCisKKyAgICAgICAgLy8gQXQgdGhp
cyBwb2ludCwgd2UgcHJlZmVyIHZlcnNpb25zIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBoYXZlIGEg
ZnVzZWQgbG9hZCBvdmVyIHRocmVlCisgICAgICAgIC8vIG9wZXJhbmQgZm9ybXMuCisgICAgICAg
IAorICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAgICAg
ICAgQXJnIGxlZnRBZGRyID0gbG9hZEFkZHIobGVmdCk7CisgICAgICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBsZWZ0QWRkci5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAgICAgICAg
ICAgIGFwcGVuZChNb3ZlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFw
cGVuZChvcGNvZGUsIGxlZnRBZGRyLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFyZyByaWdodEFkZHIgPSBsb2Fk
QWRkcihyaWdodCk7CisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5r
aW5kKCksIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwg
cmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkciwgcmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBh
cHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCBy
ZXN1bHQpOworICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAg
IH0KKworICAgIHRlbXBsYXRlPE9wY29kZSBvcGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0YXRp
dmUgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICBib29sIHRyeUFwcGVuZFN0b3JlQmluT3AoVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRy
KGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOworCisgICAgICAgIFZh
bHVlKiBvdGhlclZhbHVlOworICAgICAgICBpZiAoYWRkcihsZWZ0KSA9PSBzdG9yZUFkZHIpCisg
ICAgICAgICAgICBvdGhlclZhbHVlID0gcmlnaHQ7CisgICAgICAgIGVsc2UgaWYgKGNvbW11dGF0
aXZpdHkgPT0gQ29tbXV0YXRpdmUgJiYgYWRkcihyaWdodCkgPT0gc3RvcmVBZGRyKQorICAgICAg
ICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIHN0
b3JlQWRkci5raW5kKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGFw
cGVuZChvcGNvZGUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IHZvaWQgYXBwZW5kKE9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAg
ICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoSW5zdChvcGNvZGUsIGN1cnJlbnRWYWx1
ZSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKyAgICAK
KyAgICBJbmRleFNldDxWYWx1ZT4gbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2ls
bCBoYXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gdmFsdWVUb1Rt
cDsKKyAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gYmxvY2tU
b0Jsb2NrOworCisgICAgVXNlQ291bnRzIHVzZUNvdW50czsKKworICAgIFZlY3RvcjxWZWN0b3I8
SW5zdCwgND4+IGluc3RzOworCisgICAgVmFsdWUqIGN1cnJlbnRWYWx1ZTsKKworICAgIC8vIFRo
ZSBhZGRyZXNzIHNlbGVjdG9yIHdpbGwgbWF0Y2ggYW55IHBhdHRlcm4gd2hlcmUgdGhlIGlucHV0
IG9wZXJhbmRzIGFyZSBhdmFpbGFibGUgYXMgVG1wcy4KKyAgICAvLyBJdCBkb2Vzbid0IGNhcmUg
YWJvdXQgc2hhcmluZy4gSXQgd2lsbCBoYXBwaWx5IGVtaXQgdGhlIHNhbWUgYWRkcmVzcyBleHBy
ZXNzaW9uIG92ZXIgYW5kIG92ZXIKKyAgICAvLyBhZ2FpbiByZWdhcmRsZXNzIG9mIHRoZSBleHBy
ZXNzaW9uJ3MgY29tcGxleGl0eS4gVGhpcyB3b3JrcyBvdXQgZmluZSwgc2luY2UgYXQgdGhlIG1h
Y2hpbmUKKyAgICAvLyBsZXZlbCwgYWRkcmVzcyBleHByZXNzaW9ucyBhcmUgc3VwZXIgY2hlYXAu
IEhvd2V2ZXIsIHRoaXMgZG9lcyBoYXZlIGEgaGFjayB0byBhdm9pZAorICAgIC8vICJ1bmhvaXN0
aW5nIiBhZGRyZXNzIGV4cHJlc3Npb25zLgorICAgIGNsYXNzIEFkZHJlc3NTZWxlY3RvciB7Cisg
ICAgICAgIEFkZHJlc3NTZWxlY3RvcihMb3dlclRvQWlyJiBsb3dlcikKKyAgICAgICAgICAgIDog
bG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgYWNjZXB0
c1Jvb3QoVmFsdWUqIHJvb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdh
bnQgdG8gbWF0Y2ggYW4gYWRkcmVzcyBleHByZXNzaW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBj
b21wdXRlZAorICAgICAgICAgICAgLy8gZXhwbGljaXRseS4KKyAgICAgICAgICAgIHJldHVybiAh
dmFsdWVUb1RtcFtyb290XTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWNjZXB0Um9vdExh
dGUoVmFsdWUqKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHZhbHVlVG9UbXBbdmFsdWVd
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHJ1biBhY2Nl
cHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFjY2Vw
dEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZShBcmd1bWVu
dHMuLi4pIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQuY29udGFpbnMo
dmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wg
YWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1
bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQxKFZhbHVlKiBpbmRleCwg
VmFsdWUqIGxvZ1NjYWxlLCBWYWx1ZSogYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGxvZ1NjYWxlLT5hc0ludCgpIDwgMCB8fCBsb2dTY2FsZS0+YXNJbnQoKSA+IDMpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJn
OjppbmRleCgKKyAgICAgICAgICAgICAgICBsb3dlci50bXAoaW5kZXgpLCBsb3dlci50bXAoaW5k
ZXgpLCAxIDw8IGxvZ1NjYWxlLT5hc0ludCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDIoVmFsdWUqIGJhc2UsIFZhbHVl
KiBpbmRleCwgdmFsdWUqIGxvZ1NjYWxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
dHJ5QWRkU2hpZnQxKGluZGV4LCBsb2dTY2FsZSwgYmFzZSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAocmlnaHQtPmhhc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlz
IHByb2R1Y3Rpb24gaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHNpbmNlIHdlIGV4cGVjdAorICAg
ICAgICAgICAgICAgIC8vIExvYWQoQWRkKEB4LCBAY29uc3QxKSwgb2Zmc2V0ID0gY29uc3QyKSB0
byBoYXZlIGFscmVhZHkgYmVlbiBzdHJlbmd0aC1yZWR1Y2VkCisgICAgICAgICAgICAgICAgLy8g
dG8gTG9hZChAeCwgb2Zmc2V0ID0gY29uc3QxICsgY29uc3QyKS4KKyAgICAgICAgICAgICAgICBz
ZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIobG93ZXIudG1wKGxlZnQpLCByaWdodC0+YXNJbnQz
MigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjppbmRleChsb3dlci50bXAobGVmdCksIGxv
d2VyLnRtcChyaWdodCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHRyeURpcmVjdChWYWx1ZSogYWRkcmVzcykKKyAgICAgICAgeworICAgICAg
ICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGFkZHJlc3MpOworICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxv
d2VyOworICAgICAgICBBcmcgc2VsZWN0ZWRBZGRyZXNzOworICAgIH07CisgICAgQWRkcmVzc1Nl
bGVjdG9yIGFkZHJlc3NTZWxlY3RvcjsKKworICAgIC8vIFRoaXMgd2lsbCBtYXRjaCBjb21wbGV4
IG11bHRpLXZhbHVlIGV4cHJlc3Npb25zLCBidXQgb25seSBpZiB0aGVyZSBpcyBubyBzaGFyaW5n
LiBGb3IgZXhhbXBsZSwKKyAgICAvLyBpdCB3b24ndCBtYXRjaCBhIExvYWQgdHdpY2UgYW5kIGNh
dXNlIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBkbyB0d28gbG9hZHMgd2hlbiB0aGUgb3JpZ2luYWwK
KyAgICAvLyBjb2RlIGp1c3QgZGlkIG9uZS4KKyAgICBjbGFzcyBMb3dlcmluZ1NlbGVjdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIExvd2VyaW5nU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIp
CisgICAgICAgICAgICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUKCFsb3dlci5sb2NrZWQuY29udGFpbnMocm9vdCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFjY2VwdFJvb3RMYXRl
KFZhbHVlKikgeyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgb25lIG9mIHRo
ZSBpbnRlcm5hbCB0aGluZ3MgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZCwgdGhlbiB3ZSBkb24n
dCB3YW50IHRvIGNhdXNlCisgICAgICAgICAgICAvLyBpdCB0byBiZSByZWNvbXB1dGVkIGFnYWlu
LgorICAgICAgICAgICAgaWYgKGxvd2VyLnZhbHVlVG9UbXBbdmFsdWVdKQorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgcmVxdWly
ZSBpbnRlcm5hbHMgdG8gaGF2ZSBvbmx5IG9uZSB1c2UgLSB1cy4KKyAgICAgICAgICAgIGlmICh1
c2VDb3VudHNbdmFsdWVdICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4u
Lik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJldHVybiB0
cnVlOyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZShWYWx1ZSogdmFsdWUsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd2VyLmxvY2tlZC5hZGQo
dmFsdWUpOworICAgICAgICAgICAgYWNjZXB0SW50ZXJuYWxzTGF0ZShhcmd1bWVudHMuLi4pOwor
ICAgICAgICB9CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZSgpIHsgfQorICAgICAg
ICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29s
IGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdE9w
ZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVy
YW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikg
eyB9CisKKyAgICAgICAgYm9vbCB0cnlMb2FkKFZhbHVlKiBhZGRyZXNzKQorICAgICAgICB7Cisg
ICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgYWRkcihhZGRyZXNzKSwgbG93ZXIudG1wKGxv
d2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQz
MjoKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmRCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+
KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVz
IQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmVBZGRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQsIFZhbHVlKikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvd2Vy
LnRyeUFwcGVuZFN0b3JlQmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
bW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVN0b3JlQW5kTG9hZChWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0LCBWYWx1ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobGVm
dC0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIHJl
dHVybiBsb3dlci50cnlBcHBlbmRTdG9yZUJpbk9wPEFuZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwg
cmlnaHQpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlTdG9yZShWYWx1ZSogdmFs
dWUsIFZhbHVlKikKKyAgICAgICAgeworICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUsIGxv
d2VyLnRtcCh2YWx1ZSksIGxvd2VyLmFkZHIobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5UmV0dXJuKFZh
bHVlKiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgp
KSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAg
ICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgaW1tT3JUbXAodmFsdWUpLCBHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIERvdWJsZToKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZURvdWJsZSwgbG93
ZXIudG1wKHZhbHVlKSwgR1BSSU5mbzo6cmV0dXJuVmFsdWVGUFIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGxvd2VyLmFwcGVuZChSZXQpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxvd2Vy
OworICAgIH07CisgICAgTG93ZXJpbmdTZWxlY3RvciBsb3dlcmluZ1NlbGVjdG9yOworICAgIAor
ICAgIFByb2NlZHVyZSYgcHJvY2VkdXJlOworICAgIENvZGUmIGNvZGU7Cit9OworCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJl
LCBDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jZWR1cmUsICJs
b3dlclRvQWlyIik7CisgICAgTG93ZXJUb0FpciBsb3dlclRvQWlyKHByb2NlZHVyZSwgY29kZSk7
CisgICAgbG93ZXJUb0Fpci5ydW4oKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNMb3dlclRvQWlyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0xvd2VyVG9B
aXJfaAorI2RlZmluZSBCM0xvd2VyVG9BaXJfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVzcGFj
ZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgbG93ZXJzIHRoZSBjdXJyZW50IEIzIHBy
b2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKwordm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYsIEFp
cjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBh
dHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisKKyMgVGhlc2Ug
cnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0aGUgdG9wLiBJ
dCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJldmVyIHBvc3Np
YmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hlciBpcyBhbiBl
eGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9IExvYWQoYWRk
cmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitTdG9yZUFkZExvYWQgPSBTdG9yZShB
ZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmVBbmRMb2FkID0gU3RvcmUoQWRkKGxlZnQs
IHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFsdWUsIGFkZHJlc3MpCisKK1JldHVy
biA9IFJldHVybih2YWx1ZSkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVt
b3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01l
bW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1
ZSgpCit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIm9mZnNldCA9
ICIsIG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTWVtb3J5VmFsdWVfaAor
I2RlZmluZSBCM01lbW9yeVZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBN
ZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExv
YWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkRmxvYXQ6Cisg
ICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3Rv
cmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0b3JlOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUoKTsKKworICAg
IGludHB0cl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZv
cm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMg
dGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5
cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBl
LCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAg
ICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAg
ICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IERv
dWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0g
Vm9pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJl
dHVybiB0eXBlIGlzIGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9w
Y29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnRwdHJfdCBvZmZz
ZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBMb2FkRmxv
YXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAg
ICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAg
IGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KKyAgICBN
ZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludHB0cl90
IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCB2YWx1ZSwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAg
ICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2Ogor
ICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgIGNhc2UgTm9wOgorICAgICAgICBvdXQucHJpbnQoIk5vcCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJZGVudGl0eToKKyAgICAgICAgb3V0LnByaW50KCJJZGVudGl0eSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdDMyOgorICAgICAgICBvdXQucHJpbnQo
IkNvbnN0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAgICAg
b3V0LnByaW50KCJDb25zdDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0RG91
YmxlOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0RG91YmxlIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFja1Nsb3QiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAgICAgIG91dC5wcmludCgi
QXJndW1lbnRSZWciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgor
ICAgICAgICBvdXQucHJpbnQoIkZyYW1lUG9pbnRlciIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBZGQ6CisgICAgICAgIG91dC5wcmludCgiQWRkIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFN1YjoKKyAgICAgICAgb3V0LnByaW50KCJTdWIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgTXVsOgorICAgICAgICBvdXQucHJpbnQoIk11bCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBEaXY6CisgICAgICAgIG91dC5wcmludCgiRGl2Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICBvdXQucHJpbnQoIkNoaWxsRGl2Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1vZDoKKyAgICAgICAgb3V0LnByaW50KCJNb2QiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0QW5kOgorICAgICAgICBvdXQucHJpbnQoIkJp
dEFuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgb3V0LnBy
aW50KCJCaXRPciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAg
IG91dC5wcmludCgiQml0WG9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNobDoKKyAg
ICAgICAgb3V0LnByaW50KCJTaGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1NocjoK
KyAgICAgICAgb3V0LnByaW50KCJTU2hyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpT
aHI6CisgICAgICAgIG91dC5wcmludCgiWlNociIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBTRXh0ODoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0OCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBTRXh0MTY6CisgICAgICAgIG91dC5wcmludCgiU0V4dDE2Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0MzIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgWkV4dDMyOgorICAgICAgICBvdXQucHJpbnQoIlpFeHQz
MiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGUm91bmQ6CisgICAgICAgIG91dC5wcmlu
dCgiRlJvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIG91
dC5wcmludCgiSVRvRCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEVG9JMzI6CisgICAg
ICAgIG91dC5wcmludCgiRFRvSTMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWFs
OgorICAgICAgICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE5vdEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgICAgICBvdXQucHJpbnQo
IkdyZWF0ZXJUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAg
ICAgICAgb3V0LnByaW50KCJMZXNzRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
R3JlYXRlckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJFcXVhbCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBYm92ZToKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxv
dyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICBvdXQu
cHJpbnQoIkFib3ZlRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3dFcXVh
bDoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvd0VxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIExvYWQ4WjoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkOFoiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4UyIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQx
NloiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgb3V0LnBy
aW50KCJMb2FkMTZTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGbG9hdDoKKyAg
ICAgICAgb3V0LnByaW50KCJMb2FkRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
TG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFN0b3JlODoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTgiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTE2Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiU3Rv
cmVGbG9hdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgb3V0
LnByaW50KCJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDQ2FsbDoKKyAgICAg
ICAgb3V0LnByaW50KCJDQ2FsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQYXRjaHBv
aW50OgorICAgICAgICBvdXQucHJpbnQoIlBhdGNocG9pbnQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tBZGQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tT
dWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIG91dC5w
cmludCgiQ2hlY2tNdWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2s6CisgICAg
ICAgIG91dC5wcmludCgiQ2hlY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVXBzaWxv
bjoKKyAgICAgICAgb3V0LnByaW50KCJVcHNpbG9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFBoaToKKyAgICAgICAgb3V0LnByaW50KCJQaGkiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgSnVtcDoKKyAgICAgICAgb3V0LnByaW50KCJKdW1wIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgb3V0LnByaW50KCJCcmFuY2giKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBvdXQucHJpbnQoIlN3aXRjaCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXR1cm46CisgICAgICAgIG91dC5wcmludCgiUmV0
dXJuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9vcHM6CisgICAgICAgIG91dC5wcmlu
dCgiT29wcyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIE9wY29kZSA6IGludDE2X3QgeworICAgIC8v
IEEgbm8tb3AgdGhhdCByZXR1cm5zIFZvaWQsIHVzZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0byBy
ZW1vdmUgYSB2YWx1ZS4KKyAgICBOb3AsCisgICAgIAorICAgIC8vIFBvbHltb3JwaGljIGlkZW50
aXR5LCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBJZGVudGl0eSwKKworICAgIC8v
IENvbnN0YW50cy4gVXNlIHRoZSBDb25zdFZhbHVlKiBjbGFzc2VzLiBDb25zdGFudHMgZXhpc3Qg
aW4gdGhlIGNvbnRyb2wgZmxvdywgc28gdGhhdCB3ZSBjYW4KKyAgICAvLyByZWFzb24gYWJvdXQg
d2hlcmUgd2Ugd291bGQgY29uc3RydWN0IHRoZW0uIExhcmdlIGNvbnN0YW50cyBhcmUgZXhwZW5z
aXZlIHRvIGNyZWF0ZS4KKyAgICBDb25zdDMyLAorICAgIENvbnN0NjQsCisgICAgQ29uc3REb3Vi
bGUsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBzbG90LiBUaGlzIGlzIHZpZXdlZCBhcyBl
eGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdhcmRsZXNzIG9mCisgICAgLy8g
d2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFj
a1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdlIG9mCisgICAgLy8gc3RhY2sgbWVtb3J5
LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgorICAgIFN0YWNrU2xvdCwKKworICAgIC8v
IFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRp
bmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUg
aW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQsIGFuZCB0aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0
byBlbnN1cmUgdGhhdCB3ZQorICAgIC8vIGRvbid0IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lz
dGVyIGFsbG9jYXRpb24gb3IgY2FsbHMgKGVpdGhlciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRv
IHRoZQorICAgIC8vIHN0YWNrIG9yIHByZXNlcnZpbmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdp
c3RlcikuIFVzZSB0aGUgQXJndW1lbnRSZWdWYWx1ZSBjbGFzcy4gVGhlIHJldHVybgorICAgIC8v
IHR5cGUgaXMgZWl0aGVyIHBvaW50ZXIoKSAoZm9yIEdQUnMpIG9yIERvdWJsZSAoZm9yIEZQUnMp
LgorICAgIEFyZ3VtZW50UmVnLAorCisgICAgLy8gVGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4g
cHV0IHRoaXMgYW55d2hlcmUgaW4gY29udHJvbCBmbG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVs
ZCB0aGUKKyAgICAvLyBmcmFtZSBwb2ludGVyLCB3aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29tcGls
ZXIgY2hhbmdlcyB0aGUgZnJhbWUgcG9pbnRlciB0ZW1wb3JhcmlseSBmb3Igc29tZQorICAgIC8v
IHNpbGx5IHJlYXNvbiwgdGhlIEZyYW1lUG9pbnRlciBpbnRyaW5zaWMgd2lsbCByZXR1cm4gd2hl
cmUgdGhlIGZyYW1lIHBvaW50ZXIgKnNob3VsZCogYmUgbm90CisgICAgLy8gd2hlcmUgaXQgaGFw
cGVucyB0byBiZSByaWdodCBub3cuCisgICAgRnJhbWVQb2ludGVyLAorCisgICAgLy8gUG9seW1v
cnBoaWMgbWF0aCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgQWRkLAorICAgIFN1
YiwKKyAgICBNdWwsCisgICAgRGl2LAorCisgICAgLy8gSW50ZWdlciBtYXRoLgorICAgIENoaWxs
RGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCisgICAg
TW9kLAorICAgIEJpdEFuZCwKKyAgICBCaXRPciwKKyAgICBCaXRYb3IsCisgICAgU2hsLAorICAg
IFNTaHIsCisgICAgWlNociwKKworICAgIC8vIENhc3RzIGFuZCBzdWNoLgorICAgIC8vIFRha2Vz
IGFuZCByZXR1cm5zIEludDMyOgorICAgIFNFeHQ4LAorICAgIFNFeHQxNiwKKyAgICAvLyBUYWtl
cyBJbnQzMiBhbmQgcmV0dXJucyBJbnQ2NDoKKyAgICBTRXh0MzIsCisgICAgWkV4dDMyLAorICAg
IC8vIFRha2VzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBGUm91bmQsCisgICAgLy8gVGFrZXMg
aW50cyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgSVRvRCwKKyAgICAvLyBUYWtlcyBEb3VibGUg
YW5kIHJldHVybnMgSW50MzI6CisgICAgRFRvSTMyLAorCisgICAgLy8gUG9seW1vcnBoaWMgY29t
cGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBSZXR1cm5zIGludDMyIDAgb3Ig
MS4gTm90ZSB0aGF0ICJOb3QiCisgICAgLy8gaXMganVzdCBFcXVhbCh4LCAwKS4KKyAgICBFcXVh
bCwKKyAgICBOb3RFcXVhbCwKKyAgICBMZXNzVGhhbiwKKyAgICBHcmVhdGVyVGhhbiwKKyAgICBM
ZXNzRXF1YWwsCisgICAgR3JlYXRlckVxdWFsLAorCisgICAgLy8gSW50ZWdlciBjb21wYXJpc29u
cy4gUmV0dXJucyBpbnQzMiAwIG9yIDEuCisgICAgQWJvdmUsCisgICAgQmVsb3csCisgICAgQWJv
dmVFcXVhbCwKKyAgICBCZWxvd0VxdWFsLAorCisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUg
aW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUgbG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1v
cnlWYWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4gSW50MzI6CisgICAgTG9hZDhaLAorICAgIExv
YWQ4UywKKyAgICBMb2FkMTZaLAorICAgIExvYWQxNlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERv
dWJsZToKKyAgICBMb2FkRmxvYXQsCisgICAgLy8gVGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJl
dHVybiB0eXBlIGlzOgorICAgIExvYWQsCisKKyAgICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUg
aW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3RvcmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUu
CisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3Rv
cmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQs
CisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFu
ZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFy
eSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24u
IE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRo
ZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50
LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFzcy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZp
bmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9ubHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdl
bmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5l
LgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNrbWFwIGFsb25nIHdpdGggY29uc3RyYWludHMg
b24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQn
cyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJl
Z2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVlc3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAg
YXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBw
YXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3RhY2suCisgICAgUGF0Y2hwb2ludCwKKworICAg
IC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hw
b2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJhdGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0
IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNvZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQg
Z2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8gZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hv
aWNlIG9mIHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3Rl
IHRoYXQgeW91CisgICAgLy8gYXJlIG5vdCBhbGxvd2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBt
YWlubGluZSBjb2RlIGZyb20geW91ciBzbG93IHBhdGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAg
IC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMg
cHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhhcHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwg
aWYgeW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQo
eCwgeSkKKyAgICAvLyBiID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQn
cyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4
LCB5KQorICAgIC8vIGIgPSBJZGVudGl0eShhKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxp
ZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFja3MgdXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4g
VGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAvLyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFu
c2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdl
IGtub3cgdGhhdAorICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhl
IHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAg
Ly8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25kIENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJy
ZWxldmFudC4KKyAgICBDaGVja0FkZCwKKyAgICBDaGVja1N1YiwKKyAgICBDaGVja011bCwKKwor
ICAgIC8vIENoZWNrIHRoYXQgc2lkZS1leGl0cy4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBM
aWtlIENoZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlzIGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0
aCBhIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoaXMgdGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhh
dCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisgICAgLy8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRo
ZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVlIHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0
b3IncyBzbG93CisgICAgLy8gcGF0aC4KKyAgICBDaGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0
LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAgICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhl
IFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQaGksCisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBD
b250cm9sVmFsdWUgY2xhc3MuCisgICAgSnVtcCwKKyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBi
cmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwg
dG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBDb250cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAt
aW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVlIHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisK
KyAgICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIgZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2Vz
IHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBTd2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5v
dGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0IGtub3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRo
aXMgY2FuIGp1c3QgcmV0dXJuIGFueQorICAgIC8vIHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1
ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisKKyAgICAvLyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBp
bmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFs
dWUgY2xhc3MuCisgICAgT29wcworfTsKKworaW5saW5lIGJvb2wgaXNDaGVja01hdGgoT3Bjb2Rl
IG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6Cisg
ICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3Ry
ZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpPcGNvZGUp
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM09wY29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2lu
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNPcmlnaW4uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNPcmlnaW5faAorI2RlZmluZSBCM09yaWdpbl9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2UgdG8gcHV0
IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFibGUgdG8K
Ky8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1Y3Rpb24g
Y29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25zIG11c3Qg
cHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUgYSB0cmFu
c2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFib3V0IHRo
ZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihjb25zdCB2
b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAg
fQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGNv
bnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3JpZ2luX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNQYXRjaHBvaW50U3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7
CisKK1BhdGNocG9pbnRTcGVjaWFsOjpQYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9CisKK1BhdGNo
cG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwoKQoreworfQorCit2b2lkIFBhdGNocG9p
bnRTcGVjaWFsOjpmb3JFYWNoQXJnKAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJk
YTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBpZiAoaW5zdC5vcmln
aW4tPnR5cGUoKSA9PSBWb2lkKSB7CisgICAgICAgIGZvckVhY2hBcmdJbXBsKDAsIDEsIGluc3Qs
IGNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxiYWNrKGluc3Qu
YXJnc1sxXSwgQXJnOjpEZWYsIGluc3Qub3JpZ2luLT5haXJUeXBlKCkpOworICAgIGZvckVhY2hB
cmdJbXBsKDAsIDIsIGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lh
bDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09
IFZvaWQpCisgICAgICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsKKworICAgIGlm
IChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChp
bnN0LmFyZ3NbMV0ua2luZCgpICE9IEFyZzo6VG1wKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNUeXBlKGluc3Qub3JpZ2luLT5haXJUeXBlKCkpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMiwgaW5zdCk7
Cit9CisKK2Jvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVu
c2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQp
CisgICAgICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwgMSwgaW5zdCwgYXJnSW5kZXgpOwor
CisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJl
dHVybiBhZG1pdHNTdGFja0ltcGwoMCwgMiwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhl
bHBlcnM6Okp1bXAgUGF0Y2hwb2ludFNwZWNpYWw6OmdlbmVyYXRlKAorICAgIEluc3QmIGluc3Qs
IENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBW
YWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1
ZS0+c3RhY2ttYXAoKTsKKyAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgVmVjdG9yPFZhbHVl
UmVwPiByZXBzOworICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7CisgICAgaWYgKGluc3Qub3JpZ2lu
LT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0
LmNvZGUsIGluc3QuYXJnc1tvZmZzZXQrK10pKTsKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0
LCBvZmZzZXQsIGluc3QsIHJlcHMpOworICAgIAorICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFy
YW1zIHBhcmFtczsKKyAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICBwYXJhbXMuc3RhY2tt
YXAgPSBzdGFja21hcDsKKyAgICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgcGFyYW1zLnVzZWRS
ZWdpc3RlcnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgc3RhY2ttYXAtPm1f
Z2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworCisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6
SnVtcCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3Bl
Y2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9p
bnRTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNo
cG9pbnRTcGVjaWFsX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzcGVjaWFsIHRoYXQgcmVjb2du
aXplcyB0aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQYXRjaHBvaW50OiBWb2lkIGFuZCBhbmQg
bm9uLVZvaWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0aGUgc3ludGF4IG9mIHRoZSBBaXIgUGF0
Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCBhcmdzLi4u
CisvLworLy8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUgbG93ZXJlZCBhcmd1bWVudHMgdG8gdGhl
IFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBub24tVm9pZCBjYXNlCisvLyB3ZSB3aWxs
IGhhdmU6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCByZXN1bHQsIGFyZ3MuLi4KKwor
Y2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1Ymxp
YzoKKyAgICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAgIHZpcnR1YWwgflBhdGNocG9pbnRTcGVj
aWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29u
c3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOwor
ICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0
YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8vIE5P
VEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5jaCBh
bmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhlIHN0
YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVy
YXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKSBv
dmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50
VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmlu
dGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFs
dWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVt
cE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFw
ID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Bh
dGNocG9pbnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2ludFZh
bHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9w
Y29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+UGF0
Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxp
c3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBlLCBv
cmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNocG9p
bnRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29w
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjND
b21tb24uaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1BoYXNlU2NvcGU6OlBoYXNl
U2NvcGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX3By
b2NlZHVyZShwcm9jZWR1cmUpCisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAoc2hvdWxk
RHVtcElSQXRFYWNoUGFoc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBiZWZvcmUgIiwgbmFt
ZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorCisgICAgaWYg
KHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9IHRvQ1N0
cmluZyhwcm9jZWR1cmUpOworfQorCitQaGFzZVNjb3BlOjp+UGhhc2VTY29wZSgpCit7CisgICAg
aWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShwcm9j
ZWR1cmUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzUGhhc2VTY29wZV9oCisjZGVmaW5lIEIzUGhhc2VTY29wZV9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJv
Y2VkdXJlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQ
aGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKFByb2NlZHVyZSYsIGNvbnN0IGNo
YXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0aW9uCisK
K3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBt
X25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BoYXNl
U2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
UHJvY2VkdXJlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUHJvY2VkdXJlOjpQcm9jZWR1
cmUoKQoreworfQorCitQcm9jZWR1cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2Nr
KiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrID0gc3RkOjptYWtlX3VuaXF1ZTxCYXNpY0Jsb2NrPiht
X2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxv
Y2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBv
dXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9j
ZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVz
dWx0OworICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChibG9j
aygwKSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICB3b3JrbGlzdC5wdXNo
KGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcigpCit7
CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgUG9zdE9yZGVyQmxvY2tXb3Jr
bGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2NrKDApKTsKKyAgICB3aGlsZSAo
QmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAo
aXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFByZU9yZGVyOgorICAgICAgICAgICAgd29ya2xp
c3QucHVzaFBvc3QoaXRlbS5ibG9jayk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBp
dGVtLmJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICAgICAgd29ya2xp
c3QucHVzaChpdGVtLmJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBQb3N0T3JkZXI6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0
ZW0uYmxvY2spOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvL0VO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1By
b2NlZHVyZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0JhZy5oPgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2Ns
YXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAg
ICBQcm9jZWR1cmUoKTsKKyAgICB+UHJvY2VkdXJlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRC
bG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQo
QXJndW1lbnRzLi4uKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAg
IEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tp
bmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAsIG1faW5kZXgo
ZmluZE5leHQoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Js
b2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1
cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCAr
IDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQor
CisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJlLT5zaXpl
KCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgaW5kZXgrKzsK
KyAgICAgICAgICAgIHJldHVybiBpbmV4OworICAgICAgICB9CisKKyAgICAgICAgUHJvY2VkdXJl
KiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAg
ICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgbnVtQmxvY2tz
KCkpOyB9CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoKTsKKyAg
ICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVyKCk7CisKKyAgICBjbGFzcyBW
YWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlc0NvbGxlY3Rpb24o
UHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVy
ZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBt
X3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihQcm9jZWR1cmUm
IHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVy
ZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5ibG9jayht
X2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAg
ICAgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcihtX3Byb2NlZHVyZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUo
KSk7IH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1
cmUubV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdOyB9CisgICAgICAgIFZh
bHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVy
ZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSB7IHJldHVybiBWYWx1
ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKyNkZWZp
bmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFyZ3VlbnRzLi4u
IGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2YWx1ZShuZXcg
VmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7CisgICAgVmFsdWVUeXBl
KiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoV1RGOjptb3ZlKHZh
bHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVJbmxp
bmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2lu
ZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Ns
b3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3Rh
Y2tTbG90S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgU3RhY2tT
bG90S2luZDo6TG9ja2VkOgorICAgICAgICBvdXQucHJpbnQoIkxvY2tlZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6CisgICAgICAgIG91dC5w
cmludCgiQW5vbnltb3VzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdEtpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RL
aW5kX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIGNsYXNzIFN0YWNrU2xvdEtp
bmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tlZCBzdGFjayBzbG90IG5lZWRzIHRvIGJlIGtl
cHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2FwZQor
ICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hlbiB0
aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNrCisgICAgLy8gc2xvdC4KKyAg
ICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBjb3VsZCBzaGFyZSBzcGFjZSB3
aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRlZCB0aGF0IHRoZXkgYXJlbid0IGxpdmUKKyAg
ICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29tcGlsZXIgc3RpbGwgaGFzIHRvIGRvIGVzY2Fw
ZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJlIGVzY2FwZWQKKyAgICAvLyBleHBsaWNpdGx5
IGluIElSLgorICAgIEFub255bW91cworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
K25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3RhY2tTbG90S2luZCk7CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tT
bG90S2luZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Ns
b3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja1Nsb3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N0YWNrU2xvdFZhbHVlOjp+U3Rh
Y2tTbG90VmFsdWUoKQoreworfQorCit2b2lkIFN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBtX2J5
dGVTaXplLCAiLCBraW5kID0gIiwgbV9raW5kKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCisjZGVmaW5lIEIzU3RhY2tTbG90VmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0
YWNrU2xvdEtpbmQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVz
cGFjZSBBaXIgeworY2xhc3MgU3RhY2tTbG90OworfSAvLyBuYW1lc3BhY2UgQWlyCisKK2NsYXNz
IFN0YWNrU2xvdFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9v
bCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTdGFja1Nsb3Q7IH0K
KworICAgIH5TdGFja1Nsb3RWYWx1ZSgpOworCisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CisKKyAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhlIGVu
ZCBvZiBjb21waWxhdGlvbi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3RzLiBV
c2UgdGhlCisgICAgLy8gc2V0IG1ldGhvZCB0byBkbyB0aGF0LgorICAgIGludHB0cl90IG9mZnNl
dEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAvLyBOb3Rl
IHRoYXQgdGhpcyBpcyBtZWFuaW5nbGVzcyB1bmxlc3MgdGhlIHN0YWNrIHNsb3QgaXMgTG9ja2Vk
LgorICAgIHZvaWQgc2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIEFpcjo6U3RhY2tTbG90OworICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisKKyAgICBTdGFja1Nsb3RWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgdW5z
aWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgU3RhY2tTbG90LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5
dGVTaXplKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQ
KDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgU3RhY2tT
bG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2ttYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgIntvcGFxdWUgPSAiLCBS
YXdQb2ludGVyKG1fb3BhcXVlKSwgIiwgcmVwcyA9ICIsIGxpc3REdW1wKG1fcmVwcyksCisgICAg
ICAgICIsIGdlbmVyYXRvciA9ICIsIFJhd1BvaW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBj
bG9iYmVyZWQgPSAiLCBtX2Nsb2JiZXJlZCwKKyAgICAgICAgIiwgdXNlZFJlZ2lzdGVycyA9ICIs
IG1fdXNlZFJlZ2lzdGVycywgIn0iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja21hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisj
ZGVmaW5lIEIzU3RhY2ttYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
VmFsdWVSZXAuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
clNldC5oIgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1NwZWNpYWw7CitjbGFzcyBTdGFja21hcFNwZWNp
YWw7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgU3RhY2ttYXAgeworcHVibGljOgorICAgIHN0cnVj
dCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgVmFsdWUgY29udGFp
bmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZhbHVlKiB2YWx1ZTsKKworICAgICAgICAvLyBU
aGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAgU3RhY2ttYXAqIHN0YWNrbWFwOworCisgICAg
ICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBhY3R1YWwgdmFsdWUgcmVwcmVzZW50YXRpb25zIHRo
YXQgd2VyZSBjaG9zZW4uCisgICAgICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKKworICAgICAg
ICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgcmVnaXN0ZXJzIHRoYXQgd2VyZSB1c2VkLgorICAgICAg
ICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOworICAgIH07CisgICAgCisgICAgdHlwZWRlZiB2
b2lkIEdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYsIGNvbnN0IEdlbmVyYXRpb25QYXJh
bXMmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+IEdlbmVyYXRv
cjsKKyAgICAKKyAgICBTdGFja21hcCgpCisgICAgeworICAgIH0KKworICAgIC8vIFNldCBzb21l
IG9wYXF1ZSBkYXRhIHRvIGlkZW50aWZ5IHRoaXMgc3RhY2ttYXAuIFRoaXMgaXMgdXNlZnVsIGJl
Y2F1c2UgYSBTdGFja21hcC11c2luZyBWYWx1ZQorICAgIC8vIGNhbiBiZSBkdXBsaWNhdGVkLCBh
bmQgZWFjaCBkdXBsaWNhdGUgbWF5IGVuZCB1cCBoYXZpbmcgZGlmZmVyZW50IHJlZ2lzdGVyIGFs
bG9jYXRpb24uIFRoaXMKKyAgICAvLyBhbGxvd3MgYWxsIG9mIHRob3NlIGR1cGxpY2F0ZXMgdG8g
YmUgYWJsZSB0byByZWZlciBiYWNrIHRvIHdoYXRldmVyIGhpZ2gtbGV2ZWwgZGF0YSBzdHJ1Y3R1
cmVzCisgICAgLy8gd2Ugd2VyZSB1c2luZyB0byBjcmVhdGUgdGhlIHZhbHVlLgorICAgIHZvaWQg
c2V0T3BhcXVlKHZvaWQqIHBhcmFtZXRlcikKKyAgICB7CisgICAgICAgIG1fb3BhcXVlID0gcGFy
YW1ldGVyOworICAgIH0KKyAgICB2b2lkKiBvcGFxdWUoKSBjb25zdCB7IHJldHVybiBtX29wYXF1
ZTsgfQorCisgICAgLy8gQ29udmVuaWVuY2UgaGVscGVycyB3aGVuIHVzaW5nIGluZGljZXMgaW5z
dGVhZCBvZiBwb2ludGVycy4KKyAgICB2b2lkIHNldE9wYXF1ZUluZGV4KHNpemVfdCBpbmRleCkK
KyAgICB7CisgICAgICAgIHNldE9wYXF1ZShiaXR3aXNlX2Nhc3Q8dm9pZCo+KGluZGV4KSk7Cisg
ICAgfQorICAgIHNpemVfdCBvcGFxdWVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxzaXplX3Q+KG9wYXF1ZSgpKTsgfQorCisgICAgLy8gQ29uc3RyYWluIGFuIGFyZ3VtZW50IHRv
IHRoZSBWYWx1ZSB0aGF0IHVzZXMgdGhpcyBTdGFja21hcC4gSW4gY2FzZSBvZiBhIFBhdGNocG9p
bnQgdGhhdAorICAgIC8vIHJldHVybnMgYSB2YWx1ZSwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRo
ZSByZXN1bHQgdmFsdWUuIEluIGFsbCBvdGhlciBjYXNlcywgaW5kZXggemVybyByZWZlcnMKKyAg
ICAvLyB0byB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhhdCBWYWx1ZSwgZXZlbiBpZiB0aGF0IGFy
Z3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3IgZXhhbXBsZSwKKyAgICAvLyBpbiBhIENo
ZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kaWNlcyAw
IGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdAorICAgIC8vIHdvdWxkIGJlIGFuIGVycm9yIHRv
IGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhlIGdlbmVyYXRpb24gY2FsbGJhY2sgaXMg
Y2FsbGVkLCB5b3UgY2FuCisgICAgLy8gZGVwZW5kIG9uIHRoZSByZXBzIGZvciB0aG9zZSBpbmRp
Y2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNvbnN0cmFpbih1bnNpZ25lZCBpbmRleCwg
Y29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCArIDEgPCBtX3Jl
cHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBzLmdyb3coaW5kZXggKyAxKTsKKyAgICAgICAg
bV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisKKyAgICB2b2lkIGNsb2JiZXIoY29uc3QgUmVn
aXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1fY2xvYmJlcmVkLm1lcmdlKHNldCk7Cisg
ICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJu
IG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lkIHNldEdlbmVyYXRvcihSZWZQdHI8R2VuZXJhdG9y
PiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGdlbmVyYXRvcjsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0R2VuZXJh
dG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9
IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFsOworICAgIGZyaWVuZCBjbGFzcyBQYXRjaHBvaW50U3Bl
Y2lhbDsKKyAgICBmcmllbmQgY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworICAgIAorICAgIHZvaWQq
IG1fb3BhcXVlIHsgbnVsbHB0ciB9OworICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBzOworICAg
IFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIFJlZ2lzdGVyU2V0IG1fY2xvYmJl
cmVkOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsgLy8gU3RhY2ttYXBzIGNvdWxk
IGJlIGZ1cnRoZXIgZHVwbGljYXRlZCBieSBBaXIsIGJ1dCB0aGF0J3MgdW5saWtlbHksIHNvIHdl
IGp1c3QgbWVyZ2UgdGhlIHVzZWQgcmVnaXN0ZXJzIHNldHMgaWYgdGhhdCB3ZXJlIHRvIGhhcHBl
bi4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lh
bC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBT
cGVjaWFsKGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBTcGVjaWFsKG5hbWUpCit7Cit9CisKK1N0
YWNrbWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgU3RhY2ttYXBT
cGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmIGluc3QsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAg
IFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgLy8gRklYTUU6
IElmIHRoZSBJbnN0IHRoYXQgdXNlcyB0aGUgU3RhY2ttYXBTcGVjaWFsIGdldHMgZHVwbGljYXRl
ZCwgdGhlbiB3ZSBlbmQgdXAgbWVyZ2luZyB1c2VkCisgICAgLy8gcmVnaXN0ZXIgc2V0cyBmcm9t
IG11bHRpcGxlIHBsYWNlcy4gVGhpcyBjdXJyZW50bHkgd29uJ3QgaGFwcGVuIHNpbmNlIEFpciBk
b2Vzbid0IGhhdmUgdGFpbGR1cAorICAgIC8vIG9yIHRoaW5ncyBsaWtlIHRoYXQuIEJ1dCBtYXli
ZSBldmVudHVhbGx5IGl0IGNvdWxkIGJlIGEgcHJvYmxlbS4KKyAgICBzdGFja21hcC0+bV91c2Vk
UmVnaXN0ZXJzLm1lcmdlKHVzZWRSZWdpc3RlcnMpOworfQorCitjb25zdCBSZWdpc3RlclNldCYg
U3RhY2ttYXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBW
YWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1
ZS0+c3RhY2ttYXAoKTsKKworICAgIHJldHVybiBzdGFja21hcC0+Y2xvYmJlcmVkKCk7Cit9CisK
K3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgKKyAgICB1bnNpZ25lZCBudW1J
Z25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0
LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7
CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGlu
c2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXpl
KCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4uc2l6
ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0g
bnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuLnNpemUoKSAtIG51bUlnbm9yZWRC
M0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6
ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5h
cmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUt
PmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7CisKKyAgICAgICAgY2FsbGJhY2soYXJnLCBB
cmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICB9Cit9CisK
K2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25v
cmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJnQXJncywKKyAgICBJbnN0JiBpbnN0KQor
eworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBp
bnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6
ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuLnNp
emUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZh
bHVlLT5zdGFja21hcCgpOworCisgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgIC8vIEZvciB0
aGUgSW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMgdG8gaGF2ZSB0aGUgcmlnaHQgbnVtYmVyIG9m
IGFyZ3VtZW50cy4KKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdz
ICE9IHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdhcmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21h
cHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVtZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IK
KyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3QgaGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4g
VGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRpb25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8gYXJn
dW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXpl
KCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFs
dWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0
LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAo
YXJnLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6
SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFjazoK
KyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICBicmVhazsgLy8gT0sKKyAg
ICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAo
R1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpICYmCisgICAgICAgICAgICAgICAgYXJnLmJhc2Uo
KSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisK
KyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJlIG5v
IGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChzdGFj
a21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpKTsKKworICAgIC8v
IFZlcmlmeSBhbnkgZXhwbGljaXRseSBzdXBwbGllZCBjb25zdHJhaW50cy4KKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBudW1JZ25vcmVkQjNBcmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXplKCk7
ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSk7CisgICAgICAg
IFZhbHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFyZyA9
IGluc3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsKKwor
ICAgICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55
OgorICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAg
ICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAg
ICAgICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3Rh
Y2s6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0
aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlm
IChhcmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVS
ZXA6OkNvbnN0YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCBy
ZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBudW1J
Z25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0
LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsK
KyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVuc2ln
bmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsgbnVt
SWdub3JlZEIzQXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5t
X3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8g
Y29uc3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFdl
IG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBp
bnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8g
YSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0lu
ZGV4XS5raW5kKCkgPT0gQW55KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBm
YWxzZTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKAorICAgIEdl
bmVyYXRpb25Db250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgSW5zdCYg
aW5zdCwgVmVjdG9yPFZhbHVlUmVwPiYgcmVzdWx0KQoreworICAgIGZvciAodW5zaWduZWQgaSA9
IG51bUlnbm9yZWRBcmdzOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1
bHQuYXBwZW5kKHJlcEZvckFyZyhjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkpOworfQorCitW
YWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBjb25zdCBBcmcm
IGFyZykKK3sKKyAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICBjYXNlIFRtcDoKKyAgICAg
ICAgcmV0dXJuIFZhbHVlUmVwOjpyZWcoYXJnLnJlZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBJbW06CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25z
dGFudChhcmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQWRkcjoKKyAgICAg
ICAgaWYgKGFyZy5iYXNlKCkgPT0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgICAg
ICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSk7CisgICAgICAgIEFTU0VS
VChhcmcuYmFzZSgpID09IE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cisg
ICAgICAgIHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNp
emUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIHJldHVybiBWYWx1ZVJlcCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNTdGFja21hcFNwZWNpYWxfaAorI2RlZmluZSBCM1N0YWNrbWFwU3BlY2lhbF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1
ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25h
bWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZv
ciBzcGVjaWFscyB0aGF0IGhhdmUgc3RhY2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhl
IFN0YWNrbWFwIGJ5CisvLyBhc2tpbmcgZm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhl
c2Ugb2JqZWN0cyBkb24ndCBuZWVkIHRvIGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8v
IFN0YWNrbWFwLgorCitjbGFzcyBTdGFja21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFs
IHsKK3B1YmxpYzoKKyAgICBTdGFja21hcFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21h
cFNwZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhB
aXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAv
LyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBs
KCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gc3ViY2xhc3NlcyB0
aGF0IGltcGxlbWVudCB0aGF0LgorCisgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKKyAgICAgICAg
dW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisg
ICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mKTsKKyAgICBib29sIGlzVmFsaWRJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1J
Z25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJ
bnN0Jik7CisgICAgYm9vbCBhZG1pdHNTdGFja0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUln
bm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Oklu
c3QmLCB1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBBcHBlbmRzIHRoZSByZXBzIGZvciB0
aGUgSW5zdCdzIGFyZ3MsIHN0YXJ0aW5nIHdpdGggbnVtSWdub3JlZEFyZ3MsIHRvIHRoZSBnaXZl
biB2ZWN0b3IuCisgICAgdm9pZCBhcHBlbmRSZXBzSW1wbChBaXI6OkdlbmVyYXRpb25Db250ZXh0
JiwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxWYWx1ZVJlcD4m
KTsKKworICAgIHN0YXRpYyBWYWx1ZVJlcCByZXBGb3JBcmcoQWlyOjpDb2RlJiwgY29uc3QgQWly
OjpBcmcmKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3VjY2Vzc29yQ29sbGVjdGlv
bl9oCisjZGVmaW5lIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIGdlbmVy
aWMgd3JhcHBlciBhcm91bmQgbGlzdHMgb2YgZnJlcXVlbnRlZCBibG9ja3MsIHdoaWNoIGdpdmVz
IHlvdSBqdXN0IHRoZSBibG9ja3MuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2ssIHR5
cGVuYW1lIFN1Y2Nlc3Nvckxpc3Q+CitjbGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsKK3B1Ymxp
YzoKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisgICAgICAg
IDogbV9saXN0KGxpc3QpCisgICAgeworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9j
ayomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9Cisg
ICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0
KGluZGV4KTsgfQorICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyBy
ZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgor
ICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQor
ICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yKGNvbnN0IFN1Y2Nlc3NvckNvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBp
bmRleCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKGNvbnN0X2Nhc3Q8U3VjY2Vzc29yQ29s
bGVjdGlvbio+KCZjb2xsZWN0aW9uKSkgLy8gY29uc3QgaXMgc3R1cGlkIGFueXdheS4KKyAgICAg
ICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
QmFzaWNCbG9jayomIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRl
cmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4Kys7Cisg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBw
cml2YXRlOgorICAgICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAg
ICAgIHNpemVfdCBtX2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKK3ByaXZhdGU6CisgICAgU3VjY2Vzc29yTGlzdCYg
bV9saXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3dpdGNoQ2FzZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2Nhc2VWYWx1ZSwgIi0+Iiwg
cG9pbnRlckR1bXAobV90YXJnZXQpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaENhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hDYXNl
X2gKKyNkZWZpbmUgQjNTd2l0Y2hDYXNlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRjaENhc2UoKQor
ICAgIHsKKyAgICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVlLCBjb25zdCBG
cmVxdWVudGVkQmxvY2smIHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VWYWx1ZShjYXNlVmFsdWUp
CisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3RhcmdldDsgfQorCisgICAgaW50
NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1ZTsgfQorICAgIEZyZXF1
ZW50ZWRCbG9jayB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorICAgIEJhc2lj
QmxvY2sqIHRhcmdldEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuYmxvY2soKTsgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGludDY0X3QgbV9jYXNlVmFsdWU7CisgICAgRnJlcXVlbnRlZEJsb2NrIG1fdGFyZ2V0OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1w
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hWYWx1ZTo6flN3
aXRjaFZhbHVlKCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSh1
bnNpZ25lZCBpbmRleCkKK3sKKyAgICBGcmVxdWVudGVkQmxvY2sgcmVzdWx0QmxvY2sgPSBtX3N1
Y2Nlc3NvcnNbaW5kZXhdOworICAgIGludDY0X3QgcmVzdWx0VmFsdWUgPSBtX3ZhbHVlc1tpbmRl
eF07CisgICAgbV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0KCk7CisgICAg
bV9zdWNjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICBtX3ZhbHVlc1tpbmRleF0gPSBtX3ZhbHVl
cy5sYXN0KCk7CisgICAgbV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiBTd2l0Y2hD
YXNlKHJlc3VsdFZhbHVlLCByZXN1bHRCbG9jayk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFw
cGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3Nv
cnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nl
c3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOworICAgIG1fdmFsdWVzLmFw
cGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVt
cE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRlc3RydWN0aXZl
bHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisgICAgb3V0LnByaW50KGxp
c3REdW1wKCp0aGlzKSwgIiwgZmFsbFRocm91Z2ggPSAiLCBmYWxsVGhyb3VnaCgpKTsKK30KKwor
U3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBj
b25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGlu
ZGV4LCBTd2l0Y2gsIFZvaWQsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZh
bGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAorI2Rl
ZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJv
bFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUp
IHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisg
ICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWdu
ZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisg
ICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGlu
ZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGNh
c2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgRnJlcXVlbnRlZEJs
b2NrIGZhbGxUaHJvdWdoKCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQor
ICAgIEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNjZXNzb3JzKCku
bGFzdCgpOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtQ2FzZVZh
bHVlcygpOyB9CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nlc3Nvcihp
bmRleCkpOworICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNs
YXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAg
ICAgIDogbV9zd2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTd2l0Y2hWYWx1ZSYgc3dp
dGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dpdGNo
VmFsdWUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0
ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOwor
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3dpdGNoVmFsdWUqIG1fc3dpdGNoOworICAgICAgICB1
bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAgICB0eXBlZGVmIGl0ZXJhdG9yIGNvbnN0X2l0
ZXJhdG9yOworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgc2l6ZSgpKTsgfQorCisgICAgLy8gVGhpcyByZW1vdmVzIHRoZSBjYXNlIGFuZCByZW9y
ZGVycyB0aGluZ3MgYSBiaXQuIElmIHlvdSdyZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZyb20gMCB0
byBOLAorICAgIC8vIHRoZW4geW91IGNhbiBrZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlzIHNvIGxv
bmcgYXMgeW91IHJldmlzaXQgdGhpcyBzYW1lIGluZGV4ICh3aGljaCB3aWxsIG5vdworICAgIC8v
IGNvbnRhaW4gc29tZSBvdGhlciBjYXNlIHZhbHVlKS4gVGhpcyByZW1vdmVzIHRoZSBjYXNlIHRo
YXQgd2FzIHJlbW92ZWQuCisgICAgU3dpdGNoQ2FzZSByZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4
KTsKKworICAgIHZvaWQgYXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKTsK
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3dp
dGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRC
bG9jayYgZmFsbFRocm91Z2gpOworCisgICAgVmVjdG9yPGludDY0X3Q+IG1fdmFsdWVzOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlw
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNUeXBlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsK
Kwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9p
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50
KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0
LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAg
ICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgeworICAgIFZvaWQsCisgICAg
SW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxpbmUgYm9vbCBpc0ludChU
eXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9PSBJbnQ2NDsK
K30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUg
PT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyKCkKK3sKKyAgICBpZiAoc2l6ZW9m
KHZvaWQqKSA9PSA0KQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0Owor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIz
OjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1ZTo6
flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiXiIsIG1fcGhpLT5pbmRleCgp
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBC
M1Vwc2lsb25WYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVXBzaWxvblZh
bHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9w
Y29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9CisKKyAgICB+VXBzaWxv
blZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkgY29uc3QgeyByZXR1cm4gbV9waGk7IH0KKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIFVw
c2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBW
YWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwgdmFs
dWUpCisgICAgICAgICwgbV9waGkocGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT50
eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0KKworICAgIFZhbHVlKiBtX3BoaTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVXNlQ291bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVc2VDb3VudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVXNlQ291bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitVc2VDb3VudHM6OlVzZUNvdW50cyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICA6IG1f
Y291bnRzKHByb2NlZHVyZS52YWx1ZXMoKS5zaXplKCkpCit7CisgICAgZm9yIChWYWx1ZSogdmFs
dWUgOiBwcm9jZWR1cmUudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2
YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgIG1fY291bnRzW2NoaWxkXSsrOworICAgIH0K
K30KKworVXNlQ291bnRzOjp+VXNlQ291bnRzKCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXNlQ291bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVc2VD
b3VudHNfaAorI2RlZmluZSBCM1VzZUNvdW50c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgVXNlQ291
bnRzIHsKK3B1YmxpYzoKKyAgICBVc2VDb3VudHMoUHJvY2VkdXJlJik7CisgICAgflVzZUNvdW50
cygpOworCisgICAgdW5zaWduZWQgb3BlcmF0b3JbXShWYWx1ZSogdmFsdWUpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9jb3VudHNbdmFsdWVdOworICAgIH0KK3ByaXZhdGU6CisgICAg
SW5kZXhNYXA8VmFsdWUsIHVuc2lnbmVkPiBtX2NvdW50czsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVXNl
Q291bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNW
YWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgeworCitj
bGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAg
OiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgbV93aGVuKHdoZW4pCisgICAgICAg
ICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBWQUxJ
REFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWlsKF9f
RklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3Ry
aW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2b2lkIHJ1bigpCisg
ICAgeworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7CisgICAgICAgIEhhc2hT
ZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5C
bG9jazsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUpIHsK
KyAgICAgICAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICAgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiAqYmxvY2spCisgICAgICAgICAgICAgICAgdmFsdWVJbkJsb2NrLmFkZCh2YWx1ZSk7
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJlLnZh
bHVlcygpKQorICAgICAgICAgICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsKKworICAgICAgICBm
b3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAgVkFMSURBVEUodmFs
dWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCisgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisKKyAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSog
Y2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZUluUHJvYy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4iLCBwb2ludGVyRHVt
cChjaGlsZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiBibG9ja3MpIHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxv
Y2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAg
ICAgICAgICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9j
aywgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogRXhwYW5kIHRoaXMgdmFsaWRhdGlvbiBw
aGFzZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDQ4MAorICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0
IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNv
bnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAg
ICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3Ry
aW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJCMyBWQUxJREFUSU9O
IEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAi
ICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4pCisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7Cisg
ICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQor
CisgICAgICAgIG91dC5wcmludChmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBC
ZWZvcmUpIHsKKyAgICAgICAgICAgIG91dC5wcmludCgiQmVmb3JlICIsIHdoZW4sICI6XG4iKTsK
KyAgICAgICAgICAgIG91dC5wcmludChtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAg
IG91dC5wcmludCgiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIG91dC5wcmludCht
X3Byb2NlZHVyZSk7CisKKyAgICAgICAgb3V0LnByaW50KGZhaWx1cmVNZXNzYWdlKTsKKyAgICAg
ICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVuY3Rp
b24sIGNvbmRpdGlvbik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIFByb2Nl
ZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVmb3JlOworfTsKKwor
fSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAg
VmFsaWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUsIHdoZW4sIGR1bXBCZWZvcmUpOworICAgIHZh
bGlkYXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWxpZGF0ZV9oCisjZGVmaW5lIEIzVmFs
aWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUmLCBj
b25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxw
dHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM1ZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4OSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhbHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVl
OjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEg
Yml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZh
bHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUu
IFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdl
IGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3
ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWduZWQg
aW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3Jp
Z2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAg
ICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKyAgICB2b2lkKiBtaXNj
ID0gdGhpcy0+bWlzYzsKKworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUo
KSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIChpbmRl
eCwgSWRlbnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOworCisgICAgdGhpcy0+b3duZXIgPSBv
d25lcjsKKyAgICB0aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworICAgIHRoaXMtPm1p
c2MgPSBtaXNjOworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aE5vcCgpCit7CisgICAgdW5z
aWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIE9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAg
ICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworICAgIFZhbHVlKiByZXBsYWNlbWVu
dCA9IHRoaXMtPnJlcGxhY2VtZW50OworICAgIHZvaWQqIG1pc2MgPSB0aGlzLT5taXNjOworCisg
ICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSAoaW5kZXgsIE5vcCwg
Vm9pZCwgb3JpZ2luKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVw
bGFjZW1lbnQgPSByZXBsYWNlbWVudDsKKyAgICB0aGlzLT5taXNjID0gbWlzYzsKK30KKwordm9p
ZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChk
dW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0g
IiwgbV9vcGNvZGUpOworCisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNv
bW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0g
c3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcg
PSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOworCisgICAgb3V0LnByaW50KCIpIik7Cit9CisK
K2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K2ludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQo
KSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIFZhbHVlOjpk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3Io
T3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAg
IGNhc2UgTXVsOgorICAgIGNhc2UgRGl2OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBN
b2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoK
KyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2Ug
Q2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAg
ICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAg
ICAgICByZXR1cm4gcG9pbnRlcigpOworICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6
CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgor
ICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NF
cXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2Ug
QmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAg
ICAgcmV0dXJuIEludDMyOworICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAg
ICAgICByZXR1cm4gSW50NjQ7CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAg
ICAgICByZXR1cm4gRG91YmxlOworICAgIGNhc2UgTm9wOgorICAgICAgICByZXR1cm4gVm9pZDsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgorI2luY2x1
ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBTdGFja21hcDsKKwor
Y2xhc3MgVmFsdWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSos
IDM+IEFkamFjZW5jeUxpc3Q7CisKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGR1
bXBQcmVmaXggPSAiQCI7CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUg
b3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRl
bnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisK
KyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAg
ICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4
XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9j
aGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcg
dGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKwor
ICAgIC8vIFRoaXMgaXMgdXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5vdGUgdGhhdCB0aGlzIGlzIG9u
bHkgdmFsaWQgZm9yIG5vbi12b2lkIHZhbHVlcy4KKyAgICBBaXI6OkFyZzo6VHlwZSBhaXJUeXBl
KCkgY29uc3QgeyByZXR1cm4gQWlyOjpBcmc6OnR5cGVGb3JCM1R5cGUodHlwZSgpKTsgfQorCisg
ICAgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAg
IGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJl
bjsgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCBy
ZXBsYWNlV2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBo
b3cgeW91IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRo
aW5nIHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91
IGNhbiBkbzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJl
ZyA9IHZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncwor
ICAgIC8vIH0KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9w
Y29kZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51
bGxwdHIKKyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigp
IGNvbnN0OworICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFz
SW50NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wg
aGFzSW50KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJ
bnQoaW50NjRfdCB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0Owor
ICAgIGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworcHJv
dGVjdGVkOgorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIC8v
IFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgo
aW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBl
KQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJz
dENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlz
IGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBu
byBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgp
CisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAg
ICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBp
cyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9w
Y29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAg
ICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAg
ICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQorICAgICAgICAsIG1fb3Jp
Z2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMu
Li4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVz
IHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhh
dCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKKyAgICBleHBsaWNpdCBWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBt
X2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5
cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikK
KyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCisgICAgZXhw
bGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9p
bmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBl
KHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW4o
Y2hpbGRyZW4pCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVHlwZSB0eXBl
Rm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91cCBvZiBm
aWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisgICAgT3Jp
Z2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVibGljOgor
ICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCisg
ICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFseXNlcyBh
bmQgdHJhbnNmb3JtYXRpb25zLgorfTsKKworY2xhc3MgRGVlcFZhbHVlRHVtcCB7CitwdWJsaWM6
CisgICAgRGVlcFZhbHVlRHVtcChjb25zdCBWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV92YWx1
ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWUt
PmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51
bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFZhbHVlKiBtX3ZhbHVlOworfTsK
KworaW5saW5lIERlZXBWYWx1ZUR1bXAgZGVlcER1bXAoY29uc3QgVmFsdWUqIHZhbHVlKQorewor
ICAgIHJldHVybiBEZWVwVmFsdWVEdW1wKHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIz
VmFsdWVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NoZWNr
VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2
NFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQ
YXRjaHBvaW50VmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCogVmFsdWU6OmFzKCkK
K3sKKyAgICBpZiAoVDo6YWNjZXB0cyhvcGNvZGUoKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUKj4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Citjb25zdCBUKiBWYWx1ZTo6YXMoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9j
YXN0PFZhbHVlKj4odGhpcyktPmFzPFQ+KCk7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDMyVmFsdWU+KCk7Cit9CisKK2ludDMyX3Qg
VmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdDMyVmFsdWU+KCkt
PnZhbHVlKCk7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gISFhczxDb25zdDY0VmFsdWU+KCk7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBj
b25zdAoreworICAgIHJldHVybiBhczxDb25zdDY0VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2Jv
b2wgVmFsdWU6Omhhc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgfHwgaGFz
SW50NjQoKTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQoKSBjb25zdAoreworICAgIHJldHVy
biBoYXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNJbnQ2NCgpOworfQorCitib29sIFZhbHVlOjpp
c0ludChpbnQ2NF90IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQoKSAmJiBhc0lu
dCgpID09IHZhbHVlOworfQorCitib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAg
IHJldHVybiAhIWFzPENvbnN0RG91YmxlVmFsdWU+KCk7Cit9CisKK2RvdWJsZSBWYWx1ZTo6YXNE
b3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdERvdWJsZVZhbHVlPigpLT52YWx1
ZSgpOworfQorCitTdGFja21hcCogVmFsdWU6OnN0YWNrbWFwKCkKK3sKKyAgICBpZiAoQ2hlY2tW
YWx1ZSogY2hlY2sgPSBhczxDaGVja1ZhbHVlPigpKQorICAgICAgICByZXR1cm4gJmNoZWNrLT5z
dGFja21hcDsKKyAgICBpZiAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYXM8UGF0Y2hw
b2ludFZhbHVlPigpKQorICAgICAgICByZXR1cm4gJnBhdGNocG9pbnQtPnN0YWNrbWFwOworICAg
IHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlSW5saW5lc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQg
VmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
bV9raW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQW55OgorICAgIGNhc2Ug
U29tZVJlZ2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAg
ICAgb3V0LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50
KCIoIiwgb2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENv
bnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1
ZVJlcDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVS
ZXA6OkFueToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVn
aXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgor
ICAgICAgICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnBy
aW50KCJTdGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVw
OjpDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1ZhbHVlUmVwX2gKKyNkZWZpbmUgQjNWYWx1ZVJlcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0byBkZXNj
cmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQgYm90aCB0
byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNlbnRhdGlv
bi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBzYXkKKy8v
IHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQgcmVwcmVz
ZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQuCisKK2Ns
YXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAvLyBBcyBh
biBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFueSBy
ZXByZXNlbnRhdGlvbi4gQXMgYW4KKyAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0
aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2UgZm9yIHRo
ZQorICAgICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBhIENoZWNrTXVs
LgorICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24s
IHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBi
ZSBhCisgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKKyAg
ICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0
aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAorICAg
ICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBp
Y2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJl
c2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mg
bm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgIFN0
YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNl
cyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAgICAg
ICAgLy8gb2Zmc2V0LgorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFzIGFu
IG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50LWZv
bGRlZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBWYWx1
ZVJlcCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGlj
aXQgVmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAgICAg
ICwgbV92YWx1ZShyZWcuaW5kZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVl
UmVwIHJlZyhSZWcgcmVnKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7Cisg
ICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21GUCkK
KyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IFN0YWNrOworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVu
dChpbnRwdHJfdCBvZmZzZXRGcm9tU1ApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFja0FyZ3VtZW50OworICAgICAgICByZXN1bHQu
bV92YWx1ZSA9IG9mZnNldEZyb21TUDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50Owor
ICAgICAgICByZXN1bHQubV92YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXA6OmNvbnN0YW50KGJpdHdpc2VfY2FzdDxp
bnQ2NF90Pih2YWx1ZSkpOworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJu
IGtpbmQoKSAhPSBBbnk7IH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBSZWc6OmZyb21JbmRl
eChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnRwdHJfdD4obV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zm
c2V0RnJvbVNQKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2tB
cmd1bWVudCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV92YWx1ZSk7
CisgICAgfQorCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IENvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQor
CisgICAgZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8ZG91YmxlPih2YWx1ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBLaW5kIG1fa2luZDsKKyAgICBpbnQ2
NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNl
IFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlZhbHVl
UmVwOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZVJlcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MDUgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkK
KworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5h
bWUiCisKKyR2YXJJbmRleCA9IDAKK2RlZiBuZXdWYXIKKyAgICAkdmFySW5kZXggKz0gMQorICAg
ICJfdG1wI3skdmFySW5kZXh9IgorZW5kCisKK2NsYXNzIFByb2R1Y3Rpb24KKyAgICBhdHRyX3Jl
YWRlciA6b3JpZ2luLCA6bmFtZSwgOnZhck5hbWUsIDphbm9ueW1vdXMsIDpvcGNvZGUsIDpjaGls
ZHJlbgorCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBuYW1lLCBvcGNvZGUsIGNoaWxkcmVu
KQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAg
ICBAYW5vbnltb3VzID0gKG5hbWUgPT0gbmlsIG9yIG5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLykK
KyAgICAgICAgQHZhck5hbWUgPSBAYW5vbnltb3VzID8gbmV3VmFyIDogbmFtZSA9fiAvXEFcJC8g
PyAkJyA6IG5hbWUKKyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4g
PSBjaGlsZHJlbiA/IGNoaWxkcmVuIDogW10KKyAgICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUK
KyAgICAgICAgb3Bjb2RlICE9IG5pbAorICAgIGVuZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgm
cHJvYykKKyAgICAgICAgY2hpbGRyZW4uZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwg
Y2hpbGQsIGluZGV4IHwKKyAgICAgICAgICAgIHlpZWxkIHZhck5hbWUsCisgICAgICAgICAgICAg
ICAgICBjaGlsZC5uYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAg
ICAgICAgICAgICAgIGNoaWxkLmFub255bW91cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVy
bmFsIDogOmFub25PcGVyYW5kKSA6IChjaGlsZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFu
ZCksCisgICAgICAgICAgICAgICAgICBpbmRleAorICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlh
YmxlKCZwcm9jKQorICAgICAgICB9CisgICAgZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAg
IGF0dHJfcmVhZGVyIDpuYW1lLCA6cHJvZHVjdGlvbnMKKworICAgIGRlZiBpbml0aWFsaXplKG5h
bWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rp
b25zID0gcHJvZHVjdGlvbnMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRy
X3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUo
ZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAg
ICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19z
CisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2Ns
YXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRl
ZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisg
ICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIp
CisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90
aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisg
ICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0
cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0Bz
dHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJz
ZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAg
cmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBy
YWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAor
ICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBh
dGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAx
CisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hl
biAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAg
d2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBs
aW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9d
KikvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUs
IGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAg
ICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbPSgpLF0vCisgICAgICAg
ICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIp
LCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7
T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVu
Y2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4u
cG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc0tleXdvcmQodG9r
ZW4pCisgICAgIyBXZSBjYW4gZXh0ZW5kIHRoaXMgYXMgd2UgYWRkIG1vcmUga2V5d29yZHMuIExp
a2UsIHdlIG1pZ2h0IHdhbnQgImluY2x1ZGUiIGV2ZW50dWFsbHkuCisgICAgdG9rZW4gPX4gL1xB
KChtYXRjaGVyKSlcWi8KK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2Vu
ID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0
b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxl
TmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlk
eCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisg
ICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKwor
ICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAg
ICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQg
ZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBh
cnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5k
CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAg
ICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5n
CisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgor
ICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0
ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZh
bmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBw
cm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAgaWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZh
ck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNoaWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUg
bmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBpZiBwcm9k
dWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUg
fQorICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAg
ICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgIGVuZAorCisgICAg
ZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1hdGNoZXIiKQorCisgICAgICAgIG1hdGNoZXJO
YW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisKKyAg
ICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3Ro
CisKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYg
d2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUuCisgICAgICAgICAgICBwcm9kdWN0aW9uID0g
cGFyc2VQcm9kdWN0aW9uCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rpb25z
LmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAg
ICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICAg
ICAgZW5kCisKKyAgICAgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICAgICAg
fQorCisgICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJOYW1lLCBwcm9kdWN0aW9ucykKKyAgICBl
bmQKKworICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgb3JpZ2luID0gdG9rZW4ub3Jp
Z2luCisgICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIGlmIHRva2Vu
ID09ICI9IgorICAgICAgICAgICAgY29uc3VtZSgiPSIpCisgICAgICAgICAgICBvcGNvZGUgPSBj
b25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgIGVsc2lm
IHRva2VuID09ICIoIgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgICAgICBvcGNv
ZGUgPSBuYW1lCisgICAgICAgICAgICBuYW1lID0gbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG5pbCwgbmlsKQorICAgICAg
ICBlbmQKKyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgbG9vcCB7
CisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKworICAgICAgICAgICAgYWRkVW5p
cXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1Y3Rpb24pCisKKyAgICAgICAgICAgIGJy
ZWFrIGlmIHRva2VuID09ICIpIgorICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgIH0K
KworICAgICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIpIgorICAgICAgICBhZHZhbmNlCisKKyAg
ICAgICAgUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBvcGNvZGUsIHByb2R1Y3Rpb25zKQor
ICAgIGVuZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3
KElPOjpyZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCittYXRjaGVyID0gcGFyc2VyLnBhcnNlCisK
K2NsYXNzIFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIgOmluZGV4TWFwLCA6cHJvZHVjdGlvbnMK
KyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAg
ICBAaW5kZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBpbmRl
eExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1h
cCA8PCBpbmRleAorICAgICAgICAgICAgQHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb25zW2luZGV4
XQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYgbWFwSW5kZXhMaXN0KGluZGV4TGlzdCkK
KyAgICAgICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAg
ICAgIEBpbmRleE1hcFtpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK0ZpbGUub3Bl
bigiQjMiICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInciKSB7CisgICAgfCBvdXRwIHwKKworICAg
IG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiBm
cm9tICN7ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKworICAgIG91dHAucHV0cyAiI2lmbmRl
ZiBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAucHV0cyAiI2RlZmluZSBCMyN7bWF0Y2hl
ci5uYW1lfV9oIgorICAgIAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJCM1ZhbHVlLmhcIiIK
KyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyIKKwor
ICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4iCisgICAgb3V0cC5wdXRz
ICJ2b2lkIHJ1biN7bWF0Y2hlci5uYW1lfShWYWx1ZSogX3ZhbHVlLCBBZGFwdG9yJiBhZGFwdG9y
KSIKKyAgICBvdXRwLnB1dHMgInsiCisKKyAgICAjIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGVt
aXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgYmVjYXVzZSBpdCdzIGEgcmVjdXJzaXZlIGVtaXR0
ZXIuIElmIHlvdQorICAgICMgd2FudCB0byBzZWUgdGhlIGNvZGUgbmljZWx5IGZvcm1hdHRlZCwg
b3BlbiBpdCBpbiBhIGdvb2QgdGV4dCBlZGl0b3IgYW5kIGFzayBpdCB0byBmb3JtYXQgaXQKKyAg
ICAjIGZvciB5b3UuCisKKyAgICAjIEluIG9kZCBzaXR1YXRpb25zLCB3ZSBtYXkgbm90IHVzZSB0
aGUgaW5wdXQgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4K
KyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShfdmFsdWUpOyIKKyAgICAgICAgCisgICAgIyBU
aGlzIGp1c3QgcHJvdGVjdHMgdGhlIGNhbGxlciBmcm9tIGhhdmluZyB0byB3b3JyeSBhYm91dCBw
cm9kdWN0aW9ucyBoYXZpbmcgZGlmZmVyZW50IGxlbmd0aHMuCisgICAgZGVmIG1hdGNoTGVuZ3Ro
KG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQor
ICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9k
dWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVj
dGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmNoaWxkcmVuLmxlbmd0aCA9PSBwcm9kdWN0aW9uLmNo
aWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisg
ICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7Cisg
ICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBsZW5ndGggPSBwcm9kdWN0aW9u
c1tpbmRleExpc3RbMF1dLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgaWYgbGVuZ3RoID4g
MAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dmFsdWVOYW1lfS0+Y2hpbGRyZW4u
c2l6ZSgpID49ICN7bGVuZ3RofSkgeyIKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAg
IGVuZAorCisgICAgIyBUaGlzIGVmZmljaWVudGx5IHNlbGVjdHMgZnJvbSB0aGUgZ2l2ZW4gc2V0
IG9mIHByb2R1Y3Rpb25zLiBJdCBhc3N1bWVzIHRoYXQgcHJvZHVjdGlvbnMKKyAgICAjIGFyZSBu
b3QgZHVwbGljYXRlZC4gSXQgeWllbGRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgcHJvZHVjdGlv
biwgYW5kIHRoZSBjb3JvdXRpbmUgaXMKKyAgICAjIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBz
cGVjaWZpYyBjb2RlIGZvciB0aGF0IHByb2R1Y3Rpb24uIFRoZSBjb3JvdXRpbmUgaXMgZ2l2ZW4g
bGlzdHMgb2YKKyAgICAjIGluZGljZXMgb2YgcG9zc2libHktbWF0Y2hpbmcgcHJvZHVjdGlvbnMu
CisgICAgZGVmIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykK
KyAgICAgICAgIyBGaXJzdCwgc3BsaXQgdGhlIHByb2R1Y3Rpb25zIGxpc3QgaW50byBydW5zIG9m
IHByb2R1Y3Rpb25zIHdpdGggYW4gb3Bjb2RlIGFuZCBwcm9kdWN0aW9ucworICAgICAgICAjIHdp
dGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMu
ZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAg
ICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFd
WzBdXS5oYXNPcGNvZGUgPT0gcHJvZHVjdGlvbi5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICBp
bmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICAg
ICAgCisgICAgICAgICMgTm93LCBlbWl0IHBhdHRlcm4gbWF0Y2hpbmcgY29kZS4gV2UgZG8gaXQg
ZGlmZmVyZW50bHkgZm9yIGxpc3RzIHdpdGggYW4gb3Bjb2RlIHRoYW4gZm9yCisgICAgICAgICMg
bGlzdHMgd2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAg
ICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBpZiBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1d
Lmhhc09wY29kZQorICAgICAgICAgICAgICAgICMgTm93LCB3ZSBzcGxpdCB0aGlzIGluZGV4IGxp
c3QgaW50byBncm91cHMgZm9yIGVhY2ggb3Bjb2RlLgorICAgICAgICAgICAgICAgIGdyb3VwcyA9
IHt9CisgICAgICAgICAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgICAgICAg
ICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHByb2R1Y3Rpb25z
W2luZGV4XQorICAgICAgICAgICAgICAgICAgICBpZiBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVd
CisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdIDw8IGlu
ZGV4CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdy
b3Vwc1twcm9kdWN0aW9uLm9wY29kZV0gPSBbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgRW1pdCBhIHN3aXRjaCBz
dGF0ZW1lbnQuCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7dmFsdWVOYW1l
fS0+b3Bjb2RlKCkpIHsiCisgICAgICAgICAgICAgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAg
ICAgICAgICAgICAgICAgIHwgb3Bjb2RlLCBzdWJJbmRleExpc3QgfAorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgICAgICAgICAgICAgc3Vi
TWF0Y2ggPSBTdWJNYXRjaC5uZXcoc3ViSW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAg
ICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0
aW9ucykgeworICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAg
ICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0
OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ViTWF0Y2gg
PSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICBt
YXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAg
ICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgeWllbGQg
c3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVuZAorCisgICAgIyBUYWtlcyBwcm9kdWN0aW9u
cyB0aGF0IGhhdmUgdGhlIHNhbWUgb3Bjb2RlIGFuZCB0aGUgc2FtZSBsZW5ndGggYW5kIHNlbGVj
dHMgZnJvbSB0aGVtIGJhc2VkIG9uCisgICAgIyB0aGUgcHJvZHVjdGlvbnMgYXQgdGhlIGdpdmVu
IGNvbHVtbi4KKyAgICBkZWYgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9u
cywgY29sdW1uSW5kZXgpCisgICAgICAgIGlmIGNvbHVtbkluZGV4ID49IHByb2R1Y3Rpb25zWzBd
LmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgeWllbGQgKDAuLi4ocHJvZHVjdGlvbnMuc2l6
ZSkpLnRvX2EKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKworICAgICAgICBzdWJW
YWx1ZSA9IG5ld1ZhcgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICBv
dXRwLnB1dHMgIlZhbHVlKiAje3N1YlZhbHVlfSA9ICN7dmFsdWVOYW1lfS0+Y2hpbGQoI3tjb2x1
bW5JbmRleH0pOyIKKworICAgICAgICAjIFdlIG1heSBub3QgdXNlIHRoaXMgdmFsdWUuIFRlbGwg
dGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICAgICAgb3V0cC5wdXRzICJV
TlVTRURfUEFSQU0oI3tzdWJWYWx1ZX0pOyIKKyAgICAgICAgCisgICAgICAgIHN1YlByb2R1Y3Rp
b25zID0gcHJvZHVjdGlvbnMubWFwIHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiB8CisgICAg
ICAgICAgICBwcm9kdWN0aW9uLmNoaWxkcmVuW2NvbHVtbkluZGV4XQorICAgICAgICB9CisKKyAg
ICAgICAgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCBzdWJWYWx1ZSwgc3ViUHJvZHVjdGlvbnMpIHsK
KyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0
Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihv
dXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCArIDEpIHsK
KyAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3Vi
TWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICBlbmQKKworICAgIGRlZiBtYXRjaFJlY3Vyc2l2
ZWx5KG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIG1hdGNoUHJvZHVjdGlv
bnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICAgICAgIyBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoaXMgaW5kZXggbGlz
dCBjb250YWlucyBwcm9kdWN0aW9ucyB3aXRoIHRoZSBzYW1lIG9wY29kZSBhbmQKKyAgICAgICAg
ICAgICMgdGhlIHNhbWUgbGVuZ3RoLgorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5u
ZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAs
IHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMsIDApIHsKKyAgICAgICAgICAgICAgICB8
IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0
KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgbWF0
Y2hSZWN1cnNpdmVseShvdXRwLCAiX3ZhbHVlIiwgbWF0Y2hlci5wcm9kdWN0aW9ucykgeworICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAg
IHwgaW5kZXggfAorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IG1hdGNoZXIucHJvZHVjdGlvbnNb
aW5kZXhdCisgICAgICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgICAgICBvdXRwLnB1dHMg
IlZhbHVlKiAje3Byb2R1Y3Rpb24udmFyTmFtZX0gPSBfdmFsdWU7IgorICAgICAgICAgICAgaW50
ZXJuYWxBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9IFtdCisg
ICAgICAgICAgICB0cnlBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgbnVtU2NvcGVzID0gMAor
ICAgICAgICAgICAgc2VlbiA9IHt9CisgICAgICAgICAgICBwcm9kdWN0aW9uLmVhY2hWYXJpYWJs
ZSB7CisgICAgICAgICAgICAgICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5hbWUsIGNoaWxkVmFy
TmFtZSwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGxvYWRFeHByID0gIiN7cGFyZW50
VmFyTmFtZX0tPmNoaWxkKCN7aW5kZXh9KSIKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBpZiBzZWVuW2NoaWxkVmFyTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3
VmFyCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7dG1wfSA9ICN7bG9h
ZEV4cHJ9OyIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t0bXB9ID09ICN7
Y2hpbGRWYXJOYW1lfSkgeyIKKyAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNlZW5bY2hpbGRWYXJOYW1l
XSA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiVmFsdWUqICN7Y2hpbGRWYXJOYW1lfSA9ICN7bG9hZEV4cHJ9OyIKKworICAgICAgICAg
ICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7Igor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAx
CisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0g
OmludGVybmFsIG9yIGtpbmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICBv
cGVyYW5kQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5kIG9yIGtp
bmQgPT0gOmFub25PcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA8PCBj
aGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFuZAorICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJp
ZiAoYWRhcHRvci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICB1bmxlc3MgaW50ZXJu
YWxBcmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9y
LmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikK
KyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1w
dHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdE9wZXJhbmRz
KCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci50cnkje3Byb2R1Y3Rpb24ubmFtZX0o
IiArIHRyeUFyZ3VtZW50cy5qb2luKCIsICIpICsgIikpIHsiKQorICAgICAgICAgICAgb3V0cC5w
dXRzICJhZGFwdG9yLmFjY2VwdFJvb3RMYXRlKF92YWx1ZSk7IgorICAgICAgICAgICAgdW5sZXNz
IGludGVybmFsQXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYWRh
cHRvci5hY2NlcHRJbnRlcm5hbHNMYXRlKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIp
ICsgIik7IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB1bmxlc3Mgb3BlcmFuZEFyZ3Vt
ZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0T3Bl
cmFuZHNMYXRlKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKTsiCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuOyIKKyAgICAgICAgICAgIG91
dHAucHV0cyAifSIKKyAgICAgICAgICAgIG51bVNjb3Blcy50aW1lcyB7CisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1
dHMgIn0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMyIKKworICAgIG91dHAucHV0cyAiI2VuZGlmIC8v
IEIzI3ttYXRjaGVyLm5hbWV9X2giCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNr
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1
ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisK
K2Jvb2wgYXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgU3RhY2tTbG90KiBzbG90LCBpbnRwdHJfdCBv
ZmZzZXRGcm9tRlAsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAg
ICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTbG90cykgeworICAgICAgICBpZiAo
IW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgaWYgKG9mZnNldEZyb21GUCArIHNsb3QtPmJ5dGVTaXplKCkgPj0gb3RoZXJTbG90LT5vZmZz
ZXRGcm9tRlAoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVy
U2xvdC0+b2Zmc2V0RnJvbUZQKCkgKyBvdGhlclNsb3QtPmJ5dGVTaXplKCkgPj0gb2Zmc2V0RnJv
bUZQKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNsb3QtPnNldE9m
ZnNldEZyb21GUChvZmZzZXRGcm9tRlApOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGFz
c2lnbihTdGFja1Nsb3QqIHNsb3QsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90
cykKK3sKKyAgICBpZiAoYXR0ZW1wdEFzc2lnbm1lbnQoc2xvdCwgLXNsb3QtPmJ5dGVTaXplKCks
IG90aGVyU2xvdHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKFN0YWNrU2xvdCogb3Ro
ZXJTbG90IDogb3RoZXJTbG90cykgeworICAgICAgICBpZiAob3RoZXJTbG90LT5vZmZzZXRGcm9t
RlAoKQorICAgICAgICAgICAgJiYgYXR0ZW1wdEFzc2lnbm1lbnQoc2xvdCwgb3RoZXJTbG90LT5v
ZmZzZXRGcm9tRlAoKSAtIHNsb3QtPmJ5dGVTaXplKCksIG90aGVyU2xvdHMpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYg
Y29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlU3RhY2si
KTsKKworICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0aGUgbG9ja2VkIHNsb3RzIGluIG9yZGVyLiBU
aGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCisgICAgLy8gdGhl
IHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9mZnNldHMg
YmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCisgICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6ZSgpKTsK
KyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzOworICAgIFZl
Y3RvcjxTdGFja1Nsb3QqPiBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Q7CisgICAgZm9yIChTdGFj
a1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBzd2l0Y2ggKHNsb3Qt
PmtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAg
ICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgICAgICBhc3NpZ25lZExv
Y2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5hcHBlbmQoc2xvdCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6CisgICAgICAg
ICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBBcyBh
IG1hdHRlciBvZiBzYW5pdHksIHVuYXNzaWduIHRoaXMuIE1heWJlIGl0IHdvdWxkIGJlIGdvb2Qg
dG8gZXZlbiBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIHJ1bGUgdGhhdCB0
aGlzIGNhbm5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQ
KDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisgICAgLy8gVGhpcyBpcyBhIGZhaXJseSBleHBlbnNpdmUgbG9vcCwgYnV0IGl0J3MgT0sgYmVj
YXVzZSB3ZSdsbCB1c3VhbGx5IG9ubHkgaGF2ZSBhIGhhbmRmdWwgb2YKKyAgICAvLyBsb2NrZWQg
c3RhY2sgc2xvdHMuCisgICAgd2hpbGUgKCFsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QuaXNFbXB0
eSgpKSB7CisgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlz
dC50YWtlTGFzdCgpOworICAgICAgICBhc3NpZ24oc2xvdCwgYXNzaWduZWRMb2NrZWRTdGFja1Ns
b3RzKTsKKyAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAg
ICB9CisKKyAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMuIE5vdGUgdGhh
dCB0aGVvcmV0aWNhbGx5IHdlIHNob3VsZCBkbyBhbiBlc2NhcGUgYW5hbHlzaXMKKyAgICAvLyBo
ZXJlLiBCdXQsIGN1cnJlbnRseSBBaXIgZG9lc24ndCBzdXBwb3J0IGVzY2FwaW5nIGEgU3RhY2tT
bG90IQorICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZXNjYXBpbmcgYSBTdGFja1Nsb3Qg
YW5kIGFkZCBlc2NhcGUgYW5hbHlzaXMgdG8gYWxsb2NhdGVTdGFjaygpLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0MzAKKworICAgIGF1dG8gaXNS
ZWxldmFudCA9IFtdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiBh
cmcuaXNTdGFjaygpICYmIGFyZy5zdGFja1Nsb3QoKS0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6
OkFub255bW91czsKKyAgICB9OworCisgICAgTGl2ZW5lc3M8QXJnPiBsaXZlbmVzcyhjb2RlKTsK
KyAgICBJbmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5j
ZShjb2RlLnNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOworCisgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8QXJnPjo6TG9j
YWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworCisgICAgICAgIGF1dG8gaW50ZXJm
ZXJlID0gWyZdICgpIHsKKyAgICAgICAgICAgIC8vIEZvcm0gYSBjbGlxdWUgb2Ygc3RhY2sgc2xv
dHMgdGhhdCBpbnRlcmZlcmUuIEZpcnN0IGZpbmQgdGhlIGxpc3Qgb2Ygc3RhY2sgc2xvdHMKKyAg
ICAgICAgICAgIC8vIHRoYXQgYXJlIGxpdmUgcmlnaHQgbm93LgorICAgICAgICAgICAgc2xvdHMu
cmVzaXplKDApOworICAgICAgICAgICAgZm9yIChBcmcgYXJnIDogbG9jYWxDYWxjLmxpdmUoKSkg
eworICAgICAgICAgICAgICAgIGlmIChpc1JlbGV2YW50KGFyZykpCisgICAgICAgICAgICAgICAg
ICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tTbG90KCkpOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNsb3RzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICAgICAgU3RhY2tTbG90KiBvdXRlciA9IHNsb3RzW2ldOworICAgICAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgc2xvdHMuc2l6ZSgpOyArK2opIHsKKyAgICAg
ICAgICAgICAgICAgICAgU3RhY2tTbG90KiBpbm5lciA9IHNsb3RzW2ldOworCisgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdCogZmlyc3QgPSBvdXRlcjsKKyAgICAgICAgICAgICAgICAgICAg
U3RhY2tTbG90KiBzZWNvbmQgPSBpbm5lcjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0
LT5pbmRleCgpID4gc2Vjb25kLT5pbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3Rk
Ojpzd2FwKGZpcnN0LCBzZWNvbmQpOworCisgICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5j
ZVtmaXJzdF0uYWRkKHNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZVtz
ZWNvbmRdLmFkZChmaXJzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9OworCisgICAgICAgIGludGVyZmVyZSgpOworICAgICAgICAKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAg
ICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAgICAg
ICAgIGludGVyZmVyZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHdlIGFzc2ln
biBzdGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZp
cnN0LWZpdC4gRm9yIGVhY2gKKyAgICAvLyBTdGFja1Nsb3Qgd2UganVzdCB3YW50IHRvIGZpbmQg
dGhlIG9mZnNldEZyb21GUCB0aGF0IGlzIGNsb3Nlc3QgdG8gemVybyB3aGlsZSBlbnN1cmluZyBu
bworICAgIC8vIG92ZXJsYXAgd2l0aCBvdGhlciBTdGFja1Nsb3RzIHRoYXQgdGhpcyBvdmVybGFw
cyB3aXRoLgorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBvdGhlclNsb3RzOworICAgIGZvciAoU3Rh
Y2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgaWYgKHNsb3QtPm9m
ZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAvLyBBbHJlYWR5IGFzc2lnbmVkIGFuIG9mZnNl
dC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgSGFzaFNldDxT
dGFja1Nsb3QqPiYgaW50ZXJmZXJpbmdTbG90cyA9IGludGVyZmVyZW5jZVtzbG90XTsKKyAgICAg
ICAgb3RoZXJTbG90cy5yZXNpemUoYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKSArIGlu
dGVyZmVyaW5nU2xvdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG90aGVy
U2xvdHNbaV0gPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHNbaV07CisgICAgICAgIHVuc2lnbmVk
IG5leHRJbmRleCA9IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7CisgICAgICAgIGZv
ciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBpbnRlcmZlcmluZ1Nsb3RzKQorICAgICAgICAgICAg
b3RoZXJTbG90c1tuZXh0SW5kZXgrK10gPSBvdGhlclNsb3Q7CisKKyAgICAgICAgYXNzaWduKHNs
b3QsIG90aGVyU2xvdHMpOworICAgIH0KKworICAgIC8vIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3Rh
Y2sgd2UncmUgdXNpbmcgZm9yIHN0YWNrIHNsb3RzLgorICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZv
clN0YWNrU2xvdHMgPSAwOworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Ns
b3RzKCkpIHsKKyAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IHN0ZDo6bWF4KAorICAg
ICAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cywKKyAgICAgICAgICAgIHN0YXRpY19jYXN0
PHVuc2lnbmVkPigtc2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKKyAgICB9CisKKyAgICAvLyBOb3cg
d2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQgYXJlYSB3ZSBuZWVkLgorICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6
ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAg
ICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDggYnl0ZXMgb2YgdGhlIGNhbGwgYXJn
LiBCdXQgdGhhdCdzIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBzdWNoIGFuIGF3ZXNvbWUg
YXNzdW1wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKKyAgICAgICAgICAgICAgICAgICAgQVNT
RVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29kZS5yZXF1ZXN0
Q2FsbEFyZ0FyZWFTaXplKGFyZy5vZmZzZXQoKSArIDgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvZGUuc2V0RnJhbWVTaXplKGZy
YW1lU2l6ZUZvclN0YWNrU2xvdHMgKyBjb2RlLmNhbGxBcmdBcmVhU2l6ZSgpKTsKKworICAgIC8v
IEZpbmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1c2UgQWRkcidzIGluc3RlYWQgb2YgU3Rh
Y2tTbG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcworICAgIC8vIHRyYW5zZm9ybWF0aW9uIHNpbmNl
IHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJyYXkgdG8gZmlndXJlIG91dCB3aGljaCBT
dGFja1Nsb3QgYW55CisgICAgLy8gb2Zmc2V0LWZyb20tRlAgcmVmZXJzIHRvLgorCisgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDog
KmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAg
ICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCisgICAgICAg
ICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgYXJnLnN0YWNrU2xvdCgpLT5vZmZzZXRG
cm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNh
c2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCisg
ICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJBbGxvY2F0ZVN0YWNrX2gKKyNkZWZpbmUgQWlyQWxsb2Nh
dGVTdGFja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgYWxsb2Nh
dGVzIFN0YWNrU2xvdHMgdG8gcGxhY2VzIG9uIHRoZSBzdGFjay4gSXQgZmlyc3QgYWxsb2NhdGVz
IHRoZSBwaW5uZWQgb25lcyBpbiBpbmRleAorLy8gb3JkZXIgYW5kIHRoZW4gaXQgYWxsb2NhdGVz
IHRoZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4KKwordm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmKTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckFsbG9jYXRlU3RhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFyZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lk
IEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5k
KSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBUbXA6CisgICAgICAgIG91dC5wcmludCh0bXAoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEltbToKKyAgICAgICAgb3V0LnByaW50KCIkIiwg
bV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAgb3V0
LnByaW50ZigiJDB4JWxseCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
QWRkcjoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmRleDoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAg
b3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLCIs
IGluZGV4KCkpOworICAgICAgICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0LnBy
aW50KCIsIiwgc2NhbGUoKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAg
b3V0LnByaW50KG9mZnNldCk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50ZXJEdW1wKHN0
YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FsbEFyZzoKKyAg
ICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCk7CisgICAg
ICAgIG91dC5wcmludCgiKGNhbGxBcmcpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJl
bENvbmQ6CisgICAgICAgIG91dC5wcmludChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIG91dC5wcmludChhc1Jlc3Vs
dENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3BlY2lhbDoKKyAgICAg
ICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJBcmdfaAorI2RlZmluZSBBaXJBcmdfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpclRtcC5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7Citj
bGFzcyBTdGFja1Nsb3Q7CisKKy8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFs
bHkgdGVyc2UgYmVjYXVzZSB3ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxp
a2UKKy8vIEluc3QoLi4uLCBBcmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4u
KQorY2xhc3MgQXJnIHsKK3B1YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGlu
dGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4K
KyAgICBlbnVtIEtpbmQgOiBpbnQ4X3QgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBUbXAs
CisgICAgICAgIEltbSwKKyAgICAgICAgSW1tNjQsCisgICAgICAgIEFkZHIsCisgICAgICAgIFN0
YWNrLAorICAgICAgICBDYWxsQXJnLAorICAgICAgICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwK
KyAgICAgICAgUmVzQ29uZCwKKyAgICAgICAgU3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJv
bGUgOiBpbnQ4X3QgeworICAgICAgICBVc2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVm
CisgICAgfTsKKworICAgIGVudW0gVHlwZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAg
ICBGUAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOwor
CisgICAgc3RhdGljIGJvb2wgaXNVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUg
cm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNh
c2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2Ug
SW50MzI6CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAg
ICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIEZQOworICAgICAgICB9CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gR1A7CisgICAgfQorCisg
ICAgQXJnKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorCisgICAg
QXJnKEFpcjo6VG1wIHRtcCkKKyAgICAgICAgOiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFz
ZSh0bXApCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUp
CisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1t
OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbTY0KGludHB0cl90IHZhbHVlKQorICAgIHsK
KyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAg
ICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgQXJnIGFkZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jh
c2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZh
bHVlLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJp
dHdpc2VfY2FzdDxpbnRwdHJfdD4odmFsdWUpOworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9m
ZnNldDsgLy8gSSBrbm93LCB5dWNrLgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgY2FsbEFyZyhpbnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFy
ZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1
bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgY2FzZSA0OgorICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAg
ICAgICBjYXNlIDQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAg
ICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQor
CisgICAgc3RhdGljIEFyZyBpbmRleChBaXI6OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5z
aWduZWQgc2NhbGUgPSAxLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NF
UlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAg
QVNTRVJUKGlzVmFsaWRTY2FsZShzY2FsZSkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAg
ICByZXN1bHQubV9raW5kID0gSW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOwor
ICAgICAgICByZXN1bHQubV9pbmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9
IHN0YXRpY19jYXN0PGludDMyX3Q+KHNjYWxlKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
b2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcg
cmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCisg
ICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVsQ29u
ZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQg
PSBjb25kaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBzcGVjaWFsKEFpcjo6U3BlY2lhbCogc3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVy
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0
CisgICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBt
X2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1f
aW5kZXgKKyAgICAgICAgICAgICYmIG1fc2NhbGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVy
YXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQg
a2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAg
IGJvb2wgaXNUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7
CisgICAgfQorCisgICAgYm9vbCBpc0ltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
a2luZCgpID09IEltbTsKKyAgICB9CisKKyAgICBib29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW02NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRk
cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQor
CisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gU3RhY2s7CisgICAgfQorCisgICAgYm9vbCBpc0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGtpbmQoKSA9PSBDYWxsQXJnOworICAgIH0KKworICAgIGJvb2wgaXNJbmRl
eCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0K
KworICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5k
KCkgPT0gUmVsQ29uZDsKKyAgICB9CisKKyAgICBib29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlc0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBp
c1NwZWNpYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFs
OworICAgIH0KKworICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNUbXAoKSB8fCBpc1N0YWNrKCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJu
IG1fYmFzZTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gSW1tIHx8IGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJl
dHVybiBtX29mZnNldDsKKyAgICB9CisKKyAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBi
aXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihtX29mZnNldCkpOworICAg
IH0KKworICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7
CisgICAgfQorCisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgor
ICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoa2luZCgpID09IFN0YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PGludDMyX3Q+KG1fc2NhbGUpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIg
fHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3Qq
IHN0YWNrU2xvdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNr
KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7Cisg
ICAgfQorCisgICAgQWlyOjpUbXAgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAg
IHVuc2lnbmVkIHNjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
SW5kZXgpOworICAgICAgICByZXR1cm4gbV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBs
b2dTY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7
CisgICAgfQorCisgICAgQWlyOjpTcGVjaWFsKiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gU3BlY2lhbCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7Cisg
ICAgfQorCisgICAgYm9vbCBpc0ZQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBp
c1RtcCgpICYmIHRtcCgpLmlzRlAoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYg
dGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFs
dWUuCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgp
KSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNl
IEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAg
IGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJlc0Nv
bmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQVG1wKCk7CisgICAgICAgIGNh
c2UgSW52YWxpZDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24g
dGhhdCByZXF1aXJlcyBhIEZQIHZhbHVlLgorICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgewor
ICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2Fz
ZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoK
KyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6Cisg
ICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxv
dyBJbW02NCBhcyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRp
bmcgc3RhY2ttYXBzLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1w
OgorICAgICAgICAgICAgcmV0dXJuIGlzRlBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGJvb2wgaGFzVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRt
cDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBl
IGlzIGFtYmlndW91cyBmb3Igc29tZSBhcmcga2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5
cGUgdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsK
KyAgICB9CisKKyAgICBib29sIGlzVHlwZShUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBp
c0dQKCk7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gaXNGUCgpOworICAg
ICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAg
IGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1w
KCkuaXNGUFIoKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB0bXAoKS5mcHIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAg
IH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJl
ZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRtcCgpLmdwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBm
cFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4
KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRtcCgpLnRtcEluZGV4KCk7CisgICAgfQorCisgICAgQXJnIHdpdGhPZmZzZXQo
aW50MzJfdCBhZGRpdGlvbmFsT2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNP
ZmZzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgaWYgKHN1bU92ZXJm
bG93czxpbnQzMl90PihvZmZzZXQoKSwgYWRkaXRpb25hbE9mZnNldCkpCisgICAgICAgICAgICBy
ZXR1cm4gQXJnKCk7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRk
cjoKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGJhc2UoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFs
T2Zmc2V0KTsKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgICAgIHJldHVybiBzdGFjayhz
dGFja1Nsb3QoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBD
YWxsQXJnOgorICAgICAgICAgICAgcmV0dXJuIGNhbGxBcmcob2Zmc2V0KCkgKyBhZGRpdGlvbmFs
T2Zmc2V0KTsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpbmRleChi
YXNlKCksIGluZGV4KCksIHNjYWxlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAg
ICBjYXNlIFRtcDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jh
c2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAg
ICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIFRoaXMgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBh
biBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKKyAgICAv
LyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6CisgICAgLy8KKyAg
ICAvLyBtb3YgJXJheCwgKCVyY3gpCisgICAgLy8KKyAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1
dCB1c2VzICVyY3guCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZv
ckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoK
KyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xlLCBhcmdUeXBlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFz
ZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAg
ICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGZ1bmN0b3Io
bV9pbmRleCwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0ZWRJbW0zMigpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisjaWYgVVNFKEpT
VkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0IGFzVHJ1c3RlZEltbTY0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NCh2YWx1ZSgpKTsKKyAgICB9CisjZW5kaWYK
KworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOwor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgbV9iYXNlLmdwcigpLCBtX2luZGV4
LmdwcigpLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U2NhbGU+KGxvZ1NjYWxlKCkpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9uYWxDb25kaXRp
b24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uPiht
X29mZnNldCk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBh
c1Jlc3VsdENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZXNDb25k
KCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENv
bmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworCisgICAgQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAg
ICAgOiBtX2Jhc2UoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAgeworICAgIH0KKwor
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICp0aGlzID09IEFyZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBUaGlzIHJlYWxs
eSBkb2Vzbid0IGhhdmUgdG8gYmUgdGhhdCBncmVhdC4KKyAgICAgICAgcmV0dXJuIFdURjo6SW50
SGFzaDxpbnQ2NF90Pjo6aGFzaChtX29mZnNldCkgKyBtX2tpbmQgKyBtX3NjYWxlICsgbV9iYXNl
Lmhhc2goKSArCisgICAgICAgICAgICBtX2luZGV4Lmhhc2goKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgaW50NjRfdCBtX29mZnNldCB7IDAgfTsKKyAgICBLaW5kIG1fa2luZCB7IEludmFsaWQg
fTsKKyAgICBpbnQzMl90IG1fc2NhbGUgeyAxIH07CisgICAgQWlyOjpUbXAgbV9iYXNlOworICAg
IEFpcjo6VG1wIG1faW5kZXg7Cit9OworCitzdHJ1Y3QgQXJnSGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQXJnJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBBcmcmIGEsIGNvbnN0IEFyZyYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6QWlyOjpBcmc+IHsKKyAgICB0
eXBlZGVmIEpTQzo6QjM6OkFpcjo6QXJnSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpT
Qzo6QjM6OkFpcjo6QXJnPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OkFy
Zz4geworICAgIC8vIEJlY2F1c2UgbV9zY2FsZSBpcyAxIGluIHRoZSBlbXB0eSB2YWx1ZS4KKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJBcmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJs
b2NrKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBibG9jaykKK3sKKyAgICBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQor
Cit2b2lkIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBC
YXNpY0Jsb2NrKiB0bykKK3sKKyAgICBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20s
IHRvKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2lj
QmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsKKyAg
ICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAg
IiwgaW5zdCwgIlxuIik7Cit9CisKK0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5k
ZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2luZGV4KGluZGV4KQorICAgICwgbV9mcmVx
dWVuY3koZnJlcXVlbmN5KQoreworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckJhc2ljQmxvY2tfaAorI2RlZmluZSBBaXJCYXNpY0Jsb2NrX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRl
ICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVk
ZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2Rl
OworY2xhc3MgSW5zZXJ0aW9uU2V0OworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAi
IyI7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAgICB0eXBlZGVmIFZl
Y3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5cGVkZWYgVmVjdG9y
PEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIHVuc2lnbmVkIGluZGV4
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBi
ZWdpbigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5z
dExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7
IH0KKworICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9p
bnN0c1tpbmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1faW5z
dHNbaW5kZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9p
bnN0cy5sYXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBhcHBlbmRJbnN0KElu
c3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3YXJkPElu
c3Q+KGluc3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgdm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAg
ICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMp
Li4uKSk7CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBjYXNlIHRvIHdoaWNo
IHRoZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIxIiBjYXNlIGlzIHRo
ZQorICAgIC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGZhbGwt
dGhyb3VnaCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25lZCBudW1TdWNjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIEZyZXF1ZW50
ZWRCbG9jayBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vz
c29yc1tpbmRleF07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nv
ckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBT
dWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKKyAg
ICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3Nv
ckJsb2NrcygpCisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNp
Y0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMpOworICAgIH0KKyAgICBTdWNjZXNz
b3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nl
c3NvckJsb2NrcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVj
dGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMp
OworICAgIH0KKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAg
ICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJl
ZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nvckxp
c3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisKKyAgICB2b2lk
IGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIHJlbW92ZVByZWRlY2Vzc29y
KEJhc2ljQmxvY2sqKTsKKyAgICB2b2lkIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKKyAg
ICAKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKwor
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBTdWNjZXNz
b3JMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7
CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1w
IHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayogYmxv
Y2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykK
KyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0
IEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1wIGRl
ZXBEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNC
bG9ja0R1bXAoYmxvY2spOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQmFzaWNCbG9ja19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckND
YWxsU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNw
ZWNpYWw6OkNDYWxsU3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0ZXJT
ZXQ6OmFsbFJlZ2lzdGVycygpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVy
U2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdp
c3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJl
Z3MuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKworQ0Nh
bGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmZv
ckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxs
YmFjaz4mIGNhbGxiYWNrKQoreworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpVc2Us
IEFyZzo6R1ApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBxdWVy
eSB0aGUgYXJnJ3MgdHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdlCisg
ICAgICAgIC8vIHJlcXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCByZWdpc3RlcnMuCisg
ICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tpXS50eXBl
KCkpOworICAgIH0KK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkK
K3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06
CisgICAgICAgIGlmIChzaXplb2Yodm9pZCopID09IDQpCisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYgKHNp
emVvZih2b2lkKikgPT0gOCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFy
Zzo6U3RhY2s6CisgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJn
c1sxXS5pc0dQKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFy
Z3NbaV0uaXNSZWcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAo
aW5zdC5hcmdzW2ldID09IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJu
ICBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFs
OjphZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEg
Y2FuIGJlIGEgc3RhY2sgYWRkcmVzcyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IENDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJT
ZXQmKQoreworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJ
bnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAg
IHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAg
Y2FzZSBBcmc6OkltbVB0cjoKKyAgICAgICAgaml0Lm1vdmUoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGluc3QuYXJnc1sxXS5wb2ludGVyVmFsdWUoKSksIHNjcmF0Y2hSZWdpc3Rlcik7Cisg
ICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXJnOjpUbXA6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFy
Z3NbMV0uYXNBZGRyZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYg
Q0NhbGxTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIHJldHVybiBtX2Nsb2Ji
ZXJlZFJlZ3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNw
ZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiZnVuY3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNw
ZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckND
YWxsU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0Nh
bGxTcGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
Ly8gVXNlIHRoaXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBv
ZiBjb3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lh
bCBvYmplY3QuIEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBh
IHJlZ2lzdGVyLCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0
IHRoZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJn
dW1lbnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50
IHdvcmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFz
b24gd2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRz
IHRvIGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0
aGF0IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxs
eSByZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNl
IGlmIHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBl
YXIgdG8gYmUgbGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1
ZSwgd2hpY2hldmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVi
bGljIFNwZWNpYWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNw
ZWNpYWwoKTsKKworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBh
cmd1bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90Cisg
ICAgLy8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkg
dGhlIHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMg
c3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJS
ZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hB
cmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRl
OworICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlk
ZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0
Jikgb3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2Fs
bEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBk
dW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJ
bXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0
ZXJTZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNDYWxsU3Bl
Y2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
ckNvZGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNp
YWwuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0NvZGU6OkNvZGUoKQoreworfQorCitD
b2RlOjp+Q29kZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBm
cmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBC
YXNpY0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayog
cmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9j
aykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tT
bG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVl
KiB2YWx1ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFj
a1Nsb3QoYnl0ZVNpemUsIG1fc3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7CisgICAg
U3RhY2tTbG90KiByZXN1bHQgPSBzbG90LmdldCgpOworICAgIG1fc3RhY2tTbG90cy5hcHBlbmQo
V1RGOjptb3ZlKHNsb3QpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTcGVjaWFsKiBDb2Rl
OjphZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQoreworICAgIFNw
ZWNpYWwqIHJlc3VsdCA9IHNwZWNpYWwuZ2V0KCk7CisgICAgbV9zcGVjaWFscy5hcHBlbmQoV1RG
Ojptb3ZlKHNwZWNpYWwpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDQ2FsbFNwZWNpYWwq
IENvZGU6OmNDYWxsU3BlY2lhbCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAg
ICAgICBtX2NDYWxsU3BlY2lhbCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAg
ICAgICAgYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAg
IH0KKworICAgIHJldHVybiBtX2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJl
YWNoYWJpbGl0eSgpCit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30K
Kwordm9pZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxv
Y2spKTsKKyAgICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQo
IlN0YWNrIHNsb3RzOlxuIik7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tT
bG90cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc2xvdCksICJc
biIpOworICAgIH0KKyAgICBpZiAoc3BlY2lhbHMoKS5zaXplKCkpIHsKKyAgICAgICAgb3V0LnBy
aW50KCJTcGVjaWFsczpcbiIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVj
aWFscygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCks
ICJcbiIpOworICAgIH0KKyAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXpl
LCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNhbGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJn
QXJlYVNpemUsICJcbiIpOworICAgIG91dC5wcmludCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxl
ZVNhdmVSZWdpc3RlcnMsICJcbiIpOworfQorCit1bnNpZ25lZCBDb2RlOjpmaW5kRmlyc3RCbG9j
a0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHdoaWxlIChpbmRleCA8IHNpemUo
KSAmJiAhYXQoaW5kZXgpKQorICAgICAgICBpbmRleCsrOworICAgIHJldHVybiBpbmRleDsKK30K
KwordW5zaWduZWQgQ29kZTo6ZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25z
dAoreworICAgIHJldHVybiBmaW5kRmlyc3RCbG9ja0luZGV4KGluZGV4ICsgMSk7Cit9CisKK0Jh
c2ljQmxvY2sqIENvZGU6OmZpbmROZXh0QmxvY2soQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Cit7
CisgICAgcmV0dXJuIGF0KGZpbmROZXh0QmxvY2tJbmRleChibG9jay0+aW5kZXgoKSkpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNvZGVfaAorI2RlZmluZSBBaXJDb2RlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
QWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2luY2x1ZGUgIlJlZ2lz
dGVyQXRPZmZzZXRMaXN0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBQcm9jZWR1cmU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDQ2FsbFNwZWNpYWw7
CisKKy8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFs
LiBJdCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFuIHRoZQorLy8gZ2VuZXJhdGVk
IG1hY2hpbmUgY29kZSAtIGZvciBleGFtcGxlIGlmIHlvdSdyZSBnZW5lcmF0aW5nIDFNQiBvZiBt
YWNoaW5lIGNvZGUsIHlvdSBuZWVkIGFib3V0CisvLyA0ME1CIG9mIEFpci4KKworY2xhc3MgQ29k
ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29kZSk7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ29kZSgpOworICAgIH5Db2RlKCk7CisKKyAgICBCYXNp
Y0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBTdGFja1Ns
b3QqIGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tT
bG90VmFsdWUqID0gbnVsbHB0cik7CisKKyAgICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5p
cXVlX3B0cjxTcGVjaWFsPik7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBzcGVjaWFsIHlvdSBuZWVk
IHRvIG1ha2UgYSBDIGNhbGwhCisgICAgQ0NhbGxTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKwor
ICAgIFRtcCBuZXdUbXAoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6Z3BU
bXBGb3JJbmRleChtX251bUdQVG1wcysrKTsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAg
ICAgICAgcmV0dXJuIFRtcDo6ZnBUbXBGb3JJbmRleChtX251bUZQVG1wcysrKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHVuc2lnbmVkIG51bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAg
ICAgcmV0dXJuIG1fbnVtR1BUbXBzOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAg
ICByZXR1cm4gbV9udW1GUFRtcHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBj
YWxsQXJnQXJlYVNpemUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxBcmdBcmVhU2l6ZTsgfQorCisg
ICAgLy8gWW91IGNhbiBjYWxsIHRoaXMgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiB0byBmb3JjZSBh
IG1pbmltdW0gY2FsbCBhcmcgYXJlYSBzaXplLgorICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVh
U2l6ZSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUgPSBz
dGQ6Om1heChtX2NhbGxBcmdBcmVhU2l6ZSwgc2l6ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQg
ZnJhbWVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVNpemU7IH0KKworICAgIC8vIE9ubHkg
cGhhc2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbiBhcmUgYWxsb3dlZCB0byBzZXQgdGhpcy4g
Q3VycmVudGx5LCBvbmx5CisgICAgLy8gQWlyOjphbGxvY2F0ZVN0YWNrKCkgZG9lcyB0aGlzLgor
ICAgIHZvaWQgc2V0RnJhbWVTaXplKHVuc2lnbmVkIGZyYW1lU2l6ZSkKKyAgICB7CisgICAgICAg
IG1fZnJhbWVTaXplID0gZnJhbWVTaXplOworICAgIH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRM
aXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJz
OyB9CisKKyAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBhbmQgZGVsZXRlcyB1bnJlYWNo
YWJsZSBibG9ja3MuCisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOworCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5nZXQoKTsgfQorICAgIEJhc2ljQmxv
Y2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsg
fQorCisgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5kZXgn
KSAhPSBudWxsIGFuZCBpbmRleCcgPj0gaW5kZXguCisgICAgdW5zaWduZWQgZmluZEZpcnN0Qmxv
Y2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxl
c3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+IGluZGV4
LgorICAgIHVuc2lnbmVkIGZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7
CisKKyAgICBCYXNpY0Jsb2NrKiBmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqKSBjb25zdDsKKwor
ICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAg
ICAgICAgICAgIDogbV9jb2RlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29kZSYgY29kZSwg
dW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29kZSgmY29kZSkKKyAgICAgICAgICAg
ICwgbV9pbmRleChtX2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgpKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9jb2RlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9p
bmRleCA9IG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleChtX2luZGV4ICsgMSk7CisgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBjb25zdCBDb2RlKiBtX2NvZGU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
KnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
KnRoaXMsIHNpemUoKSk7IH0KKworICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUp
CisgICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90cy5z
aXplKCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90c1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgU3RhY2tT
bG90KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7
IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQor
ICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29s
bGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24o
JmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQo
bV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAg
dW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTdGFja1Ns
b3RzQ29sbGVjdGlvbiBzdGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxl
Y3Rpb24oKnRoaXMpOyB9CisgICAgCisgICAgY2xhc3MgU3BlY2lhbHNDb2xsZWN0aW9uIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIFNwZWNpYWxzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQor
ICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzLnNpemUo
KTsgfQorICAgICAgICBTcGVjaWFsKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlLm1fc3BlY2lhbHNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFNwZWNpYWwqIG9wZXJh
dG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAg
ICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0
b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAg
ICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGl0ZXJhdG9yKGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5z
aWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24p
CisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBTcGVjaWFsKiBvcGVyYXRvciooKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3BlY2lh
bHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
aXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBj
b25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFNwZWNpYWxzQ29sbGVjdGlvbiBzcGVj
aWFscygpIGNvbnN0IHsgcmV0dXJuIFNwZWNpYWxzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAK
K3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNr
U2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBD
Q2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1f
bnVtR1BUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBzIHsgMCB9OworICAgIHVu
c2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fY2FsbEFyZ0FyZWFTaXpl
IHsgMCB9OworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsK
K307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUg
QWlyRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVy
aWNGcmVxdWVudGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQWlyRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgiCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCisjaW5jbHVkZSAi
QWlyU3BpbGxFdmVyeXRoaW5nLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRl
ICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgZ2VuZXJhdGUoQ29kZSYg
Y29kZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkK
KyAgICAgICAgdmFsaWRhdGUoY29kZSwgImluaXRpYWwiKTsKKworICAgIGlmIChzaG91bGREdW1w
SVIoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOworICAgICAgICBkYXRh
TG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgcnVuIG91ciBvcHRp
bWl6YXRpb25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCisgICAgLy8gRklYTUU6IEFkZCBBaXIgb3B0
aW1pemF0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNDU2CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHdvdWxkIGhhdmUgYSByZWFsIHJl
Z2lzdGVyIGFsbG9jYXRvci4gVGhlbiwgd2UgY291bGQgdXNlIHNwaWxsRXZlcnl0aGluZygpCisg
ICAgLy8gaW4gcGxhY2Ugb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBvbmx5IGZvciB0ZXN0aW5n
LgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNDU3CisgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOworCisgICAgLy8gUHJpb3IgdG8gdGhp
cyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2Vz
IGl0IGV4cGxpY2l0LiBJdCBhbHNvCisgICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3
aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCisgICAgaGFuZGxl
Q2FsbGVlU2F2ZXMoY29kZSk7CisKKyAgICAvLyBUaGlzIHR1cm5zIGFsbCBTdGFjayBhbmQgQ2Fs
bEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNlIHRoZSBmcmFtZSBwb2ludGVyLiBJdCBk
b2VzCisgICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxsb2NhdGluZyBzdGFjayBzbG90cy4gSXQg
c2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9wdGltYWwsIHNvIHdlCisgICAgLy8gc2hv
dWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2ZXJ5IG11Y2guCisgICAgYWxsb2NhdGVT
dGFjayhjb2RlKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGhhdmUgYSBjb2Rl
IGxheW91dCBvcHRpbWl6YXRpb24gaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc4CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIGxhdGUg
bGl2ZW5lc3MgYW5hbHlzaXMgb3ZlciByZWdpc3RlcnMgdG8gZmlsbCBpbiB0aGUKKyAgICAvLyBT
cGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUxMQorCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIo
KSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgImZpbmFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVt
cElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7Cisg
ICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJh
dGUgY29kZS4KKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuYWRkUHRy
KFRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CisKKyAgICBHZW5lcmF0aW9uQ29udGV4dCBjb250ZXh0OworICAgIGNv
bnRleHQuY29kZSA9IGNvZGU7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJz
OjpMYWJlbD4gYmxvY2tMYWJlbHMoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworCisg
ICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCwgQmFzaWNCbG9jayog
dGFyZ2V0KSB7CisgICAgICAgIGlmIChibG9ja0xhYmVsc1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAg
ICAgICAgICAgIGp1bXAubGlua1RvKGJsb2NrTGFiZWxzW3RhcmdldF0sICZqaXQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFw
cGVuZChqdW1wKTsKKyAgICB9OworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUp
IHsKKyAgICAgICAgYmxvY2tKdW1wc1tibG9ja10ubGluaygmaml0KTsKKyAgICAgICAgQVNTRVJU
KGJsb2NrLT5zaXplKCkgPj0gMSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
bG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
anVtcCA9IGluc3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChibG9jay0+bGFzdCgpLm9wY29kZSgpID09IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2Nr
LT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlKCkgPT0g
UmV0KSB7CisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBm
dWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bworICAgICAgICAgICAg
Ly8gaGF2ZSB0aGlzIG92ZXJyaWRlLgorICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9j
ay0+bGFzdCgpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIGZvciAoSW5zdCYgaW5z
dCA6ICpibG9jaykKKyAgICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRlKGppdCwgY29udGV4
dCk7CisgICAgICAgIHN3aXRjaCAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBj
YXNlIDA6CisgICAgICAgICAgICBBU1NFUlQoIWp1bXAuaXNTZXQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3Vj
Y2Vzc29yQmxvY2soMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAg
ICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxvY2soMSkgIT0gY29kZS5maW5kTmV4dEJsb2NrKGJs
b2NrKSkKKyAgICAgICAgICAgICAgICBsaW5rKGppdC5qdW1wKCksIGJsb2NrLT5zdWNjZXNzb3JC
bG9jaygxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQ
YXRocykKKyAgICAgICAgbGF0ZVBhdGgtPnJ1bihqaXQsIGNvbnRleHQpOworfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGVfaAorI2RlZmluZSBBaXJHZW5lcmF0
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0Nh
bGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29k
ZTsKKworLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFj
ayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CisvLyByZWdpc3RlciBh
bGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLCBhbmQgdGhlbiBnZW5lcmF0
ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuCisvLyBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5v
dGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBp
dCBpcworLy8gZ2VuZXJhdGluZy4KK3ZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYp
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5lcmF0aW9uQ29udGV4dF9o
CisjZGVmaW5lIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dCB7CisgICAg
dHlwZWRlZiB2b2lkIExhdGVQYXRoRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNv
bnRleHQmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8TGF0ZVBhdGhGdW5jdGlvbj4gTGF0ZVBh
dGg7CisKKyAgICBWZWN0b3I8UmVmUHRyPExhdGVQYXRoPj4gbGF0ZVBhdGhzOworICAgIENvZGUq
IGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNh
bGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNl
cnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBoYW5kbGVDYWxsZWVTYXZl
cyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiaGFuZGxl
Q2FsbGVlU2F2ZXMiKTsKKworICAgIFJlZ2lzdGVyU2V0IHVzZWRDYWxsZWVTYXZlczsKKworICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5z
dCA6ICpibG9jaykgeworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAg
ICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEF0IGZpcnN0
IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2VkIHJlZ3MuCisgICAgICAgICAgICAgICAgICAgIHVzZWRD
YWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIE5vdyB3ZSBmaWx0ZXIgdG8gcmVhbGx5IGdldCB0aGUgY2FsbGVl
IHNhdmVzLgorICAgIHVzZWRDYWxsZWVTYXZlcy5maWx0ZXIoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKSk7CisKKyAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSA9IFJlZ2lz
dGVyQXRPZmZzZXRMaXN0KHVzZWRDYWxsZWVTYXZlcyk7CisKKyAgICBzaXplX3QgYnl0ZVNpemUg
PSAwOworICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpLmZvckVhY2goCisgICAgICAgIFsm
XSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIHsKKyAgICAgICAgICAgIGJ5dGVTaXpl
ID0gc3RkOjptYXgoLWVudHJ5Lm9mZnNldCgpLCBieXRlU2l6ZSk7CisgICAgICAgIH0pOworCisg
ICAgU3RhY2tTbG90KiBzYXZlc0FyZWEgPSBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3Rh
Y2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdl
IGNvdWxkIGhhdmUgYWxyZWFkeSBwaW5uZWQgYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlz
CisgICAgLy8gYXJlYS4KKyAgICBzYXZlc0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUp
OworCisgICAgYXV0byBhcmdGb3IgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5
KSB7CisgICAgICAgIHJldHVybiBBcmc6OlN0YWNrKHNhdmVzQXJlYSwgZW50cnkub2Zmc2V0KCkg
KyBieXRlU2l6ZSk7CisgICAgfTsKKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29k
ZSk7CisgICAgCisgICAgLy8gRmlyc3QgaW5zZXJ0IHNhdmluZyBjb2RlIGluIHRoZSBwcm9sb2d1
ZS4KKyAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5mb3JFYWNoKAorICAgICAgICBbJl0g
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSB7CisgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgIDAsIGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3Zl
IDogTW92ZURvdWJsZSwgVG1wKGVudHJ5LnJlZygpKSwgYXJnRm9yKGVudHJ5KSk7CisgICAgICAg
IH0pOworICAgIGluc2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOworCisgICAgLy8gTm93IGlu
c2VydCByZXN0b3JlIGNvZGUgYXQgZXBpbG9ndWVzLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CisgICAgICAgIEluc3QmIGxhc3QgPSBibG9jay0+bGFzdCgpOworICAgICAg
ICBpZiAobGFzdC5vcGNvZGUoKSAhPSBSZXQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKS5mb3JFYWNoKAorICAgICAgICAgICAgWyZd
IChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgeworICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgIGJsb2NrLT5zaXplKCkgLSAxLCBl
bnRyeS5yZWcoKS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsCisgICAgICAgICAgICAgICAg
ICAgIGFyZ0ZvcihlbnRyeSksIFRtcChlbnRyeS5yZWcoKSkpOworICAgICAgICAgICAgfSk7Cisg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVT
YXZlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJI
YW5kbGVDYWxsZWVTYXZlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJIYW5k
bGVDYWxsZWVTYXZlc19oCisjZGVmaW5lIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBwaGFzZSBpZGVudGlmaWVzIGNhbGxlZS1z
YXZlIHJlZ2lzdGVycyBhbmQgYWRkcyBjb2RlIHRvIHNhdmUvcmVzdG9yZSB0aGVtIGluIHRoZQor
Ly8gcHJvbG9ndWUvZXBpbG9ndWUgdG8gdGhlIGNvZGUuIEl0J3MgYSBtYW5kYXRvcnkgcGhhc2Uu
CisKKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBjb29sIHRvIG1ha2UgdGhpcyBtb3JlIGludGVyYWN0
aXZlIHdpdGggdGhlIEFpciBjbGllbnQgYW5kIGFsc28gbW9yZQorLy8gcG93ZXJmdWwuCisvLyBX
ZSBzaG91bGQgaGF2ZSBzaHJpbmsgd3JhcHBpbmc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTA0NTgKKy8vIFdlIHNob3VsZCBtYWtlIHRoaXMgaW50ZXJhY3Qgd2l0
aCB0aGUgY2xpZW50OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
NDU5CisKK3ZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc2VydGlvblNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc2Vy
dGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBleGVjdXRlSW5zZXJ0
aW9ucyhibG9jay0+bV9pbnN0cywgbV9pbnNlcnRpb25zKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUg
QWlySW5zZXJ0aW9uU2V0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJ
bnN0LmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQ29kZTsKKwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxJ
bnN0PiBJbnNlcnRpb247CisKK2NsYXNzIEluc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgSW5z
ZXJ0aW9uU2V0KENvZGUmIGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgeworICAg
IH0KKworICAgIENvZGUmIGNvZGUoKSB7IHJldHVybiBtX2NvZGU7IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmRJbnNlcnRpb24oVCYmIGluc2VydGlvbikKKyAg
ICB7CisgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQoc3RkOjpmb3J3YXJkPFQ+KGluc2VydGlv
bikpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBpbnNl
cnRJbnN0KHNpemVfdCBpbmRleCwgSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBhcHBlbmRJ
bnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAg
ICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQg
aW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgaW5zZXJ0SW5zdChpbmRleCwgSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1
bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKwor
cHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9p
bnNlcnRpb25zOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckluc2VydGlvblNldF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYv
TGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCit2b2lkIEluc3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQob3Bjb2RlLCAiICIsIGxpc3REdW1wKGFyZ3MpLCAiICA7ICIsICpvcmlnaW4pOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RfaAorI2RlZmluZSBBaXJJbnN0X2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJP
cGNvZGUuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
K2NsYXNzIENDYWxsSGVscGVyczsKK2NsYXNzIFJlZ2lzdGVyU2V0OworCituYW1lc3BhY2UgQjMg
eworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9u
Q29udGV4dDsKKworc3RydWN0IEluc3QgeworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPEFy
ZywgMz4gQXJnTGlzdDsKKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbikK
KyAgICAgICAgOiBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAg
eworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
SW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBBcmcgYXJnLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgICAgICA6IGFyZ3N7IGFyZywgYXJndW1lbnRzLi4uIH0KKyAgICAgICAg
LCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0K
KworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3QgQXJnTGlzdCYg
YXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoYXJndW1lbnRzKQorICAgICAgICAsIG9yaWdpbihv
cmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5z
dChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQorICAg
ICAgICA6IGFyZ3MoV1RGOjptb3ZlKGFyZ3VtZW50cykpCisgICAgICAgICwgb3JpZ2luKG9yaWdp
bikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBOb3Rl
IHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3
YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAorICAgIC8vIGVkaXQgSVIuIElSIGlzIG1l
YW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0
JiIgdGhlbiB5b3UncmUKKyAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KKworICAgIC8v
IFRoaXMgb25seSB3YWxrcyB0aG9zZSBUbXBzIHRoYXQgYXJlIGV4cGxpY2l0bHkgbWVudGlvbmVk
LCBhbmQgaXQgZG9lc24ndCB0ZWxsIHlvdSB0aGVpciByb2xlCisgICAgLy8gb3IgdHlwZS4KKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZhc3QoY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoQXJnJiBhcmcgOiBhcmdz
KQorICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0KGZ1bmN0b3IpOworICAgIH0KKworICAg
IHR5cGVkZWYgdm9pZCBFYWNoQXJnQ2FsbGJhY2soQXJnJiwgQXJnOjpSb2xlLCBBcmc6OlR5cGUp
OworICAgIAorICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKGFyZywgcm9sZSwgdHlwZSku
IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJh
dG9yLnJiLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNo
QXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOworCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Ig
d2l0aCAodG1wLCByb2xlLCB0eXBlKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yRWFjaFRtcChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAg
ICAgZm9yRWFjaEFyZ1JvbGUoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcChy
b2xlLCB0eXBlLCBmdW5jdG9yKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIFRo
aW5nIGNhbiBiZSBlaXRoZXIgQXJnIG9yIFRtcC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGlu
ZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVu
Y3Rvcik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpbnN0cnVjdGlvbiBoYXMgYSBT
cGVjaWFsKi4gVGhpcyB1bmxvY2tzIHNvbWUgZXh0cmEgZnVuY3Rpb25hbGl0eS4KKyAgICBib29s
IGhhc1NwZWNpYWwoKSBjb25zdDsKKworICAgIC8vIFJlcG9ydHMgYW55IGFkZGl0aW9uYWwgcmVn
aXN0ZXJzIGNsb2JiZXJlZCBieSB0aGlzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IGZvciBlZmZpY2ll
bmN5LAorICAgIC8vIGV4dHJhQ2xvYmJlcmVkUmVncygpIG9ubHkgd29ya3MgaWYgaGFzU3BlY2lh
bCgpIHJldHVybnMgdHJ1ZS4KKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRS
ZWdzKCk7CisKKyAgICAvLyBVc2UgdGhpcyB0byByZXBvcnQgd2hpY2ggcmVnaXN0ZXJzIGFyZSBs
aXZlLiBUaGlzIHNob3VsZCBiZSBkb25lIGp1c3QgYmVmb3JlIGNvZGVnZW4uIE5vdGUKKyAgICAv
LyB0aGF0IGZvciBlZmZpY2llbmN5LCByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgb25seSB3b3JrcyBp
ZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVy
cyhjb25zdCBSZWdpc3RlclNldCYpOworCisgICAgLy8gSXMgdGhpcyBpbnN0cnVjdGlvbiBpbiBv
bmUgb2YgdGhlIHZhbGlkIGZvcm1zIHJpZ2h0IG5vdz8gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdl
bmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBpc1ZhbGlk
Rm9ybSgpOworCisgICAgLy8gQXNzdW1pbmcgdGhpcyBpbnN0cnVjdGlvbiBpcyBpbiBhIHZhbGlk
IGZvcm0gcmlnaHQgbm93LCB3aWxsIGl0IHN0aWxsIGJlIGluIG9uZSBvZiB0aGUgdmFsaWQKKyAg
ICAvLyBmb3JtcyBpZiB3ZSBwdXQgYW4gQWRkciByZWZlcmVuY2luZyB0aGUgc3RhY2sgKG9yIGEg
U3RhY2tTbG90IG9yIENhbGxBcmcsIG9mIGNvdXJzZSkgaW4gdGhlCisgICAgLy8gZ2l2ZW4gaW5k
ZXg/IFNwaWxsaW5nIHVzZXMgdGhpczogaXQgd2Fsa3MgdGhlIGFyZ3MgYnkgaW5kZXggdG8gZmlu
ZCBUbXBzIHRoYXQgbmVlZCBzcGlsbGluZzsKKyAgICAvLyBpZiBpdCBmaW5kcyBvbmUsIGl0IGNh
bGxzIHRoaXMgdG8gc2VlIGlmIGl0IGNhbiByZXBsYWNlIHRoZSBBcmc6OlRtcCB3aXRoIGFuIEFy
Zzo6QWRkci4gSWYgaXQKKyAgICAvLyBmaW5kcyBhIG5vbi1UbXAgQXJnLCB0aGVuIGl0IGNhbGxz
IHRoYXQgQXJnJ3MgZm9yRWFjaFRtcCB0byBkbyBhIHJlcGxhY2VtZW50IHRoYXQgd2F5LgorICAg
IC8vCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2Vu
ZXJhdG9yLnJiLgorICAgIGJvb2wgYWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpOworCisg
ICAgLy8gR2VuZXJhdGUgc29tZSBjb2RlIGZvciB0aGlzIGluc3RydWN0aW9uLiBUaGlzIGlzLCBs
aWtlLCBsaXRlcmFsbHkgb3VyIGJhY2tlbmQuIElmIHRoaXMgaXMgdGhlCisgICAgLy8gdGVybWlu
YWwsIGl0IHJldHVybnMgdGhlIGp1bXAgdGhhdCBuZWVkcyB0byBiZSBsaW5rZWQgZm9yIHRoZSAi
dGhlbiIgY2FzZSwgd2l0aCB0aGUgImVsc2UiCisgICAgLy8gY2FzZSBiZWluZyBmYWxsLXRocm91
Z2guIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5y
Yi4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiwgR2VuZXJh
dGlvbkNvbnRleHQmKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisg
ICAgQXJnTGlzdCBhcmdzOworICAgIFZhbHVlKiBvcmlnaW47IC8vIFRoZSBCMzo6VmFsdWUgdGhh
dCB0aGlzIG9yaWdpbmF0ZWQgZnJvbS4KKyAgICBPcGNvZGUgb3Bjb2RlOworfTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpckluc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJJbnN0SW5saW5lc19oCisjZGVmaW5lIEFpckluc3RJbmxpbmVzX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlVXRp
bHMuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFscy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZvckVhY2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPFRtcD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBpbnN0LmZvckVhY2hUbXAoZnVuY3Rvcik7CisgICAgfQorfTsK
K3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8QXJnPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgZm9y
RWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JF
YWNoKCp0aGlzLCBmdW5jdG9yKTsKK30KKworYm9vbCBJbnN0OjpoYXNTcGVjaWFsKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gYXJncy5zaXplKCkgJiYgYXJnc1swXS5pc1NwZWNpYWwoKTsKK30KKwor
Y29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncygpCit7CisgICAgQVNT
RVJUKGhhc1NwZWNpYWwoKSk7CisgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUNs
b2JiZXJlZFJlZ3MoKnRoaXMpOworfQorCit2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMo
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgQVNTRVJUKGhhc1NwZWNp
YWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdpc3RlcnMoKnRoaXMs
IHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1NoaWZ0VmFsaWQoSW5zdCYgaW5z
dCkKK3sKKyNpZiBDUFUoWDg2KQorICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJl
Z2lzdGVyOjpjeCk7CisjZWxzZQorICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9ICAgCisKK2lu
bGluZSBib29sIGlzTHNoaWZ0MzJWYWx1ZShJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1No
aWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0SW5saW5lc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVzc19oCisjZGVmaW5lIEFpckxp
dmVuZXNzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2Nr
LmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBZb3Ug
Y2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVyIEFyZydzLiBJZiB5b3UgY29t
cHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNrIGxpdmVuZXNzIGFuZCB0bXAg
bGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNzIExpdmVuZXNzIHsKK3B1
YmxpYzoKKyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsKKyAgICAgICAgbV9saXZlQXRI
ZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2ZUF0VGFpbC5yZXNpemUoY29k
ZS5zaXplKCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IHNlZW47CisKKyAgICAg
ICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNoYW5nZWQpIHsKKyAgICAg
ICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJ
bmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIExv
Y2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCisgICAgICAgICAg
ICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAg
ICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1fbGl2ZUF0SGVhZFti
bG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNz
b3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZl
QXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbENh
bGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5kKCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdID0gbG9jYWxDYWxjLnRh
a2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBI
YXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKworICAgIGNvbnN0
IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107CisgICAgfQorCisgICAgLy8g
VGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJzZS4KKyAgICBjbGFzcyBMb2Nh
bENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxjKExpdmVuZXNzJiBsaXZlbmVz
cywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1fbGl2ZShsaXZlbmVzcy5saXZl
QXRUYWlsKGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgSGFz
aFNldDxUaGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xpdmU7IH0KKyAgICAgICAgSGFz
aFNldDxUaGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6bW92ZShtX2xpdmUpOyB9CisK
KyAgICAgICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4o
CisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJn
OjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKGFyZyk7
CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5leHQgaGFuZGxlIGNsb2Ji
ZXJlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5oYXNTcGVjaWFsKCkpIHsKKyAg
ICAgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2goCisgICAgICAg
ICAgICAgICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAg
bV9saXZlLnJlbW92ZShUaGluZyhUbXAocmVnKSkpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaW5h
bGx5IGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCisgICAg
ICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBl
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uo
cm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUuYWRkKGFyZyk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhc2hTZXQ8
VGhpbmc+IG1fbGl2ZTsKKyAgICB9OworICAgIAorcHJpdmF0ZToKKyAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJhc2lj
QmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdFRhaWw7Cit9OworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0
IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFN5bGxhYnVzOgor
IworIyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9PiB1c2Ugb2YgYSBnZW5lcmFsLXB1cnBvc2Ug
cmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdp
c3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQgZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3Nl
IHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ugb2YgYSBmbG9hdCByZWdpc3RlciBvciB2
YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RiA9
PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjCisjIEFyZ3VtZW50
IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJlZ2lzdGVyCisjIEltbSA9PiAzMi1iaXQg
aW1tZWRpYXRlIGludAorIyBJbW02NCA9PiBUcnVzdGVkSW1tNjQKKyMgQWRkciA9PiBhZGRyZXNz
IGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJl
c3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVzcworIworIyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNl
IHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVuZGVyc3RhbmRzIHRoYXQgdGhleSBmYWxsIGludG8g
dHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhpbmdzLiBTbywgYWx0aG91Z2ggdGhpcyBmaWxl
IHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0aW9uIHN0eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNw
YWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJlIG1lYW5pbmdmdWwgdG8gdGhlIHBhcnNlci4gRm9y
IGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKyMKKyMgRm9vNDIgVTpHLCBVRDpGIEltbSwgVG1w
IEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBhcnNlciB3b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0
aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBVRDpGCisjICAgICBJbW0sIFRtcAorIyAgICAg
QWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28tZm9ybSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBH
UFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQgdXNlcytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisK
KyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRk
MzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFz
IGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisKK05vcAorCitBZGQzMiBVOkcsIFVEOkcK
KyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgVG1wCisgICAgQWRkciwgVG1w
CisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRtcCwgVG1w
CisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBUbXAs
IEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworTHNoaWZ0MzIgVTpHLCBVRDpH
CisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1w
LCBUbXAKKyAgICBBZGRyLCBUbXAKKworTW92ZSBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAg
SW1tLCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWQgIyBUaGlzIG1l
YW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90
ICJtb3ZlIi4KKyAgICBUbXAsIEFkZHIgYXMgc3RvcmUKKworTW92ZURvdWJsZSBVOkYsIEQ6Rgor
ICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIg
YXMgc3RvcmVEb3VibGUKKworTW92ZTY0VG9Eb3VibGUgVTpHLCBEOkYKKyAgICBUbXAsIFRtcAor
CitNb3ZlRG91YmxlVG82NCBVOkYsIEQ6RworICAgIFRtcCwgVG1wCisKK0JyYW5jaEFkZDMyIFU6
RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQs
IEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRy
CisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE11bDMyIFU6RywgVTpHLCBVRDpHIC9i
cmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitC
cmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAK
KyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0Nv
bmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hOZWczMiBVOkcs
IFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcAorCitKdW1wIC9icmFuY2gKKworUmV0IC90
ZXJtaW5hbAorCitCcmVha3BvaW50IC90ZXJtaW5hbAorCisjIEFpciBhbGxvd3MgZm9yIGV4b3Rp
YyBiZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkg
dGhlIFNwZWNpYWwgb3BlcmFuZCwKKyMgd2hpY2ggbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4K
K3NwZWNpYWwgUGF0Y2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQ
aGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclBoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisj
aW5jbHVkZSAiQjNDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKENvZGUmIGNvZGUsIGNvbnN0
IGNoYXIqIG5hbWUpCisgICAgOiBtX2NvZGUoY29kZSkKKyAgICAsIG1fbmFtZShuYW1lKQorewor
ICAgIGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkFp
ciBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0K
KworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZv
cmUgPSB0b0NTdHJpbmcoY29kZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sK
KyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRl
KGNvZGUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQWlyUGhhc2VT
Y29wZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
Y2xhc3MgQ29kZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShDb2RlJiwgY29uc3QgY2hh
ciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKwor
cHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAg
IENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclBoYXNlU2Nv
cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJp
b3JpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UmVnaXN0ZXJQcmlvcml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQUlJlZz4mIGdwc0luUHJpb3JpdHlPcmRlcigp
Cit7CisgICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAg
ICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8R1BSUmVnPigpOworICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnOjphbGxHUFJzKCk7CisgICAgICAgICAgICBh
bGwuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBh
bGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAgICAg
ICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9y
IChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJl
ZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBW
ZWN0b3I8RlBSUmVnPiYgZnBzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVjdG9y
PEZQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBz
dGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAg
cmVzdWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBh
bGwgPSBSZWc6OmFsbEZQUnMoKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUg
PSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgZm9yIChS
ZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcp
KQorICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogYWxsKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+
YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOworICAgIHJldHVy
biAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihB
cmc6OlR5cGUgdHlwZSkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPFJlZz4qIHJlc3VsdFtBcmc6Om51
bVR5cGVzXTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxf
b25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0W0Fy
Zzo6R1BdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEdQUlJlZyByZWcg
OiBncHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1Bd
LT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdID0gbmV3IFZl
Y3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcHJzSW5Qcmlvcml0
eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdLT5hcHBlbmQoUmVnKHJl
ZykpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdFt0eXBlXTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJS
ZWdpc3RlclByaW9yaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lz
dGVyUHJpb3JpdHlfaAorI2RlZmluZSBBaXJSZWdpc3RlclByaW9yaXR5X2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisj
aW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BS
UmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpOworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJ
blByaW9yaXR5T3JkZXIoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4gc3RydWN0IFJlZ2lz
dGVyc0luUHJpb3JpdHlPcmRlcjsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3Jp
dHlPcmRlcjxHUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEdQUlJlZz4mIGluUHJpb3JpdHlP
cmRlcigpIHsgcmV0dXJuIGdwc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OwordGVtcGxhdGU8PiBz
dHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0
b3I8RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZnBzSW5Qcmlvcml0eU9yZGVy
KCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+Citjb25zdCBWZWN0b3I8QmFuazo6
UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgcmV0dXJuIFJlZ2lz
dGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7Cit9CisKK2NvbnN0
IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJSZWdpc3RlclByaW9yaXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworU3BlY2lhbDo6U3BlY2lh
bCgpCisgICAgOiBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVjaWFsOjp+U3BlY2lhbCgp
Cit7Cit9CisKK0NTdHJpbmcgU3BlY2lhbDo6bmFtZSgpIGNvbnN0Cit7CisgICAgU3RyaW5nUHJp
bnRTdHJlYW0gb3V0OworICAgIGR1bXBJbXBsKG91dCk7CisgICAgcmV0dXJuIG91dC50b0NTdHJp
bmcoKTsKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgpOworICAgIGR1bXBJbXBsKG91dCk7CisgICAgaWYg
KG1faW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludChtX2luZGV4KTsKK30KKwor
dm9pZCBTcGVjaWFsOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgqdGhpcywgIjogIik7CisgICAgZGVlcER1bXBJbXBsKG91dCk7Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNwZWNpYWxf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3RydWN0
IEdlbmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiJiI7CisgICAg
CisgICAgU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflNwZWNpYWwoKTsKKworICAgIENTdHJpbmcg
bmFtZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0
IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1YWwg
Ym9vbCBpc1ZhbGlkKEluc3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNrKElu
c3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgPSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCBv
biBmb3IgZWFjaCBJbnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVyZSBp
cyBubyB3YXkgdG8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2VkIGZy
b20ganVzdCBvbmUgSW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywKKyAg
ICAvLyBpZiB5b3Ugd2FudCB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5lcmF0
ZSgpLCB0aGVuIHlvdSBoYXZlIHRvIGVpdGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVyYXRl
IEFpciB0aGF0IHN0YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5zdCwg
YW5kIHRoZW4gbWVyZ2UKKyAgICAvLyAgICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBwcm9i
YWJseSBub3QgZ3JlYXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0aGF0
CisgICAgLy8gICAgQWlyIGRpZG4ndCBkdXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVwbGlj
YXRpb24gZGlkbid0IGNhdXNlIGFueSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8gICAg
cmVnaXN0ZXIgYXNzaWdubWVudC4KKyAgICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNpYWwg
bWFpbnRhaW4gYSBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVjYXVz
ZSB0aGUgYW5hbHlzaXMKKyAgICAvLyAgICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlzIHBl
cmZvcm1lZCBqdXN0IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdheQor
ICAgIC8vICAgIGZvciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRvIGJl
IHJlYWxsb2NhdGVkLiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29uc3Vs
dCB0aGUgSGFzaE1hcC4KKyAgICAvLworICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVzZSAo
MSkgYW5kIGZpcmUgdXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisgICAg
Ly8KKyAgICAvLyBOb3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBvcnRV
c2VkUmVnaXN0ZXJzKCkgYmVpbmcgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8gYXMg
Z2VuZXJhdGUoKS4gSWYgd2UgY291bGQgcmVseSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1c3Qg
aGF2ZSBlYWNoIFNwZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBvZiBS
ZWdpc3RlclNldCdzIGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0IG9y
ZGVyIGluCisgICAgLy8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5jZSBp
cyB1bmxpa2VseSB0byBjaGFuZ2Ugc2luY2UgaXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBwZXJm
b3JtYW5jZSBvZiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJyZW50
bHksIHdlIGRvICgxKSBmb3IgQjMgc3RhY2ttYXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRV
c2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAgICB2
aXJ0dWFsIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwg
R2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0
JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpID0gMDsKKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
cHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0
ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qg
PSAwOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgY29uc3QgY2hh
ciogbV9uYW1lOworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3BlY2lh
bER1bXAgeworcHVibGljOgorICAgIERlZXBTcGVjaWFsRHVtcChjb25zdCBTcGVjaWFsKiBzcGVj
aWFsKQorICAgICAgICA6IG1fc3BlY2lhbChzcGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nw
ZWNpYWwpCisgICAgICAgICAgICBtX3NwZWNpYWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIGNvbnN0IFNwZWNpYWwqIG1fc3BlY2lhbDsKK307CisKK2lubGluZSBEZWVwU3BlY2lhbER1
bXAgZGVlcER1bXAoY29uc3QgU3BlY2lhbCogc3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVlcFNw
ZWNpYWxEdW1wKHNwZWNpYWwpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZl
cnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25T
ZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYg
Y29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNwaWxsRXZlcnl0aGlu
ZyIpOworCisgICAgLy8gV2Ugd2FudCB0byBrbm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQg
YXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFzaWMgYmxvY2suCisgICAgSW5kZXhNYXA8QmFzaWNC
bG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7Cisg
ICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgIHVzZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6ZShi
bG9jay0+c2l6ZSgpICsgMSk7CisKKyAgICAgICAgYXV0byBzZXRVc2VkUmVnaXN0ZXJzID0gWyZd
ICh1bnNpZ25lZCBpbmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVzZWRS
ZWdpc3RlcnNbYmxvY2tdW2luZGV4XTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2Fs
Q2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgICAgIHNldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIHNldFVzZWRSZWdpc3RlcnMoYmxvY2stPnNpemUoKSk7CisgICAgICAgIAor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRl
eC0tOykgeworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRl
eCkpOworICAgICAgICAgICAgc2V0VXNlZHJlZ2lzdGVycyhpbnN0SW5kZXgpOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KKyAg
ICBWZWN0b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6Om51bVR5cGVzXTsKKyAgICBm
b3IgKHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsr
dHlwZUluZGV4KSB7CisgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFs
bFN0YWNrU2xvdHNbdHlwZUluZGV4XTsKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNf
Y2FzdDxBcmc6OlR5cGU+KHR5cGVJbmRleCk7CisgICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNv
ZGUubnVtVG1wcyh0eXBlKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2Rl
Lm51bVRtcHModHlwZSk7IHRtcEluZGV4LS07KQorICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJ
bmRleF0gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOwor
ICAgIH0KKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5k
ZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQmIHNldEJlZm9yZSA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJ
bmRleF07CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJz
W2Jsb2NrXVtpbnN0SW5kZXggKyAxXTsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+
YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAg
ICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0g
YWxsU3RhY2tTbG90c1t0eXBlXVt0bXAudG1wSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAg
IEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdCk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gTmVlZCB0byBmaWd1cmUgb3V0IGEgcmVnaXN0ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBk
ZXBlbmRzIG9uIHRoZSByb2xlLgorICAgICAgICAgICAgICAgICAgICBSZWcgY2hvc2VuUmVnOwor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OlVzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJl
Z3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
b3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Q
cmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
ZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRB
ZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVn
ID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVz
ZURlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9y
aXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJl
Zm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRChjaG9z
ZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOworCisg
ICAgICAgICAgICAgICAgICAgIE9wY29kZSBtb3ZlID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6
IE1vdmVEb3VibGUKKworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRt
cCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNEZWYocm9sZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5z
dC5vcmlnaW4sIHRtcCwgYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsK
KyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNw
aWxsRXZlcnl0aGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorI2RlZmluZSBBaXJTcGlsbEV2ZXJ5dGhpbmdf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGlzIGEgcGhhc2UgZm9y
IHRlc3RpbmcuIEl0IGJlaGF2ZXMgbGlrZSBhIHJlZ2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vu
c2UgdGhhdCBpdAorLy8gZWxpbWluYXRlcyB0ZW1wb3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJ
dCBhY2NvbXBsaXNoZXMgdGhpcyBieSBhbHdheXMgc3BpbGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmll
cy4gVGhlIHJlc3VsdGluZyBjb2RlIGlzIGdvaW5nIHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRo
aXMgcGhhc2UgaXMgZ3JlYXQgaWYgeW91CisvLyB0aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGlu
IHRoZSByZWdpc3RlciBhbGxvY2F0b3IuIFlvdSBjYW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcg
dGhpcworLy8gcGhhc2UgaW5zdGVhZCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8v
IE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGlzIHBoYXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5n
IHBvc3NpYmxlLCBpdCdzIG5vdCBldmVuIHdyaXR0ZW4gaW4gYQorLy8gcGFydGljdWxhcmx5IGVm
ZmljaWVudCB3YXkuIFNvLCBkb24ndCBnZXQgYW55IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhh
c2UgdG8gcmVkdWNlIGNvbXBpbGVyCisvLyBsYXRlbmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRo
YXQsIHlvdSBzaG91bGQgY29tZSB1cCB3aXRoIGEgY2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9m
IHVzaW5nCisvLyB0aGlzIHNpbGx5IHRoaW5nLgorCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2Rl
Jik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclN0YWNr
U2xvdC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
Cit2b2lkIFN0YWNrU2xvdDo6c2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQoreworICAg
IG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG1fdmFs
dWUtPm1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFjayIsIG1faW5kZXgp
OworfQorCit2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJv
bUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworICAgIGlmICht
X3ZhbHVlKQorICAgICAgICBvdXQucHJpbnQoIiwgdmFsdWUgPSAiLCAqbV92YWx1ZSk7Cit9CisK
K1N0YWNrU2xvdDo6U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwg
U3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCisgICAgOiBtX2J5dGVT
aXplKGJ5dGVTaXplKQorICAgICwgbV9pbmRleChpbmRleCkKKyAgICAsIG1fb2Zmc2V0RnJvbUZQ
KHZhbHVlLT5vZmZzZXRGcm9tRlAoKSkKKyAgICAsIG1fa2luZChraW5kKQorICAgICwgbV92YWx1
ZSh2YWx1ZSkKK3sKKyAgICBBU1NFUlQoYnl0ZVNpemUpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpclN0YWNrU2xvdF9oCisjZGVmaW5lIEFpclN0YWNrU2xvdF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisj
aW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFN0YWNrU2xvdFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xh
c3MgU3RhY2tTbG90IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGFja1Nsb3QpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVuc2lnbmVkIGJ5dGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQorCisgICAgdW5zaWduZWQgYWxpZ25tZW50KCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDEpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMikKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAg
ICBpZiAoYnl0ZVNpemUoKSA8PSA0KQorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIHJl
dHVybiA4OworICAgIH0KKworICAgIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKworICAgIC8vIFplcm8gbWVhbnMgdGhhdCBpdCdzIG5vdCB5ZXQgYXNz
aWduZWQuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZz
ZXRGcm9tRlA7IH0KKworICAgIC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkganVzdCBiZSBjYWxsZWQg
ZnJvbSBwaGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uLiBCdXQgeW91IGNhbgorICAgIC8v
IHRvdGFsbHkgZm9yY2UgYSBzdGFjayBzbG90IHRvIGxhbmQgYXQgc29tZSBvZmZzZXQuCisgICAg
dm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QpOworCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgU3RhY2tTbG90KHVuc2lnbmVk
IGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUq
KTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7
CisgICAgU3RhY2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3RhY2tTbG90
RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoY29uc3QgU3RhY2tTbG90KiBz
bG90KQorICAgICAgICA6IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisg
ICAgICAgICAgICBtX3Nsb3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFN0
YWNrU2xvdCogbV9zbG90OworfTsKKworaW5saW5lIERlZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1w
KGNvbnN0IFN0YWNrU2xvdCogc2xvdCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAo
c2xvdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTdGFja1Nsb3RfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
Cit2b2lkIFRtcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRo
aXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGlmIChpc1JlZygpKSB7CisgICAgICAgIG91dC5wcmludChyZWcoKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNHUCgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiJXRtcCIsIGdwVG1wSW5kZXgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBv
dXQucHJpbnQoIiVmdG1wIiwgZnBUbXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJUbXBfaAorI2RlZmluZSBBaXJUbXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiUmVnLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBBcmc7CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6
YXRpb24gb2YgYSByZWdpc3Rlci4gSXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBv
ciBGUFIuIEl0IGNhbiBhbHNvCisvLyBiZSB1c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVk
IHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9yYXJ5KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1
c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJzZSBuYW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvIHVz
ZSB0aGlzIG5hbWUgYSBsb3QuCisKK2NsYXNzIFRtcCB7CitwdWJsaWM6CisgICAgVG1wKCkKKyAg
ICAgICAgOiBtX3ZhbHVlKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChSZWcg
cmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJlZykgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQ
UigpKQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVHUFIocmVnLmdwcigpKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJlZy5m
cHIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV92YWx1ZSA9IDA7CisgICAgfQor
CisgICAgZXhwbGljaXQgVG1wKGNvbnN0IEFyZyYpOworCisgICAgc3RhdGljIFRtcCBncFRtcEZv
ckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVHUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVkIGlu
ZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUg
PSBlbmNvZGVGUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQor
CisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRH
UChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNHUFIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0Vu
Y29kZWRGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNHUFIoKSB8fCBpc0ZQUigpOworICAgIH0KKworICAgIEdQUlJl
ZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQUihtX3ZhbHVlKTsK
KyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBk
ZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwcigpOworICAgICAgICBy
ZXR1cm4gZnByKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNUbXBJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gIWlzUmVnKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJ
bmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1ZSk7
CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1w
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJl
dHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIHJldHVybiBmcFRtcEluZGV4KCk7CisgICAgfQor
CisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhISp0aGlz
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUbXAmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3Q7CisKKyAgICBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKQorICAgICAgICA6IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gVG1wKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50Pjo6aGFzaChtX3ZhbHVlKTsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQg
ZW5jb2RlRlAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBpbmRl
eDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lz
dGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisg
ICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0
RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQVG1wKHVuc2ln
bmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxl
cjo6bGFzdFJlZ2lzdGVyKCkpICsgMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQg
ZW5jb2RlRlBUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2Rl
RlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEgLSBpbmRleDsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUChpbnQgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWUgPiAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQ
KGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA8IDA7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNzZW1i
bGVyOjpsYXN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVk
RlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkg
JiYgdmFsdWUgPj0gZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRHUFIodmFs
dWUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEZQ
Uih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVuY29kZUdQ
UihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxlcjo6Zmly
c3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQUihpbnQg
dmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KAorICAgICAgICAgICAgKGVuY29kZUZQUihN
YWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGlj
IHVuc2lnbmVkIGRlY29kZUdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c0VuY29kZWRHUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5jb2RlR1BS
KE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdW5zaWduZWQgZGVjb2RlRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzRW5jb2RlZEZQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBSKE1hY3Jv
QXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQorCisgICAg
Ly8gMDogZW1wdHkgVG1wCisgICAgLy8gcG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1AgdGVtcHMu
CisgICAgLy8gbmVnYXRpdmU6IEZQUnMgYW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50IG1fdmFs
dWU7Cit9OworCitzdHJ1Y3QgVG1wSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgVG1wJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBUbXAmIGEsIGNvbnN0IFRtcCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCituYW1lc3BhY2UgV1RGIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1
Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6QWlyOjpUbXA+IHsKKyAgICB0eXBlZGVmIEpTQzo6QjM6
OkFpcjo6VG1wSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhh
c2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1w
PiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OlRtcD4geyB9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJUbXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBJbmxpbmVz
X2gKKyNkZWZpbmUgQWlyVG1wSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworaW5saW5lIFRtcDo6VG1wKGNvbnN0IEFy
ZyYgYXJnKQoreworICAgICp0aGlzID0gYXJnLnRtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyVG1wSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFZhbGlkYXRlciB7CitwdWJs
aWM6CisgICAgVmFsaWRhdGVyKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNo
YXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV93aGVu
KHdoZW4pCisgICAgICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0K
KworI2RlZmluZSBWQUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBmYWlsKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2Nv
bmRpdGlvbiwgdG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisgICAg
CisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiB2YWxp
ZFNsb3RzOworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiB2YWxpZEJsb2NrczsKKyAgICAg
ICAgSGFzaFNldDxTcGVjaWFsKj4gdmFsaWRTcGVjaWFsczsKKworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9jb2RlKQorICAgICAgICAgICAgdmFsaWRCbG9ja3MuYWRkKGJsb2Nr
KTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBtX2NvZGUuc3RhY2tTbG90cygpKQor
ICAgICAgICAgICAgdmFsaWRTbG90cy5hZGQoc2xvdCk7CisgICAgICAgIGZvciAoU3BlY2lhbCog
c3BlY2lhbCA6IG1fY29kZS5zcGVjaWFscygpKQorICAgICAgICAgICAgdmFsaWRTcGVjaWFscy5h
ZGQoc3BlY2lhbCk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkg
eworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBi
bG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgICAgIEluc3QmIGluc3Qg
PSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDog
aW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsaWRTbG90cy5jb250YWlucyhhcmcuc3RhY2tTbG90KCkpLCAoIkF0ICIsIGlu
c3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBjYXNlIFNwZWNpYWw6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNw
ZWNpYWxzLmNvbnRhaW5zKGFyZy5zcGVjaWFsKCkpLCAoIkF0ICIsIGluc3QpKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFZB
TElEQVRFKGluc3QuaXNWYWxpZEZvcm0oKSwgKCJBdCAiLCBpbnN0KSk7CisgICAgICAgICAgICAg
ICAgaWYgKGluc3RJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoaXNUZXJtaW5hbChpbnN0Lm9wY29kZSgpKSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29k
ZSgpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvciA6IGJsb2NrLT5zdWNjZXNzb3JzKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
aWRCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJBdCAiLCAqYmxvY2spKTsKKyAgICAgICAg
fQorICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNoYXIq
IGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNo
YXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAgICAg
Q1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nUHJp
bnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJBSVIgVkFMSURBVElPTiBGQUlM
VVJFXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGNvbmRpdGlvbiwgIiAoIiwg
ZmlsZW5hbWUsICI6IiwgbGluZU51bWJlciwgIilcbiIpOworICAgICAgICAgICAgb3V0LnByaW50
KCIgICAgIiwgbWVzc2FnZSwgIlxuIik7CisgICAgICAgICAgICBpZiAobV93aGVuKQorICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiICAgIER1cmluZyAiLCBtX3doZW4sICJcbiIpOworICAgICAg
ICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKworICAg
ICAgICBvdXQucHJpbnQoZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBpZiAobV9kdW1wQmVmb3Jl
KSB7CisgICAgICAgICAgICBvdXQucHJpbnQoIkJlZm9yZSAiLCB3aGVuLCAiOlxuIik7CisgICAg
ICAgICAgICBvdXQucHJpbnQobV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAgICAgICBvdXQu
cHJpbnQoIkF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgICAgICBvdXQucHJpbnQobV9jb2Rl
KTsKKworICAgICAgICBvdXQucHJpbnQoZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBXVEZSZXBv
cnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5jdGlvbiwgY29uZGl0
aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgQ29kZSYgbV9jb2RlOwor
ICAgIGNvbnN0IGNoYXIqIG1fd2hlbjsKKyAgICBjb25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7Cit9
OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxpZGF0ZShDb2RlJiBjb2Rl
LCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQoreworICAgIFZhbGlk
YXRlciB2YWxpZGF0ZXIoY29kZSwgd2hlbiwgZHVtcEJlZm9yZSk7CisgICAgdmFsaWRhdGVyLnJ1
bigpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZh
bGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJW
YWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJWYWxpZGF0ZV9o
CisjZGVmaW5lIEFpclZhbGlkYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKwor
dm9pZCB2YWxpZGF0ZShDb2RlJiwgY29uc3QgY2hhciogd2hlbiA9IG51bGxwdHIsIGNvbnN0IGNo
YXIqIGR1bXBCZWZvcmUgPSBudWxscHRyKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclZhbGlkYXRl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9y
LnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dl
bmVyYXRvci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
b3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1NSBAQAorIyEv
dXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CityZXF1aXJlICJwYXRobmFtZSIKKworY2xhc3MgT3Bjb2RlCisgICAgYXR0cl9yZWFkZXIgOm5h
bWUsIDpzcGVjaWFsLCA6b3ZlcmxvYWRzCisgICAgYXR0cl9hY2Nlc3NvciA6a2luZAorCisgICAg
ZGVmIGluaXRpYWxpemUobmFtZSwgc3BlY2lhbCkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAg
ICAgIEBzcGVjaWFsID0gc3BlY2lhbAorICAgICAgICBAa2luZCA9IDppbnN0CisgICAgICAgIHVu
bGVzcyBzcGVjaWFsCisgICAgICAgICAgICBAb3ZlcmxvYWRzID0gW10KKyAgICAgICAgZW5kCisg
ICAgZW5kCisKKyAgICBkZWYgbWFzbU5hbWUKKyAgICAgICAgbmFtZVswXS5kb3duY2FzZSArIG5h
bWVbMS4uLTFdCisgICAgZW5kCitlbmQKKworY2xhc3MgQXJnCisgICAgYXR0cl9yZWFkZXIgOnJv
bGUsIDp0eXBlCisKKyAgICBkZWYgaW5pdGlhbGl6ZShyb2xlLCB0eXBlKQorICAgICAgICBAcm9s
ZSA9IHJvbGUKKyAgICAgICAgQHR5cGUgPSB0eXBlCisgICAgZW5kCitlbmQKKworY2xhc3MgT3Zl
cmxvYWQKKyAgICBhdHRyX3JlYWRlciA6c2lnbmF0dXJlLCA6Zm9ybXMKKworICAgIGRlZiBpbml0
aWFsaXplKHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAgIEBzaWduYXR1cmUgPSBzaWduYXR1cmUK
KyAgICAgICAgQGZvcm1zID0gZm9ybXMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBLaW5kCisgICAg
YXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX2FjY2Vzc29yIDpzcGVjaWFsCisKKyAgICBkZWYg
aW5pdGlhbGl6ZShuYW1lKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwg
PSBmYWxzZQorICAgIGVuZAorCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5p
c19hPyBTdHJpbmcKKyAgICAgICAgICAgIEBuYW1lID09IG90aGVyCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIEBuYW1lID09IG90aGVyLm5hbWUgYW5kIEBzcGVjaWFsID09IG90aGVyLnNwZWNp
YWwKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgS2luZC5hcmdLaW5kcyhraW5kKQor
ICAgICAgICBpZiBraW5kID09ICJBZGRyIgorICAgICAgICAgICAgWyJBZGRyIiwgIlN0YWNrU2xv
dCIsICJDYWxsQXJnIl0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW2tpbmRdCisgICAgICAg
IGVuZAorICAgIGVuZAorCisgICAgZGVmIGFyZ0tpbmRzCisgICAgICAgIEtpbmQuYXJnS2luZHMo
a2luZCkKKyAgICBlbmQKK2VuZAorCitjbGFzcyBGb3JtCisgICAgYXR0cl9yZWFkZXIgOmtpbmRz
LCA6YWx0TmFtZQorCisgICAgZGVmIGluaXRpYWxpemUoa2luZHMsIGFsdE5hbWUpCisgICAgICAg
IEBraW5kcyA9IGtpbmRzCisgICAgICAgIEBhbHROYW1lID0gYWx0TmFtZQorICAgIGVuZAorZW5k
CisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIK
KyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAgICAg
QGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisg
ICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51
bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3Jp
Z2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisg
ICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZworICAgIGVu
ZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4K
KyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAg
ZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisgICAgCisg
ICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisg
ICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNv
bW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tj
b21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZp
bGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3Vs
dCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAg
ICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAgICAgICAj
IGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAgIyBuZXds
aW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9c
QShbYS16QS1aMC05X10rKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2lu
Lm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJd
KykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVss
OipcL10vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5h
bWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxl
eGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlcikudG9fc30sIHVu
ZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9IgorICAgICAgICBlbmQKKyAg
ICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJlc3VsdAorZW5kCisKK2Rl
ZiBpc1VEKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVSl8KEQpfChVRCkpXFovCitlbmQKKwor
ZGVmIGlzR0YodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChHKXwoRikpXFovCitlbmQKKworZGVm
IGlzS2luZCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEltbTY0KXwoQWRk
cil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpKVxaLworZW5kCisKK2RlZiBpc0tleXdvcmQo
dG9rZW4pCisgICAgaXNVRCh0b2tlbikgb3IgaXNHRih0b2tlbikgb3IgaXNLaW5kKHRva2VuKSBv
cgorICAgICAgICB0b2tlbiA9PSAic3BlY2lhbCIgb3IgdG9rZW4gPT0gImFzIgorZW5kCisKK2Rl
ZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKFthLXpBLVowLTlfXSspXFov
IGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBp
bml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZp
bGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAg
ICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBp
ZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAg
IGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJh
aXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFsw
XX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29u
c3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVu
bGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVm
IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAg
ICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihy
ZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBk
ZWYgY29uc3VtZVJvbGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBh
cnNlRXJyb3IoIkV4cGVjdGVkIHJvbGUgKFUsIEQsIG9yIFVEKSIpIHVubGVzcyBpc1VEKHJlc3Vs
dCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBj
b25zdW1lVHlwZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VF
cnJvcigiRXhwZWN0ZWQgdHlwZSAoRyBvciBGKSIpIHVubGVzcyBpc0dGKHJlc3VsdCkKKyAgICAg
ICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lS2lu
ZAorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhw
ZWN0ZWQga2luZCAoSW1tLCBJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgb3IgUmVz
Q29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICBy
ZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICByZXN1bHQgPSB7fQorICAg
ICAgICAKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tl
bnMubGVuZ3RoCisKKyAgICAgICAgICAgIGlmIHRva2VuID09ICJzcGVjaWFsIgorICAgICAgICAg
ICAgICAgIGNvbnN1bWUoInNwZWNpYWwiKQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBj
b25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92
ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKworICAgICAg
ICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgdHJ1
ZSkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3Vt
ZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorICAg
ICAgICAgICAgICAgICAgICBvcGNvZGUgPSByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBp
ZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgb3Bjb2RlID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCBmYWxzZSkKKyAgICAgICAgICAgICAg
ICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gb3Bjb2RlCisgICAgICAgICAgICAgICAgZW5kCisK
KyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBbXQorICAgICAgICAgICAgICAgIGZvcm1zID0g
W10KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBpc1VEKHRva2VuKQorICAg
ICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSBj
b25zdW1lUm9sZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiOiIpCisgICAgICAg
ICAgICAgICAgICAgICAgICB0eXBlID0gY29uc3VtZVR5cGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIDw8IEFyZy5uZXcocm9sZSwg
dHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Vt
ZSgiLCIpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmQKKworICAg
ICAgICAgICAgICAgIGlmIHRva2VuID09ICIvIgorICAgICAgICAgICAgICAgICAgICBjb25zdW1l
KCIvIikKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB0b2tlbi5zdHJpbmcKKyAgICAgICAgICAg
ICAgICAgICAgd2hlbiAiYnJhbmNoIgorICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLmtp
bmQgPSA6YnJhbmNoCisgICAgICAgICAgICAgICAgICAgIHdoZW4gInRlcm1pbmFsIgorICAgICAg
ICAgICAgICAgICAgICAgICAgb3Bjb2RlLmtpbmQgPSA6dGVybWluYWwKKyAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQmFkIC8gZGly
ZWN0aXZlIikKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGFk
dmFuY2UKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIGlzS2luZCh0
b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBraW5kcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0gbmlsCisgICAg
ICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
aW5kcyA8PCBLaW5kLm5ldyhjb25zdW1lS2luZCkKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIHRva2VuID09ICIqIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJz
ZUVycm9yKCJDYW4gb25seSBhcHBseSAqIHRvIFRtcCIpIHVubGVzcyBraW5kc1stMV0ubmFtZSA9
PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kc1stMV0uc3BlY2lh
bCA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiKiIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIHRva2VuID09ICJhcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdW1lKCJhcyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IGNv
bnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgd3JvbmcgbnVtYmVyIG9mIGFyZ3Vt
ZW50cyBmb3Igb3ZlcmxvYWQiKSB1bmxlc3Mga2luZHMubGVuZ3RoID09IHNpZ25hdHVyZS5sZW5n
dGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzLmVhY2hfd2l0aF9pbmRleCB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJJbW0iIG9yIGtpbmQubmFtZSA9PSAiSW1tNjQi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0ucm9s
ZSAhPSAiVSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tdXNlIGFyZ3VtZW50IikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIHNpZ25hdHVyZVtpbmRleF0udHlwZSAhPSAiRyIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBu
b24tZ2VuZXJhbC1wdXJwb3NlIGFyZ3VtZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtcyA8PCBGb3JtLm5ldyhr
aW5kcywgYWx0TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyBpc0tp
bmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmQKKwor
ICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZS5sZW5ndGggPT0gMAorICAgICAgICAgICAgICAg
ICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAg
Zm9ybXMgPDwgRm9ybS5uZXcoW10sIG5pbCkKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAg
ICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMgPDwgT3ZlcmxvYWQubmV3KHNpZ25hdHVyZSwgZm9y
bXMpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdAorICAgIGVu
ZAorZW5kCisKKyRmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6
cmVhZCgkZmlsZU5hbWUpLCAkZmlsZU5hbWUpCiskb3Bjb2RlcyA9IHBhcnNlci5wYXJzZQorCitk
ZWYgd3JpdGVIKGZpbGVuYW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tmaWxlbmFtZX0uaCIsICJ3
IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBH
ZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBu
b3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQWlyI3tmaWxl
bmFtZX1faCIKKyAgICAgICAgb3V0cC5wdXRzICIjZGVmaW5lIEFpciN7ZmlsZW5hbWV9X2giCisK
KyAgICAgICAgeWllbGQgb3V0cAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYg
Ly8gQWlyI3tmaWxlbmFtZX1faCIKKyAgICB9CitlbmQKKworZGVmIHdyaXRlQ1BQKGZpbGVuYW1l
KQorICAgIEZpbGUub3BlbigiQWlyI3tmaWxlbmFtZX0uY3BwIiwgInciKSB7CisgICAgICAgIHwg
b3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBvcGNv
ZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKyAgICAg
ICAgCisgICAgICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJjb25maWcuaFwiIgorICAgICAgICBv
dXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlyI3tmaWxlbmFtZX0uaFwiIgorCisgICAgICAgIHlpZWxk
IG91dHAKKyAgICB9CitlbmQKKword3JpdGVIKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAg
ICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsiCisgICAgb3V0cC5wdXRzICJlbnVtIE9wY29kZSA6IGludDE2X3QgeyIKKyAgICAkb3Bjb2Rl
cy5rZXlzLnNvcnQuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRz
ICIgICAgI3tvcGNvZGV9LCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9OyIKKworICAgIG91dHAu
cHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMu
c2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIK
KyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNs
YXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5h
bWVzcGFjZSBXVEYiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAg
ICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMg
IiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAg
ICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAg
ICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAg
ICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAg
ICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Igor
ICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30K
KworIyBGcm9tIGhlcmUgb24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVk
IGNvZGUsIHNpbmNlIHdlJ3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4K
KworZGVmIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1u
R2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0g
MAorCisgICAgaWYgZmlsdGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAg
IGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1
bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAg
ICAgIHJldHVybgorICAgIGVuZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFj
aCB7CisgICAgICAgIHwgZm9ybSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbklu
ZGV4XS5uYW1lCisgICAgICAgIGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tp
bmRdIDw8IGZvcm0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zv
cm1dCisgICAgICAgIGVuZAorICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91
cHMubGVuZ3RoID09IDEKKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNv
bHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBy
ZXR1cm4KKyAgICBlbmQKKworICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltj
b2x1bW5JbmRleF19KSB7IgorICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwg
dmFsdWUgfAorICAgICAgICBvdXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09
ICJJbW02NCIKKyAgICAgICAgS2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAgICAg
fCBhcmdLaW5kIHwKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06
IgorICAgICAgICB9CisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1
bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZBTFVF
NjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6Igor
ICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYgbWF0
Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0Y2gg
KCN7aW5zdH0tPm9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAg
IHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAg
ICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2RlLm92
ZXJsb2Fkcy5zaXplICE9IDEpIG9yIHNwZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0cC5w
dXRzICJzd2l0Y2ggKCN7aW5zdH0tPmFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0
Y2gKKyAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAg
fCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQu
c2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAg
ICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
bmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0
cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0
cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5zdE92
ZXJsb2FkRm9ybShvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRw
LCBzcGVlZCwgaW5zdCkgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBp
ZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAg
ICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sje2Nv
bHVtbkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVyID0g
cHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAg
ICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkLCBm
b3JtCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBv
dmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAg
ICBlbmQKKyAgICB9CitlbmQKKword3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAg
fAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMg
Im5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisg
ICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1
ZTsgfSIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwi
CisgICAgb3V0cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRw
LnB1dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSIKKworICAg
IG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2
b2lkIEluc3Q6OmZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5w
dXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAg
ICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAg
ICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7
IC8vIFRoaXMgaXMgYmFzaWNhbGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBtb2Rl
bCBTcGVjaWFsIGFzIGFuIGltbWVkaWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFyZ3Nb
MF0uc3BlY2lhbCgpLT5mb3JFYWNoQXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxi
YWNrPihmdW5jdG9yKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWdu
YXR1cmUuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAor
ICAgICAgICAgICAgICAgIHJvbGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xl
CisgICAgICAgICAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJV
c2UiCisgICAgICAgICAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9
ICJEZWYiCisgICAgICAgICAgICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAgIHJv
bGUgPSAiVXNlRGVmIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJn
Ojoje2FyZy50eXBlfVApOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQorICAg
IG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPiIKKyAgICBvdXRwLnB1dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9ybShP
cGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMgInsi
CisgICAgb3V0cC5wdXRzICJBcmc6OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyldID0g
eyBhcmd1bWVudHMuLi4gfTsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAg
ICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0
cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2gg
KHNpemVvZi4uLihBcmd1bWVudHMpKSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNpYWwK
KyAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBv
dmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2ln
bmF0dXJlLmxlbmd0aH06IgorICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeyB8
IGNvbHVtbkluZGV4IHwgImtpbmRzWyN7Y29sdW1uSW5kZXh9XSIgfQorICAgICAgICAgICAgICAg
IGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9j
IHsKKyAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgc3Bl
Y2lhbCA9IChub3QgZm9ybS5raW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLnNwZWNpYWwgfSkK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oI3tzcGVjaWFsfSk7
IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpz
YWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAgICAg
ICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyAiCisgICAg
b3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBpc1Rlcm1pbmFsKE9w
Y29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9w
Y29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29k
ZS5raW5kID09IDp0ZXJtaW5hbCBvciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAg
ICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9Cisg
ICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAg
ICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAu
cHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAg
IG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5wdXRz
ICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91
dHAucHV0cyAiYm9vbCBJbnN0Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIKKyAg
ICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAgICB8
IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAg
ICAgICAgICAgb3V0cC5wdXRzICJpZiAoYXJncy5zaXplKCkgPCAxKSIKKyAgICAgICAgICAgIG91
dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdz
WzBdLmlzU3BlY2lhbCgpKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIK
KyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5p
c1ZhbGlkKCp0aGlzKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVWYWxp
ZGF0aW9uID0gZmFsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgudGlt
ZXMgeworICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBv
dmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0gb3Zl
cmxvYWQuc2lnbmF0dXJlW2luZGV4XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZvcm0u
a2luZHNbaW5kZXhdCisgICAgICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5k
LnNwZWNpYWwKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkg
a25vdyB0aGF0IHRoZSBmb3JtIG1hdGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUgdGhl
IHJvbGUsIHNpbmNlCisgICAgICAgICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28sIHRo
ZSBvbmx5IHRoaW5nIGxlZnQgdG8gdmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhh
dmUKKyAgICAgICAgICAgICAgICAjIHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBU
bXAuCisgICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkp
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7Igor
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZHNN
b3JlVmFsaWRhdGlvbgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFpcyN7b3Bjb2Rl
Lm5hbWV9VmFsaWQodGhpcykpIgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVU
VVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0
dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5z
dDo6YWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAg
ICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNo
IHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUu
bmFtZX06IgorCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1
dHMgImlmICghYXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7
IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCkt
PmFkbWl0c1N0YWNrKCp0aGlzLCBhcmdJbnN0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAg
ICAjIFN3aXRjaCBvbiB0aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRj
aCAoYXJnSW5kZXgpIHsiCisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRz
Lm1hcCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3Zl
cmxvYWQuc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgbnVtQXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRleCB8
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAgICAg
ICAgICAgICAgICMgQ2hlY2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJs
b2FkcyBlaXRoZXIgZG8sIG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAgICAg
ICAgIyBhdCB0aGlzIGluZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9uIGNh
c2UuCisgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5vID0g
MAorICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAg
ICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5l
YWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZp
cnN0IGJlY2F1c2UgaWYgd2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAgICAg
ICAgICAgICAjIHRvIHNheSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAgICAg
ICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0
LgorCisgICAgICAgICAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUub3Zl
cmxvYWRzLnNpemUgIT0gMSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRj
aCAoYXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAg
ICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBv
dmVybG9hZCB8CisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlmIGFs
bCBvZiB0aGVtIGRvIHdoYXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVll
cyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAg
ICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2Fy
Z0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVz
ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0
aGluZywganVzdCBkcm9wIHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNp
ZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNl
ICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRP
dmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5n
dGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjIFRoaXMgaXMgaG93IHdlIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlz
IGFyZ3VtZW50IHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIHlp
ZWxkcyBhIHZhbGlkIGZvcm0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR2V0
dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1uSW5k
ZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9PSBh
cmdJbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRkciIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtWWVzID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZv
cm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5k
ZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAjIERyb3AgZG93biwgZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMg
S2VlcCBnb2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2Mgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0
cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1
bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAgICAgIAor
ICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0
OiI7CisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAu
cHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMg
IkNDYWxsSGVscGVyczo6SnVtcCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgR2Vu
ZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0IgorICAgIG91dHAucHV0cyAieyIKKyAgICBv
dXRwLnB1dHMgIlVOVVNFRF9QQVJBTShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJB
TShjb250ZXh0KTsiCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIK
KyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAg
ICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAor
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdl
bmVyYXRlKCp0aGlzLCBqaXQsIGNvbnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGlmIGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5h
bWUKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2Rl
Lm1hc21OYW1lCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5raW5kID09
IDpicmFuY2gKKyAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKwor
ICAgICAgICAgICAgZm9ybS5raW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAg
IHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgY2FzZSBraW5kLm5hbWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAg
ICAgICAgICAgICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigp
IgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnByaW50ICJhcmdzWyN7aW5kZXh9XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICAgICAgd2hlbiAiSW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4g
IkltbTY0IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5h
c1RydXN0ZWRJbW02NCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAg
ICAgICAgICAgIHdoZW4gIkluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENv
bmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVs
YXRpb25hbENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0
aW9uKCkiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG91dHAucHV0cyAiKTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1
bHQpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRw
LnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIiCit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2aXNpb24gMTkxNTA3KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1
LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRl
eCAhPSBpbnZhbGlkKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFp
c1NldCgpOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlz
U2V0KCk7IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4ID09IGRlbGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBAQCBwdWJsaWM6
CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBjbGFzcyBB
bGxSZWdzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkgeyB9CisKKyAgICAgICAg
ICAgIGV4cGxpY2l0IGl0ZXJhdG9yKFJlZyByZWcpCisgICAgICAgICAgICAgICAgOiBtX3JlZ0lu
ZGV4KHJlZy5pbmRleCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBSZWcgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV9yZWdJ
bmRleCk7IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1fcmVnSW5kZXggPSBSZWc6OmZyb21JbmRleChtX3JlZ0lu
ZGV4KS5uZXh0KCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcmVn
SW5kZXggPT0gb3RoZXIubV9yZWdJbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHVuc2lnbmVkIG1fcmVnSW5kZXg7
CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcihSZWc6OmZpcnN0KCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKFJlZygpKTsgfQorICAgIH07CisKKyAgICBzdGF0aWMgQWxsUmVnc0l0
ZXJhYmxlIGFsbCgpIHsgcmV0dXJuIEFsbFJlZ3NJdGVyYWJsZSgpOyB9CisKIHByaXZhdGU6CiAg
ICAgc3RhdGljIHVpbnQ4X3QgaW52YWxpZCgpIHsgcmV0dXJuIDB4ZmY7IH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJ
KHJldmlzaW9uIDE5MTUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJB
dE9mZnNldExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIFJlZ2lzdGVy
QXRPZmZzZXRMaXN0OjpSZWdpc3RlckF0T2Zmc2V0TGkKICAgICBpZiAob2Zmc2V0QmFzZVR5cGUg
PT0gRnJhbWVQb2ludGVyQmFzZWQpCiAgICAgICAgIG9mZnNldCA9IC0oc3RhdGljX2Nhc3Q8cHRy
ZGlmZl90PihudW1iZXJPZlJlZ2lzdGVycykgKiBzaXplb2Yodm9pZCopKTsKIAotICAgIGZvciAo
UmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpO3JlZyA9IHJlZy5uZXh0
KCkpIHsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3Qo
KTsgcmVnID0gcmVnLm5leHQoKSkgewogICAgICAgICBpZiAocmVnaXN0ZXJTZXQuZ2V0KHJlZykp
IHsKICAgICAgICAgICAgIGFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KHJlZywgb2Zmc2V0KSk7CiAg
ICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgJKHJldmlzaW9uIDE5MTUw
NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsOSBAQCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9m
ZnNldCogZmluZChSZWcpIGNvbnN0OwogICAgIHVuc2lnbmVkIGluZGV4T2YoUmVnKSBjb25zdDsg
Ly8gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQuCiAKKyAgICBWZWN0b3I8UmVnaXN0ZXJB
dE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3Rl
cnMuYmVnaW4oKTsgfQorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnMuZW5kKCk7IH0KKwogcHJpdmF0ZToK
ICAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD4gbV9yZWdpc3RlcnM7CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTkxNTA3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTgsNiArMTE4LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgUmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvciA9PSBvdGhlci5t
X3ZlY3RvcjsgfQogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5o
YXNoKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JF
YWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHNp
emVfdCBpbmRleCA6IG1fdmVjdG9yLnNldEJpdHMoKSkKKyAgICAgICAgICAgIGZ1bmN0b3IoUmVn
Ojpmcm9tSW5kZXgoaW5kZXgpKTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAgIHZvaWQgc2V0
QW55KFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxNTA3KQorKysgU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAog
CQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAv
KiBXb3JkTG9jay5oICovOyB9OwogCQkwRkVCM0RDRjFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVk
VGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
QjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCAqLzsgfTsKIAkJMEZFQjNERDEx
QkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzREQwMUJCNzM2NkIwMDlEN0FB
RCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi87IH07CisJCTBGRUM4NEIxMUJEQUNEMzkw
MDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEu
aCAqLzsgfTsKIAkJMEZFQzg0QUYxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRB
RTFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2RlV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZFRDY3
QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55
UHRyU2V0LmggKi87IH07CiAJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29t
cGFyaXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi87IH07CkBA
IC0zNDUsNiArMzQ2LDcgQEAKIAkJMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2Nr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmRMb2NrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRU
YXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFRhc2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNERDAxQkI3MzY2QjAwOUQ3QUFEIC8qIFBh
cmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZExhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2RlV29ya2xpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhOb2RlV29ya2xpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRp
bnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0Yg
LyogUG9pbnRlckNvbXBhcmlzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UG9pbnRlckNvbXBhcmlzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg3MCw2
ICs4NzIsNyBAQAogCQkJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIu
aCAqLywKIAkJCQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3Bw
ICovLAogCQkJCTE0Njk0MTk1MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0g
Ki8sCisJCQkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovLAog
CQkJCUE4QTQ3MzA2MTUxQTgyNUIwMDQxMjNGRiAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLywKIAkJ
CQlBOEE0NzMwNzE1MUE4MjVCMDA0MTIzRkYgLyogU2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJ
CQkJQThBNDczMDgxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuY3BwICovLApAQCAtMTI0NCw2ICsx
MjQ3LDcgQEAKIAkJCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmll
ckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0NTUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmlj
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0
clNldC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDE5MTUwNykK
KysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3NiwxMiAr
Nzc2LDIwIEBACiAjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJVCAxCiAjZW5kaWYKIAorLyog
VGhlIEIzIGNvbXBpbGVyIGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNrZW5kIHRoYXQgaXMgc3RpbGwg
aW4gZGV2ZWxvcG1lbnQuIFdlIHdpbGwga2VlcCBpdCBidWlsZGluZworICAgb24gRGFyd2luL3g4
Ni02NCBmb3Igbm93LCB0aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2VwdCBmb3IgdGVzdHMuICovCisj
aWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQorI2RlZmluZSBFTkFCTEVfQjNfSklUIDEKKyNl
bmRpZgorCiAvKiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFpbGFibGUsIHRoZW4gZGlz
YWJsZSB1cHBlciB0aWVycyBhcyB3ZWxsOiAqLwogI2lmICFFTkFCTEUoSklUKQotI3VuZGVmIEVO
QUJMRV9ERkdfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVkZWZpbmUgaXQuICov
Ci0jdW5kZWYgRU5BQkxFX0ZUTF9KSVQgICAgICAvKiBVbmRlZiBzbyB0aGF0IHdlIGNhbiByZWRl
ZmluZSBpdC4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI3VuZGVmIEVOQUJMRV9GVExfSklU
CisjdW5kZWYgRU5BQkxFX0IzX0pJVAogI2RlZmluZSBFTkFCTEVfREZHX0pJVCAwCiAjZGVmaW5l
IEVOQUJMRV9GVExfSklUIDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJVCAwCiAjZW5kaWYKIAogLyog
Q291bnRzIHVzZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxpbmcgY291bnRlcnMuIEJl
IHN1cmUgdG8gYWxzbwpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKworbmFtZXNwYWNlIFdU
RiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRseSBwYXNzIGxh
bWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKKy8vIHRlbXBsYXRl
IHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxkIGJlIGRlY2xh
cmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGlu
dCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKKy8vCisvLyB2b2lk
IGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAoaW50IHgsIFN0
dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3RlIHRoYXQgdGhpcyBy
ZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1iZGEgaXMgb25s
eSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVuY2UgdGhlIG5hbWUg
U2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNj
b3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBl
cy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwpKHZv
aWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQqIGFyZyA9IG51bGxw
dHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmcoYXJnKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFyZ3VtZW50VHlwZXMmJi4u
LiBhcmd1bWVudHMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsKG1fYXJnLCBz
dGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCitwcml2
YXRlOgorICAgIFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYm
Li4uKTsKKyAgICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9u
VHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjsKK3RlbXBs
YXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVu
YW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3Vt
ZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAo
QXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNz
ZWRGdW5jdG9yPgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2VkRnVuY3RvciYmIGZ1bmN0
b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4p
PihpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9yKHN0ZDo6Zm9yd2FyZDxQ
YXNzZWRGdW5jdG9yPihmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0
YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwgQXJndW1lbnRUeXBl
cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY29w
ZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisgICAgICAgICAgICBzdGQ6
OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgRnVu
Y3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5
cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rv
cj4gc2NvcGVkTGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBTY29wZWRM
YW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3RkOjpmb3J3YXJkPEZ1bmN0b3I+
KGZ1bmN0b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U2NvcGVk
TGFtYmRhOwordXNpbmcgV1RGOjpzY29wZWRMYW1iZGE7CisKKyNlbmRpZiAvLyBTY29wZWRMYW1i
ZGFfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTE1MDcpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDExIEBAIHB1
YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0b3IoRnVuY3RvciYmIGZ1
bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkKKyAgICB7Cisg
ICAgfQorCiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlwZXMmJi4uLiBh
cmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwxMSBAQCBSZWY8U2hhcmVk
VGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitSZWY8
U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNrKEZ1bmN0b3ImJiBmdW5j
dG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0
aW9uVHlwZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263962</attachid>
            <date>2015-10-23 17:08:08 -0700</date>
            <delta_ts>2015-10-23 19:28:58 -0700</delta_ts>
            <desc>it compiles!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>557593</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQko
d29ya2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDE4IEBAIGFsbCA6IFwKICAgICBCeXRlY29kZXMu
aCBcCiAgICAgSW5pdEJ5dGVjb2Rlcy5hc20gXAogICAgIEpTQ0J1aWx0aW5zLmggXAorICAgIEIz
TG93ZXJpbmdNYXRjaGVyLmggXAorICAgIEIzQWRkcmVzc01hdGNoZXIuaCBcCisgICAgQjNDb21w
YXJpc29uTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBcCisgICAgQWlyT3Bjb2RlLmNwcCBc
CisgICAgQWlyT3Bjb2RlVXRpbHMuaCBcCisgICAgQWlyT3Bjb2RlVXRpbHMuY3BwIFwKICMKIAog
UFlUSE9OID0gcHl0aG9uCiBQRVJMID0gcGVybAorUlVCWSA9IHJ1YnkKIAogSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIgPSAkKEphdmFTY3JpcHRDb3JlKS9TY3JpcHRzCiAKQEAgLTI1MiwzICsy
NjAsMTkgQEAgYWxsIDogSlNSZXBsYXlJbnB1dHMuaAogCiBKU1JlcGxheUlucHV0cy5oIDogJChJ
TlBVVF9HRU5FUkFUT1JfU1BFQ0lGSUNBVElPTlMpICQoSU5QVVRfR0VORVJBVE9SX1NDUklQVFMp
CiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JSZXBsYXlJbnB1dHMucHkgLS1vdXRwdXREaXIgLiAtLWZyYW1ld29yayBKYXZhU2NyaXB0Q29y
ZSAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykKKworQjNMb3dlcmluZ01hdGNoZXIu
aDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2
YVNjcmlwdENvcmUpL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXiAK
K0IzQWRkcmVzc01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVy
bl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVy
bnMKKwkkKFJVQlkpICReCitCM0NvbXBhcmlzb25NYXRjaGVyLmg6ICQoSmF2YVNjcmlwdENvcmUp
L2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9CM0Nv
bXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXgorCitBaXJPcGNvZGUuaDogJChK
YXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0Q29y
ZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bjb2RlLmNwcDog
JChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0
Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bjb2RlVXRp
bHMuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZh
U2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bj
b2RlVXRpbHMuY3BwOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5y
YiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICRe
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxNTA3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY4NSw2ICs2ODUsMTE3IEBACiAJCTBGRUEwQTMzMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMw
MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdG
NkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9B
c3NlbWJsZXIuY3BwICovOyB9OworCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1
bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3Bw
ICovOyB9OworCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4
NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJ
MEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja1V0aWxzLmggKi87IH07CisJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Js
b2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsK
KwkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVj
aWFsLmggKi87IH07CisJCTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmgg
Ki87IH07CisJCTBGRUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW11dGF0aXZpdHkuaCAqLzsgfTsKKwkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87
IH07CisJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0
VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVD
ODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmggKi87IH07CisJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUxNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVu
Y3lDbGFzcy5jcHAgKi87IH07CisJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1
ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9Owor
CQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5j
cHAgKi87IH07CisJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9Owor
CQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzSW5kZXhTZXQuaCAqLzsgfTsKKwkJMEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
TG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsK
KwkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzTG93ZXJUb0Fpci5oICovOyB9OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQg
LyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAg
Ki87IH07CisJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFD
REFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFD
MDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4
MEZGNzQgLyogQjNPcGNvZGUuaCAqLzsgfTsKKwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBG
RUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
T3JpZ2luLmggKi87IH07CisJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9p
bnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4
NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9p
bnRWYWx1ZS5oICovOyB9OworCQkwRkVDODUyOTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNj
b3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVD
ODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyog
QjNQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1By
b2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkw
RkVDODUyQzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5oICovOyB9OworCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmgg
Ki87IH07CisJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87
IH07CisJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUz
MTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrbWFwU3BlY2lhbC5oICovOyB9OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQg
LyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQu
Y3BwICovOyB9OworCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
OTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmggKi87IH07CisJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxl
Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsK
KwkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICov
OyB9OworCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hW
YWx1ZS5oICovOyB9OworCQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBG
RUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5o
ICovOyB9OworCQkwRkVDODUzRjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMu
aCAqLzsgfTsKKwkJMEZFQzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAq
LzsgfTsKKwkJMEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWUuY3BwICovOyB9OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQg
LyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1
NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZUlubGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkw
RkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFs
bG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICov
OyB9OworCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAq
LzsgfTsKKwkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFyZy5oICovOyB9OworCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWly
QmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07
CisJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovOyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNp
YWwuY3BwICovOyB9OworCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVj
aWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4
NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVu
dGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVy
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4
NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckdlbmVyYXRlLmggKi87IH07CisJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0Lmgg
Ki87IH07CisJCTBGRUM4NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9Owor
CQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFC
REFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyog
QWlySW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87
IH07CisJCTBGRUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgx
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3RJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJM
aXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4
NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07
CisJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1
ODYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAq
LzsgfTsKKwkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZl
cnl0aGluZy5jcHAgKi87IH07CisJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGls
bEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsg
fTsKKwkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
ICovOyB9OworCQkwRkVDODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJUbXAuY3BwICovOyB9OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wSW5saW5lcy5oICovOyB9OworCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyog
QWlyVmFsaWRhdGUuaCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lz
dGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMgLyogU2V0dXBWYXJh
cmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yNTYzLDYgKzI2NzQs
MTE3IEBACiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0g
ZGZnL0RGR0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEz
MDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9B
c3NlbWJsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9B
c3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNDFCREFD
REFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1
bWVudFJlZ1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI2MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNC
YXNpY0Jsb2NrLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrSW5saW5l
cy5oOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrVXRpbHMuaDsg
cGF0aCA9IGIzL0IzQmFzaWNCbG9ja1V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCbG9ja1dvcmtsaXN0Lmg7IHBhdGggPSBiMy9C
M0Jsb2NrV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hlY2tTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzQ2hlY2tT
cGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQ2hlY2tTcGVjaWFsLmg7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hl
Y2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5oOyBwYXRoID0g
YjMvQjNDaGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM0NvbW1vbi5jcHA7IHBhdGggPSBiMy9CM0NvbW1vbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW1vbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbW1vbi5oOyBwYXRo
ID0gYjMvQjNDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbW11dGF0aXZpdHkuY3BwOyBwYXRoID0gYjMvQjNDb21t
dXRhdGl2aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NvbW11dGF0aXZpdHkuaDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDMyVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNDb25zdDMyVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDMyVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDMyVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdDMy
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5jcHA7
IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5oOyBwYXRoID0gYjMvQjND
b25zdDY0VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBwYXRoID0gYjMvQjND
b25zdERvdWJsZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29u
c3REb3VibGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDOTFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNDb250cm9sVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb250cm9s
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNDb250cm9sVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Zy
ZXF1ZW5jeUNsYXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
RnJlcXVlbmN5Q2xhc3MuY3BwOyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Zy
ZXF1ZW5jeUNsYXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVl
bmN5Q2xhc3MuaDsgcGF0aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJs
b2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbnRlZEJsb2Nr
Lmg7IHBhdGggPSBiMy9CM0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0dlbmVyYXRlLmNwcDsgcGF0aCA9IGIz
L0IzR2VuZXJhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRjFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0dlbmVyYXRlLmg7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzSW5kZXhNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbmRl
eE1hcC5oOyBwYXRoID0gYjMvQjNJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0luZGV4U2V0Lmg7IHBhdGggPSBiMy9CM0luZGV4U2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNMb3dlclRvQWlyLmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlclRvQWlyLmg7
IHBhdGggPSBiMy9CM0xvd2VyVG9BaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5jcHA7IHBhdGggPSBiMy9C
M01lbW9yeVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5oOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyog
QjNPcGNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcGNv
ZGUuY3BwOyBwYXRoID0gYjMvQjNPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcGNvZGUuaDsgcGF0aCA9IGIzL0IzT3Bjb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M09yaWdpbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdp
bi5jcHA7IHBhdGggPSBiMy9CM09yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM09yaWdpbi5oOyBwYXRoID0gYjMvQjNPcmlnaW4uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNQYXRjaHBvaW50U3BlY2lhbC5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERDFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNQYXRjaHBvaW50VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERTFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNQYXRjaHBvaW50VmFsdWUuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1BoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNQaGFzZVNjb3BlLmNwcDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2Nv
cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQaGFzZVNjb3BlLmg7IHBh
dGggPSBiMy9CM1BoYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUHJvY2VkdXJlLmNwcDsgcGF0aCA9IGIzL0IzUHJvY2Vk
dXJlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzUHJvY2VkdXJlLmg7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlSW5saW5l
cy5oOyBwYXRoID0gYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXAuY3BwOyBwYXRoID0g
YjMvQjNTdGFja21hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU1
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3RhY2ttYXAuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXBTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3Rh
Y2ttYXBTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2ttYXBTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tt
YXBTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RL
aW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90
S2luZC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5oOyBw
YXRoID0gYjMvQjNTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuY3BwOyBwYXRo
ID0gYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsgcGF0aCA9IGIzL0Iz
U3RhY2tTbG90VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0Iz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoQ2FzZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRj
aENhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRTFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzU3dpdGNoQ2FzZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuaDsgcGF0aCA9IGIz
L0IzU3dpdGNoVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1R5cGUuY3BwOyBwYXRoID0gYjMvQjNUeXBlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1R5cGUuaDsgcGF0aCA9IGIzL0IzVHlw
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMzFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNVcHNpbG9uVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyog
QjNVcHNpbG9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVcHNp
bG9uVmFsdWUuaDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1VzZUNvdW50cy5jcHA7IHBh
dGggPSBiMy9CM1VzZUNvdW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1VzZUNvdW50cy5oOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNW
YWxpZGF0ZS5jcHA7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWxpZGF0ZS5oOyBwYXRoID0gYjMvQjNW
YWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGOTFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlLmg7IHBhdGggPSBiMy9CM1ZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M1ZhbHVlSW5saW5lcy5oOyBwYXRoID0gYjMvQjNWYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZVJlcC5jcHA7
IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZVJlcC5oOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyog
QWlyQWxsb2NhdGVTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJBbGxvY2F0ZVN0YWNrLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyQWxsb2NhdGVTdGFjay5oOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckFyZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBcmcuY3Bw
OyBwYXRoID0gYjMvYWlyL0FpckFyZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQXJnLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJhc2lj
QmxvY2suY3BwOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmg7IHBh
dGggPSBiMy9haXIvQWlyQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJDQ2FsbFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNvZGUuaDsgcGF0
aCA9IGIzL2Fpci9BaXJDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9haXIv
QWlyRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2Vu
ZXJhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NDFCREFDREM3
MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyR2VuZXJhdGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGlvbkNvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJh
dGlvbkNvbnRleHQuaDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTcxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlySGFu
ZGxlQ2FsbGVlU2F2ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTgx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckluc2VydGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlySW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0
aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVBMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpckluc3QuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0Lmg7IHBhdGggPSBiMy9haXIv
QWlySW5zdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1QzFCREFDREM3
MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlySW5zdElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyog
QWlyTGl2ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5l
c3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvYWlyL0Fp
clBoYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjAxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHBhdGggPSBiMy9h
aXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclJlZ2lzdGVyUHJpb3JpdHkuaDsgcGF0aCA9
IGIzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWly
L0FpclNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MzFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bp
bGxFdmVyeXRoaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
clNwaWxsRXZlcnl0aGluZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJTdGFja1Nsb3QuY3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
dGFja1Nsb3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tTbG90
Lmg7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyVG1wLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJU
bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRt
cC5oOyBwYXRoID0gYjMvYWlyL0FpclRtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXBJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWly
VG1wSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QjFCREFD
REM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpclZhbGlkYXRlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclZh
bGlkYXRlLmg7IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I4MUIyNjI1NkQwMDY2
Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUU5
ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZhcmFyZ3NGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzg1OCw2ICs0MDgwLDcgQEAKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBG
RjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRD
QUQ0MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBh
c3NlbWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovLAogCQkJ
CUE1NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBiaW5kaW5ncyAqLywKIAkJCQlBN0Q4MDE5RjE4
ODBENjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFG
NjgxIC8qIGJ5dGVjb2RlICovLApAQCAtNDA3MSw2ICs0Mjk0LDEzMiBAQAogCQkJbmFtZSA9IGZ0
bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRUM4NEIyMUJEQUNENUUw
MDgwRkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKKwkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0
QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJMEZFQzg0Qjcx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NEI4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8sCisJCQkJMEZFQzg0QkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGRUM4NEJCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0QkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0QkQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QkUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29t
bW9uLmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5jcHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5oICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgKi8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLywK
KwkJCQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCAqLywK
KwkJCQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8s
CisJCQkJMEZFQzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLywK
KwkJCQkwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLywK
KwkJCQkwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLywKKwkJCQkwRkVDODRE
MDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJ
MEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLywKKwkJCQkwRkVDODRE
MjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovLAorCQkJCTBGRUM4NEQzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovLAorCQkJCTBGRUM4NEQ0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLywKKwkJCQkwRkVDODRENTFCREFDREFDMDA4MEZG
NzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywKKwkJCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyog
QjNPcGNvZGUuY3BwICovLAorCQkJCTBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29k
ZS5oICovLAorCQkJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8s
CisJCQkJMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi8sCisJCQkJMEZF
Qzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwICovLAorCQkJ
CTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi8sCisJ
CQkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLywK
KwkJCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLywK
KwkJCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLywKKwkJ
CQkwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8sCisJCQkJMEZF
Qzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLywKKwkJCQkwRkVDODRF
MjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCAqLywKKwkJCQkwRkVDODRFMzFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0RTQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwICovLAorCQkJCTBGRUM4NEU1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi8sCisJCQkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODRFNzFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODRFODFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLywKKwkJCQkwRkVDODRFOTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8sCisJCQkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovLAorCQkJCTBGRUM4NEVEMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovLAorCQkJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaENhc2UuaCAqLywKKwkJCQkwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3dpdGNoVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGMTFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBl
LmNwcCAqLywKKwkJCQkwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8sCisJ
CQkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCAqLywKKwkJ
CQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLywKKwkJCQkw
RkVDODRGNTFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICovLAorCQkJCTBGRUM4
NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovLAorCQkJCTBGRUM4NEY3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRkVDODRGODFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovLAorCQkJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZS5oICovLAorCQkJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5l
cy5oICovLAorCQkJCTBGRUM4NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAq
LywKKwkJCQkwRkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovLAorCQkJ
KTsKKwkJCW5hbWUgPSBiMzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CisJCTBG
RUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsK
KwkJCWNoaWxkcmVuID0gKAorCQkJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxv
Y2F0ZVN0YWNrLmNwcCAqLywKKwkJCQkwRkVDODU0OTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5oICovLAorCQkJCTBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
Y3BwICovLAorCQkJCTBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLywKKwkJ
CQkwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJ
MEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLywKKwkJCQkwRkVD
ODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVD
ODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg1
NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovLAorCQkJCTBGRUM4NTUxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8sCisJCQkJMEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8sCisJCQkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckdlbmVyYXRlLmggKi8sCisJCQkJMEZFQzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdl
bmVyYXRpb25Db250ZXh0LmggKi8sCisJCQkJMEZFQzg1NTYxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLywKKwkJCQkwRkVDODU1NzFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLywKKwkJCQkwRkVDODU1ODFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkVDODU1OTFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc3QuY3BwICovLAorCQkJCTBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmggKi8sCisJCQkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVz
LmggKi8sCisJCQkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi8s
CisJCQkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovLAor
CQkJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8sCisJCQkJ
MEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovLAor
CQkJCTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8s
CisJCQkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovLAorCQkJ
CTBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg1
NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8sCisJCQkJMEZF
Qzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovLAorCQkJCTBG
RUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICovLAorCQkJCTBGRUM4
NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLywKKwkJCQkwRkVDODU2ODFC
REFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLywKKwkJCQkwRkVDODU2OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wLmggKi8sCisJCQkJMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clRtcElubGluZXMuaCAqLywKKwkJCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuY3BwICovLAorCQkJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0
ZS5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBhaXI7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OworCQl9OwogCQkwRkY0MjcyRTE1OEVCQ0NFMDA0Q0I5RkYgLyogZGlzYXNzZW1ibGVyICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTYwNDIsNiArNjM5MSw3
IEBACiAJCQkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0UmVhc29uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjAxNjFFMzBGM0E4M0MxMDBGODQ3MTAgLyogQWJzdHJhY3RNYWNyb0Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NUYwRjUxNEQxMDYzQzAwQUM3NjQ5IC8q
IEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MEU5MTlGNUIxMDEw
MDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNrRnVuY3Rpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDM0U1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBBUElDYXN0LmggaW4g
SGVhZGVycyAqLywKQEAgLTYwNzEsOCArNjQyMSwxMCBAQAogCQkJCUE1RUE3MEU4MTlGNUIxMDEw
MDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBCYXNpY0Jsb2NrTG9jYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4M0FDMEU2REI4QzkwMDQ3NzVBNCAvKiBCYXRj
aGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjRCMjcyMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlTd2l0Y2guaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NThFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBCb29sZWFuT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4NTEgLyogQnJlYWtwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODAxQTUxODgwRDY2RTAwMjZDMzlCIC8qIEJ1aWx0
aW5FeGVjdXRhYmxlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDg3LDYgKzY0MzksNyBAQAogCQkJ
CTk5REEwMEE0MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19tb2RlbC5weSBpbiBIZWFkZXJz
ICovLAogCQkJCTk5REEwMEE1MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc190ZW1wbGF0ZXMu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQk0MURFQTEzMjFCOUYzMTYzMDA2RDY1REQgLyogQnVpbHRp
blV0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyog
QjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlFNzI5NDBCMTkwRjA1MTQwMDFB
OTFCNSAvKiBCdW5kbGVQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5NzE1RUQ4RTQ2
MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5ODE1RUQ4
RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDk3
LDYgKzY0NTAsNyBAQAogCQkJCTBGMkREODBCMUFCM0Q4NTgwMEJCQjhFOCAvKiBCeXRlY29kZUtp
bGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMzE3QTlDMjRFMDAzNEM3MzUgLyogQnl0
ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVDMDE4MzU2
NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZGOEIgLyogQnl0ZWNvZGVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBGMUUzRkEgLyogQnl0ZWNv
ZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYxMzgzMkIwMEEwQkE0NSAv
KiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNjEzMywxMyArNjQ4NywxNiBAQAogCQkJ
CTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNl
cHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyog
Q29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJDMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUEzQTgxNzk3
NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGREIyQ0VBMTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZp
Zy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
ZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBD
b25zZXJ2YXRpdmVSb290cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwOEExOEJDMjFDMzAw
QkVERjc2IC8qIENvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQw
MDdBMTg5QjA1MTAwMDYzMzIzMSAvKiBDb25zb2xlTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTUzQ0UwODYxOEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1RkQwMDc0MTg5QjAzOEMwMDYzMzIzMSAvKiBDb25zb2xlVHlwZXMuaCBp
biBIZWFkZXJzICovLApAQCAtNjE1Myw2ICs2NTEwLDcgQEAKIAkJCQlDMkZDOUJEMzE2NjQ0REZC
MDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkVB
QTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2Vu
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZp
c2l0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjE2NCw2ICs2NTIyLDcgQEAKIAkJCQk5OTU5RTky
QjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEy
NDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8q
IERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTYxODMsNiArNjU0Miw3IEBACiAJ
CQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3MDREOTA0MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzcxNDNGQ0Qz
RjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNF
NDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAv
KiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAq
LywKQEAgLTYxOTMsNyArNjU1Myw5IEBACiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8q
IERGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3
NTA1NjAwODNCNjg3IC8qIERGR0FyaXRoTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMz
QjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTE3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERG
R0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk1MTdBMEJDNzQwMEVFMjYx
OCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVD
NzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYyMDMsNiArNjU2NSw3IEBACiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzcz
QUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
QzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZFMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERG
R0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAw
NkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjI0Miw4ICs2
NjA1LDEwIEBACiAJCQkJMEY2NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDlBMjk2MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdFZGdlRG9taW5h
dGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzk4NkQ1NzE3QTBCQjFFMDBBOTVERDAgLyogREZH
RWRnZVVzZXNTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcyMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNDFB
REYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkMwQUU4
MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmls
dHJhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURG
NzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjczLDYgKzY2MzgsNyBA
QAogCQkJCTYyRjJBQTM4MUIwQkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNzlDNEIxNUUxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRj
aFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg2
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9u
Z0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0
MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02
MjgxLDYgKzY2NDcsNyBAQAogCQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5p
ZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIg
LyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAw
Q0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjhGMTQzNjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGMkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlP
ZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEg
LyogREZHTmFpdmVEb21pbmF0b3JzLmggaW4gSGVhZGVycyAqLywKQEAgLTYyOTksNiArNjY2Niw3
IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4
aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc3
MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NS
RXhpdEZ1enouaCBpbiBIZWFkZXJzICovLApAQCAtNjMxNiw2ICs2Njg0LDggQEAKIAkJCQkwRkZD
OTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkIxNzY2MzE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjNBMUJGQTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5r
aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBbGxvY2F0ZVN0YWNrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQzFCREFDREFD
MDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4
REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RkNDRkMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjM0MCw2ICs2NzEwLDcgQEAKIAkJCQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyog
REZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5z
aXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBE
RkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NzE2
QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MzUxLDYgKzY3MjIsNyBAQAogCQkJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdW
YXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEw
MEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCREM0OTE1MjI4MDk2MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxl
RXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUz
MiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQzk3RjQyMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTYzODAsNiArNjc1Miw3IEBACiAJCQkJMEY1NkExRDMx
NTAwMEYzNTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGM0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVzc2lvblJh
bmdlSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8q
IEZsb2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFC
MTc0IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDM4LDYgKzY4MTEsNyBA
QAogCQkJCTBGRUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFs
dWVGcm9tQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4
Qzk4RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAz
MzJDNjE4QjUzRkE5MDA1Rjk3OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjAzMzJDODE4QjU0NkVDMDA1Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjQ0NSw4ICs2ODE5LDEwIEBACiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkND
IC8qIEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDA0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNo
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBG
dW5jdGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEJGRjJDMUFE
NDc2RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDA1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvblByb3RvdHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURh
dGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0Fj
dGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNjQ4Myw2ICs2ODU5LDcgQEAKIAkJ
CQlDNDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTA1MDE5MUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1l
bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQTFBQTkwOTExMDBEMzNCMzMgLyogR2Vu
ZXJpY0FyZ3VtZW50c0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUIxQUE5
MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkUwMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZp
ZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTY1MDgsNiArNjg4NSw3IEBACiAJCQkJQzJF
NTI2QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
RkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0
aXZpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBJ
ZGVudGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0NEFCMDBBMzgzRDAg
LyogSWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDc2MTg5QjAz
OEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLApAQCAtNjU2
MSw2ICs2OTM5LDcgQEAKIAkJCQlBMUI5RTIzQzFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxh
dG9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUExODE5M0UzMUI0RTBDREIwMEZD
MTAyOSAvKiBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUExQjlFMjNFMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNs
YXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgxOTNFNDFCNEUwQ0RCMDBGQzEwMjkgLyogSW50
bENvbGxhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENkUxQjRE
QzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTE1ODdENzAxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTY1OTEsNiArNjk3MCw3IEBACiAJCQkJMEYyNEU1NEQxN0VF
Mjc0OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2
RDMxMTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU5MTFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RG
R0RlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2RjU0
QTMxM0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NjA0LDYgKzY5ODQsNyBAQAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QkRBRUNCMTdGNEVB
MTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCMTQx
ODZEMUI2MjUyN0YwMEZCMjA2OCAvKiBKU0Fycm93RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDE4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Jhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MEQxN0Q3MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3Vu
ZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTY2MjAsNiArNzAwMSw4IEBACiAJCQkJODY1
QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTUzQ0UwODgxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBK
U0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAv
KiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4QzAyNDIxOEU0QTQx
QTAwMDMyQkM1IC8qIEpTQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjYzNSw2
ICs3MDE4LDcgQEAKIAkJCQlGRTM4NEVFNjFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTgxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFy
Vk1Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJEMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyMDFC
REFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZF
M0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCkBAIC02NjQ0LDExICs3MDI4LDEzIEBACiAJCQkJMEYyQjY2RjExN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODU0NTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFy
cmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY1MTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNjE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhp
Y2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFCMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMTBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDg2
MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVDM0ExQTYxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29u
c29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02Njc5LDYgKzcwNjUsNyBAQAogCQkJCUE3
MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0
REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAq
LywKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVudC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxOENCQzExQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxl
TmFtZXNwYWNlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzlEQTRBNzFCN0U4QjdDMDA4
NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovLApAQCAtNjcwOCw2ICs3MDk1
LDcgQEAKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFODU1MzkxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5n
QnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEVDMEVDMzFBQTBEN0RBMDBC
NkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYwMEI1QTcx
NTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLApA
QCAtNjc2MSw5ICs3MTQ5LDExIEBACiAJCQkJMEY0NjgwQTMxNEJBN0Y4RDAwQkZFMjcyIC8qIExM
SW50RXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0IxNEJCQjE3MjAwQkZF
MjcyIC8qIExMSW50T2ZmbGluZUFzbUNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEMjg3
QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwQTUxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQ0VGQUNFMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDRjE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQ
SUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzgxNzk5RTRCMjAwRDI4MzNE
IC8qIExMVk1EaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUQzMTgwNUVE
Q0MwMDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02Nzc2LDEyICs3
MTY2LDE0IEBACiAJCQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVy
QVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJEMDBDRjg3MTEgLyogTWFj
cm9Bc3NlbWJsZXJBUk02NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDYwRkRERUE5ODAw
MDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2M0Iy
M0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQyQkNCMyAvKiBNYWNyb0Fz
c2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2NEE5MTM1RTVFMUMwMDk2
MzAxMiAvKiBNYWNyb0Fzc2VtYmxlclNINC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTQw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3M0ExN0NC
RTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg1
MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODA2
LDYgKzcxOTgsNyBAQAogCQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMzBFMTgzOURCMDAwRjky
OTcgLyogTmF0aXZlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0U4RDIx
MUI5MDEzREUwMDM0NkI1MiAvKiBOYXRpdmVTdGRGdW5jdGlvbkNlbGwuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1
Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBO
b2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjgxOEExQjI1OTAwMjZEODhGIC8qIE5v
bmRldGVybWluaXN0aWNJbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODI2LDYgKzcyMTksNyBA
QAogCQkJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5k
bGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4
OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NDdFQTE3QTBCRDQ2MDBG
NTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0ODBF
MTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODM4LDEz
ICs3MjMyLDE3IEBACiAJCQkJMEZGOUNFNzQxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGlj
QWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU4MzQxODFBNkVGOTdCMDBEMDQ4NDcgLyog
UG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYx
MTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1l
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyMjFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNv
ZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9m
aWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJv
ZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0
NDYwIC8qIFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUx
MDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1
ZW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZB
RDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29t
cGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODY2LDEwICs3MjY0LDEzIEBACiAJ
CQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNj
b3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVy
ZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1
dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2
IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgwMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzQjRBQTE4QjkyQzRE
MDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
Q0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBp
biBIZWFkZXJzICovLApAQCAtNjg4OSw2ICs3MjkwLDcgQEAKIAkJCQkwRkMzMTQxMjE4MTQ1NTkx
MDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1N0QyM0VFMTg5
MUI1NTQwMDMxQzdGQSAvKiBSZWd1bGFyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJ
bnNwZWN0b3JDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUYwMTgyMzQ1QUYw
MEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmggaW4gSGVhZGVycyAqLywKQEAg
LTY4OTYsNiArNzI5OCw3IEBACiAJCQkJQTVCQTE1RUQxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90
ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUxMTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBF
OEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjBB
OUQxMUE5QjY2NDYwMDAxMzA2QSAvKiBSdW50aW1lRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhl
YWRlcnMgKi8sCkBAIC02OTI1LDYgKzczMjgsNyBAQAogCQkJCUE3MDlGMkYwMTdBMEFDMDQwMDUx
MkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA0MDA0MEU2QTc0
OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY0
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUwRTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3Vy
Y2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTQ0LDYgKzczNDgsNyBA
QAogCQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0MkUzMTNCMTM0RkYwQTYwMEFGQURCNSAvKiBTdHJvbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVGREUyNiAvKiBTdHJvbmdJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2
ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBT
dHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAv
KiBTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQUEzMTIxOEJENDlEMTAw
Mzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTgwLDEwICs3
Mzg1LDEyIEBACiAJCQkJMEYyRDRERUExOTgzMkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2Nh
dGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCNkMzOTFBRjQ4RERDMDBEQjFCRjcg
LyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkM5NTJCNzE5QTI4OTg1
MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERFQzE5
ODMyREM0MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJENERGMDE5ODMyREQ2MDA3RDRCMTkgLyogVHlwZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQyMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfZXh0
ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0NDE1OEVCRTkxMDA0Q0I5RkYgLyogdWRp
czg2X2lucHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTcwMjAsOCArNzQyNywxMCBAQAogCQkJCUZF
RDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0MkUzMTNDMTM0RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUwMjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTRCRkNFNjkxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tT
bG90S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8q
IFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RjcyNTY2MTRFRTI2NUUw
MEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RkEy
MTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDQzLDkg
Kzc0NTIsMTIgQEAKIAkJCQk5OTU5RTkyRTFCRDE3RkE0MDAxQUE0MTMgLyogeHhkLnBsIGluIEhl
YWRlcnMgKi8sCiAJCQkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRCQTMz
NzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEz
MzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEy
REJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODY3MDRCNDMxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKQEAgLTc1MjcsNiArNzkzOSw3IEBACiAJCQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8q
IEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkQxMDdFQzM3NjAwNDI3
QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NDNCQUExNkI4ODI0OTAw
OUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12
N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTM0LDggKzc5NDcsMTAgQEAKIAkJCQlB
N0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0
Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIxNzQg
LyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNEMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3MDU1
MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMw
MTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzU1Niw4ICs3OTcxLDEwIEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5
NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkVDOUJCNjFCN0VCMDdD
MDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2FsbEZy
YW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENDFCODRGQjNE
MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyogQ2Fs
bE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTc3LDYgKzc5OTQsNyBAQAogCQkJCUE3MDlG
MkYyMTdBMEFDMkEwMDUxMkU5OCAvKiBDb21tb25TbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjU1M0EzMzExN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlv
bnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENv
bXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NThCMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIx
MDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2
RkM3NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNzYwNCw2ICs4MDIyLDcgQEAKIAkJCQkwRkM3MTJERTE3Q0Q4
Nzc5MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFNTA2ODY3MUFFMjVFMjgwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fi
c3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4RDFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENF
QUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDAx
MUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNo
cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8q
IERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2
MTMsNiArODAzMiw3IEBACiAJCQkJMEY2Mzk0ODQxNUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5
TW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q5QTI5NDE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2NkVDNjE4
MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3
YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0Ew
QjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjIx
LDYgKzgwNDEsNyBAQAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29k
ZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQg
LyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU3MTRFRjkw
QTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0
NjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzY5NDFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5V
cFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAv
KiBERkdDbG9iYmVyaXplLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY1OCw2ICs4MDc5LDcgQEAK
IAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdH
cmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU2RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2
MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkwNTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFj
ZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzAwLDE0ICs4MTIyLDE3IEBA
CiAJCQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JF
eGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOTJDODkxQjQ2MTg4
NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVEMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
UHJlcGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQw
MkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyogREZHUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc3QTE3OTczOEI4MDA5REY3NDQgLyogREZHUGxh
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyogREZH
UHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVE
MTRFRjkwQjMwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RL
aW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBE
RkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0VDMTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkIxNzY2MjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzcyNSw2ICs4MTUwLDggQEAKIAkJCQkwRkMyMENCNTE4NTJFMkM2MDBDOUU5
NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
Rjg5M0JEQjE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjc5MDg1NTE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3RydWN0
dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJGQ0NGRTE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVy
VXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc1Miw2ICs4MTc5
LDcgQEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxs
YmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyog
RW5jb2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQy
N0E0OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwOTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzgxMDdFQzM3
NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVC
NThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3JJbnN0YW5jZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc3OTYsNiArODIyNCw3IEBACiAJCQkJMEY4RjJCOTUxNzJFMDRB
MDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYxODA3
MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEw
QTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUwMDFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25z
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBGVExP
U1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0Yg
LyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4MDMsNiArODIzMiw3IEBACiAJ
CQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjQ4NTMyOTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVS
ZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjExODE2
MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjI1RjFCMzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOUQzMzlBMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC03ODM1LDYgKzgyNjUsNyBAQAogCQkJCUE1RkQwMDc1MTg5QjAz
OEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QzI1RjhCQ0QxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2
NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5MjExMUI5NEQ0
REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc4NDIsNiArODI3Myw3IEBACiAJCQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8q
IEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5NDA4MTkwRjAy
MUUwMDFBOTFCNSAvKiBJbml0aWFsaXplTExWTVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQg
LyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0
NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzg1Myw2ICs4Mjg1LDcgQEAKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNF
MjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkz
Q0Y3QzE4NDAzNjAzMDBCRkNFMjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODcxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzNzFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgx
MTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU3RDIzRTUxODkwQ0VCRjAwMzFDN0ZBIC8qIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODkxODU2ODMzNTAwMkVENjkyIC8qIElu
c3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA5LDYg
KzgzNDIsNyBAQAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8qIEpT
Q2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRjg5MjBBNTA4
QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlu
cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTYsNiArODM1MCw4IEBACiAJCQkJMTQ3RjM5RDYx
MDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0
MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lh
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlND
b250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlDIC8q
IEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzIwMjhCNjE3OTc2MDFFMDA5
ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkyNiwx
NiArODM2MiwxOSBAQAogCQkJCUZFMzg0RUU3MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYwMDQyN0E0
OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDU2NkQ2
MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25t
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0OCAvKiBK
U0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4NTE4OUIxQjdFMDA2
MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTVDM0ExQTUxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OTIxODI0NzQ0NzAwQ0Mz
ODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTdEMjNFOTE4OTFCMDc3MDAzMUM3RkEgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2Jh
bE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0NDM0M2
MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1
bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5MDAxMTBG
MTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODUyMzFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUMxMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0lu
amVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA4
MDFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03OTU0LDYgKzgzOTMsNyBAQAogCQkJCUUzMThDQkMwMUI4QUVGNTEwMEEyOTI5RCAvKiBK
U01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFC
N0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5P
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8q
IEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NG
QyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5NjcsNiArODQwNyw3IEBA
CiAJCQkJRTNFRjg4NzQxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJv
eHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MkMzN0YxQUREQjhGRTAwMTM5NzI2IC8qIEpT
UmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTExMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTky
OEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0ODc0QUU1MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3QzBDNEFEMTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc5OTUsNiArODQzNiw3IEBACiAJCQkJNzA5RkI4NjcxQUUzMzVDNjAw
MzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURF
OThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2
MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyog
TGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDAyLDkgKzg0
NDQsMTIgQEAKIAkJCQkxNDhGMjFCMDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQ
YXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1N0YxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAwRURBRjcx
IC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVGMDRB
OTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEQy
MTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZF
Qzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU0MTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBv
aW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBM
TEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAw
QkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAxMyw2ICs4
NDU4LDcgQEAKIAkJCQlBN0U1QUIzNzE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERTEwN0VDN0U3MDA2NTA0NDYgLyogTG9v
a3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBM
b3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTFGMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0Qjcy
M0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2Vt
YmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMjIsMTAgKzg0NjgsMTIgQEAKIAkJCQlB
N0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3MzkxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkzMTgyRDk5MTQwMDUyMkMyMiAvKiBN
YXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwNzFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4
NzNEMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNw
YWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAv
KiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MEE0ODQxQTkwNTFBRjAwRDcz
Q0NBIC8qIE1hdGhDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYxMDdFQzdF
NzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDY0LDE3ICs4
NTEyLDIxIEBACiAJCQkJMEZGNzI5QUQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUUxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTI5MTY3NzFDMzMw
MDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyog
UHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjEx
NjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmls
ZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMDFCREFDREFD
MDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQ
cm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAw
RjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYx
MzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29u
ZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNCMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2
IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFODEw
N0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFE
RTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtODA4MywxMCArODUzNSwxMiBAQAogCQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAv
KiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAw
ODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkx
OEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMzM2MzdBNTFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyog
UmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBS
ZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNzEyQjNCMTFDN0IyMTIwMDdB
NTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjQyQzUxMDE1MUMw
NkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTgxMDAsNiArODU1NCw3IEBACiAJCQkJQTVCQTE1RTkxODIzNDBCMzAwQTgy
RTY5IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgy
NDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1QkExNUVDMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1
Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVF
RTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbSBpbiBT
b3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RFMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMTgsNiArODU3Myw3IEBACiAJCQkJQTU0Q0YyRjkx
ODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTRDRjJGNTE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcyOTlEQTUxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclBy
aW9yaXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OTBERDZEMTgyRjQ5OTcwMDU4ODgwNyAv
KiBTZXRJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5OURBMTE3
RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUU5ODQzMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTgxMzIsNiArODU4OCw3IEBACiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0
IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzFFQUYxMTc5ODdB
QjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczMEI2
MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTIxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8qIFN0
cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVDMTA3
RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTQ4
LDYgKzg2MDUsNyBAQAogCQkJCTcwNUI0MUFEMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDVCNDFBRjFBNkU1MDFFMDA3MTY3NTcg
LyogU3ltYm9sT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwNUI0MUIxMUE2RTUwMUUw
MDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3MEVDQTYwNzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lz
dGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODE3Niw2ICs4NjM0LDcgQEAKIAkJCQkwRjI0
RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMx
QUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIw
QzI1OTFBODAxM0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTgxOTUsNiArODY1NCw3IEBACiAJCQkJNzA5RkI4NjkxQUUzMzVDNjAwMzlEMDY5IC8qIFdl
YWtTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2
MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTRF
QzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTdEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFy
cmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAwRDI4
MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjNDNkQ5QzE1
MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwIGluIFNvdXJjZXMgKi8s
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmNwcAkocmV2aXNpb24gMTkxNTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDgg
QEAKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IGRvdWJsZSBNYWNyb0Fzc2VtYmxlcjo6dHdv
VG9UaGUzMiA9IChkb3VibGUpMHgxMDAwMDAwMDB1bGw7CkBAIC00Nyw1ICs0OSw3MCBAQCB2b2lk
IE1hY3JvQXNzZW1ibGVyOjpjYWxsUHJvYmUoc3RkOjpmdW5jCiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwogCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGNvbmQpCit7CisgICAgc3dpdGNoIChjb25kKSB7CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsOgorICAgICAgICBvdXQucHJpbnQo
Ik5vdEVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpB
Ym92ZToKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkFi
b3ZlT3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6
QmVsb3c6CisgICAgICAgIG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJC
ZWxvd09yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkdyZWF0ZXJUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWw6Cisg
ICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW5PckVxdWFsIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJM
ZXNzVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6TGVz
c1RoYW5PckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuT3JFcXVhbCIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6
UmVzdWx0Q29uZGl0aW9uIGNvbmQpCit7CisgICAgc3dpdGNoIChjb25kKSB7CisgICAgY2FzZSBN
YWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3c6CisgICAgICAgIG91dC5wcmludCgiT3ZlcmZsb3ciKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZDoKKyAgICAg
ICAgb3V0LnByaW50KCJTaWduZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9B
c3NlbWJsZXI6OlBvc2l0aXZlT3JaZXJvOgorICAgICAgICBvdXQucHJpbnQoIlBvc2l0aXZlT3Ja
ZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpaZXJvOgor
ICAgICAgICBvdXQucHJpbnQoIlplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFj
cm9Bc3NlbWJsZXI6Ok5vblplcm86CisgICAgICAgIG91dC5wcmludCgiTm9uWmVybyIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaAkocmV2aXNpb24gMTkxNTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk2LDggKzE1OTYsMTkgQEAg
cHVibGljOgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbik7CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCiAjZWxzZSAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCituYW1lc3Bh
Y2UgSlNDIHsKKwogLy8gSWYgdGhlcmUgaXMgbm8gYXNzZW1ibGVyIGZvciB0aGlzIHBsYXRmb3Jt
LCBhdCBsZWFzdCBhbGxvdyBjb2RlIHRvIG1ha2UgcmVmZXJlbmNlcyB0bwogLy8gc29tZSBvZiB0
aGUgdGhpbmdzIGl0IHdvdWxkIG90aGVyd2lzZSBkZWZpbmUsIGFsYmVpdCB3aXRob3V0IGdpdmlu
ZyB0aGF0IGNvZGUgYW55IHdheQogLy8gb2YgZG9pbmcgYW55dGhpbmcgdXNlZnVsLgpAQCAtMTYx
MSw2ICsxNjIyLDggQEAgcHVibGljOgogICAgIGVudW0gRlBSZWdpc3RlcklEIHsgTm9GUFJlZ2lz
dGVyIH07CiB9OwogCit9IC8vIG5hbWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NF
TUJMRVIpCiAKICNlbmRpZiAvLyBNYWNyb0Fzc2VtYmxlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK21hdGNoZXIgQWRkcmVzc01hdGNoZXIKKworIyBOb3RlIHRoYXQgdGhp
cyByZWxpZXMgb24gQjMgZG9pbmcgYWdncmVzc2l2ZSByZWFzc29jaWF0aW9uIGFuZCBjYW5vbmNh
bGl6YXRpb24gb2YgaW50ZWdlciBhZGRzLgorIyBXZSdsbCBuZXZlciBzZWUgQWRkKEFkZCh4LCBj
b25zdDEpLCBjb25zdDIpIGJlY2F1c2UgaXQgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVhc3Nv
Y2lhdGVkIGludG8KKyMgQWRkKHgsIGNvbnN0MSArIGNvbnN0MikuIEFsc28sIHdlIHdpbGwgbmV2
ZXIgc2VlIEFkZChjb25zdCwgeCksIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBjYW5vbmljYWxpemVk
CisjIGl0IHRvIEFkZCh4LCBjb25zdCkuIFRoYXQgc2FpZCwgaW4gdGhpcyBjb2RlIHdlIG5ldmVy
IG1ha2UgYXNzZXJ0aW9ucyBhYm91dCB0aGVzZSBvcHRpbWl6YXRpb25zCisjIGhhdmluZyBiZWVu
IHBlcmZvcm1lZC4gQWxzbywgc2luY2UgdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zIGluIEIz
IGhhdmUgYSBidWlsdC1pbiBvZmZzZXQsIHdlCisjIGRvbid0IG5lZWQgdG8gbWF0Y2ggQWRkKHgs
IGNvbnN0KS4gVGhhdCB3b3VsZCBoYXZlIGJlZW4gZm9sZGVkIGludG8gdGhlIExvYWQvU3RvcmUg
aW5zdHJ1Y3Rpb25zCisjIGFscmVhZHkuIFNvLCB0aGUgb25seSBmYW5jeSBtYXRoaW5nIHRoaXMg
Y2FuIGRvIGlzIGp1c3QgQmFzZUluZGV4IGZvcm1zLgorCitBZGRTaGlmdDEgPSBBZGQoU2hsKGlu
ZGV4LCAkbG9nU2NhbGUpLCBiYXNlKQorQWRkU2hpZnQyID0gQWRkKGJhc2UsIFNobChpbmRleCwg
JGxvZ1NjYWxlKSkKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitEaXJlY3QKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXJndW1lbnRSZWdWYWx1ZTo6fkFyZ3VtZW50UmVnVmFs
dWUoKQoreworfQorCit2b2lkIEFyZ3VtZW50UmVnVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fcmVnKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1
bWVudFJlZ1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisjaW5jbHVkZSAiUmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBBcmd1bWVudFJlZ1ZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBBcmd1
bWVudFJlZzsgfQorICAgIAorICAgIH5Bcmd1bWVudFJlZ1ZhbHVlKCk7CisKKyAgICBSZWcgYXJn
dW1lbnRSZWcoKSBjb25zdCB7IHJldHVybiBtX3JlZzsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBBcmd1bWVudFJlZ1ZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBB
cmd1bWVudFJlZywgcmVnLmlzR1BSKCkgPyBwb2ludGVyKCkgOiBEb3VibGUsIG9yaWdpbikKKyAg
ICAgICAgLCBtX3JlZyhyZWcpCisgICAgeworICAgIH0KKworICAgIFJlZyBtX3JlZzsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitCYXNpY0Jsb2NrOjpCYXNp
Y0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChp
bmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworQmFzaWNCbG9jazo6
fkJhc2ljQmxvY2soKQoreworfQorCit2b2lkIEJhc2ljQmxvY2s6OmFwcGVuZChWYWx1ZSogdmFs
dWUpCit7CisgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKK30KKworYm9vbCBCYXNpY0Jsb2Nr
OjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6OmFk
ZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6OnJlbW92ZVBy
ZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgcmV0dXJu
IEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOworfQorCit2b2lkIEJhc2lj
QmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVt
cFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6IDsgZnJl
cXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDog
KnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIEIzOjpkZWVwRHVtcCh2YWx1ZSksICJc
biIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5lIEIzQmFzaWNC
bG9jaworCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2Nr
LmgiCisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2Vk
dXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5cGVkZWYg
VmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisgICAgdHlwZWRlZiBWZWN0
b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29u
dHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNo
YXIqIGR1bXBQcmVmaXggPSAiIyI7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBWYWx1ZUxpc3Q6Oml0
ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZhbHVlTGlz
dDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBWYWx1ZUxp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4o
KTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMuZW5kKCk7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZXMuc2l6ZSgpOyB9CisgICAgVmFsdWUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgVmFsdWUqJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0
dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorCisgICAgVmFsdWUqIGxhc3QoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICBWYWx1ZSomIGxhc3QoKSB7IHJldHVybiBtX3ZhbHVl
cy5sYXN0KCk7IH0KKworICAgIGNvbnN0IFZhbHVlTGlzdCYgdmFsdWVzKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXM7IH0KKyAgICBWYWx1ZUxpc3QmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVz
OyB9CisKKyAgICB2b2lkIGFwcGVuZChWYWx1ZSopOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhcHBlbmRO
ZXcoUHJvY2VkdXJlJiwgQXJndW1lbnRzLi4uKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3Nv
cnMoKSBjb25zdDsKKyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4
KSBjb25zdDsKKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7
CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0OworICAgIFN1Y2Nl
c3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKTsKKworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2Nr
KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2so
dW5zaWduZWQgaW5kZXgpOworICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3Vj
Y2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCk7CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxj
b25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBj
b25zdDsKKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
cHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBC
YXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVj
ZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3Jz
KCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nvckxpc3Qm
IHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisKKyAgICBib29sIGFk
ZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJh
c2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9t
LCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICBkb3VibGUgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1
cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZpYSBQcm9j
ZWR1cmUuCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7
CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVlTGlzdCBtX3ZhbHVlczsKKyAgICBQ
cmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5Owor
fTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNC
bG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9j
aykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBE
dW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7
CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9Owor
CitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJs
b2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxvY2spOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFz
aWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1
ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1
ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogQmFzaWNCbG9jazo6YXBw
ZW5kTmV3KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorewor
ICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcHJvY2VkdXJlLmFkZDxWYWx1ZVR5cGU+KGFyZ3VtZW50
cy4uLik7CisgICAgYXBwZW5kKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordW5z
aWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxh
c3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5udW1TdWNjZXNzb3JzKCk7Cit9CisKK0ZyZXF1ZW50
ZWRCbG9jayBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOwor
fQorCitGcmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3Nvcihp
bmRleCk7Cit9CisKK2NvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2ljQmxvY2s6
OnN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1
ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNp
Y0Jsb2NrOjpzdWNjZXNzb3JzKCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFs
dWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworQmFzaWNCbG9jayogQmFzaWNCbG9jazo6c3VjY2Vz
c29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1Y2Nlc3Nvcihp
bmRleCkuYmxvY2soKTsKK30KKworQmFzaWNCbG9jayomIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJs
b2NrKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2Nr
KCk7Cit9CisKK1N1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3Vj
Y2Vzc29yTGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkKK3sKKyAgICByZXR1cm4g
U3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihzdWNjZXNzb3Jz
KCkpOworfQorCitTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywg
Y29uc3QgU3VjY2Vzc29yTGlzdD4oc3VjY2Vzc29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNp
Y0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jh
c2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jh
c2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBo
Tm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wg
YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
KQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKwor
ICAgIGlmIChwcmVkZWNlc3NvcnMuY29udGFpbnMocHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBwcmVkZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVt
b3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
KQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gcHJlZGVjZXNzb3IpIHsKKyAgICAgICAgICAg
IHByZWRlY2Vzc29yc1tpLS1dID0gcHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAgIHBy
ZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQoIXByZWRlY2Vzc29y
cy5jb250YWlucyhwcmVkZWNlc3NvcikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
YXNpY0Jsb2NrPgorYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJh
c2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29y
cyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0g
PT0gZnJvbSkgeworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
Ky8vIFRoaXMgcmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQg
YXJlbid0IHJlYWNoYWJsZS4KK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJl
c2V0UmVhY2hhYmlsaXR5KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9j
a3MpCit7CisgICAgLy8gQ2xlYXIgYWxsIHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZv
ciAoYXV0byYgYmxvY2sgOiBibG9ja3MpCisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5y
ZXNpemUoMCk7CisKKyAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8
QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goYmxvY2tzWzBdLmdldCgp
KTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3Mo
KSkgeworICAgICAgICAgICAgaWYgKHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKSkKKyAgICAgICAg
ICAgICAgICBzdWNjZXNzb3ItPnByZWRlY2Vzc29ycygpLmFwcGVuZChibG9jayk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChibG9ja3NbaV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGJsb2Nrc1tpXSA9IG51bGxwdHI7CisgICAgfQorfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0Jhc2ljQmxvY2tVdGlsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Js
b2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
bG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tX
b3JrbGlzdF9oCisjZGVmaW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgor
I2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7
CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2lj
QmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4g
eW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsK
KworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNv
bWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZv
cmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJl
ZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5u
aW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBi
ZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4
dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9j
ayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKKwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIg
VmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJs
b2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2lj
QmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNCbG9ja1dvcmtsaXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsK
KwordW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCit7CisgICAgc3dpdGNoIChpbnN0Lm9y
aWdpbi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6
CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgLy8gUmVzQ29uZCwgVG1wLCBUbXAKKyAgICAg
ICAgcmV0dXJuIDM7CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVm
YXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVj
aWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQor
ICAgIDogbV9jaGVja09wY29kZShvcGNvZGUpCisgICAgLCBtX251bUNoZWNrQXJncyhudW1Bcmdz
KQoreworfQorCitDaGVja1NwZWNpYWw6On5DaGVja1NwZWNpYWwoKQoreworfQorCitJbnN0IENo
ZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNvbnN0IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAg
SW5zdCBoaWRkZW5CcmFuY2gobV9jaGVja09wY29kZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRl
bkJyYW5jaC5hcmdzLnJlc2l6ZShtX251bUNoZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbV9udW1DaGVja0FyZ3M7IGktLTspCisgICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzW2ldID0g
aW5zdC5hcmdzW2kgKyAxXTsKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENo
ZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5z
dDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3Qp
LmZvckVhY2hBcmcoY2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0
KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tT
cGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChp
bnN0KS5pc1ZhbGlkRm9ybSgpCisgICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJncyhpbnN0
KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0KTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6OmFk
bWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChhcmdJ
bmRleCA+PSAxICYmIGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hlY2tBcmdzKQorICAgICAgICByZXR1
cm4gaGlkZGVuQnJhbmNoKGluc3QpLmFkbWl0c1N0YWNrKGFyZ0luZGV4IC0gMSk7CisgICAgcmV0
dXJuIGFkbWl0c1N0YWNrSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwg
aW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFsOjpn
ZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQm
IGNvbnRleHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWwgPSBoaWRkZW5CcmFuY2go
aW5zdCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICBBU1NFUlQoZmFpbC5pc1NldCgpKTsK
KworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgVmVjdG9yPFZhbHVlUmVw
PiByZXBzOworICAgIGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7CisgICAgICAg
IGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisgICAgICAgICAgICByZXBzLmFwcGVu
ZChWYWx1ZVJlcCgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNr
U3ViICYmIHZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpCisgICAgICAgICAgICByZXBzLmFwcGVu
ZChWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBz
LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzNdKSk7CisgICAgICAg
IHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENoZWNrKTsKKyAg
ICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEpKTsKKyAgICB9CisKKyAgICBh
cHBlbmRSZXBzSW1wbChjb250ZXh0LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIHJlcHMpOwor
ICAgIAorICAgIGNvbnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgY3JlYXRlU2hhcmVk
VGFzazxHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCisgICAgICAgICAgICBb
PV0gKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpIHsKKyAgICAgICAgICAg
ICAgICBmYWlsLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
U3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAgICAgICAgICAgICAg
QVNTRVJUKHN0YWNrbWFwKTsKKworICAgICAgICAgICAgICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9u
UGFyYW1zIHBhcmFtczsKKyAgICAgICAgICAgICAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAg
ICAgICAgICAgICAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnVzZWRSZWdpc3Rl
cnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgICAgICAgICAgICAgc3RhY2tt
YXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworICAgICAgICAgICAgfSkpOworCisg
ICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOyAvLyBBcyBmYXIgYXMgQWlyIHRoaW5rcywg
d2UgYXJlIG5vdCBhIHRlcm1pbmFsLgorfQorCit2b2lkIENoZWNrU3BlY2lhbDo6ZHVtcEltcGwo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jaGVja09wY29kZSwg
IigiLCBtX251bUNoZWNrQXJncywgIikiKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmRlZXBE
dW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQjM6OkNo
ZWNrVmFsdWUgbG93ZXJlZCB0byAiLCBtX2NoZWNrT3Bjb2RlLCAiIHdpdGggIiwgbV9udW1DaGVj
a0FyZ3MsICIgYXJncy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
aGVja1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1NwZWNp
YWxfaAorI2RlZmluZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHdhbnQgdG8gbG93ZXIgQ2hl
Y2sgaW5zdHJ1Y3Rpb25zIHRvIGEgYnJhbmNoLCBidXQgdGhlbiB3ZSB3YW50IHRvIHJvdXRlIHRo
YXQgYnJhbmNoIHRvIG91cgorLy8gb3V0LW9mLWxpbmUgY29kZSBpbnN0ZWFkIG9mIGRvaW5nIGFu
eXRoaW5nIGVsc2UuIEZvciB0aGlzIHJlYXNvbiwgYSBDaGVja1NwZWNpYWwgd2lsbCByZW1lbWJl
cgorLy8gd2hpY2ggYnJhbmNoIG9wY29kZSB3ZSBoYXZlIHNlbGVjdGVkIGFsb25nIHdpdGggdGhl
IG51bWJlciBvZiBhcmdzIGluIHRoZSBvdmVybG9hZCB3ZSB3YW50LiBJdAorLy8gd2lsbCBjcmVh
dGUgYW4gSW5zdCB3aXRoIHRoYXQgb3Bjb2RlIHBsdXMgdGhlIGFwcHJvcHJpYXRlIGFyZ3MgZnJv
bSB0aGUgb3duaW5nIEluc3Qgd2hlbmV2ZXIgeW91CisvLyBjYWxsIGFueSBvZiB0aGUgY2FsbGJh
Y2tzLgorLy8KKy8vIE5vdGUgdGhhdCBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tN
dWwgd2UgZXhwZWN0IHRoYXQgdGhlIEIzIGFyZ3VtZW50cyBhcmUgdGhlIHJldmVyc2UKKy8vIG9m
IHRoZSBBaXIgYXJndW1lbnRzIChBZGQoYSwgYikgPT4gQWRkMzIgYiwgYSkuIEV4Y2VwdDoKKy8v
IC0gQ2hlY2tTdWIoMCwgeCksIHdoaWNoIHR1cm5zIGludG8gQnJhbmNoTmVnMzIgeC4KKy8vIC0g
Q2hlY2tNdWwoYSwgYiksIHdoaWNoIHR1cm5zIGludG8gTXVsMzIgYiwgYSBidXQgd2UgcGFzcyBB
bnkgZm9yIGEncyBWYWx1ZVJlcC4KKworY2xhc3MgQ2hlY2tTcGVjaWFsIDogcHVibGljIFN0YWNr
bWFwU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29k
ZSwgdW5zaWduZWQgbnVtQXJncyk7CisgICAgfkNoZWNrU3BlY2lhbCgpOworCisgICAgLy8gQ29u
c3RydWN0cyBhbmQgcmV0dXJucyB0aGUgSW5zdCByZXByZXNlbnRpbmcgdGhlIGJyYW5jaCB0aGF0
IHRoaXMgd2lsbCB1c2UuCisgICAgQWlyOjpJbnN0IGhpZGRlbkJyYW5jaChjb25zdCBBaXI6Oklu
c3QmKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3Qm
LCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRt
aXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisgICAg
Ly8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4gYnJh
bmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRlcyB0
aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
Z2VuZXJhdGUoQWlyOjpJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgQWlyOjpHZW5lcmF0aW9uQ29udGV4
dCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgQWlyOjpPcGNvZGUgbV9jaGVja09wY29kZTsKKyAgICB1bnNp
Z25lZCBtX251bUNoZWNrQXJnczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tTcGVjaWFsX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrVmFs
dWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitDaGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0
YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrVmFsdWVf
aAorI2RlZmluZSBCM0NoZWNrVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBj
YXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNr
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOwor
CisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRh
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVj
a1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NF
UlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2Rl
ID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwp
OworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
cmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBw
cmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0K
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiT3B0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBzaG91bGREdW1w
SVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBG
VEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7
Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRp
b25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVIo
KQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkgfHwgc2hvdWxkVmFsaWRh
dGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNl
KCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCk7Cit9
CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25z
Ojp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVm
aW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlk
YXRlSVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM0NvbW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bW11dGF0aXZpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW11dGF0aXZpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tbXV0YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNv
bW11dGF0aXZpdHkpIHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQo
IkNvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZl
OgorICAgICAgICBvdXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDb21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitl
bnVtIENvbW11dGF0aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZl
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2Ns
YXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpC
Mzo6Q29tbXV0YXRpdml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRl
cm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNv
bk1hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBDb21wYXJpc29uTWF0Y2hl
cgorCitUZXN0TG9hZE5vdFplcm8xID0gQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorVGVzdExv
YWROb3RaZXJvMiA9IEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorVGVzdE5vdFplcm8gPSBBbmQo
bGVmdCwgcmlnaHQpCisKK1Rlc3RMb2FkWmVybzEgPSBFcXVhbChBbmQoTG9hZChhZGRyZXNzKSwg
cmlnaHQpLCAkMCkKK1Rlc3RMb2FkWmVybzIgPSBFcXVhbChBbmQobGVmdCwgTG9hZChhZGRyZXNz
KSksICQwKQorVGVzdFplcm8gPSBFcXVhbChBbmQobGVmdCwgcmlnaHQpLCAkMCkKKworTG9hZEVx
dWFsMSA9IEVxdWFsKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorTG9hZEVxdWFsMiA9IEVxdWFsKGxl
ZnQsIExvYWQoYWRkcmVzcykpCitOb3QgPSBFcXVhbCh2YWx1ZSwgJDApCitFcXVhbCA9IEVxdWFs
KGxlZnQsIHJpZ2h0KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMy
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
MzJWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZh
bHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4g
b3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisg
ICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFs
dWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM0NvbnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6On5D
b25zdDY0VmFsdWUoKQoreworfQorCit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzQ29uc3Q2NFZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0NjRWYWx1ZSA6IHB1YmxpYyBW
YWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7
IHJldHVybiBvcGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25zdDY0VmFsdWUoKTsK
KyAgICAKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92
YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDY0X3QgbV92YWx1ZTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFs
dWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisKK3Zv
aWQgQ29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJs
ZVZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdERvdWJsZVZhbHVl
IDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29k
ZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQorICAgIAorICAgIH5D
b25zdERvdWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1
cmU7CisKKyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCBkb3VibGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0RG91YmxlLCBEb3Vi
bGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFsdWVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzQ29udHJvbFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNC
YXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKQoreworfQor
Cit2b2lkIENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobGlzdER1bXAobV9zdWNjZXNzb3JzKSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNl
IEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAv
LyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRy
b2xWYWx1ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3dpdGNoVmFsdWUtPmFzPENvbnRy
b2xWYWx1ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29y
TGlzdDsKKworICAgIH5Db250cm9sVmFsdWUoKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3Nv
cnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgRnJlcXVlbnRl
ZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNz
b3JzW2luZGV4XTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgU3VjY2Vzc29y
TGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorICAgIFN1
Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworICAgIC8vIFVzZSB0aGlzIGZvciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
KyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4u
LikKKyAgICB7CisgICAgfQorCisgICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVsYXRlIHRoaXMu
CisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgorICAgIENvbnRy
b2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAg
ICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAg
ICBBU1NFUlQob3Bjb2RlID09IE9vcHMpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBS
ZXR1cm4uCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogcmVzdWx0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbiwgcmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9
PSBSZXR1cm4pOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENvbnRy
b2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgY29u
c3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29k
ZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsK
KyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKworICAgIC8vIFVz
ZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAg
ICAgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYg
bm8pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNh
dGUpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAgICAgIG1f
c3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChubyk7
CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb250cm9sVmFsdWVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzRnJlcXVlbmN5
Q2xhc3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVl
bmN5KQoreworICAgIHN3aXRjaCAoZnJlcXVlbmN5KSB7CisgICAgY2FzZSBGcmVxdWVuY3lDbGFz
czo6Tm9ybWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vcm1hbCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBGcmVxdWVuY3lDbGFzczo6UmFyZToKKyAgICAgICAgb3V0LnByaW50KCJSYXJl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFz
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0ZyZXF1ZW5jeUNsYXNzX2gKKyNk
ZWZpbmUgQjNGcmVxdWVuY3lDbGFzc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBGcmVxdWVuY3lDbGFzcyA6IHVp
bnQ4X3QgeworICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IGh5cG90aGVzaXMgYWJvdXQgdGhlIGZy
ZXF1ZW5jeSBvZiB0aGlzIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QuIFRoaXMgaXMKKyAgICAvLyB0
aGUgY29tbW9uIGNhc2UuIFdlIGNhbiBzdGlsbCB1c2UgYmFzaWMgYmxvY2sgZnJlcXVlbmN5IGlu
IHRoaXMgY2FzZS4KKyAgICBOb3JtYWwsCisKKyAgICAvLyBXZSBleHBlY3QgdGhhdCB0aGlzIGNv
bnRyb2wgZmxvdyBjb25zdHJ1Y3Qgd2lsbCBiZSByZWFjaGVkIHN1cGVyIHJhcmVseS4gSXQncyB2
YWxpZCB0bworICAgIC8vIHBlcmZvcm0gb3B0aW1pemF0aW9ucyB0aGF0IHB1bmlzaCBSYXJlIGNv
ZGUuIE5vdGUgdGhhdCB0aGVyZSB3aWxsIGJlIHNpdHVhdGlvbnMgd2hlcmUgeW91CisgICAgLy8g
aGF2ZSB0byBzb21laG93IGNvbnN0cnVjdCBhIG5ldyBmcmVxdWVuY3kgY2xhc3MgZnJvbSBhIG1l
cmdpbmcgb2YgbXVsdGlwbGUgY2xhc3Nlcy4gV2hlbgorICAgIC8vIHRoaXMgaGFwcGVucywgbmV2
ZXIgY2hvb3NlIFJhcmU7IGFsd2F5cyBnbyB3aXRoIE5vcm1hbC4gVGhpcyBpcyBuZWNlc3Nhcnkg
YmVjYXVzZSB3ZQorICAgIC8vIHJlYWxseSBkbyBwdW5pc2ggUmFyZSBjb2RlIHZlcnkgYmFkbHku
CisgICAgUmFyZQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6RnJlcXVlbmN5Q2xhc3MpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW5jeUNsYXNzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVudGVkQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVudGVkQmxvY2tfaAor
I2RlZmluZSBCM0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVu
dGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0ZyZXF1
ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNHZW5lcmF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5j
bHVkZSAiQjNMb3dlclRvQWlyLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRl
ICJCM1ZhbGlkYXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lk
IGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAg
ICBBaXI6OkNvZGUgY29kZTsKKyAgICBnZW5lcmF0ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7Cisg
ICAgQWlyOjpnZW5lcmF0ZShjb2RlLCBqaXQpOworfQorCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJv
Y2VkdXJlJiBwcm9jZWR1cmUsIEFpcjo6Q29kZSYgY29kZSkKK3sKKyAgICBpZiAoc2hvdWxkVmFs
aWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJpbml0aWFsIik7CisKKyAg
ICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBCMzpcbiIp
OworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorICAgIAorICAgIC8vIEZJWE1F
OiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIo
KSkKKyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlLCAiZmluYWwiKTsKKyAgICAKKyAgICBpZiAo
c2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQjMgYmVmb3JlIGdlbmVyYXRpb246
XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIGxvd2VyVG9B
aXIocHJvY2VkdXJlLCBjb2RlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyYXRlX2gKKyNkZWZp
bmUgQjNHZW5lcmF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1
cmU7CituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIHRha2VzIGEgQjM6
OlByb2NlZHVyZSwgb3B0aW1pemVzIGl0IGluLXBsYWNlLCBhbmQgZ2VuZXJhdGVzIGl0IHRvIG1h
Y2hpbmUgY29kZSBieSBmaXJzdAorLy8gaW50ZXJuYWxseSBjb252ZXJ0aW5nIHRvIGFuIEFpcjo6
Q29kZSBhbmQgdGhlbiBnZW5lcmF0aW5nIHRoYXQuCit2b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYs
IENDYWxsSGVscGVycyYpOworCisvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0aW1p
emVzIGl0IGluLXBsYWNlLCBhbmQgbG93ZXJzIGl0IHRvIEFpci4gWW91IGNhbiB0aGVuIGdlbmVy
YXRlCisvLyB0aGUgQWlyIHRvIG1hY2hpbmUgY29kZSB1c2luZyBBaXI6OmdlbmVyYXRlKCkuIE5v
dGUgdGhhdCBhbiBBaXI6OkNvZGUgd2lsbCBoYXZlIHBvaW50ZXJzIGludG8gdGhlCisvLyBCMzo6
UHJvY2VkdXJlLCBzbyB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQjM6OlByb2NlZHVyZSBv
dXRsaXZlcyB0aGUgQWlyOjpDb2RlLgordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIEFp
cjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0dlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNHZW5lcmljRnJlcXVlbnRlZEJs
b2NrX2gKKyNkZWZpbmUgQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBBIGZy
ZXF1ZW50ZWQgYmxvY2sgaXMgYSB0dXBsZSBvZiBCYXNpY0Jsb2NrKiBhbmQgRnJlcXVlbmN5Q2xh
c3MuIEl0J3MgdXN1YWxseSB1c2VkIGFzIGEKKy8vIHN1Y2Nlc3NvciBlZGdlLgorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorY2xhc3MgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayB7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jaygKKyAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBudWxscHRyLCBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3kgPSBGcmVx
dWVuY3lDbGFzczo6Tm9ybWFsKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICwg
bV9mcmVxdWVuY3koZnJlcXVlbmN5KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9ibG9jayA9PSBvdGhlci5tX2Jsb2NrCisgICAgICAgICAgICAmJiBtX2Zy
ZXF1ZW5jeSA9PSBvdGhlci5tX2ZyZXF1ZW5jeTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gR2VuZXJp
Y0ZyZXF1ZW50ZWRCbG9jaygpOworICAgIH0KKworICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkgY29u
c3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIEJhc2ljQmxvY2sqJiBibG9jaygpIHsgcmV0dXJu
IG1fYmxvY2s7IH0KKyAgICBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3koKSBjb25zdCB7IHJldHVy
biBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoZnJlcXVlbmN5KCkgIT0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1h
bCkKKyAgICAgICAgICAgIG91dC5wcmludChmcmVxdWVuY3koKSwgIjoiKTsKKyAgICAgICAgb3V0
LnByaW50KHBvaW50ZXJEdW1wKG1fYmxvY2spKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFz
aWNCbG9jayogbV9ibG9jazsKKyAgICBGcmVxdWVuY3lDbGFzcyBtX2ZyZXF1ZW5jeTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5k
ZXhNYXBfaAorI2RlZmluZSBCM0luZGV4TWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CisvLyBUaGlzIGlzIGEgbWFwIGZvciBrZXlzIHRoYXQgaGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1
cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8gZWZmaWNpZW50IGZv
ciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVzZSBtYXBzLCBzaW5j
ZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeQorLy8gc3BhcnNlIGluZGljZXMgYW5kIHRoZXJlIGFyZSBh
IGxvdCBvZiBWYWx1ZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+
CitjbGFzcyBJbmRleE1hcCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW5kZXhNYXAoc2l6ZV90
IHNpemUgPSAwKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IucmVzaXplKHNpemUpOworICAgIH0K
KworICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3Iu
cmVzaXplKHNpemUpOworICAgIH0KKworICAgIFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgfQorICAg
IAorICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNJbmRleE1h
cF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisj
aW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9y
IHRoaW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJh
c2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24n
dCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZl
cnkgc3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisv
LyBJZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2lj
QmxvY2s+LiBTbywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3Mg
SW5kZXhTZXQgeworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAg
Ym9vbCBhZGQoVCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1
ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0
aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29s
bGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBD
b2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0
ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24p
CisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBt
X2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRl
cmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24s
IG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlv
blR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAg
IH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQu
dmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86Cisg
ICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZh
bHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQor
CisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
Q29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMo
KS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgs
IGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWly
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1
ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNBZGRyZXNzTWF0Y2hlci5oIgorI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbW11dGF0aXZpdHku
aCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2lu
Y2x1ZGUgIkIzTG93ZXJpbmdNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5j
bHVkZSAiQjNVc2VDb3VudHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIExvd2VyVG9BaXIg
eworcHVibGljOgorICAgIExvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENvZGUmIGNv
ZGUpCisgICAgICAgIDogdmFsdWVUb1RtcChwcm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQorICAg
ICAgICAsIGJsb2NrVG9CbG9jayhwcm9jZWR1cmUuc2l6ZSgpKQorICAgICAgICAsIHVzZUNvdW50
cyhwcm9jZWR1cmUpCisgICAgICAgICwgYWRkcmVzc1NlbGVjdG9yKCp0aGlzKQorICAgICAgICAs
IGxvd2VyaW5nU2VsZWN0b3IoKnRoaXMpCisgICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkK
KyAgICAgICAgLCBjb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAg
ICB7CisgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlKQorICAg
ICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXSA9IGNvZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1
ZW5jeSgpKTsKKworICAgICAgICAvLyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFs
IGxldmVsLiBUaGlzIGlzIGEgZ29vZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKKyAgICAgICAg
Ly8gaG9pc3RlZCBhZGRyZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNr
IGludG8gdGhlIGxvb3AuCisgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJv
Y2VkdXJlLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBz
dGF0ZS4KKyAgICAgICAgICAgIGluc3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gUHJvY2VzcyBibG9ja3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBi
ZWZvcmUgZGVmcy4gVGhhdCdzIHdoYXQgYWxsb3dzIHVzCisgICAgICAgICAgICAvLyB0byBtYXRj
aCBwYXR0ZXJucyBlZmZlY3RpdmVseS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVjdG9y
PEluc3Q+KCkpOworICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGJsb2NrLT5hdChpKTsK
KyAgICAgICAgICAgICAgICBydW5Mb3dlcmluZ01hdGNoZXIoY3VycmVudFZhbHVlLCBsb3dlcmlu
Z1NlbGVjdG9yKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0
aGUgaW5zdHJ1Y3Rpb25zLiBpbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNv
IHdlIHByb2Nlc3MKKyAgICAgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBpbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBm
b3IgKEluc3QmIGluc3QgOiBpbnN0c1tpXSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tUb0Js
b2NrW2Jsb2NrXS0+YXBwZW5kSW5zdChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVw
IGNvcnJlY3RseS4KKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+c3VjY2Vzc29ycygpIDw9IDIp
OworICAgICAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1
Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPnN1
Y2Nlc3NvcnMoKS5hcHBlbmQoYmxvY2tUb0Jsb2NrW3N1Y2Nlc3Nvcl0pOworICAgICAgICB9Cisg
ICAgfQorCisgICAgVG1wIHRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBUbXAmIHRt
cCA9IHZhbHVlVG9UbXBbdmFsdWVdOworICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgIHRt
cCA9IGNvZGUubmV3VG1wKGlzSW50KHZhbHVlLT50eXBlKCkpID8gQXJnOjpHUCA6IEFyZzo6RlAp
OworICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKworICAgIC8vIFRoaXMgZ2l2ZXMgeW91IHRo
ZSBhZGRyZXNzIG9mIHRoZSBnaXZlbiBMb2FkIG9yIFN0b3JlLiBJZiBpdCdzIG5vdCBhIExvYWQg
b3IgU3RvcmUsIHRoZW4KKyAgICAvLyBpdCByZXR1cm5zIEFyZygpLgorICAgIEFyZyBhZGRyKFZh
bHVlKiBtZW1vcnlWYWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiB2YWx1ZSA9IG1l
bW9yeVZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAg
ICAgICAgIHJldHVybiBBcmcoKTsKKworICAgICAgICBydW5BZGRyZXNzTWF0Y2hlcih2YWx1ZS0+
Y2hpbGRyZW4oKS5sYXN0KCksIGFkZHJlc3NTZWxlY3Rvcik7CisgICAgICAgIHJldHVybiBhZGRy
ZXNzU2VsZWN0b3Iuc2VsZWN0ZWRBZGRyZXNzLndpdGhPZmZzZXQodmFsdWUtPm9mZnNldCgpKTsK
KyAgICB9CisKKyAgICBBcmcgbG9hZEFkZHIoVmFsdWUqIGxvYWRWYWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChsb2FkVmFsdWUtPm9wY29kZSgpID09IExvYWQpCisgICAgICAgICAgICByZXR1cm4g
YWRkcihsb2FkVmFsdWUpOworICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgfQorCisgICAgQXJn
IGltbShWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAodmFsdWUtPmhhc0ludDMyKCkp
CisgICAgICAgICAgICByZXR1cm4gQXJnOjppbW0odmFsdWUtPmFzSW50MzIoKSk7CisgICAgICAg
IHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcgaW1tT3JUbXAoVmFsdWUqIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgaWYgKEFyZyByZXN1bHQgPSBpbW0odmFsdWUpKQorICAgICAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHRtcCh2YWx1ZSk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkg
PSBOb3RDb21tdXRhdGl2ZT4KKyAgICB2b2lkIGFwcGVuZEJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1
ZSogcmlnaHQpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0ID0gdG1wKGN1cnJlbnRWYWx1ZSk7
CisgICAgICAgIAorICAgICAgICAvLyBUaHJlZS1vcGVyYW5kIGZvcm1zIGxpa2U6CisgICAgICAg
IC8vICAgICBPcCBhLCBiLCBjCisgICAgICAgIC8vIG1lYW4gc29tZXRoaW5nIGxpa2U6CisgICAg
ICAgIC8vICAgICBjID0gYSBPcCBiCisKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwg
QXJnOjpJbW0sIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGlmIChjb21tdXRh
dGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAgICAgICAgICAgICAgaWYgKGltbShyaWdodCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKHJpZ2h0KSwgdG1wKGxl
ZnQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBBIG5vbi1jb21t
dXRhdGl2ZSBvcGVyYXRpb24gY291bGQgaGF2ZSBhbiBpbW1lZGlhdGUgaW4gbGVmdC4KKyAgICAg
ICAgICAgICAgICBpZiAoaW1tKGxlZnQpKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChv
cGNvZGUsIGltbShsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmIChpbW0ocmlnaHQpICYmIGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAs
IEFyZzo6SW1tLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChs
ZWZ0KSwgaW1tKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIFR3by1vcGVyYW5kIGZvcm1zIGxpa2U6CisgICAgICAgIC8vICAgICBP
cCBhLCBiCisgICAgICAgIC8vIG1lYW4gc29tZXRoaW5nIGxpa2U6CisgICAgICAgIC8vICAgICBi
ID0gYiBPcCBhCisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgcHJlZmVyIHZlcnNpb25z
IG9mIHRoZSBvcGVyYXRpb24gdGhhdCBoYXZlIGEgZnVzZWQgbG9hZCBvdmVyIHRocmVlCisgICAg
ICAgIC8vIG9wZXJhbmQgZm9ybXMuCisgICAgICAgIAorICAgICAgICBpZiAoY29tbXV0YXRpdml0
eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAgICAgICAgQXJnIGxlZnRBZGRyID0gbG9hZEFkZHIo
bGVmdCk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBsZWZ0QWRkci5raW5k
KCksIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAocmlnaHQp
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGxlZnRBZGRyLCByZXN1
bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIEFyZyByaWdodEFkZHIgPSBsb2FkQWRkcihyaWdodCk7CisgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAg
ICAgICAgYXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIHJpZ2h0QWRkciwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRt
cCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIHRt
cChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQob3Bj
b2RlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPEFpcjo6T3Bj
b2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+
CisgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQp
CisgICAgeworICAgICAgICBBcmcgc3RvcmVBZGRyID0gYWRkcihjdXJyZW50VmFsdWUpOworICAg
ICAgICBBU1NFUlQoc3RvcmVBZGRyKTsKKworICAgICAgICBWYWx1ZSogb3RoZXJWYWx1ZTsKKyAg
ICAgICAgaWYgKGFkZHIobGVmdCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAgb3RoZXJWYWx1
ZSA9IHJpZ2h0OworICAgICAgICBlbHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZl
ICYmIGFkZHIocmlnaHQpID09IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSBs
ZWZ0OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
aWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBzdG9yZUFkZHIua2luZCgpKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAob3Ro
ZXJWYWx1ZSksIHN0b3JlQWRkcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBaXI6Ok9w
Y29kZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGlu
c3RzLmxhc3QoKS5hcHBlbmQoSW5zdChvcGNvZGUsIGN1cnJlbnRWYWx1ZSwgc3RkOjpmb3J3YXJk
PEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKyAgICAKKyAgICBJbmRleFNldDxW
YWx1ZT4gbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBp
biBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gdmFsdWVUb1RtcDsKKyAgICBJbmRleE1h
cDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gYmxvY2tUb0Jsb2NrOworCisgICAg
VXNlQ291bnRzIHVzZUNvdW50czsKKworICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IGluc3Rz
OworCisgICAgVmFsdWUqIGN1cnJlbnRWYWx1ZTsKKworICAgIC8vIFRoZSBhZGRyZXNzIHNlbGVj
dG9yIHdpbGwgbWF0Y2ggYW55IHBhdHRlcm4gd2hlcmUgdGhlIGlucHV0IG9wZXJhbmRzIGFyZSBh
dmFpbGFibGUgYXMgVG1wcy4KKyAgICAvLyBJdCBkb2Vzbid0IGNhcmUgYWJvdXQgc2hhcmluZy4g
SXQgd2lsbCBoYXBwaWx5IGVtaXQgdGhlIHNhbWUgYWRkcmVzcyBleHByZXNzaW9uIG92ZXIgYW5k
IG92ZXIKKyAgICAvLyBhZ2FpbiByZWdhcmRsZXNzIG9mIHRoZSBleHByZXNzaW9uJ3MgY29tcGxl
eGl0eS4gVGhpcyB3b3JrcyBvdXQgZmluZSwgc2luY2UgYXQgdGhlIG1hY2hpbmUKKyAgICAvLyBs
ZXZlbCwgYWRkcmVzcyBleHByZXNzaW9ucyBhcmUgc3VwZXIgY2hlYXAuIEhvd2V2ZXIsIHRoaXMg
ZG9lcyBoYXZlIGEgaGFjayB0byBhdm9pZAorICAgIC8vICJ1bmhvaXN0aW5nIiBhZGRyZXNzIGV4
cHJlc3Npb25zLgorICAgIGNsYXNzIEFkZHJlc3NTZWxlY3RvciB7CisgICAgcHVibGljOgorICAg
ICAgICBBZGRyZXNzU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIpCisgICAgICAgICAgICA6IGxv
d2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29sIGFjY2VwdFJv
b3QoVmFsdWUqIHJvb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8gbWF0Y2ggYW4gYWRkcmVzcyBleHByZXNzaW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb21w
dXRlZAorICAgICAgICAgICAgLy8gZXhwbGljaXRseS4KKyAgICAgICAgICAgIHJldHVybiAhbG93
ZXIudmFsdWVUb1RtcFtyb290XTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWNjZXB0Um9v
dExhdGUoVmFsdWUqKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLnZhbHVlVG9U
bXBbdmFsdWVdKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBhY2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBi
b29sIGFjY2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0
ZShBcmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQu
Y29udGFpbnModmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAg
ICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRz
TGF0ZShBcmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQxKFZhbHVl
KiBpbmRleCwgVmFsdWUqIGxvZ1NjYWxlLCBWYWx1ZSogYmFzZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGxvZ1NjYWxlLT5hc0ludCgpIDwgMCB8fCBsb2dTY2FsZS0+YXNJbnQoKSA+IDMp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2VsZWN0ZWRBZGRy
ZXNzID0gQXJnOjppbmRleCgKKyAgICAgICAgICAgICAgICBsb3dlci50bXAoYmFzZSksIGxvd2Vy
LnRtcChpbmRleCksIDEgPDwgbG9nU2NhbGUtPmFzSW50KCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MihWYWx1ZSogYmFz
ZSwgVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnlBZGRTaGlmdDEoaW5kZXgsIGxvZ1NjYWxlLCBiYXNlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChyaWdodC0+aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAg
IC8vIFRoaXMgcHJvZHVjdGlvbiBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkgc2luY2Ugd2UgZXhw
ZWN0CisgICAgICAgICAgICAgICAgLy8gTG9hZChBZGQoQHgsIEBjb25zdDEpLCBvZmZzZXQgPSBj
b25zdDIpIHRvIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmVuZ3RoLXJlZHVjZWQKKyAgICAgICAgICAg
ICAgICAvLyB0byBMb2FkKEB4LCBvZmZzZXQgPSBjb25zdDEgKyBjb25zdDIpLgorICAgICAgICAg
ICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAobGVmdCksIHJpZ2h0
LT5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KGxvd2VyLnRtcChs
ZWZ0KSwgbG93ZXIudG1wKHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgdHJ5RGlyZWN0KCkKKyAgICAgICAgeworICAgICAgICAgICAg
c2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChsb3dlci5jdXJyZW50VmFsdWUp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBMb3dlclRvQWlyJiBsb3dlcjsKKyAgICAgICAgQXJnIHNlbGVjdGVkQWRkcmVzczsKKyAgICB9
OworICAgIEFkZHJlc3NTZWxlY3RvciBhZGRyZXNzU2VsZWN0b3I7CisKKyAgICAvLyBUaGlzIHdp
bGwgbWF0Y2ggY29tcGxleCBtdWx0aS12YWx1ZSBleHByZXNzaW9ucywgYnV0IG9ubHkgaWYgdGhl
cmUgaXMgbm8gc2hhcmluZy4gRm9yIGV4YW1wbGUsCisgICAgLy8gaXQgd29uJ3QgbWF0Y2ggYSBM
b2FkIHR3aWNlIGFuZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gZG8gdHdvIGxvYWRzIHdo
ZW4gdGhlIG9yaWdpbmFsCisgICAgLy8gY29kZSBqdXN0IGRpZCBvbmUuCisgICAgY2xhc3MgTG93
ZXJpbmdTZWxlY3RvciB7CisgICAgcHVibGljOgorICAgICAgICBMb3dlcmluZ1NlbGVjdG9yKExv
d2VyVG9BaXImIGxvd2VyKQorICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAgICAgewor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFjY2VwdFJvb3QoVmFsdWUqIHJvb3Qp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocm9vdCwgIWxvd2VyLmxvY2tl
ZC5jb250YWlucyhyb290KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgYWNjZXB0Um9vdExhdGUoVmFsdWUqKSB7IH0KKyAgICAgICAgCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRJ
bnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGludGVybmFsIHRoaW5ncyBoYXMgYWxyZWFk
eSBiZWVuIGNvbXB1dGVkLCB0aGVuIHdlIGRvbid0IHdhbnQgdG8gY2F1c2UKKyAgICAgICAgICAg
IC8vIGl0IHRvIGJlIHJlY29tcHV0ZWQgYWdhaW4uCisgICAgICAgICAgICBpZiAobG93ZXIudmFs
dWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBXZSByZXF1aXJlIGludGVybmFscyB0byBoYXZlIG9ubHkgb25l
IHVzZSAtIHVzLgorICAgICAgICAgICAgaWYgKGxvd2VyLnVzZUNvdW50c1t2YWx1ZV0gIT0gMSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IHJldHVybiBhY2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAg
ICBib29sIGFjY2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRJ
bnRlcm5hbHNMYXRlKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAg
ICAgeworICAgICAgICAgICAgbG93ZXIubG9ja2VkLmFkZCh2YWx1ZSk7CisgICAgICAgICAgICBh
Y2NlcHRJbnRlcm5hbHNMYXRlKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgdm9p
ZCBhY2NlcHRJbnRlcm5hbHNMYXRlKCkgeyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUq
IHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBp
ZiAobG93ZXIubG9ja2VkLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYWNjZXB0T3BlcmFuZHMoYXJndW1lbnRzLi4uKTsK
KyAgICAgICAgfQorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9p
ZCBhY2NlcHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKworICAgICAgICBib29sIHRy
eUxvYWQoVmFsdWUqIGFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd2VyLmFwcGVu
ZChNb3ZlLCBsb3dlci5hZGRyKGFkZHJlc3MpLCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVl
KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
dHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgICAgIGxvd2VyLmFwcGVuZEJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmln
aHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFsdWUq
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAg
ICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbG93ZXIudHJ5QXBwZW5k
U3RvcmVCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVz
IQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmVBbmRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQsIFZhbHVlKikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkp
IHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvd2Vy
LnRyeUFwcGVuZFN0b3JlQmluT3A8QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQg
bW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVN0b3JlKFZhbHVlKiB2YWx1ZSwgVmFsdWUq
KQorICAgICAgICB7CisgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgbG93ZXIudG1wKHZh
bHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlSZXR1cm4oVmFsdWUqIHZhbHVl
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAg
ICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBsb3dlci5pbW1PclRtcCh2YWx1ZSksIFRtcChHUFJJbmZv
OjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmVEb3VibGUsIGxv
d2VyLnRtcCh2YWx1ZSksIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvd2VyLmFwcGVuZChSZXQpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXIm
IGxvd2VyOworICAgIH07CisgICAgTG93ZXJpbmdTZWxlY3RvciBsb3dlcmluZ1NlbGVjdG9yOwor
ICAgIAorICAgIFByb2NlZHVyZSYgcHJvY2VkdXJlOworICAgIENvZGUmIGNvZGU7Cit9OworCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYgcHJv
Y2VkdXJlLCBDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jZWR1
cmUsICJsb3dlclRvQWlyIik7CisgICAgTG93ZXJUb0FpciBsb3dlclRvQWlyKHByb2NlZHVyZSwg
Y29kZSk7CisgICAgbG93ZXJUb0Fpci5ydW4oKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNMb3dlclRvQWlyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJUb0Fpci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0xv
d2VyVG9BaXJfaAorI2RlZmluZSBCM0xvd2VyVG9BaXJfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25h
bWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgbG93ZXJzIHRoZSBjdXJyZW50
IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKwordm9pZCBsb3dlclRvQWlyKFByb2NlZHVy
ZSYsIEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5z
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRj
aGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKyMgQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisKKyMg
VGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0aGUg
dG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJldmVy
IHBvc3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hlciBp
cyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9IExv
YWQoYWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitTdG9yZUFkZExvYWQgPSBT
dG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmVBbmRMb2FkID0gU3RvcmUoQWRk
KGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFsdWUsIGFkZHJlc3MpCisK
K1JldHVybiA9IFJldHVybih2YWx1ZSkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworTWVtb3J5VmFsdWU6On5NZW1v
cnlWYWx1ZSgpCit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIm9m
ZnNldCA9ICIsIG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNN
ZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTWVtb3J5VmFs
dWVfaAorI2RlZmluZSBCM01lbW9yeVZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBj
YXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkRmxv
YXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNh
c2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0b3Jl
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUoKTsK
KworICAgIGludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRo
aXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBM
b2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJu
ZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLAorICAg
ICAgICBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwg
dHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7
CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAg
ICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAg
ICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9
PSBEb3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9y
ZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxv
YXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBl
ID09IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRo
ZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBv
ZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBMb2Fk
RmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAg
ICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAg
ICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KKyAg
ICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludDMy
X3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmln
aW4sIHZhbHVlLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7Cisg
ICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6
CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGludDMyX3QgbV9vZmZzZXQgeyAwIH07
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyNiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVz
cGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bj
b2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTm9wOgorICAg
ICAgICBvdXQucHJpbnQoIk5vcCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJZGVudGl0
eToKKyAgICAgICAgb3V0LnByaW50KCJJZGVudGl0eSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDb25zdDMyOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0MzIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDY0Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQo
IkNvbnN0RG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdDoKKyAg
ICAgICAgb3V0LnByaW50KCJTdGFja1Nsb3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
QXJndW1lbnRSZWc6CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnRSZWciKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICBvdXQucHJpbnQoIkZyYW1l
UG9pbnRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGQ6CisgICAgICAgIG91dC5w
cmludCgiQWRkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN1YjoKKyAgICAgICAgb3V0
LnByaW50KCJTdWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTXVsOgorICAgICAgICBv
dXQucHJpbnQoIk11bCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEaXY6CisgICAgICAg
IG91dC5wcmludCgiRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoaWxsRGl2Ogor
ICAgICAgICBvdXQucHJpbnQoIkNoaWxsRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE1vZDoKKyAgICAgICAgb3V0LnByaW50KCJNb2QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQml0QW5kOgorICAgICAgICBvdXQucHJpbnQoIkJpdEFuZCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRPciIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIG91dC5wcmludCgiQml0WG9yIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNobDoKKyAgICAgICAgb3V0LnByaW50KCJTaGwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1NocjoKKyAgICAgICAgb3V0LnByaW50KCJTU2hy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpTaHI6CisgICAgICAgIG91dC5wcmludCgi
WlNociIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgb3V0LnBy
aW50KCJTRXh0OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MTY6CisgICAgICAg
IG91dC5wcmludCgiU0V4dDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQzMjoK
KyAgICAgICAgb3V0LnByaW50KCJTRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
WkV4dDMyOgorICAgICAgICBvdXQucHJpbnQoIlpFeHQzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBGUm91bmQ6CisgICAgICAgIG91dC5wcmludCgiRlJvdW5kIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIG91dC5wcmludCgiSVRvRCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBEVG9JMzI6CisgICAgICAgIG91dC5wcmludCgiRFRvSTMyIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkVx
dWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBvdXQu
cHJpbnQoIk5vdEVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NUaGFuOgor
ICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEdyZWF0ZXJUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzRXF1
YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICBv
dXQucHJpbnQoIkdyZWF0ZXJFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92
ZToKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlRXF1YWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJC
ZWxvd0VxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAg
b3V0LnByaW50KCJMb2FkOFoiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhTOgor
ICAgICAgICBvdXQucHJpbnQoIkxvYWQ4UyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBM
b2FkMTZaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNloiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZTIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkRmxv
YXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDoKKyAgICAgICAgb3V0LnByaW50
KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgb3V0
LnByaW50KCJTdG9yZTgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmUxNjoKKyAg
ICAgICAgb3V0LnByaW50KCJTdG9yZTE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
b3JlRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiU3RvcmVGbG9hdCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDQ2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJDQ2FsbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBQYXRjaHBvaW50OgorICAgICAgICBvdXQucHJpbnQo
IlBhdGNocG9pbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAg
ICAgIG91dC5wcmludCgiQ2hlY2tBZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hl
Y2tTdWI6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tTdWIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tNdWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2siKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgb3V0LnByaW50KCJV
cHNpbG9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBoaToKKyAgICAgICAgb3V0LnBy
aW50KCJQaGkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSnVtcDoKKyAgICAgICAgb3V0
LnByaW50KCJKdW1wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJyYW5jaDoKKyAgICAg
ICAgb3V0LnByaW50KCJCcmFuY2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3dpdGNo
OgorICAgICAgICBvdXQucHJpbnQoIlN3aXRjaCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBSZXR1cm46CisgICAgICAgIG91dC5wcmludCgiUmV0dXJuIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIE9vcHM6CisgICAgICAgIG91dC5wcmludCgiT29wcyIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09wY29k
ZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitlbnVtIE9wY29kZSA6IGludDE2X3QgeworICAgIC8vIEEgbm8tb3AgdGhhdCByZXR1cm5zIFZv
aWQsIHVzZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0byByZW1vdmUgYSB2YWx1ZS4KKyAgICBOb3As
CisgICAgIAorICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1c2FibGUgd2l0aCBhbnkgdmFs
dWUgdHlwZS4KKyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0YW50cy4gVXNlIHRoZSBDb25z
dFZhbHVlKiBjbGFzc2VzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28g
dGhhdCB3ZSBjYW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUgd2Ugd291bGQgY29uc3RydWN0
IHRoZW0uIExhcmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRvIGNyZWF0ZS4KKyAgICBDb25z
dDMyLAorICAgIENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisKKyAgICAvLyBUaGUgbWFnaWNh
bCBzdGFjayBzbG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0
aGUgcHJvZ3JhbSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlv
dSBwdXQgaXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pv
aW50IHJhbmdlIG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVl
IGNsYXNzLgorICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJl
Z2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJv
Z3JhbQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQg
aXQsIGFuZCB0aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1cmUgdGhhdCB3ZQorICAgIC8v
IGRvbid0IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFsbG9jYXRpb24gb3IgY2FsbHMg
KGVpdGhlciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQorICAgIC8vIHN0YWNrIG9yIHBy
ZXNlcnZpbmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3RlcikuIFVzZSB0aGUgQXJndW1lbnRS
ZWdWYWx1ZSBjbGFzcy4gVGhlIHJldHVybgorICAgIC8vIHR5cGUgaXMgZWl0aGVyIHBvaW50ZXIo
KSAoZm9yIEdQUnMpIG9yIERvdWJsZSAoZm9yIEZQUnMpLgorICAgIEFyZ3VtZW50UmVnLAorCisg
ICAgLy8gVGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4gcHV0IHRoaXMgYW55d2hlcmUgaW4gY29u
dHJvbCBmbG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVsZCB0aGUKKyAgICAvLyBmcmFtZSBwb2lu
dGVyLCB3aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29tcGlsZXIgY2hhbmdlcyB0aGUgZnJhbWUgcG9p
bnRlciB0ZW1wb3JhcmlseSBmb3Igc29tZQorICAgIC8vIHNpbGx5IHJlYXNvbiwgdGhlIEZyYW1l
UG9pbnRlciBpbnRyaW5zaWMgd2lsbCByZXR1cm4gd2hlcmUgdGhlIGZyYW1lIHBvaW50ZXIgKnNo
b3VsZCogYmUgbm90CisgICAgLy8gd2hlcmUgaXQgaGFwcGVucyB0byBiZSByaWdodCBub3cuCisg
ICAgRnJhbWVQb2ludGVyLAorCisgICAgLy8gUG9seW1vcnBoaWMgbWF0aCwgdXNhYmxlIHdpdGgg
YW55IHZhbHVlIHR5cGUuCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAor
CisgICAgLy8gSW50ZWdlciBtYXRoLgorICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZl
ciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCisgICAgTW9kLAorICAgIEJpdEFuZCwKKyAgICBC
aXRPciwKKyAgICBCaXRYb3IsCisgICAgU2hsLAorICAgIFNTaHIsCisgICAgWlNociwKKworICAg
IC8vIENhc3RzIGFuZCBzdWNoLgorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIEludDMyOgorICAg
IFNFeHQ4LAorICAgIFNFeHQxNiwKKyAgICAvLyBUYWtlcyBJbnQzMiBhbmQgcmV0dXJucyBJbnQ2
NDoKKyAgICBTRXh0MzIsCisgICAgWkV4dDMyLAorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIERv
dWJsZToKKyAgICBGUm91bmQsCisgICAgLy8gVGFrZXMgaW50cyBhbmQgcmV0dXJucyBEb3VibGU6
CisgICAgSVRvRCwKKyAgICAvLyBUYWtlcyBEb3VibGUgYW5kIHJldHVybnMgSW50MzI6CisgICAg
RFRvSTMyLAorCisgICAgLy8gUG9seW1vcnBoaWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFu
eSB2YWx1ZSB0eXBlLiBSZXR1cm5zIGludDMyIDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCisgICAg
Ly8gaXMganVzdCBFcXVhbCh4LCAwKS4KKyAgICBFcXVhbCwKKyAgICBOb3RFcXVhbCwKKyAgICBM
ZXNzVGhhbiwKKyAgICBHcmVhdGVyVGhhbiwKKyAgICBMZXNzRXF1YWwsCisgICAgR3JlYXRlckVx
dWFsLAorCisgICAgLy8gSW50ZWdlciBjb21wYXJpc29ucy4gUmV0dXJucyBpbnQzMiAwIG9yIDEu
CisgICAgQWJvdmUsCisgICAgQmVsb3csCisgICAgQWJvdmVFcXVhbCwKKyAgICBCZWxvd0VxdWFs
LAorCisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFu
ZCB0aGUgbG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSBy
ZXR1cm4gSW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAorICAg
IExvYWQxNlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisg
ICAgLy8gVGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExvYWQs
CisKKyAgICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUg
aXMgc3RvcmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJ
bnQzMiB2YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2Vz
IGEgRG91YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHlt
b3JwaGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisK
KyAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5n
IHRoZSBzeXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQg
dGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2Fs
bCwKKworICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1
ZSBjbGFzcy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8g
YnV0IG9ubHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQg
Y2FsbGJhY2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBh
IHN0YWNrbWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJn
dW1lbnQgbXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQg
YSBzdGFja21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRv
IHJlcXVlc3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZz
ZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAg
Ly8gc3RhY2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRo
ZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUg
Z2VuZXJhdGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBz
b21lIGNvZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisg
ICAgLy8gZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91IGFs
c28gZ2V0IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJlIG5v
dCBhbGxvd2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91ciBz
bG93IHBhdGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhl
IGV4ZWN1dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlk
bid0IGhhcHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNrQWRk
J3M6CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hlY2tB
ZGQoeCwgeSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0
bzoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVudGl0
eShhKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxs
YmFja3MgdXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQK
KyAgICAvLyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVu
IGlmIHRoZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFmdGVy
IHRoZSBmaXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBu
b3QgaGF2ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUg
c2Vjb25kIENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0FkZCwK
KyAgICBDaGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lkZS1l
eGl0cy4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmllbmRz
LCB0aGlzIGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJhY2su
IFRoaXMgdGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRo
CisgICAgLy8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4g
QSB0cnVlIHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0aC4K
KyAgICBDaGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNT
QS4KKyAgICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAg
ICBQaGksCisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAg
SnVtcCwKKyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2
YWx1ZSB0eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAv
LyBDb250cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRo
ZSB0cnVlIHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRjaGVz
IG92ZXIgZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4K
KyAgICBTd2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRv
bid0IGtub3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFueQor
ICAgIC8vIHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisK
KyAgICAvLyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5l
dmVyIGdldCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcworfTsK
KworaW5saW5lIGJvb2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBj
YXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
bmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM09wY29kZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdp
bjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiT3JpZ2lu
KCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3JpZ2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcmlnaW5faAorI2RlZmlu
ZSBCM09yaWdpbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVy
IGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVu
IHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhl
IG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3Jp
Z2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVs
bHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRo
ZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVi
bGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAg
ICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0
YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzT3JpZ2luX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50U3BlY2lhbC5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1BhdGNocG9pbnRTcGVjaWFsOjpQ
YXRjaHBvaW50U3BlY2lhbCgpCit7Cit9CisKK1BhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2lu
dFNwZWNpYWwoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKAor
ICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+
JiBjYWxsYmFjaykKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBWb2lkKSB7Cisg
ICAgICAgIGZvckVhY2hBcmdJbXBsKDAsIDEsIGluc3QsIGNhbGxiYWNrKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpEZWYsIGluc3Qu
b3JpZ2luLT5haXJUeXBlKCkpOworICAgIGZvckVhY2hBcmdJbXBsKDAsIDIsIGluc3QsIGNhbGxi
YWNrKTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQor
eworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJldHVybiBp
c1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsKKworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpbnN0LmFyZ3NbMV0ua2luZCgpICE9IEFy
Zzo6VG1wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNU
eXBlKGluc3Qub3JpZ2luLT5haXJUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMiwgaW5zdCk7Cit9CisKK2Jvb2wgUGF0Y2hwb2ludFNw
ZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAg
IGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJldHVybiBhZG1pdHNT
dGFja0ltcGwoMCwgMSwgaW5zdCwgYXJnSW5kZXgpOworCisgICAgaWYgKGFyZ0luZGV4ID09IDEp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwg
MiwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hwb2ludFNw
ZWNpYWw6OmdlbmVyYXRlKAorICAgIEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5l
cmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdp
bjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAgICBBU1NF
UlQoc3RhY2ttYXApOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAgIHVuc2lnbmVk
IG9mZnNldCA9IDE7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgIT0gVm9pZCkKKyAgICAg
ICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tvZmZzZXQr
K10pKTsKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBvZmZzZXQsIGluc3QsIHJlcHMpOwor
ICAgIAorICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKKyAgICBwYXJhbXMu
dmFsdWUgPSB2YWx1ZTsKKyAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICBwYXJh
bXMucmVwcyA9IHJlcHM7CisgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21hcC0+bV91
c2VkUmVnaXN0ZXJzOworCisgICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJh
bXMpOworCisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKyNkZWZpbmUg
QjNQYXRjaHBvaW50U3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
Ky8vIFRoaXMgaXMgYSBzcGVjaWFsIHRoYXQgcmVjb2duaXplcyB0aGF0IHRoZXJlIGFyZSB0d28g
dXNlcyBvZiBQYXRjaHBvaW50OiBWb2lkIGFuZCBhbmQgbm9uLVZvaWQuCisvLyBJbiB0aGUgVm9p
ZCBjYXNlLCB0aGUgc3ludGF4IG9mIHRoZSBBaXIgUGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLwor
Ly8gICAgIFBhdGNoICZwYXRjaHBvaW50LCBhcmdzLi4uCisvLworLy8gV2hlcmUgImFyZ3MuLi4i
IGFyZSB0aGUgbG93ZXJlZCBhcmd1bWVudHMgdG8gdGhlIFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24u
IEluIHRoZSBub24tVm9pZCBjYXNlCisvLyB3ZSB3aWxsIGhhdmU6CisvLworLy8gICAgIFBhdGNo
ICZwYXRjaHBvaW50LCByZXN1bHQsIGFyZ3MuLi4KKworY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwg
OiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBQYXRjaHBvaW50U3BlY2lh
bCgpOworICAgIHZpcnR1YWwgflBhdGNocG9pbnRTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5z
dDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Oklu
c3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVk
IGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qg
d2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQ
YXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRl
IQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVs
cGVycyYsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVt
cEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1w
bChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBv
aW50U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9p
bnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0
Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQor
eworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9pbnRWYWx1ZV9oCisjZGVmaW5l
IEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2ludFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9w
Y29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBT
dGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6
IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsK
KyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1By
b2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxv
Zy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29wZShQcm9jZWR1cmUmIHBy
b2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkK
KyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgp
KSB7CisgICAgICAgIGRhdGFMb2coIkIzIGJlZm9yZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAg
IGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3Jl
UGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3RyaW5nKHByb2NlZHVyZSk7Cit9
CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJ
UkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKG1fcHJvY2VkdXJlLCBtX25hbWUsIG1f
ZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
aGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhh
c2VTY29wZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhh
c2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BoYXNlU2NvcGVfaAor
I2RlZmluZSBCM1BoYXNlU2NvcGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3Mg
UGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJs
aWM6CisgICAgUGhhc2VTY29wZShQcm9jZWR1cmUmLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+
UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFsaWRhdGlvbgorCitwcml2YXRlOgorICAgIFBy
b2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJp
bmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQaGFzZVNjb3BlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUg
IkIzQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sKK30KKworUHJv
Y2VkdXJlOjp+UHJvY2VkdXJlKCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJlOjphZGRC
bG9jayhkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2Nr
PiBibG9jayhuZXcgQmFzaWNCbG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAg
IEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChX
VEY6Om1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVy
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisK
K1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblByZU9yZGVyKCkKK3sKKyAg
ICBWZWN0b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0
OworICAgIHdvcmtsaXN0LnB1c2goYXQoMCkpOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9j
ayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAg
ICAgICAgICAgd29ya2xpc3QucHVzaChibG9jay0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgIH0K
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6
YmxvY2tzSW5Qb3N0T3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0Owor
ICAgIFBvc3RPcmRlckJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChh
dCgwKSk7CisgICAgd2hpbGUgKEJsb2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkg
eworICAgICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsKKyAgICAgICAgY2FzZSBWaXNpdE9yZGVy
OjpQcmU6CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoUG9zdChpdGVtLm5vZGUpOworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gaXRlbS5ub2RlLT5udW1TdWNjZXNzb3JzKCk7IGktLTsp
CisgICAgICAgICAgICAgICAgd29ya2xpc3QucHVzaChpdGVtLm5vZGUtPnN1Y2Nlc3NvckJsb2Nr
KGkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlBvc3Q6
CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0ubm9kZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIFZh
bHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFByb2Nl
ZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICBQcm9j
ZWR1cmUoKTsKKyAgICB+UHJvY2VkdXJlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhk
b3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1l
bnRzLi4uKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5z
aWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2lj
QmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF0u
Z2V0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvcihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgp
CisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAsIG1f
aW5kZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBC
YXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9w
cm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9w
ZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9p
bmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQg
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJl
LT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgaW5k
ZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGNv
bnN0IFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Cisg
ICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIHNpemUoKSk7IH0KKworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRl
cigpOworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsKKworICAg
IGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29s
bGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICAgICAgICAgIDogbV9wcm9j
ZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBp
dGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAg
ICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJh
dG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAg
ICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBW
YWx1ZSogb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9wcm9jZWR1cmUtPm1fdmFsdWVzW21faW5kZXhdLmdldCgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAgICAgICBjb25zdCBQcm9jZWR1cmUqIG1f
cHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2Vk
dXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQorCisgICAgICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXpl
KCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgVmFsdWUqIG9wZXJh
dG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgICAg
ICAKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwor
ICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIFZh
bHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxWYWx1ZT4+IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZUlubGluZXNfaAorI2Rl
ZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogUHJvY2VkdXJlOjphZGQoQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2YWx1ZShu
ZXcgVmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4uKSk7CisgICAgVmFsdWVU
eXBlKiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoV1RGOjptb3Zl
KHZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQcm9jZWR1cmVJ
bmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2lu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90
S2luZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
U3RhY2tTbG90S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgU3Rh
Y2tTbG90S2luZDo6TG9ja2VkOgorICAgICAgICBvdXQucHJpbnQoIkxvY2tlZCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6CisgICAgICAgIG91
dC5wcmludCgiQW5vbnltb3VzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdEtpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Ns
b3RLaW5kX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIGNsYXNzIFN0YWNrU2xv
dEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tlZCBzdGFjayBzbG90IG5lZWRzIHRvIGJl
IGtlcHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2Fw
ZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hl
biB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNrCisgICAgLy8gc2xvdC4K
KyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBjb3VsZCBzaGFyZSBzcGFj
ZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRlZCB0aGF0IHRoZXkgYXJlbid0IGxpdmUK
KyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29tcGlsZXIgc3RpbGwgaGFzIHRvIGRvIGVz
Y2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJlIGVzY2FwZWQKKyAgICAvLyBleHBsaWNp
dGx5IGluIElSLgorICAgIEFub255bW91cworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3RhY2tTbG90S2luZCk7CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3Rh
Y2tTbG90S2luZF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N0YWNrU2xvdFZhbHVlOjp+
U3RhY2tTbG90VmFsdWUoKQoreworfQorCit2b2lkIFN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YShQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBt
X2J5dGVTaXplLCAiLCBraW5kID0gIiwgbV9raW5kKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1ZV9oCisjZGVmaW5lIEIzU3RhY2tTbG90VmFsdWVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJC
M1N0YWNrU2xvdEtpbmQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25h
bWVzcGFjZSBBaXIgeworY2xhc3MgU3RhY2tTbG90OworfSAvLyBuYW1lc3BhY2UgQWlyCisKK2Ns
YXNzIFN0YWNrU2xvdFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTdGFja1Nsb3Q7
IH0KKworICAgIH5TdGFja1Nsb3RWYWx1ZSgpOworCisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29u
c3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhl
IGVuZCBvZiBjb21waWxhdGlvbi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3Rz
LiBVc2UgdGhlCisgICAgLy8gc2V0IG1ldGhvZCB0byBkbyB0aGF0LgorICAgIGludHB0cl90IG9m
ZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAvLyBO
b3RlIHRoYXQgdGhpcyBpcyBtZWFuaW5nbGVzcyB1bmxlc3MgdGhlIHN0YWNrIHNsb3QgaXMgTG9j
a2VkLgorICAgIHZvaWQgc2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIEFpcjo6U3RhY2tTbG90OworICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1
cmU7CisKKyAgICBTdGFja1Nsb3RWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwg
dW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKKyAgICAgICAgOiBWYWx1ZShp
bmRleCwgU3RhY2tTbG90LCBwb2ludGVyKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXpl
KGJ5dGVTaXplKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0RnJv
bUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgU3Rh
Y2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit2b2lkIFN0YWNrbWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KAorICAgICAgICAie29wYXF1ZSA9ICIsIFJhd1BvaW50ZXIobV9vcGFxdWUpLCAiLCBy
ZXBzID0gIiwgbGlzdER1bXAobV9yZXBzKSwKKyAgICAgICAgIiwgZ2VuZXJhdG9yID0gIiwgUmF3
UG9pbnRlcihtX2dlbmVyYXRvci5nZXQoKSksICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJlcmVk
LAorICAgICAgICAiLCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAifSIpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkND
YWxsSGVscGVycy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1No
YXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENo
ZWNrU3BlY2lhbDsKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitjbGFz
cyBTdGFja21hcCB7CitwdWJsaWM6CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgeworICAg
ICAgICAvLyBUaGlzIGlzIHRoZSBWYWx1ZSBjb250YWluaW5nIHRoZSBzdGFja21hcC4KKyAgICAg
ICAgVmFsdWUqIHZhbHVlOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgorICAg
ICAgICBTdGFja21hcCogc3RhY2ttYXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhl
IGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAgICAg
VmVjdG9yPFZhbHVlUmVwPiByZXBzOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBy
ZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnM7CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0Nh
bGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVk
VGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFwKCkK
KyAgICB7CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRpZnkg
dGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5nIFZh
bHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkgZW5k
IHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8vIGFs
bG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sgdG8g
d2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVzaW5n
IHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1ldGVy
KQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZvaWQq
IG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5pZW5j
ZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgIHZv
aWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3BhcXVl
KGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1ZUlu
ZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9CisK
KyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlz
IFN0YWNrbWFwLiBJbiBjYXNlIG9mIGEgUGF0Y2hwb2ludCB0aGF0CisgICAgLy8gcmV0dXJucyBh
IHZhbHVlLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gSW4gYWxsIG90
aGVyIGNhc2VzLCBpbmRleCB6ZXJvIHJlZmVycworICAgIC8vIHRvIHRoZSBmaXJzdCBhcmd1bWVu
dCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90IGNvbnN0cmFpbmFi
bGUuIEZvciBleGFtcGxlLAorICAgIC8vIGluIGEgQ2hlY2tBZGQgdmFsdWUsIGl0IHdvdWxkIGJl
IGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEgQ2hlY2sgdmFsdWUs
IGl0CisgICAgLy8gd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGV4IDAuIEJ1dCwg
d2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBjYW4KKyAgICAvLyBk
ZXBlbmQgb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmlsbGVkIGluLgorICAg
IHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQorICAg
IHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXplKCkpCisgICAgICAgICAgICBt
X3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhdID0gcmVwOworICAg
IH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0KQorICAgIHsKKyAg
ICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKworICAgIHZv
aWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcikKKyAgICB7CisgICAg
ICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0
b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7
CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRTcGVjaWFsOworICAgIGZyaWVuZCBjbGFzcyBT
dGFja21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9vcGFxdWUgeyBudWxscHRyIH07Cisg
ICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5l
cmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV91
c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhlciBkdXBsaWNhdGVkIGJ5
IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJnZSB0aGUgdXNlZCByZWdp
c3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFj
a21hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3Rh
Y2ttYXBTcGVjaWFsKCkKK3sKK30KKworU3RhY2ttYXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVjaWFs
KCkKK3sKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5z
dCYgaW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFsdWUq
IHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0
YWNrbWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBTdGFj
a21hcFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVzZWQK
KyAgICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJlbnRs
eSB3b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8gb3Ig
dGhpbmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBwcm9i
bGVtLgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVycyk7
Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVk
UmVncyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAg
IFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgcmV0dXJuIHN0
YWNrbWFwLT5jbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hB
cmdJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9y
ZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNo
QXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdp
bjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4K
KyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAg
QVNTRVJUKHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CisgICAg
QVNTRVJUKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyA9PSB2YWx1ZS0+Y2hp
bGRyZW4uc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsK
KyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRCM0FyZ3NdOworICAg
ICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRBaXJBcmdzKTsK
KworICAgICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNlLCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hp
bGQtPnR5cGUoKSkpOworICAgIH0KK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzVmFsaWRJ
bXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRB
aXJBcmdzLAorICAgIEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmln
aW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQu
CisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAg
IEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworCisg
ICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICBBU1NFUlQo
c3RhY2ttYXApOworCisgICAgLy8gRm9yIHRoZSBJbnN0IHRvIGJlIHZhbGlkLCBpdCBuZWVkcyB0
byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChpbnN0LmFyZ3Mu
c2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0g
bnVtSWdub3JlZEIzQXJncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUmVnYXJk
bGVzcyBvZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1aXJlbWVu
dHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4gRm9yCisgICAgLy8gZXhhbXBsZSwgeW91IGNhbid0IGhh
dmUgYSBub24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29uZGl0aW9u
cyBhcyB3ZWxsIGFzIHRoZQorICAgIC8vIGFyZ3VtZW50IHR5cGVzLgorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7
CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEIzQXJn
cyk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc107
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBB
cmc6OlRtcDoKKyAgICAgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgY2FzZSBBcmc6OkltbTY0
OgorICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgor
ICAgICAgICAgICAgYnJlYWs7IC8vIE9LCisgICAgICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAg
ICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSAm
JgorICAgICAgICAgICAgICAgIGFyZy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBl
Rm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpOworCisgICAgICAgIGlmICghYXJnLmlzVHlwZSh0eXBl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgbnVtYmVy
IG9mIGNvbnN0cmFpbnRzIGhhcyB0byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBC
MyBjaGlsZHJlbi4KKyAgICBBU1NFUlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkgPD0gdmFsdWUt
PmNoaWxkcmVuLnNpemUoKSk7CisKKyAgICAvLyBWZXJpZnkgYW55IGV4cGxpY2l0bHkgc3VwcGxp
ZWQgY29uc3RyYWludHMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEIzQXJnczsg
aSA8IHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmFsdWVSZXAmIHJl
cCA9IHN0YWNrbWFwLT5tX3JlcHNbaV07CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kg
LSBudW1JZ25vcmVkQjNBcmdzICsgbnVtSWdub3JlZEFpckFyZ3NdOworCisgICAgICAgIHN3aXRj
aCAocmVwLmtpbmQoKSkgeworICAgICAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgICAg
ICAvLyBXZSBhbHJlYWR5IHZlcmlmaWVkIHRoaXMgYWJvdmUuCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKCFh
cmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAo
YXJnICE9IFRtcChyZXAucmVnKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAg
ICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAgICAgICAgaWYgKGFyZyAhPSBBcmc6
OmNhbGxBcmcocmVwLm9mZnNldEZyb21TUCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6
CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9u
LgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0YWNrbWFw
U3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3Ms
IHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIHVuc2lnbmVkIGFy
Z0luZGV4KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFw
KiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgdW5zaWduZWQgc3RhY2ttYXBB
cmdJbmRleCA9IGFyZ0luZGV4IC0gbnVtSWdub3JlZEFpckFyZ3MgKyBudW1JZ25vcmVkQjNBcmdz
OworCisgICAgaWYgKHN0YWNrbWFwQXJnSW5kZXggPj0gc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkp
IHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlIHdhcyBubyBjb25zdHJhaW50Lgor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gV2Ugb25seSBhZG1pdCBz
dGFjayBmb3IgQW55J3MsIHNpbmNlIFN0YWNrIGlzIG5vdCBhIHZhbGlkIGlucHV0IGNvbnN0cmFp
bnQsIGFuZCBTdGFja0FyZ3VtZW50CisgICAgLy8gdHJhbnNsYXRlcyB0byBhIENhbGxBcmcgaW4g
QWlyLgorICAgIGlmIChzdGFja21hcC0+bV9yZXBzW3N0YWNrbWFwQXJnSW5kZXhdLmtpbmQoKSA9
PSBWYWx1ZVJlcDo6QW55KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKAorICAgIEdlbmVy
YXRpb25Db250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgSW5zdCYgaW5z
dCwgVmVjdG9yPFZhbHVlUmVwPiYgcmVzdWx0KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG51
bUlnbm9yZWRBcmdzOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQu
YXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbaV0pKTsKK30KKworVmFs
dWVSZXAgU3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JBcmcoQ29kZSYgY29kZSwgY29uc3QgQXJnJiBh
cmcpCit7CisgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAg
ICAgICAgcmV0dXJuIFZhbHVlUmVwOjpyZWcoYXJnLnJlZygpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBBcmc6OkltbToKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIHJldHVybiBW
YWx1ZVJlcDo6Y29uc3RhbnQoYXJnLnZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEFyZzo6QWRkcjoKKyAgICAgICAgaWYgKGFyZy5iYXNlKCkgPT0gVG1wKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9m
ZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKGFyZy5iYXNlKCkgPT0gVG1wKE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3RlcikpOworICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNr
KGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVmFsdWVSZXAoKTsKKyAgICB9
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVj
aWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBTcGVjaWFsX2gK
KyNkZWZpbmUgQjNTdGFja21hcFNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQor
CisvLyBUaGlzIGlzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lhbHMgdGhhdCBoYXZlIHN0YWNrbWFw
cy4gTm90ZSB0aGF0IGl0IGNhbiBmaW5kIHRoZSBTdGFja21hcCBieQorLy8gYXNraW5nIGZvciB0
aGUgSW5zdCdzIG9yaWdpbi4gSGVuY2UsIHRoZXNlIG9iamVjdHMgZG9uJ3QgbmVlZCB0byBldmVu
IGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlCisvLyBTdGFja21hcC4KKworY2xhc3MgU3RhY2ttYXBT
cGVjaWFsIDogcHVibGljIEFpcjo6U3BlY2lhbCB7CitwdWJsaWM6CisgICAgU3RhY2ttYXBTcGVj
aWFsKCk7CisgICAgdmlydHVhbCB+U3RhY2ttYXBTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoQWlyOjpJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQm
KSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEFp
cjo6SW5zdCYpIG92ZXJyaWRlOworCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3Zl
cnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1h
bnkgc29tZQorICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KKworICAgIHZv
aWQgZm9yRWFjaEFyZ0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVu
c2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCBjb25zdCBTY29w
ZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jik7CisgICAgYm9vbCBpc1ZhbGlk
SW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdu
b3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYpOworICAgIGJvb2wgYWRtaXRzU3RhY2tJ
bXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25v
cmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpOworCisg
ICAgLy8gQXBwZW5kcyB0aGUgcmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBzdGFydGluZyB3aXRo
IG51bUlnbm9yZWRBcmdzLCB0byB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgIHZvaWQgYXBwZW5kUmVw
c0ltcGwoQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBB
aXI6Okluc3QmLCBWZWN0b3I8VmFsdWVSZXA+Jik7CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVw
Rm9yQXJnKEFpcjo6Q29kZSYsIGNvbnN0IEFpcjo6QXJnJik7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0
YWNrbWFwU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nl
c3NvckNvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorI2RlZmluZSBCM1N1Y2Nlc3NvckNvbGxl
Y3Rpb25faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBnZW5lcmljIHdyYXBwZXIgYXJvdW5kIGxpc3RzIG9mIGZy
ZXF1ZW50ZWQgYmxvY2tzLCB3aGljaCBnaXZlcyB5b3UganVzdCB0aGUgYmxvY2tzLgorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrLCB0eXBlbmFtZSBTdWNjZXNzb3JMaXN0PgorY2xhc3Mg
U3VjY2Vzc29yQ29sbGVjdGlvbiB7CitwdWJsaWM6CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbihT
dWNjZXNzb3JMaXN0JiBsaXN0KQorICAgICAgICA6IG1fbGlzdChsaXN0KQorICAgIHsKKyAgICB9
CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAg
ICBCYXNpY0Jsb2NrKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpbmRl
eF0uYmxvY2soKTsgfQorICAgIEJhc2ljQmxvY2sqJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJu
IG1fbGlzdFtpbmRleF0uYmxvY2soKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10oc2l6
ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYg
b3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAg
ICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTdWNjZXNzb3JDb2xs
ZWN0aW9uJiBjb2xsZWN0aW9uLCBzaXplX3QgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29sbGVj
dGlvbihjb25zdF9jYXN0PFN1Y2Nlc3NvckNvbGxlY3Rpb24qPigmY29sbGVjdGlvbikpIC8vIGNv
bnN0IGlzIHN0dXBpZCBhbnl3YXkuCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvciooKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4
KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9p
bmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3VjY2Vzc29yQ29s
bGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9Owor
CisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAg
ICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCitw
cml2YXRlOgorICAgIFN1Y2Nlc3Nvckxpc3QmIG1fbGlzdDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3Vj
Y2Vzc29yQ29sbGVjdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaENhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaENhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit2b2lkIFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobV9jYXNlVmFsdWUsICItPiIsIG1fdGFyZ2V0KTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNTd2l0Y2hDYXNlX2gKKyNkZWZpbmUgQjNTd2l0Y2hDYXNlX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9T
dGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAg
IFN3aXRjaENhc2UoKQorICAgIHsKKyAgICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2Fz
ZVZhbHVlLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VW
YWx1ZShjYXNlVmFsdWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3Rhcmdl
dDsgfQorCisgICAgaW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1
ZTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3Rhcmdl
dDsgfQorICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV90YXJn
ZXQuYmxvY2soKTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGludDY0X3QgbV9jYXNlVmFsdWU7CisgICAgRnJlcXVlbnRlZEJsb2Nr
IG1fdGFyZ2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVk
ZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitT
d2l0Y2hWYWx1ZTo6flN3aXRjaFZhbHVlKCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1
ZTo6cmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBGcmVxdWVudGVkQmxvY2sgcmVz
dWx0QmxvY2sgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIGludDY0X3QgcmVzdWx0VmFsdWUg
PSBtX3ZhbHVlc1tpbmRleF07CisgICAgbV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29y
cy5sYXN0KCk7CisgICAgbV9zdWNjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICBtX3ZhbHVlc1tp
bmRleF0gPSBtX3ZhbHVlcy5sYXN0KCk7CisgICAgbV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAg
IHJldHVybiBTd2l0Y2hDYXNlKHJlc3VsdFZhbHVlLCByZXN1bHRCbG9jayk7Cit9CisKK3ZvaWQg
U3dpdGNoVmFsdWU6OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sK
KyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3Vj
Y2Vzc29yc1ttX3N1Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOwor
ICAgIG1fdmFsdWVzLmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBT
d2l0Y2hWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBU
aGlzIGRlc3RydWN0aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisg
ICAgb3V0LnByaW50KGxpc3REdW1wKCp0aGlzKSwgIiwgZmFsbFRocm91Z2ggPSAiLCBmYWxsVGhy
b3VnaCgpKTsKK30KKworU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKQorICAgIDog
Q29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gsIFZvaWQsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nl
c3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dp
dGNoVmFsdWVfaAorI2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUg
OiBwdWJsaWMgQ29udHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0
Y2hWYWx1ZSgpOworCisgICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3Jz
KCkuCisgICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
LnNpemUoKTsgfQorCisgICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlz
IGF0IHRoZSBzYW1lIGluZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0
b3I8aW50NjRfdD4mIGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisg
ICAgRnJlcXVlbnRlZEJsb2NrIGZhbGxUaHJvdWdoKCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29y
cygpLmxhc3QoKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2goKSB7IHJldHVy
biBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbnVtQ2FzZVZhbHVlcygpOyB9CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRl
eCksIHN1Y2Nlc3NvcihpbmRleCkpOworICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10o
dW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOwor
ICAgIH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJh
dG9yKCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9p
bmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBT
d2l0Y2hWYWx1ZSYgc3dpdGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBt
X3N3aXRjaCgmc3dpdGNoVmFsdWUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAg
ICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAg
fQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3dpdGNoVmFsdWUqIG1fc3dp
dGNoOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAgICB0eXBlZGVmIGl0
ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgLy8gVGhpcyByZW1vdmVzIHRo
ZSBjYXNlIGFuZCByZW9yZGVycyB0aGluZ3MgYSBiaXQuIElmIHlvdSdyZSBpdGVyYXRpbmcgdGhl
IGNhc2VzIGZyb20gMCB0byBOLAorICAgIC8vIHRoZW4geW91IGNhbiBrZWVwIGl0ZXJhdGluZyBh
ZnRlciB0aGlzIHNvIGxvbmcgYXMgeW91IHJldmlzaXQgdGhpcyBzYW1lIGluZGV4ICh3aGljaCB3
aWxsIG5vdworICAgIC8vIGNvbnRhaW4gc29tZSBvdGhlciBjYXNlIHZhbHVlKS4gVGhpcyByZW1v
dmVzIHRoZSBjYXNlIHRoYXQgd2FzIHJlbW92ZWQuCisgICAgU3dpdGNoQ2FzZSByZW1vdmVDYXNl
KHVuc2lnbmVkIGluZGV4KTsKKworICAgIHZvaWQgYXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNl
JiBzd2l0Y2hDYXNlKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgU3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGNv
bnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpOworCisgICAgVmVjdG9yPGludDY0X3Q+
IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5
cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAg
IG91dC5wcmludCgiVm9pZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2
NDoKKyAgICAgICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBEb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUg
QjNUeXBlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgewor
ICAgIFZvaWQsCisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxp
bmUgYm9vbCBpc0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwg
dHlwZSA9PSBJbnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7Cisg
ICAgcmV0dXJuIHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyKCkKK3sK
KyAgICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAg
cmV0dXJuIEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNl
IFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K1Vwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBzaWxvblZhbHVl
OjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiXiIs
IG1fcGhpLT5pbmRleCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBz
aWxvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBz
aWxvblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNV
cHNpbG9uVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFs
dWVfaAorI2RlZmluZSBCM1Vwc2lsb25WYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgVXBzaWxvblZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Ym9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9
CisKKyAgICB+VXBzaWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkgY29uc3QgeyByZXR1
cm4gbV9waGk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworICAgIAorICAgIFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZv
aWQsIG9yaWdpbiwgdmFsdWUpCisgICAgICAgICwgbV9waGkocGhpKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0KKworICAgIFZhbHVl
KiBtX3BoaTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitVc2VDb3VudHM6OlVzZUNvdW50cyhQcm9jZWR1cmUmIHByb2Nl
ZHVyZSkKKyAgICA6IG1fY291bnRzKHByb2NlZHVyZS52YWx1ZXMoKS5zaXplKCkpCit7CisgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jZWR1cmUudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChW
YWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgIG1fY291bnRzW2No
aWxkXSsrOworICAgIH0KK30KKworVXNlQ291bnRzOjp+VXNlQ291bnRzKCkKK3sKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNVc2VDb3VudHNfaAorI2RlZmluZSBCM1VzZUNvdW50c19oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsK
KworY2xhc3MgVXNlQ291bnRzIHsKK3B1YmxpYzoKKyAgICBVc2VDb3VudHMoUHJvY2VkdXJlJik7
CisgICAgflVzZUNvdW50cygpOworCisgICAgdW5zaWduZWQgb3BlcmF0b3JbXShWYWx1ZSogdmFs
dWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb3VudHNbdmFsdWVdOworICAgIH0K
K3ByaXZhdGU6CisgICAgSW5kZXhNYXA8VmFsdWUsIHVuc2lnbmVkPiBtX2NvdW50czsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzVXNlQ291bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAg
ICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0
IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAg
ICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQor
ICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlf
RlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUg
KGZhbHNlKQorCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Js
b2NrKj4gYmxvY2tzOworICAgICAgICBIYXNoU2V0PFZhbHVlKj4gdmFsdWVJblByb2M7CisgICAg
ICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluQmxvY2s7CisKKyAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IG1fcHJvY2VkdXJlKSB7CisgICAgICAgICAgICBibG9ja3MuYWRkKGJsb2Nr
KTsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKQorICAgICAgICAgICAg
ICAgIHZhbHVlSW5CbG9jay5hZGQodmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiBtX3Byb2NlZHVyZS52YWx1ZXMoKSkKKyAgICAgICAgICAgIHZhbHVlSW5Q
cm9jLmFkZCh2YWx1ZSk7CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJv
YykKKyAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5CbG9jay5jb250YWlucyh2YWx1ZSksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJbkJsb2Nr
KQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnModmFsdWUpLCAoIkF0
ICIsICp2YWx1ZSkpOworCisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2Mp
IHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnMoY2hpbGQpLCAoIkF0
ICIsICp2YWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAoY2hpbGQpKSk7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICBibG9ja3MuY29udGFp
bnMoc3VjY2Vzc29yKSwgKCJBdCAiLCAqYmxvY2ssICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3Nv
cikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklY
TUU6IEV4cGFuZCB0aGlzIHZhbGlkYXRpb24gcGhhc2UuCisgICAgICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0ODAKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNoYXIq
IGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNo
YXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAgICAg
Q1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nUHJp
bnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJCMyBWQUxJREFUSU9OIEZBSUxV
UkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBm
aWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQo
IiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4pCisgICAgICAg
ICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7CisgICAgICAg
ICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBpZiAobV9kdW1wQmVmb3JlKSB7
CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV93aGVuLCAiOlxuIik7CisgICAgICAg
ICAgICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygi
QXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFMb2cobV9wcm9jZWR1cmUpOwor
CisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBXVEZSZXBvcnRBc3Nl
cnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5jdGlvbiwgY29uZGl0aW9uKTsK
KyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVy
ZTsKKyAgICBjb25zdCBjaGFyKiBtX3doZW47CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVmb3Jl
OworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUp
Cit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUsIHdoZW4sIGR1bXBCZWZvcmUp
OworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
aWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWxpZGF0ZV9oCisjZGVm
aW5lIEIzVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwordm9pZCB2YWxpZGF0ZShQcm9j
ZWR1cmUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVtcEJlZm9y
ZSA9IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhbHVlOjp+VmFsdWUo
KQoreworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2YWx1ZSkK
K3sKKyAgICAvLyBUaGlzIGlzIGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNlIHJlcGxh
Y2VtZW50IG9mIHdoYXRldmVyIFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAgIC8vIGEg
cGxhaW4gSWRlbnRpdHkgVmFsdWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBpbmZvcm1h
dGlvbiB3ZSBuZWVkLCB0aGVuIHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3VzIHZhbHVl
IGluIHBsYWNlLCBhbmQgdGhlbiB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVlIGluIHBs
YWNlLgorCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlwZSA9IG1f
dHlwZTsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3du
ZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNl
bWVudDsKKworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAg
ICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBJ
ZGVudGl0eSwgdHlwZSwgb3JpZ2luLCB2YWx1ZSk7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVy
OworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6
OnJlcGxhY2VXaXRoTm9wKCkKK3sKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAg
T3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+
b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisKKyAg
ICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBO
b3AsIFZvaWQsIG9yaWdpbik7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMt
PnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7
Cit9CisKK3ZvaWQgVmFsdWU6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KG1fdHlwZSwgIiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bjb2RlKTsKKworICAg
IG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKFZhbHVl
KiBjaGlsZCA6IGNoaWxkcmVuKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1
bXAoY2hpbGQpKTsKKworICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0cmluZ091dDsKKyAgICBkdW1w
TWV0YShzdHJpbmdPdXQpOworICAgIENTdHJpbmcgc3RyaW5nID0gc3RyaW5nT3V0LnRvQ1N0cmlu
ZygpOworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwg
c3RyaW5nKTsKKworICAgIG91dC5wcmludCgiKSIpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQz
MigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQzMl90IFZhbHVlOjphc0lu
dDMyKCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiAwOworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGZhbHNlOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29sIFZhbHVl
OjpoYXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworZG91YmxlIFZh
bHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0m
KSBjb25zdAoreworfQorCitUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVl
KiBmaXJzdENoaWxkKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0
eToKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNl
IERpdjoKKyAgICBjYXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5k
OgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAg
Y2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2Ug
Q2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQt
PnR5cGUoKTsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHBvaW50ZXIo
KTsKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgRFRvSTMyOgor
ICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgor
ICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVh
dGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJv
dmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAg
ICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0Owor
ICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsK
KyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gK
KyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
QXJnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2lu
Y2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgU3RhY2ttYXA7CisKK2NsYXNzIFZhbHVlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0Owor
CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIkAiOworCisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZp
cnR1YWwgflZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUs
IGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZhbHVlcyB3aXRoIGlkZW50aXR5LgorICAgIE9wY29kZSBv
cGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNp
Z25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hp
bGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisK
KyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBlIHVzaW5nIHRoZSBvcGNvZGUuCisgICAgVHlw
ZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICAvLyBUaGlzIGlzIHVzZWZ1
bCB3aGVuIGxvd2VyaW5nLiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IHZhbGlkIGZvciBub24tdm9p
ZCB2YWx1ZXMuCisgICAgQWlyOjpBcmc6OlR5cGUgYWlyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFp
cjo6QXJnOjp0eXBlRm9yQjNUeXBlKHR5cGUoKSk7IH0KKworICAgIEFkamFjZW5jeUxpc3QmIGNo
aWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGphY2VuY3lMaXN0
JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAgIHZvaWQgcmVw
bGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdpdGhOb3AoKTsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBjYXN0IFZhbHVlcy4g
Rm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92aWRlZCB0aGF0IHdl
IGhhdmUgYQorICAgIC8vIEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86CisgICAgLy8KKyAg
ICAvLyBpZiAoQXJndW1lbnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1ZS0+YXM8QXJndW1l
bnRSZWdWYWx1ZT4oKSkgeworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9CisgICAgLy8KKyAg
ICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAhPSBBcmd1bWVudFJl
Zy4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisgICAgLy8gaWYgVDo6
YWNjZXB0cyhvcGNvZGUoKSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorICAgIFQqIGFzKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBh
cygpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKKyAgICBpbnQzMl90
IGFzSW50MzIoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0ludDY0KCkgY29uc3Q7CisgICAg
aW50NjRfdCBhc0ludDY0KCkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludCgpIGNvbnN0OworICAg
IGludDY0X3QgYXNJbnQoKSBjb25zdDsKKyAgICBib29sIGlzSW50KGludDY0X3QgdmFsdWUpIGNv
bnN0OworCisgICAgYm9vbCBoYXNEb3VibGUoKSBjb25zdDsKKyAgICBkb3VibGUgYXNEb3VibGUo
KSBjb25zdDsKKworICAgIFN0YWNrbWFwKiBzdGFja21hcCgpOworCitwcm90ZWN0ZWQ6CisgICAg
dmlydHVhbCB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJbnN0
YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KKyAgICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMg
c3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1f
b3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdp
bihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4u
IH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3Igc3BlY2lmeWluZyB0aGUg
dHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29kZSBoYXMgbm8gY2hpbGRyZW46CisgICAgZXhw
bGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2Rl
KG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmln
aW4pCisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMg
dGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGNoaWxk
OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZp
cnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRl
eCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Io
b3Bjb2RlLCBmaXJzdENoaWxkKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAg
ICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQor
ICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVp
ciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5kIHRoYXQgZG9uJ3QKKyAgICAvLyB0YWtl
IGFueSBhcmd1bWVudHM6CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAg
ICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBu
dWxscHRyKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAv
LyBVc2UgdGhpcyBmb3JtIGZvciB2YXJhcmdzLgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFk
amFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAg
ICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1f
b3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgIHsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFR5cGUgdHlwZUZvcihPcGNvZGUsIFZhbHVlKiBm
aXJzdENoaWxkKTsKKworICAgIC8vIFRoaXMgZ3JvdXAgb2YgZmllbGRzIGlzIGFycmFuZ2VkIHRv
IGZpdCBpbiA2NCBiaXRzLgorICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgT3Bjb2RlIG1fb3Bj
b2RlOworICAgIFR5cGUgbV90eXBlOworICAgIAorICAgIE9yaWdpbiBtX29yaWdpbjsKKyAgICBB
ZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisKK3B1YmxpYzoKKyAgICBCYXNpY0Jsb2NrKiBvd25l
ciB7IG51bGxwdHIgfTsgLy8gY29tcHV0ZWQgbGF6aWx5LgorICAgIFZhbHVlKiByZXBsYWNlbWVu
dCB7IG51bGxwdHIgfTsgLy8gdXNlZCBmb3IgYW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9ucy4K
K307CisKK2NsYXNzIERlZXBWYWx1ZUR1bXAgeworcHVibGljOgorICAgIERlZXBWYWx1ZUR1bXAo
Y29uc3QgVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVlLT5kZWVwRHVtcChvdXQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBjb25zdCBWYWx1ZSogbV92YWx1ZTsKK307CisKK2lubGluZSBEZWVwVmFsdWVE
dW1wIGRlZXBEdW1wKGNvbnN0IFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVl
RHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNWYWx1ZUlubGluZXNfaAorI2RlZmluZSBCM1ZhbHVlSW5saW5lc19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAi
QjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QqIFZhbHVlOjphcygpCit7CisgICAgaWYgKFQ6OmFjY2Vw
dHMob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAg
IHJldHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3QgVCogVmFs
dWU6OmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxWYWx1ZSo+KHRoaXMpLT5h
czxUPigpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29s
IFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3Q2NFZhbHVl
PigpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4g
YXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQoKSBj
b25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0KCk7Cit9CisKK2ludDY0
X3QgVmFsdWU6OmFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSA/IGFzSW50
MzIoKSA6IGFzSW50NjQoKTsKK30KKworYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKwor
Ym9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdERv
dWJsZVZhbHVlPigpOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworU3RhY2ttYXAq
IFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hl
Y2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2ttYXA7CisgICAgaWYgKFBh
dGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4oKSkKKyAgICAg
ICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNo
IChtX2tpbmQpIHsKKyAgICBjYXNlIEFueToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJl
ZygpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0
LnByaW50KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgp
LCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0
LnByaW50KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sK
KyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91
dC5wcmludCgiQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21l
UmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJS
ZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6Cisg
ICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFs
dWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAg
IG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
UmVwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5l
IEIzVmFsdWVSZXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlJlZy5oIgor
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50
YXRpb25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVz
ZW50YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVu
dCBmb3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQu
IFdoZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwg
d2Ugc2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJs
aWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRp
b24sIHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uIEFzIGFu
CisgICAgICAgIC8vIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IHdlIGRv
bid0IGtub3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZvciB0aGUKKyAgICAgICAgLy8gcmlnaHQg
b3BlcmFuZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVja011bC4KKyAgICAgICAgQW55LAorCisg
ICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMg
c2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQorICAgICAgICAvLyByZWdp
c3RlciB0aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIhCisgICAgICAgIFNvbWVSZWdpc3RlciwK
KworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBw
YXJ0aWN1bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRp
b24sIHRoaXMgdGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNrZWQuCisgICAgICAgIFJlZ2lz
dGVyLAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxs
cyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJdCdzIG5vdCBhIHZhbGlkCisgICAgICAg
IC8vIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBTdGFjaywKKworICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1
cCBpbiB0aGUgYXJndW1lbnQgYXJlYSBhdCBzb21lCisgICAgICAgIC8vIG9mZnNldC4KKyAgICAg
ICAgU3RhY2tBcmd1bWVudCwKKworICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRp
b24sIHRoaXMgdGVsbHMgdXMgdGhhdCBCMyBjb25zdGFudC1mb2xkZWQgdGhlIHZhbHVlLgorICAg
ICAgICBDb25zdGFudAorICAgIH07CisgICAgCisgICAgVmFsdWVSZXAoKQorICAgICAgICA6IG1f
a2luZChBbnkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFZhbHVlUmVwKFJlZyByZWcp
CisgICAgICAgIDogbV9raW5kKFJlZ2lzdGVyKQorICAgICAgICAsIG1fdmFsdWUocmVnLmluZGV4
KCkpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKKyAg
ICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChyZWcpOworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCBzdGFjayhpbnRwdHJfdCBvZmZzZXRGcm9tRlApCisgICAgeworICAgICAgICBWYWx1
ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVz
dWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tRlA7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrQXJndW1lbnQoaW50cHRyX3Qgb2Zmc2V0RnJv
bVNQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gU3RhY2tBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9t
U1A7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVw
IGNvbnN0YW50KGludDY0X3QgdmFsdWUpCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFs
dWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMg
VmFsdWVSZXAgY29uc3RhbnREb3VibGUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFZhbHVlUmVwOjpjb25zdGFudChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAg
ICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gQW55OyB9CisK
KyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVn
aXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92YWx1ZSk7CisgICAgfQor
CisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21TUCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrQXJndW1lbnQpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludDY0
X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25zdGFu
dCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAgIGRvdWJsZSBkb3VibGVW
YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4o
dmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2luZCk7CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
VmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0
dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9n
ZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTA2IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCiskdmFySW5kZXggPSAw
CitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7JHZhckluZGV4fSIK
K2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUs
IDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0
aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9
IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255bW91cyA9IChuYW1l
ID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAgIEB2YXJOYW1lID0g
QGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4gL1xBXCQvID8gJCcgOiBuYW1lCisgICAgICAg
IEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJl
biA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAgIG9wY29kZSAhPSBu
aWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIGNoaWxk
cmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNoaWxkLCBpbmRleCB8CisgICAg
ICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQubmFtZSwKKyAg
ICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5h
bm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9uT3BlcmFuZCkg
OiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAorICAgICAgICAgICAgICAg
ICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAg
fQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwg
OnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9ucykKKyAg
ICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zCisg
ICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6
bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVy
KQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxp
bmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFt
ZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJf
cmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4s
IHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3Ry
aW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5p
c19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQK
KyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBl
bmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7
b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAg
ICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjog
I3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAj
e3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYg
bGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUp
CisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIu
ZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAg
ICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAg
ICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAg
ICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLworICAgICAgICAgICAgcmVz
dWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisg
ICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdu
b3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2Vu
Lm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUs
IGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNw
ZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQK
KyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMgV2UgY2FuIGV4
dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50ICJp
bmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcikpXFovCitlbmQK
KworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEFbYS16QS1aMC05JF0o
W2EtekEtWjAtOV9dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3Mg
UGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tl
bnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAg
ICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFk
dmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigq
Y29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3Io
KmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/Cisg
ICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2Yg
ZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBl
bmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0
ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNlCisg
ICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0gdG9r
ZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxl
c3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQK
KyAgICBlbmQKKworICAgIGRlZiBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHByb2R1Y3Rp
b24pCisgICAgICAgIGlmIG5hbWUgPT0gcHJvZHVjdGlvbi52YXJOYW1lCisgICAgICAgICAgICBw
YXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0aW9uIGhhcyBzYW1lIG5hbWUgYXMgcGFyZW50IHByb2R1
Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBl
bnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAgIHBhcnNl
RXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIHByb2R1
Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICBj
b25zdW1lKCJtYXRjaGVyIikKKworICAgICAgICBtYXRjaGVyTmFtZSA9IGNvbnN1bWVJZGVudGlm
aWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorCisgICAgICAgIGxvb3AgeworICAgICAg
ICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICAjIFdl
IG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVkZSIuIElmIHdlIGRpZCB0aGF0LCBpdCB3b3Vs
ZCBnbyBoZXJlLgorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHBhcnNlUHJvZHVjdGlvbgorICAg
ICAgICAgICAgCisgICAgICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwg
ZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAg
ICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgICAgIH0KKworICAgICAgICBNYXRjaGVy
Lm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VQ
cm9kdWN0aW9uCisgICAgICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAgICAgICBuYW1lID0g
Y29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBpZiB0b2tlbiA9PSAiPSIKKyAgICAgICAgICAg
IGNvbnN1bWUoIj0iKQorICAgICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlkZW50aWZpZXIKKyAg
ICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9PSAiKCIKKyAgICAg
ICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICAgICAgb3Bjb2RlID0gbmFtZQorICAgICAgICAg
ICAgbmFtZSA9IG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHJvZHVjdGlv
bi5uZXcob3JpZ2luLCBuYW1lLCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisgICAgICAgIAorICAg
ICAgICBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsg
aWYgdG9rZW4gPT0gIikiCisKKyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9u
cywgcGFyc2VQcm9kdWN0aW9uKQorCisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIK
KyAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICB9CisKKyAgICAgICAgIyBBZHZhbmNl
IGFmdGVyIHRoZSAiKSIKKyAgICAgICAgYWR2YW5jZQorCisgICAgICAgIFByb2R1Y3Rpb24ubmV3
KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKK2VuZAorCitmaWxl
TmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZChmaWxlTmFtZSks
IGZpbGVOYW1lKQorbWF0Y2hlciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBTdWJNYXRjaAorICAg
IGF0dHJfcmVhZGVyIDppbmRleE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisgICAgZGVmIGluaXRp
YWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4TWFwID0gW10KKyAg
ICAgICAgQHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAg
ICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5kZXgKKyAgICAgICAg
ICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgfQorICAgIGVu
ZAorCisgICAgZGVmIG1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgIGluZGV4TGlzdC5t
YXAgeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXBbaW5kZXhd
CisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitGaWxlLm9wZW4oIkIzIiArIG1hdGNoZXIubmFt
ZSArICIuaCIsICJ3IikgeworICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMgIi8vIEdlbmVy
YXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVOYW1lfSAtLSBk
byBub3QgZWRpdCEiCisKKyAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNoZXIubmFtZX1f
aCIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICAKKyAg
ICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAgb3V0cC5wdXRz
ICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1dHMgInRlbXBs
YXRlPHR5cGVuYW1lIEFkYXB0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBydW4je21hdGNoZXIu
bmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0cC5wdXRzICJ7
IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5IGluZGVudGVk
IGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAgICAjIHdh
bnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBnb29kIHRl
eHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91LgorCisgICAg
IyBJbiBvZGQgc2l0dWF0aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZhbHVlLiBUZWxs
IHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5wdXRzICJVTlVT
RURfUEFSQU0oX3ZhbHVlKTsiCisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHByb3RlY3RzIHRo
ZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5nIGRp
ZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHBy
b2R1Y3Rpb25zKQorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMu
ZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAg
ICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFd
WzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAgICAg
ICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAg
ICAgIH0KKworICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICAgICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5jaGls
ZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0tPmNoaWxkcmVuKCkuc2l6ZSgpID49ICN7bGVuZ3Ro
fSkgeyIKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeWllbGQgaW5k
ZXhMaXN0CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVuZAorCisgICAgIyBUaGlz
IGVmZmljaWVudGx5IHNlbGVjdHMgZnJvbSB0aGUgZ2l2ZW4gc2V0IG9mIHByb2R1Y3Rpb25zLiBJ
dCBhc3N1bWVzIHRoYXQgcHJvZHVjdGlvbnMKKyAgICAjIGFyZSBub3QgZHVwbGljYXRlZC4gSXQg
eWllbGRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgcHJvZHVjdGlvbiwgYW5kIHRoZSBjb3JvdXRp
bmUgaXMKKyAgICAjIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBzcGVjaWZpYyBjb2RlIGZvciB0
aGF0IHByb2R1Y3Rpb24uIFRoZSBjb3JvdXRpbmUgaXMgZ2l2ZW4gbGlzdHMgb2YKKyAgICAjIGlu
ZGljZXMgb2YgcG9zc2libHktbWF0Y2hpbmcgcHJvZHVjdGlvbnMuCisgICAgZGVmIG1hdGNoUHJv
ZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgIyBGaXJzdCwg
c3BsaXQgdGhlIHByb2R1Y3Rpb25zIGxpc3QgaW50byBydW5zIG9mIHByb2R1Y3Rpb25zIHdpdGgg
YW4gb3Bjb2RlIGFuZCBwcm9kdWN0aW9ucworICAgICAgICAjIHdpdGhvdXQgb25lLgorICAgICAg
ICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsK
KyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5kZXhM
aXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5oYXNPcGNvZGUgPT0g
cHJvZHVjdGlvbi5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBp
bmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2lu
ZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICMgTm93
LCBlbWl0IHBhdHRlcm4gbWF0Y2hpbmcgY29kZS4gV2UgZG8gaXQgZGlmZmVyZW50bHkgZm9yIGxp
c3RzIHdpdGggYW4gb3Bjb2RlIHRoYW4gZm9yCisgICAgICAgICMgbGlzdHMgd2l0aG91dCBvbmUu
CisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8Cisg
ICAgICAgICAgICBpZiBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmhhc09wY29kZQorICAgICAg
ICAgICAgICAgICMgTm93LCB3ZSBzcGxpdCB0aGlzIGluZGV4IGxpc3QgaW50byBncm91cHMgZm9y
IGVhY2ggb3Bjb2RlLgorICAgICAgICAgICAgICAgIGdyb3VwcyA9IHt9CisgICAgICAgICAgICAg
ICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAg
ICAgICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAg
ICAgICAgICAgICBpZiBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdCisgICAgICAgICAgICAgICAg
ICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdIDw8IGluZGV4CisgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9kdWN0aW9uLm9w
Y29kZV0gPSBbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgICMgRW1pdCBhIHN3aXRjaCBzdGF0ZW1lbnQuCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7dmFsdWVOYW1lfS0+b3Bjb2RlKCkpIHsiCisg
ICAgICAgICAgICAgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgICAgICAgICAgICAgIHwg
b3Bjb2RlLCBzdWJJbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNh
c2UgI3tvcGNvZGV9OiIKKyAgICAgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5u
ZXcoc3ViSW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hM
ZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICAgICAgeWll
bGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5k
ZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2
YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAgICAgIHwg
aW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhM
aXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmQKKyAgICAg
ICAgfQorICAgIGVuZAorCisgICAgIyBUYWtlcyBwcm9kdWN0aW9ucyB0aGF0IGhhdmUgdGhlIHNh
bWUgb3Bjb2RlIGFuZCB0aGUgc2FtZSBsZW5ndGggYW5kIHNlbGVjdHMgZnJvbSB0aGVtIGJhc2Vk
IG9uCisgICAgIyB0aGUgcHJvZHVjdGlvbnMgYXQgdGhlIGdpdmVuIGNvbHVtbi4KKyAgICBkZWYg
bWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucywgY29sdW1uSW5kZXgpCisg
ICAgICAgIGlmIGNvbHVtbkluZGV4ID49IHByb2R1Y3Rpb25zWzBdLmNoaWxkcmVuLmxlbmd0aAor
ICAgICAgICAgICAgeWllbGQgKDAuLi4ocHJvZHVjdGlvbnMuc2l6ZSkpLnRvX2EKKyAgICAgICAg
ICAgIHJldHVybgorICAgICAgICBlbmQKKworICAgICAgICBzdWJWYWx1ZSA9IG5ld1ZhcgorICAg
ICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAj
e3N1YlZhbHVlfSA9ICN7dmFsdWVOYW1lfS0+Y2hpbGQoI3tjb2x1bW5JbmRleH0pOyIKKworICAg
ICAgICAjIFdlIG1heSBub3QgdXNlIHRoaXMgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNo
aWxsIG91dCBhYm91dCBpdC4KKyAgICAgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oI3tzdWJW
YWx1ZX0pOyIKKyAgICAgICAgCisgICAgICAgIHN1YlByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMu
bWFwIHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiB8CisgICAgICAgICAgICBwcm9kdWN0aW9u
LmNoaWxkcmVuW2NvbHVtbkluZGV4XQorICAgICAgICB9CisKKyAgICAgICAgbWF0Y2hSZWN1cnNp
dmVseShvdXRwLCBzdWJWYWx1ZSwgc3ViUHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwg
cHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1
Yk1hdGNoLnByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCArIDEpIHsKKyAgICAgICAgICAgICAgICB8
IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0
KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG91dHAucHV0
cyAifSIKKyAgICBlbmQKKworICAgIGRlZiBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHZhbHVlTmFt
ZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1l
LCBwcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAg
IyBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoaXMgaW5kZXggbGlzdCBjb250YWlucyBwcm9kdWN0
aW9ucyB3aXRoIHRoZSBzYW1lIG9wY29kZSBhbmQKKyAgICAgICAgICAgICMgdGhlIHNhbWUgbGVu
Z3RoLgorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9k
dWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0
Y2gucHJvZHVjdGlvbnMsIDApIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAg
ICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgbWF0Y2hSZWN1cnNpdmVseShvdXRw
LCAiX3ZhbHVlIiwgbWF0Y2hlci5wcm9kdWN0aW9ucykgeworICAgICAgICB8IGluZGV4TGlzdCB8
CisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAg
ICAgICAgcHJvZHVjdGlvbiA9IG1hdGNoZXIucHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAg
ICBvdXRwLnB1dHMgInsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3Byb2R1Y3Rp
b24udmFyTmFtZX0gPSBfdmFsdWU7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJVTlVTRURfUEFS
QU0oI3twcm9kdWN0aW9uLnZhck5hbWV9KTsiCisgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50
cyA9IFtdCisgICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIHRy
eUFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBudW1TY29wZXMgPSAwCisgICAgICAgICAgICBz
ZWVuID0ge30KKyAgICAgICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxlIHsKKyAgICAgICAg
ICAgICAgICB8IHBhcmVudFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJOYW1lLCBraW5kLCBp
bmRleCB8CisgICAgICAgICAgICAgICAgbG9hZEV4cHIgPSAiI3twYXJlbnRWYXJOYW1lfS0+Y2hp
bGQoI3tpbmRleH0pIgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIHNlZW5b
Y2hpbGRWYXJOYW1lXQorICAgICAgICAgICAgICAgICAgICB0bXAgPSBuZXdWYXIKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3t0bXB9ID0gI3tsb2FkRXhwcn07IgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3RtcH0gPT0gI3tjaGlsZFZhck5hbWV9
KSB7IgorICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VlbltjaGlsZFZhck5hbWVdID0gdHJ1ZQorICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSog
I3tjaGlsZFZhck5hbWV9ID0gI3tsb2FkRXhwcn07IgorCisgICAgICAgICAgICAgICAgICAgIGlm
IGNoaWxkTmFtZSA9fiAvXEFcJC8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoaWxkTmFt
ZSA9fiAvXEFcJChbMC05XSspXFovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5pc0ludCgjeyQxfSkpIHsiCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJp
ZiAoI3tjaGlsZFZhck5hbWV9LT5oYXNJbnQoKSkgeyIKKyAgICAgICAgICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBp
bnRlcm5hbEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Ig
a2luZCA9PSA6YW5vbkludGVybmFsCisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVu
dHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOm9wZXJhbmQgb3Iga2luZCA9PSA6YW5vbk9w
ZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgdHJ5QXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBp
ZiBraW5kID09IDppbnRlcm5hbCBvciBraW5kID09IDpvcGVyYW5kCisgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhZGFwdG9yLmFj
Y2VwdFJvb3QoX3ZhbHVlKSIKKyAgICAgICAgICAgIHVubGVzcyBpbnRlcm5hbEFyZ3VtZW50cy5l
bXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IuYWNjZXB0SW50ZXJu
YWxzKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICB1bmxlc3Mgb3BlcmFuZEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IuYWNjZXB0T3BlcmFuZHMoIiArIG9wZXJhbmRB
cmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
b3V0cC5wdXRzKCImJiBhZGFwdG9yLnRyeSN7cHJvZHVjdGlvbi5uYW1lfSgiICsgdHJ5QXJndW1l
bnRzLmpvaW4oIiwgIikgKyAiKSkgeyIpCisgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3Iu
YWNjZXB0Um9vdExhdGUoX3ZhbHVlKTsiCisgICAgICAgICAgICB1bmxlc3MgaW50ZXJuYWxBcmd1
bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdElu
dGVybmFsc0xhdGUoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKTsiCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5Pwor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2NlcHRPcGVyYW5kc0xhdGUoIiAr
IG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpOyIKKyAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm47IgorICAgICAgICAgICAgb3V0cC5wdXRzICJ9Igor
ICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
In0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21hdGNoZXIu
bmFtZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwy
MjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5l
c3MuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworYm9vbCBhdHRlbXB0
QXNzaWdubWVudCgKKyAgICBTdGFja1Nsb3QqIHNsb3QsIGludHB0cl90IG9mZnNldEZyb21GUCwg
Y29uc3QgVmVjdG9yPFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGZvciAoU3RhY2tT
bG90KiBvdGhlclNsb3QgOiBvdGhlclNsb3RzKSB7CisgICAgICAgIGlmICghb3RoZXJTbG90LT5v
ZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAob2Zmc2V0
RnJvbUZQICsgc2xvdC0+Ynl0ZVNpemUoKSA+PSBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBpZiAob3RoZXJTbG90LT5vZmZzZXRG
cm9tRlAoKSArIG90aGVyU2xvdC0+Ynl0ZVNpemUoKSA+PSBvZmZzZXRGcm9tRlApCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQKG9m
ZnNldEZyb21GUCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgYXNzaWduKFN0YWNrU2xv
dCogc2xvdCwgY29uc3QgVmVjdG9yPFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGlm
IChhdHRlbXB0QXNzaWdubWVudChzbG90LCAtc2xvdC0+Ynl0ZVNpemUoKSwgb3RoZXJTbG90cykp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBvdGhl
clNsb3RzKSB7CisgICAgICAgIGlmIChvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpCisgICAgICAg
ICAgICAmJiBhdHRlbXB0QXNzaWdubWVudChzbG90LCBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgp
IC0gc2xvdC0+Ynl0ZVNpemUoKSwgb3RoZXJTbG90cykpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQoreworICAg
IFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVTdGFjayIpOworCisgICAgLy8g
QWxsb2NhdGUgYWxsIG9mIHRoZSBsb2NrZWQgc2xvdHMgaW4gb3JkZXIuIFRoaXMgaXMga2luZCBv
ZiBhIGNyYXp5IGFsZ29yaXRobSB0byBhbGxvdyBmb3IKKyAgICAvLyB0aGUgcG9zc2liaWxpdHkg
b2Ygc3RhY2sgc2xvdHMgYmVpbmcgYXNzaWduZWQgZnJhbWUgb2Zmc2V0cyBiZWZvcmUgd2UgZXZl
biBnZXQgaGVyZS4KKyAgICBBU1NFUlQoIWNvZGUuZnJhbWVTaXplKCkpOworICAgIFZlY3RvcjxT
dGFja1Nsb3QqPiBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHM7CisgICAgVmVjdG9yPFN0YWNrU2xv
dCo+IGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdDsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6
IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIHN3aXRjaCAoc2xvdC0+a2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgorICAgICAgICAgICAgaWYgKHNsb3Qt
Pm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90
cy5hcHBlbmQoc2xvdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9ja2Vk
U3RhY2tTbG90c1dvcmtsaXN0LmFwcGVuZChzbG90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAgICAgIGlmIChzbG90
LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgICAgIC8vIEFzIGEgbWF0dGVyIG9mIHNh
bml0eSwgdW5hc3NpZ24gdGhpcy4gTWF5YmUgaXQgd291bGQgYmUgZ29vZCB0byBldmVuIGhhdmUg
YQorICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gcnVsZSB0aGF0IHRoaXMgY2Fubm90IGhh
cHBlbi4KKyAgICAgICAgICAgICAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAoMCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBUaGlz
IGlzIGEgZmFpcmx5IGV4cGVuc2l2ZSBsb29wLCBidXQgaXQncyBPSyBiZWNhdXNlIHdlJ2xsIHVz
dWFsbHkgb25seSBoYXZlIGEgaGFuZGZ1bCBvZgorICAgIC8vIGxvY2tlZCBzdGFjayBzbG90cy4K
KyAgICB3aGlsZSAoIWxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgU3RhY2tTbG90KiBzbG90ID0gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LnRha2VMYXN0KCk7
CisgICAgICAgIGFzc2lnbihzbG90LCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMpOworICAgICAg
ICBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgIH0KKworICAgIC8v
IE5vdyB3ZSBoYW5kbGUgdGhlIGFub255bW91cyBzbG90cy4gTm90ZSB0aGF0IHRoZW9yZXRpY2Fs
bHkgd2Ugc2hvdWxkIGRvIGFuIGVzY2FwZSBhbmFseXNpcworICAgIC8vIGhlcmUuIEJ1dCwgY3Vy
cmVudGx5IEFpciBkb2Vzbid0IHN1cHBvcnQgZXNjYXBpbmcgYSBTdGFja1Nsb3QhCisgICAgLy8g
RklYTUU6IEFkZCBzdXBwb3J0IGZvciBlc2NhcGluZyBhIFN0YWNrU2xvdCBhbmQgYWRkIGVzY2Fw
ZSBhbmFseXNpcyB0byBhbGxvY2F0ZVN0YWNrKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQzMAorCisgICAgYXV0byBpc1JlbGV2YW50ID0gW10g
KGNvbnN0IEFyZyYgYXJnKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIGFyZy5pc1N0YWNrKCkg
JiYgYXJnLnN0YWNrU2xvdCgpLT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOwor
ICAgIH07CisKKyAgICBMaXZlbmVzczxBcmc+IGxpdmVuZXNzKGNvZGUpOworICAgIEluZGV4TWFw
PFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc2l6ZSgp
KTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxBcmc+OjpMb2NhbENhbGMgbG9jYWxD
YWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgYXV0byBpbnRlcmZlcmUgPSBbJl0gKCkg
eworICAgICAgICAgICAgLy8gRm9ybSBhIGNsaXF1ZSBvZiBzdGFjayBzbG90cyB0aGF0IGludGVy
ZmVyZS4gRmlyc3QgZmluZCB0aGUgbGlzdCBvZiBzdGFjayBzbG90cworICAgICAgICAgICAgLy8g
dGhhdCBhcmUgbGl2ZSByaWdodCBub3cuCisgICAgICAgICAgICBzbG90cy5yZXNpemUoMCk7Cisg
ICAgICAgICAgICBmb3IgKEFyZyBhcmcgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGlzUmVsZXZhbnQoYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBw
ZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2xvdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBT
dGFja1Nsb3QqIG91dGVyID0gc2xvdHNbaV07CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gaSArIDE7IGogPCBzbG90cy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAg
ICBTdGFja1Nsb3QqIGlubmVyID0gc2xvdHNbaV07CisKKyAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tTbG90KiBmaXJzdCA9IG91dGVyOworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNl
Y29uZCA9IGlubmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QtPmluZGV4KCkgPiBz
ZWNvbmQtPmluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoZmlyc3Qs
IHNlY29uZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW2ZpcnN0XS5hZGQo
c2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW3NlY29uZF0uYWRkKGZp
cnN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAg
ICAgICAgaW50ZXJmZXJlKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJ
bmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgbG9jYWxD
YWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgaW50ZXJmZXJl
KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgYXNzaWduIHN0YWNrIGxvY2F0
aW9ucy4gQXQgaXRzIGhlYXJ0IHRoaXMgYWxnb3JpdGhtIGlzIGp1c3QgZmlyc3QtZml0LiBGb3Ig
ZWFjaAorICAgIC8vIFN0YWNrU2xvdCB3ZSBqdXN0IHdhbnQgdG8gZmluZCB0aGUgb2Zmc2V0RnJv
bUZQIHRoYXQgaXMgY2xvc2VzdCB0byB6ZXJvIHdoaWxlIGVuc3VyaW5nIG5vCisgICAgLy8gb3Zl
cmxhcCB3aXRoIG90aGVyIFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdpdGguCisgICAg
VmVjdG9yPFN0YWNrU2xvdCo+IG90aGVyU2xvdHM7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3Qg
OiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
IHsKKyAgICAgICAgICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0LgorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+JiBp
bnRlcmZlcmluZ1Nsb3RzID0gaW50ZXJmZXJlbmNlW3Nsb3RdOworICAgICAgICBvdGhlclNsb3Rz
LnJlc2l6ZShhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpICsgaW50ZXJmZXJpbmdTbG90
cy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3RoZXJTbG90c1tpXSA9IGFz
c2lnbmVkTG9ja2VkU3RhY2tTbG90c1tpXTsKKyAgICAgICAgdW5zaWduZWQgbmV4dEluZGV4ID0g
YXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3Qq
IG90aGVyU2xvdCA6IGludGVyZmVyaW5nU2xvdHMpCisgICAgICAgICAgICBvdGhlclNsb3RzW25l
eHRJbmRleCsrXSA9IG90aGVyU2xvdDsKKworICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90
cyk7CisgICAgfQorCisgICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzdGFjayB3ZSdyZSB1c2lu
ZyBmb3Igc3RhY2sgc2xvdHMuCisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9
IDA7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAg
ICAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gc3RkOjptYXgoCisgICAgICAgICAgICBmcmFt
ZVNpemVGb3JTdGFja1Nsb3RzLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1z
bG90LT5vZmZzZXRGcm9tRlAoKSkpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRl
ZHVjZSBob3cgbXVjaCBhcmd1bWVudCBhcmVhIHdlIG5lZWQuCisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7Cisg
ICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAg
aWYgKGFyZy5pc0NhbGxBcmcoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCB3
ZSBhc3N1bWUgdGhhdCB3ZSB1c2UgOCBieXRlcyBvZiB0aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mg
bm90CisgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2ggYW4gYXdlc29tZSBhc3N1bXB0aW9uLgor
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ1NAorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLm9mZnNl
dCgpID49IDApOworICAgICAgICAgICAgICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNp
emUoYXJnLm9mZnNldCgpICsgOCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgY29kZS5zZXRGcmFtZVNpemUoZnJhbWVTaXplRm9yU3Rh
Y2tTbG90cyArIGNvZGUuY2FsbEFyZ0FyZWFTaXplKCkpOworCisgICAgLy8gRmluYWxseSwgdHJh
bnNmb3JtIHRoZSBjb2RlIHRvIHVzZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhp
cyBpcyBhIGxvc3NsZXNzCisgICAgLy8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJj
aCB0aGUgU3RhY2tTbG90cyBhcnJheSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkK
KyAgICAvLyBvZmZzZXQtZnJvbS1GUCByZWZlcnMgdG8uCisKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAg
ICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6Cisg
ICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAg
ICAgICBhcmcub2Zmc2V0KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxB
cmc6CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAg
ICAgICAgICAgICBhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVTdGFjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckFsbG9jYXRlU3RhY2tfaAorI2RlZmluZSBBaXJBbGxvY2F0ZVN0YWNrX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90
cyB0byBwbGFjZXMgb24gdGhlIHN0YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBv
bmVzIGluIGluZGV4CisvLyBvcmRlciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNp
bmcgZmlyc3QgZml0LgorCit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyQWxsb2NhdGVTdGFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyQXJnLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgQXJnOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIElu
dmFsaWQ6CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFRtcDoKKyAgICAgICAgb3V0LnByaW50KHRtcCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSW1tOgorICAgICAgICBvdXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEltbTY0OgorICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4
IiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGRyOgorICAgICAgICBp
ZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBv
dXQucHJpbnQoIigiLCBiYXNlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElu
ZGV4OgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0
KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsIiwgaW5kZXgoKSk7CisgICAg
ICAgIGlmIChzY2FsZSgpICE9IDEpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgp
KTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
YWNrOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0
KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBwb2ludGVyRHVtcChzdGFja1Nsb3QoKSksICIp
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGlmIChvZmZz
ZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmlu
dCgiKGNhbGxBcmcpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbENvbmQ6CisgICAg
ICAgIG91dC5wcmludChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIG91dC5wcmludChhc1Jlc3VsdENvbmRpdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50
KHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NzEgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJB
cmdfaAorI2RlZmluZSBBaXJBcmdfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpclRtcC5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFja1Ns
b3Q7CisKKy8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVj
YXVzZSB3ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3Qo
Li4uLCBBcmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJn
IHsKK3B1YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkg
dGVyc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtp
bmQgOiBpbnQ4X3QgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBUbXAsCisgICAgICAgIElt
bSwKKyAgICAgICAgSW1tNjQsCisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAorICAgICAg
ICBDYWxsQXJnLAorICAgICAgICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAgUmVz
Q29uZCwKKyAgICAgICAgU3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4X3Qg
eworICAgICAgICBVc2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsKKwor
ICAgIGVudW0gVHlwZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAgIH07
CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOworCisgICAgc3RhdGlj
IGJvb2wgaXNVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7Cisg
ICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
VHlwZSB0eXBlRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgRG91
YmxlOgorICAgICAgICAgICAgcmV0dXJuIEZQOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gR1A7CisgICAgfQorCisgICAgQXJnKCkKKyAg
ICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorCisgICAgQXJnKEFpcjo6VG1w
IHRtcCkKKyAgICAgICAgOiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFzZSh0bXApCisgICAg
eworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUpCisgICAgeworICAg
ICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tOworICAgICAgICBy
ZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBzdGF0aWMgQXJnIGltbTY0KGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIGFkZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOwor
ICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZhbHVlLCBpbnQzMl90
IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxp
bnRwdHJfdD4odmFsdWUpOworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9mZnNldDsgLy8gSSBr
bm93LCB5dWNrLgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBB
cmcgY2FsbEFyZyhpbnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQg
PSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIGJv
b2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChz
Y2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2FzZSA0
OgorICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHN0YXRpYyB1bnNpZ25lZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIDA7
CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIDQ6
CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0
dXJuIDM7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBpbmRleChBaXI6OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5zaWduZWQgc2NhbGUg
PSAxLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQ
KCkpOworICAgICAgICBBU1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFs
aWRTY2FsZShzY2FsZSkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gSW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1
bHQubV9pbmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IHN0YXRpY19jYXN0
PGludDMyX3Q+KHNjYWxlKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNy
b0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAg
ICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVsQ29uZDsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHN0YXRpYyBBcmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0
aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2tpbmQgPSBSZXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzcGVjaWFs
KEFpcjo6U3BlY2lhbCogc3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBi
aXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CisgICAgICAgICAg
ICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3Ro
ZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAg
ICAgICAgICYmIG1fc2NhbGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisKKyAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4gKnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAgIGJvb2wgaXNUbXAo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7CisgICAgfQorCisg
ICAgYm9vbCBpc0ltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IElt
bTsKKyAgICB9CisKKyAgICBib29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGtpbmQoKSA9PSBJbW02NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAgYm9vbCBp
c1N0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhY2s7Cisg
ICAgfQorCisgICAgYm9vbCBpc0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGtpbmQoKSA9PSBDYWxsQXJnOworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAgIGJvb2wg
aXNSZWxDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29u
ZDsKKyAgICB9CisKKyAgICBib29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4ga2luZCgpID09IFJlc0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1NwZWNpYWwoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOworICAgIH0KKwor
ICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSB8
fCBpc1N0YWNrKCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAg
ICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gSW1tIHx8IGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBtX29mZnNl
dDsKKyAgICB9CisKKyAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8
dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIEFp
cjo6VG1wIGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRy
IHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisg
ICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNl
IENhbGxBcmc6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoa2luZCgpID09IFN0YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMy
X3Q+KG1fc2NhbGUpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09
IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludDMyX3Q+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAg
QWlyOjpUbXAgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJ
bmRleCk7CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNj
YWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAg
ICAgICByZXR1cm4gbV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisg
ICAgQWlyOjpTcGVjaWFsKiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gU3BlY2lhbCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVj
aWFsKj4obV9vZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAg
Ym9vbCBpc0ZQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRt
cCgpLmlzRlAoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2Fu
IGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9v
bCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAg
IGNhc2UgSW1tOgorICAgICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAg
ICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFy
ZzoKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAg
IGNhc2UgU3BlY2lhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRt
cDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQVG1wKCk7CisgICAgICAgIGNhc2UgSW52YWxpZDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRl
bGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJl
cyBhIEZQIHZhbHVlLgorICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBSZWxDb25kOgor
ICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2Fz
ZSBJbnZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZHI6
CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2Ug
Q2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxvdyBJbW02NCBhcyBh
IGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBz
LgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAg
ICAgcmV0dXJuIGlzRlBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFzVHlw
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNl
IEltbToKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmlndW91
cyBmb3Igc29tZSBhcmcga2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisKKyAg
ICBib29sIGlzVHlwZShUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQKCk7CisgICAg
ICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gaXNGUCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAo
KSAmJiB0bXAoKS5pc0dQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsK
KyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0
bXAoKS5mcHIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJl
ZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0K
KworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRtcCgpLmdwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQor
CisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRt
cCgpLnRtcEluZGV4KCk7CisgICAgfQorCisgICAgQXJnIHdpdGhPZmZzZXQoaW50MzJfdCBhZGRp
dGlvbmFsT2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNPZmZzZXQoKSkKKyAg
ICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90
PihvZmZzZXQoKSwgYWRkaXRpb25hbE9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7
CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAg
ICAgIHJldHVybiBhZGRyKGJhc2UoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAg
ICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgICAgIHJldHVybiBzdGFjayhzdGFja1Nsb3QoKSwg
b2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAg
ICAgICAgICAgcmV0dXJuIGNhbGxBcmcob2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAg
ICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpbmRleChiYXNlKCksIGluZGV4
KCksIHNjYWxlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgcmV0dXJuIEFyZygpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoK
KyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1f
YmFzZSk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIC8vIFRoaXMgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFy
ZyBpbiBhIERlZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBu
ZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3YgJXJh
eCwgKCVyY3gpCisgICAgLy8KKyAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3gu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoUm9s
ZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAg
IGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xlLCBhcmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1
bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNl
LCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMiBhc1RydXN0ZWRJbW0zMigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW0o
KSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19j
YXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0IGFzVHJ1c3RlZEltbTY0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NCh2YWx1ZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyIGFzVHJ1c3RlZEltbVB0cigpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoc2l6ZW9mKHZvaWQqKSA9PSA4KQorICAgICAgICAgICAgQVNTRVJUKGlzSW1t
NjQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAg
ICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXJWYWx1ZSgpKTsK
KyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhc0FkZHJlc3MoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQWRkcigpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5ncHIoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZz
ZXQpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFzQmFzZUluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0luZGV4KCkpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgIG1fYmFzZS5ncHIoKSwg
bV9pbmRleC5ncHIoKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlNjYWxlPihsb2dTY2Fs
ZSgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAg
fQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFs
Q29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25k
aXRpb24gYXNSZXN1bHRDb25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
UmVzQ29uZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpS
ZXN1bHRDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworICAgIEFyZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV9iYXNlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQorICAgIHsKKyAg
ICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAqdGhpcyA9PSBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhp
cyByZWFsbHkgZG9lc24ndCBoYXZlIHRvIGJlIHRoYXQgZ3JlYXQuCisgICAgICAgIHJldHVybiBX
VEY6OkludEhhc2g8aW50NjRfdD46Omhhc2gobV9vZmZzZXQpICsgbV9raW5kICsgbV9zY2FsZSAr
IG1fYmFzZS5oYXNoKCkgKworICAgICAgICAgICAgbV9pbmRleC5oYXNoKCk7CisgICAgfQorCitw
cml2YXRlOgorICAgIGludDY0X3QgbV9vZmZzZXQgeyAwIH07CisgICAgS2luZCBtX2tpbmQgeyBJ
bnZhbGlkIH07CisgICAgaW50MzJfdCBtX3NjYWxlIHsgMSB9OworICAgIEFpcjo6VG1wIG1fYmFz
ZTsKKyAgICBBaXI6OlRtcCBtX2luZGV4OworfTsKKworc3RydWN0IEFyZ0hhc2ggeworICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEFyZyYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9
CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQXJnJiBhLCBjb25zdCBBcmcmIGIpIHsgcmV0
dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5
T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0
SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OkFpcjo6QXJnPiB7
CisgICAgdHlwZWRlZiBKU0M6OkIzOjpBaXI6OkFyZ0hhc2ggSGFzaDsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRy
YWl0czxKU0M6OkIzOjpBaXI6OkFyZz4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6
QWlyOjpBcmc+IHsKKyAgICAvLyBCZWNhdXNlIG1fc2NhbGUgaXMgMSBpbiB0aGUgZW1wdHkgdmFs
dWUuCisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyQXJnX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJC
YXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitib29sIEJhc2ljQmxvY2s6OmFkZFBy
ZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6YWRkUHJlZGVj
ZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6cmVtb3ZlUHJlZGVjZXNz
b3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICByZXR1cm4gQjM6OnJl
cGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4
LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kg
PSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworfQorCitCYXNpY0Js
b2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDog
bV9pbmRleChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZp
bmUgQWlyQmFzaWNCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
RnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIzU3Vj
Y2Vzc29yQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKK2NsYXNzIEluc2VydGlvblNldDsKKworY2xh
c3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhw
ciBjb25zdCBjaGFyKiBkdW1wUHJlZml4ID0gIiMiOworCisgICAgdHlwZWRlZiBWZWN0b3I8SW5z
dD4gSW5zdExpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vz
c29yTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nv
ckxpc3Q7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0K
KyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXplKCk7
IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2luc3RzLmJlZ2lu
KCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9pbnN0cy5lbmQo
KTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAgICBjb25zdCBJbnN0JiBhdChzaXpl
X3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisgICAgSW5zdCYgYXQo
c2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorCisgICAgY29uc3QgSW5z
dCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisgICAgSW5zdCYgbGFz
dCgpIHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
bnN0PgorICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIG1f
aW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYm
Li4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpm
b3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIC8vIFRoZSAi
MCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRo
ZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAvLyAiZWxzZSIgY2FzZSwgYW5kIGlz
IHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2ggb2YgYSBjb25kaXRpb25hbCBicmFu
Y2guCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vz
c29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRl
ZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tp
bmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsg
cmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2so
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsg
fQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgeyByZXR1
cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxC
YXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4o
bV9zdWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNp
Y0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywg
Y29uc3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7
IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vz
c29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAg
ICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
cHJlZGVjZXNzb3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJl
dHVybiBtX3ByZWRlY2Vzc29yczsgfQorCisgICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Js
b2NrKik7CisgICAgYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9v
bCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOwor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOwor
ICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAgCisgICAgQmFzaWNCbG9jayh1bnNp
Z25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4Owor
ICAgIEluc3RMaXN0IG1faW5zdHM7CisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7Cisg
ICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5j
eTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJh
c2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2so
YmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5k
ZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxs
PiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOwor
fTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Jsb2Nr
KiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNw
ZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ0NhbGxTcGVjaWFsOjpDQ2FsbFNwZWNpYWwoKQor
eworICAgIG1fY2xvYmJlcmVkUmVncyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKKyAg
ICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7
CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdh
cmVSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6
OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK0NDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lh
bCgpCit7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNv
bnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAg
ICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6VXNlLCBBcmc6OkdQKTsKKyAgICAKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IC8vIEZvciB0aGUgdHlwZSwgd2UgY2FuIGp1c3QgcXVlcnkgdGhlIGFyZydzIHR5cGUuIFRoZSBh
cmcgd2lsbCBoYXZlIGEgdHlwZSwgYmVjYXVzZSB3ZQorICAgICAgICAvLyByZXF1aXJlIHRoZXNl
IGFyZ3MgdG8gYmUgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAgICAgICBjYWxsYmFjayhpbnN0LmFy
Z3NbaV0sIEFyZzo6VXNlLCBpbnN0LmFyZ3NbaV0udHlwZSgpKTsKKyAgICB9Cit9CisKK2Jvb2wg
Q0NhbGxTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5z
aXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGluc3QuYXJn
c1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBpZiAoc2l6ZW9mKHZv
aWQqKSA9PSA0KQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGlmIChzaXplb2Yodm9pZCopID09IDgpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpUbXA6
CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgIGNhc2UgQXJn
OjpDYWxsQXJnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNHUCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5zdC5hcmdzW2ldLmlzUmVnKCkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGluc3QuYXJnc1tpXSA9PSBUbXAoc2Ny
YXRjaFJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVybiAgZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIENDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYsIHVu
c2lnbmVkIGFyZ0luZGV4KQoreworICAgIC8vIEFyZyAxIGNhbiBiZSBhIHN0YWNrIGFkZHJlc3Mg
Zm9yIHN1cmUuCisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OnJlcG9ydFVz
ZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikKK3sKK30KKworQ0NhbGxIZWxw
ZXJzOjpKdW1wIENDYWxsU3BlY2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJz
JiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5r
aW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAg
ICAgaml0Lm1vdmUoaW5zdC5hcmdzWzFdLmFzVHJ1c3RlZEltbVB0cigpLCBzY3JhdGNoUmVnaXN0
ZXIpOworICAgICAgICBqaXQuY2FsbChzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uZ3ByKCkp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgaml0LmNhbGwo
aW5zdC5hcmdzWzFdLmFzQWRkcmVzcygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworY29uc3QgUmVnaXN0
ZXJTZXQmIENDYWxsU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKQoreworICAgIHJl
dHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwor
dm9pZCBDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiZnVuY3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBj
b252ZW50aW9uLiIpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDQ2FsbFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyQ0NhbGxTcGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxTcGVjaWFsX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gVXNlIHRoaXMgc3BlY2lh
bCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBjb3Vyc2UgYSBTcGVjaWFs
IGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBvYmplY3QuIEFyZyAxIGlz
IHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJlZ2lzdGVyLCBvciBhbiBh
ZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRoZSBzZXQgb2YgYXJndW1l
bnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1lbnRzIHRoYXQgZ28gdG8K
Ky8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdvcmsgb2YgZG9pbmcgdGhv
c2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24gd2h5CisvLyB3ZSBzcGVj
aWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRvIGEgY2FsbCBpcyBzbyB0
aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0IHRoZXkgZ2V0IHVzZWQg
aGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSByZXBvcnQgYWxsIGFyZ3Vt
ZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlmIHdlIGhhZCBhIGNhbGwg
dGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIgdG8gYmUgbGl2ZSB1bnRp
bCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwgd2hpY2hldmVyIGhhcHBl
bmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGljIFNwZWNpYWwgeworcHVi
bGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNpYWwoKTsKKworICAgIC8v
IFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1c3Qg
c28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAgLy8gdXNlZCBmb3IgYXJn
dW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBpcyB0
aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBzcGVj
aWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lzdGVy
ID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFy
ZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVy
cmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRz
U3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcG9y
dFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0
aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2Ji
ZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRS
ZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNDYWxsU3BlY2lhbF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKyNpbmNsdWRlICJC
M0Jhc2ljQmxvY2tVdGlscy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK0NvZGU6OkNvZGUoKQoreworfQorCitDb2RlOjp+Q29kZSgpCit7Cit9
CisKK0Jhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tz
LnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0
KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1N0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVT
aXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFja1Nsb3QoYnl0ZVNpemUsIG1f
c3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7CisgICAgU3RhY2tTbG90KiByZXN1bHQg
PSBzbG90LmdldCgpOworICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RGOjptb3ZlKHNsb3QpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitTcGVjaWFsKiBDb2RlOjphZGRTcGVjaWFsKHN0ZDo6
dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQoreworICAgIFNwZWNpYWwqIHJlc3VsdCA9IHNw
ZWNpYWwuZ2V0KCk7CisgICAgbV9zcGVjaWFscy5hcHBlbmQoV1RGOjptb3ZlKHNwZWNpYWwpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3BlY2lh
bCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAgICAgICBtX2NDYWxsU3BlY2lh
bCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAgICAgICAgYWRkU3BlY2lhbChz
dGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAgIH0KKworICAgIHJldHVybiBt
X2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7Cisg
ICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30KKwordm9pZCBDb2RlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAoc3Rh
Y2tTbG90cygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxuIik7
CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAgICAg
ICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc2xvdCksICJcbiIpOworICAgIH0KKyAgICBp
ZiAoc3BlY2lhbHMoKS5zaXplKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsczpcbiIp
OworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFscygpKQorICAgICAgICAg
ICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCksICJcbiIpOworICAgIH0KKyAg
ICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCAiXG4iKTsKKyAgICBvdXQu
cHJpbnQoIkNhbGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIpOwor
ICAgIG91dC5wcmludCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMsICJc
biIpOworfQorCit1bnNpZ25lZCBDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAoreworICAgIHdoaWxlIChpbmRleCA8IHNpemUoKSAmJiAhYXQoaW5kZXgpKQor
ICAgICAgICBpbmRleCsrOworICAgIHJldHVybiBpbmRleDsKK30KKwordW5zaWduZWQgQ29kZTo6
ZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBm
aW5kRmlyc3RCbG9ja0luZGV4KGluZGV4ICsgMSk7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmZp
bmROZXh0QmxvY2soQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Cit7CisgICAgcmV0dXJuIGF0KGZp
bmROZXh0QmxvY2tJbmRleChibG9jay0+aW5kZXgoKSkpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMw
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFpckNvZGVfaAorI2RlZmluZSBBaXJDb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2lu
Y2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisK
K25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDQ2FsbFNwZWNpYWw7CisKKy8vIFRoaXMgaXMgYW4g
SVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJdCByZXF1aXJlcyBhYm91
dCA0MHggbW9yZSBieXRlcyB0aGFuIHRoZQorLy8gZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSAtIGZv
ciBleGFtcGxlIGlmIHlvdSdyZSBnZW5lcmF0aW5nIDFNQiBvZiBtYWNoaW5lIGNvZGUsIHlvdSBu
ZWVkIGFib3V0CisvLyA0ME1CIG9mIEFpci4KKworY2xhc3MgQ29kZSB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoQ29kZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgQ29kZSgpOworICAgIH5Db2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhk
b3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1
bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0
cik7CisKKyAgICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7
CisKKyAgICAvLyBUaGlzIGlzIHRoZSBzcGVjaWFsIHlvdSBuZWVkIHRvIG1ha2UgYSBDIGNhbGwh
CisgICAgQ0NhbGxTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIFRtcCBuZXdUbXAoQXJn
OjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6Z3BUbXBGb3JJbmRleChtX251bUdQ
VG1wcysrKTsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6
ZnBUbXBGb3JJbmRleChtX251bUZQVG1wcysrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVu
c2lnbmVkIG51bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5
cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtR1BU
bXBzOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1cm4gbV9udW1GUFRt
cHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYWxsQXJnQXJlYVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2NhbGxBcmdBcmVhU2l6ZTsgfQorCisgICAgLy8gWW91IGNhbiBjYWxs
IHRoaXMgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiB0byBmb3JjZSBhIG1pbmltdW0gY2FsbCBhcmcg
YXJlYSBzaXplLgorICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6ZSh1bnNpZ25lZCBzaXpl
KQorICAgIHsKKyAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUgPSBzdGQ6Om1heChtX2NhbGxBcmdB
cmVhU2l6ZSwgc2l6ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnJhbWVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9mcmFtZVNpemU7IH0KKworICAgIC8vIE9ubHkgcGhhc2VzIHRoYXQgZG8gc3Rh
Y2sgYWxsb2NhdGlvbiBhcmUgYWxsb3dlZCB0byBzZXQgdGhpcy4gQ3VycmVudGx5LCBvbmx5Cisg
ICAgLy8gQWlyOjphbGxvY2F0ZVN0YWNrKCkgZG9lcyB0aGlzLgorICAgIHZvaWQgc2V0RnJhbWVT
aXplKHVuc2lnbmVkIGZyYW1lU2l6ZSkKKyAgICB7CisgICAgICAgIG1fZnJhbWVTaXplID0gZnJh
bWVTaXplOworICAgIH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisKKyAgICAvLyBSZWNv
bXB1dGVzIHByZWRlY2Vzc29ycyBhbmQgZGVsZXRlcyB1bnJlYWNoYWJsZSBibG9ja3MuCisgICAg
dm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6
ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tzW2luZGV4XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgLy8gRmluZHMg
dGhlIHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRl
eCcgPj0gaW5kZXguCisgICAgdW5zaWduZWQgZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBp
bmRleCkgY29uc3Q7CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhh
dCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+IGluZGV4LgorICAgIHVuc2lnbmVkIGZp
bmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICBCYXNpY0Jsb2Nr
KiBmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqKSBjb25zdDsKKworICAgIGNsYXNzIGl0ZXJhdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2Rl
KG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29kZSYgY29kZSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgICAgICAgICA6IG1fY29kZSgmY29kZSkKKyAgICAgICAgICAgICwgbV9pbmRleChtX2NvZGUt
PmZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9jb2RlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fY29kZS0+Zmlu
ZEZpcnN0QmxvY2tJbmRleChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhl
ci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBD
b2RlKiBtX2NvZGU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0K
KworICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1f
Y29kZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90cy5zaXplKCk7IH0KKyAgICAgICAg
U3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3Rh
Y2tTbG90c1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwg
bV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
dGVyYXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQg
aW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAg
ICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTdGFja1Nsb3Rz
Q29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsK
KyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29u
c3QgQ29kZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFj
a1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9Cisg
ICAgCisgICAgY2xhc3MgU3BlY2lhbHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFNwZWNpYWxzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQorICAgICAgICAgICAgOiBtX2Nv
ZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzLnNpemUoKTsgfQorICAgICAgICBTcGVj
aWFsKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHNb
aW5kZXhdLmdldCgpOyB9CisgICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yW10odW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9y
IHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAg
ICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDAp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNv
bnN0IFNwZWNpYWxzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAg
LCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBTcGVjaWFsKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9
PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uKiBtX2Nv
bGxlY3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisg
ICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDAp
OyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlz
LCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7
CisgICAgfTsKKworICAgIFNwZWNpYWxzQ29sbGVjdGlvbiBzcGVjaWFscygpIGNvbnN0IHsgcmV0
dXJuIFNwZWNpYWxzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxTcGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBDQ2FsbFNwZWNpYWwqIG1fY0Nh
bGxTcGVjaWFsIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9Owor
ICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fZnJhbWVTaXpl
IHsgMCB9OworICAgIHVuc2lnbmVkIG1fY2FsbEFyZ0FyZWFTaXplIHsgMCB9OworICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKK307CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBBaXJDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJG
cmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQWlyRnJlcXVlbnRlZEJsb2Nr
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVk
QmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8
QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyRnJlcXVl
bnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1
ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKyNpbmNsdWRlICJBaXJWYWxp
ZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgor
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxw
ZXJzJiBqaXQpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRh
dGUoY29kZSwgImluaXRpYWwiKTsKKworICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAg
ICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAg
IH0KKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgcnVuIG91ciBvcHRpbWl6YXRpb25zIGFuZCB0
cmFuc2Zvcm1hdGlvbnMuCisgICAgLy8gRklYTUU6IEFkZCBBaXIgb3B0aW1pemF0aW9ucy4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU2CisKKyAg
ICAvLyBUaGlzIGlzIHdoZXJlIHdlIHdvdWxkIGhhdmUgYSByZWFsIHJlZ2lzdGVyIGFsbG9jYXRv
ci4gVGhlbiwgd2UgY291bGQgdXNlIHNwaWxsRXZlcnl0aGluZygpCisgICAgLy8gaW4gcGxhY2Ug
b2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBvbmx5IGZvciB0ZXN0aW5nLgorICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU3CisgICAgc3Bp
bGxFdmVyeXRoaW5nKGNvZGUpOworCisgICAgLy8gUHJpb3IgdG8gdGhpcyBwb2ludCB0aGUgcHJv
bG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJ
dCBhbHNvCisgICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2
ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCisgICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29k
ZSk7CisKKyAgICAvLyBUaGlzIHR1cm5zIGFsbCBTdGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8g
QWRkciBhcmdzIHRoYXQgdXNlIHRoZSBmcmFtZSBwb2ludGVyLiBJdCBkb2VzCisgICAgLy8gdGhp
cyBieSBmaXJzdC1maXQgYWxsb2NhdGluZyBzdGFjayBzbG90cy4gSXQgc2hvdWxkIGJlIHByZXR0
eSBkYXJuIGNsb3NlIHRvIG9wdGltYWwsIHNvIHdlCisgICAgLy8gc2hvdWxkbid0IGhhdmUgdG8g
d29ycnkgYWJvdXQgdGhpcyB2ZXJ5IG11Y2guCisgICAgYWxsb2NhdGVTdGFjayhjb2RlKTsKKwor
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGhhdmUgYSBjb2RlIGxheW91dCBvcHRpbWl6
YXRpb24gaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNDc4CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIGxhdGUgbGl2ZW5lc3MgYW5hbHlz
aXMgb3ZlciByZWdpc3RlcnMgdG8gZmlsbCBpbiB0aGUKKyAgICAvLyBTcGVjaWFsOjpyZXBvcnRV
c2VkUmVnaXN0ZXJzKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDUxMQorCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFs
aWRhdGUoY29kZSwgImZpbmFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAg
ICAgZGF0YUxvZygiQWlyIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2co
Y29kZSk7CisgICAgfQorCisgICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJhdGUgY29kZS4KKyAgICBq
aXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKworICAgIEdlbmVyYXRpb25Db250ZXh0IGNvbnRleHQ7CisgICAgY29u
dGV4dC5jb2RlID0gJmNvZGU7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJz
OjpMYWJlbD4gYmxvY2tMYWJlbHMoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworCisg
ICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCwgQmFzaWNCbG9jayog
dGFyZ2V0KSB7CisgICAgICAgIGlmIChibG9ja0xhYmVsc1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAg
ICAgICAgICAgIGp1bXAubGlua1RvKGJsb2NrTGFiZWxzW3RhcmdldF0sICZqaXQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFw
cGVuZChqdW1wKTsKKyAgICB9OworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUp
IHsKKyAgICAgICAgYmxvY2tKdW1wc1tibG9ja10ubGluaygmaml0KTsKKyAgICAgICAgQVNTRVJU
KGJsb2NrLT5zaXplKCkgPj0gMSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBi
bG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
anVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5pc1NldCgpKTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXAKKyAgICAgICAgICAgICYm
IGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2Rl
ID09IFJldCkgeworICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGRvbid0IHJlcHJlc2VudCB0
aGUgZnVsbCBwcm9sb2d1ZS9lcGlsb2d1ZSBpbiBBaXIsIHNvIHdlIG5lZWQgdG8KKyAgICAgICAg
ICAgIC8vIGhhdmUgdGhpcyBvdmVycmlkZS4KKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25F
cGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0g
YmxvY2stPmxhc3QoKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICBmb3IgKEluc3Qm
IGluc3QgOiAqYmxvY2spCisgICAgICAgICAgICBqdW1wID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNv
bnRleHQpOworICAgICAgICBzd2l0Y2ggKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpIHsKKyAgICAg
ICAgY2FzZSAwOgorICAgICAgICAgICAgQVNTRVJUKCFqdW1wLmlzU2V0KCkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2st
PnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAg
ICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpICE9IGNvZGUuZmluZE5leHRCbG9j
ayhibG9jaykpCisgICAgICAgICAgICAgICAgbGluayhqaXQuanVtcCgpLCBibG9jay0+c3VjY2Vz
c29yQmxvY2soMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGxhdGVQYXRoIDogY29udGV4dC5s
YXRlUGF0aHMpCisgICAgICAgIGxhdGVQYXRoLT5ydW4oaml0LCBjb250ZXh0KTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gKKyNkZWZpbmUgQWlyR2Vu
ZXJhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNz
IENDYWxsSGVscGVyczsKKworbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENvZGU7CisKKy8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkg
c3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQorLy8gcmVnaXN0
ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncywgYW5kIHRoZW4gZ2Vu
ZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbgorLy8gQ0NhbGxIZWxwZXJzIGluc3RhbmNl
LiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxsYmFja3MgaW4gdGhlIHN1cHBsaWVkIGNvZGUg
YXMgaXQgaXMKKy8vIGdlbmVyYXRpbmcuCit2b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBl
cnMmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGlvbkNvbnRl
eHRfaAorI2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQgewor
ICAgIHR5cGVkZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVyYXRp
b25Db250ZXh0Jik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExh
dGVQYXRoOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKKyAgICBD
b2RlKiBjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRpb25Db250ZXh0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5k
bGVDYWxsZWVTYXZlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJ
bnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBoYW5kbGVDYWxsZWVT
YXZlcyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiaGFu
ZGxlQ2FsbGVlU2F2ZXMiKTsKKworICAgIFJlZ2lzdGVyU2V0IHVzZWRDYWxsZWVTYXZlczsKKwor
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYg
aW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdCgKKyAgICAg
ICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEF0IGZp
cnN0IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2VkIHJlZ3MuCisgICAgICAgICAgICAgICAgICAgIHVz
ZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3ZSBmaWx0ZXIgdG8gcmVhbGx5IGdldCB0aGUgY2Fs
bGVlIHNhdmVzLgorICAgIHVzZWRDYWxsZWVTYXZlcy5maWx0ZXIoUmVnaXN0ZXJTZXQ6OmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7CisKKyAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSA9IFJl
Z2lzdGVyQXRPZmZzZXRMaXN0KHVzZWRDYWxsZWVTYXZlcyk7CisKKyAgICBzaXplX3QgYnl0ZVNp
emUgPSAwOworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNh
bGxlZVNhdmVSZWdpc3RlcnMoKSkKKyAgICAgICAgYnl0ZVNpemUgPSBzdGQ6Om1heChzdGF0aWNf
Y2FzdDxzaXplX3Q+KC1lbnRyeS5vZmZzZXQoKSksIGJ5dGVTaXplKTsKKworICAgIFN0YWNrU2xv
dCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFja1Nsb3QoYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6
OkxvY2tlZCk7CisgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCBzaW5jZSB3ZSBjb3VsZCBoYXZl
IGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0YWNrIHNsb3QgdG8gdGhpcworICAgIC8vIGFy
ZWEuCisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAoLWJ5dGVTaXplKTsKKworICAgIGF1
dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgLT4gQXJnIHsK
KyAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soc2F2ZXNBcmVhLCBlbnRyeS5vZmZzZXQoKSArIGJ5
dGVTaXplKTsKKyAgICB9OworCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsK
KyAgICAKKyAgICAvLyBGaXJzdCBpbnNlcnQgc2F2aW5nIGNvZGUgaW4gdGhlIHByb2xvZ3VlLgor
ICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSkgeworICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
MCwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBjb2RlWzBdLT5hdCgw
KS5vcmlnaW4sCisgICAgICAgICAgICBUbXAoZW50cnkucmVnKCkpLCBhcmdGb3IoZW50cnkpKTsK
KyAgICB9CisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29kZVswXSk7CisKKyAgICAvLyBOb3cg
aW5zZXJ0IHJlc3RvcmUgY29kZSBhdCBlcGlsb2d1ZXMuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKKyAgICAgICAgSW5zdCYgbGFzdCA9IGJsb2NrLT5sYXN0KCk7CisgICAg
ICAgIGlmIChsYXN0Lm9wY29kZSAhPSBSZXQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAg
ICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDog
TW92ZURvdWJsZSwgbGFzdC5vcmlnaW4sCisgICAgICAgICAgICAgICAgYXJnRm9yKGVudHJ5KSwg
VG1wKGVudHJ5LnJlZygpKSk7CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKyNkZWZpbmUg
QWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisv
LyBUaGlzIHBoYXNlIGlkZW50aWZpZXMgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGFuZCBhZGRzIGNv
ZGUgdG8gc2F2ZS9yZXN0b3JlIHRoZW0gaW4gdGhlCisvLyBwcm9sb2d1ZS9lcGlsb2d1ZSB0byB0
aGUgY29kZS4gSXQncyBhIG1hbmRhdG9yeSBwaGFzZS4KKworLy8gRklYTUU6IEl0IHdvdWxkIGJl
IGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3RpdmUgd2l0aCB0aGUgQWlyIGNsaWVudCBh
bmQgYWxzbyBtb3JlCisvLyBwb3dlcmZ1bC4KKy8vIFdlIHNob3VsZCBoYXZlIHNocmluayB3cmFw
cGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1OAorLy8g
V2Ugc2hvdWxkIG1ha2UgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBjbGllbnQ6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTkKKwordm9pZCBoYW5kbGVDYWxsZWVT
YXZlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNl
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxv
Y2sqIGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5tX2luc3RzLCBtX2lu
c2VydGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBBaXJJbnNlcnRpb25TZXRfaAorI2RlZmluZSBBaXJJbnNlcnRpb25TZXRfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvSW5z
ZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBD
b2RlOworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPEluc3Q+IEluc2VydGlvbjsKKworY2xhc3Mg
SW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBJbnNlcnRpb25TZXQoQ29kZSYgY29kZSkKKyAg
ICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgQ29kZSYgY29kZSgpIHsg
cmV0dXJuIG1fY29kZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFw
cGVuZEluc2VydGlvbihUJiYgaW5zZXJ0aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNlcnRpb25z
LmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oaW5zZXJ0aW9uKSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGluc2VydEluc3Qoc2l6ZV90IGluZGV4LCBJbnN0
JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVuZEluc2VydGlvbihJbnNlcnRpb24oaW5kZXgs
IHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1
bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBJ
bnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAg
ICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitwcml2YXRlOgorICAgIENvZGUmIG1fY29k
ZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zdDo6ZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChvcGNvZGUsICIgIiwgbGlz
dER1bXAoYXJncykpOworICAgIGlmIChvcmlnaW4pCisgICAgICAgIG91dC5wcmludCgiLCAiLCAq
b3JpZ2luKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0X2gKKyNkZWZpbmUgQWly
SW5zdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5j
bHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBSZWdpc3RlclNldDsKKworbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3Qg
R2VuZXJhdGlvbkNvbnRleHQ7CisKK3N0cnVjdCBJbnN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVm
IFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJbnN0KCkKKyAgICAgICAgOiBvcmlnaW4o
bnVsbHB0cikKKyAgICAgICAgLCBvcGNvZGUoTm9wKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
SW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAgICA6IG9yaWdpbihvcmln
aW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZh
bHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDog
YXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAg
ICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bj
b2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCisgICAgICAgIDog
YXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNv
ZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVl
KiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhXVEY6Om1vdmUo
YXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShv
cGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBh
bGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRo
aW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5
b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQorICAgIC8v
IHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBvbmx5IHdhbGtzIHRob3Nl
IFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBpdCBkb2Vzbid0IHRlbGwg
eW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQor
ICAgIHsKKyAgICAgICAgZm9yIChBcmcmIGFyZyA6IGFyZ3MpCisgICAgICAgICAgICBhcmcuZm9y
RWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAgfQorCisgICAgdHlwZWRlZiB2b2lkIEVhY2hBcmdD
YWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSk7CisgICAgCisgICAgLy8gQ2FsbHMg
dGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4gVGhpcyBmdW5jdGlvbiBpcyBhdXRv
LWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVu
Y3Rvcik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0bXAsIHJvbGUsIHR5cGUp
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JFYWNoQXJnKAorICAgICAg
ICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7Cisg
ICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlwZSwgZnVuY3Rvcik7CisgICAg
ICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGluZyBjYW4gYmUgZWl0aGVyIEFyZyBvciBU
bXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOworCisgICAgLy8gUmV0dXJucyB0
cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGEgU3BlY2lhbCouIFRoaXMgdW5sb2NrcyBzb21l
IGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAgYm9vbCBoYXNTcGVjaWFsKCkgY29uc3Q7CisKKyAg
ICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFsIHJlZ2lzdGVycyBjbG9iYmVyZWQgYnkgdGhpcyBv
cGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5jeSwKKyAgICAvLyBleHRyYUNsb2JiZXJl
ZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgY29u
c3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpOworCisgICAgLy8gVXNlIHRoaXMg
dG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4gVGhpcyBzaG91bGQgYmUgZG9uZSBq
dXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisgICAgLy8gdGhhdCBmb3IgZWZmaWNpZW5jeSwgcmVw
b3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgaWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1
ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmKTsKKwor
ICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gb25lIG9mIHRoZSB2YWxpZCBmb3JtcyByaWdo
dCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVf
Z2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNWYWxpZEZvcm0oKTsKKworICAgIC8vIEFzc3VtaW5n
IHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBmb3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBz
dGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisgICAgLy8gZm9ybXMgaWYgd2UgcHV0IGFuIEFk
ZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChvciBhIFN0YWNrU2xvdCBvciBDYWxsQXJnLCBvZiBj
b3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVuIGluZGV4PyBTcGlsbGluZyB1c2VzIHRoaXM6IGl0
IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvIGZpbmQgVG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7
CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlzIHRvIHNlZSBpZiBpdCBjYW4g
cmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBhbiBBcmc6OkFkZHIuIElmIGl0CisgICAgLy8gZmlu
ZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFyZydzIGZvckVhY2hUbXAgdG8g
ZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4KKyAgICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24g
aXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGFkbWl0
c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEdlbmVyYXRlIHNvbWUgY29kZSBm
b3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBpcywgbGlrZSwgbGl0ZXJhbGx5IG91ciBiYWNrZW5k
LiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRlcm1pbmFsLCBpdCByZXR1cm5zIHRoZSBqdW1wIHRo
YXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0aGUgInRoZW4iIGNhc2UsIHdpdGggdGhlICJlbHNl
IgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10aHJvdWdoLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8t
Z2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIEFyZ0xpc3QgYXJnczsKKyAgICBWYWx1
ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVlIHRoYXQgdGhpcyBvcmlnaW5hdGVkIGZyb20uCisg
ICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdElubGluZXNfaAorI2RlZmlu
ZSBBaXJJbnN0SW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
SW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lh
bC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IEZvckVhY2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPFRt
cD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9y
RWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAg
aW5zdC5mb3JFYWNoVG1wKGZ1bmN0b3IpOworICAgIH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBG
b3JFYWNoPEFyZz4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGlj
IHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1bmN0b3IpOworICAgIH0KK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBJbnN0Ojpmb3JFYWNoKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgRm9yRWFjaDxUaGluZz46OmZvckVhY2goKnRo
aXMsIGZ1bmN0b3IpOworfQorCitib29sIEluc3Q6Omhhc1NwZWNpYWwoKSBjb25zdAoreworICAg
IHJldHVybiBhcmdzLnNpemUoKSAmJiBhcmdzWzBdLmlzU3BlY2lhbCgpOworfQorCitjb25zdCBS
ZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sKKyAgICBBU1NFUlQoaGFz
U3BlY2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVk
UmVncygqdGhpcyk7Cit9CisKK3ZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsK
KyAgICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJl
Z2lzdGVycyk7Cit9CisKK2lubGluZSBib29sIGlzU2hpZnRWYWxpZChJbnN0JiBpbnN0KQorewor
I2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9PSBU
bXAoWDg2UmVnaXN0ZXJzOjplY3gpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW5zdCk7Cisg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30gICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZh
bHVlKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckxpdmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4
TWFwLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIFlvdSBjYW4gY29tcHV0ZSBsaXZlbmVzcyBv
dmVyIFRtcCdzIG9yIG92ZXIgQXJnJ3MuIElmIHlvdSBjb21wdXRlIG92ZXIgQXJnJ3MsIHlvdSBn
ZXQgYm90aAorLy8gc3RhY2sgbGl2ZW5lc3MgYW5kIHRtcCBsaXZlbmVzcy4KK3RlbXBsYXRlPHR5
cGVuYW1lIFRoaW5nPgorY2xhc3MgTGl2ZW5lc3MgeworcHVibGljOgorICAgIExpdmVuZXNzKENv
ZGUmIGNvZGUpCisgICAgeworICAgICAgICBtX2xpdmVBdEhlYWQucmVzaXplKGNvZGUuc2l6ZSgp
KTsKKyAgICAgICAgbV9saXZlQXRUYWlsLnJlc2l6ZShjb2RlLnNpemUoKSk7CisKKyAgICAgICAg
SW5kZXhTZXQ8QmFzaWNCbG9jaz4gc2VlbjsKKworICAgICAgICBib29sIGNoYW5nZWQgPSB0cnVl
OworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNl
OworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJs
b2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGUu
YXQoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgTG9jYWxDYWxjIGxvY2FsQ2FsYygqdGhp
cywgYmxvY2spOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IGluc3RJbmRleC0tOykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4
ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RU
aW1lID0gc2Vlbi5hZGQoYmxvY2spOworICAgICAgICAgICAgICAgIGlmICghZmlyc3RUaW1lICYm
IGxvY2FsQ2FsYy5saXZlKCkgPT0gbV9saXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAg
ICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3Nv
cnMoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdLmFk
ZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5saXZlKCkuYmVnaW4oKSwgbG9j
YWxDYWxjLmxpdmUoKS5lbmQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IG1fbGl2ZUF0SGVhZFtibG9ja10gPSBsb2NhbENhbGMudGFrZUxpdmUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRI
ZWFkKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2
ZUF0SGVhZFtibG9ja107CisgICAgfQorCisgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmVB
dFRhaWwoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9s
aXZlQXRUYWlsW2Jsb2NrXTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNhbGN1bGF0b3IgaGFzIHRv
IGJlIHJ1biBpbiByZXZlcnNlLgorICAgIGNsYXNzIExvY2FsQ2FsYyB7CisgICAgcHVibGljOgor
ICAgICAgICBMb2NhbENhbGMoTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykK
KyAgICAgICAgICAgIDogbV9saXZlKGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fbGl2ZTsgfQorICAgICAgICBIYXNoU2V0PFRoaW5nPiYmIHRha2VMaXZl
KCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fbGl2ZSk7IH0KKworICAgICAgICB2b2lkIGV4ZWN1dGUo
SW5zdCYgaW5zdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGRlZidz
LgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhp
c10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsK
KworICAgICAgICAgICAgLy8gTmV4dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAg
ICAgICAgIGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgICAgIGluc3QuZXh0
cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgW3RoaXNdIChS
ZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKFRoaW5nKFRt
cChyZWcpKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIHVzZSdzLgorICAg
ICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRo
aW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbGl2ZS5hZGQoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFzaFNldDxUaGluZz4gbV9saXZlOworICAgIH07
CisgICAgCitwcml2YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+
PiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+
IG1fbGl2ZUF0VGFpbDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJMaXZlbmVzc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9w
Y29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAKKyMgQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgU3lsbGFidXM6CisjCisjIFJvbGVzIGFuZCB0eXBlczoK
KyMgVTpHID0+IHVzZSBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBE
OkcgPT4gZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkcg
PT4gdXNlIGFuZCBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMg
VTpGID0+IHVzZSBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RiA9PiBkZWYgb2Yg
YSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpGID0+IHVzZSBhbmQgZGVmIG9mIGEgZmxv
YXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMKKyMgQXJndW1lbnQga2luZHM6CisjIFRtcCA9PiB0ZW1w
b3Jhcnkgb3IgcmVnaXN0ZXIKKyMgSW1tID0+IDMyLWJpdCBpbW1lZGlhdGUgaW50CisjIEltbTY0
ID0+IFRydXN0ZWRJbW02NAorIyBBZGRyID0+IGFkZHJlc3MgYXMgdGVtcG9yYXJ5L3JlZ2lzdGVy
K29mZnNldAorIyBJbmRleCA9PiBCYXNlSW5kZXggYWRkcmVzcworIyBBYnMgPT4gQWJzb2x1dGVB
ZGRyZXNzCisjCisjIFRoZSBwYXJzZXIgdmlld3MgdGhlc2UgdGhpbmdzIGFzIGtleXdvcmRzLCBh
bmQgdW5kZXJzdGFuZHMgdGhhdCB0aGV5IGZhbGwgaW50byB0d28gZGlzdGluY3QgY2xhc3Nlcwor
IyBvZiB0aGluZ3MuIFNvLCBhbHRob3VnaCB0aGlzIGZpbGUgdXNlcyBhIHBhcnRpY3VsYXIgaW5k
ZW50YXRpb24gc3R5bGUsIG5vbmUgb2YgdGhlIHdoaXRlc3BhY2Ugb3IKKyMgZXZlbiBuZXdsaW5l
cyBhcmUgbWVhbmluZ2Z1bCB0byB0aGUgcGFyc2VyLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHdy
aXRlOgorIworIyBGb280MiBVOkcsIFVEOkYgSW1tLCBUbXAgQWRkciwgVG1wCisjCisjIEFuZCB0
aGUgcGFyc2VyIHdvdWxkIGtub3cgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzOgorIworIyBGb280
MiBVOkcsIFVEOkYKKyMgICAgIEltbSwgVG1wCisjICAgICBBZGRyLCBUbXAKKyMKKyMgSS5lLiBh
IHR3by1mb3JtIGluc3RydWN0aW9uIHRoYXQgdXNlcyBhIEdQUiBvciBhbiBpbnQgaW1tZWRpYXRl
IGFuZCB1c2VzK2RlZnMgYSBmbG9hdCByZWdpc3Rlci4KKworIyBOb3RlIHRoYXQgdGhlIG9wY29k
ZXMgaGVyZSBoYXZlIGEgbGVhZGluZyBjYXBpdGFsIChBZGQzMikgYnV0IG11c3QgY29ycmVzcG9u
ZCB0byBNYWNyb0Fzc2VtYmxlcgorIyBBUEkgdGhhdCBoYXMgYSBsZWFkaW5nIGxvd2VyLWNhc2Ug
KGFkZDMyKS4KKworTm9wCisKK0FkZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1t
LCBBZGRyCisgICAgSW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBUbXAsIEFkZHIKKworQWRk
MzIgVTpHLCBVOkcsIEQ6RworICAgIEltbSwgVG1wLCBUbXAKKworQW5kMzIgVTpHLCBVRDpHCisg
ICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIFRtcCwgQWRkcgorICAgIEFkZHIsIFRtcAor
ICAgIEltbSwgQWRkcgorCitMc2hpZnQzMiBVOkcsIFVEOkcKKyAgICBUbXAqLCBUbXAKKyAgICBJ
bW0sIFRtcAorCitNdWwzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAor
CitNb3ZlIFU6RywgRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIEltbTY0LCBU
bXAKKyAgICBBZGRyLCBUbXAgYXMgbG9hZCAjIFRoaXMgbWVhbnMgdGhhdCAiTW92ZSBBZGRyLCBU
bXAiIGlzIGNvZGUtZ2VuZXJhdGVkIGFzICJsb2FkIiBub3QgIm1vdmUiLgorICAgIFRtcCwgQWRk
ciBhcyBzdG9yZQorCitNb3ZlRG91YmxlIFU6RiwgRDpGCisgICAgVG1wLCBUbXAKKyAgICBBZGRy
LCBUbXAgYXMgbG9hZERvdWJsZQorICAgIFRtcCwgQWRkciBhcyBzdG9yZURvdWJsZQorCitNb3Zl
NjRUb0RvdWJsZSBVOkcsIEQ6RgorICAgIFRtcCwgVG1wCisKK01vdmVEb3VibGVUbzY0IFU6Riwg
RDpHCisgICAgVG1wLCBUbXAKKworQnJhbmNoQWRkMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAor
ICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25k
LCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBU
bXAKKworQnJhbmNoTXVsMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRt
cCwgVG1wCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaFN1YjMyIFU6RywgVTpHLCBV
RDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEltbSwgVG1w
CisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisgICAgUmVz
Q29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE5lZzMyIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVz
Q29uZCwgVG1wCisKK0p1bXAgL2JyYW5jaAorCitSZXQgL3Rlcm1pbmFsCisKK0JyZWFrcG9pbnQg
L3Rlcm1pbmFsCisKKyMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2aW9yLiBBIFBhdGNoJ3Mg
YmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3BlY2lhbCBvcGVyYW5kLAor
IyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgorc3BlY2lhbCBQYXRjaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFpclBoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJD
b2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK1BoYXNl
U2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1f
Y29kZShjb2RlKQorICAgICwgbV9uYW1lKG5hbWUpCit7CisgICAgaWYgKHNob3VsZER1bXBJUkF0
RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9yZSAiLCBuYW1lLCAiOlxu
Iik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNhdmVJ
UkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhjb2RlKTsK
K30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0
ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgdmFsaWRhdGUobV9jb2RlLCBtX25hbWUsIG1fZHVt
cEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyUGhhc2VTY29wZV9oCisjZGVmaW5lIEFpclBoYXNlU2NvcGVfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90
ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBDb2RlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKENvZGUm
LCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFs
aWRhdGlvbgorCitwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBt
X25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UmVnaXN0ZXJQcmlvcml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJp
b3JpdHkuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Nv
bnN0IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMg
VmVjdG9yPEdQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsK
KyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAg
ICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxHUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdpc3Rl
clNldCBhbGwgPSBSZWdpc3RlclNldDo6YWxsR1BScygpOworICAgICAgICAgICAgYWxsLmV4Y2x1
ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgYWxsLmV4Y2x1
ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAg
ICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3Rl
cnMoKTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVn
IHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAg
WyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChy
ZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9
CisKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBz
dGF0aWMgVmVjdG9yPEZQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcg
b25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10gewor
ICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7CisgICAgICAgICAgICBS
ZWdpc3RlclNldCBhbGwgPSBSZWdpc3RlclNldDo6YWxsRlBScygpOworICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcp
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAo
UmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZS5nZXQocmVnKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5mcHIoKSk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQorCitj
b25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUgdHlwZSkKK3sK
KyAgICBzdGF0aWMgVmVjdG9yPFJlZz4qIHJlc3VsdFtBcmc6Om51bVR5cGVzXTsKKyAgICBzdGF0
aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25j
ZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdID0gbmV3IFZlY3Rv
cjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBncHJzSW5Qcmlvcml0eU9y
ZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdLT5hcHBlbmQoUmVnKHJlZykp
OworICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAg
ICAgICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAg
ICAgICAgICAgcmVzdWx0W0FyZzo6RlBdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICB9KTsK
KyAgICByZXR1cm4gKnJlc3VsdFt0eXBlXTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorI2Rl
ZmluZSBBaXJSZWdpc3RlclByaW9yaXR5X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5o
IgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3Jp
dHlPcmRlcigpOworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKTsK
KwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRl
cjsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPiB7
CisgICAgY29uc3QgVmVjdG9yPEdQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGdw
cnNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0lu
UHJpb3JpdHlPcmRlcjxGUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEZQUlJlZz4mIGluUHJp
b3JpdHlPcmRlcigpIHsgcmV0dXJuIGZwcnNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgQmFuaz4KK2NvbnN0IFZlY3Rvcjx0eXBlbmFtZSBCYW5rOjpSZWdpc3Rl
clR5cGU+JiByZWdzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICByZXR1cm4gUmVnaXN0ZXJzSW5Q
cmlvcml0eU9yZGVyPEJhbms+OjppblByaW9yaXR5T3JkZXIoKTsKK30KKworY29uc3QgVmVjdG9y
PFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitTcGVjaWFsOjpTcGVjaWFsKCkKKyAg
ICA6IG1faW5kZXgoVUlOVF9NQVgpCit7Cit9CisKK1NwZWNpYWw6On5TcGVjaWFsKCkKK3sKK30K
KworQ1N0cmluZyBTcGVjaWFsOjpuYW1lKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQcmludFN0cmVh
bSBvdXQ7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOwor
fQorCit2b2lkIFNwZWNpYWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoZHVtcFByZWZpeCk7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICBpZiAobV9pbmRl
eCAhPSBVSU5UX01BWCkKKyAgICAgICAgb3V0LnByaW50KG1faW5kZXgpOworfQorCit2b2lkIFNw
ZWNpYWw6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCp0aGlzLCAiOiAiKTsKKyAgICBkZWVwRHVtcEltcGwob3V0KTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJTcGVjaWFsX2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1Njb3BlZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJh
dGlvbkNvbnRleHQ7CisKK2NsYXNzIFNwZWNpYWwgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNwZWNpYWwpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdGV4cHIgY29uc3QgY2hhciogZHVtcFByZWZpeCA9ICImIjsKKyAgICAKKyAgICBT
cGVjaWFsKCk7CisgICAgdmlydHVhbCB+U3BlY2lhbCgpOworCisgICAgQ1N0cmluZyBuYW1lKCkg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVk
TGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlz
VmFsaWQoSW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVu
c2lnbmVkIGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMgY2FsbGVkIG9uIGZvciBl
YWNoIEluc3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHdh
eSB0bworICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRzIHVzZWQgZnJvbSBqdXN0
IG9uZSBJbnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUuIFNvLAorICAgIC8vIGlm
IHlvdSB3YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRvIGdlbmVyYXRlKCksIHRo
ZW4geW91IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkgR2VuZXJhdGUgQWlyIHRo
YXQgc3RhcnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRjaCBJbnN0LCBhbmQgdGhl
biBtZXJnZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlzIGlzIHByb2JhYmx5IG5v
dCBncmVhdCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlIHRoYXQKKyAgICAv
LyAgICBBaXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3VjaCBkdXBsaWNhdGlvbiBk
aWRuJ3QgY2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAgICAvLyAgICByZWdpc3Rl
ciBhc3NpZ25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUgU3BlY2lhbCBtYWludGFp
biBhIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBh
bmFseXNpcworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNhbGwgaXMgcGVyZm9ybWVk
IGp1c3QgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMgbm8gd2F5CisgICAgLy8g
ICAgZm9yIHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5zdHMgdG8gYmUgcmVhbGxv
Y2F0ZWQuIFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAgICBjb25zdWx0IHRoZSBI
YXNoTWFwLgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291bGQgdXNlICgxKSBhbmQg
ZmlyZSB1cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxscy4KKyAgICAvLworICAg
IC8vIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIHJlcG9ydFVzZWRSZWdp
c3RlcnMoKSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAvLyBhcyBnZW5lcmF0
ZSgpLiBJZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291bGQganVzdCBoYXZlIGVh
Y2ggU3BlY2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVjdG9yIG9mIFJlZ2lzdGVy
U2V0J3MgYW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUgcmlnaHQgb3JkZXIgaW4K
KyAgICAvLyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZmZXJlbmNlIGlzIHVubGlr
ZWx5IHRvIGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAgIC8vIHBlcmZvcm1hbmNl
IG9mIHRoZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8vIEN1cnJlbnRseSwgd2Ug
ZG8gKDEpIGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydFVzZWRSZWdp
c3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAgIAorICAgIHZpcnR1YWwg
Q0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0
aW9uQ29udGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJh
Q2xvYmJlcmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBjb25zdCBjaGFyKiBtX25h
bWU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERlZXBTcGVjaWFsRHVtcCB7
CitwdWJsaWM6CisgICAgRGVlcFNwZWNpYWxEdW1wKGNvbnN0IFNwZWNpYWwqIHNwZWNpYWwpCisg
ICAgICAgIDogbV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3BlY2lhbCkK
KyAgICAgICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29u
c3QgU3BlY2lhbCogbV9zcGVjaWFsOworfTsKKworaW5saW5lIERlZXBTcGVjaWFsRHVtcCBkZWVw
RHVtcChjb25zdCBTcGVjaWFsKiBzcGVjaWFsKQoreworICAgIHJldHVybiBEZWVwU3BlY2lhbER1
bXAoc3BlY2lhbCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGVjaWFsX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bp
bGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNp
bmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5o
IgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQor
eworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxFdmVyeXRoaW5nIik7CisK
KyAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVy
eSBwb2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBW
ZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBMaXZl
bmVzczxUbXA+IGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7CisgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5l
c3MsIGJsb2NrKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5z
aXplKCkgKyAxKTsKKworICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2ln
bmVkIGluZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0ID0gdXNlZFJlZ2lzdGVy
c1tibG9ja11baW5kZXhdOworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbG9jYWxDYWxjLmxp
dmUoKSkgeworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgc2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisg
ICAgICAgIHNldFVzZWRSZWdpc3RlcnMoYmxvY2stPnNpemUoKSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykg
eworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOwor
ICAgICAgICAgICAgc2V0VXNlZFJlZ2lzdGVycyhpbnN0SW5kZXgpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KKyAgICBWZWN0
b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6Om51bVR5cGVzXTsKKyAgICBmb3IgKHVu
c2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsrdHlwZUlu
ZGV4KSB7CisgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0YWNr
U2xvdHNbdHlwZUluZGV4XTsKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxB
cmc6OlR5cGU+KHR5cGVJbmRleCk7CisgICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUubnVt
VG1wcyh0eXBlKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51bVRt
cHModHlwZSk7IHRtcEluZGV4LS07KQorICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0g
PSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgIH0K
KworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAw
OyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAg
UmVnaXN0ZXJTZXQmIHNldEJlZm9yZSA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleF07
CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJzW2Jsb2Nr
XVtpbnN0SW5kZXggKyAxXTsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5z
dEluZGV4KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBb
Jl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxsU3Rh
Y2tTbG90c1t0eXBlXVt0bXAudG1wSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIEFyZyBh
cmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTmVl
ZCB0byBmaWd1cmUgb3V0IGEgcmVnaXN0ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBkZXBlbmRz
IG9uIHRoZSByb2xlLgorICAgICAgICAgICAgICAgICAgICBSZWcgY2hvc2VuUmVnOworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OlVzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblBy
aW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNl
dEJlZm9yZS5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRC
ZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJl
ZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpE
ZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0
eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRBZnRl
ci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5z
ZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVn
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZURlZjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3Jk
ZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5n
ZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaG9zZW5SZWcpOworCisgICAgICAg
ICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAg
IE9wY29kZSBtb3ZlID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIGFy
Zyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0
aGluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BpbGxF
dmVyeXRoaW5nX2gKKyNkZWZpbmUgQWlyU3BpbGxFdmVyeXRoaW5nX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpcyBhIHBoYXNlIGZvciB0ZXN0aW5nLiBJdCBiZWhh
dmVzIGxpa2UgYSByZWdpc3RlciBhbGxvY2F0b3IgaW4gdGhlIHNlbnNlIHRoYXQgaXQKKy8vIGVs
aW1pbmF0ZXMgdGVtcG9yYXJpZXMgZnJvbSB0aGUgcHJvZ3JhbS4gSXQgYWNjb21wbGlzaGVzIHRo
aXMgYnkgYWx3YXlzIHNwaWxsaW5nIGFsbAorLy8gdGVtcG9yYXJpZXMuIFRoZSByZXN1bHRpbmcg
Y29kZSBpcyBnb2luZyB0byBiZSB2ZXJ5IGluZWZmaWNpZW50LiBUaGlzIHBoYXNlIGlzIGdyZWF0
IGlmIHlvdQorLy8gdGhpbmsgdGhhdCB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgcmVnaXN0ZXIgYWxs
b2NhdG9yLiBZb3UgY2FuIGNvbmZpcm0gdGhpcyBieSBydW5uaW5nIHRoaXMKKy8vIHBoYXNlIGlu
c3RlYWQgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KKy8vCisvLyBOb3RlIHRoYXQgZXZlbiB0
aG91Z2ggdGhpcyBwaGFzZSBkb2VzIHRoZSBjaGVhcGVzdCB0aGluZyBwb3NzaWJsZSwgaXQncyBu
b3QgZXZlbiB3cml0dGVuIGluIGEKKy8vIHBhcnRpY3VsYXJseSBlZmZpY2llbnQgd2F5LiBTbywg
ZG9uJ3QgZ2V0IGFueSBpZGVhcyBhYm91dCB1c2luZyB0aGlzIHBoYXNlIHRvIHJlZHVjZSBjb21w
aWxlcgorLy8gbGF0ZW5jeS4gSWYgeW91IHdhbnRlZCB0byBkbyB0aGF0LCB5b3Ugc2hvdWxkIGNv
bWUgdXAgd2l0aCBhIGNsZXZlciBhbGdvcml0aG0gaW5zdGVhZCBvZiB1c2luZworLy8gdGhpcyBz
aWxseSB0aGluZy4KKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYpOworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyU3BpbGxFdmVyeXRoaW5nX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBTdGFja1Nsb3Q6
OnNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKK3sKKyAgICBtX29mZnNldEZyb21GUCA9
IHZhbHVlOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBtX3ZhbHVlLT5tX29mZnNldEZyb21G
UCA9IHZhbHVlOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgic3RhY2siLCBtX2luZGV4KTsKK30KKwordm9pZCBTdGFj
a1Nsb3Q6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIG9mZnNldEZyb21GUCA9ICIsIG1fb2Zmc2V0
RnJvbUZQLCAiLCBraW5kID0gIiwgbV9raW5kKTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAg
b3V0LnByaW50KCIsIHZhbHVlID0gIiwgKm1fdmFsdWUpOworfQorCitTdGFja1Nsb3Q6OlN0YWNr
U2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQga2lu
ZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorICAgIDogbV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgLCBtX29mZnNldEZyb21GUCh2YWx1ZS0+b2Zmc2V0RnJv
bUZQKCkpCisgICAgLCBtX2tpbmQoa2luZCkKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7CisgICAg
QVNTRVJUKGJ5dGVTaXplKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJTdGFja1Nsb3RfaAorI2RlZmluZSBBaXJTdGFja1Nsb3RfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgPHd0Zi9Ob25D
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBT
dGFja1Nsb3RWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFN0YWNrU2xvdCB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhY2tTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBt
X2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0K
KworICAgIHVuc2lnbmVkIGFsaWdubWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYnl0
ZVNpemUoKSA8PSAxKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChieXRlU2l6
ZSgpIDw9IDIpCisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkg
PD0gNCkKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICByZXR1cm4gODsKKyAgICB9CisK
KyAgICBTdGFja1Nsb3RWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisK
KyAgICAvLyBaZXJvIG1lYW5zIHRoYXQgaXQncyBub3QgeWV0IGFzc2lnbmVkLgorICAgIGludHB0
cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAg
ICAvLyBUaGlzIHNob3VsZCB1c3VhbGx5IGp1c3QgYmUgY2FsbGVkIGZyb20gcGhhc2VzIHRoYXQg
ZG8gc3RhY2sgYWxsb2NhdGlvbi4gQnV0IHlvdSBjYW4KKyAgICAvLyB0b3RhbGx5IGZvcmNlIGEg
c3RhY2sgc2xvdCB0byBsYW5kIGF0IHNvbWUgb2Zmc2V0LgorICAgIHZvaWQgc2V0T2Zmc2V0RnJv
bUZQKGludHB0cl90KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAg
IHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgQ29kZTsKKworICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWdu
ZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKik7CisgICAgCisgICAgdW5z
aWduZWQgbV9ieXRlU2l6ZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIGludHB0cl90IG1f
b2Zmc2V0RnJvbUZQOworICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOworICAgIFN0YWNrU2xvdFZh
bHVlKiBtX3ZhbHVlOworfTsKKworY2xhc3MgRGVlcFN0YWNrU2xvdER1bXAgeworcHVibGljOgor
ICAgIERlZXBTdGFja1Nsb3REdW1wKGNvbnN0IFN0YWNrU2xvdCogc2xvdCkKKyAgICAgICAgOiBt
X3Nsb3Qoc2xvdCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zbG90KQorICAgICAgICAgICAgbV9zbG90
LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxu
dWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBTdGFja1Nsb3QqIG1fc2xvdDsK
K307CisKK2lubGluZSBEZWVwU3RhY2tTbG90RHVtcCBkZWVwRHVtcChjb25zdCBTdGFja1Nsb3Qq
IHNsb3QpCit7CisgICAgcmV0dXJuIERlZXBTdGFja1Nsb3REdW1wKHNsb3QpOworfQorCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQWlyU3RhY2tTbG90X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBUbXA6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91
dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNS
ZWcoKSkgeworICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgaWYgKGlzR1AoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0bXAiLCBncFRtcElu
ZGV4KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCIlZnRtcCIs
IGZwVG1wSW5kZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wX2gKKyNkZWZpbmUg
QWlyVG1wX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisj
aW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgQXJnOworCisvLyBBIFRtcCBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIGEgcmVnaXN0
ZXIuIEl0IGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIGFueSBHUFIgb3IgRlBSLiBJdCBjYW4gYWxz
bworLy8gYmUgdXNlZCB0byByZWZlciB0byBhbiB1bmFsbG9jYXRlZCByZWdpc3RlciAoaS5lLiBh
IHRlbXBvcmFyeSkuIExpa2UgbWFueSBBaXIgY2xhc3Nlcywgd2UgdXNlCisvLyBkZWxpYmVyYXRl
bHkgdGVyc2UgbmFtaW5nIHNpbmNlIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhpcyBuYW1lIGEgbG90
LgorCitjbGFzcyBUbXAgeworcHVibGljOgorICAgIFRtcCgpCisgICAgICAgIDogbV92YWx1ZSgw
KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUbXAoUmVnIHJlZykKKyAgICB7CisgICAg
ICAgIGlmIChyZWcpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlID0gZW5jb2RlR1BSKHJlZy5ncHIoKSk7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUZQUihyZWcuZnByKCkpOworICAgICAgICB9
IGVsc2UKKyAgICAgICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0KKworICAgIGV4cGxpY2l0IFRt
cChjb25zdCBBcmcmKTsKKworICAgIHN0YXRpYyBUbXAgZ3BUbXBGb3JJbmRleCh1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVl
ID0gZW5jb2RlR1BUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBUbXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAg
ICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5k
ZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKworICAgIGJvb2wgaXNHUCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AobV92YWx1ZSk7CisgICAg
fQorCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29k
ZWRGUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0VuY29kZWRHUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBp
c0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlBSKG1fdmFsdWUp
OworICAgIH0KKworICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzR1BSKCkgfHwgaXNGUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgRlBS
UmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBSKG1fdmFsdWUp
OworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1Ao
KSkKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAgcmV0dXJuIGZwcigpOworICAg
IH0KKworICAgIGJvb2wgaGFzVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFpc1JlZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVu
c2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQ
VG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBJbmRleCgp
OworICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIGJvb2wgaXNBbGl2
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0OworCisgICAgVG1wKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAg
OiBtX3ZhbHVlKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgeworICAgIH0K
KworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICp0aGlzID09IFRtcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAg
fQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RG
OjpJbnRIYXNoPGludD46Omhhc2gobV92YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAg
ICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0
dXJuIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQKHVuc2lnbmVk
IGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xIC0gaW5kZXg7CisgICAgfQorCisgICAg
c3RhdGljIGludCBlbmNvZGVHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIHJldHVybiBl
bmNvZGVHUChncHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgaW50IGVuY29kZUZQUihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGVuY29kZUZQKGZwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3Rlcigp
KSArIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQVG1wKHVuc2ln
bmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQUihNYWNyb0Fzc2VtYmxl
cjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0gaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGJv
b2wgaXNFbmNvZGVkR1AoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID4g
MDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUChpbnQgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gdmFsdWUgPCAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlz
RW5jb2RlZEdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1Ao
dmFsdWUpICYmIHZhbHVlIDw9IGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVy
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQUihpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmIHZhbHVlID49IGVuY29k
ZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNFbmNvZGVkR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzRW5jb2RlZEdQKHZhbHVlKSAmJiAhaXNFbmNvZGVkR1BSKHZhbHVlKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmICFpc0VuY29kZWRGUFIodmFsdWUpOworICAgIH0K
KworICAgIHN0YXRpYyBHUFJSZWcgZGVjb2RlR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc0VuY29kZWRHUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PEdQUlJlZz4oCisgICAgICAgICAgICAodmFsdWUgLSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6
OmZpcnN0UmVnaXN0ZXIoKSkpICsgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIEZQUlJlZyBkZWNvZGVGUFIoaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8RlBSUmVnPigKKyAgICAgICAgICAgIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6OmZp
cnN0RlBSZWdpc3RlcigpKSAtIHZhbHVlKSArCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
Zmlyc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVH
UFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BUbXAodmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC0gKGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6
bGFzdFJlZ2lzdGVyKCkpICsgMSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29k
ZUZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFRtcCh2
YWx1ZSkpOworICAgICAgICByZXR1cm4gKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQ
UmVnaXN0ZXIoKSkgLSAxKSAtIHZhbHVlOworICAgIH0KKworICAgIC8vIDA6IGVtcHR5IFRtcAor
ICAgIC8vIHBvc2l0aXZlOiBHUFJzIGFuZCB0aGVuIEdQIHRlbXBzLgorICAgIC8vIG5lZ2F0aXZl
OiBGUFJzIGFuZCB0aGVuIEZQIHRlbXBzLgorICAgIGludCBtX3ZhbHVlOworfTsKKworc3RydWN0
IFRtcEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFRtcCYga2V5KSB7IHJl
dHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVG1wJiBhLCBj
b25zdCBUbXAmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpT
Qzo6QjM6OkFpcjo6VG1wPiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpBaXI6OlRtcEhhc2ggSGFz
aDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxh
dGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OlRtcD4gOiBTaW1wbGVDbGFzc0hh
c2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpUbXA+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVG1wX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wSW5saW5lc19oCisjZGVmaW5lIEFpclRt
cElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgor
I2luY2x1ZGUgIkFpclRtcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK2lubGluZSBUbXA6OlRtcChjb25zdCBBcmcmIGFyZykKK3sKKyAgICAq
dGhpcyA9IGFyZy50bXAoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcElubGluZXNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJBaXJWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFZhbGlk
YXRlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVyKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIHdo
ZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAg
ICAgICwgbV93aGVuKHdoZW4pCisgICAgICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisg
ICAgeworICAgIH0KKworI2RlZmluZSBWQUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBmYWlsKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9G
VU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAo
ZmFsc2UpCisgICAgCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxTdGFj
a1Nsb3QqPiB2YWxpZFNsb3RzOworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiB2YWxpZEJs
b2NrczsKKyAgICAgICAgSGFzaFNldDxTcGVjaWFsKj4gdmFsaWRTcGVjaWFsczsKKworICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQorICAgICAgICAgICAgdmFsaWRCbG9j
a3MuYWRkKGJsb2NrKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBtX2NvZGUuc3Rh
Y2tTbG90cygpKQorICAgICAgICAgICAgdmFsaWRTbG90cy5hZGQoc2xvdCk7CisgICAgICAgIGZv
ciAoU3BlY2lhbCogc3BlY2lhbCA6IG1fY29kZS5zcGVjaWFscygpKQorICAgICAgICAgICAgdmFs
aWRTcGVjaWFscy5hZGQoc3BlY2lhbCk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBp
bnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgICAg
IEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3Ig
KEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJn
LmtpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAg
ICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNsb3RzLmNvbnRhaW5zKGFyZy5zdGFja1Ns
b3QoKSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU3BlY2lhbHMuY29udGFpbnMoYXJn
LnNwZWNpYWwoKSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaW5zdC5pc1ZhbGlkRm9ybSgpLCAo
IkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgaWYgKGluc3RJ
bmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUo
aXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsK
KyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCFpc1Rl
cm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9j
ay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRCbG9j
a3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJJbiAiLCAqYmxvY2spKTsKKyAgICAgICAgfQorICAg
IH0KKworcHJpdmF0ZToKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZmFpbCgKKyAg
ICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBm
dW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2Up
CisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAg
ICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkFJ
UiBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwg
Y29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlm
IChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hl
biwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBp
ZiAobV9kdW1wQmVmb3JlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV93aGVu
LCAiOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0K
KyAgICAgICAgZGF0YUxvZygiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFM
b2cobV9jb2RlKTsKKworICAgICAgICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAg
V1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVuY3Rpb24s
IGNvbmRpdGlvbik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAorICAgIENvZGUmIG1f
Y29kZTsKKyAgICBjb25zdCBjaGFyKiBtX3doZW47CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVm
b3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoQ29k
ZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAg
ICBWYWxpZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIHdoZW4sIGR1bXBCZWZvcmUpOworICAgIHZhbGlk
YXRlci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVmFs
aWRhdGVfaAorI2RlZmluZSBBaXJWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENv
ZGU7CisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYsIGNvbnN0IGNoYXIqIHdoZW4gPSBudWxscHRyLCBj
b25zdCBjaGFyKiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJW
YWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dl
bmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NTgg
QEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFy
ZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisj
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29kZQorICAgIGF0dHJfcmVh
ZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2FkcworICAgIGF0dHJfYWNjZXNzb3IgOmtpbmQK
KworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHNwZWNpYWwpCisgICAgICAgIEBuYW1lID0gbmFt
ZQorICAgICAgICBAc3BlY2lhbCA9IHNwZWNpYWwKKyAgICAgICAgQGtpbmQgPSA6aW5zdAorICAg
ICAgICB1bmxlc3Mgc3BlY2lhbAorICAgICAgICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAg
IGVuZAorICAgIGVuZAorCisgICAgZGVmIG1hc21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNh
c2UgKyBuYW1lWzEuLi0xXQorICAgIGVuZAorZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVh
ZGVyIDpyb2xlLCA6dHlwZQorCisgICAgZGVmIGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAg
ICAgQHJvbGUgPSByb2xlCisgICAgICAgIEB0eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisKK2Ns
YXNzIE92ZXJsb2FkCisgICAgYXR0cl9yZWFkZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBk
ZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICBAc2lnbmF0dXJlID0gc2ln
bmF0dXJlCisgICAgICAgIEBmb3JtcyA9IGZvcm1zCisgICAgZW5kCitlbmQKKworY2xhc3MgS2lu
ZAorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisg
ICAgZGVmIGluaXRpYWxpemUobmFtZSkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBz
cGVjaWFsID0gZmFsc2UKKyAgICBlbmQKKworICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYg
b3RoZXIuaXNfYT8gU3RyaW5nCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBl
bHNlCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhl
ci5zcGVjaWFsCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMo
a2luZCkKKyAgICAgICAgaWYga2luZCA9PSAiQWRkciIKKyAgICAgICAgICAgIFsiQWRkciIsICJT
dGFjayIsICJDYWxsQXJnIl0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW2tpbmRdCisgICAg
ICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGFyZ0tpbmRzCisgICAgICAgIEtpbmQuYXJnS2lu
ZHMoa2luZCkKKyAgICBlbmQKK2VuZAorCitjbGFzcyBGb3JtCisgICAgYXR0cl9yZWFkZXIgOmtp
bmRzLCA6YWx0TmFtZQorCisgICAgZGVmIGluaXRpYWxpemUoa2luZHMsIGFsdE5hbWUpCisgICAg
ICAgIEBraW5kcyA9IGtpbmRzCisgICAgICAgIEBhbHROYW1lID0gYWx0TmFtZQorICAgIGVuZAor
ZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1i
ZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAg
ICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVy
CisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGlu
ZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6
b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcp
CisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZworICAg
IGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9r
ZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisg
ICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisgICAg
CisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0i
CisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlm
IGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30i
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTog
I3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChzdHIs
IGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJl
c3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5Pwor
ICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAgICAg
ICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAgIyBu
ZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVu
IC9cQShbYS16QS1aMC05X10rKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3Jp
Z2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0
XHJdKykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9c
QVssOipcL10vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmls
ZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2Ug
IkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlcikudG9fc30s
IHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9IgorICAgICAgICBlbmQK
KyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJlc3VsdAorZW5kCisK
K2RlZiBpc1VEKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVSl8KEQpfChVRCkpXFovCitlbmQK
KworZGVmIGlzR0YodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChHKXwoRikpXFovCitlbmQKKwor
ZGVmIGlzS2luZCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEltbTY0KXwo
QWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpKVxaLworZW5kCisKK2RlZiBpc0tleXdv
cmQodG9rZW4pCisgICAgaXNVRCh0b2tlbikgb3IgaXNHRih0b2tlbikgb3IgaXNLaW5kKHRva2Vu
KSBvcgorICAgICAgICB0b2tlbiA9PSAic3BlY2lhbCIgb3IgdG9rZW4gPT0gImFzIgorZW5kCisK
K2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKFthLXpBLVowLTlfXSsp
XFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRl
ZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEs
IGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisg
ICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAg
IEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAg
ICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgICAg
IHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVu
dFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYg
Y29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIp
IHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAg
ZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmll
cihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAg
ICBkZWYgY29uc3VtZVJvbGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAg
IHBhcnNlRXJyb3IoIkV4cGVjdGVkIHJvbGUgKFUsIEQsIG9yIFVEKSIpIHVubGVzcyBpc1VEKHJl
c3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRl
ZiBjb25zdW1lVHlwZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFy
c2VFcnJvcigiRXhwZWN0ZWQgdHlwZSAoRyBvciBGKSIpIHVubGVzcyBpc0dGKHJlc3VsdCkKKyAg
ICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1l
S2luZAorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigi
RXhwZWN0ZWQga2luZCAoSW1tLCBJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgb3Ig
UmVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAg
ICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICByZXN1bHQgPSB7fQor
ICAgICAgICAKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0
b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgIGlmIHRva2VuID09ICJzcGVjaWFsIgorICAgICAg
ICAgICAgICAgIGNvbnN1bWUoInNwZWNpYWwiKQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUg
PSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90
IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKworICAg
ICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwg
dHJ1ZSkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29u
c3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQor
ICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAg
ICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUi
KSBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgb3Bjb2RlID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCBmYWxzZSkKKyAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gb3Bjb2RlCisgICAgICAgICAgICAgICAgZW5k
CisKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBbXQorICAgICAgICAgICAgICAgIGZvcm1z
ID0gW10KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBpc1VEKHRva2VuKQor
ICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUg
PSBjb25zdW1lUm9sZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiOiIpCisgICAg
ICAgICAgICAgICAgICAgICAgICB0eXBlID0gY29uc3VtZVR5cGUKKyAgICAgICAgICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIDw8IEFyZy5uZXcocm9s
ZSwgdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmQKKwor
ICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICIvIgorICAgICAgICAgICAgICAgICAgICBjb25z
dW1lKCIvIikKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB0b2tlbi5zdHJpbmcKKyAgICAgICAg
ICAgICAgICAgICAgd2hlbiAiYnJhbmNoIgorICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2Rl
LmtpbmQgPSA6YnJhbmNoCisgICAgICAgICAgICAgICAgICAgIHdoZW4gInRlcm1pbmFsIgorICAg
ICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLmtpbmQgPSA6dGVybWluYWwKKyAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQmFkIC8g
ZGlyZWN0aXZlIikKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAg
IGFkdmFuY2UKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIGlzS2lu
ZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBraW5kcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0gbmlsCisg
ICAgICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBraW5kcyA8PCBLaW5kLm5ldyhjb25zdW1lS2luZCkKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIHRva2VuID09ICIqIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJDYW4gb25seSBhcHBseSAqIHRvIFRtcCIpIHVubGVzcyBraW5kc1stMV0ubmFt
ZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kc1stMV0uc3Bl
Y2lhbCA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiKiIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICJhcyIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKCJhcyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9
IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgd3JvbmcgbnVtYmVyIG9mIGFy
Z3VtZW50cyBmb3Igb3ZlcmxvYWQiKSB1bmxlc3Mga2luZHMubGVuZ3RoID09IHNpZ25hdHVyZS5s
ZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzLmVhY2hfd2l0aF9pbmRleCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJJbW0iIG9yIGtpbmQubmFtZSA9PSAiSW1t
NjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0u
cm9sZSAhPSAiVSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tdXNlIGFyZ3VtZW50IikKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0udHlwZSAhPSAiRyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3Ig
YSBub24tZ2VuZXJhbC1wdXJwb3NlIGFyZ3VtZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtcyA8PCBGb3JtLm5l
dyhraW5kcywgYWx0TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyBp
c0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmQK
KworICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZS5sZW5ndGggPT0gMAorICAgICAgICAgICAg
ICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAg
ICAgZm9ybXMgPDwgRm9ybS5uZXcoW10sIG5pbCkKKyAgICAgICAgICAgICAgICBlbmQKKworICAg
ICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMgPDwgT3ZlcmxvYWQubmV3KHNpZ25hdHVyZSwg
Zm9ybXMpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdAorICAg
IGVuZAorZW5kCisKKyRmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJ
Tzo6cmVhZCgkZmlsZU5hbWUpLCAkZmlsZU5hbWUpCiskb3Bjb2RlcyA9IHBhcnNlci5wYXJzZQor
CitkZWYgd3JpdGVIKGZpbGVuYW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tmaWxlbmFtZX0uaCIs
ICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIv
LyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBk
byBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQWlyI3tm
aWxlbmFtZX1faCIKKyAgICAgICAgb3V0cC5wdXRzICIjZGVmaW5lIEFpciN7ZmlsZW5hbWV9X2gi
CisKKyAgICAgICAgeWllbGQgb3V0cAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjZW5k
aWYgLy8gQWlyI3tmaWxlbmFtZX1faCIKKyAgICB9CitlbmQKKworZGVmIHdyaXRlQ1BQKGZpbGVu
YW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tmaWxlbmFtZX0uY3BwIiwgInciKSB7CisgICAgICAg
IHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBv
cGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKyAg
ICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJjb25maWcuaFwiIgorICAgICAg
ICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlyI3tmaWxlbmFtZX0uaFwiIgorCisgICAgICAgIHlp
ZWxkIG91dHAKKyAgICB9CitlbmQKKword3JpdGVIKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwK
KyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsiCisgICAgb3V0cC5wdXRzICJlbnVtIE9wY29kZSA6IGludDE2X3QgeyIKKyAgICAkb3Bj
b2Rlcy5rZXlzLnNvcnQuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5w
dXRzICIgICAgI3tvcGNvZGV9LCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9OyIKKworICAgIG91
dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtl
eXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
ciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMg
ImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8v
IG5hbWVzcGFjZSBXVEYiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwK
KyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRw
LnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1
dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAg
ICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIK
KyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisg
ICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMg
IiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIK
K30KKworIyBGcm9tIGhlcmUgb24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVu
dGVkIGNvZGUsIHNpbmNlIHdlJ3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hl
ci4KKworZGVmIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29s
dW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGgg
PT0gMAorCisgICAgaWYgZmlsdGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKwor
ICAgIGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlz
ZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisg
ICAgICAgIHJldHVybgorICAgIGVuZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMu
ZWFjaCB7CisgICAgICAgIHwgZm9ybSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVt
bkluZGV4XS5uYW1lCisgICAgICAgIGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBz
W2tpbmRdIDw8IGZvcm0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0g
W2Zvcm1dCisgICAgICAgIGVuZAorICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBn
cm91cHMubGVuZ3RoID09IDEKKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMs
IGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAg
ICByZXR1cm4KKyAgICBlbmQKKworICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRl
cltjb2x1bW5JbmRleF19KSB7IgorICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtl
eSwgdmFsdWUgfAorICAgICAgICBvdXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5
ID09ICJJbW02NCIKKyAgICAgICAgS2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAg
ICAgfCBhcmdLaW5kIHwKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2lu
ZH06IgorICAgICAgICB9CisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBj
b2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZB
TFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6
IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYg
bWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKCN7aW5zdH0tPm9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAg
ICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIK
KyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmls
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2Rl
Lm92ZXJsb2Fkcy5zaXplICE9IDEpIG9yIHNwZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0
cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPmFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAg
ICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Zlcmxv
YWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAg
ICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0
OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAu
cHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5z
dE92ZXJsb2FkRm9ybShvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChv
dXRwLCBzcGVlZCwgaW5zdCkgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAg
ICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAg
ICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sj
e2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVy
ID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAg
ICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2Fk
LCBmb3JtCisgICAgICAgICAgICB9CisgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVk
LCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAg
ICAgICBlbmQKKyAgICB9CitlbmQKKword3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91
dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAg
CisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4g
dHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIFQ+IgorICAgIG91dHAu
cHV0cyAiaW5saW5lIFQqIG9wZ2VuSGlkZGVuUHRySWRlbnRpdHkoVCogcG9pbnRlcikgeyByZXR1
cm4gcG9pbnRlcjsgfSIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVl
KSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIK
KyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAi
fSB3aGlsZSAoZmFsc2UpIgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5zdDo6Zm9yRWFjaEFyZyhjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0
cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAg
ICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3Nb
MF0sIEFyZzo6VXNlLCBBcmc6OkdQKTsgLy8gVGhpcyBpcyBiYXNpY2FsbHkgYm9ndXMsIGJ1dCBp
dCB3b3JrcyBmIGFuYWx5c2VzIG1vZGVsIFNwZWNpYWwgYXMgYW4gaW1tZWRpYXRlLiIKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiYXJnc1swXS5zcGVjaWFsKCktPmZvckVhY2hBcmcoKnRoaXMsIHNj
b3BlZExhbWJkYTxFYWNoQXJnQ2FsbGJhY2s+KGZ1bmN0b3IpKTsiCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAg
ICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG5pbAorICAgICAg
ICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAgICAgICAgICAgICB3aGVuICJVIgorICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAgICAgICAgICAgICAgICB3aGVuICJEIgorICAg
ICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKKyAgICAgICAgICAgICAgICB3aGVuICJVRCIK
KyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VEZWYiCisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7aW5k
ZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJnLnR5cGV9UCk7IgorICAgICAgICAgICAgfQor
ICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+IgorICAgIG91dHAucHV0cyAiQUxXQVlTX0lO
TElORSBib29sIGlzVmFsaWRGb3JtKE9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIkFyZzo6S2luZCBraW5kc1tz
aXplb2YuLi4oQXJndW1lbnRzKV0gPSB7IGFyZ3VtZW50cy4uLiB9OyIKKyAgICBvdXRwLnB1dHMg
InN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAg
fCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAg
ICAgICBvdXRwLnB1dHMgInN3aXRjaCAoc2l6ZW9mLi4uKEFyZ3VtZW50cykpIHsiCisgICAgICAg
IHVubGVzcyBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNo
IHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiCisgICAgICAgICAgICAgICAg
Y29sdW1uR2V0dGVyID0gcHJvYyB7IHwgY29sdW1uSW5kZXggfCAib3BnZW5IaWRkZW5QdHJJZGVu
dGl0eShraW5kcylbI3tjb2x1bW5JbmRleH1dIiB9CisgICAgICAgICAgICAgICAgZmlsdGVyID0g
cHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAg
ICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0gKG5v
dCBmb3JtLmtpbmRzLmRldGVjdCB7IHwga2luZCB8IGtpbmQuc3BlY2lhbCB9KQorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTigje3NwZWNpYWx9KTsiCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJs
b2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAg
ICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9Cisg
ICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRw
LnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7ICIKKyAgICBvdXRwLnB1dHMg
In0iCisKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29sIGlzVGVybWluYWwoT3Bjb2RlIG9wY29k
ZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsi
CisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAg
IGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5hbCBvciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisg
ICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBlbmQK
KyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZh
dWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9Igor
ICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlQ1BQKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91
dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAg
b3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
IgorICAgIG91dHAucHV0cyAiYm9vbCBJbnN0Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0
cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgewor
ICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3Bl
Y2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYXJncy5zaXplKCkgPCAxKSIKKyAgICAg
ICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAi
aWYgKCFhcmdzWzBdLmlzU3BlY2lhbCgpKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJu
IGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3Bl
Y2lhbCgpLT5pc1ZhbGlkKCp0aGlzKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVk
c01vcmVWYWxpZGF0aW9uID0gZmFsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5s
ZW5ndGgudGltZXMgeworICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAg
IHJvbGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0
eXBlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS50eXBlCisgICAgICAgICAgICAgICAga2lu
ZCA9IGZvcm0ua2luZHNbaW5kZXhdCisgICAgICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlv
biB8PSBraW5kLnNwZWNpYWwKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAjIFdl
IGFscmVhZHkga25vdyB0aGF0IHRoZSBmb3JtIG1hdGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFs
aWRhdGUgdGhlIHJvbGUsIHNpbmNlCisgICAgICAgICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9s
ZS4gU28sIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gdmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3
ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAgICAjIHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdl
IGhhdmUgYSBUbXAuCisgICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJUbXAiCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7
dHlwZX1QKCkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihm
YWxzZSk7IgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgbmVlZHNNb3JlVmFsaWRhdGlvbgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFp
cyN7b3Bjb2RlLm5hbWV9VmFsaWQodGhpcykpIgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAu
cHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMg
ImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0
cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZh
bHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2Ug
I3tvcGNvZGUubmFtZX06IgorCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1
cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5z
cGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlzLCBhcmdJbnN0KSk7IgorICAgICAgICBlbHNlCisg
ICAgICAgICAgICAjIFN3aXRjaCBvbiB0aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1
dHMgInN3aXRjaCAoYXJnSW5kZXgpIHsiCisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUu
b3ZlcmxvYWRzLm1hcCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAg
ICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgbnVtQXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBh
cmdJbmRleCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIK
KworICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2Yg
dGhlIG92ZXJsb2FkcyBlaXRoZXIgZG8sIG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAg
ICAgICAgICAgICAgIyBhdCB0aGlzIGluZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkg
Y29tbW9uIGNhc2UuCisgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAg
IG51bU5vID0gMAorICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAg
ICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9h
ZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3Qg
bnVtWWVzIGZpcnN0IGJlY2F1c2UgaWYgd2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQK
KyAgICAgICAgICAgICAgICAjIHRvIHNheSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgor
ICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8g
PT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsi
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUg
ZnVsbCB0ZXN0LgorCisgICAgICAgICAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChv
cGNvZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgInN3aXRjaCAoYXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAg
ICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAg
ICAgICAgfCBvdmVybG9hZCB8CisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNo
ZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdoYXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgIG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAg
ICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3Jt
LmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3Qg
ZW1pdCBhbnl0aGluZywganVzdCBkcm9wIHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAg
ICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVS
Tih0cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25h
dHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjIFRoaXMgaXMgaG93IHdlIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFu
Z2luZyB0aGlzIGFyZ3VtZW50IHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBh
ZGRyZXNzIHlpZWxkcyBhIHZhbGlkIGZvcm0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
Y29sdW1uSW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5J
bmRleCA9PSBhcmdJbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFy
Zzo6QWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2Mgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2lu
ZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjIERyb3AgZG93biwgZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0
Y2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICMgS2VlcCBnb2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9
IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VO
X1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1z
LCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRw
LnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisg
ICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRz
ICJkZWZhdWx0OiI7CisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9Igor
ICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBv
dXRwLnB1dHMgIkNDYWxsSGVscGVyczo6SnVtcCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMm
IGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpIGNvbnN0IgorICAgIG91dHAucHV0cyAi
eyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVO
VVNFRF9QQVJBTShjb250ZXh0KTsiCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAg
cmVzdWx0OyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikg
eworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUu
c3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVj
aWFsKCktPmdlbmVyYXRlKCp0aGlzLCBqaXQsIGNvbnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGlmIGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBm
b3JtLmFsdE5hbWUKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1l
ID0gb3Bjb2RlLm1hc21OYW1lCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29k
ZS5raW5kID09IDpicmFuY2gKKyAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAi
CisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHJpbnQgImppdC4je21ldGhvZE5h
bWV9KCIKKworICAgICAgICAgICAgZm9ybS5raW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAg
ICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiLCAiCisgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICAgICAgY2FzZSBraW5kLm5hbWUKKyAgICAgICAgICAgICAgICB3aGVuICJU
bXAiCisgICAgICAgICAgICAgICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlw
ZSA9PSAiRyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRl
eH1dLmdwcigpIgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgd2hlbiAiSW1tIgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW0zMigpIgorICAgICAgICAgICAg
ICAgIHdoZW4gIkltbTY0IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7
aW5kZXh9XS5hc1RydXN0ZWRJbW02NCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygp
IgorICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRw
LnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdo
ZW4gIlJlbENvbmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRl
eH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlc0Nv
bmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVz
dWx0Q29uZGl0aW9uKCkiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIG91dHAucHV0cyAiKTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JF
VFVSTihyZXN1bHQpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIK
KyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIiCit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2aXNpb24g
MTkxNTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleCAhPSBpbnZhbGlkKCk7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsg
cmV0dXJuICFpc1NldCgpOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIGlzU2V0KCk7IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2luZGV4ID09IGRlbGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBA
QCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAg
ICBjbGFzcyBBbGxSZWdzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKworICAgICAgICBjbGFzcyBp
dGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkgeyB9CisK
KyAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKFJlZyByZWcpCisgICAgICAgICAgICAgICAg
OiBtX3JlZ0luZGV4KHJlZy5pbmRleCgpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBSZWcgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1cm4gUmVnOjpmcm9tSW5k
ZXgobV9yZWdJbmRleCk7IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fcmVnSW5kZXggPSBSZWc6OmZyb21JbmRl
eChtX3JlZ0luZGV4KS5uZXh0KCkuaW5kZXgoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fcmVnSW5kZXggPT0gb3RoZXIubV9yZWdJbmRleDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIHVuc2lnbmVkIG1f
cmVnSW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcihSZWc6OmZpcnN0KCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZygpKTsgfQorICAgIH07CisKKyAgICBzdGF0aWMg
QWxsUmVnc0l0ZXJhYmxlIGFsbCgpIHsgcmV0dXJuIEFsbFJlZ3NJdGVyYWJsZSgpOyB9CisKIHBy
aXZhdGU6CiAgICAgc3RhdGljIHVpbnQ4X3QgaW52YWxpZCgpIHsgcmV0dXJuIDB4ZmY7IH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0
TGlzdC5jcHAJKHJldmlzaW9uIDE5MTUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBA
IFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpSZWdpc3RlckF0T2Zmc2V0TGkKICAgICBpZiAob2Zmc2V0
QmFzZVR5cGUgPT0gRnJhbWVQb2ludGVyQmFzZWQpCiAgICAgICAgIG9mZnNldCA9IC0oc3RhdGlj
X2Nhc3Q8cHRyZGlmZl90PihudW1iZXJPZlJlZ2lzdGVycykgKiBzaXplb2Yodm9pZCopKTsKIAot
ICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpO3JlZyA9
IHJlZy5uZXh0KCkpIHsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBS
ZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewogICAgICAgICBpZiAocmVnaXN0ZXJTZXQu
Z2V0KHJlZykpIHsKICAgICAgICAgICAgIGFwcGVuZChSZWdpc3RlckF0T2Zmc2V0KHJlZywgb2Zm
c2V0KSk7CiAgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQqKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgJKHJldmlz
aW9uIDE5MTUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNl
dExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsOSBAQCBwdWJsaWM6CiAgICAgUmVn
aXN0ZXJBdE9mZnNldCogZmluZChSZWcpIGNvbnN0OwogICAgIHVuc2lnbmVkIGluZGV4T2YoUmVn
KSBjb25zdDsgLy8gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQuCiAKKyAgICBWZWN0b3I8
UmVnaXN0ZXJBdE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
bV9yZWdpc3RlcnMuYmVnaW4oKTsgfQorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29u
c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnMuZW5kKCk7IH0KKwog
cHJpdmF0ZToKICAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD4gbV9yZWdpc3RlcnM7CiB9OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24gMTkx
NTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTgsNiArMTE4LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZlY3RvciA9
PSBvdGhlci5tX3ZlY3RvcjsgfQogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVybiBt
X3ZlY3Rvci5oYXNoKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAgICAg
ICBmb3IgKHNpemVfdCBpbmRleCA6IG1fdmVjdG9yLnNldEJpdHMoKSkKKyAgICAgICAgICAgIGZ1
bmN0b3IoUmVnOjpmcm9tSW5kZXgoaW5kZXgpKTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgogICAg
IHZvaWQgc2V0QW55KFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KSW5kZXg6IFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxNTA3KQorKysgU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsNyBAQAogCQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0NzlCMUI3QUFBMDMw
MDk0OThFQiAvKiBXb3JkTG9jay5oICovOyB9OwogCQkwRkVCM0RDRjFCQjVENjg0MDA5RDdBQUQg
LyogU2hhcmVkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCAqLzsgfTsKIAkJ
MEZFQjNERDExQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzREQwMUJCNzM2
NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi87IH07CisJCTBGRUM4NEIx
MUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29w
ZWRMYW1iZGEuaCAqLzsgfTsKIAkJMEZFQzg0QUYxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9k
ZVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2RlV29ya2xpc3QuaCAqLzsgfTsK
IAkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0Ux
NSAvKiBUaW55UHRyU2V0LmggKi87IH07CiAJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQ
b2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmgg
Ki87IH07CkBAIC0zNDUsNiArMzQ2LDcgQEAKIAkJMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8q
IFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmRMb2NrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAv
KiBTaGFyZWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFRh
c2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNERDAxQkI3MzY2QjAwOUQ3
QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZExhbWJkYS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2RlV29y
a2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhOb2RlV29ya2xp
c3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjUxQjIyRDREODAwNjZD
RTE1IC8qIFRpbnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlu
eVB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY4NjA5NDFCQ0NCRDc0
MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUG9pbnRlckNvbXBhcmlzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTg3MCw2ICs4NzIsNyBAQAogCQkJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hl
ZHVsZVBhaXIuaCAqLywKIAkJCQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQ
YWlyQ0YuY3BwICovLAogCQkJCTE0Njk0MTk1MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBh
aXJNYWMubW0gKi8sCisJCQkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJk
YS5oICovLAogCQkJCUE4QTQ3MzA2MTUxQTgyNUIwMDQxMjNGRiAvKiBTZWdtZW50ZWRWZWN0b3Iu
aCAqLywKIAkJCQlBOEE0NzMwNzE1MUE4MjVCMDA0MTIzRkYgLyogU2VudGluZWxMaW5rZWRMaXN0
LmggKi8sCiAJCQkJQThBNDczMDgxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuY3BwICovLApAQCAt
MTI0NCw2ICsxMjQ3LDcgQEAKIAkJCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
SWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRl
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NTUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVh
ZFNwZWNpZmljLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUg
LyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9u
IDE5MTUwNykKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3NiwxMiArNzc2LDIwIEBACiAjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJVCAxCiAjZW5k
aWYKIAorLyogVGhlIEIzIGNvbXBpbGVyIGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNrZW5kIHRoYXQg
aXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQuIFdlIHdpbGwga2VlcCBpdCBidWlsZGluZworICAgb24g
RGFyd2luL3g4Ni02NCBmb3Igbm93LCB0aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2VwdCBmb3IgdGVz
dHMuICovCisjaWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQorI2RlZmluZSBFTkFCTEVfQjNf
SklUIDEKKyNlbmRpZgorCiAvKiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFpbGFibGUs
IHRoZW4gZGlzYWJsZSB1cHBlciB0aWVycyBhcyB3ZWxsOiAqLwogI2lmICFFTkFCTEUoSklUKQot
I3VuZGVmIEVOQUJMRV9ERkdfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVkZWZp
bmUgaXQuICovCi0jdW5kZWYgRU5BQkxFX0ZUTF9KSVQgICAgICAvKiBVbmRlZiBzbyB0aGF0IHdl
IGNhbiByZWRlZmluZSBpdC4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI3VuZGVmIEVOQUJM
RV9GVExfSklUCisjdW5kZWYgRU5BQkxFX0IzX0pJVAogI2RlZmluZSBFTkFCTEVfREZHX0pJVCAw
CiAjZGVmaW5lIEVOQUJMRV9GVExfSklUIDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJVCAwCiAjZW5k
aWYKIAogLyogQ291bnRzIHVzZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxpbmcgY291
bnRlcnMuIEJlIHN1cmUgdG8gYWxzbwpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRh
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKworbmFt
ZXNwYWNlIFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRs
eSBwYXNzIGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKKy8v
IHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxk
IGJlIGRlY2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRo
aW5ncyogKGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKKy8v
CisvLyB2b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAo
aW50IHgsIFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3RlIHRo
YXQgdGhpcyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1i
ZGEgaXMgb25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVuY2Ug
dGhlIG5hbWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+
IGNsYXNzIFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJn
dW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAo
KmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQqIGFy
ZyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmcoYXJn
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFyZ3VtZW50
VHlwZXMmJi4uLiBhcmd1bWVudHMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBs
KG1fYXJnLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAg
fQorCitwcml2YXRlOgorICAgIFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywgQXJndW1l
bnRUeXBlcyYmLi4uKTsKKyAgICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3Rv
cjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlw
ZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJlc3VsdFR5
cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVz
dWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBQYXNzZWRGdW5jdG9yPgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2VkRnVuY3Rv
ciYmIGZ1bmN0b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50
VHlwZXMuLi4pPihpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9yKHN0ZDo6
Zm9yd2FyZDxQYXNzZWRGdW5jdG9yPihmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwgQXJn
dW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisgICAgICAg
ICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQor
CisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
blR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlw
ZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVy
biBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3RkOjpmb3J3YXJk
PEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdU
Rjo6U2NvcGVkTGFtYmRhOwordXNpbmcgV1RGOjpzY29wZWRMYW1iZGE7CisKKyNlbmRpZiAvLyBT
Y29wZWRMYW1iZGFfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTE1MDcpCisr
KyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5
LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0b3IoRnVu
Y3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkK
KyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlw
ZXMmJi4uLiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwxMSBAQCBS
ZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5j
dG9yKSk7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0
b3I+CitSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNrKEZ1bmN0
b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5j
dG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263974</attachid>
            <date>2015-10-23 19:28:58 -0700</date>
            <delta_ts>2015-10-24 00:43:02 -0700</delta_ts>
            <desc>it links!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>562064</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lv
biAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQko
d29ya2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDE4IEBAIGFsbCA6IFwKICAgICBCeXRlY29kZXMu
aCBcCiAgICAgSW5pdEJ5dGVjb2Rlcy5hc20gXAogICAgIEpTQ0J1aWx0aW5zLmggXAorICAgIEIz
TG93ZXJpbmdNYXRjaGVyLmggXAorICAgIEIzQWRkcmVzc01hdGNoZXIuaCBcCisgICAgQjNDb21w
YXJpc29uTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBcCisgICAgQWlyT3Bjb2RlLmNwcCBc
CisgICAgQWlyT3Bjb2RlVXRpbHMuaCBcCisgICAgQWlyT3Bjb2RlVXRpbHMuY3BwIFwKICMKIAog
UFlUSE9OID0gcHl0aG9uCiBQRVJMID0gcGVybAorUlVCWSA9IHJ1YnkKIAogSmF2YVNjcmlwdENv
cmVfU0NSSVBUU19ESVIgPSAkKEphdmFTY3JpcHRDb3JlKS9TY3JpcHRzCiAKQEAgLTI1MiwzICsy
NjAsMTkgQEAgYWxsIDogSlNSZXBsYXlJbnB1dHMuaAogCiBKU1JlcGxheUlucHV0cy5oIDogJChJ
TlBVVF9HRU5FUkFUT1JfU1BFQ0lGSUNBVElPTlMpICQoSU5QVVRfR0VORVJBVE9SX1NDUklQVFMp
CiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3JlcGxheS9zY3JpcHRzL0NvZGVHZW5lcmF0
b3JSZXBsYXlJbnB1dHMucHkgLS1vdXRwdXREaXIgLiAtLWZyYW1ld29yayBKYXZhU2NyaXB0Q29y
ZSAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykKKworQjNMb3dlcmluZ01hdGNoZXIu
aDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2
YVNjcmlwdENvcmUpL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXiAK
K0IzQWRkcmVzc01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVy
bl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVy
bnMKKwkkKFJVQlkpICReCitCM0NvbXBhcmlzb25NYXRjaGVyLmg6ICQoSmF2YVNjcmlwdENvcmUp
L2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9CM0Nv
bXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXgorCitBaXJPcGNvZGUuaDogJChK
YXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0Q29y
ZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bjb2RlLmNwcDog
JChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0
Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bjb2RlVXRp
bHMuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZh
U2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorQWlyT3Bj
b2RlVXRpbHMuY3BwOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5y
YiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICRe
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxNTA3KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTY4NSw2ICs2ODUsMTE4IEBACiAJCTBGRUEwQTMzMTcw
RDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMw
MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdG
NkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9B
c3NlbWJsZXIuY3BwICovOyB9OworCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1
bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3Bw
ICovOyB9OworCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4
NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJ
MEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja1V0aWxzLmggKi87IH07CisJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Js
b2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsK
KwkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVj
aWFsLmggKi87IH07CisJCTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9u
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmgg
Ki87IH07CisJCTBGRUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW11dGF0aXZpdHkuaCAqLzsgfTsKKwkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87
IH07CisJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0
VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVD
ODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmggKi87IH07CisJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUxNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVu
Y3lDbGFzcy5jcHAgKi87IH07CisJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1
ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9Owor
CQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5j
cHAgKi87IH07CisJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9Owor
CQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzSW5kZXhTZXQuaCAqLzsgfTsKKwkJMEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
TG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsK
KwkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzTG93ZXJUb0Fpci5oICovOyB9OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQg
LyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAg
Ki87IH07CisJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFD
REFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFD
MDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4
MEZGNzQgLyogQjNPcGNvZGUuaCAqLzsgfTsKKwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBG
RUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
T3JpZ2luLmggKi87IH07CisJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9p
bnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4
NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9p
bnRWYWx1ZS5oICovOyB9OworCQkwRkVDODUyOTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNj
b3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVD
ODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyog
QjNQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1By
b2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkw
RkVDODUyQzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5oICovOyB9OworCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmgg
Ki87IH07CisJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87
IH07CisJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUz
MTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrbWFwU3BlY2lhbC5oICovOyB9OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQg
LyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQu
Y3BwICovOyB9OworCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
OTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmggKi87IH07CisJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxl
Y3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsK
KwkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICov
OyB9OworCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hW
YWx1ZS5oICovOyB9OworCQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBG
RUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5o
ICovOyB9OworCQkwRkVDODUzRjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMu
aCAqLzsgfTsKKwkJMEZFQzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAq
LzsgfTsKKwkJMEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWUuY3BwICovOyB9OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQg
LyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1
NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZUlubGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkw
RkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFs
bG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICov
OyB9OworCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAq
LzsgfTsKKwkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFyZy5oICovOyB9OworCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWly
QmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07
CisJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovOyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNp
YWwuY3BwICovOyB9OworCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVj
aWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4
NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVu
dGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVy
YXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4
NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckdlbmVyYXRlLmggKi87IH07CisJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0Lmgg
Ki87IH07CisJCTBGRUM4NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9Owor
CQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFC
REFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyog
QWlySW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87
IH07CisJCTBGRUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgx
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3RJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJM
aXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4
NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07
CisJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1
ODYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAq
LzsgfTsKKwkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZl
cnl0aGluZy5jcHAgKi87IH07CisJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGls
bEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsg
fTsKKwkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
ICovOyB9OworCQkwRkVDODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJUbXAuY3BwICovOyB9OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wSW5saW5lcy5oICovOyB9OworCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyog
QWlyVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdl
bmVyYXRlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLzsgfTsKIAkJ
MEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNzFC
MjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJ
MEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2
MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oICovOyB9OwogCQkwRkVF
OTg0MTFBODg2NUI3MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5
MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC0yNTYzLDYgKzI2NzUsMTE4IEBACiAJCTBGRUEwQTJGMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcyMkMgLyogREZH
SklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKSVRDb2RlLmg7
IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVu
dFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQXJn
dW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNB
cmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQXJn
dW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2lj
QmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNCYXNpY0Js
b2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrLmg7IHBhdGggPSBiMy9C
M0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gYjMvQjNCYXNpY0Js
b2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCOTFCREFD
REFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrVXRpbHMuaDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9ja1V0
aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJBMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNCbG9ja1dvcmtsaXN0Lmg7IHBhdGggPSBiMy9CM0Jsb2NrV29ya2xpc3QuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hl
Y2tTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hl
Y2tTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVj
aWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tTcGVjaWFsLmg7
IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5jcHA7IHBhdGggPSBiMy9C
M0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRTFC
REFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNDaGVja1ZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbW1vbi5j
cHA7IHBhdGggPSBiMy9CM0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0NvbW1vbi5oOyBwYXRoID0gYjMvQjNDb21tb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29t
bXV0YXRpdml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Nv
bW11dGF0aXZpdHkuY3BwOyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0
YXRpdml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbW11dGF0aXZp
dHkuaDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb25zdDMyVmFsdWUuY3BwOyBw
YXRoID0gYjMvQjNDb25zdDMyVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdDMyVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29u
c3QzMlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM1MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM2MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM0NvbnN0NjRWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdDY0VmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3RE
b3VibGVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Nv
bnN0RG91YmxlVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3REb3VibGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Nv
bnN0RG91YmxlVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250
cm9sVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb250
cm9sVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb250cm9sVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb250cm9sVmFsdWUuaDsg
cGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3MuY3BwOyBwYXRo
ID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3MuaDsgcGF0aCA9IGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0Qx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9CM0ZyZXF1ZW50
ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRTFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0dlbmVyYXRlLmNwcDsgcGF0aCA9IGIzL0IzR2VuZXJhdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5l
cmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVyYXRlLmg7IHBh
dGggPSBiMy9CM0dlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmg7IHBh
dGggPSBiMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbmRleE1hcC5oOyBwYXRoID0gYjMvQjNJbmRl
eE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREMjFCREFDREFDMDA4
MEZGNzQgLyogQjNJbmRleFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0luZGV4U2V0Lmg7IHBhdGggPSBiMy9CM0luZGV4U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNMb3dlclRvQWlyLmNwcDsgcGF0
aCA9IGIzL0IzTG93ZXJUb0Fpci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlclRvQWlyLmg7IHBhdGggPSBiMy9CM0xvd2VyVG9BaXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNNZW1vcnlWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVt
b3J5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNNZW1vcnlWYWx1
ZS5oOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcGNvZGUuY3BwOyBwYXRoID0gYjMvQjNPcGNv
ZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREODFCREFDREFDMDA4
MEZGNzQgLyogQjNPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNP
cGNvZGUuaDsgcGF0aCA9IGIzL0IzT3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbi5jcHA7IHBhdGggPSBiMy9CM09yaWdp
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERBMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM09yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09y
aWdpbi5oOyBwYXRoID0gYjMvQjNPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRjaHBvaW50U3BlY2lhbC5j
cHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNp
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBvaW50U3BlY2lh
bC5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRjaHBvaW50VmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFs
dWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBvaW50VmFsdWUu
aDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQaGFzZVNjb3BlLmNwcDsgcGF0aCA9
IGIzL0IzUGhhc2VTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNQaGFzZVNjb3BlLmg7IHBhdGggPSBiMy9CM1BoYXNlU2NvcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUHJvY2VkdXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
UHJvY2VkdXJlLmNwcDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlLmg7IHBhdGggPSBi
My9CM1Byb2NlZHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMzFC
REFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlSW5saW5lcy5oOyBwYXRoID0gYjMvQjNQcm9jZWR1
cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzU3RhY2ttYXAuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrbWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2ttYXAuaDsg
cGF0aCA9IGIzL0IzU3RhY2ttYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmNwcDsgcGF0aCA9
IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmg7IHBhdGggPSBiMy9C
M1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRF
ODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5jcHA7IHBhdGggPSBiMy9CM1N0
YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFOTFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RLaW5k
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RWYWx1ZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzU3RhY2tTbG90VmFsdWUuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Vj
Y2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIz
U3dpdGNoQ2FzZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoQ2FzZS5oOyBwYXRo
ID0gYjMvQjNTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNTd2l0
Y2hWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYwMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzU3dpdGNoVmFsdWUuaDsgcGF0aCA9IGIzL0IzU3dpdGNoVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1R5cGUuY3BwOyBw
YXRoID0gYjMvQjNUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1R5cGUuaDsgcGF0aCA9IGIzL0IzVHlwZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNVcHNpbG9uVmFsdWUuY3Bw
OyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVcHNpbG9uVmFsdWUuaDsgcGF0aCA9IGIzL0Iz
VXBzaWxvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM1VzZUNvdW50cy5jcHA7IHBhdGggPSBiMy9CM1VzZUNvdW50cy5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1VzZUNvdW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1VzZUNv
dW50cy5oOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWxpZGF0ZS5jcHA7IHBhdGggPSBiMy9C
M1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNWYWxpZGF0ZS5oOyBwYXRoID0gYjMvQjNWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbHVlLmNwcDsgcGF0aCA9
IGIzL0IzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGQTFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM1ZhbHVlLmg7IHBhdGggPSBiMy9CM1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlSW5saW5lcy5oOyBwYXRoID0g
YjMvQjNWYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZVJlcC5jcHA7IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWVSZXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1
ZVJlcC5oOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVN0YWNrLmNwcDsg
cGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFjay5oOyBwYXRo
ID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBcmcuY3BwOyBwYXRoID0gYjMvYWlyL0FpckFyZy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJBcmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQXJnLmg7
IHBhdGggPSBiMy9haXIvQWlyQXJnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJhc2ljQmxvY2suY3BwOyBwYXRoID0gYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0
RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmg7IHBhdGggPSBiMy9haXIvQWlyQmFzaWNCbG9j
ay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0RTFCREFDREM3MDA4MEZG
NzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpckNDYWxsU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJDQ2FsbFNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQ29kZS5j
cHA7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNvZGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJDb2RlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWly
RnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJH
ZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGUuaDsgcGF0aCA9
IGIzL2Fpci9BaXJHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsgcGF0aCA9IGIz
L2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNh
bGxlZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckhhbmRsZUNh
bGxlZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpcklu
c2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJ
bnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlySW5zZXJ0
aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckluc3QuY3BwOyBwYXRoID0g
YjMvYWlyL0Fpckluc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1
QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJJbnN0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGlu
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlySW5zdElubGluZXMuaDsg
cGF0aCA9IGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3MuaDsgcGF0aCA9IGIzL2Fpci9BaXJM
aXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1RTFCREFDREM3
MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3Bl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlU2NvcGUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lz
dGVyUHJpb3JpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
UmVnaXN0ZXJQcmlvcml0eS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEFpclJlZ2lzdGVyUHJpb3JpdHkuaDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdpc3RlclByaW9y
aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYyMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpclNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNwZWNpYWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bl
Y2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGVjaWFsLmg7IHBh
dGggPSBiMy9haXIvQWlyU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwaWxsRXZlcnl0aGluZy5jcHA7IHBh
dGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5dGhpbmcuaDsg
cGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTdGFja1Nsb3QuY3BwOyBwYXRo
ID0gYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tTbG90Lmg7IHBhdGggPSBiMy9haXIvQWlyU3Rh
Y2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY4MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJUbXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyVG1wLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJUbXAuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRtcC5oOyBwYXRoID0gYjMvYWlyL0FpclRt
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QTFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBB
aXJUbXBJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyVG1wSW5saW5lcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRh
dGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyVmFsaWRhdGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpclZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclZhbGlkYXRlLmg7IHBhdGggPSBiMy9haXIv
QWlyVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1OTIxQkRC
MUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZWQuY3BwOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRl
ZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I3MUIyNjI1NkQwMDY2
Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRm
Zy9ERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkVENjdCODFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQ
aGFzZS5oOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJh
cmdzRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dXBWYXJhcmdz
RnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM4NTgsNiArNDA4Miw3IEBA
CiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0b3Iu
cHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywKIAkJCQk5Njg4
Q0IxMjBFRDEyQjRFMDAxRDY0OUYgLyogYXNzZW1ibGVyICovLAorCQkJCTBGRUM4NEIyMUJEQUNE
NUUwMDgwRkY3NCAvKiBiMyAqLywKIAkJCQlBNTRDRjJFQTE4NEVBNzM5MDAyMzdGMTkgLyogYmlu
ZGluZ3MgKi8sCiAJCQkJQTdEODAxOUYxODgwRDY2RTAwMjZDMzlCIC8qIGJ1aWx0aW5zICovLAog
CQkJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLywKQEAgLTQwNzEsNiAr
NDI5NiwxMzMgQEAKIAkJCW5hbWUgPSBmdGw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwog
CQl9OworCQkwRkVDODRCMjFCREFDRDVFMDA4MEZGNzQgLyogYjMgKi8gPSB7CisJCQlpc2EgPSBQ
QlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAv
KiBhaXIgKi8sCisJCQkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdW
YWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRS
ZWdWYWx1ZS5oICovLAorCQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2suY3BwICovLAorCQkJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2su
aCAqLywKKwkJCQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5l
cy5oICovLAorCQkJCTBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGls
cy5oICovLAorCQkJCTBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3Qu
aCAqLywKKwkJCQkwRkVDODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3Bw
ICovLAorCQkJCTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICov
LAorCQkJCTBGRUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovLAor
CQkJCTBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLywKKwkJCQkw
RkVDODRCRjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3BwICovLAorCQkJCTBGRUM4NEMw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovLAorCQkJCTBGRUM4NEMxMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwICovLAorCQkJCTBGRUM4NEMyMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLywKKwkJCQkwRkVDODRDMzFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QzYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi8sCisJCQkJMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29udHJvbFZhbHVlLmggKi8sCisJCQkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzRnJlcXVlbmN5Q2xhc3MuY3BwICovLAorCQkJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0ZyZXF1ZW5jeUNsYXNzLmggKi8sCisJCQkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dl
bmVyYXRlLmggKi8sCisJCQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0Zy
ZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0lu
ZGV4TWFwLmggKi8sCisJCQkJMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQu
aCAqLywKKwkJCQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAq
LywKKwkJCQkwRkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8sCisJ
CQkJMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovLAorCQkJ
CTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggKi8sCisJCQkJMEZF
Qzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLywKKwkJCQkwRkVDODREODFC
REFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLywKKwkJCQkwRkVDODREOTFCREFDREFDMDA4
MEZGNzQgLyogQjNPcmlnaW4uY3BwICovLAorCQkJCTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM09yaWdpbi5oICovLAorCQkJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50U3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGhhc2VTY29wZS5jcHAgKi8sCisJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2Nl
ZHVyZS5jcHAgKi8sCisJCQkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJl
LmggKi8sCisJCQkJMEZFQzg0RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5l
cy5oICovLAorCQkJCTBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAq
LywKKwkJCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovLAorCQkJ
CTBGRUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCisJ
CQkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCisJ
CQkJMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8sCisJ
CQkJMEZFQzg0RTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovLAorCQkJ
CTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLywKKwkJ
CQkwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovLAorCQkJ
CTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLywK
KwkJCQkwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLywKKwkJ
CQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8sCisJCQkJMEZF
Qzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovLAorCQkJCTBGRUM4
NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgKi8sCisJCQkJMEZFQzg0RjIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVHlwZS5oICovLAorCQkJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Vwc2lsb25WYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VXBzaWxvblZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNl
Q291bnRzLmNwcCAqLywKKwkJCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3Vu
dHMuaCAqLywKKwkJCQkwRkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAg
Ki8sCisJCQkJMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLywKKwkJ
CQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0
RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGQjFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLywKKwkJCQkwRkVDODRGQzFCREFDREFDMDA4
MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8sCisJCQkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWVSZXAuaCAqLywKKwkJCSk7CisJCQluYW1lID0gYjM7CisJCQlzb3VyY2VUcmVl
ID0gIjxncm91cD4iOworCQl9OworCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICov
ID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODU0ODFC
REFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi8sCisJCQkJMEZFQzg1NDkx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLywKKwkJCQkwRkVDODU0QTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLywKKwkJCQkwRkVDODU0QjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQXJnLmggKi8sCisJCQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckJhc2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJC
YXNpY0Jsb2NrLmggKi8sCisJCQkJMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxs
U3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxs
U3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNw
cCAqLywKKwkJCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJ
CTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJ
CQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAorCQkJCTBG
RUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NTky
MUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovLAorCQkJCTBGRUM4NTU1MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovLAorCQkJCTBGRUM4NTU2
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgKi8sCisJCQkJMEZF
Qzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8sCisJCQkJ
MEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8sCisJCQkJ
MEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovLAorCQkJCTBG
RUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLywKKwkJCQkwRkVDODU1QjFC
REFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovLAorCQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oICovLAorCQkJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJQaGFzZVNjb3BlLmNwcCAqLywKKwkJCQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWly
UGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcCAqLywKKwkJCQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWly
UmVnaXN0ZXJQcmlvcml0eS5oICovLAorCQkJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bl
Y2lhbC5oICovLAorCQkJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5
dGhpbmcuY3BwICovLAorCQkJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2
ZXJ5dGhpbmcuaCAqLywKKwkJCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tT
bG90LmNwcCAqLywKKwkJCQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90
LmggKi8sCisJCQkJMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8sCisJ
CQkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovLAorCQkJCTBGRUM4NTZB
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1NkIxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRkVDODU2QzFCREFDREM3
MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLywKKwkJCSk7CisJCQluYW1lID0gYWlyOworCQkJ
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMEZGNDI3MkUxNThFQkNDRTAwNENCOUZG
IC8qIGRpc2Fzc2VtYmxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4g
PSAoCkBAIC02MDQyLDYgKzYzOTQsNyBAQAogCQkJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAv
KiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0
NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVG
MEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdl
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElD
YWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNTBFMTZGNUNEMDBC
MzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MDcxLDggKzY0MjQsMTAgQEAK
IAkJCQlBNUVBNzBFODE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250
cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMw
NkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBF
NkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJ
bnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyog
QmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0
NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjAxODJCN0Ew
NDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE1MTg4
MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuaCBpbiBIZWFkZXJzICovLApAQCAt
NjA4Nyw2ICs2NDQyLDcgQEAKIAkJCQk5OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRp
bnNfbW9kZWwucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNTFCRDU5OTMxMDBGNDU3NUMg
LyogYnVpbHRpbnNfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERUExMzIxQjlG
MzE2MzAwNkQ2NUREIC8qIEJ1aWx0aW5VdGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5RTcyOTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBp
biBIZWFkZXJzICovLApAQCAtNjA5Nyw2ICs2NDUzLDcgQEAKIAkJCQkwRjJERDgwQjFBQjNEODU4
MDBCQkI4RTggLyogQnl0ZWNvZGVLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMx
N0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2
NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5
QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgw
MjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTYx
MzMsMTMgKzY0OTAsMTYgQEAKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9u
U2xvd1BhdGhzLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUzQTMzMjE3QTFGMUVFMDA4Q0Y2RjMg
LyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJF
MzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUyQzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkZDNzUxMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21w
bGV4R2V0U3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjND
MUIgLyogQ29uY3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg4MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZF
NzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1M0NFMDhBMThCQzIxQzMwMEJFREY3NiAvKiBDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUZEMDA3QTE4OUIwNTEwMDA2MzMyMzEgLyogQ29uc29sZU1lc3Nh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDg2MThCQzFBNTYwMEJFREY3NiAvKiBDb25z
b2xlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3NDE4OUIwMzhDMDA2MzMy
MzEgLyogQ29uc29sZVR5cGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNTMsNiArNjUxMyw3IEBA
CiAJCQkJQzJGQzlCRDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVk
U3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyNDFCREFDREFDMDA4MEZG
NzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3
NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcx
NzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2
MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNjQsNiAr
NjUyNSw3IEBACiAJCQkJOTk1OUU5MkIxQkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBI
ZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJT
ZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBE
YXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQg
LyogQjNCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFC
MDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEz
NUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5
Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MTgzLDYgKzY1NDUsNyBAQAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdB
YnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4
MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODU3MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4
RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNl
bmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTkzLDcgKzY1NTYsOSBAQAogCQkJCTBGMkRE
ODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNDg1MzIyMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNs
b3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNzFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1
MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
N0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2
YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjAzLDYgKzY1NjgsNyBAQAogCQkJ
CUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tN
YXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQg
LyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURB
NDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkYxNThE
MTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQzNDRDAwMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVh
ZGVycyAqLywKQEAgLTYyNDIsOCArNjYwOCwxMCBAQAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBF
RTI2MTggLyogREZHRWRnZURvbWluYXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcx
N0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VVc2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2lj
QmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0
IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCRkYzQzAxNzk4
Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICov
LApAQCAtNjI3Myw2ICs2NjQxLDcgQEAKIAkJCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyog
REZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYx
OCAvKiBERkdMSUNNUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5QzRCMTVFMUJBMjE1OEYw
MEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU4NjFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlv
cml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3
MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLApAQCAtNjI4MSw2ICs2NjUwLDcgQEAKIAkJCQkwRjJCREM0NTE1MjI4
MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTE0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhp
bnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5
NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
M0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02Mjk5LDYgKzY2NjksNyBAQAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAv
KiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBD
N0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJG
MTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21w
aWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERG
R09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2
MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKQEAgLTYzMTYs
NiArNjY4Nyw4IEBACiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5
VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8q
IERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERF
MDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9p
bnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdT
YWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTYzNDAsNiArNjcxMyw3IEBACiAJCQkJ
MEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZU
TERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEz
MkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0
aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTcyMTFFMTkzQjlD
NTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQz
RjE1Qzc1RjE5MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMxREIxMjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhh
c2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjM1MSw2ICs2NzI1LDcgQEAKIAkJCQkwRjYyMDE3NDE0
M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVt
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1Zh
cmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQw
MENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM5N0Y0MjE4MjAyMTE5MDAyQzlCMjYgLyogREZH
V2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzgwLDYgKzY3
NTUsNyBAQAogCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGlu
Z0pJVFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAv
KiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAw
ODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThB
RjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICov
LApAQCAtNjQzOCw2ICs2ODE0LDcgQEAKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyog
RlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4
NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNE
QTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdo
dGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0NDUsOCArNjgyMiwxMCBAQAogCQkJCTJB
ODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTBG
QjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTRCRkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVu
Y3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAy
MDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4
Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAg
LTY0ODMsNiArNjg2Miw3IEBACiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBE
MzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUEx
QUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTA1MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0Yg
LyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTA4
LDYgKzY4ODgsNyBAQAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVy
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQw
RjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
NkRERUExOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNUZEMDA3NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTY1NjEsNiArNjk0Miw3IEBACiAJCQkJQTFCOUUyM0MxQjRFMEQ2
NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTgxOTNFMzFCNEUwQ0RCMDBGQzEwMjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENv
bGxhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQx
QjRFMENEQjAwRkMxMDI5IC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUExNTg3RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0
ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTkxLDYgKzY5NzMs
NyBAQAogCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRT
dHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdE
MDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4
NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJp
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjYwNCw2ICs2OTg3LDcgQEAKIAkJCQkwRjJCNjZFQTE3
QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBN0JEQUVDQjE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4QjE0MTg2RDFCNjI1MjdGMDBGQjIwNjggLyogSlNBcnJvd0Z1bmN0
aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxODBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDBEMTdENzBFOEFENEE5MDAw
Q0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZGQTlFOTIxNDJC
QkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjIw
LDYgKzcwMDQsOCBAQAogCQkJCTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU0NKU1ZhbHVl
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8q
IEpTQ2xhc3NSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDg4MThCQzFBNTYwMEJFREY3
NiAvKiBKU0NvbnNvbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFFMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThGMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYx
MzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUz
QzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1OEMwMjQyMThFNEE0MUEwMDAzMkJDNSAvKiBKU0NvbnRleHRQcml2YXRlLmggaW4g
SGVhZGVycyAqLywKQEAgLTY2MzUsNiArNzAyMSw3IEBACiAJCQkJRkUzODRFRTYxQUREQjdBRDAw
NTVERTJDIC8qIEpTRG9sbGFyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU4MUFEREI3
QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNFbnZpcm9ubWVudFJlY29yZC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE0MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0
TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyog
SlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjY0NCwxMSArNzAzMSwxMyBAQAog
CQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYz
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90
b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQzMyAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk3RTA3QUExQjhGQ0ZCOTAw
ODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUxQjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MjEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTR2xvYmFsT2JqZWN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNUZEMDA4NjE4OUIxQjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RD
b25zb2xlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QzNBMUE2MThDMDQ5MDIwMEM5NTkz
QSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjY3
OSw2ICs3MDY4LDcgQEAKIAkJCQlBNzAwODc0MjE3Q0JFOEVCMDBDM0U2NDMgLyogSlNNYXAuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3NERFRjk2MTgyRDk5MTQwMDUyMkMyMiAvKiBKU01hcEl0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyRDFCRDE3RkE0MDAxQUE0MTMgLyoganNt
aW4ucHkgaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJFRjY3IC8q
IEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMThDQkMxMUI4QUVG
NTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRTM5REE0QTcxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggaW4gSGVhZGVy
cyAqLywKQEAgLTY3MDgsNiArNzA5OCw3IEBACiAJCQkJQTdDMUVBRjAxNzk4N0FCNjAwMjk5REIy
IC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBFMTZGNUNE
MDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTg1NTM5MTExQjk5
NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzBFQzBFQzMxQUEwRDdEQTAwQjZBQUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTI2MDBCNUE3MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5n
UmVmLmggaW4gSGVhZGVycyAqLywKQEAgLTY3NjEsOSArNzE1MiwxMSBAQAogCQkJCTBGNDY4MEEz
MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNDY4MENCMTRCQkIxNzIwMEJGRTI3MiAvKiBMTEludE9mZmxpbmVBc21Db25maWcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEE1MTRCQTdGOEQwMEJGRTI3MiAvKiBMTElu
dFNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzOUQxNEJDRjQ2NjAwODg1QjRG
IC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDRTE4MDVFNzU1MDA0
NzJDRTQgLyogTExWTUFQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEMxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQ0YxODA1
RTc1NTAwNDcyQ0U0IC8qIExMVk1BUElGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkNFRkFEMzE4MDVFRENDMDA0NzJDRTQgLyogTExWTUhlYWRlcnMuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjc3NiwxMiArNzE2OSwxNCBAQAogCQkJCTg2RDNCMkM2MTAxNTZCREUwMDI4
NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFBMDA5QzAx
ODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2QUREMTQ2MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAg
LyogTWFjcm9Bc3NlbWJsZXJNSVBTLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTY4QzYzNzFCOTBE
RTA0MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkFFNjRBOTEzNUU1RTFDMDA5NjMwMTIgLyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2MDE2MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4
Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4QTFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFF
NjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3MDA4NzNBMTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc4NTA3RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBp
biBIZWFkZXJzICovLApAQCAtNjgwNiw2ICs3MjAxLDcgQEAKIAkJCQlCQzAyRTkxMTBFMTgzOURC
MDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzNFOEQyMTFCOTAxM0RFMDAzNDZCNTIgLyogTmF0aXZlU3RkRnVuY3Rp
b25DZWxsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyog
QjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcw
MDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQz
RjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI4
MThBMUIyNTkwMDI2RDg4RiAvKiBOb25kZXRlcm1pbmlzdGljSW5wdXQuaCBpbiBIZWFkZXJzICov
LApAQCAtNjgyNiw2ICs3MjIyLDcgQEAKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyog
T3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEREIxRjYzMThENzdEQkUwMDlC
NThBOCAvKiBPcGFxdWVSb290U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFE
M0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3QzFCREFD
REM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjgzOCwxMyArNzIzNSwxNyBAQAogCQkJCTBGRjlDRTc0MUI5Q0Q2RDAw
MDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFODM0
MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJn
ZXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWly
R2VuZXJhdGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMw
MENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MDBF
MTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVDRDQ1Nzcw
RTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDUxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNzI5QTUxNjZBRDM1MTAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJC
eXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAv
KiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFB
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmls
ZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJDMTY2QUQzNjAw
MDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLApAQCAt
Njg2NiwxMCArNzI2NywxMyBAQAogCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9w
ZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYw
MUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NDFCREFDREM3
MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzgwQTIx
OEZFMUU5ODAwMUU3MkQ5IC8qIFB1cmVOYU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVDRDIz
MUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODU4MDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU3OTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJ
bmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAv
KiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQg
LyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKQEAgLTY4ODksNiArNzI5Myw3IEBA
CiAJCQkJMEZDMzE0MTIxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNTdEMjNFRTE4OTFCNTU0MDAzMUM3RkEgLyogUmVndWxhckV4cHJlc3Npb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3Qu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFODE4MjM0MEIzMDBBODJF
NjkgLyogUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFQTE4MjM0
MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNUJBMTVGMDE4MjM0NUFGMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODk2LDYgKzczMDEsNyBAQAogCQkJCUE1QkExNUVEMTgy
MzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3MEIwQTlEMTFBOUI2NjQ2MDAwMTMwNkEgLyogUnVudGltZUZsYWdz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkMwNjExRjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGlt
ZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBT
YW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjkyNSw2ICs3MzMxLDcgQEAKIAkJ
CQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291
cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEEx
RiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEy
RUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICov
LApAQCAtNjk0NCw2ICs3MzUxLDcgQEAKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyog
U3RyaW5nUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQjEzNEZGMEE2MDBB
RkFEQjUgLyogU3Ryb25nLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDU3MjI4NjE0MzdFMTQwMDA1
RkRFMjYgLyogU3Ryb25nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODIxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FC
ODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRF
RTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAog
CQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjk4MCwxMCArNzM4OCwxMiBAQAogCQkJCTBGMkQ0REVBMTk4MzJEQUMwMDdE
NEIxOSAvKiBUeXBlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQjMxMTAxMTk3NUI0
NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
QjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyRDRERUMxOTgzMkRDNDAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERjAxOTgzMkRENjAwN0Q0QjE5IC8qIFR5cGVTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NEZGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3Vt
ZW50UmVnVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlG
RiAvKiB1ZGlzODZfZGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MjE1OEVCRTkx
MDA0Q0I5RkYgLyogdWRpczg2X2V4dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDQx
NThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9pbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDIw
LDggKzc0MzAsMTAgQEAKIAkJCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDI2MTU4NTNDRTMwMDRBNEU3RCAvKiBXYXRjaHBv
aW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQzEzNEZGMEE2MDBBRkFEQjUgLyogV2Vh
ay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2
RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QkZDRTY5MTBDREIxRkMw
MDM2NENDRSAvKiBXZWFrR0NNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEODZB
OTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzA0Myw5ICs3NDU1LDEyIEBACiAJCQkJOTk1OUU5MkUxQkQxN0ZBNDAw
MUFBNDEzIC8qIHh4ZC5wbCBpbiBIZWFkZXJzICovLAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVG
N0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZF
N0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzMTFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODU4MTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjQzMTJEQjhBODEwMEE5RkU3QiAvKiBZYXJy
U3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC03NTI3LDYgKzc5NDIsNyBAQAogCQkJCTBGNTVG
MEY0MTREMTA2MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9j
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJN
QXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1MUUz
NSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUMwMjg1QzE3
MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzUz
NCw4ICs3OTUwLDEwIEBACiAJCQkJQTdBOEFGMzQxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVm
ZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5OUQ0MTg0RUUzMTgwMDlDMTBBQiAvKiBB
cnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdB
OEFGMzYxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUzRDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkYxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5Q29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdCREFFQzgxN0Y0RUExNDAwRjYxNDBDIC8q
IEFycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY2Mzk0NTQxNUQwNzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlDMDEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNEU1NDAxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2Vt
Ymx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1NTYsOCArNzk3NCwxMCBAQAogCQkJ
CTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjJFQzlCQjYxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ2MUI4NEZCNDYwMDE4MDFGQSAvKiBDYWxsRnJh
bWVTaHVmZmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxMzFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDUxQjg0
RkI0MDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNo
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8q
IENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4
NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjI3NjczMjMx
QjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzU3MCw2
ICs3OTkwLDcgQEAKIAkJCQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3Jp
Z2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBD
b2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU5MzFCREIxRTEwMDA4MEZG
NzQgLyogQWlyR2VuZXJhdGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY5MTREMjc5
NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5
NDNDMTY2NzYzMTMwMEQ2MTk3MSAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOEY5NDQyMTY2NzYzMzUwMEQ2MTk3MSAvKiBDb2RlVHlwZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc1NzcsNiArNzk5OCw3IEBACiAJCQkJQTcwOUYyRjIxN0EwQUMyQTAw
NTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUzQTMz
MTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRpb25SZXN1
bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMjEwN0VDMzc2MDA0MjdB
NDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZGQzc1MDE5NjExMEE4
MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZC
MTZEODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC03NjA0LDYgKzgwMjYsNyBAQAogCQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAv
KiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU1
MDY4NjcxQUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NThEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fi
c3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MDExQjYxOEFBRjAwQzgw
RTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjE4RDNDRjFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVT
dHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYxMyw2ICs4MDM2LDcg
QEAKIAkJCQkwRjYzOTQ4NDE1RTQ4MTE4MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3RDlBMjk0MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdG
MSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODcxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlD
RTIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNBRDgg
LyogREZHQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MjEsNiArODA0NSw3IEBA
CiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmls
aXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8q
IERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQ2MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0NEM5
OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOUQzNjk0MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0YxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJp
emUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjU4LDYgKzgwODMsNyBAQAogCQkJCTJBODgwNjc4
MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyRkNDRjkxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
bGxvY2F0ZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkx
MDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODQxNjgx
QkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3MDAsMTQgKzgxMjYsMTcgQEAKIAkJCQkwRkMwOTc3
MjE0NjkzQUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNv
bW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM5MkM4OTFCNDYxODg0MDA4NDQ3MjggLyog
REZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzUxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRkM5QUExNjgxQTNC
MzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyMzVCRUQxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYyMzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhh
bnRvbUluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVCMTRFRjkw
QUQwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwRjFC
REFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYyQjlDRUExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3OEE5NzdBMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQkUwRjc0MTZDMURCMDkwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5q
ZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUQxNEVGOTBCMzAwQzcy
NTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1i
ZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1IC8q
IERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYy
MTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03
NzI1LDYgKzgxNTQsOCBAQAogCQkJCTBGQzIwQ0I1MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJl
bmd0aFJlZHVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGODkzQkRCMTkzNkUy
M0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzkwODU1MTlBMjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRp
b25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzNDFCREFDREFDMDA4MEZGNzQg
LyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyOTFCREFD
REFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZD
Q0ZFMThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzUyLDYgKzgxODMsNyBAQAogCQkJCTJB
ODM2Mzg1MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTk5RTQ1QTI1MThBMUIyNTkwMDI2RDg4RiAvKiBFbmNvZGVkVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzcxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9y
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDODEwN0VDMzc2MDA0MjdBNDggLyog
RXJyb3JDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUI1OEMxNDE4N0I4QjE2
MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUM5MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzc5Niw2ICs4MjI4LDcgQEAKIAkJCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyog
RlRMTGluay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQg
LyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEYxNzA1MTNEQjAw
QkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyQjlDRjgxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzgwMyw2ICs4MjM2LDcgQEAKIAkJCQkwRkVBMEEyQTE3
MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1
MzI5MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZl
cnl0aGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFCMTE4MTYzNUYzMDA1MjJGMzkg
LyogRlRMU2xvd1BhdGhDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIzMTgxNjM1
RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY5RDMzOUExODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc4MzUsNiArODI2OSw3IEBACiAJCQkJQTVGRDAwNzUxODlCMDM4QzAwNjMzMjMxIC8q
IElkZW50aWZpZXJzRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVGOEJDRDE1NzU0
NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMTNFMDRFMTYxNjRBMUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJl
ZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8q
IEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjhCREVBMUFENENG
NzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg0Miw2
ICs4Mjc3LDcgQEAKIAkJCQk5RUE1QzdBMjE5MEYwODg3MDA1MDhFQkUgLyogSW5pdGlhbGl6ZUxM
Vk1NYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDgxOTBGMDIxRTAwMUE5MUI1IC8q
IEluaXRpYWxpemVMTFZNUE9TSVguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDcxOTBG
MDFBNTAwMUE5MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1N0IxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3RlZFNj
cmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyog
SW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OEUzNTkxMTg2MERF
Q0YwMDFGMjRGRSAvKiBJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03
ODUzLDYgKzgyODksNyBAQAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0
b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMw
MEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTMyNDM4NzE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNo
ZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM3MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwODExODlCMTkxQTAwNjMz
MjMxIC8qIEluc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdE
MjNFNTE4OTBDRUJGMDAzMUM3RkEgLyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTMyNDM4OTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRl
bmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MDksNiArODM0Niw3IEBACiAJ
CQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQwRjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGODkyMEE1MDhCMTAwMDA1RjA2MSAv
KiBKU0NhbGxiYWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NkYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEFCREY2MDBB
NDM3RkVGMDBFQ0NBMDEgLyogSlNDYWxsYmFja09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2NTdDRjQ1ODE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdEODAxQTgxODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzkxNiw2ICs4MzU0LDggQEAKIAkJCQkxNDdGMzlENjEwN0VDMzc2MDA0MjdB
NDggLyogSlNDSlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRkNFNDBBNTFFNDZC
MDAwNUYwNjEgLyogSlNDbGFzc1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NzE4
QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTkwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gaW4g
U291cmNlcyAqLywKIAkJCQkxNEJENUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0UmVm
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjAyOEI2MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NU
ZXN0UnVubmVyVXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTI2LDE2ICs4MzY2LDE5IEBA
CiAJCQkJRkUzODRFRTcxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJv
bm1lbnRSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAwNURC
QzhEIC8qIEpTRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MUQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3OTdFMDdB
OTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDIxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTR2xvYmFsT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDg1MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0ds
b2JhbE9iamVjdENvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUMzQTFBNTE4
QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTk0NTU5MjE4MjQ3NDQ3MDBDQzM4NDMgLyogSlNHbG9i
YWxPYmplY3REZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U5MTg5MUIw
NzcwMDMxQzdGQSAvKiBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTAwN0MwMTg3Q0MzQzYwMEIzODg3OSAvKiBK
U0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUwRTRCNjMxODgwOURENTAwNjhBNDZEIC8qIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTI5MTg4RjEwNTkwMDExMEYxNCAvKiBKU0dsb2Jh
bE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTIz
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEz
RTVCRjE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUxM0U1QzExODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDgwMUI4NDI5QTQwMDQx
Mzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5NTQsNiAr
ODM5Nyw3IEBACiAJCQkJRTMxOENCQzAxQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFtZXNw
YWNlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzOURBNEE2MUI3RThCN0MwMDg0RjMz
QSAvKiBKU01vZHVsZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNFOEQxQzFCOTAx
M0MzMDAzNDZCNTIgLyogSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNPYmplY3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0
UmVmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzk2Nyw2ICs4NDExLDcgQEAKIAkJCQlFM0VGODg3
NDFCNjZERjIzMDAzRjI2Q0IgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTUyQzM3RjFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNwZWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTI4RkYzQjE4QUM0QUVD
MDBCOENGMTIgLyogSlNSZXBsYXlJbnB1dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRB
RTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdD
MEM0QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNzk5NSw2ICs4NDQwLDcgQEAKIAkJCQk3MDlGQjg2NzFBRTMzNUM2MDAzOUQwNjkgLyogSlNX
ZWFrU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAv
KiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2
RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMDIsOSArODQ0OCwxMiBAQAogCQkJ
CTE0OEYyMUIwMTA3RUM1NDEwMDQyRUMyQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYgLyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODU3RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVj
dExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8q
IExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZF
MjcyIC8qIExMSW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODRGRTFCREFDREFD
MDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMzhCMDExMTdDRjA3ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY0NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50RXhjZXB0aW9u
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyogTExJ
bnRTbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDEzLDYgKzg0NjIsNyBAQAogCQkJ
CUE3RTVBQjM3MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJw
cmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTWVtb3J5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAw
M0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVC
M0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBp
biBTb3VyY2VzICovLApAQCAtODAyMiwxMCArODQ3MiwxMiBAQAogCQkJCUE3QTRBRTA4MTc5NzNC
MjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNzAwODczOTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTc0REVGOTMxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJv
dG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3M0QxN0NCRThEMzAw
QzNFNjQzIC8qIE1hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkI5MTZDNTE0
REEwNDBDMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MkQ2RjA4MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQwQTQ4NDFBOTA1MUFGMDBENzNDQ0EgLyogTWF0aENv
bW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyog
TWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwNjQsMTcgKzg1MTYsMjEgQEAKIAkJ
CQkwRkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkY3MjlBRTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29k
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMjkxNjc3MUMzMzAwOUNDQjA3IC8qIFBy
b2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwQjFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRjcyOUFGMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMTE2NkFEMzVDMDAwRjVC
QTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjcyOUIyMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFiYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMTkwQ0FDMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVh
c29uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2NkFEMzVD
MDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5
QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhp
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJv
ZmlsZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2NzcxQzNB
MDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBN0ZCNjBBNDEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVydHlE
ZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REU4MTA3RUM3RTcwMDY1MDQ0
NiAvKiBQcm9wZXJ0eVNsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQURFMzlGRkYxNkREMTQ0
QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDgzLDEw
ICs4NTM5LDEyIEBACiAJCQkJMEYxNUNEMjIxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFn
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzQjRBOTE4QjkyQzREMDAxNzhB
M0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MkIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYw
QUMzMTY3NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUUzMzYzN0E1MUI2MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODU3ODFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4
cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAv
KiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdF
QzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
ODEwMCw2ICs4NTU4LDcgQEAKIAkJCQlBNUJBMTVFOTE4MjM0MEIzMDBBODJFNjkgLyogUmVtb3Rl
SW5zcGVjdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OEYxODI0NUVGRDAwQ0MzODQz
IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVC
QTE1RUMxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0
aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q2hlY2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUVFMTgyMzQwQjQwMEE4
MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyNEU1NTAxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNTI3NzczREUxQUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtODExOCw2ICs4NTc3LDcgQEAKIAkJCQlBNTRDRjJGOTE4NEVBRURBMDAyMzdG
MTkgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NENGMkY1MTg0RUFC
MjQwMDIzN0YxOSAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5OURB
NTE3RDEyODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1ODUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTc5MERENkQxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0ZXJhdG9y
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REExMTdEMTI4NDgwMDVGNUZG
OSAvKiBTZXRQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRTk4NDMxQTg5MjI3
NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODEz
Miw2ICs4NTkyLDcgQEAKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRl
ZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUVBRjExNzk4N0FCNjAwMjk5REIyIC8q
IFN0YWNrVmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzMwQjYxMzEyNTAwNjhGMDA5
RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZF
Qzg1MjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0NDY5REVCMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUwNDQ2
IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxNDgsNiArODYwOSw3IEBA
CiAJCQkJNzA1QjQxQUQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTcwNUI0MUFGMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8qIFN5
bWJvbFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzRjFCREFDREFDMDA4
MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjgxNTg1
Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUNB
NjA3MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJTZXQuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC04MTc2LDYgKzg2MzgsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIw
MEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZG
MUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4MzFCREFDREM3MDA4MEZGNzQgLyogQWly
UGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyQzFBQTkwOTU2MDBEMzNC
MzMgLyogVmFyT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjBDMjU5MUE4MDEzQUIw
MERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4RTNB
NTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODE5NSw2ICs4
NjU4LDcgQEAKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwOUZCODZCMUFFMzM1QzYwMDM5RDA2OSAvKiBX
ZWFrU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBNEVDOTBCMTg2MEQ2QzIw
MDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZF
Qzg1N0QxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QUIzQTE3OTlFNEIyMDBEMjgzM0QgLyogWDg2RGlz
YXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0
RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCShy
ZXZpc2lvbiAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5B
QkxFKEFTU0VNQkxFUikKIAorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogY29uc3QgZG91YmxlIE1hY3JvQXNzZW1ibGVyOjp0d29Ub1RoZTMyID0gKGRv
dWJsZSkweDEwMDAwMDAwMHVsbDsKQEAgLTQ3LDUgKzQ5LDcwIEBAIHZvaWQgTWFjcm9Bc3NlbWJs
ZXI6OmNhbGxQcm9iZShzdGQ6OmZ1bmMKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCkK
K3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpFcXVhbDoK
KyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBN
YWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTm90RXF1YWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlOgorICAgICAg
ICBvdXQucHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpBYm92ZU9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQWJvdmVPckVxdWFsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpCZWxvdzoKKyAgICAg
ICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fz
c2VtYmxlcjo6QmVsb3dPckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkJlbG93T3JFcXVhbCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW46
CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbDoKKyAgICAgICAgb3V0LnBy
aW50KCJHcmVhdGVyVGhhbk9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFj
cm9Bc3NlbWJsZXI6Okxlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWw6
CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW5PckVxdWFsIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRp
b24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVy
OjpPdmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJPdmVyZmxvdyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkOgorICAgICAgICBvdXQucHJpbnQo
IlNpZ25lZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6UG9z
aXRpdmVPclplcm86CisgICAgICAgIG91dC5wcmludCgiUG9zaXRpdmVPclplcm8iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Olplcm86CisgICAgICAgIG91dC5w
cmludCgiWmVybyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6
Tm9uWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJOb25aZXJvIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lv
biAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTYsOCArMTU5NiwxOSBAQCBwdWJsaWM6CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24pOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uKTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKICNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKK25hbWVzcGFjZSBKU0MgeworCiAv
LyBJZiB0aGVyZSBpcyBubyBhc3NlbWJsZXIgZm9yIHRoaXMgcGxhdGZvcm0sIGF0IGxlYXN0IGFs
bG93IGNvZGUgdG8gbWFrZSByZWZlcmVuY2VzIHRvCiAvLyBzb21lIG9mIHRoZSB0aGluZ3MgaXQg
d291bGQgb3RoZXJ3aXNlIGRlZmluZSwgYWxiZWl0IHdpdGhvdXQgZ2l2aW5nIHRoYXQgY29kZSBh
bnkgd2F5CiAvLyBvZiBkb2luZyBhbnl0aGluZyB1c2VmdWwuCkBAIC0xNjExLDYgKzE2MjIsOCBA
QCBwdWJsaWM6CiAgICAgZW51bSBGUFJlZ2lzdGVySUQgeyBOb0ZQUmVnaXN0ZXIgfTsKIH07CiAK
K30gLy8gbmFtZXNwYWNlIEpTQworCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKIAogI2Vu
ZGlmIC8vIE1hY3JvQXNzZW1ibGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6
CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
IyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KworbWF0Y2hlciBBZGRyZXNzTWF0Y2hlcgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBC
MyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNzb2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBp
bnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5ldmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0
MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bwor
IyBBZGQoeCwgY29uc3QxICsgY29uc3QyKS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNv
bnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRk
KHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBpbiB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRp
b25zIGFib3V0IHRoZXNlIG9wdGltaXphdGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBB
bHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0
LWluIG9mZnNldCwgd2UKKyMgZG9uJ3QgbmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0
IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQgaW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMK
KyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVz
dCBCYXNlSW5kZXggZm9ybXMuCisKK0FkZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2Fs
ZSksIGJhc2UpCitBZGRTaGlmdDIgPSBBZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQor
CitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK0RpcmVjdApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVn
VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1lbnRSZWdWYWx1ZSgpCit7Cit9CisK
K3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0FyZ3VtZW50UmVnVmFsdWVfaAorI2RlZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRl
ICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3Vt
ZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9Cisg
ICAgCisgICAgfkFyZ3VtZW50UmVnVmFsdWUoKTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNv
bnN0IHsgcmV0dXJuIG1fcmVnOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIEFyZ3VtZW50UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIFJlZyByZWcpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCBy
ZWcuaXNHUFIoKSA/IHBvaW50ZXIoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVn
KHJlZykKKyAgICB7CisgICAgfQorCisgICAgUmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNB
cmd1bWVudFJlZ1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFz
aWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFz
aWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNC
YXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6
OmR1bXBQcmVmaXggPSAiIyI7CisKK0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5k
ZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2luZGV4KGluZGV4KQorICAgICwgbV9mcmVx
dWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9
CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVl
cy5hcHBlbmQodmFsdWUpOworfQorCitib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJh
c2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywg
YmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxv
Y2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNl
c3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsK
K30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1
ZW5jeSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0
LnByaW50KCIgICAgIiwgQjM6OmRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0Jhc2ljQmxvY2sKKyNkZWZpbmUgQjNCYXNpY0Jsb2NrCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsK
KworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9j
ayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBW
ZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayos
IDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ss
IDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0Y2hlcyBDb250cm9sVmFsdWU6OlN1Y2Nlc3Nv
ckxpc3QKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisgICAg
fkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQorCisgICAgVmFsdWVMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFs
dWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1f
dmFsdWVzLmVuZCgpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBh
dChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZh
bHVlKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKworICAg
IFZhbHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFs
dWUqJiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1
ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0
JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3KFByb2NlZHVy
ZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgY29uc3Q7
CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7Cisg
ICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOworICAgIGNvbnN0
IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdDsKKyAgICBTdWNjZXNzb3JMaXN0JiBz
dWNjZXNzb3JzKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBp
bmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGlu
ZGV4KTsKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+
IHN1Y2Nlc3NvckJsb2NrcygpOworICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNC
bG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkgY29uc3Q7CisKKyAg
ICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29y
cy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayom
IHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRl
eF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsg
cmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3Nv
cnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorCisgICAgYm9vbCBhZGRQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7
CisgICAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9j
ayogdG8pOworCisgICAgZG91YmxlIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVl
bmN5OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRl
ZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAg
IEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgUHJlZGVjZXNzb3JM
aXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNz
IERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNv
bnN0IEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERl
ZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAg
ICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNp
Y0Jsb2NrCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
a0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jh
c2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNC
bG9ja0lubGluZXNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0NvbnRy
b2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5
cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pOworICAg
IGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Vuc2lnbmVkIEJhc2lj
QmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENv
bnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitGcmVxdWVudGVkQmxvY2sgQmFz
aWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBs
YXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworRnJlcXVl
bnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCit7CisgICAg
cmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQor
Citjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3Jz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nl
c3NvcnMoKTsKK30KKworQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3Vj
Y2Vzc29ycygpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNj
ZXNzb3JzKCk7Cit9CisKK0Jhc2ljQmxvY2sqIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKHVu
c2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2Nr
KCk7Cit9CisKK0Jhc2ljQmxvY2sqJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25l
ZCBpbmRleCkKK3sKKyAgICByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOworfQorCitT
dWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+
IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpCit7CisgICAgcmV0dXJuIFN1Y2Nlc3NvckNv
bGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4oc3VjY2Vzc29ycygpKTsKK30KKwor
U3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBCYXNpY0Jsb2NrOjpT
dWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAoreworICAg
IHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nl
c3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lubGlu
ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRp
bHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2tVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrVXRp
bHNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tVdGlsc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIGFkZFByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAgICBh
dXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisKKyAgICBpZiAocHJl
ZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vzc29yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcHJlZGVjZXNzb3JzLmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlbW92ZVByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAgICBh
dXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
cHJlZGVjZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVkZWNlc3Nv
cnNbaS0tXSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnMu
cmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKCFwcmVkZWNlc3NvcnMuY29udGFpbnMo
cHJlZGVjZXNzb3IpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4K
K2Jvb2wgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+
cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29y
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IGZyb20pIHsK
KyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpXSA9IHRvOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIHJl
Y29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCByZW1vdmVzIGJsb2NrcyB0aGF0IGFyZW4ndCByZWFj
aGFibGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgordm9pZCByZXNldFJlYWNoYWJp
bGl0eShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQoreworICAg
IC8vIENsZWFyIGFsbCBwcmVkZWNlc3NvciBsaXN0cyBmaXJzdC4KKyAgICBmb3IgKGF1dG8mIGJs
b2NrIDogYmxvY2tzKQorICAgICAgICBibG9jay0+cHJlZGVjZXNzb3JzKCkucmVzaXplKDApOwor
CisgICAgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+
PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2Nrc1swXS5nZXQoKSk7CisgICAgd2hp
bGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAg
ICAgICAgIGlmICh3b3JrbGlzdC5wdXNoKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3Vj
Y2Vzc29yLT5wcmVkZWNlc3NvcnMoKS5hcHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoYmxvY2tzW2ldLT5wcmVkZWNlc3NvcnMoKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBibG9ja3NbaV0gPSBudWxscHRyOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2Nr
VXRpbHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlz
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3Jr
bGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jsb2NrV29ya2xpc3RfaAor
I2RlZmluZSBCM0Jsb2NrV29ya2xpc3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3
dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVm
IEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxv
Y2tXb3JrbGlzdDsKKworLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91bGQg
cmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNp
bmcgQmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2NrKiwgVD47CisKKy8vIEV4dGVu
ZGVkIGJsb2NrIHdvcmtsaXN0IGlzIHVzZWZ1bCBmb3IgZW5xdWV1ZWluZyBzb21lIG1ldGEtZGF0
YSBhbG9uZyB3aXRoIHRoZSBibG9jay4gSXQgYWxzbworLy8gcGVybWl0cyBmb3JjaWJseSBlbnF1
ZXVlaW5nIHRoaW5ncyBldmVuIGlmIHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uIEl0
J3MgdXNlZnVsIGZvcgorLy8gdGhpbmdzIGxpa2UgYnVpbGRpbmcgYSBzcGFubmluZyB0cmVlLCBp
biB3aGljaCBjYXNlIFQgKHRoZSBhdXhpbGlhcnkgcGF5bG9hZCkgd291bGQgYmUgdGhlCisvLyBz
dWNjZXNzb3IgaW5kZXguCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2Nr
V29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRl
eFNldDxCYXNpY0Jsb2NrPj47CisKK3R5cGVkZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7
CisKK3R5cGVkZWYgR3JhcGhOb2RlV2l0aE9yZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRl
cjsKKwordHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5k
ZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
QmxvY2tXb3JrbGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisKK3Vuc2lnbmVk
IG51bUIzQXJncyhJbnN0JiBpbnN0KQoreworICAgIHN3aXRjaCAoaW5zdC5vcmlnaW4tPm9wY29k
ZSgpKSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2Ug
Q2hlY2tNdWw6CisgICAgICAgIC8vIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgICAgIHJldHVybiAz
OworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAg
IH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0NoZWNrU3BlY2lhbDo6Q2hlY2tT
cGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncykKKyAgICA6IG1fY2hl
Y2tPcGNvZGUob3Bjb2RlKQorICAgICwgbV9udW1DaGVja0FyZ3MobnVtQXJncykKK3sKK30KKwor
Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKCkKK3sKK30KKworSW5zdCBDaGVja1NwZWNpYWw6
OmhpZGRlbkJyYW5jaChjb25zdCBJbnN0JiBpbnN0KSBjb25zdAoreworICAgIEluc3QgaGlkZGVu
QnJhbmNoKG1fY2hlY2tPcGNvZGUsIGluc3Qub3JpZ2luKTsKKyAgICBoaWRkZW5CcmFuY2guYXJn
cy5yZXNpemUobV9udW1DaGVja0FyZ3MpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbnVtQ2hl
Y2tBcmdzOyBpLS07KQorICAgICAgICBoaWRkZW5CcmFuY2guYXJnc1tpXSA9IGluc3QuYXJnc1tp
ICsgMV07CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaDsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6
OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGhpZGRlbkJyYW5jaChpbnN0KS5mb3JFYWNoQXJn
KGNhbGxiYWNrKTsKKyAgICBmb3JFYWNoQXJnSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hl
Y2tBcmdzICsgMSwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29sIENoZWNrU3BlY2lhbDo6aXNW
YWxpZChJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuaXNWYWxp
ZEZvcm0oKQorICAgICAgICAmJiBpc1ZhbGlkSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hl
Y2tBcmdzICsgMSwgaW5zdCk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayhJ
bnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBpZiAoYXJnSW5kZXggPj0gMSAm
JiBhcmdJbmRleCA8IDEgKyBtX251bUNoZWNrQXJncykKKyAgICAgICAgcmV0dXJuIGhpZGRlbkJy
YW5jaChpbnN0KS5hZG1pdHNTdGFjayhhcmdJbmRleCAtIDEpOworICAgIHJldHVybiBhZG1pdHNT
dGFja0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGFyZ0lu
ZGV4KTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENoZWNrU3BlY2lhbDo6Z2VuZXJhdGUoSW5z
dCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KQor
eworICAgIENDYWxsSGVscGVyczo6SnVtcCBmYWlsID0gaGlkZGVuQnJhbmNoKGluc3QpLmdlbmVy
YXRlKGppdCwgY29udGV4dCk7CisgICAgQVNTRVJUKGZhaWwuaXNTZXQoKSk7CisKKyAgICBWYWx1
ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKKyAg
ICBpZiAoaXNDaGVja01hdGgodmFsdWUtPm9wY29kZSgpKSkgeworICAgICAgICBpZiAodmFsdWUt
Pm9wY29kZSgpID09IENoZWNrTXVsKQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXAo
KSk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja1N1YiAmJiB2YWx1
ZS0+Y2hpbGQoMCktPmlzSW50KDApKQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6
OmNvbnN0YW50KDApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwcy5hcHBlbmQocmVw
Rm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1szXSkpOworICAgICAgICByZXBzLmFwcGVu
ZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzJdKSk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVjayk7CisgICAgICAgIHJlcHMu
YXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgxKSk7CisgICAgfQorCisgICAgYXBwZW5kUmVwc0lt
cGwoY29udGV4dCwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCByZXBzKTsKKyAgICAKKyAgICBj
b250ZXh0LmxhdGVQYXRocy5hcHBlbmQoCisgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJh
dGlvbkNvbnRleHQ6OkxhdGVQYXRoRnVuY3Rpb24+KAorICAgICAgICAgICAgWz1dIChDQ2FsbEhl
bHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKSB7CisgICAgICAgICAgICAgICAgZmFpbC5s
aW5rKCZqaXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0YWNrbWFwKiBz
dGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChzdGFj
a21hcCk7CisKKyAgICAgICAgICAgICAgICBTdGFja21hcDo6R2VuZXJhdGlvblBhcmFtcyBwYXJh
bXM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAgICAg
ICAgcGFyYW1zLnN0YWNrbWFwID0gc3RhY2ttYXA7CisgICAgICAgICAgICAgICAgcGFyYW1zLnJl
cHMgPSByZXBzOworICAgICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2tt
YXAtPm1fdXNlZFJlZ2lzdGVyczsKKworICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5tX2dlbmVy
YXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0pKTsKKworICAgIHJldHVybiBD
Q2FsbEhlbHBlcnM6Okp1bXAoKTsgLy8gQXMgZmFyIGFzIEFpciB0aGlua3MsIHdlIGFyZSBub3Qg
YSB0ZXJtaW5hbC4KK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2hlY2tPcGNvZGUsICIoIiwgbV9udW1D
aGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkIzOjpDaGVja1ZhbHVlIGxv
d2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwgIiB3aXRoICIsIG1fbnVtQ2hlY2tBcmdzLCAiIGFy
Z3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tTcGVjaWFsX2gKKyNkZWZp
bmUgQjNDaGVja1NwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ck9wY29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB3YW50IHRvIGxvd2VyIENoZWNrIGluc3RydWN0
aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2FudCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0
byBvdXIKKy8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVhZCBvZiBkb2luZyBhbnl0aGluZyBlbHNl
LiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFsIHdpbGwgcmVtZW1iZXIKKy8vIHdoaWNo
IGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBudW1iZXIgb2Yg
YXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQKKy8vIHdpbGwgY3JlYXRlIGFuIEluc3Qg
d2l0aCB0aGF0IG9wY29kZSBwbHVzIHRoZSBhcHByb3ByaWF0ZSBhcmdzIGZyb20gdGhlIG93bmlu
ZyBJbnN0IHdoZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkgb2YgdGhlIGNhbGxiYWNrcy4KKy8vCisv
LyBOb3RlIHRoYXQgZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsIHdlIGV4cGVj
dCB0aGF0IHRoZSBCMyBhcmd1bWVudHMgYXJlIHRoZSByZXZlcnNlCisvLyBvZiB0aGUgQWlyIGFy
Z3VtZW50cyAoQWRkKGEsIGIpID0+IEFkZDMyIGIsIGEpLiBFeGNlcHQ6CisvLyAtIENoZWNrU3Vi
KDAsIHgpLCB3aGljaCB0dXJucyBpbnRvIEJyYW5jaE5lZzMyIHguCisvLyAtIENoZWNrTXVsKGEs
IGIpLCB3aGljaCB0dXJucyBpbnRvIE11bDMyIGIsIGEgYnV0IHdlIHBhc3MgQW55IGZvciBhJ3Mg
VmFsdWVSZXAuCisKK2NsYXNzIENoZWNrU3BlY2lhbCA6IHB1YmxpYyBTdGFja21hcFNwZWNpYWwg
eworcHVibGljOgorICAgIENoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVk
IG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsKKworICAgIC8vIENvbnN0cnVjdHMgYW5k
IHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRoZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwg
dXNlLgorICAgIEFpcjo6SW5zdCBoaWRkZW5CcmFuY2goY29uc3QgQWlyOjpJbnN0JikgY29uc3Q7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2Nv
cGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJv
b2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFp
cjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8vIE5PVEU6IHRo
ZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhl
biByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFw
LiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEFp
cjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIEFpcjo6T3Bjb2RlIG1fY2hlY2tPcGNvZGU7CisgICAgdW5zaWduZWQgbV9udW1D
aGVja0FyZ3M7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NoZWNrU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ2hl
Y2tWYWx1ZTo6fkNoZWNrVmFsdWUoKQoreworfQorCit2b2lkIENoZWNrVmFsdWU6OmR1bXBNZXRh
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIs
IHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUg
QjNDaGVja1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQ2hlY2tWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVja1N1
YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfkNoZWNrVmFsdWUoKTsKKworICAgIFN0YWNr
bWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1
cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBD
aGVja011bC4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luLCBsZWZ0LCByaWdodCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0ludCh0eXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKGxlZnQtPnR5
cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBDaGVja0Fk
ZCB8fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2RlID09IENoZWNrTXVsKTsKKyAgICB9CisK
KyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY2RlID09IENoZWNrKTsKKyAgICB9Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM0NoZWNrVmFsdWVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
bW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1v
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNDb21tb24uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJERkdDb21t
b24uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVtcElSKCkKK3sKKyAg
ICByZXR1cm4gRlRMOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkgfHwgRlRMOjpzaG91bGRE
dW1wRGlzYXNzZW1ibHkoKSB8fCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpOworfQorCitib29s
IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEdy
YXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCkKK3sKKyAgICBy
ZXR1cm4gREZHOjp2YWxpZGF0aW9uRW5hYmxlZCgpIHx8IHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQ
aGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpCit7CisgICAg
cmV0dXJuIE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNo
b3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZVZh
bGlkYXRpb25GYWlsdXJlKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9u
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb21tb25faAorI2RlZmluZSBCM0NvbW1v
bl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworaW5saW5lIGJvb2wgaXM2NEJpdCgpIHsgcmV0dXJuIHNpemVvZih2b2lkKikgPT0gODsg
fQoraW5saW5lIGJvb2wgaXMzMkJpdCgpIHsgcmV0dXJuICFpczY0Qml0KCk7IH0KKworYm9vbCBz
aG91bGREdW1wSVIoKTsKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKTsKK2Jvb2wgc2hv
dWxkVmFsaWRhdGVJUigpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKK2Jv
b2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb21tb25faAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
Q29tbXV0YXRpdml0eS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6
QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBDb21tdXRhdGl2aXR5
IGNvbW11dGF0aXZpdHkpCit7CisgICAgc3dpdGNoIChjb21tdXRhdGl2aXR5KSB7CisgICAgY2Fz
ZSBDb21tdXRhdGl2ZToKKyAgICAgICAgb3V0LnByaW50KCJDb21tdXRhdGl2ZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBOb3RDb21tdXRhdGl2ZToKKyAgICAgICAgb3V0LnByaW50KCJO
b3RDb21tdXRhdGl2ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0
aXZpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRh
dGl2aXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21t
dXRhdGl2aXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29tbXV0YXRpdml0
eV9oCisjZGVmaW5lIEIzQ29tbXV0YXRpdml0eV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBDb21tdXRhdGl2aXR5IHsKKyAg
ICBDb21tdXRhdGl2ZSwKKyAgICBOb3RDb21tdXRhdGl2ZQorfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkNvbW11dGF0aXZpdHkpOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0NvbW11dGF0aXZpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
IyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9
IEFuZChMb2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwg
TG9hZChhZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9h
ZFplcm8xID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFpl
cm8yID0gRXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1
YWwoQW5kKGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJl
c3MpLCByaWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90
ID0gRXF1YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJW
YWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK0NvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29u
c3QzMlZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Qz
MlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Qz
MlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFsdWVf
aAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgQ29uc3QzMlZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9v
bCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdDMyOyB9Cisg
ICAgCisgICAgfkNvbnN0MzJWYWx1ZSgpOworICAgIAorICAgIGludDMyX3QgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9y
aWdpbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3QzMiwgSW50
MzIsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25zdDMyVmFsdWVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
Q29uc3Q2NFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwor
dm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDY0VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0
NjRWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3Q2NFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0
YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0
NjQ7IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVt
cE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmll
bmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25z
dDY0LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0NjRW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91
YmxlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3REb3VibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3REb3VibGVWYWx1
ZTo6fkNvbnN0RG91YmxlVmFsdWUoKQoreworfQorCit2b2lkIENvbnN0RG91YmxlVmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50ZigiJWxlIiwg
bV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91Ymxl
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3RE
b3VibGVWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQ29uc3REb3VibGVWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNv
ZGUgPT0gQ29uc3REb3VibGU7IH0KKyAgICAKKyAgICB+Q29uc3REb3VibGVWYWx1ZSgpOworICAg
IAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3REb3VibGVW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBDb25zdERvdWJsZSwgRG91YmxlLCBvcmlnaW4pCisgICAgICAgICwg
bV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBtX3ZhbHVlOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUg
PHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29u
dHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGxpc3REdW1w
KG1fc3VjY2Vzc29ycykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250
cm9sVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250
cm9sVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnRyb2xWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb250cm9sVmFs
dWVfaAorI2RlZmluZSBCM0NvbnRyb2xWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCitjbGFz
cyBDb250cm9sVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7
CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2Ug
UmV0dXJuOgorICAgICAgICBjYXNlIE9vcHM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBTd2l0Y2g6IAorICAgICAgICAgICAgLy8gVGhpcyBpcyBoZXJlIGJlY2F1c2Ug
U3dpdGNoVmFsdWUgaXMgYSBzdWJjbGFzcyBvZiBDb250cm9sVmFsdWUsIHNvIHdlIHdhbnQKKyAg
ICAgICAgICAgIC8vIHN3aXRjaFZhbHVlLT5hczxDb250cm9sVmFsdWU+KCkgdG8gcmV0dXJuIG5v
bi1udWxsLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0eXBlZGVmIFZl
Y3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICB+Q29udHJvbFZh
bHVlKCk7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9z
dWNjZXNzb3JzLnNpemUoKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBGcmVx
dWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNjZXNz
b3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25z
dCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3Jz
KCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBN
ZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3Ig
c3ViY2xhc3Nlcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQ29u
dHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCisgICAgeworICAgIH0KKworICAg
IC8vIFN1YmNsYXNzZXMgd2lsbCBwb3B1bGF0ZSB0aGlzLgorICAgIFN1Y2Nlc3Nvckxpc3QgbV9z
dWNjZXNzb3JzOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAg
ICAvLyBVc2UgdGhpcyBmb3IgT29wcy4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9w
Y29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBPb3Bz
KTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgUmV0dXJuLgorICAgIENvbnRyb2xWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHJl
c3VsdCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHJlc3Vs
dCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gUmV0dXJuKTsKKyAgICB9CisKKyAg
ICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFy
Z2V0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7
CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5h
cHBlbmQodGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNoLgorICAg
IENvbnRyb2xWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIGNvbnN0IEZyZXF1ZW50ZWRC
bG9jayYgeWVzLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIG5vKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9wY29kZSA9PSBCcmFuY2gpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHllcyk7
CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobm8pOworICAgIH0KK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzQ29udHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJl
cXVlbmN5Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZyZXF1ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSkKK3sKKyAgICBzd2l0Y2ggKGZy
ZXF1ZW5jeSkgeworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDoKKyAgICAgICAgb3V0
LnByaW50KCJOb3JtYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJlcXVlbmN5Q2xh
c3M6OlJhcmU6CisgICAgICAgIG91dC5wcmludCgiUmFyZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNGcmVxdWVuY3lDbGFzc19oCisjZGVmaW5lIEIzRnJlcXVlbmN5Q2xhc3Nf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2VudW0gY2xhc3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50OF90IHsKKyAgICAvLyBXZSBkb24n
dCBoYXZlIGFueSBoeXBvdGhlc2lzIGFib3V0IHRoZSBmcmVxdWVuY3kgb2YgdGhpcyBjb250cm9s
IGZsb3cgY29uc3RydWN0LiBUaGlzIGlzCisgICAgLy8gdGhlIGNvbW1vbiBjYXNlLiBXZSBjYW4g
c3RpbGwgdXNlIGJhc2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0aGlzIGNhc2UuCisgICAgTm9ybWFs
LAorCisgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0IHdp
bGwgYmUgcmVhY2hlZCBzdXBlciByYXJlbHkuIEl0J3MgdmFsaWQgdG8KKyAgICAvLyBwZXJmb3Jt
IG9wdGltaXphdGlvbnMgdGhhdCBwdW5pc2ggUmFyZSBjb2RlLiBOb3RlIHRoYXQgdGhlcmUgd2ls
bCBiZSBzaXR1YXRpb25zIHdoZXJlIHlvdQorICAgIC8vIGhhdmUgdG8gc29tZWhvdyBjb25zdHJ1
Y3QgYSBuZXcgZnJlcXVlbmN5IGNsYXNzIGZyb20gYSBtZXJnaW5nIG9mIG11bHRpcGxlIGNsYXNz
ZXMuIFdoZW4KKyAgICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVyIGNob29zZSBSYXJlOyBhbHdheXMg
Z28gd2l0aCBOb3JtYWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UKKyAgICAvLyByZWFs
bHkgZG8gcHVuaXNoIFJhcmUgY29kZSB2ZXJ5IGJhZGx5LgorICAgIFJhcmUKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJl
YW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkZyZXF1ZW5j
eUNsYXNzKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNGcmVxdWVuY3lDbGFzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQjNGcmVxdWVudGVkQmxv
Y2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFz
aWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZy
ZXF1ZW50ZWRCbG9jazsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJh
dGUuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgor
I2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHBy
b2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgQWlyOjpDb2RlIGNvZGU7CisgICAg
Z2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworICAgIEFpcjo6Z2VuZXJhdGUoY29kZSwg
aml0KTsKK30KKwordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBaXI6
OkNvZGUmIGNvZGUpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFs
aWRhdGUocHJvY2VkdXJlLCAiaW5pdGlhbCIpOworCisgICAgaWYgKHNob3VsZER1bXBJUigpKSB7
CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgQjM6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9j
ZWR1cmUpOworICAgIH0KKyAgICAKKyAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9u
cyBoZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA1MDcKKworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKHBy
b2NlZHVyZSwgImZpbmFsIik7CisgICAgCisgICAgaWYgKHNob3VsZER1bXBJUigpKSB7CisgICAg
ICAgIGRhdGFMb2coIkIzIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2co
cHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICBsb3dlclRvQWlyKHByb2NlZHVyZSwgY29kZSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNHZW5lcmF0ZV9oCisjZGVmaW5lIEIzR2VuZXJhdGVfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsK
KworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworbmFtZXNwYWNlIEFpciB7IGNs
YXNzIENvZGU7IH0KKworLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBp
dCBpbi1wbGFjZSwgYW5kIGdlbmVyYXRlcyBpdCB0byBtYWNoaW5lIGNvZGUgYnkgZmlyc3QKKy8v
IGludGVybmFsbHkgY29udmVydGluZyB0byBhbiBBaXI6OkNvZGUgYW5kIHRoZW4gZ2VuZXJhdGlu
ZyB0aGF0LgorSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmLCBDQ2Fs
bEhlbHBlcnMmKTsKKworLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBp
dCBpbi1wbGFjZSwgYW5kIGxvd2VycyBpdCB0byBBaXIuIFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQor
Ly8gdGhlIEFpciB0byBtYWNoaW5lIGNvZGUgdXNpbmcgQWlyOjpnZW5lcmF0ZSgpLiBOb3RlIHRo
YXQgYW4gQWlyOjpDb2RlIHdpbGwgaGF2ZSBwb2ludGVycyBpbnRvIHRoZQorLy8gQjM6OlByb2Nl
ZHVyZSwgc28geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIEIzOjpQcm9jZWR1cmUgb3V0bGl2
ZXMgdGhlIEFpcjo6Q29kZS4KK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNv
ZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNHZW5lcmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19o
CisjZGVmaW5lIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVxdWVu
dGVkIGJsb2NrIGlzIGEgdHVwbGUgb2YgQmFzaWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNzLiBJ
dCdzIHVzdWFsbHkgdXNlZCBhcyBhCisvLyBzdWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2soCisgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbnVsbHB0ciwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVlbmN5
Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fZnJl
cXVlbmN5KGZyZXF1ZW5jeSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYmxvY2sgPT0gb3RoZXIubV9ibG9jaworICAgICAgICAgICAgJiYgbV9mcmVxdWVu
Y3kgPT0gb3RoZXIubV9mcmVxdWVuY3k7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IEdlbmVyaWNGcmVx
dWVudGVkQmxvY2soKTsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fYmxvY2s7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVybiBtX2Js
b2NrOyB9CisgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9m
cmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGZyZXF1ZW5jeSgpICE9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpCisg
ICAgICAgICAgICBvdXQucHJpbnQoZnJlcXVlbmN5KCksICI6Iik7CisgICAgICAgIG91dC5wcmlu
dChwb2ludGVyRHVtcChtX2Jsb2NrKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2s7CisgICAgRnJlcXVlbmN5Q2xhc3MgbV9mcmVxdWVuY3k7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNJbmRleE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luZGV4TWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNJbmRleE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4TWFw
X2gKKyNkZWZpbmUgQjNJbmRleE1hcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8g
VGhpcyBpcyBhIG1hcCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBl
ZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFs
dWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFs
dWVzIGNhbiBoYXZlIHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qg
b2YgVmFsdWVzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xh
c3MgSW5kZXhNYXAgeworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXpl
ID0gMCkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6
ZShzaXplKTsKKyAgICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgIH0KKyAgICAKKyAg
ICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgIH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgVmVjdG9yPFZhbHVlPiBtX3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzSW5kZXhNYXBfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2luY2x1
ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0aGlu
Z3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNpY0Js
b2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3Jl
YXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5IHNw
YXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8gSWYg
eW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Jsb2Nr
Pi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluZGV4
U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
YWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUtPmlu
ZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gbV9zZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBjbGFzcyBJdGVyYWJsZSB7CisgICAgcHVi
bGljOgorICAgICAgICBJdGVyYWJsZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwg
Y29uc3QgSW5kZXhTZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKGNvbGxlY3Rp
b24pCisgICAgICAgICAgICAsIG1fc2V0KHNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29sbGVj
dGlvblR5cGUmIGNvbGxlY3Rpb24sIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRv
ciBpdGVyKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAg
ICAgICAgICAgICAgICwgbV9pdGVyKGl0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRlcik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtX2l0ZXIrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faXRl
ciA9PSBvdGhlci5tX2l0ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSogbV9jb2xs
ZWN0aW9uOworICAgICAgICAgICAgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9y
IG1faXRlcjsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuYmVnaW4oKSk7IH0KKyAgICAgICAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3Nl
dC5lbmQoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBl
JiBtX2NvbGxlY3Rpb247CisgICAgICAgIGNvbnN0IEluZGV4U2V0JiBtX3NldDsKKyAgICB9Owor
CisgICAgLy8gRm9yIGJhc2ljIGJsb2NrcywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVl
cyhwcm9jZWR1cmUpOworICAgIC8vCisgICAgLy8gRm9yIHZhbHVlcywgeW91IGRvOgorICAgIC8v
IGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUudmFsdWVzKCkpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENvbGxlY3Rpb25UeXBlPgorICAgIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPiB2YWx1ZXMo
Y29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+KGNvbGxlY3Rpb24pOworICAgIH0KKworICAg
IGNvbnN0IEJpdFZlY3RvciYgaW5kaWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbW1h
UHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBpbmRpY2VzKCkuc2V0
Qml0cygpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBUOjpkdW1wUHJlZml4LCBpbmRl
eCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJpdFZlY3RvciBtX3NldDsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNJbmRleFNldF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJB
aXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQWRkcmVzc01hdGNoZXIuaCIKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisj
aW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRl
ICJCM0xvd2VyaW5nTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNs
dWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUg
IkIzVXNlQ291bnRzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2lu
ZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2UgeworCitjbGFzcyBMb3dlclRvQWlyIHsKK3B1
YmxpYzoKKyAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQor
ICAgICAgICA6IHZhbHVlVG9UbXAocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKKyAgICAgICAg
LCBibG9ja1RvQmxvY2socHJvY2VkdXJlLnNpemUoKSkKKyAgICAgICAgLCB1c2VDb3VudHMocHJv
Y2VkdXJlKQorICAgICAgICAsIGFkZHJlc3NTZWxlY3RvcigqdGhpcykKKyAgICAgICAgLCBsb3dl
cmluZ1NlbGVjdG9yKCp0aGlzKQorICAgICAgICAsIHByb2NlZHVyZShwcm9jZWR1cmUpCisgICAg
ICAgICwgY29kZShjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisgICAgewor
ICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZSkKKyAgICAgICAg
ICAgIGJsb2NrVG9CbG9ja1tibG9ja10gPSBjb2RlLmFkZEJsb2NrKGJsb2NrLT5mcmVxdWVuY3ko
KSk7CisKKyAgICAgICAgLy8gTG93ZXIgZGVmcyBiZWZvcmUgdXNlcyBvbiBhIGdsb2JhbCBsZXZl
bC4gVGhpcyBpcyBhIGdvb2QgaGV1cmlzdGljIHRvIGxvY2sgZG93biBhCisgICAgICAgIC8vIGhv
aXN0ZWQgYWRkcmVzcyBleHByZXNzaW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBpbnRv
IHRoZSBsb29wLgorICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVy
ZS5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUu
CisgICAgICAgICAgICBpbnN0cy5yZXNpemUoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFByb2Nlc3MgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3Jl
IGRlZnMuIFRoYXQncyB3aGF0IGFsbG93cyB1cworICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0
dGVybnMgZWZmZWN0aXZlbHkuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgaW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0
PigpKTsKKyAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBibG9jay0+YXQoaSk7CisgICAg
ICAgICAgICAgICAgcnVuTG93ZXJpbmdNYXRjaGVyKGN1cnJlbnRWYWx1ZSwgbG93ZXJpbmdTZWxl
Y3Rvcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGlu
c3RydWN0aW9ucy4gaW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBw
cm9jZXNzCisgICAgICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgorICAgICAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gaW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgZm9yIChJ
bnN0JiBpbnN0IDogaW5zdHNbaV0pCisgICAgICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1ti
bG9ja10tPmFwcGVuZEluc3QoV1RGOjptb3ZlKGluc3QpKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3Jy
ZWN0bHkuCisgICAgICAgICAgICBBU1NFUlQoYmxvY2stPnN1Y2Nlc3NvcnMoKSA8PSAyKTsKKyAg
ICAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNz
b3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNz
b3JzKCkuYXBwZW5kKGJsb2NrVG9CbG9ja1tzdWNjZXNzb3JdKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFRtcCB0bXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgVG1wJiB0bXAgPSB2
YWx1ZVRvVG1wW3ZhbHVlXTsKKyAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAgICB0bXAgPSBj
b2RlLm5ld1RtcChpc0ludCh2YWx1ZS0+dHlwZSgpKSA/IEFyZzo6R1AgOiBBcmc6OkZQKTsKKyAg
ICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGdpdmVzIHlvdSB0aGUgYWRk
cmVzcyBvZiB0aGUgZ2l2ZW4gTG9hZCBvciBTdG9yZS4gSWYgaXQncyBub3QgYSBMb2FkIG9yIFN0
b3JlLCB0aGVuCisgICAgLy8gaXQgcmV0dXJucyBBcmcoKS4KKyAgICBBcmcgYWRkcihWYWx1ZSog
bWVtb3J5VmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogdmFsdWUgPSBtZW1vcnlW
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gQXJnKCk7CisKKyAgICAgICAgcnVuQWRkcmVzc01hdGNoZXIodmFsdWUtPmNoaWxk
cmVuKCkubGFzdCgpLCBhZGRyZXNzU2VsZWN0b3IpOworICAgICAgICByZXR1cm4gYWRkcmVzc1Nl
bGVjdG9yLnNlbGVjdGVkQWRkcmVzcy53aXRoT2Zmc2V0KHZhbHVlLT5vZmZzZXQoKSk7CisgICAg
fQorCisgICAgQXJnIGxvYWRBZGRyKFZhbHVlKiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICBp
ZiAobG9hZFZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkKQorICAgICAgICAgICAgcmV0dXJuIGFkZHIo
bG9hZFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW0o
VmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAg
ICAgICAgICAgcmV0dXJuIEFyZzo6aW1tKHZhbHVlLT5hc0ludDMyKCkpOworICAgICAgICByZXR1
cm4gQXJnKCk7CisgICAgfQorCisgICAgQXJnIGltbU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChBcmcgcmVzdWx0ID0gaW1tKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIHJldHVybiB0bXAodmFsdWUpOworICAgIH0KKworICAgIHRlbXBs
YXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90
Q29tbXV0YXRpdmU+CisgICAgdm9pZCBhcHBlbmRCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdCA9IHRtcChjdXJyZW50VmFsdWUpOworICAg
ICAgICAKKyAgICAgICAgLy8gVGhyZWUtb3BlcmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAg
ICAgT3AgYSwgYiwgYworICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAv
LyAgICAgYyA9IGEgT3AgYgorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6
SW1tLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0
eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAgICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQSBub24tY29tbXV0YXRp
dmUgb3BlcmF0aW9uIGNvdWxkIGhhdmUgYW4gaW1tZWRpYXRlIGluIGxlZnQuCisgICAgICAgICAg
ICAgICAgaWYgKGltbShsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2Rl
LCBpbW0obGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaW1tKHJpZ2h0KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6
OkltbSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCks
IGltbShyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBUd28tb3BlcmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAgICAgT3AgYSwg
YgorICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAgICAgYiA9IGIg
T3AgYQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIHByZWZlciB2ZXJzaW9ucyBvZiB0
aGUgb3BlcmF0aW9uIHRoYXQgaGF2ZSBhIGZ1c2VkIGxvYWQgb3ZlciB0aHJlZQorICAgICAgICAv
LyBvcGVyYW5kIGZvcm1zLgorICAgICAgICAKKyAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0g
Q29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAgIEFyZyBsZWZ0QWRkciA9IGxvYWRBZGRyKGxlZnQp
OworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgbGVmdEFkZHIua2luZCgpLCBB
cmc6OlRtcCkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHJpZ2h0KSwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBsZWZ0QWRkciwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBBcmcgcmlnaHRBZGRyID0gbG9hZEFkZHIocmlnaHQpOworICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0ob3Bjb2RlLCByaWdodEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCByaWdodEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmln
aHQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
YXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKG9wY29kZSwg
dG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBv
cGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAg
IGJvb2wgdHJ5QXBwZW5kU3RvcmVCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgQXJnIHN0b3JlQWRkciA9IGFkZHIoY3VycmVudFZhbHVlKTsKKyAgICAgICAg
QVNTRVJUKHN0b3JlQWRkcik7CisKKyAgICAgICAgVmFsdWUqIG90aGVyVmFsdWU7CisgICAgICAg
IGlmIChhZGRyKGxlZnQpID09IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSBy
aWdodDsKKyAgICAgICAgZWxzZSBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSAmJiBh
ZGRyKHJpZ2h0KSA9PSBzdG9yZUFkZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gbGVmdDsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICgh
aXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgc3RvcmVBZGRyLmtpbmQoKSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG90aGVyVmFs
dWUpLCBzdG9yZUFkZHIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQWlyOjpPcGNvZGUg
b3Bjb2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBpbnN0cy5s
YXN0KCkuYXBwZW5kKEluc3Qob3Bjb2RlLCBjdXJyZW50VmFsdWUsIHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisgICAgCisgICAgSW5kZXhTZXQ8VmFsdWU+
IGxvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWly
LgorICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IHZhbHVlVG9UbXA7CisgICAgSW5kZXhNYXA8QjM6
OkJhc2ljQmxvY2ssIEFpcjo6QmFzaWNCbG9jayo+IGJsb2NrVG9CbG9jazsKKworICAgIFVzZUNv
dW50cyB1c2VDb3VudHM7CisKKyAgICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBpbnN0czsKKwor
ICAgIFZhbHVlKiBjdXJyZW50VmFsdWU7CisKKyAgICAvLyBUaGUgYWRkcmVzcyBzZWxlY3RvciB3
aWxsIG1hdGNoIGFueSBwYXR0ZXJuIHdoZXJlIHRoZSBpbnB1dCBvcGVyYW5kcyBhcmUgYXZhaWxh
YmxlIGFzIFRtcHMuCisgICAgLy8gSXQgZG9lc24ndCBjYXJlIGFib3V0IHNoYXJpbmcuIEl0IHdp
bGwgaGFwcGlseSBlbWl0IHRoZSBzYW1lIGFkZHJlc3MgZXhwcmVzc2lvbiBvdmVyIGFuZCBvdmVy
CisgICAgLy8gYWdhaW4gcmVnYXJkbGVzcyBvZiB0aGUgZXhwcmVzc2lvbidzIGNvbXBsZXhpdHku
IFRoaXMgd29ya3Mgb3V0IGZpbmUsIHNpbmNlIGF0IHRoZSBtYWNoaW5lCisgICAgLy8gbGV2ZWws
IGFkZHJlc3MgZXhwcmVzc2lvbnMgYXJlIHN1cGVyIGNoZWFwLiBIb3dldmVyLCB0aGlzIGRvZXMg
aGF2ZSBhIGhhY2sgdG8gYXZvaWQKKyAgICAvLyAidW5ob2lzdGluZyIgYWRkcmVzcyBleHByZXNz
aW9ucy4KKyAgICBjbGFzcyBBZGRyZXNzU2VsZWN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAg
QWRkcmVzc1NlbGVjdG9yKExvd2VyVG9BaXImIGxvd2VyKQorICAgICAgICAgICAgOiBsb3dlcihs
b3dlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBhY2NlcHRSb290KFZh
bHVlKiByb290KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIG1h
dGNoIGFuIGFkZHJlc3MgZXhwcmVzc2lvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQK
KyAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkuCisgICAgICAgICAgICByZXR1cm4gIWxvd2VyLnZh
bHVlVG9UbXBbcm9vdF07CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFjY2VwdFJvb3RMYXRl
KFZhbHVlKikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgICAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3Zh
bHVlXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4g
YWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBh
Y2NlcHRJbnRlcm5hbHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoQXJn
dW1lbnRzLi4uKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG93ZXIubG9ja2VkLmNvbnRh
aW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBy
ZXR1cm4gYWNjZXB0T3BlcmFuZHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBi
b29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUo
QXJndW1lbnRzLi4uKSB7IH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MShWYWx1ZSogaW5k
ZXgsIFZhbHVlKiBsb2dTY2FsZSwgVmFsdWUqIGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGlmIChsb2dTY2FsZS0+YXNJbnQoKSA8IDAgfHwgbG9nU2NhbGUtPmFzSW50KCkgPiAzKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9
IEFyZzo6aW5kZXgoCisgICAgICAgICAgICAgICAgbG93ZXIudG1wKGJhc2UpLCBsb3dlci50bXAo
aW5kZXgpLCAxIDw8IGxvZ1NjYWxlLT5hc0ludCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDIoVmFsdWUqIGJhc2UsIFZh
bHVlKiBpbmRleCwgVmFsdWUqIGxvZ1NjYWxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gdHJ5QWRkU2hpZnQxKGluZGV4LCBsb2dTY2FsZSwgYmFzZSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICB7Cisg
ICAgICAgICAgICBpZiAocmlnaHQtPmhhc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBU
aGlzIHByb2R1Y3Rpb24gaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHNpbmNlIHdlIGV4cGVjdAor
ICAgICAgICAgICAgICAgIC8vIExvYWQoQWRkKEB4LCBAY29uc3QxKSwgb2Zmc2V0ID0gY29uc3Qy
KSB0byBoYXZlIGFscmVhZHkgYmVlbiBzdHJlbmd0aC1yZWR1Y2VkCisgICAgICAgICAgICAgICAg
Ly8gdG8gTG9hZChAeCwgb2Zmc2V0ID0gY29uc3QxICsgY29uc3QyKS4KKyAgICAgICAgICAgICAg
ICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIobG93ZXIudG1wKGxlZnQpLCByaWdodC0+YXNJ
bnQzMigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjppbmRleChsb3dlci50bXAobGVmdCks
IGxvd2VyLnRtcChyaWdodCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHRyeURpcmVjdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbGVj
dGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93
ZXJUb0FpciYgbG93ZXI7CisgICAgICAgIEFyZyBzZWxlY3RlZEFkZHJlc3M7CisgICAgfTsKKyAg
ICBBZGRyZXNzU2VsZWN0b3IgYWRkcmVzc1NlbGVjdG9yOworCisgICAgLy8gVGhpcyB3aWxsIG1h
dGNoIGNvbXBsZXggbXVsdGktdmFsdWUgZXhwcmVzc2lvbnMsIGJ1dCBvbmx5IGlmIHRoZXJlIGlz
IG5vIHNoYXJpbmcuIEZvciBleGFtcGxlLAorICAgIC8vIGl0IHdvbid0IG1hdGNoIGEgTG9hZCB0
d2ljZSBhbmQgY2F1c2UgdGhlIGdlbmVyYXRlZCBjb2RlIHRvIGRvIHR3byBsb2FkcyB3aGVuIHRo
ZSBvcmlnaW5hbAorICAgIC8vIGNvZGUganVzdCBkaWQgb25lLgorICAgIGNsYXNzIExvd2VyaW5n
U2VsZWN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG93ZXJpbmdTZWxlY3RvcihMb3dlclRv
QWlyJiBsb3dlcikKKyAgICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHJvb3QsICFsb3dlci5sb2NrZWQuY29u
dGFpbnMocm9vdCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIGFjY2VwdFJvb3RMYXRlKFZhbHVlKikgeyB9CisgICAgICAgIAorICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJu
YWxzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAg
ICAgICAgICAgLy8gSWYgb25lIG9mIHRoZSBpbnRlcm5hbCB0aGluZ3MgaGFzIGFscmVhZHkgYmVl
biBjb21wdXRlZCwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCisgICAgICAgICAgICAvLyBp
dCB0byBiZSByZWNvbXB1dGVkIGFnYWluLgorICAgICAgICAgICAgaWYgKGxvd2VyLnZhbHVlVG9U
bXBbdmFsdWVdKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gV2UgcmVxdWlyZSBpbnRlcm5hbHMgdG8gaGF2ZSBvbmx5IG9uZSB1c2Ug
LSB1cy4KKyAgICAgICAgICAgIGlmIChsb3dlci51c2VDb3VudHNbdmFsdWVdICE9IDEpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1
cm4gYWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9v
bCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIAorICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJu
YWxzTGF0ZShWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGxvd2VyLmxvY2tlZC5hZGQodmFsdWUpOworICAgICAgICAgICAgYWNjZXB0
SW50ZXJuYWxzTGF0ZShhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIHZvaWQgYWNj
ZXB0SW50ZXJuYWxzTGF0ZSgpIHsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1
ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxv
d2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAg
ICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNj
ZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAgICAgICAgYm9vbCB0cnlMb2Fk
KFZhbHVlKiBhZGRyZXNzKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxvd2VyLmN1
cnJlbnRWYWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAg
ICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlMzIsIGxvd2VyLmFkZHIoYWRkcmVzcyksIGxvd2VyLnRt
cChsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgbG93ZXIuYWRkcihhZGRyZXNz
KSwgbG93ZXIudG1wKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBw
ZW5kKE1vdmVEb3VibGUsIGxvd2VyLmFkZHIoYWRkcmVzcyksIGxvd2VyLnRtcChsb3dlci5jdXJy
ZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkK
KyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kQmluT3A8QWRkMzIs
IENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVN0b3JlQWRkTG9hZChWYWx1ZSogbGVm
dCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bGVmdC0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAg
IHJldHVybiBsb3dlci50cnlBcHBlbmRTdG9yZUJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVm
dCwgcmlnaHQpOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGSVhN
RTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlTdG9yZUFuZExvYWQo
VmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFsdWUqKQorICAgICAgICB7CisgICAgICAgICAg
ICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbG93ZXIudHJ5QXBwZW5kU3RvcmVCaW5PcDxBbmQzMiwgQ29tbXV0
YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3Rv
cmUoVmFsdWUqIHZhbHVlLCBWYWx1ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
dmFsdWUtPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAg
ICBsb3dlci5hcHBlbmQoTW92ZTMyLCBsb3dlci50bXAodmFsdWUpLCBsb3dlci5hZGRyKGxvd2Vy
LmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBsb3dlci50bXAodmFsdWUpLCBsb3dlci5h
ZGRyKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmVE
b3VibGUsIGxvd2VyLnRtcCh2YWx1ZSksIGxvd2VyLmFkZHIobG93ZXIuY3VycmVudFZhbHVlKSk7
CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgdHJ5UmV0dXJuKFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAg
ICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwg
bG93ZXIuaW1tT3JUbXAodmFsdWUpLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAg
ICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dlci50bXAodmFsdWUpLCBUbXAoRlBS
SW5mbzo6cmV0dXJuVmFsdWVGUFIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBsb3dlci5hcHBlbmQoUmV0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBMb3dlclRvQWlyJiBsb3dlcjsKKyAgICB9OworICAgIExv
d2VyaW5nU2VsZWN0b3IgbG93ZXJpbmdTZWxlY3RvcjsKKyAgICAKKyAgICBQcm9jZWR1cmUmIHBy
b2NlZHVyZTsKKyAgICBDb2RlJiBjb2RlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ29kZSYgY29kZSkKK3sK
KyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvY2VkdXJlLCAibG93ZXJUb0FpciIpOworICAg
IExvd2VyVG9BaXIgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworICAgIGxvd2VyVG9BaXIu
cnVuKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNMb3dlclRvQWlyX2gKKyNkZWZpbmUgQjNM
b3dlclRvQWlyX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29k
ZTsgfQorCisvLyBUaGlzIGxvd2VycyB0aGUgY3VycmVudCBCMyBwcm9jZWR1cmUgdG8gYW4gQWly
IGNvZGUuCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNMb3dlclRvQWlyX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQwIEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCittYXRjaGVyIExvd2VyaW5nTWF0Y2hlcgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRl
cmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcgYXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1
c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50cyB3aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBh
ZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1hdGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBp
bXByb3ZpbmcgcGVyZm9ybWFuY2UhCisKK0xvYWQgPSBMb2FkKGFkZHJlc3MpCisKK0FkZCA9IEFk
ZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkID0gU3RvcmUoQWRkKGxlZnQsIHJpZ2h0KSwg
YWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0b3JlKEFkZChsZWZ0LCByaWdodCksIGFkZHJlc3Mp
CitTdG9yZSA9IFN0b3JlKHZhbHVlLCBhZGRyZXNzKQorCitSZXR1cm4gPSBSZXR1cm4odmFsdWUp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNN
ZW1vcnlWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQoreworfQorCit2b2lk
IE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlm
IChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29mZnNldCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZpbmUgQjNNZW1vcnlW
YWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgTWVtb3J5VmFsdWUgOiBwdWJs
aWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29k
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgTG9hZDha
OgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBj
YXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICBjYXNlIExvYWQ6
CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNh
c2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAgICBpbnQzMl90IG9mZnNldCgp
IGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBN
ZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBu
b3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4
IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorICAgIE1lbW9yeVZh
bHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAw
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikK
KyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9E
SVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNh
c2UgTG9hZDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZDha
OgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6Cisg
ICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0g
SW50MzIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkRmxv
YXQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gRG91YmxlKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBT
dG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBT
dG9yZToKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGll
ZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBW
YWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8gRG91YmxlIDogSW50MzIs
IG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAg
ICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAg
ICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAg
IHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFs
dWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAg
ICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNB
QkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2Ug
U3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpbnQzMl90IG1fb2Zmc2V0IHsgMCB9OworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNNZW1v
cnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2Rl
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgb3V0LnByaW50KCJOb3AiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIG91dC5wcmludCgi
SWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3QzMjoKKyAgICAgICAg
b3V0LnByaW50KCJDb25zdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0NjQ6
CisgICAgICAgIG91dC5wcmludCgiQ29uc3Q2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDb25zdERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJDb25zdERvdWJsZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tT
bG90Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZ3VtZW50UmVnOgorICAgICAgICBv
dXQucHJpbnQoIkFyZ3VtZW50UmVnIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZyYW1l
UG9pbnRlcjoKKyAgICAgICAgb3V0LnByaW50KCJGcmFtZVBvaW50ZXIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQWRkOgorICAgICAgICBvdXQucHJpbnQoIkFkZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBTdWI6CisgICAgICAgIG91dC5wcmludCgiU3ViIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE11bDoKKyAgICAgICAgb3V0LnByaW50KCJNdWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRGl2OgorICAgICAgICBvdXQucHJpbnQoIkRpdiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICAgICAgb3V0LnByaW50KCJDaGls
bERpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNb2Q6CisgICAgICAgIG91dC5wcmlu
dCgiTW9kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgb3V0
LnByaW50KCJCaXRBbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0T3I6CisgICAg
ICAgIG91dC5wcmludCgiQml0T3IiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0WG9y
OgorICAgICAgICBvdXQucHJpbnQoIkJpdFhvciIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBTaGw6CisgICAgICAgIG91dC5wcmludCgiU2hsIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFNTaHI6CisgICAgICAgIG91dC5wcmludCgiU1NociIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBaU2hyOgorICAgICAgICBvdXQucHJpbnQoIlpTaHIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgU0V4dDg6CisgICAgICAgIG91dC5wcmludCgiU0V4dDgiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU0V4dDE2OgorICAgICAgICBvdXQucHJpbnQoIlNFeHQxNiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MzI6CisgICAgICAgIG91dC5wcmludCgiU0V4
dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgb3V0LnBy
aW50KCJaRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRlJvdW5kOgorICAgICAg
ICBvdXQucHJpbnQoIkZSb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJVG9EOgor
ICAgICAgICBvdXQucHJpbnQoIklUb0QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRFRv
STMyOgorICAgICAgICBvdXQucHJpbnQoIkRUb0kzMiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RFcXVhbCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJMZXNz
VGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICAgICAg
b3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMZXNz
RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc0VxdWFsIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyRXF1YWwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJvdmU6CisgICAgICAgIG91dC5wcmludCgi
QWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3c6CisgICAgICAgIG91dC5w
cmludCgiQmVsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAg
ICAgICAgb3V0LnByaW50KCJBYm92ZUVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEJlbG93RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dFcXVhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIG91dC5wcmludCgiTG9hZDhaIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgb3V0LnByaW50KCJMb2Fk
OFMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgb3V0LnBy
aW50KCJMb2FkMTZaIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQxNlM6CisgICAg
ICAgIG91dC5wcmludCgiTG9hZDE2UyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2Fk
RmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZEZsb2F0Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIG91dC5wcmludCgiU3RvcmU4Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIG91dC5wcmludCgiU3RvcmUx
NiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBvdXQu
cHJpbnQoIlN0b3JlRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmU6Cisg
ICAgICAgIG91dC5wcmludCgiU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ0Nh
bGw6CisgICAgICAgIG91dC5wcmludCgiQ0NhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgUGF0Y2hwb2ludDoKKyAgICAgICAgb3V0LnByaW50KCJQYXRjaHBvaW50Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrQWRk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBvdXQucHJp
bnQoIkNoZWNrU3ViIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrTXVsOgorICAg
ICAgICBvdXQucHJpbnQoIkNoZWNrTXVsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENo
ZWNrOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFVwc2lsb246CisgICAgICAgIG91dC5wcmludCgiVXBzaWxvbiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBQaGk6CisgICAgICAgIG91dC5wcmludCgiUGhpIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEp1bXA6CisgICAgICAgIG91dC5wcmludCgiSnVtcCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIG91dC5wcmludCgiQnJhbmNoIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgb3V0LnByaW50KCJT
d2l0Y2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBvdXQu
cHJpbnQoIlJldHVybiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPb3BzOgorICAgICAg
ICBvdXQucHJpbnQoIk9vcHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09wY29kZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBPcGNvZGUgOiBpbnQxNl90
IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1c2VmdWwgZm9yIHdoZW4geW91
IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAgICAKKyAgICAvLyBQb2x5bW9y
cGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgSWRlbnRpdHks
CisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUgQ29uc3RWYWx1ZSogY2xhc3Nlcy4gQ29uc3Rh
bnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3csIHNvIHRoYXQgd2UgY2FuCisgICAgLy8gcmVh
c29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0aGVtLiBMYXJnZSBjb25zdGFudHMg
YXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgQ29uc3QzMiwKKyAgICBDb25zdDY0LAorICAg
IENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1hZ2ljYWwgc3RhY2sgc2xvdC4gVGhpcyBpcyB2
aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0gcmVnYXJkbGVzcyBv
ZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LiBFYWNoIGluc3RhbmNl
IG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBkaXNqb2ludCByYW5nZSBvZgorICAgIC8vIHN0
YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFzcy4KKyAgICBTdGFja1Nsb3Qs
CisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdpc3Rlci4gVGhpcyBpcyB2aWV3ZWQg
YXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0KKyAgICAvLyByZWdhcmRsZXNz
IG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LCBhbmQgdGhlIGNvbXBpbGVyIHRh
a2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBkb24ndCBjbG9iYmVyIHRoZSB2YWx1
ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNhbGxzIChlaXRoZXIgYnkgc2F2aW5nIHRoZSBh
cmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBvciBwcmVzZXJ2aW5nIGl0IGluIGEgY2FsbGVl
LXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVnVmFsdWUgY2xhc3MuIFRoZSByZXR1
cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2ludGVyKCkgKGZvciBHUFJzKSBvciBEb3VibGUg
KGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywKKworICAgIC8vIFRoZSBmcmFtZSBwb2ludGVy
LiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRyb2wgZmxvdyBidXQgaXQgd2lsbCBh
bHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRlciwgd2l0aCBhIGNhdmVhdDogaWYg
b3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50ZXIgdGVtcG9yYXJpbHkgZm9yIHNv
bWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBvaW50ZXIgaW50cmluc2ljIHdpbGwg
cmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91bGQqIGJlIG5vdAorICAgIC8vIHdo
ZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAgIEZyYW1lUG9pbnRlciwKKworICAg
IC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIEFk
ZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKworICAgIC8vIEludGVnZXIgbWF0aC4K
KyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIsIGJlaGF2ZXMgbGlrZSBKUyAoeC95
KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0T3IsCisgICAgQml0WG9yLAorICAg
IFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisKKyAgICAvLyBDYXN0cyBhbmQgc3VjaC4KKyAg
ICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBTRXh0OCwKKyAgICBTRXh0MTYsCisg
ICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6CisgICAgU0V4dDMyLAorICAgIFpF
eHQzMiwKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgRlJvdW5kLAorICAg
IC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIElUb0QsCisgICAgLy8gVGFr
ZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERUb0kzMiwKKworICAgIC8vIFBvbHlt
b3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gUmV0dXJucyBp
bnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8vIGlzIGp1c3QgRXF1YWwoeCwgMCku
CisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVzc1RoYW4sCisgICAgR3JlYXRlclRo
YW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVhbCwKKworICAgIC8vIEludGVnZXIg
Y29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgorICAgIEFib3ZlLAorICAgIEJlbG93
LAorICAgIEFib3ZlRXF1YWwsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1lbW9yeSBsb2Fk
cy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0eXBlLiBUaGVz
ZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgorICAgIExvYWQ4
WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAgIC8vIFRoaXMg
cmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMgcmV0dXJuIHdoYXRl
dmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8gTWVtb3J5IHN0b3Jl
cy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4gVGhlc2UgdXNlIE1l
bW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAgU3RvcmU4
LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2YWx1ZToKKyAgICBT
dG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIs
IEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhpcyBpcyBhIHJlZ3Vs
YXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVtIEMgY2FsbGluZyBj
b252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIHBhc3Nl
ZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAvLyBUaGlzIGlzIGEg
cGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRoaXMgaXMgdmlld2Vk
IGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVtaXRzIGNvZGUgdmlh
IGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBj
b2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBhbG9uZyB3aXRoIGNv
bnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3QgYmUgcGFzc2VkLgor
ICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMg
aW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0CisgICAgLy8gdGhhdCBh
IHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhlIHRvcCBvZiB0aGUg
YXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgorICAgIFBhdGNocG9p
bnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlr
ZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24KKyAgICAvLyBjYWxs
YmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFmdGVyIHRoZSBlcGls
b2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20gdGhlIGNoZWNrLCBh
bmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBzdXBwbHkgYSBzdGFj
a21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBqdW1wIGJhY2sg
aW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBzaW5jZSB0aGUgY29t
cGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24gb2YgdGhlc2UgaW5z
dHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4uIEZvcgorICAgIC8v
IGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8vCisgICAgLy8gYSA9
IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8KKyAgICAv
LyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8KKyAgICAvLyBhID0g
Q2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAvLworICAgIC8vIFRo
aXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQgYnkgdGhlIHR3byBD
aGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2FsbGJhY2tzLiBZZXQs
IHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFyZSBkaWZmZXJlbnQg
YmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3QgQ2hlY2tBZGQgZXhl
Y3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9zc2libHkgdGFrZW4g
c2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVja0FkZCdzIGNhbGxi
YWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tTdWIsCisgICAgQ2hl
Y2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0aGUgQ2hlY2tWYWx1
ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMgYQorICAgIC8vIHN0
YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFuIEludDMyIGFy
Z3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1bGwgYnJhbmNoIGZ1
c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1wcyB0byB0
aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ssCisKKyAgICAvLyBT
U0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBzaWxvbiwgLy8gVGhp
cyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisgICAgLy8gSnVtcC4g
VXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAgCisgICAgLy8gUG9s
eW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gQnJhbmNoZXMgaWYg
bm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZhbHVlIGNsYXNzLCB3
aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNjZXNzb3IuCisgICAg
QnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJbnQzMiBvciBJ
bnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNoLAorCisgICAgLy8g
UmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRoZWlyIHJldHVybiB0
eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBlLiBVc2VzIHRoZSBD
b250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhpcyBpcyBhIHRlcm1p
bmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZS4gVXNlcyB0aGUg
Q29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK2lubGluZSBib29sIGlzQ2hlY2tN
YXRoKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIENo
ZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFz
cyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpC
Mzo6T3Bjb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9yaWdpbigiLCBSYXdQb2ludGVyKG1fZGF0YSks
ICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNPcmlnaW5faAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2hvZXZlciBnZW5lcmF0ZXMgQjNJUiBjYW4gY2hv
b3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZhbHVlcy4gV2hlbiB5b3UgZG8gdGhpcywgQjMgd2lsbCBi
ZSBhYmxlIHRvCisvLyBhY2NvdW50LCBkb3duIHRvIHRoZSBtYWNoaW5lIGNvZGUsIHdoaWNoIGlu
c3RydWN0aW9uIGNvcnJlc3BvbmRzIHRvIHdoaWNoIG9yaWdpbi4gQjMKKy8vIHRyYW5zZm9ybWF0
aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdpbnMgY2FyZWZ1bGx5LiBJdCdzIGFuIGVycm9yIHRvIHdy
aXRlIGEgdHJhbnNmb3JtYXRpb24gdGhhdAorLy8gZWl0aGVyIGRyb3BzIE9yaWdpbnMgb3IgbGll
cyBhYm91dCB0aGVtLgorY2xhc3MgT3JpZ2luIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcmln
aW4oY29uc3Qgdm9pZCogZGF0YSA9IG51bGxwdHIpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisg
ICAgeworICAgIH0KKworICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2Rh
dGE7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0
ZToKKyAgICBjb25zdCB2b2lkKiBtX2RhdGE7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM09yaWdpbl9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBv
aW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkIzVmFsdWVJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1l
c3BhY2UgQWlyOworCitQYXRjaHBvaW50U3BlY2lhbDo6UGF0Y2hwb2ludFNwZWNpYWwoKQorewor
fQorCitQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKCkKK3sKK30KKwordm9p
ZCBQYXRjaHBvaW50U3BlY2lhbDo6Zm9yRWFjaEFyZygKKyAgICBJbnN0JiBpbnN0LCBjb25zdCBT
Y29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaWYg
KGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkgeworICAgICAgICBmb3JFYWNoQXJnSW1wbCgw
LCAxLCBpbnN0LCBjYWxsYmFjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYWxs
YmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6RGVmLCBpbnN0Lm9yaWdpbi0+YWlyVHlwZSgpKTsKKyAg
ICBmb3JFYWNoQXJnSW1wbCgwLCAyLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgUGF0Y2hw
b2ludFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4t
PnR5cGUoKSA9PSBWb2lkKQorICAgICAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMSwgaW5zdCk7
CisKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoaW5zdC5hcmdzWzFdLmtpbmQoKSAhPSBBcmc6OlRtcCkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIGlmICghaW5zdC5hcmdzWzFdLmlzVHlwZShpbnN0Lm9yaWdpbi0+YWlyVHlw
ZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAs
IDIsIGluc3QpOworfQorCitib29sIFBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0
JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUo
KSA9PSBWb2lkKQorICAgICAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKDAsIDEsIGluc3QsIGFy
Z0luZGV4KTsKKworICAgIGlmIChhcmdJbmRleCA9PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKDAsIDIsIGluc3QsIGFyZ0luZGV4KTsKK30K
KworQ0NhbGxIZWxwZXJzOjpKdW1wIFBhdGNocG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSgKKyAgICBJ
bnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQp
Cit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNr
bWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgIFZl
Y3RvcjxWYWx1ZVJlcD4gcmVwczsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOworICAgIGlmIChp
bnN0Lm9yaWdpbi0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFy
ZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3Nbb2Zmc2V0KytdKSk7CisgICAgYXBwZW5kUmVwc0lt
cGwoY29udGV4dCwgb2Zmc2V0LCBpbnN0LCByZXBzKTsKKyAgICAKKyAgICBTdGFja21hcDo6R2Vu
ZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgcGFy
YW1zLnN0YWNrbWFwID0gc3RhY2ttYXA7CisgICAgcGFyYW1zLnJlcHMgPSByZXBzOworICAgIHBh
cmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVyczsKKworICAgIHN0
YWNrbWFwLT5tX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKworICAgIHJldHVybiBDQ2Fs
bEhlbHBlcnM6Okp1bXAoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0
Y2hwb2ludFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50U3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFNwZWNpYWxfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc3BlY2lhbCB0
aGF0IHJlY29nbml6ZXMgdGhhdCB0aGVyZSBhcmUgdHdvIHVzZXMgb2YgUGF0Y2hwb2ludDogVm9p
ZCBhbmQgYW5kIG5vbi1Wb2lkLgorLy8gSW4gdGhlIFZvaWQgY2FzZSwgdGhlIHN5bnRheCBvZiB0
aGUgQWlyIFBhdGNoIGluc3RydWN0aW9uIGlzOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hwb2lu
dCwgYXJncy4uLgorLy8KKy8vIFdoZXJlICJhcmdzLi4uIiBhcmUgdGhlIGxvd2VyZWQgYXJndW1l
bnRzIHRvIHRoZSBQYXRjaHBvaW50IGluc3RydWN0aW9uLiBJbiB0aGUgbm9uLVZvaWQgY2FzZQor
Ly8gd2Ugd2lsbCBoYXZlOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hwb2ludCwgcmVzdWx0LCBh
cmdzLi4uCisKK2NsYXNzIFBhdGNocG9pbnRTcGVjaWFsIDogcHVibGljIFN0YWNrbWFwU3BlY2lh
bCB7CitwdWJsaWM6CisgICAgUGF0Y2hwb2ludFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5QYXRj
aHBvaW50U3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6
SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBv
dmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9v
bCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisK
KyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhpZGRl
biBicmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2VuZXJh
dGVzIHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVyczo6
SnVtcCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRpb25D
b250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFNwZWNpYWxfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
UGF0Y2hwb2ludFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGF0
Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNQYXRjaHBvaW50VmFsdWVfaAorI2RlZmluZSBCM1BhdGNocG9pbnRWYWx1ZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
U3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBh
dGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
YWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsgfQor
CisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFBhdGNocG9p
bnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBB
ZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hwb2lu
dCwgdHlwZSwgb3JpZ2luLCBjaGlsZHJlbikKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNQYXRjaHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
aGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
aGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BoYXNlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJC
M1ZhbGlkYXRlLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Bo
YXNlU2NvcGU6OlBoYXNlU2NvcGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIG5h
bWUpCisgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgLCBtX25hbWUobmFtZSkKK3sK
KyAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJC
MyBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7Cisg
ICAgfQorCisgICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVt
cEJlZm9yZSA9IHRvQ1N0cmluZyhwcm9jZWR1cmUpOworfQorCitQaGFzZVNjb3BlOjp+UGhhc2VT
Y29wZSgpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAg
ICB2YWxpZGF0ZShtX3Byb2NlZHVyZSwgbV9uYW1lLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQjNQaGFzZVNjb3BlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFBoYXNlU2NvcGUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFBoYXNlU2NvcGUpOworcHVibGljOgorICAgIFBoYXNlU2NvcGUoUHJv
Y2VkdXJlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8gdGhpcyBk
b2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwor
ICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQ
cm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2NlZHVyZSgpCit7
Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSkK
K3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2so
bV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBi
bG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAg
IG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworfQorCitWZWN0b3I8QmFzaWNCbG9jayo+IFBy
b2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcigpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBy
ZXN1bHQ7CisgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGF0
KDApKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgewor
ICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
YmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2go
YmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30K
KworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUG9zdE9yZGVyKCkKK3sK
KyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBQb3N0T3JkZXJCbG9ja1dvcmts
aXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goYXQoMCkpOworICAgIHdoaWxlIChCbG9j
a1dpdGhPcmRlciBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgc3dpdGNoIChpdGVt
Lm9yZGVyKSB7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UHJlOgorICAgICAgICAgICAgd29y
a2xpc3QucHVzaFBvc3QoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGl0ZW0ubm9kZS0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgICAgIHdvcmts
aXN0LnB1c2goaXRlbS5ub2RlLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBWaXNpdE9yZGVyOjpQb3N0OgorICAgICAgICAgICAgcmVzdWx0LmFw
cGVuZChpdGVtLm5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvL0VOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmlu
ZSBCM1Byb2NlZHVyZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiUHVyZU5h
Ti5oIgorI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgor
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgUHJvY2VkdXJl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1cmUpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvY2VkdXJl
KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflByb2NlZHVyZSgpOworCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOwor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4uLik7CisKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBh
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdLmdldCgpOyB9
CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1
cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAg
ICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAg
ICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRl
cmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAg
ICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2luZGV4KGZp
bmROZXh0KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9j
ayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJl
LT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisr
KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAx
KTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+c2l6ZSgp
ICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4Kys7Cisg
ICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBQcm9j
ZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisK
KyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsg
fQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXpl
KCkpOyB9CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIoKTsKKyAg
ICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVyKCk7CisKKyAgICBjbGFzcyBW
YWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlc0NvbGxlY3Rpb24o
Y29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKHBy
b2NlZHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3Ig
eworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAg
ICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25z
dCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAg
OiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRl
eCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmFsdWUqIG9w
ZXJhdG9yKigpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
cHJvY2VkdXJlLT5tX3ZhbHVlc1ttX2luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXgg
PT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgY29uc3QgUHJvY2VkdXJlKiBtX3Byb2NlZHVy
ZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgMCk7
IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9j
ZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1bnNpZ25l
ZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpOyB9Cisg
ICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1
cmUubV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgY29uc3QgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICB9Owor
CisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBWYWx1ZXNDb2xs
ZWN0aW9uKCp0aGlzKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+
PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKyNkZWZpbmUgQjNQ
cm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3IFZhbHVl
VHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlwZSogcmVz
dWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlSW5saW5lc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2lu
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0YWNrU2xv
dEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFN0YWNrU2xvdEtp
bmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICBvdXQucHJpbnQo
IkFub255bW91cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtp
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RL
aW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Ns
b3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9o
CisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBTdGFja1Nsb3RLaW5kIDog
dWludDhfdCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0byBiZSBrZXB0IGRp
c2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVuZCB0byBlc2NhcGUKKyAgICAv
LyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHJ1
bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjaworICAgIC8vIHNsb3QuCisgICAgTG9j
a2VkLAorCisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgY291bGQgc2hhcmUgc3BhY2Ugd2l0aCBv
dGhlciBzdGFjayBzbG90cywgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZW4ndCBsaXZlCisgICAgLy8g
YXQgdGhlIHNhbWUgdGltZS4gVGhlIGNvbXBpbGVyIHN0aWxsIGhhcyB0byBkbyBlc2NhcGUgYW5h
bHlzaXMsIHNpbmNlIHRoZXNlIGNhbiBiZSBlc2NhcGVkCisgICAgLy8gZXhwbGljaXRseSBpbiBJ
Ui4KKyAgICBBbm9ueW1vdXMKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdEtp
bmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xv
dFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6
ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzU3RhY2tTbG90VmFsdWVfaAorI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja1Ns
b3RLaW5kLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2Ug
QWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFj
a1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAg
ICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0
dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2Yg
Y29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRo
ZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9t
RlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gTm90ZSB0aGF0
IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KKyAg
ICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1f
b2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1w
TWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisg
ICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVk
IGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFN0
YWNrU2xvdCwgcG9pbnRlcigpLCBvcmlnaW4pCisgICAgICAgICwgbV9ieXRlU2l6ZShieXRlU2l6
ZSkKKyAgICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29mZnNldEZyb21GUCgwKQor
ICAgIHsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIFN0YWNrU2xvdEtp
bmQgbV9raW5kOworICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNTdGFja1Nsb3RWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNTdGFja21hcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBT
dGFja21hcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgK
KyAgICAgICAgIntvcGFxdWUgPSAiLCBSYXdQb2ludGVyKG1fb3BhcXVlKSwgIiwgcmVwcyA9ICIs
IGxpc3REdW1wKG1fcmVwcyksCisgICAgICAgICIsIGdlbmVyYXRvciA9ICIsIFJhd1BvaW50ZXIo
bV9nZW5lcmF0b3IuZ2V0KCkpLCAiLCBjbG9iYmVyZWQgPSAiLCBtX2Nsb2JiZXJlZCwKKyAgICAg
ICAgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIn0iKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBl
cnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNr
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1NwZWNp
YWw7CitjbGFzcyBTdGFja21hcFNwZWNpYWw7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgU3RhY2tt
YXAgeworcHVibGljOgorICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8g
VGhpcyBpcyB0aGUgVmFsdWUgY29udGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZhbHVl
KiB2YWx1ZTsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBhY3R1YWwg
dmFsdWUgcmVwcmVzZW50YXRpb25zIHRoYXQgd2VyZSBjaG9zZW4uCisgICAgICAgIFZlY3RvcjxW
YWx1ZVJlcD4gcmVwczsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgcmVnaXN0ZXJz
IHRoYXQgd2VyZSB1c2VkLgorICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOworICAg
IH07CisgICAgCisgICAgdHlwZWRlZiB2b2lkIEdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVscGVy
cyYsIGNvbnN0IEdlbmVyYXRpb25QYXJhbXMmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8R2Vu
ZXJhdG9yRnVuY3Rpb24+IEdlbmVyYXRvcjsKKyAgICAKKyAgICBTdGFja21hcCgpCisgICAgewor
ICAgIH0KKworICAgIC8vIFNldCBzb21lIG9wYXF1ZSBkYXRhIHRvIGlkZW50aWZ5IHRoaXMgc3Rh
Y2ttYXAuIFRoaXMgaXMgdXNlZnVsIGJlY2F1c2UgYSBTdGFja21hcC11c2luZyBWYWx1ZQorICAg
IC8vIGNhbiBiZSBkdXBsaWNhdGVkLCBhbmQgZWFjaCBkdXBsaWNhdGUgbWF5IGVuZCB1cCBoYXZp
bmcgZGlmZmVyZW50IHJlZ2lzdGVyIGFsbG9jYXRpb24uIFRoaXMKKyAgICAvLyBhbGxvd3MgYWxs
IG9mIHRob3NlIGR1cGxpY2F0ZXMgdG8gYmUgYWJsZSB0byByZWZlciBiYWNrIHRvIHdoYXRldmVy
IGhpZ2gtbGV2ZWwgZGF0YSBzdHJ1Y3R1cmVzCisgICAgLy8gd2Ugd2VyZSB1c2luZyB0byBjcmVh
dGUgdGhlIHZhbHVlLgorICAgIHZvaWQgc2V0T3BhcXVlKHZvaWQqIHBhcmFtZXRlcikKKyAgICB7
CisgICAgICAgIG1fb3BhcXVlID0gcGFyYW1ldGVyOworICAgIH0KKyAgICB2b2lkKiBvcGFxdWUo
KSBjb25zdCB7IHJldHVybiBtX29wYXF1ZTsgfQorCisgICAgLy8gQ29udmVuaWVuY2UgaGVscGVy
cyB3aGVuIHVzaW5nIGluZGljZXMgaW5zdGVhZCBvZiBwb2ludGVycy4KKyAgICB2b2lkIHNldE9w
YXF1ZUluZGV4KHNpemVfdCBpbmRleCkKKyAgICB7CisgICAgICAgIHNldE9wYXF1ZShiaXR3aXNl
X2Nhc3Q8dm9pZCo+KGluZGV4KSk7CisgICAgfQorICAgIHNpemVfdCBvcGFxdWVJbmRleCgpIGNv
bnN0IHsgcmV0dXJuIGJpdHdpc2VfY2FzdDxzaXplX3Q+KG9wYXF1ZSgpKTsgfQorCisgICAgLy8g
Q29uc3RyYWluIGFuIGFyZ3VtZW50IHRvIHRoZSBWYWx1ZSB0aGF0IHVzZXMgdGhpcyBTdGFja21h
cC4gSW4gY2FzZSBvZiBhIFBhdGNocG9pbnQgdGhhdAorICAgIC8vIHJldHVybnMgYSB2YWx1ZSwg
dGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSByZXN1bHQgdmFsdWUuIEluIGFsbCBvdGhlciBjYXNl
cywgaW5kZXggemVybyByZWZlcnMKKyAgICAvLyB0byB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhh
dCBWYWx1ZSwgZXZlbiBpZiB0aGF0IGFyZ3VtZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3Ig
ZXhhbXBsZSwKKyAgICAvLyBpbiBhIENoZWNrQWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJv
ciB0byBjb25zdHJhaW4gaW5kaWNlcyAwIGFuZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdAorICAg
IC8vIHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhl
IGdlbmVyYXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLCB5b3UgY2FuCisgICAgLy8gZGVwZW5kIG9u
IHRoZSByZXBzIGZvciB0aG9zZSBpbmRpY2VzIGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNv
bnN0cmFpbih1bnNpZ25lZCBpbmRleCwgY29uc3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAg
ICAgIGlmIChpbmRleCArIDEgPCBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9yZXBzLmdy
b3coaW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9CisKKyAg
ICB2b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAgICAgIG1f
Y2xvYmJlcmVkLm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGNs
b2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lkIHNldEdl
bmVyYXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAgICBtX2dl
bmVyYXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rp
b24+KGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFsOworICAgIGZy
aWVuZCBjbGFzcyBQYXRjaHBvaW50U3BlY2lhbDsKKyAgICBmcmllbmQgY2xhc3MgU3RhY2ttYXBT
cGVjaWFsOworICAgIAorICAgIHZvaWQqIG1fb3BhcXVlIHsgbnVsbHB0ciB9OworICAgIFZlY3Rv
cjxWYWx1ZVJlcD4gbV9yZXBzOworICAgIFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOwor
ICAgIFJlZ2lzdGVyU2V0IG1fY2xvYmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lz
dGVyczsgLy8gU3RhY2ttYXBzIGNvdWxkIGJlIGZ1cnRoZXIgZHVwbGljYXRlZCBieSBBaXIsIGJ1
dCB0aGF0J3MgdW5saWtlbHksIHNvIHdlIGp1c3QgbWVyZ2UgdGhlIHVzZWQgcmVnaXN0ZXJzIHNl
dHMgaWYgdGhhdCB3ZXJlIHRvIGhhcHBlbi4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNw
ZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCitTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3Bl
Y2lhbCgpCit7Cit9CisKK1N0YWNrbWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCgpCit7Cit9
CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmIGluc3Qs
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIFZhbHVlKiB2YWx1ZSA9
IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgp
OworCisgICAgLy8gRklYTUU6IElmIHRoZSBJbnN0IHRoYXQgdXNlcyB0aGUgU3RhY2ttYXBTcGVj
aWFsIGdldHMgZHVwbGljYXRlZCwgdGhlbiB3ZSBlbmQgdXAgbWVyZ2luZyB1c2VkCisgICAgLy8g
cmVnaXN0ZXIgc2V0cyBmcm9tIG11bHRpcGxlIHBsYWNlcy4gVGhpcyBjdXJyZW50bHkgd29uJ3Qg
aGFwcGVuIHNpbmNlIEFpciBkb2Vzbid0IGhhdmUgdGFpbGR1cAorICAgIC8vIG9yIHRoaW5ncyBs
aWtlIHRoYXQuIEJ1dCBtYXliZSBldmVudHVhbGx5IGl0IGNvdWxkIGJlIGEgcHJvYmxlbS4KKyAg
ICBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzLm1lcmdlKHVzZWRSZWdpc3RlcnMpOworfQorCitj
b25zdCBSZWdpc3RlclNldCYgU3RhY2ttYXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5z
dCYgaW5zdCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21h
cCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHJldHVybiBzdGFja21hcC0+
Y2xvYmJlcmVkKCk7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgK
KyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJn
cywKKyAgICBJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxi
YWNrPiYgY2FsbGJhY2spCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAg
ICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNT
RVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2
YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChp
bnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuLnNp
emUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAg
IEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAgICAgICAgVmFs
dWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7CisKKyAgICAg
ICAgY2FsbGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBl
KCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKKyAg
ICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywK
KyAgICBJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisg
ICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFT
U0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQo
dmFsdWUtPmNoaWxkcmVuLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKworICAgIFN0YWNr
bWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgQVNTRVJUKHN0YWNrbWFw
KTsKKworICAgIC8vIEZvciB0aGUgSW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMgdG8gaGF2ZSB0
aGUgcmlnaHQgbnVtYmVyIG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAt
IG51bUlnbm9yZWRBaXJBcmdzICE9IHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9y
ZWRCM0FyZ3MpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFJlZ2FyZGxlc3Mgb2Yg
Y29uc3RyYWludHMsIHN0YWNrbWFwcyBoYXZlIHNvbWUgYmFzaWMgcmVxdWlyZW1lbnRzIGZvciB0
aGVpciBhcmd1bWVudHMuIEZvcgorICAgIC8vIGV4YW1wbGUsIHlvdSBjYW4ndCBoYXZlIGEgbm9u
LUZQLW9mZnNldCBhZGRyZXNzLiBUaGlzIHZlcmlmaWVzIHRob3NlIGNvbmRpdGlvbnMgYXMgd2Vs
bCBhcyB0aGUKKyAgICAvLyBhcmd1bWVudCB0eXBlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3M7ICsraSkgeworICAgICAg
ICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRCM0FyZ3MpOworICAg
ICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpICsgbnVtSWdub3JlZEFpckFyZ3NdOworICAgICAg
ICAKKyAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJnOjpUbXA6
CisgICAgICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAg
ICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAg
ICAgIGJyZWFrOyAvLyBPSworICAgICAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgICAgIGlm
IChhcmcuYmFzZSgpICE9IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikgJiYKKyAgICAg
ICAgICAgICAgICBhcmcuYmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgICAgIAorICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IEFyZzo6dHlwZUZvckIzVHlw
ZShjaGlsZC0+dHlwZSgpKTsKKworICAgICAgICBpZiAoIWFyZy5pc1R5cGUodHlwZSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhlIG51bWJlciBvZiBjb25z
dHJhaW50cyBoYXMgdG8gYmUgbm8gZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgQjMgY2hpbGRy
ZW4uCisgICAgQVNTRVJUKHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpIDw9IHZhbHVlLT5jaGlsZHJl
bi5zaXplKCkpOworCisgICAgLy8gVmVyaWZ5IGFueSBleHBsaWNpdGx5IHN1cHBsaWVkIGNvbnN0
cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9yZWRCM0FyZ3M7IGkgPCBzdGFj
a21hcC0+bV9yZXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZhbHVlUmVwJiByZXAgPSBzdGFj
a21hcC0+bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpIC0gbnVtSWdu
b3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsKKworICAgICAgICBzd2l0Y2ggKHJlcC5r
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICAgICAgLy8gV2Ug
YWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmICghYXJnLmlzVG1w
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKGFyZyAhPSBU
bXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgICAgICAvLyBU
aGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChhcmcgIT0gQXJnOjpjYWxsQXJn
KHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAg
ICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6
OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25l
ZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkK
K3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2tt
YXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVuc2lnbmVkIHN0YWNrbWFwQXJnSW5kZXgg
PSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsgbnVtSWdub3JlZEIzQXJnczsKKworICAg
IGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpKSB7CisgICAg
ICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8gY29uc3RyYWludC4KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9ubHkgYWRtaXQgc3RhY2sgZm9y
IEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBpbnB1dCBjb25zdHJhaW50LCBhbmQg
U3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8gYSBDYWxsQXJnIGluIEFpci4KKyAg
ICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0luZGV4XS5raW5kKCkgPT0gVmFsdWVS
ZXA6OkFueSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgKKyAgICBHZW5lcmF0aW9uQ29u
dGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEluc3QmIGluc3QsIFZlY3Rv
cjxWYWx1ZVJlcD4mIHJlc3VsdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVk
QXJnczsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChy
ZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW2ldKSk7Cit9CisKK1ZhbHVlUmVwIFN0
YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKENvZGUmIGNvZGUsIGNvbnN0IEFyZyYgYXJnKQorewor
ICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIHJl
dHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
QXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6
OmNvbnN0YW50KGFyZy52YWx1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OkFk
ZHI6CisgICAgICAgIGlmIChhcmcuYmFzZSgpID09IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlcikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSk7
CisgICAgICAgIEFTU0VSVChhcmcuYmFzZSgpID09IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zm
c2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKCk7CisgICAgfQorfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwU3BlY2lhbF9oCisjZGVmaW5l
IEIzU3RhY2ttYXBTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKworLy8gVGhp
cyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRoYXQgaGF2ZSBzdGFja21hcHMuIE5vdGUg
dGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAgYnkKKy8vIGFza2luZyBmb3IgdGhlIEluc3Qn
cyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3RzIGRvbid0IG5lZWQgdG8gZXZlbiBob2xkIGEg
cmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAuCisKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbCA6
IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGljOgorICAgIFN0YWNrbWFwU3BlY2lhbCgpOwor
ICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBy
ZXBvcnRVc2VkUmVnaXN0ZXJzKEFpcjo6SW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJp
ZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhBaXI6Okluc3Qm
KSBvdmVycmlkZTsKKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG92ZXJyaWRlIGdl
bmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4gV2UgaGF2ZSBtYW55IHNvbWUK
KyAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCisKKyAgICB2b2lkIGZvckVh
Y2hBcmdJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBu
dW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRh
PEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOworICAgIGJvb2wgaXNWYWxpZEltcGwoCisg
ICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJB
cmdzLAorICAgICAgICBBaXI6Okluc3QmKTsKKyAgICBib29sIGFkbWl0c1N0YWNrSW1wbCgKKyAg
ICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFy
Z3MsCisgICAgICAgIEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEFw
cGVuZHMgdGhlIHJlcHMgZm9yIHRoZSBJbnN0J3MgYXJncywgc3RhcnRpbmcgd2l0aCBudW1JZ25v
cmVkQXJncywgdG8gdGhlIGdpdmVuIHZlY3Rvci4KKyAgICB2b2lkIGFwcGVuZFJlcHNJbXBsKEFp
cjo6R2VuZXJhdGlvbkNvbnRleHQmLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgQWlyOjpJbnN0
JiwgVmVjdG9yPFZhbHVlUmVwPiYpOworCisgICAgc3RhdGljIFZhbHVlUmVwIHJlcEZvckFyZyhB
aXI6OkNvZGUmLCBjb25zdCBBaXI6OkFyZyYpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja21hcFNw
ZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNzb3JDb2xs
ZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vz
c29yQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CisvLyBUaGlzIGlzIGEgZ2VuZXJpYyB3cmFwcGVyIGFyb3VuZCBsaXN0cyBvZiBmcmVxdWVudGVk
IGJsb2Nrcywgd2hpY2ggZ2l2ZXMgeW91IGp1c3QgdGhlIGJsb2Nrcy4KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQmFzaWNCbG9jaywgdHlwZW5hbWUgU3VjY2Vzc29yTGlzdD4KK2NsYXNzIFN1Y2Nlc3Nv
ckNvbGxlY3Rpb24geworcHVibGljOgorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24oU3VjY2Vzc29y
TGlzdCYgbGlzdCkKKyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAgICB7CisgICAgfQorCisgICAg
c2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2Nr
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2xpc3Rb
aW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQmFzaWNCbG9jayomIG9wZXJhdG9y
W10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJh
dG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgewor
ICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3VjY2Vzc29yQ29sbGVjdGlvbiYg
Y29sbGVjdGlvbiwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29u
c3RfY2FzdDxTdWNjZXNzb3JDb2xsZWN0aW9uKj4oJmNvbGxlY3Rpb24pKSAvLyBjb25zdCBpcyBz
dHVwaWQgYW55d2F5LgorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAg
ICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24q
IG1fY29sbGVjdGlvbjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAgIGl0
ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0
b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworcHJpdmF0ZToK
KyAgICBTdWNjZXNzb3JMaXN0JiBtX2xpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3NvckNv
bGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBT
d2l0Y2hDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KG1fY2FzZVZhbHVlLCAiLT4iLCBtX3RhcmdldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dp
dGNoQ2FzZV9oCisjZGVmaW5lIEIzU3dpdGNoQ2FzZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hD
YXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwg
Y29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUoY2Fz
ZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0KKwor
ICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0KKyAg
ICBGcmVxdWVudGVkQmxvY2sgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKyAg
ICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmJsb2Nr
KCk7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBpbnQ2NF90IG1fY2FzZVZhbHVlOworICAgIEZyZXF1ZW50ZWRCbG9jayBtX3Rhcmdl
dDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9M
aXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFs
dWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92
ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgRnJlcXVlbnRlZEJsb2NrIHJlc3VsdEJsb2Nr
ID0gbV9zdWNjZXNzb3JzW2luZGV4XTsKKyAgICBpbnQ2NF90IHJlc3VsdFZhbHVlID0gbV92YWx1
ZXNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgp
OworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgbV92YWx1ZXNbaW5kZXhdID0g
bV92YWx1ZXMubGFzdCgpOworICAgIG1fdmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4g
U3dpdGNoQ2FzZShyZXN1bHRWYWx1ZSwgcmVzdWx0QmxvY2spOworfQorCit2b2lkIFN3aXRjaFZh
bHVlOjphcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAgbV9z
dWNjZXNzb3JzLmFwcGVuZChtX3N1Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3NvcnNb
bV9zdWNjZXNzb3JzLnNpemUoKSAtIDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBtX3Zh
bHVlcy5hcHBlbmQoc3dpdGNoQ2FzZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNoVmFs
dWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBkZXN0
cnVjdGl2ZWx5IG92ZXJyaWRlcyBDb250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91dC5w
cmludChsaXN0RHVtcCgqdGhpcyksICIsIGZhbGxUaHJvdWdoID0gIiwgZmFsbFRocm91Z2goKSk7
Cit9CisKK1N3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9y
aWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xW
YWx1ZShpbmRleCwgU3dpdGNoLCBWb2lkLCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNzb3JzLmFw
cGVuZChmYWxsVGhyb3VnaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVl
X2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVibGlj
IENvbnRyb2xWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUg
b3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFsdWUo
KTsKKworICAgIC8vIG51bUNhc2VWYWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgorICAg
IHVuc2lnbmVkIG51bUNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7
IH0KKworICAgIC8vIFRoZSBzdWNjZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0aGUg
c2FtZSBpbmRleC4KKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgCisgICAgY29uc3QgVmVjdG9yPGludDY0
X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEZyZXF1
ZW50ZWRCbG9jayBmYWxsVGhyb3VnaCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0
KCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKCkgeyByZXR1cm4gc3VjY2Vz
c29ycygpLmxhc3QoKTsgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51
bUNhc2VWYWx1ZXMoKTsgfQorICAgIFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gU3dpdGNoQ2FzZShjYXNlVmFsdWUoaW5kZXgpLCBzdWNj
ZXNzb3IoaW5kZXgpKTsKKyAgICB9CisgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcltdKHVuc2lnbmVk
IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9CisK
KyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisg
ICAgICAgICAgICA6IG1fc3dpdGNoKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3dpdGNoVmFs
dWUmIHN3aXRjaFZhbHVlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2go
JnN3aXRjaFZhbHVlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX3N3aXRjaC0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5k
ZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN3aXRjaFZhbHVlKiBtX3N3aXRjaDsKKyAg
ICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgdHlwZWRlZiBpdGVyYXRvciBj
b25zdF9pdGVyYXRvcjsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBh
bmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBm
cm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhp
cyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cK
KyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUg
Y2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25l
ZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNo
Q2FzZSk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVx
dWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKTsKKworICAgIFZlY3RvcjxpbnQ2NF90PiBtX3ZhbHVl
czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
Qzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUp
Cit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICBvdXQucHJp
bnQoIlZvaWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91
dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAg
ICAgIG91dC5wcmludCgiSW50NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91Ymxl
OgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
eXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVHlwZV9oCisjZGVmaW5lIEIzVHlwZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitlbnVtIFR5cGUgeworICAgIFZvaWQsCisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91
YmxlCit9OworCitpbmxpbmUgYm9vbCBpc0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5
cGUgPT0gSW50MzIgfHwgdHlwZSA9PSBJbnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChU
eXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlw
ZSBwb2ludGVyKCkKK3sKKyAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICByZXR1cm4gSW50MzI7
CisgICAgcmV0dXJuIEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFt
ZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1
ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK1Vwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBzaWxv
blZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiXiIsIG1fcGhpLT5pbmRleCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNp
bG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2lsb25WYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgVXBzaWxvblZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBVcHNp
bG9uOyB9CisKKyAgICB+VXBzaWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkgY29uc3Qg
eyByZXR1cm4gbV9waGk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworICAgIAorICAgIFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQ
aGksIFZvaWQsIG9yaWdpbiwgdmFsdWUpCisgICAgICAgICwgbV9waGkocGhpKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0KKworICAg
IFZhbHVlKiBtX3BoaTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVc2VDb3VudHM6OlVzZUNvdW50cyhQcm9jZWR1cmUm
IHByb2NlZHVyZSkKKyAgICA6IG1fY291bnRzKHByb2NlZHVyZS52YWx1ZXMoKS5zaXplKCkpCit7
CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jZWR1cmUudmFsdWVzKCkpIHsKKyAgICAgICAg
Zm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgIG1fY291
bnRzW2NoaWxkXSsrOworICAgIH0KK30KKworVXNlQ291bnRzOjp+VXNlQ291bnRzKCkKK3sKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNVc2VDb3VudHNfaAorI2RlZmluZSBCM1VzZUNvdW50c19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIz
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2Nl
ZHVyZTsKKworY2xhc3MgVXNlQ291bnRzIHsKK3B1YmxpYzoKKyAgICBVc2VDb3VudHMoUHJvY2Vk
dXJlJik7CisgICAgflVzZUNvdW50cygpOworCisgICAgdW5zaWduZWQgb3BlcmF0b3JbXShWYWx1
ZSogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb3VudHNbdmFsdWVdOwor
ICAgIH0KK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8VmFsdWUsIHVuc2lnbmVkPiBtX2NvdW50czsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzVXNlQ291bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5o
IgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3Ry
ZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRhdGVyIHsKK3B1Ymxp
YzoKKyAgICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4s
IGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJl
KQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVm
b3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdl
KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRp
dGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9Q
UkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0g
d2hpbGUgKGZhbHNlKQorCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxC
YXNpY0Jsb2NrKj4gYmxvY2tzOworICAgICAgICBIYXNoU2V0PFZhbHVlKj4gdmFsdWVJblByb2M7
CisgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluQmxvY2s7CisKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2VkdXJlKSB7CisgICAgICAgICAgICBibG9ja3MuYWRk
KGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKQorICAgICAg
ICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQodmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2NlZHVyZS52YWx1ZXMoKSkKKyAgICAgICAgICAgIHZh
bHVlSW5Qcm9jLmFkZCh2YWx1ZSk7CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1
ZUluUHJvYykKKyAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5CbG9jay5jb250YWlucyh2YWx1
ZSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJ
bkJsb2NrKQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnModmFsdWUp
LCAoIkF0ICIsICp2YWx1ZSkpOworCisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJ
blByb2MpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVu
KCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnMoY2hpbGQp
LCAoIkF0ICIsICp2YWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAoY2hpbGQpKSk7CisgICAgICAgIH0K
KworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkg
eworICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICBibG9ja3Mu
Y29udGFpbnMoc3VjY2Vzc29yKSwgKCJBdCAiLCAqYmxvY2ssICItPiIsIHBvaW50ZXJEdW1wKHN1
Y2Nlc3NvcikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
Ly8gRklYTUU6IEV4cGFuZCB0aGlzIHZhbGlkYXRpb24gcGhhc2UuCisgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0ODAKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0
IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNv
bnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAg
ICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3Ry
aW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJCMyBWQUxJREFUSU9O
IEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAi
ICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlmIChtX3doZW4pCisg
ICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hlbiwgIlxuIik7Cisg
ICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBpZiAobV9kdW1wQmVm
b3JlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV93aGVuLCAiOlxuIik7Cisg
ICAgICAgICAgICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0
YUxvZygiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFMb2cobV9wcm9jZWR1
cmUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBXVEZSZXBv
cnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5jdGlvbiwgY29uZGl0
aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3By
b2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX3doZW47CisgICAgY29uc3QgY2hhciogbV9kdW1w
QmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUo
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBC
ZWZvcmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUsIHdoZW4sIGR1bXBC
ZWZvcmUpOworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWxpZGF0ZV9o
CisjZGVmaW5lIEIzVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwordm9pZCB2YWxpZGF0
ZShQcm9jZWR1cmUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVt
cEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbGlkYXRlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NvbnN0IGNo
YXIqIGNvbnN0IFZhbHVlOjpkdW1wUHJlZml4ID0gIkAiOworCitWYWx1ZTo6flZhbHVlKCkKK3sK
K30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdmFsdWUpCit7Cisg
ICAgLy8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNlbWVu
dCBvZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBsYWlu
IElkZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24g
d2UgbmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBw
bGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4K
KworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5cGU7
CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0g
dGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7
CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhp
cy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgSWRlbnRp
dHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAg
ICB0aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworfQorCit2b2lkIFZhbHVlOjpyZXBs
YWNlV2l0aE5vcCgpCit7CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIE9yaWdp
biBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVy
OworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworCisgICAgdGhp
cy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgTm9wLCBW
b2lkLCBvcmlnaW4pOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5yZXBs
YWNlbWVudCA9IHJlcGxhY2VtZW50OworfQorCit2b2lkIFZhbHVlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQor
Cit2b2lkIFZhbHVlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChtX3R5cGUsICIgIiwgKnRoaXMsICIgPSAiLCBtX29wY29kZSk7CisKKyAgICBvdXQu
cHJpbnQoIigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChWYWx1ZSogY2hp
bGQgOiBjaGlsZHJlbigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGNo
aWxkKSk7CisKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJpbmdPdXQ7CisgICAgZHVtcE1ldGEo
c3RyaW5nT3V0KTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsK
KyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cmlu
Zyk7CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBj
b25zdAoreworICAgIHJldHVybiBmYWxzZTsKK30KKworaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigp
IGNvbnN0Cit7CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
MDsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiBmYWxz
ZTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKworYm9vbCBWYWx1ZTo6aGFz
RG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2RvdWJsZSBWYWx1ZTo6
YXNEb3VibGUoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3QKK3sKK30KKworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogZmly
c3RDaGlsZCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6Cisg
ICAgY2FzZSBBZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBEaXY6
CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFuZDoKKyAg
ICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgU2hsOgorICAgIGNhc2Ug
U1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNr
U3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiBmaXJzdENoaWxkLT50eXBl
KCk7CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJldHVybiBwb2ludGVyKCk7Cisg
ICAgY2FzZSBTRXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBjYXNlIERUb0kzMjoKKyAgICBj
YXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICBj
YXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgTGVzc0VxdWFsOgorICAgIGNhc2UgR3JlYXRlckVx
dWFsOgorICAgIGNhc2UgQWJvdmU6CisgICAgY2FzZSBCZWxvdzoKKyAgICBjYXNlIEFib3ZlRXF1
YWw6CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgY2Fz
ZSBTRXh0MzI6CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIHJldHVybiBJbnQ2NDsKKyAgICBj
YXNlIEZSb3VuZDoKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIHJldHVybiBEb3VibGU7CisgICAg
Y2FzZSBOb3A6CisgICAgICAgIHJldHVybiBWb2lkOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZV9oCisjZGVm
aW5lIEIzVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5o
IgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRl
ICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
QmFzaWNCbG9jazsKK2NsYXNzIFN0YWNrbWFwOworCitjbGFzcyBWYWx1ZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoVmFsdWUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlzdDsKKworICAg
IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisgICAgc3RhdGljIGJvb2wg
YWNjZXB0cyhPcGNvZGUpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgflZhbHVlKCk7
CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAK
KyAgICAvLyBOb3RlIHRoYXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVw
bGFjaW5nIHZhbHVlcyB3aXRoIGlkZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7
IHJldHVybiBtX29wY29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fb3JpZ2luOyB9CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAvLyBUaGlzIGNv
bXB1dGVzIHRoZSB0eXBlIHVzaW5nIHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBlKCkgY29uc3Qg
eyByZXR1cm4gbV90eXBlOyB9CisKKyAgICAvLyBUaGlzIGlzIHVzZWZ1bCB3aGVuIGxvd2VyaW5n
LiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IHZhbGlkIGZvciBub24tdm9pZCB2YWx1ZXMuCisgICAg
QWlyOjpBcmc6OlR5cGUgYWlyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFpcjo6QXJnOjp0eXBlRm9y
QjNUeXBlKHR5cGUoKSk7IH0KKworICAgIEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1
cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNv
bnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0
eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdpdGhOb3AoKTsKKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBjYXN0IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlm
IHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92aWRlZCB0aGF0IHdlIGhhdmUgYQorICAgIC8v
IEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86CisgICAgLy8KKyAgICAvLyBpZiAoQXJndW1l
bnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkg
eworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBUaGlzIHdpbGwg
cmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAhPSBBcmd1bWVudFJlZy4gVGhpcyB3b3JrcyBi
ZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisgICAgLy8gaWYgVDo6YWNjZXB0cyhvcGNvZGUo
KSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBhcygpIGNvbnN0OworICAg
IAorICAgIGJvb2wgaGFzSW50MzIoKSBjb25zdDsKKyAgICBpbnQzMl90IGFzSW50MzIoKSBjb25z
dDsKKyAgICAKKyAgICBib29sIGhhc0ludDY0KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludDY0
KCkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQo
KSBjb25zdDsKKyAgICBib29sIGlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0OworCisgICAgYm9v
bCBoYXNEb3VibGUoKSBjb25zdDsKKyAgICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKKworICAg
IFN0YWNrbWFwKiBzdGFja21hcCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMg
dmlhIFByb2NlZHVyZS4KKyAgICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUg
dHlwZSBleHBsaWNpdGx5OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkK
KyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAg
ICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAg
fQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3Igc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5
IHdoZW4gdGhlIG9wY29kZSBoYXMgbm8gY2hpbGRyZW46CisgICAgZXhwbGljaXQgVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAg
ICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAg
ICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAg
IH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIg
dGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGNoaWxkOgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBt
X29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENo
aWxkKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsg
Zmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9y
bSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhl
IG9wY29kZSBhbG9uZSwgYW5kIHRoYXQgZG9uJ3QKKyAgICAvLyB0YWtlIGFueSBhcmd1bWVudHM6
CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShv
cGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBudWxscHRyKSkKKyAgICAg
ICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAvLyBVc2UgdGhpcyBmb3Jt
IGZvciB2YXJhcmdzLgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNo
aWxkcmVuKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bj
b2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikK
KyAgICAgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgc3RhdGljIFR5cGUgdHlwZUZvcihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKwor
ICAgIC8vIFRoaXMgZ3JvdXAgb2YgZmllbGRzIGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRz
LgorICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgIFR5cGUg
bV90eXBlOworICAgIAorICAgIE9yaWdpbiBtX29yaWdpbjsKKyAgICBBZGphY2VuY3lMaXN0IG1f
Y2hpbGRyZW47CisKK3B1YmxpYzoKKyAgICBCYXNpY0Jsb2NrKiBvd25lciB7IG51bGxwdHIgfTsg
Ly8gY29tcHV0ZWQgbGF6aWx5LgorICAgIFZhbHVlKiByZXBsYWNlbWVudCB7IG51bGxwdHIgfTsg
Ly8gdXNlZCBmb3IgYW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KK307CisKK2NsYXNzIERl
ZXBWYWx1ZUR1bXAgeworcHVibGljOgorICAgIERlZXBWYWx1ZUR1bXAoY29uc3QgVmFsdWUqIHZh
bHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUp
CisgICAgICAgICAgICBtX3ZhbHVlLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25z
dCBWYWx1ZSogbV92YWx1ZTsKK307CisKK2lubGluZSBEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKGNv
bnN0IFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1
ZUlubGluZXNfaAorI2RlZmluZSBCM1ZhbHVlSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUu
aCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4KK1QqIFZhbHVlOjphcygpCit7CisgICAgaWYgKFQ6OmFjY2VwdHMob3Bjb2RlKCkpKQor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIHJldHVybiBudWxscHRy
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3QgVCogVmFsdWU6OmFzKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxWYWx1ZSo+KHRoaXMpLT5hczxUPigpOworfQorCiti
b29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZh
bHVlPigpOworfQorCitpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2
NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3Q2NFZhbHVlPigpOworfQorCitpbnQ2
NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVl
PigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQoKSBjb25zdAoreworICAgIHJl
dHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0KCk7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSA/IGFzSW50MzIoKSA6IGFzSW50NjQo
KTsKK30KKworYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworYm9vbCBWYWx1ZTo6aGFz
RG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOwor
fQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29u
c3REb3VibGVWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworU3RhY2ttYXAqIFZhbHVlOjpzdGFja21h
cCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAg
ICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2ttYXA7CisgICAgaWYgKFBhdGNocG9pbnRWYWx1ZSog
cGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZwYXRj
aHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNW
YWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzVmFsdWVSZXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICBjYXNlIEFueToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zm
c2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1l
bnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFs
dWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAg
ICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29u
c3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ug
dXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25zIGF0IHN0YWNr
bWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRpb24gYW5kIHRv
IGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3JjZXMgYSByZXBy
ZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4gQjMgdGVsbHMg
dGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5IHRoYXQgaXQn
cyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6CisgICAgZW51bSBL
aW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMg
dGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uIEFzIGFuCisgICAgICAgIC8vIG91
dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMg
d2lsbCBvbmx5IGFyaXNlIGZvciB0aGUKKyAgICAgICAgLy8gcmlnaHQgb3BlcmFuZCAoaS5lLiBj
aGlsZCgxKSkgb2YgYSBDaGVja011bC4KKyAgICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFu
IGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29t
ZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQorICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMg
Y2xhaW1zIHRvIGNsb2JiZXIhCisgICAgICAgIFNvbWVSZWdpc3RlciwKKworICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lz
dGVyLiBBcyBhbiBvdXRwdXQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMg
dXMgd2hhdCByZWdpc3RlciBCMyBwaWNrZWQuCisgICAgICAgIFJlZ2lzdGVyLAorCisgICAgICAg
IC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNr
IHNsb3QgQjMgcGlja2VkLiBJdCdzIG5vdCBhIHZhbGlkCisgICAgICAgIC8vIGlucHV0IHJlcHJl
c2VudGF0aW9uLgorICAgICAgICBTdGFjaywKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXBy
ZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUgYXJndW1l
bnQgYXJlYSBhdCBzb21lCisgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgU3RhY2tBcmd1bWVu
dCwKKworICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMg
dXMgdGhhdCBCMyBjb25zdGFudC1mb2xkZWQgdGhlIHZhbHVlLgorICAgICAgICBDb25zdGFudAor
ICAgIH07CisgICAgCisgICAgVmFsdWVSZXAoKQorICAgICAgICA6IG1fa2luZChBbnkpCisgICAg
eworICAgIH0KKworICAgIGV4cGxpY2l0IFZhbHVlUmVwKFJlZyByZWcpCisgICAgICAgIDogbV9r
aW5kKFJlZ2lzdGVyKQorICAgICAgICAsIG1fdmFsdWUocmVnLmluZGV4KCkpCisgICAgeworICAg
IH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKKyAgICB7CisgICAgICAgIHJl
dHVybiBWYWx1ZVJlcChyZWcpOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFjayhp
bnRwdHJfdCBvZmZzZXRGcm9tRlApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBv
ZmZzZXRGcm9tRlA7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IFZhbHVlUmVwIHN0YWNrQXJndW1lbnQoaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKQorICAgIHsKKyAg
ICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2tBcmd1
bWVudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tU1A7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGludDY0
X3QgdmFsdWUpCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3Rh
bnREb3VibGUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpj
b25zdGFudChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5k
IGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAg
ICByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qg
b2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3Rh
Y2spOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAg
IH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21TUCgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoa2luZCgpID09IFN0YWNrQXJndW1lbnQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJl
dHVybiBtX3ZhbHVlOworICAgIH0KKworICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
S2luZCBtX2tpbmQ7CisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJi
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJu
X21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2Vu
ZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTA4IEBA
CisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisg
ICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQ
cm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5v
bnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwg
bmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAg
ICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1l
ID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5l
d1ZhciA6IG5hbWUgPX4gL1xBXCQvID8gJCcgOiBuYW1lCisgICAgICAgIEBvcGNvZGUgPSBvcGNv
ZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdCisgICAgZW5k
CisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAgIG9wY29kZSAhPSBuaWwKKyAgICBlbmQKKwor
ICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9p
bmRleCB7CisgICAgICAgICAgICB8IGNoaWxkLCBpbmRleCB8CisgICAgICAgICAgICB5aWVsZCB2
YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQubmFtZSwKKyAgICAgICAgICAgICAgICAg
IGNoaWxkLnZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hp
bGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9uT3BlcmFuZCkgOiAoY2hpbGQub3Bjb2Rl
ID8gOmludGVybmFsIDogOm9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgaW5kZXgKKyAgICAg
ICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgfQorICAgIGVuZAorZW5k
CisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnByb2R1Y3Rpb25zCisK
KyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgQG5hbWUgPSBu
YW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zCisgICAgZW5kCitlbmQKKwor
Y2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAg
IAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmls
ZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBl
bmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVy
fSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4s
IDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAg
ICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisg
ICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAg
ICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYg
PX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBk
ZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBl
bmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVu
dC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1l
bnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5h
bWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0g
W10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAg
IGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29t
bWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUs
IGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBW2Et
ekEtWjAtOSRdKFthLXpBLVowLTlfXSopLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5l
dyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xB
KFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdo
ZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3
KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJh
aXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRv
X3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAg
ZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2Vu
ZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdl
IGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVudHVh
bGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcil8KGluY2x1ZGUpKVxaLworZW5kCisKK2Rl
ZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBW2EtekEtWjAtOSRdKFthLXpB
LVowLTlfXSopXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNl
cgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0g
bGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVm
IHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNl
CisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1l
bnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21t
ZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAg
ICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6
ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisK
KyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7
c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVu
ZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0
cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlz
SWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAg
ZW5kCisKKyAgICBkZWYgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwcm9kdWN0aW9uKQor
ICAgICAgICBpZiBuYW1lID09IHByb2R1Y3Rpb24udmFyTmFtZQorICAgICAgICAgICAgcGFyc2VF
cnJvcigiQ2hpbGQgcHJvZHVjdGlvbiBoYXMgc2FtZSBuYW1lIGFzIHBhcmVudCBwcm9kdWN0aW9u
IikKKyAgICAgICAgZW5kCisgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkg
fCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICBwYXJzZUVycm9y
KCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBwcm9kdWN0aW9u
cyA8PCBwcm9kdWN0aW9uCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgY29uc3Vt
ZSgibWF0Y2hlciIpCisKKyAgICAgICAgbWF0Y2hlck5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgor
CisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKworICAgICAgICBsb29wIHsKKyAgICAgICAgICAg
IGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgIyBXZSBtaWdo
dCB3YW50IHRvIHN1cHBvcnQgImluY2x1ZGUiLiBJZiB3ZSBkaWQgdGhhdCwgaXQgd291bGQgZ28g
aGVyZS4KKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5
Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJE
dXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgcHJv
ZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgICAgICB9CisKKyAgICAgICAgTWF0Y2hlci5uZXco
bWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlUHJvZHVj
dGlvbgorICAgICAgICBvcmlnaW4gPSB0b2tlbi5vcmlnaW4KKyAgICAgICAgbmFtZSA9IGNvbnN1
bWVJZGVudGlmaWVyCisKKyAgICAgICAgaWYgdG9rZW4gPT0gIj0iCisgICAgICAgICAgICBjb25z
dW1lKCI9IikKKyAgICAgICAgICAgIG9wY29kZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAg
ICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgZWxzaWYgdG9rZW4gPT0gIigiCisgICAgICAgICAg
ICBjb25zdW1lKCIoIikKKyAgICAgICAgICAgIG9wY29kZSA9IG5hbWUKKyAgICAgICAgICAgIG5h
bWUgPSBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFByb2R1Y3Rpb24ubmV3
KG9yaWdpbiwgbmFtZSwgbmlsLCBuaWwpCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAg
cHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIHRv
a2VuID09ICIpIgorCisgICAgICAgICAgICBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHBh
cnNlUHJvZHVjdGlvbikKKworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisgICAg
ICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgfQorCisgICAgICAgICMgQWR2YW5jZSBhZnRl
ciB0aGUgIikiCisgICAgICAgIGFkdmFuY2UKKworICAgICAgICBQcm9kdWN0aW9uLm5ldyhvcmln
aW4sIG5hbWUsIG9wY29kZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCitlbmQKKworZmlsZU5hbWUg
PSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoZmlsZU5hbWUpLCBmaWxl
TmFtZSkKK21hdGNoZXIgPSBwYXJzZXIucGFyc2UKKworY2xhc3MgU3ViTWF0Y2gKKyAgICBhdHRy
X3JlYWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0aW9ucworICAgIAorICAgIGRlZiBpbml0aWFsaXpl
KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBpbmRleE1hcCA9IFtdCisgICAgICAg
IEBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAg
IHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwIDw8IGluZGV4CisgICAgICAgICAgICBA
cHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKKwor
ICAgIGRlZiBtYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICBpbmRleExpc3QubWFwIHsK
KyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwW2luZGV4XQorICAg
ICAgICB9CisgICAgZW5kCitlbmQKKworRmlsZS5vcGVuKCJCMyIgKyBtYXRjaGVyLm5hbWUgKyAi
LmgiLCAidyIpIHsKKyAgICB8IG91dHAgfAorCisgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQg
YnkgZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxlTmFtZX0gLS0gZG8gbm90
IGVkaXQhIgorCisgICAgb3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRjaGVyLm5hbWV9X2giCisg
ICAgb3V0cC5wdXRzICIjZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgCisgICAgb3V0
cC5wdXRzICIjaW5jbHVkZSBcIkIzVmFsdWUuaFwiIgorICAgIAorICAgIG91dHAucHV0cyAibmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0
eXBlbmFtZSBBZGFwdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgcnVuI3ttYXRjaGVyLm5hbWV9
KFZhbHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91dHAucHV0cyAieyIKKwor
ICAgICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2Rl
LCBiZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91CisgICAgIyB3YW50IHRv
IHNlZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGluIGEgZ29vZCB0ZXh0IGVk
aXRvciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlvdS4KKworICAgICMgSW4g
b2RkIHNpdHVhdGlvbnMsIHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2YWx1ZS4gVGVsbCB0aGUg
Y29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BB
UkFNKF92YWx1ZSk7IgorICAgICAgICAKKyAgICAjIFRoaXMganVzdCBwcm90ZWN0cyB0aGUgY2Fs
bGVyIGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25zIGhhdmluZyBkaWZmZXJl
bnQgbGVuZ3Rocy4KKyAgICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0
aW9ucykKKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hf
d2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAg
ICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0u
Y2hpbGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAg
ICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9
CisKKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwK
KyAgICAgICAgICAgIGxlbmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uY2hpbGRyZW4u
bGVuZ3RoCisgICAgICAgICAgICBpZiBsZW5ndGggPiAwCisgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGlsZHJlbigpLnNpemUoKSA+PSAje2xlbmd0aH0pIHsi
CisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlz
dAorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZp
Y2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNz
dW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxk
cyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlz
CisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBw
cm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2Vz
IG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rp
b25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0
IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9w
Y29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5k
ZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAg
ICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNb
LTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1
Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0K
KyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1p
dCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3
aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAg
ICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAg
ICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAg
ICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNo
IG9wY29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGlu
ZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAg
ICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAg
ICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAg
ICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVd
ID0gW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAg
ICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8IG9wY29k
ZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7
b3Bjb2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1
YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3Ro
KG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1
Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlz
dCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVO
YW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4
TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChp
bmRleExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0K
KyAgICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9w
Y29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgor
ICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNo
Q29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAg
ICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAg
ICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAgICAgICBy
ZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAg
CisgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJW
YWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAg
IyBXZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBv
dXQgYWJvdXQgaXQuCisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9
KTsiCisgICAgICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7
CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGls
ZHJlbltjb2x1bW5JbmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHko
b3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlz
dCB8CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1
Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRj
aC5wcm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRl
eExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRl
eExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0i
CisgICAgZW5kCisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHBy
b2R1Y3Rpb25zKQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJv
ZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2Ug
YXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMg
d2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4K
KyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlv
bnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnBy
b2R1Y3Rpb25zLCAwKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAg
ICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92
YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAg
ICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAg
IHByb2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0
cC5wdXRzICJ7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZh
ck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7
cHJvZHVjdGlvbi52YXJOYW1lfSk7IgorICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPSBb
XQorICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICB0cnlBcmd1
bWVudHMgPSBbXQorICAgICAgICAgICAgbnVtU2NvcGVzID0gMAorICAgICAgICAgICAgc2VlbiA9
IHt9CisgICAgICAgICAgICBwcm9kdWN0aW9uLmVhY2hWYXJpYWJsZSB7CisgICAgICAgICAgICAg
ICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5hbWUsIGNoaWxkVmFyTmFtZSwga2luZCwgaW5kZXgg
fAorICAgICAgICAgICAgICAgIGxvYWRFeHByID0gIiN7cGFyZW50VmFyTmFtZX0tPmNoaWxkKCN7
aW5kZXh9KSIKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBzZWVuW2NoaWxk
VmFyTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3VmFyCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7dG1wfSA9ICN7bG9hZEV4cHJ9OyIKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t0bXB9ID09ICN7Y2hpbGRWYXJOYW1lfSkgeyIK
KyAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIHNlZW5bY2hpbGRWYXJOYW1lXSA9IHRydWUKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7Y2hp
bGRWYXJOYW1lfSA9ICN7bG9hZEV4cHJ9OyIKKworICAgICAgICAgICAgICAgICAgICAjIEZJWE1F
OiBDb25zaWRlciBnZXR0aW5nIHJpZCBvZiB0aGUgJCBwcmVmaXguCisgICAgICAgICAgICAgICAg
ICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUyNworICAg
ICAgICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0p
KSB7IgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3Bl
cyArPSAxCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtp
bmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAg
ICAgICBvcGVyYW5kQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5k
IG9yIGtpbmQgPT0gOmFub25PcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50
cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFu
ZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5w
dXRzICJpZiAoYWRhcHRvci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICB1bmxlc3Mg
aW50ZXJuYWxBcmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBh
ZGFwdG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSAr
ICIpIikKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVu
dHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdE9w
ZXJhbmRzKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci50cnkje3Byb2R1Y3Rpb24u
bmFtZX0oIiArIHRyeUFyZ3VtZW50cy5qb2luKCIsICIpICsgIikpIHsiKQorICAgICAgICAgICAg
b3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdFJvb3RMYXRlKF92YWx1ZSk7IgorICAgICAgICAgICAg
dW5sZXNzIGludGVybmFsQXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiYWRhcHRvci5hY2NlcHRJbnRlcm5hbHNMYXRlKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2lu
KCIsICIpICsgIik7IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB1bmxlc3Mgb3BlcmFu
ZEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNj
ZXB0T3BlcmFuZHNMYXRlKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKTsiCisg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuOyIKKyAgICAgICAg
ICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIG51bVNjb3Blcy50aW1lcyB7CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5w
dXRzICJ9IgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIG91dHAucHV0cyAiICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBv
dXRwLnB1dHMgIn0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMyIKKworICAgIG91dHAucHV0cyAiI2Vu
ZGlmIC8vIEIzI3ttYXRjaGVyLm5hbWV9X2giCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0
ZVN0YWNrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFj
ZSB7CisKK2Jvb2wgYXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgU3RhY2tTbG90KiBzbG90LCBpbnRw
dHJfdCBvZmZzZXRGcm9tRlAsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykK
K3sKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTbG90cykgeworICAgICAg
ICBpZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgaWYgKG9mZnNldEZyb21GUCArIHNsb3QtPmJ5dGVTaXplKCkgPj0gb3RoZXJTbG90
LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgKyBvdGhlclNsb3QtPmJ5dGVTaXplKCkgPj0gb2Zm
c2V0RnJvbUZQKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNsb3Qt
PnNldE9mZnNldEZyb21GUChvZmZzZXRGcm9tRlApOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIGFzc2lnbihTdGFja1Nsb3QqIHNsb3QsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3Ro
ZXJTbG90cykKK3sKKyAgICBpZiAoYXR0ZW1wdEFzc2lnbm1lbnQoc2xvdCwgLXNsb3QtPmJ5dGVT
aXplKCksIG90aGVyU2xvdHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKFN0YWNrU2xv
dCogb3RoZXJTbG90IDogb3RoZXJTbG90cykgeworICAgICAgICBpZiAob3RoZXJTbG90LT5vZmZz
ZXRGcm9tRlAoKQorICAgICAgICAgICAgJiYgYXR0ZW1wdEFzc2lnbm1lbnQoc2xvdCwgb3RoZXJT
bG90LT5vZmZzZXRGcm9tRlAoKSAtIHNsb3QtPmJ5dGVTaXplKCksIG90aGVyU2xvdHMpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlU3RhY2so
Q29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRl
U3RhY2siKTsKKworICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0aGUgbG9ja2VkIHNsb3RzIGluIG9y
ZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCisgICAg
Ly8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9m
ZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCisgICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6
ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzOwor
ICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Q7CisgICAgZm9y
IChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBzd2l0Y2gg
KHNsb3QtPmtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAg
ICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgICAgICBhc3Np
Z25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5hcHBlbmQoc2xvdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6Cisg
ICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBBcyBhIG1hdHRlciBvZiBzYW5pdHksIHVuYXNzaWduIHRoaXMuIE1heWJlIGl0IHdvdWxkIGJl
IGdvb2QgdG8gZXZlbiBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIHJ1bGUg
dGhhdCB0aGlzIGNhbm5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgc2xvdC0+c2V0T2Zmc2V0
RnJvbUZQKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgLy8gVGhpcyBpcyBhIGZhaXJseSBleHBlbnNpdmUgbG9vcCwgYnV0IGl0J3Mg
T0sgYmVjYXVzZSB3ZSdsbCB1c3VhbGx5IG9ubHkgaGF2ZSBhIGhhbmRmdWwgb2YKKyAgICAvLyBs
b2NrZWQgc3RhY2sgc2xvdHMuCisgICAgd2hpbGUgKCFsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGxvY2tlZFN0YWNrU2xvdHNX
b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBhc3NpZ24oc2xvdCwgYXNzaWduZWRMb2NrZWRT
dGFja1Nsb3RzKTsKKyAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90
KTsKKyAgICB9CisKKyAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMuIE5v
dGUgdGhhdCB0aGVvcmV0aWNhbGx5IHdlIHNob3VsZCBkbyBhbiBlc2NhcGUgYW5hbHlzaXMKKyAg
ICAvLyBoZXJlLiBCdXQsIGN1cnJlbnRseSBBaXIgZG9lc24ndCBzdXBwb3J0IGVzY2FwaW5nIGEg
U3RhY2tTbG90IQorICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZXNjYXBpbmcgYSBTdGFj
a1Nsb3QgYW5kIGFkZCBlc2NhcGUgYW5hbHlzaXMgdG8gYWxsb2NhdGVTdGFjaygpLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0MzAKKworICAgIGF1
dG8gaXNSZWxldmFudCA9IFtdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7CisgICAgICAgIHJl
dHVybiBhcmcuaXNTdGFjaygpICYmIGFyZy5zdGFja1Nsb3QoKS0+a2luZCgpID09IFN0YWNrU2xv
dEtpbmQ6OkFub255bW91czsKKyAgICB9OworCisgICAgTGl2ZW5lc3M8QXJnPiBsaXZlbmVzcyhj
b2RlKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVy
ZmVyZW5jZShjb2RlLnNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOworCisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8QXJn
Pjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworCisgICAgICAgIGF1dG8g
aW50ZXJmZXJlID0gWyZdICgpIHsKKyAgICAgICAgICAgIC8vIEZvcm0gYSBjbGlxdWUgb2Ygc3Rh
Y2sgc2xvdHMgdGhhdCBpbnRlcmZlcmUuIEZpcnN0IGZpbmQgdGhlIGxpc3Qgb2Ygc3RhY2sgc2xv
dHMKKyAgICAgICAgICAgIC8vIHRoYXQgYXJlIGxpdmUgcmlnaHQgbm93LgorICAgICAgICAgICAg
c2xvdHMucmVzaXplKDApOworICAgICAgICAgICAgZm9yIChBcmcgYXJnIDogbG9jYWxDYWxjLmxp
dmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1JlbGV2YW50KGFyZykpCisgICAgICAgICAg
ICAgICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tTbG90KCkpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNsb3RzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBvdXRlciA9IHNsb3RzW2ldOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgc2xvdHMuc2l6ZSgpOyArK2opIHsK
KyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBpbm5lciA9IHNsb3RzW2ldOworCisgICAg
ICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogZmlyc3QgPSBvdXRlcjsKKyAgICAgICAgICAgICAg
ICAgICAgU3RhY2tTbG90KiBzZWNvbmQgPSBpbm5lcjsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGZpcnN0LT5pbmRleCgpID4gc2Vjb25kLT5pbmRleCgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RkOjpzd2FwKGZpcnN0LCBzZWNvbmQpOworCisgICAgICAgICAgICAgICAgICAgIGludGVy
ZmVyZW5jZVtmaXJzdF0uYWRkKHNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIGludGVyZmVy
ZW5jZVtzZWNvbmRdLmFkZChmaXJzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorICAgICAgICB9OworCisgICAgICAgIGludGVyZmVyZSgpOworICAgICAgICAKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsK
KyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAg
ICAgICAgICAgIGludGVyZmVyZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHdl
IGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0aGlzIGFsZ29yaXRobSBpcyBq
dXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKKyAgICAvLyBTdGFja1Nsb3Qgd2UganVzdCB3YW50IHRv
IGZpbmQgdGhlIG9mZnNldEZyb21GUCB0aGF0IGlzIGNsb3Nlc3QgdG8gemVybyB3aGlsZSBlbnN1
cmluZyBubworICAgIC8vIG92ZXJsYXAgd2l0aCBvdGhlciBTdGFja1Nsb3RzIHRoYXQgdGhpcyBv
dmVybGFwcyB3aXRoLgorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBvdGhlclNsb3RzOworICAgIGZv
ciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgaWYgKHNs
b3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAvLyBBbHJlYWR5IGFzc2lnbmVkIGFu
IG9mZnNldC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgSGFz
aFNldDxTdGFja1Nsb3QqPiYgaW50ZXJmZXJpbmdTbG90cyA9IGludGVyZmVyZW5jZVtzbG90XTsK
KyAgICAgICAgb3RoZXJTbG90cy5yZXNpemUoYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUo
KSArIGludGVyZmVyaW5nU2xvdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAg
IG90aGVyU2xvdHNbaV0gPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHNbaV07CisgICAgICAgIHVu
c2lnbmVkIG5leHRJbmRleCA9IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7CisgICAg
ICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBpbnRlcmZlcmluZ1Nsb3RzKQorICAgICAg
ICAgICAgb3RoZXJTbG90c1tuZXh0SW5kZXgrK10gPSBvdGhlclNsb3Q7CisKKyAgICAgICAgYXNz
aWduKHNsb3QsIG90aGVyU2xvdHMpOworICAgIH0KKworICAgIC8vIEZpZ3VyZSBvdXQgaG93IG11
Y2ggc3RhY2sgd2UncmUgdXNpbmcgZm9yIHN0YWNrIHNsb3RzLgorICAgIHVuc2lnbmVkIGZyYW1l
U2l6ZUZvclN0YWNrU2xvdHMgPSAwOworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5z
dGFja1Nsb3RzKCkpIHsKKyAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IHN0ZDo6bWF4
KAorICAgICAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cywKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPigtc2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKKyAgICB9CisKKyAgICAv
LyBOb3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQgYXJlYSB3ZSBuZWVkLgor
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYg
aW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykg
eworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDggYnl0ZXMgb2YgdGhlIGNh
bGwgYXJnLiBCdXQgdGhhdCdzIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBzdWNoIGFuIGF3
ZXNvbWUgYXNzdW1wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKKyAgICAgICAgICAgICAgICAg
ICAgQVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29kZS5y
ZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKGFyZy5vZmZzZXQoKSArIDgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvZGUuc2V0RnJhbWVT
aXplKGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgKyBjb2RlLmNhbGxBcmdBcmVhU2l6ZSgpKTsKKwor
ICAgIC8vIEZpbmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1c2UgQWRkcidzIGluc3RlYWQg
b2YgU3RhY2tTbG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcworICAgIC8vIHRyYW5zZm9ybWF0aW9u
IHNpbmNlIHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJyYXkgdG8gZmlndXJlIG91dCB3
aGljaCBTdGFja1Nsb3QgYW55CisgICAgLy8gb2Zmc2V0LWZyb20tRlAgcmVmZXJzIHRvLgorCisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBp
bnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7
CisgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCisg
ICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgYXJnLnN0YWNrU2xvdCgpLT5v
ZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFk
ZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNp
emUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBbGxvY2F0ZVN0YWNrX2gKKyNkZWZpbmUgQWly
QWxsb2NhdGVTdGFja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMg
YWxsb2NhdGVzIFN0YWNrU2xvdHMgdG8gcGxhY2VzIG9uIHRoZSBzdGFjay4gSXQgZmlyc3QgYWxs
b2NhdGVzIHRoZSBwaW5uZWQgb25lcyBpbiBpbmRleAorLy8gb3JkZXIgYW5kIHRoZW4gaXQgYWxs
b2NhdGVzIHRoZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4KKwordm9pZCBhbGxvY2F0ZVN0YWNrKENv
ZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckFsbG9jYXRlU3RhY2tfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFyZy5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3Qu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2
b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9r
aW5kKSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUbXA6CisgICAgICAgIG91dC5wcmludCh0bXAo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEltbToKKyAgICAgICAgb3V0LnByaW50KCIk
IiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAg
b3V0LnByaW50ZigiJDB4JWxseCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWRkcjoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9m
ZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbmRleDoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAg
ICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAi
LCIsIGluZGV4KCkpOworICAgICAgICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0
LnByaW50KCIsIiwgc2NhbGUoKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAg
ICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgcG9pbnRlckR1
bXAoc3RhY2tTbG90KCkpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYWxsQXJn
OgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkp
OworICAgICAgICBvdXQucHJpbnQoIihjYWxsQXJnKSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBSZWxDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBvdXQucHJpbnQo
YXNSZXN1bHRDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNwZWNpYWw6
CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJUbXAuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2lu
Y2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFja1Nsb3Q7CisKKy8vIFRoaXMg
Y2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSB3aWxsIHNh
eSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3QoLi4uLCBBcmc6OmltbSg1
KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1YmxpYzoKKyAg
ICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3
ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtpbmQgOiBpbnQ4X3Qgewor
ICAgICAgICBJbnZhbGlkLAorICAgICAgICBUbXAsCisgICAgICAgIEltbSwKKyAgICAgICAgSW1t
NjQsCisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAorICAgICAgICBDYWxsQXJnLAorICAg
ICAgICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAgUmVzQ29uZCwKKyAgICAgICAg
U3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAgICAgICBVc2Us
CisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsKKworICAgIGVudW0gVHlwZSA6
IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAgIH07CisKKyAgICBzdGF0aWMg
Y29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOworCisgICAgc3RhdGljIGJvb2wgaXNVc2UoUm9s
ZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNl
OgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yQjNU
eXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAg
ICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNhc2UgSW50NjQ6
CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAg
ICAgcmV0dXJuIEZQOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICByZXR1cm4gR1A7CisgICAgfQorCisgICAgQXJnKCkKKyAgICAgICAgOiBtX2tpbmQo
SW52YWxpZCkKKyAgICB7CisgICAgfQorCisgICAgQXJnKEFpcjo6VG1wIHRtcCkKKyAgICAgICAg
OiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFzZSh0bXApCisgICAgeworICAgIH0KKworICAg
IHN0YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0
OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tOworICAgICAgICByZXN1bHQubV9vZmZzZXQg
PSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJn
IGltbTY0KGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1
ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGFkZHIo
QWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZhbHVlLCBpbnQzMl90IG9mZnNldCA9IDApCisg
ICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7
CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFsdWUp
OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9mZnNldDsgLy8gSSBrbm93LCB5dWNrLgorICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgY2FsbEFyZyhpbnQz
Ml90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxl
KHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgeworICAgICAg
ICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2FzZSA0OgorICAgICAgICBjYXNl
IDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25l
ZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUp
IHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2Ug
MjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBy
ZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbmRleChBaXI6
OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5zaWduZWQgc2NhbGUgPSAxLCBpbnQzMl90IG9m
ZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBB
U1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRTY2FsZShzY2FsZSkp
OworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW5kZXg7Cisg
ICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9pbmRleCA9IGlu
ZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KHNjYWxl
KTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9raW5kID0gUmVsQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBBcmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbikK
KyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZXND
b25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzcGVjaWFsKEFpcjo6U3BlY2lhbCog
c3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50
cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CisgICAgICAgICAgICAmJiBtX2tpbmQgPT0g
b3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAg
ICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAgICYmIG1fc2Nh
bGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
QXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
KnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAgIGJvb2wgaXNUbXAoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7CisgICAgfQorCisgICAgYm9vbCBpc0ltbSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTsKKyAgICB9CisKKyAg
ICBib29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJ
bW02NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhY2s7CisgICAgfQorCisgICAgYm9v
bCBpc0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBDYWxs
QXJnOworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAgIGJvb2wgaXNSZWxDb25kKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKKyAgICB9CisKKyAg
ICBib29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IFJlc0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOworICAgIH0KKworICAgIGJvb2wgaXNBbGl2
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSB8fCBpc1N0YWNrKCk7Cisg
ICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisKKyAgICBpbnQ2
NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW1tIHx8
IGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisKKyAg
ICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19j
YXN0PGludHB0cl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIEFpcjo6VG1wIGJhc2UoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJ
bmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgYm9vbCBoYXNPZmZz
ZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAg
ICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2luZCgpID09IFN0
YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fc2NhbGUpOwor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2lu
ZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zm
c2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgaW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAg
IHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9z
Y2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgQWlyOjpTcGVjaWFs
KiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3BlY2lh
bCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQp
OworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQVG1wKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlAoKTsKKyAg
ICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBw
b3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBpc0dQKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAg
ICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6
CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2Fz
ZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAg
IHJldHVybiBpc0dQVG1wKCk7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMg
QXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEZQIHZhbHVlLgor
ICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJl
c0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2Ug
SW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAg
ICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxvdyBJbW02NCBhcyBhIGRvdWJsZSBpbW1lZGlh
dGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzRlBU
bXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFzVHlwZSgpIGNvbnN0CisgICAg
eworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAg
Y2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmlndW91cyBmb3Igc29tZSBhcmcg
a2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisKKyAgICBib29sIGlzVHlwZShU
eXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQKCk7CisgICAgICAgIGNhc2UgRlA6Cisg
ICAgICAgICAgICByZXR1cm4gaXNGUCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBp
c0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQ
UigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAgICB9CisKKyAgICBG
UFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcHIoKTsKKyAg
ICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKworICAgIHVuc2lnbmVk
IGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwVG1wSW5k
ZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQg
dG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnRtcEluZGV4KCk7
CisgICAgfQorCisgICAgQXJnIHdpdGhPZmZzZXQoaW50MzJfdCBhZGRpdGlvbmFsT2Zmc2V0KSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNPZmZzZXQoKSkKKyAgICAgICAgICAgIHJldHVy
biBBcmcoKTsKKyAgICAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90PihvZmZzZXQoKSwgYWRk
aXRpb25hbE9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIHN3aXRj
aCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBhZGRy
KGJhc2UoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBTdGFj
azoKKyAgICAgICAgICAgIHJldHVybiBzdGFjayhzdGFja1Nsb3QoKSwgb2Zmc2V0KCkgKyBhZGRp
dGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICAgICAgcmV0dXJu
IGNhbGxBcmcob2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBJbmRl
eDoKKyAgICAgICAgICAgIHJldHVybiBpbmRleChiYXNlKCksIGluZGV4KCksIHNjYWxlKCksIG9m
ZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEFyZygp
OworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgY2FzZSBB
ZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAg
ICAgICBmdW5jdG9yKG1faW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMg
aXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBV
c2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4g
Rm9yIGV4YW1wbGUsIHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVyY3gpCisgICAg
Ly8KKyAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBUeXBl
IGFyZ1R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNl
LCBhcmdSb2xlLCBhcmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFk
ZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBV
c2UsIEdQKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0ZWRJ
bW0zMigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG1f
b2Zmc2V0KSk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTY0IGFzVHJ1c3RlZEltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc0ltbTY0KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NCh2YWx1ZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyIGFzVHJ1c3RlZEltbVB0cigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXM2
NEJpdCgpKQorICAgICAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKHBvaW50ZXJWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6QWRkcmVzcyBhc0FkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
QWRkcigpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5n
cHIoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFzQmFzZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc0luZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJ
bmRleCgKKyAgICAgICAgICAgIG1fYmFzZS5ncHIoKSwgbV9pbmRleC5ncHIoKSwgc3RhdGljX2Nh
c3Q8TWFjcm9Bc3NlbWJsZXI6OlNjYWxlPihsb2dTY2FsZSgpKSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0K
KworICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gYXNSZXN1bHRDb25kaXRpb24o
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVzQ29uZCgpKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24+KG1fb2Zmc2V0
KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIEFy
ZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9iYXNlKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRh
YmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBB
cmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhh
c2goKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhpcyByZWFsbHkgZG9lc24ndCBoYXZlIHRv
IGJlIHRoYXQgZ3JlYXQuCisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50NjRfdD46Omhh
c2gobV9vZmZzZXQpICsgbV9raW5kICsgbV9zY2FsZSArIG1fYmFzZS5oYXNoKCkgKworICAgICAg
ICAgICAgbV9pbmRleC5oYXNoKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludDY0X3QgbV9v
ZmZzZXQgeyAwIH07CisgICAgS2luZCBtX2tpbmQgeyBJbnZhbGlkIH07CisgICAgaW50MzJfdCBt
X3NjYWxlIHsgMSB9OworICAgIEFpcjo6VG1wIG1fYmFzZTsKKyAgICBBaXI6OlRtcCBtX2luZGV4
OworfTsKKworc3RydWN0IEFyZ0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0
IEFyZyYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwo
Y29uc3QgQXJnJiBhLCBjb25zdCBBcmcmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRp
YyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworbmFtZXNwYWNlIFdURiB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0
IERlZmF1bHRIYXNoPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpB
aXI6OkFyZ0hhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNo
VHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OkFyZz4g
OiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpBcmc+IHsKKyAgICAvLyBCZWNh
dXNlIG1fc2NhbGUgaXMgMSBpbiB0aGUgZW1wdHkgdmFsdWUuCisgICAgc3RhdGljIGNvbnN0IGJv
b2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQXJnX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJs
b2NrKQoreworICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQor
Citib29sIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQor
eworICAgIHJldHVybiBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCiti
b29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNp
Y0Jsb2NrKiB0bykKK3sKKyAgICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBm
cm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBC
YXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7
CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgi
ICAgICIsIGluc3QsICJcbiIpOworfQorCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVk
IGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRleCkKKyAgICAsIG1f
ZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNCbG9ja19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5j
bHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
Q29kZTsKK2NsYXNzIEluc2VydGlvblNldDsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBjb25zdCBjaGFyKiBkdW1wUHJlZml4
ID0gIiMiOworCisgICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7CisgICAgdHlwZWRl
ZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBlZGVmIFZl
Y3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICB1bnNpZ25lZCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25z
dF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAg
IEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVu
ZCgpOyB9CisKKyAgICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHNbaW5kZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBt
X2luc3RzW2luZGV4XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5zdHMubGFzdCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFz
dCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgYXBwZW5kSW5z
dChJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2Fy
ZDxJbnN0PihpbnN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7Cisg
ICAgICAgIG1faW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1l
bnRzKS4uLikpOworICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3
aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBp
cyB0aGUKKyAgICAvLyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBm
YWxsLXRocm91Z2ggb2YgYSBjb25kaXRpb25hbCBicmFuY2guCisgICAgdW5zaWduZWQgbnVtU3Vj
Y2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVx
dWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1
Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNj
ZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9Cisg
ICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQor
CisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNj
ZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9j
aygpOyB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0
PiBzdWNjZXNzb3JCbG9ja3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxl
Y3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9Cisg
ICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JM
aXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nl
c3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4obV9z
dWNjZXNzb3JzKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25z
dCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVk
ZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5k
ZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3Qm
IHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisgICAgUHJl
ZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQor
CisgICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZW1vdmVQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFz
aWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRp
b25TZXQ7CisgICAgCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1
ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIEluc3RMaXN0IG1faW5zdHM7Cisg
ICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJl
ZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNp
Y0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2lj
QmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG1fYmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Js
b2NrRHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4g
RGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckJhc2lj
QmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
Q2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworQ0NhbGxTcGVjaWFsOjpDQ2FsbFNwZWNpYWwoKQoreworICAgIG1fY2xvYmJlcmVkUmVncyA9
IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVk
ZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgbV9j
bG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7
Cit9CisKK0NDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgQ0NhbGxT
cGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpF
YWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0s
IEFyZzo6VXNlLCBBcmc6OkdQKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwg
aW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIEZvciB0aGUgdHlwZSwgd2UgY2Fu
IGp1c3QgcXVlcnkgdGhlIGFyZydzIHR5cGUuIFRoZSBhcmcgd2lsbCBoYXZlIGEgdHlwZSwgYmVj
YXVzZSB3ZQorICAgICAgICAvLyByZXF1aXJlIHRoZXNlIGFyZ3MgdG8gYmUgYXJndW1lbnQgcmVn
aXN0ZXJzLgorICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbaV0sIEFyZzo6VXNlLCBpbnN0LmFy
Z3NbaV0udHlwZSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjppc1ZhbGlkKElu
c3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNl
IEFyZzo6SW1tOgorICAgICAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGlmIChp
czY0Qml0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
IGNhc2UgQXJnOjpUbXA6CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgY2FzZSBBcmc6OlN0YWNr
OgorICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNH
UCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBp
IDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5zdC5hcmdzW2ldLmlz
UmVnKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGluc3QuYXJn
c1tpXSA9PSBUbXAoc2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVybiAgZmFsc2U7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENDYWxsU3BlY2lhbDo6YWRtaXRz
U3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIC8vIEFyZyAxIGNhbiBiZSBh
IHN0YWNrIGFkZHJlc3MgZm9yIHN1cmUuCisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAg
IHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ2FsbFNw
ZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikKK3sK
K30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5z
dCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBzd2l0Y2gg
KGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJn
OjpJbW02NDoKKyAgICAgICAgaml0Lm1vdmUoaW5zdC5hcmdzWzFdLmFzVHJ1c3RlZEltbVB0cigp
LCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBqaXQuY2FsbChzY3JhdGNoUmVnaXN0ZXIpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBqaXQuY2FsbChpbnN0
LmFyZ3NbMV0uZ3ByKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAg
ICAgICAgaml0LmNhbGwoaW5zdC5hcmdzWzFdLmFzQWRkcmVzcygpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30K
KworY29uc3QgUmVnaXN0ZXJTZXQmIENDYWxsU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKElu
c3QmKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVj
aWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
Q0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiZnVuY3Rpb24gY2FsbCB0aGF0IHVzZXMg
dGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxTcGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxT
cGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8g
VXNlIHRoaXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBj
b3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBv
YmplY3QuIEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJl
Z2lzdGVyLCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRo
ZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1l
bnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdv
cmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24g
d2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRv
IGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0
IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSBy
ZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlm
IHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIg
dG8gYmUgbGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwg
d2hpY2hldmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGlj
IFNwZWNpYWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNp
YWwoKTsKKworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1
bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAg
Ly8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhl
IHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3Bl
Y2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcg
c2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOwor
ICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsK
KyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikg
b3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhl
bHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1w
SW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBs
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJT
ZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNDYWxsU3BlY2lh
bF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwu
aCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0NvZGU6OkNvZGUoKQoreworfQorCitDb2Rl
Ojp+Q29kZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVx
dWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNp
Y0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVz
dWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90
KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFja1Ns
b3QoYnl0ZVNpemUsIG1fc3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7CisgICAgU3Rh
Y2tTbG90KiByZXN1bHQgPSBzbG90LmdldCgpOworICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RG
Ojptb3ZlKHNsb3QpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTcGVjaWFsKiBDb2RlOjph
ZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQoreworICAgIFNwZWNp
YWwqIHJlc3VsdCA9IHNwZWNpYWwuZ2V0KCk7CisgICAgbV9zcGVjaWFscy5hcHBlbmQoV1RGOjpt
b3ZlKHNwZWNpYWwpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDQ2FsbFNwZWNpYWwqIENv
ZGU6OmNDYWxsU3BlY2lhbCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAgICAg
ICBtX2NDYWxsU3BlY2lhbCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAgICAg
ICAgYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAgIH0K
KworICAgIHJldHVybiBtX2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJlYWNo
YWJpbGl0eSgpCit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30KKwor
dm9pZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2sp
KTsKKyAgICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlN0
YWNrIHNsb3RzOlxuIik7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90
cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc2xvdCksICJcbiIp
OworICAgIH0KKyAgICBpZiAoc3BlY2lhbHMoKS5zaXplKCkpIHsKKyAgICAgICAgb3V0LnByaW50
KCJTcGVjaWFsczpcbiIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFs
cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCksICJc
biIpOworICAgIH0KKyAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCAi
XG4iKTsKKyAgICBvdXQucHJpbnQoIkNhbGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJnQXJl
YVNpemUsICJcbiIpOworICAgIG91dC5wcmludCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNh
dmVSZWdpc3RlcnMsICJcbiIpOworfQorCit1bnNpZ25lZCBDb2RlOjpmaW5kRmlyc3RCbG9ja0lu
ZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHdoaWxlIChpbmRleCA8IHNpemUoKSAm
JiAhYXQoaW5kZXgpKQorICAgICAgICBpbmRleCsrOworICAgIHJldHVybiBpbmRleDsKK30KKwor
dW5zaWduZWQgQ29kZTo6ZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAor
eworICAgIHJldHVybiBmaW5kRmlyc3RCbG9ja0luZGV4KGluZGV4ICsgMSk7Cit9CisKK0Jhc2lj
QmxvY2sqIENvZGU6OmZpbmROZXh0QmxvY2soQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGF0KGZpbmROZXh0QmxvY2tJbmRleChibG9jay0+aW5kZXgoKSkpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDMwMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckNvZGVfaAorI2RlZmluZSBBaXJDb2RlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWly
U3BlY2lhbC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVy
QXRPZmZzZXRMaXN0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDQ2FsbFNwZWNpYWw7CisK
Ky8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJ
dCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFuIHRoZQorLy8gZ2VuZXJhdGVkIG1h
Y2hpbmUgY29kZSAtIGZvciBleGFtcGxlIGlmIHlvdSdyZSBnZW5lcmF0aW5nIDFNQiBvZiBtYWNo
aW5lIGNvZGUsIHlvdSBuZWVkIGFib3V0CisvLyA0ME1CIG9mIEFpci4KKworY2xhc3MgQ29kZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29kZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgQ29kZSgpOworICAgIH5Db2RlKCk7CisKKyAgICBCYXNpY0Js
b2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBTdGFja1Nsb3Qq
IGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90
VmFsdWUqID0gbnVsbHB0cik7CisKKyAgICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVl
X3B0cjxTcGVjaWFsPik7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBzcGVjaWFsIHlvdSBuZWVkIHRv
IG1ha2UgYSBDIGNhbGwhCisgICAgQ0NhbGxTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAg
IFRtcCBuZXdUbXAoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6Z3BUbXBG
b3JJbmRleChtX251bUdQVG1wcysrKTsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAg
ICAgcmV0dXJuIFRtcDo6ZnBUbXBGb3JJbmRleChtX251bUZQVG1wcysrKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHVuc2lnbmVkIG51bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAg
cmV0dXJuIG1fbnVtR1BUbXBzOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICBy
ZXR1cm4gbV9udW1GUFRtcHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYWxs
QXJnQXJlYVNpemUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxBcmdBcmVhU2l6ZTsgfQorCisgICAg
Ly8gWW91IGNhbiBjYWxsIHRoaXMgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiB0byBmb3JjZSBhIG1p
bmltdW0gY2FsbCBhcmcgYXJlYSBzaXplLgorICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6
ZSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUgPSBzdGQ6
Om1heChtX2NhbGxBcmdBcmVhU2l6ZSwgc2l6ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnJh
bWVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVNpemU7IH0KKworICAgIC8vIE9ubHkgcGhh
c2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbiBhcmUgYWxsb3dlZCB0byBzZXQgdGhpcy4gQ3Vy
cmVudGx5LCBvbmx5CisgICAgLy8gQWlyOjphbGxvY2F0ZVN0YWNrKCkgZG9lcyB0aGlzLgorICAg
IHZvaWQgc2V0RnJhbWVTaXplKHVuc2lnbmVkIGZyYW1lU2l6ZSkKKyAgICB7CisgICAgICAgIG1f
ZnJhbWVTaXplID0gZnJhbWVTaXplOworICAgIH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9
CisKKyAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBhbmQgZGVsZXRlcyB1bnJlYWNoYWJs
ZSBibG9ja3MuCisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sq
IG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQor
CisgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAh
PSBudWxsIGFuZCBpbmRleCcgPj0gaW5kZXguCisgICAgdW5zaWduZWQgZmluZEZpcnN0QmxvY2tJ
bmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3Qg
aW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+IGluZGV4Lgor
ICAgIHVuc2lnbmVkIGZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisK
KyAgICBCYXNpY0Jsb2NrKiBmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqKSBjb25zdDsKKworICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAg
ICAgICAgIDogbV9jb2RlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29kZSYgY29kZSwgdW5z
aWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29kZSgmY29kZSkKKyAgICAgICAgICAgICwg
bV9pbmRleChtX2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgpKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jb2RlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRl
eCA9IG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleChtX2luZGV4ICsgMSk7CisgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBjb25zdCBDb2RlKiBtX2NvZGU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Cisg
ICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIHNpemUoKSk7IH0KKworICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisg
ICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90cy5zaXpl
KCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlLm1fc3RhY2tTbG90c1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgU3RhY2tTbG90
KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0K
KworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVj
dGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNv
bGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9p
bmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisr
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBj
b25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTdGFja1Nsb3Rz
Q29sbGVjdGlvbiBzdGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rp
b24oKnRoaXMpOyB9CisgICAgCisgICAgY2xhc3MgU3BlY2lhbHNDb2xsZWN0aW9uIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFNwZWNpYWxzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQorICAg
ICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzLnNpemUoKTsg
fQorICAgICAgICBTcGVjaWFsKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlLm1fc3BlY2lhbHNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFNwZWNpYWwqIG9wZXJhdG9y
W10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3Io
KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAg
ICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisg
ICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBTcGVjaWFsKiBvcGVyYXRvciooKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3BlY2lhbHND
b2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4Owor
ICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25z
dCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFNwZWNpYWxzQ29sbGVjdGlvbiBzcGVjaWFs
cygpIGNvbnN0IHsgcmV0dXJuIFNwZWNpYWxzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKK3By
aXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xv
dHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7Cisg
ICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBDQ2Fs
bFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fbnVt
R1BUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBzIHsgMCB9OworICAgIHVuc2ln
bmVkIG1fZnJhbWVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fY2FsbEFyZ0FyZWFTaXplIHsg
MCB9OworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKK307
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQWly
RnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dl
bmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNG
cmVxdWVudGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgiCisjaW5jbHVkZSAiQWly
Q29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKyNp
bmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAi
QjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgZ2VuZXJhdGUoQ29kZSYg
Y29kZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkK
KyAgICAgICAgdmFsaWRhdGUoY29kZSwgImluaXRpYWwiKTsKKworICAgIGlmIChzaG91bGREdW1w
SVIoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOworICAgICAgICBkYXRh
TG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgcnVuIG91ciBvcHRp
bWl6YXRpb25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCisgICAgLy8gRklYTUU6IEFkZCBBaXIgb3B0
aW1pemF0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNDU2CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHdvdWxkIGhhdmUgYSByZWFsIHJl
Z2lzdGVyIGFsbG9jYXRvci4gVGhlbiwgd2UgY291bGQgdXNlIHNwaWxsRXZlcnl0aGluZygpCisg
ICAgLy8gaW4gcGxhY2Ugb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBvbmx5IGZvciB0ZXN0aW5n
LgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNDU3CisgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOworCisgICAgLy8gUHJpb3IgdG8gdGhp
cyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2Vz
IGl0IGV4cGxpY2l0LiBJdCBhbHNvCisgICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3
aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCisgICAgaGFuZGxl
Q2FsbGVlU2F2ZXMoY29kZSk7CisKKyAgICAvLyBUaGlzIHR1cm5zIGFsbCBTdGFjayBhbmQgQ2Fs
bEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNlIHRoZSBmcmFtZSBwb2ludGVyLiBJdCBk
b2VzCisgICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxsb2NhdGluZyBzdGFjayBzbG90cy4gSXQg
c2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9wdGltYWwsIHNvIHdlCisgICAgLy8gc2hv
dWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2ZXJ5IG11Y2guCisgICAgYWxsb2NhdGVT
dGFjayhjb2RlKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGhhdmUgYSBjb2Rl
IGxheW91dCBvcHRpbWl6YXRpb24gaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc4CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIGxhdGUg
bGl2ZW5lc3MgYW5hbHlzaXMgb3ZlciByZWdpc3RlcnMgdG8gZmlsbCBpbiB0aGUKKyAgICAvLyBT
cGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUxMQorCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIo
KSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgImZpbmFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVt
cElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7Cisg
ICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJh
dGUgY29kZS4KKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIEdlbmVyYXRpb25Db250ZXh0IGNv
bnRleHQ7CisgICAgY29udGV4dC5jb2RlID0gJmNvZGU7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9j
aywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tMYWJlbHMoY29kZS5zaXplKCkpOworICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29k
ZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6Okp1bXAganVt
cCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAgICAgIGlmIChibG9ja0xhYmVsc1t0YXJnZXRd
LmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAubGlua1RvKGJsb2NrTGFiZWxzW3RhcmdldF0s
ICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYmxvY2tK
dW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAgICB9OworCisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxvY2tKdW1wc1tibG9ja10ubGluaygmaml0KTsK
KyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQp
OworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5pc1NldCgpKTsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXAK
KyAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0
QmxvY2soYmxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJsb2Nr
LT5sYXN0KCkub3Bjb2RlID09IFJldCkgeworICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGRv
bid0IHJlcHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1ZS9lcGlsb2d1ZSBpbiBBaXIsIHNvIHdlIG5l
ZWQgdG8KKyAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlkZS4KKyAgICAgICAgICAgIGpp
dC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVy
czo6SnVtcCBqdW1wID0gYmxvY2stPmxhc3QoKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAg
ICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spCisgICAgICAgICAgICBqdW1wID0gaW5zdC5n
ZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICBzd2l0Y2ggKGJsb2NrLT5udW1TdWNjZXNz
b3JzKCkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgQVNTRVJUKCFqdW1wLmlzU2V0
KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGxp
bmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JC
bG9jaygwKSk7CisgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpICE9IGNv
ZGUuZmluZE5leHRCbG9jayhibG9jaykpCisgICAgICAgICAgICAgICAgbGluayhqaXQuanVtcCgp
LCBibG9jay0+c3VjY2Vzc29yQmxvY2soMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGxhdGVQ
YXRoIDogY29udGV4dC5sYXRlUGF0aHMpCisgICAgICAgIGxhdGVQYXRoLT5ydW4oaml0LCBjb250
ZXh0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gK
KyNkZWZpbmUgQWlyR2VuZXJhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQg
aGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFk
IGFueQorLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5n
cywgYW5kIHRoZW4gZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbgorLy8gQ0NhbGxI
ZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxsYmFja3MgaW4gdGhl
IHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMKKy8vIGdlbmVyYXRpbmcuCit2b2lkIGdlbmVyYXRlKENv
ZGUmLCBDQ2FsbEhlbHBlcnMmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVk
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKy8vIFRoaXMgaXMgZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3Iu
cmIuCisjaW5jbHVkZSAiQWlyT3Bjb2RlR2VuZXJhdGVkLmgiCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9u
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGlvbkNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorI2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4
dF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1
Y3QgR2VuZXJhdGlvbkNvbnRleHQgeworICAgIHR5cGVkZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9u
KENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7CisgICAgdHlwZWRlZiBTaGFyZWRU
YXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXRl
UGF0aD4+IGxhdGVQYXRoczsKKyAgICBDb2RlKiBjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpckdlbmVyYXRpb25Db250ZXh0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJI
YW5kbGVDYWxsZWVTYXZlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFz
ZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKwordm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2Nv
cGUgcGhhc2VTY29wZShjb2RlLCAiaGFuZGxlQ2FsbGVlU2F2ZXMiKTsKKworICAgIFJlZ2lzdGVy
U2V0IHVzZWRDYWxsZWVTYXZlczsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgaW5z
dC5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEF0IGZpcnN0IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2VkIHJlZ3Mu
CisgICAgICAgICAgICAgICAgICAgIHVzZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3ZSBmaWx0
ZXIgdG8gcmVhbGx5IGdldCB0aGUgY2FsbGVlIHNhdmVzLgorICAgIHVzZWRDYWxsZWVTYXZlcy5m
aWx0ZXIoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKKyAgICBjb2RlLmNh
bGxlZVNhdmVSZWdpc3RlcnMoKSA9IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KHVzZWRDYWxsZWVTYXZl
cyk7CisKKyAgICBzaXplX3QgYnl0ZVNpemUgPSAwOworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJB
dE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkKKyAgICAgICAgYnl0
ZVNpemUgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KC1lbnRyeS5vZmZzZXQoKSksIGJ5
dGVTaXplKTsKKworICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFja1Nsb3Qo
Ynl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgLy8gVGhpcyBpcyBhIGJpdCB3
ZWlyZCBzaW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0YWNr
IHNsb3QgdG8gdGhpcworICAgIC8vIGFyZWEuCisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9t
RlAoLWJ5dGVTaXplKTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0
T2Zmc2V0JiBlbnRyeSkgLT4gQXJnIHsKKyAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soc2F2ZXNB
cmVhLCBlbnRyeS5vZmZzZXQoKSArIGJ5dGVTaXplKTsKKyAgICB9OworCisgICAgSW5zZXJ0aW9u
U2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICAKKyAgICAvLyBGaXJzdCBpbnNlcnQgc2F2aW5n
IGNvZGUgaW4gdGhlIHByb2xvZ3VlLgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYg
ZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0KAorICAgICAgICAgICAgMCwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBN
b3ZlRG91YmxlLCBjb2RlWzBdLT5hdCgwKS5vcmlnaW4sCisgICAgICAgICAgICBUbXAoZW50cnku
cmVnKCkpLCBhcmdGb3IoZW50cnkpKTsKKyAgICB9CisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUo
Y29kZVswXSk7CisKKyAgICAvLyBOb3cgaW5zZXJ0IHJlc3RvcmUgY29kZSBhdCBlcGlsb2d1ZXMu
CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgSW5zdCYgbGFz
dCA9IGJsb2NrLT5sYXN0KCk7CisgICAgICAgIGlmIChsYXN0Lm9wY29kZSAhPSBSZXQpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQm
IGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIGVudHJ5
LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgbGFzdC5vcmlnaW4sCisgICAgICAg
ICAgICAgICAgYXJnRm9yKGVudHJ5KSwgVG1wKGVudHJ5LnJlZygpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNh
dmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckhh
bmRsZUNhbGxlZVNhdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRs
ZUNhbGxlZVNhdmVzX2gKKyNkZWZpbmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHBoYXNlIGlkZW50aWZpZXMgY2FsbGVlLXNh
dmUgcmVnaXN0ZXJzIGFuZCBhZGRzIGNvZGUgdG8gc2F2ZS9yZXN0b3JlIHRoZW0gaW4gdGhlCisv
LyBwcm9sb2d1ZS9lcGlsb2d1ZSB0byB0aGUgY29kZS4gSXQncyBhIG1hbmRhdG9yeSBwaGFzZS4K
KworLy8gRklYTUU6IEl0IHdvdWxkIGJlIGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3Rp
dmUgd2l0aCB0aGUgQWlyIGNsaWVudCBhbmQgYWxzbyBtb3JlCisvLyBwb3dlcmZ1bC4KKy8vIFdl
IHNob3VsZCBoYXZlIHNocmluayB3cmFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ1OAorLy8gV2Ugc2hvdWxkIG1ha2UgdGhpcyBpbnRlcmFjdCB3aXRo
IHRoZSBjbGllbnQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0
NTkKKwordm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJIYW5kbGVDYWxsZWVTYXZlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0
aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRp
b25zKGJsb2NrLT5tX2luc3RzLCBtX2luc2VydGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnNlcnRpb25TZXRfaAorI2RlZmluZSBB
aXJJbnNlcnRpb25TZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpcklu
c3QuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIEJhc2ljQmxvY2s7CitjbGFzcyBDb2RlOworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPElu
c3Q+IEluc2VydGlvbjsKKworY2xhc3MgSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBJbnNl
cnRpb25TZXQoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAg
fQorCisgICAgQ29kZSYgY29kZSgpIHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYgaW5zZXJ0aW9uKQorICAg
IHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oaW5zZXJ0aW9u
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGluc2Vy
dEluc3Qoc2l6ZV90IGluZGV4LCBJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVuZElu
c2VydGlvbihJbnNlcnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOworICAg
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBp
bnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAg
ICAgICBpbnNlcnRJbnN0KGluZGV4LCBJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykuLi4pKTsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitw
cml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2lu
c2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9M
aXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK3ZvaWQgSW5zdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChvcGNvZGUsICIgIiwgbGlzdER1bXAoYXJncykpOworICAgIGlmIChvcmlnaW4pCisg
ICAgICAgIG91dC5wcmludCgiLCAiLCAqb3JpZ2luKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJJbnN0X2gKKyNkZWZpbmUgQWlySW5zdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQ0Nh
bGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7Citj
bGFzcyBSZWdpc3RlclNldDsKKworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25h
bWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK3N0cnVjdCBJbnN0
IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJ
bnN0KCkKKyAgICAgICAgOiBvcmlnaW4obnVsbHB0cikKKyAgICAgICAgLCBvcGNvZGUoTm9wKQor
ICAgIHsKKyAgICB9CisgICAgCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2lu
KQorICAgICAgICA6IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCisgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAg
ICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAg
fQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0
JiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2lu
KG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJ
bnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisg
ICAgICAgIDogYXJncyhXVEY6Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3Jp
Z2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5v
dGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdl
IHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMg
bWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IElu
c3QmIiB0aGVuIHlvdSdyZQorICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAg
Ly8gVGhpcyBvbmx5IHdhbGtzIHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9u
ZWQsIGFuZCBpdCBkb2Vzbid0IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcmIGFyZyA6IGFy
Z3MpCisgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAgfQorCisg
ICAgdHlwZWRlZiB2b2lkIEVhY2hBcmdDYWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlw
ZSk7CisgICAgCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBl
KS4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5l
cmF0b3IucmIuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVh
Y2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3Rvcik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3Rv
ciB3aXRoICh0bXAsIHJvbGUsIHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoVG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAg
ICAgICBmb3JFYWNoQXJnKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJv
bGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9s
ZSwgdHlwZSwgZnVuY3Rvcik7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGlu
ZyBjYW4gYmUgZWl0aGVyIEFyZyBvciBUbXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcs
IHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGEgU3Bl
Y2lhbCouIFRoaXMgdW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAgYm9vbCBo
YXNTcGVjaWFsKCkgY29uc3Q7CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFsIHJlZ2lz
dGVycyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5j
eSwKKyAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwo
KSByZXR1cm5zIHRydWUuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVn
cygpOworCisgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2
ZS4gVGhpcyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisgICAgLy8g
dGhhdCBmb3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgaWYg
aGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMo
Y29uc3QgUmVnaXN0ZXJTZXQmKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gb25l
IG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5l
cmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNWYWxpZEZv
cm0oKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBm
b3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisgICAg
Ly8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChvciBhIFN0
YWNrU2xvdCBvciBDYWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVuIGluZGV4
PyBTcGlsbGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvIGZpbmQg
VG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBpdCBjYWxs
cyB0aGlzIHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBhbiBBcmc6
OkFkZHIuIElmIGl0CisgICAgLy8gZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0
aGF0IEFyZydzIGZvckVhY2hUbXAgdG8gZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4KKyAgICAv
LworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVy
YXRvci5yYi4KKyAgICBib29sIGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAg
IC8vIEdlbmVyYXRlIHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBpcywgbGlr
ZSwgbGl0ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRlcm1pbmFs
LCBpdCByZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0aGUgInRo
ZW4iIGNhc2UsIHdpdGggdGhlICJlbHNlIgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10aHJvdWdo
LiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIu
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdlbmVyYXRp
b25Db250ZXh0Jik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAg
IEFyZ0xpc3QgYXJnczsKKyAgICBWYWx1ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVlIHRoYXQg
dGhpcyBvcmlnaW5hdGVkIGZyb20uCisgICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJJbnN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlySW5zdElubGluZXNfaAorI2RlZmluZSBBaXJJbnN0SW5saW5lc19oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxz
LmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZvckVhY2g7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBGb3JFYWNoPFRtcD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoVG1wKGZ1bmN0b3IpOworICAgIH0K
K307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPEFyZz4geworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1bmN0b3Ip
OworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9y
Pgordm9pZCBJbnN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgRm9y
RWFjaDxUaGluZz46OmZvckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitib29sIEluc3Q6Omhh
c1NwZWNpYWwoKSBjb25zdAoreworICAgIHJldHVybiBhcmdzLnNpemUoKSAmJiBhcmdzWzBdLmlz
U3BlY2lhbCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRS
ZWdzKCkKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5z
cGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7Cit9CisKK3ZvaWQgSW5zdDo6cmVw
b3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAg
ICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICBhcmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNl
ZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBib29sIGlzU2hp
ZnRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworI2lmIENQVShYODYpIHx8IENQVShYODZfNjQp
CisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9PSBUbXAoWDg2UmVnaXN0ZXJzOjplY3gpOworI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oaW5zdCk7CisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30g
ICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7Cisg
ICAgcmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpcklu
c3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZl
bmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2
ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckxpdmVuZXNzX2gK
KyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNJ
bmRleFNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKKy8vIFlvdSBjYW4gY29tcHV0ZSBsaXZlbmVzcyBvdmVyIFRtcCdzIG9yIG92ZXIgQXJn
J3MuIElmIHlvdSBjb21wdXRlIG92ZXIgQXJnJ3MsIHlvdSBnZXQgYm90aAorLy8gc3RhY2sgbGl2
ZW5lc3MgYW5kIHRtcCBsaXZlbmVzcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nPgorY2xhc3Mg
TGl2ZW5lc3MgeworcHVibGljOgorICAgIExpdmVuZXNzKENvZGUmIGNvZGUpCisgICAgeworICAg
ICAgICBtX2xpdmVBdEhlYWQucmVzaXplKGNvZGUuc2l6ZSgpKTsKKyAgICAgICAgbV9saXZlQXRU
YWlsLnJlc2l6ZShjb2RlLnNpemUoKSk7CisKKyAgICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4g
c2VlbjsKKworICAgICAgICBib29sIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB3aGlsZSAoY2hh
bmdlZCkgeworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworCisgICAgICAgICAgICBmb3Ig
KHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGUuYXQoYmxvY2tJbmRleCk7CisgICAg
ICAgICAgICAgICAgTG9jYWxDYWxjIGxvY2FsQ2FsYygqdGhpcywgYmxvY2spOworICAgICAgICAg
ICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0t
OykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJ
bmRleCkpOworICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RUaW1lID0gc2Vlbi5hZGQoYmxvY2sp
OworICAgICAgICAgICAgICAgIGlmICghZmlyc3RUaW1lICYmIGxvY2FsQ2FsYy5saXZlKCkgPT0g
bV9saXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgeworICAgICAgICAgICAg
ICAgICAgICBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdLmFkZCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGxvY2FsQ2FsYy5saXZlKCkuYmVnaW4oKSwgbG9jYWxDYWxjLmxpdmUoKS5lbmQoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fbGl2ZUF0SGVhZFtibG9ja10g
PSBsb2NhbENhbGMudGFrZUxpdmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRIZWFkKEJhc2ljQmxvY2sqIGJsb2Nr
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0SGVhZFtibG9ja107CisgICAg
fQorCisgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmVBdFRhaWwoQmFzaWNCbG9jayogYmxv
Y2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9saXZlQXRUYWlsW2Jsb2NrXTsKKyAg
ICB9CisKKyAgICAvLyBUaGlzIGNhbGN1bGF0b3IgaGFzIHRvIGJlIHJ1biBpbiByZXZlcnNlLgor
ICAgIGNsYXNzIExvY2FsQ2FsYyB7CisgICAgcHVibGljOgorICAgICAgICBMb2NhbENhbGMoTGl2
ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAgIDogbV9saXZl
KGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZTsg
fQorICAgICAgICBIYXNoU2V0PFRoaW5nPiYmIHRha2VMaXZlKCkgeyByZXR1cm4gV1RGOjptb3Zl
KG1fbGl2ZSk7IH0KKworICAgICAgICB2b2lkIGV4ZWN1dGUoSW5zdCYgaW5zdCkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGRlZidzLgorICAgICAgICAgICAgaW5zdC5m
b3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6
Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNB
bGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2
ZS5yZW1vdmUoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgLy8gTmV4
dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAgICAgIGlmIChpbnN0Lmhhc1Nw
ZWNpYWwoKSkgeworICAgICAgICAgICAgICAgIGluc3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkuZm9y
RWFjaCgKKyAgICAgICAgICAgICAgICAgICAgW3RoaXNdIChSZWcgcmVnKSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKFRoaW5nKFRtcChyZWcpKSk7CisgICAgICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIHVzZSdzLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNo
PFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSBy
b2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBp
ZiAoQXJnOjppc1VzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5hZGQo
YXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgSGFzaFNldDxUaGluZz4gbV9saXZlOworICAgIH07CisgICAgCitwcml2YXRlOgorICAg
IEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdEhlYWQ7CisgICAg
SW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0VGFpbDsKK307CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBBaXJMaXZlbmVzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNDkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
KyMgU3lsbGFidXM6CisjCisjIFJvbGVzIGFuZCB0eXBlczoKKyMgVTpHID0+IHVzZSBvZiBhIGdl
bmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBEOkcgPT4gZGVmIG9mIGEgZ2VuZXJh
bC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkcgPT4gdXNlIGFuZCBkZWYgb2YgYSBn
ZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVTpGID0+IHVzZSBvZiBhIGZsb2F0
IHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RiA9PiBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2
YWx1ZQorIyBVRDpGID0+IHVzZSBhbmQgZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUK
KyMKKyMgQXJndW1lbnQga2luZHM6CisjIFRtcCA9PiB0ZW1wb3Jhcnkgb3IgcmVnaXN0ZXIKKyMg
SW1tID0+IDMyLWJpdCBpbW1lZGlhdGUgaW50CisjIEltbTY0ID0+IFRydXN0ZWRJbW02NAorIyBB
ZGRyID0+IGFkZHJlc3MgYXMgdGVtcG9yYXJ5L3JlZ2lzdGVyK29mZnNldAorIyBJbmRleCA9PiBC
YXNlSW5kZXggYWRkcmVzcworIyBBYnMgPT4gQWJzb2x1dGVBZGRyZXNzCisjCisjIFRoZSBwYXJz
ZXIgdmlld3MgdGhlc2UgdGhpbmdzIGFzIGtleXdvcmRzLCBhbmQgdW5kZXJzdGFuZHMgdGhhdCB0
aGV5IGZhbGwgaW50byB0d28gZGlzdGluY3QgY2xhc3NlcworIyBvZiB0aGluZ3MuIFNvLCBhbHRo
b3VnaCB0aGlzIGZpbGUgdXNlcyBhIHBhcnRpY3VsYXIgaW5kZW50YXRpb24gc3R5bGUsIG5vbmUg
b2YgdGhlIHdoaXRlc3BhY2Ugb3IKKyMgZXZlbiBuZXdsaW5lcyBhcmUgbWVhbmluZ2Z1bCB0byB0
aGUgcGFyc2VyLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHdyaXRlOgorIworIyBGb280MiBVOkcs
IFVEOkYgSW1tLCBUbXAgQWRkciwgVG1wCisjCisjIEFuZCB0aGUgcGFyc2VyIHdvdWxkIGtub3cg
dGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzOgorIworIyBGb280MiBVOkcsIFVEOkYKKyMgICAgIElt
bSwgVG1wCisjICAgICBBZGRyLCBUbXAKKyMKKyMgSS5lLiBhIHR3by1mb3JtIGluc3RydWN0aW9u
IHRoYXQgdXNlcyBhIEdQUiBvciBhbiBpbnQgaW1tZWRpYXRlIGFuZCB1c2VzK2RlZnMgYSBmbG9h
dCByZWdpc3Rlci4KKworIyBOb3RlIHRoYXQgdGhlIG9wY29kZXMgaGVyZSBoYXZlIGEgbGVhZGlu
ZyBjYXBpdGFsIChBZGQzMikgYnV0IG11c3QgY29ycmVzcG9uZCB0byBNYWNyb0Fzc2VtYmxlcgor
IyBBUEkgdGhhdCBoYXMgYSBsZWFkaW5nIGxvd2VyLWNhc2UgKGFkZDMyKS4KKworTm9wCisKK0Fk
ZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBUbXAK
KyAgICBBZGRyLCBUbXAKKyAgICBUbXAsIEFkZHIKKworQWRkMzIgVTpHLCBVOkcsIEQ6RworICAg
IEltbSwgVG1wLCBUbXAKKworQW5kMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0s
IFRtcAorICAgIFRtcCwgQWRkcgorICAgIEFkZHIsIFRtcAorICAgIEltbSwgQWRkcgorCitMc2hp
ZnQzMiBVOkcsIFVEOkcKKyAgICBUbXAqLCBUbXAKKyAgICBJbW0sIFRtcAorCitNdWwzMiBVOkcs
IFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorCisjIE5vdGUgdGhhdCBNb3ZlIG9w
ZXJhdGVzIG92ZXIgdGhlIGZ1bGwgcmVnaXN0ZXIgc2l6ZSwgd2hpY2ggaXMgZWl0aGVyIDMyLWJp
dCBvciA2NC1iaXQgZGVwZW5kaW5nIG9uCisjIHRoZSBwbGF0Zm9ybS4gSSdtIG5vdCBlbnRpcmVs
eSBzdXJlIHRoYXQgdGhpcyBpcyBhIGdvb2QgdGhpbmc7IGl0IG1pZ2h0IGJlIGJldHRlciB0byBq
dXN0IGhhdmUgYQorIyBNb3ZlNjQgaW5zdHJ1Y3Rpb24uIE9UT0gsIG91ciBNYWNyb0Fzc2VtYmxl
cnMgYWxyZWFkeSBoYXZlIHRoaXMgbm90aW9uIG9mICJtb3ZlKCkiIHRoYXQgYmFzaWNhbGx5Cisj
IG1lYW5zIG1vdmVQdHIuCitNb3ZlIFU6RywgRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRt
cAorICAgIEltbTY0LCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9hZFB0ciAjIFRoaXMgbWVhbnMg
dGhhdCAiTW92ZSBBZGRyLCBUbXAiIGlzIGNvZGUtZ2VuZXJhdGVkIGFzICJsb2FkIiBub3QgIm1v
dmUiLgorICAgIEluZGV4LCBUbXAgYXMgbG9hZFB0cgorICAgIFRtcCwgQWRkciBhcyBzdG9yZVB0
cgorICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIKKworTW92ZTMyIFU6RywgRDpHCisgICAgVG1w
LCBUbXAgYXMgemVyb0V4dGVuZDMyVG9QdHIKKyAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCisgICAg
SW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmUzMgorICAgIFRtcCwg
SW5kZXggYXMgc3RvcmUzMgorCitNb3ZlRG91YmxlIFU6RiwgRDpGCisgICAgVG1wLCBUbXAKKyAg
ICBBZGRyLCBUbXAgYXMgbG9hZERvdWJsZQorICAgIEluZGV4LCBUbXAgYXMgbG9hZERvdWJsZQor
ICAgIFRtcCwgQWRkciBhcyBzdG9yZURvdWJsZQorICAgIFRtcCwgSW5kZXggYXMgc3RvcmVEb3Vi
bGUKKworTW92ZTY0VG9Eb3VibGUgVTpHLCBEOkYKKyAgICBUbXAsIFRtcAorCitNb3ZlRG91Ymxl
VG82NCBVOkYsIEQ6RworICAgIFRtcCwgVG1wCisKK0JyYW5jaEFkZDMyIFU6RywgVTpHLCBVRDpH
IC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisg
ICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29u
ZCwgQWRkciwgVG1wCisKK0JyYW5jaE11bDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBS
ZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hTdWIzMiBV
OkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25k
LCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRk
cgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hOZWczMiBVOkcsIFVEOkcgL2JyYW5j
aAorICAgIFJlc0NvbmQsIFRtcAorCitKdW1wIC9icmFuY2gKKworUmV0IC90ZXJtaW5hbAorCitC
cmVha3BvaW50IC90ZXJtaW5hbAorCisjIEFpciBhbGxvd3MgZm9yIGV4b3RpYyBiZWhhdmlvci4g
QSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIFNwZWNpYWwg
b3BlcmFuZCwKKyMgd2hpY2ggbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4KK3NwZWNpYWwgUGF0
Y2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2Nv
cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQ
aGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjND
b21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIG5hbWUp
CisgICAgOiBtX2NvZGUoY29kZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91
bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgIiwg
bmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIGlmIChz
aG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJp
bmcoY29kZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBpZiAoc2hv
dWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKG1fY29kZSwgbV9u
YW1lLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpclBoYXNlU2NvcGVfaAorI2RlZmluZSBBaXJQaGFzZVNjb3BlX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworY2xhc3MgUGhhc2VTY29wZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VT
Y29wZShDb2RlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8gdGhp
cyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29u
c3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpclBoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJS
ZWdpc3RlclByaW9yaXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiUmVn
aXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpCit7Cisg
ICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9m
bGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtd
IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8R1BSUmVnPigpOworICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKTsKKyAgICAgICAgICAg
IGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICAgICAgICAg
IGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOwor
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAg
ICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdl
dChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigp
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAg
ICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGVl
U2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJl
Zy5ncHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAq
cmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3JpdHlPcmRlcigp
Cit7CisgICAgc3RhdGljIFZlY3RvcjxGUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAg
ICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8RlBSUmVnPigpOworICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKTsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZd
IChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVn
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAg
ICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUu
Z2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZnBy
KCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3Vs
dDsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBl
IHR5cGUpCit7CisgICAgc3RhdGljIFZlY3RvcjxSZWc+KiByZXN1bHRbQXJnOjpudW1UeXBlc107
CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisg
ICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQXSA9
IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChHUFJSZWcgcmVnIDogZ3Byc0lu
UHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQXS0+YXBwZW5k
KFJlZyhyZWcpKTsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXSA9IG5ldyBWZWN0b3I8UmVn
PigpOworICAgICAgICAgICAgZm9yIChGUFJSZWcgcmVnIDogZnByc0luUHJpb3JpdHlPcmRlcigp
KQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXS0+YXBwZW5kKFJlZyhyZWcpKTsKKyAg
ICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHRbdHlwZV07Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQ
cmlvcml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJSZWdpc3RlclByaW9y
aXR5X2gKKyNkZWZpbmUgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUg
IkdQUkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQUlJlZz4mIGdw
cnNJblByaW9yaXR5T3JkZXIoKTsKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHJzSW5Qcmlvcml0
eU9yZGVyKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+IHN0cnVjdCBSZWdpc3RlcnNJblBy
aW9yaXR5T3JkZXI7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8
R1BSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxHUFJSZWc+JiBpblByaW9yaXR5T3JkZXIoKSB7
IHJldHVybiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7IH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxGUFJS
ZWc+JiBpblByaW9yaXR5T3JkZXIoKSB7IHJldHVybiBmcHJzSW5Qcmlvcml0eU9yZGVyKCk7IH0K
K307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+Citjb25zdCBWZWN0b3I8dHlwZW5hbWUgQmFu
azo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgcmV0dXJuIFJl
Z2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7Cit9CisKK2Nv
bnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBBaXJSZWdpc3RlclByaW9yaXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworU3BlY2lhbDo6U3Bl
Y2lhbCgpCisgICAgOiBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVjaWFsOjp+U3BlY2lh
bCgpCit7Cit9CisKK0NTdHJpbmcgU3BlY2lhbDo6bmFtZSgpIGNvbnN0Cit7CisgICAgU3RyaW5n
UHJpbnRTdHJlYW0gb3V0OworICAgIGR1bXBJbXBsKG91dCk7CisgICAgcmV0dXJuIG91dC50b0NT
dHJpbmcoKTsKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgpOworICAgIGR1bXBJbXBsKG91dCk7CisgICAg
aWYgKG1faW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludChtX2luZGV4KTsKK30K
Kwordm9pZCBTcGVjaWFsOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgqdGhpcywgIjogIik7CisgICAgZGVlcER1bXBJbXBsKG91dCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNwZWNp
YWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3Ry
dWN0IEdlbmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3RleHByIGNvbnN0IGNoYXIqIGR1bXBQcmVmaXggPSAiJiI7Cisg
ICAgCisgICAgU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflNwZWNpYWwoKTsKKworICAgIENTdHJp
bmcgbmFtZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNv
bnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKEluc3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNr
KEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgPSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxl
ZCBvbiBmb3IgZWFjaCBJbnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVy
ZSBpcyBubyB3YXkgdG8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2Vk
IGZyb20ganVzdCBvbmUgSW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywK
KyAgICAvLyBpZiB5b3Ugd2FudCB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5l
cmF0ZSgpLCB0aGVuIHlvdSBoYXZlIHRvIGVpdGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVy
YXRlIEFpciB0aGF0IHN0YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5z
dCwgYW5kIHRoZW4gbWVyZ2UKKyAgICAvLyAgICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBw
cm9iYWJseSBub3QgZ3JlYXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0
aGF0CisgICAgLy8gICAgQWlyIGRpZG4ndCBkdXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVw
bGljYXRpb24gZGlkbid0IGNhdXNlIGFueSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8g
ICAgcmVnaXN0ZXIgYXNzaWdubWVudC4KKyAgICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNp
YWwgbWFpbnRhaW4gYSBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVj
YXVzZSB0aGUgYW5hbHlzaXMKKyAgICAvLyAgICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlz
IHBlcmZvcm1lZCBqdXN0IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdh
eQorICAgIC8vICAgIGZvciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRv
IGJlIHJlYWxsb2NhdGVkLiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29u
c3VsdCB0aGUgSGFzaE1hcC4KKyAgICAvLworICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVz
ZSAoMSkgYW5kIGZpcmUgdXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisg
ICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBv
cnRVc2VkUmVnaXN0ZXJzKCkgYmVpbmcgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8g
YXMgZ2VuZXJhdGUoKS4gSWYgd2UgY291bGQgcmVseSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1
c3QgaGF2ZSBlYWNoIFNwZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBv
ZiBSZWdpc3RlclNldCdzIGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0
IG9yZGVyIGluCisgICAgLy8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5j
ZSBpcyB1bmxpa2VseSB0byBjaGFuZ2Ugc2luY2UgaXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBw
ZXJmb3JtYW5jZSBvZiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJy
ZW50bHksIHdlIGRvICgxKSBmb3IgQjMgc3RhY2ttYXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBv
cnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAg
ICB2aXJ0dWFsIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJz
JiwgR2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVy
U2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpID0gMDsKKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29u
c3QgPSAwOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgY29uc3Qg
Y2hhciogbV9uYW1lOworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3Bl
Y2lhbER1bXAgeworcHVibGljOgorICAgIERlZXBTcGVjaWFsRHVtcChjb25zdCBTcGVjaWFsKiBz
cGVjaWFsKQorICAgICAgICA6IG1fc3BlY2lhbChzcGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICht
X3NwZWNpYWwpCisgICAgICAgICAgICBtX3NwZWNpYWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRl
OgorICAgIGNvbnN0IFNwZWNpYWwqIG1fc3BlY2lhbDsKK307CisKK2lubGluZSBEZWVwU3BlY2lh
bER1bXAgZGVlcER1bXAoY29uc3QgU3BlY2lhbCogc3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVl
cFNwZWNpYWxEdW1wKHNwZWNpYWwpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxs
RXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVu
ZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVy
UHJpb3JpdHkuaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29k
ZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNwaWxsRXZlcnl0
aGluZyIpOworCisgICAgLy8gV2Ugd2FudCB0byBrbm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVz
ZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFzaWMgYmxvY2suCisgICAgSW5kZXhNYXA8QmFz
aWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7
CisgICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxD
YWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgIHVzZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6
ZShibG9jay0+c2l6ZSgpICsgMSk7CisKKyAgICAgICAgYXV0byBzZXRVc2VkUmVnaXN0ZXJzID0g
WyZdICh1bnNpZ25lZCBpbmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVz
ZWRSZWdpc3RlcnNbYmxvY2tdW2luZGV4XTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxv
Y2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAg
ICAgICAgICAgICAgICAgIHNldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKworICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGJsb2NrLT5zaXplKCkpOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0
SW5kZXgpKTsKKyAgICAgICAgICAgIHNldFVzZWRSZWdpc3RlcnMoaW5zdEluZGV4KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAu
CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1UeXBlc107Cisg
ICAgZm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVz
OyArK3R5cGVJbmRleCkgeworICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMg
PSBhbGxTdGFja1Nsb3RzW3R5cGVJbmRleF07CisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3Rh
dGljX2Nhc3Q8QXJnOjpUeXBlPih0eXBlSW5kZXgpOworICAgICAgICBzdGFja1Nsb3RzLnJlc2l6
ZShjb2RlLm51bVRtcHModHlwZSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0g
Y29kZS5udW1UbXBzKHR5cGUpOyB0bXBJbmRleC0tOykKKyAgICAgICAgICAgIHN0YWNrU2xvdHNb
dG1wSW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3Vz
KTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5z
dEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRCZWZvcmUgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtp
bnN0SW5kZXhdOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldEFmdGVyID0gdXNlZFJlZ2lz
dGVyc1tibG9ja11baW5zdEluZGV4ICsgMV07CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxv
Y2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAg
ICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xv
dCA9IGFsbFN0YWNrU2xvdHNbdHlwZV1bdG1wLnRtcEluZGV4KCldOworICAgICAgICAgICAgICAg
ICAgICBBcmcgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3QpOworCisgICAgICAgICAgICAgICAg
ICAgIC8vIE5lZWQgdG8gZmlndXJlIG91dCBhIHJlZ2lzdGVyIHRvIHVzZS4gSG93IHdlIGRvIHRo
YXQgZGVwZW5kcyBvbiB0aGUgcm9sZS4KKyAgICAgICAgICAgICAgICAgICAgUmVnIGNob3NlblJl
ZzsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpVc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcg
OiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6RGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVn
c0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nl
blJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpVc2VEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Q
cmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
ZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsK
KworICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKworICAgICAgICAg
ICAgICAgICAgICBPcGNvZGUgbW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91
YmxlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihy
b2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdp
biwgdG1wLCBhcmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0K
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpclNwaWxsRXZlcnl0aGluZ19oCisjZGVmaW5lIEFpclNwaWxsRXZlcnl0aGluZ19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaXMgYSBwaGFzZSBmb3IgdGVzdGlu
Zy4gSXQgYmVoYXZlcyBsaWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGluIHRoZSBzZW5zZSB0aGF0
IGl0CisvLyBlbGltaW5hdGVzIHRlbXBvcmFyaWVzIGZyb20gdGhlIHByb2dyYW0uIEl0IGFjY29t
cGxpc2hlcyB0aGlzIGJ5IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8vIHRlbXBvcmFyaWVzLiBUaGUg
cmVzdWx0aW5nIGNvZGUgaXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVmZmljaWVudC4gVGhpcyBwaGFz
ZSBpcyBncmVhdCBpZiB5b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUgaXMgYSBidWcgaW4gdGhlIHJl
Z2lzdGVyIGFsbG9jYXRvci4gWW91IGNhbiBjb25maXJtIHRoaXMgYnkgcnVubmluZyB0aGlzCisv
LyBwaGFzZSBpbnN0ZWFkIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisvLworLy8gTm90ZSB0
aGF0IGV2ZW4gdGhvdWdoIHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBlc3QgdGhpbmcgcG9zc2li
bGUsIGl0J3Mgbm90IGV2ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1bGFybHkgZWZmaWNpZW50
IHdheS4gU28sIGRvbid0IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcgdGhpcyBwaGFzZSB0byBy
ZWR1Y2UgY29tcGlsZXIKKy8vIGxhdGVuY3kuIElmIHlvdSB3YW50ZWQgdG8gZG8gdGhhdCwgeW91
IHNob3VsZCBjb21lIHVwIHdpdGggYSBjbGV2ZXIgYWxnb3JpdGhtIGluc3RlYWQgb2YgdXNpbmcK
Ky8vIHRoaXMgc2lsbHkgdGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpclNwaWxsRXZlcnl0aGluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90Lmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
U3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCit7CisgICAgbV9vZmZz
ZXRGcm9tRlAgPSB2YWx1ZTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgbV92YWx1ZS0+bV9v
ZmZzZXRGcm9tRlAgPSB2YWx1ZTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisK
K3ZvaWQgU3RhY2tTbG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAi
LCBtX29mZnNldEZyb21GUCwgIiwga2luZCA9ICIsIG1fa2luZCk7CisgICAgaWYgKG1fdmFsdWUp
CisgICAgICAgIG91dC5wcmludCgiLCB2YWx1ZSA9ICIsICptX3ZhbHVlKTsKK30KKworU3RhY2tT
bG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Ns
b3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICA6IG1fYnl0ZVNpemUoYnl0
ZVNpemUpCisgICAgLCBtX2luZGV4KGluZGV4KQorICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUt
Pm9mZnNldEZyb21GUCgpKQorICAgICwgbV9raW5kKGtpbmQpCisgICAgLCBtX3ZhbHVlKHZhbHVl
KQoreworICAgIEFTU0VSVChieXRlU2l6ZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyU3RhY2tTbG90X2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90X2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRl
IDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgU3RhY2tTbG90VmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFj
a1Nsb3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25z
dCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9CisKKyAgICB1bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBp
ZiAoYnl0ZVNpemUoKSA8PSAyKQorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGlmIChi
eXRlU2l6ZSgpIDw9IDQpCisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgcmV0dXJuIDg7
CisgICAgfQorCisgICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorCisgICAgLy8gWmVybyBtZWFucyB0aGF0IGl0J3Mgbm90IHlldCBhc3NpZ25lZC4K
KyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21G
UDsgfQorCisgICAgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGNhbGxlZCBmcm9tIHBo
YXNlcyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24uIEJ1dCB5b3UgY2FuCisgICAgLy8gdG90YWxs
eSBmb3JjZSBhIHN0YWNrIHNsb3QgdG8gbGFuZCBhdCBzb21lIG9mZnNldC4KKyAgICB2b2lkIHNl
dE9mZnNldEZyb21GUChpbnRwdHJfdCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNp
emUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSopOworICAg
IAorICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBp
bnRwdHJfdCBtX29mZnNldEZyb21GUDsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBT
dGFja1Nsb3RWYWx1ZSogbV92YWx1ZTsKK307CisKK2NsYXNzIERlZXBTdGFja1Nsb3REdW1wIHsK
K3B1YmxpYzoKKyAgICBEZWVwU3RhY2tTbG90RHVtcChjb25zdCBTdGFja1Nsb3QqIHNsb3QpCisg
ICAgICAgIDogbV9zbG90KHNsb3QpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc2xvdCkKKyAgICAgICAg
ICAgIG1fc2xvdC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0
LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgU3RhY2tTbG90
KiBtX3Nsb3Q7Cit9OworCitpbmxpbmUgRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoY29uc3Qg
U3RhY2tTbG90KiBzbG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
VG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgewor
ICAgICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKGlzUmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmIChpc0dQKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIldG1w
IiwgZ3BUbXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmlu
dCgiJWZ0bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9o
CisjZGVmaW5lIEFpclRtcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiRlBS
SW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIEFyZzsKKworLy8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBv
ZiBhIHJlZ2lzdGVyLiBJdCBjYW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4g
SXQgY2FuIGFsc28KKy8vIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0
ZXIgKGkuZS4gYSB0ZW1wb3JhcnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQorLy8g
ZGVsaWJlcmF0ZWx5IHRlcnNlIG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoaXMg
bmFtZSBhIGxvdC4KKworY2xhc3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAgICA6
IG1fdmFsdWUoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcpCisg
ICAgeworICAgICAgICBpZiAocmVnKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisg
ICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkpOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigpKTsK
KyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAgICBl
eHBsaWNpdCBUbXAoY29uc3QgQXJnJik7CisKKyAgICBzdGF0aWMgVG1wIGdwVG1wRm9ySW5kZXgo
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1
bHQubV92YWx1ZSA9IGVuY29kZUdQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGZwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisg
ICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29k
ZUZQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisKKyAgICBi
b29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFs
dWUpOworICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNFbmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0KKwor
ICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQ
UihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAgIH0K
KworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQ
UihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVybiBm
cHIoKTsKKyAgICB9CisKKyAgICBib29sIGhhc1RtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAhaXNSZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBkZWNvZGVGUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdw
VG1wSW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBi
b29sIGlzQWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRoaXM7CisgICAg
fQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdDsKKworICAgIFRtcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUp
CisgICAgICAgIDogbV92YWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIFdURjo6SW50SGFzaDxpbnQ+OjpoYXNoKG1fdmFsdWUpOworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVG
UCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMSAtIGluZGV4OworICAg
IH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAg
ICByZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7
CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFIoRlBSUmVnIGZwcikKKyAgICB7Cisg
ICAgICAgIHJldHVybiBlbmNvZGVGUChmcHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lz
dGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAodW5zaWduZWQgaW5k
ZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0
UmVnaXN0ZXIoKSkgKyAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVG
UFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUFIoTWFj
cm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4OworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzRW5jb2RlZEdQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB2YWx1ZSA+IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlAoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBpc0VuY29kZWRHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
RW5jb2RlZEdQKHZhbHVlKSAmJiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxh
c3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFIoaW50
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiB2YWx1
ZSA+PSBlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOworICAgIH0K
KworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1ZSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVlKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBSKHZhbHVl
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFsdWUpCisgICAg
eworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2RlR1BSKE1hY3Jv
QXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lz
dGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGludCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBSKE1hY3JvQXNz
ZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2Rl
ZEdQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVHUFIoTWFjcm9B
c3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNp
Z25lZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNv
ZGVkRlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJs
ZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyAwOiBl
bXB0eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4KKyAgICAv
LyBuZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1ZTsKK307
CisKK3N0cnVjdCBUbXBIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUbXAm
IGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0
IFRtcCYgYSwgY29uc3QgVG1wJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29u
c3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZh
dWx0SGFzaDxKU0M6OkIzOjpBaXI6OlRtcD4geworICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpU
bXBIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0
czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpUbXA+IDogU2lt
cGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1wPiB7IH07CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGluZXNfaAorI2Rl
ZmluZSBBaXJUbXBJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJBcmcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitpbmxpbmUgVG1wOjpUbXAoY29uc3QgQXJnJiBhcmcp
Cit7CisgICAgKnRoaXMgPSBhcmcudG1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBJ
bmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitj
bGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihDb2RlJiBjb2RlLCBjb25z
dCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQorICAgICAgICA6IG1fY29kZShj
b2RlKQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1w
QmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNz
YWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNv
bmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdU
Rl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAg
IH0gd2hpbGUgKGZhbHNlKQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIEhh
c2hTZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90czsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2Nr
Kj4gdmFsaWRCbG9ja3M7CisgICAgICAgIEhhc2hTZXQ8U3BlY2lhbCo+IHZhbGlkU3BlY2lhbHM7
CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAgICAgICAgICAg
IHZhbGlkQmxvY2tzLmFkZChibG9jayk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDog
bV9jb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIHZhbGlkU2xvdHMuYWRkKHNsb3QpOwor
ICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBtX2NvZGUuc3BlY2lhbHMoKSkKKyAgICAg
ICAgICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNwZWNpYWwpOworCisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdElu
ZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAg
ICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAg
ICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgICAgICBz
d2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNr
OgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRTbG90cy5jb250YWlucyhh
cmcuc3RhY2tTbG90KCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNw
ZWNpYWw6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNwZWNpYWxzLmNv
bnRhaW5zKGFyZy5zcGVjaWFsKCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFZBTElEQVRFKGluc3QuaXNWYWxp
ZEZvcm0oKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAg
IGlmIChpbnN0SW5kZXggPT0gYmxvY2stPnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAg
IFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwg
KmJsb2NrKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBWQUxJ
REFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxv
Y2spKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vz
c29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbGlkQmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiSW4gIiwgKmJsb2NrKSk7CisgICAg
ICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lk
IGZhaWwoCisgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29u
c3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmlu
ZyBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAg
ICAgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0
LnByaW50KCJBSVIgVkFMSURBVElPTiBGQUlMVVJFXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiICAgICIsIGNvbmRpdGlvbiwgIiAoIiwgZmlsZW5hbWUsICI6IiwgbGluZU51bWJlciwgIilc
biIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgbWVzc2FnZSwgIlxuIik7CisgICAg
ICAgICAgICBpZiAobV93aGVuKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiICAgIER1cmlu
ZyAiLCBtX3doZW4sICJcbiIpOworICAgICAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9D
U3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsK
KyAgICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAgZGF0YUxvZygiQmVmb3Jl
ICIsIG1fd2hlbiwgIjpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyhtX2R1bXBCZWZvcmUpOwor
ICAgICAgICB9CisgICAgICAgIGRhdGFMb2coIkF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAg
ICAgICBkYXRhTG9nKG1fY29kZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7
CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIs
IGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAg
ICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV93aGVuOworICAgIGNvbnN0IGNoYXIq
IG1fZHVtcEJlZm9yZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZh
bGlkYXRlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZv
cmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihjb2RlLCB3aGVuLCBkdW1wQmVmb3JlKTsK
KyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFpclZhbGlkYXRlX2gKKyNkZWZpbmUgQWlyVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBDb2RlOworCit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0g
bnVsbHB0ciwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODQyIEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNvZGUKKyAg
ICBhdHRyX3JlYWRlciA6bmFtZSwgOnNwZWNpYWwsIDpvdmVybG9hZHMKKyAgICBhdHRyX2FjY2Vz
c29yIDpraW5kCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBzcGVjaWFsKQorICAgICAgICBA
bmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBzcGVjaWFsCisgICAgICAgIEBraW5kID0g
Omluc3QKKyAgICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBvdmVybG9hZHMgPSBb
XQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQorICAgICAgICBuYW1l
WzBdLmRvd25jYXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBBcmcKKyAg
ICBhdHRyX3JlYWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFsaXplKHJvbGUsIHR5
cGUpCisgICAgICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5cGUKKyAgICBlbmQK
K2VuZAorCitjbGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1cmUsIDpmb3Jt
cworCisgICAgZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgQHNpZ25h
dHVyZSA9IHNpZ25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3JtcworICAgIGVuZAorZW5kCisK
K2NsYXNzIEtpbmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfYWNjZXNzb3IgOnNw
ZWNpYWwKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAgIEBuYW1lID0gbmFtZQor
ICAgICAgICBAc3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYgPT0ob3RoZXIpCisg
ICAgICAgIGlmIG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFtZSBhbmQgQHNwZWNp
YWwgPT0gb3RoZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBLaW5k
LmFyZ0tpbmRzKGtpbmQpCisgICAgICAgIGlmIGtpbmQgPT0gIkFkZHIiCisgICAgICAgICAgICBb
IkFkZHIiLCAiU3RhY2siLCAiQ2FsbEFyZyJdCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtr
aW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBhcmdLaW5kcworICAgICAgICBL
aW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJf
cmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHRO
YW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUK
KyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUs
IDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1i
ZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0g
bGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVO
YW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0
cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdp
biwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBz
dHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVy
LmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVu
ZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAg
IGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQg
I3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQor
ICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9y
OiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6
ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2Rl
ZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFt
ZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0
ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLwor
ICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAg
ICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAg
ICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9r
ZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hl
biAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAg
ICAgd2hlbiAvXEFbLDoqXC9dLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmln
aW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1i
ZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAg
ICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1
bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQp
KVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxa
LworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0p
fChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKSlcWi8KK2VuZAorCitk
ZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlz
S2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJh
cyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQShbYS16
QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJz
ZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9
IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRl
ZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5j
ZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21t
ZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29t
bWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAg
ICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxl
OiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAor
CisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAj
e3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBl
bmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5z
dHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBp
c0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAg
IGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmlu
ZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxl
c3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5k
CisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisg
ICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihy
ZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBk
ZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBh
cnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJl
bENvbmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIGFkdmFu
Y2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVz
dWx0ID0ge30KKyAgICAgICAgCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYg
QGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lh
bCIKKyAgICAgICAgICAgICAgICBjb25zdW1lKCJzcGVjaWFsIikKKyAgICAgICAgICAgICAgICBv
cGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5h
bWVdCisKKyAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9w
Y29kZU5hbWUsIHRydWUpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2Rl
TmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bj
b2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVd
CisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNp
YWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIG9wY29kZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisg
ICAgICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAg
ICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAg
ICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgaXNV
RCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUo
IjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBlCisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBB
cmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiLyIKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3VtZSgiLyIpCisgICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW4uc3RyaW5n
CisgICAgICAgICAgICAgICAgICAgIHdoZW4gImJyYW5jaCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9wY29kZS5raW5kID0gOmJyYW5jaAorICAgICAgICAgICAgICAgICAgICB3aGVuICJ0ZXJt
aW5hbCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOnRlcm1pbmFsCisg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJy
b3IoIkJhZCAvIGRpcmVjdGl2ZSIpCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgICAgICBhZHZhbmNlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAg
ICBpZiBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAg
ICAgICAgICAgICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFt
ZSA9IG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2lu
ZHNbLTFdLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2lu
ZHNbLTFdLnNwZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN1bWUoIioiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGFsdE5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5k
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51
bWJlciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBz
aWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhf
aW5kZXggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5h
bWUgPT0gIkltbTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1
cmVbaW5kZXhdLnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVu
dCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1l
ZGlhdGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMg
PDwgRm9ybS5uZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
ayB1bmxlc3MgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAg
ICAgICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAg
ICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAgICAgICAgICAg
ZW5kCisKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhz
aWduYXR1cmUsIGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICBy
ZXN1bHQKKyAgICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBh
cnNlci5uZXcoSU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJz
ZXIucGFyc2UKKworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7Zmls
ZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91
dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxl
TmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZu
ZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2Zp
bGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAu
cHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK3dyaXRlSCgi
T3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNv
ZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8
IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAg
IG91dHAucHV0cyAifTsiCisKKyAgICBvdXRwLnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBu
dW1PcGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3Bh
Y2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJjbGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5w
dXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29k
ZSk7IgorICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorfQorCisjIEZyb20gaGVy
ZSBvbiwgd2UgZG9uJ3QgdHJ5IHRvIGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgc2luY2Ug
d2UncmUgdXNpbmcgYSByZWN1cnNpdmUgcGF0dGVybgorIyBtYXRjaGVyLgorCitkZWYgbWF0Y2hG
b3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4LCBjb2x1bW5HZXR0ZXIsIGZpbHRl
ciwgY2FsbGJhY2spCisgICAgcmV0dXJuIGlmIGZvcm1zLmxlbmd0aCA9PSAwCisKKyAgICBpZiBm
aWx0ZXJbZm9ybXNdCisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgaWYgY29sdW1uSW5k
ZXggPj0gZm9ybXNbMF0ua2luZHMubGVuZ3RoCisgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5s
ZW5ndGggPT0gMQorICAgICAgICBjYWxsYmFja1tmb3Jtc1swXV0KKyAgICAgICAgcmV0dXJuCisg
ICAgZW5kCisgICAgCisgICAgZ3JvdXBzID0ge30KKyAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAg
fCBmb3JtIHwKKyAgICAgICAga2luZCA9IGZvcm0ua2luZHNbY29sdW1uSW5kZXhdLm5hbWUKKyAg
ICAgICAgaWYgZ3JvdXBzW2tpbmRdCisgICAgICAgICAgICBncm91cHNba2luZF0gPDwgZm9ybQor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBncm91cHNba2luZF0gPSBbZm9ybV0KKyAgICAgICAg
ZW5kCisgICAgfQorCisgICAgaWYgc3BlZWQgPT0gOmZhc3QgYW5kIGdyb3Vwcy5sZW5ndGggPT0g
MQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXggKyAx
LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIHJldHVybgorICAgIGVu
ZAorCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7Y29sdW1uR2V0dGVyW2NvbHVtbkluZGV4XX0p
IHsiCisgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgIHwga2V5LCB2YWx1ZSB8CisgICAg
ICAgIG91dHAucHV0cyAiI2lmIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAg
ICAgICBLaW5kLmFyZ0tpbmRzKGtleSkuZWFjaCB7CisgICAgICAgICAgICB8IGFyZ0tpbmQgfAor
ICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToiCisgICAgICAgIH0K
KyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwg
Y29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9
PSAiSW1tNjQiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisKK2RlZiBtYXRjaEluc3RPdmVybG9h
ZChvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bj
b2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAor
ICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBpZiBvcGNv
ZGUuc3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKChvcGNvZGUub3ZlcmxvYWRzLnNpemUg
IT0gMSkgb3Igc3BlZWQgPT0gOnNhZmUpCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAo
I3tpbnN0fS0+YXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAg
ICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVu
Z3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29k
ZSwgb3ZlcmxvYWQKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92
ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgb3V0cC5wdXRzICJ9IgorZW5kCisgICAgCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91
dHAsIHNwZWVkLCBpbnN0KQorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0
KSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVj
aWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbCwgbmlsCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgY29sdW1u
SW5kZXggfAorICAgICAgICAgICAgICAgICIje2luc3R9LT5hcmdzWyN7Y29sdW1uSW5kZXh9XS5r
aW5kKCkiCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2Ug
fQorICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGZvcm0g
fAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIG92ZXJsb2FkLmZvcm1z
LCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIGVuZAorICAgIH0K
K2VuZAorCit3cml0ZUgoIk9wY29kZVV0aWxzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5w
dXRzICIjaW5jbHVkZSBcIkFpckluc3QuaFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJB
aXJTcGVjaWFsLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBv
cGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgInRlbXBs
YXRlPHR5cGVuYW1lIFQ+IgorICAgIG91dHAucHV0cyAiaW5saW5lIFQqIG9wZ2VuSGlkZGVuUHRy
SWRlbnRpdHkoVCogcG9pbnRlcikgeyByZXR1cm4gcG9pbnRlcjsgfSIKKyAgICBvdXRwLnB1dHMg
IiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAg
aWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJu
IHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSB3aGlsZSAoZmFsc2UpIgorCisgICAgb3V0cC5w
dXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5z
dDo6Zm9yRWFjaEFyZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsi
CisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8
IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAg
ICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbMF0sIEFyZzo6VXNlLCBBcmc6OkdQKTsgLy8gVGhp
cyBpcyBiYXNpY2FsbHkgYm9ndXMsIGJ1dCBpdCB3b3JrcyBmIGFuYWx5c2VzIG1vZGVsIFNwZWNp
YWwgYXMgYW4gaW1tZWRpYXRlLiIKKyAgICAgICAgICAgIG91dHAucHV0cyAiYXJnc1swXS5zcGVj
aWFsKCktPmZvckVhY2hBcmcoKnRoaXMsIHNjb3BlZExhbWJkYTxFYWNoQXJnQ2FsbGJhY2s+KGZ1
bmN0b3IpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5l
YWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAg
ICAgICAgICAgcm9sZSA9IG5pbAorICAgICAgICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAg
ICAgICAgICAgICB3aGVuICJVIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAg
ICAgICAgICAgICAgICB3aGVuICJEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIK
KyAgICAgICAgICAgICAgICB3aGVuICJVRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJV
c2VEZWYiCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByYWlzZQor
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7aW5kZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJn
LnR5cGV9UCk7IgorICAgICAgICAgICAgfQorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5w
dXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
IgorICAgIG91dHAucHV0cyAiQUxXQVlTX0lOTElORSBib29sIGlzVmFsaWRGb3JtKE9wY29kZSBv
cGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBv
dXRwLnB1dHMgIkFyZzo6S2luZCBraW5kc1tzaXplb2YuLi4oQXJndW1lbnRzKV0gPSB7IGFyZ3Vt
ZW50cy4uLiB9OyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNv
ZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMg
ImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoc2l6ZW9m
Li4uKEFyZ3VtZW50cykpIHsiCisgICAgICAgIHVubGVzcyBvcGNvZGUuc3BlY2lhbAorICAgICAg
ICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2Fk
IHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUu
bGVuZ3RofToiCisgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7IHwgY29sdW1u
SW5kZXggfCAib3BnZW5IaWRkZW5QdHJJZGVudGl0eShraW5kcylbI3tjb2x1bW5JbmRleH1dIiB9
CisgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgICAg
ICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAg
ICAgICAgICAgICAgICBzcGVjaWFsID0gKG5vdCBmb3JtLmtpbmRzLmRldGVjdCB7IHwga2luZCB8
IGtpbmQuc3BlY2lhbCB9KQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JF
VFVSTigje3NwZWNpYWx9KTsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1h
dGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZp
bHRlciwgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
ICAgICAgICB9CisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
ICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBv
dXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1
cm4gZmFsc2U7ICIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImlubGluZSBi
b29sIGlzVGVybWluYWwoT3Bjb2RlIG9wY29kZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91
dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggewor
ICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5hbCBv
ciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tv
cGNvZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4g
dHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVybiBm
YWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBv
dXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlSCgi
T3Bjb2RlR2VuZXJhdGVkIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVk
ZSBcIkFpckluc3RJbmxpbmVzLmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1By
aW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRw
LnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91
dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAk
b3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0
cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5w
cmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47
IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1
dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6
OmlzVmFsaWRGb3JtKCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2Fk
Rm9ybShvdXRwLCA6c2FmZSwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwg
Zm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmIChhcmdzLnNpemUoKSA8IDEpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFs
c2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgor
ICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAg
ICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAg
ICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtp
bmRleF0ucm9sZQorICAgICAgICAgICAgICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5k
ZXhdLnR5cGUKKyAgICAgICAgICAgICAgICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAg
ICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0g
bWF0Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAg
ICAgICAgICAgICAjIGtpbmQgaW1wbGllcyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0
byB2YWxpZGF0ZSBpcyB0aGUgdHlwZS4gQW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAg
ICMgdG8gdmFsaWRhdGUgdGhlIHR5cGUgaWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAg
ICBpZiBraW5kLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJp
ZiAoIWFyZ3NbI3tpbmRleH1dLnRtcCgpLmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWlzI3tvcGNvZGUubmFtZX1WYWxpZCgqdGhpcykp
IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIK
KyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBv
dXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5z
aWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRj
aCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNv
ZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAg
IGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgp
IgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0
cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlz
LCBhcmdJbmRleCkpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhl
IGFyZ0luZGV4LgorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7Igor
CisgICAgICAgICAgICBudW1BcmdzID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAg
ICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5s
ZW5ndGgKKyAgICAgICAgICAgIH0ubWF4CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFy
Z3MudGltZXMgeworICAgICAgICAgICAgICAgIHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNr
IGlmIGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxsIG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBv
ciBkb24ndCwgYWRtaXQgYW4gYWRkcmVzcworICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRl
eC4gV2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAg
ICAgIG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAg
ICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2Fk
IHwKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5r
aW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
WWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMg
Tm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdl
IGVuZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkg
dGhhdCBBZGRyZXNzIGlzIGluYWRtaXNzaWJsZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMg
PT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7
IgorICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgIyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAg
ICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEp
CisKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7
IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJs
b2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAg
ICAgICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0
IHdlIHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAg
ICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2Fk
LmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0
byBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25h
dHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVy
bG9hZFN3aXRjaAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3
ZSB0ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3Jt
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJhcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBmb3JtcyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9
IDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMg
PT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVt
aXQgbm8gY29kZSwgc2luY2Ugd2UgY2Fubm90IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZv
cm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIs
IGNhbGxiYWNrKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2Fk
U3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1
dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAg
ICBvdXRwLnB1dHMgIn0iCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0
cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxz
ZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1
bXAgSW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBj
b250ZXh0KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0o
aml0KTsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oY29udGV4dCk7IgorICAgIG91dHAu
cHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIHJlc3VsdDsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRG
b3JtKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBm
b3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250
ZXh0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAg
ICAgICAgICAgICBtZXRob2ROYW1lID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAicmVzdWx0ID0gIgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBv
dXRwLnByaW50ICJqaXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMu
ZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICBpZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
IiwgIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1l
CisgICAgICAgICAgICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVy
bG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
ZnByKCkiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIklt
bSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVz
dGVkSW1tMzIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tNjQoKSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJBZGRyIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5k
ZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKKyAg
ICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAg
IH0KKyAgICBvdXRwLnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91
dHAucHV0cyAicmV0dXJuIHJlc3VsdDsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5w
dXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnLmgJKHJldmlzaW9uIDE5MTUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCiAgICAg
Ym9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggIT0gaW52YWxpZCgpOyB9Ci0gICAg
Ym9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAKICAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBkZWxldGVk
KCk7IH0KQEAgLTE3MCw2ICsxNjksNDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OwogCisgICAgY2xhc3MgQWxsUmVnc0l0ZXJhYmxlIHsKKyAgICBw
dWJsaWM6CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBpdGVyYXRvcigpIHsgfQorCisgICAgICAgICAgICBleHBsaWNpdCBpdGVyYXRvcihS
ZWcgcmVnKQorICAgICAgICAgICAgICAgIDogbV9yZWdJbmRleChyZWcuaW5kZXgoKSkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVnIG9wZXJhdG9yKigpIGNv
bnN0IHsgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpOyB9CisKKyAgICAgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
X3JlZ0luZGV4ID0gUmVnOjpmcm9tSW5kZXgobV9yZWdJbmRleCkubmV4dCgpLmluZGV4KCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZ0luZGV4ID09IG90aGVyLm1fcmVnSW5k
ZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICB1bnNpZ25lZCBtX3JlZ0luZGV4OworICAgICAgICB9OworCisgICAgICAg
IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJzdCgpKTsg
fQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWcoKSk7
IH0KKyAgICB9OworCisgICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSB7IHJldHVybiBB
bGxSZWdzSXRlcmFibGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90IGludmFs
aWQoKSB7IHJldHVybiAweGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCShyZXZpc2lvbiAxOTE1MDcpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6UmVnaXN0ZXJB
dE9mZnNldExpCiAgICAgaWYgKG9mZnNldEJhc2VUeXBlID09IEZyYW1lUG9pbnRlckJhc2VkKQog
ICAgICAgICBvZmZzZXQgPSAtKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obnVtYmVyT2ZSZWdpc3Rl
cnMpICogc2l6ZW9mKHZvaWQqKSk7CiAKLSAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7
IHJlZyA8PSBSZWc6Omxhc3QoKTtyZWcgPSByZWcubmV4dCgpKSB7CisgICAgZm9yIChSZWcgcmVn
ID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsK
ICAgICAgICAgaWYgKHJlZ2lzdGVyU2V0LmdldChyZWcpKSB7CiAgICAgICAgICAgICBhcHBlbmQo
UmVnaXN0ZXJBdE9mZnNldChyZWcsIG9mZnNldCkpOwogICAgICAgICAgICAgb2Zmc2V0ICs9IHNp
emVvZih2b2lkKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRP
ZmZzZXRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlckF0T2Zmc2V0TGlzdC5oCShyZXZpc2lvbiAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYg
KzY2LDkgQEAgcHVibGljOgogICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGZpbmQoUmVnKSBjb25zdDsK
ICAgICB1bnNpZ25lZCBpbmRleE9mKFJlZykgY29uc3Q7IC8vIFJldHVybnMgVUlOVF9NQVggaWYg
bm90IGZvdW5kLgogCisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzLmJlZ2luKCk7IH0KKyAgICBWZWN0
b3I8UmVnaXN0ZXJBdE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IG1fcmVnaXN0ZXJzLmVuZCgpOyB9CisKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZ2lzdGVyQXRP
ZmZzZXQ+IG1fcmVnaXN0ZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgJKHJldmlzaW9uIDE5MTUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxMyBAQCBwdWJs
aWM6CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikg
Y29uc3QgeyByZXR1cm4gbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5z
ZXRCaXRzKCkpCisgICAgICAgICAgICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7Cisg
ICAgfQogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcp
OyB9CkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE5MTUwNykKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5
OEVCIC8qIFdvcmRMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJ
MEZFQjNEQ0YxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAv
KiBTaGFyZWRUYXNrLmggKi87IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJh
bGxlbFZlY3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVy
YXRvci5oICovOyB9OworCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
MDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJE
ODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdy
YXBoTm9kZVdvcmtsaXN0LmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBU
aW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkwRkY4
NjA5NTFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3
RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBG
RTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0
IC8qIFNjb3BlZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29w
ZWRMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUz
MTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5
NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVB
QjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFB
RkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNE
MzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0
MTIzRkYgLyogU2VnbWVudGVkVmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEy
M0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQx
MjNGRiAvKiBTSEExLmNwcCAqLywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmlt
aXRpdmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyog
U2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxOTE1MDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTIgKzc3NiwyMCBAQAogI2RlZmluZSBFTkFC
TEVfQ09OQ1VSUkVOVF9KSVQgMQogI2VuZGlmCiAKKy8qIFRoZSBCMyBjb21waWxlciBpcyBhbiBl
eHBlcmltZW50YWwgYmFja2VuZCB0aGF0IGlzIHN0aWxsIGluIGRldmVsb3BtZW50LiBXZSB3aWxs
IGtlZXAgaXQgYnVpbGRpbmcKKyAgIG9uIERhcndpbi94ODYtNjQgZm9yIG5vdywgdGhvdWdoIGl0
IGlzIHVudXNlZCBleGNlcHQgZm9yIHRlc3RzLiAqLworI2lmIE9TKERBUldJTikgJiYgQ1BVKFg4
Nl82NCkKKyNkZWZpbmUgRU5BQkxFX0IzX0pJVCAxCisjZW5kaWYKKwogLyogSWYgdGhlIGJhc2Vs
aW5lIGppdCBpcyBub3QgYXZhaWxhYmxlLCB0aGVuIGRpc2FibGUgdXBwZXIgdGllcnMgYXMgd2Vs
bDogKi8KICNpZiAhRU5BQkxFKEpJVCkKLSN1bmRlZiBFTkFCTEVfREZHX0pJVCAgICAgIC8qIFVu
ZGVmIHNvIHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0LiAqLwotI3VuZGVmIEVOQUJMRV9GVExfSklU
ICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVkZWZpbmUgaXQuICovCisjdW5kZWYgRU5B
QkxFX0RGR19KSVQKKyN1bmRlZiBFTkFCTEVfRlRMX0pJVAorI3VuZGVmIEVOQUJMRV9CM19KSVQK
ICNkZWZpbmUgRU5BQkxFX0RGR19KSVQgMAogI2RlZmluZSBFTkFCTEVfRlRMX0pJVCAwCisjZGVm
aW5lIEVuYWJsZV9CM19KSVQgMAogI2VuZGlmCiAKIC8qIENvdW50cyB1c2VzIG9mIHdyaXRlIGJh
cnJpZXJzIHVzaW5nIHNhbXBsaW5nIGNvdW50ZXJzLiBCZSBzdXJlIHRvIGFsc28KSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvU2NvcGVkTGFt
YmRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlZExhbWJkYV9oCisjZGVm
aW5lIFNjb3BlZExhbWJkYV9oCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBZb3UgY2FuIHVzZSBT
Y29wZWRMYW1iZGEgdG8gZWZmaWNpZW50bHkgcGFzcyBsYW1iZGFzIHdpdGhvdXQgYWxsb2NhdGlu
ZyBtZW1vcnkgb3IgcmVxdWlyaW5nCisvLyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBvZiB0aGUg
Y2FsbGVlLiBUaGUgY2FsbGVlIHNob3VsZCBiZSBkZWNsYXJlZCBhczoKKy8vCisvLyB2b2lkIGZv
byhjb25zdCBTY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+Jik7CisvLworLy8g
VGhlIGNhbGxlciBqdXN0IGRvZXM6CisvLworLy8gdm9pZCBmb28oc2NvcGVkTGFtYmRhPE15VGhp
bmdzKiAoaW50LCBTdHVmZiYpPihbJl0gKGludCB4LCBTdHVmZiYgeSkgLT4gTXlUaGluZ3MqIHsg
YmxhaCB9KSk7CisvLworLy8gTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIGZvbygpIG5vdCBlc2Nh
cGluZyB0aGUgbGFtYmRhLiBUaGUgbGFtYmRhIGlzIG9ubHkgdmFsaWQgd2hpbGUgZm9vKCkgaXMK
Ky8vIG9uIHRoZSBzdGFjayAtIGhlbmNlIHRoZSBuYW1lIFNjb3BlZExhbWJkYS4KKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBTY29wZWRMYW1iZGE7Cit0ZW1wbGF0ZTx0
eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2Nv
cGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAg
U2NvcGVkTGFtYmRhKFJlc3VsdFR5cGUgKCppbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMm
Ji4uLikgPSBudWxscHRyLCB2b2lkKiBhcmcgPSBudWxscHRyKQorICAgICAgICA6IG1faW1wbChp
bXBsKQorICAgICAgICAsIG1fYXJnKGFyZykKKyAgICB7CisgICAgfQorICAgIAorICAgIFJlc3Vs
dFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlw
ZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRUeXBlICgq
bV9pbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLik7CisgICAgdm9pZCAqbV9hcmc7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+
IGNsYXNzIFNjb3BlZExhbWJkYUZ1bmN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBl
LCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzLCB0eXBlbmFtZSBGdW5jdG9yPgorY2xhc3MgU2Nv
cGVkTGFtYmRhRnVuY3RvcjxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKSwgRnVuY3Rvcj4g
OiBwdWJsaWMgU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7Citw
dWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkRnVuY3Rvcj4KKyAgICBTY29wZWRM
YW1iZGFGdW5jdG9yKFBhc3NlZEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IFNjb3BlZExh
bWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4oaW1wbEZ1bmN0aW9uLCB0aGlzKQor
ICAgICAgICAsIG1fZnVuY3RvcihzdGQ6OmZvcndhcmQ8UGFzc2VkRnVuY3Rvcj4oZnVuY3Rvcikp
CisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVu
Y3Rpb24odm9pZCogYXJndW1lbnQsIEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAg
eworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3Vt
ZW50KS0+bV9mdW5jdG9yKAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+
KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIEZ1bmN0b3IgbV9mdW5jdG9yOworfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorU2NvcGVk
TGFtYmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYShGdW5jdG9y
JiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gU2NvcGVkTGFtYmRhRnVuY3RvcjxGdW5jdGlvblR5
cGUsIEZ1bmN0b3I+KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlNjb3BlZExhbWJkYTsKK3VzaW5nIFdURjo6c2Nv
cGVkTGFtYmRhOworCisjZW5kaWYgLy8gU2NvcGVkTGFtYmRhX2gKKwpJbmRleDogU291cmNlL1dU
Ri93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRh
c2suaAkocmV2aXNpb24gMTkxNTA3KQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3
b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAor
ICAgIFNoYXJlZFRhc2tGdW5jdG9yKEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVu
Y3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAgeworICAgIH0KKwogcHJpdmF0ZToKICAgICBS
ZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBvdmVycmlkZQogICAg
IHsKQEAgLTExMCw2ICsxMTUsMTEgQEAgUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3Jl
YXRlU2hhcgogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1
bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3RvcikpOwogfQordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBl
Pj4gY3JlYXRlU2hhcmVkVGFzayhGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KFdURjo6
bW92ZShmdW5jdG9yKSkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263976</attachid>
            <date>2015-10-24 00:43:02 -0700</date>
            <delta_ts>2015-10-24 12:45:10 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>608158</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTMzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MyBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6Okxvd2VyaW5nU2VsZWN0b3I6Okxvd2VyaW5nU2VsZWN0b3Ip
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjph
Y2NlcHRSb290KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdT
ZWxlY3Rvcjo6YWNjZXB0Um9vdExhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHNMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6
YWNjZXB0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dl
cmluZ1NlbGVjdG9yOjphY2NlcHRPcGVyYW5kc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlMb2FkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5QWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmVBZGRM
b2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rv
cjo6dHJ5U3RvcmVBbmRMb2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlDb25zdDMyKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6QjM6Omxvd2VyVG9BaXIpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQuCisgICAg
ICAgICogYjMvQjNNZW1vcnlWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6TWVt
b3J5VmFsdWU6On5NZW1vcnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6
ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpNZW1v
cnlWYWx1ZTo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpNZW1vcnlW
YWx1ZSk6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNPcGNvZGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjppc0NoZWNrTWF0aCk6CisgICAgICAgICogYjMvQjNPcmlnaW4uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZHVtcCk6CisgICAgICAgICogYjMvQjNPcmln
aW4uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46Ok9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpQYXRj
aHBvaW50U3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6flBh
dGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpm
b3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlk
KToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQYXRjaHBv
aW50VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6
flBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIz
OjpQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgICogYjMvQjNQaGFz
ZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQaGFzZVNjb3BlOjpQaGFzZVNj
b3BlKToKKyAgICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6On5QaGFzZVNjb3BlKToKKyAgICAg
ICAgKiBiMy9CM1BoYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQcm9jZWR1cmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJvY2VkdXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6flByb2NlZHVyZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcik6CisgICAgICAgICog
YjMvQjNQcm9jZWR1cmUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNp
emUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphdCk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpp
dGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6OmZpbmROZXh0KToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjpWYWx1ZXNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRl
cmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6VmFsdWVzQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OlZhbHVlc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OnZhbHVlcyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGQpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90
S2luZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBiMy9CM1N0YWNrU2xvdEtpbmQuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNTdGFja1Nsb3RW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6On5TdGFj
a1Nsb3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90VmFsdWUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpTdGFja1Nsb3RWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Ns
b3RWYWx1ZTo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Omtp
bmQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Om9mZnNldEZyb21GUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpTdGFja1Nsb3RWYWx1ZSk6CisgICAgICAgICog
YjMvQjNTdGFja21hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmR1
bXApOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcDo6U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6b3BhcXVlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlN0YWNrbWFwOjpzZXRPcGFxdWVJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFj
a21hcDo6b3BhcXVlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmNvbnN0cmFp
bik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xvYmJlcik6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcDo6Y2xvYmJlcmVkKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpz
ZXRHZW5lcmF0b3IpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwpOgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpTdWNjZXNzb3JDb2xsZWN0
aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OnNpemUpOgorICAg
ICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpT
dWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0
b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpiZWdpbik6Cisg
ICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAqIGIz
L0IzU3dpdGNoQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6
ZHVtcCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hD
YXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6OmNhc2VW
YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0YXJnZXQpOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoQ2FzZTo6dGFyZ2V0QmxvY2spOgorICAgICAgICAqIGIzL0IzU3dpdGNo
VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjp+U3dpdGNo
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmFwcGVuZENhc2UpOgorICAgICAgICAoSlNDOjpC
Mzo6U3dpdGNoVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjpTd2l0Y2hWYWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6
OlN3aXRjaFZhbHVlOjpudW1DYXNlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZh
bHVlOjpjYXNlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmZhbGxUaHJvdWdoKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRj
aFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoVmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6QjM6OlN3aXRjaFZhbHVlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1
ZTo6ZW5kKToKKyAgICAgICAgKiBiMy9CM1R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNUeXBlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6aXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6aXNGbG9hdCk6CisgICAgICAgIChK
U0M6OkIzOjpwb2ludGVyVHlwZSk6CisgICAgICAgICogYjMvQjNVcHNpbG9uVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M1Vwc2lsb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6
YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OnBoaSk6CisgICAgICAg
IChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OlVwc2lsb25WYWx1ZSk6CisgICAgICAgICogYjMvQjNV
c2VDb3VudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6VXNlQ291
bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6flVzZUNvdW50cyk6CisgICAgICAg
ICogYjMvQjNVc2VDb3VudHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpVc2VDb3VudHM6
Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OnZhbGlkYXRlKToKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjp+VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRp
dHkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoTm9wKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkZWVwRHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZTo6dHlwZUZvcik6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcmlnaW4pOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoaWxkKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphaXJUeXBl
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpjaGlsZHJlbik6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6RGVlcFZhbHVlRHVtcDo6RGVlcFZh
bHVlRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlSW5saW5lcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphcyk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50MzIpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
Ojphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmFzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0ludCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjphc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3RhY2ttYXApOgor
ICAgICAgICAqIGIzL0IzVmFsdWVSZXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlUmVwOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvQjNWYWx1ZVJlcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpWYWx1
ZVJlcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpzdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6c3RhY2tB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6Y29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6OmNvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjpraW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvZmZzZXRGcm9tRlApOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9mZnNldEZyb21TUCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZVJlcDo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmRvdWJsZVZhbHVl
KToKKyAgICAgICAgKiBiMy9haXI6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJBcmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpk
dW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0RlZik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjphZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpzdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Y2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNWYWxpZFNjYWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpsb2dT
Y2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aW5kZXgpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OnJlbENvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnJl
c0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnNwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmtpbmQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ltbSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbW02NCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1N0YWNr
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0NhbGxBcmcpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
UmVsQ29uZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXNDb25kKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnRtcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OnBvaW50ZXJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YmFzZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c2NhbGUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlBU
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc1R5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omdwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZwcik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Z3BUbXBJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnBUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpdGhPZmZzZXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjphc1RydXN0ZWRJbW0zMik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVz
dGVkSW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbVB0cik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjphc0Jhc2VJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
YXNSZWxhdGlvbmFsQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1Jl
c3VsdENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpC
YXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQmFzaWNCbG9jay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Js
b2NrOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6bnVt
U3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVl
cEJhc2ljQmxvY2tEdW1wOjpEZWVwQmFzaWNCbG9ja0R1bXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpk
ZWVwRHVtcCk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2Fs
bFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
Q2FsbFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNw
ZWNpYWw6OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpk
ZWVwRHVtcEltcGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaDogQWRkZWQu
CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6Q29kZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6On5Db2RlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphZGRTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjphZGRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y0NhbGxTcGVjaWFs
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OmZpbmROZXh0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZpbmRO
ZXh0QmxvY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpudW1UbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbEFyZ0FyZWFTaXpl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVxdWVzdENhbGxBcmdBcmVhU2l6ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OnNldEZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpv
cGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6Q29kZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246OlN0YWNrU2xvdHNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNr
U2xvdHNDb2xsZWN0aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
dGFja1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjpTcGVjaWFsc0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3Bl
Y2lhbHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29k
ZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciop
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzcGVjaWFscyk6CisgICAgICAgICogYjMvYWlyL0FpckZy
ZXF1ZW50ZWRCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIz
L2Fpci9BaXJHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGVk
LmNwcDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Okluc2VydGlvblNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6Y29kZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc2VydGlvblNldDo6YXBwZW5kSW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0LmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmR1bXApOgorICAgICAgICAqIGIz
L2Fpci9BaXJJbnN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpJbnN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0Ojpmb3JFYWNoVG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8VG1wPjo6Zm9yRWFjaCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8QXJnPjo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc3Q6OmZvckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpo
YXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6ZXh0cmFDbG9iYmVyZWRS
ZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzU2hpZnRWYWxpZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmlzTHNoaWZ0MzJWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6bGl2ZUF0SGVhZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpsaXZlQXRUYWlsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxDYWxjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6bGl2ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVu
ZXNzOjpMb2NhbENhbGM6OnRha2VMaXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5l
c3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJQaGFzZVNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdwcnNJblByaW9yaXR5
T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpmcHJzSW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMv
YWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPjo6aW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+Ojpp
blByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZWdzSW5Qcmlvcml0eU9y
ZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3BlY2lhbDo6flNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpuYW1l
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlNwZWNpYWw6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFNwZWNpYWxEdW1wOjpEZWVw
U3BlY2lhbER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OmR1
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAgICogYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpz
cGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0
YWNrU2xvdDo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OlN0
YWNrU2xvdCk6CisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpieXRlU2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlN0YWNrU2xvdDo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xv
dDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6dmFsdWUpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTdGFja1Nsb3Q6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkRlZXBTdGFja1Nsb3REdW1wOjpEZWVwU3RhY2tTbG90RHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkRlZXBTdGFja1Nsb3REdW1wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6Z3BUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6ZnBUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3Ig
Ym9vbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6aXNGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUFIp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRlBSKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6Z3ByKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzVG1wSW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmdwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpUbXA6OmZwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OnRtcElu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0FsaXZlKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzaCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmVuY29kZUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUZQUik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlRtcDo6ZW5jb2RlR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVu
Y29kZUZQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNFbmNvZGVkRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlBUbXApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZGVjb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZGVjb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXBIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXBJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgICogYjMvYWlyL0FpclZh
bGlkYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnZhbGlkYXRlKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmI6IEFkZGVkLgorICAgICAgICAqIGIzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYjogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpjb21waWxlQW5kUnVuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3Q0Mik6
CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogaml0
L1JlZy5oOgorICAgICAgICAoSlNDOjpSZWc6OmluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnOjpp
c1NldCk6CisgICAgICAgIChKU0M6OlJlZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6
OlJlZzo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6UmVnOjpBbGxS
ZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpSZWc6OkFs
bFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpSZWc6
OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpS
ZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6UmVnOjphbGwpOgorICAgICAgICAoSlND
OjpSZWc6OmludmFsaWQpOgorICAgICAgICAoSlNDOjpSZWc6Om9wZXJhdG9yISk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0KToKKyAgICAgICAgKiBq
aXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmVuZCk6
CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpzZXRBbnkpOgorCiAyMDE1LTEwLTIzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIHVudXNlZCBTY3JvbGxMYXll
ciBUaW1lbGluZSBFdmVudFR5cGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCShyZXZpc2lvbiAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDE4IEBAIGFs
bCA6IFwKICAgICBCeXRlY29kZXMuaCBcCiAgICAgSW5pdEJ5dGVjb2Rlcy5hc20gXAogICAgIEpT
Q0J1aWx0aW5zLmggXAorICAgIEIzTG93ZXJpbmdNYXRjaGVyLmggXAorICAgIEIzQWRkcmVzc01h
dGNoZXIuaCBcCisgICAgQjNDb21wYXJpc29uTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBc
CisgICAgQWlyT3Bjb2RlLmNwcCBcCisgICAgQWlyT3Bjb2RlVXRpbHMuaCBcCisgICAgQWlyT3Bj
b2RlVXRpbHMuY3BwIFwKICMKIAogUFlUSE9OID0gcHl0aG9uCiBQRVJMID0gcGVybAorUlVCWSA9
IHJ1YnkKIAogSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIgPSAkKEphdmFTY3JpcHRDb3JlKS9T
Y3JpcHRzCiAKQEAgLTI1MiwzICsyNjAsMTkgQEAgYWxsIDogSlNSZXBsYXlJbnB1dHMuaAogCiBK
U1JlcGxheUlucHV0cy5oIDogJChJTlBVVF9HRU5FUkFUT1JfU1BFQ0lGSUNBVElPTlMpICQoSU5Q
VVRfR0VORVJBVE9SX1NDUklQVFMpCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3JlcGxh
eS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgLS1vdXRwdXREaXIgLiAtLWZy
YW1ld29yayBKYXZhU2NyaXB0Q29yZSAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykK
KworQjNMb3dlcmluZ01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0
dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBh
dHRlcm5zCisJJChSVUJZKSAkXiAKK0IzQWRkcmVzc01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29y
ZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0Iz
QWRkcmVzc01hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReCitCM0NvbXBhcmlzb25NYXRjaGVy
Lmg6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEph
dmFTY3JpcHRDb3JlKS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAk
XgorCitBaXJPcGNvZGUuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0
b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZ
KSAkXgorQWlyT3Bjb2RlLmNwcDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5l
cmF0b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChS
VUJZKSAkXgorQWlyT3Bjb2RlVXRpbHMuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29k
ZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CisJJChSVUJZKSAkXgorQWlyT3Bjb2RlVXRpbHMuY3BwOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMKKwkkKFJVQlkpICReCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTkxNTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQkw
RkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1
RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1
RDZCMkE1MTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1
RDZCMkE1NTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKQEAgLTY4
NSw2ICs2ODYsMTIxIEBACiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2Rl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEw
QTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQx
NzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVC
M0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovOyB9OworCQkwRkVD
ODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovOyB9OworCQkwRkVDODRGRjFCREFDREFD
MDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1
bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi87IH07CisJ
CTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxp
bmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tV
dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi87IH07CisJCTBG
RUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5j
cHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTA3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hl
Y2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNr
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1
MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi87IH07CisJCTBGRUM4NTBCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0
YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11
dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLzsgfTsKKwkJ
MEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTBFMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVl
LmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
NTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUx
MDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUu
Y3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi87IH07CisJCTBG
RUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDOTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxNDFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5o
ICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
QjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi87IH07CisJCTBGRUM4
NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQzFCREFDREFDMDA4MEZGNzQg
LyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9OworCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQg
LyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9j
ay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRTFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTE5MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5o
ICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi87
IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMTFCREFDREFDMDA4
MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9OworCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQg
LyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLzsgfTsKKwkJ
MEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMzFCREFDREFDMDA4MEZG
NzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsKKwkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovOyB9
OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENTFCREFDREFD
MDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTIwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1
ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLzsgfTsK
KwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBGRUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi87IH07CisJCTBGRUM4NTI1
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3Bw
ICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERF
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovOyB9OworCQkwRkVDODUy
OTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQ
aGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi87IH07CisJCTBG
RUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMTFCREFDREFDMDA4MEZGNzQg
LyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkwRkVDODUyQzFCREFDREFDMDA4MEZGNzQgLyog
QjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovOyB9OworCQkw
RkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMzFCREFDREFDMDA4
MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTJFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNw
cCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU1MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87IH07CisJCTBGRUM4NTMwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21h
cFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUzMTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovOyB9
OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovOyB9OworCQkwRkVDODUzMzFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi87IH07CisJCTBGRUM4NTM2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsKKwkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovOyB9OworCQkwRkVDODUzOTFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1
ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovOyB9OworCQkwRkVDODUzQjFC
REFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3Bw
ICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMjFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICov
OyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovOyB9OworCQkwRkVDODUzRjFCREFDREFD
MDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRz
LmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKKwkJMEZFQzg1NDExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUu
Y3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1NDMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovOyB9
OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLzsgfTsKKwkJ
MEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZF
Qzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovOyB9OworCQkwRkVDODU2RTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRl
U3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzAxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovOyB9OworCQkw
RkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QzFCREFDREM3MDA4MEZG
NzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICov
OyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRFMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODU3NDFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWly
Q0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmgg
Ki87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUy
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1
NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJH
ZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi87IH07CisJCTBGRUM4
NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTUxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi87IH07CisJCTBGRUM4NTdCMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9OworCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0
aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwICovOyB9Owor
CQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1OTFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBGRUM4NTdGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLzsgfTsK
KwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggKi87IH07CisJCTBG
RUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQ
aGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLzsgfTsK
KwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJl
Z2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5Lmgg
Ki87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYyMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODgxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi87
IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi87IH07CisJCTBGRUM4
NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsgfTsKKwkJMEZFQzg1OEIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNw
cCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjcxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovOyB9OworCQkwRkVDODU4RDFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovOyB9
OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2OTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovOyB9OworCQkwRkVD
ODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZF
Qzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQg
LyogQWlyR2VuZXJhdGVkLmNwcCAqLzsgfTsKKwkJMEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrICovOyB9OworCQkwRkVDODVBNDFCREI1Q0YxMDA4MEZGNzQgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLzsgfTsKKwkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVBRTFCREI1RDVF
MDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0
YW50SG9pc3RpbmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMgLyog
U2V0dXBWYXJhcmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODIy
LDYgKzE5MzgsMTMgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZDRUZBQjUxODA1RDYx
NjAwNDcyQ0U0OwogCQkJcmVtb3RlSW5mbyA9IGxsdm1Gb3JKU0M7CiAJCX07CisJCTBGRUM4NUIw
MUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2Eg
PSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZF
ODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOwor
CQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQ7CisJCQly
ZW1vdGVJbmZvID0gdGVzdGIzOworCQl9OwogCQkwRkY5MjJEMjE0RjQ2QjJGMDA0MUEyNEUgLyog
UEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVBy
b3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFBy
b2plY3Qgb2JqZWN0ICovOwpAQCAtMjU2Myw2ICsyNjg2LDEyMCBAQAogCQkwRkVBMEEyRjE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdKSVRDb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMzAxNzBENDBCRjAwQkI3MjJDIC8qIERG
R0pJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklUQ29kZS5o
OyBwYXRoID0gZGZnL0RGR0pJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1l
bnRSZWdWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QXJndW1lbnRSZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQmFzaWNC
bG9jay5jcHA7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9jay5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGIzL0IzQmFzaWNC
bG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja1V0aWxzLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2tV
dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQTFCREFDREFDMDA4
MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQmxvY2tXb3JrbGlzdC5oOyBwYXRoID0gYjMvQjNCbG9ja1dvcmtsaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0No
ZWNrU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3Bl
Y2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NoZWNrU3BlY2lhbC5o
OyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMv
QjNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb21tb24u
Y3BwOyBwYXRoID0gYjMvQjNDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tb24uaDsgcGF0aCA9IGIzL0IzQ29tbW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b21tdXRhdGl2aXR5LmNwcDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11
dGF0aXZpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tdXRhdGl2
aXR5Lmg7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmg7IHBhdGggPSBiMy9CM0Nv
bnN0MzJWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNTFCREFD
REFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNDb25zdDY0VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDY0VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNDb25zdDY0VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3Q2NFZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
RG91YmxlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0RG91YmxlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
dHJvbFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29u
dHJvbFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29udHJvbFZhbHVlLmg7
IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgcGF0
aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmg7IHBhdGggPSBiMy9C
M0ZyZXF1ZW5jeUNsYXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvQjNGcmVxdWVu
dGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0UxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmF0ZS5oOyBw
YXRoID0gYjMvQjNHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBw
YXRoID0gYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW5kZXhNYXAuaDsgcGF0aCA9IGIzL0IzSW5k
ZXhNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNJbmRleFNldC5oOyBwYXRoID0gYjMvQjNJbmRleFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5jcHA7IHBh
dGggPSBiMy9CM0xvd2VyVG9BaXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5oOyBwYXRoID0gYjMvQjNMb3dlclRvQWly
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzTWVtb3J5VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01l
bW9yeVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTWVtb3J5VmFs
dWUuaDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3Bjb2RlLmNwcDsgcGF0aCA9IGIzL0IzT3Bj
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDgxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
T3Bjb2RlLmg7IHBhdGggPSBiMy9CM09wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW4uY3BwOyBwYXRoID0gYjMvQjNPcmln
aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQTFCREFDREFDMDA4
MEZGNzQgLyogQjNPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNP
cmlnaW4uaDsgcGF0aCA9IGIzL0IzT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVj
aWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNp
YWwuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZh
bHVlLmNwcDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZhbHVl
Lmg7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhhc2VTY29wZS5jcHA7IHBhdGgg
PSBiMy9CM1BoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1Byb2NlZHVyZS5jcHA7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZS5oOyBwYXRoID0g
YjMvQjNQcm9jZWR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZUlubGluZXMuaDsgcGF0aCA9IGIzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNDFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1N0YWNrbWFwLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja21hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwLmg7
IHBhdGggPSBiMy9CM1N0YWNrbWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5oOyBwYXRoID0gYjMv
QjNTdGFja21hcFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuY3BwOyBwYXRoID0gYjMvQjNT
dGFja1Nsb3RLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90S2lu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1N0YWNrU2xvdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1N0YWNrU2xvdFZhbHVlLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmg7IHBhdGggPSBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1N3aXRjaENhc2UuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2Fz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N3aXRjaENhc2UuaDsgcGF0
aCA9IGIzL0IzU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3dp
dGNoVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMDFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmg7IHBhdGggPSBiMy9CM1N3aXRjaFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNUeXBlLmNwcDsg
cGF0aCA9IGIzL0IzVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNUeXBlLmg7IHBhdGggPSBiMy9CM1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmg7IHBhdGggPSBiMy9C
M1Vwc2lsb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNTFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNVc2VDb3VudHMuY3BwOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVc2VD
b3VudHMuaDsgcGF0aCA9IGIzL0IzVXNlQ291bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMv
QjNWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFsaWRhdGUuaDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNWYWx1ZS5oOyBwYXRoID0gYjMvQjNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUlubGluZXMuaDsgcGF0aCA9
IGIzL0IzVmFsdWVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVSZXAuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlUmVwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFs
dWVSZXAuaDsgcGF0aCA9IGIzL0IzVmFsdWVSZXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFjay5jcHA7
IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlU3RhY2suaDsgcGF0
aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQXJnLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFyZy5o
OyBwYXRoID0gYjMvYWlyL0FpckFyZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQmFzaWNCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEUxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyQ0NhbGxTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNvZGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
R2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRlLmg7IHBhdGgg
PSBiMy9haXIvQWlyR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRpb25Db250ZXh0Lmg7IHBhdGggPSBi
My9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NTYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVz
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
SW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc2Vy
dGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnN0LmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJJbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NUIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlySW5zdC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3RJbmxpbmVzLmg7
IHBhdGggPSBiMy9haXIvQWlySW5zdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxpdmVuZXNzLmg7IHBhdGggPSBiMy9haXIvQWly
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyUGhhc2VTY29wZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpclBoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
clJlZ2lzdGVyUHJpb3JpdHkuY3BwOyBwYXRoID0gYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MTFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJSZWdpc3RlclByaW9yaXR5Lmg7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
ZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BlY2lhbC5oOyBw
YXRoID0gYjMvYWlyL0FpclNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBw
YXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BpbGxFdmVyeXRoaW5nLmg7
IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3RhY2tTbG90LmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclN0YWNrU2xvdC5oOyBwYXRoID0gYjMvYWlyL0FpclN0
YWNrU2xvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2ODFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpclRtcC5jcHA7IHBhdGggPSBiMy9haXIvQWlyVG1wLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJU
bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyVG1wSW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpclRtcElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclZhbGlkYXRl
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJWYWxpZGF0ZS5oOyBwYXRoID0gYjMvYWly
L0FpclZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTkyMUJE
QjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyR2VuZXJhdGVkLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0
ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODVBRDFCREI1Q0YxMDA4
MEZGNzQgLyogdGVzdGIzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSB0ZXN0YjM7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBG
RUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gdGVzdGIzLmNwcDsgcGF0aCA9IGIzL3Rlc3RiMy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdD
b25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFu
dEhvaXN0aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdC
ODFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBwYXRo
ID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dXBWYXJhcmdzRnJhbWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NjksNiArNDAwNiwxNSBAQAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OworCQkwRkVDODVB
MjFCREI1Q0YxMDA4MEZGNzQgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1l
d29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZp
bGVzID0gKAorCQkJCTBGRUM4NUEzMUJEQjVDRjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGRUM4NUE0MUJEQjVDRjEwMDgwRkY3NCAvKiBK
YXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEZGOTIyQzYxNEY0
NkIxMzAwNDFBMjRFIC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0zODM4LDYg
KzQwODQsNyBAQAogCQkJCTE0MTIxMTIwMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovLAog
CQkJCTE0QkQ1OUJGMEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTY1MTEyMzA1
MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAorCQkJCTBGRUM4NUFEMUJEQjVDRjEw
MDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4NTgsNiArNDEwNSw3IEBACiAJCQkJQTdDMjI1Q0Mx
Mzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQz
MkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywKIAkJCQk5Njg4Q0IxMjBFRDEyQjRFMDAx
RDY0OUYgLyogYXNzZW1ibGVyICovLAorCQkJCTBGRUM4NEIyMUJEQUNENUUwMDgwRkY3NCAvKiBi
MyAqLywKIAkJCQlBNTRDRjJFQTE4NEVBNzM5MDAyMzdGMTkgLyogYmluZGluZ3MgKi8sCiAJCQkJ
QTdEODAxOUYxODgwRDY2RTAwMjZDMzlCIC8qIGJ1aWx0aW5zICovLAogCQkJCTk2OUEwNzhGMEVE
MUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLywKQEAgLTQwNzEsNiArNDMxOSwxMzQgQEAKIAkJ
CW5hbWUgPSBmdGw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkwRkVDODRC
MjFCREFDRDVFMDA4MEZGNzQgLyogYjMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCisJCQkJ
MEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi8sCisJ
CQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovLAor
CQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovLAorCQkJ
CTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRkVD
ODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovLAorCQkJCTBG
RUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovLAorCQkJCTBG
RUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRkVD
ODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4
NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEJE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEJFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLywKKwkJCQkwRkVDODRCRjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uY3BwICovLAorCQkJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW1vbi5oICovLAorCQkJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuY3BwICovLAorCQkJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuaCAqLywKKwkJCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dDMyVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
MzJWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRW
YWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZh
bHVlLmggKi8sCisJCQkJMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVW
YWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3Vi
bGVWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xW
YWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZh
bHVlLmggKi8sCisJCQkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuY3BwICovLAorCQkJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNs
YXNzLmggKi8sCisJCQkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJs
b2NrLmggKi8sCisJCQkJMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3Bw
ICovLAorCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggKi8sCisJ
CQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
ICovLAorCQkJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8sCisJ
CQkJMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLywKKwkJCQkwRkVD
ODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLywKKwkJCQkwRkVDODRE
NDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8sCisJCQkJMEZFQzg0RDUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEQ2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggKi8sCisJCQkJMEZFQzg0RDcxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLywKKwkJCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQg
LyogQjNPcGNvZGUuaCAqLywKKwkJCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmln
aW4uY3BwICovLAorCQkJCTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICov
LAorCQkJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNw
cCAqLywKKwkJCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lh
bC5oICovLAorCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1
ZS5jcHAgKi8sCisJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZh
bHVlLmggKi8sCisJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5j
cHAgKi8sCisJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICov
LAorCQkJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgKi8sCisJ
CQkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8sCisJCQkJMEZF
Qzg0RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovLAorCQkJCTBG
RUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLywKKwkJCQkwRkVDODRF
NTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovLAorCQkJCTBGRUM4NEU2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0RTcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0RTgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8sCisJCQkJMEZFQzg0RTkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovLAorCQkJCTBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRFQjFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovLAorCQkJCTBGRUM4NEVDMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLywKKwkJCQkwRkVDODRFRDFC
REFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLywKKwkJCQkwRkVDODRFRTFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8sCisJCQkJMEZFQzg0RUYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEYwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5jcHAgKi8sCisJCQkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5oICovLAorCQkJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5j
cHAgKi8sCisJCQkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLywK
KwkJCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLywKKwkJCQkw
RkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg0
RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLywKKwkJCQkwRkVDODRGOTFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RkExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZUlubGluZXMuaCAqLywKKwkJCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1
ZVJlcC5jcHAgKi8sCisJCQkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAu
aCAqLywKKwkJCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLywKKwkJ
CSk7CisJCQluYW1lID0gYjM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkw
RkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5jcHAgKi8sCisJCQkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFs
bG9jYXRlU3RhY2suaCAqLywKKwkJCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJn
LmNwcCAqLywKKwkJCQkwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggKi8sCisJ
CQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAorCQkJ
CTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEZF
Qzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZF
Qzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAorCQkJCTBGRUM4
NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKKwkJCQkwRkVDODU1MTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NTkyMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJH
ZW5lcmF0ZWQuY3BwICovLAorCQkJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0aW9uQ29udGV4dC5oICovLAorCQkJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJI
YW5kbGVDYWxsZWVTYXZlcy5jcHAgKi8sCisJCQkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8sCisJCQkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5oICovLAorCQkJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnN0LmNwcCAqLywKKwkJCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dC5oICovLAorCQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5o
ICovLAorCQkJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovLAor
CQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLywKKwkJ
CQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovLAorCQkJCTBG
RUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLywKKwkJ
CQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovLAor
CQkJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLywKKwkJCQkw
RkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTY0
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICovLAorCQkJCTBGRUM4
NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLywKKwkJCQkwRkVD
ODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLywKKwkJCQkwRkVDODU2
NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8sCisJCQkJMEZFQzg1NjgxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8sCisJCQkJMEZFQzg1NjkxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcC5oICovLAorCQkJCTBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJU
bXBJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLywKKwkJCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUu
aCAqLywKKwkJCSk7CisJCQluYW1lID0gYWlyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKIAkJMEZGNDI3MkUxNThFQkNDRTAwNENCOUZGIC8qIGRpc2Fzc2VtYmxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC02MDQyLDYgKzY0MTgsNyBA
QAogCQkJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBB
YnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQg
LyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhl
YWRlcnMgKi8sCkBAIC02MDcxLDggKzY0NDgsMTAgQEAKIAkJCQlBNUVBNzBFODE5RjVCMTAxMDA5
OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hl
ZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjY0QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE1MTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGlu
RXhlY3V0YWJsZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjA4Nyw2ICs2NDY2LDcgQEAKIAkJCQk5
OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfbW9kZWwucHkgaW4gSGVhZGVycyAq
LywKIAkJCQk5OURBMDBBNTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfdGVtcGxhdGVzLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERUExMzIxQjlGMzE2MzAwNkQ2NUREIC8qIEJ1aWx0aW5V
dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RTcyOTQwQjE5MEYwNTE0MDAxQTkx
QjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTcxNUVEOEU0NjAw
RjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTgxNUVEOEU0
NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjA5Nyw2
ICs2NDc3LDcgQEAKIAkJCQkwRjJERDgwQjFBQjNEODU4MDBCQkI4RTggLyogQnl0ZWNvZGVLaWxs
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzAxODM1NjZG
OTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2Rl
VXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyog
QnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMzMsMTMgKzY1MTQsMTYgQEAKIAkJCQkw
RjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2NTUzQTMzMjE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENv
bXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyQzFCREFDREFDMDA4
MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBM0E4MTc5NzQz
MkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNkZDNzUxMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBjb25maWcu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVj
aWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29u
c2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDhBMThCQzIxQzMwMEJF
REY3NiAvKiBDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwODFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3
QTE4OUIwNTEwMDA2MzMyMzEgLyogQ29uc29sZU1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1M0NFMDg2MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUZEMDA3NDE4OUIwMzhDMDA2MzMyMzEgLyogQ29uc29sZVR5cGVzLmggaW4g
SGVhZGVycyAqLywKQEAgLTYxNTMsNiArNjUzNyw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAw
ODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEz
RkExNDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MkM4RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUyNDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNp
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNjQsNiArNjU0OSw3IEBACiAJCQkJOTk1OUU5MkIx
QkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2
MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBE
YXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTgzLDYgKzY1NjksNyBAQAogCQkJ
CUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0Yw
MDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3
MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQw
MjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyog
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2
RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8s
CkBAIC02MTkzLDcgKzY1ODAsOSBAQAogCQkJCTBGMkREODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBE
RkdBcmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzIyMTg3NzUw
NTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0
MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdB
cnJheU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTgg
LyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcx
ODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRl
cnMgKi8sCkBAIC02MjAzLDYgKzY1OTIsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMz
Q0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdC
bG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAwMTlBREE0MTAwMDZB
QzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyNDIsOCArNjYz
MiwxMCBAQAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0Vk
Z2VVc2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURG
MDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0
OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRy
YXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjI3Myw2ICs2NjY1LDcgQEAK
IAkJCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NjFC
REFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdM
aXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAg
LyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjI4
MSw2ICs2Njc0LDcgQEAKIAkJCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZp
ZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8q
IERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENE
ODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE0MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zm
c2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8q
IERGR05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02Mjk5LDYgKzY2OTMsNyBA
QAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0
Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNTFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzEx
NDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4
aXRGdXp6LmggaW4gSGVhZGVycyAqLywKQEAgLTYzMTYsNiArNjcxMSw4IEBACiAJCQkJMEZGQzky
MTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERG
ODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZD
Q0ZDMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzNDAsNiArNjczNyw3IEBACiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQw
IC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDhBMzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERG
R1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMx
REIxMjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAt
NjM1MSw2ICs2NzQ5LDcgQEAKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBD
NTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIg
LyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkM5N0Y0MjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzgwLDYgKzY3NzksNyBAQAogCQkJCTBGNTZBMUQzMTUw
MDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5n
ZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBG
bG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3
NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjQzOCw2ICs2ODM4LDcgQEAK
IAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVl
RnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQg
LyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5
OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMy
QzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
MzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAq
LywKQEAgLTY0NDUsOCArNjg0NiwxMCBAQAogCQkJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAv
KiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNDBF
MTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTBGQjE5NzRBRTYxMDA4MDg1N0MgLyogRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRCRkYyQzFBRDQ3
NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rp
dml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTY0ODMsNiArNjg4Niw3IEBACiAJCQkJ
QzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUExQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFCMUFBOTA5
MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
MDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTA4LDYgKzY5MTIsNyBAQAogCQkJCUMyRTUy
NkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
N0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2
aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRl
bnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNkRERUExOERBNDRBQjAwQTM4M0QwIC8q
IElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3NjE4OUIwMzhD
MDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTY1NjEs
NiArNjk2Niw3IEBACiAJCQkJQTFCOUUyM0MxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgxOTNFMzFCNEUwQ0RCMDBGQzEw
MjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQxQjRFMENEQjAwRkMxMDI5IC8qIEludGxD
b2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDZFMUI0REMx
NDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
NTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC02NTkxLDYgKzY5OTcsNyBAQAogCQkJCTBGMjRFNTREMTdFRTI3
NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQz
MTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEz
MTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
NjYwNCw2ICs3MDExLDcgQEAKIAkJCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JEQUVDQjE3RjRFQTE0
MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4QjE0MTg2
RDFCNjI1MjdGMDBGQjIwNjggLyogSlNBcnJvd0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNCYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDBEMTdENzBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZGQTlFOTIxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjIwLDYgKzcwMjgsOCBAQAogCQkJCTg2NUEz
MEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU0NKU1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2xhc3NSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1M0NFMDg4MThCQzFBNTYwMEJFREY3NiAvKiBKU0NvbnNvbGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTFFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlND
b250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyog
SlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1OEMwMjQyMThFNEE0MUEw
MDAzMkJDNSAvKiBKU0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTY2MzUsNiAr
NzA0NSw3IEBACiAJCQkJRkUzODRFRTYxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCBp
biBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU4MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNFbnZpcm9ubWVudFJlY29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjAxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTND
NjE0MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdC
NEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjY0NCwxMSArNzA1NSwxMyBAQAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQjFCREFDREFDMDA4MEZG
NzQgLyogQjNJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjEwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA4NjE4
OUIxQjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1QzNBMUE2MThDMDQ5MDIwMEM5NTkzQSAvKiBKU0dsb2JhbE9iamVjdENvbnNv
bGVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjY3OSw2ICs3MDkyLDcgQEAKIAkJCQlBNzAw
ODc0MjE3Q0JFOEVCMDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NERF
Rjk2MTgyRDk5MTQwMDUyMkMyMiAvKiBKU01hcEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5OTU5RTkyRDFCRDE3RkE0MDAxQUE0MTMgLyoganNtaW4ucHkgaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzMThDQkMxMUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM5REE0QTcxQjdFOEI3QzAwODRG
MzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggaW4gSGVhZGVycyAqLywKQEAgLTY3MDgsNiArNzEyMiw3
IEBACiAJCQkJQTdDMUVBRjAxNzk4N0FCNjAwMjk5REIyIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RTg1NTM5MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1
aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Vwc2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQzBFQzMxQUEwRDdEQTAwQjZB
QUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2MDBCNUE3MTUy
QkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MjgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nUmVmLmggaW4gSGVhZGVycyAqLywKQEAg
LTY3NjEsOSArNzE3NiwxMSBAQAogCQkJCTBGNDY4MEEzMTRCQTdGOEQwMEJGRTI3MiAvKiBMTElu
dEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MENCMTRCQkIxNzIwMEJGRTI3
MiAvKiBMTEludE9mZmxpbmVBc21Db25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0Iy
MTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNDY4MEE1MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYwQjgzOUQxNEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkNFRkFDRTE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQ0YxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUElG
dW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAv
KiBMTFZNRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFEMzE4MDVFREND
MDA0NzJDRTQgLyogTExWTUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNjc3NiwxMiArNzE5
MywxNCBAQAogCQkJCTg2RDNCMkM2MTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFS
TS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFBMDA5QzAxODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3Jv
QXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ2MEZEREVBOTgwMDA2
RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUz
QzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjNCMjNF
MDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJNSVBTLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRTY4QzYzNzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBOTEzNUU1RTFDMDA5NjMw
MTIgLyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU0MEYz
QTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRo
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNjBGM0E4M0MxMDBGODQ3MTAgLyogTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzNBMTdDQkU4
NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4NTA3
RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtNjgwNiw2
ICs3MjI1LDcgQEAKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3
IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQyMTFC
OTAxM0RFMDAzNDZCNTIgLyogTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0
b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9k
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI4MThBMUIyNTkwMDI2RDg4RiAvKiBOb25k
ZXRlcm1pbmlzdGljSW5wdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjgyNiw2ICs3MjQ2LDcgQEAK
IAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkx
MCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4
OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2
RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtNjgzOCwxMyAr
NzI1OSwxNyBAQAogCQkJCTBGRjlDRTc0MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0Fj
Y2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2
QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVDRDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2Zp
bGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QTUxNjZBRDM1MTAw
MEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ3
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3
MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dl
bmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQz
NjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGVkQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjg2NiwxMCArNzI5MSwxMyBAQAogCQkJ
CTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODU4NDFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzgwQTIxOEZFMUU5ODAwMUU3MkQ5IC8qIFB1cmVO
YU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVDRDIzMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRC
eUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAv
KiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MDFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5M0I0QUExOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3OTFC
REFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENE
NEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4g
SGVhZGVycyAqLywKQEAgLTY4ODksNiArNzMxNyw3IEBACiAJCQkJMEZDMzE0MTIxODE0NTU5MTAw
MDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTdEMjNFRTE4OTFC
NTU0MDAzMUM3RkEgLyogUmVndWxhckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUJBMTVFODE4MjM0MEIzMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFQTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5z
cGVjdG9yQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVGMDE4MjM0NUFGMDBB
ODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02
ODk2LDYgKzczMjUsNyBAQAogCQkJCUE1QkExNUVEMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJ
bnNwZWN0b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MTE3RUUy
NzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThD
NkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEIwQTlE
MTFBOUI2NjQ2MDAwMTMwNkEgLyogUnVudGltZUZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MkMwNjExRjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjkyNSw2ICs3MzU1LDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJF
OTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0
MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBF
MTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNl
UHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtNjk0NCw2ICs3Mzc1LDcgQEAK
IAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDJFMzEzQjEzNEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDU3MjI4NjE0MzdFMTQwMDA1RkRFMjYgLyogU3Ryb25nSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVu
ZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3Ry
dWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyog
U3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5
NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCBpbiBIZWFkZXJzICovLApAQCAtNjk4MCwxMCArNzQx
MiwxMiBAQAogCQkJCTBGMkQ0REVBMTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8q
IFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDOTUyQjcxOUEyODk4NTAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERUMxOTgz
MkRDNDAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RDRERjAxOTgzMkRENjAwN0Q0QjE5IC8qIFR5cGVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NEZGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2V4dGVy
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDQxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4
Nl9pbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDIwLDggKzc0NTQsMTAgQEAKIAkJCQlGRUQ5
NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OTE5RDI2MTU4NTNDRTMwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDJFMzEzQzEzNEZGMEE2MDBBRkFEQjUgLyogV2Vhay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0QkZDRTY5MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xv
dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBX
ZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBC
MTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtNzA0Myw5ICs3
NDc5LDEyIEBACiAJCQkJOTk1OUU5MkUxQkQxN0ZBNDAwMUFBNDEzIC8qIHh4ZC5wbCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzMTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21h
cFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4
MTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NzA0QjQzMTJEQjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CkBAIC03MDcwLDYgKzc1MDksMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRkNFRkFCNjE4
MDVENjE2MDA0NzJDRTQgLyogbGlibGx2bUZvckpTQy5keWxpYiAqLzsKIAkJCXByb2R1Y3RUeXBl
ID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5keW5hbWljIjsKIAkJfTsKKwkJMEZF
Qzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2
ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRkVDODVBODFCREI1Q0YxMDA4
MEZGNzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRl
c3RiMyIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQkwRkVDODU5NTFCREI1Q0YxMDA4MEZG
NzQgLyogU291cmNlcyAqLywKKwkJCQkwRkVDODVBMjFCREI1Q0YxMDA4MEZGNzQgLyogRnJhbWV3
b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2ll
cyA9ICgKKwkJCSk7CisJCQluYW1lID0gdGVzdGIzOworCQkJcHJvZHVjdE5hbWUgPSB0ZXN0YXBp
OworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0
YjMgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOwor
CQl9OwogCQkwRkY5MjJDMzE0RjQ2QjEzMDA0MUEyNEUgLyogSlNDTExJbnRPZmZzZXRzRXh0cmFj
dG9yICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IDBGRjkyMkNBMTRGNDZCMTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAqLzsK
QEAgLTcyMjUsNiArNzY4MCw3IEBACiAJCQkJMTRCRDU5QkUwQTNFOEY5MDAwQkFGNTlDIC8qIHRl
c3RhcGkgKi8sCiAJCQkJOTMyRjVCREEwODIyQTFDNzAwNzM2OTc1IC8qIGpzYyAqLywKIAkJCQk2
NTExMjJGNzE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKKwkJCQkwRkVDODU5NDFC
REI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3MTUyQjlFMTcwMDUyMzFE
RSAvKiBUZXN0IFRvb2xzICovLAogCQkJKTsKIAkJfTsKQEAgLTc0NzIsNiArNzkyOCwxNCBAQAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owor
CQkwRkVDODU5NTFCREI1Q0YxMDA4MEZGNzQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBC
WFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJ
CWZpbGVzID0gKAorCQkJCTBGRUM4NUFGMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CisJCX07CiAJCTBGRjkyMkM0MTRGNDZCMTMwMDQxQTI0RSAvKiBTb3VyY2VzICovID0g
ewogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OwpAQCAtNzUyNyw2ICs3OTkxLDcgQEAKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBB
Qzc2NDkgLyogQWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRDEwN0VD
Mzc2MDA0MjdBNDggLyogQXJnTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc0M0JBQTE2
Qjg4MjQ5MDA5RjkyNzcgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODZEM0IyQzMxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk2NUMwMjg1MDE3MTc5NUUyMDAzNTFFMzUgLyogQVJNdjdEaXNh
c3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVDMDI4NUMxNzE3OTY2ODAwMzUxRTM1
IC8qIEFSTXY3RE9wY29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1MzQsOCArNzk5OSwxMCBA
QAogCQkJCUE3QThBRjM0MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkZDOTlENDE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0
ZXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QThBRjM2MTdBREI1RjMw
MDVBQjE3NCAvKiBBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
M0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUJGMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QkRBRUM4MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9y
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjM5NDU0
MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzAxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5UHJvdG90eXBlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjRFNTQwMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC03NTU2LDggKzgwMjMsMTAgQEAKIAkJCQkxNDI5RDhERDBFRDIy
MDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRUM5QkI2
MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2MkQ3NTVENjFCODRGQjQ2MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJv
bFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ1MUI4NEZCNDAwMDE4MDFGQSAv
KiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ0
MUI4NEZCM0QwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxM
aW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyNzY3MzIzMUI2ODBDMUUwMEZEOUYy
RSAvKiBDYWxsTW9kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1NzAsNiArODAzOSw3IEBACiAJ
CQkJQTc3RjE4MjExNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjhGOTQ0NjE2Njc2NEYxMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVy
YXRlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyog
Q29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBE
NjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03NTc3LDYgKzgwNDcsNyBAQAogCQkJCUE3MDlGMkYyMTdBMEFDMkEwMDUxMkU5OCAvKiBDb21t
b25TbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1M0EzMzExN0ExRjFFRTAwOENG
NkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdFNUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NThCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RkM3NTAxOTYxMTBBODAwRTFEMDJEIC8qIENv
bXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAw
MUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYwNCw2
ICs4MDc1LDcgQEAKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNTA2ODY3MUFFMjVFMjgw
MDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3
QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDAxMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MTMsNiArODA4NSw3IEBACiAJCQkJMEY2Mzk0
ODQxNUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBN0Q5QTI5NDE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxh
YmlsaXR5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MTRD
QTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxv
Y2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjIxLDYgKzgwOTQsNyBAQAogCQkJCTg2RUM5REM0
MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0NjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1
ZVJlcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzY5
NDFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzY1OCw2ICs4MTMyLDcgQEAKIAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBC
QkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlE
QzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU2RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3
RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkw
NTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03NzAwLDE0ICs4MTc1LDE3IEBACiAJCQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0Yy
NDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzAy
NUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzOTJDODkxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBE
RkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVE
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyog
REZHUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0VBMTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhB
OTc3QTE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVEMTRFRjkwQjMwMEM3MjUzMiAvKiBERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMjFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhl
YXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MjE5NkI4RjlFMDA5MTA1
MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzcyNSw2ICs4MjAzLDgg
QEAKIAkJCQkwRkMyMENCNTE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjg5M0JEQjE5MzZFMjNDMDAxMjExRjQgLyog
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc5MDg1
NTE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGRTE4QTYwMDcwMDAx
QTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0
NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhB
MzI3MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzc1Miw2ICs4MjMyLDcgQEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVF
MDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5jb2RlZFZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUwOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVy
cm9ySGFuZGxpbmdTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2
MDA0MjdBNDggLyogRXJyb3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3OTYsNiAr
ODI3Nyw3IEBACiAJCQkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExM
b3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwMDFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4MDMsNiArODI4NSw3IEBACiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJD
IC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ4NTMyOTE4N0RGREVDMDA4
M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZB
QUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFCMzE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzlBMTgwM0FE
QjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODM1LDYg
KzgzMTgsNyBAQAogCQkJCUE1RkQwMDc1MTg5QjAzOEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0Zh
Y3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI1RjhCQ0QxNTc1NDRBOTAwMjQ1QjcxIC8q
IEluY3JlbWVudGFsU3dlZXBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzRTA0RTE2MTY0
QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyog
SW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4NDIsNiArODMyNiw3IEBACiAJ
CQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTlFNzI5NDA4MTkwRjAyMUUwMDFBOTFCNSAvKiBJbml0aWFsaXplTExW
TVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAv
KiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTdCMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyog
SW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg1Myw2ICs4MzM4LDcg
QEAKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3Ry
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y3QzE4NDAzNjAzMDBCRkNFMjcgLyogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODcx
ODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODUzNzFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgxMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRTUxODkwQ0VCRjAw
MzFDN0ZBIC8qIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUzMjQzODkxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA5LDYgKzgzOTUsNyBAQAogCQkJCTg2RkE5RTkxMTQy
QkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1
bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAx
IC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJG
NjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4
MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5
MTYsNiArODQwMyw4IEBACiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpT
Q2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2
IC8qIEpTQ29uc29sZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU5MDFCREFDREM3MDA4
MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzIwMjhCNjE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxz
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkyNiwxNiArODQxNSwxOSBAQAogCQkJCUZFMzg0RUU3
MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0xvd2VyVG9BaXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0OCAvKiBKU0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNUZEMDA4NTE4OUIxQjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25z
b2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVDM0ExQTUxOEMwNDkwMjAwQzk1OTNB
IC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUwRDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU5NDU1OTIxODI0NzQ0NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdn
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdEMjNFOTE4OTFCMDc3MDAzMUM3RkEgLyog
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTlE
MTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0NDM0M2MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJ
bnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYzMTg4MDlE
RDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5MDAxMTBGMTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyMzFCREFDREFDMDA4MEZG
NzQgLyogQjNPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAw
N0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTNFNUMxMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA4MDFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRl
cm5hbFByb21pc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTU0LDYgKzg0NDYsNyBAQAogCQkJ
CUUzMThDQkMwMUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVS
ZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8q
IEpTTmF0aXZlU3RkRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAw
OTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTc5NjcsNiArODQ2MCw3IEBACiAJCQkJRTNFRjg4NzQxQjY2REYyMzAwM0Yy
NkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYy
NTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU1MkMzN0YxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTExMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyOEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpT
UmVwbGF5SW5wdXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODc0QUU1MTVFQkRFNEEwMDJF
MzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzBDNEFEMTY4MTA2N0Uw
MDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5OTUsNiArODQ4
OSw3IEBACiAJCQkJNzA5RkI4NjcxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3Jh
cHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMx
MzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNG
RDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MDAyLDkgKzg0OTcsMTIgQEAKIAkJCQkxNDhGMjFCMDEwN0VD
NTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkx
NEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVB
NkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1N0YxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEQyMTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QXJndW1lbnRSZWdWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0MTFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3
Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBMTEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODAxMyw2ICs4NTExLDcgQEAKIAkJCQlBN0U1QUIzNzE3OTlF
NEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDQ2OURERTEwN0VDN0U3MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTFGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QjcyM0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNo
aW5lU3RhY2tNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAw
QUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QzU2OEUw
MTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTgwMjIsMTAgKzg1MjEsMTIgQEAKIAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyog
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3Mzkx
N0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3NERFRjkzMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUwNzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4NzNEMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2
IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5
QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYz
REExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDM0MEE0ODQxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYxMDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MDY0LDE3ICs4NTY1LDIxIEBACiAJCQkJMEZGNzI5QUQxNjZB
RDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNzI5QUUxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMTM5MTI5MTY3NzFDMzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2Rl
U2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVD
MDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE5
MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODUzMDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNp
YWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNp
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFBy
b2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQx
QjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTNCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFODEwN0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlT
bG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQ
cm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA4MywxMCArODU4OCwxMiBAQAog
CQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRW
YXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAw
Mjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzM2MzdB
NTFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUExNzEyQjNCMTFDN0IyMTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NjQyQzUxMDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVk
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMDAsNiArODYwNyw3
IEBACiAJCQkJQTVCQTE1RTkxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBp
biBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgyNDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNw
ZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUVDMTgyMzQwQjQw
MEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTA1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3Rl
SW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RF
MUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgx
MTgsNiArODYyNiw3IEBACiAJCQkJQTU0Q0YyRjkxODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDRjJGNTE4NEVBQjI0MDAyMzdGMTkgLyog
U2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTlEQTUxN0QxMjg1ODAwNUY1
RkY5IC8qIFNldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg1MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3OTBERDZEMTgyRjQ5OTcwMDU4ODgwNyAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzI5OURBMTE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUU5ODQzMUE4OTIyNzUwMDc1NEU5MyAvKiBT
ZXR1cFZhcmFyZ3NGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMzIsNiArODY0MSw3IEBA
CiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QzFFQUYxMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmlj
dEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTIxMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09wY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VD
N0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NDY5REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTQ4LDYgKzg2NTgsNyBAQAogCQkJCTcwNUI0MUFE
MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MDVCNDFBRjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTcwNUI0MUIxMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNl
Q291bnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAv
KiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MEVDQTYwNzFBRkRCRUEyMDA0
NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQx
MzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODE3Niw2ICs4Njg3LDcgQEAKIAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFs
dWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZDNzM1
MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1ODMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAxM0FCMDBEQTMyMjkgLyogVmly
dHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5
MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxOTUsNiArODcwNyw3IEBACiAJCQkJ
NzA5RkI4NjkxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTRFQzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3Jp
dGVCYXJyaWVyQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTdEMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1
MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAwRDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NjNDNkQ5QzE1MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9u
aWNhbGl6ZVVDUzIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjIxLDYgKzg3MzQsMTEgQEAKIAkJ
CXRhcmdldCA9IDBGQ0VGQUI1MTgwNUQ2MTYwMDQ3MkNFNCAvKiBsbHZtRm9ySlNDICovOwogCQkJ
dGFyZ2V0UHJveHkgPSAwRkNFRkFCQzE4MDVENjYzMDA0NzJDRTQgLyogUEJYQ29udGFpbmVySXRl
bVByb3h5ICovOwogCQl9OworCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0
RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJn
ZXQgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovOworCQkJdGFyZ2V0UHJv
eHkgPSAwRkVDODVCMDFCREI1RDhGMDA4MEZGNzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
OworCQl9OwogCQkwRkY5MjJEMzE0RjQ2QjJGMDA0MUEyNEUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSAwRjQ2
ODBBOTE0QkE3RkQ5MDBCRkUyNzIgLyogTExJbnQgT2Zmc2V0cyAqLzsKQEAgLTgzNDUsNiArODg2
MywzOCBAQAogCQkJfTsKIAkJCW5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRkVDODVBOTFC
REI1Q0YxMDA4MEZGNzQgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAw
RkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9
IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOwor
CQl9OworCQkwRkVDODVBQTFCREI1Q0YxMDA4MEZGNzQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlz
YSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2Ug
PSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87
CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07
CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMEZFQzg1QUIxQkRCNUNGMTAwODBGRjc0IC8q
IFByb2ZpbGluZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFz
ZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9v
bEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RV
Q1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJCQluYW1lID0gUHJvZmlsaW5nOworCQl9OworCQkw
RkVDODVBQzFCREI1Q0YxMDA4MEZGNzQgLyogUHJvZHVjdGlvbiAqLyA9IHsKKwkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAy
MUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJCQlu
YW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMEZGOTIyQ0IxNEY0NkIxMzAwNDFBMjRFIC8qIERl
YnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKQEAgLTg2OTcsNiArOTI0NywxNyBAQAogCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJv
ZHVjdGlvbjsKIAkJfTsKKwkJMEZFQzg1QTgxQkRCNUNGMTAwODBGRjc0IC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YjMiICovID0geworCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJ
MEZFQzg1QTkxQkRCNUNGMTAwODBGRjc0IC8qIERlYnVnICovLAorCQkJCTBGRUM4NUFBMUJEQjVD
RjEwMDgwRkY3NCAvKiBSZWxlYXNlICovLAorCQkJCTBGRUM4NUFCMUJEQjVDRjEwMDgwRkY3NCAv
KiBQcm9maWxpbmcgKi8sCisJCQkJMEZFQzg1QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rp
b24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMEZGOTIyQ0Ex
NEY0NkIxMzAwNDFBMjRFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJKU0NMTEludE9mZnNldHNFeHRyYWN0b3IiICovID0gewogCQkJaXNhID0gWENDb25m
aWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2
aXNpb24gMTkxNTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJM
RShBU1NFTUJMRVIpCiAKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwogbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IGRvdWJsZSBNYWNyb0Fzc2VtYmxlcjo6dHdvVG9UaGUzMiA9IChkb3Vi
bGUpMHgxMDAwMDAwMDB1bGw7CkBAIC00Nyw1ICs0OSw3MCBAQCB2b2lkIE1hY3JvQXNzZW1ibGVy
OjpjYWxsUHJvYmUoc3RkOjpmdW5jCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2Ug
V1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQpCit7
CisgICAgc3dpdGNoIChjb25kKSB7CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw6Cisg
ICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpBYm92ZToKKyAgICAgICAg
b3V0LnByaW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlT3JFcXVhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QmVsb3c6CisgICAgICAg
IG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93T3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvd09yRXF1YWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuOgor
ICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWw6CisgICAgICAgIG91dC5wcmlu
dCgiR3JlYXRlclRoYW5PckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3Jv
QXNzZW1ibGVyOjpMZXNzVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzVGhhbiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsOgor
ICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuT3JFcXVhbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9u
IGNvbmQpCit7CisgICAgc3dpdGNoIChjb25kKSB7CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3c6CisgICAgICAgIG91dC5wcmludCgiT3ZlcmZsb3ciKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZDoKKyAgICAgICAgb3V0LnByaW50KCJT
aWduZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OlBvc2l0
aXZlT3JaZXJvOgorICAgICAgICBvdXQucHJpbnQoIlBvc2l0aXZlT3JaZXJvIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpaZXJvOgorICAgICAgICBvdXQucHJp
bnQoIlplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm86CisgICAgICAgIG91dC5wcmludCgiTm9uWmVybyIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MTkxNTA3KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk2LDggKzE1OTYsMTkgQEAgcHVibGljOgogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCiAjZWxzZSAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCituYW1lc3BhY2UgSlNDIHsKKwogLy8g
SWYgdGhlcmUgaXMgbm8gYXNzZW1ibGVyIGZvciB0aGlzIHBsYXRmb3JtLCBhdCBsZWFzdCBhbGxv
dyBjb2RlIHRvIG1ha2UgcmVmZXJlbmNlcyB0bwogLy8gc29tZSBvZiB0aGUgdGhpbmdzIGl0IHdv
dWxkIG90aGVyd2lzZSBkZWZpbmUsIGFsYmVpdCB3aXRob3V0IGdpdmluZyB0aGF0IGNvZGUgYW55
IHdheQogLy8gb2YgZG9pbmcgYW55dGhpbmcgdXNlZnVsLgpAQCAtMTYxMSw2ICsxNjIyLDggQEAg
cHVibGljOgogICAgIGVudW0gRlBSZWdpc3RlcklEIHsgTm9GUFJlZ2lzdGVyIH07CiB9OwogCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKICNlbmRp
ZiAvLyBNYWNyb0Fzc2VtYmxlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNB
ZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K21hdGNoZXIgQWRkcmVzc01hdGNoZXIKKworIyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24gQjMg
ZG9pbmcgYWdncmVzc2l2ZSByZWFzc29jaWF0aW9uIGFuZCBjYW5vbmNhbGl6YXRpb24gb2YgaW50
ZWdlciBhZGRzLgorIyBXZSdsbCBuZXZlciBzZWUgQWRkKEFkZCh4LCBjb25zdDEpLCBjb25zdDIp
IGJlY2F1c2UgaXQgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVhc3NvY2lhdGVkIGludG8KKyMg
QWRkKHgsIGNvbnN0MSArIGNvbnN0MikuIEFsc28sIHdlIHdpbGwgbmV2ZXIgc2VlIEFkZChjb25z
dCwgeCksIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBjYW5vbmljYWxpemVkCisjIGl0IHRvIEFkZCh4
LCBjb25zdCkuIFRoYXQgc2FpZCwgaW4gdGhpcyBjb2RlIHdlIG5ldmVyIG1ha2UgYXNzZXJ0aW9u
cyBhYm91dCB0aGVzZSBvcHRpbWl6YXRpb25zCisjIGhhdmluZyBiZWVuIHBlcmZvcm1lZC4gQWxz
bywgc2luY2UgdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zIGluIEIzIGhhdmUgYSBidWlsdC1p
biBvZmZzZXQsIHdlCisjIGRvbid0IG5lZWQgdG8gbWF0Y2ggQWRkKHgsIGNvbnN0KS4gVGhhdCB3
b3VsZCBoYXZlIGJlZW4gZm9sZGVkIGludG8gdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zCisj
IGFscmVhZHkuIFNvLCB0aGUgb25seSBmYW5jeSBtYXRoaW5nIHRoaXMgY2FuIGRvIGlzIGp1c3Qg
QmFzZUluZGV4IGZvcm1zLgorCitBZGRTaGlmdDEgPSBBZGQoU2hsKGluZGV4LCAkbG9nU2NhbGUp
LCBiYXNlKQorQWRkU2hpZnQyID0gQWRkKGJhc2UsIFNobChpbmRleCwgJGxvZ1NjYWxlKSkKKwor
QWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1Zh
bHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQXJndW1lbnRSZWdWYWx1ZTo6fkFyZ3VtZW50UmVnVmFsdWUoKQoreworfQorCit2
b2lkIEFyZ3VtZW50UmVnVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KG1fcmVnKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAi
UmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBBcmd1bWVu
dFJlZ1ZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBBcmd1bWVudFJlZzsgfQorICAg
IAorICAgIH5Bcmd1bWVudFJlZ1ZhbHVlKCk7CisKKyAgICBSZWcgYXJndW1lbnRSZWcoKSBjb25z
dCB7IHJldHVybiBtX3JlZzsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQ
cm9jZWR1cmU7CisKKyAgICBBcmd1bWVudFJlZ1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBBcmd1bWVudFJlZywgcmVn
LmlzR1BSKCkgPyBwb2ludGVyKCkgOiBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3JlZyhy
ZWcpCisgICAgeworICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkpOworICAgIH0KKworICAgIFJl
ZyBtX3JlZzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
b25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOworCitCYXNpY0Js
b2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDog
bV9pbmRleChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworQmFz
aWNCbG9jazo6fkJhc2ljQmxvY2soKQoreworfQorCit2b2lkIEJhc2ljQmxvY2s6OmFwcGVuZChW
YWx1ZSogdmFsdWUpCit7CisgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKK30KKworYm9vbCBC
YXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1
cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2Nr
OjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6
OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpy
ZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7Cisg
ICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOworfQorCit2
b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMs
ICI6IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOworICAgIGZvciAoVmFsdWUq
IHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIEIzOjpkZWVwRHVtcCh2
YWx1ZSksICJcbiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Js
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
ay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9j
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrCisjZGVmaW5l
IEIzQmFzaWNCbG9jaworCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVl
bnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAg
IHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisgICAgdHlw
ZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlzIG1h
dGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFZhbHVlTGlzdDo6aXRl
cmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0
OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIFZhbHVlTGlz
dDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigp
OyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1
cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVz
Lmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7
IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKFZhbHVlKik7CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBW
YWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAgdW5z
aWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KTsKKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkg
Y29uc3Q7CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpOworCisgICAgQmFzaWNCbG9j
ayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEJhc2ljQmxvY2sq
JiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCk7CisgICAgU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKTsKKyAgICBTdWNj
ZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1
Y2Nlc3NvckJsb2NrcygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkg
Y29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayog
cHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3Jz
W2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgUHJlZGVjZXNzb3JM
aXN0JiBwcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorICAg
IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7
IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVt
b3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVwbGFjZVByZWRlY2Vzc29y
KEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAgIGRvdWJsZSBmcmVxdWVu
Y3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5z
dGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBk
b3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWVMaXN0
IG1fdmFsdWVzOworICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBkb3Vi
bGUgbV9mcmVxdWVuY3k7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGlj
OgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAg
ICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAg
ICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0
LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQmFzaWNCbG9j
ayogbV9ibG9jazsKK307CisKK2lubGluZSBEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoY29u
c3QgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChi
bG9jayk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9jaworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKyNkZWZpbmUgQjNCYXNp
Y0Jsb2NrSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBl
KiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZh
bHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitpbmxpbmUgdW5zaWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vzc29ycygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5udW1TdWNj
ZXNzb3JzKCk7Cit9CisKK2lubGluZSBGcmVxdWVudGVkQmxvY2sgQmFzaWNCbG9jazo6c3VjY2Vz
c29yKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworaW5saW5lIEZyZXF1ZW50ZWRCbG9j
ayYgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBs
YXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworaW5saW5l
IGNvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMo
KSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vz
c29ycygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9j
azo6c3VjY2Vzc29ycygpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigp
LT5zdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2NrKiBCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3VjY2Vzc29y
KGluZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jayomIEJhc2ljQmxvY2s6OnN1
Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBzdWNjZXNzb3IoaW5k
ZXgpLmJsb2NrKCk7Cit9CisKK2lubGluZSBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ss
IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2Nrcygp
Cit7CisgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29y
TGlzdD4oc3VjY2Vzc29ycygpKTsKK30KKworaW5saW5lIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29u
c3QgQmFzaWNCbG9jaywgY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gQmFzaWNCbG9j
azo6c3VjY2Vzc29yQmxvY2tzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVj
dGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PihzdWNjZXNzb3JzKCkp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9ja1V0aWxzX2gKKyNkZWZpbmUgQjNCYXNpY0Js
b2NrVXRpbHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzSW5kZXhTZXQu
aCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCYXNpY0Jsb2NrPgorYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywg
QmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAgYXV0byYgcHJlZGVjZXNzb3JzID0gYmxv
Y2stPnByZWRlY2Vzc29ycygpOworCisgICAgaWYgKHByZWRlY2Vzc29ycy5jb250YWlucyhwcmVk
ZWNlc3NvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHByZWRlY2Vzc29ycy5hcHBl
bmQocHJlZGVjZXNzb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBCYXNpY0Jsb2NrPgorYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywg
QmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAgYXV0byYgcHJlZGVjZXNzb3JzID0gYmxv
Y2stPnByZWRlY2Vzc29ycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNl
c3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBwcmVk
ZWNlc3NvcikgeworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ktLV0gPSBwcmVkZWNlc3NvcnMu
bGFzdCgpOworICAgICAgICAgICAgcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAg
ICAgIEFTU0VSVCghcHJlZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vzc29yKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlcGxhY2VQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7
CisgICAgYXV0byYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBmcm9tKSB7CisgICAgICAgICAgICBwcmVkZWNlc3Nv
cnNbaV0gPSB0bzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQor
ICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyByZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBh
bmQgcmVtb3ZlcyBibG9ja3MgdGhhdCBhcmVuJ3QgcmVhY2hhYmxlLgordGVtcGxhdGU8dHlwZW5h
bWUgQmFzaWNCbG9jaz4KK3ZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykKK3sKKyAgICAvLyBDbGVhciBhbGwgcHJlZGVjZXNz
b3IgbGlzdHMgZmlyc3QuCisgICAgZm9yIChhdXRvJiBibG9jayA6IGJsb2NrcykKKyAgICAgICAg
YmxvY2stPnByZWRlY2Vzc29ycygpLnJlc2l6ZSgwKTsKKworICAgIEdyYXBoTm9kZVdvcmtsaXN0
PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gd29ya2xpc3Q7CisgICAgd29ya2xp
c3QucHVzaChibG9ja3NbMF0uZ2V0KCkpOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9
IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICBpZiAod29ya2xpc3QucHVz
aChzdWNjZXNzb3IpKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzKCku
YXBwZW5kKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9
IDE7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJsb2Nrc1tpXS0+cHJl
ZGVjZXNzb3JzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgYmxvY2tzW2ldID0gbnVsbHB0cjsK
KyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja1V0aWxzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNCbG9ja1dvcmtsaXN0X2gKKyNkZWZpbmUgQjNCbG9ja1dvcmtsaXN0
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNp
bmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNp
Y0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29ya2xpc3Q7CisKKy8vIFdoZW4g
eW91IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ugc2hvdWxkIHJlYWQgaXQgYXMgImJsb2NrIHdpdGgg
YW4gaW50Ii4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEdyYXBoTm9k
ZVdpdGg8QmFzaWNCbG9jayosIFQ+OworCisvLyBFeHRlbmRlZCBibG9jayB3b3JrbGlzdCBpcyB1
c2VmdWwgZm9yIGVucXVldWVpbmcgc29tZSBtZXRhLWRhdGEgYWxvbmcgd2l0aCB0aGUgYmxvY2su
IEl0IGFsc28KKy8vIHBlcm1pdHMgZm9yY2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0
aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJdCdzIHVzZWZ1bCBmb3IKKy8vIHRoaW5n
cyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwgaW4gd2hpY2ggY2FzZSBUICh0aGUgYXV4
aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQorLy8gc3VjY2Vzc29yIGluZGV4LgordGVtcGxh
dGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+OworCit0
eXBlZGVmIEdyYXBoVmlzaXRPcmRlciBWaXNpdE9yZGVyOworCit0eXBlZGVmIEdyYXBoTm9kZVdp
dGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7CisKK3R5cGVkZWYgUG9zdE9yZGVy
R3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBQb3N0
T3JkZXJCbG9ja1dvcmtsaXN0OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jsb2NrV29ya2xpc3RfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNr
U3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIK
KyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3Bh
Y2UgQWlyOworCituYW1lc3BhY2UgeworCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkK
K3sKKyAgICBzd2l0Y2ggKGluc3Qub3JpZ2luLT5vcGNvZGUoKSkgeworICAgIGNhc2UgQ2hlY2tB
ZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAvLyBS
ZXNDb25kLCBUbXAsIFRtcAorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIENoZWNrOgorICAg
ICAgICByZXR1cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCitDaGVja1NwZWNpYWw6OkNoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNv
ZGUsIHVuc2lnbmVkIG51bUFyZ3MpCisgICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKKyAgICAs
IG1fbnVtQ2hlY2tBcmdzKG51bUFyZ3MpCit7Cit9CisKK0NoZWNrU3BlY2lhbDo6fkNoZWNrU3Bl
Y2lhbCgpCit7Cit9CisKK0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5z
dCYgaW5zdCkgY29uc3QKK3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBp
bnN0Lm9yaWdpbik7CisgICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzaXplKG1fbnVtQ2hlY2tBcmdz
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX251bUNoZWNrQXJnczsgaS0tOykKKyAgICAgICAg
aGlkZGVuQnJhbmNoLmFyZ3NbaV0gPSBpbnN0LmFyZ3NbaSArIDFdOworICAgIHJldHVybiBoaWRk
ZW5CcmFuY2g7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3Qs
IGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sK
KyAgICBoaWRkZW5CcmFuY2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7CisgICAgZm9yRWFj
aEFyZ0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGNhbGxi
YWNrKTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAg
ICByZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmlzVmFsaWRGb3JtKCkKKyAgICAgICAgJiYgaXNW
YWxpZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOworfQor
Citib29sIENoZWNrU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJn
SW5kZXgpCit7CisgICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9udW1D
aGVja0FyZ3MpCisgICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3RhY2so
YXJnSW5kZXggLSAxKTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhpbnN0
KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVy
czo6SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYg
aml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZmFpbCA9IGhpZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAg
IEFTU0VSVChmYWlsLmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47
CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZhbHVl
LT5vcGNvZGUoKSkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCkK
KyAgICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlmICh2
YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkK
KyAgICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBp
bnN0LmFyZ3NbM10pKTsKKyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNv
ZGUsIGluc3QuYXJnc1syXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3Rh
bnQoMSkpOworICAgIH0KKworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tB
cmdzICsgMSwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5k
KAorICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1
bmN0aW9uPigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25D
b250ZXh0JikgeworICAgICAgICAgICAgICAgIGZhaWwubGluaygmaml0KTsKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2tt
YXAoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgICAgICAgICAg
ICAgU3RhY2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICAgIHBh
cmFtcy52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFja21hcCA9IHN0
YWNrbWFwOworICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICAgICAgICAg
ICAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisK
KyAgICAgICAgICAgICAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7
CisgICAgICAgICAgICB9KSk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7IC8v
IEFzIGZhciBhcyBBaXIgdGhpbmtzLCB3ZSBhcmUgbm90IGEgdGVybWluYWwuCit9CisKK3ZvaWQg
Q2hlY2tTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChtX2NoZWNrT3Bjb2RlLCAiKCIsIG1fbnVtQ2hlY2tBcmdzLCAiKSIpOworfQorCit2
b2lkIENoZWNrU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNv
ZGUsICIgd2l0aCAiLCBtX251bUNoZWNrQXJncywgIiBhcmdzLiIpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0NoZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJC
M1N0YWNrbWFwU3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Ly8gV2Ugd2FudCB0byBsb3dlciBDaGVjayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0
aGVuIHdlIHdhbnQgdG8gcm91dGUgdGhhdCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBj
b2RlIGluc3RlYWQgb2YgZG9pbmcgYW55dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENo
ZWNrU3BlY2lhbCB3aWxsIHJlbWVtYmVyCisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUg
c2VsZWN0ZWQgYWxvbmcgd2l0aCB0aGUgbnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdl
IHdhbnQuIEl0CisvLyB3aWxsIGNyZWF0ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0
aGUgYXBwcm9wcmlhdGUgYXJncyBmcm9tIHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8v
IGNhbGwgYW55IG9mIHRoZSBjYWxsYmFja3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0Fk
ZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRz
IGFyZSB0aGUgcmV2ZXJzZQorLy8gb2YgdGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBB
ZGQzMiBiLCBhKS4gRXhjZXB0OgorLy8gLSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50
byBCcmFuY2hOZWczMiB4LgorLy8gLSBDaGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBN
dWwzMiBiLCBhIGJ1dCB3ZSBwYXNzIEFueSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVj
a1NwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1Nw
ZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tT
cGVjaWFsKCk7CisKKyAgICAvLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJl
c2VudGluZyB0aGUgYnJhbmNoIHRoYXQgdGhpcyB3aWxsIHVzZS4KKyAgICBBaXI6Okluc3QgaGlk
ZGVuQnJhbmNoKGNvbnN0IEFpcjo6SW5zdCYpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVh
Y2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikg
b3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJ
bmRleCkgb3ZlcnJpZGU7CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwg
Z2VuZXJhdGUgdGhlIGhpZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0
aGF0CisgICAgLy8gZ2VuZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKwor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMm
LCBBaXI6OkdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBs
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJp
bnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBt
X2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNDaGVja1NwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
aGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
aGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NoZWNrVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NoZWNrVmFsdWU6On5DaGVja1ZhbHVlKCkK
K3sKK30KKwordm9pZCBDaGVja1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgic3RhY2ttYXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzQ2hlY2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2tt
YXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrVmFs
dWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bj
b2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNh
c2UgQ2hlY2tBZGQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tN
dWw6CisgICAgICAgIGNhc2UgQ2hlY2s6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIH5DaGVja1ZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMg
Zm9ybSBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxl
ZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50
eXBlKCksIG9yaWdpbiwgbGVmdCwgcmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQo
dHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7
CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3Vi
IHx8IG9wY29kZSA9PSBDaGVja011bCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBm
b3IgQ2hlY2suCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwg
b3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChv
cGNkZSA9PSBDaGVjayk7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gKKwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRlRMU3Rh
dGUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitib29sIHNob3VsZER1bXBJUigpCit7CisgICAgcmV0dXJuIEZUTDo6dmVyYm9zZUNv
bXBpbGF0aW9uRW5hYmxlZCgpIHx8IEZUTDo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgc2hv
dWxkRHVtcElSQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFz
ZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNlKCk7Cit9CisK
K2Jvb2wgc2hvdWxkVmFsaWRhdGVJUigpCit7CisgICAgcmV0dXJuIERGRzo6dmFsaWRhdGlvbkVu
YWJsZWQoKSB8fCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91
bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2YWxpZGF0
ZUdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgp
Cit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSgpOworfQor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQ29tbW9uX2gKKyNkZWZpbmUgQjNDb21tb25faAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2lubGluZSBib29sIGlzNjRC
aXQoKSB7IHJldHVybiBzaXplb2Yodm9pZCopID09IDg7IH0KK2lubGluZSBib29sIGlzMzJCaXQo
KSB7IHJldHVybiAhaXM2NEJpdCgpOyB9CisKK2Jvb2wgc2hvdWxkRHVtcElSKCk7Citib29sIHNo
b3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVIoKTsKK2Jvb2wg
c2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFNhdmVJUkJlZm9yZVBo
YXNlKCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW11dGF0aXZpdHkuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5KQoreworICAg
IHN3aXRjaCAoY29tbXV0YXRpdml0eSkgeworICAgIGNhc2UgQ29tbXV0YXRpdmU6CisgICAgICAg
IG91dC5wcmludCgiQ29tbXV0YXRpdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTm90
Q29tbXV0YXRpdmU6CisgICAgICAgIG91dC5wcmludCgiTm90Q29tbXV0YXRpdmUiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW11dGF0aXZpdHlfaAorI2RlZmluZSBCM0NvbW11dGF0
aXZpdHlfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2VudW0gQ29tbXV0YXRpdml0eSB7CisgICAgQ29tbXV0YXRpdmUsCisgICAgTm90
Q29tbXV0YXRpdmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkIzOjpDb21tdXRhdGl2aXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb21tdXRhdGl2aXR5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVy
bnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1h
dGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4
IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIENvbXBh
cmlzb25NYXRjaGVyCisKK1Rlc3RMb2FkTm90WmVybzEgPSBBbmQoTG9hZChhZGRyZXNzKSwgcmln
aHQpCitUZXN0TG9hZE5vdFplcm8yID0gQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpCitUZXN0Tm90
WmVybyA9IEFuZChsZWZ0LCByaWdodCkKKworVGVzdExvYWRaZXJvMSA9IEVxdWFsKEFuZChMb2Fk
KGFkZHJlc3MpLCByaWdodCksICQwKQorVGVzdExvYWRaZXJvMiA9IEVxdWFsKEFuZChsZWZ0LCBM
b2FkKGFkZHJlc3MpKSwgJDApCitUZXN0WmVybyA9IEVxdWFsKEFuZChsZWZ0LCByaWdodCksICQw
KQorCitMb2FkRXF1YWwxID0gRXF1YWwoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitMb2FkRXF1YWwy
ID0gRXF1YWwobGVmdCwgTG9hZChhZGRyZXNzKSkKK05vdCA9IEVxdWFsKHZhbHVlLCAkMCkKK0Vx
dWFsID0gRXF1YWwobGVmdCwgcmlnaHQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDMyVmFsdWU6
On5Db25zdDMyVmFsdWUoKQoreworfQorCit2b2lkIENvbnN0MzJWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3QzMlZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDMyVmFs
dWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENv
bnN0MzJWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQ29uc3QzMjsgfQorICAgIAor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db25zdDMyVmFsdWUoKTsKKyAgICAKKyAgICBpbnQzMl90
IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDMy
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIENvbnN0MzIsIEludDMyLCBvcmlnaW4pCisgICAgICAgICwgbV92
YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDMyX3QgbV92YWx1ZTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0NjRW
YWx1ZTo6fkNvbnN0NjRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0
YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0
NjRWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3Q2NFZhbHVlIDog
cHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBv
cGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdDY0OyB9CisgICAgCisgICAgfkNvbnN0NjRW
YWx1ZSgpOworICAgIAorICAgIGludDY0X3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IENvbnN0NjRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1
ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAg
ICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50NjRfdCBtX3Zh
bHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25zdDY0VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3RE
b3VibGVWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sK
K30KKwordm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0RG91YmxlVmFsdWVfaAorI2RlZmluZSBCM0Nv
bnN0RG91YmxlVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91
YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAg
CisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3Vi
bGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3REb3Vi
bGVWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZh
bHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRy
b2xWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgp
Cit7Cit9CisKK3ZvaWQgQ29udHJvbFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChsaXN0RHVtcChtX3N1Y2Nlc3NvcnMpKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzQ29udHJvbFZhbHVlX2gKKyNkZWZpbmUgQjNDb250cm9sVmFs
dWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2Nr
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQmFzaWNCbG9jazsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29udHJv
bFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAg
ICBjYXNlIEp1bXA6CisgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIFJldHVybjoK
KyAgICAgICAgY2FzZSBPb3BzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgU3dpdGNoOiAKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZh
bHVlIGlzIGEgc3ViY2xhc3Mgb2YgQ29udHJvbFZhbHVlLCBzbyB3ZSB3YW50CisgICAgICAgICAg
ICAvLyBzd2l0Y2hWYWx1ZS0+YXM8Q29udHJvbFZhbHVlPigpIHRvIHJldHVybiBub24tbnVsbC4K
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8RnJl
cXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
fkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsg
cmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vz
c29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9
CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisgICAgU3VjY2Vzc29yTGlzdCYg
c3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1l
bnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUg
dGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAg
Q29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2lu
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMg
Zm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCisgICAgeworICAgICAgICBBU1NFUlQob3Bj
b2RlID09IFJldHVybik7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAg
Q29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2lu
LCBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRhcmdldCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwg
b3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEp1
bXApOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHRhcmdldCk7CisgICAgfQorCisgICAg
Ly8gVXNlIHRoaXMgZm9yIEJyYW5jaC4KKyAgICBDb250cm9sVmFsdWUoCisgICAgICAgIHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRl
LAorICAgICAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHllcywgY29uc3QgRnJlcXVlbnRlZEJs
b2NrJiBubykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHBy
ZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAg
ICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5k
KG5vKTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnRyb2xWYWx1ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNGcmVx
dWVuY3lDbGFzcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGcmVxdWVuY3lDbGFzcyBm
cmVxdWVuY3kpCit7CisgICAgc3dpdGNoIChmcmVxdWVuY3kpIHsKKyAgICBjYXNlIEZyZXF1ZW5j
eUNsYXNzOjpOb3JtYWw6CisgICAgICAgIG91dC5wcmludCgiTm9ybWFsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEZyZXF1ZW5jeUNsYXNzOjpSYXJlOgorICAgICAgICBvdXQucHJpbnQo
IlJhcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xh
c3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5j
eUNsYXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbmN5Q2xhc3Nf
aAorI2RlZmluZSBCM0ZyZXF1ZW5jeUNsYXNzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIGNsYXNzIEZyZXF1ZW5jeUNsYXNz
IDogdWludDhfdCB7CisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgaHlwb3RoZXNpcyBhYm91dCB0
aGUgZnJlcXVlbmN5IG9mIHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVjdC4gVGhpcyBpcworICAg
IC8vIHRoZSBjb21tb24gY2FzZS4gV2UgY2FuIHN0aWxsIHVzZSBiYXNpYyBibG9jayBmcmVxdWVu
Y3kgaW4gdGhpcyBjYXNlLgorICAgIE5vcm1hbCwKKworICAgIC8vIFdlIGV4cGVjdCB0aGF0IHRo
aXMgY29udHJvbCBmbG93IGNvbnN0cnVjdCB3aWxsIGJlIHJlYWNoZWQgc3VwZXIgcmFyZWx5LiBJ
dCdzIHZhbGlkIHRvCisgICAgLy8gcGVyZm9ybSBvcHRpbWl6YXRpb25zIHRoYXQgcHVuaXNoIFJh
cmUgY29kZS4gTm90ZSB0aGF0IHRoZXJlIHdpbGwgYmUgc2l0dWF0aW9ucyB3aGVyZSB5b3UKKyAg
ICAvLyBoYXZlIHRvIHNvbWVob3cgY29uc3RydWN0IGEgbmV3IGZyZXF1ZW5jeSBjbGFzcyBmcm9t
IGEgbWVyZ2luZyBvZiBtdWx0aXBsZSBjbGFzc2VzLiBXaGVuCisgICAgLy8gdGhpcyBoYXBwZW5z
LCBuZXZlciBjaG9vc2UgUmFyZTsgYWx3YXlzIGdvIHdpdGggTm9ybWFsLiBUaGlzIGlzIG5lY2Vz
c2FyeSBiZWNhdXNlIHdlCisgICAgLy8gcmVhbGx5IGRvIHB1bmlzaCBSYXJlIGNvZGUgdmVyeSBi
YWRseS4KKyAgICBSYXJlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpGcmVxdWVuY3lDbGFzcyk7CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzRnJlcXVlbmN5Q2xh
c3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVudGVkQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVudGVkQmxv
Y2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50
ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0ZyZXF1ZW50ZWRCbG9j
a19oCisjZGVmaW5lIEIzRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR2VuZXJpY0Zy
ZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVkQmxvY2s7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
RnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2Vu
ZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVy
YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVy
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM0dlbmVyYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
Q29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGlu
ZXMuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgor
I2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHBy
b2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgQWlyOjpDb2RlIGNvZGU7CisgICAg
Z2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworICAgIEFpcjo6Z2VuZXJhdGUoY29kZSwg
aml0KTsKK30KKwordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBaXI6
OkNvZGUmIGNvZGUpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFs
aWRhdGUocHJvY2VkdXJlLCAiaW5pdGlhbCIpOworCisgICAgaWYgKHNob3VsZER1bXBJUigpKSB7
CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgQjM6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9j
ZWR1cmUpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhl
cmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUw
NworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUocHJvY2Vk
dXJlLCAiZmluYWwiKTsKKyAgICAKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAg
ZGF0YUxvZygiQjMgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9j
ZWR1cmUpOworICAgIH0KKworICAgIGxvd2VyVG9BaXIocHJvY2VkdXJlLCBjb2RlKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0dlbmVyYXRlX2gKKyNkZWZpbmUgQjNHZW5lcmF0ZV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworCitu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CituYW1lc3BhY2UgQWlyIHsgY2xhc3Mg
Q29kZTsgfQorCisvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0aW1pemVzIGl0IGlu
LXBsYWNlLCBhbmQgZ2VuZXJhdGVzIGl0IHRvIG1hY2hpbmUgY29kZSBieSBmaXJzdAorLy8gaW50
ZXJuYWxseSBjb252ZXJ0aW5nIHRvIGFuIEFpcjo6Q29kZSBhbmQgdGhlbiBnZW5lcmF0aW5nIHRo
YXQuCitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYsIENDYWxsSGVs
cGVycyYpOworCisvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0aW1pemVzIGl0IGlu
LXBsYWNlLCBhbmQgbG93ZXJzIGl0IHRvIEFpci4gWW91IGNhbiB0aGVuIGdlbmVyYXRlCisvLyB0
aGUgQWlyIHRvIG1hY2hpbmUgY29kZSB1c2luZyBBaXI6OmdlbmVyYXRlKCkuIE5vdGUgdGhhdCBh
biBBaXI6OkNvZGUgd2lsbCBoYXZlIHBvaW50ZXJzIGludG8gdGhlCisvLyBCMzo6UHJvY2VkdXJl
LCBzbyB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQjM6OlByb2NlZHVyZSBvdXRsaXZlcyB0
aGUgQWlyOjpDb2RlLgordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYsIEFpcjo6Q29kZSYp
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM0dlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKyNk
ZWZpbmUgQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBBIGZyZXF1ZW50ZWQg
YmxvY2sgaXMgYSB0dXBsZSBvZiBCYXNpY0Jsb2NrKiBhbmQgRnJlcXVlbmN5Q2xhc3MuIEl0J3Mg
dXN1YWxseSB1c2VkIGFzIGEKKy8vIHN1Y2Nlc3NvciBlZGdlLgorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBCYXNpY0Jsb2NrPgorY2xhc3MgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jaygKKyAgICAgICAgQmFzaWNCbG9jayog
YmxvY2sgPSBudWxscHRyLCBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3kgPSBGcmVxdWVuY3lDbGFz
czo6Tm9ybWFsKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAgICwgbV9mcmVxdWVu
Y3koZnJlcXVlbmN5KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9ibG9jayA9PSBvdGhlci5tX2Jsb2NrCisgICAgICAgICAgICAmJiBtX2ZyZXF1ZW5jeSA9
PSBvdGhlci5tX2ZyZXF1ZW5jeTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jaygpOworICAgIH0KKworICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1
cm4gbV9ibG9jazsgfQorICAgIEJhc2ljQmxvY2sqJiBibG9jaygpIHsgcmV0dXJuIG1fYmxvY2s7
IH0KKyAgICBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1
ZW5jeTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAoZnJlcXVlbmN5KCkgIT0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAg
ICAgICAgIG91dC5wcmludChmcmVxdWVuY3koKSwgIjoiKTsKKyAgICAgICAgb3V0LnByaW50KHBv
aW50ZXJEdW1wKG1fYmxvY2spKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayog
bV9ibG9jazsKKyAgICBGcmVxdWVuY3lDbGFzcyBtX2ZyZXF1ZW5jeTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5kZXhNYXBfaAor
I2RlZmluZSBCM0luZGV4TWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlz
IGlzIGEgbWFwIGZvciBrZXlzIHRoYXQgaGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmlj
aWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMg
aWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVzZSBtYXBzLCBzaW5jZSBWYWx1ZXMg
Y2FuIGhhdmUgdmVyeQorLy8gc3BhcnNlIGluZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBW
YWx1ZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFsdWU+CitjbGFzcyBJ
bmRleE1hcCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW5kZXhNYXAoc2l6ZV90IHNpemUgPSAw
KQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IucmVzaXplKHNpemUpOworICAgIH0KKworICAgIHZv
aWQgcmVzaXplKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IucmVzaXplKHNp
emUpOworICAgIH0KKworICAgIFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgfQorICAgIAorICAgIGNv
bnN0IFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBW
ZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNJbmRleE1hcF9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8
d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0
aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tz
LiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUg
dG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNl
CisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ug
d2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBT
bywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQg
eworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhZGQo
VCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgo
KSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25z
dCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oY29sbGVjdGlvbikK
KyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9y
KCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBDb2xsZWN0aW9u
VHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yIGl0
ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAg
ICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pdGVyID09
IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlKiBtX2NvbGxlY3Rp
b247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgbV9p
dGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQorICAgICAgICBpdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmVu
ZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUmIG1f
Y29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0OworICAgIH07CisKKyAg
ICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHBy
b2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86CisgICAgLy8gaW5k
ZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+IHZhbHVlcyhjb25z
dCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAgfQorCisgICAgY29u
c3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7IH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgQ29tbWFQcmlu
dGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGljZXMoKS5zZXRCaXRz
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVmaXgsIGluZGV4KTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ5NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpcklu
c3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNBZGRyZXNzTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIz
QmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbW11dGF0aXZpdHkuaCIKKyNpbmNs
dWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgIkIz
TG93ZXJpbmdNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNV
c2VDb3VudHMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsK
KworY2xhc3MgTG93ZXJUb0FpciB7CitwdWJsaWM6CisgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUm
IHByb2NlZHVyZSwgQ29kZSYgY29kZSkKKyAgICAgICAgOiB2YWx1ZVRvVG1wKHByb2NlZHVyZS52
YWx1ZXMoKS5zaXplKCkpCisgICAgICAgICwgYmxvY2tUb0Jsb2NrKHByb2NlZHVyZS5zaXplKCkp
CisgICAgICAgICwgdXNlQ291bnRzKHByb2NlZHVyZSkKKyAgICAgICAgLCBhZGRyZXNzU2VsZWN0
b3IoKnRoaXMpCisgICAgICAgICwgbG93ZXJpbmdTZWxlY3RvcigqdGhpcykKKyAgICAgICAgLCBw
cm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICAsIGNvZGUoY29kZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxv
Y2sgOiBwcm9jZWR1cmUpCisgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdID0gY29kZS5h
ZGRCbG9jayhibG9jay0+ZnJlcXVlbmN5KCkpOworCisgICAgICAgIC8vIExvd2VyIGRlZnMgYmVm
b3JlIHVzZXMgb24gYSBnbG9iYWwgbGV2ZWwuIFRoaXMgaXMgYSBnb29kIGhldXJpc3RpYyB0byBs
b2NrIGRvd24gYQorICAgICAgICAvLyBob2lzdGVkIGFkZHJlc3MgZXhwcmVzc2lvbiBiZWZvcmUg
d2UgZHVwbGljYXRlIGl0IGJhY2sgaW50byB0aGUgbG9vcC4KKyAgICAgICAgZm9yIChCMzo6QmFz
aWNCbG9jayogYmxvY2sgOiBwcm9jZWR1cmUuYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAg
ICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgorICAgICAgICAgICAgaW5zdHMucmVzaXplKDApOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiByZXZlcnNlIG9y
ZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxvd3MgdXMKKyAg
ICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgorICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAg
IGluc3RzLmFwcGVuZChWZWN0b3I8SW5zdD4oKSk7CisgICAgICAgICAgICAgICAgY3VycmVudFZh
bHVlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAgIHJ1bkxvd2VyaW5nTWF0Y2hlcihj
dXJyZW50VmFsdWUsIGxvd2VyaW5nU2VsZWN0b3IpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIGluc3RzIGNvbnRhaW5zIHRoZW0g
aW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcworICAgICAgICAgICAgLy8gaXQgaW4gcmV2
ZXJzZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluc3RzLnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IGluc3RzW2ldKQorICAgICAgICAg
ICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJbnN0KFdURjo6bW92ZShpbnN0
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBz
dWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgorICAgICAgICAgICAgQVNTRVJUKGJsb2Nr
LT5zdWNjZXNzb3JzKCkgPD0gMik7CisgICAgICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBz
dWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgYmxv
Y2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZChibG9ja1RvQmxvY2tbc3VjY2Vz
c29yXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUbXAgdG1wKFZhbHVlKiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIFRtcCYgdG1wID0gdmFsdWVUb1RtcFt2YWx1ZV07CisgICAgICAgIGlmICgh
dG1wKQorICAgICAgICAgICAgdG1wID0gY29kZS5uZXdUbXAoaXNJbnQodmFsdWUtPnR5cGUoKSkg
PyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgICAgIHJldHVybiB0bXA7CisgICAgfQorCisgICAg
Ly8gVGhpcyBnaXZlcyB5b3UgdGhlIGFkZHJlc3Mgb2YgdGhlIGdpdmVuIExvYWQgb3IgU3RvcmUu
IElmIGl0J3Mgbm90IGEgTG9hZCBvciBTdG9yZSwgdGhlbgorICAgIC8vIGl0IHJldHVybnMgQXJn
KCkuCisgICAgQXJnIGFkZHIoVmFsdWUqIG1lbW9yeVZhbHVlKQorICAgIHsKKyAgICAgICAgTWVt
b3J5VmFsdWUqIHZhbHVlID0gbWVtb3J5VmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAg
ICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworCisgICAgICAgIHJ1bkFk
ZHJlc3NNYXRjaGVyKHZhbHVlLT5jaGlsZHJlbigpLmxhc3QoKSwgYWRkcmVzc1NlbGVjdG9yKTsK
KyAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFkZHJlc3Mud2l0aE9mZnNl
dCh2YWx1ZS0+b2Zmc2V0KCkpOworICAgIH0KKworICAgIEFyZyBsb2FkQWRkcihWYWx1ZSogbG9h
ZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+b3Bjb2RlKCkgPT0gTG9hZCkK
KyAgICAgICAgICAgIHJldHVybiBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIHJldHVybiBBcmco
KTsKKyAgICB9CisKKyAgICBBcmcgaW1tKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmltbSh2YWx1ZS0+
YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW1P
clRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoQXJnIHJlc3VsdCA9IGltbSh2
YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gdG1wKHZh
bHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUsIENvbW11dGF0
aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAgIHZvaWQgYXBwZW5kQmlu
T3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQg
PSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRocmVlLW9wZXJhbmQg
Zm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIsIGMKKyAgICAgICAgLy8gbWVhbiBz
b21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGMgPSBhIE9wIGIKKworICAgICAgICBpZiAo
aXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAg
ICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2Rl
LCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9wZXJhdGlvbiBjb3VsZCBoYXZlIGFuIGltbWVk
aWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAgIGlmIChpbW0obGVmdCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKGxlZnQpLCB0bXAocmlnaHQpLCByZXN1bHQp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGltbShyaWdodCkgJiYgaXNWYWxpZEZv
cm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgeworICAgICAgICAgICAg
YXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0ocmlnaHQpLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHdvLW9wZXJhbmQgZm9ybXMgbGlr
ZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlr
ZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEKKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50
LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGhhdmUgYSBmdXNlZCBs
b2FkIG92ZXIgdGhyZWUKKyAgICAgICAgLy8gb3BlcmFuZCBmb3Jtcy4KKyAgICAgICAgCisgICAg
ICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAgICAgICAgICBBcmcg
bGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAgICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShv
cGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICAgICAgYXBw
ZW5kKE1vdmUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9w
Y29kZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQXJnIHJpZ2h0QWRkciA9IGxvYWRBZGRyKHJp
Z2h0KTsKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgcmlnaHRBZGRyLmtpbmQoKSwg
QXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQp
OworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLCByZXN1bHQpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29k
ZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChv
cGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3VsdCk7
CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgfQorCisg
ICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZp
dHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICBib29sIHRyeUFwcGVuZFN0b3JlQmluT3AoVmFsdWUq
IGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRy
KGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOworCisgICAgICAgIFZh
bHVlKiBvdGhlclZhbHVlOworICAgICAgICBpZiAoYWRkcihsZWZ0KSA9PSBzdG9yZUFkZHIpCisg
ICAgICAgICAgICBvdGhlclZhbHVlID0gcmlnaHQ7CisgICAgICAgIGVsc2UgaWYgKGNvbW11dGF0
aXZpdHkgPT0gQ29tbXV0YXRpdmUgJiYgYWRkcihyaWdodCkgPT0gc3RvcmVBZGRyKQorICAgICAg
ICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIHN0
b3JlQWRkci5raW5kKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGFw
cGVuZChvcGNvZGUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IHZvaWQgYXBwZW5kKEFpcjo6T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRz
KQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9wY29kZSwgY3VycmVu
dFZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQor
ICAgIAorICAgIEluZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhh
dCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiB2YWx1
ZVRvVG1wOworICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBi
bG9ja1RvQmxvY2s7CisKKyAgICBVc2VDb3VudHMgdXNlQ291bnRzOworCisgICAgVmVjdG9yPFZl
Y3RvcjxJbnN0LCA0Pj4gaW5zdHM7CisKKyAgICBWYWx1ZSogY3VycmVudFZhbHVlOworCisgICAg
Ly8gVGhlIGFkZHJlc3Mgc2VsZWN0b3Igd2lsbCBtYXRjaCBhbnkgcGF0dGVybiB3aGVyZSB0aGUg
aW5wdXQgb3BlcmFuZHMgYXJlIGF2YWlsYWJsZSBhcyBUbXBzLgorICAgIC8vIEl0IGRvZXNuJ3Qg
Y2FyZSBhYm91dCBzaGFyaW5nLiBJdCB3aWxsIGhhcHBpbHkgZW1pdCB0aGUgc2FtZSBhZGRyZXNz
IGV4cHJlc3Npb24gb3ZlciBhbmQgb3ZlcgorICAgIC8vIGFnYWluIHJlZ2FyZGxlc3Mgb2YgdGhl
IGV4cHJlc3Npb24ncyBjb21wbGV4aXR5LiBUaGlzIHdvcmtzIG91dCBmaW5lLCBzaW5jZSBhdCB0
aGUgbWFjaGluZQorICAgIC8vIGxldmVsLCBhZGRyZXNzIGV4cHJlc3Npb25zIGFyZSBzdXBlciBj
aGVhcC4gSG93ZXZlciwgdGhpcyBkb2VzIGhhdmUgYSBoYWNrIHRvIGF2b2lkCisgICAgLy8gInVu
aG9pc3RpbmciIGFkZHJlc3MgZXhwcmVzc2lvbnMuCisgICAgY2xhc3MgQWRkcmVzc1NlbGVjdG9y
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFkZHJlc3NTZWxlY3RvcihMb3dlclRvQWlyJiBsb3dl
cikKKyAgICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAgICAgICAg
ICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBtYXRjaCBhbiBhZGRyZXNzIGV4cHJlc3Npb24gdGhhdCBo
YXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkCisgICAgICAgICAgICAvLyBleHBsaWNpdGx5LgorICAg
ICAgICAgICAgcmV0dXJuICFsb3dlci52YWx1ZVRvVG1wW3Jvb3RdOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBhY2NlcHRSb290TGF0ZShWYWx1ZSopIHsgfQorCisgICAgICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoVmFs
dWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAobG93ZXIudmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhhcmd1bWVudHMuLi4pOwor
ICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9p
ZCBhY2NlcHRJbnRlcm5hbHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAgICAgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZh
bHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4u
Lik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygpIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAg
IHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAgICAgICAgYm9v
bCB0cnlBZGRTaGlmdDEoVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUsIFZhbHVlKiBiYXNl
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG9nU2NhbGUtPmFzSW50KCkgPCAwIHx8IGxv
Z1NjYWxlLT5hc0ludCgpID4gMykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KAorICAgICAgICAgICAgICAgIGxv
d2VyLnRtcChiYXNlKSwgbG93ZXIudG1wKGluZGV4KSwgMSA8PCBsb2dTY2FsZS0+YXNJbnQoKSk7
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5
QWRkU2hpZnQyKFZhbHVlKiBiYXNlLCBWYWx1ZSogaW5kZXgsIFZhbHVlKiBsb2dTY2FsZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRyeUFkZFNoaWZ0MShpbmRleCwgbG9nU2NhbGUs
IGJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGQoVmFsdWUqIGxlZnQsIFZh
bHVlKiByaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJpZ2h0LT5oYXNJbnQzMigp
KSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9kdWN0aW9uIGlzbid0IHN0cmljdGx5IG5l
Y2Vzc2FyeSBzaW5jZSB3ZSBleHBlY3QKKyAgICAgICAgICAgICAgICAvLyBMb2FkKEFkZChAeCwg
QGNvbnN0MSksIG9mZnNldCA9IGNvbnN0MikgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gc3RyZW5ndGgt
cmVkdWNlZAorICAgICAgICAgICAgICAgIC8vIHRvIExvYWQoQHgsIG9mZnNldCA9IGNvbnN0MSAr
IGNvbnN0MikuCisgICAgICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGxv
d2VyLnRtcChsZWZ0KSwgcmlnaHQtPmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFy
Zzo6aW5kZXgobG93ZXIudG1wKGxlZnQpLCBsb3dlci50bXAocmlnaHQpKTsKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlEaXJlY3QoKQorICAg
ICAgICB7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIobG93ZXIudG1w
KGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxvd2VyOworICAgICAgICBBcmcgc2Vs
ZWN0ZWRBZGRyZXNzOworICAgIH07CisgICAgQWRkcmVzc1NlbGVjdG9yIGFkZHJlc3NTZWxlY3Rv
cjsKKworICAgIC8vIFRoaXMgd2lsbCBtYXRjaCBjb21wbGV4IG11bHRpLXZhbHVlIGV4cHJlc3Np
b25zLCBidXQgb25seSBpZiB0aGVyZSBpcyBubyBzaGFyaW5nLiBGb3IgZXhhbXBsZSwKKyAgICAv
LyBpdCB3b24ndCBtYXRjaCBhIExvYWQgdHdpY2UgYW5kIGNhdXNlIHRoZSBnZW5lcmF0ZWQgY29k
ZSB0byBkbyB0d28gbG9hZHMgd2hlbiB0aGUgb3JpZ2luYWwKKyAgICAvLyBjb2RlIGp1c3QgZGlk
IG9uZS4KKyAgICBjbGFzcyBMb3dlcmluZ1NlbGVjdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IExvd2VyaW5nU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIpCisgICAgICAgICAgICA6IGxvd2Vy
KGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGJvb2wgYWNj
ZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUX1VOVVNF
RChyb290LCAhbG93ZXIubG9ja2VkLmNvbnRhaW5zKHJvb3QpKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290TGF0ZShWYWx1ZSop
IHsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgICAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIG9uZSBvZiB0aGUgaW50ZXJu
YWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0
byBjYXVzZQorICAgICAgICAgICAgLy8gaXQgdG8gYmUgcmVjb21wdXRlZCBhZ2Fpbi4KKyAgICAg
ICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHJlcXVpcmUgaW50ZXJu
YWxzIHRvIGhhdmUgb25seSBvbmUgdXNlIC0gdXMuCisgICAgICAgICAgICBpZiAobG93ZXIudXNl
Q291bnRzW3ZhbHVlXSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhhcmd1bWVudHMuLi4p
OworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkgeyByZXR1cm4gdHJ1
ZTsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dlci5sb2NrZWQuYWRkKHZh
bHVlKTsKKyAgICAgICAgICAgIGFjY2VwdEludGVybmFsc0xhdGUoYXJndW1lbnRzLi4uKTsKKyAg
ICAgICAgfQorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoKSB7IH0KKyAgICAgICAg
CisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBh
Y2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQuY29udGFpbnModmFsdWUpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBhY2NlcHRPcGVy
YW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFu
ZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1bWVudHMuLi4pIHsg
fQorCisgICAgICAgIGJvb2wgdHJ5TG9hZChWYWx1ZSogYWRkcmVzcykKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChsb3dlci5jdXJyZW50VmFsdWUtPnR5cGUoKSkgeworICAgICAgICAg
ICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZTMyLCBsb3dl
ci5hZGRyKGFkZHJlc3MpLCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAg
ICAgICAgIGlmIChpczY0Qml0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5k
KE1vdmUsIGxvd2VyLmFkZHIoYWRkcmVzcyksIGxvd2VyLnRtcChsb3dlci5jdXJyZW50VmFsdWUp
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlOgor
ICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dlci5hZGRyKGFkZHJl
c3MpLCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkKFZh
bHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
bGVmdC0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAg
IGxvd2VyLmFwcGVuZEJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0
cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFsdWUqKQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbG93ZXIudHJ5QXBwZW5kU3RvcmVCaW5P
cDxBZGQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgdHJ5U3RvcmVBbmRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIFZhbHVl
KikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxvd2VyLnRyeUFwcGVu
ZFN0b3JlQmluT3A8QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBl
cyEKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBib29sIHRyeVN0b3JlKFZhbHVlKiB2YWx1ZSwgVmFsdWUqKQorICAgICAg
ICB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgSW50MzI6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUzMiwgbG93ZXIudG1w
KHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICAgICAg
aWYgKGlzNjRCaXQoKSkgeworICAgICAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwg
bG93ZXIudG1wKHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAg
ICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dlci50bXAodmFsdWUpLCBsb3dlci5h
ZGRyKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUNvbnN0MzIoKQorICAgICAg
ICB7CisgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgbG93ZXIuaW1tKGxvd2VyLmN1cnJl
bnRWYWx1ZSksIGxvd2VyLnRtcChsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlSZXR1cm4oVmFsdWUqIHZh
bHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAg
ICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBsb3dlci5pbW1PclRtcCh2YWx1ZSksIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmVEb3VibGUs
IGxvd2VyLnRtcCh2YWx1ZSksIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvd2VyLmFwcGVuZChSZXQpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9B
aXImIGxvd2VyOworICAgIH07CisgICAgTG93ZXJpbmdTZWxlY3RvciBsb3dlcmluZ1NlbGVjdG9y
OworICAgIAorICAgIFByb2NlZHVyZSYgcHJvY2VkdXJlOworICAgIENvZGUmIGNvZGU7Cit9Owor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsb3dlclRvQWlyKFByb2NlZHVyZSYg
cHJvY2VkdXJlLCBDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9j
ZWR1cmUsICJsb3dlclRvQWlyIik7CisgICAgTG93ZXJUb0FpciBsb3dlclRvQWlyKHByb2NlZHVy
ZSwgY29kZSk7CisgICAgbG93ZXJUb0Fpci5ydW4oKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M0xvd2VyVG9BaXJfaAorI2RlZmluZSBCM0xvd2VyVG9BaXJfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsK
K25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgbG93ZXJzIHRoZSBjdXJy
ZW50IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKwordm9pZCBsb3dlclRvQWlyKFByb2Nl
ZHVyZSYsIEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRl
cm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdN
YXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdNYXRjaGVyCisK
KyMgVGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFydGluZyBhdCB0
aGUgdG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1lbnRzIHdoZXJl
dmVyIHBvc3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRoaXMgbWF0Y2hl
ciBpcyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEKKworTG9hZCA9
IExvYWQoYWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitTdG9yZUFkZExvYWQg
PSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmVBbmRMb2FkID0gU3RvcmUo
QWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFsdWUsIGFkZHJlc3Mp
CisKK0NvbnN0MzIgPSBDb25zdDMyKCkKKworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFs
dWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKK3sKK30KKwordm9pZCBNZW1vcnlW
YWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAobV9vZmZz
ZXQpCisgICAgICAgIG91dC5wcmludCgib2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIE1lbW9yeVZhbHVlIDogcHVibGljIFZhbHVl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAg
eworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAg
ICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2Fk
MTZTOgorICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAg
ICBjYXNlIFN0b3JlODoKKyAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3Jl
RmxvYXQ6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIH5NZW1vcnlWYWx1ZSgpOworCisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdCB7
IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQ
cm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4
WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0Cisg
ICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAg
ICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAg
ICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAg
ICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAg
ICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IERvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRo
aXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisgICAg
TWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgb3Bjb2RlID09IExvYWRGbG9hdCA/IERvdWJsZSA6IEludDMyLCBvcmlnaW4s
IHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYg
KCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
ICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAg
ICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAg
Y2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNl
IHRoaXMgZm9ybSBmb3Igc3RvcmVzLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1
ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwg
bV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsK
KyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzTWVtb3J5VmFsdWVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1l
c3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bj
b2RlKSB7CisgICAgY2FzZSBOb3A6CisgICAgICAgIG91dC5wcmludCgiTm9wIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJpbnQoIklkZW50aXR5
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0MzI6CisgICAgICAgIG91dC5wcmlu
dCgiQ29uc3QzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdDY0OgorICAgICAg
ICBvdXQucHJpbnQoIkNvbnN0NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RE
b3VibGU6CisgICAgICAgIG91dC5wcmludCgiQ29uc3REb3VibGUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrU2xvdCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAgICAgICAgb3V0LnByaW50
KCJBcmd1bWVudFJlZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6
CisgICAgICAgIG91dC5wcmludCgiRnJhbWVQb2ludGVyIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFkZDoKKyAgICAgICAgb3V0LnByaW50KCJBZGQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3ViOgorICAgICAgICBvdXQucHJpbnQoIlN1YiIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBNdWw6CisgICAgICAgIG91dC5wcmludCgiTXVsIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIERpdjoKKyAgICAgICAgb3V0LnByaW50KCJEaXYiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAgIG91dC5wcmludCgiQ2hpbGxEaXYiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTW9kOgorICAgICAgICBvdXQucHJpbnQoIk1vZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIG91dC5wcmludCgi
Qml0QW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdE9yOgorICAgICAgICBvdXQu
cHJpbnQoIkJpdE9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdFhvcjoKKyAgICAg
ICAgb3V0LnByaW50KCJCaXRYb3IiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2hsOgor
ICAgICAgICBvdXQucHJpbnQoIlNobCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTU2hy
OgorICAgICAgICBvdXQucHJpbnQoIlNTaHIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
WlNocjoKKyAgICAgICAgb3V0LnByaW50KCJaU2hyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFNFeHQ4OgorICAgICAgICBvdXQucHJpbnQoIlNFeHQ4Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0MTYiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU0V4dDMyOgorICAgICAgICBvdXQucHJpbnQoIlNFeHQzMiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIG91dC5wcmludCgiWkV4
dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICAgICAgb3V0LnBy
aW50KCJGUm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSVRvRDoKKyAgICAgICAg
b3V0LnByaW50KCJJVG9EIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERUb0kzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJEVG9JMzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXF1
YWw6CisgICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTm90RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTm90RXF1YWwiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW4iKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIG91dC5wcmlu
dCgiR3JlYXRlclRoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVzc0VxdWFsOgor
ICAgICAgICBvdXQucHJpbnQoIkxlc3NFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBHcmVhdGVyRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlckVxdWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJlbG93OgorICAgICAgICBvdXQucHJpbnQoIkJl
bG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgICAgIG91
dC5wcmludCgiQWJvdmVFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCZWxvd0Vx
dWFsOgorICAgICAgICBvdXQucHJpbnQoIkJlbG93RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4WiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIG91dC5wcmludCgiTG9hZDhTIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIG91dC5wcmludCgiTG9h
ZDE2WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBvdXQu
cHJpbnQoIkxvYWQxNlMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZEZsb2F0Ogor
ICAgICAgICBvdXQucHJpbnQoIkxvYWRGbG9hdCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgU3RvcmU4OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlOCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlMTYiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgb3V0LnByaW50KCJT
dG9yZUZsb2F0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICBv
dXQucHJpbnQoIlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENDYWxsOgorICAg
ICAgICBvdXQucHJpbnQoIkNDYWxsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBhdGNo
cG9pbnQ6CisgICAgICAgIG91dC5wcmludCgiUGF0Y2hwb2ludCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja0FkZCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgb3V0LnByaW50KCJDaGVj
a1N1YiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgb3V0
LnByaW50KCJDaGVja011bCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVjazoKKyAg
ICAgICAgb3V0LnByaW50KCJDaGVjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBVcHNp
bG9uOgorICAgICAgICBvdXQucHJpbnQoIlVwc2lsb24iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgUGhpOgorICAgICAgICBvdXQucHJpbnQoIlBoaSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBKdW1wOgorICAgICAgICBvdXQucHJpbnQoIkp1bXAiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBvdXQucHJpbnQoIkJyYW5jaCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgIG91dC5wcmludCgiU3dpdGNoIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJldHVybjoKKyAgICAgICAgb3V0LnByaW50KCJS
ZXR1cm4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT29wczoKKyAgICAgICAgb3V0LnBy
aW50KCJPb3BzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNvZGVfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDogaW50MTZfdCB7CisgICAg
Ly8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZvciB3aGVuIHlvdSB3YW50IHRv
IHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAgLy8gUG9seW1vcnBoaWMgaWRl
bnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElkZW50aXR5LAorCisgICAg
Ly8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMuIENvbnN0YW50cyBleGlz
dCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAgIC8vIHJlYXNvbiBhYm91
dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29uc3RhbnRzIGFyZSBleHBl
bnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2NCwKKyAgICBDb25zdERv
dWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2VkIGFz
IGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKKyAgICAv
LyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBhIFN0
YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAgICAvLyBzdGFjayBtZW1v
cnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3RhY2tTbG90LAorCisgICAg
Ly8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1
dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVy
ZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21waWxlciB0YWtlcyBjYXJl
IHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0aGUgdmFsdWUgYnkgcmVn
aXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmluZyB0aGUgYXJndW1lbnQg
dG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBhIGNhbGxlZS1zYXZlIHJl
Z2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBUaGUgcmV0dXJuCisgICAg
Ly8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3IgRG91YmxlIChmb3IgRlBS
cykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUgcG9pbnRlci4gWW91IGNh
biBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0IHdpbGwgYWx3YXlzIHlp
ZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZlYXQ6IGlmIG91ciBjb21w
aWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5IGZvciBzb21lCisgICAg
Ly8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNpYyB3aWxsIHJldHVybiB3
aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAgICAvLyB3aGVyZSBpdCBo
YXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIsCisKKyAgICAvLyBQb2x5
bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBBZGQsCisgICAg
U3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2VyIG1hdGguCisgICAgQ2hp
bGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2UgSlMgKHgveSl8MC4KKyAg
ICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhvciwKKyAgICBTaGwsCisg
ICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1Y2guCisgICAgLy8gVGFr
ZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4dDE2LAorICAgIC8vIFRh
a2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwKKyAgICBaRXh0MzIsCisg
ICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3VuZCwKKyAgICAvLyBUYWtl
cyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAgIC8vIFRha2VzIERvdWJs
ZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBj
b21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJldHVybnMgaW50MzIgMCBv
ciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFsKHgsIDApLgorICAgIEVx
dWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdyZWF0ZXJUaGFuLAorICAg
IExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJbnRlZ2VyIGNvbXBhcmlz
b25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAgICBCZWxvdywKKyAgICBB
Ym92ZUVxdWFsLAorICAgIEJlbG93RXF1YWwsCisKKyAgICAvLyBNZW1vcnkgbG9hZHMuIE9wY29k
ZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBsb2FkZWQgdHlwZS4gVGhlc2UgdXNlIE1l
bW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHJldHVybiBJbnQzMjoKKyAgICBMb2FkOFosCisgICAg
TG9hZDhTLAorICAgIExvYWQxNlosCisgICAgTG9hZDE2UywKKyAgICAvLyBUaGlzIHJldHVybnMg
RG91YmxlOgorICAgIExvYWRGbG9hdCwKKyAgICAvLyBUaGlzIHJldHVybiB3aGF0ZXZlciB0aGUg
cmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwKKworICAgIC8vIE1lbW9yeSBzdG9yZXMuIE9wY29k
ZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBpcyBzdG9yZWQuIFRoZXNlIHVzZSBNZW1vcnlWYWx1
ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIEludDMyIHZhbHVlOgorICAgIFN0b3JlOCwKKyAgICBT
dG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMgYSBEb3VibGUgdmFsdWU6CisgICAgU3RvcmVGbG9h
dCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwg
YW5kIERvdWJsZToKKyAgICBTdG9yZSwKKworICAgIC8vIFRoaXMgaXMgYSByZWd1bGFyIG9yZGlu
YXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5c3RlbSBDIGNhbGxpbmcgY29udmVudGlv
bi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdXNpbmcg
dGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxsLAorCisgICAgLy8gVGhpcyBpcyBhIHBhdGNocG9p
bnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNzLiBUaGlzIGlzIHZpZXdlZCBhcyBiZWhh
dmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25seSBlbWl0cyBjb2RlIHZpYSBhIGNvZGUg
Z2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgY29kZSBpbmxp
bmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2ttYXAgYWxvbmcgd2l0aCBjb25zdHJhaW50
cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBtdXN0IGJlIHBhc3NlZC4KKyAgICAvLyBJ
dCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGluIHNvbWUg
cmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVzdAorICAgIC8vIHRoYXQgYSBzdGFja21h
cCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9tIHRoZSB0b3Agb2YgdGhlIGFyZ3VtZW50
IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFjay4KKyAgICBQYXRjaHBvaW50LAorCisg
ICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2UgYSBQYXRj
aHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBnZW5lcmF0aW9uCisgICAgLy8gY2FsbGJhY2suIFRo
YXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNvbWUgY29kZSBhZnRlciB0aGUgZXBpbG9ndWUsIGFu
ZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAgICAvLyBmcm9tIHRoZSBjaGVjaywgYW5kIHRoZSBj
aG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxzbyBnZXQgdG8gc3VwcGx5IGEgc3RhY2ttYXAuIE5v
dGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90IGFsbG93ZWQgdG8ganVtcCBiYWNrIGludG8gdGhl
IG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNsb3cgcGF0aCwgc2luY2UgdGhlIGNvbXBpbGVyCisg
ICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgZXhlY3V0aW9uIG9mIHRoZXNlIGluc3RydWN0aW9u
cyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRuJ3QgaGFwcGVuLiBGb3IKKyAgICAvLyBleGFtcGxl
LCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQnczoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0Fk
ZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vCisgICAgLy8gVGhlbiBp
dCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRvOgorICAgIC8vCisgICAgLy8gYSA9IENoZWNrQWRk
KHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5KGEpCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHZh
bGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxiYWNrcyB1c2VkIGJ5IHRoZSB0d28gQ2hlY2tBZGRz
LiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAorICAgIC8vIGNhbGxiYWNrcy4gWWV0LCB0aGlzIHRy
YW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhleSBhcmUgZGlmZmVyZW50IGJlY2F1c2Ug
d2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IENoZWNrQWRkIGV4ZWN1dGVzLCB0
aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZlIHBvc3NpYmx5IHRha2VuIHNsb3cKKyAg
ICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQgQ2hlY2tBZGQncyBjYWxsYmFjayBpcyBp
cnJlbGV2YW50LgorICAgIENoZWNrQWRkLAorICAgIENoZWNrU3ViLAorICAgIENoZWNrTXVsLAor
CisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xhc3Mu
IExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMgaGFzIGEKKyAgICAvLyBzdGFja21hcCB3
aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0YWtlcyBhbiBJbnQzMiBhcmd1bWVudCB0
aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgKKyAgICAvLyBmdWxsIGJyYW5jaCBmdXNpb24gaW4g
dGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBBIHRydWUgdmFsdWUganVtcHMgdG8gdGhlIGdlbmVy
YXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgorICAgIENoZWNrLAorCisgICAgLy8gU1NBIHN1cHBv
cnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAgIFVwc2lsb24sIC8vIFRoaXMgdXNlcyB0
aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAgIFBoaSwKKworICAgIC8vIEp1bXAuIFVzZXMgdGhl
IENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAorICAgIAorICAgIC8vIFBvbHltb3JwaGlj
IGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVh
bCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIENvbnRyb2xWYWx1ZSBjbGFzcywgd2l0aCB0aGUg
MC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUgc3VjY2Vzc29yLgorICAgIEJyYW5jaCwK
KworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBlaXRoZXIgSW50MzIgb3IgSW50NjQuIFVz
ZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3aXRjaCwKKworICAgIC8vIFJldHVybi4g
Tm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0aGVpciByZXR1cm4gdHlwZSwgc28g
dGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlwZS4gVXNlcyB0aGUgQ29udHJvbFZh
bHVlIGNsYXNzLgorICAgIFJldHVybiwKKworICAgIC8vIFRoaXMgaXMgYSB0ZXJtaW5hbCB0aGF0
IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUuIFVzZXMgdGhlIENvbnRyb2xW
YWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9OworCitpbmxpbmUgYm9vbCBpc0NoZWNrTWF0aChPcGNv
ZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBDaGVja0FkZDoK
KyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRT
dHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29k
ZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmln
aW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2lu
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM09yaWdpbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3UG9pbnRlcihtX2RhdGEpLCAiKSIpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIgY2FuIGNob29zZSB0byBw
dXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIzIHdpbGwgYmUgYWJsZSB0
bworLy8gYWNjb3VudCwgZG93biB0byB0aGUgbWFjaGluZSBjb2RlLCB3aGljaCBpbnN0cnVjdGlv
biBjb3JyZXNwb25kcyB0byB3aGljaCBvcmlnaW4uIEIzCisvLyB0cmFuc2Zvcm1hdGlvbnMgbXVz
dCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQncyBhbiBlcnJvciB0byB3cml0ZSBhIHRy
YW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9wcyBPcmlnaW5zIG9yIGxpZXMgYWJvdXQg
dGhlbS4KK2NsYXNzIE9yaWdpbiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgT3JpZ2luKGNvbnN0
IHZvaWQqIGRhdGEgPSBudWxscHRyKQorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAg
ICB9CisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAg
Y29uc3Qgdm9pZCogbV9kYXRhOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM1BhdGNocG9pbnRTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFp
cjsKKworUGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKCkKK3sKK30KKworUGF0
Y2hwb2ludFNwZWNpYWw6On5QYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgUGF0Y2hw
b2ludFNwZWNpYWw6OmZvckVhY2hBcmcoCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFt
YmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGlmIChpbnN0Lm9y
aWdpbi0+dHlwZSgpID09IFZvaWQpIHsKKyAgICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5z
dCwgY2FsbGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2soaW5z
dC5hcmdzWzFdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5cGUoKSk7CisgICAgZm9yRWFj
aEFyZ0ltcGwoMCwgMiwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29sIFBhdGNocG9pbnRTcGVj
aWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkg
PT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDEsIGluc3QpOworCisgICAg
aWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KGluc3QuYXJnc1sxXS5raW5kKCkgIT0gQXJnOjpUbXApCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc1R5cGUoaW5zdC5vcmlnaW4tPmFpclR5cGUoKSkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAyLCBpbnN0
KTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwg
dW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9p
ZCkKKyAgICAgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAxLCBpbnN0LCBhcmdJbmRleCk7
CisKKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
cmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAyLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxs
SGVscGVyczo6SnVtcCBQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUoCisgICAgSW5zdCYgaW5z
dCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KQoreworICAg
IFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZh
bHVlLT5zdGFja21hcCgpOworICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICBWZWN0b3I8VmFs
dWVSZXA+IHJlcHM7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKyAgICBpZiAoaW5zdC5vcmln
aW4tPnR5cGUoKSAhPSBWb2lkKQorICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRl
eHQuY29kZSwgaW5zdC5hcmdzW29mZnNldCsrXSkpOworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRl
eHQsIG9mZnNldCwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgU3RhY2ttYXA6OkdlbmVyYXRpb25Q
YXJhbXMgcGFyYW1zOworICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOworICAgIHBhcmFtcy5zdGFj
a21hcCA9IHN0YWNrbWFwOworICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICBwYXJhbXMudXNl
ZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICBzdGFja21hcC0+
bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJz
OjpKdW1wKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRT
cGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hw
b2ludFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BhdGNocG9pbnRTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0
Y2hwb2ludFNwZWNpYWxfaAorI2RlZmluZSBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNwZWNpYWwgdGhhdCByZWNv
Z25pemVzIHRoYXQgdGhlcmUgYXJlIHR3byB1c2VzIG9mIFBhdGNocG9pbnQ6IFZvaWQgYW5kIGFu
ZCBub24tVm9pZC4KKy8vIEluIHRoZSBWb2lkIGNhc2UsIHRoZSBzeW50YXggb2YgdGhlIEFpciBQ
YXRjaCBpbnN0cnVjdGlvbiBpczoKKy8vCisvLyAgICAgUGF0Y2ggJnBhdGNocG9pbnQsIGFyZ3Mu
Li4KKy8vCisvLyBXaGVyZSAiYXJncy4uLiIgYXJlIHRoZSBsb3dlcmVkIGFyZ3VtZW50cyB0byB0
aGUgUGF0Y2hwb2ludCBpbnN0cnVjdGlvbi4gSW4gdGhlIG5vbi1Wb2lkIGNhc2UKKy8vIHdlIHdp
bGwgaGF2ZToKKy8vCisvLyAgICAgUGF0Y2ggJnBhdGNocG9pbnQsIHJlc3VsdCwgYXJncy4uLgor
CitjbGFzcyBQYXRjaHBvaW50U3BlY2lhbCA6IHB1YmxpYyBTdGFja21hcFNwZWNpYWwgeworcHVi
bGljOgorICAgIFBhdGNocG9pbnRTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+UGF0Y2hwb2ludFNw
ZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBj
b25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7
CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRz
U3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisgICAgLy8g
Tk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4gYnJhbmNo
IGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRlcyB0aGUg
c3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2Vu
ZXJhdGUoQWlyOjpJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYp
IG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9p
bnRWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Db21tYVBy
aW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1BhdGNocG9pbnRW
YWx1ZTo6flBhdGNocG9pbnRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFZhbHVlOjpk
dW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgic3RhY2tt
YXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bh
dGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
UGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50VmFsdWVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFw
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQYXRjaHBvaW50
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFBhdGNocG9pbnQ7IH0KKworICAgIH5Q
YXRjaHBvaW50VmFsdWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBvaW50VmFsdWUo
dW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5
TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBhdGNocG9pbnQsIHR5cGUs
IG9yaWdpbiwgY2hpbGRyZW4pCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUGF0Y2hw
b2ludFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29w
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNj
b3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM1BoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0
ZS5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50
U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQaGFzZVNjb3Bl
OjpQaGFzZVNjb3BlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBjaGFyKiBuYW1lKQorICAg
IDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICwgbV9uYW1lKG5hbWUpCit7CisgICAgaWYg
KHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQjMgYmVmb3Jl
ICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKwor
ICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUg
PSB0b0NTdHJpbmcocHJvY2VkdXJlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQor
eworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgdmFsaWRh
dGUobV9wcm9jZWR1cmUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzUGhhc2VTY29wZV9oCisjZGVmaW5lIEIzUGhhc2VTY29wZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKFByb2NlZHVyZSYs
IGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxp
ZGF0aW9uCisKK3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25z
dCBjaGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM1BoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2NlZHVy
ZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1
ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2lj
QmxvY2sobV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1
bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisg
ICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworfQorCitWZWN0b3I8QmFzaWNCbG9j
ayo+IFByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcigpCit7CisgICAgVmVjdG9yPEJhc2ljQmxv
Y2sqPiByZXN1bHQ7CisgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5w
dXNoKGF0KDApKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3Ao
KSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgIHdvcmtsaXN0
LnB1c2goYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUG9zdE9yZGVy
KCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBQb3N0T3JkZXJCbG9j
a1dvcmtsaXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goYXQoMCkpOworICAgIHdoaWxl
IChCbG9ja1dpdGhPcmRlciBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgc3dpdGNo
IChpdGVtLm9yZGVyKSB7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UHJlOgorICAgICAgICAg
ICAgd29ya2xpc3QucHVzaFBvc3QoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGl0ZW0ubm9kZS0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2goaXRlbS5ub2RlLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBWaXNpdE9yZGVyOjpQb3N0OgorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChpdGVtLm5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvL0VOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAor
I2RlZmluZSBCM1Byb2NlZHVyZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
UHVyZU5hTi5oIgorI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgUHJv
Y2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1cmUpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJv
Y2VkdXJlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflByb2NlZHVyZSgpOworCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBO
YU4pOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4uLik7CisKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Js
b2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdLmdl
dCgpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGlj
OgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIp
CisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgaXRlcmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2lu
ZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFz
aWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJv
Y2VkdXJlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVy
YXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5k
ZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAg
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+
c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4
Kys7CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBjb25z
dCBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
IH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlz
LCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlz
LCBzaXplKCkpOyB9CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIo
KTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVyKCk7CisKKyAgICBj
bGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlc0NvbGxl
Y3Rpb24oY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKHByb2NlZHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRl
cmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAg
ICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRv
cihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAg
ICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmFs
dWUqIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fcHJvY2VkdXJlLT5tX3ZhbHVlc1ttX2luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
aW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgY29uc3QgUHJvY2VkdXJlKiBtX3By
b2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAg
ICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVy
ZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
bV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgp
OyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9w
cm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRv
cltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAg
ICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBWYWx1
ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKyNkZWZp
bmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3
IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlw
ZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2
YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtp
bmQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0
YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFN0YWNr
U2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICBvdXQu
cHJpbnQoIkFub255bW91cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90
S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBTdGFja1Nsb3RL
aW5kIDogdWludDhfdCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0byBiZSBr
ZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVuZCB0byBlc2NhcGUK
KyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5zIHdoZW4g
dGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjaworICAgIC8vIHNsb3QuCisg
ICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgY291bGQgc2hhcmUgc3BhY2Ug
d2l0aCBvdGhlciBzdGFjayBzbG90cywgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZW4ndCBsaXZlCisg
ICAgLy8gYXQgdGhlIHNhbWUgdGltZS4gVGhlIGNvbXBpbGVyIHN0aWxsIGhhcyB0byBkbyBlc2Nh
cGUgYW5hbHlzaXMsIHNpbmNlIHRoZXNlIGNhbiBiZSBlc2NhcGVkCisgICAgLy8gZXhwbGljaXRs
eSBpbiBJUi4KKyAgICBBbm9ueW1vdXMKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNr
U2xvdEtpbmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0
YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9i
eXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzU3RhY2tTbG90VmFsdWVfaAorI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVlX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNT
dGFja1Nsb3RLaW5kLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1l
c3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFz
cyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9
CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBl
bmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4g
VXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJfdCBvZmZz
ZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gTm90
ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tl
ZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworCisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVu
c2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIFN0YWNrU2xvdCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNp
emUoYnl0ZVNpemUpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9vZmZzZXRG
cm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICBT
dGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRlcihtX29wYXF1ZSksICIs
IHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAgICAgICAiLCBnZW5lcmF0b3IgPSAiLCBS
YXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVy
ZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNrbWFwX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYv
U2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
Q2hlY2tTcGVjaWFsOworY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7CisKK2Ns
YXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAg
ICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisg
ICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0
aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgorICAgICAg
ICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhl
IHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVyczsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihD
Q2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFy
ZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3RhY2ttYXAo
KQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBpZGVudGlm
eSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAtdXNpbmcg
VmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRlIG1heSBl
bmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisgICAgLy8g
YWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIgYmFjayB0
byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdlcmUgdXNp
bmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBwYXJhbWV0
ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9CisgICAgdm9p
ZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENvbnZlbmll
bmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAg
dm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBzZXRPcGFx
dWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qgb3BhcXVl
SW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUoKSk7IH0K
KworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1c2VzIHRo
aXMgU3RhY2ttYXAuIEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50IHRoYXQKKyAgICAvLyByZXR1cm5z
IGEgdmFsdWUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgcmVzdWx0IHZhbHVlLiBJbiBhbGwg
b3RoZXIgY2FzZXMsIGluZGV4IHplcm8gcmVmZXJzCisgICAgLy8gdG8gdGhlIGZpcnN0IGFyZ3Vt
ZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVudCBpcyBub3QgY29uc3RyYWlu
YWJsZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gaW4gYSBDaGVja0FkZCB2YWx1ZSwgaXQgd291bGQg
YmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQgMS4gSW4gYSBDaGVjayB2YWx1
ZSwgaXQKKyAgICAvLyB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kZXggMC4gQnV0
LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCwgeW91IGNhbgorICAgIC8v
IGRlcGVuZCBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBiZWluZyBmaWxsZWQgaW4uCisg
ICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0IFZhbHVlUmVwJiByZXApCisg
ICAgeworICAgICAgICBpZiAoaW5kZXggKyAxIDwgbV9yZXBzLnNpemUoKSkKKyAgICAgICAgICAg
IG1fcmVwcy5ncm93KGluZGV4ICsgMSk7CisgICAgICAgIG1fcmVwc1tpbmRleF0gPSByZXA7Cisg
ICAgfQorCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpCisgICAgewor
ICAgICAgICBtX2Nsb2JiZXJlZC5tZXJnZShzZXQpOworICAgIH0KKworICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiBjbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb2JiZXJlZDsgfQorCisgICAg
dm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yKQorICAgIHsKKyAg
ICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEdlbmVy
YXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENoZWNrU3BlY2lh
bDsKKyAgICBmcmllbmQgY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNz
IFN0YWNrbWFwU3BlY2lhbDsKKyAgICAKKyAgICB2b2lkKiBtX29wYXF1ZSB7IG51bGxwdHIgfTsK
KyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dl
bmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBt
X3VzZWRSZWdpc3RlcnM7IC8vIFN0YWNrbWFwcyBjb3VsZCBiZSBmdXJ0aGVyIGR1cGxpY2F0ZWQg
YnkgQWlyLCBidXQgdGhhdCdzIHVubGlrZWx5LCBzbyB3ZSBqdXN0IG1lcmdlIHRoZSB1c2VkIHJl
Z2lzdGVycyBzZXRzIGlmIHRoYXQgd2VyZSB0byBoYXBwZW4uCit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0
YWNrbWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVj
aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRl
eHQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworU3RhY2ttYXBTcGVjaWFsOjpT
dGFja21hcFNwZWNpYWwoKQoreworfQorCitTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNp
YWwoKQoreworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJ
bnN0JiBpbnN0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBWYWx1
ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+
c3RhY2ttYXAoKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgSW5zdCB0aGF0IHVzZXMgdGhlIFN0
YWNrbWFwU3BlY2lhbCBnZXRzIGR1cGxpY2F0ZWQsIHRoZW4gd2UgZW5kIHVwIG1lcmdpbmcgdXNl
ZAorICAgIC8vIHJlZ2lzdGVyIHNldHMgZnJvbSBtdWx0aXBsZSBwbGFjZXMuIFRoaXMgY3VycmVu
dGx5IHdvbid0IGhhcHBlbiBzaW5jZSBBaXIgZG9lc24ndCBoYXZlIHRhaWxkdXAKKyAgICAvLyBv
ciB0aGluZ3MgbGlrZSB0aGF0LiBCdXQgbWF5YmUgZXZlbnR1YWxseSBpdCBjb3VsZCBiZSBhIHBy
b2JsZW0uCisgICAgc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVycy5tZXJnZSh1c2VkUmVnaXN0ZXJz
KTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVy
ZWRSZWdzKEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47Cisg
ICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICByZXR1cm4g
c3RhY2ttYXAtPmNsb2JiZXJlZCgpOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFj
aEFyZ0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdu
b3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVh
Y2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVk
LgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAg
ICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKyAg
ICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzID09IHZhbHVlLT5j
aGlsZHJlbi5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICAKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3M7ICsraSkg
eworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpICsgbnVtSWdub3JlZEIzQXJnc107Cisg
ICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEFpckFyZ3Mp
OworCisgICAgICAgIGNhbGxiYWNrKGFyZywgQXJnOjpVc2UsIEFyZzo6dHlwZUZvckIzVHlwZShj
aGlsZC0+dHlwZSgpKSk7CisgICAgfQorfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNWYWxp
ZEltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3Jl
ZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9y
aWdpbjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5l
ZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7Cisg
ICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CisK
KyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIEFTU0VS
VChzdGFja21hcCk7CisKKyAgICAvLyBGb3IgdGhlIEluc3QgdG8gYmUgdmFsaWQsIGl0IG5lZWRz
IHRvIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGluc3QuYXJn
cy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkg
LSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdh
cmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVt
ZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3Qg
aGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRp
b25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kp
IHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNB
cmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdz
XTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNl
IEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1t
NjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6
CisgICAgICAgICAgICBicmVhazsgLy8gT0sKKyAgICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAg
ICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
ICYmCisgICAgICAgICAgICAgICAgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5
cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSBudW1i
ZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9m
IEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChzdGFja21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1
ZS0+Y2hpbGRyZW4uc2l6ZSgpKTsKKworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBzdXBw
bGllZCBjb25zdHJhaW50cy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNBcmdz
OyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZVJlcCYg
cmVwID0gc3RhY2ttYXAtPm1fcmVwc1tpXTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3Nb
aSAtIG51bUlnbm9yZWRCM0FyZ3MgKyBudW1JZ25vcmVkQWlyQXJnc107CisKKyAgICAgICAgc3dp
dGNoIChyZXAua2luZCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAg
ICAgIC8vIFdlIGFscmVhZHkgdmVyaWZpZWQgdGhpcyBhYm92ZS4KKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAo
IWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAgIGlm
IChhcmcgIT0gVG1wKHJlcC5yZWcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAg
ICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnICE9IEFy
Zzo6Y2FsbEFyZyhyZXAub2Zmc2V0RnJvbVNQKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFu
dDoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50YXRp
b24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RhY2tt
YXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJn
cywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgdW5zaWduZWQg
YXJnSW5kZXgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2tt
YXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICB1bnNpZ25lZCBzdGFja21h
cEFyZ0luZGV4ID0gYXJnSW5kZXggLSBudW1JZ25vcmVkQWlyQXJncyArIG51bUlnbm9yZWRCM0Fy
Z3M7CisKKyAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSBzdGFja21hcC0+bV9yZXBzLnNpemUo
KSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNvbnN0cmFpbnQu
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBvbmx5IGFkbWl0
IHN0YWNrIGZvciBBbnkncywgc2luY2UgU3RhY2sgaXMgbm90IGEgdmFsaWQgaW5wdXQgY29uc3Ry
YWludCwgYW5kIFN0YWNrQXJndW1lbnQKKyAgICAvLyB0cmFuc2xhdGVzIHRvIGEgQ2FsbEFyZyBp
biBBaXIuCisgICAgaWYgKHN0YWNrbWFwLT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRleF0ua2luZCgp
ID09IFZhbHVlUmVwOjpBbnkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwoCisgICAgR2Vu
ZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBJbnN0JiBp
bnN0LCBWZWN0b3I8VmFsdWVSZXA+JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3Vs
dC5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkpOworfQorCitW
YWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBjb25zdCBBcmcm
IGFyZykKK3sKKyAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6VG1wOgor
ICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnJlZyhhcmcucmVnKCkpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgcmV0dXJu
IFZhbHVlUmVwOjpjb25zdGFudChhcmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQXJnOjpBZGRyOgorICAgICAgICBpZiAoYXJnLmJhc2UoKSA9PSBUbXAoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcu
b2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoYXJnLmJhc2UoKSA9PSBUbXAoTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6c3Rh
Y2soYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcCgpOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNw
ZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcFNwZWNpYWxf
aAorI2RlZmluZSBCM1N0YWNrbWFwU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9
CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWFscyB0aGF0IGhhdmUgc3RhY2tt
YXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBhc2tpbmcgZm9y
IHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBuZWVkIHRvIGV2
ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNrbWFwLgorCitjbGFzcyBTdGFja21h
cFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBTdGFja21hcFNw
ZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNl
dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3Mo
QWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBv
dmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUg
bWFueSBzb21lCisgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgorCisgICAg
dm9pZCBmb3JFYWNoQXJnSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywg
dW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0IFNj
b3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBib29sIGlzVmFs
aWRJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBhZG1pdHNTdGFj
a0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUln
bm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCk7CisK
KyAgICAvLyBBcHBlbmRzIHRoZSByZXBzIGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0YXJ0aW5nIHdp
dGggbnVtSWdub3JlZEFyZ3MsIHRvIHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgdm9pZCBhcHBlbmRS
ZXBzSW1wbChBaXI6OkdlbmVyYXRpb25Db250ZXh0JiwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3Ms
IEFpcjo6SW5zdCYsIFZlY3RvcjxWYWx1ZVJlcD4mKTsKKworICAgIHN0YXRpYyBWYWx1ZVJlcCBy
ZXBGb3JBcmcoQWlyOjpDb2RlJiwgY29uc3QgQWlyOjpBcmcmKTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
U3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Vj
Y2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisjZGVmaW5lIEIzU3VjY2Vzc29yQ29s
bGVjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIGdlbmVyaWMgd3JhcHBlciBhcm91bmQgbGlzdHMgb2Yg
ZnJlcXVlbnRlZCBibG9ja3MsIHdoaWNoIGdpdmVzIHlvdSBqdXN0IHRoZSBibG9ja3MuCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2ssIHR5cGVuYW1lIFN1Y2Nlc3Nvckxpc3Q+CitjbGFz
cyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9u
KFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgeworICAg
IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQor
ICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9saXN0W2lu
ZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1
cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXShz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJhc2ljQmxvY2sq
JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBj
bGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN1Y2Nlc3NvckNv
bGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xs
ZWN0aW9uKGNvbnN0X2Nhc3Q8U3VjY2Vzc29yQ29sbGVjdGlvbio+KCZjb2xsZWN0aW9uKSkgLy8g
Y29uc3QgaXMgc3R1cGlkIGFueXdheS4KKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayomIG9wZXJhdG9yKigpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5k
ZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5t
X2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTdWNjZXNzb3JD
b2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgIH07
CisKKyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQor
ICAgIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisK
K3ByaXZhdGU6CisgICAgU3VjY2Vzc29yTGlzdCYgbV9saXN0OworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNT
dWNjZXNzb3JDb2xsZWN0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoQ2FzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTd2l0Y2hDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK3ZvaWQgU3dpdGNoQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChtX2Nhc2VWYWx1ZSwgIi0+IiwgbV90YXJnZXQpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1N3aXRjaENhc2VfaAorI2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoQ2FzZSB7CitwdWJsaWM6Cisg
ICAgU3dpdGNoQ2FzZSgpCisgICAgeworICAgIH0KKworICAgIFN3aXRjaENhc2UoaW50NjRfdCBj
YXNlVmFsdWUsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IG1fY2Fz
ZVZhbHVlKGNhc2VWYWx1ZSkKKyAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgeworICAg
IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdGFy
Z2V0OyB9CisKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FzZVZh
bHVlOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFy
Z2V0OyB9CisgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2soKSBjb25zdCB7IHJldHVybiBtX3Rh
cmdldC5ibG9jaygpOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX2Nhc2VWYWx1ZTsKKyAgICBGcmVxdWVudGVkQmxv
Y2sgbV90YXJnZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N3aXRjaENhc2VfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoVmFsdWUuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K1N3aXRjaFZhbHVlOjp+U3dpdGNoVmFsdWUoKQoreworfQorCitTd2l0Y2hDYXNlIFN3aXRjaFZh
bHVlOjpyZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KQoreworICAgIEZyZXF1ZW50ZWRCbG9jayBy
ZXN1bHRCbG9jayA9IG1fc3VjY2Vzc29yc1tpbmRleF07CisgICAgaW50NjRfdCByZXN1bHRWYWx1
ZSA9IG1fdmFsdWVzW2luZGV4XTsKKyAgICBtX3N1Y2Nlc3NvcnNbaW5kZXhdID0gbV9zdWNjZXNz
b3JzLmxhc3QoKTsKKyAgICBtX3N1Y2Nlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgIG1fdmFsdWVz
W2luZGV4XSA9IG1fdmFsdWVzLmxhc3QoKTsKKyAgICBtX3ZhbHVlcy5yZW1vdmVMYXN0KCk7Cisg
ICAgcmV0dXJuIFN3aXRjaENhc2UocmVzdWx0VmFsdWUsIHJlc3VsdEJsb2NrKTsKK30KKwordm9p
ZCBTd2l0Y2hWYWx1ZTo6YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQor
eworICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9z
dWNjZXNzb3JzW21fc3VjY2Vzc29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7
CisgICAgbV92YWx1ZXMuYXBwZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lk
IFN3aXRjaFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8v
IFRoaXMgZGVzdHJ1Y3RpdmVseSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4K
KyAgICBvdXQucHJpbnQobGlzdER1bXAoKnRoaXMpLCAiLCBmYWxsVGhyb3VnaCA9ICIsIGZhbGxU
aHJvdWdoKCkpOworfQorCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpCisgICAg
OiBDb250cm9sVmFsdWUoaW5kZXgsIFN3aXRjaCwgVm9pZCwgb3JpZ2luKQoreworICAgIG1fc3Vj
Y2Vzc29ycy5hcHBlbmQoZmFsbFRocm91Z2gpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNT
d2l0Y2hWYWx1ZV9oCisjZGVmaW5lIEIzU3dpdGNoVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hWYWx1
ZSA6IHB1YmxpYyBDb250cm9sVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN3aXRjaDsgfQorCisgICAgflN3
aXRjaFZhbHVlKCk7CisKKyAgICAvLyBudW1DYXNlVmFsdWVzKCkgKyAxID09IG51bVN1Y2Nlc3Nv
cnMoKS4KKyAgICB1bnNpZ25lZCBudW1DYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZXMuc2l6ZSgpOyB9CisKKyAgICAvLyBUaGUgc3VjY2Vzc29yIGZvciB0aGlzIGNhc2UgdmFsdWUg
aXMgYXQgdGhlIHNhbWUgaW5kZXguCisgICAgaW50NjRfdCBjYXNlVmFsdWUodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIAorICAgIGNvbnN0IFZl
Y3RvcjxpbnQ2NF90PiYgY2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisK
KyAgICBGcmVxdWVudGVkQmxvY2sgZmFsbFRocm91Z2goKSBjb25zdCB7IHJldHVybiBzdWNjZXNz
b3JzKCkubGFzdCgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCgpIHsgcmV0
dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7
IHJldHVybiBudW1DYXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNlIGF0KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENhc2UoY2FzZVZhbHVlKGlu
ZGV4KSwgc3VjY2Vzc29yKGluZGV4KSk7CisgICAgfQorICAgIFN3aXRjaENhc2Ugb3BlcmF0b3Jb
XSh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7
CisgICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRl
cmF0b3IoKQorICAgICAgICAgICAgOiBtX3N3aXRjaChudWxscHRyKQorICAgICAgICAgICAgLCBt
X2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0
IFN3aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6
IG1fc3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRvciooKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgpOworICAgICAg
ICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBTd2l0Y2hWYWx1ZSogbV9z
d2l0Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIHR5cGVkZWYg
aXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICAvLyBUaGlzIHJlbW92ZXMg
dGhlIGNhc2UgYW5kIHJlb3JkZXJzIHRoaW5ncyBhIGJpdC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0
aGUgY2FzZXMgZnJvbSAwIHRvIE4sCisgICAgLy8gdGhlbiB5b3UgY2FuIGtlZXAgaXRlcmF0aW5n
IGFmdGVyIHRoaXMgc28gbG9uZyBhcyB5b3UgcmV2aXNpdCB0aGlzIHNhbWUgaW5kZXggKHdoaWNo
IHdpbGwgbm93CisgICAgLy8gY29udGFpbiBzb21lIG90aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJl
bW92ZXMgdGhlIGNhc2UgdGhhdCB3YXMgcmVtb3ZlZC4KKyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNh
c2UodW5zaWduZWQgaW5kZXgpOworCisgICAgdm9pZCBhcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENh
c2UmIHN3aXRjaENhc2UpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CisKKyAgICBTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwg
Y29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCk7CisKKyAgICBWZWN0b3I8aW50NjRf
dD4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N3aXRjaFZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNUeXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
VHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAg
ICAgb3V0LnByaW50KCJWb2lkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMyOgor
ICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElu
dDY0OgorICAgICAgICBvdXQucHJpbnQoIkludDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmlu
ZSBCM1R5cGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ29tbW9uLmgi
CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lkLAorICAgIEludDMyLAorICAgIEludDY0
LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJvb2wgaXNJbnQoVHlwZSB0eXBlKQoreworICAg
IHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUgPT0gSW50NjQ7Cit9CisKK2lubGluZSBib29s
IGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IERvdWJsZTsKK30KKwor
aW5saW5lIFR5cGUgcG9pbnRlclR5cGUoKQoreworICAgIGlmIChpczMyQml0KCkpCisgICAgICAg
IHJldHVybiBJbnQzMjsKKyAgICByZXR1cm4gSW50NjQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlR5cGUpOworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1R5cGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzVXBzaWxvblZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworVXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30K
Kwordm9pZCBVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KCJeIiwgbV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1Vwc2lsb25WYWx1ZV9oCisjZGVmaW5lIEIzVXBzaWxvblZhbHVlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4g
b3Bjb2RlID09IFVwc2lsb247IH0KKworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVl
KiBwaGkoKSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShw
aGkpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7
CisgICAgfQorCisgICAgVmFsdWUqIG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNVcHNpbG9uVmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXNl
Q291bnRzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1VzZUNvdW50czo6VXNlQ291
bnRzKFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgIDogbV9jb3VudHMocHJvY2VkdXJlLnZhbHVl
cygpLnNpemUoKSkKK3sKKyAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2NlZHVyZS52YWx1ZXMo
KSkgeworICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAg
ICAgICAgICAgbV9jb3VudHNbY2hpbGRdKys7CisgICAgfQorfQorCitVc2VDb3VudHM6On5Vc2VD
b3VudHMoKQoreworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1VzZUNvdW50c19oCisjZGVmaW5lIEIzVXNl
Q291bnRzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgi
CisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBVc2VDb3VudHMgeworcHVibGljOgorICAgIFVz
ZUNvdW50cyhQcm9jZWR1cmUmKTsKKyAgICB+VXNlQ291bnRzKCk7CisKKyAgICB1bnNpZ25lZCBv
cGVyYXRvcltdKFZhbHVlKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Nv
dW50c1t2YWx1ZV07CisgICAgfQorcHJpdmF0ZToKKyAgICBJbmRleE1hcDxWYWx1ZSwgdW5zaWdu
ZWQ+IG1fY291bnRzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNVc2VDb3VudHNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFZhbGlkYXRlciB7CitwdWJsaWM6CisgICAgVmFsaWRh
dGVyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBk
dW1wQmVmb3JlKQorICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBt
X3doZW4od2hlbikKKyAgICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7Cisg
ICAgfQorCisjZGVmaW5lIFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBi
cmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIGZhaWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9O
LCAjY29uZGl0aW9uLCB0b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkK
KworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IGJs
b2NrczsKKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5Qcm9jOworICAgICAgICBIYXNo
U2V0PFZhbHVlKj4gdmFsdWVJbkJsb2NrOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX3Byb2NlZHVyZSkgeworICAgICAgICAgICAgYmxvY2tzLmFkZChibG9jayk7CisgICAg
ICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykKKyAgICAgICAgICAgICAgICB2YWx1
ZUluQmxvY2suYWRkKHZhbHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIHZh
bHVlIDogbV9wcm9jZWR1cmUudmFsdWVzKCkpCisgICAgICAgICAgICB2YWx1ZUluUHJvYy5hZGQo
dmFsdWUpOworCisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2MpCisgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZUluQmxvY2suY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5CbG9jaykKKyAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFs
dWUpKTsKKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKSB7CisgICAg
ICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKGNoaWxkKSwgKCJBdCAiLCAqdmFs
dWUsICItPiIsIHBvaW50ZXJEdW1wKGNoaWxkKSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6IGJsb2NrcykgeworICAgICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSgKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tzLmNvbnRhaW5zKHN1Y2Nl
c3NvciksICgiQXQgIiwgKmJsb2NrLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBFeHBh
bmQgdGhpcyB2YWxpZGF0aW9uIHBoYXNlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDgwCisgICAgfQorCitwcml2YXRlOgorICAgIE5PX1JF
VFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBmYWlsKAorICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFt
ZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBjb25k
aXRpb24sCisgICAgICAgIENTdHJpbmcgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIENTdHJpbmcg
ZmFpbHVyZU1lc3NhZ2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFt
IG91dDsKKyAgICAgICAgICAgIG91dC5wcmludCgiQjMgVkFMSURBVElPTiBGQUlMVVJFXG4iKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGNvbmRpdGlvbiwgIiAoIiwgZmlsZW5hbWUs
ICI6IiwgbGluZU51bWJlciwgIilcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwg
bWVzc2FnZSwgIlxuIik7CisgICAgICAgICAgICBpZiAobV93aGVuKQorICAgICAgICAgICAgICAg
IG91dC5wcmludCgiICAgIER1cmluZyAiLCBtX3doZW4sICJcbiIpOworICAgICAgICAgICAgZmFp
bHVyZU1lc3NhZ2UgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBkYXRh
TG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAg
ICAgICAgZGF0YUxvZygiQmVmb3JlICIsIG1fd2hlbiwgIjpcbiIpOworICAgICAgICAgICAgZGF0
YUxvZyhtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2coIkF0IHRpbWUg
b2YgZmFpbHVyZTpcbiIpOworICAgICAgICBkYXRhTG9nKG1fcHJvY2VkdXJlKTsKKworICAgICAg
ICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFp
bHVyZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVuY3Rpb24sIGNvbmRpdGlvbik7CisgICAgICAg
IENSQVNIKCk7CisgICAgfQorICAgIAorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAg
Y29uc3QgY2hhciogbV93aGVuOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisK
K30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYgcHJv
Y2VkdXJlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQoreworICAg
IFZhbGlkYXRlciB2YWxpZGF0ZXIocHJvY2VkdXJlLCB3aGVuLCBkdW1wQmVmb3JlKTsKKyAgICB2
YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlk
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsaWRhdGVfaAorI2RlZmluZSBCM1Zh
bGlkYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK3ZvaWQgdmFsaWRhdGUoUHJvY2VkdXJlJiwg
Y29uc3QgY2hhciogd2hlbiA9IG51bGxwdHIsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUgPSBudWxs
cHRyKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3
dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjb25zdCBjaGFyKiBjb25zdCBWYWx1
ZTo6ZHVtcFByZWZpeCA9ICJAIjsKKworVmFsdWU6On5WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVmFs
dWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqIHZhbHVlKQoreworICAgIC8vIFRoaXMgaXMg
YSBiaXQgY3JhenkuIEl0IGRvZXMgYW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQgb2Ygd2hhdGV2ZXIg
VmFsdWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRoCisgICAgLy8gYSBwbGFpbiBJZGVudGl0eSBWYWx1
ZS4gV2UgZmlyc3QgY29sbGVjdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQsIHRoZW4g
d2UgZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0aGVu
IHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCisKKyAgICB1bnNpZ25l
ZCBpbmRleCA9IG1faW5kZXg7CisgICAgVHlwZSB0eXBlID0gbV90eXBlOworICAgIE9yaWdpbiBv
cmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOwor
ICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworCisgICAgUkVMRUFT
RV9BU1NFUlQodHlwZSA9PSB2YWx1ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFs
dWUoKTsKKworICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIElkZW50aXR5LCB0eXBlLCBvcmln
aW4sIHZhbHVlKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFj
ZW1lbnQgPSByZXBsYWNlbWVudDsKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhOb3AoKQor
eworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9v
cmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1ZSog
cmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFs
dWUoKTsKKworICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIE5vcCwgVm9pZCwgb3JpZ2luKTsK
KworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSByZXBs
YWNlbWVudDsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6
ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBl
LCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNvZGUpOworCisgICAgb3V0LnByaW50KCIoIik7Cisg
ICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4o
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOworCisgICAg
U3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7Cisg
ICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmlu
Zy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOworCisgICAgb3V0
LnByaW50KCIpIik7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK2ludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wg
VmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2ludDY0
X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29u
c3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOwor
fQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0Cit7Cit9CisKK1R5
cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpCit7Cisg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNhc2UgQWRkOgor
ICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2OgorICAgIGNhc2UgQ2hp
bGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoK
KyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2Fz
ZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNl
IENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgpOworICAgIGNhc2Ug
RnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRlcigpOworICAgIGNhc2UgU0V4dDg6
CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBFcXVhbDoKKyAg
ICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhh
bjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICBjYXNl
IEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2Ug
QmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGNhc2UgU0V4dDMyOgorICAg
IGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7CisgICAgY2FzZSBGUm91bmQ6Cisg
ICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gRG91YmxlOworICAgIGNhc2UgTm9wOgorICAg
ICAgICByZXR1cm4gVm9pZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1ZhbHVlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJC
M09wY29kZS5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisj
aW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7Citj
bGFzcyBTdGFja21hcDsKKworY2xhc3MgVmFsdWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIFZlY3RvcjxWYWx1ZSosIDM+IEFkamFjZW5jeUxpc3Q7CisKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2Rl
KSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIH5WYWx1ZSgpOworCisgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgLy8gTm90ZSB0
aGF0IHRoZSBvcGNvZGUgaXMgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJlcGxhY2luZyB2YWx1ZXMg
d2l0aCBpZGVudGl0eS4KKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNv
ZGU7IH0KKworICAgIE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQor
ICAgIAorICAgIFZhbHVlKiYgY2hpbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fY2hpbGRy
ZW5baW5kZXhdOyB9CisgICAgVmFsdWUqIGNoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorCisgICAgLy8gVGhpcyBjb21wdXRlcyB0aGUgdHlw
ZSB1c2luZyB0aGUgb3Bjb2RlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQorCisgICAgLy8gVGhpcyBpcyB1c2VmdWwgd2hlbiBsb3dlcmluZy4gTm90ZSB0aGF0IHRo
aXMgaXMgb25seSB2YWxpZCBmb3Igbm9uLXZvaWQgdmFsdWVzLgorICAgIEFpcjo6QXJnOjpUeXBl
IGFpclR5cGUoKSBjb25zdCB7IHJldHVybiBBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSh0eXBlKCkp
OyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47
IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBt
X2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAg
ICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICAvLyBU
aGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBk
byBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZlIGEKKyAgICAvLyBBcmd1bWVudFJlZ1Zh
bHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8gaWYgKEFyZ3VtZW50UmVnVmFsdWUqIGFy
Z3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCkpIHsKKyAgICAvLyAgICAg
dGhpbmdzCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlm
IHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGlzIHJl
dHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2VwdHMob3Bjb2RlKCkpIHJldHVybnMgZmFs
c2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhcygpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhh
c0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Q7CisgICAgCisgICAg
Ym9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisg
ICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50KCkgY29uc3Q7CisgICAg
Ym9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkg
Y29uc3Q7CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisKKyAgICBTdGFja21hcCogc3Rh
Y2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworCitwcm90ZWN0ZWQ6CisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUu
CisgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRs
eToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDog
bV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90
eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRy
ZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlz
IGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNv
ZGUgaGFzIG5vIGNoaWxkcmVuOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRl
eChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5
cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVGhp
cyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJv
bSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2Rl
KQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFy
Z3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3Nl
IG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUs
IGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0
IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAg
ICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9vcmlnaW4o
b3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgdmFyYXJncy4K
KyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAg
ICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAg
LCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9j
aGlsZHJlbihjaGlsZHJlbikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBU
eXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCk7CisKKyAgICAvLyBUaGlzIGdy
b3VwIG9mIGZpZWxkcyBpcyBhcnJhbmdlZCB0byBmaXQgaW4gNjQgYml0cy4KKyAgICB1bnNpZ25l
ZCBtX2luZGV4OworICAgIE9wY29kZSBtX29wY29kZTsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICAK
KyAgICBPcmlnaW4gbV9vcmlnaW47CisgICAgQWRqYWNlbmN5TGlzdCBtX2NoaWxkcmVuOworCitw
dWJsaWM6CisgICAgQmFzaWNCbG9jayogb3duZXIgeyBudWxscHRyIH07IC8vIGNvbXB1dGVkIGxh
emlseS4KKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgeyBudWxscHRyIH07IC8vIHVzZWQgZm9yIGFu
YWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsK
K3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKGNvbnN0IFZhbHVlKiB2YWx1ZSkKKyAgICAgICAg
OiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAg
bV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnBy
aW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVmFsdWUqIG1fdmFs
dWU7Cit9OworCitpbmxpbmUgRGVlcFZhbHVlRHVtcCBkZWVwRHVtcChjb25zdCBWYWx1ZSogdmFs
dWUpCit7CisgICAgcmV0dXJuIERlZXBWYWx1ZUR1bXAodmFsdWUpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNk
ZWZpbmUgQjNWYWx1ZUlubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAi
QjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKyNpbmNs
dWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUKiBWYWx1
ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworYm9vbCBWYWx1ZTo6aGFz
SW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1ZT4oKTsKK30KKwor
aW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0MzJW
YWx1ZT4oKS0+dmFsdWUoKTsKK30KKworYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAorewor
ICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW50NjRfdCBWYWx1ZTo6YXNJ
bnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+dmFsdWUoKTsK
K30KKworYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIo
KSB8fCBoYXNJbnQ2NCgpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGhhc0ludDMyKCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9CisKK2Jvb2wg
VmFsdWU6OmlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludCgp
ICYmIGFzSW50KCkgPT0gdmFsdWU7Cit9CisKK2Jvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKworZG91YmxlIFZh
bHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91YmxlVmFsdWU+
KCktPnZhbHVlKCk7Cit9CisKK1N0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQoreworICAgIGlm
IChDaGVja1ZhbHVlKiBjaGVjayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAgIHJldHVybiAm
Y2hlY2stPnN0YWNrbWFwOworICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBh
czxQYXRjaHBvaW50VmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2ludC0+c3RhY2tt
YXA7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVJbmxpbmVzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
Kwordm9pZCBWYWx1ZVJlcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChtX2tpbmQpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBBbnk6Cisg
ICAgY2FzZSBTb21lUmVnaXN0ZXI6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlZ2lzdGVy
OgorICAgICAgICBvdXQucHJpbnQoIigiLCByZWcoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21GUCgpLCAi
KSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja0FyZ3VtZW50OgorICAgICAgICBv
dXQucHJpbnQoIigiLCBvZmZzZXRGcm9tU1AoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIHZhbHVlKCksICIpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFZhbHVlUmVwOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2Fz
ZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICBvdXQucHJpbnQoIkFueSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQo
IlNvbWVSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6UmVn
aXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAg
ICBvdXQucHJpbnQoIlN0YWNrQXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzVmFsdWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHVzZSB0aGlzIGNsYXNz
IHRvIGRlc2NyaWJlIHZhbHVlIHJlcHJlc2VudGF0aW9ucyBhdCBzdGFja21hcHMuIEl0J3MgdXNl
ZCBib3RoIHRvIGZvcmNlIGEKKy8vIHJlcHJlc2VudGF0aW9uIGFuZCB0byBnZXQgdGhlIHJlcHJl
c2VudGF0aW9uLiBXaGVuIHRoZSBCMyBjbGllbnQgZm9yY2VzIGEgcmVwcmVzZW50YXRpb24sIHdl
IHNheQorLy8gdGhhdCBpdCdzIGFuIGlucHV0LiBXaGVuIEIzIHRlbGxzIHRoZSBjbGllbnQgd2hh
dCByZXByZXNlbnRhdGlvbiBpdCBwaWNrZWQsIHdlIHNheSB0aGF0IGl0J3MgYW4KKy8vIG91dHB1
dC4KKworY2xhc3MgVmFsdWVSZXAgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAg
IC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgY2FuIHBp
Y2sgYW55IHJlcHJlc2VudGF0aW9uLiBBcyBhbgorICAgICAgICAvLyBvdXRwdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93LiBUaGlzIHdpbGwgb25seSBhcmlz
ZSBmb3IgdGhlCisgICAgICAgIC8vIHJpZ2h0IG9wZXJhbmQgKGkuZS4gY2hpbGQoMSkpIG9mIGEg
Q2hlY2tNdWwuCisgICAgICAgIEFueSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNl
bnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIuIEl0
IGNvdWxkIGJlIGEKKyAgICAgICAgLy8gcmVnaXN0ZXIgdGhhdCB0aGlzIGNsYWltcyB0byBjbG9i
YmVyIQorICAgICAgICBTb21lUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdpc3Rlci4gQXMgYW4gb3V0
cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgcmVnaXN0
ZXIgQjMgcGlja2VkLgorICAgICAgICBSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBvdXRw
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tl
ZC4gSXQncyBub3QgYSB2YWxpZAorICAgICAgICAvLyBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAg
ICAgICAgU3RhY2ssCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgZm9yY2VzIHRoZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhlIGFyZ3VtZW50IGFyZWEgYXQgc29t
ZQorICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAgICAgICAg
Ly8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgY29u
c3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9OworICAgIAor
ICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdpc3RlcikK
KyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0
aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXAo
cmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qgb2Zmc2V0
RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbUZQOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFj
a0FyZ3VtZW50KGludHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVw
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAg
IHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbVNQOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZhbHVlKQorICAg
IHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ29u
c3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50RG91YmxlKGRvdWJs
ZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQoYml0d2lz
ZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6
ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21GUCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRw
dHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90Piht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsK
KyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOwor
ICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCitu
YW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpC
Mzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlUmVwX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwOCBAQAorIyEvdXNyL2Jpbi9l
bnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQg
SVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJl
ICJwYXRobmFtZSIKKworJHZhckluZGV4ID0gMAorZGVmIG5ld1ZhcgorICAgICR2YXJJbmRleCAr
PSAxCisgICAgIl90bXAjeyR2YXJJbmRleH0iCitlbmQKKworY2xhc3MgUHJvZHVjdGlvbgorICAg
IGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpuYW1lLCA6dmFyTmFtZSwgOmFub255bW91cywgOm9wY29k
ZSwgOmNoaWxkcmVuCisKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIG5hbWUsIG9wY29kZSwg
Y2hpbGRyZW4pCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQG5hbWUgPSBuYW1l
CisgICAgICAgIEBhbm9ueW1vdXMgPSAobmFtZSA9PSBuaWwgb3IgbmFtZSA9fiAvXEFcJChbMC05
XSspXFovKQorICAgICAgICBAdmFyTmFtZSA9IEBhbm9ueW1vdXMgPyBuZXdWYXIgOiBuYW1lID1+
IC9cQVwkLyA/ICQnIDogbmFtZQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIEBj
aGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBbXQorICAgIGVuZAorCisgICAgZGVmIGhh
c09wY29kZQorICAgICAgICBvcGNvZGUgIT0gbmlsCisgICAgZW5kCisKKyAgICBkZWYgZWFjaFZh
cmlhYmxlKCZwcm9jKQorICAgICAgICBjaGlsZHJlbi5lYWNoX3dpdGhfaW5kZXggeworICAgICAg
ICAgICAgfCBjaGlsZCwgaW5kZXggfAorICAgICAgICAgICAgeWllbGQgdmFyTmFtZSwKKyAgICAg
ICAgICAgICAgICAgIGNoaWxkLm5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC52YXJOYW1l
LAorICAgICAgICAgICAgICAgICAgY2hpbGQuYW5vbnltb3VzID8gKGNoaWxkLm9wY29kZSA/IDph
bm9uSW50ZXJuYWwgOiA6YW5vbk9wZXJhbmQpIDogKGNoaWxkLm9wY29kZSA/IDppbnRlcm5hbCA6
IDpvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgIGluZGV4CisgICAgICAgICAgICBjaGlsZC5l
YWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBNYXRj
aGVyCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpwcm9kdWN0aW9ucworCisgICAgZGVmIGluaXRp
YWxpemUobmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBA
cHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucworICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgor
ICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5p
dGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5h
bWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAg
ZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitl
bmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAg
CisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBv
cmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9
PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJp
bmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0g
b3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAg
ICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAg
ICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAg
ZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAg
ICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAg
ICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVO
YW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51
bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAg
ICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQor
ICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAg
ICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQVthLXpBLVowLTkkXShbYS16
QS1aMC05X10qKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhm
aWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisg
ICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVs9KCksXS8K
KyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGlu
ZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJy
b3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3Rl
ZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBz
dHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzS2V5
d29yZCh0b2tlbikKKyAgICAjIFdlIGNhbiBleHRlbmQgdGhpcyBhcyB3ZSBhZGQgbW9yZSBrZXl3
b3Jkcy4gTGlrZSwgd2UgbWlnaHQgd2FudCAiaW5jbHVkZSIgZXZlbnR1YWxseS4KKyAgICB0b2tl
biA9fiAvXEEoKG1hdGNoZXIpfChpbmNsdWRlKSlcWi8KK2VuZAorCitkZWYgaXNJZGVudGlmaWVy
KHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKVxaLyBh
bmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5p
dGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxl
TmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAg
ICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4
ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBp
ZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlz
ZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19
IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1
bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxl
c3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBj
b25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAg
cGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVz
dWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVm
IGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAgaWYgbmFt
ZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNoaWxkIHBy
b2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisgICAgICAgIGVu
ZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9
PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHBy
b2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlv
bgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1hdGNoZXIiKQor
CisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBwcm9k
dWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4
ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0byBzdXBw
b3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUuCisgICAgICAg
ICAgICBwcm9kdWN0aW9uID0gcGFyc2VQcm9kdWN0aW9uCisgICAgICAgICAgICAKKyAgICAgICAg
ICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1
Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1
Y3Rpb24iKQorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIHByb2R1Y3Rpb25zIDw8IHBy
b2R1Y3Rpb24KKyAgICAgICAgfQorCisgICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJOYW1lLCBw
cm9kdWN0aW9ucykKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAg
b3JpZ2luID0gdG9rZW4ub3JpZ2luCisgICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgor
CisgICAgICAgIGlmIHRva2VuID09ICI9IgorICAgICAgICAgICAgY29uc3VtZSgiPSIpCisgICAg
ICAgICAgICBvcGNvZGUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgY29uc3VtZSgi
KCIpCisgICAgICAgIGVsc2lmIHRva2VuID09ICIoIgorICAgICAgICAgICAgY29uc3VtZSgiKCIp
CisgICAgICAgICAgICBvcGNvZGUgPSBuYW1lCisgICAgICAgICAgICBuYW1lID0gbmlsCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUs
IG5pbCwgbmlsKQorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rpb25zID0g
W10KKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKwor
ICAgICAgICAgICAgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1Y3Rpb24p
CisKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorICAgICAgICAgICAgY29uc3Vt
ZSgiLCIpCisgICAgICAgIH0KKworICAgICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIpIgorICAg
ICAgICBhZHZhbmNlCisKKyAgICAgICAgUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBvcGNv
ZGUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlswXQorCitw
YXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCittYXRjaGVy
ID0gcGFyc2VyLnBhcnNlCisKK2NsYXNzIFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIgOmluZGV4
TWFwLCA6cHJvZHVjdGlvbnMKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExpc3QsIHBy
b2R1Y3Rpb25zKQorICAgICAgICBAaW5kZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVjdGlvbnMg
PSBbXQorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAg
ICAgICAgICAgIEBpbmRleE1hcCA8PCBpbmRleAorICAgICAgICAgICAgQHByb2R1Y3Rpb25zIDw8
IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYgbWFwSW5k
ZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAgICAgICB8
IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcFtpbmRleF0KKyAgICAgICAgfQorICAgIGVu
ZAorZW5kCisKK0ZpbGUub3BlbigiQjMiICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInciKSB7Cisg
ICAgfCBvdXRwIHwKKworICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3Bh
dHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKworICAg
IG91dHAucHV0cyAiI2lmbmRlZiBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAucHV0cyAi
I2RlZmluZSBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIAorICAgIG91dHAucHV0cyAiI2luY2x1
ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIHJ1biN7bWF0Y2hlci5uYW1lfShWYWx1ZSogX3ZhbHVl
LCBBZGFwdG9yJiBhZGFwdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisKKyAgICAjIE5vdGUgdGhh
dCB0aGlzIGRvZXMgbm90IGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgYmVjYXVzZSBpdCdz
IGEgcmVjdXJzaXZlIGVtaXR0ZXIuIElmIHlvdQorICAgICMgd2FudCB0byBzZWUgdGhlIGNvZGUg
bmljZWx5IGZvcm1hdHRlZCwgb3BlbiBpdCBpbiBhIGdvb2QgdGV4dCBlZGl0b3IgYW5kIGFzayBp
dCB0byBmb3JtYXQgaXQKKyAgICAjIGZvciB5b3UuCisKKyAgICAjIEluIG9kZCBzaXR1YXRpb25z
LCB3ZSBtYXkgbm90IHVzZSB0aGUgaW5wdXQgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNo
aWxsIG91dCBhYm91dCBpdC4KKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShfdmFsdWUpOyIK
KyAgICAgICAgCisgICAgIyBUaGlzIGp1c3QgcHJvdGVjdHMgdGhlIGNhbGxlciBmcm9tIGhhdmlu
ZyB0byB3b3JyeSBhYm91dCBwcm9kdWN0aW9ucyBoYXZpbmcgZGlmZmVyZW50IGxlbmd0aHMuCisg
ICAgZGVmIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAg
IGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExp
c3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmNoaWxkcmVuLmxlbmd0
aCA9PSBwcm9kdWN0aW9uLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgICAgIGluZGV4TGlz
dHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhM
aXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIGlu
ZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBs
ZW5ndGggPSBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmNoaWxkcmVuLmxlbmd0aAorICAgICAg
ICAgICAgaWYgbGVuZ3RoID4gMAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dmFs
dWVOYW1lfS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gI3tsZW5ndGh9KSB7IgorICAgICAgICAgICAg
ICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAg
IGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRoaXMgZWZmaWNpZW50bHkgc2VsZWN0
cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgcHJvZHVjdGlvbnMuIEl0IGFzc3VtZXMgdGhhdCBwcm9k
dWN0aW9ucworICAgICMgYXJlIG5vdCBkdXBsaWNhdGVkLiBJdCB5aWVsZHMgdGhlIGluZGV4IG9m
IHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBhbmQgdGhlIGNvcm91dGluZSBpcworICAgICMgcmVzcG9u
c2libGUgZm9yIGVtaXR0aW5nIHNwZWNpZmljIGNvZGUgZm9yIHRoYXQgcHJvZHVjdGlvbi4gVGhl
IGNvcm91dGluZSBpcyBnaXZlbiBsaXN0cyBvZgorICAgICMgaW5kaWNlcyBvZiBwb3NzaWJseS1t
YXRjaGluZyBwcm9kdWN0aW9ucy4KKyAgICBkZWYgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1
ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICAjIEZpcnN0LCBzcGxpdCB0aGUgcHJvZHVjdGlv
bnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJvZHVjdGlvbnMgd2l0aCBhbiBvcGNvZGUgYW5kIHByb2R1
Y3Rpb25zCisgICAgICAgICMgd2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQor
ICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9k
dWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVj
dGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmhhc09wY29kZSA9PSBwcm9kdWN0aW9uLmhhc09wY29k
ZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBl
bmQKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgIyBOb3csIGVtaXQgcGF0dGVybiBtYXRj
aGluZyBjb2RlLiBXZSBkbyBpdCBkaWZmZXJlbnRseSBmb3IgbGlzdHMgd2l0aCBhbiBvcGNvZGUg
dGhhbiBmb3IKKyAgICAgICAgIyBsaXN0cyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0
cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGlmIHByb2R1
Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgIyBOb3csIHdl
IHNwbGl0IHRoaXMgaW5kZXggbGlzdCBpbnRvIGdyb3VwcyBmb3IgZWFjaCBvcGNvZGUuCisgICAg
ICAgICAgICAgICAgZ3JvdXBzID0ge30KKyAgICAgICAgICAgICAgICBpbmRleExpc3QuZWFjaCB7
CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICBwcm9k
dWN0aW9uID0gcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGlmIGdyb3Vw
c1twcm9kdWN0aW9uLm9wY29kZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9k
dWN0aW9uLm9wY29kZV0gPDwgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA9IFtpbmRleF0KKyAg
ICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
InN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5vcGNvZGUoKSkgeyIKKyAgICAgICAgICAgICAgICBncm91
cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvcGNvZGUsIHN1YkluZGV4TGlz
dCB8CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZX06IgorICAg
ICAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhzdWJJbmRleExpc3QsIHBy
b2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5h
bWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGlu
ZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRl
eExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7
IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25z
KQorICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gu
cHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAg
ICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAg
ICAjIFRha2VzIHByb2R1Y3Rpb25zIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcGNvZGUgYW5kIHRoZSBz
YW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBmcm9tIHRoZW0gYmFzZWQgb24KKyAgICAjIHRoZSBwcm9k
dWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29sdW1uLgorICAgIGRlZiBtYXRjaENvbHVtbihvdXRwLCB2
YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCkKKyAgICAgICAgaWYgY29sdW1uSW5k
ZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICB5aWVsZCAo
MC4uLihwcm9kdWN0aW9ucy5zaXplKSkudG9fYQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IGVuZAorCisgICAgICAgIHN1YlZhbHVlID0gbmV3VmFyCisgICAgICAgIAorICAgICAgICBvdXRw
LnB1dHMgInsiCisgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7c3ViVmFsdWV9ID0gI3t2YWx1
ZU5hbWV9LT5jaGlsZCgje2NvbHVtbkluZGV4fSk7IgorCisgICAgICAgICMgV2UgbWF5IG5vdCB1
c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0Lgor
ICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3N1YlZhbHVlfSk7IgorICAgICAgICAK
KyAgICAgICAgc3ViUHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucy5tYXAgeworICAgICAgICAgICAg
fCBwcm9kdWN0aW9uIHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uY2hpbGRyZW5bY29sdW1uSW5k
ZXhdCisgICAgICAgIH0KKworICAgICAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHN1YlZhbHVl
LCBzdWJQcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAg
ICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAg
ICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMs
IGNvbHVtbkluZGV4ICsgMSkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAg
ICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgIGVuZAorCisg
ICAgZGVmIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAg
ICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKSB7Cisg
ICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAjIFdlIGFyZSBndWFyYW50ZWVk
IHRoYXQgdGhpcyBpbmRleCBsaXN0IGNvbnRhaW5zIHByb2R1Y3Rpb25zIHdpdGggdGhlIHNhbWUg
b3Bjb2RlIGFuZAorICAgICAgICAgICAgIyB0aGUgc2FtZSBsZW5ndGguCisgICAgICAgICAgICBz
dWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAg
ICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgMCkg
eworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBz
dWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgZW5kCisKKyAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsICJfdmFsdWUiLCBtYXRjaGVy
LnByb2R1Y3Rpb25zKSB7CisgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgaW5kZXhMaXN0
LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBwcm9kdWN0aW9uID0g
bWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgIG91dHAucHV0cyAieyIKKyAg
ICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7cHJvZHVjdGlvbi52YXJOYW1lfSA9IF92YWx1
ZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3Byb2R1Y3Rpb24udmFy
TmFtZX0pOyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAg
IG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAg
ICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHNlZW4gPSB7fQorICAgICAgICAg
ICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAgICAgICAgICAgICAgIHwgcGFyZW50VmFy
TmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAg
ICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgje2luZGV4fSkiCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc2VlbltjaGlsZFZhck5hbWVdCisgICAg
ICAgICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsiCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsiCisgICAgICAgICAgICAg
ICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVlCisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFtZX0gPSAj
e2xvYWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIgZ2V0
dGluZyByaWQgb2YgdGhlICQgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICAjIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MjcKKyAgICAgICAgICAgICAgICAg
ICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hp
bGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
ICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5h
bCBvciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZEFy
Z3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5kID09IDph
bm9uT3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRWYXJO
YW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFkYXB0
b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJndW1l
bnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRJ
bnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5PworICAg
ICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygiICsgb3Bl
cmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlB
cmd1bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0cyAiYWRh
cHRvci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBpbnRlcm5h
bEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNj
ZXB0SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpOyIK
KyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1w
dHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJhbmRzTGF0
ZSgiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybjsiCisgICAgICAgICAgICBvdXRwLnB1dHMg
In0iCisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0
Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
Q29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgorI2luY2x1ZGUgIlZNLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpCMzsKKworbmFtZXNwYWNlIHsKKworLy8gTm90aGluZyBmYW5jeSBm
b3Igbm93OyB3ZSBqdXN0IHVzZSB0aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlvbiBtYWNoaW5lcnku
CisjZGVmaW5lIENIRUNLKHgpIFJFTEVBU0VfQVNTRVJUKHgpCisKK1ZNKiB2bTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVCBjb21waWxlQW5kUnVuKFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIENDYWxs
SGVscGVycyBqaXQodm0pOworICAgIGdlbmVyYXRlKHByb2NlZHVyZSwgaml0KTsKKyAgICBMaW5r
QnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOworICAgIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoInRlc3RiMyIpKTsKKyAg
ICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVu
dHMuLi4pPihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gZnVu
Y3Rpb24oYXJndW1lbnRzLi4uKTsKK30KKwordm9pZCB0ZXN0NDIoKQoreworICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFs
dWUqIGNvbnN0NDIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgNDIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwg
T3JpZ2luKCksIGNvbnN0NDIpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Mp
ID09IDQyKTsKK30KKworI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBkYXRhTG9nKCN0ZXN0ICI6XG4iKTsgICAgICAgICAgICAgICAgICAg
XAorICAgICAgICB0ZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBkYXRhTG9nKCIgICAgT0shXG4iKTsgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hp
bGUgKGZhbHNlKTsKKwordm9pZCBydW4oKQoreworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGlu
ZygpOworICAgIHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisKKyAgICBS
VU4odGVzdDQyKCkpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIFVOVVNFRF9QQVJBTShhcmdjKTsKKyAgICBV
TlVTRURfUEFSQU0oYXJndik7CisgICAgCisgICAgcnVuKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNp
bmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNs
dWRlICJTdGFja0FsaWdubWVudC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgYXR0ZW1wdEFzc2lnbm1lbnQo
CisgICAgU3RhY2tTbG90KiBzbG90LCBpbnRwdHJfdCBvZmZzZXRGcm9tRlAsIGNvbnN0IFZlY3Rv
cjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJT
bG90IDogb3RoZXJTbG90cykgeworICAgICAgICBpZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQ
KCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKG9mZnNldEZyb21GUCArIHNs
b3QtPmJ5dGVTaXplKCkgPj0gb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYgKG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgKyBv
dGhlclNsb3QtPmJ5dGVTaXplKCkgPj0gb2Zmc2V0RnJvbUZQKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIHNsb3QtPnNldE9mZnNldEZyb21GUChvZmZzZXRGcm9tRlAp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGFzc2lnbihTdGFja1Nsb3QqIHNsb3QsIGNv
bnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBpZiAoYXR0ZW1wdEFz
c2lnbm1lbnQoc2xvdCwgLXN0YXRpY19jYXN0PGludHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwg
b3RoZXJTbG90cykpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoU3RhY2tTbG90KiBvdGhl
clNsb3QgOiBvdGhlclNsb3RzKSB7CisgICAgICAgIGlmIChvdGhlclNsb3QtPm9mZnNldEZyb21G
UCgpCisgICAgICAgICAgICAmJiBhdHRlbXB0QXNzaWdubWVudChzbG90LCBvdGhlclNsb3QtPm9m
ZnNldEZyb21GUCgpIC0gc2xvdC0+Ynl0ZVNpemUoKSwgb3RoZXJTbG90cykpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30K
KworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBj
b2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVTdGFjayIp
OworCisgICAgLy8gQWxsb2NhdGUgYWxsIG9mIHRoZSBsb2NrZWQgc2xvdHMgaW4gb3JkZXIuIFRo
aXMgaXMga2luZCBvZiBhIGNyYXp5IGFsZ29yaXRobSB0byBhbGxvdyBmb3IKKyAgICAvLyB0aGUg
cG9zc2liaWxpdHkgb2Ygc3RhY2sgc2xvdHMgYmVpbmcgYXNzaWduZWQgZnJhbWUgb2Zmc2V0cyBi
ZWZvcmUgd2UgZXZlbiBnZXQgaGVyZS4KKyAgICBBU1NFUlQoIWNvZGUuZnJhbWVTaXplKCkpOwor
ICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHM7CisgICAgVmVj
dG9yPFN0YWNrU2xvdCo+IGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdDsKKyAgICBmb3IgKFN0YWNr
U2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIHN3aXRjaCAoc2xvdC0+
a2luZCgpKSB7CisgICAgICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgorICAgICAgICAg
ICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgICAgIGFzc2lnbmVkTG9j
a2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LmFwcGVuZChzbG90KTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAg
ICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgICAgIC8vIEFzIGEg
bWF0dGVyIG9mIHNhbml0eSwgdW5hc3NpZ24gdGhpcy4gTWF5YmUgaXQgd291bGQgYmUgZ29vZCB0
byBldmVuIGhhdmUgYQorICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24gcnVsZSB0aGF0IHRo
aXMgY2Fubm90IGhhcHBlbi4KKyAgICAgICAgICAgICAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAo
MCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KyAgICAvLyBUaGlzIGlzIGEgZmFpcmx5IGV4cGVuc2l2ZSBsb29wLCBidXQgaXQncyBPSyBiZWNh
dXNlIHdlJ2xsIHVzdWFsbHkgb25seSBoYXZlIGEgaGFuZGZ1bCBvZgorICAgIC8vIGxvY2tlZCBz
dGFjayBzbG90cy4KKyAgICB3aGlsZSAoIWxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0
LnRha2VMYXN0KCk7CisgICAgICAgIGFzc2lnbihzbG90LCBhc3NpZ25lZExvY2tlZFN0YWNrU2xv
dHMpOworICAgICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAg
IH0KKworICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIGFub255bW91cyBzbG90cy4gTm90ZSB0aGF0
IHRoZW9yZXRpY2FsbHkgd2Ugc2hvdWxkIGRvIGFuIGVzY2FwZSBhbmFseXNpcworICAgIC8vIGhl
cmUuIEJ1dCwgY3VycmVudGx5IEFpciBkb2Vzbid0IHN1cHBvcnQgZXNjYXBpbmcgYSBTdGFja1Ns
b3QhCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBlc2NhcGluZyBhIFN0YWNrU2xvdCBh
bmQgYWRkIGVzY2FwZSBhbmFseXNpcyB0byBhbGxvY2F0ZVN0YWNrKCkuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQzMAorCisgICAgYXV0byBpc1Jl
bGV2YW50ID0gW10gKGNvbnN0IEFyZyYgYXJnKSAtPiBib29sIHsKKyAgICAgICAgcmV0dXJuIGFy
Zy5pc1N0YWNrKCkgJiYgYXJnLnN0YWNrU2xvdCgpLT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6
QW5vbnltb3VzOworICAgIH07CisKKyAgICBMaXZlbmVzczxBcmc+IGxpdmVuZXNzKGNvZGUpOwor
ICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNl
KGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3Rz
OworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgTGl2ZW5l
c3M8QXJnPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworCisgICAgICAg
IGF1dG8gaW50ZXJmZXJlID0gWyZdICgpIHsKKyAgICAgICAgICAgIC8vIEZvcm0gYSBjbGlxdWUg
b2Ygc3RhY2sgc2xvdHMgdGhhdCBpbnRlcmZlcmUuIEZpcnN0IGZpbmQgdGhlIGxpc3Qgb2Ygc3Rh
Y2sgc2xvdHMKKyAgICAgICAgICAgIC8vIHRoYXQgYXJlIGxpdmUgcmlnaHQgbm93LgorICAgICAg
ICAgICAgc2xvdHMucmVzaXplKDApOworICAgICAgICAgICAgZm9yIChBcmcgYXJnIDogbG9jYWxD
YWxjLmxpdmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1JlbGV2YW50KGFyZykpCisgICAg
ICAgICAgICAgICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tTbG90KCkpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNsb3RzLnNpemUoKTsg
KytpKSB7CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBvdXRlciA9IHNsb3RzW2ldOworICAg
ICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgc2xvdHMuc2l6ZSgpOyAr
K2opIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBpbm5lciA9IHNsb3RzW2ldOwor
CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogZmlyc3QgPSBvdXRlcjsKKyAgICAgICAg
ICAgICAgICAgICAgU3RhY2tTbG90KiBzZWNvbmQgPSBpbm5lcjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGZpcnN0LT5pbmRleCgpID4gc2Vjb25kLT5pbmRleCgpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgc3RkOjpzd2FwKGZpcnN0LCBzZWNvbmQpOworCisgICAgICAgICAgICAgICAgICAg
IGludGVyZmVyZW5jZVtmaXJzdF0uYWRkKHNlY29uZCk7CisgICAgICAgICAgICAgICAgICAgIGlu
dGVyZmVyZW5jZVtzZWNvbmRdLmFkZChmaXJzdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGludGVyZmVyZSgpOworICAgICAgICAKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgt
LTspIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgp
KTsKKyAgICAgICAgICAgIGludGVyZmVyZSgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
Tm93IHdlIGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0aGlzIGFsZ29yaXRo
bSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKKyAgICAvLyBTdGFja1Nsb3Qgd2UganVzdCB3
YW50IHRvIGZpbmQgdGhlIG9mZnNldEZyb21GUCB0aGF0IGlzIGNsb3Nlc3QgdG8gemVybyB3aGls
ZSBlbnN1cmluZyBubworICAgIC8vIG92ZXJsYXAgd2l0aCBvdGhlciBTdGFja1Nsb3RzIHRoYXQg
dGhpcyBvdmVybGFwcyB3aXRoLgorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBvdGhlclNsb3RzOwor
ICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAg
aWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAvLyBBbHJlYWR5IGFzc2ln
bmVkIGFuIG9mZnNldC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAg
ICAgSGFzaFNldDxTdGFja1Nsb3QqPiYgaW50ZXJmZXJpbmdTbG90cyA9IGludGVyZmVyZW5jZVtz
bG90XTsKKyAgICAgICAgb3RoZXJTbG90cy5yZXNpemUoYXNzaWduZWRMb2NrZWRTdGFja1Nsb3Rz
LnNpemUoKSArIGludGVyZmVyaW5nU2xvdHMuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7ICsraSkKKyAgICAg
ICAgICAgIG90aGVyU2xvdHNbaV0gPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHNbaV07CisgICAg
ICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7
CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBpbnRlcmZlcmluZ1Nsb3RzKQor
ICAgICAgICAgICAgb3RoZXJTbG90c1tuZXh0SW5kZXgrK10gPSBvdGhlclNsb3Q7CisKKyAgICAg
ICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOworICAgIH0KKworICAgIC8vIEZpZ3VyZSBvdXQg
aG93IG11Y2ggc3RhY2sgd2UncmUgdXNpbmcgZm9yIHN0YWNrIHNsb3RzLgorICAgIHVuc2lnbmVk
IGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSAwOworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDog
Y29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IHN0
ZDo6bWF4KAorICAgICAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cywKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PHVuc2lnbmVkPigtc2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKKyAgICB9CisK
KyAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0
YWNrQWxpZ25tZW50Qnl0ZXMoKSwgZnJhbWVTaXplRm9yU3RhY2tTbG90cyk7CisKKyAgICAvLyBO
b3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQgYXJlYSB3ZSBuZWVkLgorICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5z
dCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgewor
ICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDggYnl0ZXMgb2YgdGhlIGNhbGwg
YXJnLiBCdXQgdGhhdCdzIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBzdWNoIGFuIGF3ZXNv
bWUgYXNzdW1wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKKyAgICAgICAgICAgICAgICAgICAg
QVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29kZS5yZXF1
ZXN0Q2FsbEFyZ0FyZWFTaXplKGFyZy5vZmZzZXQoKSArIDgpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvZGUuc2V0RnJhbWVTaXpl
KGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgKyBjb2RlLmNhbGxBcmdBcmVhU2l6ZSgpKTsKKworICAg
IC8vIEZpbmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1c2UgQWRkcidzIGluc3RlYWQgb2Yg
U3RhY2tTbG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcworICAgIC8vIHRyYW5zZm9ybWF0aW9uIHNp
bmNlIHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJyYXkgdG8gZmlndXJlIG91dCB3aGlj
aCBTdGFja1Nsb3QgYW55CisgICAgLy8gb2Zmc2V0LWZyb20tRlAgcmVmZXJzIHRvLgorCisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0
IDogKmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7Cisg
ICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCisgICAg
ICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgYXJnLnN0YWNrU2xvdCgpLT5vZmZz
ZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIo
CisgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
LAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUo
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBbGxvY2F0ZVN0YWNrX2gKKyNkZWZpbmUgQWlyQWxs
b2NhdGVTdGFja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgYWxs
b2NhdGVzIFN0YWNrU2xvdHMgdG8gcGxhY2VzIG9uIHRoZSBzdGFjay4gSXQgZmlyc3QgYWxsb2Nh
dGVzIHRoZSBwaW5uZWQgb25lcyBpbiBpbmRleAorLy8gb3JkZXIgYW5kIHRoZW4gaXQgYWxsb2Nh
dGVzIHRoZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4KKwordm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUm
KTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckFsbG9jYXRlU3RhY2tfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFyZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lk
IEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5k
KSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBUbXA6CisgICAgICAgIG91dC5wcmludCh0bXAoKSk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEltbToKKyAgICAgICAgb3V0LnByaW50KCIkIiwg
bV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAgb3V0
LnByaW50ZigiJDB4JWxseCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
QWRkcjoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJbmRleDoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAg
b3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLCIs
IGluZGV4KCkpOworICAgICAgICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0LnBy
aW50KCIsIiwgc2NhbGUoKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAg
b3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgcG9pbnRlckR1bXAo
c3RhY2tTbG90KCkpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYWxsQXJnOgor
ICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOwor
ICAgICAgICBvdXQucHJpbnQoIihjYWxsQXJnKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBSZWxDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNS
ZXN1bHRDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNwZWNpYWw6Cisg
ICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJUbXAuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1
ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFja1Nsb3Q7CisKKy8vIFRoaXMgY2xh
c3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSB3aWxsIHNheSBp
dCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3QoLi4uLCBBcmc6OmltbSg1KSwg
QXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1YmxpYzoKKyAgICAv
LyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSBo
YXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtpbmQgOiBpbnQ4X3QgeworICAg
ICAgICBJbnZhbGlkLAorICAgICAgICBUbXAsCisgICAgICAgIEltbSwKKyAgICAgICAgSW1tNjQs
CisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAorICAgICAgICBDYWxsQXJnLAorICAgICAg
ICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAgUmVzQ29uZCwKKyAgICAgICAgU3Bl
Y2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAgICAgICBVc2UsCisg
ICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsKKworICAgIGVudW0gVHlwZSA6IGlu
dDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAgIH07CisKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOworCisgICAgc3RhdGljIGJvb2wgaXNVc2UoUm9sZSBy
b2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgor
ICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBj
YXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
cm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yQjNUeXBl
KEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAg
Y2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNhc2UgSW50NjQ6Cisg
ICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAg
cmV0dXJuIEZQOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gR1A7CisgICAgfQorCisgICAgQXJnKCkKKyAgICAgICAgOiBtX2tpbmQoSW52
YWxpZCkKKyAgICB7CisgICAgfQorCisgICAgQXJnKEFpcjo6VG1wIHRtcCkKKyAgICAgICAgOiBt
X2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFzZSh0bXApCisgICAgeworICAgIH0KKworICAgIHN0
YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9raW5kID0gSW1tOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2
YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGlt
bTY0KGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGFkZHIoQWly
OjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJh
c2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9
IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9v
ZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3Rh
dGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZhbHVlLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAg
eworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFsdWUpOwor
ICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9mZnNldDsgLy8gSSBrbm93LCB5dWNrLgorICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgY2FsbEFyZyhpbnQzMl90
IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBDYWxsQXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVu
c2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBj
YXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2FzZSA0OgorICAgICAgICBjYXNlIDg6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBs
b2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsK
KyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgMjoK
KyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICByZXR1
cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJl
dHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbmRleChBaXI6OlRt
cCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5zaWduZWQgc2NhbGUgPSAxLCBpbnQzMl90IG9mZnNl
dCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NF
UlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRTY2FsZShzY2FsZSkpOwor
ICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW5kZXg7CisgICAg
ICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9pbmRleCA9IGluZGV4
OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KHNjYWxlKTsK
KyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gUmVsQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
Y29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBB
cmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbikKKyAg
ICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZXNDb25k
OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzcGVjaWFsKEFpcjo6U3BlY2lhbCogc3Bl
Y2lhbCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBTcGVjaWFsOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CisgICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3Ro
ZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAg
ICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAgICYmIG1fc2NhbGUg
PT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXJn
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRo
aXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9raW5kOworICAgIH0KKworICAgIGJvb2wgaXNUbXAoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7CisgICAgfQorCisgICAgYm9vbCBpc0ltbSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTsKKyAgICB9CisKKyAgICBi
b29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW02
NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhY2s7CisgICAgfQorCisgICAgYm9vbCBp
c0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBDYWxsQXJn
OworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKKyAgICB9CisKKyAgICBi
b29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJl
c0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOworICAgIH0KKworICAgIGJvb2wgaXNBbGl2ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSB8fCBpc1N0YWNrKCk7CisgICAg
fQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisKKyAgICBpbnQ2NF90
IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW1tIHx8IGtp
bmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisKKyAgICB2
b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBJbW02NCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0
PGludHB0cl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIEFpcjo6VG1wIGJhc2UoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRl
eCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgYm9vbCBoYXNPZmZzZXQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBB
ZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAg
IGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBp
bnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2luZCgpID09IFN0YWNr
KQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fc2NhbGUpOworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgp
ID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0
KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgaW5kZXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJl
dHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9zY2Fs
ZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgQWlyOjpTcGVjaWFsKiBz
cGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3BlY2lhbCk7
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQpOwor
ICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQVG1wKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlAoKTsKKyAgICB9
CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3Np
dGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAg
ICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6Cisg
ICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBS
ZWxDb25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJl
dHVybiBpc0dQVG1wKCk7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJn
IGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEZQIHZhbHVlLgorICAg
IGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAg
ICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJlc0Nv
bmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5k
ZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAg
Y2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxvdyBJbW02NCBhcyBhIGRvdWJsZSBpbW1lZGlhdGUu
IFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzRlBUbXAo
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFzVHlwZSgpIGNvbnN0CisgICAgewor
ICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2Fz
ZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmlndW91cyBmb3Igc29tZSBhcmcga2lu
ZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisKKyAgICBib29sIGlzVHlwZShUeXBl
IHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2Fz
ZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQKCk7CisgICAgICAgIGNhc2UgRlA6CisgICAg
ICAgICAgICByZXR1cm4gaXNGUCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc0dQ
UigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigp
OworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRtcCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAgICB9CisKKyAgICBGUFJS
ZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcHIoKTsKKyAgICB9
CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNU
bXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdw
VG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwVG1wSW5kZXgo
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1w
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnRtcEluZGV4KCk7Cisg
ICAgfQorCisgICAgQXJnIHdpdGhPZmZzZXQoaW50MzJfdCBhZGRpdGlvbmFsT2Zmc2V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNPZmZzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBB
cmcoKTsKKyAgICAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90PihvZmZzZXQoKSwgYWRkaXRp
b25hbE9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIHN3aXRjaCAo
a2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGJh
c2UoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBTdGFjazoK
KyAgICAgICAgICAgIHJldHVybiBzdGFjayhzdGFja1Nsb3QoKSwgb2Zmc2V0KCkgKyBhZGRpdGlv
bmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICAgICAgcmV0dXJuIGNh
bGxBcmcob2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBJbmRleDoK
KyAgICAgICAgICAgIHJldHVybiBpbmRleChiYXNlKCksIGluZGV4KCksIHNjYWxlKCksIG9mZnNl
dCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEFyZygpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2
b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgY2FzZSBBZGRy
OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAg
ICBmdW5jdG9yKG1faW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMgaXMg
c21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBVc2VE
ZWYgcnVsZSB3aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4gRm9y
IGV4YW1wbGUsIHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVyY3gpCisgICAgLy8K
KyAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBUeXBlIGFy
Z1R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1f
a2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBh
cmdSb2xlLCBhcmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFkZHI6
CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2Us
IEdQKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0ZWRJbW0z
MigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zm
c2V0KSk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTY0IGFzVHJ1c3RlZEltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0ltbTY0KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NCh2YWx1ZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyIGFzVHJ1c3RlZEltbVB0cigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXM2NEJp
dCgpKQorICAgICAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tUHRyKHBvaW50ZXJWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6QWRkcmVzcyBhc0FkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQWRk
cigpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5ncHIo
KSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6QmFzZUluZGV4IGFzQmFzZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc0luZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCgKKyAgICAgICAgICAgIG1fYmFzZS5ncHIoKSwgbV9pbmRleC5ncHIoKSwgc3RhdGljX2Nhc3Q8
TWFjcm9Bc3NlbWJsZXI6OlNjYWxlPihsb2dTY2FsZSgpKSwKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxN
YWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gYXNSZXN1bHRDb25kaXRpb24oKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVzQ29uZCgpKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24+KG1fb2Zmc2V0KTsK
KyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIEFyZyhX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9iYXNlKFdURjo6SGFz
aFRhYmxlRGVsZXRlZFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBBcmco
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhpcyByZWFsbHkgZG9lc24ndCBoYXZlIHRvIGJl
IHRoYXQgZ3JlYXQuCisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50NjRfdD46Omhhc2go
bV9vZmZzZXQpICsgbV9raW5kICsgbV9zY2FsZSArIG1fYmFzZS5oYXNoKCkgKworICAgICAgICAg
ICAgbV9pbmRleC5oYXNoKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludDY0X3QgbV9vZmZz
ZXQgeyAwIH07CisgICAgS2luZCBtX2tpbmQgeyBJbnZhbGlkIH07CisgICAgaW50MzJfdCBtX3Nj
YWxlIHsgMSB9OworICAgIEFpcjo6VG1wIG1fYmFzZTsKKyAgICBBaXI6OlRtcCBtX2luZGV4Owor
fTsKKworc3RydWN0IEFyZ0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEFy
ZyYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgQXJnJiBhLCBjb25zdCBBcmcmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBj
b25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERl
ZmF1bHRIYXNoPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpBaXI6
OkFyZ0hhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJh
aXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OkFyZz4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpBcmc+IHsKKyAgICAvLyBCZWNhdXNl
IG1fc2NhbGUgaXMgMSBpbiB0aGUgZW1wdHkgdmFsdWUuCisgICAgc3RhdGljIGNvbnN0IGJvb2wg
ZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQXJnX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJC
YXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrVXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOwor
Citib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQorewor
ICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJh
c2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJl
dHVybiBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2lj
QmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0
bykKK3sKKyAgICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7
Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2Nr
OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIi
LCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9y
IChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIGlu
c3QsICJcbiIpOworfQorCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBk
b3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5
KGZyZXF1ZW5jeSkKK3sKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNCbG9ja19oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQWly
SW5zdC5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0
Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKK2Ns
YXNzIEluc2VydGlvblNldDsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICB0eXBl
ZGVmIFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2Nr
KiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9j
aywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2luc3RzLnNpemUoKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu
IG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVy
biBtX2luc3RzLmVuZCgpOyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0
ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKworICAgIGNvbnN0
IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0K
KyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisK
KyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0K
KyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBhcHBlbmRJbnN0KEluc3QmJiBpbnN0KQorICAg
IHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBl
bmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBl
bmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQor
CisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBjYXNlIHRvIHdoaWNoIHRoZSBicmFuY2gganVt
cHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIxIiBjYXNlIGlzIHRoZQorICAgIC8vICJlbHNl
IiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGZhbGwtdGhyb3VnaCBvZiBhIGNv
bmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0K
KyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
bV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3Nv
cnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBz
dWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKKyAgICBCYXNpY0Jsb2NrKiBz
dWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29yKGlu
ZGV4KS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVk
IGluZGV4KSB7IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0KKyAgICBTdWNjZXNz
b3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2Nrcygp
CisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBT
dWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMpOworICAgIH0KKyAgICBTdWNjZXNzb3JDb2xsZWN0
aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2Nr
cygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25z
dCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMpOworICAgIH0K
KworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVj
ZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Js
b2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3Jz
W2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29u
c3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRl
Y2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisKKyAgICBib29sIGFkZFByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNp
Y0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2
b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsKKyAgICAKKyAgICBC
YXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2ln
bmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBTdWNjZXNzb3JMaXN0IG1f
c3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgZG91
YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1Ymxp
YzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCisgICAg
ICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAg
ICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91
dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEJhc2ljQmxv
Y2sqIG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKGNv
bnN0IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAo
YmxvY2spOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQmFzaWNCbG9ja19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6OkND
YWxsU3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OmFsbFJl
Z2lzdGVycygpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFj
a1JlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6
cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVk
ZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKworQ0NhbGxTcGVjaWFs
Ojp+Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmZvckVhY2hBcmco
SW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNh
bGxiYWNrKQoreworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpVc2UsIEFyZzo6R1Ap
OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyAr
K2kpIHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBxdWVyeSB0aGUgYXJn
J3MgdHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdlCisgICAgICAgIC8v
IHJlcXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgICAgIGNh
bGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tpXS50eXBlKCkpOworICAg
IH0KK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBp
ZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3
aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAg
IGlmIChpczMyQml0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYgKGlzNjRCaXQoKSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAg
ICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgY2FzZSBBcmc6OkNh
bGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc0dQKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbaV0uaXNSZWcoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5zdC5hcmdzW2ldID09IFRtcChzY3JhdGNo
UmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuICBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiwgdW5zaWdu
ZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEgY2FuIGJlIGEgc3RhY2sgYWRkcmVzcyBmb3Ig
c3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJl
Z2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQoreworfQorCitDQ2FsbEhlbHBlcnM6
Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGpp
dCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQo
KSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICBq
aXQubW92ZShpbnN0LmFyZ3NbMV0uYXNUcnVzdGVkSW1tUHRyKCksIHNjcmF0Y2hSZWdpc3Rlcik7
CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0
LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdpc3RlclNl
dCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpCit7CisgICAgcmV0dXJu
IG1fY2xvYmJlcmVkUmVnczsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmR1bXBJbXBsKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJDQ2FsbCIpOworfQorCit2b2lk
IENDYWxsU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJmdW5jdGlvbiBjYWxsIHRoYXQgdXNlcyB0aGUgQyBjYWxsaW5nIGNvbnZl
bnRpb24uIik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJDQ2FsbFNwZWNpYWxfaAorI2RlZmluZSBBaXJDQ2FsbFNwZWNpYWxfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBVc2UgdGhpcyBzcGVjaWFsIGZv
ciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFyZyAwIGlzIG9mIGNvdXJzZSBhIFNwZWNpYWwgYXJn
IHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0NhbGxTcGVjaWFsIG9iamVjdC4gQXJnIDEgaXMgdGhl
IGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJbW1QdHIsIGEgcmVnaXN0ZXIsIG9yIGFuIGFkZHJl
c3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3MgYXJlIGp1c3QgdGhlIHNldCBvZiBhcmd1bWVudCBy
ZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwuIEZvciBhcmd1bWVudHMgdGhhdCBnbyB0bworLy8g
dGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0aGUgZ3J1bnQgd29yayBvZiBkb2luZyB0aG9zZSBz
dGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBvbmx5IHJlYXNvbiB3aHkKKy8vIHdlIHNwZWNpZnkg
dGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBhcmd1bWVudHMgdG8gYSBjYWxsIGlzIHNvIHRoYXQg
dGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBzZWUKKy8vIHRoYXQgdGhleSBnZXQgdXNlZCBoZXJl
LiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRvbWFnaWNhbGx5IHJlcG9ydCBhbGwgYXJndW1lbnQg
cmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2VkIGJlY2F1c2UgaWYgd2UgaGFkIGEgY2FsbCB0aGF0
IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhleSdkIGFwcGVhciB0byBiZSBsaXZlIHVudGlsIHNv
bWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhlIHByb2xvZ3VlLCB3aGljaGV2ZXIgaGFwcGVuZWQg
c29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNpYWwgOiBwdWJsaWMgU3BlY2lhbCB7CitwdWJsaWM6
CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAgfkNDYWxsU3BlY2lhbCgpOworCisgICAgLy8gWW91
IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4gSXQganVzdCBzbyBo
YXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBub3QKKyAgICAvLyB1c2VkIGZvciBhcmd1bWVu
dHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0aGlzIGlzIHRoZSBv
bmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8gdGhpcyBzcGVjaWFsIHRvIGJlIHNwZWNpZmlj
IHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNoUmVnaXN0ZXIgPSBH
UFJJbmZvOjpub25BcmdHUFIwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKElu
c3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRl
OworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFj
ayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNl
ZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBvdmVycmlkZTsKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25D
b250ZXh0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVk
UmVncyhJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZFJlZ3M7
Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzQmFz
aWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworQ29kZTo6Q29kZSgpCit7Cit9CisKK0NvZGU6On5Db2RlKCkKK3sKK30KKwor
QmFzaWNCbG9jayogQ29kZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2sobV9ibG9ja3Muc2l6
ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsK
KyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUs
IFN0YWNrU2xvdEtpbmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQoreworICAgIHN0ZDo6
dW5pcXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChieXRlU2l6ZSwgbV9zdGFj
a1Nsb3RzLnNpemUoKSwga2luZCwgdmFsdWUpKTsKKyAgICBTdGFja1Nsb3QqIHJlc3VsdCA9IHNs
b3QuZ2V0KCk7CisgICAgbV9zdGFja1Nsb3RzLmFwcGVuZChXVEY6Om1vdmUoc2xvdCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1NwZWNpYWwqIENvZGU6OmFkZFNwZWNpYWwoc3RkOjp1bmlx
dWVfcHRyPFNwZWNpYWw+IHNwZWNpYWwpCit7CisgICAgU3BlY2lhbCogcmVzdWx0ID0gc3BlY2lh
bC5nZXQoKTsKKyAgICBtX3NwZWNpYWxzLmFwcGVuZChXVEY6Om1vdmUoc3BlY2lhbCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK0NDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxTcGVjaWFsKCkK
K3sKKyAgICBpZiAoIW1fY0NhbGxTcGVjaWFsKSB7CisgICAgICAgIG1fY0NhbGxTcGVjaWFsID0g
c3RhdGljX2Nhc3Q8Q0NhbGxTcGVjaWFsKj4oCisgICAgICAgICAgICBhZGRTcGVjaWFsKHN0ZDo6
bWFrZV91bmlxdWU8Q0NhbGxTcGVjaWFsPigpKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fY0Nh
bGxTcGVjaWFsOworfQorCit2b2lkIENvZGU6OnJlc2V0UmVhY2hhYmlsaXR5KCkKK3sKKyAgICBC
Mzo6cmVzZXRSZWFjaGFiaWxpdHkobV9ibG9ja3MpOworfQorCit2b2lkIENvZGU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworICAgIGlmIChzdGFja1Ns
b3RzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xvdHM6XG4iKTsKKyAg
ICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisgICAgICAgICAgICBv
dXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzbG90KSwgIlxuIik7CisgICAgfQorICAgIGlmIChz
cGVjaWFscygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlNwZWNpYWxzOlxuIik7Cisg
ICAgICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6IHNwZWNpYWxzKCkpCisgICAgICAgICAgICBv
dXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzcGVjaWFsKSwgIlxuIik7CisgICAgfQorICAgIG91
dC5wcmludCgiRnJhbWUgc2l6ZTogIiwgbV9mcmFtZVNpemUsICJcbiIpOworICAgIG91dC5wcmlu
dCgiQ2FsbCBhcmcgYXJlYSBzaXplOiAiLCBtX2NhbGxBcmdBcmVhU2l6ZSwgIlxuIik7CisgICAg
b3V0LnByaW50KCJDYWxsZWUgc2F2ZXM6ICIsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycywgIlxuIik7
Cit9CisKK3Vuc2lnbmVkIENvZGU6OmZpbmRGaXJzdEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0Cit7CisgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSgpICYmICFhdChpbmRleCkpCisgICAg
ICAgIGluZGV4Kys7CisgICAgcmV0dXJuIGluZGV4OworfQorCit1bnNpZ25lZCBDb2RlOjpmaW5k
TmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbmRG
aXJzdEJsb2NrSW5kZXgoaW5kZXggKyAxKTsKK30KKworQmFzaWNCbG9jayogQ29kZTo6ZmluZE5l
eHRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICByZXR1cm4gYXQoZmluZE5l
eHRCbG9ja0luZGV4KGJsb2NrLT5pbmRleCgpKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzAzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyQ29kZV9oCisjZGVmaW5lIEFpckNvZGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVk
ZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKKyNp
bmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ0NhbGxT
cGVjaWFsOworCisvLyBUaGlzIGlzIGFuIElSIHRoYXQgaXMgdmVyeSBjbG9zZSB0byB0aGUgYmFy
ZSBtZXRhbC4gSXQgcmVxdWlyZXMgYWJvdXQgNDB4IG1vcmUgYnl0ZXMgdGhhbiB0aGUKKy8vIGdl
bmVyYXRlZCBtYWNoaW5lIGNvZGUgLSBmb3IgZXhhbXBsZSBpZiB5b3UncmUgZ2VuZXJhdGluZyAx
TUIgb2YgbWFjaGluZSBjb2RlLCB5b3UgbmVlZCBhYm91dAorLy8gNDBNQiBvZiBBaXIuCisKK2Ns
YXNzIENvZGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvZGUpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENvZGUoKTsKKyAgICB+Q29kZSgpOworCisg
ICAgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAg
U3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQs
IFN0YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOworCisgICAgU3BlY2lhbCogYWRkU3BlY2lhbChz
dGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4pOworCisgICAgLy8gVGhpcyBpcyB0aGUgc3BlY2lhbCB5
b3UgbmVlZCB0byBtYWtlIGEgQyBjYWxsIQorICAgIENDYWxsU3BlY2lhbCogY0NhbGxTcGVjaWFs
KCk7CisKKyAgICBUbXAgbmV3VG1wKEFyZzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAgICAgICAgIHJldHVybiBU
bXA6OmdwVG1wRm9ySW5kZXgobV9udW1HUFRtcHMrKyk7CisgICAgICAgIGNhc2UgQXJnOjpGUDoK
KyAgICAgICAgICAgIHJldHVybiBUbXA6OmZwVG1wRm9ySW5kZXgobV9udW1GUFRtcHMrKyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1UbXBzKEFyZzo6VHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAg
ICAgICAgICAgIHJldHVybiBtX251bUdQVG1wczsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAg
ICAgICAgICAgcmV0dXJuIG1fbnVtRlBUbXBzOworICAgICAgICB9CisgICAgfQorCisgICAgdW5z
aWduZWQgY2FsbEFyZ0FyZWFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsQXJnQXJlYVNpemU7
IH0KKworICAgIC8vIFlvdSBjYW4gY2FsbCB0aGlzIGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gdG8g
Zm9yY2UgYSBtaW5pbXVtIGNhbGwgYXJnIGFyZWEgc2l6ZS4KKyAgICB2b2lkIHJlcXVlc3RDYWxs
QXJnQXJlYVNpemUodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fY2FsbEFyZ0FyZWFT
aXplID0gc3RkOjptYXgoCisgICAgICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXRlcygpLCBzaXplKSkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZyYW1lU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVTaXplOyB9CisKKyAgICAvLyBPbmx5IHBoYXNlcyB0
aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24gYXJlIGFsbG93ZWQgdG8gc2V0IHRoaXMuIEN1cnJlbnRs
eSwgb25seQorICAgIC8vIEFpcjo6YWxsb2NhdGVTdGFjaygpIGRvZXMgdGhpcy4KKyAgICB2b2lk
IHNldEZyYW1lU2l6ZSh1bnNpZ25lZCBmcmFtZVNpemUpCisgICAgeworICAgICAgICBtX2ZyYW1l
U2l6ZSA9IGZyYW1lU2l6ZTsKKyAgICB9CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2Fs
bGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQorCisg
ICAgLy8gUmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIGRlbGV0ZXMgdW5yZWFjaGFibGUgYmxv
Y2tzLgorICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVy
YXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAg
IC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVs
bCBhbmQgaW5kZXgnID49IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmRGaXJzdEJsb2NrSW5kZXgo
dW5zaWduZWQgaW5kZXgpIGNvbnN0OworCisgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4
JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPiBpbmRleC4KKyAgICB1
bnNpZ25lZCBmaW5kTmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0OworCisgICAg
QmFzaWNCbG9jayogZmluZE5leHRCbG9jayhCYXNpY0Jsb2NrKikgY29uc3Q7CisKKyAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAg
ICA6IG1fY29kZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvZGUmIGNvZGUsIHVuc2lnbmVk
IGluZGV4KQorICAgICAgICAgICAgOiBtX2NvZGUoJmNvZGUpCisgICAgICAgICAgICAsIG1faW5k
ZXgobV9jb2RlLT5maW5kRmlyc3RCbG9ja0luZGV4KGluZGV4KSkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fY29kZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBt
X2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgY29uc3QgQ29kZSogbV9jb2RlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07
CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAw
KTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBz
aXplKCkpOyB9CisKKyAgICBjbGFzcyBTdGFja1Nsb3RzQ29sbGVjdGlvbiB7CisgICAgcHVibGlj
OgorICAgICAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQorICAgICAg
ICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5z
aWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNrU2xvdHMuc2l6ZSgpOyB9
CisgICAgICAgIFN0YWNrU2xvdCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZS5tX3N0YWNrU2xvdHNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFN0YWNrU2xvdCogb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAg
ICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24s
IHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0
aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3Qg
U3RhY2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAgU3RhY2tTbG90c0NvbGxl
Y3Rpb24gc3RhY2tTbG90cygpIGNvbnN0IHsgcmV0dXJuIFN0YWNrU2xvdHNDb2xsZWN0aW9uKCp0
aGlzKTsgfQorICAgIAorICAgIGNsYXNzIFNwZWNpYWxzQ29sbGVjdGlvbiB7CisgICAgcHVibGlj
OgorICAgICAgICBTcGVjaWFsc0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAg
ICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFscy5zaXplKCk7IH0KKyAg
ICAgICAgU3BlY2lhbCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5t
X3NwZWNpYWxzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTcGVjaWFsKiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwg
bV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
dGVyYXRvcihjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGlu
ZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAg
ICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgU3BlY2lhbCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFNwZWNpYWxzQ29sbGVj
dGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAg
ICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29k
ZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTcGVjaWFsc0NvbGxlY3Rpb24gc3BlY2lhbHMoKSBj
b25zdCB7IHJldHVybiBTcGVjaWFsc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAgCitwcml2YXRl
OgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOwor
ICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4+IG1fc3BlY2lhbHM7CisgICAgQ0NhbGxTcGVj
aWFsKiBtX2NDYWxsU3BlY2lhbCB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX251bUdQVG1w
cyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUZQVG1wcyB7IDAgfTsKKyAgICB1bnNpZ25lZCBt
X2ZyYW1lU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2NhbGxBcmdBcmVhU2l6ZSB7IDAgfTsK
KyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7Cit9OworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEFpckZyZXF1
ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVl
bnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpckZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkFpckhhbmRs
ZUNhbGxlZVNhdmVzLmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisjaW5jbHVk
ZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzSW5k
ZXhNYXAuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUs
IENDYWxsSGVscGVycyYgaml0KQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAg
ICAgIHZhbGlkYXRlKGNvZGUsICJpbml0aWFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkp
IHsKKyAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhj
b2RlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0
aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXph
dGlvbnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDQ1NgorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBoYXZlIGEgcmVhbCByZWdpc3Rl
ciBhbGxvY2F0b3IuIFRoZW4sIHdlIGNvdWxkIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKQorICAgIC8v
IGluIHBsYWNlIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3Igb25seSBmb3IgdGVzdGluZy4KKyAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1
NworICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKKworICAgIC8vIFByaW9yIHRvIHRoaXMgcG9p
bnQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBl
eHBsaWNpdC4gSXQgYWxzbworICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2gg
Y2FsbGVlLXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgorICAgIGhhbmRsZUNhbGxl
ZVNhdmVzKGNvZGUpOworCisgICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcg
QXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcwor
ICAgIC8vIHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3Vs
ZCBiZSBwcmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQorICAgIC8vIHNob3VsZG4n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgorICAgIGFsbG9jYXRlU3RhY2so
Y29kZSk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBoYXZlIGEgY29kZSBsYXlv
dXQgb3B0aW1pemF0aW9uIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ3OAorCisgICAgLy8gRklYTUU6IFdlIG5lZWQgYSBsYXRlIGxpdmVu
ZXNzIGFuYWx5c2lzIG92ZXIgcmVnaXN0ZXJzIHRvIGZpbGwgaW4gdGhlCisgICAgLy8gU3BlY2lh
bDo6cmVwb3J0VXNlZFJlZ2lzdGVycygpLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA1MTEKKworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisg
ICAgICAgIHZhbGlkYXRlKGNvZGUsICJmaW5hbCIpOworCisgICAgaWYgKHNob3VsZER1bXBJUigp
KSB7CisgICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAgICAg
ICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIEFuZCBub3csIHdlIGdlbmVyYXRlIGNv
ZGUuCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LmFkZFB0cihDQ2Fs
bEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVy
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBHZW5lcmF0aW9uQ29udGV4dCBjb250ZXh0
OworICAgIGNvbnRleHQuY29kZSA9ICZjb2RlOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEND
YWxsSGVscGVyczo6TGFiZWw+IGJsb2NrTGFiZWxzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNvZGUuc2l6
ZSgpKTsKKworICAgIGF1dG8gbGluayA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAsIEJh
c2ljQmxvY2sqIHRhcmdldCkgeworICAgICAgICBpZiAoYmxvY2tMYWJlbHNbdGFyZ2V0XS5pc1Nl
dCgpKSB7CisgICAgICAgICAgICBqdW1wLmxpbmtUbyhibG9ja0xhYmVsc1t0YXJnZXRdLCAmaml0
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJsb2NrSnVtcHNb
dGFyZ2V0XS5hcHBlbmQoanVtcCk7CisgICAgfTsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CisgICAgICAgIGJsb2NrSnVtcHNbYmxvY2tdLmxpbmsoJmppdCk7CisgICAg
ICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49IDEpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+YXQoaSkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7CisgICAgICAgIH0K
KworICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5vcGNvZGUgPT0gSnVtcAorICAgICAgICAgICAg
JiYgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmluZE5leHRCbG9jayhibG9jaykp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5vcGNv
ZGUgPT0gUmV0KSB7CisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50
IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bworICAgICAg
ICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgorICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlv
bkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAg
PSBibG9jay0+bGFzdCgpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6ICpibG9jaykKKyAgICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRlKGppdCwg
Y29udGV4dCk7CisgICAgICAgIHN3aXRjaCAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgeworICAg
ICAgICBjYXNlIDA6CisgICAgICAgICAgICBBU1NFUlQoIWp1bXAuaXNTZXQoKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9j
ay0+c3VjY2Vzc29yQmxvY2soMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
MjoKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAg
ICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxvY2soMSkgIT0gY29kZS5maW5kTmV4dEJs
b2NrKGJsb2NrKSkKKyAgICAgICAgICAgICAgICBsaW5rKGppdC5qdW1wKCksIGJsb2NrLT5zdWNj
ZXNzb3JCbG9jaygxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0
LmxhdGVQYXRocykKKyAgICAgICAgbGF0ZVBhdGgtPnJ1bihqaXQsIGNvbnRleHQpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGVfaAorI2RlZmluZSBBaXJH
ZW5lcmF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xh
c3MgQ29kZTsKKworLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFu
eSBzdGFjayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CisvLyByZWdp
c3RlciBhbGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLCBhbmQgdGhlbiBn
ZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuCisvLyBDQ2FsbEhlbHBlcnMgaW5zdGFu
Y2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcyBpbiB0aGUgc3VwcGxpZWQgY29k
ZSBhcyBpdCBpcworLy8gZ2VuZXJhdGluZy4KK3ZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVs
cGVycyYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworLy8gVGhpcyBpcyBnZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyNpbmNsdWRl
ICJBaXJPcGNvZGVHZW5lcmF0ZWQuaCIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29u
dGV4dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5l
cmF0aW9uQ29udGV4dF9oCisjZGVmaW5lIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9u
Q29udGV4dCB7CisgICAgdHlwZWRlZiB2b2lkIExhdGVQYXRoRnVuY3Rpb24oQ0NhbGxIZWxwZXJz
JiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8TGF0ZVBhdGhG
dW5jdGlvbj4gTGF0ZVBhdGg7CisKKyAgICBWZWN0b3I8UmVmUHRyPExhdGVQYXRoPj4gbGF0ZVBh
dGhzOworICAgIENvZGUqIGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGlv
bkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRs
ZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNh
dmVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGhh
bmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KGNvZGUsICJoYW5kbGVDYWxsZWVTYXZlcyIpOworCisgICAgUmVnaXN0ZXJTZXQgdXNlZENhbGxl
ZVNhdmVzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAg
Zm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBG
YXN0KAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsKKyAgICAgICAgICAgICAgICAg
ICAgLy8gQXQgZmlyc3Qgd2UganVzdCByZWNvcmQgYWxsIHVzZWQgcmVncy4KKyAgICAgICAgICAg
ICAgICAgICAgdXNlZENhbGxlZVNhdmVzLnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHdlIGZpbHRlciB0byByZWFsbHkg
Z2V0IHRoZSBjYWxsZWUgc2F2ZXMuCisgICAgdXNlZENhbGxlZVNhdmVzLmZpbHRlcihSZWdpc3Rl
clNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKworICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lz
dGVycygpID0gUmVnaXN0ZXJBdE9mZnNldExpc3QodXNlZENhbGxlZVNhdmVzKTsKKworICAgIHNp
emVfdCBieXRlU2l6ZSA9IDA7CisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRy
eSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKQorICAgICAgICBieXRlU2l6ZSA9IHN0ZDo6
bWF4KHN0YXRpY19jYXN0PHNpemVfdD4oLWVudHJ5Lm9mZnNldCgpKSwgYnl0ZVNpemUpOworCisg
ICAgU3RhY2tTbG90KiBzYXZlc0FyZWEgPSBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3Rh
Y2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdl
IGNvdWxkIGhhdmUgYWxyZWFkeSBwaW5uZWQgYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlz
CisgICAgLy8gYXJlYS4KKyAgICBzYXZlc0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUp
OworCisgICAgYXV0byBhcmdGb3IgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5
KSAtPiBBcmcgeworICAgICAgICByZXR1cm4gQXJnOjpzdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9m
ZnNldCgpICsgYnl0ZVNpemUpOworICAgIH07CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9u
U2V0KGNvZGUpOworICAgIAorICAgIC8vIEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUg
cHJvbG9ndWUuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUu
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisg
ICAgICAgICAgICAwLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIGNv
ZGVbMF0tPmF0KDApLm9yaWdpbiwKKyAgICAgICAgICAgIFRtcChlbnRyeS5yZWcoKSksIGFyZ0Zv
cihlbnRyeSkpOworICAgIH0KKyAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKwor
ICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9yZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxh
c3QoKTsKKyAgICAgICAgaWYgKGxhc3Qub3Bjb2RlICE9IFJldCkKKyAgICAgICAgICAgIGNvbnRp
bnVlOworCisgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2Rl
LmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dCgKKyAgICAgICAgICAgICAgICBibG9jay0+c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIo
KSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBsYXN0Lm9yaWdpbiwKKyAgICAgICAgICAgICAgICBhcmdG
b3IoZW50cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKKyAgICAgICAgfQorICAgICAgICBpbnNlcnRp
b25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySGFuZGxlQ2FsbGVlU2F2ZXNf
aAorI2RlZmluZSBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENvZGU7CisKKy8vIFRoaXMgcGhhc2UgaWRlbnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMg
YW5kIGFkZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUgdGhlbSBpbiB0aGUKKy8vIHByb2xvZ3VlL2Vw
aWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFuZGF0b3J5IHBoYXNlLgorCisvLyBGSVhNRTog
SXQgd291bGQgYmUgY29vbCB0byBtYWtlIHRoaXMgbW9yZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBB
aXIgY2xpZW50IGFuZCBhbHNvIG1vcmUKKy8vIHBvd2VyZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUg
c2hyaW5rIHdyYXBwaW5nOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNDU4CisvLyBXZSBzaG91bGQgbWFrZSB0aGlzIGludGVyYWN0IHdpdGggdGhlIGNsaWVudDog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1OQorCit2b2lkIGhh
bmRsZUNhbGxlZVNhdmVzKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckhhbmRsZUNhbGxl
ZVNhdmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRp
b25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1
dGUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgZXhlY3V0ZUluc2VydGlvbnMoYmxvY2stPm1f
aW5zdHMsIG1faW5zZXJ0aW9ucyk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisjZGVmaW5lIEFpckluc2VydGlvblNl
dF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1
ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9j
azsKK2NsYXNzIENvZGU7CisKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248SW5zdD4gSW5zZXJ0aW9u
OworCitjbGFzcyBJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEluc2VydGlvblNldChDb2Rl
JiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBDb2Rl
JiBjb2RlKCkgeyByZXR1cm4gbV9jb2RlOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
ICAgIHZvaWQgYXBwZW5kSW5zZXJ0aW9uKFQmJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBt
X2luc2VydGlvbnMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxUPihpbnNlcnRpb24pKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgaW5zZXJ0SW5zdChzaXplX3Qg
aW5kZXgsIEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2Vy
dGlvbihpbmRleCwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7CisgICAgfQorICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGluc2VydChzaXplX3Qg
aW5kZXgsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGluc2VydElu
c3QoaW5kZXgsIEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOwor
ICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKik7CisKK3ByaXZhdGU6CisgICAg
Q29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJ
bnN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29k
ZSwgIiAiLCBsaXN0RHVtcChhcmdzKSk7CisgICAgaWYgKG9yaWdpbikgeworICAgICAgICBpZiAo
YXJncy5zaXplKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgICAgIG91dC5w
cmludCgqb3JpZ2luKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9o
CisjZGVmaW5lIEFpckluc3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckFyZy5oIgorI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworY2xhc3MgUmVnaXN0
ZXJTZXQ7CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWly
IHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBBcmdMaXN0OworCisgICAgSW5zdCgpCisgICAg
ICAgIDogb3JpZ2luKG51bGxwdHIpCisgICAgICAgICwgb3Bjb2RlKE5vcCkKKyAgICB7CisgICAg
fQorICAgIAorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbikKKyAgICAgICAg
OiBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgSW5zdChPcGNv
ZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBBcmcgYXJnLCBBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQorICAgICAgICA6IGFyZ3N7IGFyZywgYXJndW1lbnRzLi4uIH0KKyAgICAgICAgLCBvcmlnaW4o
b3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIElu
c3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRz
KQorICAgICAgICA6IGFyZ3MoYXJndW1lbnRzKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisg
ICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUg
b3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQorICAgICAgICA6IGFy
Z3MoV1RGOjptb3ZlKGFyZ3VtZW50cykpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAg
ICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhl
c2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVz
ZSB0aGVtIGZvciB0aGluZ3MgdGhhdAorICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJl
IGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5
b3UncmUKKyAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KKworICAgIC8vIFRoaXMgb25s
eSB3YWxrcyB0aG9zZSBUbXBzIHRoYXQgYXJlIGV4cGxpY2l0bHkgbWVudGlvbmVkLCBhbmQgaXQg
ZG9lc24ndCB0ZWxsIHlvdSB0aGVpciByb2xlCisgICAgLy8gb3IgdHlwZS4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoQXJnJiBhcmcgOiBhcmdzKQorICAgICAg
ICAgICAgYXJnLmZvckVhY2hUbXBGYXN0KGZ1bmN0b3IpOworICAgIH0KKworICAgIHR5cGVkZWYg
dm9pZCBFYWNoQXJnQ2FsbGJhY2soQXJnJiwgQXJnOjpSb2xlLCBBcmc6OlR5cGUpOworICAgIAor
ICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKGFyZywgcm9sZSwgdHlwZSkuIFRoaXMgZnVu
Y3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpOworCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1w
LCByb2xlLCB0eXBlKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaFRtcChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFj
aEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5
cGUgdHlwZSkgeworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIGZ1
bmN0b3IpOworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gVGhpbmcgY2FuIGJlIGVp
dGhlciBBcmcgb3IgVG1wLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAg
IC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlz
IHVubG9ja3Mgc29tZSBleHRyYSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgp
IGNvbnN0OworCisgICAgLy8gUmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJl
cmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8g
ZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0
cnVlLgorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAg
IC8vIFVzZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hv
dWxkIGJlIGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVm
ZmljaWVuY3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwo
KSByZXR1cm5zIHRydWUuCisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lz
dGVyU2V0Jik7CisKKyAgICAvLyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFs
aWQgZm9ybXMgcmlnaHQgbm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5Cisg
ICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAg
ICAvLyBBc3N1bWluZyB0aGlzIGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBu
b3csIHdpbGwgaXQgc3RpbGwgYmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlm
IHdlIHB1dCBhbiBBZGRyIHJlZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3Ig
Q2FsbEFyZywgb2YgY291cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcg
dXNlcyB0aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBu
ZWVkIHNwaWxsaW5nOworICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBz
ZWUgaWYgaXQgY2FuIHJlcGxhY2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBp
dAorICAgIC8vIGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBm
b3JFYWNoVG1wIHRvIGRvIGEgcmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBU
aGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisg
ICAgYm9vbCBhZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0
ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxs
eSBvdXIgYmFja2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJu
cyB0aGUganVtcCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3
aXRoIHRoZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5j
dGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxs
SGVscGVyczo6SnVtcCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYp
OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFy
Z3M7CisgICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2lu
YXRlZCBmcm9tLgorICAgIE9wY29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWly
SW5zdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxp
bmVzX2gKKyNkZWZpbmUgQWlySW5zdElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1
ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1
Y3QgRm9yRWFjaDxUbXA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0
YXRpYyB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGluc3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxh
dGU8PiBzdHJ1Y3QgRm9yRWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgSW5z
dDo6Zm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+
Ojpmb3JFYWNoKCp0aGlzLCBmdW5jdG9yKTsKK30KKworYm9vbCBJbnN0OjpoYXNTcGVjaWFsKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gYXJncy5zaXplKCkgJiYgYXJnc1swXS5pc1NwZWNpYWwoKTsK
K30KKworY29uc3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncygpCit7Cisg
ICAgQVNTRVJUKGhhc1NwZWNpYWwoKSk7CisgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5l
eHRyYUNsb2JiZXJlZFJlZ3MoKnRoaXMpOworfQorCit2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdp
c3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgQVNTRVJUKGhh
c1NwZWNpYWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdpc3RlcnMo
KnRoaXMsIHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1NoaWZ0VmFsaWQoY29u
c3QgSW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgIHJldHVy
biBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyNlbHNlCisgICAgVU5V
U0VEX1BBUkFNKGluc3QpOworICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9ICAgCisKK2lubGlu
ZSBib29sIGlzTHNoaWZ0MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBp
c1NoaWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0SW5saW5lc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVzc19oCisjZGVmaW5lIEFp
ckxpdmVuZXNzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBZ
b3UgY2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVyIEFyZydzLiBJZiB5b3Ug
Y29tcHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNrIGxpdmVuZXNzIGFuZCB0
bXAgbGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNzIExpdmVuZXNzIHsK
K3B1YmxpYzoKKyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsKKyAgICAgICAgbV9saXZl
QXRIZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2ZUF0VGFpbC5yZXNpemUo
Y29kZS5zaXplKCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IHNlZW47CisKKyAg
ICAgICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNoYW5nZWQpIHsKKyAg
ICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgYmxv
Y2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAg
IExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCisgICAgICAg
ICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAg
ICAgICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsKKyAgICAgICAg
ICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1fbGl2ZUF0SGVh
ZFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAg
IGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVj
ZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9s
aXZlQXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICBsb2Nh
bENhbGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5kKCkpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdID0gbG9jYWxDYWxj
LnRha2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25z
dCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKworICAgIGNv
bnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107CisgICAgfQorCisgICAg
Ly8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJzZS4KKyAgICBjbGFzcyBM
b2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxjKExpdmVuZXNzJiBsaXZl
bmVzcywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1fbGl2ZShsaXZlbmVzcy5s
aXZlQXRUYWlsKGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY29uc3Qg
SGFzaFNldDxUaGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xpdmU7IH0KKyAgICAgICAg
SGFzaFNldDxUaGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6bW92ZShtX2xpdmUpOyB9
CisKKyAgICAgICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGlu
Zz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFy
Zzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKGFy
Zyk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5leHQgaGFuZGxlIGNs
b2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5oYXNTcGVjaWFsKCkpIHsK
KyAgICAgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2goCisgICAg
ICAgICAgICAgICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9saXZlLnJlbW92ZShUaGluZyhUbXAocmVnKSkpOworICAgICAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBG
aW5hbGx5IGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCisg
ICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpU
eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNV
c2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUuYWRkKGFyZyk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhc2hT
ZXQ8VGhpbmc+IG1fbGl2ZTsKKyAgICB9OworICAgIAorcHJpdmF0ZToKKyAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJh
c2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdFRhaWw7Cit9OworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQ5IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFN5bGxhYnVz
OgorIworIyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9PiB1c2Ugb2YgYSBnZW5lcmFsLXB1cnBv
c2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSBy
ZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQgZGVmIG9mIGEgZ2VuZXJhbC1wdXJw
b3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ugb2YgYSBmbG9hdCByZWdpc3RlciBv
ciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6
RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjCisjIEFyZ3Vt
ZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJlZ2lzdGVyCisjIEltbSA9PiAzMi1i
aXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9PiBUcnVzdGVkSW1tNjQKKyMgQWRkciA9PiBhZGRy
ZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFk
ZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVzcworIworIyBUaGUgcGFyc2VyIHZpZXdzIHRo
ZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVuZGVyc3RhbmRzIHRoYXQgdGhleSBmYWxsIGlu
dG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhpbmdzLiBTbywgYWx0aG91Z2ggdGhpcyBm
aWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0aW9uIHN0eWxlLCBub25lIG9mIHRoZSB3aGl0
ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJlIG1lYW5pbmdmdWwgdG8gdGhlIHBhcnNlci4g
Rm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKyMKKyMgRm9vNDIgVTpHLCBVRDpGIEltbSwg
VG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBhcnNlciB3b3VsZCBrbm93IHRoYXQgdGhpcyBp
cyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBVRDpGCisjICAgICBJbW0sIFRtcAorIyAg
ICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28tZm9ybSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMg
YSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQgdXNlcytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIu
CisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAo
QWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQg
aGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisKK05vcAorCitBZGQzMiBVOkcsIFVE
OkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgVG1wCisgICAgQWRkciwg
VG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRtcCwg
VG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBU
bXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworTHNoaWZ0MzIgVTpHLCBV
RDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAg
VG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworIyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVy
IHRoZSBmdWxsIHJlZ2lzdGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0
IGRlcGVuZGluZyBvbgorIyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0
IHRoaXMgaXMgYSBnb29kIHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEK
KyMgTW92ZTY0IGluc3RydWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkg
aGF2ZSB0aGlzIG5vdGlvbiBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxseQorIyBtZWFucyBtb3Zl
UHRyLgorTW92ZSBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02
NCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWRQdHIgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUg
QWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBJ
bmRleCwgVG1wIGFzIGxvYWRQdHIKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVQdHIKKyAgICBUbXAs
IEluZGV4IGFzIHN0b3JlUHRyCisKK01vdmUzMiBVOkcsIEQ6RworICAgIFRtcCwgVG1wIGFzIHpl
cm9FeHRlbmQzMlRvUHRyCisgICAgQWRkciwgVG1wIGFzIGxvYWQzMgorICAgIEluZGV4LCBUbXAg
YXMgbG9hZDMyCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlMzIKKyAgICBUbXAsIEluZGV4IGFzIHN0
b3JlMzIKKworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1w
IGFzIGxvYWREb3VibGUKKyAgICBJbmRleCwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFk
ZHIgYXMgc3RvcmVEb3VibGUKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlRG91YmxlCisKK01vdmU2
NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1wLCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpGLCBE
OkcKKyAgICBUbXAsIFRtcAorCitCcmFuY2hBZGQzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisg
ICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQs
IEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRt
cAorCitCcmFuY2hNdWwzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1w
LCBUbXAKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVE
OkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAK
KyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXND
b25kLCBBZGRyLCBUbXAKKworQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXND
b25kLCBUbXAKKworSnVtcCAvYnJhbmNoCisKK1JldCAvdGVybWluYWwKKworQnJlYWtwb2ludCAv
dGVybWluYWwKKworIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBi
ZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisj
IHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyUGhhc2VTY29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworUGhhc2VT
Y29wZTo6UGhhc2VTY29wZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9j
b2RlKGNvZGUpCisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVtcElSQXRF
YWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3JlICIsIG5hbWUsICI6XG4i
KTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2F2ZUlS
QmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3RyaW5nKGNvZGUpOwor
fQorCitQaGFzZVNjb3BlOjp+UGhhc2VTY29wZSgpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRl
SVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShtX2NvZGUsIG1fbmFtZSwgbV9kdW1w
QmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclBoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclBoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQWlyUGhhc2VTY29wZV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIENvZGU7CisKK2NsYXNzIFBoYXNlU2NvcGUgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFBoYXNlU2NvcGUpOworcHVibGljOgorICAgIFBoYXNlU2NvcGUoQ29kZSYs
IGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxp
ZGF0aW9uCisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIqIG1f
bmFtZTsKKyAgICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJS
ZWdpc3RlclByaW9yaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlv
cml0eS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29u
c3QgVmVjdG9yPEdQUlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBW
ZWN0b3I8R1BSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwor
ICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEdQUlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVy
U2V0IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCk7CisgICAgICAgICAgICBhbGwuZXhjbHVk
ZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBhbGwuZXhjbHVk
ZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgICAg
IFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcg
cmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBb
Jl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJl
ZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdDsKK30K
KworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0
YXRpYyBWZWN0b3I8RlBSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEZQUlJlZz4oKTsKKyAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCk7CisgICAgICAgICAgICBSZWdp
c3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
KyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZnByKCkpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChS
ZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2Nv
bnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSB0eXBlKQorewor
ICAgIHN0YXRpYyBWZWN0b3I8UmVnPiogcmVzdWx0W0FyZzo6bnVtVHlwZXNdOworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNl
LAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0gPSBuZXcgVmVjdG9y
PFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoR1BSUmVnIHJlZyA6IGdwcnNJblByaW9yaXR5T3Jk
ZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0tPmFwcGVuZChSZWcocmVnKSk7
CisgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAg
ICAgICAgIGZvciAoRlBSUmVnIHJlZyA6IGZwcnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAg
ICAgICAgICByZXN1bHRbQXJnOjpGUF0tPmFwcGVuZChSZWcocmVnKSk7CisgICAgICAgIH0pOwor
ICAgIHJldHVybiAqcmVzdWx0W3R5cGVdOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisjZGVm
aW5lIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0
eU9yZGVyKCk7Citjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3JpdHlPcmRlcigpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVy
OwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEdQUkluZm8+IHsK
KyAgICBjb25zdCBWZWN0b3I8R1BSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZ3By
c0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Q
cmlvcml0eU9yZGVyPEZQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8RlBSUmVnPiYgaW5Qcmlv
cml0eU9yZGVyKCkgeyByZXR1cm4gZnByc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCYW5rPgorY29uc3QgVmVjdG9yPHR5cGVuYW1lIEJhbms6OlJlZ2lzdGVy
VHlwZT4mIHJlZ3NJblByaW9yaXR5T3JkZXIoKQoreworICAgIHJldHVybiBSZWdpc3RlcnNJblBy
aW9yaXR5T3JkZXI8QmFuaz46OmluUHJpb3JpdHlPcmRlcigpOworfQorCitjb25zdCBWZWN0b3I8
UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IFNwZWNp
YWw6OmR1bXBQcmVmaXggPSAiJiI7CisKK1NwZWNpYWw6OlNwZWNpYWwoKQorICAgIDogbV9pbmRl
eChVSU5UX01BWCkKK3sKK30KKworU3BlY2lhbDo6flNwZWNpYWwoKQoreworfQorCitDU3RyaW5n
IFNwZWNpYWw6Om5hbWUoKSBjb25zdAoreworICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAg
ICBkdW1wSW1wbChvdXQpOworICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7Cit9CisKK3ZvaWQg
U3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChk
dW1wUHJlZml4KTsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIGlmIChtX2luZGV4ICE9IFVJTlRf
TUFYKQorICAgICAgICBvdXQucHJpbnQobV9pbmRleCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZGVl
cER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoKnRoaXMsICI6
ICIpOworICAgIGRlZXBEdW1wSW1wbChvdXQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpclNwZWNpYWxfaAorI2RlZmluZSBBaXJTcGVjaWFsX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFt
YmRhLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4
dDsKKworY2xhc3MgU3BlY2lhbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlY2lhbCk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisgICAgCisgICAgU3BlY2lhbCgpOworICAgIHZpcnR1
YWwgflNwZWNpYWwoKTsKKworICAgIENTdHJpbmcgbmFtZSgpIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJn
Q2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKEluc3QmKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgPSAw
OworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCBvbiBmb3IgZWFjaCBJbnN0IHRoYXQgdXNlcyB0
aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8KKyAgICAvLyBndWFyYW50
ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2VkIGZyb20ganVzdCBvbmUgSW5zdCwgYmVjYXVzZSBB
aXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywKKyAgICAvLyBpZiB5b3Ugd2FudCB0byBwYXNzIHRo
aXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5lcmF0ZSgpLCB0aGVuIHlvdSBoYXZlIHRvIGVpdGhl
cjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVyYXRlIEFpciB0aGF0IHN0YXJ0cyB3aXRoIGEgc2Vw
YXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5zdCwgYW5kIHRoZW4gbWVyZ2UKKyAgICAvLyAgICB1
c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBwcm9iYWJseSBub3QgZ3JlYXQsIGJ1dCBpdCBvcHRp
bWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0aGF0CisgICAgLy8gICAgQWlyIGRpZG4ndCBkdXBs
aWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVwbGljYXRpb24gZGlkbid0IGNhdXNlIGFueSBpbnRl
cmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8gICAgcmVnaXN0ZXIgYXNzaWdubWVudC4KKyAgICAv
LworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNpYWwgbWFpbnRhaW4gYSBIYXNoTWFwPEluc3QqLCBS
ZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYW5hbHlzaXMKKyAgICAvLyAgICB0
aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlzIHBlcmZvcm1lZCBqdXN0IGJlZm9yZSBjb2RlIGdl
bmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdheQorICAgIC8vICAgIGZvciB0aGUgVmVjdG9yPD4n
cyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRvIGJlIHJlYWxsb2NhdGVkLiBUaGlzIGFsbG93cyBn
ZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29uc3VsdCB0aGUgSGFzaE1hcC4KKyAgICAvLworICAg
IC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVzZSAoMSkgYW5kIGZpcmUgdXAgYSBIYXNoTWFwIGlm
IHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaXQncyBu
b3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgYmVpbmcgY2FsbGVk
IGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8gYXMgZ2VuZXJhdGUoKS4gSWYgd2UgY291bGQgcmVs
eSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1c3QgaGF2ZSBlYWNoIFNwZWNpYWwgaW5zdGFuY2UK
KyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBvZiBSZWdpc3RlclNldCdzIGFuZCB0aGVuIHByb2Nl
c3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0IG9yZGVyIGluCisgICAgLy8gZ2VuZXJhdGUoKS4g
QnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5jZSBpcyB1bmxpa2VseSB0byBjaGFuZ2Ugc2luY2Ug
aXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBwZXJmb3JtYW5jZSBvZiB0aGUgbGl2ZW5lc3MgYW5h
bHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJyZW50bHksIHdlIGRvICgxKSBmb3IgQjMgc3RhY2tt
YXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBS
ZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIENDYWxsSGVscGVyczo6SnVtcCBn
ZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7CisK
KyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYp
ID0gMDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVl
cER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9p
ZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVl
cER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBDb2RlOworCisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIHVuc2lnbmVkIG1f
aW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3BlY2lhbER1bXAgeworcHVibGljOgorICAgIERlZXBT
cGVjaWFsRHVtcChjb25zdCBTcGVjaWFsKiBzcGVjaWFsKQorICAgICAgICA6IG1fc3BlY2lhbChz
cGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NwZWNpYWwpCisgICAgICAgICAgICBtX3NwZWNp
YWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgi
PG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFNwZWNpYWwqIG1fc3BlY2lh
bDsKK307CisKK2lubGluZSBEZWVwU3BlY2lhbER1bXAgZGVlcER1bXAoY29uc3QgU3BlY2lhbCog
c3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVlcFNwZWNpYWxEdW1wKHNwZWNpYWwpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNw
aWxsRXZlcnl0aGluZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5s
aW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29w
ZS5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJCM0luZGV4
TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBo
YXNlU2NvcGUoY29kZSwgInNwaWxsRXZlcnl0aGluZyIpOworCisgICAgLy8gV2Ugd2FudCB0byBr
bm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFz
aWMgYmxvY2suCisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4g
dXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CisgICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhj
b2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZl
bmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAg
IHVzZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgpICsgMSk7CisKKyAgICAg
ICAgYXV0byBzZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBpbmRleCkgeworICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luZGV4XTsKKyAg
ICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQodG1wLnJl
ZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzZXRVc2VkUmVnaXN0
ZXJzKGJsb2NrLT5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0
SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGxvY2Fs
Q2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAgICAgICAgIHNldFVzZWRS
ZWdpc3RlcnMoaW5zdEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFsbG9jYXRl
IGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAuCisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFsbFN0
YWNrU2xvdHNbQXJnOjpudW1UeXBlc107CisgICAgZm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAw
OyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyArK3R5cGVJbmRleCkgeworICAgICAgICBWZWN0
b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxTdGFja1Nsb3RzW3R5cGVJbmRleF07Cisg
ICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QXJnOjpUeXBlPih0eXBlSW5kZXgp
OworICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShjb2RlLm51bVRtcHModHlwZSkpOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29kZS5udW1UbXBzKHR5cGUpOyB0bXBJbmRleC0t
OykKKyAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3Qo
OCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQg
aW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRCZWZv
cmUgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXhdOworICAgICAgICAgICAgUmVnaXN0
ZXJTZXQmIHNldEFmdGVyID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4ICsgMV07Cisg
ICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAg
ICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAu
aXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
ICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9IGFsbFN0YWNrU2xvdHNbdHlwZV1bdG1wLnRt
cEluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBBcmcgYXJnID0gQXJnOjpzdGFjayhzdGFj
a1Nsb3QpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZmlndXJlIG91dCBhIHJl
Z2lzdGVyIHRvIHVzZS4gSG93IHdlIGRvIHRoYXQgZGVwZW5kcyBvbiB0aGUgcm9sZS4KKyAgICAg
ICAgICAgICAgICAgICAgUmVnIGNob3NlblJlZzsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNo
IChyb2xlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2U6CisgICAgICAgICAg
ICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RGVmOgorICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2VEZWY6CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVy
LmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNl
dChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJl
Zyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAgICAgICAgICB0bXAgPSBU
bXAoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IHR5cGUg
PT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworCisgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwgbW92ZSwg
aW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0
SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwaWxsRXZlcnl0aGluZ19oCisjZGVmaW5l
IEFpclNwaWxsRXZlcnl0aGluZ19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8v
IFRoaXMgaXMgYSBwaGFzZSBmb3IgdGVzdGluZy4gSXQgYmVoYXZlcyBsaWtlIGEgcmVnaXN0ZXIg
YWxsb2NhdG9yIGluIHRoZSBzZW5zZSB0aGF0IGl0CisvLyBlbGltaW5hdGVzIHRlbXBvcmFyaWVz
IGZyb20gdGhlIHByb2dyYW0uIEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5IGFsd2F5cyBzcGlsbGlu
ZyBhbGwKKy8vIHRlbXBvcmFyaWVzLiBUaGUgcmVzdWx0aW5nIGNvZGUgaXMgZ29pbmcgdG8gYmUg
dmVyeSBpbmVmZmljaWVudC4gVGhpcyBwaGFzZSBpcyBncmVhdCBpZiB5b3UKKy8vIHRoaW5rIHRo
YXQgdGhlcmUgaXMgYSBidWcgaW4gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gWW91IGNhbiBjb25m
aXJtIHRoaXMgYnkgcnVubmluZyB0aGlzCisvLyBwaGFzZSBpbnN0ZWFkIG9mIHRoZSByZWdpc3Rl
ciBhbGxvY2F0b3IuCisvLworLy8gTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHRoaXMgcGhhc2UgZG9l
cyB0aGUgY2hlYXBlc3QgdGhpbmcgcG9zc2libGUsIGl0J3Mgbm90IGV2ZW4gd3JpdHRlbiBpbiBh
CisvLyBwYXJ0aWN1bGFybHkgZWZmaWNpZW50IHdheS4gU28sIGRvbid0IGdldCBhbnkgaWRlYXMg
YWJvdXQgdXNpbmcgdGhpcyBwaGFzZSB0byByZWR1Y2UgY29tcGlsZXIKKy8vIGxhdGVuY3kuIElm
IHlvdSB3YW50ZWQgdG8gZG8gdGhhdCwgeW91IHNob3VsZCBjb21lIHVwIHdpdGggYSBjbGV2ZXIg
YWxnb3JpdGhtIGluc3RlYWQgb2YgdXNpbmcKKy8vIHRoaXMgc2lsbHkgdGhpbmcuCisKK3ZvaWQg
c3BpbGxFdmVyeXRoaW5nKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclNwaWxsRXZlcnl0
aGluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clN0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgU3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAoaW50
cHRyX3QgdmFsdWUpCit7CisgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKKyAgICBpZiAobV92
YWx1ZSkKKyAgICAgICAgbV92YWx1ZS0+bV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKK30KKwordm9p
ZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkZWVwRHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBtX2J5
dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCwgIiwga2luZCA9ICIs
IG1fa2luZCk7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG91dC5wcmludCgiLCB2YWx1ZSA9
ICIsICptX3ZhbHVlKTsKK30KKworU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNp
emUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2
YWx1ZSkKKyAgICA6IG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgLCBtX2luZGV4KGluZGV4KQor
ICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUgPyB2YWx1ZS0+b2Zmc2V0RnJvbUZQKCkgOiAwKQor
ICAgICwgbV9raW5kKGtpbmQpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQoreworICAgIEFTU0VSVChi
eXRlU2l6ZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclN0YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3Rh
Y2tTbG90X2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90
VmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFja1Nsb3QgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVT
aXplOyB9CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9
CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB1
bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkg
PD0gMSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAy
KQorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDQpCisg
ICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorCisgICAgU3Rh
Y2tTbG90VmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgLy8g
WmVybyBtZWFucyB0aGF0IGl0J3Mgbm90IHlldCBhc3NpZ25lZC4KKyAgICBpbnRwdHJfdCBvZmZz
ZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gVGhp
cyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGNhbGxlZCBmcm9tIHBoYXNlcyB0aGF0IGRvIHN0YWNr
IGFsbG9jYXRpb24uIEJ1dCB5b3UgY2FuCisgICAgLy8gdG90YWxseSBmb3JjZSBhIHN0YWNrIHNs
b3QgdG8gbGFuZCBhdCBzb21lIG9mZnNldC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRw
dHJfdCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRl
ZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4
LCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSopOworICAgIAorICAgIHVuc2lnbmVkIG1f
Ynl0ZVNpemU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZy
b21GUDsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBTdGFja1Nsb3RWYWx1ZSogbV92
YWx1ZTsKK307CisKK2NsYXNzIERlZXBTdGFja1Nsb3REdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVw
U3RhY2tTbG90RHVtcChjb25zdCBTdGFja1Nsb3QqIHNsb3QpCisgICAgICAgIDogbV9zbG90KHNs
b3QpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1fc2xvdCkKKyAgICAgICAgICAgIG1fc2xvdC0+ZGVlcER1
bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsK
KyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgU3RhY2tTbG90KiBtX3Nsb3Q7Cit9OworCitp
bmxpbmUgRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoY29uc3QgU3RhY2tTbG90KiBzbG90KQor
eworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpclN0YWNrU2xvdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clRtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyVG1wLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgVG1wOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQo
Ijxub25lPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzUmVnKCkpIHsK
KyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChpc0dQKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIldG1wIiwgZ3BUbXBJbmRleCgpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmludCgiJWZ0bXAiLCBmcFRtcElu
ZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJU
bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9oCisjZGVmaW5lIEFpclRtcF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUg
IkdQUkluZm8uaCIKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IEFyZzsKKworLy8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBhIHJlZ2lzdGVyLiBJdCBj
YW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4gSXQgY2FuIGFsc28KKy8vIGJl
IHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0ZXIgKGkuZS4gYSB0ZW1wb3Jh
cnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQorLy8gZGVsaWJlcmF0ZWx5IHRlcnNl
IG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoaXMgbmFtZSBhIGxvdC4KKworY2xh
c3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICB7
CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcpCisgICAgeworICAgICAgICBpZiAo
cmVnKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgbV92
YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigpKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUbXAoY29uc3Qg
QXJnJik7CisKKyAgICBzdGF0aWMgVG1wIGdwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisg
ICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29k
ZUdQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0
aWMgVG1wIGZwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAg
cmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisKKyAgICBib29sIGlzR1AoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFsdWUpOworICAgIH0KKworICAg
IGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAobV92
YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQUihtX3ZhbHVlKTsKKyAgICB9
CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0dQUigp
IHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAgIH0KKworICAgIEZQUlJlZyBmcHIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQUihtX3ZhbHVlKTsKKyAgICB9
CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAg
ICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVybiBmcHIoKTsKKyAgICB9CisKKyAg
ICBib29sIGhhc1RtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNSZWco
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBm
cFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFRtcChtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKKyAgICAg
ICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKwor
ICAgIFRtcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV92YWx1
ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgIHsKKyAgICB9CisKKyAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAqdGhpcyA9PSBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKworICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFz
aDxpbnQ+OjpoYXNoKG1fdmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGlj
IGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAxICsg
aW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUCh1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIHJldHVybiAtMSAtIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBp
bnQgZW5jb2RlR1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1Ao
Z3ByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3Rh
dGljIGludCBlbmNvZGVGUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNv
ZGVGUChmcHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAg
ICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxICsg
aW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFRtcCh1bnNpZ25lZCBpbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RG
UFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5j
b2RlZEdQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA+IDA7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlAoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRH
UFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAm
JiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFIoaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiB2YWx1ZSA+PSBlbmNvZGVGUFIoTWFj
cm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29s
IGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29k
ZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
RW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBSKHZhbHVlKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQo
aXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+
KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJl
Z2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZQ
UlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVn
aXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBS
ZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlR1BUbXAoaW50
IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQVG1wKHZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdp
c3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVGUFRtcChp
bnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBUbXAodmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVy
KCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyAwOiBlbXB0eSBUbXAKKyAgICAvLyBw
b3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4KKyAgICAvLyBuZWdhdGl2ZTogRlBScyBh
bmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1ZTsKK307CisKK3N0cnVjdCBUbXBIYXNo
IHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUbXAmIGtleSkgeyByZXR1cm4ga2V5
Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFRtcCYgYSwgY29uc3QgVG1w
JiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21w
YXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpB
aXI6OlRtcD4geworICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpUbXBIYXNoIEhhc2g7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3Ry
dWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpUbXA+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRz
PEpTQzo6QjM6OkFpcjo6VG1wPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGluZXNfaAorI2RlZmluZSBBaXJUbXBJbmxpbmVz
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRl
ICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitpbmxpbmUgVG1wOjpUbXAoY29uc3QgQXJnJiBhcmcpCit7CisgICAgKnRoaXMgPSBh
cmcudG1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBJbmxpbmVzX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVmFs
aWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgewor
cHVibGljOgorICAgIFZhbGlkYXRlcihDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25z
dCBjaGFyKiBkdW1wQmVmb3JlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1f
d2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAg
ICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04s
ICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQor
ICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4g
dmFsaWRTbG90czsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gdmFsaWRCbG9ja3M7Cisg
ICAgICAgIEhhc2hTZXQ8U3BlY2lhbCo+IHZhbGlkU3BlY2lhbHM7CisKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAgICAgICAgICAgIHZhbGlkQmxvY2tzLmFkZChi
bG9jayk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMo
KSkKKyAgICAgICAgICAgIHZhbGlkU2xvdHMuYWRkKHNsb3QpOworICAgICAgICBmb3IgKFNwZWNp
YWwqIHNwZWNpYWwgOiBtX2NvZGUuc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIHZhbGlkU3BlY2lh
bHMuYWRkKHNwZWNpYWwpOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2Nv
ZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4
IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBp
bnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChBcmcmIGFy
ZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICAgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsaWRTbG90cy5jb250YWlucyhhcmcuc3RhY2tTbG90KCkpLCAo
IkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CisgICAgICAgICAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNwZWNpYWxzLmNvbnRhaW5zKGFyZy5zcGVjaWFs
KCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIFZBTElEQVRFKGluc3QuaXNWYWxpZEZvcm0oKSwgKCJBdCAiLCBp
bnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgIGlmIChpbnN0SW5kZXggPT0g
YmxvY2stPnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzVGVybWlu
YWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSghaXNUZXJtaW5hbChp
bnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nl
c3NvckJsb2NrcygpKQorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkQmxvY2tzLmNvbnRh
aW5zKHN1Y2Nlc3NvciksICgiSW4gIiwgKmJsb2NrKSk7CisgICAgICAgIH0KKyAgICB9CisKK3By
aXZhdGU6CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNv
bnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24s
IGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsK
KyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAg
U3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJBSVIgVkFMSURB
VElPTiBGQUlMVVJFXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGNvbmRpdGlv
biwgIiAoIiwgZmlsZW5hbWUsICI6IiwgbGluZU51bWJlciwgIilcbiIpOworICAgICAgICAgICAg
b3V0LnByaW50KCIgICAgIiwgbWVzc2FnZSwgIlxuIik7CisgICAgICAgICAgICBpZiAobV93aGVu
KQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiICAgIER1cmluZyAiLCBtX3doZW4sICJcbiIp
OworICAgICAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAg
IH0KKworICAgICAgICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgaWYgKG1fZHVt
cEJlZm9yZSkgeworICAgICAgICAgICAgZGF0YUxvZygiQmVmb3JlICIsIG1fd2hlbiwgIjpcbiIp
OworICAgICAgICAgICAgZGF0YUxvZyhtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAg
IGRhdGFMb2coIkF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgICAgICBkYXRhTG9nKG1fY29k
ZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9y
dEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRp
b24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7Cisg
ICAgY29uc3QgY2hhciogbV93aGVuOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKENvZGUmIGNvZGUs
IGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRh
dGVyIHZhbGlkYXRlcihjb2RlLCB3aGVuLCBkdW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0ZXIucnVu
KCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFs
aWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZh
bGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclZhbGlkYXRlX2gK
KyNkZWZpbmUgQWlyVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2
b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hh
ciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVmFsaWRhdGVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3Iu
cmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2Vu
ZXJhdG9yLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9v
cGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQyIEBACisjIS91
c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K3JlcXVpcmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNvZGUKKyAgICBhdHRyX3JlYWRlciA6bmFt
ZSwgOnNwZWNpYWwsIDpvdmVybG9hZHMKKyAgICBhdHRyX2FjY2Vzc29yIDpraW5kCisKKyAgICBk
ZWYgaW5pdGlhbGl6ZShuYW1lLCBzcGVjaWFsKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAg
ICAgQHNwZWNpYWwgPSBzcGVjaWFsCisgICAgICAgIEBraW5kID0gOmluc3QKKyAgICAgICAgdW5s
ZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBvdmVybG9hZHMgPSBbXQorICAgICAgICBlbmQKKyAg
ICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQorICAgICAgICBuYW1lWzBdLmRvd25jYXNlICsgbmFt
ZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBBcmcKKyAgICBhdHRyX3JlYWRlciA6cm9s
ZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFsaXplKHJvbGUsIHR5cGUpCisgICAgICAgIEByb2xl
ID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5cGUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPdmVy
bG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1cmUsIDpmb3JtcworCisgICAgZGVmIGluaXRp
YWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgQHNpZ25hdHVyZSA9IHNpZ25hdHVyZQor
ICAgICAgICBAZm9ybXMgPSBmb3JtcworICAgIGVuZAorZW5kCisKK2NsYXNzIEtpbmQKKyAgICBh
dHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfYWNjZXNzb3IgOnNwZWNpYWwKKworICAgIGRlZiBp
bml0aWFsaXplKG5hbWUpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9
IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlz
X2E/IFN0cmluZworICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFtZSBhbmQgQHNwZWNpYWwgPT0gb3RoZXIuc3BlY2lh
bAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBLaW5kLmFyZ0tpbmRzKGtpbmQpCisg
ICAgICAgIGlmIGtpbmQgPT0gIkFkZHIiCisgICAgICAgICAgICBbIkFkZHIiLCAiU3RhY2siLCAi
Q2FsbEFyZyJdCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQK
KyAgICBlbmQKKworICAgIGRlZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQp
CisgICAgZW5kCitlbmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFs
dE5hbWUKKworICAgIGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2lu
ZHMgPSBraW5kcworICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitj
bGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAg
CisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxl
TmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVu
ZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9
IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwg
OnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAg
ICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAg
ICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAg
ICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9
fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRl
ZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVu
ZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50
LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAg
ICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVu
dFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFt
ZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBb
XQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAg
Y2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21t
ZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwg
aWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2Et
ekEtWjAtOV9dKykvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXco
ZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLwor
ICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXC9d
LworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBs
aW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBl
cnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVj
dGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAg
IHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNV
RCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBp
c0dGKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tp
bmQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJ
bmRleCl8KFJlbENvbmQpfChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2Vu
KQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAg
ICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJ
ZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQg
bm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlh
bGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFt
ZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBA
dG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9
IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0
b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAi
UGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19Igor
ICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUo
c3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3Mg
dG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25z
dW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFy
c2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0
KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNv
bnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVy
cm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisg
ICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3Vt
ZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3Io
IkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFk
dmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAg
ICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVk
IGtpbmQgKEltbSwgSW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQp
IikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0
CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAg
CisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxl
bmd0aAorCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAg
ICBjb25zdW1lKCJzcGVjaWFsIikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3Vt
ZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9h
ZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAg
ICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVu
dGlmaWVyCisKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAg
ICAgICAgICAgICAgb3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bj
b2RlLnNwZWNpYWwKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9w
Y29kZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAg
IHJlc3VsdFtvcGNvZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAg
ICAgICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgaXNVRCh0b2tlbikKKyAgICAgICAg
ICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gY29uc3Vt
ZVJvbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoiKQorICAgICAgICAgICAg
ICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUp
CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
IHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwi
KQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAg
ICAgICAgICBpZiB0b2tlbiA9PSAiLyIKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLyIp
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW4uc3RyaW5nCisgICAgICAgICAgICAgICAg
ICAgIHdoZW4gImJyYW5jaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0g
OmJyYW5jaAorICAgICAgICAgICAgICAgICAgICB3aGVuICJ0ZXJtaW5hbCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOnRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkJhZCAvIGRpcmVjdGl2
ZSIpCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBhZHZhbmNl
CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBpc0tpbmQodG9rZW4p
CisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAga2lu
ZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAorICAgICAgICAg
ICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHMg
PDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJv
cigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5hbWUgPT0gIlRt
cCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNwZWNpYWwgPSB0
cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
ICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBjb25zdW1l
SWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMg
Zm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUubGVuZ3RoCisg
ICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIkltbTY0IgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnJvbGUgIT0g
IlUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3Jt
IGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLWdl
bmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoa2luZHMs
IGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgaXNLaW5kKHRv
a2VuKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAg
ICAgICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAg
cmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAgICAgIGZvcm1z
IDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAg
ICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUsIGZvcm1zKQor
ICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAgICBlbmQKK2Vu
ZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQo
JGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UKKworZGVmIHdy
aXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsK
KyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJh
dGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVk
aXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9
X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAg
ICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFp
ciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwg
b3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisg
ICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAg
IG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifTsiCisK
KyAgICBvdXRwLnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1PcGNvZGVzID0gI3skb3Bj
b2Rlcy5rZXlzLnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0
cC5wdXRzICJjbGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7IgorICAgIG91dHAucHV0
cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorfQorCisjIEZyb20gaGVyZSBvbiwgd2UgZG9uJ3QgdHJ5
IHRvIGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgc2luY2Ugd2UncmUgdXNpbmcgYSByZWN1
cnNpdmUgcGF0dGVybgorIyBtYXRjaGVyLgorCitkZWYgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwg
Zm9ybXMsIGNvbHVtbkluZGV4LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAg
cmV0dXJuIGlmIGZvcm1zLmxlbmd0aCA9PSAwCisKKyAgICBpZiBmaWx0ZXJbZm9ybXNdCisgICAg
ICAgIHJldHVybgorICAgIGVuZAorCisgICAgaWYgY29sdW1uSW5kZXggPj0gZm9ybXNbMF0ua2lu
ZHMubGVuZ3RoCisgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMQorICAgICAg
ICBjYWxsYmFja1tmb3Jtc1swXV0KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisgICAgCisgICAg
Z3JvdXBzID0ge30KKyAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgfCBmb3JtIHwKKyAgICAgICAg
a2luZCA9IGZvcm0ua2luZHNbY29sdW1uSW5kZXhdLm5hbWUKKyAgICAgICAgaWYgZ3JvdXBzW2tp
bmRdCisgICAgICAgICAgICBncm91cHNba2luZF0gPDwgZm9ybQorICAgICAgICBlbHNlCisgICAg
ICAgICAgICBncm91cHNba2luZF0gPSBbZm9ybV0KKyAgICAgICAgZW5kCisgICAgfQorCisgICAg
aWYgc3BlZWQgPT0gOmZhc3QgYW5kIGdyb3Vwcy5sZW5ndGggPT0gMQorICAgICAgICBtYXRjaEZv
cm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZp
bHRlciwgY2FsbGJhY2spCisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgb3V0cC5wdXRz
ICJzd2l0Y2ggKCN7Y29sdW1uR2V0dGVyW2NvbHVtbkluZGV4XX0pIHsiCisgICAgZ3JvdXBzLmVh
Y2hfcGFpciB7CisgICAgICAgIHwga2V5LCB2YWx1ZSB8CisgICAgICAgIG91dHAucHV0cyAiI2lm
IFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgICAgICBLaW5kLmFyZ0tpbmRz
KGtleSkuZWFjaCB7CisgICAgICAgICAgICB8IGFyZ0tpbmQgfAorICAgICAgICAgICAgb3V0cC5w
dXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToiCisgICAgICAgIH0KKyAgICAgICAgbWF0Y2hGb3Jt
cyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0
ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5w
dXRzICIjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisgICAgfQor
ICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0
cC5wdXRzICJ9IgorZW5kCisKK2RlZiBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5z
dCkKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bjb2RlKSB7IgorICAgICRvcGNv
ZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMg
ImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAg
ICAgICAgeWllbGQgb3Bjb2RlLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZE92
ZXJsb2FkU3dpdGNoID0gKChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkgb3Igc3BlZWQgPT0g
OnNhZmUpCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+YXJncy5zaXpl
KCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fk
cy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVy
bG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQKKyAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVuZAorICAg
ICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0
cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9Igor
ZW5kCisgICAgCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIHNwZWVkLCBpbnN0KQor
ICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KSB7CisgICAgICAgIHwgb3Bj
b2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5
aWVsZCBvcGNvZGUsIG5pbCwgbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbHVtbkdl
dHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAg
ICAgICAgICIje2luc3R9LT5hcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgY2Fs
bGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAg
IHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIs
IGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIGVuZAorICAgIH0KK2VuZAorCit3cml0ZUgoIk9w
Y29kZVV0aWxzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFp
ckluc3QuaFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJTcGVjaWFsLmhcIiIKKyAg
ICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsiCisgICAgCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkg
eyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIFQ+Igor
ICAgIG91dHAucHV0cyAiaW5saW5lIFQqIG9wZ2VuSGlkZGVuUHRySWRlbnRpdHkoVCogcG9pbnRl
cikgeyByZXR1cm4gcG9pbnRlcjsgfSIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVU
VVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1
dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91
dHAucHV0cyAifSB3aGlsZSAoZmFsc2UpIgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5zdDo6Zm9yRWFjaEFyZyhjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3Zl
cmxvYWQob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQg
fAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5j
dG9yKGFyZ3NbMF0sIEFyZzo6VXNlLCBBcmc6OkdQKTsgLy8gVGhpcyBpcyBiYXNpY2FsbHkgYm9n
dXMsIGJ1dCBpdCB3b3JrcyBmIGFuYWx5c2VzIG1vZGVsIFNwZWNpYWwgYXMgYW4gaW1tZWRpYXRl
LiIKKyAgICAgICAgICAgIG91dHAucHV0cyAiYXJnc1swXS5zcGVjaWFsKCktPmZvckVhY2hBcmco
KnRoaXMsIHNjb3BlZExhbWJkYTxFYWNoQXJnQ2FsbGJhY2s+KGZ1bmN0b3IpKTsiCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG5p
bAorICAgICAgICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAgICAgICAgICAgICB3aGVuICJV
IgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAgICAgICAgICAgICAgICB3aGVu
ICJEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKKyAgICAgICAgICAgICAgICB3
aGVuICJVRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VEZWYiCisgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3Rvcihh
cmdzWyN7aW5kZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJnLnR5cGV9UCk7IgorICAgICAg
ICAgICAgfQorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0
cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+IgorICAgIG91dHAucHV0cyAi
QUxXQVlTX0lOTElORSBib29sIGlzVmFsaWRGb3JtKE9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIkFyZzo6S2lu
ZCBraW5kc1tzaXplb2YuLi4oQXJndW1lbnRzKV0gPSB7IGFyZ3VtZW50cy4uLiB9OyIKKyAgICBv
dXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsK
KyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFt
ZX06IgorICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoc2l6ZW9mLi4uKEFyZ3VtZW50cykpIHsi
CisgICAgICAgIHVubGVzcyBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJs
b2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiCisgICAgICAg
ICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7IHwgY29sdW1uSW5kZXggfCAib3BnZW5IaWRk
ZW5QdHJJZGVudGl0eShraW5kcylbI3tjb2x1bW5JbmRleH1dIiB9CisgICAgICAgICAgICAgICAg
ZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2Mg
eworICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICBzcGVj
aWFsID0gKG5vdCBmb3JtLmtpbmRzLmRldGVjdCB7IHwga2luZCB8IGtpbmQuc3BlY2lhbCB9KQor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTigje3NwZWNpYWx9KTsi
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNh
ZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAg
IGVuZAorICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7ICIKKyAgICBv
dXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29sIGlzVGVybWluYWwoT3Bj
b2RlIG9wY29kZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChv
cGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8
CisgICAgICAgIGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5hbCBvciBvcGNvZGUua2luZCA9PSA6
YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAg
ICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgb3V0cC5w
dXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5w
dXRzICJ9IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikg
eworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3RJbmxpbmVz
LmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAg
ICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBv
dXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2gg
eworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNv
ZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwi
KTsiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRw
LnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNl
IFdURiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVmFsaWRGb3JtKCkiCisg
ICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6c2FmZSwg
InRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAgIGlm
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhcmdzLnNpemUoKSA8
IDEpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAg
b3V0cC5wdXRzICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgorICAgICAgICAgICAgb3V0cC5w
dXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4o
YXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQu
c2lnbmF0dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAg
ICAgICAgICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZQorICAgICAg
ICAgICAgICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUKKyAgICAgICAg
ICAgICAgICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAgICAgICAgICBuZWVkc01v
cmVWYWxpZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2UgZG9uJ3Qg
aGF2ZSB0byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAgICAgICAgICAjIGtpbmQg
aW1wbGllcyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBpcyB0aGUg
dHlwZS4gQW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gdmFsaWRhdGUgdGhl
IHR5cGUgaWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0g
IlRtcCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tpbmRleH1d
LnRtcCgpLmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJpZiAoIWlzI3tvcGNvZGUubmFtZX1WYWxpZCgqdGhpcykpIgorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAg
fQorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAg
ICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgor
ICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAg
ICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRw
LnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFs
CisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0
cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRV
Uk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlzLCBhcmdJbmRleCkpOyIKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhlIGFyZ0luZGV4LgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7IgorCisgICAgICAgICAgICBudW1B
cmdzID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAg
IH0ubWF4CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFyZ3MudGltZXMgeworICAgICAg
ICAgICAgICAgIHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e2FyZ0luZGV4fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGFsbCBvZiB0aGUgZm9y
bXMgb2YgYWxsIG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBvciBkb24ndCwgYWRtaXQgYW4g
YWRkcmVzcworICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRleC4gV2UgZXhwZWN0IHRoaXMg
dG8gYmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAg
ICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRz
LmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAg
ICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGZv
cm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0g
IkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyAr
PSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRlbGli
ZXJhdGVseSB0ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdlIGVuZCB1cCB3aXRoIG5vIGZv
cm1zLCB3ZSB3YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkgdGhhdCBBZGRyZXNzIGlzIGlu
YWRtaXNzaWJsZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAg
IGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9S
RVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
IyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAgICAgICAgICBuZWVkT3Zlcmxv
YWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpCisKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAgICAgICAgICAgICAgICAgICAg
ICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0IHdlIHdhbnQuCisgICAgICAg
ICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBudW1O
byA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAg
ICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0byBkZWZhdWx0LgorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYg
bmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tv
dmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3ZSB0ZXN0IHRoZSBoeXBvdGhl
c2lzIHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3JtLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmdzWyN7Y29sdW1uSW5k
ZXh9XS5raW5kKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0
ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtcyB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVtaXQgbm8gY29kZSwgc2luY2Ug
d2UgY2Fubm90IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBv
dmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
In0iCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisg
ICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQor
ICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91
dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRz
ICJ9IgorCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgSW5zdDo6Z2VuZXJhdGUo
Q0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KSIKKyAgICBvdXRw
LnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oaml0KTsiCisgICAgb3V0cC5w
dXRzICJVTlVTRURfUEFSQU0oY29udGV4dCk7IgorICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJz
OjpKdW1wIHJlc3VsdDsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpmYXN0LCAi
dGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAgaWYg
b3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3Nb
MF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250ZXh0KSk7IgorICAgICAgICBl
bHNlCisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgICAgICBtZXRob2RO
YW1lID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWV0
aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBp
ZiBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICAgICAgb3V0cC5wcmludCAicmVz
dWx0ID0gIgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnByaW50ICJqaXQuI3tt
ZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMuZWFjaF93aXRoX2luZGV4IHsK
KyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBpZiBpbmRl
eCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgIiwgIgorICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1lCisgICAgICAgICAgICAgICAg
d2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5k
ZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZnByKCkiCisgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIkltbSIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tNjQoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJB
ZGRyIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Fk
ZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAg
ICAgICB3aGVuICJSZWxDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVu
ICJSZXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5hc1Jlc3VsdENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMg
IlJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAicmV0dXJuIHJl
c3VsdDsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHJl
dmlzaW9uIDE5MTUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXggIT0gaW52YWxpZCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBj
b25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBkZWxldGVkKCk7IH0KQEAgLTE3MCw2ICsx
NjksNDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OwogCisgICAgY2xhc3MgQWxsUmVnc0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisKKyAgICAgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigp
IHsgfQorCisgICAgICAgICAgICBleHBsaWNpdCBpdGVyYXRvcihSZWcgcmVnKQorICAgICAgICAg
ICAgICAgIDogbV9yZWdJbmRleChyZWcuaW5kZXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgUmVnIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIFJlZzo6
ZnJvbUluZGV4KG1fcmVnSW5kZXgpOyB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3JlZ0luZGV4ID0gUmVnOjpm
cm9tSW5kZXgobV9yZWdJbmRleCkubmV4dCgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX3JlZ0luZGV4ID09IG90aGVyLm1fcmVnSW5kZXg7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB1bnNp
Z25lZCBtX3JlZ0luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJzdCgpKTsgfQorICAgICAgICBpdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWcoKSk7IH0KKyAgICB9OworCisgICAg
c3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSB7IHJldHVybiBBbGxSZWdzSXRlcmFibGUoKTsg
fQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90IGludmFsaWQoKSB7IHJldHVybiAweGZm
OyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJB
dE9mZnNldExpc3QuY3BwCShyZXZpc2lvbiAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyAr
NDIsNyBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6UmVnaXN0ZXJBdE9mZnNldExpCiAgICAgaWYg
KG9mZnNldEJhc2VUeXBlID09IEZyYW1lUG9pbnRlckJhc2VkKQogICAgICAgICBvZmZzZXQgPSAt
KHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obnVtYmVyT2ZSZWdpc3RlcnMpICogc2l6ZW9mKHZvaWQq
KSk7CiAKLSAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3Qo
KTtyZWcgPSByZWcubmV4dCgpKSB7CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyBy
ZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAgaWYgKHJlZ2lz
dGVyU2V0LmdldChyZWcpKSB7CiAgICAgICAgICAgICBhcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChy
ZWcsIG9mZnNldCkpOwogICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5o
CShyZXZpc2lvbiAxOTE1MDcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
QXRPZmZzZXRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDkgQEAgcHVibGljOgog
ICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGZpbmQoUmVnKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbmRl
eE9mKFJlZykgY29uc3Q7IC8vIFJldHVybnMgVUlOVF9NQVggaWYgbm90IGZvdW5kLgogCisgICAg
VmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIG1fcmVnaXN0ZXJzLmJlZ2luKCk7IH0KKyAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNl
dD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzLmVuZCgp
OyB9CisKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+IG1fcmVnaXN0ZXJz
OwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlz
aW9uIDE5MTUwNykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAko
d29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92
ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyBy
ZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsK
KyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRCaXRzKCkpCisgICAgICAg
ICAgICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7CisgICAgfQogICAgIAogcHJpdmF0
ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9CkluZGV4OiBTb3VyY2Uv
V1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNp
b24gMTkxNTA3KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNyBAQAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgor
CisgICAgICAgIENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDogQWRkIGEgRU5BQkxFKEIz
X0pJVCkgZmVhdHVyZSBmbGFnLgorICAgICAgICAqIHd0Zi9TY29wZWRMYW1iZGEuaDogQWRkZWQu
IFRoaXMgYWxsb3dzIHVzIHRvIGRvIHplcm8tYWxsb2NhdGlvbiwgemVyby1jb3B5IGV4dGVybiBs
YW1iZGFzLgorICAgICAgICAoV1RGOjpzY29wZWRMYW1iZGEpOgorICAgICAgICAqIHd0Zi9TaGFy
ZWRUYXNrLmg6CisgICAgICAgIChXVEY6OmNyZWF0ZVNoYXJlZFRhc2spOgorCiAyMDE1LTEwLTIx
ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRmFjdG9yIG91dCB0
aGUgZ3JhcGggbm9kZSB3b3JrbGlzdHMgZnJvbSBERkcgaW50byBXVEYKSW5kZXg6IFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxNTA3KQorKysgU291
cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAt
NTAsNiArNTAsNyBAQAogCQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0NzlCMUI3
QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovOyB9OwogCQkwRkVCM0RDRjFCQjVENjg0MDA5
RDdBQUQgLyogU2hhcmVkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCAqLzsg
fTsKIAkJMEZFQjNERDExQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3Iu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzREQw
MUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi87IH07CisJCTBG
RUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAv
KiBTY29wZWRMYW1iZGEuaCAqLzsgfTsKIAkJMEZFQzg0QUYxQkQ4MjUzMTAwODBGRjc0IC8qIEdy
YXBoTm9kZVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2RlV29ya2xpc3QuaCAq
LzsgfTsKIAkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I1MUIyMkQ0RDgw
MDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi87IH07CiAJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1MTI3
RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJp
c29uLmggKi87IH07CkBAIC0zNDUsNiArMzQ2LDcgQEAKIAkJMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5
OEVCIC8qIFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmRM
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzRENFMUJCNUQ2ODQwMDlE
N0FBRCAvKiBTaGFyZWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNo
YXJlZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNERDAxQkI3MzY2
QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZExhbWJkYS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhO
b2RlV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhOb2Rl
V29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjUxQjIyRDRE
ODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gVGlueVB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY4NjA5NDFC
Q0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gUG9pbnRlckNvbXBhcmlzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTg3MCw2ICs4NzIsNyBAQAogCQkJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAv
KiBTY2hlZHVsZVBhaXIuaCAqLywKIAkJCQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2No
ZWR1bGVQYWlyQ0YuY3BwICovLAogCQkJCTE0Njk0MTk1MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hl
ZHVsZVBhaXJNYWMubW0gKi8sCisJCQkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3Bl
ZExhbWJkYS5oICovLAogCQkJCUE4QTQ3MzA2MTUxQTgyNUIwMDQxMjNGRiAvKiBTZWdtZW50ZWRW
ZWN0b3IuaCAqLywKIAkJCQlBOEE0NzMwNzE1MUE4MjVCMDA0MTIzRkYgLyogU2VudGluZWxMaW5r
ZWRMaXN0LmggKi8sCiAJCQkJQThBNDczMDgxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuY3BwICov
LApAQCAtMTI0NCw2ICsxMjQ3LDcgQEAKIAkJCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0
NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVm
Q291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NTUxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZFNwZWNpZmljLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2
NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJl
dmlzaW9uIDE5MTUwNykKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3NiwxMiArNzc2LDIwIEBACiAjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJVCAx
CiAjZW5kaWYKIAorLyogVGhlIEIzIGNvbXBpbGVyIGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNrZW5k
IHRoYXQgaXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQuIFdlIHdpbGwga2VlcCBpdCBidWlsZGluZwor
ICAgb24gRGFyd2luL3g4Ni02NCBmb3Igbm93LCB0aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2VwdCBm
b3IgdGVzdHMuICovCisjaWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQorI2RlZmluZSBFTkFC
TEVfQjNfSklUIDEKKyNlbmRpZgorCiAvKiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFp
bGFibGUsIHRoZW4gZGlzYWJsZSB1cHBlciB0aWVycyBhcyB3ZWxsOiAqLwogI2lmICFFTkFCTEUo
SklUKQotI3VuZGVmIEVOQUJMRV9ERkdfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4g
cmVkZWZpbmUgaXQuICovCi0jdW5kZWYgRU5BQkxFX0ZUTF9KSVQgICAgICAvKiBVbmRlZiBzbyB0
aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI3VuZGVm
IEVOQUJMRV9GVExfSklUCisjdW5kZWYgRU5BQkxFX0IzX0pJVAogI2RlZmluZSBFTkFCTEVfREZH
X0pJVCAwCiAjZGVmaW5lIEVOQUJMRV9GVExfSklUIDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJVCAw
CiAjZW5kaWYKIAogLyogQ291bnRzIHVzZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxp
bmcgY291bnRlcnMuIEJlIHN1cmUgdG8gYWxzbwpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVk
TGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gK
KworbmFtZXNwYWNlIFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZp
Y2llbnRseSBwYXNzIGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJp
bmcKKy8vIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUg
c2hvdWxkIGJlIGRlY2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJk
YTxNeVRoaW5ncyogKGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9l
czoKKy8vCisvLyB2b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+
KFsmXSAoaW50IHgsIFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBO
b3RlIHRoYXQgdGhpcyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRo
ZSBsYW1iZGEgaXMgb25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0g
aGVuY2UgdGhlIG5hbWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
blR5cGU+IGNsYXNzIFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlw
ZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0
VHlwZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZv
aWQqIGFyZyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9h
cmcoYXJnKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFy
Z3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9pbXBsKG1fYXJnLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7
CisgICAgfQorCitwcml2YXRlOgorICAgIFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywg
QXJndW1lbnRUeXBlcyYmLi4uKTsKKyAgICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRh
RnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJl
c3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1i
ZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBQYXNzZWRGdW5jdG9yPgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2Vk
RnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pPihpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9y
KHN0ZDo6Zm9yd2FyZDxQYXNzZWRGdW5jdG9yPihmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitw
cml2YXRlOgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVu
dCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisg
ICAgICAgICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7Cisg
ICAgfQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0
aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAg
IHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3RkOjpm
b3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6U2NvcGVkTGFtYmRhOwordXNpbmcgV1RGOjpzY29wZWRMYW1iZGE7CisKKyNlbmRp
ZiAvLyBTY29wZWRMYW1iZGFfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTE1
MDcpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDYgKzc5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0
b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5j
dG9yKSkKKyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3Vt
ZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwx
MSBAQCBSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9y
PihmdW5jdG9yKSk7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1l
IEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNr
KEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRh
c2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263982</attachid>
            <date>2015-10-24 12:45:10 -0700</date>
            <delta_ts>2015-10-24 18:07:08 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>610036</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MyBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6Okxvd2VyaW5nU2VsZWN0b3I6Okxvd2VyaW5nU2VsZWN0b3Ip
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjph
Y2NlcHRSb290KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdT
ZWxlY3Rvcjo6YWNjZXB0Um9vdExhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHNMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6
YWNjZXB0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dl
cmluZ1NlbGVjdG9yOjphY2NlcHRPcGVyYW5kc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlMb2FkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5QWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmVBZGRM
b2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rv
cjo6dHJ5U3RvcmVBbmRMb2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlDb25zdDMyKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6QjM6Omxvd2VyVG9BaXIpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQuCisgICAg
ICAgICogYjMvQjNNZW1vcnlWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6TWVt
b3J5VmFsdWU6On5NZW1vcnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6
ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpNZW1v
cnlWYWx1ZTo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpNZW1vcnlW
YWx1ZSk6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNPcGNvZGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjppc0NoZWNrTWF0aCk6CisgICAgICAgICogYjMvQjNPcmlnaW4uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZHVtcCk6CisgICAgICAgICogYjMvQjNPcmln
aW4uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46Ok9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpQYXRj
aHBvaW50U3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6flBh
dGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpm
b3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlk
KToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQYXRjaHBv
aW50VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6
flBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIz
OjpQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgICogYjMvQjNQaGFz
ZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQaGFzZVNjb3BlOjpQaGFzZVNj
b3BlKToKKyAgICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6On5QaGFzZVNjb3BlKToKKyAgICAg
ICAgKiBiMy9CM1BoYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQcm9jZWR1cmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJvY2VkdXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6flByb2NlZHVyZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcik6CisgICAgICAgICog
YjMvQjNQcm9jZWR1cmUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNp
emUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphdCk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpp
dGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6OmZpbmROZXh0KToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjpWYWx1ZXNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRl
cmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6VmFsdWVzQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OlZhbHVlc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OnZhbHVlcyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGQpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90
S2luZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBiMy9CM1N0YWNrU2xvdEtpbmQuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNTdGFja1Nsb3RW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6On5TdGFj
a1Nsb3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90VmFsdWUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpTdGFja1Nsb3RWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Ns
b3RWYWx1ZTo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Omtp
bmQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Om9mZnNldEZyb21GUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpTdGFja1Nsb3RWYWx1ZSk6CisgICAgICAgICog
YjMvQjNTdGFja21hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmR1
bXApOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcDo6U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6b3BhcXVlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlN0YWNrbWFwOjpzZXRPcGFxdWVJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFj
a21hcDo6b3BhcXVlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmNvbnN0cmFp
bik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xvYmJlcik6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcDo6Y2xvYmJlcmVkKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpz
ZXRHZW5lcmF0b3IpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwpOgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpTdWNjZXNzb3JDb2xsZWN0
aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OnNpemUpOgorICAg
ICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpT
dWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0
b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpiZWdpbik6Cisg
ICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAqIGIz
L0IzU3dpdGNoQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6
ZHVtcCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hD
YXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6OmNhc2VW
YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0YXJnZXQpOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoQ2FzZTo6dGFyZ2V0QmxvY2spOgorICAgICAgICAqIGIzL0IzU3dpdGNo
VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjp+U3dpdGNo
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmFwcGVuZENhc2UpOgorICAgICAgICAoSlNDOjpC
Mzo6U3dpdGNoVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjpTd2l0Y2hWYWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6
OlN3aXRjaFZhbHVlOjpudW1DYXNlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZh
bHVlOjpjYXNlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmZhbGxUaHJvdWdoKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRj
aFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoVmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6QjM6OlN3aXRjaFZhbHVlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1
ZTo6ZW5kKToKKyAgICAgICAgKiBiMy9CM1R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNUeXBlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6aXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6aXNGbG9hdCk6CisgICAgICAgIChK
U0M6OkIzOjpwb2ludGVyVHlwZSk6CisgICAgICAgICogYjMvQjNVcHNpbG9uVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M1Vwc2lsb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6
YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OnBoaSk6CisgICAgICAg
IChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OlVwc2lsb25WYWx1ZSk6CisgICAgICAgICogYjMvQjNV
c2VDb3VudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6VXNlQ291
bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6flVzZUNvdW50cyk6CisgICAgICAg
ICogYjMvQjNVc2VDb3VudHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpVc2VDb3VudHM6
Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OnZhbGlkYXRlKToKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjp+VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRp
dHkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoTm9wKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkZWVwRHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZTo6dHlwZUZvcik6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcmlnaW4pOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoaWxkKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphaXJUeXBl
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpjaGlsZHJlbik6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6RGVlcFZhbHVlRHVtcDo6RGVlcFZh
bHVlRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlSW5saW5lcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphcyk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50MzIpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
Ojphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmFzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0ludCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjphc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3RhY2ttYXApOgor
ICAgICAgICAqIGIzL0IzVmFsdWVSZXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlUmVwOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvQjNWYWx1ZVJlcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpWYWx1
ZVJlcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpzdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6c3RhY2tB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6Y29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6OmNvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjpraW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvZmZzZXRGcm9tRlApOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9mZnNldEZyb21TUCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZVJlcDo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmRvdWJsZVZhbHVl
KToKKyAgICAgICAgKiBiMy9haXI6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJBcmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpk
dW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0RlZik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjphZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpzdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Y2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNWYWxpZFNjYWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpsb2dT
Y2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aW5kZXgpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OnJlbENvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnJl
c0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnNwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmtpbmQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ltbSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbW02NCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1N0YWNr
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0NhbGxBcmcpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
UmVsQ29uZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXNDb25kKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnRtcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OnBvaW50ZXJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YmFzZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c2NhbGUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlBU
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc1R5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omdwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZwcik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Z3BUbXBJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnBUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpdGhPZmZzZXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjphc1RydXN0ZWRJbW0zMik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVz
dGVkSW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbVB0cik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjphc0Jhc2VJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
YXNSZWxhdGlvbmFsQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1Jl
c3VsdENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpC
YXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQmFzaWNCbG9jay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Js
b2NrOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6bnVt
U3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVl
cEJhc2ljQmxvY2tEdW1wOjpEZWVwQmFzaWNCbG9ja0R1bXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpk
ZWVwRHVtcCk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2Fs
bFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
Q2FsbFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNw
ZWNpYWw6OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpk
ZWVwRHVtcEltcGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaDogQWRkZWQu
CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6Q29kZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6On5Db2RlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphZGRTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjphZGRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y0NhbGxTcGVjaWFs
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OmZpbmROZXh0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZpbmRO
ZXh0QmxvY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpudW1UbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbEFyZ0FyZWFTaXpl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVxdWVzdENhbGxBcmdBcmVhU2l6ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OnNldEZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpv
cGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6Q29kZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246OlN0YWNrU2xvdHNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNr
U2xvdHNDb2xsZWN0aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
dGFja1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjpTcGVjaWFsc0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3Bl
Y2lhbHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29k
ZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciop
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzcGVjaWFscyk6CisgICAgICAgICogYjMvYWlyL0FpckZy
ZXF1ZW50ZWRCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIz
L2Fpci9BaXJHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGVk
LmNwcDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Okluc2VydGlvblNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6Y29kZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc2VydGlvblNldDo6YXBwZW5kSW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0LmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmR1bXApOgorICAgICAgICAqIGIz
L2Fpci9BaXJJbnN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpJbnN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0Ojpmb3JFYWNoVG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8VG1wPjo6Zm9yRWFjaCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8QXJnPjo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc3Q6OmZvckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpo
YXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6ZXh0cmFDbG9iYmVyZWRS
ZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzU2hpZnRWYWxpZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmlzTHNoaWZ0MzJWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6bGl2ZUF0SGVhZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpsaXZlQXRUYWlsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxDYWxjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6bGl2ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVu
ZXNzOjpMb2NhbENhbGM6OnRha2VMaXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5l
c3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJQaGFzZVNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdwcnNJblByaW9yaXR5
T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpmcHJzSW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMv
YWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPjo6aW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+Ojpp
blByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZWdzSW5Qcmlvcml0eU9y
ZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3BlY2lhbDo6flNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpuYW1l
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlNwZWNpYWw6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFNwZWNpYWxEdW1wOjpEZWVw
U3BlY2lhbER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OmR1
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAgICogYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpz
cGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0
YWNrU2xvdDo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OlN0
YWNrU2xvdCk6CisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpieXRlU2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlN0YWNrU2xvdDo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xv
dDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6dmFsdWUpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTdGFja1Nsb3Q6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkRlZXBTdGFja1Nsb3REdW1wOjpEZWVwU3RhY2tTbG90RHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkRlZXBTdGFja1Nsb3REdW1wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6Z3BUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6ZnBUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3Ig
Ym9vbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6aXNGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUFIp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRlBSKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6Z3ByKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzVG1wSW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmdwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpUbXA6OmZwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OnRtcElu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0FsaXZlKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzaCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmVuY29kZUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUZQUik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlRtcDo6ZW5jb2RlR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVu
Y29kZUZQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNFbmNvZGVkRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlBUbXApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZGVjb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZGVjb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXBIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXBJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgICogYjMvYWlyL0FpclZh
bGlkYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnZhbGlkYXRlKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmI6IEFkZGVkLgorICAgICAgICAqIGIzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYjogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpjb21waWxlQW5kUnVuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3Q0Mik6
CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogaml0
L1JlZy5oOgorICAgICAgICAoSlNDOjpSZWc6OmluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnOjpp
c1NldCk6CisgICAgICAgIChKU0M6OlJlZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6
OlJlZzo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6UmVnOjpBbGxS
ZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpSZWc6OkFs
bFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpSZWc6
OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpS
ZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6UmVnOjphbGwpOgorICAgICAgICAoSlND
OjpSZWc6OmludmFsaWQpOgorICAgICAgICAoSlNDOjpSZWc6Om9wZXJhdG9yISk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0KToKKyAgICAgICAgKiBq
aXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmVuZCk6
CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpzZXRBbnkpOgorCiAyMDE1LTEwLTIzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIHVudXNlZCBTY3JvbGxMYXll
ciBUaW1lbGluZSBFdmVudFR5cGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCShyZXZpc2lvbiAxOTE1MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDE4IEBAIGFs
bCA6IFwKICAgICBCeXRlY29kZXMuaCBcCiAgICAgSW5pdEJ5dGVjb2Rlcy5hc20gXAogICAgIEpT
Q0J1aWx0aW5zLmggXAorICAgIEIzTG93ZXJpbmdNYXRjaGVyLmggXAorICAgIEIzQWRkcmVzc01h
dGNoZXIuaCBcCisgICAgQjNDb21wYXJpc29uTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBc
CisgICAgQWlyT3Bjb2RlLmNwcCBcCisgICAgQWlyT3Bjb2RlVXRpbHMuaCBcCisgICAgQWlyT3Bj
b2RlVXRpbHMuY3BwIFwKICMKIAogUFlUSE9OID0gcHl0aG9uCiBQRVJMID0gcGVybAorUlVCWSA9
IHJ1YnkKIAogSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIgPSAkKEphdmFTY3JpcHRDb3JlKS9T
Y3JpcHRzCiAKQEAgLTI1MiwzICsyNjAsMTkgQEAgYWxsIDogSlNSZXBsYXlJbnB1dHMuaAogCiBK
U1JlcGxheUlucHV0cy5oIDogJChJTlBVVF9HRU5FUkFUT1JfU1BFQ0lGSUNBVElPTlMpICQoSU5Q
VVRfR0VORVJBVE9SX1NDUklQVFMpCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3JlcGxh
eS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgLS1vdXRwdXREaXIgLiAtLWZy
YW1ld29yayBKYXZhU2NyaXB0Q29yZSAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykK
KworQjNMb3dlcmluZ01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0
dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBh
dHRlcm5zCisJJChSVUJZKSAkXiAKK0IzQWRkcmVzc01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29y
ZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0Iz
QWRkcmVzc01hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReCitCM0NvbXBhcmlzb25NYXRjaGVy
Lmg6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEph
dmFTY3JpcHRDb3JlKS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAk
XgorCitBaXJPcGNvZGUuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0
b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZ
KSAkXgorQWlyT3Bjb2RlLmNwcDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5l
cmF0b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChS
VUJZKSAkXgorQWlyT3Bjb2RlVXRpbHMuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29k
ZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CisJJChSVUJZKSAkXgorQWlyT3Bjb2RlVXRpbHMuY3BwOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMKKwkkKFJVQlkpICReCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTkxNTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQkw
RkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1
RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1
RDZCMkE1MTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1
RDZCMkE1NTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKQEAgLTY4
NSw2ICs2ODYsMTIxIEBACiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2Rl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEw
QTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQx
NzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVC
M0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovOyB9OworCQkwRkVD
ODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovOyB9OworCQkwRkVDODRGRjFCREFDREFD
MDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1
bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi87IH07CisJ
CTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxp
bmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tV
dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi87IH07CisJCTBG
RUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5j
cHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTA3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hl
Y2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNr
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1
MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi87IH07CisJCTBGRUM4NTBCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0
YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11
dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLzsgfTsKKwkJ
MEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTBFMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVl
LmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
NTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUx
MDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUu
Y3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi87IH07CisJCTBG
RUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDOTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxNDFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5o
ICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
QjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi87IH07CisJCTBGRUM4
NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQzFCREFDREFDMDA4MEZGNzQg
LyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9OworCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQg
LyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9j
ay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRTFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTE5MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5o
ICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi87
IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMTFCREFDREFDMDA4
MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9OworCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQg
LyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLzsgfTsKKwkJ
MEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMzFCREFDREFDMDA4MEZG
NzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsKKwkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovOyB9
OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENTFCREFDREFD
MDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTIwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1
ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLzsgfTsK
KwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBGRUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi87IH07CisJCTBGRUM4NTI1
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3Bw
ICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERF
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovOyB9OworCQkwRkVDODUy
OTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQ
aGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi87IH07CisJCTBG
RUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMTFCREFDREFDMDA4MEZGNzQg
LyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkwRkVDODUyQzFCREFDREFDMDA4MEZGNzQgLyog
QjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovOyB9OworCQkw
RkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMzFCREFDREFDMDA4
MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTJFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNw
cCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU1MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87IH07CisJCTBGRUM4NTMwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21h
cFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUzMTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovOyB9
OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovOyB9OworCQkwRkVDODUzMzFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi87IH07CisJCTBGRUM4NTM2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsKKwkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovOyB9OworCQkwRkVDODUzOTFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1
ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovOyB9OworCQkwRkVDODUzQjFC
REFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3Bw
ICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMjFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICov
OyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovOyB9OworCQkwRkVDODUzRjFCREFDREFD
MDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRz
LmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKKwkJMEZFQzg1NDExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUu
Y3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1NDMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovOyB9
OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLzsgfTsKKwkJ
MEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZF
Qzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovOyB9OworCQkwRkVDODU2RTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRl
U3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzAxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovOyB9OworCQkw
RkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QzFCREFDREM3MDA4MEZG
NzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICov
OyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRFMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODU3NDFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWly
Q0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmgg
Ki87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUy
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1
NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJH
ZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi87IH07CisJCTBGRUM4
NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTUxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi87IH07CisJCTBGRUM4NTdCMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9OworCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0
aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwICovOyB9Owor
CQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1OTFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBGRUM4NTdGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLzsgfTsK
KwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggKi87IH07CisJCTBG
RUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQ
aGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLzsgfTsK
KwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJl
Z2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5Lmgg
Ki87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYyMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODgxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi87
IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi87IH07CisJCTBGRUM4
NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsgfTsKKwkJMEZFQzg1OEIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNw
cCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjcxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovOyB9OworCQkwRkVDODU4RDFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovOyB9
OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2OTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovOyB9OworCQkwRkVD
ODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZF
Qzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQg
LyogQWlyR2VuZXJhdGVkLmNwcCAqLzsgfTsKKwkJMEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrICovOyB9OworCQkwRkVDODVBNDFCREI1Q0YxMDA4MEZGNzQgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLzsgfTsKKwkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVBRTFCREI1RDVF
MDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0
YW50SG9pc3RpbmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMgLyog
U2V0dXBWYXJhcmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODIy
LDYgKzE5MzgsMTMgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZDRUZBQjUxODA1RDYx
NjAwNDcyQ0U0OwogCQkJcmVtb3RlSW5mbyA9IGxsdm1Gb3JKU0M7CiAJCX07CisJCTBGRUM4NUIw
MUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2Eg
PSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZF
ODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOwor
CQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQ7CisJCQly
ZW1vdGVJbmZvID0gdGVzdGIzOworCQl9OwogCQkwRkY5MjJEMjE0RjQ2QjJGMDA0MUEyNEUgLyog
UEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVBy
b3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFBy
b2plY3Qgb2JqZWN0ICovOwpAQCAtMjU2Myw2ICsyNjg2LDEyMCBAQAogCQkwRkVBMEEyRjE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdKSVRDb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMzAxNzBENDBCRjAwQkI3MjJDIC8qIERG
R0pJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklUQ29kZS5o
OyBwYXRoID0gZGZnL0RGR0pJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1l
bnRSZWdWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QXJndW1lbnRSZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQmFzaWNC
bG9jay5jcHA7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9jay5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGIzL0IzQmFzaWNC
bG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja1V0aWxzLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2tV
dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQTFCREFDREFDMDA4
MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQmxvY2tXb3JrbGlzdC5oOyBwYXRoID0gYjMvQjNCbG9ja1dvcmtsaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0No
ZWNrU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3Bl
Y2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NoZWNrU3BlY2lhbC5o
OyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMv
QjNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb21tb24u
Y3BwOyBwYXRoID0gYjMvQjNDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tb24uaDsgcGF0aCA9IGIzL0IzQ29tbW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b21tdXRhdGl2aXR5LmNwcDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11
dGF0aXZpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tdXRhdGl2
aXR5Lmg7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmg7IHBhdGggPSBiMy9CM0Nv
bnN0MzJWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNTFCREFD
REFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNDb25zdDY0VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDY0VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNDb25zdDY0VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3Q2NFZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
RG91YmxlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0RG91YmxlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
dHJvbFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29u
dHJvbFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29udHJvbFZhbHVlLmg7
IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgcGF0
aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmg7IHBhdGggPSBiMy9C
M0ZyZXF1ZW5jeUNsYXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvQjNGcmVxdWVu
dGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0UxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmF0ZS5oOyBw
YXRoID0gYjMvQjNHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBw
YXRoID0gYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW5kZXhNYXAuaDsgcGF0aCA9IGIzL0IzSW5k
ZXhNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNJbmRleFNldC5oOyBwYXRoID0gYjMvQjNJbmRleFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5jcHA7IHBh
dGggPSBiMy9CM0xvd2VyVG9BaXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5oOyBwYXRoID0gYjMvQjNMb3dlclRvQWly
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzTWVtb3J5VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01l
bW9yeVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTWVtb3J5VmFs
dWUuaDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3Bjb2RlLmNwcDsgcGF0aCA9IGIzL0IzT3Bj
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDgxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
T3Bjb2RlLmg7IHBhdGggPSBiMy9CM09wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW4uY3BwOyBwYXRoID0gYjMvQjNPcmln
aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQTFCREFDREFDMDA4
MEZGNzQgLyogQjNPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNP
cmlnaW4uaDsgcGF0aCA9IGIzL0IzT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVj
aWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNp
YWwuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZh
bHVlLmNwcDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZhbHVl
Lmg7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhhc2VTY29wZS5jcHA7IHBhdGgg
PSBiMy9CM1BoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1Byb2NlZHVyZS5jcHA7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZS5oOyBwYXRoID0g
YjMvQjNQcm9jZWR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZUlubGluZXMuaDsgcGF0aCA9IGIzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNDFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1N0YWNrbWFwLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja21hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwLmg7
IHBhdGggPSBiMy9CM1N0YWNrbWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5oOyBwYXRoID0gYjMv
QjNTdGFja21hcFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuY3BwOyBwYXRoID0gYjMvQjNT
dGFja1Nsb3RLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90S2lu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1N0YWNrU2xvdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1N0YWNrU2xvdFZhbHVlLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmg7IHBhdGggPSBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1N3aXRjaENhc2UuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2Fz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N3aXRjaENhc2UuaDsgcGF0
aCA9IGIzL0IzU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3dp
dGNoVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMDFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmg7IHBhdGggPSBiMy9CM1N3aXRjaFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNUeXBlLmNwcDsg
cGF0aCA9IGIzL0IzVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNUeXBlLmg7IHBhdGggPSBiMy9CM1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmg7IHBhdGggPSBiMy9C
M1Vwc2lsb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNTFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNVc2VDb3VudHMuY3BwOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVc2VD
b3VudHMuaDsgcGF0aCA9IGIzL0IzVXNlQ291bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMv
QjNWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFsaWRhdGUuaDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNWYWx1ZS5oOyBwYXRoID0gYjMvQjNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUlubGluZXMuaDsgcGF0aCA9
IGIzL0IzVmFsdWVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVSZXAuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlUmVwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFs
dWVSZXAuaDsgcGF0aCA9IGIzL0IzVmFsdWVSZXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFjay5jcHA7
IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlU3RhY2suaDsgcGF0
aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQXJnLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFyZy5o
OyBwYXRoID0gYjMvYWlyL0FpckFyZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQmFzaWNCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEUxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyQ0NhbGxTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNvZGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
R2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRlLmg7IHBhdGgg
PSBiMy9haXIvQWlyR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRpb25Db250ZXh0Lmg7IHBhdGggPSBi
My9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NTYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVz
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
SW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc2Vy
dGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnN0LmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJJbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NUIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlySW5zdC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3RJbmxpbmVzLmg7
IHBhdGggPSBiMy9haXIvQWlySW5zdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxpdmVuZXNzLmg7IHBhdGggPSBiMy9haXIvQWly
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyUGhhc2VTY29wZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpclBoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
clJlZ2lzdGVyUHJpb3JpdHkuY3BwOyBwYXRoID0gYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MTFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJSZWdpc3RlclByaW9yaXR5Lmg7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
ZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BlY2lhbC5oOyBw
YXRoID0gYjMvYWlyL0FpclNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBw
YXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BpbGxFdmVyeXRoaW5nLmg7
IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3RhY2tTbG90LmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclN0YWNrU2xvdC5oOyBwYXRoID0gYjMvYWlyL0FpclN0
YWNrU2xvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2ODFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpclRtcC5jcHA7IHBhdGggPSBiMy9haXIvQWlyVG1wLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJU
bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyVG1wSW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpclRtcElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclZhbGlkYXRl
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJWYWxpZGF0ZS5oOyBwYXRoID0gYjMvYWly
L0FpclZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTkyMUJE
QjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyR2VuZXJhdGVkLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0
ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODVBRDFCREI1Q0YxMDA4
MEZGNzQgLyogdGVzdGIzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSB0ZXN0YjM7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBG
RUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gdGVzdGIzLmNwcDsgcGF0aCA9IGIzL3Rlc3RiMy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdD
b25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFu
dEhvaXN0aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdC
ODFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBwYXRo
ID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dXBWYXJhcmdzRnJhbWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NjksNiArNDAwNiwxNSBAQAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OworCQkwRkVDODVB
MjFCREI1Q0YxMDA4MEZGNzQgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1l
d29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZp
bGVzID0gKAorCQkJCTBGRUM4NUEzMUJEQjVDRjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGRUM4NUE0MUJEQjVDRjEwMDgwRkY3NCAvKiBK
YXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEZGOTIyQzYxNEY0
NkIxMzAwNDFBMjRFIC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0zODM4LDYg
KzQwODQsNyBAQAogCQkJCTE0MTIxMTIwMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovLAog
CQkJCTE0QkQ1OUJGMEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTY1MTEyMzA1
MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAorCQkJCTBGRUM4NUFEMUJEQjVDRjEw
MDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4NTgsNiArNDEwNSw3IEBACiAJCQkJQTdDMjI1Q0Mx
Mzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQz
MkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywKIAkJCQk5Njg4Q0IxMjBFRDEyQjRFMDAx
RDY0OUYgLyogYXNzZW1ibGVyICovLAorCQkJCTBGRUM4NEIyMUJEQUNENUUwMDgwRkY3NCAvKiBi
MyAqLywKIAkJCQlBNTRDRjJFQTE4NEVBNzM5MDAyMzdGMTkgLyogYmluZGluZ3MgKi8sCiAJCQkJ
QTdEODAxOUYxODgwRDY2RTAwMjZDMzlCIC8qIGJ1aWx0aW5zICovLAogCQkJCTk2OUEwNzhGMEVE
MUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLywKQEAgLTQwNzEsNiArNDMxOSwxMzQgQEAKIAkJ
CW5hbWUgPSBmdGw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkwRkVDODRC
MjFCREFDRDVFMDA4MEZGNzQgLyogYjMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCisJCQkJ
MEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi8sCisJ
CQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovLAor
CQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovLAorCQkJ
CTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRkVD
ODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovLAorCQkJCTBG
RUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovLAorCQkJCTBG
RUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRkVD
ODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4
NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEJE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEJFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLywKKwkJCQkwRkVDODRCRjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uY3BwICovLAorCQkJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW1vbi5oICovLAorCQkJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuY3BwICovLAorCQkJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuaCAqLywKKwkJCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dDMyVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
MzJWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRW
YWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZh
bHVlLmggKi8sCisJCQkJMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVW
YWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3Vi
bGVWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xW
YWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZh
bHVlLmggKi8sCisJCQkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuY3BwICovLAorCQkJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNs
YXNzLmggKi8sCisJCQkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJs
b2NrLmggKi8sCisJCQkJMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3Bw
ICovLAorCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggKi8sCisJ
CQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
ICovLAorCQkJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8sCisJ
CQkJMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLywKKwkJCQkwRkVD
ODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLywKKwkJCQkwRkVDODRE
NDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8sCisJCQkJMEZFQzg0RDUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEQ2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggKi8sCisJCQkJMEZFQzg0RDcxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLywKKwkJCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQg
LyogQjNPcGNvZGUuaCAqLywKKwkJCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmln
aW4uY3BwICovLAorCQkJCTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICov
LAorCQkJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNw
cCAqLywKKwkJCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lh
bC5oICovLAorCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1
ZS5jcHAgKi8sCisJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZh
bHVlLmggKi8sCisJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5j
cHAgKi8sCisJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICov
LAorCQkJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgKi8sCisJ
CQkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8sCisJCQkJMEZF
Qzg0RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovLAorCQkJCTBG
RUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLywKKwkJCQkwRkVDODRF
NTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovLAorCQkJCTBGRUM4NEU2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0RTcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0RTgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8sCisJCQkJMEZFQzg0RTkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovLAorCQkJCTBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRFQjFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovLAorCQkJCTBGRUM4NEVDMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLywKKwkJCQkwRkVDODRFRDFC
REFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLywKKwkJCQkwRkVDODRFRTFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8sCisJCQkJMEZFQzg0RUYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEYwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5jcHAgKi8sCisJCQkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5oICovLAorCQkJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5j
cHAgKi8sCisJCQkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLywK
KwkJCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLywKKwkJCQkw
RkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg0
RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLywKKwkJCQkwRkVDODRGOTFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RkExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZUlubGluZXMuaCAqLywKKwkJCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1
ZVJlcC5jcHAgKi8sCisJCQkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAu
aCAqLywKKwkJCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLywKKwkJ
CSk7CisJCQluYW1lID0gYjM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkw
RkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5jcHAgKi8sCisJCQkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFs
bG9jYXRlU3RhY2suaCAqLywKKwkJCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJn
LmNwcCAqLywKKwkJCQkwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggKi8sCisJ
CQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAorCQkJ
CTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEZF
Qzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZF
Qzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAorCQkJCTBGRUM4
NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKKwkJCQkwRkVDODU1MTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NTkyMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJH
ZW5lcmF0ZWQuY3BwICovLAorCQkJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0aW9uQ29udGV4dC5oICovLAorCQkJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJI
YW5kbGVDYWxsZWVTYXZlcy5jcHAgKi8sCisJCQkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8sCisJCQkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5oICovLAorCQkJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnN0LmNwcCAqLywKKwkJCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dC5oICovLAorCQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5o
ICovLAorCQkJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovLAor
CQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLywKKwkJ
CQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovLAorCQkJCTBG
RUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLywKKwkJ
CQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovLAor
CQkJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLywKKwkJCQkw
RkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTY0
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICovLAorCQkJCTBGRUM4
NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLywKKwkJCQkwRkVD
ODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLywKKwkJCQkwRkVDODU2
NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8sCisJCQkJMEZFQzg1NjgxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8sCisJCQkJMEZFQzg1NjkxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcC5oICovLAorCQkJCTBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJU
bXBJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLywKKwkJCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUu
aCAqLywKKwkJCSk7CisJCQluYW1lID0gYWlyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKIAkJMEZGNDI3MkUxNThFQkNDRTAwNENCOUZGIC8qIGRpc2Fzc2VtYmxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC02MDQyLDYgKzY0MTgsNyBA
QAogCQkJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBB
YnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQg
LyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhl
YWRlcnMgKi8sCkBAIC02MDcxLDggKzY0NDgsMTAgQEAKIAkJCQlBNUVBNzBFODE5RjVCMTAxMDA5
OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hl
ZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjY0QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE1MTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGlu
RXhlY3V0YWJsZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjA4Nyw2ICs2NDY2LDcgQEAKIAkJCQk5
OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfbW9kZWwucHkgaW4gSGVhZGVycyAq
LywKIAkJCQk5OURBMDBBNTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfdGVtcGxhdGVzLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERUExMzIxQjlGMzE2MzAwNkQ2NUREIC8qIEJ1aWx0aW5V
dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RTcyOTQwQjE5MEYwNTE0MDAxQTkx
QjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTcxNUVEOEU0NjAw
RjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTgxNUVEOEU0
NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjA5Nyw2
ICs2NDc3LDcgQEAKIAkJCQkwRjJERDgwQjFBQjNEODU4MDBCQkI4RTggLyogQnl0ZWNvZGVLaWxs
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzAxODM1NjZG
OTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2Rl
VXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyog
QnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMzMsMTMgKzY1MTQsMTYgQEAKIAkJCQkw
RjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2NTUzQTMzMjE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENv
bXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyQzFCREFDREFDMDA4
MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBM0E4MTc5NzQz
MkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNkZDNzUxMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBjb25maWcu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVj
aWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29u
c2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDhBMThCQzIxQzMwMEJF
REY3NiAvKiBDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwODFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3
QTE4OUIwNTEwMDA2MzMyMzEgLyogQ29uc29sZU1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1M0NFMDg2MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUZEMDA3NDE4OUIwMzhDMDA2MzMyMzEgLyogQ29uc29sZVR5cGVzLmggaW4g
SGVhZGVycyAqLywKQEAgLTYxNTMsNiArNjUzNyw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAw
ODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEz
RkExNDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MkM4RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUyNDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNp
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNjQsNiArNjU0OSw3IEBACiAJCQkJOTk1OUU5MkIx
QkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2
MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBE
YXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTgzLDYgKzY1NjksNyBAQAogCQkJ
CUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0Yw
MDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3
MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQw
MjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyog
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2
RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8s
CkBAIC02MTkzLDcgKzY1ODAsOSBAQAogCQkJCTBGMkREODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBE
RkdBcmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzIyMTg3NzUw
NTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0
MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdB
cnJheU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTgg
LyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcx
ODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRl
cnMgKi8sCkBAIC02MjAzLDYgKzY1OTIsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMz
Q0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdC
bG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAwMTlBREE0MTAwMDZB
QzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyNDIsOCArNjYz
MiwxMCBAQAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0Vk
Z2VVc2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURG
MDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0
OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRy
YXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjI3Myw2ICs2NjY1LDcgQEAK
IAkJCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NjFC
REFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdM
aXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAg
LyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjI4
MSw2ICs2Njc0LDcgQEAKIAkJCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZp
ZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8q
IERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENE
ODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE0MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zm
c2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8q
IERGR05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02Mjk5LDYgKzY2OTMsNyBA
QAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0
Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNTFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzEx
NDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4
aXRGdXp6LmggaW4gSGVhZGVycyAqLywKQEAgLTYzMTYsNiArNjcxMSw4IEBACiAJCQkJMEZGQzky
MTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERG
ODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZD
Q0ZDMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzNDAsNiArNjczNyw3IEBACiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQw
IC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDhBMzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERG
R1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMx
REIxMjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAt
NjM1MSw2ICs2NzQ5LDcgQEAKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBD
NTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIg
LyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkM5N0Y0MjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzgwLDYgKzY3NzksNyBAQAogCQkJCTBGNTZBMUQzMTUw
MDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5n
ZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBG
bG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3
NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjQzOCw2ICs2ODM4LDcgQEAK
IAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVl
RnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQg
LyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5
OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMy
QzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
MzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAq
LywKQEAgLTY0NDUsOCArNjg0NiwxMCBAQAogCQkJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAv
KiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNDBF
MTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTBGQjE5NzRBRTYxMDA4MDg1N0MgLyogRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRCRkYyQzFBRDQ3
NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rp
dml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTY0ODMsNiArNjg4Niw3IEBACiAJCQkJ
QzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUExQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFCMUFBOTA5
MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
MDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTA4LDYgKzY5MTIsNyBAQAogCQkJCUMyRTUy
NkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
N0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2
aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRl
bnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNkRERUExOERBNDRBQjAwQTM4M0QwIC8q
IElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3NjE4OUIwMzhD
MDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTY1NjEs
NiArNjk2Niw3IEBACiAJCQkJQTFCOUUyM0MxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgxOTNFMzFCNEUwQ0RCMDBGQzEw
MjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQxQjRFMENEQjAwRkMxMDI5IC8qIEludGxD
b2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDZFMUI0REMx
NDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
NTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC02NTkxLDYgKzY5OTcsNyBAQAogCQkJCTBGMjRFNTREMTdFRTI3
NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQz
MTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEz
MTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
NjYwNCw2ICs3MDExLDcgQEAKIAkJCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JEQUVDQjE3RjRFQTE0
MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4QjE0MTg2
RDFCNjI1MjdGMDBGQjIwNjggLyogSlNBcnJvd0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNCYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDBEMTdENzBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZGQTlFOTIxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjIwLDYgKzcwMjgsOCBAQAogCQkJCTg2NUEz
MEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU0NKU1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2xhc3NSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1M0NFMDg4MThCQzFBNTYwMEJFREY3NiAvKiBKU0NvbnNvbGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTFFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlND
b250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyog
SlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1OEMwMjQyMThFNEE0MUEw
MDAzMkJDNSAvKiBKU0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTY2MzUsNiAr
NzA0NSw3IEBACiAJCQkJRkUzODRFRTYxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCBp
biBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU4MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNFbnZpcm9ubWVudFJlY29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjAxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTND
NjE0MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdC
NEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjY0NCwxMSArNzA1NSwxMyBAQAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQjFCREFDREFDMDA4MEZG
NzQgLyogQjNJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjEwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA4NjE4
OUIxQjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1QzNBMUE2MThDMDQ5MDIwMEM5NTkzQSAvKiBKU0dsb2JhbE9iamVjdENvbnNv
bGVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjY3OSw2ICs3MDkyLDcgQEAKIAkJCQlBNzAw
ODc0MjE3Q0JFOEVCMDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NERF
Rjk2MTgyRDk5MTQwMDUyMkMyMiAvKiBKU01hcEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5OTU5RTkyRDFCRDE3RkE0MDAxQUE0MTMgLyoganNtaW4ucHkgaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzMThDQkMxMUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM5REE0QTcxQjdFOEI3QzAwODRG
MzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggaW4gSGVhZGVycyAqLywKQEAgLTY3MDgsNiArNzEyMiw3
IEBACiAJCQkJQTdDMUVBRjAxNzk4N0FCNjAwMjk5REIyIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RTg1NTM5MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1
aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Vwc2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQzBFQzMxQUEwRDdEQTAwQjZB
QUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2MDBCNUE3MTUy
QkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MjgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nUmVmLmggaW4gSGVhZGVycyAqLywKQEAg
LTY3NjEsOSArNzE3NiwxMSBAQAogCQkJCTBGNDY4MEEzMTRCQTdGOEQwMEJGRTI3MiAvKiBMTElu
dEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MENCMTRCQkIxNzIwMEJGRTI3
MiAvKiBMTEludE9mZmxpbmVBc21Db25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0Iy
MTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNDY4MEE1MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYwQjgzOUQxNEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkNFRkFDRTE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQ0YxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUElG
dW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAv
KiBMTFZNRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFEMzE4MDVFREND
MDA0NzJDRTQgLyogTExWTUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNjc3NiwxMiArNzE5
MywxNCBAQAogCQkJCTg2RDNCMkM2MTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFS
TS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFBMDA5QzAxODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3Jv
QXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ2MEZEREVBOTgwMDA2
RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUz
QzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjNCMjNF
MDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJNSVBTLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRTY4QzYzNzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBOTEzNUU1RTFDMDA5NjMw
MTIgLyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU0MEYz
QTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRo
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNjBGM0E4M0MxMDBGODQ3MTAgLyogTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzNBMTdDQkU4
NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4NTA3
RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtNjgwNiw2
ICs3MjI1LDcgQEAKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3
IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQyMTFC
OTAxM0RFMDAzNDZCNTIgLyogTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0
b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9k
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI4MThBMUIyNTkwMDI2RDg4RiAvKiBOb25k
ZXRlcm1pbmlzdGljSW5wdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjgyNiw2ICs3MjQ2LDcgQEAK
IAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkx
MCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4
OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2
RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtNjgzOCwxMyAr
NzI1OSwxNyBAQAogCQkJCTBGRjlDRTc0MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0Fj
Y2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2
QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVDRDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2Zp
bGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QTUxNjZBRDM1MTAw
MEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ3
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3
MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dl
bmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQz
NjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGVkQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjg2NiwxMCArNzI5MSwxMyBAQAogCQkJ
CTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODU4NDFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzgwQTIxOEZFMUU5ODAwMUU3MkQ5IC8qIFB1cmVO
YU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVDRDIzMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRC
eUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAv
KiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MDFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5M0I0QUExOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3OTFC
REFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENE
NEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4g
SGVhZGVycyAqLywKQEAgLTY4ODksNiArNzMxNyw3IEBACiAJCQkJMEZDMzE0MTIxODE0NTU5MTAw
MDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTdEMjNFRTE4OTFC
NTU0MDAzMUM3RkEgLyogUmVndWxhckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUJBMTVFODE4MjM0MEIzMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFQTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5z
cGVjdG9yQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVGMDE4MjM0NUFGMDBB
ODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02
ODk2LDYgKzczMjUsNyBAQAogCQkJCUE1QkExNUVEMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJ
bnNwZWN0b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MTE3RUUy
NzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThD
NkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEIwQTlE
MTFBOUI2NjQ2MDAwMTMwNkEgLyogUnVudGltZUZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MkMwNjExRjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjkyNSw2ICs3MzU1LDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJF
OTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0
MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBF
MTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNl
UHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtNjk0NCw2ICs3Mzc1LDcgQEAK
IAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDJFMzEzQjEzNEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDU3MjI4NjE0MzdFMTQwMDA1RkRFMjYgLyogU3Ryb25nSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVu
ZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3Ry
dWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyog
U3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5
NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCBpbiBIZWFkZXJzICovLApAQCAtNjk4MCwxMCArNzQx
MiwxMiBAQAogCQkJCTBGMkQ0REVBMTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8q
IFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDOTUyQjcxOUEyODk4NTAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERUMxOTgz
MkRDNDAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RDRERjAxOTgzMkRENjAwN0Q0QjE5IC8qIFR5cGVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NEZGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2V4dGVy
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDQxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4
Nl9pbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDIwLDggKzc0NTQsMTAgQEAKIAkJCQlGRUQ5
NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OTE5RDI2MTU4NTNDRTMwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDJFMzEzQzEzNEZGMEE2MDBBRkFEQjUgLyogV2Vhay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0QkZDRTY5MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xv
dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBX
ZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBC
MTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtNzA0Myw5ICs3
NDc5LDEyIEBACiAJCQkJOTk1OUU5MkUxQkQxN0ZBNDAwMUFBNDEzIC8qIHh4ZC5wbCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzMTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21h
cFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4
MTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NzA0QjQzMTJEQjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CkBAIC03MDcwLDYgKzc1MDksMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRkNFRkFCNjE4
MDVENjE2MDA0NzJDRTQgLyogbGlibGx2bUZvckpTQy5keWxpYiAqLzsKIAkJCXByb2R1Y3RUeXBl
ID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5keW5hbWljIjsKIAkJfTsKKwkJMEZF
Qzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2
ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRkVDODVBODFCREI1Q0YxMDA4
MEZGNzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRl
c3RiMyIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQkwRkVDODU5NTFCREI1Q0YxMDA4MEZG
NzQgLyogU291cmNlcyAqLywKKwkJCQkwRkVDODVBMjFCREI1Q0YxMDA4MEZGNzQgLyogRnJhbWV3
b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2ll
cyA9ICgKKwkJCSk7CisJCQluYW1lID0gdGVzdGIzOworCQkJcHJvZHVjdE5hbWUgPSB0ZXN0YXBp
OworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0
YjMgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOwor
CQl9OwogCQkwRkY5MjJDMzE0RjQ2QjEzMDA0MUEyNEUgLyogSlNDTExJbnRPZmZzZXRzRXh0cmFj
dG9yICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IDBGRjkyMkNBMTRGNDZCMTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAqLzsK
QEAgLTcyMjUsNiArNzY4MCw3IEBACiAJCQkJMTRCRDU5QkUwQTNFOEY5MDAwQkFGNTlDIC8qIHRl
c3RhcGkgKi8sCiAJCQkJOTMyRjVCREEwODIyQTFDNzAwNzM2OTc1IC8qIGpzYyAqLywKIAkJCQk2
NTExMjJGNzE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKKwkJCQkwRkVDODU5NDFC
REI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3MTUyQjlFMTcwMDUyMzFE
RSAvKiBUZXN0IFRvb2xzICovLAogCQkJKTsKIAkJfTsKQEAgLTc0NzIsNiArNzkyOCwxNCBAQAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owor
CQkwRkVDODU5NTFCREI1Q0YxMDA4MEZGNzQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBC
WFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJ
CWZpbGVzID0gKAorCQkJCTBGRUM4NUFGMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CisJCX07CiAJCTBGRjkyMkM0MTRGNDZCMTMwMDQxQTI0RSAvKiBTb3VyY2VzICovID0g
ewogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OwpAQCAtNzUyNyw2ICs3OTkxLDcgQEAKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBB
Qzc2NDkgLyogQWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRDEwN0VD
Mzc2MDA0MjdBNDggLyogQXJnTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc0M0JBQTE2
Qjg4MjQ5MDA5RjkyNzcgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODZEM0IyQzMxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk2NUMwMjg1MDE3MTc5NUUyMDAzNTFFMzUgLyogQVJNdjdEaXNh
c3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVDMDI4NUMxNzE3OTY2ODAwMzUxRTM1
IC8qIEFSTXY3RE9wY29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1MzQsOCArNzk5OSwxMCBA
QAogCQkJCUE3QThBRjM0MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkZDOTlENDE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0
ZXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QThBRjM2MTdBREI1RjMw
MDVBQjE3NCAvKiBBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
M0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUJGMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QkRBRUM4MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9y
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjM5NDU0
MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzAxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5UHJvdG90eXBlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjRFNTQwMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC03NTU2LDggKzgwMjMsMTAgQEAKIAkJCQkxNDI5RDhERDBFRDIy
MDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRUM5QkI2
MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2MkQ3NTVENjFCODRGQjQ2MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJv
bFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ1MUI4NEZCNDAwMDE4MDFGQSAv
KiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ0
MUI4NEZCM0QwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxM
aW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyNzY3MzIzMUI2ODBDMUUwMEZEOUYy
RSAvKiBDYWxsTW9kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1NzAsNiArODAzOSw3IEBACiAJ
CQkJQTc3RjE4MjExNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjhGOTQ0NjE2Njc2NEYxMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVy
YXRlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyog
Q29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBE
NjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03NTc3LDYgKzgwNDcsNyBAQAogCQkJCUE3MDlGMkYyMTdBMEFDMkEwMDUxMkU5OCAvKiBDb21t
b25TbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1M0EzMzExN0ExRjFFRTAwOENG
NkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdFNUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NThCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RkM3NTAxOTYxMTBBODAwRTFEMDJEIC8qIENv
bXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAw
MUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYwNCw2
ICs4MDc1LDcgQEAKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNTA2ODY3MUFFMjVFMjgw
MDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3
QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDAxMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MTMsNiArODA4NSw3IEBACiAJCQkJMEY2Mzk0
ODQxNUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBN0Q5QTI5NDE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxh
YmlsaXR5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MTRD
QTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxv
Y2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjIxLDYgKzgwOTQsNyBAQAogCQkJCTg2RUM5REM0
MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0NjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1
ZVJlcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzY5
NDFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzY1OCw2ICs4MTMyLDcgQEAKIAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBC
QkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlE
QzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU2RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3
RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkw
NTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03NzAwLDE0ICs4MTc1LDE3IEBACiAJCQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0Yy
NDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzAy
NUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzOTJDODkxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBE
RkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVE
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyog
REZHUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0VBMTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhB
OTc3QTE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVEMTRFRjkwQjMwMEM3MjUzMiAvKiBERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMjFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhl
YXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MjE5NkI4RjlFMDA5MTA1
MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzcyNSw2ICs4MjAzLDgg
QEAKIAkJCQkwRkMyMENCNTE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjg5M0JEQjE5MzZFMjNDMDAxMjExRjQgLyog
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc5MDg1
NTE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGRTE4QTYwMDcwMDAx
QTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0
NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhB
MzI3MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzc1Miw2ICs4MjMyLDcgQEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVF
MDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5jb2RlZFZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUwOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVy
cm9ySGFuZGxpbmdTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2
MDA0MjdBNDggLyogRXJyb3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3OTYsNiAr
ODI3Nyw3IEBACiAJCQkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExM
b3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwMDFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4MDMsNiArODI4NSw3IEBACiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJD
IC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ4NTMyOTE4N0RGREVDMDA4
M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZB
QUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFCMzE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzlBMTgwM0FE
QjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODM1LDYg
KzgzMTgsNyBAQAogCQkJCUE1RkQwMDc1MTg5QjAzOEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0Zh
Y3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI1RjhCQ0QxNTc1NDRBOTAwMjQ1QjcxIC8q
IEluY3JlbWVudGFsU3dlZXBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzRTA0RTE2MTY0
QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyog
SW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4NDIsNiArODMyNiw3IEBACiAJ
CQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTlFNzI5NDA4MTkwRjAyMUUwMDFBOTFCNSAvKiBJbml0aWFsaXplTExW
TVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAv
KiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTdCMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyog
SW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg1Myw2ICs4MzM4LDcg
QEAKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3Ry
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y3QzE4NDAzNjAzMDBCRkNFMjcgLyogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODcx
ODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODUzNzFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgxMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRTUxODkwQ0VCRjAw
MzFDN0ZBIC8qIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUzMjQzODkxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA5LDYgKzgzOTUsNyBAQAogCQkJCTg2RkE5RTkxMTQy
QkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1
bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAx
IC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJG
NjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4
MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5
MTYsNiArODQwMyw4IEBACiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpT
Q2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2
IC8qIEpTQ29uc29sZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU5MDFCREFDREM3MDA4
MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzIwMjhCNjE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxz
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkyNiwxNiArODQxNSwxOSBAQAogCQkJCUZFMzg0RUU3
MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0xvd2VyVG9BaXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0OCAvKiBKU0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNUZEMDA4NTE4OUIxQjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25z
b2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVDM0ExQTUxOEMwNDkwMjAwQzk1OTNB
IC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUwRDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU5NDU1OTIxODI0NzQ0NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdn
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdEMjNFOTE4OTFCMDc3MDAzMUM3RkEgLyog
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTlE
MTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0NDM0M2MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJ
bnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYzMTg4MDlE
RDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5MDAxMTBGMTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyMzFCREFDREFDMDA4MEZG
NzQgLyogQjNPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAw
N0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTNFNUMxMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA4MDFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRl
cm5hbFByb21pc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTU0LDYgKzg0NDYsNyBAQAogCQkJ
CUUzMThDQkMwMUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVS
ZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8q
IEpTTmF0aXZlU3RkRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAw
OTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTc5NjcsNiArODQ2MCw3IEBACiAJCQkJRTNFRjg4NzQxQjY2REYyMzAwM0Yy
NkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYy
NTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU1MkMzN0YxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTExMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyOEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpT
UmVwbGF5SW5wdXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODc0QUU1MTVFQkRFNEEwMDJF
MzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzBDNEFEMTY4MTA2N0Uw
MDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5OTUsNiArODQ4
OSw3IEBACiAJCQkJNzA5RkI4NjcxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3Jh
cHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMx
MzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNG
RDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MDAyLDkgKzg0OTcsMTIgQEAKIAkJCQkxNDhGMjFCMDEwN0VD
NTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkx
NEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVB
NkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1N0YxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEQyMTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QXJndW1lbnRSZWdWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0MTFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3
Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBMTEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODAxMyw2ICs4NTExLDcgQEAKIAkJCQlBN0U1QUIzNzE3OTlF
NEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDQ2OURERTEwN0VDN0U3MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTFGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QjcyM0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNo
aW5lU3RhY2tNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAw
QUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QzU2OEUw
MTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTgwMjIsMTAgKzg1MjEsMTIgQEAKIAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyog
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3Mzkx
N0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3NERFRjkzMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUwNzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4NzNEMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2
IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5
QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYz
REExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDM0MEE0ODQxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYxMDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MDY0LDE3ICs4NTY1LDIxIEBACiAJCQkJMEZGNzI5QUQxNjZB
RDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNzI5QUUxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMTM5MTI5MTY3NzFDMzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2Rl
U2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVD
MDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE5
MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODUzMDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNp
YWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNp
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFBy
b2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQx
QjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTNCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFODEwN0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlT
bG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQ
cm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA4MywxMCArODU4OCwxMiBAQAog
CQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRW
YXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAw
Mjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzM2MzdB
NTFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUExNzEyQjNCMTFDN0IyMTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NjQyQzUxMDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVk
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMDAsNiArODYwNyw3
IEBACiAJCQkJQTVCQTE1RTkxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBp
biBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgyNDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNw
ZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUVDMTgyMzQwQjQw
MEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTA1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3Rl
SW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RF
MUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgx
MTgsNiArODYyNiw3IEBACiAJCQkJQTU0Q0YyRjkxODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDRjJGNTE4NEVBQjI0MDAyMzdGMTkgLyog
U2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTlEQTUxN0QxMjg1ODAwNUY1
RkY5IC8qIFNldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg1MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3OTBERDZEMTgyRjQ5OTcwMDU4ODgwNyAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzI5OURBMTE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUU5ODQzMUE4OTIyNzUwMDc1NEU5MyAvKiBT
ZXR1cFZhcmFyZ3NGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMzIsNiArODY0MSw3IEBA
CiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QzFFQUYxMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmlj
dEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTIxMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09wY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VD
N0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NDY5REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTQ4LDYgKzg2NTgsNyBAQAogCQkJCTcwNUI0MUFE
MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MDVCNDFBRjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTcwNUI0MUIxMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNl
Q291bnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAv
KiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MEVDQTYwNzFBRkRCRUEyMDA0
NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQx
MzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODE3Niw2ICs4Njg3LDcgQEAKIAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFs
dWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZDNzM1
MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1ODMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAxM0FCMDBEQTMyMjkgLyogVmly
dHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5
MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxOTUsNiArODcwNyw3IEBACiAJCQkJ
NzA5RkI4NjkxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTRFQzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3Jp
dGVCYXJyaWVyQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTdEMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1
MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAwRDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NjNDNkQ5QzE1MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9u
aWNhbGl6ZVVDUzIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjIxLDYgKzg3MzQsMTEgQEAKIAkJ
CXRhcmdldCA9IDBGQ0VGQUI1MTgwNUQ2MTYwMDQ3MkNFNCAvKiBsbHZtRm9ySlNDICovOwogCQkJ
dGFyZ2V0UHJveHkgPSAwRkNFRkFCQzE4MDVENjYzMDA0NzJDRTQgLyogUEJYQ29udGFpbmVySXRl
bVByb3h5ICovOwogCQl9OworCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0
RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJn
ZXQgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovOworCQkJdGFyZ2V0UHJv
eHkgPSAwRkVDODVCMDFCREI1RDhGMDA4MEZGNzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
OworCQl9OwogCQkwRkY5MjJEMzE0RjQ2QjJGMDA0MUEyNEUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSAwRjQ2
ODBBOTE0QkE3RkQ5MDBCRkUyNzIgLyogTExJbnQgT2Zmc2V0cyAqLzsKQEAgLTgzNDUsNiArODg2
MywzOCBAQAogCQkJfTsKIAkJCW5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRkVDODVBOTFC
REI1Q0YxMDA4MEZGNzQgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAw
RkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9
IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOwor
CQl9OworCQkwRkVDODVBQTFCREI1Q0YxMDA4MEZGNzQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlz
YSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2Ug
PSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87
CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07
CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMEZFQzg1QUIxQkRCNUNGMTAwODBGRjc0IC8q
IFByb2ZpbGluZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFz
ZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9v
bEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RV
Q1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJCQluYW1lID0gUHJvZmlsaW5nOworCQl9OworCQkw
RkVDODVBQzFCREI1Q0YxMDA4MEZGNzQgLyogUHJvZHVjdGlvbiAqLyA9IHsKKwkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAy
MUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJCQlu
YW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMEZGOTIyQ0IxNEY0NkIxMzAwNDFBMjRFIC8qIERl
YnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKQEAgLTg2OTcsNiArOTI0NywxNyBAQAogCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJv
ZHVjdGlvbjsKIAkJfTsKKwkJMEZFQzg1QTgxQkRCNUNGMTAwODBGRjc0IC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YjMiICovID0geworCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJ
MEZFQzg1QTkxQkRCNUNGMTAwODBGRjc0IC8qIERlYnVnICovLAorCQkJCTBGRUM4NUFBMUJEQjVD
RjEwMDgwRkY3NCAvKiBSZWxlYXNlICovLAorCQkJCTBGRUM4NUFCMUJEQjVDRjEwMDgwRkY3NCAv
KiBQcm9maWxpbmcgKi8sCisJCQkJMEZFQzg1QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rp
b24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMEZGOTIyQ0Ex
NEY0NkIxMzAwNDFBMjRFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJKU0NMTEludE9mZnNldHNFeHRyYWN0b3IiICovID0gewogCQkJaXNhID0gWENDb25m
aWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2
aXNpb24gMTkxNTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJM
RShBU1NFTUJMRVIpCiAKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwogbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IGRvdWJsZSBNYWNyb0Fzc2VtYmxlcjo6dHdvVG9UaGUzMiA9IChkb3Vi
bGUpMHgxMDAwMDAwMDB1bGw7CkBAIC00Nyw1ICs0OSw3MCBAQCB2b2lkIE1hY3JvQXNzZW1ibGVy
OjpjYWxsUHJvYmUoc3RkOjpmdW5jCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2Ug
V1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQpCit7
CisgICAgc3dpdGNoIChjb25kKSB7CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw6Cisg
ICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpBYm92ZToKKyAgICAgICAg
b3V0LnByaW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlT3JFcXVhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QmVsb3c6CisgICAgICAg
IG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93T3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvd09yRXF1YWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuOgor
ICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWw6CisgICAgICAgIG91dC5wcmlu
dCgiR3JlYXRlclRoYW5PckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3Jv
QXNzZW1ibGVyOjpMZXNzVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzVGhhbiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsOgor
ICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuT3JFcXVhbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9u
IGNvbmQpCit7CisgICAgc3dpdGNoIChjb25kKSB7CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3c6CisgICAgICAgIG91dC5wcmludCgiT3ZlcmZsb3ciKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZDoKKyAgICAgICAgb3V0LnByaW50KCJT
aWduZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OlBvc2l0
aXZlT3JaZXJvOgorICAgICAgICBvdXQucHJpbnQoIlBvc2l0aXZlT3JaZXJvIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpaZXJvOgorICAgICAgICBvdXQucHJp
bnQoIlplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm86CisgICAgICAgIG91dC5wcmludCgiTm9uWmVybyIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MTkxNTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk2LDggKzE1OTYsMTkgQEAgcHVibGljOgogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCiAjZWxzZSAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCituYW1lc3BhY2UgSlNDIHsKKwogLy8g
SWYgdGhlcmUgaXMgbm8gYXNzZW1ibGVyIGZvciB0aGlzIHBsYXRmb3JtLCBhdCBsZWFzdCBhbGxv
dyBjb2RlIHRvIG1ha2UgcmVmZXJlbmNlcyB0bwogLy8gc29tZSBvZiB0aGUgdGhpbmdzIGl0IHdv
dWxkIG90aGVyd2lzZSBkZWZpbmUsIGFsYmVpdCB3aXRob3V0IGdpdmluZyB0aGF0IGNvZGUgYW55
IHdheQogLy8gb2YgZG9pbmcgYW55dGhpbmcgdXNlZnVsLgpAQCAtMTYxMSw2ICsxNjIyLDggQEAg
cHVibGljOgogICAgIGVudW0gRlBSZWdpc3RlcklEIHsgTm9GUFJlZ2lzdGVyIH07CiB9OwogCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKICNlbmRp
ZiAvLyBNYWNyb0Fzc2VtYmxlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNB
ZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K21hdGNoZXIgQWRkcmVzc01hdGNoZXIKKworIyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24gQjMg
ZG9pbmcgYWdncmVzc2l2ZSByZWFzc29jaWF0aW9uIGFuZCBjYW5vbmNhbGl6YXRpb24gb2YgaW50
ZWdlciBhZGRzLgorIyBXZSdsbCBuZXZlciBzZWUgQWRkKEFkZCh4LCBjb25zdDEpLCBjb25zdDIp
IGJlY2F1c2UgaXQgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVhc3NvY2lhdGVkIGludG8KKyMg
QWRkKHgsIGNvbnN0MSArIGNvbnN0MikuIEFsc28sIHdlIHdpbGwgbmV2ZXIgc2VlIEFkZChjb25z
dCwgeCksIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBjYW5vbmljYWxpemVkCisjIGl0IHRvIEFkZCh4
LCBjb25zdCkuIFRoYXQgc2FpZCwgaW4gdGhpcyBjb2RlIHdlIG5ldmVyIG1ha2UgYXNzZXJ0aW9u
cyBhYm91dCB0aGVzZSBvcHRpbWl6YXRpb25zCisjIGhhdmluZyBiZWVuIHBlcmZvcm1lZC4gQWxz
bywgc2luY2UgdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zIGluIEIzIGhhdmUgYSBidWlsdC1p
biBvZmZzZXQsIHdlCisjIGRvbid0IG5lZWQgdG8gbWF0Y2ggQWRkKHgsIGNvbnN0KS4gVGhhdCB3
b3VsZCBoYXZlIGJlZW4gZm9sZGVkIGludG8gdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zCisj
IGFscmVhZHkuIFNvLCB0aGUgb25seSBmYW5jeSBtYXRoaW5nIHRoaXMgY2FuIGRvIGlzIGp1c3Qg
QmFzZUluZGV4IGZvcm1zLgorCitBZGRTaGlmdDEgPSBBZGQoU2hsKGluZGV4LCAkbG9nU2NhbGUp
LCBiYXNlKQorQWRkU2hpZnQyID0gQWRkKGJhc2UsIFNobChpbmRleCwgJGxvZ1NjYWxlKSkKKwor
QWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1Zh
bHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQXJndW1lbnRSZWdWYWx1ZTo6fkFyZ3VtZW50UmVnVmFsdWUoKQoreworfQorCit2
b2lkIEFyZ3VtZW50UmVnVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KG1fcmVnKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAi
UmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBBcmd1bWVu
dFJlZ1ZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBBcmd1bWVudFJlZzsgfQorICAg
IAorICAgIH5Bcmd1bWVudFJlZ1ZhbHVlKCk7CisKKyAgICBSZWcgYXJndW1lbnRSZWcoKSBjb25z
dCB7IHJldHVybiBtX3JlZzsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQ
cm9jZWR1cmU7CisKKyAgICBBcmd1bWVudFJlZ1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBBcmd1bWVudFJlZywgcmVn
LmlzR1BSKCkgPyBwb2ludGVyVHlwZSgpIDogRG91YmxlLCBvcmlnaW4pCisgICAgICAgICwgbV9y
ZWcocmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlZy5pc1NldCgpKTsKKyAgICB9CisKKyAg
ICBSZWcgbV9yZWc7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgi
CisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY29uc3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9ICIjIjsKKworQmFz
aWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAg
ICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisK
K0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwordm9pZCBCYXNpY0Jsb2NrOjphcHBl
bmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9CisKK2Jv
b2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAg
cmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNC
bG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJu
IEIzOjpyZW1vdmVQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9j
azo6cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
eworICAgIHJldHVybiBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKK30K
Kwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRl
ZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0
aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsKKyAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBCMzo6ZGVlcER1
bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFz
aWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9jaworI2Rl
ZmluZSBCM0Jhc2ljQmxvY2sKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Zy
ZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFByb2NlZHVyZTsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSo+IFZhbHVlTGlzdDsK
KyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAg
IHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsgLy8gVGhp
cyBtYXRjaGVzIENvbnRyb2xWYWx1ZTo6U3VjY2Vzc29yTGlzdAorCisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBWYWx1ZUxpc3Q6
Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZhbHVl
TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBWYWx1
ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuYmVn
aW4oKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXMuZW5kKCk7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgVmFsdWUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgVmFsdWUqJiBhdChzaXplX3QgaW5kZXgpIHsg
cmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorCisgICAgVmFsdWUqIGxhc3QoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICBWYWx1ZSomIGxhc3QoKSB7IHJldHVybiBtX3Zh
bHVlcy5sYXN0KCk7IH0KKworICAgIGNvbnN0IFZhbHVlTGlzdCYgdmFsdWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXM7IH0KKyAgICBWYWx1ZUxpc3QmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFs
dWVzOyB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChWYWx1ZSopOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgVmFsdWVUeXBlKiBhcHBlbmROZXcoUHJvY2VkdXJlJiwgQXJndW1lbnRzLi4uKTsKKworICAg
IHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdDsKKyAgICBGcmVxdWVudGVkQmxvY2sgc3Vj
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nl
c3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29y
cygpIGNvbnN0OworICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKTsKKworICAgIEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Js
b2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1Y2Nlc3NvckNvbGxl
Y3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCk7CisgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0
PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vz
c29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vz
c29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0K
KyAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNz
b3JzOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29s
IHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICBkb3VibGUgZnJl
cXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8v
IEluc3RhbnRpYXRlIHZpYSBQcm9jZWR1cmUuCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRl
eCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVl
TGlzdCBtX3ZhbHVlczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAg
ZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1
YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCisg
ICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAg
ICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEJhc2lj
QmxvY2sqIG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1w
KGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1
bXAoYmxvY2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2sKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIz
QmFzaWNCbG9ja0lubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNQ
cm9jZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVl
VHlwZSogQmFzaWNCbG9jazo6YXBwZW5kTmV3KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcHJvY2VkdXJlLmFk
ZDxWYWx1ZVR5cGU+KGFyZ3VtZW50cy4uLik7CisgICAgYXBwZW5kKHJlc3VsdCk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHVuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3Nv
cnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVt
U3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgRnJlcXVlbnRlZEJsb2NrIEJhc2ljQmxvY2s6OnN1
Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxD
b250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lubGluZSBGcmVxdWVudGVk
QmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1
cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lu
bGluZSBjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNjZXNz
b3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1
Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2lj
QmxvY2s6OnN1Y2Nlc3NvcnMoKQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1
ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jayogQmFzaWNCbG9jazo6
c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1Y2Nl
c3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2sqJiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gc3VjY2Vzc29y
KGluZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Js
b2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9j
a3MoKQoreworICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nl
c3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK2lubGluZSBTdWNjZXNzb3JDb2xsZWN0aW9u
PGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IEJhc2lj
QmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN1Y2Nlc3NvckNv
bGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4oc3VjY2Vzc29y
cygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIzQmFz
aWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0luZGV4
U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxv
Y2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9
IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChwcmVkZWNlc3NvcnMuY29udGFpbnMo
cHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcmVkZWNlc3NvcnMu
YXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxv
Y2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9
IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0g
cHJlZGVjZXNzb3IpIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpLS1dID0gcHJlZGVjZXNz
b3JzLmxhc3QoKTsKKyAgICAgICAgICAgIHByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAg
ICAgICAgICBBU1NFUlQoIXByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRv
KQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgeworICAgICAgICAgICAgcHJlZGVj
ZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVjb21wdXRlcyBwcmVkZWNlc3Nv
cnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAgLy8gQ2xlYXIgYWxsIHByZWRl
Y2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoYXV0byYgYmxvY2sgOiBibG9ja3MpCisgICAg
ICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisKKyAgICBHcmFwaE5vZGVXb3Jr
bGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIHdv
cmtsaXN0LnB1c2goYmxvY2tzWzBdLmdldCgpKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxv
Y2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgaWYgKHdvcmtsaXN0
LnB1c2goc3VjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnByZWRlY2Vzc29y
cygpLmFwcGVuZChibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChibG9ja3NbaV0t
PnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJsb2Nrc1tpXSA9IG51bGxw
dHI7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIzQmxvY2tXb3Jr
bGlzdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8
QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBX
aGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3
aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFw
aE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3Qg
aXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJs
b2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4g
aWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0
aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhl
IGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVk
R3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsK
KwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFwaE5v
ZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBvc3RP
cmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4g
UG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja1dvcmtsaXN0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjND
aGVja1NwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2Rl
LmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsKKwordW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGlu
c3QpCit7CisgICAgc3dpdGNoIChpbnN0Lm9yaWdpbi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENo
ZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAg
Ly8gUmVzQ29uZCwgVG1wLCBUbXAKKyAgICAgICAgcmV0dXJuIDM7CisgICAgY2FzZSBDaGVjazoK
KyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUg
b3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQorICAgIDogbV9jaGVja09wY29kZShvcGNvZGUpCisg
ICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQoreworfQorCitDaGVja1NwZWNpYWw6On5DaGVj
a1NwZWNpYWwoKQoreworfQorCitJbnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNvbnN0
IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAgSW5zdCBoaWRkZW5CcmFuY2gobV9jaGVja09wY29k
ZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRlbkJyYW5jaC5hcmdzLnJlc2l6ZShtX251bUNoZWNr
QXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DaGVja0FyZ3M7IGktLTspCisgICAg
ICAgIGhpZGRlbkJyYW5jaC5hcmdzW2ldID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICByZXR1cm4g
aGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBp
bnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2sp
Cit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmcoY2FsbGJhY2spOworICAgIGZv
ckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBj
YWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7
CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlkRm9ybSgpCisgICAgICAgICYm
IGlzVmFsaWRJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0KTsK
K30KKworYm9vbCBDaGVja1NwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVk
IGFyZ0luZGV4KQoreworICAgIGlmIChhcmdJbmRleCA+PSAxICYmIGFyZ0luZGV4IDwgMSArIG1f
bnVtQ2hlY2tBcmdzKQorICAgICAgICByZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmFkbWl0c1N0
YWNrKGFyZ0luZGV4IC0gMSk7CisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbChudW1CM0FyZ3Mo
aW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhl
bHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBl
cnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGZhaWwgPSBoaWRkZW5CcmFuY2goaW5zdCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsK
KyAgICBBU1NFUlQoZmFpbC5pc1NldCgpKTsKKworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAgIGlmIChpc0NoZWNrTWF0aCh2
YWx1ZS0+b3Bjb2RlKCkpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tN
dWwpCisgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcCgpKTsKKyAgICAgICAgZWxzZSBp
ZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNrU3ViICYmIHZhbHVlLT5jaGlsZCgwKS0+aXNJbnQo
MCkpCisgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29k
ZSwgaW5zdC5hcmdzWzNdKSk7CisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4
dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodmFs
dWUtPm9wY29kZSgpID09IENoZWNrKTsKKyAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNv
bnN0YW50KDEpKTsKKyAgICB9CisKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBtX251bUNo
ZWNrQXJncyArIDEsIGluc3QsIHJlcHMpOworICAgIAorICAgIGNvbnRleHQubGF0ZVBhdGhzLmFw
cGVuZCgKKyAgICAgICAgY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBh
dGhGdW5jdGlvbj4oCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0
aW9uQ29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICBmYWlsLmxpbmsoJmppdCk7CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0
YWNrbWFwKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgICAgICAg
ICAgICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhY2ttYXAg
PSBzdGFja21hcDsKKyAgICAgICAgICAgICAgICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgICAg
ICAgICAgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJz
OworCisgICAgICAgICAgICAgICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJh
bXMpOworICAgICAgICAgICAgfSkpOworCisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgp
OyAvLyBBcyBmYXIgYXMgQWlyIHRoaW5rcywgd2UgYXJlIG5vdCBhIHRlcm1pbmFsLgorfQorCit2
b2lkIENoZWNrU3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQobV9jaGVja09wY29kZSwgIigiLCBtX251bUNoZWNrQXJncywgIikiKTsKK30K
Kwordm9pZCBDaGVja1NwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiQjM6OkNoZWNrVmFsdWUgbG93ZXJlZCB0byAiLCBtX2NoZWNr
T3Bjb2RlLCAiIHdpdGggIiwgbV9udW1DaGVja0FyZ3MsICIgYXJncy4iKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNDaGVja1NwZWNpYWxfaAorI2RlZmluZSBCM0NoZWNrU3BlY2lhbF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVk
ZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKKy8vIFdlIHdhbnQgdG8gbG93ZXIgQ2hlY2sgaW5zdHJ1Y3Rpb25zIHRvIGEgYnJhbmNoLCBi
dXQgdGhlbiB3ZSB3YW50IHRvIHJvdXRlIHRoYXQgYnJhbmNoIHRvIG91cgorLy8gb3V0LW9mLWxp
bmUgY29kZSBpbnN0ZWFkIG9mIGRvaW5nIGFueXRoaW5nIGVsc2UuIEZvciB0aGlzIHJlYXNvbiwg
YSBDaGVja1NwZWNpYWwgd2lsbCByZW1lbWJlcgorLy8gd2hpY2ggYnJhbmNoIG9wY29kZSB3ZSBo
YXZlIHNlbGVjdGVkIGFsb25nIHdpdGggdGhlIG51bWJlciBvZiBhcmdzIGluIHRoZSBvdmVybG9h
ZCB3ZSB3YW50LiBJdAorLy8gd2lsbCBjcmVhdGUgYW4gSW5zdCB3aXRoIHRoYXQgb3Bjb2RlIHBs
dXMgdGhlIGFwcHJvcHJpYXRlIGFyZ3MgZnJvbSB0aGUgb3duaW5nIEluc3Qgd2hlbmV2ZXIgeW91
CisvLyBjYWxsIGFueSBvZiB0aGUgY2FsbGJhY2tzLgorLy8KKy8vIE5vdGUgdGhhdCBmb3IgQ2hl
Y2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwgd2UgZXhwZWN0IHRoYXQgdGhlIEIzIGFyZ3Vt
ZW50cyBhcmUgdGhlIHJldmVyc2UKKy8vIG9mIHRoZSBBaXIgYXJndW1lbnRzIChBZGQoYSwgYikg
PT4gQWRkMzIgYiwgYSkuIEV4Y2VwdDoKKy8vIC0gQ2hlY2tTdWIoMCwgeCksIHdoaWNoIHR1cm5z
IGludG8gQnJhbmNoTmVnMzIgeC4KKy8vIC0gQ2hlY2tNdWwoYSwgYiksIHdoaWNoIHR1cm5zIGlu
dG8gTXVsMzIgYiwgYSBidXQgd2UgcGFzcyBBbnkgZm9yIGEncyBWYWx1ZVJlcC4KKworY2xhc3Mg
Q2hlY2tTcGVjaWFsIDogcHVibGljIFN0YWNrbWFwU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ2hl
Y2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncyk7CisgICAgfkNo
ZWNrU3BlY2lhbCgpOworCisgICAgLy8gQ29uc3RydWN0cyBhbmQgcmV0dXJucyB0aGUgSW5zdCBy
ZXByZXNlbnRpbmcgdGhlIGJyYW5jaCB0aGF0IHRoaXMgd2lsbCB1c2UuCisgICAgQWlyOjpJbnN0
IGhpZGRlbkJyYW5jaChjb25zdCBBaXI6Okluc3QmKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5z
dCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQg
YXJnSW5kZXgpIG92ZXJyaWRlOworCisgICAgLy8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3
aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4gYnJhbmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBh
dGggdGhhdAorICAgIC8vIGdlbmVyYXRlcyB0aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUh
CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoQWlyOjpJbnN0JiwgQ0NhbGxIZWxw
ZXJzJiwgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1w
SW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBs
KFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgQWlyOjpPcGNv
ZGUgbV9jaGVja09wY29kZTsKKyAgICB1bnNpZ25lZCBtX251bUNoZWNrQXJnczsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzQ2hlY2tTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVja1ZhbHVlOjp+Q2hlY2tWYWx1
ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM0NoZWNrVmFsdWVfaAorI2RlZmluZSBCM0NoZWNrVmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0
YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVj
a1ZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAg
ICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNr
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVm
dC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
SW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBl
KCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVj
a1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZv
cm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NF
UlQob3BjZGUgPT0gQ2hlY2spOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9o
CisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZU
TFN0YXRlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworYm9vbCBzaG91bGREdW1wSVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBGVEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8
IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNo
UGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOwor
fQorCitib29sIHNob3VsZFZhbGlkYXRlSVIoKQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRp
b25FbmFibGVkKCkgfHwgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wg
c2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFs
aWRhdGVHcmFwaEF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhh
c2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsK
K30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVmaW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitpbmxpbmUgYm9vbCBp
czY0Qml0KCkgeyByZXR1cm4gc2l6ZW9mKHZvaWQqKSA9PSA4OyB9CitpbmxpbmUgYm9vbCBpczMy
Qml0KCkgeyByZXR1cm4gIWlzNjRCaXQoKTsgfQorCitib29sIHNob3VsZER1bXBJUigpOworYm9v
bCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citi
b29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZv
cmVQaGFzZSgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sK
KyAgICBzd2l0Y2ggKGNvbW11dGF0aXZpdHkpIHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAg
ICAgICBvdXQucHJpbnQoIkNvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE5vdENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21t
dXRhdGl2aXR5X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitlbnVtIENvbW11dGF0aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAg
IE5vdENvbW11dGF0aXZlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpCMzo6Q29tbXV0YXRpdml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBh
dHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlz
b25NYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBD
b21wYXJpc29uTWF0Y2hlcgorCitUZXN0TG9hZE5vdFplcm8xID0gQW5kKExvYWQoYWRkcmVzcyks
IHJpZ2h0KQorVGVzdExvYWROb3RaZXJvMiA9IEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorVGVz
dE5vdFplcm8gPSBBbmQobGVmdCwgcmlnaHQpCisKK1Rlc3RMb2FkWmVybzEgPSBFcXVhbChBbmQo
TG9hZChhZGRyZXNzKSwgcmlnaHQpLCAkMCkKK1Rlc3RMb2FkWmVybzIgPSBFcXVhbChBbmQobGVm
dCwgTG9hZChhZGRyZXNzKSksICQwKQorVGVzdFplcm8gPSBFcXVhbChBbmQobGVmdCwgcmlnaHQp
LCAkMCkKKworTG9hZEVxdWFsMSA9IEVxdWFsKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorTG9hZEVx
dWFsMiA9IEVxdWFsKGxlZnQsIExvYWQoYWRkcmVzcykpCitOb3QgPSBFcXVhbCh2YWx1ZSwgJDAp
CitFcXVhbCA9IEVxdWFsKGxlZnQsIHJpZ2h0KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZh
bHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRh
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3Qz
MlZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFU
RSBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAg
ICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50
MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29u
c3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAs
IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25z
dDY0VmFsdWU6On5Db25zdDY0VmFsdWUoKQoreworfQorCit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVt
cE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3Q2NFZhbHVlX2gKKyNkZWZpbmUgQjND
b25zdDY0VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0NjRWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25z
dDY0VmFsdWUoKTsKKyAgICAKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisK
KyAgICBDb25zdDY0VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3Qg
dmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDY0X3Qg
bV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Nv
bnN0RG91YmxlVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgp
Cit7Cit9CisKK3ZvaWQgQ29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUg
QjNDb25zdERvdWJsZVZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25z
dERvdWJsZVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQor
ICAgIAorICAgIH5Db25zdERvdWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBkb3VibGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0
RG91YmxlLCBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0
RG91YmxlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9s
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRy
b2xWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b250cm9sVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250cm9sVmFs
dWUoKQoreworfQorCit2b2lkIENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobGlzdER1bXAobV9zdWNjZXNzb3JzKSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJv
bFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRC
bG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENv
bnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1
cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0
Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAorICAgICAg
ICAgICAgLy8gc3dpdGNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4gbm9uLW51
bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9y
PEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5Db250cm9sVmFsdWUoKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25z
dCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1
Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4
XTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJl
dHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3Vj
Y2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorICAgIFN1Y2Nlc3Nvckxp
c3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKworcHJvdGVjdGVkOgor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFy
Z3VtZW50cy4uLikKKyAgICB7CisgICAgfQorCisgICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVs
YXRlIHRoaXMuCisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgor
ICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAg
eworICAgICAgICBBU1NFUlQob3Bjb2RlID09IE9vcHMpOworICAgIH0KKworICAgIC8vIFVzZSB0
aGlzIGZvciBSZXR1cm4uCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcmVzdWx0KQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KG9wY29kZSA9PSBSZXR1cm4pOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgor
ICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9
PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKwor
ICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRp
Y2F0ZSwKKyAgICAgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50
ZWRCbG9jayYgbm8pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7Cisg
ICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFw
cGVuZChubyk7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb250cm9sVmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
RnJlcXVlbmN5Q2xhc3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6
OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRnJlcXVlbmN5Q2xh
c3MgZnJlcXVlbmN5KQoreworICAgIHN3aXRjaCAoZnJlcXVlbmN5KSB7CisgICAgY2FzZSBGcmVx
dWVuY3lDbGFzczo6Tm9ybWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vcm1hbCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBGcmVxdWVuY3lDbGFzczo6UmFyZToKKyAgICAgICAgb3V0LnBy
aW50KCJSYXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lD
bGFzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5j
eUNsYXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVx
dWVuY3lDbGFzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0ZyZXF1ZW5jeUNs
YXNzX2gKKyNkZWZpbmUgQjNGcmVxdWVuY3lDbGFzc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBGcmVxdWVuY3lD
bGFzcyA6IHVpbnQ4X3QgeworICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IGh5cG90aGVzaXMgYWJv
dXQgdGhlIGZyZXF1ZW5jeSBvZiB0aGlzIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QuIFRoaXMgaXMK
KyAgICAvLyB0aGUgY29tbW9uIGNhc2UuIFdlIGNhbiBzdGlsbCB1c2UgYmFzaWMgYmxvY2sgZnJl
cXVlbmN5IGluIHRoaXMgY2FzZS4KKyAgICBOb3JtYWwsCisKKyAgICAvLyBXZSBleHBlY3QgdGhh
dCB0aGlzIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3Qgd2lsbCBiZSByZWFjaGVkIHN1cGVyIHJhcmVs
eS4gSXQncyB2YWxpZCB0bworICAgIC8vIHBlcmZvcm0gb3B0aW1pemF0aW9ucyB0aGF0IHB1bmlz
aCBSYXJlIGNvZGUuIE5vdGUgdGhhdCB0aGVyZSB3aWxsIGJlIHNpdHVhdGlvbnMgd2hlcmUgeW91
CisgICAgLy8gaGF2ZSB0byBzb21laG93IGNvbnN0cnVjdCBhIG5ldyBmcmVxdWVuY3kgY2xhc3Mg
ZnJvbSBhIG1lcmdpbmcgb2YgbXVsdGlwbGUgY2xhc3Nlcy4gV2hlbgorICAgIC8vIHRoaXMgaGFw
cGVucywgbmV2ZXIgY2hvb3NlIFJhcmU7IGFsd2F5cyBnbyB3aXRoIE5vcm1hbC4gVGhpcyBpcyBu
ZWNlc3NhcnkgYmVjYXVzZSB3ZQorICAgIC8vIHJlYWxseSBkbyBwdW5pc2ggUmFyZSBjb2RlIHZl
cnkgYmFkbHkuCisgICAgUmFyZQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25h
bWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpCMzo6RnJlcXVlbmN5Q2xhc3MpOworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW5j
eUNsYXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRl
ZEJsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVx
dWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVudGVk
QmxvY2tfaAorI2RlZmluZSBCM0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVy
aWNGcmVxdWVudGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0ZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkFpckluc3RJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIu
aCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIEFpcjo6Q29kZSBjb2RlOwor
ICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJlLCBjb2RlKTsKKyAgICBBaXI6OmdlbmVyYXRlKGNv
ZGUsIGppdCk7Cit9CisKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwg
QWlyOjpDb2RlJiBjb2RlKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAg
IHZhbGlkYXRlKHByb2NlZHVyZSwgImluaXRpYWwiKTsKKworICAgIGlmIChzaG91bGREdW1wSVIo
KSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIEIzOlxuIik7CisgICAgICAgIGRhdGFMb2co
cHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9u
cyBoZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA1MDcKKworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKHBy
b2NlZHVyZSwgImZpbmFsIik7CisgICAgCisgICAgaWYgKHNob3VsZER1bXBJUigpKSB7CisgICAg
ICAgIGRhdGFMb2coIkIzIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2co
cHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICBsb3dlclRvQWlyKHByb2NlZHVyZSwgY29kZSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNHZW5lcmF0ZV9oCisjZGVmaW5lIEIzR2VuZXJhdGVfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsK
KworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworbmFtZXNwYWNlIEFpciB7IGNs
YXNzIENvZGU7IH0KKworLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBp
dCBpbi1wbGFjZSwgYW5kIGdlbmVyYXRlcyBpdCB0byBtYWNoaW5lIGNvZGUgYnkgZmlyc3QKKy8v
IGludGVybmFsbHkgY29udmVydGluZyB0byBhbiBBaXI6OkNvZGUgYW5kIHRoZW4gZ2VuZXJhdGlu
ZyB0aGF0LgorSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmLCBDQ2Fs
bEhlbHBlcnMmKTsKKworLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBp
dCBpbi1wbGFjZSwgYW5kIGxvd2VycyBpdCB0byBBaXIuIFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQor
Ly8gdGhlIEFpciB0byBtYWNoaW5lIGNvZGUgdXNpbmcgQWlyOjpnZW5lcmF0ZSgpLiBOb3RlIHRo
YXQgYW4gQWlyOjpDb2RlIHdpbGwgaGF2ZSBwb2ludGVycyBpbnRvIHRoZQorLy8gQjM6OlByb2Nl
ZHVyZSwgc28geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIEIzOjpQcm9jZWR1cmUgb3V0bGl2
ZXMgdGhlIEFpcjo6Q29kZS4KK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNv
ZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNHZW5lcmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19o
CisjZGVmaW5lIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVxdWVu
dGVkIGJsb2NrIGlzIGEgdHVwbGUgb2YgQmFzaWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNzLiBJ
dCdzIHVzdWFsbHkgdXNlZCBhcyBhCisvLyBzdWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8dHlw
ZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2soCisgICAgICAgIEJhc2ljQmxv
Y2sqIGJsb2NrID0gbnVsbHB0ciwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVlbmN5
Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fZnJl
cXVlbmN5KGZyZXF1ZW5jeSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fYmxvY2sgPT0gb3RoZXIubV9ibG9jaworICAgICAgICAgICAgJiYgbV9mcmVxdWVu
Y3kgPT0gb3RoZXIubV9mcmVxdWVuY3k7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9y
IGJvb2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IEdlbmVyaWNGcmVx
dWVudGVkQmxvY2soKTsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsg
cmV0dXJuIG1fYmxvY2s7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVybiBtX2Js
b2NrOyB9CisgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9m
cmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGZyZXF1ZW5jeSgpICE9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpCisg
ICAgICAgICAgICBvdXQucHJpbnQoZnJlcXVlbmN5KCksICI6Iik7CisgICAgICAgIG91dC5wcmlu
dChwb2ludGVyRHVtcChtX2Jsb2NrKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxv
Y2sqIG1fYmxvY2s7CisgICAgRnJlcXVlbmN5Q2xhc3MgbV9mcmVxdWVuY3k7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNJbmRleE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luZGV4TWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNJbmRleE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4TWFw
X2gKKyNkZWZpbmUgQjNJbmRleE1hcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8g
VGhpcyBpcyBhIG1hcCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBl
ZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFs
dWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFs
dWVzIGNhbiBoYXZlIHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qg
b2YgVmFsdWVzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xh
c3MgSW5kZXhNYXAgeworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXpl
ID0gMCkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAg
ICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6
ZShzaXplKTsKKyAgICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgIH0KKyAgICAKKyAg
ICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgIH0KKyAgICAKK3ByaXZhdGU6Cisg
ICAgVmVjdG9yPFZhbHVlPiBtX3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzSW5kZXhNYXBfaApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2luY2x1
ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0aGlu
Z3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNpY0Js
b2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3Jl
YXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5IHNw
YXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8gSWYg
eW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Jsb2Nr
Pi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluZGV4
U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
YWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUtPmlu
ZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gbV9zZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBjbGFzcyBJdGVyYWJsZSB7CisgICAgcHVi
bGljOgorICAgICAgICBJdGVyYWJsZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwg
Y29uc3QgSW5kZXhTZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKGNvbGxlY3Rp
b24pCisgICAgICAgICAgICAsIG1fc2V0KHNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29sbGVj
dGlvblR5cGUmIGNvbGxlY3Rpb24sIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRv
ciBpdGVyKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAg
ICAgICAgICAgICAgICwgbV9pdGVyKGl0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRlcik7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtX2l0ZXIrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faXRl
ciA9PSBvdGhlci5tX2l0ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSogbV9jb2xs
ZWN0aW9uOworICAgICAgICAgICAgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9y
IG1faXRlcjsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuYmVnaW4oKSk7IH0KKyAgICAgICAg
aXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3Nl
dC5lbmQoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBl
JiBtX2NvbGxlY3Rpb247CisgICAgICAgIGNvbnN0IEluZGV4U2V0JiBtX3NldDsKKyAgICB9Owor
CisgICAgLy8gRm9yIGJhc2ljIGJsb2NrcywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVl
cyhwcm9jZWR1cmUpOworICAgIC8vCisgICAgLy8gRm9yIHZhbHVlcywgeW91IGRvOgorICAgIC8v
IGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUudmFsdWVzKCkpOworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIENvbGxlY3Rpb25UeXBlPgorICAgIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPiB2YWx1ZXMo
Y29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+KGNvbGxlY3Rpb24pOworICAgIH0KKworICAg
IGNvbnN0IEJpdFZlY3RvciYgaW5kaWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbW1h
UHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBpbmRpY2VzKCkuc2V0
Qml0cygpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBUOjpkdW1wUHJlZml4LCBpbmRl
eCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJpdFZlY3RvciBtX3NldDsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNJbmRleFNldF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1MDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJB
aXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQWRkcmVzc01hdGNoZXIuaCIKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisj
aW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRl
ICJCM0xvd2VyaW5nTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNs
dWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUg
IkIzVXNlQ291bnRzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25hbWVzcGFj
ZSB7CisKK2NsYXNzIExvd2VyVG9BaXIgeworcHVibGljOgorICAgIExvd2VyVG9BaXIoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCisgICAgICAgIDogdmFsdWVUb1RtcChwcm9jZWR1
cmUudmFsdWVzKCkuc2l6ZSgpKQorICAgICAgICAsIGJsb2NrVG9CbG9jayhwcm9jZWR1cmUuc2l6
ZSgpKQorICAgICAgICAsIHVzZUNvdW50cyhwcm9jZWR1cmUpCisgICAgICAgICwgYWRkcmVzc1Nl
bGVjdG9yKCp0aGlzKQorICAgICAgICAsIGxvd2VyaW5nU2VsZWN0b3IoKnRoaXMpCisgICAgICAg
ICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBjb2RlKGNvZGUpCisgICAgeworICAg
IH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sq
IGJsb2NrIDogcHJvY2VkdXJlKQorICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXSA9IGNv
ZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1ZW5jeSgpKTsKKworICAgICAgICAvLyBMb3dlciBkZWZz
IGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29vZCBoZXVyaXN0aWMg
dG8gbG9jayBkb3duIGEKKyAgICAgICAgLy8gaG9pc3RlZCBhZGRyZXNzIGV4cHJlc3Npb24gYmVm
b3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3AuCisgICAgICAgIGZvciAoQjM6
OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAg
ICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KKyAgICAgICAgICAgIGluc3RzLnJlc2l6ZSgw
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9ja3MgaW4gcmV2ZXJz
ZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdzIHdoYXQgYWxsb3dzIHVz
CisgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3RpdmVseS4KKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAg
ICAgICBpbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOworICAgICAgICAgICAgICAgIGN1cnJl
bnRWYWx1ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBydW5Mb3dlcmluZ01hdGNo
ZXIoY3VycmVudFZhbHVlLCBsb3dlcmluZ1NlbGVjdG9yKTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBpbnN0cyBjb250YWlucyB0
aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MKKyAgICAgICAgICAgIC8vIGl0IGlu
IHJldmVyc2UuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbnN0cy5zaXplKCk7IGkt
LTspIHsKKyAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBpbnN0c1tpXSkKKyAgICAg
ICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+YXBwZW5kSW5zdChXVEY6Om1vdmUo
aW5zdCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0
aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAgICAgICAgIEFTU0VSVChi
bG9jay0+c3VjY2Vzc29ycygpIDw9IDIpOworICAgICAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9j
ayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAgICAg
IGJsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoYmxvY2tUb0Jsb2NrW3N1
Y2Nlc3Nvcl0pOworICAgICAgICB9CisgICAgfQorCisgICAgVG1wIHRtcChWYWx1ZSogdmFsdWUp
CisgICAgeworICAgICAgICBUbXAmIHRtcCA9IHZhbHVlVG9UbXBbdmFsdWVdOworICAgICAgICBp
ZiAoIXRtcCkKKyAgICAgICAgICAgIHRtcCA9IGNvZGUubmV3VG1wKGlzSW50KHZhbHVlLT50eXBl
KCkpID8gQXJnOjpHUCA6IEFyZzo6RlApOworICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKwor
ICAgIC8vIFRoaXMgZ2l2ZXMgeW91IHRoZSBhZGRyZXNzIG9mIHRoZSBnaXZlbiBMb2FkIG9yIFN0
b3JlLiBJZiBpdCdzIG5vdCBhIExvYWQgb3IgU3RvcmUsIHRoZW4KKyAgICAvLyBpdCByZXR1cm5z
IEFyZygpLgorICAgIEFyZyBhZGRyKFZhbHVlKiBtZW1vcnlWYWx1ZSkKKyAgICB7CisgICAgICAg
IE1lbW9yeVZhbHVlKiB2YWx1ZSA9IG1lbW9yeVZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAg
ICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKworICAgICAgICBy
dW5BZGRyZXNzTWF0Y2hlcih2YWx1ZS0+Y2hpbGRyZW4oKS5sYXN0KCksIGFkZHJlc3NTZWxlY3Rv
cik7CisgICAgICAgIHJldHVybiBhZGRyZXNzU2VsZWN0b3Iuc2VsZWN0ZWRBZGRyZXNzLndpdGhP
ZmZzZXQodmFsdWUtPm9mZnNldCgpKTsKKyAgICB9CisKKyAgICBBcmcgbG9hZEFkZHIoVmFsdWUq
IGxvYWRWYWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChsb2FkVmFsdWUtPm9wY29kZSgpID09IExv
YWQpCisgICAgICAgICAgICByZXR1cm4gYWRkcihsb2FkVmFsdWUpOworICAgICAgICByZXR1cm4g
QXJnKCk7CisgICAgfQorCisgICAgQXJnIGltbShWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUtPmhhc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjppbW0odmFs
dWUtPmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcg
aW1tT3JUbXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKEFyZyByZXN1bHQgPSBp
bW0odmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHRt
cCh2YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21t
dXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICB2b2lkIGFwcGVu
ZEJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBUbXAgcmVz
dWx0ID0gdG1wKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIAorICAgICAgICAvLyBUaHJlZS1vcGVy
YW5kIGZvcm1zIGxpa2U6CisgICAgICAgIC8vICAgICBPcCBhLCBiLCBjCisgICAgICAgIC8vIG1l
YW4gc29tZXRoaW5nIGxpa2U6CisgICAgICAgIC8vICAgICBjID0gYSBPcCBiCisKKyAgICAgICAg
aWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsK
KyAgICAgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGltbShyaWdodCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9w
Y29kZSwgaW1tKHJpZ2h0KSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBBIG5vbi1jb21tdXRhdGl2ZSBvcGVyYXRpb24gY291bGQgaGF2ZSBhbiBp
bW1lZGlhdGUgaW4gbGVmdC4KKyAgICAgICAgICAgICAgICBpZiAoaW1tKGxlZnQpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbW0ocmlnaHQpICYmIGlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIHsKKyAgICAgICAg
ICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgaW1tKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFR3by1vcGVyYW5kIGZvcm1z
IGxpa2U6CisgICAgICAgIC8vICAgICBPcCBhLCBiCisgICAgICAgIC8vIG1lYW4gc29tZXRoaW5n
IGxpa2U6CisgICAgICAgIC8vICAgICBiID0gYiBPcCBhCisKKyAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCwgd2UgcHJlZmVyIHZlcnNpb25zIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBoYXZlIGEgZnVz
ZWQgbG9hZCBvdmVyIHRocmVlCisgICAgICAgIC8vIG9wZXJhbmQgZm9ybXMuCisgICAgICAgIAor
ICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAgICAgICAg
QXJnIGxlZnRBZGRyID0gbG9hZEFkZHIobGVmdCk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZv
cm0ob3Bjb2RlLCBsZWZ0QWRkci5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBVc2UgdGhlIHJpZ2h0IE1vdmUgb3Bjb2RlLiBJZiB3ZSdyZSBkZWFsaW5nIHdp
dGggMzItYml0IHR5cGVzLCB3ZSBzaG91bGQKKyAgICAgICAgICAgICAgICAvLyB1c2UgTW92ZTMy
LiBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggRG91Ymxlcywgd2Ugc2hvdWxkIHVzZSBNb3ZlRG91Ymxl
LgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA1MzMKKyAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHJpZ2h0KSwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBsZWZ0QWRkciwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBBcmcgcmlnaHRBZGRyID0gbG9hZEFkZHIocmlnaHQpOworICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0ob3Bjb2RlLCByaWdodEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCByaWdodEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmln
aHQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
YXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKG9wY29kZSwg
dG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBv
cGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAg
IGJvb2wgdHJ5QXBwZW5kU3RvcmVCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZmFpbHMgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFu
eSBlZmZlY3RzIGJldHdlZW4gdGhlIExvYWQgYW5kIHRoZSBTdG9yZSB0aGF0CisgICAgICAgIC8v
IGNvdWxkIGNsb2JiZXIgdGhlIGxvYWRlZCB2YWx1ZS4gV2UgbmVlZCB0byBjaGVjayBzdWNoIHRo
aW5ncyBiZWNhdXNlIHdlIGFyZSBlZmZlY3RpdmVseQorICAgICAgICAvLyBzaW5raW5nIHRoZSBs
b2FkLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNTM0CisgICAgICAgIAorICAgICAgICBBcmcgc3RvcmVBZGRyID0gYWRkcihjdXJyZW50VmFs
dWUpOworICAgICAgICBBU1NFUlQoc3RvcmVBZGRyKTsKKworICAgICAgICBWYWx1ZSogb3RoZXJW
YWx1ZTsKKyAgICAgICAgaWYgKGFkZHIobGVmdCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAg
b3RoZXJWYWx1ZSA9IHJpZ2h0OworICAgICAgICBlbHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENv
bW11dGF0aXZlICYmIGFkZHIocmlnaHQpID09IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVy
VmFsdWUgPSBsZWZ0OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBzdG9yZUFkZHIua2lu
ZCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhcHBlbmQob3Bjb2Rl
LCB0bXAob3RoZXJWYWx1ZSksIHN0b3JlQWRkcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVu
ZChBaXI6Ok9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7Cisg
ICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoSW5zdChvcGNvZGUsIGN1cnJlbnRWYWx1ZSwgc3Rk
Ojpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKyAgICAKKyAgICBJ
bmRleFNldDxWYWx1ZT4gbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZl
IG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gdmFsdWVUb1RtcDsKKyAg
ICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gYmxvY2tUb0Jsb2Nr
OworCisgICAgVXNlQ291bnRzIHVzZUNvdW50czsKKworICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwg
ND4+IGluc3RzOworCisgICAgVmFsdWUqIGN1cnJlbnRWYWx1ZTsKKworICAgIC8vIFRoZSBhZGRy
ZXNzIHNlbGVjdG9yIHdpbGwgbWF0Y2ggYW55IHBhdHRlcm4gd2hlcmUgdGhlIGlucHV0IG9wZXJh
bmRzIGFyZSBhdmFpbGFibGUgYXMgVG1wcy4KKyAgICAvLyBJdCBkb2Vzbid0IGNhcmUgYWJvdXQg
c2hhcmluZy4gSXQgd2lsbCBoYXBwaWx5IGVtaXQgdGhlIHNhbWUgYWRkcmVzcyBleHByZXNzaW9u
IG92ZXIgYW5kIG92ZXIKKyAgICAvLyBhZ2FpbiByZWdhcmRsZXNzIG9mIHRoZSBleHByZXNzaW9u
J3MgY29tcGxleGl0eS4gVGhpcyB3b3JrcyBvdXQgZmluZSwgc2luY2UgYXQgdGhlIG1hY2hpbmUK
KyAgICAvLyBsZXZlbCwgYWRkcmVzcyBleHByZXNzaW9ucyBhcmUgc3VwZXIgY2hlYXAuIEhvd2V2
ZXIsIHRoaXMgZG9lcyBoYXZlIGEgaGFjayB0byBhdm9pZAorICAgIC8vICJ1bmhvaXN0aW5nIiBh
ZGRyZXNzIGV4cHJlc3Npb25zLgorICAgIGNsYXNzIEFkZHJlc3NTZWxlY3RvciB7CisgICAgcHVi
bGljOgorICAgICAgICBBZGRyZXNzU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIpCisgICAgICAg
ICAgICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29s
IGFjY2VwdFJvb3QoVmFsdWUqIHJvb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gbWF0Y2ggYW4gYWRkcmVzcyBleHByZXNzaW9uIHRoYXQgaGFzIGFscmVhZHkg
YmVlbiBjb21wdXRlZAorICAgICAgICAgICAgLy8gZXhwbGljaXRseS4KKyAgICAgICAgICAgIHJl
dHVybiAhbG93ZXIudmFsdWVUb1RtcFtyb290XTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
YWNjZXB0Um9vdExhdGUoVmFsdWUqKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2Vy
LnZhbHVlVG9UbXBbdmFsdWVdKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiBhY2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQor
ICAgICAgICBib29sIGFjY2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50
ZXJuYWxzTGF0ZShBcmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUs
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dl
ci5sb2NrZWQuY29udGFpbnModmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAg
ICB9CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2Vw
dE9wZXJhbmRzTGF0ZShBcmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hp
ZnQxKFZhbHVlKiBpbmRleCwgVmFsdWUqIGxvZ1NjYWxlLCBWYWx1ZSogYmFzZSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGxvZ1NjYWxlLT5hc0ludCgpIDwgMCB8fCBsb2dTY2FsZS0+YXNJ
bnQoKSA+IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2Vs
ZWN0ZWRBZGRyZXNzID0gQXJnOjppbmRleCgKKyAgICAgICAgICAgICAgICBsb3dlci50bXAoYmFz
ZSksIGxvd2VyLnRtcChpbmRleCksIDEgPDwgbG9nU2NhbGUtPmFzSW50KCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MihW
YWx1ZSogYmFzZSwgVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnlBZGRTaGlmdDEoaW5kZXgsIGxvZ1NjYWxlLCBiYXNlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyaWdodC0+aGFzSW50MzIoKSkgeworICAgICAg
ICAgICAgICAgIC8vIFRoaXMgcHJvZHVjdGlvbiBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkgc2lu
Y2Ugd2UgZXhwZWN0CisgICAgICAgICAgICAgICAgLy8gTG9hZChBZGQoQHgsIEBjb25zdDEpLCBv
ZmZzZXQgPSBjb25zdDIpIHRvIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmVuZ3RoLXJlZHVjZWQKKyAg
ICAgICAgICAgICAgICAvLyB0byBMb2FkKEB4LCBvZmZzZXQgPSBjb25zdDEgKyBjb25zdDIpLgor
ICAgICAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAobGVm
dCksIHJpZ2h0LT5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KGxv
d2VyLnRtcChsZWZ0KSwgbG93ZXIudG1wKHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5RGlyZWN0KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChsb3dlci5jdXJy
ZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBMb3dlclRvQWlyJiBsb3dlcjsKKyAgICAgICAgQXJnIHNlbGVjdGVkQWRkcmVz
czsKKyAgICB9OworICAgIEFkZHJlc3NTZWxlY3RvciBhZGRyZXNzU2VsZWN0b3I7CisKKyAgICAv
LyBUaGlzIHdpbGwgbWF0Y2ggY29tcGxleCBtdWx0aS12YWx1ZSBleHByZXNzaW9ucywgYnV0IG9u
bHkgaWYgdGhlcmUgaXMgbm8gc2hhcmluZy4gRm9yIGV4YW1wbGUsCisgICAgLy8gaXQgd29uJ3Qg
bWF0Y2ggYSBMb2FkIHR3aWNlIGFuZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gZG8gdHdv
IGxvYWRzIHdoZW4gdGhlIG9yaWdpbmFsCisgICAgLy8gY29kZSBqdXN0IGRpZCBvbmUuCisgICAg
Y2xhc3MgTG93ZXJpbmdTZWxlY3RvciB7CisgICAgcHVibGljOgorICAgICAgICBMb3dlcmluZ1Nl
bGVjdG9yKExvd2VyVG9BaXImIGxvd2VyKQorICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAg
ICAgICAgeworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBib29sIGFjY2VwdFJvb3QoVmFs
dWUqIHJvb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQocm9vdCwgIWxv
d2VyLmxvY2tlZC5jb250YWlucyhyb290KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgYWNjZXB0Um9vdExhdGUoVmFsdWUqKSB7IH0KKyAgICAg
ICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9v
bCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQor
ICAgICAgICB7CisgICAgICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGludGVybmFsIHRoaW5ncyBo
YXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLCB0aGVuIHdlIGRvbid0IHdhbnQgdG8gY2F1c2UKKyAg
ICAgICAgICAgIC8vIGl0IHRvIGJlIHJlY29tcHV0ZWQgYWdhaW4uCisgICAgICAgICAgICBpZiAo
bG93ZXIudmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBXZSByZXF1aXJlIGludGVybmFscyB0byBoYXZl
IG9ubHkgb25lIHVzZSAtIHVzLgorICAgICAgICAgICAgaWYgKGxvd2VyLnVzZUNvdW50c1t2YWx1
ZV0gIT0gMSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHJldHVybiBhY2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAg
fQorICAgICAgICBib29sIGFjY2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAg
ICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9p
ZCBhY2NlcHRJbnRlcm5hbHNMYXRlKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICAgICAgeworICAgICAgICAgICAgbG93ZXIubG9ja2VkLmFkZCh2YWx1ZSk7CisgICAg
ICAgICAgICBhY2NlcHRJbnRlcm5hbHNMYXRlKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAg
ICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKCkgeyB9CisgICAgICAgIAorICAgICAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFu
ZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobG93ZXIubG9ja2VkLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYWNjZXB0T3BlcmFuZHMoYXJndW1l
bnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICAgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKworICAgICAg
ICBib29sIHRyeUxvYWQoVmFsdWUqIGFkZHJlc3MpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3
aXRjaCAobG93ZXIuY3VycmVudFZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50
MzI6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUzMiwgbG93ZXIuYWRkcihhZGRy
ZXNzKSwgbG93ZXIudG1wKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICBpZiAo
aXM2NEJpdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBsb3dl
ci5hZGRyKGFkZHJlc3MpLCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAg
ICAgICBsb3dlci5hcHBlbmQoTW92ZURvdWJsZSwgbG93ZXIuYWRkcihhZGRyZXNzKSwgbG93ZXIu
dG1wKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZChWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBl
bmRCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmVBZGRM
b2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIFZhbHVlKikKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGxvd2VyLnRyeUFwcGVuZFN0b3JlQmluT3A8QWRkMzIsIENv
bW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRy
eVN0b3JlQW5kTG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCisgICAgICAg
IHsKKyAgICAgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNl
IEludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiBsb3dlci50cnlBcHBlbmRTdG9yZUJpbk9w
PEFuZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCB0cnlTdG9yZShWYWx1ZSogdmFsdWUsIFZhbHVlKikKKyAgICAgICAgeworICAgICAg
ICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgor
ICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlMzIsIGxvd2VyLnRtcCh2YWx1ZSksIGxv
d2VyLmFkZHIobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgICAgIGlmIChpczY0Qml0
KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUsIGxvd2VyLnRtcCh2
YWx1ZSksIGxvd2VyLmFkZHIobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgICAgICBsb3dl
ci5hcHBlbmQoTW92ZURvdWJsZSwgbG93ZXIudG1wKHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5j
dXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlDb25zdDMyKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbG93ZXIuYXBwZW5kKE1vdmUsIGxvd2VyLmltbShsb3dlci5jdXJyZW50VmFsdWUpLCBs
b3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5UmV0dXJuKFZhbHVlKiB2YWx1ZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgICAgICBsb3dl
ci5hcHBlbmQoTW92ZSwgbG93ZXIuaW1tT3JUbXAodmFsdWUpLCBUbXAoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRG91
YmxlOgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dlci50bXAo
dmFsdWUpLCBUbXAoRlBSSW5mbzo6cmV0dXJuVmFsdWVGUFIpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBsb3dlci5hcHBlbmQoUmV0KTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMb3dlclRvQWlyJiBsb3dlcjsK
KyAgICB9OworICAgIExvd2VyaW5nU2VsZWN0b3IgbG93ZXJpbmdTZWxlY3RvcjsKKyAgICAKKyAg
ICBQcm9jZWR1cmUmIHByb2NlZHVyZTsKKyAgICBDb2RlJiBjb2RlOworfTsKKworfSAvLyBhbm9u
eW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwg
Q29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvY2VkdXJlLCAibG93
ZXJUb0FpciIpOworICAgIExvd2VyVG9BaXIgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOwor
ICAgIGxvd2VyVG9BaXIucnVuKCk7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyVG9BaXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyVG9BaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNMb3dlclRvQWly
X2gKKyNkZWZpbmUgQjNMb3dlclRvQWlyX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CituYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGxvd2VycyB0aGUgY3VycmVudCBCMyBwcm9j
ZWR1cmUgdG8gYW4gQWlyIGNvZGUuCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmLCBBaXI6
OkNvZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNMb3dlclRvQWlyX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0
ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisjIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5nTWF0Y2hlcgorCisjIFRoZXNlIHJ1
bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcgYXQgdGhlIHRvcC4gSXQn
cyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50cyB3aGVyZXZlciBwb3NzaWJs
ZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1hdGNoZXIgaXMgYW4gZXhj
ZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCisKK0xvYWQgPSBMb2FkKGFkZHJl
c3MpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkID0gU3RvcmUoQWRk
KGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0b3JlKEFkZChsZWZ0LCBy
aWdodCksIGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZhbHVlLCBhZGRyZXNzKQorCitDb25zdDMy
ID0gQ29uc3QzMigpCisKK1JldHVybiA9IFJldHVybih2YWx1ZSkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworTWVt
b3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAgICAg
ICBvdXQucHJpbnQoIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzTWVtb3J5VmFsdWVfaAorI2RlZmluZSBCM01lbW9yeVZhbHVlX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCisvLyBGSVhNRTogQWRkIGFsaWFzIGFuYWx5c2lzIHRvIHRoZXNlIGJ5IGFs
bG93aW5nIHRoZSBjbGllbnQgdG8gYXNzb2NpYXRlIGFuIGludGVnZXIgcmFuZ2UgdG8gdGhlCisv
LyB2YWx1ZS4gVHdvIG9wZXJhdGlvbnMgbWF5IGFjY2VzcyB0aGUgc2FtZSBtZW1vcnkgaWYgdGhl
aXIgcmFuZ2VzIG92ZXJsYXBzLgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDUzNQorCitjbGFzcyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2Ug
TG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAg
ICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBT
dG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0Ogor
ICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB+TWVtb3J5VmFsdWUoKTsKKworICAgIGludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV9vZmZzZXQ7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4
Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRl
c2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVu
c2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBwb2ludGVyLAorICAgICAgICBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBj
YXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2Ug
TG9hZDE2UzoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlQodHlwZSA9PSBEb3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAg
ICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAg
ICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0g
Zm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
cG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIG9wY29kZSA9PSBMb2FkRmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVy
KQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJU
X0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAg
Y2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2Ug
TG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9h
ZEZsb2F0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZv
cm0gZm9yIHN0b3Jlcy4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50
ZXIsCisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwg
b3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAg
ICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAg
ICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAg
ICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGludDMy
X3QgbV9vZmZzZXQgeyAwIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdU
RiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgIGNhc2UgTm9wOgorICAgICAgICBvdXQucHJpbnQoIk5vcCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJZGVudGl0eToKKyAgICAgICAgb3V0LnByaW50KCJJZGVudGl0eSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdDMyOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0
MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAgICAgb3V0LnBy
aW50KCJDb25zdDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0RG91YmxlOgor
ICAgICAgICBvdXQucHJpbnQoIkNvbnN0RG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFN0YWNrU2xvdDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFja1Nsb3QiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAgICAgIG91dC5wcmludCgiQXJndW1l
bnRSZWciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAg
ICBvdXQucHJpbnQoIkZyYW1lUG9pbnRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
ZGQ6CisgICAgICAgIG91dC5wcmludCgiQWRkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFN1YjoKKyAgICAgICAgb3V0LnByaW50KCJTdWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTXVsOgorICAgICAgICBvdXQucHJpbnQoIk11bCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBEaXY6CisgICAgICAgIG91dC5wcmludCgiRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENoaWxsRGl2OgorICAgICAgICBvdXQucHJpbnQoIkNoaWxsRGl2Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE1vZDoKKyAgICAgICAgb3V0LnByaW50KCJNb2QiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQml0QW5kOgorICAgICAgICBvdXQucHJpbnQoIkJpdEFuZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgb3V0LnByaW50KCJC
aXRPciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIG91dC5w
cmludCgiQml0WG9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNobDoKKyAgICAgICAg
b3V0LnByaW50KCJTaGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1NocjoKKyAgICAg
ICAgb3V0LnByaW50KCJTU2hyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpTaHI6Cisg
ICAgICAgIG91dC5wcmludCgiWlNociIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0
ODoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0OCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBTRXh0MTY6CisgICAgICAgIG91dC5wcmludCgiU0V4dDE2Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0MzIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgWkV4dDMyOgorICAgICAgICBvdXQucHJpbnQoIlpFeHQzMiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBGUm91bmQ6CisgICAgICAgIG91dC5wcmludCgiRlJv
dW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIG91dC5wcmlu
dCgiSVRvRCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEVG9JMzI6CisgICAgICAgIG91
dC5wcmludCgiRFRvSTMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWFsOgorICAg
ICAgICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdEVx
dWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIExlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0
ZXJUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAg
b3V0LnByaW50KCJMZXNzRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRl
ckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJFcXVhbCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBBYm92ZToKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICBvdXQucHJpbnQo
IkFib3ZlRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAg
ICAgICAgb3V0LnByaW50KCJCZWxvd0VxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IExvYWQ4WjoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkOFoiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4UyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNloiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgb3V0LnByaW50KCJM
b2FkMTZTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAg
b3V0LnByaW50KCJMb2FkRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDoK
KyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
b3JlODoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTgiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgU3RvcmUxNjoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTE2Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiU3RvcmVGbG9h
dCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgb3V0LnByaW50
KCJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDQ2FsbDoKKyAgICAgICAgb3V0
LnByaW50KCJDQ2FsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQYXRjaHBvaW50Ogor
ICAgICAgICBvdXQucHJpbnQoIlBhdGNocG9pbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ2hlY2tBZGQ6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tBZGQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tTdWIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIG91dC5wcmludCgi
Q2hlY2tNdWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIG91
dC5wcmludCgiQ2hlY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVXBzaWxvbjoKKyAg
ICAgICAgb3V0LnByaW50KCJVcHNpbG9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBo
aToKKyAgICAgICAgb3V0LnByaW50KCJQaGkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SnVtcDoKKyAgICAgICAgb3V0LnByaW50KCJKdW1wIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEJyYW5jaDoKKyAgICAgICAgb3V0LnByaW50KCJCcmFuY2giKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBvdXQucHJpbnQoIlN3aXRjaCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBSZXR1cm46CisgICAgICAgIG91dC5wcmludCgiUmV0dXJuIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9vcHM6CisgICAgICAgIG91dC5wcmludCgiT29w
cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitlbnVtIE9wY29kZSA6IGludDE2X3QgeworICAgIC8vIEEgbm8t
b3AgdGhhdCByZXR1cm5zIFZvaWQsIHVzZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0byByZW1vdmUg
YSB2YWx1ZS4KKyAgICBOb3AsCisgICAgIAorICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1
c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0
YW50cy4gVXNlIHRoZSBDb25zdFZhbHVlKiBjbGFzc2VzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhl
IGNvbnRyb2wgZmxvdywgc28gdGhhdCB3ZSBjYW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUg
d2Ugd291bGQgY29uc3RydWN0IHRoZW0uIExhcmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRv
IGNyZWF0ZS4KKyAgICBDb25zdDMyLAorICAgIENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisK
KyAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBzbG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRp
bmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUg
aW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3Qg
VmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdlIG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2Ug
dGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgorICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBt
YWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQg
dGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29u
dHJvbCBmbG93IHlvdSBwdXQgaXQsIGFuZCB0aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1
cmUgdGhhdCB3ZQorICAgIC8vIGRvbid0IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFs
bG9jYXRpb24gb3IgY2FsbHMgKGVpdGhlciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQor
ICAgIC8vIHN0YWNrIG9yIHByZXNlcnZpbmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3Rlciku
IFVzZSB0aGUgQXJndW1lbnRSZWdWYWx1ZSBjbGFzcy4gVGhlIHJldHVybgorICAgIC8vIHR5cGUg
aXMgZWl0aGVyIHBvaW50ZXIoKSAoZm9yIEdQUnMpIG9yIERvdWJsZSAoZm9yIEZQUnMpLgorICAg
IEFyZ3VtZW50UmVnLAorCisgICAgLy8gVGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4gcHV0IHRo
aXMgYW55d2hlcmUgaW4gY29udHJvbCBmbG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVsZCB0aGUK
KyAgICAvLyBmcmFtZSBwb2ludGVyLCB3aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29tcGlsZXIgY2hh
bmdlcyB0aGUgZnJhbWUgcG9pbnRlciB0ZW1wb3JhcmlseSBmb3Igc29tZQorICAgIC8vIHNpbGx5
IHJlYXNvbiwgdGhlIEZyYW1lUG9pbnRlciBpbnRyaW5zaWMgd2lsbCByZXR1cm4gd2hlcmUgdGhl
IGZyYW1lIHBvaW50ZXIgKnNob3VsZCogYmUgbm90CisgICAgLy8gd2hlcmUgaXQgaGFwcGVucyB0
byBiZSByaWdodCBub3cuCisgICAgRnJhbWVQb2ludGVyLAorCisgICAgLy8gUG9seW1vcnBoaWMg
bWF0aCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgQWRkLAorICAgIFN1YiwKKyAg
ICBNdWwsCisgICAgRGl2LAorCisgICAgLy8gSW50ZWdlciBtYXRoLgorICAgIENoaWxsRGl2LCAv
LyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCisgICAgTW9kLAor
ICAgIEJpdEFuZCwKKyAgICBCaXRPciwKKyAgICBCaXRYb3IsCisgICAgU2hsLAorICAgIFNTaHIs
CisgICAgWlNociwKKworICAgIC8vIENhc3RzIGFuZCBzdWNoLgorICAgIC8vIFRha2VzIGFuZCBy
ZXR1cm5zIEludDMyOgorICAgIFNFeHQ4LAorICAgIFNFeHQxNiwKKyAgICAvLyBUYWtlcyBJbnQz
MiBhbmQgcmV0dXJucyBJbnQ2NDoKKyAgICBTRXh0MzIsCisgICAgWkV4dDMyLAorICAgIC8vIFRh
a2VzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBGUm91bmQsCisgICAgLy8gVGFrZXMgaW50cyBh
bmQgcmV0dXJucyBEb3VibGU6CisgICAgSVRvRCwKKyAgICAvLyBUYWtlcyBEb3VibGUgYW5kIHJl
dHVybnMgSW50MzI6CisgICAgRFRvSTMyLAorCisgICAgLy8gUG9seW1vcnBoaWMgY29tcGFyaXNv
bnMsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBSZXR1cm5zIGludDMyIDAgb3IgMS4gTm90
ZSB0aGF0ICJOb3QiCisgICAgLy8gaXMganVzdCBFcXVhbCh4LCAwKS4KKyAgICBFcXVhbCwKKyAg
ICBOb3RFcXVhbCwKKyAgICBMZXNzVGhhbiwKKyAgICBHcmVhdGVyVGhhbiwKKyAgICBMZXNzRXF1
YWwsCisgICAgR3JlYXRlckVxdWFsLAorCisgICAgLy8gSW50ZWdlciBjb21wYXJpc29ucy4gUmV0
dXJucyBpbnQzMiAwIG9yIDEuCisgICAgQWJvdmUsCisgICAgQmVsb3csCisgICAgQWJvdmVFcXVh
bCwKKyAgICBCZWxvd0VxdWFsLAorCisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNh
dGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUgbG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1
ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4gSW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywK
KyAgICBMb2FkMTZaLAorICAgIExvYWQxNlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToK
KyAgICBMb2FkRmxvYXQsCisgICAgLy8gVGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVybiB0
eXBlIGlzOgorICAgIExvYWQsCisKKyAgICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNh
dGVzIGhvdyB0aGUgdmFsdWUgaXMgc3RvcmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAg
Ly8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwK
KyAgICAvLyBUaGlzIHRha2VzIGEgRG91YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAg
Ly8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3Vi
bGU6CisgICAgU3RvcmUsCisKKyAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1
bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ug
c3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdo
dCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2Ug
dGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFzcy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlr
ZSBhIGNhbGwsCisgICAgLy8gYnV0IG9ubHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRp
b24gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAg
IC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNrbWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24gaG93
IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQgbXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdh
bCB0byByZXF1ZXN0IHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVy
IGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVlc3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1l
bnQgaXMgYXQgc29tZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5n
IGFyZWEgb24gdGhlCisgICAgLy8gc3RhY2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENo
ZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwg
dGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJhdGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxi
YWNrIGdldHMgdG8gZW1pdCBzb21lIGNvZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0
byBsaW5rIHRoZSBqdW1wCisgICAgLy8gZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9m
IHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQg
eW91CisgICAgLy8gYXJlIG5vdCBhbGxvd2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGlu
ZSBjb2RlIGZyb20geW91ciBzbG93IHBhdGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdp
bGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVz
IHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhhcHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91
IGhhdmUgdHdvIENoZWNrQWRkJ3M6CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkK
KyAgICAvLyBiID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxp
ZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQor
ICAgIC8vIGIgPSBJZGVudGl0eShhKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdh
cmRsZXNzIG9mIHRoZSBjYWxsYmFja3MgdXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBt
YXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAvLyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1h
dGlvbiBpcyB2YWxpZCBldmVuIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cg
dGhhdAorICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29u
ZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0
aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25kIENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFu
dC4KKyAgICBDaGVja0FkZCwKKyAgICBDaGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8v
IENoZWNrIHRoYXQgc2lkZS1leGl0cy4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENo
ZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlzIGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdl
bmVyYXRpb24gY2FsbGJhY2suIFRoaXMgdGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlz
IGJyYW5jaGVzIG9uLCB3aXRoCisgICAgLy8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0
cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVlIHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBz
bG93CisgICAgLy8gcGF0aC4KKyAgICBDaGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0
aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAgICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2ls
b25WYWx1ZSBjbGFzcy4KKyAgICBQaGksCisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9s
VmFsdWUgY2xhc3MuCisgICAgSnVtcCwKKyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gs
IHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVy
by4gVXNlcyB0aGUKKyAgICAvLyBDb250cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXgg
c3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVlIHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAv
LyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIgZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBT
d2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBTd2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhh
dCBCMyBwcm9jZWR1cmVzIGRvbid0IGtub3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2Fu
IGp1c3QgcmV0dXJuIGFueQorICAgIC8vIHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFz
cy4KKyAgICBSZXR1cm4sCisKKyAgICAvLyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0
ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xh
c3MuCisgICAgT29wcworfTsKKworaW5saW5lIGJvb2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29k
ZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2Fz
ZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpPcGNvZGUpOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM09wY29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcmln
aW4uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNPcmlnaW5faAorI2RlZmluZSBCM09yaWdpbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2UgdG8gcHV0IG9yaWdp
bnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFibGUgdG8KKy8vIGFj
Y291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1Y3Rpb24gY29ycmVz
cG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25zIG11c3QgcHJlc2Vy
dmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUgYSB0cmFuc2Zvcm1h
dGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFib3V0IHRoZW0uCitj
bGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihjb25zdCB2b2lkKiBk
YXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisg
ICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IHZv
aWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3JpZ2luX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQ
YXRjaHBvaW50U3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1Bh
dGNocG9pbnRTcGVjaWFsOjpQYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9CisKK1BhdGNocG9pbnRT
cGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRTcGVj
aWFsOjpmb3JFYWNoQXJnKAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5
cGUoKSA9PSBWb2lkKSB7CisgICAgICAgIGZvckVhY2hBcmdJbXBsKDAsIDEsIGluc3QsIGNhbGxi
YWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sx
XSwgQXJnOjpEZWYsIGluc3Qub3JpZ2luLT5haXJUeXBlKCkpOworICAgIGZvckVhY2hBcmdJbXBs
KDAsIDIsIGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6aXNW
YWxpZChJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQp
CisgICAgICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsKKworICAgIGlmIChpbnN0
LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpbnN0LmFy
Z3NbMV0ua2luZCgpICE9IEFyZzo6VG1wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYg
KCFpbnN0LmFyZ3NbMV0uaXNUeXBlKGluc3Qub3JpZ2luLT5haXJUeXBlKCkpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMiwgaW5zdCk7Cit9CisK
K2Jvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVk
IGFyZ0luZGV4KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAg
ICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwgMSwgaW5zdCwgYXJnSW5kZXgpOworCisgICAg
aWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBh
ZG1pdHNTdGFja0ltcGwoMCwgMiwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6
Okp1bXAgUGF0Y2hwb2ludFNwZWNpYWw6OmdlbmVyYXRlKAorICAgIEluc3QmIGluc3QsIENDYWxs
SGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBWYWx1ZSog
dmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3Rh
Y2ttYXAoKTsKKyAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiBy
ZXBzOworICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBl
KCkgIT0gVm9pZCkKKyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUs
IGluc3QuYXJnc1tvZmZzZXQrK10pKTsKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBvZmZz
ZXQsIGluc3QsIHJlcHMpOworICAgIAorICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBh
cmFtczsKKyAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICBwYXJhbXMuc3RhY2ttYXAgPSBz
dGFja21hcDsKKyAgICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgcGFyYW1zLnVzZWRSZWdpc3Rl
cnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgc3RhY2ttYXAtPm1fZ2VuZXJh
dG9yLT5ydW4oaml0LCBwYXJhbXMpOworCisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVj
aWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBv
aW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9pbnRT
cGVjaWFsX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzcGVjaWFsIHRoYXQgcmVjb2duaXplcyB0
aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQYXRjaHBvaW50OiBWb2lkIGFuZCBhbmQgbm9uLVZv
aWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0aGUgc3ludGF4IG9mIHRoZSBBaXIgUGF0Y2ggaW5z
dHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCBhcmdzLi4uCisvLwor
Ly8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUgbG93ZXJlZCBhcmd1bWVudHMgdG8gdGhlIFBhdGNo
cG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBub24tVm9pZCBjYXNlCisvLyB3ZSB3aWxsIGhhdmU6
CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCByZXN1bHQsIGFyZ3MuLi4KKworY2xhc3Mg
UGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAg
ICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAgIHZpcnR1YWwgflBhdGNocG9pbnRTcGVjaWFsKCk7
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2Nv
cGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJv
b2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFp
cjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8vIE5PVEU6IHRo
ZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhl
biByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFw
LiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEFp
cjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlk
ZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAg
ICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6On5Q
YXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwg
c3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBv
aW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bh
dGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9p
bnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2ludFZhbHVlIDog
cHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBv
cGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+UGF0Y2hwb2lu
dFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNo
aWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4s
IGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQ
aGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb21tb24u
aCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKyNp
bmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VTY29wZTo6UGhhc2VT
Y29wZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1fcHJv
Y2VkdXJlKHByb2NlZHVyZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGRE
dW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGJlZm9yZSAiLCBuYW1l
LCAiOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICBpZiAo
c2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3Ry
aW5nKHByb2NlZHVyZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBp
ZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKG1fcHJv
Y2VkdXJlLCBtX25hbWUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1BoYXNlU2NvcGVfaAorI2RlZmluZSBCM1BoYXNlU2NvcGVfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0
L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBy
b2NlZHVyZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
UGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShQcm9jZWR1cmUmLCBjb25zdCBj
aGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFsaWRhdGlvbgor
Citwcml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29uc3QgY2hhciog
bV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQaGFz
ZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1Byb2NlZHVyZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUHJv
Y2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQorCitQcm9jZWR1cmU6On5Qcm9jZWR1cmUoKQorewor
fQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1f
YmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxv
Y2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBv
dXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9j
ZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVz
dWx0OworICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChhdCgw
KSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAg
ICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJs
b2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJs
b2NrLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcigpCit7Cisg
ICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgUG9zdE9yZGVyQmxvY2tXb3JrbGlz
dCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGF0KDApKTsKKyAgICB3aGlsZSAoQmxvY2tX
aXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAoaXRlbS5v
cmRlcikgeworICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlByZToKKyAgICAgICAgICAgIHdvcmts
aXN0LnB1c2hQb3N0KGl0ZW0ubm9kZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBp
dGVtLm5vZGUtPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKGl0ZW0ubm9kZS0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UG9zdDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBl
bmQoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly9FTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gKKyNkZWZpbmUg
QjNQcm9jZWR1cmVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlB1cmVOYU4u
aCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFByb2NlZHVyZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJvY2VkdXJlKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb2NlZHVyZSgp
OworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Qcm9jZWR1cmUoKTsKKworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5nZXQoKTsgfQor
ICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAg
ICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAg
ICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9pbmRleChmaW5k
TmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sq
IG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+
YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4ICsgMSk7
CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBpbmRleCkKKyAg
ICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1cmUtPnNpemUoKSAm
JiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgUHJvY2Vk
dXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisg
ICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0K
KyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgp
KTsgfQorCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblByZU9yZGVyKCk7CisgICAg
VmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRlcigpOworCisgICAgY2xhc3MgVmFs
dWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xsZWN0aW9uKGNv
bnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9j
ZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAg
IDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3Qg
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDog
bV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZhbHVlKiBvcGVy
YXRvciooKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3By
b2NlZHVyZS0+bV92YWx1ZXNbbV9pbmRleF0uZ2V0KCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgIHByaXZhdGU6CisKKyAgICAgICAgICAgIGNvbnN0IFByb2NlZHVyZSogbV9wcm9jZWR1cmU7
CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIDApOyB9
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2Vk
dXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisKKyAgICAgICAgdW5zaWduZWQg
c2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKTsgfQorICAg
ICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJl
Lm1fdmFsdWVzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBWYWx1ZSogb3BlcmF0b3JbXSh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgfTsKKwor
ICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gVmFsdWVzQ29sbGVj
dGlvbigqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJh
c2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlPj4g
bV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlSW5saW5lc19oCisjZGVmaW5lIEIzUHJv
Y2VkdXJlSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5ldyBWYWx1ZVR5
cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5cGUqIHJlc3Vs
dCA9IHZhbHVlLmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzU3RhY2tTbG90S2luZC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
Qzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja1Nsb3RL
aW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTdGFja1Nsb3RLaW5k
OjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAgb3V0LnByaW50KCJB
bm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2lu
ZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90
S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xvdEtpbmRfaAor
I2RlZmluZSBCM1N0YWNrU2xvdEtpbmRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgU3RhY2tTbG90S2luZCA6IHVp
bnQ4X3QgeworICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNsb3QgbmVlZHMgdG8gYmUga2VwdCBkaXNq
b2ludCBmcm9tIGFsbCBvdGhlcnMgYmVjYXVzZSB3ZSBpbnRlbmQgdG8gZXNjYXBlCisgICAgLy8g
aXQgZXZlbiBpZiB0aGF0J3Mgbm90IG9idmlvdXMuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBydW50
aW1lIHRha2VzIHRoZSBhZGRyZXNzIG9mIGEgc3RhY2sKKyAgICAvLyBzbG90LgorICAgIExvY2tl
ZCwKKworICAgIC8vIFRoZXNlIHN0YWNrIHNsb3RzIGNvdWxkIHNoYXJlIHNwYWNlIHdpdGggb3Ro
ZXIgc3RhY2sgc2xvdHMsIHByb3ZpZGVkIHRoYXQgdGhleSBhcmVuJ3QgbGl2ZQorICAgIC8vIGF0
IHRoZSBzYW1lIHRpbWUuIFRoZSBjb21waWxlciBzdGlsbCBoYXMgdG8gZG8gZXNjYXBlIGFuYWx5
c2lzLCBzaW5jZSB0aGVzZSBjYW4gYmUgZXNjYXBlZAorICAgIC8vIGV4cGxpY2l0bHkgaW4gSVIu
CisgICAgQW5vbnltb3VzCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpTdGFja1Nsb3RLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RLaW5k
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90VmFsdWU6On5TdGFja1Nsb3RW
YWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUs
ICIsIGtpbmQgPSAiLCBtX2tpbmQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90
S2luZC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIEFp
ciB7CitjbGFzcyBTdGFja1Nsb3Q7Cit9IC8vIG5hbWVzcGFjZSBBaXIKKworY2xhc3MgU3RhY2tT
bG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN0YWNrU2xvdDsgfQorCisgICAg
flN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVy
biBtX2tpbmQ7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNv
bXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBwaW4gc3RhY2sgc2xvdHMuIFVzZSB0aGUK
KyAgICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQ
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUgc3RhY2sgc2xvdCBpcyBMb2NrZWQuCisgICAg
dm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCisgICAgeworICAgICAgICBtX29m
ZnNldEZyb21GUCA9IHZhbHVlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgQWlyOjpTdGFja1Nsb3Q7CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBi
eXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFj
a1Nsb3QsIHBvaW50ZXJUeXBlKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVT
aXplKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDAp
CisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgU3RhY2tTbG90
S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM1N0YWNrU2xvdFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1N0YWNrbWFwLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8
d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lk
IFN0YWNrbWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KAorICAgICAgICAie29wYXF1ZSA9ICIsIFJhd1BvaW50ZXIobV9vcGFxdWUpLCAiLCByZXBzID0g
IiwgbGlzdER1bXAobV9yZXBzKSwKKyAgICAgICAgIiwgZ2VuZXJhdG9yID0gIiwgUmF3UG9pbnRl
cihtX2dlbmVyYXRvci5nZXQoKSksICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJlcmVkLAorICAg
ICAgICAiLCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAifSIpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRh
c2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrU3Bl
Y2lhbDsKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBTdGFj
a21hcCB7CitwdWJsaWM6CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgeworICAgICAgICAv
LyBUaGlzIGlzIHRoZSBWYWx1ZSBjb250YWluaW5nIHRoZSBzdGFja21hcC4KKyAgICAgICAgVmFs
dWUqIHZhbHVlOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgorICAgICAgICBT
dGFja21hcCogc3RhY2ttYXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVh
bCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAgICAgVmVjdG9y
PFZhbHVlUmVwPiByZXBzOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3Rl
cnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7Cisg
ICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxw
ZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxH
ZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFwKCkKKyAgICB7
CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRpZnkgdGhpcyBz
dGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5nIFZhbHVlCisg
ICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkgZW5kIHVwIGhh
dmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8vIGFsbG93cyBh
bGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sgdG8gd2hhdGV2
ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVzaW5nIHRvIGNy
ZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1ldGVyKQorICAg
IHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZvaWQqIG9wYXF1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5pZW5jZSBoZWxw
ZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAgIHZvaWQgc2V0
T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3BhcXVlKGJpdHdp
c2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1ZUluZGV4KCkg
Y29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9CisKKyAgICAv
LyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0YWNr
bWFwLiBJbiBjYXNlIG9mIGEgUGF0Y2hwb2ludCB0aGF0CisgICAgLy8gcmV0dXJucyBhIHZhbHVl
LCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gSW4gYWxsIG90aGVyIGNh
c2VzLCBpbmRleCB6ZXJvIHJlZmVycworICAgIC8vIHRvIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0
aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90IGNvbnN0cmFpbmFibGUuIEZv
ciBleGFtcGxlLAorICAgIC8vIGluIGEgQ2hlY2tBZGQgdmFsdWUsIGl0IHdvdWxkIGJlIGFuIGVy
cm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEgQ2hlY2sgdmFsdWUsIGl0Cisg
ICAgLy8gd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGV4IDAuIEJ1dCwgd2hlbiB0
aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBjYW4KKyAgICAvLyBkZXBlbmQg
b24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmlsbGVkIGluLgorICAgIHZvaWQg
Y29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQorICAgIHsKKyAg
ICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXplKCkpCisgICAgICAgICAgICBtX3JlcHMu
Z3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhdID0gcmVwOworICAgIH0KKwor
ICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0KQorICAgIHsKKyAgICAgICAg
bV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICBjb25zdCBSZWdpc3RlclNldCYg
Y2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKworICAgIHZvaWQgc2V0
R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcikKKyAgICB7CisgICAgICAgIG1f
Z2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5j
dGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7CisgICAg
ZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRTcGVjaWFsOworICAgIGZyaWVuZCBjbGFzcyBTdGFja21h
cFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9vcGFxdWUgeyBudWxscHRyIH07CisgICAgVmVj
dG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7
CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVn
aXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhlciBkdXBsaWNhdGVkIGJ5IEFpciwg
YnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJnZSB0aGUgdXNlZCByZWdpc3RlcnMg
c2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja21hcF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisj
aW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBT
cGVjaWFsKCkKK3sKK30KKworU3RhY2ttYXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVjaWFsKCkKK3sK
K30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYgaW5z
dCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFsdWUqIHZhbHVl
ID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFw
KCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBTdGFja21hcFNw
ZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVzZWQKKyAgICAv
LyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJlbnRseSB3b24n
dCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8gb3IgdGhpbmdz
IGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBwcm9ibGVtLgor
ICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVycyk7Cit9CisK
K2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyhJ
bnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNr
bWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgcmV0dXJuIHN0YWNrbWFw
LT5jbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBs
KAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJB
cmdzLAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2Fs
bGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKwor
ICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAgICBB
U1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNTRVJU
KHZhbHVlLT5jaGlsZHJlbi5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgQVNTRVJU
KGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyA9PSB2YWx1ZS0+Y2hpbGRyZW4u
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAg
ICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRCM0FyZ3NdOworICAgICAgICBW
YWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRBaXJBcmdzKTsKKworICAg
ICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNlLCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5
cGUoKSkpOworICAgIH0KK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzVmFsaWRJbXBsKAor
ICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdz
LAorICAgIEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisK
KyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAg
QVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VS
VCh2YWx1ZS0+Y2hpbGRyZW4uc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworCisgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICBBU1NFUlQoc3RhY2tt
YXApOworCisgICAgLy8gRm9yIHRoZSBJbnN0IHRvIGJlIHZhbGlkLCBpdCBuZWVkcyB0byBoYXZl
IHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgp
IC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdu
b3JlZEIzQXJncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUmVnYXJkbGVzcyBv
ZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1aXJlbWVudHMgZm9y
IHRoZWlyIGFyZ3VtZW50cy4gRm9yCisgICAgLy8gZXhhbXBsZSwgeW91IGNhbid0IGhhdmUgYSBu
b24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29uZGl0aW9ucyBhcyB3
ZWxsIGFzIHRoZQorICAgIC8vIGFyZ3VtZW50IHR5cGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAg
ICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7Cisg
ICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc107CisgICAg
ICAgIAorICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmc6OlRt
cDoKKyAgICAgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgY2FzZSBBcmc6OkltbTY0OgorICAg
ICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAg
ICAgICAgYnJlYWs7IC8vIE9LCisgICAgICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICAgICAg
aWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSAmJgorICAg
ICAgICAgICAgICAgIGFyZy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50
ZXJSZWdpc3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNU
eXBlKGNoaWxkLT50eXBlKCkpOworCisgICAgICAgIGlmICghYXJnLmlzVHlwZSh0eXBlKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGNv
bnN0cmFpbnRzIGhhcyB0byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBCMyBjaGls
ZHJlbi4KKyAgICBBU1NFUlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkgPD0gdmFsdWUtPmNoaWxk
cmVuLnNpemUoKSk7CisKKyAgICAvLyBWZXJpZnkgYW55IGV4cGxpY2l0bHkgc3VwcGxpZWQgY29u
c3RyYWludHMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEIzQXJnczsgaSA8IHN0
YWNrbWFwLT5tX3JlcHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmFsdWVSZXAmIHJlcCA9IHN0
YWNrbWFwLT5tX3JlcHNbaV07CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgLSBudW1J
Z25vcmVkQjNBcmdzICsgbnVtSWdub3JlZEFpckFyZ3NdOworCisgICAgICAgIHN3aXRjaCAocmVw
LmtpbmQoKSkgeworICAgICAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgICAgICAvLyBX
ZSBhbHJlYWR5IHZlcmlmaWVkIHRoaXMgYWJvdmUuCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKCFhcmcuaXNU
bXAoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAoYXJnICE9
IFRtcChyZXAucmVnKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZh
bHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAgICAgICAgaWYgKGFyZyAhPSBBcmc6OmNhbGxB
cmcocmVwLm9mZnNldEZyb21TUCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAg
ICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0YWNrbWFwU3BlY2lh
bDo6YWRtaXRzU3RhY2tJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2ln
bmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4
KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFj
a21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgdW5zaWduZWQgc3RhY2ttYXBBcmdJbmRl
eCA9IGFyZ0luZGV4IC0gbnVtSWdub3JlZEFpckFyZ3MgKyBudW1JZ25vcmVkQjNBcmdzOworCisg
ICAgaWYgKHN0YWNrbWFwQXJnSW5kZXggPj0gc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkpIHsKKyAg
ICAgICAgLy8gVGhpcyBtZWFucyB0aGF0IHRoZXJlIHdhcyBubyBjb25zdHJhaW50LgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgLy8gV2Ugb25seSBhZG1pdCBzdGFjayBm
b3IgQW55J3MsIHNpbmNlIFN0YWNrIGlzIG5vdCBhIHZhbGlkIGlucHV0IGNvbnN0cmFpbnQsIGFu
ZCBTdGFja0FyZ3VtZW50CisgICAgLy8gdHJhbnNsYXRlcyB0byBhIENhbGxBcmcgaW4gQWlyLgor
ICAgIGlmIChzdGFja21hcC0+bV9yZXBzW3N0YWNrbWFwQXJnSW5kZXhdLmtpbmQoKSA9PSBWYWx1
ZVJlcDo6QW55KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKAorICAgIEdlbmVyYXRpb25D
b250ZXh0JiBjb250ZXh0LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgSW5zdCYgaW5zdCwgVmVj
dG9yPFZhbHVlUmVwPiYgcmVzdWx0KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9y
ZWRBcmdzOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQuYXBwZW5k
KHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbaV0pKTsKK30KKworVmFsdWVSZXAg
U3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JBcmcoQ29kZSYgY29kZSwgY29uc3QgQXJnJiBhcmcpCit7
CisgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAg
cmV0dXJuIFZhbHVlUmVwOjpyZWcoYXJnLnJlZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcmc6OkltbToKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIHJldHVybiBWYWx1ZVJl
cDo6Y29uc3RhbnQoYXJnLnZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6
QWRkcjoKKyAgICAgICAgaWYgKGFyZy5iYXNlKCkgPT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgp
KTsKKyAgICAgICAgQVNTRVJUKGFyZy5iYXNlKCkgPT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3RlcikpOworICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5v
ZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gVmFsdWVSZXAoKTsKKyAgICB9Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBTcGVjaWFsX2gKKyNkZWZp
bmUgQjNTdGFja21hcFNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBU
aGlzIGlzIGEgYmFzZSBjbGFzcyBmb3Igc3BlY2lhbHMgdGhhdCBoYXZlIHN0YWNrbWFwcy4gTm90
ZSB0aGF0IGl0IGNhbiBmaW5kIHRoZSBTdGFja21hcCBieQorLy8gYXNraW5nIGZvciB0aGUgSW5z
dCdzIG9yaWdpbi4gSGVuY2UsIHRoZXNlIG9iamVjdHMgZG9uJ3QgbmVlZCB0byBldmVuIGhvbGQg
YSByZWZlcmVuY2UgdG8gdGhlCisvLyBTdGFja21hcC4KKworY2xhc3MgU3RhY2ttYXBTcGVjaWFs
IDogcHVibGljIEFpcjo6U3BlY2lhbCB7CitwdWJsaWM6CisgICAgU3RhY2ttYXBTcGVjaWFsKCk7
CisgICAgdmlydHVhbCB+U3RhY2ttYXBTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IHJlcG9ydFVzZWRSZWdpc3RlcnMoQWlyOjpJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBvdmVy
cmlkZTsKKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEFpcjo6SW5z
dCYpIG92ZXJyaWRlOworCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUg
Z2VuZXJhdGUoKSBvciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkgc29t
ZQorICAgIC8vIHN1YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KKworICAgIHZvaWQgZm9y
RWFjaEFyZ0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVk
IG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1i
ZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jik7CisgICAgYm9vbCBpc1ZhbGlkSW1wbCgK
KyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYpOworICAgIGJvb2wgYWRtaXRzU3RhY2tJbXBsKAor
ICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWly
QXJncywKKyAgICAgICAgQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpOworCisgICAgLy8g
QXBwZW5kcyB0aGUgcmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBzdGFydGluZyB3aXRoIG51bUln
bm9yZWRBcmdzLCB0byB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgIHZvaWQgYXBwZW5kUmVwc0ltcGwo
QWlyOjpHZW5lcmF0aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBBaXI6Oklu
c3QmLCBWZWN0b3I8VmFsdWVSZXA+Jik7CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVwRm9yQXJn
KEFpcjo6Q29kZSYsIGNvbnN0IEFpcjo6QXJnJik7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFw
U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNv
bGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorI2RlZmluZSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25f
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKKy8vIFRoaXMgaXMgYSBnZW5lcmljIHdyYXBwZXIgYXJvdW5kIGxpc3RzIG9mIGZyZXF1ZW50
ZWQgYmxvY2tzLCB3aGljaCBnaXZlcyB5b3UganVzdCB0aGUgYmxvY2tzLgorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBCYXNpY0Jsb2NrLCB0eXBlbmFtZSBTdWNjZXNzb3JMaXN0PgorY2xhc3MgU3VjY2Vz
c29yQ29sbGVjdGlvbiB7CitwdWJsaWM6CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbihTdWNjZXNz
b3JMaXN0JiBsaXN0KQorICAgICAgICA6IG1fbGlzdChsaXN0KQorICAgIHsKKyAgICB9CisKKyAg
ICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpbmRleF0uYmxv
Y2soKTsgfQorICAgIEJhc2ljQmxvY2sqJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fbGlz
dFtpbmRleF0uYmxvY2soKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10oc2l6ZV90IGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0
b3JbXShzaXplX3QgaW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRl
cmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBt
X2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTdWNjZXNzb3JDb2xsZWN0aW9u
JiBjb2xsZWN0aW9uLCBzaXplX3QgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihj
b25zdF9jYXN0PFN1Y2Nlc3NvckNvbGxlY3Rpb24qPigmY29sbGVjdGlvbikpIC8vIGNvbnN0IGlz
IHN0dXBpZCBhbnl3YXkuCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvciooKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3VjY2Vzc29yQ29sbGVjdGlv
biogbV9jb2xsZWN0aW9uOworICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAg
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVy
YXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCitwcml2YXRl
OgorICAgIFN1Y2Nlc3Nvckxpc3QmIG1fbGlzdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3VjY2Vzc29y
Q29sbGVjdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENh
c2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
Q2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lk
IFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV9jYXNlVmFsdWUsICItPiIsIG1fdGFyZ2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNT
d2l0Y2hDYXNlX2gKKyNkZWZpbmUgQjNTd2l0Y2hDYXNlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRj
aENhc2UoKQorICAgIHsKKyAgICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVl
LCBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VWYWx1ZShj
YXNlVmFsdWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3RhcmdldDsgfQor
CisgICAgaW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1ZTsgfQor
ICAgIEZyZXF1ZW50ZWRCbG9jayB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQor
ICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuYmxv
Y2soKTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2
YXRlOgorICAgIGludDY0X3QgbV9jYXNlVmFsdWU7CisgICAgRnJlcXVlbnRlZEJsb2NrIG1fdGFy
Z2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hW
YWx1ZTo6flN3aXRjaFZhbHVlKCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVt
b3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBGcmVxdWVudGVkQmxvY2sgcmVzdWx0Qmxv
Y2sgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIGludDY0X3QgcmVzdWx0VmFsdWUgPSBtX3Zh
bHVlc1tpbmRleF07CisgICAgbV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0
KCk7CisgICAgbV9zdWNjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICBtX3ZhbHVlc1tpbmRleF0g
PSBtX3ZhbHVlcy5sYXN0KCk7CisgICAgbV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAgIHJldHVy
biBTd2l0Y2hDYXNlKHJlc3VsdFZhbHVlLCByZXN1bHRCbG9jayk7Cit9CisKK3ZvaWQgU3dpdGNo
VmFsdWU6OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBt
X3N1Y2Nlc3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3VjY2Vzc29y
c1ttX3N1Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOworICAgIG1f
dmFsdWVzLmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBTd2l0Y2hW
YWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRl
c3RydWN0aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisgICAgb3V0
LnByaW50KGxpc3REdW1wKCp0aGlzKSwgIiwgZmFsbFRocm91Z2ggPSAiLCBmYWxsVGhyb3VnaCgp
KTsKK30KKworU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJv
bFZhbHVlKGluZGV4LCBTd2l0Y2gsIFZvaWQsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMu
YXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFs
dWVfaAorI2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJs
aWMgQ29udHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29k
ZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1
ZSgpOworCisgICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisg
ICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUo
KTsgfQorCisgICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRo
ZSBzYW1lIGluZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgRnJl
cXVlbnRlZEJsb2NrIGZhbGxUaHJvdWdoKCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxh
c3QoKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNj
ZXNzb3JzKCkubGFzdCgpOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bnVtQ2FzZVZhbHVlcygpOyB9CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1
Y2Nlc3NvcihpbmRleCkpOworICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0K
KworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkK
KyAgICAgICAgICAgIDogbV9zd2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgw
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTd2l0Y2hW
YWx1ZSYgc3dpdGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRj
aCgmc3dpdGNoVmFsdWUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9p
bmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3dpdGNoVmFsdWUqIG1fc3dpdGNoOwor
ICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAgICB0eXBlZGVmIGl0ZXJhdG9y
IGNvbnN0X2l0ZXJhdG9yOworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgLy8gVGhpcyByZW1vdmVzIHRoZSBjYXNl
IGFuZCByZW9yZGVycyB0aGluZ3MgYSBiaXQuIElmIHlvdSdyZSBpdGVyYXRpbmcgdGhlIGNhc2Vz
IGZyb20gMCB0byBOLAorICAgIC8vIHRoZW4geW91IGNhbiBrZWVwIGl0ZXJhdGluZyBhZnRlciB0
aGlzIHNvIGxvbmcgYXMgeW91IHJldmlzaXQgdGhpcyBzYW1lIGluZGV4ICh3aGljaCB3aWxsIG5v
dworICAgIC8vIGNvbnRhaW4gc29tZSBvdGhlciBjYXNlIHZhbHVlKS4gVGhpcyByZW1vdmVzIHRo
ZSBjYXNlIHRoYXQgd2FzIHJlbW92ZWQuCisgICAgU3dpdGNoQ2FzZSByZW1vdmVDYXNlKHVuc2ln
bmVkIGluZGV4KTsKKworICAgIHZvaWQgYXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0
Y2hDYXNlKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwor
CisgICAgU3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZy
ZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpOworCisgICAgVmVjdG9yPGludDY0X3Q+IG1fdmFs
dWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNUeXBlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlw
ZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5w
cmludCgiVm9pZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAg
b3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAg
ICAgICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3Vi
bGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1
ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2VudW0gVHlwZSB7CisgICAgVm9pZCwKKyAgICBJbnQzMiwKKyAgICBJbnQ2NCwKKyAgICBE
b3VibGUKK307CisKK2lubGluZSBib29sIGlzSW50KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4g
dHlwZSA9PSBJbnQzMiB8fCB0eXBlID09IEludDY0OworfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0
KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBEb3VibGU7Cit9CisKK2lubGluZSBU
eXBlIHBvaW50ZXJUeXBlKCkKK3sKKyAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICByZXR1cm4g
SW50MzI7CisgICAgcmV0dXJuIEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2ls
b25WYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQg
VXBzaWxvblZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiXiIsIG1fcGhpLT5pbmRleCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2lsb25WYWx1ZV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgVXBzaWxvblZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9
PSBVcHNpbG9uOyB9CisKKyAgICB+VXBzaWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkg
Y29uc3QgeyByZXR1cm4gbV9waGk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworICAgIAorICAgIFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwgdmFsdWUpCisgICAgICAgICwgbV9waGkocGhpKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0K
KworICAgIFZhbHVlKiBtX3BoaTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVc2VDb3VudHM6OlVzZUNvdW50cyhQcm9j
ZWR1cmUmIHByb2NlZHVyZSkKKyAgICA6IG1fY291bnRzKHByb2NlZHVyZS52YWx1ZXMoKS5zaXpl
KCkpCit7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jZWR1cmUudmFsdWVzKCkpIHsKKyAg
ICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAg
IG1fY291bnRzW2NoaWxkXSsrOworICAgIH0KK30KKworVXNlQ291bnRzOjp+VXNlQ291bnRzKCkK
K3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNVc2VDb3VudHNfaAorI2RlZmluZSBCM1VzZUNvdW50c19o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFByb2NlZHVyZTsKKworY2xhc3MgVXNlQ291bnRzIHsKK3B1YmxpYzoKKyAgICBVc2VDb3VudHMo
UHJvY2VkdXJlJik7CisgICAgflVzZUNvdW50cygpOworCisgICAgdW5zaWduZWQgb3BlcmF0b3Jb
XShWYWx1ZSogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb3VudHNbdmFs
dWVdOworICAgIH0KK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8VmFsdWUsIHVuc2lnbmVkPiBtX2Nv
dW50czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVXNlQ291bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hT
ZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1l
c3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9y
ZSkKKyAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgbV93aGVuKHdo
ZW4pCisgICAgICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKwor
I2RlZmluZSBWQUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBmYWlsKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRp
dGlvbiwgdG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2
b2lkIHJ1bigpCisgICAgeworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7Cisg
ICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1
ZSo+IHZhbHVlSW5CbG9jazsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jZWR1cmUpIHsKKyAgICAgICAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spCisgICAgICAgICAgICAgICAgdmFsdWVJbkJsb2Nr
LmFkZCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1f
cHJvY2VkdXJlLnZhbHVlcygpKQorICAgICAgICAgICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsK
KworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAg
VkFMSURBVEUodmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCisgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisK
KyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgeworICAgICAgICAgICAg
Zm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4i
LCBwb2ludGVyRHVtcChjaGlsZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3Vj
Y2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgVkFM
SURBVEUoCisgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAo
IkF0ICIsICpibG9jaywgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogRXhwYW5kIHRoaXMg
dmFsaWRhdGlvbiBwaGFzZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ4MAorICAgIH0KKworcHJpdmF0ZToKKyAgICBOT19SRVRVUk5fRFVF
X1RPX0NSQVNIIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBs
aW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAor
ICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVN
ZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7Cisg
ICAgICAgICAgICBvdXQucHJpbnQoIkIzIFZBTElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAg
ICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxp
bmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2Us
ICJcbiIpOworICAgICAgICAgICAgaWYgKG1fd2hlbikKKyAgICAgICAgICAgICAgICBvdXQucHJp
bnQoIiAgICBEdXJpbmcgIiwgbV93aGVuLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNz
YWdlID0gb3V0LnRvQ1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgZGF0YUxvZyhmYWls
dXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIGRh
dGFMb2coIkJlZm9yZSAiLCBtX3doZW4sICI6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9k
dW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1
cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhtX3Byb2NlZHVyZSk7CisKKyAgICAgICAgZGF0YUxv
ZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmls
ZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgp
OworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIGNvbnN0IGNo
YXIqIG1fd2hlbjsKKyAgICBjb25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7Cit9OworCit9IC8vIGFu
b255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwg
Y29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0
ZXIgdmFsaWRhdGVyKHByb2NlZHVyZSwgd2hlbiwgZHVtcEJlZm9yZSk7CisgICAgdmFsaWRhdGVy
LnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbGlkYXRlX2gKKyNkZWZpbmUgQjNWYWxpZGF0ZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgUHJvY2VkdXJlOworCit2b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYsIGNvbnN0IGNo
YXIqIHdoZW4gPSBudWxscHRyLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTkwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY29uc3QgY2hhciogY29uc3QgVmFsdWU6OmR1bXBQ
cmVmaXggPSAiQCI7CisKK1ZhbHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVlOjpyZXBs
YWNlV2l0aElkZW50aXR5KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEgYml0IGNy
YXp5LiBJdCBkb2VzIGFuIGluLXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZhbHVlIHN1
YmNsYXNzIHRoaXMgaXMgd2l0aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUuIFdlIGZp
cnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdlIGRlc3Ry
dWN0IHRoZQorICAgIC8vIHByZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3ZSBjb25z
dHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWduZWQgaW5kZXgg
PSBtX2luZGV4OworICAgIFR5cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3JpZ2luID0g
bV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1
ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKworICAgIFJFTEVBU0VfQVNTRVJU
KHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisK
KyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBJZGVudGl0eSwgdHlwZSwgb3JpZ2luLCB2YWx1
ZSk7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0g
cmVwbGFjZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoTm9wKCkKK3sKKyAgICB1
bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOwor
ICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2Vt
ZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisK
KyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBOb3AsIFZvaWQsIG9yaWdpbik7CisKKyAgICB0
aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7
Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6OmRlZXBEdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIiAiLCAq
dGhpcywgIiA9ICIsIG1fb3Bjb2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1h
UHJpbnRlciBjb21tYTsKKyAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVuKCkpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAgIFN0cmluZ1By
aW50U3RyZWFtIHN0cmluZ091dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQpOworICAgIENTdHJp
bmcgc3RyaW5nID0gc3RyaW5nT3V0LnRvQ1N0cmluZygpOworICAgIGlmIChzdHJpbmcubGVuZ3Ro
KCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgc3RyaW5nKTsKKworICAgIG91dC5wcmludCgi
KSIpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZh
bHNlOworfQorCitpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiAwOworfQorCitib29sIFZhbHVlOjpo
YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitpbnQ2NF90IFZhbHVl
Ojphc0ludDY0KCkgY29uc3QKK3sKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiAwOworfQorCitib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAg
IHJldHVybiBmYWxzZTsKK30KKworZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7Cisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdAoreworfQorCitUeXBlIFZhbHVl
Ojp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQoreworICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNl
IFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENoaWxsRGl2Ogor
ICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2Fz
ZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoK
KyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011
bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNlIEZyYW1lUG9p
bnRlcjoKKyAgICAgICAgcmV0dXJuIHBvaW50ZXJUeXBlKCk7CisgICAgY2FzZSBTRXh0ODoKKyAg
ICBjYXNlIFNFeHQxNjoKKyAgICBjYXNlIERUb0kzMjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNh
c2UgTm90RXF1YWw6CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgor
ICAgIGNhc2UgTGVzc0VxdWFsOgorICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgIGNhc2UgQWJv
dmU6CisgICAgY2FzZSBCZWxvdzoKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxv
d0VxdWFsOgorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2Fz
ZSBaRXh0MzI6CisgICAgICAgIHJldHVybiBJbnQ2NDsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBj
YXNlIElUb0Q6CisgICAgICAgIHJldHVybiBEb3VibGU7CisgICAgY2FzZSBOb3A6CisgICAgICAg
IHJldHVybiBWb2lkOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZV9oCisjZGVmaW5lIEIzVmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkIzT3Bj
b2RlLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNz
IFN0YWNrbWFwOworCitjbGFzcyBWYWx1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoVmFs
dWUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYg
VmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlzdDsKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBkdW1wUHJlZml4OworCisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUpIHsg
cmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgflZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICAvLyBOb3RlIHRoYXQg
dGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZhbHVlcyB3aXRo
IGlkZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsg
fQorCisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAg
CisgICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJlbltp
bmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fY2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBlIHVz
aW5nIHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9
CisKKyAgICAvLyBUaGlzIGlzIHVzZWZ1bCB3aGVuIGxvd2VyaW5nLiBOb3RlIHRoYXQgdGhpcyBp
cyBvbmx5IHZhbGlkIGZvciBub24tdm9pZCB2YWx1ZXMuCisgICAgQWlyOjpBcmc6OlR5cGUgYWly
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFpcjo6QXJnOjp0eXBlRm9yQjNUeXBlKHR5cGUoKSk7IH0K
KworICAgIEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAK
KyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hp
bGRyZW47IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworICAgIHZv
aWQgcmVwbGFjZVdpdGhOb3AoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIFRoaXMg
aXMgaG93IHlvdSBjYXN0IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGRvIHNv
bWV0aGluZyBwcm92aWRlZCB0aGF0IHdlIGhhdmUgYQorICAgIC8vIEFyZ3VtZW50UmVnVmFsdWUs
IHlvdSBjYW4gZG86CisgICAgLy8KKyAgICAvLyBpZiAoQXJndW1lbnRSZWdWYWx1ZSogYXJndW1l
bnRSZWcgPSB2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkgeworICAgIC8vICAgICB0aGlu
Z3MKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhp
cyBvcGNvZGUoKSAhPSBBcmd1bWVudFJlZy4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoaXMgcmV0dXJu
cyBudWxscHRyCisgICAgLy8gaWYgVDo6YWNjZXB0cyhvcGNvZGUoKSkgcmV0dXJucyBmYWxzZS4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICBjb25zdCBUKiBhcygpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50
MzIoKSBjb25zdDsKKyAgICBpbnQzMl90IGFzSW50MzIoKSBjb25zdDsKKyAgICAKKyAgICBib29s
IGhhc0ludDY0KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludDY0KCkgY29uc3Q7CisKKyAgICBi
b29sIGhhc0ludCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQoKSBjb25zdDsKKyAgICBib29s
IGlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0OworCisgICAgYm9vbCBoYXNEb3VibGUoKSBjb25z
dDsKKyAgICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKKworICAgIFN0YWNrbWFwKiBzdGFja21h
cCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisK
K3Byb3RlY3RlZDoKKyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KKyAg
ICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5Ogor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsg
Zmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9y
bSBpcyBmb3Igc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29kZSBo
YXMgbm8gY2hpbGRyZW46CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGlu
ZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkK
KyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZv
cm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRo
ZSBvcGNvZGUgYW5kIGZpcnN0IGNoaWxkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisg
ICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKKyAgICAgICAgLCBt
X29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1l
bnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bj
b2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5k
IHRoYXQgZG9uJ3QKKyAgICAvLyB0YWtlIGFueSBhcmd1bWVudHM6CisgICAgZXhwbGljaXQgVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAg
IDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwg
bV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBudWxscHRyKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmln
aW4pCisgICAgeworICAgIH0KKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciB2YXJhcmdzLgorICAg
IGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6
IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1f
dHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxk
cmVuKGNoaWxkcmVuKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFR5cGUg
dHlwZUZvcihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKworICAgIC8vIFRoaXMgZ3JvdXAg
b2YgZmllbGRzIGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgorICAgIHVuc2lnbmVkIG1f
aW5kZXg7CisgICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgIFR5cGUgbV90eXBlOworICAgIAorICAg
IE9yaWdpbiBtX29yaWdpbjsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisKK3B1Ymxp
YzoKKyAgICBCYXNpY0Jsb2NrKiBvd25lciB7IG51bGxwdHIgfTsgLy8gY29tcHV0ZWQgbGF6aWx5
LgorICAgIFZhbHVlKiByZXBsYWNlbWVudCB7IG51bGxwdHIgfTsgLy8gdXNlZCBmb3IgYW5hbHlz
ZXMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KK307CisKK2NsYXNzIERlZXBWYWx1ZUR1bXAgeworcHVi
bGljOgorICAgIERlZXBWYWx1ZUR1bXAoY29uc3QgVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1f
dmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAgICBtX3Zh
bHVlLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQo
IjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBWYWx1ZSogbV92YWx1ZTsK
K307CisKK2lubGluZSBEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKGNvbnN0IFZhbHVlKiB2YWx1ZSkK
K3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZUlubGluZXNfaAorI2RlZmlu
ZSBCM1ZhbHVlSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjND
aGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0Nv
bnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzUGF0Y2hwb2ludFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QqIFZhbHVlOjph
cygpCit7CisgICAgaWYgKFQ6OmFjY2VwdHMob3Bjb2RlKCkpKQorICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY29uc3QgVCogVmFsdWU6OmFzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29u
c3RfY2FzdDxWYWx1ZSo+KHRoaXMpLT5hczxUPigpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQz
MigpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbnQz
Ml90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVl
PigpLT52YWx1ZSgpOworfQorCitib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICEhYXM8Q29uc3Q2NFZhbHVlPigpOworfQorCitpbnQ2NF90IFZhbHVlOjphc0ludDY0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQor
Citib29sIFZhbHVlOjpoYXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpIHx8
IGhhc0ludDY0KCk7Cit9CisKK2ludDY0X3QgVmFsdWU6OmFzSW50KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaGFzSW50MzIoKSA/IGFzSW50MzIoKSA6IGFzSW50NjQoKTsKK30KKworYm9vbCBWYWx1
ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYg
YXNJbnQoKSA9PSB2YWx1ZTsKK30KKworYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitkb3VibGUgVmFsdWU6
OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+
dmFsdWUoKTsKK30KKworU3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENo
ZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVj
ay0+c3RhY2ttYXA7CisgICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBh
dGNocG9pbnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2
b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEFueToKKyAgICBj
YXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6Cisg
ICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5w
cmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
VmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZh
bHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiU29t
ZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3Rl
cjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91
dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1
ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8g
ZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJv
dGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50
YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5
CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJl
cHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0Lgor
CitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8g
QXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBh
bnkgcmVwcmVzZW50YXRpb24uIEFzIGFuCisgICAgICAgIC8vIG91dHB1dCByZXByZXNlbnRhdGlv
biwgdGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZv
ciB0aGUKKyAgICAgICAgLy8gcmlnaHQgb3BlcmFuZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVj
a011bC4KKyAgICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0
aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291
bGQgYmUgYQorICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIh
CisgICAgICAgIFNvbWVSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNl
bnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQK
KyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCByZWdpc3RlciBC
MyBwaWNrZWQuCisgICAgICAgIFJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1dCBy
ZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJ
dCdzIG5vdCBhIHZhbGlkCisgICAgICAgIC8vIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAg
ICBTdGFjaywKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBm
b3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUgYXJndW1lbnQgYXJlYSBhdCBzb21lCisg
ICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgU3RhY2tBcmd1bWVudCwKKworICAgICAgICAvLyBB
cyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgdGhhdCBCMyBjb25zdGFu
dC1mb2xkZWQgdGhlIHZhbHVlLgorICAgICAgICBDb25zdGFudAorICAgIH07CisgICAgCisgICAg
VmFsdWVSZXAoKQorICAgICAgICA6IG1fa2luZChBbnkpCisgICAgeworICAgIH0KKworICAgIGV4
cGxpY2l0IFZhbHVlUmVwKFJlZyByZWcpCisgICAgICAgIDogbV9raW5kKFJlZ2lzdGVyKQorICAg
ICAgICAsIG1fdmFsdWUocmVnLmluZGV4KCkpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCByZWcoUmVnIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChyZWcp
OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFjayhpbnRwdHJfdCBvZmZzZXRGcm9t
RlApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tRlA7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrQXJn
dW1lbnQoaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2tBcmd1bWVudDsKKyAgICAgICAgcmVz
dWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tU1A7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGludDY0X3QgdmFsdWUpCisgICAgewor
ICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFu
dDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnREb3VibGUoZG91YmxlIHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFudChiaXR3aXNlX2Nh
c3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiBraW5kKCkgIT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9t
SW5kZXgobV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90
IG9mZnNldEZyb21TUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0
YWNrQXJndW1lbnQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFs
dWUpOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGtpbmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAg
IH0KKworICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAg
aW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVz
cGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpW
YWx1ZVJlcDo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRj
aGVyLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTA4IEBACisjIS91c3IvYmluL2VudiBy
dWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMg
Q09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
IyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
IElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBh
dGhuYW1lIgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEK
KyAgICAiX3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0
cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6
Y2hpbGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGls
ZHJlbikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAg
ICAgICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylc
Wi8pCisgICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4gL1xB
XCQvID8gJCcgOiBuYW1lCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxk
cmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bj
b2RlCisgICAgICAgIG9wY29kZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFi
bGUoJnByb2MpCisgICAgICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAg
ICB8IGNoaWxkLCBpbmRleCB8CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAg
ICAgICAgICAgY2hpbGQubmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisg
ICAgICAgICAgICAgICAgICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25J
bnRlcm5hbCA6IDphbm9uT3BlcmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9w
ZXJhbmQpLAorICAgICAgICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hW
YXJpYWJsZSgmcHJvYykKKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIK
KyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6
ZShuYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9k
dWN0aW9ucyA9IHByb2R1Y3Rpb25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAg
YXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFs
aXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQor
ICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYg
dG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAor
CitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAg
ICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdp
bgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90
aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9
PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhl
cgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAg
IEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAi
I3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYg
cGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAg
ICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBl
bmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUg
PSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVy
ID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAg
IHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAg
ICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAg
ICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVow
LTlfXSopLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVO
YW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAg
ICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAg
ICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVt
YmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBh
dCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNl
cXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9
ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3Jk
KHRva2VuKQorICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRz
LiBMaWtlLCB3ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+
IC9cQSgobWF0Y2hlcil8KGluY2x1ZGUpKVxaLworZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9r
ZW4pCisgICAgdG9rZW4gPX4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopXFovIGFuZCBu
b3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFs
aXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1l
KQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0
b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0g
MQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRv
a2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNl
CisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQ
YXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisg
ICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShz
dHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0
b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1
bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJz
ZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQp
CisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgYWRk
VW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwcm9kdWN0aW9uKQorICAgICAgICBpZiBuYW1lID09
IHByb2R1Y3Rpb24udmFyTmFtZQorICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2hpbGQgcHJvZHVj
dGlvbiBoYXMgc2FtZSBuYW1lIGFzIHBhcmVudCBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisg
ICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHBy
b2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVj
dGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisg
ICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgY29uc3VtZSgibWF0Y2hlciIpCisKKyAg
ICAgICAgbWF0Y2hlck5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIHByb2R1Y3Rp
b25zID0gW10KKworICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0g
QHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgIyBXZSBtaWdodCB3YW50IHRvIHN1cHBvcnQg
ImluY2x1ZGUiLiBJZiB3ZSBkaWQgdGhhdCwgaXQgd291bGQgZ28gaGVyZS4KKyAgICAgICAgICAg
IHByb2R1Y3Rpb24gPSBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
aWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlv
bi5uYW1lIH0KKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlv
biIpCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVj
dGlvbgorICAgICAgICB9CisKKyAgICAgICAgTWF0Y2hlci5uZXcobWF0Y2hlck5hbWUsIHByb2R1
Y3Rpb25zKQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlUHJvZHVjdGlvbgorICAgICAgICBvcmln
aW4gPSB0b2tlbi5vcmlnaW4KKyAgICAgICAgbmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAg
ICAgICAgaWYgdG9rZW4gPT0gIj0iCisgICAgICAgICAgICBjb25zdW1lKCI9IikKKyAgICAgICAg
ICAgIG9wY29kZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICBjb25zdW1lKCIoIikK
KyAgICAgICAgZWxzaWYgdG9rZW4gPT0gIigiCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAg
ICAgICAgICAgIG9wY29kZSA9IG5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBuaWwKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmV0dXJuIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgbmls
LCBuaWwpCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQor
ICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorCisgICAg
ICAgICAgICBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHBhcnNlUHJvZHVjdGlvbikKKwor
ICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisgICAgICAgICAgICBjb25zdW1lKCIs
IikKKyAgICAgICAgfQorCisgICAgICAgICMgQWR2YW5jZSBhZnRlciB0aGUgIikiCisgICAgICAg
IGFkdmFuY2UKKworICAgICAgICBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG9wY29kZSwg
cHJvZHVjdGlvbnMpCisgICAgZW5kCitlbmQKKworZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNl
ciA9IFBhcnNlci5uZXcoSU86OnJlYWQoZmlsZU5hbWUpLCBmaWxlTmFtZSkKK21hdGNoZXIgPSBw
YXJzZXIucGFyc2UKKworY2xhc3MgU3ViTWF0Y2gKKyAgICBhdHRyX3JlYWRlciA6aW5kZXhNYXAs
IDpwcm9kdWN0aW9ucworICAgIAorICAgIGRlZiBpbml0aWFsaXplKGluZGV4TGlzdCwgcHJvZHVj
dGlvbnMpCisgICAgICAgIEBpbmRleE1hcCA9IFtdCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IFtd
CisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAg
ICAgICAgQGluZGV4TWFwIDw8IGluZGV4CisgICAgICAgICAgICBAcHJvZHVjdGlvbnMgPDwgcHJv
ZHVjdGlvbnNbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKKworICAgIGRlZiBtYXBJbmRleExp
c3QoaW5kZXhMaXN0KQorICAgICAgICBpbmRleExpc3QubWFwIHsKKyAgICAgICAgICAgIHwgaW5k
ZXggfAorICAgICAgICAgICAgQGluZGV4TWFwW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCitl
bmQKKworRmlsZS5vcGVuKCJCMyIgKyBtYXRjaGVyLm5hbWUgKyAiLmgiLCAidyIpIHsKKyAgICB8
IG91dHAgfAorCisgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGF0dGVy
bl9tYXRjaGVyLnJiIGZyb20gI3tmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorCisgICAgb3V0
cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgb3V0cC5wdXRzICIjZGVm
aW5lIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBc
IkIzVmFsdWUuaFwiIgorICAgIAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiIK
KyAgICBvdXRwLnB1dHMgInZvaWQgcnVuI3ttYXRjaGVyLm5hbWV9KFZhbHVlKiBfdmFsdWUsIEFk
YXB0b3ImIGFkYXB0b3IpIgorICAgIG91dHAucHV0cyAieyIKKworICAgICMgTm90ZSB0aGF0IHRo
aXMgZG9lcyBub3QgZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBiZWNhdXNlIGl0J3MgYSBy
ZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91CisgICAgIyB3YW50IHRvIHNlZSB0aGUgY29kZSBuaWNl
bHkgZm9ybWF0dGVkLCBvcGVuIGl0IGluIGEgZ29vZCB0ZXh0IGVkaXRvciBhbmQgYXNrIGl0IHRv
IGZvcm1hdCBpdAorICAgICMgZm9yIHlvdS4KKworICAgICMgSW4gb2RkIHNpdHVhdGlvbnMsIHdl
IG1heSBub3QgdXNlIHRoZSBpbnB1dCB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwg
b3V0IGFib3V0IGl0LgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKF92YWx1ZSk7IgorICAg
ICAgICAKKyAgICAjIFRoaXMganVzdCBwcm90ZWN0cyB0aGUgY2FsbGVyIGZyb20gaGF2aW5nIHRv
IHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25zIGhhdmluZyBkaWZmZXJlbnQgbGVuZ3Rocy4KKyAgICBk
ZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgaW5k
ZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAg
ICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNb
LTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uY2hpbGRyZW4ubGVuZ3RoID09
IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1st
MV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3Rz
IDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgaW5kZXhM
aXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGxlbmd0
aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAg
ICBpZiBsZW5ndGggPiAwCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t2YWx1ZU5h
bWV9LT5jaGlsZHJlbigpLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAgICAg
eWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgZW5k
CisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZy
b20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rp
b25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhl
IGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJs
ZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29y
b3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNo
aW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFt
ZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBs
aXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlv
bnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAg
ICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rp
b24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9u
c1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisg
ICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5n
IGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFu
IGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzLmVh
Y2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVjdGlv
bnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ugc3Bs
aXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAg
ICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAg
ICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rp
b24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3By
b2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rp
b24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAj
IEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dp
dGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5l
YWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAg
ICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVj
dGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwg
c3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhM
aXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlz
dChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisg
ICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9k
dWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAg
ICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMg
VGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUg
bGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rp
b25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVl
TmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+
PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4u
KHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5k
CisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0
cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFt
ZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0
aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAg
ICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAg
ICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8IHBy
b2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0K
KyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1
YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBz
dWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAg
ICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29s
dW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAg
ICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBk
ZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAg
ICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAg
ICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhh
dCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNv
ZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1h
dGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBt
YXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7Cisg
ICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1h
dGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJv
ZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICBpbmRleExpc3QuZWFj
aCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRj
aGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIK
KyAgICAgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7cHJvZHVjdGlvbi52YXJOYW1l
fSk7IgorICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgb3Bl
cmFuZEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICB0cnlBcmd1bWVudHMgPSBbXQorICAgICAg
ICAgICAgbnVtU2NvcGVzID0gMAorICAgICAgICAgICAgc2VlbiA9IHt9CisgICAgICAgICAgICBw
cm9kdWN0aW9uLmVhY2hWYXJpYWJsZSB7CisgICAgICAgICAgICAgICAgfCBwYXJlbnRWYXJOYW1l
LCBjaGlsZE5hbWUsIGNoaWxkVmFyTmFtZSwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAg
IGxvYWRFeHByID0gIiN7cGFyZW50VmFyTmFtZX0tPmNoaWxkKCN7aW5kZXh9KSIKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBzZWVuW2NoaWxkVmFyTmFtZV0KKyAgICAgICAg
ICAgICAgICAgICAgdG1wID0gbmV3VmFyCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
VmFsdWUqICN7dG1wfSA9ICN7bG9hZEV4cHJ9OyIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJpZiAoI3t0bXB9ID09ICN7Y2hpbGRWYXJOYW1lfSkgeyIKKyAgICAgICAgICAgICAgICAg
ICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgIHNlZW5bY2hpbGRWYXJOYW1lXSA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7Y2hpbGRWYXJOYW1lfSA9ICN7bG9h
ZEV4cHJ9OyIKKworICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBDb25zaWRlciBnZXR0aW5n
IHJpZCBvZiB0aGUgJCBwcmVmaXguCisgICAgICAgICAgICAgICAgICAgICMgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUyNworICAgICAgICAgICAgICAgICAgICBp
ZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGlsZE5h
bWUgPX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
aWYgKCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
aW50ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9y
IGtpbmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kQXJndW1l
bnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5kIG9yIGtpbmQgPT0gOmFub25P
cGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUg
aWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFuZAorICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRhcHRvci5h
Y2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICB1bmxlc3MgaW50ZXJuYWxBcmd1bWVudHMu
ZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdEludGVy
bmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1wdHk/CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdE9wZXJhbmRzKCIgKyBvcGVyYW5k
QXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
IG91dHAucHV0cygiJiYgYWRhcHRvci50cnkje3Byb2R1Y3Rpb24ubmFtZX0oIiArIHRyeUFyZ3Vt
ZW50cy5qb2luKCIsICIpICsgIikpIHsiKQorICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9y
LmFjY2VwdFJvb3RMYXRlKF92YWx1ZSk7IgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJn
dW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2NlcHRJ
bnRlcm5hbHNMYXRlKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICB1bmxlc3Mgb3BlcmFuZEFyZ3VtZW50cy5lbXB0eT8K
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0T3BlcmFuZHNMYXRlKCIg
KyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKTsiCisgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgICAgIG51bVNjb3Blcy50aW1lcyB7CisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJ9IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICB9
CisgICAgfQorICAgIAorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMyIKKworICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEIzI3ttYXRjaGVy
Lm5hbWV9X2giCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb250
cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1
cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVy
cy5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCisjaW5jbHVkZSAiVk0uaCIKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5h
bWVzcGFjZSBKU0M6OkIzOworCituYW1lc3BhY2UgeworCisvLyBOb3RoaW5nIGZhbmN5IGZvciBu
b3c7IHdlIGp1c3QgdXNlIHRoZSBleGlzdGluZyBXVEYgYXNzZXJ0aW9uIG1hY2hpbmVyeS4KKyNk
ZWZpbmUgQ0hFQ0soeCkgUkVMRUFTRV9BU1NFUlQoeCkKKworVk0qIHZtOworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitUIGNvbXBpbGVBbmRSdW4oUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgQ0NhbGxIZWxw
ZXJzIGppdCh2bSk7CisgICAgZ2VuZXJhdGUocHJvY2VkdXJlLCBqaXQpOworICAgIExpbmtCdWZm
ZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIGNvZGUgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgidGVzdGIzIikpOworICAgIFQg
KCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4u
Lik+KGNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiBmdW5jdGlv
bihhcmd1bWVudHMuLi4pOworfQorCit2b2lkIHRlc3Q0MigpCit7CisgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSog
Y29uc3Q0MiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0
Mik7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmln
aW4oKSwgY29uc3Q0Mik7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykgPT0g
NDIpOworfQorCisjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIGRhdGFMb2coI3Rlc3QgIjpcbiIpOyAgICAgICAgICAgICAgICAgICBcCisg
ICAgICAgIHRlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IGRhdGFMb2coIiAgICBPSyFcbiIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAo
ZmFsc2UpOworCit2b2lkIHJ1bigpCit7CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7
CisgICAgdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKworICAgIFJVTih0
ZXN0NDIoKSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitpbnQgbWFpbihpbnQg
YXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgVU5VU0VEX1BBUkFNKGFyZ2MpOworICAgIFVOVVNF
RF9QQVJBTShhcmd2KTsKKyAgICAKKyAgICBydW4oKTsKKyAgICByZXR1cm4gMDsKK30KKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2su
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1
ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUg
IlN0YWNrQWxpZ25tZW50LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworYm9vbCBhdHRlbXB0QXNzaWdubWVudCgKKyAg
ICBTdGFja1Nsb3QqIHNsb3QsIGludHB0cl90IG9mZnNldEZyb21GUCwgY29uc3QgVmVjdG9yPFN0
YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3Qg
OiBvdGhlclNsb3RzKSB7CisgICAgICAgIGlmICghb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29sIG92ZXJsYXAgPSBXVEY6OnJhbmdl
c092ZXJsYXAoCisgICAgICAgICAgICBvZmZzZXRGcm9tRlAsCisgICAgICAgICAgICBvZmZzZXRG
cm9tRlAgKyBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xvdC0+Ynl0ZVNpemUoKSksCisgICAgICAg
ICAgICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpLAorICAgICAgICAgICAgb3RoZXJTbG90LT5v
ZmZzZXRGcm9tRlAoKSArIHN0YXRpY19jYXN0PGludHB0cl90PihvdGhlclNsb3QtPmJ5dGVTaXpl
KCkpKTsKKyAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQKG9mZnNldEZyb21GUCk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgYXNzaWduKFN0YWNrU2xvdCogc2xvdCwgY29uc3QgVmVjdG9y
PFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGlmIChhdHRlbXB0QXNzaWdubWVudChz
bG90LCAtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkpLCBvdGhlclNsb3Rz
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IG90
aGVyU2xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIGJvb2wgZGlkQXNzaWduID0gYXR0ZW1wdEFzc2ln
bm1lbnQoCisgICAgICAgICAgICBzbG90LCBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpIC0gc3Rh
dGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkpLCBvdGhlclNsb3RzKTsKKyAgICAg
ICAgaWYgKGRpZEFzc2lnbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
Kwordm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrIik7CisKKyAgICAvLyBBbGxvY2F0ZSBhbGwgb2Yg
dGhlIGxvY2tlZCBzbG90cyBpbiBvcmRlci4gVGhpcyBpcyBraW5kIG9mIGEgY3JhenkgYWxnb3Jp
dGhtIHRvIGFsbG93IGZvcgorICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBvZiBzdGFjayBzbG90cyBi
ZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVuIGdldCBoZXJlLgorICAg
IEFTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2ln
bmVkTG9ja2VkU3RhY2tTbG90czsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gbG9ja2VkU3RhY2tT
bG90c1dvcmtsaXN0OworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3Rz
KCkpIHsKKyAgICAgICAgc3dpdGNoIChzbG90LT5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdGFj
a1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
CisgICAgICAgICAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2NrZWRTdGFja1Nsb3RzV29ya2xp
c3QuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tT
bG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgp
KSB7CisgICAgICAgICAgICAgICAgLy8gQXMgYSBtYXR0ZXIgb2Ygc2FuaXR5LCB1bmFzc2lnbiB0
aGlzLiBNYXliZSBpdCB3b3VsZCBiZSBnb29kIHRvIGV2ZW4gaGF2ZSBhCisgICAgICAgICAgICAg
ICAgLy8gdmFsaWRhdGlvbiBydWxlIHRoYXQgdGhpcyBjYW5ub3QgaGFwcGVuLgorICAgICAgICAg
ICAgICAgIHNsb3QtPnNldE9mZnNldEZyb21GUCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIC8vIFRoaXMgaXMgYSBmYWlybHkgZXhw
ZW5zaXZlIGxvb3AsIGJ1dCBpdCdzIE9LIGJlY2F1c2Ugd2UnbGwgdXN1YWxseSBvbmx5IGhhdmUg
YSBoYW5kZnVsIG9mCisgICAgLy8gbG9ja2VkIHN0YWNrIHNsb3RzLgorICAgIHdoaWxlICghbG9j
a2VkU3RhY2tTbG90c1dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBTdGFja1Nsb3QqIHNs
b3QgPSBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgYXNzaWdu
KHNsb3QsIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cyk7CisgICAgICAgIGFzc2lnbmVkTG9ja2Vk
U3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAgfQorCisgICAgLy8gTm93IHdlIGhhbmRsZSB0
aGUgYW5vbnltb3VzIHNsb3RzLiBOb3RlIHRoYXQgdGhlb3JldGljYWxseSB3ZSBzaG91bGQgZG8g
YW4gZXNjYXBlIGFuYWx5c2lzCisgICAgLy8gaGVyZS4gQnV0LCBjdXJyZW50bHkgQWlyIGRvZXNu
J3Qgc3VwcG9ydCBlc2NhcGluZyBhIFN0YWNrU2xvdCEKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBv
cnQgZm9yIGVzY2FwaW5nIGEgU3RhY2tTbG90IGFuZCBhZGQgZXNjYXBlIGFuYWx5c2lzIHRvIGFs
bG9jYXRlU3RhY2soKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwNDMwCisKKyAgICBhdXRvIGlzUmVsZXZhbnQgPSBbXSAoY29uc3QgQXJnJiBhcmcp
IC0+IGJvb2wgeworICAgICAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAmJiBhcmcuc3RhY2tTbG90
KCktPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM7CisgICAgfTsKKworICAgIExp
dmVuZXNzPEFyZz4gbGl2ZW5lc3MoY29kZSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNo
U2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsK
KyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxBcmc+OjpMb2NhbENhbGMgbG9jYWxDYWxj
KGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgYXV0byBpbnRlcmZlcmUgPSBbJl0gKCkgewor
ICAgICAgICAgICAgLy8gRm9ybSBhIGNsaXF1ZSBvZiBzdGFjayBzbG90cyB0aGF0IGludGVyZmVy
ZS4gRmlyc3QgZmluZCB0aGUgbGlzdCBvZiBzdGFjayBzbG90cworICAgICAgICAgICAgLy8gdGhh
dCBhcmUgbGl2ZSByaWdodCBub3cuCisgICAgICAgICAgICBzbG90cy5yZXNpemUoMCk7CisgICAg
ICAgICAgICBmb3IgKEFyZyBhcmcgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGlzUmVsZXZhbnQoYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5k
KGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2xvdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFj
a1Nsb3QqIG91dGVyID0gc2xvdHNbaV07CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBq
ID0gaSArIDE7IGogPCBzbG90cy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBT
dGFja1Nsb3QqIGlubmVyID0gc2xvdHNbaV07CisKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tT
bG90KiBmaXJzdCA9IG91dGVyOworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNlY29u
ZCA9IGlubmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QtPmluZGV4KCkgPiBzZWNv
bmQtPmluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3YXAoZmlyc3QsIHNl
Y29uZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW2ZpcnN0XS5hZGQoc2Vj
b25kKTsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW3NlY29uZF0uYWRkKGZpcnN0
KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAg
ICAgaW50ZXJmZXJlKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRl
eCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgbG9jYWxDYWxj
LmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgaW50ZXJmZXJlKCk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgYXNzaWduIHN0YWNrIGxvY2F0aW9u
cy4gQXQgaXRzIGhlYXJ0IHRoaXMgYWxnb3JpdGhtIGlzIGp1c3QgZmlyc3QtZml0LiBGb3IgZWFj
aAorICAgIC8vIFN0YWNrU2xvdCB3ZSBqdXN0IHdhbnQgdG8gZmluZCB0aGUgb2Zmc2V0RnJvbUZQ
IHRoYXQgaXMgY2xvc2VzdCB0byB6ZXJvIHdoaWxlIGVuc3VyaW5nIG5vCisgICAgLy8gb3Zlcmxh
cCB3aXRoIG90aGVyIFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdpdGguCisgICAgVmVj
dG9yPFN0YWNrU2xvdCo+IG90aGVyU2xvdHM7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBj
b2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsK
KyAgICAgICAgICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0LgorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+JiBpbnRl
cmZlcmluZ1Nsb3RzID0gaW50ZXJmZXJlbmNlW3Nsb3RdOworICAgICAgICBvdGhlclNsb3RzLnJl
c2l6ZShhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpICsgaW50ZXJmZXJpbmdTbG90cy5z
aXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXNzaWduZWRMb2NrZWRT
dGFja1Nsb3RzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3RoZXJTbG90c1tpXSA9IGFzc2ln
bmVkTG9ja2VkU3RhY2tTbG90c1tpXTsKKyAgICAgICAgdW5zaWduZWQgbmV4dEluZGV4ID0gYXNz
aWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90
aGVyU2xvdCA6IGludGVyZmVyaW5nU2xvdHMpCisgICAgICAgICAgICBvdGhlclNsb3RzW25leHRJ
bmRleCsrXSA9IG90aGVyU2xvdDsKKworICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90cyk7
CisgICAgfQorCisgICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzdGFjayB3ZSdyZSB1c2luZyBm
b3Igc3RhY2sgc2xvdHMuCisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IDA7
CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAg
ICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gc3RkOjptYXgoCisgICAgICAgICAgICBmcmFtZVNp
emVGb3JTdGFja1Nsb3RzLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1zbG90
LT5vZmZzZXRGcm9tRlAoKSkpOworICAgIH0KKworICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMg
PSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBmcmFtZVNp
emVGb3JTdGFja1Nsb3RzKTsKKworICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRlZHVjZSBob3cgbXVj
aCBhcmd1bWVudCBhcmVhIHdlIG5lZWQuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBm
b3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZy5pc0Nh
bGxBcmcoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBhc3N1bWUgdGhh
dCB3ZSB1c2UgOCBieXRlcyBvZiB0aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mgbm90CisgICAgICAg
ICAgICAgICAgICAgIC8vIHN1Y2ggYW4gYXdlc29tZSBhc3N1bXB0aW9uLgorICAgICAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDQ1NAorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLm9mZnNldCgpID49IDApOwor
ICAgICAgICAgICAgICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoYXJnLm9mZnNl
dCgpICsgOCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgY29kZS5zZXRGcmFtZVNpemUoZnJhbWVTaXplRm9yU3RhY2tTbG90cyArIGNv
ZGUuY2FsbEFyZ0FyZWFTaXplKCkpOworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBj
b2RlIHRvIHVzZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3Ns
ZXNzCisgICAgLy8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tT
bG90cyBhcnJheSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAvLyBvZmZz
ZXQtZnJvbS1GUCByZWZlcnMgdG8uCisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZv
ciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5r
aW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgICAgICAg
ICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zm
c2V0KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAg
ICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIFRt
cChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAgICAgICBh
cmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVT
dGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVTdGFjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFs
bG9jYXRlU3RhY2tfaAorI2RlZmluZSBBaXJBbGxvY2F0ZVN0YWNrX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFjZXMg
b24gdGhlIHN0YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGluZGV4
CisvLyBvcmRlciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3QgZml0
LgorCit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQWxs
b2NhdGVTdGFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyQXJnLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5o
IgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEludmFsaWQ6CisgICAg
ICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFRt
cDoKKyAgICAgICAgb3V0LnByaW50KHRtcCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW1tOgorICAgICAgICBvdXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEltbTY0OgorICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4IiwgbV9vZmZzZXQp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGRyOgorICAgICAgICBpZiAob2Zmc2V0KCkp
CisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIigi
LCBiYXNlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZGV4OgorICAgICAg
ICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAg
ICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsIiwgaW5kZXgoKSk7CisgICAgICAgIGlmIChzY2Fs
ZSgpICE9IDEpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKKyAgICAgICAg
b3V0LnByaW50KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAg
ICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAg
ICBvdXQucHJpbnQoIigiLCBwb2ludGVyRHVtcChzdGFja1Nsb3QoKSksICIpIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKGNhbGxBcmcp
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIG91dC5wcmlu
dChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJl
c0NvbmQ6CisgICAgICAgIG91dC5wcmludChhc1Jlc3VsdENvbmRpdGlvbigpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1w
KHNwZWNpYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBcmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NzIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBcmdfaAorI2RlZmlu
ZSBBaXJBcmdfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclRtcC5oIgor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3BlY2lhbDsKK2Ns
YXNzIFN0YWNrU2xvdDsKKworLy8gVGhpcyBjbGFzcyBuYW1lIGlzIGFsc28gaW50ZW50aW9uYWxs
eSB0ZXJzZSBiZWNhdXNlIHdlIHdpbGwgc2F5IGl0IGEgbG90LiBZb3UnbGwgc2VlIGNvZGUgbGlr
ZQorLy8gSW5zdCguLi4sIEFyZzo6aW1tKDUpLCBBcmc6OmFkZHIodGhpbmcsIGJsYWgpLCAuLi4p
CitjbGFzcyBBcmcgeworcHVibGljOgorICAgIC8vIFRoZXNlIGVudW0gbWVtYmVycyBhcmUgaW50
ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIGhhdmUgdG8gbWVudGlvbiB0aGVtIGEgbG90Lgor
ICAgIGVudW0gS2luZCA6IGludDhfdCB7CisgICAgICAgIEludmFsaWQsCisgICAgICAgIFRtcCwK
KyAgICAgICAgSW1tLAorICAgICAgICBJbW02NCwKKyAgICAgICAgQWRkciwKKyAgICAgICAgU3Rh
Y2ssCisgICAgICAgIENhbGxBcmcsCisgICAgICAgIEluZGV4LAorICAgICAgICBSZWxDb25kLAor
ICAgICAgICBSZXNDb25kLAorICAgICAgICBTcGVjaWFsCisgICAgfTsKKworICAgIGVudW0gUm9s
ZSA6IGludDhfdCB7CisgICAgICAgIFVzZSwKKyAgICAgICAgRGVmLAorICAgICAgICBVc2VEZWYK
KyAgICB9OworCisgICAgZW51bSBUeXBlIDogaW50OF90IHsKKyAgICAgICAgR1AsCisgICAgICAg
IEZQCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1UeXBlcyA9IDI7CisK
KyAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNEZWYoUm9sZSBy
b2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2Fz
ZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyBUeXBlIHR5cGVGb3JCM1R5cGUoQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAgICAgY2FzZSBJ
bnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAg
ICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gRlA7CisgICAgICAgIH0KKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBHUDsKKyAgICB9CisKKyAg
ICBBcmcoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkKQorICAgIHsKKyAgICB9CisKKyAgICBB
cmcoQWlyOjpUbXAgdG1wKQorICAgICAgICA6IG1fa2luZChUbXApCisgICAgICAgICwgbV9iYXNl
KHRtcCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW0oaW50MzJfdCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW07
CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tNjQoaW50cHRyX3QgdmFsdWUpCisgICAgewor
ICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tNjQ7CisgICAg
ICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHN0YXRpYyBBcmcgYWRkcihBaXI6OlRtcCBiYXNlLCBpbnQzMl90IG9mZnNldCA9
IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBcmcgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQWRkcjsKKyAgICAgICAgcmVzdWx0Lm1fYmFz
ZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHN0YWNrKFN0YWNrU2xvdCogdmFs
dWUsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0
d2lzZV9jYXN0PGludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0gb2Zm
c2V0OyAvLyBJIGtub3csIHl1Y2suCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgc3RhdGljIEFyZyBjYWxsQXJnKGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENhbGxBcmc7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAyOgorICAg
ICAgICBjYXNlIDQ6CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGxvZ1NjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIDg6CisgICAg
ICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBzdGF0aWMgQXJnIGluZGV4KEFpcjo6VG1wIGJhc2UsIEFpcjo6VG1wIGluZGV4LCB1bnNp
Z25lZCBzY2FsZSA9IDEsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpbmRleC5pc0dQKCkpOworICAgICAgICBB
U1NFUlQoaXNWYWxpZFNjYWxlKHNjYWxlKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7Cisg
ICAgICAgIHJlc3VsdC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0g
c3RhdGljX2Nhc3Q8aW50MzJfdD4oc2NhbGUpOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBv
ZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBy
ZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAg
ICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZWxDb25k
OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyByZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpS
ZXN1bHRDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlc0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMg
QXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQorICAgIHsKKyAgICAgICAgQXJnIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFNwZWNpYWw7CisgICAgICAgIHJlc3VsdC5t
X29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oc3BlY2lhbCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFyZyYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQK
KyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1f
YmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIubV9p
bmRleAorICAgICAgICAgICAgJiYgbV9zY2FsZSA9PSBvdGhlci5tX3NjYWxlOworICAgIH0KKwor
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJh
dG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAqdGhpcyAhPSBBcmcoKTsgfQorCisgICAgS2luZCBr
aW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQ7CisgICAgfQorCisgICAg
Ym9vbCBpc1RtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFRtcDsK
KyAgICB9CisKKyAgICBib29sIGlzSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBr
aW5kKCkgPT0gSW1tOworICAgIH0KKworICAgIGJvb2wgaXNJbW02NCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OworICAgIH0KKworICAgIGJvb2wgaXNBZGRy
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKKyAgICB9CisK
KyAgICBib29sIGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9
PSBTdGFjazsKKyAgICB9CisKKyAgICBib29sIGlzQ2FsbEFyZygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4ga2luZCgpID09IENhbGxBcmc7CisgICAgfQorCisgICAgYm9vbCBpc0luZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CisgICAgfQor
CisgICAgYm9vbCBpc1JlbENvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBSZWxDb25kOworICAgIH0KKworICAgIGJvb2wgaXNSZXNDb25kKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVzQ29uZDsKKyAgICB9CisKKyAgICBib29sIGlz
U3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7
CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBpc1RtcCgpIHx8IGlzU3RhY2soKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCB0bXAoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUbXApOworICAgICAgICByZXR1cm4g
bV9iYXNlOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBJbW0gfHwga2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0
dXJuIG1fb2Zmc2V0OworICAgIH0KKworICAgIHZvaWQqIHBvaW50ZXJWYWx1ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJuIGJp
dHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fb2Zmc2V0KSk7CisgICAg
fQorCisgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IEFkZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsK
KyAgICB9CisKKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgU3RhY2s6Cisg
ICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIGludDMyX3Qgb2Zmc2V0KCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obV9zY2FsZSk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8
fCBraW5kKCkgPT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpOworICAgIH0KKworICAgIFN0YWNrU2xvdCog
c3RhY2tTbG90KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2sp
OworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0YWNrU2xvdCo+KG1fb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBBaXI6OlRtcCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorCisgICAg
dW5zaWduZWQgc2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJ
bmRleCk7CisgICAgICAgIHJldHVybiBtX3NjYWxlOworICAgIH0KKworICAgIHVuc2lnbmVkIGxv
Z1NjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dTY2FsZShzY2FsZSgpKTsK
KyAgICB9CisKKyAgICBBaXI6OlNwZWNpYWwqIHNwZWNpYWwoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBTcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxBaXI6OlNwZWNpYWwqPihtX29mZnNldCk7CisgICAgfQorCisgICAgYm9vbCBpc0dQVG1wKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1AoKTsKKyAg
ICB9CisKKyAgICBib29sIGlzRlBUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
VG1wKCkgJiYgdG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAKKyAgICAvLyBUZWxscyB1cyBpZiB0
aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBHUCB2YWx1
ZS4KKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIGNhc2Ug
QWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAg
Y2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVzQ29u
ZDoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzR1BUbXAoKTsKKyAgICAgICAgY2Fz
ZSBJbnZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQor
CisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0
aGF0IHJlcXVpcmVzIGEgRlAgdmFsdWUuCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNl
IFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgor
ICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAg
ICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEltbTY0OiAvLyBZZXMsIHdlIGFsbG93
IEltbTY0IGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGlu
ZyBzdGFja21hcHMuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6
CisgICAgICAgICAgICByZXR1cm4gaXNGUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAg
Ym9vbCBoYXNUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgVG1w
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHR5cGUg
aXMgYW1iaWd1b3VzIGZvciBzb21lIGFyZyBraW5kcy4gQ2FsbCB3aXRoIGNhcmUuCisgICAgVHlw
ZSB0eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0dQKCkgPyBHUCA6IEZQOwor
ICAgIH0KKworICAgIGJvb2wgaXNUeXBlKFR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIGlz
R1AoKTsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1BSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3ByKCk7CisgICAgfQorCisgICAg
Ym9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAo
KS5pc0ZQUigpOworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRtcCgpLmZwcigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzUmVnKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzUmVnKCk7CisgICAg
fQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkucmVn
KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdG1wKCkuZ3BUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZw
VG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwVG1wSW5kZXgo
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gdG1wKCkudG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBBcmcgd2l0aE9mZnNldChp
bnQzMl90IGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc09m
ZnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBpZiAoc3VtT3ZlcmZs
b3dzPGludDMyX3Q+KG9mZnNldCgpLCBhZGRpdGlvbmFsT2Zmc2V0KSkKKyAgICAgICAgICAgIHJl
dHVybiBBcmcoKTsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBBZGRy
OgorICAgICAgICAgICAgcmV0dXJuIGFkZHIoYmFzZSgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxP
ZmZzZXQpOworICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICAgICAgcmV0dXJuIHN0YWNrKHN0
YWNrU2xvdCgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBjYXNlIENh
bGxBcmc6CisgICAgICAgICAgICByZXR1cm4gY2FsbEFyZyhvZmZzZXQoKSArIGFkZGl0aW9uYWxP
ZmZzZXQpOworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGluZGV4KGJh
c2UoKSwgaW5kZXgoKSwgc2NhbGUoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAg
IGNhc2UgVG1wOgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFz
ZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAg
IGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0IGFu
IGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cworICAgIC8v
IHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoKKyAgICAvLworICAg
IC8vIG1vdiAlcmF4LCAoJXJjeCkKKyAgICAvLworICAgIC8vIFRoaXMgZGVmcyAoJXJjeCkgYnV0
IHVzZXMgJXJjeC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9y
RWFjaFRtcChSb2xlIGFyZ1JvbGUsIFR5cGUgYXJnVHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgVG1wOgor
ICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIGFyZ1JvbGUsIGFyZ1R5cGUpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNl
LCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4OgorICAg
ICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgZnVuY3Rvciht
X2luZGV4LCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
MzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyNpZiBVU0UoSlNW
QUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQgYXNUcnVzdGVkSW1tNjQo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KHZhbHVlKCkpOworICAgIH0KKyNlbmRpZgor
CisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIgYXNUcnVzdGVkSW1tUHRyKCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgICAgICBBU1NFUlQoaXNJ
bW02NCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAg
ICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlclZhbHVlKCkp
OworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29m
ZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5k
ZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgoKSk7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgbV9iYXNlLmdwcigp
LCBtX2luZGV4LmdwcigpLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U2NhbGU+KGxvZ1Nj
YWxlKCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAg
ICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9u
YWxDb25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENv
bmRpdGlvbiBhc1Jlc3VsdENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
aXNSZXNDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6
OlJlc3VsdENvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCisgICAgQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkKKyAgICAgICAgOiBtX2Jhc2UoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAgewor
ICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICp0aGlzID09IEFyZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7
CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBU
aGlzIHJlYWxseSBkb2Vzbid0IGhhdmUgdG8gYmUgdGhhdCBncmVhdC4KKyAgICAgICAgcmV0dXJu
IFdURjo6SW50SGFzaDxpbnQ2NF90Pjo6aGFzaChtX29mZnNldCkgKyBtX2tpbmQgKyBtX3NjYWxl
ICsgbV9iYXNlLmhhc2goKSArCisgICAgICAgICAgICBtX2luZGV4Lmhhc2goKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29mZnNldCB7IDAgfTsKKyAgICBLaW5kIG1fa2luZCB7
IEludmFsaWQgfTsKKyAgICBpbnQzMl90IG1fc2NhbGUgeyAxIH07CisgICAgQWlyOjpUbXAgbV9i
YXNlOworICAgIEFpcjo6VG1wIG1faW5kZXg7Cit9OworCitzdHJ1Y3QgQXJnSGFzaCB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQXJnJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBBcmcmIGEsIGNvbnN0IEFyZyYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1
bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6QWlyOjpBcmc+
IHsKKyAgICB0eXBlZGVmIEpTQzo6QjM6OkFpcjo6QXJnSGFzaCBIYXNoOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPEpTQzo6QjM6OkFpcjo6QXJnPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIz
OjpBaXI6OkFyZz4geworICAgIC8vIEJlY2F1c2UgbV9zY2FsZSBpcyAxIGluIHRoZSBlbXB0eSB2
YWx1ZS4KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJBcmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IEJh
c2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK2Jvb2wgQmFzaWNCbG9jazo6YWRkUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nv
cih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3Io
QmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIEIzOjpyZW1vdmVQcmVkZWNlc3Nvcih0
aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKEJh
c2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIHJldHVybiBCMzo6cmVwbGFj
ZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1f
aW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIs
IG1fZnJlcXVlbmN5LCAiXG4iKTsKKyAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAqdGhpcykK
KyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9CisKK0Jhc2ljQmxvY2s6
OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2lu
ZGV4KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckJhc2ljQmxvY2tfaAorI2RlZmluZSBB
aXJCYXNpY0Jsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJGcmVx
dWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNTdWNjZXNz
b3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworY2xhc3MgSW5zZXJ0aW9uU2V0OworCitjbGFzcyBC
YXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciog
Y29uc3QgZHVtcFByZWZpeDsKKworICAgIHR5cGVkZWYgVmVjdG9yPEluc3Q+IEluc3RMaXN0Owor
ICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAg
dW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgdW5z
aWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgSW5zdExp
c3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5z
dExpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKyAgICBJbnN0
TGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmJlZ2lu
KCk7IH0KKyAgICBJbnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
bV9pbnN0cy5lbmQoKTsgfQorCisgICAgY29uc3QgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorICAgIEluc3QmIGF0KHNpemVfdCBpbmRleCkg
eyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKworICAgIGNvbnN0IEluc3QmIGxhc3QoKSBjb25z
dCB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorICAgIEluc3QmIGxhc3QoKSB7IHJldHVybiBt
X2luc3RzLmxhc3QoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lk
IGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVuZChz
dGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMp
CisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAgICAvLyBUaGUgIjAiIGNhc2UgaXMgdGhl
IGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28gdGhlICJ0aGVuIiBjYXNlLiBUaGUg
IjEiIGNhc2UgaXMgdGhlCisgICAgLy8gImVsc2UiIGNhc2UsIGFuZCBpcyB1c2VkIHRvIHJlcHJl
c2VudCB0aGUgZmFsbC10aHJvdWdoIG9mIGEgY29uZGl0aW9uYWwgYnJhbmNoLgorICAgIHVuc2ln
bmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9
CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vz
c29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAg
Y29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vz
c29yczsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nl
c3NvcnM7IH0KKworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Js
b2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHN1Y2Nlc3Nvcihp
bmRleCkuYmxvY2soKTsgfQorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3Vj
Y2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBTdWNj
ZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+KG1fc3VjY2Vzc29ycyk7
CisgICAgfQorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3Qg
U3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nv
ckxpc3Q+KG1fc3VjY2Vzc29ycyk7CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVj
ZXNzb3JzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgUHJlZGVj
ZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsg
fQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNl
c3NvcnM7IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJv
b2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVwbGFjZVByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKyAgICBmcmllbmQgY2xh
c3MgSW5zZXJ0aW9uU2V0OworICAgIAorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRv
dWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBJbnN0TGlzdCBt
X2luc3RzOworICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworICAgIFByZWRlY2Vzc29y
TGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBkb3VibGUgbV9mcmVxdWVuY3k7Cit9OworCitjbGFz
cyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChj
b25zdCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgY29uc3QgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK2lubGluZSBE
ZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCit7Cisg
ICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJCYXNpY0Jsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDQ2FsbFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK0NDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKCkKK3sKKyAgICBtX2Nsb2Ji
ZXJlZFJlZ3MgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CisgICAgbV9jbG9iYmVyZWRS
ZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJl
cmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkp
OworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCkpOworfQorCitDQ2FsbFNwZWNpYWw6On5DQ2FsbFNwZWNpYWwoKQoreworfQorCit2
b2lkIENDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1i
ZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2soaW5z
dC5hcmdzWzFdLCBBcmc6OlVzZSwgQXJnOjpHUCk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBGb3IgdGhlIHR5
cGUsIHdlIGNhbiBqdXN0IHF1ZXJ5IHRoZSBhcmcncyB0eXBlLiBUaGUgYXJnIHdpbGwgaGF2ZSBh
IHR5cGUsIGJlY2F1c2Ugd2UKKyAgICAgICAgLy8gcmVxdWlyZSB0aGVzZSBhcmdzIHRvIGJlIGFy
Z3VtZW50IHJlZ2lzdGVycy4KKyAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzW2ldLCBBcmc6OlVz
ZSwgaW5zdC5hcmdzW2ldLnR5cGUoKSk7CisgICAgfQorfQorCitib29sIENDYWxsU3BlY2lhbDo6
aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7
CisgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgaWYgKGlzMzJCaXQoKSkKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAg
ICAgICBpZiAoaXM2NEJpdCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgIGNhc2UgQXJnOjpBZGRyOgorICAgIGNhc2Ug
QXJnOjpTdGFjazoKKyAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaW5zdC5h
cmdzWzFdLmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWluc3Qu
YXJnc1tpXS5pc1JlZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlm
IChpbnN0LmFyZ3NbaV0gPT0gVG1wKHNjcmF0Y2hSZWdpc3RlcikpCisgICAgICAgICAgICByZXR1
cm4gIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQ2FsbFNwZWNp
YWw6OmFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICAvLyBBcmcg
MSBjYW4gYmUgYSBzdGFjayBhZGRyZXNzIGZvciBzdXJlLgorICAgIGlmIChhcmdJbmRleCA9PSAx
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3Zv
aWQgQ0NhbGxTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3Rl
clNldCYpCit7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6OmdlbmVyYXRl
KEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpCit7Cisg
ICAgc3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAg
ICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGppdC5tb3ZlKGluc3QuYXJnc1sxXS5hc1RydXN0
ZWRJbW1QdHIoKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmNhbGwoc2NyYXRjaFJl
Z2lzdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgaml0
LmNhbGwoaW5zdC5hcmdzWzFdLmdwcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6
OkFkZHI6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5hc0FkZHJlc3MoKSk7CisgICAg
ICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpK
dW1wKCk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJl
cmVkUmVncyhJbnN0JikKK3sKKyAgICByZXR1cm4gbV9jbG9iYmVyZWRSZWdzOworfQorCit2b2lk
IENDYWxsU3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoIkNDYWxsIik7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkZWVwRHVtcEltcGwo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImZ1bmN0aW9uIGNhbGwg
dGhhdCB1c2VzIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4iKTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5l
IEFpckNDYWxsU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
U3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKKy8vIFVzZSB0aGlzIHNwZWNpYWwgZm9yIGNvbnN0cnVjdGluZyBhIEMgY2FsbC4gQXJn
IDAgaXMgb2YgY291cnNlIGEgU3BlY2lhbCBhcmcgdGhhdCByZWZlcnMgdG8gdGhlCisvLyBDQ2Fs
bFNwZWNpYWwgb2JqZWN0LiBBcmcgMSBpcyB0aGUgY2FsbGVlLCBhbmQgaXQgY2FuIGJlIGFuIElt
bVB0ciwgYSByZWdpc3Rlciwgb3IgYW4gYWRkcmVzcy4gVGhlCisvLyByZW1haW5pbmcgYXJncyBh
cmUganVzdCB0aGUgc2V0IG9mIGFyZ3VtZW50IHJlZ2lzdGVycyB1c2VkIGJ5IHRoaXMgY2FsbC4g
Rm9yIGFyZ3VtZW50cyB0aGF0IGdvIHRvCisvLyB0aGUgc3RhY2ssIHlvdSBoYXZlIHRvIGRvIHRo
ZSBncnVudCB3b3JrIG9mIGRvaW5nIHRob3NlIHN0YWNrIHN0b3Jlcy4gSW4gZmFjdCwgdGhlIG9u
bHkgcmVhc29uIHdoeQorLy8gd2Ugc3BlY2lmeSB0aGUgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGFy
Z3VtZW50cyB0byBhIGNhbGwgaXMgc28gdGhhdCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgY2FuIHNl
ZQorLy8gdGhhdCB0aGV5IGdldCB1c2VkIGhlcmUuIEl0IHdvdWxkIGJlIHdyb25nIHRvIGF1dG9t
YWdpY2FsbHkgcmVwb3J0IGFsbCBhcmd1bWVudCByZWdpc3RlcnMgYXMgYmVpbmcKKy8vIHVzZWQg
YmVjYXVzZSBpZiB3ZSBoYWQgYSBjYWxsIHRoYXQgZGlkbid0IHBhc3MgdGhlbSwgdGhlbiB0aGV5
J2QgYXBwZWFyIHRvIGJlIGxpdmUgdW50aWwgc29tZQorLy8gY2xvYmJlciBwb2ludCBvciB0aGUg
cHJvbG9ndWUsIHdoaWNoZXZlciBoYXBwZW5lZCBzb29uZXIuCisKK2NsYXNzIENDYWxsU3BlY2lh
bCA6IHB1YmxpYyBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDQ2FsbFNwZWNpYWwoKTsKKyAgICB+
Q0NhbGxTcGVjaWFsKCk7CisKKyAgICAvLyBZb3UgY2Fubm90IHVzZSB0aGlzIHJlZ2lzdGVyIHRv
IHBhc3MgYXJndW1lbnRzLiBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIHJlZ2lzdGVyIGlz
IG5vdAorICAgIC8vIHVzZWQgZm9yIGFyZ3VtZW50cyBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnRp
b24uIEJ5IHRoZSB3YXksIHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYXVzZXMKKyAgICAv
LyB0aGlzIHNwZWNpYWwgdG8gYmUgc3BlY2lmaWMgdG8gQyBjYWxscy4KKyAgICBzdGF0aWMgY29u
c3QgR1BSUmVnIHNjcmF0Y2hSZWdpc3RlciA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEluc3QmKSBv
dmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkg
b3ZlcnJpZGU7CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdp
c3RlclNldCYpIG92ZXJyaWRlOworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0
JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKyAgICBjb25z
dCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSBvdmVycmlkZTsKKworICAg
IHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRl
ZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IFJlZ2lzdGVyU2V0IG1fY2xvYmJlcmVkUmVnczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJD
Q2FsbFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ0Nh
bGxTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKK3sK
K30KKworQ29kZTo6fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhk
b3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9j
ayhuZXcgQmFzaWNCbG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2lj
QmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1v
dmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdGFja1Nsb3QqIENvZGU6OmFk
ZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Ns
b3RWYWx1ZSogdmFsdWUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChu
ZXcgU3RhY2tTbG90KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1ZSkp
OworICAgIFN0YWNrU2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKKyAgICBtX3N0YWNrU2xvdHMu
YXBwZW5kKFdURjo6bW92ZShzbG90KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lh
bCogQ29kZTo6YWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKK3sK
KyAgICBTcGVjaWFsKiByZXN1bHQgPSBzcGVjaWFsLmdldCgpOworICAgIG1fc3BlY2lhbHMuYXBw
ZW5kKFdURjo6bW92ZShzcGVjaWFsKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ0NhbGxT
cGVjaWFsKiBDb2RlOjpjQ2FsbFNwZWNpYWwoKQoreworICAgIGlmICghbV9jQ2FsbFNwZWNpYWwp
IHsKKyAgICAgICAgbV9jQ2FsbFNwZWNpYWwgPSBzdGF0aWNfY2FzdDxDQ2FsbFNwZWNpYWwqPigK
KyAgICAgICAgICAgIGFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbFNwZWNpYWw+KCkp
KTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jQ2FsbFNwZWNpYWw7Cit9CisKK3ZvaWQgQ29kZTo6
cmVzZXRSZWFjaGFiaWxpdHkoKQoreworICAgIEIzOjpyZXNldFJlYWNoYWJpbGl0eShtX2Jsb2Nr
cyk7Cit9CisKK3ZvaWQgQ29kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBE
dW1wKGJsb2NrKSk7CisgICAgaWYgKHN0YWNrU2xvdHMoKS5zaXplKCkpIHsKKyAgICAgICAgb3V0
LnByaW50KCJTdGFjayBzbG90czpcbiIpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6
IHN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNs
b3QpLCAiXG4iKTsKKyAgICB9CisgICAgaWYgKHNwZWNpYWxzKCkuc2l6ZSgpKSB7CisgICAgICAg
IG91dC5wcmludCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFs
IDogc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNw
ZWNpYWwpLCAiXG4iKTsKKyAgICB9CisgICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAiLCBtX2Zy
YW1lU2l6ZSwgIlxuIik7CisgICAgb3V0LnByaW50KCJDYWxsIGFyZyBhcmVhIHNpemU6ICIsIG1f
Y2FsbEFyZ0FyZWFTaXplLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwg
bV9jYWxsZWVTYXZlUmVnaXN0ZXJzLCAiXG4iKTsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZEZp
cnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICB3aGlsZSAoaW5kZXgg
PCBzaXplKCkgJiYgIWF0KGluZGV4KSkKKyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gaW5k
ZXg7Cit9CisKK3Vuc2lnbmVkIENvZGU6OmZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCArIDEpOwor
fQorCitCYXNpY0Jsb2NrKiBDb2RlOjpmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSBj
b25zdAoreworICAgIHJldHVybiBhdChmaW5kTmV4dEJsb2NrSW5kZXgoYmxvY2stPmluZGV4KCkp
KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDb2RlX2gKKyNkZWZpbmUgQWlyQ29kZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2lu
Y2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKyNpbmNsdWRl
ICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK25h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBDQ2FsbFNwZWNpYWw7CisKKy8vIFRoaXMgaXMgYW4gSVIg
dGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJdCByZXF1aXJlcyBhYm91dCA0
MHggbW9yZSBieXRlcyB0aGFuIHRoZQorLy8gZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSAtIGZvciBl
eGFtcGxlIGlmIHlvdSdyZSBnZW5lcmF0aW5nIDFNQiBvZiBtYWNoaW5lIGNvZGUsIHlvdSBuZWVk
IGFib3V0CisvLyA0ME1CIG9mIEFpci4KKworY2xhc3MgQ29kZSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoQ29kZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgQ29kZSgpOworICAgIH5Db2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3Vi
bGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNp
Z25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7
CisKKyAgICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7CisK
KyAgICAvLyBUaGlzIGlzIHRoZSBzcGVjaWFsIHlvdSBuZWVkIHRvIG1ha2UgYSBDIGNhbGwhCisg
ICAgQ0NhbGxTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIFRtcCBuZXdUbXAoQXJnOjpU
eXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBB
cmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6Z3BUbXBGb3JJbmRleChtX251bUdQVG1w
cysrKTsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6ZnBU
bXBGb3JJbmRleChtX251bUZQVG1wcysrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2ln
bmVkIG51bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtR1BUbXBz
OworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1cm4gbV9udW1GUFRtcHM7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYWxsQXJnQXJlYVNpemUoKSBjb25z
dCB7IHJldHVybiBtX2NhbGxBcmdBcmVhU2l6ZTsgfQorCisgICAgLy8gWW91IGNhbiBjYWxsIHRo
aXMgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiB0byBmb3JjZSBhIG1pbmltdW0gY2FsbCBhcmcgYXJl
YSBzaXplLgorICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6ZSh1bnNpZ25lZCBzaXplKQor
ICAgIHsKKyAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUgPSBzdGQ6Om1heCgKKyAgICAgICAgICAg
IG1fY2FsbEFyZ0FyZWFTaXplLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdU
Rjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHNpemUpKSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgZnJhbWVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVNp
emU7IH0KKworICAgIC8vIE9ubHkgcGhhc2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbiBhcmUg
YWxsb3dlZCB0byBzZXQgdGhpcy4gQ3VycmVudGx5LCBvbmx5CisgICAgLy8gQWlyOjphbGxvY2F0
ZVN0YWNrKCkgZG9lcyB0aGlzLgorICAgIHZvaWQgc2V0RnJhbWVTaXplKHVuc2lnbmVkIGZyYW1l
U2l6ZSkKKyAgICB7CisgICAgICAgIG1fZnJhbWVTaXplID0gZnJhbWVTaXplOworICAgIH0KKwor
ICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4g
bV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisKKyAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29y
cyBhbmQgZGVsZXRlcyB1bnJlYWNoYWJsZSBibG9ja3MuCisgICAgdm9pZCByZXNldFJlYWNoYWJp
bGl0eSgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5n
ZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4
JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPj0gaW5kZXguCisgICAg
dW5zaWduZWQgZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAg
ICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51
bGwgYW5kIGluZGV4JyA+IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmROZXh0QmxvY2tJbmRleCh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICBCYXNpY0Jsb2NrKiBmaW5kTmV4dEJsb2NrKEJh
c2ljQmxvY2sqKSBjb25zdDsKKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2RlKG51bGxwdHIpCisgICAgICAg
ICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0
b3IoY29uc3QgQ29kZSYgY29kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29k
ZSgmY29kZSkKKyAgICAgICAgICAgICwgbV9pbmRleChtX2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5k
ZXgoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBv
cGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2RlLT5hdChtX2lu
ZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleCht
X2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
ICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlKiBtX2NvZGU7CisgICAg
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIGNsYXNzIFN0YWNr
U2xvdHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0YWNrU2xvdHNDb2xsZWN0
aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV9jb2RlLm1fc3RhY2tTbG90cy5zaXplKCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBhdCh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90c1tpbmRleF0uZ2V0
KCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
ICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1f
Y29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTdGFj
a1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAg
ICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBT
dGFja1Nsb3QqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiogbV9jb2xs
ZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAg
ICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsg
fQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywg
c2l6ZSgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOwor
ICAgIH07CisKKyAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Nsb3RzKCkgY29uc3QgeyBy
ZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAgCisgICAgY2xhc3MgU3Bl
Y2lhbHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNwZWNpYWxzQ29sbGVjdGlv
bihjb25zdCBDb2RlJiBjb2RlKQorICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZS5tX3NwZWNpYWxzLnNpemUoKTsgfQorICAgICAgICBTcGVjaWFsKiBhdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHNbaW5kZXhdLmdldCgpOyB9Cisg
ICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGlj
OgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9u
KG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFNwZWNpYWxzQ29sbGVj
dGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2Nv
bGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTcGVjaWFsKiBvcGVy
YXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rp
b24tPmF0KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOwor
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAg
ICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFNw
ZWNpYWxzQ29sbGVjdGlvbiBzcGVjaWFscygpIGNvbnN0IHsgcmV0dXJuIFNwZWNpYWxzQ29sbGVj
dGlvbigqdGhpcyk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxC
YXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFs
Pj4gbV9zcGVjaWFsczsKKyAgICBDQ2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0
ciB9OworICAgIHVuc2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVt
RlBUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9OworICAgIHVuc2ln
bmVkIG1fY2FsbEFyZ0FyZWFTaXplIHsgMCB9OworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1f
Y2FsbGVlU2F2ZVJlZ2lzdGVyczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDb2RlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRC
bG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJG
cmVxdWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyRnJlcXVl
bnRlZEJsb2NrX2gKKyNkZWZpbmUgQWlyRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Js
b2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVl
bnRlZEJsb2NrOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWly
R2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBbGxvY2F0
ZVN0YWNrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKyNpbmNsdWRlICJB
aXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVs
cGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK3ZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAg
aWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgImluaXRpYWwi
KTsKKworICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFs
IGFpcjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIFRoaXMg
aXMgd2hlcmUgd2UgcnVuIG91ciBvcHRpbWl6YXRpb25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCisg
ICAgLy8gRklYTUU6IEFkZCBBaXIgb3B0aW1pemF0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU2CisKKyAgICAvLyBUaGlzIGlzIHdoZXJl
IHdlIHdvdWxkIGhhdmUgYSByZWFsIHJlZ2lzdGVyIGFsbG9jYXRvci4gVGhlbiwgd2UgY291bGQg
dXNlIHNwaWxsRXZlcnl0aGluZygpCisgICAgLy8gaW4gcGxhY2Ugb2YgdGhlIHJlZ2lzdGVyIGFs
bG9jYXRvciBvbmx5IGZvciB0ZXN0aW5nLgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU3CisgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUp
OworCisgICAgLy8gUHJpb3IgdG8gdGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3Vl
IGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCisgICAgLy8gZG9l
cyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5k
IHNhdmVzIHRoZW0uCisgICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CisKKyAgICAvLyBUaGlz
IHR1cm5zIGFsbCBTdGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNl
IHRoZSBmcmFtZSBwb2ludGVyLiBJdCBkb2VzCisgICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxs
b2NhdGluZyBzdGFjayBzbG90cy4gSXQgc2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9w
dGltYWwsIHNvIHdlCisgICAgLy8gc2hvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2
ZXJ5IG11Y2guCisgICAgYWxsb2NhdGVTdGFjayhjb2RlKTsKKworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgcmVhbGx5IGhhdmUgYSBjb2RlIGxheW91dCBvcHRpbWl6YXRpb24gaGVyZS4KKyAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc4CisKKyAgICAv
LyBGSVhNRTogV2UgbmVlZCBhIGxhdGUgbGl2ZW5lc3MgYW5hbHlzaXMgb3ZlciByZWdpc3RlcnMg
dG8gZmlsbCBpbiB0aGUKKyAgICAvLyBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCkuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUxMQorCisg
ICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgImZpbmFs
Iik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGJl
Zm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisg
ICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJhdGUgY29kZS4KKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJv
bG9ndWUoKTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2Rl
LmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwor
ICAgIEdlbmVyYXRpb25Db250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5jb2RlID0gJmNvZGU7
CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tMYWJl
bHMoY29kZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6
SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0gWyZd
IChDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAgICAg
IGlmIChibG9ja0xhYmVsc1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAubGlu
a1RvKGJsb2NrTGFiZWxzW3RhcmdldF0sICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisKKyAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAgICB9
OworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxvY2tK
dW1wc1tibG9ja10ubGluaygmaml0KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0g
MSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsg
KytpKSB7CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChp
KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1w
LCAhanVtcC5pc1NldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChibG9jay0+bGFzdCgp
Lm9wY29kZSA9PSBKdW1wCisgICAgICAgICAgICAmJiBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkg
PT0gY29kZS5maW5kTmV4dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisg
ICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9wY29kZSA9PSBSZXQpIHsKKyAgICAgICAgICAgIC8v
IFdlIGN1cnJlbnRseSBkb24ndCByZXByZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUg
aW4gQWlyLCBzbyB3ZSBuZWVkIHRvCisgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUu
CisgICAgICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGpp
dC5yZXQoKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5sYXN0KCkuZ2VuZXJhdGUoaml0
LCBjb250ZXh0KTsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKQorICAgICAgICAg
ICAganVtcCA9IGluc3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAgc3dpdGNoIChi
bG9jay0+bnVtU3VjY2Vzc29ycygpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIEFT
U0VSVCghanVtcC5pc1NldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbGluayhqdW1wLCBi
bG9jay0+c3VjY2Vzc29yQmxvY2soMCkpOworICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNz
b3JCbG9jaygxKSAhPSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgICAg
IGxpbmsoaml0Lmp1bXAoKSwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAg
Zm9yIChhdXRvJiBsYXRlUGF0aCA6IGNvbnRleHQubGF0ZVBhdGhzKQorICAgICAgICBsYXRlUGF0
aC0+cnVuKGppdCwgY29udGV4dCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJHZW5lcmF0ZV9oCisjZGVmaW5lIEFpckdlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHRha2VzIGFu
IEFpcjo6Q29kZSB0aGF0IGhhc24ndCBoYWQgYW55IHN0YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlv
bmFsbHkgaGFzbid0IGhhZCBhbnkKKy8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIGRvZXMgYm90
aCBvZiB0aG9zZSB0aGluZ3MsIGFuZCB0aGVuIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUg
Z2l2ZW4KKy8vIENDYWxsSGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwg
Y2FsbGJhY2tzIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzCisvLyBnZW5lcmF0aW5nLgor
dm9pZCBnZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJHZW5lcmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGVkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckdlbmVyYXRlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisvLyBUaGlzIGlzIGdlbmVyYXRlZCBieSBv
cGNvZGVfZ2VuZXJhdG9yLnJiLgorI2luY2x1ZGUgIkFpck9wY29kZUdlbmVyYXRlZC5oIgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKyNkZWZpbmUgQWly
R2VuZXJhdGlvbkNvbnRleHRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0IHsKKyAgICB0eXBlZGVmIHZvaWQg
TGF0ZVBhdGhGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworICAg
IHR5cGVkZWYgU2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKKworICAgIFZl
Y3RvcjxSZWZQdHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7CisgICAgQ29kZSogY29kZTsKK307CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVD
YWxsZWVTYXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgor
I2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUp
Cit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJoYW5kbGVDYWxsZWVTYXZlcyIp
OworCisgICAgUmVnaXN0ZXJTZXQgdXNlZENhbGxlZVNhdmVzOworCisgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7
CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KAorICAgICAgICAgICAgICAgIFsmXSAo
VG1wJiB0bXApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXQgZmlyc3Qgd2UganVzdCByZWNv
cmQgYWxsIHVzZWQgcmVncy4KKyAgICAgICAgICAgICAgICAgICAgdXNlZENhbGxlZVNhdmVzLnNl
dCh0bXAucmVnKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gTm93IHdlIGZpbHRlciB0byByZWFsbHkgZ2V0IHRoZSBjYWxsZWUgc2F2ZXMuCisgICAg
dXNlZENhbGxlZVNhdmVzLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKKworICAgIGlmICghdXNlZENhbGxlZVNhdmVzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpID0gUmVnaXN0
ZXJBdE9mZnNldExpc3QodXNlZENhbGxlZVNhdmVzKTsKKworICAgIHNpemVfdCBieXRlU2l6ZSA9
IDA7CisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVl
U2F2ZVJlZ2lzdGVycygpKQorICAgICAgICBieXRlU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0
PHNpemVfdD4oLWVudHJ5Lm9mZnNldCgpKSwgYnl0ZVNpemUpOworCisgICAgU3RhY2tTbG90KiBz
YXZlc0FyZWEgPSBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tTbG90S2luZDo6TG9j
a2VkKTsKKyAgICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUgYWxy
ZWFkeSBwaW5uZWQgYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCisgICAgLy8gYXJlYS4g
QWxzbywgb3VyIHJ1bnRpbWUgZG9lcyBub3QgcmVxdWlyZSB1cyB0byBwaW4gdGhlIHNhdmVzIGFy
ZWEuIE1heWJlIHdlIHNob3VsZG4ndCBwaW4gaXQ/CisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRG
cm9tRlAoLWJ5dGVTaXplKTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3Rl
ckF0T2Zmc2V0JiBlbnRyeSkgLT4gQXJnIHsKKyAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soc2F2
ZXNBcmVhLCBlbnRyeS5vZmZzZXQoKSArIGJ5dGVTaXplKTsKKyAgICB9OworCisgICAgSW5zZXJ0
aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICAKKyAgICAvLyBGaXJzdCBpbnNlcnQgc2F2
aW5nIGNvZGUgaW4gdGhlIHByb2xvZ3VlLgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICBpbnNlcnRp
b25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgMCwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUg
OiBNb3ZlRG91YmxlLCBjb2RlWzBdLT5hdCgwKS5vcmlnaW4sCisgICAgICAgICAgICBUbXAoZW50
cnkucmVnKCkpLCBhcmdGb3IoZW50cnkpKTsKKyAgICB9CisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoY29kZVswXSk7CisKKyAgICAvLyBOb3cgaW5zZXJ0IHJlc3RvcmUgY29kZSBhdCBlcGlsb2d1
ZXMuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgSW5zdCYg
bGFzdCA9IGJsb2NrLT5sYXN0KCk7CisgICAgICAgIGlmIChsYXN0Lm9wY29kZSAhPSBSZXQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZz
ZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIGVu
dHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgbGFzdC5vcmlnaW4sCisgICAg
ICAgICAgICAgICAgYXJnRm9yKGVudHJ5KSwgVG1wKGVudHJ5LnJlZygpKSk7CisgICAgICAgIH0K
KyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhh
bmRsZUNhbGxlZVNhdmVzX2gKKyNkZWZpbmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHBoYXNlIGlkZW50aWZpZXMgY2FsbGVl
LXNhdmUgcmVnaXN0ZXJzIGFuZCBhZGRzIGNvZGUgdG8gc2F2ZS9yZXN0b3JlIHRoZW0gaW4gdGhl
CisvLyBwcm9sb2d1ZS9lcGlsb2d1ZSB0byB0aGUgY29kZS4gSXQncyBhIG1hbmRhdG9yeSBwaGFz
ZS4KKworLy8gRklYTUU6IEl0IHdvdWxkIGJlIGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJh
Y3RpdmUgd2l0aCB0aGUgQWlyIGNsaWVudCBhbmQgYWxzbyBtb3JlCisvLyBwb3dlcmZ1bC4KKy8v
IFdlIHNob3VsZCBoYXZlIHNocmluayB3cmFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDQ1OAorLy8gV2Ugc2hvdWxkIG1ha2UgdGhpcyBpbnRlcmFjdCB3
aXRoIHRoZSBjbGllbnQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA0NTkKKwordm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0Lmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5z
ZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNl
cnRpb25zKGJsb2NrLT5tX2luc3RzLCBtX2luc2VydGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnNlcnRpb25TZXRfaAorI2RlZmlu
ZSBBaXJJbnNlcnRpb25TZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckluc3QuaCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBDb2RlOworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9u
PEluc3Q+IEluc2VydGlvbjsKKworY2xhc3MgSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBJ
bnNlcnRpb25TZXQoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7Cisg
ICAgfQorCisgICAgQ29kZSYgY29kZSgpIHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYgaW5zZXJ0aW9uKQor
ICAgIHsKKyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oaW5zZXJ0
aW9uKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGlu
c2VydEluc3Qoc2l6ZV90IGluZGV4LCBJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVu
ZEluc2VydGlvbihJbnNlcnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOwor
ICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9p
ZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgewor
ICAgICAgICBpbnNlcnRJbnN0KGluZGV4LCBJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFy
Z3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOwor
Citwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBt
X2luc2VydGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK3ZvaWQgSW5zdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChvcGNvZGUsICIgIiwgbGlzdER1bXAoYXJncykpOworICAgIGlmIChvcmlnaW4p
IHsKKyAgICAgICAgaWYgKGFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsICIp
OworICAgICAgICBvdXQucHJpbnQoKm9yaWdpbik7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckluc3RfaAorI2RlZmluZSBBaXJJbnN0X2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRl
ICJDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVy
czsKK2NsYXNzIFJlZ2lzdGVyU2V0OworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsK
KworbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKKworc3RydWN0
IEluc3QgeworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPEFyZywgMz4gQXJnTGlzdDsKKwor
ICAgIEluc3QoKQorICAgICAgICA6IG9yaWdpbihudWxscHRyKQorICAgICAgICAsIG9wY29kZShO
b3ApCisgICAgeworICAgIH0KKyAgICAKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBv
cmlnaW4pCisgICAgICAgIDogb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2Rl
KQorICAgIHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnIGFyZywgQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzeyBhcmcsIGFyZ3VtZW50cy4uLiB9Cisg
ICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsK
KyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IEFy
Z0xpc3QmIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzKGFyZ3VtZW50cykKKyAgICAgICAgLCBv
cmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKwor
ICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnTGlzdCYmIGFyZ3VtZW50
cykKKyAgICAgICAgOiBhcmdzKFdURjo6bW92ZShhcmd1bWVudHMpKQorICAgICAgICAsIG9yaWdp
bihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAg
Ly8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0b3JzIGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1
c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBmb3IgdGhpbmdzIHRoYXQKKyAgICAvLyBlZGl0IElSLiBJ
UiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7IGlmIHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29u
c3QgSW5zdCYiIHRoZW4geW91J3JlCisgICAgLy8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCisK
KyAgICAvLyBUaGlzIG9ubHkgd2Fsa3MgdGhvc2UgVG1wcyB0aGF0IGFyZSBleHBsaWNpdGx5IG1l
bnRpb25lZCwgYW5kIGl0IGRvZXNuJ3QgdGVsbCB5b3UgdGhlaXIgcm9sZQorICAgIC8vIG9yIHR5
cGUuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBG
YXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKEFyZyYgYXJn
IDogYXJncykKKyAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9
CisKKyAgICB0eXBlZGVmIHZvaWQgRWFjaEFyZ0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJn
OjpUeXBlKTsKKyAgICAKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUs
IHR5cGUpLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2Rl
X2dlbmVyYXRvci5yYi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaEFyZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAgIC8vIENhbGxzIHRoZSBm
dW5jdG9yIHdpdGggKHRtcCwgcm9sZSwgdHlwZSkuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7
CisgICAgICAgIGZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBhcmcuZm9yRWFjaFRt
cChyb2xlLCB0eXBlLCBmdW5jdG9yKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIC8v
IFRoaW5nIGNhbiBiZSBlaXRoZXIgQXJnIG9yIFRtcC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBU
aGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYg
ZnVuY3Rvcik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpbnN0cnVjdGlvbiBoYXMg
YSBTcGVjaWFsKi4gVGhpcyB1bmxvY2tzIHNvbWUgZXh0cmEgZnVuY3Rpb25hbGl0eS4KKyAgICBi
b29sIGhhc1NwZWNpYWwoKSBjb25zdDsKKworICAgIC8vIFJlcG9ydHMgYW55IGFkZGl0aW9uYWwg
cmVnaXN0ZXJzIGNsb2JiZXJlZCBieSB0aGlzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IGZvciBlZmZp
Y2llbmN5LAorICAgIC8vIGV4dHJhQ2xvYmJlcmVkUmVncygpIG9ubHkgd29ya3MgaWYgaGFzU3Bl
Y2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVy
ZWRSZWdzKCk7CisKKyAgICAvLyBVc2UgdGhpcyB0byByZXBvcnQgd2hpY2ggcmVnaXN0ZXJzIGFy
ZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBkb25lIGp1c3QgYmVmb3JlIGNvZGVnZW4uIE5vdGUKKyAg
ICAvLyB0aGF0IGZvciBlZmZpY2llbmN5LCByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgb25seSB3b3Jr
cyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lz
dGVycyhjb25zdCBSZWdpc3RlclNldCYpOworCisgICAgLy8gSXMgdGhpcyBpbnN0cnVjdGlvbiBp
biBvbmUgb2YgdGhlIHZhbGlkIGZvcm1zIHJpZ2h0IG5vdz8gVGhpcyBmdW5jdGlvbiBpcyBhdXRv
LWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBpc1Zh
bGlkRm9ybSgpOworCisgICAgLy8gQXNzdW1pbmcgdGhpcyBpbnN0cnVjdGlvbiBpcyBpbiBhIHZh
bGlkIGZvcm0gcmlnaHQgbm93LCB3aWxsIGl0IHN0aWxsIGJlIGluIG9uZSBvZiB0aGUgdmFsaWQK
KyAgICAvLyBmb3JtcyBpZiB3ZSBwdXQgYW4gQWRkciByZWZlcmVuY2luZyB0aGUgc3RhY2sgKG9y
IGEgU3RhY2tTbG90IG9yIENhbGxBcmcsIG9mIGNvdXJzZSkgaW4gdGhlCisgICAgLy8gZ2l2ZW4g
aW5kZXg/IFNwaWxsaW5nIHVzZXMgdGhpczogaXQgd2Fsa3MgdGhlIGFyZ3MgYnkgaW5kZXggdG8g
ZmluZCBUbXBzIHRoYXQgbmVlZCBzcGlsbGluZzsKKyAgICAvLyBpZiBpdCBmaW5kcyBvbmUsIGl0
IGNhbGxzIHRoaXMgdG8gc2VlIGlmIGl0IGNhbiByZXBsYWNlIHRoZSBBcmc6OlRtcCB3aXRoIGFu
IEFyZzo6QWRkci4gSWYgaXQKKyAgICAvLyBmaW5kcyBhIG5vbi1UbXAgQXJnLCB0aGVuIGl0IGNh
bGxzIHRoYXQgQXJnJ3MgZm9yRWFjaFRtcCB0byBkbyBhIHJlcGxhY2VtZW50IHRoYXQgd2F5Lgor
ICAgIC8vCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVf
Z2VuZXJhdG9yLnJiLgorICAgIGJvb2wgYWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpOwor
CisgICAgLy8gR2VuZXJhdGUgc29tZSBjb2RlIGZvciB0aGlzIGluc3RydWN0aW9uLiBUaGlzIGlz
LCBsaWtlLCBsaXRlcmFsbHkgb3VyIGJhY2tlbmQuIElmIHRoaXMgaXMgdGhlCisgICAgLy8gdGVy
bWluYWwsIGl0IHJldHVybnMgdGhlIGp1bXAgdGhhdCBuZWVkcyB0byBiZSBsaW5rZWQgZm9yIHRo
ZSAidGhlbiIgY2FzZSwgd2l0aCB0aGUgImVsc2UiCisgICAgLy8gY2FzZSBiZWluZyBmYWxsLXRo
cm91Z2guIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRv
ci5yYi4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiwgR2Vu
ZXJhdGlvbkNvbnRleHQmKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
CisgICAgQXJnTGlzdCBhcmdzOworICAgIFZhbHVlKiBvcmlnaW47IC8vIFRoZSBCMzo6VmFsdWUg
dGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbS4KKyAgICBPcGNvZGUgb3Bjb2RlOworfTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpckluc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBBaXJJbnN0SW5saW5lc19oCisjZGVmaW5lIEFpckluc3RJbmxpbmVzX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQWlyT3Bjb2Rl
VXRpbHMuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5o
IgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRm9yRWFjaDsK
K3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8VG1wPiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpbnN0LmZvckVhY2hUbXAoZnVuY3Rvcik7Cisg
ICAgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8QXJnPiB7CisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKEluc3QmIGluc3QsIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpbnN0LmZvckVhY2hBcmcoZnVu
Y3Rvcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1
bmN0b3I+Cit2b2lkIEluc3Q6OmZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3sKKyAg
ICBGb3JFYWNoPFRoaW5nPjo6Zm9yRWFjaCgqdGhpcywgZnVuY3Rvcik7Cit9CisKK2Jvb2wgSW5z
dDo6aGFzU3BlY2lhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFyZ3Muc2l6ZSgpICYmIGFyZ3Nb
MF0uaXNTcGVjaWFsKCk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBJbnN0OjpleHRyYUNsb2Ji
ZXJlZFJlZ3MoKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOworICAgIHJldHVybiBhcmdz
WzBdLnNwZWNpYWwoKS0+ZXh0cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsKK30KKwordm9pZCBJbnN0
OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQor
eworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOworICAgIGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBv
cnRVc2VkUmVnaXN0ZXJzKCp0aGlzLCB1c2VkUmVnaXN0ZXJzKTsKK30KKworaW5saW5lIGJvb2wg
aXNTaGlmdFZhbGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4
Nl82NCkKKyAgICByZXR1cm4gaW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3RlcnM6OmVjeCk7
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRp
ZgorfSAgIAorCitpbmxpbmUgYm9vbCBpc0xzaGlmdDMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkK
K3sKKyAgICByZXR1cm4gaXNTaGlmdFZhbGlkKGluc3QpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlySW5zdElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJMaXZlbmVzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTGl2ZW5l
c3NfaAorI2RlZmluZSBBaXJMaXZlbmVzc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRl
ICJCM0luZGV4U2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworLy8gWW91IGNhbiBjb21wdXRlIGxpdmVuZXNzIG92ZXIgVG1wJ3Mgb3Igb3Zl
ciBBcmcncy4gSWYgeW91IGNvbXB1dGUgb3ZlciBBcmcncywgeW91IGdldCBib3RoCisvLyBzdGFj
ayBsaXZlbmVzcyBhbmQgdG1wIGxpdmVuZXNzLgordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+Citj
bGFzcyBMaXZlbmVzcyB7CitwdWJsaWM6CisgICAgTGl2ZW5lc3MoQ29kZSYgY29kZSkKKyAgICB7
CisgICAgICAgIG1fbGl2ZUF0SGVhZC5yZXNpemUoY29kZS5zaXplKCkpOworICAgICAgICBtX2xp
dmVBdFRhaWwucmVzaXplKGNvZGUuc2l6ZSgpKTsKKworICAgICAgICBJbmRleFNldDxCYXNpY0Js
b2NrPiBzZWVuOworCisgICAgICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIHdoaWxl
IChjaGFuZ2VkKSB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisKKyAgICAgICAgICAg
IGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSBjb2RlLnNpemUoKTsgYmxvY2tJbmRleC0tOykgewor
ICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gY29kZS5hdChibG9ja0luZGV4KTsK
KyAgICAgICAgICAgICAgICBMb2NhbENhbGMgbG9jYWxDYWxjKCp0aGlzLCBibG9jayk7CisgICAg
ICAgICAgICAgICAgZm9yIChzaXplX3QgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdElu
ZGV4LS07KQorICAgICAgICAgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQo
aW5zdEluZGV4KSk7CisgICAgICAgICAgICAgICAgYm9vbCBmaXJzdFRpbWUgPSBzZWVuLmFkZChi
bG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFmaXJzdFRpbWUgJiYgbG9jYWxDYWxjLmxpdmUo
KSA9PSBtX2xpdmVBdEhlYWRbYmxvY2tdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl0uYWRkKAorICAgICAgICAgICAg
ICAgICAgICAgICAgbG9jYWxDYWxjLmxpdmUoKS5iZWdpbigpLCBsb2NhbENhbGMubGl2ZSgpLmVu
ZCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbV9saXZlQXRIZWFkW2Js
b2NrXSA9IGxvY2FsQ2FsYy50YWtlTGl2ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCisgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmVBdEhlYWQoQmFzaWNCbG9jayog
YmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsK
KyAgICB9CisKKyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0VGFpbChCYXNpY0Jsb2Nr
KiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdFRhaWxbYmxvY2td
OworICAgIH0KKworICAgIC8vIFRoaXMgY2FsY3VsYXRvciBoYXMgdG8gYmUgcnVuIGluIHJldmVy
c2UuCisgICAgY2xhc3MgTG9jYWxDYWxjIHsKKyAgICBwdWJsaWM6CisgICAgICAgIExvY2FsQ2Fs
YyhMaXZlbmVzcyYgbGl2ZW5lc3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBt
X2xpdmUobGl2ZW5lc3MubGl2ZUF0VGFpbChibG9jaykpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlKCkgY29uc3QgeyByZXR1cm4gbV9s
aXZlOyB9CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+JiYgdGFrZUxpdmUoKSB7IHJldHVybiBXVEY6
Om1vdmUobV9saXZlKTsgfQorCisgICAgICAgIHZvaWQgZXhlY3V0ZShJbnN0JiBpbnN0KQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBGaXJzdCBoYW5kbGUgZGVmJ3MuCisgICAgICAgICAgICBp
bnN0LmZvckVhY2g8VGhpbmc+KAorICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywg
QXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFy
Zy5pc0FsaXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAg
bV9saXZlLnJlbW92ZShhcmcpOworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAv
LyBOZXh0IGhhbmRsZSBjbG9iYmVyZWQgcmVnaXN0ZXJzLgorICAgICAgICAgICAgaWYgKGluc3Qu
aGFzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICAgICAgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3Mo
KS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAgICBbdGhpc10gKFJlZyByZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoVGhpbmcoVG1wKHJlZykpKTsKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gRmluYWxseSBoYW5kbGUgdXNlJ3MuCisgICAgICAgICAgICBpbnN0LmZv
ckVhY2g8VGhpbmc+KAorICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0Fs
aXZlKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
ICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZl
LmFkZChhcmcpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBIYXNoU2V0PFRoaW5nPiBtX2xpdmU7CisgICAgfTsKKyAgICAKK3ByaXZhdGU6
CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0SGVhZDsK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRUYWlsOwor
fTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE0OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworIyBTeWxsYWJ1czoKKyMKKyMgUm9sZXMgYW5kIHR5cGVzOgorIyBVOkcgPT4gdXNlIG9m
IGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBn
ZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBv
ZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEg
ZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpGID0+IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVy
IG9yIHZhbHVlCisjIFVEOkYgPT4gdXNlIGFuZCBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2
YWx1ZQorIworIyBBcmd1bWVudCBraW5kczoKKyMgVG1wID0+IHRlbXBvcmFyeSBvciByZWdpc3Rl
cgorIyBJbW0gPT4gMzItYml0IGltbWVkaWF0ZSBpbnQKKyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0
CisjIEFkZHIgPT4gYWRkcmVzcyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4
ID0+IEJhc2VJbmRleCBhZGRyZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhl
IHBhcnNlciB2aWV3cyB0aGVzZSB0aGluZ3MgYXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0
aGF0IHRoZXkgZmFsbCBpbnRvIHR3byBkaXN0aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28s
IGFsdGhvdWdoIHRoaXMgZmlsZSB1c2VzIGEgcGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwg
bm9uZSBvZiB0aGUgd2hpdGVzcGFjZSBvcgorIyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVs
IHRvIHRoZSBwYXJzZXIuIEZvciBleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQy
IFU6RywgVUQ6RiBJbW0sIFRtcCBBZGRyLCBUbXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQg
a25vdyB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAg
ICAgSW1tLCBUbXAKKyMgICAgIEFkZHIsIFRtcAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1
Y3Rpb24gdGhhdCB1c2VzIGEgR1BSIG9yIGFuIGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBh
IGZsb2F0IHJlZ2lzdGVyLgorCisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBs
ZWFkaW5nIGNhcGl0YWwgKEFkZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1i
bGVyCisjIEFQSSB0aGF0IGhhcyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitOb3AK
KworQWRkMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0s
IFRtcAorICAgIEFkZHIsIFRtcAorICAgIFRtcCwgQWRkcgorCitBZGQzMiBVOkcsIFU6RywgRDpH
CisgICAgSW1tLCBUbXAsIFRtcAorCitBbmQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAg
IEltbSwgVG1wCisgICAgVG1wLCBBZGRyCisgICAgQWRkciwgVG1wCisgICAgSW1tLCBBZGRyCisK
K0xzaGlmdDMyIFU6RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisKK011bDMy
IFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisKKyMgTm90ZSB0aGF0IE1v
dmUgb3BlcmF0ZXMgb3ZlciB0aGUgZnVsbCByZWdpc3RlciBzaXplLCB3aGljaCBpcyBlaXRoZXIg
MzItYml0IG9yIDY0LWJpdCBkZXBlbmRpbmcgb24KKyMgdGhlIHBsYXRmb3JtLiBJJ20gbm90IGVu
dGlyZWx5IHN1cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZzsgaXQgbWlnaHQgYmUgYmV0dGVy
IHRvIGp1c3QgaGF2ZSBhCisjIE1vdmU2NCBpbnN0cnVjdGlvbi4gT1RPSCwgb3VyIE1hY3JvQXNz
ZW1ibGVycyBhbHJlYWR5IGhhdmUgdGhpcyBub3Rpb24gb2YgIm1vdmUoKSIgdGhhdCBiYXNpY2Fs
bHkKKyMgbWVhbnMgbW92ZVB0ci4KK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIElt
bSwgVG1wCisgICAgSW1tNjQsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkUHRyICMgVGhpcyBt
ZWFucyB0aGF0ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMgImxvYWQiIG5v
dCAibW92ZSIuCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkUHRyCisgICAgVG1wLCBBZGRyIGFzIHN0
b3JlUHRyCisgICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgorCitNb3ZlMzIgVTpHLCBEOkcKKyAg
ICBUbXAsIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1B0cgorICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIK
KyAgICBJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIFRtcCwgQWRkciBhcyBzdG9yZTMyCisgICAg
VG1wLCBJbmRleCBhcyBzdG9yZTMyCisKK01vdmVEb3VibGUgVTpGLCBEOkYKKyAgICBUbXAsIFRt
cAorICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkRG91
YmxlCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlRG91YmxlCisgICAgVG1wLCBJbmRleCBhcyBzdG9y
ZURvdWJsZQorCitNb3ZlNjRUb0RvdWJsZSBVOkcsIEQ6RgorICAgIFRtcCwgVG1wCisKK01vdmVE
b3VibGVUbzY0IFU6RiwgRDpHCisgICAgVG1wLCBUbXAKKworQnJhbmNoQWRkMzIgVTpHLCBVOkcs
IFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBU
bXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBS
ZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTXVsMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAor
ICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaFN1
YjMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJl
c0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1w
LCBBZGRyCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE5lZzMyIFU6RywgVUQ6RyAv
YnJhbmNoCisgICAgUmVzQ29uZCwgVG1wCisKK0p1bXAgL2JyYW5jaAorCitSZXQgL3Rlcm1pbmFs
CisKK0JyZWFrcG9pbnQgL3Rlcm1pbmFsCisKKyMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2
aW9yLiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3Bl
Y2lhbCBvcGVyYW5kLAorIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgorc3BlY2lh
bCBQYXRjaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhh
c2VTY29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclBoYXNlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRl
ICJCM0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciog
bmFtZSkKKyAgICA6IG1fY29kZShjb2RlKQorICAgICwgbV9uYW1lKG5hbWUpCit7CisgICAgaWYg
KHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9y
ZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAg
aWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9IHRv
Q1N0cmluZyhjb2RlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAgIGlm
IChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgdmFsaWRhdGUobV9jb2Rl
LCBtX25hbWUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyUGhhc2VTY29wZV9oCisjZGVmaW5lIEFpclBoYXNlU2NvcGVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCitjbGFzcyBQaGFzZVNjb3Bl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQ
aGFzZVNjb3BlKENvZGUmLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAv
LyB0aGlzIGRvZXMgdmFsaWRhdGlvbgorCitwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAg
ICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQWlyUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJSZWdpc3RlclNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCkK
K3sKKyAgICBzdGF0aWMgVmVjdG9yPEdQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAg
ICAgW10geworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxHUFJSZWc+KCk7CisgICAg
ICAgICAgICBSZWdpc3RlclNldCBhbGwgPSBSZWdpc3RlclNldDo6YWxsR1BScygpOworICAgICAg
ICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAg
ICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMo
KSk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAg
ICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNh
dmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcu
Z3ByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisg
ICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChj
YWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBl
bmQocmVnLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0
dXJuICpyZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHJzSW5Qcmlvcml0eU9y
ZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPEZQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwK
KyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7
CisgICAgICAgICAgICBSZWdpc3RlclNldCBhbGwgPSBSZWdpc3RlclNldDo6YWxsRlBScygpOwor
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAg
ICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdl
dChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmZwcigp
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAg
ICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGVl
U2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJl
Zy5mcHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAq
cmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6
OlR5cGUgdHlwZSkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPFJlZz4qIHJlc3VsdFtBcmc6Om51bVR5
cGVzXTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25j
ZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0W0FyZzo6
R1BdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBn
cHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdLT5h
cHBlbmQoUmVnKHJlZykpOworICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdID0gbmV3IFZlY3Rv
cjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcHJzSW5Qcmlvcml0eU9y
ZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdLT5hcHBlbmQoUmVnKHJlZykp
OworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdFt0eXBlXTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lzdGVy
UHJpb3JpdHlfaAorI2RlZmluZSBBaXJSZWdpc3RlclByaW9yaXR5X2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5j
bHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVn
PiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpOworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblBy
aW9yaXR5T3JkZXIoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4gc3RydWN0IFJlZ2lzdGVy
c0luUHJpb3JpdHlPcmRlcjsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlP
cmRlcjxHUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEdQUlJlZz4mIGluUHJpb3JpdHlPcmRl
cigpIHsgcmV0dXJuIGdwcnNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKK3RlbXBsYXRlPD4gc3Ry
dWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxGUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9y
PEZQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGZwcnNJblByaW9yaXR5T3JkZXIo
KTsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4KK2NvbnN0IFZlY3Rvcjx0eXBlbmFt
ZSBCYW5rOjpSZWdpc3RlclR5cGU+JiByZWdzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICByZXR1
cm4gUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEJhbms+OjppblByaW9yaXR5T3JkZXIoKTsKK30K
KworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBj
aGFyKiBjb25zdCBTcGVjaWFsOjpkdW1wUHJlZml4ID0gIiYiOworCitTcGVjaWFsOjpTcGVjaWFs
KCkKKyAgICA6IG1faW5kZXgoVUlOVF9NQVgpCit7Cit9CisKK1NwZWNpYWw6On5TcGVjaWFsKCkK
K3sKK30KKworQ1N0cmluZyBTcGVjaWFsOjpuYW1lKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQcmlu
dFN0cmVhbSBvdXQ7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmlu
ZygpOworfQorCit2b2lkIFNwZWNpYWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCk7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICBpZiAo
bV9pbmRleCAhPSBVSU5UX01BWCkKKyAgICAgICAgb3V0LnByaW50KG1faW5kZXgpOworfQorCit2
b2lkIFNwZWNpYWw6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCp0aGlzLCAiOiAiKTsKKyAgICBkZWVwRHVtcEltcGwob3V0KTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGVjaWFsX2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVk
ZSA8d3RmL1Njb3BlZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3Qg
R2VuZXJhdGlvbkNvbnRleHQ7CisKK2NsYXNzIFNwZWNpYWwgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFNwZWNpYWwpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworICAgIAorICAgIFNwZWNp
YWwoKTsKKyAgICB2aXJ0dWFsIH5TcGVjaWFsKCk7CisKKyAgICBDU3RyaW5nIG5hbWUoKSBjb25z
dDsKKworICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1i
ZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxp
ZChJbnN0JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWdu
ZWQgYXJnSW5kZXgpID0gMDsKKworICAgIC8vIFRoaXMgZ2V0cyBjYWxsZWQgb24gZm9yIGVhY2gg
SW5zdCB0aGF0IHVzZXMgdGhpcyBTcGVjaWFsLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRv
CisgICAgLy8gZ3VhcmFudGVlIHRoYXQgYSBTcGVjaWFsIGdldHMgdXNlZCBmcm9tIGp1c3Qgb25l
IEluc3QsIGJlY2F1c2UgQWlyIG1pZ2h0IHRhaWxkdXAgbGF0ZS4gU28sCisgICAgLy8gaWYgeW91
IHdhbnQgdG8gcGFzcyB0aGlzIGluZm9ybWF0aW9uIGRvd24gdG8gZ2VuZXJhdGUoKSwgdGhlbiB5
b3UgaGF2ZSB0byBlaXRoZXI6CisgICAgLy8KKyAgICAvLyAxKSBHZW5lcmF0ZSBBaXIgdGhhdCBz
dGFydHMgd2l0aCBhIHNlcGFyYXRlIFNwZWNpYWwgcGVyIFBhdGNoIEluc3QsIGFuZCB0aGVuIG1l
cmdlCisgICAgLy8gICAgdXNlZFJlZ2lzdGVyIHNldHMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGdy
ZWF0LCBidXQgaXQgb3B0aW1pemVzIGZvciB0aGUgY29tbW9uIGNhc2UgdGhhdAorICAgIC8vICAg
IEFpciBkaWRuJ3QgZHVwbGljYXRlIGNvZGUgb3IgdGhhdCBzdWNoIGR1cGxpY2F0aW9uIGRpZG4n
dCBjYXVzZSBhbnkgaW50ZXJlc3RpbmcgY2hhbmdlcyB0bworICAgIC8vICAgIHJlZ2lzdGVyIGFz
c2lnbm1lbnQuCisgICAgLy8KKyAgICAvLyAyKSBIYXZlIHRoZSBTcGVjaWFsIG1haW50YWluIGEg
SGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+LiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGFuYWx5
c2lzCisgICAgLy8gICAgdGhhdCBmZWVkcyBpbnRvIHRoaXMgY2FsbCBpcyBwZXJmb3JtZWQganVz
dCBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIGFuZCB0aGVyZSBpcyBubyB3YXkKKyAgICAvLyAgICBm
b3IgdGhlIFZlY3Rvcjw+J3MgdGhhdCBjb250YWluIHRoZSBJbnN0cyB0byBiZSByZWFsbG9jYXRl
ZC4gVGhpcyBhbGxvd3MgZ2VuZXJhdGUoKSB0bworICAgIC8vICAgIGNvbnN1bHQgdGhlIEhhc2hN
YXAuCisgICAgLy8KKyAgICAvLyAzKSBIeWJyaWQ6IHlvdSBjb3VsZCB1c2UgKDEpIGFuZCBmaXJl
IHVwIGEgSGFzaE1hcCBpZiB5b3Ugc2VlIG11bHRpcGxlIGNhbGxzLgorICAgIC8vCisgICAgLy8g
Tm90ZSB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIHJlbHkgb24gcmVwb3J0VXNlZFJlZ2lzdGVy
cygpIGJlaW5nIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlcgorICAgIC8vIGFzIGdlbmVyYXRlKCku
IElmIHdlIGNvdWxkIHJlbHkgb24gdGhhdCwgdGhlbiB3ZSBjb3VsZCBqdXN0IGhhdmUgZWFjaCBT
cGVjaWFsIGluc3RhbmNlCisgICAgLy8gbWFpbnRhaW4gYSBWZWN0b3Igb2YgUmVnaXN0ZXJTZXQn
cyBhbmQgdGhlbiBwcm9jZXNzIHRoYXQgdmVjdG9yIGluIHRoZSByaWdodCBvcmRlciBpbgorICAg
IC8vIGdlbmVyYXRlKCkuIEJ1dCwgdGhlIG9yZGVyaW5nIGRpZmZlcmVuY2UgaXMgdW5saWtlbHkg
dG8gY2hhbmdlIHNpbmNlIGl0IHdvdWxkIGhhcm0gdGhlCisgICAgLy8gcGVyZm9ybWFuY2Ugb2Yg
dGhlIGxpdmVuZXNzIGFuYWx5c2lzLgorICAgIC8vCisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyAo
MSkgZm9yIEIzIHN0YWNrbWFwcy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVy
cyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSA9IDA7CisgICAgCisgICAgdmlydHVhbCBDQ2Fs
bEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25D
b250ZXh0JikgPSAwOworCisgICAgdmlydHVhbCBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9i
YmVyZWRSZWdzKEluc3QmKSA9IDA7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsK
KyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKworY2xhc3MgRGVlcFNwZWNpYWxEdW1wIHsKK3B1
YmxpYzoKKyAgICBEZWVwU3BlY2lhbER1bXAoY29uc3QgU3BlY2lhbCogc3BlY2lhbCkKKyAgICAg
ICAgOiBtX3NwZWNpYWwoc3BlY2lhbCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zcGVjaWFsKQorICAg
ICAgICAgICAgbV9zcGVjaWFsLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBT
cGVjaWFsKiBtX3NwZWNpYWw7Cit9OworCitpbmxpbmUgRGVlcFNwZWNpYWxEdW1wIGRlZXBEdW1w
KGNvbnN0IFNwZWNpYWwqIHNwZWNpYWwpCit7CisgICAgcmV0dXJuIERlZXBTcGVjaWFsRHVtcChz
cGVjaWFsKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclNwZWNpYWxfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2
ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5j
bHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1
ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisj
aW5jbHVkZSAiQjNJbmRleE1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCit7Cisg
ICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJzcGlsbEV2ZXJ5dGhpbmciKTsKKworICAg
IC8vIFdlIHdhbnQgdG8ga25vdyB0aGUgc2V0IG9mIHJlZ2lzdGVycyB1c2VkIGF0IGV2ZXJ5IHBv
aW50IGluIGV2ZXJ5IGJhc2ljIGJsb2NrLgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3Rv
cjxSZWdpc3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOworICAgIExpdmVuZXNz
PFRtcD4gbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUp
IHsKKyAgICAgICAgTGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywg
YmxvY2spOworICAgICAgICB1c2VkUmVnaXN0ZXJzW2Jsb2NrXS5yZXNpemUoYmxvY2stPnNpemUo
KSArIDEpOworCisgICAgICAgIGF1dG8gc2V0VXNlZFJlZ2lzdGVycyA9IFsmXSAodW5zaWduZWQg
aW5kZXgpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXQgPSB1c2VkUmVnaXN0ZXJzW2Js
b2NrXVtpbmRleF07CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsb2NhbENhbGMubGl2ZSgp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAg
ICBzZXQuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAg
ICAgc2V0VXNlZFJlZ2lzdGVycyhibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZv
ciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7Cisg
ICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAg
ICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGluc3RJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgorICAgIFZlY3RvcjxT
dGFja1Nsb3QqPiBhbGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOworICAgIGZvciAodW5zaWdu
ZWQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgQXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgp
IHsKKyAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90
c1t0eXBlSW5kZXhdOworICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6
VHlwZT4odHlwZUluZGV4KTsKKyAgICAgICAgc3RhY2tTbG90cy5yZXNpemUoY29kZS5udW1UbXBz
KHR5cGUpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNvZGUubnVtVG1wcyh0
eXBlKTsgdG1wSW5kZXgtLTspCisgICAgICAgICAgICBzdGFja1Nsb3RzW3RtcEluZGV4XSA9IGNv
ZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgfQorCisg
ICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGlu
c3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBSZWdp
c3RlclNldCYgc2V0QmVmb3JlID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4XTsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRBZnRlciA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2lu
c3RJbmRleCArIDFdOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5k
ZXgpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAo
VG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAg
ICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBhbGxTdGFja1Ns
b3RzW3R5cGVdW3RtcC50bXBJbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9
IEFyZzo6c3RhY2soc3RhY2tTbG90KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRv
IGZpZ3VyZSBvdXQgYSByZWdpc3RlciB0byB1c2UuIEhvdyB3ZSBkbyB0aGF0IGRlcGVuZHMgb24g
dGhlIHJvbGUuCisgICAgICAgICAgICAgICAgICAgIFJlZyBjaG9zZW5SZWc7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
VXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3Jp
dHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVm
b3JlLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9y
ZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0g
cmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkRlZjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3Jk
ZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEFmdGVyLmdl
dChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChy
ZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlRGVmOgorICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0
eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChy
ZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9z
ZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNob3NlblJlZyk7CisKKyAgICAgICAgICAg
ICAgICAgICAgdG1wID0gVG1wKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAgICAgICAgT3Bj
b2RlIG1vdmUgPSB0eXBlID09IEFyZzo6R1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKworICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9Cisg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxs
RXZlcnl0aGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGlsbEV2ZXJ5
dGhpbmdfaAorI2RlZmluZSBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBDb2RlOworCisvLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRlc3RpbmcuIEl0IGJlaGF2ZXMg
bGlrZSBhIHJlZ2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2UgdGhhdCBpdAorLy8gZWxpbWlu
YXRlcyB0ZW1wb3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBhY2NvbXBsaXNoZXMgdGhpcyBi
eSBhbHdheXMgc3BpbGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmllcy4gVGhlIHJlc3VsdGluZyBjb2Rl
IGlzIGdvaW5nIHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMgcGhhc2UgaXMgZ3JlYXQgaWYg
eW91CisvLyB0aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRoZSByZWdpc3RlciBhbGxvY2F0
b3IuIFlvdSBjYW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhpcworLy8gcGhhc2UgaW5zdGVh
ZCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8vIE5vdGUgdGhhdCBldmVuIHRob3Vn
aCB0aGlzIHBoYXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBvc3NpYmxlLCBpdCdzIG5vdCBl
dmVuIHdyaXR0ZW4gaW4gYQorLy8gcGFydGljdWxhcmx5IGVmZmljaWVudCB3YXkuIFNvLCBkb24n
dCBnZXQgYW55IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2UgdG8gcmVkdWNlIGNvbXBpbGVy
CisvLyBsYXRlbmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQsIHlvdSBzaG91bGQgY29tZSB1
cCB3aXRoIGEgY2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVzaW5nCisvLyB0aGlzIHNpbGx5
IHRoaW5nLgorCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclN0YWNrU2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFN0YWNrU2xvdDo6c2V0
T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQoreworICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFs
dWU7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG1fdmFsdWUtPm1fb2Zmc2V0RnJvbUZQID0g
dmFsdWU7Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCJzdGFjayIsIG1faW5kZXgpOworfQorCit2b2lkIFN0YWNrU2xv
dDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5
dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRGcm9t
RlAsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBvdXQu
cHJpbnQoIiwgdmFsdWUgPSAiLCAqbV92YWx1ZSk7Cit9CisKK1N0YWNrU2xvdDo6U3RhY2tTbG90
KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCBraW5kLCBT
dGFja1Nsb3RWYWx1ZSogdmFsdWUpCisgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICwg
bV9pbmRleChpbmRleCkKKyAgICAsIG1fb2Zmc2V0RnJvbUZQKHZhbHVlID8gdmFsdWUtPm9mZnNl
dEZyb21GUCgpIDogMCkKKyAgICAsIG1fa2luZChraW5kKQorICAgICwgbV92YWx1ZSh2YWx1ZSkK
K3sKKyAgICBBU1NFUlQoYnl0ZVNpemUpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEFpclN0YWNrU2xvdF9oCisjZGVmaW5lIEFpclN0YWNrU2xvdF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSA8
d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFN0YWNrU2xvdFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3RhY2tT
bG90IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGFja1Nsb3QpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9p
bmRleDsgfQorCisgICAgdW5zaWduZWQgYWxpZ25tZW50KCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChieXRlU2l6ZSgpIDw9IDEpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYg
KGJ5dGVTaXplKCkgPD0gMikKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBpZiAoYnl0
ZVNpemUoKSA8PSA0KQorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIHJldHVybiA4Owor
ICAgIH0KKworICAgIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWU7IH0KKworICAgIC8vIFplcm8gbWVhbnMgdGhhdCBpdCdzIG5vdCB5ZXQgYXNzaWduZWQuCisg
ICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7
IH0KKworICAgIC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkganVzdCBiZSBjYWxsZWQgZnJvbSBwaGFz
ZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uLiBCdXQgeW91IGNhbgorICAgIC8vIHRvdGFsbHkg
Zm9yY2UgYSBzdGFjayBzbG90IHRvIGxhbmQgYXQgc29tZSBvZmZzZXQuCisgICAgdm9pZCBzZXRP
ZmZzZXRGcm9tRlAoaW50cHRyX3QpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXpl
LCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqKTsKKyAgICAK
KyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgaW50
cHRyX3QgbV9vZmZzZXRGcm9tRlA7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgU3Rh
Y2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7Citw
dWJsaWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoY29uc3QgU3RhY2tTbG90KiBzbG90KQorICAg
ICAgICA6IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisgICAgICAgICAg
ICBtX3Nsb3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5w
cmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFN0YWNrU2xvdCog
bV9zbG90OworfTsKKworaW5saW5lIERlZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1wKGNvbnN0IFN0
YWNrU2xvdCogc2xvdCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAoc2xvdCk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJTdGFja1Nsb3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFRt
cDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAg
ICAgICAgb3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmIChpc1JlZygpKSB7CisgICAgICAgIG91dC5wcmludChyZWcoKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBpZiAoaXNHUCgpKSB7CisgICAgICAgIG91dC5wcmludCgiJXRtcCIs
IGdwVG1wSW5kZXgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQo
IiVmdG1wIiwgZnBUbXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBfaAor
I2RlZmluZSBBaXJUbXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkZQUklu
Zm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBBcmc7CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2Yg
YSByZWdpc3Rlci4gSXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBvciBGUFIuIEl0
IGNhbiBhbHNvCisvLyBiZSB1c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lzdGVy
IChpLmUuIGEgdGVtcG9yYXJ5KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1c2UKKy8vIGRl
bGliZXJhdGVseSB0ZXJzZSBuYW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGlzIG5h
bWUgYSBsb3QuCisKK2NsYXNzIFRtcCB7CitwdWJsaWM6CisgICAgVG1wKCkKKyAgICAgICAgOiBt
X3ZhbHVlKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChSZWcgcmVnKQorICAg
IHsKKyAgICAgICAgaWYgKHJlZykgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAg
ICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVHUFIocmVnLmdwcigpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJlZy5mcHIoKSk7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV92YWx1ZSA9IDA7CisgICAgfQorCisgICAgZXhw
bGljaXQgVG1wKGNvbnN0IEFyZyYpOworCisgICAgc3RhdGljIFRtcCBncFRtcEZvckluZGV4KHVu
c2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fdmFsdWUgPSBlbmNvZGVHUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgc3RhdGljIFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVG
UFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorCisgICAgYm9v
bCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVl
KTsKKyAgICB9CisKKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzRW5jb2RlZEZQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUFIo
bV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNHUFIoKSB8fCBpc0ZQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQUihtX3ZhbHVlKTsKKyAgICB9CisK
KyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFIo
bV92YWx1ZSk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwcigpOworICAgICAgICByZXR1cm4gZnBy
KCk7CisgICAgfQorCisgICAgYm9vbCBoYXNUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gIWlzUmVnKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1ZSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ZGVjb2RlRlBUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncFRt
cEluZGV4KCk7CisgICAgICAgIHJldHVybiBmcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgYm9v
bCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhISp0aGlzOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3Q7CisKKyAgICBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQor
ICAgICAgICA6IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gKnRoaXMgPT0gVG1wKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBXVEY6OkludEhhc2g8aW50Pjo6aGFzaChtX3ZhbHVlKTsKKyAgICB9CisgICAgCitwcml2
YXRlOgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCisgICAgeworICAg
ICAgICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlAo
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBpbmRleDsKKyAgICB9
CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOwor
ICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAg
ICAgICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3Rl
cigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQVG1wKHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJl
Z2lzdGVyKCkpICsgMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBU
bXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlBSKE1hY3Jv
QXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEgLSBpbmRleDsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBpc0VuY29kZWRHUChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
dmFsdWUgPiAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQKGludCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA8IDA7CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgaXNFbmNvZGVkR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0Vu
Y29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0
UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBSKGludCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgdmFsdWUg
Pj0gZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisK
KyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRHUFIodmFsdWUpOworICAg
IH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEZQUih2YWx1ZSk7
CisgICAgfQorCisgICAgc3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50IHZhbHVlKQorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8R1BSUmVnPigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVuY29kZUdQUihNYWNyb0Fz
c2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3Rl
cigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQUihpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxGUFJSZWc+KAorICAgICAgICAgICAgKGVuY29kZUZQUihNYWNyb0Fzc2Vt
Ymxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAgICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVk
IGRlY29kZUdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRH
UFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWdu
ZWQgZGVjb2RlRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2Rl
ZEZQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVy
OjpsYXN0RlBSZWdpc3RlcigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQorCisgICAgLy8gMDogZW1w
dHkgVG1wCisgICAgLy8gcG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1AgdGVtcHMuCisgICAgLy8g
bmVnYXRpdmU6IEZQUnMgYW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50IG1fdmFsdWU7Cit9Owor
CitzdHJ1Y3QgVG1wSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVG1wJiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBU
bXAmIGEsIGNvbnN0IFRtcCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVs
dEhhc2g8SlNDOjpCMzo6QWlyOjpUbXA+IHsKKyAgICB0eXBlZGVmIEpTQzo6QjM6OkFpcjo6VG1w
SGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1wPiA6IFNpbXBs
ZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OlRtcD4geyB9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBJbmxpbmVzX2gKKyNkZWZp
bmUgQWlyVG1wSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
QXJnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworaW5saW5lIFRtcDo6VG1wKGNvbnN0IEFyZyYgYXJnKQor
eworICAgICp0aGlzID0gYXJnLnRtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVG1wSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRh
dGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJW
YWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY2xh
c3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoQ29kZSYgY29kZSwgY29uc3Qg
Y2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX2NvZGUoY29k
ZSkKKyAgICAgICAgLCBtX3doZW4od2hlbikKKyAgICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJl
Zm9yZSkKKyAgICB7CisgICAgfQorCisjZGVmaW5lIFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2Fn
ZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChjb25k
aXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc
CisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZhaWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZf
UFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9uLCB0b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9
IHdoaWxlIChmYWxzZSkKKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBIYXNo
U2V0PFN0YWNrU2xvdCo+IHZhbGlkU2xvdHM7CisgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+
IHZhbGlkQmxvY2tzOworICAgICAgICBIYXNoU2V0PFNwZWNpYWwqPiB2YWxpZFNwZWNpYWxzOwor
CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAgICB2
YWxpZEJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1f
Y29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgICAgICB2YWxpZFNsb3RzLmFkZChzbG90KTsKKyAg
ICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogbV9jb2RlLnNwZWNpYWxzKCkpCisgICAgICAg
ICAgICB2YWxpZFNwZWNpYWxzLmFkZChzcGVjaWFsKTsKKworICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRl
eCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAg
ICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAg
ICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dp
dGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoK
KyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU2xvdHMuY29udGFpbnMoYXJn
LnN0YWNrU2xvdCgpKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTcGVj
aWFsOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRTcGVjaWFscy5jb250
YWlucyhhcmcuc3BlY2lhbCgpKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBWQUxJREFURShpbnN0LmlzVmFsaWRG
b3JtKCksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICBp
ZiAoaW5zdEluZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBW
QUxJREFURShpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpi
bG9jaykpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUoIWlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2Nr
KSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWxpZEJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkluICIsICpibG9jaykpOworICAgICAg
ICB9CisgICAgfQorCitwcml2YXRlOgorICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBm
YWlsKAorICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0
IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBjb25kaXRpb24sCisgICAgICAgIENTdHJpbmcg
bWVzc2FnZSkKKyAgICB7CisgICAgICAgIENTdHJpbmcgZmFpbHVyZU1lc3NhZ2U7CisgICAgICAg
IHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgICAgIG91dC5w
cmludCgiQUlSIFZBTElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQo
IiAgICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4i
KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAg
ICAgICAgaWYgKG1fd2hlbikKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBEdXJpbmcg
IiwgbV93aGVuLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0
cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7Cisg
ICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkJlZm9yZSAi
LCBtX3doZW4sICI6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAg
ICAgICAgfQorICAgICAgICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAg
ICAgZGF0YUxvZyhtX2NvZGUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOwor
ICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBm
dW5jdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAg
Q29kZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIqIG1fd2hlbjsKKyAgICBjb25zdCBjaGFyKiBt
X2R1bXBCZWZvcmU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxp
ZGF0ZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3Jl
KQoreworICAgIFZhbGlkYXRlciB2YWxpZGF0ZXIoY29kZSwgd2hlbiwgZHVtcEJlZm9yZSk7Cisg
ICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJWYWxpZGF0ZV9oCisjZGVmaW5lIEFpclZhbGlkYXRlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
Y2xhc3MgQ29kZTsKKwordm9pZCB2YWxpZGF0ZShDb2RlJiwgY29uc3QgY2hhciogd2hlbiA9IG51
bGxwdHIsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUgPSBudWxscHRyKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpclZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9v
cGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg0MiBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
CisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKworY2xhc3MgT3Bjb2RlCisgICAg
YXR0cl9yZWFkZXIgOm5hbWUsIDpzcGVjaWFsLCA6b3ZlcmxvYWRzCisgICAgYXR0cl9hY2Nlc3Nv
ciA6a2luZAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgc3BlY2lhbCkKKyAgICAgICAgQG5h
bWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gc3BlY2lhbAorICAgICAgICBAa2luZCA9IDpp
bnN0CisgICAgICAgIHVubGVzcyBzcGVjaWFsCisgICAgICAgICAgICBAb3ZlcmxvYWRzID0gW10K
KyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgbWFzbU5hbWUKKyAgICAgICAgbmFtZVsw
XS5kb3duY2FzZSArIG5hbWVbMS4uLTFdCisgICAgZW5kCitlbmQKKworY2xhc3MgQXJnCisgICAg
YXR0cl9yZWFkZXIgOnJvbGUsIDp0eXBlCisKKyAgICBkZWYgaW5pdGlhbGl6ZShyb2xlLCB0eXBl
KQorICAgICAgICBAcm9sZSA9IHJvbGUKKyAgICAgICAgQHR5cGUgPSB0eXBlCisgICAgZW5kCitl
bmQKKworY2xhc3MgT3ZlcmxvYWQKKyAgICBhdHRyX3JlYWRlciA6c2lnbmF0dXJlLCA6Zm9ybXMK
KworICAgIGRlZiBpbml0aWFsaXplKHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAgIEBzaWduYXR1
cmUgPSBzaWduYXR1cmUKKyAgICAgICAgQGZvcm1zID0gZm9ybXMKKyAgICBlbmQKK2VuZAorCitj
bGFzcyBLaW5kCisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX2FjY2Vzc29yIDpzcGVj
aWFsCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAg
ICAgICAgQHNwZWNpYWwgPSBmYWxzZQorICAgIGVuZAorCisgICAgZGVmID09KG90aGVyKQorICAg
ICAgICBpZiBvdGhlci5pc19hPyBTdHJpbmcKKyAgICAgICAgICAgIEBuYW1lID09IG90aGVyCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBuYW1lID09IG90aGVyLm5hbWUgYW5kIEBzcGVjaWFs
ID09IG90aGVyLnNwZWNpYWwKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgS2luZC5h
cmdLaW5kcyhraW5kKQorICAgICAgICBpZiBraW5kID09ICJBZGRyIgorICAgICAgICAgICAgWyJB
ZGRyIiwgIlN0YWNrIiwgIkNhbGxBcmciXQorICAgICAgICBlbHNlCisgICAgICAgICAgICBba2lu
ZF0KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgYXJnS2luZHMKKyAgICAgICAgS2lu
ZC5hcmdLaW5kcyhraW5kKQorICAgIGVuZAorZW5kCisKK2NsYXNzIEZvcm0KKyAgICBhdHRyX3Jl
YWRlciA6a2luZHMsIDphbHROYW1lCisKKyAgICBkZWYgaW5pdGlhbGl6ZShraW5kcywgYWx0TmFt
ZSkKKyAgICAgICAgQGtpbmRzID0ga2luZHMKKyAgICAgICAgQGFsdE5hbWUgPSBhbHROYW1lCisg
ICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6
bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVy
KQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxp
bmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFt
ZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJf
cmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4s
IHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3Ry
aW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5p
c19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQK
KyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBl
bmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7
b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAg
ICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjog
I3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAj
e3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYg
bGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUp
CisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIu
ZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAg
ICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAg
ICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAg
ICAgIHdoZW4gL1xBKFthLXpBLVowLTlfXSspLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2Vu
Lm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4g
L1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAg
IHdoZW4gL1xBWyw6KlwvXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2lu
Lm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAg
ICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVy
KS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAg
ICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0
CitlbmQKKworZGVmIGlzVUQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKSlc
Wi8KK2VuZAorCitkZWYgaXNHRih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKEcpfChGKSlcWi8K
K2VuZAorCitkZWYgaXNLaW5kKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwo
SW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCkpXFovCitlbmQKKworZGVm
IGlzS2V5d29yZCh0b2tlbikKKyAgICBpc1VEKHRva2VuKSBvciBpc0dGKHRva2VuKSBvciBpc0tp
bmQodG9rZW4pIG9yCisgICAgICAgIHRva2VuID09ICJzcGVjaWFsIiBvciB0b2tlbiA9PSAiYXMi
CitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoW2EtekEt
WjAtOV9dKylcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2Vy
CisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBs
ZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYg
dG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UK
KyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1l
bnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAg
ICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTog
I3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKwor
ICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tz
dHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNlCisgICAgZW5k
CisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3Ry
aW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJ
ZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBl
bmQKKworICAgIGRlZiBjb25zdW1lUm9sZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcK
KyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgcm9sZSAoVSwgRCwgb3IgVUQpIikgdW5sZXNz
IGlzVUQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAor
CisgICAgZGVmIGNvbnN1bWVUeXBlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCB0eXBlIChHIG9yIEYpIikgdW5sZXNzIGlzR0YocmVz
dWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVm
IGNvbnN1bWVLaW5kCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJz
ZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEltbTY0LCBUbXAsIEFkZHIsIEluZGV4LCBSZWxD
b25kLCBvciBSZXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBhZHZhbmNl
CisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIHJlc3Vs
dCA9IHt9CisgICAgICAgIAorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBp
ZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgaWYgdG9rZW4gPT0gInNwZWNpYWwi
CisgICAgICAgICAgICAgICAgY29uc3VtZSgic3BlY2lhbCIpCisgICAgICAgICAgICAgICAgb3Bj
b2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBwYXJzZUVycm9y
KCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIHJlc3VsdFtvcGNvZGVOYW1l
XQorCisgICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gT3Bjb2RlLm5ldyhvcGNv
ZGVOYW1lLCB0cnVlKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wY29kZU5h
bWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0W29wY29k
ZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IHJlc3VsdFtvcGNvZGVOYW1lXQor
ICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFs
IG9wY29kZSIpIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBvcGNvZGUgPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIGZhbHNlKQorICAg
ICAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUKKyAgICAgICAgICAg
ICAgICBlbmQKKworICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAgICAgICAgICAg
ICAgZm9ybXMgPSBbXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIGlzVUQo
dG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAg
ICAgcm9sZSA9IGNvbnN1bWVSb2xlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCI6
IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb25zdW1lVHlwZQorICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgPDwgQXJn
Lm5ldyhyb2xlLCB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IGVuZAorCisgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gIi8iCisgICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoIi8iKQorICAgICAgICAgICAgICAgICAgICBjYXNlIHRva2VuLnN0cmluZwor
ICAgICAgICAgICAgICAgICAgICB3aGVuICJicmFuY2giCisgICAgICAgICAgICAgICAgICAgICAg
ICBvcGNvZGUua2luZCA9IDpicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgd2hlbiAidGVybWlu
YWwiCisgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUua2luZCA9IDp0ZXJtaW5hbAorICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9y
KCJCYWQgLyBkaXJlY3RpdmUiKQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICAgICAgYWR2YW5jZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAg
aWYgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGtpbmRzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUg
PSBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGtpbmRzIDw8IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gIioiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnNlRXJyb3IoIkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5sZXNzIGtpbmRz
Wy0xXS5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRz
Wy0xXS5zcGVjaWFsID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dW1lKCIqIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gImFzIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN1bWUoImFzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
bHROYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAor
CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3cm9uZyBudW1i
ZXIgb2YgYXJndW1lbnRzIGZvciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5ndGggPT0gc2ln
bmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFjaF93aXRoX2lu
ZGV4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Iga2luZC5uYW1l
ID09ICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJl
W2luZGV4XS5yb2xlICE9ICJVIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQi
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRp
YXRlIGZvciBhIG5vbi1nZW5lcmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8
IEZvcm0ubmV3KGtpbmRzLCBhbHROYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsg
dW5sZXNzIGlzS2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlLmxlbmd0aCA9PSAwCisgICAg
ICAgICAgICAgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMAorICAgICAgICAg
ICAgICAgICAgICBmb3JtcyA8PCBGb3JtLm5ldyhbXSwgbmlsKQorICAgICAgICAgICAgICAgIGVu
ZAorCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9hZC5uZXcoc2ln
bmF0dXJlLCBmb3JtcykKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgcmVz
dWx0CisgICAgZW5kCitlbmQKKworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJz
ZXIubmV3KElPOjpyZWFkKCRmaWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVzID0gcGFyc2Vy
LnBhcnNlCisKK2RlZiB3cml0ZUgoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVu
YW1lfS5oIiwgInciKSB7CisgICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRw
LnB1dHMgIi8vIEdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5h
bWV9IC0tIGRvIG5vdCBlZGl0ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2lmbmRl
ZiBBaXIje2ZpbGVuYW1lfV9oIgorICAgICAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQWlyI3tmaWxl
bmFtZX1faCIKKworICAgICAgICB5aWVsZCBvdXRwCisgICAgICAgIAorICAgICAgICBvdXRwLnB1
dHMgIiNlbmRpZiAvLyBBaXIje2ZpbGVuYW1lfV9oIgorICAgIH0KK2VuZAorCit3cml0ZUgoIk9w
Y29kZSIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImVudW0gT3Bjb2Rl
IDogaW50MTZfdCB7IgorICAgICRvcGNvZGVzLmtleXMuc29ydC5lYWNoIHsKKyAgICAgICAgfCBv
cGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICAje29wY29kZX0sIgorICAgIH0KKyAgICBv
dXRwLnB1dHMgIn07IgorCisgICAgb3V0cC5wdXRzICJzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVt
T3Bjb2RlcyA9ICN7JG9wY29kZXMua2V5cy5zaXplfTsiCisgICAgb3V0cC5wdXRzICJ9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorICAgIAorICAgIG91dHAucHV0cyAibmFtZXNwYWNl
IFdURiB7IgorICAgIG91dHAucHV0cyAiY2xhc3MgUHJpbnRTdHJlYW07IgorICAgIG91dHAucHV0
cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpPcGNvZGUp
OyIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKworIyBGcm9tIGhlcmUg
b24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIHNpbmNlIHdl
J3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKworZGVmIG1hdGNoRm9y
bXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIs
IGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAorCisgICAgaWYgZmls
dGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIGlmIGNvbHVtbkluZGV4
ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVu
Z3RoID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAgICAgIHJldHVybgorICAg
IGVuZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFjaCB7CisgICAgICAgIHwg
Zm9ybSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbkluZGV4XS5uYW1lCisgICAg
ICAgIGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdIDw8IGZvcm0KKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zvcm1dCisgICAgICAgIGVu
ZAorICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91cHMubGVuZ3RoID09IDEK
KyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4ICsgMSwg
Y29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4KKyAgICBlbmQK
KworICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltjb2x1bW5JbmRleF19KSB7
IgorICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwgdmFsdWUgfAorICAgICAg
ICBvdXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICAg
ICAgS2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAgICAgfCBhcmdLaW5kIHwKKyAg
ICAgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06IgorICAgICAgICB9Cisg
ICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1bW5JbmRleCArIDEsIGNv
bHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0g
IkltbTY0IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWQo
b3V0cCwgc3BlZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPm9wY29k
ZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAg
ICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgaWYgb3Bjb2Rl
LnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9
IDEpIG9yIHNwZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7
aW5zdH0tPmFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAg
IG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8Cisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0
aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUs
IG92ZXJsb2FkCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVy
bG9hZFN3aXRjaAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
IH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
IG91dHAucHV0cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRw
LCBzcGVlZCwgaW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkg
eworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lh
bAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAorICAgICAgICBlbHNlCisgICAg
ICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGNvbHVtbklu
ZGV4IHwKKyAgICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sje2NvbHVtbkluZGV4fV0ua2lu
ZCgpIgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0K
KyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBmb3JtIHwK
KyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBvdmVybG9hZC5mb3Jtcywg
MCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBlbmQKKyAgICB9Citl
bmQKKword3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0
cyAiI2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWly
U3BlY2lhbC5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7IgorICAgIAorICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wgb3Bn
ZW5IaWRkZW5UcnV0aCgpIHsgcmV0dXJuIHRydWU7IH0iCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiIKKyAgICBvdXRwLnB1dHMgImlubGluZSBUKiBvcGdlbkhpZGRlblB0cklk
ZW50aXR5KFQqIHBvaW50ZXIpIHsgcmV0dXJuIHBvaW50ZXI7IH0iCisgICAgb3V0cC5wdXRzICIj
ZGVmaW5lIE9QR0VOX1JFVFVSTih2YWx1ZSkgZG8ge1xcIgorICAgIG91dHAucHV0cyAiICAgIGlm
IChvcGdlbkhpZGRlblRydXRoKCkpXFwiCisgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVybiB2
YWx1ZTtcXCIKKyAgICBvdXRwLnB1dHMgIn0gd2hpbGUgKGZhbHNlKSIKKworICAgIG91dHAucHV0
cyAidGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIEluc3Q6
OmZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5wdXRzICJ7Igor
ICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBv
cGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAg
IG91dHAucHV0cyAiZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7IC8vIFRoaXMg
aXMgYmFzaWNhbGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBtb2RlbCBTcGVjaWFs
IGFzIGFuIGltbWVkaWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFyZ3NbMF0uc3BlY2lh
bCgpLT5mb3JFYWNoQXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxiYWNrPihmdW5j
dG9yKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAorICAgICAgICAg
ICAgICAgIHJvbGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCisgICAgICAg
ICAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCisgICAg
ICAgICAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCisg
ICAgICAgICAgICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNl
RGVmIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2FyZy50
eXBlfVApOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0
cyAifSIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPiIK
KyAgICBvdXRwLnB1dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9ybShPcGNvZGUgb3Bj
b2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0
cC5wdXRzICJBcmc6OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyldID0geyBhcmd1bWVu
dHMuLi4gfTsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rl
cy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJj
YXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKHNpemVvZi4u
LihBcmd1bWVudHMpKSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAg
ICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxl
bmd0aH06IgorICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeyB8IGNvbHVtbklu
ZGV4IHwgIm9wZ2VuSGlkZGVuUHRySWRlbnRpdHkoa2luZHMpWyN7Y29sdW1uSW5kZXh9XSIgfQor
ICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICAgICAg
Y2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAg
ICAgICAgICAgICAgc3BlY2lhbCA9IChub3QgZm9ybS5raW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBr
aW5kLnNwZWNpYWwgfSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRV
Uk4oI3tzcGVjaWFsfSk7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRj
aEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0
ZXIsIGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAg
ICAgICAgfQorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJu
IGZhbHNlOyAiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9v
bCBpc1Rlcm1pbmFsKE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRw
LnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAg
ICAgICAgfCBvcGNvZGUgfAorICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6dGVybWluYWwgb3Ig
b3Bjb2RlLmtpbmQgPT0gOmJyYW5jaAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bj
b2RlLm5hbWV9OiIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIHRy
dWU7IgorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFs
c2U7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0
cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCit3cml0ZUgoIk9w
Y29kZUdlbmVyYXRlZCIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUg
XCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcInd0Zi9Qcmlu
dFN0cmVhbS5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5w
dXRzICJ1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyOyIKKyAgICBvdXRwLnB1dHMgInZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRw
LnB1dHMgInsiCisgICAgb3V0cC5wdXRzICIgICAgc3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9w
Y29kZXMua2V5cy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMg
IiAgICBjYXNlICN7b3Bjb2RlfToiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICBvdXQucHJp
bnQoXCIje29wY29kZX1cIik7IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuOyIK
KyAgICB9CisgICAgb3V0cC5wdXRzICIgICAgfSIKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRz
ICJ9IC8vIG5hbWVzcGFjZSBXVEYiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiYm9vbCBJbnN0Ojpp
c1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZv
cm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZv
cm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJp
ZiAoYXJncy5zaXplKCkgPCAxKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNl
OyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWzBdLmlzU3BlY2lhbCgpKSIKKyAg
ICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKCp0aGlzKSk7IgorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uID0gZmFsc2UKKyAgICAg
ICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMgeworICAgICAgICAgICAgICAg
IHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5k
ZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4
XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZvcm0ua2luZHNbaW5kZXhdCisgICAgICAg
ICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNwZWNpYWwKKyAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBmb3JtIG1h
dGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJvbGUsIHNpbmNlCisgICAgICAg
ICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8g
dmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAgICAj
IHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAuCisgICAgICAgICAgICAgICAg
aWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZHNNb3JlVmFsaWRhdGlvbgorICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFpcyN7b3Bjb2RlLm5hbWV9VmFsaWQoKnRoaXMpKSIK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisg
ICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0
cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0c1N0YWNrKHVuc2ln
bmVkIGFyZ0luZGV4KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2gg
KG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2Rl
IHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKworICAgICAgICBp
ZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ0luZGV4KSIK
KyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5hZG1pdHNTdGFjaygqdGhpcywg
YXJnSW5kZXgpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgU3dpdGNoIG9uIHRoZSBh
cmdJbmRleC4KKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdJbmRleCkgeyIKKwor
ICAgICAgICAgICAgbnVtQXJncyA9IG9wY29kZS5vdmVybG9hZHMubWFwIHsKKyAgICAgICAgICAg
ICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVu
Z3RoCisgICAgICAgICAgICB9Lm1heAorICAgICAgICAgICAgCisgICAgICAgICAgICBudW1Bcmdz
LnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGFyZ0luZGV4IHwKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImNhc2UgI3thcmdJbmRleH06IgorCisgICAgICAgICAgICAgICAgIyBDaGVjayBp
ZiBhbGwgb2YgdGhlIGZvcm1zIG9mIGFsbCBvZiB0aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywgb3Ig
ZG9uJ3QsIGFkbWl0IGFuIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAjIGF0IHRoaXMgaW5kZXgu
IFdlIGV4cGVjdCB0aGlzIHRvIGJlIGEgdmVyeSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgICAg
ICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAg
b3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8
CisgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAg
ICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2lu
ZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVll
cyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtTm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIE5v
dGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgdGVzdCBudW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3ZSBl
bmQgdXAgd2l0aCBubyBmb3Jtcywgd2Ugd2FudAorICAgICAgICAgICAgICAgICMgdG8gc2F5IHRo
YXQgQWRkcmVzcyBpcyBpbmFkbWlzc2libGUuCisgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09
IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIK
KyAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICMgTm93IGRvIHRoZSBmdWxsIHRlc3QuCisKKyAgICAgICAgICAgICAg
ICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKQor
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdzLnNpemUoKSkgeyIg
aWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9h
ZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKworICAgICAg
ICAgICAgICAgICAgICAgICAgIyBBZ2FpbiwgY2hlY2sgaWYgYWxsIG9mIHRoZW0gZG8gd2hhdCB3
ZSB3YW50LgorICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5m
b3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
Tm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAg
ICAgICAgICAgICAgICAgICAgICAgIyBEb24ndCBlbWl0IGFueXRoaW5nLCBqdXN0IGRyb3AgdG8g
ZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1
cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3Zlcmxv
YWRTd2l0Y2gKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBob3cgd2Ug
dGVzdCB0aGUgaHlwb3RoZXNpcyB0aGF0IGNoYW5naW5nIHRoaXMgYXJndW1lbnQgdG8gYW4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZHJlc3MgeWllbGRzIGEgdmFsaWQgZm9ybS4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGNvbHVtbkluZGV4ID09IGFyZ0luZGV4CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJnOjpBZGRyIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi
YXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgZm9ybXMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAw
CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMuZWFjaCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09
IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRHJvcCBkb3duLCBlbWl0
IG5vIGNvZGUsIHNpbmNlIHdlIGNhbm5vdCBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBLZWVwIGdvaW5nLgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3Jt
cyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBj
YWxsYmFjaykKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7
IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3
aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0cC5wdXRz
ICJkZWZhdWx0OiIKKyAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAg
b3V0cC5wdXRzICJ9IgorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IjsKKyAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7
IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1w
IEluc3Q6OmdlbmVyYXRlKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29u
dGV4dCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKGpp
dCk7IgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKGNvbnRleHQpOyIKKyAgICBvdXRwLnB1
dHMgIkNDYWxsSGVscGVyczo6SnVtcCByZXN1bHQ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9y
bShvdXRwLCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9y
bSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9Q
R0VOX1JFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+Z2VuZXJhdGUoKnRoaXMsIGppdCwgY29udGV4
dCkpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgZm9ybS5hbHROYW1lCisgICAgICAg
ICAgICAgICAgbWV0aG9kTmFtZSA9IGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBvcGNvZGUubWFzbU5hbWUKKyAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgaWYgb3Bjb2RlLmtpbmQgPT0gOmJyYW5jaAorICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgInJlc3VsdCA9ICIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0
cC5wcmludCAiaml0LiN7bWV0aG9kTmFtZX0oIgorCisgICAgICAgICAgICBmb3JtLmtpbmRzLmVh
Y2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAg
ICAgICAgICAgaWYgaW5kZXggIT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICIs
ICIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBjYXNlIGtpbmQubmFtZQor
ICAgICAgICAgICAgICAgIHdoZW4gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgaWYgb3Zlcmxv
YWQuc2lnbmF0dXJlW2luZGV4XS50eXBlID09ICJHIgorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZ3ByKCkiCisgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmZw
cigpIgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB3aGVuICJJbW0i
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3Rl
ZEltbTMyKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiSW1tNjQiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTY0KCkiCisgICAgICAg
ICAgICAgICAgd2hlbiAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJn
c1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQmFzZUluZGV4
KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCisgICAg
ICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmlu
dCAiYXJnc1sje2luZGV4fV0uYXNSZXN1bHRDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0cC5wdXRzICIpOyIKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHJlc3VsdCk7IgorICAgICAgICBlbmQKKyAgICB9
CisgICAgb3V0cC5wdXRzICJSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRw
LnB1dHMgInJldHVybiByZXN1bHQ7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0
cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTE1MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYgQEAgcHVibGljOgogICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIAogICAgIGJv
b2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IGludmFsaWQoKTsgfQotICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogCiAgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gZGVsZXRlZCgp
OyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFsbFJlZ3NJdGVyYWJsZSB7CisgICAgcHVi
bGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3IoUmVn
IHJlZykKKyAgICAgICAgICAgICAgICA6IG1fcmVnSW5kZXgocmVnLmluZGV4KCkpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25z
dCB7IHJldHVybiBSZWc6OmZyb21JbmRleChtX3JlZ0luZGV4KTsgfQorCisgICAgICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9y
ZWdJbmRleCA9IFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpLm5leHQoKS5pbmRleCgpOworICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9yZWdJbmRleCA9PSBvdGhlci5tX3JlZ0luZGV4
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgor
ICAgICAgICAgICAgdW5zaWduZWQgbV9yZWdJbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBp
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0K
KyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9
CisgICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgeyByZXR1cm4gQWxs
UmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZhbGlk
KCkgeyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyQXRPZmZzZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxNTM1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRP
ZmZzZXRMaQogICAgIGlmIChvZmZzZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkKICAg
ICAgICAgb2Zmc2V0ID0gLShzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0ZXJz
KSAqIHNpemVvZih2b2lkKikpOwogCi0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyBy
ZWcgPD0gUmVnOjpsYXN0KCk7cmVnID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJlZyA9
IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAg
ICAgICAgIGlmIChyZWdpc3RlclNldC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5kKFJl
Z2lzdGVyQXRPZmZzZXQocmVnLCBvZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBzaXpl
b2Yodm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zm
c2V0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJBdE9mZnNldExpc3QuaAkocmV2aXNpb24gMTkxNTM1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2
Niw5IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zmc2V0KiBmaW5kKFJlZykgY29uc3Q7CiAg
ICAgdW5zaWduZWQgaW5kZXhPZihSZWcpIGNvbnN0OyAvLyBSZXR1cm5zIFVJTlRfTUFYIGlmIG5v
dCBmb3VuZC4KIAorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVycy5iZWdpbigpOyB9CisgICAgVmVjdG9y
PFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBt
X3JlZ2lzdGVycy5lbmQoKTsgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zm
c2V0PiBtX3JlZ2lzdGVyczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCShyZXZpc2lvbiAxOTE1MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTMgQEAgcHVibGlj
OgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNv
bnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWduZWQg
aGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0
Qml0cygpKQorICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAg
IH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsg
fQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE5MTUzNSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTAtMjQgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KKworICAgICAgICBDcmVhdGUgYSBzdXBlciByb3VnaCBwcm90b3R5cGUg
b2YgQjMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDI4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL01hdGhFeHRyYXMu
aDoKKyAgICAgICAgKFdURjo6cmFuZ2VzT3ZlcmxhcCk6IE5pY2UgdXRpbGl0eSBmb3IgY2hlY2tp
bmcgaWYgcmFuZ2VzIG92ZXJsYXAuCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBhIEVO
QUJMRShCM19KSVQpIGZlYXR1cmUgZmxhZy4KKyAgICAgICAgKiB3dGYvU2NvcGVkTGFtYmRhLmg6
IEFkZGVkLiBUaGlzIGFsbG93cyB1cyB0byBkbyB6ZXJvLWFsbG9jYXRpb24sIHplcm8tY29weSBl
eHRlcm4gbGFtYmRhcy4KKyAgICAgICAgKFdURjo6c2NvcGVkTGFtYmRhKToKKyAgICAgICAgKiB3
dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpjcmVhdGVTaGFyZWRUYXNrKToKKwogMjAx
NS0xMC0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZhY3Rv
ciBvdXQgdGhlIGdyYXBoIG5vZGUgd29ya2xpc3RzIGZyb20gREZHIGludG8gV1RGCkluZGV4OiBT
b3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTUzNSkK
KysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRM
b2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0
NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJMEZFQjNEQ0YxQkI1
RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNr
LmggKi87IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0
ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICovOyB9
OworCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCMDFCREFDRDM5MDA4
MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJEODI1MzEwMDgwRkY3
NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmts
aXN0LmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNTFC
MjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkwRkY4NjA5NTFCQ0NCRDc0
MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVy
Q29tcGFyaXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBGRTQ0NzlCMUI3QUFB
MDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0RDRTFCQjVE
Njg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzREQw
MUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExh
bWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRMYW1iZGEuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8q
IEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdy
YXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1
MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
ODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5NDE2RUFBRkY4MDAy
NEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVBQjA0MTAwMjRFMTQ2
IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFBRkY4MDAyNEUxNDYg
LyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAv
KiBTY29wZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0MTIzRkYgLyogU2Vn
bWVudGVkVmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEyM0ZGIC8qIFNlbnRp
bmVsTGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQxMjNGRiAvKiBTSEEx
LmNwcCAqLywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFk
U2FmZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1MTUxQTgyNUIwMDQx
MjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QjYxQjIy
RDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNl
L1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhF
eHRyYXMuaAkocmV2aXNpb24gMTkxNTM1KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MTksNiArNDE5LDE2IEBAIGlubGluZSBUIGxlZnRTaGlmdFdp
dGhTYXR1cmF0aW9uKFQgdmFsdWUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgcmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQgbGVmdE1h
eCwgVCByaWdodE1pbiwgVCByaWdodE1heCkKK3sKKyAgICBpZiAobGVmdE1pbiA8PSByaWdodE1p
biAmJiBsZWZ0TWF4ID49IHJpZ2h0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAo
cmlnaHRNaW4gPD0gbGVmdE1pbiAmJiByaWdodE1heCA+PSBsZWZ0TWluKQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAj
ZW5kaWYgLy8gI2lmbmRlZiBXVEZfTWF0aEV4dHJhc19oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlz
aW9uIDE5MTUzNSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkK
QEAgLTc3NiwxMiArNzc2LDIwIEBACiAjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJVCAxCiAj
ZW5kaWYKIAorLyogVGhlIEIzIGNvbXBpbGVyIGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNrZW5kIHRo
YXQgaXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQuIFdlIHdpbGwga2VlcCBpdCBidWlsZGluZworICAg
b24gRGFyd2luL3g4Ni02NCBmb3Igbm93LCB0aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2VwdCBmb3Ig
dGVzdHMuICovCisjaWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQorI2RlZmluZSBFTkFCTEVf
QjNfSklUIDEKKyNlbmRpZgorCiAvKiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFpbGFi
bGUsIHRoZW4gZGlzYWJsZSB1cHBlciB0aWVycyBhcyB3ZWxsOiAqLwogI2lmICFFTkFCTEUoSklU
KQotI3VuZGVmIEVOQUJMRV9ERkdfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVk
ZWZpbmUgaXQuICovCi0jdW5kZWYgRU5BQkxFX0ZUTF9KSVQgICAgICAvKiBVbmRlZiBzbyB0aGF0
IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI3VuZGVmIEVO
QUJMRV9GVExfSklUCisjdW5kZWYgRU5BQkxFX0IzX0pJVAogI2RlZmluZSBFTkFCTEVfREZHX0pJ
VCAwCiAjZGVmaW5lIEVOQUJMRV9GVExfSklUIDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJVCAwCiAj
ZW5kaWYKIAogLyogQ291bnRzIHVzZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxpbmcg
Y291bnRlcnMuIEJlIHN1cmUgdG8gYWxzbwpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFt
YmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKwor
bmFtZXNwYWNlIFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2ll
bnRseSBwYXNzIGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcK
Ky8vIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hv
dWxkIGJlIGRlY2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxN
eVRoaW5ncyogKGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoK
Ky8vCisvLyB2b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsm
XSAoaW50IHgsIFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3Rl
IHRoYXQgdGhpcyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBs
YW1iZGEgaXMgb25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVu
Y2UgdGhlIG5hbWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5
cGU+IGNsYXNzIFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5
cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAo
QXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlw
ZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQq
IGFyZyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmco
YXJnKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFyZ3Vt
ZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9p
bXBsKG1fYXJnLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywgQXJn
dW1lbnRUeXBlcyYmLi4uKTsKKyAgICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRhRnVu
Y3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJlc3Vs
dFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8
UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBQYXNzZWRGdW5jdG9yPgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2VkRnVu
Y3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3Vt
ZW50VHlwZXMuLi4pPihpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9yKHN0
ZDo6Zm9yd2FyZDxQYXNzZWRGdW5jdG9yPihmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitwcml2
YXRlOgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwg
QXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisgICAg
ICAgICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAg
fQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9u
VHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJl
dHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3RkOjpmb3J3
YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5n
IFdURjo6U2NvcGVkTGFtYmRhOwordXNpbmcgV1RGOjpzY29wZWRMYW1iZGE7CisKKyNlbmRpZiAv
LyBTY29wZWRMYW1iZGFfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTE1MzUp
CisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYg
Kzc5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0b3Io
RnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9y
KSkKKyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50
VHlwZXMmJi4uLiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwxMSBA
QCBSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihm
dW5jdG9yKSk7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1
bmN0b3I+CitSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNrKEZ1
bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tG
dW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263993</attachid>
            <date>2015-10-24 18:07:08 -0700</date>
            <delta_ts>2015-10-24 18:16:12 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>610728</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTM1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MyBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6Okxvd2VyaW5nU2VsZWN0b3I6Okxvd2VyaW5nU2VsZWN0b3Ip
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjph
Y2NlcHRSb290KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdT
ZWxlY3Rvcjo6YWNjZXB0Um9vdExhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHNMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6
YWNjZXB0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dl
cmluZ1NlbGVjdG9yOjphY2NlcHRPcGVyYW5kc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlMb2FkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5QWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmVBZGRM
b2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rv
cjo6dHJ5U3RvcmVBbmRMb2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlDb25zdDMyKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6QjM6Omxvd2VyVG9BaXIpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQuCisgICAg
ICAgICogYjMvQjNNZW1vcnlWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6TWVt
b3J5VmFsdWU6On5NZW1vcnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6
ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpNZW1v
cnlWYWx1ZTo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpNZW1vcnlW
YWx1ZSk6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNPcGNvZGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjppc0NoZWNrTWF0aCk6CisgICAgICAgICogYjMvQjNPcmlnaW4uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZHVtcCk6CisgICAgICAgICogYjMvQjNPcmln
aW4uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46Ok9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpQYXRj
aHBvaW50U3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6flBh
dGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpm
b3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlk
KToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQYXRjaHBv
aW50VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6
flBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIz
OjpQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgICogYjMvQjNQaGFz
ZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQaGFzZVNjb3BlOjpQaGFzZVNj
b3BlKToKKyAgICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6On5QaGFzZVNjb3BlKToKKyAgICAg
ICAgKiBiMy9CM1BoYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQcm9jZWR1cmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJvY2VkdXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6flByb2NlZHVyZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcik6CisgICAgICAgICog
YjMvQjNQcm9jZWR1cmUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNp
emUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphdCk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpp
dGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6OmZpbmROZXh0KToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjpWYWx1ZXNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRl
cmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6VmFsdWVzQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OlZhbHVlc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OnZhbHVlcyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGQpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90
S2luZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBiMy9CM1N0YWNrU2xvdEtpbmQuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNTdGFja1Nsb3RW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6On5TdGFj
a1Nsb3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90VmFsdWUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpTdGFja1Nsb3RWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Ns
b3RWYWx1ZTo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Omtp
bmQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Om9mZnNldEZyb21GUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpTdGFja1Nsb3RWYWx1ZSk6CisgICAgICAgICog
YjMvQjNTdGFja21hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmR1
bXApOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcDo6U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6b3BhcXVlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlN0YWNrbWFwOjpzZXRPcGFxdWVJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFj
a21hcDo6b3BhcXVlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmNvbnN0cmFp
bik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xvYmJlcik6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcDo6Y2xvYmJlcmVkKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpz
ZXRHZW5lcmF0b3IpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwpOgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpTdWNjZXNzb3JDb2xsZWN0
aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OnNpemUpOgorICAg
ICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpT
dWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0
b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpiZWdpbik6Cisg
ICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAqIGIz
L0IzU3dpdGNoQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6
ZHVtcCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hD
YXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6OmNhc2VW
YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0YXJnZXQpOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoQ2FzZTo6dGFyZ2V0QmxvY2spOgorICAgICAgICAqIGIzL0IzU3dpdGNo
VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjp+U3dpdGNo
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmFwcGVuZENhc2UpOgorICAgICAgICAoSlNDOjpC
Mzo6U3dpdGNoVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjpTd2l0Y2hWYWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6
OlN3aXRjaFZhbHVlOjpudW1DYXNlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZh
bHVlOjpjYXNlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmZhbGxUaHJvdWdoKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRj
aFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoVmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6QjM6OlN3aXRjaFZhbHVlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1
ZTo6ZW5kKToKKyAgICAgICAgKiBiMy9CM1R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNUeXBlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6aXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6aXNGbG9hdCk6CisgICAgICAgIChK
U0M6OkIzOjpwb2ludGVyVHlwZSk6CisgICAgICAgICogYjMvQjNVcHNpbG9uVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M1Vwc2lsb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6
YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OnBoaSk6CisgICAgICAg
IChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OlVwc2lsb25WYWx1ZSk6CisgICAgICAgICogYjMvQjNV
c2VDb3VudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6VXNlQ291
bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6flVzZUNvdW50cyk6CisgICAgICAg
ICogYjMvQjNVc2VDb3VudHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpVc2VDb3VudHM6
Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OnZhbGlkYXRlKToKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjp+VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRp
dHkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoTm9wKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkZWVwRHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZTo6dHlwZUZvcik6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcmlnaW4pOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoaWxkKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphaXJUeXBl
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpjaGlsZHJlbik6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6RGVlcFZhbHVlRHVtcDo6RGVlcFZh
bHVlRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlSW5saW5lcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphcyk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50MzIpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
Ojphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmFzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0ludCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjphc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3RhY2ttYXApOgor
ICAgICAgICAqIGIzL0IzVmFsdWVSZXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlUmVwOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvQjNWYWx1ZVJlcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpWYWx1
ZVJlcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpzdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6c3RhY2tB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6Y29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6OmNvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjpraW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvZmZzZXRGcm9tRlApOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9mZnNldEZyb21TUCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZVJlcDo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmRvdWJsZVZhbHVl
KToKKyAgICAgICAgKiBiMy9haXI6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJBcmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpk
dW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0RlZik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjphZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpzdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Y2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNWYWxpZFNjYWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpsb2dT
Y2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aW5kZXgpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OnJlbENvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnJl
c0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnNwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmtpbmQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ltbSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbW02NCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1N0YWNr
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0NhbGxBcmcpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
UmVsQ29uZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXNDb25kKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnRtcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OnBvaW50ZXJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YmFzZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c2NhbGUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlBU
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc1R5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omdwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZwcik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Z3BUbXBJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnBUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpdGhPZmZzZXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjphc1RydXN0ZWRJbW0zMik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVz
dGVkSW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbVB0cik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjphc0Jhc2VJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
YXNSZWxhdGlvbmFsQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1Jl
c3VsdENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpC
YXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQmFzaWNCbG9jay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Js
b2NrOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6bnVt
U3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVl
cEJhc2ljQmxvY2tEdW1wOjpEZWVwQmFzaWNCbG9ja0R1bXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpk
ZWVwRHVtcCk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2Fs
bFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
Q2FsbFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNw
ZWNpYWw6OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpk
ZWVwRHVtcEltcGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaDogQWRkZWQu
CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6Q29kZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6On5Db2RlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphZGRTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjphZGRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y0NhbGxTcGVjaWFs
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OmZpbmROZXh0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZpbmRO
ZXh0QmxvY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpudW1UbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbEFyZ0FyZWFTaXpl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVxdWVzdENhbGxBcmdBcmVhU2l6ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OnNldEZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpv
cGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6Q29kZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246OlN0YWNrU2xvdHNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNr
U2xvdHNDb2xsZWN0aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
dGFja1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjpTcGVjaWFsc0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3Bl
Y2lhbHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29k
ZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciop
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzcGVjaWFscyk6CisgICAgICAgICogYjMvYWlyL0FpckZy
ZXF1ZW50ZWRCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIz
L2Fpci9BaXJHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGVk
LmNwcDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Okluc2VydGlvblNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6Y29kZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc2VydGlvblNldDo6YXBwZW5kSW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0LmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmR1bXApOgorICAgICAgICAqIGIz
L2Fpci9BaXJJbnN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpJbnN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0Ojpmb3JFYWNoVG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8VG1wPjo6Zm9yRWFjaCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8QXJnPjo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc3Q6OmZvckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpo
YXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6ZXh0cmFDbG9iYmVyZWRS
ZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzU2hpZnRWYWxpZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmlzTHNoaWZ0MzJWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6bGl2ZUF0SGVhZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpsaXZlQXRUYWlsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxDYWxjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6bGl2ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVu
ZXNzOjpMb2NhbENhbGM6OnRha2VMaXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5l
c3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJQaGFzZVNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdwcnNJblByaW9yaXR5
T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpmcHJzSW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMv
YWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPjo6aW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+Ojpp
blByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZWdzSW5Qcmlvcml0eU9y
ZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3BlY2lhbDo6flNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpuYW1l
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlNwZWNpYWw6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFNwZWNpYWxEdW1wOjpEZWVw
U3BlY2lhbER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OmR1
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAgICogYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpz
cGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0
YWNrU2xvdDo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OlN0
YWNrU2xvdCk6CisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpieXRlU2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlN0YWNrU2xvdDo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xv
dDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6dmFsdWUpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTdGFja1Nsb3Q6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkRlZXBTdGFja1Nsb3REdW1wOjpEZWVwU3RhY2tTbG90RHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkRlZXBTdGFja1Nsb3REdW1wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6Z3BUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6ZnBUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3Ig
Ym9vbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6aXNGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUFIp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRlBSKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6Z3ByKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzVG1wSW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmdwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpUbXA6OmZwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OnRtcElu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0FsaXZlKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzaCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmVuY29kZUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUZQUik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlRtcDo6ZW5jb2RlR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVu
Y29kZUZQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNFbmNvZGVkRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlBUbXApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZGVjb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZGVjb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXBIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXBJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgICogYjMvYWlyL0FpclZh
bGlkYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnZhbGlkYXRlKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmI6IEFkZGVkLgorICAgICAgICAqIGIzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYjogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpjb21waWxlQW5kUnVuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3Q0Mik6
CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogaml0
L1JlZy5oOgorICAgICAgICAoSlNDOjpSZWc6OmluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnOjpp
c1NldCk6CisgICAgICAgIChKU0M6OlJlZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6
OlJlZzo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6UmVnOjpBbGxS
ZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpSZWc6OkFs
bFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpSZWc6
OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpS
ZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6UmVnOjphbGwpOgorICAgICAgICAoSlND
OjpSZWc6OmludmFsaWQpOgorICAgICAgICAoSlNDOjpSZWc6Om9wZXJhdG9yISk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0KToKKyAgICAgICAgKiBq
aXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmVuZCk6
CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpzZXRBbnkpOgorCiAyMDE1LTEwLTIzICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBs
ZS5jb20+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogUmVtb3ZlIHVudXNlZCBTY3JvbGxMYXll
ciBUaW1lbGluZSBFdmVudFR5cGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCShyZXZpc2lvbiAxOTE1MzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNzIsMTAgKzcyLDE4IEBAIGFs
bCA6IFwKICAgICBCeXRlY29kZXMuaCBcCiAgICAgSW5pdEJ5dGVjb2Rlcy5hc20gXAogICAgIEpT
Q0J1aWx0aW5zLmggXAorICAgIEIzTG93ZXJpbmdNYXRjaGVyLmggXAorICAgIEIzQWRkcmVzc01h
dGNoZXIuaCBcCisgICAgQjNDb21wYXJpc29uTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBc
CisgICAgQWlyT3Bjb2RlLmNwcCBcCisgICAgQWlyT3Bjb2RlVXRpbHMuaCBcCisgICAgQWlyT3Bj
b2RlVXRpbHMuY3BwIFwKICMKIAogUFlUSE9OID0gcHl0aG9uCiBQRVJMID0gcGVybAorUlVCWSA9
IHJ1YnkKIAogSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIgPSAkKEphdmFTY3JpcHRDb3JlKS9T
Y3JpcHRzCiAKQEAgLTI1MiwzICsyNjAsMTkgQEAgYWxsIDogSlNSZXBsYXlJbnB1dHMuaAogCiBK
U1JlcGxheUlucHV0cy5oIDogJChJTlBVVF9HRU5FUkFUT1JfU1BFQ0lGSUNBVElPTlMpICQoSU5Q
VVRfR0VORVJBVE9SX1NDUklQVFMpCiAJJChQWVRIT04pICQoSmF2YVNjcmlwdENvcmUpL3JlcGxh
eS9zY3JpcHRzL0NvZGVHZW5lcmF0b3JSZXBsYXlJbnB1dHMucHkgLS1vdXRwdXREaXIgLiAtLWZy
YW1ld29yayBKYXZhU2NyaXB0Q29yZSAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykK
KworQjNMb3dlcmluZ01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0
dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBh
dHRlcm5zCisJJChSVUJZKSAkXiAKK0IzQWRkcmVzc01hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29y
ZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0Iz
QWRkcmVzc01hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReCitCM0NvbXBhcmlzb25NYXRjaGVy
Lmg6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEph
dmFTY3JpcHRDb3JlKS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAk
XgorCitBaXJPcGNvZGUuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0
b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZ
KSAkXgorQWlyT3Bjb2RlLmNwcDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5l
cmF0b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChS
VUJZKSAkXgorQWlyT3Bjb2RlVXRpbHMuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29k
ZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVz
CisJJChSVUJZKSAkXgorQWlyT3Bjb2RlVXRpbHMuY3BwOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMKKwkkKFJVQlkpICReCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTkxNTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcg
QEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQkw
RkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1
RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1
RDZCMkE1MTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1
RDZCMkE1NTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKQEAgLTY4
NSw2ICs2ODYsMTIxIEBACiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2Rl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEw
QTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQx
NzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxl
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVC
M0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovOyB9OworCQkwRkVD
ODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovOyB9OworCQkwRkVDODRGRjFCREFDREFD
MDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1
bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi87IH07CisJ
CTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxp
bmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tV
dGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi87IH07CisJCTBG
RUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5j
cHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTA3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hl
Y2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNr
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1
MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi87IH07CisJCTBGRUM4NTBCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0
YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11
dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLzsgfTsKKwkJ
MEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTBFMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVl
LmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
NTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUx
MDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUu
Y3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZh
bHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi87IH07CisJCTBG
RUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDOTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxNDFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5o
ICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
QjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi87IH07CisJCTBGRUM4
NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQzFCREFDREFDMDA4MEZGNzQg
LyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9OworCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQg
LyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9j
ay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRTFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTE5MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5o
ICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi87
IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMTFCREFDREFDMDA4
MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9OworCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQg
LyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLzsgfTsKKwkJ
MEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMzFCREFDREFDMDA4MEZG
NzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsKKwkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovOyB9
OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENTFCREFDREFD
MDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTIwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1
ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLzsgfTsK
KwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBGRUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi87IH07CisJCTBGRUM4NTI1
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3Bw
ICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERF
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovOyB9OworCQkwRkVDODUy
OTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQ
aGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi87IH07CisJCTBG
RUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMTFCREFDREFDMDA4MEZGNzQg
LyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkwRkVDODUyQzFCREFDREFDMDA4MEZGNzQgLyog
QjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovOyB9OworCQkw
RkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMzFCREFDREFDMDA4
MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTJFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNw
cCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU1MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87IH07CisJCTBGRUM4NTMwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21h
cFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUzMTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovOyB9
OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovOyB9OworCQkwRkVDODUzMzFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi87IH07CisJCTBGRUM4NTM2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsKKwkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovOyB9OworCQkwRkVDODUzOTFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1
ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovOyB9OworCQkwRkVDODUzQjFC
REFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3Bw
ICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMjFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICov
OyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovOyB9OworCQkwRkVDODUzRjFCREFDREFD
MDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRz
LmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKKwkJMEZFQzg1NDExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUu
Y3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1NDMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovOyB9
OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLzsgfTsKKwkJ
MEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZF
Qzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovOyB9OworCQkwRkVDODU2RTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRl
U3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzAxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovOyB9OworCQkw
RkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QzFCREFDREM3MDA4MEZG
NzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICov
OyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRFMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODU3NDFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWly
Q0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmgg
Ki87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2su
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUy
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1
NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJH
ZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi87IH07CisJCTBGRUM4
NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTUxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi87IH07CisJCTBGRUM4NTdCMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9OworCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0
aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwICovOyB9Owor
CQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1OTFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBGRUM4NTdGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLzsgfTsK
KwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggKi87IH07CisJCTBG
RUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQ
aGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLzsgfTsK
KwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJl
Z2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5Lmgg
Ki87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYyMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODgxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi87
IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi87IH07CisJCTBGRUM4
NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsgfTsKKwkJMEZFQzg1OEIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNw
cCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjcxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovOyB9OworCQkwRkVDODU4RDFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovOyB9
OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2OTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovOyB9OworCQkwRkVD
ODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZF
Qzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQg
LyogQWlyR2VuZXJhdGVkLmNwcCAqLzsgfTsKKwkJMEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJh
bWV3b3JrICovOyB9OworCQkwRkVDODVBNDFCREI1Q0YxMDA4MEZGNzQgLyogSmF2YVNjcmlwdENv
cmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29y
ayAqLzsgfTsKKwkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVBRTFCREI1RDVF
MDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0
YW50SG9pc3RpbmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMgLyog
U2V0dXBWYXJhcmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODIy
LDYgKzE5MzgsMTMgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZDRUZBQjUxODA1RDYx
NjAwNDcyQ0U0OwogCQkJcmVtb3RlSW5mbyA9IGxsdm1Gb3JKU0M7CiAJCX07CisJCTBGRUM4NUIw
MUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2Eg
PSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZF
ODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOwor
CQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQ7CisJCQly
ZW1vdGVJbmZvID0gdGVzdGIzOworCQl9OwogCQkwRkY5MjJEMjE0RjQ2QjJGMDA0MUEyNEUgLyog
UEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVBy
b3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFBy
b2plY3Qgb2JqZWN0ICovOwpAQCAtMjU2Myw2ICsyNjg2LDEyMCBAQAogCQkwRkVBMEEyRjE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdKSVRDb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMzAxNzBENDBCRjAwQkI3MjJDIC8qIERG
R0pJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklUQ29kZS5o
OyBwYXRoID0gZGZnL0RGR0pJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1l
bnRSZWdWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QXJndW1lbnRSZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQmFzaWNC
bG9jay5jcHA7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9jay5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGIzL0IzQmFzaWNC
bG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja1V0aWxzLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2tV
dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQTFCREFDREFDMDA4
MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQmxvY2tXb3JrbGlzdC5oOyBwYXRoID0gYjMvQjNCbG9ja1dvcmtsaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0No
ZWNrU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3Bl
Y2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NoZWNrU3BlY2lhbC5o
OyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMv
QjNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb21tb24u
Y3BwOyBwYXRoID0gYjMvQjNDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tb24uaDsgcGF0aCA9IGIzL0IzQ29tbW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b21tdXRhdGl2aXR5LmNwcDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11
dGF0aXZpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tdXRhdGl2
aXR5Lmg7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmg7IHBhdGggPSBiMy9CM0Nv
bnN0MzJWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNTFCREFD
REFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNDb25zdDY0VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDY0VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNDb25zdDY0VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3Q2NFZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
RG91YmxlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0RG91YmxlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
dHJvbFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29u
dHJvbFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29udHJvbFZhbHVlLmg7
IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgcGF0
aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmg7IHBhdGggPSBiMy9C
M0ZyZXF1ZW5jeUNsYXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvQjNGcmVxdWVu
dGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0UxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmF0ZS5oOyBw
YXRoID0gYjMvQjNHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBw
YXRoID0gYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW5kZXhNYXAuaDsgcGF0aCA9IGIzL0IzSW5k
ZXhNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNJbmRleFNldC5oOyBwYXRoID0gYjMvQjNJbmRleFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5jcHA7IHBh
dGggPSBiMy9CM0xvd2VyVG9BaXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5oOyBwYXRoID0gYjMvQjNMb3dlclRvQWly
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzTWVtb3J5VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01l
bW9yeVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTWVtb3J5VmFs
dWUuaDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3Bjb2RlLmNwcDsgcGF0aCA9IGIzL0IzT3Bj
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDgxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
T3Bjb2RlLmg7IHBhdGggPSBiMy9CM09wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW4uY3BwOyBwYXRoID0gYjMvQjNPcmln
aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQTFCREFDREFDMDA4
MEZGNzQgLyogQjNPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNP
cmlnaW4uaDsgcGF0aCA9IGIzL0IzT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVj
aWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNp
YWwuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZh
bHVlLmNwcDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZhbHVl
Lmg7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhhc2VTY29wZS5jcHA7IHBhdGgg
PSBiMy9CM1BoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1Byb2NlZHVyZS5jcHA7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZS5oOyBwYXRoID0g
YjMvQjNQcm9jZWR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZUlubGluZXMuaDsgcGF0aCA9IGIzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNDFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1N0YWNrbWFwLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja21hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwLmg7
IHBhdGggPSBiMy9CM1N0YWNrbWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5oOyBwYXRoID0gYjMv
QjNTdGFja21hcFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuY3BwOyBwYXRoID0gYjMvQjNT
dGFja1Nsb3RLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90S2lu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1N0YWNrU2xvdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1N0YWNrU2xvdFZhbHVlLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmg7IHBhdGggPSBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1N3aXRjaENhc2UuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2Fz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N3aXRjaENhc2UuaDsgcGF0
aCA9IGIzL0IzU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3dp
dGNoVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMDFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmg7IHBhdGggPSBiMy9CM1N3aXRjaFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNUeXBlLmNwcDsg
cGF0aCA9IGIzL0IzVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNUeXBlLmg7IHBhdGggPSBiMy9CM1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmg7IHBhdGggPSBiMy9C
M1Vwc2lsb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNTFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNVc2VDb3VudHMuY3BwOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVc2VD
b3VudHMuaDsgcGF0aCA9IGIzL0IzVXNlQ291bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMv
QjNWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFsaWRhdGUuaDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNWYWx1ZS5oOyBwYXRoID0gYjMvQjNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUlubGluZXMuaDsgcGF0aCA9
IGIzL0IzVmFsdWVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVSZXAuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlUmVwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFs
dWVSZXAuaDsgcGF0aCA9IGIzL0IzVmFsdWVSZXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFjay5jcHA7
IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlU3RhY2suaDsgcGF0
aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQXJnLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFyZy5o
OyBwYXRoID0gYjMvYWlyL0FpckFyZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQmFzaWNCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEUxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyQ0NhbGxTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNvZGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
R2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRlLmg7IHBhdGgg
PSBiMy9haXIvQWlyR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRpb25Db250ZXh0Lmg7IHBhdGggPSBi
My9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NTYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVz
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
SW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc2Vy
dGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnN0LmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJJbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NUIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlySW5zdC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3RJbmxpbmVzLmg7
IHBhdGggPSBiMy9haXIvQWlySW5zdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxpdmVuZXNzLmg7IHBhdGggPSBiMy9haXIvQWly
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyUGhhc2VTY29wZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpclBoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
clJlZ2lzdGVyUHJpb3JpdHkuY3BwOyBwYXRoID0gYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MTFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJSZWdpc3RlclByaW9yaXR5Lmg7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
ZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BlY2lhbC5oOyBw
YXRoID0gYjMvYWlyL0FpclNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBw
YXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BpbGxFdmVyeXRoaW5nLmg7
IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3RhY2tTbG90LmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclN0YWNrU2xvdC5oOyBwYXRoID0gYjMvYWlyL0FpclN0
YWNrU2xvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2ODFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpclRtcC5jcHA7IHBhdGggPSBiMy9haXIvQWlyVG1wLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJU
bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyVG1wSW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpclRtcElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclZhbGlkYXRl
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJWYWxpZGF0ZS5oOyBwYXRoID0gYjMvYWly
L0FpclZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTkyMUJE
QjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyR2VuZXJhdGVkLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0
ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODVBRDFCREI1Q0YxMDA4
MEZGNzQgLyogdGVzdGIzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSB0ZXN0YjM7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBG
RUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gdGVzdGIzLmNwcDsgcGF0aCA9IGIzL3Rlc3RiMy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdD
b25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFu
dEhvaXN0aW5nUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdC
ODFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBwYXRo
ID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dXBWYXJhcmdzRnJhbWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM3NjksNiArNDAwNiwxNSBAQAogCQkJKTsKIAkJ
CXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OworCQkwRkVDODVB
MjFCREI1Q0YxMDA4MEZGNzQgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1l
d29ya3NCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZp
bGVzID0gKAorCQkJCTBGRUM4NUEzMUJEQjVDRjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1l
d29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJCTBGRUM4NUE0MUJEQjVDRjEwMDgwRkY3NCAvKiBK
YXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEZGOTIyQzYxNEY0
NkIxMzAwNDFBMjRFIC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtz
QnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0zODM4LDYg
KzQwODQsNyBAQAogCQkJCTE0MTIxMTIwMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovLAog
CQkJCTE0QkQ1OUJGMEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTY1MTEyMzA1
MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAorCQkJCTBGRUM4NUFEMUJEQjVDRjEw
MDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKQEAgLTM4NTgsNiArNDEwNSw3IEBACiAJCQkJQTdDMjI1Q0Mx
Mzk5ODFGMTAwRkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQz
MkVCRDcwQTM0Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywKIAkJCQk5Njg4Q0IxMjBFRDEyQjRFMDAx
RDY0OUYgLyogYXNzZW1ibGVyICovLAorCQkJCTBGRUM4NEIyMUJEQUNENUUwMDgwRkY3NCAvKiBi
MyAqLywKIAkJCQlBNTRDRjJFQTE4NEVBNzM5MDAyMzdGMTkgLyogYmluZGluZ3MgKi8sCiAJCQkJ
QTdEODAxOUYxODgwRDY2RTAwMjZDMzlCIC8qIGJ1aWx0aW5zICovLAogCQkJCTk2OUEwNzhGMEVE
MUQzQUUwMEYxRjY4MSAvKiBieXRlY29kZSAqLywKQEAgLTQwNzEsNiArNDMxOSwxMzQgQEAKIAkJ
CW5hbWUgPSBmdGw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkwRkVDODRC
MjFCREFDRDVFMDA4MEZGNzQgLyogYjMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNo
aWxkcmVuID0gKAorCQkJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCisJCQkJ
MEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi8sCisJ
CQkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovLAor
CQkJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovLAorCQkJ
CTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRkVD
ODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovLAorCQkJCTBG
RUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovLAorCQkJCTBG
RUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRkVD
ODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4
NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEJE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEJFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLywKKwkJCQkwRkVDODRCRjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uY3BwICovLAorCQkJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW1vbi5oICovLAorCQkJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuY3BwICovLAorCQkJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuaCAqLywKKwkJCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dDMyVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
MzJWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRW
YWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZh
bHVlLmggKi8sCisJCQkJMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVW
YWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3Vi
bGVWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xW
YWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZh
bHVlLmggKi8sCisJCQkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuY3BwICovLAorCQkJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNs
YXNzLmggKi8sCisJCQkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJs
b2NrLmggKi8sCisJCQkJMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3Bw
ICovLAorCQkJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggKi8sCisJ
CQkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
ICovLAorCQkJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8sCisJ
CQkJMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLywKKwkJCQkwRkVD
ODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLywKKwkJCQkwRkVDODRE
NDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8sCisJCQkJMEZFQzg0RDUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEQ2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggKi8sCisJCQkJMEZFQzg0RDcxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLywKKwkJCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQg
LyogQjNPcGNvZGUuaCAqLywKKwkJCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmln
aW4uY3BwICovLAorCQkJCTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICov
LAorCQkJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNw
cCAqLywKKwkJCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lh
bC5oICovLAorCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1
ZS5jcHAgKi8sCisJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZh
bHVlLmggKi8sCisJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5j
cHAgKi8sCisJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICov
LAorCQkJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgKi8sCisJ
CQkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8sCisJCQkJMEZF
Qzg0RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovLAorCQkJCTBG
RUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLywKKwkJCQkwRkVDODRF
NTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovLAorCQkJCTBGRUM4NEU2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0RTcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0RTgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8sCisJCQkJMEZFQzg0RTkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovLAorCQkJCTBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRFQjFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovLAorCQkJCTBGRUM4NEVDMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLywKKwkJCQkwRkVDODRFRDFC
REFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLywKKwkJCQkwRkVDODRFRTFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8sCisJCQkJMEZFQzg0RUYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEYwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5jcHAgKi8sCisJCQkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5oICovLAorCQkJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5j
cHAgKi8sCisJCQkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLywK
KwkJCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLywKKwkJCQkw
RkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg0
RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLywKKwkJCQkwRkVDODRGOTFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RkExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZUlubGluZXMuaCAqLywKKwkJCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1
ZVJlcC5jcHAgKi8sCisJCQkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAu
aCAqLywKKwkJCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLywKKwkJ
CSk7CisJCQluYW1lID0gYjM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkw
RkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7
CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5jcHAgKi8sCisJCQkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFs
bG9jYXRlU3RhY2suaCAqLywKKwkJCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJn
LmNwcCAqLywKKwkJCQkwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggKi8sCisJ
CQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAorCQkJ
CTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEZF
Qzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZF
Qzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAorCQkJCTBGRUM4
NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKKwkJCQkwRkVDODU1MTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NTkyMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJH
ZW5lcmF0ZWQuY3BwICovLAorCQkJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0aW9uQ29udGV4dC5oICovLAorCQkJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJI
YW5kbGVDYWxsZWVTYXZlcy5jcHAgKi8sCisJCQkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8sCisJCQkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5oICovLAorCQkJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnN0LmNwcCAqLywKKwkJCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dC5oICovLAorCQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5o
ICovLAorCQkJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovLAor
CQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLywKKwkJ
CQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovLAorCQkJCTBG
RUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLywKKwkJ
CQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovLAor
CQkJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLywKKwkJCQkw
RkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTY0
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICovLAorCQkJCTBGRUM4
NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLywKKwkJCQkwRkVD
ODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLywKKwkJCQkwRkVDODU2
NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8sCisJCQkJMEZFQzg1NjgxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8sCisJCQkJMEZFQzg1NjkxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcC5oICovLAorCQkJCTBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJU
bXBJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLywKKwkJCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUu
aCAqLywKKwkJCSk7CisJCQluYW1lID0gYWlyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
KwkJfTsKIAkJMEZGNDI3MkUxNThFQkNDRTAwNENCOUZGIC8qIGRpc2Fzc2VtYmxlciAqLyA9IHsK
IAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC02MDQyLDYgKzY0MTgsNyBA
QAogCQkJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3Nl
bWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBB
YnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQg
LyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5
OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhl
YWRlcnMgKi8sCkBAIC02MDcxLDggKzY0NDgsMTAgQEAKIAkJCQlBNUVBNzBFODE5RjVCMTAxMDA5
OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hl
ZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjY0QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE1MTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGlu
RXhlY3V0YWJsZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjA4Nyw2ICs2NDY2LDcgQEAKIAkJCQk5
OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfbW9kZWwucHkgaW4gSGVhZGVycyAq
LywKIAkJCQk5OURBMDBBNTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfdGVtcGxhdGVzLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERUExMzIxQjlGMzE2MzAwNkQ2NUREIC8qIEJ1aWx0aW5V
dGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RTcyOTQwQjE5MEYwNTE0MDAxQTkx
QjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTcxNUVEOEU0NjAw
RjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTgxNUVEOEU0
NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjA5Nyw2
ICs2NDc3LDcgQEAKIAkJCQkwRjJERDgwQjFBQjNEODU4MDBCQkI4RTggLyogQnl0ZWNvZGVLaWxs
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVj
b2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzAxODM1NjZG
OTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2Rl
VXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyog
QnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMzMsMTMgKzY1MTQsMTYgQEAKIAkJCQkw
RjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhzLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2NTUzQTMzMjE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0
aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFMzkxNDFBQjE0RDAwMTc5Qzk0IC8qIENv
bXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyQzFCREFDREFDMDA4
MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBM0E4MTc5NzQz
MkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNkZDNzUxMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBjb25maWcu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVj
aWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29u
c2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDhBMThCQzIxQzMwMEJF
REY3NiAvKiBDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwODFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3
QTE4OUIwNTEwMDA2MzMyMzEgLyogQ29uc29sZU1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1M0NFMDg2MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUZEMDA3NDE4OUIwMzhDMDA2MzMyMzEgLyogQ29uc29sZVR5cGVzLmggaW4g
SGVhZGVycyAqLywKQEAgLTYxNTMsNiArNjUzNyw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAw
ODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEz
RkExNDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MkM4RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUyNDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNp
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNjQsNiArNjU0OSw3IEBACiAJCQkJOTk1OUU5MkIx
QkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2
MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBE
YXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTgzLDYgKzY1NjksNyBAQAogCQkJ
CUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJ
bnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0Yw
MDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3
MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQw
MjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRj
aHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyog
REZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2
RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8s
CkBAIC02MTkzLDcgKzY1ODAsOSBAQAogCQkJCTBGMkREODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBE
RkdBcmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzIyMTg3NzUw
NTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0
MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxv
Y2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdB
cnJheU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTgg
LyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcx
ODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRl
cnMgKi8sCkBAIC02MjAzLDYgKzY1OTIsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FE
OCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMx
OUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMz
Q0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdC
bG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAwMTlBREE0MTAwMDZB
QzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyNDIsOCArNjYz
MiwxMCBAQAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0Vk
Z2VVc2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURG
MDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0
OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRy
YXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0
NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjI3Myw2ICs2NjY1LDcgQEAK
IAkJCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hW
YXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NjFC
REFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdM
aXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAg
LyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjI4
MSw2ICs2Njc0LDcgQEAKIAkJCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZp
ZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8q
IERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENE
ODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE0MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4
RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zm
c2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8q
IERGR05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02Mjk5LDYgKzY2OTMsNyBA
QAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0
Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNTFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzEx
NDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4
aXRGdXp6LmggaW4gSGVhZGVycyAqLywKQEAgLTYzMTYsNiArNjcxMSw4IEBACiAJCQkJMEZGQzky
MTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2lu
Z1BoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERG
ODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZD
Q0ZDMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzNDAsNiArNjczNyw3IEBACiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQw
IC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDhBMzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxs
YmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERG
R1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZH
VHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMx
REIxMjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAt
NjM1MSw2ICs2NzQ5LDcgQEAKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBD
NTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2
ZW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIg
LyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkM5N0Y0MjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzgwLDYgKzY3NzksNyBAQAogCQkJCTBGNTZBMUQzMTUw
MDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5n
ZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBG
bG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3
NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjQzOCw2ICs2ODM4LDcgQEAK
IAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVl
RnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQg
LyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5
OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMy
QzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
MzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAq
LywKQEAgLTY0NDUsOCArNjg0NiwxMCBAQAogCQkJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAv
KiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNDBF
MTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTBGQjE5NzRBRTYxMDA4MDg1N0MgLyogRnVu
Y3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRCRkYyQzFBRDQ3
NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rp
dml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTY0ODMsNiArNjg4Niw3IEBACiAJCQkJ
QzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUExQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVy
aWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFCMUFBOTA5
MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZF
MDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTA4LDYgKzY5MTIsNyBAQAogCQkJCUMyRTUy
NkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
N0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2
aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRl
bnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNkRERUExOERBNDRBQjAwQTM4M0QwIC8q
IElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3NjE4OUIwMzhD
MDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTY1NjEs
NiArNjk2Niw3IEBACiAJCQkJQTFCOUUyM0MxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRv
ckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgxOTNFMzFCNEUwQ0RCMDBGQzEw
MjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlB
MUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFz
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQxQjRFMENEQjAwRkMxMDI5IC8qIEludGxD
b2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDZFMUI0REMx
NDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
NTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5o
IGluIEhlYWRlcnMgKi8sCkBAIC02NTkxLDYgKzY5OTcsNyBAQAogCQkJCTBGMjRFNTREMTdFRTI3
NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQz
MTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEz
MTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLApAQCAt
NjYwNCw2ICs3MDExLDcgQEAKIAkJCQkwRjJCNjZFQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJh
eUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JEQUVDQjE3RjRFQTE0
MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk4QjE0MTg2
RDFCNjI1MjdGMDBGQjIwNjggLyogSlNBcnJvd0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQxODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNCYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDBEMTdENzBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZGQTlFOTIxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjIwLDYgKzcwMjgsOCBAQAogCQkJCTg2NUEz
MEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU0NKU1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQ2xhc3NSZWYuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1M0NFMDg4MThCQzFBNTYwMEJFREY3NiAvKiBKU0NvbnNvbGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTFFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlND
b250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyog
SlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1OEMwMjQyMThFNEE0MUEw
MDAzMkJDNSAvKiBKU0NvbnRleHRQcml2YXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTY2MzUsNiAr
NzA0NSw3IEBACiAJCQkJRkUzODRFRTYxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCBp
biBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU4MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZN
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAg
LyogSlNFbnZpcm9ubWVudFJlY29yZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjAxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTND
NjE0MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4cG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdC
NEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpTRXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FFM0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjY0NCwxMSArNzA1NSwxMyBAQAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3
QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dl
bmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FF
M0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQzMyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjYxN0I2QjVBQjAw
QTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzk3RTA3QUExQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNh
bEVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQjFCREFDREFDMDA4MEZG
NzQgLyogQjNJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjEwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTR2xvYmFsT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA4NjE4
OUIxQjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1QzNBMUE2MThDMDQ5MDIwMEM5NTkzQSAvKiBKU0dsb2JhbE9iamVjdENvbnNv
bGVDbGllbnQuaCBpbiBIZWFkZXJzICovLApAQCAtNjY3OSw2ICs3MDkyLDcgQEAKIAkJCQlBNzAw
ODc0MjE3Q0JFOEVCMDBDM0U2NDMgLyogSlNNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NERF
Rjk2MTgyRDk5MTQwMDUyMkMyMiAvKiBKU01hcEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5OTU5RTkyRDFCRDE3RkE0MDAxQUE0MTMgLyoganNtaW4ucHkgaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJFRjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUUzMThDQkMxMUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5h
bWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTM5REE0QTcxQjdFOEI3QzAwODRG
MzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggaW4gSGVhZGVycyAqLywKQEAgLTY3MDgsNiArNzEyMiw3
IEBACiAJCQkJQTdDMUVBRjAxNzk4N0FCNjAwMjk5REIyIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2RTg1NTM5MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1
aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Vwc2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBFQzBFQzMxQUEwRDdEQTAwQjZB
QUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2MDBCNUE3MTUy
QkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pvaW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MjgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nUmVmLmggaW4gSGVhZGVycyAqLywKQEAg
LTY3NjEsOSArNzE3NiwxMSBAQAogCQkJCTBGNDY4MEEzMTRCQTdGOEQwMEJGRTI3MiAvKiBMTElu
dEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MENCMTRCQkIxNzIwMEJGRTI3
MiAvKiBMTEludE9mZmxpbmVBc21Db25maWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0Iy
MTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNDY4MEE1MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYwQjgzOUQxNEJDRjQ2NjAwODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkNFRkFDRTE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQ0YxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUElG
dW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAv
KiBMTFZNRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFEMzE4MDVFREND
MDA0NzJDRTQgLyogTExWTUhlYWRlcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNjc3NiwxMiArNzE5
MywxNCBAQAogCQkJCTg2RDNCMkM2MTAxNTZCREUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFS
TS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFBMDA5QzAxODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3Jv
QXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUREMTQ2MEZEREVBOTgwMDA2
RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUz
QzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjNCMjNF
MDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJNSVBTLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlGRTY4QzYzNzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9Bc3Nl
bWJsZXJQcmludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBOTEzNUU1RTFDMDA5NjMw
MTIgLyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU0MEYz
QTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRo
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNjBGM0E4M0MxMDBGODQ3MTAgLyogTWFj
cm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDA4NzNBMTdDQkU4
NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4NTA3
RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERhdGEuaCBpbiBIZWFkZXJzICovLApAQCAtNjgwNiw2
ICs3MjI1LDcgQEAKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3
IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQyMTFC
OTAxM0RFMDAzNDZCNTIgLyogTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0
b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9k
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI4MThBMUIyNTkwMDI2RDg4RiAvKiBOb25k
ZXRlcm1pbmlzdGljSW5wdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjgyNiw2ICs3MjQ2LDcgQEAK
IAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkx
MCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4
OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2
RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtNjgzOCwxMyAr
NzI1OSwxNyBAQAogCQkJCTBGRjlDRTc0MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0Fj
Y2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2
QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2ODkxNkIwMTU1RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2Rl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVDRDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2Zp
bGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBQcm9maWxlTm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QTUxNjZBRDM1MTAw
MEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ3
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3
MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMTM5MTJBMTY3NzFDMzYwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVu
Y2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dl
bmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQz
NjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJDMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGVkQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjg2NiwxMCArNzI5MSwxMyBAQAogCQkJ
CTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAvKiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNDc0QzMzQjE2QUEyRDk1MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODU4NDFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NzgwQTIxOEZFMUU5ODAwMUU3MkQ5IC8qIFB1cmVO
YU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVDRDIzMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRC
eUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAv
KiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MDFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5M0I0QUExOEI5MkM0RDAw
MTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3OTFC
REFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENE
NEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXREaXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4g
SGVhZGVycyAqLywKQEAgLTY4ODksNiArNzMxNyw3IEBACiAJCQkJMEZDMzE0MTIxODE0NTU5MTAw
MDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTdEMjNFRTE4OTFC
NTU0MDAzMUM3RkEgLyogUmVndWxhckV4cHJlc3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBSZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUJBMTVFODE4MjM0MEIzMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFQTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5z
cGVjdG9yQ29uc3RhbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVGMDE4MjM0NUFGMDBB
ODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02
ODk2LDYgKzczMjUsNyBAQAogCQkJCUE1QkExNUVEMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJ
bnNwZWN0b3JYUENDb25uZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MTE3RUUy
NzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThD
NkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEIwQTlE
MTFBOUI2NjQ2MDAwMTMwNkEgLyogUnVudGltZUZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MkMwNjExRjFBQTUxRTFDMDBCNEFEQkEgLyogUnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjkyNSw2ICs3MzU1LDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJF
OTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0
MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBF
MTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNl
UHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFkZXJzICovLApAQCAtNjk0NCw2ICs3Mzc1LDcgQEAK
IAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDJFMzEzQjEzNEZGMEE2MDBBRkFEQjUgLyogU3Ryb25nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDU3MjI4NjE0MzdFMTQwMDA1RkRFMjYgLyogU3Ryb25nSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVu
ZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQ0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3Ry
dWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyog
U3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5
NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCBpbiBIZWFkZXJzICovLApAQCAtNjk4MCwxMCArNzQx
MiwxMiBAQAogCQkJCTBGMkQ0REVBMTk4MzJEQUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTUyQjMxMTAxMTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRp
b25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8q
IFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDOTUyQjcxOUEyODk4NTAw
NjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERUMxOTgz
MkRDNDAwN0Q0QjE5IC8qIFR5cGVQcm9maWxlckxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
RDRERjAxOTgzMkRENjAwN0Q0QjE5IC8qIFR5cGVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODYuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NEZGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQwMDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2V4dGVy
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDQxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4
Nl9pbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDIwLDggKzc0NTQsMTAgQEAKIAkJCQlGRUQ5
NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0Y2hkb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OTE5RDI2MTU4NTNDRTMwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDJFMzEzQzEzNEZGMEE2MDBBRkFEQjUgLyogV2Vhay5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RTg0RjlGMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTE0QkZDRTY5MTBDREIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xv
dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBX
ZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBC
MTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0
RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwuaCBpbiBIZWFkZXJzICovLApAQCAtNzA0Myw5ICs3
NDc5LDEyIEBACiAJCQkJOTk1OUU5MkUxQkQxN0ZBNDAwMUFBNDEzIC8qIHh4ZC5wbCBpbiBIZWFk
ZXJzICovLAogCQkJCTQ1MTUzOUI5MTJEQzk5NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzMTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21h
cFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3
MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRC
QTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJuLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4
MTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NzA0QjQzMTJEQjhBODEwMEE5RkU3QiAvKiBZYXJyU3ludGF4Q2hlY2tlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CkBAIC03MDcwLDYgKzc1MDksMjIgQEAKIAkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRkNFRkFCNjE4
MDVENjE2MDA0NzJDRTQgLyogbGlibGx2bUZvckpTQy5keWxpYiAqLzsKIAkJCXByb2R1Y3RUeXBl
ID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUubGlicmFyeS5keW5hbWljIjsKIAkJfTsKKwkJMEZF
Qzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2
ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRkVDODVBODFCREI1Q0YxMDA4
MEZGNzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRl
c3RiMyIgKi87CisJCQlidWlsZFBoYXNlcyA9ICgKKwkJCQkwRkVDODU5NTFCREI1Q0YxMDA4MEZG
NzQgLyogU291cmNlcyAqLywKKwkJCQkwRkVDODVBMjFCREI1Q0YxMDA4MEZGNzQgLyogRnJhbWV3
b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2ll
cyA9ICgKKwkJCSk7CisJCQluYW1lID0gdGVzdGIzOworCQkJcHJvZHVjdE5hbWUgPSB0ZXN0YXBp
OworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0
YjMgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOwor
CQl9OwogCQkwRkY5MjJDMzE0RjQ2QjEzMDA0MUEyNEUgLyogSlNDTExJbnRPZmZzZXRzRXh0cmFj
dG9yICovID0gewogCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0
aW9uTGlzdCA9IDBGRjkyMkNBMTRGNDZCMTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0aW9u
IGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAqLzsK
QEAgLTcyMjUsNiArNzY4MCw3IEBACiAJCQkJMTRCRDU5QkUwQTNFOEY5MDAwQkFGNTlDIC8qIHRl
c3RhcGkgKi8sCiAJCQkJOTMyRjVCREEwODIyQTFDNzAwNzM2OTc1IC8qIGpzYyAqLywKIAkJCQk2
NTExMjJGNzE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKKwkJCQkwRkVDODU5NDFC
REI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJCTVENkIyQTQ3MTUyQjlFMTcwMDUyMzFE
RSAvKiBUZXN0IFRvb2xzICovLAogCQkJKTsKIAkJfTsKQEAgLTc0NzIsNiArNzkyOCwxNCBAQAog
CQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9Owor
CQkwRkVDODU5NTFCREI1Q0YxMDA4MEZGNzQgLyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBC
WFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJ
CWZpbGVzID0gKAorCQkJCTBGRUM4NUFGMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CisJCX07CiAJCTBGRjkyMkM0MTRGNDZCMTMwMDQxQTI0RSAvKiBTb3VyY2VzICovID0g
ewogCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OwpAQCAtNzUyNyw2ICs3OTkxLDcgQEAKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBB
Qzc2NDkgLyogQWJzdHJhY3RQQy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRDEwN0VD
Mzc2MDA0MjdBNDggLyogQXJnTGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc0M0JBQTE2
Qjg4MjQ5MDA5RjkyNzcgLyogQVJNNjREaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODZEM0IyQzMxMDE1NkJERTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk2NUMwMjg1MDE3MTc5NUUyMDAzNTFFMzUgLyogQVJNdjdEaXNh
c3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVDMDI4NUMxNzE3OTY2ODAwMzUxRTM1
IC8qIEFSTXY3RE9wY29kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1MzQsOCArNzk5OSwxMCBA
QAogCQkJCUE3QThBRjM0MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkZDOTlENDE4NEVFMzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0
ZXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QThBRjM2MTdBREI1RjMw
MDVBQjE3NCAvKiBBcnJheUJ1ZmZlclZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
M0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUJGMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QkRBRUM4MTdGNEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9y
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjM5NDU0
MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJheVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5QzAxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5UHJvdG90eXBlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjRFNTQwMTdFQTlGNTkwMEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC03NTU2LDggKzgwMjMsMTAgQEAKIAkJCQkxNDI5RDhERDBFRDIy
MDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRUM5QkI2
MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJhbWVTaHVmZmxlRGF0YS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2MkQ3NTVENjFCODRGQjQ2MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJv
bFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ1MUI4NEZCNDAwMDE4MDFGQSAv
KiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ0
MUI4NEZCM0QwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRCQ0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxM
aW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyNzY3MzIzMUI2ODBDMUUwMEZEOUYy
RSAvKiBDYWxsTW9kZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc1NzAsNiArODAzOSw3IEBACiAJ
CQkJQTc3RjE4MjExNjQwODhCMjAwNjQwQTQ3IC8qIENvZGVDYWNoZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjhGOTQ0NjE2Njc2NEYxMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkI1ODI2NzE0RDI3OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVy
YXRlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyog
Q29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBE
NjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03NTc3LDYgKzgwNDcsNyBAQAogCQkJCUE3MDlGMkYyMTdBMEFDMkEwMDUxMkU5OCAvKiBDb21t
b25TbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU1M0EzMzExN0ExRjFFRTAwOENG
NkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdFNUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NThCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzIxMDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2RkM3NTAxOTYxMTBBODAwRTFEMDJEIC8qIENv
bXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAw
MUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3RzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYwNCw2
ICs4MDc1LDcgQEAKIAkJCQkwRkM3MTJERTE3Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21w
aWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFNTA2ODY3MUFFMjVFMjgw
MDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3
QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYwMENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDAxMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFw
dGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlGIC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hw
b2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MTMsNiArODA4NSw3IEBACiAJCQkJMEY2Mzk0
ODQxNUU0ODExODAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBN0Q5QTI5NDE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjY2NkVDNjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxh
YmlsaXR5LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIx
RDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MTRD
QTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0JhY2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjIxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxv
Y2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjIxLDYgKzgwOTQsNyBAQAogCQkJCTg2RUM5REM0
MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRlQ29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlDOTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRkZDOTU3MTRFRjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0NjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1
ZVJlcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyog
REZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzY5
NDFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xlYW5VcFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4MSAvKiBERkdDbG9iYmVyaXplLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzY1OCw2ICs4MTMyLDcgQEAKIAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBC
QkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlE
QzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dyYXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBERkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU2RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVh
cExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3
RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkw
NTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03NzAwLDE0ICs4MTc1LDE3IEBACiAJCQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0Yy
NDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzAy
NUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYzOTJDODkxQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBE
RkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVE
MTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY2MjM3OTcxQUU0NUNBNzAwRDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyog
REZHUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0VBMTlEMEJB
N0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJlbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhB
OTc3QTE3OTczOEI4MDA5REY3NDQgLyogREZHUGxhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyogREZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVEMTRFRjkwQjMwMEM3MjUzMiAvKiBERkdQcmVk
aWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMjFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAvKiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0VDMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhl
YXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxNzY2MjE5NkI4RjlFMDA5MTA1
MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzcyNSw2ICs4MjAzLDgg
QEAKIAkJCQkwRkMyMENCNTE4NTJFMkM2MDBDOUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjg5M0JEQjE5MzZFMjNDMDAxMjExRjQgLyog
REZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc5MDg1
NTE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGRTE4QTYwMDcwMDAx
QTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0
NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhB
MzI3MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzc1Miw2ICs4MjMyLDcgQEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVF
MDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlDYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYgLyogRW5jb2RlZFZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUwOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzgxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVy
cm9ySGFuZGxpbmdTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2
MDA0MjdBNDggLyogRXJyb3JJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3OTYsNiAr
ODI3Nyw3IEBACiAJCQkJMEY4RjJCOTUxNzJFMDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYxODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9u
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExM
b3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwMDFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBGVExPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBDN0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4MDMsNiArODI4NSw3IEBACiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJD
IC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ4NTMyOTE4N0RGREVDMDA4
M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZB
QUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjExODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRo
Q2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFCMzE4MTYzNUYzMDA1MjJGMzkgLyog
RlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzlBMTgwM0FE
QjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODM1LDYg
KzgzMTgsNyBAQAogCQkJCUE1RkQwMDc1MTg5QjAzOEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0Zh
Y3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI1RjhCQ0QxNTc1NDRBOTAwMjQ1QjcxIC8q
IEluY3JlbWVudGFsU3dlZXBlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzRTA0RTE2MTY0
QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjBBNzUyMjFCOTRCRkE5MDAxMTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRkM5MjExMUI5NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVU
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyog
SW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4NDIsNiArODMyNiw3IEBACiAJ
CQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJFIC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTlFNzI5NDA4MTkwRjAyMUUwMDFBOTFCNSAvKiBJbml0aWFsaXplTExW
TVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAv
KiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTdCMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1QUQgLyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVBNjg0NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0
QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyog
SW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg1Myw2ICs4MzM4LDcg
QEAKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBCRkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3Ry
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTkzQ0Y3QzE4NDAzNjAzMDBCRkNFMjcgLyogSW5z
cGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODcx
ODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVycy5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODUzNzFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDgxMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0
b3JDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRTUxODkwQ0VCRjAw
MzFDN0ZBIC8qIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUzMjQzODkxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA5LDYgKzgzOTUsNyBAQAogCQkJCTg2RkE5RTkxMTQy
QkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1
bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAx
IC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJG
NjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4
MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5
MTYsNiArODQwMyw4IEBACiAJCQkJMTQ3RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpT
Q2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2
IC8qIEpTQ29uc29sZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU5MDFCREFDREM3MDA4
MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzIwMjhCNjE3OTc2MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxz
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkyNiwxNiArODQxNSwxOSBAQAogCQkJCUZFMzg0RUU3
MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0
aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0xvd2VyVG9BaXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQw
MEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0OCAvKiBKU0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNUZEMDA4NTE4OUIxQjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25z
b2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVDM0ExQTUxOEMwNDkwMjAwQzk1OTNB
IC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUwRDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTU5NDU1OTIxODI0NzQ0NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdn
YWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdEMjNFOTE4OTFCMDc3MDAzMUM3RkEgLyog
SlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTlE
MTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0NDM0M2MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJ
bnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYzMTg4MDlE
RDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVjdFJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5MDAxMTBGMTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyMzFCREFDREFDMDA4MEZG
NzQgLyogQjNPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAw
N0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
MTNFNUMxMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNGNTA4MDFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRl
cm5hbFByb21pc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTU0LDYgKzg0NDYsNyBAQAogCQkJ
CUUzMThDQkMwMUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRBNjFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVS
ZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8q
IEpTTmF0aXZlU3RkRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAw
OTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTc5NjcsNiArODQ2MCw3IEBACiAJCQkJRTNFRjg4NzQxQjY2REYyMzAwM0Yy
NkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYy
NTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTU1MkMzN0YxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTExMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTkyOEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpT
UmVwbGF5SW5wdXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODc0QUU1MTVFQkRFNEEwMDJF
MzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzBDNEFEMTY4MTA2N0Uw
MDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5OTUsNiArODQ4
OSw3IEBACiAJCQkJNzA5RkI4NjcxQUUzMzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3Jh
cHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMx
MzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNG
RDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MDAyLDkgKzg0OTcsMTIgQEAKIAkJCQkxNDhGMjFCMDEwN0VD
NTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkx
NEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVB
NkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1N0YxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAwRURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEQyMTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERh
dGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QXJndW1lbnRSZWdWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0MTFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3
Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRyeXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAvKiBMTEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODAxMyw2ICs4NTExLDcgQEAKIAkJCQlBN0U1QUIzNzE3OTlF
NEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDQ2OURERTEwN0VDN0U3MDA2NTA0NDYgLyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTFGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QjcyM0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNo
aW5lU3RhY2tNYXJrZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAw
QUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QzU2OEUw
MTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTgwMjIsMTAgKzg1MjEsMTIgQEAKIAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyog
TWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3Mzkx
N0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3NERFRjkzMTgyRDk5MTQwMDUyMkMyMiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUwNzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4NzNEMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2
IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5
QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYz
REExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNDM0MEE0ODQxQTkwNTFBRjAwRDczQ0NBIC8qIE1hdGhDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYxMDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MDY0LDE3ICs4NTY1LDIxIEBACiAJCQkJMEZGNzI5QUQxNjZB
RDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNzI5QUUxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMTM5MTI5MTY3NzFDMzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2Rl
U2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVD
MDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE5
MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODUzMDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNp
YWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFBy
b2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBG
NUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNp
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFBy
b2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQx
QjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTNCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFODEwN0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlT
bG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQ
cm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA4MywxMCArODU4OCwxMiBAQAog
CQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0QTkxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRW
YXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAw
Mjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzM2MzdB
NTFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUExNzEyQjNCMTFDN0IyMTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NjQyQzUxMDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVk
UmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMDAsNiArODYwNyw3
IEBACiAJCQkJQTVCQTE1RTkxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBp
biBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThGMTgyNDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNw
ZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUVDMTgyMzQwQjQw
MEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTA1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3Rl
SW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdF
RTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RF
MUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgx
MTgsNiArODYyNiw3IEBACiAJCQkJQTU0Q0YyRjkxODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTRDRjJGNTE4NEVBQjI0MDAyMzdGMTkgLyog
U2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTlEQTUxN0QxMjg1ODAwNUY1
RkY5IC8qIFNldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg1MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3OTBERDZEMTgyRjQ5OTcwMDU4ODgwNyAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzI5OURBMTE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUU5ODQzMUE4OTIyNzUwMDc1NEU5MyAvKiBT
ZXR1cFZhcmFyZ3NGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMzIsNiArODY0MSw3IEBA
CiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QzFFQUYxMTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmlj
dEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTIxMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09wY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VD
N0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NDY5REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTQ4LDYgKzg2NTgsNyBAQAogCQkJCTcwNUI0MUFE
MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MDVCNDFBRjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sT2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTcwNUI0MUIxMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNl
Q291bnRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAv
KiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MEVDQTYwNzFBRkRCRUEyMDA0
NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQx
MzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJlZ2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODE3Niw2ICs4Njg3LDcgQEAKIAkJCQkwRjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFs
dWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1
QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZDNzM1
MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1ODMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMkMxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIwQzI1OTFBODAxM0FCMDBEQTMyMjkgLyogVmly
dHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5
MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxOTUsNiArODcwNyw3IEBACiAJCQkJ
NzA5RkI4NjkxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlw
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkyQTRFQzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3Jp
dGVCYXJyaWVyQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTdEMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1
MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAwRDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk4NjNDNkQ5QzE1MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9u
aWNhbGl6ZVVDUzIuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjIxLDYgKzg3MzQsMTEgQEAKIAkJ
CXRhcmdldCA9IDBGQ0VGQUI1MTgwNUQ2MTYwMDQ3MkNFNCAvKiBsbHZtRm9ySlNDICovOwogCQkJ
dGFyZ2V0UHJveHkgPSAwRkNFRkFCQzE4MDVENjYzMDA0NzJDRTQgLyogUEJYQ29udGFpbmVySXRl
bVByb3h5ICovOwogCQl9OworCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0
RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJn
ZXQgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovOworCQkJdGFyZ2V0UHJv
eHkgPSAwRkVDODVCMDFCREI1RDhGMDA4MEZGNzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
OworCQl9OwogCQkwRkY5MjJEMzE0RjQ2QjJGMDA0MUEyNEUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdldERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSAwRjQ2
ODBBOTE0QkE3RkQ5MDBCRkUyNzIgLyogTExJbnQgT2Zmc2V0cyAqLzsKQEAgLTgzNDUsNiArODg2
MywzOCBAQAogCQkJfTsKIAkJCW5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRkVDODVBOTFC
REI1Q0YxMDA4MEZGNzQgLyogRGVidWcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJh
dGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAw
RkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9
IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOwor
CQl9OworCQkwRkVDODVBQTFCREI1Q0YxMDA4MEZGNzQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlz
YSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2Ug
PSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87
CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07
CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsKKwkJMEZFQzg1QUIxQkRCNUNGMTAwODBGRjc0IC8q
IFByb2ZpbGluZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFz
ZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9v
bEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RV
Q1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJCQluYW1lID0gUHJvZmlsaW5nOworCQl9OworCQkw
RkVDODVBQzFCREI1Q0YxMDA4MEZGNzQgLyogUHJvZHVjdGlvbiAqLyA9IHsKKwkJCWlzYSA9IFhD
QnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAy
MUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQli
dWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJCQlu
YW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMEZGOTIyQ0IxNEY0NkIxMzAwNDFBMjRFIC8qIERl
YnVnICovID0gewogCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKQEAgLTg2OTcsNiArOTI0NywxNyBAQAogCQkJZGVmYXVsdENvbmZp
Z3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJv
ZHVjdGlvbjsKIAkJfTsKKwkJMEZFQzg1QTgxQkRCNUNGMTAwODBGRjc0IC8qIEJ1aWxkIGNvbmZp
Z3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YjMiICovID0geworCQkJaXNh
ID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJ
MEZFQzg1QTkxQkRCNUNGMTAwODBGRjc0IC8qIERlYnVnICovLAorCQkJCTBGRUM4NUFBMUJEQjVD
RjEwMDgwRkY3NCAvKiBSZWxlYXNlICovLAorCQkJCTBGRUM4NUFCMUJEQjVDRjEwMDgwRkY3NCAv
KiBQcm9maWxpbmcgKi8sCisJCQkJMEZFQzg1QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rp
b24gKi8sCisJCQkpOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJMEZGOTIyQ0Ex
NEY0NkIxMzAwNDFBMjRFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJKU0NMTEludE9mZnNldHNFeHRyYWN0b3IiICovID0gewogCQkJaXNhID0gWENDb25m
aWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2
aXNpb24gMTkxNTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJM
RShBU1NFTUJMRVIpCiAKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwogbmFtZXNwYWNl
IEpTQyB7CiAKIGNvbnN0IGRvdWJsZSBNYWNyb0Fzc2VtYmxlcjo6dHdvVG9UaGUzMiA9IChkb3Vi
bGUpMHgxMDAwMDAwMDB1bGw7CkBAIC00Nyw1ICs0OSw3MCBAQCB2b2lkIE1hY3JvQXNzZW1ibGVy
OjpjYWxsUHJvYmUoc3RkOjpmdW5jCiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2Ug
V1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQpCit7
CisgICAgc3dpdGNoIChjb25kKSB7CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw6Cisg
ICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpBYm92ZToKKyAgICAgICAg
b3V0LnByaW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmVPckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlT3JFcXVhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QmVsb3c6CisgICAgICAg
IG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93T3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvd09yRXF1YWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuOgor
ICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbk9yRXF1YWw6CisgICAgICAgIG91dC5wcmlu
dCgiR3JlYXRlclRoYW5PckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3Jv
QXNzZW1ibGVyOjpMZXNzVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzVGhhbiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsOgor
ICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuT3JFcXVhbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9u
IGNvbmQpCit7CisgICAgc3dpdGNoIChjb25kKSB7CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6
T3ZlcmZsb3c6CisgICAgICAgIG91dC5wcmludCgiT3ZlcmZsb3ciKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OlNpZ25lZDoKKyAgICAgICAgb3V0LnByaW50KCJT
aWduZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OlBvc2l0
aXZlT3JaZXJvOgorICAgICAgICBvdXQucHJpbnQoIlBvc2l0aXZlT3JaZXJvIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpaZXJvOgorICAgICAgICBvdXQucHJp
bnQoIlplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok5v
blplcm86CisgICAgICAgIG91dC5wcmludCgiTm9uWmVybyIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24g
MTkxNTM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk2LDggKzE1OTYsMTkgQEAgcHVibGljOgogCiB9IC8v
IG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uKTsKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCiAjZWxzZSAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCituYW1lc3BhY2UgSlNDIHsKKwogLy8g
SWYgdGhlcmUgaXMgbm8gYXNzZW1ibGVyIGZvciB0aGlzIHBsYXRmb3JtLCBhdCBsZWFzdCBhbGxv
dyBjb2RlIHRvIG1ha2UgcmVmZXJlbmNlcyB0bwogLy8gc29tZSBvZiB0aGUgdGhpbmdzIGl0IHdv
dWxkIG90aGVyd2lzZSBkZWZpbmUsIGFsYmVpdCB3aXRob3V0IGdpdmluZyB0aGF0IGNvZGUgYW55
IHdheQogLy8gb2YgZG9pbmcgYW55dGhpbmcgdXNlZnVsLgpAQCAtMTYxMSw2ICsxNjIyLDggQEAg
cHVibGljOgogICAgIGVudW0gRlBSZWdpc3RlcklEIHsgTm9GUFJlZ2lzdGVyIH07CiB9OwogCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKICNlbmRp
ZiAvLyBNYWNyb0Fzc2VtYmxlcl9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNB
ZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0Ogor
IyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhF
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisK
K21hdGNoZXIgQWRkcmVzc01hdGNoZXIKKworIyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24gQjMg
ZG9pbmcgYWdncmVzc2l2ZSByZWFzc29jaWF0aW9uIGFuZCBjYW5vbmNhbGl6YXRpb24gb2YgaW50
ZWdlciBhZGRzLgorIyBXZSdsbCBuZXZlciBzZWUgQWRkKEFkZCh4LCBjb25zdDEpLCBjb25zdDIp
IGJlY2F1c2UgaXQgd291bGQgaGF2ZSBhbHJlYWR5IGJlZW4gcmVhc3NvY2lhdGVkIGludG8KKyMg
QWRkKHgsIGNvbnN0MSArIGNvbnN0MikuIEFsc28sIHdlIHdpbGwgbmV2ZXIgc2VlIEFkZChjb25z
dCwgeCksIGJlY2F1c2Ugd2Ugd291bGQgaGF2ZSBjYW5vbmljYWxpemVkCisjIGl0IHRvIEFkZCh4
LCBjb25zdCkuIFRoYXQgc2FpZCwgaW4gdGhpcyBjb2RlIHdlIG5ldmVyIG1ha2UgYXNzZXJ0aW9u
cyBhYm91dCB0aGVzZSBvcHRpbWl6YXRpb25zCisjIGhhdmluZyBiZWVuIHBlcmZvcm1lZC4gQWxz
bywgc2luY2UgdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zIGluIEIzIGhhdmUgYSBidWlsdC1p
biBvZmZzZXQsIHdlCisjIGRvbid0IG5lZWQgdG8gbWF0Y2ggQWRkKHgsIGNvbnN0KS4gVGhhdCB3
b3VsZCBoYXZlIGJlZW4gZm9sZGVkIGludG8gdGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zCisj
IGFscmVhZHkuIFNvLCB0aGUgb25seSBmYW5jeSBtYXRoaW5nIHRoaXMgY2FuIGRvIGlzIGp1c3Qg
QmFzZUluZGV4IGZvcm1zLgorCitBZGRTaGlmdDEgPSBBZGQoU2hsKGluZGV4LCAkbG9nU2NhbGUp
LCBiYXNlKQorQWRkU2hpZnQyID0gQWRkKGJhc2UsIFNobChpbmRleCwgJGxvZ1NjYWxlKSkKKwor
QWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitEaXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1Zh
bHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQXJndW1lbnRSZWdWYWx1ZTo6fkFyZ3VtZW50UmVnVmFsdWUoKQoreworfQorCit2
b2lkIEFyZ3VtZW50UmVnVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KG1fcmVnKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQXJndW1lbnRSZWdWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAi
UmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBBcmd1bWVu
dFJlZ1ZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBBcmd1bWVudFJlZzsgfQorICAg
IAorICAgIH5Bcmd1bWVudFJlZ1ZhbHVlKCk7CisKKyAgICBSZWcgYXJndW1lbnRSZWcoKSBjb25z
dCB7IHJldHVybiBtX3JlZzsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQ
cm9jZWR1cmU7CisKKyAgICBBcmd1bWVudFJlZ1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBBcmd1bWVudFJlZywgcmVn
LmlzR1BSKCkgPyBwb2ludGVyVHlwZSgpIDogRG91YmxlLCBvcmlnaW4pCisgICAgICAgICwgbV9y
ZWcocmVnKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHJlZy5pc1NldCgpKTsKKyAgICB9CisKKyAg
ICBSZWcgbV9yZWc7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgi
CisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY29uc3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9ICIjIjsKKworQmFz
aWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAg
ICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisK
K0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkKK3sKK30KKwordm9pZCBCYXNpY0Jsb2NrOjphcHBl
bmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1fdmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9CisKK2Jv
b2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAg
cmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNC
bG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJu
IEIzOjpyZW1vdmVQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9j
azo6cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQor
eworICAgIHJldHVybiBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKK30K
Kwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRl
ZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0
aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsKKyAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBCMzo6ZGVlcER1
bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFz
aWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9jaworI2Rl
ZmluZSBCM0Jhc2ljQmxvY2sKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Zy
ZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFByb2NlZHVyZTsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSo+IFZhbHVlTGlzdDsK
KyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAg
IHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsgLy8gVGhp
cyBtYXRjaGVzIENvbnRyb2xWYWx1ZTo6U3VjY2Vzc29yTGlzdAorCisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBWYWx1ZUxpc3Q6
Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZhbHVl
TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBWYWx1
ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuYmVn
aW4oKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXMuZW5kKCk7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgVmFsdWUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgVmFsdWUqJiBhdChzaXplX3QgaW5kZXgpIHsg
cmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorCisgICAgVmFsdWUqIGxhc3QoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICBWYWx1ZSomIGxhc3QoKSB7IHJldHVybiBtX3Zh
bHVlcy5sYXN0KCk7IH0KKworICAgIGNvbnN0IFZhbHVlTGlzdCYgdmFsdWVzKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXM7IH0KKyAgICBWYWx1ZUxpc3QmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFs
dWVzOyB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChWYWx1ZSopOworCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgVmFsdWVUeXBlKiBhcHBlbmROZXcoUHJvY2VkdXJlJiwgQXJndW1lbnRzLi4uKTsKKworICAg
IHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdDsKKyAgICBjb25zdCBGcmVxdWVudGVkQmxv
Y2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgRnJlcXVlbnRlZEJsb2Nr
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOworICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1
Y2Nlc3NvcnMoKSBjb25zdDsKKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCk7CisKKyAg
ICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAg
QmFzaWNCbG9jayomIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KTsKKyAgICBTdWNjZXNz
b3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2Nrcygp
OworICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vz
c29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1QcmVk
ZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBC
YXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9w
cmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQ
cmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNz
b3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3By
ZWRlY2Vzc29yczsgfQorCisgICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7Cisg
ICAgYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNl
UHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCisgICAgZG91
YmxlIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAK
KyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWdu
ZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAg
ICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3Jz
OworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVt
cCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJs
b2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2sp
CisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25z
dCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBk
ZWVwRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2lj
QmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9ja0lubGluZXNfaAorI2Rl
ZmluZSBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CitWYWx1ZVR5cGUqIEJhc2ljQmxvY2s6OmFwcGVuZE5ldyhQcm9jZWR1cmUmIHByb2NlZHVyZSwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHByb2Nl
ZHVyZS5hZGQ8VmFsdWVUeXBlPihhcmd1bWVudHMuLi4pOworICAgIGFwcGVuZChyZXN1bHQpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2lubGluZSB1bnNpZ25lZCBCYXNpY0Jsb2NrOjpudW1T
dWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+
KCktPm51bVN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYg
QmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVy
biBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworaW5s
aW5lIEZyZXF1ZW50ZWRCbG9jayYgQmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4
KQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGlu
ZGV4KTsKK30KKworaW5saW5lIGNvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2lj
QmxvY2s6OnN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jazo6U3VjY2Vz
c29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+
YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2Nr
KiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUgQmFzaWNCbG9j
ayomIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJl
dHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7Cit9CisKK2lubGluZSBTdWNjZXNzb3JDb2xs
ZWN0aW9uPEJhc2ljQmxvY2ssIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IEJhc2ljQmxvY2s6
OnN1Y2Nlc3NvckJsb2NrcygpCit7CisgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFz
aWNCbG9jaywgU3VjY2Vzc29yTGlzdD4oc3VjY2Vzc29ycygpKTsKK30KKworaW5saW5lIFN1Y2Nl
c3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vz
c29yTGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JM
aXN0PihzdWNjZXNzb3JzKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRp
bHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9ja1V0aWxzX2gK
KyNkZWZpbmUgQjNCYXNpY0Jsb2NrVXRpbHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCBhZGRQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAgYXV0byYg
cHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworCisgICAgaWYgKHByZWRlY2Vz
c29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHByZWRlY2Vzc29ycy5hcHBlbmQocHJlZGVjZXNzb3IpOworICAgIHJldHVybiB0cnVlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZW1vdmVQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAgYXV0byYg
cHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRl
Y2Vzc29yc1tpXSA9PSBwcmVkZWNlc3NvcikgeworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2kt
LV0gPSBwcmVkZWNlc3NvcnMubGFzdCgpOworICAgICAgICAgICAgcHJlZGVjZXNzb3JzLnJlbW92
ZUxhc3QoKTsKKyAgICAgICAgICAgIEFTU0VSVCghcHJlZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRl
Y2Vzc29yKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29s
IHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogZnJvbSwg
QmFzaWNCbG9jayogdG8pCit7CisgICAgYXV0byYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRl
Y2Vzc29ycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6
ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBmcm9tKSB7CisgICAg
ICAgICAgICBwcmVkZWNlc3NvcnNbaV0gPSB0bzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyByZWNvbXB1
dGVzIHByZWRlY2Vzc29ycyBhbmQgcmVtb3ZlcyBibG9ja3MgdGhhdCBhcmVuJ3QgcmVhY2hhYmxl
LgordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK3ZvaWQgcmVzZXRSZWFjaGFiaWxpdHko
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykKK3sKKyAgICAvLyBD
bGVhciBhbGwgcHJlZGVjZXNzb3IgbGlzdHMgZmlyc3QuCisgICAgZm9yIChhdXRvJiBibG9jayA6
IGJsb2NrcykKKyAgICAgICAgYmxvY2stPnByZWRlY2Vzc29ycygpLnJlc2l6ZSgwKTsKKworICAg
IEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gd29y
a2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChibG9ja3NbMF0uZ2V0KCkpOworICAgIHdoaWxlIChC
YXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAg
ICBpZiAod29ya2xpc3QucHVzaChzdWNjZXNzb3IpKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3Nv
ci0+cHJlZGVjZXNzb3JzKCkuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKGJsb2Nrc1tpXS0+cHJlZGVjZXNzb3JzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgYmxv
Y2tzW2ldID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja1V0aWxz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCbG9ja1dvcmtsaXN0X2gKKyNkZWZp
bmUgQjNCbG9ja1dvcmtsaXN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dy
YXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29y
a2xpc3Q7CisKKy8vIFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ugc2hvdWxkIHJlYWQg
aXQgYXMgImJsb2NrIHdpdGggYW4gaW50Ii4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJs
b2NrV2l0aCA9IEdyYXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OworCisvLyBFeHRlbmRlZCBi
bG9jayB3b3JrbGlzdCBpcyB1c2VmdWwgZm9yIGVucXVldWVpbmcgc29tZSBtZXRhLWRhdGEgYWxv
bmcgd2l0aCB0aGUgYmxvY2suIEl0IGFsc28KKy8vIHBlcm1pdHMgZm9yY2libHkgZW5xdWV1ZWlu
ZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJdCdzIHVz
ZWZ1bCBmb3IKKy8vIHRoaW5ncyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwgaW4gd2hp
Y2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQorLy8gc3VjY2Vz
c29yIGluZGV4LgordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmts
aXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8
QmFzaWNCbG9jaz4+OworCit0eXBlZGVmIEdyYXBoVmlzaXRPcmRlciBWaXNpdE9yZGVyOworCit0
eXBlZGVmIEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7CisK
K3R5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0
PEJhc2ljQmxvY2s+PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jsb2Nr
V29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNp
YWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3Bl
Y2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisK
K25hbWVzcGFjZSB7CisKK3Vuc2lnbmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQoreworICAgIHN3
aXRjaCAoaW5zdC5vcmlnaW4tPm9wY29kZSgpKSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBj
YXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIC8vIFJlc0NvbmQsIFRt
cCwgVG1wCisgICAgICAgIHJldHVybiAzOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIHJldHVy
biAxOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CisKK0NoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWdu
ZWQgbnVtQXJncykKKyAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQorICAgICwgbV9udW1DaGVj
a0FyZ3MobnVtQXJncykKK3sKK30KKworQ2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKCkKK3sK
K30KKworSW5zdCBDaGVja1NwZWNpYWw6OmhpZGRlbkJyYW5jaChjb25zdCBJbnN0JiBpbnN0KSBj
b25zdAoreworICAgIEluc3QgaGlkZGVuQnJhbmNoKG1fY2hlY2tPcGNvZGUsIGluc3Qub3JpZ2lu
KTsKKyAgICBoaWRkZW5CcmFuY2guYXJncy5yZXNpemUobV9udW1DaGVja0FyZ3MpOworICAgIGZv
ciAodW5zaWduZWQgaSA9IG1fbnVtQ2hlY2tBcmdzOyBpLS07KQorICAgICAgICBoaWRkZW5CcmFu
Y2guYXJnc1tpXSA9IGluc3QuYXJnc1tpICsgMV07CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaDsK
K30KKwordm9pZCBDaGVja1NwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2Nv
cGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGhpZGRl
bkJyYW5jaChpbnN0KS5mb3JFYWNoQXJnKGNhbGxiYWNrKTsKKyAgICBmb3JFYWNoQXJnSW1wbChu
dW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgY2FsbGJhY2spOworfQor
Citib29sIENoZWNrU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBo
aWRkZW5CcmFuY2goaW5zdCkuaXNWYWxpZEZvcm0oKQorICAgICAgICAmJiBpc1ZhbGlkSW1wbChu
dW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCk7Cit9CisKK2Jvb2wgQ2hl
Y2tTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sK
KyAgICBpZiAoYXJnSW5kZXggPj0gMSAmJiBhcmdJbmRleCA8IDEgKyBtX251bUNoZWNrQXJncykK
KyAgICAgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5hZG1pdHNTdGFjayhhcmdJbmRleCAt
IDEpOworICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNo
ZWNrQXJncyArIDEsIGluc3QsIGFyZ0luZGV4KTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENo
ZWNrU3BlY2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVy
YXRpb25Db250ZXh0JiBjb250ZXh0KQoreworICAgIENDYWxsSGVscGVyczo6SnVtcCBmYWlsID0g
aGlkZGVuQnJhbmNoKGluc3QpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgQVNTRVJUKGZh
aWwuaXNTZXQoKSk7CisKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIFZl
Y3RvcjxWYWx1ZVJlcD4gcmVwczsKKyAgICBpZiAoaXNDaGVja01hdGgodmFsdWUtPm9wY29kZSgp
KSkgeworICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNrTXVsKQorICAgICAgICAg
ICAgcmVwcy5hcHBlbmQoVmFsdWVSZXAoKSk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlLT5vcGNv
ZGUoKSA9PSBDaGVja1N1YiAmJiB2YWx1ZS0+Y2hpbGQoMCktPmlzSW50KDApKQorICAgICAgICAg
ICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDApKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1sz
XSkpOworICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5h
cmdzWzJdKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9
PSBDaGVjayk7CisgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgxKSk7Cisg
ICAgfQorCisgICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwgbV9udW1DaGVja0FyZ3MgKyAxLCBp
bnN0LCByZXBzKTsKKyAgICAKKyAgICBjb250ZXh0LmxhdGVQYXRocy5hcHBlbmQoCisgICAgICAg
IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdGlvbkNvbnRleHQ6OkxhdGVQYXRoRnVuY3Rpb24+KAor
ICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKSB7
CisgICAgICAgICAgICAgICAgZmFpbC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAg
ICAgICAgICAgICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAgICAgICAgICAgICBTdGFja21h
cDo6R2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnZhbHVl
ID0gdmFsdWU7CisgICAgICAgICAgICAgICAgcGFyYW1zLnN0YWNrbWFwID0gc3RhY2ttYXA7Cisg
ICAgICAgICAgICAgICAgcGFyYW1zLnJlcHMgPSByZXBzOworICAgICAgICAgICAgICAgIHBhcmFt
cy51c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVyczsKKworICAgICAgICAg
ICAgICAgIHN0YWNrbWFwLT5tX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKyAgICAgICAg
ICAgIH0pKTsKKworICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsgLy8gQXMgZmFyIGFz
IEFpciB0aGlua3MsIHdlIGFyZSBub3QgYSB0ZXJtaW5hbC4KK30KKwordm9pZCBDaGVja1NwZWNp
YWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1f
Y2hlY2tPcGNvZGUsICIoIiwgbV9udW1DaGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQgQ2hlY2tT
cGVjaWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoIkIzOjpDaGVja1ZhbHVlIGxvd2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwgIiB3aXRo
ICIsIG1fbnVtQ2hlY2tBcmdzLCAiIGFyZ3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQ2hlY2tTcGVjaWFsX2gKKyNkZWZpbmUgQjNDaGVja1NwZWNpYWxfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBT
cGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB3YW50
IHRvIGxvd2VyIENoZWNrIGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2Fu
dCB0byByb3V0ZSB0aGF0IGJyYW5jaCB0byBvdXIKKy8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVh
ZCBvZiBkb2luZyBhbnl0aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFs
IHdpbGwgcmVtZW1iZXIKKy8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBh
bG9uZyB3aXRoIHRoZSBudW1iZXIgb2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQK
Ky8vIHdpbGwgY3JlYXRlIGFuIEluc3Qgd2l0aCB0aGF0IG9wY29kZSBwbHVzIHRoZSBhcHByb3By
aWF0ZSBhcmdzIGZyb20gdGhlIG93bmluZyBJbnN0IHdoZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkg
b2YgdGhlIGNhbGxiYWNrcy4KKy8vCisvLyBOb3RlIHRoYXQgZm9yIENoZWNrQWRkLCBDaGVja1N1
YiwgYW5kIENoZWNrTXVsIHdlIGV4cGVjdCB0aGF0IHRoZSBCMyBhcmd1bWVudHMgYXJlIHRoZSBy
ZXZlcnNlCisvLyBvZiB0aGUgQWlyIGFyZ3VtZW50cyAoQWRkKGEsIGIpID0+IEFkZDMyIGIsIGEp
LiBFeGNlcHQ6CisvLyAtIENoZWNrU3ViKDAsIHgpLCB3aGljaCB0dXJucyBpbnRvIEJyYW5jaE5l
ZzMyIHguCisvLyAtIENoZWNrTXVsKGEsIGIpLCB3aGljaCB0dXJucyBpbnRvIE11bDMyIGIsIGEg
YnV0IHdlIHBhc3MgQW55IGZvciBhJ3MgVmFsdWVSZXAuCisKK2NsYXNzIENoZWNrU3BlY2lhbCA6
IHB1YmxpYyBTdGFja21hcFNwZWNpYWwgeworcHVibGljOgorICAgIENoZWNrU3BlY2lhbChBaXI6
Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsK
KworICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRo
ZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAgIEFpcjo6SW5zdCBoaWRkZW5CcmFuY2go
Y29uc3QgQWlyOjpJbnN0JikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hB
cmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxi
YWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsK
KyAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVy
cmlkZTsKKworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0
aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAv
LyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2Vu
ZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEFpcjo6T3Bjb2RlIG1fY2hlY2tPcGNv
ZGU7CisgICAgdW5zaWduZWQgbV9udW1DaGVja0FyZ3M7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NoZWNr
U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNDaGVja1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworQ2hlY2tWYWx1ZTo6fkNoZWNrVmFsdWUoKQoreworfQorCit2
b2lkIENoZWNrVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ2hlY2tWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBDaGVja0Fk
ZDoKKyAgICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAgICAg
ICAgY2FzZSBDaGVjazoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfkNo
ZWNrVmFsdWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBD
aGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011bC4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3Jp
Z2luLCBsZWZ0LCByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludCh0eXBlKCkpKTsK
KyAgICAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKKyAgICAgICAg
QVNTRVJUKG9wY29kZSA9PSBDaGVja0FkZCB8fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2Rl
ID09IENoZWNrTXVsKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4K
KyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogcHJlZGljYXRlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZv
aWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBD
aGVjayk7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gKKworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKyNp
bmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCiti
b29sIHNob3VsZER1bXBJUigpCit7CisgICAgcmV0dXJuIEZUTDo6dmVyYm9zZUNvbXBpbGF0aW9u
RW5hYmxlZCgpIHx8IEZUTDo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgc2hvdWxkRHVtcElS
QXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpCit7Cisg
ICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hv
dWxkVmFsaWRhdGVJUigpCit7CisgICAgcmV0dXJuIERGRzo6dmFsaWRhdGlvbkVuYWJsZWQoKSB8
fCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0
ZUlSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRF
YWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpCit7CisgICAg
cmV0dXJuIE9wdGlvbnM6OnZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
Q29tbW9uX2gKKyNkZWZpbmUgQjNDb21tb25faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2lubGluZSBib29sIGlzNjRCaXQoKSB7IHJl
dHVybiBzaXplb2Yodm9pZCopID09IDg7IH0KK2lubGluZSBib29sIGlzMzJCaXQoKSB7IHJldHVy
biAhaXM2NEJpdCgpOyB9CisKK2Jvb2wgc2hvdWxkRHVtcElSKCk7Citib29sIHNob3VsZER1bXBJ
UkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVIoKTsKK2Jvb2wgc2hvdWxkVmFs
aWRhdGVJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCk7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzQ29tbW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29tbXV0YXRpdml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tbXV0YXRpdml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW11dGF0aXZpdHkuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5KQoreworICAgIHN3aXRjaCAo
Y29tbXV0YXRpdml0eSkgeworICAgIGNhc2UgQ29tbXV0YXRpdmU6CisgICAgICAgIG91dC5wcmlu
dCgiQ29tbXV0YXRpdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTm90Q29tbXV0YXRp
dmU6CisgICAgICAgIG91dC5wcmludCgiTm90Q29tbXV0YXRpdmUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0NvbW11dGF0aXZpdHlfaAorI2RlZmluZSBCM0NvbW11dGF0aXZpdHlfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2VudW0gQ29tbXV0YXRpdml0eSB7CisgICAgQ29tbXV0YXRpdmUsCisgICAgTm90Q29tbXV0YXRp
dmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwor
Y2xhc3MgUHJpbnRTdHJlYW07Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkIzOjpDb21tdXRhdGl2aXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb21tdXRhdGl2aXR5X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0
dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJp
c29uTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisjIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
IyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9S
UyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJ
QlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
CisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIENvbXBhcmlzb25NYXRj
aGVyCisKK1Rlc3RMb2FkTm90WmVybzEgPSBBbmQoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitUZXN0
TG9hZE5vdFplcm8yID0gQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpCitUZXN0Tm90WmVybyA9IEFu
ZChsZWZ0LCByaWdodCkKKworVGVzdExvYWRaZXJvMSA9IEVxdWFsKEFuZChMb2FkKGFkZHJlc3Mp
LCByaWdodCksICQwKQorVGVzdExvYWRaZXJvMiA9IEVxdWFsKEFuZChsZWZ0LCBMb2FkKGFkZHJl
c3MpKSwgJDApCitUZXN0WmVybyA9IEVxdWFsKEFuZChsZWZ0LCByaWdodCksICQwKQorCitMb2Fk
RXF1YWwxID0gRXF1YWwoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitMb2FkRXF1YWwyID0gRXF1YWwo
bGVmdCwgTG9hZChhZGRyZXNzKSkKK05vdCA9IEVxdWFsKHZhbHVlLCAkMCkKK0VxdWFsID0gRXF1
YWwobGVmdCwgcmlnaHQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDMyVmFsdWU6On5Db25zdDMy
VmFsdWUoKQoreworfQorCit2b2lkIENvbnN0MzJWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzQ29uc3QzMlZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDMyVmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnN0MzJWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQ29uc3QzMjsgfQorICAgIAorICAgIEpTX0VY
UE9SVF9QUklWQVRFIH5Db25zdDMyVmFsdWUoKTsKKyAgICAKKyAgICBpbnQzMl90IHZhbHVlKCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDMyVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIENvbnN0MzIsIEludDMyLCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1
ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDMyX3QgbV92YWx1ZTsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0NjRWYWx1ZTo6fkNv
bnN0NjRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3Q2NFZhbHVlIDogcHVibGljIFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsg
cmV0dXJuIG9wY29kZSA9PSBDb25zdDY0OyB9CisgICAgCisgICAgfkNvbnN0NjRWYWx1ZSgpOwor
ICAgIAorICAgIGludDY0X3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0NjRW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgQ29uc3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAgICAgLCBtX3Zh
bHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNDb25zdDY0VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1
ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9p
ZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM0NvbnN0RG91YmxlVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0RG91Ymxl
VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUg
OiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2Rl
IG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNv
bnN0RG91YmxlVmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFt
JikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKKworICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4s
IGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJs
ZSwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICBkb3VibGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3REb3VibGVWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDb250cm9sVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK0NvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpCit7Cit9CisK
K3ZvaWQgQ29udHJvbFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChsaXN0RHVtcChtX3N1Y2Nlc3NvcnMpKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzQ29udHJvbFZhbHVlX2gKKyNkZWZpbmUgQjNDb250cm9sVmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgQmFzaWNCbG9jazsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29udHJvbFZhbHVlIDog
cHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBv
cGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIEp1
bXA6CisgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAg
Y2FzZSBPb3BzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU3dpdGNo
OiAKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEg
c3ViY2xhc3Mgb2YgQ29udHJvbFZhbHVlLCBzbyB3ZSB3YW50CisgICAgICAgICAgICAvLyBzd2l0
Y2hWYWx1ZS0+YXM8Q29udHJvbFZhbHVlPigpIHRvIHJldHVybiBub24tbnVsbC4KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJs
b2NrLCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbnRyb2xW
YWx1ZSgpOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nv
cih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQor
ICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1
Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKworcHJvdGVjdGVkOgorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50
cy4uLikKKyAgICB7CisgICAgfQorCisgICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVsYXRlIHRo
aXMuCisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgorICAgIENv
bnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikK
KyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAg
ICAgICBBU1NFUlQob3Bjb2RlID09IE9vcHMpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZv
ciBSZXR1cm4uCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcmVzdWx0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBv
cGNvZGUsIFZvaWQsIG9yaWdpbiwgcmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29k
ZSA9PSBSZXR1cm4pOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENv
bnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwg
Y29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9w
Y29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1w
KTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKworICAgIC8v
IFVzZSB0aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwK
KyAgICAgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9j
ayYgbm8pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVk
aWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAgICAg
IG1fc3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChu
byk7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb250cm9sVmFsdWVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzRnJlcXVl
bmN5Q2xhc3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRnJlcXVlbmN5Q2xhc3MgZnJl
cXVlbmN5KQoreworICAgIHN3aXRjaCAoZnJlcXVlbmN5KSB7CisgICAgY2FzZSBGcmVxdWVuY3lD
bGFzczo6Tm9ybWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vcm1hbCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBGcmVxdWVuY3lDbGFzczo6UmFyZToKKyAgICAgICAgb3V0LnByaW50KCJS
YXJlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lD
bGFzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0ZyZXF1ZW5jeUNsYXNzX2gK
KyNkZWZpbmUgQjNGcmVxdWVuY3lDbGFzc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBGcmVxdWVuY3lDbGFzcyA6
IHVpbnQ4X3QgeworICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IGh5cG90aGVzaXMgYWJvdXQgdGhl
IGZyZXF1ZW5jeSBvZiB0aGlzIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QuIFRoaXMgaXMKKyAgICAv
LyB0aGUgY29tbW9uIGNhc2UuIFdlIGNhbiBzdGlsbCB1c2UgYmFzaWMgYmxvY2sgZnJlcXVlbmN5
IGluIHRoaXMgY2FzZS4KKyAgICBOb3JtYWwsCisKKyAgICAvLyBXZSBleHBlY3QgdGhhdCB0aGlz
IGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3Qgd2lsbCBiZSByZWFjaGVkIHN1cGVyIHJhcmVseS4gSXQn
cyB2YWxpZCB0bworICAgIC8vIHBlcmZvcm0gb3B0aW1pemF0aW9ucyB0aGF0IHB1bmlzaCBSYXJl
IGNvZGUuIE5vdGUgdGhhdCB0aGVyZSB3aWxsIGJlIHNpdHVhdGlvbnMgd2hlcmUgeW91CisgICAg
Ly8gaGF2ZSB0byBzb21laG93IGNvbnN0cnVjdCBhIG5ldyBmcmVxdWVuY3kgY2xhc3MgZnJvbSBh
IG1lcmdpbmcgb2YgbXVsdGlwbGUgY2xhc3Nlcy4gV2hlbgorICAgIC8vIHRoaXMgaGFwcGVucywg
bmV2ZXIgY2hvb3NlIFJhcmU7IGFsd2F5cyBnbyB3aXRoIE5vcm1hbC4gVGhpcyBpcyBuZWNlc3Nh
cnkgYmVjYXVzZSB3ZQorICAgIC8vIHJlYWxseSBkbyBwdW5pc2ggUmFyZSBjb2RlIHZlcnkgYmFk
bHkuCisgICAgUmFyZQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpCMzo6RnJlcXVlbmN5Q2xhc3MpOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW5jeUNsYXNz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2Nr
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVudGVk
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVudGVkQmxvY2tf
aAorI2RlZmluZSBCM0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVx
dWVudGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Zy
ZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVy
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNHZW5lcmF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKyNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIEFpcjo6Q29kZSBjb2RlOworICAgIGdl
bmVyYXRlVG9BaXIocHJvY2VkdXJlLCBjb2RlKTsKKyAgICBBaXI6OmdlbmVyYXRlKGNvZGUsIGpp
dCk7Cit9CisKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQWlyOjpD
b2RlJiBjb2RlKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlk
YXRlKHByb2NlZHVyZSwgImluaXRpYWwiKTsKKworICAgIGlmIChzaG91bGREdW1wSVIoKSkgewor
ICAgICAgICBkYXRhTG9nKCJJbml0aWFsIEIzOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2Vk
dXJlKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJl
LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcK
KworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKHByb2NlZHVy
ZSwgImZpbmFsIik7CisgICAgCisgICAgaWYgKHNob3VsZER1bXBJUigpKSB7CisgICAgICAgIGRh
dGFMb2coIkIzIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2Vk
dXJlKTsKKyAgICB9CisKKyAgICBsb3dlclRvQWlyKHByb2NlZHVyZSwgY29kZSk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNHZW5lcmF0ZV9oCisjZGVmaW5lIEIzR2VuZXJhdGVfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENv
ZGU7IH0KKworLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1w
bGFjZSwgYW5kIGdlbmVyYXRlcyBpdCB0byBtYWNoaW5lIGNvZGUgYnkgZmlyc3QKKy8vIGludGVy
bmFsbHkgY29udmVydGluZyB0byBhbiBBaXI6OkNvZGUgYW5kIHRoZW4gZ2VuZXJhdGluZyB0aGF0
LgorSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmLCBDQ2FsbEhlbHBl
cnMmKTsKKworLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1w
bGFjZSwgYW5kIGxvd2VycyBpdCB0byBBaXIuIFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQorLy8gdGhl
IEFpciB0byBtYWNoaW5lIGNvZGUgdXNpbmcgQWlyOjpnZW5lcmF0ZSgpLiBOb3RlIHRoYXQgYW4g
QWlyOjpDb2RlIHdpbGwgaGF2ZSBwb2ludGVycyBpbnRvIHRoZQorLy8gQjM6OlByb2NlZHVyZSwg
c28geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIEIzOjpQcm9jZWR1cmUgb3V0bGl2ZXMgdGhl
IEFpcjo6Q29kZS4KK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNHZW5lcmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisjZGVm
aW5lIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVxdWVudGVkIGJs
b2NrIGlzIGEgdHVwbGUgb2YgQmFzaWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNzLiBJdCdzIHVz
dWFsbHkgdXNlZCBhcyBhCisvLyBzdWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8dHlwZW5hbWUg
QmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVibGljOgorICAg
IGV4cGxpY2l0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2soCisgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbnVsbHB0ciwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVlbmN5Q2xhc3M6
Ok5vcm1hbCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fZnJlcXVlbmN5
KGZyZXF1ZW5jeSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdl
bmVyaWNGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fYmxvY2sgPT0gb3RoZXIubV9ibG9jaworICAgICAgICAgICAgJiYgbV9mcmVxdWVuY3kgPT0g
b3RoZXIubV9mcmVxdWVuY3k7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdl
bmVyaWNGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IEdlbmVyaWNGcmVxdWVudGVk
QmxvY2soKTsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2s7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2NrOyB9
CisgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVu
Y3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKGZyZXF1ZW5jeSgpICE9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpCisgICAgICAg
ICAgICBvdXQucHJpbnQoZnJlcXVlbmN5KCksICI6Iik7CisgICAgICAgIG91dC5wcmludChwb2lu
dGVyRHVtcChtX2Jsb2NrKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1f
YmxvY2s7CisgICAgRnJlcXVlbmN5Q2xhc3MgbV9mcmVxdWVuY3k7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNJbmRleE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0luZGV4TWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJ
bmRleE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4TWFwX2gKKyNk
ZWZpbmUgQjNJbmRleE1hcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBp
cyBhIG1hcCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2ll
bnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlm
IHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNh
biBoYXZlIHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFs
dWVzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5k
ZXhNYXAgeworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkK
KyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lk
IHJlc2l6ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXpl
KTsKKyAgICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgIH0KKyAgICAKKyAgICBjb25z
dCBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVj
dG9yPFZhbHVlPiBtX3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzSW5kZXhNYXBfaApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2luY2x1ZGUgPHd0
Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0aGluZ3MgdGhh
dCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nrcy4g
SXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRlIHRv
byBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5IHNwYXJzZQor
Ly8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8gSWYgeW91IHdh
bnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Jsb2NrPi4gU28s
IFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluZGV4U2V0IHsK
K3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYWRkKFQq
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUtPmluZGV4KCkp
OworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gbV9zZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBjbGFzcyBJdGVyYWJsZSB7CisgICAgcHVibGljOgor
ICAgICAgICBJdGVyYWJsZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3Qg
SW5kZXhTZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKGNvbGxlY3Rpb24pCisg
ICAgICAgICAgICAsIG1fc2V0KHNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigp
CisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29sbGVjdGlvblR5
cGUmIGNvbGxlY3Rpb24sIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBpdGVy
KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAg
ICAgICAgICwgbV9pdGVyKGl0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX2l0ZXIrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faXRlciA9PSBv
dGhlci5tX2l0ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSogbV9jb2xsZWN0aW9u
OworICAgICAgICAgICAgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yIG1faXRl
cjsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuYmVnaW4oKSk7IH0KKyAgICAgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5lbmQo
KSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlJiBtX2Nv
bGxlY3Rpb247CisgICAgICAgIGNvbnN0IEluZGV4U2V0JiBtX3NldDsKKyAgICB9OworCisgICAg
Ly8gRm9yIGJhc2ljIGJsb2NrcywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9j
ZWR1cmUpOworICAgIC8vCisgICAgLy8gRm9yIHZhbHVlcywgeW91IGRvOgorICAgIC8vIGluZGV4
U2V0LnZhbHVlcyhwcm9jZWR1cmUudmFsdWVzKCkpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENv
bGxlY3Rpb25UeXBlPgorICAgIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPiB2YWx1ZXMoY29uc3Qg
Q29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
SXRlcmFibGU8Q29sbGVjdGlvblR5cGU+KGNvbGxlY3Rpb24pOworICAgIH0KKworICAgIGNvbnN0
IEJpdFZlY3RvciYgaW5kaWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbW1hUHJpbnRl
ciBjb21tYTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBpbmRpY2VzKCkuc2V0Qml0cygp
KQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBUOjpkdW1wUHJlZml4LCBpbmRleCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEJpdFZlY3RvciBtX3NldDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNJbmRleFNldF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0
SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQWRkcmVzc01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisjaW5jbHVk
ZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlICJCM0xv
d2VyaW5nTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRlICJC
M1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVXNl
Q291bnRzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlz
dER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVz
cGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIExvd2VyVG9BaXIgeworcHVibGljOgor
ICAgIExvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCisgICAgICAg
IDogdmFsdWVUb1RtcChwcm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQorICAgICAgICAsIGJsb2Nr
VG9CbG9jayhwcm9jZWR1cmUuc2l6ZSgpKQorICAgICAgICAsIHVzZUNvdW50cyhwcm9jZWR1cmUp
CisgICAgICAgICwgYWRkcmVzc1NlbGVjdG9yKCp0aGlzKQorICAgICAgICAsIGxvd2VyaW5nU2Vs
ZWN0b3IoKnRoaXMpCisgICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBj
b2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAg
IGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlKQorICAgICAgICAgICAgYmxv
Y2tUb0Jsb2NrW2Jsb2NrXSA9IGNvZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1ZW5jeSgpKTsKKwor
ICAgICAgICAvLyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlz
IGlzIGEgZ29vZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKKyAgICAgICAgLy8gaG9pc3RlZCBh
ZGRyZXNzIGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxv
b3AuCisgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlLmJsb2Nr
c0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KKyAgICAg
ICAgICAgIGluc3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJv
Y2VzcyBibG9ja3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4g
VGhhdCdzIHdoYXQgYWxsb3dzIHVzCisgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBl
ZmZlY3RpdmVseS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7
IGktLTspIHsKKyAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOwor
ICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAg
ICAgICBydW5Mb3dlcmluZ01hdGNoZXIoY3VycmVudFZhbHVlLCBsb3dlcmluZ1NlbGVjdG9yKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rp
b25zLiBpbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MK
KyAgICAgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBpbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGlu
c3QgOiBpbnN0c1tpXSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+
YXBwZW5kSW5zdChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4K
KyAgICAgICAgICAgIEFTU0VSVChibG9jay0+c3VjY2Vzc29ycygpLnNpemUoKSA8PSAyKTsKKyAg
ICAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNz
b3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNz
b3JzKCkuYXBwZW5kKGJsb2NrVG9CbG9ja1tzdWNjZXNzb3JdKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIFRtcCB0bXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgVG1wJiB0bXAgPSB2
YWx1ZVRvVG1wW3ZhbHVlXTsKKyAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAgICB0bXAgPSBj
b2RlLm5ld1RtcChpc0ludCh2YWx1ZS0+dHlwZSgpKSA/IEFyZzo6R1AgOiBBcmc6OkZQKTsKKyAg
ICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGdpdmVzIHlvdSB0aGUgYWRk
cmVzcyBvZiB0aGUgZ2l2ZW4gTG9hZCBvciBTdG9yZS4gSWYgaXQncyBub3QgYSBMb2FkIG9yIFN0
b3JlLCB0aGVuCisgICAgLy8gaXQgcmV0dXJucyBBcmcoKS4KKyAgICBBcmcgYWRkcihWYWx1ZSog
bWVtb3J5VmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogdmFsdWUgPSBtZW1vcnlW
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gQXJnKCk7CisKKyAgICAgICAgcnVuQWRkcmVzc01hdGNoZXIodmFsdWUtPmNoaWxk
cmVuKCkubGFzdCgpLCBhZGRyZXNzU2VsZWN0b3IpOworICAgICAgICByZXR1cm4gYWRkcmVzc1Nl
bGVjdG9yLnNlbGVjdGVkQWRkcmVzcy53aXRoT2Zmc2V0KHZhbHVlLT5vZmZzZXQoKSk7CisgICAg
fQorCisgICAgQXJnIGxvYWRBZGRyKFZhbHVlKiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICBp
ZiAobG9hZFZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkKQorICAgICAgICAgICAgcmV0dXJuIGFkZHIo
bG9hZFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW0o
VmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAg
ICAgICAgICAgcmV0dXJuIEFyZzo6aW1tKHZhbHVlLT5hc0ludDMyKCkpOworICAgICAgICByZXR1
cm4gQXJnKCk7CisgICAgfQorCisgICAgQXJnIGltbU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGlmIChBcmcgcmVzdWx0ID0gaW1tKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgICAgIHJldHVybiB0bXAodmFsdWUpOworICAgIH0KKworICAgIHRlbXBs
YXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90
Q29tbXV0YXRpdmU+CisgICAgdm9pZCBhcHBlbmRCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdCA9IHRtcChjdXJyZW50VmFsdWUpOworICAg
ICAgICAKKyAgICAgICAgLy8gVGhyZWUtb3BlcmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAg
ICAgT3AgYSwgYiwgYworICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAv
LyAgICAgYyA9IGEgT3AgYgorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6
SW1tLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0
eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAgICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwg
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQSBub24tY29tbXV0YXRp
dmUgb3BlcmF0aW9uIGNvdWxkIGhhdmUgYW4gaW1tZWRpYXRlIGluIGxlZnQuCisgICAgICAgICAg
ICAgICAgaWYgKGltbShsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2Rl
LCBpbW0obGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoaW1tKHJpZ2h0KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6
OkltbSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCks
IGltbShyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBUd28tb3BlcmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAgICAgT3AgYSwg
YgorICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAgICAgYiA9IGIg
T3AgYQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIHByZWZlciB2ZXJzaW9ucyBvZiB0
aGUgb3BlcmF0aW9uIHRoYXQgaGF2ZSBhIGZ1c2VkIGxvYWQgb3ZlciB0aHJlZQorICAgICAgICAv
LyBvcGVyYW5kIGZvcm1zLgorICAgICAgICAKKyAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0g
Q29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAgIEFyZyBsZWZ0QWRkciA9IGxvYWRBZGRyKGxlZnQp
OworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgbGVmdEFkZHIua2luZCgpLCBB
cmc6OlRtcCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVXNlIHRoZSByaWdodCBNb3Zl
IG9wY29kZS4gSWYgd2UncmUgZGVhbGluZyB3aXRoIDMyLWJpdCB0eXBlcywgd2Ugc2hvdWxkCisg
ICAgICAgICAgICAgICAgLy8gdXNlIE1vdmUzMi4gSWYgd2UncmUgZGVhbGluZyB3aXRoIERvdWJs
ZXMsIHdlIHNob3VsZCB1c2UgTW92ZURvdWJsZS4KKyAgICAgICAgICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTMzCisgICAgICAgICAgICAgICAg
YXBwZW5kKE1vdmUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5k
KG9wY29kZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQXJnIHJpZ2h0QWRkciA9IGxvYWRBZGRy
KHJpZ2h0KTsKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgcmlnaHRBZGRyLmtpbmQo
KSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1
bHQpOworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLCByZXN1bHQpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9w
Y29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3Vs
dCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21tdXRhdGl2aXR5IGNvbW11dGF0
aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICBib29sIHRyeUFwcGVuZFN0b3JlQmluT3AoVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGZh
aWxzIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZWZmZWN0cyBiZXR3ZWVuIHRoZSBMb2FkIGFu
ZCB0aGUgU3RvcmUgdGhhdAorICAgICAgICAvLyBjb3VsZCBjbG9iYmVyIHRoZSBsb2FkZWQgdmFs
dWUuIFdlIG5lZWQgdG8gY2hlY2sgc3VjaCB0aGluZ3MgYmVjYXVzZSB3ZSBhcmUgZWZmZWN0aXZl
bHkKKyAgICAgICAgLy8gc2lua2luZyB0aGUgbG9hZC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzNAorICAgICAgICAKKyAgICAgICAgQXJn
IHN0b3JlQWRkciA9IGFkZHIoY3VycmVudFZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHN0b3JlQWRk
cik7CisKKyAgICAgICAgVmFsdWUqIG90aGVyVmFsdWU7CisgICAgICAgIGlmIChhZGRyKGxlZnQp
ID09IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSByaWdodDsKKyAgICAgICAg
ZWxzZSBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSAmJiBhZGRyKHJpZ2h0KSA9PSBz
dG9yZUFkZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gbGVmdDsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bj
b2RlLCBBcmc6OlRtcCwgc3RvcmVBZGRyLmtpbmQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG90aGVyVmFsdWUpLCBzdG9yZUFkZHIp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQWlyOjpPcGNvZGUgb3Bjb2RlLCBBcmd1bWVu
dHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKElu
c3Qob3Bjb2RlLCBjdXJyZW50VmFsdWUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50
cykuLi4pKTsKKyAgICB9CisgICAgCisgICAgSW5kZXhTZXQ8VmFsdWU+IGxvY2tlZDsgLy8gVGhl
c2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgorICAgIEluZGV4TWFw
PFZhbHVlLCBUbXA+IHZhbHVlVG9UbXA7CisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2ssIEFp
cjo6QmFzaWNCbG9jayo+IGJsb2NrVG9CbG9jazsKKworICAgIFVzZUNvdW50cyB1c2VDb3VudHM7
CisKKyAgICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBpbnN0czsKKworICAgIFZhbHVlKiBjdXJy
ZW50VmFsdWU7CisKKyAgICAvLyBUaGUgYWRkcmVzcyBzZWxlY3RvciB3aWxsIG1hdGNoIGFueSBw
YXR0ZXJuIHdoZXJlIHRoZSBpbnB1dCBvcGVyYW5kcyBhcmUgYXZhaWxhYmxlIGFzIFRtcHMuCisg
ICAgLy8gSXQgZG9lc24ndCBjYXJlIGFib3V0IHNoYXJpbmcuIEl0IHdpbGwgaGFwcGlseSBlbWl0
IHRoZSBzYW1lIGFkZHJlc3MgZXhwcmVzc2lvbiBvdmVyIGFuZCBvdmVyCisgICAgLy8gYWdhaW4g
cmVnYXJkbGVzcyBvZiB0aGUgZXhwcmVzc2lvbidzIGNvbXBsZXhpdHkuIFRoaXMgd29ya3Mgb3V0
IGZpbmUsIHNpbmNlIGF0IHRoZSBtYWNoaW5lCisgICAgLy8gbGV2ZWwsIGFkZHJlc3MgZXhwcmVz
c2lvbnMgYXJlIHN1cGVyIGNoZWFwLiBIb3dldmVyLCB0aGlzIGRvZXMgaGF2ZSBhIGhhY2sgdG8g
YXZvaWQKKyAgICAvLyAidW5ob2lzdGluZyIgYWRkcmVzcyBleHByZXNzaW9ucy4KKyAgICBjbGFz
cyBBZGRyZXNzU2VsZWN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgQWRkcmVzc1NlbGVjdG9y
KExvd2VyVG9BaXImIGxvd2VyKQorICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAgICAg
eworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAg
ICAgICB7CisgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIG1hdGNoIGFuIGFkZHJlc3Mg
ZXhwcmVzc2lvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQKKyAgICAgICAgICAgIC8v
IGV4cGxpY2l0bHkuCisgICAgICAgICAgICByZXR1cm4gIWxvd2VyLnZhbHVlVG9UbXBbcm9vdF07
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFjY2VwdFJvb3RMYXRlKFZhbHVlKikgeyB9CisK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFj
Y2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxz
KGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMo
KSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0K
KworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wg
YWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICB7CisgICAgICAgICAgICBpZiAobG93ZXIubG9ja2VkLmNvbnRhaW5zKHZhbHVlKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYWNjZXB0T3Bl
cmFuZHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFjY2VwdE9wZXJh
bmRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7
IH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MShWYWx1ZSogaW5kZXgsIFZhbHVlKiBsb2dT
Y2FsZSwgVmFsdWUqIGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb2dTY2FsZS0+
YXNJbnQoKSA8IDAgfHwgbG9nU2NhbGUtPmFzSW50KCkgPiAzKQorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6aW5kZXgoCisg
ICAgICAgICAgICAgICAgbG93ZXIudG1wKGJhc2UpLCBsb3dlci50bXAoaW5kZXgpLCAxIDw8IGxv
Z1NjYWxlLT5hc0ludCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDIoVmFsdWUqIGJhc2UsIFZhbHVlKiBpbmRleCwgVmFs
dWUqIGxvZ1NjYWxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ5QWRkU2hpZnQx
KGluZGV4LCBsb2dTY2FsZSwgYmFzZSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFk
ZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAo
cmlnaHQtPmhhc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHByb2R1Y3Rpb24g
aXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHNpbmNlIHdlIGV4cGVjdAorICAgICAgICAgICAgICAg
IC8vIExvYWQoQWRkKEB4LCBAY29uc3QxKSwgb2Zmc2V0ID0gY29uc3QyKSB0byBoYXZlIGFscmVh
ZHkgYmVlbiBzdHJlbmd0aC1yZWR1Y2VkCisgICAgICAgICAgICAgICAgLy8gdG8gTG9hZChAeCwg
b2Zmc2V0ID0gY29uc3QxICsgY29uc3QyKS4KKyAgICAgICAgICAgICAgICBzZWxlY3RlZEFkZHJl
c3MgPSBBcmc6OmFkZHIobG93ZXIudG1wKGxlZnQpLCByaWdodC0+YXNJbnQzMigpKTsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2Vs
ZWN0ZWRBZGRyZXNzID0gQXJnOjppbmRleChsb3dlci50bXAobGVmdCksIGxvd2VyLnRtcChyaWdo
dCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHRyeURpcmVjdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFy
Zzo6YWRkcihsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93ZXJUb0FpciYgbG93ZXI7
CisgICAgICAgIEFyZyBzZWxlY3RlZEFkZHJlc3M7CisgICAgfTsKKyAgICBBZGRyZXNzU2VsZWN0
b3IgYWRkcmVzc1NlbGVjdG9yOworCisgICAgLy8gVGhpcyB3aWxsIG1hdGNoIGNvbXBsZXggbXVs
dGktdmFsdWUgZXhwcmVzc2lvbnMsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG5vIHNoYXJpbmcuIEZv
ciBleGFtcGxlLAorICAgIC8vIGl0IHdvbid0IG1hdGNoIGEgTG9hZCB0d2ljZSBhbmQgY2F1c2Ug
dGhlIGdlbmVyYXRlZCBjb2RlIHRvIGRvIHR3byBsb2FkcyB3aGVuIHRoZSBvcmlnaW5hbAorICAg
IC8vIGNvZGUganVzdCBkaWQgb25lLgorICAgIGNsYXNzIExvd2VyaW5nU2VsZWN0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgTG93ZXJpbmdTZWxlY3RvcihMb3dlclRvQWlyJiBsb3dlcikKKyAg
ICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKHJvb3QsICFsb3dlci5sb2NrZWQuY29udGFpbnMocm9vdCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFjY2Vw
dFJvb3RMYXRlKFZhbHVlKikgeyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1
ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYg
b25lIG9mIHRoZSBpbnRlcm5hbCB0aGluZ3MgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZCwgdGhl
biB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCisgICAgICAgICAgICAvLyBpdCB0byBiZSByZWNvbXB1
dGVkIGFnYWluLgorICAgICAgICAgICAgaWYgKGxvd2VyLnZhbHVlVG9UbXBbdmFsdWVdKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8g
V2UgcmVxdWlyZSBpbnRlcm5hbHMgdG8gaGF2ZSBvbmx5IG9uZSB1c2UgLSB1cy4KKyAgICAgICAg
ICAgIGlmIChsb3dlci51c2VDb3VudHNbdmFsdWVdICE9IDEpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJu
YWxzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5h
bHMoKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZShWYWx1ZSog
dmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxv
d2VyLmxvY2tlZC5hZGQodmFsdWUpOworICAgICAgICAgICAgYWNjZXB0SW50ZXJuYWxzTGF0ZShh
cmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0
ZSgpIHsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250
YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAg
cmV0dXJuIGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAg
Ym9vbCBhY2NlcHRPcGVyYW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRl
KEFyZ3VtZW50cy4uLikgeyB9CisKKyAgICAgICAgYm9vbCB0cnlMb2FkKFZhbHVlKiBhZGRyZXNz
KQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxvd2VyLmN1cnJlbnRWYWx1ZS0+dHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIGxvd2VyLmFw
cGVuZChNb3ZlMzIsIGxvd2VyLmFkZHIoYWRkcmVzcyksIGxvd2VyLnRtcChsb3dlci5jdXJyZW50
VmFsdWUpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2Ug
SW50NjQ6CisgICAgICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSkgeworICAgICAgICAgICAgICAg
ICAgICBsb3dlci5hcHBlbmQoTW92ZSwgbG93ZXIuYWRkcihhZGRyZXNzKSwgbG93ZXIudG1wKGxv
d2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmVEb3VibGUs
IGxvd2VyLmFkZHIoYWRkcmVzcyksIGxvd2VyLnRtcChsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCB0cnlBZGQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgeworICAg
ICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6
CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kQmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihs
ZWZ0LCByaWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgICAgICBib29sIHRyeVN0b3JlQWRkTG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
LCBWYWx1ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiBsb3dlci50
cnlBcHBlbmRTdG9yZUJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1v
cmUgdHlwZXMhCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlTdG9yZUFuZExvYWQoVmFsdWUqIGxlZnQsIFZh
bHVlKiByaWdodCwgVmFsdWUqKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxlZnQt
PnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1
cm4gbG93ZXIudHJ5QXBwZW5kU3RvcmVCaW5PcDxBbmQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IElt
cGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmUoVmFsdWUqIHZhbHVl
LCBWYWx1ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQo
TW92ZTMyLCBsb3dlci50bXAodmFsdWUpLCBsb3dlci5hZGRyKGxvd2VyLmN1cnJlbnRWYWx1ZSkp
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgY2FzZSBJbnQ2NDoK
KyAgICAgICAgICAgICAgICBpZiAoaXM2NEJpdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxv
d2VyLmFwcGVuZChNb3ZlLCBsb3dlci50bXAodmFsdWUpLCBsb3dlci5hZGRyKGxvd2VyLmN1cnJl
bnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBE
b3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmVEb3VibGUsIGxvd2VyLnRt
cCh2YWx1ZSksIGxvd2VyLmFkZHIobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5
Q29uc3QzMigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBsb3dl
ci5pbW0obG93ZXIuY3VycmVudFZhbHVlKSwgbG93ZXIudG1wKGxvd2VyLmN1cnJlbnRWYWx1ZSkp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRy
eVJldHVybihWYWx1ZSogdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFs
dWUtPnR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGNhc2Ug
SW50NjQ6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUsIGxvd2VyLmltbU9yVG1w
KHZhbHVlKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgICAgICBsb3dlci5h
cHBlbmQoTW92ZURvdWJsZSwgbG93ZXIudG1wKHZhbHVlKSwgVG1wKEZQUkluZm86OnJldHVyblZh
bHVlRlBSKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG93ZXIuYXBw
ZW5kKFJldCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgTG93ZXJUb0FpciYgbG93ZXI7CisgICAgfTsKKyAgICBMb3dlcmluZ1NlbGVjdG9y
IGxvd2VyaW5nU2VsZWN0b3I7CisgICAgCisgICAgUHJvY2VkdXJlJiBwcm9jZWR1cmU7CisgICAg
Q29kZSYgY29kZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGxvd2Vy
VG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29w
ZSBwaGFzZVNjb3BlKHByb2NlZHVyZSwgImxvd2VyVG9BaXIiKTsKKyAgICBMb3dlclRvQWlyIGxv
d2VyVG9BaXIocHJvY2VkdXJlLCBjb2RlKTsKKyAgICBsb3dlclRvQWlyLnJ1bigpOworfQorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzTG93ZXJUb0Fpcl9oCisjZGVmaW5lIEIzTG93ZXJUb0Fpcl9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgUHJvY2VkdXJlOworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKworLy8gVGhp
cyBsb3dlcnMgdGhlIGN1cnJlbnQgQjMgcHJvY2VkdXJlIHRvIGFuIEFpciBjb2RlLgorCit2b2lk
IGxvd2VyVG9BaXIoUHJvY2VkdXJlJiwgQWlyOjpDb2RlJik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzTG93ZXJU
b0Fpcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hl
ci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
cmluZ01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElU
UyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBM
b3dlcmluZ01hdGNoZXIKKworIyBUaGVzZSBydWxlcyBhcmUgY29uc2lkZXJlZCBpbiBhIGNhc2Nh
ZGUsIHN0YXJ0aW5nIGF0IHRoZSB0b3AuIEl0J3MgaW1wbGVuZW50ZWQgdXNpbmcgc3dpdGNoCisj
IHN0YXRlbWVudHMgd2hlcmV2ZXIgcG9zc2libGUuCisKKyMgTm90ZTogYWRkaW5nIG1vcmUgcnVs
ZXMgdG8gdGhpcyBtYXRjaGVyIGlzIGFuIGV4Y2VsbGVudCB3YXkgb2YgaW1wcm92aW5nIHBlcmZv
cm1hbmNlIQorCitMb2FkID0gTG9hZChhZGRyZXNzKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQp
CisKK1N0b3JlQWRkTG9hZCA9IFN0b3JlKEFkZChsZWZ0LCByaWdodCksIGFkZHJlc3MpCitTdG9y
ZUFuZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmUgPSBTdG9y
ZSh2YWx1ZSwgYWRkcmVzcykKKworQ29uc3QzMiA9IENvbnN0MzIoKQorCitSZXR1cm4gPSBSZXR1
cm4odmFsdWUpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQorewor
fQorCit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29m
ZnNldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZpbmUg
QjNNZW1vcnlWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gRklYTUU6IEFkZCBh
bGlhcyBhbmFseXNpcyB0byB0aGVzZSBieSBhbGxvd2luZyB0aGUgY2xpZW50IHRvIGFzc29jaWF0
ZSBhbiBpbnRlZ2VyIHJhbmdlIHRvIHRoZQorLy8gdmFsdWUuIFR3byBvcGVyYXRpb25zIG1heSBh
Y2Nlc3MgdGhlIHNhbWUgbWVtb3J5IGlmIHRoZWlyIHJhbmdlcyBvdmVybGFwcy4KKy8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzUKKworY2xhc3MgTWVtb3J5
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAg
IGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZa
OgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAg
ICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6
CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAgICBpbnQz
Ml90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9y
IExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBo
YXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgor
ICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdp
biwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNl
IExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gRG91YmxlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAg
ICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAg
ICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5
cGUgaXMgaW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
KyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8gRG91
YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2Fz
ZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExv
YWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVtb3J5VmFs
dWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2lu
LCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnQzMl90IG9mZnNldCA9
IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwg
cG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAo
IUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAg
ICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQzMl90IG1fb2Zmc2V0IHsgMCB9OworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNNZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzT3Bjb2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpC
MzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUp
Cit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgb3V0LnBy
aW50KCJOb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAg
IG91dC5wcmludCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3Qz
MjoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENvbnN0NjQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3Q2NCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJDb25zdERvdWJs
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIG91dC5w
cmludCgiU3RhY2tTbG90Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZ3VtZW50UmVn
OgorICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50UmVnIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgb3V0LnByaW50KCJGcmFtZVBvaW50ZXIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkOgorICAgICAgICBvdXQucHJpbnQoIkFkZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdWI6CisgICAgICAgIG91dC5wcmludCgiU3Vi
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE11bDoKKyAgICAgICAgb3V0LnByaW50KCJN
dWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRGl2OgorICAgICAgICBvdXQucHJpbnQo
IkRpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICAgICAgb3V0
LnByaW50KCJDaGlsbERpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNb2Q6CisgICAg
ICAgIG91dC5wcmludCgiTW9kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdEFuZDoK
KyAgICAgICAgb3V0LnByaW50KCJCaXRBbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Qml0T3I6CisgICAgICAgIG91dC5wcmludCgiQml0T3IiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQml0WG9yOgorICAgICAgICBvdXQucHJpbnQoIkJpdFhvciIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTaGw6CisgICAgICAgIG91dC5wcmludCgiU2hsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFNTaHI6CisgICAgICAgIG91dC5wcmludCgiU1NociIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBaU2hyOgorICAgICAgICBvdXQucHJpbnQoIlpTaHIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDg6CisgICAgICAgIG91dC5wcmludCgiU0V4dDgi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDE2OgorICAgICAgICBvdXQucHJpbnQo
IlNFeHQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MzI6CisgICAgICAgIG91
dC5wcmludCgiU0V4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpFeHQzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJaRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRlJv
dW5kOgorICAgICAgICBvdXQucHJpbnQoIkZSb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJVG9EOgorICAgICAgICBvdXQucHJpbnQoIklUb0QiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgRFRvSTMyOgorICAgICAgICBvdXQucHJpbnQoIkRUb0kzMiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RF
cXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgb3V0
LnByaW50KCJMZXNzVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHcmVhdGVyVGhh
bjoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBMZXNzRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc0VxdWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJH
cmVhdGVyRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJvdmU6CisgICAgICAg
IG91dC5wcmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3c6Cisg
ICAgICAgIG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJv
dmVFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZUVxdWFsIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dFcXVhbCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIG91dC5wcmludCgi
TG9hZDhaIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgb3V0
LnByaW50KCJMb2FkOFMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2WjoKKyAg
ICAgICAgb3V0LnByaW50KCJMb2FkMTZaIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExv
YWQxNlM6CisgICAgICAgIG91dC5wcmludCgiTG9hZDE2UyIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZEZsb2F0Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIG91dC5wcmludCgiU3Rv
cmU4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIG91dC5w
cmludCgiU3RvcmUxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZUZsb2F0Ogor
ICAgICAgICBvdXQucHJpbnQoIlN0b3JlRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ0NhbGw6CisgICAgICAgIG91dC5wcmludCgiQ0NhbGwiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgUGF0Y2hwb2ludDoKKyAgICAgICAgb3V0LnByaW50KCJQYXRjaHBvaW50
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBvdXQucHJp
bnQoIkNoZWNrQWRkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrU3ViOgorICAg
ICAgICBvdXQucHJpbnQoIkNoZWNrU3ViIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrTXVsIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENoZWNrOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFVwc2lsb246CisgICAgICAgIG91dC5wcmludCgiVXBzaWxvbiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBQaGk6CisgICAgICAgIG91dC5wcmludCgiUGhpIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEp1bXA6CisgICAgICAgIG91dC5wcmludCgiSnVt
cCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIG91dC5wcmlu
dCgiQnJhbmNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAg
b3V0LnByaW50KCJTd2l0Y2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmV0dXJuOgor
ICAgICAgICBvdXQucHJpbnQoIlJldHVybiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBP
b3BzOgorICAgICAgICBvdXQucHJpbnQoIk9vcHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09w
Y29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcGNvZGVfaAorI2RlZmlu
ZSBCM09wY29kZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBPcGNv
ZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1c2VmdWwg
Zm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAgICAKKyAg
ICAvLyBQb2x5bW9ycGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisg
ICAgSWRlbnRpdHksCisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUgQ29uc3RWYWx1ZSogY2xh
c3Nlcy4gQ29uc3RhbnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3csIHNvIHRoYXQgd2UgY2Fu
CisgICAgLy8gcmVhc29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0aGVtLiBMYXJn
ZSBjb25zdGFudHMgYXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgQ29uc3QzMiwKKyAgICBD
b25zdDY0LAorICAgIENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1hZ2ljYWwgc3RhY2sgc2xv
dC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0g
cmVnYXJkbGVzcyBvZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LiBF
YWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBkaXNqb2ludCByYW5nZSBv
ZgorICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFzcy4KKyAg
ICBTdGFja1Nsb3QsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdpc3Rlci4gVGhp
cyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0KKyAgICAv
LyByZWdhcmRsZXNzIG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LCBhbmQgdGhl
IGNvbXBpbGVyIHRha2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBkb24ndCBjbG9i
YmVyIHRoZSB2YWx1ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNhbGxzIChlaXRoZXIgYnkg
c2F2aW5nIHRoZSBhcmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBvciBwcmVzZXJ2aW5nIGl0
IGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVnVmFsdWUgY2xh
c3MuIFRoZSByZXR1cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2ludGVyKCkgKGZvciBHUFJz
KSBvciBEb3VibGUgKGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywKKworICAgIC8vIFRoZSBm
cmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRyb2wgZmxvdyBi
dXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRlciwgd2l0aCBh
IGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50ZXIgdGVtcG9y
YXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBvaW50ZXIgaW50
cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91bGQqIGJlIG5v
dAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAgIEZyYW1lUG9p
bnRlciwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0
eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKworICAgIC8vIElu
dGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIsIGJlaGF2ZXMg
bGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0T3IsCisgICAg
Qml0WG9yLAorICAgIFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisKKyAgICAvLyBDYXN0cyBh
bmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBTRXh0OCwKKyAg
ICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6CisgICAgU0V4
dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAg
RlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIElUb0Qs
CisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERUb0kzMiwKKwor
ICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlw
ZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8vIGlzIGp1c3Qg
RXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVzc1RoYW4sCisg
ICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVhbCwKKworICAg
IC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgorICAgIEFib3Zl
LAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8v
IE1lbW9yeSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRl
ZCB0eXBlLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMy
OgorICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAor
ICAgIC8vIFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMg
cmV0dXJuIHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8g
TWVtb3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4g
VGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6
CisgICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2
YWx1ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9y
ZSBmb3IgSW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhp
cyBpcyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVt
IEMgY2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVu
dHMgYXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAv
LyBUaGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRo
aXMgaXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVt
aXRzIGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdl
dHMgdG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBh
bG9uZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3Qg
YmUgcGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAg
YXJndW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0Cisg
ICAgLy8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhl
IHRvcCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgor
ICAgIFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1
ZSBjbGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24K
KyAgICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFm
dGVyIHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20g
dGhlIGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBz
dXBwbHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0
byBqdW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBz
aW5jZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24g
b2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4u
IEZvcgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8v
CisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisg
ICAgLy8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8K
KyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAv
LworICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQg
YnkgdGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2Fs
bGJhY2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFy
ZSBkaWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3Qg
Q2hlY2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9z
c2libHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVj
a0FkZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tT
dWIsCisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0
aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMg
YQorICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2Vz
IGFuIEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1
bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1
ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ss
CisKKyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBz
aWxvbiwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisg
ICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAg
CisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4g
QnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZh
bHVlIGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNj
ZXNzb3IuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhl
ciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNo
LAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRo
ZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBl
LiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhp
cyBpcyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVy
ZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK2lubGluZSBi
b29sIGlzQ2hlY2tNYXRoKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsK
KyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011
bDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6T3Bjb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBPcmlnaW46OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9yaWdpbigiLCBSYXdQb2lu
dGVyKG1fZGF0YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNPcmlnaW5f
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2hvZXZlciBnZW5lcmF0ZXMg
QjNJUiBjYW4gY2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZhbHVlcy4gV2hlbiB5b3UgZG8gdGhp
cywgQjMgd2lsbCBiZSBhYmxlIHRvCisvLyBhY2NvdW50LCBkb3duIHRvIHRoZSBtYWNoaW5lIGNv
ZGUsIHdoaWNoIGluc3RydWN0aW9uIGNvcnJlc3BvbmRzIHRvIHdoaWNoIG9yaWdpbi4gQjMKKy8v
IHRyYW5zZm9ybWF0aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdpbnMgY2FyZWZ1bGx5LiBJdCdzIGFu
IGVycm9yIHRvIHdyaXRlIGEgdHJhbnNmb3JtYXRpb24gdGhhdAorLy8gZWl0aGVyIGRyb3BzIE9y
aWdpbnMgb3IgbGllcyBhYm91dCB0aGVtLgorY2xhc3MgT3JpZ2luIHsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBPcmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9IG51bGxwdHIpCisgICAgICAgIDogbV9k
YXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7
IHJldHVybiBtX2RhdGE7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
ICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCB2b2lkKiBtX2RhdGE7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M09yaWdpbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRT
cGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50U3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFNwZWNpYWwuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Cit1c2luZyBuYW1lc3BhY2UgQWlyOworCitQYXRjaHBvaW50U3BlY2lhbDo6UGF0Y2hwb2ludFNw
ZWNpYWwoKQoreworfQorCitQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKCkK
K3sKK30KKwordm9pZCBQYXRjaHBvaW50U3BlY2lhbDo6Zm9yRWFjaEFyZygKKyAgICBJbnN0JiBp
bnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2sp
Cit7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkgeworICAgICAgICBmb3JF
YWNoQXJnSW1wbCgwLCAxLCBpbnN0LCBjYWxsYmFjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6RGVmLCBpbnN0Lm9yaWdpbi0+YWly
VHlwZSgpKTsKKyAgICBmb3JFYWNoQXJnSW1wbCgwLCAyLCBpbnN0LCBjYWxsYmFjayk7Cit9CisK
K2Jvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAo
aW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBWb2lkKQorICAgICAgICByZXR1cm4gaXNWYWxpZEltcGwo
MCwgMSwgaW5zdCk7CisKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBpZiAoaW5zdC5hcmdzWzFdLmtpbmQoKSAhPSBBcmc6OlRtcCkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaW5zdC5hcmdzWzFdLmlzVHlwZShpbnN0Lm9y
aWdpbi0+YWlyVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlz
VmFsaWRJbXBsKDAsIDIsIGluc3QpOworfQorCitib29sIFBhdGNocG9pbnRTcGVjaWFsOjphZG1p
dHNTdGFjayhJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBpZiAoaW5zdC5v
cmlnaW4tPnR5cGUoKSA9PSBWb2lkKQorICAgICAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKDAs
IDEsIGluc3QsIGFyZ0luZGV4KTsKKworICAgIGlmIChhcmdJbmRleCA9PSAxKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKDAsIDIsIGluc3QsIGFy
Z0luZGV4KTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIFBhdGNocG9pbnRTcGVjaWFsOjpnZW5l
cmF0ZSgKKyAgICBJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRl
eHQmIGNvbnRleHQpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAgQVNTRVJUKHN0YWNrbWFw
KTsKKworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAx
OworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgIHJlcHMuYXBw
ZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3Nbb2Zmc2V0KytdKSk7CisgICAg
YXBwZW5kUmVwc0ltcGwoY29udGV4dCwgb2Zmc2V0LCBpbnN0LCByZXBzKTsKKyAgICAKKyAgICBT
dGFja21hcDo6R2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgcGFyYW1zLnZhbHVlID0gdmFs
dWU7CisgICAgcGFyYW1zLnN0YWNrbWFwID0gc3RhY2ttYXA7CisgICAgcGFyYW1zLnJlcHMgPSBy
ZXBzOworICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVy
czsKKworICAgIHN0YWNrbWFwLT5tX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKworICAg
IHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKwordm9pZCBQYXRjaHBvaW50U3BlY2lh
bDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIlBh
dGNocG9pbnQiKTsKK30KKwordm9pZCBQYXRjaHBvaW50U3BlY2lhbDo6ZGVlcER1bXBJbXBsKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJMb3dlcmVkIEIzOjpQYXRj
aHBvaW50VmFsdWUuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzUGF0Y2hwb2ludFNwZWNpYWxfaAorI2RlZmluZSBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNwZWNpYWwgdGhh
dCByZWNvZ25pemVzIHRoYXQgdGhlcmUgYXJlIHR3byB1c2VzIG9mIFBhdGNocG9pbnQ6IFZvaWQg
YW5kIGFuZCBub24tVm9pZC4KKy8vIEluIHRoZSBWb2lkIGNhc2UsIHRoZSBzeW50YXggb2YgdGhl
IEFpciBQYXRjaCBpbnN0cnVjdGlvbiBpczoKKy8vCisvLyAgICAgUGF0Y2ggJnBhdGNocG9pbnQs
IGFyZ3MuLi4KKy8vCisvLyBXaGVyZSAiYXJncy4uLiIgYXJlIHRoZSBsb3dlcmVkIGFyZ3VtZW50
cyB0byB0aGUgUGF0Y2hwb2ludCBpbnN0cnVjdGlvbi4gSW4gdGhlIG5vbi1Wb2lkIGNhc2UKKy8v
IHdlIHdpbGwgaGF2ZToKKy8vCisvLyAgICAgUGF0Y2ggJnBhdGNocG9pbnQsIHJlc3VsdCwgYXJn
cy4uLgorCitjbGFzcyBQYXRjaHBvaW50U3BlY2lhbCA6IHB1YmxpYyBTdGFja21hcFNwZWNpYWwg
eworcHVibGljOgorICAgIFBhdGNocG9pbnRTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+UGF0Y2hw
b2ludFNwZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Oklu
c3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wg
YWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisg
ICAgLy8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4g
YnJhbmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRl
cyB0aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZ2VuZXJhdGUoQWlyOjpJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgQWlyOjpHZW5lcmF0aW9uQ29u
dGV4dCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0
IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Bh
dGNocG9pbnRWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9D
b21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1BhdGNo
cG9pbnRWYWx1ZTo6flBhdGNocG9pbnRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFZh
bHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
c3RhY2ttYXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50VmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N0
YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQYXRj
aHBvaW50VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFBhdGNocG9pbnQ7IH0KKwor
ICAgIH5QYXRjaHBvaW50VmFsdWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOworCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBvaW50
VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRq
YWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBhdGNocG9pbnQs
IHR5cGUsIG9yaWdpbiwgY2hpbGRyZW4pCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
UGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhh
c2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhh
c2VTY29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
aGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNW
YWxpZGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL1N0cmlu
Z1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQaGFz
ZVNjb3BlOjpQaGFzZVNjb3BlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBjaGFyKiBuYW1l
KQorICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICwgbV9uYW1lKG5hbWUpCit7Cisg
ICAgaWYgKHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQjMg
YmVmb3JlICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAg
IH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBC
ZWZvcmUgPSB0b0NTdHJpbmcocHJvY2VkdXJlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2Nv
cGUoKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAg
dmFsaWRhdGUobV9wcm9jZWR1cmUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzUGhhc2VTY29wZV9oCisjZGVmaW5lIEIzUGhhc2VTY29wZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKFByb2Nl
ZHVyZSYsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9l
cyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAg
ICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM1BoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5o
IgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCit7Cit9CisKK1Byb2NlZHVyZTo6flBy
b2NlZHVyZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soZG91Ymxl
IGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3
IEJhc2ljQmxvY2sobV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2Nr
KiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJs
b2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworfQorCitWZWN0b3I8QmFz
aWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcigpCit7CisgICAgVmVjdG9yPEJh
c2ljQmxvY2sqPiByZXN1bHQ7CisgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3Jr
bGlzdC5wdXNoKGF0KDApKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlz
dC5wb3AoKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgIHdv
cmtsaXN0LnB1c2goYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUG9z
dE9yZGVyKCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBQb3N0T3Jk
ZXJCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goYXQoMCkpOworICAg
IHdoaWxlIChCbG9ja1dpdGhPcmRlciBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAg
c3dpdGNoIChpdGVtLm9yZGVyKSB7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UHJlOgorICAg
ICAgICAgICAgd29ya2xpc3QucHVzaFBvc3QoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGl0ZW0ubm9kZS0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2goaXRlbS5ub2RlLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWaXNpdE9yZGVyOjpQb3N0OgorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpdGVtLm5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvL0VOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1
cmVfaAorI2RlZmluZSBCM1Byb2NlZHVyZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiUHVyZU5hTi5oIgorI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1ZTsKKworY2xh
c3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1cmUpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgUHJvY2VkdXJlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflByb2NlZHVyZSgpOworCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5j
eSA9IFBOYU4pOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4uLik7CisKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBC
YXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5k
ZXhdLmdldCgpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
cHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51
bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgaXRlcmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGlu
ZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAg
LCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0
KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2ln
bmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2Nl
ZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAg
IGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUHJl
T3JkZXIoKTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVyKCk7CisK
KyAgICBjbGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVl
c0NvbGxlY3Rpb24oY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1f
cHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisg
ICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAgICAgICwg
bV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
dGVyYXRvcihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAgICwg
bV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgVmFsdWUqIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5tX3ZhbHVlc1ttX2luZGV4XS5nZXQoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgY29uc3QgUHJvY2VkdXJl
KiBtX3Byb2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07
CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3By
b2NlZHVyZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IobV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAg
ICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMu
c2l6ZSgpOyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9wcm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFZhbHVlKiBv
cGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUHJvY2VkdXJlJiBtX3Byb2NlZHVy
ZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSBjb25zdCB7IHJldHVy
biBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxpbmVzX2gK
KyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBl
LCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFs
dWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOworICAgIFZh
bHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6
bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2Vk
dXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdEtpbmQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2lu
ZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNl
IFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAg
ICBvdXQucHJpbnQoIkFub255bW91cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3Rh
Y2tTbG90S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBTdGFj
a1Nsb3RLaW5kIDogdWludDhfdCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0
byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVuZCB0byBl
c2NhcGUKKyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5z
IHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjaworICAgIC8vIHNs
b3QuCisgICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgY291bGQgc2hhcmUg
c3BhY2Ugd2l0aCBvdGhlciBzdGFjayBzbG90cywgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZW4ndCBs
aXZlCisgICAgLy8gYXQgdGhlIHNhbWUgdGltZS4gVGhlIGNvbXBpbGVyIHN0aWxsIGhhcyB0byBk
byBlc2NhcGUgYW5hbHlzaXMsIHNpbmNlIHRoZXNlIGNhbiBiZSBlc2NhcGVkCisgICAgLy8gZXhw
bGljaXRseSBpbiBJUi4KKyAgICBBbm9ueW1vdXMKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1N0YWNrU2xvdEtpbmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1
ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1l
dGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0g
IiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzU3RhY2tTbG90VmFsdWVfaAorI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVk
ZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CituYW1lc3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgor
CitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3Rh
dGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tT
bG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0
IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBz
bG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJf
dCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlz
IExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworCisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmln
aW4sIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIFN0YWNrU2xvdCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQorICAgICAgICAsIG1f
Ynl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9v
ZmZzZXRGcm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsK
KyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRlcihtX29wYXF1
ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAgICAgICAiLCBnZW5lcmF0b3Ig
PSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0gIiwgbV9j
bG9iYmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMs
ICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNrbWFw
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5j
bHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRl
IDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgQ2hlY2tTcGVjaWFsOworY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7
CisKK2NsYXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFt
cyB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFw
LgorICAgICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2tt
YXAuCisgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxz
IHlvdSB0aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgor
ICAgICAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5
b3UgdGhlIHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVyczsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5j
dGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRl
ZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3Rh
Y2ttYXAoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBp
ZGVudGlmeSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAt
dXNpbmcgVmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRl
IG1heSBlbmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisg
ICAgLy8gYWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIg
YmFjayB0byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdl
cmUgdXNpbmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBw
YXJhbWV0ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9Cisg
ICAgdm9pZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENv
bnZlbmllbmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMu
CisgICAgdm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBz
ZXRPcGFxdWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qg
b3BhcXVlSW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUo
KSk7IH0KKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1
c2VzIHRoaXMgU3RhY2ttYXAuIEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50IHRoYXQKKyAgICAvLyBy
ZXR1cm5zIGEgdmFsdWUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgcmVzdWx0IHZhbHVlLiBJ
biBhbGwgb3RoZXIgY2FzZXMsIGluZGV4IHplcm8gcmVmZXJzCisgICAgLy8gdG8gdGhlIGZpcnN0
IGFyZ3VtZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVudCBpcyBub3QgY29u
c3RyYWluYWJsZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gaW4gYSBDaGVja0FkZCB2YWx1ZSwgaXQg
d291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQgMS4gSW4gYSBDaGVj
ayB2YWx1ZSwgaXQKKyAgICAvLyB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kZXgg
MC4gQnV0LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCwgeW91IGNhbgor
ICAgIC8vIGRlcGVuZCBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBiZWluZyBmaWxsZWQg
aW4uCisgICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0IFZhbHVlUmVwJiBy
ZXApCisgICAgeworICAgICAgICBpZiAoaW5kZXggKyAxIDwgbV9yZXBzLnNpemUoKSkKKyAgICAg
ICAgICAgIG1fcmVwcy5ncm93KGluZGV4ICsgMSk7CisgICAgICAgIG1fcmVwc1tpbmRleF0gPSBy
ZXA7CisgICAgfQorCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpCisg
ICAgeworICAgICAgICBtX2Nsb2JiZXJlZC5tZXJnZShzZXQpOworICAgIH0KKworICAgIGNvbnN0
IFJlZ2lzdGVyU2V0JiBjbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb2JiZXJlZDsgfQor
CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yKQorICAg
IHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNr
PEdlbmVyYXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENoZWNr
U3BlY2lhbDsKKyAgICBmcmllbmQgY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWw7CisgICAgZnJpZW5k
IGNsYXNzIFN0YWNrbWFwU3BlY2lhbDsKKyAgICAKKyAgICB2b2lkKiBtX29wYXF1ZSB7IG51bGxw
dHIgfTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsKKyAgICBSZWZQdHI8R2VuZXJhdG9y
PiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZDsKKyAgICBSZWdpc3Rl
clNldCBtX3VzZWRSZWdpc3RlcnM7IC8vIFN0YWNrbWFwcyBjb3VsZCBiZSBmdXJ0aGVyIGR1cGxp
Y2F0ZWQgYnkgQWlyLCBidXQgdGhhdCdzIHVubGlrZWx5LCBzbyB3ZSBqdXN0IG1lcmdlIHRoZSB1
c2VkIHJlZ2lzdGVycyBzZXRzIGlmIHRoYXQgd2VyZSB0byBoYXBwZW4uCit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM1N0YWNrbWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlv
bkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworU3RhY2ttYXBTcGVj
aWFsOjpTdGFja21hcFNwZWNpYWwoKQoreworfQorCitTdGFja21hcFNwZWNpYWw6On5TdGFja21h
cFNwZWNpYWwoKQoreworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lz
dGVycyhJbnN0JiBpbnN0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAg
ICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2
YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgSW5zdCB0aGF0IHVzZXMg
dGhlIFN0YWNrbWFwU3BlY2lhbCBnZXRzIGR1cGxpY2F0ZWQsIHRoZW4gd2UgZW5kIHVwIG1lcmdp
bmcgdXNlZAorICAgIC8vIHJlZ2lzdGVyIHNldHMgZnJvbSBtdWx0aXBsZSBwbGFjZXMuIFRoaXMg
Y3VycmVudGx5IHdvbid0IGhhcHBlbiBzaW5jZSBBaXIgZG9lc24ndCBoYXZlIHRhaWxkdXAKKyAg
ICAvLyBvciB0aGluZ3MgbGlrZSB0aGF0LiBCdXQgbWF5YmUgZXZlbnR1YWxseSBpdCBjb3VsZCBi
ZSBhIHByb2JsZW0uCisgICAgc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVycy5tZXJnZSh1c2VkUmVn
aXN0ZXJzKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFD
bG9iYmVyZWRSZWdzKEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmln
aW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICBy
ZXR1cm4gc3RhY2ttYXAtPmNsb2JiZXJlZCgpOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6
Zm9yRWFjaEFyZ0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQg
bnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPElu
c3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGlu
c3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhh
cHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdz
KTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0Fy
Z3MpOworICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPT0g
dmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNB
cmdzOyArK2kpIHsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRC
M0FyZ3NdOworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9y
ZWRBaXJBcmdzKTsKKworICAgICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNlLCBBcmc6OnR5cGVG
b3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAgIH0KK30KKworYm9vbCBTdGFja21hcFNwZWNp
YWw6OmlzVmFsaWRJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVk
IG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVl
ID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBu
b3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFp
ckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gbnVtSWdub3Jl
ZEIzQXJncyk7CisKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsK
KworICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAvLyBGb3IgdGhlIEluc3QgdG8gYmUgdmFs
aWQsIGl0IG5lZWRzIHRvIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMuCisgICAg
aWYgKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2YWx1ZS0+Y2hpbGRy
ZW4oKS5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAvLyBSZWdhcmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBzb21lIGJh
c2ljIHJlcXVpcmVtZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAgICAvLyBleGFtcGxl
LCB5b3UgY2FuJ3QgaGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0
aG9zZSBjb25kaXRpb25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1lbnQgdHlwZXMuCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVk
QjNBcmdzOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBu
dW1JZ25vcmVkQjNBcmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUln
bm9yZWRBaXJBcmdzXTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewor
ICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBj
YXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgY2FzZSBB
cmc6OkNhbGxBcmc6CisgICAgICAgICAgICBicmVhazsgLy8gT0sKKyAgICAgICAgY2FzZSBBcmc6
OkFkZHI6CisgICAgICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpICYmCisgICAgICAgICAgICAgICAgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9B
c3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJnOjpUeXBlIHR5
cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAgICAgICAgaWYgKCFh
cmcuaXNUeXBlKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IC8vIFRoZSBudW1iZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0
aGUgbnVtYmVyIG9mIEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChzdGFja21hcC0+bV9yZXBzLnNp
emUoKSA8PSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkpOworCisgICAgLy8gVmVyaWZ5IGFueSBl
eHBsaWNpdGx5IHN1cHBsaWVkIGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQgaSA9IG51
bUlnbm9yZWRCM0FyZ3M7IGkgPCBzdGFja21hcC0+bV9yZXBzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIFZhbHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFy
ZyA9IGluc3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsK
KworICAgICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
QW55OgorICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAg
ICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgor
ICAgICAgICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6
U3RhY2s6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAg
IGlmIChhcmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFs
dWVSZXA6OkNvbnN0YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1
dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBu
dW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBp
bnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdp
bjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVu
c2lnbmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsg
bnVtSWdub3JlZEIzQXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFw
LT5tX3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMg
bm8gY29uc3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8v
IFdlIG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxp
ZCBpbnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMg
dG8gYSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFy
Z0luZGV4XS5raW5kKCkgPT0gVmFsdWVSZXA6OkFueSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBz
SW1wbCgKKyAgICBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3Jl
ZEFyZ3MsIEluc3QmIGluc3QsIFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQXJnczsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkK
KyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdz
W2ldKSk7Cit9CisKK1ZhbHVlUmVwIFN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKENvZGUmIGNv
ZGUsIGNvbnN0IEFyZyYgYXJnKQoreworICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgIGNh
c2UgQXJnOjpUbXA6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0Ogor
ICAgICAgICByZXR1cm4gVmFsdWVSZXA6OmNvbnN0YW50KGFyZy52YWx1ZSgpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgIGlmIChhcmcuYmFzZSgpID09IFRt
cChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVS
ZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChhcmcuYmFzZSgpID09IFRt
cChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKyAgICAgICAgcmV0dXJu
IFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZh
bHVlUmVwKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0
YWNrbWFwU3BlY2lhbF9oCisjZGVmaW5lIEIzU3RhY2ttYXBTcGVjaWFsX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNTdGFja21h
cC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIEFpciB7
IGNsYXNzIENvZGU7IH0KKworLy8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRo
YXQgaGF2ZSBzdGFja21hcHMuIE5vdGUgdGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAgYnkK
Ky8vIGFza2luZyBmb3IgdGhlIEluc3QncyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3RzIGRv
bid0IG5lZWQgdG8gZXZlbiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAuCisK
K2NsYXNzIFN0YWNrbWFwU3BlY2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGljOgor
ICAgIFN0YWNrbWFwU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgpOwor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEFpcjo6SW5zdCYsIGNv
bnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJh
Q2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBvdmVycmlkZTsKKworICAgIC8vIE5vdGUgdGhhdCB0
aGlzIGRvZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcElt
cGwoKS4gV2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50
IHRoYXQuCisKKyAgICB2b2lkIGZvckVhY2hBcmdJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1J
Z25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJ
bnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOwor
ICAgIGJvb2wgaXNWYWxpZEltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3Ms
IHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmKTsKKyAgICBi
b29sIGFkbWl0c1N0YWNrSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywg
dW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIHVuc2lnbmVk
IGFyZ0luZGV4KTsKKworICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRoZSBJbnN0J3MgYXJn
cywgc3RhcnRpbmcgd2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVuIHZlY3Rvci4KKyAg
ICB2b2lkIGFwcGVuZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmLCB1bnNpZ25lZCBu
dW1JZ25vcmVkQXJncywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYpOworCisgICAgc3Rh
dGljIFZhbHVlUmVwIHJlcEZvckFyZyhBaXI6OkNvZGUmLCBjb25zdCBBaXI6OkFyZyYpOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNTdGFja21hcFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKyNkZWZpbmUg
QjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgZ2VuZXJpYyB3cmFwcGVyIGFy
b3VuZCBsaXN0cyBvZiBmcmVxdWVudGVkIGJsb2Nrcywgd2hpY2ggZ2l2ZXMgeW91IGp1c3QgdGhl
IGJsb2Nrcy4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaywgdHlwZW5hbWUgU3VjY2Vz
c29yTGlzdD4KK2NsYXNzIFN1Y2Nlc3NvckNvbGxlY3Rpb24geworcHVibGljOgorICAgIFN1Y2Nl
c3NvckNvbGxlY3Rpb24oU3VjY2Vzc29yTGlzdCYgbGlzdCkKKyAgICAgICAgOiBtX2xpc3QobGlz
dCkKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xp
c3Quc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYXQoc2l6ZV90
IGluZGV4KSB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2Nr
KiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Cisg
ICAgQmFzaWNCbG9jayomIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRl
eCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJh
dG9yKCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAs
IG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoU3Vj
Y2Vzc29yQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAg
OiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pIC8vIGNvbnN0IGlzIHN0dXBpZCBhbnl3YXkuCisg
ICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsr
OworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOwor
ICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVy
biBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCitwcml2YXRlOgorICAgIFN1Y2Nlc3Nvckxp
c3QmIG1fbGlzdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNl
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN3aXRjaENhc2U6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jYXNlVmFsdWUsICIt
PiIsIG1fdGFyZ2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
Q2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENh
c2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENh
c2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hDYXNlX2gKKyNkZWZp
bmUgQjNTd2l0Y2hDYXNlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Zy
ZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRjaENhc2UoKQorICAgIHsKKyAg
ICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVlLCBjb25zdCBGcmVxdWVudGVk
QmxvY2smIHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VWYWx1ZShjYXNlVmFsdWUpCisgICAgICAg
ICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3RhcmdldDsgfQorCisgICAgaW50NjRfdCBjYXNl
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1ZTsgfQorICAgIEZyZXF1ZW50ZWRCbG9j
ayB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorICAgIEJhc2ljQmxvY2sqIHRh
cmdldEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuYmxvY2soKTsgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludDY0X3Qg
bV9jYXNlVmFsdWU7CisgICAgRnJlcXVlbnRlZEJsb2NrIG1fdGFyZ2V0OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hWYWx1ZTo6flN3aXRjaFZhbHVl
KCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSh1bnNpZ25lZCBp
bmRleCkKK3sKKyAgICBGcmVxdWVudGVkQmxvY2sgcmVzdWx0QmxvY2sgPSBtX3N1Y2Nlc3NvcnNb
aW5kZXhdOworICAgIGludDY0X3QgcmVzdWx0VmFsdWUgPSBtX3ZhbHVlc1tpbmRleF07CisgICAg
bV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0KCk7CisgICAgbV9zdWNjZXNz
b3JzLnJlbW92ZUxhc3QoKTsKKyAgICBtX3ZhbHVlc1tpbmRleF0gPSBtX3ZhbHVlcy5sYXN0KCk7
CisgICAgbV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiBTd2l0Y2hDYXNlKHJlc3Vs
dFZhbHVlLCByZXN1bHRCbG9jayk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFwcGVuZENhc2Uo
Y29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5k
KG1fc3VjY2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nlc3NvcnMuc2l6
ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChzd2l0
Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRlc3RydWN0aXZlbHkgb3ZlcnJp
ZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisgICAgb3V0LnByaW50KGxpc3REdW1wKCp0
aGlzKSwgIiwgZmFsbFRocm91Z2ggPSAiLCBmYWxsVGhyb3VnaCgpKTsKK30KKworU3dpdGNoVmFs
dWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVx
dWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0
Y2gsIFZvaWQsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdo
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAorI2RlZmluZSBCM1N3
aXRjaFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbnRyb2xW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJu
IG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8gbnVt
Q2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVtQ2Fz
ZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8gVGhl
IHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4LgorICAg
IGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
c1tpbmRleF07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGNhc2VWYWx1ZXMo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgRnJlcXVlbnRlZEJsb2NrIGZhbGxU
aHJvdWdoKCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorICAgIEZyZXF1
ZW50ZWRCbG9jayYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9
CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtQ2FzZVZhbHVlcygpOyB9
CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nlc3NvcihpbmRleCkpOwor
ICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNsYXNzIGl0ZXJh
dG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9z
d2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTd2l0Y2hWYWx1ZSYgc3dpdGNoVmFsdWUs
IHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dpdGNoVmFsdWUpCisg
ICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToK
KyAgICAgICAgY29uc3QgU3dpdGNoVmFsdWUqIG1fc3dpdGNoOworICAgICAgICB1bnNpZ25lZCBt
X2luZGV4OworICAgIH07CisKKyAgICB0eXBlZGVmIGl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwor
CisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7
IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6
ZSgpKTsgfQorCisgICAgLy8gVGhpcyByZW1vdmVzIHRoZSBjYXNlIGFuZCByZW9yZGVycyB0aGlu
Z3MgYSBiaXQuIElmIHlvdSdyZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZyb20gMCB0byBOLAorICAg
IC8vIHRoZW4geW91IGNhbiBrZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlzIHNvIGxvbmcgYXMgeW91
IHJldmlzaXQgdGhpcyBzYW1lIGluZGV4ICh3aGljaCB3aWxsIG5vdworICAgIC8vIGNvbnRhaW4g
c29tZSBvdGhlciBjYXNlIHZhbHVlKS4gVGhpcyByZW1vdmVzIHRoZSBjYXNlIHRoYXQgd2FzIHJl
bW92ZWQuCisgICAgU3dpdGNoQ2FzZSByZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KTsKKworICAg
IHZvaWQgYXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKTsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3dpdGNoVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFs
bFRocm91Z2gpOworCisgICAgVmVjdG9yPGludDY0X3Q+IG1fdmFsdWVzOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBl
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJJ
bnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91dC5w
cmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBlX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gVHlwZSB7Cisg
ICAgVm9pZCwKKyAgICBJbnQzMiwKKyAgICBJbnQ2NCwKKyAgICBEb3VibGUKK307CisKK2lubGlu
ZSBib29sIGlzSW50KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBJbnQzMiB8fCB0
eXBlID09IEludDY0OworfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGUgdHlwZSkKK3sKKyAg
ICByZXR1cm4gdHlwZSA9PSBEb3VibGU7Cit9CisKK2lubGluZSBUeXBlIHBvaW50ZXJUeXBlKCkK
K3sKKyAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJu
IEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7
CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
LCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Vwc2ls
b25WYWx1ZTo6flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBzaWxvblZhbHVlOjpkdW1w
TWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiXiIsIG1fcGhp
LT5pbmRleCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9u
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAor
I2RlZmluZSBCM1Vwc2lsb25WYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
VXBzaWxvblZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBh
Y2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9CisKKyAg
ICB+VXBzaWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkgY29uc3QgeyByZXR1cm4gbV9w
aGk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAg
IAorICAgIFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IHZhbHVlLCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9y
aWdpbiwgdmFsdWUpCisgICAgICAgICwgbV9waGkocGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KHZhbHVlLT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0KKworICAgIFZhbHVlKiBtX3Bo
aTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitVc2VDb3VudHM6OlVzZUNvdW50cyhQcm9jZWR1cmUmIHByb2NlZHVyZSkK
KyAgICA6IG1fY291bnRzKHByb2NlZHVyZS52YWx1ZXMoKS5zaXplKCkpCit7CisgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiBwcm9jZWR1cmUudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChWYWx1ZSog
Y2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgIG1fY291bnRzW2NoaWxkXSsr
OworICAgIH0KK30KKworVXNlQ291bnRzOjp+VXNlQ291bnRzKCkKK3sKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNVc2VDb3VudHNfaAorI2RlZmluZSBCM1VzZUNvdW50c19oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xh
c3MgVXNlQ291bnRzIHsKK3B1YmxpYzoKKyAgICBVc2VDb3VudHMoUHJvY2VkdXJlJik7CisgICAg
flVzZUNvdW50cygpOworCisgICAgdW5zaWduZWQgb3BlcmF0b3JbXShWYWx1ZSogdmFsdWUpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb3VudHNbdmFsdWVdOworICAgIH0KK3ByaXZh
dGU6CisgICAgSW5kZXhNYXA8VmFsdWUsIHVuc2lnbmVkPiBtX2NvdW50czsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzVXNlQ291bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
aWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlk
YXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlk
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUg
IkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3
dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgeworCitjbGFzcyBW
YWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihQcm9jZWR1cmUmIHByb2NlZHVyZSwg
Y29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX3By
b2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgbV93aGVuKHdoZW4pCisgICAgICAgICwgbV9k
dW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBWQUxJREFURShj
b25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWlsKF9fRklMRV9f
LCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3RyaW5nIG1l
c3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2b2lkIHJ1bigpCisgICAgewor
ICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7CisgICAgICAgIEhhc2hTZXQ8VmFs
dWUqPiB2YWx1ZUluUHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5CbG9jazsK
KworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUpIHsKKyAgICAg
ICAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUg
OiAqYmxvY2spCisgICAgICAgICAgICAgICAgdmFsdWVJbkJsb2NrLmFkZCh2YWx1ZSk7CisgICAg
ICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJlLnZhbHVlcygp
KQorICAgICAgICAgICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsKKworICAgICAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJbkJs
b2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgZm9yIChWYWx1
ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCisgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUluUHJv
Yy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisKKyAgICAgICAgZm9yIChWYWx1
ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUluUHJv
Yy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4iLCBwb2ludGVyRHVtcChjaGls
ZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9j
a3MpIHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1
Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAg
ICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaywgIi0+
IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRTogRXhwYW5kIHRoaXMgdmFsaWRhdGlvbiBwaGFzZS4K
KyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ4
MAorICAgIH0KKworcHJpdmF0ZToKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZmFp
bCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBj
aGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1l
c3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7
CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJp
bnQoIkIzIFZBTElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsK
KyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAg
ICAgaWYgKG1fd2hlbikKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBEdXJpbmcgIiwg
bV93aGVuLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmlu
ZygpOworICAgICAgICB9CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAg
ICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkJlZm9yZSAiLCBt
X3doZW4sICI6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAgICAg
ICAgfQorICAgICAgICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAg
ZGF0YUxvZyhtX3Byb2NlZHVyZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7
CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIs
IGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAg
ICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIGNvbnN0IGNoYXIqIG1fd2hlbjsKKyAgICBj
b25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UK
Kwordm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogd2hlbiwg
Y29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKHByb2Nl
ZHVyZSwgd2hlbiwgZHVtcEJlZm9yZSk7CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1ZhbGlkYXRlX2gKKyNkZWZpbmUgQjNWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJl
OworCit2b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIHdoZW4gPSBudWxscHRy
LCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsaWRh
dGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRl
IDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjb25zdCBjaGFyKiBjb25zdCBW
YWx1ZTo6ZHVtcFByZWZpeCA9ICJAIjsKKworVmFsdWU6On5WYWx1ZSgpCit7Cit9CisKK3ZvaWQg
VmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqIHZhbHVlKQoreworICAgIC8vIFRoaXMg
aXMgYSBiaXQgY3JhenkuIEl0IGRvZXMgYW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQgb2Ygd2hhdGV2
ZXIgVmFsdWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRoCisgICAgLy8gYSBwbGFpbiBJZGVudGl0eSBW
YWx1ZS4gV2UgZmlyc3QgY29sbGVjdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQsIHRo
ZW4gd2UgZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0
aGVuIHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCisKKyAgICB1bnNp
Z25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgVHlwZSB0eXBlID0gbV90eXBlOworICAgIE9yaWdp
biBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVy
OworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworCisgICAgUkVM
RUFTRV9BU1NFUlQodHlwZSA9PSB2YWx1ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+
VmFsdWUoKTsKKworICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIElkZW50aXR5LCB0eXBlLCBv
cmlnaW4sIHZhbHVlKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVw
bGFjZW1lbnQgPSByZXBsYWNlbWVudDsKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhOb3Ao
KQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBPcmlnaW4gb3JpZ2luID0g
bV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1
ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKworICAgIHRoaXMtPlZhbHVlOjp+
VmFsdWUoKTsKKworICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIE5vcCwgVm9pZCwgb3JpZ2lu
KTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSBy
ZXBsYWNlbWVudDsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1
ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90
eXBlLCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNvZGUpOworCisgICAgb3V0LnByaW50KCIoIik7
CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRy
ZW4oKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOworCisg
ICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7
CisgICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0
cmluZy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOworCisgICAg
b3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJikg
Y29uc3QKK3sKK30KKworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1ZSog
Zmlyc3RDaGlsZCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6
CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBE
aXY6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFuZDoK
KyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgU2hsOgorICAgIGNh
c2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENo
ZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiBmaXJzdENoaWxkLT50
eXBlKCk7CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJldHVybiBwb2ludGVyVHlw
ZSgpOworICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBEVG9JMzI6
CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46
CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBjYXNlIEdy
ZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBB
Ym92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEludDMyOwor
ICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7
CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gRG91Ymxl
OworICAgIGNhc2UgTm9wOgorICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVf
aAorI2RlZmluZSBCM1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJBcmcuaCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisj
aW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBTdGFja21hcDsKKworY2xhc3MgSlNfRVhQT1JUX1BS
SVZBVEUgVmFsdWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSos
IDM+IEFkamFjZW5jeUxpc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFBy
ZWZpeDsKKworICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlKSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICB2aXJ0dWFsIH5WYWx1ZSgpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNvZGUgaXMg
aW1tdXRhYmxlLCBleGNlcHQgZm9yIHJlcGxhY2luZyB2YWx1ZXMgd2l0aCBpZGVudGl0eS4KKyAg
ICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKworICAgIE9yaWdp
biBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIAorICAgIFZhbHVlKiYg
Y2hpbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisgICAg
VmFsdWUqIGNoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW2lu
ZGV4XTsgfQorCisgICAgLy8gVGhpcyBjb21wdXRlcyB0aGUgdHlwZSB1c2luZyB0aGUgb3Bjb2Rl
LgorICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgLy8gVGhp
cyBpcyB1c2VmdWwgd2hlbiBsb3dlcmluZy4gTm90ZSB0aGF0IHRoaXMgaXMgb25seSB2YWxpZCBm
b3Igbm9uLXZvaWQgdmFsdWVzLgorICAgIEFpcjo6QXJnOjpUeXBlIGFpclR5cGUoKSBjb25zdCB7
IHJldHVybiBBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSh0eXBlKCkpOyB9CisKKyAgICBBZGphY2Vu
Y3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0gCisgICAgY29uc3QgQWRq
YWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKKyAg
ICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRo
Tm9wKCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRl
ZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICAvLyBUaGlzIGlzIGhvdyB5b3UgY2Fz
dCBWYWx1ZXMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgcHJvdmlk
ZWQgdGhhdCB3ZSBoYXZlIGEKKyAgICAvLyBBcmd1bWVudFJlZ1ZhbHVlLCB5b3UgY2FuIGRvOgor
ICAgIC8vCisgICAgLy8gaWYgKEFyZ3VtZW50UmVnVmFsdWUqIGFyZ3VtZW50UmVnID0gdmFsdWUt
PmFzPEFyZ3VtZW50UmVnVmFsdWU+KCkpIHsKKyAgICAvLyAgICAgdGhpbmdzCisgICAgLy8gfQor
ICAgIC8vCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoaXMgb3Bjb2RlKCkgIT0g
QXJndW1lbnRSZWcuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGlzIHJldHVybnMgbnVsbHB0cgorICAg
IC8vIGlmIFQ6OmFjY2VwdHMob3Bjb2RlKCkpIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVD4KKyAgICBUKiBhcygpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAg
Y29uc3QgVCogYXMoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0ludDMyKCkgY29uc3Q7Cisg
ICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQ2NCgpIGNv
bnN0OworICAgIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQoKSBj
b25zdDsKKyAgICBpbnQ2NF90IGFzSW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0ludChpbnQ2NF90
IHZhbHVlKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91Ymxl
IGFzRG91YmxlKCkgY29uc3Q7CisKKyAgICBTdGFja21hcCogc3RhY2ttYXAoKTsKKworcHJvdGVj
dGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0OworICAg
IAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCitwcm90ZWN0ZWQ6Cisg
ICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUuCisgICAgLy8gVGhpcyBmb3Jt
IHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseToKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hp
bGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFy
Z3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNp
ZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVu
OgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAg
LCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9v
cmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9z
ZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBm
aXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhw
bGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlw
ZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2lu
KQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAg
eworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4g
aW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0Cisg
ICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5k
ZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9y
KG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAg
ICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgdmFyYXJncy4KKyAgICBleHBsaWNpdCBWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2lu
LCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4
KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAg
ICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikK
KyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBUeXBlIHR5cGVGb3IoT3Bjb2Rl
LCBWYWx1ZSogZmlyc3RDaGlsZCk7CisKKyAgICAvLyBUaGlzIGdyb3VwIG9mIGZpZWxkcyBpcyBh
cnJhbmdlZCB0byBmaXQgaW4gNjQgYml0cy4KKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIE9w
Y29kZSBtX29wY29kZTsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICAKKyAgICBPcmlnaW4gbV9vcmln
aW47CisgICAgQWRqYWNlbmN5TGlzdCBtX2NoaWxkcmVuOworCitwdWJsaWM6CisgICAgQmFzaWNC
bG9jayogb3duZXIgeyBudWxscHRyIH07IC8vIGNvbXB1dGVkIGxhemlseS4KKyAgICBWYWx1ZSog
cmVwbGFjZW1lbnQgeyBudWxscHRyIH07IC8vIHVzZWQgZm9yIGFuYWx5c2VzIGFuZCB0cmFuc2Zv
cm1hdGlvbnMuCit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVw
VmFsdWVEdW1wKGNvbnN0IFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQor
ICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAo
b3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVmFsdWUqIG1fdmFsdWU7Cit9OworCitpbmxpbmUg
RGVlcFZhbHVlRHVtcCBkZWVwRHVtcChjb25zdCBWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJu
IERlZXBWYWx1ZUR1bXAodmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNkZWZpbmUgQjNWYWx1ZUlubGlu
ZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIK
KyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlm
IChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0
aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2Nv
bnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUq
Pih0aGlzKS0+YXM8VD4oKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDMyVmFsdWU+KCk7Cit9CisKK2lubGluZSBpbnQz
Ml90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVl
PigpLT52YWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAor
eworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW5saW5lIGludDY0X3Qg
VmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdDY0VmFsdWU+KCkt
PnZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJbnQoKSBjb25zdAoreworICAg
IHJldHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0KCk7Cit9CisKK2lubGluZSBpbnQ2NF90IFZh
bHVlOjphc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgPyBhc0ludDMyKCkg
OiBhc0ludDY0KCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjppc0ludChpbnQ2NF90IHZhbHVl
KSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQoKSAmJiBhc0ludCgpID09IHZhbHVlOworfQor
CitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFh
czxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitpbmxpbmUgZG91YmxlIFZhbHVlOjphc0RvdWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91YmxlVmFsdWU+KCktPnZhbHVlKCk7
Cit9CisKK2lubGluZSBTdGFja21hcCogVmFsdWU6OnN0YWNrbWFwKCkKK3sKKyAgICBpZiAoQ2hl
Y2tWYWx1ZSogY2hlY2sgPSBhczxDaGVja1ZhbHVlPigpKQorICAgICAgICByZXR1cm4gJmNoZWNr
LT5zdGFja21hcDsKKyAgICBpZiAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYXM8UGF0
Y2hwb2ludFZhbHVlPigpKQorICAgICAgICByZXR1cm4gJnBhdGNocG9pbnQtPnN0YWNrbWFwOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlSW5saW5lc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3Zv
aWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV9raW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQW55OgorICAgIGNh
c2UgU29tZVJlZ2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAg
ICAgICAgb3V0LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnBy
aW50KCIoIiwgb2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBW
YWx1ZVJlcDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFs
dWVSZXA6OkFueToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21l
UmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVy
OgorICAgICAgICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0
LnByaW50KCJTdGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVl
UmVwOjpDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1ZhbHVlUmVwX2gKKyNkZWZpbmUgQjNWYWx1ZVJlcF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0byBk
ZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQgYm90
aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNlbnRh
dGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBzYXkK
Ky8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQgcmVw
cmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQuCisK
K2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAvLyBB
cyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFu
eSByZXByZXNlbnRhdGlvbi4gQXMgYW4KKyAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2UgZm9y
IHRoZQorICAgICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBhIENoZWNr
TXVsLgorICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRp
b24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3Vs
ZCBiZSBhCisgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEK
KyAgICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2Vu
dGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAor
ICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIz
IHBpY2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJl
cHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0
J3Mgbm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAg
IFN0YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZv
cmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAg
ICAgICAgLy8gb2Zmc2V0LgorICAgICAgICAvLyBGSVhNRTogVGhlIFN0YWNrbWFwU3BlY2lhbCBj
bGFzcyBuZWVkcyB0byBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IHRoZXNlIGRvbid0IHR1cm4g
aW50bworICAgICAgICAvLyBBaXIgb3BlcmFuZHMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1NDAKKyAgICAgICAgU3RhY2tBcmd1bWVudCwK
KworICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMg
dGhhdCBCMyBjb25zdGFudC1mb2xkZWQgdGhlIHZhbHVlLgorICAgICAgICBDb25zdGFudAorICAg
IH07CisgICAgCisgICAgVmFsdWVSZXAoKQorICAgICAgICA6IG1fa2luZChBbnkpCisgICAgewor
ICAgIH0KKworICAgIGV4cGxpY2l0IFZhbHVlUmVwKFJlZyByZWcpCisgICAgICAgIDogbV9raW5k
KFJlZ2lzdGVyKQorICAgICAgICAsIG1fdmFsdWUocmVnLmluZGV4KCkpCisgICAgeworICAgIH0K
KworICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKKyAgICB7CisgICAgICAgIHJldHVy
biBWYWx1ZVJlcChyZWcpOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFjayhpbnRw
dHJfdCBvZmZzZXRGcm9tRlApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZz
ZXRGcm9tRlA7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZh
bHVlUmVwIHN0YWNrQXJndW1lbnQoaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKQorICAgIHsKKyAgICAg
ICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2tBcmd1bWVu
dDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tU1A7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGludDY0X3Qg
dmFsdWUpCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnRE
b3VibGUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25z
dGFudChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtp
bmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAgICBy
ZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zm
c2V0RnJvbUZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2sp
OworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0K
KworICAgIGludHB0cl90IG9mZnNldEZyb21TUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFN0YWNrQXJndW1lbnQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVy
biBtX3ZhbHVlOworICAgIH0KKworICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2lu
ZCBtX2tpbmQ7CisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21h
dGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJh
dGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTA4IEBACisj
IS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0
OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMg
VEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CisKK3JlcXVpcmUgInBhdGhuYW1lIgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAg
JHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9k
dWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnlt
b3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFt
ZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBA
bmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+
IC9cQVwkKFswLTldKylcWi8pCisgICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1Zh
ciA6IG5hbWUgPX4gL1xBXCQvID8gJCcgOiBuYW1lCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUK
KyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdCisgICAgZW5kCisK
KyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAgIG9wY29kZSAhPSBuaWwKKyAgICBlbmQKKworICAg
IGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRl
eCB7CisgICAgICAgICAgICB8IGNoaWxkLCBpbmRleCB8CisgICAgICAgICAgICB5aWVsZCB2YXJO
YW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQubmFtZSwKKyAgICAgICAgICAgICAgICAgIGNo
aWxkLnZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQu
b3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9uT3BlcmFuZCkgOiAoY2hpbGQub3Bjb2RlID8g
OmludGVybmFsIDogOm9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgaW5kZXgKKyAgICAgICAg
ICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgfQorICAgIGVuZAorZW5kCisK
K2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAg
ICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgQG5hbWUgPSBuYW1l
CisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zCisgICAgZW5kCitlbmQKKworY2xh
c3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAor
ICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5h
bWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQK
KyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIK
KyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpz
dHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAg
QG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAg
CisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAg
ICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
QHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4o
b3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYg
dG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQK
KyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5l
bXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRb
MF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUp
CisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10K
KyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNh
c2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVu
dCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGln
bm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBW2EtekEt
WjAtOSRdKFthLXpBLVowLTlfXSopLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhP
cmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsg
XHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4g
L1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZp
bGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNl
ICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9
LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5k
CisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAor
CitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFk
ZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5
LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcil8KGluY2x1ZGUpKVxaLworZW5kCisKK2RlZiBp
c0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVow
LTlfXSopXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgor
ICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4
KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRv
a2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisg
ICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQp
CisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50
KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAg
ICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7
Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAg
ICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3Ry
aW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAor
CisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmlu
ZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRl
bnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5k
CisKKyAgICBkZWYgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwcm9kdWN0aW9uKQorICAg
ICAgICBpZiBuYW1lID09IHByb2R1Y3Rpb24udmFyTmFtZQorICAgICAgICAgICAgcGFyc2VFcnJv
cigiQ2hpbGQgcHJvZHVjdGlvbiBoYXMgc2FtZSBuYW1lIGFzIHBhcmVudCBwcm9kdWN0aW9uIikK
KyAgICAgICAgZW5kCisgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBl
bnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICBwYXJzZUVycm9yKCJE
dXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBwcm9kdWN0aW9ucyA8
PCBwcm9kdWN0aW9uCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgY29uc3VtZSgi
bWF0Y2hlciIpCisKKyAgICAgICAgbWF0Y2hlck5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisg
ICAgICAgIHByb2R1Y3Rpb25zID0gW10KKworICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJy
ZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgIyBXZSBtaWdodCB3
YW50IHRvIHN1cHBvcnQgImluY2x1ZGUiLiBJZiB3ZSBkaWQgdGhhdCwgaXQgd291bGQgZ28gaGVy
ZS4KKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgICAg
IAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5h
bWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBs
aWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgcHJvZHVj
dGlvbnMgPDwgcHJvZHVjdGlvbgorICAgICAgICB9CisKKyAgICAgICAgTWF0Y2hlci5uZXcobWF0
Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlUHJvZHVjdGlv
bgorICAgICAgICBvcmlnaW4gPSB0b2tlbi5vcmlnaW4KKyAgICAgICAgbmFtZSA9IGNvbnN1bWVJ
ZGVudGlmaWVyCisKKyAgICAgICAgaWYgdG9rZW4gPT0gIj0iCisgICAgICAgICAgICBjb25zdW1l
KCI9IikKKyAgICAgICAgICAgIG9wY29kZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAg
ICBjb25zdW1lKCIoIikKKyAgICAgICAgZWxzaWYgdG9rZW4gPT0gIigiCisgICAgICAgICAgICBj
b25zdW1lKCIoIikKKyAgICAgICAgICAgIG9wY29kZSA9IG5hbWUKKyAgICAgICAgICAgIG5hbWUg
PSBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFByb2R1Y3Rpb24ubmV3KG9y
aWdpbiwgbmFtZSwgbmlsLCBuaWwpCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgcHJv
ZHVjdGlvbnMgPSBbXQorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2Vu
ID09ICIpIgorCisgICAgICAgICAgICBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHBhcnNl
UHJvZHVjdGlvbikKKworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisgICAgICAg
ICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgfQorCisgICAgICAgICMgQWR2YW5jZSBhZnRlciB0
aGUgIikiCisgICAgICAgIGFkdmFuY2UKKworICAgICAgICBQcm9kdWN0aW9uLm5ldyhvcmlnaW4s
IG5hbWUsIG9wY29kZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCitlbmQKKworZmlsZU5hbWUgPSBB
UkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoZmlsZU5hbWUpLCBmaWxlTmFt
ZSkKK21hdGNoZXIgPSBwYXJzZXIucGFyc2UKKworY2xhc3MgU3ViTWF0Y2gKKyAgICBhdHRyX3Jl
YWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0aW9ucworICAgIAorICAgIGRlZiBpbml0aWFsaXplKGlu
ZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBpbmRleE1hcCA9IFtdCisgICAgICAgIEBw
cm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwg
aW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwIDw8IGluZGV4CisgICAgICAgICAgICBAcHJv
ZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKKworICAg
IGRlZiBtYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICBpbmRleExpc3QubWFwIHsKKyAg
ICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwW2luZGV4XQorICAgICAg
ICB9CisgICAgZW5kCitlbmQKKworRmlsZS5vcGVuKCJCMyIgKyBtYXRjaGVyLm5hbWUgKyAiLmgi
LCAidyIpIHsKKyAgICB8IG91dHAgfAorCisgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkg
Z2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxlTmFtZX0gLS0gZG8gbm90IGVk
aXQhIgorCisgICAgb3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAg
b3V0cC5wdXRzICIjZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgCisgICAgb3V0cC5w
dXRzICIjaW5jbHVkZSBcIkIzVmFsdWUuaFwiIgorICAgIAorICAgIG91dHAucHV0cyAibmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBl
bmFtZSBBZGFwdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgcnVuI3ttYXRjaGVyLm5hbWV9KFZh
bHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91dHAucHV0cyAieyIKKworICAg
ICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBi
ZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91CisgICAgIyB3YW50IHRvIHNl
ZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGluIGEgZ29vZCB0ZXh0IGVkaXRv
ciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlvdS4KKworICAgICMgSW4gb2Rk
IHNpdHVhdGlvbnMsIHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2YWx1ZS4gVGVsbCB0aGUgY29t
cGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFN
KF92YWx1ZSk7IgorICAgICAgICAKKyAgICAjIFRoaXMganVzdCBwcm90ZWN0cyB0aGUgY2FsbGVy
IGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25zIGhhdmluZyBkaWZmZXJlbnQg
bGVuZ3Rocy4KKyAgICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9u
cykKKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0
aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAg
IGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uY2hp
bGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICAg
ICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisK
KyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAg
ICAgICAgICAgIGxlbmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uY2hpbGRyZW4ubGVu
Z3RoCisgICAgICAgICAgICBpZiBsZW5ndGggPiAwCisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGlsZHJlbigpLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCisg
ICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAor
ICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZpY2ll
bnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1l
cyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0
aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCisg
ICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9k
dWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2VzIG9m
IHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25z
KG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0IHRo
ZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29k
ZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhM
aXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAg
ICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFd
IGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rp
b24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAg
ICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1pdCBw
YXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRo
IGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAgICAg
ICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAg
ICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAgICAg
ICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9w
Y29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGluZGV4
TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAg
ICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAg
Z3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0g
W2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAgICAg
ICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwg
c3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bj
b2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1Yklu
ZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91
dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1h
dGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwg
cHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1l
LCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlz
dCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRl
eExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAg
ICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29k
ZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgorICAg
ICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNoQ29s
dW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAgICBp
ZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAg
ICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAgICAgICByZXR1
cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAgCisg
ICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1
ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAgIyBX
ZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQg
YWJvdXQgaXQuCisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsi
CisgICAgICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7Cisg
ICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJl
bltjb2x1bW5JbmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0
cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8
CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rp
b25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5w
cm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExp
c3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisg
ICAgZW5kCisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1
Y3Rpb25zKQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVj
dGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJl
IGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0
aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAg
ICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMp
CisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1
Y3Rpb25zLCAwKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAg
ICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1
ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAg
ICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIHBy
b2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0cC5w
dXRzICJ7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5h
bWV9ID0gX3ZhbHVlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7cHJv
ZHVjdGlvbi52YXJOYW1lfSk7IgorICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPSBbXQor
ICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICB0cnlBcmd1bWVu
dHMgPSBbXQorICAgICAgICAgICAgbnVtU2NvcGVzID0gMAorICAgICAgICAgICAgc2VlbiA9IHt9
CisgICAgICAgICAgICBwcm9kdWN0aW9uLmVhY2hWYXJpYWJsZSB7CisgICAgICAgICAgICAgICAg
fCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5hbWUsIGNoaWxkVmFyTmFtZSwga2luZCwgaW5kZXggfAor
ICAgICAgICAgICAgICAgIGxvYWRFeHByID0gIiN7cGFyZW50VmFyTmFtZX0tPmNoaWxkKCN7aW5k
ZXh9KSIKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBzZWVuW2NoaWxkVmFy
TmFtZV0KKyAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3VmFyCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiVmFsdWUqICN7dG1wfSA9ICN7bG9hZEV4cHJ9OyIKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t0bXB9ID09ICN7Y2hpbGRWYXJOYW1lfSkgeyIKKyAg
ICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIHNlZW5bY2hpbGRWYXJOYW1lXSA9IHRydWUKKyAgICAgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7Y2hpbGRW
YXJOYW1lfSA9ICN7bG9hZEV4cHJ9OyIKKworICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBD
b25zaWRlciBnZXR0aW5nIHJpZCBvZiB0aGUgJCBwcmVmaXguCisgICAgICAgICAgICAgICAgICAg
ICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUyNworICAgICAg
ICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7
IgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyAr
PSAxCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQg
PT0gOmludGVybmFsIG9yIGtpbmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAgICAg
ICBvcGVyYW5kQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5kIG9y
IGtpbmQgPT0gOmFub25PcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA8
PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFuZAor
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoYWRhcHRvci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICB1bmxlc3MgaW50
ZXJuYWxBcmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFw
dG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIp
IikKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMu
ZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdE9wZXJh
bmRzKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci50cnkje3Byb2R1Y3Rpb24ubmFt
ZX0oIiArIHRyeUFyZ3VtZW50cy5qb2luKCIsICIpICsgIikpIHsiKQorICAgICAgICAgICAgb3V0
cC5wdXRzICJhZGFwdG9yLmFjY2VwdFJvb3RMYXRlKF92YWx1ZSk7IgorICAgICAgICAgICAgdW5s
ZXNzIGludGVybmFsQXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
YWRhcHRvci5hY2NlcHRJbnRlcm5hbHNMYXRlKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIs
ICIpICsgIik7IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB1bmxlc3Mgb3BlcmFuZEFy
Z3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0
T3BlcmFuZHNMYXRlKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKTsiCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuOyIKKyAgICAgICAgICAg
IG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIG51bVNjb3Blcy50aW1lcyB7CisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRz
ICJ9IgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRw
LnB1dHMgIn0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMyIKKworICAgIG91dHAucHV0cyAiI2VuZGlm
IC8vIEIzI3ttYXRjaGVyLm5hbWV9X2giCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVz
dGIzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisj
aW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUg
IlZNLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsK
KworbmFtZXNwYWNlIHsKKworLy8gTm90aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBqdXN0IHVzZSB0
aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlvbiBtYWNoaW5lcnkuCisjZGVmaW5lIENIRUNLKHgpIFJF
TEVBU0VfQVNTRVJUKHgpCisKK1ZNKiB2bTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorVCBjb21waWxlQW5kUnVuKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAg
IGdlbmVyYXRlKHByb2NlZHVyZSwgaml0KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZt
LCBqaXQsIG51bGxwdHIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJ
WkVfQ09ERShsaW5rQnVmZmVyLCAoInRlc3RiMyIpKTsKKyAgICBUICgqZnVuY3Rpb24pKEFyZ3Vt
ZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihjb2RlLmNvZGUoKS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsK
K30KKwordm9pZCB0ZXN0NDIoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGNvbnN0NDIgPSByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpOworICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNvbnN0NDIpOwor
CisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpID09IDQyKTsKK30KKworI2RlZmlu
ZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRh
TG9nKCN0ZXN0ICI6XG4iKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZXN0OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRhTG9nKCIgICAgT0sh
XG4iKTsgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKTsKKwordm9pZCBy
dW4oKQoreworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIHZtID0gJlZNOjpj
cmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisKKyAgICBSVU4odGVzdDQyKCkpOworfQorCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2
KQoreworICAgIFVOVVNFRF9QQVJBTShhcmdjKTsKKyAgICBVTlVTRURfUEFSQU0oYXJndik7Cisg
ICAgCisgICAgcnVuKCk7CisgICAgcmV0dXJuIDA7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFs
bG9jYXRlU3RhY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2Rl
LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5o
IgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25h
bWVzcGFjZSB7CisKK2Jvb2wgYXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgU3RhY2tTbG90KiBzbG90
LCBpbnRwdHJfdCBvZmZzZXRGcm9tRlAsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJT
bG90cykKK3sKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTbG90cykgewor
ICAgICAgICBpZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgYm9vbCBvdmVybGFwID0gV1RGOjpyYW5nZXNPdmVybGFwKAorICAgICAg
ICAgICAgb2Zmc2V0RnJvbUZQLAorICAgICAgICAgICAgb2Zmc2V0RnJvbUZQICsgc3RhdGljX2Nh
c3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkpLAorICAgICAgICAgICAgb3RoZXJTbG90LT5v
ZmZzZXRGcm9tRlAoKSwKKyAgICAgICAgICAgIG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgKyBz
dGF0aWNfY2FzdDxpbnRwdHJfdD4ob3RoZXJTbG90LT5ieXRlU2l6ZSgpKSk7CisgICAgICAgIGlm
IChvdmVybGFwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIHNsb3Qt
PnNldE9mZnNldEZyb21GUChvZmZzZXRGcm9tRlApOworICAgIHJldHVybiB0cnVlOworfQorCit2
b2lkIGFzc2lnbihTdGFja1Nsb3QqIHNsb3QsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3Ro
ZXJTbG90cykKK3sKKyAgICBpZiAoYXR0ZW1wdEFzc2lnbm1lbnQoc2xvdCwgLXN0YXRpY19jYXN0
PGludHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwgb3RoZXJTbG90cykpCisgICAgICAgIHJldHVy
bjsKKworICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBvdGhlclNsb3RzKSB7CisgICAg
ICAgIGlmICghb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICBib29sIGRpZEFzc2lnbiA9IGF0dGVtcHRBc3NpZ25tZW50KAorICAgICAgICAg
ICAgc2xvdCwgb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSAtIHN0YXRpY19jYXN0PGludHB0cl90
PihzbG90LT5ieXRlU2l6ZSgpKSwgb3RoZXJTbG90cyk7CisgICAgICAgIGlmIChkaWRBc3NpZ24p
CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgYWxsb2NhdGVT
dGFjayhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxs
b2NhdGVTdGFjayIpOworCisgICAgLy8gQWxsb2NhdGUgYWxsIG9mIHRoZSBsb2NrZWQgc2xvdHMg
aW4gb3JkZXIuIFRoaXMgaXMga2luZCBvZiBhIGNyYXp5IGFsZ29yaXRobSB0byBhbGxvdyBmb3IK
KyAgICAvLyB0aGUgcG9zc2liaWxpdHkgb2Ygc3RhY2sgc2xvdHMgYmVpbmcgYXNzaWduZWQgZnJh
bWUgb2Zmc2V0cyBiZWZvcmUgd2UgZXZlbiBnZXQgaGVyZS4KKyAgICBBU1NFUlQoIWNvZGUuZnJh
bWVTaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25lZExvY2tlZFN0YWNrU2xv
dHM7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdDsKKyAg
ICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIHN3
aXRjaCAoc2xvdC0+a2luZCgpKSB7CisgICAgICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2Vk
OgorICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgICAg
IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LmFwcGVuZChzbG90KTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91
czoKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAg
ICAgIC8vIEFzIGEgbWF0dGVyIG9mIHNhbml0eSwgdW5hc3NpZ24gdGhpcy4gTWF5YmUgaXQgd291
bGQgYmUgZ29vZCB0byBldmVuIGhhdmUgYQorICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRpb24g
cnVsZSB0aGF0IHRoaXMgY2Fubm90IGhhcHBlbi4KKyAgICAgICAgICAgICAgICBzbG90LT5zZXRP
ZmZzZXRGcm9tRlAoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAvLyBUaGlzIGlzIGEgZmFpcmx5IGV4cGVuc2l2ZSBsb29wLCBidXQg
aXQncyBPSyBiZWNhdXNlIHdlJ2xsIHVzdWFsbHkgb25seSBoYXZlIGEgaGFuZGZ1bCBvZgorICAg
IC8vIGxvY2tlZCBzdGFjayBzbG90cy4KKyAgICB3aGlsZSAoIWxvY2tlZFN0YWNrU2xvdHNXb3Jr
bGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gbG9ja2VkU3RhY2tT
bG90c1dvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGFzc2lnbihzbG90LCBhc3NpZ25lZExv
Y2tlZFN0YWNrU2xvdHMpOworICAgICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5k
KHNsb3QpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIGFub255bW91cyBzbG90
cy4gTm90ZSB0aGF0IHRoZW9yZXRpY2FsbHkgd2Ugc2hvdWxkIGRvIGFuIGVzY2FwZSBhbmFseXNp
cworICAgIC8vIGhlcmUuIEJ1dCwgY3VycmVudGx5IEFpciBkb2Vzbid0IHN1cHBvcnQgZXNjYXBp
bmcgYSBTdGFja1Nsb3QhCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBlc2NhcGluZyBh
IFN0YWNrU2xvdCBhbmQgYWRkIGVzY2FwZSBhbmFseXNpcyB0byBhbGxvY2F0ZVN0YWNrKCkuCisg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQzMAorCisg
ICAgYXV0byBpc1JlbGV2YW50ID0gW10gKGNvbnN0IEFyZyYgYXJnKSAtPiBib29sIHsKKyAgICAg
ICAgcmV0dXJuIGFyZy5pc1N0YWNrKCkgJiYgYXJnLnN0YWNrU2xvdCgpLT5raW5kKCkgPT0gU3Rh
Y2tTbG90S2luZDo6QW5vbnltb3VzOworICAgIH07CisKKyAgICBMaXZlbmVzczxBcmc+IGxpdmVu
ZXNzKGNvZGUpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4g
aW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNr
U2xvdCo+IHNsb3RzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAg
ICAgICAgTGl2ZW5lc3M8QXJnPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2sp
OworCisgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdICgpIHsKKyAgICAgICAgICAgIC8vIEZv
cm0gYSBjbGlxdWUgb2Ygc3RhY2sgc2xvdHMgdGhhdCBpbnRlcmZlcmUuIEZpcnN0IGZpbmQgdGhl
IGxpc3Qgb2Ygc3RhY2sgc2xvdHMKKyAgICAgICAgICAgIC8vIHRoYXQgYXJlIGxpdmUgcmlnaHQg
bm93LgorICAgICAgICAgICAgc2xvdHMucmVzaXplKDApOworICAgICAgICAgICAgZm9yIChBcmcg
YXJnIDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1JlbGV2YW50
KGFyZykpCisgICAgICAgICAgICAgICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tTbG90KCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNs
b3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBvdXRlciA9IHNs
b3RzW2ldOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgc2xv
dHMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBpbm5lciA9
IHNsb3RzW2ldOworCisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogZmlyc3QgPSBvdXRl
cjsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzZWNvbmQgPSBpbm5lcjsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKGZpcnN0LT5pbmRleCgpID4gc2Vjb25kLT5pbmRleCgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKGZpcnN0LCBzZWNvbmQpOworCisgICAgICAg
ICAgICAgICAgICAgIGludGVyZmVyZW5jZVtmaXJzdF0uYWRkKHNlY29uZCk7CisgICAgICAgICAg
ICAgICAgICAgIGludGVyZmVyZW5jZVtzZWNvbmRdLmFkZChmaXJzdCk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGludGVyZmVyZSgpOwor
ICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgp
OyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5h
dChpbnN0SW5kZXgpKTsKKyAgICAgICAgICAgIGludGVyZmVyZSgpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0
aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKKyAgICAvLyBTdGFja1Ns
b3Qgd2UganVzdCB3YW50IHRvIGZpbmQgdGhlIG9mZnNldEZyb21GUCB0aGF0IGlzIGNsb3Nlc3Qg
dG8gemVybyB3aGlsZSBlbnN1cmluZyBubworICAgIC8vIG92ZXJsYXAgd2l0aCBvdGhlciBTdGFj
a1Nsb3RzIHRoYXQgdGhpcyBvdmVybGFwcyB3aXRoLgorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBv
dGhlclNsb3RzOworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkp
IHsKKyAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAvLyBB
bHJlYWR5IGFzc2lnbmVkIGFuIG9mZnNldC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiYgaW50ZXJmZXJpbmdTbG90cyA9IGlu
dGVyZmVyZW5jZVtzbG90XTsKKyAgICAgICAgb3RoZXJTbG90cy5yZXNpemUoYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzLnNpemUoKSArIGludGVyZmVyaW5nU2xvdHMuc2l6ZSgpKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIG90aGVyU2xvdHNbaV0gPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xv
dHNbaV07CisgICAgICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGFzc2lnbmVkTG9ja2VkU3RhY2tT
bG90cy5zaXplKCk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBpbnRlcmZl
cmluZ1Nsb3RzKQorICAgICAgICAgICAgb3RoZXJTbG90c1tuZXh0SW5kZXgrK10gPSBvdGhlclNs
b3Q7CisKKyAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOworICAgIH0KKworICAgIC8v
IEZpZ3VyZSBvdXQgaG93IG11Y2ggc3RhY2sgd2UncmUgdXNpbmcgZm9yIHN0YWNrIHNsb3RzLgor
ICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSAwOworICAgIGZvciAoU3RhY2tT
bG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgZnJhbWVTaXplRm9yU3Rh
Y2tTbG90cyA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cywK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
KTsKKyAgICB9CisKKyAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgZnJhbWVTaXplRm9yU3RhY2tTbG90cyk7
CisKKyAgICAvLyBOb3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQgYXJlYSB3
ZSBuZWVkLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZv
ciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGlu
c3QuYXJncykgeworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDggYnl0ZXMg
b2YgdGhlIGNhbGwgYXJnLiBCdXQgdGhhdCdzIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBz
dWNoIGFuIGF3ZXNvbWUgYXNzdW1wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKGFyZy5vZmZzZXQoKSArIDgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvZGUu
c2V0RnJhbWVTaXplKGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgKyBjb2RlLmNhbGxBcmdBcmVhU2l6
ZSgpKTsKKworICAgIC8vIEZpbmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1c2UgQWRkcidz
IGluc3RlYWQgb2YgU3RhY2tTbG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcworICAgIC8vIHRyYW5z
Zm9ybWF0aW9uIHNpbmNlIHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJyYXkgdG8gZmln
dXJlIG91dCB3aGljaCBTdGFja1Nsb3QgYW55CisgICAgLy8gb2Zmc2V0LWZyb20tRlAgcmVmZXJz
IHRvLgorCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9y
IChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5z
dC5hcmdzKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6
OmFkZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgYXJnLnN0YWNr
U2xvdCgpLT5vZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAgICAgICBhcmcg
PSBBcmc6OmFkZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpIC0gY29k
ZS5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBbGxvY2F0ZVN0YWNrX2gKKyNk
ZWZpbmUgQWlyQWxsb2NhdGVTdGFja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisK
Ky8vIFRoaXMgYWxsb2NhdGVzIFN0YWNrU2xvdHMgdG8gcGxhY2VzIG9uIHRoZSBzdGFjay4gSXQg
Zmlyc3QgYWxsb2NhdGVzIHRoZSBwaW5uZWQgb25lcyBpbiBpbmRleAorLy8gb3JkZXIgYW5kIHRo
ZW4gaXQgYWxsb2NhdGVzIHRoZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4KKwordm9pZCBhbGxvY2F0
ZVN0YWNrKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckFsbG9jYXRlU3RhY2tfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFyZy5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJT
dGFja1Nsb3QuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCit2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQoIjxp
bnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUbXA6CisgICAgICAgIG91dC5w
cmludCh0bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEltbToKKyAgICAgICAgb3V0
LnByaW50KCIkIiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW02NDoK
KyAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0
LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmRleDoKKyAgICAgICAgaWYgKG9mZnNldCgpKQor
ICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
YmFzZSgpLCAiLCIsIGluZGV4KCkpOworICAgICAgICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgaWYgKG9mZnNldCgpKQor
ICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
cG9pbnRlckR1bXAoc3RhY2tTbG90KCkpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDYWxsQXJnOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQo
b2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIihjYWxsQXJnKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZWxhdGlvbmFsQ29u
ZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBv
dXQucHJpbnQoYXNSZXN1bHRDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFNwZWNpYWw6CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJUbXAuaCIKKyNpbmNsdWRlICJCM0NvbW1v
bi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFja1Nsb3Q7CisK
Ky8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3
ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3QoLi4uLCBB
cmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1
YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkgdGVyc2Ug
YmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtpbmQgOiBp
bnQ4X3QgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBUbXAsCisgICAgICAgIEltbSwKKyAg
ICAgICAgSW1tNjQsCisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAorICAgICAgICBDYWxs
QXJnLAorICAgICAgICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAgUmVzQ29uZCwK
KyAgICAgICAgU3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAg
ICAgICBVc2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsKKworICAgIGVu
dW0gVHlwZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAgIH07CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOworCisgICAgc3RhdGljIGJvb2wg
aXNVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAg
IGNhc2UgVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0
eXBlRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNh
c2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgRG91YmxlOgor
ICAgICAgICAgICAgcmV0dXJuIEZQOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gR1A7CisgICAgfQorCisgICAgQXJnKCkKKyAgICAgICAg
OiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorCisgICAgQXJnKEFpcjo6VG1wIHRtcCkK
KyAgICAgICAgOiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFzZSh0bXApCisgICAgeworICAg
IH0KKworICAgIHN0YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBB
cmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tOworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIGltbTY0KGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAgICAgICByZXN1bHQubV9vZmZz
ZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMg
QXJnIGFkZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZhbHVlLCBpbnQzMl90IG9mZnNl
dCA9IDApCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4odmFsdWUpOworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9mZnNldDsgLy8gSSBrbm93LCB5
dWNrLgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgY2Fs
bEFyZyhpbnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNW
YWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkg
eworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2FzZSA0OgorICAg
ICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRp
YyB1bnNpZ25lZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIDQ6CisgICAg
ICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIDM7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIEFyZyBp
bmRleChBaXI6OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5zaWduZWQgc2NhbGUgPSAxLCBp
bnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOwor
ICAgICAgICBBU1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRTY2Fs
ZShzY2FsZSkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
SW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9p
bmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KHNjYWxlKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVsQ29uZDsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNv
bmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBSZXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzcGVjaWFsKEFpcjo6
U3BlY2lhbCogc3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CisgICAgICAgICAgICAmJiBt
X2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9i
YXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAg
ICYmIG1fc2NhbGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAgIGJvb2wgaXNUbXAoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7CisgICAgfQorCisgICAgYm9v
bCBpc0ltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTsKKyAg
ICB9CisKKyAgICBib29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBJbW02NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAgYm9vbCBpc1N0YWNr
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhY2s7CisgICAgfQor
CisgICAgYm9vbCBpc0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBDYWxsQXJnOworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAgIGJvb2wgaXNSZWxD
b25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKKyAg
ICB9CisKKyAgICBib29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
a2luZCgpID09IFJlc0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOworICAgIH0KKworICAgIGJv
b2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSB8fCBpc1N0
YWNrKCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisK
KyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gSW1tIHx8IGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAg
ICB9CisKKyAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIEFpcjo6VG1w
IGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtp
bmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgYm9v
bCBoYXNPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxB
cmc6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2lu
ZCgpID09IFN0YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1f
c2NhbGUpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IENhbGxB
cmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMy
X3Q+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpU
bXAgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7
CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBy
ZXR1cm4gbV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgQWly
OjpTcGVjaWFsKiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gU3BlY2lhbCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4o
bV9vZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9vbCBp
c0ZQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlz
RlAoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVz
ZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBpc0dQ
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW1tOgorICAgICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNh
c2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAg
ICAgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2Ug
U3BlY2lhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAg
ICAgICAgICAgIHJldHVybiBpc0dQVG1wKCk7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlbGxzIHVz
IGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEZQ
IHZhbHVlLgorICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtp
bmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAgICAg
ICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBJbnZh
bGlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZHI6CisgICAg
ICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFy
ZzoKKyAgICAgICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxvdyBJbW02NCBhcyBhIGRvdWJs
ZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0
dXJuIGlzRlBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFzVHlwZSgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToK
KyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmlndW91cyBmb3Ig
c29tZSBhcmcga2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisKKyAgICBib29s
IGlzVHlwZShUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQKCk7CisgICAgICAgIGNh
c2UgRlA6CisgICAgICAgICAgICByZXR1cm4gaXNGUCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0
bXAoKS5pc0dQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAgICB9
CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5m
cHIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyByZWco
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKworICAg
IHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgp
LmdwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisgICAg
dW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnRt
cEluZGV4KCk7CisgICAgfQorCisgICAgQXJnIHdpdGhPZmZzZXQoaW50MzJfdCBhZGRpdGlvbmFs
T2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNPZmZzZXQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90PihvZmZz
ZXQoKSwgYWRkaXRpb25hbE9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAg
ICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIHJl
dHVybiBhZGRyKGJhc2UoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAg
Y2FzZSBTdGFjazoKKyAgICAgICAgICAgIHJldHVybiBzdGFjayhzdGFja1Nsb3QoKSwgb2Zmc2V0
KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICAg
ICAgcmV0dXJuIGNhbGxBcmcob2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAg
Y2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpbmRleChiYXNlKCksIGluZGV4KCksIHNj
YWxlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0
dXJuIEFyZygpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAg
ICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7
CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFRoaXMgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBh
IERlZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBk
ZWYgdGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVy
Y3gpCisgICAgLy8KKyAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdS
b2xlLCBUeXBlIGFyZ1R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0
b3IobV9iYXNlLCBhcmdSb2xlLCBhcmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3Io
bV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBh
c1RydXN0ZWRJbW0zMigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW0oKSk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0IGFzVHJ1c3RlZEltbTY0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NCh2YWx1ZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyIGFzVHJ1c3RlZEltbVB0cigpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaXM2NEJpdCgpKQorICAgICAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXJWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhc0FkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzQWRkcigpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG1fYmFzZS5ncHIoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFzQmFzZUluZGV4KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0luZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgIG1fYmFzZS5ncHIoKSwgbV9pbmRleC5ncHIoKSwg
c3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlNjYWxlPihsb2dTY2FsZSgpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbj4obV9vZmZzZXQp
OworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gYXNSZXN1bHRD
b25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVzQ29uZCgpKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24+
KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworICAgIEFyZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9i
YXNlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAq
dGhpcyA9PSBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKworICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhpcyByZWFsbHkgZG9lc24n
dCBoYXZlIHRvIGJlIHRoYXQgZ3JlYXQuCisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50
NjRfdD46Omhhc2gobV9vZmZzZXQpICsgbV9raW5kICsgbV9zY2FsZSArIG1fYmFzZS5oYXNoKCkg
KworICAgICAgICAgICAgbV9pbmRleC5oYXNoKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGlu
dDY0X3QgbV9vZmZzZXQgeyAwIH07CisgICAgS2luZCBtX2tpbmQgeyBJbnZhbGlkIH07CisgICAg
aW50MzJfdCBtX3NjYWxlIHsgMSB9OworICAgIEFpcjo6VG1wIG1fYmFzZTsKKyAgICBBaXI6OlRt
cCBtX2luZGV4OworfTsKKworc3RydWN0IEFyZ0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IEFyZyYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgQXJnJiBhLCBjb25zdCBBcmcmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQor
ICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgdHlwZWRlZiBK
U0M6OkIzOjpBaXI6OkFyZ0hhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpB
aXI6OkFyZz4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpBcmc+IHsKKyAg
ICAvLyBCZWNhdXNlIG1fc2NhbGUgaXMgMSBpbiB0aGUgZW1wdHkgdmFsdWUuCisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQXJnX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2su
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNp
Y0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJl
Zml4ID0gIiMiOworCitib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sq
IGJsb2NrKQoreworICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOwor
fQorCitib29sIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2Nr
KQoreworICAgIHJldHVybiBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQor
Citib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBC
YXNpY0Jsb2NrKiB0bykKK3sKKyAgICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlz
LCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxu
Iik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMpCisgICAgICAgIG91dC5wcmlu
dCgiICAgICIsIGluc3QsICJcbiIpOworfQorCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2ln
bmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRleCkKKyAgICAs
IG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNCbG9ja19oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyRnJlcXVlbnRlZEJsb2NrLmgiCisj
aW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xh
c3MgQ29kZTsKK2NsYXNzIEluc2VydGlvblNldDsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7
CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAgICB0eXBlZGVmIFZlY3Rv
cjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEZy
ZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIHVuc2lnbmVkIGluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBiZWdp
bigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBl
bmQoKSB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5zdExp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0K
KworICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9pbnN0
c1tpbmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1faW5zdHNb
aW5kZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0
cy5sYXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBhcHBlbmRJbnN0KEluc3Qm
JiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3YXJkPEluc3Q+
KGluc3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgdm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAg
bV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KSk7CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBjYXNlIHRvIHdoaWNoIHRo
ZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIxIiBjYXNlIGlzIHRoZQor
ICAgIC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGZhbGwtdGhy
b3VnaCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3Jz
KCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIEZyZXF1ZW50ZWRC
bG9jayBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29y
c1tpbmRleF07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxp
c3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNj
ZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKKyAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
c3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckJs
b2NrKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0K
KyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nl
c3NvckJsb2NrcygpCisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxC
YXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMpOworICAgIH0KKyAgICBTdWNj
ZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1
Y2Nlc3NvckJsb2NrcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29s
bGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3Nv
cnMpOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0K
KyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1f
cHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVj
ZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nv
ckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisKKyAgICBi
b29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsK
KyAgICAKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsK
KworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBTdWNj
ZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3Nv
cnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tE
dW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayog
YmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9j
aykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNv
bnN0IEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1w
IGRlZXBEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFz
aWNCbG9ja0R1bXAoYmxvY2spOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQmFzaWNCbG9ja19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3Bl
Y2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2Fs
bFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0
ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lz
dGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShS
ZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJl
ZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwor
Q0NhbGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6
OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpV
c2UsIEFyZzo6R1ApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFy
Z3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBx
dWVyeSB0aGUgYXJnJ3MgdHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdl
CisgICAgICAgIC8vIHJlcXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCByZWdpc3RlcnMu
CisgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tpXS50
eXBlKCkpOworICAgIH0KK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5z
dCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJ
bW06CisgICAgICAgIGlmIChpczMyQml0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYgKGlzNjRCaXQo
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBB
cmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAg
Y2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc0dQKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0
LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbaV0uaXNSZWcoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5zdC5hcmdzW2ldID09
IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuICBmYWxzZTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1pdHNTdGFjayhJ
bnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEgY2FuIGJlIGEgc3RhY2sg
YWRkcmVzcyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6
cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQoreworfQorCitD
Q2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2Fs
bEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIHN3aXRjaCAoaW5zdC5h
cmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0
OgorICAgICAgICBqaXQubW92ZShpbnN0LmFyZ3NbMV0uYXNUcnVzdGVkSW1tUHRyKCksIHNjcmF0
Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sx
XS5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBq
aXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25z
dCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpCit7
CisgICAgcmV0dXJuIG1fY2xvYmJlcmVkUmVnczsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmR1
bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJDQ2FsbCIp
OworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJmdW5jdGlvbiBjYWxsIHRoYXQgdXNlcyB0aGUgQyBj
YWxsaW5nIGNvbnZlbnRpb24uIik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBaXJDQ2FsbFNwZWNpYWxfaAorI2RlZmluZSBBaXJDQ2FsbFNwZWNpYWxf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBVc2UgdGhp
cyBzcGVjaWFsIGZvciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFyZyAwIGlzIG9mIGNvdXJzZSBh
IFNwZWNpYWwgYXJnIHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0NhbGxTcGVjaWFsIG9iamVjdC4g
QXJnIDEgaXMgdGhlIGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJbW1QdHIsIGEgcmVnaXN0ZXIs
IG9yIGFuIGFkZHJlc3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3MgYXJlIGp1c3QgdGhlIHNldCBv
ZiBhcmd1bWVudCByZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwuIEZvciBhcmd1bWVudHMgdGhh
dCBnbyB0bworLy8gdGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0aGUgZ3J1bnQgd29yayBvZiBk
b2luZyB0aG9zZSBzdGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBvbmx5IHJlYXNvbiB3aHkKKy8v
IHdlIHNwZWNpZnkgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBhcmd1bWVudHMgdG8gYSBjYWxs
IGlzIHNvIHRoYXQgdGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBzZWUKKy8vIHRoYXQgdGhleSBn
ZXQgdXNlZCBoZXJlLiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRvbWFnaWNhbGx5IHJlcG9ydCBh
bGwgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2VkIGJlY2F1c2UgaWYgd2UgaGFk
IGEgY2FsbCB0aGF0IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhleSdkIGFwcGVhciB0byBiZSBs
aXZlIHVudGlsIHNvbWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhlIHByb2xvZ3VlLCB3aGljaGV2
ZXIgaGFwcGVuZWQgc29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNpYWwgOiBwdWJsaWMgU3BlY2lh
bCB7CitwdWJsaWM6CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAgfkNDYWxsU3BlY2lhbCgpOwor
CisgICAgLy8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4g
SXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBub3QKKyAgICAvLyB1c2Vk
IGZvciBhcmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0
aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8gdGhpcyBzcGVjaWFsIHRv
IGJlIHNwZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNo
UmVnaXN0ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBm
b3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNr
PiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9v
bCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZv
aWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBvdmVycmlk
ZTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYs
IEdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4
dHJhQ2xvYmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX2Ns
b2JiZXJlZFJlZ3M7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ29kZTo6Q29kZSgpCit7Cit9CisKK0NvZGU6On5Db2Rl
KCkKK3sKK30KKworQmFzaWNCbG9jayogQ29kZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSkK
K3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2so
bV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBi
bG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QodW5zaWdu
ZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChieXRl
U2l6ZSwgbV9zdGFja1Nsb3RzLnNpemUoKSwga2luZCwgdmFsdWUpKTsKKyAgICBTdGFja1Nsb3Qq
IHJlc3VsdCA9IHNsb3QuZ2V0KCk7CisgICAgbV9zdGFja1Nsb3RzLmFwcGVuZChXVEY6Om1vdmUo
c2xvdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NwZWNpYWwqIENvZGU6OmFkZFNwZWNp
YWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+IHNwZWNpYWwpCit7CisgICAgU3BlY2lhbCogcmVz
dWx0ID0gc3BlY2lhbC5nZXQoKTsKKyAgICBtX3NwZWNpYWxzLmFwcGVuZChXVEY6Om1vdmUoc3Bl
Y2lhbCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NDYWxsU3BlY2lhbCogQ29kZTo6Y0Nh
bGxTcGVjaWFsKCkKK3sKKyAgICBpZiAoIW1fY0NhbGxTcGVjaWFsKSB7CisgICAgICAgIG1fY0Nh
bGxTcGVjaWFsID0gc3RhdGljX2Nhc3Q8Q0NhbGxTcGVjaWFsKj4oCisgICAgICAgICAgICBhZGRT
cGVjaWFsKHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxTcGVjaWFsPigpKSk7CisgICAgfQorCisgICAg
cmV0dXJuIG1fY0NhbGxTcGVjaWFsOworfQorCit2b2lkIENvZGU6OnJlc2V0UmVhY2hhYmlsaXR5
KCkKK3sKKyAgICBCMzo6cmVzZXRSZWFjaGFiaWxpdHkobV9ibG9ja3MpOworfQorCit2b2lkIENv
ZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworICAg
IGlmIChzdGFja1Nsb3RzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xv
dHM6XG4iKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzbG90KSwgIlxuIik7CisgICAg
fQorICAgIGlmIChzcGVjaWFscygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlNwZWNp
YWxzOlxuIik7CisgICAgICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6IHNwZWNpYWxzKCkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcChzcGVjaWFsKSwgIlxuIik7Cisg
ICAgfQorICAgIG91dC5wcmludCgiRnJhbWUgc2l6ZTogIiwgbV9mcmFtZVNpemUsICJcbiIpOwor
ICAgIG91dC5wcmludCgiQ2FsbCBhcmcgYXJlYSBzaXplOiAiLCBtX2NhbGxBcmdBcmVhU2l6ZSwg
IlxuIik7CisgICAgb3V0LnByaW50KCJDYWxsZWUgc2F2ZXM6ICIsIG1fY2FsbGVlU2F2ZVJlZ2lz
dGVycywgIlxuIik7Cit9CisKK3Vuc2lnbmVkIENvZGU6OmZpbmRGaXJzdEJsb2NrSW5kZXgodW5z
aWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSgpICYmICFhdChp
bmRleCkpCisgICAgICAgIGluZGV4Kys7CisgICAgcmV0dXJuIGluZGV4OworfQorCit1bnNpZ25l
ZCBDb2RlOjpmaW5kTmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXggKyAxKTsKK30KKworQmFzaWNCbG9jayog
Q29kZTo6ZmluZE5leHRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICByZXR1
cm4gYXQoZmluZE5leHRCbG9ja0luZGV4KGJsb2NrLT5pbmRleCgpKSk7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMzAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyQ29kZV9oCisjZGVmaW5lIEFpckNvZGVfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFs
LmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNl
dExpc3QuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWlyIHsKKwor
Y2xhc3MgQ0NhbGxTcGVjaWFsOworCisvLyBUaGlzIGlzIGFuIElSIHRoYXQgaXMgdmVyeSBjbG9z
ZSB0byB0aGUgYmFyZSBtZXRhbC4gSXQgcmVxdWlyZXMgYWJvdXQgNDB4IG1vcmUgYnl0ZXMgdGhh
biB0aGUKKy8vIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgLSBmb3IgZXhhbXBsZSBpZiB5b3UncmUg
Z2VuZXJhdGluZyAxTUIgb2YgbWFjaGluZSBjb2RlLCB5b3UgbmVlZCBhYm91dAorLy8gNDBNQiBv
ZiBBaXIuCisKK2NsYXNzIENvZGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvZGUpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENvZGUoKTsKKyAgICB+
Q29kZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBO
YU4pOworCisgICAgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0
YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOworCisgICAgU3BlY2lhbCog
YWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4pOworCisgICAgLy8gVGhpcyBpcyB0
aGUgc3BlY2lhbCB5b3UgbmVlZCB0byBtYWtlIGEgQyBjYWxsIQorICAgIENDYWxsU3BlY2lhbCog
Y0NhbGxTcGVjaWFsKCk7CisKKyAgICBUbXAgbmV3VG1wKEFyZzo6VHlwZSB0eXBlKQorICAgIHsK
KyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAgICAg
ICAgIHJldHVybiBUbXA6OmdwVG1wRm9ySW5kZXgobV9udW1HUFRtcHMrKyk7CisgICAgICAgIGNh
c2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJldHVybiBUbXA6OmZwVG1wRm9ySW5kZXgobV9udW1G
UFRtcHMrKyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1UbXBzKEFyZzo6
VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2Ug
QXJnOjpHUDoKKyAgICAgICAgICAgIHJldHVybiBtX251bUdQVG1wczsKKyAgICAgICAgY2FzZSBB
cmc6OkZQOgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtRlBUbXBzOworICAgICAgICB9CisgICAg
fQorCisgICAgdW5zaWduZWQgY2FsbEFyZ0FyZWFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jYWxs
QXJnQXJlYVNpemU7IH0KKworICAgIC8vIFlvdSBjYW4gY2FsbCB0aGlzIGJlZm9yZSBjb2RlIGdl
bmVyYXRpb24gdG8gZm9yY2UgYSBtaW5pbXVtIGNhbGwgYXJnIGFyZWEgc2l6ZS4KKyAgICB2b2lk
IHJlcXVlc3RDYWxsQXJnQXJlYVNpemUodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIG1f
Y2FsbEFyZ0FyZWFTaXplID0gc3RkOjptYXgoCisgICAgICAgICAgICBtX2NhbGxBcmdBcmVhU2l6
ZSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzaXplKSkpOworICAgIH0KKworICAgIHVuc2ln
bmVkIGZyYW1lU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVTaXplOyB9CisKKyAgICAvLyBP
bmx5IHBoYXNlcyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24gYXJlIGFsbG93ZWQgdG8gc2V0IHRo
aXMuIEN1cnJlbnRseSwgb25seQorICAgIC8vIEFpcjo6YWxsb2NhdGVTdGFjaygpIGRvZXMgdGhp
cy4KKyAgICB2b2lkIHNldEZyYW1lU2l6ZSh1bnNpZ25lZCBmcmFtZVNpemUpCisgICAgeworICAg
ICAgICBtX2ZyYW1lU2l6ZSA9IGZyYW1lU2l6ZTsKKyAgICB9CisKKyAgICBSZWdpc3RlckF0T2Zm
c2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lz
dGVyczsgfQorCisgICAgLy8gUmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIGRlbGV0ZXMgdW5y
ZWFjaGFibGUgYmxvY2tzLgorICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRl
eCk7IH0KKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0KGlu
ZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID49IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmRGaXJz
dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0OworCisgICAgLy8gRmluZHMgdGhlIHNt
YWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPiBp
bmRleC4KKyAgICB1bnNpZ25lZCBmaW5kTmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNv
bnN0OworCisgICAgQmFzaWNCbG9jayogZmluZE5leHRCbG9jayhCYXNpY0Jsb2NrKikgY29uc3Q7
CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigp
CisgICAgICAgICAgICA6IG1fY29kZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDAp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvZGUmIGNv
ZGUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX2NvZGUoJmNvZGUpCisgICAgICAg
ICAgICAsIG1faW5kZXgobV9jb2RlLT5maW5kRmlyc3RCbG9ja0luZGV4KGluZGV4KSkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29kZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0K
KworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1faW5kZXggPSBtX2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgobV9pbmRleCArIDEpOworICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgY29uc3QgQ29kZSogbV9jb2RlOworICAgICAgICB1bnNpZ25lZCBtX2lu
ZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBjbGFzcyBTdGFja1Nsb3RzQ29sbGVjdGlvbiB7
CisgICAgcHVibGljOgorICAgICAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBj
b2RlKQorICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNrU2xv
dHMuc2l6ZSgpOyB9CisgICAgICAgIFN0YWNrU2xvdCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNrU2xvdHNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFN0
YWNrU2xvdCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5k
ZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAg
ICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0
cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24m
IGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0
aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRv
ciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24t
PmF0KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAg
ICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAgU3Rh
Y2tTbG90c0NvbGxlY3Rpb24gc3RhY2tTbG90cygpIGNvbnN0IHsgcmV0dXJuIFN0YWNrU2xvdHND
b2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAorICAgIGNsYXNzIFNwZWNpYWxzQ29sbGVjdGlvbiB7
CisgICAgcHVibGljOgorICAgICAgICBTcGVjaWFsc0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29k
ZSkKKyAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFscy5z
aXplKCk7IH0KKyAgICAgICAgU3BlY2lhbCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fY29kZS5tX3NwZWNpYWxzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTcGVjaWFsKiBv
cGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKwor
ICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0
ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAg
ICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24s
IHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0
aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgU3BlY2lhbCogb3BlcmF0b3IqKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFNw
ZWNpYWxzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgY29uc3QgQ29kZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTcGVjaWFsc0NvbGxlY3Rpb24g
c3BlY2lhbHMoKSBjb25zdCB7IHJldHVybiBTcGVjaWFsc0NvbGxlY3Rpb24oKnRoaXMpOyB9Cisg
ICAgCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9z
dGFja1Nsb3RzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxv
Y2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4+IG1fc3BlY2lhbHM7Cisg
ICAgQ0NhbGxTcGVjaWFsKiBtX2NDYWxsU3BlY2lhbCB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25l
ZCBtX251bUdQVG1wcyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUZQVG1wcyB7IDAgfTsKKyAg
ICB1bnNpZ25lZCBtX2ZyYW1lU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2NhbGxBcmdBcmVh
U2l6ZSB7IDAgfTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3Rl
cnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckZyZXF1ZW50ZWRCbG9ja19oCisjZGVm
aW5lIEFpckZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpckZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorI2luY2x1
ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1
ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5n
LmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2lu
Y2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGdlbmVyYXRl
KENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIGlmIChzaG91bGRWYWxpZGF0
ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUsICJpbml0aWFsIik7CisKKyAgICBpZiAoc2hv
dWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4iKTsKKyAgICAg
ICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBv
dXIgb3B0aW1pemF0aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIC8vIEZJWE1FOiBBZGQg
QWlyIG9wdGltaXphdGlvbnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDQ1NgorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBoYXZlIGEg
cmVhbCByZWdpc3RlciBhbGxvY2F0b3IuIFRoZW4sIHdlIGNvdWxkIHVzZSBzcGlsbEV2ZXJ5dGhp
bmcoKQorICAgIC8vIGluIHBsYWNlIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3Igb25seSBmb3Ig
dGVzdGluZy4KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDQ1NworICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKKworICAgIC8vIFByaW9y
IHRvIHRoaXMgcG9pbnQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhp
cyBtYWtlcyBpdCBleHBsaWNpdC4gSXQgYWxzbworICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRl
bnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgorICAg
IGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUpOworCisgICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sg
YW5kIENhbGxBcmcgQXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRl
ci4gSXQgZG9lcworICAgIC8vIHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xv
dHMuIEl0IHNob3VsZCBiZSBwcmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQorICAg
IC8vIHNob3VsZG4ndCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgorICAgIGFs
bG9jYXRlU3RhY2soY29kZSk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBoYXZl
IGEgY29kZSBsYXlvdXQgb3B0aW1pemF0aW9uIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ3OAorCisgICAgLy8gRklYTUU6IFdlIG5lZWQg
YSBsYXRlIGxpdmVuZXNzIGFuYWx5c2lzIG92ZXIgcmVnaXN0ZXJzIHRvIGZpbGwgaW4gdGhlCisg
ICAgLy8gU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycygpLgorICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MTEKKworICAgIGlmIChzaG91bGRWYWxp
ZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUsICJmaW5hbCIpOworCisgICAgaWYgKHNo
b3VsZER1bXBJUigpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBiZWZvcmUgZ2VuZXJhdGlvbjpc
biIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIEFuZCBub3csIHdl
IGdlbmVyYXRlIGNvZGUuCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0
LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1h
Y3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBHZW5lcmF0aW9uQ29u
dGV4dCBjb250ZXh0OworICAgIGNvbnRleHQuY29kZSA9ICZjb2RlOworICAgIEluZGV4TWFwPEJh
c2ljQmxvY2ssIENDYWxsSGVscGVyczo6TGFiZWw+IGJsb2NrTGFiZWxzKGNvZGUuc2l6ZSgpKTsK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1
bXBzKGNvZGUuc2l6ZSgpKTsKKworICAgIGF1dG8gbGluayA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpK
dW1wIGp1bXAsIEJhc2ljQmxvY2sqIHRhcmdldCkgeworICAgICAgICBpZiAoYmxvY2tMYWJlbHNb
dGFyZ2V0XS5pc1NldCgpKSB7CisgICAgICAgICAgICBqdW1wLmxpbmtUbyhibG9ja0xhYmVsc1t0
YXJnZXRdLCAmaml0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGJsb2NrSnVtcHNbdGFyZ2V0XS5hcHBlbmQoanVtcCk7CisgICAgfTsKKworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGJsb2NrSnVtcHNbYmxvY2tdLmxpbmso
JmppdCk7CisgICAgICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49IDEpOworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+YXQoaSkuZ2VuZXJhdGUoaml0LCBj
b250ZXh0KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7
CisgICAgICAgIH0KKworICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5vcGNvZGUgPT0gSnVtcAor
ICAgICAgICAgICAgJiYgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmluZE5leHRC
bG9jayhibG9jaykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYmxvY2st
Pmxhc3QoKS5vcGNvZGUgPT0gUmV0KSB7CisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9u
J3QgcmVwcmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVl
ZCB0bworICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgorICAgICAgICAgICAgaml0
LmVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGp1bXAgPSBibG9jay0+bGFzdCgpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAg
ICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykKKyAgICAgICAgICAgIGp1bXAgPSBpbnN0Lmdl
bmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIHN3aXRjaCAoYmxvY2stPm51bVN1Y2Nlc3Nv
cnMoKSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBBU1NFUlQoIWp1bXAuaXNTZXQo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbGlu
ayhqdW1wLCBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJs
b2NrKDApKTsKKyAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxvY2soMSkgIT0gY29k
ZS5maW5kTmV4dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgICAgICBsaW5rKGppdC5qdW1wKCks
IGJsb2NrLT5zdWNjZXNzb3JCbG9jaygxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgbGF0ZVBh
dGggOiBjb250ZXh0LmxhdGVQYXRocykKKyAgICAgICAgbGF0ZVBhdGgtPnJ1bihqaXQsIGNvbnRl
eHQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGVfaAor
I2RlZmluZSBBaXJHZW5lcmF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBo
YXNuJ3QgaGFkIGFueSBzdGFjayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQg
YW55CisvLyByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdz
LCBhbmQgdGhlbiBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuCisvLyBDQ2FsbEhl
bHBlcnMgaW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcyBpbiB0aGUg
c3VwcGxpZWQgY29kZSBhcyBpdCBpcworLy8gZ2VuZXJhdGluZy4KK3ZvaWQgZ2VuZXJhdGUoQ29k
ZSYsIENDYWxsSGVscGVycyYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworLy8gVGhpcyBpcyBnZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5y
Yi4KKyNpbmNsdWRlICJBaXJPcGNvZGVHZW5lcmF0ZWQuaCIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25D
b250ZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0aW9uQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisjZGVmaW5lIEFpckdlbmVyYXRpb25Db250ZXh0
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVj
dCBHZW5lcmF0aW9uQ29udGV4dCB7CisgICAgdHlwZWRlZiB2b2lkIExhdGVQYXRoRnVuY3Rpb24o
Q0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRh
c2s8TGF0ZVBhdGhGdW5jdGlvbj4gTGF0ZVBhdGg7CisKKyAgICBWZWN0b3I8UmVmUHRyPExhdGVQ
YXRoPj4gbGF0ZVBhdGhzOworICAgIENvZGUqIGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJI
YW5kbGVDYWxsZWVTYXZlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFz
ZVNjb3BlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKwordm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2Nv
cGUgcGhhc2VTY29wZShjb2RlLCAiaGFuZGxlQ2FsbGVlU2F2ZXMiKTsKKworICAgIFJlZ2lzdGVy
U2V0IHVzZWRDYWxsZWVTYXZlczsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgaW5z
dC5mb3JFYWNoVG1wRmFzdCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIEF0IGZpcnN0IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2VkIHJlZ3Mu
CisgICAgICAgICAgICAgICAgICAgIHVzZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3ZSBmaWx0
ZXIgdG8gcmVhbGx5IGdldCB0aGUgY2FsbGVlIHNhdmVzLgorICAgIHVzZWRDYWxsZWVTYXZlcy5m
aWx0ZXIoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKKyAgICBpZiAoIXVz
ZWRDYWxsZWVTYXZlcy5udW1iZXJPZlNldFJlZ2lzdGVycygpKQorICAgICAgICByZXR1cm47CisK
KyAgICBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSA9IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KHVz
ZWRDYWxsZWVTYXZlcyk7CisKKyAgICBzaXplX3QgYnl0ZVNpemUgPSAwOworICAgIGZvciAoY29u
c3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkK
KyAgICAgICAgYnl0ZVNpemUgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KC1lbnRyeS5v
ZmZzZXQoKSksIGJ5dGVTaXplKTsKKworICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5h
ZGRTdGFja1Nsb3QoYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgLy8gVGhp
cyBpcyBhIGJpdCB3ZWlyZCBzaW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlm
ZmVyZW50IHN0YWNrIHNsb3QgdG8gdGhpcworICAgIC8vIGFyZWEuIEFsc28sIG91ciBydW50aW1l
IGRvZXMgbm90IHJlcXVpcmUgdXMgdG8gcGluIHRoZSBzYXZlcyBhcmVhLiBNYXliZSB3ZSBzaG91
bGRuJ3QgcGluIGl0PworICAgIHNhdmVzQXJlYS0+c2V0T2Zmc2V0RnJvbUZQKC1ieXRlU2l6ZSk7
CisKKyAgICBhdXRvIGFyZ0ZvciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkp
IC0+IEFyZyB7CisgICAgICAgIHJldHVybiBBcmc6OnN0YWNrKHNhdmVzQXJlYSwgZW50cnkub2Zm
c2V0KCkgKyBieXRlU2l6ZSk7CisgICAgfTsKKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25T
ZXQoY29kZSk7CisgICAgCisgICAgLy8gRmlyc3QgaW5zZXJ0IHNhdmluZyBjb2RlIGluIHRoZSBw
cm9sb2d1ZS4KKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5j
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAg
ICAgICAgICAgIDAsIGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgY29k
ZVswXS0+YXQoMCkub3JpZ2luLAorICAgICAgICAgICAgVG1wKGVudHJ5LnJlZygpKSwgYXJnRm9y
KGVudHJ5KSk7CisgICAgfQorICAgIGluc2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOworCisg
ICAgLy8gTm93IGluc2VydCByZXN0b3JlIGNvZGUgYXQgZXBpbG9ndWVzLgorICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIEluc3QmIGxhc3QgPSBibG9jay0+bGFz
dCgpOworICAgICAgICBpZiAobGFzdC5vcGNvZGUgIT0gUmV0KQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUu
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
KAorICAgICAgICAgICAgICAgIGJsb2NrLT5zaXplKCkgLSAxLCBlbnRyeS5yZWcoKS5pc0dQUigp
ID8gTW92ZSA6IE1vdmVEb3VibGUsIGxhc3Qub3JpZ2luLAorICAgICAgICAgICAgICAgIGFyZ0Zv
cihlbnRyeSksIFRtcChlbnRyeS5yZWcoKSkpOworICAgICAgICB9CisgICAgICAgIGluc2VydGlv
blNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJIYW5kbGVDYWxsZWVTYXZlc19o
CisjZGVmaW5lIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
Q29kZTsKKworLy8gVGhpcyBwaGFzZSBpZGVudGlmaWVzIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBh
bmQgYWRkcyBjb2RlIHRvIHNhdmUvcmVzdG9yZSB0aGVtIGluIHRoZQorLy8gcHJvbG9ndWUvZXBp
bG9ndWUgdG8gdGhlIGNvZGUuIEl0J3MgYSBtYW5kYXRvcnkgcGhhc2UuCisKKy8vIEZJWE1FOiBJ
dCB3b3VsZCBiZSBjb29sIHRvIG1ha2UgdGhpcyBtb3JlIGludGVyYWN0aXZlIHdpdGggdGhlIEFp
ciBjbGllbnQgYW5kIGFsc28gbW9yZQorLy8gcG93ZXJmdWwuCisvLyBXZSBzaG91bGQgaGF2ZSBz
aHJpbmsgd3JhcHBpbmc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA0NTgKKy8vIFdlIHNob3VsZCBtYWtlIHRoaXMgaW50ZXJhY3Qgd2l0aCB0aGUgY2xpZW50OiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU5CisKK3ZvaWQgaGFu
ZGxlQ2FsbGVlU2F2ZXMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySGFuZGxlQ2FsbGVl
U2F2ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlv
blNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0
ZShCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhibG9jay0+bV9p
bnN0cywgbV9pbnNlcnRpb25zKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQWlySW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgQWlySW5zZXJ0aW9uU2V0
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVk
ZSA8d3RmL0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2Nr
OworY2xhc3MgQ29kZTsKKwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247
CisKK2NsYXNzIEluc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUm
IGNvZGUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUm
IGNvZGUoKSB7IHJldHVybiBtX2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Cisg
ICAgdm9pZCBhcHBlbmRJbnNlcnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1f
aW5zZXJ0aW9ucy5hcHBlbmQoc3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBp
bmRleCwgSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0
aW9uKGluZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBp
bmRleCwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5z
dChpbmRleCwgSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7Cisg
ICAgfQorCisgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBD
b2RlJiBtX2NvZGU7CisgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckluc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIElu
c3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQob3Bjb2Rl
LCAiICIsIGxpc3REdW1wKGFyZ3MpKTsKKyAgICBpZiAob3JpZ2luKSB7CisgICAgICAgIGlmIChh
cmdzLnNpemUoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKKyAgICAgICAgb3V0LnBy
aW50KCpvcmlnaW4pOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0X2gK
KyNkZWZpbmUgQWlySW5zdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
QXJnLmgiCisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBSZWdpc3Rl
clNldDsKKworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIg
eworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK3N0cnVjdCBJbnN0IHsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJbnN0KCkKKyAgICAg
ICAgOiBvcmlnaW4obnVsbHB0cikKKyAgICAgICAgLCBvcGNvZGUoTm9wKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAgICA6
IG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQor
ICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9wY29k
ZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAsIG9yaWdpbihv
cmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5z
dChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMp
CisgICAgICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAg
ICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBv
cGNvZGUsIFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAgICAgIDogYXJn
cyhXVEY6Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAg
ICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGVz
ZSBmdW5jdG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNl
IHRoZW0gZm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUg
ZWRpdGVkOyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlv
dSdyZQorICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBvbmx5
IHdhbGtzIHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBpdCBk
b2Vzbid0IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcmIGFyZyA6IGFyZ3MpCisgICAgICAg
ICAgICBhcmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAgfQorCisgICAgdHlwZWRlZiB2
b2lkIEVhY2hBcmdDYWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSk7CisgICAgCisg
ICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4gVGhpcyBmdW5j
dGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBcmcoY29uc3Qg
RnVuY3RvciYgZnVuY3Rvcik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0bXAs
IHJvbGUsIHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBm
b3JFYWNoVG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JFYWNo
QXJnKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlwZSwgZnVu
Y3Rvcik7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGluZyBjYW4gYmUgZWl0
aGVyIEFyZyBvciBUbXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOworCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGEgU3BlY2lhbCouIFRoaXMg
dW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAgYm9vbCBoYXNTcGVjaWFsKCkg
Y29uc3Q7CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFsIHJlZ2lzdGVycyBjbG9iYmVy
ZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5jeSwKKyAgICAvLyBl
eHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRy
dWUuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpOworCisgICAg
Ly8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4gVGhpcyBzaG91
bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisgICAgLy8gdGhhdCBmb3IgZWZm
aWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgaWYgaGFzU3BlY2lhbCgp
IHJldHVybnMgdHJ1ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0
ZXJTZXQmKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gb25lIG9mIHRoZSB2YWxp
ZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAg
ICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNWYWxpZEZvcm0oKTsKKworICAg
IC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBmb3JtIHJpZ2h0IG5v
dywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisgICAgLy8gZm9ybXMgaWYg
d2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChvciBhIFN0YWNrU2xvdCBvciBD
YWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVuIGluZGV4PyBTcGlsbGluZyB1
c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvIGZpbmQgVG1wcyB0aGF0IG5l
ZWQgc3BpbGxpbmc7CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlzIHRvIHNl
ZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBhbiBBcmc6OkFkZHIuIElmIGl0
CisgICAgLy8gZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFyZydzIGZv
ckVhY2hUbXAgdG8gZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4KKyAgICAvLworICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAg
ICBib29sIGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEdlbmVyYXRl
IHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBpcywgbGlrZSwgbGl0ZXJhbGx5
IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRlcm1pbmFsLCBpdCByZXR1cm5z
IHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0aGUgInRoZW4iIGNhc2UsIHdp
dGggdGhlICJlbHNlIgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10aHJvdWdoLiBUaGlzIGZ1bmN0
aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIEFyZ0xpc3QgYXJn
czsKKyAgICBWYWx1ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVlIHRoYXQgdGhpcyBvcmlnaW5h
dGVkIGZyb20uCisgICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJ
bnN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdElubGlu
ZXNfaAorI2RlZmluZSBBaXJJbnN0SW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCisjaW5jbHVk
ZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKyNpbmNsdWRlICJCM1Zh
bHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZvckVhY2g7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBGb3JFYWNoPFRtcD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgaW5zdC5mb3JFYWNoVG1wKGZ1bmN0b3IpOworICAgIH0KK307Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBGb3JFYWNoPEFyZz4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1bmN0b3IpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBJbnN0
Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgRm9yRWFjaDxUaGluZz46
OmZvckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitpbmxpbmUgYm9vbCBJbnN0OjpoYXNTcGVj
aWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXJncy5zaXplKCkgJiYgYXJnc1swXS5pc1NwZWNp
YWwoKTsKK30KKworaW5saW5lIGNvbnN0IFJlZ2lzdGVyU2V0JiBJbnN0OjpleHRyYUNsb2JiZXJl
ZFJlZ3MoKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOworICAgIHJldHVybiBhcmdzWzBd
LnNwZWNpYWwoKS0+ZXh0cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsKK30KKworaW5saW5lIHZvaWQg
SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cykKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICBhcmdzWzBdLnNwZWNpYWwoKS0+
cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBi
b29sIGlzU2hpZnRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworI2lmIENQVShYODYpIHx8IENQ
VShYODZfNjQpCisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9PSBUbXAoWDg2UmVnaXN0ZXJzOjpl
Y3gpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW5zdCk7CisgICAgcmV0dXJuIHRydWU7Cisj
ZW5kaWYKK30gICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbGlkKGNvbnN0IEluc3QmIGlu
c3QpCit7CisgICAgcmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckxp
dmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5j
bHVkZSAiQjNJbmRleFNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKKy8vIFlvdSBjYW4gY29tcHV0ZSBsaXZlbmVzcyBvdmVyIFRtcCdzIG9y
IG92ZXIgQXJnJ3MuIElmIHlvdSBjb21wdXRlIG92ZXIgQXJnJ3MsIHlvdSBnZXQgYm90aAorLy8g
c3RhY2sgbGl2ZW5lc3MgYW5kIHRtcCBsaXZlbmVzcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5n
PgorY2xhc3MgTGl2ZW5lc3MgeworcHVibGljOgorICAgIExpdmVuZXNzKENvZGUmIGNvZGUpCisg
ICAgeworICAgICAgICBtX2xpdmVBdEhlYWQucmVzaXplKGNvZGUuc2l6ZSgpKTsKKyAgICAgICAg
bV9saXZlQXRUYWlsLnJlc2l6ZShjb2RlLnNpemUoKSk7CisKKyAgICAgICAgSW5kZXhTZXQ8QmFz
aWNCbG9jaz4gc2VlbjsKKworICAgICAgICBib29sIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB3
aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGUuYXQoYmxvY2tJbmRl
eCk7CisgICAgICAgICAgICAgICAgTG9jYWxDYWxjIGxvY2FsQ2FsYygqdGhpcywgYmxvY2spOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGlu
c3RJbmRleC0tOykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2st
PmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RUaW1lID0gc2Vlbi5h
ZGQoYmxvY2spOworICAgICAgICAgICAgICAgIGlmICghZmlyc3RUaW1lICYmIGxvY2FsQ2FsYy5s
aXZlKCkgPT0gbV9saXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgeworICAg
ICAgICAgICAgICAgICAgICBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdLmFkZCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5saXZlKCkuYmVnaW4oKSwgbG9jYWxDYWxjLmxpdmUo
KS5lbmQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fbGl2ZUF0SGVh
ZFtibG9ja10gPSBsb2NhbENhbGMudGFrZUxpdmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRIZWFkKEJhc2ljQmxv
Y2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0SGVhZFtibG9j
a107CisgICAgfQorCisgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmVBdFRhaWwoQmFzaWNC
bG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9saXZlQXRUYWlsW2Js
b2NrXTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNhbGN1bGF0b3IgaGFzIHRvIGJlIHJ1biBpbiBy
ZXZlcnNlLgorICAgIGNsYXNzIExvY2FsQ2FsYyB7CisgICAgcHVibGljOgorICAgICAgICBMb2Nh
bENhbGMoTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAg
IDogbV9saXZlKGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGl2ZTsgfQorICAgICAgICBIYXNoU2V0PFRoaW5nPiYmIHRha2VMaXZlKCkgeyByZXR1cm4g
V1RGOjptb3ZlKG1fbGl2ZSk7IH0KKworICAgICAgICB2b2lkIGV4ZWN1dGUoSW5zdCYgaW5zdCkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGRlZidzLgorICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBh
cmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgLy8gTmV4dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAgICAgIGlmIChp
bnN0Lmhhc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgICAgIGluc3QuZXh0cmFDbG9iYmVyZWRS
ZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgW3RoaXNdIChSZWcgcmVnKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKFRoaW5nKFRtcChyZWcpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIHVzZSdzLgorICAgICAgICAgICAgaW5z
dC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcu
aXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1f
bGl2ZS5hZGQoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgSGFzaFNldDxUaGluZz4gbV9saXZlOworICAgIH07CisgICAgCitwcml2
YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdEhl
YWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0VGFp
bDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJMaXZlbmVzc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNDkgQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
IyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKKyMgU3lsbGFidXM6CisjCisjIFJvbGVzIGFuZCB0eXBlczoKKyMgVTpHID0+IHVz
ZSBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBEOkcgPT4gZGVmIG9m
IGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkcgPT4gdXNlIGFuZCBk
ZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVTpGID0+IHVzZSBv
ZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RiA9PiBkZWYgb2YgYSBmbG9hdCByZWdp
c3RlciBvciB2YWx1ZQorIyBVRDpGID0+IHVzZSBhbmQgZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIg
b3IgdmFsdWUKKyMKKyMgQXJndW1lbnQga2luZHM6CisjIFRtcCA9PiB0ZW1wb3Jhcnkgb3IgcmVn
aXN0ZXIKKyMgSW1tID0+IDMyLWJpdCBpbW1lZGlhdGUgaW50CisjIEltbTY0ID0+IFRydXN0ZWRJ
bW02NAorIyBBZGRyID0+IGFkZHJlc3MgYXMgdGVtcG9yYXJ5L3JlZ2lzdGVyK29mZnNldAorIyBJ
bmRleCA9PiBCYXNlSW5kZXggYWRkcmVzcworIyBBYnMgPT4gQWJzb2x1dGVBZGRyZXNzCisjCisj
IFRoZSBwYXJzZXIgdmlld3MgdGhlc2UgdGhpbmdzIGFzIGtleXdvcmRzLCBhbmQgdW5kZXJzdGFu
ZHMgdGhhdCB0aGV5IGZhbGwgaW50byB0d28gZGlzdGluY3QgY2xhc3NlcworIyBvZiB0aGluZ3Mu
IFNvLCBhbHRob3VnaCB0aGlzIGZpbGUgdXNlcyBhIHBhcnRpY3VsYXIgaW5kZW50YXRpb24gc3R5
bGUsIG5vbmUgb2YgdGhlIHdoaXRlc3BhY2Ugb3IKKyMgZXZlbiBuZXdsaW5lcyBhcmUgbWVhbmlu
Z2Z1bCB0byB0aGUgcGFyc2VyLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxkIHdyaXRlOgorIworIyBG
b280MiBVOkcsIFVEOkYgSW1tLCBUbXAgQWRkciwgVG1wCisjCisjIEFuZCB0aGUgcGFyc2VyIHdv
dWxkIGtub3cgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzOgorIworIyBGb280MiBVOkcsIFVEOkYK
KyMgICAgIEltbSwgVG1wCisjICAgICBBZGRyLCBUbXAKKyMKKyMgSS5lLiBhIHR3by1mb3JtIGlu
c3RydWN0aW9uIHRoYXQgdXNlcyBhIEdQUiBvciBhbiBpbnQgaW1tZWRpYXRlIGFuZCB1c2VzK2Rl
ZnMgYSBmbG9hdCByZWdpc3Rlci4KKworIyBOb3RlIHRoYXQgdGhlIG9wY29kZXMgaGVyZSBoYXZl
IGEgbGVhZGluZyBjYXBpdGFsIChBZGQzMikgYnV0IG11c3QgY29ycmVzcG9uZCB0byBNYWNyb0Fz
c2VtYmxlcgorIyBBUEkgdGhhdCBoYXMgYSBsZWFkaW5nIGxvd2VyLWNhc2UgKGFkZDMyKS4KKwor
Tm9wCisKK0FkZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBBZGRyCisgICAg
SW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBUbXAsIEFkZHIKKworQWRkMzIgVTpHLCBVOkcs
IEQ6RworICAgIEltbSwgVG1wLCBUbXAKKworQW5kMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAK
KyAgICBJbW0sIFRtcAorICAgIFRtcCwgQWRkcgorICAgIEFkZHIsIFRtcAorICAgIEltbSwgQWRk
cgorCitMc2hpZnQzMiBVOkcsIFVEOkcKKyAgICBUbXAqLCBUbXAKKyAgICBJbW0sIFRtcAorCitN
dWwzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcAorCisjIE5vdGUgdGhh
dCBNb3ZlIG9wZXJhdGVzIG92ZXIgdGhlIGZ1bGwgcmVnaXN0ZXIgc2l6ZSwgd2hpY2ggaXMgZWl0
aGVyIDMyLWJpdCBvciA2NC1iaXQgZGVwZW5kaW5nIG9uCisjIHRoZSBwbGF0Zm9ybS4gSSdtIG5v
dCBlbnRpcmVseSBzdXJlIHRoYXQgdGhpcyBpcyBhIGdvb2QgdGhpbmc7IGl0IG1pZ2h0IGJlIGJl
dHRlciB0byBqdXN0IGhhdmUgYQorIyBNb3ZlNjQgaW5zdHJ1Y3Rpb24uIE9UT0gsIG91ciBNYWNy
b0Fzc2VtYmxlcnMgYWxyZWFkeSBoYXZlIHRoaXMgbm90aW9uIG9mICJtb3ZlKCkiIHRoYXQgYmFz
aWNhbGx5CisjIG1lYW5zIG1vdmVQdHIuCitNb3ZlIFU6RywgRDpHCisgICAgVG1wLCBUbXAKKyAg
ICBJbW0sIFRtcAorICAgIEltbTY0LCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9hZFB0ciAjIFRo
aXMgbWVhbnMgdGhhdCAiTW92ZSBBZGRyLCBUbXAiIGlzIGNvZGUtZ2VuZXJhdGVkIGFzICJsb2Fk
IiBub3QgIm1vdmUiLgorICAgIEluZGV4LCBUbXAgYXMgbG9hZFB0cgorICAgIFRtcCwgQWRkciBh
cyBzdG9yZVB0cgorICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQdHIKKworTW92ZTMyIFU6RywgRDpH
CisgICAgVG1wLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9QdHIKKyAgICBBZGRyLCBUbXAgYXMgbG9h
ZDMyCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmUzMgor
ICAgIFRtcCwgSW5kZXggYXMgc3RvcmUzMgorCitNb3ZlRG91YmxlIFU6RiwgRDpGCisgICAgVG1w
LCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9hZERvdWJsZQorICAgIEluZGV4LCBUbXAgYXMgbG9h
ZERvdWJsZQorICAgIFRtcCwgQWRkciBhcyBzdG9yZURvdWJsZQorICAgIFRtcCwgSW5kZXggYXMg
c3RvcmVEb3VibGUKKworTW92ZTY0VG9Eb3VibGUgVTpHLCBEOkYKKyAgICBUbXAsIFRtcAorCitN
b3ZlRG91YmxlVG82NCBVOkYsIEQ6RworICAgIFRtcCwgVG1wCisKK0JyYW5jaEFkZDMyIFU6Rywg
VTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIElt
bSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisg
ICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE11bDMyIFU6RywgVTpHLCBVRDpHIC9icmFu
Y2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFu
Y2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAg
ICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQs
IFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hOZWczMiBVOkcsIFVE
OkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcAorCitKdW1wIC9icmFuY2gKKworUmV0IC90ZXJt
aW5hbAorCitCcmVha3BvaW50IC90ZXJtaW5hbAorCisjIEFpciBhbGxvd3MgZm9yIGV4b3RpYyBi
ZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhl
IFNwZWNpYWwgb3BlcmFuZCwKKyMgd2hpY2ggbXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4KK3Nw
ZWNpYWwgUGF0Y2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFz
ZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clBoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5j
bHVkZSAiQjNDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKENvZGUmIGNvZGUsIGNvbnN0IGNo
YXIqIG5hbWUpCisgICAgOiBtX2NvZGUoY29kZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAg
IGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBi
ZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKwor
ICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUg
PSB0b0NTdHJpbmcoY29kZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAg
ICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKG1f
Y29kZSwgbV9uYW1lLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclBoYXNlU2NvcGVfaAorI2RlZmluZSBBaXJQaGFzZVNj
b3BlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworY2xhc3MgUGhhc2VT
Y29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6Cisg
ICAgUGhhc2VTY29wZShDb2RlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUo
KTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7
CisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpclBoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3Jp
dHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiUmVnaXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRl
cigpCit7CisgICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisg
ICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8R1BSUmVnPigpOwor
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKTsKKyAg
ICAgICAgICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0
ZXJzKCkpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAg
ICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxs
ZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQo
cmVnLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNo
KAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+
YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
IHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3Jp
dHlPcmRlcigpCit7CisgICAgc3RhdGljIFZlY3RvcjxGUFJSZWc+KiByZXN1bHQ7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9u
Y2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8RlBSUmVn
PigpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFsbEZQUnMo
KTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAg
ICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5m
cHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAg
ICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNh
bGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVu
ZChyZWcuZnByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1
cm4gKnJlc3VsdDsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIo
QXJnOjpUeXBlIHR5cGUpCit7CisgICAgc3RhdGljIFZlY3RvcjxSZWc+KiByZXN1bHRbQXJnOjpu
dW1UeXBlc107CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxs
X29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdFtB
cmc6OkdQXSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChHUFJSZWcgcmVn
IDogZ3Byc0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQ
XS0+YXBwZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXSA9IG5ldyBW
ZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChGUFJSZWcgcmVnIDogZnByc0luUHJpb3Jp
dHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXS0+YXBwZW5kKFJlZyhy
ZWcpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHRbdHlwZV07Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJp
b3JpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UmVnaXN0ZXJQcmlvcml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJSZWdp
c3RlclByaW9yaXR5X2gKKyNkZWZpbmUgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiRlBSSW5mby5oIgor
I2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQ
UlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKTsKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHJz
SW5Qcmlvcml0eU9yZGVyKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+IHN0cnVjdCBSZWdp
c3RlcnNJblByaW9yaXR5T3JkZXI7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdpc3RlcnNJblByaW9y
aXR5T3JkZXI8R1BSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxHUFJSZWc+JiBpblByaW9yaXR5
T3JkZXIoKSB7IHJldHVybiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7IH0KK307Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz4geworICAgIGNvbnN0IFZl
Y3RvcjxGUFJSZWc+JiBpblByaW9yaXR5T3JkZXIoKSB7IHJldHVybiBmcHJzSW5Qcmlvcml0eU9y
ZGVyKCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+Citjb25zdCBWZWN0b3I8dHlw
ZW5hbWUgQmFuazo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAg
cmV0dXJuIFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7
Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJSZWdpc3RlclByaW9yaXR5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29u
c3QgY2hhciogY29uc3QgU3BlY2lhbDo6ZHVtcFByZWZpeCA9ICImIjsKKworU3BlY2lhbDo6U3Bl
Y2lhbCgpCisgICAgOiBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVjaWFsOjp+U3BlY2lh
bCgpCit7Cit9CisKK0NTdHJpbmcgU3BlY2lhbDo6bmFtZSgpIGNvbnN0Cit7CisgICAgU3RyaW5n
UHJpbnRTdHJlYW0gb3V0OworICAgIGR1bXBJbXBsKG91dCk7CisgICAgcmV0dXJuIG91dC50b0NT
dHJpbmcoKTsKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgpOworICAgIGR1bXBJbXBsKG91dCk7CisgICAg
aWYgKG1faW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludChtX2luZGV4KTsKK30K
Kwordm9pZCBTcGVjaWFsOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgqdGhpcywgIjogIik7CisgICAgZGVlcER1bXBJbXBsKG91dCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNwZWNp
YWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3Ry
dWN0IEdlbmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKyAgICAKKyAgICBT
cGVjaWFsKCk7CisgICAgdmlydHVhbCB+U3BlY2lhbCgpOworCisgICAgQ1N0cmluZyBuYW1lKCkg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVk
TGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlz
VmFsaWQoSW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVu
c2lnbmVkIGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMgY2FsbGVkIG9uIGZvciBl
YWNoIEluc3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHdh
eSB0bworICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRzIHVzZWQgZnJvbSBqdXN0
IG9uZSBJbnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUuIFNvLAorICAgIC8vIGlm
IHlvdSB3YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRvIGdlbmVyYXRlKCksIHRo
ZW4geW91IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkgR2VuZXJhdGUgQWlyIHRo
YXQgc3RhcnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRjaCBJbnN0LCBhbmQgdGhl
biBtZXJnZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlzIGlzIHByb2JhYmx5IG5v
dCBncmVhdCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlIHRoYXQKKyAgICAv
LyAgICBBaXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3VjaCBkdXBsaWNhdGlvbiBk
aWRuJ3QgY2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAgICAvLyAgICByZWdpc3Rl
ciBhc3NpZ25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUgU3BlY2lhbCBtYWludGFp
biBhIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBh
bmFseXNpcworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNhbGwgaXMgcGVyZm9ybWVk
IGp1c3QgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMgbm8gd2F5CisgICAgLy8g
ICAgZm9yIHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5zdHMgdG8gYmUgcmVhbGxv
Y2F0ZWQuIFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAgICBjb25zdWx0IHRoZSBI
YXNoTWFwLgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291bGQgdXNlICgxKSBhbmQg
ZmlyZSB1cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxscy4KKyAgICAvLworICAg
IC8vIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIHJlcG9ydFVzZWRSZWdp
c3RlcnMoKSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAvLyBhcyBnZW5lcmF0
ZSgpLiBJZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291bGQganVzdCBoYXZlIGVh
Y2ggU3BlY2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVjdG9yIG9mIFJlZ2lzdGVy
U2V0J3MgYW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUgcmlnaHQgb3JkZXIgaW4K
KyAgICAvLyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZmZXJlbmNlIGlzIHVubGlr
ZWx5IHRvIGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAgIC8vIHBlcmZvcm1hbmNl
IG9mIHRoZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8vIEN1cnJlbnRseSwgd2Ug
ZG8gKDEpIGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydFVzZWRSZWdp
c3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAgIAorICAgIHZpcnR1YWwg
Q0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0
aW9uQ29udGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJh
Q2xvYmJlcmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBjb25zdCBjaGFyKiBtX25h
bWU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERlZXBTcGVjaWFsRHVtcCB7
CitwdWJsaWM6CisgICAgRGVlcFNwZWNpYWxEdW1wKGNvbnN0IFNwZWNpYWwqIHNwZWNpYWwpCisg
ICAgICAgIDogbV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3BlY2lhbCkK
KyAgICAgICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29u
c3QgU3BlY2lhbCogbV9zcGVjaWFsOworfTsKKworaW5saW5lIERlZXBTcGVjaWFsRHVtcCBkZWVw
RHVtcChjb25zdCBTcGVjaWFsKiBzcGVjaWFsKQoreworICAgIHJldHVybiBEZWVwU3BlY2lhbER1
bXAoc3BlY2lhbCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGVjaWFsX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bp
bGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNp
bmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5o
IgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQor
eworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxFdmVyeXRoaW5nIik7CisK
KyAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVy
eSBwb2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBW
ZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBMaXZl
bmVzczxUbXA+IGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7CisgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5l
c3MsIGJsb2NrKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5z
aXplKCkgKyAxKTsKKworICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2ln
bmVkIGluZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0ID0gdXNlZFJlZ2lzdGVy
c1tibG9ja11baW5kZXhdOworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbG9jYWxDYWxjLmxp
dmUoKSkgeworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgc2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisg
ICAgICAgIHNldFVzZWRSZWdpc3RlcnMoYmxvY2stPnNpemUoKSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykg
eworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOwor
ICAgICAgICAgICAgc2V0VXNlZFJlZ2lzdGVycyhpbnN0SW5kZXgpOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KKyAgICBWZWN0
b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6Om51bVR5cGVzXTsKKyAgICBmb3IgKHVu
c2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsrdHlwZUlu
ZGV4KSB7CisgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0YWNr
U2xvdHNbdHlwZUluZGV4XTsKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxB
cmc6OlR5cGU+KHR5cGVJbmRleCk7CisgICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUubnVt
VG1wcyh0eXBlKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51bVRt
cHModHlwZSk7IHRtcEluZGV4LS07KQorICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0g
PSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgIH0K
KworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAw
OyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAg
UmVnaXN0ZXJTZXQmIHNldEJlZm9yZSA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleF07
CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJzW2Jsb2Nr
XVtpbnN0SW5kZXggKyAxXTsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5z
dEluZGV4KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBb
Jl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxsU3Rh
Y2tTbG90c1t0eXBlXVt0bXAudG1wSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIEFyZyBh
cmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTmVl
ZCB0byBmaWd1cmUgb3V0IGEgcmVnaXN0ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBkZXBlbmRz
IG9uIHRoZSByb2xlLgorICAgICAgICAgICAgICAgICAgICBSZWcgY2hvc2VuUmVnOworICAgICAg
ICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OlVzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblBy
aW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNl
dEJlZm9yZS5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRC
ZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJl
ZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpE
ZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0
eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRBZnRl
ci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5z
ZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVn
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZURlZjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3Jk
ZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5n
ZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaG9zZW5SZWcpOworCisgICAgICAg
ICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAg
IE9wY29kZSBtb3ZlID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7CisKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIGFy
Zyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAg
fQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0
aGluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BpbGxF
dmVyeXRoaW5nX2gKKyNkZWZpbmUgQWlyU3BpbGxFdmVyeXRoaW5nX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpcyBhIHBoYXNlIGZvciB0ZXN0aW5nLiBJdCBiZWhh
dmVzIGxpa2UgYSByZWdpc3RlciBhbGxvY2F0b3IgaW4gdGhlIHNlbnNlIHRoYXQgaXQKKy8vIGVs
aW1pbmF0ZXMgdGVtcG9yYXJpZXMgZnJvbSB0aGUgcHJvZ3JhbS4gSXQgYWNjb21wbGlzaGVzIHRo
aXMgYnkgYWx3YXlzIHNwaWxsaW5nIGFsbAorLy8gdGVtcG9yYXJpZXMuIFRoZSByZXN1bHRpbmcg
Y29kZSBpcyBnb2luZyB0byBiZSB2ZXJ5IGluZWZmaWNpZW50LiBUaGlzIHBoYXNlIGlzIGdyZWF0
IGlmIHlvdQorLy8gdGhpbmsgdGhhdCB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgcmVnaXN0ZXIgYWxs
b2NhdG9yLiBZb3UgY2FuIGNvbmZpcm0gdGhpcyBieSBydW5uaW5nIHRoaXMKKy8vIHBoYXNlIGlu
c3RlYWQgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KKy8vCisvLyBOb3RlIHRoYXQgZXZlbiB0
aG91Z2ggdGhpcyBwaGFzZSBkb2VzIHRoZSBjaGVhcGVzdCB0aGluZyBwb3NzaWJsZSwgaXQncyBu
b3QgZXZlbiB3cml0dGVuIGluIGEKKy8vIHBhcnRpY3VsYXJseSBlZmZpY2llbnQgd2F5LiBTbywg
ZG9uJ3QgZ2V0IGFueSBpZGVhcyBhYm91dCB1c2luZyB0aGlzIHBoYXNlIHRvIHJlZHVjZSBjb21w
aWxlcgorLy8gbGF0ZW5jeS4gSWYgeW91IHdhbnRlZCB0byBkbyB0aGF0LCB5b3Ugc2hvdWxkIGNv
bWUgdXAgd2l0aCBhIGNsZXZlciBhbGdvcml0aG0gaW5zdGVhZCBvZiB1c2luZworLy8gdGhpcyBz
aWxseSB0aGluZy4KKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYpOworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyU3BpbGxFdmVyeXRoaW5nX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBTdGFja1Nsb3Q6
OnNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKK3sKKyAgICBtX29mZnNldEZyb21GUCA9
IHZhbHVlOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBtX3ZhbHVlLT5tX29mZnNldEZyb21G
UCA9IHZhbHVlOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgic3RhY2siLCBtX2luZGV4KTsKK30KKwordm9pZCBTdGFj
a1Nsb3Q6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIG9mZnNldEZyb21GUCA9ICIsIG1fb2Zmc2V0
RnJvbUZQLCAiLCBraW5kID0gIiwgbV9raW5kKTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAg
b3V0LnByaW50KCIsIHZhbHVlID0gIiwgKm1fdmFsdWUpOworfQorCitTdGFja1Nsb3Q6OlN0YWNr
U2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQga2lu
ZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorICAgIDogbV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgLCBtX29mZnNldEZyb21GUCh2YWx1ZSA/IHZhbHVlLT5v
ZmZzZXRGcm9tRlAoKSA6IDApCisgICAgLCBtX2tpbmQoa2luZCkKKyAgICAsIG1fdmFsdWUodmFs
dWUpCit7CisgICAgQVNTRVJUKGJ5dGVTaXplKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBaXJTdGFja1Nsb3RfaAorI2RlZmluZSBBaXJTdGFja1Nsb3RfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1
ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBTdGFja1Nsb3RWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFN0
YWNrU2xvdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhY2tTbG90KTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KKworICAgIHVuc2lnbmVkIGFsaWdubWVudCgpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAoYnl0ZVNpemUoKSA8PSAxKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAg
IGlmIChieXRlU2l6ZSgpIDw9IDIpCisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgaWYg
KGJ5dGVTaXplKCkgPD0gNCkKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICByZXR1cm4g
ODsKKyAgICB9CisKKyAgICBTdGFja1Nsb3RWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlOyB9CisKKyAgICAvLyBaZXJvIG1lYW5zIHRoYXQgaXQncyBub3QgeWV0IGFzc2lnbmVk
LgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJv
bUZQOyB9CisKKyAgICAvLyBUaGlzIHNob3VsZCB1c3VhbGx5IGp1c3QgYmUgY2FsbGVkIGZyb20g
cGhhc2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbi4gQnV0IHlvdSBjYW4KKyAgICAvLyB0b3Rh
bGx5IGZvcmNlIGEgc3RhY2sgc2xvdCB0byBsYW5kIGF0IHNvbWUgb2Zmc2V0LgorICAgIHZvaWQg
c2V0T2Zmc2V0RnJvbUZQKGludHB0cl90KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRl
U2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKik7Cisg
ICAgCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
IGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOworICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOworICAg
IFN0YWNrU2xvdFZhbHVlKiBtX3ZhbHVlOworfTsKKworY2xhc3MgRGVlcFN0YWNrU2xvdER1bXAg
eworcHVibGljOgorICAgIERlZXBTdGFja1Nsb3REdW1wKGNvbnN0IFN0YWNrU2xvdCogc2xvdCkK
KyAgICAgICAgOiBtX3Nsb3Qoc2xvdCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zbG90KQorICAgICAg
ICAgICAgbV9zbG90LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBv
dXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBTdGFja1Ns
b3QqIG1fc2xvdDsKK307CisKK2lubGluZSBEZWVwU3RhY2tTbG90RHVtcCBkZWVwRHVtcChjb25z
dCBTdGFja1Nsb3QqIHNsb3QpCit7CisgICAgcmV0dXJuIERlZXBTdGFja1Nsb3REdW1wKHNsb3Qp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3RhY2tTbG90X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9p
ZCBUbXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7
CisgICAgICAgIG91dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoaXNSZWcoKSkgeworICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzR1AoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0
bXAiLCBncFRtcEluZGV4KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnBy
aW50KCIlZnRtcCIsIGZwVG1wSW5kZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1w
X2gKKyNkZWZpbmUgQWlyVG1wX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJG
UFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1
ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQXJnOworCisvLyBBIFRtcCBpcyBhIGdlbmVyYWxpemF0aW9u
IG9mIGEgcmVnaXN0ZXIuIEl0IGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIGFueSBHUFIgb3IgRlBS
LiBJdCBjYW4gYWxzbworLy8gYmUgdXNlZCB0byByZWZlciB0byBhbiB1bmFsbG9jYXRlZCByZWdp
c3RlciAoaS5lLiBhIHRlbXBvcmFyeSkuIExpa2UgbWFueSBBaXIgY2xhc3Nlcywgd2UgdXNlCisv
LyBkZWxpYmVyYXRlbHkgdGVyc2UgbmFtaW5nIHNpbmNlIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhp
cyBuYW1lIGEgbG90LgorCitjbGFzcyBUbXAgeworcHVibGljOgorICAgIFRtcCgpCisgICAgICAg
IDogbV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUbXAoUmVnIHJlZykK
KyAgICB7CisgICAgICAgIGlmIChyZWcpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkK
KyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlR1BSKHJlZy5ncHIoKSk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUZQUihyZWcuZnByKCkp
OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0KKworICAg
IGV4cGxpY2l0IFRtcChjb25zdCBBcmcmKTsKKworICAgIHN0YXRpYyBUbXAgZ3BUbXBGb3JJbmRl
eCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX3ZhbHVlID0gZW5jb2RlR1BUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5j
b2RlRlBUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKworICAg
IGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AobV92
YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0VuY29kZWRGUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUFIobV92YWx1ZSk7CisgICAgfQor
CisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVk
RlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzR1BSKCkgfHwgaXNGUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3By
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFIobV92YWx1ZSk7CisgICAg
fQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2Rl
RlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAgcmV0dXJu
IGZwcigpOworICAgIH0KKworICAgIGJvb2wgaGFzVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICFpc1JlZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQVG1wKG1fdmFsdWUpOworICAg
IH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGRlY29kZUZQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4g
Z3BUbXBJbmRleCgpOworICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOworICAgIH0KKworICAg
IGJvb2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpczsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworCisgICAgVG1wKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlw
ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IFRtcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gV1RGOjpJbnRIYXNoPGludD46Omhhc2gobV92YWx1ZSk7CisgICAgfQorICAgIAor
cHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQorICAgIHsK
KyAgICAgICAgcmV0dXJuIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29k
ZUZQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xIC0gaW5kZXg7Cisg
ICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlbmNvZGVHUChncHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3Rlcigp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQUihGUFJSZWcgZnByKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIGVuY29kZUZQKGZwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVn
aXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFRtcCh1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxh
c3RSZWdpc3RlcigpKSArIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29k
ZUZQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQUihN
YWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0gaW5kZXg7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1AoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHZhbHVlID4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUChpbnQg
dmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPCAwOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzRW5jb2RlZEdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
aXNFbmNvZGVkR1AodmFsdWUpICYmIHZhbHVlIDw9IGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6
bGFzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQUihp
bnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmIHZh
bHVlID49IGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSk7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiAhaXNFbmNvZGVkR1BSKHZhbHVlKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFRtcChpbnQgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmICFpc0VuY29kZWRGUFIodmFs
dWUpOworICAgIH0KKworICAgIHN0YXRpYyBHUFJSZWcgZGVjb2RlR1BSKGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEdQUlJlZz4oCisgICAgICAgICAgICAodmFsdWUgLSBlbmNvZGVHUFIoTWFj
cm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSkpICsgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVn
aXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIEZQUlJlZyBkZWNvZGVGUFIoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQUih2YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPigKKyAgICAgICAgICAgIChlbmNvZGVGUFIoTWFjcm9B
c3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKSAtIHZhbHVlKSArCisgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNp
Z25lZCBkZWNvZGVHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNv
ZGVkR1BUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC0gKGVuY29kZUdQUihNYWNy
b0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSk7CisgICAgfQorCisgICAgc3RhdGljIHVu
c2lnbmVkIGRlY29kZUZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0Vu
Y29kZWRGUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gKGVuY29kZUZQUihNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxKSAtIHZhbHVlOworICAgIH0KKworICAgIC8vIDA6
IGVtcHR5IFRtcAorICAgIC8vIHBvc2l0aXZlOiBHUFJzIGFuZCB0aGVuIEdQIHRlbXBzLgorICAg
IC8vIG5lZ2F0aXZlOiBGUFJzIGFuZCB0aGVuIEZQIHRlbXBzLgorICAgIGludCBtX3ZhbHVlOwor
fTsKKworc3RydWN0IFRtcEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFRt
cCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29u
c3QgVG1wJiBhLCBjb25zdCBUbXAmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBj
b25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERl
ZmF1bHRIYXNoPEpTQzo6QjM6OkFpcjo6VG1wPiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpBaXI6
OlRtcEhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJh
aXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OlRtcD4gOiBT
aW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpUbXA+IHsgfTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVG1w
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wSW5saW5lc19oCisj
ZGVmaW5lIEFpclRtcElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpckFyZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2lubGluZSBUbXA6OlRtcChjb25zdCBBcmcmIGFy
ZykKK3sKKyAgICAqdGhpcyA9IGFyZy50bXAoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRt
cElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlk
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZh
bGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisK
K2NsYXNzIFZhbGlkYXRlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVyKENvZGUmIGNvZGUsIGNv
bnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9jb2Rl
KGNvZGUpCisgICAgICAgICwgbV93aGVuKHdoZW4pCisgICAgICAgICwgbV9kdW1wQmVmb3JlKGR1
bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBWQUxJREFURShjb25kaXRpb24sIG1l
c3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAo
Y29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWlsKF9fRklMRV9fLCBfX0xJTkVfXywg
V1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisg
ICAgfSB3aGlsZSAoZmFsc2UpCisgICAgCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAg
SGFzaFNldDxTdGFja1Nsb3QqPiB2YWxpZFNsb3RzOworICAgICAgICBIYXNoU2V0PEJhc2ljQmxv
Y2sqPiB2YWxpZEJsb2NrczsKKyAgICAgICAgSGFzaFNldDxTcGVjaWFsKj4gdmFsaWRTcGVjaWFs
czsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQorICAgICAgICAg
ICAgdmFsaWRCbG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3Qg
OiBtX2NvZGUuc3RhY2tTbG90cygpKQorICAgICAgICAgICAgdmFsaWRTbG90cy5hZGQoc2xvdCk7
CisgICAgICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6IG1fY29kZS5zcGVjaWFscygpKQorICAg
ICAgICAgICAgdmFsaWRTcGVjaWFscy5hZGQoc3BlY2lhbCk7CisKKyAgICAgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0
SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAg
ICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAg
ICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgICAg
IHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3Rh
Y2s6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNsb3RzLmNvbnRhaW5z
KGFyZy5zdGFja1Nsb3QoKSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
U3BlY2lhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU3BlY2lhbHMu
Y29udGFpbnMoYXJnLnNwZWNpYWwoKSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaW5zdC5pc1Zh
bGlkRm9ybSgpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAg
ICAgaWYgKGluc3RJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAi
LCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpi
bG9jaykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsaWRCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJJbiAiLCAqYmxvY2spKTsKKyAg
ICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZv
aWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBj
b25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3Ry
aW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAg
ICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBv
dXQucHJpbnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnBy
aW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAi
KVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAg
ICAgICAgICAgIGlmIChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVy
aW5nICIsIG1fd2hlbiwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50
b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2Up
OworICAgICAgICBpZiAobV9kdW1wQmVmb3JlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZv
cmUgIiwgbV93aGVuLCAiOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7
CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7Cisg
ICAgICAgIGRhdGFMb2cobV9jb2RlKTsKKworICAgICAgICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdl
KTsKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShmaWxlbmFtZSwgbGluZU51bWJl
ciwgZnVuY3Rpb24sIGNvbmRpdGlvbik7CisgICAgICAgIENSQVNIKCk7CisgICAgfQorICAgIAor
ICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBtX3doZW47CisgICAgY29uc3QgY2hh
ciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQg
dmFsaWRhdGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJl
Zm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIHdoZW4sIGR1bXBCZWZvcmUp
OworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyVmFsaWRhdGVfaAorI2RlZmluZSBBaXJWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK2NsYXNzIENvZGU7CisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYsIGNvbnN0IGNoYXIqIHdoZW4g
PSBudWxscHRyLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw4NDIgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisj
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29kZQor
ICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2FkcworICAgIGF0dHJfYWNj
ZXNzb3IgOmtpbmQKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHNwZWNpYWwpCisgICAgICAg
IEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IHNwZWNpYWwKKyAgICAgICAgQGtpbmQg
PSA6aW5zdAorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAgICAgICAgICAgQG92ZXJsb2FkcyA9
IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIG1hc21OYW1lCisgICAgICAgIG5h
bWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVuZAorZW5kCisKK2NsYXNzIEFyZwor
ICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAgZGVmIGluaXRpYWxpemUocm9sZSwg
dHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAgIEB0eXBlID0gdHlwZQorICAgIGVu
ZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9yZWFkZXIgOnNpZ25hdHVyZSwgOmZv
cm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICBAc2ln
bmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9IGZvcm1zCisgICAgZW5kCitlbmQK
KworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0cl9hY2Nlc3NvciA6
c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkKKyAgICAgICAgQG5hbWUgPSBuYW1l
CisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQKKworICAgIGRlZiA9PShvdGhlcikK
KyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhl
cgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlci5uYW1lIGFuZCBAc3Bl
Y2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIEtp
bmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9PSAiQWRkciIKKyAgICAgICAgICAg
IFsiQWRkciIsICJTdGFjayIsICJDYWxsQXJnIl0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
W2tpbmRdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGFyZ0tpbmRzCisgICAgICAg
IEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICBlbmQKK2VuZAorCitjbGFzcyBGb3JtCisgICAgYXR0
cl9yZWFkZXIgOmtpbmRzLCA6YWx0TmFtZQorCisgICAgZGVmIGluaXRpYWxpemUoa2luZHMsIGFs
dE5hbWUpCisgICAgICAgIEBraW5kcyA9IGtpbmRzCisgICAgICAgIEBhbHROYW1lID0gYWx0TmFt
ZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFt
ZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51
bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIg
PSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7Zmls
ZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBh
dHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3Jp
Z2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9
IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3Ro
ZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAg
ZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisg
ICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBh
dCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQp
CisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJy
b3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJv
cjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKwor
ZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVO
YW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qg
c3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikv
CisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAg
ICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQor
ICAgICAgICB3aGVuIC9cQShbYS16QS1aMC05X10rKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBU
b2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3
aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAg
ICAgICB3aGVuIC9cQVssOipcL10vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9y
aWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51
bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9Igor
ICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJl
c3VsdAorZW5kCisKK2RlZiBpc1VEKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVSl8KEQpfChV
RCkpXFovCitlbmQKKworZGVmIGlzR0YodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChHKXwoRikp
XFovCitlbmQKKworZGVmIGlzS2luZCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KElt
bSl8KEltbTY0KXwoQWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpKVxaLworZW5kCisK
K2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgaXNVRCh0b2tlbikgb3IgaXNHRih0b2tlbikgb3Ig
aXNLaW5kKHRva2VuKSBvcgorICAgICAgICB0b2tlbiA9PSAic3BlY2lhbCIgb3IgdG9rZW4gPT0g
ImFzIgorZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKFth
LXpBLVowLTlfXSspXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBh
cnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5z
ID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAg
ZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZh
bmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNv
bW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpj
b21tZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAg
ICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZp
bGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5k
CisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVk
ICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAg
IGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2Vu
LnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNz
IGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0Cisg
ICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVJvbGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3Ry
aW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHJvbGUgKFUsIEQsIG9yIFVEKSIpIHVu
bGVzcyBpc1VEKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBl
bmQKKworICAgIGRlZiBjb25zdW1lVHlwZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcK
KyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgdHlwZSAoRyBvciBGKSIpIHVubGVzcyBpc0dG
KHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAg
IGRlZiBjb25zdW1lS2luZAorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAg
cGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwg
UmVsQ29uZCwgb3IgUmVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgYWR2
YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICBy
ZXN1bHQgPSB7fQorICAgICAgICAKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBp
ZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgIGlmIHRva2VuID09ICJzcGVj
aWFsIgorICAgICAgICAgICAgICAgIGNvbnN1bWUoInNwZWNpYWwiKQorICAgICAgICAgICAgICAg
IG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgcGFyc2VF
cnJvcigiQ2Fubm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBpZiByZXN1bHRbb3Bjb2Rl
TmFtZV0KKworICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IE9wY29kZS5uZXco
b3Bjb2RlTmFtZSwgdHJ1ZSkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvcGNv
ZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIGlmIHJlc3VsdFtv
cGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSByZXN1bHRbb3Bjb2RlTmFt
ZV0KKyAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEgc3Bl
Y2lhbCBvcGNvZGUiKSBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCBmYWxzZSkK
KyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gb3Bjb2RlCisgICAgICAg
ICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBbXQorICAgICAgICAg
ICAgICAgIGZvcm1zID0gW10KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBp
c1VEKHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSBjb25zdW1lUm9sZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Vt
ZSgiOiIpCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gY29uc3VtZVR5cGUKKyAgICAg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIDw8
IEFyZy5uZXcocm9sZSwgdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICIvIgorICAgICAgICAgICAg
ICAgICAgICBjb25zdW1lKCIvIikKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB0b2tlbi5zdHJp
bmcKKyAgICAgICAgICAgICAgICAgICAgd2hlbiAiYnJhbmNoIgorICAgICAgICAgICAgICAgICAg
ICAgICAgb3Bjb2RlLmtpbmQgPSA6YnJhbmNoCisgICAgICAgICAgICAgICAgICAgIHdoZW4gInRl
cm1pbmFsIgorICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLmtpbmQgPSA6dGVybWluYWwK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VF
cnJvcigiQmFkIC8gZGlyZWN0aXZlIikKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgICAgIGFkdmFuY2UKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAg
ICAgIGlmIGlzS2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBraW5kcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBhbHRO
YW1lID0gbmlsCisgICAgICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBraW5kcyA8PCBLaW5kLm5ldyhjb25zdW1lS2luZCkKKworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICIqIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBwYXJzZUVycm9yKCJDYW4gb25seSBhcHBseSAqIHRvIFRtcCIpIHVubGVzcyBr
aW5kc1stMV0ubmFtZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBr
aW5kc1stMV0uc3BlY2lhbCA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3VtZSgiKiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICJhcyIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdW1lKCJhcyIpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYWx0TmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICAgICAgICAgICAgICBl
bmQKKworICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgd3Jvbmcg
bnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Igb3ZlcmxvYWQiKSB1bmxlc3Mga2luZHMubGVuZ3RoID09
IHNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzLmVhY2hfd2l0
aF9pbmRleCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJJbW0iIG9yIGtpbmQu
bmFtZSA9PSAiSW1tNjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25h
dHVyZVtpbmRleF0ucm9sZSAhPSAiVSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tdXNlIGFyZ3Vt
ZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0udHlwZSAhPSAiRyIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGlt
bWVkaWF0ZSBmb3IgYSBub24tZ2VuZXJhbC1wdXJwb3NlIGFyZ3VtZW50IikKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Jt
cyA8PCBGb3JtLm5ldyhraW5kcywgYWx0TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrIHVubGVzcyBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZS5sZW5ndGggPT0gMAor
ICAgICAgICAgICAgICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDAKKyAgICAg
ICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoW10sIG5pbCkKKyAgICAgICAgICAgICAg
ICBlbmQKKworICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMgPDwgT3ZlcmxvYWQubmV3
KHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAg
IHJlc3VsdAorICAgIGVuZAorZW5kCisKKyRmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0g
UGFyc2VyLm5ldyhJTzo6cmVhZCgkZmlsZU5hbWUpLCAkZmlsZU5hbWUpCiskb3Bjb2RlcyA9IHBh
cnNlci5wYXJzZQorCitkZWYgd3JpdGVIKGZpbGVuYW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tm
aWxlbmFtZX0uaCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAg
b3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZp
bGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNp
Zm5kZWYgQWlyI3tmaWxlbmFtZX1faCIKKyAgICAgICAgb3V0cC5wdXRzICIjZGVmaW5lIEFpciN7
ZmlsZW5hbWV9X2giCisKKyAgICAgICAgeWllbGQgb3V0cAorICAgICAgICAKKyAgICAgICAgb3V0
cC5wdXRzICIjZW5kaWYgLy8gQWlyI3tmaWxlbmFtZX1faCIKKyAgICB9CitlbmQKKword3JpdGVI
KCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJlbnVtIE9w
Y29kZSA6IGludDE2X3QgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLnNvcnQuZWFjaCB7CisgICAgICAg
IHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICIgICAgI3tvcGNvZGV9LCIKKyAgICB9Cisg
ICAgb3V0cC5wdXRzICJ9OyIKKworICAgIG91dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVz
cGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRw
LnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bj
b2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKKyMgRnJvbSBo
ZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBzaW5j
ZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuCisjIG1hdGNoZXIuCisKK2RlZiBtYXRj
aEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXgsIGNvbHVtbkdldHRlciwgZmls
dGVyLCBjYWxsYmFjaykKKyAgICByZXR1cm4gaWYgZm9ybXMubGVuZ3RoID09IDAKKworICAgIGlm
IGZpbHRlcltmb3Jtc10KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBpZiBjb2x1bW5J
bmRleCA+PSBmb3Jtc1swXS5raW5kcy5sZW5ndGgKKyAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1z
Lmxlbmd0aCA9PSAxCisgICAgICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQorICAgICAgICByZXR1cm4K
KyAgICBlbmQKKyAgICAKKyAgICBncm91cHMgPSB7fQorICAgIGZvcm1zLmVhY2ggeworICAgICAg
ICB8IGZvcm0gfAorICAgICAgICBraW5kID0gZm9ybS5raW5kc1tjb2x1bW5JbmRleF0ubmFtZQor
ICAgICAgICBpZiBncm91cHNba2luZF0KKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA8PCBmb3Jt
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA9IFtmb3JtXQorICAgICAg
ICBlbmQKKyAgICB9CisKKyAgICBpZiBzcGVlZCA9PSA6ZmFzdCBhbmQgZ3JvdXBzLmxlbmd0aCA9
PSAxCisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCAr
IDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuCisgICAg
ZW5kCisKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tjb2x1bW5HZXR0ZXJbY29sdW1uSW5kZXhd
fSkgeyIKKyAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgfCBrZXksIHZhbHVlIHwKKyAg
ICAgICAgb3V0cC5wdXRzICIjaWYgVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisg
ICAgICAgIEtpbmQuYXJnS2luZHMoa2V5KS5lYWNoIHsKKyAgICAgICAgICAgIHwgYXJnS2luZCB8
CisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgQXJnOjoje2FyZ0tpbmR9OiIKKyAgICAgICAg
fQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCB2YWx1ZSwgY29sdW1uSW5kZXggKyAx
LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSIgaWYga2V5
ID09ICJJbW02NCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92ZXJs
b2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5v
cGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8
CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlmIG9w
Y29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBlbHNl
CisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMuc2l6
ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkKKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNo
ICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAg
ICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5s
ZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgeWllbGQgb3Bj
b2RlLCBvdmVybG9hZAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVk
T3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9Igor
ICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAgICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZvcm0o
b3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGlu
c3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNw
ZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBjb2x1
bW5JbmRleCB8CisgICAgICAgICAgICAgICAgIiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRleH1d
LmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxz
ZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgZm9y
bSB8CisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQuZm9y
bXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisgICAg
fQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRw
LnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBc
IkFpclNwZWNpYWwuaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICAKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29s
IG9wZ2VuSGlkZGVuVHJ1dGgoKSB7IHJldHVybiB0cnVlOyB9IgorICAgIG91dHAucHV0cyAidGVt
cGxhdGU8dHlwZW5hbWUgVD4iCisgICAgb3V0cC5wdXRzICJpbmxpbmUgVCogb3BnZW5IaWRkZW5Q
dHJJZGVudGl0eShUKiBwb2ludGVyKSB7IHJldHVybiBwb2ludGVyOyB9IgorICAgIG91dHAucHV0
cyAiI2RlZmluZSBPUEdFTl9SRVRVUk4odmFsdWUpIGRvIHtcXCIKKyAgICBvdXRwLnB1dHMgIiAg
ICBpZiAob3BnZW5IaWRkZW5UcnV0aCgpKVxcIgorICAgIG91dHAucHV0cyAiICAgICAgICByZXR1
cm4gdmFsdWU7XFwiCisgICAgb3V0cC5wdXRzICJ9IHdoaWxlIChmYWxzZSkiCisKKyAgICBvdXRw
LnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBJ
bnN0Ojpmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIgorICAgIG91dHAucHV0cyAi
eyIKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAg
IHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAg
ICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1swXSwgQXJnOjpVc2UsIEFyZzo6R1ApOyAvLyBU
aGlzIGlzIGJhc2ljYWxseSBib2d1cywgYnV0IGl0IHdvcmtzIGYgYW5hbHlzZXMgbW9kZWwgU3Bl
Y2lhbCBhcyBhbiBpbW1lZGlhdGUuIgorICAgICAgICAgICAgb3V0cC5wdXRzICJhcmdzWzBdLnNw
ZWNpYWwoKS0+Zm9yRWFjaEFyZygqdGhpcywgc2NvcGVkTGFtYmRhPEVhY2hBcmdDYWxsYmFjaz4o
ZnVuY3RvcikpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJl
LmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICByb2xlID0gbmlsCisgICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQorICAg
ICAgICAgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgor
ICAgICAgICAgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVm
IgorICAgICAgICAgICAgICAgIHdoZW4gIlVEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0g
IlVzZURlZiIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJhaXNl
CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7cm9sZX0sIEFyZzo6I3th
cmcudHlwZX1QKTsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRw
LnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4iCisgICAgb3V0cC5wdXRzICJBTFdBWVNfSU5MSU5FIGJvb2wgaXNWYWxpZEZvcm0oT3Bjb2Rl
IG9wY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykiCisgICAgb3V0cC5wdXRzICJ7IgorICAg
IG91dHAucHV0cyAiQXJnOjpLaW5kIGtpbmRzW3NpemVvZi4uLihBcmd1bWVudHMpXSA9IHsgYXJn
dW1lbnRzLi4uIH07IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9w
Y29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0
cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChzaXpl
b2YuLi4oQXJndW1lbnRzKSkgeyIKKyAgICAgICAgdW5sZXNzIG9wY29kZS5zcGVjaWFsCisgICAg
ICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3Zlcmxv
YWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGh9OiIKKyAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsgfCBjb2x1
bW5JbmRleCB8ICJvcGdlbkhpZGRlblB0cklkZW50aXR5KGtpbmRzKVsje2NvbHVtbkluZGV4fV0i
IH0KKyAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAg
ICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAg
ICAgICAgICAgICAgICAgIHNwZWNpYWwgPSAobm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBraW5k
IHwga2luZC5zcGVjaWFsIH0pCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKCN7c3BlY2lhbH0pOyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwg
ZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJl
dHVybiBmYWxzZTsgIgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiaW5saW5l
IGJvb2wgaXNUZXJtaW5hbChPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAg
b3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7
CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgaWYgb3Bjb2RlLmtpbmQgPT0gOnRlcm1pbmFs
IG9yIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e29wY29kZS5uYW1lfToiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVy
biB0cnVlOyIKKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAicmV0dXJu
IGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAg
IG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKword3JpdGVI
KCJPcGNvZGVHZW5lcmF0ZWQiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNs
dWRlIFwiQWlySW5zdElubGluZXMuaFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJ3dGYv
UHJpbnRTdHJlYW0uaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIFdURiB7IgorICAgIG91
dHAucHV0cyAidXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFpcjsiCisgICAgb3V0cC5wdXRzICJ2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkiCisgICAg
b3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiICAgIHN3aXRjaCAob3Bjb2RlKSB7IgorICAg
ICRvcGNvZGVzLmtleXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5w
dXRzICIgICAgY2FzZSAje29wY29kZX06IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgb3V0
LnByaW50KFwiI3tvcGNvZGV9XCIpOyIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVy
bjsiCisgICAgfQorICAgIG91dHAucHV0cyAiICAgIH0iCisgICAgb3V0cC5wdXRzICIgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAu
cHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5z
dDo6aXNWYWxpZEZvcm0oKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3Zlcmxv
YWRGb3JtKG91dHAsIDpzYWZlLCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2Fk
LCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0
cyAiaWYgKGFyZ3Muc2l6ZSgpIDwgMSkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBm
YWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1swXS5pc1NwZWNpYWwoKSki
CisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRw
LnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+aXNWYWxpZCgqdGhpcykpOyIK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiA9IGZhbHNlCisg
ICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoLnRpbWVzIHsKKyAgICAgICAgICAg
ICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xlID0gb3ZlcmxvYWQuc2lnbmF0dXJl
W2luZGV4XS5yb2xlCisgICAgICAgICAgICAgICAgdHlwZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtp
bmRleF0udHlwZQorICAgICAgICAgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2luZGV4XQorICAg
ICAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gfD0ga2luZC5zcGVjaWFsCisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgIyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgZm9y
bSBtYXRjaGVzLiBXZSBkb24ndCBoYXZlIHRvIHZhbGlkYXRlIHRoZSByb2xlLCBzaW5jZQorICAg
ICAgICAgICAgICAgICMga2luZCBpbXBsaWVzIHJvbGUuIFNvLCB0aGUgb25seSB0aGluZyBsZWZ0
IHRvIHZhbGlkYXRlIGlzIHRoZSB0eXBlLiBBbmQgd2Ugb25seSBoYXZlCisgICAgICAgICAgICAg
ICAgIyB0byB2YWxpZGF0ZSB0aGUgdHlwZSBpZiB3ZSBoYXZlIGEgVG1wLgorICAgICAgICAgICAg
ICAgIGlmIGtpbmQubmFtZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICghYXJnc1sje2luZGV4fV0udG1wKCkuaXMje3R5cGV9UCgpKSIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRzTW9yZVZhbGlkYXRpb24KKyAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghaXMje29wY29kZS5uYW1lfVZhbGlkKCp0aGlz
KSkiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7
IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAg
IG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiYm9vbCBJbnN0OjphZG1pdHNTdGFjayh1
bnNpZ25lZCBhcmdJbmRleCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dp
dGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9w
Y29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisKKyAgICAg
ICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdJbmRl
eCkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+YWRtaXRzU3RhY2soKnRo
aXMsIGFyZ0luZGV4KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFN3aXRjaCBvbiB0
aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJnSW5kZXgpIHsi
CisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRzLm1hcCB7CisgICAgICAg
ICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJl
Lmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbnVt
QXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRleCB8CisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAgICAgICAgICAgICAgICMgQ2hl
Y2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJsb2FkcyBlaXRoZXIgZG8s
IG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAgICAgICAgIyBhdCB0aGlzIGlu
ZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9uIGNhc2UuCisgICAgICAgICAg
ICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAg
ICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgb3Zlcmxv
YWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3Jt
LmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
IyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZpcnN0IGJlY2F1c2UgaWYg
d2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAgICAgICAgICAgICAjIHRvIHNh
eSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAgICAgICAgICAgIGlmIG51bVll
cyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNl
KTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0LgorCisgICAgICAgICAg
ICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0g
MSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJncy5zaXplKCkp
IHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3Zl
cmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdo
YXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgb3Zlcmxv
YWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRk
ciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAK
KyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0aGluZywganVzdCBkcm9w
IHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2ln
bmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92
ZXJsb2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgaG93
IHdlIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlzIGFyZ3VtZW50IHRvIGFu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIHlpZWxkcyBhIHZhbGlkIGZv
cm0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9PSBhcmdJbmRleAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRkciIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVz
ID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLmVhY2ggeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVll
cyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERyb3AgZG93biwg
ZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgS2VlcCBnb2luZy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
Rm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRl
ciwgY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiBuZWVkT3Zlcmxv
YWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAg
ICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiI7CisgICAgb3V0cC5w
dXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZh
bHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVscGVyczo6
SnVtcCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQm
IGNvbnRleHQpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJB
TShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShjb250ZXh0KTsiCisgICAgb3V0
cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIKKyAgICBtYXRjaEluc3RPdmVybG9h
ZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQs
IGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdlbmVyYXRlKCp0aGlzLCBqaXQsIGNv
bnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGZvcm0uYWx0TmFtZQorICAg
ICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2RlLm1hc21OYW1lCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
IG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKworICAgICAgICAgICAgZm9ybS5raW5k
cy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAg
ICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmlu
dCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgY2FzZSBraW5kLm5h
bWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAgICAgICAgICAgICAgICAgIGlmIG92
ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgorICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgd2hlbiAi
SW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Ry
dXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4gIkltbTY0IgorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW02NCgpIgorICAg
ICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
ImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJ
bmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgor
ICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCisgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dHAucHV0cyAiKTsiCisgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1bHQpOyIKKyAgICAgICAgZW5kCisg
ICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAg
b3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRw
LnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5MTUzNSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUFs
dGVybmF0aXZlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBiYXNlbGluZUFs
dGVybmF0aXZlKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnLmgJKHJldmlzaW9uIDE5MTUzNSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAg
CiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggIT0gaW52YWxpZCgpOyB9
Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAKICAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBk
ZWxldGVkKCk7IH0KQEAgLTE3MCw2ICsxNjksNDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCisgICAgY2xhc3MgQWxsUmVnc0l0ZXJhYmxlIHsK
KyAgICBwdWJsaWM6CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBpdGVyYXRvcigpIHsgfQorCisgICAgICAgICAgICBleHBsaWNpdCBpdGVy
YXRvcihSZWcgcmVnKQorICAgICAgICAgICAgICAgIDogbV9yZWdJbmRleChyZWcuaW5kZXgoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVnIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpOyB9CisKKyAgICAg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX3JlZ0luZGV4ID0gUmVnOjpmcm9tSW5kZXgobV9yZWdJbmRleCkubmV4dCgpLmluZGV4
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZ0luZGV4ID09IG90aGVyLm1f
cmVnSW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICB1bnNpZ25lZCBtX3JlZ0luZGV4OworICAgICAgICB9OworCisg
ICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJz
dCgpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihS
ZWcoKSk7IH0KKyAgICB9OworCisgICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSB7IHJl
dHVybiBBbGxSZWdzSXRlcmFibGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90
IGludmFsaWQoKSB7IHJldHVybiAweGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCShyZXZpc2lvbiAxOTE1MzUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6UmVn
aXN0ZXJBdE9mZnNldExpCiAgICAgaWYgKG9mZnNldEJhc2VUeXBlID09IEZyYW1lUG9pbnRlckJh
c2VkKQogICAgICAgICBvZmZzZXQgPSAtKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obnVtYmVyT2ZS
ZWdpc3RlcnMpICogc2l6ZW9mKHZvaWQqKSk7CiAKLSAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZp
cnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTtyZWcgPSByZWcubmV4dCgpKSB7CisgICAgZm9yIChS
ZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0
KCkpIHsKICAgICAgICAgaWYgKHJlZ2lzdGVyU2V0LmdldChyZWcpKSB7CiAgICAgICAgICAgICBh
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChyZWcsIG9mZnNldCkpOwogICAgICAgICAgICAgb2Zmc2V0
ICs9IHNpemVvZih2b2lkKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyQXRPZmZzZXRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCShyZXZpc2lvbiAxOTE1MzUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTY2LDYgKzY2LDkgQEAgcHVibGljOgogICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGZpbmQoUmVnKSBj
b25zdDsKICAgICB1bnNpZ25lZCBpbmRleE9mKFJlZykgY29uc3Q7IC8vIFJldHVybnMgVUlOVF9N
QVggaWYgbm90IGZvdW5kLgogCisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9p
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzLmJlZ2luKCk7IH0KKyAg
ICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1fcmVnaXN0ZXJzLmVuZCgpOyB9CisKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZ2lz
dGVyQXRPZmZzZXQ+IG1fcmVnaXN0ZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE5MTUzNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxMyBA
QCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBv
dGhlcikgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3Zl
Y3Rvci5zZXRCaXRzKCkpCisgICAgICAgICAgICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4
KSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNl
dChyZWcpOyB9CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTM1KQorKysgU291cmNlL1dURi9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBhIHN1cGVyIHJvdWdoIHBy
b3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvTWF0
aEV4dHJhcy5oOgorICAgICAgICAoV1RGOjpyYW5nZXNPdmVybGFwKTogTmljZSB1dGlsaXR5IGZv
ciBjaGVja2luZyBpZiByYW5nZXMgb3ZlcmxhcC4KKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDog
QWRkIGEgRU5BQkxFKEIzX0pJVCkgZmVhdHVyZSBmbGFnLgorICAgICAgICAqIHd0Zi9TY29wZWRM
YW1iZGEuaDogQWRkZWQuIFRoaXMgYWxsb3dzIHVzIHRvIGRvIHplcm8tYWxsb2NhdGlvbiwgemVy
by1jb3B5IGV4dGVybiBsYW1iZGFzLgorICAgICAgICAoV1RGOjpzY29wZWRMYW1iZGEpOgorICAg
ICAgICAqIHd0Zi9TaGFyZWRUYXNrLmg6CisgICAgICAgIChXVEY6OmNyZWF0ZVNoYXJlZFRhc2sp
OgorCiAyMDE1LTEwLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAg
ICAgRmFjdG9yIG91dCB0aGUgZ3JhcGggbm9kZSB3b3JrbGlzdHMgZnJvbSBERkcgaW50byBXVEYK
SW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTkxNTM1KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogCQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4RUIg
LyogV29yZExvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovOyB9OwogCQkwRkVC
M0RDRjFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8qIFNo
YXJlZFRhc2suaCAqLzsgfTsKIAkJMEZFQjNERDExQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVs
VmVjdG9ySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9y
LmggKi87IH07CisJCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEIwMUJE
QUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLzsgfTsKIAkJMEZFQzg0QUYxQkQ4MjUz
MTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhO
b2RlV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQ
dHJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi87IH07CiAJCTBGRjg2MDk1
MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8q
IFBvaW50ZXJDb21wYXJpc29uLmggKi87IH07CkBAIC0zNDUsNiArMzQ2LDcgQEAKIAkJMEZFNDQ3
OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdvcmRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIz
RENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFNoYXJlZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQjNERDAxQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyog
U2NvcGVkTGFtYmRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZExh
bWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRBRTFCRDgyNTMxMDA4
MEZGNzQgLyogR3JhcGhOb2RlV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gR3JhcGhOb2RlV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckNvbXBhcmlzb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg3MCw2ICs4NzIsNyBAQAogCQkJCTE0Njk0MTk0MTZF
QUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCAqLywKIAkJCQkxNDY5NDE5ODE2RUFCMDQx
MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwICovLAogCQkJCTE0Njk0MTk1MTZFQUFGRjgw
MDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCisJCQkJMEZFQzg0QjAxQkRBQ0QzOTAw
ODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovLAogCQkJCUE4QTQ3MzA2MTUxQTgyNUIwMDQxMjNG
RiAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLywKIAkJCQlBOEE0NzMwNzE1MUE4MjVCMDA0MTIzRkYg
LyogU2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJCQkJQThBNDczMDgxNTFBODI1QjAwNDEyM0ZG
IC8qIFNIQTEuY3BwICovLApAQCAtMTI0NCw2ICsxMjQ3LDcgQEAKIAkJCQlBOEE0NzQ0OTE1MUE4
MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29w
ZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NTUxNTFB
ODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmljLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVE
NjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8sCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAxOTE1MzUpCisrKyBTb3VyY2UvV1RGL3d0Zi9NYXRo
RXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOSw2ICs0MTksMTYgQEAgaW5saW5lIFQgbGVm
dFNoaWZ0V2l0aFNhdHVyYXRpb24oVCB2YWx1ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCByYW5nZXNPdmVybGFwKFQgbGVmdE1pbiwg
VCBsZWZ0TWF4LCBUIHJpZ2h0TWluLCBUIHJpZ2h0TWF4KQoreworICAgIGlmIChsZWZ0TWluIDw9
IHJpZ2h0TWluICYmIGxlZnRNYXggPj0gcmlnaHRNaW4pCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGlmIChyaWdodE1pbiA8PSBsZWZ0TWluICYmIHJpZ2h0TWF4ID49IGxlZnRNaW4pCisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKICNlbmRpZiAvLyAjaWZuZGVmIFdURl9NYXRoRXh0cmFzX2gKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aAkocmV2aXNpb24gMTkxNTM1KQorKysgU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzc2LDEyICs3NzYsMjAgQEAKICNkZWZpbmUgRU5BQkxFX0NPTkNVUlJFTlRf
SklUIDEKICNlbmRpZgogCisvKiBUaGUgQjMgY29tcGlsZXIgaXMgYW4gZXhwZXJpbWVudGFsIGJh
Y2tlbmQgdGhhdCBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudC4gV2Ugd2lsbCBrZWVwIGl0IGJ1aWxk
aW5nCisgICBvbiBEYXJ3aW4veDg2LTY0IGZvciBub3csIHRob3VnaCBpdCBpcyB1bnVzZWQgZXhj
ZXB0IGZvciB0ZXN0cy4gKi8KKyNpZiBPUyhEQVJXSU4pICYmIENQVShYODZfNjQpCisjZGVmaW5l
IEVOQUJMRV9CM19KSVQgMQorI2VuZGlmCisKIC8qIElmIHRoZSBiYXNlbGluZSBqaXQgaXMgbm90
IGF2YWlsYWJsZSwgdGhlbiBkaXNhYmxlIHVwcGVyIHRpZXJzIGFzIHdlbGw6ICovCiAjaWYgIUVO
QUJMRShKSVQpCi0jdW5kZWYgRU5BQkxFX0RGR19KSVQgICAgICAvKiBVbmRlZiBzbyB0aGF0IHdl
IGNhbiByZWRlZmluZSBpdC4gKi8KLSN1bmRlZiBFTkFCTEVfRlRMX0pJVCAgICAgIC8qIFVuZGVm
IHNvIHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0LiAqLworI3VuZGVmIEVOQUJMRV9ERkdfSklUCisj
dW5kZWYgRU5BQkxFX0ZUTF9KSVQKKyN1bmRlZiBFTkFCTEVfQjNfSklUCiAjZGVmaW5lIEVOQUJM
RV9ERkdfSklUIDAKICNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMAorI2RlZmluZSBFbmFibGVfQjNf
SklUIDAKICNlbmRpZgogCiAvKiBDb3VudHMgdXNlcyBvZiB3cml0ZSBiYXJyaWVycyB1c2luZyBz
YW1wbGluZyBjb3VudGVycy4gQmUgc3VyZSB0byBhbHNvCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9T
Y29wZWRMYW1iZGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRMYW1iZGFfaAorI2RlZmluZSBTY29wZWRMYW1i
ZGFfaAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gWW91IGNhbiB1c2UgU2NvcGVkTGFtYmRhIHRv
IGVmZmljaWVudGx5IHBhc3MgbGFtYmRhcyB3aXRob3V0IGFsbG9jYXRpbmcgbWVtb3J5IG9yIHJl
cXVpcmluZworLy8gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gb2YgdGhlIGNhbGxlZS4gVGhlIGNh
bGxlZSBzaG91bGQgYmUgZGVjbGFyZWQgYXM6CisvLworLy8gdm9pZCBmb28oY29uc3QgU2NvcGVk
TGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPiYpOworLy8KKy8vIFRoZSBjYWxsZXIganVz
dCBkb2VzOgorLy8KKy8vIHZvaWQgZm9vKHNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGludCwgU3R1
ZmYmKT4oWyZdIChpbnQgeCwgU3R1ZmYmIHkpIC0+IE15VGhpbmdzKiB7IGJsYWggfSkpOworLy8K
Ky8vIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBmb28oKSBub3QgZXNjYXBpbmcgdGhlIGxhbWJk
YS4gVGhlIGxhbWJkYSBpcyBvbmx5IHZhbGlkIHdoaWxlIGZvbygpIGlzCisvLyBvbiB0aGUgc3Rh
Y2sgLSBoZW5jZSB0aGUgbmFtZSBTY29wZWRMYW1iZGEuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0aW9uVHlwZT4gY2xhc3MgU2NvcGVkTGFtYmRhOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0
VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNjb3BlZExhbWJkYTxSZXN1
bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgorICAgIFNjb3BlZExhbWJkYShS
ZXN1bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pID0gbnVsbHB0
ciwgdm9pZCogYXJnID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2ltcGwoaW1wbCkKKyAgICAgICAg
LCBtX2FyZyhhcmcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZXN1bHRUeXBlIG9wZXJhdG9y
KCkoQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2ltcGwobV9hcmcsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMp
Li4uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzdWx0VHlwZSAoKm1faW1wbCkodm9pZCog
YXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pOworICAgIHZvaWQgKm1fYXJnOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBjbGFzcyBTY29wZWRM
YW1iZGFGdW5jdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4g
QXJndW1lbnRUeXBlcywgdHlwZW5hbWUgRnVuY3Rvcj4KK2NsYXNzIFNjb3BlZExhbWJkYUZ1bmN0
b3I8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLiksIEZ1bmN0b3I+IDogcHVibGljIFNjb3Bl
ZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFBhc3NlZEZ1bmN0b3I+CisgICAgU2NvcGVkTGFtYmRhRnVuY3RvcihQ
YXNzZWRGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRMYW1iZGE8UmVzdWx0VHlw
ZSAoQXJndW1lbnRUeXBlcy4uLik+KGltcGxGdW5jdGlvbiwgdGhpcykKKyAgICAgICAgLCBtX2Z1
bmN0b3Ioc3RkOjpmb3J3YXJkPFBhc3NlZEZ1bmN0b3I+KGZ1bmN0b3IpKQorICAgIHsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFJlc3VsdFR5cGUgaW1wbEZ1bmN0aW9uKHZvaWQqIGFy
Z3VtZW50LCBBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFNjb3BlZExhbWJkYUZ1bmN0b3IqPihhcmd1bWVudCktPm1fZnVuY3Rv
cigKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4u
KTsKKyAgICB9CisKKyAgICBGdW5jdG9yIG1fZnVuY3RvcjsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1Njb3BlZExhbWJkYUZ1bmN0b3I8
RnVuY3Rpb25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1iZGEoRnVuY3RvciYmIGZ1bmN0b3IpCit7
CisgICAgcmV0dXJuIFNjb3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihz
dGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwordXNpbmcgV1RGOjpTY29wZWRMYW1iZGE7Cit1c2luZyBXVEY6OnNjb3BlZExhbWJkYTsKKwor
I2VuZGlmIC8vIFNjb3BlZExhbWJkYV9oCisKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRh
c2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHJldmlzaW9u
IDE5MTUzNSkKKysrIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkod29ya2luZyBjb3B5KQpA
QCAtNzksNiArNzksMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAgICBTaGFyZWRUYXNr
RnVuY3RvcihGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBtX2Z1bmN0b3IoV1RGOjptb3Zl
KGZ1bmN0b3IpKQorICAgIHsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgUmVzdWx0VHlwZSBydW4o
QXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykgb3ZlcnJpZGUKICAgICB7CkBAIC0xMTAsNiAr
MTE1LDExIEBAIFJlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0ZVNoYXIKIHsKICAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1
bmN0b3I+KGZ1bmN0b3IpKTsKIH0KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rvcj4KK1JlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0ZVNoYXJl
ZFRhc2soRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hh
cmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihXVEY6Om1vdmUoZnVuY3Rvcikp
KTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263994</attachid>
            <date>2015-10-24 18:16:12 -0700</date>
            <delta_ts>2015-10-24 18:45:56 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>611008</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MyBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6Okxvd2VyaW5nU2VsZWN0b3I6Okxvd2VyaW5nU2VsZWN0b3Ip
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjph
Y2NlcHRSb290KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdT
ZWxlY3Rvcjo6YWNjZXB0Um9vdExhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHNMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6
YWNjZXB0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dl
cmluZ1NlbGVjdG9yOjphY2NlcHRPcGVyYW5kc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlMb2FkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5QWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmVBZGRM
b2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rv
cjo6dHJ5U3RvcmVBbmRMb2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlDb25zdDMyKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6QjM6Omxvd2VyVG9BaXIpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQuCisgICAg
ICAgICogYjMvQjNNZW1vcnlWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6TWVt
b3J5VmFsdWU6On5NZW1vcnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6
ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpNZW1v
cnlWYWx1ZTo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpNZW1vcnlW
YWx1ZSk6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNPcGNvZGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjppc0NoZWNrTWF0aCk6CisgICAgICAgICogYjMvQjNPcmlnaW4uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZHVtcCk6CisgICAgICAgICogYjMvQjNPcmln
aW4uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46Ok9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpQYXRj
aHBvaW50U3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6flBh
dGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpm
b3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlk
KToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQYXRjaHBv
aW50VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6
flBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIz
OjpQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgICogYjMvQjNQaGFz
ZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQaGFzZVNjb3BlOjpQaGFzZVNj
b3BlKToKKyAgICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6On5QaGFzZVNjb3BlKToKKyAgICAg
ICAgKiBiMy9CM1BoYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQcm9jZWR1cmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJvY2VkdXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6flByb2NlZHVyZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcik6CisgICAgICAgICog
YjMvQjNQcm9jZWR1cmUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNp
emUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphdCk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpp
dGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6OmZpbmROZXh0KToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjpWYWx1ZXNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRl
cmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6VmFsdWVzQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OlZhbHVlc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OnZhbHVlcyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGQpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90
S2luZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBiMy9CM1N0YWNrU2xvdEtpbmQuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNTdGFja1Nsb3RW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6On5TdGFj
a1Nsb3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90VmFsdWUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpTdGFja1Nsb3RWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Ns
b3RWYWx1ZTo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Omtp
bmQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Om9mZnNldEZyb21GUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpTdGFja1Nsb3RWYWx1ZSk6CisgICAgICAgICog
YjMvQjNTdGFja21hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmR1
bXApOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcDo6U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6b3BhcXVlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlN0YWNrbWFwOjpzZXRPcGFxdWVJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFj
a21hcDo6b3BhcXVlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmNvbnN0cmFp
bik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xvYmJlcik6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcDo6Y2xvYmJlcmVkKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpz
ZXRHZW5lcmF0b3IpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwpOgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpTdWNjZXNzb3JDb2xsZWN0
aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OnNpemUpOgorICAg
ICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpT
dWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0
b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpiZWdpbik6Cisg
ICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAqIGIz
L0IzU3dpdGNoQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6
ZHVtcCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hD
YXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6OmNhc2VW
YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0YXJnZXQpOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoQ2FzZTo6dGFyZ2V0QmxvY2spOgorICAgICAgICAqIGIzL0IzU3dpdGNo
VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjp+U3dpdGNo
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmFwcGVuZENhc2UpOgorICAgICAgICAoSlNDOjpC
Mzo6U3dpdGNoVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjpTd2l0Y2hWYWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6
OlN3aXRjaFZhbHVlOjpudW1DYXNlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZh
bHVlOjpjYXNlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmZhbGxUaHJvdWdoKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRj
aFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoVmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6QjM6OlN3aXRjaFZhbHVlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1
ZTo6ZW5kKToKKyAgICAgICAgKiBiMy9CM1R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNUeXBlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6aXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6aXNGbG9hdCk6CisgICAgICAgIChK
U0M6OkIzOjpwb2ludGVyVHlwZSk6CisgICAgICAgICogYjMvQjNVcHNpbG9uVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M1Vwc2lsb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6
YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OnBoaSk6CisgICAgICAg
IChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OlVwc2lsb25WYWx1ZSk6CisgICAgICAgICogYjMvQjNV
c2VDb3VudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6VXNlQ291
bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6flVzZUNvdW50cyk6CisgICAgICAg
ICogYjMvQjNVc2VDb3VudHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpVc2VDb3VudHM6
Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OnZhbGlkYXRlKToKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjp+VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRp
dHkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoTm9wKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkZWVwRHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZTo6dHlwZUZvcik6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcmlnaW4pOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoaWxkKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphaXJUeXBl
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpjaGlsZHJlbik6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6RGVlcFZhbHVlRHVtcDo6RGVlcFZh
bHVlRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlSW5saW5lcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphcyk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50MzIpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
Ojphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmFzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0ludCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjphc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3RhY2ttYXApOgor
ICAgICAgICAqIGIzL0IzVmFsdWVSZXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlUmVwOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvQjNWYWx1ZVJlcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpWYWx1
ZVJlcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpzdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6c3RhY2tB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6Y29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6OmNvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjpraW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvZmZzZXRGcm9tRlApOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9mZnNldEZyb21TUCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZVJlcDo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmRvdWJsZVZhbHVl
KToKKyAgICAgICAgKiBiMy9haXI6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJBcmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpk
dW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0RlZik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjphZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpzdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Y2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNWYWxpZFNjYWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpsb2dT
Y2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aW5kZXgpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OnJlbENvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnJl
c0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnNwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmtpbmQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ltbSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbW02NCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1N0YWNr
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0NhbGxBcmcpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
UmVsQ29uZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXNDb25kKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnRtcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OnBvaW50ZXJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YmFzZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c2NhbGUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlBU
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc1R5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omdwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZwcik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Z3BUbXBJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnBUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpdGhPZmZzZXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjphc1RydXN0ZWRJbW0zMik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVz
dGVkSW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbVB0cik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjphc0Jhc2VJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
YXNSZWxhdGlvbmFsQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1Jl
c3VsdENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpC
YXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQmFzaWNCbG9jay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Js
b2NrOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6bnVt
U3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVl
cEJhc2ljQmxvY2tEdW1wOjpEZWVwQmFzaWNCbG9ja0R1bXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpk
ZWVwRHVtcCk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2Fs
bFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
Q2FsbFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNw
ZWNpYWw6OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpk
ZWVwRHVtcEltcGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaDogQWRkZWQu
CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6Q29kZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6On5Db2RlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphZGRTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjphZGRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y0NhbGxTcGVjaWFs
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OmZpbmROZXh0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZpbmRO
ZXh0QmxvY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpudW1UbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbEFyZ0FyZWFTaXpl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVxdWVzdENhbGxBcmdBcmVhU2l6ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OnNldEZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpv
cGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6Q29kZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246OlN0YWNrU2xvdHNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNr
U2xvdHNDb2xsZWN0aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
dGFja1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjpTcGVjaWFsc0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3Bl
Y2lhbHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29k
ZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciop
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzcGVjaWFscyk6CisgICAgICAgICogYjMvYWlyL0FpckZy
ZXF1ZW50ZWRCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIz
L2Fpci9BaXJHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGVk
LmNwcDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Okluc2VydGlvblNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6Y29kZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc2VydGlvblNldDo6YXBwZW5kSW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0LmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmR1bXApOgorICAgICAgICAqIGIz
L2Fpci9BaXJJbnN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpJbnN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0Ojpmb3JFYWNoVG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8VG1wPjo6Zm9yRWFjaCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8QXJnPjo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc3Q6OmZvckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpo
YXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6ZXh0cmFDbG9iYmVyZWRS
ZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzU2hpZnRWYWxpZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmlzTHNoaWZ0MzJWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6bGl2ZUF0SGVhZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpsaXZlQXRUYWlsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxDYWxjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6bGl2ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVu
ZXNzOjpMb2NhbENhbGM6OnRha2VMaXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5l
c3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJQaGFzZVNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdwcnNJblByaW9yaXR5
T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpmcHJzSW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMv
YWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPjo6aW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+Ojpp
blByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZWdzSW5Qcmlvcml0eU9y
ZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3BlY2lhbDo6flNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpuYW1l
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlNwZWNpYWw6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFNwZWNpYWxEdW1wOjpEZWVw
U3BlY2lhbER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OmR1
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAgICogYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpz
cGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0
YWNrU2xvdDo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OlN0
YWNrU2xvdCk6CisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpieXRlU2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlN0YWNrU2xvdDo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xv
dDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6dmFsdWUpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTdGFja1Nsb3Q6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkRlZXBTdGFja1Nsb3REdW1wOjpEZWVwU3RhY2tTbG90RHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkRlZXBTdGFja1Nsb3REdW1wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6Z3BUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6ZnBUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3Ig
Ym9vbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6aXNGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUFIp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRlBSKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6Z3ByKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzVG1wSW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmdwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpUbXA6OmZwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OnRtcElu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0FsaXZlKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzaCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmVuY29kZUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUZQUik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlRtcDo6ZW5jb2RlR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVu
Y29kZUZQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNFbmNvZGVkRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlBUbXApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZGVjb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZGVjb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXBIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXBJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgICogYjMvYWlyL0FpclZh
bGlkYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnZhbGlkYXRlKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmI6IEFkZGVkLgorICAgICAgICAqIGIzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYjogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpjb21waWxlQW5kUnVuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3Q0Mik6
CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogaml0
L1JlZy5oOgorICAgICAgICAoSlNDOjpSZWc6OmluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnOjpp
c1NldCk6CisgICAgICAgIChKU0M6OlJlZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6
OlJlZzo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6UmVnOjpBbGxS
ZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpSZWc6OkFs
bFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpSZWc6
OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpS
ZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6UmVnOjphbGwpOgorICAgICAgICAoSlND
OjpSZWc6OmludmFsaWQpOgorICAgICAgICAoSlNDOjpSZWc6Om9wZXJhdG9yISk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0KToKKyAgICAgICAgKiBq
aXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmVuZCk6
CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpzZXRBbnkpOgorCiAyMDE1LTEwLTI0ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgog
CiAgICAgICAgIFRlYWNoIGNyZWF0ZV9oYXNoX3RhYmxlIHRvIG9taXQgYnVpbHRpbnMgbWFjcm9z
IHdoZW4gZ2VuZXJhdGluZyB0YWJsZXMgZm9yIG5hdGl2ZS1vbmx5IG9iamVjdHMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxOTE1Mzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsNyBAQCBWUEFUSCA9IFwKIAogUFlUSE9OID0gcHl0aG9uCiBQRVJM
ID0gcGVybAorUlVCWSA9IHJ1YnkKIAogSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIgPSAkKEph
dmFTY3JpcHRDb3JlKS9TY3JpcHRzCiAKQEAgLTU5LDYgKzYwLDEzIEBAIGFsbCA6IFwKICAgICBM
ZXhlci5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5oIFwKICAgICBSZWdFeHBKaXRUYWJsZXMu
aCBcCisgICAgQjNMb3dlcmluZ01hdGNoZXIuaCBcCisgICAgQjNBZGRyZXNzTWF0Y2hlci5oIFwK
KyAgICBCM0NvbXBhcmlzb25NYXRjaGVyLmggXAorICAgIEFpck9wY29kZS5oIFwKKyAgICBBaXJP
cGNvZGUuY3BwIFwKKyAgICBBaXJPcGNvZGVVdGlscy5oIFwKKyAgICBBaXJPcGNvZGVVdGlscy5j
cHAgXAogIwogCiAjIEphdmFTY3JpcHQgYnVpbHRpbnMuCkBAIC0yNjIsNiArMjcwLDIyIEBAIElO
UFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUyA9IFwKIEpTUmVwbGF5SW5wdXRzLmggOiAkKElO
UFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBVVF9HRU5FUkFUT1JfU0NSSVBUUykK
IAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
clJlcGxheUlucHV0cy5weSAtLW91dHB1dERpciAuIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3Jl
ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQogCitCM0xvd2VyaW5nTWF0Y2hlci5o
OiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZh
U2NyaXB0Q29yZSkvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReIAor
QjNBZGRyZXNzTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJu
X21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJu
cworCSQoUlVCWSkgJF4KK0IzQ29tcGFyaXNvbk1hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkv
YjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzQ29t
cGFyaXNvbk1hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReCisKK0Fpck9wY29kZS5oOiAkKEph
dmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRDb3Jl
KS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNvZGUuY3BwOiAk
KEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRD
b3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNvZGVVdGls
cy5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNv
ZGVVdGlscy5jcHA6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJi
ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworCSQoUlVCWSkgJF4K
KwogIyBEeW5hbWljYWxseS1kZWZpbmVkIHRhcmdldHMgYXJlIGxpc3RlZCBiZWxvdy4gU3RhdGlj
IHRhcmdldHMgYmVsb25nIHVwIHRvcC4KIAogYWxsIDogXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNp
ZXMgPSAoCisJCQkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNTExNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNTUxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCkBAIC02ODUsNiArNjg2LDEyMSBAQAogCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMg
LyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi87IH07
CiAJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5oICovOyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyog
TWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAq
LzsgfTsKKwkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
NDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovOyB9OworCQkwRkVDODUwMDFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2su
Y3BwICovOyB9OworCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNzFC
REFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi87IH07CisJCTBGRUM4NTAyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNC
YXNpY0Jsb2NrSW5saW5lcy5oICovOyB9OworCQkwRkVDODUwMzFCREFDREFDMDA4MEZGNzQgLyog
QjNCYXNpY0Jsb2NrVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5o
ICovOyB9OworCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQTFC
REFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi87IH07CisJCTBGRUM4NTA1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1NwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovOyB9Owor
CQkwRkVDODUwNzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJEMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUwODFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi87
IH07CisJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tb24uY3BwICovOyB9OworCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyB9OworCQkwRkVD
ODUwQjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwICovOyB9OworCQkwRkVDODUwQzFCREFDREFDMDA4MEZG
NzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5
LmggKi87IH07CisJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
MzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUw
RTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0MzJWYWx1ZS5oICovOyB9OworCQkwRkVDODUwRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5o
ICovOyB9OworCQkwRkVDODUxMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Qzkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjND
b250cm9sVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJl
cXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICov
OyB9OworCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0MxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLzsgfTsKKwkJMEZFQzg1MTcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNG
cmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovOyB9OworCQkw
RkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJhdGUuaCAqLzsgfTsKKwkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxQjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1h
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLzsgfTsKKwkJMEZFQzg1MUMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0
LmggKi87IH07CisJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi87IH07CisJCTBGRUM4NTFFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuaCAqLzsgfTsKKwkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovOyB9OworCQkwRkVD
ODUyMDFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTWVtb3J5VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MjExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi87IH07CisJCTBGRUM4
NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bj
b2RlLmggKi87IH07CisJCTBGRUM4NTIzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREOTFC
REFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovOyB9OworCQkwRkVDODUyNDFCREFDREFD
MDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovOyB9
OworCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQjFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4
NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQzFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovOyB9OworCQkwRkVDODUyNzFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0
Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERjFCREFDREFD
MDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5o
ICovOyB9OworCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUu
aCAqLzsgfTsKKwkJMEZFQzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovOyB9OworCQkwRkVD
ODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNDFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja21hcC5jcHAgKi87IH07CisJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrbWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovOyB9OworCQkwRkVDODUz
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNw
ZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovOyB9OworCQkwRkVDODUzNDFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RW
YWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xv
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovOyB9OworCQkw
RkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFD
MDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CisJCTBGRUM4NTM3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoQ2FzZS5jcHAgKi87IH07CisJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRj
aENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsKKwkJMEZFQzg1
MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLzsgfTsK
KwkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMTFCREFDREFDMDA4MEZGNzQg
LyogQjNUeXBlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovOyB9OworCQkwRkVDODUzRDFCREFDREFD
MDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLzsgfTsKKwkJMEZF
Qzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1VzZUNvdW50cy5jcHAgKi87IH07CisJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi87IH07CisJCTBG
RUM4NTQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07CisJCTBGRUM4
NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTQ1MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVz
LmggKi87IH07CisJCTBGRUM4NTQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDcxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmgg
Ki87IH07CisJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ4
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NkUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBbGxvY2F0ZVN0YWNrLmggKi87IH07CisJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi87IH07CisJCTBGRUM4
NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
aCAqLzsgfTsKKwkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovOyB9OworCQkwRkVDODU3MjFC
REFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJh
c2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxs
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLzsgfTsK
KwkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovOyB9OworCQkwRkVDODU3NTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi87IH07
CisJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MTFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ29kZS5oICovOyB9OworCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJl
cXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi87
IH07CisJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MzFCREFDREM3
MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovOyB9OworCQkwRkVDODU3OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICov
OyB9OworCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU1
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovOyB9OworCQkwRkVD
ODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLzsgfTsKKwkJMEZFQzg1N0MxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NzFCREFDREM3MDA4MEZGNzQgLyog
QWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLzsgfTsKKwkJMEZFQzg1N0QxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU1ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0
LmNwcCAqLzsgfTsKKwkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1
NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovOyB9OworCQkwRkVDODU3
RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dC5jcHAgKi87IH07CisJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QjFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovOyB9OworCQkwRkVDODU4MTFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5o
ICovOyB9OworCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVEMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovOyB9OworCQkwRkVDODU4MzFCREFDREM3MDA4
MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5jcHAgKi87IH07CisJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovOyB9OworCQkwRkVDODU4NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MDFCREFDREM3MDA4MEZGNzQg
LyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi87IH07CisJCTBGRUM4NTg2MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0
ZXJQcmlvcml0eS5oICovOyB9OworCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4
NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BlY2lhbC5oICovOyB9OworCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxF
dmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICov
OyB9OworCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi87IH07CisJCTBGRUM4NThC
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clN0YWNrU2xvdC5jcHAgKi87IH07CisJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
dGFja1Nsb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLzsgfTsKKwkJMEZF
Qzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2ODFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wLmNwcCAqLzsgfTsKKwkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovOyB9OworCQkwRkVDODU4RjFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElubGluZXMuaCAq
LzsgfTsKKwkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTZCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTkxMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmgg
Ki87IH07CisJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1OTIxQkRC
MUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi87IH07CisJCTBGRUM4NUEzMUJEQjVD
RjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QTQxQkRCNUNGMTAwODBGRjc0IC8q
IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGRUM4NUFGMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0
YjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIy
NjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGRUQ2N0JBMUIy
NjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I4MUIyNjI1NkQwMDY2Q0Ux
NSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLzsgfTsKIAkJMEZFRTk4NDExQTg4NjVC
NzAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBW
YXJhcmdzRnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTgzOSw2ICsxOTU1LDEzIEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBG
Q0VGQUI1MTgwNUQ2MTYwMDQ3MkNFNDsKIAkJCXJlbW90ZUluZm8gPSBsbHZtRm9ySlNDOwogCQl9
OworCQkwRkVDODVCMDFCREI1RDhGMDA4MEZGNzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
ID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFs
ID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJv
eHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZFQzg1OTQxQkRCNUNGMTAw
ODBGRjc0OworCQkJcmVtb3RlSW5mbyA9IHRlc3RiMzsKKwkJfTsKIAkJMEZGOTIyRDIxNEY0NkIy
RjAwNDFBMjRFIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENv
bnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZD
MDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTI1ODAsNiArMjcwMywxMjAgQEAKIAkJ
MEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZS5jcHA7IHBhdGggPSBkZmcvREZHSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTMwMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0pJVENvZGUuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNBcmd1bWVudFJlZ1ZhbHVlLmg7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0Jhc2ljQmxvY2suY3BwOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2su
aDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2tVdGlscy5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0Jsb2NrV29ya2xpc3QuaDsgcGF0aCA9IGIzL0IzQmxvY2tXb3Jr
bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQjFCREFDREFDMDA4
MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNDaGVja1NwZWNpYWwuY3BwOyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQg
LyogQjNDaGVja1NwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjND
aGVja1NwZWNpYWwuaDsgcGF0aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDaGVja1ZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM0NoZWNr
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQ29tbW9uLmNwcDsgcGF0aCA9IGIzL0IzQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29tbW9uLmg7IHBhdGggPSBiMy9CM0Nv
bW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29tbXV0YXRpdml0eS5jcHA7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzQ29tbXV0YXRpdml0eS5oOyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
MzJWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0
MzJWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0MzJWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0MzJWYWx1ZS5oOyBw
YXRoID0gYjMvQjNDb25zdDMyVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3Q2NFZhbHVlLmNwcDsgcGF0aCA9IGIz
L0IzQ29uc3Q2NFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQ29uc3Q2NFZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNzFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0RG91Ymxl
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDODFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzQ29uc3REb3VibGVWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0NvbnRyb2xWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Nv
bnRyb2xWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb250cm9sVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNGcmVxdWVuY3lD
bGFzcy5jcHA7IHBhdGggPSBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGcmVxdWVuY3lDbGFzcy5o
OyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9
IGIzL0IzRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzR2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvQjNHZW5lcmF0
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENGMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0dlbmVyYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
R2VuZXJhdGUuaDsgcGF0aCA9IGIzL0IzR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVyaWNGcmVxdWVu
dGVkQmxvY2suaDsgcGF0aCA9IGIzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0luZGV4TWFwLmg7IHBh
dGggPSBiMy9CM0luZGV4TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzSW5kZXhTZXQuaDsgcGF0aCA9IGIzL0IzSW5kZXhTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93
ZXJUb0Fpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0xvd2Vy
VG9BaXIuY3BwOyBwYXRoID0gYjMvQjNMb3dlclRvQWlyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0xvd2VyVG9BaXIuaDsgcGF0aCA9IGIz
L0IzTG93ZXJUb0Fpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENTFC
REFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM01lbW9yeVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENjFCREFDREFDMDA4
MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM01lbW9yeVZhbHVlLmg7IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09wY29kZS5jcHA7IHBh
dGggPSBiMy9CM09wY29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM09wY29kZS5oOyBwYXRoID0gYjMvQjNPcGNvZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luLmNwcDsgcGF0
aCA9IGIzL0IzT3JpZ2luLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzT3JpZ2luLmg7IHBhdGggPSBiMy9CM09yaWdpbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50
U3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BhdGNo
cG9pbnRTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50U3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Bh
dGNocG9pbnRTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1BhdGNocG9pbnRWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Bh
dGNocG9pbnRWYWx1ZS5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VT
Y29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BoYXNlU2Nv
cGUuY3BwOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL0Iz
UGhhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMTFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNQcm9jZWR1cmUuY3BwOyBwYXRoID0gYjMvQjNQcm9jZWR1cmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyog
QjNQcm9jZWR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1
cmUuaDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM1Byb2NlZHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja21hcC5jcHA7IHBhdGggPSBiMy9CM1N0YWNr
bWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNTdGFja21hcC5oOyBwYXRoID0gYjMvQjNTdGFja21hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja21hcFNwZWNp
YWwuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNp
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwu
aDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmNwcDsg
cGF0aCA9IGIzL0IzU3RhY2tTbG90S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9C
M1N0YWNrU2xvdEtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1N0
YWNrU2xvdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNTdGFja1Nsb3RWYWx1ZS5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBwYXRoID0gYjMvQjNTdWNjZXNzb3JD
b2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVEMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNTd2l0Y2hDYXNlLmNwcDsgcGF0aCA9IGIzL0IzU3dpdGNoQ2FzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTd2l0
Y2hDYXNlLmg7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTd2l0Y2hWYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM1N3aXRjaFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTd2l0Y2hWYWx1ZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMTFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzVHlwZS5jcHA7IHBhdGggPSBiMy9CM1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVHlwZS5oOyBwYXRoID0gYjMvQjNUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Vw
c2lsb25WYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25W
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Vwc2lsb25WYWx1ZS5o
OyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXNlQ291bnRzLmNwcDsgcGF0aCA9IGIzL0Iz
VXNlQ291bnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVXNlQ291bnRzLmg7IHBhdGggPSBiMy9CM1VzZUNvdW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbGlkYXRlLmNw
cDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbGlkYXRlLmg7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWUuaDsgcGF0aCA9IGIzL0IzVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVJbmxp
bmVzLmg7IHBhdGggPSBiMy9CM1ZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbHVlUmVwLmNwcDsgcGF0aCA9IGIz
L0IzVmFsdWVSZXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGRDFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1ZhbHVlUmVwLmg7IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0
ZVN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9j
YXRlU3RhY2suY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0OTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0
ZVN0YWNrLmg7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFyZy5jcHA7IHBhdGggPSBi
My9haXIvQWlyQXJnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJBcmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmFzaWNCbG9jay5jcHA7
IHBhdGggPSBiMy9haXIvQWlyQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJhc2ljQmxvY2suaDsgcGF0aCA9IGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRF
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJDQ2FsbFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5oOyBwYXRoID0gYjMvYWlyL0FpckNDYWxs
U3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJDb2RlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDb2RlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ29kZS5oOyBwYXRoID0gYjMvYWly
L0FpckNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9IGIzL2Fpci9BaXJGcmVxdWVu
dGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckdlbmVyYXRlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5l
cmF0ZS5oOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5lcmF0aW9uQ29udGV4
dC5oOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJIYW5k
bGVDYWxsZWVTYXZlcy5jcHA7IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NzFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVT
YXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1ODFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckluc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9u
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTkxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySW5z
dC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3QuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJ
bnN0SW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMaXZlbmVzcy5oOyBwYXRo
ID0gYjMvYWlyL0FpckxpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclBoYXNlU2NvcGUuY3BwOyBwYXRoID0gYjMvYWly
L0FpclBoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmg7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MDFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBBaXJSZWdpc3RlclByaW9yaXR5LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjEx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5oOyBwYXRoID0gYjMvYWlyL0Fp
clJlZ2lzdGVyUHJpb3JpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lh
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
clNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bp
bGxFdmVyeXRoaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNwaWxs
RXZlcnl0aGluZy5oOyBwYXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Rh
Y2tTbG90LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclN0YWNr
U2xvdC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tTbG90LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja1Nsb3QuaDsgcGF0aCA9
IGIzL2Fpci9BaXJTdGFja1Nsb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBaXJUbXAuY3BwOyBwYXRoID0gYjMvYWlyL0FpclRtcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJUbXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wLmg7IHBhdGgg
PSBiMy9haXIvQWlyVG1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTZB
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpclRtcElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJWYWxpZGF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVmFsaWRhdGUuaDsg
cGF0aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckdlbmVyYXRlZC5jcHA7IHBhdGggPSBiMy9h
aXIvQWlyR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdGIzOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OworCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RiMy5jcHA7IHBhdGggPSBiMy90ZXN0
YjMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNzFCMjYyNTZEMDA2
NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHBhdGggPSBk
ZmcvREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5n
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFy
YXJnc0ZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldHVwVmFyYXJn
c0ZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODAxLDYgKzQwMzgsMTUg
QEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKKwkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlp
c2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBMzFCREI1Q0YxMDA4MEZGNzQgLyogRm91
bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwRkVDODVBNDFCREI1Q0Yx
MDA4MEZGNzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJ
CQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJ
CTBGRjkyMkM2MTRGNDZCMTMwMDQxQTI0RSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0g
UEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OwpAQCAtMzg3MCw2ICs0MTE2LDcgQEAKIAkJCQkxNDEyMTEyMDBBNDg3OTNDMDA0ODAyNTUgLyog
bWluaWRvbSAqLywKIAkJCQkxNEJENTlCRjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywK
IAkJCQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKKwkJCQkwRkVD
ODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9k
dWN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zODkwLDYgKzQxMzcsNyBAQAog
CQkJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5
ICovLAogCQkJCTE0MzJFQkQ3MEEzNENBRDQwMDcxN0I5RiAvKiBBUEkgKi8sCiAJCQkJOTY4OENC
MTIwRUQxMkI0RTAwMUQ2NDlGIC8qIGFzc2VtYmxlciAqLywKKwkJCQkwRkVDODRCMjFCREFDRDVF
MDA4MEZGNzQgLyogYjMgKi8sCiAJCQkJQTU0Q0YyRUExODRFQTczOTAwMjM3RjE5IC8qIGJpbmRp
bmdzICovLAogCQkJCUE3RDgwMTlGMTg4MEQ2NkUwMDI2QzM5QiAvKiBidWlsdGlucyAqLywKIAkJ
CQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8sCkBAIC00MTAzLDYgKzQz
NTEsMTM0IEBACiAJCQluYW1lID0gZnRsOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKKwkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyog
YWlyICovLAorCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovLAorCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKKwkJCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2Nr
LmNwcCAqLywKKwkJCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmgg
Ki8sCisJCQkJMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMu
aCAqLywKKwkJCQkwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMu
aCAqLywKKwkJCQkwRkVDODRCQTFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0Lmgg
Ki8sCisJCQkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAq
LywKKwkJCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLywK
KwkJCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAqLywKKwkJ
CQkwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi8sCisJCQkJMEZF
Qzg0QkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLywKKwkJCQkwRkVDODRDMDFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLywKKwkJCQkwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLywKKwkJCQkwRkVDODRDMjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8sCisJCQkJMEZFQzg0QzMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDNDFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDNTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDY0VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0NjRWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0RG91YmxlVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0RG91YmxlVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDOTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb250cm9sVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5oICovLAorCQkJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKKwkJCQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyog
QjNGcmVxdWVuY3lDbGFzcy5oICovLAorCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5l
cmF0ZS5oICovLAorCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eE1hcC5oICovLAorCQkJCTBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0Lmgg
Ki8sCisJCQkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi8s
CisJCQkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovLAorCQkJ
CTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLywKKwkJCQkw
RkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovLAorCQkJCTBGRUM4
NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi8sCisJCQkJMEZFQzg0RDgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8sCisJCQkJMEZFQzg0RDkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3JpZ2luLmNwcCAqLywKKwkJCQkwRkVDODREQTFCREFDREFDMDA4MEZGNzQgLyog
QjNPcmlnaW4uaCAqLywKKwkJCQkwRkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50U3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0REMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0
Y2hwb2ludFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oICovLAorCQkJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BoYXNlU2NvcGUuY3BwICovLAorCQkJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuaCAqLywKKwkJCQkwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuY3BwICovLAorCQkJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovLAorCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMu
aCAqLywKKwkJCQkwRkVDODRFNDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi8s
CisJCQkJMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLywKKwkJCQkw
RkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovLAorCQkJ
CTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovLAorCQkJ
CTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovLAorCQkJ
CTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLywKKwkJCQkw
RkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLywKKwkJCQkw
RkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8sCisJ
CQkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovLAorCQkJCTBGRUM4
NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRG
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovLAorCQkJCTBGRUM4NEYxMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovLAorCQkJCTBGRUM4NEYyMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1R5cGUuaCAqLywKKwkJCQkwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNV
cHNpbG9uVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5oICovLAorCQkJCTBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNv
dW50cy5jcHAgKi8sCisJCQkJMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRz
LmggKi8sCisJCQkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICov
LAorCQkJCTBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8sCisJCQkJ
MEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEZB
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0RkIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0RkMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWVSZXAuY3BwICovLAorCQkJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbHVlUmVwLmggKi8sCisJCQkJMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3Ri
My5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IGIzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZFQzg1NDgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovLAorCQkJCTBGRUM4NTQ5MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi8sCisJCQkJMEZFQzg1NEExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFyZy5jcHAgKi8sCisJCQkJMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckFyZy5oICovLAorCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCAqLywKKwkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
ICovLAorCQkJCTBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3Bw
ICovLAorCQkJCTBGRUM4NTRGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAq
LywKKwkJCQkwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi8sCisJCQkJ
MEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCAqLywKKwkJCQkwRkVDODU1MjFC
REFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJMEZFQzg1NTMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODU1NDFCREFD
REM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLywKKwkJCQkwRkVDODU5MjFCREIxRTEwMDA4
MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLywKKwkJCQkwRkVDODU1NTFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLywKKwkJCQkwRkVDODU1NjFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovLAorCQkJCTBGRUM4NTU3MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oICovLAorCQkJCTBGRUM4NTU4MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwICovLAorCQkJCTBGRUM4NTU5MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRkVDODU1QTFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgKi8sCisJCQkJMEZFQzg1NUIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc3QuaCAqLywKKwkJCQkwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zdElubGluZXMuaCAqLywKKwkJCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2
ZW5lc3MuaCAqLywKKwkJCQkwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5jcHAgKi8sCisJCQkJMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUu
aCAqLywKKwkJCQkwRkVDODU2MDFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0
eS5jcHAgKi8sCisJCQkJMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJp
b3JpdHkuaCAqLywKKwkJCQkwRkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5j
cHAgKi8sCisJCQkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCAqLywK
KwkJCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCAq
LywKKwkJCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmgg
Ki8sCisJCQkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8s
CisJCQkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovLAorCQkJ
CTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovLAorCQkJCTBGRUM4NTY5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLywKKwkJCQkwRkVDODU2QTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovLAorCQkJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclZhbGlkYXRlLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGFpcjsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CiAJCTBGRjQyNzJFMTU4RUJDQ0UwMDRDQjlGRiAvKiBkaXNhc3Nl
bWJsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNjA4
OSw2ICs2NDY1LDcgQEAKIAkJCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFz
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjND
MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcw
RTkxOUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQ
SUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjExNyw4ICs2NDk0LDEwIEBACiAJCQkJQTVFQTcw
RTgxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3
NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2NEIyNzIxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRj
aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRt
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUMwRTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xl
YW5PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAv
KiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMz
OUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMzMsNiArNjUx
Miw3IEBACiAJCQkJOTlEQTAwQTQxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX21vZGVsLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQTUxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5z
X3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAogCQkJCTQxREVBMTMyMUI5RjMxNjMwMDZENjVE
RCAvKiBCdWlsdGluVXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTEwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUU3Mjk0MEIx
OTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdG
Mzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKQEAgLTYxNDMsNiArNjUyMyw3IEBACiAJCQkJMEYyREQ4MEIxQUIzRDg1ODAwQkJCOEU4IC8q
IEJ5dGVjb2RlS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVj
a1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAv
KiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNG
QSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTc5LDYgKzY1NjAs
NyBAQAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAx
NzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdF
NUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk2QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTg2LDggKzY1NjgsMTAgQEAKIAkJCQkwRjZGQzc1MTE5
NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJv
b3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4QTE4QkMyMUMzMDBCRURGNzYgLyogQ29u
c29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAw
NjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxOTFC
REEwNjgwMDAzMzFCODQgLyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1M0NFMDg2MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYyMDIsNiArNjU4Niw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAwODEw
RDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEzRkEx
NDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4
RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUyNDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTYyMTMsNiArNjU5OCw3IEBACiAJCQkJOTk1OUU5MkIxQkQx
N0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTky
RkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRl
Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjMzLDYgKzY2MTksNyBAQAogCQkJCUE3
MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4
Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MDFC
REFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2
QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MjQzLDcgKzY2MzAsOSBAQAogCQkJCTBGMkREODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdB
cmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzIyMTg3NzUwNTYw
MDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4
M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1
NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MjUzLDYgKzY2NDIsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFE
QTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
RDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9j
a1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAwMTlBREE0MTAwMDZBQzcy
QSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyOTIsOCArNjY4Miwx
MCBAQAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VV
c2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkw
MTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZD
N0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRp
b25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyMyw2ICs2NzE1LDcgQEAKIAkJ
CQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NjFCREFD
REM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZl
ZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjMzMSw2
ICs2NzI0LDcgQEAKIAkJCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRH
cmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERG
R01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENEODkx
MCAvKiBERkdNaW5pZmllZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0
MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERG
R05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzQ5LDYgKzY3NDMsNyBAQAog
CQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29t
cGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5
M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRG
dXp6LmggaW4gSGVhZGVycyAqLywKQEAgLTYzNjYsNiArNjc2MSw4IEBACiAJCQkJMEZGQzkyMTYx
Qjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWly
QWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZD
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAq
LywKQEAgLTYzOTAsNiArNjc4Nyw3IEBACiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhB
MzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMxREIx
MjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjQw
MSw2ICs2Nzk5LDcgQEAKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyog
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OTZCNzMxODFCREEwNjgwMDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBp
biBIZWFkZXJzICovLApAQCAtNjQzMSw2ICs2ODMwLDcgQEAKIAkJCQkwRjU2QTFEMzE1MDAwRjM1
MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQUM3
NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtpbmQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzODE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyog
RmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OTEsNiArNjg5MSw3IEBACiAJCQkJ
MEZFQTBBMjAxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTFR5cGVkUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21C
bG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTYyODQxODhDOThENDAw
NzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM2MThC
NTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM4
MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NDk4LDggKzY4OTksMTAgQEAKIAkJCQkyQTgzNjM4QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVs
bEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDQwRTE2RjVD
RDAwQjM0NDYwIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjBGMUEwMTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzEwRkIxOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0QkZGMkMxQUQ0NzZFNzAw
MDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
RjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTM4LDYgKzY5NDEsNyBAQAogCQkJCUM0NzAz
Q0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFMDUwMTkxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFBMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MEExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQjFBQTkwOTExMDBE
MzNCMzMgLyogR2VuZXJpY09mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTAxN0I2
QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjU2Myw2ICs2OTY3LDcgQEAKIAkJCQlDMkU1MjZCRTE1
OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTdCQTYx
MDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAwQjM0NDYwIC8qIElkZW50aWZp
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIwMEEzODNEMCAvKiBJZGVu
dGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwNzYxODlCMDM4QzAwNjMz
MjMxIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjE2LDYgKzcw
MjEsNyBAQAogCQkJCUExQjlFMjNDMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTMxQjRFMENEQjAwRkMxMDI5IC8q
IEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFCOUUy
M0UxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCBp
biBIZWFkZXJzICovLAogCQkJCUExODE5M0U0MUI0RTBDREIwMEZDMTAyOSAvKiBJbnRsQ29sbGF0
b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q2RTFCNERDMTQxMDBE
Njk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3
MDFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjY0Niw2ICs3MDUyLDcgQEAKIAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBB
QkIyMTcgLyogSklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzExNUFB
ODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2
NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTkxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4
QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NTks
NiArNzA2Niw3IEBACiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCREFFQ0IxN0Y0RUExNDAwRjYx
NDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEIxNDE4NkQxQjYy
NTI3RjAwRkIyMDY4IC8qIEpTQXJyb3dGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MTgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtNjY3NSw2ICs3MDgzLDggQEAKIAkJCQk4NjVBMzBGMTEz
NTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTNDRTA4ODE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUxRTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29u
dGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJC
QzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjkwLDYgKzcxMDAs
NyBAQAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
RW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FG
MTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAq
LywKQEAgLTY3MDAsMTEgKzcxMTEsMTMgQEAKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYy
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MzkxN0U3QjFCNzkwNkZBMDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3
RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MzUsNiArNzE0OCw3IEBACiAJCQkJQTcwMDg3NDIx
N0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4
MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1
OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmlyb25tZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAv
KiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzY0LDYgKzcxNzgsNyBAQAog
CQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNp
bG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAv
KiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjAwQjVBNzE1MkJBQUE3
MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI4
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIx
LDkgKzcyMzYsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNl
cHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyog
TExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5
QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2
ODBBNTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExW
TURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcy
Q0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTY4MzYsMTIgKzcyNTMsMTQg
QEAKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBp
biBIZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2Vt
YmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIg
LyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2
MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUwNDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVy
UHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8q
IE1hY3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2
MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBD
M0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdD
QkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjcsNiArNzI4
Niw3IEBACiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBO
YXRpdmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMjExQjkwMTNE
RTAwMzQ2QjUyIC8qIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJt
aW5pc3RpY0lucHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTY4ODcsNiArNzMwNyw3IEBACiAJCQkJ
RTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1N0MxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxl
ZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MDAsMTMgKzczMjEs
MTcgQEAKIAkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTgzNDE4MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4
MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyog
UHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJB
MyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0NzFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5Qjkx
NjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5
QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5
dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MjgsMTAgKzczNTMsMTMgQEAKIAkJCQkwRkI3
RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvdGVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZs
YWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEz
RiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzkxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1
RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRl
cnMgKi8sCkBAIC02OTUyLDYgKzczODAsNyBAQAogCQkJCTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIz
MiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3RDIzRUUxODkxQjU1NDAw
MzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5
RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
NjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rv
ckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RjAxODIzNDVBRjAwQTgyRTY5
IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjk1OSw2
ICs3Mzg4LDcgQEAKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVj
dG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NTExN0VFMjc0OTAw
QUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OUVCQ0I3MEU4QzZENEEw
MDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0NDFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBCMEE5RDExQTlC
NjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDMDYx
MUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTY5ODgsNiArNzQxOCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8q
IFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2
RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTcwMDcsNiArNzQzOCw3IEBACiAJCQkJ
QkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVy
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVj
dHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKQEAgLTcwNDMsMTAgKzc0NzUsMTIg
QEAKIAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI2QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBl
b2ZUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyog
QjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4
NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REVDMTk4MzJEQzQw
MDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REYw
MTk4MzJERDYwMDdENEIxOSAvKiBUeXBlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0
QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRG
RjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfaW5w
dXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzA4NCw4ICs3NTE4LDEwIEBACiAJCQkJRkVEOTRGMkYx
NzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQy
NjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
RTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNEJGQ0U2OTEwQ0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dD
TWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJC
IC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLywKQEAgLTcxMDcsOSArNzU0Mywx
MiBAQAogCQkJCTk5NTlFOTJFMUJEMTdGQTQwMDFBQTQxMyAvKiB4eGQucGwgaW4gSGVhZGVycyAq
LywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVj
aWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWly
Q0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZF
N0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlG
RTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODExQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njcw
NEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAt
NzEzNCw2ICs3NTczLDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEZDRUZBQjYxODA1RDYx
NjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuZHluYW1pYyI7CiAJCX07CisJCTBGRUM4NTk0
MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJn
ZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZFQzg1QTgxQkRCNUNGMTAwODBGRjc0
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YjMi
ICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8q
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3Mg
Ki8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAo
CisJCQkpOworCQkJbmFtZSA9IHRlc3RiMzsKKwkJCXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSAwRkVDODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICov
OworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsK
IAkJMEZGOTIyQzMxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAq
LyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxp
c3QgPSAwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciIgKi87CkBAIC03
Mjg5LDYgKzc3NDQsNyBAQAogCQkJCTE0QkQ1OUJFMEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBp
ICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi8sCiAJCQkJNjUxMTIy
RjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJMEZFQzg1OTQxQkRCNUNG
MTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1RDZCMkE0NzE1MkI5RTE3MDA1MjMxREUgLyog
VGVzdCBUb29scyAqLywKIAkJCSk7CiAJCX07CkBAIC03NTM2LDYgKzc5OTIsMTQgQEAKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKKwkJMEZF
Qzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxl
cyA9ICgKKwkJCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OworCQl9OwogCQkwRkY5MjJDNDE0RjQ2QjEzMDA0MUEyNEUgLyogU291cmNlcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKQEAgLTc1OTEsNiArODA1NSw3IEBACiAJCQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5
IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkQxMDdFQzM3NjAw
NDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NDNCQUExNkI4ODI0
OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1i
bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBB
Uk12N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTk4LDggKzgwNjMsMTAgQEAKIAkJ
CQlBN0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIx
NzQgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyog
QjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3
MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0Yz
OUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzYyMCw4ICs4MDg3LDEwIEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAw
Qjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkVDOUJCNjFCN0VC
MDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2Fs
bEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENDFCODRG
QjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0
YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyog
Q2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjM0LDYgKzgxMDMsNyBAQAogCQkJCUE3
N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQ
cm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcx
IC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0
NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY0
MSw2ICs4MTExLDcgQEAKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xv
d1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAv
KiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVB
M0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4
R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMx
QiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NjgsNiArODEz
OSw3IEBACiAJCQkJMEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURB
QjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNE
MTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Njc3LDYgKzgxNDksNyBAQAogCQkJCTBGNjM5NDg0MTVF
NDgxMTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
OUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZF
QTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNzY4NSw2ICs4MTU4LDcgQEAKIAkJCQk4NkVDOURDNDEzMjhE
RjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDM2OTQxQUU5
Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzdBNDIzRjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc3MjIsNiArODE5Niw3IEBACiAJCQkJMkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8q
IERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMy
OERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NG
OTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyog
REZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0Ew
QkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzc2NCwxNCArODIzOSwxNyBAQAogCQkJCTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAv
KiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3
MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMzkyQzg5MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NS
RXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFRDE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNjIzNzk3MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQTE5RDBCQTdEMDBC
MUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3N0Ex
Nzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBG
NzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNF
MDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCOUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9j
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8q
IERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3ODksNiArODI2Nyw4IEBACiAJ
CQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3OTA4NTUxOUEy
OTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4
IC8qIERGR1RocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhD
QTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTc4MTYsNiArODI5Niw3IEBACiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBF
QkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlF
NDVBMjUxOEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhh
bmRsaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3
QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODYwLDYgKzgzNDEs
NyBAQAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJE
RkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMx
QjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03ODY3LDYgKzgzNDksNyBAQAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBG
VExPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjkxODdERkRFQzAwODNCNjg3
IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUFCMTgw
NEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3
M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg5OSw2ICs4Mzgy
LDcgQEAKIAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNy
ZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxM0UwNEUxNjE2NEExRjAw
REM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVy
cmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA2LDYgKzgzOTAsNyBAQAogCQkJCTlF
QTVDN0EyMTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0aWFsaXplTExWTU1hYy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5RTcyOTQwODE5MEYwMjFFMDAxQTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJ
WC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3QjFCREFDREM3
MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVj
dGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTcsNiArODQwMiw3IEBACiAJ
CQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg3MTg1Njgz
MzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdG
QSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0
Mzg5MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzk3Myw2ICs4NDU5LDcgQEAKIAkJCQk4NkZBOUU5MTE0MkJCQjJF
MDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBG
OEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU2RjFCREFDREM3MDA4MEZGNzQgLyogQWly
QXJnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QUJERjYwMEE0MzdGRUYwMEVDQ0EwMSAvKiBK
U0NhbGxiYWNrT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1N0NGNDU4MTlCRjY2NjIw
MDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4MDFBODE4ODBE
NkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTgwLDYg
Kzg0NjcsOCBAQAogCQkJCTE0N0YzOUQ2MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0NKU1ZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGQ0U0MEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNz
UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg3MThCQzFBNTYwMEJFREY3NiAvKiBK
U0NvbnNvbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTczMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2
MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0
QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcyMDI4QjYxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc5OTAsMTYgKzg0NzksMTkgQEAKIAkJCQlGRTM4NEVFNzFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlENzEwN0VDMzc2MDA0MjdBNDggLyogSlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyogSlNGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxRDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dl
clRvQWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAv
KiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGRDAwODUxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QzNBMUE1MThDMDQ5MDIwMEM5NTkzQSAvKiBK
U0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1OTQ1NTkyMTgyNDc0NDcwMENDMzg0MyAvKiBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRTkxODkxQjA3NzAwMzFDN0ZBIC8qIEpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU5RDE3QjEw
N0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTBFNEI2MzE4ODA5REQ1MDA2
OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUwM0ZBMjkxODhGMTA1OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUJGMTg1QkZBQ0MwMDdFOTVB
RCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVD
MTE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwODAxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAxOCw2ICs4NTEwLDcgQEAKIAkJCQlFMzE4
Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3Jk
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0U4RDFDMUI5MDEzQzMwMDM0NkI1MiAvKiBKU05h
dGl2ZVN0ZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTE4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjcwMDkwMERB
QzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04MDMxLDYgKzg1MjQsNyBAQAogCQkJCUUzRUY4ODc0MUI2NkRGMjMwMDNGMjZDQiAv
KiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0Qx
MTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTJD
MzdGMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk5MjhGRjNCMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxh
eUlucHV0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAx
MUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDU5LDYgKzg1NTMsNyBA
QAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJN
YXAubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNG
cmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAx
M0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4Qzky
MEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZC
NTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODA2Niw5ICs4NTYxLDEyIEBACiAJCQkJMTQ4RjIxQjAxMDdFQzU0MTAw
NDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzU3MTU5MTRBMjAw
MDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZC
NDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NEZFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3Vt
ZW50UmVnVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOEIwMTExN0NGMDc4
MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2
ODBBODE0QkE3RkFCMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgwNzcsNiArODU3NSw3IEBACiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAw
RDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlE
REUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2
ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0
YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdB
RCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkM1NjhFMDExQTIx
M0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04
MDg2LDEwICs4NTg1LDEyIEBACiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4NzM5MTdDQkU4
NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRE
RUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBN
YXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAw
QjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5
RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQzNDBBNDg0MUE5MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODEyOCwxNyArODYyOSwyMSBAQAogCQkJCTBGRjcyOUFEMTY2QUQzNUMw
MDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVl
bmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUYxNjZBRDM1QzAw
MEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1
QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOTBDQUMx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMg
LyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyRTFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
MDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxl
clByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDBEMUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlERTgxMDdFQzdFNzAwNjUwNDQ2IC8qIFByb3BlcnR5U2xvdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBREUzOUZGRjE2REQxNDRCMDAwM0NENEEgLyogUHJvcGVy
dHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxNDcsMTAgKzg2NTIsMTIgQEAKIAkJCQkw
RjE1Q0QyMjFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5
IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzNjM3QTUxQjYz
MjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZB
N0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3Vs
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVn
RXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTY0LDYgKzg2NzEsNyBAQAog
CQkJCUE1QkExNUU5MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1RUZEMDBDQzM4NDMgLyogUmVtb3RlSW5zcGVjdG9y
RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJF
NjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUwNTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RUUxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3Bl
Y3RvclhQQ0Nvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1MDE3RUUyNzQ5
MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Mjc3NzNERTFBQUY4
M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTgyLDYg
Kzg2OTAsNyBAQAogCQkJCUE1NENGMkY5MTg0RUFFREEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0Q0YyRjUxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlw
dFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REE1MTdEMTI4NTgwMDVGNUZGOSAv
KiBTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4NTFCREFDREM3
MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzkwREQ2RDE4MkY0OTk3MDA1ODg4MDcgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcyOTlEQTExN0QxMjg0ODAwNUY1RkY5IC8qIFNldFByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVFOTg0MzFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBW
YXJhcmdzRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTk2LDYgKzg3MDUsNyBAQAogCQkJ
CTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0MxRUFGMTE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3MzBCNjEzMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFs
QWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyMTFCREFDREFDMDA4MEZG
NzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUIxMDdFQzdFNzAw
NjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUMw
RUM2MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQzEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODIxMiw2ICs4NzIyLDcgQEAKIAkJCQk3MDVCNDFBRDFBNkU1
MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzA1QjQxQUYxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3lt
Ym9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0
NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgy
NDAsNiArODc1MSw3IEBACiAJCQkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVj
b3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlFRTBCRkYxQjRBRkI4NTAwMDM4NUM5IC8q
IFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2QzczNTAxQUM5
Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRTA1MDJDMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxS
ZWdpc3Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQg
LyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjU5LDYgKzg3NzEsNyBAQAogCQkJCTcwOUZC
ODY5MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzA5RkI4NkIxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFy
cmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3RDFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTBCMTQw
NDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3RTVBQjNBMTc5OUU0QjIwMEQyODMzRCAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODYzQzZEOUMxNTIxMTExQTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxp
emVVQ1MyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODI4NSw2ICs4Nzk4LDExIEBACiAJCQl0YXJn
ZXQgPSAwRkNFRkFCNTE4MDVENjE2MDA0NzJDRTQgLyogbGx2bUZvckpTQyAqLzsKIAkJCXRhcmdl
dFByb3h5ID0gMEZDRUZBQkMxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSAqLzsKIAkJfTsKKwkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0g
MEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLzsKKwkJCXRhcmdldFByb3h5ID0g
MEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJ
fTsKIAkJMEZGOTIyRDMxNEY0NkIyRjAwNDFBMjRFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8g
PSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY0NjgwQTkx
NEJBN0ZEOTAwQkZFMjcyIC8qIExMSW50IE9mZnNldHMgKi87CkBAIC04NDA5LDYgKzg5MjcsMzgg
QEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEZFQzg1QTkxQkRCNUNG
MTAwODBGRjc0IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2
NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJ
CQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsK
KwkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMw
MjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJ
bmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGRUM4NUFCMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9m
aWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVj
dXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05B
TUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJMEZFQzg1
QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIx
MzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9
IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNCMTRGNDZCMTMwMDQxQTI0RSAvKiBEZWJ1ZyAq
LyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRp
b25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUu
eGNjb25maWcgKi87CkBAIC04NzYxLDYgKzkzMTEsMTcgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rp
b247CiAJCX07CisJCTBGRUM4NUE4MUJEQjVDRjEwMDgwRkY3NCAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdGIzIiAqLyA9IHsKKwkJCWlzYSA9IFhD
Q29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTBGRUM4
NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLywKKwkJCQkwRkVDODVBQTFCREI1Q0YxMDA4
MEZGNzQgLyogUmVsZWFzZSAqLywKKwkJCQkwRkVDODVBQjFCREI1Q0YxMDA4MEZGNzQgLyogUHJv
ZmlsaW5nICovLAorCQkJCTBGRUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9uICov
LAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1
bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNBMTRGNDZC
MTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdl
dCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJh
dGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHJldmlzaW9u
IDE5MTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQVNT
RU1CTEVSKQogCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJsZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4
MTAwMDAwMDAwdWxsOwpAQCAtNDcsNSArNDksNzAgQEAgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2Fs
bFByb2JlKHN0ZDo6ZnVuYwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQoreworICAg
IHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOgorICAgICAg
ICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RFcXVhbCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QWJvdmU6CisgICAgICAgIG91dC5w
cmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZU9yRXF1YWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkJlbG93OgorICAgICAgICBvdXQu
cHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVy
OjpCZWxvd09yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dPckVxdWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbjoKKyAgICAg
ICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBN
YWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkdy
ZWF0ZXJUaGFuT3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW46CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW4iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbDoKKyAgICAg
ICAgb3V0LnByaW50KCJMZXNzVGhhbk9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
KQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93OgorICAgICAgICBvdXQucHJpbnQoIk92ZXJmbG93Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQ6CisgICAgICAgIG91dC5wcmludCgiU2lnbmVk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpQb3NpdGl2ZU9y
WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJQb3NpdGl2ZU9yWmVybyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJa
ZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
OgorICAgICAgICBvdXQucHJpbnQoIk5vblplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MTUz
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTU5Niw4ICsxNTk2LDE5IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbik7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwog
I2Vsc2UgLy8gRU5BQkxFKEFTU0VNQkxFUikKIAorbmFtZXNwYWNlIEpTQyB7CisKIC8vIElmIHRo
ZXJlIGlzIG5vIGFzc2VtYmxlciBmb3IgdGhpcyBwbGF0Zm9ybSwgYXQgbGVhc3QgYWxsb3cgY29k
ZSB0byBtYWtlIHJlZmVyZW5jZXMgdG8KIC8vIHNvbWUgb2YgdGhlIHRoaW5ncyBpdCB3b3VsZCBv
dGhlcndpc2UgZGVmaW5lLCBhbGJlaXQgd2l0aG91dCBnaXZpbmcgdGhhdCBjb2RlIGFueSB3YXkK
IC8vIG9mIGRvaW5nIGFueXRoaW5nIHVzZWZ1bC4KQEAgLTE2MTEsNiArMTYyMiw4IEBAIHB1Ymxp
YzoKICAgICBlbnVtIEZQUmVnaXN0ZXJJRCB7IE5vRlBSZWdpc3RlciB9OwogfTsKIAorfSAvLyBu
YW1lc3BhY2UgSlNDCisKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCiAjZW5kaWYgLy8g
TWFjcm9Bc3NlbWJsZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVz
c01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRj
aGVyIEFkZHJlc3NNYXRjaGVyCisKKyMgTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIEIzIGRvaW5n
IGFnZ3Jlc3NpdmUgcmVhc3NvY2lhdGlvbiBhbmQgY2Fub25jYWxpemF0aW9uIG9mIGludGVnZXIg
YWRkcy4KKyMgV2UnbGwgbmV2ZXIgc2VlIEFkZChBZGQoeCwgY29uc3QxKSwgY29uc3QyKSBiZWNh
dXNlIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlYXNzb2NpYXRlZCBpbnRvCisjIEFkZCh4
LCBjb25zdDEgKyBjb25zdDIpLiBBbHNvLCB3ZSB3aWxsIG5ldmVyIHNlZSBBZGQoY29uc3QsIHgp
LCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgY2Fub25pY2FsaXplZAorIyBpdCB0byBBZGQoeCwgY29u
c3QpLiBUaGF0IHNhaWQsIGluIHRoaXMgY29kZSB3ZSBuZXZlciBtYWtlIGFzc2VydGlvbnMgYWJv
dXQgdGhlc2Ugb3B0aW1pemF0aW9ucworIyBoYXZpbmcgYmVlbiBwZXJmb3JtZWQuIEFsc28sIHNp
bmNlIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9ucyBpbiBCMyBoYXZlIGEgYnVpbHQtaW4gb2Zm
c2V0LCB3ZQorIyBkb24ndCBuZWVkIHRvIG1hdGNoIEFkZCh4LCBjb25zdCkuIFRoYXQgd291bGQg
aGF2ZSBiZWVuIGZvbGRlZCBpbnRvIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9ucworIyBhbHJl
YWR5LiBTbywgdGhlIG9ubHkgZmFuY3kgbWF0aGluZyB0aGlzIGNhbiBkbyBpcyBqdXN0IEJhc2VJ
bmRleCBmb3Jtcy4KKworQWRkU2hpZnQxID0gQWRkKFNobChpbmRleCwgJGxvZ1NjYWxlKSwgYmFz
ZSkKK0FkZFNoaWZ0MiA9IEFkZChiYXNlLCBTaGwoaW5kZXgsICRsb2dTY2FsZSkpCisKK0FkZCA9
IEFkZChsZWZ0LCByaWdodCkKKworRGlyZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKCkKK3sKK30KKwordm9pZCBB
cmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQXJndW1lbnRSZWdWYWx1ZV9oCisjZGVmaW5lIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQXJndW1lbnRSZWdW
YWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQXJndW1lbnRSZWc7IH0KKyAgICAKKyAg
ICB+QXJndW1lbnRSZWdWYWx1ZSgpOworCisgICAgUmVnIGFyZ3VtZW50UmVnKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWc7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgQXJndW1lbnRSZWdWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdp
biwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQ
UigpID8gcG9pbnRlclR5cGUoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJl
ZykKKyAgICB7CisgICAgICAgIEFTU0VSVChyZWcuaXNTZXQoKSk7CisgICAgfQorCisgICAgUmVn
IG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Nv
bnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK0Jhc2ljQmxv
Y2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBt
X2luZGV4KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNp
Y0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZh
bHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCitib29sIEJh
c2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVy
biBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6
OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6
cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJl
cGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAg
ICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3Zv
aWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywg
IjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgQjM6OmRlZXBEdW1wKHZh
bHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2sKKyNkZWZpbmUg
QjNCYXNpY0Jsb2NrCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVu
dGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBl
ZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0
Y2hlcyBDb250cm9sVmFsdWU6OlN1Y2Nlc3Nvckxpc3QKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBkdW1wUHJlZml4OworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVMaXN0OjppdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6
Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgVmFsdWVMaXN0
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7
IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMu
bGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsg
fQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZh
bHVlVHlwZSogYXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNp
Z25lZCBudW1TdWNjZXNzb3JzKCkgY29uc3Q7CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBz
dWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayYgc3Vj
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KTsKKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNz
b3JzKCkgY29uc3Q7CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpOworCisgICAgQmFz
aWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEJhc2lj
QmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCk7CisgICAgU3VjY2Vzc29yQ29s
bGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKTsKKyAg
ICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxp
c3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVj
ZXNzb3JzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgUHJlZGVj
ZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsg
fQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNl
c3NvcnM7IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJv
b2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVwbGFjZVByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAgIGRvdWJsZSBm
cmVxdWVuY3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAg
Ly8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGlu
ZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFs
dWVMaXN0IG1fdmFsdWVzOworICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAg
ICBkb3VibGUgbV9mcmVxdWVuY3k7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgewor
cHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykK
KyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAg
ICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQmFz
aWNCbG9jayogbV9ibG9jazsKK307CisKK2lubGluZSBEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1
bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2Nr
RHVtcChibG9jayk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9jaworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKyNkZWZpbmUg
QjNCYXNpY0Jsb2NrSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJC
M1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFs
dWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUu
YWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdW5zaWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vz
c29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5u
dW1TdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBjb25zdCBGcmVxdWVudGVkQmxvY2smIEJhc2lj
QmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFz
dCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lubGluZSBG
cmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7
Cit9CisKK2lubGluZSBjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFs
dWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxp
c3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENv
bnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jayogQmFz
aWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2sqJiBC
YXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4g
c3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUgU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JCbG9ja3MoKQoreworICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxv
Y2ssIFN1Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK2lubGluZSBTdWNjZXNzb3JD
b2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxp
c3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN1
Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4o
c3VjY2Vzc29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVm
aW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChwcmVkZWNlc3NvcnMu
Y29udGFpbnMocHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcmVk
ZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3Nv
cnNbaV0gPT0gcHJlZGVjZXNzb3IpIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpLS1dID0g
cHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAgIHByZWRlY2Vzc29ycy5yZW1vdmVMYXN0
KCk7CisgICAgICAgICAgICBBU1NFUlQoIXByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3Nv
cikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBs
YWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2lj
QmxvY2sqIHRvKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3Nv
cnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgeworICAgICAgICAg
ICAgcHJlZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVjb21wdXRlcyBw
cmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KK3Rl
bXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAgLy8gQ2xlYXIg
YWxsIHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoYXV0byYgYmxvY2sgOiBibG9j
a3MpCisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisKKyAgICBHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0
OworICAgIHdvcmtsaXN0LnB1c2goYmxvY2tzWzBdLmdldCgpKTsKKyAgICB3aGlsZSAoQmFzaWNC
bG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgaWYg
KHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnBy
ZWRlY2Vzc29ycygpLmFwcGVuZChibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChi
bG9ja3NbaV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJsb2Nrc1tp
XSA9IG51bGxwdHI7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIz
QmxvY2tXb3JrbGlzdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5v
ZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0
OworCisvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFz
ICJibG9jayB3aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dp
dGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sg
d29ya2xpc3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdp
dGggdGhlIGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhp
bmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwg
Zm9yCisvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNh
c2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBp
bmRleC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9
IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2lj
QmxvY2s+PjsKKwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRl
ZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBl
ZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNp
Y0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja1dvcmts
aXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVj
aWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRl
ICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1l
c3BhY2UgeworCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBzd2l0Y2gg
KGluc3Qub3JpZ2luLT5vcGNvZGUoKSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBD
aGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAvLyBSZXNDb25kLCBUbXAsIFRt
cAorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1cm4gMTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitD
aGVja1NwZWNpYWw6OkNoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51
bUFyZ3MpCisgICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fbnVtQ2hlY2tBcmdz
KG51bUFyZ3MpCit7Cit9CisKK0NoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCit7Cit9CisK
K0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYgaW5zdCkgY29uc3QK
K3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0Lm9yaWdpbik7Cisg
ICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzaXplKG1fbnVtQ2hlY2tBcmdzKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX251bUNoZWNrQXJnczsgaS0tOykKKyAgICAgICAgaGlkZGVuQnJhbmNoLmFy
Z3NbaV0gPSBpbnN0LmFyZ3NbaSArIDFdOworICAgIHJldHVybiBoaWRkZW5CcmFuY2g7Cit9CisK
K3ZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExh
bWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBoaWRkZW5CcmFu
Y2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7CisgICAgZm9yRWFjaEFyZ0ltcGwobnVtQjNB
cmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9v
bCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaGlkZGVu
QnJhbmNoKGluc3QpLmlzVmFsaWRGb3JtKCkKKyAgICAgICAgJiYgaXNWYWxpZEltcGwobnVtQjNB
cmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOworfQorCitib29sIENoZWNrU3Bl
Y2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAg
aWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9udW1DaGVja0FyZ3MpCisgICAg
ICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3RhY2soYXJnSW5kZXggLSAxKTsK
KyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0Fy
Z3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDaGVja1Nw
ZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9u
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZmFpbCA9IGhpZGRl
bkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgIEFTU0VSVChmYWlsLmlz
U2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICBWZWN0b3I8
VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZhbHVlLT5vcGNvZGUoKSkpIHsK
KyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCkKKyAgICAgICAgICAgIHJl
cHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+b3Bjb2RlKCkg
PT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkKKyAgICAgICAgICAgIHJl
cHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbM10pKTsK
KyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1sy
XSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hl
Y2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMSkpOworICAgIH0K
KworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwg
cmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5kKAorICAgICAgICBjcmVh
dGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1bmN0aW9uPigKKyAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikgeworICAg
ICAgICAgICAgICAgIGZhaWwubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgICAgICAgICAgICAgU3RhY2ttYXA6Okdl
bmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICAgIHBhcmFtcy52YWx1ZSA9IHZh
bHVlOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAgICAg
ICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICAgICAgICAgICAgICBwYXJhbXMudXNl
ZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICAgICAgICAgICAg
ICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisgICAgICAgICAgICB9
KSk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7IC8vIEFzIGZhciBhcyBBaXIg
dGhpbmtzLCB3ZSBhcmUgbm90IGEgdGVybWluYWwuCit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpk
dW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2NoZWNr
T3Bjb2RlLCAiKCIsIG1fbnVtQ2hlY2tBcmdzLCAiKSIpOworfQorCit2b2lkIENoZWNrU3BlY2lh
bDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0aCAiLCBt
X251bUNoZWNrQXJncywgIiBhcmdzLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0No
ZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lh
bC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ugd2FudCB0byBs
b3dlciBDaGVjayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVuIHdlIHdhbnQgdG8g
cm91dGUgdGhhdCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2RlIGluc3RlYWQgb2Yg
ZG9pbmcgYW55dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNrU3BlY2lhbCB3aWxs
IHJlbWVtYmVyCisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2VsZWN0ZWQgYWxvbmcg
d2l0aCB0aGUgbnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdhbnQuIEl0CisvLyB3
aWxsIGNyZWF0ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUgYXBwcm9wcmlhdGUg
YXJncyBmcm9tIHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNhbGwgYW55IG9mIHRo
ZSBjYWxsYmFja3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFu
ZCBDaGVja011bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFyZSB0aGUgcmV2ZXJz
ZQorLy8gb2YgdGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQzMiBiLCBhKS4gRXhj
ZXB0OgorLy8gLSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBCcmFuY2hOZWczMiB4
LgorLy8gLSBDaGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwzMiBiLCBhIGJ1dCB3
ZSBwYXNzIEFueSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJs
aWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNv
ZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKKyAg
ICAvLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJh
bmNoIHRoYXQgdGhpcyB3aWxsIHVzZS4KKyAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNvbnN0
IEFpcjo6SW5zdCYpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEFp
cjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4m
KSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAg
Ym9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7
CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhp
ZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2Vu
ZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVy
czo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRp
b25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOwor
ICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1NwZWNp
YWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
Q2hlY2tWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK0NoZWNrVmFsdWU6On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9pZCBD
aGVja1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgic3RhY2ttYXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hl
Y2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrVmFsdWUgOiBwdWJsaWMgVmFs
dWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6Cisg
ICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIGNh
c2UgQ2hlY2s6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5DaGVja1Zh
bHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQg
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2tB
ZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdo
dCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbiwg
bGVmdCwgcmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7CisgICAg
ICAgIEFTU0VSVChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAgIEFTU0VS
VChvcGNvZGUgPT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9PSBD
aGVja011bCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCisgICAg
Q2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHByZWRpY2F0ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBv
cmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2sp
OworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVk
ZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBz
aG91bGREdW1wSVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSB8fCBGVEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFj
aFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQoreworICAgIHJl
dHVybiBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZh
bGlkYXRlSVIoKQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkgfHwgc2hv
dWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0
RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBo
YXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAgIHJldHVy
biBPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1v
bl9oCisjZGVmaW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitpbmxpbmUgYm9vbCBpczY0Qml0KCkgeyByZXR1cm4g
c2l6ZW9mKHZvaWQqKSA9PSA4OyB9CitpbmxpbmUgYm9vbCBpczMyQml0KCkgeyByZXR1cm4gIWlz
NjRCaXQoKTsgfQorCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJBdEVh
Y2hQaGFzZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlkYXRl
SVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM0NvbW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11
dGF0aXZpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bW11dGF0aXZpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tbXV0YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1
c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNvbW11
dGF0aXZpdHkpIHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIkNv
bW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZlOgor
ICAgICAgICBvdXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDb21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IENvbW11dGF0aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZlCit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6
Q29tbXV0YXRpdml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5z
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1h
dGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBDb21wYXJpc29uTWF0Y2hlcgor
CitUZXN0TG9hZE5vdFplcm8xID0gQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorVGVzdExvYWRO
b3RaZXJvMiA9IEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorVGVzdE5vdFplcm8gPSBBbmQobGVm
dCwgcmlnaHQpCisKK1Rlc3RMb2FkWmVybzEgPSBFcXVhbChBbmQoTG9hZChhZGRyZXNzKSwgcmln
aHQpLCAkMCkKK1Rlc3RMb2FkWmVybzIgPSBFcXVhbChBbmQobGVmdCwgTG9hZChhZGRyZXNzKSks
ICQwKQorVGVzdFplcm8gPSBFcXVhbChBbmQobGVmdCwgcmlnaHQpLCAkMCkKKworTG9hZEVxdWFs
MSA9IEVxdWFsKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorTG9hZEVxdWFsMiA9IEVxdWFsKGxlZnQs
IExvYWQoYWRkcmVzcykpCitOb3QgPSBFcXVhbCh2YWx1ZSwgJDApCitFcXVhbCA9IEVxdWFsKGxl
ZnQsIHJpZ2h0KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVl
KCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBDb25zdDMyVmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0NvbnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6On5Db25zdDY0
VmFsdWUoKQoreworfQorCit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzQ29uc3Q2NFZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0NjRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVy
biBvcGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25zdDY0VmFsdWUoKTsKKyAgICAK
KyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0VmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2
YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29u
c3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdERvdWJsZVZhbHVlIDogcHVi
bGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNv
ZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQorICAgIAorICAgIH5Db25zdERv
dWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisK
KyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBkb3Vi
bGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0RG91YmxlLCBEb3VibGUsIG9y
aWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
ZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFsdWVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29u
dHJvbFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKQoreworfQorCit2b2lk
IENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobGlzdER1bXAobV9zdWNjZXNzb3JzKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJh
c2ljQmxvY2s7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnRyb2xWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgor
ICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2Ug
T29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisg
ICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNs
YXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3dpdGNoVmFs
dWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywg
Mj4gU3VjY2Vzc29yTGlzdDsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db250cm9sVmFsdWUo
KTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nl
c3NvcnMuc2l6ZSgpOyB9CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBG
cmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNj
ZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNz
b3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICAvLyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4p
CisgICAgeworICAgIH0KKworICAgIC8vIFN1YmNsYXNzZXMgd2lsbCBwb3B1bGF0ZSB0aGlzLgor
ICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgT29wcy4KKyAgICBDb250cm9s
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9wY29kZSA9PSBPb3BzKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgUmV0
dXJuLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIHJlc3VsdCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2Rl
LCBWb2lkLCBvcmlnaW4sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0g
UmV0dXJuKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KKyAgICBDb250cm9s
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0
IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7Cisg
ICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQodGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBVc2Ug
dGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRyb2xWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAg
ICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgeWVzLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIG5v
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBCcmFuY2gpOworICAgICAgICBtX3N1
Y2Nlc3NvcnMuYXBwZW5kKHllcyk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobm8pOwor
ICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNs
YXNzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5j
eSkKK3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgeworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6
Ok5vcm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3JtYWwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6CisgICAgICAgIG91dC5wcmludCgiUmFyZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVuY3lDbGFzc19oCisjZGVm
aW5lIEIzRnJlcXVlbmN5Q2xhc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50
OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBoeXBvdGhlc2lzIGFib3V0IHRoZSBmcmVx
dWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0LiBUaGlzIGlzCisgICAgLy8gdGhl
IGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJhc2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0
aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhpcyBjb250
cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hlZCBzdXBlciByYXJlbHkuIEl0J3MgdmFs
aWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlvbnMgdGhhdCBwdW5pc2ggUmFyZSBjb2Rl
LiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRpb25zIHdoZXJlIHlvdQorICAgIC8vIGhh
dmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJlcXVlbmN5IGNsYXNzIGZyb20gYSBtZXJn
aW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAgICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVy
IGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3JtYWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJl
Y2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNoIFJhcmUgY29kZSB2ZXJ5IGJhZGx5Lgor
ICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVuY3lDbGFzc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNk
ZWZpbmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVu
dGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
R2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCisjaW5jbHVk
ZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJl
LCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBBaXI6OkNvZGUgY29kZTsKKyAgICBnZW5lcmF0
ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgQWlyOjpnZW5lcmF0ZShjb2RlLCBqaXQpOwor
fQorCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFpcjo6Q29kZSYg
Y29kZSkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShw
cm9jZWR1cmUsICJpbml0aWFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAg
ICAgZGF0YUxvZygiSW5pdGlhbCBCMzpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7
CisgICAgfQorCisgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CisKKyAg
ICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJm
aW5hbCIpOworICAgIAorICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9n
KCJCMyBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7
CisgICAgfQorCisgICAgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzR2VuZXJhdGVfaAorI2RlZmluZSBCM0dlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9
CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2Us
IGFuZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBjb2RlIGJ5IGZpcnN0CisvLyBpbnRlcm5hbGx5
IGNvbnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFuZCB0aGVuIGdlbmVyYXRpbmcgdGhhdC4KK0pT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0NhbGxIZWxwZXJzJik7
CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2Us
IGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKKy8vIHRoZSBBaXIg
dG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6Z2VuZXJhdGUoKS4gTm90ZSB0aGF0IGFuIEFpcjo6
Q29kZSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0aGUKKy8vIEIzOjpQcm9jZWR1cmUsIHNvIHlv
dSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCMzo6UHJvY2VkdXJlIG91dGxpdmVzIHRoZSBBaXI6
OkNvZGUuCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgQWlyOjpDb2RlJik7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzR2VuZXJhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBC
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEEgZnJlcXVlbnRlZCBibG9jayBp
cyBhIHR1cGxlIG9mIEJhc2ljQmxvY2sqIGFuZCBGcmVxdWVuY3lDbGFzcy4gSXQncyB1c3VhbGx5
IHVzZWQgYXMgYQorLy8gc3VjY2Vzc29yIGVkZ2UuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2lj
QmxvY2s+CitjbGFzcyBHZW5lcmljRnJlcXVlbnRlZEJsb2NrIHsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG51bGxwdHIsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSA9IEZyZXF1ZW5jeUNsYXNzOjpOb3Jt
YWwpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX2ZyZXF1ZW5jeShmcmVx
dWVuY3kpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Js
b2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAgICYmIG1fZnJlcXVlbmN5ID09IG90aGVy
Lm1fZnJlcXVlbmN5OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
KCk7CisgICAgfQorCisgICAgQmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrOyB9CisgICAgQmFzaWNCbG9jayomIGJsb2NrKCkgeyByZXR1cm4gbV9ibG9jazsgfQorICAg
IEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAgICAgICAgICAg
b3V0LnByaW50KGZyZXF1ZW5jeSgpLCAiOiIpOworICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1
bXAobV9ibG9jaykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2Nr
OworICAgIEZyZXF1ZW5jeUNsYXNzIG1fZnJlcXVlbmN5OworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
SW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRl
eE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisjZGVmaW5l
IEIzSW5kZXhNYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBt
YXAgZm9yIGtleXMgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZv
ciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3Ug
ZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIG1hcHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2
ZSB2ZXJ5CisvLyBzcGFyc2UgaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZT4KK2NsYXNzIEluZGV4TWFw
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbmRleE1hcChzaXplX3Qgc2l6ZSA9IDApCisgICAg
eworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCByZXNp
emUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7Cisg
ICAgfQorCisgICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVmFs
dWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFZlY3RvcjxW
YWx1ZT4gbV92ZWN0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0luZGV4TWFwX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJbmRleFNldF9oCisKKyNpbmNsdWRlIDx3dGYvQml0
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNldCBmb3IgdGhpbmdzIHRoYXQgaGF2
ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mg
b25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFu
eSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeSBzcGFyc2UKKy8vIGlu
ZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1ZXMuCisKKy8vIElmIHlvdSB3YW50IGEg
c2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8gSW5kZXhTZXQ8QmFzaWNCbG9jaz4uIFNvLCBUID0g
QmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbmRleFNldCB7CitwdWJs
aWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFkZChUKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAg
ICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQqIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1f
c2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4
U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAg
ICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBj
b2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAg
ICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIu
bV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAg
ICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7Cisg
ICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0
aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZv
ciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJl
KTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52
YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0
aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxl
Y3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJh
YmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRW
ZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGlu
ZXMuaCIKKyNpbmNsdWRlICJCM0FkZHJlc3NNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29tbXV0YXRpdml0eS5oIgorI2luY2x1ZGUgIkIz
SW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSAiQjNMb3dlcmlu
Z01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQaGFz
ZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50
cy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1w
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2Ug
QWlyOworCituYW1lc3BhY2UgeworCitjbGFzcyBMb3dlclRvQWlyIHsKK3B1YmxpYzoKKyAgICBM
b3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQorICAgICAgICA6IHZh
bHVlVG9UbXAocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKKyAgICAgICAgLCBibG9ja1RvQmxv
Y2socHJvY2VkdXJlLnNpemUoKSkKKyAgICAgICAgLCB1c2VDb3VudHMocHJvY2VkdXJlKQorICAg
ICAgICAsIGFkZHJlc3NTZWxlY3RvcigqdGhpcykKKyAgICAgICAgLCBsb3dlcmluZ1NlbGVjdG9y
KCp0aGlzKQorICAgICAgICAsIHByb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgY29kZShj
b2RlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3Ig
KEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZSkKKyAgICAgICAgICAgIGJsb2NrVG9C
bG9ja1tibG9ja10gPSBjb2RlLmFkZEJsb2NrKGJsb2NrLT5mcmVxdWVuY3koKSk7CisKKyAgICAg
ICAgLy8gTG93ZXIgZGVmcyBiZWZvcmUgdXNlcyBvbiBhIGdsb2JhbCBsZXZlbC4gVGhpcyBpcyBh
IGdvb2QgaGV1cmlzdGljIHRvIGxvY2sgZG93biBhCisgICAgICAgIC8vIGhvaXN0ZWQgYWRkcmVz
cyBleHByZXNzaW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBpbnRvIHRoZSBsb29wLgor
ICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZS5ibG9ja3NJblBy
ZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCisgICAgICAgICAg
ICBpbnN0cy5yZXNpemUoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3Mg
YmxvY2tzIGluIHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3JlIGRlZnMuIFRoYXQn
cyB3aGF0IGFsbG93cyB1cworICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0dGVybnMgZWZmZWN0
aXZlbHkuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgaW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAg
cnVuTG93ZXJpbmdNYXRjaGVyKGN1cnJlbnRWYWx1ZSwgbG93ZXJpbmdTZWxlY3Rvcik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4g
aW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAg
ICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
aW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDog
aW5zdHNbaV0pCisgICAgICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVu
ZEluc3QoV1RGOjptb3ZlKGluc3QpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCisgICAg
ICAgICAgICBBU1NFUlQoYmxvY2stPnN1Y2Nlc3NvcnMoKS5zaXplKCkgPD0gMik7CisgICAgICAg
ICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxv
Y2tzKCkpCisgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygp
LmFwcGVuZChibG9ja1RvQmxvY2tbc3VjY2Vzc29yXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBUbXAgdG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1wID0gdmFsdWVU
b1RtcFt2YWx1ZV07CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1wID0gY29kZS5u
ZXdUbXAoaXNJbnQodmFsdWUtPnR5cGUoKSkgPyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgICAg
IHJldHVybiB0bXA7CisgICAgfQorCisgICAgLy8gVGhpcyBnaXZlcyB5b3UgdGhlIGFkZHJlc3Mg
b2YgdGhlIGdpdmVuIExvYWQgb3IgU3RvcmUuIElmIGl0J3Mgbm90IGEgTG9hZCBvciBTdG9yZSwg
dGhlbgorICAgIC8vIGl0IHJldHVybnMgQXJnKCkuCisgICAgQXJnIGFkZHIoVmFsdWUqIG1lbW9y
eVZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIHZhbHVlID0gbWVtb3J5VmFsdWUt
PmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIEFyZygpOworCisgICAgICAgIHJ1bkFkZHJlc3NNYXRjaGVyKHZhbHVlLT5jaGlsZHJlbigp
Lmxhc3QoKSwgYWRkcmVzc1NlbGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rv
ci5zZWxlY3RlZEFkZHJlc3Mud2l0aE9mZnNldCh2YWx1ZS0+b2Zmc2V0KCkpOworICAgIH0KKwor
ICAgIEFyZyBsb2FkQWRkcihWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxv
YWRWYWx1ZS0+b3Bjb2RlKCkgPT0gTG9hZCkKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGxvYWRW
YWx1ZSk7CisgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcgaW1tKFZhbHVl
KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBBcmc6OmltbSh2YWx1ZS0+YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIEFy
ZygpOworICAgIH0KKworICAgIEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoQXJnIHJlc3VsdCA9IGltbSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICByZXR1cm4gdG1wKHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxB
aXI6Ok9wY29kZSBvcGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11
dGF0aXZlPgorICAgIHZvaWQgYXBwZW5kQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkK
KyAgICB7CisgICAgICAgIFRtcCByZXN1bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFRocmVlLW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9w
IGEsIGIsIGMKKyAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAg
IGMgPSBhIE9wIGIKKworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0g
Q29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9w
ZXJhdGlvbiBjb3VsZCBoYXZlIGFuIGltbWVkaWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAg
IGlmIChpbW0obGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1t
KGxlZnQpLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGltbShyaWdodCkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0s
IEFyZzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0o
cmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVHdvLW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAg
ICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEK
KworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9w
ZXJhdGlvbiB0aGF0IGhhdmUgYSBmdXNlZCBsb2FkIG92ZXIgdGhyZWUKKyAgICAgICAgLy8gb3Bl
cmFuZCBmb3Jtcy4KKyAgICAgICAgCisgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11
dGF0aXZlKSB7CisgICAgICAgICAgICBBcmcgbGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAg
ICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpU
bXApKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVzZSB0aGUgcmlnaHQgTW92ZSBvcGNv
ZGUuIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCAzMi1iaXQgdHlwZXMsIHdlIHNob3VsZAorICAgICAg
ICAgICAgICAgIC8vIHVzZSBNb3ZlMzIuIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBEb3VibGVzLCB3
ZSBzaG91bGQgdXNlIE1vdmVEb3VibGUuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzMworICAgICAgICAgICAgICAgIGFwcGVu
ZChNb3ZlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIGxlZnRBZGRyLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFyZyByaWdodEFkZHIgPSBsb2FkQWRkcihyaWdo
dCk7CisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5raW5kKCksIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkciwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUs
IEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCB0bXAobGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQpOwor
ICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgIH0KKworICAg
IHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5
ID0gTm90Q29tbXV0YXRpdmU+CisgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBmYWlscyB0
byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGVmZmVjdHMgYmV0d2VlbiB0aGUgTG9hZCBhbmQgdGhl
IFN0b3JlIHRoYXQKKyAgICAgICAgLy8gY291bGQgY2xvYmJlciB0aGUgbG9hZGVkIHZhbHVlLiBX
ZSBuZWVkIHRvIGNoZWNrIHN1Y2ggdGhpbmdzIGJlY2F1c2Ugd2UgYXJlIGVmZmVjdGl2ZWx5Cisg
ICAgICAgIC8vIHNpbmtpbmcgdGhlIGxvYWQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzQKKyAgICAgICAgCisgICAgICAgIEFyZyBzdG9y
ZUFkZHIgPSBhZGRyKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwor
CisgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlOworICAgICAgICBpZiAoYWRkcihsZWZ0KSA9PSBz
dG9yZUFkZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gcmlnaHQ7CisgICAgICAgIGVsc2Ug
aWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUgJiYgYWRkcihyaWdodCkgPT0gc3RvcmVB
ZGRyKQorICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwg
QXJnOjpUbXAsIHN0b3JlQWRkci5raW5kKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFpcjo6T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9w
Y29kZSwgY3VycmVudFZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KSk7CisgICAgfQorICAgIAorICAgIEluZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFy
ZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1
ZSwgVG1wPiB2YWx1ZVRvVG1wOworICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJh
c2ljQmxvY2sqPiBibG9ja1RvQmxvY2s7CisKKyAgICBVc2VDb3VudHMgdXNlQ291bnRzOworCisg
ICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gaW5zdHM7CisKKyAgICBWYWx1ZSogY3VycmVudFZh
bHVlOworCisgICAgLy8gVGhlIGFkZHJlc3Mgc2VsZWN0b3Igd2lsbCBtYXRjaCBhbnkgcGF0dGVy
biB3aGVyZSB0aGUgaW5wdXQgb3BlcmFuZHMgYXJlIGF2YWlsYWJsZSBhcyBUbXBzLgorICAgIC8v
IEl0IGRvZXNuJ3QgY2FyZSBhYm91dCBzaGFyaW5nLiBJdCB3aWxsIGhhcHBpbHkgZW1pdCB0aGUg
c2FtZSBhZGRyZXNzIGV4cHJlc3Npb24gb3ZlciBhbmQgb3ZlcgorICAgIC8vIGFnYWluIHJlZ2Fy
ZGxlc3Mgb2YgdGhlIGV4cHJlc3Npb24ncyBjb21wbGV4aXR5LiBUaGlzIHdvcmtzIG91dCBmaW5l
LCBzaW5jZSBhdCB0aGUgbWFjaGluZQorICAgIC8vIGxldmVsLCBhZGRyZXNzIGV4cHJlc3Npb25z
IGFyZSBzdXBlciBjaGVhcC4gSG93ZXZlciwgdGhpcyBkb2VzIGhhdmUgYSBoYWNrIHRvIGF2b2lk
CisgICAgLy8gInVuaG9pc3RpbmciIGFkZHJlc3MgZXhwcmVzc2lvbnMuCisgICAgY2xhc3MgQWRk
cmVzc1NlbGVjdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFkZHJlc3NTZWxlY3RvcihMb3dl
clRvQWlyJiBsb3dlcikKKyAgICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBtYXRjaCBhbiBhZGRyZXNzIGV4cHJl
c3Npb24gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkCisgICAgICAgICAgICAvLyBleHBs
aWNpdGx5LgorICAgICAgICAgICAgcmV0dXJuICFsb3dlci52YWx1ZVRvVG1wW3Jvb3RdOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290TGF0ZShWYWx1ZSopIHsgfQorCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRJ
bnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobG93ZXIudmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhhcmd1
bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2Vw
dE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRz
KGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygp
IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisK
KyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDEoVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUs
IFZhbHVlKiBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG9nU2NhbGUtPmFzSW50
KCkgPCAwIHx8IGxvZ1NjYWxlLT5hc0ludCgpID4gMykKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KAorICAgICAg
ICAgICAgICAgIGxvd2VyLnRtcChiYXNlKSwgbG93ZXIudG1wKGluZGV4KSwgMSA8PCBsb2dTY2Fs
ZS0+YXNJbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgdHJ5QWRkU2hpZnQyKFZhbHVlKiBiYXNlLCBWYWx1ZSogaW5kZXgsIFZhbHVlKiBs
b2dTY2FsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRyeUFkZFNoaWZ0MShpbmRl
eCwgbG9nU2NhbGUsIGJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGQoVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJpZ2h0
LT5oYXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9kdWN0aW9uIGlzbid0
IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5jZSB3ZSBleHBlY3QKKyAgICAgICAgICAgICAgICAvLyBM
b2FkKEFkZChAeCwgQGNvbnN0MSksIG9mZnNldCA9IGNvbnN0MikgdG8gaGF2ZSBhbHJlYWR5IGJl
ZW4gc3RyZW5ndGgtcmVkdWNlZAorICAgICAgICAgICAgICAgIC8vIHRvIExvYWQoQHgsIG9mZnNl
dCA9IGNvbnN0MSArIGNvbnN0MikuCisgICAgICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0g
QXJnOjphZGRyKGxvd2VyLnRtcChsZWZ0KSwgcmlnaHQtPmFzSW50MzIoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbGVjdGVk
QWRkcmVzcyA9IEFyZzo6aW5kZXgobG93ZXIudG1wKGxlZnQpLCBsb3dlci50bXAocmlnaHQpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlE
aXJlY3QoKQorICAgICAgICB7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFk
ZHIobG93ZXIudG1wKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxvd2VyOworICAg
ICAgICBBcmcgc2VsZWN0ZWRBZGRyZXNzOworICAgIH07CisgICAgQWRkcmVzc1NlbGVjdG9yIGFk
ZHJlc3NTZWxlY3RvcjsKKworICAgIC8vIFRoaXMgd2lsbCBtYXRjaCBjb21wbGV4IG11bHRpLXZh
bHVlIGV4cHJlc3Npb25zLCBidXQgb25seSBpZiB0aGVyZSBpcyBubyBzaGFyaW5nLiBGb3IgZXhh
bXBsZSwKKyAgICAvLyBpdCB3b24ndCBtYXRjaCBhIExvYWQgdHdpY2UgYW5kIGNhdXNlIHRoZSBn
ZW5lcmF0ZWQgY29kZSB0byBkbyB0d28gbG9hZHMgd2hlbiB0aGUgb3JpZ2luYWwKKyAgICAvLyBj
b2RlIGp1c3QgZGlkIG9uZS4KKyAgICBjbGFzcyBMb3dlcmluZ1NlbGVjdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIExvd2VyaW5nU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIpCisgICAgICAg
ICAgICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChyb290LCAhbG93ZXIubG9ja2VkLmNvbnRhaW5zKHJvb3QpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290
TGF0ZShWYWx1ZSopIHsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUsIEFy
Z3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIG9uZSBv
ZiB0aGUgaW50ZXJuYWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4gd2Ug
ZG9uJ3Qgd2FudCB0byBjYXVzZQorICAgICAgICAgICAgLy8gaXQgdG8gYmUgcmVjb21wdXRlZCBh
Z2Fpbi4KKyAgICAgICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHJl
cXVpcmUgaW50ZXJuYWxzIHRvIGhhdmUgb25seSBvbmUgdXNlIC0gdXMuCisgICAgICAgICAgICBp
ZiAobG93ZXIudXNlQ291bnRzW3ZhbHVlXSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhh
cmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkg
eyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoVmFsdWUqIHZhbHVl
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dlci5s
b2NrZWQuYWRkKHZhbHVlKTsKKyAgICAgICAgICAgIGFjY2VwdEludGVybmFsc0xhdGUoYXJndW1l
bnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoKSB7
IH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQuY29udGFpbnMo
dmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wg
YWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1
bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5TG9hZChWYWx1ZSogYWRkcmVzcykKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsb3dlci5jdXJyZW50VmFsdWUtPnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQo
TW92ZTMyLCBsb3dlci5hZGRyKGFkZHJlc3MpLCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVl
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNlIEludDY0
OgorICAgICAgICAgICAgICAgIGlmIChpczY0Qml0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bG93ZXIuYXBwZW5kKE1vdmUsIGxvd2VyLmFkZHIoYWRkcmVzcyksIGxvd2VyLnRtcChsb3dlci5j
dXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNh
c2UgRG91YmxlOgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dl
ci5hZGRyKGFkZHJlc3MpLCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAg
ICAgICAgICAgICAgIGxvd2VyLmFwcGVuZEJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwg
cmlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFs
dWUqKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbG93ZXIudHJ5QXBw
ZW5kU3RvcmVCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5
cGVzIQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmVBbmRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQsIFZhbHVlKikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxv
d2VyLnRyeUFwcGVuZFN0b3JlQmluT3A8QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVN0b3JlKFZhbHVlKiB2YWx1ZSwgVmFs
dWUqKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUz
MiwgbG93ZXIudG1wKHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAg
ICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSkgeworICAgICAgICAgICAgICAgICAgICBsb3dlci5h
cHBlbmQoTW92ZSwgbG93ZXIudG1wKHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRG91Ymxl
OgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dlci50bXAodmFs
dWUpLCBsb3dlci5hZGRyKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUNvbnN0
MzIoKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgbG93ZXIuaW1t
KGxvd2VyLmN1cnJlbnRWYWx1ZSksIGxvd2VyLnRtcChsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlSZXR1
cm4oVmFsdWUqIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50
eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBjYXNlIEludDY0
OgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBsb3dlci5pbW1PclRtcCh2YWx1
ZSksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5k
KE1vdmVEb3VibGUsIGxvd2VyLnRtcCh2YWx1ZSksIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvd2VyLmFwcGVuZChS
ZXQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIExvd2VyVG9BaXImIGxvd2VyOworICAgIH07CisgICAgTG93ZXJpbmdTZWxlY3RvciBsb3dl
cmluZ1NlbGVjdG9yOworICAgIAorICAgIFByb2NlZHVyZSYgcHJvY2VkdXJlOworICAgIENvZGUm
IGNvZGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsb3dlclRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhh
c2VTY29wZShwcm9jZWR1cmUsICJsb3dlclRvQWlyIik7CisgICAgTG93ZXJUb0FpciBsb3dlclRv
QWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgbG93ZXJUb0Fpci5ydW4oKTsKK30KKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0xvd2VyVG9BaXJfaAorI2RlZmluZSBCM0xvd2VyVG9BaXJfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgbG93
ZXJzIHRoZSBjdXJyZW50IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKwordm9pZCBsb3dl
clRvQWlyKFByb2NlZHVyZSYsIEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0
dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdN
YXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJp
bmdNYXRjaGVyCisKKyMgVGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBz
dGFydGluZyBhdCB0aGUgdG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0
ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRv
IHRoaXMgbWF0Y2hlciBpcyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5j
ZSEKKworTG9hZCA9IExvYWQoYWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitT
dG9yZUFkZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmVBbmRM
b2FkID0gU3RvcmUoQWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFs
dWUsIGFkZHJlc3MpCisKK0NvbnN0MzIgPSBDb25zdDMyKCkKKworUmV0dXJuID0gUmV0dXJuKHZh
bHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzTWVtb3J5VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKK3sKK30KKwor
dm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5wcmludCgib2Zmc2V0ID0gIiwgbV9vZmZzZXQp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVt
b3J5VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEZJWE1FOiBBZGQgYWxpYXMg
YW5hbHlzaXMgdG8gdGhlc2UgYnkgYWxsb3dpbmcgdGhlIGNsaWVudCB0byBhc3NvY2lhdGUgYW4g
aW50ZWdlciByYW5nZSB0byB0aGUKKy8vIHZhbHVlLiBUd28gb3BlcmF0aW9ucyBtYXkgYWNjZXNz
IHRoZSBzYW1lIG1lbW9yeSBpZiB0aGVpciByYW5nZXMgb3ZlcmxhcHMuCisvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTM1CisKK2NsYXNzIE1lbW9yeVZhbHVl
IDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29k
ZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNl
IExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAg
ICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgY2Fz
ZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgY2FzZSBTdG9yZTE2OgorICAg
ICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1vcnlWYWx1ZSgpOworCisgICAgaW50MzJfdCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2Fk
IChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBh
IHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KKyAgICBN
ZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludDMyX3Qgb2Zm
c2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIHBv
aW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2Fk
MTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0
eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
TG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IERvdWJsZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAg
IGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAg
IGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlz
IGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgb3Bjb2RlID09IExvYWRGbG9hdCA/IERvdWJsZSA6
IEludDMyLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9h
ZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZT
OgorICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgorICAgIE1lbW9yeVZhbHVlKAor
ICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50
ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAg
ICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNh
c2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzTWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M09wY29kZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKQorewor
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBOb3A6CisgICAgICAgIG91dC5wcmludCgi
Tm9wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQu
cHJpbnQoIklkZW50aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0MzI6Cisg
ICAgICAgIG91dC5wcmludCgiQ29uc3QzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
b25zdDY0OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0NjQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgICAgIG91dC5wcmludCgiQ29uc3REb3VibGUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBvdXQucHJpbnQo
IlN0YWNrU2xvdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAg
ICAgICAgb3V0LnByaW50KCJBcmd1bWVudFJlZyIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIG91dC5wcmludCgiRnJhbWVQb2ludGVyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFkZDoKKyAgICAgICAgb3V0LnByaW50KCJBZGQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3ViOgorICAgICAgICBvdXQucHJpbnQoIlN1YiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNdWw6CisgICAgICAgIG91dC5wcmludCgiTXVsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERpdjoKKyAgICAgICAgb3V0LnByaW50KCJEaXYi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAgIG91dC5wcmlu
dCgiQ2hpbGxEaXYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTW9kOgorICAgICAgICBv
dXQucHJpbnQoIk1vZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRBbmQ6CisgICAg
ICAgIG91dC5wcmludCgiQml0QW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdE9y
OgorICAgICAgICBvdXQucHJpbnQoIkJpdE9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEJpdFhvcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRYb3IiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU2hsOgorICAgICAgICBvdXQucHJpbnQoIlNobCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBTU2hyOgorICAgICAgICBvdXQucHJpbnQoIlNTaHIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgWlNocjoKKyAgICAgICAgb3V0LnByaW50KCJaU2hyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFNFeHQ4OgorICAgICAgICBvdXQucHJpbnQoIlNFeHQ4Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0
MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDMyOgorICAgICAgICBvdXQucHJp
bnQoIlNFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAg
IG91dC5wcmludCgiWkV4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZSb3VuZDoK
KyAgICAgICAgb3V0LnByaW50KCJGUm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SVRvRDoKKyAgICAgICAgb3V0LnByaW50KCJJVG9EIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIERUb0kzMjoKKyAgICAgICAgb3V0LnByaW50KCJEVG9JMzIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTm90RXF1YWwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgIG91dC5wcmlu
dCgiTGVzc1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlclRoYW46Cisg
ICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTGVzc0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NFcXVhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiR3JlYXRl
ckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlOgorICAgICAgICBvdXQu
cHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJlbG93OgorICAgICAg
ICBvdXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlRXF1
YWw6CisgICAgICAgIG91dC5wcmludCgiQWJvdmVFcXVhbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkJlbG93RXF1YWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4
WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIG91dC5wcmlu
dCgiTG9hZDhTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQxNlo6CisgICAgICAg
IG91dC5wcmludCgiTG9hZDE2WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZT
OgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNlMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTG9hZEZsb2F0OgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGbG9hdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlOCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBvdXQucHJpbnQo
IlN0b3JlMTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAg
ICAgb3V0LnByaW50KCJTdG9yZUZsb2F0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
b3JlOgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENDYWxsOgorICAgICAgICBvdXQucHJpbnQoIkNDYWxsIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFBhdGNocG9pbnQ6CisgICAgICAgIG91dC5wcmludCgiUGF0Y2hwb2ludCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgb3V0LnByaW50KCJD
aGVja0FkZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAg
b3V0LnByaW50KCJDaGVja1N1YiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja011
bDoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja011bCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDaGVjazoKKyAgICAgICAgb3V0LnByaW50KCJDaGVjayIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBvdXQucHJpbnQoIlVwc2lsb24iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgUGhpOgorICAgICAgICBvdXQucHJpbnQoIlBoaSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBKdW1wOgorICAgICAgICBvdXQucHJpbnQoIkp1bXAiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBvdXQucHJpbnQoIkJy
YW5jaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgIG91dC5w
cmludCgiU3dpdGNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJldHVybjoKKyAgICAg
ICAgb3V0LnByaW50KCJSZXR1cm4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT29wczoK
KyAgICAgICAgb3V0LnByaW50KCJPb3BzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNP
cGNvZGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDog
aW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZvciB3
aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAgLy8g
UG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElk
ZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMu
IENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAg
IC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29u
c3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2
NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRo
aXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2Fy
ZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBp
bnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAg
ICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3Rh
Y2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMg
dmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVn
YXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21w
aWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0
aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmlu
ZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBh
IGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBU
aGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3Ig
RG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUg
cG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0
IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZl
YXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5
IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNp
YyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAg
ICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIs
CisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4K
KyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2Vy
IG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2Ug
SlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhv
ciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1
Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4
dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwK
KyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3Vu
ZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAg
IC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAv
LyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJl
dHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFs
KHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdy
ZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJ
bnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAg
ICBCZWxvdywKKyAgICBBYm92ZUVxdWFsLAorICAgIEJlbG93RXF1YWwsCisKKyAgICAvLyBNZW1v
cnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBsb2FkZWQgdHlw
ZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHJldHVybiBJbnQzMjoKKyAg
ICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlosCisgICAgTG9hZDE2UywKKyAgICAv
LyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9hdCwKKyAgICAvLyBUaGlzIHJldHVy
biB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwKKworICAgIC8vIE1lbW9y
eSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBpcyBzdG9yZWQuIFRoZXNl
IHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIEludDMyIHZhbHVlOgorICAg
IFN0b3JlOCwKKyAgICBTdG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMgYSBEb3VibGUgdmFsdWU6
CisgICAgU3RvcmVGbG9hdCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9y
IEludDMyLCBJbnQ2NCwgYW5kIERvdWJsZToKKyAgICBTdG9yZSwKKworICAgIC8vIFRoaXMgaXMg
YSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5c3RlbSBDIGNh
bGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJndW1lbnRzIGFy
ZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxsLAorCisgICAgLy8gVGhp
cyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNzLiBUaGlzIGlz
IHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25seSBlbWl0cyBj
b2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRv
IGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2ttYXAgYWxvbmcg
d2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBtdXN0IGJlIHBh
c3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNrbWFwIGFyZ3Vt
ZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVzdAorICAgIC8v
IHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9tIHRoZSB0b3Ag
b2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFjay4KKyAgICBQ
YXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xh
c3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBnZW5lcmF0aW9uCisgICAg
Ly8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNvbWUgY29kZSBhZnRlciB0
aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAgICAvLyBmcm9tIHRoZSBj
aGVjaywgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxzbyBnZXQgdG8gc3VwcGx5
IGEgc3RhY2ttYXAuIE5vdGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90IGFsbG93ZWQgdG8ganVt
cCBiYWNrIGludG8gdGhlIG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNsb3cgcGF0aCwgc2luY2Ug
dGhlIGNvbXBpbGVyCisgICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgZXhlY3V0aW9uIG9mIHRo
ZXNlIGluc3RydWN0aW9ucyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRuJ3QgaGFwcGVuLiBGb3IK
KyAgICAvLyBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQnczoKKyAgICAvLworICAg
IC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0FkZCh4LCB5KQorICAgIC8v
CisgICAgLy8gVGhlbiBpdCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRvOgorICAgIC8vCisgICAg
Ly8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5KGEpCisgICAgLy8KKyAg
ICAvLyBUaGlzIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxiYWNrcyB1c2VkIGJ5IHRo
ZSB0d28gQ2hlY2tBZGRzLiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAorICAgIC8vIGNhbGxiYWNr
cy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhleSBhcmUgZGlm
ZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IENoZWNr
QWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZlIHBvc3NpYmx5
IHRha2VuIHNsb3cKKyAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQgQ2hlY2tBZGQn
cyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIENoZWNrQWRkLAorICAgIENoZWNrU3ViLAor
ICAgIENoZWNrTXVsLAorCisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBVc2UgdGhlIENo
ZWNrVmFsdWUgY2xhc3MuIExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMgaGFzIGEKKyAg
ICAvLyBzdGFja21hcCB3aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0YWtlcyBhbiBJ
bnQzMiBhcmd1bWVudCB0aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgKKyAgICAvLyBmdWxsIGJy
YW5jaCBmdXNpb24gaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBBIHRydWUgdmFsdWUganVt
cHMgdG8gdGhlIGdlbmVyYXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgorICAgIENoZWNrLAorCisg
ICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAgIFVwc2lsb24s
IC8vIFRoaXMgdXNlcyB0aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAgIFBoaSwKKworICAgIC8v
IEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAorICAgIAorICAg
IC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIEJyYW5j
aGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIENvbnRyb2xWYWx1ZSBj
bGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUgc3VjY2Vzc29y
LgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBlaXRoZXIgSW50
MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3aXRjaCwKKwor
ICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0aGVpciBy
ZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlwZS4gVXNl
cyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIFJldHVybiwKKworICAgIC8vIFRoaXMgaXMg
YSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUuIFVz
ZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9OworCitpbmxpbmUgYm9vbCBp
c0NoZWNrTWF0aChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
Y2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsK
KworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcmlnaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3UG9pbnRlciht
X2RhdGEpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIg
Y2FuIGNob29zZSB0byBwdXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIz
IHdpbGwgYmUgYWJsZSB0bworLy8gYWNjb3VudCwgZG93biB0byB0aGUgbWFjaGluZSBjb2RlLCB3
aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNwb25kcyB0byB3aGljaCBvcmlnaW4uIEIzCisvLyB0cmFu
c2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQncyBhbiBlcnJv
ciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9wcyBPcmlnaW5z
IG9yIGxpZXMgYWJvdXQgdGhlbS4KK2NsYXNzIE9yaWdpbiB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRhdGEgPSBudWxscHRyKQorICAgICAgICA6IG1fZGF0YShk
YXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcmln
aW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2lu
dFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNp
bmcgbmFtZXNwYWNlIEFpcjsKKworUGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFs
KCkKK3sKK30KKworUGF0Y2hwb2ludFNwZWNpYWw6On5QYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9
CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcoCisgICAgSW5zdCYgaW5zdCwg
Y29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQorewor
ICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpIHsKKyAgICAgICAgZm9yRWFjaEFy
Z0ltcGwoMCwgMSwgaW5zdCwgY2FsbGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5cGUo
KSk7CisgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMiwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29s
IFBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3Qu
b3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDEs
IGluc3QpOworCisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGluc3QuYXJnc1sxXS5raW5kKCkgIT0gQXJnOjpUbXApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc1R5cGUoaW5zdC5vcmlnaW4t
PmFpclR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBpc1ZhbGlk
SW1wbCgwLCAyLCBpbnN0KTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6YWRtaXRzU3Rh
Y2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgaWYgKGluc3Qub3JpZ2lu
LT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAxLCBp
bnN0LCBhcmdJbmRleCk7CisKKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAyLCBpbnN0LCBhcmdJbmRl
eCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUo
CisgICAgSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBj
b250ZXh0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFw
KiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgIEFTU0VSVChzdGFja21hcCk7CisK
KyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKyAg
ICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQorICAgICAgICByZXBzLmFwcGVuZChy
ZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29mZnNldCsrXSkpOworICAgIGFwcGVu
ZFJlcHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgU3RhY2tt
YXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOwor
ICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAgIHBhcmFtcy5yZXBzID0gcmVwczsK
KyAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisK
KyAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisKKyAgICByZXR1
cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmR1
bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJQYXRjaHBv
aW50Iik7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiTG93ZXJlZCBCMzo6UGF0Y2hwb2lu
dFZhbHVlLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50
U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Bh
dGNocG9pbnRTcGVjaWFsX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzcGVjaWFsIHRoYXQgcmVj
b2duaXplcyB0aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQYXRjaHBvaW50OiBWb2lkIGFuZCBh
bmQgbm9uLVZvaWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0aGUgc3ludGF4IG9mIHRoZSBBaXIg
UGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCBhcmdz
Li4uCisvLworLy8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUgbG93ZXJlZCBhcmd1bWVudHMgdG8g
dGhlIFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBub24tVm9pZCBjYXNlCisvLyB3ZSB3
aWxsIGhhdmU6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCByZXN1bHQsIGFyZ3MuLi4K
KworY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1
YmxpYzoKKyAgICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAgIHZpcnR1YWwgflBhdGNocG9pbnRT
cGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0Jiwg
Y29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRl
OworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0
c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8v
IE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5j
aCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhl
IHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdl
bmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQm
KSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBv
aW50VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQ
cmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50
VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNr
bWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1BhdGNocG9pbnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21h
cC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2lu
dFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+
UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5j
eUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBl
LCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNo
cG9pbnRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2Nv
cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VT
Y29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRh
dGUuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VTY29w
ZTo6UGhhc2VTY29wZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkKKyAg
ICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlm
IChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGJlZm9y
ZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisK
KyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3Jl
ID0gdG9DU3RyaW5nKHByb2NlZHVyZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkK
K3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlk
YXRlKG1fcHJvY2VkdXJlLCBtX25hbWUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1BoYXNlU2NvcGVfaAorI2RlZmluZSBCM1BoYXNlU2NvcGVfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShQcm9jZWR1cmUm
LCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFs
aWRhdGlvbgorCitwcml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29u
c3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKKyNp
bmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQorCitQcm9jZWR1cmU6On5Qcm9jZWR1
cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmcmVx
dWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNp
Y0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVz
dWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQor
ICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworVmVjdG9yPEJhc2ljQmxv
Y2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gcmVzdWx0OworICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3Qu
cHVzaChhdCgwKSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9w
KCkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRl
cigpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgUG9zdE9yZGVyQmxv
Y2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGF0KDApKTsKKyAgICB3aGls
ZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRj
aCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlByZToKKyAgICAgICAg
ICAgIHdvcmtsaXN0LnB1c2hQb3N0KGl0ZW0ubm9kZSk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBpdGVtLm5vZGUtPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgICAg
ICB3b3JrbGlzdC5wdXNoKGl0ZW0ubm9kZS0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UG9zdDoKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy9FTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gK
KyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IlB1cmVOYU4uaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFBy
b2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJvY2VkdXJlKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBy
b2NlZHVyZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Qcm9jZWR1cmUoKTsKKworICAgIEpT
X0VYUE9SVF9QUklWQVRFIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQ
TmFOKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5n
ZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRy
KQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIGl0ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkK
KyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9p
bmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJh
c2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3By
b2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2lu
ZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1cmUt
PnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRl
eCsrOworICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAg
ICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgc2l6ZSgpKTsgfQorCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblByZU9yZGVy
KCk7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRlcigpOworCisgICAg
Y2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xs
ZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3Byb2Nl
ZHVyZShwcm9jZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0
ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0
b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAg
ICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZh
bHVlKiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX3Byb2NlZHVyZS0+bV92YWx1ZXNbbV9pbmRleF0uZ2V0KCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAg
fQorCisgICAgICAgIHByaXZhdGU6CisKKyAgICAgICAgICAgIGNvbnN0IFByb2NlZHVyZSogbV9w
cm9jZWR1cmU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisg
ICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1
cmUsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KG1fcHJvY2VkdXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisKKyAgICAgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUo
KTsgfQorICAgICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvY2VkdXJlLm1fdmFsdWVzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBWYWx1ZSogb3BlcmF0
b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7Cisg
ICAgfTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gVmFs
dWVzQ29sbGVjdGlvbigqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFZhbHVlPj4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlSW5saW5lc19oCisjZGVm
aW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5l
dyBWYWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5
cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUo
dmFsdWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RL
aW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBT
dGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTdGFj
a1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAgb3V0
LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90S2luZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xv
dEtpbmRfaAorI2RlZmluZSBCM1N0YWNrU2xvdEtpbmRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgU3RhY2tTbG90
S2luZCA6IHVpbnQ4X3QgeworICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNsb3QgbmVlZHMgdG8gYmUg
a2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhlcnMgYmVjYXVzZSB3ZSBpbnRlbmQgdG8gZXNjYXBl
CisgICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mgbm90IG9idmlvdXMuIFRoaXMgaGFwcGVucyB3aGVu
IHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRyZXNzIG9mIGEgc3RhY2sKKyAgICAvLyBzbG90Lgor
ICAgIExvY2tlZCwKKworICAgIC8vIFRoZXNlIHN0YWNrIHNsb3RzIGNvdWxkIHNoYXJlIHNwYWNl
IHdpdGggb3RoZXIgc3RhY2sgc2xvdHMsIHByb3ZpZGVkIHRoYXQgdGhleSBhcmVuJ3QgbGl2ZQor
ICAgIC8vIGF0IHRoZSBzYW1lIHRpbWUuIFRoZSBjb21waWxlciBzdGlsbCBoYXMgdG8gZG8gZXNj
YXBlIGFuYWx5c2lzLCBzaW5jZSB0aGVzZSBjYW4gYmUgZXNjYXBlZAorICAgIC8vIGV4cGxpY2l0
bHkgaW4gSVIuCisgICAgQW5vbnltb3VzCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpTdGFja1Nsb3RLaW5kKTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFj
a1Nsb3RLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90VmFsdWU6On5T
dGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1f
Ynl0ZVNpemUsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
U3RhY2tTbG90S2luZC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFt
ZXNwYWNlIEFpciB7CitjbGFzcyBTdGFja1Nsb3Q7Cit9IC8vIG5hbWVzcGFjZSBBaXIKKworY2xh
c3MgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN0YWNrU2xvdDsg
fQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUg
ZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBwaW4gc3RhY2sgc2xvdHMu
IFVzZSB0aGUKKyAgICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQuCisgICAgaW50cHRyX3Qgb2Zm
c2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUgc3RhY2sgc2xvdCBpcyBMb2Nr
ZWQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCisgICAgeworICAg
ICAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCB1
bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXJUeXBlKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVT
aXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0
RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAg
U3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit2b2lkIFN0YWNrbWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KAorICAgICAgICAie29wYXF1ZSA9ICIsIFJhd1BvaW50ZXIobV9vcGFxdWUpLCAi
LCByZXBzID0gIiwgbGlzdER1bXAobV9yZXBzKSwKKyAgICAgICAgIiwgZ2VuZXJhdG9yID0gIiwg
UmF3UG9pbnRlcihtX2dlbmVyYXRvci5nZXQoKSksICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJl
cmVkLAorICAgICAgICAiLCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAifSIp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUg
IkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3Rm
L1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IENoZWNrU3BlY2lhbDsKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitj
bGFzcyBTdGFja21hcCB7CitwdWJsaWM6CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgewor
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBWYWx1ZSBjb250YWluaW5nIHRoZSBzdGFja21hcC4KKyAg
ICAgICAgVmFsdWUqIHZhbHVlOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgor
ICAgICAgICBTdGFja21hcCogc3RhY2ttYXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3Ug
dGhlIGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAg
ICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRo
ZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnM7CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24o
Q0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hh
cmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFw
KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRp
ZnkgdGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5n
IFZhbHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkg
ZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8v
IGFsbG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sg
dG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVz
aW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1l
dGVyKQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZv
aWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5p
ZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAg
IHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3Bh
cXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1
ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9
CisKKyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0
aGlzIFN0YWNrbWFwLiBJbiBjYXNlIG9mIGEgUGF0Y2hwb2ludCB0aGF0CisgICAgLy8gcmV0dXJu
cyBhIHZhbHVlLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gSW4gYWxs
IG90aGVyIGNhc2VzLCBpbmRleCB6ZXJvIHJlZmVycworICAgIC8vIHRvIHRoZSBmaXJzdCBhcmd1
bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90IGNvbnN0cmFp
bmFibGUuIEZvciBleGFtcGxlLAorICAgIC8vIGluIGEgQ2hlY2tBZGQgdmFsdWUsIGl0IHdvdWxk
IGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEgQ2hlY2sgdmFs
dWUsIGl0CisgICAgLy8gd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGV4IDAuIEJ1
dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBjYW4KKyAgICAv
LyBkZXBlbmQgb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmlsbGVkIGluLgor
ICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQor
ICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXplKCkpCisgICAgICAgICAg
ICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhdID0gcmVwOwor
ICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0KQorICAgIHsK
KyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICBjb25zdCBSZWdp
c3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKworICAg
IHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcikKKyAgICB7Cisg
ICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxHZW5l
cmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNp
YWw7CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRTcGVjaWFsOworICAgIGZyaWVuZCBjbGFz
cyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9vcGFxdWUgeyBudWxscHRyIH07
CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9n
ZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhlciBkdXBsaWNhdGVk
IGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJnZSB0aGUgdXNlZCBy
ZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNT
dGFja21hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6
U3RhY2ttYXBTcGVjaWFsKCkKK3sKK30KKworU3RhY2ttYXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVj
aWFsKCkKK3sKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMo
SW5zdCYgaW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFs
dWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUt
PnN0YWNrbWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBT
dGFja21hcFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVz
ZWQKKyAgICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJl
bnRseSB3b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8g
b3IgdGhpbmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBw
cm9ibGVtLgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVy
cyk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJl
cmVkUmVncyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOwor
ICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgcmV0dXJu
IHN0YWNrbWFwLT5jbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVh
Y2hBcmdJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUln
bm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpF
YWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9y
aWdpbjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5l
ZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7Cisg
ICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsK
KyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzID09IHZhbHVl
LT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsg
KytpKSB7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdz
XTsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWly
QXJncyk7CisKKyAgICAgICAgY2FsbGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNU
eXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjpp
c1ZhbGlkSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGlu
c3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhh
cHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdz
KTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0Fy
Z3MpOworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAg
ICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgLy8gRm9yIHRoZSBJbnN0IHRvIGJlIHZhbGlkLCBp
dCBuZWVkcyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChp
bnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFsdWUtPmNoaWxkcmVuKCku
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gUmVnYXJkbGVzcyBvZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyBy
ZXF1aXJlbWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4gRm9yCisgICAgLy8gZXhhbXBsZSwgeW91
IGNhbid0IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2Ug
Y29uZGl0aW9ucyBhcyB3ZWxsIGFzIHRoZQorICAgIC8vIGFyZ3VtZW50IHR5cGVzLgorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJn
czsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdu
b3JlZEIzQXJncyk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVk
QWlyQXJnc107CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgY2FzZSBB
cmc6OkltbTY0OgorICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgIGNhc2UgQXJnOjpD
YWxsQXJnOgorICAgICAgICAgICAgYnJlYWs7IC8vIE9LCisgICAgICAgIGNhc2UgQXJnOjpBZGRy
OgorICAgICAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSAmJgorICAgICAgICAgICAgICAgIGFyZy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0g
QXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpOworCisgICAgICAgIGlmICghYXJnLmlz
VHlwZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBU
aGUgbnVtYmVyIG9mIGNvbnN0cmFpbnRzIGhhcyB0byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51
bWJlciBvZiBCMyBjaGlsZHJlbi4KKyAgICBBU1NFUlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkg
PD0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGlj
aXRseSBzdXBwbGllZCBjb25zdHJhaW50cy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25v
cmVkQjNBcmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXplKCk7ICsraSkgeworICAgICAgICBW
YWx1ZVJlcCYgcmVwID0gc3RhY2ttYXAtPm1fcmVwc1tpXTsKKyAgICAgICAgQXJnJiBhcmcgPSBp
bnN0LmFyZ3NbaSAtIG51bUlnbm9yZWRCM0FyZ3MgKyBudW1JZ25vcmVkQWlyQXJnc107CisKKyAg
ICAgICAgc3dpdGNoIChyZXAua2luZCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToK
KyAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgdmVyaWZpZWQgdGhpcyBhYm92ZS4KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAg
ICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAg
ICAgICAgIGlmIChhcmcgIT0gVG1wKHJlcC5yZWcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNr
OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlv
bi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAgICBpZiAo
YXJnICE9IEFyZzo6Y2FsbEFyZyhyZXAub2Zmc2V0RnJvbVNQKCkpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVw
OjpDb25zdGFudDoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVw
cmVzZW50YXRpb24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdu
b3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwg
dW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47Cisg
ICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICB1bnNpZ25l
ZCBzdGFja21hcEFyZ0luZGV4ID0gYXJnSW5kZXggLSBudW1JZ25vcmVkQWlyQXJncyArIG51bUln
bm9yZWRCM0FyZ3M7CisKKyAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSBzdGFja21hcC0+bV9y
ZXBzLnNpemUoKSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNv
bnN0cmFpbnQuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBv
bmx5IGFkbWl0IHN0YWNrIGZvciBBbnkncywgc2luY2UgU3RhY2sgaXMgbm90IGEgdmFsaWQgaW5w
dXQgY29uc3RyYWludCwgYW5kIFN0YWNrQXJndW1lbnQKKyAgICAvLyB0cmFuc2xhdGVzIHRvIGEg
Q2FsbEFyZyBpbiBBaXIuCisgICAgaWYgKHN0YWNrbWFwLT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRl
eF0ua2luZCgpID09IFZhbHVlUmVwOjpBbnkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwo
CisgICAgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdz
LCBJbnN0JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkp
OworfQorCitWYWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBj
b25zdCBBcmcmIGFyZykKK3sKKyAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICBjYXNlIEFy
Zzo6VG1wOgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnJlZyhhcmcucmVnKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAg
ICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFudChhcmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBpZiAoYXJnLmJhc2UoKSA9PSBUbXAoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpz
dGFjayhhcmcub2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoYXJnLmJhc2UoKSA9PSBUbXAoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBWYWx1
ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJl
cCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21h
cFNwZWNpYWxfaAorI2RlZmluZSBCM1N0YWNrbWFwU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSBBaXIgeyBjbGFz
cyBDb2RlOyB9CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWFscyB0aGF0IGhh
dmUgc3RhY2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBh
c2tpbmcgZm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBu
ZWVkIHRvIGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNrbWFwLgorCitjbGFz
cyBTdGFja21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBT
dGFja21hcFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJv
dGVjdGVkOgorICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBS
ZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2Ji
ZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBk
b2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCku
IFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0
LgorCisgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3Jl
ZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYs
IGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBi
b29sIGlzVmFsaWRJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNp
Z25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBh
ZG1pdHNTdGFja0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2ln
bmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJ
bmRleCk7CisKKyAgICAvLyBBcHBlbmRzIHRoZSByZXBzIGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0
YXJ0aW5nIHdpdGggbnVtSWdub3JlZEFyZ3MsIHRvIHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgdm9p
ZCBhcHBlbmRSZXBzSW1wbChBaXI6OkdlbmVyYXRpb25Db250ZXh0JiwgdW5zaWduZWQgbnVtSWdu
b3JlZEFyZ3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxWYWx1ZVJlcD4mKTsKKworICAgIHN0YXRpYyBW
YWx1ZVJlcCByZXBGb3JBcmcoQWlyOjpDb2RlJiwgY29uc3QgQWlyOjpBcmcmKTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisjZGVmaW5lIEIzU3Vj
Y2Vzc29yQ29sbGVjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIGdlbmVyaWMgd3JhcHBlciBhcm91bmQg
bGlzdHMgb2YgZnJlcXVlbnRlZCBibG9ja3MsIHdoaWNoIGdpdmVzIHlvdSBqdXN0IHRoZSBibG9j
a3MuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2ssIHR5cGVuYW1lIFN1Y2Nlc3Nvckxp
c3Q+CitjbGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JD
b2xsZWN0aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisg
ICAgeworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNp
emUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayogb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJh
c2ljQmxvY2sqJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9
CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigp
CisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3Nv
ckNvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKCZjb2xsZWN0aW9uKSAvLyBjb25zdCBpcyBzdHVwaWQgYW55d2F5LgorICAgICAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBC
YXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAg
ICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworcHJpdmF0ZToKKyAgICBTdWNjZXNzb3JMaXN0JiBt
X2xpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2FzZVZhbHVlLCAiLT4iLCBt
X3RhcmdldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoQ2FzZV9oCisjZGVmaW5lIEIz
U3dpdGNoQ2FzZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVu
dGVkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQor
CisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUoY2FzZVZhbHVlKQorICAgICAgICAsIG1f
dGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0KKworICAgIGludDY0X3QgY2FzZVZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgdGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmJsb2NrKCk7IH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fY2Fz
ZVZhbHVlOworICAgIEZyZXF1ZW50ZWRCbG9jayBtX3RhcmdldDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
U3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7
Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgp
Cit7CisgICAgRnJlcXVlbnRlZEJsb2NrIHJlc3VsdEJsb2NrID0gbV9zdWNjZXNzb3JzW2luZGV4
XTsKKyAgICBpbnQ2NF90IHJlc3VsdFZhbHVlID0gbV92YWx1ZXNbaW5kZXhdOworICAgIG1fc3Vj
Y2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5y
ZW1vdmVMYXN0KCk7CisgICAgbV92YWx1ZXNbaW5kZXhdID0gbV92YWx1ZXMubGFzdCgpOworICAg
IG1fdmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gU3dpdGNoQ2FzZShyZXN1bHRWYWx1
ZSwgcmVzdWx0QmxvY2spOworfQorCit2b2lkIFN3aXRjaFZhbHVlOjphcHBlbmRDYXNlKGNvbnN0
IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChtX3N1
Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3NvcnNbbV9zdWNjZXNzb3JzLnNpemUoKSAt
IDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoc3dpdGNoQ2Fz
ZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmR1bXBNZXRhKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBkZXN0cnVjdGl2ZWx5IG92ZXJyaWRlcyBD
b250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91dC5wcmludChsaXN0RHVtcCgqdGhpcyks
ICIsIGZhbGxUaHJvdWdoID0gIiwgZmFsbFRocm91Z2goKSk7Cit9CisKK1N3aXRjaFZhbHVlOjpT
d2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRnJlcXVlbnRl
ZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xWYWx1ZShpbmRleCwgU3dpdGNoLCBW
b2lkLCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hW
YWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUu
aCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVibGljIENvbnRyb2xWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNv
ZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFsdWUoKTsKKworICAgIC8vIG51bUNhc2VW
YWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgorICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1
ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKworICAgIC8vIFRoZSBzdWNj
ZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2
NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5k
ZXhdOyB9CisgICAgCisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEZyZXF1ZW50ZWRCbG9jayBmYWxsVGhyb3Vn
aCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKyAgICBGcmVxdWVudGVk
QmxvY2smIGZhbGxUaHJvdWdoKCkgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorCisg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51bUNhc2VWYWx1ZXMoKTsgfQorICAg
IFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU3dpdGNoQ2FzZShjYXNlVmFsdWUoaW5kZXgpLCBzdWNjZXNzb3IoaW5kZXgpKTsKKyAgICB9
CisgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7
CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fc3dpdGNo
KG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3dpdGNoVmFsdWUmIHN3aXRjaFZhbHVlLCB1bnNp
Z25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2goJnN3aXRjaFZhbHVlKQorICAgICAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBT
d2l0Y2hDYXNlIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3N3
aXRjaC0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIGNvbnN0IFN3aXRjaFZhbHVlKiBtX3N3aXRjaDsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICB9OworCisgICAgdHlwZWRlZiBpdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAg
IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9Cisg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7
IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEg
Yml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0
aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZp
c2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUg
b3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVk
LgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lk
IGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJv
dWdoKTsKKworICAgIFZlY3RvcjxpbnQ2NF90PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
U3dpdGNoVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQoIlZvaWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIG91dC5wcmludCgiSW50NjQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICBvdXQucHJpbnQo
IkRvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzVHlwZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgeworICAgIFZv
aWQsCisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxpbmUgYm9v
bCBpc0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9
PSBJbnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7CisgICAgcmV0
dXJuIHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyVHlwZSgpCit7Cisg
ICAgaWYgKGlzMzJCaXQoKSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVybiBJbnQ2
NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVcHNpbG9uVmFs
dWU6On5VcHNpbG9uVmFsdWUoKQoreworfQorCit2b2lkIFVwc2lsb25WYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4iLCBtX3BoaS0+aW5k
ZXgoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXBzaWxvblZhbHVlX2gKKyNkZWZp
bmUgQjNVcHNpbG9uVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFVwc2ls
b25WYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0
cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gVXBzaWxvbjsgfQorCisgICAgflVw
c2lsb25WYWx1ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhpOyB9
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAg
ICBVcHNpbG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1
ZSwgVmFsdWUqIHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGhpLCBWb2lkLCBvcmlnaW4s
IHZhbHVlKQorICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1
ZS0+dHlwZSgpID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisKKyAgICBWYWx1ZSogbV9waGk7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworVXNlQ291bnRzOjpVc2VDb3VudHMoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAg
OiBtX2NvdW50cyhwcm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQoreworICAgIGZvciAoVmFsdWUq
IHZhbHVlIDogcHJvY2VkdXJlLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoVmFsdWUqIGNoaWxk
IDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICBtX2NvdW50c1tjaGlsZF0rKzsKKyAg
ICB9Cit9CisKK1VzZUNvdW50czo6flVzZUNvdW50cygpCit7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
VXNlQ291bnRzX2gKKyNkZWZpbmUgQjNVc2VDb3VudHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFVz
ZUNvdW50cyB7CitwdWJsaWM6CisgICAgVXNlQ291bnRzKFByb2NlZHVyZSYpOworICAgIH5Vc2VD
b3VudHMoKTsKKworICAgIHVuc2lnbmVkIG9wZXJhdG9yW10oVmFsdWUqIHZhbHVlKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY291bnRzW3ZhbHVlXTsKKyAgICB9Citwcml2YXRlOgor
ICAgIEluZGV4TWFwPFZhbHVlLCB1bnNpZ25lZD4gbV9jb3VudHM7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1VzZUNvdW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1Zh
bHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1N0
cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRh
dGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0
IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9wcm9jZWR1
cmUocHJvY2VkdXJlKQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJl
Zm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0
aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19M
SU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdl
KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAg
ICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzOworICAgICAgICBIYXNoU2V0PFZhbHVlKj4g
dmFsdWVJblByb2M7CisgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluQmxvY2s7CisKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2VkdXJlKSB7CisgICAgICAgICAg
ICBibG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJs
b2NrKQorICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQodmFsdWUpOworICAgICAgICB9
CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2NlZHVyZS52YWx1ZXMoKSkKKyAg
ICAgICAgICAgIHZhbHVlSW5Qcm9jLmFkZCh2YWx1ZSk7CisKKyAgICAgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiB2YWx1ZUluUHJvYykKKyAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5CbG9jay5j
b250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIGZvciAoVmFsdWUqIHZh
bHVlIDogdmFsdWVJbkJsb2NrKQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29u
dGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOworCisgICAgICAgIGZvciAoVmFsdWUqIHZh
bHVlIDogdmFsdWVJblByb2MpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFs
dWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29u
dGFpbnMoY2hpbGQpLCAoIkF0ICIsICp2YWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAoY2hpbGQpKSk7
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7
CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNz
b3JCbG9ja3MoKSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAg
ICAgICBibG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJBdCAiLCAqYmxvY2ssICItPiIsIHBv
aW50ZXJEdW1wKHN1Y2Nlc3NvcikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IEV4cGFuZCB0aGlzIHZhbGlkYXRpb24gcGhhc2UuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0ODAKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisg
ICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciog
ZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdl
KQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAg
ICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJC
MyBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwg
Y29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlm
IChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hl
biwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBp
ZiAobV9kdW1wQmVmb3JlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV93aGVu
LCAiOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0K
KyAgICAgICAgZGF0YUxvZygiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFM
b2cobV9wcm9jZWR1cmUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAg
ICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5j
dGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgUHJv
Y2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX3doZW47CisgICAgY29uc3Qg
Y2hhciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3Zv
aWQgdmFsaWRhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0
IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUs
IHdoZW4sIGR1bXBCZWZvcmUpOworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNWYWxpZGF0ZV9oCisjZGVmaW5lIEIzVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwor
dm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29u
c3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbGlkYXRlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY29uc3QgY2hhciogY29uc3QgVmFsdWU6
OmR1bXBQcmVmaXggPSAiQCI7CisKK1ZhbHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVl
OjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEg
Yml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZh
bHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUu
IFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdl
IGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3
ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWduZWQg
aW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3Jp
Z2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAg
ICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVl
KCk7CisKKyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBJZGVudGl0eSwgdHlwZSwgb3JpZ2lu
LCB2YWx1ZSk7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2Vt
ZW50ID0gcmVwbGFjZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoTm9wKCkKK3sK
KyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3Jp
Z2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJl
cGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVl
KCk7CisKKyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBOb3AsIFZvaWQsIG9yaWdpbik7CisK
KyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFj
ZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6OmRl
ZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwg
IiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bjb2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOworICAg
IENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVuKCkp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAgIFN0
cmluZ1ByaW50U3RyZWFtIHN0cmluZ091dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQpOworICAg
IENTdHJpbmcgc3RyaW5nID0gc3RyaW5nT3V0LnRvQ1N0cmluZygpOworICAgIGlmIChzdHJpbmcu
bGVuZ3RoKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgc3RyaW5nKTsKKworICAgIG91dC5w
cmludCgiKSIpOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0
Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0
Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAg
IGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2Ogor
ICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAg
Y2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNT
aHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1
YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgp
OworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRlclR5cGUoKTsK
KyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgRFRvSTMyOgorICAg
IGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAg
IGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVy
RXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVF
cXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBj
YXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0OworICAg
IGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAg
ICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNk
ZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJn
LmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1
ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBCYXNpY0Jsb2NrOworY2xhc3MgU3RhY2ttYXA7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRF
IFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBB
ZGphY2VuY3lMaXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7
CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0
YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bj
b2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxk
KHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVl
KiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07
IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAg
ICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIC8vIFRoaXMgaXMg
dXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgdmFsaWQgZm9yIG5v
bi12b2lkIHZhbHVlcy4KKyAgICBBaXI6OkFyZzo6VHlwZSBhaXJUeXBlKCkgY29uc3QgeyByZXR1
cm4gQWlyOjpBcmc6OnR5cGVGb3JCM1R5cGUodHlwZSgpKTsgfQorCisgICAgQWRqYWNlbmN5TGlz
dCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFjZW5j
eUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAgdm9p
ZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCByZXBsYWNlV2l0aE5vcCgp
OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3QgVmFs
dWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVkIHRo
YXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAgICAv
LworICAgIC8vIGlmIChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5hczxB
cmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncworICAgIC8vIH0KKyAgICAv
LworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFyZ3Vt
ZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAvLyBp
ZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0
IFQqIGFzKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGlu
dDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsK
KyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSW50KCkgY29uc3Q7
CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnQoaW50NjRfdCB2YWx1
ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OworICAgIGRvdWJsZSBhc0Rv
dWJsZSgpIGNvbnN0OworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7CisKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworcHJvdGVjdGVkOgorICAgIC8v
IEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1
aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAg
ICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1f
b3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVu
dHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5n
IHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAg
ICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9v
cGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2lu
KG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bj
b2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3Qg
Y2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0
IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4
KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlw
ZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAg
ICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAg
ICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVy
IHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8v
IHRha2UgYW55IGFyZ3VtZW50czoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQor
ICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNv
ZGUsIG51bGxwdHIpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQor
ICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCisgICAgZXhwbGljaXQgVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAg
eworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFs
dWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5n
ZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUg
bV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOwor
ICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sq
IG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxh
Y2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRp
b25zLgorfTsKKworY2xhc3MgRGVlcFZhbHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVl
RHVtcChjb25zdCBWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQor
Citwcml2YXRlOgorICAgIGNvbnN0IFZhbHVlKiBtX3ZhbHVlOworfTsKKworaW5saW5lIERlZXBW
YWx1ZUR1bXAgZGVlcER1bXAoY29uc3QgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVw
VmFsdWVEdW1wKHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNs
dWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisjaW5j
bHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCogVmFsdWU6OmFzKCkKK3sKKyAgICBpZiAoVDo6
YWNjZXB0cyhvcGNvZGUoKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4odGhpcyk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdCBU
KiBWYWx1ZTo6YXMoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFZhbHVlKj4odGhp
cyktPmFzPFQ+KCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7
CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbmxpbmUgaW50MzJfdCBW
YWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+
dmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gISFhczxDb25zdDY0VmFsdWU+KCk7Cit9CisKK2lubGluZSBpbnQ2NF90IFZhbHVl
Ojphc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1
ZSgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaGFzSW50MzIoKSB8fCBoYXNJbnQ2NCgpOworfQorCitpbmxpbmUgaW50NjRfdCBWYWx1ZTo6
YXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNJ
bnQ2NCgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworaW5s
aW5lIGJvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29u
c3REb3VibGVWYWx1ZT4oKTsKK30KKworaW5saW5lIGRvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBj
b25zdAoreworICAgIHJldHVybiBhczxDb25zdERvdWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQor
CitpbmxpbmUgU3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFs
dWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3Rh
Y2ttYXA7CisgICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9p
bnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZh
bHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1f
a2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEFueToKKyAgICBjYXNlIFNv
bWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAg
IG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgi
KCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25z
dGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVS
ZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVw
OjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lz
dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAg
ICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBW
YWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6
Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNW
YWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3Jp
YmUgdmFsdWUgcmVwcmVzZW50YXRpb25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8g
Zm9yY2UgYQorLy8gcmVwcmVzZW50YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24u
IFdoZW4gdGhlIEIzIGNsaWVudCBmb3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0
aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2Vu
dGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFz
cyBWYWx1ZVJlcCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4g
aW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVw
cmVzZW50YXRpb24uIEFzIGFuCisgICAgICAgIC8vIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZvciB0aGUK
KyAgICAgICAgLy8gcmlnaHQgb3BlcmFuZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVja011bC4K
KyAgICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0
aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUg
YQorICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIhCisgICAg
ICAgIFNvbWVSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlv
biwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKKyAgICAg
ICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNr
ZWQuCisgICAgICAgIFJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNl
bnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJdCdzIG5v
dCBhIHZhbGlkCisgICAgICAgIC8vIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBTdGFj
aywKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMg
dGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUgYXJndW1lbnQgYXJlYSBhdCBzb21lCisgICAgICAg
IC8vIG9mZnNldC4KKyAgICAgICAgLy8gRklYTUU6IFRoZSBTdGFja21hcFNwZWNpYWwgY2xhc3Mg
bmVlZHMgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCB0aGVzZSBkb24ndCB0dXJuIGludG8K
KyAgICAgICAgLy8gQWlyIG9wZXJhbmRzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTQwCisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAg
ICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQg
QjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9Owor
ICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdp
c3RlcikKKyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFs
dWVSZXAocmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qg
b2Zmc2V0RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJv
bUZQOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJl
cCBzdGFja0FyZ3VtZW50KGludHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZh
bHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7Cisg
ICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbVNQOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZhbHVl
KQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50RG91Ymxl
KGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQo
Yml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJlZygpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJu
IFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZy
b21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0
cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gbV92
YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEtpbmQgbV9r
aW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlUmVwX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVy
LnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3Bh
dHRlcm5fbWF0Y2hlci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwOCBAQAorIyEvdXNy
L2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCity
ZXF1aXJlICJwYXRobmFtZSIKKworJHZhckluZGV4ID0gMAorZGVmIG5ld1ZhcgorICAgICR2YXJJ
bmRleCArPSAxCisgICAgIl90bXAjeyR2YXJJbmRleH0iCitlbmQKKworY2xhc3MgUHJvZHVjdGlv
bgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpuYW1lLCA6dmFyTmFtZSwgOmFub255bW91cywg
Om9wY29kZSwgOmNoaWxkcmVuCisKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIG5hbWUsIG9w
Y29kZSwgY2hpbGRyZW4pCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQG5hbWUg
PSBuYW1lCisgICAgICAgIEBhbm9ueW1vdXMgPSAobmFtZSA9PSBuaWwgb3IgbmFtZSA9fiAvXEFc
JChbMC05XSspXFovKQorICAgICAgICBAdmFyTmFtZSA9IEBhbm9ueW1vdXMgPyBuZXdWYXIgOiBu
YW1lID1+IC9cQVwkLyA/ICQnIDogbmFtZQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAg
ICAgIEBjaGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBbXQorICAgIGVuZAorCisgICAg
ZGVmIGhhc09wY29kZQorICAgICAgICBvcGNvZGUgIT0gbmlsCisgICAgZW5kCisKKyAgICBkZWYg
ZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICBjaGlsZHJlbi5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgfCBjaGlsZCwgaW5kZXggfAorICAgICAgICAgICAgeWllbGQgdmFyTmFtZSwK
KyAgICAgICAgICAgICAgICAgIGNoaWxkLm5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC52
YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQuYW5vbnltb3VzID8gKGNoaWxkLm9wY29k
ZSA/IDphbm9uSW50ZXJuYWwgOiA6YW5vbk9wZXJhbmQpIDogKGNoaWxkLm9wY29kZSA/IDppbnRl
cm5hbCA6IDpvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgIGluZGV4CisgICAgICAgICAgICBj
aGlsZC5lYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitjbGFz
cyBNYXRjaGVyCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpwcm9kdWN0aW9ucworCisgICAgZGVm
IGluaXRpYWxpemUobmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAg
ICAgICBAcHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucworICAgIGVuZAorZW5kCisKK2NsYXNzIE9y
aWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBk
ZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0g
ZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAg
CisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAg
ZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5n
CisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmln
aW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAg
IGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAg
IEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJp
bmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVy
KQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MK
KyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAg
CisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/
CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIK
KyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAg
IGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAg
bGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0
cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGln
bm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUK
KyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQVthLXpBLVowLTkk
XShbYS16QS1aMC05X10qKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2lu
Lm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJd
KykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVs9
KCksXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFt
ZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4
ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5l
eHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAg
ICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVm
IGlzS2V5d29yZCh0b2tlbikKKyAgICAjIFdlIGNhbiBleHRlbmQgdGhpcyBhcyB3ZSBhZGQgbW9y
ZSBrZXl3b3Jkcy4gTGlrZSwgd2UgbWlnaHQgd2FudCAiaW5jbHVkZSIgZXZlbnR1YWxseS4KKyAg
ICB0b2tlbiA9fiAvXEEoKG1hdGNoZXIpfChpbmNsdWRlKSlcWi8KK2VuZAorCitkZWYgaXNJZGVu
dGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10q
KVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBk
ZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRh
LCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgor
ICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAg
ICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAg
ICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAg
ICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1l
bnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30i
KSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAg
IGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZp
ZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisg
ICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAg
aWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNo
aWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisgICAg
ICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnku
bmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGlj
YXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJv
ZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1hdGNo
ZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAg
ICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBp
ZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0
byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUuCisg
ICAgICAgICAgICBwcm9kdWN0aW9uID0gcGFyc2VQcm9kdWN0aW9uCisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09
IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRl
IHByb2R1Y3Rpb24iKQorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIHByb2R1Y3Rpb25z
IDw8IHByb2R1Y3Rpb24KKyAgICAgICAgfQorCisgICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJO
YW1lLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAg
ICAgICAgb3JpZ2luID0gdG9rZW4ub3JpZ2luCisgICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRp
ZmllcgorCisgICAgICAgIGlmIHRva2VuID09ICI9IgorICAgICAgICAgICAgY29uc3VtZSgiPSIp
CisgICAgICAgICAgICBvcGNvZGUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgY29u
c3VtZSgiKCIpCisgICAgICAgIGVsc2lmIHRva2VuID09ICIoIgorICAgICAgICAgICAgY29uc3Vt
ZSgiKCIpCisgICAgICAgICAgICBvcGNvZGUgPSBuYW1lCisgICAgICAgICAgICBuYW1lID0gbmls
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4s
IG5hbWUsIG5pbCwgbmlsKQorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rp
b25zID0gW10KKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAi
KSIKKworICAgICAgICAgICAgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1
Y3Rpb24pCisKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorICAgICAgICAgICAg
Y29uc3VtZSgiLCIpCisgICAgICAgIH0KKworICAgICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIp
IgorICAgICAgICBhZHZhbmNlCisKKyAgICAgICAgUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1l
LCBvcGNvZGUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlsw
XQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCitt
YXRjaGVyID0gcGFyc2VyLnBhcnNlCisKK2NsYXNzIFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIg
OmluZGV4TWFwLCA6cHJvZHVjdGlvbnMKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICBAaW5kZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVj
dGlvbnMgPSBbXQorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4
IHwKKyAgICAgICAgICAgIEBpbmRleE1hcCA8PCBpbmRleAorICAgICAgICAgICAgQHByb2R1Y3Rp
b25zIDw8IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYg
bWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAg
ICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcFtpbmRleF0KKyAgICAgICAgfQor
ICAgIGVuZAorZW5kCisKK0ZpbGUub3BlbigiQjMiICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInci
KSB7CisgICAgfCBvdXRwIHwKKworICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVy
YXRlX3BhdHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIK
KworICAgIG91dHAucHV0cyAiI2lmbmRlZiBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAu
cHV0cyAiI2RlZmluZSBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIAorICAgIG91dHAucHV0cyAi
I2luY2x1ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIHJ1biN7bWF0Y2hlci5uYW1lfShWYWx1ZSog
X3ZhbHVlLCBBZGFwdG9yJiBhZGFwdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisKKyAgICAjIE5v
dGUgdGhhdCB0aGlzIGRvZXMgbm90IGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgYmVjYXVz
ZSBpdCdzIGEgcmVjdXJzaXZlIGVtaXR0ZXIuIElmIHlvdQorICAgICMgd2FudCB0byBzZWUgdGhl
IGNvZGUgbmljZWx5IGZvcm1hdHRlZCwgb3BlbiBpdCBpbiBhIGdvb2QgdGV4dCBlZGl0b3IgYW5k
IGFzayBpdCB0byBmb3JtYXQgaXQKKyAgICAjIGZvciB5b3UuCisKKyAgICAjIEluIG9kZCBzaXR1
YXRpb25zLCB3ZSBtYXkgbm90IHVzZSB0aGUgaW5wdXQgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVy
IHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShfdmFs
dWUpOyIKKyAgICAgICAgCisgICAgIyBUaGlzIGp1c3QgcHJvdGVjdHMgdGhlIGNhbGxlciBmcm9t
IGhhdmluZyB0byB3b3JyeSBhYm91dCBwcm9kdWN0aW9ucyBoYXZpbmcgZGlmZmVyZW50IGxlbmd0
aHMuCisgICAgZGVmIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisg
ICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5k
ZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBp
bmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmNoaWxkcmVu
Lmxlbmd0aCA9PSBwcm9kdWN0aW9uLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgICAgIGlu
ZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAg
ICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAg
ICAgICBsZW5ndGggPSBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmNoaWxkcmVuLmxlbmd0aAor
ICAgICAgICAgICAgaWYgbGVuZ3RoID4gMAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCN7dmFsdWVOYW1lfS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gI3tsZW5ndGh9KSB7IgorICAgICAg
ICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAg
ICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRoaXMgZWZmaWNpZW50bHkg
c2VsZWN0cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgcHJvZHVjdGlvbnMuIEl0IGFzc3VtZXMgdGhh
dCBwcm9kdWN0aW9ucworICAgICMgYXJlIG5vdCBkdXBsaWNhdGVkLiBJdCB5aWVsZHMgdGhlIGlu
ZGV4IG9mIHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBhbmQgdGhlIGNvcm91dGluZSBpcworICAgICMg
cmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIHNwZWNpZmljIGNvZGUgZm9yIHRoYXQgcHJvZHVjdGlv
bi4gVGhlIGNvcm91dGluZSBpcyBnaXZlbiBsaXN0cyBvZgorICAgICMgaW5kaWNlcyBvZiBwb3Nz
aWJseS1tYXRjaGluZyBwcm9kdWN0aW9ucy4KKyAgICBkZWYgbWF0Y2hQcm9kdWN0aW9ucyhvdXRw
LCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICAjIEZpcnN0LCBzcGxpdCB0aGUgcHJv
ZHVjdGlvbnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJvZHVjdGlvbnMgd2l0aCBhbiBvcGNvZGUgYW5k
IHByb2R1Y3Rpb25zCisgICAgICAgICMgd2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMg
PSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAg
fCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQg
cHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmhhc09wY29kZSA9PSBwcm9kdWN0aW9uLmhh
c09wY29kZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgIyBOb3csIGVtaXQgcGF0dGVy
biBtYXRjaGluZyBjb2RlLiBXZSBkbyBpdCBkaWZmZXJlbnRseSBmb3IgbGlzdHMgd2l0aCBhbiBv
cGNvZGUgdGhhbiBmb3IKKyAgICAgICAgIyBsaXN0cyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5k
ZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGlm
IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgIyBO
b3csIHdlIHNwbGl0IHRoaXMgaW5kZXggbGlzdCBpbnRvIGdyb3VwcyBmb3IgZWFjaCBvcGNvZGUu
CisgICAgICAgICAgICAgICAgZ3JvdXBzID0ge30KKyAgICAgICAgICAgICAgICBpbmRleExpc3Qu
ZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgICAg
ICBwcm9kdWN0aW9uID0gcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGlm
IGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vw
c1twcm9kdWN0aW9uLm9wY29kZV0gPDwgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA9IFtpbmRl
eF0KKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgInN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5vcGNvZGUoKSkgeyIKKyAgICAgICAgICAgICAg
ICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvcGNvZGUsIHN1Yklu
ZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZX06
IgorICAgICAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhzdWJJbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2
YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5t
YXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1
Y3Rpb25zKQorICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3Vi
TWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAor
ICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0
KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5k
CisKKyAgICAjIFRha2VzIHByb2R1Y3Rpb25zIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcGNvZGUgYW5k
IHRoZSBzYW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBmcm9tIHRoZW0gYmFzZWQgb24KKyAgICAjIHRo
ZSBwcm9kdWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29sdW1uLgorICAgIGRlZiBtYXRjaENvbHVtbihv
dXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCkKKyAgICAgICAgaWYgY29s
dW1uSW5kZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICB5
aWVsZCAoMC4uLihwcm9kdWN0aW9ucy5zaXplKSkudG9fYQorICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgIGVuZAorCisgICAgICAgIHN1YlZhbHVlID0gbmV3VmFyCisgICAgICAgIAorICAgICAg
ICBvdXRwLnB1dHMgInsiCisgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7c3ViVmFsdWV9ID0g
I3t2YWx1ZU5hbWV9LT5jaGlsZCgje2NvbHVtbkluZGV4fSk7IgorCisgICAgICAgICMgV2UgbWF5
IG5vdCB1c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0
IGl0LgorICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3N1YlZhbHVlfSk7IgorICAg
ICAgICAKKyAgICAgICAgc3ViUHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucy5tYXAgeworICAgICAg
ICAgICAgfCBwcm9kdWN0aW9uIHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uY2hpbGRyZW5bY29s
dW1uSW5kZXhdCisgICAgICAgIH0KKworICAgICAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHN1
YlZhbHVlLCBzdWJQcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAg
ICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykK
KyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVj
dGlvbnMsIGNvbHVtbkluZGV4ICsgMSkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwK
KyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgIGVu
ZAorCisgICAgZGVmIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9u
cykKKyAgICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25z
KSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAjIFdlIGFyZSBndWFy
YW50ZWVkIHRoYXQgdGhpcyBpbmRleCBsaXN0IGNvbnRhaW5zIHByb2R1Y3Rpb25zIHdpdGggdGhl
IHNhbWUgb3Bjb2RlIGFuZAorICAgICAgICAgICAgIyB0aGUgc2FtZSBsZW5ndGguCisgICAgICAg
ICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAg
ICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9u
cywgMCkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5
aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgZW5kCisKKyAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsICJfdmFsdWUiLCBt
YXRjaGVyLnByb2R1Y3Rpb25zKSB7CisgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgaW5k
ZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBwcm9kdWN0
aW9uID0gbWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgIG91dHAucHV0cyAi
eyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7cHJvZHVjdGlvbi52YXJOYW1lfSA9
IF92YWx1ZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3Byb2R1Y3Rp
b24udmFyTmFtZX0pOyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAg
ICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0g
W10KKyAgICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHNlZW4gPSB7fQorICAg
ICAgICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAgICAgICAgICAgICAgIHwgcGFy
ZW50VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgje2luZGV4fSki
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc2VlbltjaGlsZFZhck5hbWVd
CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsiCisgICAgICAg
ICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVlCisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFt
ZX0gPSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lk
ZXIgZ2V0dGluZyByaWQgb2YgdGhlICQgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICAjIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MjcKKyAgICAgICAgICAg
ICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQor
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpp
bnRlcm5hbCBvciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5k
ID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hp
bGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KGFkYXB0b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFs
QXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5h
Y2NlcHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5
PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygi
ICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIg
KyB0cnlBcmd1bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0
cyAiYWRhcHRvci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBp
bnRlcm5hbEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0
b3IuYWNjZXB0SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSAr
ICIpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVu
dHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJh
bmRzTGF0ZSgiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybjsiCisgICAgICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAgICAg
IG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRz
ICJ9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBC
MyN7bWF0Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgorI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJWTS5o
IgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK25h
bWVzcGFjZSB7CisKKy8vIE5vdGhpbmcgZmFuY3kgZm9yIG5vdzsgd2UganVzdCB1c2UgdGhlIGV4
aXN0aW5nIFdURiBhc3NlcnRpb24gbWFjaGluZXJ5LgorI2RlZmluZSBDSEVDSyh4KSBSRUxFQVNF
X0FTU0VSVCh4KQorCitWTSogdm07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KK1QgY29tcGlsZUFuZFJ1bihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBnZW5l
cmF0ZShwcm9jZWR1cmUsIGppdCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0
LCBudWxscHRyKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgKCJ0ZXN0YjMiKSk7CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMu
Li4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJndW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7Cit9CisK
K3ZvaWQgdGVzdDQyKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBjb25zdDQyID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyKTsKKyAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjb25zdDQyKTsKKworICAg
IENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisKKyNkZWZpbmUgUlVO
KHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygj
dGVzdCAiOlxuIik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGVzdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygiICAgIE9LIVxuIik7
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKK3ZvaWQgcnVuKCkK
K3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICB2bSA9ICZWTTo6Y3JlYXRl
KExhcmdlSGVhcCkubGVha1JlZigpOworCisgICAgUlVOKHRlc3Q0MigpKTsKK30KKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sK
KyAgICBVTlVTRURfUEFSQU0oYXJnYyk7CisgICAgVU5VU0VEX1BBUkFNKGFyZ3YpOworICAgIAor
ICAgIHJ1bigpOworICAgIHJldHVybiAwOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0
ZVN0YWNrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNp
bmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3Bh
Y2UgeworCitib29sIGF0dGVtcHRBc3NpZ25tZW50KAorICAgIFN0YWNrU2xvdCogc2xvdCwgaW50
cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMp
Cit7CisgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAg
ICAgaWYgKCFvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGJvb2wgb3ZlcmxhcCA9IFdURjo6cmFuZ2VzT3ZlcmxhcCgKKyAgICAgICAgICAg
IG9mZnNldEZyb21GUCwKKyAgICAgICAgICAgIG9mZnNldEZyb21GUCArIHN0YXRpY19jYXN0PGlu
dHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwKKyAgICAgICAgICAgIG90aGVyU2xvdC0+b2Zmc2V0
RnJvbUZQKCksCisgICAgICAgICAgICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpICsgc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KG90aGVyU2xvdC0+Ynl0ZVNpemUoKSkpOworICAgICAgICBpZiAob3Zl
cmxhcCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzbG90LT5zZXRP
ZmZzZXRGcm9tRlAob2Zmc2V0RnJvbUZQKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBh
c3NpZ24oU3RhY2tTbG90KiBzbG90LCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xv
dHMpCit7CisgICAgaWYgKGF0dGVtcHRBc3NpZ25tZW50KHNsb3QsIC1zdGF0aWNfY2FzdDxpbnRw
dHJfdD4oc2xvdC0+Ynl0ZVNpemUoKSksIG90aGVyU2xvdHMpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTbG90cykgeworICAgICAgICBp
ZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgYm9vbCBkaWRBc3NpZ24gPSBhdHRlbXB0QXNzaWdubWVudCgKKyAgICAgICAgICAgIHNs
b3QsIG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgLSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xv
dC0+Ynl0ZVNpemUoKSksIG90aGVyU2xvdHMpOworICAgICAgICBpZiAoZGlkQXNzaWduKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlU3RhY2so
Q29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRl
U3RhY2siKTsKKworICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0aGUgbG9ja2VkIHNsb3RzIGluIG9y
ZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCisgICAg
Ly8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9m
ZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCisgICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6
ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzOwor
ICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Q7CisgICAgZm9y
IChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBzd2l0Y2gg
KHNsb3QtPmtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAg
ICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgICAgICBhc3Np
Z25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5hcHBlbmQoc2xvdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6Cisg
ICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBBcyBhIG1hdHRlciBvZiBzYW5pdHksIHVuYXNzaWduIHRoaXMuIE1heWJlIGl0IHdvdWxkIGJl
IGdvb2QgdG8gZXZlbiBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIHJ1bGUg
dGhhdCB0aGlzIGNhbm5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgc2xvdC0+c2V0T2Zmc2V0
RnJvbUZQKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgLy8gVGhpcyBpcyBhIGZhaXJseSBleHBlbnNpdmUgbG9vcCwgYnV0IGl0J3Mg
T0sgYmVjYXVzZSB3ZSdsbCB1c3VhbGx5IG9ubHkgaGF2ZSBhIGhhbmRmdWwgb2YKKyAgICAvLyBs
b2NrZWQgc3RhY2sgc2xvdHMuCisgICAgd2hpbGUgKCFsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGxvY2tlZFN0YWNrU2xvdHNX
b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBhc3NpZ24oc2xvdCwgYXNzaWduZWRMb2NrZWRT
dGFja1Nsb3RzKTsKKyAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90
KTsKKyAgICB9CisKKyAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMuIE5v
dGUgdGhhdCB0aGVvcmV0aWNhbGx5IHdlIHNob3VsZCBkbyBhbiBlc2NhcGUgYW5hbHlzaXMKKyAg
ICAvLyBoZXJlLiBCdXQsIGN1cnJlbnRseSBBaXIgZG9lc24ndCBzdXBwb3J0IGVzY2FwaW5nIGEg
U3RhY2tTbG90IQorICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZXNjYXBpbmcgYSBTdGFj
a1Nsb3QgYW5kIGFkZCBlc2NhcGUgYW5hbHlzaXMgdG8gYWxsb2NhdGVTdGFjaygpLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0MzAKKworICAgIGF1
dG8gaXNSZWxldmFudCA9IFtdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7CisgICAgICAgIHJl
dHVybiBhcmcuaXNTdGFjaygpICYmIGFyZy5zdGFja1Nsb3QoKS0+a2luZCgpID09IFN0YWNrU2xv
dEtpbmQ6OkFub255bW91czsKKyAgICB9OworCisgICAgTGl2ZW5lc3M8QXJnPiBsaXZlbmVzcyhj
b2RlKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVy
ZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3Qq
PiBzbG90czsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAg
IExpdmVuZXNzPEFyZz46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKwor
ICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAoKSB7CisgICAgICAgICAgICAvLyBGb3JtIGEg
Y2xpcXVlIG9mIHN0YWNrIHNsb3RzIHRoYXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0
IG9mIHN0YWNrIHNsb3RzCisgICAgICAgICAgICAvLyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4K
KyAgICAgICAgICAgIHNsb3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6
IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZWxldmFudChhcmcp
KQorICAgICAgICAgICAgICAgICAgICBzbG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbG90cy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBzbG90c1tp
XTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNsb3RzLnNp
emUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIgPSBzbG90
c1tpXTsKKworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIGZpcnN0ID0gb3V0ZXI7Cisg
ICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2Vjb25kID0gaW5uZXI7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChmaXJzdC0+aW5kZXgoKSA+IHNlY29uZC0+aW5kZXgoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChmaXJzdCwgc2Vjb25kKTsKKworICAgICAgICAgICAg
ICAgICAgICBpbnRlcmZlcmVuY2VbZmlyc3RdLmFkZChzZWNvbmQpOworICAgICAgICAgICAgICAg
ICAgICBpbnRlcmZlcmVuY2Vbc2Vjb25kXS5hZGQoZmlyc3QpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBpbnRlcmZlcmUoKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5z
dEluZGV4LS07KSB7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5z
dEluZGV4KSk7CisgICAgICAgICAgICBpbnRlcmZlcmUoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25zLiBBdCBpdHMgaGVhcnQgdGhpcyBh
bGdvcml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNoCisgICAgLy8gU3RhY2tTbG90IHdl
IGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHpl
cm8gd2hpbGUgZW5zdXJpbmcgbm8KKyAgICAvLyBvdmVybGFwIHdpdGggb3RoZXIgU3RhY2tTbG90
cyB0aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJT
bG90czsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7Cisg
ICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgLy8gQWxyZWFk
eSBhc3NpZ25lZCBhbiBvZmZzZXQuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGludGVyZmVyaW5nU2xvdHMgPSBpbnRlcmZl
cmVuY2Vbc2xvdF07CisgICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Nsb3RzLnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICBvdGhlclNsb3RzW2ldID0gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzW2ld
OworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMu
c2l6ZSgpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogaW50ZXJmZXJpbmdT
bG90cykKKyAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dEluZGV4KytdID0gb3RoZXJTbG90Owor
CisgICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKKyAgICB9CisKKyAgICAvLyBGaWd1
cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFjayBzbG90cy4KKyAgICB1
bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsKKyAgICBmb3IgKFN0YWNrU2xvdCog
c2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xv
dHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMsCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXNsb3QtPm9mZnNldEZyb21GUCgpKSk7Cisg
ICAgfQorCisgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMpOworCisg
ICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVl
ZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFy
Z3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRo
ZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3VjaCBh
biBhd2Vzb21lIGFzc3VtcHRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgIGNv
ZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShhcmcub2Zmc2V0KCkgKyA4KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb2RlLnNldEZy
YW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3RzICsgY29kZS5jYWxsQXJnQXJlYVNpemUoKSk7
CisKKyAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0gdGhlIGNvZGUgdG8gdXNlIEFkZHIncyBpbnN0
ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEgbG9zc2xlc3MKKyAgICAvLyB0cmFuc2Zvcm1h
dGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBTdGFja1Nsb3RzIGFycmF5IHRvIGZpZ3VyZSBv
dXQgd2hpY2ggU3RhY2tTbG90IGFueQorICAgIC8vIG9mZnNldC1mcm9tLUZQIHJlZmVycyB0by4K
KworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJn
cykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRy
KAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGFyZy5zdGFja1Nsb3Qo
KS0+b2Zmc2V0RnJvbUZQKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJn
OjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJh
bWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQWxsb2NhdGVTdGFja19oCisjZGVmaW5l
IEFpckFsbG9jYXRlU3RhY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBU
aGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBvbiB0aGUgc3RhY2suIEl0IGZpcnN0
IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgKKy8vIG9yZGVyIGFuZCB0aGVuIGl0
IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQuCisKK3ZvaWQgYWxsb2NhdGVTdGFj
ayhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJBbGxvY2F0ZVN0YWNrX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBcmcuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tT
bG90LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxp
ZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQo
dG1wKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmlu
dCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tNjQ6CisgICAg
ICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmlu
dChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2Uo
KSwgIiwiLCBpbmRleCgpKTsKKyAgICAgICAgaWYgKHNjYWxlKCkgIT0gMSkKKyAgICAgICAgICAg
IG91dC5wcmludCgiLCIsIHNjYWxlKCkpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50
ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2Fs
bEFyZzoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoY2FsbEFyZykiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVsYXRpb25hbENvbmRpdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgb3V0LnBy
aW50KGFzUmVzdWx0Q29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTcGVj
aWFsOgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckFyZ19oCisjZGVmaW5lIEFpckFyZ19oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIK
KyNpbmNsdWRlICJCM1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBTcGVjaWFsOworY2xhc3MgU3RhY2tTbG90OworCisvLyBU
aGlzIGNsYXNzIG5hbWUgaXMgYWxzbyBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2ls
bCBzYXkgaXQgYSBsb3QuIFlvdSdsbCBzZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjpp
bW0oNSksIEFyZzo6YWRkcih0aGluZywgYmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6
CisgICAgLy8gVGhlc2UgZW51bSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1
c2Ugd2UgaGF2ZSB0byBtZW50aW9uIHRoZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90
IHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgVG1wLAorICAgICAgICBJbW0sCisgICAgICAg
IEltbTY0LAorICAgICAgICBBZGRyLAorICAgICAgICBTdGFjaywKKyAgICAgICAgQ2FsbEFyZywK
KyAgICAgICAgSW5kZXgsCisgICAgICAgIFJlbENvbmQsCisgICAgICAgIFJlc0NvbmQsCisgICAg
ICAgIFNwZWNpYWwKKyAgICB9OworCisgICAgZW51bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAg
VXNlLAorICAgICAgICBEZWYsCisgICAgICAgIFVzZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5
cGUgOiBpbnQ4X3QgeworICAgICAgICBHUCwKKyAgICAgICAgRlAKKyAgICB9OworCisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKKworICAgIHN0YXRpYyBib29sIGlzVXNl
KFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNl
IFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBEZWY6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xlIHJvbGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZv
ckIzVHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIElu
dDY0OgorICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAg
ICAgICAgIHJldHVybiBGUDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIEdQOworICAgIH0KKworICAgIEFyZygpCisgICAgICAgIDogbV9r
aW5kKEludmFsaWQpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAg
ICAgIDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisK
KyAgICBzdGF0aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBpbW02NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
dmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBh
ZGRyKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBBZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAw
KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0
YWNrOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
bHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmco
aW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRT
Y2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAg
ICAgICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
Y2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNj
YWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAg
ICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgo
QWlyOjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAg
ICAgQVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2Nh
bGUpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4
OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXgg
PSBpbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihz
Y2FsZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRp
b24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
UmVzQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNp
YWwqIHNwZWNpYWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0
PGludHB0cl90PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5k
ID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQor
ICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBt
X3NjYWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJ
bW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQor
CisgICAgYm9vbCBpc0ltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gSW1tNjQ7CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAg
IGJvb2wgaXNDYWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
Q2FsbEFyZzsKKyAgICB9CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQor
CisgICAgYm9vbCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBSZXNDb25kOworICAgIH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlz
QWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygp
OworICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAg
aW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IElt
bSB8fCBraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
CisgICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkg
PT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGJvb2wgaGFz
T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAg
IGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgor
ICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSA9
PSBTdGFjaykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3NjYWxl
KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8
IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Piht
X29mZnNldCk7CisgICAgfQorCisgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8U3RhY2tTbG90Kj4obV9vZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGlu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAg
ICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzY2FsZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJu
IG1fc2NhbGU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9nU2NhbGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOworICAgIH0KKworICAgIEFpcjo6U3Bl
Y2lhbCogc3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNw
ZWNpYWwpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zm
c2V0KTsKKyAgICB9CisKKyAgICBib29sIGlzR1BUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOworICAgIH0KKworICAgIGJvb2wgaXNGUFRt
cCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQKCk7
CisgICAgfQorICAgIAorICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGlu
IGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEdQIHZhbHVlLgorICAgIGJvb2wgaXNHUCgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToK
KyAgICAgICAgY2FzZSBJbW02NDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIElu
ZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAg
IGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNp
YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAg
ICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBpZiB0
aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2YWx1
ZS4KKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2Fz
ZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgSW52YWxpZDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6Cisg
ICAgICAgIGNhc2UgSW1tNjQ6IC8vIFllcywgd2UgYWxsb3cgSW1tNjQgYXMgYSBkb3VibGUgaW1t
ZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBp
c0ZQVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhhc1R5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAg
ICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUgdHlwZSBpcyBhbWJpZ3VvdXMgZm9yIHNvbWUg
YXJnIGtpbmRzLiBDYWxsIHdpdGggY2FyZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzR1AoKSA/IEdQIDogRlA7CisgICAgfQorCisgICAgYm9vbCBpc1R5
cGUoVHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4gaXNHUCgpOworICAgICAgICBjYXNlIEZQ
OgorICAgICAgICAgICAgcmV0dXJuIGlzRlAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCku
aXNHUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0bXAoKS5ncHIoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAgfQorCisg
ICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnByKCk7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncFRt
cEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2ln
bmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS50bXBJbmRl
eCgpOworICAgIH0KKworICAgIEFyZyB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNl
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzT2Zmc2V0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gQXJnKCk7CisgICAgICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0KCks
IGFkZGl0aW9uYWxPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICByZXR1cm4g
YWRkcihiYXNlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2Ug
U3RhY2s6CisgICAgICAgICAgICByZXR1cm4gc3RhY2soc3RhY2tTbG90KCksIG9mZnNldCgpICsg
YWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJl
dHVybiBjYWxsQXJnKG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2Ug
SW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgoYmFzZSgpLCBpbmRleCgpLCBzY2FsZSgp
LCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBB
cmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNh
c2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAg
ICAgICAgICAgZnVuY3RvcihtX2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBU
aGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYg
b3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRo
ZW0uIEZvciBleGFtcGxlLCB0aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQor
ICAgIC8vCisgICAgLy8gVGhpcyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwg
VHlwZSBhcmdUeXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1f
YmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFz
ZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVz
dGVkSW1tMzIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihtX29mZnNldCkpOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NCBhc1RydXN0ZWRJbW02NCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNJbW02NCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQodmFsdWUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0ciBhc1RydXN0ZWRJbW1QdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGlzNjRCaXQoKSkKKyAgICAgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyVmFsdWUoKSk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jh
c2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGFzUmVzdWx0Q29uZGl0
aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Jlc0NvbmQoKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uPihtX29m
ZnNldCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAg
ICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYmFzZShX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PT0gQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRoaXMgcmVhbGx5IGRvZXNuJ3QgaGF2
ZSB0byBiZSB0aGF0IGdyZWF0LgorICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludDY0X3Q+
OjpoYXNoKG1fb2Zmc2V0KSArIG1fa2luZCArIG1fc2NhbGUgKyBtX2Jhc2UuaGFzaCgpICsKKyAg
ICAgICAgICAgIG1faW5kZXguaGFzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2NF90
IG1fb2Zmc2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsgSW52YWxpZCB9OworICAgIGludDMy
X3QgbV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9p
bmRleDsKK307CisKK3N0cnVjdCBBcmdIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBBcmcmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IEFyZyYgYSwgY29uc3QgQXJnJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpBaXI6OkFyZz4geworICAgIHR5cGVkZWYgSlNDOjpC
Mzo6QWlyOjpBcmdIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpB
cmc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgLy8g
QmVjYXVzZSBtX3NjYWxlIGlzIDEgaW4gdGhlIGVtcHR5IHZhbHVlLgorICAgIHN0YXRpYyBjb25z
dCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckFyZ19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY29uc3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9
ICIjIjsKKworYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9j
aykKK3sKKyAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwor
Ym9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sK
KyAgICByZXR1cm4gQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9v
bCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNC
bG9jayogdG8pCit7CisgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJv
bSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFz
aWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIkJCIiwgKnRoaXMsICI6IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOwor
ICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBpbnN0LCAiXG4iKTsKK30KKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2Zy
ZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFpckJhc2ljQmxvY2tfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1
ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNs
dWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENv
ZGU7CitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisg
ICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFz
aWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVu
dGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAg
ICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5k
ZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4
XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFz
dCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0JiYgaW5z
dCkKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZv
aWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1faW5z
dHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOwor
ICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJh
bmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAv
LyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2gg
b2YgYSBjb25kaXRpb25hbCBicmFuY2guCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNv
bnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sg
c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5k
ZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBz
dWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisgICAgU3VjY2Vzc29y
TGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCisgICAgQmFzaWNC
bG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nl
c3NvcihpbmRleCkuYmxvY2soKTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JC
bG9ja3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNC
bG9jaywgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29y
Q29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNz
b3JCbG9ja3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rp
b248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBt
X3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAg
QmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRl
Y2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0
JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorCisgICAgYm9vbCBh
ZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZW1vdmVQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJv
bSwgQmFzaWNCbG9jayogdG8pOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBDb2RlOworICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAg
CisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgIEluc3RMaXN0IG1faW5zdHM7CisgICAgU3VjY2Vzc29y
TGlzdCBtX3N1Y2Nlc3NvcnM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwor
ICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7
CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisg
ICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBkZWVw
RHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxv
Y2tEdW1wKGJsb2NrKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ0NhbGxTcGVj
aWFsOjpDQ2FsbFNwZWNpYWwoKQoreworICAgIG1fY2xvYmJlcmVkUmVncyA9IFJlZ2lzdGVyU2V0
OjphbGxSZWdpc3RlcnMoKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNl
dDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0
ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdz
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK0NDYWxs
U3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpmb3JF
YWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJh
Y2s+JiBjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6VXNlLCBB
cmc6OkdQKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIC8vIEZvciB0aGUgdHlwZSwgd2UgY2FuIGp1c3QgcXVlcnkg
dGhlIGFyZydzIHR5cGUuIFRoZSBhcmcgd2lsbCBoYXZlIGEgdHlwZSwgYmVjYXVzZSB3ZQorICAg
ICAgICAvLyByZXF1aXJlIHRoZXNlIGFyZ3MgdG8gYmUgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAg
ICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbaV0sIEFyZzo6VXNlLCBpbnN0LmFyZ3NbaV0udHlwZSgp
KTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7
CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgor
ICAgICAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGlmIChpczY0Qml0KCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpU
bXA6CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgIGNhc2Ug
QXJnOjpDYWxsQXJnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNHUCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5zdC5hcmdzW2ldLmlzUmVnKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGluc3QuYXJnc1tpXSA9PSBUbXAo
c2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVybiAgZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIENDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYs
IHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIC8vIEFyZyAxIGNhbiBiZSBhIHN0YWNrIGFkZHJl
c3MgZm9yIHN1cmUuCisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OnJlcG9y
dFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikKK3sKK30KKworQ0NhbGxI
ZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sx
XS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAg
ICAgICAgaml0Lm1vdmUoaW5zdC5hcmdzWzFdLmFzVHJ1c3RlZEltbVB0cigpLCBzY3JhdGNoUmVn
aXN0ZXIpOworICAgICAgICBqaXQuY2FsbChzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uZ3By
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgaml0LmNh
bGwoaW5zdC5hcmdzWzFdLmFzQWRkcmVzcygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworY29uc3QgUmVn
aXN0ZXJTZXQmIENDYWxsU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKQoreworICAg
IHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1w
bChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30K
Kwordm9pZCBDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiZnVuY3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGlu
ZyBjb252ZW50aW9uLiIpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyQ0NhbGxTcGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxTcGVjaWFsX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gVXNlIHRoaXMgc3Bl
Y2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBjb3Vyc2UgYSBTcGVj
aWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBvYmplY3QuIEFyZyAx
IGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJlZ2lzdGVyLCBvciBh
biBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRoZSBzZXQgb2YgYXJn
dW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1lbnRzIHRoYXQgZ28g
dG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdvcmsgb2YgZG9pbmcg
dGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24gd2h5CisvLyB3ZSBz
cGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRvIGEgY2FsbCBpcyBz
byB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0IHRoZXkgZ2V0IHVz
ZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSByZXBvcnQgYWxsIGFy
Z3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlmIHdlIGhhZCBhIGNh
bGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIgdG8gYmUgbGl2ZSB1
bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwgd2hpY2hldmVyIGhh
cHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGljIFNwZWNpYWwgewor
cHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNpYWwoKTsKKworICAg
IC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1
c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAgLy8gdXNlZCBmb3Ig
YXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBp
cyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBz
cGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lz
dGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFj
aEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBv
dmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRt
aXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJl
cG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5l
cmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNs
b2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFt
JikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVy
ZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNDYWxsU3BlY2lhbF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK0NvZGU6OkNvZGUoKQoreworfQorCitDb2RlOjp+Q29kZSgpCit7
Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxv
Y2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2su
Z2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1N0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5
dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFja1Nsb3QoYnl0ZVNpemUs
IG1fc3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7CisgICAgU3RhY2tTbG90KiByZXN1
bHQgPSBzbG90LmdldCgpOworICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RGOjptb3ZlKHNsb3Qp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTcGVjaWFsKiBDb2RlOjphZGRTcGVjaWFsKHN0
ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQoreworICAgIFNwZWNpYWwqIHJlc3VsdCA9
IHNwZWNpYWwuZ2V0KCk7CisgICAgbV9zcGVjaWFscy5hcHBlbmQoV1RGOjptb3ZlKHNwZWNpYWwp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3Bl
Y2lhbCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAgICAgICBtX2NDYWxsU3Bl
Y2lhbCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAgICAgICAgYWRkU3BlY2lh
bChzdGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAgIH0KKworICAgIHJldHVy
biBtX2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7
CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30KKwordm9pZCBDb2RlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAo
c3RhY2tTbG90cygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxu
Iik7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc2xvdCksICJcbiIpOworICAgIH0KKyAg
ICBpZiAoc3BlY2lhbHMoKS5zaXplKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsczpc
biIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFscygpKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCksICJcbiIpOworICAgIH0K
KyAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCAiXG4iKTsKKyAgICBv
dXQucHJpbnQoIkNhbGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIp
OworICAgIG91dC5wcmludCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMs
ICJcbiIpOworfQorCit1bnNpZ25lZCBDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVk
IGluZGV4KSBjb25zdAoreworICAgIHdoaWxlIChpbmRleCA8IHNpemUoKSAmJiAhYXQoaW5kZXgp
KQorICAgICAgICBpbmRleCsrOworICAgIHJldHVybiBpbmRleDsKK30KKwordW5zaWduZWQgQ29k
ZTo6ZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVy
biBmaW5kRmlyc3RCbG9ja0luZGV4KGluZGV4ICsgMSk7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6
OmZpbmROZXh0QmxvY2soQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Cit7CisgICAgcmV0dXJuIGF0
KGZpbmROZXh0QmxvY2tJbmRleChibG9jay0+aW5kZXgoKSkpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckNvZGVfaAorI2RlZmluZSBBaXJDb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgor
I2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0
LmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENDYWxsU3BlY2lhbDsKKworLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8g
dGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhl
CisvLyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVy
YXRpbmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWly
LgorCitjbGFzcyBDb2RlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUo
KTsKKworICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsK
KworICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Ns
b3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNw
ZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNw
ZWNpYWwgeW91IG5lZWQgdG8gbWFrZSBhIEMgY2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxs
U3BlY2lhbCgpOworCisgICAgVG1wIG5ld1RtcChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICBy
ZXR1cm4gVG1wOjpncFRtcEZvckluZGV4KG1fbnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFy
Zzo6RlA6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBz
KyspOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUg
dHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6
R1A6CisgICAgICAgICAgICByZXR1cm4gbV9udW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpG
UDoKKyAgICAgICAgICAgIHJldHVybiBtX251bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHVuc2lnbmVkIGNhbGxBcmdBcmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0Fy
ZWFTaXplOyB9CisKKyAgICAvLyBZb3UgY2FuIGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0
aW9uIHRvIGZvcmNlIGEgbWluaW11bSBjYWxsIGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1
ZXN0Q2FsbEFyZ0FyZWFTaXplKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxB
cmdBcmVhU2l6ZSA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUsCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc2l6ZSkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBm
cmFtZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8gT25seSBw
aGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBD
dXJyZW50bHksIG9ubHkKKyAgICAvLyBBaXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRoaXMuCisg
ICAgdm9pZCBzZXRGcmFtZVNpemUodW5zaWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAgICAgICAg
bV9mcmFtZVNpemUgPSBmcmFtZVNpemU7CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QmIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7
IH0KKworICAgIC8vIFJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVucmVhY2hh
YmxlIGJsb2Nrcy4KKyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdLmdldCgpOyB9CisgICAgQmFzaWNCbG9j
ayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9
CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcp
ICE9IG51bGwgYW5kIGluZGV4JyA+PSBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kRmlyc3RCbG9j
a0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVz
dCBpbmRleCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID4gaW5kZXgu
CisgICAgdW5zaWduZWQgZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsK
KworICAgIEJhc2ljQmxvY2sqIGZpbmROZXh0QmxvY2soQmFzaWNCbG9jayopIGNvbnN0OworCisg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgOiBtX2NvZGUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBDb2RlJiBjb2RlLCB1
bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2RlKCZjb2RlKQorICAgICAgICAgICAg
LCBtX2luZGV4KG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCkpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2NvZGUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAg
ICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2lu
ZGV4ID0gbV9jb2RlLT5maW5kRmlyc3RCbG9ja0luZGV4KG1faW5kZXggKyAxKTsKKyAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIGNvbnN0IENvZGUqIG1fY29kZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsK
KyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgc2l6ZSgpKTsgfQorCisgICAgY2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24geworICAg
IHB1YmxpYzoKKyAgICAgICAgU3RhY2tTbG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkK
KyAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzLnNp
emUoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NvZGUubV9zdGFja1Nsb3RzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTdGFja1Ns
b3QqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsg
fQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisg
ICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBjb2xs
ZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigm
Y29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3IqKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCht
X2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1
bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFN0YWNrU2xv
dHNDb2xsZWN0aW9uIHN0YWNrU2xvdHMoKSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVj
dGlvbigqdGhpcyk7IH0KKyAgICAKKyAgICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24geworICAg
IHB1YmxpYzoKKyAgICAgICAgU3BlY2lhbHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisg
ICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6ZSgp
OyB9CisgICAgICAgIFNwZWNpYWwqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2NvZGUubV9zcGVjaWFsc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgU3BlY2lhbCogb3BlcmF0
b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAg
ICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaXRlcmF0b3IoY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNp
Z25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikK
KyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTcGVjaWFs
c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNv
bnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNp
YWxzKCkgY29uc3QgeyByZXR1cm4gU3BlY2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAor
cHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tT
bG90czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIEND
YWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9u
dW1HUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CisgICAgdW5z
aWduZWQgbV9mcmFtZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUg
eyAwIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwor
fTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBB
aXJGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR2VuZXJp
Y0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVkQmxvY2s7CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJB
aXJIYW5kbGVDYWxsZWVTYXZlcy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgor
I2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRl
ICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBnZW5lcmF0ZShDb2Rl
JiBjb2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigp
KQorICAgICAgICB2YWxpZGF0ZShjb2RlLCAiaW5pdGlhbCIpOworCisgICAgaWYgKHNob3VsZER1
bXBJUigpKSB7CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgYWlyOlxuIik7CisgICAgICAgIGRh
dGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9w
dGltaXphdGlvbnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KKyAgICAvLyBGSVhNRTogQWRkIEFpciBv
cHRpbWl6YXRpb25zLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA0NTYKKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBhIHJlYWwg
cmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGVuLCB3ZSBjb3VsZCB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkK
KyAgICAvLyBpbiBwbGFjZSBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG9ubHkgZm9yIHRlc3Rp
bmcuCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA0NTcKKyAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7CisKKyAgICAvLyBQcmlvciB0byB0
aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFr
ZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KKyAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5
IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KKyAgICBoYW5k
bGVDYWxsZWVTYXZlcyhjb2RlKTsKKworICAgIC8vIFRoaXMgdHVybnMgYWxsIFN0YWNrIGFuZCBD
YWxsQXJnIEFyZ3MgaW50byBBZGRyIGFyZ3MgdGhhdCB1c2UgdGhlIGZyYW1lIHBvaW50ZXIuIEl0
IGRvZXMKKyAgICAvLyB0aGlzIGJ5IGZpcnN0LWZpdCBhbGxvY2F0aW5nIHN0YWNrIHNsb3RzLiBJ
dCBzaG91bGQgYmUgcHJldHR5IGRhcm4gY2xvc2UgdG8gb3B0aW1hbCwgc28gd2UKKyAgICAvLyBz
aG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHZlcnkgbXVjaC4KKyAgICBhbGxvY2F0
ZVN0YWNrKGNvZGUpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWFsbHkgaGF2ZSBhIGNv
ZGUgbGF5b3V0IG9wdGltaXphdGlvbiBoZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NzgKKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgbGF0
ZSBsaXZlbmVzcyBhbmFseXNpcyBvdmVyIHJlZ2lzdGVycyB0byBmaWxsIGluIHRoZQorICAgIC8v
IFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTExCisKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJ
UigpKQorICAgICAgICB2YWxpZGF0ZShjb2RlLCAiZmluYWwiKTsKKworICAgIGlmIChzaG91bGRE
dW1wSVIoKSkgeworICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsK
KyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICAvLyBBbmQgbm93LCB3ZSBnZW5l
cmF0ZSBjb2RlLgorICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgR2VuZXJhdGlvbkNvbnRleHQg
Y29udGV4dDsKKyAgICBjb250ZXh0LmNvZGUgPSAmY29kZTsKKyAgICBJbmRleE1hcDxCYXNpY0Js
b2NrLCBDQ2FsbEhlbHBlcnM6OkxhYmVsPiBibG9ja0xhYmVscyhjb2RlLnNpemUoKSk7CisgICAg
SW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhj
b2RlLnNpemUoKSk7CisKKyAgICBhdXRvIGxpbmsgPSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBq
dW1wLCBCYXNpY0Jsb2NrKiB0YXJnZXQpIHsKKyAgICAgICAgaWYgKGJsb2NrTGFiZWxzW3Rhcmdl
dF0uaXNTZXQoKSkgeworICAgICAgICAgICAganVtcC5saW5rVG8oYmxvY2tMYWJlbHNbdGFyZ2V0
XSwgJmppdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBibG9j
a0p1bXBzW3RhcmdldF0uYXBwZW5kKGp1bXApOworICAgIH07CisKKyAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQp
OworICAgICAgICBBU1NFUlQoYmxvY2stPnNpemUoKSA+PSAxKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmF0KGkpLmdlbmVyYXRlKGppdCwgY29udGV4
dCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGp1bXAsICFqdW1wLmlzU2V0KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXAKKyAgICAg
ICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2so
YmxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0
KCkub3Bjb2RlID09IFJldCkgeworICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGRvbid0IHJl
cHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1ZS9lcGlsb2d1ZSBpbiBBaXIsIHNvIHdlIG5lZWQgdG8K
KyAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlkZS4KKyAgICAgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBqdW1wID0gYmxvY2stPmxhc3QoKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICBm
b3IgKEluc3QmIGluc3QgOiAqYmxvY2spCisgICAgICAgICAgICBqdW1wID0gaW5zdC5nZW5lcmF0
ZShqaXQsIGNvbnRleHQpOworICAgICAgICBzd2l0Y2ggKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkp
IHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgQVNTRVJUKCFqdW1wLmlzU2V0KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGxpbmsoanVt
cCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIDI6CisgICAgICAgICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygw
KSk7CisgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpICE9IGNvZGUuZmlu
ZE5leHRCbG9jayhibG9jaykpCisgICAgICAgICAgICAgICAgbGluayhqaXQuanVtcCgpLCBibG9j
ay0+c3VjY2Vzc29yQmxvY2soMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGxhdGVQYXRoIDog
Y29udGV4dC5sYXRlUGF0aHMpCisgICAgICAgIGxhdGVQYXRoLT5ydW4oaml0LCBjb250ZXh0KTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gKKyNkZWZp
bmUgQWlyR2VuZXJhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0
IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQor
Ly8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncywgYW5k
IHRoZW4gZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbgorLy8gQ0NhbGxIZWxwZXJz
IGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxsYmFja3MgaW4gdGhlIHN1cHBs
aWVkIGNvZGUgYXMgaXQgaXMKKy8vIGdlbmVyYXRpbmcuCit2b2lkIGdlbmVyYXRlKENvZGUmLCBD
Q2FsbEhlbHBlcnMmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKy8vIFRoaXMgaXMgZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisj
aW5jbHVkZSAiQWlyT3Bjb2RlR2VuZXJhdGVkLmgiCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGlvbkNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyR2VuZXJhdGlvbkNvbnRleHRfaAorI2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2Vu
ZXJhdGlvbkNvbnRleHQgeworICAgIHR5cGVkZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxs
SGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExh
dGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+
IGxhdGVQYXRoczsKKyAgICBDb2RlKiBjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdl
bmVyYXRpb25Db250ZXh0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2Rl
LmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29w
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K3ZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBo
YXNlU2NvcGUoY29kZSwgImhhbmRsZUNhbGxlZVNhdmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1
c2VkQ2FsbGVlU2F2ZXM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewor
ICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGluc3QuZm9y
RWFjaFRtcEZhc3QoCisgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBBdCBmaXJzdCB3ZSBqdXN0IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAg
ICAgICAgICAgICAgICAgICB1c2VkQ2FsbGVlU2F2ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRv
IHJlYWxseSBnZXQgdGhlIGNhbGxlZSBzYXZlcy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVy
KFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCisgICAgaWYgKCF1c2VkQ2Fs
bGVlU2F2ZXMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2Fs
bGVlU2F2ZXMpOworCisgICAgc2l6ZV90IGJ5dGVTaXplID0gMDsKKyAgICBmb3IgKGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpCisgICAg
ICAgIGJ5dGVTaXplID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigtZW50cnkub2Zmc2V0
KCkpLCBieXRlU2l6ZSk7CisKKyAgICBTdGFja1Nsb3QqIHNhdmVzQXJlYSA9IGNvZGUuYWRkU3Rh
Y2tTbG90KGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIC8vIFRoaXMgaXMg
YSBiaXQgd2VpcmQgc2luY2Ugd2UgY291bGQgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVu
dCBzdGFjayBzbG90IHRvIHRoaXMKKyAgICAvLyBhcmVhLiBBbHNvLCBvdXIgcnVudGltZSBkb2Vz
IG5vdCByZXF1aXJlIHVzIHRvIHBpbiB0aGUgc2F2ZXMgYXJlYS4gTWF5YmUgd2Ugc2hvdWxkbid0
IHBpbiBpdD8KKyAgICBzYXZlc0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOworCisg
ICAgYXV0byBhcmdGb3IgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSAtPiBB
cmcgeworICAgICAgICByZXR1cm4gQXJnOjpzdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgp
ICsgYnl0ZVNpemUpOworICAgIH07CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNv
ZGUpOworICAgIAorICAgIC8vIEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9n
dWUuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVl
U2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAg
ICAgICAwLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIGNvZGVbMF0t
PmF0KDApLm9yaWdpbiwKKyAgICAgICAgICAgIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRy
eSkpOworICAgIH0KKyAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKworICAgIC8v
IE5vdyBpbnNlcnQgcmVzdG9yZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsK
KyAgICAgICAgaWYgKGxhc3Qub3Bjb2RlICE9IFJldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAg
ICAgICAgICAgICAgICBibG9jay0+c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1v
dmUgOiBNb3ZlRG91YmxlLCBsYXN0Lm9yaWdpbiwKKyAgICAgICAgICAgICAgICBhcmdGb3IoZW50
cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKKyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQu
ZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorI2Rl
ZmluZSBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7
CisKKy8vIFRoaXMgcGhhc2UgaWRlbnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFk
ZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUgdGhlbSBpbiB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3Vl
IHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFuZGF0b3J5IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291
bGQgYmUgY29vbCB0byBtYWtlIHRoaXMgbW9yZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xp
ZW50IGFuZCBhbHNvIG1vcmUKKy8vIHBvd2VyZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5r
IHdyYXBwaW5nOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4
CisvLyBXZSBzaG91bGQgbWFrZSB0aGlzIGludGVyYWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNh
bGxlZVNhdmVzKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckhhbmRsZUNhbGxlZVNhdmVz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0
aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFz
aWNCbG9jayogYmxvY2spCit7CisgICAgZXhlY3V0ZUluc2VydGlvbnMoYmxvY2stPm1faW5zdHMs
IG1faW5zZXJ0aW9ucyk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisjZGVmaW5lIEFpckluc2VydGlvblNldF9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0
Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2Ns
YXNzIENvZGU7CisKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248SW5zdD4gSW5zZXJ0aW9uOworCitj
bGFzcyBJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEluc2VydGlvblNldChDb2RlJiBjb2Rl
KQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBDb2RlJiBjb2Rl
KCkgeyByZXR1cm4gbV9jb2RlOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZv
aWQgYXBwZW5kSW5zZXJ0aW9uKFQmJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBtX2luc2Vy
dGlvbnMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxUPihpbnNlcnRpb24pKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgaW5zZXJ0SW5zdChzaXplX3QgaW5kZXgs
IEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihp
bmRleCwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7CisgICAgfQorICAgIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgs
IEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGluc2VydEluc3QoaW5k
ZXgsIEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0K
KworICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKik7CisKK3ByaXZhdGU6CisgICAgQ29kZSYg
bV9jb2RlOworICAgIFZlY3RvcjxJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAi
LCBsaXN0RHVtcChhcmdzKSk7CisgICAgaWYgKG9yaWdpbikgeworICAgICAgICBpZiAoYXJncy5z
aXplKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgICAgIG91dC5wcmludCgq
b3JpZ2luKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVm
aW5lIEFpckluc3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5o
IgorI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworY2xhc3MgUmVnaXN0ZXJTZXQ7
CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKwor
c3RydWN0IEdlbmVyYXRpb25Db250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBBcmdMaXN0OworCisgICAgSW5zdCgpCisgICAgICAgIDog
b3JpZ2luKG51bGxwdHIpCisgICAgICAgICwgb3Bjb2RlKE5vcCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbikKKyAgICAgICAgOiBvcmln
aW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgSW5zdChPcGNvZGUgb3Bj
b2RlLCBWYWx1ZSogb3JpZ2luLCBBcmcgYXJnLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICA6IGFyZ3N7IGFyZywgYXJndW1lbnRzLi4uIH0KKyAgICAgICAgLCBvcmlnaW4ob3JpZ2lu
KQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bj
b2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQorICAg
ICAgICA6IGFyZ3MoYXJndW1lbnRzKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAg
ICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2Rl
LCBWYWx1ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoV1RG
Ojptb3ZlKGFyZ3VtZW50cykpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBv
cGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVu
Y3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVt
IGZvciB0aGluZ3MgdGhhdAorICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRl
ZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUK
KyAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KKworICAgIC8vIFRoaXMgb25seSB3YWxr
cyB0aG9zZSBUbXBzIHRoYXQgYXJlIGV4cGxpY2l0bHkgbWVudGlvbmVkLCBhbmQgaXQgZG9lc24n
dCB0ZWxsIHlvdSB0aGVpciByb2xlCisgICAgLy8gb3IgdHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGZvciAoQXJnJiBhcmcgOiBhcmdzKQorICAgICAgICAgICAg
YXJnLmZvckVhY2hUbXBGYXN0KGZ1bmN0b3IpOworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCBF
YWNoQXJnQ2FsbGJhY2soQXJnJiwgQXJnOjpSb2xlLCBBcmc6OlR5cGUpOworICAgIAorICAgIC8v
IENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKGFyZywgcm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24g
aXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpOworCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xl
LCB0eXBlKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFj
aFRtcChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZygK
KyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlw
ZSkgeworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIGZ1bmN0b3Ip
OworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gVGhpbmcgY2FuIGJlIGVpdGhlciBB
cmcgb3IgVG1wLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9j
a3Mgc29tZSBleHRyYSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0
OworCisgICAgLy8gUmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5
IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFD
bG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgor
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVz
ZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJl
IGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVu
Y3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1
cm5zIHRydWUuCisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0
Jik7CisKKyAgICAvLyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9y
bXMgcmlnaHQgbm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8g
b3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBB
c3N1bWluZyB0aGlzIGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdp
bGwgaXQgc3RpbGwgYmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1
dCBhbiBBZGRyIHJlZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFy
Zywgb2YgY291cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0
aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNw
aWxsaW5nOworICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYg
aXQgY2FuIHJlcGxhY2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAg
IC8vIGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNo
VG1wIHRvIGRvIGEgcmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9v
bCBhZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21l
IGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIg
YmFja2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUg
anVtcCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRo
ZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBp
cyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVy
czo6SnVtcCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFyZ3M7Cisg
ICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBm
cm9tLgorICAgIE9wY29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gK
KyNkZWZpbmUgQWlySW5zdElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFp
clNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9y
RWFjaDxUbXA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2
b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGluc3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBz
dHJ1Y3QgRm9yRWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHN0YXRpYyB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgSW5zdDo6Zm9y
RWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JF
YWNoKCp0aGlzLCBmdW5jdG9yKTsKK30KKworaW5saW5lIGJvb2wgSW5zdDo6aGFzU3BlY2lhbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGFyZ3Muc2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7
Cit9CisKK2lubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdz
KCkKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5zcGVj
aWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEluc3Q6
OnJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7
CisgICAgQVNTRVJUKGhhc1NwZWNpYWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9y
dFVzZWRSZWdpc3RlcnMoKnRoaXMsIHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBp
c1NoaWZ0VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2
XzY0KQorICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluc3QpOworICAgIHJldHVybiB0cnVlOworI2VuZGlm
Cit9ICAgCisKK2lubGluZSBib29sIGlzTHNoaWZ0MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0KQor
eworICAgIHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJJbnN0SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxpdmVuZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVz
c19oCisjZGVmaW5lIEFpckxpdmVuZXNzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUg
IkIzSW5kZXhTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCisvLyBZb3UgY2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVy
IEFyZydzLiBJZiB5b3UgY29tcHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNr
IGxpdmVuZXNzIGFuZCB0bXAgbGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2Ns
YXNzIExpdmVuZXNzIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsK
KyAgICAgICAgbV9saXZlQXRIZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2
ZUF0VGFpbC5yZXNpemUoY29kZS5zaXplKCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxv
Y2s+IHNlZW47CisKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUg
KGNoYW5nZWQpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAg
Zm9yIChzaXplX3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5k
ZXgtLTspCisgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChp
bnN0SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJs
b2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgp
ID09IG1fbGl2ZUF0SGVhZFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbENhbGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5k
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxv
Y2tdID0gbG9jYWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBi
bG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOwor
ICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sq
IGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107
CisgICAgfQorCisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJz
ZS4KKyAgICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxj
KExpdmVuZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1f
bGl2ZShsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xp
dmU7IH0KKyAgICAgICAgSGFzaFNldDxUaGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6
bW92ZShtX2xpdmUpOyB9CisKKyAgICAgICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGlu
c3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBB
cmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJn
LmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2xpdmUucmVtb3ZlKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8v
IE5leHQgaGFuZGxlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5o
YXNTcGVjaWFsKCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygp
LmZvckVhY2goCisgICAgICAgICAgICAgICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShUaGluZyhUbXAocmVnKSkpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3QuZm9y
RWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxp
dmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUu
YWRkKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+IG1fbGl2ZTsKKyAgICB9OworICAgIAorcHJpdmF0ZToK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRIZWFkOwor
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdFRhaWw7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQ5IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9PiB1c2Ugb2Yg
YSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBvZiBhIGdl
bmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQgZGVmIG9m
IGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ugb2YgYSBm
bG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIg
b3IgdmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZh
bHVlCisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJlZ2lzdGVy
CisjIEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9PiBUcnVzdGVkSW1tNjQK
KyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKKyMgSW5kZXgg
PT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVzcworIworIyBUaGUg
cGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVuZGVyc3RhbmRzIHRo
YXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhpbmdzLiBTbywg
YWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0aW9uIHN0eWxlLCBu
b25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJlIG1lYW5pbmdmdWwg
dG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKyMKKyMgRm9vNDIg
VTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBhcnNlciB3b3VsZCBr
bm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBVRDpGCisjICAg
ICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28tZm9ybSBpbnN0cnVj
dGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQgdXNlcytkZWZzIGEg
ZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2ZSBhIGxl
YWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9Bc3NlbWJs
ZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisKK05vcAor
CitBZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwg
VG1wCisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcK
KyAgICBJbW0sIFRtcCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAg
SW1tLCBUbXAKKyAgICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKwor
THNoaWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIg
VTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworIyBOb3RlIHRoYXQgTW92
ZSBvcGVyYXRlcyBvdmVyIHRoZSBmdWxsIHJlZ2lzdGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAz
Mi1iaXQgb3IgNjQtYml0IGRlcGVuZGluZyBvbgorIyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50
aXJlbHkgc3VyZSB0aGF0IHRoaXMgaXMgYSBnb29kIHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIg
dG8ganVzdCBoYXZlIGEKKyMgTW92ZTY0IGluc3RydWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3Nl
bWJsZXJzIGFscmVhZHkgaGF2ZSB0aGlzIG5vdGlvbiBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxs
eQorIyBtZWFucyBtb3ZlUHRyLgorTW92ZSBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1t
LCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWRQdHIgIyBUaGlzIG1l
YW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90
ICJtb3ZlIi4KKyAgICBJbmRleCwgVG1wIGFzIGxvYWRQdHIKKyAgICBUbXAsIEFkZHIgYXMgc3Rv
cmVQdHIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlUHRyCisKK01vdmUzMiBVOkcsIEQ6RworICAg
IFRtcCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRyCisgICAgQWRkciwgVG1wIGFzIGxvYWQzMgor
ICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlMzIKKyAgICBU
bXAsIEluZGV4IGFzIHN0b3JlMzIKKworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1w
CisgICAgQWRkciwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBJbmRleCwgVG1wIGFzIGxvYWREb3Vi
bGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKyAgICBUbXAsIEluZGV4IGFzIHN0b3Jl
RG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1wLCBUbXAKKworTW92ZURv
dWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAorCitCcmFuY2hBZGQzMiBVOkcsIFU6Rywg
VUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRt
cAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJl
c0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hNdWwzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisg
ICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoU3Vi
MzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVz
Q29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAs
IEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9i
cmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKworSnVtcCAvYnJhbmNoCisKK1JldCAvdGVybWluYWwK
KworQnJlYWtwb2ludCAvdGVybWluYWwKKworIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZp
b3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVj
aWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCitzcGVjaWFs
IFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFz
ZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkIzQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29wZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiBu
YW1lKQorICAgIDogbV9jb2RlKGNvZGUpCisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAo
c2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3Jl
ICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICBp
ZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9D
U3RyaW5nKGNvZGUpOworfQorCitQaGFzZVNjb3BlOjp+UGhhc2VTY29wZSgpCit7CisgICAgaWYg
KHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShtX2NvZGUs
IG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQWlyUGhhc2VTY29wZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK2NsYXNzIFBoYXNlU2NvcGUg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBoYXNlU2NvcGUpOworcHVibGljOgorICAgIFBo
YXNlU2NvcGUoQ29kZSYsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8v
IHRoaXMgZG9lcyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAg
IGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQUlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKQor
eworICAgIHN0YXRpYyBWZWN0b3I8R1BSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAg
ICBbXSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEdQUlJlZz4oKTsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCk7CisgICAgICAg
ICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAg
ICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygp
KTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAg
ICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5n
cHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAg
ICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNh
bGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVu
ZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1
cm4gKnJlc3VsdDsKK30KKworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3Jk
ZXIoKQoreworICAgIHN0YXRpYyBWZWN0b3I8RlBSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAor
ICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEZQUlJlZz4oKTsK
KyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCk7Cisg
ICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAg
IFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0
KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZnByKCkp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAg
ICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVT
YXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVn
LmZwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpy
ZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6
VHlwZSB0eXBlKQoreworICAgIHN0YXRpYyBWZWN0b3I8UmVnPiogcmVzdWx0W0FyZzo6bnVtVHlw
ZXNdOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNl
KAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpH
UF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoR1BSUmVnIHJlZyA6IGdw
cnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0tPmFw
cGVuZChSZWcocmVnKSk7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0gPSBuZXcgVmVjdG9y
PFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoRlBSUmVnIHJlZyA6IGZwcnNJblByaW9yaXR5T3Jk
ZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0tPmFwcGVuZChSZWcocmVnKSk7
CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0W3R5cGVdOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lz
dGVyUHJpb3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUmVnaXN0ZXJQ
cmlvcml0eV9oCisjZGVmaW5lIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNs
dWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+
JiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7Citjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJp
b3JpdHlPcmRlcigpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPiBzdHJ1Y3QgUmVnaXN0ZXJz
SW5Qcmlvcml0eU9yZGVyOwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEdQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8R1BSUmVnPiYgaW5Qcmlvcml0eU9yZGVy
KCkgeyByZXR1cm4gZ3Byc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8
RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZnByc0luUHJpb3JpdHlPcmRlcigp
OyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPgorY29uc3QgVmVjdG9yPHR5cGVuYW1l
IEJhbms6OlJlZ2lzdGVyVHlwZT4mIHJlZ3NJblByaW9yaXR5T3JkZXIoKQoreworICAgIHJldHVy
biBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8QmFuaz46OmluUHJpb3JpdHlPcmRlcigpOworfQor
Citjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IGNo
YXIqIGNvbnN0IFNwZWNpYWw6OmR1bXBQcmVmaXggPSAiJiI7CisKK1NwZWNpYWw6OlNwZWNpYWwo
KQorICAgIDogbV9pbmRleChVSU5UX01BWCkKK3sKK30KKworU3BlY2lhbDo6flNwZWNpYWwoKQor
eworfQorCitDU3RyaW5nIFNwZWNpYWw6Om5hbWUoKSBjb25zdAoreworICAgIFN0cmluZ1ByaW50
U3RyZWFtIG91dDsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIHJldHVybiBvdXQudG9DU3RyaW5n
KCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChkdW1wUHJlZml4KTsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIGlmICht
X2luZGV4ICE9IFVJTlRfTUFYKQorICAgICAgICBvdXQucHJpbnQobV9pbmRleCk7Cit9CisKK3Zv
aWQgU3BlY2lhbDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoKnRoaXMsICI6ICIpOworICAgIGRlZXBEdW1wSW1wbChvdXQpOworfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwZWNpYWxfaAorI2RlZmluZSBBaXJTcGVjaWFsX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBH
ZW5lcmF0aW9uQ29udGV4dDsKKworY2xhc3MgU3BlY2lhbCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU3BlY2lhbCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisgICAgCisgICAgU3BlY2lh
bCgpOworICAgIHZpcnR1YWwgflNwZWNpYWwoKTsKKworICAgIENTdHJpbmcgbmFtZSgpIGNvbnN0
OworCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJk
YTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlk
KEluc3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25l
ZCBhcmdJbmRleCkgPSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCBvbiBmb3IgZWFjaCBJ
bnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8K
KyAgICAvLyBndWFyYW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2VkIGZyb20ganVzdCBvbmUg
SW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywKKyAgICAvLyBpZiB5b3Ug
d2FudCB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5lcmF0ZSgpLCB0aGVuIHlv
dSBoYXZlIHRvIGVpdGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVyYXRlIEFpciB0aGF0IHN0
YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5zdCwgYW5kIHRoZW4gbWVy
Z2UKKyAgICAvLyAgICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBwcm9iYWJseSBub3QgZ3Jl
YXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0aGF0CisgICAgLy8gICAg
QWlyIGRpZG4ndCBkdXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVwbGljYXRpb24gZGlkbid0
IGNhdXNlIGFueSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8gICAgcmVnaXN0ZXIgYXNz
aWdubWVudC4KKyAgICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNpYWwgbWFpbnRhaW4gYSBI
YXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYW5hbHlz
aXMKKyAgICAvLyAgICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlzIHBlcmZvcm1lZCBqdXN0
IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdheQorICAgIC8vICAgIGZv
ciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRvIGJlIHJlYWxsb2NhdGVk
LiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29uc3VsdCB0aGUgSGFzaE1h
cC4KKyAgICAvLworICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVzZSAoMSkgYW5kIGZpcmUg
dXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisgICAgLy8KKyAgICAvLyBO
b3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBvcnRVc2VkUmVnaXN0ZXJz
KCkgYmVpbmcgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8gYXMgZ2VuZXJhdGUoKS4g
SWYgd2UgY291bGQgcmVseSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1c3QgaGF2ZSBlYWNoIFNw
ZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBvZiBSZWdpc3RlclNldCdz
IGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0IG9yZGVyIGluCisgICAg
Ly8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5jZSBpcyB1bmxpa2VseSB0
byBjaGFuZ2Ugc2luY2UgaXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBwZXJmb3JtYW5jZSBvZiB0
aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJyZW50bHksIHdlIGRvICgx
KSBmb3IgQjMgc3RhY2ttYXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJz
KEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIENDYWxs
SGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNv
bnRleHQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2Ji
ZXJlZFJlZ3MoSW5zdCYpID0gMDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgY29uc3QgY2hhciogbV9uYW1lOwor
ICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3BlY2lhbER1bXAgeworcHVi
bGljOgorICAgIERlZXBTcGVjaWFsRHVtcChjb25zdCBTcGVjaWFsKiBzcGVjaWFsKQorICAgICAg
ICA6IG1fc3BlY2lhbChzcGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NwZWNpYWwpCisgICAg
ICAgICAgICBtX3NwZWNpYWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFNw
ZWNpYWwqIG1fc3BlY2lhbDsKK307CisKK2lubGluZSBEZWVwU3BlY2lhbER1bXAgZGVlcER1bXAo
Y29uc3QgU3BlY2lhbCogc3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVlcFNwZWNpYWxEdW1wKHNw
ZWNpYWwpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZl
cnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNs
dWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVk
ZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNp
bmNsdWRlICJCM0luZGV4TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKK3sKKyAg
ICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNwaWxsRXZlcnl0aGluZyIpOworCisgICAg
Ly8gV2Ugd2FudCB0byBrbm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9p
bnQgaW4gZXZlcnkgYmFzaWMgYmxvY2suCisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9y
PFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CisgICAgTGl2ZW5lc3M8
VG1wPiBsaXZlbmVzcyhjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
eworICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBi
bG9jayk7CisgICAgICAgIHVzZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgp
ICsgMSk7CisKKyAgICAgICAgYXV0byBzZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBp
bmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVzZWRSZWdpc3RlcnNbYmxv
Y2tdW2luZGV4XTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2FsQ2FsYy5saXZlKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAg
IHNldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICBzZXRVc2VkUmVnaXN0ZXJzKGJsb2NrLT5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAg
ICAgICAgIHNldFVzZWRSZWdpc3RlcnMoaW5zdEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAuCisgICAgVmVjdG9yPFN0
YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1UeXBlc107CisgICAgZm9yICh1bnNpZ25l
ZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyArK3R5cGVJbmRleCkg
eworICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxTdGFja1Nsb3Rz
W3R5cGVJbmRleF07CisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QXJnOjpU
eXBlPih0eXBlSW5kZXgpOworICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShjb2RlLm51bVRtcHMo
dHlwZSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29kZS5udW1UbXBzKHR5
cGUpOyB0bXBJbmRleC0tOykKKyAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0gY29k
ZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICB9CisKKyAg
ICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5z
dEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIFJlZ2lz
dGVyU2V0JiBzZXRCZWZvcmUgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXhdOworICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldEFmdGVyID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5z
dEluZGV4ICsgMV07CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRl
eCk7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgWyZdIChU
bXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9IGFsbFN0YWNrU2xv
dHNbdHlwZV1bdG1wLnRtcEluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBBcmcgYXJnID0g
QXJnOjpzdGFjayhzdGFja1Nsb3QpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8g
ZmlndXJlIG91dCBhIHJlZ2lzdGVyIHRvIHVzZS4gSG93IHdlIGRvIHRoYXQgZGVwZW5kcyBvbiB0
aGUgcm9sZS4KKyAgICAgICAgICAgICAgICAgICAgUmVnIGNob3NlblJlZzsKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpV
c2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0
eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZv
cmUuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3Jl
LnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSBy
ZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RGVmOgor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRl
cih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QWZ0ZXIuZ2V0
KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJl
Zyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2VEZWY6CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5
cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJl
ZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nl
blJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAg
ICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAgICAgICAgICBPcGNv
ZGUgbW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworCisgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxF
dmVyeXRoaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwaWxsRXZlcnl0
aGluZ19oCisjZGVmaW5lIEFpclNwaWxsRXZlcnl0aGluZ19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIENvZGU7CisKKy8vIFRoaXMgaXMgYSBwaGFzZSBmb3IgdGVzdGluZy4gSXQgYmVoYXZlcyBs
aWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGluIHRoZSBzZW5zZSB0aGF0IGl0CisvLyBlbGltaW5h
dGVzIHRlbXBvcmFyaWVzIGZyb20gdGhlIHByb2dyYW0uIEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5
IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8vIHRlbXBvcmFyaWVzLiBUaGUgcmVzdWx0aW5nIGNvZGUg
aXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVmZmljaWVudC4gVGhpcyBwaGFzZSBpcyBncmVhdCBpZiB5
b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUgaXMgYSBidWcgaW4gdGhlIHJlZ2lzdGVyIGFsbG9jYXRv
ci4gWW91IGNhbiBjb25maXJtIHRoaXMgYnkgcnVubmluZyB0aGlzCisvLyBwaGFzZSBpbnN0ZWFk
IG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisvLworLy8gTm90ZSB0aGF0IGV2ZW4gdGhvdWdo
IHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBlc3QgdGhpbmcgcG9zc2libGUsIGl0J3Mgbm90IGV2
ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1bGFybHkgZWZmaWNpZW50IHdheS4gU28sIGRvbid0
IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcgdGhpcyBwaGFzZSB0byByZWR1Y2UgY29tcGlsZXIK
Ky8vIGxhdGVuY3kuIElmIHlvdSB3YW50ZWQgdG8gZG8gdGhhdCwgeW91IHNob3VsZCBjb21lIHVw
IHdpdGggYSBjbGV2ZXIgYWxnb3JpdGhtIGluc3RlYWQgb2YgdXNpbmcKKy8vIHRoaXMgc2lsbHkg
dGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpclNwaWxsRXZlcnl0aGluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgU3RhY2tTbG90OjpzZXRP
ZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCit7CisgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1
ZTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgbV92YWx1ZS0+bV9vZmZzZXRGcm9tRlAgPSB2
YWx1ZTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgU3RhY2tTbG90
OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYnl0
ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21G
UCwgIiwga2luZCA9ICIsIG1fa2luZCk7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG91dC5w
cmludCgiLCB2YWx1ZSA9ICIsICptX3ZhbHVlKTsKK30KKworU3RhY2tTbG90OjpTdGFja1Nsb3Qo
dW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0
YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICA6IG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgLCBt
X2luZGV4KGluZGV4KQorICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUgPyB2YWx1ZS0+b2Zmc2V0
RnJvbUZQKCkgOiAwKQorICAgICwgbV9raW5kKGtpbmQpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQor
eworICAgIEFTU0VSVChieXRlU2l6ZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyU3RhY2tTbG90X2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90X2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlIDx3
dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgU3RhY2tTbG90VmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFja1Ns
b3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4OyB9CisKKyAgICB1bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGJ5dGVTaXplKCkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBpZiAo
Ynl0ZVNpemUoKSA8PSAyKQorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGlmIChieXRl
U2l6ZSgpIDw9IDQpCisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgcmV0dXJuIDg7Cisg
ICAgfQorCisgICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQorCisgICAgLy8gWmVybyBtZWFucyB0aGF0IGl0J3Mgbm90IHlldCBhc3NpZ25lZC4KKyAg
ICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsg
fQorCisgICAgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGNhbGxlZCBmcm9tIHBoYXNl
cyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24uIEJ1dCB5b3UgY2FuCisgICAgLy8gdG90YWxseSBm
b3JjZSBhIHN0YWNrIHNsb3QgdG8gbGFuZCBhdCBzb21lIG9mZnNldC4KKyAgICB2b2lkIHNldE9m
ZnNldEZyb21GUChpbnRwdHJfdCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUs
IHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSopOworICAgIAor
ICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBpbnRw
dHJfdCBtX29mZnNldEZyb21GUDsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBTdGFj
a1Nsb3RWYWx1ZSogbV92YWx1ZTsKK307CisKK2NsYXNzIERlZXBTdGFja1Nsb3REdW1wIHsKK3B1
YmxpYzoKKyAgICBEZWVwU3RhY2tTbG90RHVtcChjb25zdCBTdGFja1Nsb3QqIHNsb3QpCisgICAg
ICAgIDogbV9zbG90KHNsb3QpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc2xvdCkKKyAgICAgICAgICAg
IG1fc2xvdC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnBy
aW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgU3RhY2tTbG90KiBt
X3Nsb3Q7Cit9OworCitpbmxpbmUgRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoY29uc3QgU3Rh
Y2tTbG90KiBzbG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgVG1w
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAg
ICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGlzUmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChpc0dQKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIldG1wIiwg
Z3BUbXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmludCgi
JWZ0bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9oCisj
ZGVmaW5lIEFpclRtcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiRlBSSW5m
by5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIEFyZzsKKworLy8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBh
IHJlZ2lzdGVyLiBJdCBjYW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4gSXQg
Y2FuIGFsc28KKy8vIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0ZXIg
KGkuZS4gYSB0ZW1wb3JhcnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQorLy8gZGVs
aWJlcmF0ZWx5IHRlcnNlIG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoaXMgbmFt
ZSBhIGxvdC4KKworY2xhc3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAgICA6IG1f
dmFsdWUoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcpCisgICAg
eworICAgICAgICBpZiAocmVnKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigpKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBUbXAoY29uc3QgQXJnJik7CisKKyAgICBzdGF0aWMgVG1wIGdwVG1wRm9ySW5kZXgodW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV92YWx1ZSA9IGVuY29kZUdQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVG1wIGZwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAg
eworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQ
VG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisKKyAgICBib29s
IGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFsdWUp
OworICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNFbmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0KKworICAg
IGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQUiht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAgIH0KKwor
ICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQUiht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVybiBmcHIo
KTsKKyAgICB9CisKKyAgICBib29sIGhhc1RtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhaXNSZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBk
ZWNvZGVGUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1w
SW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBib29s
IGlzQWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRoaXM7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKKworICAgIFRtcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisg
ICAgICAgIDogbV92YWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgIHsK
KyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUp
OworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURjo6SW50SGFzaDxpbnQ+OjpoYXNoKG1fdmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUCh1
bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMSAtIGluZGV4OworICAgIH0K
KworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBy
ZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlbmNvZGVGUChmcHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVy
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAodW5zaWduZWQgaW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVn
aXN0ZXIoKSkgKyAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFRt
cCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUFIoTWFjcm9B
c3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4OworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzRW5jb2RlZEdQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZSA+IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlAoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc0VuY29kZWRHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5j
b2RlZEdQKHZhbHVlKSAmJiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RS
ZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFIoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiB2YWx1ZSA+
PSBlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1ZSk7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBSKHZhbHVlKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFsdWUpCisgICAgewor
ICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVy
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBSKE1hY3JvQXNzZW1i
bGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
ZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQ
VG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVHUFIoTWFjcm9Bc3Nl
bWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25l
ZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVk
RlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6
Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyAwOiBlbXB0
eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4KKyAgICAvLyBu
ZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1ZTsKK307CisK
K3N0cnVjdCBUbXBIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUbXAmIGtl
eSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFRt
cCYgYSwgY29uc3QgVG1wJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6OkIzOjpBaXI6OlRtcD4geworICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpUbXBI
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpUbXA+IDogU2ltcGxl
Q2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1wPiB7IH07CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGluZXNfaAorI2RlZmlu
ZSBBaXJUbXBJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJB
cmcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitpbmxpbmUgVG1wOjpUbXAoY29uc3QgQXJnJiBhcmcpCit7
CisgICAgKnRoaXMgPSBhcmcudG1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBJbmxp
bmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZh
bGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitjbGFz
cyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihDb2RlJiBjb2RlLCBjb25zdCBj
aGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQorICAgICAgICA6IG1fY29kZShjb2Rl
KQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVm
b3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdl
KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRp
dGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9Q
UkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0g
d2hpbGUgKGZhbHNlKQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIEhhc2hT
ZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90czsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4g
dmFsaWRCbG9ja3M7CisgICAgICAgIEhhc2hTZXQ8U3BlY2lhbCo+IHZhbGlkU3BlY2lhbHM7CisK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAgICAgICAgICAgIHZh
bGlkQmxvY2tzLmFkZChibG9jayk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogbV9j
b2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIHZhbGlkU2xvdHMuYWRkKHNsb3QpOworICAg
ICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBtX2NvZGUuc3BlY2lhbHMoKSkKKyAgICAgICAg
ICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNwZWNpYWwpOworCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4
ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAg
ICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgor
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRTbG90cy5jb250YWlucyhhcmcu
c3RhY2tTbG90KCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNwZWNp
YWw6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNwZWNpYWxzLmNvbnRh
aW5zKGFyZy5zcGVjaWFsKCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFZBTElEQVRFKGluc3QuaXNWYWxpZEZv
cm0oKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgIGlm
IChpbnN0SW5kZXggPT0gYmxvY2stPnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJs
b2NrKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSghaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2sp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
IDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bGlkQmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiSW4gIiwgKmJsb2NrKSk7CisgICAgICAg
IH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZh
aWwoCisgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3Qg
Y2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBt
ZXNzYWdlKQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAg
eworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnBy
aW50KCJBSVIgVkFMSURBVElPTiBGQUlMVVJFXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgi
ICAgICIsIGNvbmRpdGlvbiwgIiAoIiwgZmlsZW5hbWUsICI6IiwgbGluZU51bWJlciwgIilcbiIp
OworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgbWVzc2FnZSwgIlxuIik7CisgICAgICAg
ICAgICBpZiAobV93aGVuKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiICAgIER1cmluZyAi
LCBtX3doZW4sICJcbiIpOworICAgICAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9DU3Ry
aW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAg
ICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAgZGF0YUxvZygiQmVmb3JlICIs
IG1fd2hlbiwgIjpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyhtX2R1bXBCZWZvcmUpOworICAg
ICAgICB9CisgICAgICAgIGRhdGFMb2coIkF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgICAg
ICBkYXRhTG9nKG1fY29kZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7Cisg
ICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1
bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBD
b2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV93aGVuOworICAgIGNvbnN0IGNoYXIqIG1f
ZHVtcEJlZm9yZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlk
YXRlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUp
Cit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihjb2RlLCB3aGVuLCBkdW1wQmVmb3JlKTsKKyAg
ICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpclZhbGlkYXRlX2gKKyNkZWZpbmUgQWlyVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBDb2RlOworCit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVs
bHB0ciwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODQyIEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNvZGUKKyAgICBh
dHRyX3JlYWRlciA6bmFtZSwgOnNwZWNpYWwsIDpvdmVybG9hZHMKKyAgICBhdHRyX2FjY2Vzc29y
IDpraW5kCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBzcGVjaWFsKQorICAgICAgICBAbmFt
ZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBzcGVjaWFsCisgICAgICAgIEBraW5kID0gOmlu
c3QKKyAgICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBvdmVybG9hZHMgPSBbXQor
ICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQorICAgICAgICBuYW1lWzBd
LmRvd25jYXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBBcmcKKyAgICBh
dHRyX3JlYWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFsaXplKHJvbGUsIHR5cGUp
CisgICAgICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5cGUKKyAgICBlbmQKK2Vu
ZAorCitjbGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1cmUsIDpmb3Jtcwor
CisgICAgZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgQHNpZ25hdHVy
ZSA9IHNpZ25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3JtcworICAgIGVuZAorZW5kCisKK2Ns
YXNzIEtpbmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfYWNjZXNzb3IgOnNwZWNp
YWwKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAg
ICAgICBAc3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYgPT0ob3RoZXIpCisgICAg
ICAgIGlmIG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFtZSBhbmQgQHNwZWNpYWwg
PT0gb3RoZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBLaW5kLmFy
Z0tpbmRzKGtpbmQpCisgICAgICAgIGlmIGtpbmQgPT0gIkFkZHIiCisgICAgICAgICAgICBbIkFk
ZHIiLCAiU3RhY2siLCAiQ2FsbEFyZyJdCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5k
XQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBhcmdLaW5kcworICAgICAgICBLaW5k
LmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVh
ZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1l
KQorICAgICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAg
ICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDps
aW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIp
CisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGlu
ZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1l
fToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9y
ZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwg
c3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJp
bmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlz
X2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBl
bHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAor
ICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVu
ZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tv
cmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAg
ICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAj
e3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7
dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBs
ZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkK
KyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5l
bXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAg
ICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAg
ICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAg
ICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4u
bmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAv
XEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAg
d2hlbiAvXEFbLDoqXC9dLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4u
bmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIp
LnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAg
ICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQK
K2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxa
LworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLwor
ZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJ
bW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYg
aXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2lu
ZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIK
K2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1a
MC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIK
KyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxl
eChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0
b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQor
ICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50
KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAg
ICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAj
e2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisg
ICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0
cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQK
KworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJp
bmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lk
ZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVu
ZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwor
ICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3Mg
aXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisK
KyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAg
ICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1
bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYg
Y29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNl
RXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENv
bmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UK
KyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0
ID0ge30KKyAgICAgICAgCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlk
eCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIK
KyAgICAgICAgICAgICAgICBjb25zdW1lKCJzcGVjaWFsIikKKyAgICAgICAgICAgICAgICBvcGNv
ZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVd
CisKKyAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29k
ZU5hbWUsIHRydWUpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFt
ZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2Rl
TmFtZV0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisg
ICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwg
b3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIG9wY29kZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAgICAg
ICAgIGVuZAorCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAg
ICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgaXNVRCh0
b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoi
KQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcu
bmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiLyIKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3VtZSgiLyIpCisgICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW4uc3RyaW5nCisg
ICAgICAgICAgICAgICAgICAgIHdoZW4gImJyYW5jaCIKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wY29kZS5raW5kID0gOmJyYW5jaAorICAgICAgICAgICAgICAgICAgICB3aGVuICJ0ZXJtaW5h
bCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOnRlcm1pbmFsCisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkJhZCAvIGRpcmVjdGl2ZSIpCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgICAgICBhZHZhbmNlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBp
ZiBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAg
ICAgICAgICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9
IG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNb
LTFdLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNb
LTFdLnNwZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1
bWUoIioiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFs
dE5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJl
ciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWdu
YXR1cmUubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5k
ZXggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUg
PT0gIkltbTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVb
aW5kZXhdLnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlh
dGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwg
Rm9ybS5uZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1
bmxlc3MgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAg
ICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5k
CisKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWdu
YXR1cmUsIGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1
bHQKKyAgICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNl
ci5uZXcoSU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIu
cGFyc2UKKworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5h
bWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAu
cHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFt
ZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVm
IEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVu
YW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0
cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bj
b2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUg
OiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9w
Y29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91
dHAucHV0cyAifTsiCisKKyAgICBvdXRwLnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1P
cGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2Ug
V1RGIHsiCisgICAgb3V0cC5wdXRzICJjbGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5wdXRz
ICJ2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7
IgorICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorfQorCisjIEZyb20gaGVyZSBv
biwgd2UgZG9uJ3QgdHJ5IHRvIGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgc2luY2Ugd2Un
cmUgdXNpbmcgYSByZWN1cnNpdmUgcGF0dGVybgorIyBtYXRjaGVyLgorCitkZWYgbWF0Y2hGb3Jt
cyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwg
Y2FsbGJhY2spCisgICAgcmV0dXJuIGlmIGZvcm1zLmxlbmd0aCA9PSAwCisKKyAgICBpZiBmaWx0
ZXJbZm9ybXNdCisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgaWYgY29sdW1uSW5kZXgg
Pj0gZm9ybXNbMF0ua2luZHMubGVuZ3RoCisgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5n
dGggPT0gMQorICAgICAgICBjYWxsYmFja1tmb3Jtc1swXV0KKyAgICAgICAgcmV0dXJuCisgICAg
ZW5kCisgICAgCisgICAgZ3JvdXBzID0ge30KKyAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgfCBm
b3JtIHwKKyAgICAgICAga2luZCA9IGZvcm0ua2luZHNbY29sdW1uSW5kZXhdLm5hbWUKKyAgICAg
ICAgaWYgZ3JvdXBzW2tpbmRdCisgICAgICAgICAgICBncm91cHNba2luZF0gPDwgZm9ybQorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBncm91cHNba2luZF0gPSBbZm9ybV0KKyAgICAgICAgZW5k
CisgICAgfQorCisgICAgaWYgc3BlZWQgPT0gOmZhc3QgYW5kIGdyb3Vwcy5sZW5ndGggPT0gMQor
ICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXggKyAxLCBj
b2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIHJldHVybgorICAgIGVuZAor
CisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7Y29sdW1uR2V0dGVyW2NvbHVtbkluZGV4XX0pIHsi
CisgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgIHwga2V5LCB2YWx1ZSB8CisgICAgICAg
IG91dHAucHV0cyAiI2lmIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgICAg
ICBLaW5kLmFyZ0tpbmRzKGtleSkuZWFjaCB7CisgICAgICAgICAgICB8IGFyZ0tpbmQgfAorICAg
ICAgICAgICAgb3V0cC5wdXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToiCisgICAgICAgIH0KKyAg
ICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwgY29s
dW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAi
SW1tNjQiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisKK2RlZiBtYXRjaEluc3RPdmVybG9hZChv
dXRwLCBzcGVlZCwgaW5zdCkKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bjb2Rl
KSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAg
ICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBpZiBvcGNvZGUu
c3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0g
MSkgb3Igc3BlZWQgPT0gOnNhZmUpCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tp
bnN0fS0+YXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAg
b3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3Ro
fToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwg
b3ZlcmxvYWQKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0
Y2gKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAg
ICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
fQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
b3V0cC5wdXRzICJ9IgorZW5kCisgICAgCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAs
IHNwZWVkLCBpbnN0KQorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KSB7
CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFs
CisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbCwgbmlsCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgY29sdW1uSW5k
ZXggfAorICAgICAgICAgICAgICAgICIje2luc3R9LT5hcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5k
KCkiCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQor
ICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGZvcm0gfAor
ICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIG92ZXJsb2FkLmZvcm1zLCAw
LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIGVuZAorICAgIH0KK2Vu
ZAorCit3cml0ZUgoIk9wY29kZVV0aWxzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRz
ICIjaW5jbHVkZSBcIkFpckluc3QuaFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJT
cGVjaWFsLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdl
bkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRl
PHR5cGVuYW1lIFQ+IgorICAgIG91dHAucHV0cyAiaW5saW5lIFQqIG9wZ2VuSGlkZGVuUHRySWRl
bnRpdHkoVCogcG9pbnRlcikgeyByZXR1cm4gcG9pbnRlcjsgfSIKKyAgICBvdXRwLnB1dHMgIiNk
ZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYg
KG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZh
bHVlO1xcIgorICAgIG91dHAucHV0cyAifSB3aGlsZSAoZmFsc2UpIgorCisgICAgb3V0cC5wdXRz
ICJ0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5zdDo6
Zm9yRWFjaEFyZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisg
ICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9w
Y29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAg
b3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbMF0sIEFyZzo6VXNlLCBBcmc6OkdQKTsgLy8gVGhpcyBp
cyBiYXNpY2FsbHkgYm9ndXMsIGJ1dCBpdCB3b3JrcyBmIGFuYWx5c2VzIG1vZGVsIFNwZWNpYWwg
YXMgYW4gaW1tZWRpYXRlLiIKKyAgICAgICAgICAgIG91dHAucHV0cyAiYXJnc1swXS5zcGVjaWFs
KCktPmZvckVhY2hBcmcoKnRoaXMsIHNjb3BlZExhbWJkYTxFYWNoQXJnQ2FsbGJhY2s+KGZ1bmN0
b3IpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNo
X3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAgICAg
ICAgICAgcm9sZSA9IG5pbAorICAgICAgICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAgICAg
ICAgICAgICB3aGVuICJVIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKKyAg
ICAgICAgICAgICAgICB3aGVuICJVRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VE
ZWYiCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiZnVuY3RvcihhcmdzWyN7aW5kZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJnLnR5
cGV9UCk7IgorICAgICAgICAgICAgfQorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRz
ICJ9IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Igor
ICAgIG91dHAucHV0cyAiQUxXQVlTX0lOTElORSBib29sIGlzVmFsaWRGb3JtKE9wY29kZSBvcGNv
ZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRw
LnB1dHMgIkFyZzo6S2luZCBraW5kc1tzaXplb2YuLi4oQXJndW1lbnRzKV0gPSB7IGFyZ3VtZW50
cy4uLiB9OyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVz
LnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNh
c2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoc2l6ZW9mLi4u
KEFyZ3VtZW50cykpIHsiCisgICAgICAgIHVubGVzcyBvcGNvZGUuc3BlY2lhbAorICAgICAgICAg
ICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVu
Z3RofToiCisgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7IHwgY29sdW1uSW5k
ZXggfCAib3BnZW5IaWRkZW5QdHJJZGVudGl0eShraW5kcylbI3tjb2x1bW5JbmRleH1dIiB9Cisg
ICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBj
YWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAg
ICAgICAgICAgICBzcGVjaWFsID0gKG5vdCBmb3JtLmtpbmRzLmRldGVjdCB7IHwga2luZCB8IGtp
bmQuc3BlY2lhbCB9KQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVS
Tigje3NwZWNpYWx9KTsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hdGNo
Rm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRl
ciwgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAg
ICAgICB9CisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAg
ICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBvdXRw
LnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRw
LnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4g
ZmFsc2U7ICIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29s
IGlzVGVybWluYWwoT3Bjb2RlIG9wY29kZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAu
cHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAg
ICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5hbCBvciBv
cGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNv
ZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1
ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxz
ZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRw
LnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlSCgiT3Bj
b2RlR2VuZXJhdGVkIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBc
IkFpckluc3RJbmxpbmVzLmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50
U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1
dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAu
cHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bj
b2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAi
ICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmlu
dChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47Igor
ICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMg
In0gLy8gbmFtZXNwYWNlIFdURiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6Omlz
VmFsaWRGb3JtKCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9y
bShvdXRwLCA6c2FmZSwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9y
bSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlm
IChhcmdzLnNpemUoKSA8IDEpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7
IgorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAg
ICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAg
fCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRl
eF0ucm9sZQorICAgICAgICAgICAgICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhd
LnR5cGUKKyAgICAgICAgICAgICAgICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAg
ICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0
Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAg
ICAgICAgICAjIGtpbmQgaW1wbGllcyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2
YWxpZGF0ZSBpcyB0aGUgdHlwZS4gQW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMg
dG8gdmFsaWRhdGUgdGhlIHR5cGUgaWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBp
ZiBraW5kLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAo
IWFyZ3NbI3tpbmRleH1dLnRtcCgpLmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWlzI3tvcGNvZGUubmFtZX1WYWxpZCgqdGhpcykpIgor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAg
ICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRw
LnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5zaWdu
ZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAo
b3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUg
fAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAgIGlm
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgpIgor
ICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlzLCBh
cmdJbmRleCkpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhlIGFy
Z0luZGV4LgorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7IgorCisg
ICAgICAgICAgICBudW1BcmdzID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAgICAg
ICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5n
dGgKKyAgICAgICAgICAgIH0ubWF4CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFyZ3Mu
dGltZXMgeworICAgICAgICAgICAgICAgIHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlm
IGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxsIG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBvciBk
b24ndCwgYWRtaXQgYW4gYWRkcmVzcworICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRleC4g
V2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgICAg
IG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICBv
cGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwK
KyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5k
c1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVz
ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgTm90
ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdlIGVu
ZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkgdGhh
dCBBZGRyZXNzIGlzIGluYWRtaXNzaWJsZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0g
MAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7Igor
ICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgIyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAgICAg
ICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpCisK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7IiBp
ZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fk
cy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAgICAg
ICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0IHdl
IHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAg
ICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZv
cm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1O
byArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAg
ICAgICAgICAgICAgICAgICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0byBk
ZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3ZSB0
ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3JtLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJh
cmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBmb3JtcyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0g
MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVtaXQg
bm8gY29kZSwgc2luY2Ugd2UgY2Fubm90IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1z
KG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNh
bGxiYWNrKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImRlZmF1bHQ6IgorICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsi
CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAg
SW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250
ZXh0KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oaml0
KTsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oY29udGV4dCk7IgorICAgIG91dHAucHV0
cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIHJlc3VsdDsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3Jt
KG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3Jt
IHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250ZXh0
KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAg
ICAgICAgICBtZXRob2ROYW1lID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbWV0aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICAgICAg
b3V0cC5wcmludCAicmVzdWx0ID0gIgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRw
LnByaW50ICJqaXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMuZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAg
ICAgICAgICBpZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgIiwg
IgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1lCisg
ICAgICAgICAgICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9h
ZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZnBy
KCkiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIkltbSIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVk
SW1tMzIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tNjQoKSIKKyAgICAgICAg
ICAgICAgICB3aGVuICJBZGRyIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgo
KSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJSZXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAgICAg
ICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAgIH0K
KyAgICBvdXRwLnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAu
cHV0cyAicmV0dXJuIHJlc3VsdDsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRz
ICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxOTE1MzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MCw3ICsxNzAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRl
cm5hdGl2ZUZvckpldHRpc29uKCk7ICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5h
dGl2ZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5h
dGl2ZSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMuCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTE1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIAogICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IGludmFsaWQoKTsgfQotICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogCiAgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gZGVsZXRl
ZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFsbFJlZ3NJdGVyYWJsZSB7CisgICAg
cHVibGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3Io
UmVnIHJlZykKKyAgICAgICAgICAgICAgICA6IG1fcmVnSW5kZXgocmVnLmluZGV4KCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBj
b25zdCB7IHJldHVybiBSZWc6OmZyb21JbmRleChtX3JlZ0luZGV4KTsgfQorCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9yZWdJbmRleCA9IFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpLm5leHQoKS5pbmRleCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9yZWdJbmRleCA9PSBvdGhlci5tX3JlZ0lu
ZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgdW5zaWduZWQgbV9yZWdJbmRleDsKKyAgICAgICAgfTsKKworICAgICAg
ICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7
IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkp
OyB9CisgICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgeyByZXR1cm4g
QWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZh
bGlkKCkgeyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxNTM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVy
QXRPZmZzZXRMaQogICAgIGlmIChvZmZzZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkK
ICAgICAgICAgb2Zmc2V0ID0gLShzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0
ZXJzKSAqIHNpemVvZih2b2lkKikpOwogCi0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgp
OyByZWcgPD0gUmVnOjpsYXN0KCk7cmVnID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJl
ZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7
CiAgICAgICAgIGlmIChyZWdpc3RlclNldC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5k
KFJlZ2lzdGVyQXRPZmZzZXQocmVnLCBvZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBz
aXplb2Yodm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0
T2Zmc2V0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJBdE9mZnNldExpc3QuaAkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2
ICs2Niw5IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zmc2V0KiBmaW5kKFJlZykgY29uc3Q7
CiAgICAgdW5zaWduZWQgaW5kZXhPZihSZWcpIGNvbnN0OyAvLyBSZXR1cm5zIFVJTlRfTUFYIGlm
IG5vdCBmb3VuZC4KIAorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVycy5iZWdpbigpOyB9CisgICAgVmVj
dG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBtX3JlZ2lzdGVycy5lbmQoKTsgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0
T2Zmc2V0PiBtX3JlZ2lzdGVyczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlclNldC5oCShyZXZpc2lvbiAxOTE1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTMgQEAgcHVi
bGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iu
c2V0Qml0cygpKQorICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOwor
ICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVn
KTsgfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTAtMjQgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBDcmVhdGUgYSBzdXBlciByb3VnaCBwcm90b3R5
cGUgb2YgQjMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDI4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL01hdGhFeHRy
YXMuaDoKKyAgICAgICAgKFdURjo6cmFuZ2VzT3ZlcmxhcCk6IE5pY2UgdXRpbGl0eSBmb3IgY2hl
Y2tpbmcgaWYgcmFuZ2VzIG92ZXJsYXAuCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBh
IEVOQUJMRShCM19KSVQpIGZlYXR1cmUgZmxhZy4KKyAgICAgICAgKiB3dGYvU2NvcGVkTGFtYmRh
Lmg6IEFkZGVkLiBUaGlzIGFsbG93cyB1cyB0byBkbyB6ZXJvLWFsbG9jYXRpb24sIHplcm8tY29w
eSBleHRlcm4gbGFtYmRhcy4KKyAgICAgICAgKFdURjo6c2NvcGVkTGFtYmRhKToKKyAgICAgICAg
KiB3dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpjcmVhdGVTaGFyZWRUYXNrKToKKwog
MjAxNS0xMC0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZh
Y3RvciBvdXQgdGhlIGdyYXBoIG5vZGUgd29ya2xpc3RzIGZyb20gREZHIGludG8gV1RGCkluZGV4
OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTUz
OSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIFdv
cmRMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJMEZFQjNEQ0Yx
QkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRU
YXNrLmggKi87IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rv
ckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICov
OyB9OworCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCMDFCREFDRDM5
MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJEODI1MzEwMDgw
RkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdv
cmtsaXN0LmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdC
NTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkwRkY4NjA5NTFCQ0NC
RDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2lu
dGVyQ29tcGFyaXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBGRTQ0NzlCMUI3
QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0RDRTFC
QjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIz
REQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3Bl
ZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRMYW1iZGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0
IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2
N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5NDE2RUFBRkY4
MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVBQjA0MTAwMjRF
MTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFBRkY4MDAyNEUx
NDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3
NCAvKiBTY29wZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0MTIzRkYgLyog
U2VnbWVudGVkVmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEyM0ZGIC8qIFNl
bnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQxMjNGRiAvKiBT
SEExLmNwcCAqLywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFt
YmRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QjYx
QjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291
cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01h
dGhFeHRyYXMuaAkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJh
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTksNiArNDE5LDE2IEBAIGlubGluZSBUIGxlZnRTaGlm
dFdpdGhTYXR1cmF0aW9uKFQgdmFsdWUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgcmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQgbGVm
dE1heCwgVCByaWdodE1pbiwgVCByaWdodE1heCkKK3sKKyAgICBpZiAobGVmdE1pbiA8PSByaWdo
dE1pbiAmJiBsZWZ0TWF4ID49IHJpZ2h0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAocmlnaHRNaW4gPD0gbGVmdE1pbiAmJiByaWdodE1heCA+PSBsZWZ0TWluKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgog
CiAjZW5kaWYgLy8gI2lmbmRlZiBXVEZfTWF0aEV4dHJhc19oCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJl
dmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3NiwxMiArNzc2LDIwIEBACiAjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJVCAx
CiAjZW5kaWYKIAorLyogVGhlIEIzIGNvbXBpbGVyIGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNrZW5k
IHRoYXQgaXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQuIFdlIHdpbGwga2VlcCBpdCBidWlsZGluZwor
ICAgb24gRGFyd2luL3g4Ni02NCBmb3Igbm93LCB0aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2VwdCBm
b3IgdGVzdHMuICovCisjaWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQorI2RlZmluZSBFTkFC
TEVfQjNfSklUIDEKKyNlbmRpZgorCiAvKiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFp
bGFibGUsIHRoZW4gZGlzYWJsZSB1cHBlciB0aWVycyBhcyB3ZWxsOiAqLwogI2lmICFFTkFCTEUo
SklUKQotI3VuZGVmIEVOQUJMRV9ERkdfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4g
cmVkZWZpbmUgaXQuICovCi0jdW5kZWYgRU5BQkxFX0ZUTF9KSVQgICAgICAvKiBVbmRlZiBzbyB0
aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI3VuZGVm
IEVOQUJMRV9GVExfSklUCisjdW5kZWYgRU5BQkxFX0IzX0pJVAogI2RlZmluZSBFTkFCTEVfREZH
X0pJVCAwCiAjZGVmaW5lIEVOQUJMRV9GVExfSklUIDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJVCAw
CiAjZW5kaWYKIAogLyogQ291bnRzIHVzZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxp
bmcgY291bnRlcnMuIEJlIHN1cmUgdG8gYWxzbwpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVk
TGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gK
KworbmFtZXNwYWNlIFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZp
Y2llbnRseSBwYXNzIGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJp
bmcKKy8vIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUg
c2hvdWxkIGJlIGRlY2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJk
YTxNeVRoaW5ncyogKGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9l
czoKKy8vCisvLyB2b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+
KFsmXSAoaW50IHgsIFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBO
b3RlIHRoYXQgdGhpcyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRo
ZSBsYW1iZGEgaXMgb25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0g
aGVuY2UgdGhlIG5hbWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
blR5cGU+IGNsYXNzIFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlw
ZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0
VHlwZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZv
aWQqIGFyZyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9h
cmcoYXJnKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFy
Z3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9pbXBsKG1fYXJnLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7
CisgICAgfQorCitwcml2YXRlOgorICAgIFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywg
QXJndW1lbnRUeXBlcyYmLi4uKTsKKyAgICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRh
RnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJl
c3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1i
ZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBQYXNzZWRGdW5jdG9yPgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2Vk
RnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pPihpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9y
KHN0ZDo6Zm9yd2FyZDxQYXNzZWRGdW5jdG9yPihmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitw
cml2YXRlOgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVu
dCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisg
ICAgICAgICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7Cisg
ICAgfQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0
aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAg
IHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3RkOjpm
b3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6U2NvcGVkTGFtYmRhOwordXNpbmcgV1RGOjpzY29wZWRMYW1iZGE7CisKKyNlbmRp
ZiAvLyBTY29wZWRMYW1iZGFfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTE1
MzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDYgKzc5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0
b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5j
dG9yKSkKKyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3Vt
ZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwx
MSBAQCBSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9y
PihmdW5jdG9yKSk7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1l
IEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNr
KEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRh
c2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263996</attachid>
            <date>2015-10-24 18:45:56 -0700</date>
            <delta_ts>2015-10-24 19:05:46 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>611008</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MyBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6Okxvd2VyaW5nU2VsZWN0b3I6Okxvd2VyaW5nU2VsZWN0b3Ip
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjph
Y2NlcHRSb290KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdT
ZWxlY3Rvcjo6YWNjZXB0Um9vdExhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHNMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6
YWNjZXB0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dl
cmluZ1NlbGVjdG9yOjphY2NlcHRPcGVyYW5kc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlMb2FkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5QWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmVBZGRM
b2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rv
cjo6dHJ5U3RvcmVBbmRMb2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlDb25zdDMyKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6QjM6Omxvd2VyVG9BaXIpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQuCisgICAg
ICAgICogYjMvQjNNZW1vcnlWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6TWVt
b3J5VmFsdWU6On5NZW1vcnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6
ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpNZW1v
cnlWYWx1ZTo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpNZW1vcnlW
YWx1ZSk6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNPcGNvZGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjppc0NoZWNrTWF0aCk6CisgICAgICAgICogYjMvQjNPcmlnaW4uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZHVtcCk6CisgICAgICAgICogYjMvQjNPcmln
aW4uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46Ok9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpQYXRj
aHBvaW50U3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6flBh
dGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpm
b3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlk
KToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQYXRjaHBv
aW50VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6
flBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIz
OjpQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgICogYjMvQjNQaGFz
ZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQaGFzZVNjb3BlOjpQaGFzZVNj
b3BlKToKKyAgICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6On5QaGFzZVNjb3BlKToKKyAgICAg
ICAgKiBiMy9CM1BoYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQcm9jZWR1cmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJvY2VkdXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6flByb2NlZHVyZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcik6CisgICAgICAgICog
YjMvQjNQcm9jZWR1cmUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNp
emUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphdCk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpp
dGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6OmZpbmROZXh0KToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjpWYWx1ZXNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRl
cmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6VmFsdWVzQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OlZhbHVlc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OnZhbHVlcyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGQpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90
S2luZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBiMy9CM1N0YWNrU2xvdEtpbmQuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNTdGFja1Nsb3RW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6On5TdGFj
a1Nsb3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90VmFsdWUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpTdGFja1Nsb3RWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Ns
b3RWYWx1ZTo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Omtp
bmQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Om9mZnNldEZyb21GUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpTdGFja1Nsb3RWYWx1ZSk6CisgICAgICAgICog
YjMvQjNTdGFja21hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmR1
bXApOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcDo6U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6b3BhcXVlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlN0YWNrbWFwOjpzZXRPcGFxdWVJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFj
a21hcDo6b3BhcXVlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmNvbnN0cmFp
bik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xvYmJlcik6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcDo6Y2xvYmJlcmVkKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpz
ZXRHZW5lcmF0b3IpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwpOgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpTdWNjZXNzb3JDb2xsZWN0
aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OnNpemUpOgorICAg
ICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpT
dWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0
b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpiZWdpbik6Cisg
ICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAqIGIz
L0IzU3dpdGNoQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6
ZHVtcCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hD
YXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6OmNhc2VW
YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0YXJnZXQpOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoQ2FzZTo6dGFyZ2V0QmxvY2spOgorICAgICAgICAqIGIzL0IzU3dpdGNo
VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjp+U3dpdGNo
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmFwcGVuZENhc2UpOgorICAgICAgICAoSlNDOjpC
Mzo6U3dpdGNoVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjpTd2l0Y2hWYWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6
OlN3aXRjaFZhbHVlOjpudW1DYXNlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZh
bHVlOjpjYXNlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmZhbGxUaHJvdWdoKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRj
aFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoVmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6QjM6OlN3aXRjaFZhbHVlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1
ZTo6ZW5kKToKKyAgICAgICAgKiBiMy9CM1R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNUeXBlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6aXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6aXNGbG9hdCk6CisgICAgICAgIChK
U0M6OkIzOjpwb2ludGVyVHlwZSk6CisgICAgICAgICogYjMvQjNVcHNpbG9uVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M1Vwc2lsb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6
YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OnBoaSk6CisgICAgICAg
IChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OlVwc2lsb25WYWx1ZSk6CisgICAgICAgICogYjMvQjNV
c2VDb3VudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6VXNlQ291
bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6flVzZUNvdW50cyk6CisgICAgICAg
ICogYjMvQjNVc2VDb3VudHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpVc2VDb3VudHM6
Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OnZhbGlkYXRlKToKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjp+VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRp
dHkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoTm9wKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkZWVwRHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZTo6dHlwZUZvcik6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcmlnaW4pOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoaWxkKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphaXJUeXBl
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpjaGlsZHJlbik6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6RGVlcFZhbHVlRHVtcDo6RGVlcFZh
bHVlRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlSW5saW5lcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphcyk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50MzIpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
Ojphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmFzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0ludCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjphc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3RhY2ttYXApOgor
ICAgICAgICAqIGIzL0IzVmFsdWVSZXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlUmVwOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvQjNWYWx1ZVJlcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpWYWx1
ZVJlcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpzdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6c3RhY2tB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6Y29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6OmNvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjpraW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvZmZzZXRGcm9tRlApOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9mZnNldEZyb21TUCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZVJlcDo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmRvdWJsZVZhbHVl
KToKKyAgICAgICAgKiBiMy9haXI6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJBcmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpk
dW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0RlZik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjphZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpzdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Y2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNWYWxpZFNjYWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpsb2dT
Y2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aW5kZXgpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OnJlbENvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnJl
c0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnNwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmtpbmQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ltbSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbW02NCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1N0YWNr
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0NhbGxBcmcpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
UmVsQ29uZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXNDb25kKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnRtcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OnBvaW50ZXJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YmFzZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c2NhbGUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlBU
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc1R5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omdwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZwcik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Z3BUbXBJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnBUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpdGhPZmZzZXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjphc1RydXN0ZWRJbW0zMik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVz
dGVkSW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbVB0cik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjphc0Jhc2VJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
YXNSZWxhdGlvbmFsQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1Jl
c3VsdENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpC
YXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQmFzaWNCbG9jay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Js
b2NrOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6bnVt
U3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVl
cEJhc2ljQmxvY2tEdW1wOjpEZWVwQmFzaWNCbG9ja0R1bXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpk
ZWVwRHVtcCk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2Fs
bFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
Q2FsbFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNw
ZWNpYWw6OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpk
ZWVwRHVtcEltcGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaDogQWRkZWQu
CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6Q29kZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6On5Db2RlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphZGRTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjphZGRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y0NhbGxTcGVjaWFs
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OmZpbmROZXh0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZpbmRO
ZXh0QmxvY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpudW1UbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbEFyZ0FyZWFTaXpl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVxdWVzdENhbGxBcmdBcmVhU2l6ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OnNldEZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpv
cGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6Q29kZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246OlN0YWNrU2xvdHNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNr
U2xvdHNDb2xsZWN0aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
dGFja1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjpTcGVjaWFsc0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3Bl
Y2lhbHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29k
ZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciop
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzcGVjaWFscyk6CisgICAgICAgICogYjMvYWlyL0FpckZy
ZXF1ZW50ZWRCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIz
L2Fpci9BaXJHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGVk
LmNwcDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Okluc2VydGlvblNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6Y29kZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc2VydGlvblNldDo6YXBwZW5kSW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0LmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmR1bXApOgorICAgICAgICAqIGIz
L2Fpci9BaXJJbnN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpJbnN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0Ojpmb3JFYWNoVG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8VG1wPjo6Zm9yRWFjaCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8QXJnPjo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc3Q6OmZvckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpo
YXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6ZXh0cmFDbG9iYmVyZWRS
ZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzU2hpZnRWYWxpZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmlzTHNoaWZ0MzJWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6bGl2ZUF0SGVhZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpsaXZlQXRUYWlsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxDYWxjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6bGl2ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVu
ZXNzOjpMb2NhbENhbGM6OnRha2VMaXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5l
c3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJQaGFzZVNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdwcnNJblByaW9yaXR5
T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpmcHJzSW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMv
YWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPjo6aW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+Ojpp
blByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZWdzSW5Qcmlvcml0eU9y
ZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3BlY2lhbDo6flNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpuYW1l
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlNwZWNpYWw6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFNwZWNpYWxEdW1wOjpEZWVw
U3BlY2lhbER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OmR1
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAgICogYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpz
cGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0
YWNrU2xvdDo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OlN0
YWNrU2xvdCk6CisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpieXRlU2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlN0YWNrU2xvdDo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xv
dDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6dmFsdWUpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTdGFja1Nsb3Q6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkRlZXBTdGFja1Nsb3REdW1wOjpEZWVwU3RhY2tTbG90RHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkRlZXBTdGFja1Nsb3REdW1wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6Z3BUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6ZnBUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3Ig
Ym9vbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6aXNGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUFIp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRlBSKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6Z3ByKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzVG1wSW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmdwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpUbXA6OmZwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OnRtcElu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0FsaXZlKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzaCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmVuY29kZUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUZQUik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlRtcDo6ZW5jb2RlR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVu
Y29kZUZQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNFbmNvZGVkRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlBUbXApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZGVjb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZGVjb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXBIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXBJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgICogYjMvYWlyL0FpclZh
bGlkYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnZhbGlkYXRlKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmI6IEFkZGVkLgorICAgICAgICAqIGIzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYjogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpjb21waWxlQW5kUnVuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3Q0Mik6
CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogaml0
L1JlZy5oOgorICAgICAgICAoSlNDOjpSZWc6OmluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnOjpp
c1NldCk6CisgICAgICAgIChKU0M6OlJlZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6
OlJlZzo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6UmVnOjpBbGxS
ZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpSZWc6OkFs
bFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpSZWc6
OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpS
ZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6UmVnOjphbGwpOgorICAgICAgICAoSlND
OjpSZWc6OmludmFsaWQpOgorICAgICAgICAoSlNDOjpSZWc6Om9wZXJhdG9yISk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0KToKKyAgICAgICAgKiBq
aXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmVuZCk6
CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpzZXRBbnkpOgorCiAyMDE1LTEwLTI0ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgog
CiAgICAgICAgIFRlYWNoIGNyZWF0ZV9oYXNoX3RhYmxlIHRvIG9taXQgYnVpbHRpbnMgbWFjcm9z
IHdoZW4gZ2VuZXJhdGluZyB0YWJsZXMgZm9yIG5hdGl2ZS1vbmx5IG9iamVjdHMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxOTE1Mzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsNyBAQCBWUEFUSCA9IFwKIAogUFlUSE9OID0gcHl0aG9uCiBQRVJM
ID0gcGVybAorUlVCWSA9IHJ1YnkKIAogSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIgPSAkKEph
dmFTY3JpcHRDb3JlKS9TY3JpcHRzCiAKQEAgLTU5LDYgKzYwLDEzIEBAIGFsbCA6IFwKICAgICBM
ZXhlci5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5oIFwKICAgICBSZWdFeHBKaXRUYWJsZXMu
aCBcCisgICAgQjNMb3dlcmluZ01hdGNoZXIuaCBcCisgICAgQjNBZGRyZXNzTWF0Y2hlci5oIFwK
KyAgICBCM0NvbXBhcmlzb25NYXRjaGVyLmggXAorICAgIEFpck9wY29kZS5oIFwKKyAgICBBaXJP
cGNvZGUuY3BwIFwKKyAgICBBaXJPcGNvZGVVdGlscy5oIFwKKyAgICBBaXJPcGNvZGVVdGlscy5j
cHAgXAogIwogCiAjIEphdmFTY3JpcHQgYnVpbHRpbnMuCkBAIC0yNjIsNiArMjcwLDIyIEBAIElO
UFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUyA9IFwKIEpTUmVwbGF5SW5wdXRzLmggOiAkKElO
UFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBVVF9HRU5FUkFUT1JfU0NSSVBUUykK
IAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
clJlcGxheUlucHV0cy5weSAtLW91dHB1dERpciAuIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3Jl
ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQogCitCM0xvd2VyaW5nTWF0Y2hlci5o
OiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZh
U2NyaXB0Q29yZSkvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReIAor
QjNBZGRyZXNzTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJu
X21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJu
cworCSQoUlVCWSkgJF4KK0IzQ29tcGFyaXNvbk1hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkv
YjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzQ29t
cGFyaXNvbk1hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReCisKK0Fpck9wY29kZS5oOiAkKEph
dmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRDb3Jl
KS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNvZGUuY3BwOiAk
KEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRD
b3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNvZGVVdGls
cy5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNv
ZGVVdGlscy5jcHA6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJi
ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworCSQoUlVCWSkgJF4K
KwogIyBEeW5hbWljYWxseS1kZWZpbmVkIHRhcmdldHMgYXJlIGxpc3RlZCBiZWxvdy4gU3RhdGlj
IHRhcmdldHMgYmVsb25nIHVwIHRvcC4KIAogYWxsIDogXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNp
ZXMgPSAoCisJCQkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNTExNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNTUxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCkBAIC02ODUsNiArNjg2LDEyMSBAQAogCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMg
LyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi87IH07
CiAJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5oICovOyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyog
TWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAq
LzsgfTsKKwkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
NDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovOyB9OworCQkwRkVDODUwMDFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2su
Y3BwICovOyB9OworCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNzFC
REFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi87IH07CisJCTBGRUM4NTAyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNC
YXNpY0Jsb2NrSW5saW5lcy5oICovOyB9OworCQkwRkVDODUwMzFCREFDREFDMDA4MEZGNzQgLyog
QjNCYXNpY0Jsb2NrVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5o
ICovOyB9OworCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQTFC
REFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi87IH07CisJCTBGRUM4NTA1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1NwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovOyB9Owor
CQkwRkVDODUwNzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJEMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUwODFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi87
IH07CisJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tb24uY3BwICovOyB9OworCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyB9OworCQkwRkVD
ODUwQjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwICovOyB9OworCQkwRkVDODUwQzFCREFDREFDMDA4MEZG
NzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5
LmggKi87IH07CisJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
MzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUw
RTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0MzJWYWx1ZS5oICovOyB9OworCQkwRkVDODUwRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5o
ICovOyB9OworCQkwRkVDODUxMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Qzkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjND
b250cm9sVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJl
cXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICov
OyB9OworCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0MxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLzsgfTsKKwkJMEZFQzg1MTcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNG
cmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovOyB9OworCQkw
RkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJhdGUuaCAqLzsgfTsKKwkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxQjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1h
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLzsgfTsKKwkJMEZFQzg1MUMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0
LmggKi87IH07CisJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi87IH07CisJCTBGRUM4NTFFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuaCAqLzsgfTsKKwkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovOyB9OworCQkwRkVD
ODUyMDFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTWVtb3J5VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MjExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi87IH07CisJCTBGRUM4
NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bj
b2RlLmggKi87IH07CisJCTBGRUM4NTIzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREOTFC
REFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovOyB9OworCQkwRkVDODUyNDFCREFDREFD
MDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovOyB9
OworCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQjFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4
NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQzFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovOyB9OworCQkwRkVDODUyNzFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0
Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERjFCREFDREFD
MDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5o
ICovOyB9OworCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUu
aCAqLzsgfTsKKwkJMEZFQzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovOyB9OworCQkwRkVD
ODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNDFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja21hcC5jcHAgKi87IH07CisJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrbWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovOyB9OworCQkwRkVDODUz
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNw
ZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovOyB9OworCQkwRkVDODUzNDFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RW
YWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xv
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovOyB9OworCQkw
RkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFD
MDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CisJCTBGRUM4NTM3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoQ2FzZS5jcHAgKi87IH07CisJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRj
aENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsKKwkJMEZFQzg1
MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLzsgfTsK
KwkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMTFCREFDREFDMDA4MEZGNzQg
LyogQjNUeXBlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovOyB9OworCQkwRkVDODUzRDFCREFDREFD
MDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLzsgfTsKKwkJMEZF
Qzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1VzZUNvdW50cy5jcHAgKi87IH07CisJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi87IH07CisJCTBG
RUM4NTQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07CisJCTBGRUM4
NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTQ1MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVz
LmggKi87IH07CisJCTBGRUM4NTQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDcxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmgg
Ki87IH07CisJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ4
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NkUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBbGxvY2F0ZVN0YWNrLmggKi87IH07CisJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi87IH07CisJCTBGRUM4
NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
aCAqLzsgfTsKKwkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovOyB9OworCQkwRkVDODU3MjFC
REFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJh
c2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxs
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLzsgfTsK
KwkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovOyB9OworCQkwRkVDODU3NTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi87IH07
CisJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MTFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ29kZS5oICovOyB9OworCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJl
cXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi87
IH07CisJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MzFCREFDREM3
MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovOyB9OworCQkwRkVDODU3OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICov
OyB9OworCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU1
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovOyB9OworCQkwRkVD
ODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLzsgfTsKKwkJMEZFQzg1N0MxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NzFCREFDREM3MDA4MEZGNzQgLyog
QWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLzsgfTsKKwkJMEZFQzg1N0QxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU1ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0
LmNwcCAqLzsgfTsKKwkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1
NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovOyB9OworCQkwRkVDODU3
RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dC5jcHAgKi87IH07CisJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QjFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovOyB9OworCQkwRkVDODU4MTFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5o
ICovOyB9OworCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVEMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovOyB9OworCQkwRkVDODU4MzFCREFDREM3MDA4
MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5jcHAgKi87IH07CisJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovOyB9OworCQkwRkVDODU4NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MDFCREFDREM3MDA4MEZGNzQg
LyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi87IH07CisJCTBGRUM4NTg2MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0
ZXJQcmlvcml0eS5oICovOyB9OworCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4
NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BlY2lhbC5oICovOyB9OworCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxF
dmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICov
OyB9OworCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi87IH07CisJCTBGRUM4NThC
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clN0YWNrU2xvdC5jcHAgKi87IH07CisJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
dGFja1Nsb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLzsgfTsKKwkJMEZF
Qzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2ODFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wLmNwcCAqLzsgfTsKKwkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovOyB9OworCQkwRkVDODU4RjFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElubGluZXMuaCAq
LzsgfTsKKwkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTZCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTkxMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmgg
Ki87IH07CisJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1OTIxQkRC
MUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi87IH07CisJCTBGRUM4NUEzMUJEQjVD
RjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QTQxQkRCNUNGMTAwODBGRjc0IC8q
IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGRUM4NUFGMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0
YjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIy
NjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGRUQ2N0JBMUIy
NjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I4MUIyNjI1NkQwMDY2Q0Ux
NSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLzsgfTsKIAkJMEZFRTk4NDExQTg4NjVC
NzAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBW
YXJhcmdzRnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTgzOSw2ICsxOTU1LDEzIEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBG
Q0VGQUI1MTgwNUQ2MTYwMDQ3MkNFNDsKIAkJCXJlbW90ZUluZm8gPSBsbHZtRm9ySlNDOwogCQl9
OworCQkwRkVDODVCMDFCREI1RDhGMDA4MEZGNzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
ID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFs
ID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJv
eHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZFQzg1OTQxQkRCNUNGMTAw
ODBGRjc0OworCQkJcmVtb3RlSW5mbyA9IHRlc3RiMzsKKwkJfTsKIAkJMEZGOTIyRDIxNEY0NkIy
RjAwNDFBMjRFIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENv
bnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZD
MDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTI1ODAsNiArMjcwMywxMjAgQEAKIAkJ
MEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZS5jcHA7IHBhdGggPSBkZmcvREZHSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTMwMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0pJVENvZGUuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNBcmd1bWVudFJlZ1ZhbHVlLmg7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0Jhc2ljQmxvY2suY3BwOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2su
aDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2tVdGlscy5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0Jsb2NrV29ya2xpc3QuaDsgcGF0aCA9IGIzL0IzQmxvY2tXb3Jr
bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQjFCREFDREFDMDA4
MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNDaGVja1NwZWNpYWwuY3BwOyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQg
LyogQjNDaGVja1NwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjND
aGVja1NwZWNpYWwuaDsgcGF0aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDaGVja1ZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM0NoZWNr
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQ29tbW9uLmNwcDsgcGF0aCA9IGIzL0IzQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29tbW9uLmg7IHBhdGggPSBiMy9CM0Nv
bW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29tbXV0YXRpdml0eS5jcHA7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzQ29tbXV0YXRpdml0eS5oOyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
MzJWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0
MzJWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0MzJWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0MzJWYWx1ZS5oOyBw
YXRoID0gYjMvQjNDb25zdDMyVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3Q2NFZhbHVlLmNwcDsgcGF0aCA9IGIz
L0IzQ29uc3Q2NFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQ29uc3Q2NFZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNzFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0RG91Ymxl
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDODFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzQ29uc3REb3VibGVWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0NvbnRyb2xWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Nv
bnRyb2xWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb250cm9sVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNGcmVxdWVuY3lD
bGFzcy5jcHA7IHBhdGggPSBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGcmVxdWVuY3lDbGFzcy5o
OyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9
IGIzL0IzRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzR2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvQjNHZW5lcmF0
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENGMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0dlbmVyYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
R2VuZXJhdGUuaDsgcGF0aCA9IGIzL0IzR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVyaWNGcmVxdWVu
dGVkQmxvY2suaDsgcGF0aCA9IGIzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0luZGV4TWFwLmg7IHBh
dGggPSBiMy9CM0luZGV4TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzSW5kZXhTZXQuaDsgcGF0aCA9IGIzL0IzSW5kZXhTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93
ZXJUb0Fpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0xvd2Vy
VG9BaXIuY3BwOyBwYXRoID0gYjMvQjNMb3dlclRvQWlyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0xvd2VyVG9BaXIuaDsgcGF0aCA9IGIz
L0IzTG93ZXJUb0Fpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENTFC
REFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM01lbW9yeVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENjFCREFDREFDMDA4
MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM01lbW9yeVZhbHVlLmg7IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09wY29kZS5jcHA7IHBh
dGggPSBiMy9CM09wY29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM09wY29kZS5oOyBwYXRoID0gYjMvQjNPcGNvZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luLmNwcDsgcGF0
aCA9IGIzL0IzT3JpZ2luLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzT3JpZ2luLmg7IHBhdGggPSBiMy9CM09yaWdpbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50
U3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BhdGNo
cG9pbnRTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50U3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Bh
dGNocG9pbnRTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1BhdGNocG9pbnRWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Bh
dGNocG9pbnRWYWx1ZS5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VT
Y29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BoYXNlU2Nv
cGUuY3BwOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL0Iz
UGhhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMTFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNQcm9jZWR1cmUuY3BwOyBwYXRoID0gYjMvQjNQcm9jZWR1cmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyog
QjNQcm9jZWR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1
cmUuaDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM1Byb2NlZHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja21hcC5jcHA7IHBhdGggPSBiMy9CM1N0YWNr
bWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNTdGFja21hcC5oOyBwYXRoID0gYjMvQjNTdGFja21hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja21hcFNwZWNp
YWwuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNp
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwu
aDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmNwcDsg
cGF0aCA9IGIzL0IzU3RhY2tTbG90S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9C
M1N0YWNrU2xvdEtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1N0
YWNrU2xvdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNTdGFja1Nsb3RWYWx1ZS5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBwYXRoID0gYjMvQjNTdWNjZXNzb3JD
b2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVEMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNTd2l0Y2hDYXNlLmNwcDsgcGF0aCA9IGIzL0IzU3dpdGNoQ2FzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTd2l0
Y2hDYXNlLmg7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTd2l0Y2hWYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM1N3aXRjaFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTd2l0Y2hWYWx1ZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMTFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzVHlwZS5jcHA7IHBhdGggPSBiMy9CM1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVHlwZS5oOyBwYXRoID0gYjMvQjNUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Vw
c2lsb25WYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25W
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Vwc2lsb25WYWx1ZS5o
OyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXNlQ291bnRzLmNwcDsgcGF0aCA9IGIzL0Iz
VXNlQ291bnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVXNlQ291bnRzLmg7IHBhdGggPSBiMy9CM1VzZUNvdW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbGlkYXRlLmNw
cDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbGlkYXRlLmg7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWUuaDsgcGF0aCA9IGIzL0IzVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVJbmxp
bmVzLmg7IHBhdGggPSBiMy9CM1ZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbHVlUmVwLmNwcDsgcGF0aCA9IGIz
L0IzVmFsdWVSZXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGRDFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1ZhbHVlUmVwLmg7IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0
ZVN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9j
YXRlU3RhY2suY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0OTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0
ZVN0YWNrLmg7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFyZy5jcHA7IHBhdGggPSBi
My9haXIvQWlyQXJnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJBcmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmFzaWNCbG9jay5jcHA7
IHBhdGggPSBiMy9haXIvQWlyQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJhc2ljQmxvY2suaDsgcGF0aCA9IGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRF
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJDQ2FsbFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5oOyBwYXRoID0gYjMvYWlyL0FpckNDYWxs
U3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJDb2RlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDb2RlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ29kZS5oOyBwYXRoID0gYjMvYWly
L0FpckNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9IGIzL2Fpci9BaXJGcmVxdWVu
dGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckdlbmVyYXRlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5l
cmF0ZS5oOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5lcmF0aW9uQ29udGV4
dC5oOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJIYW5k
bGVDYWxsZWVTYXZlcy5jcHA7IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NzFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVT
YXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1ODFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckluc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9u
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTkxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySW5z
dC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3QuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJ
bnN0SW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMaXZlbmVzcy5oOyBwYXRo
ID0gYjMvYWlyL0FpckxpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclBoYXNlU2NvcGUuY3BwOyBwYXRoID0gYjMvYWly
L0FpclBoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmg7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MDFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBBaXJSZWdpc3RlclByaW9yaXR5LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjEx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5oOyBwYXRoID0gYjMvYWlyL0Fp
clJlZ2lzdGVyUHJpb3JpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lh
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
clNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bp
bGxFdmVyeXRoaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNwaWxs
RXZlcnl0aGluZy5oOyBwYXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Rh
Y2tTbG90LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclN0YWNr
U2xvdC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tTbG90LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja1Nsb3QuaDsgcGF0aCA9
IGIzL2Fpci9BaXJTdGFja1Nsb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBaXJUbXAuY3BwOyBwYXRoID0gYjMvYWlyL0FpclRtcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJUbXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wLmg7IHBhdGgg
PSBiMy9haXIvQWlyVG1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTZB
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpclRtcElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJWYWxpZGF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVmFsaWRhdGUuaDsg
cGF0aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckdlbmVyYXRlZC5jcHA7IHBhdGggPSBiMy9h
aXIvQWlyR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdGIzOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OworCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RiMy5jcHA7IHBhdGggPSBiMy90ZXN0
YjMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNzFCMjYyNTZEMDA2
NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHBhdGggPSBk
ZmcvREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5n
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFy
YXJnc0ZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldHVwVmFyYXJn
c0ZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODAxLDYgKzQwMzgsMTUg
QEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKKwkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlp
c2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBMzFCREI1Q0YxMDA4MEZGNzQgLyogRm91
bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwRkVDODVBNDFCREI1Q0Yx
MDA4MEZGNzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJ
CQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJ
CTBGRjkyMkM2MTRGNDZCMTMwMDQxQTI0RSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0g
UEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OwpAQCAtMzg3MCw2ICs0MTE2LDcgQEAKIAkJCQkxNDEyMTEyMDBBNDg3OTNDMDA0ODAyNTUgLyog
bWluaWRvbSAqLywKIAkJCQkxNEJENTlCRjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywK
IAkJCQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKKwkJCQkwRkVD
ODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9k
dWN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zODkwLDYgKzQxMzcsNyBAQAog
CQkJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5
ICovLAogCQkJCTE0MzJFQkQ3MEEzNENBRDQwMDcxN0I5RiAvKiBBUEkgKi8sCiAJCQkJOTY4OENC
MTIwRUQxMkI0RTAwMUQ2NDlGIC8qIGFzc2VtYmxlciAqLywKKwkJCQkwRkVDODRCMjFCREFDRDVF
MDA4MEZGNzQgLyogYjMgKi8sCiAJCQkJQTU0Q0YyRUExODRFQTczOTAwMjM3RjE5IC8qIGJpbmRp
bmdzICovLAogCQkJCUE3RDgwMTlGMTg4MEQ2NkUwMDI2QzM5QiAvKiBidWlsdGlucyAqLywKIAkJ
CQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8sCkBAIC00MTAzLDYgKzQz
NTEsMTM0IEBACiAJCQluYW1lID0gZnRsOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKKwkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyog
YWlyICovLAorCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovLAorCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKKwkJCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2Nr
LmNwcCAqLywKKwkJCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmgg
Ki8sCisJCQkJMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMu
aCAqLywKKwkJCQkwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMu
aCAqLywKKwkJCQkwRkVDODRCQTFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0Lmgg
Ki8sCisJCQkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAq
LywKKwkJCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLywK
KwkJCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAqLywKKwkJ
CQkwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi8sCisJCQkJMEZF
Qzg0QkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLywKKwkJCQkwRkVDODRDMDFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLywKKwkJCQkwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLywKKwkJCQkwRkVDODRDMjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8sCisJCQkJMEZFQzg0QzMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDNDFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDNTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDY0VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0NjRWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0RG91YmxlVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0RG91YmxlVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDOTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb250cm9sVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5oICovLAorCQkJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKKwkJCQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyog
QjNGcmVxdWVuY3lDbGFzcy5oICovLAorCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5l
cmF0ZS5oICovLAorCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eE1hcC5oICovLAorCQkJCTBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0Lmgg
Ki8sCisJCQkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi8s
CisJCQkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovLAorCQkJ
CTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLywKKwkJCQkw
RkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovLAorCQkJCTBGRUM4
NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi8sCisJCQkJMEZFQzg0RDgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8sCisJCQkJMEZFQzg0RDkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3JpZ2luLmNwcCAqLywKKwkJCQkwRkVDODREQTFCREFDREFDMDA4MEZGNzQgLyog
QjNPcmlnaW4uaCAqLywKKwkJCQkwRkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50U3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0REMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0
Y2hwb2ludFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oICovLAorCQkJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BoYXNlU2NvcGUuY3BwICovLAorCQkJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuaCAqLywKKwkJCQkwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuY3BwICovLAorCQkJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovLAorCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMu
aCAqLywKKwkJCQkwRkVDODRFNDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi8s
CisJCQkJMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLywKKwkJCQkw
RkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovLAorCQkJ
CTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovLAorCQkJ
CTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovLAorCQkJ
CTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLywKKwkJCQkw
RkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLywKKwkJCQkw
RkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8sCisJ
CQkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovLAorCQkJCTBGRUM4
NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRG
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovLAorCQkJCTBGRUM4NEYxMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovLAorCQkJCTBGRUM4NEYyMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1R5cGUuaCAqLywKKwkJCQkwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNV
cHNpbG9uVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5oICovLAorCQkJCTBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNv
dW50cy5jcHAgKi8sCisJCQkJMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRz
LmggKi8sCisJCQkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICov
LAorCQkJCTBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8sCisJCQkJ
MEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEZB
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0RkIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0RkMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWVSZXAuY3BwICovLAorCQkJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbHVlUmVwLmggKi8sCisJCQkJMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3Ri
My5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IGIzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZFQzg1NDgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovLAorCQkJCTBGRUM4NTQ5MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi8sCisJCQkJMEZFQzg1NEExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFyZy5jcHAgKi8sCisJCQkJMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckFyZy5oICovLAorCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCAqLywKKwkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
ICovLAorCQkJCTBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3Bw
ICovLAorCQkJCTBGRUM4NTRGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAq
LywKKwkJCQkwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi8sCisJCQkJ
MEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCAqLywKKwkJCQkwRkVDODU1MjFC
REFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJMEZFQzg1NTMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODU1NDFCREFD
REM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLywKKwkJCQkwRkVDODU5MjFCREIxRTEwMDA4
MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLywKKwkJCQkwRkVDODU1NTFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLywKKwkJCQkwRkVDODU1NjFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovLAorCQkJCTBGRUM4NTU3MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oICovLAorCQkJCTBGRUM4NTU4MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwICovLAorCQkJCTBGRUM4NTU5MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRkVDODU1QTFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgKi8sCisJCQkJMEZFQzg1NUIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc3QuaCAqLywKKwkJCQkwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zdElubGluZXMuaCAqLywKKwkJCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2
ZW5lc3MuaCAqLywKKwkJCQkwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5jcHAgKi8sCisJCQkJMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUu
aCAqLywKKwkJCQkwRkVDODU2MDFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0
eS5jcHAgKi8sCisJCQkJMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJp
b3JpdHkuaCAqLywKKwkJCQkwRkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5j
cHAgKi8sCisJCQkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCAqLywK
KwkJCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCAq
LywKKwkJCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmgg
Ki8sCisJCQkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8s
CisJCQkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovLAorCQkJ
CTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovLAorCQkJCTBGRUM4NTY5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLywKKwkJCQkwRkVDODU2QTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovLAorCQkJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclZhbGlkYXRlLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGFpcjsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CiAJCTBGRjQyNzJFMTU4RUJDQ0UwMDRDQjlGRiAvKiBkaXNhc3Nl
bWJsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNjA4
OSw2ICs2NDY1LDcgQEAKIAkJCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFz
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjND
MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcw
RTkxOUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQ
SUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjExNyw4ICs2NDk0LDEwIEBACiAJCQkJQTVFQTcw
RTgxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3
NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2NEIyNzIxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRj
aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRt
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUMwRTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xl
YW5PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAv
KiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMz
OUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMzMsNiArNjUx
Miw3IEBACiAJCQkJOTlEQTAwQTQxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX21vZGVsLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQTUxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5z
X3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAogCQkJCTQxREVBMTMyMUI5RjMxNjMwMDZENjVE
RCAvKiBCdWlsdGluVXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTEwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUU3Mjk0MEIx
OTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdG
Mzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKQEAgLTYxNDMsNiArNjUyMyw3IEBACiAJCQkJMEYyREQ4MEIxQUIzRDg1ODAwQkJCOEU4IC8q
IEJ5dGVjb2RlS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVj
a1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAv
KiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNG
QSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTc5LDYgKzY1NjAs
NyBAQAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAx
NzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdF
NUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk2QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTg2LDggKzY1NjgsMTAgQEAKIAkJCQkwRjZGQzc1MTE5
NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJv
b3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4QTE4QkMyMUMzMDBCRURGNzYgLyogQ29u
c29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAw
NjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxOTFC
REEwNjgwMDAzMzFCODQgLyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1M0NFMDg2MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYyMDIsNiArNjU4Niw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAwODEw
RDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEzRkEx
NDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4
RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUyNDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTYyMTMsNiArNjU5OCw3IEBACiAJCQkJOTk1OUU5MkIxQkQx
N0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTky
RkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRl
Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjMzLDYgKzY2MTksNyBAQAogCQkJCUE3
MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4
Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MDFC
REFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2
QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MjQzLDcgKzY2MzAsOSBAQAogCQkJCTBGMkREODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdB
cmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzIyMTg3NzUwNTYw
MDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4
M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1
NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MjUzLDYgKzY2NDIsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFE
QTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
RDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9j
a1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAwMTlBREE0MTAwMDZBQzcy
QSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyOTIsOCArNjY4Miwx
MCBAQAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VV
c2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkw
MTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZD
N0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRp
b25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyMyw2ICs2NzE1LDcgQEAKIAkJ
CQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NjFCREFD
REM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZl
ZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjMzMSw2
ICs2NzI0LDcgQEAKIAkJCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRH
cmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERG
R01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENEODkx
MCAvKiBERkdNaW5pZmllZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0
MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERG
R05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzQ5LDYgKzY3NDMsNyBAQAog
CQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29t
cGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5
M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRG
dXp6LmggaW4gSGVhZGVycyAqLywKQEAgLTYzNjYsNiArNjc2MSw4IEBACiAJCQkJMEZGQzkyMTYx
Qjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWly
QWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZD
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAq
LywKQEAgLTYzOTAsNiArNjc4Nyw3IEBACiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhB
MzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMxREIx
MjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjQw
MSw2ICs2Nzk5LDcgQEAKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyog
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OTZCNzMxODFCREEwNjgwMDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBp
biBIZWFkZXJzICovLApAQCAtNjQzMSw2ICs2ODMwLDcgQEAKIAkJCQkwRjU2QTFEMzE1MDAwRjM1
MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQUM3
NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtpbmQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzODE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyog
RmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OTEsNiArNjg5MSw3IEBACiAJCQkJ
MEZFQTBBMjAxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTFR5cGVkUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21C
bG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTYyODQxODhDOThENDAw
NzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM2MThC
NTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM4
MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NDk4LDggKzY4OTksMTAgQEAKIAkJCQkyQTgzNjM4QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVs
bEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDQwRTE2RjVD
RDAwQjM0NDYwIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjBGMUEwMTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzEwRkIxOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0QkZGMkMxQUQ0NzZFNzAw
MDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
RjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTM4LDYgKzY5NDEsNyBAQAogCQkJCUM0NzAz
Q0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFMDUwMTkxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFBMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MEExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQjFBQTkwOTExMDBE
MzNCMzMgLyogR2VuZXJpY09mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTAxN0I2
QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjU2Myw2ICs2OTY3LDcgQEAKIAkJCQlDMkU1MjZCRTE1
OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTdCQTYx
MDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAwQjM0NDYwIC8qIElkZW50aWZp
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIwMEEzODNEMCAvKiBJZGVu
dGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwNzYxODlCMDM4QzAwNjMz
MjMxIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjE2LDYgKzcw
MjEsNyBAQAogCQkJCUExQjlFMjNDMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTMxQjRFMENEQjAwRkMxMDI5IC8q
IEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFCOUUy
M0UxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCBp
biBIZWFkZXJzICovLAogCQkJCUExODE5M0U0MUI0RTBDREIwMEZDMTAyOSAvKiBJbnRsQ29sbGF0
b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q2RTFCNERDMTQxMDBE
Njk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3
MDFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjY0Niw2ICs3MDUyLDcgQEAKIAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBB
QkIyMTcgLyogSklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzExNUFB
ODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2
NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTkxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4
QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NTks
NiArNzA2Niw3IEBACiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCREFFQ0IxN0Y0RUExNDAwRjYx
NDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEIxNDE4NkQxQjYy
NTI3RjAwRkIyMDY4IC8qIEpTQXJyb3dGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MTgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtNjY3NSw2ICs3MDgzLDggQEAKIAkJCQk4NjVBMzBGMTEz
NTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTNDRTA4ODE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUxRTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29u
dGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJC
QzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjkwLDYgKzcxMDAs
NyBAQAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
RW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FG
MTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAq
LywKQEAgLTY3MDAsMTEgKzcxMTEsMTMgQEAKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYy
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MzkxN0U3QjFCNzkwNkZBMDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3
RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MzUsNiArNzE0OCw3IEBACiAJCQkJQTcwMDg3NDIx
N0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4
MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1
OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmlyb25tZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAv
KiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzY0LDYgKzcxNzgsNyBAQAog
CQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNp
bG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAv
KiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjAwQjVBNzE1MkJBQUE3
MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI4
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIx
LDkgKzcyMzYsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNl
cHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyog
TExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5
QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2
ODBBNTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExW
TURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcy
Q0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTY4MzYsMTIgKzcyNTMsMTQg
QEAKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBp
biBIZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2Vt
YmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIg
LyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2
MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUwNDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVy
UHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8q
IE1hY3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2
MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBD
M0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdD
QkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjcsNiArNzI4
Niw3IEBACiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBO
YXRpdmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMjExQjkwMTNE
RTAwMzQ2QjUyIC8qIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJt
aW5pc3RpY0lucHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTY4ODcsNiArNzMwNyw3IEBACiAJCQkJ
RTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1N0MxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxl
ZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MDAsMTMgKzczMjEs
MTcgQEAKIAkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTgzNDE4MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4
MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyog
UHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJB
MyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0NzFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5Qjkx
NjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5
QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5
dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MjgsMTAgKzczNTMsMTMgQEAKIAkJCQkwRkI3
RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvdGVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZs
YWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEz
RiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzkxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1
RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRl
cnMgKi8sCkBAIC02OTUyLDYgKzczODAsNyBAQAogCQkJCTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIz
MiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3RDIzRUUxODkxQjU1NDAw
MzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5
RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
NjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rv
ckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RjAxODIzNDVBRjAwQTgyRTY5
IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjk1OSw2
ICs3Mzg4LDcgQEAKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVj
dG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NTExN0VFMjc0OTAw
QUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OUVCQ0I3MEU4QzZENEEw
MDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0NDFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBCMEE5RDExQTlC
NjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDMDYx
MUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTY5ODgsNiArNzQxOCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8q
IFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2
RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTcwMDcsNiArNzQzOCw3IEBACiAJCQkJ
QkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVy
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVj
dHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKQEAgLTcwNDMsMTAgKzc0NzUsMTIg
QEAKIAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI2QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBl
b2ZUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyog
QjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4
NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REVDMTk4MzJEQzQw
MDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REYw
MTk4MzJERDYwMDdENEIxOSAvKiBUeXBlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0
QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRG
RjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfaW5w
dXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzA4NCw4ICs3NTE4LDEwIEBACiAJCQkJRkVEOTRGMkYx
NzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQy
NjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
RTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNEJGQ0U2OTEwQ0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dD
TWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJC
IC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLywKQEAgLTcxMDcsOSArNzU0Mywx
MiBAQAogCQkJCTk5NTlFOTJFMUJEMTdGQTQwMDFBQTQxMyAvKiB4eGQucGwgaW4gSGVhZGVycyAq
LywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVj
aWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWly
Q0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZF
N0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlG
RTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODExQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njcw
NEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAt
NzEzNCw2ICs3NTczLDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEZDRUZBQjYxODA1RDYx
NjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuZHluYW1pYyI7CiAJCX07CisJCTBGRUM4NTk0
MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJn
ZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZFQzg1QTgxQkRCNUNGMTAwODBGRjc0
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YjMi
ICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8q
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3Mg
Ki8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAo
CisJCQkpOworCQkJbmFtZSA9IHRlc3RiMzsKKwkJCXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSAwRkVDODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICov
OworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsK
IAkJMEZGOTIyQzMxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAq
LyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxp
c3QgPSAwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciIgKi87CkBAIC03
Mjg5LDYgKzc3NDQsNyBAQAogCQkJCTE0QkQ1OUJFMEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBp
ICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi8sCiAJCQkJNjUxMTIy
RjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJMEZFQzg1OTQxQkRCNUNG
MTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1RDZCMkE0NzE1MkI5RTE3MDA1MjMxREUgLyog
VGVzdCBUb29scyAqLywKIAkJCSk7CiAJCX07CkBAIC03NTM2LDYgKzc5OTIsMTQgQEAKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKKwkJMEZF
Qzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxl
cyA9ICgKKwkJCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OworCQl9OwogCQkwRkY5MjJDNDE0RjQ2QjEzMDA0MUEyNEUgLyogU291cmNlcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKQEAgLTc1OTEsNiArODA1NSw3IEBACiAJCQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5
IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkQxMDdFQzM3NjAw
NDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NDNCQUExNkI4ODI0
OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1i
bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBB
Uk12N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTk4LDggKzgwNjMsMTAgQEAKIAkJ
CQlBN0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIx
NzQgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyog
QjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3
MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0Yz
OUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzYyMCw4ICs4MDg3LDEwIEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAw
Qjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkVDOUJCNjFCN0VC
MDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2Fs
bEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENDFCODRG
QjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0
YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyog
Q2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjM0LDYgKzgxMDMsNyBAQAogCQkJCUE3
N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQ
cm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcx
IC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0
NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY0
MSw2ICs4MTExLDcgQEAKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xv
d1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAv
KiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVB
M0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4
R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMx
QiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NjgsNiArODEz
OSw3IEBACiAJCQkJMEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURB
QjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNE
MTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Njc3LDYgKzgxNDksNyBAQAogCQkJCTBGNjM5NDg0MTVF
NDgxMTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
OUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZF
QTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNzY4NSw2ICs4MTU4LDcgQEAKIAkJCQk4NkVDOURDNDEzMjhE
RjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDM2OTQxQUU5
Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzdBNDIzRjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc3MjIsNiArODE5Niw3IEBACiAJCQkJMkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8q
IERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMy
OERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NG
OTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyog
REZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0Ew
QkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzc2NCwxNCArODIzOSwxNyBAQAogCQkJCTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAv
KiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3
MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMzkyQzg5MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NS
RXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFRDE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNjIzNzk3MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQTE5RDBCQTdEMDBC
MUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3N0Ex
Nzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBG
NzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNF
MDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCOUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9j
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8q
IERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3ODksNiArODI2Nyw4IEBACiAJ
CQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3OTA4NTUxOUEy
OTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4
IC8qIERGR1RocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhD
QTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTc4MTYsNiArODI5Niw3IEBACiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBF
QkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlF
NDVBMjUxOEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhh
bmRsaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3
QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODYwLDYgKzgzNDEs
NyBAQAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJE
RkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMx
QjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03ODY3LDYgKzgzNDksNyBAQAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBG
VExPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjkxODdERkRFQzAwODNCNjg3
IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUFCMTgw
NEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3
M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg5OSw2ICs4Mzgy
LDcgQEAKIAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNy
ZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxM0UwNEUxNjE2NEExRjAw
REM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVy
cmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA2LDYgKzgzOTAsNyBAQAogCQkJCTlF
QTVDN0EyMTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0aWFsaXplTExWTU1hYy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5RTcyOTQwODE5MEYwMjFFMDAxQTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJ
WC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3QjFCREFDREM3
MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVj
dGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTcsNiArODQwMiw3IEBACiAJ
CQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg3MTg1Njgz
MzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdG
QSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0
Mzg5MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzk3Myw2ICs4NDU5LDcgQEAKIAkJCQk4NkZBOUU5MTE0MkJCQjJF
MDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBG
OEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU2RjFCREFDREM3MDA4MEZGNzQgLyogQWly
QXJnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QUJERjYwMEE0MzdGRUYwMEVDQ0EwMSAvKiBK
U0NhbGxiYWNrT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1N0NGNDU4MTlCRjY2NjIw
MDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4MDFBODE4ODBE
NkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTgwLDYg
Kzg0NjcsOCBAQAogCQkJCTE0N0YzOUQ2MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0NKU1ZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGQ0U0MEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNz
UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg3MThCQzFBNTYwMEJFREY3NiAvKiBK
U0NvbnNvbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTczMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2
MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0
QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcyMDI4QjYxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc5OTAsMTYgKzg0NzksMTkgQEAKIAkJCQlGRTM4NEVFNzFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlENzEwN0VDMzc2MDA0MjdBNDggLyogSlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyogSlNGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxRDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dl
clRvQWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAv
KiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGRDAwODUxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QzNBMUE1MThDMDQ5MDIwMEM5NTkzQSAvKiBK
U0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1OTQ1NTkyMTgyNDc0NDcwMENDMzg0MyAvKiBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRTkxODkxQjA3NzAwMzFDN0ZBIC8qIEpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU5RDE3QjEw
N0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTBFNEI2MzE4ODA5REQ1MDA2
OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUwM0ZBMjkxODhGMTA1OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUJGMTg1QkZBQ0MwMDdFOTVB
RCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVD
MTE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwODAxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAxOCw2ICs4NTEwLDcgQEAKIAkJCQlFMzE4
Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3Jk
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0U4RDFDMUI5MDEzQzMwMDM0NkI1MiAvKiBKU05h
dGl2ZVN0ZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTE4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjcwMDkwMERB
QzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04MDMxLDYgKzg1MjQsNyBAQAogCQkJCUUzRUY4ODc0MUI2NkRGMjMwMDNGMjZDQiAv
KiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0Qx
MTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTJD
MzdGMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk5MjhGRjNCMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxh
eUlucHV0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAx
MUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDU5LDYgKzg1NTMsNyBA
QAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJN
YXAubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNG
cmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAx
M0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4Qzky
MEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZC
NTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODA2Niw5ICs4NTYxLDEyIEBACiAJCQkJMTQ4RjIxQjAxMDdFQzU0MTAw
NDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzU3MTU5MTRBMjAw
MDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZC
NDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NEZFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3Vt
ZW50UmVnVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOEIwMTExN0NGMDc4
MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2
ODBBODE0QkE3RkFCMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgwNzcsNiArODU3NSw3IEBACiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAw
RDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlE
REUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2
ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0
YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdB
RCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkM1NjhFMDExQTIx
M0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04
MDg2LDEwICs4NTg1LDEyIEBACiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4NzM5MTdDQkU4
NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRE
RUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBN
YXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAw
QjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5
RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQzNDBBNDg0MUE5MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODEyOCwxNyArODYyOSwyMSBAQAogCQkJCTBGRjcyOUFEMTY2QUQzNUMw
MDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVl
bmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUYxNjZBRDM1QzAw
MEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1
QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOTBDQUMx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMg
LyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyRTFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
MDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxl
clByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDBEMUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlERTgxMDdFQzdFNzAwNjUwNDQ2IC8qIFByb3BlcnR5U2xvdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBREUzOUZGRjE2REQxNDRCMDAwM0NENEEgLyogUHJvcGVy
dHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxNDcsMTAgKzg2NTIsMTIgQEAKIAkJCQkw
RjE1Q0QyMjFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5
IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzNjM3QTUxQjYz
MjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZB
N0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3Vs
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVn
RXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTY0LDYgKzg2NzEsNyBAQAog
CQkJCUE1QkExNUU5MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1RUZEMDBDQzM4NDMgLyogUmVtb3RlSW5zcGVjdG9y
RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJF
NjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUwNTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RUUxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3Bl
Y3RvclhQQ0Nvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1MDE3RUUyNzQ5
MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Mjc3NzNERTFBQUY4
M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTgyLDYg
Kzg2OTAsNyBAQAogCQkJCUE1NENGMkY5MTg0RUFFREEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0Q0YyRjUxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlw
dFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REE1MTdEMTI4NTgwMDVGNUZGOSAv
KiBTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4NTFCREFDREM3
MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzkwREQ2RDE4MkY0OTk3MDA1ODg4MDcgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcyOTlEQTExN0QxMjg0ODAwNUY1RkY5IC8qIFNldFByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVFOTg0MzFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBW
YXJhcmdzRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTk2LDYgKzg3MDUsNyBAQAogCQkJ
CTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0MxRUFGMTE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3MzBCNjEzMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFs
QWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyMTFCREFDREFDMDA4MEZG
NzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUIxMDdFQzdFNzAw
NjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUMw
RUM2MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQzEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODIxMiw2ICs4NzIyLDcgQEAKIAkJCQk3MDVCNDFBRDFBNkU1
MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzA1QjQxQUYxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3lt
Ym9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0
NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgy
NDAsNiArODc1MSw3IEBACiAJCQkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVj
b3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlFRTBCRkYxQjRBRkI4NTAwMDM4NUM5IC8q
IFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2QzczNTAxQUM5
Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRTA1MDJDMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxS
ZWdpc3Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQg
LyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjU5LDYgKzg3NzEsNyBAQAogCQkJCTcwOUZC
ODY5MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzA5RkI4NkIxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFy
cmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3RDFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTBCMTQw
NDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3RTVBQjNBMTc5OUU0QjIwMEQyODMzRCAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODYzQzZEOUMxNTIxMTExQTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxp
emVVQ1MyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODI4NSw2ICs4Nzk4LDExIEBACiAJCQl0YXJn
ZXQgPSAwRkNFRkFCNTE4MDVENjE2MDA0NzJDRTQgLyogbGx2bUZvckpTQyAqLzsKIAkJCXRhcmdl
dFByb3h5ID0gMEZDRUZBQkMxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSAqLzsKIAkJfTsKKwkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0g
MEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLzsKKwkJCXRhcmdldFByb3h5ID0g
MEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJ
fTsKIAkJMEZGOTIyRDMxNEY0NkIyRjAwNDFBMjRFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8g
PSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY0NjgwQTkx
NEJBN0ZEOTAwQkZFMjcyIC8qIExMSW50IE9mZnNldHMgKi87CkBAIC04NDA5LDYgKzg5MjcsMzgg
QEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEZFQzg1QTkxQkRCNUNG
MTAwODBGRjc0IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2
NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJ
CQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsK
KwkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMw
MjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJ
bmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGRUM4NUFCMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9m
aWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVj
dXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05B
TUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJMEZFQzg1
QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIx
MzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9
IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNCMTRGNDZCMTMwMDQxQTI0RSAvKiBEZWJ1ZyAq
LyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRp
b25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUu
eGNjb25maWcgKi87CkBAIC04NzYxLDYgKzkzMTEsMTcgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rp
b247CiAJCX07CisJCTBGRUM4NUE4MUJEQjVDRjEwMDgwRkY3NCAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdGIzIiAqLyA9IHsKKwkJCWlzYSA9IFhD
Q29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTBGRUM4
NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLywKKwkJCQkwRkVDODVBQTFCREI1Q0YxMDA4
MEZGNzQgLyogUmVsZWFzZSAqLywKKwkJCQkwRkVDODVBQjFCREI1Q0YxMDA4MEZGNzQgLyogUHJv
ZmlsaW5nICovLAorCQkJCTBGRUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9uICov
LAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1
bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNBMTRGNDZC
MTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdl
dCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJh
dGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHJldmlzaW9u
IDE5MTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQVNT
RU1CTEVSKQogCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJsZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4
MTAwMDAwMDAwdWxsOwpAQCAtNDcsNSArNDksNzAgQEAgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2Fs
bFByb2JlKHN0ZDo6ZnVuYwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQoreworICAg
IHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOgorICAgICAg
ICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RFcXVhbCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QWJvdmU6CisgICAgICAgIG91dC5w
cmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZU9yRXF1YWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkJlbG93OgorICAgICAgICBvdXQu
cHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVy
OjpCZWxvd09yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dPckVxdWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbjoKKyAgICAg
ICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBN
YWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkdy
ZWF0ZXJUaGFuT3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW46CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW4iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbDoKKyAgICAg
ICAgb3V0LnByaW50KCJMZXNzVGhhbk9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
KQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93OgorICAgICAgICBvdXQucHJpbnQoIk92ZXJmbG93Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQ6CisgICAgICAgIG91dC5wcmludCgiU2lnbmVk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpQb3NpdGl2ZU9y
WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJQb3NpdGl2ZU9yWmVybyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJa
ZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
OgorICAgICAgICBvdXQucHJpbnQoIk5vblplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MTUz
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTU5Niw4ICsxNTk2LDE5IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbik7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwog
I2Vsc2UgLy8gRU5BQkxFKEFTU0VNQkxFUikKIAorbmFtZXNwYWNlIEpTQyB7CisKIC8vIElmIHRo
ZXJlIGlzIG5vIGFzc2VtYmxlciBmb3IgdGhpcyBwbGF0Zm9ybSwgYXQgbGVhc3QgYWxsb3cgY29k
ZSB0byBtYWtlIHJlZmVyZW5jZXMgdG8KIC8vIHNvbWUgb2YgdGhlIHRoaW5ncyBpdCB3b3VsZCBv
dGhlcndpc2UgZGVmaW5lLCBhbGJlaXQgd2l0aG91dCBnaXZpbmcgdGhhdCBjb2RlIGFueSB3YXkK
IC8vIG9mIGRvaW5nIGFueXRoaW5nIHVzZWZ1bC4KQEAgLTE2MTEsNiArMTYyMiw4IEBAIHB1Ymxp
YzoKICAgICBlbnVtIEZQUmVnaXN0ZXJJRCB7IE5vRlBSZWdpc3RlciB9OwogfTsKIAorfSAvLyBu
YW1lc3BhY2UgSlNDCisKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCiAjZW5kaWYgLy8g
TWFjcm9Bc3NlbWJsZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVz
c01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRj
aGVyIEFkZHJlc3NNYXRjaGVyCisKKyMgTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIEIzIGRvaW5n
IGFnZ3Jlc3NpdmUgcmVhc3NvY2lhdGlvbiBhbmQgY2Fub25jYWxpemF0aW9uIG9mIGludGVnZXIg
YWRkcy4KKyMgV2UnbGwgbmV2ZXIgc2VlIEFkZChBZGQoeCwgY29uc3QxKSwgY29uc3QyKSBiZWNh
dXNlIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlYXNzb2NpYXRlZCBpbnRvCisjIEFkZCh4
LCBjb25zdDEgKyBjb25zdDIpLiBBbHNvLCB3ZSB3aWxsIG5ldmVyIHNlZSBBZGQoY29uc3QsIHgp
LCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgY2Fub25pY2FsaXplZAorIyBpdCB0byBBZGQoeCwgY29u
c3QpLiBUaGF0IHNhaWQsIGluIHRoaXMgY29kZSB3ZSBuZXZlciBtYWtlIGFzc2VydGlvbnMgYWJv
dXQgdGhlc2Ugb3B0aW1pemF0aW9ucworIyBoYXZpbmcgYmVlbiBwZXJmb3JtZWQuIEFsc28sIHNp
bmNlIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9ucyBpbiBCMyBoYXZlIGEgYnVpbHQtaW4gb2Zm
c2V0LCB3ZQorIyBkb24ndCBuZWVkIHRvIG1hdGNoIEFkZCh4LCBjb25zdCkuIFRoYXQgd291bGQg
aGF2ZSBiZWVuIGZvbGRlZCBpbnRvIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9ucworIyBhbHJl
YWR5LiBTbywgdGhlIG9ubHkgZmFuY3kgbWF0aGluZyB0aGlzIGNhbiBkbyBpcyBqdXN0IEJhc2VJ
bmRleCBmb3Jtcy4KKworQWRkU2hpZnQxID0gQWRkKFNobChpbmRleCwgJGxvZ1NjYWxlKSwgYmFz
ZSkKK0FkZFNoaWZ0MiA9IEFkZChiYXNlLCBTaGwoaW5kZXgsICRsb2dTY2FsZSkpCisKK0FkZCA9
IEFkZChsZWZ0LCByaWdodCkKKworRGlyZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKCkKK3sKK30KKwordm9pZCBB
cmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQXJndW1lbnRSZWdWYWx1ZV9oCisjZGVmaW5lIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQXJndW1lbnRSZWdW
YWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQXJndW1lbnRSZWc7IH0KKyAgICAKKyAg
ICB+QXJndW1lbnRSZWdWYWx1ZSgpOworCisgICAgUmVnIGFyZ3VtZW50UmVnKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWc7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgQXJndW1lbnRSZWdWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdp
biwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQ
UigpID8gcG9pbnRlclR5cGUoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJl
ZykKKyAgICB7CisgICAgICAgIEFTU0VSVChyZWcuaXNTZXQoKSk7CisgICAgfQorCisgICAgUmVn
IG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Nv
bnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK0Jhc2ljQmxv
Y2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBt
X2luZGV4KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNp
Y0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZh
bHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCitib29sIEJh
c2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVy
biBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6
OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6
cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJl
cGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAg
ICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3Zv
aWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywg
IjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgQjM6OmRlZXBEdW1wKHZh
bHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2sKKyNkZWZpbmUg
QjNCYXNpY0Jsb2NrCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVu
dGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBl
ZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0
Y2hlcyBDb250cm9sVmFsdWU6OlN1Y2Nlc3Nvckxpc3QKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBkdW1wUHJlZml4OworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVMaXN0OjppdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6
Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgVmFsdWVMaXN0
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7
IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMu
bGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsg
fQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZh
bHVlVHlwZSogYXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNp
Z25lZCBudW1TdWNjZXNzb3JzKCkgY29uc3Q7CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBz
dWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayYgc3Vj
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KTsKKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNz
b3JzKCkgY29uc3Q7CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpOworCisgICAgQmFz
aWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEJhc2lj
QmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCk7CisgICAgU3VjY2Vzc29yQ29s
bGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKTsKKyAg
ICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxp
c3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVj
ZXNzb3JzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgUHJlZGVj
ZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsg
fQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNl
c3NvcnM7IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJv
b2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVwbGFjZVByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAgIGRvdWJsZSBm
cmVxdWVuY3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAg
Ly8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGlu
ZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFs
dWVMaXN0IG1fdmFsdWVzOworICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAg
ICBkb3VibGUgbV9mcmVxdWVuY3k7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgewor
cHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykK
KyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAg
ICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQmFz
aWNCbG9jayogbV9ibG9jazsKK307CisKK2lubGluZSBEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1
bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2Nr
RHVtcChibG9jayk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9jaworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKyNkZWZpbmUg
QjNCYXNpY0Jsb2NrSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJC
M1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFs
dWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUu
YWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdW5zaWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vz
c29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5u
dW1TdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBjb25zdCBGcmVxdWVudGVkQmxvY2smIEJhc2lj
QmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFz
dCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lubGluZSBG
cmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7
Cit9CisKK2lubGluZSBjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFs
dWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxp
c3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENv
bnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jayogQmFz
aWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2sqJiBC
YXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4g
c3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUgU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JCbG9ja3MoKQoreworICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxv
Y2ssIFN1Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK2lubGluZSBTdWNjZXNzb3JD
b2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxp
c3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN1
Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4o
c3VjY2Vzc29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVm
aW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChwcmVkZWNlc3NvcnMu
Y29udGFpbnMocHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcmVk
ZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3Nv
cnNbaV0gPT0gcHJlZGVjZXNzb3IpIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpLS1dID0g
cHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAgIHByZWRlY2Vzc29ycy5yZW1vdmVMYXN0
KCk7CisgICAgICAgICAgICBBU1NFUlQoIXByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3Nv
cikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBs
YWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2lj
QmxvY2sqIHRvKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3Nv
cnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgeworICAgICAgICAg
ICAgcHJlZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVjb21wdXRlcyBw
cmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KK3Rl
bXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAgLy8gQ2xlYXIg
YWxsIHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoYXV0byYgYmxvY2sgOiBibG9j
a3MpCisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisKKyAgICBHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0
OworICAgIHdvcmtsaXN0LnB1c2goYmxvY2tzWzBdLmdldCgpKTsKKyAgICB3aGlsZSAoQmFzaWNC
bG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgaWYg
KHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnBy
ZWRlY2Vzc29ycygpLmFwcGVuZChibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChi
bG9ja3NbaV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJsb2Nrc1tp
XSA9IG51bGxwdHI7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIz
QmxvY2tXb3JrbGlzdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5v
ZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0
OworCisvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFz
ICJibG9jayB3aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dp
dGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sg
d29ya2xpc3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdp
dGggdGhlIGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhp
bmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwg
Zm9yCisvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNh
c2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBp
bmRleC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9
IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2lj
QmxvY2s+PjsKKwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRl
ZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBl
ZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNp
Y0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja1dvcmts
aXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVj
aWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRl
ICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1l
c3BhY2UgeworCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBzd2l0Y2gg
KGluc3Qub3JpZ2luLT5vcGNvZGUoKSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBD
aGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAvLyBSZXNDb25kLCBUbXAsIFRt
cAorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1cm4gMTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitD
aGVja1NwZWNpYWw6OkNoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51
bUFyZ3MpCisgICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fbnVtQ2hlY2tBcmdz
KG51bUFyZ3MpCit7Cit9CisKK0NoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCit7Cit9CisK
K0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYgaW5zdCkgY29uc3QK
K3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0Lm9yaWdpbik7Cisg
ICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzaXplKG1fbnVtQ2hlY2tBcmdzKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX251bUNoZWNrQXJnczsgaS0tOykKKyAgICAgICAgaGlkZGVuQnJhbmNoLmFy
Z3NbaV0gPSBpbnN0LmFyZ3NbaSArIDFdOworICAgIHJldHVybiBoaWRkZW5CcmFuY2g7Cit9CisK
K3ZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExh
bWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBoaWRkZW5CcmFu
Y2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7CisgICAgZm9yRWFjaEFyZ0ltcGwobnVtQjNB
cmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9v
bCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaGlkZGVu
QnJhbmNoKGluc3QpLmlzVmFsaWRGb3JtKCkKKyAgICAgICAgJiYgaXNWYWxpZEltcGwobnVtQjNB
cmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOworfQorCitib29sIENoZWNrU3Bl
Y2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAg
aWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9udW1DaGVja0FyZ3MpCisgICAg
ICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3RhY2soYXJnSW5kZXggLSAxKTsK
KyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0Fy
Z3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDaGVja1Nw
ZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9u
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZmFpbCA9IGhpZGRl
bkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgIEFTU0VSVChmYWlsLmlz
U2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICBWZWN0b3I8
VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZhbHVlLT5vcGNvZGUoKSkpIHsK
KyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCkKKyAgICAgICAgICAgIHJl
cHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+b3Bjb2RlKCkg
PT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkKKyAgICAgICAgICAgIHJl
cHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbM10pKTsK
KyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1sy
XSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hl
Y2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMSkpOworICAgIH0K
KworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwg
cmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5kKAorICAgICAgICBjcmVh
dGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1bmN0aW9uPigKKyAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikgeworICAg
ICAgICAgICAgICAgIGZhaWwubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgICAgICAgICAgICAgU3RhY2ttYXA6Okdl
bmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICAgIHBhcmFtcy52YWx1ZSA9IHZh
bHVlOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAgICAg
ICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICAgICAgICAgICAgICBwYXJhbXMudXNl
ZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICAgICAgICAgICAg
ICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisgICAgICAgICAgICB9
KSk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7IC8vIEFzIGZhciBhcyBBaXIg
dGhpbmtzLCB3ZSBhcmUgbm90IGEgdGVybWluYWwuCit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpk
dW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2NoZWNr
T3Bjb2RlLCAiKCIsIG1fbnVtQ2hlY2tBcmdzLCAiKSIpOworfQorCit2b2lkIENoZWNrU3BlY2lh
bDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0aCAiLCBt
X251bUNoZWNrQXJncywgIiBhcmdzLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0No
ZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lh
bC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ugd2FudCB0byBs
b3dlciBDaGVjayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVuIHdlIHdhbnQgdG8g
cm91dGUgdGhhdCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2RlIGluc3RlYWQgb2Yg
ZG9pbmcgYW55dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNrU3BlY2lhbCB3aWxs
IHJlbWVtYmVyCisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2VsZWN0ZWQgYWxvbmcg
d2l0aCB0aGUgbnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdhbnQuIEl0CisvLyB3
aWxsIGNyZWF0ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUgYXBwcm9wcmlhdGUg
YXJncyBmcm9tIHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNhbGwgYW55IG9mIHRo
ZSBjYWxsYmFja3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFu
ZCBDaGVja011bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFyZSB0aGUgcmV2ZXJz
ZQorLy8gb2YgdGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQzMiBiLCBhKS4gRXhj
ZXB0OgorLy8gLSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBCcmFuY2hOZWczMiB4
LgorLy8gLSBDaGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwzMiBiLCBhIGJ1dCB3
ZSBwYXNzIEFueSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJs
aWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNv
ZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKKyAg
ICAvLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJh
bmNoIHRoYXQgdGhpcyB3aWxsIHVzZS4KKyAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNvbnN0
IEFpcjo6SW5zdCYpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEFp
cjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4m
KSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAg
Ym9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7
CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhp
ZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2Vu
ZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVy
czo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRp
b25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOwor
ICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1NwZWNp
YWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
Q2hlY2tWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK0NoZWNrVmFsdWU6On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9pZCBD
aGVja1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgic3RhY2ttYXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hl
Y2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrVmFsdWUgOiBwdWJsaWMgVmFs
dWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6Cisg
ICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIGNh
c2UgQ2hlY2s6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5DaGVja1Zh
bHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQg
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2tB
ZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdo
dCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbiwg
bGVmdCwgcmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7CisgICAg
ICAgIEFTU0VSVChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAgIEFTU0VS
VChvcGNvZGUgPT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9PSBD
aGVja011bCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCisgICAg
Q2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHByZWRpY2F0ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBv
cmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2sp
OworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVk
ZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBz
aG91bGREdW1wSVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSB8fCBGVEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFj
aFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQoreworICAgIHJl
dHVybiBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZh
bGlkYXRlSVIoKQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkgfHwgc2hv
dWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0
RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBo
YXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAgIHJldHVy
biBPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1v
bl9oCisjZGVmaW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitpbmxpbmUgYm9vbCBpczY0Qml0KCkgeyByZXR1cm4g
c2l6ZW9mKHZvaWQqKSA9PSA4OyB9CitpbmxpbmUgYm9vbCBpczMyQml0KCkgeyByZXR1cm4gIWlz
NjRCaXQoKTsgfQorCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJBdEVh
Y2hQaGFzZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlkYXRl
SVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM0NvbW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11
dGF0aXZpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bW11dGF0aXZpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tbXV0YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1
c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNvbW11
dGF0aXZpdHkpIHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIkNv
bW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZlOgor
ICAgICAgICBvdXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDb21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IENvbW11dGF0aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZlCit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6
Q29tbXV0YXRpdml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5z
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1h
dGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBDb21wYXJpc29uTWF0Y2hlcgor
CitUZXN0TG9hZE5vdFplcm8xID0gQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorVGVzdExvYWRO
b3RaZXJvMiA9IEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorVGVzdE5vdFplcm8gPSBBbmQobGVm
dCwgcmlnaHQpCisKK1Rlc3RMb2FkWmVybzEgPSBFcXVhbChBbmQoTG9hZChhZGRyZXNzKSwgcmln
aHQpLCAkMCkKK1Rlc3RMb2FkWmVybzIgPSBFcXVhbChBbmQobGVmdCwgTG9hZChhZGRyZXNzKSks
ICQwKQorVGVzdFplcm8gPSBFcXVhbChBbmQobGVmdCwgcmlnaHQpLCAkMCkKKworTG9hZEVxdWFs
MSA9IEVxdWFsKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorTG9hZEVxdWFsMiA9IEVxdWFsKGxlZnQs
IExvYWQoYWRkcmVzcykpCitOb3QgPSBFcXVhbCh2YWx1ZSwgJDApCitFcXVhbCA9IEVxdWFsKGxl
ZnQsIHJpZ2h0KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVl
KCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBDb25zdDMyVmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0NvbnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6On5Db25zdDY0
VmFsdWUoKQoreworfQorCit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzQ29uc3Q2NFZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0NjRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVy
biBvcGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25zdDY0VmFsdWUoKTsKKyAgICAK
KyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0VmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2
YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29u
c3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdERvdWJsZVZhbHVlIDogcHVi
bGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNv
ZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQorICAgIAorICAgIH5Db25zdERv
dWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisK
KyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBkb3Vi
bGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0RG91YmxlLCBEb3VibGUsIG9y
aWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
ZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFsdWVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29u
dHJvbFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKQoreworfQorCit2b2lk
IENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobGlzdER1bXAobV9zdWNjZXNzb3JzKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJh
c2ljQmxvY2s7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnRyb2xWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgor
ICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2Ug
T29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisg
ICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNs
YXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3dpdGNoVmFs
dWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywg
Mj4gU3VjY2Vzc29yTGlzdDsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db250cm9sVmFsdWUo
KTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nl
c3NvcnMuc2l6ZSgpOyB9CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBG
cmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNj
ZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNz
b3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICAvLyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4p
CisgICAgeworICAgIH0KKworICAgIC8vIFN1YmNsYXNzZXMgd2lsbCBwb3B1bGF0ZSB0aGlzLgor
ICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgT29wcy4KKyAgICBDb250cm9s
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9wY29kZSA9PSBPb3BzKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgUmV0
dXJuLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIHJlc3VsdCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2Rl
LCBWb2lkLCBvcmlnaW4sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0g
UmV0dXJuKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KKyAgICBDb250cm9s
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0
IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7Cisg
ICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQodGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBVc2Ug
dGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRyb2xWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAg
ICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgeWVzLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIG5v
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBCcmFuY2gpOworICAgICAgICBtX3N1
Y2Nlc3NvcnMuYXBwZW5kKHllcyk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobm8pOwor
ICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNs
YXNzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5j
eSkKK3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgeworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6
Ok5vcm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3JtYWwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6CisgICAgICAgIG91dC5wcmludCgiUmFyZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVuY3lDbGFzc19oCisjZGVm
aW5lIEIzRnJlcXVlbmN5Q2xhc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50
OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBoeXBvdGhlc2lzIGFib3V0IHRoZSBmcmVx
dWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0LiBUaGlzIGlzCisgICAgLy8gdGhl
IGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJhc2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0
aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhpcyBjb250
cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hlZCBzdXBlciByYXJlbHkuIEl0J3MgdmFs
aWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlvbnMgdGhhdCBwdW5pc2ggUmFyZSBjb2Rl
LiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRpb25zIHdoZXJlIHlvdQorICAgIC8vIGhh
dmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJlcXVlbmN5IGNsYXNzIGZyb20gYSBtZXJn
aW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAgICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVy
IGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3JtYWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJl
Y2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNoIFJhcmUgY29kZSB2ZXJ5IGJhZGx5Lgor
ICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVuY3lDbGFzc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNk
ZWZpbmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVu
dGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
R2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCisjaW5jbHVk
ZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJl
LCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBBaXI6OkNvZGUgY29kZTsKKyAgICBnZW5lcmF0
ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgQWlyOjpnZW5lcmF0ZShjb2RlLCBqaXQpOwor
fQorCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFpcjo6Q29kZSYg
Y29kZSkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShw
cm9jZWR1cmUsICJpbml0aWFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAg
ICAgZGF0YUxvZygiSW5pdGlhbCBCMzpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7
CisgICAgfQorCisgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CisKKyAg
ICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJm
aW5hbCIpOworICAgIAorICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9n
KCJCMyBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7
CisgICAgfQorCisgICAgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzR2VuZXJhdGVfaAorI2RlZmluZSBCM0dlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9
CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2Us
IGFuZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBjb2RlIGJ5IGZpcnN0CisvLyBpbnRlcm5hbGx5
IGNvbnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFuZCB0aGVuIGdlbmVyYXRpbmcgdGhhdC4KK0pT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0NhbGxIZWxwZXJzJik7
CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2Us
IGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKKy8vIHRoZSBBaXIg
dG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6Z2VuZXJhdGUoKS4gTm90ZSB0aGF0IGFuIEFpcjo6
Q29kZSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0aGUKKy8vIEIzOjpQcm9jZWR1cmUsIHNvIHlv
dSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCMzo6UHJvY2VkdXJlIG91dGxpdmVzIHRoZSBBaXI6
OkNvZGUuCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgQWlyOjpDb2RlJik7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzR2VuZXJhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBC
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEEgZnJlcXVlbnRlZCBibG9jayBp
cyBhIHR1cGxlIG9mIEJhc2ljQmxvY2sqIGFuZCBGcmVxdWVuY3lDbGFzcy4gSXQncyB1c3VhbGx5
IHVzZWQgYXMgYQorLy8gc3VjY2Vzc29yIGVkZ2UuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2lj
QmxvY2s+CitjbGFzcyBHZW5lcmljRnJlcXVlbnRlZEJsb2NrIHsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG51bGxwdHIsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSA9IEZyZXF1ZW5jeUNsYXNzOjpOb3Jt
YWwpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX2ZyZXF1ZW5jeShmcmVx
dWVuY3kpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Js
b2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAgICYmIG1fZnJlcXVlbmN5ID09IG90aGVy
Lm1fZnJlcXVlbmN5OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
KCk7CisgICAgfQorCisgICAgQmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrOyB9CisgICAgQmFzaWNCbG9jayomIGJsb2NrKCkgeyByZXR1cm4gbV9ibG9jazsgfQorICAg
IEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAgICAgICAgICAg
b3V0LnByaW50KGZyZXF1ZW5jeSgpLCAiOiIpOworICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1
bXAobV9ibG9jaykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2Nr
OworICAgIEZyZXF1ZW5jeUNsYXNzIG1fZnJlcXVlbmN5OworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
SW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRl
eE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisjZGVmaW5l
IEIzSW5kZXhNYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBt
YXAgZm9yIGtleXMgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZv
ciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3Ug
ZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIG1hcHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2
ZSB2ZXJ5CisvLyBzcGFyc2UgaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZT4KK2NsYXNzIEluZGV4TWFw
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbmRleE1hcChzaXplX3Qgc2l6ZSA9IDApCisgICAg
eworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCByZXNp
emUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7Cisg
ICAgfQorCisgICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVmFs
dWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFZlY3RvcjxW
YWx1ZT4gbV92ZWN0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0luZGV4TWFwX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJbmRleFNldF9oCisKKyNpbmNsdWRlIDx3dGYvQml0
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNldCBmb3IgdGhpbmdzIHRoYXQgaGF2
ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mg
b25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFu
eSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeSBzcGFyc2UKKy8vIGlu
ZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1ZXMuCisKKy8vIElmIHlvdSB3YW50IGEg
c2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8gSW5kZXhTZXQ8QmFzaWNCbG9jaz4uIFNvLCBUID0g
QmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbmRleFNldCB7CitwdWJs
aWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFkZChUKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAg
ICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQqIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1f
c2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4
U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAg
ICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBj
b2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAg
ICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIu
bV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAg
ICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7Cisg
ICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0
aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZv
ciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJl
KTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52
YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0
aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxl
Y3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJh
YmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRW
ZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGlu
ZXMuaCIKKyNpbmNsdWRlICJCM0FkZHJlc3NNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29tbXV0YXRpdml0eS5oIgorI2luY2x1ZGUgIkIz
SW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSAiQjNMb3dlcmlu
Z01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQaGFz
ZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50
cy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1w
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2Ug
QWlyOworCituYW1lc3BhY2UgeworCitjbGFzcyBMb3dlclRvQWlyIHsKK3B1YmxpYzoKKyAgICBM
b3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQorICAgICAgICA6IHZh
bHVlVG9UbXAocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKKyAgICAgICAgLCBibG9ja1RvQmxv
Y2socHJvY2VkdXJlLnNpemUoKSkKKyAgICAgICAgLCB1c2VDb3VudHMocHJvY2VkdXJlKQorICAg
ICAgICAsIGFkZHJlc3NTZWxlY3RvcigqdGhpcykKKyAgICAgICAgLCBsb3dlcmluZ1NlbGVjdG9y
KCp0aGlzKQorICAgICAgICAsIHByb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgY29kZShj
b2RlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3Ig
KEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZSkKKyAgICAgICAgICAgIGJsb2NrVG9C
bG9ja1tibG9ja10gPSBjb2RlLmFkZEJsb2NrKGJsb2NrLT5mcmVxdWVuY3koKSk7CisKKyAgICAg
ICAgLy8gTG93ZXIgZGVmcyBiZWZvcmUgdXNlcyBvbiBhIGdsb2JhbCBsZXZlbC4gVGhpcyBpcyBh
IGdvb2QgaGV1cmlzdGljIHRvIGxvY2sgZG93biBhCisgICAgICAgIC8vIGhvaXN0ZWQgYWRkcmVz
cyBleHByZXNzaW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBpbnRvIHRoZSBsb29wLgor
ICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZS5ibG9ja3NJblBy
ZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCisgICAgICAgICAg
ICBpbnN0cy5yZXNpemUoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3Mg
YmxvY2tzIGluIHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3JlIGRlZnMuIFRoYXQn
cyB3aGF0IGFsbG93cyB1cworICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0dGVybnMgZWZmZWN0
aXZlbHkuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgaW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAg
cnVuTG93ZXJpbmdNYXRjaGVyKGN1cnJlbnRWYWx1ZSwgbG93ZXJpbmdTZWxlY3Rvcik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4g
aW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAg
ICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
aW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDog
aW5zdHNbaV0pCisgICAgICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVu
ZEluc3QoV1RGOjptb3ZlKGluc3QpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCisgICAg
ICAgICAgICBBU1NFUlQoYmxvY2stPnN1Y2Nlc3NvcnMoKS5zaXplKCkgPD0gMik7CisgICAgICAg
ICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxv
Y2tzKCkpCisgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygp
LmFwcGVuZChibG9ja1RvQmxvY2tbc3VjY2Vzc29yXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBUbXAgdG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1wID0gdmFsdWVU
b1RtcFt2YWx1ZV07CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1wID0gY29kZS5u
ZXdUbXAoaXNJbnQodmFsdWUtPnR5cGUoKSkgPyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgICAg
IHJldHVybiB0bXA7CisgICAgfQorCisgICAgLy8gVGhpcyBnaXZlcyB5b3UgdGhlIGFkZHJlc3Mg
b2YgdGhlIGdpdmVuIExvYWQgb3IgU3RvcmUuIElmIGl0J3Mgbm90IGEgTG9hZCBvciBTdG9yZSwg
dGhlbgorICAgIC8vIGl0IHJldHVybnMgQXJnKCkuCisgICAgQXJnIGFkZHIoVmFsdWUqIG1lbW9y
eVZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIHZhbHVlID0gbWVtb3J5VmFsdWUt
PmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIEFyZygpOworCisgICAgICAgIHJ1bkFkZHJlc3NNYXRjaGVyKHZhbHVlLT5jaGlsZHJlbigp
Lmxhc3QoKSwgYWRkcmVzc1NlbGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rv
ci5zZWxlY3RlZEFkZHJlc3Mud2l0aE9mZnNldCh2YWx1ZS0+b2Zmc2V0KCkpOworICAgIH0KKwor
ICAgIEFyZyBsb2FkQWRkcihWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxv
YWRWYWx1ZS0+b3Bjb2RlKCkgPT0gTG9hZCkKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGxvYWRW
YWx1ZSk7CisgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcgaW1tKFZhbHVl
KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBBcmc6OmltbSh2YWx1ZS0+YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIEFy
ZygpOworICAgIH0KKworICAgIEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoQXJnIHJlc3VsdCA9IGltbSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICByZXR1cm4gdG1wKHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxB
aXI6Ok9wY29kZSBvcGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11
dGF0aXZlPgorICAgIHZvaWQgYXBwZW5kQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkK
KyAgICB7CisgICAgICAgIFRtcCByZXN1bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFRocmVlLW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9w
IGEsIGIsIGMKKyAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAg
IGMgPSBhIE9wIGIKKworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0g
Q29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9w
ZXJhdGlvbiBjb3VsZCBoYXZlIGFuIGltbWVkaWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAg
IGlmIChpbW0obGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1t
KGxlZnQpLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGltbShyaWdodCkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0s
IEFyZzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0o
cmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVHdvLW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAg
ICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEK
KworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9w
ZXJhdGlvbiB0aGF0IGhhdmUgYSBmdXNlZCBsb2FkIG92ZXIgdGhyZWUKKyAgICAgICAgLy8gb3Bl
cmFuZCBmb3Jtcy4KKyAgICAgICAgCisgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11
dGF0aXZlKSB7CisgICAgICAgICAgICBBcmcgbGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAg
ICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpU
bXApKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVzZSB0aGUgcmlnaHQgTW92ZSBvcGNv
ZGUuIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCAzMi1iaXQgdHlwZXMsIHdlIHNob3VsZAorICAgICAg
ICAgICAgICAgIC8vIHVzZSBNb3ZlMzIuIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBEb3VibGVzLCB3
ZSBzaG91bGQgdXNlIE1vdmVEb3VibGUuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzMworICAgICAgICAgICAgICAgIGFwcGVu
ZChNb3ZlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIGxlZnRBZGRyLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFyZyByaWdodEFkZHIgPSBsb2FkQWRkcihyaWdo
dCk7CisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5raW5kKCksIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkciwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUs
IEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCB0bXAobGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQpOwor
ICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgIH0KKworICAg
IHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5
ID0gTm90Q29tbXV0YXRpdmU+CisgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBmYWlscyB0
byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGVmZmVjdHMgYmV0d2VlbiB0aGUgTG9hZCBhbmQgdGhl
IFN0b3JlIHRoYXQKKyAgICAgICAgLy8gY291bGQgY2xvYmJlciB0aGUgbG9hZGVkIHZhbHVlLiBX
ZSBuZWVkIHRvIGNoZWNrIHN1Y2ggdGhpbmdzIGJlY2F1c2Ugd2UgYXJlIGVmZmVjdGl2ZWx5Cisg
ICAgICAgIC8vIHNpbmtpbmcgdGhlIGxvYWQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzQKKyAgICAgICAgCisgICAgICAgIEFyZyBzdG9y
ZUFkZHIgPSBhZGRyKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwor
CisgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlOworICAgICAgICBpZiAoYWRkcihsZWZ0KSA9PSBz
dG9yZUFkZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gcmlnaHQ7CisgICAgICAgIGVsc2Ug
aWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUgJiYgYWRkcihyaWdodCkgPT0gc3RvcmVB
ZGRyKQorICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwg
QXJnOjpUbXAsIHN0b3JlQWRkci5raW5kKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFpcjo6T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9w
Y29kZSwgY3VycmVudFZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KSk7CisgICAgfQorICAgIAorICAgIEluZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFy
ZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1
ZSwgVG1wPiB2YWx1ZVRvVG1wOworICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJh
c2ljQmxvY2sqPiBibG9ja1RvQmxvY2s7CisKKyAgICBVc2VDb3VudHMgdXNlQ291bnRzOworCisg
ICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gaW5zdHM7CisKKyAgICBWYWx1ZSogY3VycmVudFZh
bHVlOworCisgICAgLy8gVGhlIGFkZHJlc3Mgc2VsZWN0b3Igd2lsbCBtYXRjaCBhbnkgcGF0dGVy
biB3aGVyZSB0aGUgaW5wdXQgb3BlcmFuZHMgYXJlIGF2YWlsYWJsZSBhcyBUbXBzLgorICAgIC8v
IEl0IGRvZXNuJ3QgY2FyZSBhYm91dCBzaGFyaW5nLiBJdCB3aWxsIGhhcHBpbHkgZW1pdCB0aGUg
c2FtZSBhZGRyZXNzIGV4cHJlc3Npb24gb3ZlciBhbmQgb3ZlcgorICAgIC8vIGFnYWluIHJlZ2Fy
ZGxlc3Mgb2YgdGhlIGV4cHJlc3Npb24ncyBjb21wbGV4aXR5LiBUaGlzIHdvcmtzIG91dCBmaW5l
LCBzaW5jZSBhdCB0aGUgbWFjaGluZQorICAgIC8vIGxldmVsLCBhZGRyZXNzIGV4cHJlc3Npb25z
IGFyZSBzdXBlciBjaGVhcC4gSG93ZXZlciwgdGhpcyBkb2VzIGhhdmUgYSBoYWNrIHRvIGF2b2lk
CisgICAgLy8gInVuaG9pc3RpbmciIGFkZHJlc3MgZXhwcmVzc2lvbnMuCisgICAgY2xhc3MgQWRk
cmVzc1NlbGVjdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFkZHJlc3NTZWxlY3RvcihMb3dl
clRvQWlyJiBsb3dlcikKKyAgICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBtYXRjaCBhbiBhZGRyZXNzIGV4cHJl
c3Npb24gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkCisgICAgICAgICAgICAvLyBleHBs
aWNpdGx5LgorICAgICAgICAgICAgcmV0dXJuICFsb3dlci52YWx1ZVRvVG1wW3Jvb3RdOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290TGF0ZShWYWx1ZSopIHsgfQorCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRJ
bnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobG93ZXIudmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhhcmd1
bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2Vw
dE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRz
KGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygp
IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisK
KyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDEoVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUs
IFZhbHVlKiBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG9nU2NhbGUtPmFzSW50
KCkgPCAwIHx8IGxvZ1NjYWxlLT5hc0ludCgpID4gMykKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KAorICAgICAg
ICAgICAgICAgIGxvd2VyLnRtcChiYXNlKSwgbG93ZXIudG1wKGluZGV4KSwgMSA8PCBsb2dTY2Fs
ZS0+YXNJbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgdHJ5QWRkU2hpZnQyKFZhbHVlKiBiYXNlLCBWYWx1ZSogaW5kZXgsIFZhbHVlKiBs
b2dTY2FsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRyeUFkZFNoaWZ0MShpbmRl
eCwgbG9nU2NhbGUsIGJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGQoVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJpZ2h0
LT5oYXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9kdWN0aW9uIGlzbid0
IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5jZSB3ZSBleHBlY3QKKyAgICAgICAgICAgICAgICAvLyBM
b2FkKEFkZChAeCwgQGNvbnN0MSksIG9mZnNldCA9IGNvbnN0MikgdG8gaGF2ZSBhbHJlYWR5IGJl
ZW4gc3RyZW5ndGgtcmVkdWNlZAorICAgICAgICAgICAgICAgIC8vIHRvIExvYWQoQHgsIG9mZnNl
dCA9IGNvbnN0MSArIGNvbnN0MikuCisgICAgICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0g
QXJnOjphZGRyKGxvd2VyLnRtcChsZWZ0KSwgcmlnaHQtPmFzSW50MzIoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbGVjdGVk
QWRkcmVzcyA9IEFyZzo6aW5kZXgobG93ZXIudG1wKGxlZnQpLCBsb3dlci50bXAocmlnaHQpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlE
aXJlY3QoKQorICAgICAgICB7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFk
ZHIobG93ZXIudG1wKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxvd2VyOworICAg
ICAgICBBcmcgc2VsZWN0ZWRBZGRyZXNzOworICAgIH07CisgICAgQWRkcmVzc1NlbGVjdG9yIGFk
ZHJlc3NTZWxlY3RvcjsKKworICAgIC8vIFRoaXMgd2lsbCBtYXRjaCBjb21wbGV4IG11bHRpLXZh
bHVlIGV4cHJlc3Npb25zLCBidXQgb25seSBpZiB0aGVyZSBpcyBubyBzaGFyaW5nLiBGb3IgZXhh
bXBsZSwKKyAgICAvLyBpdCB3b24ndCBtYXRjaCBhIExvYWQgdHdpY2UgYW5kIGNhdXNlIHRoZSBn
ZW5lcmF0ZWQgY29kZSB0byBkbyB0d28gbG9hZHMgd2hlbiB0aGUgb3JpZ2luYWwKKyAgICAvLyBj
b2RlIGp1c3QgZGlkIG9uZS4KKyAgICBjbGFzcyBMb3dlcmluZ1NlbGVjdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIExvd2VyaW5nU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIpCisgICAgICAg
ICAgICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChyb290LCAhbG93ZXIubG9ja2VkLmNvbnRhaW5zKHJvb3QpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290
TGF0ZShWYWx1ZSopIHsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUsIEFy
Z3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIG9uZSBv
ZiB0aGUgaW50ZXJuYWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4gd2Ug
ZG9uJ3Qgd2FudCB0byBjYXVzZQorICAgICAgICAgICAgLy8gaXQgdG8gYmUgcmVjb21wdXRlZCBh
Z2Fpbi4KKyAgICAgICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHJl
cXVpcmUgaW50ZXJuYWxzIHRvIGhhdmUgb25seSBvbmUgdXNlIC0gdXMuCisgICAgICAgICAgICBp
ZiAobG93ZXIudXNlQ291bnRzW3ZhbHVlXSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhh
cmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkg
eyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoVmFsdWUqIHZhbHVl
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dlci5s
b2NrZWQuYWRkKHZhbHVlKTsKKyAgICAgICAgICAgIGFjY2VwdEludGVybmFsc0xhdGUoYXJndW1l
bnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoKSB7
IH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQuY29udGFpbnMo
dmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wg
YWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1
bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5TG9hZChWYWx1ZSogYWRkcmVzcykKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsb3dlci5jdXJyZW50VmFsdWUtPnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQo
TW92ZTMyLCBsb3dlci5hZGRyKGFkZHJlc3MpLCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVl
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNlIEludDY0
OgorICAgICAgICAgICAgICAgIGlmIChpczY0Qml0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bG93ZXIuYXBwZW5kKE1vdmUsIGxvd2VyLmFkZHIoYWRkcmVzcyksIGxvd2VyLnRtcChsb3dlci5j
dXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNh
c2UgRG91YmxlOgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dl
ci5hZGRyKGFkZHJlc3MpLCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAg
ICAgICAgICAgICAgIGxvd2VyLmFwcGVuZEJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwg
cmlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFs
dWUqKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbG93ZXIudHJ5QXBw
ZW5kU3RvcmVCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5
cGVzIQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmVBbmRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQsIFZhbHVlKikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxv
d2VyLnRyeUFwcGVuZFN0b3JlQmluT3A8QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVN0b3JlKFZhbHVlKiB2YWx1ZSwgVmFs
dWUqKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUz
MiwgbG93ZXIudG1wKHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAg
ICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSkgeworICAgICAgICAgICAgICAgICAgICBsb3dlci5h
cHBlbmQoTW92ZSwgbG93ZXIudG1wKHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRG91Ymxl
OgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dlci50bXAodmFs
dWUpLCBsb3dlci5hZGRyKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUNvbnN0
MzIoKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgbG93ZXIuaW1t
KGxvd2VyLmN1cnJlbnRWYWx1ZSksIGxvd2VyLnRtcChsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlSZXR1
cm4oVmFsdWUqIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50
eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBjYXNlIEludDY0
OgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBsb3dlci5pbW1PclRtcCh2YWx1
ZSksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5k
KE1vdmVEb3VibGUsIGxvd2VyLnRtcCh2YWx1ZSksIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvd2VyLmFwcGVuZChS
ZXQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIExvd2VyVG9BaXImIGxvd2VyOworICAgIH07CisgICAgTG93ZXJpbmdTZWxlY3RvciBsb3dl
cmluZ1NlbGVjdG9yOworICAgIAorICAgIFByb2NlZHVyZSYgcHJvY2VkdXJlOworICAgIENvZGUm
IGNvZGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsb3dlclRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhh
c2VTY29wZShwcm9jZWR1cmUsICJsb3dlclRvQWlyIik7CisgICAgTG93ZXJUb0FpciBsb3dlclRv
QWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgbG93ZXJUb0Fpci5ydW4oKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0xvd2VyVG9BaXJfaAorI2RlZmluZSBCM0xvd2VyVG9BaXJfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgbG93
ZXJzIHRoZSBjdXJyZW50IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKwordm9pZCBsb3dl
clRvQWlyKFByb2NlZHVyZSYsIEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0
dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdN
YXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJp
bmdNYXRjaGVyCisKKyMgVGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBz
dGFydGluZyBhdCB0aGUgdG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0
ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRv
IHRoaXMgbWF0Y2hlciBpcyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5j
ZSEKKworTG9hZCA9IExvYWQoYWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitT
dG9yZUFkZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmVBbmRM
b2FkID0gU3RvcmUoQWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFs
dWUsIGFkZHJlc3MpCisKK0NvbnN0MzIgPSBDb25zdDMyKCkKKworUmV0dXJuID0gUmV0dXJuKHZh
bHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzTWVtb3J5VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKK3sKK30KKwor
dm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5wcmludCgib2Zmc2V0ID0gIiwgbV9vZmZzZXQp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVt
b3J5VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEZJWE1FOiBBZGQgYWxpYXMg
YW5hbHlzaXMgdG8gdGhlc2UgYnkgYWxsb3dpbmcgdGhlIGNsaWVudCB0byBhc3NvY2lhdGUgYW4g
aW50ZWdlciByYW5nZSB0byB0aGUKKy8vIHZhbHVlLiBUd28gb3BlcmF0aW9ucyBtYXkgYWNjZXNz
IHRoZSBzYW1lIG1lbW9yeSBpZiB0aGVpciByYW5nZXMgb3ZlcmxhcHMuCisvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTM1CisKK2NsYXNzIE1lbW9yeVZhbHVl
IDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29k
ZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNl
IExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAg
ICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgY2Fz
ZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgY2FzZSBTdG9yZTE2OgorICAg
ICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1vcnlWYWx1ZSgpOworCisgICAgaW50MzJfdCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2Fk
IChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBh
IHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KKyAgICBN
ZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludDMyX3Qgb2Zm
c2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIHBv
aW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2Fk
MTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0
eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
TG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IERvdWJsZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAg
IGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAg
IGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlz
IGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgb3Bjb2RlID09IExvYWRGbG9hdCA/IERvdWJsZSA6
IEludDMyLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9h
ZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZT
OgorICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgorICAgIE1lbW9yeVZhbHVlKAor
ICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50
ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAg
ICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNh
c2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzTWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M09wY29kZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKQorewor
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBOb3A6CisgICAgICAgIG91dC5wcmludCgi
Tm9wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQu
cHJpbnQoIklkZW50aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0MzI6Cisg
ICAgICAgIG91dC5wcmludCgiQ29uc3QzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
b25zdDY0OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0NjQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgICAgIG91dC5wcmludCgiQ29uc3REb3VibGUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBvdXQucHJpbnQo
IlN0YWNrU2xvdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAg
ICAgICAgb3V0LnByaW50KCJBcmd1bWVudFJlZyIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIG91dC5wcmludCgiRnJhbWVQb2ludGVyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFkZDoKKyAgICAgICAgb3V0LnByaW50KCJBZGQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3ViOgorICAgICAgICBvdXQucHJpbnQoIlN1YiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNdWw6CisgICAgICAgIG91dC5wcmludCgiTXVsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERpdjoKKyAgICAgICAgb3V0LnByaW50KCJEaXYi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAgIG91dC5wcmlu
dCgiQ2hpbGxEaXYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTW9kOgorICAgICAgICBv
dXQucHJpbnQoIk1vZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRBbmQ6CisgICAg
ICAgIG91dC5wcmludCgiQml0QW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdE9y
OgorICAgICAgICBvdXQucHJpbnQoIkJpdE9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEJpdFhvcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRYb3IiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU2hsOgorICAgICAgICBvdXQucHJpbnQoIlNobCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBTU2hyOgorICAgICAgICBvdXQucHJpbnQoIlNTaHIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgWlNocjoKKyAgICAgICAgb3V0LnByaW50KCJaU2hyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFNFeHQ4OgorICAgICAgICBvdXQucHJpbnQoIlNFeHQ4Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0
MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDMyOgorICAgICAgICBvdXQucHJp
bnQoIlNFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAg
IG91dC5wcmludCgiWkV4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZSb3VuZDoK
KyAgICAgICAgb3V0LnByaW50KCJGUm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SVRvRDoKKyAgICAgICAgb3V0LnByaW50KCJJVG9EIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIERUb0kzMjoKKyAgICAgICAgb3V0LnByaW50KCJEVG9JMzIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTm90RXF1YWwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgIG91dC5wcmlu
dCgiTGVzc1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlclRoYW46Cisg
ICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTGVzc0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NFcXVhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiR3JlYXRl
ckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlOgorICAgICAgICBvdXQu
cHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJlbG93OgorICAgICAg
ICBvdXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlRXF1
YWw6CisgICAgICAgIG91dC5wcmludCgiQWJvdmVFcXVhbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkJlbG93RXF1YWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4
WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIG91dC5wcmlu
dCgiTG9hZDhTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQxNlo6CisgICAgICAg
IG91dC5wcmludCgiTG9hZDE2WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZT
OgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNlMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTG9hZEZsb2F0OgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGbG9hdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlOCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBvdXQucHJpbnQo
IlN0b3JlMTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAg
ICAgb3V0LnByaW50KCJTdG9yZUZsb2F0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
b3JlOgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENDYWxsOgorICAgICAgICBvdXQucHJpbnQoIkNDYWxsIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFBhdGNocG9pbnQ6CisgICAgICAgIG91dC5wcmludCgiUGF0Y2hwb2ludCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgb3V0LnByaW50KCJD
aGVja0FkZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAg
b3V0LnByaW50KCJDaGVja1N1YiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja011
bDoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja011bCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDaGVjazoKKyAgICAgICAgb3V0LnByaW50KCJDaGVjayIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBvdXQucHJpbnQoIlVwc2lsb24iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgUGhpOgorICAgICAgICBvdXQucHJpbnQoIlBoaSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBKdW1wOgorICAgICAgICBvdXQucHJpbnQoIkp1bXAiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBvdXQucHJpbnQoIkJy
YW5jaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgIG91dC5w
cmludCgiU3dpdGNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJldHVybjoKKyAgICAg
ICAgb3V0LnByaW50KCJSZXR1cm4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT29wczoK
KyAgICAgICAgb3V0LnByaW50KCJPb3BzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNP
cGNvZGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDog
aW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZvciB3
aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAgLy8g
UG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElk
ZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMu
IENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAg
IC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29u
c3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2
NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRo
aXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2Fy
ZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBp
bnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAg
ICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3Rh
Y2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMg
dmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVn
YXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21w
aWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0
aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmlu
ZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBh
IGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBU
aGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3Ig
RG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUg
cG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0
IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZl
YXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5
IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNp
YyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAg
ICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIs
CisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4K
KyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2Vy
IG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2Ug
SlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhv
ciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1
Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4
dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwK
KyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3Vu
ZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAg
IC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAv
LyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJl
dHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFs
KHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdy
ZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJ
bnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAg
ICBCZWxvdywKKyAgICBBYm92ZUVxdWFsLAorICAgIEJlbG93RXF1YWwsCisKKyAgICAvLyBNZW1v
cnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBsb2FkZWQgdHlw
ZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHJldHVybiBJbnQzMjoKKyAg
ICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlosCisgICAgTG9hZDE2UywKKyAgICAv
LyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9hdCwKKyAgICAvLyBUaGlzIHJldHVy
biB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwKKworICAgIC8vIE1lbW9y
eSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBpcyBzdG9yZWQuIFRoZXNl
IHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIEludDMyIHZhbHVlOgorICAg
IFN0b3JlOCwKKyAgICBTdG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMgYSBEb3VibGUgdmFsdWU6
CisgICAgU3RvcmVGbG9hdCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9y
IEludDMyLCBJbnQ2NCwgYW5kIERvdWJsZToKKyAgICBTdG9yZSwKKworICAgIC8vIFRoaXMgaXMg
YSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5c3RlbSBDIGNh
bGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJndW1lbnRzIGFy
ZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxsLAorCisgICAgLy8gVGhp
cyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNzLiBUaGlzIGlz
IHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25seSBlbWl0cyBj
b2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRv
IGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2ttYXAgYWxvbmcg
d2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBtdXN0IGJlIHBh
c3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNrbWFwIGFyZ3Vt
ZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVzdAorICAgIC8v
IHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9tIHRoZSB0b3Ag
b2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFjay4KKyAgICBQ
YXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xh
c3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBnZW5lcmF0aW9uCisgICAg
Ly8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNvbWUgY29kZSBhZnRlciB0
aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAgICAvLyBmcm9tIHRoZSBj
aGVjaywgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxzbyBnZXQgdG8gc3VwcGx5
IGEgc3RhY2ttYXAuIE5vdGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90IGFsbG93ZWQgdG8ganVt
cCBiYWNrIGludG8gdGhlIG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNsb3cgcGF0aCwgc2luY2Ug
dGhlIGNvbXBpbGVyCisgICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgZXhlY3V0aW9uIG9mIHRo
ZXNlIGluc3RydWN0aW9ucyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRuJ3QgaGFwcGVuLiBGb3IK
KyAgICAvLyBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQnczoKKyAgICAvLworICAg
IC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0FkZCh4LCB5KQorICAgIC8v
CisgICAgLy8gVGhlbiBpdCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRvOgorICAgIC8vCisgICAg
Ly8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5KGEpCisgICAgLy8KKyAg
ICAvLyBUaGlzIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxiYWNrcyB1c2VkIGJ5IHRo
ZSB0d28gQ2hlY2tBZGRzLiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAorICAgIC8vIGNhbGxiYWNr
cy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhleSBhcmUgZGlm
ZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IENoZWNr
QWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZlIHBvc3NpYmx5
IHRha2VuIHNsb3cKKyAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQgQ2hlY2tBZGQn
cyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIENoZWNrQWRkLAorICAgIENoZWNrU3ViLAor
ICAgIENoZWNrTXVsLAorCisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBVc2UgdGhlIENo
ZWNrVmFsdWUgY2xhc3MuIExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMgaGFzIGEKKyAg
ICAvLyBzdGFja21hcCB3aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0YWtlcyBhbiBJ
bnQzMiBhcmd1bWVudCB0aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgKKyAgICAvLyBmdWxsIGJy
YW5jaCBmdXNpb24gaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBBIHRydWUgdmFsdWUganVt
cHMgdG8gdGhlIGdlbmVyYXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgorICAgIENoZWNrLAorCisg
ICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAgIFVwc2lsb24s
IC8vIFRoaXMgdXNlcyB0aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAgIFBoaSwKKworICAgIC8v
IEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAorICAgIAorICAg
IC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIEJyYW5j
aGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIENvbnRyb2xWYWx1ZSBj
bGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUgc3VjY2Vzc29y
LgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBlaXRoZXIgSW50
MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3aXRjaCwKKwor
ICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0aGVpciBy
ZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlwZS4gVXNl
cyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIFJldHVybiwKKworICAgIC8vIFRoaXMgaXMg
YSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUuIFVz
ZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9OworCitpbmxpbmUgYm9vbCBp
c0NoZWNrTWF0aChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
Y2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsK
KworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcmlnaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3UG9pbnRlciht
X2RhdGEpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIg
Y2FuIGNob29zZSB0byBwdXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIz
IHdpbGwgYmUgYWJsZSB0bworLy8gYWNjb3VudCwgZG93biB0byB0aGUgbWFjaGluZSBjb2RlLCB3
aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNwb25kcyB0byB3aGljaCBvcmlnaW4uIEIzCisvLyB0cmFu
c2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQncyBhbiBlcnJv
ciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9wcyBPcmlnaW5z
IG9yIGxpZXMgYWJvdXQgdGhlbS4KK2NsYXNzIE9yaWdpbiB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRhdGEgPSBudWxscHRyKQorICAgICAgICA6IG1fZGF0YShk
YXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcmln
aW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2lu
dFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNp
bmcgbmFtZXNwYWNlIEFpcjsKKworUGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFs
KCkKK3sKK30KKworUGF0Y2hwb2ludFNwZWNpYWw6On5QYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9
CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcoCisgICAgSW5zdCYgaW5zdCwg
Y29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQorewor
ICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpIHsKKyAgICAgICAgZm9yRWFjaEFy
Z0ltcGwoMCwgMSwgaW5zdCwgY2FsbGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5cGUo
KSk7CisgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMiwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29s
IFBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3Qu
b3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDEs
IGluc3QpOworCisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGluc3QuYXJnc1sxXS5raW5kKCkgIT0gQXJnOjpUbXApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc1R5cGUoaW5zdC5vcmlnaW4t
PmFpclR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBpc1ZhbGlk
SW1wbCgwLCAyLCBpbnN0KTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6YWRtaXRzU3Rh
Y2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgaWYgKGluc3Qub3JpZ2lu
LT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAxLCBp
bnN0LCBhcmdJbmRleCk7CisKKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAyLCBpbnN0LCBhcmdJbmRl
eCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUo
CisgICAgSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBj
b250ZXh0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFw
KiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgIEFTU0VSVChzdGFja21hcCk7CisK
KyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKyAg
ICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQorICAgICAgICByZXBzLmFwcGVuZChy
ZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29mZnNldCsrXSkpOworICAgIGFwcGVu
ZFJlcHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgU3RhY2tt
YXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOwor
ICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAgIHBhcmFtcy5yZXBzID0gcmVwczsK
KyAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisK
KyAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisKKyAgICByZXR1
cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmR1
bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJQYXRjaHBv
aW50Iik7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiTG93ZXJlZCBCMzo6UGF0Y2hwb2lu
dFZhbHVlLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50
U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Bh
dGNocG9pbnRTcGVjaWFsX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzcGVjaWFsIHRoYXQgcmVj
b2duaXplcyB0aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQYXRjaHBvaW50OiBWb2lkIGFuZCBh
bmQgbm9uLVZvaWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0aGUgc3ludGF4IG9mIHRoZSBBaXIg
UGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCBhcmdz
Li4uCisvLworLy8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUgbG93ZXJlZCBhcmd1bWVudHMgdG8g
dGhlIFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBub24tVm9pZCBjYXNlCisvLyB3ZSB3
aWxsIGhhdmU6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCByZXN1bHQsIGFyZ3MuLi4K
KworY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1
YmxpYzoKKyAgICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAgIHZpcnR1YWwgflBhdGNocG9pbnRT
cGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0Jiwg
Y29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRl
OworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0
c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8v
IE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5j
aCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhl
IHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdl
bmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQm
KSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBv
aW50VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQ
cmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50
VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNr
bWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1BhdGNocG9pbnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21h
cC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2lu
dFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+
UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5j
eUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBl
LCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNo
cG9pbnRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2Nv
cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VT
Y29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRh
dGUuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VTY29w
ZTo6UGhhc2VTY29wZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkKKyAg
ICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlm
IChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGJlZm9y
ZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisK
KyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3Jl
ID0gdG9DU3RyaW5nKHByb2NlZHVyZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkK
K3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlk
YXRlKG1fcHJvY2VkdXJlLCBtX25hbWUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1BoYXNlU2NvcGVfaAorI2RlZmluZSBCM1BoYXNlU2NvcGVfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShQcm9jZWR1cmUm
LCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFs
aWRhdGlvbgorCitwcml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29u
c3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKKyNp
bmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQorCitQcm9jZWR1cmU6On5Qcm9jZWR1
cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmcmVx
dWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNp
Y0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVz
dWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQor
ICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworVmVjdG9yPEJhc2ljQmxv
Y2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gcmVzdWx0OworICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3Qu
cHVzaChhdCgwKSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9w
KCkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRl
cigpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgUG9zdE9yZGVyQmxv
Y2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGF0KDApKTsKKyAgICB3aGls
ZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRj
aCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlByZToKKyAgICAgICAg
ICAgIHdvcmtsaXN0LnB1c2hQb3N0KGl0ZW0ubm9kZSk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBpdGVtLm5vZGUtPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgICAg
ICB3b3JrbGlzdC5wdXNoKGl0ZW0ubm9kZS0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UG9zdDoKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy9FTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gK
KyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IlB1cmVOYU4uaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFBy
b2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJvY2VkdXJlKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBy
b2NlZHVyZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Qcm9jZWR1cmUoKTsKKworICAgIEpT
X0VYUE9SVF9QUklWQVRFIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQ
TmFOKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5n
ZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRy
KQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIGl0ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkK
KyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9p
bmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJh
c2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3By
b2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2lu
ZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1cmUt
PnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRl
eCsrOworICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAg
ICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgc2l6ZSgpKTsgfQorCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblByZU9yZGVy
KCk7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRlcigpOworCisgICAg
Y2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xs
ZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3Byb2Nl
ZHVyZShwcm9jZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0
ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0
b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAg
ICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZh
bHVlKiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX3Byb2NlZHVyZS0+bV92YWx1ZXNbbV9pbmRleF0uZ2V0KCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAg
fQorCisgICAgICAgIHByaXZhdGU6CisKKyAgICAgICAgICAgIGNvbnN0IFByb2NlZHVyZSogbV9w
cm9jZWR1cmU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisg
ICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1
cmUsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KG1fcHJvY2VkdXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisKKyAgICAgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUo
KTsgfQorICAgICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvY2VkdXJlLm1fdmFsdWVzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBWYWx1ZSogb3BlcmF0
b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7Cisg
ICAgfTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gVmFs
dWVzQ29sbGVjdGlvbigqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFZhbHVlPj4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlSW5saW5lc19oCisjZGVm
aW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5l
dyBWYWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5
cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUo
dmFsdWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RL
aW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBT
dGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTdGFj
a1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAgb3V0
LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90S2luZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xv
dEtpbmRfaAorI2RlZmluZSBCM1N0YWNrU2xvdEtpbmRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgU3RhY2tTbG90
S2luZCA6IHVpbnQ4X3QgeworICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNsb3QgbmVlZHMgdG8gYmUg
a2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhlcnMgYmVjYXVzZSB3ZSBpbnRlbmQgdG8gZXNjYXBl
CisgICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mgbm90IG9idmlvdXMuIFRoaXMgaGFwcGVucyB3aGVu
IHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRyZXNzIG9mIGEgc3RhY2sKKyAgICAvLyBzbG90Lgor
ICAgIExvY2tlZCwKKworICAgIC8vIFRoZXNlIHN0YWNrIHNsb3RzIGNvdWxkIHNoYXJlIHNwYWNl
IHdpdGggb3RoZXIgc3RhY2sgc2xvdHMsIHByb3ZpZGVkIHRoYXQgdGhleSBhcmVuJ3QgbGl2ZQor
ICAgIC8vIGF0IHRoZSBzYW1lIHRpbWUuIFRoZSBjb21waWxlciBzdGlsbCBoYXMgdG8gZG8gZXNj
YXBlIGFuYWx5c2lzLCBzaW5jZSB0aGVzZSBjYW4gYmUgZXNjYXBlZAorICAgIC8vIGV4cGxpY2l0
bHkgaW4gSVIuCisgICAgQW5vbnltb3VzCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpTdGFja1Nsb3RLaW5kKTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFj
a1Nsb3RLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90VmFsdWU6On5T
dGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1f
Ynl0ZVNpemUsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
U3RhY2tTbG90S2luZC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFt
ZXNwYWNlIEFpciB7CitjbGFzcyBTdGFja1Nsb3Q7Cit9IC8vIG5hbWVzcGFjZSBBaXIKKworY2xh
c3MgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN0YWNrU2xvdDsg
fQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUg
ZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBwaW4gc3RhY2sgc2xvdHMu
IFVzZSB0aGUKKyAgICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQuCisgICAgaW50cHRyX3Qgb2Zm
c2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUgc3RhY2sgc2xvdCBpcyBMb2Nr
ZWQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCisgICAgeworICAg
ICAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCB1
bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXJUeXBlKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVT
aXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0
RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAg
U3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit2b2lkIFN0YWNrbWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KAorICAgICAgICAie29wYXF1ZSA9ICIsIFJhd1BvaW50ZXIobV9vcGFxdWUpLCAi
LCByZXBzID0gIiwgbGlzdER1bXAobV9yZXBzKSwKKyAgICAgICAgIiwgZ2VuZXJhdG9yID0gIiwg
UmF3UG9pbnRlcihtX2dlbmVyYXRvci5nZXQoKSksICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJl
cmVkLAorICAgICAgICAiLCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAifSIp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUg
IkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3Rm
L1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IENoZWNrU3BlY2lhbDsKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitj
bGFzcyBTdGFja21hcCB7CitwdWJsaWM6CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgewor
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBWYWx1ZSBjb250YWluaW5nIHRoZSBzdGFja21hcC4KKyAg
ICAgICAgVmFsdWUqIHZhbHVlOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgor
ICAgICAgICBTdGFja21hcCogc3RhY2ttYXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3Ug
dGhlIGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAg
ICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRo
ZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnM7CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24o
Q0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hh
cmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFw
KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRp
ZnkgdGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5n
IFZhbHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkg
ZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8v
IGFsbG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sg
dG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVz
aW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1l
dGVyKQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZv
aWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5p
ZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAg
IHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3Bh
cXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1
ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9
CisKKyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0
aGlzIFN0YWNrbWFwLiBJbiBjYXNlIG9mIGEgUGF0Y2hwb2ludCB0aGF0CisgICAgLy8gcmV0dXJu
cyBhIHZhbHVlLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gSW4gYWxs
IG90aGVyIGNhc2VzLCBpbmRleCB6ZXJvIHJlZmVycworICAgIC8vIHRvIHRoZSBmaXJzdCBhcmd1
bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90IGNvbnN0cmFp
bmFibGUuIEZvciBleGFtcGxlLAorICAgIC8vIGluIGEgQ2hlY2tBZGQgdmFsdWUsIGl0IHdvdWxk
IGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEgQ2hlY2sgdmFs
dWUsIGl0CisgICAgLy8gd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGV4IDAuIEJ1
dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBjYW4KKyAgICAv
LyBkZXBlbmQgb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmlsbGVkIGluLgor
ICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQor
ICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXplKCkpCisgICAgICAgICAg
ICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhdID0gcmVwOwor
ICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0KQorICAgIHsK
KyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICBjb25zdCBSZWdp
c3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKworICAg
IHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcikKKyAgICB7Cisg
ICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxHZW5l
cmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNp
YWw7CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRTcGVjaWFsOworICAgIGZyaWVuZCBjbGFz
cyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9vcGFxdWUgeyBudWxscHRyIH07
CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9n
ZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhlciBkdXBsaWNhdGVk
IGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJnZSB0aGUgdXNlZCBy
ZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNT
dGFja21hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6
U3RhY2ttYXBTcGVjaWFsKCkKK3sKK30KKworU3RhY2ttYXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVj
aWFsKCkKK3sKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMo
SW5zdCYgaW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFs
dWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUt
PnN0YWNrbWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBT
dGFja21hcFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVz
ZWQKKyAgICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJl
bnRseSB3b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8g
b3IgdGhpbmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBw
cm9ibGVtLgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVy
cyk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJl
cmVkUmVncyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOwor
ICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgcmV0dXJu
IHN0YWNrbWFwLT5jbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVh
Y2hBcmdJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUln
bm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpF
YWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9y
aWdpbjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5l
ZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7Cisg
ICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsK
KyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzID09IHZhbHVl
LT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsg
KytpKSB7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdz
XTsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWly
QXJncyk7CisKKyAgICAgICAgY2FsbGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNU
eXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjpp
c1ZhbGlkSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGlu
c3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhh
cHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdz
KTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0Fy
Z3MpOworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAg
ICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgLy8gRm9yIHRoZSBJbnN0IHRvIGJlIHZhbGlkLCBp
dCBuZWVkcyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChp
bnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFsdWUtPmNoaWxkcmVuKCku
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gUmVnYXJkbGVzcyBvZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyBy
ZXF1aXJlbWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4gRm9yCisgICAgLy8gZXhhbXBsZSwgeW91
IGNhbid0IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2Ug
Y29uZGl0aW9ucyBhcyB3ZWxsIGFzIHRoZQorICAgIC8vIGFyZ3VtZW50IHR5cGVzLgorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJn
czsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdu
b3JlZEIzQXJncyk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVk
QWlyQXJnc107CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgY2FzZSBB
cmc6OkltbTY0OgorICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgIGNhc2UgQXJnOjpD
YWxsQXJnOgorICAgICAgICAgICAgYnJlYWs7IC8vIE9LCisgICAgICAgIGNhc2UgQXJnOjpBZGRy
OgorICAgICAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSAmJgorICAgICAgICAgICAgICAgIGFyZy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0g
QXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpOworCisgICAgICAgIGlmICghYXJnLmlz
VHlwZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBU
aGUgbnVtYmVyIG9mIGNvbnN0cmFpbnRzIGhhcyB0byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51
bWJlciBvZiBCMyBjaGlsZHJlbi4KKyAgICBBU1NFUlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkg
PD0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGlj
aXRseSBzdXBwbGllZCBjb25zdHJhaW50cy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25v
cmVkQjNBcmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXplKCk7ICsraSkgeworICAgICAgICBW
YWx1ZVJlcCYgcmVwID0gc3RhY2ttYXAtPm1fcmVwc1tpXTsKKyAgICAgICAgQXJnJiBhcmcgPSBp
bnN0LmFyZ3NbaSAtIG51bUlnbm9yZWRCM0FyZ3MgKyBudW1JZ25vcmVkQWlyQXJnc107CisKKyAg
ICAgICAgc3dpdGNoIChyZXAua2luZCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToK
KyAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgdmVyaWZpZWQgdGhpcyBhYm92ZS4KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAg
ICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAg
ICAgICAgIGlmIChhcmcgIT0gVG1wKHJlcC5yZWcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNr
OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlv
bi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAgICBpZiAo
YXJnICE9IEFyZzo6Y2FsbEFyZyhyZXAub2Zmc2V0RnJvbVNQKCkpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVw
OjpDb25zdGFudDoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVw
cmVzZW50YXRpb24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdu
b3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwg
dW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47Cisg
ICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICB1bnNpZ25l
ZCBzdGFja21hcEFyZ0luZGV4ID0gYXJnSW5kZXggLSBudW1JZ25vcmVkQWlyQXJncyArIG51bUln
bm9yZWRCM0FyZ3M7CisKKyAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSBzdGFja21hcC0+bV9y
ZXBzLnNpemUoKSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNv
bnN0cmFpbnQuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBv
bmx5IGFkbWl0IHN0YWNrIGZvciBBbnkncywgc2luY2UgU3RhY2sgaXMgbm90IGEgdmFsaWQgaW5w
dXQgY29uc3RyYWludCwgYW5kIFN0YWNrQXJndW1lbnQKKyAgICAvLyB0cmFuc2xhdGVzIHRvIGEg
Q2FsbEFyZyBpbiBBaXIuCisgICAgaWYgKHN0YWNrbWFwLT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRl
eF0ua2luZCgpID09IFZhbHVlUmVwOjpBbnkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwo
CisgICAgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdz
LCBJbnN0JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkp
OworfQorCitWYWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBj
b25zdCBBcmcmIGFyZykKK3sKKyAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICBjYXNlIEFy
Zzo6VG1wOgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnJlZyhhcmcucmVnKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAg
ICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFudChhcmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBpZiAoYXJnLmJhc2UoKSA9PSBUbXAoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpz
dGFjayhhcmcub2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoYXJnLmJhc2UoKSA9PSBUbXAoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBWYWx1
ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJl
cCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21h
cFNwZWNpYWxfaAorI2RlZmluZSBCM1N0YWNrbWFwU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSBBaXIgeyBjbGFz
cyBDb2RlOyB9CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWFscyB0aGF0IGhh
dmUgc3RhY2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBh
c2tpbmcgZm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBu
ZWVkIHRvIGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNrbWFwLgorCitjbGFz
cyBTdGFja21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBT
dGFja21hcFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJv
dGVjdGVkOgorICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBS
ZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2Ji
ZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBk
b2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCku
IFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0
LgorCisgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3Jl
ZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYs
IGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBi
b29sIGlzVmFsaWRJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNp
Z25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBh
ZG1pdHNTdGFja0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2ln
bmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJ
bmRleCk7CisKKyAgICAvLyBBcHBlbmRzIHRoZSByZXBzIGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0
YXJ0aW5nIHdpdGggbnVtSWdub3JlZEFyZ3MsIHRvIHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgdm9p
ZCBhcHBlbmRSZXBzSW1wbChBaXI6OkdlbmVyYXRpb25Db250ZXh0JiwgdW5zaWduZWQgbnVtSWdu
b3JlZEFyZ3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxWYWx1ZVJlcD4mKTsKKworICAgIHN0YXRpYyBW
YWx1ZVJlcCByZXBGb3JBcmcoQWlyOjpDb2RlJiwgY29uc3QgQWlyOjpBcmcmKTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisjZGVmaW5lIEIzU3Vj
Y2Vzc29yQ29sbGVjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIGdlbmVyaWMgd3JhcHBlciBhcm91bmQg
bGlzdHMgb2YgZnJlcXVlbnRlZCBibG9ja3MsIHdoaWNoIGdpdmVzIHlvdSBqdXN0IHRoZSBibG9j
a3MuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2ssIHR5cGVuYW1lIFN1Y2Nlc3Nvckxp
c3Q+CitjbGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JD
b2xsZWN0aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisg
ICAgeworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNp
emUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayogb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJh
c2ljQmxvY2sqJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9
CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigp
CisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3Nv
ckNvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKCZjb2xsZWN0aW9uKSAvLyBjb25zdCBpcyBzdHVwaWQgYW55d2F5LgorICAgICAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBC
YXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAg
ICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworcHJpdmF0ZToKKyAgICBTdWNjZXNzb3JMaXN0JiBt
X2xpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2FzZVZhbHVlLCAiLT4iLCBt
X3RhcmdldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoQ2FzZV9oCisjZGVmaW5lIEIz
U3dpdGNoQ2FzZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVu
dGVkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQor
CisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUoY2FzZVZhbHVlKQorICAgICAgICAsIG1f
dGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0KKworICAgIGludDY0X3QgY2FzZVZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgdGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmJsb2NrKCk7IH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fY2Fz
ZVZhbHVlOworICAgIEZyZXF1ZW50ZWRCbG9jayBtX3RhcmdldDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
U3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7
Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgp
Cit7CisgICAgRnJlcXVlbnRlZEJsb2NrIHJlc3VsdEJsb2NrID0gbV9zdWNjZXNzb3JzW2luZGV4
XTsKKyAgICBpbnQ2NF90IHJlc3VsdFZhbHVlID0gbV92YWx1ZXNbaW5kZXhdOworICAgIG1fc3Vj
Y2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5y
ZW1vdmVMYXN0KCk7CisgICAgbV92YWx1ZXNbaW5kZXhdID0gbV92YWx1ZXMubGFzdCgpOworICAg
IG1fdmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gU3dpdGNoQ2FzZShyZXN1bHRWYWx1
ZSwgcmVzdWx0QmxvY2spOworfQorCit2b2lkIFN3aXRjaFZhbHVlOjphcHBlbmRDYXNlKGNvbnN0
IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChtX3N1
Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3NvcnNbbV9zdWNjZXNzb3JzLnNpemUoKSAt
IDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoc3dpdGNoQ2Fz
ZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmR1bXBNZXRhKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBkZXN0cnVjdGl2ZWx5IG92ZXJyaWRlcyBD
b250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91dC5wcmludChsaXN0RHVtcCgqdGhpcyks
ICIsIGZhbGxUaHJvdWdoID0gIiwgZmFsbFRocm91Z2goKSk7Cit9CisKK1N3aXRjaFZhbHVlOjpT
d2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRnJlcXVlbnRl
ZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xWYWx1ZShpbmRleCwgU3dpdGNoLCBW
b2lkLCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hW
YWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUu
aCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVibGljIENvbnRyb2xWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNv
ZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFsdWUoKTsKKworICAgIC8vIG51bUNhc2VW
YWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgorICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1
ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKworICAgIC8vIFRoZSBzdWNj
ZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2
NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5k
ZXhdOyB9CisgICAgCisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEZyZXF1ZW50ZWRCbG9jayBmYWxsVGhyb3Vn
aCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKyAgICBGcmVxdWVudGVk
QmxvY2smIGZhbGxUaHJvdWdoKCkgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorCisg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51bUNhc2VWYWx1ZXMoKTsgfQorICAg
IFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU3dpdGNoQ2FzZShjYXNlVmFsdWUoaW5kZXgpLCBzdWNjZXNzb3IoaW5kZXgpKTsKKyAgICB9
CisgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7
CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fc3dpdGNo
KG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3dpdGNoVmFsdWUmIHN3aXRjaFZhbHVlLCB1bnNp
Z25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2goJnN3aXRjaFZhbHVlKQorICAgICAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBT
d2l0Y2hDYXNlIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3N3
aXRjaC0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIGNvbnN0IFN3aXRjaFZhbHVlKiBtX3N3aXRjaDsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICB9OworCisgICAgdHlwZWRlZiBpdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAg
IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9Cisg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7
IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEg
Yml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0
aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZp
c2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUg
b3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVk
LgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lk
IGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJv
dWdoKTsKKworICAgIFZlY3RvcjxpbnQ2NF90PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
U3dpdGNoVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQoIlZvaWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIG91dC5wcmludCgiSW50NjQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICBvdXQucHJpbnQo
IkRvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzVHlwZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgeworICAgIFZv
aWQsCisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxpbmUgYm9v
bCBpc0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9
PSBJbnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7CisgICAgcmV0
dXJuIHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyVHlwZSgpCit7Cisg
ICAgaWYgKGlzMzJCaXQoKSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVybiBJbnQ2
NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVcHNpbG9uVmFs
dWU6On5VcHNpbG9uVmFsdWUoKQoreworfQorCit2b2lkIFVwc2lsb25WYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4iLCBtX3BoaS0+aW5k
ZXgoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXBzaWxvblZhbHVlX2gKKyNkZWZp
bmUgQjNVcHNpbG9uVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFVwc2ls
b25WYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0
cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gVXBzaWxvbjsgfQorCisgICAgflVw
c2lsb25WYWx1ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhpOyB9
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAg
ICBVcHNpbG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1
ZSwgVmFsdWUqIHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGhpLCBWb2lkLCBvcmlnaW4s
IHZhbHVlKQorICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1
ZS0+dHlwZSgpID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisKKyAgICBWYWx1ZSogbV9waGk7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworVXNlQ291bnRzOjpVc2VDb3VudHMoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAg
OiBtX2NvdW50cyhwcm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQoreworICAgIGZvciAoVmFsdWUq
IHZhbHVlIDogcHJvY2VkdXJlLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoVmFsdWUqIGNoaWxk
IDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICBtX2NvdW50c1tjaGlsZF0rKzsKKyAg
ICB9Cit9CisKK1VzZUNvdW50czo6flVzZUNvdW50cygpCit7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
VXNlQ291bnRzX2gKKyNkZWZpbmUgQjNVc2VDb3VudHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFVz
ZUNvdW50cyB7CitwdWJsaWM6CisgICAgVXNlQ291bnRzKFByb2NlZHVyZSYpOworICAgIH5Vc2VD
b3VudHMoKTsKKworICAgIHVuc2lnbmVkIG9wZXJhdG9yW10oVmFsdWUqIHZhbHVlKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY291bnRzW3ZhbHVlXTsKKyAgICB9Citwcml2YXRlOgor
ICAgIEluZGV4TWFwPFZhbHVlLCB1bnNpZ25lZD4gbV9jb3VudHM7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1VzZUNvdW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1Zh
bHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1N0
cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRh
dGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0
IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9wcm9jZWR1
cmUocHJvY2VkdXJlKQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJl
Zm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0
aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19M
SU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdl
KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAg
ICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzOworICAgICAgICBIYXNoU2V0PFZhbHVlKj4g
dmFsdWVJblByb2M7CisgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluQmxvY2s7CisKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2VkdXJlKSB7CisgICAgICAgICAg
ICBibG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJs
b2NrKQorICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQodmFsdWUpOworICAgICAgICB9
CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2NlZHVyZS52YWx1ZXMoKSkKKyAg
ICAgICAgICAgIHZhbHVlSW5Qcm9jLmFkZCh2YWx1ZSk7CisKKyAgICAgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiB2YWx1ZUluUHJvYykKKyAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5CbG9jay5j
b250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIGZvciAoVmFsdWUqIHZh
bHVlIDogdmFsdWVJbkJsb2NrKQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29u
dGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOworCisgICAgICAgIGZvciAoVmFsdWUqIHZh
bHVlIDogdmFsdWVJblByb2MpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFs
dWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29u
dGFpbnMoY2hpbGQpLCAoIkF0ICIsICp2YWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAoY2hpbGQpKSk7
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7
CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNz
b3JCbG9ja3MoKSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAg
ICAgICBibG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJBdCAiLCAqYmxvY2ssICItPiIsIHBv
aW50ZXJEdW1wKHN1Y2Nlc3NvcikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IEV4cGFuZCB0aGlzIHZhbGlkYXRpb24gcGhhc2UuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0ODAKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisg
ICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciog
ZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdl
KQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAg
ICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJC
MyBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwg
Y29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlm
IChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hl
biwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBp
ZiAobV9kdW1wQmVmb3JlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV93aGVu
LCAiOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0K
KyAgICAgICAgZGF0YUxvZygiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFM
b2cobV9wcm9jZWR1cmUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAg
ICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5j
dGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgUHJv
Y2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX3doZW47CisgICAgY29uc3Qg
Y2hhciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3Zv
aWQgdmFsaWRhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0
IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUs
IHdoZW4sIGR1bXBCZWZvcmUpOworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNWYWxpZGF0ZV9oCisjZGVmaW5lIEIzVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwor
dm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29u
c3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbGlkYXRlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY29uc3QgY2hhciogY29uc3QgVmFsdWU6
OmR1bXBQcmVmaXggPSAiQCI7CisKK1ZhbHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVl
OjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEg
Yml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZh
bHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUu
IFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdl
IGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3
ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWduZWQg
aW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3Jp
Z2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAg
ICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVl
KCk7CisKKyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBJZGVudGl0eSwgdHlwZSwgb3JpZ2lu
LCB2YWx1ZSk7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2Vt
ZW50ID0gcmVwbGFjZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoTm9wKCkKK3sK
KyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3Jp
Z2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJl
cGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVl
KCk7CisKKyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBOb3AsIFZvaWQsIG9yaWdpbik7CisK
KyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFj
ZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6OmRl
ZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwg
IiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bjb2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOworICAg
IENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVuKCkp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAgIFN0
cmluZ1ByaW50U3RyZWFtIHN0cmluZ091dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQpOworICAg
IENTdHJpbmcgc3RyaW5nID0gc3RyaW5nT3V0LnRvQ1N0cmluZygpOworICAgIGlmIChzdHJpbmcu
bGVuZ3RoKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgc3RyaW5nKTsKKworICAgIG91dC5w
cmludCgiKSIpOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0
Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0
Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAg
IGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2Ogor
ICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAg
Y2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNT
aHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1
YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgp
OworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRlclR5cGUoKTsK
KyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgRFRvSTMyOgorICAg
IGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAg
IGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVy
RXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVF
cXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBj
YXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0OworICAg
IGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAg
ICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNk
ZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJn
LmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1
ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBCYXNpY0Jsb2NrOworY2xhc3MgU3RhY2ttYXA7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRF
IFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBB
ZGphY2VuY3lMaXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7
CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0
YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bj
b2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxk
KHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVl
KiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07
IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAg
ICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIC8vIFRoaXMgaXMg
dXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgdmFsaWQgZm9yIG5v
bi12b2lkIHZhbHVlcy4KKyAgICBBaXI6OkFyZzo6VHlwZSBhaXJUeXBlKCkgY29uc3QgeyByZXR1
cm4gQWlyOjpBcmc6OnR5cGVGb3JCM1R5cGUodHlwZSgpKTsgfQorCisgICAgQWRqYWNlbmN5TGlz
dCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFjZW5j
eUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAgdm9p
ZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCByZXBsYWNlV2l0aE5vcCgp
OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3QgVmFs
dWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVkIHRo
YXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAgICAv
LworICAgIC8vIGlmIChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5hczxB
cmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncworICAgIC8vIH0KKyAgICAv
LworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFyZ3Vt
ZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAvLyBp
ZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0
IFQqIGFzKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGlu
dDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsK
KyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSW50KCkgY29uc3Q7
CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnQoaW50NjRfdCB2YWx1
ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OworICAgIGRvdWJsZSBhc0Rv
dWJsZSgpIGNvbnN0OworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7CisKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworcHJvdGVjdGVkOgorICAgIC8v
IEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1
aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAg
ICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1f
b3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVu
dHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5n
IHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAg
ICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9v
cGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2lu
KG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bj
b2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3Qg
Y2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0
IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4
KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlw
ZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAg
ICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAg
ICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVy
IHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8v
IHRha2UgYW55IGFyZ3VtZW50czoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQor
ICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNv
ZGUsIG51bGxwdHIpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQor
ICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCisgICAgZXhwbGljaXQgVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAg
eworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFs
dWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5n
ZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUg
bV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOwor
ICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sq
IG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxh
Y2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRp
b25zLgorfTsKKworY2xhc3MgRGVlcFZhbHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVl
RHVtcChjb25zdCBWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQor
Citwcml2YXRlOgorICAgIGNvbnN0IFZhbHVlKiBtX3ZhbHVlOworfTsKKworaW5saW5lIERlZXBW
YWx1ZUR1bXAgZGVlcER1bXAoY29uc3QgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVw
VmFsdWVEdW1wKHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNs
dWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisjaW5j
bHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCogVmFsdWU6OmFzKCkKK3sKKyAgICBpZiAoVDo6
YWNjZXB0cyhvcGNvZGUoKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4odGhpcyk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdCBU
KiBWYWx1ZTo6YXMoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFZhbHVlKj4odGhp
cyktPmFzPFQ+KCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7
CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbmxpbmUgaW50MzJfdCBW
YWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+
dmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gISFhczxDb25zdDY0VmFsdWU+KCk7Cit9CisKK2lubGluZSBpbnQ2NF90IFZhbHVl
Ojphc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1
ZSgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaGFzSW50MzIoKSB8fCBoYXNJbnQ2NCgpOworfQorCitpbmxpbmUgaW50NjRfdCBWYWx1ZTo6
YXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNJ
bnQ2NCgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworaW5s
aW5lIGJvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29u
c3REb3VibGVWYWx1ZT4oKTsKK30KKworaW5saW5lIGRvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBj
b25zdAoreworICAgIHJldHVybiBhczxDb25zdERvdWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQor
CitpbmxpbmUgU3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFs
dWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3Rh
Y2ttYXA7CisgICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9p
bnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZh
bHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1f
a2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEFueToKKyAgICBjYXNlIFNv
bWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAg
IG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgi
KCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25z
dGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVS
ZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVw
OjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lz
dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAg
ICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBW
YWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6
Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNW
YWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3Jp
YmUgdmFsdWUgcmVwcmVzZW50YXRpb25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8g
Zm9yY2UgYQorLy8gcmVwcmVzZW50YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24u
IFdoZW4gdGhlIEIzIGNsaWVudCBmb3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0
aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2Vu
dGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFz
cyBWYWx1ZVJlcCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4g
aW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVw
cmVzZW50YXRpb24uIEFzIGFuCisgICAgICAgIC8vIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZvciB0aGUK
KyAgICAgICAgLy8gcmlnaHQgb3BlcmFuZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVja011bC4K
KyAgICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0
aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUg
YQorICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIhCisgICAg
ICAgIFNvbWVSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlv
biwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKKyAgICAg
ICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNr
ZWQuCisgICAgICAgIFJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNl
bnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJdCdzIG5v
dCBhIHZhbGlkCisgICAgICAgIC8vIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBTdGFj
aywKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMg
dGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUgYXJndW1lbnQgYXJlYSBhdCBzb21lCisgICAgICAg
IC8vIG9mZnNldC4KKyAgICAgICAgLy8gRklYTUU6IFRoZSBTdGFja21hcFNwZWNpYWwgY2xhc3Mg
bmVlZHMgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCB0aGVzZSBkb24ndCB0dXJuIGludG8K
KyAgICAgICAgLy8gQWlyIG9wZXJhbmRzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTQwCisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAg
ICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQg
QjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9Owor
ICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdp
c3RlcikKKyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFs
dWVSZXAocmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qg
b2Zmc2V0RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJv
bUZQOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJl
cCBzdGFja0FyZ3VtZW50KGludHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZh
bHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7Cisg
ICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbVNQOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZhbHVl
KQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50RG91Ymxl
KGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQo
Yml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJlZygpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJu
IFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZy
b21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0
cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gbV92
YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEtpbmQgbV9r
aW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlUmVwX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVy
LnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3Bh
dHRlcm5fbWF0Y2hlci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwOCBAQAorIyEvdXNy
L2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCity
ZXF1aXJlICJwYXRobmFtZSIKKworJHZhckluZGV4ID0gMAorZGVmIG5ld1ZhcgorICAgICR2YXJJ
bmRleCArPSAxCisgICAgIl90bXAjeyR2YXJJbmRleH0iCitlbmQKKworY2xhc3MgUHJvZHVjdGlv
bgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpuYW1lLCA6dmFyTmFtZSwgOmFub255bW91cywg
Om9wY29kZSwgOmNoaWxkcmVuCisKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIG5hbWUsIG9w
Y29kZSwgY2hpbGRyZW4pCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQG5hbWUg
PSBuYW1lCisgICAgICAgIEBhbm9ueW1vdXMgPSAobmFtZSA9PSBuaWwgb3IgbmFtZSA9fiAvXEFc
JChbMC05XSspXFovKQorICAgICAgICBAdmFyTmFtZSA9IEBhbm9ueW1vdXMgPyBuZXdWYXIgOiBu
YW1lID1+IC9cQVwkLyA/ICQnIDogbmFtZQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAg
ICAgIEBjaGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBbXQorICAgIGVuZAorCisgICAg
ZGVmIGhhc09wY29kZQorICAgICAgICBvcGNvZGUgIT0gbmlsCisgICAgZW5kCisKKyAgICBkZWYg
ZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICBjaGlsZHJlbi5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgfCBjaGlsZCwgaW5kZXggfAorICAgICAgICAgICAgeWllbGQgdmFyTmFtZSwK
KyAgICAgICAgICAgICAgICAgIGNoaWxkLm5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC52
YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQuYW5vbnltb3VzID8gKGNoaWxkLm9wY29k
ZSA/IDphbm9uSW50ZXJuYWwgOiA6YW5vbk9wZXJhbmQpIDogKGNoaWxkLm9wY29kZSA/IDppbnRl
cm5hbCA6IDpvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgIGluZGV4CisgICAgICAgICAgICBj
aGlsZC5lYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitjbGFz
cyBNYXRjaGVyCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpwcm9kdWN0aW9ucworCisgICAgZGVm
IGluaXRpYWxpemUobmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAg
ICAgICBAcHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucworICAgIGVuZAorZW5kCisKK2NsYXNzIE9y
aWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBk
ZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0g
ZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAg
CisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAg
ZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5n
CisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmln
aW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAg
IGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAg
IEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJp
bmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVy
KQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MK
KyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAg
CisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/
CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIK
KyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAg
IGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAg
bGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0
cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGln
bm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUK
KyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQVthLXpBLVowLTkk
XShbYS16QS1aMC05X10qKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2lu
Lm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJd
KykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVs9
KCksXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFt
ZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4
ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5l
eHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAg
ICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVm
IGlzS2V5d29yZCh0b2tlbikKKyAgICAjIFdlIGNhbiBleHRlbmQgdGhpcyBhcyB3ZSBhZGQgbW9y
ZSBrZXl3b3Jkcy4gTGlrZSwgd2UgbWlnaHQgd2FudCAiaW5jbHVkZSIgZXZlbnR1YWxseS4KKyAg
ICB0b2tlbiA9fiAvXEEoKG1hdGNoZXIpfChpbmNsdWRlKSlcWi8KK2VuZAorCitkZWYgaXNJZGVu
dGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10q
KVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBk
ZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRh
LCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgor
ICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAg
ICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAg
ICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAg
ICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1l
bnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30i
KSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAg
IGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZp
ZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisg
ICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAg
aWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNo
aWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisgICAg
ICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnku
bmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGlj
YXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJv
ZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1hdGNo
ZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAg
ICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBp
ZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0
byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUuCisg
ICAgICAgICAgICBwcm9kdWN0aW9uID0gcGFyc2VQcm9kdWN0aW9uCisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09
IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRl
IHByb2R1Y3Rpb24iKQorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIHByb2R1Y3Rpb25z
IDw8IHByb2R1Y3Rpb24KKyAgICAgICAgfQorCisgICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJO
YW1lLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAg
ICAgICAgb3JpZ2luID0gdG9rZW4ub3JpZ2luCisgICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRp
ZmllcgorCisgICAgICAgIGlmIHRva2VuID09ICI9IgorICAgICAgICAgICAgY29uc3VtZSgiPSIp
CisgICAgICAgICAgICBvcGNvZGUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgY29u
c3VtZSgiKCIpCisgICAgICAgIGVsc2lmIHRva2VuID09ICIoIgorICAgICAgICAgICAgY29uc3Vt
ZSgiKCIpCisgICAgICAgICAgICBvcGNvZGUgPSBuYW1lCisgICAgICAgICAgICBuYW1lID0gbmls
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4s
IG5hbWUsIG5pbCwgbmlsKQorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rp
b25zID0gW10KKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAi
KSIKKworICAgICAgICAgICAgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1
Y3Rpb24pCisKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorICAgICAgICAgICAg
Y29uc3VtZSgiLCIpCisgICAgICAgIH0KKworICAgICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIp
IgorICAgICAgICBhZHZhbmNlCisKKyAgICAgICAgUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1l
LCBvcGNvZGUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlsw
XQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCitt
YXRjaGVyID0gcGFyc2VyLnBhcnNlCisKK2NsYXNzIFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIg
OmluZGV4TWFwLCA6cHJvZHVjdGlvbnMKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICBAaW5kZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVj
dGlvbnMgPSBbXQorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4
IHwKKyAgICAgICAgICAgIEBpbmRleE1hcCA8PCBpbmRleAorICAgICAgICAgICAgQHByb2R1Y3Rp
b25zIDw8IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYg
bWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAg
ICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcFtpbmRleF0KKyAgICAgICAgfQor
ICAgIGVuZAorZW5kCisKK0ZpbGUub3BlbigiQjMiICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInci
KSB7CisgICAgfCBvdXRwIHwKKworICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVy
YXRlX3BhdHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIK
KworICAgIG91dHAucHV0cyAiI2lmbmRlZiBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAu
cHV0cyAiI2RlZmluZSBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIAorICAgIG91dHAucHV0cyAi
I2luY2x1ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIHJ1biN7bWF0Y2hlci5uYW1lfShWYWx1ZSog
X3ZhbHVlLCBBZGFwdG9yJiBhZGFwdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisKKyAgICAjIE5v
dGUgdGhhdCB0aGlzIGRvZXMgbm90IGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgYmVjYXVz
ZSBpdCdzIGEgcmVjdXJzaXZlIGVtaXR0ZXIuIElmIHlvdQorICAgICMgd2FudCB0byBzZWUgdGhl
IGNvZGUgbmljZWx5IGZvcm1hdHRlZCwgb3BlbiBpdCBpbiBhIGdvb2QgdGV4dCBlZGl0b3IgYW5k
IGFzayBpdCB0byBmb3JtYXQgaXQKKyAgICAjIGZvciB5b3UuCisKKyAgICAjIEluIG9kZCBzaXR1
YXRpb25zLCB3ZSBtYXkgbm90IHVzZSB0aGUgaW5wdXQgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVy
IHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShfdmFs
dWUpOyIKKyAgICAgICAgCisgICAgIyBUaGlzIGp1c3QgcHJvdGVjdHMgdGhlIGNhbGxlciBmcm9t
IGhhdmluZyB0byB3b3JyeSBhYm91dCBwcm9kdWN0aW9ucyBoYXZpbmcgZGlmZmVyZW50IGxlbmd0
aHMuCisgICAgZGVmIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisg
ICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5k
ZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBp
bmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmNoaWxkcmVu
Lmxlbmd0aCA9PSBwcm9kdWN0aW9uLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgICAgIGlu
ZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAg
ICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAg
ICAgICBsZW5ndGggPSBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmNoaWxkcmVuLmxlbmd0aAor
ICAgICAgICAgICAgaWYgbGVuZ3RoID4gMAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCN7dmFsdWVOYW1lfS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gI3tsZW5ndGh9KSB7IgorICAgICAg
ICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAg
ICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRoaXMgZWZmaWNpZW50bHkg
c2VsZWN0cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgcHJvZHVjdGlvbnMuIEl0IGFzc3VtZXMgdGhh
dCBwcm9kdWN0aW9ucworICAgICMgYXJlIG5vdCBkdXBsaWNhdGVkLiBJdCB5aWVsZHMgdGhlIGlu
ZGV4IG9mIHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBhbmQgdGhlIGNvcm91dGluZSBpcworICAgICMg
cmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIHNwZWNpZmljIGNvZGUgZm9yIHRoYXQgcHJvZHVjdGlv
bi4gVGhlIGNvcm91dGluZSBpcyBnaXZlbiBsaXN0cyBvZgorICAgICMgaW5kaWNlcyBvZiBwb3Nz
aWJseS1tYXRjaGluZyBwcm9kdWN0aW9ucy4KKyAgICBkZWYgbWF0Y2hQcm9kdWN0aW9ucyhvdXRw
LCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICAjIEZpcnN0LCBzcGxpdCB0aGUgcHJv
ZHVjdGlvbnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJvZHVjdGlvbnMgd2l0aCBhbiBvcGNvZGUgYW5k
IHByb2R1Y3Rpb25zCisgICAgICAgICMgd2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMg
PSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAg
fCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQg
cHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmhhc09wY29kZSA9PSBwcm9kdWN0aW9uLmhh
c09wY29kZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgIyBOb3csIGVtaXQgcGF0dGVy
biBtYXRjaGluZyBjb2RlLiBXZSBkbyBpdCBkaWZmZXJlbnRseSBmb3IgbGlzdHMgd2l0aCBhbiBv
cGNvZGUgdGhhbiBmb3IKKyAgICAgICAgIyBsaXN0cyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5k
ZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGlm
IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgIyBO
b3csIHdlIHNwbGl0IHRoaXMgaW5kZXggbGlzdCBpbnRvIGdyb3VwcyBmb3IgZWFjaCBvcGNvZGUu
CisgICAgICAgICAgICAgICAgZ3JvdXBzID0ge30KKyAgICAgICAgICAgICAgICBpbmRleExpc3Qu
ZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgICAg
ICBwcm9kdWN0aW9uID0gcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGlm
IGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vw
c1twcm9kdWN0aW9uLm9wY29kZV0gPDwgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA9IFtpbmRl
eF0KKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgInN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5vcGNvZGUoKSkgeyIKKyAgICAgICAgICAgICAg
ICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvcGNvZGUsIHN1Yklu
ZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZX06
IgorICAgICAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhzdWJJbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2
YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5t
YXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1
Y3Rpb25zKQorICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3Vi
TWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAor
ICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0
KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5k
CisKKyAgICAjIFRha2VzIHByb2R1Y3Rpb25zIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcGNvZGUgYW5k
IHRoZSBzYW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBmcm9tIHRoZW0gYmFzZWQgb24KKyAgICAjIHRo
ZSBwcm9kdWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29sdW1uLgorICAgIGRlZiBtYXRjaENvbHVtbihv
dXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCkKKyAgICAgICAgaWYgY29s
dW1uSW5kZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICB5
aWVsZCAoMC4uLihwcm9kdWN0aW9ucy5zaXplKSkudG9fYQorICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgIGVuZAorCisgICAgICAgIHN1YlZhbHVlID0gbmV3VmFyCisgICAgICAgIAorICAgICAg
ICBvdXRwLnB1dHMgInsiCisgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7c3ViVmFsdWV9ID0g
I3t2YWx1ZU5hbWV9LT5jaGlsZCgje2NvbHVtbkluZGV4fSk7IgorCisgICAgICAgICMgV2UgbWF5
IG5vdCB1c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0
IGl0LgorICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3N1YlZhbHVlfSk7IgorICAg
ICAgICAKKyAgICAgICAgc3ViUHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucy5tYXAgeworICAgICAg
ICAgICAgfCBwcm9kdWN0aW9uIHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uY2hpbGRyZW5bY29s
dW1uSW5kZXhdCisgICAgICAgIH0KKworICAgICAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHN1
YlZhbHVlLCBzdWJQcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAg
ICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykK
KyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVj
dGlvbnMsIGNvbHVtbkluZGV4ICsgMSkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwK
KyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgIGVu
ZAorCisgICAgZGVmIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9u
cykKKyAgICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25z
KSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAjIFdlIGFyZSBndWFy
YW50ZWVkIHRoYXQgdGhpcyBpbmRleCBsaXN0IGNvbnRhaW5zIHByb2R1Y3Rpb25zIHdpdGggdGhl
IHNhbWUgb3Bjb2RlIGFuZAorICAgICAgICAgICAgIyB0aGUgc2FtZSBsZW5ndGguCisgICAgICAg
ICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAg
ICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9u
cywgMCkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5
aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgZW5kCisKKyAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsICJfdmFsdWUiLCBt
YXRjaGVyLnByb2R1Y3Rpb25zKSB7CisgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgaW5k
ZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBwcm9kdWN0
aW9uID0gbWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgIG91dHAucHV0cyAi
eyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7cHJvZHVjdGlvbi52YXJOYW1lfSA9
IF92YWx1ZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3Byb2R1Y3Rp
b24udmFyTmFtZX0pOyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAg
ICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0g
W10KKyAgICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHNlZW4gPSB7fQorICAg
ICAgICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAgICAgICAgICAgICAgIHwgcGFy
ZW50VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgje2luZGV4fSki
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc2VlbltjaGlsZFZhck5hbWVd
CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsiCisgICAgICAg
ICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVlCisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFt
ZX0gPSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lk
ZXIgZ2V0dGluZyByaWQgb2YgdGhlICQgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICAjIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MjcKKyAgICAgICAgICAg
ICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQor
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpp
bnRlcm5hbCBvciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5k
ID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hp
bGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KGFkYXB0b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFs
QXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5h
Y2NlcHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5
PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygi
ICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIg
KyB0cnlBcmd1bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0
cyAiYWRhcHRvci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBp
bnRlcm5hbEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0
b3IuYWNjZXB0SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSAr
ICIpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVu
dHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJh
bmRzTGF0ZSgiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybjsiCisgICAgICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAgICAg
IG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRz
ICJ9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBC
MyN7bWF0Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgorI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJWTS5o
IgorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK25h
bWVzcGFjZSB7CisKKy8vIE5vdGhpbmcgZmFuY3kgZm9yIG5vdzsgd2UganVzdCB1c2UgdGhlIGV4
aXN0aW5nIFdURiBhc3NlcnRpb24gbWFjaGluZXJ5LgorI2RlZmluZSBDSEVDSyh4KSBSRUxFQVNF
X0FTU0VSVCh4KQorCitWTSogdm07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KK1QgY29tcGlsZUFuZFJ1bihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBnZW5l
cmF0ZShwcm9jZWR1cmUsIGppdCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0
LCBudWxscHRyKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NP
REUobGlua0J1ZmZlciwgKCJ0ZXN0YjMiKSk7CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMu
Li4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJndW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7Cit9CisK
K3ZvaWQgdGVzdDQyKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBjb25zdDQyID0gcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyKTsKKyAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjb25zdDQyKTsKKworICAg
IENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisKKyNkZWZpbmUgUlVO
KHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygj
dGVzdCAiOlxuIik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGVzdDsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygiICAgIE9LIVxuIik7
ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKK3ZvaWQgcnVuKCkK
K3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICB2bSA9ICZWTTo6Y3JlYXRl
KExhcmdlSGVhcCkubGVha1JlZigpOworCisgICAgUlVOKHRlc3Q0MigpKTsKK30KKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sK
KyAgICBVTlVTRURfUEFSQU0oYXJnYyk7CisgICAgVU5VU0VEX1BBUkFNKGFyZ3YpOworICAgIAor
ICAgIHJ1bigpOworICAgIHJldHVybiAwOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0
ZVN0YWNrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNp
bmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3Bh
Y2UgeworCitib29sIGF0dGVtcHRBc3NpZ25tZW50KAorICAgIFN0YWNrU2xvdCogc2xvdCwgaW50
cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMp
Cit7CisgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAg
ICAgaWYgKCFvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGJvb2wgb3ZlcmxhcCA9IFdURjo6cmFuZ2VzT3ZlcmxhcCgKKyAgICAgICAgICAg
IG9mZnNldEZyb21GUCwKKyAgICAgICAgICAgIG9mZnNldEZyb21GUCArIHN0YXRpY19jYXN0PGlu
dHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwKKyAgICAgICAgICAgIG90aGVyU2xvdC0+b2Zmc2V0
RnJvbUZQKCksCisgICAgICAgICAgICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpICsgc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KG90aGVyU2xvdC0+Ynl0ZVNpemUoKSkpOworICAgICAgICBpZiAob3Zl
cmxhcCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzbG90LT5zZXRP
ZmZzZXRGcm9tRlAob2Zmc2V0RnJvbUZQKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBh
c3NpZ24oU3RhY2tTbG90KiBzbG90LCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xv
dHMpCit7CisgICAgaWYgKGF0dGVtcHRBc3NpZ25tZW50KHNsb3QsIC1zdGF0aWNfY2FzdDxpbnRw
dHJfdD4oc2xvdC0+Ynl0ZVNpemUoKSksIG90aGVyU2xvdHMpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTbG90cykgeworICAgICAgICBp
ZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgYm9vbCBkaWRBc3NpZ24gPSBhdHRlbXB0QXNzaWdubWVudCgKKyAgICAgICAgICAgIHNs
b3QsIG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgLSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xv
dC0+Ynl0ZVNpemUoKSksIG90aGVyU2xvdHMpOworICAgICAgICBpZiAoZGlkQXNzaWduKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlU3RhY2so
Q29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRl
U3RhY2siKTsKKworICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0aGUgbG9ja2VkIHNsb3RzIGluIG9y
ZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCisgICAg
Ly8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9m
ZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCisgICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6
ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzOwor
ICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Q7CisgICAgZm9y
IChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBzd2l0Y2gg
KHNsb3QtPmtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAg
ICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgICAgICBhc3Np
Z25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5hcHBlbmQoc2xvdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6Cisg
ICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBBcyBhIG1hdHRlciBvZiBzYW5pdHksIHVuYXNzaWduIHRoaXMuIE1heWJlIGl0IHdvdWxkIGJl
IGdvb2QgdG8gZXZlbiBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIHJ1bGUg
dGhhdCB0aGlzIGNhbm5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgc2xvdC0+c2V0T2Zmc2V0
RnJvbUZQKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgLy8gVGhpcyBpcyBhIGZhaXJseSBleHBlbnNpdmUgbG9vcCwgYnV0IGl0J3Mg
T0sgYmVjYXVzZSB3ZSdsbCB1c3VhbGx5IG9ubHkgaGF2ZSBhIGhhbmRmdWwgb2YKKyAgICAvLyBs
b2NrZWQgc3RhY2sgc2xvdHMuCisgICAgd2hpbGUgKCFsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGxvY2tlZFN0YWNrU2xvdHNX
b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBhc3NpZ24oc2xvdCwgYXNzaWduZWRMb2NrZWRT
dGFja1Nsb3RzKTsKKyAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90
KTsKKyAgICB9CisKKyAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMuIE5v
dGUgdGhhdCB0aGVvcmV0aWNhbGx5IHdlIHNob3VsZCBkbyBhbiBlc2NhcGUgYW5hbHlzaXMKKyAg
ICAvLyBoZXJlLiBCdXQsIGN1cnJlbnRseSBBaXIgZG9lc24ndCBzdXBwb3J0IGVzY2FwaW5nIGEg
U3RhY2tTbG90IQorICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZXNjYXBpbmcgYSBTdGFj
a1Nsb3QgYW5kIGFkZCBlc2NhcGUgYW5hbHlzaXMgdG8gYWxsb2NhdGVTdGFjaygpLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0MzAKKworICAgIGF1
dG8gaXNSZWxldmFudCA9IFtdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7CisgICAgICAgIHJl
dHVybiBhcmcuaXNTdGFjaygpICYmIGFyZy5zdGFja1Nsb3QoKS0+a2luZCgpID09IFN0YWNrU2xv
dEtpbmQ6OkFub255bW91czsKKyAgICB9OworCisgICAgTGl2ZW5lc3M8QXJnPiBsaXZlbmVzcyhj
b2RlKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVy
ZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3Qq
PiBzbG90czsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAg
IExpdmVuZXNzPEFyZz46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKwor
ICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAoKSB7CisgICAgICAgICAgICAvLyBGb3JtIGEg
Y2xpcXVlIG9mIHN0YWNrIHNsb3RzIHRoYXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0
IG9mIHN0YWNrIHNsb3RzCisgICAgICAgICAgICAvLyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4K
KyAgICAgICAgICAgIHNsb3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6
IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZWxldmFudChhcmcp
KQorICAgICAgICAgICAgICAgICAgICBzbG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbG90cy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBzbG90c1tp
XTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNsb3RzLnNp
emUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIgPSBzbG90
c1tpXTsKKworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIGZpcnN0ID0gb3V0ZXI7Cisg
ICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2Vjb25kID0gaW5uZXI7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChmaXJzdC0+aW5kZXgoKSA+IHNlY29uZC0+aW5kZXgoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChmaXJzdCwgc2Vjb25kKTsKKworICAgICAgICAgICAg
ICAgICAgICBpbnRlcmZlcmVuY2VbZmlyc3RdLmFkZChzZWNvbmQpOworICAgICAgICAgICAgICAg
ICAgICBpbnRlcmZlcmVuY2Vbc2Vjb25kXS5hZGQoZmlyc3QpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBpbnRlcmZlcmUoKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5z
dEluZGV4LS07KSB7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5z
dEluZGV4KSk7CisgICAgICAgICAgICBpbnRlcmZlcmUoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25zLiBBdCBpdHMgaGVhcnQgdGhpcyBh
bGdvcml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNoCisgICAgLy8gU3RhY2tTbG90IHdl
IGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHpl
cm8gd2hpbGUgZW5zdXJpbmcgbm8KKyAgICAvLyBvdmVybGFwIHdpdGggb3RoZXIgU3RhY2tTbG90
cyB0aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJT
bG90czsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7Cisg
ICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgLy8gQWxyZWFk
eSBhc3NpZ25lZCBhbiBvZmZzZXQuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGludGVyZmVyaW5nU2xvdHMgPSBpbnRlcmZl
cmVuY2Vbc2xvdF07CisgICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Nsb3RzLnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICBvdGhlclNsb3RzW2ldID0gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzW2ld
OworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMu
c2l6ZSgpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogaW50ZXJmZXJpbmdT
bG90cykKKyAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dEluZGV4KytdID0gb3RoZXJTbG90Owor
CisgICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKKyAgICB9CisKKyAgICAvLyBGaWd1
cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFjayBzbG90cy4KKyAgICB1
bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsKKyAgICBmb3IgKFN0YWNrU2xvdCog
c2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xv
dHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMsCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXNsb3QtPm9mZnNldEZyb21GUCgpKSk7Cisg
ICAgfQorCisgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMpOworCisg
ICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVl
ZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFy
Z3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRo
ZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3VjaCBh
biBhd2Vzb21lIGFzc3VtcHRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgIGNv
ZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShhcmcub2Zmc2V0KCkgKyA4KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb2RlLnNldEZy
YW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3RzICsgY29kZS5jYWxsQXJnQXJlYVNpemUoKSk7
CisKKyAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0gdGhlIGNvZGUgdG8gdXNlIEFkZHIncyBpbnN0
ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEgbG9zc2xlc3MKKyAgICAvLyB0cmFuc2Zvcm1h
dGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBTdGFja1Nsb3RzIGFycmF5IHRvIGZpZ3VyZSBv
dXQgd2hpY2ggU3RhY2tTbG90IGFueQorICAgIC8vIG9mZnNldC1mcm9tLUZQIHJlZmVycyB0by4K
KworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJn
cykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRy
KAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGFyZy5zdGFja1Nsb3Qo
KS0+b2Zmc2V0RnJvbUZQKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJn
OjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJh
bWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQWxsb2NhdGVTdGFja19oCisjZGVmaW5l
IEFpckFsbG9jYXRlU3RhY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBU
aGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBvbiB0aGUgc3RhY2suIEl0IGZpcnN0
IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgKKy8vIG9yZGVyIGFuZCB0aGVuIGl0
IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQuCisKK3ZvaWQgYWxsb2NhdGVTdGFj
ayhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJBbGxvY2F0ZVN0YWNrX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBcmcuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tT
bG90LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxp
ZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQo
dG1wKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmlu
dCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tNjQ6CisgICAg
ICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmlu
dChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2Uo
KSwgIiwiLCBpbmRleCgpKTsKKyAgICAgICAgaWYgKHNjYWxlKCkgIT0gMSkKKyAgICAgICAgICAg
IG91dC5wcmludCgiLCIsIHNjYWxlKCkpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50
ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2Fs
bEFyZzoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoY2FsbEFyZykiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVsYXRpb25hbENvbmRpdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgb3V0LnBy
aW50KGFzUmVzdWx0Q29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTcGVj
aWFsOgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckFyZ19oCisjZGVmaW5lIEFpckFyZ19oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIK
KyNpbmNsdWRlICJCM1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBTcGVjaWFsOworY2xhc3MgU3RhY2tTbG90OworCisvLyBU
aGlzIGNsYXNzIG5hbWUgaXMgYWxzbyBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2ls
bCBzYXkgaXQgYSBsb3QuIFlvdSdsbCBzZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjpp
bW0oNSksIEFyZzo6YWRkcih0aGluZywgYmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6
CisgICAgLy8gVGhlc2UgZW51bSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1
c2Ugd2UgaGF2ZSB0byBtZW50aW9uIHRoZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90
IHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgVG1wLAorICAgICAgICBJbW0sCisgICAgICAg
IEltbTY0LAorICAgICAgICBBZGRyLAorICAgICAgICBTdGFjaywKKyAgICAgICAgQ2FsbEFyZywK
KyAgICAgICAgSW5kZXgsCisgICAgICAgIFJlbENvbmQsCisgICAgICAgIFJlc0NvbmQsCisgICAg
ICAgIFNwZWNpYWwKKyAgICB9OworCisgICAgZW51bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAg
VXNlLAorICAgICAgICBEZWYsCisgICAgICAgIFVzZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5
cGUgOiBpbnQ4X3QgeworICAgICAgICBHUCwKKyAgICAgICAgRlAKKyAgICB9OworCisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKKworICAgIHN0YXRpYyBib29sIGlzVXNl
KFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNl
IFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBEZWY6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xlIHJvbGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZv
ckIzVHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIElu
dDY0OgorICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAg
ICAgICAgIHJldHVybiBGUDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIEdQOworICAgIH0KKworICAgIEFyZygpCisgICAgICAgIDogbV9r
aW5kKEludmFsaWQpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAg
ICAgIDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisK
KyAgICBzdGF0aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBpbW02NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
dmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBh
ZGRyKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBBZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAw
KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0
YWNrOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
bHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmco
aW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRT
Y2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAg
ICAgICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
Y2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNj
YWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAg
ICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgo
QWlyOjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAg
ICAgQVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2Nh
bGUpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4
OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXgg
PSBpbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihz
Y2FsZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRp
b24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
UmVzQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNp
YWwqIHNwZWNpYWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0
PGludHB0cl90PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5k
ID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQor
ICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBt
X3NjYWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJ
bW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQor
CisgICAgYm9vbCBpc0ltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gSW1tNjQ7CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAg
IGJvb2wgaXNDYWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
Q2FsbEFyZzsKKyAgICB9CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQor
CisgICAgYm9vbCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBSZXNDb25kOworICAgIH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlz
QWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygp
OworICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAg
aW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IElt
bSB8fCBraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
CisgICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkg
PT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGJvb2wgaGFz
T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAg
IGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgor
ICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSA9
PSBTdGFjaykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3NjYWxl
KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8
IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Piht
X29mZnNldCk7CisgICAgfQorCisgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8U3RhY2tTbG90Kj4obV9vZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGlu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAg
ICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzY2FsZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJu
IG1fc2NhbGU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9nU2NhbGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOworICAgIH0KKworICAgIEFpcjo6U3Bl
Y2lhbCogc3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNw
ZWNpYWwpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zm
c2V0KTsKKyAgICB9CisKKyAgICBib29sIGlzR1BUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOworICAgIH0KKworICAgIGJvb2wgaXNGUFRt
cCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQKCk7
CisgICAgfQorICAgIAorICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGlu
IGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEdQIHZhbHVlLgorICAgIGJvb2wgaXNHUCgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToK
KyAgICAgICAgY2FzZSBJbW02NDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIElu
ZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAg
IGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNp
YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAg
ICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBpZiB0
aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2YWx1
ZS4KKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2Fz
ZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgSW52YWxpZDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6Cisg
ICAgICAgIGNhc2UgSW1tNjQ6IC8vIFllcywgd2UgYWxsb3cgSW1tNjQgYXMgYSBkb3VibGUgaW1t
ZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBp
c0ZQVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhhc1R5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAg
ICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUgdHlwZSBpcyBhbWJpZ3VvdXMgZm9yIHNvbWUg
YXJnIGtpbmRzLiBDYWxsIHdpdGggY2FyZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzR1AoKSA/IEdQIDogRlA7CisgICAgfQorCisgICAgYm9vbCBpc1R5
cGUoVHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4gaXNHUCgpOworICAgICAgICBjYXNlIEZQ
OgorICAgICAgICAgICAgcmV0dXJuIGlzRlAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCku
aXNHUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0bXAoKS5ncHIoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAgfQorCisg
ICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnByKCk7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncFRt
cEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2ln
bmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS50bXBJbmRl
eCgpOworICAgIH0KKworICAgIEFyZyB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNl
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzT2Zmc2V0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gQXJnKCk7CisgICAgICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0KCks
IGFkZGl0aW9uYWxPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICByZXR1cm4g
YWRkcihiYXNlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2Ug
U3RhY2s6CisgICAgICAgICAgICByZXR1cm4gc3RhY2soc3RhY2tTbG90KCksIG9mZnNldCgpICsg
YWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJl
dHVybiBjYWxsQXJnKG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2Ug
SW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgoYmFzZSgpLCBpbmRleCgpLCBzY2FsZSgp
LCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBB
cmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNh
c2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAg
ICAgICAgICAgZnVuY3RvcihtX2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBU
aGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYg
b3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRo
ZW0uIEZvciBleGFtcGxlLCB0aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQor
ICAgIC8vCisgICAgLy8gVGhpcyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwg
VHlwZSBhcmdUeXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1f
YmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFz
ZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVz
dGVkSW1tMzIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihtX29mZnNldCkpOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NCBhc1RydXN0ZWRJbW02NCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNJbW02NCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQodmFsdWUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0ciBhc1RydXN0ZWRJbW1QdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGlzNjRCaXQoKSkKKyAgICAgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyVmFsdWUoKSk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jh
c2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGFzUmVzdWx0Q29uZGl0
aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Jlc0NvbmQoKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uPihtX29m
ZnNldCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAg
ICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYmFzZShX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PT0gQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRoaXMgcmVhbGx5IGRvZXNuJ3QgaGF2
ZSB0byBiZSB0aGF0IGdyZWF0LgorICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludDY0X3Q+
OjpoYXNoKG1fb2Zmc2V0KSArIG1fa2luZCArIG1fc2NhbGUgKyBtX2Jhc2UuaGFzaCgpICsKKyAg
ICAgICAgICAgIG1faW5kZXguaGFzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2NF90
IG1fb2Zmc2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsgSW52YWxpZCB9OworICAgIGludDMy
X3QgbV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9p
bmRleDsKK307CisKK3N0cnVjdCBBcmdIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBBcmcmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IEFyZyYgYSwgY29uc3QgQXJnJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpBaXI6OkFyZz4geworICAgIHR5cGVkZWYgSlNDOjpC
Mzo6QWlyOjpBcmdIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpB
cmc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgLy8g
QmVjYXVzZSBtX3NjYWxlIGlzIDEgaW4gdGhlIGVtcHR5IHZhbHVlLgorICAgIHN0YXRpYyBjb25z
dCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckFyZ19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY29uc3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9
ICIjIjsKKworYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9j
aykKK3sKKyAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwor
Ym9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sK
KyAgICByZXR1cm4gQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9v
bCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNC
bG9jayogdG8pCit7CisgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJv
bSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFz
aWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIkJCIiwgKnRoaXMsICI6IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOwor
ICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBpbnN0LCAiXG4iKTsKK30KKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2Zy
ZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFpckJhc2ljQmxvY2tfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1
ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNs
dWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENv
ZGU7CitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisg
ICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFz
aWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVu
dGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAg
ICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5k
ZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4
XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFz
dCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0JiYgaW5z
dCkKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZv
aWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1faW5z
dHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOwor
ICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJh
bmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAv
LyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2gg
b2YgYSBjb25kaXRpb25hbCBicmFuY2guCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNv
bnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sg
c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5k
ZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBz
dWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisgICAgU3VjY2Vzc29y
TGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCisgICAgQmFzaWNC
bG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nl
c3NvcihpbmRleCkuYmxvY2soKTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JC
bG9ja3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNC
bG9jaywgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29y
Q29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNz
b3JCbG9ja3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rp
b248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBt
X3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAg
QmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRl
Y2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0
JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorCisgICAgYm9vbCBh
ZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZW1vdmVQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJv
bSwgQmFzaWNCbG9jayogdG8pOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBDb2RlOworICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAg
CisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgIEluc3RMaXN0IG1faW5zdHM7CisgICAgU3VjY2Vzc29y
TGlzdCBtX3N1Y2Nlc3NvcnM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwor
ICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7
CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisg
ICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBkZWVw
RHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxv
Y2tEdW1wKGJsb2NrKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ0NhbGxTcGVj
aWFsOjpDQ2FsbFNwZWNpYWwoKQoreworICAgIG1fY2xvYmJlcmVkUmVncyA9IFJlZ2lzdGVyU2V0
OjphbGxSZWdpc3RlcnMoKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNl
dDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0
ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdz
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK0NDYWxs
U3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpmb3JF
YWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJh
Y2s+JiBjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6VXNlLCBB
cmc6OkdQKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIC8vIEZvciB0aGUgdHlwZSwgd2UgY2FuIGp1c3QgcXVlcnkg
dGhlIGFyZydzIHR5cGUuIFRoZSBhcmcgd2lsbCBoYXZlIGEgdHlwZSwgYmVjYXVzZSB3ZQorICAg
ICAgICAvLyByZXF1aXJlIHRoZXNlIGFyZ3MgdG8gYmUgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAg
ICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbaV0sIEFyZzo6VXNlLCBpbnN0LmFyZ3NbaV0udHlwZSgp
KTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7
CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgor
ICAgICAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGlmIChpczY0Qml0KCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpU
bXA6CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgIGNhc2Ug
QXJnOjpDYWxsQXJnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNHUCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5zdC5hcmdzW2ldLmlzUmVnKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGluc3QuYXJnc1tpXSA9PSBUbXAo
c2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVybiAgZmFsc2U7CisgICAgfQorICAg
IHJldHVybiB0cnVlOworfQorCitib29sIENDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYs
IHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIC8vIEFyZyAxIGNhbiBiZSBhIHN0YWNrIGFkZHJl
c3MgZm9yIHN1cmUuCisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OnJlcG9y
dFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikKK3sKK30KKworQ0NhbGxI
ZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sx
XS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAg
ICAgICAgaml0Lm1vdmUoaW5zdC5hcmdzWzFdLmFzVHJ1c3RlZEltbVB0cigpLCBzY3JhdGNoUmVn
aXN0ZXIpOworICAgICAgICBqaXQuY2FsbChzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uZ3By
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgaml0LmNh
bGwoaW5zdC5hcmdzWzFdLmFzQWRkcmVzcygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworY29uc3QgUmVn
aXN0ZXJTZXQmIENDYWxsU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKQoreworICAg
IHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1w
bChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30K
Kwordm9pZCBDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiZnVuY3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGlu
ZyBjb252ZW50aW9uLiIpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyQ0NhbGxTcGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxTcGVjaWFsX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gVXNlIHRoaXMgc3Bl
Y2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBjb3Vyc2UgYSBTcGVj
aWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBvYmplY3QuIEFyZyAx
IGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJlZ2lzdGVyLCBvciBh
biBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRoZSBzZXQgb2YgYXJn
dW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1lbnRzIHRoYXQgZ28g
dG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdvcmsgb2YgZG9pbmcg
dGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24gd2h5CisvLyB3ZSBz
cGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRvIGEgY2FsbCBpcyBz
byB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0IHRoZXkgZ2V0IHVz
ZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSByZXBvcnQgYWxsIGFy
Z3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlmIHdlIGhhZCBhIGNh
bGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIgdG8gYmUgbGl2ZSB1
bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwgd2hpY2hldmVyIGhh
cHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGljIFNwZWNpYWwgewor
cHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNpYWwoKTsKKworICAg
IC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1
c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAgLy8gdXNlZCBmb3Ig
YXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBp
cyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBz
cGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lz
dGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFj
aEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBv
dmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRt
aXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJl
cG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7Cisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5l
cmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNs
b2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFt
JikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVy
ZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNDYWxsU3BlY2lhbF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK0NvZGU6OkNvZGUoKQoreworfQorCitDb2RlOjp+Q29kZSgpCit7
Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxv
Y2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2su
Z2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1N0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5
dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFja1Nsb3QoYnl0ZVNpemUs
IG1fc3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7CisgICAgU3RhY2tTbG90KiByZXN1
bHQgPSBzbG90LmdldCgpOworICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RGOjptb3ZlKHNsb3Qp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTcGVjaWFsKiBDb2RlOjphZGRTcGVjaWFsKHN0
ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQoreworICAgIFNwZWNpYWwqIHJlc3VsdCA9
IHNwZWNpYWwuZ2V0KCk7CisgICAgbV9zcGVjaWFscy5hcHBlbmQoV1RGOjptb3ZlKHNwZWNpYWwp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3Bl
Y2lhbCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAgICAgICBtX2NDYWxsU3Bl
Y2lhbCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAgICAgICAgYWRkU3BlY2lh
bChzdGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAgIH0KKworICAgIHJldHVy
biBtX2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7
CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30KKwordm9pZCBDb2RlOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAo
c3RhY2tTbG90cygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxu
Iik7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc2xvdCksICJcbiIpOworICAgIH0KKyAg
ICBpZiAoc3BlY2lhbHMoKS5zaXplKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsczpc
biIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFscygpKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAoc3BlY2lhbCksICJcbiIpOworICAgIH0K
KyAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCAiXG4iKTsKKyAgICBv
dXQucHJpbnQoIkNhbGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIp
OworICAgIG91dC5wcmludCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMs
ICJcbiIpOworfQorCit1bnNpZ25lZCBDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVk
IGluZGV4KSBjb25zdAoreworICAgIHdoaWxlIChpbmRleCA8IHNpemUoKSAmJiAhYXQoaW5kZXgp
KQorICAgICAgICBpbmRleCsrOworICAgIHJldHVybiBpbmRleDsKK30KKwordW5zaWduZWQgQ29k
ZTo6ZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVy
biBmaW5kRmlyc3RCbG9ja0luZGV4KGluZGV4ICsgMSk7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6
OmZpbmROZXh0QmxvY2soQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Cit7CisgICAgcmV0dXJuIGF0
KGZpbmROZXh0QmxvY2tJbmRleChibG9jay0+aW5kZXgoKSkpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckNvZGVfaAorI2RlZmluZSBBaXJDb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgor
I2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0
LmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENDYWxsU3BlY2lhbDsKKworLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8g
dGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhl
CisvLyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVy
YXRpbmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWly
LgorCitjbGFzcyBDb2RlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUo
KTsKKworICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsK
KworICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Ns
b3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNw
ZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNw
ZWNpYWwgeW91IG5lZWQgdG8gbWFrZSBhIEMgY2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxs
U3BlY2lhbCgpOworCisgICAgVG1wIG5ld1RtcChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICBy
ZXR1cm4gVG1wOjpncFRtcEZvckluZGV4KG1fbnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFy
Zzo6RlA6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBz
KyspOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUg
dHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6
R1A6CisgICAgICAgICAgICByZXR1cm4gbV9udW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpG
UDoKKyAgICAgICAgICAgIHJldHVybiBtX251bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHVuc2lnbmVkIGNhbGxBcmdBcmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0Fy
ZWFTaXplOyB9CisKKyAgICAvLyBZb3UgY2FuIGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0
aW9uIHRvIGZvcmNlIGEgbWluaW11bSBjYWxsIGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1
ZXN0Q2FsbEFyZ0FyZWFTaXplKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxB
cmdBcmVhU2l6ZSA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUsCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9m
KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc2l6ZSkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBm
cmFtZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8gT25seSBw
aGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBD
dXJyZW50bHksIG9ubHkKKyAgICAvLyBBaXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRoaXMuCisg
ICAgdm9pZCBzZXRGcmFtZVNpemUodW5zaWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAgICAgICAg
bV9mcmFtZVNpemUgPSBmcmFtZVNpemU7CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExp
c3QmIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7
IH0KKworICAgIC8vIFJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVucmVhY2hh
YmxlIGJsb2Nrcy4KKyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdLmdldCgpOyB9CisgICAgQmFzaWNCbG9j
ayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9
CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcp
ICE9IG51bGwgYW5kIGluZGV4JyA+PSBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kRmlyc3RCbG9j
a0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVz
dCBpbmRleCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID4gaW5kZXgu
CisgICAgdW5zaWduZWQgZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsK
KworICAgIEJhc2ljQmxvY2sqIGZpbmROZXh0QmxvY2soQmFzaWNCbG9jayopIGNvbnN0OworCisg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgOiBtX2NvZGUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBDb2RlJiBjb2RlLCB1
bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2RlKCZjb2RlKQorICAgICAgICAgICAg
LCBtX2luZGV4KG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCkpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2NvZGUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAg
ICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2lu
ZGV4ID0gbV9jb2RlLT5maW5kRmlyc3RCbG9ja0luZGV4KG1faW5kZXggKyAxKTsKKyAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIGNvbnN0IENvZGUqIG1fY29kZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsK
KyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgc2l6ZSgpKTsgfQorCisgICAgY2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24geworICAg
IHB1YmxpYzoKKyAgICAgICAgU3RhY2tTbG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkK
KyAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzLnNp
emUoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NvZGUubV9zdGFja1Nsb3RzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTdGFja1Ns
b3QqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsg
fQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAg
ICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisg
ICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBjb2xs
ZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigm
Y29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3IqKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCht
X2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAg
IGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1
bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFN0YWNrU2xv
dHNDb2xsZWN0aW9uIHN0YWNrU2xvdHMoKSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVj
dGlvbigqdGhpcyk7IH0KKyAgICAKKyAgICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24geworICAg
IHB1YmxpYzoKKyAgICAgICAgU3BlY2lhbHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisg
ICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6ZSgp
OyB9CisgICAgICAgIFNwZWNpYWwqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2NvZGUubV9zcGVjaWFsc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgU3BlY2lhbCogb3BlcmF0
b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAg
ICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaXRlcmF0b3IoY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNp
Z25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikK
KyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTcGVjaWFs
c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNv
bnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNp
YWxzKCkgY29uc3QgeyByZXR1cm4gU3BlY2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAor
cHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tT
bG90czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIEND
YWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9u
dW1HUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CisgICAgdW5z
aWduZWQgbV9mcmFtZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUg
eyAwIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwor
fTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBB
aXJGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR2VuZXJp
Y0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVkQmxvY2s7CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJB
aXJIYW5kbGVDYWxsZWVTYXZlcy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgor
I2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRl
ICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBnZW5lcmF0ZShDb2Rl
JiBjb2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigp
KQorICAgICAgICB2YWxpZGF0ZShjb2RlLCAiaW5pdGlhbCIpOworCisgICAgaWYgKHNob3VsZER1
bXBJUigpKSB7CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgYWlyOlxuIik7CisgICAgICAgIGRh
dGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9w
dGltaXphdGlvbnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KKyAgICAvLyBGSVhNRTogQWRkIEFpciBv
cHRpbWl6YXRpb25zLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA0NTYKKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBhIHJlYWwg
cmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGVuLCB3ZSBjb3VsZCB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkK
KyAgICAvLyBpbiBwbGFjZSBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG9ubHkgZm9yIHRlc3Rp
bmcuCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA0NTcKKyAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7CisKKyAgICAvLyBQcmlvciB0byB0
aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFr
ZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KKyAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5
IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KKyAgICBoYW5k
bGVDYWxsZWVTYXZlcyhjb2RlKTsKKworICAgIC8vIFRoaXMgdHVybnMgYWxsIFN0YWNrIGFuZCBD
YWxsQXJnIEFyZ3MgaW50byBBZGRyIGFyZ3MgdGhhdCB1c2UgdGhlIGZyYW1lIHBvaW50ZXIuIEl0
IGRvZXMKKyAgICAvLyB0aGlzIGJ5IGZpcnN0LWZpdCBhbGxvY2F0aW5nIHN0YWNrIHNsb3RzLiBJ
dCBzaG91bGQgYmUgcHJldHR5IGRhcm4gY2xvc2UgdG8gb3B0aW1hbCwgc28gd2UKKyAgICAvLyBz
aG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHZlcnkgbXVjaC4KKyAgICBhbGxvY2F0
ZVN0YWNrKGNvZGUpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWFsbHkgaGF2ZSBhIGNv
ZGUgbGF5b3V0IG9wdGltaXphdGlvbiBoZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NzgKKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgbGF0
ZSBsaXZlbmVzcyBhbmFseXNpcyBvdmVyIHJlZ2lzdGVycyB0byBmaWxsIGluIHRoZQorICAgIC8v
IFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTExCisKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJ
UigpKQorICAgICAgICB2YWxpZGF0ZShjb2RlLCAiZmluYWwiKTsKKworICAgIGlmIChzaG91bGRE
dW1wSVIoKSkgeworICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsK
KyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICAvLyBBbmQgbm93LCB3ZSBnZW5l
cmF0ZSBjb2RlLgorICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5hZGRQ
dHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fz
c2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgR2VuZXJhdGlvbkNvbnRleHQg
Y29udGV4dDsKKyAgICBjb250ZXh0LmNvZGUgPSAmY29kZTsKKyAgICBJbmRleE1hcDxCYXNpY0Js
b2NrLCBDQ2FsbEhlbHBlcnM6OkxhYmVsPiBibG9ja0xhYmVscyhjb2RlLnNpemUoKSk7CisgICAg
SW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhj
b2RlLnNpemUoKSk7CisKKyAgICBhdXRvIGxpbmsgPSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBq
dW1wLCBCYXNpY0Jsb2NrKiB0YXJnZXQpIHsKKyAgICAgICAgaWYgKGJsb2NrTGFiZWxzW3Rhcmdl
dF0uaXNTZXQoKSkgeworICAgICAgICAgICAganVtcC5saW5rVG8oYmxvY2tMYWJlbHNbdGFyZ2V0
XSwgJmppdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBibG9j
a0p1bXBzW3RhcmdldF0uYXBwZW5kKGp1bXApOworICAgIH07CisKKyAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQp
OworICAgICAgICBBU1NFUlQoYmxvY2stPnNpemUoKSA+PSAxKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIEND
YWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmF0KGkpLmdlbmVyYXRlKGppdCwgY29udGV4
dCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGp1bXAsICFqdW1wLmlzU2V0KCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXAKKyAgICAg
ICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2so
YmxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0
KCkub3Bjb2RlID09IFJldCkgeworICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGRvbid0IHJl
cHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1ZS9lcGlsb2d1ZSBpbiBBaXIsIHNvIHdlIG5lZWQgdG8K
KyAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlkZS4KKyAgICAgICAgICAgIGppdC5lbWl0
RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVyczo6SnVt
cCBqdW1wID0gYmxvY2stPmxhc3QoKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICBm
b3IgKEluc3QmIGluc3QgOiAqYmxvY2spCisgICAgICAgICAgICBqdW1wID0gaW5zdC5nZW5lcmF0
ZShqaXQsIGNvbnRleHQpOworICAgICAgICBzd2l0Y2ggKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkp
IHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgQVNTRVJUKCFqdW1wLmlzU2V0KCkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGxpbmsoanVt
cCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIDI6CisgICAgICAgICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygw
KSk7CisgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpICE9IGNvZGUuZmlu
ZE5leHRCbG9jayhibG9jaykpCisgICAgICAgICAgICAgICAgbGluayhqaXQuanVtcCgpLCBibG9j
ay0+c3VjY2Vzc29yQmxvY2soMSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGxhdGVQYXRoIDog
Y29udGV4dC5sYXRlUGF0aHMpCisgICAgICAgIGxhdGVQYXRoLT5ydW4oaml0LCBjb250ZXh0KTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gKKyNkZWZp
bmUgQWlyR2VuZXJhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0
IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQor
Ly8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncywgYW5k
IHRoZW4gZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBnaXZlbgorLy8gQ0NhbGxIZWxwZXJz
IGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBjYWxsYmFja3MgaW4gdGhlIHN1cHBs
aWVkIGNvZGUgYXMgaXQgaXMKKy8vIGdlbmVyYXRpbmcuCit2b2lkIGdlbmVyYXRlKENvZGUmLCBD
Q2FsbEhlbHBlcnMmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKy8vIFRoaXMgaXMgZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisj
aW5jbHVkZSAiQWlyT3Bjb2RlR2VuZXJhdGVkLmgiCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGlvbkNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyR2VuZXJhdGlvbkNvbnRleHRfaAorI2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2Vu
ZXJhdGlvbkNvbnRleHQgeworICAgIHR5cGVkZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxs
SGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExh
dGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+
IGxhdGVQYXRoczsKKyAgICBDb2RlKiBjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdl
bmVyYXRpb25Db250ZXh0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2Rl
LmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29w
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K3ZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBo
YXNlU2NvcGUoY29kZSwgImhhbmRsZUNhbGxlZVNhdmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1
c2VkQ2FsbGVlU2F2ZXM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewor
ICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGluc3QuZm9y
RWFjaFRtcEZhc3QoCisgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBBdCBmaXJzdCB3ZSBqdXN0IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAg
ICAgICAgICAgICAgICAgICB1c2VkQ2FsbGVlU2F2ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRv
IHJlYWxseSBnZXQgdGhlIGNhbGxlZSBzYXZlcy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVy
KFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworCisgICAgaWYgKCF1c2VkQ2Fs
bGVlU2F2ZXMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2Fs
bGVlU2F2ZXMpOworCisgICAgc2l6ZV90IGJ5dGVTaXplID0gMDsKKyAgICBmb3IgKGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpCisgICAg
ICAgIGJ5dGVTaXplID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigtZW50cnkub2Zmc2V0
KCkpLCBieXRlU2l6ZSk7CisKKyAgICBTdGFja1Nsb3QqIHNhdmVzQXJlYSA9IGNvZGUuYWRkU3Rh
Y2tTbG90KGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIC8vIFRoaXMgaXMg
YSBiaXQgd2VpcmQgc2luY2Ugd2UgY291bGQgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVu
dCBzdGFjayBzbG90IHRvIHRoaXMKKyAgICAvLyBhcmVhLiBBbHNvLCBvdXIgcnVudGltZSBkb2Vz
IG5vdCByZXF1aXJlIHVzIHRvIHBpbiB0aGUgc2F2ZXMgYXJlYS4gTWF5YmUgd2Ugc2hvdWxkbid0
IHBpbiBpdD8KKyAgICBzYXZlc0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOworCisg
ICAgYXV0byBhcmdGb3IgPSBbJl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSAtPiBB
cmcgeworICAgICAgICByZXR1cm4gQXJnOjpzdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgp
ICsgYnl0ZVNpemUpOworICAgIH07CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNv
ZGUpOworICAgIAorICAgIC8vIEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9n
dWUuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVl
U2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAg
ICAgICAwLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIGNvZGVbMF0t
PmF0KDApLm9yaWdpbiwKKyAgICAgICAgICAgIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRy
eSkpOworICAgIH0KKyAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKworICAgIC8v
IE5vdyBpbnNlcnQgcmVzdG9yZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsK
KyAgICAgICAgaWYgKGxhc3Qub3Bjb2RlICE9IFJldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
CisgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAg
ICAgICAgICAgICAgICBibG9jay0+c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1v
dmUgOiBNb3ZlRG91YmxlLCBsYXN0Lm9yaWdpbiwKKyAgICAgICAgICAgICAgICBhcmdGb3IoZW50
cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKKyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQu
ZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorI2Rl
ZmluZSBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7
CisKKy8vIFRoaXMgcGhhc2UgaWRlbnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFk
ZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUgdGhlbSBpbiB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3Vl
IHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFuZGF0b3J5IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291
bGQgYmUgY29vbCB0byBtYWtlIHRoaXMgbW9yZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xp
ZW50IGFuZCBhbHNvIG1vcmUKKy8vIHBvd2VyZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5r
IHdyYXBwaW5nOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4
CisvLyBXZSBzaG91bGQgbWFrZSB0aGlzIGludGVyYWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNh
bGxlZVNhdmVzKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckhhbmRsZUNhbGxlZVNhdmVz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0
aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFz
aWNCbG9jayogYmxvY2spCit7CisgICAgZXhlY3V0ZUluc2VydGlvbnMoYmxvY2stPm1faW5zdHMs
IG1faW5zZXJ0aW9ucyk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisjZGVmaW5lIEFpckluc2VydGlvblNldF9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0
Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2Ns
YXNzIENvZGU7CisKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248SW5zdD4gSW5zZXJ0aW9uOworCitj
bGFzcyBJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIEluc2VydGlvblNldChDb2RlJiBjb2Rl
KQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBDb2RlJiBjb2Rl
KCkgeyByZXR1cm4gbV9jb2RlOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZv
aWQgYXBwZW5kSW5zZXJ0aW9uKFQmJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBtX2luc2Vy
dGlvbnMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxUPihpbnNlcnRpb24pKTsKKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgaW5zZXJ0SW5zdChzaXplX3QgaW5kZXgs
IEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihp
bmRleCwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7CisgICAgfQorICAgIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgs
IEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGluc2VydEluc3QoaW5k
ZXgsIEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0K
KworICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKik7CisKK3ByaXZhdGU6CisgICAgQ29kZSYg
bV9jb2RlOworICAgIFZlY3RvcjxJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJJbnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0Ojpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAi
LCBsaXN0RHVtcChhcmdzKSk7CisgICAgaWYgKG9yaWdpbikgeworICAgICAgICBpZiAoYXJncy5z
aXplKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7CisgICAgICAgIG91dC5wcmludCgq
b3JpZ2luKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckluc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVm
aW5lIEFpckluc3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5o
IgorI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCitu
YW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJzOworY2xhc3MgUmVnaXN0ZXJTZXQ7
CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKwor
c3RydWN0IEdlbmVyYXRpb25Db250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBBcmdMaXN0OworCisgICAgSW5zdCgpCisgICAgICAgIDog
b3JpZ2luKG51bGxwdHIpCisgICAgICAgICwgb3Bjb2RlKE5vcCkKKyAgICB7CisgICAgfQorICAg
IAorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbikKKyAgICAgICAgOiBvcmln
aW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKyAgICAK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgSW5zdChPcGNvZGUgb3Bj
b2RlLCBWYWx1ZSogb3JpZ2luLCBBcmcgYXJnLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICA6IGFyZ3N7IGFyZywgYXJndW1lbnRzLi4uIH0KKyAgICAgICAgLCBvcmlnaW4ob3JpZ2lu
KQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bj
b2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQorICAg
ICAgICA6IGFyZ3MoYXJndW1lbnRzKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAg
ICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2Rl
LCBWYWx1ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoV1RG
Ojptb3ZlKGFyZ3VtZW50cykpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBv
cGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVu
Y3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVt
IGZvciB0aGluZ3MgdGhhdAorICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRl
ZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUK
KyAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KKworICAgIC8vIFRoaXMgb25seSB3YWxr
cyB0aG9zZSBUbXBzIHRoYXQgYXJlIGV4cGxpY2l0bHkgbWVudGlvbmVkLCBhbmQgaXQgZG9lc24n
dCB0ZWxsIHlvdSB0aGVpciByb2xlCisgICAgLy8gb3IgdHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIGZvciAoQXJnJiBhcmcgOiBhcmdzKQorICAgICAgICAgICAg
YXJnLmZvckVhY2hUbXBGYXN0KGZ1bmN0b3IpOworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCBF
YWNoQXJnQ2FsbGJhY2soQXJnJiwgQXJnOjpSb2xlLCBBcmc6OlR5cGUpOworICAgIAorICAgIC8v
IENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKGFyZywgcm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24g
aXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpOworCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xl
LCB0eXBlKS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFj
aFRtcChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZygK
KyAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlw
ZSkgeworICAgICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIGZ1bmN0b3Ip
OworICAgICAgICAgICAgfSk7CisgICAgfQorCisgICAgLy8gVGhpbmcgY2FuIGJlIGVpdGhlciBB
cmcgb3IgVG1wLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9y
PgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9j
a3Mgc29tZSBleHRyYSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0
OworCisgICAgLy8gUmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5
IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFD
bG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgor
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVz
ZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJl
IGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVu
Y3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1
cm5zIHRydWUuCisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0
Jik7CisKKyAgICAvLyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9y
bXMgcmlnaHQgbm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8g
b3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBB
c3N1bWluZyB0aGlzIGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdp
bGwgaXQgc3RpbGwgYmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1
dCBhbiBBZGRyIHJlZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFy
Zywgb2YgY291cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0
aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNw
aWxsaW5nOworICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYg
aXQgY2FuIHJlcGxhY2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAg
IC8vIGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNo
VG1wIHRvIGRvIGEgcmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9v
bCBhZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21l
IGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIg
YmFja2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUg
anVtcCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRo
ZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBp
cyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVy
czo6SnVtcCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFyZ3M7Cisg
ICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBm
cm9tLgorICAgIE9wY29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gK
KyNkZWZpbmUgQWlySW5zdElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFp
clNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9y
RWFjaDxUbXA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2
b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGluc3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBz
dHJ1Y3QgRm9yRWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHN0YXRpYyB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgSW5zdDo6Zm9y
RWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JF
YWNoKCp0aGlzLCBmdW5jdG9yKTsKK30KKworaW5saW5lIGJvb2wgSW5zdDo6aGFzU3BlY2lhbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGFyZ3Muc2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7
Cit9CisKK2lubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdz
KCkKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5zcGVj
aWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEluc3Q6
OnJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7
CisgICAgQVNTRVJUKGhhc1NwZWNpYWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9y
dFVzZWRSZWdpc3RlcnMoKnRoaXMsIHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBp
c1NoaWZ0VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2
XzY0KQorICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluc3QpOworICAgIHJldHVybiB0cnVlOworI2VuZGlm
Cit9ICAgCisKK2lubGluZSBib29sIGlzTHNoaWZ0MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0KQor
eworICAgIHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJJbnN0SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxpdmVuZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVz
c19oCisjZGVmaW5lIEFpckxpdmVuZXNzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUg
IkIzSW5kZXhTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCisvLyBZb3UgY2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVy
IEFyZydzLiBJZiB5b3UgY29tcHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNr
IGxpdmVuZXNzIGFuZCB0bXAgbGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2Ns
YXNzIExpdmVuZXNzIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsK
KyAgICAgICAgbV9saXZlQXRIZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2
ZUF0VGFpbC5yZXNpemUoY29kZS5zaXplKCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxv
Y2s+IHNlZW47CisKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUg
KGNoYW5nZWQpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAg
Zm9yIChzaXplX3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5k
ZXgtLTspCisgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChp
bnN0SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJs
b2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgp
ID09IG1fbGl2ZUF0SGVhZFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbENhbGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5k
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxv
Y2tdID0gbG9jYWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBi
bG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOwor
ICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sq
IGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107
CisgICAgfQorCisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJz
ZS4KKyAgICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxj
KExpdmVuZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1f
bGl2ZShsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xp
dmU7IH0KKyAgICAgICAgSGFzaFNldDxUaGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6
bW92ZShtX2xpdmUpOyB9CisKKyAgICAgICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGlu
c3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBB
cmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJn
LmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2xpdmUucmVtb3ZlKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8v
IE5leHQgaGFuZGxlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5o
YXNTcGVjaWFsKCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygp
LmZvckVhY2goCisgICAgICAgICAgICAgICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShUaGluZyhUbXAocmVnKSkpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3QuZm9y
RWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxp
dmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUu
YWRkKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+IG1fbGl2ZTsKKyAgICB9OworICAgIAorcHJpdmF0ZToK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRIZWFkOwor
ICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdFRhaWw7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQ5IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9PiB1c2Ugb2Yg
YSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBvZiBhIGdl
bmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQgZGVmIG9m
IGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ugb2YgYSBm
bG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIg
b3IgdmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZh
bHVlCisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJlZ2lzdGVy
CisjIEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9PiBUcnVzdGVkSW1tNjQK
KyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKKyMgSW5kZXgg
PT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVzcworIworIyBUaGUg
cGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVuZGVyc3RhbmRzIHRo
YXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhpbmdzLiBTbywg
YWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0aW9uIHN0eWxlLCBu
b25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJlIG1lYW5pbmdmdWwg
dG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKyMKKyMgRm9vNDIg
VTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBhcnNlciB3b3VsZCBr
bm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBVRDpGCisjICAg
ICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28tZm9ybSBpbnN0cnVj
dGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQgdXNlcytkZWZzIGEg
ZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2ZSBhIGxl
YWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9Bc3NlbWJs
ZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisKK05vcAor
CitBZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwg
VG1wCisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcK
KyAgICBJbW0sIFRtcCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAg
SW1tLCBUbXAKKyAgICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKwor
THNoaWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIg
VTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworIyBOb3RlIHRoYXQgTW92
ZSBvcGVyYXRlcyBvdmVyIHRoZSBmdWxsIHJlZ2lzdGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAz
Mi1iaXQgb3IgNjQtYml0IGRlcGVuZGluZyBvbgorIyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50
aXJlbHkgc3VyZSB0aGF0IHRoaXMgaXMgYSBnb29kIHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIg
dG8ganVzdCBoYXZlIGEKKyMgTW92ZTY0IGluc3RydWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3Nl
bWJsZXJzIGFscmVhZHkgaGF2ZSB0aGlzIG5vdGlvbiBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxs
eQorIyBtZWFucyBtb3ZlUHRyLgorTW92ZSBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1t
LCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWRQdHIgIyBUaGlzIG1l
YW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90
ICJtb3ZlIi4KKyAgICBJbmRleCwgVG1wIGFzIGxvYWRQdHIKKyAgICBUbXAsIEFkZHIgYXMgc3Rv
cmVQdHIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlUHRyCisKK01vdmUzMiBVOkcsIEQ6RworICAg
IFRtcCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRyCisgICAgQWRkciwgVG1wIGFzIGxvYWQzMgor
ICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlMzIKKyAgICBU
bXAsIEluZGV4IGFzIHN0b3JlMzIKKworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1w
CisgICAgQWRkciwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBJbmRleCwgVG1wIGFzIGxvYWREb3Vi
bGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKyAgICBUbXAsIEluZGV4IGFzIHN0b3Jl
RG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1wLCBUbXAKKworTW92ZURv
dWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAorCitCcmFuY2hBZGQzMiBVOkcsIFU6Rywg
VUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRt
cAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJl
c0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hNdWwzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisg
ICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoU3Vi
MzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVz
Q29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAs
IEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9i
cmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKworSnVtcCAvYnJhbmNoCisKK1JldCAvdGVybWluYWwK
KworQnJlYWtwb2ludCAvdGVybWluYWwKKworIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZp
b3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVj
aWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCitzcGVjaWFs
IFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29w
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFz
ZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUg
IkIzQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29wZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiBu
YW1lKQorICAgIDogbV9jb2RlKGNvZGUpCisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAo
c2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3Jl
ICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICBp
ZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9D
U3RyaW5nKGNvZGUpOworfQorCitQaGFzZVNjb3BlOjp+UGhhc2VTY29wZSgpCit7CisgICAgaWYg
KHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShtX2NvZGUs
IG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQWlyUGhhc2VTY29wZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK2NsYXNzIFBoYXNlU2NvcGUg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBoYXNlU2NvcGUpOworcHVibGljOgorICAgIFBo
YXNlU2NvcGUoQ29kZSYsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8v
IHRoaXMgZG9lcyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAg
IGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQUlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKQor
eworICAgIHN0YXRpYyBWZWN0b3I8R1BSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAg
ICBbXSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEdQUlJlZz4oKTsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCk7CisgICAgICAg
ICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAg
ICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygp
KTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAg
ICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5n
cHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAg
ICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNh
bGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVu
ZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1
cm4gKnJlc3VsdDsKK30KKworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3Jk
ZXIoKQoreworICAgIHN0YXRpYyBWZWN0b3I8RlBSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAor
ICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEZQUlJlZz4oKTsK
KyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCk7Cisg
ICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAg
IFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0
KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZnByKCkp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAg
ICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVT
YXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVn
LmZwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpy
ZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6
VHlwZSB0eXBlKQoreworICAgIHN0YXRpYyBWZWN0b3I8UmVnPiogcmVzdWx0W0FyZzo6bnVtVHlw
ZXNdOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNl
KAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpH
UF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoR1BSUmVnIHJlZyA6IGdw
cnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0tPmFw
cGVuZChSZWcocmVnKSk7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0gPSBuZXcgVmVjdG9y
PFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoRlBSUmVnIHJlZyA6IGZwcnNJblByaW9yaXR5T3Jk
ZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0tPmFwcGVuZChSZWcocmVnKSk7
CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0W3R5cGVdOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lz
dGVyUHJpb3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUmVnaXN0ZXJQ
cmlvcml0eV9oCisjZGVmaW5lIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNs
dWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+
JiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7Citjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJp
b3JpdHlPcmRlcigpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPiBzdHJ1Y3QgUmVnaXN0ZXJz
SW5Qcmlvcml0eU9yZGVyOwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEdQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8R1BSUmVnPiYgaW5Qcmlvcml0eU9yZGVy
KCkgeyByZXR1cm4gZ3Byc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8
RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZnByc0luUHJpb3JpdHlPcmRlcigp
OyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPgorY29uc3QgVmVjdG9yPHR5cGVuYW1l
IEJhbms6OlJlZ2lzdGVyVHlwZT4mIHJlZ3NJblByaW9yaXR5T3JkZXIoKQoreworICAgIHJldHVy
biBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8QmFuaz46OmluUHJpb3JpdHlPcmRlcigpOworfQor
Citjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IGNo
YXIqIGNvbnN0IFNwZWNpYWw6OmR1bXBQcmVmaXggPSAiJiI7CisKK1NwZWNpYWw6OlNwZWNpYWwo
KQorICAgIDogbV9pbmRleChVSU5UX01BWCkKK3sKK30KKworU3BlY2lhbDo6flNwZWNpYWwoKQor
eworfQorCitDU3RyaW5nIFNwZWNpYWw6Om5hbWUoKSBjb25zdAoreworICAgIFN0cmluZ1ByaW50
U3RyZWFtIG91dDsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIHJldHVybiBvdXQudG9DU3RyaW5n
KCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChkdW1wUHJlZml4KTsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIGlmICht
X2luZGV4ICE9IFVJTlRfTUFYKQorICAgICAgICBvdXQucHJpbnQobV9pbmRleCk7Cit9CisKK3Zv
aWQgU3BlY2lhbDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoKnRoaXMsICI6ICIpOworICAgIGRlZXBEdW1wSW1wbChvdXQpOworfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwZWNpYWxfaAorI2RlZmluZSBBaXJTcGVjaWFsX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8
d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRl
IDx3dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBH
ZW5lcmF0aW9uQ29udGV4dDsKKworY2xhc3MgU3BlY2lhbCB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoU3BlY2lhbCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisgICAgCisgICAgU3BlY2lh
bCgpOworICAgIHZpcnR1YWwgflNwZWNpYWwoKTsKKworICAgIENTdHJpbmcgbmFtZSgpIGNvbnN0
OworCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJk
YTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlk
KEluc3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25l
ZCBhcmdJbmRleCkgPSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCBvbiBmb3IgZWFjaCBJ
bnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8K
KyAgICAvLyBndWFyYW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2VkIGZyb20ganVzdCBvbmUg
SW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywKKyAgICAvLyBpZiB5b3Ug
d2FudCB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5lcmF0ZSgpLCB0aGVuIHlv
dSBoYXZlIHRvIGVpdGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVyYXRlIEFpciB0aGF0IHN0
YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5zdCwgYW5kIHRoZW4gbWVy
Z2UKKyAgICAvLyAgICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBwcm9iYWJseSBub3QgZ3Jl
YXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0aGF0CisgICAgLy8gICAg
QWlyIGRpZG4ndCBkdXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVwbGljYXRpb24gZGlkbid0
IGNhdXNlIGFueSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8gICAgcmVnaXN0ZXIgYXNz
aWdubWVudC4KKyAgICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNpYWwgbWFpbnRhaW4gYSBI
YXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYW5hbHlz
aXMKKyAgICAvLyAgICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlzIHBlcmZvcm1lZCBqdXN0
IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdheQorICAgIC8vICAgIGZv
ciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRvIGJlIHJlYWxsb2NhdGVk
LiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29uc3VsdCB0aGUgSGFzaE1h
cC4KKyAgICAvLworICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVzZSAoMSkgYW5kIGZpcmUg
dXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisgICAgLy8KKyAgICAvLyBO
b3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBvcnRVc2VkUmVnaXN0ZXJz
KCkgYmVpbmcgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8gYXMgZ2VuZXJhdGUoKS4g
SWYgd2UgY291bGQgcmVseSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1c3QgaGF2ZSBlYWNoIFNw
ZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBvZiBSZWdpc3RlclNldCdz
IGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0IG9yZGVyIGluCisgICAg
Ly8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5jZSBpcyB1bmxpa2VseSB0
byBjaGFuZ2Ugc2luY2UgaXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBwZXJmb3JtYW5jZSBvZiB0
aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJyZW50bHksIHdlIGRvICgx
KSBmb3IgQjMgc3RhY2ttYXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJz
KEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIENDYWxs
SGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNv
bnRleHQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2Ji
ZXJlZFJlZ3MoSW5zdCYpID0gMDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJvdGVjdGVkOgor
ICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2
aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgY29uc3QgY2hhciogbV9uYW1lOwor
ICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3BlY2lhbER1bXAgeworcHVi
bGljOgorICAgIERlZXBTcGVjaWFsRHVtcChjb25zdCBTcGVjaWFsKiBzcGVjaWFsKQorICAgICAg
ICA6IG1fc3BlY2lhbChzcGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NwZWNpYWwpCisgICAg
ICAgICAgICBtX3NwZWNpYWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFNw
ZWNpYWwqIG1fc3BlY2lhbDsKK307CisKK2lubGluZSBEZWVwU3BlY2lhbER1bXAgZGVlcER1bXAo
Y29uc3QgU3BlY2lhbCogc3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVlcFNwZWNpYWxEdW1wKHNw
ZWNpYWwpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZl
cnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNs
dWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVk
ZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNp
bmNsdWRlICJCM0luZGV4TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKK3sKKyAg
ICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNwaWxsRXZlcnl0aGluZyIpOworCisgICAg
Ly8gV2Ugd2FudCB0byBrbm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9p
bnQgaW4gZXZlcnkgYmFzaWMgYmxvY2suCisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9y
PFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CisgICAgTGl2ZW5lc3M8
VG1wPiBsaXZlbmVzcyhjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
eworICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBi
bG9jayk7CisgICAgICAgIHVzZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgp
ICsgMSk7CisKKyAgICAgICAgYXV0byBzZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBp
bmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVzZWRSZWdpc3RlcnNbYmxv
Y2tdW2luZGV4XTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2FsQ2FsYy5saXZlKCkp
IHsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAg
IHNldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAg
ICBzZXRVc2VkUmVnaXN0ZXJzKGJsb2NrLT5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAg
ICAgICAgIHNldFVzZWRSZWdpc3RlcnMoaW5zdEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAuCisgICAgVmVjdG9yPFN0
YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1UeXBlc107CisgICAgZm9yICh1bnNpZ25l
ZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyArK3R5cGVJbmRleCkg
eworICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxTdGFja1Nsb3Rz
W3R5cGVJbmRleF07CisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QXJnOjpU
eXBlPih0eXBlSW5kZXgpOworICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShjb2RlLm51bVRtcHMo
dHlwZSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29kZS5udW1UbXBzKHR5
cGUpOyB0bXBJbmRleC0tOykKKyAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0gY29k
ZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICB9CisKKyAg
ICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5z
dEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIFJlZ2lz
dGVyU2V0JiBzZXRCZWZvcmUgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXhdOworICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldEFmdGVyID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5z
dEluZGV4ICsgMV07CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRl
eCk7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgWyZdIChU
bXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9IGFsbFN0YWNrU2xv
dHNbdHlwZV1bdG1wLnRtcEluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBBcmcgYXJnID0g
QXJnOjpzdGFjayhzdGFja1Nsb3QpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8g
ZmlndXJlIG91dCBhIHJlZ2lzdGVyIHRvIHVzZS4gSG93IHdlIGRvIHRoYXQgZGVwZW5kcyBvbiB0
aGUgcm9sZS4KKyAgICAgICAgICAgICAgICAgICAgUmVnIGNob3NlblJlZzsKKyAgICAgICAgICAg
ICAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpV
c2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0
eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZv
cmUuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3Jl
LnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSBy
ZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RGVmOgor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRl
cih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QWZ0ZXIuZ2V0
KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJl
Zyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2VEZWY6CisgICAg
ICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5
cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJl
ZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nl
blJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAg
ICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAgICAgICAgICBPcGNv
ZGUgbW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworCisgICAgICAg
ICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu
c3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOwor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAg
ICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxF
dmVyeXRoaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwaWxsRXZlcnl0
aGluZ19oCisjZGVmaW5lIEFpclNwaWxsRXZlcnl0aGluZ19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIENvZGU7CisKKy8vIFRoaXMgaXMgYSBwaGFzZSBmb3IgdGVzdGluZy4gSXQgYmVoYXZlcyBs
aWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGluIHRoZSBzZW5zZSB0aGF0IGl0CisvLyBlbGltaW5h
dGVzIHRlbXBvcmFyaWVzIGZyb20gdGhlIHByb2dyYW0uIEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5
IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8vIHRlbXBvcmFyaWVzLiBUaGUgcmVzdWx0aW5nIGNvZGUg
aXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVmZmljaWVudC4gVGhpcyBwaGFzZSBpcyBncmVhdCBpZiB5
b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUgaXMgYSBidWcgaW4gdGhlIHJlZ2lzdGVyIGFsbG9jYXRv
ci4gWW91IGNhbiBjb25maXJtIHRoaXMgYnkgcnVubmluZyB0aGlzCisvLyBwaGFzZSBpbnN0ZWFk
IG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisvLworLy8gTm90ZSB0aGF0IGV2ZW4gdGhvdWdo
IHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBlc3QgdGhpbmcgcG9zc2libGUsIGl0J3Mgbm90IGV2
ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1bGFybHkgZWZmaWNpZW50IHdheS4gU28sIGRvbid0
IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcgdGhpcyBwaGFzZSB0byByZWR1Y2UgY29tcGlsZXIK
Ky8vIGxhdGVuY3kuIElmIHlvdSB3YW50ZWQgdG8gZG8gdGhhdCwgeW91IHNob3VsZCBjb21lIHVw
IHdpdGggYSBjbGV2ZXIgYWxnb3JpdGhtIGluc3RlYWQgb2YgdXNpbmcKKy8vIHRoaXMgc2lsbHkg
dGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpclNwaWxsRXZlcnl0aGluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgU3RhY2tTbG90OjpzZXRP
ZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCit7CisgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1
ZTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgbV92YWx1ZS0+bV9vZmZzZXRGcm9tRlAgPSB2
YWx1ZTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgU3RhY2tTbG90
OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYnl0
ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21G
UCwgIiwga2luZCA9ICIsIG1fa2luZCk7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG91dC5w
cmludCgiLCB2YWx1ZSA9ICIsICptX3ZhbHVlKTsKK30KKworU3RhY2tTbG90OjpTdGFja1Nsb3Qo
dW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0
YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICA6IG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgLCBt
X2luZGV4KGluZGV4KQorICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUgPyB2YWx1ZS0+b2Zmc2V0
RnJvbUZQKCkgOiAwKQorICAgICwgbV9raW5kKGtpbmQpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQor
eworICAgIEFTU0VSVChieXRlU2l6ZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyU3RhY2tTbG90X2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90X2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlIDx3
dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgU3RhY2tTbG90VmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFja1Ns
b3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7
IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4OyB9CisKKyAgICB1bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGJ5dGVTaXplKCkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBpZiAo
Ynl0ZVNpemUoKSA8PSAyKQorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGlmIChieXRl
U2l6ZSgpIDw9IDQpCisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgcmV0dXJuIDg7Cisg
ICAgfQorCisgICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1
ZTsgfQorCisgICAgLy8gWmVybyBtZWFucyB0aGF0IGl0J3Mgbm90IHlldCBhc3NpZ25lZC4KKyAg
ICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsg
fQorCisgICAgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGNhbGxlZCBmcm9tIHBoYXNl
cyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24uIEJ1dCB5b3UgY2FuCisgICAgLy8gdG90YWxseSBm
b3JjZSBhIHN0YWNrIHNsb3QgdG8gbGFuZCBhdCBzb21lIG9mZnNldC4KKyAgICB2b2lkIHNldE9m
ZnNldEZyb21GUChpbnRwdHJfdCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUs
IHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSopOworICAgIAor
ICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBpbnRw
dHJfdCBtX29mZnNldEZyb21GUDsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBTdGFj
a1Nsb3RWYWx1ZSogbV92YWx1ZTsKK307CisKK2NsYXNzIERlZXBTdGFja1Nsb3REdW1wIHsKK3B1
YmxpYzoKKyAgICBEZWVwU3RhY2tTbG90RHVtcChjb25zdCBTdGFja1Nsb3QqIHNsb3QpCisgICAg
ICAgIDogbV9zbG90KHNsb3QpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc2xvdCkKKyAgICAgICAgICAg
IG1fc2xvdC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnBy
aW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgU3RhY2tTbG90KiBt
X3Nsb3Q7Cit9OworCitpbmxpbmUgRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoY29uc3QgU3Rh
Y2tTbG90KiBzbG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgVG1w
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAg
ICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGlzUmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmIChpc0dQKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIldG1wIiwg
Z3BUbXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmludCgi
JWZ0bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9oCisj
ZGVmaW5lIEFpclRtcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiRlBSSW5m
by5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIEFyZzsKKworLy8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBh
IHJlZ2lzdGVyLiBJdCBjYW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4gSXQg
Y2FuIGFsc28KKy8vIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0ZXIg
KGkuZS4gYSB0ZW1wb3JhcnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQorLy8gZGVs
aWJlcmF0ZWx5IHRlcnNlIG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoaXMgbmFt
ZSBhIGxvdC4KKworY2xhc3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAgICA6IG1f
dmFsdWUoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcpCisgICAg
eworICAgICAgICBpZiAocmVnKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAg
ICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkpOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigpKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBUbXAoY29uc3QgQXJnJik7CisKKyAgICBzdGF0aWMgVG1wIGdwVG1wRm9ySW5kZXgodW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV92YWx1ZSA9IGVuY29kZUdQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVG1wIGZwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAg
eworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQ
VG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisKKyAgICBib29s
IGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFsdWUp
OworICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNFbmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0KKworICAg
IGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQUiht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAgIH0KKwor
ICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQUiht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlm
IChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVybiBmcHIo
KTsKKyAgICB9CisKKyAgICBib29sIGhhc1RtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAhaXNSZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBk
ZWNvZGVGUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1w
SW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBib29s
IGlzQWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRoaXM7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdDsKKworICAgIFRtcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisg
ICAgICAgIDogbV92YWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgIHsK
KyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUp
OworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURjo6SW50SGFzaDxpbnQ+OjpoYXNoKG1fdmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZh
dGU6CisgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAg
ICAgIHJldHVybiAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUCh1
bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMSAtIGluZGV4OworICAgIH0K
KworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICBy
ZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7Cisg
ICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAg
ICAgIHJldHVybiBlbmNvZGVGUChmcHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVy
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAodW5zaWduZWQgaW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVn
aXN0ZXIoKSkgKyAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFRt
cCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUFIoTWFjcm9B
c3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4OworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzRW5jb2RlZEdQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2
YWx1ZSA+IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlAoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc0VuY29kZWRHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5j
b2RlZEdQKHZhbHVlKSAmJiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RS
ZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFIoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiB2YWx1ZSA+
PSBlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1ZSk7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBSKHZhbHVlKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFsdWUpCisgICAgewor
ICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVy
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBSKE1hY3JvQXNzZW1i
bGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQg
ZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQ
VG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVHUFIoTWFjcm9Bc3Nl
bWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25l
ZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVk
RlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6
Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyAwOiBlbXB0
eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4KKyAgICAvLyBu
ZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1ZTsKK307CisK
K3N0cnVjdCBUbXBIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUbXAmIGtl
eSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFRt
cCYgYSwgY29uc3QgVG1wJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3Qg
Ym9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0
SGFzaDxKU0M6OkIzOjpBaXI6OlRtcD4geworICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpUbXBI
YXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsK
K3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpUbXA+IDogU2ltcGxl
Q2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1wPiB7IH07CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGluZXNfaAorI2RlZmlu
ZSBBaXJUbXBJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJB
cmcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitpbmxpbmUgVG1wOjpUbXAoY29uc3QgQXJnJiBhcmcpCit7
CisgICAgKnRoaXMgPSBhcmcudG1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBJbmxp
bmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZh
bGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitjbGFz
cyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihDb2RlJiBjb2RlLCBjb25zdCBj
aGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQorICAgICAgICA6IG1fY29kZShjb2Rl
KQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVm
b3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdl
KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRp
dGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9Q
UkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0g
d2hpbGUgKGZhbHNlKQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIEhhc2hT
ZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90czsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4g
dmFsaWRCbG9ja3M7CisgICAgICAgIEhhc2hTZXQ8U3BlY2lhbCo+IHZhbGlkU3BlY2lhbHM7CisK
KyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAgICAgICAgICAgIHZh
bGlkQmxvY2tzLmFkZChibG9jayk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogbV9j
b2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIHZhbGlkU2xvdHMuYWRkKHNsb3QpOworICAg
ICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBtX2NvZGUuc3BlY2lhbHMoKSkKKyAgICAgICAg
ICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNwZWNpYWwpOworCisgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4
ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAg
ICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAg
ICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgICAgICBzd2l0
Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgor
ICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRTbG90cy5jb250YWlucyhhcmcu
c3RhY2tTbG90KCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNwZWNp
YWw6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNwZWNpYWxzLmNvbnRh
aW5zKGFyZy5zcGVjaWFsKCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFZBTElEQVRFKGluc3QuaXNWYWxpZEZv
cm0oKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgIGlm
IChpbnN0SW5kZXggPT0gYmxvY2stPnNpemUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJs
b2NrKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSghaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2sp
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29y
IDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bGlkQmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiSW4gIiwgKmJsb2NrKSk7CisgICAgICAg
IH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZh
aWwoCisgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3Qg
Y2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBt
ZXNzYWdlKQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAg
eworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnBy
aW50KCJBSVIgVkFMSURBVElPTiBGQUlMVVJFXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgi
ICAgICIsIGNvbmRpdGlvbiwgIiAoIiwgZmlsZW5hbWUsICI6IiwgbGluZU51bWJlciwgIilcbiIp
OworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgbWVzc2FnZSwgIlxuIik7CisgICAgICAg
ICAgICBpZiAobV93aGVuKQorICAgICAgICAgICAgICAgIG91dC5wcmludCgiICAgIER1cmluZyAi
LCBtX3doZW4sICJcbiIpOworICAgICAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9DU3Ry
aW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAg
ICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAgZGF0YUxvZygiQmVmb3JlICIs
IG1fd2hlbiwgIjpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyhtX2R1bXBCZWZvcmUpOworICAg
ICAgICB9CisgICAgICAgIGRhdGFMb2coIkF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgICAg
ICBkYXRhTG9nKG1fY29kZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7Cisg
ICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1
bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBD
b2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV93aGVuOworICAgIGNvbnN0IGNoYXIqIG1f
ZHVtcEJlZm9yZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlk
YXRlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUp
Cit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihjb2RlLCB3aGVuLCBkdW1wQmVmb3JlKTsKKyAg
ICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpclZhbGlkYXRlX2gKKyNkZWZpbmUgQWlyVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBDb2RlOworCit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVs
bHB0ciwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODQyIEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4K
KyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNvZGUKKyAgICBh
dHRyX3JlYWRlciA6bmFtZSwgOnNwZWNpYWwsIDpvdmVybG9hZHMKKyAgICBhdHRyX2FjY2Vzc29y
IDpraW5kCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBzcGVjaWFsKQorICAgICAgICBAbmFt
ZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBzcGVjaWFsCisgICAgICAgIEBraW5kID0gOmlu
c3QKKyAgICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBvdmVybG9hZHMgPSBbXQor
ICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQorICAgICAgICBuYW1lWzBd
LmRvd25jYXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBBcmcKKyAgICBh
dHRyX3JlYWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFsaXplKHJvbGUsIHR5cGUp
CisgICAgICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5cGUKKyAgICBlbmQKK2Vu
ZAorCitjbGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1cmUsIDpmb3Jtcwor
CisgICAgZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgQHNpZ25hdHVy
ZSA9IHNpZ25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3JtcworICAgIGVuZAorZW5kCisKK2Ns
YXNzIEtpbmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfYWNjZXNzb3IgOnNwZWNp
YWwKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAg
ICAgICBAc3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYgPT0ob3RoZXIpCisgICAg
ICAgIGlmIG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFtZSBhbmQgQHNwZWNpYWwg
PT0gb3RoZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBLaW5kLmFy
Z0tpbmRzKGtpbmQpCisgICAgICAgIGlmIGtpbmQgPT0gIkFkZHIiCisgICAgICAgICAgICBbIkFk
ZHIiLCAiU3RhY2siLCAiQ2FsbEFyZyJdCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5k
XQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBhcmdLaW5kcworICAgICAgICBLaW5k
LmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVh
ZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1l
KQorICAgICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAg
ICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDps
aW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIp
CisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGlu
ZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1l
fToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9y
ZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwg
c3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJp
bmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlz
X2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBl
bHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAor
ICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVu
ZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tv
cmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAg
ICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAj
e3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7
dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBs
ZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkK
KyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5l
bXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAg
ICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAg
ICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAg
ICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4u
bmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAv
XEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAg
d2hlbiAvXEFbLDoqXC9dLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4u
bmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIp
LnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAg
ICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQK
K2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxa
LworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLwor
ZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJ
bW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYg
aXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2lu
ZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIK
K2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1a
MC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIK
KyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxl
eChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0
b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQor
ICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50
KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAg
ICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAj
e2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisg
ICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0
cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQK
KworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJp
bmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lk
ZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVu
ZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwor
ICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3Mg
aXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisK
KyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAg
ICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1
bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYg
Y29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNl
RXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENv
bmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UK
KyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0
ID0ge30KKyAgICAgICAgCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlk
eCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIK
KyAgICAgICAgICAgICAgICBjb25zdW1lKCJzcGVjaWFsIikKKyAgICAgICAgICAgICAgICBvcGNv
ZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVd
CisKKyAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29k
ZU5hbWUsIHRydWUpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFt
ZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2Rl
TmFtZV0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisg
ICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwg
b3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIG9wY29kZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAgICAg
ICAgIGVuZAorCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAg
ICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgaXNVRCh0
b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoi
KQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcu
bmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiLyIKKyAgICAgICAgICAgICAgICAg
ICAgY29uc3VtZSgiLyIpCisgICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW4uc3RyaW5nCisg
ICAgICAgICAgICAgICAgICAgIHdoZW4gImJyYW5jaCIKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wY29kZS5raW5kID0gOmJyYW5jaAorICAgICAgICAgICAgICAgICAgICB3aGVuICJ0ZXJtaW5h
bCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOnRlcm1pbmFsCisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkJhZCAvIGRpcmVjdGl2ZSIpCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgICAgICBhZHZhbmNlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBp
ZiBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAg
ICAgICAgICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9
IG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNb
LTFdLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNb
LTFdLnNwZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1
bWUoIioiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFs
dE5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisK
KyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJl
ciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWdu
YXR1cmUubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5k
ZXggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUg
PT0gIkltbTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVb
aW5kZXhdLnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIp
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlh
dGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwg
Rm9ybS5uZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1
bmxlc3MgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAg
ICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAg
ICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5k
CisKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWdu
YXR1cmUsIGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1
bHQKKyAgICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNl
ci5uZXcoSU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIu
cGFyc2UKKworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5h
bWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAu
cHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFt
ZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVm
IEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVu
YW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0
cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bj
b2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUg
OiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9w
Y29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91
dHAucHV0cyAifTsiCisKKyAgICBvdXRwLnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1P
cGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2Ug
V1RGIHsiCisgICAgb3V0cC5wdXRzICJjbGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5wdXRz
ICJ2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7
IgorICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorfQorCisjIEZyb20gaGVyZSBv
biwgd2UgZG9uJ3QgdHJ5IHRvIGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgc2luY2Ugd2Un
cmUgdXNpbmcgYSByZWN1cnNpdmUgcGF0dGVybgorIyBtYXRjaGVyLgorCitkZWYgbWF0Y2hGb3Jt
cyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwg
Y2FsbGJhY2spCisgICAgcmV0dXJuIGlmIGZvcm1zLmxlbmd0aCA9PSAwCisKKyAgICBpZiBmaWx0
ZXJbZm9ybXNdCisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgaWYgY29sdW1uSW5kZXgg
Pj0gZm9ybXNbMF0ua2luZHMubGVuZ3RoCisgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5n
dGggPT0gMQorICAgICAgICBjYWxsYmFja1tmb3Jtc1swXV0KKyAgICAgICAgcmV0dXJuCisgICAg
ZW5kCisgICAgCisgICAgZ3JvdXBzID0ge30KKyAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgfCBm
b3JtIHwKKyAgICAgICAga2luZCA9IGZvcm0ua2luZHNbY29sdW1uSW5kZXhdLm5hbWUKKyAgICAg
ICAgaWYgZ3JvdXBzW2tpbmRdCisgICAgICAgICAgICBncm91cHNba2luZF0gPDwgZm9ybQorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBncm91cHNba2luZF0gPSBbZm9ybV0KKyAgICAgICAgZW5k
CisgICAgfQorCisgICAgaWYgc3BlZWQgPT0gOmZhc3QgYW5kIGdyb3Vwcy5sZW5ndGggPT0gMQor
ICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXggKyAxLCBj
b2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIHJldHVybgorICAgIGVuZAor
CisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7Y29sdW1uR2V0dGVyW2NvbHVtbkluZGV4XX0pIHsi
CisgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgIHwga2V5LCB2YWx1ZSB8CisgICAgICAg
IG91dHAucHV0cyAiI2lmIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgICAg
ICBLaW5kLmFyZ0tpbmRzKGtleSkuZWFjaCB7CisgICAgICAgICAgICB8IGFyZ0tpbmQgfAorICAg
ICAgICAgICAgb3V0cC5wdXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToiCisgICAgICAgIH0KKyAg
ICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwgY29s
dW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAi
SW1tNjQiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisKK2RlZiBtYXRjaEluc3RPdmVybG9hZChv
dXRwLCBzcGVlZCwgaW5zdCkKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bjb2Rl
KSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAg
ICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBpZiBvcGNvZGUu
c3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0g
MSkgb3Igc3BlZWQgPT0gOnNhZmUpCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tp
bnN0fS0+YXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAg
b3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3Ro
fToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwg
b3ZlcmxvYWQKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0
Y2gKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAg
ICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
fQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
b3V0cC5wdXRzICJ9IgorZW5kCisgICAgCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAs
IHNwZWVkLCBpbnN0KQorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KSB7
CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFs
CisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbCwgbmlsCisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgY29sdW1uSW5k
ZXggfAorICAgICAgICAgICAgICAgICIje2luc3R9LT5hcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5k
KCkiCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQor
ICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGZvcm0gfAor
ICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIG92ZXJsb2FkLmZvcm1zLCAw
LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIGVuZAorICAgIH0KK2Vu
ZAorCit3cml0ZUgoIk9wY29kZVV0aWxzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRz
ICIjaW5jbHVkZSBcIkFpckluc3QuaFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJT
cGVjaWFsLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdl
bkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRl
PHR5cGVuYW1lIFQ+IgorICAgIG91dHAucHV0cyAiaW5saW5lIFQqIG9wZ2VuSGlkZGVuUHRySWRl
bnRpdHkoVCogcG9pbnRlcikgeyByZXR1cm4gcG9pbnRlcjsgfSIKKyAgICBvdXRwLnB1dHMgIiNk
ZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYg
KG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZh
bHVlO1xcIgorICAgIG91dHAucHV0cyAifSB3aGlsZSAoZmFsc2UpIgorCisgICAgb3V0cC5wdXRz
ICJ0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5zdDo6
Zm9yRWFjaEFyZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisg
ICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9w
Y29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAg
b3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbMF0sIEFyZzo6VXNlLCBBcmc6OkdQKTsgLy8gVGhpcyBp
cyBiYXNpY2FsbHkgYm9ndXMsIGJ1dCBpdCB3b3JrcyBmIGFuYWx5c2VzIG1vZGVsIFNwZWNpYWwg
YXMgYW4gaW1tZWRpYXRlLiIKKyAgICAgICAgICAgIG91dHAucHV0cyAiYXJnc1swXS5zcGVjaWFs
KCktPmZvckVhY2hBcmcoKnRoaXMsIHNjb3BlZExhbWJkYTxFYWNoQXJnQ2FsbGJhY2s+KGZ1bmN0
b3IpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNo
X3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAgICAg
ICAgICAgcm9sZSA9IG5pbAorICAgICAgICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAgICAg
ICAgICAgICB3aGVuICJVIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKKyAg
ICAgICAgICAgICAgICB3aGVuICJVRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VE
ZWYiCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiZnVuY3RvcihhcmdzWyN7aW5kZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJnLnR5
cGV9UCk7IgorICAgICAgICAgICAgfQorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRz
ICJ9IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Igor
ICAgIG91dHAucHV0cyAiQUxXQVlTX0lOTElORSBib29sIGlzVmFsaWRGb3JtKE9wY29kZSBvcGNv
ZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRw
LnB1dHMgIkFyZzo6S2luZCBraW5kc1tzaXplb2YuLi4oQXJndW1lbnRzKV0gPSB7IGFyZ3VtZW50
cy4uLiB9OyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVz
LnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNh
c2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoc2l6ZW9mLi4u
KEFyZ3VtZW50cykpIHsiCisgICAgICAgIHVubGVzcyBvcGNvZGUuc3BlY2lhbAorICAgICAgICAg
ICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVu
Z3RofToiCisgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7IHwgY29sdW1uSW5k
ZXggfCAib3BnZW5IaWRkZW5QdHJJZGVudGl0eShraW5kcylbI3tjb2x1bW5JbmRleH1dIiB9Cisg
ICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBj
YWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAg
ICAgICAgICAgICBzcGVjaWFsID0gKG5vdCBmb3JtLmtpbmRzLmRldGVjdCB7IHwga2luZCB8IGtp
bmQuc3BlY2lhbCB9KQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVS
Tigje3NwZWNpYWx9KTsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hdGNo
Rm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRl
ciwgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAg
ICAgICB9CisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAg
ICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBvdXRw
LnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRw
LnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4g
ZmFsc2U7ICIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29s
IGlzVGVybWluYWwoT3Bjb2RlIG9wY29kZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAu
cHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAg
ICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5hbCBvciBv
cGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNv
ZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1
ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxz
ZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRw
LnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlSCgiT3Bj
b2RlR2VuZXJhdGVkIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBc
IkFpckluc3RJbmxpbmVzLmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50
U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1
dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAu
cHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bj
b2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAi
ICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmlu
dChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47Igor
ICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMg
In0gLy8gbmFtZXNwYWNlIFdURiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6Omlz
VmFsaWRGb3JtKCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9y
bShvdXRwLCA6c2FmZSwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9y
bSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlm
IChhcmdzLnNpemUoKSA8IDEpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7
IgorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAg
ICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAg
fCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRl
eF0ucm9sZQorICAgICAgICAgICAgICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhd
LnR5cGUKKyAgICAgICAgICAgICAgICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAg
ICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0
Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAg
ICAgICAgICAjIGtpbmQgaW1wbGllcyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2
YWxpZGF0ZSBpcyB0aGUgdHlwZS4gQW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMg
dG8gdmFsaWRhdGUgdGhlIHR5cGUgaWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBp
ZiBraW5kLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAo
IWFyZ3NbI3tpbmRleH1dLnRtcCgpLmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWlzI3tvcGNvZGUubmFtZX1WYWxpZCgqdGhpcykpIgor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAg
ICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRw
LnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5zaWdu
ZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAo
b3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUg
fAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAgIGlm
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgpIgor
ICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlzLCBh
cmdJbmRleCkpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhlIGFy
Z0luZGV4LgorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7IgorCisg
ICAgICAgICAgICBudW1BcmdzID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAgICAg
ICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5n
dGgKKyAgICAgICAgICAgIH0ubWF4CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFyZ3Mu
dGltZXMgeworICAgICAgICAgICAgICAgIHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlm
IGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxsIG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBvciBk
b24ndCwgYWRtaXQgYW4gYWRkcmVzcworICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRleC4g
V2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgICAg
IG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICBv
cGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwK
KyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5k
c1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVz
ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgTm90
ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdlIGVu
ZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkgdGhh
dCBBZGRyZXNzIGlzIGluYWRtaXNzaWJsZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0g
MAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7Igor
ICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgIyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAgICAg
ICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpCisK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7IiBp
ZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fk
cy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAgICAg
ICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0IHdl
IHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAg
ICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZv
cm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1O
byArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAg
ICAgICAgICAgICAgICAgICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0byBk
ZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3ZSB0
ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3JtLgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJh
cmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBmb3JtcyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAK
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0g
MAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVtaXQg
bm8gY29kZSwgc2luY2Ugd2UgY2Fubm90IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1z
KG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNh
bGxiYWNrKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dp
dGNoCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImRlZmF1bHQ6IgorICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsi
CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAg
SW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250
ZXh0KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oaml0
KTsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oY29udGV4dCk7IgorICAgIG91dHAucHV0
cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIHJlc3VsdDsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3Jt
KG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3Jt
IHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250ZXh0
KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAg
ICAgICAgICBtZXRob2ROYW1lID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgbWV0aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICAgICAg
b3V0cC5wcmludCAicmVzdWx0ID0gIgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRw
LnByaW50ICJqaXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMuZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAg
ICAgICAgICBpZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgIiwg
IgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1lCisg
ICAgICAgICAgICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9h
ZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZnBy
KCkiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIkltbSIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVk
SW1tMzIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tNjQoKSIKKyAgICAgICAg
ICAgICAgICB3aGVuICJBZGRyIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdz
WyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgo
KSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJSZXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAgICAg
ICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAgIH0K
KyAgICBvdXRwLnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAu
cHV0cyAicmV0dXJuIHJlc3VsdDsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRz
ICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxOTE1MzkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE3MCw3ICsxNzAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRl
cm5hdGl2ZUZvckpldHRpc29uKCk7ICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5h
dGl2ZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5h
dGl2ZSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMuCiAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTE1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYgQEAgcHVibGljOgog
ICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIAogICAg
IGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IGludmFsaWQoKTsgfQotICAg
IGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogCiAgICAgYm9vbCBp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gZGVsZXRl
ZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFsbFJlZ3NJdGVyYWJsZSB7CisgICAg
cHVibGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3Io
UmVnIHJlZykKKyAgICAgICAgICAgICAgICA6IG1fcmVnSW5kZXgocmVnLmluZGV4KCkpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBj
b25zdCB7IHJldHVybiBSZWc6OmZyb21JbmRleChtX3JlZ0luZGV4KTsgfQorCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9yZWdJbmRleCA9IFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpLm5leHQoKS5pbmRleCgpOwor
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9yZWdJbmRleCA9PSBvdGhlci5tX3JlZ0lu
ZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRl
OgorICAgICAgICAgICAgdW5zaWduZWQgbV9yZWdJbmRleDsKKyAgICAgICAgfTsKKworICAgICAg
ICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7
IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkp
OyB9CisgICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgeyByZXR1cm4g
QWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZh
bGlkKCkgeyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxNTM5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVy
QXRPZmZzZXRMaQogICAgIGlmIChvZmZzZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkK
ICAgICAgICAgb2Zmc2V0ID0gLShzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0
ZXJzKSAqIHNpemVvZih2b2lkKikpOwogCi0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgp
OyByZWcgPD0gUmVnOjpsYXN0KCk7cmVnID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJl
ZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7
CiAgICAgICAgIGlmIChyZWdpc3RlclNldC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5k
KFJlZ2lzdGVyQXRPZmZzZXQocmVnLCBvZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBz
aXplb2Yodm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0
T2Zmc2V0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJBdE9mZnNldExpc3QuaAkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2
ICs2Niw5IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zmc2V0KiBmaW5kKFJlZykgY29uc3Q7
CiAgICAgdW5zaWduZWQgaW5kZXhPZihSZWcpIGNvbnN0OyAvLyBSZXR1cm5zIFVJTlRfTUFYIGlm
IG5vdCBmb3VuZC4KIAorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVycy5iZWdpbigpOyB9CisgICAgVmVj
dG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBtX3JlZ2lzdGVycy5lbmQoKTsgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0
T2Zmc2V0PiBtX3JlZ2lzdGVyczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlclNldC5oCShyZXZpc2lvbiAxOTE1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTMgQEAgcHVi
bGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWdu
ZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iu
c2V0Qml0cygpKQorICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOwor
ICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVn
KTsgfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTAtMjQgIEZpbGlwIFBpemxvICA8
ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBDcmVhdGUgYSBzdXBlciByb3VnaCBwcm90b3R5
cGUgb2YgQjMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDI4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL01hdGhFeHRy
YXMuaDoKKyAgICAgICAgKFdURjo6cmFuZ2VzT3ZlcmxhcCk6IE5pY2UgdXRpbGl0eSBmb3IgY2hl
Y2tpbmcgaWYgcmFuZ2VzIG92ZXJsYXAuCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBh
IEVOQUJMRShCM19KSVQpIGZlYXR1cmUgZmxhZy4KKyAgICAgICAgKiB3dGYvU2NvcGVkTGFtYmRh
Lmg6IEFkZGVkLiBUaGlzIGFsbG93cyB1cyB0byBkbyB6ZXJvLWFsbG9jYXRpb24sIHplcm8tY29w
eSBleHRlcm4gbGFtYmRhcy4KKyAgICAgICAgKFdURjo6c2NvcGVkTGFtYmRhKToKKyAgICAgICAg
KiB3dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpjcmVhdGVTaGFyZWRUYXNrKToKKwog
MjAxNS0xMC0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZh
Y3RvciBvdXQgdGhlIGdyYXBoIG5vZGUgd29ya2xpc3RzIGZyb20gREZHIGludG8gV1RGCkluZGV4
OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTUz
OSkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIFdv
cmRMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJMEZFQjNEQ0Yx
QkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRU
YXNrLmggKi87IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rv
ckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICov
OyB9OworCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCMDFCREFDRDM5
MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJEODI1MzEwMDgw
RkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdv
cmtsaXN0LmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdC
NTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkwRkY4NjA5NTFCQ0NC
RDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2lu
dGVyQ29tcGFyaXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBGRTQ0NzlCMUI3
QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0RDRTFC
QjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIz
REQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3Bl
ZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRMYW1iZGEu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0
IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2
N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5NDE2RUFBRkY4
MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVBQjA0MTAwMjRF
MTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFBRkY4MDAyNEUx
NDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3
NCAvKiBTY29wZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0MTIzRkYgLyog
U2VnbWVudGVkVmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEyM0ZGIC8qIFNl
bnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQxMjNGRiAvKiBT
SEExLmNwcCAqLywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFt
YmRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIzRkYgLyogVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QjYx
QjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291
cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01h
dGhFeHRyYXMuaAkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJh
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTksNiArNDE5LDE2IEBAIGlubGluZSBUIGxlZnRTaGlm
dFdpdGhTYXR1cmF0aW9uKFQgdmFsdWUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgcmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQgbGVm
dE1heCwgVCByaWdodE1pbiwgVCByaWdodE1heCkKK3sKKyAgICBpZiAobGVmdE1pbiA8PSByaWdo
dE1pbiAmJiBsZWZ0TWF4ID49IHJpZ2h0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBp
ZiAocmlnaHRNaW4gPD0gbGVmdE1pbiAmJiByaWdodE1heCA+PSBsZWZ0TWluKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgog
CiAjZW5kaWYgLy8gI2lmbmRlZiBXVEZfTWF0aEV4dHJhc19oCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJl
dmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3NiwxMiArNzc2LDIwIEBACiAjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJVCAx
CiAjZW5kaWYKIAorLyogVGhlIEIzIGNvbXBpbGVyIGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNrZW5k
IHRoYXQgaXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQuIFdlIHdpbGwga2VlcCBpdCBidWlsZGluZwor
ICAgb24gRGFyd2luL3g4Ni02NCBmb3Igbm93LCB0aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2VwdCBm
b3IgdGVzdHMuICovCisjaWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQorI2RlZmluZSBFTkFC
TEVfQjNfSklUIDEKKyNlbmRpZgorCiAvKiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFp
bGFibGUsIHRoZW4gZGlzYWJsZSB1cHBlciB0aWVycyBhcyB3ZWxsOiAqLwogI2lmICFFTkFCTEUo
SklUKQotI3VuZGVmIEVOQUJMRV9ERkdfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4g
cmVkZWZpbmUgaXQuICovCi0jdW5kZWYgRU5BQkxFX0ZUTF9KSVQgICAgICAvKiBVbmRlZiBzbyB0
aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI3VuZGVm
IEVOQUJMRV9GVExfSklUCisjdW5kZWYgRU5BQkxFX0IzX0pJVAogI2RlZmluZSBFTkFCTEVfREZH
X0pJVCAwCiAjZGVmaW5lIEVOQUJMRV9GVExfSklUIDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJVCAw
CiAjZW5kaWYKIAogLyogQ291bnRzIHVzZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxp
bmcgY291bnRlcnMuIEJlIHN1cmUgdG8gYWxzbwpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVk
TGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gK
KworbmFtZXNwYWNlIFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZp
Y2llbnRseSBwYXNzIGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJp
bmcKKy8vIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUg
c2hvdWxkIGJlIGRlY2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJk
YTxNeVRoaW5ncyogKGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9l
czoKKy8vCisvLyB2b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+
KFsmXSAoaW50IHgsIFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBO
b3RlIHRoYXQgdGhpcyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRo
ZSBsYW1iZGEgaXMgb25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0g
aGVuY2UgdGhlIG5hbWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
blR5cGU+IGNsYXNzIFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlw
ZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0
VHlwZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZv
aWQqIGFyZyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9h
cmcoYXJnKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFy
Z3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9pbXBsKG1fYXJnLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7
CisgICAgfQorCitwcml2YXRlOgorICAgIFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywg
QXJndW1lbnRUeXBlcyYmLi4uKTsKKyAgICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRh
RnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJl
c3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1i
ZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBQYXNzZWRGdW5jdG9yPgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2Vk
RnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pPihpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9y
KHN0ZDo6Zm9yd2FyZDxQYXNzZWRGdW5jdG9yPihmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitw
cml2YXRlOgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVu
dCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisg
ICAgICAgICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7Cisg
ICAgfQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0
aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAg
IHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3RkOjpm
b3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6U2NvcGVkTGFtYmRhOwordXNpbmcgV1RGOjpzY29wZWRMYW1iZGE7CisKKyNlbmRp
ZiAvLyBTY29wZWRMYW1iZGFfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTE1
MzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDYgKzc5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0
b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5j
dG9yKSkKKyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3Vt
ZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwx
MSBAQCBSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9y
PihmdW5jdG9yKSk7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1l
IEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNr
KEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRh
c2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>263997</attachid>
            <date>2015-10-24 19:05:46 -0700</date>
            <delta_ts>2015-10-24 19:41:01 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>611155</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MyBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6Okxvd2VyaW5nU2VsZWN0b3I6Okxvd2VyaW5nU2VsZWN0b3Ip
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjph
Y2NlcHRSb290KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdT
ZWxlY3Rvcjo6YWNjZXB0Um9vdExhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHNMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6
YWNjZXB0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dl
cmluZ1NlbGVjdG9yOjphY2NlcHRPcGVyYW5kc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlMb2FkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5QWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmVBZGRM
b2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rv
cjo6dHJ5U3RvcmVBbmRMb2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlDb25zdDMyKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6QjM6Omxvd2VyVG9BaXIpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQuCisgICAg
ICAgICogYjMvQjNNZW1vcnlWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6TWVt
b3J5VmFsdWU6On5NZW1vcnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6
ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpNZW1v
cnlWYWx1ZTo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpNZW1vcnlW
YWx1ZSk6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNPcGNvZGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjppc0NoZWNrTWF0aCk6CisgICAgICAgICogYjMvQjNPcmlnaW4uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZHVtcCk6CisgICAgICAgICogYjMvQjNPcmln
aW4uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46Ok9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpQYXRj
aHBvaW50U3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6flBh
dGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpm
b3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlk
KToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQYXRjaHBv
aW50VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6
flBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIz
OjpQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgICogYjMvQjNQaGFz
ZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQaGFzZVNjb3BlOjpQaGFzZVNj
b3BlKToKKyAgICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6On5QaGFzZVNjb3BlKToKKyAgICAg
ICAgKiBiMy9CM1BoYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQcm9jZWR1cmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJvY2VkdXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6flByb2NlZHVyZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcik6CisgICAgICAgICog
YjMvQjNQcm9jZWR1cmUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNp
emUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphdCk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpp
dGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6OmZpbmROZXh0KToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjpWYWx1ZXNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRl
cmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6VmFsdWVzQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OlZhbHVlc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OnZhbHVlcyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGQpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90
S2luZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBiMy9CM1N0YWNrU2xvdEtpbmQuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNTdGFja1Nsb3RW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6On5TdGFj
a1Nsb3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90VmFsdWUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpTdGFja1Nsb3RWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Ns
b3RWYWx1ZTo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Omtp
bmQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Om9mZnNldEZyb21GUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpTdGFja1Nsb3RWYWx1ZSk6CisgICAgICAgICog
YjMvQjNTdGFja21hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmR1
bXApOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcDo6U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6b3BhcXVlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlN0YWNrbWFwOjpzZXRPcGFxdWVJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFj
a21hcDo6b3BhcXVlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmNvbnN0cmFp
bik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xvYmJlcik6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcDo6Y2xvYmJlcmVkKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpz
ZXRHZW5lcmF0b3IpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwpOgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpTdWNjZXNzb3JDb2xsZWN0
aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OnNpemUpOgorICAg
ICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpT
dWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0
b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpiZWdpbik6Cisg
ICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAqIGIz
L0IzU3dpdGNoQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6
ZHVtcCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hD
YXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6OmNhc2VW
YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0YXJnZXQpOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoQ2FzZTo6dGFyZ2V0QmxvY2spOgorICAgICAgICAqIGIzL0IzU3dpdGNo
VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjp+U3dpdGNo
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmFwcGVuZENhc2UpOgorICAgICAgICAoSlNDOjpC
Mzo6U3dpdGNoVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjpTd2l0Y2hWYWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6
OlN3aXRjaFZhbHVlOjpudW1DYXNlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZh
bHVlOjpjYXNlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmZhbGxUaHJvdWdoKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRj
aFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoVmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6QjM6OlN3aXRjaFZhbHVlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1
ZTo6ZW5kKToKKyAgICAgICAgKiBiMy9CM1R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNUeXBlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6aXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6aXNGbG9hdCk6CisgICAgICAgIChK
U0M6OkIzOjpwb2ludGVyVHlwZSk6CisgICAgICAgICogYjMvQjNVcHNpbG9uVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M1Vwc2lsb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6
YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OnBoaSk6CisgICAgICAg
IChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OlVwc2lsb25WYWx1ZSk6CisgICAgICAgICogYjMvQjNV
c2VDb3VudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6VXNlQ291
bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6flVzZUNvdW50cyk6CisgICAgICAg
ICogYjMvQjNVc2VDb3VudHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpVc2VDb3VudHM6
Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OnZhbGlkYXRlKToKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjp+VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRp
dHkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoTm9wKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkZWVwRHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZTo6dHlwZUZvcik6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcmlnaW4pOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoaWxkKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphaXJUeXBl
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpjaGlsZHJlbik6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6RGVlcFZhbHVlRHVtcDo6RGVlcFZh
bHVlRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlSW5saW5lcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphcyk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50MzIpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
Ojphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmFzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0ludCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjphc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3RhY2ttYXApOgor
ICAgICAgICAqIGIzL0IzVmFsdWVSZXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlUmVwOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvQjNWYWx1ZVJlcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpWYWx1
ZVJlcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpzdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6c3RhY2tB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6Y29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6OmNvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjpraW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvZmZzZXRGcm9tRlApOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9mZnNldEZyb21TUCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZVJlcDo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmRvdWJsZVZhbHVl
KToKKyAgICAgICAgKiBiMy9haXI6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJBcmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpk
dW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0RlZik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjphZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpzdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Y2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNWYWxpZFNjYWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpsb2dT
Y2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aW5kZXgpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OnJlbENvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnJl
c0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnNwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmtpbmQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ltbSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbW02NCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1N0YWNr
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0NhbGxBcmcpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
UmVsQ29uZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXNDb25kKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnRtcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OnBvaW50ZXJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YmFzZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c2NhbGUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlBU
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc1R5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omdwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZwcik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Z3BUbXBJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnBUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpdGhPZmZzZXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjphc1RydXN0ZWRJbW0zMik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVz
dGVkSW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbVB0cik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjphc0Jhc2VJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
YXNSZWxhdGlvbmFsQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1Jl
c3VsdENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpC
YXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQmFzaWNCbG9jay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Js
b2NrOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6bnVt
U3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVl
cEJhc2ljQmxvY2tEdW1wOjpEZWVwQmFzaWNCbG9ja0R1bXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpk
ZWVwRHVtcCk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2Fs
bFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
Q2FsbFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNw
ZWNpYWw6OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpk
ZWVwRHVtcEltcGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaDogQWRkZWQu
CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6Q29kZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6On5Db2RlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphZGRTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjphZGRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y0NhbGxTcGVjaWFs
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OmZpbmROZXh0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZpbmRO
ZXh0QmxvY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpudW1UbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbEFyZ0FyZWFTaXpl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVxdWVzdENhbGxBcmdBcmVhU2l6ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OnNldEZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpv
cGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6Q29kZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246OlN0YWNrU2xvdHNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNr
U2xvdHNDb2xsZWN0aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
dGFja1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjpTcGVjaWFsc0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3Bl
Y2lhbHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29k
ZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciop
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzcGVjaWFscyk6CisgICAgICAgICogYjMvYWlyL0FpckZy
ZXF1ZW50ZWRCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIz
L2Fpci9BaXJHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGVk
LmNwcDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Okluc2VydGlvblNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6Y29kZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc2VydGlvblNldDo6YXBwZW5kSW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0LmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmR1bXApOgorICAgICAgICAqIGIz
L2Fpci9BaXJJbnN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpJbnN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0Ojpmb3JFYWNoVG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8VG1wPjo6Zm9yRWFjaCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8QXJnPjo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc3Q6OmZvckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpo
YXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6ZXh0cmFDbG9iYmVyZWRS
ZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzU2hpZnRWYWxpZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmlzTHNoaWZ0MzJWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6bGl2ZUF0SGVhZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpsaXZlQXRUYWlsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxDYWxjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6bGl2ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVu
ZXNzOjpMb2NhbENhbGM6OnRha2VMaXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5l
c3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJQaGFzZVNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdwcnNJblByaW9yaXR5
T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpmcHJzSW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMv
YWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPjo6aW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+Ojpp
blByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZWdzSW5Qcmlvcml0eU9y
ZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3BlY2lhbDo6flNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpuYW1l
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlNwZWNpYWw6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFNwZWNpYWxEdW1wOjpEZWVw
U3BlY2lhbER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OmR1
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAgICogYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpz
cGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0
YWNrU2xvdDo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OlN0
YWNrU2xvdCk6CisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpieXRlU2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlN0YWNrU2xvdDo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xv
dDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6dmFsdWUpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTdGFja1Nsb3Q6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkRlZXBTdGFja1Nsb3REdW1wOjpEZWVwU3RhY2tTbG90RHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkRlZXBTdGFja1Nsb3REdW1wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6Z3BUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6ZnBUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3Ig
Ym9vbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6aXNGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUFIp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRlBSKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6Z3ByKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzVG1wSW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmdwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpUbXA6OmZwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OnRtcElu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0FsaXZlKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzaCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmVuY29kZUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUZQUik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlRtcDo6ZW5jb2RlR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVu
Y29kZUZQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNFbmNvZGVkRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlBUbXApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZGVjb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZGVjb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXBIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXBJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgICogYjMvYWlyL0FpclZh
bGlkYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnZhbGlkYXRlKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmI6IEFkZGVkLgorICAgICAgICAqIGIzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYjogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpjb21waWxlQW5kUnVuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3Q0Mik6
CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogaml0
L1JlZy5oOgorICAgICAgICAoSlNDOjpSZWc6OmluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnOjpp
c1NldCk6CisgICAgICAgIChKU0M6OlJlZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6
OlJlZzo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6UmVnOjpBbGxS
ZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpSZWc6OkFs
bFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpSZWc6
OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpS
ZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6UmVnOjphbGwpOgorICAgICAgICAoSlND
OjpSZWc6OmludmFsaWQpOgorICAgICAgICAoSlNDOjpSZWc6Om9wZXJhdG9yISk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0KToKKyAgICAgICAgKiBq
aXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmVuZCk6
CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpzZXRBbnkpOgorCiAyMDE1LTEwLTI0ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgog
CiAgICAgICAgIFRlYWNoIGNyZWF0ZV9oYXNoX3RhYmxlIHRvIG9taXQgYnVpbHRpbnMgbWFjcm9z
IHdoZW4gZ2VuZXJhdGluZyB0YWJsZXMgZm9yIG5hdGl2ZS1vbmx5IG9iamVjdHMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxOTE1Mzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsNyBAQCBWUEFUSCA9IFwKIAogUFlUSE9OID0gcHl0aG9uCiBQRVJM
ID0gcGVybAorUlVCWSA9IHJ1YnkKIAogSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIgPSAkKEph
dmFTY3JpcHRDb3JlKS9TY3JpcHRzCiAKQEAgLTU5LDYgKzYwLDEzIEBAIGFsbCA6IFwKICAgICBM
ZXhlci5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5oIFwKICAgICBSZWdFeHBKaXRUYWJsZXMu
aCBcCisgICAgQjNMb3dlcmluZ01hdGNoZXIuaCBcCisgICAgQjNBZGRyZXNzTWF0Y2hlci5oIFwK
KyAgICBCM0NvbXBhcmlzb25NYXRjaGVyLmggXAorICAgIEFpck9wY29kZS5oIFwKKyAgICBBaXJP
cGNvZGUuY3BwIFwKKyAgICBBaXJPcGNvZGVVdGlscy5oIFwKKyAgICBBaXJPcGNvZGVVdGlscy5j
cHAgXAogIwogCiAjIEphdmFTY3JpcHQgYnVpbHRpbnMuCkBAIC0yNjIsNiArMjcwLDIyIEBAIElO
UFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUyA9IFwKIEpTUmVwbGF5SW5wdXRzLmggOiAkKElO
UFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBVVF9HRU5FUkFUT1JfU0NSSVBUUykK
IAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
clJlcGxheUlucHV0cy5weSAtLW91dHB1dERpciAuIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3Jl
ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQogCitCM0xvd2VyaW5nTWF0Y2hlci5o
OiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZh
U2NyaXB0Q29yZSkvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReIAor
QjNBZGRyZXNzTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJu
X21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJu
cworCSQoUlVCWSkgJF4KK0IzQ29tcGFyaXNvbk1hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkv
YjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzQ29t
cGFyaXNvbk1hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReCisKK0Fpck9wY29kZS5oOiAkKEph
dmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRDb3Jl
KS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNvZGUuY3BwOiAk
KEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRD
b3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNvZGVVdGls
cy5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNv
ZGVVdGlscy5jcHA6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJi
ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworCSQoUlVCWSkgJF4K
KwogIyBEeW5hbWljYWxseS1kZWZpbmVkIHRhcmdldHMgYXJlIGxpc3RlZCBiZWxvdy4gU3RhdGlj
IHRhcmdldHMgYmVsb25nIHVwIHRvcC4KIAogYWxsIDogXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNp
ZXMgPSAoCisJCQkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNTExNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNTUxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCkBAIC02ODUsNiArNjg2LDEyMSBAQAogCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMg
LyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi87IH07
CiAJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5oICovOyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyog
TWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAq
LzsgfTsKKwkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
NDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovOyB9OworCQkwRkVDODUwMDFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2su
Y3BwICovOyB9OworCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNzFC
REFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi87IH07CisJCTBGRUM4NTAyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNC
YXNpY0Jsb2NrSW5saW5lcy5oICovOyB9OworCQkwRkVDODUwMzFCREFDREFDMDA4MEZGNzQgLyog
QjNCYXNpY0Jsb2NrVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5o
ICovOyB9OworCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQTFC
REFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi87IH07CisJCTBGRUM4NTA1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1NwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovOyB9Owor
CQkwRkVDODUwNzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJEMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUwODFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi87
IH07CisJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tb24uY3BwICovOyB9OworCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyB9OworCQkwRkVD
ODUwQjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwICovOyB9OworCQkwRkVDODUwQzFCREFDREFDMDA4MEZG
NzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5
LmggKi87IH07CisJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
MzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUw
RTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0MzJWYWx1ZS5oICovOyB9OworCQkwRkVDODUwRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5o
ICovOyB9OworCQkwRkVDODUxMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Qzkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjND
b250cm9sVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJl
cXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICov
OyB9OworCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0MxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLzsgfTsKKwkJMEZFQzg1MTcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNG
cmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovOyB9OworCQkw
RkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJhdGUuaCAqLzsgfTsKKwkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxQjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1h
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLzsgfTsKKwkJMEZFQzg1MUMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0
LmggKi87IH07CisJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi87IH07CisJCTBGRUM4NTFFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuaCAqLzsgfTsKKwkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovOyB9OworCQkwRkVD
ODUyMDFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTWVtb3J5VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MjExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi87IH07CisJCTBGRUM4
NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bj
b2RlLmggKi87IH07CisJCTBGRUM4NTIzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREOTFC
REFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovOyB9OworCQkwRkVDODUyNDFCREFDREFD
MDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovOyB9
OworCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQjFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4
NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQzFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovOyB9OworCQkwRkVDODUyNzFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0
Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERjFCREFDREFD
MDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5o
ICovOyB9OworCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUu
aCAqLzsgfTsKKwkJMEZFQzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovOyB9OworCQkwRkVD
ODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNDFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja21hcC5jcHAgKi87IH07CisJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrbWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovOyB9OworCQkwRkVDODUz
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNw
ZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovOyB9OworCQkwRkVDODUzNDFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RW
YWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xv
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovOyB9OworCQkw
RkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFD
MDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CisJCTBGRUM4NTM3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoQ2FzZS5jcHAgKi87IH07CisJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRj
aENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsKKwkJMEZFQzg1
MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLzsgfTsK
KwkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMTFCREFDREFDMDA4MEZGNzQg
LyogQjNUeXBlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovOyB9OworCQkwRkVDODUzRDFCREFDREFD
MDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLzsgfTsKKwkJMEZF
Qzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1VzZUNvdW50cy5jcHAgKi87IH07CisJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi87IH07CisJCTBG
RUM4NTQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07CisJCTBGRUM4
NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTQ1MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVz
LmggKi87IH07CisJCTBGRUM4NTQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDcxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmgg
Ki87IH07CisJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ4
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NkUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBbGxvY2F0ZVN0YWNrLmggKi87IH07CisJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi87IH07CisJCTBGRUM4
NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
aCAqLzsgfTsKKwkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovOyB9OworCQkwRkVDODU3MjFC
REFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJh
c2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxs
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLzsgfTsK
KwkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovOyB9OworCQkwRkVDODU3NTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi87IH07
CisJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MTFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ29kZS5oICovOyB9OworCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJl
cXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi87
IH07CisJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MzFCREFDREM3
MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovOyB9OworCQkwRkVDODU3OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICov
OyB9OworCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU1
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovOyB9OworCQkwRkVD
ODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLzsgfTsKKwkJMEZFQzg1N0MxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NzFCREFDREM3MDA4MEZGNzQgLyog
QWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLzsgfTsKKwkJMEZFQzg1N0QxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU1ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0
LmNwcCAqLzsgfTsKKwkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1
NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovOyB9OworCQkwRkVDODU3
RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dC5jcHAgKi87IH07CisJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QjFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovOyB9OworCQkwRkVDODU4MTFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5o
ICovOyB9OworCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVEMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovOyB9OworCQkwRkVDODU4MzFCREFDREM3MDA4
MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5jcHAgKi87IH07CisJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovOyB9OworCQkwRkVDODU4NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MDFCREFDREM3MDA4MEZGNzQg
LyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi87IH07CisJCTBGRUM4NTg2MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0
ZXJQcmlvcml0eS5oICovOyB9OworCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4
NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BlY2lhbC5oICovOyB9OworCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxF
dmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICov
OyB9OworCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi87IH07CisJCTBGRUM4NThC
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clN0YWNrU2xvdC5jcHAgKi87IH07CisJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
dGFja1Nsb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLzsgfTsKKwkJMEZF
Qzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2ODFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wLmNwcCAqLzsgfTsKKwkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovOyB9OworCQkwRkVDODU4RjFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElubGluZXMuaCAq
LzsgfTsKKwkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTZCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTkxMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmgg
Ki87IH07CisJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1OTIxQkRC
MUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi87IH07CisJCTBGRUM4NUEzMUJEQjVD
RjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QTQxQkRCNUNGMTAwODBGRjc0IC8q
IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGRUM4NUFGMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0
YjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIy
NjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGRUQ2N0JBMUIy
NjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I4MUIyNjI1NkQwMDY2Q0Ux
NSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLzsgfTsKIAkJMEZFRTk4NDExQTg4NjVC
NzAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBW
YXJhcmdzRnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTgzOSw2ICsxOTU1LDEzIEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBG
Q0VGQUI1MTgwNUQ2MTYwMDQ3MkNFNDsKIAkJCXJlbW90ZUluZm8gPSBsbHZtRm9ySlNDOwogCQl9
OworCQkwRkVDODVCMDFCREI1RDhGMDA4MEZGNzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
ID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFs
ID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJv
eHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZFQzg1OTQxQkRCNUNGMTAw
ODBGRjc0OworCQkJcmVtb3RlSW5mbyA9IHRlc3RiMzsKKwkJfTsKIAkJMEZGOTIyRDIxNEY0NkIy
RjAwNDFBMjRFIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENv
bnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZD
MDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTI1ODAsNiArMjcwMywxMjAgQEAKIAkJ
MEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZS5jcHA7IHBhdGggPSBkZmcvREZHSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTMwMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0pJVENvZGUuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNBcmd1bWVudFJlZ1ZhbHVlLmg7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0Jhc2ljQmxvY2suY3BwOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2su
aDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2tVdGlscy5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0Jsb2NrV29ya2xpc3QuaDsgcGF0aCA9IGIzL0IzQmxvY2tXb3Jr
bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQjFCREFDREFDMDA4
MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNDaGVja1NwZWNpYWwuY3BwOyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQg
LyogQjNDaGVja1NwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjND
aGVja1NwZWNpYWwuaDsgcGF0aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDaGVja1ZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM0NoZWNr
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQ29tbW9uLmNwcDsgcGF0aCA9IGIzL0IzQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29tbW9uLmg7IHBhdGggPSBiMy9CM0Nv
bW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29tbXV0YXRpdml0eS5jcHA7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzQ29tbXV0YXRpdml0eS5oOyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
MzJWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0
MzJWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0MzJWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0MzJWYWx1ZS5oOyBw
YXRoID0gYjMvQjNDb25zdDMyVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3Q2NFZhbHVlLmNwcDsgcGF0aCA9IGIz
L0IzQ29uc3Q2NFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQ29uc3Q2NFZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNzFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0RG91Ymxl
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDODFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzQ29uc3REb3VibGVWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0NvbnRyb2xWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Nv
bnRyb2xWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb250cm9sVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNGcmVxdWVuY3lD
bGFzcy5jcHA7IHBhdGggPSBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGcmVxdWVuY3lDbGFzcy5o
OyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9
IGIzL0IzRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzR2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvQjNHZW5lcmF0
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENGMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0dlbmVyYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
R2VuZXJhdGUuaDsgcGF0aCA9IGIzL0IzR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVyaWNGcmVxdWVu
dGVkQmxvY2suaDsgcGF0aCA9IGIzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0luZGV4TWFwLmg7IHBh
dGggPSBiMy9CM0luZGV4TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzSW5kZXhTZXQuaDsgcGF0aCA9IGIzL0IzSW5kZXhTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93
ZXJUb0Fpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0xvd2Vy
VG9BaXIuY3BwOyBwYXRoID0gYjMvQjNMb3dlclRvQWlyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0xvd2VyVG9BaXIuaDsgcGF0aCA9IGIz
L0IzTG93ZXJUb0Fpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENTFC
REFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM01lbW9yeVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENjFCREFDREFDMDA4
MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM01lbW9yeVZhbHVlLmg7IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09wY29kZS5jcHA7IHBh
dGggPSBiMy9CM09wY29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM09wY29kZS5oOyBwYXRoID0gYjMvQjNPcGNvZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luLmNwcDsgcGF0
aCA9IGIzL0IzT3JpZ2luLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzT3JpZ2luLmg7IHBhdGggPSBiMy9CM09yaWdpbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50
U3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BhdGNo
cG9pbnRTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50U3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Bh
dGNocG9pbnRTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1BhdGNocG9pbnRWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Bh
dGNocG9pbnRWYWx1ZS5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VT
Y29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BoYXNlU2Nv
cGUuY3BwOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL0Iz
UGhhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMTFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNQcm9jZWR1cmUuY3BwOyBwYXRoID0gYjMvQjNQcm9jZWR1cmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyog
QjNQcm9jZWR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1
cmUuaDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM1Byb2NlZHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja21hcC5jcHA7IHBhdGggPSBiMy9CM1N0YWNr
bWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNTdGFja21hcC5oOyBwYXRoID0gYjMvQjNTdGFja21hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja21hcFNwZWNp
YWwuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNp
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwu
aDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmNwcDsg
cGF0aCA9IGIzL0IzU3RhY2tTbG90S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9C
M1N0YWNrU2xvdEtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1N0
YWNrU2xvdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNTdGFja1Nsb3RWYWx1ZS5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBwYXRoID0gYjMvQjNTdWNjZXNzb3JD
b2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVEMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNTd2l0Y2hDYXNlLmNwcDsgcGF0aCA9IGIzL0IzU3dpdGNoQ2FzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTd2l0
Y2hDYXNlLmg7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTd2l0Y2hWYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM1N3aXRjaFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTd2l0Y2hWYWx1ZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMTFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzVHlwZS5jcHA7IHBhdGggPSBiMy9CM1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVHlwZS5oOyBwYXRoID0gYjMvQjNUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Vw
c2lsb25WYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25W
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Vwc2lsb25WYWx1ZS5o
OyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXNlQ291bnRzLmNwcDsgcGF0aCA9IGIzL0Iz
VXNlQ291bnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVXNlQ291bnRzLmg7IHBhdGggPSBiMy9CM1VzZUNvdW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbGlkYXRlLmNw
cDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbGlkYXRlLmg7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWUuaDsgcGF0aCA9IGIzL0IzVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVJbmxp
bmVzLmg7IHBhdGggPSBiMy9CM1ZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbHVlUmVwLmNwcDsgcGF0aCA9IGIz
L0IzVmFsdWVSZXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGRDFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1ZhbHVlUmVwLmg7IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0
ZVN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9j
YXRlU3RhY2suY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0OTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0
ZVN0YWNrLmg7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFyZy5jcHA7IHBhdGggPSBi
My9haXIvQWlyQXJnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJBcmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmFzaWNCbG9jay5jcHA7
IHBhdGggPSBiMy9haXIvQWlyQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJhc2ljQmxvY2suaDsgcGF0aCA9IGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRF
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJDQ2FsbFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5oOyBwYXRoID0gYjMvYWlyL0FpckNDYWxs
U3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJDb2RlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDb2RlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ29kZS5oOyBwYXRoID0gYjMvYWly
L0FpckNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9IGIzL2Fpci9BaXJGcmVxdWVu
dGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckdlbmVyYXRlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5l
cmF0ZS5oOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5lcmF0aW9uQ29udGV4
dC5oOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJIYW5k
bGVDYWxsZWVTYXZlcy5jcHA7IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NzFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVT
YXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1ODFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckluc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9u
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTkxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySW5z
dC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3QuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJ
bnN0SW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMaXZlbmVzcy5oOyBwYXRo
ID0gYjMvYWlyL0FpckxpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclBoYXNlU2NvcGUuY3BwOyBwYXRoID0gYjMvYWly
L0FpclBoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmg7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MDFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBBaXJSZWdpc3RlclByaW9yaXR5LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjEx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5oOyBwYXRoID0gYjMvYWlyL0Fp
clJlZ2lzdGVyUHJpb3JpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lh
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
clNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bp
bGxFdmVyeXRoaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNwaWxs
RXZlcnl0aGluZy5oOyBwYXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Rh
Y2tTbG90LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclN0YWNr
U2xvdC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tTbG90LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja1Nsb3QuaDsgcGF0aCA9
IGIzL2Fpci9BaXJTdGFja1Nsb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBaXJUbXAuY3BwOyBwYXRoID0gYjMvYWlyL0FpclRtcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJUbXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wLmg7IHBhdGgg
PSBiMy9haXIvQWlyVG1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTZB
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpclRtcElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJWYWxpZGF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVmFsaWRhdGUuaDsg
cGF0aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckdlbmVyYXRlZC5jcHA7IHBhdGggPSBiMy9h
aXIvQWlyR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdGIzOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OworCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RiMy5jcHA7IHBhdGggPSBiMy90ZXN0
YjMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNzFCMjYyNTZEMDA2
NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHBhdGggPSBk
ZmcvREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5n
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFy
YXJnc0ZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldHVwVmFyYXJn
c0ZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODAxLDYgKzQwMzgsMTUg
QEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKKwkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlp
c2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBMzFCREI1Q0YxMDA4MEZGNzQgLyogRm91
bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwRkVDODVBNDFCREI1Q0Yx
MDA4MEZGNzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJ
CQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJ
CTBGRjkyMkM2MTRGNDZCMTMwMDQxQTI0RSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0g
UEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OwpAQCAtMzg3MCw2ICs0MTE2LDcgQEAKIAkJCQkxNDEyMTEyMDBBNDg3OTNDMDA0ODAyNTUgLyog
bWluaWRvbSAqLywKIAkJCQkxNEJENTlCRjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywK
IAkJCQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKKwkJCQkwRkVD
ODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9k
dWN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zODkwLDYgKzQxMzcsNyBAQAog
CQkJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5
ICovLAogCQkJCTE0MzJFQkQ3MEEzNENBRDQwMDcxN0I5RiAvKiBBUEkgKi8sCiAJCQkJOTY4OENC
MTIwRUQxMkI0RTAwMUQ2NDlGIC8qIGFzc2VtYmxlciAqLywKKwkJCQkwRkVDODRCMjFCREFDRDVF
MDA4MEZGNzQgLyogYjMgKi8sCiAJCQkJQTU0Q0YyRUExODRFQTczOTAwMjM3RjE5IC8qIGJpbmRp
bmdzICovLAogCQkJCUE3RDgwMTlGMTg4MEQ2NkUwMDI2QzM5QiAvKiBidWlsdGlucyAqLywKIAkJ
CQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8sCkBAIC00MTAzLDYgKzQz
NTEsMTM0IEBACiAJCQluYW1lID0gZnRsOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKKwkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyog
YWlyICovLAorCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovLAorCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKKwkJCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2Nr
LmNwcCAqLywKKwkJCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmgg
Ki8sCisJCQkJMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMu
aCAqLywKKwkJCQkwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMu
aCAqLywKKwkJCQkwRkVDODRCQTFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0Lmgg
Ki8sCisJCQkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAq
LywKKwkJCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLywK
KwkJCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAqLywKKwkJ
CQkwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi8sCisJCQkJMEZF
Qzg0QkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLywKKwkJCQkwRkVDODRDMDFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLywKKwkJCQkwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLywKKwkJCQkwRkVDODRDMjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8sCisJCQkJMEZFQzg0QzMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDNDFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDNTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDY0VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0NjRWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0RG91YmxlVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0RG91YmxlVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDOTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb250cm9sVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5oICovLAorCQkJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKKwkJCQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyog
QjNGcmVxdWVuY3lDbGFzcy5oICovLAorCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5l
cmF0ZS5oICovLAorCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eE1hcC5oICovLAorCQkJCTBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0Lmgg
Ki8sCisJCQkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi8s
CisJCQkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovLAorCQkJ
CTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLywKKwkJCQkw
RkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovLAorCQkJCTBGRUM4
NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi8sCisJCQkJMEZFQzg0RDgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8sCisJCQkJMEZFQzg0RDkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3JpZ2luLmNwcCAqLywKKwkJCQkwRkVDODREQTFCREFDREFDMDA4MEZGNzQgLyog
QjNPcmlnaW4uaCAqLywKKwkJCQkwRkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50U3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0REMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0
Y2hwb2ludFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oICovLAorCQkJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BoYXNlU2NvcGUuY3BwICovLAorCQkJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuaCAqLywKKwkJCQkwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuY3BwICovLAorCQkJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovLAorCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMu
aCAqLywKKwkJCQkwRkVDODRFNDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi8s
CisJCQkJMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLywKKwkJCQkw
RkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovLAorCQkJ
CTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovLAorCQkJ
CTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovLAorCQkJ
CTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLywKKwkJCQkw
RkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLywKKwkJCQkw
RkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8sCisJ
CQkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovLAorCQkJCTBGRUM4
NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRG
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovLAorCQkJCTBGRUM4NEYxMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovLAorCQkJCTBGRUM4NEYyMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1R5cGUuaCAqLywKKwkJCQkwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNV
cHNpbG9uVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5oICovLAorCQkJCTBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNv
dW50cy5jcHAgKi8sCisJCQkJMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRz
LmggKi8sCisJCQkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICov
LAorCQkJCTBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8sCisJCQkJ
MEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEZB
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0RkIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0RkMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWVSZXAuY3BwICovLAorCQkJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbHVlUmVwLmggKi8sCisJCQkJMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3Ri
My5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IGIzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZFQzg1NDgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovLAorCQkJCTBGRUM4NTQ5MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi8sCisJCQkJMEZFQzg1NEExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFyZy5jcHAgKi8sCisJCQkJMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckFyZy5oICovLAorCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCAqLywKKwkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
ICovLAorCQkJCTBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3Bw
ICovLAorCQkJCTBGRUM4NTRGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAq
LywKKwkJCQkwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi8sCisJCQkJ
MEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCAqLywKKwkJCQkwRkVDODU1MjFC
REFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJMEZFQzg1NTMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODU1NDFCREFD
REM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLywKKwkJCQkwRkVDODU5MjFCREIxRTEwMDA4
MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLywKKwkJCQkwRkVDODU1NTFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLywKKwkJCQkwRkVDODU1NjFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovLAorCQkJCTBGRUM4NTU3MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oICovLAorCQkJCTBGRUM4NTU4MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwICovLAorCQkJCTBGRUM4NTU5MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRkVDODU1QTFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgKi8sCisJCQkJMEZFQzg1NUIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc3QuaCAqLywKKwkJCQkwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zdElubGluZXMuaCAqLywKKwkJCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2
ZW5lc3MuaCAqLywKKwkJCQkwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5jcHAgKi8sCisJCQkJMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUu
aCAqLywKKwkJCQkwRkVDODU2MDFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0
eS5jcHAgKi8sCisJCQkJMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJp
b3JpdHkuaCAqLywKKwkJCQkwRkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5j
cHAgKi8sCisJCQkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCAqLywK
KwkJCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCAq
LywKKwkJCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmgg
Ki8sCisJCQkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8s
CisJCQkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovLAorCQkJ
CTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovLAorCQkJCTBGRUM4NTY5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLywKKwkJCQkwRkVDODU2QTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovLAorCQkJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclZhbGlkYXRlLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGFpcjsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CiAJCTBGRjQyNzJFMTU4RUJDQ0UwMDRDQjlGRiAvKiBkaXNhc3Nl
bWJsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNjA4
OSw2ICs2NDY1LDcgQEAKIAkJCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFz
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjND
MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcw
RTkxOUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQ
SUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjExNyw4ICs2NDk0LDEwIEBACiAJCQkJQTVFQTcw
RTgxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3
NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2NEIyNzIxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRj
aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRt
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUMwRTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xl
YW5PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAv
KiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMz
OUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMzMsNiArNjUx
Miw3IEBACiAJCQkJOTlEQTAwQTQxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX21vZGVsLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQTUxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5z
X3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAogCQkJCTQxREVBMTMyMUI5RjMxNjMwMDZENjVE
RCAvKiBCdWlsdGluVXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTEwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUU3Mjk0MEIx
OTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdG
Mzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKQEAgLTYxNDMsNiArNjUyMyw3IEBACiAJCQkJMEYyREQ4MEIxQUIzRDg1ODAwQkJCOEU4IC8q
IEJ5dGVjb2RlS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVj
a1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAv
KiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNG
QSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTc5LDYgKzY1NjAs
NyBAQAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAx
NzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdF
NUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk2QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTg2LDggKzY1NjgsMTAgQEAKIAkJCQkwRjZGQzc1MTE5
NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJv
b3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4QTE4QkMyMUMzMDBCRURGNzYgLyogQ29u
c29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAw
NjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxOTFC
REEwNjgwMDAzMzFCODQgLyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1M0NFMDg2MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYyMDIsNiArNjU4Niw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAwODEw
RDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEzRkEx
NDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4
RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUyNDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTYyMTMsNiArNjU5OCw3IEBACiAJCQkJOTk1OUU5MkIxQkQx
N0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTky
RkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRl
Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjMzLDYgKzY2MTksNyBAQAogCQkJCUE3
MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4
Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MDFC
REFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2
QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MjQzLDcgKzY2MzAsOSBAQAogCQkJCTBGMkREODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdB
cmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzIyMTg3NzUwNTYw
MDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4
M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1
NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MjUzLDYgKzY2NDIsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFE
QTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
RDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9j
a1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAwMTlBREE0MTAwMDZBQzcy
QSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyOTIsOCArNjY4Miwx
MCBAQAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VV
c2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkw
MTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZD
N0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRp
b25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyMyw2ICs2NzE1LDcgQEAKIAkJ
CQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NjFCREFD
REM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZl
ZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjMzMSw2
ICs2NzI0LDcgQEAKIAkJCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRH
cmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERG
R01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENEODkx
MCAvKiBERkdNaW5pZmllZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0
MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERG
R05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzQ5LDYgKzY3NDMsNyBAQAog
CQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29t
cGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5
M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRG
dXp6LmggaW4gSGVhZGVycyAqLywKQEAgLTYzNjYsNiArNjc2MSw4IEBACiAJCQkJMEZGQzkyMTYx
Qjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWly
QWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZD
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAq
LywKQEAgLTYzOTAsNiArNjc4Nyw3IEBACiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhB
MzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMxREIx
MjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjQw
MSw2ICs2Nzk5LDcgQEAKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyog
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OTZCNzMxODFCREEwNjgwMDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBp
biBIZWFkZXJzICovLApAQCAtNjQzMSw2ICs2ODMwLDcgQEAKIAkJCQkwRjU2QTFEMzE1MDAwRjM1
MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQUM3
NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtpbmQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzODE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyog
RmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OTEsNiArNjg5MSw3IEBACiAJCQkJ
MEZFQTBBMjAxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTFR5cGVkUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21C
bG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTYyODQxODhDOThENDAw
NzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM2MThC
NTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM4
MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NDk4LDggKzY4OTksMTAgQEAKIAkJCQkyQTgzNjM4QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVs
bEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDQwRTE2RjVD
RDAwQjM0NDYwIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjBGMUEwMTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzEwRkIxOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0QkZGMkMxQUQ0NzZFNzAw
MDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
RjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTM4LDYgKzY5NDEsNyBAQAogCQkJCUM0NzAz
Q0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFMDUwMTkxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFBMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MEExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQjFBQTkwOTExMDBE
MzNCMzMgLyogR2VuZXJpY09mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTAxN0I2
QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjU2Myw2ICs2OTY3LDcgQEAKIAkJCQlDMkU1MjZCRTE1
OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTdCQTYx
MDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAwQjM0NDYwIC8qIElkZW50aWZp
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIwMEEzODNEMCAvKiBJZGVu
dGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwNzYxODlCMDM4QzAwNjMz
MjMxIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjE2LDYgKzcw
MjEsNyBAQAogCQkJCUExQjlFMjNDMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTMxQjRFMENEQjAwRkMxMDI5IC8q
IEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFCOUUy
M0UxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCBp
biBIZWFkZXJzICovLAogCQkJCUExODE5M0U0MUI0RTBDREIwMEZDMTAyOSAvKiBJbnRsQ29sbGF0
b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q2RTFCNERDMTQxMDBE
Njk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3
MDFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjY0Niw2ICs3MDUyLDcgQEAKIAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBB
QkIyMTcgLyogSklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzExNUFB
ODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2
NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTkxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4
QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NTks
NiArNzA2Niw3IEBACiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCREFFQ0IxN0Y0RUExNDAwRjYx
NDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEIxNDE4NkQxQjYy
NTI3RjAwRkIyMDY4IC8qIEpTQXJyb3dGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MTgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtNjY3NSw2ICs3MDgzLDggQEAKIAkJCQk4NjVBMzBGMTEz
NTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTNDRTA4ODE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUxRTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29u
dGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJC
QzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjkwLDYgKzcxMDAs
NyBAQAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
RW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FG
MTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAq
LywKQEAgLTY3MDAsMTEgKzcxMTEsMTMgQEAKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYy
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MzkxN0U3QjFCNzkwNkZBMDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3
RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MzUsNiArNzE0OCw3IEBACiAJCQkJQTcwMDg3NDIx
N0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4
MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1
OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmlyb25tZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAv
KiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzY0LDYgKzcxNzgsNyBAQAog
CQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNp
bG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAv
KiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjAwQjVBNzE1MkJBQUE3
MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI4
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIx
LDkgKzcyMzYsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNl
cHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyog
TExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5
QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2
ODBBNTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExW
TURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcy
Q0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTY4MzYsMTIgKzcyNTMsMTQg
QEAKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBp
biBIZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2Vt
YmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIg
LyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2
MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUwNDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVy
UHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8q
IE1hY3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2
MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBD
M0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdD
QkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjcsNiArNzI4
Niw3IEBACiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBO
YXRpdmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMjExQjkwMTNE
RTAwMzQ2QjUyIC8qIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJt
aW5pc3RpY0lucHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTY4ODcsNiArNzMwNyw3IEBACiAJCQkJ
RTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1N0MxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxl
ZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MDAsMTMgKzczMjEs
MTcgQEAKIAkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTgzNDE4MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4
MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyog
UHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJB
MyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0NzFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5Qjkx
NjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5
QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5
dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MjgsMTAgKzczNTMsMTMgQEAKIAkJCQkwRkI3
RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvdGVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZs
YWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEz
RiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzkxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1
RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRl
cnMgKi8sCkBAIC02OTUyLDYgKzczODAsNyBAQAogCQkJCTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIz
MiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3RDIzRUUxODkxQjU1NDAw
MzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5
RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
NjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rv
ckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RjAxODIzNDVBRjAwQTgyRTY5
IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjk1OSw2
ICs3Mzg4LDcgQEAKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVj
dG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NTExN0VFMjc0OTAw
QUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OUVCQ0I3MEU4QzZENEEw
MDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0NDFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBCMEE5RDExQTlC
NjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDMDYx
MUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTY5ODgsNiArNzQxOCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8q
IFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2
RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTcwMDcsNiArNzQzOCw3IEBACiAJCQkJ
QkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVy
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVj
dHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKQEAgLTcwNDMsMTAgKzc0NzUsMTIg
QEAKIAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI2QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBl
b2ZUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyog
QjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4
NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REVDMTk4MzJEQzQw
MDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REYw
MTk4MzJERDYwMDdENEIxOSAvKiBUeXBlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0
QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRG
RjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfaW5w
dXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzA4NCw4ICs3NTE4LDEwIEBACiAJCQkJRkVEOTRGMkYx
NzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQy
NjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
RTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNEJGQ0U2OTEwQ0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dD
TWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJC
IC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLywKQEAgLTcxMDcsOSArNzU0Mywx
MiBAQAogCQkJCTk5NTlFOTJFMUJEMTdGQTQwMDFBQTQxMyAvKiB4eGQucGwgaW4gSGVhZGVycyAq
LywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVj
aWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWly
Q0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZF
N0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlG
RTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODExQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njcw
NEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAt
NzEzNCw2ICs3NTczLDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEZDRUZBQjYxODA1RDYx
NjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuZHluYW1pYyI7CiAJCX07CisJCTBGRUM4NTk0
MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJn
ZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZFQzg1QTgxQkRCNUNGMTAwODBGRjc0
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YjMi
ICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8q
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3Mg
Ki8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAo
CisJCQkpOworCQkJbmFtZSA9IHRlc3RiMzsKKwkJCXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSAwRkVDODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICov
OworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsK
IAkJMEZGOTIyQzMxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAq
LyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxp
c3QgPSAwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciIgKi87CkBAIC03
Mjg5LDYgKzc3NDQsNyBAQAogCQkJCTE0QkQ1OUJFMEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBp
ICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi8sCiAJCQkJNjUxMTIy
RjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJMEZFQzg1OTQxQkRCNUNG
MTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1RDZCMkE0NzE1MkI5RTE3MDA1MjMxREUgLyog
VGVzdCBUb29scyAqLywKIAkJCSk7CiAJCX07CkBAIC03NTM2LDYgKzc5OTIsMTQgQEAKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKKwkJMEZF
Qzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxl
cyA9ICgKKwkJCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OworCQl9OwogCQkwRkY5MjJDNDE0RjQ2QjEzMDA0MUEyNEUgLyogU291cmNlcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKQEAgLTc1OTEsNiArODA1NSw3IEBACiAJCQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5
IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkQxMDdFQzM3NjAw
NDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NDNCQUExNkI4ODI0
OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1i
bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBB
Uk12N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTk4LDggKzgwNjMsMTAgQEAKIAkJ
CQlBN0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIx
NzQgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyog
QjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3
MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0Yz
OUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzYyMCw4ICs4MDg3LDEwIEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAw
Qjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkVDOUJCNjFCN0VC
MDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2Fs
bEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENDFCODRG
QjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0
YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyog
Q2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjM0LDYgKzgxMDMsNyBAQAogCQkJCUE3
N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQ
cm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcx
IC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0
NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY0
MSw2ICs4MTExLDcgQEAKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xv
d1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAv
KiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVB
M0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4
R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMx
QiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NjgsNiArODEz
OSw3IEBACiAJCQkJMEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURB
QjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNE
MTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Njc3LDYgKzgxNDksNyBAQAogCQkJCTBGNjM5NDg0MTVF
NDgxMTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
OUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZF
QTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNzY4NSw2ICs4MTU4LDcgQEAKIAkJCQk4NkVDOURDNDEzMjhE
RjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDM2OTQxQUU5
Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzdBNDIzRjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc3MjIsNiArODE5Niw3IEBACiAJCQkJMkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8q
IERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMy
OERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NG
OTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyog
REZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0Ew
QkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzc2NCwxNCArODIzOSwxNyBAQAogCQkJCTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAv
KiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3
MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMzkyQzg5MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NS
RXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFRDE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNjIzNzk3MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQTE5RDBCQTdEMDBC
MUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3N0Ex
Nzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBG
NzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNF
MDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCOUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9j
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8q
IERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3ODksNiArODI2Nyw4IEBACiAJ
CQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3OTA4NTUxOUEy
OTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4
IC8qIERGR1RocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhD
QTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTc4MTYsNiArODI5Niw3IEBACiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBF
QkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlF
NDVBMjUxOEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhh
bmRsaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3
QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODYwLDYgKzgzNDEs
NyBAQAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJE
RkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMx
QjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03ODY3LDYgKzgzNDksNyBAQAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBG
VExPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjkxODdERkRFQzAwODNCNjg3
IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUFCMTgw
NEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3
M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg5OSw2ICs4Mzgy
LDcgQEAKIAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNy
ZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxM0UwNEUxNjE2NEExRjAw
REM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVy
cmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA2LDYgKzgzOTAsNyBAQAogCQkJCTlF
QTVDN0EyMTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0aWFsaXplTExWTU1hYy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5RTcyOTQwODE5MEYwMjFFMDAxQTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJ
WC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3QjFCREFDREM3
MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVj
dGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTcsNiArODQwMiw3IEBACiAJ
CQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg3MTg1Njgz
MzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdG
QSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0
Mzg5MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzk3Myw2ICs4NDU5LDcgQEAKIAkJCQk4NkZBOUU5MTE0MkJCQjJF
MDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBG
OEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU2RjFCREFDREM3MDA4MEZGNzQgLyogQWly
QXJnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QUJERjYwMEE0MzdGRUYwMEVDQ0EwMSAvKiBK
U0NhbGxiYWNrT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1N0NGNDU4MTlCRjY2NjIw
MDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4MDFBODE4ODBE
NkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTgwLDYg
Kzg0NjcsOCBAQAogCQkJCTE0N0YzOUQ2MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0NKU1ZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGQ0U0MEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNz
UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg3MThCQzFBNTYwMEJFREY3NiAvKiBK
U0NvbnNvbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTczMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2
MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0
QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcyMDI4QjYxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc5OTAsMTYgKzg0NzksMTkgQEAKIAkJCQlGRTM4NEVFNzFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlENzEwN0VDMzc2MDA0MjdBNDggLyogSlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyogSlNGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxRDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dl
clRvQWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAv
KiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGRDAwODUxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QzNBMUE1MThDMDQ5MDIwMEM5NTkzQSAvKiBK
U0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1OTQ1NTkyMTgyNDc0NDcwMENDMzg0MyAvKiBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRTkxODkxQjA3NzAwMzFDN0ZBIC8qIEpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU5RDE3QjEw
N0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTBFNEI2MzE4ODA5REQ1MDA2
OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUwM0ZBMjkxODhGMTA1OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUJGMTg1QkZBQ0MwMDdFOTVB
RCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVD
MTE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwODAxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAxOCw2ICs4NTEwLDcgQEAKIAkJCQlFMzE4
Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3Jk
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0U4RDFDMUI5MDEzQzMwMDM0NkI1MiAvKiBKU05h
dGl2ZVN0ZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTE4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjcwMDkwMERB
QzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04MDMxLDYgKzg1MjQsNyBAQAogCQkJCUUzRUY4ODc0MUI2NkRGMjMwMDNGMjZDQiAv
KiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0Qx
MTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTJD
MzdGMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk5MjhGRjNCMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxh
eUlucHV0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAx
MUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDU5LDYgKzg1NTMsNyBA
QAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJN
YXAubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNG
cmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAx
M0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4Qzky
MEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZC
NTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODA2Niw5ICs4NTYxLDEyIEBACiAJCQkJMTQ4RjIxQjAxMDdFQzU0MTAw
NDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzU3MTU5MTRBMjAw
MDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZC
NDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NEZFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3Vt
ZW50UmVnVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOEIwMTExN0NGMDc4
MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2
ODBBODE0QkE3RkFCMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgwNzcsNiArODU3NSw3IEBACiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAw
RDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlE
REUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2
ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0
YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdB
RCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkM1NjhFMDExQTIx
M0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04
MDg2LDEwICs4NTg1LDEyIEBACiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4NzM5MTdDQkU4
NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRE
RUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBN
YXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAw
QjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5
RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQzNDBBNDg0MUE5MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODEyOCwxNyArODYyOSwyMSBAQAogCQkJCTBGRjcyOUFEMTY2QUQzNUMw
MDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVl
bmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUYxNjZBRDM1QzAw
MEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1
QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOTBDQUMx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMg
LyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyRTFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
MDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxl
clByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDBEMUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlERTgxMDdFQzdFNzAwNjUwNDQ2IC8qIFByb3BlcnR5U2xvdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBREUzOUZGRjE2REQxNDRCMDAwM0NENEEgLyogUHJvcGVy
dHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxNDcsMTAgKzg2NTIsMTIgQEAKIAkJCQkw
RjE1Q0QyMjFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5
IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzNjM3QTUxQjYz
MjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZB
N0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3Vs
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVn
RXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTY0LDYgKzg2NzEsNyBAQAog
CQkJCUE1QkExNUU5MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1RUZEMDBDQzM4NDMgLyogUmVtb3RlSW5zcGVjdG9y
RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJF
NjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUwNTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RUUxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3Bl
Y3RvclhQQ0Nvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1MDE3RUUyNzQ5
MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Mjc3NzNERTFBQUY4
M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTgyLDYg
Kzg2OTAsNyBAQAogCQkJCUE1NENGMkY5MTg0RUFFREEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0Q0YyRjUxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlw
dFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REE1MTdEMTI4NTgwMDVGNUZGOSAv
KiBTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4NTFCREFDREM3
MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzkwREQ2RDE4MkY0OTk3MDA1ODg4MDcgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcyOTlEQTExN0QxMjg0ODAwNUY1RkY5IC8qIFNldFByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVFOTg0MzFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBW
YXJhcmdzRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTk2LDYgKzg3MDUsNyBAQAogCQkJ
CTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0MxRUFGMTE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3MzBCNjEzMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFs
QWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyMTFCREFDREFDMDA4MEZG
NzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUIxMDdFQzdFNzAw
NjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUMw
RUM2MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQzEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODIxMiw2ICs4NzIyLDcgQEAKIAkJCQk3MDVCNDFBRDFBNkU1
MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzA1QjQxQUYxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3lt
Ym9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0
NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgy
NDAsNiArODc1MSw3IEBACiAJCQkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVj
b3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlFRTBCRkYxQjRBRkI4NTAwMDM4NUM5IC8q
IFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2QzczNTAxQUM5
Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRTA1MDJDMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxS
ZWdpc3Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQg
LyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjU5LDYgKzg3NzEsNyBAQAogCQkJCTcwOUZC
ODY5MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzA5RkI4NkIxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFy
cmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3RDFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTBCMTQw
NDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3RTVBQjNBMTc5OUU0QjIwMEQyODMzRCAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODYzQzZEOUMxNTIxMTExQTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxp
emVVQ1MyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODI4NSw2ICs4Nzk4LDExIEBACiAJCQl0YXJn
ZXQgPSAwRkNFRkFCNTE4MDVENjE2MDA0NzJDRTQgLyogbGx2bUZvckpTQyAqLzsKIAkJCXRhcmdl
dFByb3h5ID0gMEZDRUZBQkMxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSAqLzsKIAkJfTsKKwkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0g
MEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLzsKKwkJCXRhcmdldFByb3h5ID0g
MEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJ
fTsKIAkJMEZGOTIyRDMxNEY0NkIyRjAwNDFBMjRFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8g
PSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY0NjgwQTkx
NEJBN0ZEOTAwQkZFMjcyIC8qIExMSW50IE9mZnNldHMgKi87CkBAIC04NDA5LDYgKzg5MjcsMzgg
QEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEZFQzg1QTkxQkRCNUNG
MTAwODBGRjc0IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2
NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJ
CQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsK
KwkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMw
MjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJ
bmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGRUM4NUFCMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9m
aWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVj
dXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05B
TUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJMEZFQzg1
QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIx
MzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9
IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNCMTRGNDZCMTMwMDQxQTI0RSAvKiBEZWJ1ZyAq
LyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRp
b25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUu
eGNjb25maWcgKi87CkBAIC04NzYxLDYgKzkzMTEsMTcgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rp
b247CiAJCX07CisJCTBGRUM4NUE4MUJEQjVDRjEwMDgwRkY3NCAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdGIzIiAqLyA9IHsKKwkJCWlzYSA9IFhD
Q29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTBGRUM4
NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLywKKwkJCQkwRkVDODVBQTFCREI1Q0YxMDA4
MEZGNzQgLyogUmVsZWFzZSAqLywKKwkJCQkwRkVDODVBQjFCREI1Q0YxMDA4MEZGNzQgLyogUHJv
ZmlsaW5nICovLAorCQkJCTBGRUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9uICov
LAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1
bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNBMTRGNDZC
MTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdl
dCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJh
dGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHJldmlzaW9u
IDE5MTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQVNT
RU1CTEVSKQogCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJsZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4
MTAwMDAwMDAwdWxsOwpAQCAtNDcsNSArNDksNzAgQEAgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2Fs
bFByb2JlKHN0ZDo6ZnVuYwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQoreworICAg
IHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOgorICAgICAg
ICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RFcXVhbCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QWJvdmU6CisgICAgICAgIG91dC5w
cmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZU9yRXF1YWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkJlbG93OgorICAgICAgICBvdXQu
cHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVy
OjpCZWxvd09yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dPckVxdWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbjoKKyAgICAg
ICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBN
YWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkdy
ZWF0ZXJUaGFuT3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW46CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW4iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbDoKKyAgICAg
ICAgb3V0LnByaW50KCJMZXNzVGhhbk9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
KQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93OgorICAgICAgICBvdXQucHJpbnQoIk92ZXJmbG93Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQ6CisgICAgICAgIG91dC5wcmludCgiU2lnbmVk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpQb3NpdGl2ZU9y
WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJQb3NpdGl2ZU9yWmVybyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJa
ZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
OgorICAgICAgICBvdXQucHJpbnQoIk5vblplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MTUz
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTU5Niw4ICsxNTk2LDE5IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbik7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwog
I2Vsc2UgLy8gRU5BQkxFKEFTU0VNQkxFUikKIAorbmFtZXNwYWNlIEpTQyB7CisKIC8vIElmIHRo
ZXJlIGlzIG5vIGFzc2VtYmxlciBmb3IgdGhpcyBwbGF0Zm9ybSwgYXQgbGVhc3QgYWxsb3cgY29k
ZSB0byBtYWtlIHJlZmVyZW5jZXMgdG8KIC8vIHNvbWUgb2YgdGhlIHRoaW5ncyBpdCB3b3VsZCBv
dGhlcndpc2UgZGVmaW5lLCBhbGJlaXQgd2l0aG91dCBnaXZpbmcgdGhhdCBjb2RlIGFueSB3YXkK
IC8vIG9mIGRvaW5nIGFueXRoaW5nIHVzZWZ1bC4KQEAgLTE2MTEsNiArMTYyMiw4IEBAIHB1Ymxp
YzoKICAgICBlbnVtIEZQUmVnaXN0ZXJJRCB7IE5vRlBSZWdpc3RlciB9OwogfTsKIAorfSAvLyBu
YW1lc3BhY2UgSlNDCisKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCiAjZW5kaWYgLy8g
TWFjcm9Bc3NlbWJsZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVz
c01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRj
aGVyIEFkZHJlc3NNYXRjaGVyCisKKyMgTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIEIzIGRvaW5n
IGFnZ3Jlc3NpdmUgcmVhc3NvY2lhdGlvbiBhbmQgY2Fub25jYWxpemF0aW9uIG9mIGludGVnZXIg
YWRkcy4KKyMgV2UnbGwgbmV2ZXIgc2VlIEFkZChBZGQoeCwgY29uc3QxKSwgY29uc3QyKSBiZWNh
dXNlIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlYXNzb2NpYXRlZCBpbnRvCisjIEFkZCh4
LCBjb25zdDEgKyBjb25zdDIpLiBBbHNvLCB3ZSB3aWxsIG5ldmVyIHNlZSBBZGQoY29uc3QsIHgp
LCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgY2Fub25pY2FsaXplZAorIyBpdCB0byBBZGQoeCwgY29u
c3QpLiBUaGF0IHNhaWQsIGluIHRoaXMgY29kZSB3ZSBuZXZlciBtYWtlIGFzc2VydGlvbnMgYWJv
dXQgdGhlc2Ugb3B0aW1pemF0aW9ucworIyBoYXZpbmcgYmVlbiBwZXJmb3JtZWQuIEFsc28sIHNp
bmNlIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9ucyBpbiBCMyBoYXZlIGEgYnVpbHQtaW4gb2Zm
c2V0LCB3ZQorIyBkb24ndCBuZWVkIHRvIG1hdGNoIEFkZCh4LCBjb25zdCkuIFRoYXQgd291bGQg
aGF2ZSBiZWVuIGZvbGRlZCBpbnRvIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9ucworIyBhbHJl
YWR5LiBTbywgdGhlIG9ubHkgZmFuY3kgbWF0aGluZyB0aGlzIGNhbiBkbyBpcyBqdXN0IEJhc2VJ
bmRleCBmb3Jtcy4KKworQWRkU2hpZnQxID0gQWRkKFNobChpbmRleCwgJGxvZ1NjYWxlKSwgYmFz
ZSkKK0FkZFNoaWZ0MiA9IEFkZChiYXNlLCBTaGwoaW5kZXgsICRsb2dTY2FsZSkpCisKK0FkZCA9
IEFkZChsZWZ0LCByaWdodCkKKworRGlyZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKCkKK3sKK30KKwordm9pZCBB
cmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQXJndW1lbnRSZWdWYWx1ZV9oCisjZGVmaW5lIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQXJndW1lbnRSZWdW
YWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQXJndW1lbnRSZWc7IH0KKyAgICAKKyAg
ICB+QXJndW1lbnRSZWdWYWx1ZSgpOworCisgICAgUmVnIGFyZ3VtZW50UmVnKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWc7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgQXJndW1lbnRSZWdWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdp
biwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQ
UigpID8gcG9pbnRlclR5cGUoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJl
ZykKKyAgICB7CisgICAgICAgIEFTU0VSVChyZWcuaXNTZXQoKSk7CisgICAgfQorCisgICAgUmVn
IG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Nv
bnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK0Jhc2ljQmxv
Y2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBt
X2luZGV4KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNp
Y0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZh
bHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCitib29sIEJh
c2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVy
biBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6
OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6
cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJl
cGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAg
ICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3Zv
aWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywg
IjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgQjM6OmRlZXBEdW1wKHZh
bHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2sKKyNkZWZpbmUg
QjNCYXNpY0Jsb2NrCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVu
dGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RG
X01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBl
ZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0
Y2hlcyBDb250cm9sVmFsdWU6OlN1Y2Nlc3Nvckxpc3QKKworICAgIHN0YXRpYyBjb25zdCBjaGFy
KiBjb25zdCBkdW1wUHJlZml4OworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVMaXN0OjppdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6
Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgVmFsdWVMaXN0
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7
IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dmFsdWVzLmVuZCgpOyB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFs
dWVzLnNpemUoKTsgfQorICAgIFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzW2luZGV4XTsgfQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVy
biBtX3ZhbHVlc1tpbmRleF07IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZXMubGFzdCgpOyB9CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMu
bGFzdCgpOyB9CisKKyAgICBjb25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IG1fdmFsdWVzOyB9CisgICAgVmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsg
fQorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZh
bHVlVHlwZSogYXBwZW5kTmV3KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNp
Z25lZCBudW1TdWNjZXNzb3JzKCkgY29uc3Q7CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBz
dWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayYgc3Vj
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KTsKKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNz
b3JzKCkgY29uc3Q7CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpOworCisgICAgQmFz
aWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEJhc2lj
QmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCk7CisgICAgU3VjY2Vzc29yQ29s
bGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKTsKKyAg
ICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxp
c3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVj
ZXNzb3JzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBp
bmRleCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgUHJlZGVj
ZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsg
fQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNl
c3NvcnM7IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJv
b2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVwbGFjZVByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAgIGRvdWJsZSBm
cmVxdWVuY3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAg
Ly8gSW5zdGFudGlhdGUgdmlhIFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGlu
ZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFs
dWVMaXN0IG1fdmFsdWVzOworICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAg
ICBkb3VibGUgbV9mcmVxdWVuY3k7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgewor
cHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykK
KyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAg
ICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQmFz
aWNCbG9jayogbV9ibG9jazsKK307CisKK2lubGluZSBEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1
bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2Nr
RHVtcChibG9jayk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9jaworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKyNkZWZpbmUg
QjNCYXNpY0Jsb2NrSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJC
M1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFs
dWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUu
YWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdW5zaWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vz
c29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5u
dW1TdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBjb25zdCBGcmVxdWVudGVkQmxvY2smIEJhc2lj
QmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFz
dCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lubGluZSBG
cmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sK
KyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7
Cit9CisKK2lubGluZSBjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFs
dWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxp
c3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENv
bnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jayogQmFz
aWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2sqJiBC
YXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4g
c3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUgU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JCbG9ja3MoKQoreworICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxv
Y2ssIFN1Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK2lubGluZSBTdWNjZXNzb3JD
b2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxp
c3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN1
Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4o
c3VjY2Vzc29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVm
aW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChwcmVkZWNlc3NvcnMu
Y29udGFpbnMocHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcmVk
ZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVt
cGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRl
Y2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3Nv
cnNbaV0gPT0gcHJlZGVjZXNzb3IpIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpLS1dID0g
cHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAgIHByZWRlY2Vzc29ycy5yZW1vdmVMYXN0
KCk7CisgICAgICAgICAgICBBU1NFUlQoIXByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3Nv
cikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0
dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBs
YWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2lj
QmxvY2sqIHRvKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3Nv
cnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgeworICAgICAgICAg
ICAgcHJlZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVjb21wdXRlcyBw
cmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KK3Rl
bXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAgLy8gQ2xlYXIg
YWxsIHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoYXV0byYgYmxvY2sgOiBibG9j
a3MpCisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisKKyAgICBHcmFw
aE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0
OworICAgIHdvcmtsaXN0LnB1c2goYmxvY2tzWzBdLmdldCgpKTsKKyAgICB3aGlsZSAoQmFzaWNC
bG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgaWYg
KHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnBy
ZWRlY2Vzc29ycygpLmFwcGVuZChibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChi
bG9ja3NbaV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJsb2Nrc1tp
XSA9IG51bGxwdHI7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIz
QmxvY2tXb3JrbGlzdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5v
ZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2Rl
V29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0
OworCisvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFz
ICJibG9jayB3aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dp
dGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sg
d29ya2xpc3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdp
dGggdGhlIGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhp
bmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwg
Zm9yCisvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNh
c2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBp
bmRleC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9
IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2lj
QmxvY2s+PjsKKwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRl
ZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBl
ZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNp
Y0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja1dvcmts
aXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVj
aWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRl
ICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1l
c3BhY2UgeworCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBzd2l0Y2gg
KGluc3Qub3JpZ2luLT5vcGNvZGUoKSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBD
aGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAvLyBSZXNDb25kLCBUbXAsIFRt
cAorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1cm4gMTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitD
aGVja1NwZWNpYWw6OkNoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51
bUFyZ3MpCisgICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fbnVtQ2hlY2tBcmdz
KG51bUFyZ3MpCit7Cit9CisKK0NoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCit7Cit9CisK
K0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYgaW5zdCkgY29uc3QK
K3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0Lm9yaWdpbik7Cisg
ICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzaXplKG1fbnVtQ2hlY2tBcmdzKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSBtX251bUNoZWNrQXJnczsgaS0tOykKKyAgICAgICAgaGlkZGVuQnJhbmNoLmFy
Z3NbaV0gPSBpbnN0LmFyZ3NbaSArIDFdOworICAgIHJldHVybiBoaWRkZW5CcmFuY2g7Cit9CisK
K3ZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExh
bWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBoaWRkZW5CcmFu
Y2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7CisgICAgZm9yRWFjaEFyZ0ltcGwobnVtQjNB
cmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9v
bCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaGlkZGVu
QnJhbmNoKGluc3QpLmlzVmFsaWRGb3JtKCkKKyAgICAgICAgJiYgaXNWYWxpZEltcGwobnVtQjNB
cmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOworfQorCitib29sIENoZWNrU3Bl
Y2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAg
aWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9udW1DaGVja0FyZ3MpCisgICAg
ICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3RhY2soYXJnSW5kZXggLSAxKTsK
KyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0Fy
Z3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDaGVja1Nw
ZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9u
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZmFpbCA9IGhpZGRl
bkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgIEFTU0VSVChmYWlsLmlz
U2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICBWZWN0b3I8
VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZhbHVlLT5vcGNvZGUoKSkpIHsK
KyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCkKKyAgICAgICAgICAgIHJl
cHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+b3Bjb2RlKCkg
PT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkKKyAgICAgICAgICAgIHJl
cHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbM10pKTsK
KyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1sy
XSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hl
Y2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMSkpOworICAgIH0K
KworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwg
cmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5kKAorICAgICAgICBjcmVh
dGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1bmN0aW9uPigKKyAgICAg
ICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikgeworICAg
ICAgICAgICAgICAgIGZhaWwubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgICAgICAgICAgICAgU3RhY2ttYXA6Okdl
bmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICAgIHBhcmFtcy52YWx1ZSA9IHZh
bHVlOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAgICAg
ICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICAgICAgICAgICAgICBwYXJhbXMudXNl
ZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICAgICAgICAgICAg
ICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisgICAgICAgICAgICB9
KSk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7IC8vIEFzIGZhciBhcyBBaXIg
dGhpbmtzLCB3ZSBhcmUgbm90IGEgdGVybWluYWwuCit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpk
dW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2NoZWNr
T3Bjb2RlLCAiKCIsIG1fbnVtQ2hlY2tBcmdzLCAiKSIpOworfQorCit2b2lkIENoZWNrU3BlY2lh
bDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0aCAiLCBt
X251bUNoZWNrQXJncywgIiBhcmdzLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0No
ZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lh
bC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ugd2FudCB0byBs
b3dlciBDaGVjayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVuIHdlIHdhbnQgdG8g
cm91dGUgdGhhdCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2RlIGluc3RlYWQgb2Yg
ZG9pbmcgYW55dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNrU3BlY2lhbCB3aWxs
IHJlbWVtYmVyCisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2VsZWN0ZWQgYWxvbmcg
d2l0aCB0aGUgbnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdhbnQuIEl0CisvLyB3
aWxsIGNyZWF0ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUgYXBwcm9wcmlhdGUg
YXJncyBmcm9tIHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNhbGwgYW55IG9mIHRo
ZSBjYWxsYmFja3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFu
ZCBDaGVja011bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFyZSB0aGUgcmV2ZXJz
ZQorLy8gb2YgdGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQzMiBiLCBhKS4gRXhj
ZXB0OgorLy8gLSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBCcmFuY2hOZWczMiB4
LgorLy8gLSBDaGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwzMiBiLCBhIGJ1dCB3
ZSBwYXNzIEFueSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1NwZWNpYWwgOiBwdWJs
aWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNpYWwoQWlyOjpPcGNv
ZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKKyAg
ICAvLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJh
bmNoIHRoYXQgdGhpcyB3aWxsIHVzZS4KKyAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNvbnN0
IEFpcjo6SW5zdCYpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEFp
cjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4m
KSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAg
Ym9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7
CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhp
ZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2Vu
ZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVy
czo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRp
b25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOwor
ICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1NwZWNp
YWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
Q2hlY2tWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK0NoZWNrVmFsdWU6On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9pZCBD
aGVja1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgic3RhY2ttYXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hl
Y2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrVmFsdWUgOiBwdWJsaWMgVmFs
dWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6Cisg
ICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIGNh
c2UgQ2hlY2s6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5DaGVja1Zh
bHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQg
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2tB
ZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdo
dCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbiwg
bGVmdCwgcmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7CisgICAg
ICAgIEFTU0VSVChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAgIEFTU0VS
VChvcGNvZGUgPT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9PSBD
aGVja011bCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCisgICAg
Q2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHByZWRpY2F0ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBv
cmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2sp
OworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVk
ZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBz
aG91bGREdW1wSVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJs
ZWQoKSB8fCBGVEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFj
aFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQoreworICAgIHJl
dHVybiBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZh
bGlkYXRlSVIoKQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkgfHwgc2hv
dWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0
RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBo
YXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAgIHJldHVy
biBPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1v
bl9oCisjZGVmaW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitpbmxpbmUgYm9vbCBpczY0Qml0KCkgeyByZXR1cm4g
c2l6ZW9mKHZvaWQqKSA9PSA4OyB9CitpbmxpbmUgYm9vbCBpczMyQml0KCkgeyByZXR1cm4gIWlz
NjRCaXQoKTsgfQorCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJBdEVh
Y2hQaGFzZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlkYXRl
SVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM0NvbW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11
dGF0aXZpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bW11dGF0aXZpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tbXV0YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1
c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNvbW11
dGF0aXZpdHkpIHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIkNv
bW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZlOgor
ICAgICAgICBvdXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDb21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IENvbW11dGF0aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZlCit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6
Q29tbXV0YXRpdml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5z
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1h
dGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBB
UyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9S
UworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBDb21wYXJpc29uTWF0Y2hlcgor
CitUZXN0TG9hZE5vdFplcm8xID0gQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorVGVzdExvYWRO
b3RaZXJvMiA9IEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorVGVzdE5vdFplcm8gPSBBbmQobGVm
dCwgcmlnaHQpCisKK1Rlc3RMb2FkWmVybzEgPSBFcXVhbChBbmQoTG9hZChhZGRyZXNzKSwgcmln
aHQpLCAkMCkKK1Rlc3RMb2FkWmVybzIgPSBFcXVhbChBbmQobGVmdCwgTG9hZChhZGRyZXNzKSks
ICQwKQorVGVzdFplcm8gPSBFcXVhbChBbmQobGVmdCwgcmlnaHQpLCAkMCkKKworTG9hZEVxdWFs
MSA9IEVxdWFsKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorTG9hZEVxdWFsMiA9IEVxdWFsKGxlZnQs
IExvYWQoYWRkcmVzcykpCitOb3QgPSBFcXVhbCh2YWx1ZSwgJDApCitFcXVhbCA9IEVxdWFsKGxl
ZnQsIHJpZ2h0KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVl
KCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBDb25zdDMyVmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIEpTX0VYUE9SVF9QUklWQVRF
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0NvbnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6On5Db25zdDY0
VmFsdWUoKQoreworfQorCit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzQ29uc3Q2NFZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0NjRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVy
biBvcGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25zdDY0VmFsdWUoKTsKKyAgICAK
KyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0VmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2
YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29u
c3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdERvdWJsZVZhbHVlIDogcHVi
bGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNv
ZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQorICAgIAorICAgIH5Db25zdERv
dWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92
YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisK
KyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBkb3Vi
bGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0RG91YmxlLCBEb3VibGUsIG9y
aWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
ZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFsdWVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29u
dHJvbFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKQoreworfQorCit2b2lk
IENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobGlzdER1bXAobV9zdWNjZXNzb3JzKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUg
IkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJh
c2ljQmxvY2s7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnRyb2xWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1wOgor
ICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2Ug
T29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDogCisg
ICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNs
YXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3dpdGNoVmFs
dWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywg
Mj4gU3VjY2Vzc29yTGlzdDsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db250cm9sVmFsdWUo
KTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nl
c3NvcnMuc2l6ZSgpOyB9CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBG
cmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNj
ZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNz
b3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
KyAgICAvLyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4p
CisgICAgeworICAgIH0KKworICAgIC8vIFN1YmNsYXNzZXMgd2lsbCBwb3B1bGF0ZSB0aGlzLgor
ICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgT29wcy4KKyAgICBDb250cm9s
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9wY29kZSA9PSBPb3BzKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgUmV0
dXJuLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIHJlc3VsdCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2Rl
LCBWb2lkLCBvcmlnaW4sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0g
UmV0dXJuKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KKyAgICBDb250cm9s
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0
IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7Cisg
ICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQodGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBVc2Ug
dGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRyb2xWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAg
ICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgeWVzLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIG5v
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBCcmFuY2gpOworICAgICAgICBtX3N1
Y2Nlc3NvcnMuYXBwZW5kKHllcyk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobm8pOwor
ICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNs
YXNzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5j
eSkKK3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgeworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6
Ok5vcm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3JtYWwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6CisgICAgICAgIG91dC5wcmludCgiUmFyZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3Mu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVuY3lDbGFzc19oCisjZGVm
aW5lIEIzRnJlcXVlbmN5Q2xhc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50
OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBoeXBvdGhlc2lzIGFib3V0IHRoZSBmcmVx
dWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0LiBUaGlzIGlzCisgICAgLy8gdGhl
IGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJhc2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0
aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhpcyBjb250
cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hlZCBzdXBlciByYXJlbHkuIEl0J3MgdmFs
aWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlvbnMgdGhhdCBwdW5pc2ggUmFyZSBjb2Rl
LiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRpb25zIHdoZXJlIHlvdQorICAgIC8vIGhh
dmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJlcXVlbmN5IGNsYXNzIGZyb20gYSBtZXJn
aW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAgICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVy
IGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3JtYWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJl
Y2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNoIFJhcmUgY29kZSB2ZXJ5IGJhZGx5Lgor
ICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVuY3lDbGFzc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNk
ZWZpbmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVu
dGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
R2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCisjaW5jbHVk
ZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJl
LCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBBaXI6OkNvZGUgY29kZTsKKyAgICBnZW5lcmF0
ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgQWlyOjpnZW5lcmF0ZShjb2RlLCBqaXQpOwor
fQorCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFpcjo6Q29kZSYg
Y29kZSkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShw
cm9jZWR1cmUsICJpbml0aWFsIik7CisKKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAg
ICAgZGF0YUxvZygiSW5pdGlhbCBCMzpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7
CisgICAgfQorCisgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CisKKyAg
ICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUsICJm
aW5hbCIpOworICAgIAorICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9n
KCJCMyBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7
CisgICAgfQorCisgICAgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzR2VuZXJhdGVfaAorI2RlZmluZSBCM0dlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9
CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2Us
IGFuZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBjb2RlIGJ5IGZpcnN0CisvLyBpbnRlcm5hbGx5
IGNvbnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFuZCB0aGVuIGdlbmVyYXRpbmcgdGhhdC4KK0pT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0NhbGxIZWxwZXJzJik7
CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2Us
IGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKKy8vIHRoZSBBaXIg
dG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6Z2VuZXJhdGUoKS4gTm90ZSB0aGF0IGFuIEFpcjo6
Q29kZSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0aGUKKy8vIEIzOjpQcm9jZWR1cmUsIHNvIHlv
dSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCMzo6UHJvY2VkdXJlIG91dGxpdmVzIHRoZSBBaXI6
OkNvZGUuCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgQWlyOjpDb2RlJik7CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzR2VuZXJhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBC
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEEgZnJlcXVlbnRlZCBibG9jayBp
cyBhIHR1cGxlIG9mIEJhc2ljQmxvY2sqIGFuZCBGcmVxdWVuY3lDbGFzcy4gSXQncyB1c3VhbGx5
IHVzZWQgYXMgYQorLy8gc3VjY2Vzc29yIGVkZ2UuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2lj
QmxvY2s+CitjbGFzcyBHZW5lcmljRnJlcXVlbnRlZEJsb2NrIHsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IG51bGxwdHIsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSA9IEZyZXF1ZW5jeUNsYXNzOjpOb3Jt
YWwpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX2ZyZXF1ZW5jeShmcmVx
dWVuY3kpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2Js
b2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAgICYmIG1fZnJlcXVlbmN5ID09IG90aGVy
Lm1fZnJlcXVlbmN5OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
KCk7CisgICAgfQorCisgICAgQmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Js
b2NrOyB9CisgICAgQmFzaWNCbG9jayomIGJsb2NrKCkgeyByZXR1cm4gbV9ibG9jazsgfQorICAg
IEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAgICAgICAgICAg
b3V0LnByaW50KGZyZXF1ZW5jeSgpLCAiOiIpOworICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1
bXAobV9ibG9jaykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2Nr
OworICAgIEZyZXF1ZW5jeUNsYXNzIG1fZnJlcXVlbmN5OworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
SW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRl
eE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhN
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisjZGVmaW5l
IEIzSW5kZXhNYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBt
YXAgZm9yIGtleXMgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZv
ciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3Ug
ZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIG1hcHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2
ZSB2ZXJ5CisvLyBzcGFyc2UgaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4K
KwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZT4KK2NsYXNzIEluZGV4TWFw
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbmRleE1hcChzaXplX3Qgc2l6ZSA9IDApCisgICAg
eworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCByZXNp
emUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7Cisg
ICAgfQorCisgICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAgCisgICAgY29uc3QgVmFs
dWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92
ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFZlY3RvcjxW
YWx1ZT4gbV92ZWN0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0luZGV4TWFwX2gKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJbmRleFNldF9oCisKKyNpbmNsdWRlIDx3dGYvQml0
VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNldCBmb3IgdGhpbmdzIHRoYXQgaGF2
ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mg
b25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFu
eSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeSBzcGFyc2UKKy8vIGlu
ZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1ZXMuCisKKy8vIElmIHlvdSB3YW50IGEg
c2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8gSW5kZXhTZXQ8QmFzaWNCbG9jaz4uIFNvLCBUID0g
QmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbmRleFNldCB7CitwdWJs
aWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFkZChUKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAg
ICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQqIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1f
c2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
Q29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAgICAg
ICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4
U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAg
ICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBj
b2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAg
ICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
bV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIu
bV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAg
ICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7Cisg
ICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0
aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZv
ciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJl
KTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52
YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0
aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxl
Y3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJh
YmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRW
ZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIgY29t
bWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGlu
ZXMuaCIKKyNpbmNsdWRlICJCM0FkZHJlc3NNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29tbXV0YXRpdml0eS5oIgorI2luY2x1ZGUgIkIz
SW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSAiQjNMb3dlcmlu
Z01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQaGFz
ZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50
cy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1w
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2Ug
QWlyOworCituYW1lc3BhY2UgeworCitjbGFzcyBMb3dlclRvQWlyIHsKK3B1YmxpYzoKKyAgICBM
b3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQorICAgICAgICA6IHZh
bHVlVG9UbXAocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKKyAgICAgICAgLCBibG9ja1RvQmxv
Y2socHJvY2VkdXJlLnNpemUoKSkKKyAgICAgICAgLCB1c2VDb3VudHMocHJvY2VkdXJlKQorICAg
ICAgICAsIGFkZHJlc3NTZWxlY3RvcigqdGhpcykKKyAgICAgICAgLCBsb3dlcmluZ1NlbGVjdG9y
KCp0aGlzKQorICAgICAgICAsIHByb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgY29kZShj
b2RlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3Ig
KEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZSkKKyAgICAgICAgICAgIGJsb2NrVG9C
bG9ja1tibG9ja10gPSBjb2RlLmFkZEJsb2NrKGJsb2NrLT5mcmVxdWVuY3koKSk7CisKKyAgICAg
ICAgLy8gTG93ZXIgZGVmcyBiZWZvcmUgdXNlcyBvbiBhIGdsb2JhbCBsZXZlbC4gVGhpcyBpcyBh
IGdvb2QgaGV1cmlzdGljIHRvIGxvY2sgZG93biBhCisgICAgICAgIC8vIGhvaXN0ZWQgYWRkcmVz
cyBleHByZXNzaW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBpbnRvIHRoZSBsb29wLgor
ICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZS5ibG9ja3NJblBy
ZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCisgICAgICAgICAg
ICBpbnN0cy5yZXNpemUoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3Mg
YmxvY2tzIGluIHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3JlIGRlZnMuIFRoYXQn
cyB3aGF0IGFsbG93cyB1cworICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0dGVybnMgZWZmZWN0
aXZlbHkuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICAgICAgaW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAg
cnVuTG93ZXJpbmdNYXRjaGVyKGN1cnJlbnRWYWx1ZSwgbG93ZXJpbmdTZWxlY3Rvcik7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4g
aW5zdHMgY29udGFpbnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAg
ICAgICAgICAvLyBpdCBpbiByZXZlcnNlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
aW5zdHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDog
aW5zdHNbaV0pCisgICAgICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVu
ZEluc3QoV1RGOjptb3ZlKGluc3QpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
TWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCisgICAg
ICAgICAgICBBU1NFUlQoYmxvY2stPnN1Y2Nlc3NvcnMoKS5zaXplKCkgPD0gMik7CisgICAgICAg
ICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxv
Y2tzKCkpCisgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygp
LmFwcGVuZChibG9ja1RvQmxvY2tbc3VjY2Vzc29yXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBUbXAgdG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1wID0gdmFsdWVU
b1RtcFt2YWx1ZV07CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1wID0gY29kZS5u
ZXdUbXAoaXNJbnQodmFsdWUtPnR5cGUoKSkgPyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgICAg
IHJldHVybiB0bXA7CisgICAgfQorCisgICAgLy8gVGhpcyBnaXZlcyB5b3UgdGhlIGFkZHJlc3Mg
b2YgdGhlIGdpdmVuIExvYWQgb3IgU3RvcmUuIElmIGl0J3Mgbm90IGEgTG9hZCBvciBTdG9yZSwg
dGhlbgorICAgIC8vIGl0IHJldHVybnMgQXJnKCkuCisgICAgQXJnIGFkZHIoVmFsdWUqIG1lbW9y
eVZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIHZhbHVlID0gbWVtb3J5VmFsdWUt
PmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIEFyZygpOworCisgICAgICAgIHJ1bkFkZHJlc3NNYXRjaGVyKHZhbHVlLT5jaGlsZHJlbigp
Lmxhc3QoKSwgYWRkcmVzc1NlbGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rv
ci5zZWxlY3RlZEFkZHJlc3Mud2l0aE9mZnNldCh2YWx1ZS0+b2Zmc2V0KCkpOworICAgIH0KKwor
ICAgIEFyZyBsb2FkQWRkcihWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxv
YWRWYWx1ZS0+b3Bjb2RlKCkgPT0gTG9hZCkKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGxvYWRW
YWx1ZSk7CisgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcgaW1tKFZhbHVl
KiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBBcmc6OmltbSh2YWx1ZS0+YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIEFy
ZygpOworICAgIH0KKworICAgIEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAg
ICAgICBpZiAoQXJnIHJlc3VsdCA9IGltbSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICByZXR1cm4gdG1wKHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxB
aXI6Ok9wY29kZSBvcGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11
dGF0aXZlPgorICAgIHZvaWQgYXBwZW5kQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkK
KyAgICB7CisgICAgICAgIFRtcCByZXN1bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAg
CisgICAgICAgIC8vIFRocmVlLW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9w
IGEsIGIsIGMKKyAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAg
IGMgPSBhIE9wIGIKKworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwg
QXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0g
Q29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9w
ZXJhdGlvbiBjb3VsZCBoYXZlIGFuIGltbWVkaWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAg
IGlmIChpbW0obGVmdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1t
KGxlZnQpLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGltbShyaWdodCkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0s
IEFyZzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0o
cmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gVHdvLW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAg
ICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEK
KworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9w
ZXJhdGlvbiB0aGF0IGhhdmUgYSBmdXNlZCBsb2FkIG92ZXIgdGhyZWUKKyAgICAgICAgLy8gb3Bl
cmFuZCBmb3Jtcy4KKyAgICAgICAgCisgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11
dGF0aXZlKSB7CisgICAgICAgICAgICBBcmcgbGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAg
ICAgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpU
bXApKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFVzZSB0aGUgcmlnaHQgTW92ZSBvcGNv
ZGUuIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCAzMi1iaXQgdHlwZXMsIHdlIHNob3VsZAorICAgICAg
ICAgICAgICAgIC8vIHVzZSBNb3ZlMzIuIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBEb3VibGVzLCB3
ZSBzaG91bGQgdXNlIE1vdmVEb3VibGUuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzMworICAgICAgICAgICAgICAgIGFwcGVu
ZChNb3ZlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIGxlZnRBZGRyLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIEFyZyByaWdodEFkZHIgPSBsb2FkQWRkcihyaWdo
dCk7CisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5raW5kKCksIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwgcmVzdWx0KTsK
KyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkciwgcmVzdWx0KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUs
IEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCB0bXAobGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQpOwor
ICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgIH0KKworICAg
IHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5
ID0gTm90Q29tbXV0YXRpdmU+CisgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBmYWlscyB0
byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGVmZmVjdHMgYmV0d2VlbiB0aGUgTG9hZCBhbmQgdGhl
IFN0b3JlIHRoYXQKKyAgICAgICAgLy8gY291bGQgY2xvYmJlciB0aGUgbG9hZGVkIHZhbHVlLiBX
ZSBuZWVkIHRvIGNoZWNrIHN1Y2ggdGhpbmdzIGJlY2F1c2Ugd2UgYXJlIGVmZmVjdGl2ZWx5Cisg
ICAgICAgIC8vIHNpbmtpbmcgdGhlIGxvYWQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzQKKyAgICAgICAgCisgICAgICAgIEFyZyBzdG9y
ZUFkZHIgPSBhZGRyKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOwor
CisgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlOworICAgICAgICBpZiAoYWRkcihsZWZ0KSA9PSBz
dG9yZUFkZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gcmlnaHQ7CisgICAgICAgIGVsc2Ug
aWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUgJiYgYWRkcihyaWdodCkgPT0gc3RvcmVB
ZGRyKQorICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwg
QXJnOjpUbXAsIHN0b3JlQWRkci5raW5kKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFpcjo6T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9w
Y29kZSwgY3VycmVudFZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KSk7CisgICAgfQorICAgIAorICAgIEluZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFy
ZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1
ZSwgVG1wPiB2YWx1ZVRvVG1wOworICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJh
c2ljQmxvY2sqPiBibG9ja1RvQmxvY2s7CisKKyAgICBVc2VDb3VudHMgdXNlQ291bnRzOworCisg
ICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gaW5zdHM7CisKKyAgICBWYWx1ZSogY3VycmVudFZh
bHVlOworCisgICAgLy8gVGhlIGFkZHJlc3Mgc2VsZWN0b3Igd2lsbCBtYXRjaCBhbnkgcGF0dGVy
biB3aGVyZSB0aGUgaW5wdXQgb3BlcmFuZHMgYXJlIGF2YWlsYWJsZSBhcyBUbXBzLgorICAgIC8v
IEl0IGRvZXNuJ3QgY2FyZSBhYm91dCBzaGFyaW5nLiBJdCB3aWxsIGhhcHBpbHkgZW1pdCB0aGUg
c2FtZSBhZGRyZXNzIGV4cHJlc3Npb24gb3ZlciBhbmQgb3ZlcgorICAgIC8vIGFnYWluIHJlZ2Fy
ZGxlc3Mgb2YgdGhlIGV4cHJlc3Npb24ncyBjb21wbGV4aXR5LiBUaGlzIHdvcmtzIG91dCBmaW5l
LCBzaW5jZSBhdCB0aGUgbWFjaGluZQorICAgIC8vIGxldmVsLCBhZGRyZXNzIGV4cHJlc3Npb25z
IGFyZSBzdXBlciBjaGVhcC4gSG93ZXZlciwgdGhpcyBkb2VzIGhhdmUgYSBoYWNrIHRvIGF2b2lk
CisgICAgLy8gInVuaG9pc3RpbmciIGFkZHJlc3MgZXhwcmVzc2lvbnMuCisgICAgY2xhc3MgQWRk
cmVzc1NlbGVjdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFkZHJlc3NTZWxlY3RvcihMb3dl
clRvQWlyJiBsb3dlcikKKyAgICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAg
eworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBtYXRjaCBhbiBhZGRyZXNzIGV4cHJl
c3Npb24gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkCisgICAgICAgICAgICAvLyBleHBs
aWNpdGx5LgorICAgICAgICAgICAgcmV0dXJuICFsb3dlci52YWx1ZVRvVG1wW3Jvb3RdOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290TGF0ZShWYWx1ZSopIHsgfQorCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRJ
bnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobG93ZXIudmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhhcmd1
bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2Vw
dE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRz
KGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygp
IHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisK
KyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDEoVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUs
IFZhbHVlKiBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG9nU2NhbGUtPmFzSW50
KCkgPCAwIHx8IGxvZ1NjYWxlLT5hc0ludCgpID4gMykKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KAorICAgICAg
ICAgICAgICAgIGxvd2VyLnRtcChiYXNlKSwgbG93ZXIudG1wKGluZGV4KSwgMSA8PCBsb2dTY2Fs
ZS0+YXNJbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgdHJ5QWRkU2hpZnQyKFZhbHVlKiBiYXNlLCBWYWx1ZSogaW5kZXgsIFZhbHVlKiBs
b2dTY2FsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRyeUFkZFNoaWZ0MShpbmRl
eCwgbG9nU2NhbGUsIGJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGQoVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJpZ2h0
LT5oYXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9kdWN0aW9uIGlzbid0
IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5jZSB3ZSBleHBlY3QKKyAgICAgICAgICAgICAgICAvLyBM
b2FkKEFkZChAeCwgQGNvbnN0MSksIG9mZnNldCA9IGNvbnN0MikgdG8gaGF2ZSBhbHJlYWR5IGJl
ZW4gc3RyZW5ndGgtcmVkdWNlZAorICAgICAgICAgICAgICAgIC8vIHRvIExvYWQoQHgsIG9mZnNl
dCA9IGNvbnN0MSArIGNvbnN0MikuCisgICAgICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0g
QXJnOjphZGRyKGxvd2VyLnRtcChsZWZ0KSwgcmlnaHQtPmFzSW50MzIoKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbGVjdGVk
QWRkcmVzcyA9IEFyZzo6aW5kZXgobG93ZXIudG1wKGxlZnQpLCBsb3dlci50bXAocmlnaHQpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlE
aXJlY3QoKQorICAgICAgICB7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFk
ZHIobG93ZXIudG1wKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxvd2VyOworICAg
ICAgICBBcmcgc2VsZWN0ZWRBZGRyZXNzOworICAgIH07CisgICAgQWRkcmVzc1NlbGVjdG9yIGFk
ZHJlc3NTZWxlY3RvcjsKKworICAgIC8vIFRoaXMgd2lsbCBtYXRjaCBjb21wbGV4IG11bHRpLXZh
bHVlIGV4cHJlc3Npb25zLCBidXQgb25seSBpZiB0aGVyZSBpcyBubyBzaGFyaW5nLiBGb3IgZXhh
bXBsZSwKKyAgICAvLyBpdCB3b24ndCBtYXRjaCBhIExvYWQgdHdpY2UgYW5kIGNhdXNlIHRoZSBn
ZW5lcmF0ZWQgY29kZSB0byBkbyB0d28gbG9hZHMgd2hlbiB0aGUgb3JpZ2luYWwKKyAgICAvLyBj
b2RlIGp1c3QgZGlkIG9uZS4KKyAgICBjbGFzcyBMb3dlcmluZ1NlbGVjdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIExvd2VyaW5nU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIpCisgICAgICAg
ICAgICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUX1VOVVNFRChyb290LCAhbG93ZXIubG9ja2VkLmNvbnRhaW5zKHJvb3QpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290
TGF0ZShWYWx1ZSopIHsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUsIEFy
Z3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIElmIG9uZSBv
ZiB0aGUgaW50ZXJuYWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4gd2Ug
ZG9uJ3Qgd2FudCB0byBjYXVzZQorICAgICAgICAgICAgLy8gaXQgdG8gYmUgcmVjb21wdXRlZCBh
Z2Fpbi4KKyAgICAgICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFdlIHJl
cXVpcmUgaW50ZXJuYWxzIHRvIGhhdmUgb25seSBvbmUgdXNlIC0gdXMuCisgICAgICAgICAgICBp
ZiAobG93ZXIudXNlQ291bnRzW3ZhbHVlXSAhPSAxKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhh
cmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkg
eyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoVmFsdWUqIHZhbHVl
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dlci5s
b2NrZWQuYWRkKHZhbHVlKTsKKyAgICAgICAgICAgIGFjY2VwdEludGVybmFsc0xhdGUoYXJndW1l
bnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoKSB7
IH0KKyAgICAgICAgCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQuY29udGFpbnMo
dmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVy
biBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wg
YWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1
bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5TG9hZChWYWx1ZSogYWRkcmVzcykKKyAg
ICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsb3dlci5jdXJyZW50VmFsdWUtPnR5cGUoKSkg
eworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQo
TW92ZTMyLCBsb3dlci5hZGRyKGFkZHJlc3MpLCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVl
KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBjYXNlIEludDY0
OgorICAgICAgICAgICAgICAgIGlmIChpczY0Qml0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
bG93ZXIuYXBwZW5kKE1vdmUsIGxvd2VyLmFkZHIoYWRkcmVzcyksIGxvd2VyLnRtcChsb3dlci5j
dXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNh
c2UgRG91YmxlOgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dl
ci5hZGRyKGFkZHJlc3MpLCBsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAg
ICAgICAgICAgICAgIGxvd2VyLmFwcGVuZEJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwg
cmlnaHQpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFs
dWUqKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbG93ZXIudHJ5QXBw
ZW5kU3RvcmVCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5
cGVzIQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmVBbmRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQsIFZhbHVlKikKKyAgICAgICAgeworICAgICAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgcmV0dXJuIGxv
d2VyLnRyeUFwcGVuZFN0b3JlQmluT3A8QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7
CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1l
bnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVN0b3JlKFZhbHVlKiB2YWx1ZSwgVmFs
dWUqKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAg
ICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUz
MiwgbG93ZXIudG1wKHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgSW50NjQ6CisgICAg
ICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSkgeworICAgICAgICAgICAgICAgICAgICBsb3dlci5h
cHBlbmQoTW92ZSwgbG93ZXIudG1wKHZhbHVlKSwgbG93ZXIuYWRkcihsb3dlci5jdXJyZW50VmFs
dWUpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGNhc2UgRG91Ymxl
OgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlRG91YmxlLCBsb3dlci50bXAodmFs
dWUpLCBsb3dlci5hZGRyKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUNvbnN0
MzIoKQorICAgICAgICB7CisgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZSwgbG93ZXIuaW1t
KGxvd2VyLmN1cnJlbnRWYWx1ZSksIGxvd2VyLnRtcChsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlSZXR1
cm4oVmFsdWUqIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT50
eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBjYXNlIEludDY0
OgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBsb3dlci5pbW1PclRtcCh2YWx1
ZSksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5k
KE1vdmVEb3VibGUsIGxvd2VyLnRtcCh2YWx1ZSksIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQ
UikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvd2VyLmFwcGVuZChS
ZXQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIExvd2VyVG9BaXImIGxvd2VyOworICAgIH07CisgICAgTG93ZXJpbmdTZWxlY3RvciBsb3dl
cmluZ1NlbGVjdG9yOworICAgIAorICAgIFByb2NlZHVyZSYgcHJvY2VkdXJlOworICAgIENvZGUm
IGNvZGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsb3dlclRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhh
c2VTY29wZShwcm9jZWR1cmUsICJsb3dlclRvQWlyIik7CisgICAgTG93ZXJUb0FpciBsb3dlclRv
QWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgbG93ZXJUb0Fpci5ydW4oKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0xvd2VyVG9BaXJfaAorI2RlZmluZSBCM0xvd2VyVG9BaXJfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgbG93
ZXJzIHRoZSBjdXJyZW50IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKwordm9pZCBsb3dl
clRvQWlyKFByb2NlZHVyZSYsIEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0
dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdN
YXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIg
QEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09O
VFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJp
bmdNYXRjaGVyCisKKyMgVGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBz
dGFydGluZyBhdCB0aGUgdG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0
ZW1lbnRzIHdoZXJldmVyIHBvc3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRv
IHRoaXMgbWF0Y2hlciBpcyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5j
ZSEKKworTG9hZCA9IExvYWQoYWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitT
dG9yZUFkZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmVBbmRM
b2FkID0gU3RvcmUoQWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFs
dWUsIGFkZHJlc3MpCisKK0NvbnN0MzIgPSBDb25zdDMyKCkKKworUmV0dXJuID0gUmV0dXJuKHZh
bHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzTWVtb3J5VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKK3sKK30KKwor
dm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5wcmludCgib2Zmc2V0ID0gIiwgbV9vZmZzZXQp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVt
b3J5VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEZJWE1FOiBBZGQgYWxpYXMg
YW5hbHlzaXMgdG8gdGhlc2UgYnkgYWxsb3dpbmcgdGhlIGNsaWVudCB0byBhc3NvY2lhdGUgYW4g
aW50ZWdlciByYW5nZSB0byB0aGUKKy8vIHZhbHVlLiBUd28gb3BlcmF0aW9ucyBtYXkgYWNjZXNz
IHRoZSBzYW1lIG1lbW9yeSBpZiB0aGVpciByYW5nZXMgb3ZlcmxhcHMuCisvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTM1CisKK2NsYXNzIE1lbW9yeVZhbHVl
IDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29k
ZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNl
IExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAg
ICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgY2Fz
ZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgY2FzZSBTdG9yZTE2OgorICAg
ICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1vcnlWYWx1ZSgpOworCisgICAgaW50MzJfdCBv
ZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2Fk
IChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBh
IHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KKyAgICBN
ZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludDMyX3Qgb2Zm
c2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIHBv
aW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFB
U1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAg
ICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2Fk
MTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0
eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
TG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IERvdWJsZSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAg
IGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAg
IGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlz
IGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgb3Bjb2RlID09IExvYWRGbG9hdCA/IERvdWJsZSA6
IEludDMyLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAg
IHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9h
ZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZT
OgorICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgorICAgIE1lbW9yeVZhbHVlKAor
ICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50
ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NF
UlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAg
ICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNh
c2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzTWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M09wY29kZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKQorewor
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBOb3A6CisgICAgICAgIG91dC5wcmludCgi
Tm9wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQu
cHJpbnQoIklkZW50aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0MzI6Cisg
ICAgICAgIG91dC5wcmludCgiQ29uc3QzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
b25zdDY0OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0NjQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgICAgIG91dC5wcmludCgiQ29uc3REb3VibGUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBvdXQucHJpbnQo
IlN0YWNrU2xvdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAg
ICAgICAgb3V0LnByaW50KCJBcmd1bWVudFJlZyIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIG91dC5wcmludCgiRnJhbWVQb2ludGVyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEFkZDoKKyAgICAgICAgb3V0LnByaW50KCJBZGQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3ViOgorICAgICAgICBvdXQucHJpbnQoIlN1YiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNdWw6CisgICAgICAgIG91dC5wcmludCgiTXVsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERpdjoKKyAgICAgICAgb3V0LnByaW50KCJEaXYi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAgIG91dC5wcmlu
dCgiQ2hpbGxEaXYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTW9kOgorICAgICAgICBv
dXQucHJpbnQoIk1vZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRBbmQ6CisgICAg
ICAgIG91dC5wcmludCgiQml0QW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdE9y
OgorICAgICAgICBvdXQucHJpbnQoIkJpdE9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEJpdFhvcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRYb3IiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU2hsOgorICAgICAgICBvdXQucHJpbnQoIlNobCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBTU2hyOgorICAgICAgICBvdXQucHJpbnQoIlNTaHIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgWlNocjoKKyAgICAgICAgb3V0LnByaW50KCJaU2hyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFNFeHQ4OgorICAgICAgICBvdXQucHJpbnQoIlNFeHQ4Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0
MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDMyOgorICAgICAgICBvdXQucHJp
bnQoIlNFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAg
IG91dC5wcmludCgiWkV4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZSb3VuZDoK
KyAgICAgICAgb3V0LnByaW50KCJGUm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SVRvRDoKKyAgICAgICAgb3V0LnByaW50KCJJVG9EIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIERUb0kzMjoKKyAgICAgICAgb3V0LnByaW50KCJEVG9JMzIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTm90RXF1YWwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgIG91dC5wcmlu
dCgiTGVzc1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlclRoYW46Cisg
ICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTGVzc0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NFcXVhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiR3JlYXRl
ckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlOgorICAgICAgICBvdXQu
cHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJlbG93OgorICAgICAg
ICBvdXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlRXF1
YWw6CisgICAgICAgIG91dC5wcmludCgiQWJvdmVFcXVhbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkJlbG93RXF1YWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4
WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIG91dC5wcmlu
dCgiTG9hZDhTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQxNlo6CisgICAgICAg
IG91dC5wcmludCgiTG9hZDE2WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZT
OgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNlMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTG9hZEZsb2F0OgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGbG9hdCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlOCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBvdXQucHJpbnQo
IlN0b3JlMTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAg
ICAgb3V0LnByaW50KCJTdG9yZUZsb2F0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
b3JlOgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENDYWxsOgorICAgICAgICBvdXQucHJpbnQoIkNDYWxsIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFBhdGNocG9pbnQ6CisgICAgICAgIG91dC5wcmludCgiUGF0Y2hwb2ludCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgb3V0LnByaW50KCJD
aGVja0FkZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAg
b3V0LnByaW50KCJDaGVja1N1YiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja011
bDoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja011bCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBDaGVjazoKKyAgICAgICAgb3V0LnByaW50KCJDaGVjayIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBvdXQucHJpbnQoIlVwc2lsb24iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgUGhpOgorICAgICAgICBvdXQucHJpbnQoIlBoaSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBKdW1wOgorICAgICAgICBvdXQucHJpbnQoIkp1bXAiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBvdXQucHJpbnQoIkJy
YW5jaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgIG91dC5w
cmludCgiU3dpdGNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJldHVybjoKKyAgICAg
ICAgb3V0LnByaW50KCJSZXR1cm4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT29wczoK
KyAgICAgICAgb3V0LnByaW50KCJPb3BzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIxOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNP
cGNvZGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRy
YXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDog
aW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZvciB3
aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAgCisgICAgLy8g
UG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElk
ZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMu
IENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAg
IC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29u
c3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2
NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRo
aXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2Fy
ZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBp
bnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAg
ICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3Rh
Y2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMg
dmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVn
YXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21w
aWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0
aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmlu
ZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBh
IGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBU
aGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3Ig
RG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUg
cG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0
IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZl
YXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5
IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNp
YyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAg
ICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIs
CisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4K
KyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2Vy
IG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2Ug
SlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhv
ciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1
Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4
dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwK
KyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3Vu
ZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAg
IC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAv
LyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJl
dHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFs
KHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdy
ZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJ
bnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAg
ICBCZWxvdywKKyAgICBBYm92ZUVxdWFsLAorICAgIEJlbG93RXF1YWwsCisKKyAgICAvLyBNZW1v
cnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBsb2FkZWQgdHlw
ZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHJldHVybiBJbnQzMjoKKyAg
ICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlosCisgICAgTG9hZDE2UywKKyAgICAv
LyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9hdCwKKyAgICAvLyBUaGlzIHJldHVy
biB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwKKworICAgIC8vIE1lbW9y
eSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBpcyBzdG9yZWQuIFRoZXNl
IHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIEludDMyIHZhbHVlOgorICAg
IFN0b3JlOCwKKyAgICBTdG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMgYSBEb3VibGUgdmFsdWU6
CisgICAgU3RvcmVGbG9hdCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9y
IEludDMyLCBJbnQ2NCwgYW5kIERvdWJsZToKKyAgICBTdG9yZSwKKworICAgIC8vIFRoaXMgaXMg
YSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5c3RlbSBDIGNh
bGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJndW1lbnRzIGFy
ZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxsLAorCisgICAgLy8gVGhp
cyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNzLiBUaGlzIGlz
IHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25seSBlbWl0cyBj
b2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRv
IGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2ttYXAgYWxvbmcg
d2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBtdXN0IGJlIHBh
c3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNrbWFwIGFyZ3Vt
ZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVzdAorICAgIC8v
IHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9tIHRoZSB0b3Ag
b2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFjay4KKyAgICBQ
YXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xh
c3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBnZW5lcmF0aW9uCisgICAg
Ly8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNvbWUgY29kZSBhZnRlciB0
aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAgICAvLyBmcm9tIHRoZSBj
aGVjaywgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxzbyBnZXQgdG8gc3VwcGx5
IGEgc3RhY2ttYXAuIE5vdGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90IGFsbG93ZWQgdG8ganVt
cCBiYWNrIGludG8gdGhlIG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNsb3cgcGF0aCwgc2luY2Ug
dGhlIGNvbXBpbGVyCisgICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgZXhlY3V0aW9uIG9mIHRo
ZXNlIGluc3RydWN0aW9ucyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRuJ3QgaGFwcGVuLiBGb3IK
KyAgICAvLyBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQnczoKKyAgICAvLworICAg
IC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0FkZCh4LCB5KQorICAgIC8v
CisgICAgLy8gVGhlbiBpdCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRvOgorICAgIC8vCisgICAg
Ly8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5KGEpCisgICAgLy8KKyAg
ICAvLyBUaGlzIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxiYWNrcyB1c2VkIGJ5IHRo
ZSB0d28gQ2hlY2tBZGRzLiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAorICAgIC8vIGNhbGxiYWNr
cy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhleSBhcmUgZGlm
ZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IENoZWNr
QWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZlIHBvc3NpYmx5
IHRha2VuIHNsb3cKKyAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQgQ2hlY2tBZGQn
cyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIENoZWNrQWRkLAorICAgIENoZWNrU3ViLAor
ICAgIENoZWNrTXVsLAorCisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBVc2UgdGhlIENo
ZWNrVmFsdWUgY2xhc3MuIExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMgaGFzIGEKKyAg
ICAvLyBzdGFja21hcCB3aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0YWtlcyBhbiBJ
bnQzMiBhcmd1bWVudCB0aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgKKyAgICAvLyBmdWxsIGJy
YW5jaCBmdXNpb24gaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBBIHRydWUgdmFsdWUganVt
cHMgdG8gdGhlIGdlbmVyYXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgorICAgIENoZWNrLAorCisg
ICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAgIFVwc2lsb24s
IC8vIFRoaXMgdXNlcyB0aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAgIFBoaSwKKworICAgIC8v
IEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAorICAgIAorICAg
IC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIEJyYW5j
aGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIENvbnRyb2xWYWx1ZSBj
bGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUgc3VjY2Vzc29y
LgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBlaXRoZXIgSW50
MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3aXRjaCwKKwor
ICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0aGVpciBy
ZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlwZS4gVXNl
cyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIFJldHVybiwKKworICAgIC8vIFRoaXMgaXMg
YSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUuIFVz
ZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9OworCitpbmxpbmUgYm9vbCBp
c0NoZWNrTWF0aChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAg
Y2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsK
KworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcmlnaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3UG9pbnRlciht
X2RhdGEpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIg
Y2FuIGNob29zZSB0byBwdXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIz
IHdpbGwgYmUgYWJsZSB0bworLy8gYWNjb3VudCwgZG93biB0byB0aGUgbWFjaGluZSBjb2RlLCB3
aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNwb25kcyB0byB3aGljaCBvcmlnaW4uIEIzCisvLyB0cmFu
c2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQncyBhbiBlcnJv
ciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9wcyBPcmlnaW5z
IG9yIGxpZXMgYWJvdXQgdGhlbS4KK2NsYXNzIE9yaWdpbiB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRhdGEgPSBudWxscHRyKQorICAgICAgICA6IG1fZGF0YShk
YXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1
cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAK
K3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcmln
aW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2lu
dFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNp
bmcgbmFtZXNwYWNlIEFpcjsKKworUGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFs
KCkKK3sKK30KKworUGF0Y2hwb2ludFNwZWNpYWw6On5QYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9
CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcoCisgICAgSW5zdCYgaW5zdCwg
Y29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQorewor
ICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpIHsKKyAgICAgICAgZm9yRWFjaEFy
Z0ltcGwoMCwgMSwgaW5zdCwgY2FsbGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5cGUo
KSk7CisgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMiwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29s
IFBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3Qu
b3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDEs
IGluc3QpOworCisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgaWYgKGluc3QuYXJnc1sxXS5raW5kKCkgIT0gQXJnOjpUbXApCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc1R5cGUoaW5zdC5vcmlnaW4t
PmFpclR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBpc1ZhbGlk
SW1wbCgwLCAyLCBpbnN0KTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6YWRtaXRzU3Rh
Y2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgaWYgKGluc3Qub3JpZ2lu
LT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAxLCBp
bnN0LCBhcmdJbmRleCk7CisKKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAyLCBpbnN0LCBhcmdJbmRl
eCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUo
CisgICAgSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBj
b250ZXh0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFw
KiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgIEFTU0VSVChzdGFja21hcCk7CisK
KyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKyAg
ICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQorICAgICAgICByZXBzLmFwcGVuZChy
ZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29mZnNldCsrXSkpOworICAgIGFwcGVu
ZFJlcHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgU3RhY2tt
YXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOwor
ICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAgIHBhcmFtcy5yZXBzID0gcmVwczsK
KyAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisK
KyAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisKKyAgICByZXR1
cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmR1
bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJQYXRjaHBv
aW50Iik7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiTG93ZXJlZCBCMzo6UGF0Y2hwb2lu
dFZhbHVlLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50
U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Bh
dGNocG9pbnRTcGVjaWFsX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzcGVjaWFsIHRoYXQgcmVj
b2duaXplcyB0aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQYXRjaHBvaW50OiBWb2lkIGFuZCBh
bmQgbm9uLVZvaWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0aGUgc3ludGF4IG9mIHRoZSBBaXIg
UGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCBhcmdz
Li4uCisvLworLy8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUgbG93ZXJlZCBhcmd1bWVudHMgdG8g
dGhlIFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBub24tVm9pZCBjYXNlCisvLyB3ZSB3
aWxsIGhhdmU6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCByZXN1bHQsIGFyZ3MuLi4K
KworY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1
YmxpYzoKKyAgICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAgIHZpcnR1YWwgflBhdGNocG9pbnRT
cGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0Jiwg
Y29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRl
OworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0
c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8v
IE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5j
aCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhl
IHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdl
bmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQm
KSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBv
aW50VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQ
cmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50
VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNr
bWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1BhdGNocG9pbnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNTdGFja21h
cC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2lu
dFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+
UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5j
eUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBl
LCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNo
cG9pbnRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2Nv
cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2Nv
cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VT
Y29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRh
dGUuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VTY29w
ZTo6UGhhc2VTY29wZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkKKyAg
ICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlm
IChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGJlZm9y
ZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisK
KyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3Jl
ID0gdG9DU3RyaW5nKHByb2NlZHVyZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkK
K3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlk
YXRlKG1fcHJvY2VkdXJlLCBtX25hbWUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1BoYXNlU2NvcGVfaAorI2RlZmluZSBCM1BoYXNlU2NvcGVfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9O
Q09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShQcm9jZWR1cmUm
LCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFs
aWRhdGlvbgorCitwcml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29u
c3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jsb2NrV29ya2xpc3QuaCIKKyNp
bmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQoreworfQorCitQcm9jZWR1cmU6On5Qcm9jZWR1
cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmcmVx
dWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNp
Y0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVz
dWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQor
ICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworVmVjdG9yPEJhc2ljQmxv
Y2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Js
b2NrKj4gcmVzdWx0OworICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3Qu
cHVzaChhdCgwKSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9w
KCkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRl
cigpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgUG9zdE9yZGVyQmxv
Y2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGF0KDApKTsKKyAgICB3aGls
ZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRj
aCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlByZToKKyAgICAgICAg
ICAgIHdvcmtsaXN0LnB1c2hQb3N0KGl0ZW0ubm9kZSk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBpdGVtLm5vZGUtPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgICAg
ICB3b3JrbGlzdC5wdXNoKGl0ZW0ubm9kZS0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UG9zdDoKKyAgICAgICAgICAgIHJl
c3VsdC5hcHBlbmQoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy9FTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gK
KyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IlB1cmVOYU4uaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFBy
b2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJvY2VkdXJlKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBy
b2NlZHVyZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Qcm9jZWR1cmUoKTsKKworICAgIEpT
X0VYUE9SVF9QUklWQVRFIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQ
TmFOKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNC
bG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5n
ZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRy
KQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIGl0ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkK
KyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwgbV9p
bmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJh
c2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3By
b2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3Bl
cmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2lu
ZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAg
ICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1cmUt
PnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRl
eCsrOworICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAgY29u
c3QgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAg
ICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgc2l6ZSgpKTsgfQorCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblByZU9yZGVy
KCk7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRlcigpOworCisgICAg
Y2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXNDb2xs
ZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3Byb2Nl
ZHVyZShwcm9jZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0
ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0
b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAg
ICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFZh
bHVlKiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX3Byb2NlZHVyZS0+bV92YWx1ZXNbbV9pbmRleF0uZ2V0KCk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAg
fQorCisgICAgICAgIHByaXZhdGU6CisKKyAgICAgICAgICAgIGNvbnN0IFByb2NlZHVyZSogbV9w
cm9jZWR1cmU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisg
ICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1
cmUsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KG1fcHJvY2VkdXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisKKyAgICAgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUo
KTsgfQorICAgICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvY2VkdXJlLm1fdmFsdWVzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBWYWx1ZSogb3BlcmF0
b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgICAg
IAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7Cisg
ICAgfTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gVmFs
dWVzQ29sbGVjdGlvbigqdGhpcyk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFZhbHVlPj4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJlSW5saW5lc19oCisjZGVm
aW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5l
dyBWYWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5
cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChXVEY6Om1vdmUo
dmFsdWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RL
aW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBT
dGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTdGFj
a1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAgb3V0
LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90S2luZC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xv
dEtpbmRfaAorI2RlZmluZSBCM1N0YWNrU2xvdEtpbmRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgU3RhY2tTbG90
S2luZCA6IHVpbnQ4X3QgeworICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNsb3QgbmVlZHMgdG8gYmUg
a2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhlcnMgYmVjYXVzZSB3ZSBpbnRlbmQgdG8gZXNjYXBl
CisgICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mgbm90IG9idmlvdXMuIFRoaXMgaGFwcGVucyB3aGVu
IHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRyZXNzIG9mIGEgc3RhY2sKKyAgICAvLyBzbG90Lgor
ICAgIExvY2tlZCwKKworICAgIC8vIFRoZXNlIHN0YWNrIHNsb3RzIGNvdWxkIHNoYXJlIHNwYWNl
IHdpdGggb3RoZXIgc3RhY2sgc2xvdHMsIHByb3ZpZGVkIHRoYXQgdGhleSBhcmVuJ3QgbGl2ZQor
ICAgIC8vIGF0IHRoZSBzYW1lIHRpbWUuIFRoZSBjb21waWxlciBzdGlsbCBoYXMgdG8gZG8gZXNj
YXBlIGFuYWx5c2lzLCBzaW5jZSB0aGVzZSBjYW4gYmUgZXNjYXBlZAorICAgIC8vIGV4cGxpY2l0
bHkgaW4gSVIuCisgICAgQW5vbnltb3VzCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpTdGFja1Nsb3RLaW5kKTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFj
a1Nsb3RLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2tTbG90VmFsdWU6On5T
dGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1f
Ynl0ZVNpemUsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RWYWx1ZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
U3RhY2tTbG90S2luZC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFt
ZXNwYWNlIEFpciB7CitjbGFzcyBTdGFja1Nsb3Q7Cit9IC8vIG5hbWVzcGFjZSBBaXIKKworY2xh
c3MgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN0YWNrU2xvdDsg
fQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25z
dCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUg
ZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBwaW4gc3RhY2sgc2xvdHMu
IFVzZSB0aGUKKyAgICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQuCisgICAgaW50cHRyX3Qgb2Zm
c2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUgc3RhY2sgc2xvdCBpcyBMb2Nr
ZWQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCisgICAgeworICAg
ICAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCB1
bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXJUeXBlKCksIG9yaWdpbikKKyAgICAgICAgLCBtX2J5dGVT
aXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAgICAgICAsIG1fb2Zmc2V0
RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAg
U3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit2b2lkIFN0YWNrbWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KAorICAgICAgICAie29wYXF1ZSA9ICIsIFJhd1BvaW50ZXIobV9vcGFxdWUpLCAi
LCByZXBzID0gIiwgbGlzdER1bXAobV9yZXBzKSwKKyAgICAgICAgIiwgZ2VuZXJhdG9yID0gIiwg
UmF3UG9pbnRlcihtX2dlbmVyYXRvci5nZXQoKSksICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJl
cmVkLAorICAgICAgICAiLCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAifSIp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUg
IkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3Rm
L1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IENoZWNrU3BlY2lhbDsKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitj
bGFzcyBTdGFja21hcCB7CitwdWJsaWM6CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgewor
ICAgICAgICAvLyBUaGlzIGlzIHRoZSBWYWx1ZSBjb250YWluaW5nIHRoZSBzdGFja21hcC4KKyAg
ICAgICAgVmFsdWUqIHZhbHVlOworCisgICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgor
ICAgICAgICBTdGFja21hcCogc3RhY2ttYXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3Ug
dGhlIGFjdHVhbCB2YWx1ZSByZXByZXNlbnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAg
ICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRo
ZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnM7CisgICAgfTsKKyAgICAKKyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24o
Q0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hh
cmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFw
KCkKKyAgICB7CisgICAgfQorCisgICAgLy8gU2V0IHNvbWUgb3BhcXVlIGRhdGEgdG8gaWRlbnRp
ZnkgdGhpcyBzdGFja21hcC4gVGhpcyBpcyB1c2VmdWwgYmVjYXVzZSBhIFN0YWNrbWFwLXVzaW5n
IFZhbHVlCisgICAgLy8gY2FuIGJlIGR1cGxpY2F0ZWQsIGFuZCBlYWNoIGR1cGxpY2F0ZSBtYXkg
ZW5kIHVwIGhhdmluZyBkaWZmZXJlbnQgcmVnaXN0ZXIgYWxsb2NhdGlvbi4gVGhpcworICAgIC8v
IGFsbG93cyBhbGwgb2YgdGhvc2UgZHVwbGljYXRlcyB0byBiZSBhYmxlIHRvIHJlZmVyIGJhY2sg
dG8gd2hhdGV2ZXIgaGlnaC1sZXZlbCBkYXRhIHN0cnVjdHVyZXMKKyAgICAvLyB3ZSB3ZXJlIHVz
aW5nIHRvIGNyZWF0ZSB0aGUgdmFsdWUuCisgICAgdm9pZCBzZXRPcGFxdWUodm9pZCogcGFyYW1l
dGVyKQorICAgIHsKKyAgICAgICAgbV9vcGFxdWUgPSBwYXJhbWV0ZXI7CisgICAgfQorICAgIHZv
aWQqIG9wYXF1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3BhcXVlOyB9CisKKyAgICAvLyBDb252ZW5p
ZW5jZSBoZWxwZXJzIHdoZW4gdXNpbmcgaW5kaWNlcyBpbnN0ZWFkIG9mIHBvaW50ZXJzLgorICAg
IHZvaWQgc2V0T3BhcXVlSW5kZXgoc2l6ZV90IGluZGV4KQorICAgIHsKKyAgICAgICAgc2V0T3Bh
cXVlKGJpdHdpc2VfY2FzdDx2b2lkKj4oaW5kZXgpKTsKKyAgICB9CisgICAgc2l6ZV90IG9wYXF1
ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gYml0d2lzZV9jYXN0PHNpemVfdD4ob3BhcXVlKCkpOyB9
CisKKyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0
aGlzIFN0YWNrbWFwLiBJbiBjYXNlIG9mIGEgUGF0Y2hwb2ludCB0aGF0CisgICAgLy8gcmV0dXJu
cyBhIHZhbHVlLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gSW4gYWxs
IG90aGVyIGNhc2VzLCBpbmRleCB6ZXJvIHJlZmVycworICAgIC8vIHRvIHRoZSBmaXJzdCBhcmd1
bWVudCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90IGNvbnN0cmFp
bmFibGUuIEZvciBleGFtcGxlLAorICAgIC8vIGluIGEgQ2hlY2tBZGQgdmFsdWUsIGl0IHdvdWxk
IGJlIGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEgQ2hlY2sgdmFs
dWUsIGl0CisgICAgLy8gd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGV4IDAuIEJ1
dCwgd2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBjYW4KKyAgICAv
LyBkZXBlbmQgb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmlsbGVkIGluLgor
ICAgIHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQor
ICAgIHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA8IG1fcmVwcy5zaXplKCkpCisgICAgICAgICAg
ICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhdID0gcmVwOwor
ICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0KQorICAgIHsK
KyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICBjb25zdCBSZWdp
c3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKworICAg
IHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcikKKyAgICB7Cisg
ICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxHZW5l
cmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNp
YWw7CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRTcGVjaWFsOworICAgIGZyaWVuZCBjbGFz
cyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgdm9pZCogbV9vcGFxdWUgeyBudWxscHRyIH07
CisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9n
ZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhlciBkdXBsaWNhdGVk
IGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJnZSB0aGUgdXNlZCBy
ZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNT
dGFja21hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250
ZXh0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6
U3RhY2ttYXBTcGVjaWFsKCkKK3sKK30KKworU3RhY2ttYXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVj
aWFsKCkKK3sKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMo
SW5zdCYgaW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFs
dWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUt
PnN0YWNrbWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBT
dGFja21hcFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVz
ZWQKKyAgICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJl
bnRseSB3b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8g
b3IgdGhpbmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBw
cm9ibGVtLgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVy
cyk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJl
cmVkUmVncyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOwor
ICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgcmV0dXJu
IHN0YWNrbWFwLT5jbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVh
Y2hBcmdJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUln
bm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpF
YWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9y
aWdpbjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5l
ZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7Cisg
ICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsK
KyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzID09IHZhbHVl
LT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsg
KytpKSB7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdz
XTsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWly
QXJncyk7CisKKyAgICAgICAgY2FsbGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNU
eXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjpp
c1ZhbGlkSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1J
Z25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGlu
c3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhh
cHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdz
KTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0Fy
Z3MpOworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAg
ICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgLy8gRm9yIHRoZSBJbnN0IHRvIGJlIHZhbGlkLCBp
dCBuZWVkcyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChp
bnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFsdWUtPmNoaWxkcmVuKCku
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gUmVnYXJkbGVzcyBvZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyBy
ZXF1aXJlbWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4gRm9yCisgICAgLy8gZXhhbXBsZSwgeW91
IGNhbid0IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2Ug
Y29uZGl0aW9ucyBhcyB3ZWxsIGFzIHRoZQorICAgIC8vIGFyZ3VtZW50IHR5cGVzLgorICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJn
czsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdu
b3JlZEIzQXJncyk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVk
QWlyQXJnc107CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgY2FzZSBB
cmc6OkltbTY0OgorICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgIGNhc2UgQXJnOjpD
YWxsQXJnOgorICAgICAgICAgICAgYnJlYWs7IC8vIE9LCisgICAgICAgIGNhc2UgQXJnOjpBZGRy
OgorICAgICAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSAmJgorICAgICAgICAgICAgICAgIGFyZy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1i
bGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0g
QXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpOworCisgICAgICAgIGlmICghYXJnLmlz
VHlwZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBU
aGUgbnVtYmVyIG9mIGNvbnN0cmFpbnRzIGhhcyB0byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51
bWJlciBvZiBCMyBjaGlsZHJlbi4KKyAgICBBU1NFUlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkg
PD0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGlj
aXRseSBzdXBwbGllZCBjb25zdHJhaW50cy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25v
cmVkQjNBcmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXplKCk7ICsraSkgeworICAgICAgICBW
YWx1ZVJlcCYgcmVwID0gc3RhY2ttYXAtPm1fcmVwc1tpXTsKKyAgICAgICAgQXJnJiBhcmcgPSBp
bnN0LmFyZ3NbaSAtIG51bUlnbm9yZWRCM0FyZ3MgKyBudW1JZ25vcmVkQWlyQXJnc107CisKKyAg
ICAgICAgc3dpdGNoIChyZXAua2luZCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToK
KyAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgdmVyaWZpZWQgdGhpcyBhYm92ZS4KKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAg
ICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAg
ICAgICAgIGlmIChhcmcgIT0gVG1wKHJlcC5yZWcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNr
OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlv
bi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAgICBpZiAo
YXJnICE9IEFyZzo6Y2FsbEFyZyhyZXAub2Zmc2V0RnJvbVNQKCkpKQorICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVw
OjpDb25zdGFudDoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVw
cmVzZW50YXRpb24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jv
b2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdu
b3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwg
dW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47Cisg
ICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICB1bnNpZ25l
ZCBzdGFja21hcEFyZ0luZGV4ID0gYXJnSW5kZXggLSBudW1JZ25vcmVkQWlyQXJncyArIG51bUln
bm9yZWRCM0FyZ3M7CisKKyAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSBzdGFja21hcC0+bV9y
ZXBzLnNpemUoKSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNv
bnN0cmFpbnQuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBv
bmx5IGFkbWl0IHN0YWNrIGZvciBBbnkncywgc2luY2UgU3RhY2sgaXMgbm90IGEgdmFsaWQgaW5w
dXQgY29uc3RyYWludCwgYW5kIFN0YWNrQXJndW1lbnQKKyAgICAvLyB0cmFuc2xhdGVzIHRvIGEg
Q2FsbEFyZyBpbiBBaXIuCisgICAgaWYgKHN0YWNrbWFwLT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRl
eF0ua2luZCgpID09IFZhbHVlUmVwOjpBbnkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAg
cmV0dXJuIGZhbHNlOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwo
CisgICAgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdz
LCBJbnN0JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAg
ICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkp
OworfQorCitWYWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBj
b25zdCBBcmcmIGFyZykKK3sKKyAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICBjYXNlIEFy
Zzo6VG1wOgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnJlZyhhcmcucmVnKCkpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAg
ICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFudChhcmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBpZiAoYXJnLmJhc2UoKSA9PSBUbXAoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpz
dGFjayhhcmcub2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoYXJnLmJhc2UoKSA9PSBUbXAoTWFj
cm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBWYWx1
ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJl
cCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBT
cGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21h
cFNwZWNpYWxfaAorI2RlZmluZSBCM1N0YWNrbWFwU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSBBaXIgeyBjbGFz
cyBDb2RlOyB9CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWFscyB0aGF0IGhh
dmUgc3RhY2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBh
c2tpbmcgZm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBu
ZWVkIHRvIGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNrbWFwLgorCitjbGFz
cyBTdGFja21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBT
dGFja21hcFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJv
dGVjdGVkOgorICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBS
ZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2Ji
ZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBk
b2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCku
IFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0
LgorCisgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3Jl
ZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYs
IGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBi
b29sIGlzVmFsaWRJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNp
Z25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBh
ZG1pdHNTdGFja0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2ln
bmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJ
bmRleCk7CisKKyAgICAvLyBBcHBlbmRzIHRoZSByZXBzIGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0
YXJ0aW5nIHdpdGggbnVtSWdub3JlZEFyZ3MsIHRvIHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgdm9p
ZCBhcHBlbmRSZXBzSW1wbChBaXI6OkdlbmVyYXRpb25Db250ZXh0JiwgdW5zaWduZWQgbnVtSWdu
b3JlZEFyZ3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxWYWx1ZVJlcD4mKTsKKworICAgIHN0YXRpYyBW
YWx1ZVJlcCByZXBGb3JBcmcoQWlyOjpDb2RlJiwgY29uc3QgQWlyOjpBcmcmKTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisjZGVmaW5lIEIzU3Vj
Y2Vzc29yQ29sbGVjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIGdlbmVyaWMgd3JhcHBlciBhcm91bmQg
bGlzdHMgb2YgZnJlcXVlbnRlZCBibG9ja3MsIHdoaWNoIGdpdmVzIHlvdSBqdXN0IHRoZSBibG9j
a3MuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2ssIHR5cGVuYW1lIFN1Y2Nlc3Nvckxp
c3Q+CitjbGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JD
b2xsZWN0aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisg
ICAgeworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNp
emUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayogb3Bl
cmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJh
c2ljQmxvY2sqJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9
CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigp
CisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3Nv
ckNvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKCZjb2xsZWN0aW9uKSAvLyBjb25zdCBpcyBzdHVwaWQgYW55d2F5LgorICAgICAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBC
YXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVy
YXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAg
ICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworcHJpdmF0ZToKKyAgICBTdWNjZXNzb3JMaXN0JiBt
X2xpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2FzZVZhbHVlLCAiLT4iLCBt
X3RhcmdldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2Uu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoQ2FzZV9oCisjZGVmaW5lIEIz
U3dpdGNoQ2FzZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVu
dGVkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQor
CisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUoY2FzZVZhbHVlKQorICAgICAgICAsIG1f
dGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9v
bCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0KKworICAgIGludDY0X3QgY2FzZVZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgdGFy
Z2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0KKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRC
bG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmJsb2NrKCk7IH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fY2Fz
ZVZhbHVlOworICAgIEZyZXF1ZW50ZWRCbG9jayBtX3RhcmdldDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
U3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7
Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgp
Cit7CisgICAgRnJlcXVlbnRlZEJsb2NrIHJlc3VsdEJsb2NrID0gbV9zdWNjZXNzb3JzW2luZGV4
XTsKKyAgICBpbnQ2NF90IHJlc3VsdFZhbHVlID0gbV92YWx1ZXNbaW5kZXhdOworICAgIG1fc3Vj
Y2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5y
ZW1vdmVMYXN0KCk7CisgICAgbV92YWx1ZXNbaW5kZXhdID0gbV92YWx1ZXMubGFzdCgpOworICAg
IG1fdmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1cm4gU3dpdGNoQ2FzZShyZXN1bHRWYWx1
ZSwgcmVzdWx0QmxvY2spOworfQorCit2b2lkIFN3aXRjaFZhbHVlOjphcHBlbmRDYXNlKGNvbnN0
IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChtX3N1
Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3NvcnNbbV9zdWNjZXNzb3JzLnNpemUoKSAt
IDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBtX3ZhbHVlcy5hcHBlbmQoc3dpdGNoQ2Fz
ZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmR1bXBNZXRhKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBkZXN0cnVjdGl2ZWx5IG92ZXJyaWRlcyBD
b250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91dC5wcmludChsaXN0RHVtcCgqdGhpcyks
ICIsIGZhbGxUaHJvdWdoID0gIiwgZmFsbFRocm91Z2goKSk7Cit9CisKK1N3aXRjaFZhbHVlOjpT
d2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRnJlcXVlbnRl
ZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xWYWx1ZShpbmRleCwgU3dpdGNoLCBW
b2lkLCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hW
YWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUu
aCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVibGljIENvbnRyb2xWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNv
ZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFsdWUoKTsKKworICAgIC8vIG51bUNhc2VW
YWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgorICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1
ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKworICAgIC8vIFRoZSBzdWNj
ZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2
NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5k
ZXhdOyB9CisgICAgCisgICAgY29uc3QgVmVjdG9yPGludDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEZyZXF1ZW50ZWRCbG9jayBmYWxsVGhyb3Vn
aCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKyAgICBGcmVxdWVudGVk
QmxvY2smIGZhbGxUaHJvdWdoKCkgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorCisg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG51bUNhc2VWYWx1ZXMoKTsgfQorICAg
IFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU3dpdGNoQ2FzZShjYXNlVmFsdWUoaW5kZXgpLCBzdWNjZXNzb3IoaW5kZXgpKTsKKyAgICB9
CisgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7
CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fc3dpdGNo
KG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3dpdGNoVmFsdWUmIHN3aXRjaFZhbHVlLCB1bnNp
Z25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2goJnN3aXRjaFZhbHVlKQorICAgICAg
ICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBT
d2l0Y2hDYXNlIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3N3
aXRjaC0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAg
ICAgIGNvbnN0IFN3aXRjaFZhbHVlKiBtX3N3aXRjaDsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICB9OworCisgICAgdHlwZWRlZiBpdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKKworICAg
IGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9Cisg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7
IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEg
Yml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0
aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZp
c2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250YWluIHNvbWUg
b3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVk
LgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lk
IGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSk7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJv
dWdoKTsKKworICAgIFZlY3RvcjxpbnQ2NF90PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
U3dpdGNoVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQoIlZvaWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIG91dC5wcmludCgiSW50NjQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICBvdXQucHJpbnQo
IkRvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzVHlwZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgeworICAgIFZv
aWQsCisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxpbmUgYm9v
bCBpc0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9
PSBJbnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7CisgICAgcmV0
dXJuIHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyVHlwZSgpCit7Cisg
ICAgaWYgKGlzMzJCaXQoKSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVybiBJbnQ2
NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVcHNpbG9uVmFs
dWU6On5VcHNpbG9uVmFsdWUoKQoreworfQorCit2b2lkIFVwc2lsb25WYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4iLCBtX3BoaS0+aW5k
ZXgoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXBzaWxvblZhbHVlX2gKKyNkZWZp
bmUgQjNVcHNpbG9uVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFVwc2ls
b25WYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0
cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gVXBzaWxvbjsgfQorCisgICAgflVw
c2lsb25WYWx1ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhpOyB9
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3Zl
cnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAg
ICBVcHNpbG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1
ZSwgVmFsdWUqIHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGhpLCBWb2lkLCBvcmlnaW4s
IHZhbHVlKQorICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1
ZS0+dHlwZSgpID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisKKyAgICBWYWx1ZSogbV9waGk7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworVXNlQ291bnRzOjpVc2VDb3VudHMoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAg
OiBtX2NvdW50cyhwcm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQoreworICAgIGZvciAoVmFsdWUq
IHZhbHVlIDogcHJvY2VkdXJlLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoVmFsdWUqIGNoaWxk
IDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICBtX2NvdW50c1tjaGlsZF0rKzsKKyAg
ICB9Cit9CisKK1VzZUNvdW50czo6flVzZUNvdW50cygpCit7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
VXNlQ291bnRzX2gKKyNkZWZpbmUgQjNVc2VDb3VudHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFVz
ZUNvdW50cyB7CitwdWJsaWM6CisgICAgVXNlQ291bnRzKFByb2NlZHVyZSYpOworICAgIH5Vc2VD
b3VudHMoKTsKKworICAgIHVuc2lnbmVkIG9wZXJhdG9yW10oVmFsdWUqIHZhbHVlKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY291bnRzW3ZhbHVlXTsKKyAgICB9Citwcml2YXRlOgor
ICAgIEluZGV4TWFwPFZhbHVlLCB1bnNpZ25lZD4gbV9jb3VudHM7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1VzZUNvdW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2lj
QmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1Zh
bHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3RmL1N0
cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRh
dGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0
IGNoYXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9wcm9jZWR1
cmUocHJvY2VkdXJlKQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1fZHVtcEJl
Zm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0
aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19M
SU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdl
KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAg
ICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzOworICAgICAgICBIYXNoU2V0PFZhbHVlKj4g
dmFsdWVJblByb2M7CisgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluQmxvY2s7CisKKyAg
ICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2VkdXJlKSB7CisgICAgICAgICAg
ICBibG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJs
b2NrKQorICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQodmFsdWUpOworICAgICAgICB9
CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2NlZHVyZS52YWx1ZXMoKSkKKyAg
ICAgICAgICAgIHZhbHVlSW5Qcm9jLmFkZCh2YWx1ZSk7CisKKyAgICAgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiB2YWx1ZUluUHJvYykKKyAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5CbG9jay5j
b250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIGZvciAoVmFsdWUqIHZh
bHVlIDogdmFsdWVJbkJsb2NrKQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29u
dGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOworCisgICAgICAgIGZvciAoVmFsdWUqIHZh
bHVlIDogdmFsdWVJblByb2MpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFs
dWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29u
dGFpbnMoY2hpbGQpLCAoIkF0ICIsICp2YWx1ZSwgIi0+IiwgcG9pbnRlckR1bXAoY2hpbGQpKSk7
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7
CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNz
b3JCbG9ja3MoKSkgeworICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAg
ICAgICBibG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJBdCAiLCAqYmxvY2ssICItPiIsIHBv
aW50ZXJEdW1wKHN1Y2Nlc3NvcikpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgLy8gRklYTUU6IEV4cGFuZCB0aGlzIHZhbGlkYXRpb24gcGhhc2UuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0ODAKKyAg
ICB9CisKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisg
ICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciog
ZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdl
KQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAg
ICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJC
MyBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwg
Y29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIGlm
IChtX3doZW4pCisgICAgICAgICAgICAgICAgb3V0LnByaW50KCIgICAgRHVyaW5nICIsIG1fd2hl
biwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsK
KyAgICAgICAgfQorCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBp
ZiAobV9kdW1wQmVmb3JlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV93aGVu
LCAiOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0K
KyAgICAgICAgZGF0YUxvZygiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFM
b2cobV9wcm9jZWR1cmUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAg
ICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5j
dGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgUHJv
Y2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX3doZW47CisgICAgY29uc3Qg
Y2hhciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3Zv
aWQgdmFsaWRhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0
IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUs
IHdoZW4sIGR1bXBCZWZvcmUpOworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNWYWxpZGF0ZV9oCisjZGVmaW5lIEIzVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwor
dm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29u
c3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbGlkYXRlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY29uc3QgY2hhciogY29uc3QgVmFsdWU6
OmR1bXBQcmVmaXggPSAiQCI7CisKK1ZhbHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVl
OjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEg
Yml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZh
bHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUu
IFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdl
IGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3
ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWduZWQg
aW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3Jp
Z2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAg
ICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKworICAgIFJFTEVBU0Vf
QVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVl
KCk7CisKKyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBJZGVudGl0eSwgdHlwZSwgb3JpZ2lu
LCB2YWx1ZSk7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2Vt
ZW50ID0gcmVwbGFjZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoTm9wKCkKK3sK
KyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3Jp
Z2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJl
cGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVl
KCk7CisKKyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBOb3AsIFZvaWQsIG9yaWdpbik7CisK
KyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFj
ZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6OmRl
ZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwg
IiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bjb2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOworICAg
IENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVuKCkp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAgIFN0
cmluZ1ByaW50U3RyZWFtIHN0cmluZ091dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQpOworICAg
IENTdHJpbmcgc3RyaW5nID0gc3RyaW5nT3V0LnRvQ1N0cmluZygpOworICAgIGlmIChzdHJpbmcu
bGVuZ3RoKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgc3RyaW5nKTsKKworICAgIG91dC5w
cmludCgiKSIpOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0
Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0
Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAg
IGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2Ogor
ICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAg
Y2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNT
aHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1
YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgp
OworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRlclR5cGUoKTsK
KyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgRFRvSTMyOgorICAg
IGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAg
IGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVy
RXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVF
cXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBj
YXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0OworICAg
IGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAg
ICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNk
ZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJn
LmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1
ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBCYXNpY0Jsb2NrOworY2xhc3MgU3RhY2ttYXA7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRF
IFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBB
ZGphY2VuY3lMaXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7
CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1
cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0
YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bj
b2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3Jp
Z2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxk
KHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVl
KiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07
IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAg
ICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIC8vIFRoaXMgaXMg
dXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgdmFsaWQgZm9yIG5v
bi12b2lkIHZhbHVlcy4KKyAgICBBaXI6OkFyZzo6VHlwZSBhaXJUeXBlKCkgY29uc3QgeyByZXR1
cm4gQWlyOjpBcmc6OnR5cGVGb3JCM1R5cGUodHlwZSgpKTsgfQorCisgICAgQWRqYWNlbmN5TGlz
dCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFjZW5j
eUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAgdm9p
ZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCByZXBsYWNlV2l0aE5vcCgp
OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3QgVmFs
dWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVkIHRo
YXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAgICAv
LworICAgIC8vIGlmIChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5hczxB
cmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncworICAgIC8vIH0KKyAgICAv
LworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFyZ3Vt
ZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAvLyBp
ZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0
IFQqIGFzKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGlu
dDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsK
KyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSW50KCkgY29uc3Q7
CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnQoaW50NjRfdCB2YWx1
ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OworICAgIGRvdWJsZSBhc0Rv
dWJsZSgpIGNvbnN0OworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7CisKK3Byb3RlY3RlZDoK
KyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworcHJvdGVjdGVkOgorICAgIC8v
IEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1
aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAg
ICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1f
b3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVu
dHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5n
IHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAg
ICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9v
cGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2lu
KG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bj
b2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3Qg
Y2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0
IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4
KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlw
ZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAg
ICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAg
ICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVy
IHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8v
IHRha2UgYW55IGFyZ3VtZW50czoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQor
ICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNv
ZGUsIG51bGxwdHIpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQor
ICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCisgICAgZXhwbGljaXQgVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAg
eworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFs
dWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5n
ZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUg
bV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOwor
ICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sq
IG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxh
Y2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRp
b25zLgorfTsKKworY2xhc3MgRGVlcFZhbHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVl
RHVtcChjb25zdCBWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQor
Citwcml2YXRlOgorICAgIGNvbnN0IFZhbHVlKiBtX3ZhbHVlOworfTsKKworaW5saW5lIERlZXBW
YWx1ZUR1bXAgZGVlcER1bXAoY29uc3QgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVw
VmFsdWVEdW1wKHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNs
dWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisjaW5j
bHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCogVmFsdWU6OmFzKCkKK3sKKyAgICBpZiAoVDo6
YWNjZXB0cyhvcGNvZGUoKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4odGhpcyk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdCBU
KiBWYWx1ZTo6YXMoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9jYXN0PFZhbHVlKj4odGhp
cyktPmFzPFQ+KCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7
CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbmxpbmUgaW50MzJfdCBW
YWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+
dmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gISFhczxDb25zdDY0VmFsdWU+KCk7Cit9CisKK2lubGluZSBpbnQ2NF90IFZhbHVl
Ojphc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1
ZSgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaGFzSW50MzIoKSB8fCBoYXNJbnQ2NCgpOworfQorCitpbmxpbmUgaW50NjRfdCBWYWx1ZTo6
YXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNJ
bnQ2NCgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworaW5s
aW5lIGJvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29u
c3REb3VibGVWYWx1ZT4oKTsKK30KKworaW5saW5lIGRvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBj
b25zdAoreworICAgIHJldHVybiBhczxDb25zdERvdWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQor
CitpbmxpbmUgU3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFs
dWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3Rh
Y2ttYXA7CisgICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9p
bnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZh
bHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1f
a2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEFueToKKyAgICBjYXNlIFNv
bWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAg
IG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgi
KCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25z
dGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVS
ZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVw
OjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lz
dGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAg
ICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBW
YWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmlu
dCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6
Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNW
YWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3Jp
YmUgdmFsdWUgcmVwcmVzZW50YXRpb25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8g
Zm9yY2UgYQorLy8gcmVwcmVzZW50YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24u
IFdoZW4gdGhlIEIzIGNsaWVudCBmb3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0
aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2Vu
dGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFz
cyBWYWx1ZVJlcCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4g
aW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVw
cmVzZW50YXRpb24uIEFzIGFuCisgICAgICAgIC8vIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZvciB0aGUK
KyAgICAgICAgLy8gcmlnaHQgb3BlcmFuZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVja011bC4K
KyAgICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0
aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUg
YQorICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIhCisgICAg
ICAgIFNvbWVSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlv
biwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKKyAgICAg
ICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNr
ZWQuCisgICAgICAgIFJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNl
bnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJdCdzIG5v
dCBhIHZhbGlkCisgICAgICAgIC8vIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBTdGFj
aywKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMg
dGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUgYXJndW1lbnQgYXJlYSBhdCBzb21lCisgICAgICAg
IC8vIG9mZnNldC4KKyAgICAgICAgLy8gRklYTUU6IFRoZSBTdGFja21hcFNwZWNpYWwgY2xhc3Mg
bmVlZHMgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCB0aGVzZSBkb24ndCB0dXJuIGludG8K
KyAgICAgICAgLy8gQWlyIG9wZXJhbmRzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTQwCisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAg
ICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQg
QjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9Owor
ICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdp
c3RlcikKKyAgICAgICAgLCBtX3ZhbHVlKHJlZy5pbmRleCgpKQorICAgIHsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFs
dWVSZXAocmVnKTsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qg
b2Zmc2V0RnJvbUZQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJv
bUZQOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJl
cCBzdGFja0FyZ3VtZW50KGludHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZh
bHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7Cisg
ICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbVNQOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZhbHVl
KQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50RG91Ymxl
KGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQo
Yml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVlKSk7CisgICAgfQorCisgICAgS2luZCBraW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFueTsgfQorCisgICAgUmVnIHJlZygpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJu
IFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZy
b21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0
cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gbV92
YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIEtpbmQgbV9r
aW5kOworICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlUmVwX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVy
LnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3Bh
dHRlcm5fbWF0Y2hlci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwOCBAQAorIyEvdXNy
L2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCity
ZXF1aXJlICJwYXRobmFtZSIKKworJHZhckluZGV4ID0gMAorZGVmIG5ld1ZhcgorICAgICR2YXJJ
bmRleCArPSAxCisgICAgIl90bXAjeyR2YXJJbmRleH0iCitlbmQKKworY2xhc3MgUHJvZHVjdGlv
bgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpuYW1lLCA6dmFyTmFtZSwgOmFub255bW91cywg
Om9wY29kZSwgOmNoaWxkcmVuCisKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIG5hbWUsIG9w
Y29kZSwgY2hpbGRyZW4pCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQG5hbWUg
PSBuYW1lCisgICAgICAgIEBhbm9ueW1vdXMgPSAobmFtZSA9PSBuaWwgb3IgbmFtZSA9fiAvXEFc
JChbMC05XSspXFovKQorICAgICAgICBAdmFyTmFtZSA9IEBhbm9ueW1vdXMgPyBuZXdWYXIgOiBu
YW1lID1+IC9cQVwkLyA/ICQnIDogbmFtZQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAg
ICAgIEBjaGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBbXQorICAgIGVuZAorCisgICAg
ZGVmIGhhc09wY29kZQorICAgICAgICBvcGNvZGUgIT0gbmlsCisgICAgZW5kCisKKyAgICBkZWYg
ZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICBjaGlsZHJlbi5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgfCBjaGlsZCwgaW5kZXggfAorICAgICAgICAgICAgeWllbGQgdmFyTmFtZSwK
KyAgICAgICAgICAgICAgICAgIGNoaWxkLm5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC52
YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQuYW5vbnltb3VzID8gKGNoaWxkLm9wY29k
ZSA/IDphbm9uSW50ZXJuYWwgOiA6YW5vbk9wZXJhbmQpIDogKGNoaWxkLm9wY29kZSA/IDppbnRl
cm5hbCA6IDpvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgIGluZGV4CisgICAgICAgICAgICBj
aGlsZC5lYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitjbGFz
cyBNYXRjaGVyCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpwcm9kdWN0aW9ucworCisgICAgZGVm
IGluaXRpYWxpemUobmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAg
ICAgICBAcHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucworICAgIGVuZAorZW5kCisKK2NsYXNzIE9y
aWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBk
ZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0g
ZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAg
CisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAg
ZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5n
CisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmln
aW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAg
IGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAg
IEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJp
bmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVy
KQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MK
KyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAg
CisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/
CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIK
KyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAg
IGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAg
bGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0
cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGln
bm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUK
KyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQVthLXpBLVowLTkk
XShbYS16QS1aMC05X10qKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2lu
Lm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJd
KykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVs9
KCksXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFt
ZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4
ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5l
eHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAg
ICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVm
IGlzS2V5d29yZCh0b2tlbikKKyAgICAjIFdlIGNhbiBleHRlbmQgdGhpcyBhcyB3ZSBhZGQgbW9y
ZSBrZXl3b3Jkcy4gTGlrZSwgd2UgbWlnaHQgd2FudCAiaW5jbHVkZSIgZXZlbnR1YWxseS4KKyAg
ICB0b2tlbiA9fiAvXEEoKG1hdGNoZXIpfChpbmNsdWRlKSlcWi8KK2VuZAorCitkZWYgaXNJZGVu
dGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10q
KVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBk
ZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRh
LCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgor
ICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAg
ICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAg
ICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAg
ICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1l
bnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30i
KSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAg
IGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZp
ZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisg
ICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAg
aWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNo
aWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisgICAg
ICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnku
bmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGlj
YXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJv
ZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1hdGNo
ZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAg
ICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBp
ZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0
byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUuCisg
ICAgICAgICAgICBwcm9kdWN0aW9uID0gcGFyc2VQcm9kdWN0aW9uCisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09
IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRl
IHByb2R1Y3Rpb24iKQorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIHByb2R1Y3Rpb25z
IDw8IHByb2R1Y3Rpb24KKyAgICAgICAgfQorCisgICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJO
YW1lLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAg
ICAgICAgb3JpZ2luID0gdG9rZW4ub3JpZ2luCisgICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRp
ZmllcgorCisgICAgICAgIGlmIHRva2VuID09ICI9IgorICAgICAgICAgICAgY29uc3VtZSgiPSIp
CisgICAgICAgICAgICBvcGNvZGUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgY29u
c3VtZSgiKCIpCisgICAgICAgIGVsc2lmIHRva2VuID09ICIoIgorICAgICAgICAgICAgY29uc3Vt
ZSgiKCIpCisgICAgICAgICAgICBvcGNvZGUgPSBuYW1lCisgICAgICAgICAgICBuYW1lID0gbmls
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4s
IG5hbWUsIG5pbCwgbmlsKQorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rp
b25zID0gW10KKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAi
KSIKKworICAgICAgICAgICAgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1
Y3Rpb24pCisKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorICAgICAgICAgICAg
Y29uc3VtZSgiLCIpCisgICAgICAgIH0KKworICAgICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIp
IgorICAgICAgICBhZHZhbmNlCisKKyAgICAgICAgUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1l
LCBvcGNvZGUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlsw
XQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCitt
YXRjaGVyID0gcGFyc2VyLnBhcnNlCisKK2NsYXNzIFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIg
OmluZGV4TWFwLCA6cHJvZHVjdGlvbnMKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICBAaW5kZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVj
dGlvbnMgPSBbXQorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4
IHwKKyAgICAgICAgICAgIEBpbmRleE1hcCA8PCBpbmRleAorICAgICAgICAgICAgQHByb2R1Y3Rp
b25zIDw8IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYg
bWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAg
ICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcFtpbmRleF0KKyAgICAgICAgfQor
ICAgIGVuZAorZW5kCisKK0ZpbGUub3BlbigiQjMiICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInci
KSB7CisgICAgfCBvdXRwIHwKKworICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVy
YXRlX3BhdHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIK
KworICAgIG91dHAucHV0cyAiI2lmbmRlZiBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAu
cHV0cyAiI2RlZmluZSBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIAorICAgIG91dHAucHV0cyAi
I2luY2x1ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUg
QWRhcHRvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIHJ1biN7bWF0Y2hlci5uYW1lfShWYWx1ZSog
X3ZhbHVlLCBBZGFwdG9yJiBhZGFwdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisKKyAgICAjIE5v
dGUgdGhhdCB0aGlzIGRvZXMgbm90IGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgYmVjYXVz
ZSBpdCdzIGEgcmVjdXJzaXZlIGVtaXR0ZXIuIElmIHlvdQorICAgICMgd2FudCB0byBzZWUgdGhl
IGNvZGUgbmljZWx5IGZvcm1hdHRlZCwgb3BlbiBpdCBpbiBhIGdvb2QgdGV4dCBlZGl0b3IgYW5k
IGFzayBpdCB0byBmb3JtYXQgaXQKKyAgICAjIGZvciB5b3UuCisKKyAgICAjIEluIG9kZCBzaXR1
YXRpb25zLCB3ZSBtYXkgbm90IHVzZSB0aGUgaW5wdXQgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVy
IHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShfdmFs
dWUpOyIKKyAgICAgICAgCisgICAgIyBUaGlzIGp1c3QgcHJvdGVjdHMgdGhlIGNhbGxlciBmcm9t
IGhhdmluZyB0byB3b3JyeSBhYm91dCBwcm9kdWN0aW9ucyBoYXZpbmcgZGlmZmVyZW50IGxlbmd0
aHMuCisgICAgZGVmIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisg
ICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5k
ZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBp
bmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmNoaWxkcmVu
Lmxlbmd0aCA9PSBwcm9kdWN0aW9uLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgICAgIGlu
ZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
aW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAg
ICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAg
ICAgICBsZW5ndGggPSBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmNoaWxkcmVuLmxlbmd0aAor
ICAgICAgICAgICAgaWYgbGVuZ3RoID4gMAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCN7dmFsdWVOYW1lfS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gI3tsZW5ndGh9KSB7IgorICAgICAg
ICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAg
ICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRoaXMgZWZmaWNpZW50bHkg
c2VsZWN0cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgcHJvZHVjdGlvbnMuIEl0IGFzc3VtZXMgdGhh
dCBwcm9kdWN0aW9ucworICAgICMgYXJlIG5vdCBkdXBsaWNhdGVkLiBJdCB5aWVsZHMgdGhlIGlu
ZGV4IG9mIHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBhbmQgdGhlIGNvcm91dGluZSBpcworICAgICMg
cmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIHNwZWNpZmljIGNvZGUgZm9yIHRoYXQgcHJvZHVjdGlv
bi4gVGhlIGNvcm91dGluZSBpcyBnaXZlbiBsaXN0cyBvZgorICAgICMgaW5kaWNlcyBvZiBwb3Nz
aWJseS1tYXRjaGluZyBwcm9kdWN0aW9ucy4KKyAgICBkZWYgbWF0Y2hQcm9kdWN0aW9ucyhvdXRw
LCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICAjIEZpcnN0LCBzcGxpdCB0aGUgcHJv
ZHVjdGlvbnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJvZHVjdGlvbnMgd2l0aCBhbiBvcGNvZGUgYW5k
IHByb2R1Y3Rpb25zCisgICAgICAgICMgd2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMg
PSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAg
fCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQg
cHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmhhc09wY29kZSA9PSBwcm9kdWN0aW9uLmhh
c09wY29kZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgIyBOb3csIGVtaXQgcGF0dGVy
biBtYXRjaGluZyBjb2RlLiBXZSBkbyBpdCBkaWZmZXJlbnRseSBmb3IgbGlzdHMgd2l0aCBhbiBv
cGNvZGUgdGhhbiBmb3IKKyAgICAgICAgIyBsaXN0cyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5k
ZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGlm
IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgIyBO
b3csIHdlIHNwbGl0IHRoaXMgaW5kZXggbGlzdCBpbnRvIGdyb3VwcyBmb3IgZWFjaCBvcGNvZGUu
CisgICAgICAgICAgICAgICAgZ3JvdXBzID0ge30KKyAgICAgICAgICAgICAgICBpbmRleExpc3Qu
ZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgICAg
ICBwcm9kdWN0aW9uID0gcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGlm
IGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vw
c1twcm9kdWN0aW9uLm9wY29kZV0gPDwgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA9IFtpbmRl
eF0KKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgInN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5vcGNvZGUoKSkgeyIKKyAgICAgICAgICAgICAg
ICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvcGNvZGUsIHN1Yklu
ZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZX06
IgorICAgICAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhzdWJJbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2
YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5t
YXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1
Y3Rpb25zKQorICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3Vi
TWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAor
ICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0
KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5k
CisKKyAgICAjIFRha2VzIHByb2R1Y3Rpb25zIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcGNvZGUgYW5k
IHRoZSBzYW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBmcm9tIHRoZW0gYmFzZWQgb24KKyAgICAjIHRo
ZSBwcm9kdWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29sdW1uLgorICAgIGRlZiBtYXRjaENvbHVtbihv
dXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCkKKyAgICAgICAgaWYgY29s
dW1uSW5kZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICB5
aWVsZCAoMC4uLihwcm9kdWN0aW9ucy5zaXplKSkudG9fYQorICAgICAgICAgICAgcmV0dXJuCisg
ICAgICAgIGVuZAorCisgICAgICAgIHN1YlZhbHVlID0gbmV3VmFyCisgICAgICAgIAorICAgICAg
ICBvdXRwLnB1dHMgInsiCisgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7c3ViVmFsdWV9ID0g
I3t2YWx1ZU5hbWV9LT5jaGlsZCgje2NvbHVtbkluZGV4fSk7IgorCisgICAgICAgICMgV2UgbWF5
IG5vdCB1c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0
IGl0LgorICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3N1YlZhbHVlfSk7IgorICAg
ICAgICAKKyAgICAgICAgc3ViUHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucy5tYXAgeworICAgICAg
ICAgICAgfCBwcm9kdWN0aW9uIHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uY2hpbGRyZW5bY29s
dW1uSW5kZXhdCisgICAgICAgIH0KKworICAgICAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHN1
YlZhbHVlLCBzdWJQcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAg
ICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykK
KyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVj
dGlvbnMsIGNvbHVtbkluZGV4ICsgMSkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwK
KyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgIGVu
ZAorCisgICAgZGVmIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9u
cykKKyAgICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25z
KSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAjIFdlIGFyZSBndWFy
YW50ZWVkIHRoYXQgdGhpcyBpbmRleCBsaXN0IGNvbnRhaW5zIHByb2R1Y3Rpb25zIHdpdGggdGhl
IHNhbWUgb3Bjb2RlIGFuZAorICAgICAgICAgICAgIyB0aGUgc2FtZSBsZW5ndGguCisgICAgICAg
ICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAg
ICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9u
cywgMCkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5
aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgZW5kCisKKyAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsICJfdmFsdWUiLCBt
YXRjaGVyLnByb2R1Y3Rpb25zKSB7CisgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgaW5k
ZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBwcm9kdWN0
aW9uID0gbWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgIG91dHAucHV0cyAi
eyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7cHJvZHVjdGlvbi52YXJOYW1lfSA9
IF92YWx1ZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3Byb2R1Y3Rp
b24udmFyTmFtZX0pOyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAg
ICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0g
W10KKyAgICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHNlZW4gPSB7fQorICAg
ICAgICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAgICAgICAgICAgICAgIHwgcGFy
ZW50VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgje2luZGV4fSki
CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc2VlbltjaGlsZFZhck5hbWVd
CisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsiCisgICAgICAg
ICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVlCisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFt
ZX0gPSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lk
ZXIgZ2V0dGluZyByaWQgb2YgdGhlICQgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICAjIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MjcKKyAgICAgICAgICAg
ICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAg
aWYgY2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQor
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpp
bnRlcm5hbCBvciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5k
ID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hp
bGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KGFkYXB0b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFs
QXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5h
Y2NlcHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5
PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygi
ICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIg
KyB0cnlBcmd1bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0
cyAiYWRhcHRvci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBp
bnRlcm5hbEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0
b3IuYWNjZXB0SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSAr
ICIpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVu
dHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJh
bmRzTGF0ZSgiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybjsiCisgICAgICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAgICAg
IG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRz
ICJ9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBC
MyN7bWF0Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rl
c3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJC
M0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNs
dWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKKyNpbmNsdWRl
ICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgorI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiVk0u
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBu
YW1lc3BhY2UgSlNDOjpCMzsKKworbmFtZXNwYWNlIHsKKworLy8gTm90aGluZyBmYW5jeSBmb3Ig
bm93OyB3ZSBqdXN0IHVzZSB0aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlvbiBtYWNoaW5lcnkuCisj
ZGVmaW5lIENIRUNLKHgpIFJFTEVBU0VfQVNTRVJUKHgpCisKK1ZNKiB2bTsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVCBjb21waWxlQW5kUnVuKFByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIENDYWxsSGVs
cGVycyBqaXQodm0pOworICAgIGdlbmVyYXRlKHByb2NlZHVyZSwgaml0KTsKKyAgICBMaW5rQnVm
ZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoInRlc3RiMyIpKTsKKyAgICBU
ICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMu
Li4pPihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gZnVuY3Rp
b24oYXJndW1lbnRzLi4uKTsKK30KKwordm9pZCB0ZXN0NDIoKQoreworICAgIFByb2NlZHVyZSBw
cm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUq
IGNvbnN0NDIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
NDIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3Jp
Z2luKCksIGNvbnN0NDIpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpID09
IDQyKTsKK30KKworI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBkYXRhTG9nKCN0ZXN0ICI6XG4iKTsgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICB0ZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICBkYXRhTG9nKCIgICAgT0shXG4iKTsgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUg
KGZhbHNlKTsKKwordm9pZCBydW4oKQoreworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygp
OworICAgIHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisKKyAgICBSVU4o
dGVzdDQyKCkpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworI2Vsc2UgLy8gRU5B
QkxFKEIzX0pJVCkKKworc3RhdGljIHZvaWQgcnVuKCkKK3sKKyAgICBkYXRhTG9nKCJCMyBKSVQg
aXMgbm90IGVuYWJsZWQuXG4iKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK2lu
dCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJnYyk7
CisgICAgVU5VU0VEX1BBUkFNKGFyZ3YpOworICAgIAorICAgIHJ1bigpOworICAgIHJldHVybiAw
OworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3Rh
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjM5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgi
CisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitib29sIGF0dGVtcHRBc3Np
Z25tZW50KAorICAgIFN0YWNrU2xvdCogc2xvdCwgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25z
dCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgZm9yIChTdGFja1Nsb3Qq
IG90aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhlclNsb3QtPm9mZnNl
dEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJvb2wgb3ZlcmxhcCA9
IFdURjo6cmFuZ2VzT3ZlcmxhcCgKKyAgICAgICAgICAgIG9mZnNldEZyb21GUCwKKyAgICAgICAg
ICAgIG9mZnNldEZyb21GUCArIHN0YXRpY19jYXN0PGludHB0cl90PihzbG90LT5ieXRlU2l6ZSgp
KSwKKyAgICAgICAgICAgIG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCksCisgICAgICAgICAgICBv
dGhlclNsb3QtPm9mZnNldEZyb21GUCgpICsgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG90aGVyU2xv
dC0+Ynl0ZVNpemUoKSkpOworICAgICAgICBpZiAob3ZlcmxhcCkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAob2Zmc2V0RnJvbUZQ
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBhc3NpZ24oU3RhY2tTbG90KiBzbG90LCBj
b25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgaWYgKGF0dGVtcHRB
c3NpZ25tZW50KHNsb3QsIC1zdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xvdC0+Ynl0ZVNpemUoKSks
IG90aGVyU2xvdHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKFN0YWNrU2xvdCogb3Ro
ZXJTbG90IDogb3RoZXJTbG90cykgeworICAgICAgICBpZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJv
bUZQKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYm9vbCBkaWRBc3NpZ24gPSBh
dHRlbXB0QXNzaWdubWVudCgKKyAgICAgICAgICAgIHNsb3QsIG90aGVyU2xvdC0+b2Zmc2V0RnJv
bUZQKCkgLSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xvdC0+Ynl0ZVNpemUoKSksIG90aGVyU2xv
dHMpOworICAgICAgICBpZiAoZGlkQXNzaWduKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKK3sKKyAgICBQaGFz
ZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlU3RhY2siKTsKKworICAgIC8vIEFsbG9j
YXRlIGFsbCBvZiB0aGUgbG9ja2VkIHNsb3RzIGluIG9yZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBj
cmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCisgICAgLy8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0
YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9mZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0
IGhlcmUuCisgICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tT
bG90Kj4gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBs
b2NrZWRTdGFja1Nsb3RzV29ya2xpc3Q7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2Rl
LnN0YWNrU2xvdHMoKSkgeworICAgICAgICBzd2l0Y2ggKHNsb3QtPmtpbmQoKSkgeworICAgICAg
ICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZz
ZXRGcm9tRlAoKSkKKyAgICAgICAgICAgICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBw
ZW5kKHNsb3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvY2tlZFN0YWNr
U2xvdHNXb3JrbGlzdC5hcHBlbmQoc2xvdCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6CisgICAgICAgICAgICBpZiAoc2xvdC0+b2Zm
c2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBBcyBhIG1hdHRlciBvZiBzYW5pdHks
IHVuYXNzaWduIHRoaXMuIE1heWJlIGl0IHdvdWxkIGJlIGdvb2QgdG8gZXZlbiBoYXZlIGEKKyAg
ICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIHJ1bGUgdGhhdCB0aGlzIGNhbm5vdCBoYXBwZW4u
CisgICAgICAgICAgICAgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQKDApOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgLy8gVGhpcyBpcyBh
IGZhaXJseSBleHBlbnNpdmUgbG9vcCwgYnV0IGl0J3MgT0sgYmVjYXVzZSB3ZSdsbCB1c3VhbGx5
IG9ubHkgaGF2ZSBhIGhhbmRmdWwgb2YKKyAgICAvLyBsb2NrZWQgc3RhY2sgc2xvdHMuCisgICAg
d2hpbGUgKCFsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QuaXNFbXB0eSgpKSB7CisgICAgICAgIFN0
YWNrU2xvdCogc2xvdCA9IGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC50YWtlTGFzdCgpOworICAg
ICAgICBhc3NpZ24oc2xvdCwgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzKTsKKyAgICAgICAgYXNz
aWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAgICB9CisKKyAgICAvLyBOb3cg
d2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMuIE5vdGUgdGhhdCB0aGVvcmV0aWNhbGx5IHdl
IHNob3VsZCBkbyBhbiBlc2NhcGUgYW5hbHlzaXMKKyAgICAvLyBoZXJlLiBCdXQsIGN1cnJlbnRs
eSBBaXIgZG9lc24ndCBzdXBwb3J0IGVzY2FwaW5nIGEgU3RhY2tTbG90IQorICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBmb3IgZXNjYXBpbmcgYSBTdGFja1Nsb3QgYW5kIGFkZCBlc2NhcGUgYW5h
bHlzaXMgdG8gYWxsb2NhdGVTdGFjaygpLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA0MzAKKworICAgIGF1dG8gaXNSZWxldmFudCA9IFtdIChjb25z
dCBBcmcmIGFyZykgLT4gYm9vbCB7CisgICAgICAgIHJldHVybiBhcmcuaXNTdGFjaygpICYmIGFy
Zy5zdGFja1Nsb3QoKS0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91czsKKyAgICB9
OworCisgICAgTGl2ZW5lc3M8QXJnPiBsaXZlbmVzcyhjb2RlKTsKKyAgICBJbmRleE1hcDxTdGFj
a1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMo
KS5zaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzbG90czsKKworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIExpdmVuZXNzPEFyZz46OkxvY2FsQ2Fs
YyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBhdXRvIGludGVyZmVyZSA9
IFsmXSAoKSB7CisgICAgICAgICAgICAvLyBGb3JtIGEgY2xpcXVlIG9mIHN0YWNrIHNsb3RzIHRo
YXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0IG9mIHN0YWNrIHNsb3RzCisgICAgICAg
ICAgICAvLyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgIHNsb3RzLnJlc2l6
ZSgwKTsKKyAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaXNSZWxldmFudChhcmcpKQorICAgICAgICAgICAgICAgICAgICBz
bG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbG90cy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBzbG90c1tpXTsKKyAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNsb3RzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIgPSBzbG90c1tpXTsKKworICAgICAgICAgICAgICAg
ICAgICBTdGFja1Nsb3QqIGZpcnN0ID0gb3V0ZXI7CisgICAgICAgICAgICAgICAgICAgIFN0YWNr
U2xvdCogc2Vjb25kID0gaW5uZXI7CisgICAgICAgICAgICAgICAgICAgIGlmIChmaXJzdC0+aW5k
ZXgoKSA+IHNlY29uZC0+aW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6c3dh
cChmaXJzdCwgc2Vjb25kKTsKKworICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmVuY2VbZmly
c3RdLmFkZChzZWNvbmQpOworICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmVuY2Vbc2Vjb25k
XS5hZGQoZmlyc3QpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
fTsKKworICAgICAgICBpbnRlcmZlcmUoKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAg
ICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAgICBp
bnRlcmZlcmUoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3ZSBhc3NpZ24gc3Rh
Y2sgbG9jYXRpb25zLiBBdCBpdHMgaGVhcnQgdGhpcyBhbGdvcml0aG0gaXMganVzdCBmaXJzdC1m
aXQuIEZvciBlYWNoCisgICAgLy8gU3RhY2tTbG90IHdlIGp1c3Qgd2FudCB0byBmaW5kIHRoZSBv
ZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHplcm8gd2hpbGUgZW5zdXJpbmcgbm8KKyAg
ICAvLyBvdmVybGFwIHdpdGggb3RoZXIgU3RhY2tTbG90cyB0aGF0IHRoaXMgb3ZlcmxhcHMgd2l0
aC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90czsKKyAgICBmb3IgKFN0YWNrU2xv
dCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGlmIChzbG90LT5vZmZzZXRG
cm9tRlAoKSkgeworICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZzZXQuCisg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hTZXQ8U3RhY2tT
bG90Kj4mIGludGVyZmVyaW5nU2xvdHMgPSBpbnRlcmZlcmVuY2Vbc2xvdF07CisgICAgICAgIG90
aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCkgKyBpbnRlcmZl
cmluZ1Nsb3RzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhc3Np
Z25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdGhlclNsb3Rz
W2ldID0gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzW2ldOworICAgICAgICB1bnNpZ25lZCBuZXh0
SW5kZXggPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOworICAgICAgICBmb3IgKFN0
YWNrU2xvdCogb3RoZXJTbG90IDogaW50ZXJmZXJpbmdTbG90cykKKyAgICAgICAgICAgIG90aGVy
U2xvdHNbbmV4dEluZGV4KytdID0gb3RoZXJTbG90OworCisgICAgICAgIGFzc2lnbihzbG90LCBv
dGhlclNsb3RzKTsKKyAgICB9CisKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdl
J3JlIHVzaW5nIGZvciBzdGFjayBzbG90cy4KKyAgICB1bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFj
a1Nsb3RzID0gMDsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygp
KSB7CisgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBzdGQ6Om1heCgKKyAgICAgICAg
ICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNp
Z25lZD4oLXNsb3QtPm9mZnNldEZyb21GUCgpKSk7CisgICAgfQorCisgICAgZnJhbWVTaXplRm9y
U3RhY2tTbG90cyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVz
KCksIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMpOworCisgICAgLy8gTm93IHdlIG5lZWQgdG8gZGVk
dWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVlZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAg
ICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoYXJnLmlzQ2FsbEFyZygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdl
IGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBu
b3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3VjaCBhbiBhd2Vzb21lIGFzc3VtcHRpb24uCisg
ICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChhcmcub2Zmc2V0
KCkgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6
ZShhcmcub2Zmc2V0KCkgKyA4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBjb2RlLnNldEZyYW1lU2l6ZShmcmFtZVNpemVGb3JTdGFj
a1Nsb3RzICsgY29kZS5jYWxsQXJnQXJlYVNpemUoKSk7CisKKyAgICAvLyBGaW5hbGx5LCB0cmFu
c2Zvcm0gdGhlIGNvZGUgdG8gdXNlIEFkZHIncyBpbnN0ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlz
IGlzIGEgbG9zc2xlc3MKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNo
IHRoZSBTdGFja1Nsb3RzIGFycmF5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggU3RhY2tTbG90IGFueQor
ICAgIC8vIG9mZnNldC1mcm9tLUZQIHJlZmVycyB0by4KKworICAgIGZvciAoQmFzaWNCbG9jayog
YmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAg
ICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIHN3
aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAg
ICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgICAgICAg
ICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFyZy5vZmZzZXQoKSArIGFyZy5zdGFja1Nsb3QoKS0+b2Zmc2V0RnJvbUZQKCkpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q2FsbEFy
ZzoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAg
ICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVN0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyQWxsb2NhdGVTdGFja19oCisjZGVmaW5lIEFpckFsbG9jYXRlU3RhY2tfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGFsbG9jYXRlcyBTdGFja1Nsb3Rz
IHRvIHBsYWNlcyBvbiB0aGUgc3RhY2suIEl0IGZpcnN0IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9u
ZXMgaW4gaW5kZXgKKy8vIG9yZGVyIGFuZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2lu
ZyBmaXJzdCBmaXQuCisKK3ZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJik7CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBBaXJBbGxvY2F0ZVN0YWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJBcmcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52
YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQodG1wKCkpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmludCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIG91dC5wcmludGYoIiQweCVsbHgi
LCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFkZHI6CisgICAgICAgIGlm
IChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91
dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5k
ZXg6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQo
KSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIiwiLCBpbmRleCgpKTsKKyAgICAg
ICAgaWYgKHNjYWxlKCkgIT0gMSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkp
OworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3Rh
Y2s6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQo
KSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgaWYgKG9mZnNl
dCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50
KCIoY2FsbEFyZykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVsQ29uZDoKKyAgICAg
ICAgb3V0LnByaW50KGFzUmVsYXRpb25hbENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVzdWx0Q29uZGl0aW9uKCkp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBvdXQucHJpbnQo
cG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFy
Z19oCisjZGVmaW5lIEFpckFyZ19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyVG1wLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBT
cGVjaWFsOworY2xhc3MgU3RhY2tTbG90OworCisvLyBUaGlzIGNsYXNzIG5hbWUgaXMgYWxzbyBp
bnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2lsbCBzYXkgaXQgYSBsb3QuIFlvdSdsbCBz
ZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjppbW0oNSksIEFyZzo6YWRkcih0aGluZywg
YmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6CisgICAgLy8gVGhlc2UgZW51bSBtZW1i
ZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2UgaGF2ZSB0byBtZW50aW9uIHRo
ZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90IHsKKyAgICAgICAgSW52YWxpZCwKKyAg
ICAgICAgVG1wLAorICAgICAgICBJbW0sCisgICAgICAgIEltbTY0LAorICAgICAgICBBZGRyLAor
ICAgICAgICBTdGFjaywKKyAgICAgICAgQ2FsbEFyZywKKyAgICAgICAgSW5kZXgsCisgICAgICAg
IFJlbENvbmQsCisgICAgICAgIFJlc0NvbmQsCisgICAgICAgIFNwZWNpYWwKKyAgICB9OworCisg
ICAgZW51bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAgVXNlLAorICAgICAgICBEZWYsCisgICAg
ICAgIFVzZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5cGUgOiBpbnQ4X3QgeworICAgICAgICBH
UCwKKyAgICAgICAgRlAKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVR5
cGVzID0gMjsKKworICAgIHN0YXRpYyBib29sIGlzVXNlKFJvbGUgcm9sZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBVc2VE
ZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBp
c0RlZihSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAg
Y2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRGVmOgor
ICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZvckIzVHlwZShCMzo6VHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEdQOworICAg
ICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJu
IEdQOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBGUDsKKyAgICAg
ICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEdQOwor
ICAgIH0KKworICAgIEFyZygpCisgICAgICAgIDogbV9raW5kKEludmFsaWQpCisgICAgeworICAg
IH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAgICAgIDogbV9raW5kKFRtcCkKKyAgICAg
ICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbShpbnQz
Ml90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW02NChpbnRwdHJfdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJ
bW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBhZGRyKEFpcjo6VG1wIGJhc2UsIGludDMy
X3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAg
ICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBZGRyOworICAgICAgICBy
ZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3RhY2soU3Rh
Y2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQXJnIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV9v
ZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lm1f
c2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmcoaW50MzJfdCBvZmZzZXQpCisgICAgewor
ICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ2FsbEFyZzsKKyAg
ICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICBj
YXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9nU2NhbGUodW5zaWduZWQg
c2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToK
KyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1
cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGNh
c2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgoQWlyOjpUbXAgYmFzZSwgQWlyOjpUbXAg
aW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGluZGV4LmlzR1AoKSk7
CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2NhbGUpKTsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNl
ID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBpbmRleDsKKyAgICAgICAgcmVzdWx0
Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihzY2FsZSk7CisgICAgICAgIHJlc3VsdC5t
X29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29u
ZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlc0NvbmQoTWFjcm9B
c3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVzQ29uZDsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNpYWwqIHNwZWNpYWwpCisgICAgeworICAg
ICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3BlY2lhbDsKKyAgICAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0PGludHB0cl90PihzcGVjaWFsKTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
QXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhl
ci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAg
ICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9pbmRleCA9
PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBtX3NjYWxlID09IG90aGVyLm1fc2NhbGU7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFyZygpOyB9CisK
KyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZDsKKyAg
ICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5k
KCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJbW0oKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQorCisgICAgYm9vbCBpc0ltbTY0KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tNjQ7CisgICAgfQorCisgICAg
Ym9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRy
OworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAgIGJvb2wgaXNDYWxsQXJnKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQ2FsbEFyZzsKKyAgICB9CisKKyAgICBi
b29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRl
eDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1Jlc0NvbmQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZXNDb25kOworICAgIH0KKwor
ICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOworICAgIH0KKworICAgIEFpcjo6VG1w
IHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRtcCk7CisgICAg
ICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbSB8fCBraW5kKCkgPT0gSW1tNjQpOwor
ICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorCisgICAgdm9pZCogcG9pbnRlclZhbHVl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW1tNjQpOworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV9vZmZz
ZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1
cm4gbV9iYXNlOworICAgIH0KKworICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2Fz
ZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEluZGV4OgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaW50MzJfdCBvZmZzZXQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykKKyAgICAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3NjYWxlKTsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCk7CisgICAgfQorCisgICAg
U3RhY2tTbG90KiBzdGFja1Nsb3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQo
KSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RhY2tTbG90Kj4obV9v
ZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBzY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fc2NhbGU7CisgICAgfQorCisgICAg
dW5zaWduZWQgbG9nU2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ1NjYWxl
KHNjYWxlKCkpOworICAgIH0KKworICAgIEFpcjo6U3BlY2lhbCogc3BlY2lhbCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNwZWNpYWwpOworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBib29s
IGlzR1BUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCku
aXNHUCgpOworICAgIH0KKworICAgIGJvb2wgaXNGUFRtcCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQKCk7CisgICAgfQorICAgIAorICAgIC8vIFRl
bGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJl
cyBhIEdQIHZhbHVlLgorICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0
Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBJbW02NDoKKyAg
ICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNr
OgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAg
Y2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOwor
ICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBh
IHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2YWx1ZS4KKyAgICBib29sIGlzRlAoKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06Cisg
ICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNl
IFNwZWNpYWw6CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNl
IFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW1tNjQ6IC8vIFll
cywgd2UgYWxsb3cgSW1tNjQgYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3Ig
aW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQVG1wKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBib29sIGhhc1R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChr
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAg
ICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAv
LyBUaGUgdHlwZSBpcyBhbWJpZ3VvdXMgZm9yIHNvbWUgYXJnIGtpbmRzLiBDYWxsIHdpdGggY2Fy
ZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1AoKSA/
IEdQIDogRlA7CisgICAgfQorCisgICAgYm9vbCBpc1R5cGUoVHlwZSB0eXBlKSBjb25zdAorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAg
ICByZXR1cm4gaXNHUCgpOworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIGlz
RlAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKKyAgICB9CisKKyAgICBH
UFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncHIoKTsKKyAg
ICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1Rt
cCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnByKCk7CisgICAgfQorICAgIAorICAgIGJvb2wg
aXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNS
ZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncFRtcEluZGV4KCk7CisgICAgfQorCisgICAg
dW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCku
ZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiB0bXAoKS50bXBJbmRleCgpOworICAgIH0KKworICAgIEFyZyB3
aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmICghaGFzT2Zmc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIGlm
IChzdW1PdmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0KCksIGFkZGl0aW9uYWxPZmZzZXQpKQorICAg
ICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAg
ICBjYXNlIEFkZHI6CisgICAgICAgICAgICByZXR1cm4gYWRkcihiYXNlKCksIG9mZnNldCgpICsg
YWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICByZXR1
cm4gc3RhY2soc3RhY2tTbG90KCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAg
ICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJldHVybiBjYWxsQXJnKG9mZnNldCgpICsg
YWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1
cm4gaW5kZXgoYmFzZSgpLCBpbmRleCgpLCBzY2FsZSgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxP
ZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFz
dChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQp
IHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1
bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4Ogor
ICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBr
bm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2Ug
aXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgor
ICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQorICAgIC8vCisgICAgLy8gVGhpcyBkZWZz
ICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwgVHlwZSBhcmdUeXBlLCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVu
Y3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAg
ICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKwor
I2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NCBhc1Ry
dXN0ZWRJbW02NCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW02NCgpKTsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQodmFsdWUoKSk7CisgICAg
fQorI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciBhc1RydXN0ZWRJ
bW1QdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzNjRCaXQoKSkKKyAgICAgICAgICAg
IEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlQoaXNJ
bW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwb2lu
dGVyVmFsdWUoKSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRy
ZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0FkZHIoKSk7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRl
eCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbmRleCgpKTsK
KyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBt
X2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpT
Y2FsZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29m
ZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9u
IGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNS
ZWxDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6UmVzdWx0Q29uZGl0aW9uIGFzUmVzdWx0Q29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpc1Jlc0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNy
b0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmcoV1RGOjpIYXNoVGFibGVEZWxl
dGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYmFzZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gQXJnKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIC8vIFRoaXMgcmVhbGx5IGRvZXNuJ3QgaGF2ZSB0byBiZSB0aGF0IGdyZWF0LgorICAg
ICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludDY0X3Q+OjpoYXNoKG1fb2Zmc2V0KSArIG1fa2lu
ZCArIG1fc2NhbGUgKyBtX2Jhc2UuaGFzaCgpICsKKyAgICAgICAgICAgIG1faW5kZXguaGFzaCgp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fb2Zmc2V0IHsgMCB9OworICAgIEtp
bmQgbV9raW5kIHsgSW52YWxpZCB9OworICAgIGludDMyX3QgbV9zY2FsZSB7IDEgfTsKKyAgICBB
aXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9pbmRleDsKK307CisKK3N0cnVjdCBBcmdI
YXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBBcmcmIGtleSkgeyByZXR1cm4g
a2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEFyZyYgYSwgY29uc3Qg
QXJnJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIz
OjpBaXI6OkFyZz4geworICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpBcmdIYXNoIEhhc2g7Cit9
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4g
c3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpBcmc+IDogU2ltcGxlQ2xhc3NIYXNoVHJh
aXRzPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgLy8gQmVjYXVzZSBtX3NjYWxlIGlzIDEgaW4g
dGhlIGVtcHR5IHZhbHVlLgorICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8g
PSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckFyZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgY2hh
ciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9ICIjIjsKKworYm9vbCBCYXNpY0Jsb2Nr
OjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6OmFk
ZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6OnJlbW92ZVBy
ZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgcmV0dXJu
IEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOworfQorCit2b2lkIEJhc2lj
QmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVt
cFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6IDsgZnJl
cXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOworICAgIGZvciAoY29uc3QgSW5zdCYgaW5z
dCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbnN0LCAiXG4iKTsKK30KKwor
QmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkK
KyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxv
Y2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmFzaWNCbG9ja19o
CisjZGVmaW5lIEFpckJhc2ljQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkFpckZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRl
ICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CitjbGFzcyBJbnNlcnRpb25TZXQ7
CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxv
Y2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisgICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4g
SW5zdExpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29y
TGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxp
c3Q7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAg
ICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0K
KyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2luc3RzLmJlZ2luKCk7
IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9pbnN0cy5lbmQoKTsg
fQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAgICBjb25zdCBJbnN0JiBhdChzaXplX3Qg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6
ZV90IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorCisgICAgY29uc3QgSW5zdCYg
bGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisgICAgSW5zdCYgbGFzdCgp
IHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0
PgorICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIG1faW5z
dHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSk7CisgICAgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4u
IGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3
YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIC8vIFRoZSAiMCIg
Y2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRoZW4i
IGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAvLyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVz
ZWQgdG8gcmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2ggb2YgYSBjb25kaXRpb25hbCBicmFuY2gu
CisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29y
cy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRlZEJs
b2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRl
eF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1
cm4gbV9zdWNjZXNzb3JzOyB9CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0
dXJuIG1fc3VjY2Vzc29yczsgfQorCisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQor
ICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4g
c3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNp
Y0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4obV9z
dWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Js
b2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29u
c3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBu
dW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0K
KyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBj
b25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJl
ZGVjZXNzb3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVy
biBtX3ByZWRlY2Vzc29yczsgfQorCisgICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
Kik7CisgICAgYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCBy
ZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworICAg
IGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAgCisgICAgQmFzaWNCbG9jayh1bnNpZ25l
ZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
IEluc3RMaXN0IG1faW5zdHM7CisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisgICAg
UHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsK
K307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2lj
QmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxv
Y2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVw
RHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsK
KworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNp
YWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ0NhbGxTcGVjaWFsOjpDQ2FsbFNwZWNpYWwoKQorewor
ICAgIG1fY2xvYmJlcmVkUmVncyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKKyAgICBt
X2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7Cisg
ICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVS
ZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK0NDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgp
Cit7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0
IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBj
YWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6VXNlLCBBcmc6OkdQKTsKKyAgICAKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8v
IEZvciB0aGUgdHlwZSwgd2UgY2FuIGp1c3QgcXVlcnkgdGhlIGFyZydzIHR5cGUuIFRoZSBhcmcg
d2lsbCBoYXZlIGEgdHlwZSwgYmVjYXVzZSB3ZQorICAgICAgICAvLyByZXF1aXJlIHRoZXNlIGFy
Z3MgdG8gYmUgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3Nb
aV0sIEFyZzo6VXNlLCBpbnN0LmFyZ3NbaV0udHlwZSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgQ0Nh
bGxTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXpl
KCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sx
XS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBpZiAoaXMzMkJpdCgpKQor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEFyZzo6
SW1tNjQ6CisgICAgICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgY2FzZSBBcmc6OkFkZHI6
CisgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKCFpbnN0LmFyZ3NbMV0uaXNHUCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmICghaW5zdC5hcmdzW2ldLmlzUmVnKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgaWYgKGluc3QuYXJnc1tpXSA9PSBUbXAoc2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAg
ICAgICAgIHJldHVybiAgZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KQorewor
ICAgIC8vIEFyZyAxIGNhbiBiZSBhIHN0YWNrIGFkZHJlc3MgZm9yIHN1cmUuCisgICAgaWYgKGFy
Z0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNv
bnN0IFJlZ2lzdGVyU2V0JikKK3sKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lh
bDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250
ZXh0JikKK3sKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFy
Zzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaml0Lm1vdmUoaW5zdC5hcmdz
WzFdLmFzVHJ1c3RlZEltbVB0cigpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBqaXQuY2Fs
bChzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6VG1wOgor
ICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uZ3ByKCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzWzFdLmFzQWRkcmVz
cygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBDQ2Fs
bEhlbHBlcnM6Okp1bXAoKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIENDYWxsU3BlY2lhbDo6
ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7
Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmRl
ZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiZnVu
Y3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxTcGVjaWFs
X2gKKyNkZWZpbmUgQWlyQ0NhbGxTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworLy8gVXNlIHRoaXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEg
QyBjYWxsLiBBcmcgMCBpcyBvZiBjb3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0
aGUKKy8vIENDYWxsU3BlY2lhbCBvYmplY3QuIEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBj
YW4gYmUgYW4gSW1tUHRyLCBhIHJlZ2lzdGVyLCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFp
bmluZyBhcmdzIGFyZSBqdXN0IHRoZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkg
dGhpcyBjYWxsLiBGb3IgYXJndW1lbnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhh
dmUgdG8gZG8gdGhlIGdydW50IHdvcmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBm
YWN0LCB0aGUgb25seSByZWFzb24gd2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdp
c3RlcnMgYXMgYXJndW1lbnRzIHRvIGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFs
eXNpcyBjYW4gc2VlCisvLyB0aGF0IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3Jv
bmcgdG8gYXV0b21hZ2ljYWxseSByZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWlu
ZworLy8gdXNlZCBiZWNhdXNlIGlmIHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVt
LCB0aGVuIHRoZXknZCBhcHBlYXIgdG8gYmUgbGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBv
aW50IG9yIHRoZSBwcm9sb2d1ZSwgd2hpY2hldmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3Mg
Q0NhbGxTcGVjaWFsIDogcHVibGljIFNwZWNpYWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lh
bCgpOworICAgIH5DQ2FsbFNwZWNpYWwoKTsKKworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMg
cmVnaXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMg
cmVnaXN0ZXIgaXMgbm90CisgICAgLy8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxp
bmcgY29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNh
dXNlcworICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BS
MDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVk
TGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFs
aWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVk
IGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYs
IGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdl
bmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRl
OworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJy
aWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEFpckNDYWxsU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0NvZGU6
OkNvZGUoKQoreworfQorCitDb2RlOjp+Q29kZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6
OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7
CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBw
ZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0YWNrU2xv
dCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtp
bmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tT
bG90PiBzbG90KG5ldyBTdGFja1Nsb3QoYnl0ZVNpemUsIG1fc3RhY2tTbG90cy5zaXplKCksIGtp
bmQsIHZhbHVlKSk7CisgICAgU3RhY2tTbG90KiByZXN1bHQgPSBzbG90LmdldCgpOworICAgIG1f
c3RhY2tTbG90cy5hcHBlbmQoV1RGOjptb3ZlKHNsb3QpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitTcGVjaWFsKiBDb2RlOjphZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBz
cGVjaWFsKQoreworICAgIFNwZWNpYWwqIHJlc3VsdCA9IHNwZWNpYWwuZ2V0KCk7CisgICAgbV9z
cGVjaWFscy5hcHBlbmQoV1RGOjptb3ZlKHNwZWNpYWwpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3BlY2lhbCgpCit7CisgICAgaWYgKCFtX2ND
YWxsU3BlY2lhbCkgeworICAgICAgICBtX2NDYWxsU3BlY2lhbCA9IHN0YXRpY19jYXN0PENDYWxs
U3BlY2lhbCo+KAorICAgICAgICAgICAgYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPENDYWxs
U3BlY2lhbD4oKSkpOworICAgIH0KKworICAgIHJldHVybiBtX2NDYWxsU3BlY2lhbDsKK30KKwor
dm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmls
aXR5KG1fYmxvY2tzKTsKK30KKwordm9pZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQu
cHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgewor
ICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxuIik7CisgICAgICAgIGZvciAoU3RhY2tT
bG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwg
ZGVlcER1bXAoc2xvdCksICJcbiIpOworICAgIH0KKyAgICBpZiAoc3BlY2lhbHMoKS5zaXplKCkp
IHsKKyAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsczpcbiIpOworICAgICAgICBmb3IgKFNwZWNp
YWwqIHNwZWNpYWwgOiBzcGVjaWFscygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwg
ZGVlcER1bXAoc3BlY2lhbCksICJcbiIpOworICAgIH0KKyAgICBvdXQucHJpbnQoIkZyYW1lIHNp
emU6ICIsIG1fZnJhbWVTaXplLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNhbGwgYXJnIGFyZWEg
c2l6ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIpOworICAgIG91dC5wcmludCgiQ2FsbGVl
IHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOworfQorCit1bnNpZ25lZCBD
b2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHdo
aWxlIChpbmRleCA8IHNpemUoKSAmJiAhYXQoaW5kZXgpKQorICAgICAgICBpbmRleCsrOworICAg
IHJldHVybiBpbmRleDsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZE5leHRCbG9ja0luZGV4KHVu
c2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBmaW5kRmlyc3RCbG9ja0luZGV4KGlu
ZGV4ICsgMSk7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmZpbmROZXh0QmxvY2soQmFzaWNCbG9j
ayogYmxvY2spIGNvbnN0Cit7CisgICAgcmV0dXJuIGF0KGZpbmROZXh0QmxvY2tJbmRleChibG9j
ay0+aW5kZXgoKSkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNvZGVfaAorI2RlZmlu
ZSBBaXJDb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5o
IgorI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCisjaW5jbHVkZSAiU3RhY2tBbGln
bm1lbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2Nl
ZHVyZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENDYWxsU3BlY2lhbDsKKworLy8gVGhp
cyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVp
cmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0ZWQgbWFjaGluZSBj
b2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUgY29k
ZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBDb2RlIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFk
ZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIFN0YWNrU2xvdCogYWRkU3Rh
Y2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSog
PSBudWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNw
ZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8gbWFrZSBh
IEMgY2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxsU3BlY2lhbCgpOworCisgICAgVG1wIG5l
d1RtcChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAg
ICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpncFRtcEZvckluZGV4
KG1fbnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1
cm4gVG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBzKyspOworICAgICAgICB9CisgICAgfQor
CisgICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3
aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4g
bV9udW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJldHVybiBt
X251bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNhbGxBcmdBcmVh
U2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9CisKKyAgICAvLyBZb3Ug
Y2FuIGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHRvIGZvcmNlIGEgbWluaW11bSBj
YWxsIGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKHVuc2ln
bmVkIHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSA9IHN0ZDo6bWF4KAor
ICAgICAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwg
c2l6ZSkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdCB7IHJldHVy
biBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8gT25seSBwaGFzZXMgdGhhdCBkbyBzdGFjayBhbGxv
Y2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBDdXJyZW50bHksIG9ubHkKKyAgICAvLyBB
aXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRoaXMuCisgICAgdm9pZCBzZXRGcmFtZVNpemUodW5z
aWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAgICAgICAgbV9mcmFtZVNpemUgPSBmcmFtZVNpemU7
CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNhdmVSZWdpc3RlcnMo
KSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKworICAgIC8vIFJlY29tcHV0ZXMg
cHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVucmVhY2hhYmxlIGJsb2Nrcy4KKyAgICB2b2lkIHJl
c2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0K
KyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
a3NbaW5kZXhdLmdldCgpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAvLyBGaW5kcyB0aGUgc21h
bGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+PSBp
bmRleC4KKyAgICB1bnNpZ25lZCBmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBj
b25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0KGlu
ZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID4gaW5kZXguCisgICAgdW5zaWduZWQgZmluZE5leHRC
bG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIEJhc2ljQmxvY2sqIGZpbmRO
ZXh0QmxvY2soQmFzaWNCbG9jayopIGNvbnN0OworCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX2NvZGUobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvcihjb25zdCBDb2RlJiBjb2RlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAg
ICAgIDogbV9jb2RlKCZjb2RlKQorICAgICAgICAgICAgLCBtX2luZGV4KG1fY29kZS0+ZmluZEZp
cnN0QmxvY2tJbmRleChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJh
c2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2Nv
ZGUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9y
KysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gbV9jb2RlLT5maW5kRmlyc3RC
bG9ja0luZGV4KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5k
ZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUqIG1f
Y29kZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAg
Y2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3RhY2tT
bG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAgIDogbV9jb2RlKGNv
ZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAgICAgICBTdGFja1Ns
b3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3Rz
W2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yW10odW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJh
dG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAg
ICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4
KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9y
KGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkK
KyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
aW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0
aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAg
ICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
KnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2Rl
JiBtX2NvZGU7CisgICAgfTsKKworICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHN0YWNrU2xvdHMo
KSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKKyAg
ICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3BlY2lh
bHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29kZShjb2Rl
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6ZSgpOyB9CisgICAgICAgIFNwZWNpYWwqIGF0
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFsc1tpbmRleF0u
Z2V0KCk7IH0KKyAgICAgICAgU3BlY2lhbCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBt
X2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3Bl
Y2lhbHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNw
ZWNpYWwqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
X2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVy
Lm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICBjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24qIG1fY29sbGVjdGlv
bjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAg
ICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUo
KSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAgICB9
OworCisgICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1cm4gU3Bl
Y2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8c3Rk
Ojp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIENDYWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNp
YWwgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07CisgICAgdW5z
aWduZWQgbV9udW1GUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9mcmFtZVNpemUgeyAwIH07
CisgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUgeyAwIH07CisgICAgUmVnaXN0ZXJBdE9m
ZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFp
ckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50
ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBBaXJGcmVxdWVudGVkQmxvY2tfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Js
b2NrPiBGcmVxdWVudGVkQmxvY2s7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJGcmVxdWVudGVkQmxv
Y2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpckFsbG9jYXRlU3RhY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
R2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgor
I2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgi
CisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVk
ZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKwordm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIGpp
dCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShjb2Rl
LCAiaW5pdGlhbCIpOworCisgICAgaWYgKHNob3VsZER1bXBJUigpKSB7CisgICAgICAgIGRhdGFM
b2coIkluaXRpYWwgYWlyOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisg
ICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9wdGltaXphdGlvbnMgYW5kIHRyYW5zZm9y
bWF0aW9ucy4KKyAgICAvLyBGSVhNRTogQWRkIEFpciBvcHRpbWl6YXRpb25zLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTYKKworICAgIC8vIFRo
aXMgaXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBhIHJlYWwgcmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGVu
LCB3ZSBjb3VsZCB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkKKyAgICAvLyBpbiBwbGFjZSBvZiB0aGUg
cmVnaXN0ZXIgYWxsb2NhdG9yIG9ubHkgZm9yIHRlc3RpbmcuCisgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTcKKyAgICBzcGlsbEV2ZXJ5
dGhpbmcoY29kZSk7CisKKyAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBh
bmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28K
KyAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdy
ZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKKwor
ICAgIC8vIFRoaXMgdHVybnMgYWxsIFN0YWNrIGFuZCBDYWxsQXJnIEFyZ3MgaW50byBBZGRyIGFy
Z3MgdGhhdCB1c2UgdGhlIGZyYW1lIHBvaW50ZXIuIEl0IGRvZXMKKyAgICAvLyB0aGlzIGJ5IGZp
cnN0LWZpdCBhbGxvY2F0aW5nIHN0YWNrIHNsb3RzLiBJdCBzaG91bGQgYmUgcHJldHR5IGRhcm4g
Y2xvc2UgdG8gb3B0aW1hbCwgc28gd2UKKyAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBh
Ym91dCB0aGlzIHZlcnkgbXVjaC4KKyAgICBhbGxvY2F0ZVN0YWNrKGNvZGUpOworCisgICAgLy8g
RklYTUU6IFdlIHNob3VsZCByZWFsbHkgaGF2ZSBhIGNvZGUgbGF5b3V0IG9wdGltaXphdGlvbiBo
ZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0
NzgKKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgbGF0ZSBsaXZlbmVzcyBhbmFseXNpcyBvdmVy
IHJlZ2lzdGVycyB0byBmaWxsIGluIHRoZQorICAgIC8vIFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdp
c3RlcnMoKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNTExCisKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShj
b2RlLCAiZmluYWwiKTsKKworICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRh
TG9nKCJBaXIgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsK
KyAgICB9CisKKyAgICAvLyBBbmQgbm93LCB3ZSBnZW5lcmF0ZSBjb2RlLgorICAgIGppdC5lbWl0
RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVn
aXN0ZXIpOworCisgICAgR2VuZXJhdGlvbkNvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmNv
ZGUgPSAmY29kZTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6OkxhYmVs
PiBibG9ja0xhYmVscyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0Nh
bGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CisKKyAgICBhdXRv
IGxpbmsgPSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiB0YXJnZXQp
IHsKKyAgICAgICAgaWYgKGJsb2NrTGFiZWxzW3RhcmdldF0uaXNTZXQoKSkgeworICAgICAgICAg
ICAganVtcC5saW5rVG8oYmxvY2tMYWJlbHNbdGFyZ2V0XSwgJmppdCk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBibG9ja0p1bXBzW3RhcmdldF0uYXBwZW5kKGp1
bXApOworICAgIH07CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAg
ICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQpOworICAgICAgICBBU1NFUlQoYmxvY2st
PnNpemUoKSA+PSAxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5z
aXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0g
YmxvY2stPmF0KGkpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICBBU1NFUlRf
VU5VU0VEKGp1bXAsICFqdW1wLmlzU2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJs
b2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNz
b3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IFJldCkgeworICAg
ICAgICAgICAgLy8gV2UgY3VycmVudGx5IGRvbid0IHJlcHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1
ZS9lcGlsb2d1ZSBpbiBBaXIsIHNvIHdlIG5lZWQgdG8KKyAgICAgICAgICAgIC8vIGhhdmUgdGhp
cyBvdmVycmlkZS4KKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAg
ICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAg
ICAgICAgCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmxhc3QoKS5n
ZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2sp
CisgICAgICAgICAgICBqdW1wID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAg
ICBzd2l0Y2ggKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgY2FzZSAwOgorICAg
ICAgICAgICAgQVNTRVJUKCFqdW1wLmlzU2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgMToKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2Nr
KDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBs
aW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAgICBpZiAoYmxv
Y2stPnN1Y2Nlc3NvckJsb2NrKDEpICE9IGNvZGUuZmluZE5leHRCbG9jayhibG9jaykpCisgICAg
ICAgICAgICAgICAgbGluayhqaXQuanVtcCgpLCBibG9jay0+c3VjY2Vzc29yQmxvY2soMSkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBmb3IgKGF1dG8mIGxhdGVQYXRoIDogY29udGV4dC5sYXRlUGF0aHMpCisgICAg
ICAgIGxhdGVQYXRoLT5ydW4oaml0LCBjb250ZXh0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gKKyNkZWZpbmUgQWlyR2VuZXJhdGVfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsK
KworbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRo
aXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlv
biBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQorLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBh
bmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncywgYW5kIHRoZW4gZ2VuZXJhdGVzIHRoZSBjb2Rl
IHVzaW5nIHRoZSBnaXZlbgorLy8gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhp
cyBtYXkgY2FsbCBjYWxsYmFja3MgaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMKKy8vIGdl
bmVyYXRpbmcuCit2b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpckdlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJHZW5lcmF0ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKy8vIFRoaXMgaXMgZ2Vu
ZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisjaW5jbHVkZSAiQWlyT3Bjb2RlR2VuZXJh
dGVkLmgiCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAor
I2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQgeworICAgIHR5
cGVkZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250
ZXh0Jik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRo
OworCisgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKKyAgICBDb2RlKiBj
b2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0
aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMo
Q29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImhhbmRsZUNh
bGxlZVNhdmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1c2VkQ2FsbGVlU2F2ZXM7CisKKyAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3Qg
OiAqYmxvY2spIHsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAg
ICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdCBmaXJzdCB3
ZSBqdXN0IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAgICAgICAgICAgICAgICAgICB1c2VkQ2Fs
bGVlU2F2ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRvIHJlYWxseSBnZXQgdGhlIGNhbGxlZSBz
YXZlcy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOworCisgICAgaWYgKCF1c2VkQ2FsbGVlU2F2ZXMubnVtYmVyT2ZTZXRSZWdp
c3RlcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkgPSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworCisgICAgc2l6ZV90
IGJ5dGVTaXplID0gMDsKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDog
Y29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpCisgICAgICAgIGJ5dGVTaXplID0gc3RkOjptYXgo
c3RhdGljX2Nhc3Q8c2l6ZV90PigtZW50cnkub2Zmc2V0KCkpLCBieXRlU2l6ZSk7CisKKyAgICBT
dGFja1Nsb3QqIHNhdmVzQXJlYSA9IGNvZGUuYWRkU3RhY2tTbG90KGJ5dGVTaXplLCBTdGFja1Ns
b3RLaW5kOjpMb2NrZWQpOworICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgc2luY2Ugd2UgY291
bGQgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVudCBzdGFjayBzbG90IHRvIHRoaXMKKyAg
ICAvLyBhcmVhLiBBbHNvLCBvdXIgcnVudGltZSBkb2VzIG5vdCByZXF1aXJlIHVzIHRvIHBpbiB0
aGUgc2F2ZXMgYXJlYS4gTWF5YmUgd2Ugc2hvdWxkbid0IHBpbiBpdD8KKyAgICBzYXZlc0FyZWEt
PnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOworCisgICAgYXV0byBhcmdGb3IgPSBbJl0gKGNv
bnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSAtPiBBcmcgeworICAgICAgICByZXR1cm4gQXJn
OjpzdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgpICsgYnl0ZVNpemUpOworICAgIH07CisK
KyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIAorICAgIC8vIEZpcnN0
IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9ndWUuCisgICAgZm9yIChjb25zdCBSZWdp
c3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAwLCBlbnRyeS5yZWcoKS5pc0dQ
UigpID8gTW92ZSA6IE1vdmVEb3VibGUsIGNvZGVbMF0tPmF0KDApLm9yaWdpbiwKKyAgICAgICAg
ICAgIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRyeSkpOworICAgIH0KKyAgICBpbnNlcnRp
b25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKworICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9yZSBjb2Rl
IGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAg
ICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgaWYgKGxhc3Qub3Bjb2Rl
ICE9IFJldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoY29uc3QgUmVn
aXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAg
ICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICBibG9jay0+c2l6
ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBsYXN0Lm9y
aWdpbiwKKyAgICAgICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnkucmVnKCkpKTsK
KyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxs
ZWVTYXZlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorI2RlZmluZSBBaXJIYW5kbGVDYWxsZWVTYXZl
c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgcGhhc2UgaWRlbnRp
ZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUg
dGhlbSBpbiB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFu
ZGF0b3J5IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtlIHRoaXMg
bW9yZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUKKy8vIHBv
d2VyZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5rIHdyYXBwaW5nOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4CisvLyBXZSBzaG91bGQgbWFrZSB0aGlz
IGludGVyYWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmKTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnNl
cnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Js
b2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kwordm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAg
ZXhlY3V0ZUluc2VydGlvbnMoYmxvY2stPm1faW5zdHMsIG1faW5zZXJ0aW9ucyk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25T
ZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
ZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2VydGlvblNl
dF9oCisjZGVmaW5lIEFpckluc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIENvZGU7CisKK3R5cGVkZWYgV1RG
OjpJbnNlcnRpb248SW5zdD4gSW5zZXJ0aW9uOworCitjbGFzcyBJbnNlcnRpb25TZXQgeworcHVi
bGljOgorICAgIEluc2VydGlvblNldChDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2Rl
KQorICAgIHsKKyAgICB9CisKKyAgICBDb2RlJiBjb2RlKCkgeyByZXR1cm4gbV9jb2RlOyB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kSW5zZXJ0aW9uKFQmJiBp
bnNlcnRpb24pCisgICAgeworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5kKHN0ZDo6Zm9yd2Fy
ZDxUPihpbnNlcnRpb24pKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0Pgor
ICAgIHZvaWQgaW5zZXJ0SW5zdChzaXplX3QgaW5kZXgsIEluc3QmJiBpbnN0KQorICAgIHsKKyAg
ICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJkPEluc3Q+
KGluc3QpKSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50
cykKKyAgICB7CisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIEluc3Qoc3RkOjpmb3J3YXJkPEFy
Z3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZShCYXNp
Y0Jsb2NrKik7CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxJbnNl
cnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnNlcnRp
b25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
ckluc3QuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisj
aW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAiLCBsaXN0RHVtcChhcmdzKSk7CisgICAg
aWYgKG9yaWdpbikgeworICAgICAgICBpZiAoYXJncy5zaXplKCkpCisgICAgICAgICAgICBvdXQu
cHJpbnQoIiwgIik7CisgICAgICAgIG91dC5wcmludCgqb3JpZ2luKTsKKyAgICB9Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVmaW5lIEFpckluc3RfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpck9wY29kZS5o
IgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3Mg
Q0NhbGxIZWxwZXJzOworY2xhc3MgUmVnaXN0ZXJTZXQ7CisKK25hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0
OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBB
cmdMaXN0OworCisgICAgSW5zdCgpCisgICAgICAgIDogb3JpZ2luKG51bGxwdHIpCisgICAgICAg
ICwgb3Bjb2RlKE5vcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEluc3QoT3Bjb2RlIG9wY29k
ZSwgVmFsdWUqIG9yaWdpbikKKyAgICAgICAgOiBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9w
Y29kZShvcGNvZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBBcmcg
YXJnLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3N7IGFyZywgYXJndW1l
bnRzLi4uIH0KKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNv
ZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdp
biwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoYXJndW1lbnRzKQor
ICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7
CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBBcmdMaXN0
JiYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoV1RGOjptb3ZlKGFyZ3VtZW50cykpCisgICAg
ICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAg
ICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJj
b25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAorICAgIC8v
IGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFy
b3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKKyAgICAvLyBwcm9iYWJseSBkb2luZyBp
dCB3cm9uZy4KKworICAgIC8vIFRoaXMgb25seSB3YWxrcyB0aG9zZSBUbXBzIHRoYXQgYXJlIGV4
cGxpY2l0bHkgbWVudGlvbmVkLCBhbmQgaXQgZG9lc24ndCB0ZWxsIHlvdSB0aGVpciByb2xlCisg
ICAgLy8gb3IgdHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZv
ciAoQXJnJiBhcmcgOiBhcmdzKQorICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0KGZ1bmN0
b3IpOworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCBFYWNoQXJnQ2FsbGJhY2soQXJnJiwgQXJn
OjpSb2xlLCBBcmc6OlR5cGUpOworICAgIAorICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdpdGgg
KGFyZywgcm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAg
ICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpOworCisgICAgLy8g
Q2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xlLCB0eXBlKS4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJnJiBh
cmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgIGFy
Zy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIGZ1bmN0b3IpOworICAgICAgICAgICAgfSk7CisgICAg
fQorCisgICAgLy8gVGhpbmcgY2FuIGJlIGVpdGhlciBBcmcgb3IgVG1wLgorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlzIGluc3Ry
dWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9ja3Mgc29tZSBleHRyYSBmdW5jdGlvbmFs
aXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0OworCisgICAgLy8gUmVwb3J0cyBhbnkg
YWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRo
YXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25seSB3b3Jr
cyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBl
eHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVzZSB0aGlzIHRvIHJlcG9ydCB3aGljaCBy
ZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBiZWZvcmUgY29kZWdl
bi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMo
KSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgdm9pZCByZXBv
cnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7CisKKyAgICAvLyBJcyB0aGlzIGlu
c3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9ybXMgcmlnaHQgbm93PyBUaGlzIGZ1bmN0
aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAg
ICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBBc3N1bWluZyB0aGlzIGluc3RydWN0aW9u
IGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdpbGwgaXQgc3RpbGwgYmUgaW4gb25lIG9m
IHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1dCBhbiBBZGRyIHJlZmVyZW5jaW5nIHRo
ZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFyZywgb2YgY291cnNlKSBpbiB0aGUKKyAg
ICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBi
eSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNwaWxsaW5nOworICAgIC8vIGlmIGl0IGZp
bmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYgaXQgY2FuIHJlcGxhY2UgdGhlIEFyZzo6
VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAgIC8vIGZpbmRzIGEgbm9uLVRtcCBBcmcs
IHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNoVG1wIHRvIGRvIGEgcmVwbGFjZW1lbnQg
dGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVk
IGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBhZG1pdHNTdGFjayh1bnNpZ25lZCBh
cmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rp
b24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIgYmFja2VuZC4gSWYgdGhpcyBpcyB0aGUK
KyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUganVtcCB0aGF0IG5lZWRzIHRvIGJlIGxp
bmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRoZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJl
aW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBvcGNv
ZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShDQ2FsbEhl
bHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFyZ3M7CisgICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhl
IEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLgorICAgIE9wY29kZSBvcGNvZGU7
Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gKKyNkZWZpbmUgQWlySW5zdElubGluZXNf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRl
ICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJC
M1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxUbXA+IHsKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwg
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaFRtcChm
dW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxBcmc+IHsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2goSW5z
dCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9y
RWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywg
dHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgSW5zdDo6Zm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JFYWNoKCp0aGlzLCBmdW5jdG9yKTsKK30K
KworaW5saW5lIGJvb2wgSW5zdDo6aGFzU3BlY2lhbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFy
Z3Muc2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7Cit9CisKK2lubGluZSBjb25zdCBSZWdp
c3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sKKyAgICBBU1NFUlQoaGFzU3Bl
Y2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVn
cygqdGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3RlcnMoY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgQVNTRVJUKGhhc1NwZWNpYWwo
KSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdpc3RlcnMoKnRoaXMsIHVz
ZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1NoaWZ0VmFsaWQoY29uc3QgSW5zdCYg
aW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgIHJldHVybiBpbnN0LmFy
Z3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KGluc3QpOworICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9ICAgCisKK2lubGluZSBib29sIGlz
THNoaWZ0MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1NoaWZ0VmFs
aWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0SW5saW5lc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVzc19oCisjZGVmaW5lIEFpckxpdmVuZXNz
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisj
aW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBZb3UgY2FuIGNv
bXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVyIEFyZydzLiBJZiB5b3UgY29tcHV0ZSBv
dmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNrIGxpdmVuZXNzIGFuZCB0bXAgbGl2ZW5l
c3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNzIExpdmVuZXNzIHsKK3B1YmxpYzoK
KyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsKKyAgICAgICAgbV9saXZlQXRIZWFkLnJl
c2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2ZUF0VGFpbC5yZXNpemUoY29kZS5zaXpl
KCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IHNlZW47CisKKyAgICAgICAgYm9v
bCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNoYW5nZWQpIHsKKyAgICAgICAgICAg
IGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJbmRleCA9
IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFzaWNCbG9j
ayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIExvY2FsQ2Fs
YyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNpemVfdCBp
bnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCisgICAgICAgICAgICAgICAg
ICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAgICAgICAg
ICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBp
ZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1fbGl2ZUF0SGVhZFtibG9ja10p
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBi
bG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZlQXRUYWls
W3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbENhbGMubGl2
ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5kKCkpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdID0gbG9jYWxDYWxjLnRha2VMaXZl
KCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBIYXNoU2V0
PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKworICAgIGNvbnN0IEhhc2hT
ZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107CisgICAgfQorCisgICAgLy8gVGhpcyBj
YWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJzZS4KKyAgICBjbGFzcyBMb2NhbENhbGMg
eworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxjKExpdmVuZXNzJiBsaXZlbmVzcywgQmFz
aWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1fbGl2ZShsaXZlbmVzcy5saXZlQXRUYWls
KGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgSGFzaFNldDxU
aGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xpdmU7IH0KKyAgICAgICAgSGFzaFNldDxU
aGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6bW92ZShtX2xpdmUpOyB9CisKKyAgICAg
ICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIEZp
cnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCisgICAg
ICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBl
KSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYo
cm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKGFyZyk7CisgICAg
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5leHQgaGFuZGxlIGNsb2JiZXJlZCBy
ZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5oYXNTcGVjaWFsKCkpIHsKKyAgICAgICAg
ICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2goCisgICAgICAgICAgICAg
ICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZl
LnJlbW92ZShUaGluZyhUbXAocmVnKSkpOworICAgICAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaW5hbGx5IGhh
bmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAgICAg
ICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkp
CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUuYWRkKGFyZyk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+
IG1fbGl2ZTsKKyAgICB9OworICAgIAorcHJpdmF0ZToKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2Nr
LCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ss
IEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdFRhaWw7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWly
TGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29k
ZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
T3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisj
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisj
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisj
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJV
VE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09O
VFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YK
KyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFN5bGxhYnVzOgorIworIyBS
b2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9PiB1c2Ugb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0
ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBv
ciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQgZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lz
dGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ugb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQor
IyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RiA9PiB1c2Ug
YW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjCisjIEFyZ3VtZW50IGtpbmRz
OgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJlZ2lzdGVyCisjIEltbSA9PiAzMi1iaXQgaW1tZWRp
YXRlIGludAorIyBJbW02NCA9PiBUcnVzdGVkSW1tNjQKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRl
bXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMg
QWJzID0+IEFic29sdXRlQWRkcmVzcworIworIyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5n
cyBhcyBrZXl3b3JkcywgYW5kIHVuZGVyc3RhbmRzIHRoYXQgdGhleSBmYWxsIGludG8gdHdvIGRp
c3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhpbmdzLiBTbywgYWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMg
YSBwYXJ0aWN1bGFyIGluZGVudGF0aW9uIHN0eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9y
CisjIGV2ZW4gbmV3bGluZXMgYXJlIG1lYW5pbmdmdWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4YW1w
bGUsIHlvdSBjb3VsZCB3cml0ZToKKyMKKyMgRm9vNDIgVTpHLCBVRDpGIEltbSwgVG1wIEFkZHIs
IFRtcAorIworIyBBbmQgdGhlIHBhcnNlciB3b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUgc2Ft
ZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBVRDpGCisjICAgICBJbW0sIFRtcAorIyAgICAgQWRkciwg
VG1wCisjCisjIEkuZS4gYSB0d28tZm9ybSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIgb3Ig
YW4gaW50IGltbWVkaWF0ZSBhbmQgdXNlcytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90
ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1
dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVh
ZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisKK05vcAorCitBZGQzMiBVOkcsIFVEOkcKKyAgICBU
bXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgVG1wCisgICAgQWRkciwgVG1wCisgICAg
VG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRtcCwgVG1wCisKK0Fu
ZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBUbXAsIEFkZHIK
KyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisgICAg
VG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAK
KyAgICBBZGRyLCBUbXAKKworIyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVyIHRoZSBmdWxs
IHJlZ2lzdGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0IGRlcGVuZGlu
ZyBvbgorIyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0IHRoaXMgaXMg
YSBnb29kIHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEKKyMgTW92ZTY0
IGluc3RydWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkgaGF2ZSB0aGlz
IG5vdGlvbiBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxseQorIyBtZWFucyBtb3ZlUHRyLgorTW92
ZSBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02NCwgVG1wCisg
ICAgQWRkciwgVG1wIGFzIGxvYWRQdHIgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1w
IiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBJbmRleCwgVG1w
IGFzIGxvYWRQdHIKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVQdHIKKyAgICBUbXAsIEluZGV4IGFz
IHN0b3JlUHRyCisKK01vdmUzMiBVOkcsIEQ6RworICAgIFRtcCwgVG1wIGFzIHplcm9FeHRlbmQz
MlRvUHRyCisgICAgQWRkciwgVG1wIGFzIGxvYWQzMgorICAgIEluZGV4LCBUbXAgYXMgbG9hZDMy
CisgICAgVG1wLCBBZGRyIGFzIHN0b3JlMzIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIKKwor
TW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWRE
b3VibGUKKyAgICBJbmRleCwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3Rv
cmVEb3VibGUKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlRG91YmxlCisKK01vdmU2NFRvRG91Ymxl
IFU6RywgRDpGCisgICAgVG1wLCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBU
bXAsIFRtcAorCitCcmFuY2hBZGQzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29u
ZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRk
cgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFu
Y2hNdWwzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAg
ICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5j
aAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXND
b25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRy
LCBUbXAKKworQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAK
KworSnVtcCAvYnJhbmNoCisKK1JldCAvdGVybWluYWwKKworQnJlYWtwb2ludCAvdGVybWluYWwK
KworIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBp
cyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisjIHdoaWNoIG11
c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VT
Y29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworUGhhc2VTY29wZTo6UGhh
c2VTY29wZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9jb2RlKGNvZGUp
CisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2Uo
KSkgeworICAgICAgICBkYXRhTG9nKCJBaXIgYmVmb3JlICIsIG5hbWUsICI6XG4iKTsKKyAgICAg
ICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhh
c2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3RyaW5nKGNvZGUpOworfQorCitQaGFz
ZVNjb3BlOjp+UGhhc2VTY29wZSgpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQ
aGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShtX2NvZGUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRh
dGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBo
YXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clBoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJQaGFz
ZVNjb3BlX2gKKyNkZWZpbmUgQWlyUGhhc2VTY29wZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIENvZGU7CisKK2NsYXNzIFBoYXNlU2NvcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFBoYXNlU2NvcGUpOworcHVibGljOgorICAgIFBoYXNlU2NvcGUoQ29kZSYsIGNvbnN0IGNo
YXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0aW9uCisK
K3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAg
ICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJQaGFzZVNj
b3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clJlZ2lzdGVyUHJpb3JpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9y
PEdQUlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBWZWN0b3I8R1BS
UmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6
Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1
bHQgPSBuZXcgVmVjdG9yPEdQUlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9
IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCk7CisgICAgICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3Rl
clNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3Rl
clNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVy
U2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAg
ICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyBy
ZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdDsKK30KKworY29uc3Qg
VmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBWZWN0
b3I8RlBSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAg
IHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAg
ICByZXN1bHQgPSBuZXcgVmVjdG9yPEZQUlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBj
YWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAg
ICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZnByKCkpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3Rv
cjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSB0eXBlKQoreworICAgIHN0YXRp
YyBWZWN0b3I8UmVnPiogcmVzdWx0W0FyZzo6bnVtVHlwZXNdOworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAg
ICBbXSB7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsK
KyAgICAgICAgICAgIGZvciAoR1BSUmVnIHJlZyA6IGdwcnNJblByaW9yaXR5T3JkZXIoKSkKKyAg
ICAgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0tPmFwcGVuZChSZWcocmVnKSk7CisgICAgICAg
ICAgICByZXN1bHRbQXJnOjpGUF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZv
ciAoRlBSUmVnIHJlZyA6IGZwcnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHRbQXJnOjpGUF0tPmFwcGVuZChSZWcocmVnKSk7CisgICAgICAgIH0pOworICAgIHJldHVy
biAqcmVzdWx0W3R5cGVdOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisjZGVmaW5lIEFpclJl
Z2lzdGVyUHJpb3JpdHlfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFy
Zy5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7
Citjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3JpdHlPcmRlcigpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYW5rPiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyOwordGVtcGxh
dGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEdQUkluZm8+IHsKKyAgICBjb25z
dCBWZWN0b3I8R1BSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZ3Byc0luUHJpb3Jp
dHlPcmRlcigpOyB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEZQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVy
KCkgeyByZXR1cm4gZnByc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCYW5rPgorY29uc3QgVmVjdG9yPHR5cGVuYW1lIEJhbms6OlJlZ2lzdGVyVHlwZT4mIHJl
Z3NJblByaW9yaXR5T3JkZXIoKQoreworICAgIHJldHVybiBSZWdpc3RlcnNJblByaW9yaXR5T3Jk
ZXI8QmFuaz46OmluUHJpb3JpdHlPcmRlcigpOworfQorCitjb25zdCBWZWN0b3I8UmVnPiYgcmVn
c0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyUmVnaXN0
ZXJQcmlvcml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IFNwZWNpYWw6OmR1bXBQ
cmVmaXggPSAiJiI7CisKK1NwZWNpYWw6OlNwZWNpYWwoKQorICAgIDogbV9pbmRleChVSU5UX01B
WCkKK3sKK30KKworU3BlY2lhbDo6flNwZWNpYWwoKQoreworfQorCitDU3RyaW5nIFNwZWNpYWw6
Om5hbWUoKSBjb25zdAoreworICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBkdW1wSW1w
bChvdXQpOworICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4
KTsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIGlmIChtX2luZGV4ICE9IFVJTlRfTUFYKQorICAg
ICAgICBvdXQucHJpbnQobV9pbmRleCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZGVlcER1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoKnRoaXMsICI6ICIpOworICAg
IGRlZXBEdW1wSW1wbChvdXQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
clNwZWNpYWxfaAorI2RlZmluZSBBaXJTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKKworY2xh
c3MgU3BlY2lhbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlY2lhbCk7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGR1bXBQcmVmaXg7CisgICAgCisgICAgU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflNwZWNp
YWwoKTsKKworICAgIENTdHJpbmcgbmFtZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGZv
ckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+
JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKEluc3QmKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgPSAwOworCisgICAg
Ly8gVGhpcyBnZXRzIGNhbGxlZCBvbiBmb3IgZWFjaCBJbnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNp
YWwuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCBh
IFNwZWNpYWwgZ2V0cyB1c2VkIGZyb20ganVzdCBvbmUgSW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQg
dGFpbGR1cCBsYXRlLiBTbywKKyAgICAvLyBpZiB5b3Ugd2FudCB0byBwYXNzIHRoaXMgaW5mb3Jt
YXRpb24gZG93biB0byBnZW5lcmF0ZSgpLCB0aGVuIHlvdSBoYXZlIHRvIGVpdGhlcjoKKyAgICAv
LworICAgIC8vIDEpIEdlbmVyYXRlIEFpciB0aGF0IHN0YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3Bl
Y2lhbCBwZXIgUGF0Y2ggSW5zdCwgYW5kIHRoZW4gbWVyZ2UKKyAgICAvLyAgICB1c2VkUmVnaXN0
ZXIgc2V0cy4gVGhpcyBpcyBwcm9iYWJseSBub3QgZ3JlYXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9y
IHRoZSBjb21tb24gY2FzZSB0aGF0CisgICAgLy8gICAgQWlyIGRpZG4ndCBkdXBsaWNhdGUgY29k
ZSBvciB0aGF0IHN1Y2ggZHVwbGljYXRpb24gZGlkbid0IGNhdXNlIGFueSBpbnRlcmVzdGluZyBj
aGFuZ2VzIHRvCisgICAgLy8gICAgcmVnaXN0ZXIgYXNzaWdubWVudC4KKyAgICAvLworICAgIC8v
IDIpIEhhdmUgdGhlIFNwZWNpYWwgbWFpbnRhaW4gYSBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNl
dD4uIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYW5hbHlzaXMKKyAgICAvLyAgICB0aGF0IGZlZWRz
IGludG8gdGhpcyBjYWxsIGlzIHBlcmZvcm1lZCBqdXN0IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24g
YW5kIHRoZXJlIGlzIG5vIHdheQorICAgIC8vICAgIGZvciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNv
bnRhaW4gdGhlIEluc3RzIHRvIGJlIHJlYWxsb2NhdGVkLiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgp
IHRvCisgICAgLy8gICAgY29uc3VsdCB0aGUgSGFzaE1hcC4KKyAgICAvLworICAgIC8vIDMpIEh5
YnJpZDogeW91IGNvdWxkIHVzZSAoMSkgYW5kIGZpcmUgdXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUg
bXVsdGlwbGUgY2FsbHMuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaXQncyBub3QgcG9zc2li
bGUgdG8gcmVseSBvbiByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgYmVpbmcgY2FsbGVkIGluIHRoZSBz
YW1lIG9yZGVyCisgICAgLy8gYXMgZ2VuZXJhdGUoKS4gSWYgd2UgY291bGQgcmVseSBvbiB0aGF0
LCB0aGVuIHdlIGNvdWxkIGp1c3QgaGF2ZSBlYWNoIFNwZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBt
YWludGFpbiBhIFZlY3RvciBvZiBSZWdpc3RlclNldCdzIGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2
ZWN0b3IgaW4gdGhlIHJpZ2h0IG9yZGVyIGluCisgICAgLy8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUg
b3JkZXJpbmcgZGlmZmVyZW5jZSBpcyB1bmxpa2VseSB0byBjaGFuZ2Ugc2luY2UgaXQgd291bGQg
aGFybSB0aGUKKyAgICAvLyBwZXJmb3JtYW5jZSBvZiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisg
ICAgLy8KKyAgICAvLyBDdXJyZW50bHksIHdlIGRvICgxKSBmb3IgQjMgc3RhY2ttYXBzLgorICAg
IHZpcnR1YWwgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNl
dCYpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJ
bnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7CisKKyAgICB2aXJ0
dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpID0gMDsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1w
bChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBs
KFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBD
b2RlOworCisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9
OworCitjbGFzcyBEZWVwU3BlY2lhbER1bXAgeworcHVibGljOgorICAgIERlZXBTcGVjaWFsRHVt
cChjb25zdCBTcGVjaWFsKiBzcGVjaWFsKQorICAgICAgICA6IG1fc3BlY2lhbChzcGVjaWFsKQor
ICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChtX3NwZWNpYWwpCisgICAgICAgICAgICBtX3NwZWNpYWwtPmRlZXBE
dW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7
CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFNwZWNpYWwqIG1fc3BlY2lhbDsKK307CisK
K2lubGluZSBEZWVwU3BlY2lhbER1bXAgZGVlcER1bXAoY29uc3QgU3BlY2lhbCogc3BlY2lhbCkK
K3sKKyAgICByZXR1cm4gRGVlcFNwZWNpYWxEdW1wKHNwZWNpYWwpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0
aGluZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2lu
Y2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBz
cGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
Y29kZSwgInNwaWxsRXZlcnl0aGluZyIpOworCisgICAgLy8gV2Ugd2FudCB0byBrbm93IHRoZSBz
ZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFzaWMgYmxvY2su
CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lz
dGVycyhjb2RlLnNpemUoKSk7CisgICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhjb2RlKTsKKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxUbXA+
OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgIHVzZWRSZWdp
c3RlcnNbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgpICsgMSk7CisKKyAgICAgICAgYXV0byBz
ZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBpbmRleCkgeworICAgICAgICAgICAgUmVn
aXN0ZXJTZXQmIHNldCA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luZGV4XTsKKyAgICAgICAgICAg
IGZvciAoVG1wIHRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
dG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHNldC5zZXQodG1wLnJlZygpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGJsb2Nr
LT5zaXplKCkpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBi
bG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVj
dXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAgICAgICAgIHNldFVzZWRSZWdpc3RlcnMo
aW5zdEluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sg
c2xvdCBmb3IgZWFjaCB0bXAuCisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNb
QXJnOjpudW1UeXBlc107CisgICAgZm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5k
ZXggPCBBcmc6Om51bVR5cGVzOyArK3R5cGVJbmRleCkgeworICAgICAgICBWZWN0b3I8U3RhY2tT
bG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxTdGFja1Nsb3RzW3R5cGVJbmRleF07CisgICAgICAgIEFy
Zzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QXJnOjpUeXBlPih0eXBlSW5kZXgpOworICAgICAg
ICBzdGFja1Nsb3RzLnJlc2l6ZShjb2RlLm51bVRtcHModHlwZSkpOworICAgICAgICBmb3IgKHVu
c2lnbmVkIHRtcEluZGV4ID0gY29kZS5udW1UbXBzKHR5cGUpOyB0bXBJbmRleC0tOykKKyAgICAg
ICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tT
bG90S2luZDo6QW5vbnltb3VzKTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9u
U2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAg
IGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsg
KytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRCZWZvcmUgPSB1c2Vk
UmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXhdOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNl
dEFmdGVyID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4ICsgMV07CisgICAgICAgICAg
ICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnN0LmZv
ckVhY2hUbXAoCisgICAgICAgICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgICAgICBT
dGFja1Nsb3QqIHN0YWNrU2xvdCA9IGFsbFN0YWNrU2xvdHNbdHlwZV1bdG1wLnRtcEluZGV4KCld
OworICAgICAgICAgICAgICAgICAgICBBcmcgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3QpOwor
CisgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZmlndXJlIG91dCBhIHJlZ2lzdGVyIHRv
IHVzZS4gSG93IHdlIGRvIHRoYXQgZGVwZW5kcyBvbiB0aGUgcm9sZS4KKyAgICAgICAgICAgICAg
ICAgICAgUmVnIGNob3NlblJlZzsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2U6CisgICAgICAgICAgICAgICAgICAg
ICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RGVmOgorICAgICAgICAgICAgICAgICAgICAgICAg
Zm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICghc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpVc2VEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAoY2hvc2Vu
UmVnKTsKKworICAgICAgICAgICAgICAgICAgICBPcGNvZGUgbW92ZSA9IHR5cGUgPT0gQXJnOjpH
UCA/IE1vdmUgOiBNb3ZlRG91YmxlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
VXNlKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmln
aW4sIGFyZywgdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc0RlZihyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAx
LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1
dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpclNwaWxsRXZlcnl0aGluZ19oCisjZGVmaW5lIEFpclNwaWxs
RXZlcnl0aGluZ19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaXMg
YSBwaGFzZSBmb3IgdGVzdGluZy4gSXQgYmVoYXZlcyBsaWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9y
IGluIHRoZSBzZW5zZSB0aGF0IGl0CisvLyBlbGltaW5hdGVzIHRlbXBvcmFyaWVzIGZyb20gdGhl
IHByb2dyYW0uIEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8v
IHRlbXBvcmFyaWVzLiBUaGUgcmVzdWx0aW5nIGNvZGUgaXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVm
ZmljaWVudC4gVGhpcyBwaGFzZSBpcyBncmVhdCBpZiB5b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUg
aXMgYSBidWcgaW4gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4gWW91IGNhbiBjb25maXJtIHRoaXMg
YnkgcnVubmluZyB0aGlzCisvLyBwaGFzZSBpbnN0ZWFkIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0
b3IuCisvLworLy8gTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hl
YXBlc3QgdGhpbmcgcG9zc2libGUsIGl0J3Mgbm90IGV2ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0
aWN1bGFybHkgZWZmaWNpZW50IHdheS4gU28sIGRvbid0IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNp
bmcgdGhpcyBwaGFzZSB0byByZWR1Y2UgY29tcGlsZXIKKy8vIGxhdGVuY3kuIElmIHlvdSB3YW50
ZWQgdG8gZG8gdGhhdCwgeW91IHNob3VsZCBjb21lIHVwIHdpdGggYSBjbGV2ZXIgYWxnb3JpdGht
IGluc3RlYWQgb2YgdXNpbmcKKy8vIHRoaXMgc2lsbHkgdGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVy
eXRoaW5nKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclNwaWxsRXZlcnl0aGluZ19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xv
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyU3RhY2tTbG90LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNT
dGFja1Nsb3RWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK3ZvaWQgU3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFs
dWUpCit7CisgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKKyAgICBpZiAobV92YWx1ZSkKKyAg
ICAgICAgbV92YWx1ZS0+bV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsKK30KKwordm9pZCBTdGFja1Ns
b3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNr
IiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAi
LCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCwgIiwga2luZCA9ICIsIG1fa2luZCk7
CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG91dC5wcmludCgiLCB2YWx1ZSA9ICIsICptX3Zh
bHVlKTsKK30KKworU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2ln
bmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAg
ICA6IG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgLCBtX2luZGV4KGluZGV4KQorICAgICwgbV9v
ZmZzZXRGcm9tRlAodmFsdWUgPyB2YWx1ZS0+b2Zmc2V0RnJvbUZQKCkgOiAwKQorICAgICwgbV9r
aW5kKGtpbmQpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQoreworICAgIEFTU0VSVChieXRlU2l6ZSk7
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xv
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tT
bG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0
YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3RhY2tTbG90X2gK
KyNkZWZpbmUgQWlyU3RhY2tTbG90X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90VmFsdWU7CisK
K25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFja1Nsb3QgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9Cisg
ICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgdW5z
aWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB1bnNpZ25lZCBh
bGlnbm1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkKKyAg
ICAgICAgICAgIHJldHVybiAxOworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAyKQorICAgICAg
ICAgICAgcmV0dXJuIDI7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDQpCisgICAgICAgICAg
ICByZXR1cm4gNDsKKyAgICAgICAgcmV0dXJuIDg7CisgICAgfQorCisgICAgU3RhY2tTbG90VmFs
dWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgLy8gWmVybyBtZWFu
cyB0aGF0IGl0J3Mgbm90IHlldCBhc3NpZ25lZC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAo
KSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gVGhpcyBzaG91bGQg
dXN1YWxseSBqdXN0IGJlIGNhbGxlZCBmcm9tIHBoYXNlcyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRp
b24uIEJ1dCB5b3UgY2FuCisgICAgLy8gdG90YWxseSBmb3JjZSBhIHN0YWNrIHNsb3QgdG8gbGFu
ZCBhdCBzb21lIG9mZnNldC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCk7CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisK
KyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Ns
b3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSopOworICAgIAorICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7
CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKKyAg
ICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBTdGFja1Nsb3RWYWx1ZSogbV92YWx1ZTsKK307
CisKK2NsYXNzIERlZXBTdGFja1Nsb3REdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3RhY2tTbG90
RHVtcChjb25zdCBTdGFja1Nsb3QqIHNsb3QpCisgICAgICAgIDogbV9zbG90KHNsb3QpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKG1fc2xvdCkKKyAgICAgICAgICAgIG1fc2xvdC0+ZGVlcER1bXAob3V0KTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgY29uc3QgU3RhY2tTbG90KiBtX3Nsb3Q7Cit9OworCitpbmxpbmUgRGVl
cFN0YWNrU2xvdER1bXAgZGVlcER1bXAoY29uc3QgU3RhY2tTbG90KiBzbG90KQoreworICAgIHJl
dHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclN0
YWNrU2xvdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWly
VG1wLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxub25lPiIp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzUmVnKCkpIHsKKyAgICAgICAg
b3V0LnByaW50KHJlZygpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0dQ
KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIldG1wIiwgZ3BUbXBJbmRleCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmludCgiJWZ0bXAiLCBmcFRtcEluZGV4KCkpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8u
aCIKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEFyZzsKKwor
Ly8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBhIHJlZ2lzdGVyLiBJdCBjYW4gYmUgdXNl
ZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4gSXQgY2FuIGFsc28KKy8vIGJlIHVzZWQgdG8g
cmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0ZXIgKGkuZS4gYSB0ZW1wb3JhcnkpLiBMaWtl
IG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQorLy8gZGVsaWJlcmF0ZWx5IHRlcnNlIG5hbWluZyBz
aW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoaXMgbmFtZSBhIGxvdC4KKworY2xhc3MgVG1wIHsK
K3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICB7CisgICAgfQor
CisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcpCisgICAgeworICAgICAgICBpZiAocmVnKSB7Cisg
ICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVu
Y29kZUdQUihyZWcuZ3ByKCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1f
dmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUbXAoY29uc3QgQXJnJik7CisK
KyAgICBzdGF0aWMgVG1wIGdwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAg
ICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUdQVG1wKGlu
ZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGZw
VG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gISFtX3ZhbHVlOyB9CisKKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNG
UCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAobV92YWx1ZSk7Cisg
ICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNF
bmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBi
b29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0dQUigpIHx8IGlzRlBS
KCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBS
ZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVybiBmcHIoKTsKKyAgICB9CisKKyAgICBib29sIGhh
c1RtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhaXNSZWcoKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFRtcChtX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAo
aXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKKyAgICAgICAgcmV0dXJu
IGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICEhKnRoaXM7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBv
dGhlci5tX3ZhbHVlOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUbXAmIG90
aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIFRtcChX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV92YWx1ZShzdGQ6Om51
bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzSGFz
aFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9
PSBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVk
IGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxpbnQ+Ojpo
YXNoKG1fdmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBlbmNv
ZGVHUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAxICsgaW5kZXg7Cisg
ICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiAtMSAtIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2Rl
R1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFj
cm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBl
bmNvZGVGUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUChmcHIg
LSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRp
YyBpbnQgZW5jb2RlR1BUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4g
ZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxICsgaW5kZXg7Cisg
ICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7
CisgICAgICAgIHJldHVybiBlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVy
KCkpIC0gMSAtIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA+IDA7CisgICAgfQorCisgICAg
c3RhdGljIGJvb2wgaXNFbmNvZGVkRlAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IHZhbHVlIDwgMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFIoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiB2YWx1ZSA8
PSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiB2YWx1ZSA+PSBlbmNvZGVGUFIoTWFjcm9Bc3NlbWJs
ZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2Rl
ZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1
ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNF
bmNvZGVkRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQ
KHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR1BS
UmVnIGRlY29kZUdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVk
R1BSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KAorICAgICAg
ICAgICAgKHZhbHVlIC0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkp
KSArIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRp
YyBGUFJSZWcgZGVjb2RlRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0Vu
Y29kZWRGUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4oCisg
ICAgICAgICAgICAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkg
LSB2YWx1ZSkgKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3Rlcigp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlR1BUbXAoaW50IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQVG1wKHZhbHVlKSk7CisgICAgICAgIHJl
dHVybiB2YWx1ZSAtIChlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSAr
IDEpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUp
CisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBUbXAodmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkg
LSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyAwOiBlbXB0eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTog
R1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4KKyAgICAvLyBuZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBG
UCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1ZTsKK307CisKK3N0cnVjdCBUbXBIYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUbXAmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsg
fQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFRtcCYgYSwgY29uc3QgVG1wJiBiKSB7IHJl
dHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpBaXI6OlRtcD4g
eworICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpUbXBIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8SlNDOjpCMzo6QWlyOjpUbXA+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6
OkFpcjo6VG1wPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEFpclRtcElubGluZXNfaAorI2RlZmluZSBBaXJUbXBJbmxpbmVzX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJUbXAu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitp
bmxpbmUgVG1wOjpUbXAoY29uc3QgQXJnJiBhcmcpCit7CisgICAgKnRoaXMgPSBhcmcudG1wKCk7
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAi
QWlySW5zdElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgor
ICAgIFZhbGlkYXRlcihDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBk
dW1wQmVmb3JlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fd2hlbih3aGVu
KQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNk
ZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRp
b24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorICAgIAorICAg
IHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90
czsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gdmFsaWRCbG9ja3M7CisgICAgICAgIEhh
c2hTZXQ8U3BlY2lhbCo+IHZhbGlkU3BlY2lhbHM7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fY29kZSkKKyAgICAgICAgICAgIHZhbGlkQmxvY2tzLmFkZChibG9jayk7Cisg
ICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAg
ICAgICAgIHZhbGlkU2xvdHMuYWRkKHNsb3QpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNp
YWwgOiBtX2NvZGUuc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNw
ZWNpYWwpOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2st
PnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxv
Y2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3Qu
YXJncykgeworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsaWRTbG90cy5jb250YWlucyhhcmcuc3RhY2tTbG90KCkpLCAoIkF0ICIsIGlu
c3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CisgICAgICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWxpZFNwZWNpYWxzLmNvbnRhaW5zKGFyZy5zcGVjaWFsKCkpLCAoIkF0
ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIFZBTElEQVRFKGluc3QuaXNWYWxpZEZvcm0oKSwgKCJBdCAiLCBpbnN0LCAiIGlu
ICIsICpibG9jaykpOworICAgICAgICAgICAgICAgIGlmIChpbnN0SW5kZXggPT0gYmxvY2stPnNp
emUoKSAtIDEpCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5v
cGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29k
ZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2Nr
cygpKQorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkQmxvY2tzLmNvbnRhaW5zKHN1Y2Nl
c3NvciksICgiSW4gIiwgKmJsb2NrKSk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNoYXIq
IGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNo
YXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAgICAg
Q1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nUHJp
bnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJBSVIgVkFMSURBVElPTiBGQUlM
VVJFXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGNvbmRpdGlvbiwgIiAoIiwg
ZmlsZW5hbWUsICI6IiwgbGluZU51bWJlciwgIilcbiIpOworICAgICAgICAgICAgb3V0LnByaW50
KCIgICAgIiwgbWVzc2FnZSwgIlxuIik7CisgICAgICAgICAgICBpZiAobV93aGVuKQorICAgICAg
ICAgICAgICAgIG91dC5wcmludCgiICAgIER1cmluZyAiLCBtX3doZW4sICJcbiIpOworICAgICAg
ICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKworICAg
ICAgICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgaWYgKG1fZHVtcEJlZm9yZSkg
eworICAgICAgICAgICAgZGF0YUxvZygiQmVmb3JlICIsIG1fd2hlbiwgIjpcbiIpOworICAgICAg
ICAgICAgZGF0YUxvZyhtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2co
IkF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgICAgICBkYXRhTG9nKG1fY29kZSk7CisKKyAg
ICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlv
bkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAg
ICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3Qg
Y2hhciogbV93aGVuOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKENvZGUmIGNvZGUsIGNvbnN0IGNo
YXIqIHdoZW4sIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlk
YXRlcihjb2RlLCB3aGVuLCBkdW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclZhbGlkYXRlX2gKKyNkZWZpbmUg
QWlyVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2b2lkIHZhbGlk
YXRlKENvZGUmLCBjb25zdCBjaGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVtcEJl
Zm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVmFsaWRhdGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJi
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2Vu
ZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQyIEBACisjIS91c3IvYmluL2Vu
diBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUg
InBhdGhuYW1lIgorCitjbGFzcyBPcGNvZGUKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnNwZWNp
YWwsIDpvdmVybG9hZHMKKyAgICBhdHRyX2FjY2Vzc29yIDpraW5kCisKKyAgICBkZWYgaW5pdGlh
bGl6ZShuYW1lLCBzcGVjaWFsKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNp
YWwgPSBzcGVjaWFsCisgICAgICAgIEBraW5kID0gOmluc3QKKyAgICAgICAgdW5sZXNzIHNwZWNp
YWwKKyAgICAgICAgICAgIEBvdmVybG9hZHMgPSBbXQorICAgICAgICBlbmQKKyAgICBlbmQKKwor
ICAgIGRlZiBtYXNtTmFtZQorICAgICAgICBuYW1lWzBdLmRvd25jYXNlICsgbmFtZVsxLi4tMV0K
KyAgICBlbmQKK2VuZAorCitjbGFzcyBBcmcKKyAgICBhdHRyX3JlYWRlciA6cm9sZSwgOnR5cGUK
KworICAgIGRlZiBpbml0aWFsaXplKHJvbGUsIHR5cGUpCisgICAgICAgIEByb2xlID0gcm9sZQor
ICAgICAgICBAdHlwZSA9IHR5cGUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPdmVybG9hZAorICAg
IGF0dHJfcmVhZGVyIDpzaWduYXR1cmUsIDpmb3JtcworCisgICAgZGVmIGluaXRpYWxpemUoc2ln
bmF0dXJlLCBmb3JtcykKKyAgICAgICAgQHNpZ25hdHVyZSA9IHNpZ25hdHVyZQorICAgICAgICBA
Zm9ybXMgPSBmb3JtcworICAgIGVuZAorZW5kCisKK2NsYXNzIEtpbmQKKyAgICBhdHRyX3JlYWRl
ciA6bmFtZQorICAgIGF0dHJfYWNjZXNzb3IgOnNwZWNpYWwKKworICAgIGRlZiBpbml0aWFsaXpl
KG5hbWUpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IGZhbHNlCisg
ICAgZW5kCisKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFN0cmlu
ZworICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
QG5hbWUgPT0gb3RoZXIubmFtZSBhbmQgQHNwZWNpYWwgPT0gb3RoZXIuc3BlY2lhbAorICAgICAg
ICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgICAgIGlm
IGtpbmQgPT0gIkFkZHIiCisgICAgICAgICAgICBbIkFkZHIiLCAiU3RhY2siLCAiQ2FsbEFyZyJd
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQK
KworICAgIGRlZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5k
CitlbmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKwor
ICAgIGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5k
cworICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmln
aW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVm
IGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZp
bGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAor
ICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVu
ZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZwor
ICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2lu
ID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBk
ZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBA
c3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5n
ID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikK
KyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisg
ICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAor
ICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5Pwor
ICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisg
ICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisg
ICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBm
aWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxp
bmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIK
KyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25v
cmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisg
ICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9d
KykvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUs
IGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAg
ICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXC9dLworICAgICAg
ICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVy
KSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAj
e09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVl
bmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+
LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikK
KyAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dGKHRva2Vu
KQorICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4p
CisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJl
bENvbmQpfChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlz
VUQodG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9r
ZW4gPT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVy
KHRva2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5
d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRh
LCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAg
ICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0Bp
ZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBl
bmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAg
ICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJy
b3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFp
c2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAg
ICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQor
ICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0g
c3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRp
ZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigi
RXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAg
ICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xl
CisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBl
Y3RlZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFk
dmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAg
ICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVk
IHR5cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAg
ICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVz
dWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKElt
bSwgSW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQpIikgdW5sZXNz
IGlzS2luZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5k
CisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisgICAgICAg
IGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisg
ICAgICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBjb25zdW1l
KCJzcGVjaWFsIikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZp
ZXIKKworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNp
YWwgb3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAgICByZXN1
bHRbb3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisK
KyAgICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAg
ICAgb3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIHBhcnNl
RXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNp
YWwKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IE9w
Y29kZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtv
cGNvZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAg
ICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgaWYgaXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAg
ICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAg
ICAgdHlwZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAg
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0
b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBp
ZiB0b2tlbiA9PSAiLyIKKyAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLyIpCisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgdG9rZW4uc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIHdoZW4g
ImJyYW5jaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOmJyYW5jaAor
ICAgICAgICAgICAgICAgICAgICB3aGVuICJ0ZXJtaW5hbCIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG9wY29kZS5raW5kID0gOnRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkJhZCAvIGRpcmVjdGl2ZSIpCisgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICBhZHZhbmNlCisgICAgICAg
ICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBpc0tpbmQodG9rZW4pCisgICAgICAg
ICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPSBbXQor
ICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAorICAgICAgICAgICAgICAgICAg
ICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPDwgS2luZC5u
ZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9
PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2FuIG9u
bHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5hbWUgPT0gIlRtcCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNwZWNpYWwgPSB0cnVlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5s
ZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwi
KQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiYXMi
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBjb25zdW1lSWRlbnRpZmll
cgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG92ZXJs
b2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAg
ICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIkltbTY0IgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnJvbGUgIT0gIlUiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBp
bW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1
cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVy
cG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoa2luZHMsIGFsdE5hbWUp
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgaXNLaW5kKHRva2VuKQorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAg
ICBpZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5s
ZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0u
bmV3KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBvcGNv
ZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICAg
ICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAgICBlbmQKK2VuZAorCiskZmls
ZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoJGZpbGVOYW1l
KSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UKKworZGVmIHdyaXRlSChmaWxl
bmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAg
fCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9w
Y29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAg
ICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAg
ICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxk
IG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5h
bWV9X2giCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8Cisg
ICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29k
ZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0
cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifTsiCisKKyAgICBvdXRw
LnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1PcGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlz
LnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIi
CisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJj
bGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7IgorICAgIG91dHAucHV0cyAifSAvLyBu
YW1lc3BhY2UgV1RGIgorfQorCisjIEZyb20gaGVyZSBvbiwgd2UgZG9uJ3QgdHJ5IHRvIGVtaXQg
cHJvcGVybHkgaW5kZW50ZWQgY29kZSwgc2luY2Ugd2UncmUgdXNpbmcgYSByZWN1cnNpdmUgcGF0
dGVybgorIyBtYXRjaGVyLgorCitkZWYgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNv
bHVtbkluZGV4LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgcmV0dXJuIGlm
IGZvcm1zLmxlbmd0aCA9PSAwCisKKyAgICBpZiBmaWx0ZXJbZm9ybXNdCisgICAgICAgIHJldHVy
bgorICAgIGVuZAorCisgICAgaWYgY29sdW1uSW5kZXggPj0gZm9ybXNbMF0ua2luZHMubGVuZ3Ro
CisgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMQorICAgICAgICBjYWxsYmFj
a1tmb3Jtc1swXV0KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisgICAgCisgICAgZ3JvdXBzID0g
e30KKyAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgfCBmb3JtIHwKKyAgICAgICAga2luZCA9IGZv
cm0ua2luZHNbY29sdW1uSW5kZXhdLm5hbWUKKyAgICAgICAgaWYgZ3JvdXBzW2tpbmRdCisgICAg
ICAgICAgICBncm91cHNba2luZF0gPDwgZm9ybQorICAgICAgICBlbHNlCisgICAgICAgICAgICBn
cm91cHNba2luZF0gPSBbZm9ybV0KKyAgICAgICAgZW5kCisgICAgfQorCisgICAgaWYgc3BlZWQg
PT0gOmZhc3QgYW5kIGdyb3Vwcy5sZW5ndGggPT0gMQorICAgICAgICBtYXRjaEZvcm1zKG91dHAs
IHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2Fs
bGJhY2spCisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgb3V0cC5wdXRzICJzd2l0Y2gg
KCN7Y29sdW1uR2V0dGVyW2NvbHVtbkluZGV4XX0pIHsiCisgICAgZ3JvdXBzLmVhY2hfcGFpciB7
CisgICAgICAgIHwga2V5LCB2YWx1ZSB8CisgICAgICAgIG91dHAucHV0cyAiI2lmIFVTRShKU1ZB
TFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgICAgICBLaW5kLmFyZ0tpbmRzKGtleSkuZWFj
aCB7CisgICAgICAgICAgICB8IGFyZ0tpbmQgfAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNl
IEFyZzo6I3thcmdLaW5kfToiCisgICAgICAgIH0KKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBz
cGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxi
YWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICIjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisgICAgfQorICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9
IgorZW5kCisKK2RlZiBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBv
dXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVl
cy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tv
cGNvZGUubmFtZX06IgorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgeWll
bGQgb3Bjb2RlLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dp
dGNoID0gKChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkgb3Igc3BlZWQgPT0gOnNhZmUpCisg
ICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+YXJncy5zaXplKCkpIHsiIGlm
IG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsK
KyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRj
aAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQK
KyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVs
dDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisgICAg
CitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG1hdGNo
SW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVy
bG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNv
ZGUsIG5pbCwgbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHBy
b2MgeworICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAgICAgICAgICIj
e2luc3R9LT5hcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgY2FsbGJhY2sgPSBw
cm9jIHsKKyAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgIHlpZWxkIG9w
Y29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hdGNoRm9y
bXMob3V0cCwgc3BlZWQsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwg
Y2FsbGJhY2spCisgICAgICAgIGVuZAorICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZVV0aWxz
IikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3QuaFwi
IgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJTcGVjaWFsLmhcIiIKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAg
CisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4g
dHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIFQ+IgorICAgIG91dHAu
cHV0cyAiaW5saW5lIFQqIG9wZ2VuSGlkZGVuUHRySWRlbnRpdHkoVCogcG9pbnRlcikgeyByZXR1
cm4gcG9pbnRlcjsgfSIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVl
KSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIK
KyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAi
fSB3aGlsZSAoZmFsc2UpIgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5zdDo6Zm9yRWFjaEFyZyhjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0
cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAg
ICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3Nb
MF0sIEFyZzo6VXNlLCBBcmc6OkdQKTsgLy8gVGhpcyBpcyBiYXNpY2FsbHkgYm9ndXMsIGJ1dCBp
dCB3b3JrcyBmIGFuYWx5c2VzIG1vZGVsIFNwZWNpYWwgYXMgYW4gaW1tZWRpYXRlLiIKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiYXJnc1swXS5zcGVjaWFsKCktPmZvckVhY2hBcmcoKnRoaXMsIHNj
b3BlZExhbWJkYTxFYWNoQXJnQ2FsbGJhY2s+KGZ1bmN0b3IpKTsiCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAg
ICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG5pbAorICAgICAg
ICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAgICAgICAgICAgICB3aGVuICJVIgorICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAgICAgICAgICAgICAgICB3aGVuICJEIgorICAg
ICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKKyAgICAgICAgICAgICAgICB3aGVuICJVRCIK
KyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VEZWYiCisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7aW5k
ZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJnLnR5cGV9UCk7IgorICAgICAgICAgICAgfQor
ICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+IgorICAgIG91dHAucHV0cyAiQUxXQVlTX0lO
TElORSBib29sIGlzVmFsaWRGb3JtKE9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIkFyZzo6S2luZCBraW5kc1tz
aXplb2YuLi4oQXJndW1lbnRzKV0gPSB7IGFyZ3VtZW50cy4uLiB9OyIKKyAgICBvdXRwLnB1dHMg
InN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAg
fCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAg
ICAgICBvdXRwLnB1dHMgInN3aXRjaCAoc2l6ZW9mLi4uKEFyZ3VtZW50cykpIHsiCisgICAgICAg
IHVubGVzcyBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNo
IHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiCisgICAgICAgICAgICAgICAg
Y29sdW1uR2V0dGVyID0gcHJvYyB7IHwgY29sdW1uSW5kZXggfCAib3BnZW5IaWRkZW5QdHJJZGVu
dGl0eShraW5kcylbI3tjb2x1bW5JbmRleH1dIiB9CisgICAgICAgICAgICAgICAgZmlsdGVyID0g
cHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAg
ICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0gKG5v
dCBmb3JtLmtpbmRzLmRldGVjdCB7IHwga2luZCB8IGtpbmQuc3BlY2lhbCB9KQorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTigje3NwZWNpYWx9KTsiCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJs
b2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAg
ICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9Cisg
ICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRw
LnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7ICIKKyAgICBvdXRwLnB1dHMg
In0iCisKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29sIGlzVGVybWluYWwoT3Bjb2RlIG9wY29k
ZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsi
CisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAg
IGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5hbCBvciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisg
ICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBlbmQK
KyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZh
dWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9Igor
ICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgeworICAgIHwg
b3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3RJbmxpbmVzLmhcIiIKKyAg
ICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMg
IiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAg
ICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAg
ICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAg
ICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAg
ICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Igor
ICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKKyAg
ICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsiCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVmFsaWRGb3JtKCkiCisgICAgb3V0cC5w
dXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6c2FmZSwgInRoaXMiKSB7
CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5z
cGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhcmdzLnNpemUoKSA8IDEpIgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1
cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5z
cGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5l
ZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJl
Lmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAg
ICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZQorICAgICAgICAgICAgICAg
IHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUKKyAgICAgICAgICAgICAgICBr
aW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0
aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICMg
V2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0byB2
YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAgICAgICAgICAjIGtpbmQgaW1wbGllcyBy
b2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBpcyB0aGUgdHlwZS4gQW5k
IHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gdmFsaWRhdGUgdGhlIHR5cGUgaWYg
d2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIlRtcCIKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tpbmRleH1dLnRtcCgpLmlz
I3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAo
IWlzI3tvcGNvZGUubmFtZX1WYWxpZCgqdGhpcykpIgorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91
dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91
dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1
dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAu
cHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVz
LnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNh
c2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJy
ZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1sw
XS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlzLCBhcmdJbmRleCkpOyIKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhlIGFyZ0luZGV4LgorICAgICAgICAgICAgb3V0
cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7IgorCisgICAgICAgICAgICBudW1BcmdzID0gb3Bj
b2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAg
ICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgIH0ubWF4Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFyZ3MudGltZXMgeworICAgICAgICAgICAgICAg
IHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4
fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxs
IG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBvciBkb24ndCwgYWRtaXQgYW4gYWRkcmVzcwor
ICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRleC4gV2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2
ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAgICAg
ICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggewor
ICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICAgICAgb3Zl
cmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0
ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdlIGVuZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3
YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkgdGhhdCBBZGRyZXNzIGlzIGluYWRtaXNzaWJs
ZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVsc2lmIG51
bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1
ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgZG8g
dGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2gg
PSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpCisKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAg
ICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAgICAgICAgICAgICAgICAgICAgICAjIEFnYWlu
LCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0IHdlIHdhbnQuCisgICAgICAgICAgICAgICAg
ICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
Zm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAjIERv
bid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0byBkZWZhdWx0LgorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9S
RVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5z
aWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3ZSB0ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQg
Y2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3JtLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29s
dW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5k
KCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9j
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtcyB8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3Jt
LmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVtaXQgbm8gY29kZSwgc2luY2Ugd2UgY2Fubm90
IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5m
b3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAor
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIGVu
ZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAi
fSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisg
ICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgSW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KSIKKyAgICBvdXRwLnB1dHMgInsi
CisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oaml0KTsiCisgICAgb3V0cC5wdXRzICJVTlVT
RURfUEFSQU0oY29udGV4dCk7IgorICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIHJl
c3VsdDsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpmYXN0LCAidGhpcyIpIHsK
KyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNw
ZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lh
bCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250ZXh0KSk7IgorICAgICAgICBlbHNlCisgICAg
ICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gZm9y
bS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9
IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpZiBvcGNvZGUu
a2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICAgICAgb3V0cC5wcmludCAicmVzdWx0ID0gIgor
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnByaW50ICJqaXQuI3ttZXRob2ROYW1l
fSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAg
ICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBpZiBpbmRleCAhPSAwCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgIiwgIgorICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1lCisgICAgICAgICAgICAgICAgd2hlbiAiVG1w
IgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUg
PT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZnByKCkiCisgICAgICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIkltbSIKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIKKyAgICAgICAgICAgICAg
ICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNUcnVzdGVkSW1tNjQoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJBZGRyIgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIK
KyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVu
ICJSZWxDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25k
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3Vs
dENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRV
Uk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIlJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAicmV0dXJuIHJlc3VsdDsiCisg
ICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAxOTE1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpldHRpc29uKCk7ICAg
IAotICAgIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwogICAgIAogICAgIC8vIEZJ
WE1FOiBHZXQgcmlkIG9mIHRoaXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMzY3NwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCShyZXZpc2lv
biAxOTE1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNyArMTA1LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4ICE9IGludmFsaWQoKTsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gaXNTZXQoKTsgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gZGVsZXRlZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAor
ICAgIGNsYXNzIEFsbFJlZ3NJdGVyYWJsZSB7CisgICAgcHVibGljOgorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKSB7IH0K
KworICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3IoUmVnIHJlZykKKyAgICAgICAgICAgICAg
ICA6IG1fcmVnSW5kZXgocmVnLmluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBSZWc6OmZyb21J
bmRleChtX3JlZ0luZGV4KTsgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9yZWdJbmRleCA9IFJlZzo6ZnJvbUlu
ZGV4KG1fcmVnSW5kZXgpLm5leHQoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9yZWdJbmRleCA9PSBvdGhlci5tX3JlZ0luZGV4OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdW5zaWduZWQg
bV9yZWdJbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9CisgICAgfTsKKworICAgIHN0YXRp
YyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgeyByZXR1cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwog
cHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZz
ZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaQogICAgIGlmIChvZmZz
ZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkKICAgICAgICAgb2Zmc2V0ID0gLShzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0ZXJzKSAqIHNpemVvZih2b2lkKikpOwog
Ci0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7cmVn
ID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9
IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmIChyZWdpc3RlclNl
dC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQocmVnLCBv
ZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2Yodm9pZCopOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAkocmV2
aXNpb24gMTkxNTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zm
c2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC02Niw2ICs2Niw5IEBAIHB1YmxpYzoKICAgICBS
ZWdpc3RlckF0T2Zmc2V0KiBmaW5kKFJlZykgY29uc3Q7CiAgICAgdW5zaWduZWQgaW5kZXhPZihS
ZWcpIGNvbnN0OyAvLyBSZXR1cm5zIFVJTlRfTUFYIGlmIG5vdCBmb3VuZC4KIAorICAgIFZlY3Rv
cjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBtX3JlZ2lzdGVycy5iZWdpbigpOyB9CisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVycy5lbmQoKTsgfQor
CiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0PiBtX3JlZ2lzdGVyczsKIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAx
OTE1MzkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTMgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9y
ID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJu
IG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAg
ICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0cygpKQorICAgICAgICAgICAg
ZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAg
ICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJbmRleDogU291cmNlL1dURi9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5
MTUzOSkKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MTkgQEAKKzIwMTUtMTAtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBDcmVhdGUgYSBzdXBlciByb3VnaCBwcm90b3R5cGUgb2YgQjMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDI4MAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2o6CisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6cmFu
Z2VzT3ZlcmxhcCk6IE5pY2UgdXRpbGl0eSBmb3IgY2hlY2tpbmcgaWYgcmFuZ2VzIG92ZXJsYXAu
CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBhIEVOQUJMRShCM19KSVQpIGZlYXR1cmUg
ZmxhZy4KKyAgICAgICAgKiB3dGYvU2NvcGVkTGFtYmRhLmg6IEFkZGVkLiBUaGlzIGFsbG93cyB1
cyB0byBkbyB6ZXJvLWFsbG9jYXRpb24sIHplcm8tY29weSBleHRlcm4gbGFtYmRhcy4KKyAgICAg
ICAgKFdURjo6c2NvcGVkTGFtYmRhKToKKyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5oOgorICAg
ICAgICAoV1RGOjpjcmVhdGVTaGFyZWRUYXNrKToKKwogMjAxNS0xMC0yMSAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZhY3RvciBvdXQgdGhlIGdyYXBoIG5vZGUg
d29ya2xpc3RzIGZyb20gREZHIGludG8gV1RGCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9XVEYvV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAK
IAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIg
LyogV29yZExvY2suaCAqLzsgfTsKIAkJMEZFQjNEQ0YxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJl
ZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi87IH07CiAJCTBGRUIzREQx
MUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0REMDFCQjczNjZCMDA5RDdB
QUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICovOyB9OworCQkwRkVDODRCMTFCREFDRDM5
MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRh
LmggKi87IH07CiAJCTBGRUM4NEFGMUJEODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi87IH07CiAJCTBGRUQ2
N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlu
eVB0clNldC5oICovOyB9OwogCQkwRkY4NjA5NTFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNv
bXBhcmlzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovOyB9OwpA
QCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9j
ay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JkTG9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVk
VGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQ
YXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBU
aW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdG
IC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFBvaW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzAs
NiArODcyLDcgQEAKIAkJCQkxNDY5NDE5NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWly
LmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNw
cCAqLywKIAkJCQkxNDY5NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1t
ICovLAorCQkJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLywK
IAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0MTIzRkYgLyogU2VnbWVudGVkVmVjdG9yLmggKi8sCiAJ
CQkJQThBNDczMDcxNTFBODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oICovLAog
CQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQxMjNGRiAvKiBTSEExLmNwcCAqLywKQEAgLTEyNDQsNiAr
MTI0Nyw3IEBACiAJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZp
ZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQx
MjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZp
Yy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQ
dHJTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTkx
NTM5KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00
MTksNiArNDE5LDE2IEBAIGlubGluZSBUIGxlZnRTaGlmdFdpdGhTYXR1cmF0aW9uKFQgdmFsdWUK
ICAgICByZXR1cm4gcmVzdWx0OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJv
b2wgcmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQgbGVmdE1heCwgVCByaWdodE1pbiwgVCByaWdo
dE1heCkKK3sKKyAgICBpZiAobGVmdE1pbiA8PSByaWdodE1pbiAmJiBsZWZ0TWF4ID49IHJpZ2h0
TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocmlnaHRNaW4gPD0gbGVmdE1pbiAm
JiByaWdodE1heCA+PSBsZWZ0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gI2lmbmRlZiBXVEZf
TWF0aEV4dHJhc19oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJj
ZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3NiwxMiArNzc2LDIwIEBA
CiAjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJVCAxCiAjZW5kaWYKIAorLyogVGhlIEIzIGNv
bXBpbGVyIGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNrZW5kIHRoYXQgaXMgc3RpbGwgaW4gZGV2ZWxv
cG1lbnQuIFdlIHdpbGwga2VlcCBpdCBidWlsZGluZworICAgb24gRGFyd2luL3g4Ni02NCBmb3Ig
bm93LCB0aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2VwdCBmb3IgdGVzdHMuICovCisjaWYgT1MoREFS
V0lOKSAmJiBDUFUoWDg2XzY0KQorI2RlZmluZSBFTkFCTEVfQjNfSklUIDEKKyNlbmRpZgorCiAv
KiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFpbGFibGUsIHRoZW4gZGlzYWJsZSB1cHBl
ciB0aWVycyBhcyB3ZWxsOiAqLwogI2lmICFFTkFCTEUoSklUKQotI3VuZGVmIEVOQUJMRV9ERkdf
SklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVkZWZpbmUgaXQuICovCi0jdW5kZWYg
RU5BQkxFX0ZUTF9KSVQgICAgICAvKiBVbmRlZiBzbyB0aGF0IHdlIGNhbiByZWRlZmluZSBpdC4g
Ki8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI3VuZGVmIEVOQUJMRV9GVExfSklUCisjdW5kZWYg
RU5BQkxFX0IzX0pJVAogI2RlZmluZSBFTkFCTEVfREZHX0pJVCAwCiAjZGVmaW5lIEVOQUJMRV9G
VExfSklUIDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJVCAwCiAjZW5kaWYKIAogLyogQ291bnRzIHVz
ZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxpbmcgY291bnRlcnMuIEJlIHN1cmUgdG8g
YWxzbwpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RG
L3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVk
TGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKworbmFtZXNwYWNlIFdURiB7CisKKy8v
IFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRseSBwYXNzIGxhbWJkYXMgd2l0
aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKKy8vIHRlbXBsYXRlIHNwZWNpYWxp
emF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxkIGJlIGRlY2xhcmVkIGFzOgor
Ly8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGludCwgU3R1ZmYm
KT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKKy8vCisvLyB2b2lkIGZvbyhzY29w
ZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAoaW50IHgsIFN0dWZmJiB5KSAt
PiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24g
Zm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1iZGEgaXMgb25seSB2YWxpZCB3
aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVuY2UgdGhlIG5hbWUgU2NvcGVkTGFt
YmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNjb3BlZExhbWJk
YTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlw
ZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsK
K3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwpKHZvaWQqIGFyZywg
QXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQqIGFyZyA9IG51bGxwdHIpCisgICAg
ICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmcoYXJnKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVu
dHMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsKG1fYXJnLCBzdGQ6OmZvcndh
cmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCitwcml2YXRlOgorICAg
IFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKTsKKyAg
ICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlw
ZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVu
YW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0
b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMu
Li4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRU
eXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNzZWRGdW5jdG9y
PgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2VkRnVuY3RvciYmIGZ1bmN0b3IpCisgICAg
ICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPihpbXBsRnVu
Y3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9yKHN0ZDo6Zm9yd2FyZDxQYXNzZWRGdW5j
dG9yPihmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBSZXN1
bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwgQXJndW1lbnRUeXBlcyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY29wZWRMYW1iZGFG
dW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8
QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgRnVuY3RvciBtX2Z1
bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1
bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVk
TGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBTY29wZWRMYW1iZGFGdW5j
dG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3Ip
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U2NvcGVkTGFtYmRhOwor
dXNpbmcgV1RGOjpzY29wZWRMYW1iZGE7CisKKyNlbmRpZiAvLyBTY29wZWRMYW1iZGFfaAorCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dU
Ri93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTE1MzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9T
aGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDExIEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisg
ICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCiBw
cml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMp
IG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwxMSBAQCBSZWY8U2hhcmVkVGFzazxGdW5j
dGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVk
VGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFz
azxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNrKEZ1bmN0b3ImJiBmdW5jdG9yKQorewor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwg
RnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264000</attachid>
            <date>2015-10-24 19:41:01 -0700</date>
            <delta_ts>2015-10-26 09:54:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>611111</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MyBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6Okxvd2VyaW5nU2VsZWN0b3I6Okxvd2VyaW5nU2VsZWN0b3Ip
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjph
Y2NlcHRSb290KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdT
ZWxlY3Rvcjo6YWNjZXB0Um9vdExhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHNMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6
YWNjZXB0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpMb3dl
cmluZ1NlbGVjdG9yOjphY2NlcHRPcGVyYW5kc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlMb2FkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5QWRkKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmVBZGRM
b2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rv
cjo6dHJ5U3RvcmVBbmRMb2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5U3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjpMb3dlcmluZ1NlbGVjdG9yOjp0cnlDb25zdDMyKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJpbmdTZWxlY3Rvcjo6dHJ5UmV0dXJuKToKKyAgICAgICAg
KEpTQzo6QjM6Omxvd2VyVG9BaXIpOgorICAgICAgICAqIGIzL0IzTG93ZXJUb0Fpci5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQuCisgICAg
ICAgICogYjMvQjNNZW1vcnlWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6TWVt
b3J5VmFsdWU6On5NZW1vcnlWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6
ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzTWVtb3J5VmFsdWUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpNZW1v
cnlWYWx1ZTo6b2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpNZW1vcnlW
YWx1ZSk6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNPcGNvZGUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjppc0NoZWNrTWF0aCk6CisgICAgICAgICogYjMvQjNPcmlnaW4uY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZHVtcCk6CisgICAgICAgICogYjMvQjNPcmln
aW4uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46Ok9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpQYXRj
aHBvaW50U3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6flBh
dGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpm
b3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlk
KToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQYXRjaHBv
aW50VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6
flBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIz
OjpQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgICogYjMvQjNQaGFz
ZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQaGFzZVNjb3BlOjpQaGFzZVNj
b3BlKToKKyAgICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6On5QaGFzZVNjb3BlKToKKyAgICAg
ICAgKiBiMy9CM1BoYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNQcm9jZWR1cmUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJvY2VkdXJlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6flByb2NlZHVyZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcik6CisgICAgICAgICog
YjMvQjNQcm9jZWR1cmUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNp
emUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphdCk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpp
dGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6OmZpbmROZXh0KToKKyAg
ICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjpWYWx1ZXNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRv
cisrKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRl
cmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6VmFsdWVzQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OlZhbHVlc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFs
dWVzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OnZhbHVlcyk6CisgICAgICAgICogYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGQpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90
S2luZC5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAg
KiBiMy9CM1N0YWNrU2xvdEtpbmQuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNTdGFja1Nsb3RW
YWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6On5TdGFj
a1Nsb3RWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90VmFsdWUuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpTdGFja1Nsb3RWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Ns
b3RWYWx1ZTo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Omtp
bmQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6Om9mZnNldEZyb21GUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpTdGFja1Nsb3RWYWx1ZSk6CisgICAgICAgICog
YjMvQjNTdGFja21hcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmR1
bXApOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcDo6U3RhY2ttYXApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6b3BhcXVlKToKKyAgICAgICAgKEpT
Qzo6QjM6OlN0YWNrbWFwOjpzZXRPcGFxdWVJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFj
a21hcDo6b3BhcXVlSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmNvbnN0cmFp
bik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xvYmJlcik6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcDo6Y2xvYmJlcmVkKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpz
ZXRHZW5lcmF0b3IpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwpOgorICAgICAg
ICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCk6CisgICAgICAgIChKU0M6
OkIzOjpTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpTdWNjZXNzb3JDb2xsZWN0
aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OnNpemUpOgorICAg
ICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpT
dWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChK
U0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0
b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpiZWdpbik6Cisg
ICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAqIGIz
L0IzU3dpdGNoQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6
ZHVtcCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hD
YXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6OmNhc2VW
YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0YXJnZXQpOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoQ2FzZTo6dGFyZ2V0QmxvY2spOgorICAgICAgICAqIGIzL0IzU3dpdGNo
VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjp+U3dpdGNo
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OnJlbW92ZUNhc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmFwcGVuZENhc2UpOgorICAgICAgICAoSlNDOjpC
Mzo6U3dpdGNoVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjpTd2l0Y2hWYWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6
OlN3aXRjaFZhbHVlOjpudW1DYXNlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZh
bHVlOjpjYXNlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmZhbGxUaHJvdWdoKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRj
aFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAg
IChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoVmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6QjM6OlN3aXRjaFZhbHVlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1
ZTo6ZW5kKToKKyAgICAgICAgKiBiMy9CM1R5cGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNUeXBlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6aXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6aXNGbG9hdCk6CisgICAgICAgIChK
U0M6OkIzOjpwb2ludGVyVHlwZSk6CisgICAgICAgICogYjMvQjNVcHNpbG9uVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M1Vwc2lsb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1ZTo6
YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OnBoaSk6CisgICAgICAg
IChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OlVwc2lsb25WYWx1ZSk6CisgICAgICAgICogYjMvQjNV
c2VDb3VudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6VXNlQ291
bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6flVzZUNvdW50cyk6CisgICAgICAg
ICogYjMvQjNVc2VDb3VudHMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpVc2VDb3VudHM6
Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OnZhbGlkYXRlKToKKyAgICAgICAgKiBiMy9CM1ZhbGlkYXRlLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjp+VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRp
dHkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoTm9wKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkZWVwRHVt
cCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1
ZTo6dHlwZUZvcik6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcmlnaW4pOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmNoaWxkKToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphaXJUeXBl
KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpjaGlsZHJlbik6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6RGVlcFZhbHVlRHVtcDo6RGVlcFZh
bHVlRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpkdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlSW5saW5lcy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjphcyk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZTo6aGFzSW50MzIpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50MzIpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
Ojphc0ludDY0KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmFzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0ludCk6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzRG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjphc0RvdWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6c3RhY2ttYXApOgor
ICAgICAgICAqIGIzL0IzVmFsdWVSZXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlUmVwOjpkdW1wKToKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvQjNWYWx1ZVJlcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpWYWx1
ZVJlcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpzdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6c3RhY2tB
cmd1bWVudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6Y29uc3RhbnQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6OmNvbnN0YW50RG91YmxlKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjpraW5kKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvcGVyYXRvciBi
b29sKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpvZmZzZXRGcm9tRlApOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9mZnNldEZyb21TUCk6CisgICAgICAgIChKU0M6OkIzOjpW
YWx1ZVJlcDo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmRvdWJsZVZhbHVl
KToKKyAgICAgICAgKiBiMy9haXI6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0
ZVN0YWNrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJBcmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpk
dW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyQXJnLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0RlZik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppbW0p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjphZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpzdGFjayk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Y2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNWYWxpZFNjYWxlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpsb2dT
Y2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aW5kZXgpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OnJlbENvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnJl
c0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnNwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9wZXJhdG9yIGJv
b2wpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmtpbmQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ltbSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbW02NCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1N0YWNr
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0NhbGxBcmcpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpBcmc6OmlzSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
UmVsQ29uZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZXNDb25kKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnRtcCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpB
cmc6OnBvaW50ZXJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YmFzZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpvZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c2NhbGUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRlBU
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzR1ApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpBcmc6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc1R5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omdwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZwcik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6Z3BUbXBJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnBUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OndpdGhPZmZzZXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjpmb3JFYWNoVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjphc1RydXN0ZWRJbW0zMik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVz
dGVkSW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbVB0cik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6YXNBZGRyZXNzKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjphc0Jhc2VJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6
YXNSZWxhdGlvbmFsQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1Jl
c3VsdENvbmRpdGlvbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnSGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpC
YXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBiMy9haXIvQWlyQmFzaWNCbG9jay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6aW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Js
b2NrOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphdCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6bnVt
U3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nv
cik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29ycyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OnByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6cHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVl
cEJhc2ljQmxvY2tEdW1wOjpEZWVwQmFzaWNCbG9ja0R1bXApOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpk
ZWVwRHVtcCk6CisgICAgICAgICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6aXNWYWxpZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2Fs
bFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
Q2FsbFNwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNw
ZWNpYWw6OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpk
ZWVwRHVtcEltcGwpOgorICAgICAgICAqIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaDogQWRkZWQu
CisgICAgICAgICogYjMvYWlyL0FpckNvZGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6Q29kZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6On5Db2RlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkQmxvY2spOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphZGRTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjphZGRTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y0NhbGxTcGVjaWFs
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OmZpbmROZXh0QmxvY2tJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZpbmRO
ZXh0QmxvY2spOgorICAgICAgICAqIGIzL2Fpci9BaXJDb2RlLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpuZXdUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpudW1UbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbEFyZ0FyZWFTaXpl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6cmVxdWVzdENhbGxBcmdBcmVhU2l6ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OnNldEZyYW1lU2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0
b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpv
cGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3Ih
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6Q29kZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246OlN0YWNrU2xvdHNDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRl
cmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9
PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNr
U2xvdHNDb2xsZWN0aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpz
dGFja1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjpTcGVjaWFsc0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3Bl
Y2lhbHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29k
ZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciop
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjplbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzcGVjaWFscyk6CisgICAgICAgICogYjMvYWlyL0FpckZy
ZXF1ZW50ZWRCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Z2VuZXJhdGUpOgorICAgICAgICAqIGIz
L2Fpci9BaXJHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGVk
LmNwcDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpoYW5kbGVDYWxsZWVTYXZlcyk6CisgICAgICAgICogYjMv
YWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJJ
bnNlcnRpb25TZXQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9u
U2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Okluc2VydGlvblNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6Y29kZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc2VydGlvblNldDo6YXBwZW5kSW5zZXJ0aW9uKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjppbnNlcnRJbnN0KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zZXJ0aW9uU2V0OjppbnNlcnQpOgorICAgICAgICAqIGIzL2Fpci9BaXJJbnN0LmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmR1bXApOgorICAgICAgICAqIGIz
L2Fpci9BaXJJbnN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpJbnN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6b3Bjb2RlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJ
bnN0Ojpmb3JFYWNoVG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlySW5zdElubGluZXMuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8VG1wPjo6Zm9yRWFjaCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkZvckVhY2g8QXJnPjo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okluc3Q6OmZvckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpo
YXNTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6ZXh0cmFDbG9iYmVyZWRS
ZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmlzU2hpZnRWYWxpZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmlzTHNoaWZ0MzJWYWxpZCk6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TGl2ZW5lc3MpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6bGl2ZUF0SGVhZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpsaXZlQXRUYWlsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6TG9jYWxDYWxjKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6bGl2ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkxpdmVu
ZXNzOjpMb2NhbENhbGM6OnRha2VMaXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5l
c3M6OkxvY2FsQ2FsYzo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJQaGFzZVNjb3BlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdwcnNJblByaW9yaXR5
T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpmcHJzSW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6cmVnc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMv
YWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPjo6aW5Qcmlvcml0eU9yZGVyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+Ojpp
blByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpyZWdzSW5Qcmlvcml0eU9y
ZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3BlY2lhbDo6flNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpuYW1l
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlNwZWNpYWw6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFNwZWNpYWxEdW1wOjpEZWVw
U3BlY2lhbER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OmR1
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAgICogYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpz
cGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0
YWNrU2xvdDo6ZGVlcER1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OlN0
YWNrU2xvdCk6CisgICAgICAgICogYjMvYWlyL0FpclN0YWNrU2xvdC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpieXRlU2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlN0YWNrU2xvdDo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xv
dDo6aW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmFsaWdubWVudCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6dmFsdWUpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTdGFja1Nsb3Q6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkRlZXBTdGFja1Nsb3REdW1wOjpEZWVwU3RhY2tTbG90RHVtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkRlZXBTdGFja1Nsb3REdW1wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6Z3BUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6ZnBUbXBGb3JJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3Ig
Ym9vbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6aXNGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNHUFIp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRlBSKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6Z3ByKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OnJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzVG1wSW5kZXgpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmdwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpUbXA6OmZwVG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OnRtcElu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0FsaXZlKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
OjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aGFzaCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmVuY29kZUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUZQUik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OlRtcDo6ZW5jb2RlR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVu
Y29kZUZQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlApOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNFbmNvZGVkRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVkRlBUbXApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZGVjb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZGVjb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXBIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1w
SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXBJbmxpbmVzLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OlRtcCk6CisgICAgICAgICogYjMvYWlyL0FpclZh
bGlkYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnZhbGlkYXRlKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL29w
Y29kZV9nZW5lcmF0b3IucmI6IEFkZGVkLgorICAgICAgICAqIGIzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYjogQWRkZWQuCisgICAgICAgICogYjMvdGVzdGIzLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpjb21waWxlQW5kUnVuKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3Q0Mik6
CisgICAgICAgIChKU0M6OkIzOjpydW4pOgorICAgICAgICAobWFpbik6CisgICAgICAgICogaml0
L1JlZy5oOgorICAgICAgICAoSlNDOjpSZWc6OmluZGV4KToKKyAgICAgICAgKEpTQzo6UmVnOjpp
c1NldCk6CisgICAgICAgIChKU0M6OlJlZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6
OlJlZzo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6UmVnOjpBbGxS
ZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpSZWc6OkFs
bFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpSZWc6
OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpS
ZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlND
OjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJl
Z3NJdGVyYWJsZTo6ZW5kKToKKyAgICAgICAgKEpTQzo6UmVnOjphbGwpOgorICAgICAgICAoSlND
OjpSZWc6OmludmFsaWQpOgorICAgICAgICAoSlNDOjpSZWc6Om9wZXJhdG9yISk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcDoKKyAgICAgICAgKEpTQzo6
UmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0KToKKyAgICAgICAgKiBq
aXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmVuZCk6
CisgICAgICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0
OjpzZXRBbnkpOgorCiAyMDE1LTEwLTI0ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgog
CiAgICAgICAgIFRlYWNoIGNyZWF0ZV9oYXNoX3RhYmxlIHRvIG9taXQgYnVpbHRpbnMgbWFjcm9z
IHdoZW4gZ2VuZXJhdGluZyB0YWJsZXMgZm9yIG5hdGl2ZS1vbmx5IG9iamVjdHMKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZpc2lvbiAxOTE1Mzkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBj
b3B5KQpAQCAtMzUsNiArMzUsNyBAQCBWUEFUSCA9IFwKIAogUFlUSE9OID0gcHl0aG9uCiBQRVJM
ID0gcGVybAorUlVCWSA9IHJ1YnkKIAogSmF2YVNjcmlwdENvcmVfU0NSSVBUU19ESVIgPSAkKEph
dmFTY3JpcHRDb3JlKS9TY3JpcHRzCiAKQEAgLTU5LDYgKzYwLDEzIEBAIGFsbCA6IFwKICAgICBM
ZXhlci5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5oIFwKICAgICBSZWdFeHBKaXRUYWJsZXMu
aCBcCisgICAgQjNMb3dlcmluZ01hdGNoZXIuaCBcCisgICAgQjNBZGRyZXNzTWF0Y2hlci5oIFwK
KyAgICBCM0NvbXBhcmlzb25NYXRjaGVyLmggXAorICAgIEFpck9wY29kZS5oIFwKKyAgICBBaXJP
cGNvZGUuY3BwIFwKKyAgICBBaXJPcGNvZGVVdGlscy5oIFwKKyAgICBBaXJPcGNvZGVVdGlscy5j
cHAgXAogIwogCiAjIEphdmFTY3JpcHQgYnVpbHRpbnMuCkBAIC0yNjIsNiArMjcwLDIyIEBAIElO
UFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUyA9IFwKIEpTUmVwbGF5SW5wdXRzLmggOiAkKElO
UFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBVVF9HRU5FUkFUT1JfU0NSSVBUUykK
IAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRv
clJlcGxheUlucHV0cy5weSAtLW91dHB1dERpciAuIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3Jl
ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQogCitCM0xvd2VyaW5nTWF0Y2hlci5o
OiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZh
U2NyaXB0Q29yZSkvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReIAor
QjNBZGRyZXNzTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJu
X21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJu
cworCSQoUlVCWSkgJF4KK0IzQ29tcGFyaXNvbk1hdGNoZXIuaDogJChKYXZhU2NyaXB0Q29yZSkv
YjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL0IzQ29t
cGFyaXNvbk1hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReCisKK0Fpck9wY29kZS5oOiAkKEph
dmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRDb3Jl
KS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNvZGUuY3BwOiAk
KEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFTY3JpcHRD
b3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNvZGVVdGls
cy5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkpICReCitBaXJPcGNv
ZGVVdGlscy5jcHA6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJi
ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworCSQoUlVCWSkgJF4K
KwogIyBEeW5hbWljYWxseS1kZWZpbmVkIHRhcmdldHMgYXJlIGxpc3RlZCBiZWxvdy4gU3RhdGlj
IHRhcmdldHMgYmVsb25nIHVwIHRvcC4KIAogYWxsIDogXApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBA
IC0yNSw2ICsyNSw3IEBACiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlkZXBlbmRlbmNp
ZXMgPSAoCisJCQkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNTExNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCiAJCQkJNUQ2QjJBNTUxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdldERlcGVuZGVu
Y3kgKi8sCkBAIC02ODUsNiArNjg2LDEyMSBAQAogCQkwRkVBMEEzMzE3MEQ0MEJGMDBCQjcyMkMg
LyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi87IH07
CiAJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5oICovOyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyog
TWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAq
LzsgfTsKKwkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
NDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovOyB9OworCQkwRkVDODUwMDFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2su
Y3BwICovOyB9OworCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNzFC
REFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi87IH07CisJCTBGRUM4NTAyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNC
YXNpY0Jsb2NrSW5saW5lcy5oICovOyB9OworCQkwRkVDODUwMzFCREFDREFDMDA4MEZGNzQgLyog
QjNCYXNpY0Jsb2NrVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5o
ICovOyB9OworCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQTFC
REFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi87IH07CisJCTBGRUM4NTA1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1NwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjND
aGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovOyB9Owor
CQkwRkVDODUwNzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJEMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUwODFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi87
IH07CisJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tb24uY3BwICovOyB9OworCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyB9OworCQkwRkVD
ODUwQjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwICovOyB9OworCQkwRkVDODUwQzFCREFDREFDMDA4MEZG
NzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5
LmggKi87IH07CisJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
MzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUw
RTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0MzJWYWx1ZS5oICovOyB9OworCQkwRkVDODUwRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNjFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5o
ICovOyB9OworCQkwRkVDODUxMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Qzkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjND
b250cm9sVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJl
cXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICov
OyB9OworCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0MxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLzsgfTsKKwkJMEZFQzg1MTcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNG
cmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovOyB9OworCQkw
RkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzR2VuZXJhdGUuaCAqLzsgfTsKKwkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxQjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1h
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLzsgfTsKKwkJMEZFQzg1MUMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0
LmggKi87IH07CisJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi87IH07CisJCTBGRUM4NTFFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuaCAqLzsgfTsKKwkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovOyB9OworCQkwRkVD
ODUyMDFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTWVtb3J5VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MjExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi87IH07CisJCTBGRUM4
NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bj
b2RlLmggKi87IH07CisJCTBGRUM4NTIzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREOTFC
REFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovOyB9OworCQkwRkVDODUyNDFCREFDREFD
MDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovOyB9
OworCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQjFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4
NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQzFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovOyB9OworCQkwRkVDODUyNzFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0
Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERjFCREFDREFD
MDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5o
ICovOyB9OworCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUu
aCAqLzsgfTsKKwkJMEZFQzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovOyB9OworCQkwRkVD
ODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNDFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja21hcC5jcHAgKi87IH07CisJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrbWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovOyB9OworCQkwRkVDODUz
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNw
ZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovOyB9OworCQkwRkVDODUzNDFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RW
YWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xv
dFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovOyB9OworCQkw
RkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFD
MDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CisJCTBGRUM4NTM3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoQ2FzZS5jcHAgKi87IH07CisJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRj
aENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsKKwkJMEZFQzg1
MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLzsgfTsK
KwkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMTFCREFDREFDMDA4MEZGNzQg
LyogQjNUeXBlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovOyB9OworCQkwRkVDODUzRDFCREFDREFD
MDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxv
blZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLzsgfTsKKwkJMEZF
Qzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1VzZUNvdW50cy5jcHAgKi87IH07CisJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi87IH07CisJCTBG
RUM4NTQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07CisJCTBGRUM4
NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTQ1MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVz
LmggKi87IH07CisJCTBGRUM4NTQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDcxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmgg
Ki87IH07CisJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ4
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NkUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBbGxvY2F0ZVN0YWNrLmggKi87IH07CisJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi87IH07CisJCTBGRUM4
NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
aCAqLzsgfTsKKwkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovOyB9OworCQkwRkVDODU3MjFC
REFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJh
c2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxs
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLzsgfTsK
KwkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovOyB9OworCQkwRkVDODU3NTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi87IH07
CisJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MTFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ29kZS5oICovOyB9OworCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJl
cXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi87
IH07CisJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MzFCREFDREM3
MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovOyB9OworCQkwRkVDODU3OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICov
OyB9OworCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU1
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovOyB9OworCQkwRkVD
ODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLzsgfTsKKwkJMEZFQzg1N0MxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NzFCREFDREM3MDA4MEZGNzQgLyog
QWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLzsgfTsKKwkJMEZFQzg1N0QxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU1ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0
LmNwcCAqLzsgfTsKKwkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNl
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1
NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovOyB9OworCQkwRkVDODU3
RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dC5jcHAgKi87IH07CisJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QjFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovOyB9OworCQkwRkVDODU4MTFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5o
ICovOyB9OworCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVEMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovOyB9OworCQkwRkVDODU4MzFCREFDREM3MDA4
MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5jcHAgKi87IH07CisJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovOyB9OworCQkwRkVDODU4NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MDFCREFDREM3MDA4MEZGNzQg
LyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi87IH07CisJCTBGRUM4NTg2MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0
ZXJQcmlvcml0eS5oICovOyB9OworCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4
NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BlY2lhbC5oICovOyB9OworCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxF
dmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICov
OyB9OworCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi87IH07CisJCTBGRUM4NThC
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clN0YWNrU2xvdC5jcHAgKi87IH07CisJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
dGFja1Nsb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLzsgfTsKKwkJMEZF
Qzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2ODFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wLmNwcCAqLzsgfTsKKwkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovOyB9OworCQkwRkVDODU4RjFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElubGluZXMuaCAq
LzsgfTsKKwkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTZCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTkxMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmgg
Ki87IH07CisJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1OTIxQkRC
MUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi87IH07CisJCTBGRUM4NUEzMUJEQjVD
RjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2REYxQiAvKiBG
b3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QTQxQkRCNUNGMTAwODBGRjc0IC8q
IEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGRUM4NUFGMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0
YjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi87IH07CiAJCTBGRUQ2N0I5MUIy
NjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZD
RTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGRUQ2N0JBMUIy
NjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I4MUIyNjI1NkQwMDY2Q0Ux
NSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLzsgfTsKIAkJMEZFRTk4NDExQTg4NjVC
NzAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBW
YXJhcmdzRnJhbWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwpAQCAtMTgzOSw2ICsxOTU1LDEzIEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBG
Q0VGQUI1MTgwNUQ2MTYwMDQ3MkNFNDsKIAkJCXJlbW90ZUluZm8gPSBsbHZtRm9ySlNDOwogCQl9
OworCQkwRkVDODVCMDFCREI1RDhGMDA4MEZGNzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICov
ID0geworCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFs
ID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJv
eHlUeXBlID0gMTsKKwkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZFQzg1OTQxQkRCNUNGMTAw
ODBGRjc0OworCQkJcmVtb3RlSW5mbyA9IHRlc3RiMzsKKwkJfTsKIAkJMEZGOTIyRDIxNEY0NkIy
RjAwNDFBMjRFIC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENv
bnRhaW5lckl0ZW1Qcm94eTsKIAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZD
MDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKQEAgLTI1ODAsNiArMjcwMywxMjAgQEAKIAkJ
MEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHSklUQ29kZS5jcHA7IHBhdGggPSBkZmcvREZHSklU
Q29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTMwMTcwRDQwQkYw
MEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IERGR0pJVENvZGUuaDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNBcmd1bWVudFJlZ1ZhbHVlLmg7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFs
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0Jhc2ljQmxvY2suY3BwOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2su
aDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRCODFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2tVdGlscy5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrVXRpbHMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0Jsb2NrV29ya2xpc3QuaDsgcGF0aCA9IGIzL0IzQmxvY2tXb3Jr
bGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQjFCREFDREFDMDA4
MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNDaGVja1NwZWNpYWwuY3BwOyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQg
LyogQjNDaGVja1NwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjND
aGVja1NwZWNpYWwuaDsgcGF0aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDaGVja1ZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM0NoZWNr
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQ29tbW9uLmNwcDsgcGF0aCA9IGIzL0IzQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29tbW9uLmg7IHBhdGggPSBiMy9CM0Nv
bW1vbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29tbXV0YXRpdml0eS5jcHA7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzQ29tbXV0YXRpdml0eS5oOyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
MzJWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0
MzJWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0MzJWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0MzJWYWx1ZS5oOyBw
YXRoID0gYjMvQjNDb25zdDMyVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3Q2NFZhbHVlLmNwcDsgcGF0aCA9IGIz
L0IzQ29uc3Q2NFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQ29uc3Q2NFZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNzFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0RG91Ymxl
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDODFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzQ29uc3REb3VibGVWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZh
bHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0NvbnRyb2xWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Nv
bnRyb2xWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb250cm9sVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNGcmVxdWVuY3lD
bGFzcy5jcHA7IHBhdGggPSBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGcmVxdWVuY3lDbGFzcy5o
OyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODRDRDFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9
IGIzL0IzRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzR2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvQjNHZW5lcmF0
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENGMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0dlbmVyYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
R2VuZXJhdGUuaDsgcGF0aCA9IGIzL0IzR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVyaWNGcmVxdWVu
dGVkQmxvY2suaDsgcGF0aCA9IGIzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eE1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0luZGV4TWFwLmg7IHBh
dGggPSBiMy9CM0luZGV4TWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzSW5kZXhTZXQuaDsgcGF0aCA9IGIzL0IzSW5kZXhTZXQuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93
ZXJUb0Fpci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0xvd2Vy
VG9BaXIuY3BwOyBwYXRoID0gYjMvQjNMb3dlclRvQWlyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0xvd2VyVG9BaXIuaDsgcGF0aCA9IGIz
L0IzTG93ZXJUb0Fpci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENTFC
REFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM01lbW9yeVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENjFCREFDREFDMDA4
MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM01lbW9yeVZhbHVlLmg7IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09wY29kZS5jcHA7IHBh
dGggPSBiMy9CM09wY29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM09wY29kZS5oOyBwYXRoID0gYjMvQjNPcGNvZGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luLmNwcDsgcGF0
aCA9IGIzL0IzT3JpZ2luLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzT3JpZ2luLmg7IHBhdGggPSBiMy9CM09yaWdpbi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50
U3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BhdGNo
cG9pbnRTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50U3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Bh
dGNocG9pbnRTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1BhdGNocG9pbnRWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Bh
dGNocG9pbnRWYWx1ZS5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VT
Y29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BoYXNlU2Nv
cGUuY3BwOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL0Iz
UGhhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMTFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNQcm9jZWR1cmUuY3BwOyBwYXRoID0gYjMvQjNQcm9jZWR1cmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyog
QjNQcm9jZWR1cmUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1
cmUuaDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM1Byb2NlZHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja21hcC5jcHA7IHBhdGggPSBiMy9CM1N0YWNr
bWFwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNTdGFja21hcC5oOyBwYXRoID0gYjMvQjNTdGFja21hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja21hcFNwZWNp
YWwuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNp
YWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwu
aDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmNwcDsg
cGF0aCA9IGIzL0IzU3RhY2tTbG90S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9C
M1N0YWNrU2xvdEtpbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1N0
YWNrU2xvdFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNTdGFja1Nsb3RWYWx1ZS5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBwYXRoID0gYjMvQjNTdWNjZXNzb3JD
b2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVEMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNTd2l0Y2hDYXNlLmNwcDsgcGF0aCA9IGIzL0IzU3dpdGNoQ2FzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTd2l0
Y2hDYXNlLmg7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTd2l0Y2hWYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM1N3aXRjaFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTd2l0Y2hWYWx1ZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hW
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMTFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzVHlwZS5jcHA7IHBhdGggPSBiMy9CM1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVHlwZS5oOyBwYXRoID0gYjMvQjNUeXBlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Vw
c2lsb25WYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25W
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Vwc2lsb25WYWx1ZS5o
OyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXNlQ291bnRzLmNwcDsgcGF0aCA9IGIzL0Iz
VXNlQ291bnRzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVXNlQ291bnRzLmg7IHBhdGggPSBiMy9CM1VzZUNvdW50cy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbGlkYXRlLmNw
cDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbGlkYXRlLmg7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWUuaDsgcGF0aCA9IGIzL0IzVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVJbmxp
bmVzLmg7IHBhdGggPSBiMy9CM1ZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbHVlUmVwLmNwcDsgcGF0aCA9IGIz
L0IzVmFsdWVSZXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGRDFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1ZhbHVlUmVwLmg7IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0
ZVN0YWNrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9j
YXRlU3RhY2suY3BwOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0OTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0
ZVN0YWNrLmg7IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFyZy5jcHA7IHBhdGggPSBi
My9haXIvQWlyQXJnLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJBcmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmFzaWNCbG9jay5jcHA7
IHBhdGggPSBiMy9haXIvQWlyQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckJhc2ljQmxvY2suaDsgcGF0aCA9IGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRF
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQ0NhbGxTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJDQ2FsbFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5oOyBwYXRoID0gYjMvYWlyL0FpckNDYWxs
U3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJDb2RlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDb2RlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ29kZS5oOyBwYXRoID0gYjMvYWly
L0FpckNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9IGIzL2Fpci9BaXJGcmVxdWVu
dGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckdlbmVyYXRlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5l
cmF0ZS5oOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5lcmF0aW9uQ29udGV4
dC5oOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJIYW5k
bGVDYWxsZWVTYXZlcy5jcHA7IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NzFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVT
YXZlcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1ODFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckluc2VydGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9u
U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTkxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySW5z
dC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3QuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnN0SW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJ
bnN0SW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVz
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMaXZlbmVzcy5oOyBwYXRo
ID0gYjMvYWlyL0FpckxpdmVuZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclBoYXNlU2NvcGUuY3BwOyBwYXRoID0gYjMvYWly
L0FpclBoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmg7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29w
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MDFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBBaXJSZWdpc3RlclByaW9yaXR5LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjEx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5oOyBwYXRoID0gYjMvYWlyL0Fp
clJlZ2lzdGVyUHJpb3JpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lh
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
clNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Bp
bGxFdmVyeXRoaW5nLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNwaWxs
RXZlcnl0aGluZy5oOyBwYXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Rh
Y2tTbG90LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclN0YWNr
U2xvdC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tTbG90LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja1Nsb3QuaDsgcGF0aCA9
IGIzL2Fpci9BaXJTdGFja1Nsb3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBaXJUbXAuY3BwOyBwYXRoID0gYjMvYWlyL0FpclRtcC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJUbXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wLmg7IHBhdGgg
PSBiMy9haXIvQWlyVG1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTZB
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpclRtcElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBJbmxpbmVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBBaXJWYWxpZGF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFs
aWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVmFsaWRhdGUuaDsg
cGF0aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckdlbmVyYXRlZC5jcHA7IHBhdGggPSBiMy9h
aXIvQWlyR2VuZXJhdGVkLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBleHBsaWNpdEZpbGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVk
ZUluSW5kZXggPSAwOyBwYXRoID0gdGVzdGIzOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNf
RElSOyB9OworCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IHRlc3RiMy5jcHA7IHBhdGggPSBiMy90ZXN0
YjMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNzFCMjYyNTZEMDA2
NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHBhdGggPSBk
ZmcvREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5n
UGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFy
YXJnc0ZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNldHVwVmFyYXJn
c0ZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODAxLDYgKzQwMzgsMTUg
QEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJ
fTsKKwkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3MgKi8gPSB7CisJCQlp
c2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBMzFCREI1Q0YxMDA4MEZGNzQgLyogRm91
bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwRkVDODVBNDFCREI1Q0Yx
MDA4MEZGNzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJ
CQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJ
CTBGRjkyMkM2MTRGNDZCMTMwMDQxQTI0RSAvKiBGcmFtZXdvcmtzICovID0gewogCQkJaXNhID0g
UEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3
OwpAQCAtMzg3MCw2ICs0MTE2LDcgQEAKIAkJCQkxNDEyMTEyMDBBNDg3OTNDMDA0ODAyNTUgLyog
bWluaWRvbSAqLywKIAkJCQkxNEJENTlCRjBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywK
IAkJCQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKKwkJCQkwRkVD
ODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9k
dWN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zODkwLDYgKzQxMzcsNyBAQAog
CQkJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3VwR2VuZXJhdG9yLnB5
ICovLAogCQkJCTE0MzJFQkQ3MEEzNENBRDQwMDcxN0I5RiAvKiBBUEkgKi8sCiAJCQkJOTY4OENC
MTIwRUQxMkI0RTAwMUQ2NDlGIC8qIGFzc2VtYmxlciAqLywKKwkJCQkwRkVDODRCMjFCREFDRDVF
MDA4MEZGNzQgLyogYjMgKi8sCiAJCQkJQTU0Q0YyRUExODRFQTczOTAwMjM3RjE5IC8qIGJpbmRp
bmdzICovLAogCQkJCUE3RDgwMTlGMTg4MEQ2NkUwMDI2QzM5QiAvKiBidWlsdGlucyAqLywKIAkJ
CQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8sCkBAIC00MTAzLDYgKzQz
NTEsMTM0IEBACiAJCQluYW1lID0gZnRsOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKKwkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovID0geworCQkJaXNhID0gUEJY
R3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyog
YWlyICovLAorCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwICovLAorCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuaCAqLywKKwkJCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2Nr
LmNwcCAqLywKKwkJCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmgg
Ki8sCisJCQkJMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMu
aCAqLywKKwkJCQkwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMu
aCAqLywKKwkJCQkwRkVDODRCQTFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0Lmgg
Ki8sCisJCQkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAq
LywKKwkJCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLywK
KwkJCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAqLywKKwkJ
CQkwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi8sCisJCQkJMEZF
Qzg0QkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLywKKwkJCQkwRkVDODRDMDFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLywKKwkJCQkwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLywKKwkJCQkwRkVDODRDMjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8sCisJCQkJMEZFQzg0QzMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDNDFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDNTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDY0VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0NjRWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0RG91YmxlVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0RG91YmxlVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDOTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb250cm9sVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5oICovLAorCQkJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKKwkJCQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyog
QjNGcmVxdWVuY3lDbGFzcy5oICovLAorCQkJCTBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5l
cmF0ZS5oICovLAorCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eE1hcC5oICovLAorCQkJCTBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0Lmgg
Ki8sCisJCQkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi8s
CisJCQkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovLAorCQkJ
CTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLywKKwkJCQkw
RkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovLAorCQkJCTBGRUM4
NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi8sCisJCQkJMEZFQzg0RDgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8sCisJCQkJMEZFQzg0RDkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3JpZ2luLmNwcCAqLywKKwkJCQkwRkVDODREQTFCREFDREFDMDA4MEZGNzQgLyog
QjNPcmlnaW4uaCAqLywKKwkJCQkwRkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50U3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0REMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0
Y2hwb2ludFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQ
YXRjaHBvaW50VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oICovLAorCQkJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BoYXNlU2NvcGUuY3BwICovLAorCQkJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuaCAqLywKKwkJCQkwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuY3BwICovLAorCQkJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovLAorCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMu
aCAqLywKKwkJCQkwRkVDODRFNDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi8s
CisJCQkJMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLywKKwkJCQkw
RkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovLAorCQkJ
CTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovLAorCQkJ
CTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovLAorCQkJ
CTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLywKKwkJCQkw
RkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLywKKwkJCQkw
RkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8sCisJ
CQkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovLAorCQkJCTBGRUM4
NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRG
MDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovLAorCQkJCTBGRUM4NEYxMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovLAorCQkJCTBGRUM4NEYyMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1R5cGUuaCAqLywKKwkJCQkwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNV
cHNpbG9uVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5oICovLAorCQkJCTBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNv
dW50cy5jcHAgKi8sCisJCQkJMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRz
LmggKi8sCisJCQkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICov
LAorCQkJCTBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8sCisJCQkJ
MEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEZB
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0RkIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0RkMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWVSZXAuY3BwICovLAorCQkJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbHVlUmVwLmggKi8sCisJCQkJMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3Ri
My5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IGIzOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKKwkJfTsKKwkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLyA9IHsKKwkJCWlz
YSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZFQzg1NDgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovLAorCQkJCTBGRUM4NTQ5MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi8sCisJCQkJMEZFQzg1NEExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFyZy5jcHAgKi8sCisJCQkJMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckFyZy5oICovLAorCQkJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCAqLywKKwkJCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5o
ICovLAorCQkJCTBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3Bw
ICovLAorCQkJCTBGRUM4NTRGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAq
LywKKwkJCQkwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgKi8sCisJCQkJ
MEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCAqLywKKwkJCQkwRkVDODU1MjFC
REFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJMEZFQzg1NTMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODU1NDFCREFD
REM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLywKKwkJCQkwRkVDODU5MjFCREIxRTEwMDA4
MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLywKKwkJCQkwRkVDODU1NTFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLywKKwkJCQkwRkVDODU1NjFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovLAorCQkJCTBGRUM4NTU3MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oICovLAorCQkJCTBGRUM4NTU4MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwICovLAorCQkJCTBGRUM4NTU5MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLywKKwkJCQkwRkVDODU1QTFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgKi8sCisJCQkJMEZFQzg1NUIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc3QuaCAqLywKKwkJCQkwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zdElubGluZXMuaCAqLywKKwkJCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2
ZW5lc3MuaCAqLywKKwkJCQkwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29w
ZS5jcHAgKi8sCisJCQkJMEZFQzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUu
aCAqLywKKwkJCQkwRkVDODU2MDFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0
eS5jcHAgKi8sCisJCQkJMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJp
b3JpdHkuaCAqLywKKwkJCQkwRkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5j
cHAgKi8sCisJCQkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCAqLywK
KwkJCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCAq
LywKKwkJCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmgg
Ki8sCisJCQkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8s
CisJCQkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovLAorCQkJ
CTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovLAorCQkJCTBGRUM4NTY5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLywKKwkJCQkwRkVDODU2QTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovLAorCQkJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclZhbGlkYXRlLmggKi8sCisJCQkpOworCQkJbmFtZSA9IGFpcjsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CiAJCTBGRjQyNzJFMTU4RUJDQ0UwMDRDQjlGRiAvKiBkaXNhc3Nl
bWJsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtNjA4
OSw2ICs2NDY1LDcgQEAKIAkJCQkwRjFGRTUxQzE5MjJBM0JDMDA2OTg3QzUgLyogQWJvcnRSZWFz
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUzMEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU1RjBGNTE0RDEwNjND
MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcw
RTkxOUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURpc3BhdGNoYWJsZUFnZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkyQTQ4RDE5MTE3NzIzNjVCMDBDNjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5j
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQ
SUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjExNyw4ICs2NDk0LDEwIEBACiAJCQkJQTVFQTcw
RTgxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxlSW5zcGVjdG9yQ29udHJvbGxlckNsaWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYxQTAzMTAwOTAwNkEzMDZEIC8qIEJhc2lj
QmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3
NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAyM0Q4N0MgLyogQmlnSW50ZWdlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY2NEIyNzIxQTc4NEJBRjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRj
aC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRt
cC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUMwRTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xl
YW5PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFQTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAv
KiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMz
OUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxMzMsNiArNjUx
Miw3IEBACiAJCQkJOTlEQTAwQTQxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX21vZGVsLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQTUxQkQ1OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5z
X3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAogCQkJCTQxREVBMTMyMUI5RjMxNjMwMDZENjVE
RCAvKiBCdWlsdGluVXRpbHMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTEwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOUU3Mjk0MEIx
OTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdG
Mzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHkuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
QjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHlJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKQEAgLTYxNDMsNiArNjUyMyw3IEBACiAJCQkJMEYyREQ4MEIxQUIzRDg1ODAwQkJCOEU4IC8q
IEJ5dGVjb2RlS2lsbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0
QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVj
a1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAv
KiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODg1RTExMTg0OUEzQkUwMEYxRTNG
QSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4MDIzRUExNjEzODMy
QjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTc5LDYgKzY1NjAs
NyBAQAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93
UGF0aHNFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAx
NzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdF
NUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTk2QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTg2LDggKzY1NjgsMTAgQEAKIAkJCQkwRjZGQzc1MTE5
NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJv
b3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4QTE4QkMyMUMzMDBCRURGNzYgLyogQ29u
c29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAw
NjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxOTFC
REEwNjgwMDAzMzFCODQgLyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1M0NFMDg2MThCQzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYyMDIsNiArNjU4Niw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAwODEw
RDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEzRkEx
NDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4
RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUyNDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9y
LmggaW4gSGVhZGVycyAqLywKQEAgLTYyMTMsNiArNjU5OCw3IEBACiAJCQkJOTk1OUU5MkIxQkQx
N0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTky
RkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0
b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRl
Q29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjMzLDYgKzY2MTksNyBAQAogCQkJCUE3
MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4
Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MDFC
REFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFC
NjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBv
aW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZH
QWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2
QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02MjQzLDcgKzY2MzAsOSBAQAogCQkJCTBGMkREODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdB
cmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzIyMTg3NzUwNTYw
MDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4
M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJh
eU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTggLyog
REZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1
NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MjUzLDYgKzY2NDIsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAv
KiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFE
QTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NG
RDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9j
a1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAwMTlBREE0MTAwMDZBQzcy
QSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyOTIsOCArNjY4Miwx
MCBAQAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRlcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VV
c2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkw
MTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZD
N0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRp
b25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAv
KiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjMyMyw2ICs2NzE1LDcgQEAKIAkJ
CQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTc5QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJp
YWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NjFCREFD
REM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZl
ZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyog
REZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjMzMSw2
ICs2NzI0LDcgQEAKIAkJCQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRH
cmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERG
R01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENEODkx
MCAvKiBERkdNaW5pZmllZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0
MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0
RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERG
R05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzQ5LDYgKzY3NDMsNyBAQAog
CQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29t
cGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5
M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRG
dXp6LmggaW4gSGVhZGVycyAqLywKQEAgLTYzNjYsNiArNjc2MSw4IEBACiAJCQkJMEZGQzkyMTYx
Qjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1Bo
YXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWly
QWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIw
MDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZD
MThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAq
LywKQEAgLTYzOTAsNiArNjc4Nyw3IEBACiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhB
MzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFj
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZHVHlw
ZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMxREIx
MjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjQw
MSw2ICs2Nzk5LDcgQEAKIAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVG
RUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
QkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50
U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyog
REZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OTZCNzMxODFCREEwNjgwMDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBp
biBIZWFkZXJzICovLApAQCAtNjQzMSw2ICs2ODMwLDcgQEAKIAkJCQkwRjU2QTFEMzE1MDAwRjM1
MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQUM3
NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhpdEtpbmQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZv
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzODE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQz
MkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzOTE3QURCNUYzMDA1QUIxNzQgLyog
RmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OTEsNiArNjg5MSw3IEBACiAJCQkJ
MEZFQTBBMjAxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTFR5cGVkUG9pbnRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMwMDdCM0MxQiAvKiBGVExWYWx1ZUZyb21C
bG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTYyODQxODhDOThENDAw
NzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM2MThC
NTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDMzMkM4
MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRhcmdldC5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NDk4LDggKzY4OTksMTAgQEAKIAkJCQkyQTgzNjM4QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVs
bEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDQwRTE2RjVD
RDAwQjM0NDYwIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjBGMUEwMTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUzQTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzEwRkIxOTc0QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9u
SGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU0QkZGMkMxQUQ0NzZFNzAw
MDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
RjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uUHJvdG90eXBlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEwMzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlD
YWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTM4LDYgKzY5NDEsNyBAQAogCQkJCUM0NzAz
Q0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3JfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFMDUwMTkxQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFBMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJn
dW1lbnRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MEExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQjFBQTkwOTExMDBE
MzNCMzMgLyogR2VuZXJpY09mZnNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTAxN0I2
QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5Vmlld0lubGlu
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjU2Myw2ICs2OTY3LDcgQEAKIAkJCQlDMkU1MjZCRTE1
OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTdCQTYx
MDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENhbGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAwQjM0NDYwIC8qIElkZW50aWZp
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIwMEEzODNEMCAvKiBJZGVu
dGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwNzYxODlCMDM4QzAwNjMz
MjMxIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjE2LDYgKzcw
MjEsNyBAQAogCQkJCUExQjlFMjNDMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTMxQjRFMENEQjAwRkMxMDI5IC8q
IEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFCOUUy
M0UxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCBp
biBIZWFkZXJzICovLAogCQkJCUExODE5M0U0MUI0RTBDREIwMEZDMTAyOSAvKiBJbnRsQ29sbGF0
b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q2RTFCNERDMTQxMDBE
Njk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3
MDFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0Q29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjY0Niw2ICs3MDUyLDcgQEAKIAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBB
QkIyMTcgLyogSklUT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3NjZEMzExNUFB
ODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2
NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmVTZXQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTkxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1QzI1IC8qIEpJVFRodW5rcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAwOENDOTNDIC8qIEpJVFRvREZHRGVmZXJy
ZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4
QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NTks
NiArNzA2Niw3IEBACiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZm
ZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCREFFQ0IxN0Y0RUExNDAwRjYx
NDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEIxNDE4NkQxQjYy
NTI3RjAwRkIyMDY4IC8qIEpTQXJyb3dGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MTgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQmFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLApAQCAtNjY3NSw2ICs3MDgzLDggQEAKIAkJCQk4NjVBMzBGMTEz
NTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNTNDRTA4ODE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUxRTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29u
dGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJC
QzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjkwLDYgKzcxMDAs
NyBAQAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3Rv
dHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
RW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2
N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FG
MTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAq
LywKQEAgLTY3MDAsMTEgKzcxMTEsMTMgQEAKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYy
MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmlj
VHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8q
IEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MzkxN0U3QjFCNzkwNkZBMDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZp
cm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3
RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xp
ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MzUsNiArNzE0OCw3IEBACiAJCQkJQTcwMDg3NDIx
N0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4
MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1
OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmlyb25tZW50LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3Bh
Y2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAv
KiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzY0LDYgKzcxNzgsNyBAQAog
CQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNp
bG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAv
KiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjAwQjVBNzE1MkJBQUE3
MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI4
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIx
LDkgKzcyMzYsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNl
cHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyog
TExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5
QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2
ODBBNTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExW
TURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcy
Q0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTY4MzYsMTIgKzcyNTMsMTQg
QEAKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBp
biBIZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2Vt
YmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIg
LyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2
MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUwNDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVy
UHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8q
IE1hY3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0Mx
MDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2
MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNz
ZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBD
M0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdD
QkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjcsNiArNzI4
Niw3IEBACiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3Ry
dWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBO
YXRpdmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMzRThEMjExQjkwMTNE
RTAwMzQ2QjUyIC8qIE5hdGl2ZVN0ZEZ1bmN0aW9uQ2VsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0YwRTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyODE4QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJt
aW5pc3RpY0lucHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTY4ODcsNiArNzMwNyw3IEBACiAJCQkJ
RTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9wYXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNBRTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1N0MxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxl
ZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyog
T3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAv
KiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MDAsMTMgKzczMjEs
MTcgQEAKIAkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTgzNDE4MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9y
cGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4
MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2Vu
ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyog
UHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJB
MyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0NzFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5Qjkx
NjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5
QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5
dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MjgsMTAgKzczNTMsMTMgQEAKIAkJCQkwRkI3
RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvdGVjdC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZs
YWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0
QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEz
RiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzkxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1
RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRl
cnMgKi8sCkBAIC02OTUyLDYgKzczODAsNyBAQAogCQkJCTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIz
MiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3RDIzRUUxODkxQjU1NDAw
MzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5
RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
NjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rv
ckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RjAxODIzNDVBRjAwQTgyRTY5
IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjk1OSw2
ICs3Mzg4LDcgQEAKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVj
dG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyNEU1NTExN0VFMjc0OTAw
QUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJCTg2OUVCQ0I3MEU4QzZENEEw
MDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0NDFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzBCMEE5RDExQTlC
NjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDMDYx
MUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlD
MjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAq
LywKQEAgLTY5ODgsNiArNzQxOCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8q
IFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2
RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVD
RDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3Zp
ZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTcwMDcsNiArNzQzOCw3IEBACiAJCQkJ
QkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVy
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVj
dHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzgg
LyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKQEAgLTcwNDMsMTAgKzc0NzUsMTIg
QEAKIAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2Fj
aGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI2QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBl
b2ZUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyog
QjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4
NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REVDMTk4MzJEQzQw
MDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkQ0REYw
MTk4MzJERDYwMDdENEIxOSAvKiBUeXBlU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0
QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRG
RjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfaW5w
dXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzA4NCw4ICs3NTE4LDEwIEBACiAJCQkJRkVEOTRGMkYx
NzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQy
NjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
RTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNEJGQ0U2OTEwQ0RCMUZDMDAzNjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2QTkzRTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dD
TWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJC
IC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFD
QzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLywKQEAgLTcxMDcsOSArNzU0Mywx
MiBAQAogCQkJCTk5NTlFOTJFMUJEMTdGQTQwMDFBQTQxMyAvKiB4eGQucGwgaW4gSGVhZGVycyAq
LywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVj
aWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWly
Q0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZF
N0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlG
RTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODExQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njcw
NEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAt
NzEzNCw2ICs3NTczLDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEZDRUZBQjYxODA1RDYx
NjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuZHluYW1pYyI7CiAJCX07CisJCTBGRUM4NTk0
MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJn
ZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZFQzg1QTgxQkRCNUNGMTAwODBGRjc0
IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YjMi
ICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8q
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3Mg
Ki8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAo
CisJCQkpOworCQkJbmFtZSA9IHRlc3RiMzsKKwkJCXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSAwRkVDODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICov
OworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsK
IAkJMEZGOTIyQzMxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAq
LyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxp
c3QgPSAwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0
IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciIgKi87CkBAIC03
Mjg5LDYgKzc3NDQsNyBAQAogCQkJCTE0QkQ1OUJFMEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBp
ICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAvKiBqc2MgKi8sCiAJCQkJNjUxMTIy
RjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJMEZFQzg1OTQxQkRCNUNG
MTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1RDZCMkE0NzE1MkI5RTE3MDA1MjMxREUgLyog
VGVzdCBUb29scyAqLywKIAkJCSk7CiAJCX07CkBAIC03NTM2LDYgKzc5OTIsMTQgQEAKIAkJCSk7
CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKKwkJMEZF
Qzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3Vy
Y2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxl
cyA9ICgKKwkJCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAw
OworCQl9OwogCQkwRkY5MjJDNDE0RjQ2QjEzMDA0MUEyNEUgLyogU291cmNlcyAqLyA9IHsKIAkJ
CWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKQEAgLTc1OTEsNiArODA1NSw3IEBACiAJCQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5
IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkQxMDdFQzM3NjAw
NDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3NDNCQUExNkI4ODI0
OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1i
bGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBB
Uk12N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTk4LDggKzgwNjMsMTAgQEAKIAkJ
CQlBN0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5n
V2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIx
NzQgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyog
QjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3
MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0Yz
OUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzYyMCw4ICs4MDg3LDEwIEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAw
Qjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkVDOUJCNjFCN0VC
MDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2Fs
bEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENDFCODRG
QjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0
YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyog
Q2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjM0LDYgKzgxMDMsNyBAQAogCQkJCUE3
N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQ
cm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcx
IC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0
NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY0
MSw2ICs4MTExLDcgQEAKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xv
d1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAv
KiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVB
M0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4
R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMx
QiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NjgsNiArODEz
OSw3IEBACiAJCQkJMEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRp
b25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURB
QjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNE
MTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJ
bmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Njc3LDYgKzgxNDksNyBAQAogCQkJCTBGNjM5NDg0MTVF
NDgxMTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
OUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZF
QTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtNzY4NSw2ICs4MTU4LDcgQEAKIAkJCQk4NkVDOURDNDEzMjhE
RjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NG
R1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDM2OTQxQUU5
Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzdBNDIzRjE3QTBCQkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc3MjIsNiArODE5Niw3IEBACiAJCQkJMkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8q
IERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMy
OERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NG
OTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2Nh
dGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyog
REZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0Ew
QkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtNzc2NCwxNCArODIzOSwxNyBAQAogCQkJCTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAv
KiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3
MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMzkyQzg5MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NS
RXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFRDE3MTc4
RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGNjIzNzk3MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1Bo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQTE5RDBCQTdEMDBC
MUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3N0Ex
Nzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBG
NzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNF
MDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCOUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9j
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8q
IERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3ODksNiArODI2Nyw4IEBACiAJ
CQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0
cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3OTA4NTUxOUEy
OTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4
IC8qIERGR1RocmVhZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhD
QTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3
RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTc4MTYsNiArODI5Niw3IEBACiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBF
QkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlF
NDVBMjUxOEExQjI1OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhh
bmRsaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3
QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODYwLDYgKzgzNDEs
NyBAQAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJE
RkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMx
QjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03ODY3LDYgKzgzNDksNyBAQAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBG
VExPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjkxODdERkRFQzAwODNCNjg3
IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUFCMTgw
NEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNs
b3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3
M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg5OSw2ICs4Mzgy
LDcgQEAKIAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNy
ZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxM0UwNEUxNjE2NEExRjAw
REM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVy
cmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA2LDYgKzgzOTAsNyBAQAogCQkJCTlF
QTVDN0EyMTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0aWFsaXplTExWTU1hYy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk5RTcyOTQwODE5MEYwMjFFMDAxQTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJ
WC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3QjFCREFDREM3
MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVj
dGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTcsNiArODQwMiw3IEBACiAJ
CQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg3MTg1Njgz
MzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29u
c29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdG
QSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0
Mzg5MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBp
biBTb3VyY2VzICovLApAQCAtNzk3Myw2ICs4NDU5LDcgQEAKIAkJCQk4NkZBOUU5MTE0MkJCQjJF
MDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBG
OEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tGdW5jdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU2RjFCREFDREM3MDA4MEZGNzQgLyogQWly
QXJnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QUJERjYwMEE0MzdGRUYwMEVDQ0EwMSAvKiBK
U0NhbGxiYWNrT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1N0NGNDU4MTlCRjY2NjIw
MDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4MDFBODE4ODBE
NkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTgwLDYg
Kzg0NjcsOCBAQAogCQkJCTE0N0YzOUQ2MTA3RUMzNzYwMDQyN0E0OCAvKiBKU0NKU1ZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGQ0U0MEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNz
UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1M0NFMDg3MThCQzFBNTYwMEJFREY3NiAvKiBK
U0NvbnNvbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTczMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2
MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0
QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0NvbnRleHRSZWYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTcyMDI4QjYxNzk3NjAxRTAwOTgwMjhDIC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc5OTAsMTYgKzg0NzksMTkgQEAKIAkJCQlGRTM4NEVFNzFBRERC
N0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlENzEwN0VDMzc2MDA0MjdBNDggLyogSlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VDMjcxMDA1REJDOEQgLyogSlNGdW5jdGlvbi5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxRDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dl
clRvQWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAv
KiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9iYWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVGRDAwODUxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QzNBMUE1MThDMDQ5MDIwMEM5NTkzQSAvKiBK
U0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1OTQ1NTkyMTgyNDc0NDcwMENDMzg0MyAvKiBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIzRTkxODkxQjA3NzAwMzFDN0ZBIC8qIEpTR2xv
YmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEU5RDE3QjEw
N0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5zcGVj
dG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTBFNEI2MzE4ODA5REQ1MDA2
OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1lQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUwM0ZBMjkxODhGMTA1OTAwMTEwRjE0IC8qIEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdT
ZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUJGMTg1QkZBQ0MwMDdFOTVB
RCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVD
MTE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwODAxQjg0MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQ
cm9taXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAxOCw2ICs4NTEwLDcgQEAKIAkJCQlFMzE4
Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3Jk
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0U4RDFDMUI5MDEzQzMwMDM0NkI1MiAvKiBKU05h
dGl2ZVN0ZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTE4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjcwMDkwMERB
QzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyogSlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04MDMxLDYgKzg1MjQsNyBAQAogCQkJCUUzRUY4ODc0MUI2NkRGMjMwMDNGMjZDQiAv
KiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2MjU1M0Qx
MTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTJD
MzdGMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTk5MjhGRjNCMThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxh
eUlucHV0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcg
LyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAx
MUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDU5LDYgKzg1NTMsNyBA
QAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAwNjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJN
YXAubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNG
cmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAx
M0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDRkQ4Qzky
MEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZC
NTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODA2Niw5ICs4NTYxLDEyIEBACiAJCQkJMTQ4RjIxQjAxMDdFQzU0MTAw
NDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzU3MTU5MTRBMjAw
MDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZC
NDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBMaXZlT2JqZWN0TGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJEMTY1MDBCRkUyNzIgLyogTExJbnREYXRhLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NEZFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3Vt
ZW50UmVnVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOEIwMTExN0NGMDc4
MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2
ODBBODE0QkE3RkFCMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgwNzcsNiArODU3NSw3IEBACiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAw
RDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlE
REUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2
ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEyRDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0
YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdB
RCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkM1NjhFMDExQTIx
M0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJBUk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04
MDg2LDEwICs4NTg1LDEyIEBACiAJCQkJQTdBNEFFMDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3Jv
QXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDA4NzM5MTdDQkU4
NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRE
RUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyQjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBN
YXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAw
QjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5
RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTQzNDBBNDg0MUE5MDUxQUYwMEQ3M0NDQSAvKiBNYXRoQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODEyOCwxNyArODYyOSwyMSBAQAogCQkJCTBGRjcyOUFEMTY2QUQzNUMw
MDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcy
OUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVl
bmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUYxNjZBRDM1QzAw
MEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1
QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOTBDQUMx
ODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIzMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMg
LyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyRTFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
MDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJCMTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxl
clByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNFNDBEMUI2MThC
NjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQcm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ0NjlERTgxMDdFQzdFNzAwNjUwNDQ2IC8qIFByb3BlcnR5U2xvdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBREUzOUZGRjE2REQxNDRCMDAwM0NENEEgLyogUHJvcGVy
dHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxNDcsMTAgKzg2NTIsMTIgQEAKIAkJCQkw
RjE1Q0QyMjFCQTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5
IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzNjM3QTUxQjYz
MjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZB
N0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUgLyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAwNDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3Vs
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVn
RXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTY0LDYgKzg2NzEsNyBAQAog
CQkJCUE1QkExNUU5MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IubW0gaW4gU291
cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1RUZEMDBDQzM4NDMgLyogUmVtb3RlSW5zcGVjdG9y
RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJF
NjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUwNTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RUUxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3Bl
Y3RvclhQQ0Nvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU1MDE3RUUyNzQ5
MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1Mjc3NzNERTFBQUY4
M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTgyLDYg
Kzg2OTAsNyBAQAogCQkJCUE1NENGMkY5MTg0RUFFREEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0Q0YyRjUxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlw
dFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REE1MTdEMTI4NTgwMDVGNUZGOSAv
KiBTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4NTFCREFDREM3
MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzkwREQ2RDE4MkY0OTk3MDA1ODg4MDcgLyogU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcyOTlEQTExN0QxMjg0ODAwNUY1RkY5IC8qIFNldFByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVFOTg0MzFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBW
YXJhcmdzRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTk2LDYgKzg3MDUsNyBAQAogCQkJ
CTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBTcGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0MxRUFGMTE3OTg3QUI2MDAyOTlEQjIgLyogU3RhY2tWaXNpdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3MzBCNjEzMTI1MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFs
QWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyMTFCREFDREFDMDA4MEZG
NzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUIxMDdFQzdFNzAw
NjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUMw
RUM2MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQzEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODIxMiw2ICs4NzIyLDcgQEAKIAkJCQk3MDVCNDFBRDFBNkU1
MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzA1QjQxQUYxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3lt
Ym9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5
IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0
NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgy
NDAsNiArODc1MSw3IEBACiAJCQkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVj
b3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlFRTBCRkYxQjRBRkI4NTAwMDM4NUM5IC8q
IFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2QzczNTAxQUM5
Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGRTA1MDJDMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxS
ZWdpc3Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQg
LyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjU5LDYgKzg3NzEsNyBAQAogCQkJCTcwOUZC
ODY5MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzA5RkI4NkIxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFy
cmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3RDFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTBCMTQw
NDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE3RTVBQjNBMTc5OUU0QjIwMEQyODMzRCAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODYzQzZEOUMxNTIxMTExQTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxp
emVVQ1MyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODI4NSw2ICs4Nzk4LDExIEBACiAJCQl0YXJn
ZXQgPSAwRkNFRkFCNTE4MDVENjE2MDA0NzJDRTQgLyogbGx2bUZvckpTQyAqLzsKIAkJCXRhcmdl
dFByb3h5ID0gMEZDRUZBQkMxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSAqLzsKIAkJfTsKKwkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVu
ZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0g
MEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLzsKKwkJCXRhcmdldFByb3h5ID0g
MEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJ
fTsKIAkJMEZGOTIyRDMxNEY0NkIyRjAwNDFBMjRFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8g
PSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY0NjgwQTkx
NEJBN0ZEOTAwQkZFMjcyIC8qIExMSW50IE9mZnNldHMgKi87CkBAIC04NDA5LDYgKzg5MjcsMzgg
QEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEZFQzg1QTkxQkRCNUNG
MTAwODBGRjc0IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247
CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2
NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJ
CQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsK
KwkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBY
Q0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMw
MjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJ
YnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJ
bmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGRUM4NUFCMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9m
aWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25m
aWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVj
dXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05B
TUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJMEZFQzg1
QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIx
MzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9
IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNCMTRGNDZCMTMwMDQxQTI0RSAvKiBEZWJ1ZyAq
LyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRp
b25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUu
eGNjb25maWcgKi87CkBAIC04NzYxLDYgKzkzMTEsMTcgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rp
b247CiAJCX07CisJCTBGRUM4NUE4MUJEQjVDRjEwMDgwRkY3NCAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdGIzIiAqLyA9IHsKKwkJCWlzYSA9IFhD
Q29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTBGRUM4
NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLywKKwkJCQkwRkVDODVBQTFCREI1Q0YxMDA4
MEZGNzQgLyogUmVsZWFzZSAqLywKKwkJCQkwRkVDODVBQjFCREI1Q0YxMDA4MEZGNzQgLyogUHJv
ZmlsaW5nICovLAorCQkJCTBGRUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9uICov
LAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1
bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNBMTRGNDZC
MTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdl
dCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJh
dGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHJldmlzaW9u
IDE5MTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQVNT
RU1CTEVSKQogCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJsZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4
MTAwMDAwMDAwdWxsOwpAQCAtNDcsNSArNDksNzAgQEAgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2Fs
bFByb2JlKHN0ZDo6ZnVuYwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7
CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQoreworICAg
IHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOgorICAgICAg
ICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RFcXVhbCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QWJvdmU6CisgICAgICAgIG91dC5w
cmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlT3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZU9yRXF1YWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkJlbG93OgorICAgICAgICBvdXQu
cHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVy
OjpCZWxvd09yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dPckVxdWFsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbjoKKyAgICAg
ICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBN
YWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkdy
ZWF0ZXJUaGFuT3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6TGVzc1RoYW46CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW4iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbDoKKyAgICAg
ICAgb3V0LnByaW50KCJMZXNzVGhhbk9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25k
KQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok92ZXJm
bG93OgorICAgICAgICBvdXQucHJpbnQoIk92ZXJmbG93Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQ6CisgICAgICAgIG91dC5wcmludCgiU2lnbmVk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpQb3NpdGl2ZU9y
WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJQb3NpdGl2ZU9yWmVybyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJa
ZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJv
OgorICAgICAgICBvdXQucHJpbnQoIk5vblplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MTUz
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtMTU5Niw4ICsxNTk2LDE5IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1l
c3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbik7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1h
Y3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwog
I2Vsc2UgLy8gRU5BQkxFKEFTU0VNQkxFUikKIAorbmFtZXNwYWNlIEpTQyB7CisKIC8vIElmIHRo
ZXJlIGlzIG5vIGFzc2VtYmxlciBmb3IgdGhpcyBwbGF0Zm9ybSwgYXQgbGVhc3QgYWxsb3cgY29k
ZSB0byBtYWtlIHJlZmVyZW5jZXMgdG8KIC8vIHNvbWUgb2YgdGhlIHRoaW5ncyBpdCB3b3VsZCBv
dGhlcndpc2UgZGVmaW5lLCBhbGJlaXQgd2l0aG91dCBnaXZpbmcgdGhhdCBjb2RlIGFueSB3YXkK
IC8vIG9mIGRvaW5nIGFueXRoaW5nIHVzZWZ1bC4KQEAgLTE2MTEsNiArMTYyMiw4IEBAIHB1Ymxp
YzoKICAgICBlbnVtIEZQUmVnaXN0ZXJJRCB7IE5vRlBSZWdpc3RlciB9OwogfTsKIAorfSAvLyBu
YW1lc3BhY2UgSlNDCisKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCiAjZW5kaWYgLy8g
TWFjcm9Bc3NlbWJsZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVz
c01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBB
TkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YK
KyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisj
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRj
aGVyIEFkZHJlc3NNYXRjaGVyCisKKyMgTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIEIzIGRvaW5n
IGFnZ3Jlc3NpdmUgcmVhc3NvY2lhdGlvbiBhbmQgY2Fub25jYWxpemF0aW9uIG9mIGludGVnZXIg
YWRkcy4KKyMgV2UnbGwgbmV2ZXIgc2VlIEFkZChBZGQoeCwgY29uc3QxKSwgY29uc3QyKSBiZWNh
dXNlIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlYXNzb2NpYXRlZCBpbnRvCisjIEFkZCh4
LCBjb25zdDEgKyBjb25zdDIpLiBBbHNvLCB3ZSB3aWxsIG5ldmVyIHNlZSBBZGQoY29uc3QsIHgp
LCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgY2Fub25pY2FsaXplZAorIyBpdCB0byBBZGQoeCwgY29u
c3QpLiBUaGF0IHNhaWQsIGluIHRoaXMgY29kZSB3ZSBuZXZlciBtYWtlIGFzc2VydGlvbnMgYWJv
dXQgdGhlc2Ugb3B0aW1pemF0aW9ucworIyBoYXZpbmcgYmVlbiBwZXJmb3JtZWQuIEFsc28sIHNp
bmNlIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9ucyBpbiBCMyBoYXZlIGEgYnVpbHQtaW4gb2Zm
c2V0LCB3ZQorIyBkb24ndCBuZWVkIHRvIG1hdGNoIEFkZCh4LCBjb25zdCkuIFRoYXQgd291bGQg
aGF2ZSBiZWVuIGZvbGRlZCBpbnRvIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9ucworIyBhbHJl
YWR5LiBTbywgdGhlIG9ubHkgZmFuY3kgbWF0aGluZyB0aGlzIGNhbiBkbyBpcyBqdXN0IEJhc2VJ
bmRleCBmb3Jtcy4KKworQWRkU2hpZnQxID0gQWRkKFNobChpbmRleCwgJGxvZ1NjYWxlKSwgYmFz
ZSkKK0FkZFNoaWZ0MiA9IEFkZChiYXNlLCBTaGwoaW5kZXgsICRsb2dTY2FsZSkpCisKK0FkZCA9
IEFkZChsZWZ0LCByaWdodCkKKworRGlyZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKCkKK3sKK30KKwordm9pZCBB
cmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQXJndW1lbnRSZWdWYWx1ZV9oCisjZGVmaW5lIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQXJndW1lbnRSZWdW
YWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQXJndW1lbnRSZWc7IH0KKyAgICAKKyAg
ICB+QXJndW1lbnRSZWdWYWx1ZSgpOworCisgICAgUmVnIGFyZ3VtZW50UmVnKCkgY29uc3QgeyBy
ZXR1cm4gbV9yZWc7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgQXJndW1lbnRSZWdWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdp
biwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQ
UigpID8gcG9pbnRlclR5cGUoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJl
ZykKKyAgICB7CisgICAgICAgIEFTU0VSVChyZWcuaXNTZXQoKSk7CisgICAgfQorCisgICAgUmVn
IG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDgyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Nv
bnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK0Jhc2ljQmxv
Y2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBt
X2luZGV4KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNp
Y0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZh
bHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCitib29sIEJh
c2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVy
biBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6
OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6
cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJl
cGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAg
ICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3Zv
aWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywg
IjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgQjM6OmRlZXBEdW1wKHZh
bHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tfaAorI2RlZmlu
ZSBCM0Jhc2ljQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJl
cXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5j
bHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0Owor
ICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisgICAg
dHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlz
IG1hdGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAgICB1bnNp
Z25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFZhbHVlTGlzdDo6
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVM
aXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIFZhbHVl
TGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdp
bigpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyBy
ZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFs
dWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1
ZXM7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKFZhbHVlKik7CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAg
dW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9j
ayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBGcmVxdWVudGVkQmxvY2sm
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3Vj
Y2Vzc29ycygpIGNvbnN0OworICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKTsKKworICAg
IEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBC
YXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1Y2Nlc3Nv
ckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCk7
CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNz
b3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bVByZWRl
Y2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJh
c2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3By
ZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFBy
ZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3Nv
cnM7IH0KKyAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJl
ZGVjZXNzb3JzOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAg
ICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQ
cmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICBkb3Vi
bGUgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAor
ICAgIC8vIEluc3RhbnRpYXRlIHZpYSBQcm9jZWR1cmUuCisgICAgQmFzaWNCbG9jayh1bnNpZ25l
ZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
IFZhbHVlTGlzdCBtX3ZhbHVlczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7
CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1w
IHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayogYmxv
Y2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykK
KyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0
IEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1wIGRl
ZXBEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNC
bG9ja0R1bXAoYmxvY2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKyNk
ZWZpbmUgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNs
dWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUs
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9j
ZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdW5zaWduZWQgQmFzaWNCbG9jazo6bnVt
U3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVl
PigpLT5udW1TdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBjb25zdCBGcmVxdWVudGVkQmxvY2sm
IEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lu
bGluZSBGcmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3Nvcihp
bmRleCk7Cit9CisKK2lubGluZSBjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNp
Y0Jsb2NrOjpzdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250
cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2s6OlN1Y2Nl
c3Nvckxpc3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKQoreworICAgIHJldHVybiBsYXN0KCkt
PmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgQmFzaWNCbG9j
ayogQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIEJhc2ljQmxv
Y2sqJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBy
ZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUgU3VjY2Vzc29yQ29s
bGVjdGlvbjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2Nr
OjpzdWNjZXNzb3JCbG9ja3MoKQoreworICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJh
c2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK2lubGluZSBTdWNj
ZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nl
c3Nvckxpc3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0
dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29y
TGlzdD4oc3VjY2Vzc29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0
aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19o
CisjZGVmaW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRkUHJlZGVjZXNzb3Io
QmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8m
IHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChwcmVkZWNl
c3NvcnMuY29udGFpbnMocHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBwcmVkZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVjZXNzb3Io
QmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8m
IHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVk
ZWNlc3NvcnNbaV0gPT0gcHJlZGVjZXNzb3IpIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tp
LS1dID0gcHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAgIHByZWRlY2Vzc29ycy5yZW1v
dmVMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQoIXByZWRlY2Vzc29ycy5jb250YWlucyhwcmVk
ZWNlc3NvcikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9v
bCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20s
IEJhc2ljQmxvY2sqIHRvKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVk
ZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgeworICAg
ICAgICAgICAgcHJlZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVjb21w
dXRlcyBwcmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJs
ZS4KK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5
KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAgLy8g
Q2xlYXIgYWxsIHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoYXV0byYgYmxvY2sg
OiBibG9ja3MpCisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisKKyAg
ICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdv
cmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goYmxvY2tzWzBdLmdldCgpKTsKKyAgICB3aGlsZSAo
QmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAg
ICAgaWYgKHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBzdWNjZXNz
b3ItPnByZWRlY2Vzc29ycygpLmFwcGVuZChibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChibG9ja3NbaV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJs
b2Nrc1tpXSA9IG51bGxwdHI7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGls
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVm
aW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9H
cmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3Jh
cGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dv
cmtsaXN0OworCisvLyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFk
IGl0IGFzICJibG9jayB3aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBC
bG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQg
YmxvY2sgd29ya2xpc3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFs
b25nIHdpdGggdGhlIGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVp
bmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1
c2VmdWwgZm9yCisvLyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdo
aWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nl
c3NvciBpbmRleC4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3Jr
bGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0
PEJhc2ljQmxvY2s+PjsKKwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwor
dHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOwor
Cit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNl
dDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9j
a1dvcmtsaXN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVj
aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1Nw
ZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOwor
CituYW1lc3BhY2UgeworCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBz
d2l0Y2ggKGluc3Qub3JpZ2luLT5vcGNvZGUoKSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAg
Y2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAvLyBSZXNDb25kLCBU
bXAsIFRtcAorICAgICAgICByZXR1cm4gMzsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1
cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCitDaGVja1NwZWNpYWw6OkNoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2ln
bmVkIG51bUFyZ3MpCisgICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fbnVtQ2hl
Y2tBcmdzKG51bUFyZ3MpCit7Cit9CisKK0NoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lhbCgpCit7
Cit9CisKK0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYgaW5zdCkg
Y29uc3QKK3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0Lm9yaWdp
bik7CisgICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzaXplKG1fbnVtQ2hlY2tBcmdzKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBtX251bUNoZWNrQXJnczsgaS0tOykKKyAgICAgICAgaGlkZGVuQnJh
bmNoLmFyZ3NbaV0gPSBpbnN0LmFyZ3NbaSArIDFdOworICAgIHJldHVybiBoaWRkZW5CcmFuY2g7
Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNj
b3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBoaWRk
ZW5CcmFuY2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7CisgICAgZm9yRWFjaEFyZ0ltcGwo
bnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGNhbGxiYWNrKTsKK30K
KworYm9vbCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4g
aGlkZGVuQnJhbmNoKGluc3QpLmlzVmFsaWRGb3JtKCkKKyAgICAgICAgJiYgaXNWYWxpZEltcGwo
bnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOworfQorCitib29sIENo
ZWNrU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7
CisgICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9udW1DaGVja0FyZ3Mp
CisgICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3RhY2soYXJnSW5kZXgg
LSAxKTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1D
aGVja0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBD
aGVja1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5l
cmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZmFpbCA9
IGhpZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgIEFTU0VSVChm
YWlsLmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICBW
ZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZhbHVlLT5vcGNvZGUo
KSkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCkKKyAgICAgICAg
ICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+b3Bj
b2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkKKyAgICAgICAg
ICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3Nb
M10pKTsKKyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3Qu
YXJnc1syXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2RlKCkg
PT0gQ2hlY2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMSkpOwor
ICAgIH0KKworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdzICsgMSwg
aW5zdCwgcmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5kKAorICAgICAg
ICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1bmN0aW9uPigK
KyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0Jikg
eworICAgICAgICAgICAgICAgIGZhaWwubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAg
ICAgICAgICAgICAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgICAgICAgICAgICAgU3RhY2tt
YXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICAgIHBhcmFtcy52YWx1
ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOwor
ICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICAgICAgICAgICAgICBwYXJh
bXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICAgICAg
ICAgICAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisgICAgICAg
ICAgICB9KSk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7IC8vIEFzIGZhciBh
cyBBaXIgdGhpbmtzLCB3ZSBhcmUgbm90IGEgdGVybWluYWwuCit9CisKK3ZvaWQgQ2hlY2tTcGVj
aWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCht
X2NoZWNrT3Bjb2RlLCAiKCIsIG1fbnVtQ2hlY2tBcmdzLCAiKSIpOworfQorCit2b2lkIENoZWNr
U3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIgd2l0
aCAiLCBtX251bUNoZWNrQXJncywgIiBhcmdzLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM0NoZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFw
U3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ugd2Fu
dCB0byBsb3dlciBDaGVjayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVuIHdlIHdh
bnQgdG8gcm91dGUgdGhhdCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2RlIGluc3Rl
YWQgb2YgZG9pbmcgYW55dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNrU3BlY2lh
bCB3aWxsIHJlbWVtYmVyCisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2VsZWN0ZWQg
YWxvbmcgd2l0aCB0aGUgbnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdhbnQuIEl0
CisvLyB3aWxsIGNyZWF0ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUgYXBwcm9w
cmlhdGUgYXJncyBmcm9tIHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNhbGwgYW55
IG9mIHRoZSBjYWxsYmFja3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwgQ2hlY2tT
dWIsIGFuZCBDaGVja011bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFyZSB0aGUg
cmV2ZXJzZQorLy8gb2YgdGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQzMiBiLCBh
KS4gRXhjZXB0OgorLy8gLSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBCcmFuY2hO
ZWczMiB4LgorLy8gLSBDaGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwzMiBiLCBh
IGJ1dCB3ZSBwYXNzIEFueSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1NwZWNpYWwg
OiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNpYWwoQWly
OjpPcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsKKworICAg
IC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVzZW50aW5nIHRoZSBicmFu
Y2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAgIEFpcjo6SW5zdCBoaWRkZW5CcmFuY2goY29uc3Qg
QWlyOjpJbnN0JikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWly
OjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYp
IG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBi
b29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsK
KworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlk
ZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5l
cmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2VuZXJhdGlv
bkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0
IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEFpcjo6T3Bjb2RlIG1fY2hlY2tPcGNvZGU7Cisg
ICAgdW5zaWduZWQgbV9udW1DaGVja0FyZ3M7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NoZWNrU3BlY2lh
bF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjND
aGVja1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworQ2hlY2tWYWx1ZTo6fkNoZWNrVmFsdWUoKQoreworfQorCit2b2lkIENo
ZWNrVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVj
a1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ2hlY2tWYWx1ZSA6IHB1YmxpYyBWYWx1
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAg
ICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgY2Fz
ZSBDaGVjazoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfkNoZWNrVmFs
dWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0Fk
ZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011bC4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luLCBs
ZWZ0LCByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ludCh0eXBlKCkpKTsKKyAgICAg
ICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdodC0+dHlwZSgpKTsKKyAgICAgICAgQVNTRVJU
KG9wY29kZSA9PSBDaGVja0FkZCB8fCBvcGNvZGUgPT0gQ2hlY2tTdWIgfHwgb3Bjb2RlID09IENo
ZWNrTXVsKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KKyAgICBD
aGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogcHJlZGljYXRlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9y
aWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBDaGVjayk7
CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVlX2gKKworCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb21tb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRl
ICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitib29sIHNo
b3VsZER1bXBJUigpCit7CisgICAgcmV0dXJuIEZUTDo6dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxl
ZCgpIHx8IEZUTDo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkgfHwgc2hvdWxkRHVtcElSQXRFYWNo
UGhhc2UoKTsKK30KKworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0
dXJuIE9wdGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFs
aWRhdGVJUigpCit7CisgICAgcmV0dXJuIERGRzo6dmFsaWRhdGlvbkVuYWJsZWQoKSB8fCBzaG91
bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0ZUlSQXRF
YWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhh
c2UoKTsKK30KKworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpCit7CisgICAgcmV0dXJu
IE9wdGlvbnM6OnZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSgpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29tbW9u
X2gKKyNkZWZpbmUgQjNDb21tb25faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2lubGluZSBib29sIGlzNjRCaXQoKSB7IHJldHVybiBz
aXplb2Yodm9pZCopID09IDg7IH0KK2lubGluZSBib29sIGlzMzJCaXQoKSB7IHJldHVybiAhaXM2
NEJpdCgpOyB9CisKK2Jvb2wgc2hvdWxkRHVtcElSKCk7Citib29sIHNob3VsZER1bXBJUkF0RWFj
aFBoYXNlKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVIoKTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJ
UkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCk7CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzQ29tbW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0
YXRpdml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
bXV0YXRpdml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21tdXRhdGl2aXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM0NvbW11dGF0aXZpdHkuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0m
IG91dCwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5KQoreworICAgIHN3aXRjaCAoY29tbXV0
YXRpdml0eSkgeworICAgIGNhc2UgQ29tbXV0YXRpdmU6CisgICAgICAgIG91dC5wcmludCgiQ29t
bXV0YXRpdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTm90Q29tbXV0YXRpdmU6Cisg
ICAgICAgIG91dC5wcmludCgiTm90Q29tbXV0YXRpdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NvbW11dGF0aXZpdHlfaAorI2RlZmluZSBCM0NvbW11dGF0aXZpdHlfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0g
Q29tbXV0YXRpdml0eSB7CisgICAgQ29tbXV0YXRpdmUsCisgICAgTm90Q29tbXV0YXRpdmUKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3Mg
UHJpbnRTdHJlYW07Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpD
b21tdXRhdGl2aXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNDb21tdXRhdGl2aXR5X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21wYXJpc29uTWF0
Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4IEBACisjIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIENvbXBhcmlzb25NYXRjaGVyCisK
K1Rlc3RMb2FkTm90WmVybzEgPSBBbmQoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitUZXN0TG9hZE5v
dFplcm8yID0gQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpCitUZXN0Tm90WmVybyA9IEFuZChsZWZ0
LCByaWdodCkKKworVGVzdExvYWRaZXJvMSA9IEVxdWFsKEFuZChMb2FkKGFkZHJlc3MpLCByaWdo
dCksICQwKQorVGVzdExvYWRaZXJvMiA9IEVxdWFsKEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKSwg
JDApCitUZXN0WmVybyA9IEVxdWFsKEFuZChsZWZ0LCByaWdodCksICQwKQorCitMb2FkRXF1YWwx
ID0gRXF1YWwoTG9hZChhZGRyZXNzKSwgcmlnaHQpCitMb2FkRXF1YWwyID0gRXF1YWwobGVmdCwg
TG9hZChhZGRyZXNzKSkKK05vdCA9IEVxdWFsKHZhbHVlLCAkMCkKK0VxdWFsID0gRXF1YWwobGVm
dCwgcmlnaHQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZh
bHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDMyVmFsdWU6On5Db25zdDMyVmFsdWUo
KQoreworfQorCit2b2lkIENvbnN0MzJWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzQ29uc3QzMlZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDMyVmFsdWVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnN0MzJWYWx1ZSA6IHB1
YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bj
b2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQ29uc3QzMjsgfQorICAgIAorICAgIEpTX0VYUE9SVF9Q
UklWQVRFIH5Db25zdDMyVmFsdWUoKTsKKyAgICAKKyAgICBpbnQzMl90IHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDMyVmFsdWUodW5zaWduZWQg
aW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIENvbnN0MzIsIEludDMyLCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAg
ICB7CisgICAgfQorICAgIAorICAgIGludDMyX3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
Q29uc3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2
NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDY0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0NjRWYWx1ZTo6fkNvbnN0NjRW
YWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3Q2NFZhbHVlIDogcHVibGljIFZhbHVlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJu
IG9wY29kZSA9PSBDb25zdDY0OyB9CisgICAgCisgICAgfkNvbnN0NjRWYWx1ZSgpOworICAgIAor
ICAgIGludDY0X3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0NjRWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgOiBW
YWx1ZShpbmRleCwgQ29uc3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZh
bHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNDb25zdDY0VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K0NvbnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25z
dERvdWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0NvbnN0RG91YmxlVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0RG91YmxlVmFsdWVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJs
aWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29k
ZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91
YmxlVmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJs
ZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3Jp
Z2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBk
b3VibGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb250
cm9sVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxv
Y2suaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK0NvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpCit7Cit9CisKK3ZvaWQg
Q29udHJvbFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChsaXN0RHVtcChtX3N1Y2Nlc3NvcnMpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEy
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzQ29udHJvbFZhbHVlX2gKKyNkZWZpbmUgQjNDb250cm9sVmFsdWVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFz
aWNCbG9jazsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29udHJvbFZhbHVlIDogcHVibGlj
IFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIEp1bXA6Cisg
ICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBP
b3BzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU3dpdGNoOiAKKyAg
ICAgICAgICAgIC8vIFRoaXMgaXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEgc3ViY2xh
c3Mgb2YgQ29udHJvbFZhbHVlLCBzbyB3ZSB3YW50CisgICAgICAgICAgICAvLyBzd2l0Y2hWYWx1
ZS0+YXM8Q29udHJvbFZhbHVlPigpIHRvIHJldHVybiBub24tbnVsbC4KKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAy
PiBTdWNjZXNzb3JMaXN0OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbnRyb2xWYWx1ZSgp
OworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vz
c29ycy5zaXplKCk7IH0KKyAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEZy
ZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nl
c3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNv
bnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3Nv
cnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKworcHJvdGVjdGVkOgorICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
ICAgIC8vIFVzZSB0aGlzIGZvciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAg
ICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikK
KyAgICB7CisgICAgfQorCisgICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVsYXRlIHRoaXMuCisg
ICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgorICAgIENvbnRyb2xW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAgICBB
U1NFUlQob3Bjb2RlID09IE9vcHMpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBSZXR1
cm4uCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogcmVzdWx0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IFZvaWQsIG9yaWdpbiwgcmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBS
ZXR1cm4pOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENvbnRyb2xW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgY29uc3Qg
RnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwg
Vm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsKKyAg
ICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKworICAgIC8vIFVzZSB0
aGlzIGZvciBCcmFuY2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAg
ICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgbm8p
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUp
CisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAgICAgIG1fc3Vj
Y2Vzc29ycy5hcHBlbmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChubyk7Cisg
ICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNDb250cm9sVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzRnJlcXVlbmN5Q2xh
c3MuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5
KQoreworICAgIHN3aXRjaCAoZnJlcXVlbmN5KSB7CisgICAgY2FzZSBGcmVxdWVuY3lDbGFzczo6
Tm9ybWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vcm1hbCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBGcmVxdWVuY3lDbGFzczo6UmFyZToKKyAgICAgICAgb3V0LnByaW50KCJSYXJlIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0ZyZXF1ZW5jeUNsYXNzX2gKKyNkZWZp
bmUgQjNGcmVxdWVuY3lDbGFzc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBGcmVxdWVuY3lDbGFzcyA6IHVpbnQ4
X3QgeworICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IGh5cG90aGVzaXMgYWJvdXQgdGhlIGZyZXF1
ZW5jeSBvZiB0aGlzIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QuIFRoaXMgaXMKKyAgICAvLyB0aGUg
Y29tbW9uIGNhc2UuIFdlIGNhbiBzdGlsbCB1c2UgYmFzaWMgYmxvY2sgZnJlcXVlbmN5IGluIHRo
aXMgY2FzZS4KKyAgICBOb3JtYWwsCisKKyAgICAvLyBXZSBleHBlY3QgdGhhdCB0aGlzIGNvbnRy
b2wgZmxvdyBjb25zdHJ1Y3Qgd2lsbCBiZSByZWFjaGVkIHN1cGVyIHJhcmVseS4gSXQncyB2YWxp
ZCB0bworICAgIC8vIHBlcmZvcm0gb3B0aW1pemF0aW9ucyB0aGF0IHB1bmlzaCBSYXJlIGNvZGUu
IE5vdGUgdGhhdCB0aGVyZSB3aWxsIGJlIHNpdHVhdGlvbnMgd2hlcmUgeW91CisgICAgLy8gaGF2
ZSB0byBzb21laG93IGNvbnN0cnVjdCBhIG5ldyBmcmVxdWVuY3kgY2xhc3MgZnJvbSBhIG1lcmdp
bmcgb2YgbXVsdGlwbGUgY2xhc3Nlcy4gV2hlbgorICAgIC8vIHRoaXMgaGFwcGVucywgbmV2ZXIg
Y2hvb3NlIFJhcmU7IGFsd2F5cyBnbyB3aXRoIE5vcm1hbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVj
YXVzZSB3ZQorICAgIC8vIHJlYWxseSBkbyBwdW5pc2ggUmFyZSBjb2RlIHZlcnkgYmFkbHkuCisg
ICAgUmFyZQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6RnJlcXVlbmN5Q2xhc3MpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW5jeUNsYXNzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVudGVkQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVudGVkQmxvY2tfaAorI2Rl
ZmluZSBCM0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVk
QmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW50
ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNH
ZW5lcmF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIK
KyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKyNpbmNsdWRl
ICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUs
IENDYWxsSGVscGVycyYgaml0KQoreworICAgIEFpcjo6Q29kZSBjb2RlOworICAgIGdlbmVyYXRl
VG9BaXIocHJvY2VkdXJlLCBjb2RlKTsKKyAgICBBaXI6OmdlbmVyYXRlKGNvZGUsIGppdCk7Cit9
CisKK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQWlyOjpDb2RlJiBj
b2RlKQoreworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKHBy
b2NlZHVyZSwgImluaXRpYWwiKTsKKworICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAg
ICBkYXRhTG9nKCJJbml0aWFsIEIzOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogQWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKKworICAg
IGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKHByb2NlZHVyZSwgImZp
bmFsIik7CisgICAgCisgICAgaWYgKHNob3VsZER1bXBJUigpKSB7CisgICAgICAgIGRhdGFMb2co
IkIzIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsK
KyAgICB9CisKKyAgICBsb3dlclRvQWlyKHByb2NlZHVyZSwgY29kZSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNHZW5lcmF0ZV9oCisjZGVmaW5lIEIzR2VuZXJhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0K
KworLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwg
YW5kIGdlbmVyYXRlcyBpdCB0byBtYWNoaW5lIGNvZGUgYnkgZmlyc3QKKy8vIGludGVybmFsbHkg
Y29udmVydGluZyB0byBhbiBBaXI6OkNvZGUgYW5kIHRoZW4gZ2VuZXJhdGluZyB0aGF0LgorSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmLCBDQ2FsbEhlbHBlcnMmKTsK
KworLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwg
YW5kIGxvd2VycyBpdCB0byBBaXIuIFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQorLy8gdGhlIEFpciB0
byBtYWNoaW5lIGNvZGUgdXNpbmcgQWlyOjpnZW5lcmF0ZSgpLiBOb3RlIHRoYXQgYW4gQWlyOjpD
b2RlIHdpbGwgaGF2ZSBwb2ludGVycyBpbnRvIHRoZQorLy8gQjM6OlByb2NlZHVyZSwgc28geW91
IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIEIzOjpQcm9jZWR1cmUgb3V0bGl2ZXMgdGhlIEFpcjo6
Q29kZS4KK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNHZW5lcmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyaWNGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEIz
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVxdWVudGVkIGJsb2NrIGlz
IGEgdHVwbGUgb2YgQmFzaWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNzLiBJdCdzIHVzdWFsbHkg
dXNlZCBhcyBhCisvLyBzdWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNC
bG9jaz4KK2NsYXNzIEdlbmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2soCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
bnVsbHB0ciwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1h
bCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fZnJlcXVlbmN5KGZyZXF1
ZW5jeSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdlbmVyaWNG
cmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmxv
Y2sgPT0gb3RoZXIubV9ibG9jaworICAgICAgICAgICAgJiYgbV9mcmVxdWVuY3kgPT0gb3RoZXIu
bV9mcmVxdWVuY3k7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdlbmVyaWNG
cmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRo
aXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IEdlbmVyaWNGcmVxdWVudGVkQmxvY2so
KTsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxv
Y2s7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAg
RnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGZyZXF1ZW5jeSgpICE9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpCisgICAgICAgICAgICBv
dXQucHJpbnQoZnJlcXVlbmN5KCksICI6Iik7CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVt
cChtX2Jsb2NrKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7
CisgICAgRnJlcXVlbmN5Q2xhc3MgbV9mcmVxdWVuY3k7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0dlbmVy
aWNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJ
bmRleE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4
TWFwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1h
cC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4TWFwX2gKKyNkZWZpbmUg
QjNJbmRleE1hcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIG1h
cCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9y
IEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBk
b24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNhbiBoYXZl
IHZlcnkKKy8vIHNwYXJzZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5kZXhNYXAg
eworcHVibGljOgorICAgIGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkKKyAgICB7
CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2l6
ZShzaXplX3Qgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAg
ICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAgIH0KKyAgICAKKyAgICBjb25zdCBWYWx1
ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zl
Y3RvcltrZXktPmluZGV4KCldOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZh
bHVlPiBtX3ZlY3RvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzSW5kZXhNYXBfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzSW5kZXhTZXRfaAorI2RlZmluZSBCM0luZGV4U2V0X2gKKworI2luY2x1ZGUgPHd0Zi9CaXRW
ZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0aGluZ3MgdGhhdCBoYXZl
IGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nrcy4gSXQncyBv
bmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRlIHRvbyBtYW55
IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5IHNwYXJzZQorLy8gaW5k
aWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8gSWYgeW91IHdhbnQgYSBz
ZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Jsb2NrPi4gU28sIFQgPSBC
YXNpY0Jsb2NrLgordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluZGV4U2V0IHsKK3B1Ymxp
YzoKKyAgICBJbmRleFNldCgpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYWRkKFQqIHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUtPmluZGV4KCkpOworICAg
IH0KKworICAgIGJvb2wgY29udGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbV9z
ZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBD
b2xsZWN0aW9uVHlwZT4KKyAgICBjbGFzcyBJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAg
ICBJdGVyYWJsZShjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3QgSW5kZXhT
ZXQmIHNldCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKGNvbGxlY3Rpb24pCisgICAgICAg
ICAgICAsIG1fc2V0KHNldCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3Mg
aXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAg
ICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNv
bGxlY3Rpb24sIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBpdGVyKQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAg
ICwgbV9pdGVyKGl0ZXIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1fY29sbGVjdGlvbi0+YXQoKm1faXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBt
X2l0ZXIrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faXRlciA9PSBvdGhlci5t
X2l0ZXI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSogbV9jb2xsZWN0aW9uOworICAg
ICAgICAgICAgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yIG1faXRlcjsKKyAg
ICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuYmVnaW4oKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5lbmQoKSk7IH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlJiBtX2NvbGxlY3Rp
b247CisgICAgICAgIGNvbnN0IEluZGV4U2V0JiBtX3NldDsKKyAgICB9OworCisgICAgLy8gRm9y
IGJhc2ljIGJsb2NrcywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUp
OworICAgIC8vCisgICAgLy8gRm9yIHZhbHVlcywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZh
bHVlcyhwcm9jZWR1cmUudmFsdWVzKCkpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rp
b25UeXBlPgorICAgIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPiB2YWx1ZXMoY29uc3QgQ29sbGVj
dGlvblR5cGUmIGNvbGxlY3Rpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXRlcmFi
bGU8Q29sbGVjdGlvblR5cGU+KGNvbGxlY3Rpb24pOworICAgIH0KKworICAgIGNvbnN0IEJpdFZl
Y3RvciYgaW5kaWNlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21t
YTsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBpbmRpY2VzKCkuc2V0Qml0cygpKQorICAg
ICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBUOjpkdW1wUHJlZml4LCBpbmRleCk7CisgICAgfQor
Citwcml2YXRlOgorICAgIEJpdFZlY3RvciBtX3NldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gQjNJbmRleFNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5l
cy5oIgorI2luY2x1ZGUgIkIzQWRkcmVzc01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxv
Y2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisjaW5jbHVkZSAiQjNJ
bmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlICJCM0xvd2VyaW5n
TWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRlICJCM1BoYXNl
U2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRz
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBB
aXI7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIExvd2VyVG9BaXIgeworcHVibGljOgorICAgIExv
d2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCisgICAgICAgIDogdmFs
dWVUb1RtcChwcm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQorICAgICAgICAsIGJsb2NrVG9CbG9j
ayhwcm9jZWR1cmUuc2l6ZSgpKQorICAgICAgICAsIHVzZUNvdW50cyhwcm9jZWR1cmUpCisgICAg
ICAgICwgYWRkcmVzc1NlbGVjdG9yKCp0aGlzKQorICAgICAgICAsIGxvd2VyaW5nU2VsZWN0b3Io
KnRoaXMpCisgICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBjb2RlKGNv
ZGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAo
QjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlKQorICAgICAgICAgICAgYmxvY2tUb0Js
b2NrW2Jsb2NrXSA9IGNvZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1ZW5jeSgpKTsKKworICAgICAg
ICAvLyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEg
Z29vZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKKyAgICAgICAgLy8gaG9pc3RlZCBhZGRyZXNz
IGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3AuCisg
ICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlLmJsb2Nrc0luUHJl
T3JkZXIoKSkgeworICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KKyAgICAgICAgICAg
IGluc3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2VzcyBi
bG9ja3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdz
IHdoYXQgYWxsb3dzIHVzCisgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3Rp
dmVseS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOworICAgICAg
ICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBy
dW5Mb3dlcmluZ01hdGNoZXIoY3VycmVudFZhbHVlLCBsb3dlcmluZ1NlbGVjdG9yKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBp
bnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MKKyAgICAg
ICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBp
bnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBp
bnN0c1tpXSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+YXBwZW5k
SW5zdChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBN
YWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAg
ICAgICAgIEFTU0VSVChibG9jay0+c3VjY2Vzc29ycygpLnNpemUoKSA8PSAyKTsKKyAgICAgICAg
ICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9j
a3MoKSkKKyAgICAgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3JzKCku
YXBwZW5kKGJsb2NrVG9CbG9ja1tzdWNjZXNzb3JdKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IFRtcCB0bXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgVG1wJiB0bXAgPSB2YWx1ZVRv
VG1wW3ZhbHVlXTsKKyAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAgICB0bXAgPSBjb2RlLm5l
d1RtcChpc0ludCh2YWx1ZS0+dHlwZSgpKSA/IEFyZzo6R1AgOiBBcmc6OkZQKTsKKyAgICAgICAg
cmV0dXJuIHRtcDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGdpdmVzIHlvdSB0aGUgYWRkcmVzcyBv
ZiB0aGUgZ2l2ZW4gTG9hZCBvciBTdG9yZS4gSWYgaXQncyBub3QgYSBMb2FkIG9yIFN0b3JlLCB0
aGVuCisgICAgLy8gaXQgcmV0dXJucyBBcmcoKS4KKyAgICBBcmcgYWRkcihWYWx1ZSogbWVtb3J5
VmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogdmFsdWUgPSBtZW1vcnlWYWx1ZS0+
YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gQXJnKCk7CisKKyAgICAgICAgcnVuQWRkcmVzc01hdGNoZXIodmFsdWUtPmNoaWxkcmVuKCku
bGFzdCgpLCBhZGRyZXNzU2VsZWN0b3IpOworICAgICAgICByZXR1cm4gYWRkcmVzc1NlbGVjdG9y
LnNlbGVjdGVkQWRkcmVzcy53aXRoT2Zmc2V0KHZhbHVlLT5vZmZzZXQoKSk7CisgICAgfQorCisg
ICAgQXJnIGxvYWRBZGRyKFZhbHVlKiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICBpZiAobG9h
ZFZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkKQorICAgICAgICAgICAgcmV0dXJuIGFkZHIobG9hZFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW0oVmFsdWUq
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAgICAgICAg
ICAgcmV0dXJuIEFyZzo6aW1tKHZhbHVlLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gQXJn
KCk7CisgICAgfQorCisgICAgQXJnIGltbU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChBcmcgcmVzdWx0ID0gaW1tKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJldHVybiB0bXAodmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPEFp
cjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0
YXRpdmU+CisgICAgdm9pZCBhcHBlbmRCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdCA9IHRtcChjdXJyZW50VmFsdWUpOworICAgICAgICAK
KyAgICAgICAgLy8gVGhyZWUtb3BlcmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAgICAgT3Ag
YSwgYiwgYworICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAgICAg
YyA9IGEgT3AgYgorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBB
cmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBD
b21tdXRhdGl2ZSkgeworICAgICAgICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwgcmVzdWx0
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQSBub24tY29tbXV0YXRpdmUgb3Bl
cmF0aW9uIGNvdWxkIGhhdmUgYW4gaW1tZWRpYXRlIGluIGxlZnQuCisgICAgICAgICAgICAgICAg
aWYgKGltbShsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0o
bGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaW1tKHJpZ2h0KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwg
QXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIGltbShy
aWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBUd28tb3BlcmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAgICAgT3AgYSwgYgorICAg
ICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAgICAgYiA9IGIgT3AgYQor
CisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIHByZWZlciB2ZXJzaW9ucyBvZiB0aGUgb3Bl
cmF0aW9uIHRoYXQgaGF2ZSBhIGZ1c2VkIGxvYWQgb3ZlciB0aHJlZQorICAgICAgICAvLyBvcGVy
YW5kIGZvcm1zLgorICAgICAgICAKKyAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0
YXRpdmUpIHsKKyAgICAgICAgICAgIEFyZyBsZWZ0QWRkciA9IGxvYWRBZGRyKGxlZnQpOworICAg
ICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgbGVmdEFkZHIua2luZCgpLCBBcmc6OlRt
cCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVXNlIHRoZSByaWdodCBNb3ZlIG9wY29k
ZS4gSWYgd2UncmUgZGVhbGluZyB3aXRoIDMyLWJpdCB0eXBlcywgd2Ugc2hvdWxkCisgICAgICAg
ICAgICAgICAgLy8gdXNlIE1vdmUzMi4gSWYgd2UncmUgZGVhbGluZyB3aXRoIERvdWJsZXMsIHdl
IHNob3VsZCB1c2UgTW92ZURvdWJsZS4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTMzCisgICAgICAgICAgICAgICAgYXBwZW5k
KE1vdmUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29k
ZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgQXJnIHJpZ2h0QWRkciA9IGxvYWRBZGRyKHJpZ2h0
KTsKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgcmlnaHRBZGRyLmtpbmQoKSwgQXJn
OjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQpOwor
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwg
QXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3VsdCk7Cisg
ICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkg
PSBOb3RDb21tdXRhdGl2ZT4KKyAgICBib29sIHRyeUFwcGVuZFN0b3JlQmluT3AoVmFsdWUqIGxl
ZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGZhaWxzIHRv
IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZWZmZWN0cyBiZXR3ZWVuIHRoZSBMb2FkIGFuZCB0aGUg
U3RvcmUgdGhhdAorICAgICAgICAvLyBjb3VsZCBjbG9iYmVyIHRoZSBsb2FkZWQgdmFsdWUuIFdl
IG5lZWQgdG8gY2hlY2sgc3VjaCB0aGluZ3MgYmVjYXVzZSB3ZSBhcmUgZWZmZWN0aXZlbHkKKyAg
ICAgICAgLy8gc2lua2luZyB0aGUgbG9hZC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzNAorICAgICAgICAKKyAgICAgICAgQXJnIHN0b3Jl
QWRkciA9IGFkZHIoY3VycmVudFZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CisK
KyAgICAgICAgVmFsdWUqIG90aGVyVmFsdWU7CisgICAgICAgIGlmIChhZGRyKGxlZnQpID09IHN0
b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSByaWdodDsKKyAgICAgICAgZWxzZSBp
ZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSAmJiBhZGRyKHJpZ2h0KSA9PSBzdG9yZUFk
ZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gbGVmdDsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBB
cmc6OlRtcCwgc3RvcmVBZGRyLmtpbmQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG90aGVyVmFsdWUpLCBzdG9yZUFkZHIpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQWlyOjpPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMmJi4u
LiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKEluc3Qob3Bj
b2RlLCBjdXJyZW50VmFsdWUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4p
KTsKKyAgICB9CisgICAgCisgICAgSW5kZXhTZXQ8VmFsdWU+IGxvY2tlZDsgLy8gVGhlc2UgYXJl
IHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgorICAgIEluZGV4TWFwPFZhbHVl
LCBUbXA+IHZhbHVlVG9UbXA7CisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxvY2ssIEFpcjo6QmFz
aWNCbG9jayo+IGJsb2NrVG9CbG9jazsKKworICAgIFVzZUNvdW50cyB1c2VDb3VudHM7CisKKyAg
ICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBpbnN0czsKKworICAgIFZhbHVlKiBjdXJyZW50VmFs
dWU7CisKKyAgICAvLyBUaGUgYWRkcmVzcyBzZWxlY3RvciB3aWxsIG1hdGNoIGFueSBwYXR0ZXJu
IHdoZXJlIHRoZSBpbnB1dCBvcGVyYW5kcyBhcmUgYXZhaWxhYmxlIGFzIFRtcHMuCisgICAgLy8g
SXQgZG9lc24ndCBjYXJlIGFib3V0IHNoYXJpbmcuIEl0IHdpbGwgaGFwcGlseSBlbWl0IHRoZSBz
YW1lIGFkZHJlc3MgZXhwcmVzc2lvbiBvdmVyIGFuZCBvdmVyCisgICAgLy8gYWdhaW4gcmVnYXJk
bGVzcyBvZiB0aGUgZXhwcmVzc2lvbidzIGNvbXBsZXhpdHkuIFRoaXMgd29ya3Mgb3V0IGZpbmUs
IHNpbmNlIGF0IHRoZSBtYWNoaW5lCisgICAgLy8gbGV2ZWwsIGFkZHJlc3MgZXhwcmVzc2lvbnMg
YXJlIHN1cGVyIGNoZWFwLiBIb3dldmVyLCB0aGlzIGRvZXMgaGF2ZSBhIGhhY2sgdG8gYXZvaWQK
KyAgICAvLyAidW5ob2lzdGluZyIgYWRkcmVzcyBleHByZXNzaW9ucy4KKyAgICBjbGFzcyBBZGRy
ZXNzU2VsZWN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgQWRkcmVzc1NlbGVjdG9yKExvd2Vy
VG9BaXImIGxvd2VyKQorICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAgICAgICB7
CisgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIG1hdGNoIGFuIGFkZHJlc3MgZXhwcmVz
c2lvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQKKyAgICAgICAgICAgIC8vIGV4cGxp
Y2l0bHkuCisgICAgICAgICAgICByZXR1cm4gIWxvd2VyLnZhbHVlVG9UbXBbcm9vdF07CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFjY2VwdFJvb3RMYXRlKFZhbHVlKikgeyB9CisKKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdElu
dGVybmFscyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFyZ3Vt
ZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKworICAg
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0
T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7
CisgICAgICAgICAgICBpZiAobG93ZXIubG9ja2VkLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYWNjZXB0T3BlcmFuZHMo
YXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKCkg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICAgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKwor
ICAgICAgICBib29sIHRyeUFkZFNoaWZ0MShWYWx1ZSogaW5kZXgsIFZhbHVlKiBsb2dTY2FsZSwg
VmFsdWUqIGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb2dTY2FsZS0+YXNJbnQo
KSA8IDAgfHwgbG9nU2NhbGUtPmFzSW50KCkgPiAzKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6aW5kZXgoCisgICAgICAg
ICAgICAgICAgbG93ZXIudG1wKGJhc2UpLCBsb3dlci50bXAoaW5kZXgpLCAxIDw8IGxvZ1NjYWxl
LT5hc0ludCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCB0cnlBZGRTaGlmdDIoVmFsdWUqIGJhc2UsIFZhbHVlKiBpbmRleCwgVmFsdWUqIGxv
Z1NjYWxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ5QWRkU2hpZnQxKGluZGV4
LCBsb2dTY2FsZSwgYmFzZSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZChWYWx1
ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmlnaHQt
Pmhhc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHByb2R1Y3Rpb24gaXNuJ3Qg
c3RyaWN0bHkgbmVjZXNzYXJ5IHNpbmNlIHdlIGV4cGVjdAorICAgICAgICAgICAgICAgIC8vIExv
YWQoQWRkKEB4LCBAY29uc3QxKSwgb2Zmc2V0ID0gY29uc3QyKSB0byBoYXZlIGFscmVhZHkgYmVl
biBzdHJlbmd0aC1yZWR1Y2VkCisgICAgICAgICAgICAgICAgLy8gdG8gTG9hZChAeCwgb2Zmc2V0
ID0gY29uc3QxICsgY29uc3QyKS4KKyAgICAgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBB
cmc6OmFkZHIobG93ZXIudG1wKGxlZnQpLCByaWdodC0+YXNJbnQzMigpKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2VsZWN0ZWRB
ZGRyZXNzID0gQXJnOjppbmRleChsb3dlci50bXAobGVmdCksIGxvd2VyLnRtcChyaWdodCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeURp
cmVjdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRk
cihsb3dlci50bXAobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93ZXJUb0FpciYgbG93ZXI7CisgICAg
ICAgIEFyZyBzZWxlY3RlZEFkZHJlc3M7CisgICAgfTsKKyAgICBBZGRyZXNzU2VsZWN0b3IgYWRk
cmVzc1NlbGVjdG9yOworCisgICAgLy8gVGhpcyB3aWxsIG1hdGNoIGNvbXBsZXggbXVsdGktdmFs
dWUgZXhwcmVzc2lvbnMsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG5vIHNoYXJpbmcuIEZvciBleGFt
cGxlLAorICAgIC8vIGl0IHdvbid0IG1hdGNoIGEgTG9hZCB0d2ljZSBhbmQgY2F1c2UgdGhlIGdl
bmVyYXRlZCBjb2RlIHRvIGRvIHR3byBsb2FkcyB3aGVuIHRoZSBvcmlnaW5hbAorICAgIC8vIGNv
ZGUganVzdCBkaWQgb25lLgorICAgIGNsYXNzIExvd2VyaW5nU2VsZWN0b3IgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgTG93ZXJpbmdTZWxlY3RvcihMb3dlclRvQWlyJiBsb3dlcikKKyAgICAgICAg
ICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKHJvb3QsICFsb3dlci5sb2NrZWQuY29udGFpbnMocm9vdCkpOworICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFjY2VwdFJvb3RM
YXRlKFZhbHVlKikgeyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgLy8gSWYgb25lIG9m
IHRoZSBpbnRlcm5hbCB0aGluZ3MgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZCwgdGhlbiB3ZSBk
b24ndCB3YW50IHRvIGNhdXNlCisgICAgICAgICAgICAvLyBpdCB0byBiZSByZWNvbXB1dGVkIGFn
YWluLgorICAgICAgICAgICAgaWYgKGxvd2VyLnZhbHVlVG9UbXBbdmFsdWVdKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gV2UgcmVx
dWlyZSBpbnRlcm5hbHMgdG8gaGF2ZSBvbmx5IG9uZSB1c2UgLSB1cy4KKyAgICAgICAgICAgIGlm
IChsb3dlci51c2VDb3VudHNbdmFsdWVdICE9IDEpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgCisgICAgICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFy
Z3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7
IHJldHVybiB0cnVlOyB9CisgICAgICAgIAorICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZShWYWx1ZSogdmFsdWUs
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd2VyLmxv
Y2tlZC5hZGQodmFsdWUpOworICAgICAgICAgICAgYWNjZXB0SW50ZXJuYWxzTGF0ZShhcmd1bWVu
dHMuLi4pOworICAgICAgICB9CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZSgpIHsg
fQorICAgICAgICAKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
ICAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2
YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJu
IGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBh
Y2NlcHRPcGVyYW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3Vt
ZW50cy4uLikgeyB9CisKKyAgICAgICAgYm9vbCB0cnlMb2FkKFZhbHVlKiBhZGRyZXNzKQorICAg
ICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxvd2VyLmN1cnJlbnRWYWx1ZS0+dHlwZSgpKSB7
CisgICAgICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIGxvd2VyLmFwcGVuZChN
b3ZlMzIsIGxvd2VyLmFkZHIoYWRkcmVzcyksIGxvd2VyLnRtcChsb3dlci5jdXJyZW50VmFsdWUp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGNhc2UgSW50NjQ6
CisgICAgICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSkgeworICAgICAgICAgICAgICAgICAgICBs
b3dlci5hcHBlbmQoTW92ZSwgbG93ZXIuYWRkcihhZGRyZXNzKSwgbG93ZXIudG1wKGxvd2VyLmN1
cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2Fz
ZSBEb3VibGU6CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmVEb3VibGUsIGxvd2Vy
LmFkZHIoYWRkcmVzcyksIGxvd2VyLnRtcChsb3dlci5jdXJyZW50VmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYm9v
bCB0cnlBZGQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgeworICAgICAgICAg
ICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgICAgICAgICAgbG93ZXIuYXBwZW5kQmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHRyeVN0b3JlQWRkTG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBWYWx1
ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAg
ICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgICAgIHJldHVybiBsb3dlci50cnlBcHBl
bmRTdG9yZUJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlw
ZXMhCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCB0cnlTdG9yZUFuZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCwgVmFsdWUqKQorICAgICAgICB7CisgICAgICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICByZXR1cm4gbG93
ZXIudHJ5QXBwZW5kU3RvcmVCaW5PcDxBbmQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsK
KyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVu
dCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5U3RvcmUoVmFsdWUqIHZhbHVlLCBWYWx1
ZSopCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQoTW92ZTMy
LCBsb3dlci50bXAodmFsdWUpLCBsb3dlci5hZGRyKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAg
ICAgICAgICAgICBpZiAoaXM2NEJpdCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGxvd2VyLmFw
cGVuZChNb3ZlLCBsb3dlci50bXAodmFsdWUpLCBsb3dlci5hZGRyKGxvd2VyLmN1cnJlbnRWYWx1
ZSkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgY2FzZSBEb3VibGU6
CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmVEb3VibGUsIGxvd2VyLnRtcCh2YWx1
ZSksIGxvd2VyLmFkZHIobG93ZXIuY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5Q29uc3Qz
MigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxvd2VyLmFwcGVuZChNb3ZlLCBsb3dlci5pbW0o
bG93ZXIuY3VycmVudFZhbHVlKSwgbG93ZXIudG1wKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeVJldHVy
bihWYWx1ZSogdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5
cGUoKSkgeworICAgICAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGNhc2UgSW50NjQ6
CisgICAgICAgICAgICAgICAgbG93ZXIuYXBwZW5kKE1vdmUsIGxvd2VyLmltbU9yVG1wKHZhbHVl
KSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgICAgICBsb3dlci5hcHBlbmQo
TW92ZURvdWJsZSwgbG93ZXIudG1wKHZhbHVlKSwgVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBS
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbG93ZXIuYXBwZW5kKFJl
dCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgTG93ZXJUb0FpciYgbG93ZXI7CisgICAgfTsKKyAgICBMb3dlcmluZ1NlbGVjdG9yIGxvd2Vy
aW5nU2VsZWN0b3I7CisgICAgCisgICAgUHJvY2VkdXJlJiBwcm9jZWR1cmU7CisgICAgQ29kZSYg
Y29kZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGxvd2VyVG9BaXIo
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKHByb2NlZHVyZSwgImxvd2VyVG9BaXIiKTsKKyAgICBMb3dlclRvQWlyIGxvd2VyVG9B
aXIocHJvY2VkdXJlLCBjb2RlKTsKKyAgICBsb3dlclRvQWlyLnJ1bigpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzTG93ZXJUb0Fpcl9oCisjZGVmaW5lIEIzTG93ZXJUb0Fpcl9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
UHJvY2VkdXJlOworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKworLy8gVGhpcyBsb3dl
cnMgdGhlIGN1cnJlbnQgQjMgcHJvY2VkdXJlIHRvIGFuIEFpciBjb2RlLgorCit2b2lkIGxvd2Vy
VG9BaXIoUHJvY2VkdXJlJiwgQWlyOjpDb2RlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzTG93ZXJUb0Fpcl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0
ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01h
dGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBA
QAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBMb3dlcmlu
Z01hdGNoZXIKKworIyBUaGVzZSBydWxlcyBhcmUgY29uc2lkZXJlZCBpbiBhIGNhc2NhZGUsIHN0
YXJ0aW5nIGF0IHRoZSB0b3AuIEl0J3MgaW1wbGVuZW50ZWQgdXNpbmcgc3dpdGNoCisjIHN0YXRl
bWVudHMgd2hlcmV2ZXIgcG9zc2libGUuCisKKyMgTm90ZTogYWRkaW5nIG1vcmUgcnVsZXMgdG8g
dGhpcyBtYXRjaGVyIGlzIGFuIGV4Y2VsbGVudCB3YXkgb2YgaW1wcm92aW5nIHBlcmZvcm1hbmNl
IQorCitMb2FkID0gTG9hZChhZGRyZXNzKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK1N0
b3JlQWRkTG9hZCA9IFN0b3JlKEFkZChsZWZ0LCByaWdodCksIGFkZHJlc3MpCitTdG9yZUFuZExv
YWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1
ZSwgYWRkcmVzcykKKworQ29uc3QzMiA9IENvbnN0MzIoKQorCitSZXR1cm4gPSBSZXR1cm4odmFs
dWUpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNNZW1vcnlWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQoreworfQorCit2
b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29mZnNldCk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZpbmUgQjNNZW1v
cnlWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gRklYTUU6IEFkZCBhbGlhcyBh
bmFseXNpcyB0byB0aGVzZSBieSBhbGxvd2luZyB0aGUgY2xpZW50IHRvIGFzc29jaWF0ZSBhbiBp
bnRlZ2VyIHJhbmdlIHRvIHRoZQorLy8gdmFsdWUuIFR3byBvcGVyYXRpb25zIG1heSBhY2Nlc3Mg
dGhlIHNhbWUgbWVtb3J5IGlmIHRoZWlyIHJhbmdlcyBvdmVybGFwcy4KKy8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzUKKworY2xhc3MgTWVtb3J5VmFsdWUg
OiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2Rl
IG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2Ug
TG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZaOgorICAg
ICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICBjYXNl
IExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAg
ICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAgICBpbnQzMl90IG9m
ZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQg
KGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEg
c3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgorICAgIE1l
bW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJfdCBvZmZz
ZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9p
bnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFT
U0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAg
ICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
TG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQx
Nlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5
cGUgPT0gSW50MzIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBM
b2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gRG91YmxlKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAg
Y2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAg
Y2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMg
aW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8gRG91YmxlIDog
SW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
eworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2Fk
OFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6
CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVtb3J5VmFsdWUoCisg
ICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnQzMl90IG9mZnNldCA9IDApCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRl
cikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VS
VF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAg
IGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2Fz
ZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpbnQzMl90IG1fb2Zmc2V0IHsgMCB9OworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNNZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
T3Bjb2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpCit7Cisg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgb3V0LnByaW50KCJO
b3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgIG91dC5w
cmludCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3QzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJDb25zdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENv
bnN0NjQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3Q2NCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJDb25zdERvdWJsZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIG91dC5wcmludCgi
U3RhY2tTbG90Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZ3VtZW50UmVnOgorICAg
ICAgICBvdXQucHJpbnQoIkFyZ3VtZW50UmVnIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEZyYW1lUG9pbnRlcjoKKyAgICAgICAgb3V0LnByaW50KCJGcmFtZVBvaW50ZXIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQWRkOgorICAgICAgICBvdXQucHJpbnQoIkFkZCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdWI6CisgICAgICAgIG91dC5wcmludCgiU3ViIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE11bDoKKyAgICAgICAgb3V0LnByaW50KCJNdWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRGl2OgorICAgICAgICBvdXQucHJpbnQoIkRpdiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICAgICAgb3V0LnByaW50
KCJDaGlsbERpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNb2Q6CisgICAgICAgIG91
dC5wcmludCgiTW9kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdEFuZDoKKyAgICAg
ICAgb3V0LnByaW50KCJCaXRBbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0T3I6
CisgICAgICAgIG91dC5wcmludCgiQml0T3IiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Qml0WG9yOgorICAgICAgICBvdXQucHJpbnQoIkJpdFhvciIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBTaGw6CisgICAgICAgIG91dC5wcmludCgiU2hsIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNTaHI6CisgICAgICAgIG91dC5wcmludCgiU1NociIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBaU2hyOgorICAgICAgICBvdXQucHJpbnQoIlpTaHIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU0V4dDg6CisgICAgICAgIG91dC5wcmludCgiU0V4dDgiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDE2OgorICAgICAgICBvdXQucHJpbnQoIlNFeHQx
NiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MzI6CisgICAgICAgIG91dC5wcmlu
dCgiU0V4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAg
b3V0LnByaW50KCJaRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRlJvdW5kOgor
ICAgICAgICBvdXQucHJpbnQoIkZSb3VuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
VG9EOgorICAgICAgICBvdXQucHJpbnQoIklUb0QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgRFRvSTMyOgorICAgICAgICBvdXQucHJpbnQoIkRUb0kzMiIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RFcXVhbCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAgICAgb3V0LnByaW50
KCJMZXNzVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAg
ICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBMZXNzRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc0VxdWFsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVy
RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJvdmU6CisgICAgICAgIG91dC5w
cmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3c6CisgICAgICAg
IG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJvdmVFcXVh
bDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZUVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dFcXVhbCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIG91dC5wcmludCgiTG9hZDha
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgb3V0LnByaW50
KCJMb2FkOFMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAg
b3V0LnByaW50KCJMb2FkMTZaIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQxNlM6
CisgICAgICAgIG91dC5wcmludCgiTG9hZDE2UyIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBMb2FkRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZEZsb2F0Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIG91dC5wcmludCgiU3RvcmU4Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIG91dC5wcmludCgi
U3RvcmUxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAg
ICBvdXQucHJpbnQoIlN0b3JlRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3Rv
cmU6CisgICAgICAgIG91dC5wcmludCgiU3RvcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ0NhbGw6CisgICAgICAgIG91dC5wcmludCgiQ0NhbGwiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUGF0Y2hwb2ludDoKKyAgICAgICAgb3V0LnByaW50KCJQYXRjaHBvaW50Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBvdXQucHJpbnQoIkNo
ZWNrQWRkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBv
dXQucHJpbnQoIkNoZWNrU3ViIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrTXVs
OgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrTXVsIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENoZWNrOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFVwc2lsb246CisgICAgICAgIG91dC5wcmludCgiVXBzaWxvbiIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBQaGk6CisgICAgICAgIG91dC5wcmludCgiUGhpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEp1bXA6CisgICAgICAgIG91dC5wcmludCgiSnVtcCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIG91dC5wcmludCgiQnJh
bmNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN3aXRjaDoKKyAgICAgICAgb3V0LnBy
aW50KCJTd2l0Y2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmV0dXJuOgorICAgICAg
ICBvdXQucHJpbnQoIlJldHVybiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBPb3BzOgor
ICAgICAgICBvdXQucHJpbnQoIk9vcHMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09w
Y29kZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBPcGNvZGUgOiBp
bnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1c2VmdWwgZm9yIHdo
ZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAgIAorICAgIC8vIFBv
bHltb3JwaGljIGlkZW50aXR5LCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBJZGVu
dGl0eSwKKworICAgIC8vIENvbnN0YW50cy4gVXNlIHRoZSBDb25zdFZhbHVlKiBjbGFzc2VzLiBD
b25zdGFudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28gdGhhdCB3ZSBjYW4KKyAgICAv
LyByZWFzb24gYWJvdXQgd2hlcmUgd2Ugd291bGQgY29uc3RydWN0IHRoZW0uIExhcmdlIGNvbnN0
YW50cyBhcmUgZXhwZW5zaXZlIHRvIGNyZWF0ZS4KKyAgICBDb25zdDMyLAorICAgIENvbnN0NjQs
CisgICAgQ29uc3REb3VibGUsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBzbG90LiBUaGlz
IGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdhcmRs
ZXNzIG9mCisgICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQuIEVhY2ggaW5z
dGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdlIG9mCisgICAg
Ly8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgorICAgIFN0YWNr
U2xvdCwKKworICAgIC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVyLiBUaGlzIGlzIHZp
ZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQorICAgIC8vIHJlZ2Fy
ZGxlc3Mgb2Ygd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQsIGFuZCB0aGUgY29tcGls
ZXIgdGFrZXMgY2FyZSB0byBlbnN1cmUgdGhhdCB3ZQorICAgIC8vIGRvbid0IGNsb2JiZXIgdGhl
IHZhbHVlIGJ5IHJlZ2lzdGVyIGFsbG9jYXRpb24gb3IgY2FsbHMgKGVpdGhlciBieSBzYXZpbmcg
dGhlIGFyZ3VtZW50IHRvIHRoZQorICAgIC8vIHN0YWNrIG9yIHByZXNlcnZpbmcgaXQgaW4gYSBj
YWxsZWUtc2F2ZSByZWdpc3RlcikuIFVzZSB0aGUgQXJndW1lbnRSZWdWYWx1ZSBjbGFzcy4gVGhl
IHJldHVybgorICAgIC8vIHR5cGUgaXMgZWl0aGVyIHBvaW50ZXIoKSAoZm9yIEdQUnMpIG9yIERv
dWJsZSAoZm9yIEZQUnMpLgorICAgIEFyZ3VtZW50UmVnLAorCisgICAgLy8gVGhlIGZyYW1lIHBv
aW50ZXIuIFlvdSBjYW4gcHV0IHRoaXMgYW55d2hlcmUgaW4gY29udHJvbCBmbG93IGJ1dCBpdCB3
aWxsIGFsd2F5cyB5aWVsZCB0aGUKKyAgICAvLyBmcmFtZSBwb2ludGVyLCB3aXRoIGEgY2F2ZWF0
OiBpZiBvdXIgY29tcGlsZXIgY2hhbmdlcyB0aGUgZnJhbWUgcG9pbnRlciB0ZW1wb3JhcmlseSBm
b3Igc29tZQorICAgIC8vIHNpbGx5IHJlYXNvbiwgdGhlIEZyYW1lUG9pbnRlciBpbnRyaW5zaWMg
d2lsbCByZXR1cm4gd2hlcmUgdGhlIGZyYW1lIHBvaW50ZXIgKnNob3VsZCogYmUgbm90CisgICAg
Ly8gd2hlcmUgaXQgaGFwcGVucyB0byBiZSByaWdodCBub3cuCisgICAgRnJhbWVQb2ludGVyLAor
CisgICAgLy8gUG9seW1vcnBoaWMgbWF0aCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisg
ICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorCisgICAgLy8gSW50ZWdlciBt
YXRoLgorICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpT
ICh4L3kpfDAuCisgICAgTW9kLAorICAgIEJpdEFuZCwKKyAgICBCaXRPciwKKyAgICBCaXRYb3Is
CisgICAgU2hsLAorICAgIFNTaHIsCisgICAgWlNociwKKworICAgIC8vIENhc3RzIGFuZCBzdWNo
LgorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIEludDMyOgorICAgIFNFeHQ4LAorICAgIFNFeHQx
NiwKKyAgICAvLyBUYWtlcyBJbnQzMiBhbmQgcmV0dXJucyBJbnQ2NDoKKyAgICBTRXh0MzIsCisg
ICAgWkV4dDMyLAorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBGUm91bmQs
CisgICAgLy8gVGFrZXMgaW50cyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgSVRvRCwKKyAgICAv
LyBUYWtlcyBEb3VibGUgYW5kIHJldHVybnMgSW50MzI6CisgICAgRFRvSTMyLAorCisgICAgLy8g
UG9seW1vcnBoaWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBSZXR1
cm5zIGludDMyIDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCisgICAgLy8gaXMganVzdCBFcXVhbCh4
LCAwKS4KKyAgICBFcXVhbCwKKyAgICBOb3RFcXVhbCwKKyAgICBMZXNzVGhhbiwKKyAgICBHcmVh
dGVyVGhhbiwKKyAgICBMZXNzRXF1YWwsCisgICAgR3JlYXRlckVxdWFsLAorCisgICAgLy8gSW50
ZWdlciBjb21wYXJpc29ucy4gUmV0dXJucyBpbnQzMiAwIG9yIDEuCisgICAgQWJvdmUsCisgICAg
QmVsb3csCisgICAgQWJvdmVFcXVhbCwKKyAgICBCZWxvd0VxdWFsLAorCisgICAgLy8gTWVtb3J5
IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUgbG9hZGVkIHR5cGUu
IFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4gSW50MzI6CisgICAg
TG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAorICAgIExvYWQxNlMsCisgICAgLy8g
VGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisgICAgLy8gVGhpcyByZXR1cm4g
d2hhdGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExvYWQsCisKKyAgICAvLyBNZW1vcnkg
c3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3RvcmVkLiBUaGVzZSB1
c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2YWx1ZToKKyAgICBT
dG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91YmxlIHZhbHVlOgor
ICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3JlIGZvciBJ
bnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAgICAvLyBUaGlzIGlzIGEg
cmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0gQyBjYWxs
aW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50cyBhcmUg
cGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8vIFRoaXMg
aXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFzcy4gVGhpcyBpcyB2
aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9ubHkgZW1pdHMgY29k
ZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBl
bWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNrbWFwIGFsb25nIHdp
dGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQgbXVzdCBiZSBwYXNz
ZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFja21hcCBhcmd1bWVu
dCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVlc3QKKyAgICAvLyB0
aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJvbSB0aGUgdG9wIG9m
IHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3RhY2suCisgICAgUGF0
Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNz
LiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJhdGlvbgorICAgIC8v
IGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNvZGUgYWZ0ZXIgdGhl
IGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8gZnJvbSB0aGUgY2hl
Y2ssIGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0IHRvIHN1cHBseSBh
IHN0YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJlIG5vdCBhbGxvd2VkIHRvIGp1bXAg
YmFjayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91ciBzbG93IHBhdGgsIHNpbmNlIHRo
ZSBjb21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1dGlvbiBvZiB0aGVz
ZSBpbnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhhcHBlbi4gRm9yCisg
ICAgLy8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6CisgICAgLy8KKyAgICAv
LyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLwor
ICAgIC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAgICAvLworICAgIC8v
IGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVudGl0eShhKQorICAgIC8vCisgICAg
Ly8gVGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFja3MgdXNlZCBieSB0aGUg
dHdvIENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAvLyBjYWxsYmFja3Mu
IFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRoZXkgYXJlIGRpZmZl
cmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBDaGVja0Fk
ZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2ZSBwb3NzaWJseSB0
YWtlbiBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25kIENoZWNrQWRkJ3Mg
Y2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0FkZCwKKyAgICBDaGVja1N1YiwKKyAg
ICBDaGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lkZS1leGl0cy4gVXNlIHRoZSBDaGVj
a1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlzIGhhcyBhCisgICAg
Ly8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoaXMgdGFrZXMgYW4gSW50
MzIgYXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisgICAgLy8gZnVsbCBicmFu
Y2ggZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVlIHZhbHVlIGp1bXBz
IHRvIHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0aC4KKyAgICBDaGVjaywKKworICAg
IC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAgICBVcHNpbG9uLCAv
LyBUaGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQaGksCisKKyAgICAvLyBK
dW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgSnVtcCwKKyAgICAKKyAgICAv
LyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBCcmFuY2hl
cyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBDb250cm9sVmFsdWUgY2xh
c3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVlIHN1Y2Nlc3Nvci4K
KyAgICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIgZWl0aGVyIEludDMy
IG9yIEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBTd2l0Y2gsCisKKyAg
ICAvLyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0IGtub3cgdGhlaXIgcmV0
dXJuIHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFueQorICAgIC8vIHR5cGUuIFVzZXMg
dGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisKKyAgICAvLyBUaGlzIGlzIGEg
dGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJlLiBVc2Vz
IHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcworfTsKKworaW5saW5lIGJvb2wgaXND
aGVja01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNh
c2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisK
K2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM09wY29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50ZXIobV9k
YXRhKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNPcmlnaW5faAorI2RlZmluZSBCM09yaWdpbl9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBCM0lSIGNh
biBjaG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlzLCBCMyB3
aWxsIGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29kZSwgd2hp
Y2ggaW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8gdHJhbnNm
b3JtYXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4gZXJyb3Ig
dG8gd3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3JpZ2lucyBv
ciBsaWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4cGxpY2l0
IE9yaWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2RhdGEoZGF0
YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJu
IG1fZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitw
cml2YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3JpZ2lu
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRT
cGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bh
dGNocG9pbnRTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50U3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQjNW
YWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5n
IG5hbWVzcGFjZSBBaXI7CisKK1BhdGNocG9pbnRTcGVjaWFsOjpQYXRjaHBvaW50U3BlY2lhbCgp
Cit7Cit9CisKK1BhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwoKQoreworfQor
Cit2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKAorICAgIEluc3QmIGluc3QsIGNv
bnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAg
ICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBWb2lkKSB7CisgICAgICAgIGZvckVhY2hBcmdJ
bXBsKDAsIDEsIGluc3QsIGNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpEZWYsIGluc3Qub3JpZ2luLT5haXJUeXBlKCkp
OworICAgIGZvckVhY2hBcmdJbXBsKDAsIDIsIGluc3QsIGNhbGxiYWNrKTsKK30KKworYm9vbCBQ
YXRjaHBvaW50U3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0Lm9y
aWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBp
bnN0KTsKKworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGlmIChpbnN0LmFyZ3NbMV0ua2luZCgpICE9IEFyZzo6VG1wKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNUeXBlKGluc3Qub3JpZ2luLT5h
aXJUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaXNWYWxpZElt
cGwoMCwgMiwgaW5zdCk7Cit9CisKK2Jvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNr
KEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+
dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwgMSwgaW5z
dCwgYXJnSW5kZXgpOworCisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwgMiwgaW5zdCwgYXJnSW5kZXgp
OworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hwb2ludFNwZWNpYWw6OmdlbmVyYXRlKAor
ICAgIEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29u
dGV4dCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCog
c3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAgICBBU1NFUlQoc3RhY2ttYXApOworCisg
ICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7CisgICAg
aWYgKGluc3Qub3JpZ2luLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgcmVwcy5hcHBlbmQocmVw
Rm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tvZmZzZXQrK10pKTsKKyAgICBhcHBlbmRS
ZXBzSW1wbChjb250ZXh0LCBvZmZzZXQsIGluc3QsIHJlcHMpOworICAgIAorICAgIFN0YWNrbWFw
OjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKKyAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAg
ICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICBwYXJhbXMucmVwcyA9IHJlcHM7Cisg
ICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisg
ICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworCisgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpkdW1w
SW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiUGF0Y2hwb2lu
dCIpOworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkxvd2VyZWQgQjM6OlBhdGNocG9pbnRW
YWx1ZS4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNw
ZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBv
aW50U3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQYXRj
aHBvaW50U3BlY2lhbF9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFNwZWNpYWxfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc3BlY2lhbCB0aGF0IHJlY29n
bml6ZXMgdGhhdCB0aGVyZSBhcmUgdHdvIHVzZXMgb2YgUGF0Y2hwb2ludDogVm9pZCBhbmQgYW5k
IG5vbi1Wb2lkLgorLy8gSW4gdGhlIFZvaWQgY2FzZSwgdGhlIHN5bnRheCBvZiB0aGUgQWlyIFBh
dGNoIGluc3RydWN0aW9uIGlzOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hwb2ludCwgYXJncy4u
LgorLy8KKy8vIFdoZXJlICJhcmdzLi4uIiBhcmUgdGhlIGxvd2VyZWQgYXJndW1lbnRzIHRvIHRo
ZSBQYXRjaHBvaW50IGluc3RydWN0aW9uLiBJbiB0aGUgbm9uLVZvaWQgY2FzZQorLy8gd2Ugd2ls
bCBoYXZlOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hwb2ludCwgcmVzdWx0LCBhcmdzLi4uCisK
K2NsYXNzIFBhdGNocG9pbnRTcGVjaWFsIDogcHVibGljIFN0YWNrbWFwU3BlY2lhbCB7CitwdWJs
aWM6CisgICAgUGF0Y2hwb2ludFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5QYXRjaHBvaW50U3Bl
Y2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNv
bnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsK
KyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNT
dGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisKKyAgICAvLyBO
T1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhpZGRlbiBicmFuY2gg
YW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2VuZXJhdGVzIHRoZSBz
dGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5l
cmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRpb25Db250ZXh0Jikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2lu
dFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJp
bnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGF0Y2hwb2ludFZh
bHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21h
cCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0
Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQ
YXRjaHBvaW50VmFsdWVfaAorI2RlZmluZSBCM1BhdGNocG9pbnRWYWx1ZV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBhdGNocG9pbnRW
YWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsgfQorCisgICAgflBh
dGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFBhdGNocG9pbnRWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lM
aXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hwb2ludCwgdHlwZSwg
b3JpZ2luLCBjaGlsZHJlbikKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBv
aW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3Bl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3Bl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2Nv
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzUGhhc2VTY29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
Q29tbW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbGlkYXRl
LmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1BoYXNlU2NvcGU6
OlBoYXNlU2NvcGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAg
OiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAo
c2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBiZWZvcmUg
IiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorCisg
ICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9
IHRvQ1N0cmluZyhwcm9jZWR1cmUpOworfQorCitQaGFzZVNjb3BlOjp+UGhhc2VTY29wZSgpCit7
CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0
ZShtX3Byb2NlZHVyZSwgbV9uYW1lLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQjNQaGFzZVNjb3BlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFBoYXNlU2NvcGUgeworICAgIFdURl9NQUtFX05PTkNP
UFlBQkxFKFBoYXNlU2NvcGUpOworcHVibGljOgorICAgIFBoYXNlU2NvcGUoUHJvY2VkdXJlJiwg
Y29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8gdGhpcyBkb2VzIHZhbGlk
YXRpb24KKworcHJpdmF0ZToKKyAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIGNvbnN0
IGNoYXIqIG1fbmFtZTsKKyAgICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCisjaW5j
bHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sKK30KKworUHJvY2VkdXJlOjp+UHJvY2VkdXJl
KCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJlOjphZGRCbG9jayhkb3VibGUgZnJlcXVl
bmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNC
bG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3Vs
dCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAg
ICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gUHJvY2VkdXJlOjpibG9ja3NJblByZU9yZGVyKCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKKyAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1
c2goYXQoMCkpOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmtsaXN0LnBvcCgp
KSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAgd29ya2xpc3Qu
cHVzaChibG9jay0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5Qb3N0T3JkZXIo
KQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0OworICAgIFBvc3RPcmRlckJsb2Nr
V29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChhdCgwKSk7CisgICAgd2hpbGUg
KEJsb2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBzd2l0Y2gg
KGl0ZW0ub3JkZXIpIHsKKyAgICAgICAgY2FzZSBWaXNpdE9yZGVyOjpQcmU6CisgICAgICAgICAg
ICB3b3JrbGlzdC5wdXNoUG9zdChpdGVtLm5vZGUpOworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gaXRlbS5ub2RlLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICAgICAg
d29ya2xpc3QucHVzaChpdGVtLm5vZGUtPnN1Y2Nlc3NvckJsb2NrKGkpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlBvc3Q6CisgICAgICAgICAgICByZXN1
bHQuYXBwZW5kKGl0ZW0ubm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAor
I2RlZmluZSBCM1Byb2NlZHVyZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
UHVyZU5hTi5oIgorI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgUHJv
Y2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1cmUpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJv
Y2VkdXJlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflByb2NlZHVyZSgpOworCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBO
YU4pOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4uLik7CisKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Js
b2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdLmdl
dCgpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGlj
OgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIp
CisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgaXRlcmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2lu
ZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFz
aWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJv
Y2VkdXJlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVy
YXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5k
ZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAg
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+
c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4
Kys7CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBjb25z
dCBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
IH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlz
LCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlz
LCBzaXplKCkpOyB9CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUHJlT3JkZXIo
KTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVyKCk7CisKKyAgICBj
bGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlc0NvbGxl
Y3Rpb24oY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKHByb2NlZHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRl
cmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAg
ICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRv
cihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAg
ICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAgICwgbV9pbmRl
eChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVmFs
dWUqIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fcHJvY2VkdXJlLT5tX3ZhbHVlc1ttX2luZGV4XS5nZXQoKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
aW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgY29uc3QgUHJvY2VkdXJlKiBtX3By
b2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAg
ICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVy
ZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
bV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0KKworICAgICAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgp
OyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9w
cm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFZhbHVlKiBvcGVyYXRv
cltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAg
ICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBWYWx1
ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKyNkZWZp
bmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3
IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlw
ZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2
YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlSW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtp
bmQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0
YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFN0YWNr
U2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICBvdXQu
cHJpbnQoIkFub255bW91cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90
S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBTdGFja1Nsb3RL
aW5kIDogdWludDhfdCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0byBiZSBr
ZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVuZCB0byBlc2NhcGUK
KyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5zIHdoZW4g
dGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjaworICAgIC8vIHNsb3QuCisg
ICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgY291bGQgc2hhcmUgc3BhY2Ug
d2l0aCBvdGhlciBzdGFjayBzbG90cywgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZW4ndCBsaXZlCisg
ICAgLy8gYXQgdGhlIHNhbWUgdGltZS4gVGhlIGNvbXBpbGVyIHN0aWxsIGhhcyB0byBkbyBlc2Nh
cGUgYW5hbHlzaXMsIHNpbmNlIHRoZXNlIGNhbiBiZSBlc2NhcGVkCisgICAgLy8gZXhwbGljaXRs
eSBpbiBJUi4KKyAgICBBbm9ueW1vdXMKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNr
U2xvdEtpbmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0
YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9i
eXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzU3RhY2tTbG90VmFsdWVfaAorI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVlX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1l
c3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFz
cyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9
CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29u
c3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBl
bmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4g
VXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJfdCBvZmZz
ZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gTm90
ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tl
ZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworCisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVu
c2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIFN0YWNrU2xvdCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNp
emUoYnl0ZVNpemUpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9vZmZzZXRG
cm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICBT
dGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRlcihtX29wYXF1ZSksICIs
IHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAgICAgICAiLCBnZW5lcmF0b3IgPSAiLCBS
YXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVy
ZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNrbWFwX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYv
U2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
Q2hlY2tTcGVjaWFsOworY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7CisKK2Ns
YXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAg
ICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisg
ICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0
aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgorICAgICAg
ICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhl
IHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVyczsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihD
Q2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFy
ZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3RhY2ttYXAo
KQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBpZGVudGlm
eSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAtdXNpbmcg
VmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRlIG1heSBl
bmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisgICAgLy8g
YWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIgYmFjayB0
byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdlcmUgdXNp
bmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBwYXJhbWV0
ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9CisgICAgdm9p
ZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENvbnZlbmll
bmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAg
dm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBzZXRPcGFx
dWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qgb3BhcXVl
SW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUoKSk7IH0K
KworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1c2VzIHRo
aXMgU3RhY2ttYXAuIEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50IHRoYXQKKyAgICAvLyByZXR1cm5z
IGEgdmFsdWUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgcmVzdWx0IHZhbHVlLiBJbiBhbGwg
b3RoZXIgY2FzZXMsIGluZGV4IHplcm8gcmVmZXJzCisgICAgLy8gdG8gdGhlIGZpcnN0IGFyZ3Vt
ZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVudCBpcyBub3QgY29uc3RyYWlu
YWJsZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gaW4gYSBDaGVja0FkZCB2YWx1ZSwgaXQgd291bGQg
YmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQgMS4gSW4gYSBDaGVjayB2YWx1
ZSwgaXQKKyAgICAvLyB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kZXggMC4gQnV0
LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCwgeW91IGNhbgorICAgIC8v
IGRlcGVuZCBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBiZWluZyBmaWxsZWQgaW4uCisg
ICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0IFZhbHVlUmVwJiByZXApCisg
ICAgeworICAgICAgICBpZiAoaW5kZXggKyAxIDwgbV9yZXBzLnNpemUoKSkKKyAgICAgICAgICAg
IG1fcmVwcy5ncm93KGluZGV4ICsgMSk7CisgICAgICAgIG1fcmVwc1tpbmRleF0gPSByZXA7Cisg
ICAgfQorCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpCisgICAgewor
ICAgICAgICBtX2Nsb2JiZXJlZC5tZXJnZShzZXQpOworICAgIH0KKworICAgIGNvbnN0IFJlZ2lz
dGVyU2V0JiBjbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb2JiZXJlZDsgfQorCisgICAg
dm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yKQorICAgIHsKKyAg
ICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEdlbmVy
YXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENoZWNrU3BlY2lh
bDsKKyAgICBmcmllbmQgY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNz
IFN0YWNrbWFwU3BlY2lhbDsKKyAgICAKKyAgICB2b2lkKiBtX29wYXF1ZSB7IG51bGxwdHIgfTsK
KyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dl
bmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBt
X3VzZWRSZWdpc3RlcnM7IC8vIFN0YWNrbWFwcyBjb3VsZCBiZSBmdXJ0aGVyIGR1cGxpY2F0ZWQg
YnkgQWlyLCBidXQgdGhhdCdzIHVubGlrZWx5LCBzbyB3ZSBqdXN0IG1lcmdlIHRoZSB1c2VkIHJl
Z2lzdGVycyBzZXRzIGlmIHRoYXQgd2VyZSB0byBoYXBwZW4uCit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0
YWNrbWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVj
aWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRl
eHQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworU3RhY2ttYXBTcGVjaWFsOjpT
dGFja21hcFNwZWNpYWwoKQoreworfQorCitTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNp
YWwoKQoreworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJ
bnN0JiBpbnN0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBWYWx1
ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+
c3RhY2ttYXAoKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgSW5zdCB0aGF0IHVzZXMgdGhlIFN0
YWNrbWFwU3BlY2lhbCBnZXRzIGR1cGxpY2F0ZWQsIHRoZW4gd2UgZW5kIHVwIG1lcmdpbmcgdXNl
ZAorICAgIC8vIHJlZ2lzdGVyIHNldHMgZnJvbSBtdWx0aXBsZSBwbGFjZXMuIFRoaXMgY3VycmVu
dGx5IHdvbid0IGhhcHBlbiBzaW5jZSBBaXIgZG9lc24ndCBoYXZlIHRhaWxkdXAKKyAgICAvLyBv
ciB0aGluZ3MgbGlrZSB0aGF0LiBCdXQgbWF5YmUgZXZlbnR1YWxseSBpdCBjb3VsZCBiZSBhIHBy
b2JsZW0uCisgICAgc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVycy5tZXJnZSh1c2VkUmVnaXN0ZXJz
KTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVy
ZWRSZWdzKEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47Cisg
ICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICByZXR1cm4g
c3RhY2ttYXAtPmNsb2JiZXJlZCgpOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFj
aEFyZ0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdu
b3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVh
Y2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVk
LgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAg
ICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOwor
ICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUt
PmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgCisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyAr
K2kpIHsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRCM0FyZ3Nd
OworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRBaXJB
cmdzKTsKKworICAgICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNlLCBBcmc6OnR5cGVGb3JCM1R5
cGUoY2hpbGQtPnR5cGUoKSkpOworICAgIH0KK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6Omlz
VmFsaWRJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUln
bm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5z
dC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFw
cGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3Mp
OworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJn
cyk7CisKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAg
IEFTU0VSVChzdGFja21hcCk7CisKKyAgICAvLyBGb3IgdGhlIEluc3QgdG8gYmUgdmFsaWQsIGl0
IG5lZWRzIHRvIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGlu
c3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2YWx1ZS0+Y2hpbGRyZW4oKS5z
aXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAv
LyBSZWdhcmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBzb21lIGJhc2ljIHJl
cXVpcmVtZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAgICAvLyBleGFtcGxlLCB5b3Ug
Y2FuJ3QgaGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBj
b25kaXRpb25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1lbnQgdHlwZXMuCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdz
OyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25v
cmVkQjNBcmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRB
aXJBcmdzXTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAg
ICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBjYXNlIEFy
Zzo6SW1tNjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgY2FzZSBBcmc6OkNh
bGxBcmc6CisgICAgICAgICAgICBicmVhazsgLy8gT0sKKyAgICAgICAgY2FzZSBBcmc6OkFkZHI6
CisgICAgICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpCisgICAgICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJs
ZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBB
cmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAgICAgICAgaWYgKCFhcmcuaXNU
eXBlKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRo
ZSBudW1iZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVt
YmVyIG9mIEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChzdGFja21hcC0+bV9yZXBzLnNpemUoKSA8
PSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkpOworCisgICAgLy8gVmVyaWZ5IGFueSBleHBsaWNp
dGx5IHN1cHBsaWVkIGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9y
ZWRCM0FyZ3M7IGkgPCBzdGFja21hcC0+bV9yZXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZh
bHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFyZyA9IGlu
c3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsKKworICAg
ICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55Ogor
ICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAg
ICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAg
ICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6
CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9u
LgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChh
cmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6
OkNvbnN0YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXBy
ZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25v
cmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCB1
bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAg
ICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVuc2lnbmVk
IHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsgbnVtSWdu
b3JlZEIzQXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5tX3Jl
cHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8gY29u
c3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9u
bHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBpbnB1
dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8gYSBD
YWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0luZGV4
XS5raW5kKCkgPT0gVmFsdWVSZXA6OkFueSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBy
ZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgK
KyAgICBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3Ms
IEluc3QmIGluc3QsIFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkKK3sKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBudW1JZ25vcmVkQXJnczsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkKKyAgICAg
ICAgcmVzdWx0LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW2ldKSk7
Cit9CisKK1ZhbHVlUmVwIFN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKENvZGUmIGNvZGUsIGNv
bnN0IEFyZyYgYXJnKQoreworICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgIGNhc2UgQXJn
OjpUbXA6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAg
ICByZXR1cm4gVmFsdWVSZXA6OmNvbnN0YW50KGFyZy52YWx1ZSgpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgIGlmIChhcmcuYmFzZSgpID09IFRtcChHUFJJ
bmZvOjpjYWxsRnJhbWVSZWdpc3RlcikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0
YWNrKGFyZy5vZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChhcmcuYmFzZSgpID09IFRtcChNYWNy
b0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVl
UmVwOjpzdGFjayhhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVw
KCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNw
ZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFw
U3BlY2lhbF9oCisjZGVmaW5lIEIzU3RhY2ttYXBTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIEFpciB7IGNsYXNz
IENvZGU7IH0KKworLy8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRoYXQgaGF2
ZSBzdGFja21hcHMuIE5vdGUgdGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAgYnkKKy8vIGFz
a2luZyBmb3IgdGhlIEluc3QncyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3RzIGRvbid0IG5l
ZWQgdG8gZXZlbiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAuCisKK2NsYXNz
IFN0YWNrbWFwU3BlY2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGljOgorICAgIFN0
YWNrbWFwU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgpOworCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEFpcjo6SW5zdCYsIGNvbnN0IFJl
Z2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJl
cmVkUmVncyhBaXI6Okluc3QmKSBvdmVycmlkZTsKKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRv
ZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4g
V2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQu
CisKKyAgICB2b2lkIGZvckVhY2hBcmdJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVk
QjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jiwg
Y29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOworICAgIGJv
b2wgaXNWYWxpZEltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2ln
bmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmKTsKKyAgICBib29sIGFk
bWl0c1N0YWNrSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWdu
ZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0lu
ZGV4KTsKKworICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRoZSBJbnN0J3MgYXJncywgc3Rh
cnRpbmcgd2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVuIHZlY3Rvci4KKyAgICB2b2lk
IGFwcGVuZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmLCB1bnNpZ25lZCBudW1JZ25v
cmVkQXJncywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYpOworCisgICAgc3RhdGljIFZh
bHVlUmVwIHJlcEZvckFyZyhBaXI6OkNvZGUmLCBjb25zdCBBaXI6OkFyZyYpOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNTdGFja21hcFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgZ2VuZXJpYyB3cmFwcGVyIGFyb3VuZCBs
aXN0cyBvZiBmcmVxdWVudGVkIGJsb2Nrcywgd2hpY2ggZ2l2ZXMgeW91IGp1c3QgdGhlIGJsb2Nr
cy4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaywgdHlwZW5hbWUgU3VjY2Vzc29yTGlz
dD4KK2NsYXNzIFN1Y2Nlc3NvckNvbGxlY3Rpb24geworcHVibGljOgorICAgIFN1Y2Nlc3NvckNv
bGxlY3Rpb24oU3VjY2Vzc29yTGlzdCYgbGlzdCkKKyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAg
ICB7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6
ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBt
X2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYXQoc2l6ZV90IGluZGV4
KSB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVy
YXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQmFz
aWNCbG9jayomIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0K
KworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkK
KyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoU3VjY2Vzc29y
Q29sbGVjdGlvbiYgY29sbGVjdGlvbiwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX2Nv
bGxlY3Rpb24oJmNvbGxlY3Rpb24pIC8vIGNvbnN0IGlzIHN0dXBpZCBhbnl3YXkuCisgICAgICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJh
c2ljQmxvY2sqJiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAg
ICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVy
biBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCitwcml2YXRlOgorICAgIFN1Y2Nlc3Nvckxpc3QmIG1f
bGlzdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN3aXRjaENhc2U6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jYXNlVmFsdWUsICItPiIsIG1f
dGFyZ2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hDYXNlX2gKKyNkZWZpbmUgQjNT
d2l0Y2hDYXNlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50
ZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRjaENhc2UoKQorICAgIHsKKyAgICB9CisK
KyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVlLCBjb25zdCBGcmVxdWVudGVkQmxvY2sm
IHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VWYWx1ZShjYXNlVmFsdWUpCisgICAgICAgICwgbV90
YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gISFtX3RhcmdldDsgfQorCisgICAgaW50NjRfdCBjYXNlVmFsdWUo
KSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1ZTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayB0YXJn
ZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorICAgIEJhc2ljQmxvY2sqIHRhcmdldEJs
b2NrKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuYmxvY2soKTsgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludDY0X3QgbV9jYXNl
VmFsdWU7CisgICAgRnJlcXVlbnRlZEJsb2NrIG1fdGFyZ2V0OworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNT
d2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZh
bHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hWYWx1ZTo6flN3aXRjaFZhbHVlKCkKK3sK
K30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCkK
K3sKKyAgICBGcmVxdWVudGVkQmxvY2sgcmVzdWx0QmxvY2sgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhd
OworICAgIGludDY0X3QgcmVzdWx0VmFsdWUgPSBtX3ZhbHVlc1tpbmRleF07CisgICAgbV9zdWNj
ZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0KCk7CisgICAgbV9zdWNjZXNzb3JzLnJl
bW92ZUxhc3QoKTsKKyAgICBtX3ZhbHVlc1tpbmRleF0gPSBtX3ZhbHVlcy5sYXN0KCk7CisgICAg
bV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiBTd2l0Y2hDYXNlKHJlc3VsdFZhbHVl
LCByZXN1bHRCbG9jayk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFwcGVuZENhc2UoY29uc3Qg
U3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG1fc3Vj
Y2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nlc3NvcnMuc2l6ZSgpIC0g
Ml0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChzd2l0Y2hDYXNl
LmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRlc3RydWN0aXZlbHkgb3ZlcnJpZGVzIENv
bnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisgICAgb3V0LnByaW50KGxpc3REdW1wKCp0aGlzKSwg
IiwgZmFsbFRocm91Z2ggPSAiLCBmYWxsVGhyb3VnaCgpKTsKK30KKworU3dpdGNoVmFsdWU6OlN3
aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVk
QmxvY2smIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gsIFZv
aWQsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAorI2RlZmluZSBCM1N3aXRjaFZh
bHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5o
IgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29k
ZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8gbnVtQ2FzZVZh
bHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVl
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8gVGhlIHN1Y2Nl
c3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4LgorICAgIGludDY0
X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRl
eF07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGNhc2VWYWx1ZXMoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgRnJlcXVlbnRlZEJsb2NrIGZhbGxUaHJvdWdo
KCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorICAgIEZyZXF1ZW50ZWRC
bG9jayYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisKKyAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtQ2FzZVZhbHVlcygpOyB9CisgICAg
U3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nlc3NvcihpbmRleCkpOworICAgIH0K
KyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2go
bnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBpdGVyYXRvcihjb25zdCBTd2l0Y2hWYWx1ZSYgc3dpdGNoVmFsdWUsIHVuc2ln
bmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dpdGNoVmFsdWUpCisgICAgICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFN3
aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc3dp
dGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgY29uc3QgU3dpdGNoVmFsdWUqIG1fc3dpdGNoOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIH07CisKKyAgICB0eXBlZGVmIGl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAg
ICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsg
fQorCisgICAgLy8gVGhpcyByZW1vdmVzIHRoZSBjYXNlIGFuZCByZW9yZGVycyB0aGluZ3MgYSBi
aXQuIElmIHlvdSdyZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZyb20gMCB0byBOLAorICAgIC8vIHRo
ZW4geW91IGNhbiBrZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlzIHNvIGxvbmcgYXMgeW91IHJldmlz
aXQgdGhpcyBzYW1lIGluZGV4ICh3aGljaCB3aWxsIG5vdworICAgIC8vIGNvbnRhaW4gc29tZSBv
dGhlciBjYXNlIHZhbHVlKS4gVGhpcyByZW1vdmVzIHRoZSBjYXNlIHRoYXQgd2FzIHJlbW92ZWQu
CisgICAgU3dpdGNoQ2FzZSByZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KTsKKworICAgIHZvaWQg
YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1
bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpOworCisgICAgVmVjdG9y
PGludDY0X3Q+IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1
c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6
CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
bnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNUeXBlX2gK
KyNkZWZpbmUgQjNUeXBlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Nv
bW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gVHlwZSB7CisgICAgVm9pZCwKKyAgICBJbnQzMiwKKyAg
ICBJbnQ2NCwKKyAgICBEb3VibGUKK307CisKK2lubGluZSBib29sIGlzSW50KFR5cGUgdHlwZSkK
K3sKKyAgICByZXR1cm4gdHlwZSA9PSBJbnQzMiB8fCB0eXBlID09IEludDY0OworfQorCitpbmxp
bmUgYm9vbCBpc0Zsb2F0KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBEb3VibGU7
Cit9CisKK2lubGluZSBUeXBlIHBvaW50ZXJUeXBlKCkKK3sKKyAgICBpZiAoaXMzMkJpdCgpKQor
ICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0OworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxv
blZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSgp
Cit7Cit9CisKK3ZvaWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgiXiIsIG1fcGhpLT5pbmRleCgpKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2lsb25WYWx1ZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVXBzaWxvblZhbHVlIDogcHVibGljIFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsg
cmV0dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9CisKKyAgICB+VXBzaWxvblZhbHVlKCk7CisKKyAg
ICBWYWx1ZSogcGhpKCkgY29uc3QgeyByZXR1cm4gbV9waGk7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIFVwc2lsb25WYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhpKQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwgdmFsdWUpCisgICAgICAgICwg
bV9waGkocGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gcGhpLT50
eXBlKCkpOworICAgIH0KKworICAgIFZhbHVlKiBtX3BoaTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVXBz
aWxvblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM1VzZUNvdW50cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJv
Y2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVc2VDb3VudHM6
OlVzZUNvdW50cyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICA6IG1fY291bnRzKHByb2NlZHVy
ZS52YWx1ZXMoKS5zaXplKCkpCit7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jZWR1cmUu
dmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4o
KSkKKyAgICAgICAgICAgIG1fY291bnRzW2NoaWxkXSsrOworICAgIH0KK30KKworVXNlQ291bnRz
Ojp+VXNlQ291bnRzKCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNl
Q291bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291
bnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3Vu
dHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVc2VDb3VudHNfaAorI2RlZmlu
ZSBCM1VzZUNvdW50c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNJbmRl
eE1hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgVXNlQ291bnRzIHsKK3B1YmxpYzoK
KyAgICBVc2VDb3VudHMoUHJvY2VkdXJlJik7CisgICAgflVzZUNvdW50cygpOworCisgICAgdW5z
aWduZWQgb3BlcmF0b3JbXShWYWx1ZSogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9jb3VudHNbdmFsdWVdOworICAgIH0KK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8VmFsdWUs
IHVuc2lnbmVkPiBtX2NvdW50czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVXNlQ291bnRzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNp
bmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCituYW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAg
IFZhbGlkYXRlcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3Qg
Y2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAg
ICAgICwgbV93aGVuKHdoZW4pCisgICAgICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisg
ICAgeworICAgIH0KKworI2RlZmluZSBWQUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBmYWlsKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9G
VU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAo
ZmFsc2UpCisKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBIYXNoU2V0PEJhc2ljQmxv
Y2sqPiBibG9ja3M7CisgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAgICAg
ICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5CbG9jazsKKworICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9wcm9jZWR1cmUpIHsKKyAgICAgICAgICAgIGJsb2Nrcy5hZGQoYmxvY2sp
OworICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spCisgICAgICAgICAgICAg
ICAgdmFsdWVJbkJsb2NrLmFkZCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJlLnZhbHVlcygpKQorICAgICAgICAgICAgdmFsdWVJblBy
b2MuYWRkKHZhbHVlKTsKKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9j
KQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2sp
CisgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQg
IiwgKnZhbHVlKSk7CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykg
eworICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyhjaGlsZCksICgiQXQg
IiwgKnZhbHVlLCAiLT4iLCBwb2ludGVyRHVtcChjaGlsZCkpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgIGZvciAo
QmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5jb250YWlu
cyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaywgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29y
KSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhN
RTogRXhwYW5kIHRoaXMgdmFsaWRhdGlvbiBwaGFzZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ4MAorICAgIH0KKworcHJpdmF0ZToKKyAg
ICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciog
ZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hh
ciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBD
U3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmlu
dFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkIzIFZBTElEQVRJT04gRkFJTFVS
RVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIsIGZp
bGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgi
ICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgaWYgKG1fd2hlbikKKyAgICAgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgICBEdXJpbmcgIiwgbV93aGVuLCAiXG4iKTsKKyAgICAgICAg
ICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmluZygpOworICAgICAgICB9CisKKyAgICAg
ICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsK
KyAgICAgICAgICAgIGRhdGFMb2coIkJlZm9yZSAiLCBtX3doZW4sICI6XG4iKTsKKyAgICAgICAg
ICAgIGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nKCJB
dCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhtX3Byb2NlZHVyZSk7CisK
KyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2Vy
dGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOwor
ICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJl
OworICAgIGNvbnN0IGNoYXIqIG1fd2hlbjsKKyAgICBjb25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7
Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1
cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkK
K3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKHByb2NlZHVyZSwgd2hlbiwgZHVtcEJlZm9yZSk7
CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxp
ZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbGlkYXRlX2gKKyNkZWZp
bmUgQjNWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCit2b2lkIHZhbGlkYXRlKFByb2Nl
ZHVyZSYsIGNvbnN0IGNoYXIqIHdoZW4gPSBudWxscHRyLCBjb25zdCBjaGFyKiBkdW1wQmVmb3Jl
ID0gbnVsbHB0cik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+Cisj
aW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjb25zdCBjaGFyKiBjb25zdCBWYWx1ZTo6ZHVtcFByZWZpeCA9ICJAIjsK
KworVmFsdWU6On5WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRp
dHkoVmFsdWUqIHZhbHVlKQoreworICAgIC8vIFRoaXMgaXMgYSBiaXQgY3JhenkuIEl0IGRvZXMg
YW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQgb2Ygd2hhdGV2ZXIgVmFsdWUgc3ViY2xhc3MgdGhpcyBp
cyB3aXRoCisgICAgLy8gYSBwbGFpbiBJZGVudGl0eSBWYWx1ZS4gV2UgZmlyc3QgY29sbGVjdCBh
bGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQsIHRoZW4gd2UgZGVzdHJ1Y3QgdGhlCisgICAg
Ly8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0aGVuIHdlIGNvbnN0cnVjdCB0aGUgSWRl
bnRpdHkgVmFsdWUgaW4gcGxhY2UuCisKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7Cisg
ICAgVHlwZSB0eXBlID0gbV90eXBlOworICAgIE9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAg
ICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworICAgIFZhbHVlKiByZXBsYWNlbWVu
dCA9IHRoaXMtPnJlcGxhY2VtZW50OworCisgICAgUkVMRUFTRV9BU1NFUlQodHlwZSA9PSB2YWx1
ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKworICAgIG5ldyAodGhp
cykgVmFsdWUoaW5kZXgsIElkZW50aXR5LCB0eXBlLCBvcmlnaW4sIHZhbHVlKTsKKworICAgIHRo
aXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsK
K30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhOb3AoKQoreworICAgIHVuc2lnbmVkIGluZGV4
ID0gbV9pbmRleDsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9j
ayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5y
ZXBsYWNlbWVudDsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKworICAgIG5ldyAodGhp
cykgVmFsdWUoaW5kZXgsIE5vcCwgVm9pZCwgb3JpZ2luKTsKKworICAgIHRoaXMtPm93bmVyID0g
b3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKK30KKwordm9pZCBW
YWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1w
UHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwg
bV9vcGNvZGUpOworCisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1h
OworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3Ry
aW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBz
dHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOworCisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK3Zv
aWQgVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3QKK3sKK30KKworVHlwZSBWYWx1
ZTo6dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkKK3sKKyAgICBzd2l0
Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBBZGQ6CisgICAgY2Fz
ZSBTdWI6CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBEaXY6CisgICAgY2FzZSBDaGlsbERpdjoK
KyAgICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNh
c2UgQml0WG9yOgorICAgIGNhc2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAgICBjYXNlIFpTaHI6
CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tN
dWw6CisgICAgICAgIHJldHVybiBmaXJzdENoaWxkLT50eXBlKCk7CisgICAgY2FzZSBGcmFtZVBv
aW50ZXI6CisgICAgICAgIHJldHVybiBwb2ludGVyVHlwZSgpOworICAgIGNhc2UgU0V4dDg6Cisg
ICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBj
YXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoK
KyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFi
b3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2UgQmVs
b3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGNhc2UgU0V4dDMyOgorICAgIGNh
c2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7CisgICAgY2FzZSBGUm91bmQ6CisgICAg
Y2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gRG91YmxlOworICAgIGNhc2UgTm9wOgorICAgICAg
ICByZXR1cm4gVm9pZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1ZhbHVlX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJCM09w
Y29kZS5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFz
cyBTdGFja21hcDsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgVmFsdWUgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSosIDM+IEFkamFjZW5jeUxpc3Q7CisKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIH5WYWx1ZSgp
OworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAg
CisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNvZGUgaXMgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJl
cGxhY2luZyB2YWx1ZXMgd2l0aCBpZGVudGl0eS4KKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3Qg
eyByZXR1cm4gbV9vcGNvZGU7IH0KKworICAgIE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVy
biBtX29yaWdpbjsgfQorICAgIAorICAgIFZhbHVlKiYgY2hpbGQodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisgICAgVmFsdWUqIGNoaWxkKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorCisgICAgLy8gVGhpcyBj
b21wdXRlcyB0aGUgdHlwZSB1c2luZyB0aGUgb3Bjb2RlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0
IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgLy8gVGhpcyBpcyB1c2VmdWwgd2hlbiBsb3dlcmlu
Zy4gTm90ZSB0aGF0IHRoaXMgaXMgb25seSB2YWxpZCBmb3Igbm9uLXZvaWQgdmFsdWVzLgorICAg
IEFpcjo6QXJnOjpUeXBlIGFpclR5cGUoKSBjb25zdCB7IHJldHVybiBBaXI6OkFyZzo6dHlwZUZv
ckIzVHlwZSh0eXBlKCkpOyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0
dXJuIG1fY2hpbGRyZW47IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBj
b25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRp
dHkoVmFsdWUqKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisKKyAgICAvLyBUaGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBleGFtcGxlLCBp
ZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZlIGEKKyAgICAv
LyBBcmd1bWVudFJlZ1ZhbHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8gaWYgKEFyZ3Vt
ZW50UmVnVmFsdWUqIGFyZ3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCkp
IHsKKyAgICAvLyAgICAgdGhpbmdzCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gVGhpcyB3aWxs
IHJldHVybiBudWxsIGlmIHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRoaXMgd29ya3Mg
YmVjYXVzZSB0aGlzIHJldHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2VwdHMob3Bjb2Rl
KCkpIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhcygp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25zdDsKKyAg
ICAKKyAgICBib29sIGhhc0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0ludDMyKCkgY29u
c3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQ2
NCgpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50
KCkgY29uc3Q7CisgICAgYm9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdDsKKworICAgIGJv
b2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisKKyAg
ICBTdGFja21hcCogc3RhY2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBk
dW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgUHJvY2VkdXJlOworCitwcm90ZWN0ZWQ6CisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVz
IHZpYSBQcm9jZWR1cmUuCisgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhl
IHR5cGUgZXhwbGljaXRseToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUp
CisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAg
ICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAg
IH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRs
eSB3aGVuIHRoZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVuOgorICAgIGV4cGxpY2l0IFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisg
ICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAg
ICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAg
ICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVy
IHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwg
bV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RD
aGlsZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57
IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZv
cm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRo
ZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRz
OgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUo
b3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAg
ICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9y
bSBmb3IgdmFyYXJncy4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2Rl
IG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBj
aGlsZHJlbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9w
Y29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4p
CisgICAgICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikKKyAgICB7CisgICAgfQorCitwcml2YXRl
OgorICAgIHN0YXRpYyBUeXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCk7CisK
KyAgICAvLyBUaGlzIGdyb3VwIG9mIGZpZWxkcyBpcyBhcnJhbmdlZCB0byBmaXQgaW4gNjQgYml0
cy4KKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIE9wY29kZSBtX29wY29kZTsKKyAgICBUeXBl
IG1fdHlwZTsKKyAgICAKKyAgICBPcmlnaW4gbV9vcmlnaW47CisgICAgQWRqYWNlbmN5TGlzdCBt
X2NoaWxkcmVuOworCitwdWJsaWM6CisgICAgQmFzaWNCbG9jayogb3duZXIgeyBudWxscHRyIH07
IC8vIGNvbXB1dGVkIGxhemlseS4KKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgeyBudWxscHRyIH07
IC8vIHVzZWQgZm9yIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCit9OworCitjbGFzcyBE
ZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKGNvbnN0IFZhbHVlKiB2
YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVl
KQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29u
c3QgVmFsdWUqIG1fdmFsdWU7Cit9OworCitpbmxpbmUgRGVlcFZhbHVlRHVtcCBkZWVwRHVtcChj
b25zdCBWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJuIERlZXBWYWx1ZUR1bXAodmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFs
dWVJbmxpbmVzX2gKKyNkZWZpbmUgQjNWYWx1ZUlubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVl
LmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91Ymxl
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKwor
aW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxD
b25zdDMyVmFsdWU+KCk7Cit9CisKK2lubGluZSBpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgpOworfQorCitpbmxp
bmUgYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0
NjRWYWx1ZT4oKTsKK30KKworaW5saW5lIGludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAor
eworICAgIHJldHVybiBhczxDb25zdDY0VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2lubGluZSBi
b29sIFZhbHVlOjpoYXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpIHx8IGhh
c0ludDY0KCk7Cit9CisKK2lubGluZSBpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGhhc0ludDMyKCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9CisKK2lubGlu
ZSBib29sIFZhbHVlOjppc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBo
YXNJbnQoKSAmJiBhc0ludCgpID09IHZhbHVlOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFz
RG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOwor
fQorCitpbmxpbmUgZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGFzPENvbnN0RG91YmxlVmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2lubGluZSBTdGFja21hcCog
VmFsdWU6OnN0YWNrbWFwKCkKK3sKKyAgICBpZiAoQ2hlY2tWYWx1ZSogY2hlY2sgPSBhczxDaGVj
a1ZhbHVlPigpKQorICAgICAgICByZXR1cm4gJmNoZWNrLT5zdGFja21hcDsKKyAgICBpZiAoUGF0
Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYXM8UGF0Y2hwb2ludFZhbHVlPigpKQorICAgICAg
ICByZXR1cm4gJnBhdGNocG9pbnQtPnN0YWNrbWFwOworICAgIHJldHVybiBudWxscHRyOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM1ZhbHVlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZVJlcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgIGNhc2UgQW55OgorICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgcmVn
KCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAgICBvdXQu
cHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbVNQKCks
ICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBvdXQu
cHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZVJlcDo6S2luZCBraW5kKQorewor
ICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAgb3V0
LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIlJl
Z2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAg
ICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1
ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFja0FyZ3VtZW50Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFudDoKKyAgICAgICAg
b3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVS
ZXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVw
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlUmVwX2gKKyNkZWZpbmUg
QjNWYWx1ZVJlcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiUmVnLmgiCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0byBkZXNjcmliZSB2YWx1ZSByZXByZXNlbnRh
dGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQgYm90aCB0byBmb3JjZSBhCisvLyByZXByZXNl
bnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNlbnRhdGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50
IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBzYXkKKy8vIHRoYXQgaXQncyBhbiBpbnB1dC4g
V2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQgcmVwcmVzZW50YXRpb24gaXQgcGlja2VkLCB3
ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQuCisKK2NsYXNzIFZhbHVlUmVwIHsKK3B1Ymxp
YzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlv
biwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFueSByZXByZXNlbnRhdGlvbi4gQXMgYW4K
KyAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9u
J3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2UgZm9yIHRoZQorICAgICAgICAvLyByaWdodCBv
cGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBhIENoZWNrTXVsLgorICAgICAgICBBbnksCisKKyAg
ICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBz
aG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBhCisgICAgICAgIC8vIHJlZ2lz
dGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKKyAgICAgICAgU29tZVJlZ2lzdGVyLAor
CisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBh
cnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAorICAgICAgICAvLyByZXByZXNlbnRhdGlv
biwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tlZC4KKyAgICAgICAgUmVnaXN0
ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxz
IHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90IGEgdmFsaWQKKyAgICAgICAg
Ly8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgIFN0YWNrLAorCisgICAgICAgIC8vIEFz
IGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVw
IGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAgICAgICAgLy8gb2Zmc2V0LgorICAgICAg
ICAvLyBGSVhNRTogVGhlIFN0YWNrbWFwU3BlY2lhbCBjbGFzcyBuZWVkcyB0byBhY2NvdW50IGZv
ciB0aGUgZmFjdCB0aGF0IHRoZXNlIGRvbid0IHR1cm4gaW50bworICAgICAgICAvLyBBaXIgb3Bl
cmFuZHMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA1NDAKKyAgICAgICAgU3RhY2tBcmd1bWVudCwKKworICAgICAgICAvLyBBcyBhbiBvdXRw
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgdGhhdCBCMyBjb25zdGFudC1mb2xkZWQg
dGhlIHZhbHVlLgorICAgICAgICBDb25zdGFudAorICAgIH07CisgICAgCisgICAgVmFsdWVSZXAo
KQorICAgICAgICA6IG1fa2luZChBbnkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFZh
bHVlUmVwKFJlZyByZWcpCisgICAgICAgIDogbV9raW5kKFJlZ2lzdGVyKQorICAgICAgICAsIG1f
dmFsdWUocmVnLmluZGV4KCkpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBy
ZWcoUmVnIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChyZWcpOworICAgIH0K
KworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFjayhpbnRwdHJfdCBvZmZzZXRGcm9tRlApCisgICAg
eworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFj
azsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tRlA7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrQXJndW1lbnQoaW50
cHRyX3Qgb2Zmc2V0RnJvbVNQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gU3RhY2tBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFs
dWUgPSBvZmZzZXRGcm9tU1A7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGludDY0X3QgdmFsdWUpCisgICAgeworICAgICAgICBW
YWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAg
ICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnREb3VibGUoZG91YmxlIHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFudChiaXR3aXNlX2Nhc3Q8aW50NjRf
dD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tp
bmQ7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBraW5k
KCkgIT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92
YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZy
b21TUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrQXJndW1l
bnQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAg
IH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAg
IGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lz
ZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50NjRfdCBt
X3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYg
eworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6
S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTA4IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMg
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgor
CiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3Rt
cCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIg
Om9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4K
KworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAg
ICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFu
b255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAg
ICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4gL1xBXCQvID8gJCcg
OiBuYW1lCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hp
bGRyZW4gPyBjaGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAg
ICAgIG9wY29kZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2Mp
CisgICAgICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNoaWxk
LCBpbmRleCB8CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAgICAg
Y2hpbGQubmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAgICAg
ICAgICAgICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6
IDphbm9uT3BlcmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAor
ICAgICAgICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgm
cHJvYykKKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRy
X3JlYWRlciA6bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBw
cm9kdWN0aW9ucykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9
IHByb2R1Y3Rpb25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFk
ZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVO
YW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBA
bGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAg
ICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBU
b2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5p
dGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAg
ICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAg
ICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5z
dHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAg
ICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcg
PX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5n
Lmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJv
cigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNl
ICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2Ug
IlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBl
bmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFt
ZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAg
IHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xB
XCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4g
L1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51
bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLwor
ICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5l
TnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMg
d2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAg
cmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYp
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdp
bi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7
c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3Rf
bWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQor
ICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3
ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0
Y2hlcil8KGluY2x1ZGUpKVxaLworZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAg
dG9rZW4gPX4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopXFovIGFuZCBub3QgaXNLZXl3
b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEs
IGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAg
ICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlk
eF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVu
ZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAg
ICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNlCisgICAgICAg
ICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJv
ciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlz
ZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisg
ICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBz
dHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlm
aWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJF
eHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAg
IGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgYWRkVW5pcXVlKG5h
bWUsIHByb2R1Y3Rpb25zLCBwcm9kdWN0aW9uKQorICAgICAgICBpZiBuYW1lID09IHByb2R1Y3Rp
b24udmFyTmFtZQorICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2hpbGQgcHJvZHVjdGlvbiBoYXMg
c2FtZSBuYW1lIGFzIHBhcmVudCBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIGlm
IHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24u
bmFtZSB9CisgICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisg
ICAgICAgIGVuZAorICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgZW5kCisK
KyAgICBkZWYgcGFyc2UKKyAgICAgICAgY29uc3VtZSgibWF0Y2hlciIpCisKKyAgICAgICAgbWF0
Y2hlck5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10K
KworICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5s
ZW5ndGgKKworICAgICAgICAgICAgIyBXZSBtaWdodCB3YW50IHRvIHN1cHBvcnQgImluY2x1ZGUi
LiBJZiB3ZSBkaWQgdGhhdCwgaXQgd291bGQgZ28gaGVyZS4KKyAgICAgICAgICAgIHByb2R1Y3Rp
b24gPSBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgcHJvZHVj
dGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0K
KyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAg
ICAgICAgICBlbmQKKworICAgICAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAg
ICAgICB9CisKKyAgICAgICAgTWF0Y2hlci5uZXcobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQor
ICAgIGVuZAorCisgICAgZGVmIHBhcnNlUHJvZHVjdGlvbgorICAgICAgICBvcmlnaW4gPSB0b2tl
bi5vcmlnaW4KKyAgICAgICAgbmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgaWYg
dG9rZW4gPT0gIj0iCisgICAgICAgICAgICBjb25zdW1lKCI9IikKKyAgICAgICAgICAgIG9wY29k
ZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAg
ZWxzaWYgdG9rZW4gPT0gIigiCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgICAg
IG9wY29kZSA9IG5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBuaWwKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmV0dXJuIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgbmlsLCBuaWwpCisg
ICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBs
b29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorCisgICAgICAgICAgICBh
ZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHBhcnNlUHJvZHVjdGlvbikKKworICAgICAgICAg
ICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAg
ICAgfQorCisgICAgICAgICMgQWR2YW5jZSBhZnRlciB0aGUgIikiCisgICAgICAgIGFkdmFuY2UK
KworICAgICAgICBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG9wY29kZSwgcHJvZHVjdGlv
bnMpCisgICAgZW5kCitlbmQKKworZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNl
ci5uZXcoSU86OnJlYWQoZmlsZU5hbWUpLCBmaWxlTmFtZSkKK21hdGNoZXIgPSBwYXJzZXIucGFy
c2UKKworY2xhc3MgU3ViTWF0Y2gKKyAgICBhdHRyX3JlYWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0
aW9ucworICAgIAorICAgIGRlZiBpbml0aWFsaXplKGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisg
ICAgICAgIEBpbmRleE1hcCA9IFtdCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAg
IGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGlu
ZGV4TWFwIDw8IGluZGV4CisgICAgICAgICAgICBAcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNb
aW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKKworICAgIGRlZiBtYXBJbmRleExpc3QoaW5kZXhM
aXN0KQorICAgICAgICBpbmRleExpc3QubWFwIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAg
ICAgICAgICAgQGluZGV4TWFwW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCitlbmQKKworRmls
ZS5vcGVuKCJCMyIgKyBtYXRjaGVyLm5hbWUgKyAiLmgiLCAidyIpIHsKKyAgICB8IG91dHAgfAor
CisgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVy
LnJiIGZyb20gI3tmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorCisgICAgb3V0cC5wdXRzICIj
aWZuZGVmIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIEIzI3tt
YXRjaGVyLm5hbWV9X2giCisgICAgCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkIzVmFsdWUu
aFwiIgorICAgIAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiIKKyAgICBvdXRw
LnB1dHMgInZvaWQgcnVuI3ttYXRjaGVyLm5hbWV9KFZhbHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFk
YXB0b3IpIgorICAgIG91dHAucHV0cyAieyIKKworICAgICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBu
b3QgZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBiZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUg
ZW1pdHRlci4gSWYgeW91CisgICAgIyB3YW50IHRvIHNlZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0
dGVkLCBvcGVuIGl0IGluIGEgZ29vZCB0ZXh0IGVkaXRvciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBp
dAorICAgICMgZm9yIHlvdS4KKworICAgICMgSW4gb2RkIHNpdHVhdGlvbnMsIHdlIG1heSBub3Qg
dXNlIHRoZSBpbnB1dCB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0
IGl0LgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKF92YWx1ZSk7IgorICAgICAgICAKKyAg
ICAjIFRoaXMganVzdCBwcm90ZWN0cyB0aGUgY2FsbGVyIGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFi
b3V0IHByb2R1Y3Rpb25zIGhhdmluZyBkaWZmZXJlbnQgbGVuZ3Rocy4KKyAgICBkZWYgbWF0Y2hM
ZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgaW5kZXhMaXN0cyA9
IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8
IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBw
cm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uY2hpbGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rp
b24uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5k
ZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRl
eF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgaW5kZXhMaXN0cy5lYWNo
IHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb2R1
Y3Rpb25zW2luZGV4TGlzdFswXV0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICBpZiBsZW5n
dGggPiAwCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGls
ZHJlbigpLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQgaW5k
ZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAgICAg
IH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdp
dmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAg
IyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHBy
b2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1p
dHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlz
IGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1
Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVj
dGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8g
cnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAg
ICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1
Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4
IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExp
c3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAg
ICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9
CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdl
IGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAg
ICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAg
ICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhM
aXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBp
bmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAgICBn
cm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAg
ICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9k
dWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24u
b3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2Rl
XSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAg
ICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQgYSBz
d2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje3Zh
bHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIg
eworICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAgICAg
ICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisg
ICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gu
cHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExp
c3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
ZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1
Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAg
ICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykg
eworICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAg
IHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMgcHJv
ZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFu
ZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRo
ZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJv
ZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0
aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rp
b25zLnNpemUpKS50b19hCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAg
ICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIKKyAg
ICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxk
KCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVl
LiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAgIG91dHAu
cHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAgICAgICBzdWJQ
cm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24g
fAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAgICAgICAg
fQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rp
b25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJNYXRjaCA9
IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hD
b2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1uSW5kZXgg
KyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlp
ZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYgbWF0Y2hS
ZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBtYXRjaFBy
b2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwg
aW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGlu
ZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisg
ICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3Vi
TWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVt
bihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAgICAgICAg
ICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcElu
ZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbmQKKwor
ICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMp
IHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAg
ICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1
Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAgICAgb3V0
cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7cHJvZHVjdGlvbi52YXJOYW1lfSk7IgorICAg
ICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgb3BlcmFuZEFyZ3Vt
ZW50cyA9IFtdCisgICAgICAgICAgICB0cnlBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgbnVt
U2NvcGVzID0gMAorICAgICAgICAgICAgc2VlbiA9IHt9CisgICAgICAgICAgICBwcm9kdWN0aW9u
LmVhY2hWYXJpYWJsZSB7CisgICAgICAgICAgICAgICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5h
bWUsIGNoaWxkVmFyTmFtZSwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGxvYWRFeHBy
ID0gIiN7cGFyZW50VmFyTmFtZX0tPmNoaWxkKCN7aW5kZXh9KSIKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiBzZWVuW2NoaWxkVmFyTmFtZV0KKyAgICAgICAgICAgICAgICAg
ICAgdG1wID0gbmV3VmFyCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7
dG1wfSA9ICN7bG9hZEV4cHJ9OyIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAo
I3t0bXB9ID09ICN7Y2hpbGRWYXJOYW1lfSkgeyIKKyAgICAgICAgICAgICAgICAgICAgbnVtU2Nv
cGVzICs9IDEKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNlZW5b
Y2hpbGRWYXJOYW1lXSA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7Y2hpbGRWYXJOYW1lfSA9ICN7bG9hZEV4cHJ9OyIK
KworICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBDb25zaWRlciBnZXR0aW5nIHJpZCBvZiB0
aGUgJCBwcmVmaXguCisgICAgICAgICAgICAgICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUyNworICAgICAgICAgICAgICAgICAgICBpZiBjaGlsZE5h
bWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xB
XCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAgICAgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hp
bGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxB
cmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0g
OmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRzIDw8IGNo
aWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5kIG9yIGtpbmQgPT0gOmFub25PcGVyYW5kCisg
ICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9
PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFuZAorICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRhcHRvci5hY2NlcHRSb290
KF92YWx1ZSkiCisgICAgICAgICAgICB1bmxlc3MgaW50ZXJuYWxBcmd1bWVudHMuZW1wdHk/Cisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdEludGVybmFscygiICsg
aW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdE9wZXJhbmRzKCIgKyBvcGVyYW5kQXJndW1lbnRz
LmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0
cygiJiYgYWRhcHRvci50cnkje3Byb2R1Y3Rpb24ubmFtZX0oIiArIHRyeUFyZ3VtZW50cy5qb2lu
KCIsICIpICsgIikpIHsiKQorICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdFJv
b3RMYXRlKF92YWx1ZSk7IgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJndW1lbnRzLmVt
cHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2NlcHRJbnRlcm5hbHNM
YXRlKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICB1bmxlc3Mgb3BlcmFuZEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0T3BlcmFuZHNMYXRlKCIgKyBvcGVyYW5k
QXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
IG91dHAucHV0cyAicmV0dXJuOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAg
ICAgIG51bVNjb3Blcy50aW1lcyB7CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICB9CisgICAgfQor
ICAgIAorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Igor
ICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMyIKKworICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEIzI3ttYXRjaGVyLm5hbWV9X2gi
Cit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTA2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMu
aCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVl
LmgiCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisj
aW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNp
bmNsdWRlICJJbml0aWFsaXplVGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgor
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKyNpbmNsdWRlICJWTS5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOwor
CituYW1lc3BhY2UgeworCisvLyBOb3RoaW5nIGZhbmN5IGZvciBub3c7IHdlIGp1c3QgdXNlIHRo
ZSBleGlzdGluZyBXVEYgYXNzZXJ0aW9uIG1hY2hpbmVyeS4KKyNkZWZpbmUgQ0hFQ0soeCkgUkVM
RUFTRV9BU1NFUlQoeCkKKworVk0qIHZtOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CitUIGNvbXBpbGVBbmRSdW4oUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFy
Z3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAg
Z2VuZXJhdGUocHJvY2VkdXJlLCBqaXQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0s
IGppdCwgbnVsbHB0cik7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTEla
RV9DT0RFKGxpbmtCdWZmZXIsICgidGVzdGIzIikpOworICAgIFQgKCpmdW5jdGlvbikoQXJndW1l
bnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGNvZGUuY29kZSgpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpOworICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOwor
fQorCit2b2lkIHRlc3Q0MigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBWYWx1ZSogY29uc3Q0MiA9IHJvb3QtPmFw
cGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCA0Mik7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY29uc3Q0Mik7CisK
KyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykgPT0gNDIpOworfQorCisjZGVmaW5l
IFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRhdGFM
b2coI3Rlc3QgIjpcbiIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHRlc3Q7ICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGRhdGFMb2coIiAgICBPSyFc
biIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSAoZmFsc2UpOworCit2b2lkIHJ1
bigpCit7CisgICAgSlNDOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisgICAgdm0gPSAmVk06OmNy
ZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsKKworICAgIFJVTih0ZXN0NDIoKSk7Cit9CisKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisjZWxzZSAvLyBFTkFCTEUoQjNfSklUKQorCitzdGF0
aWMgdm9pZCBydW4oKQoreworICAgIGRhdGFMb2coIkIzIEpJVCBpcyBub3QgZW5hYmxlZC5cbiIp
OworfQorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworaW50IG1haW4oaW50IGFyZ2MsIGNo
YXIqKiBhcmd2KQoreworICAgIFVOVVNFRF9QQVJBTShhcmdjKTsKKyAgICBVTlVTRURfUEFSQU0o
YXJndik7CisgICAgCisgICAgcnVuKCk7CisgICAgcmV0dXJuIDA7Cit9CisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJM
aXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJTdGFja0Fs
aWdubWVudC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK25hbWVzcGFjZSB7CisKK2Jvb2wgYXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgU3RhY2tT
bG90KiBzbG90LCBpbnRwdHJfdCBvZmZzZXRGcm9tRlAsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3Qq
PiYgb3RoZXJTbG90cykKK3sKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJT
bG90cykgeworICAgICAgICBpZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgYm9vbCBvdmVybGFwID0gV1RGOjpyYW5nZXNPdmVybGFw
KAorICAgICAgICAgICAgb2Zmc2V0RnJvbUZQLAorICAgICAgICAgICAgb2Zmc2V0RnJvbUZQICsg
c3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkpLAorICAgICAgICAgICAgb3Ro
ZXJTbG90LT5vZmZzZXRGcm9tRlAoKSwKKyAgICAgICAgICAgIG90aGVyU2xvdC0+b2Zmc2V0RnJv
bUZQKCkgKyBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob3RoZXJTbG90LT5ieXRlU2l6ZSgpKSk7Cisg
ICAgICAgIGlmIChvdmVybGFwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKwor
ICAgIHNsb3QtPnNldE9mZnNldEZyb21GUChvZmZzZXRGcm9tRlApOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIGFzc2lnbihTdGFja1Nsb3QqIHNsb3QsIGNvbnN0IFZlY3RvcjxTdGFja1Ns
b3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBpZiAoYXR0ZW1wdEFzc2lnbm1lbnQoc2xvdCwgLXN0
YXRpY19jYXN0PGludHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwgb3RoZXJTbG90cykpCisgICAg
ICAgIHJldHVybjsKKworICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBvdGhlclNsb3Rz
KSB7CisgICAgICAgIGlmICghb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICBib29sIGRpZEFzc2lnbiA9IGF0dGVtcHRBc3NpZ25tZW50KAor
ICAgICAgICAgICAgc2xvdCwgb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSAtIHN0YXRpY19jYXN0
PGludHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwgb3RoZXJTbG90cyk7CisgICAgICAgIGlmIChk
aWRBc3NpZ24pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQg
YWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShj
b2RlLCAiYWxsb2NhdGVTdGFjayIpOworCisgICAgLy8gQWxsb2NhdGUgYWxsIG9mIHRoZSBsb2Nr
ZWQgc2xvdHMgaW4gb3JkZXIuIFRoaXMgaXMga2luZCBvZiBhIGNyYXp5IGFsZ29yaXRobSB0byBh
bGxvdyBmb3IKKyAgICAvLyB0aGUgcG9zc2liaWxpdHkgb2Ygc3RhY2sgc2xvdHMgYmVpbmcgYXNz
aWduZWQgZnJhbWUgb2Zmc2V0cyBiZWZvcmUgd2UgZXZlbiBnZXQgaGVyZS4KKyAgICBBU1NFUlQo
IWNvZGUuZnJhbWVTaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25lZExvY2tl
ZFN0YWNrU2xvdHM7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGxvY2tlZFN0YWNrU2xvdHNXb3Jr
bGlzdDsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7Cisg
ICAgICAgIHN3aXRjaCAoc2xvdC0+a2luZCgpKSB7CisgICAgICAgIGNhc2UgU3RhY2tTbG90S2lu
ZDo6TG9ja2VkOgorICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAg
ICAgICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LmFwcGVu
ZChzbG90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6
OkFub255bW91czoKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAg
ICAgICAgICAgICAgIC8vIEFzIGEgbWF0dGVyIG9mIHNhbml0eSwgdW5hc3NpZ24gdGhpcy4gTWF5
YmUgaXQgd291bGQgYmUgZ29vZCB0byBldmVuIGhhdmUgYQorICAgICAgICAgICAgICAgIC8vIHZh
bGlkYXRpb24gcnVsZSB0aGF0IHRoaXMgY2Fubm90IGhhcHBlbi4KKyAgICAgICAgICAgICAgICBz
bG90LT5zZXRPZmZzZXRGcm9tRlAoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBUaGlzIGlzIGEgZmFpcmx5IGV4cGVuc2l2ZSBs
b29wLCBidXQgaXQncyBPSyBiZWNhdXNlIHdlJ2xsIHVzdWFsbHkgb25seSBoYXZlIGEgaGFuZGZ1
bCBvZgorICAgIC8vIGxvY2tlZCBzdGFjayBzbG90cy4KKyAgICB3aGlsZSAoIWxvY2tlZFN0YWNr
U2xvdHNXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gbG9j
a2VkU3RhY2tTbG90c1dvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGFzc2lnbihzbG90LCBh
c3NpZ25lZExvY2tlZFN0YWNrU2xvdHMpOworICAgICAgICBhc3NpZ25lZExvY2tlZFN0YWNrU2xv
dHMuYXBwZW5kKHNsb3QpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhlIGFub255
bW91cyBzbG90cy4gTm90ZSB0aGF0IHRoZW9yZXRpY2FsbHkgd2Ugc2hvdWxkIGRvIGFuIGVzY2Fw
ZSBhbmFseXNpcworICAgIC8vIGhlcmUuIEJ1dCwgY3VycmVudGx5IEFpciBkb2Vzbid0IHN1cHBv
cnQgZXNjYXBpbmcgYSBTdGFja1Nsb3QhCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBl
c2NhcGluZyBhIFN0YWNrU2xvdCBhbmQgYWRkIGVzY2FwZSBhbmFseXNpcyB0byBhbGxvY2F0ZVN0
YWNrKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDQzMAorCisgICAgYXV0byBpc1JlbGV2YW50ID0gW10gKGNvbnN0IEFyZyYgYXJnKSAtPiBib29s
IHsKKyAgICAgICAgcmV0dXJuIGFyZy5pc1N0YWNrKCkgJiYgYXJnLnN0YWNrU2xvdCgpLT5raW5k
KCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOworICAgIH07CisKKyAgICBMaXZlbmVzczxB
cmc+IGxpdmVuZXNzKGNvZGUpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFj
a1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAgVmVj
dG9yPFN0YWNrU2xvdCo+IHNsb3RzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8QXJnPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVz
cywgYmxvY2spOworCisgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdICgpIHsKKyAgICAgICAg
ICAgIC8vIEZvcm0gYSBjbGlxdWUgb2Ygc3RhY2sgc2xvdHMgdGhhdCBpbnRlcmZlcmUuIEZpcnN0
IGZpbmQgdGhlIGxpc3Qgb2Ygc3RhY2sgc2xvdHMKKyAgICAgICAgICAgIC8vIHRoYXQgYXJlIGxp
dmUgcmlnaHQgbm93LgorICAgICAgICAgICAgc2xvdHMucmVzaXplKDApOworICAgICAgICAgICAg
Zm9yIChBcmcgYXJnIDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChp
c1JlbGV2YW50KGFyZykpCisgICAgICAgICAgICAgICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3Rh
Y2tTbG90KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IHNsb3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBv
dXRlciA9IHNsb3RzW2ldOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAx
OyBqIDwgc2xvdHMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90
KiBpbm5lciA9IHNsb3RzW2ldOworCisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogZmly
c3QgPSBvdXRlcjsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzZWNvbmQgPSBpbm5l
cjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGZpcnN0LT5pbmRleCgpID4gc2Vjb25kLT5pbmRl
eCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgc3RkOjpzd2FwKGZpcnN0LCBzZWNvbmQpOwor
CisgICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZVtmaXJzdF0uYWRkKHNlY29uZCk7Cisg
ICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZVtzZWNvbmRdLmFkZChmaXJzdCk7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGludGVy
ZmVyZSgpOworICAgICAgICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9j
ay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRl
KGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAgICAgICAgIGludGVyZmVyZSgpOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0
cyBoZWFydCB0aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKKyAgICAv
LyBTdGFja1Nsb3Qgd2UganVzdCB3YW50IHRvIGZpbmQgdGhlIG9mZnNldEZyb21GUCB0aGF0IGlz
IGNsb3Nlc3QgdG8gemVybyB3aGlsZSBlbnN1cmluZyBubworICAgIC8vIG92ZXJsYXAgd2l0aCBv
dGhlciBTdGFja1Nsb3RzIHRoYXQgdGhpcyBvdmVybGFwcyB3aXRoLgorICAgIFZlY3RvcjxTdGFj
a1Nsb3QqPiBvdGhlclNsb3RzOworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFj
a1Nsb3RzKCkpIHsKKyAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAg
ICAgICAvLyBBbHJlYWR5IGFzc2lnbmVkIGFuIG9mZnNldC4KKyAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICB9CisKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiYgaW50ZXJmZXJpbmdT
bG90cyA9IGludGVyZmVyZW5jZVtzbG90XTsKKyAgICAgICAgb3RoZXJTbG90cy5yZXNpemUoYXNz
aWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKSArIGludGVyZmVyaW5nU2xvdHMuc2l6ZSgpKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90
cy5zaXplKCk7ICsraSkKKyAgICAgICAgICAgIG90aGVyU2xvdHNbaV0gPSBhc3NpZ25lZExvY2tl
ZFN0YWNrU2xvdHNbaV07CisgICAgICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGFzc2lnbmVkTG9j
a2VkU3RhY2tTbG90cy5zaXplKCk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3Qg
OiBpbnRlcmZlcmluZ1Nsb3RzKQorICAgICAgICAgICAgb3RoZXJTbG90c1tuZXh0SW5kZXgrK10g
PSBvdGhlclNsb3Q7CisKKyAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOworICAgIH0K
KworICAgIC8vIEZpZ3VyZSBvdXQgaG93IG11Y2ggc3RhY2sgd2UncmUgdXNpbmcgZm9yIHN0YWNr
IHNsb3RzLgorICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSAwOworICAgIGZv
ciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgZnJhbWVT
aXplRm9yU3RhY2tTbG90cyA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgZnJhbWVTaXplRm9yU3Rh
Y2tTbG90cywKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtc2xvdC0+b2Zmc2V0
RnJvbUZQKCkpKTsKKyAgICB9CisKKyAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gV1RGOjpy
b3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgZnJhbWVTaXplRm9yU3Rh
Y2tTbG90cyk7CisKKyAgICAvLyBOb3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1l
bnQgYXJlYSB3ZSBuZWVkLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Cisg
ICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcm
IGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNl
IDggYnl0ZXMgb2YgdGhlIGNhbGwgYXJnLiBCdXQgdGhhdCdzIG5vdAorICAgICAgICAgICAgICAg
ICAgICAvLyBzdWNoIGFuIGF3ZXNvbWUgYXNzdW1wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKKyAgICAgICAg
ICAgICAgICAgICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKGFyZy5vZmZzZXQoKSArIDgp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGNvZGUuc2V0RnJhbWVTaXplKGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgKyBjb2RlLmNhbGxB
cmdBcmVhU2l6ZSgpKTsKKworICAgIC8vIEZpbmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1
c2UgQWRkcidzIGluc3RlYWQgb2YgU3RhY2tTbG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcworICAg
IC8vIHRyYW5zZm9ybWF0aW9uIHNpbmNlIHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJy
YXkgdG8gZmlndXJlIG91dCB3aGljaCBTdGFja1Nsb3QgYW55CisgICAgLy8gb2Zmc2V0LWZyb20t
RlAgcmVmZXJzIHRvLgorCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYg
YXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7
CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAgICBh
cmcgPSBBcmc6OmFkZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2Fs
bEZyYW1lUmVnaXN0ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsg
YXJnLnN0YWNrU2xvdCgpLT5vZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAg
ICAgICBhcmcgPSBBcmc6OmFkZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5m
bzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNl
dCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3Rh
Y2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBbGxvY2F0ZVN0
YWNrX2gKKyNkZWZpbmUgQWlyQWxsb2NhdGVTdGFja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENvZGU7CisKKy8vIFRoaXMgYWxsb2NhdGVzIFN0YWNrU2xvdHMgdG8gcGxhY2VzIG9uIHRoZSBz
dGFjay4gSXQgZmlyc3QgYWxsb2NhdGVzIHRoZSBwaW5uZWQgb25lcyBpbiBpbmRleAorLy8gb3Jk
ZXIgYW5kIHRoZW4gaXQgYWxsb2NhdGVzIHRoZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4KKwordm9p
ZCBhbGxvY2F0ZVN0YWNrKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckFsbG9jYXRlU3Rh
Y2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFyZy5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNs
dWRlICJBaXJTdGFja1Nsb3QuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCit2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBvdXQu
cHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUbXA6CisgICAg
ICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEltbToKKyAg
ICAgICAgb3V0LnByaW50KCIkIiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBJbW02NDoKKyAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIG1fb2Zmc2V0KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAg
ICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgp
LCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmRleDoKKyAgICAgICAgaWYgKG9m
ZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnBy
aW50KCIoIiwgYmFzZSgpLCAiLCIsIGluZGV4KCkpOworICAgICAgICBpZiAoc2NhbGUoKSAhPSAx
KQorICAgICAgICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7CisgICAgICAgIG91dC5wcmlu
dCgiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgaWYgKG9m
ZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnBy
aW50KCIoIiwgcG9pbnRlckR1bXAoc3RhY2tTbG90KCkpLCAiKSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBv
dXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIihjYWxsQXJnKSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZWxh
dGlvbmFsQ29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXNDb25kOgor
ICAgICAgICBvdXQucHJpbnQoYXNSZXN1bHRDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFs
KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJn
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJn
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJUbXAuaCIKKyNpbmNsdWRl
ICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFj
a1Nsb3Q7CisKKy8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2Ug
YmVjYXVzZSB3ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIElu
c3QoLi4uLCBBcmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3Mg
QXJnIHsKK3B1YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFs
bHkgdGVyc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVt
IEtpbmQgOiBpbnQ4X3QgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBUbXAsCisgICAgICAg
IEltbSwKKyAgICAgICAgSW1tNjQsCisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAorICAg
ICAgICBDYWxsQXJnLAorICAgICAgICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAg
UmVzQ29uZCwKKyAgICAgICAgU3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4
X3QgeworICAgICAgICBVc2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsK
KworICAgIGVudW0gVHlwZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAg
IH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOworCisgICAgc3Rh
dGljIGJvb2wgaXNVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7
CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVm
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0
aWMgVHlwZSB0eXBlRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgSW50MzI6Cisg
ICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2Ug
RG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIEZQOworICAgICAgICB9CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gR1A7CisgICAgfQorCisgICAgQXJnKCkK
KyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorCisgICAgQXJnKEFpcjo6
VG1wIHRtcCkKKyAgICAgICAgOiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFzZSh0bXApCisg
ICAgeworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUpCisgICAgewor
ICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBzdGF0aWMgQXJnIGltbTY0KGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAg
QXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAgICAgICByZXN1
bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgQXJnIGFkZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNl
OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZhbHVlLCBpbnQz
Ml90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2Fz
dDxpbnRwdHJfdD4odmFsdWUpOworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9mZnNldDsgLy8g
SSBrbm93LCB5dWNrLgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBBcmcgY2FsbEFyZyhpbnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1bHQubV9vZmZz
ZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2Fz
ZSA0OgorICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyB1bnNpZ25lZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJu
IDA7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNl
IDQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAg
cmV0dXJuIDM7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3Rh
dGljIEFyZyBpbmRleChBaXI6OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5zaWduZWQgc2Nh
bGUgPSAxLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5p
c0dQKCkpOworICAgICAgICBBU1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlz
VmFsaWRTY2FsZShzY2FsZSkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gSW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICBy
ZXN1bHQubV9pbmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IHN0YXRpY19j
YXN0PGludDMyX3Q+KHNjYWxlKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVsQ29uZChN
YWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAg
ICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVsQ29uZDsKKyAgICAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29u
ZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBSZXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRp
b247CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzcGVj
aWFsKEFpcjo6U3BlY2lhbCogc3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQubV9vZmZzZXQg
PSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CisgICAgICAg
ICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0g
b3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAg
ICAgICAgICAgICYmIG1fc2NhbGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisKKyAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQga2luZCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAgIGJvb2wgaXNU
bXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7CisgICAgfQor
CisgICAgYm9vbCBpc0ltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IEltbTsKKyAgICB9CisKKyAgICBib29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBJbW02NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAgYm9v
bCBpc1N0YWNrKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhY2s7
CisgICAgfQorCisgICAgYm9vbCBpc0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGtpbmQoKSA9PSBDYWxsQXJnOworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAgIGJv
b2wgaXNSZWxDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVs
Q29uZDsKKyAgICB9CisKKyAgICBib29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4ga2luZCgpID09IFJlc0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1NwZWNpYWwo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOworICAgIH0K
KworICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAo
KSB8fCBpc1N0YWNrKCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsK
KyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gSW1tIHx8IGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBtX29m
ZnNldDsKKyAgICB9CisKKyAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nh
c3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90PihtX29mZnNldCkpOworICAgIH0KKworICAg
IEFpcjo6VG1wIGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBB
ZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQor
CisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5k
KCkpIHsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBj
YXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoa2luZCgpID09IFN0YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG1fc2NhbGUpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgp
ID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludDMyX3Q+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xv
dCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQorCisg
ICAgQWlyOjpUbXAgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVk
IHNjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOwor
ICAgICAgICByZXR1cm4gbV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQor
CisgICAgQWlyOjpTcGVjaWFsKiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gU3BlY2lhbCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpT
cGVjaWFsKj4obV9vZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisg
ICAgYm9vbCBpc0ZQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYm
IHRtcCgpLmlzRlAoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcg
Y2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAg
Ym9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAg
ICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6Cisg
ICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2Fs
bEFyZzoKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAg
ICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQVG1wKCk7CisgICAgICAgIGNhc2UgSW52YWxp
ZDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8v
IFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1
aXJlcyBhIEZQIHZhbHVlLgorICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBSZWxDb25k
OgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAg
Y2FzZSBJbnZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFk
ZHI6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNh
c2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxvdyBJbW02NCBh
cyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2tt
YXBzLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAg
ICAgICAgcmV0dXJuIGlzRlBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFz
VHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBj
YXNlIEltbToKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmln
dW91cyBmb3Igc29tZSBhcmcga2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisK
KyAgICBib29sIGlzVHlwZShUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQKCk7Cisg
ICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICByZXR1cm4gaXNGUCgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNU
bXAoKSAmJiB0bXAoKS5pc0dQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNG
UFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIo
KTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0bXAoKS5mcHIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAg
IFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAg
IH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRtcCgpLmdwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAg
fQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRtcCgpLnRtcEluZGV4KCk7CisgICAgfQorCisgICAgQXJnIHdpdGhPZmZzZXQoaW50MzJfdCBh
ZGRpdGlvbmFsT2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNPZmZzZXQoKSkK
KyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQz
Ml90PihvZmZzZXQoKSwgYWRkaXRpb25hbE9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gQXJn
KCk7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAg
ICAgICAgIHJldHVybiBhZGRyKGJhc2UoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsK
KyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgICAgIHJldHVybiBzdGFjayhzdGFja1Nsb3Qo
KSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBDYWxsQXJnOgor
ICAgICAgICAgICAgcmV0dXJuIGNhbGxBcmcob2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsK
KyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpbmRleChiYXNlKCksIGlu
ZGV4KCksIHNjYWxlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRt
cDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9y
KG1fYmFzZSk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFRoaXMgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNz
IGFyZyBpbiBhIERlZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFu
ZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3Yg
JXJheCwgKCVyY3gpCisgICAgLy8KKyAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVy
Y3guCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAo
Um9sZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAg
eworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAg
ICAgIGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xlLCBhcmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBH
UCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAg
IGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwg
VXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMiBhc1RydXN0ZWRJbW0zMigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJ
bW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRp
Y19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0IGFzVHJ1c3RlZEltbTY0KCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICByZXR1cm4gTWFjcm9B
c3NlbWJsZXI6OlRydXN0ZWRJbW02NCh2YWx1ZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyIGFzVHJ1c3RlZEltbVB0cigpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXM2NEJpdCgpKQorICAgICAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXJWYWx1ZSgpKTsKKyAgICB9
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhc0FkZHJlc3MoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGlzQWRkcigpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
OjpBZGRyZXNzKG1fYmFzZS5ncHIoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsK
KyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFzQmFzZUluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0luZGV4KCkpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgIG1fYmFzZS5ncHIoKSwgbV9pbmRl
eC5ncHIoKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlNjYWxlPihsb2dTY2FsZSgpKSwK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisg
ICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0
aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbj4o
bV9vZmZzZXQpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24g
YXNSZXN1bHRDb25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVzQ29u
ZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRD
b25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKworICAgIEFyZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAg
ICAgIDogbV9iYXNlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAqdGhpcyA9PSBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0K
KworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhpcyByZWFs
bHkgZG9lc24ndCBoYXZlIHRvIGJlIHRoYXQgZ3JlYXQuCisgICAgICAgIHJldHVybiBXVEY6Oklu
dEhhc2g8aW50NjRfdD46Omhhc2gobV9vZmZzZXQpICsgbV9raW5kICsgbV9zY2FsZSArIG1fYmFz
ZS5oYXNoKCkgKworICAgICAgICAgICAgbV9pbmRleC5oYXNoKCk7CisgICAgfQorCitwcml2YXRl
OgorICAgIGludDY0X3QgbV9vZmZzZXQgeyAwIH07CisgICAgS2luZCBtX2tpbmQgeyBJbnZhbGlk
IH07CisgICAgaW50MzJfdCBtX3NjYWxlIHsgMSB9OworICAgIEFpcjo6VG1wIG1fYmFzZTsKKyAg
ICBBaXI6OlRtcCBtX2luZGV4OworfTsKKworc3RydWN0IEFyZ0hhc2ggeworICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoKGNvbnN0IEFyZyYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAg
c3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQXJnJiBhLCBjb25zdCBBcmcmIGIpIHsgcmV0dXJuIGEg
PT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxl
dGVkID0gdHJ1ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworbmFt
ZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsK
K3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAg
dHlwZWRlZiBKU0M6OkIzOjpBaXI6OkFyZ0hhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxK
U0M6OkIzOjpBaXI6OkFyZz4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpB
cmc+IHsKKyAgICAvLyBCZWNhdXNlIG1fc2NhbGUgaXMgMSBpbiB0aGUgZW1wdHkgdmFsdWUuCisg
ICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyQXJnX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Js
b2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJh
c2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2Nr
OjpkdW1wUHJlZml4ID0gIiMiOworCitib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJh
c2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywg
YmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxv
Y2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxv
Y2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNl
c3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsK
K30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1
ZW5jeSwgIlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMpCisgICAgICAg
IG91dC5wcmludCgiICAgICIsIGluc3QsICJcbiIpOworfQorCitCYXNpY0Jsb2NrOjpCYXNpY0Js
b2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRl
eCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNC
bG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyRnJlcXVlbnRlZEJs
b2NrLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVj
dGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbkNv
cHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworY2xhc3MgQ29kZTsKK2NsYXNzIEluc2VydGlvblNldDsKKworY2xhc3MgQmFzaWNCbG9j
ayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1
bXBQcmVmaXg7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAgICB0eXBl
ZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5cGVkZWYg
VmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIHVuc2lnbmVk
IGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIHNp
emUoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQorICAgIEluc3RMaXN0OjppdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpp
dGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisgICAgSW5zdExpc3Q6OmNv
bnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9Cisg
ICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMu
ZW5kKCk7IH0KKworICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0c1tpbmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJu
IG1faW5zdHNbaW5kZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0cy5sYXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9pbnN0cy5s
YXN0KCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBhcHBlbmRJ
bnN0KEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3
YXJkPEluc3Q+KGluc3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsK
KyAgICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1
bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBjYXNlIHRv
IHdoaWNoIHRoZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIxIiBjYXNl
IGlzIHRoZQorICAgIC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhl
IGZhbGwtdGhyb3VnaCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25lZCBudW1T
dWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIEZy
ZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNp
Z25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1
Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0K
KyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9
CisKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIHN1
Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJs
b2NrKCk7IH0KKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxp
c3Q+IHN1Y2Nlc3NvckJsb2NrcygpCisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29s
bGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMpOworICAgIH0K
KyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nv
ckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3Vj
Y2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0Piht
X3N1Y2Nlc3NvcnMpOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIHBy
ZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tp
bmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKyAgICBQ
cmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9
CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92
ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNzIEluc2Vy
dGlvblNldDsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJl
cXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsK
KyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9w
cmVkZWNlc3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJh
c2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29uc3QgQmFz
aWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRl
OgorICAgIGNvbnN0IEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVlcEJhc2lj
QmxvY2tEdW1wIGRlZXBEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVy
biBEZWVwQmFzaWNCbG9ja0R1bXAoYmxvY2spOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQmFz
aWNCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxT
cGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdz
ID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNs
dWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3Mu
ZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBt
X2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKK30KKworQ0NhbGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2Fs
bFNwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6
OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sx
XSwgQXJnOjpVc2UsIEFyZzo6R1ApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkg
PCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBj
YW4ganVzdCBxdWVyeSB0aGUgYXJnJ3MgdHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBi
ZWNhdXNlIHdlCisgICAgICAgIC8vIHJlcXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCBy
ZWdpc3RlcnMuCisgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3Qu
YXJnc1tpXS50eXBlKCkpOworICAgIH0KK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQo
SW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNh
c2UgQXJnOjpJbW06CisgICAgICAgIGlmIChpczMyQml0KCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYg
KGlzNjRCaXQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgY2FzZSBBcmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6U3Rh
Y2s6CisgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5p
c0dQKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7
IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbaV0u
aXNSZWcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5zdC5h
cmdzW2ldID09IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmFkbWl0
c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICAvLyBBcmcgMSBjYW4gYmUg
YSBzdGFjayBhZGRyZXNzIGZvciBzdXJlLgorICAgIGlmIChhcmdJbmRleCA9PSAxKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ0NhbGxT
cGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpCit7
Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGlu
c3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAgc3dpdGNo
IChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAgICBjYXNlIEFy
Zzo6SW1tNjQ6CisgICAgICAgIGppdC5tb3ZlKGluc3QuYXJnc1sxXS5hc1RydXN0ZWRJbW1QdHIo
KSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmNhbGwoc2NyYXRjaFJlZ2lzdGVyKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgaml0LmNhbGwoaW5z
dC5hcmdzWzFdLmdwcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OkFkZHI6Cisg
ICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5hc0FkZHJlc3MoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9
CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyhJ
bnN0JikKK3sKKyAgICByZXR1cm4gbV9jbG9iYmVyZWRSZWdzOworfQorCit2b2lkIENDYWxsU3Bl
Y2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
IkNDYWxsIik7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImZ1bmN0aW9uIGNhbGwgdGhhdCB1c2Vz
IHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4iKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5lIEFpckNDYWxs
U3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8v
IFVzZSB0aGlzIHNwZWNpYWwgZm9yIGNvbnN0cnVjdGluZyBhIEMgY2FsbC4gQXJnIDAgaXMgb2Yg
Y291cnNlIGEgU3BlY2lhbCBhcmcgdGhhdCByZWZlcnMgdG8gdGhlCisvLyBDQ2FsbFNwZWNpYWwg
b2JqZWN0LiBBcmcgMSBpcyB0aGUgY2FsbGVlLCBhbmQgaXQgY2FuIGJlIGFuIEltbVB0ciwgYSBy
ZWdpc3Rlciwgb3IgYW4gYWRkcmVzcy4gVGhlCisvLyByZW1haW5pbmcgYXJncyBhcmUganVzdCB0
aGUgc2V0IG9mIGFyZ3VtZW50IHJlZ2lzdGVycyB1c2VkIGJ5IHRoaXMgY2FsbC4gRm9yIGFyZ3Vt
ZW50cyB0aGF0IGdvIHRvCisvLyB0aGUgc3RhY2ssIHlvdSBoYXZlIHRvIGRvIHRoZSBncnVudCB3
b3JrIG9mIGRvaW5nIHRob3NlIHN0YWNrIHN0b3Jlcy4gSW4gZmFjdCwgdGhlIG9ubHkgcmVhc29u
IHdoeQorLy8gd2Ugc3BlY2lmeSB0aGUgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGFyZ3VtZW50cyB0
byBhIGNhbGwgaXMgc28gdGhhdCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgY2FuIHNlZQorLy8gdGhh
dCB0aGV5IGdldCB1c2VkIGhlcmUuIEl0IHdvdWxkIGJlIHdyb25nIHRvIGF1dG9tYWdpY2FsbHkg
cmVwb3J0IGFsbCBhcmd1bWVudCByZWdpc3RlcnMgYXMgYmVpbmcKKy8vIHVzZWQgYmVjYXVzZSBp
ZiB3ZSBoYWQgYSBjYWxsIHRoYXQgZGlkbid0IHBhc3MgdGhlbSwgdGhlbiB0aGV5J2QgYXBwZWFy
IHRvIGJlIGxpdmUgdW50aWwgc29tZQorLy8gY2xvYmJlciBwb2ludCBvciB0aGUgcHJvbG9ndWUs
IHdoaWNoZXZlciBoYXBwZW5lZCBzb29uZXIuCisKK2NsYXNzIENDYWxsU3BlY2lhbCA6IHB1Ymxp
YyBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDQ2FsbFNwZWNpYWwoKTsKKyAgICB+Q0NhbGxTcGVj
aWFsKCk7CisKKyAgICAvLyBZb3UgY2Fubm90IHVzZSB0aGlzIHJlZ2lzdGVyIHRvIHBhc3MgYXJn
dW1lbnRzLiBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIHJlZ2lzdGVyIGlzIG5vdAorICAg
IC8vIHVzZWQgZm9yIGFyZ3VtZW50cyBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIEJ5IHRo
ZSB3YXksIHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYXVzZXMKKyAgICAvLyB0aGlzIHNw
ZWNpYWwgdG8gYmUgc3BlY2lmaWMgdG8gQyBjYWxscy4KKyAgICBzdGF0aWMgY29uc3QgR1BSUmVn
IHNjcmF0Y2hSZWdpc3RlciA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJn
Q2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEluc3QmKSBvdmVycmlkZTsK
KyAgICBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7
CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYp
IG92ZXJyaWRlOworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxI
ZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVt
cEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1w
bChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlZ2lzdGVy
U2V0IG1fY2xvYmJlcmVkUmVnczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDQ2FsbFNwZWNp
YWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJD
b2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFs
LmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKK3sKK30KKworQ29k
ZTo6fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhkb3VibGUgZnJl
cXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFz
aWNCbG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJl
c3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2sp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xv
dCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSog
dmFsdWUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3RhY2tT
bG90KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1ZSkpOworICAgIFN0
YWNrU2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKKyAgICBtX3N0YWNrU2xvdHMuYXBwZW5kKFdU
Rjo6bW92ZShzbG90KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lhbCogQ29kZTo6
YWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKK3sKKyAgICBTcGVj
aWFsKiByZXN1bHQgPSBzcGVjaWFsLmdldCgpOworICAgIG1fc3BlY2lhbHMuYXBwZW5kKFdURjo6
bW92ZShzcGVjaWFsKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ0NhbGxTcGVjaWFsKiBD
b2RlOjpjQ2FsbFNwZWNpYWwoKQoreworICAgIGlmICghbV9jQ2FsbFNwZWNpYWwpIHsKKyAgICAg
ICAgbV9jQ2FsbFNwZWNpYWwgPSBzdGF0aWNfY2FzdDxDQ2FsbFNwZWNpYWwqPigKKyAgICAgICAg
ICAgIGFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbFNwZWNpYWw+KCkpKTsKKyAgICB9
CisKKyAgICByZXR1cm4gbV9jQ2FsbFNwZWNpYWw7Cit9CisKK3ZvaWQgQ29kZTo6cmVzZXRSZWFj
aGFiaWxpdHkoKQoreworICAgIEIzOjpyZXNldFJlYWNoYWJpbGl0eShtX2Jsb2Nrcyk7Cit9CisK
K3ZvaWQgQ29kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2Nr
KSk7CisgICAgaWYgKHN0YWNrU2xvdHMoKS5zaXplKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJT
dGFjayBzbG90czpcbiIpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IHN0YWNrU2xv
dHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNsb3QpLCAiXG4i
KTsKKyAgICB9CisgICAgaWYgKHNwZWNpYWxzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmlu
dCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogc3BlY2lh
bHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAi
XG4iKTsKKyAgICB9CisgICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwg
IlxuIik7CisgICAgb3V0LnByaW50KCJDYWxsIGFyZyBhcmVhIHNpemU6ICIsIG1fY2FsbEFyZ0Fy
ZWFTaXplLCAiXG4iKTsKKyAgICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgbV9jYWxsZWVT
YXZlUmVnaXN0ZXJzLCAiXG4iKTsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZEZpcnN0QmxvY2tJ
bmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICB3aGlsZSAoaW5kZXggPCBzaXplKCkg
JiYgIWF0KGluZGV4KSkKKyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisK
K3Vuc2lnbmVkIENvZGU6OmZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCArIDEpOworfQorCitCYXNp
Y0Jsb2NrKiBDb2RlOjpmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorewor
ICAgIHJldHVybiBhdChmaW5kTmV4dEJsb2NrSW5kZXgoYmxvY2stPmluZGV4KCkpKTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJDb2RlX2gKKyNkZWZpbmUgQWlyQ29kZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFp
clNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
ckF0T2Zmc2V0TGlzdC5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK25hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDQ2FsbFNwZWNpYWw7CisKKy8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2
ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJdCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBi
eXRlcyB0aGFuIHRoZQorLy8gZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSAtIGZvciBleGFtcGxlIGlm
IHlvdSdyZSBnZW5lcmF0aW5nIDFNQiBvZiBtYWNoaW5lIGNvZGUsIHlvdSBuZWVkIGFib3V0Cisv
LyA0ME1CIG9mIEFpci4KKworY2xhc3MgQ29kZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
Q29kZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ29kZSgp
OworICAgIH5Db2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVl
bmN5ID0gUE5hTik7CisKKyAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRl
U2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7CisKKyAgICBT
cGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7CisKKyAgICAvLyBU
aGlzIGlzIHRoZSBzcGVjaWFsIHlvdSBuZWVkIHRvIG1ha2UgYSBDIGNhbGwhCisgICAgQ0NhbGxT
cGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIFRtcCBuZXdUbXAoQXJnOjpUeXBlIHR5cGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgor
ICAgICAgICAgICAgcmV0dXJuIFRtcDo6Z3BUbXBGb3JJbmRleChtX251bUdQVG1wcysrKTsKKyAg
ICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6ZnBUbXBGb3JJbmRl
eChtX251bUZQVG1wcysrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIG51bVRt
cHMoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAg
ICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtR1BUbXBzOworICAgICAg
ICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1cm4gbV9udW1GUFRtcHM7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYWxsQXJnQXJlYVNpemUoKSBjb25zdCB7IHJldHVy
biBtX2NhbGxBcmdBcmVhU2l6ZTsgfQorCisgICAgLy8gWW91IGNhbiBjYWxsIHRoaXMgYmVmb3Jl
IGNvZGUgZ2VuZXJhdGlvbiB0byBmb3JjZSBhIG1pbmltdW0gY2FsbCBhcmcgYXJlYSBzaXplLgor
ICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6ZSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAg
ICAgICAgbV9jYWxsQXJnQXJlYVNpemUgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIG1fY2FsbEFy
Z0FyZWFTaXplLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdURjo6cm91bmRV
cFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHNpemUpKSk7CisgICAgfQorCisg
ICAgdW5zaWduZWQgZnJhbWVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVNpemU7IH0KKwor
ICAgIC8vIE9ubHkgcGhhc2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbiBhcmUgYWxsb3dlZCB0
byBzZXQgdGhpcy4gQ3VycmVudGx5LCBvbmx5CisgICAgLy8gQWlyOjphbGxvY2F0ZVN0YWNrKCkg
ZG9lcyB0aGlzLgorICAgIHZvaWQgc2V0RnJhbWVTaXplKHVuc2lnbmVkIGZyYW1lU2l6ZSkKKyAg
ICB7CisgICAgICAgIG1fZnJhbWVTaXplID0gZnJhbWVTaXplOworICAgIH0KKworICAgIFJlZ2lz
dGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jYWxsZWVT
YXZlUmVnaXN0ZXJzOyB9CisKKyAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBhbmQgZGVs
ZXRlcyB1bnJlYWNoYWJsZSBibG9ja3MuCisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOwor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQo
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5nZXQoKTsgfQor
ICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IGF0KGluZGV4KTsgfQorCisgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4JyBzdWNoIHRo
YXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPj0gaW5kZXguCisgICAgdW5zaWduZWQg
ZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICAvLyBGaW5k
cyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGlu
ZGV4JyA+IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBp
bmRleCkgY29uc3Q7CisKKyAgICBCYXNpY0Jsb2NrKiBmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sq
KSBjb25zdDsKKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0
ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2RlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1f
aW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3Qg
Q29kZSYgY29kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29kZSgmY29kZSkK
KyAgICAgICAgICAgICwgbV9pbmRleChtX2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgp
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcioo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2RlLT5hdChtX2luZGV4KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9pbmRleCA9IG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleChtX2luZGV4ICsg
MSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlKiBtX2NvZGU7CisgICAgICAgIHVuc2ln
bmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xs
ZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0
IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1f
c3RhY2tTbG90cy5zaXplKCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90c1tpbmRleF0uZ2V0KCk7IH0KKyAg
ICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlv
bihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTdGFja1Nsb3RzQ29s
bGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBt
X2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdGFja1Nsb3Qq
IG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29s
bGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4
Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5k
ZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6
CisgICAgICAgICAgICBjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOwor
ICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgICAg
ICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOworICAgIH07CisK
KyAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gU3Rh
Y2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAgCisgICAgY2xhc3MgU3BlY2lhbHNDb2xs
ZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNwZWNpYWxzQ29sbGVjdGlvbihjb25zdCBD
b2RlJiBjb2RlKQorICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3Nw
ZWNpYWxzLnNpemUoKTsgfQorICAgICAgICBTcGVjaWFsKiBhdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFNw
ZWNpYWwqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAg
ICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIp
CisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiYgY29s
bGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24o
JmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTcGVjaWFsKiBvcGVyYXRvciooKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1f
aW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3Ir
KygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAg
Y29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1bnNp
Z25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRl
OgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFNwZWNpYWxzQ29s
bGVjdGlvbiBzcGVjaWFscygpIGNvbnN0IHsgcmV0dXJuIFNwZWNpYWxzQ29sbGVjdGlvbigqdGhp
cyk7IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Ns
b3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2Nr
Pj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPj4gbV9zcGVj
aWFsczsKKyAgICBDQ2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9OworICAg
IHVuc2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBzIHsg
MCB9OworICAgIHVuc2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fY2Fs
bEFyZ0FyZWFTaXplIHsgMCB9OworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2
ZVJlZ2lzdGVyczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDb2RlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVk
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyRnJlcXVlbnRlZEJsb2Nr
X2gKKyNkZWZpbmUgQWlyRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0
eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2Nr
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQWlyRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgi
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2
ZXJ5dGhpbmcuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9u
LmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
Z2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgaWYgKHNob3Vs
ZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgImluaXRpYWwiKTsKKworICAg
IGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIp
OworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgd2hlcmUg
d2UgcnVuIG91ciBvcHRpbWl6YXRpb25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCisgICAgLy8gRklY
TUU6IEFkZCBBaXIgb3B0aW1pemF0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU2CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHdvdWxk
IGhhdmUgYSByZWFsIHJlZ2lzdGVyIGFsbG9jYXRvci4gVGhlbiwgd2UgY291bGQgdXNlIHNwaWxs
RXZlcnl0aGluZygpCisgICAgLy8gaW4gcGxhY2Ugb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBv
bmx5IGZvciB0ZXN0aW5nLgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUwNDU3CisgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOworCisgICAg
Ly8gUHJpb3IgdG8gdGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxp
Y2l0LiBUaGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCisgICAgLy8gZG9lcyB0aGluZ3Mg
bGlrZSBpZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRo
ZW0uCisgICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CisKKyAgICAvLyBUaGlzIHR1cm5zIGFs
bCBTdGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNlIHRoZSBmcmFt
ZSBwb2ludGVyLiBJdCBkb2VzCisgICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxsb2NhdGluZyBz
dGFjayBzbG90cy4gSXQgc2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9wdGltYWwsIHNv
IHdlCisgICAgLy8gc2hvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2ZXJ5IG11Y2gu
CisgICAgYWxsb2NhdGVTdGFjayhjb2RlKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVh
bGx5IGhhdmUgYSBjb2RlIGxheW91dCBvcHRpbWl6YXRpb24gaGVyZS4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc4CisKKyAgICAvLyBGSVhNRTog
V2UgbmVlZCBhIGxhdGUgbGl2ZW5lc3MgYW5hbHlzaXMgb3ZlciByZWdpc3RlcnMgdG8gZmlsbCBp
biB0aGUKKyAgICAvLyBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCkuCisgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUxMQorCisgICAgaWYgKHNo
b3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSwgImZpbmFsIik7CisKKyAg
ICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9yZSBnZW5l
cmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gQW5k
IG5vdywgd2UgZ2VuZXJhdGUgY29kZS4KKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsK
KyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6
ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIEdlbmVy
YXRpb25Db250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5jb2RlID0gJmNvZGU7CisgICAgSW5k
ZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tMYWJlbHMoY29kZS5z
aXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+
IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhl
bHBlcnM6Okp1bXAganVtcCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAgICAgIGlmIChibG9j
a0xhYmVsc1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAubGlua1RvKGJsb2Nr
TGFiZWxzW3RhcmdldF0sICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAgICB9OworCisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxvY2tKdW1wc1tibG9j
a10ubGluaygmaml0KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7Cisg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0
ZShqaXQsIGNvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5p
c1NldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9wY29kZSA9
PSBKdW1wCisgICAgICAgICAgICAmJiBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkgPT0gY29kZS5m
aW5kTmV4dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlm
IChibG9jay0+bGFzdCgpLm9wY29kZSA9PSBSZXQpIHsKKyAgICAgICAgICAgIC8vIFdlIGN1cnJl
bnRseSBkb24ndCByZXByZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBz
byB3ZSBuZWVkIHRvCisgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCisgICAgICAg
ICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5sYXN0KCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0
KTsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKQorICAgICAgICAgICAganVtcCA9
IGluc3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAgc3dpdGNoIChibG9jay0+bnVt
U3VjY2Vzc29ycygpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIEFTU0VSVCghanVt
cC5pc1NldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAg
ICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3Vj
Y2Vzc29yQmxvY2soMCkpOworICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3JCbG9jaygx
KSAhPSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgICAgIGxpbmsoaml0
Lmp1bXAoKSwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpKTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRv
JiBsYXRlUGF0aCA6IGNvbnRleHQubGF0ZVBhdGhzKQorICAgICAgICBsYXRlUGF0aC0+cnVuKGpp
dCwgY29udGV4dCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5l
cmF0ZV9oCisjZGVmaW5lIEFpckdlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHRha2VzIGFuIEFpcjo6Q29k
ZSB0aGF0IGhhc24ndCBoYWQgYW55IHN0YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlvbmFsbHkgaGFz
bid0IGhhZCBhbnkKKy8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIGRvZXMgYm90aCBvZiB0aG9z
ZSB0aGluZ3MsIGFuZCB0aGVuIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUgZ2l2ZW4KKy8v
IENDYWxsSGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJhY2tz
IGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzCisvLyBnZW5lcmF0aW5nLgordm9pZCBnZW5l
cmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
ZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisvLyBUaGlzIGlzIGdlbmVyYXRlZCBieSBvcGNvZGVfZ2Vu
ZXJhdG9yLnJiLgorI2luY2x1ZGUgIkFpck9wY29kZUdlbmVyYXRlZC5oIgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2Vu
ZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKyNkZWZpbmUgQWlyR2VuZXJhdGlv
bkNvbnRleHRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TaGFyZWRU
YXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0IHsKKyAgICB0eXBlZGVmIHZvaWQgTGF0ZVBhdGhG
dW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworICAgIHR5cGVkZWYg
U2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKKworICAgIFZlY3RvcjxSZWZQ
dHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7CisgICAgQ29kZSogY29kZTsKK307CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUg
IkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCit7CisgICAg
UGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJoYW5kbGVDYWxsZWVTYXZlcyIpOworCisgICAg
UmVnaXN0ZXJTZXQgdXNlZENhbGxlZVNhdmVzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAg
ICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAp
IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXQgZmlyc3Qgd2UganVzdCByZWNvcmQgYWxsIHVz
ZWQgcmVncy4KKyAgICAgICAgICAgICAgICAgICAgdXNlZENhbGxlZVNhdmVzLnNldCh0bXAucmVn
KCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93
IHdlIGZpbHRlciB0byByZWFsbHkgZ2V0IHRoZSBjYWxsZWUgc2F2ZXMuCisgICAgdXNlZENhbGxl
ZVNhdmVzLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKworICAg
IGlmICghdXNlZENhbGxlZVNhdmVzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpID0gUmVnaXN0ZXJBdE9mZnNl
dExpc3QodXNlZENhbGxlZVNhdmVzKTsKKworICAgIHNpemVfdCBieXRlU2l6ZSA9IDA7CisgICAg
Zm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lz
dGVycygpKQorICAgICAgICBieXRlU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4o
LWVudHJ5Lm9mZnNldCgpKSwgYnl0ZVNpemUpOworCisgICAgU3RhY2tTbG90KiBzYXZlc0FyZWEg
PSBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAg
ICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUgYWxyZWFkeSBwaW5u
ZWQgYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCisgICAgLy8gYXJlYS4gQWxzbywgb3Vy
IHJ1bnRpbWUgZG9lcyBub3QgcmVxdWlyZSB1cyB0byBwaW4gdGhlIHNhdmVzIGFyZWEuIE1heWJl
IHdlIHNob3VsZG4ndCBwaW4gaXQ/CisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAoLWJ5
dGVTaXplKTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0
JiBlbnRyeSkgLT4gQXJnIHsKKyAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soc2F2ZXNBcmVhLCBl
bnRyeS5vZmZzZXQoKSArIGJ5dGVTaXplKTsKKyAgICB9OworCisgICAgSW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChjb2RlKTsKKyAgICAKKyAgICAvLyBGaXJzdCBpbnNlcnQgc2F2aW5nIGNvZGUg
aW4gdGhlIHByb2xvZ3VlLgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkg
OiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICBpbnNlcnRpb25TZXQuaW5z
ZXJ0KAorICAgICAgICAgICAgMCwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91
YmxlLCBjb2RlWzBdLT5hdCgwKS5vcmlnaW4sCisgICAgICAgICAgICBUbXAoZW50cnkucmVnKCkp
LCBhcmdGb3IoZW50cnkpKTsKKyAgICB9CisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29kZVsw
XSk7CisKKyAgICAvLyBOb3cgaW5zZXJ0IHJlc3RvcmUgY29kZSBhdCBlcGlsb2d1ZXMuCisgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgSW5zdCYgbGFzdCA9IGJs
b2NrLT5sYXN0KCk7CisgICAgICAgIGlmIChsYXN0Lm9wY29kZSAhPSBSZXQpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5
IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoCisgICAgICAgICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIGVudHJ5LnJlZygp
LmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgbGFzdC5vcmlnaW4sCisgICAgICAgICAgICAg
ICAgYXJnRm9yKGVudHJ5KSwgVG1wKGVudHJ5LnJlZygpKSk7CisgICAgICAgIH0KKyAgICAgICAg
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNh
bGxlZVNhdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRsZUNhbGxl
ZVNhdmVzX2gKKyNkZWZpbmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBDb2RlOworCisvLyBUaGlzIHBoYXNlIGlkZW50aWZpZXMgY2FsbGVlLXNhdmUgcmVn
aXN0ZXJzIGFuZCBhZGRzIGNvZGUgdG8gc2F2ZS9yZXN0b3JlIHRoZW0gaW4gdGhlCisvLyBwcm9s
b2d1ZS9lcGlsb2d1ZSB0byB0aGUgY29kZS4gSXQncyBhIG1hbmRhdG9yeSBwaGFzZS4KKworLy8g
RklYTUU6IEl0IHdvdWxkIGJlIGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3RpdmUgd2l0
aCB0aGUgQWlyIGNsaWVudCBhbmQgYWxzbyBtb3JlCisvLyBwb3dlcmZ1bC4KKy8vIFdlIHNob3Vs
ZCBoYXZlIHNocmluayB3cmFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDQ1OAorLy8gV2Ugc2hvdWxkIG1ha2UgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBj
bGllbnQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTkKKwor
dm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJIYW5k
bGVDYWxsZWVTYXZlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0
OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJs
b2NrLT5tX2luc3RzLCBtX2luc2VydGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnNlcnRpb25TZXRfaAorI2RlZmluZSBBaXJJbnNl
cnRpb25TZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIK
KyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJh
c2ljQmxvY2s7CitjbGFzcyBDb2RlOworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPEluc3Q+IElu
c2VydGlvbjsKKworY2xhc3MgSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBJbnNlcnRpb25T
ZXQoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAgfQorCisg
ICAgQ29kZSYgY29kZSgpIHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVD4KKyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYgaW5zZXJ0aW9uKQorICAgIHsKKyAg
ICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oaW5zZXJ0aW9uKSk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGluc2VydEluc3Qo
c2l6ZV90IGluZGV4LCBJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVuZEluc2VydGlv
bihJbnNlcnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOworICAgIH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBpbnNlcnQo
c2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBp
bnNlcnRJbnN0KGluZGV4LCBJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cyku
Li4pKTsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitwcml2YXRl
OgorICAgIENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2luc2VydGlv
bnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K3ZvaWQgSW5zdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChvcGNvZGUsICIgIiwgbGlzdER1bXAoYXJncykpOworICAgIGlmIChvcmlnaW4pIHsKKyAgICAg
ICAgaWYgKGFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOworICAgICAg
ICBvdXQucHJpbnQoKm9yaWdpbik7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
ckluc3RfaAorI2RlZmluZSBBaXJJbnN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKK2NsYXNz
IFJlZ2lzdGVyU2V0OworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNw
YWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKKworc3RydWN0IEluc3Qgewor
cHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPEFyZywgMz4gQXJnTGlzdDsKKworICAgIEluc3Qo
KQorICAgICAgICA6IG9yaWdpbihudWxscHRyKQorICAgICAgICAsIG9wY29kZShOb3ApCisgICAg
eworICAgIH0KKyAgICAKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisg
ICAgICAgIDogb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsK
KyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIElu
c3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKKyAgICAgICAgOiBhcmdzeyBhcmcsIGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwg
b3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisK
KyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IEFyZ0xpc3QmIGFy
Z3VtZW50cykKKyAgICAgICAgOiBhcmdzKGFyZ3VtZW50cykKKyAgICAgICAgLCBvcmlnaW4ob3Jp
Z2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3Qo
T3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnTGlzdCYmIGFyZ3VtZW50cykKKyAgICAg
ICAgOiBhcmdzKFdURjo6bW92ZShhcmd1bWVudHMpKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4p
CisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gTm90ZSB0
aGF0IHRoZXNlIGZ1bmN0b3JzIGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2Fu
dCB0byB1c2UgdGhlbSBmb3IgdGhpbmdzIHRoYXQKKyAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFu
dCB0byBiZSBlZGl0ZWQ7IGlmIHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYi
IHRoZW4geW91J3JlCisgICAgLy8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCisKKyAgICAvLyBU
aGlzIG9ubHkgd2Fsa3MgdGhvc2UgVG1wcyB0aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCwg
YW5kIGl0IGRvZXNuJ3QgdGVsbCB5b3UgdGhlaXIgcm9sZQorICAgIC8vIG9yIHR5cGUuCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKEFyZyYgYXJnIDogYXJncykK
KyAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0
eXBlZGVmIHZvaWQgRWFjaEFyZ0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJnOjpUeXBlKTsK
KyAgICAKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUpLiBU
aGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRv
ci5yYi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEFy
Zyhjb25zdCBGdW5jdG9yJik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0bXAs
IHJvbGUsIHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBm
b3JFYWNoVG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JFYWNo
QXJnKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlwZSwgZnVu
Y3Rvcik7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGluZyBjYW4gYmUgZWl0
aGVyIEFyZyBvciBUbXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIFJldHVy
bnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9ja3Mg
c29tZSBleHRyYSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0Owor
CisgICAgLy8gUmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRo
aXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFDbG9i
YmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAg
IGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVzZSB0
aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRv
bmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ks
IHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5z
IHRydWUuCisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7
CisKKyAgICAvLyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9ybXMg
cmlnaHQgbm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bj
b2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBBc3N1
bWluZyB0aGlzIGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdpbGwg
aXQgc3RpbGwgYmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1dCBh
biBBZGRyIHJlZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFyZywg
b2YgY291cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0aGlz
OiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNwaWxs
aW5nOworICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYgaXQg
Y2FuIHJlcGxhY2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAgIC8v
IGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNoVG1w
IHRvIGRvIGEgcmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0
aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBh
ZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21lIGNv
ZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIgYmFj
a2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUganVt
cCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRoZSAi
ZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBpcyBh
dXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVyczo6
SnVtcCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworCisgICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFyZ3M7CisgICAg
VmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9t
LgorICAgIE9wY29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gKKyNk
ZWZpbmUgQWlySW5zdElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclNw
ZWNpYWwuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFj
aDxUbXA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lk
IGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGluc3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1
Y3QgRm9yRWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0
YXRpYyB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAg
ICB7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgSW5zdDo6Zm9yRWFj
aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JFYWNo
KCp0aGlzLCBmdW5jdG9yKTsKK30KKworaW5saW5lIGJvb2wgSW5zdDo6aGFzU3BlY2lhbCgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGFyZ3Muc2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7Cit9
CisKK2lubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkK
K3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFs
KCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEluc3Q6OnJl
cG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7Cisg
ICAgQVNTRVJUKGhhc1NwZWNpYWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVz
ZWRSZWdpc3RlcnMoKnRoaXMsIHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1No
aWZ0VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0
KQorICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyNl
bHNlCisgICAgVU5VU0VEX1BBUkFNKGluc3QpOworICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9
ICAgCisKK2lubGluZSBib29sIGlzTHNoaWZ0MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0KQorewor
ICAgIHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJ
bnN0SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2
ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxp
dmVuZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVzc19o
CisjZGVmaW5lIEFpckxpdmVuZXNzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIz
SW5kZXhTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCisvLyBZb3UgY2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVyIEFy
ZydzLiBJZiB5b3UgY29tcHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNrIGxp
dmVuZXNzIGFuZCB0bXAgbGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNz
IExpdmVuZXNzIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsKKyAg
ICAgICAgbV9saXZlQXRIZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2ZUF0
VGFpbC5yZXNpemUoY29kZS5zaXplKCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+
IHNlZW47CisKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNo
YW5nZWQpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgZm9y
IChzaXplX3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAg
ICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOworICAg
ICAgICAgICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgt
LTspCisgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0
SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJsb2Nr
KTsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgpID09
IG1fbGl2ZUF0SGVhZFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNC
bG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAgICAg
ICAgICAgICBsb2NhbENhbGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5kKCkp
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2td
ID0gbG9jYWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9j
aykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAg
IH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJs
b2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107Cisg
ICAgfQorCisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJzZS4K
KyAgICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxjKExp
dmVuZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1fbGl2
ZShsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xpdmU7
IH0KKyAgICAgICAgSGFzaFNldDxUaGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6bW92
ZShtX2xpdmUpOyB9CisKKyAgICAgICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAgICAg
IHsKKyAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlz
QWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xp
dmUucmVtb3ZlKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5l
eHQgaGFuZGxlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5oYXNT
cGVjaWFsKCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmZv
ckVhY2goCisgICAgICAgICAgICAgICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShUaGluZyhUbXAocmVnKSkpOworICAgICAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAg
Ly8gRmluYWxseSBoYW5kbGUgdXNlJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+
KAorICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBI
YXNoU2V0PFRoaW5nPiBtX2xpdmU7CisgICAgfTsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhN
YXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1h
cDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRUYWlsOworfTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpckxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE0OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5E
IElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisj
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBTeWxs
YWJ1czoKKyMKKyMgUm9sZXMgYW5kIHR5cGVzOgorIyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJhbC1w
dXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1cnBv
c2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVyYWwt
cHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVnaXN0
ZXIgb3IgdmFsdWUKKyMgRDpGID0+IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisj
IFVEOkYgPT4gdXNlIGFuZCBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIworIyBB
cmd1bWVudCBraW5kczoKKyMgVG1wID0+IHRlbXBvcmFyeSBvciByZWdpc3RlcgorIyBJbW0gPT4g
MzItYml0IGltbWVkaWF0ZSBpbnQKKyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0CisjIEFkZHIgPT4g
YWRkcmVzcyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJhc2VJbmRl
eCBhZGRyZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhlIHBhcnNlciB2aWV3
cyB0aGVzZSB0aGluZ3MgYXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0aGF0IHRoZXkgZmFs
bCBpbnRvIHR3byBkaXN0aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28sIGFsdGhvdWdoIHRo
aXMgZmlsZSB1c2VzIGEgcGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwgbm9uZSBvZiB0aGUg
d2hpdGVzcGFjZSBvcgorIyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBwYXJz
ZXIuIEZvciBleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQyIFU6RywgVUQ6RiBJ
bW0sIFRtcCBBZGRyLCBUbXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQga25vdyB0aGF0IHRo
aXMgaXMgdGhlIHNhbWUgYXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAgICAgSW1tLCBUbXAK
KyMgICAgIEFkZHIsIFRtcAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1Y3Rpb24gdGhhdCB1
c2VzIGEgR1BSIG9yIGFuIGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBhIGZsb2F0IHJlZ2lz
dGVyLgorCisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBsZWFkaW5nIGNhcGl0
YWwgKEFkZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1ibGVyCisjIEFQSSB0
aGF0IGhhcyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitOb3AKKworQWRkMzIgVTpH
LCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAgIEFk
ZHIsIFRtcAorICAgIFRtcCwgQWRkcgorCitBZGQzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBU
bXAsIFRtcAorCitBbmQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisg
ICAgVG1wLCBBZGRyCisgICAgQWRkciwgVG1wCisgICAgSW1tLCBBZGRyCisKK0xzaGlmdDMyIFU6
RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisKK011bDMyIFU6RywgVUQ6Rwor
ICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisKKyMgTm90ZSB0aGF0IE1vdmUgb3BlcmF0ZXMg
b3ZlciB0aGUgZnVsbCByZWdpc3RlciBzaXplLCB3aGljaCBpcyBlaXRoZXIgMzItYml0IG9yIDY0
LWJpdCBkZXBlbmRpbmcgb24KKyMgdGhlIHBsYXRmb3JtLiBJJ20gbm90IGVudGlyZWx5IHN1cmUg
dGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZzsgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGp1c3QgaGF2
ZSBhCisjIE1vdmU2NCBpbnN0cnVjdGlvbi4gT1RPSCwgb3VyIE1hY3JvQXNzZW1ibGVycyBhbHJl
YWR5IGhhdmUgdGhpcyBub3Rpb24gb2YgIm1vdmUoKSIgdGhhdCBiYXNpY2FsbHkKKyMgbWVhbnMg
bW92ZVB0ci4KK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAg
SW1tNjQsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkUHRyICMgVGhpcyBtZWFucyB0aGF0ICJN
b3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMgImxvYWQiIG5vdCAibW92ZSIuCisg
ICAgSW5kZXgsIFRtcCBhcyBsb2FkUHRyCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlUHRyCisgICAg
VG1wLCBJbmRleCBhcyBzdG9yZVB0cgorCitNb3ZlMzIgVTpHLCBEOkcKKyAgICBUbXAsIFRtcCBh
cyB6ZXJvRXh0ZW5kMzJUb1B0cgorICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKKyAgICBJbmRleCwg
VG1wIGFzIGxvYWQzMgorICAgIFRtcCwgQWRkciBhcyBzdG9yZTMyCisgICAgVG1wLCBJbmRleCBh
cyBzdG9yZTMyCisKK01vdmVEb3VibGUgVTpGLCBEOkYKKyAgICBUbXAsIFRtcAorICAgIEFkZHIs
IFRtcCBhcyBsb2FkRG91YmxlCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgVG1w
LCBBZGRyIGFzIHN0b3JlRG91YmxlCisgICAgVG1wLCBJbmRleCBhcyBzdG9yZURvdWJsZQorCitN
b3ZlNjRUb0RvdWJsZSBVOkcsIEQ6RgorICAgIFRtcCwgVG1wCisKK01vdmVEb3VibGVUbzY0IFU6
RiwgRDpHCisgICAgVG1wLCBUbXAKKworQnJhbmNoQWRkMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5j
aAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXND
b25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRy
LCBUbXAKKworQnJhbmNoTXVsMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQs
IFRtcCwgVG1wCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaFN1YjMyIFU6RywgVTpH
LCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEltbSwg
VG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisgICAg
UmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE5lZzMyIFU6RywgVUQ6RyAvYnJhbmNoCisgICAg
UmVzQ29uZCwgVG1wCisKK0p1bXAgL2JyYW5jaAorCitSZXQgL3Rlcm1pbmFsCisKK0JyZWFrcG9p
bnQgL3Rlcm1pbmFsCisKKyMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2aW9yLiBBIFBhdGNo
J3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3BlY2lhbCBvcGVyYW5k
LAorIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgorc3BlY2lhbCBQYXRjaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2Nv
cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK1Bo
YXNlU2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogbmFtZSkKKyAgICA6
IG1fY29kZShjb2RlKQorICAgICwgbV9uYW1lKG5hbWUpCit7CisgICAgaWYgKHNob3VsZER1bXBJ
UkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGJlZm9yZSAiLCBuYW1lLCAi
OlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNh
dmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhjb2Rl
KTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAgIGlmIChzaG91bGRWYWxp
ZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgdmFsaWRhdGUobV9jb2RlLCBtX25hbWUsIG1f
ZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyUGhhc2VTY29wZV9oCisjZGVmaW5lIEFpclBoYXNlU2NvcGVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZf
TUFLRV9OT05DT1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKENv
ZGUmLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMg
dmFsaWRhdGlvbgorCitwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFy
KiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVy
UHJpb3JpdHkuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJSZWdpc3RlclNl
dC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0
aWMgVmVjdG9yPEdQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAg
ICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxHUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdp
c3RlclNldCBhbGwgPSBSZWdpc3RlclNldDo6YWxsR1BScygpOworICAgICAgICAgICAgYWxsLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgYWxsLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgICAg
ICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdp
c3RlcnMoKTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAo
UmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAg
ICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdl
dChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigp
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7
Cit9CisKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAg
ICBzdGF0aWMgVmVjdG9yPEZQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10g
eworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7CisgICAgICAgICAg
ICBSZWdpc3RlclNldCBhbGwgPSBSZWdpc3RlclNldDo6YWxsRlBScygpOworICAgICAgICAgICAg
UmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KCk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyBy
ZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsm
XSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZS5nZXQocmVn
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5mcHIoKSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQor
Citjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUgdHlwZSkK
K3sKKyAgICBzdGF0aWMgVmVjdG9yPFJlZz4qIHJlc3VsdFtBcmc6Om51bVR5cGVzXTsKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAg
b25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdID0gbmV3IFZl
Y3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBncHJzSW5Qcmlvcml0
eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdLT5hcHBlbmQoUmVnKHJl
ZykpOworICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdID0gbmV3IFZlY3RvcjxSZWc+KCk7Cisg
ICAgICAgICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAg
ICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICB9
KTsKKyAgICByZXR1cm4gKnJlc3VsdFt0eXBlXTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAor
I2RlZmluZSBBaXJSZWdpc3RlclByaW9yaXR5X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5m
by5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJp
b3JpdHlPcmRlcigpOworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIo
KTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlP
cmRlcjsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZv
PiB7CisgICAgY29uc3QgVmVjdG9yPEdQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJu
IGdwcnNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVy
c0luUHJpb3JpdHlPcmRlcjxGUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEZQUlJlZz4mIGlu
UHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGZwcnNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4KK2NvbnN0IFZlY3Rvcjx0eXBlbmFtZSBCYW5rOjpSZWdp
c3RlclR5cGU+JiByZWdzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICByZXR1cm4gUmVnaXN0ZXJz
SW5Qcmlvcml0eU9yZGVyPEJhbms+OjppblByaW9yaXR5T3JkZXIoKTsKK30KKworY29uc3QgVmVj
dG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBjaGFyKiBjb25zdCBT
cGVjaWFsOjpkdW1wUHJlZml4ID0gIiYiOworCitTcGVjaWFsOjpTcGVjaWFsKCkKKyAgICA6IG1f
aW5kZXgoVUlOVF9NQVgpCit7Cit9CisKK1NwZWNpYWw6On5TcGVjaWFsKCkKK3sKK30KKworQ1N0
cmluZyBTcGVjaWFsOjpuYW1lKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7
CisgICAgZHVtcEltcGwob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOworfQorCit2
b2lkIFNwZWNpYWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoZHVtcFByZWZpeCk7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICBpZiAobV9pbmRleCAhPSBV
SU5UX01BWCkKKyAgICAgICAgb3V0LnByaW50KG1faW5kZXgpOworfQorCit2b2lkIFNwZWNpYWw6
OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCp0aGlz
LCAiOiAiKTsKKyAgICBkZWVwRHVtcEltcGwob3V0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBaXJTcGVjaWFsX2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFs
bG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Njb3Bl
ZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNv
bnRleHQ7CisKK2NsYXNzIFNwZWNpYWwgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNp
YWwpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBj
b25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworICAgIAorICAgIFNwZWNpYWwoKTsKKyAgICB2
aXJ0dWFsIH5TcGVjaWFsKCk7CisKKyAgICBDU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgIHZp
cnR1YWwgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFj
aEFyZ0NhbGxiYWNrPiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZChJbnN0JikgPSAw
OworICAgIHZpcnR1YWwgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgp
ID0gMDsKKworICAgIC8vIFRoaXMgZ2V0cyBjYWxsZWQgb24gZm9yIGVhY2ggSW5zdCB0aGF0IHVz
ZXMgdGhpcyBTcGVjaWFsLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvCisgICAgLy8gZ3Vh
cmFudGVlIHRoYXQgYSBTcGVjaWFsIGdldHMgdXNlZCBmcm9tIGp1c3Qgb25lIEluc3QsIGJlY2F1
c2UgQWlyIG1pZ2h0IHRhaWxkdXAgbGF0ZS4gU28sCisgICAgLy8gaWYgeW91IHdhbnQgdG8gcGFz
cyB0aGlzIGluZm9ybWF0aW9uIGRvd24gdG8gZ2VuZXJhdGUoKSwgdGhlbiB5b3UgaGF2ZSB0byBl
aXRoZXI6CisgICAgLy8KKyAgICAvLyAxKSBHZW5lcmF0ZSBBaXIgdGhhdCBzdGFydHMgd2l0aCBh
IHNlcGFyYXRlIFNwZWNpYWwgcGVyIFBhdGNoIEluc3QsIGFuZCB0aGVuIG1lcmdlCisgICAgLy8g
ICAgdXNlZFJlZ2lzdGVyIHNldHMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGdyZWF0LCBidXQgaXQg
b3B0aW1pemVzIGZvciB0aGUgY29tbW9uIGNhc2UgdGhhdAorICAgIC8vICAgIEFpciBkaWRuJ3Qg
ZHVwbGljYXRlIGNvZGUgb3IgdGhhdCBzdWNoIGR1cGxpY2F0aW9uIGRpZG4ndCBjYXVzZSBhbnkg
aW50ZXJlc3RpbmcgY2hhbmdlcyB0bworICAgIC8vICAgIHJlZ2lzdGVyIGFzc2lnbm1lbnQuCisg
ICAgLy8KKyAgICAvLyAyKSBIYXZlIHRoZSBTcGVjaWFsIG1haW50YWluIGEgSGFzaE1hcDxJbnN0
KiwgUmVnaXN0ZXJTZXQ+LiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGFuYWx5c2lzCisgICAgLy8g
ICAgdGhhdCBmZWVkcyBpbnRvIHRoaXMgY2FsbCBpcyBwZXJmb3JtZWQganVzdCBiZWZvcmUgY29k
ZSBnZW5lcmF0aW9uIGFuZCB0aGVyZSBpcyBubyB3YXkKKyAgICAvLyAgICBmb3IgdGhlIFZlY3Rv
cjw+J3MgdGhhdCBjb250YWluIHRoZSBJbnN0cyB0byBiZSByZWFsbG9jYXRlZC4gVGhpcyBhbGxv
d3MgZ2VuZXJhdGUoKSB0bworICAgIC8vICAgIGNvbnN1bHQgdGhlIEhhc2hNYXAuCisgICAgLy8K
KyAgICAvLyAzKSBIeWJyaWQ6IHlvdSBjb3VsZCB1c2UgKDEpIGFuZCBmaXJlIHVwIGEgSGFzaE1h
cCBpZiB5b3Ugc2VlIG11bHRpcGxlIGNhbGxzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGl0
J3Mgbm90IHBvc3NpYmxlIHRvIHJlbHkgb24gcmVwb3J0VXNlZFJlZ2lzdGVycygpIGJlaW5nIGNh
bGxlZCBpbiB0aGUgc2FtZSBvcmRlcgorICAgIC8vIGFzIGdlbmVyYXRlKCkuIElmIHdlIGNvdWxk
IHJlbHkgb24gdGhhdCwgdGhlbiB3ZSBjb3VsZCBqdXN0IGhhdmUgZWFjaCBTcGVjaWFsIGluc3Rh
bmNlCisgICAgLy8gbWFpbnRhaW4gYSBWZWN0b3Igb2YgUmVnaXN0ZXJTZXQncyBhbmQgdGhlbiBw
cm9jZXNzIHRoYXQgdmVjdG9yIGluIHRoZSByaWdodCBvcmRlciBpbgorICAgIC8vIGdlbmVyYXRl
KCkuIEJ1dCwgdGhlIG9yZGVyaW5nIGRpZmZlcmVuY2UgaXMgdW5saWtlbHkgdG8gY2hhbmdlIHNp
bmNlIGl0IHdvdWxkIGhhcm0gdGhlCisgICAgLy8gcGVyZm9ybWFuY2Ugb2YgdGhlIGxpdmVuZXNz
IGFuYWx5c2lzLgorICAgIC8vCisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyAoMSkgZm9yIEIzIHN0
YWNrbWFwcy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29u
c3QgUmVnaXN0ZXJTZXQmKSA9IDA7CisgICAgCisgICAgdmlydHVhbCBDQ2FsbEhlbHBlcnM6Okp1
bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikgPSAw
OworCisgICAgdmlydHVhbCBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKElu
c3QmKSA9IDA7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lk
IGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFs
IHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lk
IGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgQ29kZTsKKworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICB1bnNpZ25l
ZCBtX2luZGV4OworfTsKKworY2xhc3MgRGVlcFNwZWNpYWxEdW1wIHsKK3B1YmxpYzoKKyAgICBE
ZWVwU3BlY2lhbER1bXAoY29uc3QgU3BlY2lhbCogc3BlY2lhbCkKKyAgICAgICAgOiBtX3NwZWNp
YWwoc3BlY2lhbCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zcGVjaWFsKQorICAgICAgICAgICAgbV9z
cGVjaWFsLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJp
bnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBTcGVjaWFsKiBtX3Nw
ZWNpYWw7Cit9OworCitpbmxpbmUgRGVlcFNwZWNpYWxEdW1wIGRlZXBEdW1wKGNvbnN0IFNwZWNp
YWwqIHNwZWNpYWwpCit7CisgICAgcmV0dXJuIERlZXBTcGVjaWFsRHVtcChzcGVjaWFsKTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpclNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNl
U2NvcGUuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSAiQjNJ
bmRleE1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29w
ZSBwaGFzZVNjb3BlKGNvZGUsICJzcGlsbEV2ZXJ5dGhpbmciKTsKKworICAgIC8vIFdlIHdhbnQg
dG8ga25vdyB0aGUgc2V0IG9mIHJlZ2lzdGVycyB1c2VkIGF0IGV2ZXJ5IHBvaW50IGluIGV2ZXJ5
IGJhc2ljIGJsb2NrLgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxSZWdpc3RlclNl
dD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOworICAgIExpdmVuZXNzPFRtcD4gbGl2ZW5l
c3MoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAg
TGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAg
ICAgICB1c2VkUmVnaXN0ZXJzW2Jsb2NrXS5yZXNpemUoYmxvY2stPnNpemUoKSArIDEpOworCisg
ICAgICAgIGF1dG8gc2V0VXNlZFJlZ2lzdGVycyA9IFsmXSAodW5zaWduZWQgaW5kZXgpIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXQgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbmRleF07
CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAg
ICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHRt
cC5yZWcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc2V0VXNlZFJl
Z2lzdGVycyhibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5zaWduZWQg
aW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBs
b2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAgICBzZXRV
c2VkUmVnaXN0ZXJzKGluc3RJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBBbGxv
Y2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBh
bGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOworICAgIGZvciAodW5zaWduZWQgdHlwZUluZGV4
ID0gMDsgdHlwZUluZGV4IDwgQXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgpIHsKKyAgICAgICAg
VmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90c1t0eXBlSW5kZXhd
OworICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6VHlwZT4odHlwZUlu
ZGV4KTsKKyAgICAgICAgc3RhY2tTbG90cy5yZXNpemUoY29kZS5udW1UbXBzKHR5cGUpKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNvZGUubnVtVG1wcyh0eXBlKTsgdG1wSW5k
ZXgtLTspCisgICAgICAgICAgICBzdGFja1Nsb3RzW3RtcEluZGV4XSA9IGNvZGUuYWRkU3RhY2tT
bG90KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgfQorCisgICAgSW5zZXJ0aW9u
U2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJs
b2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0
QmVmb3JlID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4XTsKKyAgICAgICAgICAgIFJl
Z2lzdGVyU2V0JiBzZXRBZnRlciA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleCArIDFd
OworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAg
ICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAo
dG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
ICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBhbGxTdGFja1Nsb3RzW3R5cGVdW3Rt
cC50bXBJbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3RhY2so
c3RhY2tTbG90KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGZpZ3VyZSBvdXQg
YSByZWdpc3RlciB0byB1c2UuIEhvdyB3ZSBkbyB0aGF0IGRlcGVuZHMgb24gdGhlIHJvbGUuCisg
ICAgICAgICAgICAgICAgICAgIFJlZyBjaG9zZW5SZWc7CisgICAgICAgICAgICAgICAgICAgIHN3
aXRjaCAocm9sZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgorICAgICAg
ICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkRlZjoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEFmdGVyLmdldChyZWcpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlRGVmOgorICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRB
ZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRl
ci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNl
dChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAgICAgICAgdG1w
ID0gVG1wKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSB0
eXBlID09IEFyZzo6R1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKworICAgICAgICAgICAgICAgICAg
ICBpZiAoQXJnOjppc1VzZShyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0
aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIG1v
dmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorI2Rl
ZmluZSBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOwor
CisvLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRlc3RpbmcuIEl0IGJlaGF2ZXMgbGlrZSBhIHJlZ2lz
dGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2UgdGhhdCBpdAorLy8gZWxpbWluYXRlcyB0ZW1wb3Jh
cmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBhbHdheXMgc3Bp
bGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmllcy4gVGhlIHJlc3VsdGluZyBjb2RlIGlzIGdvaW5nIHRv
IGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMgcGhhc2UgaXMgZ3JlYXQgaWYgeW91CisvLyB0aGlu
ayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuIFlvdSBjYW4g
Y29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhpcworLy8gcGhhc2UgaW5zdGVhZCBvZiB0aGUgcmVn
aXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8vIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGlzIHBoYXNl
IGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBvc3NpYmxlLCBpdCdzIG5vdCBldmVuIHdyaXR0ZW4g
aW4gYQorLy8gcGFydGljdWxhcmx5IGVmZmljaWVudCB3YXkuIFNvLCBkb24ndCBnZXQgYW55IGlk
ZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2UgdG8gcmVkdWNlIGNvbXBpbGVyCisvLyBsYXRlbmN5
LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQsIHlvdSBzaG91bGQgY29tZSB1cCB3aXRoIGEgY2xl
dmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVzaW5nCisvLyB0aGlzIHNpbGx5IHRoaW5nLgorCit2
b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGlsbEV2
ZXJ5dGhpbmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
dGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFN0YWNrU2xvdDo6c2V0T2Zmc2V0RnJvbUZQ
KGludHB0cl90IHZhbHVlKQoreworICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgaWYg
KG1fdmFsdWUpCisgICAgICAgIG1fdmFsdWUtPm1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7Cit9CisK
K3ZvaWQgU3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJzdGFjayIsIG1faW5kZXgpOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwg
bV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQg
PSAiLCBtX2tpbmQpOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBvdXQucHJpbnQoIiwgdmFs
dWUgPSAiLCAqbV92YWx1ZSk7Cit9CisKK1N0YWNrU2xvdDo6U3RhY2tTbG90KHVuc2lnbmVkIGJ5
dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1
ZSogdmFsdWUpCisgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICwgbV9pbmRleChpbmRl
eCkKKyAgICAsIG1fb2Zmc2V0RnJvbUZQKHZhbHVlID8gdmFsdWUtPm9mZnNldEZyb21GUCgpIDog
MCkKKyAgICAsIG1fa2luZChraW5kKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBBU1NF
UlQoYnl0ZVNpemUpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclN0YWNrU2xvdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
clN0YWNrU2xvdF9oCisjZGVmaW5lIEFpclN0YWNrU2xvdF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxs
b2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN0YWNr
U2xvdFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3RhY2tTbG90IHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShTdGFja1Nsb3QpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9i
eXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisg
ICAgdW5zaWduZWQgYWxpZ25tZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChieXRlU2l6
ZSgpIDw9IDEpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkg
PD0gMikKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSA0
KQorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIHJldHVybiA4OworICAgIH0KKworICAg
IFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAg
IC8vIFplcm8gbWVhbnMgdGhhdCBpdCdzIG5vdCB5ZXQgYXNzaWduZWQuCisgICAgaW50cHRyX3Qg
b2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworICAgIC8v
IFRoaXMgc2hvdWxkIHVzdWFsbHkganVzdCBiZSBjYWxsZWQgZnJvbSBwaGFzZXMgdGhhdCBkbyBz
dGFjayBhbGxvY2F0aW9uLiBCdXQgeW91IGNhbgorICAgIC8vIHRvdGFsbHkgZm9yY2UgYSBzdGFj
ayBzbG90IHRvIGxhbmQgYXQgc29tZSBvZmZzZXQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAo
aW50cHRyX3QpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9p
ZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBDb2RlOworCisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBp
bmRleCwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqKTsKKyAgICAKKyAgICB1bnNpZ25l
ZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgaW50cHRyX3QgbV9vZmZz
ZXRGcm9tRlA7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgU3RhY2tTbG90VmFsdWUq
IG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7CitwdWJsaWM6CisgICAg
RGVlcFN0YWNrU2xvdER1bXAoY29uc3QgU3RhY2tTbG90KiBzbG90KQorICAgICAgICA6IG1fc2xv
dChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisgICAgICAgICAgICBtX3Nsb3QtPmRl
ZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+
Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFN0YWNrU2xvdCogbV9zbG90OworfTsK
KworaW5saW5lIERlZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1wKGNvbnN0IFN0YWNrU2xvdCogc2xv
dCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAoc2xvdCk7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBBaXJTdGFja1Nsb3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclRtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJUbXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpclRtcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFRtcDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnBy
aW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc1JlZygp
KSB7CisgICAgICAgIG91dC5wcmludChyZWcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoaXNHUCgpKSB7CisgICAgICAgIG91dC5wcmludCgiJXRtcCIsIGdwVG1wSW5kZXgo
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIiVmdG1wIiwgZnBU
bXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJU
bXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1w
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBfaAorI2RlZmluZSBBaXJU
bXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNs
dWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBBcmc7CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgYSByZWdpc3Rlci4g
SXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBvciBGUFIuIEl0IGNhbiBhbHNvCisv
LyBiZSB1c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVt
cG9yYXJ5KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0
ZXJzZSBuYW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGlzIG5hbWUgYSBsb3QuCisK
K2NsYXNzIFRtcCB7CitwdWJsaWM6CisgICAgVG1wKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisg
ICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChSZWcgcmVnKQorICAgIHsKKyAgICAgICAg
aWYgKHJlZykgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAg
IG1fdmFsdWUgPSBlbmNvZGVHUFIocmVnLmdwcigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJlZy5mcHIoKSk7CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgbV92YWx1ZSA9IDA7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKGNv
bnN0IEFyZyYpOworCisgICAgc3RhdGljIFRtcCBncFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBl
bmNvZGVHUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c3RhdGljIFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAg
VG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChpbmRleCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0dQKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVlKTsKKyAgICB9CisK
KyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQ
KG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBS
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUFIobV92YWx1ZSk7Cisg
ICAgfQorCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNH
UFIoKSB8fCBpc0ZQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGRlY29kZUdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBGUFJSZWcg
ZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFIobV92YWx1ZSk7Cisg
ICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQor
ICAgICAgICAgICAgcmV0dXJuIGdwcigpOworICAgICAgICByZXR1cm4gZnByKCk7CisgICAgfQor
CisgICAgYm9vbCBoYXNUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlz
UmVnKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBUbXAo
bV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7Cisg
ICAgICAgIHJldHVybiBmcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhISp0aGlzOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09
IG90aGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7
CisKKyAgICBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1f
dmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICB7CisgICAgfQorCisg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gKnRoaXMgPT0gVG1wKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6Oklu
dEhhc2g8aW50Pjo6aGFzaChtX3ZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0
YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4g
MSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlAodW5zaWduZWQgaW5k
ZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29k
ZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAg
IHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICByZXR1cm4g
ZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsg
MSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBUbXAodW5zaWduZWQg
aW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjps
YXN0RlBSZWdpc3RlcigpKSAtIDEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBp
c0VuY29kZWRHUChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPiAwOwor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQKGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZSA8IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNv
ZGVkR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1
ZSkgJiYgdmFsdWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSk7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBSKGludCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgdmFsdWUgPj0gZW5jb2RlRlBS
KE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNF
bmNvZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRHUFIodmFsdWUpOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEZQUih2YWx1ZSk7CisgICAgfQorCisg
ICAgc3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BS
UmVnPigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6Zmly
c3RSZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQUihpbnQgdmFsdWUpCisgICAgeworICAgICAg
ICBBU1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxGUFJSZWc+KAorICAgICAgICAgICAgKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RG
UFJlZ2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpmaXJz
dEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29kZUdQVG1w
KGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFRtcCh2YWx1ZSkp
OworICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0
UmVnaXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlRlBU
bXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQVG1wKHZhbHVl
KSk7CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdp
c3RlcigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQorCisgICAgLy8gMDogZW1wdHkgVG1wCisgICAg
Ly8gcG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1AgdGVtcHMuCisgICAgLy8gbmVnYXRpdmU6IEZQ
UnMgYW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50IG1fdmFsdWU7Cit9OworCitzdHJ1Y3QgVG1w
SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVG1wJiBrZXkpIHsgcmV0dXJu
IGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUbXAmIGEsIGNvbnN0
IFRtcCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpC
Mzo6QWlyOjpUbXA+IHsKKyAgICB0eXBlZGVmIEpTQzo6QjM6OkFpcjo6VG1wSGFzaCBIYXNoOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1wPiA6IFNpbXBsZUNsYXNzSGFzaFRy
YWl0czxKU0M6OkIzOjpBaXI6OlRtcD4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBJbmxpbmVzX2gKKyNkZWZpbmUgQWlyVG1wSW5s
aW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5j
bHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworaW5saW5lIFRtcDo6VG1wKGNvbnN0IEFyZyYgYXJnKQoreworICAgICp0aGlz
ID0gYXJnLnRtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVG1wSW5saW5lc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
clZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5o
IgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRhdGVy
IHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoQ29kZSYgY29kZSwgY29uc3QgY2hhciogd2hlbiwg
Y29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAg
LCBtX3doZW4od2hlbikKKyAgICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7
CisgICAgfQorCisjZGVmaW5lIFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg
ICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBcCisgICAgICAgIGZhaWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNU
SU9OLCAjY29uZGl0aW9uLCB0b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxz
ZSkKKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBIYXNoU2V0PFN0YWNrU2xv
dCo+IHZhbGlkU2xvdHM7CisgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHZhbGlkQmxvY2tz
OworICAgICAgICBIYXNoU2V0PFNwZWNpYWwqPiB2YWxpZFNwZWNpYWxzOworCisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAgICB2YWxpZEJsb2Nrcy5h
ZGQoYmxvY2spOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fY29kZS5zdGFja1Ns
b3RzKCkpCisgICAgICAgICAgICB2YWxpZFNsb3RzLmFkZChzbG90KTsKKyAgICAgICAgZm9yIChT
cGVjaWFsKiBzcGVjaWFsIDogbV9jb2RlLnNwZWNpYWxzKCkpCisgICAgICAgICAgICB2YWxpZFNw
ZWNpYWxzLmFkZChzcGVjaWFsKTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
bV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJ
bmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5z
dCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoQXJn
JiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2lu
ZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU2xvdHMuY29udGFpbnMoYXJnLnN0YWNrU2xvdCgp
KSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTcGVjaWFsOgorICAgICAg
ICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRTcGVjaWFscy5jb250YWlucyhhcmcuc3Bl
Y2lhbCgpKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBWQUxJREFURShpbnN0LmlzVmFsaWRGb3JtKCksICgiQXQg
IiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdEluZGV4
ID09IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURShpc1Rl
cm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoIWlzVGVybWlu
YWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5z
dWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5j
b250YWlucyhzdWNjZXNzb3IpLCAoIkluICIsICpibG9jaykpOworICAgICAgICB9CisgICAgfQor
Citwcml2YXRlOgorICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBmYWlsKAorICAgICAg
ICBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGZ1bmN0
aW9uLCBjb25zdCBjaGFyKiBjb25kaXRpb24sCisgICAgICAgIENTdHJpbmcgbWVzc2FnZSkKKyAg
ICB7CisgICAgICAgIENTdHJpbmcgZmFpbHVyZU1lc3NhZ2U7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgICAgIG91dC5wcmludCgiQUlSIFZB
TElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25k
aXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgaWYgKG1f
d2hlbikKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBEdXJpbmcgIiwgbV93aGVuLCAi
XG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmluZygpOworICAg
ICAgICB9CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmICht
X2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkJlZm9yZSAiLCBtX3doZW4sICI6
XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAg
ICAgICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyht
X2NvZGUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBXVEZS
ZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5jdGlvbiwgY29u
ZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgQ29kZSYgbV9jb2Rl
OworICAgIGNvbnN0IGNoYXIqIG1fd2hlbjsKKyAgICBjb25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7
Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxpZGF0ZShDb2RlJiBj
b2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQoreworICAgIFZh
bGlkYXRlciB2YWxpZGF0ZXIoY29kZSwgd2hlbiwgZHVtcEJlZm9yZSk7CisgICAgdmFsaWRhdGVy
LnJ1bigpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJWYWxpZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJWYWxpZGF0
ZV9oCisjZGVmaW5lIEFpclZhbGlkYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsK
Kwordm9pZCB2YWxpZGF0ZShDb2RlJiwgY29uc3QgY2hhciogd2hlbiA9IG51bGxwdHIsIGNvbnN0
IGNoYXIqIGR1bXBCZWZvcmUgPSBudWxscHRyKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclZhbGlk
YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJh
dG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2Rl
X2dlbmVyYXRvci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0MiBAQAor
IyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1l
dDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisj
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorCityZXF1aXJlICJwYXRobmFtZSIKKworY2xhc3MgT3Bjb2RlCisgICAgYXR0cl9yZWFkZXIg
Om5hbWUsIDpzcGVjaWFsLCA6b3ZlcmxvYWRzCisgICAgYXR0cl9hY2Nlc3NvciA6a2luZAorCisg
ICAgZGVmIGluaXRpYWxpemUobmFtZSwgc3BlY2lhbCkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisg
ICAgICAgIEBzcGVjaWFsID0gc3BlY2lhbAorICAgICAgICBAa2luZCA9IDppbnN0CisgICAgICAg
IHVubGVzcyBzcGVjaWFsCisgICAgICAgICAgICBAb3ZlcmxvYWRzID0gW10KKyAgICAgICAgZW5k
CisgICAgZW5kCisKKyAgICBkZWYgbWFzbU5hbWUKKyAgICAgICAgbmFtZVswXS5kb3duY2FzZSAr
IG5hbWVbMS4uLTFdCisgICAgZW5kCitlbmQKKworY2xhc3MgQXJnCisgICAgYXR0cl9yZWFkZXIg
OnJvbGUsIDp0eXBlCisKKyAgICBkZWYgaW5pdGlhbGl6ZShyb2xlLCB0eXBlKQorICAgICAgICBA
cm9sZSA9IHJvbGUKKyAgICAgICAgQHR5cGUgPSB0eXBlCisgICAgZW5kCitlbmQKKworY2xhc3Mg
T3ZlcmxvYWQKKyAgICBhdHRyX3JlYWRlciA6c2lnbmF0dXJlLCA6Zm9ybXMKKworICAgIGRlZiBp
bml0aWFsaXplKHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAgIEBzaWduYXR1cmUgPSBzaWduYXR1
cmUKKyAgICAgICAgQGZvcm1zID0gZm9ybXMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBLaW5kCisg
ICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX2FjY2Vzc29yIDpzcGVjaWFsCisKKyAgICBk
ZWYgaW5pdGlhbGl6ZShuYW1lKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNp
YWwgPSBmYWxzZQorICAgIGVuZAorCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhl
ci5pc19hPyBTdHJpbmcKKyAgICAgICAgICAgIEBuYW1lID09IG90aGVyCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIEBuYW1lID09IG90aGVyLm5hbWUgYW5kIEBzcGVjaWFsID09IG90aGVyLnNw
ZWNpYWwKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgS2luZC5hcmdLaW5kcyhraW5k
KQorICAgICAgICBpZiBraW5kID09ICJBZGRyIgorICAgICAgICAgICAgWyJBZGRyIiwgIlN0YWNr
IiwgIkNhbGxBcmciXQorICAgICAgICBlbHNlCisgICAgICAgICAgICBba2luZF0KKyAgICAgICAg
ZW5kCisgICAgZW5kCisKKyAgICBkZWYgYXJnS2luZHMKKyAgICAgICAgS2luZC5hcmdLaW5kcyhr
aW5kKQorICAgIGVuZAorZW5kCisKK2NsYXNzIEZvcm0KKyAgICBhdHRyX3JlYWRlciA6a2luZHMs
IDphbHROYW1lCisKKyAgICBkZWYgaW5pdGlhbGl6ZShraW5kcywgYWx0TmFtZSkKKyAgICAgICAg
QGtpbmRzID0ga2luZHMKKyAgICAgICAgQGFsdE5hbWUgPSBhbHROYW1lCisgICAgZW5kCitlbmQK
KworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgor
ICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBA
ZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVt
YmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmln
aW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAg
ICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5k
CisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgor
ICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBk
ZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAg
ICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29t
bWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2Nv
bW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmls
ZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0
ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAg
ICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMg
Y29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xp
bmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xB
KFthLXpBLVowLTlfXSspLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4u
bmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0r
KS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWyw6
KlwvXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFt
ZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4
ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5l
eHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAg
ICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVm
IGlzVUQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKSlcWi8KK2VuZAorCitk
ZWYgaXNHRih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKEcpfChGKSlcWi8KK2VuZAorCitkZWYg
aXNLaW5kKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoSW1tNjQpfChBZGRy
KXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCkpXFovCitlbmQKKworZGVmIGlzS2V5d29yZCh0
b2tlbikKKyAgICBpc1VEKHRva2VuKSBvciBpc0dGKHRva2VuKSBvciBpc0tpbmQodG9rZW4pIG9y
CisgICAgICAgIHRva2VuID09ICJzcGVjaWFsIiBvciB0b2tlbiA9PSAiYXMiCitlbmQKKworZGVm
IGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoW2EtekEtWjAtOV9dKylcWi8g
YW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGlu
aXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmls
ZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAg
ICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlk
eCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAg
aWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFp
c2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBd
fSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25z
dW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5s
ZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYg
Y29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAg
IHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJl
c3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRl
ZiBjb25zdW1lUm9sZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFy
c2VFcnJvcigiRXhwZWN0ZWQgcm9sZSAoVSwgRCwgb3IgVUQpIikgdW5sZXNzIGlzVUQocmVzdWx0
KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNv
bnN1bWVUeXBlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVy
cm9yKCJFeHBlY3RlZCB0eXBlIChHIG9yIEYpIikgdW5sZXNzIGlzR0YocmVzdWx0KQorICAgICAg
ICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVLaW5k
CisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBl
Y3RlZCBraW5kIChJbW0sIEltbTY0LCBUbXAsIEFkZHIsIEluZGV4LCBSZWxDb25kLCBvciBSZXND
b25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJl
c3VsdAorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIHJlc3VsdCA9IHt9CisgICAg
ICAgIAorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vu
cy5sZW5ndGgKKworICAgICAgICAgICAgaWYgdG9rZW4gPT0gInNwZWNpYWwiCisgICAgICAgICAg
ICAgICAgY29uc3VtZSgic3BlY2lhbCIpCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNv
bnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3Zl
cmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorCisgICAgICAg
ICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCB0cnVl
KQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1l
SWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0W29wY29kZU5hbWVdCisgICAg
ICAgICAgICAgICAgICAgIG9wY29kZSA9IHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAgICAg
ICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlm
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICBvcGNvZGUgPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIGZhbHNlKQorICAgICAgICAgICAgICAg
ICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUKKyAgICAgICAgICAgICAgICBlbmQKKwor
ICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAgICAgICAgICAgICAgZm9ybXMgPSBb
XQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIGlzVUQodG9rZW4pCisgICAg
ICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9IGNv
bnN1bWVSb2xlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCI6IikKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHR5cGUgPSBjb25zdW1lVHlwZQorICAgICAgICAgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgPDwgQXJnLm5ldyhyb2xlLCB0
eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1l
KCIsIikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAorCisgICAg
ICAgICAgICAgICAgaWYgdG9rZW4gPT0gIi8iCisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUo
Ii8iKQorICAgICAgICAgICAgICAgICAgICBjYXNlIHRva2VuLnN0cmluZworICAgICAgICAgICAg
ICAgICAgICB3aGVuICJicmFuY2giCisgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUua2lu
ZCA9IDpicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgd2hlbiAidGVybWluYWwiCisgICAgICAg
ICAgICAgICAgICAgICAgICBvcGNvZGUua2luZCA9IDp0ZXJtaW5hbAorICAgICAgICAgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJCYWQgLyBkaXJl
Y3RpdmUiKQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgYWR2
YW5jZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgaXNLaW5kKHRv
a2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGtpbmRzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBuaWwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtp
bmRzIDw8IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgdG9rZW4gPT0gIioiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNl
RXJyb3IoIkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5sZXNzIGtpbmRzWy0xXS5uYW1lID09
ICJUbXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzWy0xXS5zcGVjaWFs
ID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIqIikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgdG9rZW4gPT0gImFzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN1bWUoImFzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0gY29u
c3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3cm9uZyBudW1iZXIgb2YgYXJndW1l
bnRzIGZvciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5ndGggPT0gc2lnbmF0dXJlLmxlbmd0
aAorICAgICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Iga2luZC5uYW1lID09ICJJbW02NCIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS5yb2xl
ICE9ICJVIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigi
Rm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQiKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgc2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5v
bi1nZW5lcmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KGtp
bmRzLCBhbHROYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIGlzS2lu
ZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAorCisg
ICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAg
ICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMAorICAgICAgICAgICAgICAgICAgICBm
b3JtcyA8PCBGb3JtLm5ldyhbXSwgbmlsKQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9hZC5uZXcoc2lnbmF0dXJlLCBmb3Jt
cykKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0CisgICAgZW5k
CitlbmQKKworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpy
ZWFkKCRmaWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVzID0gcGFyc2VyLnBhcnNlCisKK2Rl
ZiB3cml0ZUgoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5oIiwgInci
KSB7CisgICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIi8vIEdl
bmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5hbWV9IC0tIGRvIG5v
dCBlZGl0ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2lmbmRlZiBBaXIje2ZpbGVu
YW1lfV9oIgorICAgICAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQWlyI3tmaWxlbmFtZX1faCIKKwor
ICAgICAgICB5aWVsZCBvdXRwCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAv
LyBBaXIje2ZpbGVuYW1lfV9oIgorICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZSIpIHsKKyAg
ICB8IG91dHAgfAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImVudW0gT3Bjb2RlIDogaW50MTZfdCB7
IgorICAgICRvcGNvZGVzLmtleXMuc29ydC5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAg
ICAgICBvdXRwLnB1dHMgIiAgICAje29wY29kZX0sIgorICAgIH0KKyAgICBvdXRwLnB1dHMgIn07
IgorCisgICAgb3V0cC5wdXRzICJzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtT3Bjb2RlcyA9ICN7
JG9wY29kZXMua2V5cy5zaXplfTsiCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyIgorICAgIAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIFdURiB7IgorICAg
IG91dHAucHV0cyAiY2xhc3MgUHJpbnRTdHJlYW07IgorICAgIG91dHAucHV0cyAidm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpPcGNvZGUpOyIKKyAgICBvdXRw
LnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKworIyBGcm9tIGhlcmUgb24sIHdlIGRvbid0
IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIHNpbmNlIHdlJ3JlIHVzaW5nIGEg
cmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKworZGVmIG1hdGNoRm9ybXMob3V0cCwgc3Bl
ZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQor
ICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAorCisgICAgaWYgZmlsdGVyW2Zvcm1zXQor
ICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBd
LmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAg
ICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAgICAgIHJldHVybgorICAgIGVuZAorICAgIAor
ICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFjaCB7CisgICAgICAgIHwgZm9ybSB8CisgICAg
ICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbkluZGV4XS5uYW1lCisgICAgICAgIGlmIGdyb3Vw
c1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdIDw8IGZvcm0KKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zvcm1dCisgICAgICAgIGVuZAorICAgIH0KKwor
ICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91cHMubGVuZ3RoID09IDEKKyAgICAgICAgbWF0
Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVy
LCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIG91dHAu
cHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltjb2x1bW5JbmRleF19KSB7IgorICAgIGdyb3Vw
cy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwgdmFsdWUgfAorICAgICAgICBvdXRwLnB1dHMg
IiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICAgICAgS2luZC5hcmdL
aW5kcyhrZXkpLmVhY2ggeworICAgICAgICAgICAgfCBhcmdLaW5kIHwKKyAgICAgICAgICAgIG91
dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06IgorICAgICAgICB9CisgICAgICAgIG1hdGNo
Rm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwg
ZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91
dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAg
IH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
IG91dHAucHV0cyAifSIKK2VuZAorCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQs
IGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPm9wY29kZSkgeyIKKyAgICAk
b3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5w
dXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAg
ICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5l
ZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpIG9yIHNwZWVk
ID09IDpzYWZlKQorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPmFyZ3Mu
c2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIG9wY29kZS5vdmVy
bG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVk
T3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRw
LnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAi
fSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCBzcGVlZCwgaW5z
dCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkgeworICAgICAgICB8
IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAg
ICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2x1
bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAg
ICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAg
IGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAg
ICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0
dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBlbmQKKyAgICB9CitlbmQKKword3JpdGVI
KCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUg
XCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlyU3BlY2lhbC5oXCIi
CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7IgorICAgIAorICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wgb3BnZW5IaWRkZW5UcnV0
aCgpIHsgcmV0dXJuIHRydWU7IH0iCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiIKKyAgICBvdXRwLnB1dHMgImlubGluZSBUKiBvcGdlbkhpZGRlblB0cklkZW50aXR5KFQqIHBv
aW50ZXIpIHsgcmV0dXJuIHBvaW50ZXI7IH0iCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIE9QR0VO
X1JFVFVSTih2YWx1ZSkgZG8ge1xcIgorICAgIG91dHAucHV0cyAiICAgIGlmIChvcGdlbkhpZGRl
blRydXRoKCkpXFwiCisgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVybiB2YWx1ZTtcXCIKKyAg
ICBvdXRwLnB1dHMgIn0gd2hpbGUgKGZhbHNlKSIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIEluc3Q6OmZvckVhY2hBcmco
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5z
dE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJs
b2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAi
ZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7IC8vIFRoaXMgaXMgYmFzaWNhbGx5
IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBtb2RlbCBTcGVjaWFsIGFzIGFuIGltbWVk
aWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFyZ3NbMF0uc3BlY2lhbCgpLT5mb3JFYWNo
QXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxiYWNrPihmdW5jdG9yKSk7IgorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFjaF93aXRoX2luZGV4
IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUg
PSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCisgICAgICAgICAgICAgICAgd2hl
biAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCisgICAgICAgICAgICAgICAg
d2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCisgICAgICAgICAgICAg
ICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVmIgorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0
b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2FyZy50eXBlfVApOyIKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAg
IG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPiIKKyAgICBvdXRwLnB1
dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9ybShPcGNvZGUgb3Bjb2RlLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJBcmc6
OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyldID0geyBhcmd1bWVudHMuLi4gfTsiCisg
ICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFj
aCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2Rl
Lm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKHNpemVvZi4uLihBcmd1bWVudHMp
KSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG9wY29kZS5v
dmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IgorICAg
ICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeyB8IGNvbHVtbkluZGV4IHwgIm9wZ2Vu
SGlkZGVuUHRySWRlbnRpdHkoa2luZHMpWyN7Y29sdW1uSW5kZXh9XSIgfQorICAgICAgICAgICAg
ICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBw
cm9jIHsKKyAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAg
c3BlY2lhbCA9IChub3QgZm9ybS5raW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLnNwZWNpYWwg
fSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oI3tzcGVjaWFs
fSk7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAs
IDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNr
KQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAg
ICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyAiCisg
ICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBpc1Rlcm1pbmFs
KE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRj
aCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNv
ZGUgfAorICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6dGVybWluYWwgb3Igb3Bjb2RlLmtpbmQg
PT0gOmJyYW5jaAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIK
KyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAgIG91
dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91
dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCit3cml0ZUgoIk9wY29kZUdlbmVyYXRl
ZCIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0SW5s
aW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcInd0Zi9QcmludFN0cmVhbS5oXCIi
CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJ1c2luZyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisg
ICAgb3V0cC5wdXRzICIgICAgc3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMua2V5cy5l
YWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICBjYXNlICN7
b3Bjb2RlfToiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICBvdXQucHJpbnQoXCIje29wY29k
ZX1cIik7IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuOyIKKyAgICB9CisgICAg
b3V0cC5wdXRzICIgICAgfSIKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVz
cGFjZSBXVEYiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiYm9vbCBJbnN0Ojppc1ZhbGlkRm9ybSgp
IgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOnNh
ZmUsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAg
ICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYXJncy5zaXpl
KCkgPCAxKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWzBdLmlzU3BlY2lhbCgpKSIKKyAgICAgICAgICAgIG91
dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVU
VVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKCp0aGlzKSk7IgorICAgICAgICBlbHNlCisg
ICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uID0gZmFsc2UKKyAgICAgICAgICAgIG92ZXJs
b2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMgeworICAgICAgICAgICAgICAgIHwgaW5kZXggfAor
ICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnJvbGUKKyAg
ICAgICAgICAgICAgICB0eXBlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS50eXBlCisgICAg
ICAgICAgICAgICAga2luZCA9IGZvcm0ua2luZHNbaW5kZXhdCisgICAgICAgICAgICAgICAgbmVl
ZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNwZWNpYWwKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBmb3JtIG1hdGNoZXMuIFdlIGRv
bid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJvbGUsIHNpbmNlCisgICAgICAgICAgICAgICAgIyBr
aW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gdmFsaWRhdGUgaXMg
dGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAgICAjIHRvIHZhbGlkYXRl
IHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAuCisgICAgICAgICAgICAgICAgaWYga2luZC5uYW1l
ID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWyN7aW5k
ZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
Ik9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgbmVlZHNNb3JlVmFsaWRhdGlvbgorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKCFpcyN7b3Bjb2RlLm5hbWV9VmFsaWQoKnRoaXMpKSIKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgIGVuZAor
ICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9Igor
CisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4
KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIK
KyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAg
b3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKworICAgICAgICBpZiBvcGNvZGUuc3Bl
Y2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ0luZGV4KSIKKyAgICAgICAgICAg
IG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5hZG1pdHNTdGFjaygqdGhpcywgYXJnSW5kZXgpKTsi
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgU3dpdGNoIG9uIHRoZSBhcmdJbmRleC4KKyAg
ICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdJbmRleCkgeyIKKworICAgICAgICAgICAg
bnVtQXJncyA9IG9wY29kZS5vdmVybG9hZHMubWFwIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJs
b2FkIHwKKyAgICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoCisgICAgICAg
ICAgICB9Lm1heAorICAgICAgICAgICAgCisgICAgICAgICAgICBudW1BcmdzLnRpbWVzIHsKKyAg
ICAgICAgICAgICAgICB8IGFyZ0luZGV4IHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNh
c2UgI3thcmdJbmRleH06IgorCisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBhbGwgb2YgdGhl
IGZvcm1zIG9mIGFsbCBvZiB0aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywgb3IgZG9uJ3QsIGFkbWl0
IGFuIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAjIGF0IHRoaXMgaW5kZXguIFdlIGV4cGVjdCB0
aGlzIHRvIGJlIGEgdmVyeSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgICAgICBudW1ZZXMgPSAw
CisgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJs
b2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAg
ICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAg
fCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhd
ID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
Tm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBk
ZWxpYmVyYXRlbHkgdGVzdCBudW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3ZSBlbmQgdXAgd2l0aCBu
byBmb3Jtcywgd2Ugd2FudAorICAgICAgICAgICAgICAgICMgdG8gc2F5IHRoYXQgQWRkcmVzcyBp
cyBpbmFkbWlzc2libGUuCisgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAg
ICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICMgTm93IGRvIHRoZSBmdWxsIHRlc3QuCisKKyAgICAgICAgICAgICAgICAgICAgbmVlZE92
ZXJsb2FkU3dpdGNoID0gKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKQorCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKworICAgICAgICAgICAgICAgICAg
ICAgICAgIyBBZ2FpbiwgY2hlY2sgaWYgYWxsIG9mIHRoZW0gZG8gd2hhdCB3ZSB3YW50LgorICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgICAgICAgICAg
bnVtTm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAg
ICAgICAgICAgIyBEb24ndCBlbWl0IGFueXRoaW5nLCBqdXN0IGRyb3AgdG8gZGVmYXVsdC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNl
ICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBob3cgd2UgdGVzdCB0aGUgaHlw
b3RoZXNpcyB0aGF0IGNoYW5naW5nIHRoaXMgYXJndW1lbnQgdG8gYW4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIGFkZHJlc3MgeWllbGRzIGEgdmFsaWQgZm9ybS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGNvbHVtbkluZGV4ID09IGFyZ0luZGV4CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiQXJnOjpBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnc1sje2NvbHVt
bkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsdGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybXMg
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRHJvcCBkb3duLCBlbWl0IG5vIGNvZGUsIHNp
bmNlIHdlIGNhbm5vdCBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBLZWVwIGdvaW5nLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2Fm
ZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3Zl
cmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJ9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIK
KyAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
IH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IjsKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAu
cHV0cyAifSIKKworICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIEluc3Q6OmdlbmVy
YXRlKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkiCisgICAg
b3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKGppdCk7IgorICAgIG91
dHAucHV0cyAiVU5VU0VEX1BBUkFNKGNvbnRleHQpOyIKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVs
cGVyczo6SnVtcCByZXN1bHQ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6ZmFz
dCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAg
IGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihh
cmdzWzBdLnNwZWNpYWwoKS0+Z2VuZXJhdGUoKnRoaXMsIGppdCwgY29udGV4dCkpOyIKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaWYgZm9ybS5hbHROYW1lCisgICAgICAgICAgICAgICAgbWV0
aG9kTmFtZSA9IGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1ldGhvZE5hbWUgPSBvcGNvZGUubWFzbU5hbWUKKyAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgaWYgb3Bjb2RlLmtpbmQgPT0gOmJyYW5jaAorICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
InJlc3VsdCA9ICIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wcmludCAiaml0
LiN7bWV0aG9kTmFtZX0oIgorCisgICAgICAgICAgICBmb3JtLmtpbmRzLmVhY2hfd2l0aF9pbmRl
eCB7CisgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgaWYg
aW5kZXggIT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICIsICIKKyAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBjYXNlIGtpbmQubmFtZQorICAgICAgICAgICAg
ICAgIHdoZW4gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgaWYgb3ZlcmxvYWQuc2lnbmF0dXJl
W2luZGV4XS50eXBlID09ICJHIgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uZ3ByKCkiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmZwcigpIgorICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB3aGVuICJJbW0iCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTMyKCkiCisg
ICAgICAgICAgICAgICAgd2hlbiAiSW1tNjQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJp
bnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTY0KCkiCisgICAgICAgICAgICAgICAgd2hl
biAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
YXNBZGRyZXNzKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQmFzZUluZGV4KCkiCisgICAgICAg
ICAgICAgICAgd2hlbiAiUmVsQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCisgICAgICAgICAgICAgICAg
d2hlbiAiUmVzQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNSZXN1bHRDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgb3V0cC5wdXRzICIpOyIKKyAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKHJlc3VsdCk7IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5w
dXRzICJSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgInJldHVy
biByZXN1bHQ7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAifSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyAr
MTcwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmVGb3JK
ZXR0aXNvbigpOyAgICAKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAg
ICAKICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWcuaAkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAKICAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZhbGlkKCk7IH0KLSAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IGRlbGV0ZWQoKTsgfQpAQCAt
MTcwLDYgKzE2OSw0NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAKKyAgICBjbGFzcyBBbGxSZWdzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKwor
ICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0
ZXJhdG9yKCkgeyB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKFJlZyByZWcpCisg
ICAgICAgICAgICAgICAgOiBtX3JlZ0luZGV4KHJlZy5pbmRleCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWcgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gUmVnOjpmcm9tSW5kZXgobV9yZWdJbmRleCk7IH0KKworICAgICAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fcmVnSW5kZXgg
PSBSZWc6OmZyb21JbmRleChtX3JlZ0luZGV4KS5uZXh0KCkuaW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fcmVnSW5kZXggPT0gb3RoZXIubV9yZWdJbmRleDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG1fcmVnSW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWc6OmZpcnN0KCkpOyB9CisgICAgICAg
IGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZygpKTsgfQorICAgIH07
CisKKyAgICBzdGF0aWMgQWxsUmVnc0l0ZXJhYmxlIGFsbCgpIHsgcmV0dXJuIEFsbFJlZ3NJdGVy
YWJsZSgpOyB9CisKIHByaXZhdGU6CiAgICAgc3RhdGljIHVpbnQ4X3QgaW52YWxpZCgpIHsgcmV0
dXJuIDB4ZmY7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0
T2Zmc2V0TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpSZWdpc3RlckF0T2Zmc2V0TGkK
ICAgICBpZiAob2Zmc2V0QmFzZVR5cGUgPT0gRnJhbWVQb2ludGVyQmFzZWQpCiAgICAgICAgIG9m
ZnNldCA9IC0oc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihudW1iZXJPZlJlZ2lzdGVycykgKiBzaXpl
b2Yodm9pZCopKTsKIAotICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJl
Zzo6bGFzdCgpO3JlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZp
cnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewogICAgICAgICBp
ZiAocmVnaXN0ZXJTZXQuZ2V0KHJlZykpIHsKICAgICAgICAgICAgIGFwcGVuZChSZWdpc3RlckF0
T2Zmc2V0KHJlZywgb2Zmc2V0KSk7CiAgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZz
ZXRMaXN0LmgJKHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJBdE9mZnNldExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsNiArNjYsOSBAQCBw
dWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldCogZmluZChSZWcpIGNvbnN0OwogICAgIHVuc2ln
bmVkIGluZGV4T2YoUmVnKSBjb25zdDsgLy8gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQu
CiAKKyAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnMuYmVnaW4oKTsgfQorICAgIFZlY3RvcjxSZWdpc3Rl
ckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3Rl
cnMuZW5kKCk7IH0KKwogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD4gbV9y
ZWdpc3RlcnM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQu
aAkocmV2aXNpb24gMTkxNTM5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDEzIEBAIHB1YmxpYzoKICAgICAK
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJl
dHVybiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsgfQogICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdCB7IHJldHVybiBtX3ZlY3Rvci5oYXNoKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0
CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IG1fdmVjdG9yLnNldEJpdHMoKSkK
KyAgICAgICAgICAgIGZ1bmN0b3IoUmVnOjpmcm9tSW5kZXgoaW5kZXgpKTsKKyAgICB9CiAgICAg
CiBwcml2YXRlOgogICAgIHZvaWQgc2V0QW55KFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KSW5kZXg6
IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxOTE1MzkpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE5IEBACisyMDE1LTEwLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIGEgc3VwZXIgcm91Z2ggcHJvdG90eXBlIG9mIEIzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAyODAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9NYXRoRXh0cmFzLmg6CisgICAg
ICAgIChXVEY6OnJhbmdlc092ZXJsYXApOiBOaWNlIHV0aWxpdHkgZm9yIGNoZWNraW5nIGlmIHJh
bmdlcyBvdmVybGFwLgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBBZGQgYSBFTkFCTEUoQjNf
SklUKSBmZWF0dXJlIGZsYWcuCisgICAgICAgICogd3RmL1Njb3BlZExhbWJkYS5oOiBBZGRlZC4g
VGhpcyBhbGxvd3MgdXMgdG8gZG8gemVyby1hbGxvY2F0aW9uLCB6ZXJvLWNvcHkgZXh0ZXJuIGxh
bWJkYXMuCisgICAgICAgIChXVEY6OnNjb3BlZExhbWJkYSk6CisgICAgICAgICogd3RmL1NoYXJl
ZFRhc2suaDoKKyAgICAgICAgKFdURjo6Y3JlYXRlU2hhcmVkVGFzayk6CisKIDIwMTUtMTAtMjEg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGYWN0b3Igb3V0IHRo
ZSBncmFwaCBub2RlIHdvcmtsaXN0cyBmcm9tIERGRyBpbnRvIFdURgpJbmRleDogU291cmNlL1dU
Ri9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTE1MzkpCisrKyBTb3Vy
Y2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01
MCw2ICs1MCw3IEBACiAJCTBGRTQ0NzlEMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNDQ3OUIxQjdB
QUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi87IH07CiAJCTBGRUIzRENGMUJCNUQ2ODQwMDlE
N0FBRCAvKiBTaGFyZWRUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovOyB9
OwogCQkwRkVCM0REMTFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNERDAx
QkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLzsgfTsKKwkJMEZF
Qzg0QjExQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8q
IFNjb3BlZExhbWJkYS5oICovOyB9OwogCQkwRkVDODRBRjFCRDgyNTMxMDA4MEZGNzQgLyogR3Jh
cGhOb2RlV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEFFMUJEODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oICov
OyB9OwogCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDREODAw
NjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLzsgfTsKIAkJMEZGODYwOTUxQkNDQkQ3NDAwNDUxMjdG
IC8qIFBvaW50ZXJDb21wYXJpc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlz
b24uaCAqLzsgfTsKQEAgLTM0NSw2ICszNDYsNyBAQAogCQkwRkU0NDc5QjFCN0FBQTAzMDA5NDk4
RUIgLyogV29yZExvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29yZExv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3
QUFEIC8qIFNoYXJlZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hh
cmVkVGFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0REMDFCQjczNjZC
MDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NvcGVkTGFtYmRhLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEFFMUJEODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5v
ZGVXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaE5vZGVX
b3JrbGlzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNTFCMjJENEQ4
MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBUaW55UHRyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjg2MDk0MUJD
Q0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBQb2ludGVyQ29tcGFyaXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtODcwLDYgKzg3Miw3IEBACiAJCQkJMTQ2OTQxOTQxNkVBQUZGODAwMjRFMTQ2IC8q
IFNjaGVkdWxlUGFpci5oICovLAogCQkJCTE0Njk0MTk4MTZFQUIwNDEwMDI0RTE0NiAvKiBTY2hl
ZHVsZVBhaXJDRi5jcHAgKi8sCiAJCQkJMTQ2OTQxOTUxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVk
dWxlUGFpck1hYy5tbSAqLywKKwkJCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVk
TGFtYmRhLmggKi8sCiAJCQkJQThBNDczMDYxNTFBODI1QjAwNDEyM0ZGIC8qIFNlZ21lbnRlZFZl
Y3Rvci5oICovLAogCQkJCUE4QTQ3MzA3MTUxQTgyNUIwMDQxMjNGRiAvKiBTZW50aW5lbExpbmtl
ZExpc3QuaCAqLywKIAkJCQlBOEE0NzMwODE1MUE4MjVCMDA0MTIzRkYgLyogU0hBMS5jcHAgKi8s
CkBAIC0xMjQ0LDYgKzEyNDcsNyBAQAogCQkJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRJZGVudGlmaWVyRGF0YVB0aHJlYWRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0
QjE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0
NzQ0RDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg0QjExQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0NTQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZD
b3VudGVkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NTE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkU3BlY2lmaWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2
Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3Rm
L01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJ
KHJldmlzaW9uIDE5MTUzOSkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDE5LDYgKzQxOSwxNiBAQCBpbmxpbmUgVCBsZWZ0U2hpZnRXaXRoU2F0dXJh
dGlvbihUIHZhbHVlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK2lubGluZSBib29sIHJhbmdlc092ZXJsYXAoVCBsZWZ0TWluLCBUIGxlZnRNYXgsIFQgcmln
aHRNaW4sIFQgcmlnaHRNYXgpCit7CisgICAgaWYgKGxlZnRNaW4gPD0gcmlnaHRNaW4gJiYgbGVm
dE1heCA+PSByaWdodE1pbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHJpZ2h0TWlu
IDw9IGxlZnRNaW4gJiYgcmlnaHRNYXggPj0gbGVmdE1pbikKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8v
ICNpZm5kZWYgV1RGX01hdGhFeHRyYXNfaApJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxOTE1
MzkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NzYs
MTIgKzc3NiwyMCBAQAogI2RlZmluZSBFTkFCTEVfQ09OQ1VSUkVOVF9KSVQgMQogI2VuZGlmCiAK
Ky8qIFRoZSBCMyBjb21waWxlciBpcyBhbiBleHBlcmltZW50YWwgYmFja2VuZCB0aGF0IGlzIHN0
aWxsIGluIGRldmVsb3BtZW50LiBXZSB3aWxsIGtlZXAgaXQgYnVpbGRpbmcKKyAgIG9uIERhcndp
bi94ODYtNjQgZm9yIG5vdywgdGhvdWdoIGl0IGlzIHVudXNlZCBleGNlcHQgZm9yIHRlc3RzLiAq
LworI2lmIE9TKERBUldJTikgJiYgQ1BVKFg4Nl82NCkKKyNkZWZpbmUgRU5BQkxFX0IzX0pJVCAx
CisjZW5kaWYKKwogLyogSWYgdGhlIGJhc2VsaW5lIGppdCBpcyBub3QgYXZhaWxhYmxlLCB0aGVu
IGRpc2FibGUgdXBwZXIgdGllcnMgYXMgd2VsbDogKi8KICNpZiAhRU5BQkxFKEpJVCkKLSN1bmRl
ZiBFTkFCTEVfREZHX0pJVCAgICAgIC8qIFVuZGVmIHNvIHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0
LiAqLwotI3VuZGVmIEVOQUJMRV9GVExfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4g
cmVkZWZpbmUgaXQuICovCisjdW5kZWYgRU5BQkxFX0RGR19KSVQKKyN1bmRlZiBFTkFCTEVfRlRM
X0pJVAorI3VuZGVmIEVOQUJMRV9CM19KSVQKICNkZWZpbmUgRU5BQkxFX0RGR19KSVQgMAogI2Rl
ZmluZSBFTkFCTEVfRlRMX0pJVCAwCisjZGVmaW5lIEVuYWJsZV9CM19KSVQgMAogI2VuZGlmCiAK
IC8qIENvdW50cyB1c2VzIG9mIHdyaXRlIGJhcnJpZXJzIHVzaW5nIHNhbXBsaW5nIGNvdW50ZXJz
LiBCZSBzdXJlIHRvIGFsc28KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIFNjb3BlZExhbWJkYV9oCisjZGVmaW5lIFNjb3BlZExhbWJkYV9oCisKK25hbWVzcGFj
ZSBXVEYgeworCisvLyBZb3UgY2FuIHVzZSBTY29wZWRMYW1iZGEgdG8gZWZmaWNpZW50bHkgcGFz
cyBsYW1iZGFzIHdpdGhvdXQgYWxsb2NhdGluZyBtZW1vcnkgb3IgcmVxdWlyaW5nCisvLyB0ZW1w
bGF0ZSBzcGVjaWFsaXphdGlvbiBvZiB0aGUgY2FsbGVlLiBUaGUgY2FsbGVlIHNob3VsZCBiZSBk
ZWNsYXJlZCBhczoKKy8vCisvLyB2b2lkIGZvbyhjb25zdCBTY29wZWRMYW1iZGE8TXlUaGluZ3Mq
IChpbnQsIFN0dWZmJik+Jik7CisvLworLy8gVGhlIGNhbGxlciBqdXN0IGRvZXM6CisvLworLy8g
dm9pZCBmb28oc2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPihbJl0gKGludCB4
LCBTdHVmZiYgeSkgLT4gTXlUaGluZ3MqIHsgYmxhaCB9KSk7CisvLworLy8gTm90ZSB0aGF0IHRo
aXMgcmVsaWVzIG9uIGZvbygpIG5vdCBlc2NhcGluZyB0aGUgbGFtYmRhLiBUaGUgbGFtYmRhIGlz
IG9ubHkgdmFsaWQgd2hpbGUgZm9vKCkgaXMKKy8vIG9uIHRoZSBzdGFjayAtIGhlbmNlIHRoZSBu
YW1lIFNjb3BlZExhbWJkYS4KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFz
cyBTY29wZWRMYW1iZGE7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4u
LiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50
VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAgU2NvcGVkTGFtYmRhKFJlc3VsdFR5cGUgKCppbXBs
KSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLikgPSBudWxscHRyLCB2b2lkKiBhcmcgPSBu
dWxscHRyKQorICAgICAgICA6IG1faW1wbChpbXBsKQorICAgICAgICAsIG1fYXJnKGFyZykKKyAg
ICB7CisgICAgfQorICAgIAorICAgIFJlc3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVz
JiYuLi4gYXJndW1lbnRzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbChtX2Fy
Zywgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBSZXN1bHRUeXBlICgqbV9pbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlw
ZXMmJi4uLik7CisgICAgdm9pZCAqbV9hcmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGNsYXNzIFNjb3BlZExhbWJkYUZ1bmN0b3I7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzLCB0
eXBlbmFtZSBGdW5jdG9yPgorY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjxSZXN1bHRUeXBlIChB
cmd1bWVudFR5cGVzLi4uKSwgRnVuY3Rvcj4gOiBwdWJsaWMgU2NvcGVkTGFtYmRhPFJlc3VsdFR5
cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
UGFzc2VkRnVuY3Rvcj4KKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKFBhc3NlZEZ1bmN0b3ImJiBm
dW5jdG9yKQorICAgICAgICA6IFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVz
Li4uKT4oaW1wbEZ1bmN0aW9uLCB0aGlzKQorICAgICAgICAsIG1fZnVuY3RvcihzdGQ6OmZvcndh
cmQ8UGFzc2VkRnVuY3Rvcj4oZnVuY3RvcikpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rpb24odm9pZCogYXJndW1lbnQsIEFyZ3VtZW50
VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5jdG9yKAorICAgICAgICAgICAg
c3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAg
IEZ1bmN0b3IgbV9mdW5jdG9yOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBl
LCB0eXBlbmFtZSBGdW5jdG9yPgorU2NvcGVkTGFtYmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1
bmN0b3I+IHNjb3BlZExhbWJkYShGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gU2Nv
cGVkTGFtYmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KHN0ZDo6Zm9yd2FyZDxGdW5j
dG9yPihmdW5jdG9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlNj
b3BlZExhbWJkYTsKK3VzaW5nIFdURjo6c2NvcGVkTGFtYmRhOworCisjZW5kaWYgLy8gU2NvcGVk
TGFtYmRhX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkxNTM5KQorKysgU291
cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwxMSBA
QCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFNoYXJlZFRhc2tGdW5jdG9yKEZ1bmN0b3Im
JiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAg
eworICAgIH0KKwogcHJpdmF0ZToKICAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzJiYu
Li4gYXJndW1lbnRzKSBvdmVycmlkZQogICAgIHsKQEAgLTExMCw2ICsxMTUsMTEgQEAgUmVmPFNo
YXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcgogewogICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3Rvcikp
OwogfQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgor
UmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFzayhGdW5jdG9yJiYg
ZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxG
dW5jdGlvblR5cGUsIEZ1bmN0b3I+KFdURjo6bW92ZShmdW5jdG9yKSkpOworfQogCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264047</attachid>
            <date>2015-10-26 09:54:23 -0700</date>
            <delta_ts>2015-10-26 10:55:22 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>613120</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MiBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFjY2VwdFJvb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRSb290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OmFjY2VwdEludGVybmFscyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjphY2NlcHRPcGVyYW5kcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OmFjY2VwdE9wZXJhbmRzTGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUxvYWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBZGQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFuZExvYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAgICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzTG93
ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICog
YjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpvZmZzZXQpOgorICAg
ICAgICAoSlNDOjpCMzo6TWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKToKKyAgICAgICAgKiBiMy9C
M09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzQ2hlY2tNYXRo
KToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZGF0
YSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAo
SlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6
UGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIz
L0IzUGF0Y2hwb2ludFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2lu
dFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpC
Mzo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL0IzUGhhc2VTY29wZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpQcm9jZWR1cmUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjp+UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2sp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3Jb
XSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjppdGVyYXRvcjo6ZmluZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24p
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlv
bjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRv
cltdKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKiBi
My9CM1Byb2NlZHVyZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3RLaW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90S2luZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjph
Y2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpieXRlU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6a2luZCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja1Nsb3RWYWx1ZTo6b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
U2xvdFZhbHVlOjpzZXRPZmZzZXRGcm9tRlApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OlN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6ZHVtcCk6CisgICAgICAgICogYjMvQjNT
dGFja21hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFja21hcCk6
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6c2V0T3BhcXVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN0YWNrbWFwOjpvcGFxdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpvcGFxdWVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y29uc3RyYWluKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwOjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpjbG9iYmVy
ZWQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldEdlbmVyYXRvcik6CisgICAgICAg
ICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21h
cFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNw
ZWNpYWw6OmlzVmFsaWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6
YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6YXBw
ZW5kUmVwc0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JB
cmcpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246OlN1Y2Nlc3NvckNvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNz
b3JDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxl
Y3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3Nv
ckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6
QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nl
c3NvckNvbGxlY3Rpb246OmVuZCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpkdW1wKToKKyAgICAgICAgKiBiMy9C
M1N3aXRjaENhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpTd2l0
Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6Y2FzZVZhbHVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OnRhcmdldCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCbG9jayk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSk6CisgICAgICAgIChKU0M6
OkIzOjpTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6YXBwZW5kQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKToKKyAgICAg
ICAgKiBiMy9CM1N3aXRjaFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Om51bUNhc2VW
YWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6Y2FzZVZhbHVlcyk6CisgICAgICAgIChKU0M6OkIz
OjpTd2l0Y2hWYWx1ZTo6ZmFsbFRocm91Z2gpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN3
aXRjaFZhbHVlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjplbmQpOgorICAgICAgICAqIGIz
L0IzVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM1R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppc0ludCk6CisgICAg
ICAgIChKU0M6OkIzOjppc0Zsb2F0KToKKyAgICAgICAgKEpTQzo6QjM6OnBvaW50ZXJUeXBlKToK
KyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2ls
b25WYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzVXBzaWxvblZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VXBzaWxvblZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6cGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6VXBzaWxvblZhbHVlKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VXNlQ291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpC
Mzo6VXNlQ291bnRzOjp+VXNlQ291bnRzKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6b3BlcmF0b3JbXSk6CisgICAgICAg
ICogYjMvQjNWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6dmFsaWRhdGUp
OgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6On5WYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eSk6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0RvdWJsZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6
OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp0eXBlRm9yKToKKyAgICAgICAg
KiBiMy9CM1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFjY2VwdHMp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Om9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Y2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnR5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFpclR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXAp
OgorICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6Omhhc0ludCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
Y29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
b2Zmc2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2Fpcjog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fp
ci9BaXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29u
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpm
cFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZv
ckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hh
c2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAg
ICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpk
ZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVu
ZEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNl
c3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBC
YXNpY0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVt
cDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBi
My9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0Nh
bGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFs
Ojppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNT
dGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWly
Q29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0lu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICog
YjMvYWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5l
d1RtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJh
bWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tT
bG90c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2lu
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVu
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJh
dG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNp
YWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OnNwZWNpYWxzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zZXJ0aW9uU2V0Ojpjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0
OjphcHBlbmRJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6
Omluc2VydEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2Vy
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6ZHVtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Okluc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpJbnN0OjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNo
VG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Rm9yRWFjaDxUbXA+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Rm9y
RWFjaDxBcmc+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFj
aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Omhhc1NwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6aXNTaGlmdFZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNMc2hpZnQzMlZhbGlk
KToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxp
dmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Omxp
dmVBdFRhaWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpM
b2NhbENhbGMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjps
aXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6dGFrZUxp
dmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpleGVjdXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNj
b3BlOjp+UGhhc2VTY29wZSk6CisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUuaDogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Z3Byc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmZwcnNJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpy
ZWdzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEdQUkluZm8+OjppblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz46OmluUHJpb3JpdHlPcmRlcik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6
OlNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjp+U3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6Om5hbWUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTcGVjaWFsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZGVl
cER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OkRlZXBTcGVjaWFsRHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkRlZXBTcGVjaWFsRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAg
ICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9h
aXIvQWlyU3RhY2tTbG90LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNr
U2xvdDo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6U3RhY2tTbG90KToKKyAgICAgICAgKiBi
My9haXIvQWlyU3RhY2tTbG90Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFj
a1Nsb3Q6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjppbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6YWxpZ25tZW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U3RhY2tTbG90Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6
b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xvdER1bXA6
OkRlZXBTdGFja1Nsb3REdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xv
dER1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEZvckluZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6VG1wOjppc0dQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlRtcDo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzUmVnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmZwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6cmVnKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpoYXNUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6Z3BUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnBUbXBJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6VG1wOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpl
bmNvZGVHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZW5jb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
VG1wOjppc0VuY29kZWRGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVk
R1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRGUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc0VuY29kZWRGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZGVjb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjpkZWNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcEhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6VG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dmFsaWRhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJWYWxp
ZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjogQWRk
ZWQuCisgICAgICAgICogYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGVB
bmRSdW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdDQyKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBqaXQvUmVnLmg6CisgICAgICAgIChKU0M6
OlJlZzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpSZWc6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6
UmVnOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6UmVnOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVy
YXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjplbmQpOgorICAg
ICAgICAoSlNDOjpSZWc6OmFsbCk6CisgICAgICAgIChKU0M6OlJlZzo6aW52YWxpZCk6CisgICAg
ICAgIChKU0M6OlJlZzo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJBdE9mZnNldExpc3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
UmVnaXN0ZXJBdE9mZnNldExpc3QpOgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6ZW5kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpm
b3JFYWNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisKIDIwMTUtMTAt
MjQgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVGVhY2ggY3JlYXRl
X2hhc2hfdGFibGUgdG8gb21pdCBidWlsdGlucyBtYWNyb3Mgd2hlbiBnZW5lcmF0aW5nIHRhYmxl
cyBmb3IgbmF0aXZlLW9ubHkgb2JqZWN0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
IFZQQVRIID0gXAogCiBQWVRIT04gPSBweXRob24KIFBFUkwgPSBwZXJsCitSVUJZID0gcnVieQog
CiBKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUiA9ICQoSmF2YVNjcmlwdENvcmUpL1NjcmlwdHMK
IApAQCAtNTksNiArNjAsMTMgQEAgYWxsIDogXAogICAgIExleGVyLmx1dC5oIFwKICAgICBLZXl3
b3JkTG9va3VwLmggXAogICAgIFJlZ0V4cEppdFRhYmxlcy5oIFwKKyAgICBCM0xvd2VyaW5nTWF0
Y2hlci5oIFwKKyAgICBCM0FkZHJlc3NNYXRjaGVyLmggXAorICAgIEIzQ29tcGFyaXNvbk1hdGNo
ZXIuaCBcCisgICAgQWlyT3Bjb2RlLmggXAorICAgIEFpck9wY29kZS5jcHAgXAorICAgIEFpck9w
Y29kZVV0aWxzLmggXAorICAgIEFpck9wY29kZVV0aWxzLmNwcCBcCiAjCiAKICMgSmF2YVNjcmlw
dCBidWlsdGlucy4KQEAgLTI2Miw2ICsyNzAsMjIgQEAgSU5QVVRfR0VORVJBVE9SX1NQRUNJRklD
QVRJT05TID0gXAogSlNSZXBsYXlJbnB1dHMuaCA6ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklD
QVRJT05TKSAkKElOUFVUX0dFTkVSQVRPUl9TQ1JJUFRTKQogCSQoUFlUSE9OKSAkKEphdmFTY3Jp
cHRDb3JlKS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5IC0tb3V0
cHV0RGlyIC4gLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgJChJTlBVVF9HRU5FUkFUT1JfU1BF
Q0lGSUNBVElPTlMpCiAKK0IzTG93ZXJpbmdNYXRjaGVyLmg6ICQoSmF2YVNjcmlwdENvcmUpL2Iz
L2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9CM0xvd2Vy
aW5nTWF0Y2hlci5wYXR0ZXJucworCSQoUlVCWSkgJF4gCitCM0FkZHJlc3NNYXRjaGVyLmg6ICQo
SmF2YVNjcmlwdENvcmUpL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3Jp
cHRDb3JlKS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXgorQjNDb21w
YXJpc29uTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21h
dGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJu
cworCSQoUlVCWSkgJF4KKworQWlyT3Bjb2RlLmg6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9v
cGNvZGVfZ2VuZXJhdG9yLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJPcGNvZGUub3Bj
b2RlcworCSQoUlVCWSkgJF4KK0Fpck9wY29kZS5jcHA6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fp
ci9vcGNvZGVfZ2VuZXJhdG9yLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2RlcworCSQoUlVCWSkgJF4KK0Fpck9wY29kZVV0aWxzLmg6ICQoSmF2YVNjcmlwdENvcmUp
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2RlcworCSQoUlVCWSkgJF4KK0Fpck9wY29kZVV0aWxzLmNwcDogJChKYXZhU2Ny
aXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorCiAjIER5bmFtaWNhbGx5LWRlZmlu
ZWQgdGFyZ2V0cyBhcmUgbGlzdGVkIGJlbG93LiBTdGF0aWMgdGFyZ2V0cyBiZWxvbmcgdXAgdG9w
LgogCiBhbGwgOiBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24g
MTkxNTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYgKzI1LDcgQEAKIAkJCWJ1
aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCQkwRkVDODVCMTFC
REI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1RDZCMkE0RjE1
MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1RDZCMkE1MTE1
MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKIAkJCQk1RDZCMkE1NTE1
MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywKQEAgLTY4NSw2ICs2ODYs
MTIxIEBACiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTJGMTcwRDQw
QkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZFQTBBMzQxNzBENDBCRjAw
QkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggKi87
IH07CiAJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0VDRTE2MjM3
RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovOyB9OworCQkwRkVDODRGRTFCREFD
REFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0FyZ3VtZW50UmVnVmFsdWUuY3BwICovOyB9OworCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQg
LyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1Zh
bHVlLmggKi87IH07CisJCTBGRUM4NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTAx
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNC
bG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi87
IH07CisJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi87IH07CisJCTBGRUM4NTA0MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Js
b2NrV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hl
Y2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi87IH07
CisJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTA3MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5j
cHAgKi87IH07CisJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MDkxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAg
Ki87IH07CisJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzAxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29tbW9uLmggKi87IH07CisJCTBGRUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5j
cHAgKi87IH07CisJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHku
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMy
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLzsgfTsKKwkJMEZFQzg1MEQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0MzJWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi87IH07
CisJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMDFCREFDREFD
MDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRW
YWx1ZS5oICovOyB9OworCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJs
ZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDODFCREFD
REFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi87IH07CisJCTBGRUM4NTEzMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDOTFCREFDREFDMDA4MEZGNzQgLyogQjND
b250cm9sVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxNDFCREFDREFDMDA4MEZGNzQgLyogQjND
b250cm9sVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oICovOyB9Owor
CQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQjFCREFDREFD
MDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi87IH07CisJCTBGRUM4NTE2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVx
dWVuY3lDbGFzcy5oICovOyB9OworCQkwRkVDODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVx
dWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovOyB9
OworCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovOyB9Owor
CQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMDFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi87IH07CisJCTBG
RUM4NTFCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyog
QjNJbmRleE1hcC5oICovOyB9OworCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLzsgfTsKKwkJMEZFQzg1MUQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNM
b3dlclRvQWlyLmNwcCAqLzsgfTsKKwkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93
ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovOyB9OworCQkwRkVD
ODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENTFCREFDREFDMDA4MEZGNzQg
LyogQjNNZW1vcnlWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oICovOyB9
OworCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3Bjb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLzsgfTsKKwkJMEZFQzg1
MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09y
aWdpbi5jcHAgKi87IH07CisJCTBGRUM4NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi87IH07CisJCTBGRUM4NTI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVj
aWFsLmggKi87IH07CisJCTBGRUM4NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovOyB9Owor
CQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERFMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovOyB9OworCQkwRkVDODUyOTFCREFDREFD
MDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2Nv
cGUuY3BwICovOyB9OworCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3Bl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
MDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTJCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9j
ZWR1cmUuY3BwICovOyB9OworCQkwRkVDODUyQzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovOyB9OworCQkwRkVDODUyRDFC
REFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyog
QjNQcm9jZWR1cmVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLzsgfTsK
KwkJMEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrbWFwLmggKi87IH07CisJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwu
Y3BwICovOyB9OworCQkwRkVDODUzMTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNp
YWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovOyB9OworCQkwRkVD
ODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovOyB9OworCQkwRkVDODUzMzFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5k
LmggKi87IH07CisJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi87IH07CisJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb24uaCAqLzsgfTsKKwkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5oICovOyB9OworCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi87
IH07CisJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMDFCREFDREFD
MDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovOyB9OworCQkwRkVDODUzQjFCREFDREFDMDA4
MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovOyB9Owor
CQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMjFCREFDREFDMDA4MEZGNzQgLyog
QjNUeXBlLmggKi87IH07CisJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25W
YWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovOyB9OworCQkw
RkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovOyB9OworCQkwRkVDODUzRjFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLzsg
fTsKKwkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNjFCREFDREFDMDA4
MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKKwkJMEZFQzg1NDExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwICovOyB9
OworCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovOyB9OworCQkwRkVD
ODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuaCAqLzsgfTsKKwkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
QjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1NDYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVSZXAuY3BwICovOyB9OworCQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJl
cC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLzsgfTsKKwkJMEZFQzg1NkQxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckFsbG9jYXRlU3RhY2suY3BwICovOyB9OworCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAq
LzsgfTsKKwkJMEZFQzg1NkYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QTFCREFDREM3MDA4
MEZGNzQgLyogQWlyQXJnLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzAxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFyZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovOyB9OworCQkwRkVDODU3MTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWly
QmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJC
YXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovOyB9OworCQkw
RkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRFMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODU3NDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVj
aWFsLmggKi87IH07CisJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUwMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi87IH07CisJ
CTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUyMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzgxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0
ZS5jcHAgKi87IH07CisJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi87IH07CisJCTBGRUM4NTdBMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckdlbmVyYXRpb25Db250ZXh0LmggKi87IH07CisJCTBGRUM4NTdCMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuY3BwICovOyB9OworCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFu
ZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5o
ICovOyB9OworCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU4
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwICovOyB9OworCQkwRkVDODU3
RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyog
QWlySW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBGRUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJJbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLzsgfTsKKwkJMEZFQzg1
ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
LmggKi87IH07CisJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUMx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTgyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVu
ZXNzLmggKi87IH07CisJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1
ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJS
ZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5
LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJp
b3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi87IH07CisJ
CTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggKi87IH07CisJCTBG
RUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjQxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi87IH07CisJCTBGRUM4NThBMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
cGlsbEV2ZXJ5dGhpbmcuaCAqLzsgfTsKKwkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLzsgfTsK
KwkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjcxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclN0YWNrU2xvdC5oICovOyB9OworCQkwRkVDODU4RDFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovOyB9OworCQkwRkVD
ODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1w
LmggKi87IH07CisJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QTFC
REFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovOyB9OworCQkwRkVDODU5MDFCREFD
REM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2
QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1OTMxQkRC
MUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2Vu
ZXJhdGVkLmNwcCAqLzsgfTsKKwkJMEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8qIEZvdW5kYXRp
b24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrICov
OyB9OworCQkwRkVDODVBNDFCREI1Q0YxMDA4MEZGNzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3
b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gOTMy
RjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayAqLzsgfTsK
KwkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQg
LyogdGVzdGIzLmNwcCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lz
dGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1IC8qIERGR0Nv
bnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMgLyogU2V0dXBWYXJh
cmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODM5LDYgKzE5NTUs
MTMgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0
OwogCQkJcmVtb3RlSW5mbyA9IGxsdm1Gb3JKU0M7CiAJCX07CisJCTBGRUM4NUIwMUJEQjVEOEYw
MDgwRkY3NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2EgPSBQQlhDb250
YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAy
QUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOworCQkJcmVtb3Rl
R2xvYmFsSURTdHJpbmcgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQ7CisJCQlyZW1vdGVJbmZv
ID0gdGVzdGIzOworCQl9OwogCQkwRkY5MjJEMjE0RjQ2QjJGMDA0MUEyNEUgLyogUEJYQ29udGFp
bmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVByb3h5OwogCQkJ
Y29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFByb2plY3Qgb2Jq
ZWN0ICovOwpAQCAtMjU4MCw2ICsyNzAzLDEyMCBAQAogCQkwRkVBMEEyRjE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBERkdKSVRDb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMzAxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklUQ29kZS5oOyBwYXRoID0g
ZGZnL0RGR0pJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNFQ0Ux
NjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0FyZ3VtZW50UmVn
VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRS
ZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0FyZ3VtZW50UmVn
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQmFzaWNCbG9jay5jcHA7
IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9jay5oOyBwYXRoID0gYjMvQjNCYXNpY0Js
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI4MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9ja0lubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQmFzaWNCbG9ja1V0aWxzLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2tVdGlscy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQTFCREFDREFDMDA4MEZGNzQgLyog
QjNCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmxv
Y2tXb3JrbGlzdC5oOyBwYXRoID0gYjMvQjNCbG9ja1dvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lh
bC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NoZWNrU3BlY2lh
bC5jcHA7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NoZWNrU3BlY2lhbC5oOyBwYXRoID0g
YjMvQjNDaGVja1NwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDaGVja1Zh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRCRjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb21tb24uY3BwOyBwYXRo
ID0gYjMvQjNDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRD
MDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNDb21tb24uaDsgcGF0aCA9IGIzL0IzQ29tbW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZp
dHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb21tdXRhdGl2
aXR5LmNwcDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHku
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tdXRhdGl2aXR5Lmg7IHBh
dGggPSBiMy9CM0NvbW11dGF0aXZpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmNwcDsgcGF0aCA9IGIz
L0IzQ29uc3QzMlZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0MzJWYWx1
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNDb25zdDY0VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDY0VmFsdWUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyog
QjNDb25zdDY0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25z
dDY0VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3Q2NFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb25zdERvdWJs
ZVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91
YmxlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdERvdWJs
ZVZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29udHJvbFZhbHVl
LmNwcDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29udHJvbFZhbHVlLmg7IHBhdGggPSBi
My9CM0NvbnRyb2xWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRD
QjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgcGF0aCA9IGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRD
QzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmg7IHBhdGggPSBiMy9CM0ZyZXF1ZW5j
eUNsYXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0ZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvQjNGcmVxdWVudGVkQmxvY2su
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmF0ZS5oOyBwYXRoID0gYjMv
QjNHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREMDFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMv
QjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW5kZXhNYXAuaDsgcGF0aCA9IGIzL0IzSW5kZXhNYXAuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzSW5kZXhTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbmRleFNl
dC5oOyBwYXRoID0gYjMvQjNJbmRleFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5jcHA7IHBhdGggPSBiMy9C
M0xvd2VyVG9BaXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENDFC
REFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5oOyBwYXRoID0gYjMvQjNMb3dlclRvQWlyLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01l
bW9yeVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTWVt
b3J5VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTWVtb3J5VmFsdWUuaDsgcGF0
aCA9IGIzL0IzTWVtb3J5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3Bjb2RlLmNwcDsgcGF0aCA9IGIzL0IzT3Bjb2RlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3Bjb2RlLmg7
IHBhdGggPSBiMy9CM09wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW4uY3BwOyBwYXRoID0gYjMvQjNPcmlnaW4uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQTFCREFDREFDMDA4MEZGNzQgLyog
QjNPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNPcmlnaW4uaDsg
cGF0aCA9IGIzL0IzT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOyBwYXRo
ID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNpYWwuaDsgcGF0
aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZhbHVlLmg7IHBhdGgg
PSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhhc2VTY29wZS5jcHA7IHBhdGggPSBiMy9CM1Bo
YXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMDFCREFD
REFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2Nl
ZHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Byb2NlZHVy
ZS5jcHA7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZS5oOyBwYXRoID0gYjMvQjNQcm9j
ZWR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1Byb2NlZHVyZUlubGluZXMuaDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNDFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBCM1N0YWNrbWFwLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwLmg7IHBhdGggPSBi
My9CM1N0YWNrbWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU2MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM1N0
YWNrbWFwU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU3
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5oOyBwYXRoID0gYjMvQjNTdGFja21h
cFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTgxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuY3BwOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RL
aW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTkxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM1N0YWNrU2xvdEtpbmQuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90S2luZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja1Nsb3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1N0YWNrU2xvdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja1Nsb3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNr
U2xvdFZhbHVlLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNv
bGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdWNjZXNzb3JD
b2xsZWN0aW9uLmg7IHBhdGggPSBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNo
Q2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N3aXRjaENh
c2UuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N3aXRjaENhc2UuaDsgcGF0aCA9IGIzL0Iz
U3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRjFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3dpdGNoVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMDFCREFDREFDMDA4MEZG
NzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M1N3aXRjaFZhbHVlLmg7IHBhdGggPSBiMy9CM1N3aXRjaFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNUeXBlLmNwcDsgcGF0aCA9IGIz
L0IzVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNUeXBlLmg7IHBhdGggPSBiMy9CM1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmNwcDsgcGF0aCA9
IGIzL0IzVXBzaWxvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmg7IHBhdGggPSBiMy9CM1Vwc2lsb25W
YWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNTFCREFDREFDMDA4
MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNVc2VDb3VudHMuY3BwOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VD
b3VudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVc2VDb3VudHMuaDsg
cGF0aCA9IGIzL0IzVXNlQ291bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMvQjNWYWxpZGF0
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY4MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
VmFsaWRhdGUuaDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1Zh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNW
YWx1ZS5oOyBwYXRoID0gYjMvQjNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUlubGluZXMuaDsgcGF0aCA9IGIzL0IzVmFs
dWVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZDMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzVmFsdWVSZXAuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVSZXAuaDsg
cGF0aCA9IGIzL0IzVmFsdWVSZXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFjay5jcHA7IHBhdGggPSBi
My9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlU3RhY2suaDsgcGF0aCA9IGIzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyQXJnLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWly
QXJnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFyZy5oOyBwYXRoID0g
YjMvYWlyL0FpckFyZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0QzFC
REFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJCYXNp
Y0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEQxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyQmFzaWNCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxvY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckNDYWxsU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJDQ2FsbFNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRGMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDQ2FsbFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQ0Nh
bGxTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNvZGUuY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVl
bnRlZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckZyZXF1ZW50
ZWRCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyR2VuZXJhdGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRlLmg7IHBhdGggPSBiMy9haXIv
QWlyR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTUxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRpb25Db250ZXh0Lmg7IHBhdGggPSBiMy9haXIvQWly
R2VuZXJhdGlvbkNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NTYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5oOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25T
ZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySW5zZXJ0aW9u
U2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9u
U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc2VydGlvblNldC5o
OyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnN0LmNwcDsgcGF0aCA9IGIzL2Fpci9B
aXJJbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlySW5zdC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3RJbmxpbmVzLmg7IHBhdGggPSBi
My9haXIvQWlySW5zdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEFpckxpdmVuZXNzLmg7IHBhdGggPSBiMy9haXIvQWlyTGl2ZW5lc3Mu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclBoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyUGhhc2VTY29wZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29wZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclBoYXNl
U2NvcGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9y
aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclJlZ2lzdGVy
UHJpb3JpdHkuY3BwOyBwYXRoID0gYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWly
UmVnaXN0ZXJQcmlvcml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJS
ZWdpc3RlclByaW9yaXR5Lmg7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJT
cGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BlY2lhbC5oOyBwYXRoID0gYjMv
YWlyL0FpclNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBwYXRoID0gYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BpbGxFdmVyeXRoaW5nLmg7IHBhdGggPSBi
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3RhY2tTbG90LmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJTdGFja1Nsb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2
NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpclN0YWNrU2xvdC5oOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2ODFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclRt
cC5jcHA7IHBhdGggPSBiMy9haXIvQWlyVG1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXAuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clRtcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wSW5s
aW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpclRtcElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclZhbGlkYXRlLmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJWYWxpZGF0ZS5oOyBwYXRoID0gYjMvYWlyL0FpclZhbGlk
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTkyMUJEQjFFMTAwMDgw
RkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyR2VuZXJhdGVkLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODVBRDFCREI1Q0YxMDA4MEZGNzQgLyog
dGVzdGIzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSAi
Y29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7IHBhdGggPSB0
ZXN0YjM7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBGRUM4NUFFMUJE
QjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gdGVzdGIzLmNwcDsgcGF0aCA9IGIzL3Rlc3RiMy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhv
aXN0aW5nUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZH
Q29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEhvaXN0aW5n
UGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCODFCMjYyNTZE
MDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RG
R0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2V0dXBWYXJhcmdzRnJhbWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTM4MDEsNiArNDAzOCwxNSBAQAogCQkJKTsKIAkJCXJ1bk9ubHlG
b3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OworCQkwRkVDODVBMjFCREI1Q0Yx
MDA4MEZGNzQgLyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWls
ZFBoYXNlOworCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAor
CQkJCTBGRUM4NUEzMUJEQjVDRjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBG
cmFtZXdvcmtzICovLAorCQkJCTBGRUM4NUE0MUJEQjVDRjEwMDgwRkY3NCAvKiBKYXZhU2NyaXB0
Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVw
bG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEZGOTIyQzYxNEY0NkIxMzAwNDFB
MjRFIC8qIEZyYW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFz
ZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0zODcwLDYgKzQxMTYsNyBA
QAogCQkJCTE0MTIxMTIwMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovLAogCQkJCTE0QkQ1
OUJGMEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTY1MTEyMzA1MTQwNDZBNEMw
MDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAorCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAv
KiB0ZXN0YjMgKi8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsKQEAgLTM4OTAsNiArNDEzNyw3IEBACiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAw
RkYxNjYyIC8qIEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0
Q0FENDAwNzE3QjlGIC8qIEFQSSAqLywKIAkJCQk5Njg4Q0IxMjBFRDEyQjRFMDAxRDY0OUYgLyog
YXNzZW1ibGVyICovLAorCQkJCTBGRUM4NEIyMUJEQUNENUUwMDgwRkY3NCAvKiBiMyAqLywKIAkJ
CQlBNTRDRjJFQTE4NEVBNzM5MDAyMzdGMTkgLyogYmluZGluZ3MgKi8sCiAJCQkJQTdEODAxOUYx
ODgwRDY2RTAwMjZDMzlCIC8qIGJ1aWx0aW5zICovLAogCQkJCTk2OUEwNzhGMEVEMUQzQUUwMEYx
RjY4MSAvKiBieXRlY29kZSAqLywKQEAgLTQxMDMsNiArNDM1MSwxMzQgQEAKIAkJCW5hbWUgPSBm
dGw7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkwRkVDODRCMjFCREFDRDVF
MDA4MEZGNzQgLyogYjMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0g
KAorCQkJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCisJCQkJMEZFQzg0QjQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0
QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovLAorCQkJCTBGRUM4
NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NEI3
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRkVDODRCODFCREFD
REFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovLAorCQkJCTBGRUM4NEI5MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovLAorCQkJCTBGRUM4NEJBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRkVDODRCQjFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4NEJDMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEJEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEJFMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLywKKwkJCQkwRkVDODRCRjFCREFDREFDMDA4MEZGNzQg
LyogQjNDb21tb24uY3BwICovLAorCQkJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW1vbi5oICovLAorCQkJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZp
dHkuY3BwICovLAorCQkJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZp
dHkuaCAqLywKKwkJCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUu
Y3BwICovLAorCQkJCTBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5o
ICovLAorCQkJCTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAg
Ki8sCisJCQkJMEZFQzg0QzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi8s
CisJCQkJMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAg
Ki8sCisJCQkJMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5o
ICovLAorCQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAg
Ki8sCisJCQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggKi8s
CisJCQkJMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICov
LAorCQkJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggKi8s
CisJCQkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggKi8s
CisJCQkJMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovLAorCQkJ
CTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggKi8sCisJCQkJMEZFQzg0
RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJ
CTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8sCisJCQkJMEZFQzg0
RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLywKKwkJCQkwRkVDODREMzFCREFD
REFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLywKKwkJCQkwRkVDODRENDFCREFDREFD
MDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8sCisJCQkJMEZFQzg0RDUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmggKi8sCisJCQkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzT3Bjb2RlLmNwcCAqLywKKwkJCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNv
ZGUuaCAqLywKKwkJCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICov
LAorCQkJCTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovLAorCQkJCTBG
RUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLywKKwkJ
CQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAor
CQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8s
CisJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8s
CisJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8sCisJ
CQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovLAorCQkJCTBG
RUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgKi8sCisJCQkJMEZFQzg0
RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8sCisJCQkJMEZFQzg0RTMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovLAorCQkJCTBGRUM4NEU0MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLywKKwkJCQkwRkVDODRFNTFCREFDREFD
MDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovLAorCQkJCTBGRUM4NEU2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0RTcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0RTgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8sCisJCQkJMEZFQzg0RTkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovLAorCQkJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRFQjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovLAorCQkJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLywKKwkJCQkwRkVDODRFRDFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLywKKwkJCQkwRkVDODRFRTFCREFDREFDMDA4MEZG
NzQgLyogQjNTd2l0Y2hDYXNlLmggKi8sCisJCQkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlw
ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovLAor
CQkJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgKi8sCisJ
CQkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8sCisJCQkJ
MEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLywKKwkJCQkwRkVD
ODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLywKKwkJCQkwRkVDODRGNzFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjgxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLywKKwkJCQkwRkVDODRGOTFCREFDREFDMDA4MEZG
NzQgLyogQjNWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWUuaCAqLywKKwkJCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGlu
ZXMuaCAqLywKKwkJCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAg
Ki8sCisJCQkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLywKKwkJ
CQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLywKKwkJCSk7CisJCQlu
YW1lID0gYjM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkwRkVDODRCMzFC
REFDRDg4MDA4MEZGNzQgLyogYWlyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGls
ZHJlbiA9ICgKKwkJCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFj
ay5jcHAgKi8sCisJCQkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3Rh
Y2suaCAqLywKKwkJCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLywK
KwkJCQkwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggKi8sCisJCQkJMEZFQzg1
NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NTRE
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEZFQzg1NEUxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg1NEYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTUwMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKKwkJCQkwRkVDODU1MTFCREFDREM3MDA4MEZG
NzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJG
cmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWly
R2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0ZS5oICovLAorCQkJCTBGRUM4NTkyMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQu
Y3BwICovLAorCQkJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29u
dGV4dC5oICovLAorCQkJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxs
ZWVTYXZlcy5jcHAgKi8sCisJCQkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRs
ZUNhbGxlZVNhdmVzLmggKi8sCisJCQkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpcklu
c2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpcklu
c2VydGlvblNldC5oICovLAorCQkJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
LmNwcCAqLywKKwkJCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovLAor
CQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oICovLAorCQkJ
CTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRUM4
NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLywKKwkJCQkwRkVDODU1
RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NTYwMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLywKKwkJCQkwRkVDODU2
MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovLAorCQkJCTBGRUM4
NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODU2MzFC
REFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTY0MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICovLAorCQkJCTBGRUM4NTY1MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLywKKwkJCQkwRkVDODU2NjFCREFD
REM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLywKKwkJCQkwRkVDODU2NzFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8sCisJCQkJMEZFQzg1NjgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcC5jcHAgKi8sCisJCQkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clRtcC5oICovLAorCQkJCTBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVz
LmggKi8sCisJCQkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAq
LywKKwkJCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLywKKwkJ
CSk7CisJCQluYW1lID0gYWlyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJ
MEZGNDI3MkUxNThFQkNDRTAwNENCOUZGIC8qIGRpc2Fzc2VtYmxlciAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC02MDg5LDYgKzY0NjUsNyBAQAogCQkJCTBG
MUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYwMTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBD
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFz
ZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyog
QWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNDhEMTkx
MTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8s
CkBAIC02MTE3LDggKzY0OTQsMTAgQEAKIAkJCQlBNUVBNzBFODE5RjVCMTAxMDA5OEY1RUMgLyog
QXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRp
b25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQy
MTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0
QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE3RDgwMUE1MTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJs
ZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjEzMyw2ICs2NTEyLDcgQEAKIAkJCQk5OURBMDBBNDFC
RDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfbW9kZWwucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5
OURBMDBBNTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfdGVtcGxhdGVzLnB5IGluIEhlYWRl
cnMgKi8sCiAJCQkJNDFERUExMzIxQjlGMzE2MzAwNkQ2NUREIC8qIEJ1aWx0aW5VdGlscy5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RTcyOTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVu
ZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8q
IEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0Iy
IC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0Myw2ICs2NTIzLDcg
QEAKIAkJCQkwRjJERDgwQjFBQjNEODU4MDBCQkI4RTggLyogQnl0ZWNvZGVLaWxscy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5l
c3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0Yx
IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZv
LmggaW4gSGVhZGVycyAqLywKQEAgLTYxNzksNiArNjU2MCw3IEBACiAJCQkJMEYxNUYxNUYxNEI3
QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1
M0EzMzIxN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29k
ZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UHJvY2VkdXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QTNBODE3OTc0MzJEMDBFODkzQzAg
LyogQ29tcGlsYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxRDFC
REEwOEVGMDAzMzFCODQgLyogSlNHbG9iYWxPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKQEAg
LTYxODYsOCArNjU2OCwxMCBAQAogCQkJCTBGNkZDNzUxMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21w
bGV4R2V0U3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjND
MUIgLyogQ29uY3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg4MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZF
NzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1M0NFMDhBMThCQzIxQzMwMEJFREY3NiAvKiBDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUZEMDA3QTE4OUIwNTEwMDA2MzMyMzEgLyogQ29uc29sZU1lc3Nh
Z2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE5MUJEQTA2ODAwMDMzMUI4NCAvKiBCb29s
ZWFuUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwODYxOEJDMUE1NjAw
QkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjIwMiw2ICs2
NTg2LDcgQEAKIAkJCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxp
bmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29w
aWVkU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAv
KiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTI0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzExQUQxQkMz
ODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNTJE
MDE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIz
OUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLApAQCAt
NjIxMyw2ICs2NTk4LDcgQEAKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3Rv
bUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMx
RjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRG
MTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAz
NEEwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYyMzMsNiArNjYxOSw3IEBACiAJCQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJBNTU0
IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA0
MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFs
dWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJB
cmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdB
ZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNo
cG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBE
RkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyNDMsNyArNjYzMCw5IEBACiAJ
CQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3IC8qIERGR0FyaXRoTW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0Fy
cmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RDlBMjk1MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZh
aWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUg
LyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTYyNTMsNiArNjY0Miw3
IEBACiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGQzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxv
Y2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBE
RkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzND
Q0ZFMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3Qu
aCBpbiBIZWFkZXJzICovLApAQCAtNjI5Miw4ICs2NjgyLDEwIEBACiAJCQkJMEY2NkUxNkMxNERG
M0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk2MTdB
MEJDNzQwMEVFMjYxOCAvKiBERkdFZGdlRG9taW5hdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
Nzk4NkQ1NzE3QTBCQjFFMDBBOTVERDAgLyogREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2gu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0
UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NTE3OTczOEI4
MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JG
RjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhl
YWRlcnMgKi8sCkBAIC02MzIzLDYgKzY3MTUsNyBAQAogCQkJCTYyRjJBQTM4MUIwQkVERTMwMDYx
MEM3QSAvKiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3
NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDNEIxNUUx
QkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNB
RDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYw
RjE5QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzMxLDYgKzY3MjQsNyBAQAogCQkJCTBGMkJE
QzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJv
bFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNjFBREYwOTAxMDBFRDc5MkMgLyog
REZHTW92SGludFJlbW92YWxQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMkNENUMxQjYx
QTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggaW4g
SGVhZGVycyAqLywKQEAgLTYzNDksNiArNjc0Myw3IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAw
Q0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhF
NzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjky
MUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NS
RXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM5
MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLApA
QCAtNjM2Niw2ICs2NzYxLDggQEAKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZH
UHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MzE5NkI4RjlFMDA5
MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBMUJGQTFBOUVD
QjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVy
QmFuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkMxOEE2MDA3MDAwMUEyN0Y4IC8qIERG
R1NhZmVwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgx
IC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjM5MCw2ICs2Nzg3LDcg
QEAKIAkJCQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rp
b25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8q
IERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVk
Q29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0UxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIx
MUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGNjM5NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NzE2QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmlj
YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDAxLDYgKzY3OTksNyBAQAogCQkJCTBG
NjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0OTE1MjI4MDk2MDBDRDg5MTAg
LyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzgxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNEIx
NTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxv
Y2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE4MUJEQTA2ODAwMDMzMUI4
NCAvKiBBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDMx
LDYgKzY4MzAsNyBAQAogCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25D
b3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyog
RXhpdGluZ0pJVFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4
QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJD
RjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjQ5MSw2ICs2ODkxLDcgQEAKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcy
MkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJD
NDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJD
Q0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5n
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdl
aWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZU
TFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OTgsOCArNjg5OSwxMCBAQAog
CQkJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25D
b25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVC
IC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNB
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MkIzMTBGQjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTRCRkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVy
cmlkZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAg
LyogRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEw
M0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFD
RTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAq
LywKQEAgLTY1MzgsNiArNjk0MSw3IEBACiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8q
IGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkw
OTExMDBEMzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZF
MDUwMUExQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRTA1MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBB
N0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NTYzLDYgKzY5NjcsNyBAQAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFw
VGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBI
ZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3
MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODYwNkRERUExOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNUZEMDA3NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0
b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTY2MTYsNiArNzAyMSw3IEBACiAJCQkJQTFCOUUyM0Mx
QjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMTgxOTNFMzFCNEUwQ0RCMDBGQzEwMjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0
b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyog
SW50bENvbGxhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4
MTkzRTQxQjRFMENEQjAwRkMxMDI5IC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExNTg3RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVG
b3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJ
bnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ2LDYg
KzcwNTIsNyBAQAogCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1
YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAv
KiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2
ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJF
MzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0
ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjY1OSw2ICs3MDY2LDcgQEAKIAkJCQkwRjJC
NjZFQTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1ZmZlclZpZXdJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0JEQUVDQjE3RjRFQTE0MDBGNjE0MEMgLyogSlNBcnJheUl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4QjE0MTg2RDFCNjI1MjdGMDBGQjIwNjggLyogSlNBcnJv
d0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxODBFMTZG
NUNEMDBCMzQ0NjAgLyogSlNCYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDBEMTdENzBFOEFE
NEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZGQTlF
OTIxNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCkBA
IC02Njc1LDYgKzcwODMsOCBAQAogCQkJCTg2NUEzMEYxMTM1MDA3RTEwMENEQjQ5RSAvKiBKU0NK
U1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MUQwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTQ2xhc3NSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDg4MThCQzFBNTYw
MEJFREY3NiAvKiBKU0NvbnNvbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFFMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkUzQzYxMzE2N0JBQkQ3MDA2RDc2MEEgLyogSlNDb250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkUzQzYxNzE2N0JBQkVFMDA2RDc2MEEgLyogSlNDb250ZXh0SW50ZXJuYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1OEMwMjQyMThFNEE0MUEwMDAzMkJDNSAvKiBKU0NvbnRleHRQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKQEAgLTY2OTAsNiArNzEwMCw3IEBACiAJCQkJRkUzODRFRTYxQURE
QjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMzg0RUU4
MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQyRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNFbnZpcm9ubWVudFJlY29yZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE0MTY3QkFCRDcwMDZENzYwQSAvKiBKU0V4
cG9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCNEFDQUYxNDg0QzlDRTAwQjM4QTM2IC8qIEpT
RXhwb3J0TWFjcm9zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFRjE3QjZCNUFCMDBBN0FF
M0YgLyogSlNGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjcwMCwxMSArNzExMSwx
MyBAQAogCQkJCTBGMkI2NkYxMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjIxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
R2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkI2NkYzMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVj
dG9ySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNDE3QjZCNUFC
MDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJCNjZGNTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZp
ZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUzOTE3RTdCMUI3OTA2RkEwMDBFQkQz
MyAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUZ1bmN0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RjYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJy
YXlWaWV3UHJvdG90eXBlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzk3RTA3QUExQjhG
Q0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUxQjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MjEwRTE2RjVDRDAwQjM0NDYwIC8qIEpTR2xvYmFsT2JqZWN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA4NjE4OUIxQjdFMDA2MzMyMzEgLyogSlNHbG9iYWxP
YmplY3RDb25zb2xlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QzNBMUE2MThDMDQ5MDIw
MEM5NTkzQSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLApA
QCAtNjczNSw2ICs3MTQ4LDcgQEAKIAkJCQlBNzAwODc0MjE3Q0JFOEVCMDBDM0U2NDMgLyogSlNN
YXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NERFRjk2MTgyRDk5MTQwMDUyMkMyMiAvKiBKU01h
cEl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkyRDFCRDE3RkE0MDAxQUE0MTMg
LyoganNtaW4ucHkgaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQg
LyogQjNWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNEMjM5QzkxQjgyOUMxQzAwQkJF
RjY3IC8qIEpTTW9kdWxlRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzMThDQkMx
MUI4QUVGNTEwMEEyOTI5RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTM5REE0QTcxQjdFOEI3QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmggaW4g
SGVhZGVycyAqLywKQEAgLTY3NjQsNiArNzE3OCw3IEBACiAJCQkJQTdDMUVBRjAxNzk4N0FCNjAw
Mjk5REIyIC8qIEpTU3RhY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyNzBF
MTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTg1NTM5
MTExQjk5NjgwMDFBRjUxRSAvKiBKU1N0cmluZ0J1aWxkZXIuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNzBFQzBFQzMxQUEwRDdEQTAwQjZBQUZBIC8qIEpTU3RyaW5nSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTI2MDBCNUE3MTUyQkFBQTcwMDkxRUU1RiAvKiBKU1N0cmluZ0pv
aW5lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjgwRTE2RjVDRDAwQjM0NDYwIC8qIEpT
U3RyaW5nUmVmLmggaW4gSGVhZGVycyAqLywKQEAgLTY4MjEsOSArNzIzNiwxMSBAQAogCQkJCTBG
NDY4MEEzMTRCQTdGOEQwMEJGRTI3MiAvKiBMTEludEV4Y2VwdGlvbnMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNDY4MENCMTRCQkIxNzIwMEJGRTI3MiAvKiBMTEludE9mZmxpbmVBc21Db25maWcu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDI4N0IyMTVFQzlBNTcwMERBODE2MSAvKiBMTEludE9w
Y29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEE1MTRCQTdGOEQwMEJGRTI3MiAv
KiBMTEludFNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzOUQxNEJDRjQ2NjAw
ODg1QjRGIC8qIExMSW50VGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDRTE4MDVF
NzU1MDA0NzJDRTQgLyogTExWTUFQSS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZB
Q0YxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUElGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3RTVBQjM4MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkNFRkFEMzE4MDVFRENDMDA0NzJDRTQgLyogTExWTUhlYWRlcnMuaCBp
biBIZWFkZXJzICovLApAQCAtNjgzNiwxMiArNzI1MywxNCBAQAogCQkJCTg2RDNCMkM2MTAxNTZC
REUwMDI4NjVFNyAvKiBNYWNyb0Fzc2VtYmxlckFSTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTFB
MDA5QzAxODMxQTIyRDAwQ0Y4NzExIC8qIE1hY3JvQXNzZW1ibGVyQVJNNjQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2QUREMTQ2MEZEREVBOTgwMDA2RUVDMiAvKiBNYWNyb0Fzc2VtYmxlckFSTXY3
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjNCMjNFMDBGQzYxMTg5MDA3MDNBQTQgLyogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhFMTExQTIxM0VFMDAw
N0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJNSVBTLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTY4QzYz
NzFCOTBERTA0MDA0MkJDQjMgLyogTWFjcm9Bc3NlbWJsZXJQcmludGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk4NkFFNjRBOTEzNUU1RTFDMDA5NjMwMTIgLyogTWFjcm9Bc3NlbWJsZXJTSDQuaCBp
biBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU0MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2Vt
Ymxlclg4Ni5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTUwRjNBODNDMTAwRjg0NzEwIC8q
IE1hY3JvQXNzZW1ibGVyWDg2XzY0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4QTFCREFD
REM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NjAxNjFFNjBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3MDA4NzNBMTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4NTA3RDcxN0NCQzZGRDAwMTFGNkU3IC8qIE1hcERh
dGEuaCBpbiBIZWFkZXJzICovLApAQCAtNjg2Nyw2ICs3Mjg2LDcgQEAKIAkJCQlCQzAyRTkxMTBF
MTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5hdGl2ZUVycm9yUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQyMTFCOTAxM0RFMDAzNDZCNTIgLyogTmF0aXZlU3Rk
RnVuY3Rpb25DZWxsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyODFCREFDREFDMDA4MEZG
NzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjIwMTZE
MDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5
RTQ1QTI4MThBMUIyNTkwMDI2RDg4RiAvKiBOb25kZXRlcm1pbmlzdGljSW5wdXQuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjg4Nyw2ICs3MzA3LDcgQEAKIAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkx
RjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUFEREIxRjYzMThENzdE
QkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5
QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3
QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkxMCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMu
aCBpbiBIZWFkZXJzICovLApAQCAtNjkwMCwxMyArNzMyMSwxNyBAQAogCQkJCTBGRjlDRTc0MUI5
Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBvbHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1
bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQg
LyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2ODkxNkIwMTU1
RjI4NjMwMENCMkI5QSAvKiBQcml2YXRlTmFtZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQ1MDBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTVD
RDQ1NzcwRTFDNEZERDAwODUzNThFIC8qIFByb2ZpbGVHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDUxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlTm9kZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGNzI5QTUxNjZBRDM1MTAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVl
UmVwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCOTE2NkFEMzYwMDAwRjVCQTMgLyogUHJv
ZmlsZXJCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTM5MTJBMTY3NzFDMzYwMDlD
Q0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJBMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQjE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJDb21waWxhdGlvbktpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJDMTY2
QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuaCBpbiBIZWFkZXJzICov
LApAQCAtNjkyOCwxMCArNzM1MywxMyBAQAogCQkJCTBGQjdGMzlDMTVFRDhFNDYwMEYxNjdCMiAv
KiBQcm9wZXJ0eVN0b3JhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDU2MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBQcm90ZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDc0QzMzQjE2QUEyRDk1
MDA2MkYwMUQgLyogUHJvdG90eXBlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NDFC
REFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
NzgwQTIxOEZFMUU5ODAwMUU3MkQ5IC8qIFB1cmVOYU4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MTVDRDIzMUJBNUY5ODYwMDMxRkZEMyAvKiBQdXRCeUlkRmxhZ3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTMzMkE0MTRDQTdERDkwMDg1RjNDNiAvKiBQdXRCeUlkU3RhdHVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU4MDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5M0I0QUExOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3OTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMENENEMyMTVGMUE2MDcwMDMyRjFDMCAvKiBQdXRE
aXJlY3RJbmRleE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUZDOEM1MTRFMUI2MDQwMEQ1
MkFFMCAvKiBQdXRLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODQ2MzBFNkRFNkIxMDA0
Nzc1QTQgLyogUHV0UHJvcGVydHlTbG90LmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTIsNiArNzM4
MCw3IEBACiAJCQkJMEZDMzE0MTIxODE0NTU5MTAwMDMzMjMyIC8qIFJlZ2lzdGVyU2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNTdEMjNFRTE4OTFCNTU0MDAzMUM3RkEgLyogUmVndWxhckV4cHJl
c3Npb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzlEMTVFRDhFNDYwMEYxNjdCMiAvKiBS
ZWplY3QuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVFODE4MjM0MEIz
MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUJBMTVF
QTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yQ29uc3RhbnRzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUJBMTVGMDE4MjM0NUFGMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yRGVi
dWdnYWJsZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTU5LDYgKzczODgsNyBAQAogCQkJCUE1QkEx
NUVEMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjI0RTU1MTE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY5RUJDQjcwRThDNkQ0QTAwODcyMkNDIC8qIFJlc3VsdFR5cGUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEIwQTlEMTFBOUI2NjQ2MDAwMTMwNkEgLyogUnVudGlt
ZUZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkMwNjExRjFBQTUxRTFDMDBCNEFEQkEgLyog
UnVudGltZVR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyMkIzMUI5MTQwNTc3RDcwMERCNDc1
QSAvKiBTYW1wbGluZ0NvdW50ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjk4OCw2ICs3NDE4LDcg
QEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29k
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
c3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAg
LyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZDMTJFRjI5NEUw
MDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlE
QzE2RDEyRUYyOTUzMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZUl0ZW0uaCBpbiBIZWFk
ZXJzICovLApAQCAtNzAwNyw2ICs3NDM4LDcgQEAKIAkJCQlCQzE4QzQ2QTBFMTZGNUNEMDBCMzQ0
NjAgLyogU3RyaW5nUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQjEzNEZG
MEE2MDBBRkFEQjUgLyogU3Ryb25nLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDU3MjI4NjE0MzdF
MTQwMDA1RkRFMjYgLyogU3Ryb25nSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
ODIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
Q0RFM0FCODBFNkM4MkY1MDAxNDUzQTcgLyogU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3RTRFRTcwOTBFQkI3OTYzMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTJBQUFBMzEyMThCRDQ5RDEwMDM5NENDOCAvKiBTdHJ1Y3R1cmVJREJsb2IuaCBp
biBIZWFkZXJzICovLApAQCAtNzA0MywxMCArNzQ3NSwxMiBAQAogCQkJCTBGMkQ0REVBMTk4MzJE
QUMwMDdENEIxOSAvKiBUeXBlTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQjMxMTAx
MTk3NUI0NjcwMDgwODU3QyAvKiBUeXBlTG9jYXRpb25DYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGQjZDMzkxQUY0OEREQzAwREIxQkY3IC8qIFR5cGVvZlR5cGUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNTJDOTUyQjcxOUEyODk4NTAwNjlCMzg2IC8qIFR5cGVQcm9maWxlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERUMxOTgzMkRDNDAwN0Q0QjE5IC8qIFR5cGVQcm9maWxl
ckxvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRDRERjAxOTgzMkRENjAwN0Q0QjE5IC8qIFR5
cGVTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzRCMTU4RUJFOTEwMDRDQjlGRiAvKiB1
ZGlzODYuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NEZGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0FyZ3VtZW50UmVnVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQxMTU4RUJFOEQw
MDRDQjlGRiAvKiB1ZGlzODZfZGVjb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MjE1
OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2V4dGVybi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NDI3NDQxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Nl9pbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBA
IC03MDg0LDggKzc1MTgsMTAgQEAKIAkJCQlGRUQ5NEYyRjE3MUUzRTIzMDBCRTc3QTQgLyogV2F0
Y2hkb2cuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTE5RDI2MTU4NTNDRTMwMDRBNEU3RCAvKiBX
YXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJFMzEzQzEzNEZGMEE2MDBBRkFEQjUg
LyogV2Vhay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RjlGMTRFRTFB
Q0MwMEQ2RDVENCAvKiBXZWFrQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTE0QkZDRTY5MTBD
REIxRkMwMDM2NENDRSAvKiBXZWFrR0NNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMz
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUFEODZBOTNFMUFBNEQ4OEQwMDJGRTc3RiAvKiBXZWFrR0NNYXBJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNEY3MjU2NjE0RUUyNjVFMDBCMTY1MkIgLyogV2Vha0hhbmRsZU93bmVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEZBMjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0ltcGwu
aCBpbiBIZWFkZXJzICovLApAQCAtNzEwNyw5ICs3NTQzLDEyIEBACiAJCQkJOTk1OUU5MkUxQkQx
N0ZBNDAwMUFBNDEzIC8qIHh4ZC5wbCBpbiBIZWFkZXJzICovLAogCQkJCTQ1MTUzOUI5MTJEQzk5
NDUwMEVGN0FDNCAvKiBZYXJyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4NTEyREJBMzM3
MDBBOUZFN0IgLyogWWFyckludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUz
MTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTg2NzA0Qjg3MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySklULmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjcwNEI4ODEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhcnNlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCOEExMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXR0ZXJu
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0QjQzMTJEQjhBODEwMEE5RkU3QiAv
KiBZYXJyU3ludGF4Q2hlY2tlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CkBAIC03MTM0LDYgKzc1NzMsMjIgQEAKIAkJ
CXByb2R1Y3RSZWZlcmVuY2UgPSAwRkNFRkFCNjE4MDVENjE2MDA0NzJDRTQgLyogbGlibGx2bUZv
ckpTQy5keWxpYiAqLzsKIAkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUu
bGlicmFyeS5keW5hbWljIjsKIAkJfTsKKwkJMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRl
c3RiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKKwkJCWJ1aWxkQ29uZmlndXJh
dGlvbkxpc3QgPSAwRkVDODVBODFCREI1Q0YxMDA4MEZGNzQgLyogQnVpbGQgY29uZmlndXJhdGlv
biBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3RiMyIgKi87CisJCQlidWlsZFBoYXNlcyA9
ICgKKwkJCQkwRkVDODU5NTFCREI1Q0YxMDA4MEZGNzQgLyogU291cmNlcyAqLywKKwkJCQkwRkVD
ODVBMjFCREI1Q0YxMDA4MEZGNzQgLyogRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlidWlsZFJ1
bGVzID0gKAorCQkJKTsKKwkJCWRlcGVuZGVuY2llcyA9ICgKKwkJCSk7CisJCQluYW1lID0gdGVz
dGIzOworCQkJcHJvZHVjdE5hbWUgPSB0ZXN0YXBpOworCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBG
RUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi87CisJCQlwcm9kdWN0VHlwZSA9ICJj
b20uYXBwbGUucHJvZHVjdC10eXBlLnRvb2wiOworCQl9OwogCQkwRkY5MjJDMzE0RjQ2QjEzMDA0
MUEyNEUgLyogSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yICovID0gewogCQkJaXNhID0gUEJYTmF0
aXZlVGFyZ2V0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBGRjkyMkNBMTRGNDZCMTMw
MDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
SlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAqLzsKQEAgLTcyODksNiArNzc0NCw3IEBACiAJCQkJ
MTRCRDU5QkUwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCiAJCQkJOTMyRjVCREEwODIy
QTFDNzAwNzM2OTc1IC8qIGpzYyAqLywKIAkJCQk2NTExMjJGNzE0MDQ2QTRDMDAyQjEwMUQgLyog
dGVzdFJlZ0V4cCAqLywKKwkJCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICov
LAogCQkJCTVENkIyQTQ3MTUyQjlFMTcwMDUyMzFERSAvKiBUZXN0IFRvb2xzICovLAogCQkJKTsK
IAkJfTsKQEAgLTc1MzYsNiArNzk5MiwxNCBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OworCQkwRkVDODU5NTFCREI1Q0YxMDA4MEZGNzQg
LyogU291cmNlcyAqLyA9IHsKKwkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOworCQkJYnVp
bGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTBGRUM4NUFGMUJE
QjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkpOworCQkJcnVu
T25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CisJCX07CiAJCTBGRjkyMkM0MTRG
NDZCMTMwMDQxQTI0RSAvKiBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYU291cmNlc0J1aWxk
UGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OwpAQCAtNzU5MSw2ICs4MDU1
LDcgQEAKIAkJCQkwRjU1RjBGNDE0RDEwNjM5MDBBQzc2NDkgLyogQWJzdHJhY3RQQy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlCRDEwN0VDMzc2MDA0MjdBNDggLyogQXJnTGlzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjc0M0JBQTE2Qjg4MjQ5MDA5RjkyNzcgLyogQVJNNjREaXNh
c3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckJhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZEM0IyQzMxMDE1NkJE
RTAwMjg2NUU3IC8qIEFSTUFzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUMwMjg1
MDE3MTc5NUUyMDAzNTFFMzUgLyogQVJNdjdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjVDMDI4NUMxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTc1OTgsOCArODA2MywxMCBAQAogCQkJCUE3QThBRjM0MTdBREI1RjMwMDVB
QjE3NCAvKiBBcnJheUJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZDOTlENDE4NEVF
MzE4MDA5QzEwQUIgLyogQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3QThBRjM2MTdBREI1RjMwMDVBQjE3NCAvKiBBcnJheUJ1ZmZlclZpZXcu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1M0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBz
aWxvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJGMTA3RUMzNzYwMDQyN0E0
OCAvKiBBcnJheUNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QkRBRUM4MTdG
NEVBMTQwMEY2MTQwQyAvKiBBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjM5NDU0MTVEMDcwNTUwMDZBNTk3QyAvKiBBcnJheVBy
b2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzAxMDdFQzM3NjAwNDI3QTQ4IC8q
IEFycmF5UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTQwMTdFQTlGNTkw
MEFCQjIxNyAvKiBBc3NlbWJseUhlbHBlcnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjIwLDgg
KzgwODcsMTAgQEAKIAkJCQkxNDI5RDhERDBFRDIyMDVCMDBCODk2MTkgLyogQ2FsbEZyYW1lLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTYyRUM5QkI2MUI3RUIwN0MwMDMwM0FEMSAvKiBDYWxsRnJh
bWVTaHVmZmxlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENjFCODRGQjQ2MDAx
ODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTYyRDc1NUQ1MUI4NEZCNDAwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjMyXzY0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ0MUI4NEZCM0QwMDE4MDFGQSAvKiBDYWxsRnJh
bWVTaHVmZmxlcjY0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEI4M0IwMTRC
Q0Y3MTYwMDg4NUI0RiAvKiBDYWxsTGlua0luZm8uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
MzMyOUQxNENBN0RDMzAwODVGM0M2IC8qIENhbGxMaW5rU3RhdHVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTYyNzY3MzIzMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc2MzQsNiArODEwMyw3IEBACiAJCQkJQTc3RjE4MjExNjQwODhCMjAwNjQwQTQ3
IC8qIENvZGVDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0NjE2Njc2NEYxMDBE
NjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1ODI2NzE0RDI3
OTZDMDBBOUMzMDYgLyogQ29kZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9u
S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyog
Q29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjQxLDYgKzgxMTEsNyBAQAogCQkJCUE3
MDlGMkYyMTdBMEFDMkEwMDUxMkU5OCAvKiBDb21tb25TbG93UGF0aHMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNjU1M0EzMzExN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2Vw
dGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUEzQTcxNzk3NDMyRDAwRTg5M0MwIC8q
IENvbXBpbGF0aW9uUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NThCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5
QzIxMDdFQzM3NjAwNDI3QTQ4IC8qIENvbXBsZXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY2RkM3NTAxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ2QjE2RDgxMkVCNUI1OTAwMUJFQzFCIC8qIENvbnNlcnZhdGl2ZVJvb3Rz
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY2OCw2ICs4MTM5LDcgQEAKIAkJCQkwRkM3MTJERTE3
Q0Q4Nzc5MDA4Q0M5M0MgLyogRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUZFNTA2ODY3MUFFMjVFMjgwMDA5REFCNyAvKiBEZWZlcnJlZFNvdXJjZUR1
bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0QxN0EwQkJGRDAwQThEQjgxIC8qIERG
R0Fic3RyYWN0SGVhcC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNTVDMTk0MTcyNzZFNDYw
MENFQUJGRCAvKiBERkdBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDNF
NDAxMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdh
dGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxOEQzQ0YxQjU1QTZFMDAwMkM1QzlG
IC8qIERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTc2NzcsNiArODE0OSw3IEBACiAJCQkJMEY2Mzk0ODQxNUU0ODExODAwNkE1OTdDIC8qIERGR0Fy
cmF5TW9kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q5QTI5NDE3QTBCQzc0MDBFRTI2MTgg
LyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjY2NkVD
NjE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmlsaXR5LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MTRDQTQxNkVBOTJGMDAwRjNFQkVCIC8qIERGR0Jh
Y2t3YXJkc1Byb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODlDRjIx
N0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03
Njg1LDYgKzgxNTgsNyBAQAogCQkJCTg2RUM5REM0MTMyOERGODIwMDJCMkFENyAvKiBERkdCeXRl
Q29kZVBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MkUyMTE0MTcyQ0UzMDAxNzlD
OTQgLyogREZHQ2FwYWJpbGl0aWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTU3MTRF
RjkwQTAwMEM3MjUzMiAvKiBERkdDRkFQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU0NjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjNCM0EyNzE1NDRDOTk1MDAzRUQwRkYgLyogREZHQ0ZHU2ltcGxpZmljYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzY5NDFBRTlDQzMzMDAwRDRERkIgLyogREZHQ2xl
YW5VcFBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNGMTdBMEJCRkQwMEE4REI4
MSAvKiBERkdDbG9iYmVyaXplLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzcyMiw2ICs4MTk2LDcg
QEAKIAkJCQkyQTg4MDY3ODE5MTA3RDU1MDBDQjBCQkIgLyogREZHRnVuY3Rpb25XaGl0ZWxpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFQzlEQzcxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0dy
YXBoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0Y5MThBNjAwNzAwMDFBMjdGOCAvKiBE
RkdHcmFwaFNhZmVwb2ludC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU2RDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIx
NzY2MDE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzg0MTY4MUJBOEMzMjEwMDYxODM3RCAvKiBERkdJbmZlcnJlZFR5cGVDaGVjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0RDkwNTE3QTBCQUE4MDA2QkE1NTQgLyogREZHSW5Q
bGFjZUFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzY0LDE0ICs4MjM5LDE3
IEBACiAJCQkJMEZDMDk3NzIxNDY5M0FGOTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxlcjY0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzAyNUE5MTcxNEIwRkEwMDM4MkMwRSAvKiBERkdP
U1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzOTJDODkxQjQ2
MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRUZDOUFBMTY4MUEzQjMwMDU2N0Y1MyAvKiBERkdPU1JFeGl0SnVtcFBsYWNlaG9sZGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkVEMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JF
eGl0UHJlcGFyYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2MjM3OTcxQUU0NUNBNzAw
RDQwMkVBIC8qIERGR1BoYW50b21JbnNlcnRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkZGQzk1QjE0RUY5MEFEMDBDNzI1MzIgLyogREZHUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGMkI5Q0VBMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdQaGlDaGlsZHJl
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzhBOTc3QTE3OTczOEI4MDA5REY3NDQgLyogREZH
UGxhbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkJFMEY3NDE2QzFEQjA5MDA4MkM1RTggLyog
REZHUHJlZGljdGlvbkluamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZD
OTVEMTRFRjkwQjMwMEM3MjUzMiAvKiBERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Ns
b3RLaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0UwMUFBMTlEMzUzQTUwMEY2MUI3RiAv
KiBERkdQcmVQb3N0TnVtYmVyaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0VDMTlE
MEJBN0QwMEIxRDFCNSAvKiBERkdQcm9tb3RlZEhlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkIxNzY2MjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzc4OSw2ICs4MjY3LDggQEAKIAkJCQkwRkMyMENCNTE4NTJFMkM2MDBD
OUU5NTQgLyogREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjg5M0JEQjE5MzZFMjNDMDAxMjExRjQgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc5MDg1NTE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3Ry
dWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJGQ0NGRTE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkMwOTdBMTE0NkIyOENBMDBDRjI0NDIgLyogREZHVGh1bmtz
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzI3MTdENTFGNTcwMENBMkM0MCAvKiBERkdU
aWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzgxNiw2ICs4
Mjk2LDcgQEAKIAkJCQkyQTgzNjM4NTE4RDdEMEVFMDAwMEVCQ0MgLyogRWRlbkdDQWN0aXZpdHlD
YWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OUU0NUEyNTE4QTFCMjU5MDAyNkQ4OEYg
LyogRW5jb2RlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM3MTA3RUMzNzYw
MDQyN0E0OCAvKiBFcnJvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwOTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzgxMDdF
QzM3NjAwNDI3QTQ4IC8qIEVycm9yQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkVCNThDMTQxODdCOEIxNjAwOThFRjBCIC8qIEVycm9ySGFuZGxpbmdTY29wZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlDOTEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3JJbnN0YW5jZS5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTc4NjAsNiArODM0MSw3IEBACiAJCQkJMEY4RjJCOTUxNzJF
MDRBMDAwN0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYx
ODA3MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RUEwQTBGMTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUwMDFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0Y4MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDhBMzFCMTdENTFGMjIwMENBMkM0MCAvKiBG
VExPU1JFbnRyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJEQzE3MTc4RTFDMDA2OTBD
N0YgLyogRlRMT1NSRXhpdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4NjcsNiArODM0OSw3IEBA
CiAJCQkJMEZFQTBBMkExNzA5NjI5NjAwQkI3MjJDIC8qIEZUTE91dHB1dC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjQ4NTMyOTE4N0RGREVDMDA4M0I2ODcgLyogRlRMUmVjb3ZlcnlPcGNvZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBQUIxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNh
dmVSZXN0b3JlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYxQjEx
ODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjI1RjFCMzE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhDYWxsS2V5LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOUQzMzlBMTgwM0FEQjcwMDczQzJCQyAvKiBGVExTdGFja01hcHMu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODk5LDYgKzgzODIsNyBAQAogCQkJCUE1RkQwMDc1MTg5
QjAzOEMwMDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQzI1RjhCQ0QxNTc1NDRBOTAwMjQ1QjcxIC8qIEluY3JlbWVudGFsU3dlZXBlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjEzRTA0RTE2MTY0QTFGMDBEQzhERTcgLyogSW5kZXhpbmdUeXBl
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBBNzUyMjFCOTRCRkE5MDAx
MTA2NjAgLyogSW5mZXJyZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5MjExMUI5
NEQ0REYwMDcxREQ2NiAvKiBJbmZlcnJlZFR5cGVUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc5MDYsNiArODM5MCw3IEBACiAJCQkJOUVBNUM3QTIxOTBGMDg4NzAwNTA4RUJF
IC8qIEluaXRpYWxpemVMTFZNTWFjLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTlFNzI5NDA4MTkw
RjAyMUUwMDFBOTFCNSAvKiBJbml0aWFsaXplTExWTVBPU0lYLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTlFNzI5NDA3MTkwRjAxQTUwMDFBOTFCNSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRUM4NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCNzE4NUI4QkQzMDA3RTk1
QUQgLyogSW5qZWN0ZWRTY3JpcHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxNEIyQzIxODVB
Njg0NDAwRjNDN0NCIC8qIEluamVjdGVkU2NyaXB0QmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNThFMzU5MTE4NjBERUNGMDAxRjI0RkUgLyogSW5qZWN0ZWRTY3JpcHRIb3N0LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzkxNyw2ICs4NDAyLDcgQEAKIAkJCQlBNTkzQ0Y4NjE4NDAzOENBMDBC
RkNFMjcgLyogSW5zcGVjdG9yQWdlbnRSZWdpc3RyeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTkzQ0Y3QzE4NDAzNjAzMDBCRkNFMjcgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODcxODU2ODMzNTAwMkVENjkyIC8qIEluc3BlY3Rv
ckJhY2tlbmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzNzFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQw
MDgxMTg5QjE5MUEwMDYzMzIzMSAvKiBJbnNwZWN0b3JDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTU3RDIzRTUxODkwQ0VCRjAwMzFDN0ZBIC8qIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUzMjQzODkxODU2ODMzNTAwMkVENjkyIC8q
IEluc3BlY3RvckZyb250ZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTcz
LDYgKzg0NTksNyBAQAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVu
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4QUYwQTUwOEQyMDAwMDVGMDYxIC8q
IEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRjg5MjBB
NTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2FsbGJhY2tPYmplY3QuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFDQkYyIC8qIEpTQ2FsbGVlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4MTg4MEQ2QTgwMDI2QzM5QiAvKiBKU0NCdWls
dGlucy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5ODAsNiArODQ2Nyw4IEBACiAJCQkJMTQ3RjM5
RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEgLyog
SlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFGNTlD
IC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzIwMjhCNjE3OTc2MDFF
MDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzk5
MCwxNiArODQ3OSwxOSBAQAogCQkJCUZFMzg0RUU3MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxh
clZNUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYwMDQy
N0E0OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MDU2
NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVudmly
b25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0OCAv
KiBKU0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4NTE4OUIxQjdF
MDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTVDM0ExQTUxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUNs
aWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQgLyog
QjNDb25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OTIxODI0NzQ0NzAw
Q0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTdEMjNFOTE4OTFCMDc3MDAzMUM3RkEgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFnZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBKU0ds
b2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4N0ND
M0M2MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9iamVj
dFJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5MDAx
MTBGMTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODUyMzFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRI
b3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUMxMTg1QkZBQ0MwMDdFOTVBRCAvKiBK
U0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNG
NTA4MDFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04MDE4LDYgKzg1MTAsNyBAQAogCQkJCUUzMThDQkMwMUI4QUVGNTEwMEEyOTI5RCAv
KiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlEQTRB
NjFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJRTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpTTm90
QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3QTQ4
IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCN0U0MEE0MzA3NjAwMDUx
N0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMzEsNiArODUyNCw3
IEBACiAJCQkJRTNFRjg4NzQxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8qIEpT
UHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MkMzN0YxQUREQjhGRTAwMTM5NzI2IC8q
IEpTUmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTExMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
OTkyOEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0ODc0QUU1MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3QzBDNEFEMTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTgwNTksNiArODU1Myw3IEBACiAJCQkJNzA5RkI4NjcxQUUzMzVD
NjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2MTE1
RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZF
M0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJPYmpl
Y3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8qIEp1
bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkg
LyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDY2LDkg
Kzg1NjEsMTIgQEAKIAkJCQkxNDhGMjFCMDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZmZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExpdGVy
YWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1N0YxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAwRURB
RjcxIC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMjBDRTlEMTVG
MDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4
MEQyMTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODU0MTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRFbnRy
eXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3MiAv
KiBMTEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJBN0Y4
RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA3Nyw2
ICs4NTc1LDcgQEAKIAkJCQlBN0U1QUIzNzE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERTEwN0VDN0U3MDA2NTA0NDYgLyog
TG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3MiAv
KiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTFGMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
QjcyM0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fz
c2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwODYsMTAgKzg1ODUsMTIgQEAKIAkJ
CQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3MzkxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkzMTgyRDk5MTQwMDUyMkMyMiAv
KiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwNzFC
REFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
MDA4NzNEMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxvY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1hcmtl
ZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIwMkU4
NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MEE0ODQxQTkwNTFBRjAw
RDczQ0NBIC8qIE1hdGhDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYxMDdF
QzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTI4LDE3
ICs4NjI5LDIxIEBACiAJCQkJMEZGNzI5QUQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0
ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUUxNjZBRDM1QzAwMEY1QkEzIC8q
IFByb2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTI5MTY3NzFD
MzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJDb21w
aWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVCQTMg
LyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5
QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRhYmFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyogUHJv
ZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMDFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNr
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2RSAv
KiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1NDgz
NzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3BlcnR5
Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAwMTdB
Mjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURF
ODEwN0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtODE0NywxMCArODY1MiwxMiBAQAogCQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMxRkZE
MyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENBN0RE
NzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5M0I0
QTkxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzM2MzdBNTFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVj
dE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3MUQg
LyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdCMiAv
KiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNzEyQjNCMTFDN0IyMTIw
MDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjQyQzUxMDE1
MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgxNjQsNiArODY3MSw3IEBACiAJCQkJQTVCQTE1RTkxODIzNDBCMzAw
QTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NThG
MTgyNDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1QkExNUVDMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JE
ZWJ1Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA1MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUJB
MTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5tbSBp
biBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RFMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50aW1l
VHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxODIsNiArODY5MCw3IEBACiAJCQkJQTU0Q0Yy
RjkxODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNTRDRjJGNTE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTcyOTlEQTUxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OTBERDZEMTgyRjQ5OTcwMDU4ODgw
NyAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5OURB
MTE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRUU5ODQzMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKQEAgLTgxOTYsNiArODcwNSw3IEBACiAJCQkJMEZEODJFODYxNDFGM0ZGMTAwMTc5
Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzFFQUYxMTc5
ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcz
MEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTIxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8q
IFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVD
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04
MjEyLDYgKzg3MjIsNyBAQAogCQkJCTcwNUI0MUFEMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xD
b25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDVCNDFBRjFBNkU1MDFFMDA3MTY3
NTcgLyogU3ltYm9sT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwNUI0MUIxMUE2RTUw
MUUwMDcxNjc1NyAvKiBTeW1ib2xQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZF
Qzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGOTE5RDI4MTU4NTY3NzMwMDRBNEU3RCAvKiBTeW1ib2xUYWJsZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3MEVDQTYwNzFBRkRCRUEyMDA0NDk3MzkgLyogVGVtcGxhdGVSZWdpc3RyeS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkMzMTQxMzE4MTQ1NTkxMDAwMzMyMzIgLyogVGVtcFJl
Z2lzdGVyU2V0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODI0MCw2ICs4NzUxLDcgQEAKIAkJCQkw
RjI0RTU1ODE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk3OUVFMEJGRjFCNEFGQjg1MDAwMzg1QzkgLyogVmFyaWFibGVFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUw
MkMxQUE5MDk1NjAwRDMzQjMzIC8qIFZhck9mZnNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjIwQzI1OTFBODAxM0FCMDBEQTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUxOEUzQTU5MERGOTI3OEMwMEQ5MEIzNCAvKiBWTS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTgyNTksNiArODc3MSw3IEBACiAJCQkJNzA5RkI4NjkxQUUzMzVDNjAwMzlEMDY5IC8q
IFdlYWtTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDlGQjg2QjFBRTMz
NUM2MDAzOUQwNjkgLyogV2Vha1NldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQky
QTRFQzkwQjE4NjBENkMyMDA5NEY3ODIgLyogV3JpdGVCYXJyaWVyQnVmZmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTdEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRl
QmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAw
RDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjNDNkQ5
QzE1MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04Mjg1LDYgKzg3OTgsMTEgQEAKIAkJCXRhcmdldCA9IDBGQ0VGQUI1MTgwNUQ2MTYw
MDQ3MkNFNCAvKiBsbHZtRm9ySlNDICovOwogCQkJdGFyZ2V0UHJveHkgPSAwRkNFRkFCQzE4MDVE
NjYzMDA0NzJDRTQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOwogCQl9OworCQkwRkVDODVC
MTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKKwkJCWlzYSA9
IFBCWFRhcmdldERlcGVuZGVuY3k7CisJCQl0YXJnZXQgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZG
NzQgLyogdGVzdGIzICovOworCQkJdGFyZ2V0UHJveHkgPSAwRkVDODVCMDFCREI1RDhGMDA4MEZG
NzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovOworCQl9OwogCQkwRkY5MjJEMzE0RjQ2QjJG
MDA0MUEyNEUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLyA9IHsKIAkJCWlzYSA9IFBCWFRhcmdl
dERlcGVuZGVuY3k7CiAJCQl0YXJnZXQgPSAwRjQ2ODBBOTE0QkE3RkQ5MDBCRkUyNzIgLyogTExJ
bnQgT2Zmc2V0cyAqLzsKQEAgLTg0MDksNiArODkyNywzOCBAQAogCQkJfTsKIAkJCW5hbWUgPSBQ
cm9kdWN0aW9uOwogCQl9OworCQkwRkVDODVBOTFCREI1Q0YxMDA4MEZGNzQgLyogRGVidWcgKi8g
PSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9u
UmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhj
Y29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0
YjM7CisJCQl9OworCQkJbmFtZSA9IERlYnVnOworCQl9OworCQkwRkVDODVBQTFCREI1Q0YxMDA4
MEZGNzQgLyogUmVsZWFzZSAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwor
CQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0Njcg
LyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJ
CVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJCQluYW1lID0gUmVsZWFzZTsKKwkJfTsK
KwkJMEZFQzg1QUIxQkRCNUNGMTAwODBGRjc0IC8qIFByb2ZpbGluZyAqLyA9IHsKKwkJCWlzYSA9
IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBC
QzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJ
CQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJ
CQluYW1lID0gUHJvZmlsaW5nOworCQl9OworCQkwRkVDODVBQzFCREI1Q0YxMDA4MEZGNzQgLyog
UHJvZHVjdGlvbiAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFz
ZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9v
bEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RV
Q1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJCQluYW1lID0gUHJvZHVjdGlvbjsKKwkJfTsKIAkJ
MEZGOTIyQ0IxNEY0NkIxMzAwNDFBMjRFIC8qIERlYnVnICovID0gewogCQkJaXNhID0gWENCdWls
ZENvbmZpZ3VyYXRpb247CiAJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYy
MTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKQEAgLTg3NjEs
NiArOTMxMSwxNyBAQAogCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOwogCQkJ
ZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEZFQzg1QTgx
QkRCNUNGMTAwODBGRjc0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJ0ZXN0YjMiICovID0geworCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKKwkJ
CWJ1aWxkQ29uZmlndXJhdGlvbnMgPSAoCisJCQkJMEZFQzg1QTkxQkRCNUNGMTAwODBGRjc0IC8q
IERlYnVnICovLAorCQkJCTBGRUM4NUFBMUJEQjVDRjEwMDgwRkY3NCAvKiBSZWxlYXNlICovLAor
CQkJCTBGRUM4NUFCMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9maWxpbmcgKi8sCisJCQkJMEZFQzg1
QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rpb24gKi8sCisJCQkpOworCQkJZGVmYXVsdENv
bmZpZ3VyYXRpb25Jc1Zpc2libGUgPSAwOworCQkJZGVmYXVsdENvbmZpZ3VyYXRpb25OYW1lID0g
UHJvZHVjdGlvbjsKKwkJfTsKIAkJMEZGOTIyQ0ExNEY0NkIxMzAwNDFBMjRFIC8qIEJ1aWxkIGNv
bmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJKU0NMTEludE9mZnNldHNFeHRy
YWN0b3IiICovID0gewogCQkJaXNhID0gWENDb25maWd1cmF0aW9uTGlzdDsKIAkJCWJ1aWxkQ29u
ZmlndXJhdGlvbnMgPSAoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDYgKzI4LDggQEAKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKwogbmFtZXNwYWNlIEpTQyB7CiAKIGNvbnN0IGRvdWJsZSBNYWNy
b0Fzc2VtYmxlcjo6dHdvVG9UaGUzMiA9IChkb3VibGUpMHgxMDAwMDAwMDB1bGw7CkBAIC00Nyw1
ICs0OSw3MCBAQCB2b2lkIE1hY3JvQXNzZW1ibGVyOjpjYWxsUHJvYmUoc3RkOjpmdW5jCiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
QzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE1hY3JvQXNzZW1ibGVy
OjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQpCit7CisgICAgc3dpdGNoIChjb25kKSB7CisgICAg
Y2FzZSBNYWNyb0Fzc2VtYmxlcjo6RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsOgorICAg
ICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZToKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsOgorICAgICAg
ICBvdXQucHJpbnQoIkFib3ZlT3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBN
YWNyb0Fzc2VtYmxlcjo6QmVsb3c6CisgICAgICAgIG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkJlbG93T3JFcXVhbDoKKyAgICAg
ICAgb3V0LnByaW50KCJCZWxvd09yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
TWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJU
aGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVy
VGhhbk9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW5PckVxdWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbjoKKyAgICAg
ICAgb3V0LnByaW50KCJMZXNzVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNy
b0Fzc2VtYmxlcjo6TGVzc1RoYW5PckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFu
T3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBN
YWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmQpCit7CisgICAgc3dpdGNoIChjb25k
KSB7CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6T3ZlcmZsb3c6CisgICAgICAgIG91dC5wcmlu
dCgiT3ZlcmZsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OlNpZ25lZDoKKyAgICAgICAgb3V0LnByaW50KCJTaWduZWQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OlBvc2l0aXZlT3JaZXJvOgorICAgICAgICBvdXQucHJp
bnQoIlBvc2l0aXZlT3JaZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpaZXJvOgorICAgICAgICBvdXQucHJpbnQoIlplcm8iKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm86CisgICAgICAgIG91dC5wcmludCgi
Tm9uWmVybyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxF
KEFTU0VNQkxFUikKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk2
LDggKzE1OTYsMTkgQEAgcHVibGljOgogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNl
IFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mLCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uKTsKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENv
bmRpdGlvbik7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZWxzZSAvLyBFTkFCTEUoQVNTRU1C
TEVSKQogCituYW1lc3BhY2UgSlNDIHsKKwogLy8gSWYgdGhlcmUgaXMgbm8gYXNzZW1ibGVyIGZv
ciB0aGlzIHBsYXRmb3JtLCBhdCBsZWFzdCBhbGxvdyBjb2RlIHRvIG1ha2UgcmVmZXJlbmNlcyB0
bwogLy8gc29tZSBvZiB0aGUgdGhpbmdzIGl0IHdvdWxkIG90aGVyd2lzZSBkZWZpbmUsIGFsYmVp
dCB3aXRob3V0IGdpdmluZyB0aGF0IGNvZGUgYW55IHdheQogLy8gb2YgZG9pbmcgYW55dGhpbmcg
dXNlZnVsLgpAQCAtMTYxMSw2ICsxNjIyLDggQEAgcHVibGljOgogICAgIGVudW0gRlBSZWdpc3Rl
cklEIHsgTm9GUFJlZ2lzdGVyIH07CiB9OwogCit9IC8vIG5hbWVzcGFjZSBKU0MKKwogI2VuZGlm
IC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKICNlbmRpZiAvLyBNYWNyb0Fzc2VtYmxlcl9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0
ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NN
YXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKyMgQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgQWRkcmVzc01hdGNoZXIKKwor
IyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24gQjMgZG9pbmcgYWdncmVzc2l2ZSByZWFzc29jaWF0
aW9uIGFuZCBjYW5vbmNhbGl6YXRpb24gb2YgaW50ZWdlciBhZGRzLgorIyBXZSdsbCBuZXZlciBz
ZWUgQWRkKEFkZCh4LCBjb25zdDEpLCBjb25zdDIpIGJlY2F1c2UgaXQgd291bGQgaGF2ZSBhbHJl
YWR5IGJlZW4gcmVhc3NvY2lhdGVkIGludG8KKyMgQWRkKHgsIGNvbnN0MSArIGNvbnN0MikuIEFs
c28sIHdlIHdpbGwgbmV2ZXIgc2VlIEFkZChjb25zdCwgeCksIGJlY2F1c2Ugd2Ugd291bGQgaGF2
ZSBjYW5vbmljYWxpemVkCisjIGl0IHRvIEFkZCh4LCBjb25zdCkuIFRoYXQgc2FpZCwgaW4gdGhp
cyBjb2RlIHdlIG5ldmVyIG1ha2UgYXNzZXJ0aW9ucyBhYm91dCB0aGVzZSBvcHRpbWl6YXRpb25z
CisjIGhhdmluZyBiZWVuIHBlcmZvcm1lZC4gQWxzbywgc2luY2UgdGhlIExvYWQvU3RvcmUgaW5z
dHJ1Y3Rpb25zIGluIEIzIGhhdmUgYSBidWlsdC1pbiBvZmZzZXQsIHdlCisjIGRvbid0IG5lZWQg
dG8gbWF0Y2ggQWRkKHgsIGNvbnN0KS4gVGhhdCB3b3VsZCBoYXZlIGJlZW4gZm9sZGVkIGludG8g
dGhlIExvYWQvU3RvcmUgaW5zdHJ1Y3Rpb25zCisjIGFscmVhZHkuIFNvLCB0aGUgb25seSBmYW5j
eSBtYXRoaW5nIHRoaXMgY2FuIGRvIGlzIGp1c3QgQmFzZUluZGV4IGZvcm1zLgorCitBZGRTaGlm
dDEgPSBBZGQoU2hsKGluZGV4LCAkbG9nU2NhbGUpLCBiYXNlKQorQWRkU2hpZnQyID0gQWRkKGJh
c2UsIFNobChpbmRleCwgJGxvZ1NjYWxlKSkKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorCitE
aXJlY3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJn
dW1lbnRSZWdWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQXJndW1lbnRSZWdWYWx1ZTo6
fkFyZ3VtZW50UmVnVmFsdWUoKQoreworfQorCit2b2lkIEFyZ3VtZW50UmVnVmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fcmVnKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNBcmd1bWVudFJlZ1ZhbHVlX2gK
KyNkZWZpbmUgQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSAiUmVnLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBBcmd1bWVudFJlZ1ZhbHVlIDogcHVibGljIFZhbHVlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJu
IG9wY29kZSA9PSBBcmd1bWVudFJlZzsgfQorICAgIAorICAgIH5Bcmd1bWVudFJlZ1ZhbHVlKCk7
CisKKyAgICBSZWcgYXJndW1lbnRSZWcoKSBjb25zdCB7IHJldHVybiBtX3JlZzsgfQorCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBBcmd1bWVudFJl
Z1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6
IFZhbHVlKGluZGV4LCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkgPyBwb2ludGVyVHlwZSgpIDog
RG91YmxlLCBvcmlnaW4pCisgICAgICAgICwgbV9yZWcocmVnKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKHJlZy5pc1NldCgpKTsKKyAgICB9CisKKyAgICBSZWcgbV9yZWc7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY29uc3QgY2hhciogY29uc3QgQmFzaWNC
bG9jazo6ZHVtcFByZWZpeCA9ICIjIjsKKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25l
ZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBt
X2ZyZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK0Jhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKCkK
K3sKK30KKwordm9pZCBCYXNpY0Jsb2NrOjphcHBlbmQoVmFsdWUqIHZhbHVlKQoreworICAgIG1f
dmFsdWVzLmFwcGVuZCh2YWx1ZSk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6YWRkUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIEIzOjphZGRQcmVkZWNlc3Nvcih0
aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IoQmFz
aWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIEIzOjpyZW1vdmVQcmVkZWNlc3Nvcih0aGlz
LCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKEJhc2lj
QmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIHJldHVybiBCMzo6cmVwbGFjZVBy
ZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5k
ZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1f
ZnJlcXVlbmN5LCAiXG4iKTsKKyAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICp0aGlzKQorICAgICAg
ICBvdXQucHJpbnQoIiAgICAiLCBCMzo6ZGVlcER1bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzQmFzaWNCbG9ja19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNs
dWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CitjbGFz
cyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFz
aWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVu
dGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0Y2hlcyBDb250cm9sVmFsdWU6
OlN1Y2Nlc3Nvckxpc3QKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4
OworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0
dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisK
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAg
IFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsg
fQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07
IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9
CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBj
b25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAg
VmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3
KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3Jz
KCkgY29uc3Q7CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpIGNvbnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KTsKKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisgICAg
U3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpOworCisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
QmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JC
bG9jayh1bnNpZ25lZCBpbmRleCk7CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2Nr
LCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKTsKKyAgICBTdWNjZXNzb3JDb2xsZWN0
aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2Nr
cygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1
cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9w
cmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNl
c3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorICAgIFByZWRlY2Vzc29y
TGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKworICAgIGJv
b2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVtb3ZlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sq
IGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAgIGRvdWJsZSBmcmVxdWVuY3koKSBjb25zdCB7
IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAgLy8gSW5zdGFudGlhdGUgdmlh
IFByb2NlZHVyZS4KKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVl
bmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWVMaXN0IG1fdmFsdWVzOwor
ICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBkb3VibGUgbV9mcmVxdWVu
Y3k7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBC
YXNpY0Jsb2NrRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2Nr
KGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+
ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVs
bD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQmFzaWNCbG9jayogbV9ibG9jazsK
K307CisKK2lubGluZSBEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoY29uc3QgQmFzaWNCbG9j
ayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzQmFzaWNCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzQmFzaWNCbG9ja0lubGluZXNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tJbmxp
bmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIK
KyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5l
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIEJhc2ljQmxv
Y2s6OmFwcGVuZE5ldyhQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKK3sKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHByb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihh
cmd1bWVudHMuLi4pOworICAgIGFwcGVuZChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK2lubGluZSB1bnNpZ25lZCBCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPm51bVN1Y2Nlc3NvcnMoKTsK
K30KKworaW5saW5lIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgQmFzaWNCbG9jazo6c3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xW
YWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworaW5saW5lIEZyZXF1ZW50ZWRCbG9jayYg
QmFzaWNCbG9jazo6c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBsYXN0
KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29yKGluZGV4KTsKK30KKworaW5saW5lIGNv
bnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKSBj
b25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29y
cygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6
c3VjY2Vzc29ycygpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5z
dWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2NrKiBCYXNpY0Jsb2NrOjpzdWNjZXNz
b3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3VjY2Vzc29yKGlu
ZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jayomIEJhc2ljQmxvY2s6OnN1Y2Nl
c3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KQoreworICAgIHJldHVybiBzdWNjZXNzb3IoaW5kZXgp
LmJsb2NrKCk7Cit9CisKK2lubGluZSBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIEJh
c2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpCit7
CisgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlz
dD4oc3VjY2Vzc29ycygpKTsKK30KKworaW5saW5lIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3Qg
QmFzaWNCbG9jaywgY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gQmFzaWNCbG9jazo6
c3VjY2Vzc29yQmxvY2tzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlv
bjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PihzdWNjZXNzb3JzKCkpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzQmFzaWNCbG9ja1V0aWxzX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2Nr
VXRpbHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIK
KyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBCYXNpY0Jsb2NrPgorYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAgYXV0byYgcHJlZGVjZXNzb3JzID0gYmxvY2st
PnByZWRlY2Vzc29ycygpOworCisgICAgaWYgKHByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNl
c3NvcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHByZWRlY2Vzc29ycy5hcHBlbmQo
cHJlZGVjZXNzb3IpOworICAgIHJldHVybiB0cnVlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
YXNpY0Jsb2NrPgorYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaywgQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IpCit7CisgICAgYXV0byYgcHJlZGVjZXNzb3JzID0gYmxvY2st
PnByZWRlY2Vzc29ycygpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3Nv
cnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKHByZWRlY2Vzc29yc1tpXSA9PSBwcmVkZWNl
c3NvcikgeworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ktLV0gPSBwcmVkZWNlc3NvcnMubGFz
dCgpOworICAgICAgICAgICAgcHJlZGVjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAg
IEFTU0VSVCghcHJlZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vzc29yKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBibG9jaywgQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7Cisg
ICAgYXV0byYgcHJlZGVjZXNzb3JzID0gYmxvY2stPnByZWRlY2Vzc29ycygpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBwcmVkZWNlc3NvcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKHByZWRlY2Vzc29yc1tpXSA9PSBmcm9tKSB7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnNb
aV0gPSB0bzsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKworLy8gVGhpcyByZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBhbmQg
cmVtb3ZlcyBibG9ja3MgdGhhdCBhcmVuJ3QgcmVhY2hhYmxlLgordGVtcGxhdGU8dHlwZW5hbWUg
QmFzaWNCbG9jaz4KK3ZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxCYXNpY0Jsb2NrPj4mIGJsb2NrcykKK3sKKyAgICAvLyBDbGVhciBhbGwgcHJlZGVjZXNzb3Ig
bGlzdHMgZmlyc3QuCisgICAgZm9yIChhdXRvJiBibG9jayA6IGJsb2NrcykKKyAgICAgICAgYmxv
Y2stPnByZWRlY2Vzc29ycygpLnJlc2l6ZSgwKTsKKworICAgIEdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gd29ya2xpc3Q7CisgICAgd29ya2xpc3Qu
cHVzaChibG9ja3NbMF0uZ2V0KCkpOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdv
cmtsaXN0LnBvcCgpKSB7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxv
Y2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICBpZiAod29ya2xpc3QucHVzaChz
dWNjZXNzb3IpKQorICAgICAgICAgICAgICAgIHN1Y2Nlc3Nvci0+cHJlZGVjZXNzb3JzKCkuYXBw
ZW5kKGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7
IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJsb2Nrc1tpXS0+cHJlZGVj
ZXNzb3JzKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgYmxvY2tzW2ldID0gbnVsbHB0cjsKKyAg
ICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja1V0aWxzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNCbG9ja1dvcmtsaXN0X2gKKyNkZWZpbmUgQjNCbG9ja1dvcmtsaXN0X2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNs
dWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+Cisj
aW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Js
b2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2NrV29ya2xpc3Q7CisKKy8vIFdoZW4geW91
IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ugc2hvdWxkIHJlYWQgaXQgYXMgImJsb2NrIHdpdGggYW4g
aW50Ii4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEJsb2NrV2l0aCA9IEdyYXBoTm9kZVdp
dGg8QmFzaWNCbG9jayosIFQ+OworCisvLyBFeHRlbmRlZCBibG9jayB3b3JrbGlzdCBpcyB1c2Vm
dWwgZm9yIGVucXVldWVpbmcgc29tZSBtZXRhLWRhdGEgYWxvbmcgd2l0aCB0aGUgYmxvY2suIEl0
IGFsc28KKy8vIHBlcm1pdHMgZm9yY2libHkgZW5xdWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUg
YmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJdCdzIHVzZWZ1bCBmb3IKKy8vIHRoaW5ncyBs
aWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwgaW4gd2hpY2ggY2FzZSBUICh0aGUgYXV4aWxp
YXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQorLy8gc3VjY2Vzc29yIGluZGV4LgordGVtcGxhdGU8
dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5v
ZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+OworCit0eXBl
ZGVmIEdyYXBoVmlzaXRPcmRlciBWaXNpdE9yZGVyOworCit0eXBlZGVmIEdyYXBoTm9kZVdpdGhP
cmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7CisKK3R5cGVkZWYgUG9zdE9yZGVyR3Jh
cGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBQb3N0T3Jk
ZXJCbG9ja1dvcmtsaXN0OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jsb2NrV29ya2xpc3RfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrU3Bl
Y2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisKK3Vuc2ln
bmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQoreworICAgIHN3aXRjaCAoaW5zdC5vcmlnaW4tPm9w
Y29kZSgpKSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNh
c2UgQ2hlY2tNdWw6CisgICAgICAgIC8vIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgICAgIHJldHVy
biAzOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIHJldHVybiAxOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK0NoZWNrU3BlY2lhbDo6Q2hl
Y2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5zaWduZWQgbnVtQXJncykKKyAgICA6IG1f
Y2hlY2tPcGNvZGUob3Bjb2RlKQorICAgICwgbV9udW1DaGVja0FyZ3MobnVtQXJncykKK3sKK30K
KworQ2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKCkKK3sKK30KKworSW5zdCBDaGVja1NwZWNp
YWw6OmhpZGRlbkJyYW5jaChjb25zdCBJbnN0JiBpbnN0KSBjb25zdAoreworICAgIEluc3QgaGlk
ZGVuQnJhbmNoKG1fY2hlY2tPcGNvZGUsIGluc3Qub3JpZ2luKTsKKyAgICBoaWRkZW5CcmFuY2gu
YXJncy5yZXNpemUobV9udW1DaGVja0FyZ3MpOworICAgIGZvciAodW5zaWduZWQgaSA9IG1fbnVt
Q2hlY2tBcmdzOyBpLS07KQorICAgICAgICBoaWRkZW5CcmFuY2guYXJnc1tpXSA9IGluc3QuYXJn
c1tpICsgMV07CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaDsKK30KKwordm9pZCBDaGVja1NwZWNp
YWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hB
cmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGhpZGRlbkJyYW5jaChpbnN0KS5mb3JFYWNo
QXJnKGNhbGxiYWNrKTsKKyAgICBmb3JFYWNoQXJnSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVt
Q2hlY2tBcmdzICsgMSwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29sIENoZWNrU3BlY2lhbDo6
aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuaXNW
YWxpZEZvcm0oKQorICAgICAgICAmJiBpc1ZhbGlkSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVt
Q2hlY2tBcmdzICsgMSwgaW5zdCk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjphZG1pdHNTdGFj
ayhJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBpZiAoYXJnSW5kZXggPj0g
MSAmJiBhcmdJbmRleCA8IDEgKyBtX251bUNoZWNrQXJncykKKyAgICAgICAgcmV0dXJuIGhpZGRl
bkJyYW5jaChpbnN0KS5hZG1pdHNTdGFjayhhcmdJbmRleCAtIDEpOworICAgIHJldHVybiBhZG1p
dHNTdGFja0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGFy
Z0luZGV4KTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENoZWNrU3BlY2lhbDo6Z2VuZXJhdGUo
SW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0
KQoreworICAgIENDYWxsSGVscGVyczo6SnVtcCBmYWlsID0gaGlkZGVuQnJhbmNoKGluc3QpLmdl
bmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgQVNTRVJUKGZhaWwuaXNTZXQoKSk7CisKKyAgICBW
YWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsK
KyAgICBpZiAoaXNDaGVja01hdGgodmFsdWUtPm9wY29kZSgpKSkgeworICAgICAgICBpZiAodmFs
dWUtPm9wY29kZSgpID09IENoZWNrTXVsKQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVS
ZXAoKSk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja1N1YiAmJiB2
YWx1ZS0+Y2hpbGQoMCktPmlzSW50KDApKQorICAgICAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVS
ZXA6OmNvbnN0YW50KDApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwcy5hcHBlbmQo
cmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1szXSkpOworICAgICAgICByZXBzLmFw
cGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzJdKSk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVjayk7CisgICAgICAgIHJl
cHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgxKSk7CisgICAgfQorCisgICAgYXBwZW5kUmVw
c0ltcGwoY29udGV4dCwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCByZXBzKTsKKyAgICAKKyAg
ICBjb250ZXh0LmxhdGVQYXRocy5hcHBlbmQoCisgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8R2Vu
ZXJhdGlvbkNvbnRleHQ6OkxhdGVQYXRoRnVuY3Rpb24+KAorICAgICAgICAgICAgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKSB7CisgICAgICAgICAgICAgICAgZmFp
bC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0YWNrbWFw
KiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgICAgICAgICAgICAgIEFTU0VSVChz
dGFja21hcCk7CisKKyAgICAgICAgICAgICAgICBTdGFja21hcDo6R2VuZXJhdGlvblBhcmFtcyBw
YXJhbXM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgICAgICAg
ICAgICAgcGFyYW1zLnN0YWNrbWFwID0gc3RhY2ttYXA7CisgICAgICAgICAgICAgICAgcGFyYW1z
LnJlcHMgPSByZXBzOworICAgICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gc3Rh
Y2ttYXAtPm1fdXNlZFJlZ2lzdGVyczsKKworICAgICAgICAgICAgICAgIHN0YWNrbWFwLT5tX2dl
bmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0pKTsKKworICAgIHJldHVy
biBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsgLy8gQXMgZmFyIGFzIEFpciB0aGlua3MsIHdlIGFyZSBu
b3QgYSB0ZXJtaW5hbC4KK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJbXBsKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2hlY2tPcGNvZGUsICIoIiwgbV9u
dW1DaGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpkZWVwRHVtcEltcGwo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkIzOjpDaGVja1ZhbHVl
IGxvd2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwgIiB3aXRoICIsIG1fbnVtQ2hlY2tBcmdzLCAi
IGFyZ3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lh
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lh
bC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVj
aWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tTcGVjaWFsX2gKKyNk
ZWZpbmUgQjNDaGVja1NwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB3YW50IHRvIGxvd2VyIENoZWNrIGluc3Ry
dWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2FudCB0byByb3V0ZSB0aGF0IGJyYW5j
aCB0byBvdXIKKy8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVhZCBvZiBkb2luZyBhbnl0aGluZyBl
bHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFsIHdpbGwgcmVtZW1iZXIKKy8vIHdo
aWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBudW1iZXIg
b2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQKKy8vIHdpbGwgY3JlYXRlIGFuIElu
c3Qgd2l0aCB0aGF0IG9wY29kZSBwbHVzIHRoZSBhcHByb3ByaWF0ZSBhcmdzIGZyb20gdGhlIG93
bmluZyBJbnN0IHdoZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkgb2YgdGhlIGNhbGxiYWNrcy4KKy8v
CisvLyBOb3RlIHRoYXQgZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsIHdlIGV4
cGVjdCB0aGF0IHRoZSBCMyBhcmd1bWVudHMgYXJlIHRoZSByZXZlcnNlCisvLyBvZiB0aGUgQWly
IGFyZ3VtZW50cyAoQWRkKGEsIGIpID0+IEFkZDMyIGIsIGEpLiBFeGNlcHQ6CisvLyAtIENoZWNr
U3ViKDAsIHgpLCB3aGljaCB0dXJucyBpbnRvIEJyYW5jaE5lZzMyIHguCisvLyAtIENoZWNrTXVs
KGEsIGIpLCB3aGljaCB0dXJucyBpbnRvIE11bDMyIGIsIGEgYnV0IHdlIHBhc3MgQW55IGZvciBh
J3MgVmFsdWVSZXAuCisKK2NsYXNzIENoZWNrU3BlY2lhbCA6IHB1YmxpYyBTdGFja21hcFNwZWNp
YWwgeworcHVibGljOgorICAgIENoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSwgdW5zaWduZWQgbnVt
QXJncyk7CisgICAgfkNoZWNrU3BlY2lhbCgpOworCisgICAgLy8gQ29uc3RydWN0cyBhbmQgcmV0
dXJucyB0aGUgSW5zdCByZXByZXNlbnRpbmcgdGhlIGJyYW5jaCB0aGF0IHRoaXMgd2lsbCB1c2Uu
CisgICAgQWlyOjpJbnN0IGhpZGRlbkJyYW5jaChjb25zdCBBaXI6Okluc3QmKSBjb25zdDsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRM
YW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJ
bnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisgICAgLy8gTk9URTogdGhlIGdl
bmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4gYnJhbmNoIGFuZCB0aGVuIHJl
Z2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRlcyB0aGUgc3RhY2ttYXAuIFN1
cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoQWlyOjpJ
bnN0JiwgQ0NhbGxIZWxwZXJzJiwgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOwor
CisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgQWlyOjpPcGNvZGUgbV9jaGVja09wY29kZTsKKyAgICB1bnNpZ25lZCBtX251bUNoZWNr
QXJnczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDaGVja1Zh
bHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3Rh
Y2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrVmFsdWVfaAorI2RlZmluZSBCM0No
ZWNrVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2ttYXAu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBDaGVja1ZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBjYXNlIENoZWNrU3ViOgor
ICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBjYXNlIENoZWNrOgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tWYWx1ZSgpOworCisgICAgU3RhY2ttYXAg
c3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNr
TXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIDogVmFsdWUoaW5k
ZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4sIGxlZnQsIHJpZ2h0KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAgICAgICBBU1NFUlQobGVmdC0+dHlwZSgp
ID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrQWRkIHx8
IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0gQ2hlY2tNdWwpOworICAgIH0KKworICAg
IC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCisgICAg
eworICAgICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNrKTsKKyAgICB9Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0NoZWNrVmFsdWVfaAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9u
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDb21tb24uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJERkdDb21tb24u
aCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorI2luY2x1ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wgc2hvdWxkRHVtcElSKCkKK3sKKyAgICBy
ZXR1cm4gRlRMOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFibGVkKCkgfHwgRlRMOjpzaG91bGREdW1w
RGlzYXNzZW1ibHkoKSB8fCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNo
b3VsZER1bXBJUkF0RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6ZHVtcEdyYXBo
QXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCkKK3sKKyAgICByZXR1
cm4gREZHOjp2YWxpZGF0aW9uRW5hYmxlZCgpIHx8IHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFz
ZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpCit7CisgICAgcmV0
dXJuIE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3Vs
ZFNhdmVJUkJlZm9yZVBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmVyYm9zZVZhbGlk
YXRpb25GYWlsdXJlKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
bW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb21tb25faAorI2RlZmluZSBCM0NvbW1vbl9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworaW5saW5lIGJvb2wgaXM2NEJpdCgpIHsgcmV0dXJuIHNpemVvZih2b2lkKikgPT0gODsgfQor
aW5saW5lIGJvb2wgaXMzMkJpdCgpIHsgcmV0dXJuICFpczY0Qml0KCk7IH0KKworYm9vbCBzaG91
bGREdW1wSVIoKTsKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKTsKK2Jvb2wgc2hvdWxk
VmFsaWRhdGVJUigpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKK2Jvb2wg
c2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb21tb25faAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29t
bXV0YXRpdml0eS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Qcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBDb21tdXRhdGl2aXR5IGNv
bW11dGF0aXZpdHkpCit7CisgICAgc3dpdGNoIChjb21tdXRhdGl2aXR5KSB7CisgICAgY2FzZSBD
b21tdXRhdGl2ZToKKyAgICAgICAgb3V0LnByaW50KCJDb21tdXRhdGl2ZSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBOb3RDb21tdXRhdGl2ZToKKyAgICAgICAgb3V0LnByaW50KCJOb3RD
b21tdXRhdGl2ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZp
dHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2
aXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRh
dGl2aXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29tbXV0YXRpdml0eV9o
CisjZGVmaW5lIEIzQ29tbXV0YXRpdml0eV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBDb21tdXRhdGl2aXR5IHsKKyAgICBD
b21tdXRhdGl2ZSwKKyAgICBOb3RDb21tdXRhdGl2ZQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkNvbW11dGF0aXZpdHkpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0NvbW11dGF0aXZpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21w
YXJpc29uTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUg
bWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisKK21hdGNoZXIgQ29tcGFyaXNvbk1hdGNoZXIKKworVGVzdExvYWROb3RaZXJvMSA9IEFu
ZChMb2FkKGFkZHJlc3MpLCByaWdodCkKK1Rlc3RMb2FkTm90WmVybzIgPSBBbmQobGVmdCwgTG9h
ZChhZGRyZXNzKSkKK1Rlc3ROb3RaZXJvID0gQW5kKGxlZnQsIHJpZ2h0KQorCitUZXN0TG9hZFpl
cm8xID0gRXF1YWwoQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KSwgJDApCitUZXN0TG9hZFplcm8y
ID0gRXF1YWwoQW5kKGxlZnQsIExvYWQoYWRkcmVzcykpLCAkMCkKK1Rlc3RaZXJvID0gRXF1YWwo
QW5kKGxlZnQsIHJpZ2h0KSwgJDApCisKK0xvYWRFcXVhbDEgPSBFcXVhbChMb2FkKGFkZHJlc3Mp
LCByaWdodCkKK0xvYWRFcXVhbDIgPSBFcXVhbChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorTm90ID0g
RXF1YWwodmFsdWUsICQwKQorRXF1YWwgPSBFcXVhbChsZWZ0LCByaWdodCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1
ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK0NvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3Qz
MlZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMy
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDMyVmFsdWVfaAor
I2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
SlNfRVhQT1JUX1BSSVZBVEUgQ29uc3QzMlZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9
PSBDb25zdDMyOyB9CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbnN0MzJWYWx1ZSgp
OworICAgIAorICAgIGludDMyX3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisK
K3Byb3RlY3RlZDoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNZXRhKFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2Nl
ZHVyZTsKKworICAgIENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwg
aW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3QzMiwgSW50MzIsIG9y
aWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAg
aW50MzJfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25zdDMyVmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2
NFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBD
b25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDY0VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0NjRWYWx1
ZV9oCisjZGVmaW5lIEIzQ29uc3Q2NFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7IH0K
KyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0LCBJ
bnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAg
ICAKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0NjRWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RE
b3VibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3REb3VibGVWYWx1ZTo6fkNv
bnN0RG91YmxlVmFsdWUoKQoreworfQorCit2b2lkIENvbnN0RG91YmxlVmFsdWU6OmR1bXBNZXRh
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50ZigiJWxlIiwgbV92YWx1
ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3REb3VibGVW
YWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQ29uc3REb3VibGVWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0g
Q29uc3REb3VibGU7IH0KKyAgICAKKyAgICB+Q29uc3REb3VibGVWYWx1ZSgpOworICAgIAorICAg
IGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3REb3VibGVWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBDb25zdERvdWJsZSwgRG91YmxlLCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1
ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBtX3ZhbHVlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9M
aXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZh
bHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRh
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGxpc3REdW1wKG1fc3Vj
Y2Vzc29ycykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb250cm9sVmFsdWVfaAor
I2RlZmluZSBCM0NvbnRyb2xWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCitjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBDb250cm9sVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAg
IHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBCcmFuY2g6Cisg
ICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIE9vcHM6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBTd2l0Y2g6IAorICAgICAgICAgICAgLy8gVGhpcyBpcyBo
ZXJlIGJlY2F1c2UgU3dpdGNoVmFsdWUgaXMgYSBzdWJjbGFzcyBvZiBDb250cm9sVmFsdWUsIHNv
IHdlIHdhbnQKKyAgICAgICAgICAgIC8vIHN3aXRjaFZhbHVlLT5hczxDb250cm9sVmFsdWU+KCkg
dG8gcmV0dXJuIG5vbi1udWxsLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB+Q29udHJvbFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBudW1T
dWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIGNv
bnN0IEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBj
b25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNz
b3JzOyB9CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vz
c29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0
YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1
YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRy
b2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBv
cGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAv
LyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3Vj
Y2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1
bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQp
CisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAg
Ly8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRhcmdl
dCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgewor
ICAgICAgICBBU1NFUlQob3Bjb2RlID09IEp1bXApOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBw
ZW5kKHRhcmdldCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEJyYW5jaC4KKyAgICBD
b250cm9sVmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlLAorICAgICAgICBjb25zdCBGcmVxdWVudGVkQmxv
Y2smIHllcywgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBubykKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOwor
ICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0NvbnRyb2xWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1
ZW5jeUNsYXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNG
cmVxdWVuY3lDbGFzcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsK
KwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3kpCit7CisgICAgc3dpdGNoIChmcmVx
dWVuY3kpIHsKKyAgICBjYXNlIEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWw6CisgICAgICAgIG91dC5w
cmludCgiTm9ybWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZyZXF1ZW5jeUNsYXNz
OjpSYXJlOgorICAgICAgICBvdXQucHJpbnQoIlJhcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzRnJlcXVlbmN5Q2xhc3NfaAorI2RlZmluZSBCM0ZyZXF1ZW5jeUNsYXNzX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitlbnVtIGNsYXNzIEZyZXF1ZW5jeUNsYXNzIDogdWludDhfdCB7CisgICAgLy8gV2UgZG9uJ3Qg
aGF2ZSBhbnkgaHlwb3RoZXNpcyBhYm91dCB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY29udHJvbCBm
bG93IGNvbnN0cnVjdC4gVGhpcyBpcworICAgIC8vIHRoZSBjb21tb24gY2FzZS4gV2UgY2FuIHN0
aWxsIHVzZSBiYXNpYyBibG9jayBmcmVxdWVuY3kgaW4gdGhpcyBjYXNlLgorICAgIE5vcm1hbCwK
KworICAgIC8vIFdlIGV4cGVjdCB0aGF0IHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVjdCB3aWxs
IGJlIHJlYWNoZWQgc3VwZXIgcmFyZWx5LiBJdCdzIHZhbGlkIHRvCisgICAgLy8gcGVyZm9ybSBv
cHRpbWl6YXRpb25zIHRoYXQgcHVuaXNoIFJhcmUgY29kZS4gTm90ZSB0aGF0IHRoZXJlIHdpbGwg
YmUgc2l0dWF0aW9ucyB3aGVyZSB5b3UKKyAgICAvLyBoYXZlIHRvIHNvbWVob3cgY29uc3RydWN0
IGEgbmV3IGZyZXF1ZW5jeSBjbGFzcyBmcm9tIGEgbWVyZ2luZyBvZiBtdWx0aXBsZSBjbGFzc2Vz
LiBXaGVuCisgICAgLy8gdGhpcyBoYXBwZW5zLCBuZXZlciBjaG9vc2UgUmFyZTsgYWx3YXlzIGdv
IHdpdGggTm9ybWFsLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlCisgICAgLy8gcmVhbGx5
IGRvIHB1bmlzaCBSYXJlIGNvZGUgdmVyeSBiYWRseS4KKyAgICBSYXJlCit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFt
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpGcmVxdWVuY3lD
bGFzcyk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzRnJlcXVlbmN5Q2xhc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0ZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEIzRnJlcXVlbnRlZEJsb2Nr
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVk
QmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2lj
QmxvY2s7CisKK3R5cGVkZWYgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVx
dWVudGVkQmxvY2s7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRl
LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgor
I2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5j
bHVkZSAiQjNWYWxpZGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7
CisgICAgQWlyOjpDb2RlIGNvZGU7CisgICAgZ2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIGNvZGUp
OworICAgIEFpcjo6Z2VuZXJhdGUoY29kZSwgaml0KTsKK30KKwordm9pZCBnZW5lcmF0ZVRvQWly
KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBaXI6OkNvZGUmIGNvZGUpCit7CisgICAgaWYgKHNob3Vs
ZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlLCAiaW5pdGlhbCIpOwor
CisgICAgaWYgKHNob3VsZER1bXBJUigpKSB7CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgQjM6
XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIo
KSkKKyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlLCAiZmluYWwiKTsKKyAgICAKKyAgICBpZiAo
c2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQjMgYmVmb3JlIGdlbmVyYXRpb246
XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIGxvd2VyVG9B
aXIocHJvY2VkdXJlLCBjb2RlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNHZW5lcmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyYXRlX2gKKyNkZWZp
bmUgQjNHZW5lcmF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1
cmU7CituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIHRha2VzIGEgQjM6
OlByb2NlZHVyZSwgb3B0aW1pemVzIGl0IGluLXBsYWNlLCBhbmQgZ2VuZXJhdGVzIGl0IHRvIG1h
Y2hpbmUgY29kZSBieSBmaXJzdAorLy8gaW50ZXJuYWxseSBjb252ZXJ0aW5nIHRvIGFuIEFpcjo6
Q29kZSBhbmQgdGhlbiBnZW5lcmF0aW5nIHRoYXQuCitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdl
bmVyYXRlKFByb2NlZHVyZSYsIENDYWxsSGVscGVycyYpOworCisvLyBUaGlzIHRha2VzIGEgQjM6
OlByb2NlZHVyZSwgb3B0aW1pemVzIGl0IGluLXBsYWNlLCBhbmQgbG93ZXJzIGl0IHRvIEFpci4g
WW91IGNhbiB0aGVuIGdlbmVyYXRlCisvLyB0aGUgQWlyIHRvIG1hY2hpbmUgY29kZSB1c2luZyBB
aXI6OmdlbmVyYXRlKCkuIE5vdGUgdGhhdCBhbiBBaXI6OkNvZGUgd2lsbCBoYXZlIHBvaW50ZXJz
IGludG8gdGhlCisvLyBCMzo6UHJvY2VkdXJlLCBzbyB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdCB0
aGUgQjM6OlByb2NlZHVyZSBvdXRsaXZlcyB0aGUgQWlyOjpDb2RlLgordm9pZCBnZW5lcmF0ZVRv
QWlyKFByb2NlZHVyZSYsIEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0dlbmVyYXRlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVu
dGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dl
bmVyaWNGcmVxdWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQjNHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgi
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCisvLyBBIGZyZXF1ZW50ZWQgYmxvY2sgaXMgYSB0dXBsZSBvZiBCYXNpY0Jsb2Nr
KiBhbmQgRnJlcXVlbmN5Q2xhc3MuIEl0J3MgdXN1YWxseSB1c2VkIGFzIGEKKy8vIHN1Y2Nlc3Nv
ciBlZGdlLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorY2xhc3MgR2VuZXJpY0Zy
ZXF1ZW50ZWRCbG9jayB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jaygKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBudWxscHRyLCBGcmVxdWVuY3lDbGFz
cyBmcmVxdWVuY3kgPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAgICAgICA6IG1fYmxvY2so
YmxvY2spCisgICAgICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jayA9PSBvdGhlci5tX2Jsb2NrCisg
ICAgICAgICAgICAmJiBtX2ZyZXF1ZW5jeSA9PSBvdGhlci5tX2ZyZXF1ZW5jeTsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gKnRoaXMgIT0gR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jaygpOworICAgIH0KKworICAgIEJhc2lj
QmxvY2sqIGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIEJhc2ljQmxvY2sq
JiBibG9jaygpIHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICBGcmVxdWVuY3lDbGFzcyBmcmVxdWVu
Y3koKSBjb25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZnJlcXVlbmN5KCkgIT0gRnJl
cXVlbmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgICAgIG91dC5wcmludChmcmVxdWVuY3koKSwg
IjoiKTsKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKG1fYmxvY2spKTsKKyAgICB9CisK
K3ByaXZhdGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBGcmVxdWVuY3lDbGFzcyBt
X2ZyZXF1ZW5jeTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzSW5kZXhNYXBfaAorI2RlZmluZSBCM0luZGV4TWFwX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgbWFwIGZvciBrZXlzIHRoYXQgaGF2ZSBh
biBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25s
eQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBv
ZiB0aGVzZSBtYXBzLCBzaW5jZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeQorLy8gc3BhcnNlIGluZGlj
ZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1ZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtl
eSwgdHlwZW5hbWUgVmFsdWU+CitjbGFzcyBJbmRleE1hcCB7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgSW5kZXhNYXAoc2l6ZV90IHNpemUgPSAwKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IucmVz
aXplKHNpemUpOworICAgIH0KKworICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKQorICAgIHsK
KyAgICAgICAgbV92ZWN0b3IucmVzaXplKHNpemUpOworICAgIH0KKworICAgIFZhbHVlJiBvcGVy
YXRvcltdKEtleSoga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5k
ZXgoKV07CisgICAgfQorICAgIAorICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07Cisg
ICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNJbmRleE1hcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJ
bmRleFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4
U2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5l
IEIzSW5kZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8v
IFRoaXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBl
ciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3Ig
VmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2Ug
VmFsdWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBs
b3Qgb2YgVmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91
IGRvIEluZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAg
ICB7CisgICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gIW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlu
cyhUKiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkp
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNs
YXNzIEl0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxl
Y3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAg
OiBtX2NvbGxlY3Rpb24oY29sbGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVj
dGlvbihudWxscHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpdGVyYXRvcihjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpT
ZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxl
Y3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9p
dGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKyso
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAg
ICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0
IENvbGxlY3Rpb25UeXBlKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNl
dEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3Nl
dC5iZWdpbigpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgY29uc3QgQ29sbGVjdGlvblR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5k
ZXhTZXQmIG1fc2V0OworICAgIH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86
CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3Ig
dmFsdWVzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMo
KSk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8
Q29sbGVjdGlvblR5cGU+IHZhbHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29s
bGVjdGlvbik7CisgICAgfQorCisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3Qg
eyByZXR1cm4gbV9zZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAorICAgIHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVf
dCBpbmRleCA6IGluZGljZXMoKS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29t
bWEsIFQ6OmR1bXBQcmVmaXgsIGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVj
dG9yIG1fc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBC
M0luZGV4U2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fp
ci5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRv
QWlyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNMb3dlclRvQWlyLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNBZGRy
ZXNzTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRl
ICJCM0NvbW11dGF0aXZpdHkuaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAi
QjNJbmRleFNldC5oIgorI2luY2x1ZGUgIkIzTG93ZXJpbmdNYXRjaGVyLmgiCisjaW5jbHVkZSAi
QjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIz
UHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
SW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsKKwor
Y2xhc3MgTG93ZXJUb0FpciB7CitwdWJsaWM6CisgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUmIHBy
b2NlZHVyZSwgQ29kZSYgY29kZSkKKyAgICAgICAgOiB2YWx1ZVRvVG1wKHByb2NlZHVyZS52YWx1
ZXMoKS5zaXplKCkpCisgICAgICAgICwgYmxvY2tUb0Jsb2NrKHByb2NlZHVyZS5zaXplKCkpCisg
ICAgICAgICwgdXNlQ291bnRzKHByb2NlZHVyZSkKKyAgICAgICAgLCBhZGRyZXNzU2VsZWN0b3Io
KnRoaXMpCisgICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBjb2RlKGNv
ZGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAo
QjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlKQorICAgICAgICAgICAgYmxvY2tUb0Js
b2NrW2Jsb2NrXSA9IGNvZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1ZW5jeSgpKTsKKworICAgICAg
ICAvLyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEg
Z29vZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKKyAgICAgICAgLy8gaG9pc3RlZCBhZGRyZXNz
IGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3AuCisg
ICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlLmJsb2Nrc0luUHJl
T3JkZXIoKSkgeworICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KKyAgICAgICAgICAg
IGluc3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2VzcyBi
bG9ja3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdz
IHdoYXQgYWxsb3dzIHVzCisgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3Rp
dmVseS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOworICAgICAg
ICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBy
dW5Mb3dlcmluZ01hdGNoZXIoY3VycmVudFZhbHVlLCAqdGhpcyk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4gaW5zdHMgY29udGFp
bnMgdGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAgICAgICAgICAvLyBp
dCBpbiByZXZlcnNlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5zdHMuc2l6ZSgp
OyBpLS07KSB7CisgICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHNbaV0pCisg
ICAgICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVuZEluc3QoV1RGOjpt
b3ZlKGluc3QpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRo
YXQgdGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCisgICAgICAgICAgICBBU1NF
UlQoYmxvY2stPnN1Y2Nlc3NvcnMoKS5zaXplKCkgPD0gMik7CisgICAgICAgICAgICBmb3IgKEIz
OjpCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAg
ICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZChibG9j
a1RvQmxvY2tbc3VjY2Vzc29yXSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBUbXAgdG1wKFZh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1wID0gdmFsdWVUb1RtcFt2YWx1ZV07
CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1wID0gY29kZS5uZXdUbXAoaXNJbnQo
dmFsdWUtPnR5cGUoKSkgPyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgICAgIHJldHVybiB0bXA7
CisgICAgfQorCisgICAgLy8gVGhpcyBnaXZlcyB5b3UgdGhlIGFkZHJlc3Mgb2YgdGhlIGdpdmVu
IExvYWQgb3IgU3RvcmUuIElmIGl0J3Mgbm90IGEgTG9hZCBvciBTdG9yZSwgdGhlbgorICAgIC8v
IGl0IHJldHVybnMgQXJnKCkuCisgICAgQXJnIGFkZHIoVmFsdWUqIG1lbW9yeVZhbHVlKQorICAg
IHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIHZhbHVlID0gbWVtb3J5VmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOwor
CisgICAgICAgIHJ1bkFkZHJlc3NNYXRjaGVyKHZhbHVlLT5jaGlsZHJlbigpLmxhc3QoKSwgYWRk
cmVzc1NlbGVjdG9yKTsKKyAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFk
ZHJlc3Mud2l0aE9mZnNldCh2YWx1ZS0+b2Zmc2V0KCkpOworICAgIH0KKworICAgIEFyZyBsb2Fk
QWRkcihWYWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+b3Bj
b2RlKCkgPT0gTG9hZCkKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGxvYWRWYWx1ZSk7CisgICAg
ICAgIHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcgaW1tKFZhbHVlKiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBB
cmc6OmltbSh2YWx1ZS0+YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0K
KworICAgIEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoQXJn
IHJlc3VsdCA9IGltbSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAg
ICByZXR1cm4gdG1wKHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBv
cGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAg
IHZvaWQgYXBwZW5kQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAg
ICAgIFRtcCByZXN1bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8v
IFRocmVlLW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIsIGMKKyAg
ICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGMgPSBhIE9wIGIK
KworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXAsIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUp
IHsKKyAgICAgICAgICAgICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAg
ICBhcHBlbmQob3Bjb2RlLCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9wZXJhdGlvbiBjb3Vs
ZCBoYXZlIGFuIGltbWVkaWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAgIGlmIChpbW0obGVm
dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKGxlZnQpLCB0bXAo
cmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGltbShyaWdo
dCkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkg
eworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0ocmlnaHQpLCByZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHdvLW9w
ZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAgICAgICAgLy8gbWVh
biBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEKKworICAgICAgICAv
LyBBdCB0aGlzIHBvaW50LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGlvbiB0aGF0
IGhhdmUgYSBmdXNlZCBsb2FkIG92ZXIgdGhyZWUKKyAgICAgICAgLy8gb3BlcmFuZCBmb3Jtcy4K
KyAgICAgICAgCisgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7Cisg
ICAgICAgICAgICBBcmcgbGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAgICAgICAgICAgIGlm
IChpc1ZhbGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAg
ICAgICAgICAgICAgLy8gRklYTUU6IFVzZSB0aGUgcmlnaHQgTW92ZSBvcGNvZGUuIElmIHdlJ3Jl
IGRlYWxpbmcgd2l0aCAzMi1iaXQgdHlwZXMsIHdlIHNob3VsZAorICAgICAgICAgICAgICAgIC8v
IHVzZSBNb3ZlMzIuIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBEb3VibGVzLCB3ZSBzaG91bGQgdXNl
IE1vdmVEb3VibGUuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDUzMworICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAo
cmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGxlZnRBZGRy
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIEFyZyByaWdodEFkZHIgPSBsb2FkQWRkcihyaWdodCk7CisgICAgICAg
IGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5raW5kKCksIEFyZzo6VG1wKSkgewor
ICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAg
IGFwcGVuZChvcGNvZGUsIHJpZ2h0QWRkciwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBB
cmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVm
dCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICBhcHBl
bmQob3Bjb2RlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPEFp
cjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0
YXRpdmU+CisgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpCisgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBmYWlscyB0byBjaGVjayBpZiB0
aGVyZSBhcmUgYW55IGVmZmVjdHMgYmV0d2VlbiB0aGUgTG9hZCBhbmQgdGhlIFN0b3JlIHRoYXQK
KyAgICAgICAgLy8gY291bGQgY2xvYmJlciB0aGUgbG9hZGVkIHZhbHVlLiBXZSBuZWVkIHRvIGNo
ZWNrIHN1Y2ggdGhpbmdzIGJlY2F1c2Ugd2UgYXJlIGVmZmVjdGl2ZWx5CisgICAgICAgIC8vIHNp
bmtpbmcgdGhlIGxvYWQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA1MzQKKyAgICAgICAgCisgICAgICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRy
KGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOworCisgICAgICAgIFZh
bHVlKiBvdGhlclZhbHVlOworICAgICAgICBpZiAoYWRkcihsZWZ0KSA9PSBzdG9yZUFkZHIpCisg
ICAgICAgICAgICBvdGhlclZhbHVlID0gcmlnaHQ7CisgICAgICAgIGVsc2UgaWYgKGNvbW11dGF0
aXZpdHkgPT0gQ29tbXV0YXRpdmUgJiYgYWRkcihyaWdodCkgPT0gc3RvcmVBZGRyKQorICAgICAg
ICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIHN0
b3JlQWRkci5raW5kKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGFw
cGVuZChvcGNvZGUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IHZvaWQgYXBwZW5kKEFpcjo6T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRz
KQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9wY29kZSwgY3VycmVu
dFZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQor
ICAgIAorICAgIEluZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhh
dCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiB2YWx1
ZVRvVG1wOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4g
V2Ugc2F5IHRoYXQgYSBWYWx1ZSogd2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KKyAg
ICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gYmxvY2tUb0Jsb2Nr
OworCisgICAgVXNlQ291bnRzIHVzZUNvdW50czsKKworICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwg
ND4+IGluc3RzOworCisgICAgVmFsdWUqIGN1cnJlbnRWYWx1ZTsKKworICAgIC8vIFRoZSBhZGRy
ZXNzIHNlbGVjdG9yIHdpbGwgbWF0Y2ggYW55IHBhdHRlcm4gd2hlcmUgdGhlIGlucHV0IG9wZXJh
bmRzIGFyZSBhdmFpbGFibGUgYXMgVG1wcy4KKyAgICAvLyBJdCBkb2Vzbid0IGNhcmUgYWJvdXQg
c2hhcmluZy4gSXQgd2lsbCBoYXBwaWx5IGVtaXQgdGhlIHNhbWUgYWRkcmVzcyBleHByZXNzaW9u
IG92ZXIgYW5kIG92ZXIKKyAgICAvLyBhZ2FpbiByZWdhcmRsZXNzIG9mIHRoZSBleHByZXNzaW9u
J3MgY29tcGxleGl0eS4gVGhpcyB3b3JrcyBvdXQgZmluZSwgc2luY2UgYXQgdGhlIG1hY2hpbmUK
KyAgICAvLyBsZXZlbCwgYWRkcmVzcyBleHByZXNzaW9ucyBhcmUgc3VwZXIgY2hlYXAuIEhvd2V2
ZXIsIHRoaXMgZG9lcyBoYXZlIGEgaGFjayB0byBhdm9pZAorICAgIC8vICJ1bmhvaXN0aW5nIiBh
ZGRyZXNzIGV4cHJlc3Npb25zLgorICAgIGNsYXNzIEFkZHJlc3NTZWxlY3RvciB7CisgICAgcHVi
bGljOgorICAgICAgICBBZGRyZXNzU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIpCisgICAgICAg
ICAgICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29s
IGFjY2VwdFJvb3QoVmFsdWUqIHJvb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIFdlIGRv
bid0IHdhbnQgdG8gbWF0Y2ggYW4gYWRkcmVzcyBleHByZXNzaW9uIHRoYXQgaGFzIGFscmVhZHkg
YmVlbiBjb21wdXRlZAorICAgICAgICAgICAgLy8gZXhwbGljaXRseS4KKyAgICAgICAgICAgIHJl
dHVybiAhbG93ZXIudmFsdWVUb1RtcFtyb290XTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
YWNjZXB0Um9vdExhdGUoVmFsdWUqKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2Vy
LnZhbHVlVG9UbXBbdmFsdWVdKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIHJldHVybiBhY2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQor
ICAgICAgICBib29sIGFjY2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50
ZXJuYWxzTGF0ZShBcmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUs
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dl
ci5sb2NrZWQuY29udGFpbnModmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAg
ICB9CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2Vw
dE9wZXJhbmRzTGF0ZShBcmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hp
ZnQxKFZhbHVlKiBpbmRleCwgVmFsdWUqIGxvZ1NjYWxlLCBWYWx1ZSogYmFzZSkKKyAgICAgICAg
eworICAgICAgICAgICAgaWYgKGxvZ1NjYWxlLT5hc0ludCgpIDwgMCB8fCBsb2dTY2FsZS0+YXNJ
bnQoKSA+IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2Vs
ZWN0ZWRBZGRyZXNzID0gQXJnOjppbmRleCgKKyAgICAgICAgICAgICAgICBsb3dlci50bXAoYmFz
ZSksIGxvd2VyLnRtcChpbmRleCksIDEgPDwgbG9nU2NhbGUtPmFzSW50KCkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MihW
YWx1ZSogYmFzZSwgVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB0cnlBZGRTaGlmdDEoaW5kZXgsIGxvZ1NjYWxlLCBiYXNlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyaWdodC0+aGFzSW50MzIoKSkgeworICAgICAg
ICAgICAgICAgIC8vIFRoaXMgcHJvZHVjdGlvbiBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkgc2lu
Y2Ugd2UgZXhwZWN0CisgICAgICAgICAgICAgICAgLy8gTG9hZChBZGQoQHgsIEBjb25zdDEpLCBv
ZmZzZXQgPSBjb25zdDIpIHRvIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmVuZ3RoLXJlZHVjZWQKKyAg
ICAgICAgICAgICAgICAvLyB0byBMb2FkKEB4LCBvZmZzZXQgPSBjb25zdDEgKyBjb25zdDIpLgor
ICAgICAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAobGVm
dCksIHJpZ2h0LT5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KGxv
d2VyLnRtcChsZWZ0KSwgbG93ZXIudG1wKHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5RGlyZWN0KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChsb3dlci5jdXJy
ZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBMb3dlclRvQWlyJiBsb3dlcjsKKyAgICAgICAgQXJnIHNlbGVjdGVkQWRkcmVz
czsKKyAgICB9OworICAgIEFkZHJlc3NTZWxlY3RvciBhZGRyZXNzU2VsZWN0b3I7CisKKyAgICAv
LyBCZWxvdyBpcyB0aGUgY29kZSBmb3IgYSBsb3dlcmluZyBzZWxlY3Rvciwgc28gdGhhdCB3ZSBj
YW4gcGFzcyAqdGhpcyB0byBydW5Mb3dlcmluZ01hdGNoZXIuCisgICAgLy8gVGhpcyB3aWxsIG1h
dGNoIGNvbXBsZXggbXVsdGktdmFsdWUgZXhwcmVzc2lvbnMsIGJ1dCBvbmx5IGlmIHRoZXJlIGlz
IG5vIHNoYXJpbmcuIEZvciBleGFtcGxlLAorICAgIC8vIGl0IHdvbid0IG1hdGNoIGEgTG9hZCB0
d2ljZSBhbmQgY2F1c2UgdGhlIGdlbmVyYXRlZCBjb2RlIHRvIGRvIHR3byBsb2FkcyB3aGVuIHRo
ZSBvcmlnaW5hbAorICAgIC8vIGNvZGUganVzdCBkaWQgb25lLgorICAgIAorICAgIGJvb2wgYWNj
ZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocm9vdCwg
IWxvY2tlZC5jb250YWlucyhyb290KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICB2b2lkIGFjY2VwdFJvb3RMYXRlKFZhbHVlKikgeyB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVl
KiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8vIElmIG9u
ZSBvZiB0aGUgaW50ZXJuYWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4g
d2UgZG9uJ3Qgd2FudCB0byBjYXVzZQorICAgICAgICAvLyBpdCB0byBiZSByZWNvbXB1dGVkIGFn
YWluLgorICAgICAgICBpZiAodmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBXZSByZXF1aXJlIGludGVybmFscyB0byBoYXZl
IG9ubHkgb25lIHVzZSAtIHVzLgorICAgICAgICBpZiAodXNlQ291bnRzW3ZhbHVlXSAhPSAxKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGFjY2Vw
dEludGVybmFscyhhcmd1bWVudHMuLi4pOworICAgIH0KKyAgICBib29sIGFjY2VwdEludGVybmFs
cygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKFZhbHVlKiB2YWx1ZSwgQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGxvY2tlZC5hZGQodmFsdWUpOworICAg
ICAgICBhY2NlcHRJbnRlcm5hbHNMYXRlKGFyZ3VtZW50cy4uLik7CisgICAgfQorICAgIHZvaWQg
YWNjZXB0SW50ZXJuYWxzTGF0ZSgpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KKyAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGlmIChsb2NrZWQuY29udGFpbnModmFs
dWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gYWNjZXB0T3Bl
cmFuZHMoYXJndW1lbnRzLi4uKTsKKyAgICB9CisgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygpIHsg
cmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKyAgICAKKyAg
ICBib29sIHRyeUxvYWQoVmFsdWUqIGFkZHJlc3MpCisgICAgeworICAgICAgICBzd2l0Y2ggKGN1
cnJlbnRWYWx1ZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBh
cHBlbmQoTW92ZTMyLCBhZGRyKGFkZHJlc3MpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIGlmIChp
czY0Qml0KCkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgYWRkcihhZGRyZXNzKSwg
dG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERvdWJsZToK
KyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCBhZGRyKGFkZHJlc3MpLCB0bXAoY3VycmVu
dFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29s
IHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNo
IChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGFwcGVu
ZEJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVt
ZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisgICAgCisgICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCwgVmFsdWUqKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRTdG9yZUJpbk9w
PEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5U3RvcmVBbmRM
b2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIFZhbHVlKikKKyAgICB7CisgICAgICAgIHN3
aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ5QXBwZW5kU3RvcmVCaW5PcDxBbmQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0
KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9y
ZSB0eXBlcyEKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICAKKyAgICBib29sIHRyeVN0b3JlKFZhbHVlKiB2YWx1ZSwgVmFsdWUqKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoICh2YWx1ZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAg
ICAgICBhcHBlbmQoTW92ZTMyLCB0bXAodmFsdWUpLCBhZGRyKGN1cnJlbnRWYWx1ZSkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBp
ZiAoaXM2NEJpdCgpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSks
IGFkZHIoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRG91Ymxl
OgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIHRtcCh2YWx1ZSksIGFkZHIoY3VycmVu
dFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29s
IHRyeUNvbnN0MzIoKQorICAgIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIGltbShjdXJyZW50VmFs
dWUpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIHRyeVJldHVybihWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBJ
bnQ2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBpbW1PclRtcCh2YWx1ZSksIFRtcChHUFJJ
bmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
RG91YmxlOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIHRtcCh2YWx1ZSksIFRtcChG
UFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIGFwcGVuZChSZXQpOworICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBwcm9jZWR1cmU7
CisgICAgQ29kZSYgY29kZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lk
IGxvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCit7CisgICAgUGhh
c2VTY29wZSBwaGFzZVNjb3BlKHByb2NlZHVyZSwgImxvd2VyVG9BaXIiKTsKKyAgICBMb3dlclRv
QWlyIGxvd2VyVG9BaXIocHJvY2VkdXJlLCBjb2RlKTsKKyAgICBsb3dlclRvQWlyLnJ1bigpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzTG93ZXJUb0Fpcl9oCisjZGVmaW5lIEIzTG93ZXJUb0Fp
cl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgUHJvY2VkdXJlOworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKwor
Ly8gVGhpcyBsb3dlcnMgdGhlIGN1cnJlbnQgQjMgcHJvY2VkdXJlIHRvIGFuIEFpciBjb2RlLgor
Cit2b2lkIGxvd2VyVG9BaXIoUHJvY2VkdXJlJiwgQWlyOjpDb2RlJik7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
TG93ZXJUb0Fpcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5n
TWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
IyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0
Y2hlciBMb3dlcmluZ01hdGNoZXIKKworIyBUaGVzZSBydWxlcyBhcmUgY29uc2lkZXJlZCBpbiBh
IGNhc2NhZGUsIHN0YXJ0aW5nIGF0IHRoZSB0b3AuIEl0J3MgaW1wbGVuZW50ZWQgdXNpbmcgc3dp
dGNoCisjIHN0YXRlbWVudHMgd2hlcmV2ZXIgcG9zc2libGUuCisKKyMgTm90ZTogYWRkaW5nIG1v
cmUgcnVsZXMgdG8gdGhpcyBtYXRjaGVyIGlzIGFuIGV4Y2VsbGVudCB3YXkgb2YgaW1wcm92aW5n
IHBlcmZvcm1hbmNlIQorCitMb2FkID0gTG9hZChhZGRyZXNzKQorCitBZGQgPSBBZGQobGVmdCwg
cmlnaHQpCisKK1N0b3JlQWRkTG9hZCA9IFN0b3JlKEFkZChsZWZ0LCByaWdodCksIGFkZHJlc3Mp
CitTdG9yZUFuZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmlnaHQpLCBhZGRyZXNzKQorU3RvcmUg
PSBTdG9yZSh2YWx1ZSwgYWRkcmVzcykKKworQ29uc3QzMiA9IENvbnN0MzIoKQorCitSZXR1cm4g
PSBSZXR1cm4odmFsdWUpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9y
eVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1v
cnlWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNN
ZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUo
KQoreworfQorCit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAi
LCBtX29mZnNldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFs
dWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNk
ZWZpbmUgQjNNZW1vcnlWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gRklYTUU6
IEFkZCBhbGlhcyBhbmFseXNpcyB0byB0aGVzZSBieSBhbGxvd2luZyB0aGUgY2xpZW50IHRvIGFz
c29jaWF0ZSBhbiBpbnRlZ2VyIHJhbmdlIHRvIHRoZQorLy8gdmFsdWUuIFR3byBvcGVyYXRpb25z
IG1heSBhY2Nlc3MgdGhlIHNhbWUgbWVtb3J5IGlmIHRoZWlyIHJhbmdlcyBvdmVybGFwcy4KKy8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzUKKworY2xhc3Mg
TWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBM
b2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0Ogor
ICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0
b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAg
ICBpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZv
cm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMg
dGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5
cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAg
aW50MzJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUs
IG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAg
ICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAg
ICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gRG91
YmxlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4Ogor
ICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0Ogor
ICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBW
b2lkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0
dXJuIHR5cGUgaXMgaW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0
ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0
ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChv
ZmZzZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAg
ICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAg
ICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBj
YXNlIExvYWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVt
b3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4g
b3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnQzMl90IG9m
ZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCB2
YWx1ZSwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAg
ICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsK
KyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAg
ICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQzMl90IG1fb2Zmc2V0IHsgMCB9OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNNZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBv
cGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAg
b3V0LnByaW50KCJOb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSWRlbnRpdHk6Cisg
ICAgICAgIG91dC5wcmludCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Q29uc3QzMjoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDMyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENvbnN0NjQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3Q2NCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJDb25z
dERvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAg
IG91dC5wcmludCgiU3RhY2tTbG90Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZ3Vt
ZW50UmVnOgorICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50UmVnIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgb3V0LnByaW50KCJGcmFtZVBvaW50
ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkOgorICAgICAgICBvdXQucHJpbnQo
IkFkZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdWI6CisgICAgICAgIG91dC5wcmlu
dCgiU3ViIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE11bDoKKyAgICAgICAgb3V0LnBy
aW50KCJNdWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRGl2OgorICAgICAgICBvdXQu
cHJpbnQoIkRpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICAg
ICAgb3V0LnByaW50KCJDaGlsbERpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNb2Q6
CisgICAgICAgIG91dC5wcmludCgiTW9kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJp
dEFuZDoKKyAgICAgICAgb3V0LnByaW50KCJCaXRBbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQml0T3I6CisgICAgICAgIG91dC5wcmludCgiQml0T3IiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQml0WG9yOgorICAgICAgICBvdXQucHJpbnQoIkJpdFhvciIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTaGw6CisgICAgICAgIG91dC5wcmludCgiU2hsIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFNTaHI6CisgICAgICAgIG91dC5wcmludCgiU1NociIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBaU2hyOgorICAgICAgICBvdXQucHJpbnQoIlpTaHIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDg6CisgICAgICAgIG91dC5wcmludCgi
U0V4dDgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDE2OgorICAgICAgICBvdXQu
cHJpbnQoIlNFeHQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MzI6CisgICAg
ICAgIG91dC5wcmludCgiU0V4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpFeHQz
MjoKKyAgICAgICAgb3V0LnByaW50KCJaRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgRlJvdW5kOgorICAgICAgICBvdXQucHJpbnQoIkZSb3VuZCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJVG9EOgorICAgICAgICBvdXQucHJpbnQoIklUb0QiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgRFRvSTMyOgorICAgICAgICBvdXQucHJpbnQoIkRUb0kzMiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50
KCJOb3RFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAg
ICAgb3V0LnByaW50KCJMZXNzVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHcmVh
dGVyVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc0VxdWFsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICAgICAgb3V0LnBy
aW50KCJHcmVhdGVyRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJvdmU6Cisg
ICAgICAgIG91dC5wcmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVs
b3c6CisgICAgICAgIG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWJvdmVFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZUVxdWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dF
cXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIG91dC5w
cmludCgiTG9hZDhaIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4UzoKKyAgICAg
ICAgb3V0LnByaW50KCJMb2FkOFMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2
WjoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZaIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIExvYWQxNlM6CisgICAgICAgIG91dC5wcmludCgiTG9hZDE2UyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZEZsb2F0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9h
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIG91dC5wcmlu
dCgiU3RvcmU4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgICAg
IG91dC5wcmludCgiU3RvcmUxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZUZs
b2F0OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiU3RvcmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQ0NhbGw6CisgICAgICAgIG91dC5wcmludCgiQ0NhbGwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgUGF0Y2hwb2ludDoKKyAgICAgICAgb3V0LnByaW50KCJQYXRj
aHBvaW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBv
dXQucHJpbnQoIkNoZWNrQWRkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrU3Vi
OgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrU3ViIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENoZWNrTXVsOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrTXVsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFVwc2lsb246CisgICAgICAgIG91dC5wcmludCgiVXBzaWxv
biIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQaGk6CisgICAgICAgIG91dC5wcmludCgi
UGhpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEp1bXA6CisgICAgICAgIG91dC5wcmlu
dCgiSnVtcCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIG91
dC5wcmludCgiQnJhbmNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN3aXRjaDoKKyAg
ICAgICAgb3V0LnByaW50KCJTd2l0Y2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmV0
dXJuOgorICAgICAgICBvdXQucHJpbnQoIlJldHVybiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBPb3BzOgorICAgICAgICBvdXQucHJpbnQoIk9vcHMiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcGNvZGVfaAor
I2RlZmluZSBCM09wY29kZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51
bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1
c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAg
IAorICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlw
ZS4KKyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0YW50cy4gVXNlIHRoZSBDb25zdFZhbHVl
KiBjbGFzc2VzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28gdGhhdCB3
ZSBjYW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUgd2Ugd291bGQgY29uc3RydWN0IHRoZW0u
IExhcmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRvIGNyZWF0ZS4KKyAgICBDb25zdDMyLAor
ICAgIENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBzdGFj
ayBzbG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJv
Z3JhbSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQg
aXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJh
bmdlIG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNz
LgorICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVy
LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQor
ICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQsIGFu
ZCB0aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1cmUgdGhhdCB3ZQorICAgIC8vIGRvbid0
IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFsbG9jYXRpb24gb3IgY2FsbHMgKGVpdGhl
ciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQorICAgIC8vIHN0YWNrIG9yIHByZXNlcnZp
bmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3RlcikuIFVzZSB0aGUgQXJndW1lbnRSZWdWYWx1
ZSBjbGFzcy4gVGhlIHJldHVybgorICAgIC8vIHR5cGUgaXMgZWl0aGVyIHBvaW50ZXIoKSAoZm9y
IEdQUnMpIG9yIERvdWJsZSAoZm9yIEZQUnMpLgorICAgIEFyZ3VtZW50UmVnLAorCisgICAgLy8g
VGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4gcHV0IHRoaXMgYW55d2hlcmUgaW4gY29udHJvbCBm
bG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVsZCB0aGUKKyAgICAvLyBmcmFtZSBwb2ludGVyLCB3
aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29tcGlsZXIgY2hhbmdlcyB0aGUgZnJhbWUgcG9pbnRlciB0
ZW1wb3JhcmlseSBmb3Igc29tZQorICAgIC8vIHNpbGx5IHJlYXNvbiwgdGhlIEZyYW1lUG9pbnRl
ciBpbnRyaW5zaWMgd2lsbCByZXR1cm4gd2hlcmUgdGhlIGZyYW1lIHBvaW50ZXIgKnNob3VsZCog
YmUgbm90CisgICAgLy8gd2hlcmUgaXQgaGFwcGVucyB0byBiZSByaWdodCBub3cuCisgICAgRnJh
bWVQb2ludGVyLAorCisgICAgLy8gUG9seW1vcnBoaWMgbWF0aCwgdXNhYmxlIHdpdGggYW55IHZh
bHVlIHR5cGUuCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorCisgICAg
Ly8gSW50ZWdlciBtYXRoLgorICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVo
YXZlcyBsaWtlIEpTICh4L3kpfDAuCisgICAgTW9kLAorICAgIEJpdEFuZCwKKyAgICBCaXRPciwK
KyAgICBCaXRYb3IsCisgICAgU2hsLAorICAgIFNTaHIsCisgICAgWlNociwKKworICAgIC8vIENh
c3RzIGFuZCBzdWNoLgorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIEludDMyOgorICAgIFNFeHQ4
LAorICAgIFNFeHQxNiwKKyAgICAvLyBUYWtlcyBJbnQzMiBhbmQgcmV0dXJucyBJbnQ2NDoKKyAg
ICBTRXh0MzIsCisgICAgWkV4dDMyLAorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIERvdWJsZToK
KyAgICBGUm91bmQsCisgICAgLy8gVGFrZXMgaW50cyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAg
SVRvRCwKKyAgICAvLyBUYWtlcyBEb3VibGUgYW5kIHJldHVybnMgSW50MzI6CisgICAgRFRvSTMy
LAorCisgICAgLy8gUG9seW1vcnBoaWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFueSB2YWx1
ZSB0eXBlLiBSZXR1cm5zIGludDMyIDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCisgICAgLy8gaXMg
anVzdCBFcXVhbCh4LCAwKS4KKyAgICBFcXVhbCwKKyAgICBOb3RFcXVhbCwKKyAgICBMZXNzVGhh
biwKKyAgICBHcmVhdGVyVGhhbiwKKyAgICBMZXNzRXF1YWwsCisgICAgR3JlYXRlckVxdWFsLAor
CisgICAgLy8gSW50ZWdlciBjb21wYXJpc29ucy4gUmV0dXJucyBpbnQzMiAwIG9yIDEuCisgICAg
QWJvdmUsCisgICAgQmVsb3csCisgICAgQWJvdmVFcXVhbCwKKyAgICBCZWxvd0VxdWFsLAorCisg
ICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUg
bG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4g
SW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAorICAgIExvYWQx
NlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisgICAgLy8g
VGhpcyByZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExvYWQsCisKKyAg
ICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3Rv
cmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2
YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91
YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGlj
IHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAgICAv
LyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBz
eXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFy
Z3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKwor
ICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFz
cy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9u
bHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJh
Y2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNr
bWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQg
bXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFj
a21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVl
c3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJv
bSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3Rh
Y2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVj
a1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJh
dGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNv
ZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8g
ZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0
IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJlIG5vdCBhbGxv
d2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91ciBzbG93IHBh
dGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1
dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhh
cHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6Cisg
ICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hlY2tBZGQoeCwg
eSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAg
ICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVudGl0eShhKQor
ICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFja3Mg
dXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAv
LyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRo
ZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFmdGVyIHRoZSBm
aXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2
ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25k
IENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0FkZCwKKyAgICBD
aGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lkZS1leGl0cy4g
VXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlz
IGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoaXMg
dGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisgICAg
Ly8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVl
IHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0aC4KKyAgICBD
aGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAg
ICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQaGks
CisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgSnVtcCwK
KyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0
eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBDb250
cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVl
IHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIg
ZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBT
d2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0IGtu
b3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFueQorICAgIC8v
IHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisKKyAgICAv
LyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdl
dCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcworfTsKKworaW5s
aW5lIGJvb2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29k
ZSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM09wY29kZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJh
d1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Jp
Z2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4u
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcmlnaW5faAorI2RlZmluZSBCM09y
aWdpbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVy
YXRlcyBCM0lSIGNhbiBjaG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBk
byB0aGlzLCBCMyB3aWxsIGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hp
bmUgY29kZSwgd2hpY2ggaW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBC
MworLy8gdHJhbnNmb3JtYXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0
J3MgYW4gZXJyb3IgdG8gd3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJv
cHMgT3JpZ2lucyBvciBsaWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgor
ICAgIGV4cGxpY2l0IE9yaWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAg
OiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzT3JpZ2luX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hw
b2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50U3BlY2lhbC5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisj
aW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1BhdGNocG9pbnRTcGVjaWFsOjpQYXRjaHBv
aW50U3BlY2lhbCgpCit7Cit9CisKK1BhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNp
YWwoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKAorICAgIElu
c3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxs
YmFjaykKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBWb2lkKSB7CisgICAgICAg
IGZvckVhY2hBcmdJbXBsKDAsIDEsIGluc3QsIGNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpEZWYsIGluc3Qub3JpZ2lu
LT5haXJUeXBlKCkpOworICAgIGZvckVhY2hBcmdJbXBsKDAsIDIsIGluc3QsIGNhbGxiYWNrKTsK
K30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAg
IGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJldHVybiBpc1ZhbGlk
SW1wbCgwLCAxLCBpbnN0KTsKKworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpbnN0LmFyZ3NbMV0ua2luZCgpICE9IEFyZzo6VG1w
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNUeXBlKGlu
c3Qub3JpZ2luLT5haXJUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1
cm4gaXNWYWxpZEltcGwoMCwgMiwgaW5zdCk7Cit9CisKK2Jvb2wgUGF0Y2hwb2ludFNwZWNpYWw6
OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChp
bnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJldHVybiBhZG1pdHNTdGFja0lt
cGwoMCwgMSwgaW5zdCwgYXJnSW5kZXgpOworCisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwgMiwgaW5z
dCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hwb2ludFNwZWNpYWw6
OmdlbmVyYXRlKAorICAgIEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9u
Q29udGV4dCYgY29udGV4dCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAg
ICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAgICBBU1NFUlQoc3Rh
Y2ttYXApOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAgIHVuc2lnbmVkIG9mZnNl
dCA9IDE7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgcmVw
cy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tvZmZzZXQrK10pKTsK
KyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBvZmZzZXQsIGluc3QsIHJlcHMpOworICAgIAor
ICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKKyAgICBwYXJhbXMudmFsdWUg
PSB2YWx1ZTsKKyAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICBwYXJhbXMucmVw
cyA9IHJlcHM7CisgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21hcC0+bV91c2VkUmVn
aXN0ZXJzOworCisgICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOwor
CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit2b2lkIFBhdGNocG9pbnRT
cGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiUGF0Y2hwb2ludCIpOworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpkZWVwRHVtcElt
cGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkxvd2VyZWQgQjM6
OlBhdGNocG9pbnRWYWx1ZS4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFNwZWNpYWxf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc3BlY2lh
bCB0aGF0IHJlY29nbml6ZXMgdGhhdCB0aGVyZSBhcmUgdHdvIHVzZXMgb2YgUGF0Y2hwb2ludDog
Vm9pZCBhbmQgYW5kIG5vbi1Wb2lkLgorLy8gSW4gdGhlIFZvaWQgY2FzZSwgdGhlIHN5bnRheCBv
ZiB0aGUgQWlyIFBhdGNoIGluc3RydWN0aW9uIGlzOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hw
b2ludCwgYXJncy4uLgorLy8KKy8vIFdoZXJlICJhcmdzLi4uIiBhcmUgdGhlIGxvd2VyZWQgYXJn
dW1lbnRzIHRvIHRoZSBQYXRjaHBvaW50IGluc3RydWN0aW9uLiBJbiB0aGUgbm9uLVZvaWQgY2Fz
ZQorLy8gd2Ugd2lsbCBoYXZlOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hwb2ludCwgcmVzdWx0
LCBhcmdzLi4uCisKK2NsYXNzIFBhdGNocG9pbnRTcGVjaWFsIDogcHVibGljIFN0YWNrbWFwU3Bl
Y2lhbCB7CitwdWJsaWM6CisgICAgUGF0Y2hwb2ludFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5Q
YXRjaHBvaW50U3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEFp
cjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4m
KSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAg
Ym9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7
CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhp
ZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2Vu
ZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVy
czo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRp
b25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25z
dCBvdmVycmlkZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFNwZWNpYWxfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzUGF0Y2hwb2ludFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8
d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
UGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBv
aW50VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNQYXRjaHBvaW50VmFsdWVfaAorI2RlZmluZSBCM1BhdGNocG9pbnRWYWx1ZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsg
fQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFBhdGNo
cG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25z
dCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hw
b2ludCwgdHlwZSwgb3JpZ2luLCBjaGlsZHJlbikKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNQYXRjaHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQaGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BoYXNlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRl
ICJCM1ZhbGlkYXRlLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYv
U3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIq
IG5hbWUpCisgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgLCBtX25hbWUobmFtZSkK
K3sKKyAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9n
KCJCMyBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7
CisgICAgfQorCisgICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1f
ZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhwcm9jZWR1cmUpOworfQorCitQaGFzZVNjb3BlOjp+UGhh
c2VTY29wZSgpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAg
ICAgICB2YWxpZGF0ZShtX3Byb2NlZHVyZSwgbV9uYW1lLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQjNQaGFzZVNjb3Bl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFBoYXNlU2NvcGUgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKFBoYXNlU2NvcGUpOworcHVibGljOgorICAgIFBoYXNlU2NvcGUo
UHJvY2VkdXJlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8gdGhp
cyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJl
OworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmts
aXN0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKK3sKK30KKworUHJvY2VkdXJl
Ojp+UHJvY2VkdXJlKCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJlOjphZGRCbG9jayhk
b3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9j
ayhuZXcgQmFzaWNCbG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2lj
QmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1v
dmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVyZTo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sg
OiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisKK1ZlY3Rv
cjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblByZU9yZGVyKCkKK3sKKyAgICBWZWN0
b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAg
IHdvcmtsaXN0LnB1c2goYXQoMCkpOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdv
cmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOworICAgICAgICBm
b3IgKHVuc2lnbmVkIGkgPSBibG9jay0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAg
ICAgd29ya2xpc3QucHVzaChibG9jay0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgIH0KKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCitWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tz
SW5Qb3N0T3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0OworICAgIFBv
c3RPcmRlckJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChhdCgwKSk7
CisgICAgd2hpbGUgKEJsb2NrV2l0aE9yZGVyIGl0ZW0gPSB3b3JrbGlzdC5wb3AoKSkgeworICAg
ICAgICBzd2l0Y2ggKGl0ZW0ub3JkZXIpIHsKKyAgICAgICAgY2FzZSBWaXNpdE9yZGVyOjpQcmU6
CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoUG9zdChpdGVtLm5vZGUpOworICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gaXRlbS5ub2RlLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAg
ICAgICAgICAgICAgd29ya2xpc3QucHVzaChpdGVtLm5vZGUtPnN1Y2Nlc3NvckJsb2NrKGkpKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlBvc3Q6CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0ubm9kZSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQ
cm9jZWR1cmVfaAorI2RlZmluZSBCM1Byb2NlZHVyZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiUHVyZU5hTi5oIgorI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBWYWx1ZTsK
KworY2xhc3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQcm9jZWR1cmUp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgUHJvY2VkdXJlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflByb2NlZHVyZSgp
OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZy
ZXF1ZW5jeSA9IFBOYU4pOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4uLik7
CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0K
KyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9j
a3NbaW5kZXhdLmdldCgpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7
CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fcHJvY2Vk
dXJlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2ln
bmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAg
ICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fcHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0
ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IGZp
bmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0
KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBt
X3Byb2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgpKQorICAgICAgICAg
ICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKwor
ICAgICAgICBjb25zdCBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBt
X2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nr
c0luUHJlT3JkZXIoKTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVy
KCk7CisKKyAgICBjbGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IFZhbHVlc0NvbGxlY3Rpb24oY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAg
ICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAg
ICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpdGVyYXRvcihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgp
CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5tX3ZhbHVlc1ttX2luZGV4XS5nZXQoKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgY29uc3QgUHJv
Y2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
ICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX3Byb2NlZHVyZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0K
KworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92
YWx1ZXMuc2l6ZSgpOyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFZh
bHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUHJvY2VkdXJlJiBtX3By
b2NlZHVyZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSBjb25zdCB7
IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCitwcml2YXRlOgorICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGlu
ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxp
bmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRk
KEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlw
ZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOwor
ICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5k
KFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
UHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdEtpbmQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAg
ICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NrZWQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgor
ICAgICAgICBvdXQucHJpbnQoIkFub255bW91cyIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFz
cyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBu
ZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVu
ZCB0byBlc2NhcGUKKyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBo
YXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjaworICAg
IC8vIHNsb3QuCisgICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgY291bGQg
c2hhcmUgc3BhY2Ugd2l0aCBvdGhlciBzdGFjayBzbG90cywgcHJvdmlkZWQgdGhhdCB0aGV5IGFy
ZW4ndCBsaXZlCisgICAgLy8gYXQgdGhlIHNhbWUgdGltZS4gVGhlIGNvbXBpbGVyIHN0aWxsIGhh
cyB0byBkbyBlc2NhcGUgYW5hbHlzaXMsIHNpbmNlIHRoZXNlIGNhbiBiZSBlc2NhcGVkCisgICAg
Ly8gZXhwbGljaXRseSBpbiBJUi4KKyAgICBBbm9ueW1vdXMKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOwor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Ns
b3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVT
aXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90VmFsdWVfaAorI2RlZmluZSBCM1N0YWNrU2xv
dFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtp
bmQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCituYW1lc3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNl
IEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0g
U3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5
dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQg
a2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2ln
bmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBz
dGFjayBzbG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBp
bnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQor
CisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBz
bG90IGlzIExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIFN0YWNrU2xvdCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQorICAgICAg
ICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAg
ICwgbV9vZmZzZXRGcm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRl
U2l6ZTsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZy
b21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRlciht
X29wYXF1ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAgICAgICAiLCBnZW5l
cmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0g
IiwgbV9jbG9iYmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdp
c3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0
YWNrbWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgi
CisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNp
bmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQ2hlY2tTcGVjaWFsOworY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3Mg
VmFsdWU7CisKK2NsYXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlv
blBhcmFtcyB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0
YWNrbWFwLgorICAgICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUg
c3RhY2ttYXAuCisgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlz
IHRlbGxzIHlvdSB0aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hv
c2VuLgorICAgICAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0
ZWxscyB5b3UgdGhlIHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0
b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAg
dHlwZWRlZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisg
ICAgU3RhY2ttYXAoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0
YSB0byBpZGVudGlmeSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3Rh
Y2ttYXAtdXNpbmcgVmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVw
bGljYXRlIG1heSBlbmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBU
aGlzCisgICAgLy8gYWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8g
cmVmZXIgYmFjayB0byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8v
IHdlIHdlcmUgdXNpbmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2
b2lkKiBwYXJhbWV0ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAg
ICB9CisgICAgdm9pZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAg
IC8vIENvbnZlbmllbmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9p
bnRlcnMuCisgICAgdm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAg
ICAgICBzZXRPcGFxdWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBz
aXplX3Qgb3BhcXVlSW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90Pihv
cGFxdWUoKSk7IH0KKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUg
dGhhdCB1c2VzIHRoaXMgU3RhY2ttYXAuIEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50IHRoYXQKKyAg
ICAvLyByZXR1cm5zIGEgdmFsdWUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgcmVzdWx0IHZh
bHVlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIGluZGV4IHplcm8gcmVmZXJzCisgICAgLy8gdG8gdGhl
IGZpcnN0IGFyZ3VtZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVudCBpcyBu
b3QgY29uc3RyYWluYWJsZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gaW4gYSBDaGVja0FkZCB2YWx1
ZSwgaXQgd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQgMS4gSW4g
YSBDaGVjayB2YWx1ZSwgaXQKKyAgICAvLyB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4g
aW5kZXggMC4gQnV0LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCwgeW91
IGNhbgorICAgIC8vIGRlcGVuZCBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBiZWluZyBm
aWxsZWQgaW4uCisgICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0IFZhbHVl
UmVwJiByZXApCisgICAgeworICAgICAgICBpZiAoaW5kZXggKyAxIDwgbV9yZXBzLnNpemUoKSkK
KyAgICAgICAgICAgIG1fcmVwcy5ncm93KGluZGV4ICsgMSk7CisgICAgICAgIG1fcmVwc1tpbmRl
eF0gPSByZXA7CisgICAgfQorCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0IFJlZ2lzdGVyU2V0JiBz
ZXQpCisgICAgeworICAgICAgICBtX2Nsb2JiZXJlZC5tZXJnZShzZXQpOworICAgIH0KKworICAg
IGNvbnN0IFJlZ2lzdGVyU2V0JiBjbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb2JiZXJl
ZDsgfQorCisgICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9y
KQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVhdGVTaGFy
ZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IENoZWNrU3BlY2lhbDsKKyAgICBmcmllbmQgY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWw7CisgICAg
ZnJpZW5kIGNsYXNzIFN0YWNrbWFwU3BlY2lhbDsKKyAgICAKKyAgICB2b2lkKiBtX29wYXF1ZSB7
IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsKKyAgICBSZWZQdHI8R2Vu
ZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZDsKKyAgICBS
ZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7IC8vIFN0YWNrbWFwcyBjb3VsZCBiZSBmdXJ0aGVy
IGR1cGxpY2F0ZWQgYnkgQWlyLCBidXQgdGhhdCdzIHVubGlrZWx5LCBzbyB3ZSBqdXN0IG1lcmdl
IHRoZSB1c2VkIHJlZ2lzdGVycyBzZXRzIGlmIHRoYXQgd2VyZSB0byBoYXBwZW4uCit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDIyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2Vu
ZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworU3RhY2tt
YXBTcGVjaWFsOjpTdGFja21hcFNwZWNpYWwoKQoreworfQorCitTdGFja21hcFNwZWNpYWw6On5T
dGFja21hcFNwZWNpYWwoKQoreworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6cmVwb3J0VXNl
ZFJlZ2lzdGVycyhJbnN0JiBpbnN0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykK
K3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2tt
YXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgSW5zdCB0aGF0
IHVzZXMgdGhlIFN0YWNrbWFwU3BlY2lhbCBnZXRzIGR1cGxpY2F0ZWQsIHRoZW4gd2UgZW5kIHVw
IG1lcmdpbmcgdXNlZAorICAgIC8vIHJlZ2lzdGVyIHNldHMgZnJvbSBtdWx0aXBsZSBwbGFjZXMu
IFRoaXMgY3VycmVudGx5IHdvbid0IGhhcHBlbiBzaW5jZSBBaXIgZG9lc24ndCBoYXZlIHRhaWxk
dXAKKyAgICAvLyBvciB0aGluZ3MgbGlrZSB0aGF0LiBCdXQgbWF5YmUgZXZlbnR1YWxseSBpdCBj
b3VsZCBiZSBhIHByb2JsZW0uCisgICAgc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVycy5tZXJnZSh1
c2VkUmVnaXN0ZXJzKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6
ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5z
dC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisK
KyAgICByZXR1cm4gc3RhY2ttYXAtPmNsb2JiZXJlZCgpOworfQorCit2b2lkIFN0YWNrbWFwU3Bl
Y2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5z
aWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFt
YmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIFZhbHVlKiB2YWx1
ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUg
bm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRB
aXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9y
ZWRCM0FyZ3MpOworICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFy
Z3MgPT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAg
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25v
cmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUln
bm9yZWRCM0FyZ3NdOworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51
bUlnbm9yZWRBaXJBcmdzKTsKKworICAgICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNlLCBBcmc6
OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAgIH0KK30KKworYm9vbCBTdGFja21h
cFNwZWNpYWw6OmlzVmFsaWRJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVu
c2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QpCit7CisgICAgVmFsdWUq
IHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3Mg
aGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdu
b3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gbnVt
SWdub3JlZEIzQXJncyk7CisKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2tt
YXAoKTsKKworICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAvLyBGb3IgdGhlIEluc3QgdG8g
YmUgdmFsaWQsIGl0IG5lZWRzIHRvIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMu
CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2YWx1ZS0+
Y2hpbGRyZW4oKS5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAvLyBSZWdhcmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBz
b21lIGJhc2ljIHJlcXVpcmVtZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAgICAvLyBl
eGFtcGxlLCB5b3UgY2FuJ3QgaGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJp
ZmllcyB0aG9zZSBjb25kaXRpb25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1lbnQgdHlw
ZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1J
Z25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxk
KGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSAr
IG51bUlnbm9yZWRBaXJBcmdzXTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQo
KSkgeworICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1tOgorICAg
ICAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAg
Y2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICBicmVhazsgLy8gT0sKKyAgICAgICAgY2Fz
ZSBBcmc6OkFkZHI6CisgICAgICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAhPSBUbXAo
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJnOjpU
eXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAgICAgICAg
aWYgKCFhcmcuaXNUeXBlKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KworICAgIC8vIFRoZSBudW1iZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdyZWF0ZXIg
dGhhbiB0aGUgbnVtYmVyIG9mIEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChzdGFja21hcC0+bV9y
ZXBzLnNpemUoKSA8PSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkpOworCisgICAgLy8gVmVyaWZ5
IGFueSBleHBsaWNpdGx5IHN1cHBsaWVkIGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQg
aSA9IG51bUlnbm9yZWRCM0FyZ3M7IGkgPCBzdGFja21hcC0+bV9yZXBzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIFZhbHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBB
cmcmIGFyZyA9IGluc3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJB
cmdzXTsKKworICAgICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6QW55OgorICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3Zl
LgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3Rl
cjoKKyAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lz
dGVyOgorICAgICAgICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U3RhY2s6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJl
cHJlc2VudGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAg
ICAgICAgIGlmIChhcmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxp
ZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNp
Z25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJ
bnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0
Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKwor
ICAgIHVuc2lnbmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJB
cmdzICsgbnVtSWdub3JlZEIzQXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0
YWNrbWFwLT5tX3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVy
ZSB3YXMgbm8gY29uc3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIC8vIFdlIG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3Qg
YSB2YWxpZCBpbnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5z
bGF0ZXMgdG8gYSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFj
a21hcEFyZ0luZGV4XS5raW5kKCkgPT0gVmFsdWVSZXA6OkFueSkKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBl
bmRSZXBzSW1wbCgKKyAgICBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVt
SWdub3JlZEFyZ3MsIEluc3QmIGluc3QsIFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkKK3sKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQXJnczsgaSA8IGluc3QuYXJncy5zaXplKCk7
ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5z
dC5hcmdzW2ldKSk7Cit9CisKK1ZhbHVlUmVwIFN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKENv
ZGUmIGNvZGUsIGNvbnN0IEFyZyYgYXJnKQoreworICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewor
ICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWco
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6Oklt
bTY0OgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OmNvbnN0YW50KGFyZy52YWx1ZSgpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgIGlmIChhcmcuYmFzZSgp
ID09IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikpCisgICAgICAgICAgICByZXR1cm4g
VmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChhcmcuYmFzZSgp
ID09IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKyAgICAgICAg
cmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIFZhbHVlUmVwKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1N0YWNrbWFwU3BlY2lhbF9oCisjZGVmaW5lIEIzU3RhY2ttYXBTcGVjaWFsX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNT
dGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNl
IEFpciB7IGNsYXNzIENvZGU7IH0KKworLy8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNp
YWxzIHRoYXQgaGF2ZSBzdGFja21hcHMuIE5vdGUgdGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2tt
YXAgYnkKKy8vIGFza2luZyBmb3IgdGhlIEluc3QncyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmpl
Y3RzIGRvbid0IG5lZWQgdG8gZXZlbiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2tt
YXAuCisKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVi
bGljOgorICAgIFN0YWNrbWFwU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lh
bCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEFpcjo6SW5z
dCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQm
IGV4dHJhQ2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBvdmVycmlkZTsKKworICAgIC8vIE5vdGUg
dGhhdCB0aGlzIGRvZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVw
RHVtcEltcGwoKS4gV2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1w
bGVtZW50IHRoYXQuCisKKyAgICB2b2lkIGZvckVhY2hBcmdJbXBsKAorICAgICAgICB1bnNpZ25l
ZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAg
QWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNr
PiYpOworICAgIGJvb2wgaXNWYWxpZEltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRC
M0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmKTsK
KyAgICBib29sIGFkbWl0c1N0YWNrSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIz
QXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIHVu
c2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRoZSBJbnN0
J3MgYXJncywgc3RhcnRpbmcgd2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVuIHZlY3Rv
ci4KKyAgICB2b2lkIGFwcGVuZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmLCB1bnNp
Z25lZCBudW1JZ25vcmVkQXJncywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYpOworCisg
ICAgc3RhdGljIFZhbHVlUmVwIHJlcEZvckFyZyhBaXI6OkNvZGUmLCBjb25zdCBBaXI6OkFyZyYp
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNTdGFja21hcFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKyNk
ZWZpbmUgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgZ2VuZXJpYyB3cmFw
cGVyIGFyb3VuZCBsaXN0cyBvZiBmcmVxdWVudGVkIGJsb2Nrcywgd2hpY2ggZ2l2ZXMgeW91IGp1
c3QgdGhlIGJsb2Nrcy4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaywgdHlwZW5hbWUg
U3VjY2Vzc29yTGlzdD4KK2NsYXNzIFN1Y2Nlc3NvckNvbGxlY3Rpb24geworcHVibGljOgorICAg
IFN1Y2Nlc3NvckNvbGxlY3Rpb24oU3VjY2Vzc29yTGlzdCYgbGlzdCkKKyAgICAgICAgOiBtX2xp
c3QobGlzdCkKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVy
biBtX2xpc3Quc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYXQo
c2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgp
OyB9CisgICAgQmFzaWNCbG9jayomIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBh
dChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAg
ICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0
b3IoU3VjY2Vzc29yQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgc2l6ZV90IGluZGV4KQorICAgICAg
ICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pIC8vIGNvbnN0IGlzIHN0dXBpZCBhbnl3
YXkuCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9p
bmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbiogbV9jb2xsZWN0
aW9uOworICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7
IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCitwcml2YXRlOgorICAgIFN1Y2Nl
c3Nvckxpc3QmIG1fbGlzdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0
Y2hDYXNlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN3aXRjaENhc2U6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jYXNlVmFs
dWUsICItPiIsIG1fdGFyZ2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaENhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hDYXNlX2gK
KyNkZWZpbmUgQjNTd2l0Y2hDYXNlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRjaENhc2UoKQorICAg
IHsKKyAgICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVlLCBjb25zdCBGcmVx
dWVudGVkQmxvY2smIHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VWYWx1ZShjYXNlVmFsdWUpCisg
ICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3RhcmdldDsgfQorCisgICAgaW50NjRf
dCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1ZTsgfQorICAgIEZyZXF1ZW50
ZWRCbG9jayB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorICAgIEJhc2ljQmxv
Y2sqIHRhcmdldEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuYmxvY2soKTsgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGlu
dDY0X3QgbV9jYXNlVmFsdWU7CisgICAgRnJlcXVlbnRlZEJsb2NrIG1fdGFyZ2V0OworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hWYWx1ZTo6flN3aXRj
aFZhbHVlKCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSh1bnNp
Z25lZCBpbmRleCkKK3sKKyAgICBGcmVxdWVudGVkQmxvY2sgcmVzdWx0QmxvY2sgPSBtX3N1Y2Nl
c3NvcnNbaW5kZXhdOworICAgIGludDY0X3QgcmVzdWx0VmFsdWUgPSBtX3ZhbHVlc1tpbmRleF07
CisgICAgbV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0KCk7CisgICAgbV9z
dWNjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICBtX3ZhbHVlc1tpbmRleF0gPSBtX3ZhbHVlcy5s
YXN0KCk7CisgICAgbV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiBTd2l0Y2hDYXNl
KHJlc3VsdFZhbHVlLCByZXN1bHRCbG9jayk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFwcGVu
ZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3NvcnMu
YXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nlc3Nv
cnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVu
ZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVtcE1l
dGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRlc3RydWN0aXZlbHkg
b3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisgICAgb3V0LnByaW50KGxpc3RE
dW1wKCp0aGlzKSwgIiwgZmFsbFRocm91Z2ggPSAiLCBmYWxsVGhyb3VnaCgpKTsKK30KKworU3dp
dGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBjb25z
dCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGluZGV4
LCBTd2l0Y2gsIFZvaWQsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxU
aHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAorI2RlZmlu
ZSBCM1N3aXRjaFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Nv
bnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsg
cmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAg
Ly8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQg
bnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAg
Ly8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4
LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlc1tpbmRleF07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGNhc2VW
YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgRnJlcXVlbnRlZEJsb2Nr
IGZhbGxUaHJvdWdoKCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorICAg
IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFz
dCgpOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtQ2FzZVZhbHVl
cygpOyB9CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nlc3NvcihpbmRl
eCkpOworICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAg
IDogbV9zd2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTd2l0Y2hWYWx1ZSYgc3dpdGNo
VmFsdWUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dpdGNoVmFs
dWUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJh
dG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAg
ICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJp
dmF0ZToKKyAgICAgICAgY29uc3QgU3dpdGNoVmFsdWUqIG1fc3dpdGNoOworICAgICAgICB1bnNp
Z25lZCBtX2luZGV4OworICAgIH07CisKKyAgICB0eXBlZGVmIGl0ZXJhdG9yIGNvbnN0X2l0ZXJh
dG9yOworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgc2l6ZSgpKTsgfQorCisgICAgLy8gVGhpcyByZW1vdmVzIHRoZSBjYXNlIGFuZCByZW9yZGVy
cyB0aGluZ3MgYSBiaXQuIElmIHlvdSdyZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZyb20gMCB0byBO
LAorICAgIC8vIHRoZW4geW91IGNhbiBrZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlzIHNvIGxvbmcg
YXMgeW91IHJldmlzaXQgdGhpcyBzYW1lIGluZGV4ICh3aGljaCB3aWxsIG5vdworICAgIC8vIGNv
bnRhaW4gc29tZSBvdGhlciBjYXNlIHZhbHVlKS4gVGhpcyByZW1vdmVzIHRoZSBjYXNlIHRoYXQg
d2FzIHJlbW92ZWQuCisgICAgU3dpdGNoQ2FzZSByZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KTsK
KworICAgIHZvaWQgYXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJik7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpOwor
CisgICAgVmVjdG9yPGludDY0X3Q+IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTd2l0Y2hW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91Ymxl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gVHlwZSB7CisgICAgVm9pZCwKKyAg
ICBJbnQzMiwKKyAgICBJbnQ2NCwKKyAgICBEb3VibGUKK307CisKK2lubGluZSBib29sIGlzSW50
KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBJbnQzMiB8fCB0eXBlID09IEludDY0
OworfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlw
ZSA9PSBEb3VibGU7Cit9CisKK2lubGluZSBUeXBlIHBvaW50ZXJUeXBlKCkKK3sKKyAgICBpZiAo
aXMzMkJpdCgpKQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0OworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFBy
aW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpU
eXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1ZTo6flVw
c2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiXiIsIG1fcGhpLT5pbmRleCgpKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vw
c2lsb25WYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVXBzaWxvblZhbHVl
IDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29k
ZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9CisKKyAgICB+VXBzaWxvblZh
bHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkgY29uc3QgeyByZXR1cm4gbV9waGk7IH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIFVwc2ls
b25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1
ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwgdmFsdWUp
CisgICAgICAgICwgbV9waGkocGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBl
KCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0KKworICAgIFZhbHVlKiBtX3BoaTsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXNlQ291bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNVc2VDb3VudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXNlQ291bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitVc2VDb3VudHM6OlVzZUNvdW50cyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICA6IG1fY291
bnRzKHByb2NlZHVyZS52YWx1ZXMoKS5zaXplKCkpCit7CisgICAgZm9yIChWYWx1ZSogdmFsdWUg
OiBwcm9jZWR1cmUudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1
ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgIG1fY291bnRzW2NoaWxkXSsrOworICAgIH0KK30K
KworVXNlQ291bnRzOjp+VXNlQ291bnRzKCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVXNlQ291bnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVc2VDb3Vu
dHNfaAorI2RlZmluZSBCM1VzZUNvdW50c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgVXNlQ291bnRz
IHsKK3B1YmxpYzoKKyAgICBVc2VDb3VudHMoUHJvY2VkdXJlJik7CisgICAgflVzZUNvdW50cygp
OworCisgICAgdW5zaWduZWQgb3BlcmF0b3JbXShWYWx1ZSogdmFsdWUpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9jb3VudHNbdmFsdWVdOworICAgIH0KK3ByaXZhdGU6CisgICAgSW5k
ZXhNYXA8VmFsdWUsIHVuc2lnbmVkPiBtX2NvdW50czsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVXNlQ291
bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWxp
ZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lu
bGluZXMuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJp
bnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgewor
cHVibGljOgorICAgIFZhbGlkYXRlcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciog
d2hlbiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9j
ZWR1cmUpCisgICAgICAgICwgbV93aGVuKHdoZW4pCisgICAgICAgICwgbV9kdW1wQmVmb3JlKGR1
bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBWQUxJREFURShjb25kaXRpb24sIG1l
c3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAo
Y29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWlsKF9fRklMRV9fLCBfX0xJTkVfXywg
V1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisg
ICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBIYXNo
U2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7CisgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUlu
UHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5CbG9jazsKKworICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUpIHsKKyAgICAgICAgICAgIGJsb2Nr
cy5hZGQoYmxvY2spOworICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spCisg
ICAgICAgICAgICAgICAgdmFsdWVJbkJsb2NrLmFkZCh2YWx1ZSk7CisgICAgICAgIH0KKworICAg
ICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJlLnZhbHVlcygpKQorICAgICAgICAg
ICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsKKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6
IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJbkJsb2NrLmNvbnRhaW5z
KHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2
YWx1ZUluQmxvY2spCisgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyh2
YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2
YWx1ZUluUHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hp
bGRyZW4oKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyhj
aGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4iLCBwb2ludGVyRHVtcChjaGlsZCkpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2Nr
cygpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgIGJs
b2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaywgIi0+IiwgcG9pbnRlckR1
bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAvLyBGSVhNRTogRXhwYW5kIHRoaXMgdmFsaWRhdGlvbiBwaGFzZS4KKyAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ4MAorICAgIH0KKwor
cHJpdmF0ZToKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZmFpbCgKKyAgICAgICAg
Y29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlv
biwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAg
eworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAg
ICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkIzIFZBTElE
QVRJT04gRkFJTFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRp
b24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAg
IG91dC5wcmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgaWYgKG1fd2hl
bikKKyAgICAgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBEdXJpbmcgIiwgbV93aGVuLCAiXG4i
KTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmluZygpOworICAgICAg
ICB9CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1
bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkJlZm9yZSAiLCBtX3doZW4sICI6XG4i
KTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAgICAg
ICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhtX3By
b2NlZHVyZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdU
RlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBj
b25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1cmUm
IG1fcHJvY2VkdXJlOworICAgIGNvbnN0IGNoYXIqIG1fd2hlbjsKKyAgICBjb25zdCBjaGFyKiBt
X2R1bXBCZWZvcmU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxp
ZGF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogd2hlbiwgY29uc3QgY2hhciog
ZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKHByb2NlZHVyZSwgd2hlbiwg
ZHVtcEJlZm9yZSk7CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbGlk
YXRlX2gKKyNkZWZpbmUgQjNWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCit2b2lkIHZh
bGlkYXRlKFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIHdoZW4gPSBudWxscHRyLCBjb25zdCBjaGFy
KiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsaWRhdGVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQ
cmludGVyLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjb25zdCBjaGFyKiBjb25zdCBWYWx1ZTo6ZHVtcFBy
ZWZpeCA9ICJAIjsKKworVmFsdWU6On5WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxh
Y2VXaXRoSWRlbnRpdHkoVmFsdWUqIHZhbHVlKQoreworICAgIC8vIFRoaXMgaXMgYSBiaXQgY3Jh
enkuIEl0IGRvZXMgYW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQgb2Ygd2hhdGV2ZXIgVmFsdWUgc3Vi
Y2xhc3MgdGhpcyBpcyB3aXRoCisgICAgLy8gYSBwbGFpbiBJZGVudGl0eSBWYWx1ZS4gV2UgZmly
c3QgY29sbGVjdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQsIHRoZW4gd2UgZGVzdHJ1
Y3QgdGhlCisgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFuZCB0aGVuIHdlIGNvbnN0
cnVjdCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCisKKyAgICB1bnNpZ25lZCBpbmRleCA9
IG1faW5kZXg7CisgICAgVHlwZSB0eXBlID0gbV90eXBlOworICAgIE9yaWdpbiBvcmlnaW4gPSBt
X29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworICAgIFZhbHVl
KiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworCisgICAgUkVMRUFTRV9BU1NFUlQo
dHlwZSA9PSB2YWx1ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKwor
ICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIElkZW50aXR5LCB0eXBlLCBvcmlnaW4sIHZhbHVl
KTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSBy
ZXBsYWNlbWVudDsKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhOb3AoKQoreworICAgIHVu
c2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47Cisg
ICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1ZSogcmVwbGFjZW1l
bnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKworICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKwor
ICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIE5vcCwgVm9pZCwgb3JpZ2luKTsKKworICAgIHRo
aXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsK
K30KKwordm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0
aGlzLCAiID0gIiwgbV9vcGNvZGUpOworCisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQ
cmludGVyIGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOworCisgICAgU3RyaW5nUHJp
bnRTdHJlYW0gc3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmlu
ZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgo
KSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOworCisgICAgb3V0LnByaW50KCIp
Iik7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3QKK3sKK30K
KworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCkK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgY2FzZSBB
ZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBNdWw6CisgICAgY2FzZSBEaXY6CisgICAgY2Fz
ZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFuZDoKKyAgICBjYXNlIEJp
dE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgU2hsOgorICAgIGNhc2UgU1NocjoKKyAg
ICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAg
IGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiBmaXJzdENoaWxkLT50eXBlKCk7CisgICAg
Y2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJldHVybiBwb2ludGVyVHlwZSgpOworICAgIGNh
c2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBF
cXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBH
cmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoK
KyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgor
ICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIGNhc2UgU0V4
dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7CisgICAgY2FzZSBG
Um91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gRG91YmxlOworICAgIGNhc2Ug
Tm9wOgorICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBC
M1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNp
bmNsdWRlICJCM09wY29kZS5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNU
eXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29w
eWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2lj
QmxvY2s7CitjbGFzcyBTdGFja21hcDsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgVmFsdWUg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSosIDM+IEFkamFjZW5j
eUxpc3Q7CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAg
IHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0
dWFsIH5WYWx1ZSgpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4OyB9CisgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNvZGUgaXMgaW1tdXRhYmxlLCBl
eGNlcHQgZm9yIHJlcGxhY2luZyB2YWx1ZXMgd2l0aCBpZGVudGl0eS4KKyAgICBPcGNvZGUgb3Bj
b2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNvZGU7IH0KKworICAgIE9yaWdpbiBvcmlnaW4oKSBj
b25zdCB7IHJldHVybiBtX29yaWdpbjsgfQorICAgIAorICAgIFZhbHVlKiYgY2hpbGQodW5zaWdu
ZWQgaW5kZXgpIHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisgICAgVmFsdWUqIGNoaWxk
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorCisg
ICAgLy8gVGhpcyBjb21wdXRlcyB0aGUgdHlwZSB1c2luZyB0aGUgb3Bjb2RlLgorICAgIFR5cGUg
dHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorCisgICAgLy8gVGhpcyBpcyB1c2VmdWwg
d2hlbiBsb3dlcmluZy4gTm90ZSB0aGF0IHRoaXMgaXMgb25seSB2YWxpZCBmb3Igbm9uLXZvaWQg
dmFsdWVzLgorICAgIEFpcjo6QXJnOjpUeXBlIGFpclR5cGUoKSBjb25zdCB7IHJldHVybiBBaXI6
OkFyZzo6dHlwZUZvckIzVHlwZSh0eXBlKCkpOyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGls
ZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYg
Y2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxh
Y2VXaXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAgICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKKyAgICAvLyBUaGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZv
ciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBkbyBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBo
YXZlIGEKKyAgICAvLyBBcmd1bWVudFJlZ1ZhbHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAg
Ly8gaWYgKEFyZ3VtZW50UmVnVmFsdWUqIGFyZ3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50
UmVnVmFsdWU+KCkpIHsKKyAgICAvLyAgICAgdGhpbmdzCisgICAgLy8gfQorICAgIC8vCisgICAg
Ly8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlmIHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcu
IFRoaXMgd29ya3MgYmVjYXVzZSB0aGlzIHJldHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFj
Y2VwdHMob3Bjb2RlKCkpIHJldHVybnMgZmFsc2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBUKiBhcygpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMo
KSBjb25zdDsKKyAgICAKKyAgICBib29sIGhhc0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBh
c0ludDMyKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGlu
dDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAgICBp
bnQ2NF90IGFzSW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBjb25z
dDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91YmxlIGFzRG91YmxlKCkg
Y29uc3Q7CisKKyAgICBTdGFja21hcCogc3RhY2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAgIHZp
cnR1YWwgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCitwcm90ZWN0ZWQ6CisgICAgLy8gSW5zdGFu
dGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUuCisgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNw
ZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29w
Y29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4o
b3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9
CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5
cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVuOgorICAgIGV4cGxp
Y2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShv
cGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2lu
KQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRo
YXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJz
dENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgp
CisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9w
Y29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAs
IG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAg
ICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIg
dHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBh
bnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAg
ICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVs
bHB0cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8g
VXNlIHRoaXMgZm9ybSBmb3IgdmFyYXJncy4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGph
Y2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAs
IG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29y
aWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikKKyAgICB7CisgICAg
fQorCitwcml2YXRlOgorICAgIHN0YXRpYyBUeXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSogZmly
c3RDaGlsZCk7CisKKyAgICAvLyBUaGlzIGdyb3VwIG9mIGZpZWxkcyBpcyBhcnJhbmdlZCB0byBm
aXQgaW4gNjQgYml0cy4KKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIE9wY29kZSBtX29wY29k
ZTsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICAKKyAgICBPcmlnaW4gbV9vcmlnaW47CisgICAgQWRq
YWNlbmN5TGlzdCBtX2NoaWxkcmVuOworCitwdWJsaWM6CisgICAgQmFzaWNCbG9jayogb3duZXIg
eyBudWxscHRyIH07IC8vIGNvbXB1dGVkIGxhemlseS4KKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQg
eyBudWxscHRyIH07IC8vIHVzZWQgZm9yIGFuYWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCit9
OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKGNv
bnN0IFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgY29uc3QgVmFsdWUqIG1fdmFsdWU7Cit9OworCitpbmxpbmUgRGVlcFZhbHVlRHVt
cCBkZWVwRHVtcChjb25zdCBWYWx1ZSogdmFsdWUpCit7CisgICAgcmV0dXJuIERlZXBWYWx1ZUR1
bXAodmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNkZWZpbmUgQjNWYWx1ZUlubGluZXNfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
Q29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJC
M0NvbnN0RG91YmxlVmFsdWUuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+CitUKiBWYWx1ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRz
KG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICBy
ZXR1cm4gbnVsbHB0cjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVl
OjphcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8
VD4oKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gISFhczxDb25zdDMyVmFsdWU+KCk7Cit9CisKK2lubGluZSBpbnQzMl90IFZhbHVlOjph
c0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgp
OworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVy
biAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW5saW5lIGludDY0X3QgVmFsdWU6OmFzSW50
NjQoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdDY0VmFsdWU+KCktPnZhbHVlKCk7Cit9
CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJ
bnQzMigpIHx8IGhhc0ludDY0KCk7Cit9CisKK2lubGluZSBpbnQ2NF90IFZhbHVlOjphc0ludCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7
Cit9CisKK2lubGluZSBib29sIFZhbHVlOjppc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdAorewor
ICAgIHJldHVybiBoYXNJbnQoKSAmJiBhc0ludCgpID09IHZhbHVlOworfQorCitpbmxpbmUgYm9v
bCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdERvdWJs
ZVZhbHVlPigpOworfQorCitpbmxpbmUgZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGFzPENvbnN0RG91YmxlVmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2lubGlu
ZSBTdGFja21hcCogVmFsdWU6OnN0YWNrbWFwKCkKK3sKKyAgICBpZiAoQ2hlY2tWYWx1ZSogY2hl
Y2sgPSBhczxDaGVja1ZhbHVlPigpKQorICAgICAgICByZXR1cm4gJmNoZWNrLT5zdGFja21hcDsK
KyAgICBpZiAoUGF0Y2hwb2ludFZhbHVlKiBwYXRjaHBvaW50ID0gYXM8UGF0Y2hwb2ludFZhbHVl
PigpKQorICAgICAgICByZXR1cm4gJnBhdGNocG9pbnQtPnN0YWNrbWFwOworICAgIHJldHVybiBu
dWxscHRyOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVSZXA6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsK
KyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgQW55OgorICAgIGNhc2UgU29tZVJlZ2lz
dGVyOgorICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAgb3V0LnBy
aW50KCIoIiwgcmVnKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgor
ICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zm
c2V0RnJvbVNQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50Ogor
ICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1ZSgpLCAiKSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6
QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZVJlcDo6S2lu
ZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgVmFsdWVSZXA6OkFueToK
KyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFs
dWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICBv
dXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVw
OjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFj
a0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFu
dDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdGFudCIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlUmVw
X2gKKyNkZWZpbmUgQjNWYWx1ZVJlcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1c2UgdGhpcyBjbGFzcyB0byBkZXNjcmliZSB2YWx1
ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2ttYXBzLiBJdCdzIHVzZWQgYm90aCB0byBmb3JjZSBh
CisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8gZ2V0IHRoZSByZXByZXNlbnRhdGlvbi4gV2hlbiB0
aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJlc2VudGF0aW9uLCB3ZSBzYXkKKy8vIHRoYXQgaXQn
cyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0aGUgY2xpZW50IHdoYXQgcmVwcmVzZW50YXRpb24g
aXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdzIGFuCisvLyBvdXRwdXQuCisKK2NsYXNzIFZhbHVl
UmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtpbmQgeworICAgICAgICAvLyBBcyBhbiBpbnB1dCBy
ZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIGNhbiBwaWNrIGFueSByZXByZXNlbnRh
dGlvbi4gQXMgYW4KKyAgICAgICAgLy8gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5z
IHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3aWxsIG9ubHkgYXJpc2UgZm9yIHRoZQorICAgICAg
ICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNoaWxkKDEpKSBvZiBhIENoZWNrTXVsLgorICAgICAg
ICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVh
bnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBhCisgICAg
ICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBjbGFpbXMgdG8gY2xvYmJlciEKKyAgICAgICAgU29t
ZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlz
IGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0ZXIuIEFzIGFuIG91dHB1dAorICAgICAgICAvLyBy
ZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tlZC4KKyAg
ICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9u
LCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90IGEgdmFs
aWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgIFN0YWNrLAorCisg
ICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0aGUgdmFs
dWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVudCBhcmVhIGF0IHNvbWUKKyAgICAgICAgLy8gb2Zm
c2V0LgorICAgICAgICAvLyBGSVhNRTogVGhlIFN0YWNrbWFwU3BlY2lhbCBjbGFzcyBuZWVkcyB0
byBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0IHRoZXNlIGRvbid0IHR1cm4gaW50bworICAgICAg
ICAvLyBBaXIgb3BlcmFuZHMuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTA1NDAKKyAgICAgICAgU3RhY2tBcmd1bWVudCwKKworICAgICAgICAv
LyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgdGhhdCBCMyBjb25z
dGFudC1mb2xkZWQgdGhlIHZhbHVlLgorICAgICAgICBDb25zdGFudAorICAgIH07CisgICAgCisg
ICAgVmFsdWVSZXAoKQorICAgICAgICA6IG1fa2luZChBbnkpCisgICAgeworICAgIH0KKworICAg
IGV4cGxpY2l0IFZhbHVlUmVwKFJlZyByZWcpCisgICAgICAgIDogbV9raW5kKFJlZ2lzdGVyKQor
ICAgICAgICAsIG1fdmFsdWUocmVnLmluZGV4KCkpCisgICAgeworICAgIH0KKworICAgIHN0YXRp
YyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChy
ZWcpOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFjayhpbnRwdHJfdCBvZmZzZXRG
cm9tRlApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tRlA7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNr
QXJndW1lbnQoaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2tBcmd1bWVudDsKKyAgICAgICAg
cmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tU1A7CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGludDY0X3QgdmFsdWUpCisgICAg
eworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25z
dGFudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnREb3VibGUoZG91Ymxl
IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFudChiaXR3aXNl
X2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7
IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBraW5kKCkgIT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpm
cm9tSW5kZXgobV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0
cl90IG9mZnNldEZyb21TUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09
IFN0YWNrQXJndW1lbnQpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1f
dmFsdWUpOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGtpbmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOwor
ICAgIH0KKworICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7Cisg
ICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25h
bWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIz
OjpWYWx1ZVJlcDo6S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9t
YXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQ4IEBACisjIS91c3IvYmluL2Vu
diBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJ
VFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUg
InBhdGhuYW1lIgorCiskdmFySW5kZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9
IDEKKyAgICAiX3RtcCN7JHZhckluZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAg
YXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2Rl
LCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBj
aGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUK
KyAgICAgICAgQGFub255bW91cyA9IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTld
KylcWi8pCisgICAgICAgIEB2YXJOYW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4g
L1xBXCQvID8gJCcgOiBuYW1lCisgICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNo
aWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFz
T3Bjb2RlCisgICAgICAgIG9wY29kZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFy
aWFibGUoJnByb2MpCisgICAgICAgIGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAg
ICAgICB8IGNoaWxkLCBpbmRleCB8CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAg
ICAgICAgICAgICAgY2hpbGQubmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUs
CisgICAgICAgICAgICAgICAgICBjaGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFu
b25JbnRlcm5hbCA6IDphbm9uT3BlcmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDog
Om9wZXJhbmQpLAorICAgICAgICAgICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVh
Y2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNo
ZXIKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlh
bGl6ZShuYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBw
cm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisg
ICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0
aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFt
ZQorICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBk
ZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2Vu
ZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAK
KyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9y
aWdpbgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09
KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmlu
ZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBv
dGhlcgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAg
ICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAg
ICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBk
ZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAg
ICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAg
ICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5h
bWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVt
YmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAg
ICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisg
ICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAg
ICAgICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpB
LVowLTlfXSopLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZp
bGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAg
ICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLwor
ICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5l
TnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJv
ciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVk
IHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0
ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3
b3JkKHRva2VuKQorICAgICMgV2UgY2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdv
cmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2Vu
ID1+IC9cQSgobWF0Y2hlcil8KGluY2x1ZGUpKVxaLworZW5kCisKK2RlZiBpc0lkZW50aWZpZXIo
dG9rZW4pCisgICAgdG9rZW4gPX4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopXFovIGFu
ZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0
aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVO
YW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAg
IEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHgg
Kz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlm
IHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBl
bHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNl
ICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0i
CisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3Vt
ZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVz
cyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNv
bnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBw
YXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1
bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYg
YWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwcm9kdWN0aW9uKQorICAgICAgICBpZiBuYW1l
ID09IHByb2R1Y3Rpb24udmFyTmFtZQorICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2hpbGQgcHJv
ZHVjdGlvbiBoYXMgc2FtZSBuYW1lIGFzIHBhcmVudCBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5k
CisgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09
IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJv
ZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9u
CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgY29uc3VtZSgibWF0Y2hlciIpCisK
KyAgICAgICAgbWF0Y2hlck5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIHByb2R1
Y3Rpb25zID0gW10KKworICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHgg
Pj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgIyBXZSBtaWdodCB3YW50IHRvIHN1cHBv
cnQgImluY2x1ZGUiLiBJZiB3ZSBkaWQgdGhhdCwgaXQgd291bGQgZ28gaGVyZS4KKyAgICAgICAg
ICAgIHByb2R1Y3Rpb24gPSBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVj
dGlvbi5uYW1lIH0KKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVj
dGlvbiIpCisgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJv
ZHVjdGlvbgorICAgICAgICB9CisKKyAgICAgICAgTWF0Y2hlci5uZXcobWF0Y2hlck5hbWUsIHBy
b2R1Y3Rpb25zKQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlUHJvZHVjdGlvbgorICAgICAgICBv
cmlnaW4gPSB0b2tlbi5vcmlnaW4KKyAgICAgICAgbmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisK
KyAgICAgICAgaWYgdG9rZW4gPT0gIj0iCisgICAgICAgICAgICBjb25zdW1lKCI9IikKKyAgICAg
ICAgICAgIG9wY29kZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICBjb25zdW1lKCIo
IikKKyAgICAgICAgZWxzaWYgdG9rZW4gPT0gIigiCisgICAgICAgICAgICBjb25zdW1lKCIoIikK
KyAgICAgICAgICAgIG9wY29kZSA9IG5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBuaWwKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwg
bmlsLCBuaWwpCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBb
XQorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorCisg
ICAgICAgICAgICBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHBhcnNlUHJvZHVjdGlvbikK
KworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisgICAgICAgICAgICBjb25zdW1l
KCIsIikKKyAgICAgICAgfQorCisgICAgICAgICMgQWR2YW5jZSBhZnRlciB0aGUgIikiCisgICAg
ICAgIGFkdmFuY2UKKworICAgICAgICBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG9wY29k
ZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCitlbmQKKworZmlsZU5hbWUgPSBBUkdWWzBdCisKK3Bh
cnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoZmlsZU5hbWUpLCBmaWxlTmFtZSkKK21hdGNoZXIg
PSBwYXJzZXIucGFyc2UKKworY2xhc3MgU3ViTWF0Y2gKKyAgICBhdHRyX3JlYWRlciA6aW5kZXhN
YXAsIDpwcm9kdWN0aW9ucworICAgIAorICAgIGRlZiBpbml0aWFsaXplKGluZGV4TGlzdCwgcHJv
ZHVjdGlvbnMpCisgICAgICAgIEBpbmRleE1hcCA9IFtdCisgICAgICAgIEBwcm9kdWN0aW9ucyA9
IFtdCisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAg
ICAgICAgICAgQGluZGV4TWFwIDw8IGluZGV4CisgICAgICAgICAgICBAcHJvZHVjdGlvbnMgPDwg
cHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKKworICAgIGRlZiBtYXBJbmRl
eExpc3QoaW5kZXhMaXN0KQorICAgICAgICBpbmRleExpc3QubWFwIHsKKyAgICAgICAgICAgIHwg
aW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwW2luZGV4XQorICAgICAgICB9CisgICAgZW5k
CitlbmQKKworRmlsZS5vcGVuKCJCMyIgKyBtYXRjaGVyLm5hbWUgKyAiLmgiLCAidyIpIHsKKyAg
ICB8IG91dHAgfAorCisgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGF0
dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorCisgICAg
b3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgb3V0cC5wdXRzICIj
ZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAgCisgICAgb3V0cC5wdXRzICIjaW5jbHVk
ZSBcIkIzVmFsdWUuaFwiIgorICAgIAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9y
PiIKKyAgICBvdXRwLnB1dHMgInZvaWQgcnVuI3ttYXRjaGVyLm5hbWV9KFZhbHVlKiBfdmFsdWUs
IEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91dHAucHV0cyAieyIKKworICAgICMgTm90ZSB0aGF0
IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBiZWNhdXNlIGl0J3Mg
YSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91CisgICAgIyB3YW50IHRvIHNlZSB0aGUgY29kZSBu
aWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGluIGEgZ29vZCB0ZXh0IGVkaXRvciBhbmQgYXNrIGl0
IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlvdS4KKworICAgICMgSW4gb2RkIHNpdHVhdGlvbnMs
IHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hp
bGwgb3V0IGFib3V0IGl0LgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKF92YWx1ZSk7Igor
ICAgICAgICAKKyAgICAjIFRoaXMganVzdCBwcm90ZWN0cyB0aGUgY2FsbGVyIGZyb20gaGF2aW5n
IHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25zIGhhdmluZyBkaWZmZXJlbnQgbGVuZ3Rocy4KKyAg
ICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAg
aW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7Cisg
ICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlz
dHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uY2hpbGRyZW4ubGVuZ3Ro
ID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0
c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExp
c3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgaW5k
ZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGxl
bmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAg
ICAgICBpZiBsZW5ndGggPiAwCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t2YWx1
ZU5hbWV9LT5jaGlsZHJlbigpLnNpemUoKSA+PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAg
ICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3Rz
IGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1
Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2Yg
dGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25z
aWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUg
Y29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1h
dGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVl
TmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9u
cyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVj
dGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisg
ICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1
Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0
aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2Rl
CisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVu
ZAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNo
aW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0
aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3Rz
LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVj
dGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ug
c3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAg
ICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsK
KyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1
Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBz
W3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1
Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
c3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vw
cy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0
IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAg
ICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJv
ZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFt
ZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4
TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMp
CisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5w
cm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAg
ICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAg
ICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNh
bWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1
Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZh
bHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRl
eCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgw
Li4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAg
ZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAu
cHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVl
TmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVz
ZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisg
ICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAor
ICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8
IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRl
eF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUs
IHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAg
ICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAg
ICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywg
Y29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAg
ICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAg
ICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAg
ICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAg
ICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQg
dGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBv
cGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1
Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAg
ICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7
CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1
Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIu
cHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICBpbmRleExpc3Qu
ZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBt
YXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVl
OyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7cHJvZHVjdGlvbi52YXJO
YW1lfSk7IgorICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAg
b3BlcmFuZEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICB0cnlBcmd1bWVudHMgPSBbXQorICAg
ICAgICAgICAgbnVtU2NvcGVzID0gMAorICAgICAgICAgICAgc2VlbiA9IHt9CisKKyAgICAgICAg
ICAgICMgRklYTUU6IFdlIHdhbnQgdG8gYmUgYWJsZSB0byBjb21iaW5lIHBhdHRlcm4gbWF0Y2hl
cnMsIGxpa2UgaGF2ZSB0aGUgcGF0dGVybiBtYXRjaCBydWxlCisgICAgICAgICAgICAjIGZvciBC
cmFuY2ggaW4gdGhlIGxvd2VyaW5nIHBhdGNoZXIgZGVsZWdhdGUgdG8gYSBtYXRjaGVyIHRoYXQg
Y2FuIGRlZHVjZSB0aGUga2luZCBvZgorICAgICAgICAgICAgIyBjb21wYXJpc29uIHRoYXQgd2Un
cmUgZG9pbmcuIFdlIGNvdWxkIHRoZW4gcmV1c2UgdGhhdCBsYXR0ZXIgbWF0Y2hlciBmb3IgQ2hl
Y2sgYW5kCisgICAgICAgICAgICAjIHVuZnVzZWQgY29tcGFyZS4gVGhlIGtleSB0byBtYWtpbmcg
c3VjaCBhIGRlbGVnYXRpb24gd29yayBpcyB0byBoYXZlIHRoZSBpbm5lciBtYXRjaGVyCisgICAg
ICAgICAgICAjICh0aGUgY29tcGFyaXNvbiBtYXRjaGVyIGluIHRoaXMgY2FzZSkga2VlcCBjYXNj
YWRpbmcgaWYgaXQgZW5jb3VudGVycyBhIHJ1bGUgdGhhdAorICAgICAgICAgICAgIyBwcm9kdWNl
cyBzb21ldGhpbmcgdGhhdCB0aGUgb3V0ZXIgbWF0Y2hlciBjYW5ub3QgaGFuZGxlLiBJdCdzIG5v
dCBvYnZpb3VzIHRoYXQgdGhlCisgICAgICAgICAgICAjIGNvbXBhcmlzb24gbWF0Y2hlciB3b3Vs
ZCBuZWVkIHRoaXMsIGJ1dCB0aGUgYWRkcmVzcyBtYXRjaGVyIHByb2JhYmx5IHdpbGwuIEZvciBl
eGFtcGxlLAorICAgICAgICAgICAgIyB3ZSBtYXkgaGF2ZSBhIFN0b3JlQWRkTG9hZCBydWxlIHRo
YXQgZGVsZWdhdGVzIHRvIHRoZSBhZGRyZXNzIG1hdGNoZXIsIGFuZCB0aGUgYWRkcmVzcworICAg
ICAgICAgICAgIyBtYXRjaGVyIG1heSBwcm9kdWNlIGFuIGFkZHJlc3MgdGhhdCB0aGUgbG93ZXJp
bmcgbWF0Y2hlciBjYW5ub3QgdXNlIGJlY2F1c2Ugd2hpbGUgdGhlCisgICAgICAgICAgICAjIEFk
ZCBmb3JtIGRvZXMgYWNjZXB0IGFkZHJlc3NlcyBpdCBtYXkgbm90IGFjY2VwdCB0aGUgcGFydGlj
dWxhciBhZGRyZXNzIHRoYXQgdGhlCisgICAgICAgICAgICAjIGFkZHJlc3MgbWF0Y2hlciBwcm9k
dWNlZC4gSW4gdGhhdCBjYXNlLCBpbnN0ZWFkIG9mIGdpdmluZyB1cCBvbiB0aGUgU3RvcmVBZGRM
b2FkIHJ1bGUsCisgICAgICAgICAgICAjIHdlIHdhbnQgdGhlIGFkZHJlc3MgbWF0Y2hlciB0byBq
dXN0IHRyeSBhIGRpZmZlcmVudCBhZGRyZXNzLiBUaGUgY29tcGFyaXNvbiBtYXRjaGVyCisgICAg
ICAgICAgICAjIG1pZ2h0IHdhbnQgdGhpcyBqdXN0IGZvciBiZXR0ZXIgY29udHJvbGxpbmcgd2hl
biB0byBwaW4gdmFyaWFibGVzLiBDdXJyZW50bHksIGlmIGl0CisgICAgICAgICAgICAjIGNvbnN0
cnVjdGVkIHNvbWUgY29kZSwgaXQgd291bGQgYWxzbyBwaW4gdGhlIHZhcmlhYmxlcyB0aGF0IGl0
IHVzZWQuIElmIHRoZSBsb3dlcmluZworICAgICAgICAgICAgIyBtYXRjaGVyIHRoZW4gZGVjaWRl
ZCB0byByZWplY3QgdGhlIGNvZGUgY3JlYXRlZCBieSB0aGUgY29tcGFyaXNvbiBtYXRjaGVyLCBp
dCB3b3VsZAorICAgICAgICAgICAgIyBoYXZlIGEgaGFyZCB0aW1lICJ1bnBpbm5pbmciIHRob3Nl
IHZhcmlhYmxlcy4gQnV0IGlmIHdlIGhhZCBzb21lIGtpbmQgb2YgZGVsZWdhdGlvbiwgd2UKKyAg
ICAgICAgICAgICMgY291bGQgaGF2ZSB0aGUgcGlubmluZyBvZiB0aGUgY29tcGFyaXNvbiBtYXRj
aGVyIGhhcHBlbiBvbmx5IGlmIHRoZSBsb3dlcmluZyBtYXRjaGVyCisgICAgICAgICAgICAjIGFj
Y2VwdGVkLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBUaGlzIGNvdWxkIGFsbCBiZSBh
Y2NvbXBsaXNoZWQgYnkgaGF2aW5nIHRyeUJsYWgoKSByZXR1cm4gc29tZXRoaW5nLCBhbmQgaGF2
ZSB0aGUKKyAgICAgICAgICAgICMgbWF0Y2hlciBhbHNvIHRha2UgYSBmdW5jdG9yIGFyZ3VtZW50
IHRoYXQgYWNjZXB0cyB3aGF0IHRyeUJsYWgoKSByZXR1cm5zLiBTbyBpbnN0ZWFkIG9mCisgICAg
ICAgICAgICAjCisgICAgICAgICAgICAjIGlmICh0cnlCbGFoKCkpIG9rOworICAgICAgICAgICAg
IworICAgICAgICAgICAgIyBXZSB3b3VsZCBoYXZlOgorICAgICAgICAgICAgIworICAgICAgICAg
ICAgIyBpZiAoZnVuY3Rvcih0cnlCbGFoKCkpIG9rOworICAgICAgICAgICAgIworICAgICAgICAg
ICAgIyBXaGVuIGxvd2VyaW5nIGRlY2lkZWQgdG8gZGVsZWdhdGUgdG8gdGhlIGFkZHJlc3Mgb3Ig
Y29tcGFyaXNvbiBtYXRjaGVyLCBpdCBjb3VsZCBzdXBwbHkKKyAgICAgICAgICAgICMgYSBmdW5j
dG9yIHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRoZSB0aGluZyB0aGF0IHRoZSBzdWItbWF0Y2hlciBz
ZWxlY3RlZCBpcyBpbmRlZWQKKyAgICAgICAgICAgICMgdXNlZnVsLgorICAgICAgICAgICAgIwor
ICAgICAgICAgICAgIyBJbiB0aGUgbmVhciB0ZXJtLCB3ZSBwcm9iYWJseSB3b24ndCBuZWVkIHRo
aXMuIEJ1dCB3ZSB3aWxsIGRlZmluaXRlbHkgbmVlZCBpdCBhcyB3ZQorICAgICAgICAgICAgIyBl
eHBhbmQgdG8gZWZmaWNpZW50bHkgc3VwcG9ydCBtb3JlIHBsYXRmb3Jtcy4gT24gWDg2XzY0LCBh
bnkgYnJhbmNoaW5nIGluc3RydWN0aW9uIGlzCisgICAgICAgICAgICAjIHVzYWJsZSBpbiBhbnkg
Y29udGV4dCwgYW5kIGFueSBhZGRyZXNzIHNob3VsZCBiZSB1c2FibGUgaW4gYW55IGNvbnRleHQg
KGFuZCB0aGUgb25seQorICAgICAgICAgICAgIyBjYXNlcyB3aGVyZSBpdCB3b3VsZG4ndCBiZSBp
cyBpZiB3ZSBoYXZlIGhvbGVzIGluIHRoZSBNYWNyb0Fzc2VtYmxlcikuCisgICAgICAgICAgICAj
CisgICAgICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA1NTkKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUg
eworICAgICAgICAgICAgICAgIHwgcGFyZW50VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5h
bWUsIGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZh
ck5hbWV9LT5jaGlsZCgje2luZGV4fSkiCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgaWYgc2VlbltjaGlsZFZhck5hbWVdCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1Zh
cgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRF
eHByfTsiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2No
aWxkVmFyTmFtZX0pIHsiCisgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0g
PSB0cnVlCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFtZX0gPSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAg
ICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIgZ2V0dGluZyByaWQgb2YgdGhlICQgcHJlZml4Lgor
ICAgICAgICAgICAgICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA1MjcKKyAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFt
ZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhh
c0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAg
ICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNo
aWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBvciBraW5kID09IDphbm9uSW50ZXJuYWwK
KyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYg
a2luZCA9PSA6b3BlcmFuZCBvciBraW5kID09IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAg
ICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9y
IGtpbmQgPT0gOm9wZXJhbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFkYXB0b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAg
ICAgICAgICAgdW5sZXNzIGludGVybmFsQXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAg
IG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJndW1l
bnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVz
cyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYg
YWRhcHRvci5hY2NlcHRPcGVyYW5kcygiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsg
IikiKQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3Iu
dHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1bWVudHMuam9pbigiLCAiKSArICIpKSB7
IikKKyAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2NlcHRSb290TGF0ZShfdmFsdWUp
OyIKKyAgICAgICAgICAgIHVubGVzcyBpbnRlcm5hbEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJu
YWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJhZGFwdG9yLmFjY2VwdE9wZXJhbmRzTGF0ZSgiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2lu
KCIsICIpICsgIik7IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgInJl
dHVybjsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBudW1TY29wZXMu
dGltZXMgeworICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRw
LnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMg
In0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAg
ICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
QjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFs
dWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSW5pdGlh
bGl6ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5r
QnVmZmVyLmgiCisjaW5jbHVkZSAiVk0uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK3VzaW5n
IG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKworbmFtZXNwYWNlIHsK
KworLy8gTm90aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBqdXN0IHVzZSB0aGUgZXhpc3RpbmcgV1RG
IGFzc2VydGlvbiBtYWNoaW5lcnkuCisjZGVmaW5lIENIRUNLKHgpIFJFTEVBU0VfQVNTRVJUKHgp
CisKK1ZNKiB2bTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorVCBjb21waWxlQW5kUnVuKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQoreworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIGdlbmVyYXRlKHByb2Nl
ZHVyZSwgaml0KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIp
OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERShsaW5rQnVm
ZmVyLCAoInRlc3RiMyIpKTsKKyAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3
aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVz
cygpKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKK30KKwordm9pZCB0ZXN0
NDIoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGNvbnN0NDIgPSByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9s
VmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNvbnN0NDIpOworCisgICAgQ0hFQ0soY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MpID09IDQyKTsKK30KKworI2RlZmluZSBSVU4odGVzdCkgZG8g
eyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRhTG9nKCN0ZXN0ICI6XG4i
KTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZXN0OyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRhTG9nKCIgICAgT0shXG4iKTsgICAgICAgICAg
ICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKTsKKwordm9pZCBydW4oKQoreworICAgIEpT
Qzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFw
KS5sZWFrUmVmKCk7CisKKyAgICBSVU4odGVzdDQyKCkpOworfQorCit9IC8vIGFub255bW91cyBu
YW1lc3BhY2UKKworI2Vsc2UgLy8gRU5BQkxFKEIzX0pJVCkKKworc3RhdGljIHZvaWQgcnVuKCkK
K3sKKyAgICBkYXRhTG9nKCJCMyBKSVQgaXMgbm90IGVuYWJsZWQuXG4iKTsKK30KKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sK
KyAgICBVTlVTRURfUEFSQU0oYXJnYyk7CisgICAgVU5VU0VEX1BBUkFNKGFyZ3YpOworICAgIAor
ICAgIHJ1bigpOworICAgIHJldHVybiAwOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0
ZVN0YWNrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNp
bmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3Bh
Y2UgeworCitib29sIGF0dGVtcHRBc3NpZ25tZW50KAorICAgIFN0YWNrU2xvdCogc2xvdCwgaW50
cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMp
Cit7CisgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAg
ICAgaWYgKCFvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgIGJvb2wgb3ZlcmxhcCA9IFdURjo6cmFuZ2VzT3ZlcmxhcCgKKyAgICAgICAgICAg
IG9mZnNldEZyb21GUCwKKyAgICAgICAgICAgIG9mZnNldEZyb21GUCArIHN0YXRpY19jYXN0PGlu
dHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwKKyAgICAgICAgICAgIG90aGVyU2xvdC0+b2Zmc2V0
RnJvbUZQKCksCisgICAgICAgICAgICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpICsgc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KG90aGVyU2xvdC0+Ynl0ZVNpemUoKSkpOworICAgICAgICBpZiAob3Zl
cmxhcCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBzbG90LT5zZXRP
ZmZzZXRGcm9tRlAob2Zmc2V0RnJvbUZQKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBh
c3NpZ24oU3RhY2tTbG90KiBzbG90LCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xv
dHMpCit7CisgICAgaWYgKGF0dGVtcHRBc3NpZ25tZW50KHNsb3QsIC1zdGF0aWNfY2FzdDxpbnRw
dHJfdD4oc2xvdC0+Ynl0ZVNpemUoKSksIG90aGVyU2xvdHMpKQorICAgICAgICByZXR1cm47CisK
KyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTbG90cykgeworICAgICAgICBp
ZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgYm9vbCBkaWRBc3NpZ24gPSBhdHRlbXB0QXNzaWdubWVudCgKKyAgICAgICAgICAgIHNs
b3QsIG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgLSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xv
dC0+Ynl0ZVNpemUoKSksIG90aGVyU2xvdHMpOworICAgICAgICBpZiAoZGlkQXNzaWduKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlU3RhY2so
Q29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRl
U3RhY2siKTsKKworICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0aGUgbG9ja2VkIHNsb3RzIGluIG9y
ZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCisgICAg
Ly8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9m
ZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCisgICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6
ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzOwor
ICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Q7CisgICAgZm9y
IChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBzd2l0Y2gg
KHNsb3QtPmtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAg
ICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgICAgICBhc3Np
Z25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5hcHBlbmQoc2xvdCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6Cisg
ICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBBcyBhIG1hdHRlciBvZiBzYW5pdHksIHVuYXNzaWduIHRoaXMuIE1heWJlIGl0IHdvdWxkIGJl
IGdvb2QgdG8gZXZlbiBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIHJ1bGUg
dGhhdCB0aGlzIGNhbm5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgc2xvdC0+c2V0T2Zmc2V0
RnJvbUZQKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgLy8gVGhpcyBpcyBhIGZhaXJseSBleHBlbnNpdmUgbG9vcCwgYnV0IGl0J3Mg
T0sgYmVjYXVzZSB3ZSdsbCB1c3VhbGx5IG9ubHkgaGF2ZSBhIGhhbmRmdWwgb2YKKyAgICAvLyBs
b2NrZWQgc3RhY2sgc2xvdHMuCisgICAgd2hpbGUgKCFsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Qu
aXNFbXB0eSgpKSB7CisgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGxvY2tlZFN0YWNrU2xvdHNX
b3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBhc3NpZ24oc2xvdCwgYXNzaWduZWRMb2NrZWRT
dGFja1Nsb3RzKTsKKyAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90
KTsKKyAgICB9CisKKyAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMuIE5v
dGUgdGhhdCB0aGVvcmV0aWNhbGx5IHdlIHNob3VsZCBkbyBhbiBlc2NhcGUgYW5hbHlzaXMKKyAg
ICAvLyBoZXJlLiBCdXQsIGN1cnJlbnRseSBBaXIgZG9lc24ndCBzdXBwb3J0IGVzY2FwaW5nIGEg
U3RhY2tTbG90IQorICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZXNjYXBpbmcgYSBTdGFj
a1Nsb3QgYW5kIGFkZCBlc2NhcGUgYW5hbHlzaXMgdG8gYWxsb2NhdGVTdGFjaygpLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0MzAKKworICAgIGF1
dG8gaXNSZWxldmFudCA9IFtdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7CisgICAgICAgIHJl
dHVybiBhcmcuaXNTdGFjaygpICYmIGFyZy5zdGFja1Nsb3QoKS0+a2luZCgpID09IFN0YWNrU2xv
dEtpbmQ6OkFub255bW91czsKKyAgICB9OworCisgICAgTGl2ZW5lc3M8QXJnPiBsaXZlbmVzcyhj
b2RlKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVy
ZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3Qq
PiBzbG90czsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAg
IExpdmVuZXNzPEFyZz46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKwor
ICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAoKSB7CisgICAgICAgICAgICAvLyBGb3JtIGEg
Y2xpcXVlIG9mIHN0YWNrIHNsb3RzIHRoYXQgaW50ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0
IG9mIHN0YWNrIHNsb3RzCisgICAgICAgICAgICAvLyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4K
KyAgICAgICAgICAgIHNsb3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6
IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoaXNSZWxldmFudChhcmcp
KQorICAgICAgICAgICAgICAgICAgICBzbG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgpKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbG90cy5z
aXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBzbG90c1tp
XTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNsb3RzLnNp
emUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIgPSBzbG90
c1tpXTsKKworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIGZpcnN0ID0gb3V0ZXI7Cisg
ICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2Vjb25kID0gaW5uZXI7CisgICAgICAgICAg
ICAgICAgICAgIGlmIChmaXJzdC0+aW5kZXgoKSA+IHNlY29uZC0+aW5kZXgoKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHN0ZDo6c3dhcChmaXJzdCwgc2Vjb25kKTsKKworICAgICAgICAgICAg
ICAgICAgICBpbnRlcmZlcmVuY2VbZmlyc3RdLmFkZChzZWNvbmQpOworICAgICAgICAgICAgICAg
ICAgICBpbnRlcmZlcmVuY2Vbc2Vjb25kXS5hZGQoZmlyc3QpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBpbnRlcmZlcmUoKTsKKyAgICAg
ICAgCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5z
dEluZGV4LS07KSB7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5z
dEluZGV4KSk7CisgICAgICAgICAgICBpbnRlcmZlcmUoKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25zLiBBdCBpdHMgaGVhcnQgdGhpcyBh
bGdvcml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNoCisgICAgLy8gU3RhY2tTbG90IHdl
IGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHpl
cm8gd2hpbGUgZW5zdXJpbmcgbm8KKyAgICAvLyBvdmVybGFwIHdpdGggb3RoZXIgU3RhY2tTbG90
cyB0aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJT
bG90czsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7Cisg
ICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgLy8gQWxyZWFk
eSBhc3NpZ25lZCBhbiBvZmZzZXQuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGludGVyZmVyaW5nU2xvdHMgPSBpbnRlcmZl
cmVuY2Vbc2xvdF07CisgICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Nsb3RzLnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICBvdGhlclNsb3RzW2ldID0gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzW2ld
OworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMu
c2l6ZSgpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogaW50ZXJmZXJpbmdT
bG90cykKKyAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dEluZGV4KytdID0gb3RoZXJTbG90Owor
CisgICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKKyAgICB9CisKKyAgICAvLyBGaWd1
cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFjayBzbG90cy4KKyAgICB1
bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsKKyAgICBmb3IgKFN0YWNrU2xvdCog
c2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xv
dHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMsCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXNsb3QtPm9mZnNldEZyb21GUCgpKSk7Cisg
ICAgfQorCisgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMpOworCisg
ICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVl
ZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFy
Z3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRo
ZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3VjaCBh
biBhd2Vzb21lIGFzc3VtcHRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgIGNv
ZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShhcmcub2Zmc2V0KCkgKyA4KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb2RlLnNldEZy
YW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3RzICsgY29kZS5jYWxsQXJnQXJlYVNpemUoKSk7
CisKKyAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0gdGhlIGNvZGUgdG8gdXNlIEFkZHIncyBpbnN0
ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEgbG9zc2xlc3MKKyAgICAvLyB0cmFuc2Zvcm1h
dGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBTdGFja1Nsb3RzIGFycmF5IHRvIGZpZ3VyZSBv
dXQgd2hpY2ggU3RhY2tTbG90IGFueQorICAgIC8vIG9mZnNldC1mcm9tLUZQIHJlZmVycyB0by4K
KworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJn
cykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRy
KAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGFyZy5zdGFja1Nsb3Qo
KS0+b2Zmc2V0RnJvbUZQKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJn
OjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJh
bWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQWxsb2NhdGVTdGFja19oCisjZGVmaW5l
IEFpckFsbG9jYXRlU3RhY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBU
aGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBvbiB0aGUgc3RhY2suIEl0IGZpcnN0
IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgKKy8vIG9yZGVyIGFuZCB0aGVuIGl0
IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQuCisKK3ZvaWQgYWxsb2NhdGVTdGFj
ayhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJBbGxvY2F0ZVN0YWNrX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBcmcuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tT
bG90LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxp
ZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQo
dG1wKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmlu
dCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tNjQ6CisgICAg
ICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmlu
dChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2Uo
KSwgIiwiLCBpbmRleCgpKTsKKyAgICAgICAgaWYgKHNjYWxlKCkgIT0gMSkKKyAgICAgICAgICAg
IG91dC5wcmludCgiLCIsIHNjYWxlKCkpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50
ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2Fs
bEFyZzoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoY2FsbEFyZykiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVsYXRpb25hbENvbmRpdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgb3V0LnBy
aW50KGFzUmVzdWx0Q29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTcGVj
aWFsOgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckFyZ19oCisjZGVmaW5lIEFpckFyZ19oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIK
KyNpbmNsdWRlICJCM1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBTcGVjaWFsOworY2xhc3MgU3RhY2tTbG90OworCisvLyBU
aGlzIGNsYXNzIG5hbWUgaXMgYWxzbyBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2ls
bCBzYXkgaXQgYSBsb3QuIFlvdSdsbCBzZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjpp
bW0oNSksIEFyZzo6YWRkcih0aGluZywgYmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6
CisgICAgLy8gVGhlc2UgZW51bSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1
c2Ugd2UgaGF2ZSB0byBtZW50aW9uIHRoZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90
IHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgVG1wLAorICAgICAgICBJbW0sCisgICAgICAg
IEltbTY0LAorICAgICAgICBBZGRyLAorICAgICAgICBTdGFjaywKKyAgICAgICAgQ2FsbEFyZywK
KyAgICAgICAgSW5kZXgsCisgICAgICAgIFJlbENvbmQsCisgICAgICAgIFJlc0NvbmQsCisgICAg
ICAgIFNwZWNpYWwKKyAgICB9OworCisgICAgZW51bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAg
VXNlLAorICAgICAgICBEZWYsCisgICAgICAgIFVzZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5
cGUgOiBpbnQ4X3QgeworICAgICAgICBHUCwKKyAgICAgICAgRlAKKyAgICB9OworCisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKKworICAgIHN0YXRpYyBib29sIGlzVXNl
KFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNl
IFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBEZWY6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xlIHJvbGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZv
ckIzVHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIElu
dDY0OgorICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAg
ICAgICAgIHJldHVybiBGUDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIEdQOworICAgIH0KKworICAgIEFyZygpCisgICAgICAgIDogbV9r
aW5kKEludmFsaWQpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAg
ICAgIDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisK
KyAgICBzdGF0aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBpbW02NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
dmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBh
ZGRyKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBBZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAw
KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0
YWNrOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
bHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmco
aW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRT
Y2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAg
ICAgICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
Y2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNj
YWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAg
ICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgo
QWlyOjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAg
ICAgQVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2Nh
bGUpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4
OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXgg
PSBpbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihz
Y2FsZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRp
b24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
UmVzQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNp
YWwqIHNwZWNpYWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0
PGludHB0cl90PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5k
ID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQor
ICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBt
X3NjYWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJ
bW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQor
CisgICAgYm9vbCBpc0ltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gSW1tNjQ7CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAg
IGJvb2wgaXNDYWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
Q2FsbEFyZzsKKyAgICB9CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQor
CisgICAgYm9vbCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBSZXNDb25kOworICAgIH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlz
QWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygp
OworICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAg
aW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IElt
bSB8fCBraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
CisgICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkg
PT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGJvb2wgaGFz
T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAg
IGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgor
ICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSA9
PSBTdGFjaykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3NjYWxl
KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8
IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Piht
X29mZnNldCk7CisgICAgfQorCisgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8U3RhY2tTbG90Kj4obV9vZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGlu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAg
ICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzY2FsZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJu
IG1fc2NhbGU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9nU2NhbGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOworICAgIH0KKworICAgIEFpcjo6U3Bl
Y2lhbCogc3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNw
ZWNpYWwpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zm
c2V0KTsKKyAgICB9CisKKyAgICBib29sIGlzR1BUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOworICAgIH0KKworICAgIGJvb2wgaXNGUFRt
cCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQKCk7
CisgICAgfQorICAgIAorICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGlu
IGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEdQIHZhbHVlLgorICAgIGJvb2wgaXNHUCgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToK
KyAgICAgICAgY2FzZSBJbW02NDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIElu
ZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAg
IGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNp
YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAg
ICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBpZiB0
aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2YWx1
ZS4KKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2Fz
ZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgSW52YWxpZDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6Cisg
ICAgICAgIGNhc2UgSW1tNjQ6IC8vIFllcywgd2UgYWxsb3cgSW1tNjQgYXMgYSBkb3VibGUgaW1t
ZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBp
c0ZQVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhhc1R5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAg
ICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUgdHlwZSBpcyBhbWJpZ3VvdXMgZm9yIHNvbWUg
YXJnIGtpbmRzLiBDYWxsIHdpdGggY2FyZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzR1AoKSA/IEdQIDogRlA7CisgICAgfQorCisgICAgYm9vbCBpc1R5
cGUoVHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4gaXNHUCgpOworICAgICAgICBjYXNlIEZQ
OgorICAgICAgICAgICAgcmV0dXJuIGlzRlAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCku
aXNHUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0bXAoKS5ncHIoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAgfQorCisg
ICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnByKCk7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncFRt
cEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2ln
bmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS50bXBJbmRl
eCgpOworICAgIH0KKworICAgIEFyZyB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNl
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzT2Zmc2V0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gQXJnKCk7CisgICAgICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0KCks
IGFkZGl0aW9uYWxPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICByZXR1cm4g
YWRkcihiYXNlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2Ug
U3RhY2s6CisgICAgICAgICAgICByZXR1cm4gc3RhY2soc3RhY2tTbG90KCksIG9mZnNldCgpICsg
YWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJl
dHVybiBjYWxsQXJnKG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2Ug
SW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgoYmFzZSgpLCBpbmRleCgpLCBzY2FsZSgp
LCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBB
cmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNh
c2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAg
ICAgICAgICAgZnVuY3RvcihtX2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBU
aGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYg
b3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRo
ZW0uIEZvciBleGFtcGxlLCB0aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQor
ICAgIC8vCisgICAgLy8gVGhpcyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwg
VHlwZSBhcmdUeXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1f
YmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFz
ZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVz
dGVkSW1tMzIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihtX29mZnNldCkpOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NCBhc1RydXN0ZWRJbW02NCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNJbW02NCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQodmFsdWUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0ciBhc1RydXN0ZWRJbW1QdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGlzNjRCaXQoKSkKKyAgICAgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyVmFsdWUoKSk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jh
c2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGFzUmVzdWx0Q29uZGl0
aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Jlc0NvbmQoKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uPihtX29m
ZnNldCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAg
ICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYmFzZShX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PT0gQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRoaXMgcmVhbGx5IGRvZXNuJ3QgaGF2
ZSB0byBiZSB0aGF0IGdyZWF0LgorICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludDY0X3Q+
OjpoYXNoKG1fb2Zmc2V0KSArIG1fa2luZCArIG1fc2NhbGUgKyBtX2Jhc2UuaGFzaCgpICsKKyAg
ICAgICAgICAgIG1faW5kZXguaGFzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2NF90
IG1fb2Zmc2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsgSW52YWxpZCB9OworICAgIGludDMy
X3QgbV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9p
bmRleDsKK307CisKK3N0cnVjdCBBcmdIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBBcmcmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IEFyZyYgYSwgY29uc3QgQXJnJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpBaXI6OkFyZz4geworICAgIHR5cGVkZWYgSlNDOjpC
Mzo6QWlyOjpBcmdIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpB
cmc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgLy8g
QmVjYXVzZSBtX3NjYWxlIGlzIDEgaW4gdGhlIGVtcHR5IHZhbHVlLgorICAgIHN0YXRpYyBjb25z
dCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckFyZ19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY29uc3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9
ICIjIjsKKworYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9j
aykKK3sKKyAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwor
Ym9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sK
KyAgICByZXR1cm4gQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9v
bCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNC
bG9jayogdG8pCit7CisgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJv
bSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFz
aWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIkJCIiwgKnRoaXMsICI6IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOwor
ICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBpbnN0LCAiXG4iKTsKK30KKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2Zy
ZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFpckJhc2ljQmxvY2tfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1
ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENv
ZGU7CitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisg
ICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFz
aWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVu
dGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAg
ICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5k
ZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4
XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFz
dCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0JiYgaW5z
dCkKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZv
aWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1faW5z
dHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOwor
ICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJh
bmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAv
LyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2gg
b2YgYSBjb25kaXRpb25hbCBicmFuY2guCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNv
bnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sg
c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5k
ZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBz
dWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisgICAgU3VjY2Vzc29y
TGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCisgICAgQmFzaWNC
bG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nl
c3NvcihpbmRleCkuYmxvY2soKTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JC
bG9ja3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNC
bG9jaywgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29y
Q29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNz
b3JCbG9ja3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rp
b248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBt
X3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAg
QmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRl
Y2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0
JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorCisgICAgYm9vbCBh
ZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZW1vdmVQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJv
bSwgQmFzaWNCbG9jayogdG8pOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBDb2RlOworICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAg
CisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgIEluc3RMaXN0IG1faW5zdHM7CisgICAgU3VjY2Vzc29y
TGlzdCBtX3N1Y2Nlc3NvcnM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwor
ICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7
CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisg
ICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBkZWVw
RHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxv
Y2tEdW1wKGJsb2NrKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ0NhbGxTcGVj
aWFsOjpDQ2FsbFNwZWNpYWwoKQoreworICAgIG1fY2xvYmJlcmVkUmVncyA9IFJlZ2lzdGVyU2V0
OjphbGxSZWdpc3RlcnMoKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNl
dDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0
ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdz
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK0NDYWxs
U3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpmb3JF
YWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJh
Y2s+JiBjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6VXNlLCBB
cmc6OkdQKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIC8vIEZvciB0aGUgdHlwZSwgd2UgY2FuIGp1c3QgcXVlcnkg
dGhlIGFyZydzIHR5cGUuIFRoZSBhcmcgd2lsbCBoYXZlIGEgdHlwZSwgYmVjYXVzZSB3ZQorICAg
ICAgICAvLyByZXF1aXJlIHRoZXNlIGFyZ3MgdG8gYmUgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAg
ICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbaV0sIEFyZzo6VXNlLCBpbnN0LmFyZ3NbaV0udHlwZSgp
KTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7
CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgor
ICAgICAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGlmIChpczY0Qml0KCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpU
bXA6CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgIGNhc2Ug
QXJnOjpDYWxsQXJnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNHUCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5zdC5hcmdzW2ldLmlzUmVnKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGluc3QuYXJnc1tpXSA9PSBUbXAo
c2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0Jiwg
dW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEgY2FuIGJlIGEgc3RhY2sgYWRkcmVz
cyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6cmVwb3J0
VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQoreworfQorCitDQ2FsbEhl
bHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBl
cnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFd
LmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAg
ICAgICBqaXQubW92ZShpbnN0LmFyZ3NbMV0uYXNUcnVzdGVkSW1tUHRyKCksIHNjcmF0Y2hSZWdp
c3Rlcik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIo
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2Fs
bChpbnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdp
c3RlclNldCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpCit7CisgICAg
cmV0dXJuIG1fY2xvYmJlcmVkUmVnczsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmR1bXBJbXBs
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJDQ2FsbCIpOworfQor
Cit2b2lkIENDYWxsU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCJmdW5jdGlvbiBjYWxsIHRoYXQgdXNlcyB0aGUgQyBjYWxsaW5n
IGNvbnZlbnRpb24uIik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNDYWxsU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJDQ2FsbFNwZWNpYWxfaAorI2RlZmluZSBBaXJDQ2FsbFNwZWNpYWxfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBVc2UgdGhpcyBzcGVj
aWFsIGZvciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFyZyAwIGlzIG9mIGNvdXJzZSBhIFNwZWNp
YWwgYXJnIHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0NhbGxTcGVjaWFsIG9iamVjdC4gQXJnIDEg
aXMgdGhlIGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJbW1QdHIsIGEgcmVnaXN0ZXIsIG9yIGFu
IGFkZHJlc3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3MgYXJlIGp1c3QgdGhlIHNldCBvZiBhcmd1
bWVudCByZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwuIEZvciBhcmd1bWVudHMgdGhhdCBnbyB0
bworLy8gdGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0aGUgZ3J1bnQgd29yayBvZiBkb2luZyB0
aG9zZSBzdGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBvbmx5IHJlYXNvbiB3aHkKKy8vIHdlIHNw
ZWNpZnkgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBhcmd1bWVudHMgdG8gYSBjYWxsIGlzIHNv
IHRoYXQgdGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBzZWUKKy8vIHRoYXQgdGhleSBnZXQgdXNl
ZCBoZXJlLiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRvbWFnaWNhbGx5IHJlcG9ydCBhbGwgYXJn
dW1lbnQgcmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2VkIGJlY2F1c2UgaWYgd2UgaGFkIGEgY2Fs
bCB0aGF0IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhleSdkIGFwcGVhciB0byBiZSBsaXZlIHVu
dGlsIHNvbWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhlIHByb2xvZ3VlLCB3aGljaGV2ZXIgaGFw
cGVuZWQgc29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNpYWwgOiBwdWJsaWMgU3BlY2lhbCB7Citw
dWJsaWM6CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAgfkNDYWxsU3BlY2lhbCgpOworCisgICAg
Ly8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4gSXQganVz
dCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBub3QKKyAgICAvLyB1c2VkIGZvciBh
cmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0aGlzIGlz
IHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8gdGhpcyBzcGVjaWFsIHRvIGJlIHNw
ZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNoUmVnaXN0
ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNo
QXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92
ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1p
dHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVw
b3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBvdmVycmlkZTsKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVy
YXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xv
YmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJl
ZFJlZ3M7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorI2luY2x1ZGUg
IkIzQmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworQ29kZTo6Q29kZSgpCit7Cit9CisKK0NvZGU6On5Db2RlKCkKK3sK
K30KKworQmFzaWNCbG9jayogQ29kZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2sobV9ibG9j
a3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5n
ZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0
ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQoreworICAg
IHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChieXRlU2l6ZSwg
bV9zdGFja1Nsb3RzLnNpemUoKSwga2luZCwgdmFsdWUpKTsKKyAgICBTdGFja1Nsb3QqIHJlc3Vs
dCA9IHNsb3QuZ2V0KCk7CisgICAgbV9zdGFja1Nsb3RzLmFwcGVuZChXVEY6Om1vdmUoc2xvdCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NwZWNpYWwqIENvZGU6OmFkZFNwZWNpYWwoc3Rk
Ojp1bmlxdWVfcHRyPFNwZWNpYWw+IHNwZWNpYWwpCit7CisgICAgU3BlY2lhbCogcmVzdWx0ID0g
c3BlY2lhbC5nZXQoKTsKKyAgICBtX3NwZWNpYWxzLmFwcGVuZChXVEY6Om1vdmUoc3BlY2lhbCkp
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxTcGVj
aWFsKCkKK3sKKyAgICBpZiAoIW1fY0NhbGxTcGVjaWFsKSB7CisgICAgICAgIG1fY0NhbGxTcGVj
aWFsID0gc3RhdGljX2Nhc3Q8Q0NhbGxTcGVjaWFsKj4oCisgICAgICAgICAgICBhZGRTcGVjaWFs
KHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxTcGVjaWFsPigpKSk7CisgICAgfQorCisgICAgcmV0dXJu
IG1fY0NhbGxTcGVjaWFsOworfQorCit2b2lkIENvZGU6OnJlc2V0UmVhY2hhYmlsaXR5KCkKK3sK
KyAgICBCMzo6cmVzZXRSZWFjaGFiaWxpdHkobV9ibG9ja3MpOworfQorCit2b2lkIENvZGU6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworICAgIGlmIChz
dGFja1Nsb3RzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xvdHM6XG4i
KTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisgICAgICAg
ICAgICBvdXQucHJpbnQoIiAgICAiLCBwb2ludGVyRHVtcChzbG90KSwgIjogIiwgZGVlcER1bXAo
c2xvdCksICJcbiIpOworICAgIH0KKyAgICBpZiAoc3BlY2lhbHMoKS5zaXplKCkpIHsKKyAgICAg
ICAgb3V0LnByaW50KCJTcGVjaWFsczpcbiIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNp
YWwgOiBzcGVjaWFscygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgcG9pbnRlckR1
bXAoc3BlY2lhbCksICI6ICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsKKyAgICB9CisgICAg
aWYgKG1fZnJhbWVTaXplKQorICAgICAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJh
bWVTaXplLCAiXG4iKTsKKyAgICBpZiAobV9jYWxsQXJnQXJlYVNpemUpCisgICAgICAgIG91dC5w
cmludCgiQ2FsbCBhcmcgYXJlYSBzaXplOiAiLCBtX2NhbGxBcmdBcmVhU2l6ZSwgIlxuIik7Cisg
ICAgaWYgKG1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5zaXplKCkpCisgICAgICAgIG91dC5wcmludCgi
Q2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOworfQorCit1bnNp
Z25lZCBDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAorewor
ICAgIHdoaWxlIChpbmRleCA8IHNpemUoKSAmJiAhYXQoaW5kZXgpKQorICAgICAgICBpbmRleCsr
OworICAgIHJldHVybiBpbmRleDsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZE5leHRCbG9ja0lu
ZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBmaW5kRmlyc3RCbG9ja0lu
ZGV4KGluZGV4ICsgMSk7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmZpbmROZXh0QmxvY2soQmFz
aWNCbG9jayogYmxvY2spIGNvbnN0Cit7CisgICAgcmV0dXJuIGF0KGZpbmROZXh0QmxvY2tJbmRl
eChibG9jay0+aW5kZXgoKSkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNvZGVfaAor
I2RlZmluZSBBaXJDb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJC
YXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkFpclN0YWNr
U2xvdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCisjaW5jbHVkZSAiU3Rh
Y2tBbGlnbm1lbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFByb2NlZHVyZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENDYWxsU3BlY2lhbDsKKwor
Ly8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0
IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0ZWQgbWFj
aGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hp
bmUgY29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBDb2RlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJhc2ljQmxv
Y2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIFN0YWNrU2xvdCog
YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RW
YWx1ZSogPSBudWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVf
cHRyPFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8g
bWFrZSBhIEMgY2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxsU3BlY2lhbCgpOworCisgICAg
VG1wIG5ld1RtcChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpncFRtcEZv
ckluZGV4KG1fbnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAg
ICByZXR1cm4gVG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBzKyspOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICBy
ZXR1cm4gbV9udW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJl
dHVybiBtX251bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNhbGxB
cmdBcmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9CisKKyAgICAv
LyBZb3UgY2FuIGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHRvIGZvcmNlIGEgbWlu
aW11bSBjYWxsIGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1ZXN0Q2FsbEFyZ0FyZWFTaXpl
KHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSA9IHN0ZDo6
bWF4KAorICAgICAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUsCisgICAgICAgICAgICBzdGF0aWNf
Y2FzdDx1bnNpZ25lZD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSwgc2l6ZSkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdCB7
IHJldHVybiBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8gT25seSBwaGFzZXMgdGhhdCBkbyBzdGFj
ayBhbGxvY2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBDdXJyZW50bHksIG9ubHkKKyAg
ICAvLyBBaXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRoaXMuCisgICAgdm9pZCBzZXRGcmFtZVNp
emUodW5zaWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAgICAgICAgbV9mcmFtZVNpemUgPSBmcmFt
ZVNpemU7CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNhdmVSZWdp
c3RlcnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKworICAgIC8vIFJlY29t
cHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVucmVhY2hhYmxlIGJsb2Nrcy4KKyAgICB2
b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXpl
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9ibG9ja3NbaW5kZXhdLmdldCgpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAvLyBGaW5kcyB0
aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4
JyA+PSBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0
IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID4gaW5kZXguCisgICAgdW5zaWduZWQgZmlu
ZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIEJhc2ljQmxvY2sq
IGZpbmROZXh0QmxvY2soQmFzaWNCbG9jayopIGNvbnN0OworCisgICAgY2xhc3MgaXRlcmF0b3Ig
eworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX2NvZGUo
bnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBpdGVyYXRvcihjb25zdCBDb2RlJiBjb2RlLCB1bnNpZ25lZCBpbmRleCkKKyAg
ICAgICAgICAgIDogbV9jb2RlKCZjb2RlKQorICAgICAgICAgICAgLCBtX2luZGV4KG1fY29kZS0+
ZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2NvZGUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9w
ZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gbV9jb2RlLT5maW5k
Rmlyc3RCbG9ja0luZGV4KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVy
Lm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENv
ZGUqIG1fY29kZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBp
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQor
CisgICAgY2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAg
U3RhY2tTbG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAgIDogbV9j
b2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAgICAgICBT
dGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFj
a1Nsb3RzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yW10odW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBt
X2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0
ZXJhdG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAg
ICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFN0YWNrU2xvdHND
b2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4Owor
ICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25z
dCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHN0YWNr
U2xvdHMoKSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAg
ICAKKyAgICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAg
U3BlY2lhbHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6ZSgpOyB9CisgICAgICAgIFNwZWNp
YWwqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFsc1tp
bmRleF0uZ2V0KCk7IH0KKyAgICAgICAgU3BlY2lhbCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3Ig
eworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAg
ICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29u
c3QgU3BlY2lhbHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAg
ICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAs
IG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFNwZWNpYWwqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24qIG1fY29s
bGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAg
ICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7
IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsK
KyAgICB9OworCisgICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1
cm4gU3BlY2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIENDYWxsU3BlY2lhbCogbV9jQ2Fs
bFNwZWNpYWwgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07Cisg
ICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9mcmFtZVNpemUg
eyAwIH07CisgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUgeyAwIH07CisgICAgUmVnaXN0
ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworfTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZy
ZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBBaXJGcmVxdWVudGVkQmxvY2tf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxC
YXNpY0Jsb2NrPiBGcmVxdWVudGVkQmxvY2s7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJGcmVxdWVu
dGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZl
cy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorI2luY2x1ZGUgIkFpclZhbGlk
YXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisj
aW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBl
cnMmIGppdCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0
ZShjb2RlLCAiaW5pdGlhbCIpOworCisgICAgaWYgKHNob3VsZER1bXBJUigpKSB7CisgICAgICAg
IGRhdGFMb2coIkluaXRpYWwgYWlyOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAg
fQorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9wdGltaXphdGlvbnMgYW5kIHRy
YW5zZm9ybWF0aW9ucy4KKyAgICAvLyBGSVhNRTogQWRkIEFpciBvcHRpbWl6YXRpb25zLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTYKKworICAg
IC8vIFRoaXMgaXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBhIHJlYWwgcmVnaXN0ZXIgYWxsb2NhdG9y
LiBUaGVuLCB3ZSBjb3VsZCB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkKKyAgICAvLyBpbiBwbGFjZSBv
ZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yIG9ubHkgZm9yIHRlc3RpbmcuCisgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTcKKyAgICBzcGls
bEV2ZXJ5dGhpbmcoY29kZSk7CisKKyAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9s
b2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0
IGFsc28KKyAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZl
cyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2Rl
KTsKKworICAgIC8vIFRoaXMgdHVybnMgYWxsIFN0YWNrIGFuZCBDYWxsQXJnIEFyZ3MgaW50byBB
ZGRyIGFyZ3MgdGhhdCB1c2UgdGhlIGZyYW1lIHBvaW50ZXIuIEl0IGRvZXMKKyAgICAvLyB0aGlz
IGJ5IGZpcnN0LWZpdCBhbGxvY2F0aW5nIHN0YWNrIHNsb3RzLiBJdCBzaG91bGQgYmUgcHJldHR5
IGRhcm4gY2xvc2UgdG8gb3B0aW1hbCwgc28gd2UKKyAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB3
b3JyeSBhYm91dCB0aGlzIHZlcnkgbXVjaC4KKyAgICBhbGxvY2F0ZVN0YWNrKGNvZGUpOworCisg
ICAgLy8gRklYTUU6IFdlIHNob3VsZCByZWFsbHkgaGF2ZSBhIGNvZGUgbGF5b3V0IG9wdGltaXph
dGlvbiBoZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA0NzgKKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgbGF0ZSBsaXZlbmVzcyBhbmFseXNp
cyBvdmVyIHJlZ2lzdGVycyB0byBmaWxsIGluIHRoZQorICAgIC8vIFNwZWNpYWw6OnJlcG9ydFVz
ZWRSZWdpc3RlcnMoKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwNTExCisKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxp
ZGF0ZShjb2RlLCAiZmluYWwiKTsKKworICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAg
ICBkYXRhTG9nKCJBaXIgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsKKyAgICAgICAgZGF0YUxvZyhj
b2RlKTsKKyAgICB9CisKKyAgICAvLyBBbmQgbm93LCB3ZSBnZW5lcmF0ZSBjb2RlLgorICAgIGpp
dC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworCisgICAgR2VuZXJhdGlvbkNvbnRleHQgY29udGV4dDsKKyAgICBjb250
ZXh0LmNvZGUgPSAmY29kZTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6
OkxhYmVsPiBibG9ja0xhYmVscyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9j
aywgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CisKKyAg
ICBhdXRvIGxpbmsgPSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiB0
YXJnZXQpIHsKKyAgICAgICAgaWYgKGJsb2NrTGFiZWxzW3RhcmdldF0uaXNTZXQoKSkgeworICAg
ICAgICAgICAganVtcC5saW5rVG8oYmxvY2tMYWJlbHNbdGFyZ2V0XSwgJmppdCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBibG9ja0p1bXBzW3RhcmdldF0uYXBw
ZW5kKGp1bXApOworICAgIH07CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
eworICAgICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQpOworICAgICAgICBBU1NFUlQo
YmxvY2stPnNpemUoKSA+PSAxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLT5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBq
dW1wID0gYmxvY2stPmF0KGkpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGp1bXAsICFqdW1wLmlzU2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2NrLT5z
dWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IFJldCkg
eworICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGRvbid0IHJlcHJlc2VudCB0aGUgZnVsbCBw
cm9sb2d1ZS9lcGlsb2d1ZSBpbiBBaXIsIHNvIHdlIG5lZWQgdG8KKyAgICAgICAgICAgIC8vIGhh
dmUgdGhpcyBvdmVycmlkZS4KKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmxh
c3QoKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAq
YmxvY2spCisgICAgICAgICAgICBqdW1wID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwor
ICAgICAgICBzd2l0Y2ggKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgY2FzZSAw
OgorICAgICAgICAgICAgQVNTRVJUKCFqdW1wLmlzU2V0KCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3Nv
ckJsb2NrKDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAgICBp
ZiAoYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpICE9IGNvZGUuZmluZE5leHRCbG9jayhibG9jaykp
CisgICAgICAgICAgICAgICAgbGluayhqaXQuanVtcCgpLCBibG9jay0+c3VjY2Vzc29yQmxvY2so
MSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGxhdGVQYXRoIDogY29udGV4dC5sYXRlUGF0aHMp
CisgICAgICAgIGxhdGVQYXRoLT5ydW4oaml0LCBjb250ZXh0KTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gKKyNkZWZpbmUgQWlyR2VuZXJhdGVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVs
cGVyczsKKworbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisK
Ky8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxs
b2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQorLy8gcmVnaXN0ZXIgYWxsb2Nh
dGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncywgYW5kIHRoZW4gZ2VuZXJhdGVzIHRo
ZSBjb2RlIHVzaW5nIHRoZSBnaXZlbgorLy8gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRo
YXQgdGhpcyBtYXkgY2FsbCBjYWxsYmFja3MgaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMK
Ky8vIGdlbmVyYXRpbmcuCit2b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKy8vIFRoaXMg
aXMgZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisjaW5jbHVkZSAiQWlyT3Bjb2Rl
R2VuZXJhdGVkLmgiCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGlvbkNvbnRl
eHRfaAorI2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQgewor
ICAgIHR5cGVkZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVyYXRp
b25Db250ZXh0Jik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExh
dGVQYXRoOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKKyAgICBD
b2RlKiBjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRpb25Db250ZXh0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5k
bGVDYWxsZWVTYXZlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
SW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgaGFuZGxlQ2FsbGVl
U2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImhh
bmRsZUNhbGxlZVNhdmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1c2VkQ2FsbGVlU2F2ZXM7CisK
KyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3Qm
IGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoCisgICAg
ICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdCBm
aXJzdCB3ZSBqdXN0IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAgICAgICAgICAgICAgICAgICB1
c2VkQ2FsbGVlU2F2ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRvIHJlYWxseSBnZXQgdGhlIGNh
bGxlZSBzYXZlcy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworCisgICAgaWYgKCF1c2VkQ2FsbGVlU2F2ZXMubnVtYmVyT2ZT
ZXRSZWdpc3RlcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29kZS5jYWxsZWVTYXZlUmVn
aXN0ZXJzKCkgPSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworCisgICAg
c2l6ZV90IGJ5dGVTaXplID0gMDsKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVu
dHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpCisgICAgICAgIGJ5dGVTaXplID0gc3Rk
OjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigtZW50cnkub2Zmc2V0KCkpLCBieXRlU2l6ZSk7CisK
KyAgICBTdGFja1Nsb3QqIHNhdmVzQXJlYSA9IGNvZGUuYWRkU3RhY2tTbG90KGJ5dGVTaXplLCBT
dGFja1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgc2luY2Ug
d2UgY291bGQgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVudCBzdGFjayBzbG90IHRvIHRo
aXMKKyAgICAvLyBhcmVhLiBBbHNvLCBvdXIgcnVudGltZSBkb2VzIG5vdCByZXF1aXJlIHVzIHRv
IHBpbiB0aGUgc2F2ZXMgYXJlYS4gTWF5YmUgd2Ugc2hvdWxkbid0IHBpbiBpdD8KKyAgICBzYXZl
c0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOworCisgICAgYXV0byBhcmdGb3IgPSBb
Jl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSAtPiBBcmcgeworICAgICAgICByZXR1
cm4gQXJnOjpzdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgpICsgYnl0ZVNpemUpOworICAg
IH07CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIAorICAgIC8v
IEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9ndWUuCisgICAgZm9yIChjb25z
dCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7
CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAwLCBlbnRyeS5yZWco
KS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIGNvZGVbMF0tPmF0KDApLm9yaWdpbiwKKyAg
ICAgICAgICAgIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRyeSkpOworICAgIH0KKyAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKworICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9y
ZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
eworICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgaWYgKGxhc3Qu
b3Bjb2RlICE9IFJldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoY29u
c3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkg
eworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICBibG9j
ay0+c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBs
YXN0Lm9yaWdpbiwKKyAgICAgICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnkucmVn
KCkpKTsKKyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Cisg
ICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5k
bGVDYWxsZWVTYXZlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorI2RlZmluZSBBaXJIYW5kbGVDYWxs
ZWVTYXZlc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgcGhhc2Ug
aWRlbnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jl
c3RvcmUgdGhlbSBpbiB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdz
IGEgbWFuZGF0b3J5IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtl
IHRoaXMgbW9yZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUK
Ky8vIHBvd2VyZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5rIHdyYXBwaW5nOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4CisvLyBXZSBzaG91bGQgbWFr
ZSB0aGlzIGludGVyYWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmKTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJC
YXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKwordm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCit7
CisgICAgZXhlY3V0ZUluc2VydGlvbnMoYmxvY2stPm1faW5zdHMsIG1faW5zZXJ0aW9ucyk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNl
cnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2Vy
dGlvblNldF9oCisjZGVmaW5lIEFpckluc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIENvZGU7CisKK3R5cGVk
ZWYgV1RGOjpJbnNlcnRpb248SW5zdD4gSW5zZXJ0aW9uOworCitjbGFzcyBJbnNlcnRpb25TZXQg
eworcHVibGljOgorICAgIEluc2VydGlvblNldChDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBDb2RlJiBjb2RlKCkgeyByZXR1cm4gbV9jb2Rl
OyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kSW5zZXJ0aW9u
KFQmJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5kKHN0ZDo6
Zm9yd2FyZDxUPihpbnNlcnRpb24pKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
bnN0PgorICAgIHZvaWQgaW5zZXJ0SW5zdChzaXplX3QgaW5kZXgsIEluc3QmJiBpbnN0KQorICAg
IHsKKyAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJk
PEluc3Q+KGluc3QpKSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIEluc3Qoc3RkOjpmb3J3
YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0
ZShCYXNpY0Jsb2NrKik7CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3Rv
cjxJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJ
bnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckluc3QuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0OjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAiLCBsaXN0RHVtcChhcmdzKSk7
CisgICAgaWYgKG9yaWdpbikgeworICAgICAgICBpZiAoYXJncy5zaXplKCkpCisgICAgICAgICAg
ICBvdXQucHJpbnQoIiwgIik7CisgICAgICAgIG91dC5wcmludCgqb3JpZ2luKTsKKyAgICB9Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVmaW5lIEFpckluc3RfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpck9w
Y29kZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQ0NhbGxIZWxwZXJzOworY2xhc3MgUmVnaXN0ZXJTZXQ7CisKK25hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25D
b250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJn
LCAzPiBBcmdMaXN0OworCisgICAgSW5zdCgpCisgICAgICAgIDogb3JpZ2luKG51bGxwdHIpCisg
ICAgICAgICwgb3Bjb2RlKE5vcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEluc3QoT3Bjb2Rl
IG9wY29kZSwgVmFsdWUqIG9yaWdpbikKKyAgICAgICAgOiBvcmlnaW4ob3JpZ2luKQorICAgICAg
ICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2lu
LCBBcmcgYXJnLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3N7IGFyZywg
YXJndW1lbnRzLi4uIH0KKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29k
ZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUq
IG9yaWdpbiwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoYXJndW1l
bnRzKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkK
KyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBB
cmdMaXN0JiYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoV1RGOjptb3ZlKGFyZ3VtZW50cykp
CisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVz
aW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAor
ICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5
aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKKyAgICAvLyBwcm9iYWJseSBk
b2luZyBpdCB3cm9uZy4KKworICAgIC8vIFRoaXMgb25seSB3YWxrcyB0aG9zZSBUbXBzIHRoYXQg
YXJlIGV4cGxpY2l0bHkgbWVudGlvbmVkLCBhbmQgaXQgZG9lc24ndCB0ZWxsIHlvdSB0aGVpciBy
b2xlCisgICAgLy8gb3IgdHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZvciAoQXJnJiBhcmcgOiBhcmdzKQorICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0
KGZ1bmN0b3IpOworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCBFYWNoQXJnQ2FsbGJhY2soQXJn
JiwgQXJnOjpSb2xlLCBBcmc6OlR5cGUpOworICAgIAorICAgIC8vIENhbGxzIHRoZSBmdW5jdG9y
IHdpdGggKGFyZywgcm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQg
YnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIENh
bGxzIHRoZSBmdW5jdG9yIHdpdGggKHRtcCwgcm9sZSwgdHlwZSkuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKKyAgICB7CisgICAgICAgIGZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJn
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBhcmcu
Zm9yRWFjaFRtcChyb2xlLCB0eXBlLCBmdW5jdG9yKTsKKyAgICAgICAgICAgIH0pOworICAgIH0K
KworICAgIC8vIFRoaW5nIGNhbiBiZSBlaXRoZXIgQXJnIG9yIFRtcC4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3Qg
RnVuY3RvciYpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFz
IGEgU3BlY2lhbCouIFRoaXMgdW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAg
Ym9vbCBoYXNTcGVjaWFsKCkgY29uc3Q7CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFs
IHJlZ2lzdGVycyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZm
aWNpZW5jeSwKKyAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1Nw
ZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJl
cmVkUmVncygpOworCisgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBh
cmUgbGl2ZS4gVGhpcyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisg
ICAgLy8gdGhhdCBmb3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29y
a3MgaWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdp
c3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24g
aW4gb25lIG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0
by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNW
YWxpZEZvcm0oKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2
YWxpZCBmb3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlk
CisgICAgLy8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChv
ciBhIFN0YWNrU2xvdCBvciBDYWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVu
IGluZGV4PyBTcGlsbGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRv
IGZpbmQgVG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBp
dCBjYWxscyB0aGlzIHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBh
biBBcmc6OkFkZHIuIElmIGl0CisgICAgLy8gZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBj
YWxscyB0aGF0IEFyZydzIGZvckVhY2hUbXAgdG8gZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4K
KyAgICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2Rl
X2dlbmVyYXRvci5yYi4KKyAgICBib29sIGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsK
KworICAgIC8vIEdlbmVyYXRlIHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBp
cywgbGlrZSwgbGl0ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRl
cm1pbmFsLCBpdCByZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0
aGUgInRoZW4iIGNhc2UsIHdpdGggdGhlICJlbHNlIgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10
aHJvdWdoLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0
b3IucmIuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdl
bmVyYXRpb25Db250ZXh0Jik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworICAgIEFyZ0xpc3QgYXJnczsKKyAgICBWYWx1ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVl
IHRoYXQgdGhpcyBvcmlnaW5hdGVkIGZyb20uCisgICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJJbnN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlySW5zdElubGluZXNfaAorI2RlZmluZSBBaXJJbnN0SW5saW5lc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29k
ZVV0aWxzLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZvckVhY2g7
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPFRtcD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoVG1wKGZ1bmN0b3IpOwor
ICAgIH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPEFyZz4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1
bmN0b3IpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBG
dW5jdG9yPgordm9pZCBJbnN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7Cisg
ICAgRm9yRWFjaDxUaGluZz46OmZvckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitpbmxpbmUg
Ym9vbCBJbnN0OjpoYXNTcGVjaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXJncy5zaXplKCkg
JiYgYXJnc1swXS5pc1NwZWNpYWwoKTsKK30KKworaW5saW5lIGNvbnN0IFJlZ2lzdGVyU2V0JiBJ
bnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOwor
ICAgIHJldHVybiBhcmdzWzBdLnNwZWNpYWwoKS0+ZXh0cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsK
K30KKworaW5saW5lIHZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICBh
cmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lzdGVy
cyk7Cit9CisKK2lubGluZSBib29sIGlzU2hpZnRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQorewor
I2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9PSBU
bXAoWDg2UmVnaXN0ZXJzOjplY3gpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW5zdCk7Cisg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30gICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZh
bGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpckxpdmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJC
M0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIFlvdSBjYW4gY29tcHV0ZSBsaXZl
bmVzcyBvdmVyIFRtcCdzIG9yIG92ZXIgQXJnJ3MuIElmIHlvdSBjb21wdXRlIG92ZXIgQXJnJ3Ms
IHlvdSBnZXQgYm90aAorLy8gc3RhY2sgbGl2ZW5lc3MgYW5kIHRtcCBsaXZlbmVzcy4KK3RlbXBs
YXRlPHR5cGVuYW1lIFRoaW5nPgorY2xhc3MgTGl2ZW5lc3MgeworcHVibGljOgorICAgIExpdmVu
ZXNzKENvZGUmIGNvZGUpCisgICAgeworICAgICAgICBtX2xpdmVBdEhlYWQucmVzaXplKGNvZGUu
c2l6ZSgpKTsKKyAgICAgICAgbV9saXZlQXRUYWlsLnJlc2l6ZShjb2RlLnNpemUoKSk7CisKKyAg
ICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gc2VlbjsKKworICAgICAgICBib29sIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgY2hhbmdlZCA9
IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5zaXpl
KCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IGNvZGUuYXQoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgTG9jYWxDYWxjIGxvY2FsQ2Fs
YygqdGhpcywgYmxvY2spOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRleCA9
IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxD
YWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgICAgIGJvb2wg
Zmlyc3RUaW1lID0gc2Vlbi5hZGQoYmxvY2spOworICAgICAgICAgICAgICAgIGlmICghZmlyc3RU
aW1lICYmIGxvY2FsQ2FsYy5saXZlKCkgPT0gbV9saXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVk
ZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2xpdmVBdFRhaWxbcHJlZGVjZXNz
b3JdLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5saXZlKCkuYmVnaW4o
KSwgbG9jYWxDYWxjLmxpdmUoKS5lbmQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIG1fbGl2ZUF0SGVhZFtibG9ja10gPSBsb2NhbENhbGMudGFrZUxpdmUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBs
aXZlQXRIZWFkKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fbGl2ZUF0SGVhZFtibG9ja107CisgICAgfQorCisgICAgY29uc3QgSGFzaFNldDxUaGluZz4m
IGxpdmVBdFRhaWwoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9saXZlQXRUYWlsW2Jsb2NrXTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNhbGN1bGF0b3Ig
aGFzIHRvIGJlIHJ1biBpbiByZXZlcnNlLgorICAgIGNsYXNzIExvY2FsQ2FsYyB7CisgICAgcHVi
bGljOgorICAgICAgICBMb2NhbENhbGMoTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBi
bG9jaykKKyAgICAgICAgICAgIDogbV9saXZlKGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZTsgfQorICAgICAgICBIYXNoU2V0PFRoaW5nPiYmIHRh
a2VMaXZlKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fbGl2ZSk7IH0KKworICAgICAgICB2b2lkIGV4
ZWN1dGUoSW5zdCYgaW5zdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxl
IGRlZidzLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAg
ICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgLy8gTmV4dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4K
KyAgICAgICAgICAgIGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgICAgIGlu
c3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgW3Ro
aXNdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKFRo
aW5nKFRtcChyZWcpKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1c2Uncy4KKyAgICAg
ICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGlu
ZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2xpdmUuYWRkKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+IG1fbGl2ZTsKKyAgICB9Owor
ICAgIAorcHJpdmF0ZToKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4g
bV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBt
X2xpdmVBdFRhaWw7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ5IEBACisjIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6Cisj
IFU6RyA9PiB1c2Ugb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpH
ID0+IGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+
IHVzZSBhbmQgZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6
RiA9PiB1c2Ugb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEg
ZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0
IHJlZ2lzdGVyIG9yIHZhbHVlCisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9y
YXJ5IG9yIHJlZ2lzdGVyCisjIEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9
PiBUcnVzdGVkSW1tNjQKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3Rlcitv
ZmZzZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRk
cmVzcworIworIyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5k
IHVuZGVyc3RhbmRzIHRoYXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMg
b2YgdGhpbmdzLiBTbywgYWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVu
dGF0aW9uIHN0eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMg
YXJlIG1lYW5pbmdmdWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0
ZToKKyMKKyMgRm9vNDIgVTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhl
IHBhcnNlciB3b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIg
VTpHLCBVRDpGCisjICAgICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0
d28tZm9ybSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBh
bmQgdXNlcytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVz
IGhlcmUgaGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQg
dG8gTWFjcm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChh
ZGQzMikuCisKK05vcAorCitBZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwg
QWRkcgorICAgIEltbSwgVG1wCisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMy
IFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRtcCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAg
IFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAg
ICBJbW0sIEFkZHIKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1t
LCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKwor
IyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVyIHRoZSBmdWxsIHJlZ2lzdGVyIHNpemUsIHdo
aWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0IGRlcGVuZGluZyBvbgorIyB0aGUgcGxhdGZv
cm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0IHRoaXMgaXMgYSBnb29kIHRoaW5nOyBpdCBt
aWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEKKyMgTW92ZTY0IGluc3RydWN0aW9uLiBPVE9I
LCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkgaGF2ZSB0aGlzIG5vdGlvbiBvZiAibW92ZSgp
IiB0aGF0IGJhc2ljYWxseQorIyBtZWFucyBtb3ZlUHRyLgorTW92ZSBVOkcsIEQ6RworICAgIFRt
cCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxv
YWRQdHIgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRl
ZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBJbmRleCwgVG1wIGFzIGxvYWRQdHIKKyAgICBU
bXAsIEFkZHIgYXMgc3RvcmVQdHIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlUHRyCisKK01vdmUz
MiBVOkcsIEQ6RworICAgIFRtcCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRyCisgICAgQWRkciwg
VG1wIGFzIGxvYWQzMgorICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgVG1wLCBBZGRyIGFz
IHN0b3JlMzIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIKKworTW92ZURvdWJsZSBVOkYsIEQ6
RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBJbmRleCwg
VG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKyAgICBUbXAs
IEluZGV4IGFzIHN0b3JlRG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1w
LCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAorCitCcmFuY2hB
ZGQzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBS
ZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRt
cCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hNdWwzMiBVOkcsIFU6Rywg
VUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBBZGRyLCBU
bXAKKworQnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRt
cCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAg
ICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTmVn
MzIgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKworSnVtcCAvYnJhbmNoCisK
K1JldCAvdGVybWluYWwKKworQnJlYWtwb2ludCAvdGVybWluYWwKKworIyBBaXIgYWxsb3dzIGZv
ciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGly
ZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9w
ZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0
ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29wZShDb2RlJiBjb2Rl
LCBjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9jb2RlKGNvZGUpCisgICAgLCBtX25hbWUobmFt
ZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRh
TG9nKCJBaXIgYmVmb3JlICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsK
KyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9k
dW1wQmVmb3JlID0gdG9DU3RyaW5nKGNvZGUpOworfQorCitQaGFzZVNjb3BlOjp+UGhhc2VTY29w
ZSgpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2
YWxpZGF0ZShtX2NvZGUsIG1fbmFtZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJQaGFzZVNjb3BlX2gKKyNkZWZpbmUg
QWlyUGhhc2VTY29wZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK2Ns
YXNzIFBoYXNlU2NvcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBoYXNlU2NvcGUpOwor
cHVibGljOgorICAgIFBoYXNlU2NvcGUoQ29kZSYsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5Q
aGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6CisgICAgQ29k
ZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICBDU3RyaW5nIG1fZHVtcEJl
Zm9yZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJQaGFzZVNjb3BlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQUlJlZz4mIGdwcnNJblBy
aW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBWZWN0b3I8R1BSUmVnPiogcmVzdWx0OworICAg
IHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAg
ICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEdQ
UlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxH
UFJzKCk7CisgICAgICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3Rl
cnMoKSk7CisgICAgICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJk
d2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgYWxsLmZvckVh
Y2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3Vs
dC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBh
bGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdDsKK30KKworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZw
cnNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBWZWN0b3I8RlBSUmVnPiogcmVzdWx0
OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAor
ICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVj
dG9yPEZQUlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9IFJlZ2lzdGVyU2V0
OjphbGxGUFJzKCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0
ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAor
ICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAo
IWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFw
cGVuZChyZWcuZnByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYWxsLmZv
ckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7
CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlv
cml0eU9yZGVyKEFyZzo6VHlwZSB0eXBlKQoreworICAgIHN0YXRpYyBWZWN0b3I8UmVnPiogcmVz
dWx0W0FyZzo6bnVtVHlwZXNdOworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAg
IHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAg
ICByZXN1bHRbQXJnOjpHUF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAo
R1BSUmVnIHJlZyA6IGdwcnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1
bHRbQXJnOjpHUF0tPmFwcGVuZChSZWcocmVnKSk7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpG
UF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoRlBSUmVnIHJlZyA6IGZw
cnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0tPmFw
cGVuZChSZWcocmVnKSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0W3R5cGVdOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJS
ZWdpc3RlclByaW9yaXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisjZGVmaW5lIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkZQ
UkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0
IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7Citjb25zdCBWZWN0b3I8RlBS
UmVnPiYgZnByc0luUHJpb3JpdHlPcmRlcigpOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPiBz
dHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyOwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0
ZXJzSW5Qcmlvcml0eU9yZGVyPEdQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8R1BSUmVnPiYg
aW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZ3Byc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9Owor
dGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEZQUkluZm8+IHsKKyAg
ICBjb25zdCBWZWN0b3I8RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZnByc0lu
UHJpb3JpdHlPcmRlcigpOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPgorY29uc3Qg
VmVjdG9yPHR5cGVuYW1lIEJhbms6OlJlZ2lzdGVyVHlwZT4mIHJlZ3NJblByaW9yaXR5T3JkZXIo
KQoreworICAgIHJldHVybiBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8QmFuaz46OmluUHJpb3Jp
dHlPcmRlcigpOworfQorCitjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihB
cmc6OlR5cGUpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3Bl
Y2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmlu
dFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IFNwZWNpYWw6OmR1bXBQcmVmaXggPSAiJiI7CisKK1Nw
ZWNpYWw6OlNwZWNpYWwoKQorICAgIDogbV9pbmRleChVSU5UX01BWCkKK3sKK30KKworU3BlY2lh
bDo6flNwZWNpYWwoKQoreworfQorCitDU3RyaW5nIFNwZWNpYWw6Om5hbWUoKSBjb25zdAorewor
ICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIHJldHVy
biBvdXQudG9DU3RyaW5nKCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4KTsKKyAgICBkdW1wSW1wbChv
dXQpOworICAgIGlmIChtX2luZGV4ICE9IFVJTlRfTUFYKQorICAgICAgICBvdXQucHJpbnQobV9p
bmRleCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoKnRoaXMsICI6ICIpOworICAgIGRlZXBEdW1wSW1wbChvdXQp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFs
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNp
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwZWNpYWxfaAorI2RlZmlu
ZSBBaXJTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0
LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CisjaW5jbHVkZSA8d3RmL3RleHQv
Q1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKKworY2xhc3MgU3BlY2lhbCB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlY2lhbCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7Cisg
ICAgCisgICAgU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflNwZWNpYWwoKTsKKworICAgIENTdHJp
bmcgbmFtZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNv
bnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBpc1ZhbGlkKEluc3QmKSA9IDA7CisgICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNr
KEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgPSAwOworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxl
ZCBvbiBmb3IgZWFjaCBJbnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVy
ZSBpcyBubyB3YXkgdG8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2Vk
IGZyb20ganVzdCBvbmUgSW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywK
KyAgICAvLyBpZiB5b3Ugd2FudCB0byBwYXNzIHRoaXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5l
cmF0ZSgpLCB0aGVuIHlvdSBoYXZlIHRvIGVpdGhlcjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVy
YXRlIEFpciB0aGF0IHN0YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5z
dCwgYW5kIHRoZW4gbWVyZ2UKKyAgICAvLyAgICB1c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBw
cm9iYWJseSBub3QgZ3JlYXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0
aGF0CisgICAgLy8gICAgQWlyIGRpZG4ndCBkdXBsaWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVw
bGljYXRpb24gZGlkbid0IGNhdXNlIGFueSBpbnRlcmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8g
ICAgcmVnaXN0ZXIgYXNzaWdubWVudC4KKyAgICAvLworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNp
YWwgbWFpbnRhaW4gYSBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVj
YXVzZSB0aGUgYW5hbHlzaXMKKyAgICAvLyAgICB0aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlz
IHBlcmZvcm1lZCBqdXN0IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdh
eQorICAgIC8vICAgIGZvciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRv
IGJlIHJlYWxsb2NhdGVkLiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29u
c3VsdCB0aGUgSGFzaE1hcC4KKyAgICAvLworICAgIC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVz
ZSAoMSkgYW5kIGZpcmUgdXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisg
ICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaXQncyBub3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBv
cnRVc2VkUmVnaXN0ZXJzKCkgYmVpbmcgY2FsbGVkIGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8g
YXMgZ2VuZXJhdGUoKS4gSWYgd2UgY291bGQgcmVseSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1
c3QgaGF2ZSBlYWNoIFNwZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBv
ZiBSZWdpc3RlclNldCdzIGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0
IG9yZGVyIGluCisgICAgLy8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5j
ZSBpcyB1bmxpa2VseSB0byBjaGFuZ2Ugc2luY2UgaXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBw
ZXJmb3JtYW5jZSBvZiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJy
ZW50bHksIHdlIGRvICgxKSBmb3IgQjMgc3RhY2ttYXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBv
cnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAg
ICB2aXJ0dWFsIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJz
JiwgR2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7CisKKyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVy
U2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpID0gMDsKKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNv
bnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29u
c3QgPSAwOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgY29uc3Qg
Y2hhciogbV9uYW1lOworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3Bl
Y2lhbER1bXAgeworcHVibGljOgorICAgIERlZXBTcGVjaWFsRHVtcChjb25zdCBTcGVjaWFsKiBz
cGVjaWFsKQorICAgICAgICA6IG1fc3BlY2lhbChzcGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICht
X3NwZWNpYWwpCisgICAgICAgICAgICBtX3NwZWNpYWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRl
OgorICAgIGNvbnN0IFNwZWNpYWwqIG1fc3BlY2lhbDsKK307CisKK2lubGluZSBEZWVwU3BlY2lh
bER1bXAgZGVlcER1bXAoY29uc3QgU3BlY2lhbCogc3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVl
cFNwZWNpYWxEdW1wKHNwZWNpYWwpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxs
RXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRp
b25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVu
ZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVy
UHJpb3JpdHkuaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29k
ZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgInNwaWxsRXZlcnl0
aGluZyIpOworCisgICAgLy8gV2Ugd2FudCB0byBrbm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVz
ZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFzaWMgYmxvY2suCisgICAgSW5kZXhNYXA8QmFz
aWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7
CisgICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxD
YWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgIHVzZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6
ZShibG9jay0+c2l6ZSgpICsgMSk7CisKKyAgICAgICAgYXV0byBzZXRVc2VkUmVnaXN0ZXJzID0g
WyZdICh1bnNpZ25lZCBpbmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVz
ZWRSZWdpc3RlcnNbYmxvY2tdW2luZGV4XTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxv
Y2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAg
ICAgICAgICAgICAgICAgIHNldC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfTsKKworICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGJsb2NrLT5zaXplKCkpOworICAgICAg
ICAKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0
SW5kZXgtLTspIHsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0
SW5kZXgpKTsKKyAgICAgICAgICAgIHNldFVzZWRSZWdpc3RlcnMoaW5zdEluZGV4KTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAu
CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1UeXBlc107Cisg
ICAgZm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVz
OyArK3R5cGVJbmRleCkgeworICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMg
PSBhbGxTdGFja1Nsb3RzW3R5cGVJbmRleF07CisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3Rh
dGljX2Nhc3Q8QXJnOjpUeXBlPih0eXBlSW5kZXgpOworICAgICAgICBzdGFja1Nsb3RzLnJlc2l6
ZShjb2RlLm51bVRtcHModHlwZSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0g
Y29kZS5udW1UbXBzKHR5cGUpOyB0bXBJbmRleC0tOykKKyAgICAgICAgICAgIHN0YWNrU2xvdHNb
dG1wSW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3Vz
KTsKKyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5z
dEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRCZWZvcmUgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtp
bnN0SW5kZXhdOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldEFmdGVyID0gdXNlZFJlZ2lz
dGVyc1tibG9ja11baW5zdEluZGV4ICsgMV07CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxv
Y2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAg
ICAgICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xv
dCA9IGFsbFN0YWNrU2xvdHNbdHlwZV1bdG1wLnRtcEluZGV4KCldOworICAgICAgICAgICAgICAg
ICAgICBBcmcgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3QpOworCisgICAgICAgICAgICAgICAg
ICAgIC8vIE5lZWQgdG8gZmlndXJlIG91dCBhIHJlZ2lzdGVyIHRvIHVzZS4gSG93IHdlIGRvIHRo
YXQgZGVwZW5kcyBvbiB0aGUgcm9sZS4KKyAgICAgICAgICAgICAgICAgICAgUmVnIGNob3NlblJl
ZzsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpVc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcg
OiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc2V0QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6RGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVn
c0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
ICghc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3Nl
blJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpVc2VEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Q
cmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
ZXRCZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsK
KworICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKworICAgICAgICAg
ICAgICAgICAgICBPcGNvZGUgbW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91
YmxlOworCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihy
b2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdp
biwgdG1wLCBhcmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0K
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpclNwaWxsRXZlcnl0aGluZ19oCisjZGVmaW5lIEFpclNwaWxsRXZlcnl0aGluZ19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaXMgYSBwaGFzZSBmb3IgdGVzdGlu
Zy4gSXQgYmVoYXZlcyBsaWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGluIHRoZSBzZW5zZSB0aGF0
IGl0CisvLyBlbGltaW5hdGVzIHRlbXBvcmFyaWVzIGZyb20gdGhlIHByb2dyYW0uIEl0IGFjY29t
cGxpc2hlcyB0aGlzIGJ5IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8vIHRlbXBvcmFyaWVzLiBUaGUg
cmVzdWx0aW5nIGNvZGUgaXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVmZmljaWVudC4gVGhpcyBwaGFz
ZSBpcyBncmVhdCBpZiB5b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUgaXMgYSBidWcgaW4gdGhlIHJl
Z2lzdGVyIGFsbG9jYXRvci4gWW91IGNhbiBjb25maXJtIHRoaXMgYnkgcnVubmluZyB0aGlzCisv
LyBwaGFzZSBpbnN0ZWFkIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisvLworLy8gTm90ZSB0
aGF0IGV2ZW4gdGhvdWdoIHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBlc3QgdGhpbmcgcG9zc2li
bGUsIGl0J3Mgbm90IGV2ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1bGFybHkgZWZmaWNpZW50
IHdheS4gU28sIGRvbid0IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcgdGhpcyBwaGFzZSB0byBy
ZWR1Y2UgY29tcGlsZXIKKy8vIGxhdGVuY3kuIElmIHlvdSB3YW50ZWQgdG8gZG8gdGhhdCwgeW91
IHNob3VsZCBjb21lIHVwIHdpdGggYSBjbGV2ZXIgYWxnb3JpdGhtIGluc3RlYWQgb2YgdXNpbmcK
Ky8vIHRoaXMgc2lsbHkgdGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpclNwaWxsRXZlcnl0aGluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90Lmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
U3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCit7CisgICAgbV9vZmZz
ZXRGcm9tRlAgPSB2YWx1ZTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgbV92YWx1ZS0+bV9v
ZmZzZXRGcm9tRlAgPSB2YWx1ZTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisK
K3ZvaWQgU3RhY2tTbG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAi
LCBtX29mZnNldEZyb21GUCwgIiwga2luZCA9ICIsIG1fa2luZCk7CisgICAgaWYgKG1fdmFsdWUp
CisgICAgICAgIG91dC5wcmludCgiLCB2YWx1ZSA9ICIsICptX3ZhbHVlKTsKK30KKworU3RhY2tT
bG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Ns
b3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICA6IG1fYnl0ZVNpemUoYnl0
ZVNpemUpCisgICAgLCBtX2luZGV4KGluZGV4KQorICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUg
PyB2YWx1ZS0+b2Zmc2V0RnJvbUZQKCkgOiAwKQorICAgICwgbV9raW5kKGtpbmQpCisgICAgLCBt
X3ZhbHVlKHZhbHVlKQoreworICAgIEFTU0VSVChieXRlU2l6ZSk7Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3RhY2tTbG90X2gKKyNkZWZpbmUgQWlyU3RhY2tT
bG90X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQu
aCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90VmFsdWU7CisKK25hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBTdGFja1Nsb3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0
ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB1bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybiAx
OworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAyKQorICAgICAgICAgICAgcmV0dXJuIDI7Cisg
ICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDQpCisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAg
ICAgcmV0dXJuIDg7CisgICAgfQorCisgICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgLy8gWmVybyBtZWFucyB0aGF0IGl0J3Mgbm90IHll
dCBhc3NpZ25lZC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBt
X29mZnNldEZyb21GUDsgfQorCisgICAgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGNh
bGxlZCBmcm9tIHBoYXNlcyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24uIEJ1dCB5b3UgY2FuCisg
ICAgLy8gdG90YWxseSBmb3JjZSBhIHN0YWNrIHNsb3QgdG8gbGFuZCBhdCBzb21lIG9mZnNldC4K
KyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCk7CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5z
aWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RW
YWx1ZSopOworICAgIAorICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKKyAgICBTdGFja1Nsb3RLaW5kIG1f
a2luZDsKKyAgICBTdGFja1Nsb3RWYWx1ZSogbV92YWx1ZTsKK307CisKK2NsYXNzIERlZXBTdGFj
a1Nsb3REdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3RhY2tTbG90RHVtcChjb25zdCBTdGFja1Ns
b3QqIHNsb3QpCisgICAgICAgIDogbV9zbG90KHNsb3QpCisgICAgeworICAgIH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc2xv
dCkKKyAgICAgICAgICAgIG1fc2xvdC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29u
c3QgU3RhY2tTbG90KiBtX3Nsb3Q7Cit9OworCitpbmxpbmUgRGVlcFN0YWNrU2xvdER1bXAgZGVl
cER1bXAoY29uc3QgU3RhY2tTbG90KiBzbG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90
RHVtcChzbG90KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK3ZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYg
KCEqdGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGlzUmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0dQKCkpIHsKKyAgICAgICAgb3V0
LnByaW50KCIldG1wIiwgZ3BUbXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIG91dC5wcmludCgiJWZ0bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFpclRtcF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJSZWcu
aCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEFyZzsKKworLy8gQSBUbXAgaXMgYSBnZW5l
cmFsaXphdGlvbiBvZiBhIHJlZ2lzdGVyLiBJdCBjYW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkg
R1BSIG9yIEZQUi4gSXQgY2FuIGFsc28KKy8vIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxv
Y2F0ZWQgcmVnaXN0ZXIgKGkuZS4gYSB0ZW1wb3JhcnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMs
IHdlIHVzZQorLy8gZGVsaWJlcmF0ZWx5IHRlcnNlIG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUg
dG8gdXNlIHRoaXMgbmFtZSBhIGxvdC4KKworY2xhc3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAo
KQorICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1w
KFJlZyByZWcpCisgICAgeworICAgICAgICBpZiAocmVnKSB7CisgICAgICAgICAgICBpZiAocmVn
LmlzR1BSKCkpCisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIo
cmVnLmZwcigpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAg
ICB9CisKKyAgICBleHBsaWNpdCBUbXAoY29uc3QgQXJnJik7CisKKyAgICBzdGF0aWMgVG1wIGdw
VG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUdQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGZwVG1wRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92
YWx1ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVl
OyB9CisKKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5j
b2RlZEdQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBp
c0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUp
OworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzRW5jb2RlZEZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAg
R1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFs
dWUpOworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGRlY29kZUZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAg
ICAgIHJldHVybiBmcHIoKTsKKyAgICB9CisKKyAgICBib29sIGhhc1RtcEluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhaXNSZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBn
cFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBkZWNvZGVGUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGdwVG1wSW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAg
ICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEh
KnRoaXM7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAg
IH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIFRtcChXVEY6Okhhc2hUYWJsZURlbGV0
ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV92YWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBUbXAoV1RGOjpIYXNoVGFi
bGVEZWxldGVkVmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxpbnQ+OjpoYXNoKG1fdmFsdWUpOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRl
eCkKKyAgICB7CisgICAgICAgIHJldHVybiAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGlj
IGludCBlbmNvZGVGUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMSAt
IGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BSKEdQUlJlZyBncHIpCisg
ICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0
UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFIoRlBSUmVnIGZw
cikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUChmcHIgLSBNYWNyb0Fzc2VtYmxlcjo6
Zmlyc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAo
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGlj
IGludCBlbmNvZGVGUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBl
bmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4Owor
ICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQKGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiB2YWx1ZSA+IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNv
ZGVkRlAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9B
c3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0Vu
Y29kZWRGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZh
bHVlKSAmJiB2YWx1ZSA+PSBlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVy
KCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQ
Uih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNv
ZGVkRlBSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQg
dmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5j
b2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVy
OjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBS
KGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2Rl
RlBSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdW5zaWduZWQgZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzRW5jb2RlZEdQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNv
ZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAg
IHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBB
U1NFUlQoaXNFbmNvZGVkRlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIo
TWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisK
KyAgICAvLyAwOiBlbXB0eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0
ZW1wcy4KKyAgICAvLyBuZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQg
bV92YWx1ZTsKK307CisKK3N0cnVjdCBUbXBIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBUbXAmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29s
IGVxdWFsKGNvbnN0IFRtcCYgYSwgY29uc3QgVG1wJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7
Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYg
eworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpBaXI6OlRtcD4geworICAgIHR5cGVkZWYgSlND
OjpCMzo6QWlyOjpUbXBIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1
Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWly
OjpUbXA+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1wPiB7IH07CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpclRtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1w
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJUbXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElu
bGluZXNfaAorI2RlZmluZSBBaXJUbXBJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitpbmxpbmUgVG1wOjpUbXAoY29u
c3QgQXJnJiBhcmcpCit7CisgICAgKnRoaXMgPSBhcmcudG1wKCk7Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBBaXJUbXBJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1l
c3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihDb2Rl
JiBjb2RlLCBjb25zdCBjaGFyKiB3aGVuLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQorICAgICAg
ICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fd2hlbih3aGVuKQorICAgICAgICAsIG1fZHVt
cEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29u
ZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywg
X19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNz
YWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7
CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90czsKKyAgICAgICAgSGFzaFNl
dDxCYXNpY0Jsb2NrKj4gdmFsaWRCbG9ja3M7CisgICAgICAgIEhhc2hTZXQ8U3BlY2lhbCo+IHZh
bGlkU3BlY2lhbHM7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkK
KyAgICAgICAgICAgIHZhbGlkQmxvY2tzLmFkZChibG9jayk7CisgICAgICAgIGZvciAoU3RhY2tT
bG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIHZhbGlkU2xvdHMu
YWRkKHNsb3QpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBtX2NvZGUuc3BlY2lh
bHMoKSkKKyAgICAgICAgICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNwZWNpYWwpOworCisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5k
ZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7
CisgICAgICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAg
ICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRTbG90
cy5jb250YWlucyhhcmcuc3RhY2tTbG90KCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2Nr
KSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OlNwZWNpYWw6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxp
ZFNwZWNpYWxzLmNvbnRhaW5zKGFyZy5zcGVjaWFsKCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwg
KmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFZBTElEQVRF
KGluc3QuaXNWYWxpZEZvcm0oKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAg
ICAgICAgICAgICAgIGlmIChpbnN0SW5kZXggPT0gYmxvY2stPnNpemUoKSAtIDEpCisgICAgICAg
ICAgICAgICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGlu
c3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwg
IiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNC
bG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbGlkQmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiSW4gIiwgKmJs
b2NrKSk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGlu
ZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAg
ICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVz
c2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAg
ICAgICAgICAgb3V0LnByaW50KCJBSVIgVkFMSURBVElPTiBGQUlMVVJFXG4iKTsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiICAgICIsIGNvbmRpdGlvbiwgIiAoIiwgZmlsZW5hbWUsICI6IiwgbGlu
ZU51bWJlciwgIilcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgbWVzc2FnZSwg
IlxuIik7CisgICAgICAgICAgICBpZiAobV93aGVuKQorICAgICAgICAgICAgICAgIG91dC5wcmlu
dCgiICAgIER1cmluZyAiLCBtX3doZW4sICJcbiIpOworICAgICAgICAgICAgZmFpbHVyZU1lc3Nh
Z2UgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nKGZhaWx1
cmVNZXNzYWdlKTsKKyAgICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAgZGF0
YUxvZygiQmVmb3JlICIsIG1fd2hlbiwgIjpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyhtX2R1
bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2coIkF0IHRpbWUgb2YgZmFpbHVy
ZTpcbiIpOworICAgICAgICBkYXRhTG9nKG1fY29kZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWls
dXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUs
IGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAg
IH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV93aGVuOworICAg
IGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFj
ZQorCit2b2lkIHZhbGlkYXRlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIHdoZW4sIGNvbnN0IGNo
YXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihjb2RlLCB3aGVuLCBk
dW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpclZhbGlkYXRlX2gKKyNkZWZpbmUgQWlyVmFsaWRhdGVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBj
aGFyKiB3aGVuID0gbnVsbHB0ciwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOwor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODQyIEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBg
QVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRP
UlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCitjbGFz
cyBPcGNvZGUKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnNwZWNpYWwsIDpvdmVybG9hZHMKKyAg
ICBhdHRyX2FjY2Vzc29yIDpraW5kCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBzcGVjaWFs
KQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBzcGVjaWFsCisgICAg
ICAgIEBraW5kID0gOmluc3QKKyAgICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBv
dmVybG9hZHMgPSBbXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQor
ICAgICAgICBuYW1lWzBdLmRvd25jYXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitj
bGFzcyBBcmcKKyAgICBhdHRyX3JlYWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFs
aXplKHJvbGUsIHR5cGUpCisgICAgICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5
cGUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWdu
YXR1cmUsIDpmb3JtcworCisgICAgZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAg
ICAgICAgQHNpZ25hdHVyZSA9IHNpZ25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3JtcworICAg
IGVuZAorZW5kCisKK2NsYXNzIEtpbmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJf
YWNjZXNzb3IgOnNwZWNpYWwKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAgIEBu
YW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYg
PT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAgQG5h
bWUgPT0gb3RoZXIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFt
ZSBhbmQgQHNwZWNpYWwgPT0gb3RoZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQKKwor
ICAgIGRlZiBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgICAgIGlmIGtpbmQgPT0gIkFkZHIiCisg
ICAgICAgICAgICBbIkFkZHIiLCAiU3RhY2siLCAiQ2FsbEFyZyJdCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBhcmdLaW5k
cworICAgICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xhc3MgRm9y
bQorICAgIGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0aWFsaXpl
KGtpbmRzLCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBAYWx0TmFt
ZSA9IGFsdE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRl
ciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5h
bWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBs
aW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAg
ICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRv
a2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0
aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAg
IEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAg
ICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0
cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAg
IGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9
fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcu
aW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9y
KCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2Ug
IlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAi
UGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVu
ZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1l
Lm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAg
d2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFc
IyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAv
XEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVt
YmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAgICAgICBy
ZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikK
KyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBp
Z25vcmUKKyAgICAgICAgd2hlbiAvXEFbLDoqXC9dLworICAgICAgICAgICAgcmVzdWx0IDw8IFRv
a2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5h
bWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5p
bnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBl
bmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEo
KFUpfChEKXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRva2VuID1+IC9c
QSgoRyl8KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xB
KChUbXApfChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKSlc
Wi8KK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0Yo
dG9rZW4pIG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9y
IHRva2VuID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2Vu
ID1+IC9cQShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAor
CitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAg
ICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBl
bmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAg
ICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJz
ZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFy
c2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5l
bXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUi
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0
IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVu
ZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9y
KCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFk
dmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1
bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmll
ciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAg
IHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9
IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBv
ciBVRCkiKSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVz
dWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9r
ZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1
bmxlc3MgaXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAg
ZW5kCisKKyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5n
CisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQsIFRtcCwgQWRk
ciwgSW5kZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisg
ICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UK
KyAgICAgICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisgICAgICAgIGxvb3AgeworICAgICAgICAg
ICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICBpZiB0b2tl
biA9PSAic3BlY2lhbCIKKyAgICAgICAgICAgICAgICBjb25zdW1lKCJzcGVjaWFsIikKKyAgICAg
ICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVz
dWx0W29wY29kZU5hbWVdCisKKyAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBP
cGNvZGUubmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBp
ZiByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gcmVzdWx0
W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVy
bG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFt
ZSwgZmFsc2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IG9wY29k
ZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gW10K
KyAgICAgICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgaWYgaXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAg
ICAgICAgICAgICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVU
eXBlCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNp
Z25hdHVyZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiLyIKKyAg
ICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLyIpCisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
dG9rZW4uc3RyaW5nCisgICAgICAgICAgICAgICAgICAgIHdoZW4gImJyYW5jaCIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOmJyYW5jaAorICAgICAgICAgICAgICAgICAg
ICB3aGVuICJ0ZXJtaW5hbCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0g
OnRlcm1pbmFsCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkJhZCAvIGRpcmVjdGl2ZSIpCisgICAgICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgICAgICAgICBhZHZhbmNlCisgICAgICAgICAgICAgICAgZW5kCisKKyAg
ICAgICAgICAgICAgICBpZiBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3Ag
eworICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAg
ICAgICAgYWx0TmFtZSA9IG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAi
KSB1bmxlc3Mga2luZHNbLTFdLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga2luZHNbLTFdLnNwZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN1bWUoIioiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGFsdE5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0g
aGFzIHdyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRz
Lmxlbmd0aCA9PSBzaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5k
cy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwg
aW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1t
IiBvciBraW5kLm5hbWUgPT0gIkltbTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBzaWduYXR1cmVbaW5kZXhdLnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9u
LXVzZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0g
IkciCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3Jt
IGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhayB1bmxlc3MgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmUubGVu
Z3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9
PSAwCisgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAg
ICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92
ZXJsb2FkLm5ldyhzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0K
KworICAgICAgICByZXN1bHQKKyAgICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisK
K3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9w
Y29kZXMgPSBwYXJzZXIucGFyc2UKKworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9w
ZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAg
CisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIg
ZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0
cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2Rl
ZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisg
ICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5k
CisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0
cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2gg
eworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwi
CisgICAgfQorICAgIG91dHAucHV0cyAifTsiCisKKyAgICBvdXRwLnB1dHMgInN0YXRpYyBjb25z
dCB1bnNpZ25lZCBudW1PcGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIKKyAgICBvdXRw
LnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCisgICAgCisgICAgb3V0cC5w
dXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJjbGFzcyBQcmludFN0cmVhbTsi
CisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIz
OjpBaXI6Ok9wY29kZSk7IgorICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorfQor
CisjIEZyb20gaGVyZSBvbiwgd2UgZG9uJ3QgdHJ5IHRvIGVtaXQgcHJvcGVybHkgaW5kZW50ZWQg
Y29kZSwgc2luY2Ugd2UncmUgdXNpbmcgYSByZWN1cnNpdmUgcGF0dGVybgorIyBtYXRjaGVyLgor
CitkZWYgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4LCBjb2x1bW5H
ZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgcmV0dXJuIGlmIGZvcm1zLmxlbmd0aCA9PSAw
CisKKyAgICBpZiBmaWx0ZXJbZm9ybXNdCisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAg
aWYgY29sdW1uSW5kZXggPj0gZm9ybXNbMF0ua2luZHMubGVuZ3RoCisgICAgICAgIHJhaXNlIHVu
bGVzcyBmb3Jtcy5sZW5ndGggPT0gMQorICAgICAgICBjYWxsYmFja1tmb3Jtc1swXV0KKyAgICAg
ICAgcmV0dXJuCisgICAgZW5kCisgICAgCisgICAgZ3JvdXBzID0ge30KKyAgICBmb3Jtcy5lYWNo
IHsKKyAgICAgICAgfCBmb3JtIHwKKyAgICAgICAga2luZCA9IGZvcm0ua2luZHNbY29sdW1uSW5k
ZXhdLm5hbWUKKyAgICAgICAgaWYgZ3JvdXBzW2tpbmRdCisgICAgICAgICAgICBncm91cHNba2lu
ZF0gPDwgZm9ybQorICAgICAgICBlbHNlCisgICAgICAgICAgICBncm91cHNba2luZF0gPSBbZm9y
bV0KKyAgICAgICAgZW5kCisgICAgfQorCisgICAgaWYgc3BlZWQgPT0gOmZhc3QgYW5kIGdyb3Vw
cy5sZW5ndGggPT0gMQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29s
dW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIHJl
dHVybgorICAgIGVuZAorCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7Y29sdW1uR2V0dGVyW2Nv
bHVtbkluZGV4XX0pIHsiCisgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgIHwga2V5LCB2
YWx1ZSB8CisgICAgICAgIG91dHAucHV0cyAiI2lmIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0g
IkltbTY0IgorICAgICAgICBLaW5kLmFyZ0tpbmRzKGtleSkuZWFjaCB7CisgICAgICAgICAgICB8
IGFyZ0tpbmQgfAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToi
CisgICAgICAgIH0KKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVt
bkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRw
LnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gVVNFKEpTVkFMVUU2
NCkiIGlmIGtleSA9PSAiSW1tNjQiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisKK2RlZiBtYXRj
aEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAo
I3tpbnN0fS0+b3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAg
fCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAg
ICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKChvcGNvZGUub3Zl
cmxvYWRzLnNpemUgIT0gMSkgb3Igc3BlZWQgPT0gOnNhZmUpCisgICAgICAgICAgICBvdXRwLnB1
dHMgInN3aXRjaCAoI3tpbnN0fS0+YXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRj
aAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8
IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5z
aWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAg
IHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBu
ZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6Igor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAifSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisgICAgCitkZWYgbWF0Y2hJbnN0T3Zl
cmxvYWRGb3JtKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAs
IHNwZWVkLCBpbnN0KSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlm
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbCwgbmlsCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAg
ICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAgICAgICAgICIje2luc3R9LT5hcmdzWyN7Y29s
dW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWx0ZXIgPSBw
cm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAg
ICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQsIGZv
cm0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIG92
ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAg
IGVuZAorICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZVV0aWxzIikgeworICAgIHwgb3V0cCB8
CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3QuaFwiIgorICAgIG91dHAucHV0cyAi
I2luY2x1ZGUgXCJBaXJTcGVjaWFsLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5wdXRzICJp
bmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRw
LnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIFQ+IgorICAgIG91dHAucHV0cyAiaW5saW5lIFQqIG9w
Z2VuSGlkZGVuUHRySWRlbnRpdHkoVCogcG9pbnRlcikgeyByZXR1cm4gcG9pbnRlcjsgfSIKKyAg
ICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0
cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAg
ICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSB3aGlsZSAoZmFsc2UpIgor
CisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiIKKyAgICBvdXRwLnB1
dHMgInZvaWQgSW5zdDo6Zm9yRWFjaEFyZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSIKKyAgICBv
dXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgOmZhc3QsICJ0aGlzIikg
eworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lh
bAorICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbMF0sIEFyZzo6VXNlLCBBcmc6
OkdQKTsgLy8gVGhpcyBpcyBiYXNpY2FsbHkgYm9ndXMsIGJ1dCBpdCB3b3JrcyBmIGFuYWx5c2Vz
IG1vZGVsIFNwZWNpYWwgYXMgYW4gaW1tZWRpYXRlLiIKKyAgICAgICAgICAgIG91dHAucHV0cyAi
YXJnc1swXS5zcGVjaWFsKCktPmZvckVhY2hBcmcoKnRoaXMsIHNjb3BlZExhbWJkYTxFYWNoQXJn
Q2FsbGJhY2s+KGZ1bmN0b3IpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG92ZXJsb2Fk
LnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRl
eCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG5pbAorICAgICAgICAgICAgICAgIGNhc2UgYXJn
LnJvbGUKKyAgICAgICAgICAgICAgICB3aGVuICJVIgorICAgICAgICAgICAgICAgICAgICByb2xl
ID0gIlVzZSIKKyAgICAgICAgICAgICAgICB3aGVuICJEIgorICAgICAgICAgICAgICAgICAgICBy
b2xlID0gIkRlZiIKKyAgICAgICAgICAgICAgICB3aGVuICJVRCIKKyAgICAgICAgICAgICAgICAg
ICAgcm9sZSA9ICJVc2VEZWYiCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7aW5kZXh9XSwgQXJnOjoje3JvbGV9
LCBBcmc6OiN7YXJnLnR5cGV9UCk7IgorICAgICAgICAgICAgfQorICAgICAgICBlbmQKKyAgICB9
CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+IgorICAgIG91dHAucHV0cyAiQUxXQVlTX0lOTElORSBib29sIGlzVmFsaWRG
b3JtKE9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpIgorICAgIG91dHAucHV0
cyAieyIKKyAgICBvdXRwLnB1dHMgIkFyZzo6S2luZCBraW5kc1tzaXplb2YuLi4oQXJndW1lbnRz
KV0gPSB7IGFyZ3VtZW50cy4uLiB9OyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7
IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAg
ICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBvdXRwLnB1dHMgInN3
aXRjaCAoc2l6ZW9mLi4uKEFyZ3VtZW50cykpIHsiCisgICAgICAgIHVubGVzcyBvcGNvZGUuc3Bl
Y2lhbAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAg
ICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9h
ZC5zaWduYXR1cmUubGVuZ3RofToiCisgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJv
YyB7IHwgY29sdW1uSW5kZXggfCAib3BnZW5IaWRkZW5QdHJJZGVudGl0eShraW5kcylbI3tjb2x1
bW5JbmRleH1dIiB9CisgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAg
ICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICB8IGZv
cm0gfAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0gKG5vdCBmb3JtLmtpbmRzLmRldGVj
dCB7IHwga2luZCB8IGtpbmQuc3BlY2lhbCB9KQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIk9QR0VOX1JFVFVSTigje3NwZWNpYWx9KTsiCisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1
bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImRl
ZmF1bHQ6IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZh
dWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0
cC5wdXRzICJyZXR1cm4gZmFsc2U7ICIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1
dHMgImlubGluZSBib29sIGlzVGVybWluYWwoT3Bjb2RlIG9wY29kZSkiCisgICAgb3V0cC5wdXRz
ICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFs
dWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29kZS5raW5kID09
IDp0ZXJtaW5hbCBvciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5w
dXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1
dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSIK
KyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9
CisKK3dyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5w
dXRzICIjaW5jbHVkZSBcIkFpckluc3RJbmxpbmVzLmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNs
dWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYg
eyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91
dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNv
ZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29k
ZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAg
ICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIg
ICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0cyAiICAg
ICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0
cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIK
KyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKKyAgICBvdXRwLnB1dHMgIm5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRz
ICJib29sIEluc3Q6OmlzVmFsaWRGb3JtKCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNo
SW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6c2FmZSwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2Rl
LCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmIChhcmdzLnNpemUoKSA8IDEpIgorICAgICAgICAgICAgb3V0cC5wdXRz
ICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbMF0uaXNT
cGVjaWFsKCkpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQo
KnRoaXMpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24g
PSBmYWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aC50aW1lcyB7Cisg
ICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG92ZXJsb2Fk
LnNpZ25hdHVyZVtpbmRleF0ucm9sZQorICAgICAgICAgICAgICAgIHR5cGUgPSBvdmVybG9hZC5z
aWduYXR1cmVbaW5kZXhdLnR5cGUKKyAgICAgICAgICAgICAgICBraW5kID0gZm9ybS5raW5kc1tp
bmRleF0KKyAgICAgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uIHw9IGtpbmQuc3BlY2lh
bAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IHRo
YXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgcm9sZSwg
c2luY2UKKyAgICAgICAgICAgICAgICAjIGtpbmQgaW1wbGllcyByb2xlLiBTbywgdGhlIG9ubHkg
dGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBpcyB0aGUgdHlwZS4gQW5kIHdlIG9ubHkgaGF2ZQorICAg
ICAgICAgICAgICAgICMgdG8gdmFsaWRhdGUgdGhlIHR5cGUgaWYgd2UgaGF2ZSBhIFRtcC4KKyAg
ICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tpbmRleH1dLnRtcCgpLmlzI3t0eXBlfVAoKSkiCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkc01vcmVWYWxp
ZGF0aW9uCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWlzI3tvcGNvZGUubmFtZX1W
YWxpZCgqdGhpcykpIgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZh
bHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVU
VVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIGZh
bHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRt
aXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRw
LnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAg
ICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06
IgorCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlm
ICghYXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0
c1N0YWNrKCp0aGlzLCBhcmdJbmRleCkpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBT
d2l0Y2ggb24gdGhlIGFyZ0luZGV4LgorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFy
Z0luZGV4KSB7IgorCisgICAgICAgICAgICBudW1BcmdzID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAg
eworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG92ZXJsb2Fk
LnNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgIH0ubWF4CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIG51bUFyZ3MudGltZXMgeworICAgICAgICAgICAgICAgIHwgYXJnSW5kZXggfAorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4fToiCisKKyAgICAgICAgICAg
ICAgICAjIENoZWNrIGlmIGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxsIG9mIHRoZSBvdmVybG9hZHMg
ZWl0aGVyIGRvLCBvciBkb24ndCwgYWRtaXQgYW4gYWRkcmVzcworICAgICAgICAgICAgICAgICMg
YXQgdGhpcyBpbmRleC4gV2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgor
ICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAg
ICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAg
ICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7
CisgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0ZXN0IG51bVllcyBmaXJzdCBi
ZWNhdXNlIGlmIHdlIGVuZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3YW50CisgICAgICAgICAgICAg
ICAgIyB0byBzYXkgdGhhdCBBZGRyZXNzIGlzIGluYWRtaXNzaWJsZS4KKyAgICAgICAgICAgICAg
ICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JF
VFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKwor
ICAgICAgICAgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fk
cy5zaXplICE9IDEpCisKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFy
Z3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAg
b3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgb3Zlcmxv
YWQgfAorCisgICAgICAgICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2Yg
dGhlbSBkbyB3aGF0IHdlIHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAw
CisgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
Zm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRl
eF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAx
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51
bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcs
IGp1c3QgZHJvcCB0byBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgbnVt
Tm8gPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292
ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3Zlcmxv
YWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBU
aGlzIGlzIGhvdyB3ZSB0ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1
bWVudCB0byBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkcmVzcyB5aWVsZHMg
YSB2YWxpZCBmb3JtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9
IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29sdW1uSW5kZXggPT0gYXJnSW5k
ZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmc6OkFkZHIiCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICJhcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgfCBmb3JtcyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG51bVllcyA9IDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy5l
YWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9
PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMg
Kz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBE
cm9wIGRvd24sIGVtaXQgbm8gY29kZSwgc2luY2Ugd2UgY2Fubm90IG1hdGNoLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEtlZXAg
Z29pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0
dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYg
bmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRl
ZmF1bHQ6IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOwor
ICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMg
InJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJDQ2Fs
bEhlbHBlcnM6Okp1bXAgSW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRp
b25Db250ZXh0JiBjb250ZXh0KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJV
TlVTRURfUEFSQU0oaml0KTsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oY29udGV4dCk7
IgorICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIHJlc3VsdDsiCisgICAgbWF0Y2hJ
bnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUs
IG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAg
IG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgqdGhp
cywgaml0LCBjb250ZXh0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBmb3JtLmFs
dE5hbWUKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gZm9ybS5hbHROYW1lCisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQor
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisg
ICAgICAgICAgICAgICAgb3V0cC5wcmludCAicmVzdWx0ID0gIgorICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICBvdXRwLnByaW50ICJqaXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAg
IGZvcm0ua2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQsIGlu
ZGV4IHwKKyAgICAgICAgICAgICAgICBpZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHJpbnQgIiwgIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGNh
c2Uga2luZC5uYW1lCisgICAgICAgICAgICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAgICAg
ICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJn
c1sje2luZGV4fV0uZnByKCkiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgIHdoZW4gIkltbSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbW02NCIKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1t
NjQoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJBZGRyIgorICAgICAgICAgICAgICAgICAgICBv
dXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3
aGVuICJJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4
fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgorICAgICAg
ICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25k
aXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgorICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRwLnB1dHMg
Iik7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4ocmVzdWx0KTsiCisgICAg
ICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7IgorICAgIG91dHAucHV0cyAicmV0dXJuIHJlc3VsdDsiCisgICAgb3V0cC5wdXRzICJ9Igor
CisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lv
biAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAg
Q29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpldHRpc29uKCk7ICAgIAotICAgIENvZGVCbG9jayog
YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayog
YmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRo
aXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3
NwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1
LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRl
eDsgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IGlu
dmFsaWQoKTsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7
IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsg
fQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXggPT0gZGVsZXRlZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFsbFJlZ3NJ
dGVyYWJsZSB7CisgICAgcHVibGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAgICAgICAgICAgZXhw
bGljaXQgaXRlcmF0b3IoUmVnIHJlZykKKyAgICAgICAgICAgICAgICA6IG1fcmVnSW5kZXgocmVn
LmluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJl
ZyBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBSZWc6OmZyb21JbmRleChtX3JlZ0luZGV4KTsg
fQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbV9yZWdJbmRleCA9IFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpLm5l
eHQoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9yZWdJbmRleCA9
PSBvdGhlci5tX3JlZ0luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdW5zaWduZWQgbV9yZWdJbmRleDsKKyAgICAg
ICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
aXRlcmF0b3IoUmVnKCkpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUg
YWxsKCkgeyByZXR1cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0
aWMgdWludDhfdCBpbnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkocmV2aXNp
b24gMTkxNTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0
TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUmVnaXN0ZXJBdE9mZnNl
dExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaQogICAgIGlmIChvZmZzZXRCYXNlVHlwZSA9PSBGcmFt
ZVBvaW50ZXJCYXNlZCkKICAgICAgICAgb2Zmc2V0ID0gLShzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+
KG51bWJlck9mUmVnaXN0ZXJzKSAqIHNpemVvZih2b2lkKikpOwogCi0gICAgZm9yIChSZWcgcmVn
ID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7cmVnID0gcmVnLm5leHQoKSkgewor
ICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcg
PSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmIChyZWdpc3RlclNldC5nZXQocmVnKSkgewogICAg
ICAgICAgICAgYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQocmVnLCBvZmZzZXQpKTsKICAgICAgICAg
ICAgIG9mZnNldCArPSBzaXplb2Yodm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAkocmV2aXNpb24gMTkxNTg2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWdpc3RlcnMuY2xl
YXIoKTsKICAgICB9CiAKLSAgICBzaXplX3Qgc2l6ZSgpCisgICAgc2l6ZV90IHNpemUoKSBjb25z
dAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzLnNpemUoKTsKICAgICB9CkBAIC02
Niw2ICs2Niw5IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zmc2V0KiBmaW5kKFJlZykgY29u
c3Q7CiAgICAgdW5zaWduZWQgaW5kZXhPZihSZWcpIGNvbnN0OyAvLyBSZXR1cm5zIFVJTlRfTUFY
IGlmIG5vdCBmb3VuZC4KIAorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRl
cmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVycy5iZWdpbigpOyB9CisgICAg
VmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJl
dHVybiBtX3JlZ2lzdGVycy5lbmQoKTsgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3Rl
ckF0T2Zmc2V0PiBtX3JlZ2lzdGVyczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTMgQEAg
cHVibGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3Ro
ZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5z
aWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0
b3Iuc2V0Qml0cygpKQorICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkp
OworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQo
cmVnKTsgfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9n
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTAtMjQgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBDcmVhdGUgYSBzdXBlciByb3VnaCBwcm90
b3R5cGUgb2YgQjMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDI4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL01hdGhF
eHRyYXMuaDoKKyAgICAgICAgKFdURjo6cmFuZ2VzT3ZlcmxhcCk6IE5pY2UgdXRpbGl0eSBmb3Ig
Y2hlY2tpbmcgaWYgcmFuZ2VzIG92ZXJsYXAuCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFk
ZCBhIEVOQUJMRShCM19KSVQpIGZlYXR1cmUgZmxhZy4KKyAgICAgICAgKiB3dGYvU2NvcGVkTGFt
YmRhLmg6IEFkZGVkLiBUaGlzIGFsbG93cyB1cyB0byBkbyB6ZXJvLWFsbG9jYXRpb24sIHplcm8t
Y29weSBleHRlcm4gbGFtYmRhcy4KKyAgICAgICAgKFdURjo6c2NvcGVkTGFtYmRhKToKKyAgICAg
ICAgKiB3dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpjcmVhdGVTaGFyZWRUYXNrKToK
KwogMjAxNS0xMC0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAg
IEZhY3RvciBvdXQgdGhlIGdyYXBoIG5vZGUgd29ya2xpc3RzIGZyb20gREZHIGludG8gV1RGCklu
ZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5
MTU4NikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8q
IFdvcmRMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJMEZFQjNE
Q0YxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFy
ZWRUYXNrLmggKi87IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZl
Y3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5o
ICovOyB9OworCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCMDFCREFD
RDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJEODI1MzEw
MDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9k
ZVdvcmtsaXN0LmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRy
U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVE
NjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkwRkY4NjA5NTFC
Q0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3RiAvKiBQ
b2ludGVyQ29tcGFyaXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBGRTQ0NzlC
MUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0RD
RTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNj
b3BlZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRMYW1i
ZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUzMTAwODBG
Rjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5NDE2RUFB
RkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVBQjA0MTAw
MjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFBRkY4MDAy
NEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNEMzkwMDgw
RkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0MTIzRkYg
LyogU2VnbWVudGVkVmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEyM0ZGIC8q
IFNlbnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQxMjNGRiAv
KiBTSEExLmNwcCAqLywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkxNTFBODI1
QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVk
TGFtYmRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIzRkYgLyog
VGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1MTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3
QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDog
U291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4
dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTksNiArNDE5LDE2IEBAIGlubGluZSBUIGxlZnRT
aGlmdFdpdGhTYXR1cmF0aW9uKFQgdmFsdWUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgcmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQg
bGVmdE1heCwgVCByaWdodE1pbiwgVCByaWdodE1heCkKK3sKKyAgICBpZiAobGVmdE1pbiA8PSBy
aWdodE1pbiAmJiBsZWZ0TWF4ID49IHJpZ2h0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICBpZiAocmlnaHRNaW4gPD0gbGVmdE1pbiAmJiByaWdodE1heCA+PSBsZWZ0TWluKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdU
RgogCiAjZW5kaWYgLy8gI2lmbmRlZiBXVEZfTWF0aEV4dHJhc19oCkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJ
KHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTc3NiwxMiArNzc2LDIwIEBACiAjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJ
VCAxCiAjZW5kaWYKIAorLyogVGhlIEIzIGNvbXBpbGVyIGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNr
ZW5kIHRoYXQgaXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQuIFdlIHdpbGwga2VlcCBpdCBidWlsZGlu
ZworICAgb24gRGFyd2luL3g4Ni02NCBmb3Igbm93LCB0aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2Vw
dCBmb3IgdGVzdHMuICovCisjaWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQorI2RlZmluZSBF
TkFCTEVfQjNfSklUIDEKKyNlbmRpZgorCiAvKiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBh
dmFpbGFibGUsIHRoZW4gZGlzYWJsZSB1cHBlciB0aWVycyBhcyB3ZWxsOiAqLwogI2lmICFFTkFC
TEUoSklUKQotI3VuZGVmIEVOQUJMRV9ERkdfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBj
YW4gcmVkZWZpbmUgaXQuICovCi0jdW5kZWYgRU5BQkxFX0ZUTF9KSVQgICAgICAvKiBVbmRlZiBz
byB0aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI3Vu
ZGVmIEVOQUJMRV9GVExfSklUCisjdW5kZWYgRU5BQkxFX0IzX0pJVAogI2RlZmluZSBFTkFCTEVf
REZHX0pJVCAwCiAjZGVmaW5lIEVOQUJMRV9GVExfSklUIDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJ
VCAwCiAjZW5kaWYKIAogLyogQ291bnRzIHVzZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2Ft
cGxpbmcgY291bnRlcnMuIEJlIHN1cmUgdG8gYWxzbwpJbmRleDogU291cmNlL1dURi93dGYvU2Nv
cGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRh
X2gKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBl
ZmZpY2llbnRseSBwYXNzIGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1
aXJpbmcKKy8vIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxs
ZWUgc2hvdWxkIGJlIGRlY2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExh
bWJkYTxNeVRoaW5ncyogKGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3Qg
ZG9lczoKKy8vCisvLyB2b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZm
Jik+KFsmXSAoaW50IHgsIFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisv
LyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEu
IFRoZSBsYW1iZGEgaXMgb25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNr
IC0gaGVuY2UgdGhlIG5hbWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dGlvblR5cGU+IGNsYXNzIFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5
cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0
VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVz
dWx0VHlwZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIs
IHZvaWQqIGFyZyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwg
bV9hcmcoYXJnKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigp
KEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9pbXBsKG1fYXJnLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4u
Lik7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFy
ZywgQXJndW1lbnRUeXBlcyYmLi4uKTsKKyAgICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFt
YmRhRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9y
PFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRM
YW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBQYXNzZWRGdW5jdG9yPgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFz
c2VkRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUg
KEFyZ3VtZW50VHlwZXMuLi4pPihpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5j
dG9yKHN0ZDo6Zm9yd2FyZDxQYXNzZWRGdW5jdG9yPihmdW5jdG9yKSkKKyAgICB7CisgICAgfQor
Citwcml2YXRlOgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1
bWVudCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVy
biBzdGF0aWNfY2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3Io
CisgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7
CisgICAgfQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1
bmN0aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQorewor
ICAgIHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3Rk
Ojpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
K3VzaW5nIFdURjo6U2NvcGVkTGFtYmRhOwordXNpbmcgV1RGOjpzY29wZWRMYW1iZGE7CisKKyNl
bmRpZiAvLyBTY29wZWRMYW1iZGFfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAx
OTE1ODYpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc5LDYgKzc5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1
bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShm
dW5jdG9yKSkKKyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFy
Z3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzEx
NSwxMSBAQCBSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5j
dG9yPihmdW5jdG9yKSk7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVu
YW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRU
YXNrKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJl
ZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7
Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264051</attachid>
            <date>2015-10-26 10:55:22 -0700</date>
            <delta_ts>2015-10-26 16:51:56 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>614008</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MiBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFjY2VwdFJvb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRSb290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OmFjY2VwdEludGVybmFscyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjphY2NlcHRPcGVyYW5kcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OmFjY2VwdE9wZXJhbmRzTGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUxvYWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBZGQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFuZExvYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAgICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzTG93
ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICog
YjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpvZmZzZXQpOgorICAg
ICAgICAoSlNDOjpCMzo6TWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKToKKyAgICAgICAgKiBiMy9C
M09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzQ2hlY2tNYXRo
KToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZGF0
YSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAo
SlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6
UGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIz
L0IzUGF0Y2hwb2ludFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2lu
dFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpC
Mzo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL0IzUGhhc2VTY29wZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpQcm9jZWR1cmUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjp+UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2sp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3Jb
XSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjppdGVyYXRvcjo6ZmluZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24p
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlv
bjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRv
cltdKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKiBi
My9CM1Byb2NlZHVyZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3RLaW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90S2luZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjph
Y2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpieXRlU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6a2luZCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja1Nsb3RWYWx1ZTo6b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
U2xvdFZhbHVlOjpzZXRPZmZzZXRGcm9tRlApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OlN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6ZHVtcCk6CisgICAgICAgICogYjMvQjNT
dGFja21hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFja21hcCk6
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6c2V0T3BhcXVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN0YWNrbWFwOjpvcGFxdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpvcGFxdWVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y29uc3RyYWluKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwOjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpjbG9iYmVy
ZWQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldEdlbmVyYXRvcik6CisgICAgICAg
ICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21h
cFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNw
ZWNpYWw6OmlzVmFsaWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6
YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6YXBw
ZW5kUmVwc0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JB
cmcpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246OlN1Y2Nlc3NvckNvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNz
b3JDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxl
Y3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3Nv
ckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6
QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nl
c3NvckNvbGxlY3Rpb246OmVuZCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpkdW1wKToKKyAgICAgICAgKiBiMy9C
M1N3aXRjaENhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpTd2l0
Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6Y2FzZVZhbHVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OnRhcmdldCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCbG9jayk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSk6CisgICAgICAgIChKU0M6
OkIzOjpTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6YXBwZW5kQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKToKKyAgICAg
ICAgKiBiMy9CM1N3aXRjaFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Om51bUNhc2VW
YWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6Y2FzZVZhbHVlcyk6CisgICAgICAgIChKU0M6OkIz
OjpTd2l0Y2hWYWx1ZTo6ZmFsbFRocm91Z2gpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN3
aXRjaFZhbHVlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjplbmQpOgorICAgICAgICAqIGIz
L0IzVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM1R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppc0ludCk6CisgICAg
ICAgIChKU0M6OkIzOjppc0Zsb2F0KToKKyAgICAgICAgKEpTQzo6QjM6OnBvaW50ZXJUeXBlKToK
KyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2ls
b25WYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzVXBzaWxvblZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VXBzaWxvblZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6cGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6VXBzaWxvblZhbHVlKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VXNlQ291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpC
Mzo6VXNlQ291bnRzOjp+VXNlQ291bnRzKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6b3BlcmF0b3JbXSk6CisgICAgICAg
ICogYjMvQjNWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6dmFsaWRhdGUp
OgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6On5WYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eSk6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0RvdWJsZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6
OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp0eXBlRm9yKToKKyAgICAgICAg
KiBiMy9CM1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFjY2VwdHMp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Om9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Y2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnR5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFpclR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXAp
OgorICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6Omhhc0ludCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
Y29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
b2Zmc2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2Fpcjog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fp
ci9BaXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29u
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpm
cFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZv
ckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hh
c2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAg
ICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpk
ZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVu
ZEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNl
c3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBC
YXNpY0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVt
cDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBi
My9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0Nh
bGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFs
Ojppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNT
dGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWly
Q29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0lu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICog
YjMvYWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5l
d1RtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJh
bWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tT
bG90c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2lu
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVu
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJh
dG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNp
YWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OnNwZWNpYWxzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zZXJ0aW9uU2V0Ojpjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0
OjphcHBlbmRJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6
Omluc2VydEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2Vy
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6ZHVtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Okluc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpJbnN0OjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNo
VG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Rm9yRWFjaDxUbXA+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Rm9y
RWFjaDxBcmc+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFj
aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Omhhc1NwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6aXNTaGlmdFZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNMc2hpZnQzMlZhbGlk
KToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxp
dmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Omxp
dmVBdFRhaWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpM
b2NhbENhbGMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjps
aXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6dGFrZUxp
dmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpleGVjdXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNj
b3BlOjp+UGhhc2VTY29wZSk6CisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUuaDogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Z3Byc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmZwcnNJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpy
ZWdzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEdQUkluZm8+OjppblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz46OmluUHJpb3JpdHlPcmRlcik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6
OlNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjp+U3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6Om5hbWUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTcGVjaWFsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZGVl
cER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OkRlZXBTcGVjaWFsRHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkRlZXBTcGVjaWFsRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAg
ICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9h
aXIvQWlyU3RhY2tTbG90LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNr
U2xvdDo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6U3RhY2tTbG90KToKKyAgICAgICAgKiBi
My9haXIvQWlyU3RhY2tTbG90Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFj
a1Nsb3Q6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjppbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6YWxpZ25tZW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U3RhY2tTbG90Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6
b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xvdER1bXA6
OkRlZXBTdGFja1Nsb3REdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xv
dER1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEZvckluZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6VG1wOjppc0dQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlRtcDo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzUmVnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmZwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6cmVnKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpoYXNUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6Z3BUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnBUbXBJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6VG1wOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpl
bmNvZGVHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZW5jb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
VG1wOjppc0VuY29kZWRGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVk
R1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRGUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc0VuY29kZWRGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZGVjb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjpkZWNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcEhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6VG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dmFsaWRhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJWYWxp
ZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjogQWRk
ZWQuCisgICAgICAgICogYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGVB
bmRSdW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdDQyKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBqaXQvUmVnLmg6CisgICAgICAgIChKU0M6
OlJlZzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpSZWc6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6
UmVnOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6UmVnOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVy
YXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjplbmQpOgorICAg
ICAgICAoSlNDOjpSZWc6OmFsbCk6CisgICAgICAgIChKU0M6OlJlZzo6aW52YWxpZCk6CisgICAg
ICAgIChKU0M6OlJlZzo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJBdE9mZnNldExpc3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
UmVnaXN0ZXJBdE9mZnNldExpc3QpOgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6ZW5kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpm
b3JFYWNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisKIDIwMTUtMTAt
MjQgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVGVhY2ggY3JlYXRl
X2hhc2hfdGFibGUgdG8gb21pdCBidWlsdGlucyBtYWNyb3Mgd2hlbiBnZW5lcmF0aW5nIHRhYmxl
cyBmb3IgbmF0aXZlLW9ubHkgb2JqZWN0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
IFZQQVRIID0gXAogCiBQWVRIT04gPSBweXRob24KIFBFUkwgPSBwZXJsCitSVUJZID0gcnVieQog
CiBKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUiA9ICQoSmF2YVNjcmlwdENvcmUpL1NjcmlwdHMK
IApAQCAtNTksNiArNjAsMTAgQEAgYWxsIDogXAogICAgIExleGVyLmx1dC5oIFwKICAgICBLZXl3
b3JkTG9va3VwLmggXAogICAgIFJlZ0V4cEppdFRhYmxlcy5oIFwKKyAgICBCM0xvd2VyaW5nTWF0
Y2hlci5oIFwKKyAgICBCM0FkZHJlc3NNYXRjaGVyLmggXAorICAgIEIzQ29tcGFyaXNvbk1hdGNo
ZXIuaCBcCisgICAgQWlyT3Bjb2RlLmggXAogIwogCiAjIEphdmFTY3JpcHQgYnVpbHRpbnMuCkBA
IC0yNjIsNiArMjY3LDE2IEBAIElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUyA9IFwKIEpT
UmVwbGF5SW5wdXRzLmggOiAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBV
VF9HRU5FUkFUT1JfU0NSSVBUUykKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weSAtLW91dHB1dERpciAuIC0tZnJh
bWV3b3JrIEphdmFTY3JpcHRDb3JlICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQog
CitCM0xvd2VyaW5nTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0
ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0
dGVybnMKKwkkKFJVQlkpICReIAorQjNBZGRyZXNzTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3Jl
KS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNB
ZGRyZXNzTWF0Y2hlci5wYXR0ZXJucworCSQoUlVCWSkgJF4KK0IzQ29tcGFyaXNvbk1hdGNoZXIu
aDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2
YVNjcmlwdENvcmUpL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICRe
CisKK0Fpck9wY29kZS5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRv
ci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkp
ICReCisKICMgRHluYW1pY2FsbHktZGVmaW5lZCB0YXJnZXRzIGFyZSBsaXN0ZWQgYmVsb3cuIFN0
YXRpYyB0YXJnZXRzIGJlbG9uZyB1cCB0b3AuCiAKIGFsbCA6IFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAoCiAJCQkpOwogCQkJZGVwZW5k
ZW5jaWVzID0gKAorCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFERSAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLAogCQkJCTVENkIyQTUxMTUyQjlFMjMwMDUyMzFERSAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLAogCQkJCTVENkIyQTU1MTUyQjlFMjMwMDUyMzFERSAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLApAQCAtNjg1LDYgKzY4NiwxMjEgQEAKIAkJMEZFQTBBMzMxNzBENDBCRjAwQkI3
MjJDIC8qIERGR0pJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICov
OyB9OwogCQkwRkVBMEEzNDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMzAxNzBENDBCRjAw
QkI3MjJDIC8qIERGR0pJVENvZGUuaCAqLzsgfTsKIAkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FE
IC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5j
cHAgKi87IH07CisJCTBGRUM4NEZFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi87IH07CisJ
CTBGRUM4NEZGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MDAxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Js
b2NrLmNwcCAqLzsgfTsKKwkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovOyB9OworCQkwRkVDODUwMjFC
REFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9ja0lubGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRp
bHMuaCAqLzsgfTsKKwkJMEZFQzg1MDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovOyB9OworCQkwRkVDODUw
NTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLzsg
fTsKKwkJMEZFQzg1MDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRDFCREFDREFD
MDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MDgxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5o
ICovOyB9OworCQkwRkVDODUwOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLzsgfTsKKwkJMEZFQzg1MEExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLzsgfTsKKwkJ
MEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1MEMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRp
dml0eS5oICovOyB9OworCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNDFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDMyVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAg
Ki87IH07CisJCTBGRUM4NTEwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi87IH07CisJCTBGRUM4NTExMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3REb3VibGVWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0RG91YmxlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFs
dWUuaCAqLzsgfTsKKwkJMEZFQzg1MTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4
NTE0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29udHJvbFZhbHVlLmggKi87IH07CisJCTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW5jeUNsYXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNw
cCAqLzsgfTsKKwkJMEZFQzg1MTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEND
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggKi87IH07CisJCTBGRUM4NTE3
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzRnJlcXVlbnRlZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTE4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0dlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLzsgfTsK
KwkJMEZFQzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyYXRlLmggKi87IH07CisJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5k
ZXhNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi87IH07CisJCTBGRUM4NTFD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eFNldC5oICovOyB9OworCQkwRkVDODUxRDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWly
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovOyB9OworCQkwRkVDODUx
RTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNM
b3dlclRvQWlyLmggKi87IH07CisJCTBGRUM4NTFGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9y
eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmggKi87IH07CisJCTBGRUM4NTIxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM09wY29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICovOyB9OworCQkw
RkVDODUyMjFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M09wY29kZS5oICovOyB9OworCQkwRkVDODUyMzFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCAq
LzsgfTsKKwkJMEZFQzg1MjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwICovOyB9OworCQkw
RkVDODUyNjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1MjcxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTI4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmgg
Ki87IH07CisJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi87IH07CisJCTBGRUM4NTJBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2Nv
cGUuaCAqLzsgfTsKKwkJMEZFQzg1MkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUx
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgKi87IH07CisJCTBGRUM4NTJDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2Vk
dXJlLmggKi87IH07CisJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLzsgfTsKKwkJ
MEZFQzg1MkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXAuY3BwICovOyB9OworCQkwRkVDODUyRjFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja21hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLzsgfTsKKwkJMEZF
Qzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU2MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTMxMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXBTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi87IH07
CisJCTBGRUM4NTMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLzsgfTsKKwkJMEZFQzg1MzQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tT
bG90VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLzsgfTsK
KwkJMEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovOyB9OworCQkwRkVDODUz
NzFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaENhc2UuY3BwICovOyB9OworCQkwRkVDODUzODFCREFDREFDMDA4MEZGNzQgLyogQjNT
d2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi87IH07CisJCTBG
RUM4NTM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi87
IH07CisJCTBGRUM4NTNCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVHlwZS5jcHAgKi87IH07CisJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLzsgfTsKKwkJMEZFQzg1M0QxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi87IH07CisJ
CTBGRUM4NTNGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNTFCREFDREFDMDA4MEZG
NzQgLyogQjNVc2VDb3VudHMuY3BwICovOyB9OworCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovOyB9Owor
CQkwRkVDODU0MTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNzFCREFDREFDMDA4MEZG
NzQgLyogQjNWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovOyB9OworCQkw
RkVDODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
QTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovOyB9OworCQkwRkVDODU0NTFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5s
aW5lcy5oICovOyB9OworCQkwRkVDODU0NjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
QzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi87IH07CisJCTBGRUM4NTQ3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJl
cC5oICovOyB9OworCQkwRkVDODU2RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFj
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi87IH07CisJCTBG
RUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0OTFCREFDREM3MDA4MEZG
NzQgLyogQWlyQWxsb2NhdGVTdGFjay5oICovOyB9OworCQkwRkVDODU2RjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovOyB9OworCQkw
RkVDODU3MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWly
QXJnLmggKi87IH07CisJCTBGRUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJCYXNpY0Jsb2NrLmggKi87IH07CisJCTBGRUM4NTczMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
Q2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi87
IH07CisJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRGMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1NzUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICov
OyB9OworCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNvZGUuaCAqLzsgfTsKKwkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5o
ICovOyB9OworCQkwRkVDODU3ODFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzkxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUu
aCAqLzsgfTsKKwkJMEZFQzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLzsgfTsKKwkJ
MEZFQzg1N0IxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU2MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgKi87IH07CisJCTBGRUM4NTdD
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi87IH07CisJCTBGRUM4NTdEMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlv
blNldC5jcHAgKi87IH07CisJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRp
b25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTU5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLzsgfTsKKwkJMEZF
Qzg1N0YxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3QuY3BwICovOyB9OworCQkwRkVDODU4MDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLzsgfTsKKwkJMEZFQzg1ODExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGlu
ZXMuaCAqLzsgfTsKKwkJMEZFQzg1ODIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RDFC
REFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAqLzsgfTsKKwkJMEZFQzg1ODMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNl
U2NvcGUuY3BwICovOyB9OworCQkwRkVDODU4NDFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VT
Y29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLzsgfTsKKwkJMEZFQzg1
ODUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjAxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovOyB9OworCQkwRkVDODU4NjFCREFDREM3
MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJl
Z2lzdGVyUHJpb3JpdHkuaCAqLzsgfTsKKwkJMEZFQzg1ODcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovOyB9OworCQkw
RkVDODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1ODkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
aWxsRXZlcnl0aGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cCAqLzsgfTsKKwkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGlu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1
NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovOyB9OworCQkwRkVD
ODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTdGFja1Nsb3QuY3BwICovOyB9OworCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi87IH07CisJ
CTBGRUM4NThEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclRtcC5jcHAgKi87IH07CisJCTBGRUM4NThFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLzsgfTsKKwkJMEZFQzg1OEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclRtcElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVz
LmggKi87IH07CisJCTBGRUM4NTkwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QjFC
REFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVDODU5MTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0
ZS5oICovOyB9OworCQkwRkVDODU5MzFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTky
MUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovOyB9OworCQkwRkVDODVBMzFC
REI1Q0YxMDA4MEZGNzQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIg
LyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTBGRUM4NUE0MUJEQjVDRjEwMDgwRkY3
NCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNj
cmlwdENvcmUuZnJhbWV3b3JrICovOyB9OworCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyog
dGVzdGIzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovOyB9OwogCQkwRkVENjdC
OTFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I3MUIyNjI1NkQw
MDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkVENjdC
QTFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCODFCMjYyNTZEMDA2
NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi87IH07CiAJCTBGRUU5ODQxMUE4
ODY1QjcwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNl
dHVwVmFyYXJnc0ZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTE4MzksNiArMTk1NSwxMyBAQAogCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcg
PSAwRkNFRkFCNTE4MDVENjE2MDA0NzJDRTQ7CiAJCQlyZW1vdGVJbmZvID0gbGx2bUZvckpTQzsK
IAkJfTsKKwkJMEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94
eSAqLyA9IHsKKwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBv
cnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJ
CXByb3h5VHlwZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGRUM4NTk0MUJEQjVD
RjEwMDgwRkY3NDsKKwkJCXJlbW90ZUluZm8gPSB0ZXN0YjM7CisJCX07CiAJCTBGRjkyMkQyMTRG
NDZCMkYwMDQxQTI0RSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQ
QlhDb250YWluZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQw
MjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTgwLDYgKzI3MDMsMTIwIEBA
CiAJCTBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RG
R0pJVENvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBERkdKSVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJs
ZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJs
ZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNDFCREFDREFDMDA4
MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0FyZ3VtZW50
UmVnVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNTFCREFD
REFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1bWVudFJl
Z1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Js
b2NrLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBw
YXRoID0gYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrVXRpbHMuaDsgcGF0aCA9
IGIzL0IzQmFzaWNCbG9ja1V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCbG9ja1dvcmtsaXN0Lmg7IHBhdGggPSBiMy9CM0Jsb2Nr
V29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEIzQ2hlY2tTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzQ2hlY2tTcGVjaWFs
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzQ2hlY2tTcGVjaWFsLmg7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1Zh
bHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hlY2tWYWx1
ZS5jcHA7IHBhdGggPSBiMy9CM0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjND
aGVja1ZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJGMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM0NvbW1vbi5jcHA7IHBhdGggPSBiMy9CM0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbW1vbi5oOyBwYXRoID0gYjMv
QjNDb21tb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM0NvbW11dGF0aXZpdHkuY3BwOyBwYXRoID0gYjMvQjNDb21tdXRhdGl2
aXR5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0NvbW11dGF0aXZpdHkuaDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDMyVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b25zdDMyVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDMyVmFsdWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMy
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdDMyVmFsdWUu
aDsgcGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdDY0
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzcxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdERv
dWJsZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3REb3Vi
bGVWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDOTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNDb250cm9sVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb250cm9sVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDQTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNDb250cm9sVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5j
eUNsYXNzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRnJlcXVl
bmN5Q2xhc3MuY3BwOyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5j
eUNsYXNzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xh
c3MuaDsgcGF0aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbnRlZEJsb2NrLmg7IHBh
dGggPSBiMy9CM0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0dlbmVyYXRlLmNwcDsgcGF0aCA9IGIzL0IzR2Vu
ZXJhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRjFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM0dlbmVyYXRlLmg7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVu
dGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljRnJl
cXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
SW5kZXhNYXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbmRleE1hcC5o
OyBwYXRoID0gYjMvQjNJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0luZGV4U2V0Lmg7IHBhdGggPSBiMy9CM0luZGV4U2V0Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0xvd2VyVG9BaXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNM
b3dlclRvQWlyLmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlclRvQWlyLmg7IHBhdGgg
PSBiMy9CM0xvd2VyVG9BaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM01lbW9y
eVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNNZW1vcnlWYWx1ZS5oOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNv
ZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcGNvZGUuY3Bw
OyBwYXRoID0gYjMvQjNPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNPcGNvZGUuaDsgcGF0aCA9IGIzL0IzT3Bjb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdp
bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbi5jcHA7
IHBhdGggPSBiMy9CM09yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM09yaWdpbi5oOyBwYXRoID0gYjMvQjNPcmlnaW4uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQ
YXRjaHBvaW50U3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNQYXRjaHBvaW50U3BlY2lhbC5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyog
QjNQYXRjaHBvaW50VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNQYXRjaHBvaW50VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQg
LyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNQYXRjaHBvaW50VmFsdWUuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bo
YXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQaGFz
ZVNjb3BlLmNwcDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQaGFzZVNjb3BlLmg7IHBhdGggPSBi
My9CM1BoYXNlU2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEIzUHJvY2VkdXJlLmNwcDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUHJvY2VkdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJv
Y2VkdXJlLmg7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlSW5saW5lcy5oOyBw
YXRoID0gYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXAuY3BwOyBwYXRoID0gYjMvQjNT
dGFja21hcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU1MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzU3RhY2ttYXAuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVj
aWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXBT
cGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBT
cGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVj
aWFsLmg7IHBhdGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5j
cHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5oOyBwYXRoID0g
YjMvQjNTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuY3BwOyBwYXRoID0gYjMv
QjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsgcGF0aCA9IGIzL0IzU3RhY2tT
bG90VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0IzU3VjY2Vz
c29yQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRDFC
REFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoQ2FzZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRjaENhc2Uu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRTFCREFDREFDMDA4MEZG
NzQgLyogQjNTd2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
U3dpdGNoQ2FzZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuY3Bw
OyBwYXRoID0gYjMvQjNTd2l0Y2hWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuaDsgcGF0aCA9IGIzL0IzU3dp
dGNoVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM1R5cGUuY3BwOyBwYXRoID0gYjMvQjNUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1R5cGUuaDsgcGF0aCA9IGIzL0IzVHlwZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyog
QjNVcHNpbG9uVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNVcHNpbG9uVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNp
bG9uVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVcHNpbG9uVmFs
dWUuaDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1VzZUNvdW50cy5jcHA7IHBhdGggPSBi
My9CM1VzZUNvdW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY2
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM1VzZUNvdW50cy5oOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
aWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWxpZGF0
ZS5jcHA7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWxpZGF0ZS5oOyBwYXRoID0gYjMvQjNWYWxpZGF0
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGOTFCREFDREFDMDA4MEZG
NzQgLyogQjNWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlLmg7IHBhdGggPSBiMy9CM1ZhbHVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1ZhbHVlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVl
SW5saW5lcy5oOyBwYXRoID0gYjMvQjNWYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZVJlcC5jcHA7IHBhdGgg
PSBiMy9CM1ZhbHVlUmVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNWYWx1ZVJlcC5oOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxs
b2NhdGVTdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJB
bGxvY2F0ZVN0YWNrLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckFsbG9jYXRlU3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxs
b2NhdGVTdGFjay5oOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBcmcuY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckFyZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTRCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlyQXJnLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJhc2ljQmxvY2su
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmg7IHBhdGggPSBi
My9haXIvQWlyQmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9h
aXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJD
Q2FsbFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTAxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQWlyQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2Rl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNvZGUuaDsgcGF0aCA9IGIz
L2Fpci9BaXJDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9haXIvQWlyRnJl
cXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUzMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2VuZXJhdGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NDFCREFDREM3MDA4MEZG
NzQgLyogQWlyR2VuZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWly
R2VuZXJhdGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNv
bnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGlvbkNv
bnRleHQuaDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTcxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTgxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBBaXJJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc2Vy
dGlvblNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU5MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlySW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9uU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
ckluc3QuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5z
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1QzFCREFDREM3MDA4MEZG
NzQgLyogQWlySW5zdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlySW5zdElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2
ZW5lc3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3MuaDsg
cGF0aCA9IGIzL2Fpci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmNwcDsgcGF0aCA9IGIz
L2Fpci9BaXJQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQWlyUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvYWlyL0FpclBoYXNl
U2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjAxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHBhdGggPSBiMy9haXIvQWly
UmVnaXN0ZXJQcmlvcml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclJlZ2lzdGVyUHJpb3JpdHkuaDsgcGF0aCA9IGIzL2Fp
ci9BaXJSZWdpc3RlclByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNw
ZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MzFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBBaXJTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwaWxs
RXZlcnl0aGluZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clNwaWxsRXZlcnl0aGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJT
cGlsbEV2ZXJ5dGhpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clN0YWNrU2xvdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJT
dGFja1Nsb3QuY3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Ns
b3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tTbG90Lmg7IHBh
dGggPSBiMy9haXIvQWlyU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyVG1wLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJUbXAuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2OTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRtcC5oOyBw
YXRoID0gYjMvYWlyL0FpclRtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJUbXBJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyVG1wSW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QjFCREFDREM3MDA4
MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpclZhbGlkYXRlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclZhbGlkYXRl
Lmg7IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1OTIxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZWQuY3BwOyBwYXRoID0g
YjMvYWlyL0FpckdlbmVyYXRlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGlu
Y2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IHRlc3RiMzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RV
Q1RTX0RJUjsgfTsKKwkJMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0YjMuY3BwOyBwYXRoID0gYjMv
dGVzdGIzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2
RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRo
ID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUQ2N0I4MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5n
UGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lz
dGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1
cFZhcmFyZ3NGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZh
cmFyZ3NGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzgwMSw2ICs0MDM4
LDE1IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7
CiAJCX07CisJCTBGRUM4NUEyMUJEQjVDRjEwMDgwRkY3NCAvKiBGcmFtZXdvcmtzICovID0gewor
CQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAy
MTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8q
IEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8sCisJCQkJMEZFQzg1QTQxQkRC
NUNGMTAwODBGRjc0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICov
LAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9
OwogCQkwRkY5MjJDNjE0RjQ2QjEzMDA0MUEyNEUgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4
MzY0NzsKQEAgLTM4NzAsNiArNDExNiw3IEBACiAJCQkJMTQxMjExMjAwQTQ4NzkzQzAwNDgwMjU1
IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5QkYwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkg
Ki8sCiAJCQkJNjUxMTIzMDUxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJ
MEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCSk7CiAJCQluYW1lID0g
UHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMzg5MCw2ICs0MTM3LDcg
QEAKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBGRjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRv
ci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRDQUQ0MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2
ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBhc3NlbWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRB
Q0Q1RTAwODBGRjc0IC8qIGIzICovLAogCQkJCUE1NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBi
aW5kaW5ncyAqLywKIAkJCQlBN0Q4MDE5RjE4ODBENjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8s
CiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgxIC8qIGJ5dGVjb2RlICovLApAQCAtNDEwMyw2
ICs0MzUxLDEzNCBAQAogCQkJbmFtZSA9IGZ0bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
CiAJCX07CisJCTBGRUM4NEIyMUJEQUNENUUwMDgwRkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0
IC8qIGFpciAqLywKKwkJCQkwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJl
Z1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVu
dFJlZ1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNC
bG9jay5jcHAgKi8sCisJCQkJMEZFQzg0QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9j
ay5oICovLAorCQkJCTBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxp
bmVzLmggKi8sCisJCQkJMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0
aWxzLmggKi8sCisJCQkJMEZFQzg0QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlz
dC5oICovLAorCQkJCTBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5j
cHAgKi8sCisJCQkJMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmgg
Ki8sCisJCQkJMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8s
CisJCQkJMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJ
CTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0
QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8sCisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLywKKwkJCQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi8sCisJCQkJMEZFQzg0QzkxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDQTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQg
LyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8sCisJCQkJMEZFQzg0Q0MxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLywKKwkJCQkwRkVDODRDRDFCREFDREFDMDA4MEZGNzQg
LyogQjNGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODRDRTFCREFDREFDMDA4MEZGNzQg
LyogQjNHZW5lcmF0ZS5jcHAgKi8sCisJCQkJMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
R2VuZXJhdGUuaCAqLywKKwkJCQkwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
SW5kZXhNYXAuaCAqLywKKwkJCQkwRkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNl
dC5oICovLAorCQkJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3Bw
ICovLAorCQkJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLywK
KwkJCQkwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi8sCisJ
CQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywKKwkJCQkw
RkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICovLAorCQkJCTBGRUM4NEQ4
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oICovLAorCQkJCTBGRUM4NEQ5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8sCisJCQkJMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzT3JpZ2luLmggKi8sCisJCQkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0
Y2hwb2ludFNwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQg
LyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLywKKwkJCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQg
LyogQjNQaGFzZVNjb3BlLmNwcCAqLywKKwkJCQkwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyog
QjNQaGFzZVNjb3BlLmggKi8sCisJCQkJMEZFQzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJv
Y2VkdXJlLmNwcCAqLywKKwkJCQkwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuaCAqLywKKwkJCQkwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxp
bmVzLmggKi8sCisJCQkJMEZFQzg0RTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3Bw
ICovLAorCQkJCTBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi8sCisJ
CQkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLywK
KwkJCQkwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLywK
KwkJCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLywK
KwkJCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8sCisJ
CQkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwICovLAor
CQkJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8sCisJ
CQkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICov
LAorCQkJCTBGRUM4NEVEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwICovLAor
CQkJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLywKKwkJCQkw
RkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi8sCisJCQkJMEZF
Qzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLywKKwkJCQkwRkVDODRG
MTFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCAqLywKKwkJCQkwRkVDODRGMjFCREFDREFD
MDA4MEZGNzQgLyogQjNUeXBlLmggKi8sCisJCQkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyog
QjNVcHNpbG9uVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGNTFCREFDREFDMDA4MEZGNzQgLyogQjNV
c2VDb3VudHMuY3BwICovLAorCQkJCTBGRUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNv
dW50cy5oICovLAorCQkJCTBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNw
cCAqLywKKwkJCQkwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovLAor
CQkJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVD
ODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovLAorCQkJCTBGRUM4NEZCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oICovLAorCQkJCTBGRUM4NEZDMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLywKKwkJCQkwRkVDODRGRDFCREFDREFDMDA4MEZG
NzQgLyogQjNWYWx1ZVJlcC5oICovLAorCQkJCTBGRUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0
ZXN0YjMuY3BwICovLAorCQkJKTsKKwkJCW5hbWUgPSBiMzsKKwkJCXNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7CisJCX07CisJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8gPSB7CisJ
CQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBGRUM4NTQ4MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLywKKwkJCQkwRkVDODU0OTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oICovLAorCQkJCTBGRUM4NTRBMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJBcmcuY3BwICovLAorCQkJCTBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuaCAqLywKKwkJCQkwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5jcHAgKi8sCisJCQkJMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxv
Y2suaCAqLywKKwkJCQkwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFs
LmNwcCAqLywKKwkJCQkwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFs
LmggKi8sCisJCQkJMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICovLAor
CQkJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8sCisJCQkJMEZFQzg1
NTIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4
NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8sCisJCQkJMEZFQzg1NTQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi8sCisJCQkJMEZFQzg1OTIxQkRCMUUx
MDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi8sCisJCQkJMEZFQzg1NTUxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi8sCisJCQkJMEZFQzg1NTYxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLywKKwkJCQkwRkVDODU1NzFC
REFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLywKKwkJCQkwRkVDODU1
ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkwRkVDODU1
OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEZFQzg1NUEx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwICovLAorCQkJCTBGRUM4NTVCMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJJbnN0LmggKi8sCisJCQkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckluc3RJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckxpdmVuZXNzLmggKi8sCisJCQkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNl
U2NvcGUuY3BwICovLAorCQkJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNj
b3BlLmggKi8sCisJCQkJMEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJp
b3JpdHkuY3BwICovLAorCQkJCTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmggKi8sCisJCQkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNp
YWwuY3BwICovLAorCQkJCTBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmgg
Ki8sCisJCQkJMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5j
cHAgKi8sCisJCQkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGlu
Zy5oICovLAorCQkJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3Bw
ICovLAorCQkJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLywK
KwkJCQkwRkVDODU2ODFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLywKKwkJCQkwRkVD
ODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi8sCisJCQkJMEZFQzg1NkExQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclRtcElubGluZXMuaCAqLywKKwkJCQkwRkVDODU2QjFCREFDREM3MDA4
MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAorCQkJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBhaXI7CisJCQlzb3VyY2VU
cmVlID0gIjxncm91cD4iOworCQl9OwogCQkwRkY0MjcyRTE1OEVCQ0NFMDA0Q0I5RkYgLyogZGlz
YXNzZW1ibGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAg
LTYwODksNiArNjQ2NSw3IEBACiAJCQkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8qIEFib3J0
UmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFMzBGM0E4M0MxMDBGODQ3MTAgLyog
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NUYwRjUxNEQx
MDYzQzAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJB
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2VudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNhbGxiYWNr
RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U1MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBBUElDYXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYxMTcsOCArNjQ5NCwxMCBAQAogCQkJCUE1
RUE3MEU4MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRyb2xsZXJD
bGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2RCAvKiBC
YXNpY0Jsb2NrTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4M0FDMEU2REI4Qzkw
MDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0ludGVnZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjRCMjcyMUE3ODRCQUYwMDZFNEU2NiAvKiBCaW5hcnlT
d2l0Y2guaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThFMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJUbXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2MCAvKiBC
b29sZWFuT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUEwODYyMDE4MkI3QTA0MDBGNkQ4
NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODAxQTUxODgwRDY2RTAw
MjZDMzlCIC8qIEJ1aWx0aW5FeGVjdXRhYmxlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTMzLDYg
KzY1MTIsNyBAQAogCQkJCTk5REEwMEE0MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGluc19tb2Rl
bC5weSBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEE1MUJENTk5MzEwMEY0NTc1QyAvKiBidWls
dGluc190ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk0MURFQTEzMjFCOUYzMTYzMDA2
RDY1REQgLyogQnVpbHRpblV0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxMDFCREFD
REFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTlFNzI5
NDBCMTkwRjA1MTQwMDFBOTFCNSAvKiBCdW5kbGVQYXRoLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCkBAIC02MTQzLDYgKzY1MjMsNyBAQAogCQkJCTBGMkREODBCMUFCM0Q4NTgwMEJCQjhF
OCAvKiBCeXRlY29kZUtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMzE3QTlDMjRF
MDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTE0RjIxOTE4QjNFMTY3MDA5OEZG
OEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlBM0JFMDBG
MUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAyM0VBMTYx
MzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNjE3OSw2ICs2
NTYwLDcgQEAKIAkJCQkwRjE1RjE1RjE0QjdBNzNFMDA1REUzN0QgLyogQ29tbW9uU2xvd1BhdGhz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTUzQTMzMjE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9u
U2xvd1BhdGhzRXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEODJFMzkxNDFBQjE0
RDAwMTc5Qzk0IC8qIENvbXBhY3RKSVRDb2RlTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUyQzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RTVBM0E4MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEMzRjQwRTE2RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk5NkI3MzFEMUJEQTA4RUYwMDMzMUI4NCAvKiBKU0dsb2JhbE9iamVj
dC5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjE4Niw4ICs2NTY4LDEwIEBACiAJCQkJMEY2RkM3
NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGREIyQ0VBMTc0ODk2QzcwMDdCM0MxQiAvKiBDb25jdXJyZW50SklUTG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEMzRjUwRTE2RjVDRDAwQjM0NDYwIC8qIGNvbmZpZy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0NDgzNkU3MTMyREE3QkUwMDVCRTc4NSAvKiBDb25zZXJ2YXRp
dmVSb290cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwOEExOEJDMjFDMzAwQkVERjc2IC8q
IENvbnNvbGVDbGllbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA4MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDdBMTg5QjA1
MTAwMDYzMzIzMSAvKiBDb25zb2xlTWVzc2FnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2Qjcz
MTkxQkRBMDY4MDAwMzMxQjg0IC8qIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNTNDRTA4NjE4QkMxQTU2MDBCRURGNzYgLyogQ29uc29sZVByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02MjAyLDYgKzY1ODYsNyBAQAogCQkJCUMyRkM5QkQzMTY2NDRERkIw
MDgxMEQzMyAvKiBDb3BpZWRCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyRUFB
M0ZBMTQ5QTgzNUUwMEZDRTExMiAvKiBDb3BpZWRTcGFjZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QzJDOEQwMkQxNEEzQzZFMDAwNTc4RTY1IC8qIENvcGllZFNwYWNlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjdDMTFBRDFCQzM4NjJDMDBDNzRDREIgLyogQ29weUJhcnJpZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGNUE1MkQwMTdBREQ3MTcwMDhFQ0IyRCAvKiBDb3B5VG9rZW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyMjM5RDE4MTYyNjJCREQwMDVBQzVGRCAvKiBDb3B5Vmlz
aXRvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjEzLDYgKzY1OTgsNyBAQAogCQkJCTk5NTlFOTJC
MUJEMTdGQTQwMDFBQTQxMyAvKiBjc3NtaW4ucHkgaW4gSGVhZGVycyAqLywKIAkJCQkyQTExMTI0
NjE5MkZDRTc5MDA1RUUxOEQgLyogQ3VzdG9tR2V0dGVyU2V0dGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjQyNkE0QjE0NjBDRDZFMDAxMzFGOEYgLyogRGF0YUZvcm1hdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2REYxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQ0QyMDM0QTBFMTcxMzVFMDAyQzdFODIgLyogRGF0ZUNvbnN0
cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQk0MTM1OUNGMzBGREQ4OUFEMDAyMDYxODAgLyog
RGF0ZUNvbnZlcnNpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjIzMyw2ICs2NjE5LDcgQEAKIAkJ
CQlBNzA0RDkwMzE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcwNEQ5MDQxN0EwQkFBODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYyMDE3NzE0M0ZDRDNG
MDA2OEI3N0MgLyogREZHQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEM0U0
MDIxQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0
Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxOEQzRDAxQjU1QTZFMDAwMkM1QzlGIC8q
IERGR0FkYXB0aXZlU3RydWN0dXJlV2F0Y2hwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2
NkUxNkIxNERGM0YxNjAwQjdCMkU0IC8qIERGR0FkamFjZW5jeUxpc3QuaCBpbiBIZWFkZXJzICov
LApAQCAtNjI0Myw3ICs2NjMwLDkgQEAKIAkJCQkwRjJERDgxNDFBQjNEOEJFMDBCQkI4RTggLyog
REZHQXJndW1lbnRzVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ4NTMyMjE4Nzc1
MDU2MDA4M0I2ODcgLyogREZHQXJpdGhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjA1QzNC
NDE2ODNDRjkyMDBCQUY0NUIgLyogREZHQXJyYXlpZnlTbG93UGF0aEdlbmVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJs
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQ4NTE1RTQ4MTFCMDA2QTU5N0MgLyogREZH
QXJyYXlNb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEyOTUxN0EwQkM3NDAwRUUyNjE4
IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjY2RUM3
MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI5Q0UzMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuaCBpbiBIZWFk
ZXJzICovLApAQCAtNjI1Myw2ICs2NjQyLDcgQEAKIAkJCQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNB
RDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZD
MTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZD
M0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkUxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJGMTU4RDE5QjdBNTMxMDA2OTVERDAgLyogREZH
QmxvY2tTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0QwMDE5QURBNDEwMDA2
QUM3MkEgLyogREZHQmxvY2tXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjkyLDggKzY2
ODIsMTAgQEAKIAkJCQkwRjY2RTE2QzE0REYzRjE2MDBCN0IyRTQgLyogREZHRWRnZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTdEOUEyOTYxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0VkZ2VEb21pbmF0
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3OTg2RDU3MTdBMEJCMUUwMEE5NUREMCAvKiBERkdF
ZGdlVXNlc1N0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzIxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYxNDM0MUFE
RjA5MDEwMEVENzkyQyAvKiBERkdFcG9jaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCQzBBRTgx
NDk2QzdDNzAwRDRGQkREIC8qIERGR0V4aXRQcm9maWxlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUwMzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3OEE5Nzc1MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGYWlsZWRGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3QkZGM0MwMTc5ODY4OTQwMDAyRjQ2MiAvKiBERkdGaWx0
cmF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NzE3OTczOEI4MDA5REY3
NDQgLyogREZHRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKQEAgLTYzMjMsNiArNjcxNSw3IEBA
CiAJCQkJNjJGMkFBMzgxQjBCRURFMzAwNjEwQzdBIC8qIERGR0xhenlOb2RlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0Q5QTI5ODE3QTBCQzc0MDBFRTI2MTggLyogREZHTElDTVBoYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk3OUM0QjE1RTFCQTIxNThGMDBGRDU5MkUgLyogREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3RDg5Q0ZDMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2Uu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjBGMTlCMTZCNzI5RkEwMDVERjk1QiAvKiBERkdMb25n
TGl2ZWRTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2N0I1QjYxN0EwQjk2NTAwNjNEOTQw
IC8qIERGR0xvb3BQcmVIZWFkZXJDcmVhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTYz
MzEsNiArNjcyNCw3IEBACiAJCQkJMEYyQkRDNDUxNTIyODAxQjAwQ0Q4OTEwIC8qIERGR01pbmlm
aWVkR3JhcGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkU4OTJEMTZEMDJCQUYwMDlFNEZEMiAv
KiBERkdNaW5pZmllZElELmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0NjE1MjI4MDIwMDBD
RDg5MTAgLyogREZHTWluaWZpZWROb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNDFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
OEYxNDM2MUFERjA5MDEwMEVENzkyQyAvKiBERkdNb3ZIaW50UmVtb3ZhbFBoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkYyQ0Q1QzFCNjFBNEY4MDA0OTU1QTggLyogREZHTXVsdGlHZXRCeU9m
ZnNldERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAyMTlBREE0MTEwMDZBQzcyQSAv
KiBERkdOYWl2ZURvbWluYXRvcnMuaCBpbiBIZWFkZXJzICovLApAQCAtNjM0OSw2ICs2NzQzLDcg
QEAKIAkJCQkwRkMwOTc2QTE0NjhBNkY3MDBDRjI0NDIgLyogREZHT1NSRXhpdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyMzVCRUMxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRCYXNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQzE2RDAyRjExMDA1NUE1REIgLyogREZHT1NSRXhp
dENvbXBpbGF0aW9uSW5mby5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzA5Nzcx
MTQ2OTNBRjUwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNzAyNUFBMTcxNEIwRkMwMDM4MkMwRSAvKiBERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMzkyQzhBMUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JF
eGl0RnV6ei5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzY2LDYgKzY3NjEsOCBAQAogCQkJCTBGRkM5
MjE2MUI5NEZCM0UwMDcxREQ2NiAvKiBERkdQcm9wZXJ0eVR5cGVLZXkuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGM0ExQkZBMUE5RUNCN0QwMDBERTAxQSAvKiBERkdQdXRTdGFja1Npbmtp
bmdQaGFzZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NkUxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFsbG9jYXRlU3RhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFDMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0luZGV4U2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkVDOUREMTEzMjhE
RjgyMDAyQjJBRDcgLyogREZHUmVnaXN0ZXJCYW5rLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJG
Q0NGQzE4QTYwMDcwMDAxQTI3RjggLyogREZHU2FmZXBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzdBNDI0MzE3QTBCQkZEMDBBOERCODEgLyogREZHU2FmZVRvRXhlY3V0ZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC02MzkwLDYgKzY3ODcsNyBAQAogCQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0
MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkQ4QTMyQTE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExEZWZlcnJlZENvbXBpbGF0aW9uQ2Fs
bGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzJDMTdENTFGNTcwMENBMkM0MCAvKiBE
RkdUb0ZUTEZvck9TUkVudHJ5RGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkU3MjExRTE5M0I5QzU5MDAzMUY2RUQgLyogREZHVHJhbnNp
dGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0M0YxNUM3NUYxOTAwNkE1OTdDIC8qIERG
R1R5cGVDaGVja0hvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkUwRjc3MTZD
MURCMTIwMDgyQzVFOCAvKiBERkdVbmlmaWNhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKQEAg
LTY0MDEsNiArNjc5OSw3IEBACiAJCQkJMEY2MjAxNzQxNDNGQ0QzMzAwNjhCNzdDIC8qIERGR1Zh
cmlhYmxlQWNjZXNzRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEREJGQjYxNjY2RUVEQTAw
QzU1RkVGIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YUR1bXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzQ5MTUyMjgwOTYwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUzODFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCREM0QjE1MjI4MDlEMDBDRDg5MTAgLyogREZHVmFyaWFibGVF
dmVudFN0cmVhbS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGRkM5NjAxNEVGOTBCRDAwQzcyNTMy
IC8qIERGR1ZpcnR1YWxSZWdpc3RlckFsbG9jYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTk2QjczMTgxQkRBMDY4MDAwMzMxQjg0IC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0
LmggaW4gSGVhZGVycyAqLywKQEAgLTY0MzEsNiArNjgzMCw3IEBACiAJCQkJMEY1NkExRDMxNTAw
MEYzNTAwMjk5MkIxIC8qIEV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
M0FDNzU0MTg4RTVFQzgwMDMyMDI5RiAvKiBFeGl0aW5nSklUVHlwZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCMTA1ODYxNjc1NDgxMjAwRjhBQjZFIC8qIEV4aXRLaW5kLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjBCODNBQjE0QkNGNUJCMDA4ODVCNEYgLyogRXhwcmVzc2lvblJhbmdl
SW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzgxN0FEQjVGMzAwNUFCMTc0IC8qIEZs
b2F0MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdBOEFGMzkxN0FEQjVGMzAwNUFCMTc0
IC8qIEZsb2F0NjRBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDkxLDYgKzY4OTEsNyBAQAog
CQkJCTBGRUEwQTIwMTcwOEIwMDcwMEJCNzIyQyAvKiBGVExUeXBlZFBvaW50ZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNDQTE3M0RBNTIzMDA3QjNDMUIgLyogRlRMVmFsdWVG
cm9tQmxvY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUE2Mjg0MTg4Qzk4
RDQwMDcyQzlERiAvKiBGVExWYWx1ZVJhbmdlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAzMzJD
NjE4QjUzRkE5MDA1Rjk3OUEgLyogRlRMV2VpZ2h0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjAz
MzJDODE4QjU0NkVDMDA1Rjk3OUEgLyogRlRMV2VpZ2h0ZWRUYXJnZXQuaCBpbiBIZWFkZXJzICov
LApAQCAtNjQ5OCw4ICs2ODk5LDEwIEBACiAJCQkJMkE4MzYzOEExOEQ3RDBGRTAwMDBFQkNDIC8q
IEZ1bGxHQ0FjdGl2aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDA0MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvbkNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkYwRjFBMDE2QjcyQTFBMDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQjMxMEZCMTk3NEFFNjEwMDgwODU3QyAvKiBGdW5j
dGlvbkhhc0V4ZWN1dGVkQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNEJGRjJDMUFENDc2
RTcwMDA4OEY4NyAvKiBGdW5jdGlvbk92ZXJyaWRlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDA1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBGdW5jdGlvblByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1bmN0aW9uUmFyZURhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUNFNjNEMThDQTVBMDMwMEVEMDE5MSAvKiBHQ0FjdGl2
aXR5Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLApAQCAtNjUzOCw2ICs2OTQxLDcgQEAKIAkJCQlD
NDcwM0NENTE5Mjg0NENDMDAxM0ZCRUEgLyogZ2VuZXJhdG9yX3RlbXBsYXRlcy5weSBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRTA1MDE5MUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxQTFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJp
Y0FyZ3VtZW50c0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTBBMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUIxQUE5MDkx
MTAwRDMzQjMzIC8qIEdlbmVyaWNPZmZzZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkUw
MTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkUxMTdCNkI1QUIwMEE3QUUzRiAvKiBHZW5lcmljVHlwZWRBcnJheVZpZXdJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTY1NjMsNiArNjk2Nyw3IEBACiAJCQkJQzJFNTI2
QkUxNTkwRUYwMDAwNTRFNDhEIC8qIEhlYXBUaW1lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3
QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJuVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZp
dHkuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDBGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjA2RERFQTE4REE0NEFCMDBBMzgzRDAgLyog
SWRlbnRpZmllcklubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDc2MTg5QjAzOEMw
MDYzMzIzMSAvKiBJZGVudGlmaWVyc0ZhY3RvcnkuaCBpbiBIZWFkZXJzICovLApAQCAtNjYxNiw2
ICs3MDIxLDcgQEAKIAkJCQlBMUI5RTIzQzFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9y
Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUExODE5M0UzMUI0RTBDREIwMEZDMTAy
OSAvKiBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUEx
QjlFMjNFMUI0RTBENjcwMEJDN0ZFRCAvKiBJbnRsQ29sbGF0b3JQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgxOTNFNDFCNEUwQ0RCMDBGQzEwMjkgLyogSW50bENv
bGxhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1ODdENkUxQjREQzE0
MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE1
ODdENzAxQjREQzE0MTAwRDY5ODQ5IC8qIEludGxEYXRlVGltZUZvcm1hdENvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKQEAgLTY2NDYsNiArNzA1Miw3IEBACiAJCQkJMEYyNEU1NEQxN0VFMjc0
OTAwQUJCMjE3IC8qIEpJVE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDMx
MTVBQTgxMTIwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY3NjZEMkMxNUE4Q0MzQTAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lU2V0LmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU5MTFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGNUVGOTFGMTY4NzhGN0QwMDNFNUMyNSAvKiBKSVRUaHVua3MuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQzcxMkUzMTdDRDg3OTMwMDhDQzkzQyAvKiBKSVRUb0RGR0Rl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc2RjU0QTMx
M0IyOEFBQjAwRUYyQkNFIC8qIEpJVFdyaXRlQmFycmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NjU5LDYgKzcwNjYsNyBAQAogCQkJCTBGMkI2NkVBMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5
QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QkRBRUNCMTdGNEVBMTQw
MEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCThCMTQxODZE
MUI2MjUyN0YwMEZCMjA2OCAvKiBKU0Fycm93RnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDE4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Jhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MEQxN0Q3MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1
bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NzUsNiArNzA4Myw4IEBACiAJCQkJODY1QTMw
RjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFzc1JlZi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTUzQ0UwODgxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEzMTY3QkFCRDcwMDZENzYwQSAvKiBKU0Nv
bnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3QkFCRUUwMDZENzYwQSAvKiBK
U0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4QzAyNDIxOEU0QTQxQTAw
MDMyQkM1IC8qIEpTQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjY5MCw2ICs3
MTAwLDcgQEAKIAkJCQlGRTM4NEVFNjFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTgxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Q
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJEMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyMDFCREFD
REFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2
MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0I0
QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0MzJBcnJheS5oIGluIEhlYWRl
cnMgKi8sCkBAIC02NzAwLDExICs3MTExLDEzIEBACiAJCQkJMEYyQjY2RjExN0I2QjVBQjAwQTdB
RTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJC
NjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2Vu
ZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU0NTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5
Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY1MTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJv
dG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNjE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2Fs
RW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQyMTBFMTZGNUNEMDBC
MzQ0NjAgLyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RkQwMDg2MTg5
QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTVDM0ExQTYxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29s
ZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzM1LDYgKzcxNDgsNyBAQAogCQkJCUE3MDA4
NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0REVG
OTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1bGVFbnZpcm9ubWVudC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTMxOENCQzExQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzlEQTRBNzFCN0U4QjdDMDA4NEYz
M0EgLyogSlNNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovLApAQCAtNjc2NCw2ICs3MTc4LDcg
QEAKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNTdGFja0lubGluZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODZFODU1MzkxMTFCOTk2ODAwMUFGNTFFIC8qIEpTU3RyaW5nQnVp
bGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEVDMEVDMzFBQTBEN0RBMDBCNkFB
RkEgLyogSlNTdHJpbmdJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjYwMEI1QTcxNTJC
QUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzQyODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBpbiBIZWFkZXJzICovLApAQCAt
NjgyMSw5ICs3MjM2LDExIEBACiAJCQkJMEY0NjgwQTMxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50
RXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQ0IxNEJCQjE3MjAwQkZFMjcy
IC8qIExMSW50T2ZmbGluZUFzbUNvbmZpZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVEMjg3QjIx
NUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY0NjgwQTUxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJbnRUaHVua3MuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQ0VGQUNFMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDRjE4MDVFNzU1MDA0NzJDRTQgLyogTExWTUFQSUZ1
bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzgxNzk5RTRCMjAwRDI4MzNEIC8q
IExMVk1EaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUQzMTgwNUVEQ0Mw
MDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODM2LDEyICs3MjUz
LDE0IEBACiAJCQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8qIE1hY3JvQXNzZW1ibGVyQVJN
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJEMDBDRjg3MTEgLyogTWFjcm9B
c3NlbWJsZXJBUk02NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBREQxNDYwRkRERUE5ODAwMDZF
RUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTND
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2M0IyM0Uw
MEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNyb0Fzc2VtYmxlck1JUFMuaCBp
biBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQyQkNCMyAvKiBNYWNyb0Fzc2Vt
YmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2NEE5MTM1RTVFMUMwMDk2MzAx
MiAvKiBNYWNyb0Fzc2VtYmxlclNINC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTQwRjNB
ODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODZfNjQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNy
b0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwMDg3M0ExN0NCRTg1
MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzg1MDdE
NzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODY3LDYg
KzcyODYsNyBAQAogCQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkxMzBFMTgzOURCMDAwRjkyOTcg
LyogTmF0aXZlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzM0U4RDIxMUI5
MDEzREUwMDM0NkI1MiAvKiBOYXRpdmVTdGRGdW5jdGlvbkNlbGwuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURCIC8qIE5vZGVDb25zdHJ1Y3Rv
cnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUxNkY1Q0QwMEIzNDQ2MCAvKiBOb2Rl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjgxOEExQjI1OTAwMjZEODhGIC8qIE5vbmRl
dGVybWluaXN0aWNJbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODg3LDYgKzczMDcsNyBAQAog
CQkJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVKU1N0cmluZy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8qIE9wYXF1ZVJvb3RTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDMkMxNTFGREU5MTAwQ0Q4OTEw
IC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0NDdFQTE3QTBCRDQ2MDBGNTg5
OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ0ODBFMTZG
NUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTAwLDEzICs3
MzIxLDE3IEBACiAJCQkJMEZGOUNFNzQxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNj
ZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU4MzQxODFBNkVGOTdCMDBEMDQ4NDcgLyogUG9s
eW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTgyMDYxMTZC
RkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyMjFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmls
ZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYw
IC8qIFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAw
RjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDcx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcy
OUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5j
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2
MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGls
ZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTI4LDEwICs3MzUzLDEzIEBACiAJCQkJ
MEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5h
Ti5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5
SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8q
IFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgwMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzQjRBQTE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc5MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0
QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjk1Miw2ICs3MzgwLDcgQEAKIAkJCQkwRkMzMTQxMjE4MTQ1NTkxMDAw
MzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1N0QyM0VFMTg5MUI1
NTQwMDMxQzdGQSAvKiBSZWd1bGFyRXhwcmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZC
N0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1QkExNUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNw
ZWN0b3JDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUYwMTgyMzQ1QUYwMEE4
MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5
NTksNiArNzM4OCw3IEBACiAJCQkJQTVCQTE1RUQxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUlu
c3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUxMTdFRTI3
NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBFOEM2
RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDQx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjBBOUQx
MUE5QjY2NDYwMDAxMzA2QSAvKiBSdW50aW1lRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUy
QzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRl
cnMgKi8sCkBAIC02OTg4LDYgKzc0MTgsNyBAQAogCQkJCUE3MDlGMkYwMTdBMEFDMDQwMDUxMkU5
OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTkzMzA0MDA0MEU2QTc0OTQw
MDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY0MEUx
NkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUw
RTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQ
cm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDA3LDYgKzc0MzgsNyBAQAog
CQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0MkUzMTNCMTM0RkYwQTYwMEFGQURCNSAvKiBTdHJvbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVGREUyNiAvKiBTdHJvbmdJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5l
c3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBTdHJ1
Y3R1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBT
dHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQUEzMTIxOEJENDlEMTAwMzk0
Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDQzLDEwICs3NDc1
LDEyIEBACiAJCQkJMEYyRDRERUExOTgzMkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJNTJCMzExMDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlv
bkNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCNkMzOTFBRjQ4RERDMDBEQjFCRjcgLyog
VHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkM5NTJCNzE5QTI4OTg1MDA2
OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERFQzE5ODMy
REM0MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJE
NERGMDE5ODMyREQ2MDA3RDRCMTkgLyogVHlwZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
NDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjQyNzQyMTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfZXh0ZXJu
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0NDE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2
X2lucHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTcwODQsOCArNzUxOCwxMCBAQAogCQkJCUZFRDk0
RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5
MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTE0MkUzMTNDMTM0RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUwMjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMTRCRkNFNjkxMENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdl
YWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RjcyNTY2MTRFRTI2NUUwMEIx
NjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RkEyMTRF
RTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTA3LDkgKzc1
NDMsMTIgQEAKIAkJCQk5OTU5RTkyRTFCRDE3RkE0MDAxQUE0MTMgLyogeHhkLnBsIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFw
U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRCQTMzNzAw
QTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcw
MEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJB
MzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgx
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODY3MDRCNDMxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmggaW4gSGVhZGVy
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
QEAgLTcxMzQsNiArNzU3MywyMiBAQAogCQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGQ0VGQUI2MTgw
NUQ2MTYwMDQ3MkNFNCAvKiBsaWJsbHZtRm9ySlNDLmR5bGliICovOwogCQkJcHJvZHVjdFR5cGUg
PSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LmR5bmFtaWMiOwogCQl9OworCQkwRkVD
ODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovID0geworCQkJaXNhID0gUEJYTmF0aXZl
VGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBGRUM4NUE4MUJEQjVDRjEwMDgw
RkY3NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVz
dGIzIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGRUM4NTk1MUJEQjVDRjEwMDgwRkY3
NCAvKiBTb3VyY2VzICovLAorCQkJCTBGRUM4NUEyMUJEQjVDRjEwMDgwRkY3NCAvKiBGcmFtZXdv
cmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVz
ID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YjM7CisJCQlwcm9kdWN0TmFtZSA9IHRlc3RhcGk7
CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3Ri
MyAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CisJ
CX07CiAJCTBGRjkyMkMzMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NMTEludE9mZnNldHNFeHRyYWN0
b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25MaXN0ID0gMEZGOTIyQ0ExNEY0NkIxMzAwNDFBMjRFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24g
bGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJKU0NMTEludE9mZnNldHNFeHRyYWN0b3IiICovOwpA
QCAtNzI4OSw2ICs3NzQ0LDcgQEAKIAkJCQkxNEJENTlCRTBBM0U4RjkwMDBCQUY1OUMgLyogdGVz
dGFwaSAqLywKIAkJCQk5MzJGNUJEQTA4MjJBMUM3MDA3MzY5NzUgLyoganNjICovLAogCQkJCTY1
MTEyMkY3MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICovLAorCQkJCTBGRUM4NTk0MUJE
QjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJNUQ2QjJBNDcxNTJCOUUxNzAwNTIzMURF
IC8qIFRlc3QgVG9vbHMgKi8sCiAJCQkpOwogCQl9OwpAQCAtNzUzNiw2ICs3OTkyLDE0IEBACiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJ
CTBGRUM4NTk1MUJEQjVDRjEwMDgwRkY3NCAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJY
U291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJ
ZmlsZXMgPSAoCisJCQkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgaW4g
U291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5n
ID0gMDsKKwkJfTsKIAkJMEZGOTIyQzQxNEY0NkIxMzAwNDFBMjRFIC8qIFNvdXJjZXMgKi8gPSB7
CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIx
NDc0ODM2NDc7CkBAIC03NTkxLDYgKzgwNTUsNyBAQAogCQkJCTBGNTVGMEY0MTREMTA2MzkwMEFD
NzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJEMTA3RUMz
NzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzQzQkFBMTZC
ODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fz
c2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUMwMjg1QzE3MTc5NjY4MDAzNTFFMzUg
LyogQVJNdjdET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzU5OCw4ICs4MDYzLDEwIEBA
CiAJCQkJQTdBOEFGMzQxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRkM5OUQ0MTg0RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRl
cmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdBOEFGMzYxN0FEQjVGMzAw
NUFCMTc0IC8qIEFycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUz
RDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ3RjM5QkYxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdCREFFQzgxN0Y0RUExNDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NTQx
NUQwNzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDMDEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyNEU1NDAxN0VBOUY1OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVscGVycy5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc2MjAsOCArODA4NywxMCBAQAogCQkJCTE0MjlEOEREMEVEMjIw
NUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJFQzlCQjYx
QjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTYyRDc1NUQ2MUI4NEZCNDYwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9s
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDUxQjg0RkI0MDAwMTgwMUZBIC8q
IENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDQx
Qjg0RkIzRDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExp
bmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjI3NjczMjMxQjY4MEMxRTAwRkQ5RjJF
IC8qIENhbGxNb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYzNCw2ICs4MTAzLDcgQEAKIAkJ
CQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU5MzFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJh
dGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY5MTREMjc5NzAwMEE5QzMwNiAvKiBD
b2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDNDMTY2NzYzMTMwMEQ2
MTk3MSAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OEY5NDQyMTY2NzYzMzUwMEQ2MTk3MSAvKiBDb2RlVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTc2NDEsNiArODExMSw3IEBACiAJCQkJQTcwOUYyRjIxN0EwQUMyQTAwNTEyRTk4IC8qIENvbW1v
blNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUzQTMzMTE3QTFGMUVFMDA4Q0Y2
RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0U1QTNBNzE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMjEwN0VDMzc2MDA0MjdBNDggLyogQ29tcGxldGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZGQzc1MDE5NjExMEE4MDBFMUQwMkQgLyogQ29t
cGxleEdldFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5MDAx
QkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjY4LDYg
KzgxMzksNyBAQAogCQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJlZENvbXBp
bGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU1MDY4NjcxQUUyNUUyODAw
MDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdB
NDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NThEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MDExQjYxOEFBRjAwQzgwRTFFIC8qIERGR0FkYXB0
aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjE4RDNDRjFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBv
aW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY3Nyw2ICs4MTQ5LDcgQEAKIAkJCQkwRjYzOTQ4
NDE1RTQ4MTE4MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RDlBMjk0MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdBdmFpbGFi
aWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODcxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRTIxOUQwQkE3RDAwQjFE
MUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcxNENB
NDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNBRDggLyogREZHQmFzaWNCbG9j
ay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2ODUsNiArODE1OCw3IEBACiAJCQkJODZFQzlEQzQx
MzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBoYXNlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVl
UmVwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBGRiAvKiBE
RkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzNjk0
MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTc3QTQyM0YxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03NzIyLDYgKzgxOTYsNyBAQAogCQkJCTJBODgwNjc4MTkxMDdENTUwMENCMEJC
QiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVDOURD
NzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYy
RkNDRjkxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFw
TG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODQxNjgxQkE4QzMyMTAwNjE4MzdE
IC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MDREOTA1
MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc3NjQsMTQgKzgyMzksMTcgQEAKIAkJCQkwRkMwOTc3MjE0NjkzQUY5MDBDRjI0
NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3MDI1
QTkxNzE0QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjM5MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enou
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNv
ZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUzIC8qIERG
R09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCRUQx
NzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjYyMzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2VydGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVCMTRFRjkwQUQwMEM3MjUzMiAvKiBE
RkdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwRjFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRUExOUQwQkE3
RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OEE5
NzdBMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
QkUwRjc0MTZDMURCMDkwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUQxNEVGOTBCMzAwQzcyNTMyIC8qIERGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTMyMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21vdGVkSGVh
cExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYyMTk2QjhGOUUwMDkxMDUy
QSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Nzg5LDYgKzgyNjcsOCBA
QAogCQkJCTBGQzIwQ0I1MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVjdGlvblBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGODkzQkRCMTkzNkUyM0MwMDEyMTFGNCAvKiBE
RkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzkwODU1
MTlBMjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUzNDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyOTFCREFDREFDMDA4MEZGNzQgLyog
QjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0ZFMThBNjAwNzAwMDFB
MjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5N0ExMTQ2
QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEOEEz
MjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03ODE2LDYgKzgyOTYsNyBAQAogCQkJCTJBODM2Mzg1MThEN0QwRUUw
MDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTk5RTQ1QTI1MThBMUIyNTkwMDI2RDg4RiAvKiBFbmNvZGVkVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QzcxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlDODEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3JDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUI1OEMxNDE4N0I4QjE2MDA5OEVGMEIgLyogRXJy
b3JIYW5kbGluZ1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM5MTA3RUMzNzYw
MDQyN0E0OCAvKiBFcnJvckluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg2MCw2ICs4
MzQxLDcgQEAKIAkJCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyogRlRMTGluay5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEYxNzA1MTNEQjAwQkI3MjJDIC8qIEZUTExv
d2VyREZHVG9MTFZNLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTAwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRjgxOUQw
QkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZE
OEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzg2Nyw2ICs4MzQ5LDcgQEAKIAkJCQkwRkVBMEEyQTE3MDk2Mjk2MDBCQjcyMkMg
LyogRlRMT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzI5MTg3REZERUMwMDgz
QjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFB
QjE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1ODkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjI1RjFCMTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xvd1BhdGhD
YWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYzOSAvKiBG
VExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzOUExODAzQURC
NzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4OTksNiAr
ODM4Miw3IEBACiAJCQkJQTVGRDAwNzUxODlCMDM4QzAwNjMzMjMxIC8qIElkZW50aWZpZXJzRmFj
dG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVGOEJDRDE1NzU0NEE5MDAyNDVCNzEgLyog
SW5jcmVtZW50YWxTd2VlcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTNFMDRFMTYxNjRB
MUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVkVHlwZVRh
YmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjhCREVBMUFENENGNzEwMERGRTg4NCAvKiBJ
bmZlcnJlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkwNiw2ICs4MzkwLDcgQEAKIAkJ
CQk5RUE1QzdBMjE5MEYwODg3MDA1MDhFQkUgLyogSW5pdGlhbGl6ZUxMVk1NYWMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDgxOTBGMDIxRTAwMUE5MUI1IC8qIEluaXRpYWxpemVMTFZN
UE9TSVguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5MUI1IC8q
IEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1N0IxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRTY3JpcHRC
YXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OEUzNTkxMTg2MERFQ0YwMDFGMjRGRSAvKiBJ
bmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTE3LDYgKzg0MDIsNyBA
QAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJlZ2lzdHJ5
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMyNDM4NzE4
NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwODExODlCMTkxQTAwNjMzMjMxIC8qIEluc3BlY3Rv
ckNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdEMjNFNTE4OTBDRUJGMDAz
MUM3RkEgLyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTMyNDM4OTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRjaGVycy5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTc5NzMsNiArODQ1OSw3IEBACiAJCQkJODZGQTlFOTExNDJC
QkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDQwRjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0NDBGODkyMEE1MDhCMTAwMDA1RjA2MSAvKiBKU0NhbGxiYWNrRnVu
Y3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NkYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFyZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEFCREY2MDBBNDM3RkVGMDBFQ0NBMDEg
LyogSlNDYWxsYmFja09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTdDRjQ1ODE5QkY2
NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEODAxQTgx
ODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzk4
MCw2ICs4NDY3LDggQEAKIAkJCQkxNDdGMzlENjEwN0VDMzc2MDA0MjdBNDggLyogSlNDSlNWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRkNFNDBBNTFFNDZCMDAwNUYwNjEgLyogSlND
bGFzc1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NzE4QkMxQTU2MDBCRURGNzYg
LyogSlNDb25zb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTkwMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3MzFCREFD
REM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gaW4gU291cmNlcyAqLywKIAkJ
CQkxNEJENUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0UmVmLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MjAyOEI2MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTkwLDE2ICs4NDc5LDE5IEBACiAJCQkJRkUzODRFRTcx
QUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAwNURCQzhEIC8qIEpTRnVuY3Rp
b24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
TG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3OTdFMDdBOTFCOEZDRkI5MDA4NDAw
QkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQ3RjM5RDIxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTR2xvYmFsT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1RkQwMDg1MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVjdENvbnNv
bGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUMzQTFBNTE4QzA0OTAyMDBDOTU5M0Eg
LyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTk0NTU5MjE4MjQ3NDQ3MDBDQzM4NDMgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dh
YmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U5MTg5MUIwNzcwMDMxQzdGQSAvKiBK
U0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRFOUQx
N0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MTAwN0MwMTg3Q0MzQzYwMEIzODg3OSAvKiBKU0dsb2JhbE9iamVjdElu
c3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRCNjMxODgwOURE
NTAwNjhBNDZEIC8qIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE1MDNGQTI5MTg4RjEwNTkwMDExMEYxNCAvKiBKU0dsb2JhbE9iamVjdFNjcmlwdERl
YnVnU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTIzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM09yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCRjE4NUJGQUNDMDA3
RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUx
M0U1QzExODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDgwMUI4NDI5QTQwMDQxMzg1NiAvKiBKU0ludGVy
bmFsUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMTgsNiArODUxMCw3IEBACiAJCQkJ
RTMxOENCQzAxQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUUzOURBNEE2MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJl
Y29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNFOEQxQzFCOTAxM0MzMDAzNDZCNTIgLyog
SlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxODFCREFD
REFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI3MDA5
MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtODAzMSw2ICs4NTI0LDcgQEAKIAkJCQlFM0VGODg3NDFCNjZERjIzMDAzRjI2
Q0IgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjI1
NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTUyQzM3RjFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNwZWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTI4RkYzQjE4QUM0QUVDMDBCOENGMTIgLyogSlNS
ZXBsYXlJbnB1dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRBRTUxNUVCREU0QTAwMkUz
NTg3IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMEM0QUQxNjgxMDY3RTAw
MTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA1OSw2ICs4NTUz
LDcgQEAKIAkJCQk3MDlGQjg2NzFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFrU2V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyogSlNXcmFw
cGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzRnJlcXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NzAxMDdFQzEz
NDAwMTNFN0IyIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0ZE
OEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTgwNjYsOSArODU2MSwxMiBAQAogCQkJCTE0OEYyMUIwMTA3RUM1
NDEwMDQyRUMyQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc1NzE1OTE0
QTIwMDA0Q0I5RkYgLyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0UyRUE2
QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVDODU3RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExMSW50RGF0
YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNB
cmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQxMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhCMDExMTdD
RjA3ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY0NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50RXhjZXB0aW9ucy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MDc3LDYgKzg1NzUsNyBAQAogCQkJCUE3RTVBQjM3MTc5OUU0
QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3BwIGluIFNv
dXJjZXMgKi8sCisJCQkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8qIE1hY2hp
bmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVCM0VDRjE2MjM3RjZDMDBB
QjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZDNTY4RTAx
MUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODA4NiwxMCArODU4NSwxMiBAQAogCQkJCUE3QTRBRTA4MTc5NzNCMjYwMDU2MTJCMSAvKiBN
YWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczOTE3
Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTc0REVGOTMxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3M0QxN0NCRThEMzAwQzNFNjQzIC8qIE1hcFBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkI5MTZDNTE0REEwNDBDMDBDQkFDODYg
LyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjA4MTM1MzlB
MjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEQyRjNE
QTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFjay5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk0MzQwQTQ4NDFBOTA1MUFGMDBENzNDQ0EgLyogTWF0aENvbW1vbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyogTWF0aE9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTgxMjgsMTcgKzg2MjksMjEgQEAKIAkJCQkwRkY3MjlBRDE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkY3MjlBRTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYxMzkxMjkxNjc3MUMzMzAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVT
ZXF1ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwQjFCREFDREFDMDA4MEZGNzQg
LyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUFGMTY2QUQz
NUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxlZEJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIyMTY2QUQzNUMw
MDBGNUJBMyAvKiBQcm9maWxlckRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTkw
Q0FDMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lh
bC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMgLyogUHJv
ZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1QzAwMEY1
QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JFeGl0U2l0
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2NzcxQzNBMDA5Q0NCMDcgLyogUHJv
ZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzRTQwRDFC
NjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0ZCNjBBNDEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlwdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0NDY5REU4MTA3RUM3RTcwMDY1MDQ0NiAvKiBQcm9wZXJ0eVNs
b3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQURFMzlGRkYxNkREMTQ0QjAwMDNDRDRBIC8qIFBy
b3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTQ3LDEwICs4NjUyLDEyIEBACiAJ
CQkJMEYxNUNEMjIxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjkzQjRBOTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZh
cmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MkIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUHJvY2VkdXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3NDBGODgwMDAy
OTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzMzYzN0E1
MUI2MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRkVDODU3ODFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBDYWNoZWRS
ZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNFN0IyIC8q
IFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODE2NCw2ICs4NjcxLDcg
QEAKIAkJCQlBNUJBMTVFOTE4MjM0MEIzMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yLm1tIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OEYxODI0NUVGRDAwQ0MzODQzIC8qIFJlbW90ZUluc3Bl
Y3RvckRlYnVnZ2FibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RUMxODIzNDBCNDAw
QTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uLm1tIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUVFMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJ
bnNwZWN0b3JYUENDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNEU1NTAxN0VF
Mjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTI3NzczREUx
QUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODE4
Miw2ICs4NjkwLDcgQEAKIAkJCQlBNTRDRjJGOTE4NEVBRURBMDAyMzdGMTkgLyogU2NyaXB0T2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NENGMkY1MTg0RUFCMjQwMDIzN0YxOSAvKiBT
Y3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5OURBNTE3RDEyODU4MDA1RjVG
RjkgLyogU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODUxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTc5MERENkQxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3Mjk5REExMTdEMTI4NDgwMDVGNUZGOSAvKiBTZXRQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRTk4NDMxQTg5MjI3NTAwNzU0RTkzIC8qIFNl
dHVwVmFyYXJnc0ZyYW1lLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODE5Niw2ICs4NzA1LDcgQEAK
IAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdDMUVBRjExNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrVmlzaXRvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzMwQjYxMzEyNTAwNjhGMDA5RDI1QjEgLyogU3RyaWN0
RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVCMTA3RUM3
RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3
MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ09iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMTIsNiArODcyMiw3IEBACiAJCQkJNzA1QjQxQUQx
QTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTcwNUI0MUFGMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzRjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VD
b3VudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8q
IFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUNBNjA3MUFGREJFQTIwMDQ0
OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzMxNDEz
MTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04MjQwLDYgKzg3NTEsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1
ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVD
OSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkM3MzUw
MUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU4MzFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyQzFBQTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjBDMjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0
dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkw
QjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODI1OSw2ICs4NzcxLDcgQEAKIAkJCQk3
MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENvbnN0cnVjdG9yLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTcwOUZCODZCMUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBNEVDOTBCMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0
ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1N0QxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUw
QjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBN0U1QUIzQTE3OTlFNEIyMDBEMjgzM0QgLyogWDg2RGlzYXNzZW1ibGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25p
Y2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyODUsNiArODc5OCwxMSBAQAogCQkJ
dGFyZ2V0ID0gMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxsdm1Gb3JKU0MgKi87CiAJCQl0
YXJnZXRQcm94eSA9IDBGQ0VGQUJDMTgwNUQ2NjMwMDQ3MkNFNCAvKiBQQlhDb250YWluZXJJdGVt
UHJveHkgKi87CiAJCX07CisJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXRE
ZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdl
dCA9IDBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi87CisJCQl0YXJnZXRQcm94
eSA9IDBGRUM4NUIwMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87
CisJCX07CiAJCTBGRjkyMkQzMTRGNDZCMkYwMDQxQTI0RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5
ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsKIAkJCXRhcmdldCA9IDBGNDY4
MEE5MTRCQTdGRDkwMEJGRTI3MiAvKiBMTEludCBPZmZzZXRzICovOwpAQCAtODQwOSw2ICs4OTI3
LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGRUM4NUE5MUJE
QjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0
aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBG
QzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJCQlidWlsZFNldHRpbmdzID0g
eworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJCQluYW1lID0gRGVidWc7CisJ
CX07CisJCTBGRUM4NUFBMUJEQjVDRjEwMDgwRkY3NCAvKiBSZWxlYXNlICovID0geworCQkJaXNh
ID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9
IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsK
KwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsK
KwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkwRkVDODVBQjFCREI1Q0YxMDA4MEZGNzQgLyog
UHJvZmlsaW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNl
Q29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29s
RXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVD
VF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBG
RUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9uICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5h
bWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRkY5MjJDQjE0RjQ2QjEzMDA0MUEyNEUgLyogRGVi
dWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1
cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRh
YmxlLnhjY29uZmlnICovOwpAQCAtODc2MSw2ICs5MzExLDE3IEBACiAJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9k
dWN0aW9uOwogCQl9OworCQkwRkVDODVBODFCREI1Q0YxMDA4MEZGNzQgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3RiMyIgKi8gPSB7CisJCQlpc2Eg
PSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkw
RkVDODVBOTFCREI1Q0YxMDA4MEZGNzQgLyogRGVidWcgKi8sCisJCQkJMEZFQzg1QUExQkRCNUNG
MTAwODBGRjc0IC8qIFJlbGVhc2UgKi8sCisJCQkJMEZFQzg1QUIxQkRCNUNGMTAwODBGRjc0IC8q
IFByb2ZpbGluZyAqLywKKwkJCQkwRkVDODVBQzFCREI1Q0YxMDA4MEZGNzQgLyogUHJvZHVjdGlv
biAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlk
ZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRkY5MjJDQTE0
RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVU
YXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZp
Z3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9ICgKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCShyZXZp
c2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxF
KEFTU0VNQkxFUikKIAorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCiBuYW1lc3BhY2Ug
SlNDIHsKIAogY29uc3QgZG91YmxlIE1hY3JvQXNzZW1ibGVyOjp0d29Ub1RoZTMyID0gKGRvdWJs
ZSkweDEwMDAwMDAwMHVsbDsKQEAgLTQ3LDUgKzQ5LDcwIEBAIHZvaWQgTWFjcm9Bc3NlbWJsZXI6
OmNhbGxQcm9iZShzdGQ6OmZ1bmMKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBX
VEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZCkKK3sK
KyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpFcXVhbDoKKyAg
ICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNy
b0Fzc2VtYmxlcjo6Tm90RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTm90RXF1YWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlOgorICAgICAgICBv
dXQucHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQWJvdmVPckVxdWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpCZWxvdzoKKyAgICAgICAg
b3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6QmVsb3dPckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkJlbG93T3JFcXVhbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW46Cisg
ICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50
KCJHcmVhdGVyVGhhbk9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9B
c3NlbWJsZXI6Okxlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWw6Cisg
ICAgICAgIG91dC5wcmludCgiTGVzc1RoYW5PckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24g
Y29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpP
dmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJPdmVyZmxvdyIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkOgorICAgICAgICBvdXQucHJpbnQoIlNp
Z25lZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6UG9zaXRp
dmVPclplcm86CisgICAgICAgIG91dC5wcmludCgiUG9zaXRpdmVPclplcm8iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Olplcm86CisgICAgICAgIG91dC5wcmlu
dCgiWmVybyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6Tm9u
WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJOb25aZXJvIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAx
OTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTYsOCArMTU5NiwxOSBAQCBwdWJsaWM6CiAKIH0gLy8g
bmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24pOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKICNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKK25hbWVzcGFjZSBKU0MgeworCiAvLyBJ
ZiB0aGVyZSBpcyBubyBhc3NlbWJsZXIgZm9yIHRoaXMgcGxhdGZvcm0sIGF0IGxlYXN0IGFsbG93
IGNvZGUgdG8gbWFrZSByZWZlcmVuY2VzIHRvCiAvLyBzb21lIG9mIHRoZSB0aGluZ3MgaXQgd291
bGQgb3RoZXJ3aXNlIGRlZmluZSwgYWxiZWl0IHdpdGhvdXQgZ2l2aW5nIHRoYXQgY29kZSBhbnkg
d2F5CiAvLyBvZiBkb2luZyBhbnl0aGluZyB1c2VmdWwuCkBAIC0xNjExLDYgKzE2MjIsOCBAQCBw
dWJsaWM6CiAgICAgZW51bSBGUFJlZ2lzdGVySUQgeyBOb0ZQUmVnaXN0ZXIgfTsKIH07CiAKK30g
Ly8gbmFtZXNwYWNlIEpTQworCiAjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKIAogI2VuZGlm
IC8vIE1hY3JvQXNzZW1ibGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fk
ZHJlc3NNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6Cisj
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKwor
bWF0Y2hlciBBZGRyZXNzTWF0Y2hlcgorCisjIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBk
b2luZyBhZ2dyZXNzaXZlIHJlYXNzb2NpYXRpb24gYW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRl
Z2VyIGFkZHMuCisjIFdlJ2xsIG5ldmVyIHNlZSBBZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0Mikg
YmVjYXVzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBB
ZGQoeCwgY29uc3QxICsgY29uc3QyKS4gQWxzbywgd2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0
LCB4KSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGNhbm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgs
IGNvbnN0KS4gVGhhdCBzYWlkLCBpbiB0aGlzIGNvZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25z
IGFib3V0IHRoZXNlIG9wdGltaXphdGlvbnMKKyMgaGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNv
LCBzaW5jZSB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWlu
IG9mZnNldCwgd2UKKyMgZG9uJ3QgbmVlZCB0byBtYXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdv
dWxkIGhhdmUgYmVlbiBmb2xkZWQgaW50byB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMg
YWxyZWFkeS4gU28sIHRoZSBvbmx5IGZhbmN5IG1hdGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBC
YXNlSW5kZXggZm9ybXMuCisKK0FkZFNoaWZ0MSA9IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSks
IGJhc2UpCitBZGRTaGlmdDIgPSBBZGQoYmFzZSwgU2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitB
ZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK0RpcmVjdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFs
dWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1lbnRSZWdWYWx1ZSgpCit7Cit9CisKK3Zv
aWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNBcmd1bWVudFJlZ1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0FyZ3VtZW50UmVnVmFsdWVfaAorI2RlZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJS
ZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEFyZ3VtZW50
UmVnVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAg
CisgICAgfkFyZ3VtZW50UmVnVmFsdWUoKTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0
IHsgcmV0dXJuIG1fcmVnOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKworICAgIEFyZ3VtZW50UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBv
cmlnaW4sIFJlZyByZWcpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcu
aXNHUFIoKSA/IHBvaW50ZXJUeXBlKCkgOiBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3Jl
ZyhyZWcpCisgICAgeworICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkpOworICAgIH0KKworICAg
IFJlZyBtX3JlZzsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
Citjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOworCitCYXNp
Y0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAg
IDogbV9pbmRleChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKwor
QmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKQoreworfQorCit2b2lkIEJhc2ljQmxvY2s6OmFwcGVu
ZChWYWx1ZSogdmFsdWUpCit7CisgICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKK30KKworYm9v
bCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBy
ZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Js
b2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4g
QjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2Nr
OjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7
CisgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOworfQor
Cit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVl
cER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRo
aXMsICI6IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOworICAgIGZvciAoVmFs
dWUqIHZhbHVlIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludCgiICAgICIsIEIzOjpkZWVwRHVt
cCh2YWx1ZSksICJcbiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNp
Y0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNC
bG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNC
bG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrX2gKKyNk
ZWZpbmUgQjNCYXNpY0Jsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIFByb2NlZHVyZTsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBCYXNpY0Jsb2NrIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSo+IFZhbHVlTGlz
dDsKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0Owor
ICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsgLy8g
VGhpcyBtYXRjaGVzIENvbnRyb2xWYWx1ZTo6U3VjY2Vzc29yTGlzdAorCisgICAgc3RhdGljIGNv
bnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisgICAg
dW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBWYWx1ZUxp
c3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZh
bHVlTGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBW
YWx1ZUxpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
YmVnaW4oKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV92YWx1ZXMuc2l6ZSgpOyB9CisgICAgVmFsdWUqIGF0KHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgVmFsdWUqJiBhdChzaXplX3QgaW5kZXgp
IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorCisgICAgVmFsdWUqIGxhc3QoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKyAgICBWYWx1ZSomIGxhc3QoKSB7IHJldHVybiBt
X3ZhbHVlcy5sYXN0KCk7IH0KKworICAgIGNvbnN0IFZhbHVlTGlzdCYgdmFsdWVzKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZXM7IH0KKyAgICBWYWx1ZUxpc3QmIHZhbHVlcygpIHsgcmV0dXJuIG1f
dmFsdWVzOyB9CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChWYWx1ZSopOwor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgVmFsdWVUeXBlKiBhcHBlbmROZXcoUHJvY2VkdXJlJiwgQXJndW1lbnRzLi4uKTsKKwor
ICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdDsKKyAgICBjb25zdCBGcmVxdWVudGVk
QmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgRnJlcXVlbnRlZEJs
b2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpOworICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3Qm
IHN1Y2Nlc3NvcnMoKSBjb25zdDsKKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCk7CisK
KyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3Q7Cisg
ICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KTsKKyAgICBTdWNj
ZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2Nr
cygpOworICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3Vj
Y2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1Q
cmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAg
ICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
bV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVu
c2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25z
dCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVj
ZXNzb3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBt
X3ByZWRlY2Vzc29yczsgfQorCisgICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7
CisgICAgYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBs
YWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCisgICAg
ZG91YmxlIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAg
ICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5z
aWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsK
KyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNz
b3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2Nr
RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sq
IGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxv
Y2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBj
b25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVt
cCBkZWVwRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJh
c2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19o
CisjZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisj
aW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KK1ZhbHVlVHlwZSogQmFzaWNCbG9jazo6YXBwZW5kTmV3KFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0g
cHJvY2VkdXJlLmFkZDxWYWx1ZVR5cGU+KGFyZ3VtZW50cy4uLik7CisgICAgYXBwZW5kKHJlc3Vs
dCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHVuc2lnbmVkIEJhc2ljQmxvY2s6
Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xW
YWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgY29uc3QgRnJlcXVlbnRlZEJs
b2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQor
CitpbmxpbmUgRnJlcXVlbnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNz
b3IoaW5kZXgpOworfQorCitpbmxpbmUgY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYg
QmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8
Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2NrOjpT
dWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKCkKK3sKKyAgICByZXR1cm4gbGFz
dCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2lj
QmxvY2sqIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdAor
eworICAgIHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7Cit9CisKK2lubGluZSBCYXNp
Y0Jsb2NrKiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpCit7Cisg
ICAgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIFN1Y2Nlc3Nv
ckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gQmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2tzKCkKK3sKKyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihzdWNjZXNzb3JzKCkpOworfQorCitpbmxpbmUg
U3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBCYXNpY0Jsb2NrOjpT
dWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAoreworICAg
IHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nl
c3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lubGlu
ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRp
bHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2tVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrVXRp
bHNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tVdGlsc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlz
dC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIGFkZFByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAgICBh
dXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisKKyAgICBpZiAocHJl
ZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vzc29yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgcHJlZGVjZXNzb3JzLmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlbW92ZVByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAgICBh
dXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
cHJlZGVjZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVkZWNlc3Nv
cnNbaS0tXSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnMu
cmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKCFwcmVkZWNlc3NvcnMuY29udGFpbnMo
cHJlZGVjZXNzb3IpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4K
K2Jvb2wgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+
cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29y
cy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IGZyb20pIHsK
KyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpXSA9IHRvOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIHJl
Y29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCByZW1vdmVzIGJsb2NrcyB0aGF0IGFyZW4ndCByZWFj
aGFibGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgordm9pZCByZXNldFJlYWNoYWJp
bGl0eShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQoreworICAg
IC8vIENsZWFyIGFsbCBwcmVkZWNlc3NvciBsaXN0cyBmaXJzdC4KKyAgICBmb3IgKGF1dG8mIGJs
b2NrIDogYmxvY2tzKQorICAgICAgICBibG9jay0+cHJlZGVjZXNzb3JzKCkucmVzaXplKDApOwor
CisgICAgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+
PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2Nrc1swXS5nZXQoKSk7CisgICAgd2hp
bGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9yIChC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAg
ICAgICAgIGlmICh3b3JrbGlzdC5wdXNoKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3Vj
Y2Vzc29yLT5wcmVkZWNlc3NvcnMoKS5hcHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQor
CisgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAoYmxvY2tzW2ldLT5wcmVkZWNlc3NvcnMoKS5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBibG9ja3NbaV0gPSBudWxscHRyOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2Nr
VXRpbHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlz
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3Jr
bGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jsb2NrV29ya2xpc3RfaAor
I2RlZmluZSBCM0Jsb2NrV29ya2xpc3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3
dGYvR3JhcGhOb2RlV29ya2xpc3QuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVm
IEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxv
Y2tXb3JrbGlzdDsKKworLy8gV2hlbiB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91bGQg
cmVhZCBpdCBhcyAiYmxvY2sgd2l0aCBhbiBpbnQiLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNp
bmcgQmxvY2tXaXRoID0gR3JhcGhOb2RlV2l0aDxCYXNpY0Jsb2NrKiwgVD47CisKKy8vIEV4dGVu
ZGVkIGJsb2NrIHdvcmtsaXN0IGlzIHVzZWZ1bCBmb3IgZW5xdWV1ZWluZyBzb21lIG1ldGEtZGF0
YSBhbG9uZyB3aXRoIHRoZSBibG9jay4gSXQgYWxzbworLy8gcGVybWl0cyBmb3JjaWJseSBlbnF1
ZXVlaW5nIHRoaW5ncyBldmVuIGlmIHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uIEl0
J3MgdXNlZnVsIGZvcgorLy8gdGhpbmdzIGxpa2UgYnVpbGRpbmcgYSBzcGFubmluZyB0cmVlLCBp
biB3aGljaCBjYXNlIFQgKHRoZSBhdXhpbGlhcnkgcGF5bG9hZCkgd291bGQgYmUgdGhlCisvLyBz
dWNjZXNzb3IgaW5kZXguCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2Nr
V29ya2xpc3QgPSBFeHRlbmRlZEdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRl
eFNldDxCYXNpY0Jsb2NrPj47CisKK3R5cGVkZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7
CisKK3R5cGVkZWYgR3JhcGhOb2RlV2l0aE9yZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRl
cjsKKwordHlwZWRlZiBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5k
ZXhTZXQ8QmFzaWNCbG9jaz4+IFBvc3RPcmRlckJsb2NrV29ya2xpc3Q7CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
QmxvY2tXb3JrbGlzdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NoZWNrU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFp
cjsKKworbmFtZXNwYWNlIHsKKwordW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCit7Cisg
ICAgc3dpdGNoIChpbnN0Lm9yaWdpbi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgor
ICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgLy8gUmVzQ29u
ZCwgVG1wLCBUbXAKKyAgICAgICAgcmV0dXJuIDM7CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworQ2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1
bnNpZ25lZCBudW1BcmdzKQorICAgIDogbV9jaGVja09wY29kZShvcGNvZGUpCisgICAgLCBtX251
bUNoZWNrQXJncyhudW1BcmdzKQoreworfQorCitDaGVja1NwZWNpYWw6On5DaGVja1NwZWNpYWwo
KQoreworfQorCitJbnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNvbnN0IEluc3QmIGlu
c3QpIGNvbnN0Cit7CisgICAgSW5zdCBoaWRkZW5CcmFuY2gobV9jaGVja09wY29kZSwgaW5zdC5v
cmlnaW4pOworICAgIGhpZGRlbkJyYW5jaC5hcmdzLnJlc2l6ZShtX251bUNoZWNrQXJncyk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbV9udW1DaGVja0FyZ3M7IGktLTspCisgICAgICAgIGhpZGRl
bkJyYW5jaC5hcmdzW2ldID0gaW5zdC5hcmdzW2kgKyAxXTsKKyAgICByZXR1cm4gaGlkZGVuQnJh
bmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25z
dCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAg
aGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmcoY2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJ
bXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7
Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0
dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlkRm9ybSgpCisgICAgICAgICYmIGlzVmFsaWRJ
bXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0KTsKK30KKworYm9v
bCBDaGVja1NwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4
KQoreworICAgIGlmIChhcmdJbmRleCA+PSAxICYmIGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hlY2tB
cmdzKQorICAgICAgICByZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmFkbWl0c1N0YWNrKGFyZ0lu
ZGV4IC0gMSk7CisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbChudW1CM0FyZ3MoaW5zdCksIG1f
bnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1
bXAgQ2hlY2tTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwg
R2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZh
aWwgPSBoaWRkZW5CcmFuY2goaW5zdCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICBBU1NF
UlQoZmFpbC5pc1NldCgpKTsKKworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisg
ICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAgIGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bj
b2RlKCkpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisgICAg
ICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcCgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUt
Pm9wY29kZSgpID09IENoZWNrU3ViICYmIHZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpCisgICAg
ICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5h
cmdzWzNdKSk7CisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBp
bnN0LmFyZ3NbMl0pKTsKKyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29k
ZSgpID09IENoZWNrKTsKKyAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEp
KTsKKyAgICB9CisKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBtX251bUNoZWNrQXJncyAr
IDEsIGluc3QsIHJlcHMpOworICAgIAorICAgIGNvbnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAg
ICAgICAgY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlv
bj4oCisgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4
dCYpIHsKKyAgICAgICAgICAgICAgICBmYWlsLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgICAgICAgICAgICAgIFN0
YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKKyAgICAgICAgICAgICAgICBwYXJhbXMu
dmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21h
cDsKKyAgICAgICAgICAgICAgICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgICAgICAgICAgICAg
cGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAg
ICAgICAgICAgICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworICAg
ICAgICAgICAgfSkpOworCisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOyAvLyBBcyBm
YXIgYXMgQWlyIHRoaW5rcywgd2UgYXJlIG5vdCBhIHRlcm1pbmFsLgorfQorCit2b2lkIENoZWNr
U3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV9jaGVja09wY29kZSwgIigiLCBtX251bUNoZWNrQXJncywgIikiKTsKK30KKwordm9pZCBD
aGVja1NwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiQjM6OkNoZWNrVmFsdWUgbG93ZXJlZCB0byAiLCBtX2NoZWNrT3Bjb2RlLCAi
IHdpdGggIiwgbV9udW1DaGVja0FyZ3MsICIgYXJncy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNDaGVja1NwZWNpYWxfaAorI2RlZmluZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNTdGFj
a21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdl
IHdhbnQgdG8gbG93ZXIgQ2hlY2sgaW5zdHJ1Y3Rpb25zIHRvIGEgYnJhbmNoLCBidXQgdGhlbiB3
ZSB3YW50IHRvIHJvdXRlIHRoYXQgYnJhbmNoIHRvIG91cgorLy8gb3V0LW9mLWxpbmUgY29kZSBp
bnN0ZWFkIG9mIGRvaW5nIGFueXRoaW5nIGVsc2UuIEZvciB0aGlzIHJlYXNvbiwgYSBDaGVja1Nw
ZWNpYWwgd2lsbCByZW1lbWJlcgorLy8gd2hpY2ggYnJhbmNoIG9wY29kZSB3ZSBoYXZlIHNlbGVj
dGVkIGFsb25nIHdpdGggdGhlIG51bWJlciBvZiBhcmdzIGluIHRoZSBvdmVybG9hZCB3ZSB3YW50
LiBJdAorLy8gd2lsbCBjcmVhdGUgYW4gSW5zdCB3aXRoIHRoYXQgb3Bjb2RlIHBsdXMgdGhlIGFw
cHJvcHJpYXRlIGFyZ3MgZnJvbSB0aGUgb3duaW5nIEluc3Qgd2hlbmV2ZXIgeW91CisvLyBjYWxs
IGFueSBvZiB0aGUgY2FsbGJhY2tzLgorLy8KKy8vIE5vdGUgdGhhdCBmb3IgQ2hlY2tBZGQsIENo
ZWNrU3ViLCBhbmQgQ2hlY2tNdWwgd2UgZXhwZWN0IHRoYXQgdGhlIEIzIGFyZ3VtZW50cyBhcmUg
dGhlIHJldmVyc2UKKy8vIG9mIHRoZSBBaXIgYXJndW1lbnRzIChBZGQoYSwgYikgPT4gQWRkMzIg
YiwgYSkuIEV4Y2VwdDoKKy8vIC0gQ2hlY2tTdWIoMCwgeCksIHdoaWNoIHR1cm5zIGludG8gQnJh
bmNoTmVnMzIgeC4KKy8vIC0gQ2hlY2tNdWwoYSwgYiksIHdoaWNoIHR1cm5zIGludG8gTXVsMzIg
YiwgYSBidXQgd2UgcGFzcyBBbnkgZm9yIGEncyBWYWx1ZVJlcC4KKworY2xhc3MgQ2hlY2tTcGVj
aWFsIDogcHVibGljIFN0YWNrbWFwU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ2hlY2tTcGVjaWFs
KEFpcjo6T3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisK
KyAgICAvLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUg
YnJhbmNoIHRoYXQgdGhpcyB3aWxsIHVzZS4KKyAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNv
bnN0IEFpcjo6SW5zdCYpIGNvbnN0OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJn
KEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFj
az4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7Cisg
ICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJp
ZGU7CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhl
IGhpZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8g
Z2VuZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVs
cGVyczo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVy
YXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFt
JikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2Rl
OworICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1Nw
ZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzQ2hlY2tWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK0NoZWNrVmFsdWU6On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9p
ZCBDaGVja1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgic3RhY2ttYXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
Q2hlY2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrVmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6
CisgICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAg
IGNhc2UgQ2hlY2s6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5DaGVj
a1ZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hl
Y2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiBy
aWdodCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdp
biwgbGVmdCwgcmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7Cisg
ICAgICAgIEFTU0VSVChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAgIEFT
U0VSVChvcGNvZGUgPT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9
PSBDaGVja011bCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCisg
ICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIHByZWRpY2F0ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lk
LCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hl
Y2spOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5j
bHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9v
bCBzaG91bGREdW1wSVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVu
YWJsZWQoKSB8fCBGVEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0
RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQoreworICAg
IHJldHVybiBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3Vs
ZFZhbGlkYXRlSVIoKQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkgfHwg
c2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJ
UkF0RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFj
aFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAgIHJl
dHVybiBPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Nv
bW1vbl9oCisjZGVmaW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitpbmxpbmUgYm9vbCBpczY0Qml0KCkgeyByZXR1
cm4gc2l6ZW9mKHZvaWQqKSA9PSA4OyB9CitpbmxpbmUgYm9vbCBpczMyQml0KCkgeyByZXR1cm4g
IWlzNjRCaXQoKTsgfQorCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlk
YXRlSVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM0NvbW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bW11dGF0aXZpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW11dGF0aXZpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tbXV0YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNv
bW11dGF0aXZpdHkpIHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQo
IkNvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZl
OgorICAgICAgICBvdXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDb21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitl
bnVtIENvbW11dGF0aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZl
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2Ns
YXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpC
Mzo6Q29tbXV0YXRpdml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRl
cm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNv
bk1hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMg
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMg
YGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJV
VE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUwor
IyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBDb21wYXJpc29uTWF0Y2hl
cgorCitUZXN0TG9hZE5vdFplcm8xID0gQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorVGVzdExv
YWROb3RaZXJvMiA9IEFuZChsZWZ0LCBMb2FkKGFkZHJlc3MpKQorVGVzdE5vdFplcm8gPSBBbmQo
bGVmdCwgcmlnaHQpCisKK1Rlc3RMb2FkWmVybzEgPSBFcXVhbChBbmQoTG9hZChhZGRyZXNzKSwg
cmlnaHQpLCAkMCkKK1Rlc3RMb2FkWmVybzIgPSBFcXVhbChBbmQobGVmdCwgTG9hZChhZGRyZXNz
KSksICQwKQorVGVzdFplcm8gPSBFcXVhbChBbmQobGVmdCwgcmlnaHQpLCAkMCkKKworTG9hZEVx
dWFsMSA9IEVxdWFsKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorTG9hZEVxdWFsMiA9IEVxdWFsKGxl
ZnQsIExvYWQoYWRkcmVzcykpCitOb3QgPSBFcXVhbCh2YWx1ZSwgJDApCitFcXVhbCA9IEVxdWFs
KGxlZnQsIHJpZ2h0KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMy
VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
MzJWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZh
bHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBDb25zdDMyVmFsdWUg
OiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2Rl
IG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAgIEpTX0VYUE9SVF9QUklW
QVRFIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0NvbnN0MzJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0NjRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3Q2NFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0NjRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6On5Db25z
dDY0VmFsdWUoKQoreworfQorCit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzQ29uc3Q2NFZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0NjRWYWx1ZSA6IHB1YmxpYyBWYWx1
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJl
dHVybiBvcGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25zdDY0VmFsdWUoKTsKKyAg
ICAKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0VmFs
dWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1
ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisKK3ZvaWQg
Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZh
bHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdERvdWJsZVZhbHVlIDog
cHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBv
cGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQorICAgIAorICAgIH5Db25z
dERvdWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisKKyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBk
b3VibGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0RG91YmxlLCBEb3VibGUs
IG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFsdWVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
Q29udHJvbFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKQoreworfQorCit2
b2lkIENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQobGlzdER1bXAobV9zdWNjZXNzb3JzKSk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZhbHVlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IEJhc2ljQmxvY2s7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnRyb2xWYWx1ZSA6IHB1
YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bj
b2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBKdW1w
OgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNh
c2UgT29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFN3aXRjaDog
CisgICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1
YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAorICAgICAgICAgICAgLy8gc3dpdGNo
VmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4gbm9uLW51bGwuCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9j
aywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db250cm9sVmFs
dWUoKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1
Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAg
ICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9z
dWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMo
KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNj
ZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKK3Byb3RlY3RlZDoKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKKyAgICAvLyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMu
Li4pCisgICAgeworICAgIH0KKworICAgIC8vIFN1YmNsYXNzZXMgd2lsbCBwb3B1bGF0ZSB0aGlz
LgorICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgT29wcy4KKyAgICBDb250
cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKG9wY29kZSA9PSBPb3BzKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3Ig
UmV0dXJuLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHJlc3VsdCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bj
b2RlLCBWb2lkLCBvcmlnaW4sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUg
PT0gUmV0dXJuKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KKyAgICBDb250
cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNv
bnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gSnVtcCk7
CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQodGFyZ2V0KTsKKyAgICB9CisKKyAgICAvLyBV
c2UgdGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRyb2xWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQg
aW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisg
ICAgICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgeWVzLCBjb25zdCBGcmVxdWVudGVkQmxvY2sm
IG5vKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGlj
YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBCcmFuY2gpOworICAgICAgICBt
X3N1Y2Nlc3NvcnMuYXBwZW5kKHllcyk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobm8p
OworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5j
eUNsYXNzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1
ZW5jeSkKK3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgeworICAgIGNhc2UgRnJlcXVlbmN5Q2xh
c3M6Ok5vcm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3JtYWwiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6CisgICAgICAgIG91dC5wcmludCgiUmFy
ZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xh
c3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVuY3lDbGFzc19oCisj
ZGVmaW5lIEIzRnJlcXVlbmN5Q2xhc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgRnJlcXVlbmN5Q2xhc3MgOiB1
aW50OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBoeXBvdGhlc2lzIGFib3V0IHRoZSBm
cmVxdWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0LiBUaGlzIGlzCisgICAgLy8g
dGhlIGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJhc2ljIGJsb2NrIGZyZXF1ZW5jeSBp
biB0aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhpcyBj
b250cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hlZCBzdXBlciByYXJlbHkuIEl0J3Mg
dmFsaWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlvbnMgdGhhdCBwdW5pc2ggUmFyZSBj
b2RlLiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRpb25zIHdoZXJlIHlvdQorICAgIC8v
IGhhdmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJlcXVlbmN5IGNsYXNzIGZyb20gYSBt
ZXJnaW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAgICAvLyB0aGlzIGhhcHBlbnMsIG5l
dmVyIGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3JtYWwuIFRoaXMgaXMgbmVjZXNzYXJ5
IGJlY2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNoIFJhcmUgY29kZSB2ZXJ5IGJhZGx5
LgorICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVuY3lDbGFzc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gK
KyNkZWZpbmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVl
bnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVx
dWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzR2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2Rl
LmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5o
IgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIGdlbmVyYXRlKFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBBaXI6OkNvZGUgY29kZTsKKyAgICBnZW5l
cmF0ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgQWlyOjpnZW5lcmF0ZShjb2RlLCBqaXQp
OworfQorCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFpcjo6Q29k
ZSYgY29kZSkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0
ZShwcm9jZWR1cmUpOworCisgICAgLy8gSWYgd2UncmUgZG9pbmcgc3VwZXIgdmVyYm9zZSBkdW1w
aW5nLCB0aGUgcGhhc2Ugc2NvcGUgb2YgYW55IHBoYXNlIHdpbGwgYWxyZWFkeSBkbyBhIGR1bXAu
CisgICAgaWYgKHNob3VsZER1bXBJUigpICYmICFzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7
CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgQjM6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9j
ZWR1cmUpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhl
cmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUw
NworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUocHJvY2Vk
dXJlKTsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBkb2luZyBzdXBlciB2ZXJib3NlIGR1bXBpbmcs
IHRoZSBwaGFzZSBzY29wZSBvZiBhbnkgcGhhc2Ugd2lsbCBhbHJlYWR5IGRvIGEgZHVtcC4KKyAg
ICAvLyBOb3RlIHRoYXQgbG93ZXJUb0FpcigpIGFjdHMgbGlrZSBhIHBoYXNlIGluIHRoaXMgcmVn
YXJkLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hvdWxkRHVtcElSQXRFYWNoUGhhc2Uo
KSkgeworICAgICAgICBkYXRhTG9nKCJCMyBhZnRlciAiLCBwcm9jZWR1cmUubGFzdFBoYXNlTmFt
ZSgpLCAiLCBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVy
ZSk7CisgICAgfQorCisgICAgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzR2VuZXJhdGVfaAorI2RlZmluZSBCM0dlbmVyYXRlX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2Rl
OyB9CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxh
Y2UsIGFuZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBjb2RlIGJ5IGZpcnN0CisvLyBpbnRlcm5h
bGx5IGNvbnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFuZCB0aGVuIGdlbmVyYXRpbmcgdGhhdC4K
K0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0NhbGxIZWxwZXJz
Jik7CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxh
Y2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKKy8vIHRoZSBB
aXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6Z2VuZXJhdGUoKS4gTm90ZSB0aGF0IGFuIEFp
cjo6Q29kZSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0aGUKKy8vIEIzOjpQcm9jZWR1cmUsIHNv
IHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCMzo6UHJvY2VkdXJlIG91dGxpdmVzIHRoZSBB
aXI6OkNvZGUuCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgQWlyOjpDb2RlJik7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzR2VuZXJhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmlu
ZSBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEEgZnJlcXVlbnRlZCBibG9j
ayBpcyBhIHR1cGxlIG9mIEJhc2ljQmxvY2sqIGFuZCBGcmVxdWVuY3lDbGFzcy4gSXQncyB1c3Vh
bGx5IHVzZWQgYXMgYQorLy8gc3VjY2Vzc29yIGVkZ2UuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJh
c2ljQmxvY2s+CitjbGFzcyBHZW5lcmljRnJlcXVlbnRlZEJsb2NrIHsKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKAorICAgICAgICBCYXNpY0Jsb2NrKiBibG9j
ayA9IG51bGxwdHIsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSA9IEZyZXF1ZW5jeUNsYXNzOjpO
b3JtYWwpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX2ZyZXF1ZW5jeShm
cmVxdWVuY3kpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHZW5l
cmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBt
X2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAgICYmIG1fZnJlcXVlbmN5ID09IG90
aGVyLm1fZnJlcXVlbmN5OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHZW5l
cmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBHZW5lcmljRnJlcXVlbnRlZEJs
b2NrKCk7CisgICAgfQorCisgICAgQmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJldHVybiBt
X2Jsb2NrOyB9CisgICAgQmFzaWNCbG9jayomIGJsb2NrKCkgeyByZXR1cm4gbV9ibG9jazsgfQor
ICAgIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5
OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAgICAgICAg
ICAgb3V0LnByaW50KGZyZXF1ZW5jeSgpLCAiOiIpOworICAgICAgICBvdXQucHJpbnQocG9pbnRl
ckR1bXAobV9ibG9jaykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrOworICAgIEZyZXF1ZW5jeUNsYXNzIG1fZnJlcXVlbmN5OworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJ
bmRleE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5k
ZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleE1hcF9oCisjZGVm
aW5lIEIzSW5kZXhNYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMg
YSBtYXAgZm9yIGtleXMgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50
IGZvciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5
b3UgZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIG1hcHMsIHNpbmNlIFZhbHVlcyBjYW4g
aGF2ZSB2ZXJ5CisvLyBzcGFyc2UgaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90IG9mIFZhbHVl
cy4KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFtZSBWYWx1ZT4KK2NsYXNzIEluZGV4
TWFwIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbmRleE1hcChzaXplX3Qgc2l6ZSA9IDApCisg
ICAgeworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAgdm9pZCBy
ZXNpemUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7
CisgICAgfQorCisgICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpCisgICAgeworICAgICAg
ICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAgCisgICAgY29uc3Qg
VmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIFZlY3Rv
cjxWYWx1ZT4gbV92ZWN0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0luZGV4TWFwX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJbmRleFNldF9oCisKKyNpbmNsdWRlIDx3dGYv
Qml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNldCBmb3IgdGhpbmdzIHRoYXQg
aGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0
J3Mgb25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28g
bWFueSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeSBzcGFyc2UKKy8v
IGluZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1ZXMuCisKKy8vIElmIHlvdSB3YW50
IGEgc2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8gSW5kZXhTZXQ8QmFzaWNCbG9jaz4uIFNvLCBU
ID0gQmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBJbmRleFNldCB7Citw
dWJsaWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFkZChUKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsK
KyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQqIHZhbHVlKSBjb25zdAorICAgIHsKKyAgICAg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFibGUgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIGNvbnN0IElu
ZGV4U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihjb2xsZWN0aW9uKQorICAg
ICAgICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNs
YXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQor
ICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvbGxlY3Rpb25UeXBl
JiBjb2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6aXRlcmF0b3IgaXRlcikK
KyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAg
ICAgICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2l0ZXIgPT0gb3Ro
ZXIubV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBw
cml2YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlvblR5cGUqIG1fY29sbGVjdGlvbjsK
KyAgICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7
CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkpOyB9CisgICAgICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQuZW5kKCkp
OyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xs
ZWN0aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9zZXQ7CisgICAgfTsKKworICAgIC8v
IEZvciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2Vk
dXJlKTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlvdSBkbzoKKyAgICAvLyBpbmRleFNl
dC52YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xs
ZWN0aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENv
bGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIEl0
ZXJhYmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsKKyAgICB9CisKKyAgICBjb25zdCBC
aXRWZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBtX3NldDsgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBDb21tYVByaW50ZXIg
Y29tbWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogaW5kaWNlcygpLnNldEJpdHMoKSkK
KyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVtcFByZWZpeCwgaW5kZXgpOworICAg
IH0KKworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElu
bGluZXMuaCIKKyNpbmNsdWRlICJCM0FkZHJlc3NNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29tbXV0YXRpdml0eS5oIgorI2luY2x1ZGUg
IkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSAiQjNMb3dl
cmluZ01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQ
aGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1VzZUNv
dW50cy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3Bh
Y2UgQWlyOworCituYW1lc3BhY2UgeworCitjbGFzcyBMb3dlclRvQWlyIHsKK3B1YmxpYzoKKyAg
ICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQorICAgICAgICA6
IHZhbHVlVG9UbXAocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKKyAgICAgICAgLCBibG9ja1Rv
QmxvY2socHJvY2VkdXJlLnNpemUoKSkKKyAgICAgICAgLCB1c2VDb3VudHMocHJvY2VkdXJlKQor
ICAgICAgICAsIGFkZHJlc3NTZWxlY3RvcigqdGhpcykKKyAgICAgICAgLCBwcm9jZWR1cmUocHJv
Y2VkdXJlKQorICAgICAgICAsIGNvZGUoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBy
dW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1
cmUpCisgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdID0gY29kZS5hZGRCbG9jayhibG9j
ay0+ZnJlcXVlbmN5KCkpOworCisgICAgICAgIC8vIExvd2VyIGRlZnMgYmVmb3JlIHVzZXMgb24g
YSBnbG9iYWwgbGV2ZWwuIFRoaXMgaXMgYSBnb29kIGhldXJpc3RpYyB0byBsb2NrIGRvd24gYQor
ICAgICAgICAvLyBob2lzdGVkIGFkZHJlc3MgZXhwcmVzc2lvbiBiZWZvcmUgd2UgZHVwbGljYXRl
IGl0IGJhY2sgaW50byB0aGUgbG9vcC4KKyAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxv
Y2sgOiBwcm9jZWR1cmUuYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICAvLyBSZXNl
dCBzb21lIHN0YXRlLgorICAgICAgICAgICAgaW5zdHMucmVzaXplKDApOworICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIHNl
ZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxvd3MgdXMKKyAgICAgICAgICAgIC8v
IHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgorICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgeworICAgICAgICAgICAgICAgIGluc3RzLmFwcGVu
ZChWZWN0b3I8SW5zdD4oKSk7CisgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gYmxvY2st
PmF0KGkpOworICAgICAgICAgICAgICAgIHJ1bkxvd2VyaW5nTWF0Y2hlcihjdXJyZW50VmFsdWUs
ICp0aGlzKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUg
aW5zdHJ1Y3Rpb25zLiBpbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdl
IHByb2Nlc3MKKyAgICAgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBpbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBmb3Ig
KEluc3QmIGluc3QgOiBpbnN0c1tpXSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2Nr
W2Jsb2NrXS0+YXBwZW5kSW5zdChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNv
cnJlY3RseS4KKyAgICAgICAgICAgIEFTU0VSVChibG9jay0+c3VjY2Vzc29ycygpLnNpemUoKSA8
PSAyKTsKKyAgICAgICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2Nr
LT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2td
LT5zdWNjZXNzb3JzKCkuYXBwZW5kKGJsb2NrVG9CbG9ja1tzdWNjZXNzb3JdKTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIFRtcCB0bXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgVG1w
JiB0bXAgPSB2YWx1ZVRvVG1wW3ZhbHVlXTsKKyAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAg
ICB0bXAgPSBjb2RlLm5ld1RtcChpc0ludCh2YWx1ZS0+dHlwZSgpKSA/IEFyZzo6R1AgOiBBcmc6
OkZQKTsKKyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGdpdmVzIHlv
dSB0aGUgYWRkcmVzcyBvZiB0aGUgZ2l2ZW4gTG9hZCBvciBTdG9yZS4gSWYgaXQncyBub3QgYSBM
b2FkIG9yIFN0b3JlLCB0aGVuCisgICAgLy8gaXQgcmV0dXJucyBBcmcoKS4KKyAgICBBcmcgYWRk
cihWYWx1ZSogbWVtb3J5VmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogdmFsdWUg
PSBtZW1vcnlWYWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmICghdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gQXJnKCk7CisKKyAgICAgICAgcnVuQWRkcmVzc01hdGNoZXIodmFs
dWUtPmNoaWxkcmVuKCkubGFzdCgpLCBhZGRyZXNzU2VsZWN0b3IpOworICAgICAgICByZXR1cm4g
YWRkcmVzc1NlbGVjdG9yLnNlbGVjdGVkQWRkcmVzcy53aXRoT2Zmc2V0KHZhbHVlLT5vZmZzZXQo
KSk7CisgICAgfQorCisgICAgQXJnIGxvYWRBZGRyKFZhbHVlKiBsb2FkVmFsdWUpCisgICAgewor
ICAgICAgICBpZiAobG9hZFZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkKQorICAgICAgICAgICAgcmV0
dXJuIGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAg
IEFyZyBpbW0oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5oYXNJbnQz
MigpKQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6aW1tKHZhbHVlLT5hc0ludDMyKCkpOworICAg
ICAgICByZXR1cm4gQXJnKCk7CisgICAgfQorCisgICAgQXJnIGltbU9yVG1wKFZhbHVlKiB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGlmIChBcmcgcmVzdWx0ID0gaW1tKHZhbHVlKSkKKyAgICAgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB0bXAodmFsdWUpOworICAgIH0KKwor
ICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2
aXR5ID0gTm90Q29tbXV0YXRpdmU+CisgICAgdm9pZCBhcHBlbmRCaW5PcChWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdCA9IHRtcChjdXJyZW50VmFs
dWUpOworICAgICAgICAKKyAgICAgICAgLy8gVGhyZWUtb3BlcmFuZCBmb3JtcyBsaWtlOgorICAg
ICAgICAvLyAgICAgT3AgYSwgYiwgYworICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgor
ICAgICAgICAvLyAgICAgYyA9IGEgT3AgYgorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNv
ZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBpZiAoY29t
bXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAgICAgICAgICAgIGlmIChpbW0ocmln
aHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShyaWdodCksIHRt
cChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQSBub24t
Y29tbXV0YXRpdmUgb3BlcmF0aW9uIGNvdWxkIGhhdmUgYW4gaW1tZWRpYXRlIGluIGxlZnQuCisg
ICAgICAgICAgICAgICAgaWYgKGltbShsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBl
bmQob3Bjb2RlLCBpbW0obGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaW1tKHJpZ2h0KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6
VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0
bXAobGVmdCksIGltbShyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICAvLyBUd28tb3BlcmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAg
ICAgT3AgYSwgYgorICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAg
ICAgYiA9IGIgT3AgYQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIHByZWZlciB2ZXJz
aW9ucyBvZiB0aGUgb3BlcmF0aW9uIHRoYXQgaGF2ZSBhIGZ1c2VkIGxvYWQgb3ZlciB0aHJlZQor
ICAgICAgICAvLyBvcGVyYW5kIGZvcm1zLgorICAgICAgICAKKyAgICAgICAgaWYgKGNvbW11dGF0
aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAgIEFyZyBsZWZ0QWRkciA9IGxvYWRB
ZGRyKGxlZnQpOworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgbGVmdEFkZHIu
a2luZCgpLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVXNlIHRoZSBy
aWdodCBNb3ZlIG9wY29kZS4gSWYgd2UncmUgZGVhbGluZyB3aXRoIDMyLWJpdCB0eXBlcywgd2Ug
c2hvdWxkCisgICAgICAgICAgICAgICAgLy8gdXNlIE1vdmUzMi4gSWYgd2UncmUgZGVhbGluZyB3
aXRoIERvdWJsZXMsIHdlIHNob3VsZCB1c2UgTW92ZURvdWJsZS4KKyAgICAgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTMzCisgICAgICAg
ICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgYXBwZW5kKG9wY29kZSwgbGVmdEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgQXJnIHJpZ2h0QWRkciA9
IGxvYWRBZGRyKHJpZ2h0KTsKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgcmlnaHRB
ZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxl
ZnQpLCByZXN1bHQpOworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLCByZXN1
bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsKKyAgICAgICAg
ICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobGVm
dCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChyaWdodCksIHJlc3VsdCk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21tdXRhdGl2aXR5
IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICBib29sIHRyeUFwcGVuZFN0b3Jl
QmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBUaGlzIGZhaWxzIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZWZmZWN0cyBiZXR3ZWVuIHRo
ZSBMb2FkIGFuZCB0aGUgU3RvcmUgdGhhdAorICAgICAgICAvLyBjb3VsZCBjbG9iYmVyIHRoZSBs
b2FkZWQgdmFsdWUuIFdlIG5lZWQgdG8gY2hlY2sgc3VjaCB0aGluZ3MgYmVjYXVzZSB3ZSBhcmUg
ZWZmZWN0aXZlbHkKKyAgICAgICAgLy8gc2lua2luZyB0aGUgbG9hZC4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzNAorICAgICAgICAKKyAg
ICAgICAgQXJnIHN0b3JlQWRkciA9IGFkZHIoY3VycmVudFZhbHVlKTsKKyAgICAgICAgQVNTRVJU
KHN0b3JlQWRkcik7CisKKyAgICAgICAgVmFsdWUqIG90aGVyVmFsdWU7CisgICAgICAgIGlmIChh
ZGRyKGxlZnQpID09IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSByaWdodDsK
KyAgICAgICAgZWxzZSBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSAmJiBhZGRyKHJp
Z2h0KSA9PSBzdG9yZUFkZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gbGVmdDsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICghaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgc3RvcmVBZGRyLmtpbmQoKSkpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG90aGVyVmFsdWUpLCBz
dG9yZUFkZHIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQWlyOjpPcGNvZGUgb3Bjb2Rl
LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCku
YXBwZW5kKEluc3Qob3Bjb2RlLCBjdXJyZW50VmFsdWUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+
KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisgICAgCisgICAgSW5kZXhTZXQ8VmFsdWU+IGxvY2tl
ZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgorICAg
IEluZGV4TWFwPFZhbHVlLCBUbXA+IHZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhh
dCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEgbm9u
LW51bGwgVG1wIGlzICJwaW5uZWQiLgorICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrLCBBaXI6
OkJhc2ljQmxvY2sqPiBibG9ja1RvQmxvY2s7CisKKyAgICBVc2VDb3VudHMgdXNlQ291bnRzOwor
CisgICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gaW5zdHM7CisKKyAgICBWYWx1ZSogY3VycmVu
dFZhbHVlOworCisgICAgLy8gVGhlIGFkZHJlc3Mgc2VsZWN0b3Igd2lsbCBtYXRjaCBhbnkgcGF0
dGVybiB3aGVyZSB0aGUgaW5wdXQgb3BlcmFuZHMgYXJlIGF2YWlsYWJsZSBhcyBUbXBzLgorICAg
IC8vIEl0IGRvZXNuJ3QgY2FyZSBhYm91dCBzaGFyaW5nLiBJdCB3aWxsIGhhcHBpbHkgZW1pdCB0
aGUgc2FtZSBhZGRyZXNzIGV4cHJlc3Npb24gb3ZlciBhbmQgb3ZlcgorICAgIC8vIGFnYWluIHJl
Z2FyZGxlc3Mgb2YgdGhlIGV4cHJlc3Npb24ncyBjb21wbGV4aXR5LiBUaGlzIHdvcmtzIG91dCBm
aW5lLCBzaW5jZSBhdCB0aGUgbWFjaGluZQorICAgIC8vIGxldmVsLCBhZGRyZXNzIGV4cHJlc3Np
b25zIGFyZSBzdXBlciBjaGVhcC4gSG93ZXZlciwgdGhpcyBkb2VzIGhhdmUgYSBoYWNrIHRvIGF2
b2lkCisgICAgLy8gInVuaG9pc3RpbmciIGFkZHJlc3MgZXhwcmVzc2lvbnMuCisgICAgY2xhc3Mg
QWRkcmVzc1NlbGVjdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFkZHJlc3NTZWxlY3RvcihM
b3dlclRvQWlyJiBsb3dlcikKKyAgICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBtYXRjaCBhbiBhZGRyZXNzIGV4
cHJlc3Npb24gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkCisgICAgICAgICAgICAvLyBl
eHBsaWNpdGx5LgorICAgICAgICAgICAgcmV0dXJuICFsb3dlci52YWx1ZVRvVG1wW3Jvb3RdOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290TGF0ZShWYWx1ZSopIHsgfQorCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2Nl
cHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobG93ZXIudmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhh
cmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisK
KyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFj
Y2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJh
bmRzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5k
cygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9
CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDEoVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2Nh
bGUsIFZhbHVlKiBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG9nU2NhbGUtPmFz
SW50KCkgPCAwIHx8IGxvZ1NjYWxlLT5hc0ludCgpID4gMykKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KAorICAg
ICAgICAgICAgICAgIGxvd2VyLnRtcChiYXNlKSwgbG93ZXIudG1wKGluZGV4KSwgMSA8PCBsb2dT
Y2FsZS0+YXNJbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQyKFZhbHVlKiBiYXNlLCBWYWx1ZSogaW5kZXgsIFZhbHVl
KiBsb2dTY2FsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRyeUFkZFNoaWZ0MShp
bmRleCwgbG9nU2NhbGUsIGJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGQo
VmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJp
Z2h0LT5oYXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9kdWN0aW9uIGlz
bid0IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5jZSB3ZSBleHBlY3QKKyAgICAgICAgICAgICAgICAv
LyBMb2FkKEFkZChAeCwgQGNvbnN0MSksIG9mZnNldCA9IGNvbnN0MikgdG8gaGF2ZSBhbHJlYWR5
IGJlZW4gc3RyZW5ndGgtcmVkdWNlZAorICAgICAgICAgICAgICAgIC8vIHRvIExvYWQoQHgsIG9m
ZnNldCA9IGNvbnN0MSArIGNvbnN0MikuCisgICAgICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNz
ID0gQXJnOjphZGRyKGxvd2VyLnRtcChsZWZ0KSwgcmlnaHQtPmFzSW50MzIoKSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbGVj
dGVkQWRkcmVzcyA9IEFyZzo6aW5kZXgobG93ZXIudG1wKGxlZnQpLCBsb3dlci50bXAocmlnaHQp
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0
cnlEaXJlY3QoKQorICAgICAgICB7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6
OmFkZHIobG93ZXIudG1wKGxvd2VyLmN1cnJlbnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxvd2VyOwor
ICAgICAgICBBcmcgc2VsZWN0ZWRBZGRyZXNzOworICAgIH07CisgICAgQWRkcmVzc1NlbGVjdG9y
IGFkZHJlc3NTZWxlY3RvcjsKKworICAgIC8vIEJlbG93IGlzIHRoZSBjb2RlIGZvciBhIGxvd2Vy
aW5nIHNlbGVjdG9yLCBzbyB0aGF0IHdlIGNhbiBwYXNzICp0aGlzIHRvIHJ1bkxvd2VyaW5nTWF0
Y2hlci4KKyAgICAvLyBUaGlzIHdpbGwgbWF0Y2ggY29tcGxleCBtdWx0aS12YWx1ZSBleHByZXNz
aW9ucywgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm8gc2hhcmluZy4gRm9yIGV4YW1wbGUsCisgICAg
Ly8gaXQgd29uJ3QgbWF0Y2ggYSBMb2FkIHR3aWNlIGFuZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNv
ZGUgdG8gZG8gdHdvIGxvYWRzIHdoZW4gdGhlIG9yaWdpbmFsCisgICAgLy8gY29kZSBqdXN0IGRp
ZCBvbmUuCisgICAgCisgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAgIHsKKyAg
ICAgICAgQVNTRVJUX1VOVVNFRChyb290LCAhbG9ja2VkLmNvbnRhaW5zKHJvb3QpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQgYWNjZXB0Um9vdExhdGUoVmFs
dWUqKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
Ym9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQorICAgIHsKKyAgICAgICAgLy8gSWYgb25lIG9mIHRoZSBpbnRlcm5hbCB0aGluZ3MgaGFzIGFs
cmVhZHkgYmVlbiBjb21wdXRlZCwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCisgICAgICAg
IC8vIGl0IHRvIGJlIHJlY29tcHV0ZWQgYWdhaW4uCisgICAgICAgIGlmICh2YWx1ZVRvVG1wW3Zh
bHVlXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdl
IHJlcXVpcmUgaW50ZXJuYWxzIHRvIGhhdmUgb25seSBvbmUgdXNlIC0gdXMuCisgICAgICAgIGlm
ICh1c2VDb3VudHNbdmFsdWVdICE9IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAg
fQorICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAg
IHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFjY2VwdEludGVybmFs
c0xhdGUoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAg
ICAgbG9ja2VkLmFkZCh2YWx1ZSk7CisgICAgICAgIGFjY2VwdEludGVybmFsc0xhdGUoYXJndW1l
bnRzLi4uKTsKKyAgICB9CisgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKCkgeyB9CisgICAg
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGJvb2wgYWNjZXB0T3Bl
cmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAg
ICAgaWYgKGxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgIH0KKyAg
ICBib29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShB
cmd1bWVudHMuLi4pIHsgfQorICAgIAorICAgIGJvb2wgdHJ5TG9hZChWYWx1ZSogYWRkcmVzcykK
KyAgICB7CisgICAgICAgIHN3aXRjaCAoY3VycmVudFZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIGFkZHIoYWRkcmVzcyksIHRt
cChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IEludDY0OgorICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSkgeworICAgICAgICAgICAgICAgIGFw
cGVuZChNb3ZlLCBhZGRyKGFkZHJlc3MpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUs
IGFkZHIoYWRkcmVzcyksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICBjYXNl
IEludDMyOgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIHRyeVN0b3JlQWRk
TG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCisgICAgeworICAgICAgICBz
d2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAg
cmV0dXJuIHRyeUFwcGVuZFN0b3JlQmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdo
dCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1v
cmUgdHlwZXMhCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgYm9vbCB0cnlTdG9yZUFuZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwg
VmFsdWUqKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRTdG9yZUJpbk9wPEFuZDMy
LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5U3RvcmUoVmFsdWUqIHZh
bHVlLCBWYWx1ZSopCisgICAgeworICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIHRtcCh2YWx1ZSks
IGFkZHIoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
Y2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIGlmIChpczY0Qml0KCkpIHsKKyAgICAgICAgICAgICAg
ICBhcHBlbmQoTW92ZSwgdG1wKHZhbHVlKSwgYWRkcihjdXJyZW50VmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJs
ZSwgdG1wKHZhbHVlKSwgYWRkcihjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5Q29uc3QzMigpCisgICAgeworICAgICAgICBh
cHBlbmQoTW92ZSwgaW1tKGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5UmV0dXJuKFZhbHVlKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkgeworICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmUs
IGltbU9yVG1wKHZhbHVlKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICBhcHBlbmQoTW92
ZURvdWJsZSwgdG1wKHZhbHVlKSwgVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgYXBwZW5kKFJldCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICBQcm9jZWR1cmUmIHByb2NlZHVyZTsKKyAgICBDb2RlJiBjb2RlOworfTsKKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVy
ZSwgQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvY2VkdXJlLCAi
bG93ZXJUb0FpciIpOworICAgIExvd2VyVG9BaXIgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUp
OworICAgIGxvd2VyVG9BaXIucnVuKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNMb3dlclRv
QWlyX2gKKyNkZWZpbmUgQjNMb3dlclRvQWlyX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CituYW1lc3Bh
Y2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGxvd2VycyB0aGUgY3VycmVudCBCMyBw
cm9jZWR1cmUgdG8gYW4gQWlyIGNvZGUuCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmLCBB
aXI6OkNvZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNMb3dlclRvQWlyX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5w
YXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisjIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5nTWF0Y2hlcgorCisjIFRoZXNl
IHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcgYXQgdGhlIHRvcC4g
SXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50cyB3aGVyZXZlciBwb3Nz
aWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1hdGNoZXIgaXMgYW4g
ZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCisKK0xvYWQgPSBMb2FkKGFk
ZHJlc3MpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkID0gU3RvcmUo
QWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0b3JlKEFkZChsZWZ0
LCByaWdodCksIGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZhbHVlLCBhZGRyZXNzKQorCitDb25z
dDMyID0gQ29uc3QzMigpCisKK1JldHVybiA9IFJldHVybih2YWx1ZSkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
TWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCit7Cit9CisKK3ZvaWQgTWVtb3J5VmFsdWU6OmR1
bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0KQorICAg
ICAgICBvdXQucHJpbnQoIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzTWVtb3J5VmFsdWVfaAorI2RlZmluZSBCM01lbW9yeVZhbHVlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCisvLyBGSVhNRTogQWRkIGFsaWFzIGFuYWx5c2lzIHRvIHRoZXNlIGJ5
IGFsbG93aW5nIHRoZSBjbGllbnQgdG8gYXNzb2NpYXRlIGFuIGludGVnZXIgcmFuZ2UgdG8gdGhl
CisvLyB2YWx1ZS4gVHdvIG9wZXJhdGlvbnMgbWF5IGFjY2VzcyB0aGUgc2FtZSBtZW1vcnkgaWYg
dGhlaXIgcmFuZ2VzIG92ZXJsYXBzLgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDUzNQorCitjbGFzcyBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNh
c2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoK
KyAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2Fz
ZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0
OgorICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB+TWVtb3J5VmFsdWUoKTsKKworICAgIGludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1
cm4gbV9vZmZzZXQ7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExv
YWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8v
IGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAg
IHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAg
ICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNh
c2UgTG9hZDE2UzoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlQodHlwZSA9PSBEb3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAg
ICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAg
ICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZv
cm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9y
eVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBv
cGNvZGUsIG9wY29kZSA9PSBMb2FkRmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2lu
dGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNT
RVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAg
ICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNh
c2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2Ug
TG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlz
IGZvcm0gZm9yIHN0b3Jlcy4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBv
aW50ZXIsCisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zm
c2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAg
ICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAg
ICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAg
ICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlu
dDMyX3QgbV9vZmZzZXQgeyAwIH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIyNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkg
eworICAgIGNhc2UgTm9wOgorICAgICAgICBvdXQucHJpbnQoIk5vcCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBJZGVudGl0eToKKyAgICAgICAgb3V0LnByaW50KCJJZGVudGl0eSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdDMyOgorICAgICAgICBvdXQucHJpbnQoIkNv
bnN0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAgICAgb3V0
LnByaW50KCJDb25zdDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0RG91Ymxl
OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0RG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFja1Nsb3QiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAgICAgIG91dC5wcmludCgiQXJn
dW1lbnRSZWciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAg
ICAgICBvdXQucHJpbnQoIkZyYW1lUG9pbnRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBZGQ6CisgICAgICAgIG91dC5wcmludCgiQWRkIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFN1YjoKKyAgICAgICAgb3V0LnByaW50KCJTdWIiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgTXVsOgorICAgICAgICBvdXQucHJpbnQoIk11bCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBEaXY6CisgICAgICAgIG91dC5wcmludCgiRGl2Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICBvdXQucHJpbnQoIkNoaWxsRGl2Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE1vZDoKKyAgICAgICAgb3V0LnByaW50KCJNb2QiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0QW5kOgorICAgICAgICBvdXQucHJpbnQoIkJpdEFu
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgb3V0LnByaW50
KCJCaXRPciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIG91
dC5wcmludCgiQml0WG9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNobDoKKyAgICAg
ICAgb3V0LnByaW50KCJTaGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1NocjoKKyAg
ICAgICAgb3V0LnByaW50KCJTU2hyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpTaHI6
CisgICAgICAgIG91dC5wcmludCgiWlNociIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
RXh0ODoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0OCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTRXh0MTY6CisgICAgICAgIG91dC5wcmludCgiU0V4dDE2Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0MzIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgWkV4dDMyOgorICAgICAgICBvdXQucHJpbnQoIlpFeHQzMiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGUm91bmQ6CisgICAgICAgIG91dC5wcmludCgi
RlJvdW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIG91dC5w
cmludCgiSVRvRCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEVG9JMzI6CisgICAgICAg
IG91dC5wcmludCgiRFRvSTMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWFsOgor
ICAgICAgICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5v
dEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkdy
ZWF0ZXJUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAg
ICAgb3V0LnByaW50KCJMZXNzRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3Jl
YXRlckVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJFcXVhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBYm92ZToKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZSIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICBvdXQucHJp
bnQoIkFib3ZlRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3dFcXVhbDoK
KyAgICAgICAgb3V0LnByaW50KCJCZWxvd0VxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIExvYWQ4WjoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkOFoiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4UyIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNloi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgb3V0LnByaW50
KCJMb2FkMTZTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAg
ICAgb3V0LnByaW50KCJMb2FkRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9h
ZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFN0b3JlODoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTgiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTE2Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiU3RvcmVG
bG9hdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgb3V0LnBy
aW50KCJTdG9yZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDQ2FsbDoKKyAgICAgICAg
b3V0LnByaW50KCJDQ2FsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQYXRjaHBvaW50
OgorICAgICAgICBvdXQucHJpbnQoIlBhdGNocG9pbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tBZGQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tTdWIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIG91dC5wcmlu
dCgiQ2hlY2tNdWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAg
IG91dC5wcmludCgiQ2hlY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVXBzaWxvbjoK
KyAgICAgICAgb3V0LnByaW50KCJVcHNpbG9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFBoaToKKyAgICAgICAgb3V0LnByaW50KCJQaGkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSnVtcDoKKyAgICAgICAgb3V0LnByaW50KCJKdW1wIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEJyYW5jaDoKKyAgICAgICAgb3V0LnByaW50KCJCcmFuY2giKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU3dpdGNoOgorICAgICAgICBvdXQucHJpbnQoIlN3aXRjaCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBSZXR1cm46CisgICAgICAgIG91dC5wcmludCgiUmV0dXJu
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE9vcHM6CisgICAgICAgIG91dC5wcmludCgi
T29wcyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIE9wY29kZSA6IGludDE2X3QgeworICAgIC8vIEEg
bm8tb3AgdGhhdCByZXR1cm5zIFZvaWQsIHVzZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0byByZW1v
dmUgYSB2YWx1ZS4KKyAgICBOb3AsCisgICAgCisgICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHks
IHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIElkZW50aXR5LAorCisgICAgLy8gQ29u
c3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUqIGNsYXNzZXMuIENvbnN0YW50cyBleGlzdCBpbiB0
aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdlIGNhbgorICAgIC8vIHJlYXNvbiBhYm91dCB3aGVy
ZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29uc3RhbnRzIGFyZSBleHBlbnNpdmUg
dG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisgICAgQ29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwK
KworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1
dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVy
ZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xv
dCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAgICAvLyBzdGFjayBtZW1vcnkuIFVz
ZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgU3RhY2tTbG90LAorCisgICAgLy8gVGhl
IG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBh
dCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBj
b250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5kIHRoZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVu
c3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3QgY2xvYmJlciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIg
YWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVyIGJ5IHNhdmluZyB0aGUgYXJndW1lbnQgdG8gdGhl
CisgICAgLy8gc3RhY2sgb3IgcHJlc2VydmluZyBpdCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVy
KS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBUaGUgcmV0dXJuCisgICAgLy8gdHlw
ZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3IgR1BScykgb3IgRG91YmxlIChmb3IgRlBScykuCisg
ICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBUaGUgZnJhbWUgcG9pbnRlci4gWW91IGNhbiBwdXQg
dGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRo
ZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdpdGggYSBjYXZlYXQ6IGlmIG91ciBjb21waWxlciBj
aGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5IGZvciBzb21lCisgICAgLy8gc2ls
bHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVyIGludHJpbnNpYyB3aWxsIHJldHVybiB3aGVyZSB0
aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBiZSBub3QKKyAgICAvLyB3aGVyZSBpdCBoYXBwZW5z
IHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhp
YyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBBZGQsCisgICAgU3ViLAor
ICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAvLyBJbnRlZ2VyIG1hdGguCisgICAgQ2hpbGxEaXYs
IC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhhdmVzIGxpa2UgSlMgKHgveSl8MC4KKyAgICBNb2Qs
CisgICAgQml0QW5kLAorICAgIEJpdE9yLAorICAgIEJpdFhvciwKKyAgICBTaGwsCisgICAgU1No
ciwKKyAgICBaU2hyLAorCisgICAgLy8gQ2FzdHMgYW5kIHN1Y2guCisgICAgLy8gVGFrZXMgYW5k
IHJldHVybnMgSW50MzI6CisgICAgU0V4dDgsCisgICAgU0V4dDE2LAorICAgIC8vIFRha2VzIElu
dDMyIGFuZCByZXR1cm5zIEludDY0OgorICAgIFNFeHQzMiwKKyAgICBaRXh0MzIsCisgICAgLy8g
VGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZSb3VuZCwKKyAgICAvLyBUYWtlcyBpbnRz
IGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAorICAgIC8vIFRha2VzIERvdWJsZSBhbmQg
cmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBjb21wYXJp
c29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIFJldHVybnMgaW50MzIgMCBvciAxLiBO
b3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVxdWFsKHgsIDApLgorICAgIEVxdWFsLAor
ICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAgIEdyZWF0ZXJUaGFuLAorICAgIExlc3NF
cXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAvLyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBS
ZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwKKyAgICBCZWxvdywKKyAgICBBYm92ZUVx
dWFsLAorICAgIEJlbG93RXF1YWwsCisKKyAgICAvLyBNZW1vcnkgbG9hZHMuIE9wY29kZSBpbmRp
Y2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBsb2FkZWQgdHlwZS4gVGhlc2UgdXNlIE1lbW9yeVZh
bHVlLgorICAgIC8vIFRoZXNlIHJldHVybiBJbnQzMjoKKyAgICBMb2FkOFosCisgICAgTG9hZDhT
LAorICAgIExvYWQxNlosCisgICAgTG9hZDE2UywKKyAgICAvLyBUaGlzIHJldHVybnMgRG91Ymxl
OgorICAgIExvYWRGbG9hdCwKKyAgICAvLyBUaGlzIHJldHVybiB3aGF0ZXZlciB0aGUgcmV0dXJu
IHR5cGUgaXM6CisgICAgTG9hZCwKKworICAgIC8vIE1lbW9yeSBzdG9yZXMuIE9wY29kZSBpbmRp
Y2F0ZXMgaG93IHRoZSB2YWx1ZSBpcyBzdG9yZWQuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAg
ICAvLyBUaGVzZSB0YWtlIGFuIEludDMyIHZhbHVlOgorICAgIFN0b3JlOCwKKyAgICBTdG9yZTE2
LAorICAgIC8vIFRoaXMgdGFrZXMgYSBEb3VibGUgdmFsdWU6CisgICAgU3RvcmVGbG9hdCwKKyAg
ICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgYW5kIERv
dWJsZToKKyAgICBTdG9yZSwKKworICAgIC8vIFRoaXMgaXMgYSByZWd1bGFyIG9yZGluYXJ5IEMg
ZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5c3RlbSBDIGNhbGxpbmcgY29udmVudGlvbi4gTWFr
ZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdXNpbmcgdGhlIHJp
Z2h0IHR5cGVzLgorICAgIENDYWxsLAorCisgICAgLy8gVGhpcyBpcyBhIHBhdGNocG9pbnQuIFVz
ZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNzLiBUaGlzIGlzIHZpZXdlZCBhcyBiZWhhdmluZyBs
aWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25seSBlbWl0cyBjb2RlIHZpYSBhIGNvZGUgZ2VuZXJh
dGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgY29kZSBpbmxpbmUuCisg
ICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2ttYXAgYWxvbmcgd2l0aCBjb25zdHJhaW50cyBvbiBo
b3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBtdXN0IGJlIHBhc3NlZC4KKyAgICAvLyBJdCdzIGxl
Z2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGluIHNvbWUgcmVnaXN0
ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVzdAorICAgIC8vIHRoYXQgYSBzdGFja21hcCBhcmd1
bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9tIHRoZSB0b3Agb2YgdGhlIGFyZ3VtZW50IHBhc3Np
bmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFjay4KKyAgICBQYXRjaHBvaW50LAorCisgICAgLy8g
Q2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2UgYSBQYXRjaHBvaW50
LCB0aGlzIHRha2VzIGEgY29kZSBnZW5lcmF0aW9uCisgICAgLy8gY2FsbGJhY2suIFRoYXQgY2Fs
bGJhY2sgZ2V0cyB0byBlbWl0IHNvbWUgY29kZSBhZnRlciB0aGUgZXBpbG9ndWUsIGFuZCBnZXRz
IHRvIGxpbmsgdGhlIGp1bXAKKyAgICAvLyBmcm9tIHRoZSBjaGVjaywgYW5kIHRoZSBjaG9pY2Ug
b2YgcmVnaXN0ZXJzLiBZb3UgYWxzbyBnZXQgdG8gc3VwcGx5IGEgc3RhY2ttYXAuIE5vdGUgdGhh
dCB5b3UKKyAgICAvLyBhcmUgbm90IGFsbG93ZWQgdG8ganVtcCBiYWNrIGludG8gdGhlIG1haW5s
aW5lIGNvZGUgZnJvbSB5b3VyIHNsb3cgcGF0aCwgc2luY2UgdGhlIGNvbXBpbGVyCisgICAgLy8g
d2lsbCBhc3N1bWUgdGhhdCB0aGUgZXhlY3V0aW9uIG9mIHRoZXNlIGluc3RydWN0aW9ucyBwcm92
ZXMgdGhhdCBvdmVyZmxvdyBkaWRuJ3QgaGFwcGVuLiBGb3IKKyAgICAvLyBleGFtcGxlLCBpZiB5
b3UgaGF2ZSB0d28gQ2hlY2tBZGQnczoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5
KQorICAgIC8vIGIgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vCisgICAgLy8gVGhlbiBpdCdzIHZh
bGlkIHRvIGNoYW5nZSB0aGlzIHRvOgorICAgIC8vCisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkp
CisgICAgLy8gYiA9IElkZW50aXR5KGEpCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHZhbGlkIHJl
Z2FyZGxlc3Mgb2YgdGhlIGNhbGxiYWNrcyB1c2VkIGJ5IHRoZSB0d28gQ2hlY2tBZGRzLiBUaGV5
IG1heSBoYXZlIGRpZmZlcmVudAorICAgIC8vIGNhbGxiYWNrcy4gWWV0LCB0aGlzIHRyYW5zZm9y
bWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhleSBhcmUgZGlmZmVyZW50IGJlY2F1c2Ugd2Uga25v
dyB0aGF0CisgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IENoZWNrQWRkIGV4ZWN1dGVzLCB0aGUgc2Vj
b25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZlIHBvc3NpYmx5IHRha2VuIHNsb3cKKyAgICAvLyBw
YXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQgQ2hlY2tBZGQncyBjYWxsYmFjayBpcyBpcnJlbGV2
YW50LgorICAgIENoZWNrQWRkLAorICAgIENoZWNrU3ViLAorICAgIENoZWNrTXVsLAorCisgICAg
Ly8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2Ug
Q2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMgaGFzIGEKKyAgICAvLyBzdGFja21hcCB3aXRoIGEg
Z2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0YWtlcyBhbiBJbnQzMiBhcmd1bWVudCB0aGF0IHRo
aXMgYnJhbmNoZXMgb24sIHdpdGgKKyAgICAvLyBmdWxsIGJyYW5jaCBmdXNpb24gaW4gdGhlIGlu
c3RydWN0aW9uIHNlbGVjdG9yLiBBIHRydWUgdmFsdWUganVtcHMgdG8gdGhlIGdlbmVyYXRvcidz
IHNsb3cKKyAgICAvLyBwYXRoLgorICAgIENoZWNrLAorCisgICAgLy8gU1NBIHN1cHBvcnQsIGlu
IHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAgIFVwc2lsb24sIC8vIFRoaXMgdXNlcyB0aGUgVXBz
aWxvblZhbHVlIGNsYXNzLgorICAgIFBoaSwKKworICAgIC8vIEp1bXAuIFVzZXMgdGhlIENvbnRy
b2xWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAorICAgIAorICAgIC8vIFBvbHltb3JwaGljIGJyYW5j
aCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6
ZXJvLiBVc2VzIHRoZQorICAgIC8vIENvbnRyb2xWYWx1ZSBjbGFzcywgd2l0aCB0aGUgMC1pbmRl
eCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUgc3VjY2Vzc29yLgorICAgIEJyYW5jaCwKKworICAg
IC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBlaXRoZXIgSW50MzIgb3IgSW50NjQuIFVzZXMgdGhl
IFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3aXRjaCwKKworICAgIC8vIFJldHVybi4gTm90ZSB0
aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0aGVpciByZXR1cm4gdHlwZSwgc28gdGhpcyBj
YW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlwZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNs
YXNzLgorICAgIFJldHVybiwKKworICAgIC8vIFRoaXMgaXMgYSB0ZXJtaW5hbCB0aGF0IGluZGlj
YXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBj
bGFzcy4KKyAgICBPb3BzCit9OworCitpbmxpbmUgYm9vbCBpc0NoZWNrTWF0aChPcGNvZGUgb3Bj
b2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBj
YXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM09y
aWdpbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3UG9pbnRlcihtX2RhdGEpLCAiKSIpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIzSVIgY2FuIGNob29zZSB0byBwdXQgb3Jp
Z2lucyBvbiB2YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMsIEIzIHdpbGwgYmUgYWJsZSB0bworLy8g
YWNjb3VudCwgZG93biB0byB0aGUgbWFjaGluZSBjb2RlLCB3aGljaCBpbnN0cnVjdGlvbiBjb3Jy
ZXNwb25kcyB0byB3aGljaCBvcmlnaW4uIEIzCisvLyB0cmFuc2Zvcm1hdGlvbnMgbXVzdCBwcmVz
ZXJ2ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQncyBhbiBlcnJvciB0byB3cml0ZSBhIHRyYW5zZm9y
bWF0aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9wcyBPcmlnaW5zIG9yIGxpZXMgYWJvdXQgdGhlbS4K
K2NsYXNzIE9yaWdpbiB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgT3JpZ2luKGNvbnN0IHZvaWQq
IGRhdGEgPSBudWxscHRyKQorICAgICAgICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisK
KyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3Qg
dm9pZCogbV9kYXRhOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1BhdGNocG9pbnRTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKwor
UGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKCkKK3sKK30KKworUGF0Y2hwb2lu
dFNwZWNpYWw6On5QYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNw
ZWNpYWw6OmZvckVhY2hBcmcoCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPElu
c3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+
dHlwZSgpID09IFZvaWQpIHsKKyAgICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgY2Fs
bGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2soaW5zdC5hcmdz
WzFdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5cGUoKSk7CisgICAgZm9yRWFjaEFyZ0lt
cGwoMCwgMiwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29sIFBhdGNocG9pbnRTcGVjaWFsOjpp
c1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9p
ZCkKKyAgICAgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDEsIGluc3QpOworCisgICAgaWYgKGlu
c3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGluc3Qu
YXJnc1sxXS5raW5kKCkgIT0gQXJnOjpUbXApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoIWluc3QuYXJnc1sxXS5pc1R5cGUoaW5zdC5vcmlnaW4tPmFpclR5cGUoKSkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAyLCBpbnN0KTsKK30K
KworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWdu
ZWQgYXJnSW5kZXgpCit7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAg
ICAgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAxLCBpbnN0LCBhcmdJbmRleCk7CisKKyAg
ICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IGFkbWl0c1N0YWNrSW1wbCgwLCAyLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVy
czo6SnVtcCBQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJhdGUoCisgICAgSW5zdCYgaW5zdCwgQ0Nh
bGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KQoreworICAgIFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5z
dGFja21hcCgpOworICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+
IHJlcHM7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5
cGUoKSAhPSBWb2lkKQorICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29k
ZSwgaW5zdC5hcmdzW29mZnNldCsrXSkpOworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG9m
ZnNldCwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgU3RhY2ttYXA6OkdlbmVyYXRpb25QYXJhbXMg
cGFyYW1zOworICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVlOworICAgIHBhcmFtcy5zdGFja21hcCA9
IHN0YWNrbWFwOworICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICBwYXJhbXMudXNlZFJlZ2lz
dGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICBzdGFja21hcC0+bV9nZW5l
cmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1w
KCk7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJQYXRjaHBvaW50Iik7Cit9CisKK3ZvaWQgUGF0
Y2hwb2ludFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiTG93ZXJlZCBCMzo6UGF0Y2hwb2ludFZhbHVlLiIpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKyNk
ZWZpbmUgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKKy8vIFRoaXMgaXMgYSBzcGVjaWFsIHRoYXQgcmVjb2duaXplcyB0aGF0IHRoZXJlIGFy
ZSB0d28gdXNlcyBvZiBQYXRjaHBvaW50OiBWb2lkIGFuZCBhbmQgbm9uLVZvaWQuCisvLyBJbiB0
aGUgVm9pZCBjYXNlLCB0aGUgc3ludGF4IG9mIHRoZSBBaXIgUGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6
CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCBhcmdzLi4uCisvLworLy8gV2hlcmUgImFy
Z3MuLi4iIGFyZSB0aGUgbG93ZXJlZCBhcmd1bWVudHMgdG8gdGhlIFBhdGNocG9pbnQgaW5zdHJ1
Y3Rpb24uIEluIHRoZSBub24tVm9pZCBjYXNlCisvLyB3ZSB3aWxsIGhhdmU6CisvLworLy8gICAg
IFBhdGNoICZwYXRjaHBvaW50LCByZXN1bHQsIGFyZ3MuLi4KKworY2xhc3MgUGF0Y2hwb2ludFNw
ZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBQYXRjaHBvaW50
U3BlY2lhbCgpOworICAgIHZpcnR1YWwgflBhdGNocG9pbnRTcGVjaWFsKCk7CisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFp
cjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChB
aXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVu
c2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBt
ZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBh
IExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6
eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIEND
YWxsSGVscGVycyYsIEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZv
aWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBE
dW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQ
YXRjaHBvaW50U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bh
dGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFs
dWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9pbnRWYWx1ZV9oCisj
ZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2ludFZhbHVlIDogcHVibGljIFZhbHVl
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0
dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+UGF0Y2hwb2ludFZhbHVlKCk7CisK
KyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4sIGNoaWxkcmVuKQor
ICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRl
ICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKyNpbmNsdWRlIDx3dGYv
RGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29wZShQcm9jZWR1
cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1fcHJvY2VkdXJlKHByb2Nl
ZHVyZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGREdW1wSVJBdEVhY2hQ
aGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyICIsIHByb2NlZHVyZS5sYXN0UGhh
c2VOYW1lKCksICIsIGJlZm9yZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJv
Y2VkdXJlKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAg
ICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3RyaW5nKHByb2NlZHVyZSk7Cit9CisKK1BoYXNlU2Nv
cGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBtX3Byb2NlZHVyZS5zZXRMYXN0UGhhc2VOYW1lKG1f
bmFtZSk7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2
YWxpZGF0ZShtX3Byb2NlZHVyZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzUGhhc2VTY29wZV9oCisjZGVmaW5lIEIzUGhhc2VTY29wZV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgUHJvY2VkdXJlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKFByb2NlZHVyZSYsIGNv
bnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0
aW9uCisKK3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBj
aGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1BoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNC
YXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCisgICAgOiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwi
KQoreworfQorCitQcm9jZWR1cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQ
cm9jZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVf
cHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJl
cXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9i
bG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9y
IChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAo
YmxvY2spKTsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUHJl
T3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0OworICAgIEJsb2NrV29y
a2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChhdCgwKSk7CisgICAgd2hpbGUgKEJh
c2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVu
ZChibG9jayk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3Jz
KCk7IGktLTspCisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrLT5zdWNjZXNzb3JCbG9j
ayhpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gUHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcigpCit7CisgICAgVmVjdG9yPEJhc2ljQmxv
Y2sqPiByZXN1bHQ7CisgICAgUG9zdE9yZGVyQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3
b3JrbGlzdC5wdXNoKGF0KDApKTsKKyAgICB3aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdv
cmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBj
YXNlIFZpc2l0T3JkZXI6OlByZToKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2hQb3N0KGl0ZW0u
bm9kZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVtLm5vZGUtPm51bVN1Y2Nl
c3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGl0ZW0ubm9kZS0+
c3VjY2Vzc29yQmxvY2soaSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmlz
aXRPcmRlcjo6UG9zdDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS5ub2RlKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSA8d3Rm
L0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNC
bG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9jZWR1cmUoKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSB+UHJvY2VkdXJlKCk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2Nr
KiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisgICAgCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBl
KiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBv
cGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKwor
ICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAg
ICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgw
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBQcm9jZWR1
cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJl
KCZwcm9jZWR1cmUpCisgICAgICAgICAgICAsIG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAg
ICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJlLT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5h
dChpbmRleCkpCisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBp
bmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFByb2NlZHVyZSogbV9wcm9jZWR1cmU7
CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIFZlY3Rv
cjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRlcigpOworICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsKKworICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24gewor
ICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29sbGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHBy
b2NlZHVyZSkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51
bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9j
ZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3IqKCkgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPm1fdmFsdWVz
W21faW5kZXhdLmdldCgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOwor
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisg
ICAgICAgICAgICBjb25zdCBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICAgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUu
bV92YWx1ZXMuc2l6ZSgpKTsgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF0u
Z2V0KCk7IH0KKyAgICAgICAgVmFsdWUqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBj
b25zdCBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0
aW9uIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIFZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisK
KyAgICAvLyBUaGUgbmFtZSBoYXMgdG8gYmUgYSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9u
J3QgZG8gYW55IG1lbW9yeSBtYW5hZ2VtZW50IGZvciB0aGUgc3RyaW5nLgorICAgIHZvaWQgc2V0
TGFzdFBoYXNlTmFtZShjb25zdCBjaGFyKiBuYW1lKQorICAgIHsKKyAgICAgICAgbV9sYXN0UGhh
c2VOYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9sYXN0UGhhc2VOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxWYWx1ZT4+IG1fdmFsdWVzOworICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNl
TmFtZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1
cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxv
Y2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
Cit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZSht
X3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0g
dmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJlSW5saW5lc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNT
dGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpC
MzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0YWNrU2xvdEtpbmQg
a2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6Okxv
Y2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICBvdXQucHJpbnQoIkFub255
bW91cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5k
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCisjZGVm
aW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhf
dCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50
IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVuZCB0byBlc2NhcGUKKyAgICAvLyBpdCBl
dmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUg
dGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjaworICAgIC8vIHNsb3QuCisgICAgTG9ja2VkLAor
CisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgY291bGQgc2hhcmUgc3BhY2Ugd2l0aCBvdGhlciBz
dGFjayBzbG90cywgcHJvdmlkZWQgdGhhdCB0aGV5IGFyZW4ndCBsaXZlCisgICAgLy8gYXQgdGhl
IHNhbWUgdGltZS4gVGhlIGNvbXBpbGVyIHN0aWxsIGhhcyB0byBkbyBlc2NhcGUgYW5hbHlzaXMs
IHNpbmNlIHRoZXNlIGNhbiBiZSBlc2NhcGVkCisgICAgLy8gZXhwbGljaXRseSBpbiBJUi4KKyAg
ICBBbm9ueW1vdXMKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFs
dWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVl
KCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwg
a2luZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3Rh
Y2tTbG90VmFsdWVfaAorI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVlX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsK
K2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RW
YWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3Rh
Y2tTbG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4g
bV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1f
a2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGls
YXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAg
IC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBj
b25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMg
aXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lk
IHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0
RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBBaXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3Rh
Y2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVT
aXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFN0YWNrU2xv
dCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUp
CisgICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAoMCkKKyAg
ICB7CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICBTdGFja1Nsb3RLaW5k
IG1fa2luZDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
U3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzU3RhY2ttYXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYv
TGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3Rh
Y2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisg
ICAgICAgICJ7b3BhcXVlID0gIiwgUmF3UG9pbnRlcihtX29wYXF1ZSksICIsIHJlcHMgPSAiLCBs
aXN0RHVtcChtX3JlcHMpLAorICAgICAgICAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1f
Z2VuZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsCisgICAgICAg
ICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNrbWFwX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJz
LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ2hlY2tTcGVjaWFs
OworY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFN0YWNrbWFw
IHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7CisgICAgICAgIC8vIFRo
aXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAgICAgICBWYWx1ZSog
dmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFN0YWNr
bWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgYWN0dWFsIHZh
bHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgorICAgICAgICBWZWN0b3I8VmFs
dWVSZXA+IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIHJlZ2lzdGVycyB0
aGF0IHdlcmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB9
OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMm
LCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPEdlbmVy
YXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3RhY2ttYXAoKQorICAgIHsKKyAg
ICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFxdWUgZGF0YSB0byBpZGVudGlmeSB0aGlzIHN0YWNr
bWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNlIGEgU3RhY2ttYXAtdXNpbmcgVmFsdWUKKyAgICAv
LyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVhY2ggZHVwbGljYXRlIG1heSBlbmQgdXAgaGF2aW5n
IGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0aW9uLiBUaGlzCisgICAgLy8gYWxsb3dzIGFsbCBv
ZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFibGUgdG8gcmVmZXIgYmFjayB0byB3aGF0ZXZlciBo
aWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcworICAgIC8vIHdlIHdlcmUgdXNpbmcgdG8gY3JlYXRl
IHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9wYXF1ZSh2b2lkKiBwYXJhbWV0ZXIpCisgICAgewor
ICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRlcjsKKyAgICB9CisgICAgdm9pZCogb3BhcXVlKCkg
Y29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0KKworICAgIC8vIENvbnZlbmllbmNlIGhlbHBlcnMg
d2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQgb2YgcG9pbnRlcnMuCisgICAgdm9pZCBzZXRPcGFx
dWVJbmRleChzaXplX3QgaW5kZXgpCisgICAgeworICAgICAgICBzZXRPcGFxdWUoYml0d2lzZV9j
YXN0PHZvaWQqPihpbmRleCkpOworICAgIH0KKyAgICBzaXplX3Qgb3BhcXVlSW5kZXgoKSBjb25z
dCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6ZV90PihvcGFxdWUoKSk7IH0KKworICAgIC8vIENv
bnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1c2VzIHRoaXMgU3RhY2ttYXAu
IEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50IHRoYXQKKyAgICAvLyByZXR1cm5zIGEgdmFsdWUsIHRo
ZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgcmVzdWx0IHZhbHVlLiBJbiBhbGwgb3RoZXIgY2FzZXMs
IGluZGV4IHplcm8gcmVmZXJzCisgICAgLy8gdG8gdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoYXQg
VmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVudCBpcyBub3QgY29uc3RyYWluYWJsZS4gRm9yIGV4
YW1wbGUsCisgICAgLy8gaW4gYSBDaGVja0FkZCB2YWx1ZSwgaXQgd291bGQgYmUgYW4gZXJyb3Ig
dG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQgMS4gSW4gYSBDaGVjayB2YWx1ZSwgaXQKKyAgICAv
LyB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kZXggMC4gQnV0LCB3aGVuIHRoZSBn
ZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCwgeW91IGNhbgorICAgIC8vIGRlcGVuZCBvbiB0
aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBiZWluZyBmaWxsZWQgaW4uCisgICAgdm9pZCBjb25z
dHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0IFZhbHVlUmVwJiByZXApCisgICAgeworICAgICAg
ICBpZiAoaW5kZXggKyAxIDwgbV9yZXBzLnNpemUoKSkKKyAgICAgICAgICAgIG1fcmVwcy5ncm93
KGluZGV4ICsgMSk7CisgICAgICAgIG1fcmVwc1tpbmRleF0gPSByZXA7CisgICAgfQorCisgICAg
dm9pZCBjbG9iYmVyKGNvbnN0IFJlZ2lzdGVyU2V0JiBzZXQpCisgICAgeworICAgICAgICBtX2Ns
b2JiZXJlZC5tZXJnZShzZXQpOworICAgIH0KKworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjbG9i
YmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Nsb2JiZXJlZDsgfQorCisgICAgdm9pZCBzZXRHZW5l
cmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5l
cmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9u
PihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENoZWNrU3BlY2lhbDsKKyAgICBmcmll
bmQgY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNzIFN0YWNrbWFwU3Bl
Y2lhbDsKKyAgICAKKyAgICB2b2lkKiBtX29wYXF1ZSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8
VmFsdWVSZXA+IG1fcmVwczsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAg
ICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3Rl
cnM7IC8vIFN0YWNrbWFwcyBjb3VsZCBiZSBmdXJ0aGVyIGR1cGxpY2F0ZWQgYnkgQWlyLCBidXQg
dGhhdCdzIHVubGlrZWx5LCBzbyB3ZSBqdXN0IG1lcmdlIHRoZSB1c2VkIHJlZ2lzdGVycyBzZXRz
IGlmIHRoYXQgd2VyZSB0byBoYXBwZW4uCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVj
aWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworU3RhY2ttYXBTcGVjaWFsOjpTdGFja21hcFNwZWNp
YWwoKQoreworfQorCitTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwoKQoreworfQor
Cit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiBpbnN0LCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBp
bnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsK
KworICAgIC8vIEZJWE1FOiBJZiB0aGUgSW5zdCB0aGF0IHVzZXMgdGhlIFN0YWNrbWFwU3BlY2lh
bCBnZXRzIGR1cGxpY2F0ZWQsIHRoZW4gd2UgZW5kIHVwIG1lcmdpbmcgdXNlZAorICAgIC8vIHJl
Z2lzdGVyIHNldHMgZnJvbSBtdWx0aXBsZSBwbGFjZXMuIFRoaXMgY3VycmVudGx5IHdvbid0IGhh
cHBlbiBzaW5jZSBBaXIgZG9lc24ndCBoYXZlIHRhaWxkdXAKKyAgICAvLyBvciB0aGluZ3MgbGlr
ZSB0aGF0LiBCdXQgbWF5YmUgZXZlbnR1YWxseSBpdCBjb3VsZCBiZSBhIHByb2JsZW0uCisgICAg
c3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVycy5tZXJnZSh1c2VkUmVnaXN0ZXJzKTsKK30KKworY29u
c3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3Qm
IGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAq
IHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICByZXR1cm4gc3RhY2ttYXAtPmNs
b2JiZXJlZCgpOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCisg
ICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3Ms
CisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFj
az4mIGNhbGxiYWNrKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAg
Ly8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VS
VChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFs
dWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChp
bnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuKCku
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAg
ICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRCM0FyZ3NdOworICAgICAgICBW
YWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRBaXJBcmdzKTsKKworICAg
ICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNlLCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5
cGUoKSkpOworICAgIH0KK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzVmFsaWRJbXBsKAor
ICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdz
LAorICAgIEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisK
KyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAg
QVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VS
VCh2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CisKKyAgICBT
dGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIEFTU0VSVChzdGFj
a21hcCk7CisKKyAgICAvLyBGb3IgdGhlIEluc3QgdG8gYmUgdmFsaWQsIGl0IG5lZWRzIHRvIGhh
dmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGluc3QuYXJncy5zaXpl
KCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgLSBudW1J
Z25vcmVkQjNBcmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdhcmRsZXNz
IG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVtZW50cyBm
b3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3QgaGF2ZSBh
IG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRpb25zIGFz
IHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAg
ICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsK
KyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKKyAg
ICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6
VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1tNjQ6Cisg
ICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAg
ICAgICAgICBicmVhazsgLy8gT0sKKyAgICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAg
ICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAg
ICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JC
M1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5cGUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIgb2Yg
Y29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIEIzIGNo
aWxkcmVuLgorICAgIEFTU0VSVChzdGFja21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1ZS0+Y2hp
bGRyZW4oKS5zaXplKCkpOworCisgICAgLy8gVmVyaWZ5IGFueSBleHBsaWNpdGx5IHN1cHBsaWVk
IGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9yZWRCM0FyZ3M7IGkg
PCBzdGFja21hcC0+bV9yZXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZhbHVlUmVwJiByZXAg
PSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpIC0g
bnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsKKworICAgICAgICBzd2l0Y2gg
KHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICAgICAg
Ly8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmICghYXJn
LmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKGFy
ZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgICAg
ICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChhcmcgIT0gQXJnOjpj
YWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50Ogor
ICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4K
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdGFja21hcFNw
ZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1
bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJ
bmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCog
c3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVuc2lnbmVkIHN0YWNrbWFwQXJn
SW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsgbnVtSWdub3JlZEIzQXJnczsK
KworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpKSB7
CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8gY29uc3RyYWludC4KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9ubHkgYWRtaXQgc3Rh
Y2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBpbnB1dCBjb25zdHJhaW50
LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8gYSBDYWxsQXJnIGluIEFp
ci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0luZGV4XS5raW5kKCkgPT0g
VmFsdWVSZXA6OkFueSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgKKyAgICBHZW5lcmF0
aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEluc3QmIGluc3Qs
IFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1J
Z25vcmVkQXJnczsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW2ldKSk7Cit9CisKK1ZhbHVl
UmVwIFN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKENvZGUmIGNvZGUsIGNvbnN0IEFyZyYgYXJn
KQoreworICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpUbXA6CisgICAg
ICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICByZXR1cm4gVmFs
dWVSZXA6OmNvbnN0YW50KGFyZy52YWx1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
cmc6OkFkZHI6CisgICAgICAgIGlmIChhcmcuYmFzZSgpID09IFRtcChHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlcikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZz
ZXQoKSk7CisgICAgICAgIEFTU0VSVChhcmcuYmFzZSgpID09IFRtcChNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhh
cmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKCk7CisgICAgfQor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lh
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwU3BlY2lhbF9oCisj
ZGVmaW5lIEIzU3RhY2ttYXBTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKwor
Ly8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRoYXQgaGF2ZSBzdGFja21hcHMu
IE5vdGUgdGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAgYnkKKy8vIGFza2luZyBmb3IgdGhl
IEluc3QncyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3RzIGRvbid0IG5lZWQgdG8gZXZlbiBo
b2xkIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAuCisKK2NsYXNzIFN0YWNrbWFwU3Bl
Y2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGljOgorICAgIFN0YWNrbWFwU3BlY2lh
bCgpOworICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEFpcjo6SW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikg
b3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhBaXI6
Okluc3QmKSBvdmVycmlkZTsKKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG92ZXJy
aWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4gV2UgaGF2ZSBtYW55
IHNvbWUKKyAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCisKKyAgICB2b2lk
IGZvckVhY2hBcmdJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNp
Z25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVk
TGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOworICAgIGJvb2wgaXNWYWxpZElt
cGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9y
ZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmKTsKKyAgICBib29sIGFkbWl0c1N0YWNrSW1w
bCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3Jl
ZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAg
IC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRoZSBJbnN0J3MgYXJncywgc3RhcnRpbmcgd2l0aCBu
dW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVuIHZlY3Rvci4KKyAgICB2b2lkIGFwcGVuZFJlcHNJ
bXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgQWly
OjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYpOworCisgICAgc3RhdGljIFZhbHVlUmVwIHJlcEZv
ckFyZyhBaXI6OkNvZGUmLCBjb25zdCBBaXI6OkFyZyYpOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFj
a21hcFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNz
b3JDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNTdWNjZXNzb3JDb2xsZWN0
aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCisvLyBUaGlzIGlzIGEgZ2VuZXJpYyB3cmFwcGVyIGFyb3VuZCBsaXN0cyBvZiBmcmVx
dWVudGVkIGJsb2Nrcywgd2hpY2ggZ2l2ZXMgeW91IGp1c3QgdGhlIGJsb2Nrcy4KKwordGVtcGxh
dGU8dHlwZW5hbWUgQmFzaWNCbG9jaywgdHlwZW5hbWUgU3VjY2Vzc29yTGlzdD4KK2NsYXNzIFN1
Y2Nlc3NvckNvbGxlY3Rpb24geworcHVibGljOgorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24oU3Vj
Y2Vzc29yTGlzdCYgbGlzdCkKKyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAgICB7CisgICAgfQor
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisgICAg
QmFzaWNCbG9jayogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaW5kZXhd
LmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBt
X2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQmFzaWNCbG9jayomIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoU3VjY2Vzc29yQ29sbGVjdGlvbiYg
Y29sbGVjdGlvbiwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNv
bGxlY3Rpb24pIC8vIGNvbnN0IGlzIHN0dXBpZCBhbnl3YXkuCisgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqJiBv
cGVyYXRvciooKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0
aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgU3VjY2Vzc29yQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICBzaXplX3QgbV9p
bmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywg
c2l6ZSgpKTsgfQorCitwcml2YXRlOgorICAgIFN1Y2Nlc3Nvckxpc3QmIG1fbGlzdDsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCit2b2lkIFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jYXNlVmFsdWUsICItPiIsIG1fdGFyZ2V0KTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hDYXNlX2gKKyNkZWZpbmUgQjNTd2l0Y2hDYXNlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgor
I2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaENhc2Ug
eworcHVibGljOgorICAgIFN3aXRjaENhc2UoKQorICAgIHsKKyAgICB9CisKKyAgICBTd2l0Y2hD
YXNlKGludDY0X3QgY2FzZVZhbHVlLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRhcmdldCkKKyAg
ICAgICAgOiBtX2Nhc2VWYWx1ZShjYXNlVmFsdWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0
KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy
ZXR1cm4gISFtX3RhcmdldDsgfQorCisgICAgaW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX2Nhc2VWYWx1ZTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayB0YXJnZXQoKSBjb25zdCB7
IHJldHVybiBtX3RhcmdldDsgfQorICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrKCkgY29uc3Qg
eyByZXR1cm4gbV90YXJnZXQuYmxvY2soKTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIGludDY0X3QgbV9jYXNlVmFsdWU7CisgICAg
RnJlcXVlbnRlZEJsb2NrIG1fdGFyZ2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3
aXRjaFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Js
b2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitTd2l0Y2hWYWx1ZTo6flN3aXRjaFZhbHVlKCkKK3sKK30KKworU3dpdGNo
Q2FzZSBTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBGcmVx
dWVudGVkQmxvY2sgcmVzdWx0QmxvY2sgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIGludDY0
X3QgcmVzdWx0VmFsdWUgPSBtX3ZhbHVlc1tpbmRleF07CisgICAgbV9zdWNjZXNzb3JzW2luZGV4
XSA9IG1fc3VjY2Vzc29ycy5sYXN0KCk7CisgICAgbV9zdWNjZXNzb3JzLnJlbW92ZUxhc3QoKTsK
KyAgICBtX3ZhbHVlc1tpbmRleF0gPSBtX3ZhbHVlcy5sYXN0KCk7CisgICAgbV92YWx1ZXMucmVt
b3ZlTGFzdCgpOworICAgIHJldHVybiBTd2l0Y2hDYXNlKHJlc3VsdFZhbHVlLCByZXN1bHRCbG9j
ayk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYg
c3dpdGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0
KCkpOworICAgIG1fc3VjY2Vzc29yc1ttX3N1Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hD
YXNlLnRhcmdldCgpOworICAgIG1fdmFsdWVzLmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgp
KTsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICAvLyBUaGlzIGRlc3RydWN0aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdz
IGR1bXBNZXRhKCkuCisgICAgb3V0LnByaW50KGxpc3REdW1wKCp0aGlzKSwgIiwgZmFsbFRocm91
Z2ggPSAiLCBmYWxsVGhyb3VnaCgpKTsKK30KKworU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxU
aHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gsIFZvaWQsIG9yaWdpbikK
K3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAorI2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUg
IkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29udHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7
IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOworCisgICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9
PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorCisgICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhp
cyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1lIGluZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVl
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICAK
KyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4mIGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlczsgfQorCisgICAgRnJlcXVlbnRlZEJsb2NrIGZhbGxUaHJvdWdoKCkgY29uc3QgeyBy
ZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRo
cm91Z2goKSB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgpOyB9CisKKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbnVtQ2FzZVZhbHVlcygpOyB9CisgICAgU3dpdGNoQ2FzZSBh
dCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTd2l0Y2hDYXNl
KGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nlc3NvcihpbmRleCkpOworICAgIH0KKyAgICBTd2l0Y2hD
YXNlIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gYXQoaW5kZXgpOworICAgIH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9zd2l0Y2gobnVsbHB0cikKKyAg
ICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBp
dGVyYXRvcihjb25zdCBTd2l0Y2hWYWx1ZSYgc3dpdGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dpdGNoVmFsdWUpCisgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFN3aXRjaENhc2Ugb3Bl
cmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2lu
ZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIu
bV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3dp
dGNoVmFsdWUqIG1fc3dpdGNoOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisK
KyAgICB0eXBlZGVmIGl0ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOworCisgICAgaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgLy8g
VGhpcyByZW1vdmVzIHRoZSBjYXNlIGFuZCByZW9yZGVycyB0aGluZ3MgYSBiaXQuIElmIHlvdSdy
ZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZyb20gMCB0byBOLAorICAgIC8vIHRoZW4geW91IGNhbiBr
ZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlzIHNvIGxvbmcgYXMgeW91IHJldmlzaXQgdGhpcyBzYW1l
IGluZGV4ICh3aGljaCB3aWxsIG5vdworICAgIC8vIGNvbnRhaW4gc29tZSBvdGhlciBjYXNlIHZh
bHVlKS4gVGhpcyByZW1vdmVzIHRoZSBjYXNlIHRoYXQgd2FzIHJlbW92ZWQuCisgICAgU3dpdGNo
Q2FzZSByZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KTsKKworICAgIHZvaWQgYXBwZW5kQ2FzZShj
b25zdCBTd2l0Y2hDYXNlJik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4sIGNvbnN0
IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpOworCisgICAgVmVjdG9yPGludDY0X3Q+IG1f
dmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTd2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1R5cGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUg
dHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91
dC5wcmludCgiVm9pZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAg
ICAgb3V0LnByaW50KCJJbnQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoK
KyAgICAgICAgb3V0LnByaW50KCJJbnQ2NCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBE
b3VibGU6CisgICAgICAgIG91dC5wcmludCgiRG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1R5cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNU
eXBlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2VudW0gVHlwZSB7CisgICAgVm9pZCwKKyAgICBJbnQzMiwKKyAgICBJbnQ2NCwKKyAg
ICBEb3VibGUKK307CisKK2lubGluZSBib29sIGlzSW50KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1
cm4gdHlwZSA9PSBJbnQzMiB8fCB0eXBlID09IEludDY0OworfQorCitpbmxpbmUgYm9vbCBpc0Zs
b2F0KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBEb3VibGU7Cit9CisKK2lubGlu
ZSBUeXBlIHBvaW50ZXJUeXBlKCkKK3sKKyAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICByZXR1
cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vw
c2lsb25WYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1ZTo6flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3Zv
aWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiXiIsIG1fcGhpLT5pbmRleCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmluZSBCM1Vwc2lsb25WYWx1ZV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgVXBzaWxvblZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29k
ZSA9PSBVcHNpbG9uOyB9CisKKyAgICB+VXBzaWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhp
KCkgY29uc3QgeyByZXR1cm4gbV9waGk7IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwgdmFsdWUpCisgICAgICAgICwgbV9waGkocGhpKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAg
IH0KKworICAgIFZhbHVlKiBtX3BoaTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50
cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVc2VDb3VudHM6OlVzZUNvdW50cyhQ
cm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICA6IG1fY291bnRzKHByb2NlZHVyZS52YWx1ZXMoKS5z
aXplKCkpCit7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jZWR1cmUudmFsdWVzKCkpIHsK
KyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAg
ICAgIG1fY291bnRzW2NoaWxkXSsrOworICAgIH0KK30KKworVXNlQ291bnRzOjp+VXNlQ291bnRz
KCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVc2VDb3VudHNfaAorI2RlZmluZSBCM1VzZUNvdW50
c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFByb2NlZHVyZTsKKworY2xhc3MgVXNlQ291bnRzIHsKK3B1YmxpYzoKKyAgICBVc2VDb3Vu
dHMoUHJvY2VkdXJlJik7CisgICAgflVzZUNvdW50cygpOworCisgICAgdW5zaWduZWQgb3BlcmF0
b3JbXShWYWx1ZSogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9jb3VudHNb
dmFsdWVdOworICAgIH0KK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8VmFsdWUsIHVuc2lnbmVkPiBt
X2NvdW50czsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVXNlQ291bnRzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEz
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM1By
b2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitu
YW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihQ
cm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBt
X3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUp
CisgICAgeworICAgIH0KKworI2RlZmluZSBWQUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRv
IHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9u
KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICBmYWlsKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRU
WV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGls
ZSAoZmFsc2UpCisKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBIYXNoU2V0PEJhc2lj
QmxvY2sqPiBibG9ja3M7CisgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAg
ICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5CbG9jazsKKworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUpIHsKKyAgICAgICAgICAgIGJsb2Nrcy5hZGQoYmxv
Y2spOworICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spCisgICAgICAgICAg
ICAgICAgdmFsdWVJbkJsb2NrLmFkZCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3Ig
KFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJlLnZhbHVlcygpKQorICAgICAgICAgICAgdmFsdWVJ
blByb2MuYWRkKHZhbHVlKTsKKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Q
cm9jKQorICAgICAgICAgICAgVkFMSURBVEUodmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxv
Y2spCisgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgi
QXQgIiwgKnZhbHVlKSk7CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJv
YykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZUluUHJvYy5jb250YWlucyhjaGlsZCksICgi
QXQgIiwgKnZhbHVlLCAiLT4iLCBwb2ludGVyRHVtcChjaGlsZCkpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5jb250
YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaywgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vz
c29yKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBG
SVhNRTogRXhwYW5kIHRoaXMgdmFsaWRhdGlvbiBwaGFzZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ4MAorICAgIH0KKworcHJpdmF0ZToK
KyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hh
ciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3Qg
Y2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAg
ICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQ
cmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkIzIFZBTElEQVRJT04gRkFJ
TFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIs
IGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgQWZ0
ZXIgIiwgbV9wcm9jZWR1cmUubGFzdFBoYXNlTmFtZSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGZh
aWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgZGF0
YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2coIkJlZm9yZSAiLCBtX3Byb2NlZHVyZS5sYXN0UGhhc2VOYW1lKCksICI6
XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAg
ICAgICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyht
X3Byb2NlZHVyZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAg
IFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9u
LCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1
cmUmIG1fcHJvY2VkdXJlOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQoreworICAgIFZhbGlkYXRlciB2YWxpZGF0ZXIo
cHJvY2VkdXJlLCBkdW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzVmFsaWRhdGVfaAorI2RlZmluZSBCM1ZhbGlkYXRlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7
CisKK3ZvaWQgdmFsaWRhdGUoUHJvY2VkdXJlJiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51
bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1
ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY29uc3QgY2hhciogY29uc3QgVmFsdWU6OmR1bXBQcmVmaXggPSAiQCI7CisKK1Zh
bHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZh
bHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGlu
LXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0
aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9m
IHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHBy
ZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5
IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5
cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFz
aWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0
aGlzLT5yZXBsYWNlbWVudDsKKworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5
cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIFZh
bHVlKGluZGV4LCBJZGVudGl0eSwgdHlwZSwgb3JpZ2luLCB2YWx1ZSk7CisKKyAgICB0aGlzLT5v
d25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7Cit9CisK
K3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoTm9wKCkKK3sKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1f
aW5kZXg7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93
bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFj
ZW1lbnQ7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIFZh
bHVlKGluZGV4LCBOb3AsIFZvaWQsIG9yaWdpbik7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVy
OworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZp
eCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bj
b2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAg
ICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVuKCkpCisgICAgICAgIG91dC5wcmludChjb21t
YSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0cmluZ091
dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQpOworICAgIENTdHJpbmcgc3RyaW5nID0gc3RyaW5n
T3V0LnRvQ1N0cmluZygpOworICAgIGlmIChzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgIG91dC5w
cmludChjb21tYSwgc3RyaW5nKTsKKworICAgIG91dC5wcmludCgiKSIpOworfQorCit2b2lkIFZh
bHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5
cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3Vi
OgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAg
Y2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJp
dFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAg
IGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgor
ICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVy
OgorICAgICAgICByZXR1cm4gcG9pbnRlclR5cGUoKTsKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNh
c2UgU0V4dDE2OgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBO
b3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAg
Y2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToK
KyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1
YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpF
eHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0OworICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2Ug
SVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0
dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUu
aCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgU3Rh
Y2ttYXA7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKwor
ICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAg
IC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNp
bmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0
ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KKworICAgIC8vIFRoaXMgaXMgdXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5v
dGUgdGhhdCB0aGlzIGlzIG9ubHkgdmFsaWQgZm9yIG5vbi12b2lkIHZhbHVlcy4KKyAgICBBaXI6
OkFyZzo6VHlwZSBhaXJUeXBlKCkgY29uc3QgeyByZXR1cm4gQWlyOjpBcmc6OnR5cGVGb3JCM1R5
cGUodHlwZSgpKTsgfQorCisgICAgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBt
X2NoaWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50aXR5KFZh
bHVlKik7CisgICAgdm9pZCByZXBsYWNlV2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
CisgICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91
IHdhbnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gQXJn
dW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1bWVudFJl
Z1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpKSB7Cisg
ICAgLy8gICAgIHRoaW5ncworICAgIC8vIH0KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCByZXR1
cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1
c2UgdGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29kZSgpKSBy
ZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMoKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7CisgICAgCisg
ICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50NjQoKSBj
b25zdDsKKworICAgIGJvb2wgaGFzSW50KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludCgpIGNv
bnN0OworICAgIGJvb2wgaXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGhh
c0RvdWJsZSgpIGNvbnN0OworICAgIGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworcHJvdGVjdGVkOgorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEg
UHJvY2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBl
IGV4cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4
cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQor
ICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAg
ICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAg
LCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9Cisg
ICAgLy8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hl
biB0aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAg
ICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAs
IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQor
ICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVp
ciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bj
b2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQp
KQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJz
dENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlz
IGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bj
b2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKKyAg
ICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29k
ZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAgICAgICAs
IG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9y
IHZhcmFyZ3MuCisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRy
ZW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUp
CisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAg
ICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAg
Ly8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5
cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGls
ZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBj
b21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1
c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorfTsKKworY2xhc3MgRGVlcFZh
bHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVlRHVtcChjb25zdCBWYWx1ZSogdmFsdWUp
CisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSkKKyAg
ICAgICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFZh
bHVlKiBtX3ZhbHVlOworfTsKKworaW5saW5lIERlZXBWYWx1ZUR1bXAgZGVlcER1bXAoY29uc3Qg
VmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVwVmFsdWVEdW1wKHZhbHVlKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlSW5s
aW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVl
LmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorVCogVmFsdWU6OmFzKCkKK3sKKyAgICBpZiAoVDo6YWNjZXB0cyhvcGNvZGUoKSkpCisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdCBUKiBWYWx1ZTo6YXMoKSBjb25zdAorewor
ICAgIHJldHVybiBjb25zdF9jYXN0PFZhbHVlKj4odGhpcyktPmFzPFQ+KCk7Cit9CisKK2lubGlu
ZSBib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3Qz
MlZhbHVlPigpOworfQorCitpbmxpbmUgaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworaW5saW5lIGJv
b2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDY0VmFs
dWU+KCk7Cit9CisKK2lubGluZSBpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBW
YWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSB8fCBoYXNJbnQ2
NCgpOworfQorCitpbmxpbmUgaW50NjRfdCBWYWx1ZTo6YXNJbnQoKSBjb25zdAoreworICAgIHJl
dHVybiBoYXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNJbnQ2NCgpOworfQorCitpbmxpbmUgYm9v
bCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50
KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0RvdWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKwor
aW5saW5lIGRvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBhczxD
b25zdERvdWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQorCitpbmxpbmUgU3RhY2ttYXAqIFZhbHVl
OjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1
ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2ttYXA7CisgICAgaWYgKFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0
dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICBjYXNlIEFueToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAi
KSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50
KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50
KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBz
d2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmlu
dCgiQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3Rl
ciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAg
IG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6
OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5w
cmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFs
dWVSZXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25z
IGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRp
b24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3Jj
ZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4g
QjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5
IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6Cisg
ICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uIEFzIGFuCisgICAg
ICAgIC8vIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IGtu
b3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZvciB0aGUKKyAgICAgICAgLy8gcmlnaHQgb3BlcmFu
ZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVja011bC4KKyAgICAgICAgQW55LAorCisgICAgICAg
IC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxk
IHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQorICAgICAgICAvLyByZWdpc3RlciB0
aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIhCisgICAgICAgIFNvbWVSZWdpc3RlciwKKworICAg
ICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1
bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRo
aXMgdGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNrZWQuCisgICAgICAgIFJlZ2lzdGVyLAor
CisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3
aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJdCdzIG5vdCBhIHZhbGlkCisgICAgICAgIC8vIGlu
cHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBTdGFjaywKKworICAgICAgICAvLyBBcyBhbiBp
bnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0
aGUgYXJndW1lbnQgYXJlYSBhdCBzb21lCisgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgLy8g
RklYTUU6IFRoZSBTdGFja21hcFNwZWNpYWwgY2xhc3MgbmVlZHMgdG8gYWNjb3VudCBmb3IgdGhl
IGZhY3QgdGhhdCB0aGVzZSBkb24ndCB0dXJuIGludG8KKyAgICAgICAgLy8gQWlyIG9wZXJhbmRz
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
NTQwCisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJl
cHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2
YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9OworICAgIAorICAgIFZhbHVlUmVwKCkKKyAg
ICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBWYWx1ZVJl
cChSZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdpc3RlcikKKyAgICAgICAgLCBtX3ZhbHVl
KHJlZy5pbmRleCgpKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJl
ZyByZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXAocmVnKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKQorICAgIHsKKyAg
ICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7Cisg
ICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbUZQOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50KGludHB0cl90
IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0g
b2Zmc2V0RnJvbVNQOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBWYWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVS
ZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJl
c3VsdC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisg
ICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50RG91YmxlKGRvdWJsZSB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZh
bHVlKSk7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9
CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9
IEFueTsgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUp
OworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1Ao
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisK
KyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gQ29uc3RhbnQpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3Vi
bGUgZG91YmxlVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDxkb3VibGU+KHZhbHVlKCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1
ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQp
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM1ZhbHVlUmVwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dl
bmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBg
YEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVU
T1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisj
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKworJHZh
ckluZGV4ID0gMAorZGVmIG5ld1ZhcgorICAgICR2YXJJbmRleCArPSAxCisgICAgIl90bXAjeyR2
YXJJbmRleH0iCitlbmQKKworY2xhc3MgUHJvZHVjdGlvbgorICAgIGF0dHJfcmVhZGVyIDpvcmln
aW4sIDpuYW1lLCA6dmFyTmFtZSwgOmFub255bW91cywgOm9wY29kZSwgOmNoaWxkcmVuCisKKyAg
ICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIG5hbWUsIG9wY29kZSwgY2hpbGRyZW4pCisgICAgICAg
IEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBhbm9ueW1v
dXMgPSAobmFtZSA9PSBuaWwgb3IgbmFtZSA9fiAvXEFcJChbMC05XSspXFovKQorICAgICAgICBA
dmFyTmFtZSA9IEBhbm9ueW1vdXMgPyBuZXdWYXIgOiBuYW1lID1+IC9cQVwkLyA/ICQnIDogbmFt
ZQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIEBjaGlsZHJlbiA9IGNoaWxkcmVu
ID8gY2hpbGRyZW4gOiBbXQorICAgIGVuZAorCisgICAgZGVmIGhhc09wY29kZQorICAgICAgICBv
cGNvZGUgIT0gbmlsCisgICAgZW5kCisKKyAgICBkZWYgZWFjaFZhcmlhYmxlKCZwcm9jKQorICAg
ICAgICBjaGlsZHJlbi5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBjaGlsZCwgaW5k
ZXggfAorICAgICAgICAgICAgeWllbGQgdmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxk
Lm5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC52YXJOYW1lLAorICAgICAgICAgICAgICAg
ICAgY2hpbGQuYW5vbnltb3VzID8gKGNoaWxkLm9wY29kZSA/IDphbm9uSW50ZXJuYWwgOiA6YW5v
bk9wZXJhbmQpIDogKGNoaWxkLm9wY29kZSA/IDppbnRlcm5hbCA6IDpvcGVyYW5kKSwKKyAgICAg
ICAgICAgICAgICAgIGluZGV4CisgICAgICAgICAgICBjaGlsZC5lYWNoVmFyaWFibGUoJnByb2Mp
CisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBNYXRjaGVyCisgICAgYXR0cl9yZWFk
ZXIgOm5hbWUsIDpwcm9kdWN0aW9ucworCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgcHJvZHVj
dGlvbnMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBwcm9k
dWN0aW9ucworICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpm
aWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwg
bGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVO
dW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAg
IiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4K
KyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGluaXRpYWxp
emUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0
cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAg
aWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5n
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5k
CisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90
aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNw
ZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNv
bW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlzZSAiUGFy
c2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJz
ZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAgZW5kCitl
bmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3
KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAgICB3aGls
ZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9cQVwjKFte
XG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxu
LworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIg
Kz0gMQorICAgICAgICB3aGVuIC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKS8KKyAgICAg
ICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJl
ciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAjIHdoaXRl
c3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVs9KCksXS8KKyAgICAgICAgICAgIHJlc3Vs
dCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAg
ICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3
KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clsw
Li4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNo
CisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICAj
IFdlIGNhbiBleHRlbmQgdGhpcyBhcyB3ZSBhZGQgbW9yZSBrZXl3b3Jkcy4gTGlrZSwgd2UgbWln
aHQgd2FudCAiaW5jbHVkZSIgZXZlbnR1YWxseS4KKyAgICB0b2tlbiA9fiAvXEEoKG1hdGNoZXIp
fChpbmNsdWRlKSlcWi8KK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2Vu
ID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0
b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxl
TmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlk
eCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisg
ICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKwor
ICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAg
ICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
aWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQg
ZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBh
cnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5k
CisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAg
ICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5n
CisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgor
ICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0
ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZh
bmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBw
cm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAgaWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZh
ck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNoaWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUg
bmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBpZiBwcm9k
dWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUg
fQorICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAg
ICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgIGVuZAorCisgICAg
ZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1hdGNoZXIiKQorCisgICAgICAgIG1hdGNoZXJO
YW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisKKyAg
ICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3Ro
CisKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYg
d2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUuCisgICAgICAgICAgICBwcm9kdWN0aW9uID0g
cGFyc2VQcm9kdWN0aW9uCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rpb25z
LmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAg
ICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICAg
ICAgZW5kCisKKyAgICAgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICAgICAg
fQorCisgICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJOYW1lLCBwcm9kdWN0aW9ucykKKyAgICBl
bmQKKworICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgb3JpZ2luID0gdG9rZW4ub3Jp
Z2luCisgICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIGlmIHRva2Vu
ID09ICI9IgorICAgICAgICAgICAgY29uc3VtZSgiPSIpCisgICAgICAgICAgICBvcGNvZGUgPSBj
b25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgIGVsc2lm
IHRva2VuID09ICIoIgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgICAgICBvcGNv
ZGUgPSBuYW1lCisgICAgICAgICAgICBuYW1lID0gbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJldHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG5pbCwgbmlsKQorICAgICAg
ICBlbmQKKyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgbG9vcCB7
CisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKworICAgICAgICAgICAgYWRkVW5p
cXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1Y3Rpb24pCisKKyAgICAgICAgICAgIGJy
ZWFrIGlmIHRva2VuID09ICIpIgorICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgIH0K
KworICAgICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIpIgorICAgICAgICBhZHZhbmNlCisKKyAg
ICAgICAgUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBvcGNvZGUsIHByb2R1Y3Rpb25zKQor
ICAgIGVuZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3
KElPOjpyZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCittYXRjaGVyID0gcGFyc2VyLnBhcnNlCisK
K2NsYXNzIFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIgOmluZGV4TWFwLCA6cHJvZHVjdGlvbnMK
KyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAg
ICBAaW5kZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBpbmRl
eExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1h
cCA8PCBpbmRleAorICAgICAgICAgICAgQHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb25zW2luZGV4
XQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYgbWFwSW5kZXhMaXN0KGluZGV4TGlzdCkK
KyAgICAgICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAg
ICAgIEBpbmRleE1hcFtpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKKyRzdGRlcnIu
cHV0cyAiR2VuZXJhdGluZyBjb2RlIGZvciAje2ZpbGVOYW1lfS4iCisKK0ZpbGUub3BlbigiQjMi
ICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInciKSB7CisgICAgfCBvdXRwIHwKKworICAgIG91dHAu
cHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7
ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKworICAgIG91dHAucHV0cyAiI2lmbmRlZiBCMyN7
bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAucHV0cyAiI2RlZmluZSBCMyN7bWF0Y2hlci5uYW1l
fV9oIgorICAgIAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAK
KyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyIKKworICAgIG91
dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lk
IHJ1biN7bWF0Y2hlci5uYW1lfShWYWx1ZSogX3ZhbHVlLCBBZGFwdG9yJiBhZGFwdG9yKSIKKyAg
ICBvdXRwLnB1dHMgInsiCisKKyAgICAjIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGVtaXQgcHJv
cGVybHkgaW5kZW50ZWQgY29kZSwgYmVjYXVzZSBpdCdzIGEgcmVjdXJzaXZlIGVtaXR0ZXIuIElm
IHlvdQorICAgICMgd2FudCB0byBzZWUgdGhlIGNvZGUgbmljZWx5IGZvcm1hdHRlZCwgb3BlbiBp
dCBpbiBhIGdvb2QgdGV4dCBlZGl0b3IgYW5kIGFzayBpdCB0byBmb3JtYXQgaXQKKyAgICAjIGZv
ciB5b3UuCisKKyAgICAjIEluIG9kZCBzaXR1YXRpb25zLCB3ZSBtYXkgbm90IHVzZSB0aGUgaW5w
dXQgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICBv
dXRwLnB1dHMgIlVOVVNFRF9QQVJBTShfdmFsdWUpOyIKKyAgICAgICAgCisgICAgIyBUaGlzIGp1
c3QgcHJvdGVjdHMgdGhlIGNhbGxlciBmcm9tIGhhdmluZyB0byB3b3JyeSBhYm91dCBwcm9kdWN0
aW9ucyBoYXZpbmcgZGlmZmVyZW50IGxlbmd0aHMuCisgICAgZGVmIG1hdGNoTGVuZ3RoKG91dHAs
IHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAg
ICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9u
LCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNb
aW5kZXhMaXN0c1stMV1bMF1dLmNoaWxkcmVuLmxlbmd0aCA9PSBwcm9kdWN0aW9uLmNoaWxkcmVu
Lmxlbmd0aAorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAg
ICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBsZW5ndGggPSBwcm9kdWN0aW9uc1tpbmRl
eExpc3RbMF1dLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgaWYgbGVuZ3RoID4gMAorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dmFsdWVOYW1lfS0+Y2hpbGRyZW4oKS5zaXpl
KCkgPj0gI3tsZW5ndGh9KSB7IgorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5k
CisKKyAgICAjIFRoaXMgZWZmaWNpZW50bHkgc2VsZWN0cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2Yg
cHJvZHVjdGlvbnMuIEl0IGFzc3VtZXMgdGhhdCBwcm9kdWN0aW9ucworICAgICMgYXJlIG5vdCBk
dXBsaWNhdGVkLiBJdCB5aWVsZHMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBh
bmQgdGhlIGNvcm91dGluZSBpcworICAgICMgcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIHNwZWNp
ZmljIGNvZGUgZm9yIHRoYXQgcHJvZHVjdGlvbi4gVGhlIGNvcm91dGluZSBpcyBnaXZlbiBsaXN0
cyBvZgorICAgICMgaW5kaWNlcyBvZiBwb3NzaWJseS1tYXRjaGluZyBwcm9kdWN0aW9ucy4KKyAg
ICBkZWYgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAg
ICAgICAjIEZpcnN0LCBzcGxpdCB0aGUgcHJvZHVjdGlvbnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJv
ZHVjdGlvbnMgd2l0aCBhbiBvcGNvZGUgYW5kIHByb2R1Y3Rpb25zCisgICAgICAgICMgd2l0aG91
dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNo
X3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAg
ICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1d
Lmhhc09wY29kZSA9PSBwcm9kdWN0aW9uLmhhc09wY29kZQorICAgICAgICAgICAgICAgIGluZGV4
TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5k
ZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgICAgICAK
KyAgICAgICAgIyBOb3csIGVtaXQgcGF0dGVybiBtYXRjaGluZyBjb2RlLiBXZSBkbyBpdCBkaWZm
ZXJlbnRseSBmb3IgbGlzdHMgd2l0aCBhbiBvcGNvZGUgdGhhbiBmb3IKKyAgICAgICAgIyBsaXN0
cyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwg
aW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFz
T3Bjb2RlCisgICAgICAgICAgICAgICAgIyBOb3csIHdlIHNwbGl0IHRoaXMgaW5kZXggbGlzdCBp
bnRvIGdyb3VwcyBmb3IgZWFjaCBvcGNvZGUuCisgICAgICAgICAgICAgICAgZ3JvdXBzID0ge30K
KyAgICAgICAgICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwg
aW5kZXggfAorICAgICAgICAgICAgICAgICAgICBwcm9kdWN0aW9uID0gcHJvZHVjdGlvbnNbaW5k
ZXhdCisgICAgICAgICAgICAgICAgICAgIGlmIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0gPDwgaW5kZXgK
KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBz
W3Byb2R1Y3Rpb24ub3Bjb2RlXSA9IFtpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRl
bWVudC4KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5v
cGNvZGUoKSkgeyIKKyAgICAgICAgICAgICAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAg
ICAgICAgICAgICAgfCBvcGNvZGUsIHN1YkluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiY2FzZSAje29wY29kZX06IgorICAgICAgICAgICAgICAgICAgICBzdWJNYXRj
aCA9IFN1Yk1hdGNoLm5ldyhzdWJJbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAg
ICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25z
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAg
ICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6Igor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1
Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgIG1hdGNo
TGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAg
ICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJN
YXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRha2VzIHByb2R1Y3Rpb25zIHRo
YXQgaGF2ZSB0aGUgc2FtZSBvcGNvZGUgYW5kIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBm
cm9tIHRoZW0gYmFzZWQgb24KKyAgICAjIHRoZSBwcm9kdWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29s
dW1uLgorICAgIGRlZiBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBj
b2x1bW5JbmRleCkKKyAgICAgICAgaWYgY29sdW1uSW5kZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hp
bGRyZW4ubGVuZ3RoCisgICAgICAgICAgICB5aWVsZCAoMC4uLihwcm9kdWN0aW9ucy5zaXplKSku
dG9fYQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVuZAorCisgICAgICAgIHN1YlZhbHVl
ID0gbmV3VmFyCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgIG91dHAu
cHV0cyAiVmFsdWUqICN7c3ViVmFsdWV9ID0gI3t2YWx1ZU5hbWV9LT5jaGlsZCgje2NvbHVtbklu
ZGV4fSk7IgorCisgICAgICAgICMgV2UgbWF5IG5vdCB1c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUg
Y29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgICAgICBvdXRwLnB1dHMgIlVOVVNF
RF9QQVJBTSgje3N1YlZhbHVlfSk7IgorICAgICAgICAKKyAgICAgICAgc3ViUHJvZHVjdGlvbnMg
PSBwcm9kdWN0aW9ucy5tYXAgeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uIHwKKyAgICAgICAg
ICAgIHByb2R1Y3Rpb24uY2hpbGRyZW5bY29sdW1uSW5kZXhdCisgICAgICAgIH0KKworICAgICAg
ICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHN1YlZhbHVlLCBzdWJQcm9kdWN0aW9ucykgeworICAg
ICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5u
ZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAs
IHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4ICsgMSkgeworICAg
ICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRj
aC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgIGVuZAorCisgICAgZGVmIG1hdGNoUmVjdXJzaXZlbHko
b3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhv
dXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8
CisgICAgICAgICAgICAjIFdlIGFyZSBndWFyYW50ZWVkIHRoYXQgdGhpcyBpbmRleCBsaXN0IGNv
bnRhaW5zIHByb2R1Y3Rpb25zIHdpdGggdGhlIHNhbWUgb3Bjb2RlIGFuZAorICAgICAgICAgICAg
IyB0aGUgc2FtZSBsZW5ndGguCisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhp
bmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFs
dWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgMCkgeworICAgICAgICAgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5k
ZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBtYXRjaFJl
Y3Vyc2l2ZWx5KG91dHAsICJfdmFsdWUiLCBtYXRjaGVyLnByb2R1Y3Rpb25zKSB7CisgICAgICAg
IHwgaW5kZXhMaXN0IHwKKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBp
bmRleCB8CisgICAgICAgICAgICBwcm9kdWN0aW9uID0gbWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRl
eF0KKyAgICAgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVmFs
dWUqICN7cHJvZHVjdGlvbi52YXJOYW1lfSA9IF92YWx1ZTsiCisgICAgICAgICAgICBvdXRwLnB1
dHMgIlVOVVNFRF9QQVJBTSgje3Byb2R1Y3Rpb24udmFyTmFtZX0pOyIKKyAgICAgICAgICAgIGlu
dGVybmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPSBbXQor
ICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG51bVNjb3BlcyA9IDAK
KyAgICAgICAgICAgIHNlZW4gPSB7fQorCisgICAgICAgICAgICAjIEZJWE1FOiBXZSB3YW50IHRv
IGJlIGFibGUgdG8gY29tYmluZSBwYXR0ZXJuIG1hdGNoZXJzLCBsaWtlIGhhdmUgdGhlIHBhdHRl
cm4gbWF0Y2ggcnVsZQorICAgICAgICAgICAgIyBmb3IgQnJhbmNoIGluIHRoZSBsb3dlcmluZyBw
YXRjaGVyIGRlbGVnYXRlIHRvIGEgbWF0Y2hlciB0aGF0IGNhbiBkZWR1Y2UgdGhlIGtpbmQgb2YK
KyAgICAgICAgICAgICMgY29tcGFyaXNvbiB0aGF0IHdlJ3JlIGRvaW5nLiBXZSBjb3VsZCB0aGVu
IHJldXNlIHRoYXQgbGF0dGVyIG1hdGNoZXIgZm9yIENoZWNrIGFuZAorICAgICAgICAgICAgIyB1
bmZ1c2VkIGNvbXBhcmUuIFRoZSBrZXkgdG8gbWFraW5nIHN1Y2ggYSBkZWxlZ2F0aW9uIHdvcmsg
aXMgdG8gaGF2ZSB0aGUgaW5uZXIgbWF0Y2hlcgorICAgICAgICAgICAgIyAodGhlIGNvbXBhcmlz
b24gbWF0Y2hlciBpbiB0aGlzIGNhc2UpIGtlZXAgY2FzY2FkaW5nIGlmIGl0IGVuY291bnRlcnMg
YSBydWxlIHRoYXQKKyAgICAgICAgICAgICMgcHJvZHVjZXMgc29tZXRoaW5nIHRoYXQgdGhlIG91
dGVyIG1hdGNoZXIgY2Fubm90IGhhbmRsZS4gSXQncyBub3Qgb2J2aW91cyB0aGF0IHRoZQorICAg
ICAgICAgICAgIyBjb21wYXJpc29uIG1hdGNoZXIgd291bGQgbmVlZCB0aGlzLCBidXQgdGhlIGFk
ZHJlc3MgbWF0Y2hlciBwcm9iYWJseSB3aWxsLiBGb3IgZXhhbXBsZSwKKyAgICAgICAgICAgICMg
d2UgbWF5IGhhdmUgYSBTdG9yZUFkZExvYWQgcnVsZSB0aGF0IGRlbGVnYXRlcyB0byB0aGUgYWRk
cmVzcyBtYXRjaGVyLCBhbmQgdGhlIGFkZHJlc3MKKyAgICAgICAgICAgICMgbWF0Y2hlciBtYXkg
cHJvZHVjZSBhbiBhZGRyZXNzIHRoYXQgdGhlIGxvd2VyaW5nIG1hdGNoZXIgY2Fubm90IHVzZSBi
ZWNhdXNlIHdoaWxlIHRoZQorICAgICAgICAgICAgIyBBZGQgZm9ybSBkb2VzIGFjY2VwdCBhZGRy
ZXNzZXMgaXQgbWF5IG5vdCBhY2NlcHQgdGhlIHBhcnRpY3VsYXIgYWRkcmVzcyB0aGF0IHRoZQor
ICAgICAgICAgICAgIyBhZGRyZXNzIG1hdGNoZXIgcHJvZHVjZWQuIEluIHRoYXQgY2FzZSwgaW5z
dGVhZCBvZiBnaXZpbmcgdXAgb24gdGhlIFN0b3JlQWRkTG9hZCBydWxlLAorICAgICAgICAgICAg
IyB3ZSB3YW50IHRoZSBhZGRyZXNzIG1hdGNoZXIgdG8ganVzdCB0cnkgYSBkaWZmZXJlbnQgYWRk
cmVzcy4gVGhlIGNvbXBhcmlzb24gbWF0Y2hlcgorICAgICAgICAgICAgIyBtaWdodCB3YW50IHRo
aXMganVzdCBmb3IgYmV0dGVyIGNvbnRyb2xsaW5nIHdoZW4gdG8gcGluIHZhcmlhYmxlcy4gQ3Vy
cmVudGx5LCBpZiBpdAorICAgICAgICAgICAgIyBjb25zdHJ1Y3RlZCBzb21lIGNvZGUsIGl0IHdv
dWxkIGFsc28gcGluIHRoZSB2YXJpYWJsZXMgdGhhdCBpdCB1c2VkLiBJZiB0aGUgbG93ZXJpbmcK
KyAgICAgICAgICAgICMgbWF0Y2hlciB0aGVuIGRlY2lkZWQgdG8gcmVqZWN0IHRoZSBjb2RlIGNy
ZWF0ZWQgYnkgdGhlIGNvbXBhcmlzb24gbWF0Y2hlciwgaXQgd291bGQKKyAgICAgICAgICAgICMg
aGF2ZSBhIGhhcmQgdGltZSAidW5waW5uaW5nIiB0aG9zZSB2YXJpYWJsZXMuIEJ1dCBpZiB3ZSBo
YWQgc29tZSBraW5kIG9mIGRlbGVnYXRpb24sIHdlCisgICAgICAgICAgICAjIGNvdWxkIGhhdmUg
dGhlIHBpbm5pbmcgb2YgdGhlIGNvbXBhcmlzb24gbWF0Y2hlciBoYXBwZW4gb25seSBpZiB0aGUg
bG93ZXJpbmcgbWF0Y2hlcgorICAgICAgICAgICAgIyBhY2NlcHRlZC4KKyAgICAgICAgICAgICMK
KyAgICAgICAgICAgICMgVGhpcyBjb3VsZCBhbGwgYmUgYWNjb21wbGlzaGVkIGJ5IGhhdmluZyB0
cnlCbGFoKCkgcmV0dXJuIHNvbWV0aGluZywgYW5kIGhhdmUgdGhlCisgICAgICAgICAgICAjIG1h
dGNoZXIgYWxzbyB0YWtlIGEgZnVuY3RvciBhcmd1bWVudCB0aGF0IGFjY2VwdHMgd2hhdCB0cnlC
bGFoKCkgcmV0dXJucy4gU28gaW5zdGVhZCBvZgorICAgICAgICAgICAgIworICAgICAgICAgICAg
IyBpZiAodHJ5QmxhaCgpKSBvazsKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgV2Ugd291
bGQgaGF2ZToKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgaWYgKGZ1bmN0b3IodHJ5Qmxh
aCgpKSBvazsKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgV2hlbiBsb3dlcmluZyBkZWNp
ZGVkIHRvIGRlbGVnYXRlIHRvIHRoZSBhZGRyZXNzIG9yIGNvbXBhcmlzb24gbWF0Y2hlciwgaXQg
Y291bGQgc3VwcGx5CisgICAgICAgICAgICAjIGEgZnVuY3RvciB0aGF0IGRlY2lkZXMgd2hldGhl
ciB0aGUgdGhpbmcgdGhhdCB0aGUgc3ViLW1hdGNoZXIgc2VsZWN0ZWQgaXMgaW5kZWVkCisgICAg
ICAgICAgICAjIHVzZWZ1bC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSW4gdGhlIG5l
YXIgdGVybSwgd2UgcHJvYmFibHkgd29uJ3QgbmVlZCB0aGlzLiBCdXQgd2Ugd2lsbCBkZWZpbml0
ZWx5IG5lZWQgaXQgYXMgd2UKKyAgICAgICAgICAgICMgZXhwYW5kIHRvIGVmZmljaWVudGx5IHN1
cHBvcnQgbW9yZSBwbGF0Zm9ybXMuIE9uIFg4Nl82NCwgYW55IGJyYW5jaGluZyBpbnN0cnVjdGlv
biBpcworICAgICAgICAgICAgIyB1c2FibGUgaW4gYW55IGNvbnRleHQsIGFuZCBhbnkgYWRkcmVz
cyBzaG91bGQgYmUgdXNhYmxlIGluIGFueSBjb250ZXh0IChhbmQgdGhlIG9ubHkKKyAgICAgICAg
ICAgICMgY2FzZXMgd2hlcmUgaXQgd291bGRuJ3QgYmUgaXMgaWYgd2UgaGF2ZSBob2xlcyBpbiB0
aGUgTWFjcm9Bc3NlbWJsZXIpLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTU5CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxlIHsKKyAgICAgICAgICAgICAgICB8IHBh
cmVudFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJOYW1lLCBraW5kLCBpbmRleCB8CisgICAg
ICAgICAgICAgICAgbG9hZEV4cHIgPSAiI3twYXJlbnRWYXJOYW1lfS0+Y2hpbGQoI3tpbmRleH0p
IgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIHNlZW5bY2hpbGRWYXJOYW1l
XQorICAgICAgICAgICAgICAgICAgICB0bXAgPSBuZXdWYXIKKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJWYWx1ZSogI3t0bXB9ID0gI3tsb2FkRXhwcn07IgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmICgje3RtcH0gPT0gI3tjaGlsZFZhck5hbWV9KSB7IgorICAgICAg
ICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgc2VlbltjaGlsZFZhck5hbWVdID0gdHJ1ZQorICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tjaGlsZFZhck5h
bWV9ID0gI3tsb2FkRXhwcn07IgorCisgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IENvbnNp
ZGVyIGdldHRpbmcgcmlkIG9mIHRoZSAkIHByZWZpeC4KKyAgICAgICAgICAgICAgICAgICAgIyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTI3CisgICAgICAgICAg
ICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJC8KKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIGNoaWxkTmFtZSA9fiAvXEFcJChbMC05XSspXFovCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5pc0ludCgjeyQxfSkpIHsiCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5oYXNJbnQoKSkgeyIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEK
KyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6
aW50ZXJuYWwgb3Iga2luZCA9PSA6YW5vbkludGVybmFsCisgICAgICAgICAgICAgICAgICAgIG9w
ZXJhbmRBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOm9wZXJhbmQgb3Iga2lu
ZCA9PSA6YW5vbk9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgdHJ5QXJndW1lbnRzIDw8IGNo
aWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBvciBraW5kID09IDpvcGVyYW5kCisgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgImlm
IChhZGFwdG9yLmFjY2VwdFJvb3QoX3ZhbHVlKSIKKyAgICAgICAgICAgIHVubGVzcyBpbnRlcm5h
bEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3Iu
YWNjZXB0SW50ZXJuYWxzKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQor
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB1bmxlc3Mgb3BlcmFuZEFyZ3VtZW50cy5lbXB0
eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IuYWNjZXB0T3BlcmFuZHMo
IiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLnRyeSN7cHJvZHVjdGlvbi5uYW1lfSgi
ICsgdHJ5QXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSkgeyIpCisgICAgICAgICAgICBvdXRwLnB1
dHMgImFkYXB0b3IuYWNjZXB0Um9vdExhdGUoX3ZhbHVlKTsiCisgICAgICAgICAgICB1bmxlc3Mg
aW50ZXJuYWxBcmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFw
dG9yLmFjY2VwdEludGVybmFsc0xhdGUoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikg
KyAiKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1l
bnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2NlcHRPcGVy
YW5kc0xhdGUoIiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpOyIKKyAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm47IgorICAgICAgICAgICAgb3V0
cC5wdXRzICJ9IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0i
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0
cyAifSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8g
QjMje21hdGNoZXIubmFtZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90
ZXN0YjMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5j
bHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisjaW5jbHVk
ZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUg
IkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlZN
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcg
bmFtZXNwYWNlIEpTQzo6QjM7CisKK25hbWVzcGFjZSB7CisKKy8vIE5vdGhpbmcgZmFuY3kgZm9y
IG5vdzsgd2UganVzdCB1c2UgdGhlIGV4aXN0aW5nIFdURiBhc3NlcnRpb24gbWFjaGluZXJ5Lgor
I2RlZmluZSBDSEVDSyh4KSBSRUxFQVNFX0FTU0VSVCh4KQorCitWTSogdm07CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1QgY29tcGlsZUFuZFJ1bihQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBDQ2FsbEhl
bHBlcnMgaml0KHZtKTsKKyAgICBnZW5lcmF0ZShwcm9jZWR1cmUsIGppdCk7CisgICAgTGlua0J1
ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJ0ZXN0YjMiKSk7CisgICAg
VCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJndW1lbnRz
Li4uKT4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIGZ1bmN0
aW9uKGFyZ3VtZW50cy4uLik7Cit9CisKK3ZvaWQgdGVzdDQyKCkKK3sKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVl
KiBjb25zdDQyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDQyKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLCBjb25zdDQyKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9
PSA0Mik7Cit9CisKKyNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgIFwKKyAgICAgICAgZGF0YUxvZygjdGVzdCAiOlxuIik7ICAgICAgICAgICAgICAgICAgIFwK
KyAgICAgICAgdGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgZGF0YUxvZygiICAgIE9LIVxuIik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxl
IChmYWxzZSk7CisKK3ZvaWQgcnVuKCkKK3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmco
KTsKKyAgICB2bSA9ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworCisgICAgUlVO
KHRlc3Q0MigpKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKyNlbHNlIC8vIEVO
QUJMRShCM19KSVQpCisKK3N0YXRpYyB2b2lkIHJ1bigpCit7CisgICAgZGF0YUxvZygiQjMgSklU
IGlzIG5vdCBlbmFibGVkLlxuIik7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCitp
bnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgVU5VU0VEX1BBUkFNKGFyZ2Mp
OworICAgIFVOVVNFRF9QQVJBTShhcmd2KTsKKyAgICAKKyAgICBydW4oKTsKKyAgICByZXR1cm4g
MDsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIzOSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5l
cy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworYm9vbCBhdHRlbXB0QXNz
aWdubWVudCgKKyAgICBTdGFja1Nsb3QqIHNsb3QsIGludHB0cl90IG9mZnNldEZyb21GUCwgY29u
c3QgVmVjdG9yPFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGZvciAoU3RhY2tTbG90
KiBvdGhlclNsb3QgOiBvdGhlclNsb3RzKSB7CisgICAgICAgIGlmICghb3RoZXJTbG90LT5vZmZz
ZXRGcm9tRlAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29sIG92ZXJsYXAg
PSBXVEY6OnJhbmdlc092ZXJsYXAoCisgICAgICAgICAgICBvZmZzZXRGcm9tRlAsCisgICAgICAg
ICAgICBvZmZzZXRGcm9tRlAgKyBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xvdC0+Ynl0ZVNpemUo
KSksCisgICAgICAgICAgICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpLAorICAgICAgICAgICAg
b3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSArIHN0YXRpY19jYXN0PGludHB0cl90PihvdGhlclNs
b3QtPmJ5dGVTaXplKCkpKTsKKyAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQKG9mZnNldEZyb21G
UCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgYXNzaWduKFN0YWNrU2xvdCogc2xvdCwg
Y29uc3QgVmVjdG9yPFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGlmIChhdHRlbXB0
QXNzaWdubWVudChzbG90LCAtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkp
LCBvdGhlclNsb3RzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChTdGFja1Nsb3QqIG90
aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhlclNsb3QtPm9mZnNldEZy
b21GUCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJvb2wgZGlkQXNzaWduID0g
YXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgICAgICAgICBzbG90LCBvdGhlclNsb3QtPm9mZnNldEZy
b21GUCgpIC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkpLCBvdGhlclNs
b3RzKTsKKyAgICAgICAgaWYgKGRpZEFzc2lnbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIGFub255bW91
cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCit7CisgICAgUGhh
c2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrIik7CisKKyAgICAvLyBBbGxv
Y2F0ZSBhbGwgb2YgdGhlIGxvY2tlZCBzbG90cyBpbiBvcmRlci4gVGhpcyBpcyBraW5kIG9mIGEg
Y3JhenkgYWxnb3JpdGhtIHRvIGFsbG93IGZvcgorICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBvZiBz
dGFjayBzbG90cyBiZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVuIGdl
dCBoZXJlLgorICAgIEFTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNr
U2xvdCo+IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90czsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4g
bG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0OworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29k
ZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgc3dpdGNoIChzbG90LT5raW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgICAgICBpZiAoc2xvdC0+b2Zm
c2V0RnJvbUZQKCkpCisgICAgICAgICAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFw
cGVuZChzbG90KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2NrZWRTdGFj
a1Nsb3RzV29ya2xpc3QuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICAgICAgaWYgKHNsb3QtPm9m
ZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQXMgYSBtYXR0ZXIgb2Ygc2FuaXR5
LCB1bmFzc2lnbiB0aGlzLiBNYXliZSBpdCB3b3VsZCBiZSBnb29kIHRvIGV2ZW4gaGF2ZSBhCisg
ICAgICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBydWxlIHRoYXQgdGhpcyBjYW5ub3QgaGFwcGVu
LgorICAgICAgICAgICAgICAgIHNsb3QtPnNldE9mZnNldEZyb21GUCgwKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIC8vIFRoaXMgaXMg
YSBmYWlybHkgZXhwZW5zaXZlIGxvb3AsIGJ1dCBpdCdzIE9LIGJlY2F1c2Ugd2UnbGwgdXN1YWxs
eSBvbmx5IGhhdmUgYSBoYW5kZnVsIG9mCisgICAgLy8gbG9ja2VkIHN0YWNrIHNsb3RzLgorICAg
IHdoaWxlICghbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBT
dGFja1Nsb3QqIHNsb3QgPSBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QudGFrZUxhc3QoKTsKKyAg
ICAgICAgYXNzaWduKHNsb3QsIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cyk7CisgICAgICAgIGFz
c2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAgfQorCisgICAgLy8gTm93
IHdlIGhhbmRsZSB0aGUgYW5vbnltb3VzIHNsb3RzLiBOb3RlIHRoYXQgdGhlb3JldGljYWxseSB3
ZSBzaG91bGQgZG8gYW4gZXNjYXBlIGFuYWx5c2lzCisgICAgLy8gaGVyZS4gQnV0LCBjdXJyZW50
bHkgQWlyIGRvZXNuJ3Qgc3VwcG9ydCBlc2NhcGluZyBhIFN0YWNrU2xvdCEKKyAgICAvLyBGSVhN
RTogQWRkIHN1cHBvcnQgZm9yIGVzY2FwaW5nIGEgU3RhY2tTbG90IGFuZCBhZGQgZXNjYXBlIGFu
YWx5c2lzIHRvIGFsbG9jYXRlU3RhY2soKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDMwCisKKyAgICBhdXRvIGlzUmVsZXZhbnQgPSBbXSAoY29u
c3QgQXJnJiBhcmcpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAmJiBh
cmcuc3RhY2tTbG90KCktPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM7CisgICAg
fTsKKworICAgIExpdmVuZXNzPEFyZz4gbGl2ZW5lc3MoY29kZSk7CisgICAgSW5kZXhNYXA8U3Rh
Y2tTbG90LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Nsb3Rz
KCkuc2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CisKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxBcmc+OjpMb2NhbENh
bGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgYXV0byBpbnRlcmZlcmUg
PSBbJl0gKCkgeworICAgICAgICAgICAgLy8gRm9ybSBhIGNsaXF1ZSBvZiBzdGFjayBzbG90cyB0
aGF0IGludGVyZmVyZS4gRmlyc3QgZmluZCB0aGUgbGlzdCBvZiBzdGFjayBzbG90cworICAgICAg
ICAgICAgLy8gdGhhdCBhcmUgbGl2ZSByaWdodCBub3cuCisgICAgICAgICAgICBzbG90cy5yZXNp
emUoMCk7CisgICAgICAgICAgICBmb3IgKEFyZyBhcmcgOiBsb2NhbENhbGMubGl2ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzUmVsZXZhbnQoYXJnKSkKKyAgICAgICAgICAgICAgICAgICAg
c2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2xvdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBTdGFja1Nsb3QqIG91dGVyID0gc2xvdHNbaV07CisgICAgICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBzbG90cy5zaXplKCk7ICsraikgeworICAgICAgICAg
ICAgICAgICAgICBTdGFja1Nsb3QqIGlubmVyID0gc2xvdHNbaV07CisKKyAgICAgICAgICAgICAg
ICAgICAgU3RhY2tTbG90KiBmaXJzdCA9IG91dGVyOworICAgICAgICAgICAgICAgICAgICBTdGFj
a1Nsb3QqIHNlY29uZCA9IGlubmVyOworICAgICAgICAgICAgICAgICAgICBpZiAoZmlyc3QtPmlu
ZGV4KCkgPiBzZWNvbmQtPmluZGV4KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzdGQ6OnN3
YXAoZmlyc3QsIHNlY29uZCk7CisKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW2Zp
cnN0XS5hZGQoc2Vjb25kKTsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW3NlY29u
ZF0uYWRkKGZpcnN0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
IH07CisKKyAgICAgICAgaW50ZXJmZXJlKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAg
ICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAg
aW50ZXJmZXJlKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgYXNzaWduIHN0
YWNrIGxvY2F0aW9ucy4gQXQgaXRzIGhlYXJ0IHRoaXMgYWxnb3JpdGhtIGlzIGp1c3QgZmlyc3Qt
Zml0LiBGb3IgZWFjaAorICAgIC8vIFN0YWNrU2xvdCB3ZSBqdXN0IHdhbnQgdG8gZmluZCB0aGUg
b2Zmc2V0RnJvbUZQIHRoYXQgaXMgY2xvc2VzdCB0byB6ZXJvIHdoaWxlIGVuc3VyaW5nIG5vCisg
ICAgLy8gb3ZlcmxhcCB3aXRoIG90aGVyIFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdp
dGguCisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IG90aGVyU2xvdHM7CisgICAgZm9yIChTdGFja1Ns
b3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0
RnJvbUZQKCkpIHsKKyAgICAgICAgICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0Lgor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBIYXNoU2V0PFN0YWNr
U2xvdCo+JiBpbnRlcmZlcmluZ1Nsb3RzID0gaW50ZXJmZXJlbmNlW3Nsb3RdOworICAgICAgICBv
dGhlclNsb3RzLnJlc2l6ZShhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpICsgaW50ZXJm
ZXJpbmdTbG90cy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXNz
aWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3RoZXJTbG90
c1tpXSA9IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90c1tpXTsKKyAgICAgICAgdW5zaWduZWQgbmV4
dEluZGV4ID0gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKTsKKyAgICAgICAgZm9yIChT
dGFja1Nsb3QqIG90aGVyU2xvdCA6IGludGVyZmVyaW5nU2xvdHMpCisgICAgICAgICAgICBvdGhl
clNsb3RzW25leHRJbmRleCsrXSA9IG90aGVyU2xvdDsKKworICAgICAgICBhc3NpZ24oc2xvdCwg
b3RoZXJTbG90cyk7CisgICAgfQorCisgICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzdGFjayB3
ZSdyZSB1c2luZyBmb3Igc3RhY2sgc2xvdHMuCisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yU3Rh
Y2tTbG90cyA9IDA7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMo
KSkgeworICAgICAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gc3RkOjptYXgoCisgICAgICAg
ICAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KC1zbG90LT5vZmZzZXRGcm9tRlAoKSkpOworICAgIH0KKworICAgIGZyYW1lU2l6ZUZv
clN0YWNrU2xvdHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRl
cygpLCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzKTsKKworICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRl
ZHVjZSBob3cgbXVjaCBhcmd1bWVudCBhcmVhIHdlIG5lZWQuCisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7Cisg
ICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAg
aWYgKGFyZy5pc0NhbGxBcmcoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCB3
ZSBhc3N1bWUgdGhhdCB3ZSB1c2UgOCBieXRlcyBvZiB0aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mg
bm90CisgICAgICAgICAgICAgICAgICAgIC8vIHN1Y2ggYW4gYXdlc29tZSBhc3N1bXB0aW9uLgor
ICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ1NAorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLm9mZnNl
dCgpID49IDApOworICAgICAgICAgICAgICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNp
emUoYXJnLm9mZnNldCgpICsgOCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgY29kZS5zZXRGcmFtZVNpemUoZnJhbWVTaXplRm9yU3Rh
Y2tTbG90cyArIGNvZGUuY2FsbEFyZ0FyZWFTaXplKCkpOworCisgICAgLy8gRmluYWxseSwgdHJh
bnNmb3JtIHRoZSBjb2RlIHRvIHVzZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhp
cyBpcyBhIGxvc3NsZXNzCisgICAgLy8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJj
aCB0aGUgU3RhY2tTbG90cyBhcnJheSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkK
KyAgICAvLyBvZmZzZXQtZnJvbS1GUCByZWZlcnMgdG8uCisKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAg
ICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBz
d2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6Cisg
ICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAg
ICAgIFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAg
ICAgICBhcmcub2Zmc2V0KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxB
cmc6CisgICAgICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAg
ICAgICAgICAgIFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAg
ICAgICAgICAgICBhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQWxsb2NhdGVTdGFjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckFsbG9jYXRlU3RhY2tfaAorI2RlZmluZSBBaXJBbGxvY2F0ZVN0YWNrX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90
cyB0byBwbGFjZXMgb24gdGhlIHN0YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBv
bmVzIGluIGluZGV4CisvLyBvcmRlciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNp
bmcgZmlyc3QgZml0LgorCit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyQWxsb2NhdGVTdGFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckFyZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyQXJnLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgQXJnOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIElu
dmFsaWQ6CisgICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFRtcDoKKyAgICAgICAgb3V0LnByaW50KHRtcCgpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgSW1tOgorICAgICAgICBvdXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEltbTY0OgorICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4
IiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGRyOgorICAgICAgICBp
ZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBv
dXQucHJpbnQoIigiLCBiYXNlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElu
ZGV4OgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0
KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsIiwgaW5kZXgoKSk7CisgICAg
ICAgIGlmIChzY2FsZSgpICE9IDEpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgp
KTsKKyAgICAgICAgb3V0LnByaW50KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
YWNrOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0
KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBwb2ludGVyRHVtcChzdGFja1Nsb3QoKSksICIp
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGlmIChvZmZz
ZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmlu
dCgiKGNhbGxBcmcpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbENvbmQ6CisgICAg
ICAgIG91dC5wcmludChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIG91dC5wcmludChhc1Jlc3VsdENvbmRpdGlvbigp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50
KHBvaW50ZXJEdW1wKHNwZWNpYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJB
cmdfaAorI2RlZmluZSBBaXJBcmdfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpclRtcC5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
U3BlY2lhbDsKK2NsYXNzIFN0YWNrU2xvdDsKKworLy8gVGhpcyBjbGFzcyBuYW1lIGlzIGFsc28g
aW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIHdpbGwgc2F5IGl0IGEgbG90LiBZb3UnbGwg
c2VlIGNvZGUgbGlrZQorLy8gSW5zdCguLi4sIEFyZzo6aW1tKDUpLCBBcmc6OmFkZHIodGhpbmcs
IGJsYWgpLCAuLi4pCitjbGFzcyBBcmcgeworcHVibGljOgorICAgIC8vIFRoZXNlIGVudW0gbWVt
YmVycyBhcmUgaW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIGhhdmUgdG8gbWVudGlvbiB0
aGVtIGEgbG90LgorICAgIGVudW0gS2luZCA6IGludDhfdCB7CisgICAgICAgIEludmFsaWQsCisg
ICAgICAgIFRtcCwKKyAgICAgICAgSW1tLAorICAgICAgICBJbW02NCwKKyAgICAgICAgQWRkciwK
KyAgICAgICAgU3RhY2ssCisgICAgICAgIENhbGxBcmcsCisgICAgICAgIEluZGV4LAorICAgICAg
ICBSZWxDb25kLAorICAgICAgICBSZXNDb25kLAorICAgICAgICBTcGVjaWFsCisgICAgfTsKKwor
ICAgIGVudW0gUm9sZSA6IGludDhfdCB7CisgICAgICAgIFVzZSwKKyAgICAgICAgRGVmLAorICAg
ICAgICBVc2VEZWYKKyAgICB9OworCisgICAgZW51bSBUeXBlIDogaW50OF90IHsKKyAgICAgICAg
R1AsCisgICAgICAgIEZQCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1U
eXBlcyA9IDI7CisKKyAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNl
RGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wg
aXNEZWYoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAg
IGNhc2UgVXNlOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERlZjoK
KyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3JCM1R5cGUoQjM6OlR5cGUgdHlwZSkK
KyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZvaWQ6CisgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAg
ICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVy
biBHUDsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gRlA7CisgICAg
ICAgIH0KKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBHUDsK
KyAgICB9CisKKyAgICBBcmcoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkKQorICAgIHsKKyAg
ICB9CisKKyAgICBBcmcoQWlyOjpUbXAgdG1wKQorICAgICAgICA6IG1fa2luZChUbXApCisgICAg
ICAgICwgbV9iYXNlKHRtcCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW0oaW50
MzJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBJbW07CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tNjQoaW50cHRyX3QgdmFs
dWUpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
SW1tNjQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgYWRkcihBaXI6OlRtcCBiYXNlLCBpbnQz
Ml90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAg
ICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQWRkcjsKKyAgICAgICAg
cmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHN0YWNrKFN0
YWNrU2xvdCogdmFsdWUsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFyZyBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gYml0d2lzZV9jYXN0PGludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5t
X3NjYWxlID0gb2Zmc2V0OyAvLyBJIGtub3csIHl1Y2suCisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgc3RhdGljIEFyZyBjYWxsQXJnKGludDMyX3Qgb2Zmc2V0KQorICAgIHsK
KyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENhbGxBcmc7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2NhbGUodW5zaWduZWQgc2NhbGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAg
Y2FzZSAyOgorICAgICAgICBjYXNlIDQ6CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGxvZ1NjYWxlKHVuc2lnbmVk
IHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0
dXJuIDE7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBj
YXNlIDg6CisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGluZGV4KEFpcjo6VG1wIGJhc2UsIEFpcjo6VG1w
IGluZGV4LCB1bnNpZ25lZCBzY2FsZSA9IDEsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpbmRleC5pc0dQKCkp
OworICAgICAgICBBU1NFUlQoaXNWYWxpZFNjYWxlKHNjYWxlKSk7CisgICAgICAgIEFyZyByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFz
ZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3Vs
dC5tX3NjYWxlID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2NhbGUpOworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c3RhdGljIEFyZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNv
bmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBSZWxDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyByZXNDb25kKE1hY3Jv
QXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlc0NvbmQ7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBzdGF0aWMgQXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQorICAgIHsKKyAg
ICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFNwZWNpYWw7CisgICAg
ICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oc3BlY2lhbCk7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3Ro
ZXIubV9vZmZzZXQKKyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAg
ICAgICAgICYmIG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXgg
PT0gb3RoZXIubV9pbmRleAorICAgICAgICAgICAgJiYgbV9zY2FsZSA9PSBvdGhlci5tX3NjYWxl
OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcmcmIG90aGVyKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAqdGhpcyAhPSBBcmcoKTsgfQor
CisgICAgS2luZCBraW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQ7Cisg
ICAgfQorCisgICAgYm9vbCBpc1RtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2lu
ZCgpID09IFRtcDsKKyAgICB9CisKKyAgICBib29sIGlzSW1tKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gSW1tOworICAgIH0KKworICAgIGJvb2wgaXNJbW02NCgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OworICAgIH0KKworICAg
IGJvb2wgaXNBZGRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRk
cjsKKyAgICB9CisKKyAgICBib29sIGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGtpbmQoKSA9PSBTdGFjazsKKyAgICB9CisKKyAgICBib29sIGlzQ2FsbEFyZygpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IENhbGxBcmc7CisgICAgfQorCisgICAg
Ym9vbCBpc0luZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5k
ZXg7CisgICAgfQorCisgICAgYm9vbCBpc1JlbENvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBSZWxDb25kOworICAgIH0KKworICAgIGJvb2wgaXNSZXNDb25kKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVzQ29uZDsKKyAgICB9CisK
KyAgICBib29sIGlzU3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgp
ID09IFNwZWNpYWw7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKKyAgICB9CisKKyAgICBBaXI6OlRt
cCB0bXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUbXApOworICAg
ICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW0gfHwga2luZCgpID09IEltbTY0KTsK
KyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKworICAgIHZvaWQqIHBvaW50ZXJWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbTY0KTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fb2Zm
c2V0KSk7CisgICAgfQorCisgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0
dXJuIG1fYmFzZTsKKyAgICB9CisKKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0CisgICAgewor
ICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNh
c2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAg
ICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGludDMyX3Qgb2Zmc2V0KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCisgICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9zY2FsZSk7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gQWRkciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpOworICAgIH0KKworICAg
IFN0YWNrU2xvdCogc3RhY2tTbG90KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0YWNrU2xvdCo+KG1f
b2Zmc2V0KTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBpbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgc2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX3NjYWxlOworICAgIH0KKworICAg
IHVuc2lnbmVkIGxvZ1NjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dTY2Fs
ZShzY2FsZSgpKTsKKyAgICB9CisKKyAgICBBaXI6OlNwZWNpYWwqIHNwZWNpYWwoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTcGVjaWFsKTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxBaXI6OlNwZWNpYWwqPihtX29mZnNldCk7CisgICAgfQorCisgICAgYm9v
bCBpc0dQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgp
LmlzR1AoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBUbXAoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAKKyAgICAvLyBU
ZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWly
ZXMgYSBHUCB2YWx1ZS4KKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgSW1tNjQ6Cisg
ICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFj
azoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAg
IGNhc2UgUmVzQ29uZDoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzR1BUbXAoKTsK
KyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4g
YSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgRlAgdmFsdWUuCisgICAgYm9vbCBpc0ZQKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgor
ICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgY2Fz
ZSBTcGVjaWFsOgorICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2Fz
ZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEltbTY0OiAvLyBZ
ZXMsIHdlIGFsbG93IEltbTY0IGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9y
IGltcGxlbWVudGluZyBzdGFja21hcHMuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNGUFRtcCgpOworICAgICAgICB9Cisg
ICAgfQorCisgICAgYm9vbCBoYXNUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
a2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAg
ICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAg
Ly8gVGhlIHR5cGUgaXMgYW1iaWd1b3VzIGZvciBzb21lIGFyZyBraW5kcy4gQ2FsbCB3aXRoIGNh
cmUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0dQKCkg
PyBHUCA6IEZQOworICAgIH0KKworICAgIGJvb2wgaXNUeXBlKFR5cGUgdHlwZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAg
ICAgcmV0dXJuIGlzR1AoKTsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBp
c0ZQKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1BSKCk7CisgICAgfQorCisgICAg
R1BSUmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3ByKCk7Cisg
ICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNU
bXAoKSAmJiB0bXAoKS5pc0ZQUigpOworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwcigpOworICAgIH0KKyAgICAKKyAgICBib29s
IGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlz
UmVnKCk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdG1wKCkucmVnKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3BUbXBJbmRleCgpOworICAgIH0KKworICAg
IHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgp
LmZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdG1wKCkudG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBBcmcg
d2l0aE9mZnNldChpbnQzMl90IGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoIWhhc09mZnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBp
ZiAoc3VtT3ZlcmZsb3dzPGludDMyX3Q+KG9mZnNldCgpLCBhZGRpdGlvbmFsT2Zmc2V0KSkKKyAg
ICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgcmV0dXJuIGFkZHIoYmFzZSgpLCBvZmZzZXQoKSAr
IGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICAgICAgcmV0
dXJuIHN0YWNrKHN0YWNrU2xvdCgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAg
ICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgICAgICByZXR1cm4gY2FsbEFyZyhvZmZzZXQoKSAr
IGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0
dXJuIGluZGV4KGJhc2UoKSwgaW5kZXgoKSwgc2NhbGUoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFs
T2Zmc2V0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZh
c3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5k
KSB7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBm
dW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoK
KyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRl
eCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8g
a25vdyB0aGF0IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNl
IGl0cworICAgIC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoK
KyAgICAvLworICAgIC8vIG1vdiAlcmF4LCAoJXJjeCkKKyAgICAvLworICAgIC8vIFRoaXMgZGVm
cyAoJXJjeCkgYnV0IHVzZXMgJXJjeC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgor
ICAgIHZvaWQgZm9yRWFjaFRtcChSb2xlIGFyZ1JvbGUsIFR5cGUgYXJnVHlwZSwgY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAg
IGNhc2UgVG1wOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIGFyZ1JvbGUsIGFyZ1R5cGUp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1
bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAg
ICAgZnVuY3RvcihtX2luZGV4LCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisK
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQgYXNU
cnVzdGVkSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KHZhbHVlKCkpOworICAg
IH0KKyNlbmRpZgorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIgYXNUcnVzdGVk
SW1tUHRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgICAg
ICBBU1NFUlQoaXNJbW02NCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUKGlz
SW1tKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocG9p
bnRlclZhbHVlKCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFzQWRk
cmVzcygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAgICBy
ZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2FzdDxp
bnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5k
ZXggYXNCYXNlSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgoKSk7
CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAg
bV9iYXNlLmdwcigpLCBtX2luZGV4LmdwcigpLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6
U2NhbGU+KGxvZ1NjYWxlKCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9v
ZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlv
biBhc1JlbGF0aW9uYWxDb25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlz
UmVsQ29uZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpS
ZWxhdGlvbmFsQ29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJs
ZXI6OlJlc3VsdENvbmRpdGlvbiBhc1Jlc3VsdENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNSZXNDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFj
cm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIHZv
aWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgQXJnKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2Jhc2UoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFs
dWUpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IEFyZyhXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICAvLyBUaGlzIHJlYWxseSBkb2Vzbid0IGhhdmUgdG8gYmUgdGhhdCBncmVhdC4KKyAg
ICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxpbnQ2NF90Pjo6aGFzaChtX29mZnNldCkgKyBtX2tp
bmQgKyBtX3NjYWxlICsgbV9iYXNlLmhhc2goKSArCisgICAgICAgICAgICBtX2luZGV4Lmhhc2go
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29mZnNldCB7IDAgfTsKKyAgICBL
aW5kIG1fa2luZCB7IEludmFsaWQgfTsKKyAgICBpbnQzMl90IG1fc2NhbGUgeyAxIH07CisgICAg
QWlyOjpUbXAgbV9iYXNlOworICAgIEFpcjo6VG1wIG1faW5kZXg7Cit9OworCitzdHJ1Y3QgQXJn
SGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQXJnJiBrZXkpIHsgcmV0dXJu
IGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBBcmcmIGEsIGNvbnN0
IEFyZyYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRv
Q29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4g
c3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpC
Mzo6QWlyOjpBcmc+IHsKKyAgICB0eXBlZGVmIEpTQzo6QjM6OkFpcjo6QXJnSGFzaCBIYXNoOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6QXJnPiA6IFNpbXBsZUNsYXNzSGFzaFRy
YWl0czxKU0M6OkIzOjpBaXI6OkFyZz4geworICAgIC8vIEJlY2F1c2UgbV9zY2FsZSBpcyAxIGlu
IHRoZSBlbXB0eSB2YWx1ZS4KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJv
ID0gZmFsc2U7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJBcmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IGNo
YXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK2Jvb2wgQmFzaWNCbG9j
azo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIEIzOjph
ZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVtb3Zl
UHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIEIzOjpyZW1vdmVQ
cmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVwbGFjZVBy
ZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIHJldHVy
biBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKK30KKwordm9pZCBCYXNp
Y0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1
bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZy
ZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsKKyAgICBmb3IgKGNvbnN0IEluc3QmIGlu
c3QgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9CisK
K0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kp
CisgICAgOiBtX2luZGV4KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQorewor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Js
b2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJh
c2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckJhc2ljQmxvY2tf
aAorI2RlZmluZSBBaXJCYXNpY0Jsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVk
ZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4K
KyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworY2xhc3MgSW5zZXJ0aW9uU2V0
OworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Js
b2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIHR5cGVkZWYgVmVjdG9yPEluc3Q+
IEluc3RMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nv
ckxpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JM
aXN0OworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9Cisg
ICAgCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9
CisgICAgSW5zdExpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigp
OyB9CisgICAgSW5zdExpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7
IH0KKyAgICBJbnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBt
X2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorCisgICAgY29uc3QgSW5zdCYgYXQoc2l6ZV90
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorICAgIEluc3QmIGF0KHNp
emVfdCBpbmRleCkgeyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKworICAgIGNvbnN0IEluc3Qm
IGxhc3QoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorICAgIEluc3QmIGxhc3Qo
KSB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5z
dD4KKyAgICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBtX2lu
c3RzLmFwcGVuZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOworICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBcmd1bWVudHMmJi4u
LiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0KHN0ZDo6Zm9y
d2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAgICAvLyBUaGUgIjAi
IGNhc2UgaXMgdGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28gdGhlICJ0aGVu
IiBjYXNlLiBUaGUgIjEiIGNhc2UgaXMgdGhlCisgICAgLy8gImVsc2UiIGNhc2UsIGFuZCBpcyB1
c2VkIHRvIHJlcHJlc2VudCB0aGUgZmFsbC10aHJvdWdoIG9mIGEgY29uZGl0aW9uYWwgYnJhbmNo
LgorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3Nv
cnMuc2l6ZSgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEZyZXF1ZW50ZWRC
bG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5k
ZXhdOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0
dXJuIG1fc3VjY2Vzc29yczsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJl
dHVybiBtX3N1Y2Nlc3NvcnM7IH0KKworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0K
KyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJu
IHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFz
aWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkKKyAgICB7CisgICAgICAg
IHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+KG1f
c3VjY2Vzc29ycyk7CisgICAgfQorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNC
bG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNv
bnN0IFN1Y2Nlc3Nvckxpc3Q+KG1fc3VjY2Vzc29ycyk7CisgICAgfQorCisgICAgdW5zaWduZWQg
bnVtUHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9
CisgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nv
cih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAg
Y29uc3QgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3By
ZWRlY2Vzc29yczsgfQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1
cm4gbV9wcmVkZWNlc3NvcnM7IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9j
ayopOworICAgIGJvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wg
cmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKyAg
ICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OworICAgIAorICAgIEJhc2ljQmxvY2sodW5zaWdu
ZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAg
ICBJbnN0TGlzdCBtX2luc3RzOworICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworICAg
IFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBkb3VibGUgbV9mcmVxdWVuY3k7
Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBCYXNp
Y0Jsb2NrRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJs
b2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVl
cER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4i
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQmFzaWNCbG9jayogbV9ibG9jazsKK307
CisKK2lubGluZSBEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoY29uc3QgQmFzaWNCbG9jayog
YmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJCYXNpY0Jsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVj
aWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0NDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKCkKK3sK
KyAgICBtX2Nsb2JiZXJlZFJlZ3MgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CisgICAg
bV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOwor
ICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJl
UmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0Ojpj
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCitDQ2FsbFNwZWNpYWw6On5DQ2FsbFNwZWNpYWwo
KQoreworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25z
dCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAg
Y2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OlVzZSwgQXJnOjpHUCk7CisgICAgCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICAv
LyBGb3IgdGhlIHR5cGUsIHdlIGNhbiBqdXN0IHF1ZXJ5IHRoZSBhcmcncyB0eXBlLiBUaGUgYXJn
IHdpbGwgaGF2ZSBhIHR5cGUsIGJlY2F1c2Ugd2UKKyAgICAgICAgLy8gcmVxdWlyZSB0aGVzZSBh
cmdzIHRvIGJlIGFyZ3VtZW50IHJlZ2lzdGVycy4KKyAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdz
W2ldLCBBcmc6OlVzZSwgaW5zdC5hcmdzW2ldLnR5cGUoKSk7CisgICAgfQorfQorCitib29sIEND
YWxsU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6
ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChpbnN0LmFyZ3Nb
MV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgaWYgKGlzMzJCaXQoKSkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6
OkltbTY0OgorICAgICAgICBpZiAoaXM2NEJpdCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgIGNhc2UgQXJnOjpBZGRy
OgorICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAg
YnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAg
IGlmICghaW5zdC5hcmdzWzFdLmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAg
ICBpZiAoIWluc3QuYXJnc1tpXS5pc1JlZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGlmIChpbnN0LmFyZ3NbaV0gPT0gVG1wKHNjcmF0Y2hSZWdpc3RlcikpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29s
IENDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KQorewor
ICAgIC8vIEFyZyAxIGNhbiBiZSBhIHN0YWNrIGFkZHJlc3MgZm9yIHN1cmUuCisgICAgaWYgKGFy
Z0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNv
bnN0IFJlZ2lzdGVyU2V0JikKK3sKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lh
bDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250
ZXh0JikKK3sKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFy
Zzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaml0Lm1vdmUoaW5zdC5hcmdz
WzFdLmFzVHJ1c3RlZEltbVB0cigpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBqaXQuY2Fs
bChzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6VG1wOgor
ICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uZ3ByKCkpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzWzFdLmFzQWRkcmVz
cygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBDQ2Fs
bEhlbHBlcnM6Okp1bXAoKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIENDYWxsU3BlY2lhbDo6
ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7
Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmRl
ZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiZnVu
Y3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxTcGVjaWFs
X2gKKyNkZWZpbmUgQWlyQ0NhbGxTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworLy8gVXNlIHRoaXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEg
QyBjYWxsLiBBcmcgMCBpcyBvZiBjb3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0
aGUKKy8vIENDYWxsU3BlY2lhbCBvYmplY3QuIEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBj
YW4gYmUgYW4gSW1tUHRyLCBhIHJlZ2lzdGVyLCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFp
bmluZyBhcmdzIGFyZSBqdXN0IHRoZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkg
dGhpcyBjYWxsLiBGb3IgYXJndW1lbnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhh
dmUgdG8gZG8gdGhlIGdydW50IHdvcmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBm
YWN0LCB0aGUgb25seSByZWFzb24gd2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdp
c3RlcnMgYXMgYXJndW1lbnRzIHRvIGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFs
eXNpcyBjYW4gc2VlCisvLyB0aGF0IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3Jv
bmcgdG8gYXV0b21hZ2ljYWxseSByZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWlu
ZworLy8gdXNlZCBiZWNhdXNlIGlmIHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVt
LCB0aGVuIHRoZXknZCBhcHBlYXIgdG8gYmUgbGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBv
aW50IG9yIHRoZSBwcm9sb2d1ZSwgd2hpY2hldmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3Mg
Q0NhbGxTcGVjaWFsIDogcHVibGljIFNwZWNpYWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lh
bCgpOworICAgIH5DQ2FsbFNwZWNpYWwoKTsKKworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMg
cmVnaXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMg
cmVnaXN0ZXIgaXMgbm90CisgICAgLy8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxp
bmcgY29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNh
dXNlcworICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAg
IHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BS
MDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVk
TGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFs
aWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVk
IGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYs
IGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdl
bmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRl
OworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJy
aWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEFpckNDYWxsU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0NvZGU6
OkNvZGUoKQorICAgIDogbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKK3sKK30KKworQ29kZTo6
fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhkb3VibGUgZnJlcXVl
bmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNC
bG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3Vs
dCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdCh1
bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFs
dWUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3RhY2tTbG90
KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1ZSkpOworICAgIFN0YWNr
U2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKKyAgICBtX3N0YWNrU2xvdHMuYXBwZW5kKFdURjo6
bW92ZShzbG90KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lhbCogQ29kZTo6YWRk
U3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKK3sKKyAgICBTcGVjaWFs
KiByZXN1bHQgPSBzcGVjaWFsLmdldCgpOworICAgIG1fc3BlY2lhbHMuYXBwZW5kKFdURjo6bW92
ZShzcGVjaWFsKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ0NhbGxTcGVjaWFsKiBDb2Rl
OjpjQ2FsbFNwZWNpYWwoKQoreworICAgIGlmICghbV9jQ2FsbFNwZWNpYWwpIHsKKyAgICAgICAg
bV9jQ2FsbFNwZWNpYWwgPSBzdGF0aWNfY2FzdDxDQ2FsbFNwZWNpYWwqPigKKyAgICAgICAgICAg
IGFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbFNwZWNpYWw+KCkpKTsKKyAgICB9CisK
KyAgICByZXR1cm4gbV9jQ2FsbFNwZWNpYWw7Cit9CisKK3ZvaWQgQ29kZTo6cmVzZXRSZWFjaGFi
aWxpdHkoKQoreworICAgIEIzOjpyZXNldFJlYWNoYWJpbGl0eShtX2Jsb2Nrcyk7Cit9CisKK3Zv
aWQgQ29kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7
CisgICAgaWYgKHN0YWNrU2xvdHMoKS5zaXplKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTdGFj
ayBzbG90czpcbiIpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IHN0YWNrU2xvdHMo
KSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiOiAi
LCBkZWVwRHVtcChzbG90KSwgIlxuIik7CisgICAgfQorICAgIGlmIChzcGVjaWFscygpLnNpemUo
KSkgeworICAgICAgICBvdXQucHJpbnQoIlNwZWNpYWxzOlxuIik7CisgICAgICAgIGZvciAoU3Bl
Y2lhbCogc3BlY2lhbCA6IHNwZWNpYWxzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAi
LCBwb2ludGVyRHVtcChzcGVjaWFsKSwgIjogIiwgZGVlcER1bXAoc3BlY2lhbCksICJcbiIpOwor
ICAgIH0KKyAgICBpZiAobV9mcmFtZVNpemUpCisgICAgICAgIG91dC5wcmludCgiRnJhbWUgc2l6
ZTogIiwgbV9mcmFtZVNpemUsICJcbiIpOworICAgIGlmIChtX2NhbGxBcmdBcmVhU2l6ZSkKKyAg
ICAgICAgb3V0LnByaW50KCJDYWxsIGFyZyBhcmVhIHNpemU6ICIsIG1fY2FsbEFyZ0FyZWFTaXpl
LCAiXG4iKTsKKyAgICBpZiAobV9jYWxsZWVTYXZlUmVnaXN0ZXJzLnNpemUoKSkKKyAgICAgICAg
b3V0LnByaW50KCJDYWxsZWUgc2F2ZXM6ICIsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycywgIlxuIik7
Cit9CisKK3Vuc2lnbmVkIENvZGU6OmZpbmRGaXJzdEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0Cit7CisgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSgpICYmICFhdChpbmRleCkpCisgICAg
ICAgIGluZGV4Kys7CisgICAgcmV0dXJuIGluZGV4OworfQorCit1bnNpZ25lZCBDb2RlOjpmaW5k
TmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbmRG
aXJzdEJsb2NrSW5kZXgoaW5kZXggKyAxKTsKK30KKworQmFzaWNCbG9jayogQ29kZTo6ZmluZE5l
eHRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICByZXR1cm4gYXQoZmluZE5l
eHRCbG9ja0luZGV4KGJsb2NrLT5pbmRleCgpKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEyIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyQ29kZV9oCisjZGVmaW5lIEFpckNvZGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVk
ZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKKyNp
bmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ0NhbGxT
cGVjaWFsOworCisvLyBUaGlzIGlzIGFuIElSIHRoYXQgaXMgdmVyeSBjbG9zZSB0byB0aGUgYmFy
ZSBtZXRhbC4gSXQgcmVxdWlyZXMgYWJvdXQgNDB4IG1vcmUgYnl0ZXMgdGhhbiB0aGUKKy8vIGdl
bmVyYXRlZCBtYWNoaW5lIGNvZGUgLSBmb3IgZXhhbXBsZSBpZiB5b3UncmUgZ2VuZXJhdGluZyAx
TUIgb2YgbWFjaGluZSBjb2RlLCB5b3UgbmVlZCBhYm91dAorLy8gNDBNQiBvZiBBaXIuCisKK2Ns
YXNzIENvZGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvZGUpOworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENvZGUoKTsKKyAgICB+Q29kZSgpOworCisg
ICAgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAg
U3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQs
IFN0YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOworCisgICAgU3BlY2lhbCogYWRkU3BlY2lhbChz
dGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4pOworCisgICAgLy8gVGhpcyBpcyB0aGUgc3BlY2lhbCB5
b3UgbmVlZCB0byBtYWtlIGEgQyBjYWxsIQorICAgIENDYWxsU3BlY2lhbCogY0NhbGxTcGVjaWFs
KCk7CisKKyAgICBUbXAgbmV3VG1wKEFyZzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAgICAgICAgIHJldHVybiBU
bXA6OmdwVG1wRm9ySW5kZXgobV9udW1HUFRtcHMrKyk7CisgICAgICAgIGNhc2UgQXJnOjpGUDoK
KyAgICAgICAgICAgIHJldHVybiBUbXA6OmZwVG1wRm9ySW5kZXgobV9udW1GUFRtcHMrKyk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1UbXBzKEFyZzo6VHlwZSB0eXBlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAg
ICAgICAgICAgIHJldHVybiBtX251bUdQVG1wczsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAg
ICAgICAgICAgcmV0dXJuIG1fbnVtRlBUbXBzOworICAgICAgICB9CisgICAgfQorCisgICAgdW5z
aWduZWQgY2FsbEFyZ0FyZWFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsQXJnQXJlYVNpemU7
IH0KKworICAgIC8vIFlvdSBjYW4gY2FsbCB0aGlzIGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gdG8g
Zm9yY2UgYSBtaW5pbXVtIGNhbGwgYXJnIGFyZWEgc2l6ZS4KKyAgICB2b2lkIHJlcXVlc3RDYWxs
QXJnQXJlYVNpemUodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fY2FsbEFyZ0FyZWFT
aXplID0gc3RkOjptYXgoCisgICAgICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tB
bGlnbm1lbnRCeXRlcygpLCBzaXplKSkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZyYW1lU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVTaXplOyB9CisKKyAgICAvLyBPbmx5IHBoYXNlcyB0
aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24gYXJlIGFsbG93ZWQgdG8gc2V0IHRoaXMuIEN1cnJlbnRs
eSwgb25seQorICAgIC8vIEFpcjo6YWxsb2NhdGVTdGFjaygpIGRvZXMgdGhpcy4KKyAgICB2b2lk
IHNldEZyYW1lU2l6ZSh1bnNpZ25lZCBmcmFtZVNpemUpCisgICAgeworICAgICAgICBtX2ZyYW1l
U2l6ZSA9IGZyYW1lU2l6ZTsKKyAgICB9CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2Fs
bGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQorCisg
ICAgLy8gUmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIGRlbGV0ZXMgdW5yZWFjaGFibGUgYmxv
Y2tzLgorICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVy
YXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAg
IC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVs
bCBhbmQgaW5kZXgnID49IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmRGaXJzdEJsb2NrSW5kZXgo
dW5zaWduZWQgaW5kZXgpIGNvbnN0OworCisgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4
JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPiBpbmRleC4KKyAgICB1
bnNpZ25lZCBmaW5kTmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0OworCisgICAg
QmFzaWNCbG9jayogZmluZE5leHRCbG9jayhCYXNpY0Jsb2NrKikgY29uc3Q7CisKKyAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAg
ICA6IG1fY29kZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvZGUmIGNvZGUsIHVuc2lnbmVk
IGluZGV4KQorICAgICAgICAgICAgOiBtX2NvZGUoJmNvZGUpCisgICAgICAgICAgICAsIG1faW5k
ZXgobV9jb2RlLT5maW5kRmlyc3RCbG9ja0luZGV4KGluZGV4KSkKKyAgICAgICAgeworICAgICAg
ICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fY29kZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBt
X2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAg
ICAgY29uc3QgQ29kZSogbV9jb2RlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07
CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAw
KTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBz
aXplKCkpOyB9CisKKyAgICBjbGFzcyBTdGFja1Nsb3RzQ29sbGVjdGlvbiB7CisgICAgcHVibGlj
OgorICAgICAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQorICAgICAg
ICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5z
aWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNrU2xvdHMuc2l6ZSgpOyB9
CisgICAgICAgIFN0YWNrU2xvdCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
Y29kZS5tX3N0YWNrU2xvdHNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFN0YWNrU2xvdCogb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAg
ICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24s
IHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0
aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3Qg
U3RhY2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVk
IG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7
IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29u
c3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAgU3RhY2tTbG90c0NvbGxl
Y3Rpb24gc3RhY2tTbG90cygpIGNvbnN0IHsgcmV0dXJuIFN0YWNrU2xvdHNDb2xsZWN0aW9uKCp0
aGlzKTsgfQorICAgIAorICAgIGNsYXNzIFNwZWNpYWxzQ29sbGVjdGlvbiB7CisgICAgcHVibGlj
OgorICAgICAgICBTcGVjaWFsc0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAg
ICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFscy5zaXplKCk7IH0KKyAg
ICAgICAgU3BlY2lhbCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5t
X3NwZWNpYWxzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTcGVjaWFsKiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwg
bV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
dGVyYXRvcihjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGlu
ZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAg
ICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgU3BlY2lhbCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFNwZWNpYWxzQ29sbGVj
dGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAg
ICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29k
ZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTcGVjaWFsc0NvbGxlY3Rpb24gc3BlY2lhbHMoKSBj
b25zdCB7IHJldHVybiBTcGVjaWFsc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAgCisgICAgLy8g
VGhlIG5hbWUgaGFzIHRvIGJlIGEgc3RyaW5nIGxpdGVyYWwsIHNpbmNlIHdlIGRvbid0IGRvIGFu
eSBtZW1vcnkgbWFuYWdlbWVudCBmb3IgdGhlIHN0cmluZy4KKyAgICB2b2lkIHNldExhc3RQaGFz
ZU5hbWUoY29uc3QgY2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIG1fbGFzdFBoYXNlTmFtZSA9
IG5hbWU7CisgICAgfQorCisgICAgY29uc3QgY2hhciogbGFzdFBoYXNlTmFtZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGFzdFBoYXNlTmFtZTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
U3BlY2lhbD4+IG1fc3BlY2lhbHM7CisgICAgQ0NhbGxTcGVjaWFsKiBtX2NDYWxsU3BlY2lhbCB7
IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX251bUdQVG1wcyB7IDAgfTsKKyAgICB1bnNpZ25l
ZCBtX251bUZQVG1wcyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lU2l6ZSB7IDAgfTsKKyAg
ICB1bnNpZ25lZCBtX2NhbGxBcmdBcmVhU2l6ZSB7IDAgfTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0
TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgY29uc3QgY2hhciogbV9sYXN0UGhhc2VO
YW1lOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJGcmVxdWVudGVkQmxvY2tfaAorI2Rl
ZmluZSBBaXJGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYg
R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVkQmxvY2s7CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGlu
Zy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNp
bmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBnZW5lcmF0
ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRh
dGVJUigpKQorICAgICAgICB2YWxpZGF0ZShjb2RlKTsKKworICAgIC8vIElmIHdlJ3JlIGRvaW5n
IHN1cGVyIHZlcmJvc2UgZHVtcGluZywgdGhlIHBoYXNlIHNjb3BlIG9mIGFueSBwaGFzZSB3aWxs
IGFscmVhZHkgZG8gYSBkdW1wLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hvdWxkRHVt
cElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOwor
ICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2Ug
cnVuIG91ciBvcHRpbWl6YXRpb25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCisgICAgLy8gRklYTUU6
IEFkZCBBaXIgb3B0aW1pemF0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUwNDU2CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHdvdWxkIGhh
dmUgYSByZWFsIHJlZ2lzdGVyIGFsbG9jYXRvci4gVGhlbiwgd2UgY291bGQgdXNlIHNwaWxsRXZl
cnl0aGluZygpCisgICAgLy8gaW4gcGxhY2Ugb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBvbmx5
IGZvciB0ZXN0aW5nLgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUwNDU3CisgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOworCisgICAgLy8g
UHJpb3IgdG8gdGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0
LiBUaGlzIG1ha2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCisgICAgLy8gZG9lcyB0aGluZ3MgbGlr
ZSBpZGVudGlmeSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0u
CisgICAgaGFuZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CisKKyAgICAvLyBUaGlzIHR1cm5zIGFsbCBT
dGFjayBhbmQgQ2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNlIHRoZSBmcmFtZSBw
b2ludGVyLiBJdCBkb2VzCisgICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxsb2NhdGluZyBzdGFj
ayBzbG90cy4gSXQgc2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9wdGltYWwsIHNvIHdl
CisgICAgLy8gc2hvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2ZXJ5IG11Y2guCisg
ICAgYWxsb2NhdGVTdGFjayhjb2RlKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5
IGhhdmUgYSBjb2RlIGxheW91dCBvcHRpbWl6YXRpb24gaGVyZS4KKyAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc4CisKKyAgICAvLyBGSVhNRTogV2Ug
bmVlZCBhIGxhdGUgbGl2ZW5lc3MgYW5hbHlzaXMgb3ZlciByZWdpc3RlcnMgdG8gZmlsbCBpbiB0
aGUKKyAgICAvLyBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCkuCisgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUxMQorCisgICAgaWYgKHNob3Vs
ZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSk7CisKKyAgICAvLyBEbyBhIGZp
bmFsIGR1bXAgb2YgQWlyLiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBkbyB0aGlzIGV2ZW4gaWYgd2Ug
YXJlIGRvaW5nIHBlci1waGFzZSBkdW1waW5nLAorICAgIC8vIHNpbmNlIHRoZSBmaW5hbCBnZW5l
cmF0aW9uIGlzIG5vdCBhIHBoYXNlLgorICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAg
ICBkYXRhTG9nKCJBaXIgYWZ0ZXIgIiwgY29kZS5sYXN0UGhhc2VOYW1lKCksICIsIGJlZm9yZSBn
ZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8g
QW5kIG5vdywgd2UgZ2VuZXJhdGUgY29kZS4KKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUo
KTsKKyAgICBqaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1l
U2l6ZSgpKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIEdl
bmVyYXRpb25Db250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5jb2RlID0gJmNvZGU7CisgICAg
SW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tMYWJlbHMoY29k
ZS5zaXplKCkpOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVtcExp
c3Q+IGJsb2NrSnVtcHMoY29kZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0gWyZdIChDQ2Fs
bEhlbHBlcnM6Okp1bXAganVtcCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAgICAgIGlmIChi
bG9ja0xhYmVsc1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAubGlua1RvKGJs
b2NrTGFiZWxzW3RhcmdldF0sICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAgICB9OworCisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxvY2tKdW1wc1ti
bG9ja10ubGluaygmaml0KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7
CisgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5l
cmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVt
cC5pc1NldCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9wY29k
ZSA9PSBKdW1wCisgICAgICAgICAgICAmJiBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkgPT0gY29k
ZS5maW5kTmV4dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IGlmIChibG9jay0+bGFzdCgpLm9wY29kZSA9PSBSZXQpIHsKKyAgICAgICAgICAgIC8vIFdlIGN1
cnJlbnRseSBkb24ndCByZXByZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWly
LCBzbyB3ZSBuZWVkIHRvCisgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCisgICAg
ICAgICAgICBqaXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQo
KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBD
Q2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5sYXN0KCkuZ2VuZXJhdGUoaml0LCBjb250
ZXh0KTsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKQorICAgICAgICAgICAganVt
cCA9IGluc3QuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAgc3dpdGNoIChibG9jay0+
bnVtU3VjY2Vzc29ycygpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIEFTU0VSVCgh
anVtcC5pc1NldCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAg
ICAgICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9jay0+
c3VjY2Vzc29yQmxvY2soMCkpOworICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3JCbG9j
aygxKSAhPSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgICAgIGxpbmso
aml0Lmp1bXAoKSwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChh
dXRvJiBsYXRlUGF0aCA6IGNvbnRleHQubGF0ZVBhdGhzKQorICAgICAgICBsYXRlUGF0aC0+cnVu
KGppdCwgY29udGV4dCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckdlbmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJHZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJH
ZW5lcmF0ZV9oCisjZGVmaW5lIEFpckdlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHRha2VzIGFuIEFpcjo6
Q29kZSB0aGF0IGhhc24ndCBoYWQgYW55IHN0YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlvbmFsbHkg
aGFzbid0IGhhZCBhbnkKKy8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIGRvZXMgYm90aCBvZiB0
aG9zZSB0aGluZ3MsIGFuZCB0aGVuIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUgZ2l2ZW4K
Ky8vIENDYWxsSGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJh
Y2tzIGluIHRoZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzCisvLyBnZW5lcmF0aW5nLgordm9pZCBn
ZW5lcmF0ZShDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJHZW5l
cmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVy
YXRlZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisvLyBUaGlzIGlzIGdlbmVyYXRlZCBieSBvcGNvZGVf
Z2VuZXJhdG9yLnJiLgorI2luY2x1ZGUgIkFpck9wY29kZUdlbmVyYXRlZC5oIgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGlvbkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKyNkZWZpbmUgQWlyR2VuZXJh
dGlvbkNvbnRleHRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TaGFy
ZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0IHsKKyAgICB0eXBlZGVmIHZvaWQgTGF0ZVBh
dGhGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworICAgIHR5cGVk
ZWYgU2hhcmVkVGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKKworICAgIFZlY3RvcjxS
ZWZQdHI8TGF0ZVBhdGg+PiBsYXRlUGF0aHM7CisgICAgQ29kZSogY29kZTsKK307CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVT
YXZlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCit7Cisg
ICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJoYW5kbGVDYWxsZWVTYXZlcyIpOworCisg
ICAgUmVnaXN0ZXJTZXQgdXNlZENhbGxlZVNhdmVzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAg
ICAgICAgICBpbnN0LmZvckVhY2hUbXBGYXN0KAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0
bXApIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQXQgZmlyc3Qgd2UganVzdCByZWNvcmQgYWxs
IHVzZWQgcmVncy4KKyAgICAgICAgICAgICAgICAgICAgdXNlZENhbGxlZVNhdmVzLnNldCh0bXAu
cmVnKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
Tm93IHdlIGZpbHRlciB0byByZWFsbHkgZ2V0IHRoZSBjYWxsZWUgc2F2ZXMuCisgICAgdXNlZENh
bGxlZVNhdmVzLmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKwor
ICAgIGlmICghdXNlZENhbGxlZVNhdmVzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpID0gUmVnaXN0ZXJBdE9m
ZnNldExpc3QodXNlZENhbGxlZVNhdmVzKTsKKworICAgIHNpemVfdCBieXRlU2l6ZSA9IDA7Cisg
ICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJl
Z2lzdGVycygpKQorICAgICAgICBieXRlU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVf
dD4oLWVudHJ5Lm9mZnNldCgpKSwgYnl0ZVNpemUpOworCisgICAgU3RhY2tTbG90KiBzYXZlc0Fy
ZWEgPSBjb2RlLmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tTbG90S2luZDo6TG9ja2VkKTsK
KyAgICAvLyBUaGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUgYWxyZWFkeSBw
aW5uZWQgYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCisgICAgLy8gYXJlYS4gQWxzbywg
b3VyIHJ1bnRpbWUgZG9lcyBub3QgcmVxdWlyZSB1cyB0byBwaW4gdGhlIHNhdmVzIGFyZWEuIE1h
eWJlIHdlIHNob3VsZG4ndCBwaW4gaXQ/CisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAo
LWJ5dGVTaXplKTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zm
c2V0JiBlbnRyeSkgLT4gQXJnIHsKKyAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soc2F2ZXNBcmVh
LCBlbnRyeS5vZmZzZXQoKSArIGJ5dGVTaXplKTsKKyAgICB9OworCisgICAgSW5zZXJ0aW9uU2V0
IGluc2VydGlvblNldChjb2RlKTsKKyAgICAKKyAgICAvLyBGaXJzdCBpbnNlcnQgc2F2aW5nIGNv
ZGUgaW4gdGhlIHByb2xvZ3VlLgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50
cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0KAorICAgICAgICAgICAgMCwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3Zl
RG91YmxlLCBjb2RlWzBdLT5hdCgwKS5vcmlnaW4sCisgICAgICAgICAgICBUbXAoZW50cnkucmVn
KCkpLCBhcmdGb3IoZW50cnkpKTsKKyAgICB9CisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29k
ZVswXSk7CisKKyAgICAvLyBOb3cgaW5zZXJ0IHJlc3RvcmUgY29kZSBhdCBlcGlsb2d1ZXMuCisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgSW5zdCYgbGFzdCA9
IGJsb2NrLT5sYXN0KCk7CisgICAgICAgIGlmIChsYXN0Lm9wY29kZSAhPSBSZXQpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVu
dHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIGVudHJ5LnJl
ZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgbGFzdC5vcmlnaW4sCisgICAgICAgICAg
ICAgICAgYXJnRm9yKGVudHJ5KSwgVG1wKGVudHJ5LnJlZygpKSk7CisgICAgICAgIH0KKyAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRs
ZUNhbGxlZVNhdmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRsZUNh
bGxlZVNhdmVzX2gKKyNkZWZpbmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHBoYXNlIGlkZW50aWZpZXMgY2FsbGVlLXNhdmUg
cmVnaXN0ZXJzIGFuZCBhZGRzIGNvZGUgdG8gc2F2ZS9yZXN0b3JlIHRoZW0gaW4gdGhlCisvLyBw
cm9sb2d1ZS9lcGlsb2d1ZSB0byB0aGUgY29kZS4gSXQncyBhIG1hbmRhdG9yeSBwaGFzZS4KKwor
Ly8gRklYTUU6IEl0IHdvdWxkIGJlIGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3RpdmUg
d2l0aCB0aGUgQWlyIGNsaWVudCBhbmQgYWxzbyBtb3JlCisvLyBwb3dlcmZ1bC4KKy8vIFdlIHNo
b3VsZCBoYXZlIHNocmluayB3cmFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDQ1OAorLy8gV2Ugc2hvdWxkIG1ha2UgdGhpcyBpbnRlcmFjdCB3aXRoIHRo
ZSBjbGllbnQ6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTkK
Kwordm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJI
YW5kbGVDYWxsZWVTYXZlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zZXJ0aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9u
U2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRpb25z
KGJsb2NrLT5tX2luc3RzLCBtX2luc2VydGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnNlcnRpb25TZXRfaAorI2RlZmluZSBBaXJJ
bnNlcnRpb25TZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3Qu
aCIKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IEJhc2ljQmxvY2s7CitjbGFzcyBDb2RlOworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPEluc3Q+
IEluc2VydGlvbjsKKworY2xhc3MgSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBJbnNlcnRp
b25TZXQoQ29kZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAgfQor
CisgICAgQ29kZSYgY29kZSgpIHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgVD4KKyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYgaW5zZXJ0aW9uKQorICAgIHsK
KyAgICAgICAgbV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oaW5zZXJ0aW9uKSk7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGluc2VydElu
c3Qoc2l6ZV90IGluZGV4LCBJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVuZEluc2Vy
dGlvbihJbnNlcnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOworICAgIH0K
KyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBpbnNl
cnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAg
ICBpbnNlcnRJbnN0KGluZGV4LCBJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50
cykuLi4pKTsKKyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitwcml2
YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2luc2Vy
dGlvbnM7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK3ZvaWQgSW5zdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChvcGNvZGUsICIgIiwgbGlzdER1bXAoYXJncykpOworICAgIGlmIChvcmlnaW4pIHsKKyAg
ICAgICAgaWYgKGFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOworICAg
ICAgICBvdXQucHJpbnQoKm9yaWdpbik7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpckluc3RfaAorI2RlZmluZSBBaXJJbnN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJDQ2Fs
bEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKK2Ns
YXNzIFJlZ2lzdGVyU2V0OworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFt
ZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKKworc3RydWN0IEluc3Qg
eworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPEFyZywgMz4gQXJnTGlzdDsKKworICAgIElu
c3QoKQorICAgICAgICA6IG9yaWdpbihudWxscHRyKQorICAgICAgICAsIG9wY29kZShOb3ApCisg
ICAgeworICAgIH0KKyAgICAKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4p
CisgICAgICAgIDogb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAg
IHsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnIGFyZywgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzeyBhcmcsIGFyZ3VtZW50cy4uLiB9CisgICAgICAg
ICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9
CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IEFyZ0xpc3Qm
IGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzKGFyZ3VtZW50cykKKyAgICAgICAgLCBvcmlnaW4o
b3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIElu
c3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnTGlzdCYmIGFyZ3VtZW50cykKKyAg
ICAgICAgOiBhcmdzKFdURjo6bW92ZShhcmd1bWVudHMpKQorICAgICAgICAsIG9yaWdpbihvcmln
aW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gTm90
ZSB0aGF0IHRoZXNlIGZ1bmN0b3JzIGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ug
d2FudCB0byB1c2UgdGhlbSBmb3IgdGhpbmdzIHRoYXQKKyAgICAvLyBlZGl0IElSLiBJUiBpcyBt
ZWFudCB0byBiZSBlZGl0ZWQ7IGlmIHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5z
dCYiIHRoZW4geW91J3JlCisgICAgLy8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCisKKyAgICAv
LyBUaGlzIG9ubHkgd2Fsa3MgdGhvc2UgVG1wcyB0aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25l
ZCwgYW5kIGl0IGRvZXNuJ3QgdGVsbCB5b3UgdGhlaXIgcm9sZQorICAgIC8vIG9yIHR5cGUuCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKEFyZyYgYXJnIDogYXJn
cykKKyAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAg
ICB0eXBlZGVmIHZvaWQgRWFjaEFyZ0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJnOjpUeXBl
KTsKKyAgICAKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUp
LiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVy
YXRvci5yYi4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFj
aEFyZyhjb25zdCBGdW5jdG9yJik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0
bXAsIHJvbGUsIHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmb3JFYWNoVG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JF
YWNoQXJnKAorICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6
VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlwZSwg
ZnVuY3Rvcik7CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGluZyBjYW4gYmUg
ZWl0aGVyIEFyZyBvciBUbXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIFJl
dHVybnMgdHJ1ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9j
a3Mgc29tZSBleHRyYSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0
OworCisgICAgLy8gUmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5
IHRoaXMgb3BlcmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFD
bG9iYmVyZWRSZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgor
ICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVz
ZSB0aGlzIHRvIHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJl
IGRvbmUganVzdCBiZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVu
Y3ksIHJlcG9ydFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1
cm5zIHRydWUuCisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0
Jik7CisKKyAgICAvLyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9y
bXMgcmlnaHQgbm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8g
b3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBB
c3N1bWluZyB0aGlzIGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdp
bGwgaXQgc3RpbGwgYmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1
dCBhbiBBZGRyIHJlZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFy
Zywgb2YgY291cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0
aGlzOiBpdCB3YWxrcyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNw
aWxsaW5nOworICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYg
aXQgY2FuIHJlcGxhY2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAg
IC8vIGZpbmRzIGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNo
VG1wIHRvIGRvIGEgcmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1
bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9v
bCBhZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21l
IGNvZGUgZm9yIHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIg
YmFja2VuZC4gSWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUg
anVtcCB0aGF0IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRo
ZSAiZWxzZSIKKyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBp
cyBhdXRvLWdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVy
czo6SnVtcCBnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFyZ3M7Cisg
ICAgVmFsdWUqIG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBm
cm9tLgorICAgIE9wY29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gK
KyNkZWZpbmUgQWlySW5zdElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFp
clNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9y
RWFjaDxUbXA+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2
b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGluc3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBz
dHJ1Y3QgRm9yRWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHN0YXRpYyB2b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
KyAgICB7CisgICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9OworCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgSW5zdDo6Zm9y
RWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JF
YWNoKCp0aGlzLCBmdW5jdG9yKTsKK30KKworaW5saW5lIGJvb2wgSW5zdDo6aGFzU3BlY2lhbCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGFyZ3Muc2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7
Cit9CisKK2lubGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdz
KCkKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5zcGVj
aWFsKCktPmV4dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEluc3Q6
OnJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7
CisgICAgQVNTRVJUKGhhc1NwZWNpYWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9y
dFVzZWRSZWdpc3RlcnMoKnRoaXMsIHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBp
c1NoaWZ0VmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2
XzY0KQorICAgIHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsK
KyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGluc3QpOworICAgIHJldHVybiB0cnVlOworI2VuZGlm
Cit9ICAgCisKK2lubGluZSBib29sIGlzTHNoaWZ0MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0KQor
eworICAgIHJldHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJJbnN0SW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckxpdmVuZXNzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckxpdmVuZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVz
c19oCisjZGVmaW5lIEFpckxpdmVuZXNzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUg
IkIzSW5kZXhTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCisvLyBZb3UgY2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVy
IEFyZydzLiBJZiB5b3UgY29tcHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNr
IGxpdmVuZXNzIGFuZCB0bXAgbGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2Ns
YXNzIExpdmVuZXNzIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsK
KyAgICAgICAgbV9saXZlQXRIZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2
ZUF0VGFpbC5yZXNpemUoY29kZS5zaXplKCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxv
Y2s+IHNlZW47CisKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUg
KGNoYW5nZWQpIHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAg
Zm9yIChzaXplX3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7Cisg
ICAgICAgICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOwor
ICAgICAgICAgICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAg
ICAgICAgICAgICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5k
ZXgtLTspCisgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChp
bnN0SW5kZXgpKTsKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJs
b2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgp
ID09IG1fbGl2ZUF0SGVhZFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAg
ICAgICAgICAgICBsb2NhbENhbGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5k
KCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxv
Y2tdID0gbG9jYWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBi
bG9jaykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOwor
ICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sq
IGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107
CisgICAgfQorCisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJz
ZS4KKyAgICBjbGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxj
KExpdmVuZXNzJiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1f
bGl2ZShsaXZlbmVzcy5saXZlQXRUYWlsKGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xp
dmU7IH0KKyAgICAgICAgSGFzaFNldDxUaGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6
bW92ZShtX2xpdmUpOyB9CisKKyAgICAgICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGlu
c3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBB
cmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJn
LmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBt
X2xpdmUucmVtb3ZlKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8v
IE5leHQgaGFuZGxlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5o
YXNTcGVjaWFsKCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygp
LmZvckVhY2goCisgICAgICAgICAgICAgICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShUaGluZyhUbXAocmVnKSkpOworICAgICAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAg
ICAgLy8gRmluYWxseSBoYW5kbGUgdXNlJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhp
bmc+KAorICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChB
cmc6OmlzVXNlKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBIYXNoU2V0PFRoaW5nPiBtX2xpdmU7CisgICAgfTsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5k
ZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRl
eE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRUYWlsOworfTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpckxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0OSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
IyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBT
eWxsYWJ1czoKKyMKKyMgUm9sZXMgYW5kIHR5cGVzOgorIyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJh
bC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1
cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVy
YWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVn
aXN0ZXIgb3IgdmFsdWUKKyMgRDpGID0+IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVl
CisjIFVEOkYgPT4gdXNlIGFuZCBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIwor
IyBBcmd1bWVudCBraW5kczoKKyMgVG1wID0+IHRlbXBvcmFyeSBvciByZWdpc3RlcgorIyBJbW0g
PT4gMzItYml0IGltbWVkaWF0ZSBpbnQKKyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0CisjIEFkZHIg
PT4gYWRkcmVzcyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJhc2VJ
bmRleCBhZGRyZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhlIHBhcnNlciB2
aWV3cyB0aGVzZSB0aGluZ3MgYXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0aGF0IHRoZXkg
ZmFsbCBpbnRvIHR3byBkaXN0aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28sIGFsdGhvdWdo
IHRoaXMgZmlsZSB1c2VzIGEgcGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwgbm9uZSBvZiB0
aGUgd2hpdGVzcGFjZSBvcgorIyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBw
YXJzZXIuIEZvciBleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQyIFU6RywgVUQ6
RiBJbW0sIFRtcCBBZGRyLCBUbXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQga25vdyB0aGF0
IHRoaXMgaXMgdGhlIHNhbWUgYXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAgICAgSW1tLCBU
bXAKKyMgICAgIEFkZHIsIFRtcAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1Y3Rpb24gdGhh
dCB1c2VzIGEgR1BSIG9yIGFuIGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBhIGZsb2F0IHJl
Z2lzdGVyLgorCisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBsZWFkaW5nIGNh
cGl0YWwgKEFkZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1ibGVyCisjIEFQ
SSB0aGF0IGhhcyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitOb3AKKworQWRkMzIg
VTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAg
IEFkZHIsIFRtcAorICAgIFRtcCwgQWRkcgorCitBZGQzMiBVOkcsIFU6RywgRDpHCisgICAgSW1t
LCBUbXAsIFRtcAorCitBbmQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1w
CisgICAgVG1wLCBBZGRyCisgICAgQWRkciwgVG1wCisgICAgSW1tLCBBZGRyCisKK0xzaGlmdDMy
IFU6RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisKK011bDMyIFU6RywgVUQ6
RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisKKyMgTm90ZSB0aGF0IE1vdmUgb3BlcmF0
ZXMgb3ZlciB0aGUgZnVsbCByZWdpc3RlciBzaXplLCB3aGljaCBpcyBlaXRoZXIgMzItYml0IG9y
IDY0LWJpdCBkZXBlbmRpbmcgb24KKyMgdGhlIHBsYXRmb3JtLiBJJ20gbm90IGVudGlyZWx5IHN1
cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZzsgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGp1c3Qg
aGF2ZSBhCisjIE1vdmU2NCBpbnN0cnVjdGlvbi4gT1RPSCwgb3VyIE1hY3JvQXNzZW1ibGVycyBh
bHJlYWR5IGhhdmUgdGhpcyBub3Rpb24gb2YgIm1vdmUoKSIgdGhhdCBiYXNpY2FsbHkKKyMgbWVh
bnMgbW92ZVB0ci4KK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisg
ICAgSW1tNjQsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkUHRyICMgVGhpcyBtZWFucyB0aGF0
ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMgImxvYWQiIG5vdCAibW92ZSIu
CisgICAgSW5kZXgsIFRtcCBhcyBsb2FkUHRyCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlUHRyCisg
ICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgorCitNb3ZlMzIgVTpHLCBEOkcKKyAgICBUbXAsIFRt
cCBhcyB6ZXJvRXh0ZW5kMzJUb1B0cgorICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKKyAgICBJbmRl
eCwgVG1wIGFzIGxvYWQzMgorICAgIFRtcCwgQWRkciBhcyBzdG9yZTMyCisgICAgVG1wLCBJbmRl
eCBhcyBzdG9yZTMyCisKK01vdmVEb3VibGUgVTpGLCBEOkYKKyAgICBUbXAsIFRtcAorICAgIEFk
ZHIsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkRG91YmxlCisgICAg
VG1wLCBBZGRyIGFzIHN0b3JlRG91YmxlCisgICAgVG1wLCBJbmRleCBhcyBzdG9yZURvdWJsZQor
CitNb3ZlNjRUb0RvdWJsZSBVOkcsIEQ6RgorICAgIFRtcCwgVG1wCisKK01vdmVEb3VibGVUbzY0
IFU6RiwgRDpHCisgICAgVG1wLCBUbXAKKworQnJhbmNoQWRkMzIgVTpHLCBVOkcsIFVEOkcgL2Jy
YW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBS
ZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBB
ZGRyLCBUbXAKKworQnJhbmNoTXVsMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0Nv
bmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaFN1YjMyIFU6Rywg
VTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIElt
bSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisg
ICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE5lZzMyIFU6RywgVUQ6RyAvYnJhbmNoCisg
ICAgUmVzQ29uZCwgVG1wCisKK0p1bXAgL2JyYW5jaAorCitSZXQgL3Rlcm1pbmFsCisKK0JyZWFr
cG9pbnQgL3Rlcm1pbmFsCisKKyMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2aW9yLiBBIFBh
dGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3BlY2lhbCBvcGVy
YW5kLAorIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgorc3BlY2lhbCBQYXRjaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNl
U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0NvbW1v
bi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogbmFtZSkKKyAg
ICA6IG1fY29kZShjb2RlKQorICAgICwgbV9uYW1lKG5hbWUpCit7CisgICAgaWYgKHNob3VsZER1
bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGFmdGVyICIsIGNvZGUu
bGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRh
TG9nKGNvZGUpOworICAgIH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQor
ICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJpbmcoY29kZSk7Cit9CisKK1BoYXNlU2NvcGU6
On5QaGFzZVNjb3BlKCkKK3sKKyAgICBtX2NvZGUuc2V0TGFzdFBoYXNlTmFtZShtX25hbWUpOwor
ICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgdmFsaWRhdGUo
bV9jb2RlLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpclBoYXNlU2NvcGVfaAorI2RlZmluZSBBaXJQaGFzZVNjb3BlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworY2xhc3MgUGhhc2VTY29wZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhh
c2VTY29wZShDb2RlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8g
dGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAg
Y29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpclBoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJSZWdpc3RlclByaW9yaXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
UmVnaXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpCit7
CisgICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAg
IFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8R1BSUmVnPigpOworICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKTsKKyAgICAgICAg
ICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICAgICAg
ICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkp
OworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAg
ICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZl
LmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdw
cigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAg
ICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2Fs
bGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5k
KHJlZy5ncHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVy
biAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3JpdHlPcmRl
cigpCit7CisgICAgc3RhdGljIFZlY3RvcjxGUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisg
ICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8RlBSUmVnPigpOwor
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKTsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAg
WyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQo
cmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5mcHIoKSk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAg
ICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNh
dmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcu
ZnByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJl
c3VsdDsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpU
eXBlIHR5cGUpCit7CisgICAgc3RhdGljIFZlY3RvcjxSZWc+KiByZXN1bHRbQXJnOjpudW1UeXBl
c107CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uo
CisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQ
XSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChHUFJSZWcgcmVnIDogZ3By
c0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQXS0+YXBw
ZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXSA9IG5ldyBWZWN0b3I8
UmVnPigpOworICAgICAgICAgICAgZm9yIChGUFJSZWcgcmVnIDogZnByc0luUHJpb3JpdHlPcmRl
cigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXS0+YXBwZW5kKFJlZyhyZWcpKTsK
KyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHRbdHlwZV07Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0
ZXJQcmlvcml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJSZWdpc3RlclBy
aW9yaXR5X2gKKyNkZWZpbmUgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1
ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQUlJlZz4m
IGdwcnNJblByaW9yaXR5T3JkZXIoKTsKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHJzSW5Qcmlv
cml0eU9yZGVyKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+IHN0cnVjdCBSZWdpc3RlcnNJ
blByaW9yaXR5T3JkZXI7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3Jk
ZXI8R1BSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxHUFJSZWc+JiBpblByaW9yaXR5T3JkZXIo
KSB7IHJldHVybiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7IH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxG
UFJSZWc+JiBpblByaW9yaXR5T3JkZXIoKSB7IHJldHVybiBmcHJzSW5Qcmlvcml0eU9yZGVyKCk7
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+Citjb25zdCBWZWN0b3I8dHlwZW5hbWUg
QmFuazo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgcmV0dXJu
IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7Cit9CisK
K2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJSZWdpc3RlclByaW9yaXR5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgY2hh
ciogY29uc3QgU3BlY2lhbDo6ZHVtcFByZWZpeCA9ICImIjsKKworU3BlY2lhbDo6U3BlY2lhbCgp
CisgICAgOiBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVjaWFsOjp+U3BlY2lhbCgpCit7
Cit9CisKK0NTdHJpbmcgU3BlY2lhbDo6bmFtZSgpIGNvbnN0Cit7CisgICAgU3RyaW5nUHJpbnRT
dHJlYW0gb3V0OworICAgIGR1bXBJbXBsKG91dCk7CisgICAgcmV0dXJuIG91dC50b0NTdHJpbmco
KTsKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KGR1bXBQcmVmaXgpOworICAgIGR1bXBJbXBsKG91dCk7CisgICAgaWYgKG1f
aW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludChtX2luZGV4KTsKK30KKwordm9p
ZCBTcGVjaWFsOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgqdGhpcywgIjogIik7CisgICAgZGVlcER1bXBJbXBsKG91dCk7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNwZWNpYWxfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdl
bmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKyAgICAKKyAgICBTcGVjaWFs
KCk7CisgICAgdmlydHVhbCB+U3BlY2lhbCgpOworCisgICAgQ1N0cmluZyBuYW1lKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRh
PEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQo
SW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVk
IGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMgY2FsbGVkIG9uIGZvciBlYWNoIElu
c3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSB0bwor
ICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRzIHVzZWQgZnJvbSBqdXN0IG9uZSBJ
bnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUuIFNvLAorICAgIC8vIGlmIHlvdSB3
YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRvIGdlbmVyYXRlKCksIHRoZW4geW91
IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkgR2VuZXJhdGUgQWlyIHRoYXQgc3Rh
cnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRjaCBJbnN0LCBhbmQgdGhlbiBtZXJn
ZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBncmVh
dCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlIHRoYXQKKyAgICAvLyAgICBB
aXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3VjaCBkdXBsaWNhdGlvbiBkaWRuJ3Qg
Y2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAgICAvLyAgICByZWdpc3RlciBhc3Np
Z25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUgU3BlY2lhbCBtYWludGFpbiBhIEhh
c2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBhbmFseXNp
cworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNhbGwgaXMgcGVyZm9ybWVkIGp1c3Qg
YmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMgbm8gd2F5CisgICAgLy8gICAgZm9y
IHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5zdHMgdG8gYmUgcmVhbGxvY2F0ZWQu
IFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAgICBjb25zdWx0IHRoZSBIYXNoTWFw
LgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291bGQgdXNlICgxKSBhbmQgZmlyZSB1
cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxscy4KKyAgICAvLworICAgIC8vIE5v
dGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIHJlcG9ydFVzZWRSZWdpc3RlcnMo
KSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAvLyBhcyBnZW5lcmF0ZSgpLiBJ
ZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291bGQganVzdCBoYXZlIGVhY2ggU3Bl
Y2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVjdG9yIG9mIFJlZ2lzdGVyU2V0J3Mg
YW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUgcmlnaHQgb3JkZXIgaW4KKyAgICAv
LyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZmZXJlbmNlIGlzIHVubGlrZWx5IHRv
IGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAgIC8vIHBlcmZvcm1hbmNlIG9mIHRo
ZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8vIEN1cnJlbnRseSwgd2UgZG8gKDEp
IGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMo
SW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAgIAorICAgIHZpcnR1YWwgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29u
dGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJl
cmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7Cisg
ICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERlZXBTcGVjaWFsRHVtcCB7CitwdWJs
aWM6CisgICAgRGVlcFNwZWNpYWxEdW1wKGNvbnN0IFNwZWNpYWwqIHNwZWNpYWwpCisgICAgICAg
IDogbV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3BlY2lhbCkKKyAgICAg
ICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgU3Bl
Y2lhbCogbV9zcGVjaWFsOworfTsKKworaW5saW5lIERlZXBTcGVjaWFsRHVtcCBkZWVwRHVtcChj
b25zdCBTcGVjaWFsKiBzcGVjaWFsKQoreworICAgIHJldHVybiBEZWVwU3BlY2lhbER1bXAoc3Bl
Y2lhbCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGVjaWFsX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRl
ICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2lu
Y2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQoreworICAg
IFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxFdmVyeXRoaW5nIik7CisKKyAgICAv
LyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBwb2lu
dCBpbiBldmVyeSBiYXNpYyBibG9jay4KKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8
UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBMaXZlbmVzczxU
bXA+IGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
CisgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJs
b2NrKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkg
KyAxKTsKKworICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVkIGlu
ZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0ID0gdXNlZFJlZ2lzdGVyc1tibG9j
a11baW5kZXhdOworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbG9jYWxDYWxjLmxpdmUoKSkg
eworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAg
c2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAg
IHNldFVzZWRSZWdpc3RlcnMoYmxvY2stPnNpemUoKSk7CisgICAgICAgIAorICAgICAgICBmb3Ig
KHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAg
ICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAg
ICAgICAgc2V0VXNlZFJlZ2lzdGVycyhpbnN0SW5kZXgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KKyAgICBWZWN0b3I8U3Rh
Y2tTbG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6Om51bVR5cGVzXTsKKyAgICBmb3IgKHVuc2lnbmVk
IHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsrdHlwZUluZGV4KSB7
CisgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0YWNrU2xvdHNb
dHlwZUluZGV4XTsKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxBcmc6OlR5
cGU+KHR5cGVJbmRleCk7CisgICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUubnVtVG1wcyh0
eXBlKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51bVRtcHModHlw
ZSk7IHRtcEluZGV4LS07KQorICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0gPSBjb2Rl
LmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgIH0KKworICAg
IEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgUmVnaXN0
ZXJTZXQmIHNldEJlZm9yZSA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleF07CisgICAg
ICAgICAgICBSZWdpc3RlclNldCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0
SW5kZXggKyAxXTsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4
KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRt
cCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxsU3RhY2tTbG90
c1t0eXBlXVt0bXAudG1wSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcgPSBB
cmc6OnN0YWNrKHN0YWNrU2xvdCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBm
aWd1cmUgb3V0IGEgcmVnaXN0ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBkZXBlbmRzIG9uIHRo
ZSByb2xlLgorICAgICAgICAgICAgICAgICAgICBSZWcgY2hvc2VuUmVnOworICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVz
ZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5
T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9y
ZS5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUu
c2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJl
ZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpEZWY6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVy
KHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRBZnRlci5nZXQo
cmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZURlZjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVn
KSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2Vu
UmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAg
ICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAgIE9wY29k
ZSBtb3ZlID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7CisKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5z
dEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOworICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIGFyZyk7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAg
ICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2
ZXJ5dGhpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BpbGxFdmVyeXRo
aW5nX2gKKyNkZWZpbmUgQWlyU3BpbGxFdmVyeXRoaW5nX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xh
c3MgQ29kZTsKKworLy8gVGhpcyBpcyBhIHBoYXNlIGZvciB0ZXN0aW5nLiBJdCBiZWhhdmVzIGxp
a2UgYSByZWdpc3RlciBhbGxvY2F0b3IgaW4gdGhlIHNlbnNlIHRoYXQgaXQKKy8vIGVsaW1pbmF0
ZXMgdGVtcG9yYXJpZXMgZnJvbSB0aGUgcHJvZ3JhbS4gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkg
YWx3YXlzIHNwaWxsaW5nIGFsbAorLy8gdGVtcG9yYXJpZXMuIFRoZSByZXN1bHRpbmcgY29kZSBp
cyBnb2luZyB0byBiZSB2ZXJ5IGluZWZmaWNpZW50LiBUaGlzIHBoYXNlIGlzIGdyZWF0IGlmIHlv
dQorLy8gdGhpbmsgdGhhdCB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9y
LiBZb3UgY2FuIGNvbmZpcm0gdGhpcyBieSBydW5uaW5nIHRoaXMKKy8vIHBoYXNlIGluc3RlYWQg
b2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KKy8vCisvLyBOb3RlIHRoYXQgZXZlbiB0aG91Z2gg
dGhpcyBwaGFzZSBkb2VzIHRoZSBjaGVhcGVzdCB0aGluZyBwb3NzaWJsZSwgaXQncyBub3QgZXZl
biB3cml0dGVuIGluIGEKKy8vIHBhcnRpY3VsYXJseSBlZmZpY2llbnQgd2F5LiBTbywgZG9uJ3Qg
Z2V0IGFueSBpZGVhcyBhYm91dCB1c2luZyB0aGlzIHBoYXNlIHRvIHJlZHVjZSBjb21waWxlcgor
Ly8gbGF0ZW5jeS4gSWYgeW91IHdhbnRlZCB0byBkbyB0aGF0LCB5b3Ugc2hvdWxkIGNvbWUgdXAg
d2l0aCBhIGNsZXZlciBhbGdvcml0aG0gaW5zdGVhZCBvZiB1c2luZworLy8gdGhpcyBzaWxseSB0
aGluZy4KKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyU3BpbGxFdmVyeXRoaW5nX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTdGFja1Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3RhY2tTbG90LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBTdGFja1Nsb3Q6OnNldE9m
ZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKK3sKKyAgICBtX29mZnNldEZyb21GUCA9IHZhbHVl
OworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBtX3ZhbHVlLT5tX29mZnNldEZyb21GUCA9IHZh
bHVlOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgic3RhY2siLCBtX2luZGV4KTsKK30KKwordm9pZCBTdGFja1Nsb3Q6
OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRl
U2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIG9mZnNldEZyb21GUCA9ICIsIG1fb2Zmc2V0RnJvbUZQ
LCAiLCBraW5kID0gIiwgbV9raW5kKTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgb3V0LnBy
aW50KCIsIHZhbHVlID0gIiwgKm1fdmFsdWUpOworfQorCitTdGFja1Nsb3Q6OlN0YWNrU2xvdCh1
bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQga2luZCwgU3Rh
Y2tTbG90VmFsdWUqIHZhbHVlKQorICAgIDogbV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAgICAsIG1f
aW5kZXgoaW5kZXgpCisgICAgLCBtX29mZnNldEZyb21GUCh2YWx1ZSA/IHZhbHVlLT5vZmZzZXRG
cm9tRlAoKSA6IDApCisgICAgLCBtX2tpbmQoa2luZCkKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7
CisgICAgQVNTRVJUKGJ5dGVTaXplKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJTdGFja1Nsb3RfaAorI2RlZmluZSBBaXJTdGFja1Nsb3RfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBTdGFja1Nsb3RWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFN0YWNrU2xv
dCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhY2tTbG90KTsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5k
ZXg7IH0KKworICAgIHVuc2lnbmVkIGFsaWdubWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAoYnl0ZVNpemUoKSA8PSAxKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChi
eXRlU2l6ZSgpIDw9IDIpCisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgaWYgKGJ5dGVT
aXplKCkgPD0gNCkKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICByZXR1cm4gODsKKyAg
ICB9CisKKyAgICBTdGFja1Nsb3RWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisKKyAgICAvLyBaZXJvIG1lYW5zIHRoYXQgaXQncyBub3QgeWV0IGFzc2lnbmVkLgorICAg
IGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9
CisKKyAgICAvLyBUaGlzIHNob3VsZCB1c3VhbGx5IGp1c3QgYmUgY2FsbGVkIGZyb20gcGhhc2Vz
IHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbi4gQnV0IHlvdSBjYW4KKyAgICAvLyB0b3RhbGx5IGZv
cmNlIGEgc3RhY2sgc2xvdCB0byBsYW5kIGF0IHNvbWUgb2Zmc2V0LgorICAgIHZvaWQgc2V0T2Zm
c2V0RnJvbUZQKGludHB0cl90KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwg
dW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKik7CisgICAgCisg
ICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIGludHB0
cl90IG1fb2Zmc2V0RnJvbUZQOworICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOworICAgIFN0YWNr
U2xvdFZhbHVlKiBtX3ZhbHVlOworfTsKKworY2xhc3MgRGVlcFN0YWNrU2xvdER1bXAgeworcHVi
bGljOgorICAgIERlZXBTdGFja1Nsb3REdW1wKGNvbnN0IFN0YWNrU2xvdCogc2xvdCkKKyAgICAg
ICAgOiBtX3Nsb3Qoc2xvdCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zbG90KQorICAgICAgICAgICAg
bV9zbG90LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJp
bnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBTdGFja1Nsb3QqIG1f
c2xvdDsKK307CisKK2lubGluZSBEZWVwU3RhY2tTbG90RHVtcCBkZWVwRHVtcChjb25zdCBTdGFj
a1Nsb3QqIHNsb3QpCit7CisgICAgcmV0dXJuIERlZXBTdGFja1Nsb3REdW1wKHNsb3QpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyU3RhY2tTbG90X2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBUbXA6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAg
ICAgIG91dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoaXNSZWcoKSkgeworICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGlzR1AoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0bXAiLCBn
cFRtcEluZGV4KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCIl
ZnRtcCIsIGZwVG1wSW5kZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wX2gKKyNk
ZWZpbmUgQWlyVG1wX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJGUFJJbmZv
LmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworY2xhc3MgQXJnOworCisvLyBBIFRtcCBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIGEg
cmVnaXN0ZXIuIEl0IGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIGFueSBHUFIgb3IgRlBSLiBJdCBj
YW4gYWxzbworLy8gYmUgdXNlZCB0byByZWZlciB0byBhbiB1bmFsbG9jYXRlZCByZWdpc3RlciAo
aS5lLiBhIHRlbXBvcmFyeSkuIExpa2UgbWFueSBBaXIgY2xhc3Nlcywgd2UgdXNlCisvLyBkZWxp
YmVyYXRlbHkgdGVyc2UgbmFtaW5nIHNpbmNlIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhpcyBuYW1l
IGEgbG90LgorCitjbGFzcyBUbXAgeworcHVibGljOgorICAgIFRtcCgpCisgICAgICAgIDogbV92
YWx1ZSgwKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUbXAoUmVnIHJlZykKKyAgICB7
CisgICAgICAgIGlmIChyZWcpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAg
ICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlR1BSKHJlZy5ncHIoKSk7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUZQUihyZWcuZnByKCkpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0KKworICAgIGV4cGxp
Y2l0IFRtcChjb25zdCBBcmcmKTsKKworICAgIHN0YXRpYyBUbXAgZ3BUbXBGb3JJbmRleCh1bnNp
Z25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X3ZhbHVlID0gZW5jb2RlR1BUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHN0YXRpYyBUbXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7
CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBU
bXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGV4cGxpY2l0
IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKworICAgIGJvb2wg
aXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AobV92YWx1ZSk7
CisgICAgfQorCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0VuY29kZWRGUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUFIobV92YWx1ZSk7CisgICAgfQorCisgICAg
Ym9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlBSKG1f
dmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzR1BSKCkgfHwgaXNGUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFIobV92YWx1ZSk7CisgICAgfQorCisg
ICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBSKG1f
dmFsdWUpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAgcmV0dXJuIGZwcigp
OworICAgIH0KKworICAgIGJvb2wgaGFzVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICFpc1JlZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQVG1wKG1fdmFsdWUpOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRl
Y29kZUZQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBJ
bmRleCgpOworICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIGJvb2wg
aXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisK
KyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0OworCisgICAgVG1wKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAg
ICAgICAgOiBtX3ZhbHVlKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgewor
ICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuICp0aGlzID09IFRtcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7
CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gV1RGOjpJbnRIYXNoPGludD46Omhhc2gobV92YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0
ZToKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQKHVu
c2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xIC0gaW5kZXg7CisgICAgfQor
CisgICAgc3RhdGljIGludCBlbmNvZGVHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIHJl
dHVybiBlbmNvZGVHUChncHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQUihGUFJSZWcgZnByKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGVuY29kZUZQKGZwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIo
KSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFRtcCh1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdp
c3RlcigpKSArIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQVG1w
KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQUihNYWNyb0Fz
c2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0gaW5kZXg7CisgICAgfQorCisgICAgc3Rh
dGljIGJvb2wgaXNFbmNvZGVkR1AoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZh
bHVlID4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUChpbnQgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPCAwOworICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGlzRW5jb2RlZEdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNv
ZGVkR1AodmFsdWUpICYmIHZhbHVlIDw9IGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJl
Z2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQUihpbnQgdmFs
dWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmIHZhbHVlID49
IGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiAhaXNFbmNvZGVkR1BSKHZhbHVlKTsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmICFpc0VuY29kZWRGUFIodmFsdWUpOwor
ICAgIH0KKworICAgIHN0YXRpYyBHUFJSZWcgZGVjb2RlR1BSKGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEdQUlJlZz4oCisgICAgICAgICAgICAodmFsdWUgLSBlbmNvZGVHUFIoTWFjcm9Bc3Nl
bWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSkpICsgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIo
KSk7CisgICAgfQorCisgICAgc3RhdGljIEZQUlJlZyBkZWNvZGVGUFIoaW50IHZhbHVlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8RlBSUmVnPigKKyAgICAgICAgICAgIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJs
ZXI6OmZpcnN0RlBSZWdpc3RlcigpKSAtIHZhbHVlKSArCisgICAgICAgICAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBk
ZWNvZGVHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BU
bXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC0gKGVuY29kZUdQUihNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVk
IGRlY29kZUZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRG
UFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6
bGFzdEZQUmVnaXN0ZXIoKSkgLSAxKSAtIHZhbHVlOworICAgIH0KKworICAgIC8vIDA6IGVtcHR5
IFRtcAorICAgIC8vIHBvc2l0aXZlOiBHUFJzIGFuZCB0aGVuIEdQIHRlbXBzLgorICAgIC8vIG5l
Z2F0aXZlOiBGUFJzIGFuZCB0aGVuIEZQIHRlbXBzLgorICAgIGludCBtX3ZhbHVlOworfTsKKwor
c3RydWN0IFRtcEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFRtcCYga2V5
KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVG1w
JiBhLCBjb25zdCBUbXAmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBi
b29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRI
YXNoPEpTQzo6QjM6OkFpcjo6VG1wPiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpBaXI6OlRtcEhh
c2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OlRtcD4gOiBTaW1wbGVD
bGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpUbXA+IHsgfTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVG1wX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wSW5saW5lc19oCisjZGVmaW5l
IEFpclRtcElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFy
Zy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2lubGluZSBUbXA6OlRtcChjb25zdCBBcmcmIGFyZykKK3sK
KyAgICAqdGhpcyA9IGFyZy50bXAoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcElubGlu
ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFs
aWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNz
IFZhbGlkYXRlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVyKENvZGUmIGNvZGUsIGNvbnN0IGNo
YXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9kdW1w
QmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBWQUxJREFURShjb25k
aXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAg
ICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWlsKF9fRklMRV9fLCBf
X0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3RyaW5nIG1lc3Nh
Z2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisgICAgCisgICAgdm9pZCBydW4oKQorICAgIHsK
KyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiB2YWxpZFNsb3RzOworICAgICAgICBIYXNoU2V0
PEJhc2ljQmxvY2sqPiB2YWxpZEJsb2NrczsKKyAgICAgICAgSGFzaFNldDxTcGVjaWFsKj4gdmFs
aWRTcGVjaWFsczsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQor
ICAgICAgICAgICAgdmFsaWRCbG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgZm9yIChTdGFja1Ns
b3QqIHNsb3QgOiBtX2NvZGUuc3RhY2tTbG90cygpKQorICAgICAgICAgICAgdmFsaWRTbG90cy5h
ZGQoc2xvdCk7CisgICAgICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6IG1fY29kZS5zcGVjaWFs
cygpKQorICAgICAgICAgICAgdmFsaWRTcGVjaWFscy5hZGQoc3BlY2lhbCk7CisKKyAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRl
eCkgeworICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsK
KyAgICAgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAg
ICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6U3RhY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNsb3Rz
LmNvbnRhaW5zKGFyZy5zdGFja1Nsb3QoKSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2sp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIEFyZzo6U3BlY2lhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlk
U3BlY2lhbHMuY29udGFpbnMoYXJnLnNwZWNpYWwoKSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAq
YmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
aW5zdC5pc1ZhbGlkRm9ybSgpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAg
ICAgICAgICAgICAgaWYgKGluc3RJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKKyAgICAgICAg
ICAgICAgICAgICAgVkFMSURBVEUoaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5z
dCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIFZBTElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAi
IGluICIsICpibG9jaykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsaWRCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJJbiAiLCAqYmxv
Y2spKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBOT19SRVRVUk5fRFVFX1RP
X0NSQVNIIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5l
TnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAg
ICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNz
YWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAg
ICAgICAgICBvdXQucHJpbnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAg
ICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5l
TnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAi
XG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgIEFmdGVyICIsIG1fY29kZS5sYXN0UGhh
c2VOYW1lKCksICJcbiIpOworICAgICAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9DU3Ry
aW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAg
ICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAgZGF0YUxvZygiQmVmb3JlICIs
IG1fY29kZS5sYXN0UGhhc2VOYW1lKCksICI6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9k
dW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1
cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhtX2NvZGUpOworCisgICAgICAgIGRhdGFMb2coZmFp
bHVyZU1lc3NhZ2UpOworICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1l
LCBsaW5lTnVtYmVyLCBmdW5jdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAg
ICB9CisgICAgCisgICAgQ29kZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9y
ZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKENvZGUm
IGNvZGUsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRl
cihjb2RlLCBkdW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclZhbGlkYXRlX2gKKyNkZWZpbmUgQWlyVmFsaWRh
dGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2b2lkIHZhbGlkYXRlKENvZGUm
LCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2Rl
X2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NDQgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29kZQorICAgIGF0dHJf
cmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2FkcworICAgIGF0dHJfYWNjZXNzb3IgOmtp
bmQKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHNwZWNpYWwpCisgICAgICAgIEBuYW1lID0g
bmFtZQorICAgICAgICBAc3BlY2lhbCA9IHNwZWNpYWwKKyAgICAgICAgQGtpbmQgPSA6aW5zdAor
ICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAgICAgICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAg
ICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIG1hc21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93
bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVuZAorZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJf
cmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAgZGVmIGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAg
ICAgICAgQHJvbGUgPSByb2xlCisgICAgICAgIEB0eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisK
K2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9yZWFkZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAg
ICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICBAc2lnbmF0dXJlID0g
c2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9IGZvcm1zCisgICAgZW5kCitlbmQKKworY2xhc3Mg
S2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAor
CisgICAgZGVmIGluaXRpYWxpemUobmFtZSkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAg
IEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQKKworICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAg
aWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAg
ICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBv
dGhlci5zcGVjaWFsCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2lu
ZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9PSAiQWRkciIKKyAgICAgICAgICAgIFsiQWRkciIs
ICJTdGFjayIsICJDYWxsQXJnIl0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW2tpbmRdCisg
ICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGFyZ0tpbmRzCisgICAgICAgIEtpbmQuYXJn
S2luZHMoa2luZCkKKyAgICBlbmQKK2VuZAorCitjbGFzcyBGb3JtCisgICAgYXR0cl9yZWFkZXIg
OmtpbmRzLCA6YWx0TmFtZQorCisgICAgZGVmIGluaXRpYWxpemUoa2luZHMsIGFsdE5hbWUpCisg
ICAgICAgIEBraW5kcyA9IGtpbmRzCisgICAgICAgIEBhbHROYW1lID0gYWx0TmFtZQorICAgIGVu
ZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVO
dW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAg
ICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVt
YmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7
bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRl
ciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJp
bmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZwor
ICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8g
VG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAg
CisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisg
ICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdp
bn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAg
IGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9f
c30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19z
fTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChz
dHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAg
IHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5
PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAg
ICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAg
IyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3
aGVuIC9cQShbYS16QS1aMC05X10rKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXco
T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShb
IFx0XHJdKykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVu
IC9cQVssOipcL10vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXco
ZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFp
c2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlcikudG9f
c30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9IgorICAgICAgICBl
bmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJlc3VsdAorZW5k
CisKK2RlZiBpc1VEKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVSl8KEQpfChVRCkpXFovCitl
bmQKKworZGVmIGlzR0YodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChHKXwoRikpXFovCitlbmQK
KworZGVmIGlzS2luZCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEltbTY0
KXwoQWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpKVxaLworZW5kCisKK2RlZiBpc0tl
eXdvcmQodG9rZW4pCisgICAgaXNVRCh0b2tlbikgb3IgaXNHRih0b2tlbikgb3IgaXNLaW5kKHRv
a2VuKSBvcgorICAgICAgICB0b2tlbiA9PSAic3BlY2lhbCIgb3IgdG9rZW4gPT0gImFzIgorZW5k
CisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKFthLXpBLVowLTlf
XSspXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAg
IGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRh
dGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2Vu
CisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAg
ICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisg
ICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAg
ICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29t
bWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBk
ZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5n
fSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisg
ICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZwor
ICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRp
ZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisK
KyAgICBkZWYgY29uc3VtZVJvbGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAg
ICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHJvbGUgKFUsIEQsIG9yIFVEKSIpIHVubGVzcyBpc1VE
KHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAg
IGRlZiBjb25zdW1lVHlwZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAg
cGFyc2VFcnJvcigiRXhwZWN0ZWQgdHlwZSAoRyBvciBGKSIpIHVubGVzcyBpc0dGKHJlc3VsdCkK
KyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25z
dW1lS2luZAorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJv
cigiRXhwZWN0ZWQga2luZCAoSW1tLCBJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwg
b3IgUmVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAg
ICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICByZXN1bHQgPSB7
fQorICAgICAgICAKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49
IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgIGlmIHRva2VuID09ICJzcGVjaWFsIgorICAg
ICAgICAgICAgICAgIGNvbnN1bWUoInNwZWNpYWwiKQorICAgICAgICAgICAgICAgIG9wY29kZU5h
bWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fu
bm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKwor
ICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IE9wY29kZS5uZXcob3Bjb2RlTmFt
ZSwgdHJ1ZSkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0g
Y29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIGlmIHJlc3VsdFtvcGNvZGVOYW1l
XQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNv
ZGUiKSBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgb3Bjb2RlID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCBmYWxzZSkKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gb3Bjb2RlCisgICAgICAgICAgICAgICAg
ZW5kCisKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBbXQorICAgICAgICAgICAgICAgIGZv
cm1zID0gW10KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBpc1VEKHRva2Vu
KQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJv
bGUgPSBjb25zdW1lUm9sZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiOiIpCisg
ICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gY29uc3VtZVR5cGUKKyAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIDw8IEFyZy5uZXco
cm9sZSwgdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmQK
KworICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICIvIgorICAgICAgICAgICAgICAgICAgICBj
b25zdW1lKCIvIikKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB0b2tlbi5zdHJpbmcKKyAgICAg
ICAgICAgICAgICAgICAgd2hlbiAiYnJhbmNoIgorICAgICAgICAgICAgICAgICAgICAgICAgb3Bj
b2RlLmtpbmQgPSA6YnJhbmNoCisgICAgICAgICAgICAgICAgICAgIHdoZW4gInRlcm1pbmFsIgor
ICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLmtpbmQgPSA6dGVybWluYWwKKyAgICAgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQmFk
IC8gZGlyZWN0aXZlIikKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAg
ICAgIGFkdmFuY2UKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIGlz
S2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBraW5kcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0gbmls
CisgICAgICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBraW5kcyA8PCBLaW5kLm5ldyhjb25zdW1lS2luZCkKKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIHRva2VuID09ICIqIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBwYXJzZUVycm9yKCJDYW4gb25seSBhcHBseSAqIHRvIFRtcCIpIHVubGVzcyBraW5kc1stMV0u
bmFtZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kc1stMV0u
c3BlY2lhbCA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgi
KiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICJhcyIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdW1lKCJhcyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFt
ZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgd3JvbmcgbnVtYmVyIG9m
IGFyZ3VtZW50cyBmb3Igb3ZlcmxvYWQiKSB1bmxlc3Mga2luZHMubGVuZ3RoID09IHNpZ25hdHVy
ZS5sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzLmVhY2hfd2l0aF9pbmRleCB7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJJbW0iIG9yIGtpbmQubmFtZSA9PSAi
SW1tNjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRl
eF0ucm9sZSAhPSAiVSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNl
RXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tdXNlIGFyZ3VtZW50IikKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0udHlwZSAhPSAiRyIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBm
b3IgYSBub24tZ2VuZXJhbC1wdXJwb3NlIGFyZ3VtZW50IikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtcyA8PCBGb3Jt
Lm5ldyhraW5kcywgYWx0TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVz
cyBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl
bmQKKworICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZS5sZW5ndGggPT0gMAorICAgICAgICAg
ICAgICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAg
ICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoW10sIG5pbCkKKyAgICAgICAgICAgICAgICBlbmQKKwor
ICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMgPDwgT3ZlcmxvYWQubmV3KHNpZ25hdHVy
ZSwgZm9ybXMpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdAor
ICAgIGVuZAorZW5kCisKKyRmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5l
dyhJTzo6cmVhZCgkZmlsZU5hbWUpLCAkZmlsZU5hbWUpCiskb3Bjb2RlcyA9IHBhcnNlci5wYXJz
ZQorCiskc3RkZXJyLnB1dHMgIkdlbmVyYXRpbmcgY29kZSBmb3IgI3skZmlsZU5hbWV9LiIKKwor
ZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAi
dyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8g
R2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8g
bm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7Zmls
ZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgor
CisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlm
IC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgewor
ICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90
IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8Cisg
ICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAi
fTsiCisKKyAgICBvdXRwLnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1PcGNvZGVzID0g
I3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisg
ICAgb3V0cC5wdXRzICJjbGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7IgorICAgIG91
dHAucHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorfQorCisjIEZyb20gaGVyZSBvbiwgd2UgZG9u
J3QgdHJ5IHRvIGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgc2luY2Ugd2UncmUgdXNpbmcg
YSByZWN1cnNpdmUgcGF0dGVybgorIyBtYXRjaGVyLgorCitkZWYgbWF0Y2hGb3JtcyhvdXRwLCBz
cGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2sp
CisgICAgcmV0dXJuIGlmIGZvcm1zLmxlbmd0aCA9PSAwCisKKyAgICBpZiBmaWx0ZXJbZm9ybXNd
CisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgaWYgY29sdW1uSW5kZXggPj0gZm9ybXNb
MF0ua2luZHMubGVuZ3RoCisgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMQor
ICAgICAgICBjYWxsYmFja1tmb3Jtc1swXV0KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisgICAg
CisgICAgZ3JvdXBzID0ge30KKyAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgfCBmb3JtIHwKKyAg
ICAgICAga2luZCA9IGZvcm0ua2luZHNbY29sdW1uSW5kZXhdLm5hbWUKKyAgICAgICAgaWYgZ3Jv
dXBzW2tpbmRdCisgICAgICAgICAgICBncm91cHNba2luZF0gPDwgZm9ybQorICAgICAgICBlbHNl
CisgICAgICAgICAgICBncm91cHNba2luZF0gPSBbZm9ybV0KKyAgICAgICAgZW5kCisgICAgfQor
CisgICAgaWYgc3BlZWQgPT0gOmZhc3QgYW5kIGdyb3Vwcy5sZW5ndGggPT0gMQorICAgICAgICBt
YXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0
ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgb3V0
cC5wdXRzICJzd2l0Y2ggKCN7Y29sdW1uR2V0dGVyW2NvbHVtbkluZGV4XX0pIHsiCisgICAgZ3Jv
dXBzLmVhY2hfcGFpciB7CisgICAgICAgIHwga2V5LCB2YWx1ZSB8CisgICAgICAgIG91dHAucHV0
cyAiI2lmIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgICAgICBLaW5kLmFy
Z0tpbmRzKGtleSkuZWFjaCB7CisgICAgICAgICAgICB8IGFyZ0tpbmQgfAorICAgICAgICAgICAg
b3V0cC5wdXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToiCisgICAgICAgIH0KKyAgICAgICAgbWF0
Y2hGb3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVy
LCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAg
b3V0cC5wdXRzICIjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisg
ICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgb3V0cC5wdXRzICJ9IgorZW5kCisKK2RlZiBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVl
ZCwgaW5zdCkKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bjb2RlKSB7IgorICAg
ICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRw
LnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAor
ICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bmVlZE92ZXJsb2FkU3dpdGNoID0gKChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkgb3Igc3Bl
ZWQgPT0gOnNhZmUpCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+YXJn
cy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgb3Bjb2RlLm92
ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5l
ZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNo
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVu
ZAorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91
dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRz
ICJ9IgorZW5kCisgICAgCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIHNwZWVkLCBp
bnN0KQorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KSB7CisgICAgICAg
IHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAg
ICAgICB5aWVsZCBvcGNvZGUsIG5pbCwgbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNv
bHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAg
ICAgICAgICAgICAgICIje2luc3R9LT5hcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAg
ICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAg
ICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5H
ZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIGVuZAorICAgIH0KK2VuZAorCit3cml0
ZUgoIk9wY29kZVV0aWxzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVk
ZSBcIkFpckluc3QuaFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJTcGVjaWFsLmhc
IiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRy
dXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1l
IFQ+IgorICAgIG91dHAucHV0cyAiaW5saW5lIFQqIG9wZ2VuSGlkZGVuUHRySWRlbnRpdHkoVCog
cG9pbnRlcikgeyByZXR1cm4gcG9pbnRlcjsgfSIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BH
RU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlk
ZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgor
ICAgIG91dHAucHV0cyAifSB3aGlsZSAoZmFsc2UpIgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5zdDo6Zm9yRWFjaEFy
Zyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJ
bnN0T3ZlcmxvYWQob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3Zl
cmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRz
ICJmdW5jdG9yKGFyZ3NbMF0sIEFyZzo6VXNlLCBBcmc6OkdQKTsgLy8gVGhpcyBpcyBiYXNpY2Fs
bHkgYm9ndXMsIGJ1dCBpdCB3b3JrcyBmIGFuYWx5c2VzIG1vZGVsIFNwZWNpYWwgYXMgYW4gaW1t
ZWRpYXRlLiIKKyAgICAgICAgICAgIG91dHAucHV0cyAiYXJnc1swXS5zcGVjaWFsKCktPmZvckVh
Y2hBcmcoKnRoaXMsIHNjb3BlZExhbWJkYTxFYWNoQXJnQ2FsbGJhY2s+KGZ1bmN0b3IpKTsiCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5k
ZXggeworICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9s
ZSA9IG5pbAorICAgICAgICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAgICAgICAgICAgICB3
aGVuICJVIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAgICAgICAgICAgICAg
ICB3aGVuICJEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKKyAgICAgICAgICAg
ICAgICB3aGVuICJVRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VEZWYiCisgICAg
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZnVu
Y3RvcihhcmdzWyN7aW5kZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJnLnR5cGV9UCk7Igor
ICAgICAgICAgICAgfQorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9IgorCisg
ICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+IgorICAgIG91dHAu
cHV0cyAiQUxXQVlTX0lOTElORSBib29sIGlzVmFsaWRGb3JtKE9wY29kZSBvcGNvZGUsIEFyZ3Vt
ZW50cy4uLiBhcmd1bWVudHMpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIkFy
Zzo6S2luZCBraW5kc1tzaXplb2YuLi4oQXJndW1lbnRzKV0gPSB7IGFyZ3VtZW50cy4uLiB9OyIK
KyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5l
YWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNv
ZGUubmFtZX06IgorICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoc2l6ZW9mLi4uKEFyZ3VtZW50
cykpIHsiCisgICAgICAgIHVubGVzcyBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3Bjb2Rl
Lm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiCisg
ICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7IHwgY29sdW1uSW5kZXggfCAib3Bn
ZW5IaWRkZW5QdHJJZGVudGl0eShraW5kcylbI3tjb2x1bW5JbmRleH1dIiB9CisgICAgICAgICAg
ICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBjYWxsYmFjayA9
IHByb2MgeworICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAg
ICBzcGVjaWFsID0gKG5vdCBmb3JtLmtpbmRzLmRldGVjdCB7IHwga2luZCB8IGtpbmQuc3BlY2lh
bCB9KQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTigje3NwZWNp
YWx9KTsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0
cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJh
Y2spCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9Cisg
ICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJy
ZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7ICIK
KyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29sIGlzVGVybWlu
YWwoT3Bjb2RlIG9wY29kZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dp
dGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9w
Y29kZSB8CisgICAgICAgIGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5hbCBvciBvcGNvZGUua2lu
ZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06
IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAg
b3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAg
b3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlSCgiT3Bjb2RlR2VuZXJh
dGVkIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3RJ
bmxpbmVzLmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhc
IiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5n
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIK
KyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlz
LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2Ug
I3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bj
b2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAg
ICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFt
ZXNwYWNlIFdURiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVmFsaWRGb3Jt
KCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6
c2FmZSwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAg
ICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhcmdzLnNp
emUoKSA8IDEpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgorICAgICAgICAgICAg
b3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9S
RVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAgICAgICAgb3Zl
cmxvYWQuc2lnbmF0dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBpbmRleCB8
CisgICAgICAgICAgICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZQor
ICAgICAgICAgICAgICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUKKyAg
ICAgICAgICAgICAgICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAgICAgICAgICBu
ZWVkc01vcmVWYWxpZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2Ug
ZG9uJ3QgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAgICAgICAgICAj
IGtpbmQgaW1wbGllcyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBp
cyB0aGUgdHlwZS4gQW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gdmFsaWRh
dGUgdGhlIHR5cGUgaWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBpZiBraW5kLm5h
bWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tp
bmRleH1dLnRtcCgpLmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJpZiAoIWlzI3tvcGNvZGUubmFtZX1WYWxpZCgqdGhpcykpIgorICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5k
CisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0i
CisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5k
ZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7
IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAg
ICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAgIGlmIG9wY29kZS5z
cGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgpIgorICAgICAgICAg
ICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdF
Tl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlzLCBhcmdJbmRleCkp
OyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhlIGFyZ0luZGV4Lgor
ICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7IgorCisgICAgICAgICAg
ICBudW1BcmdzID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAgICAgICAgIHwgb3Zl
cmxvYWQgfAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgKKyAgICAg
ICAgICAgIH0ubWF4CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFyZ3MudGltZXMgewor
ICAgICAgICAgICAgICAgIHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
Y2FzZSAje2FyZ0luZGV4fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGFsbCBvZiB0
aGUgZm9ybXMgb2YgYWxsIG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBvciBkb24ndCwgYWRt
aXQgYW4gYWRkcmVzcworICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRleC4gV2UgZXhwZWN0
IHRoaXMgdG8gYmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgICAgIG51bVllcyA9
IDAKKyAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICBvcGNvZGUub3Zl
cmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAg
ICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAg
ICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRl
eF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHdl
IGRlbGliZXJhdGVseSB0ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdlIGVuZCB1cCB3aXRo
IG5vIGZvcm1zLCB3ZSB3YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkgdGhhdCBBZGRyZXNz
IGlzIGluYWRtaXNzaWJsZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAg
ICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgIyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAgICAgICAgICBuZWVk
T3ZlcmxvYWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpCisKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3Zl
cmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAgICAgICAgICAgICAg
ICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0IHdlIHdhbnQuCisg
ICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAgICAgICAg
ICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2gg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAg
ICAgICAgICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0byBkZWZhdWx0Lgor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9
OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNh
c2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3ZSB0ZXN0IHRoZSBo
eXBvdGhlc2lzIHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3JtLgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmdzWyN7Y29s
dW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaWx0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3Jt
cyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVtaXQgbm8gY29kZSwg
c2luY2Ugd2UgY2Fubm90IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpz
YWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQor
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRP
dmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6
IgorICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBvdXRwLnB1dHMg
In0iCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0
cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgSW5zdDo6Z2Vu
ZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KSIKKyAg
ICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oaml0KTsiCisgICAg
b3V0cC5wdXRzICJVTlVTRURfUEFSQU0oY29udGV4dCk7IgorICAgIG91dHAucHV0cyAiQ0NhbGxI
ZWxwZXJzOjpKdW1wIHJlc3VsdDsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpm
YXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAg
ICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KGFyZ3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250ZXh0KSk7IgorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgICAgICBt
ZXRob2ROYW1lID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgbWV0aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICBpZiBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICAgICAgb3V0cC5wcmlu
dCAicmVzdWx0ID0gIgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnByaW50ICJq
aXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMuZWFjaF93aXRoX2lu
ZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBp
ZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgIiwgIgorICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1lCisgICAgICAgICAg
ICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1
cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZnByKCkiCisgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIkltbSIKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIK
KyAgICAgICAgICAgICAgICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tNjQoKSIKKyAgICAgICAgICAgICAgICB3
aGVuICJBZGRyIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKKyAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJSZWxDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAg
ICB3aGVuICJSZXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7
aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRw
LnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAicmV0
dXJuIHJlc3VsdDsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3
ICsxNzAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZv
ckpldHRpc29uKCk7ICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwog
ICAgIAogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMuCiAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZy5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Zy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYgQEAgcHVibGljOgogICAgIHVuc2ln
bmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIAogICAgIGJvb2wgaXNT
ZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IGludmFsaWQoKTsgfQotICAgIGJvb2wgb3Bl
cmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJs
ZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gZGVsZXRlZCgpOyB9CkBA
IC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFsbFJlZ3NJdGVyYWJsZSB7CisgICAgcHVibGljOgor
CisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAg
aXRlcmF0b3IoKSB7IH0KKworICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3IoUmVnIHJlZykK
KyAgICAgICAgICAgICAgICA6IG1fcmVnSW5kZXgocmVnLmluZGV4KCkpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25zdCB7IHJl
dHVybiBSZWc6OmZyb21JbmRleChtX3JlZ0luZGV4KTsgfQorCisgICAgICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9yZWdJbmRl
eCA9IFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpLm5leHQoKS5pbmRleCgpOworICAgICAgICAg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9yZWdJbmRleCA9PSBvdGhlci5tX3JlZ0luZGV4OworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAg
ICAgICAgdW5zaWduZWQgbV9yZWdJbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAg
ICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9CisgICAg
fTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgeyByZXR1cm4gQWxsUmVnc0l0
ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZhbGlkKCkgeyBy
ZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
QXRPZmZzZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDcgKzQyLDcgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRM
aQogICAgIGlmIChvZmZzZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkKICAgICAgICAg
b2Zmc2V0ID0gLShzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0ZXJzKSAqIHNp
emVvZih2b2lkKikpOwogCi0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0g
UmVnOjpsYXN0KCk7cmVnID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6
Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAg
IGlmIChyZWdpc3RlclNldC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5kKFJlZ2lzdGVy
QXRPZmZzZXQocmVnLCBvZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2Yodm9p
ZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9m
ZnNldExpc3QuaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBA
IHB1YmxpYzoKICAgICAgICAgbV9yZWdpc3RlcnMuY2xlYXIoKTsKICAgICB9CiAKLSAgICBzaXpl
X3Qgc2l6ZSgpCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJu
IG1fcmVnaXN0ZXJzLnNpemUoKTsKICAgICB9CkBAIC02Niw2ICs2Niw5IEBAIHB1YmxpYzoKICAg
ICBSZWdpc3RlckF0T2Zmc2V0KiBmaW5kKFJlZykgY29uc3Q7CiAgICAgdW5zaWduZWQgaW5kZXhP
ZihSZWcpIGNvbnN0OyAvLyBSZXR1cm5zIFVJTlRfTUFYIGlmIG5vdCBmb3VuZC4KIAorICAgIFZl
Y3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJl
dHVybiBtX3JlZ2lzdGVycy5iZWdpbigpOyB9CisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+
Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVycy5lbmQoKTsg
fQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0PiBtX3JlZ2lzdGVyczsK
IH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lv
biAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTMgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVj
dG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4K
KyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0cygpKQorICAgICAgICAg
ICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgIH0KICAgICAKIHByaXZhdGU6
CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJbmRleDogU291cmNlL1dU
Ri9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9u
IDE5MTU4NikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMg
KzEsMTkgQEAKKzIwMTUtMTAtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKwor
ICAgICAgICBDcmVhdGUgYSBzdXBlciByb3VnaCBwcm90b3R5cGUgb2YgQjMKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDI4MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6
cmFuZ2VzT3ZlcmxhcCk6IE5pY2UgdXRpbGl0eSBmb3IgY2hlY2tpbmcgaWYgcmFuZ2VzIG92ZXJs
YXAuCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBhIEVOQUJMRShCM19KSVQpIGZlYXR1
cmUgZmxhZy4KKyAgICAgICAgKiB3dGYvU2NvcGVkTGFtYmRhLmg6IEFkZGVkLiBUaGlzIGFsbG93
cyB1cyB0byBkbyB6ZXJvLWFsbG9jYXRpb24sIHplcm8tY29weSBleHRlcm4gbGFtYmRhcy4KKyAg
ICAgICAgKFdURjo6c2NvcGVkTGFtYmRhKToKKyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5oOgor
ICAgICAgICAoV1RGOjpjcmVhdGVTaGFyZWRUYXNrKToKKwogMjAxNS0xMC0yMSAgRmlsaXAgUGl6
bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZhY3RvciBvdXQgdGhlIGdyYXBoIG5v
ZGUgd29ya2xpc3RzIGZyb20gREZHIGludG8gV1RGCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvV1RG
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcg
QEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5QjFCN0FBQTAzMDA5NDk4
RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJMEZFQjNEQ0YxQkI1RDY4NDAwOUQ3QUFEIC8qIFNo
YXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi87IH07CiAJCTBGRUIz
REQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0REMDFCQjczNjZCMDA5
RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICovOyB9OworCQkwRkVDODRCMTFCREFD
RDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFt
YmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJEODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3Jr
bGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi87IH07CiAJCTBG
RUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyog
VGlueVB0clNldC5oICovOyB9OwogCQkwRkY4NjA5NTFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRl
ckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovOyB9
OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3Jk
TG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JkTG9jay5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hh
cmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRUYXNrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAv
KiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAv
KiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJT
ZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUx
MjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04
NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQ
YWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNG
LmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFj
Lm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAq
LywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0MTIzRkYgLyogU2VnbWVudGVkVmVjdG9yLmggKi8s
CiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oICov
LAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQxMjNGRiAvKiBTSEExLmNwcCAqLywKQEAgLTEyNDQs
NiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50
aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgy
NUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVj
aWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRp
bnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4dHJh
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24g
MTkxNTg2KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MTksNiArNDE5LDE2IEBAIGlubGluZSBUIGxlZnRTaGlmdFdpdGhTYXR1cmF0aW9uKFQgdmFs
dWUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5l
IGJvb2wgcmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQgbGVmdE1heCwgVCByaWdodE1pbiwgVCBy
aWdodE1heCkKK3sKKyAgICBpZiAobGVmdE1pbiA8PSByaWdodE1pbiAmJiBsZWZ0TWF4ID49IHJp
Z2h0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocmlnaHRNaW4gPD0gbGVmdE1p
biAmJiByaWdodE1heCA+PSBsZWZ0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gI2lmbmRlZiBX
VEZfTWF0aEV4dHJhc19oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3NiwxMiArNzc2LDIw
IEBACiAjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJVCAxCiAjZW5kaWYKIAorLyogVGhlIEIz
IGNvbXBpbGVyIGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNrZW5kIHRoYXQgaXMgc3RpbGwgaW4gZGV2
ZWxvcG1lbnQuIFdlIHdpbGwga2VlcCBpdCBidWlsZGluZworICAgb24gRGFyd2luL3g4Ni02NCBm
b3Igbm93LCB0aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2VwdCBmb3IgdGVzdHMuICovCisjaWYgT1Mo
REFSV0lOKSAmJiBDUFUoWDg2XzY0KQorI2RlZmluZSBFTkFCTEVfQjNfSklUIDEKKyNlbmRpZgor
CiAvKiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFpbGFibGUsIHRoZW4gZGlzYWJsZSB1
cHBlciB0aWVycyBhcyB3ZWxsOiAqLwogI2lmICFFTkFCTEUoSklUKQotI3VuZGVmIEVOQUJMRV9E
RkdfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVkZWZpbmUgaXQuICovCi0jdW5k
ZWYgRU5BQkxFX0ZUTF9KSVQgICAgICAvKiBVbmRlZiBzbyB0aGF0IHdlIGNhbiByZWRlZmluZSBp
dC4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI3VuZGVmIEVOQUJMRV9GVExfSklUCisjdW5k
ZWYgRU5BQkxFX0IzX0pJVAogI2RlZmluZSBFTkFCTEVfREZHX0pJVCAwCiAjZGVmaW5lIEVOQUJM
RV9GVExfSklUIDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJVCAwCiAjZW5kaWYKIAogLyogQ291bnRz
IHVzZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxpbmcgY291bnRlcnMuIEJlIHN1cmUg
dG8gYWxzbwpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2Nv
cGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKworbmFtZXNwYWNlIFdURiB7CisK
Ky8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRseSBwYXNzIGxhbWJkYXMg
d2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKKy8vIHRlbXBsYXRlIHNwZWNp
YWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxkIGJlIGRlY2xhcmVkIGFz
OgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGludCwgU3R1
ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKKy8vCisvLyB2b2lkIGZvbyhz
Y29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAoaW50IHgsIFN0dWZmJiB5
KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3RlIHRoYXQgdGhpcyByZWxpZXMg
b24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1iZGEgaXMgb25seSB2YWxp
ZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVuY2UgdGhlIG5hbWUgU2NvcGVk
TGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNjb3BlZExh
bWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+
IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwpKHZvaWQqIGFy
ZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQqIGFyZyA9IG51bGxwdHIpCisg
ICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmcoYXJnKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1
bWVudHMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsKG1fYXJnLCBzdGQ6OmZv
cndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCitwcml2YXRlOgor
ICAgIFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKTsK
KyAgICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwg
dHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1
bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlw
ZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1l
bnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNzZWRGdW5j
dG9yPgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2VkRnVuY3RvciYmIGZ1bmN0b3IpCisg
ICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPihpbXBs
RnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9yKHN0ZDo6Zm9yd2FyZDxQYXNzZWRG
dW5jdG9yPihmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBS
ZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwgQXJndW1lbnRUeXBlcyYmLi4u
IGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY29wZWRMYW1i
ZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisgICAgICAgICAgICBzdGQ6OmZvcndh
cmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgRnVuY3RvciBt
X2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1l
IEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4gc2Nv
cGVkTGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBTY29wZWRMYW1iZGFG
dW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0
b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U2NvcGVkTGFtYmRh
OwordXNpbmcgV1RGOjpzY29wZWRMYW1iZGE7CisKKyNlbmRpZiAvLyBTY29wZWRMYW1iZGFfaAor
CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvV1RGL3d0
Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDExIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3Ip
CisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkKKyAgICB7CisgICAgfQor
CiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVu
dHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwxMSBAQCBSZWY8U2hhcmVkVGFzazxG
dW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hh
cmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9Cit0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVk
VGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNrKEZ1bmN0b3ImJiBmdW5jdG9yKQor
eworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlw
ZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
RgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264097</attachid>
            <date>2015-10-26 16:51:56 -0700</date>
            <delta_ts>2015-10-26 23:45:51 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>624575</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MiBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFjY2VwdFJvb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRSb290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OmFjY2VwdEludGVybmFscyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjphY2NlcHRPcGVyYW5kcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OmFjY2VwdE9wZXJhbmRzTGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUxvYWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBZGQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFuZExvYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAgICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzTG93
ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICog
YjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpvZmZzZXQpOgorICAg
ICAgICAoSlNDOjpCMzo6TWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKToKKyAgICAgICAgKiBiMy9C
M09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzQ2hlY2tNYXRo
KToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZGF0
YSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAo
SlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6
UGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIz
L0IzUGF0Y2hwb2ludFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2lu
dFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpC
Mzo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL0IzUGhhc2VTY29wZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpQcm9jZWR1cmUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjp+UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2sp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3Jb
XSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjppdGVyYXRvcjo6ZmluZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24p
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlv
bjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRv
cltdKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKiBi
My9CM1Byb2NlZHVyZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3RLaW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90S2luZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjph
Y2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpieXRlU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6a2luZCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja1Nsb3RWYWx1ZTo6b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
U2xvdFZhbHVlOjpzZXRPZmZzZXRGcm9tRlApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OlN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6ZHVtcCk6CisgICAgICAgICogYjMvQjNT
dGFja21hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFja21hcCk6
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6c2V0T3BhcXVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN0YWNrbWFwOjpvcGFxdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpvcGFxdWVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y29uc3RyYWluKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwOjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpjbG9iYmVy
ZWQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldEdlbmVyYXRvcik6CisgICAgICAg
ICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21h
cFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNw
ZWNpYWw6OmlzVmFsaWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6
YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6YXBw
ZW5kUmVwc0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JB
cmcpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246OlN1Y2Nlc3NvckNvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNz
b3JDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxl
Y3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3Nv
ckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6
QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nl
c3NvckNvbGxlY3Rpb246OmVuZCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpkdW1wKToKKyAgICAgICAgKiBiMy9C
M1N3aXRjaENhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpTd2l0
Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6Y2FzZVZhbHVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OnRhcmdldCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCbG9jayk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSk6CisgICAgICAgIChKU0M6
OkIzOjpTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6YXBwZW5kQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKToKKyAgICAg
ICAgKiBiMy9CM1N3aXRjaFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Om51bUNhc2VW
YWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6Y2FzZVZhbHVlcyk6CisgICAgICAgIChKU0M6OkIz
OjpTd2l0Y2hWYWx1ZTo6ZmFsbFRocm91Z2gpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN3
aXRjaFZhbHVlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjplbmQpOgorICAgICAgICAqIGIz
L0IzVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM1R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppc0ludCk6CisgICAg
ICAgIChKU0M6OkIzOjppc0Zsb2F0KToKKyAgICAgICAgKEpTQzo6QjM6OnBvaW50ZXJUeXBlKToK
KyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2ls
b25WYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzVXBzaWxvblZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VXBzaWxvblZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6cGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6VXBzaWxvblZhbHVlKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VXNlQ291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpC
Mzo6VXNlQ291bnRzOjp+VXNlQ291bnRzKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6b3BlcmF0b3JbXSk6CisgICAgICAg
ICogYjMvQjNWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6dmFsaWRhdGUp
OgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6On5WYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eSk6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0RvdWJsZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6
OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp0eXBlRm9yKToKKyAgICAgICAg
KiBiMy9CM1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFjY2VwdHMp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Om9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Y2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnR5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFpclR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXAp
OgorICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6Omhhc0ludCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
Y29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
b2Zmc2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2Fpcjog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fp
ci9BaXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29u
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpm
cFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZv
ckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hh
c2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAg
ICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpk
ZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVu
ZEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNl
c3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBC
YXNpY0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVt
cDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBi
My9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0Nh
bGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFs
Ojppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNT
dGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWly
Q29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0lu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICog
YjMvYWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5l
d1RtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJh
bWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tT
bG90c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2lu
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVu
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJh
dG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNp
YWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OnNwZWNpYWxzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zZXJ0aW9uU2V0Ojpjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0
OjphcHBlbmRJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6
Omluc2VydEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2Vy
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6ZHVtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Okluc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpJbnN0OjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNo
VG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Rm9yRWFjaDxUbXA+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Rm9y
RWFjaDxBcmc+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFj
aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Omhhc1NwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6aXNTaGlmdFZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNMc2hpZnQzMlZhbGlk
KToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxp
dmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Omxp
dmVBdFRhaWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpM
b2NhbENhbGMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjps
aXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6dGFrZUxp
dmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpleGVjdXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNj
b3BlOjp+UGhhc2VTY29wZSk6CisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUuaDogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Z3Byc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmZwcnNJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpy
ZWdzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEdQUkluZm8+OjppblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz46OmluUHJpb3JpdHlPcmRlcik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6
OlNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjp+U3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6Om5hbWUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTcGVjaWFsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZGVl
cER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OkRlZXBTcGVjaWFsRHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkRlZXBTcGVjaWFsRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAg
ICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9h
aXIvQWlyU3RhY2tTbG90LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNr
U2xvdDo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6U3RhY2tTbG90KToKKyAgICAgICAgKiBi
My9haXIvQWlyU3RhY2tTbG90Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFj
a1Nsb3Q6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjppbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6YWxpZ25tZW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U3RhY2tTbG90Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6
b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xvdER1bXA6
OkRlZXBTdGFja1Nsb3REdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xv
dER1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEZvckluZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6VG1wOjppc0dQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlRtcDo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzUmVnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmZwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6cmVnKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpoYXNUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6Z3BUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnBUbXBJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6VG1wOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpl
bmNvZGVHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZW5jb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
VG1wOjppc0VuY29kZWRGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVk
R1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRGUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc0VuY29kZWRGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZGVjb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjpkZWNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcEhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6VG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dmFsaWRhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJWYWxp
ZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjogQWRk
ZWQuCisgICAgICAgICogYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGVB
bmRSdW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdDQyKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBqaXQvUmVnLmg6CisgICAgICAgIChKU0M6
OlJlZzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpSZWc6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6
UmVnOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6UmVnOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVy
YXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjplbmQpOgorICAg
ICAgICAoSlNDOjpSZWc6OmFsbCk6CisgICAgICAgIChKU0M6OlJlZzo6aW52YWxpZCk6CisgICAg
ICAgIChKU0M6OlJlZzo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJBdE9mZnNldExpc3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
UmVnaXN0ZXJBdE9mZnNldExpc3QpOgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6ZW5kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpm
b3JFYWNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisKIDIwMTUtMTAt
MjQgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVGVhY2ggY3JlYXRl
X2hhc2hfdGFibGUgdG8gb21pdCBidWlsdGlucyBtYWNyb3Mgd2hlbiBnZW5lcmF0aW5nIHRhYmxl
cyBmb3IgbmF0aXZlLW9ubHkgb2JqZWN0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
IFZQQVRIID0gXAogCiBQWVRIT04gPSBweXRob24KIFBFUkwgPSBwZXJsCitSVUJZID0gcnVieQog
CiBKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUiA9ICQoSmF2YVNjcmlwdENvcmUpL1NjcmlwdHMK
IApAQCAtNTksNiArNjAsMTAgQEAgYWxsIDogXAogICAgIExleGVyLmx1dC5oIFwKICAgICBLZXl3
b3JkTG9va3VwLmggXAogICAgIFJlZ0V4cEppdFRhYmxlcy5oIFwKKyAgICBCM0xvd2VyaW5nTWF0
Y2hlci5oIFwKKyAgICBCM0FkZHJlc3NNYXRjaGVyLmggXAorICAgIEIzQ29tcGFyaXNvbk1hdGNo
ZXIuaCBcCisgICAgQWlyT3Bjb2RlLmggXAogIwogCiAjIEphdmFTY3JpcHQgYnVpbHRpbnMuCkBA
IC0yNjIsNiArMjY3LDE2IEBAIElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUyA9IFwKIEpT
UmVwbGF5SW5wdXRzLmggOiAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBV
VF9HRU5FUkFUT1JfU0NSSVBUUykKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weSAtLW91dHB1dERpciAuIC0tZnJh
bWV3b3JrIEphdmFTY3JpcHRDb3JlICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQog
CitCM0xvd2VyaW5nTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0
ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0
dGVybnMKKwkkKFJVQlkpICReIAorQjNBZGRyZXNzTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3Jl
KS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNB
ZGRyZXNzTWF0Y2hlci5wYXR0ZXJucworCSQoUlVCWSkgJF4KK0IzQ29tcGFyaXNvbk1hdGNoZXIu
aDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2
YVNjcmlwdENvcmUpL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICRe
CisKK0Fpck9wY29kZS5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRv
ci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkp
ICReCisKICMgRHluYW1pY2FsbHktZGVmaW5lZCB0YXJnZXRzIGFyZSBsaXN0ZWQgYmVsb3cuIFN0
YXRpYyB0YXJnZXRzIGJlbG9uZyB1cCB0b3AuCiAKIGFsbCA6IFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAoCiAJCQkpOwogCQkJZGVwZW5k
ZW5jaWVzID0gKAorCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFERSAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLAogCQkJCTVENkIyQTUxMTUyQjlFMjMwMDUyMzFERSAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLAogCQkJCTVENkIyQTU1MTUyQjlFMjMwMDUyMzFERSAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLApAQCAtNjg1LDYgKzY4NiwxMjIgQEAKIAkJMEZFQTBBMzMxNzBENDBCRjAwQkI3
MjJDIC8qIERGR0pJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICov
OyB9OwogCQkwRkVBMEEzNDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMzAxNzBENDBCRjAw
QkI3MjJDIC8qIERGR0pJVENvZGUuaCAqLzsgfTsKIAkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FE
IC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5j
cHAgKi87IH07CisJCTBGRUM4NEZFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi87IH07CisJ
CTBGRUM4NEZGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MDAxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Js
b2NrLmNwcCAqLzsgfTsKKwkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovOyB9OworCQkwRkVDODUwMjFC
REFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9ja0lubGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRp
bHMuaCAqLzsgfTsKKwkJMEZFQzg1MDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovOyB9OworCQkwRkVDODUw
NTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLzsg
fTsKKwkJMEZFQzg1MDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRDFCREFDREFD
MDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MDgxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5o
ICovOyB9OworCQkwRkVDODUwOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLzsgfTsKKwkJMEZFQzg1MEExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLzsgfTsKKwkJ
MEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1MEMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRp
dml0eS5oICovOyB9OworCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNDFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDMyVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAg
Ki87IH07CisJCTBGRUM4NTEwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi87IH07CisJCTBGRUM4NTExMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3REb3VibGVWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0RG91YmxlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFs
dWUuaCAqLzsgfTsKKwkJMEZFQzg1MTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4
NTE0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29udHJvbFZhbHVlLmggKi87IH07CisJCTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW5jeUNsYXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNw
cCAqLzsgfTsKKwkJMEZFQzg1MTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEND
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggKi87IH07CisJCTBGRUM4NTE3
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzRnJlcXVlbnRlZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTE4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0dlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLzsgfTsK
KwkJMEZFQzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyYXRlLmggKi87IH07CisJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5k
ZXhNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi87IH07CisJCTBGRUM4NTFD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eFNldC5oICovOyB9OworCQkwRkVDODUxRDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWly
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovOyB9OworCQkwRkVDODUx
RTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNM
b3dlclRvQWlyLmggKi87IH07CisJCTBGRUM4NTFGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9y
eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmggKi87IH07CisJCTBGRUM4NTIxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM09wY29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICovOyB9OworCQkw
RkVDODUyMjFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M09wY29kZS5oICovOyB9OworCQkwRkVDODUyMzFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCAq
LzsgfTsKKwkJMEZFQzg1MjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwICovOyB9OworCQkw
RkVDODUyNjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1MjcxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTI4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmgg
Ki87IH07CisJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi87IH07CisJCTBGRUM4NTJBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2Nv
cGUuaCAqLzsgfTsKKwkJMEZFQzg1MkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUx
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgKi87IH07CisJCTBGRUM4NTJDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2Vk
dXJlLmggKi87IH07CisJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLzsgfTsKKwkJ
MEZFQzg1MkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXAuY3BwICovOyB9OworCQkwRkVDODUyRjFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja21hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLzsgfTsKKwkJMEZF
Qzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU2MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTMxMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXBTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi87IH07
CisJCTBGRUM4NTMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLzsgfTsKKwkJMEZFQzg1MzQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tT
bG90VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLzsgfTsK
KwkJMEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovOyB9OworCQkwRkVDODUz
NzFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaENhc2UuY3BwICovOyB9OworCQkwRkVDODUzODFCREFDREFDMDA4MEZGNzQgLyogQjNT
d2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi87IH07CisJCTBG
RUM4NTM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi87
IH07CisJCTBGRUM4NTNCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVHlwZS5jcHAgKi87IH07CisJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLzsgfTsKKwkJMEZFQzg1M0QxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi87IH07CisJ
CTBGRUM4NTNGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNTFCREFDREFDMDA4MEZG
NzQgLyogQjNVc2VDb3VudHMuY3BwICovOyB9OworCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovOyB9Owor
CQkwRkVDODU0MTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNzFCREFDREFDMDA4MEZG
NzQgLyogQjNWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovOyB9OworCQkw
RkVDODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
QTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovOyB9OworCQkwRkVDODU0NTFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5s
aW5lcy5oICovOyB9OworCQkwRkVDODU0NjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
QzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi87IH07CisJCTBGRUM4NTQ3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJl
cC5oICovOyB9OworCQkwRkVDODU2RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFj
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi87IH07CisJCTBG
RUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0OTFCREFDREM3MDA4MEZG
NzQgLyogQWlyQWxsb2NhdGVTdGFjay5oICovOyB9OworCQkwRkVDODU2RjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovOyB9OworCQkw
RkVDODU3MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWly
QXJnLmggKi87IH07CisJCTBGRUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJCYXNpY0Jsb2NrLmggKi87IH07CisJCTBGRUM4NTczMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
Q2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi87
IH07CisJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRGMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1NzUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICov
OyB9OworCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNvZGUuaCAqLzsgfTsKKwkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5o
ICovOyB9OworCQkwRkVDODU3ODFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzkxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUu
aCAqLzsgfTsKKwkJMEZFQzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLzsgfTsKKwkJ
MEZFQzg1N0IxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU2MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgKi87IH07CisJCTBGRUM4NTdD
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi87IH07CisJCTBGRUM4NTdEMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlv
blNldC5jcHAgKi87IH07CisJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRp
b25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTU5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLzsgfTsKKwkJMEZF
Qzg1N0YxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3QuY3BwICovOyB9OworCQkwRkVDODU4MDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLzsgfTsKKwkJMEZFQzg1ODExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGlu
ZXMuaCAqLzsgfTsKKwkJMEZFQzg1ODIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RDFC
REFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAqLzsgfTsKKwkJMEZFQzg1ODMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNl
U2NvcGUuY3BwICovOyB9OworCQkwRkVDODU4NDFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VT
Y29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLzsgfTsKKwkJMEZFQzg1
ODUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjAxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovOyB9OworCQkwRkVDODU4NjFCREFDREM3
MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJl
Z2lzdGVyUHJpb3JpdHkuaCAqLzsgfTsKKwkJMEZFQzg1ODcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovOyB9OworCQkw
RkVDODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1ODkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
aWxsRXZlcnl0aGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cCAqLzsgfTsKKwkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGlu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1
NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovOyB9OworCQkwRkVD
ODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTdGFja1Nsb3QuY3BwICovOyB9OworCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi87IH07CisJ
CTBGRUM4NThEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclRtcC5jcHAgKi87IH07CisJCTBGRUM4NThFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLzsgfTsKKwkJMEZFQzg1OEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclRtcElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVz
LmggKi87IH07CisJCTBGRUM4NTkwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QjFC
REFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVDODU5MTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0
ZS5oICovOyB9OworCQkwRkVDODU5MzFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTky
MUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovOyB9OworCQkwRkVDODVBMzFC
REI1Q0YxMDA4MEZGNzQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIg
LyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTBGRUM4NUE0MUJEQjVDRjEwMDgwRkY3
NCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNj
cmlwdENvcmUuZnJhbWV3b3JrICovOyB9OworCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyog
dGVzdGIzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovOyB9OworCQkwRkVDODVC
MzFCREVEOTU3MDA4MEZGNzQgLyogQjNDb25zdFB0clZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCMjFCREVEOTU3MDA4MEZGNzQgLyog
QjNDb25zdFB0clZhbHVlLmggKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBE
RkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50
SG9pc3RpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGRUQ2N0JBMUIyNjI1NkQwMDY2Q0UxNSAvKiBE
RkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I4MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhv
aXN0aW5nUGhhc2UuaCAqLzsgfTsKIAkJMEZFRTk4NDExQTg4NjVCNzAwNzU0RTkzIC8qIFNldHVw
VmFyYXJnc0ZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTgzOSw2ICsx
OTU2LDEzIEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGQ0VGQUI1MTgwNUQ2MTYwMDQ3
MkNFNDsKIAkJCXJlbW90ZUluZm8gPSBsbHZtRm9ySlNDOwogCQl9OworCQkwRkVDODVCMDFCREI1
RDhGMDA4MEZGNzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJY
Q29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4
RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJl
bW90ZUdsb2JhbElEU3RyaW5nID0gMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0OworCQkJcmVtb3Rl
SW5mbyA9IHRlc3RiMzsKKwkJfTsKIAkJMEZGOTIyRDIxNEY0NkIyRjAwNDFBMjRFIC8qIFBCWENv
bnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsK
IAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0
IG9iamVjdCAqLzsKQEAgLTI1ODAsNiArMjcwNCwxMjEgQEAKIAkJMEZFQTBBMkYxNzBENDBCRjAw
QkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHSklUQ29kZS5jcHA7IHBhdGggPSBkZmcvREZHSklUQ29kZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0pJVENvZGUuaDsgcGF0
aCA9IGRmZy9ERkdKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIz
RUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNBcmd1bWVu
dFJlZ1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3Vt
ZW50UmVnVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNBcmd1bWVu
dFJlZ1ZhbHVlLmg7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9j
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Jhc2ljQmxvY2su
Y3BwOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2suaDsgcGF0aCA9IGIzL0IzQmFz
aWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCODFCREFDREFD
MDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2tJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0Jhc2ljQmxvY2tVdGlscy5oOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrVXRpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0Jsb2NrV29ya2xpc3QuaDsgcGF0aCA9IGIzL0IzQmxvY2tXb3JrbGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1Nw
ZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDaGVja1Nw
ZWNpYWwuY3BwOyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDaGVja1NwZWNpYWwuaDsgcGF0
aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ2hl
Y2tWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJFMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM0NoZWNrVmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29tbW9uLmNwcDsg
cGF0aCA9IGIzL0IzQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzQ29tbW9uLmg7IHBhdGggPSBiMy9CM0NvbW1vbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRh
dGl2aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29tbXV0
YXRpdml0eS5jcHA7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2
aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29tbXV0YXRpdml0eS5o
OyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0MzJWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM0NvbnN0MzJWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0MzJWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdDMy
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29uc3Q2NFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29uc3Q2NFZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
Q29uc3Q2NFZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJs
ZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3RE
b3VibGVWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29uc3RE
b3VibGVWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnRyb2xW
YWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnRyb2xWYWx1ZS5oOyBwYXRo
ID0gYjMvQjNDb250cm9sVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHBhdGggPSBi
My9CM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGcmVxdWVuY3lDbGFzcy5oOyBwYXRoID0gYjMvQjNGcmVx
dWVuY3lDbGFzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRDFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9IGIzL0IzRnJlcXVlbnRlZEJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENFMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzR2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvQjNHZW5lcmF0ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJhdGUuaDsgcGF0aCA9
IGIzL0IzR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9
IGIzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0luZGV4TWFwLmg7IHBhdGggPSBiMy9CM0luZGV4TWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0luZGV4U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW5k
ZXhTZXQuaDsgcGF0aCA9IGIzL0IzSW5kZXhTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0xvd2VyVG9BaXIuY3BwOyBwYXRoID0g
YjMvQjNMb3dlclRvQWlyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM0xvd2VyVG9BaXIuaDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyog
QjNNZW1vcnlWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M01lbW9yeVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFsdWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlW
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM01lbW9yeVZhbHVlLmg7
IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09wY29kZS5jcHA7IHBhdGggPSBiMy9CM09wY29kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM09wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09wY29k
ZS5oOyBwYXRoID0gYjMvQjNPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luLmNwcDsgcGF0aCA9IGIzL0IzT3JpZ2luLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2lu
Lmg7IHBhdGggPSBiMy9CM09yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcDsg
cGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BhdGNocG9pbnRTcGVjaWFsLmg7
IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BhdGNocG9pbnRWYWx1ZS5j
cHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BhdGNocG9pbnRWYWx1ZS5oOyBw
YXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BoYXNlU2NvcGUuY3BwOyBwYXRoID0gYjMv
QjNQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM1BoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQcm9j
ZWR1cmUuY3BwOyBwYXRoID0gYjMvQjNQcm9jZWR1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1cmUuaDsgcGF0aCA9IGIzL0Iz
UHJvY2VkdXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHBhdGggPSBiMy9CM1Byb2NlZHVyZUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNTdGFja21hcC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrbWFwLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcC5oOyBwYXRo
ID0gYjMvQjNTdGFja21hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRF
NjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwuY3BwOyBwYXRoID0gYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwuaDsgcGF0aCA9IGIzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tT
bG90S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU5MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNT
dGFja1Nsb3RWYWx1ZS5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNz
b3JDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3VjY2Vz
c29yQ29sbGVjdGlvbi5oOyBwYXRoID0gYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3
aXRjaENhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTd2l0
Y2hDYXNlLmNwcDsgcGF0aCA9IGIzL0IzU3dpdGNoQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTd2l0Y2hDYXNlLmg7IHBhdGggPSBi
My9CM1N3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNTd2l0Y2hWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRjaFZh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjAxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNTd2l0Y2hWYWx1ZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMTFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVHlwZS5jcHA7IHBhdGgg
PSBiMy9CM1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMjFC
REFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzVHlwZS5oOyBwYXRoID0gYjMvQjNUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Vwc2lsb25WYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Vwc2lsb25WYWx1ZS5oOyBwYXRoID0gYjMvQjNVcHNp
bG9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzVXNlQ291bnRzLmNwcDsgcGF0aCA9IGIzL0IzVXNlQ291bnRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VXNlQ291bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVXNlQ291bnRz
Lmg7IHBhdGggPSBiMy9CM1VzZUNvdW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbGlkYXRlLmNwcDsgcGF0aCA9IGIzL0IzVmFs
aWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGODFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1ZhbGlkYXRlLmg7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWUuY3BwOyBwYXRoID0gYjMv
QjNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzVmFsdWUuaDsgcGF0aCA9IGIzL0IzVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVJbmxpbmVzLmg7IHBhdGggPSBiMy9C
M1ZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGQzFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM1ZhbHVlUmVwLmNwcDsgcGF0aCA9IGIzL0IzVmFsdWVSZXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZVJlcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlUmVw
Lmg7IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9jYXRlU3RhY2suY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU0OTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0ZVN0YWNrLmg7IHBhdGggPSBi
My9haXIvQWlyQWxsb2NhdGVTdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFyZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyQXJnLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFyZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmcuaDsgcGF0
aCA9IGIzL2Fpci9BaXJBcmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmFzaWNCbG9jay5jcHA7IHBhdGggPSBiMy9haXIvQWly
QmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEFpckJhc2ljQmxvY2suaDsgcGF0aCA9IGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyQ0NhbGxTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0RjFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ0NhbGxTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckNDYWxsU3BlY2lhbC5oOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29k
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJDb2RlLmNwcDsg
cGF0aCA9IGIzL2Fpci9BaXJDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQ29kZS5oOyBwYXRoID0gYjMvYWlyL0FpckNvZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZy
ZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGcmVx
dWVudGVkQmxvY2suaDsgcGF0aCA9IGIzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdl
bmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckdlbmVy
YXRlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5lcmF0ZS5oOyBwYXRoID0gYjMv
YWlyL0FpckdlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU1
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBwYXRoID0gYjMvYWly
L0FpckdlbmVyYXRpb25Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA7
IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU1NzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVl
U2F2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlySGFuZGxlQ2FsbGVl
U2F2ZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0
aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckluc2Vy
dGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2Vy
dGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJbnNlcnRpb25T
ZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySW5zdC5jcHA7IHBhdGggPSBiMy9h
aXIvQWlySW5zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVCMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEFpckluc3QuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0SW5saW5lcy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMaXZlbmVzcy5oOyBwYXRoID0gYjMvYWlyL0FpckxpdmVu
ZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVFMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpclBoYXNlU2NvcGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlU2NvcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQg
LyogQWlyUGhhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJQ
aGFzZVNjb3BlLmg7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU2MDFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQ
cmlvcml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclJlZ2lzdGVyUHJpb3JpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyUmVnaXN0ZXJQcmlvcml0eS5oOyBwYXRoID0gYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNwZWNpYWwuaDsgcGF0aCA9
IGIzL2Fpci9BaXJTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNwaWxsRXZlcnl0aGluZy5oOyBwYXRo
ID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclN0YWNrU2xvdC5jcHA7IHBhdGggPSBi
My9haXIvQWlyU3RhY2tTbG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja1Nsb3QuaDsgcGF0aCA9IGIzL2Fpci9BaXJTdGFja1Ns
b3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJUbXAuY3BwOyBwYXRoID0gYjMvYWlyL0FpclRtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wLmg7IHBhdGggPSBiMy9haXIvQWlyVG1wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJUbXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRt
cElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJWYWxpZGF0ZS5jcHA7
IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVmFsaWRhdGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJW
YWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU5MjFCREIxRTEw
MDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckdlbmVyYXRlZC5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2VuZXJhdGVkLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0
IC8qIHRlc3RiMyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRo
ID0gdGVzdGIzOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkVDODVB
RTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IHRlc3RiMy5jcHA7IHBhdGggPSBiMy90ZXN0YjMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODVCMjFCREVEOTU3MDA4MEZGNzQgLyogQjNDb25zdFB0
clZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29uc3RQdHJWYWx1
ZS5oOyBwYXRoID0gYjMvQjNDb25zdFB0clZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29uc3RhbnRI
b2lzdGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCODFCMjYyNTZEMDA2NkNFMTUg
LyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50
SG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVFOTg0MDFB
ODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2V0dXBWYXJhcmdzRnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTM4MDEsNiArNDA0MCwxNSBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OworCQkwRkVDODVBMjFCREI1Q0YxMDA4MEZGNzQg
LyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwor
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTBGRUM4
NUEzMUJEQjVDRjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovLAorCQkJCTBGRUM4NUE0MUJEQjVDRjEwMDgwRkY3NCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEZGOTIyQzYxNEY0NkIxMzAwNDFBMjRFIC8qIEZy
YW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0zODcwLDYgKzQxMTgsNyBAQAogCQkJCTE0
MTIxMTIwMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovLAogCQkJCTE0QkQ1OUJGMEEzRThG
OTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTY1MTEyMzA1MTQwNDZBNEMwMDJCMTAxRCAv
KiB0ZXN0UmVnRXhwICovLAorCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMg
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTM4OTAsNiArNDEzOSw3IEBACiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8q
IEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3
QjlGIC8qIEFQSSAqLywKIAkJCQk5Njg4Q0IxMjBFRDEyQjRFMDAxRDY0OUYgLyogYXNzZW1ibGVy
ICovLAorCQkJCTBGRUM4NEIyMUJEQUNENUUwMDgwRkY3NCAvKiBiMyAqLywKIAkJCQlBNTRDRjJF
QTE4NEVBNzM5MDAyMzdGMTkgLyogYmluZGluZ3MgKi8sCiAJCQkJQTdEODAxOUYxODgwRDY2RTAw
MjZDMzlCIC8qIGJ1aWx0aW5zICovLAogCQkJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBi
eXRlY29kZSAqLywKQEAgLTQxMDMsNiArNDM1MywxMzUgQEAKIAkJCW5hbWUgPSBmdGw7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkwRkVDODRCMjFCREFDRDVFMDA4MEZGNzQg
LyogYjMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBG
RUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCisJCQkJMEZFQzg0QjQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QjUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovLAorCQkJCTBGRUM4NEI2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NEI3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRkVDODRCODFCREFDREFDMDA4MEZG
NzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovLAorCQkJCTBGRUM4NEI5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovLAorCQkJCTBGRUM4NEJBMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRkVDODRCQjFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NoZWNrVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NoZWNrVmFsdWUuaCAqLywKKwkJCQkwRkVDODRCRjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21t
b24uY3BwICovLAorCQkJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICov
LAorCQkJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwICov
LAorCQkJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLywK
KwkJCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovLAor
CQkJCTBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oICovLAorCQkJ
CTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0QzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi8sCisJCQkJMEZF
Qzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovLAorCQkJ
CTBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCAqLywKKwkJCQkw
RkVDODRDOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovLAorCQkJCTBG
RUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oICovLAorCQkJCTBGRUM4
NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKKwkJCQkwRkVD
ODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovLAorCQkJCTBGRUM4
NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4
NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODRDRjFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NEQwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODREMTFC
REFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovLAorCQkJCTBGRUM4NEQyMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0luZGV4U2V0LmggKi8sCisJCQkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi8sCisJCQkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTG93ZXJUb0Fpci5oICovLAorCQkJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01l
bW9yeVZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1v
cnlWYWx1ZS5oICovLAorCQkJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5j
cHAgKi8sCisJCQkJMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8sCisJ
CQkJMEZFQzg0RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCAqLywKKwkJCQkwRkVD
ODREQTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCAqLywKKwkJCQkwRkVDODREQjFCREFD
REFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0REMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODRE
RDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovLAorCQkJCTBGRUM4
NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovLAorCQkJCTBGRUM4
NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovLAorCQkJCTBGRUM4NEUw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLywKKwkJCQkwRkVDODRFMTFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovLAorCQkJCTBGRUM4NEUyMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovLAorCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLywKKwkJCQkwRkVDODRFNDFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcC5jcHAgKi8sCisJCQkJMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXAuaCAqLywKKwkJCQkwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a21hcFNwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrbWFwU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrU2xvdEtpbmQuY3BwICovLAorCQkJCTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrU2xvdEtpbmQuaCAqLywKKwkJCQkwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2tTbG90VmFsdWUuaCAqLywKKwkJCQkwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uLmggKi8sCisJCQkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3dpdGNoQ2FzZS5jcHAgKi8sCisJCQkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoQ2FzZS5oICovLAorCQkJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZh
bHVlLmNwcCAqLywKKwkJCQkwRkVDODRGMDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1
ZS5oICovLAorCQkJCTBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovLAor
CQkJCTBGRUM4NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLywKKwkJCQkwRkVDODRG
MzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEY0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovLAorCQkJCTBGRUM4NEY1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi8sCisJCQkJMEZFQzg0RjYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi8sCisJCQkJMEZFQzg0RjcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuY3BwICovLAorCQkJCTBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmggKi8sCisJCQkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuY3BwICovLAorCQkJCTBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8s
CisJCQkJMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi8sCisJ
CQkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovLAorCQkJCTBG
RUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggKi8sCisJCQkJMEZFQzg1QUUx
QkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IGIzOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBG
Rjc0IC8qIGFpciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovLAor
CQkJCTBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi8sCisJ
CQkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8sCisJCQkJMEZFQzg1
NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovLAorCQkJCTBGRUM4NTRDMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKKwkJCQkwRkVDODU0RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4NTRGMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODU1MDFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ29kZS5jcHAgKi8sCisJCQkJMEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNv
ZGUuaCAqLywKKwkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJs
b2NrLmggKi8sCisJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNw
cCAqLywKKwkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLywK
KwkJCQkwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLywKKwkJ
CQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLywK
KwkJCQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
ICovLAorCQkJCTBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5oICovLAorCQkJCTBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
Y3BwICovLAorCQkJCTBGRUM4NTU5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
aCAqLywKKwkJCQkwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgKi8sCisJ
CQkJMEZFQzg1NUIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLywKKwkJCQkwRkVDODU1
QzFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCAqLywKKwkJCQkwRkVDODU1RDFC
REFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAqLywKKwkJCQkwRkVDODU1RTFCREFDREM3
MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8sCisJCQkJMEZFQzg1NUYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLywKKwkJCQkwRkVDODU2MDFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi8sCisJCQkJMEZFQzg1NjExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCAqLywKKwkJCQkwRkVDODU2MjFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg1NjMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3BpbGxFdmVyeXRoaW5nLmNwcCAqLywKKwkJCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi8sCisJCQkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8sCisJCQkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclN0YWNrU2xvdC5oICovLAorCQkJCTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJU
bXAuY3BwICovLAorCQkJCTBGRUM4NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLywK
KwkJCQkwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovLAorCQkJ
CTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZF
Qzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggKi8sCisJCQkpOworCQkJbmFt
ZSA9IGFpcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTBGRjQyNzJFMTU4
RUJDQ0UwMDRDQjlGRiAvKiBkaXNhc3NlbWJsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtNjA4OSw2ICs2NDY4LDcgQEAKIAkJCQkwRjFGRTUxQzE5MjJB
M0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUz
MEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRTkxOUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTQ4RDE5MTE3NzIzNjVCMDBD
NjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMz
RTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjExNyw4
ICs2NDk3LDEwIEBACiAJCQkJQTVFQTcwRTgxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAy
M0Q4N0MgLyogQmlnSW50ZWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NEIyNzIxQTc4NEJB
RjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEUx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUMw
RTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xlYW5PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
QTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYxMzMsNiArNjUxNSw3IEBACiAJCQkJOTlEQTAwQTQxQkQ1OTkzMTAwRjQ1
NzVDIC8qIGJ1aWx0aW5zX21vZGVsLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQTUxQkQ1
OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAogCQkJ
CTQxREVBMTMyMUI5RjMxNjMwMDZENjVERCAvKiBCdWlsdGluVXRpbHMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTEwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOUU3Mjk0MEIxOTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJm
bHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNDMsNiArNjUyNiw3IEBACiAJCQkJMEYy
REQ4MEIxQUIzRDg1ODAwQkJCOEU4IC8qIEJ5dGVjb2RlS2lsbHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNjFC
REFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRl
cnMgKi8sCkBAIC02MTc5LDYgKzY1NjMsNyBAQAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3
RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTNBMzMyMTdBMUYx
RUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0
aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAg
LyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMUQxQkRBMDhFRjAwMzMx
Qjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTg2LDggKzY1
NzEsMTAgQEAKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1
cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0
NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4ODFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0ODM2RTcxMzJEQTdCRTAw
NUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4
QTE4QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVGRDAwN0ExODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OTZCNzMxOTFCREEwNjgwMDAzMzFCODQgLyogQm9vbGVhblByb3RvdHlw
ZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDg2MThCQzFBNTYwMEJFREY3NiAvKiBD
b25zb2xlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTYyMDIsNiArNjU4OSw3IEBACiAJ
CQkJQzJGQzlCRDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3Bh
Y2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyNDFCREFDREFDMDA4MEZGNzQg
LyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENE
QiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAw
OEVDQjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJE
RDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYyMTMsNiArNjYw
MSw3IEBACiAJCQkJOTk1OUU5MkIxQkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFk
ZXJzICovLAogCQkJCTJBMTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRh
Rm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyog
QjNCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBB
N0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUw
MDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0Yz
MEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02
MjMzLDYgKzY2MjIsNyBAQAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0
cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2
QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU3MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNE
MDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjQzLDcgKzY2MzMsOSBAQAogCQkJCTBGMkREODE0
MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNDg1MzIyMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQ
YXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZG
NzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVF
NDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5
QTI5NTE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWls
YWJpbGl0eU1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjUzLDYgKzY2NDUsNyBAQAogCQkJCUE3
RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyog
QjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEw
MDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkYxNThEMTlC
N0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzNDRDAwMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTYyOTIsOCArNjY4NSwxMCBAQAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJF
NCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2
MTggLyogREZHRWRnZURvbWluYXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0Ew
QkIxRTAwQTk1REQwIC8qIERGR0VkZ2VVc2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY4RjE0MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2tVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8q
IERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCRkYzQzAxNzk4Njg5
NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtNjMyMyw2ICs2NzE4LDcgQEAKIAkJCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZH
TGF6eU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAv
KiBERkdMSUNNUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5QzRCMTVFMUJBMjE1OEYwMEZE
NTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU4NjFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3MjlG
QTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3
QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLApAQCAtNjMzMSw2ICs2NzI3LDcgQEAKIAkJCQkwRjJCREM0NTE1MjI4MDFC
MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5
MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzQ2MTUyMjgwMjAwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTE0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRS
ZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVB
OCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NE
MDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8s
CkBAIC02MzQ5LDYgKzY3NDYsNyBAQAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEw
MDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09T
UkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2MTg4
NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKQEAgLTYzNjYsNiAr
Njc2NCw4IEBACiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlw
ZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERG
R1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFB
IC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU2
RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZl
VG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTYzOTAsNiArNjc5MCw3IEBACiAJCQkJMEZE
OEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRDhBMzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkMx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkw
MDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1
Qzc1RjE5MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCRTBGNzcxNkMxREIxMjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLApAQCAtNjQwMSw2ICs2ODAyLDcgQEAKIAkJCQkwRjYyMDE3NDE0M0ZD
RDMzMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1Zhcmlh
YmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENE
ODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZG
Qzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxODFCREEwNjgwMDAzMzFCODQgLyogQXJyYXlJ
dGVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQzMSw2ICs2ODMzLDcg
QEAKIAkJCQkwRjU2QTFEMzE1MDAwRjM1MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYzQUM3NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRU
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhp
dEtpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0
RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzODE3
QURCNUYzMDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4
QUYzOTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAg
LTY0OTEsNiArNjg5NCw3IEBACiAJCQkJMEZFQTBBMjAxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTFR5
cGVkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3
IC8qIEZUTFVud2luZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMw
MDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRh
cmdldC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDk4LDggKzY5MDIsMTAgQEAKIAkJCQkyQTgzNjM4
QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MDQwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjBGMUEwMTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzQTFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzEwRkIxOTc0
QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkU0QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUyRjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9u
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEg
LyogRnVuY3Rpb25SYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEw
MzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTM4
LDYgKzY5NDQsNyBAQAogCQkJCUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTkxQUE5MDkxMTAwRDMzQjMz
IC8qIEdlbmVyaWNBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFBMUFBOTA5
MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1MEExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkUwNTAxQjFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY09mZnNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjU2Myw2ICs2
OTcwLDcgQEAKIAkJCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTdCQTYxMDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2
RjVDRDAwQjM0NDYwIC8qIElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVB
MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVGRDAwNzYxODlCMDM4QzAwNjMzMjMxIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhl
YWRlcnMgKi8sCkBAIC02NjE2LDYgKzcwMjQsNyBAQAogCQkJCUExQjlFMjNDMUI0RTBENjcwMEJD
N0ZFRCAvKiBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4
MTkzRTMxQjRFMENEQjAwRkMxMDI5IC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTFCOUUyM0UxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRv
clByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUExODE5M0U0MUI0RTBD
REIwMEZDMTAyOSAvKiBJbnRsQ29sbGF0b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTU4N0Q2RTFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3MDFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1l
Rm9ybWF0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjY0Niw2ICs3MDU1LDcgQEAK
IAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmVTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTkxMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1
QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAw
OENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTY2NTYsOSArNzA2NiwxMSBAQAogCQkJCTBGMkI2NkU1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NUIzMUJERUQ5NTcwMDgwRkY3NCAv
KiBCM0NvbnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QkRBRUNCMTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCMTQxODZEMUI2MjUyN0YwMEZCMjA2OCAvKiBKU0Fycm93RnVuY3Rpb24uaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91
YmxlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE4MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MEQxN0Q3MEU4QUQ0QTkwMDBDRDE3RCAv
KiBKU0Jhc2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAx
NzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NzUsNiArNzA4
Nyw4IEBACiAJCQkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFz
c1JlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwODgxOEJDMUE1NjAwQkVERjc2IC8qIEpT
Q29uc29sZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEzMTY3QkFC
RDcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3
QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTU4QzAyNDIxOEU0QTQxQTAwMDMyQkM1IC8qIEpTQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjY5MCw2ICs3MTA0LDcgQEAKIAkJCQlGRTM4NEVFNjFBRERCN0FEMDA1NURFMkMg
LyogSlNEb2xsYXJWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTgxQUREQjdBRDAwNTVE
RTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJE
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUyMDFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0
MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzAwLDExICs3MTE1LDEzIEBACiAJCQkJMEYy
QjY2RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0NTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZGNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTFCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyMTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1RkQwMDg2MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVDM0ExQTYxOEMwNDkwMjAwQzk1OTNBIC8qIEpT
R2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzM1LDYgKzcx
NTIsNyBAQAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc0REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1
bGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxOENCQzExQjhBRUY1MTAwQTI5
MjlEIC8qIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzlE
QTRBNzFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovLApA
QCAtNjc2NCw2ICs3MTgyLDcgQEAKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNT
dGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFODU1MzkxMTFCOTk2ODAwMUFG
NTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0UxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEVD
MEVDMzFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjYwMEI1QTcxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQyODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBp
biBIZWFkZXJzICovLApAQCAtNjgyMSw5ICs3MjQwLDExIEBACiAJCQkJMEY0NjgwQTMxNEJBN0Y4
RDAwQkZFMjcyIC8qIExMSW50RXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0Njgw
Q0IxNEJCQjE3MjAwQkZFMjcyIC8qIExMSW50T2ZmbGluZUFzbUNvbmZpZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQTUxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1Bh
dGhzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJ
bnRUaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUNFMTgwNUU3NTUwMDQ3MkNFNCAv
KiBMTFZNQVBJLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDRjE4MDVFNzU1MDA0
NzJDRTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzgx
Nzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQ0VGQUQzMTgwNUVEQ0MwMDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oIGluIEhlYWRlcnMgKi8s
CkBAIC02ODM2LDEyICs3MjU3LDE0IEBACiAJCQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8q
IE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJE
MDBDRjg3MTEgLyogTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZB
REQxNDYwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2M0IyM0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNy
b0Fzc2VtYmxlck1JUFMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQy
QkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2
NEE5MTM1RTVFMUMwMDk2MzAxMiAvKiBNYWNyb0Fzc2VtYmxlclNINC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwMTYxRTQwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTcwMDg3M0ExN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRl
cnMgKi8sCkBAIC02ODY3LDYgKzcyOTAsNyBAQAogCQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5
NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkx
MzBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzM0U4RDIxMUI5MDEzREUwMDM0NkI1MiAvKiBOYXRpdmVTdGRGdW5jdGlvbkNlbGwu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURC
IC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBOb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjgxOEExQjI1
OTAwMjZEODhGIC8qIE5vbmRldGVybWluaXN0aWNJbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
ODg3LDYgKzczMTEsNyBAQAogCQkJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8q
IE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYx
RjY4MSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRD
MkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0
NDdFQTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ0ODBFMTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02OTAwLDEzICs3MzI1LDE3IEBACiAJCQkJMEZGOUNFNzQxQjlDRDZEMDAwNEVEQ0E2
IC8qIFBvbHltb3JwaGljQWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU4MzQxODFBNkVG
OTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOTgyMDYxMTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0
aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlB
IC8qIFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyMjFCREFDREFDMDA4
MEZGNzQgLyogQjNPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkRE
MDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1NDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2Zp
bGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTI4LDEw
ICs3MzU3LDEzIEBACiAJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3Rv
cmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFBy
b3RlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQ
cm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4
MDAxRTcyRDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4
NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQx
NENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQ
cm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjk1Miw2ICs3Mzg0LDcgQEAKIAkJCQkw
RkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1N0QyM0VFMTg5MUI1NTQwMDMxQzdGQSAvKiBSZWd1bGFyRXhwcmVzc2lvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNw
ZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBS
ZW1vdGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUVBMTgyMzQwQjQwMEE4
MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
QkExNUYwMTgyMzQ1QUYwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmggaW4g
SGVhZGVycyAqLywKQEAgLTY5NTksNiArNzM5Miw3IEBACiAJCQkJQTVCQTE1RUQxODIzNDBCNDAw
QTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjlFQkNCNzBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcwQjBBOUQxMUE5QjY2NDYwMDAxMzA2QSAvKiBSdW50aW1lRmxhZ3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5n
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTg4LDYgKzc0MjIsNyBAQAogCQkJCUE3MDlG
MkYwMTdBMEFDMDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzMzA0MDA0MEU2QTc0OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDY0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUwRTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92
aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNv
dXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMw
MDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC03
MDA3LDYgKzc0NDIsNyBAQAogCQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNCMTM0RkYwQTYwMEFGQURCNSAv
KiBTdHJvbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVGREUyNiAv
KiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREUzQUI4MEU2Qzgy
RjUwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVC
Qjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFB
QUEzMTIxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8s
CkBAIC03MDQzLDEwICs3NDc5LDEyIEBACiAJCQkJMEYyRDRERUExOTgzMkRBQzAwN0Q0QjE5IC8q
IFR5cGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzExMDExOTc1QjQ2NzAwODA4
NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCNkMzOTFB
RjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJENERFQzE5ODMyREM0MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJENERGMDE5ODMyREQ2MDA3RDRCMTkgLyogVHlwZVNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVk
aXM4Nl9kZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQyMTU4RUJFOTEwMDRDQjlG
RiAvKiB1ZGlzODZfZXh0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0NDE1OEVCRTkx
MDA0Q0I5RkYgLyogdWRpczg2X2lucHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTcwODQsOCArNzUy
MiwxMCBAQAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNDMTM0RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUwMjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2Nr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8q
IFdlYWtCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCRkNFNjkxMENEQjFGQzAwMzY0Q0NF
IC8qIFdlYWtHQ01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4NkE5M0UxQUE0
RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0RTg0RkEyMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03MTA3LDkgKzc1NDcsMTIgQEAKIAkJCQk5OTU5RTkyRTFCRDE3RkE0MDAxQUE0MTMg
LyogeHhkLnBsIGluIEhlYWRlcnMgKi8sCiAJCQkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8q
IFlhcnIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZ
YXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCNDMxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50YXhD
aGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKQEAgLTcxMzQsNiArNzU3NywyMiBAQAogCQkJcHJvZHVjdFJlZmVy
ZW5jZSA9IDBGQ0VGQUI2MTgwNUQ2MTYwMDQ3MkNFNCAvKiBsaWJsbHZtRm9ySlNDLmR5bGliICov
OwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LmR5bmFt
aWMiOwogCQl9OworCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovID0gewor
CQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBG
RUM4NUE4MUJEQjVDRjEwMDgwRkY3NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAidGVzdGIzIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGRUM4
NTk1MUJEQjVDRjEwMDgwRkY3NCAvKiBTb3VyY2VzICovLAorCQkJCTBGRUM4NUEyMUJEQjVDRjEw
MDgwRkY3NCAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkp
OworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YjM7CisJCQlwcm9k
dWN0TmFtZSA9IHRlc3RhcGk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEZFQzg1QUQxQkRCNUNG
MTAwODBGRjc0IC8qIHRlc3RiMyAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9k
dWN0LXR5cGUudG9vbCI7CisJCX07CiAJCTBGRjkyMkMzMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NM
TEludE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJ
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZGOTIyQ0ExNEY0NkIxMzAwNDFBMjRFIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJKU0NMTEludE9mZnNl
dHNFeHRyYWN0b3IiICovOwpAQCAtNzI4OSw2ICs3NzQ4LDcgQEAKIAkJCQkxNEJENTlCRTBBM0U4
RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywKIAkJCQk5MzJGNUJEQTA4MjJBMUM3MDA3MzY5NzUg
LyoganNjICovLAogCQkJCTY1MTEyMkY3MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICov
LAorCQkJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJNUQ2QjJB
NDcxNTJCOUUxNzAwNTIzMURFIC8qIFRlc3QgVG9vbHMgKi8sCiAJCQkpOwogCQl9OwpAQCAtNzUz
Niw2ICs3OTk2LDE0IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CisJCTBGRUM4NTk1MUJEQjVDRjEwMDgwRkY3NCAvKiBTb3VyY2VzICov
ID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0
IC8qIHRlc3RiMy5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEZGOTIyQzQxNEY0NkIxMzAwNDFBMjRF
IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC03NTkxLDYgKzgwNTksNyBAQAogCQkJCTBG
NTVGMEY0MTREMTA2MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyog
QVJNQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1
MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUMwMjg1
QzE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NzU5OCw4ICs4MDY3LDEwIEBACiAJCQkJQTdBOEFGMzQxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5
QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5OUQ0MTg0RUUzMTgwMDlDMTBBQiAv
KiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdBOEFGMzYxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUzRDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkYxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5Q29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdCREFFQzgxN0Y0RUExNDAwRjYxNDBD
IC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY2Mzk0NTQxNUQwNzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlDMDEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNEU1NDAxN0VBOUY1OTAwQUJCMjE3IC8qIEFz
c2VtYmx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MjAsOCArODA5MSwxMCBAQAog
CQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNjJFQzlCQjYxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ2MUI4NEZCNDYwMDE4MDFGQSAvKiBDYWxs
RnJhbWVTaHVmZmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxMzFCREFDREFDMDA4
MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDUx
Qjg0RkI0MDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRG
IC8qIENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMz
MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjI3Njcz
MjMxQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYz
NCw2ICs4MTA3LDcgQEAKIAkJCQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2Rl
T3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAv
KiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU5MzFCREIxRTEwMDA4
MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY5MTRE
Mjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OEY5NDNDMTY2NzYzMTMwMEQ2MTk3MSAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOEY5NDQyMTY2NzYzMzUwMEQ2MTk3MSAvKiBDb2RlVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc2NDEsNiArODExNSw3IEBACiAJCQkJQTcwOUYyRjIxN0EwQUMy
QTAwNTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUz
QTMzMTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRpb25S
ZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMjEwN0VDMzc2MDA0
MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZGQzc1MDE5NjEx
MEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDZCMTZEODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03NjY4LDYgKzgxNDMsNyBAQAogCQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkz
QyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkU1MDY4NjcxQUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFw
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NThEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJU
bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERG
R0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MDExQjYxOEFBRjAw
QzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjE4RDNDRjFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY3Nyw2ICs4MTUz
LDcgQEAKIAkJCQkwRjYzOTQ4NDE1RTQ4MTE4MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RDlBMjk0MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjY2RUM2MTgzNTY3MkIwMEQw
MTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODcx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYy
QjlDRTIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNB
RDggLyogREZHQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2ODUsNiArODE2Miw3
IEBACiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBh
YmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMy
IC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQ2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0
NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOUQzNjk0MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0YxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2Ji
ZXJpemUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzIyLDYgKzgyMDAsNyBAQAogCQkJCTJBODgw
Njc4MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyRkNDRjkxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBv
aW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJBbGxvY2F0ZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYwMTk2QjhGOUUw
MDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODQx
NjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3NjQsMTQgKzgyNDMsMTcgQEAKIAkJCQkwRkMw
OTc3MjE0NjkzQUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM5MkM4OTFCNDYxODg0MDA4NDQ3Mjgg
LyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRkM5QUExNjgx
QTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyMzVCRUQxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYyMzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZH
UGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVCMTRF
RjkwQUQwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUw
RjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyQjlDRUExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3OEE5NzdBMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQkUwRjc0MTZDMURCMDkwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUQxNEVGOTBCMzAw
QzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3RO
dW1iZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3
NjYyMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03Nzg5LDYgKzgyNzEsOCBAQAogCQkJCTBGQzIwQ0I1MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdT
dHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGODkzQkRCMTkz
NkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNzkwODU1MTlBMjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzNDFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyOTFC
REFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0ZFMThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODE2LDYgKzgzMDAsNyBAQAogCQkJ
CTJBODM2Mzg1MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk5RTQ1QTI1MThBMUIyNTkwMDI2RDg4RiAvKiBFbmNvZGVkVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzcxMDdFQzM3NjAwNDI3QTQ4IC8qIEVy
cm9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDODEwN0VDMzc2MDA0MjdBNDgg
LyogRXJyb3JDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUI1OEMxNDE4N0I4
QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUM5MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckluc3RhbmNlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzg2MCw2ICs4MzQ1LDcgQEAKIAkJCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUg
LyogRlRMTGluay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFERjE4MDczOEMwMDA0NzJD
RTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEYxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyQjlDRjgxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg2Nyw2ICs4MzUzLDcgQEAKIAkJCQkwRkVBMEEy
QTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NDg1MzI5MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxs
RXZlcnl0aGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFCMTE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIzMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5RDMzOUExODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4OTksNiArODM4Niw3IEBACiAJCQkJQTVGRDAwNzUxODlCMDM4QzAwNjMzMjMx
IC8qIElkZW50aWZpZXJzRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVGOEJDRDE1
NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMTNFMDRFMTYxNjRBMUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZl
cnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2
IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjhCREVBMUFE
NENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkw
Niw2ICs4Mzk0LDcgQEAKIAkJCQk5RUE1QzdBMjE5MEYwODg3MDA1MDhFQkUgLyogSW5pdGlhbGl6
ZUxMVk1NYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDgxOTBGMDIxRTAwMUE5MUI1
IC8qIEluaXRpYWxpemVMTFZNUE9TSVguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDcx
OTBGMDFBNTAwMUE5MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1N0IxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3Rl
ZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0Ig
LyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OEUzNTkxMTg2
MERFQ0YwMDFGMjRGRSAvKiBJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03OTE3LDYgKzg0MDYsNyBAQAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2
MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTMyNDM4NzE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwODExODlCMTkxQTAw
NjMzMjMxIC8qIEluc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTdEMjNFNTE4OTBDRUJGMDAzMUM3RkEgLyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTMyNDM4OTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJv
bnRlbmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5NzMsNiArODQ2Myw3IEBA
CiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQwRjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Nv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGODkyMEE1MDhCMTAwMDA1RjA2
MSAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NkYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEFCREY2
MDBBNDM3RkVGMDBFQ0NBMDEgLyogSlNDYWxsYmFja09iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk2NTdDRjQ1ODE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdEODAxQTgxODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzk4MCw2ICs4NDcxLDggQEAKIAkJCQkxNDdGMzlENjEwN0VDMzc2MDA0
MjdBNDggLyogSlNDSlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRkNFNDBBNTFF
NDZCMDAwNUYwNjEgLyogSlNDbGFzc1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4
NzE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTkwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxNEJENUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0
UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjAyOEI2MTc5NzYwMUUwMDk4MDI4QyAvKiBK
U0NUZXN0UnVubmVyVXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTkwLDE2ICs4NDgzLDE5
IEBACiAJCQkJRkUzODRFRTcxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52
aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAw
NURCQzhEIC8qIEpTRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MUQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3OTdF
MDdBOTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDIxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTR2xvYmFsT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDg1MTg5QjFCN0UwMDYzMzIzMSAvKiBK
U0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUMzQTFB
NTE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTk0NTU5MjE4MjQ3NDQ3MDBDQzM4NDMgLyogSlNH
bG9iYWxPYmplY3REZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U5MTg5
MUIwNzcwMDMxQzdGQSAvKiBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTAwN0MwMTg3Q0MzQzYwMEIzODg3OSAv
KiBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUwRTRCNjMxODgwOURENTAwNjhBNDZEIC8qIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTI5MTg4RjEwNTkwMDExMEYxNCAvKiBKU0ds
b2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTIzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTEzRTVCRjE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxM0U1QzExODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDgwMUI4NDI5QTQw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMTgs
NiArODUxNCw3IEBACiAJCQkJRTMxOENCQzAxQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzOURBNEE2MUI3RThCN0MwMDg0
RjMzQSAvKiBKU01vZHVsZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNFOEQxQzFC
OTAxM0MzMDAzNDZCNTIgLyogSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2Jq
ZWN0UmVmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAzMSw2ICs4NTI4LDcgQEAKIAkJCQlFM0VG
ODg3NDFCNjZERjIzMDAzRjI2Q0IgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTUyQzM3RjFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNw
ZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTI4RkYzQjE4QUM0
QUVDMDBCOENGMTIgLyogSlNSZXBsYXlJbnB1dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4
NzRBRTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdDMEM0QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtODA1OSw2ICs4NTU3LDcgQEAKIAkJCQk3MDlGQjg2NzFBRTMzNUM2MDAzOUQwNjkgLyog
SlNXZWFrU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5
QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVF
MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwNjYsOSArODU2NSwxMiBAQAog
CQkJCTE0OEYyMUIwMTA3RUM1NDEwMDQyRUMyQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYgLyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9i
amVjdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMw
IC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAw
QkZFMjcyIC8qIExMSW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODRGRTFCREFD
REFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMzhCMDExMTdDRjA3ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50RXhjZXB0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyog
TExJbnRTbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDc3LDYgKzg1NzksNyBAQAog
CQkJCUE3RTVBQjM3MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50
ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTWVtb3J5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0
NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODA4NiwxMCArODU4OSwxMiBAQAogCQkJCUE3QTRBRTA4MTc5
NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzAwODczOTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTc0REVGOTMxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9y
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3M0QxN0NCRThE
MzAwQzNFNjQzIC8qIE1hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkI5MTZD
NTE0REEwNDBDMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MkQ2RjA4MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQwQTQ4NDFBOTA1MUFGMDBENzNDQ0EgLyogTWF0
aENvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYg
LyogTWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMjgsMTcgKzg2MzMsMjEgQEAK
IAkJCQkwRkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlBRTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRl
Y29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMjkxNjc3MUMzMzAwOUNDQjA3IC8q
IFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUw
QjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRjcyOUFGMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNv
bXBpbGF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMTE2NkFEMzVDMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRjcyOUIyMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFiYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMTkwQ0FDMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29u
UmVhc29uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NS
RXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyog
UHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2Nzcx
QzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0ZCNjBBNDEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVy
dHlEZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REU4MTA3RUM3RTcwMDY1
MDQ0NiAvKiBQcm9wZXJ0eVNsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQURFMzlGRkYxNkRE
MTQ0QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTQ3
LDEwICs4NjU2LDEyIEBACiAJCQkJMEYxNUNEMjIxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRG
bGFncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyog
UHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzQjRBOTE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MkIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjYwQUMzMTY3NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUzMzYzN0E1MUI2MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3ODFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJl
Z0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRF
RiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDIx
MDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODE2NCw2ICs4Njc1LDcgQEAKIAkJCQlBNUJBMTVFOTE4MjM0MEIzMDBBODJFNjkgLyogUmVt
b3RlSW5zcGVjdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OEYxODI0NUVGRDAwQ0Mz
ODQzIC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTVCQTE1RUMxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25u
ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUVFMTgyMzQwQjQw
MEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyNEU1NTAxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTI3NzczREUxQUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODE4Miw2ICs4Njk0LDcgQEAKIAkJCQlBNTRDRjJGOTE4NEVBRURBMDAy
MzdGMTkgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NENGMkY1MTg0
RUFCMjQwMDIzN0YxOSAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5
OURBNTE3RDEyODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1ODUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTc5MERENkQxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0ZXJh
dG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REExMTdEMTI4NDgwMDVG
NUZGOSAvKiBTZXRQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRTk4NDMxQTg5
MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
ODE5Niw2ICs4NzA5LDcgQEAKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3Vs
YXRlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUVBRjExNzk4N0FCNjAwMjk5REIy
IC8qIFN0YWNrVmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzMwQjYxMzEyNTAwNjhG
MDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1MjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NDY5REVCMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0
b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUw
NDQ2IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMTIsNiArODcyNiw3
IEBACiAJCQkJNzA1QjQxQUQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTcwNUI0MUFGMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8q
IFN5bWJvbFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzRjFCREFDREFD
MDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjgx
NTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcw
RUNBNjA3MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJTZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MjQwLDYgKzg3NTUsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRF
REIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUw
QkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4MzFCREFDREM3MDA4MEZGNzQgLyog
QWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyQzFBQTkwOTU2MDBE
MzNCMzMgLyogVmFyT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjBDMjU5MUE4MDEz
QUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4
RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODI1OSw2
ICs4Nzc1LDcgQEAKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwOUZCODZCMUFFMzM1QzYwMDM5RDA2OSAv
KiBXZWFrU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBNEVDOTBCMTg2MEQ2
QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1N0QxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9y
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QUIzQTE3OTlFNEIyMDBEMjgzM0QgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4
NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyODUs
NiArODgwMiwxMSBAQAogCQkJdGFyZ2V0ID0gMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxs
dm1Gb3JKU0MgKi87CiAJCQl0YXJnZXRQcm94eSA9IDBGQ0VGQUJDMTgwNUQ2NjMwMDQ3MkNFNCAv
KiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CiAJCX07CisJCTBGRUM4NUIxMUJEQjVEOEYwMDgw
RkY3NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVw
ZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMg
Ki87CisJCQl0YXJnZXRQcm94eSA9IDBGRUM4NUIwMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhDb250
YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCTBGRjkyMkQzMTRGNDZCMkYwMDQxQTI0RSAvKiBQ
QlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsK
IAkJCXRhcmdldCA9IDBGNDY4MEE5MTRCQTdGRDkwMEJGRTI3MiAvKiBMTEludCBPZmZzZXRzICov
OwpAQCAtODQwOSw2ICs4OTMxLDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IFByb2R1Y3Rpb247CiAJ
CX07CisJCTBGRUM4NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9
IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBC
QzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJ
CQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJ
CQluYW1lID0gRGVidWc7CisJCX07CisJCTBGRUM4NUFBMUJEQjVDRjEwMDgwRkY3NCAvKiBSZWxl
YXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1F
ID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkwRkVDODVBQjFC
REI1Q0YxMDA4MEZGNzQgLyogUHJvZmlsaW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZp
Z3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAw
QzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGlu
Z3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9m
aWxpbmc7CisJCX07CisJCTBGRUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9uICov
ID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlv
blJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54
Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVz
dGIzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRkY5MjJDQjE0RjQ2
QjEzMDA0MUEyNEUgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlv
bjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1
NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtODc2MSw2ICs5MzE1LDE3IEBA
CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRkVDODVBODFCREI1Q0YxMDA4MEZG
NzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3Ri
MyIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1
cmF0aW9ucyA9ICgKKwkJCQkwRkVDODVBOTFCREI1Q0YxMDA4MEZGNzQgLyogRGVidWcgKi8sCisJ
CQkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8qIFJlbGVhc2UgKi8sCisJCQkJMEZFQzg1QUIx
QkRCNUNGMTAwODBGRjc0IC8qIFByb2ZpbGluZyAqLywKKwkJCQkwRkVDODVBQzFCREI1Q0YxMDA4
MEZGNzQgLyogUHJvZHVjdGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwor
CQl9OwogCQkwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciIgKi8gPSB7
CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9
ICgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
OCBAQAogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKIAorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgZG91YmxlIE1hY3JvQXNzZW1ibGVyOjp0
d29Ub1RoZTMyID0gKGRvdWJsZSkweDEwMDAwMDAwMHVsbDsKQEAgLTQ3LDUgKzQ5LDcwIEBAIHZv
aWQgTWFjcm9Bc3NlbWJsZXI6OmNhbGxQcm9iZShzdGQ6OmZ1bmMKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw6CisgICAgICAgIG91dC5wcmlu
dCgiTm90RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgi
QWJvdmVPckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVy
OjpCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsOgorICAgICAgICBvdXQucHJpbnQo
IkJlbG93T3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxl
cjo6R3JlYXRlclRoYW46CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbDoK
KyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbk9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQo
Ikxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpM
ZXNzVGhhbk9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW5PckVxdWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE1hY3JvQXNzZW1ibGVy
OjpSZXN1bHRDb25kaXRpb24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNl
IE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJPdmVyZmxvdyIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkOgorICAg
ICAgICBvdXQucHJpbnQoIlNpZ25lZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNy
b0Fzc2VtYmxlcjo6UG9zaXRpdmVPclplcm86CisgICAgICAgIG91dC5wcmludCgiUG9zaXRpdmVP
clplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Olplcm86
CisgICAgICAgIG91dC5wcmludCgiWmVybyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJOb25aZXJvIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTYsOCArMTU5NiwxOSBA
QCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKworY2xh
c3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKK25hbWVz
cGFjZSBKU0MgeworCiAvLyBJZiB0aGVyZSBpcyBubyBhc3NlbWJsZXIgZm9yIHRoaXMgcGxhdGZv
cm0sIGF0IGxlYXN0IGFsbG93IGNvZGUgdG8gbWFrZSByZWZlcmVuY2VzIHRvCiAvLyBzb21lIG9m
IHRoZSB0aGluZ3MgaXQgd291bGQgb3RoZXJ3aXNlIGRlZmluZSwgYWxiZWl0IHdpdGhvdXQgZ2l2
aW5nIHRoYXQgY29kZSBhbnkgd2F5CiAvLyBvZiBkb2luZyBhbnl0aGluZyB1c2VmdWwuCkBAIC0x
NjExLDYgKzE2MjIsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBGUFJlZ2lzdGVySUQgeyBOb0ZQUmVn
aXN0ZXIgfTsKIH07CiAKK30gLy8gbmFtZXNwYWNlIEpTQworCiAjZW5kaWYgLy8gRU5BQkxFKEFT
U0VNQkxFUikKIAogI2VuZGlmIC8vIE1hY3JvQXNzZW1ibGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVy
bnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hlcgorCisjIE5vdGUgdGhhdCB0
aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNzb2NpYXRpb24gYW5kIGNhbm9u
Y2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5ldmVyIHNlZSBBZGQoQWRkKHgs
IGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZWFz
c29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3QyKS4gQWxzbywgd2Ugd2lsbCBu
ZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGNhbm9uaWNhbGl6
ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBpbiB0aGlzIGNvZGUgd2UgbmV2
ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXphdGlvbnMKKyMgaGF2aW5nIGJl
ZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMgaW4g
QjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3QgbmVlZCB0byBtYXRjaCBBZGQo
eCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQgaW50byB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5IGZhbmN5IG1hdGhpbmcgdGhp
cyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0FkZFNoaWZ0MSA9IEFkZChTaGwo
aW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBBZGQoYmFzZSwgU2hsKGluZGV4
LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK0RpcmVjdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1lbnRSZWdW
YWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3VtZW50UmVnVmFsdWVfaAorI2RlZmluZSBCM0Fy
Z3VtZW50UmVnVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFs
dWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyBy
ZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFs
dWUoKTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3Vt
ZW50UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXJUeXBl
KCkgOiBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3JlZyhyZWcpCisgICAgeworICAgICAg
ICBBU1NFUlQocmVnLmlzU2V0KCkpOworICAgIH0KKworICAgIFJlZyBtX3JlZzsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjb25zdCBjaGFyKiBjb25zdCBC
YXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOworCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVu
c2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxv
Y2soKQoreworfQorCit2b2lkIEJhc2ljQmxvY2s6OmFwcGVuZChWYWx1ZSogdmFsdWUpCit7Cisg
ICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVk
ZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vz
c29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6OnJlbW92ZVByZWRlY2Vzc29y
KHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3Io
QmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgcmV0dXJuIEIzOjpyZXBs
YWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwg
bV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6IDsgZnJlcXVlbmN5ID0g
IiwgbV9mcmVxdWVuY3ksICJcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRoaXMpCisg
ICAgICAgIG91dC5wcmludCgiICAgICIsIEIzOjpkZWVwRHVtcCh2YWx1ZSksICJcbiIpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2NrX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgor
I2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsK
K2NsYXNzIFZhbHVlOworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSo+IFZhbHVlTGlzdDsKKyAgICB0eXBlZGVmIFZlY3Rv
cjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEZy
ZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsgLy8gVGhpcyBtYXRjaGVzIENvbnRyb2xW
YWx1ZTo6U3VjY2Vzc29yTGlzdAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQ
cmVmaXg7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBWYWx1ZUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZhbHVlTGlzdDo6aXRlcmF0b3IgZW5k
KCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZhbHVl
TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7
IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9
CisgICAgVmFsdWUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5k
ZXhdOyB9CisgICAgVmFsdWUqJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2lu
ZGV4XTsgfQorCisgICAgVmFsdWUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0
KCk7IH0KKyAgICBWYWx1ZSomIGxhc3QoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKwor
ICAgIGNvbnN0IFZhbHVlTGlzdCYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0K
KyAgICBWYWx1ZUxpc3QmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChWYWx1ZSopOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhcHBl
bmROZXcoUHJvY2VkdXJlJiwgQXJndW1lbnRzLi4uKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nl
c3NvcnMoKSBjb25zdDsKKyAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNp
Z25lZCBpbmRleCkgY29uc3Q7CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpOworICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdDsK
KyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KTsKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2lj
QmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpOworICAgIFN1Y2Nlc3NvckNv
bGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29y
QmxvY2tzKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7
IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNl
c3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhd
OyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHBy
ZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisgICAgUHJlZGVj
ZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorCisg
ICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZW1vdmVQcmVk
ZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCisgICAgZG91YmxlIGZyZXF1ZW5jeSgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0YW50aWF0
ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBm
cmVxdWVuY3kpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1
ZXM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2Zy
ZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAg
RGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1f
YmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Js
b2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQo
IjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Js
b2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChjb25zdCBCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9j
a0lubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogQmFz
aWNCbG9jazo6YXBwZW5kTmV3KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcHJvY2VkdXJlLmFkZDxWYWx1ZVR5
cGU+KGFyZ3VtZW50cy4uLik7CisgICAgYXBwZW5kKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW5saW5lIHVuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25z
dAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29y
cygpOworfQorCitpbmxpbmUgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29u
dHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitpbmxpbmUgRnJlcXVlbnRlZEJs
b2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJu
IGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitpbmxp
bmUgY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29y
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNj
ZXNzb3JzKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Js
b2NrOjpzdWNjZXNzb3JzKCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+
KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2sqIEJhc2ljQmxvY2s6OnN1
Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBzdWNjZXNz
b3IoaW5kZXgpLmJsb2NrKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6
c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIHN1Y2Nlc3Nvcihp
bmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9j
aywgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tz
KCkKK3sKKyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNz
b3JMaXN0PihzdWNjZXNzb3JzKCkpOworfQorCitpbmxpbmUgU3VjY2Vzc29yQ29sbGVjdGlvbjxj
b25zdCBCYXNpY0Jsb2NrLCBjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Js
b2NrOjpzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAoreworICAgIHJldHVybiBTdWNjZXNzb3JDb2xs
ZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMo
KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrVXRpbHNfaAorI2RlZmluZSBCM0Jhc2lj
QmxvY2tVdGlsc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNJbmRleFNl
dC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2Nr
LCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBi
bG9jay0+cHJlZGVjZXNzb3JzKCk7CisKKyAgICBpZiAocHJlZGVjZXNzb3JzLmNvbnRhaW5zKHBy
ZWRlY2Vzc29yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcHJlZGVjZXNzb3JzLmFw
cGVuZChwcmVkZWNlc3Nvcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhc2ljQmxvY2s+Citib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2Nr
LCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBi
bG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRl
Y2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IHBy
ZWRlY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnNbaS0tXSA9IHByZWRlY2Vzc29y
cy5sYXN0KCk7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgQVNTRVJUKCFwcmVkZWNlc3NvcnMuY29udGFpbnMocHJlZGVjZXNzb3IpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVwbGFjZVByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykK
K3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IGZyb20pIHsKKyAgICAgICAgICAgIHByZWRlY2Vz
c29yc1tpXSA9IHRvOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIHJlY29tcHV0ZXMgcHJlZGVjZXNzb3Jz
IGFuZCByZW1vdmVzIGJsb2NrcyB0aGF0IGFyZW4ndCByZWFjaGFibGUuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCYXNpY0Jsb2NrPgordm9pZCByZXNldFJlYWNoYWJpbGl0eShWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQoreworICAgIC8vIENsZWFyIGFsbCBwcmVkZWNl
c3NvciBsaXN0cyBmaXJzdC4KKyAgICBmb3IgKGF1dG8mIGJsb2NrIDogYmxvY2tzKQorICAgICAg
ICBibG9jay0+cHJlZGVjZXNzb3JzKCkucmVzaXplKDApOworCisgICAgR3JhcGhOb2RlV29ya2xp
c3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsKKyAgICB3b3Jr
bGlzdC5wdXNoKGJsb2Nrc1swXS5nZXQoKSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2Nr
ID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
OiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIGlmICh3b3JrbGlzdC5w
dXNoKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMo
KS5hcHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmxvY2tzW2ldLT5w
cmVkZWNlc3NvcnMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBibG9ja3NbaV0gPSBudWxscHRy
OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrVXRpbHNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM0Jsb2NrV29ya2xpc3RfaAorI2RlZmluZSBCM0Jsb2NrV29ya2xp
c3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgor
I2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3Qu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tXb3JrbGlzdDsKKworLy8gV2hl
biB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91bGQgcmVhZCBpdCBhcyAiYmxvY2sgd2l0
aCBhbiBpbnQiLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gR3JhcGhO
b2RlV2l0aDxCYXNpY0Jsb2NrKiwgVD47CisKKy8vIEV4dGVuZGVkIGJsb2NrIHdvcmtsaXN0IGlz
IHVzZWZ1bCBmb3IgZW5xdWV1ZWluZyBzb21lIG1ldGEtZGF0YSBhbG9uZyB3aXRoIHRoZSBibG9j
ay4gSXQgYWxzbworLy8gcGVybWl0cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlm
IHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgorLy8gdGhp
bmdzIGxpa2UgYnVpbGRpbmcgYSBzcGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBh
dXhpbGlhcnkgcGF5bG9hZCkgd291bGQgYmUgdGhlCisvLyBzdWNjZXNzb3IgaW5kZXguCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdy
YXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47CisK
K3R5cGVkZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CisKK3R5cGVkZWYgR3JhcGhOb2Rl
V2l0aE9yZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKKwordHlwZWRlZiBQb3N0T3Jk
ZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBv
c3RPcmRlckJsb2NrV29ya2xpc3Q7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmxvY2tXb3JrbGlzdF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hl
Y2tTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5o
IgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQWlySW5zdElu
bGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsKKwor
dW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCit7CisgICAgc3dpdGNoIChpbnN0Lm9yaWdp
bi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6Cisg
ICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgLy8gUmVzQ29uZCwgVG1wLCBUbXAKKyAgICAgICAg
cmV0dXJuIDM7CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVjaWFs
OjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQorICAg
IDogbV9jaGVja09wY29kZShvcGNvZGUpCisgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQor
eworfQorCitDaGVja1NwZWNpYWw6On5DaGVja1NwZWNpYWwoKQoreworfQorCitJbnN0IENoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNvbnN0IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAgSW5z
dCBoaWRkZW5CcmFuY2gobV9jaGVja09wY29kZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRlbkJy
YW5jaC5hcmdzLnJlc2l6ZShtX251bUNoZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
bV9udW1DaGVja0FyZ3M7IGktLTspCisgICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzW2ldID0gaW5z
dC5hcmdzW2kgKyAxXTsKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNr
U3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6
RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZv
ckVhY2hBcmcoY2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwg
bV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVj
aWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0
KS5pc1ZhbGlkRm9ybSgpCisgICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJncyhpbnN0KSwg
bV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0KTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6OmFkbWl0
c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChhcmdJbmRl
eCA+PSAxICYmIGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hlY2tBcmdzKQorICAgICAgICByZXR1cm4g
aGlkZGVuQnJhbmNoKGluc3QpLmFkbWl0c1N0YWNrKGFyZ0luZGV4IC0gMSk7CisgICAgcmV0dXJu
IGFkbWl0c1N0YWNrSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5z
dCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFsOjpnZW5l
cmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNv
bnRleHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWwgPSBoaWRkZW5CcmFuY2goaW5z
dCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICBBU1NFUlQoZmFpbC5pc1NldCgpKTsKKwor
ICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiBy
ZXBzOworICAgIGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7CisgICAgICAgIGlm
ICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisgICAgICAgICAgICByZXBzLmFwcGVuZChW
YWx1ZVJlcCgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNrU3Vi
ICYmIHZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpCisgICAgICAgICAgICByZXBzLmFwcGVuZChW
YWx1ZVJlcDo6Y29uc3RhbnQoMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBzLmFw
cGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzNdKSk7CisgICAgICAgIHJl
cHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENoZWNrKTsKKyAgICAg
ICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEpKTsKKyAgICB9CisKKyAgICBhcHBl
bmRSZXBzSW1wbChjb250ZXh0LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIHJlcHMpOworICAg
IAorICAgIGNvbnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgY3JlYXRlU2hhcmVkVGFz
azxHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCisgICAgICAgICAgICBbPV0g
KENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpIHsKKyAgICAgICAgICAgICAg
ICBmYWlsLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAgICAgICAgICAgICAgQVNT
RVJUKHN0YWNrbWFwKTsKKworICAgICAgICAgICAgICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFy
YW1zIHBhcmFtczsKKyAgICAgICAgICAgICAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICAg
ICAgICAgICAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICAgICAgICAgICAgICBw
YXJhbXMucmVwcyA9IHJlcHM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMg
PSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgICAgICAgICAgICAgc3RhY2ttYXAt
Pm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworICAgICAgICAgICAgfSkpOworCisgICAg
cmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOyAvLyBBcyBmYXIgYXMgQWlyIHRoaW5rcywgd2Ug
YXJlIG5vdCBhIHRlcm1pbmFsLgorfQorCit2b2lkIENoZWNrU3BlY2lhbDo6ZHVtcEltcGwoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jaGVja09wY29kZSwgIigi
LCBtX251bUNoZWNrQXJncywgIikiKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmRlZXBEdW1w
SW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQjM6OkNoZWNr
VmFsdWUgbG93ZXJlZCB0byAiLCBtX2NoZWNrT3Bjb2RlLCAiIHdpdGggIiwgbV9udW1DaGVja0Fy
Z3MsICIgYXJncy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tT
cGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tT
cGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1NwZWNpYWxf
aAorI2RlZmluZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHdhbnQgdG8gbG93ZXIgQ2hlY2sg
aW5zdHJ1Y3Rpb25zIHRvIGEgYnJhbmNoLCBidXQgdGhlbiB3ZSB3YW50IHRvIHJvdXRlIHRoYXQg
YnJhbmNoIHRvIG91cgorLy8gb3V0LW9mLWxpbmUgY29kZSBpbnN0ZWFkIG9mIGRvaW5nIGFueXRo
aW5nIGVsc2UuIEZvciB0aGlzIHJlYXNvbiwgYSBDaGVja1NwZWNpYWwgd2lsbCByZW1lbWJlcgor
Ly8gd2hpY2ggYnJhbmNoIG9wY29kZSB3ZSBoYXZlIHNlbGVjdGVkIGFsb25nIHdpdGggdGhlIG51
bWJlciBvZiBhcmdzIGluIHRoZSBvdmVybG9hZCB3ZSB3YW50LiBJdAorLy8gd2lsbCBjcmVhdGUg
YW4gSW5zdCB3aXRoIHRoYXQgb3Bjb2RlIHBsdXMgdGhlIGFwcHJvcHJpYXRlIGFyZ3MgZnJvbSB0
aGUgb3duaW5nIEluc3Qgd2hlbmV2ZXIgeW91CisvLyBjYWxsIGFueSBvZiB0aGUgY2FsbGJhY2tz
LgorLy8KKy8vIE5vdGUgdGhhdCBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwg
d2UgZXhwZWN0IHRoYXQgdGhlIEIzIGFyZ3VtZW50cyBhcmUgdGhlIHJldmVyc2UKKy8vIG9mIHRo
ZSBBaXIgYXJndW1lbnRzIChBZGQoYSwgYikgPT4gQWRkMzIgYiwgYSkuIEV4Y2VwdDoKKy8vIC0g
Q2hlY2tTdWIoMCwgeCksIHdoaWNoIHR1cm5zIGludG8gQnJhbmNoTmVnMzIgeC4KKy8vIC0gQ2hl
Y2tNdWwoYSwgYiksIHdoaWNoIHR1cm5zIGludG8gTXVsMzIgYiwgYSBidXQgd2UgcGFzcyBBbnkg
Zm9yIGEncyBWYWx1ZVJlcC4KKworY2xhc3MgQ2hlY2tTcGVjaWFsIDogcHVibGljIFN0YWNrbWFw
U3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1bnNpZ25l
ZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKKyAgICAvLyBDb25zdHJ1Y3RzIGFu
ZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJhbmNoIHRoYXQgdGhpcyB3aWxs
IHVzZS4KKyAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNvbnN0IEFpcjo6SW5zdCYpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNj
b3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBi
b29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhB
aXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisKKyAgICAvLyBOT1RFOiB0
aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhpZGRlbiBicmFuY2ggYW5kIHRo
ZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2VuZXJhdGVzIHRoZSBzdGFja21h
cC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShB
aXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJp
ZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Cisg
ICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1fbnVt
Q2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1NwZWNpYWxfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0No
ZWNrVmFsdWU6On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9pZCBDaGVja1ZhbHVlOjpkdW1wTWV0
YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgic3RhY2ttYXAgPSAi
LCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tWYWx1ZV9oCisjZGVmaW5l
IEIzQ2hlY2tWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFj
a21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NsYXNzIENoZWNrVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAg
IHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIGNhc2UgQ2hlY2tT
dWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIGNhc2UgQ2hlY2s6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5DaGVja1ZhbHVlKCk7CisKKyAgICBTdGFj
a21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQg
Q2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgOiBWYWx1
ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbiwgbGVmdCwgcmlnaHQpCisgICAg
eworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7CisgICAgICAgIEFTU0VSVChsZWZ0LT50
eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2tB
ZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9PSBDaGVja011bCk7CisgICAgfQor
CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSkK
KyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2spOworICAgIH0KK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29t
bW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkRGR0Nv
bW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiT3B0aW9ucy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBzaG91bGREdW1wSVIoKQorewor
ICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBGVEw6OnNob3Vs
ZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jv
b2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjpkdW1w
R3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVIoKQoreworICAg
IHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkgfHwgc2hvdWxkVmFsaWRhdGVJUkF0RWFj
aFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkKK3sKKyAg
ICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wg
c2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2ZXJib3Nl
VmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21t
b24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVmaW5lIEIzQ29t
bW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitpbmxpbmUgYm9vbCBpczY0Qml0KCkgeyByZXR1cm4gc2l6ZW9mKHZvaWQqKSA9PSA4
OyB9CitpbmxpbmUgYm9vbCBpczMyQml0KCkgeyByZXR1cm4gIWlzNjRCaXQoKTsgfQorCitib29s
IHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpOworYm9vbCBz
aG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOwor
Ym9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbW1vbl9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlND
OjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENvbW11dGF0aXZp
dHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNvbW11dGF0aXZpdHkpIHsKKyAgICBj
YXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIkNvbW11dGF0aXZlIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQo
Ik5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0
YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11
dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb21tdXRhdGl2
aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIENvbW11dGF0aXZpdHkgewor
ICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZlCit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6Q29tbXV0YXRpdml0eSk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbXBhcmlzb25NYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzOCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisj
IGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkg
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
CisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKworbWF0Y2hlciBDb21wYXJpc29uTWF0Y2hlcgorCitUZXN0TG9hZE5vdFplcm8x
ID0gQW5kKExvYWQoYWRkcmVzcyksIHJpZ2h0KQorVGVzdExvYWROb3RaZXJvMiA9IEFuZChsZWZ0
LCBMb2FkKGFkZHJlc3MpKQorVGVzdE5vdFplcm8gPSBBbmQobGVmdCwgcmlnaHQpCisKK1Rlc3RM
b2FkWmVybzEgPSBFcXVhbChBbmQoTG9hZChhZGRyZXNzKSwgcmlnaHQpLCAkMCkKK1Rlc3RMb2Fk
WmVybzIgPSBFcXVhbChBbmQobGVmdCwgTG9hZChhZGRyZXNzKSksICQwKQorVGVzdFplcm8gPSBF
cXVhbChBbmQobGVmdCwgcmlnaHQpLCAkMCkKKworTG9hZEVxdWFsMSA9IEVxdWFsKExvYWQoYWRk
cmVzcyksIHJpZ2h0KQorTG9hZEVxdWFsMiA9IEVxdWFsKGxlZnQsIExvYWQoYWRkcmVzcykpCitO
b3QgPSBFcXVhbCh2YWx1ZSwgJDApCitFcXVhbCA9IEVxdWFsKGxlZnQsIHJpZ2h0KQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3Qz
MlZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBD
b25zdDMyVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dDMyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0MzJWYWx1
ZV9oCisjZGVmaW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IENvbnN0MzI7IH0KKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29uc3QzMlZh
bHVlKCk7CisgICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKworcHJvdGVjdGVkOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1ldGEoUHJp
bnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisKKyAgICBDb25zdDMyVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDMy
X3QgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0MzIsIEludDMyLCBvcmlnaW4p
CisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAg
IGludDMyX3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0
NjRWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK0NvbnN0NjRWYWx1ZTo6fkNvbnN0NjRWYWx1ZSgpCit7Cit9CisKK3ZvaWQg
Q29uc3Q2NFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFs
dWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29uc3Q2NFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9w
Y29kZSA9PSBDb25zdDY0OyB9CisgICAgCisgICAgfkNvbnN0NjRWYWx1ZSgpOworICAgIAorICAg
IGludDY0X3QgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBD
b25zdDY0LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgewor
ICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNDb25zdDY0VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Nv
bnN0RG91YmxlVmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERv
dWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdERvdWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NvbnN0RG91YmxlVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0RG91YmxlVmFsdWVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMg
VmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkg
eyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91Ymxl
VmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2
YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2lu
KQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3Vi
bGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3RQdHJWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3RQ
dHJWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb25zdDMyVmFs
dWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworLy8gVXN1YWxseSB5b3Ugd2FudCB0byB1c2UgQ29uc3QzMlZhbHVlIG9y
IENvbnN0NjRWYWx1ZSBkaXJlY3RseS4gQnV0IHRoaXMgaXMgdXNlZnVsIGZvciB3cml0aW5nCisv
LyBwbGF0Zm9ybS1hZ25vc3RpYyBjb2RlLiBOb3RlIHRoYXQgYSBDb25zdFB0clZhbHVlIHdpbGwg
YmVoYXZlIGxpa2UgZWl0aGVyIGEgQ29uc3QzMlZhbHVlIG9yCisvLyBDb25zdDY0VmFsdWUgZGVw
ZW5kaW5nIG9uIHBsYXRmb3JtLgorCisjaWYgVVNFKEpTVkFMVUU2NCkKK3R5cGVkZWYgQ29uc3Q2
NFZhbHVlIENvbnN0UHRyVmFsdWVCYXNlOworI2Vsc2UKK3R5cGVkZWYgQ29uc3QzMlZhbHVlIENv
bnN0UHRyVmFsdWVCYXNlOworI2VuZGlmCisKK2NsYXNzIENvbnN0UHRyVmFsdWUgOiBwdWJsaWMg
Q29uc3RQdHJWYWx1ZUJhc2UgeworcHVibGljOgorICAgIHZvaWQqIHZhbHVlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KENvbnN0UHRyVmFsdWVCYXNl
Ojp2YWx1ZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKKworICAgIENvbnN0UHRyVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHZv
aWQqIHBvaW50ZXIpCisgICAgICAgIDogQ29uc3RQdHJWYWx1ZUJhc2UoaW5kZXgsIG9yaWdpbiwg
Yml0d2lzZV9jYXN0PGludHB0cl90Pihwb2ludGVyKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNDb25zdFB0clZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+
Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGxpc3REdW1wKG1fc3VjY2Vzc29y
cykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb250cm9sVmFsdWVfaAorI2RlZmlu
ZSBCM0NvbnRyb2xWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNG
cmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCitjbGFzcyBKU19FWFBPUlRf
UFJJVkFURSBDb250cm9sVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRp
YyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bj
b2RlKSB7CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAg
IGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIE9vcHM6CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgY2FzZSBTd2l0Y2g6IAorICAgICAgICAgICAgLy8gVGhpcyBpcyBoZXJlIGJl
Y2F1c2UgU3dpdGNoVmFsdWUgaXMgYSBzdWJjbGFzcyBvZiBDb250cm9sVmFsdWUsIHNvIHdlIHdh
bnQKKyAgICAgICAgICAgIC8vIHN3aXRjaFZhbHVlLT5hczxDb250cm9sVmFsdWU+KCkgdG8gcmV0
dXJuIG5vbi1udWxsLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0eXBl
ZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB+Q29udHJvbFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNz
b3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIGNvbnN0IEZy
ZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBT
dWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9
CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsg
fQorCitwcm90ZWN0ZWQ6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNz
ZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRyb2xWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2lu
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTdWJj
bGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29y
czsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNl
IHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZv
aWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CisgICAg
fQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCisgICAg
eworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAgLy8gVXNl
IHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRhcmdldCkKKyAg
ICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAg
ICBBU1NFUlQob3Bjb2RlID09IEp1bXApOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHRh
cmdldCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEJyYW5jaC4KKyAgICBDb250cm9s
VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogcHJlZGljYXRlLAorICAgICAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHll
cywgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBubykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bj
b2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNv
ZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAg
ICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnRy
b2xWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNs
YXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVu
Y3lDbGFzcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNG
cmVxdWVuY3lDbGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNp
bmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3kpCit7CisgICAgc3dpdGNoIChmcmVxdWVuY3kp
IHsKKyAgICBjYXNlIEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWw6CisgICAgICAgIG91dC5wcmludCgi
Tm9ybWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZyZXF1ZW5jeUNsYXNzOjpSYXJl
OgorICAgICAgICBvdXQucHJpbnQoIlJhcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzRnJlcXVlbmN5Q2xhc3NfaAorI2RlZmluZSBCM0ZyZXF1ZW5jeUNsYXNzX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IGNsYXNzIEZyZXF1ZW5jeUNsYXNzIDogdWludDhfdCB7CisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBh
bnkgaHlwb3RoZXNpcyBhYm91dCB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY29udHJvbCBmbG93IGNv
bnN0cnVjdC4gVGhpcyBpcworICAgIC8vIHRoZSBjb21tb24gY2FzZS4gV2UgY2FuIHN0aWxsIHVz
ZSBiYXNpYyBibG9jayBmcmVxdWVuY3kgaW4gdGhpcyBjYXNlLgorICAgIE5vcm1hbCwKKworICAg
IC8vIFdlIGV4cGVjdCB0aGF0IHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVjdCB3aWxsIGJlIHJl
YWNoZWQgc3VwZXIgcmFyZWx5LiBJdCdzIHZhbGlkIHRvCisgICAgLy8gcGVyZm9ybSBvcHRpbWl6
YXRpb25zIHRoYXQgcHVuaXNoIFJhcmUgY29kZS4gTm90ZSB0aGF0IHRoZXJlIHdpbGwgYmUgc2l0
dWF0aW9ucyB3aGVyZSB5b3UKKyAgICAvLyBoYXZlIHRvIHNvbWVob3cgY29uc3RydWN0IGEgbmV3
IGZyZXF1ZW5jeSBjbGFzcyBmcm9tIGEgbWVyZ2luZyBvZiBtdWx0aXBsZSBjbGFzc2VzLiBXaGVu
CisgICAgLy8gdGhpcyBoYXBwZW5zLCBuZXZlciBjaG9vc2UgUmFyZTsgYWx3YXlzIGdvIHdpdGgg
Tm9ybWFsLiBUaGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlCisgICAgLy8gcmVhbGx5IGRvIHB1
bmlzaCBSYXJlIGNvZGUgdmVyeSBiYWRseS4KKyAgICBSYXJlCit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpGcmVxdWVuY3lDbGFzcyk7
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzRnJlcXVlbmN5Q2xhc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0ZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEIzRnJlcXVlbnRlZEJsb2NrX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7
CisKK3R5cGVkZWYgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVk
QmxvY2s7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisj
aW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1
ZGUgIkIzTG93ZXJUb0Fpci5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAi
QjNWYWxpZGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBn
ZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAg
QWlyOjpDb2RlIGNvZGU7CisgICAgZ2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworICAg
IEFpcjo6Z2VuZXJhdGUoY29kZSwgaml0KTsKK30KKwordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCBBaXI6OkNvZGUmIGNvZGUpCit7CisgICAgaWYgKHNob3VsZFZhbGlk
YXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlKTsKKworICAgIC8vIElmIHdlJ3Jl
IGRvaW5nIHN1cGVyIHZlcmJvc2UgZHVtcGluZywgdGhlIHBoYXNlIHNjb3BlIG9mIGFueSBwaGFz
ZSB3aWxsIGFscmVhZHkgZG8gYSBkdW1wLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hv
dWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIEIzOlxu
Iik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTog
QWRkIG1vcmUgb3B0aW1pemF0aW9ucyBoZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MDcKKworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkp
CisgICAgICAgIHZhbGlkYXRlKHByb2NlZHVyZSk7CisgICAgCisgICAgLy8gSWYgd2UncmUgZG9p
bmcgc3VwZXIgdmVyYm9zZSBkdW1waW5nLCB0aGUgcGhhc2Ugc2NvcGUgb2YgYW55IHBoYXNlIHdp
bGwgYWxyZWFkeSBkbyBhIGR1bXAuCisgICAgLy8gTm90ZSB0aGF0IGxvd2VyVG9BaXIoKSBhY3Rz
IGxpa2UgYSBwaGFzZSBpbiB0aGlzIHJlZ2FyZC4KKyAgICBpZiAoc2hvdWxkRHVtcElSKCkgJiYg
IXNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQjMgYWZ0ZXIg
IiwgcHJvY2VkdXJlLmxhc3RQaGFzZU5hbWUoKSwgIiwgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsK
KyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIGxvd2VyVG9BaXIocHJv
Y2VkdXJlLCBjb2RlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5l
cmF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyYXRlX2gKKyNkZWZpbmUgQjNH
ZW5lcmF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xh
c3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7Citu
YW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSwgb3B0aW1pemVzIGl0IGluLXBsYWNlLCBhbmQgZ2VuZXJhdGVzIGl0IHRvIG1hY2hpbmUg
Y29kZSBieSBmaXJzdAorLy8gaW50ZXJuYWxseSBjb252ZXJ0aW5nIHRvIGFuIEFpcjo6Q29kZSBh
bmQgdGhlbiBnZW5lcmF0aW5nIHRoYXQuCitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdlbmVyYXRl
KFByb2NlZHVyZSYsIENDYWxsSGVscGVycyYpOworCisvLyBUaGlzIHRha2VzIGEgQjM6OlByb2Nl
ZHVyZSwgb3B0aW1pemVzIGl0IGluLXBsYWNlLCBhbmQgbG93ZXJzIGl0IHRvIEFpci4gWW91IGNh
biB0aGVuIGdlbmVyYXRlCisvLyB0aGUgQWlyIHRvIG1hY2hpbmUgY29kZSB1c2luZyBBaXI6Omdl
bmVyYXRlKCkuIE5vdGUgdGhhdCBhbiBBaXI6OkNvZGUgd2lsbCBoYXZlIHBvaW50ZXJzIGludG8g
dGhlCisvLyBCMzo6UHJvY2VkdXJlLCBzbyB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQjM6
OlByb2NlZHVyZSBvdXRsaXZlcyB0aGUgQWlyOjpDb2RlLgordm9pZCBnZW5lcmF0ZVRvQWlyKFBy
b2NlZHVyZSYsIEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0dlbmVyYXRlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxv
Y2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCisvLyBBIGZyZXF1ZW50ZWQgYmxvY2sgaXMgYSB0dXBsZSBvZiBCYXNpY0Jsb2NrKiBhbmQg
RnJlcXVlbmN5Q2xhc3MuIEl0J3MgdXN1YWxseSB1c2VkIGFzIGEKKy8vIHN1Y2Nlc3NvciBlZGdl
LgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorY2xhc3MgR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9jayB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jaygK
KyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBudWxscHRyLCBGcmVxdWVuY3lDbGFzcyBmcmVx
dWVuY3kgPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAgICAgICA6IG1fYmxvY2soYmxvY2sp
CisgICAgICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQorICAgIHsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV9ibG9jayA9PSBvdGhlci5tX2Jsb2NrCisgICAgICAg
ICAgICAmJiBtX2ZyZXF1ZW5jeSA9PSBvdGhlci5tX2ZyZXF1ZW5jeTsKKyAgICB9CisKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRo
aXMgIT0gR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jaygpOworICAgIH0KKworICAgIEJhc2ljQmxvY2sq
IGJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIEJhc2ljQmxvY2sqJiBibG9j
aygpIHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3koKSBj
b25zdCB7IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoZnJlcXVlbmN5KCkgIT0gRnJlcXVlbmN5
Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgICAgIG91dC5wcmludChmcmVxdWVuY3koKSwgIjoiKTsK
KyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKG1fYmxvY2spKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgQmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBGcmVxdWVuY3lDbGFzcyBtX2ZyZXF1
ZW5jeTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzSW5kZXhNYXBfaAorI2RlZmluZSBCM0luZGV4TWFwX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgbWFwIGZvciBrZXlzIHRoYXQgaGF2ZSBhbiBpbmRl
eCgpLiBJdCdzIHN1cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8g
ZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVz
ZSBtYXBzLCBzaW5jZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeQorLy8gc3BhcnNlIGluZGljZXMgYW5k
IHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1ZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlw
ZW5hbWUgVmFsdWU+CitjbGFzcyBJbmRleE1hcCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW5k
ZXhNYXAoc2l6ZV90IHNpemUgPSAwKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IucmVzaXplKHNp
emUpOworICAgIH0KKworICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAg
ICAgbV92ZWN0b3IucmVzaXplKHNpemUpOworICAgIH0KKworICAgIFZhbHVlJiBvcGVyYXRvcltd
KEtleSoga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07
CisgICAgfQorICAgIAorICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNJbmRleE1hcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNl
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5k
ZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21t
YVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMg
aXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZp
Y2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVz
IGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVz
IGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2Yg
VmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIElu
ZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7Cisg
ICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1f
c2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2
YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0
ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25U
eXBlJiBjb2xsZWN0aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2Nv
bGxlY3Rpb24oY29sbGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihu
dWxscHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVy
YXRvcihjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRz
SXRlcmFibGU6Oml0ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24o
JmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJl
dHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gbV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxl
Y3Rpb25UeXBlKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJ
dGVyYWJsZTo6aXRlcmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdp
bigpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvciht
X2NvbGxlY3Rpb24sIG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29u
c3QgQ29sbGVjdGlvblR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQm
IG1fc2V0OworICAgIH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAg
Ly8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVz
LCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7Cisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVj
dGlvblR5cGU+IHZhbHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlv
bik7CisgICAgfQorCisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1
cm4gbV9zZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAg
IHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRl
eCA6IGluZGljZXMoKS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6
OmR1bXBQcmVmaXgsIGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1f
c2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4
U2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNMb3dlclRvQWlyLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29k
ZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxp
bmVzLmgiCisjaW5jbHVkZSAiQjNBZGRyZXNzTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzQXJndW1l
bnRSZWdWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRl
ICJCM0NvbW11dGF0aXZpdHkuaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAi
QjNJbmRleFNldC5oIgorI2luY2x1ZGUgIkIzTG93ZXJpbmdNYXRjaGVyLmgiCisjaW5jbHVkZSAi
QjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIz
UHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKyNpbmNsdWRlICJCM1ZhbHVl
SW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsKKwor
Y2xhc3MgTG93ZXJUb0FpciB7CitwdWJsaWM6CisgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUmIHBy
b2NlZHVyZSwgQ29kZSYgY29kZSkKKyAgICAgICAgOiB2YWx1ZVRvVG1wKHByb2NlZHVyZS52YWx1
ZXMoKS5zaXplKCkpCisgICAgICAgICwgYmxvY2tUb0Jsb2NrKHByb2NlZHVyZS5zaXplKCkpCisg
ICAgICAgICwgdXNlQ291bnRzKHByb2NlZHVyZSkKKyAgICAgICAgLCBhZGRyZXNzU2VsZWN0b3Io
KnRoaXMpCisgICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBjb2RlKGNv
ZGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAo
QjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlKQorICAgICAgICAgICAgYmxvY2tUb0Js
b2NrW2Jsb2NrXSA9IGNvZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1ZW5jeSgpKTsKKworICAgICAg
ICAvLyBMb3dlciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEg
Z29vZCBoZXVyaXN0aWMgdG8gbG9jayBkb3duIGEKKyAgICAgICAgLy8gaG9pc3RlZCBhZGRyZXNz
IGV4cHJlc3Npb24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3AuCisg
ICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlLmJsb2Nrc0luUHJl
T3JkZXIoKSkgeworICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KKyAgICAgICAgICAg
IGluc3RzLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2VzcyBi
bG9ja3MgaW4gcmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdz
IHdoYXQgYWxsb3dzIHVzCisgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3Rp
dmVseS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBibG9jay0+YXQoaSk7CisgICAgICAg
ICAgICAgICAgaWYgKGxvY2tlZC5jb250YWlucyhjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVjdG9yPElu
c3Q+KCkpOworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcnVuTG93ZXJpbmdNYXRjaGVy
KGN1cnJlbnRWYWx1ZSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7Cisg
ICAgICAgICAgICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBjb3VsZCBub3QgbG93ZXIgIiwgZGVl
cER1bXAoY3VycmVudFZhbHVlKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIGluc3RzIGNvbnRh
aW5zIHRoZW0gaW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcworICAgICAgICAgICAgLy8g
aXQgaW4gcmV2ZXJzZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluc3RzLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IGluc3RzW2ldKQor
ICAgICAgICAgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJbnN0KFdURjo6
bW92ZShpbnN0KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0
aGF0IHRoZSBzdWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgorICAgICAgICAgICAgQVNT
RVJUKGJsb2NrLT5zdWNjZXNzb3JzKCkuc2l6ZSgpIDw9IDIpOworICAgICAgICAgICAgZm9yIChC
Mzo6QmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAg
ICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoYmxv
Y2tUb0Jsb2NrW3N1Y2Nlc3Nvcl0pOworICAgICAgICB9CisKKyAgICAgICAgSW5zZXJ0aW9uU2V0
IGluc2VydGlvblNldChjb2RlKTsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogcHJvbG9ndWUp
CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdCgwLCBXVEY6Om1vdmUoaW5zdCkp
OworICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKyAgICB9CisKKyAgICBU
bXAgdG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1wID0gdmFsdWVUb1Rt
cFt2YWx1ZV07CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1wID0gY29kZS5uZXdU
bXAoaXNJbnQodmFsdWUtPnR5cGUoKSkgPyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgICAgIHJl
dHVybiB0bXA7CisgICAgfQorCisgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4gb3BlcmFuZCBp
bnRvIGFuIGFkZHJlc3MuCisgICAgQXJnIGVmZmVjdGl2ZUFkZHIoVmFsdWUqIGFkZHJlc3MpCisg
ICAgeworICAgICAgICBhZGRyZXNzU2VsZWN0b3Iuc2VsZWN0ZWRBZGRyZXNzID0gQXJnKCk7Cisg
ICAgICAgIGlmIChydW5BZGRyZXNzTWF0Y2hlcihhZGRyZXNzLCBhZGRyZXNzU2VsZWN0b3IpKQor
ICAgICAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFkZHJlc3M7CisKKyAg
ICAgICAgcmV0dXJuIHRtcChhZGRyZXNzKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGdpdmVzIHlv
dSB0aGUgYWRkcmVzcyBvZiB0aGUgZ2l2ZW4gTG9hZCBvciBTdG9yZS4gSWYgaXQncyBub3QgYSBM
b2FkIG9yIFN0b3JlLCB0aGVuCisgICAgLy8gaXQgcmV0dXJucyBBcmcoKS4KKyAgICBBcmcgYWRk
cihWYWx1ZSogbWVtb3J5VmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogdmFsdWUg
PSBtZW1vcnlWYWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmICghdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm4gQXJnKCk7CisKKyAgICAgICAgQXJnIHJlc3VsdCA9IGVmZmVjdGl2
ZUFkZHIodmFsdWUtPmNoaWxkcmVuKCkubGFzdCgpKTsKKyAgICAgICAgaWYgKCFyZXN1bHQpCisg
ICAgICAgICAgICByZXR1cm4gQXJnKCk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdC53aXRoT2Zm
c2V0KHZhbHVlLT5vZmZzZXQoKSk7CisgICAgfQorCisgICAgQXJnIGxvYWRBZGRyKFZhbHVlKiBs
b2FkVmFsdWUpCisgICAgeworICAgICAgICBpZiAobG9hZFZhbHVlLT5vcGNvZGUoKSA9PSBMb2Fk
KQorICAgICAgICAgICAgcmV0dXJuIGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgcmV0dXJuIEFy
ZygpOworICAgIH0KKworICAgIEFyZyBpbW0oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAg
aWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6aW1tKHZhbHVl
LT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgfQorCisgICAgQXJnIGlt
bU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChBcmcgcmVzdWx0ID0gaW1t
KHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB0bXAo
dmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0
YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CisgICAgdm9pZCBhcHBlbmRC
aW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3Vs
dCA9IHRtcChjdXJyZW50VmFsdWUpOworICAgICAgICAKKyAgICAgICAgLy8gVGhyZWUtb3BlcmFu
ZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAgICAgT3AgYSwgYiwgYworICAgICAgICAvLyBtZWFu
IHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAgICAgYyA9IGEgT3AgYgorCisgICAgICAgIGlm
IChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7Cisg
ICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAgICAg
ICAgICAgIGlmIChpbW0ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChvcGNv
ZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAgICAgLy8gQSBub24tY29tbXV0YXRpdmUgb3BlcmF0aW9uIGNvdWxkIGhhdmUgYW4gaW1t
ZWRpYXRlIGluIGxlZnQuCisgICAgICAgICAgICAgICAgaWYgKGltbShsZWZ0KSkgeworICAgICAg
ICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0obGVmdCksIHRtcChyaWdodCksIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW1tKHJpZ2h0KSAmJiBpc1ZhbGlk
Rm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSB7CisgICAgICAgICAg
ICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIGltbShyaWdodCksIHJlc3VsdCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBUd28tb3BlcmFuZCBmb3JtcyBs
aWtlOgorICAgICAgICAvLyAgICAgT3AgYSwgYgorICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBs
aWtlOgorICAgICAgICAvLyAgICAgYiA9IGIgT3AgYQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9p
bnQsIHdlIHByZWZlciB2ZXJzaW9ucyBvZiB0aGUgb3BlcmF0aW9uIHRoYXQgaGF2ZSBhIGZ1c2Vk
IGxvYWQgb3ZlciB0aHJlZQorICAgICAgICAvLyBvcGVyYW5kIGZvcm1zLgorICAgICAgICAKKyAg
ICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAgIEFy
ZyBsZWZ0QWRkciA9IGxvYWRBZGRyKGxlZnQpOworICAgICAgICAgICAgaWYgKGlzVmFsaWRGb3Jt
KG9wY29kZSwgbGVmdEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogVXNlIHRoZSByaWdodCBNb3ZlIG9wY29kZS4gSWYgd2UncmUgZGVhbGluZyB3aXRo
IDMyLWJpdCB0eXBlcywgd2Ugc2hvdWxkCisgICAgICAgICAgICAgICAgLy8gdXNlIE1vdmUzMi4g
SWYgd2UncmUgZGVhbGluZyB3aXRoIERvdWJsZXMsIHdlIHNob3VsZCB1c2UgTW92ZURvdWJsZS4K
KyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNTMzCisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRtcChyaWdodCksIHJlc3Vs
dCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgbGVmdEFkZHIsIHJlc3VsdCk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgQXJnIHJpZ2h0QWRkciA9IGxvYWRBZGRyKHJpZ2h0KTsKKyAgICAgICAgaWYgKGlzVmFsaWRG
b3JtKG9wY29kZSwgcmlnaHRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBh
cHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgYXBwZW5kKG9wY29k
ZSwgcmlnaHRBZGRyLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6
OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0
KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGFw
cGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRt
cChyaWdodCksIHJlc3VsdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bj
b2RlLCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICBi
b29sIHRyeUFwcGVuZFN0b3JlQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGZhaWxzIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkg
ZWZmZWN0cyBiZXR3ZWVuIHRoZSBMb2FkIGFuZCB0aGUgU3RvcmUgdGhhdAorICAgICAgICAvLyBj
b3VsZCBjbG9iYmVyIHRoZSBsb2FkZWQgdmFsdWUuIFdlIG5lZWQgdG8gY2hlY2sgc3VjaCB0aGlu
Z3MgYmVjYXVzZSB3ZSBhcmUgZWZmZWN0aXZlbHkKKyAgICAgICAgLy8gc2lua2luZyB0aGUgbG9h
ZC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDUzNAorICAgICAgICAKKyAgICAgICAgQXJnIHN0b3JlQWRkciA9IGFkZHIoY3VycmVudFZhbHVl
KTsKKyAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CisKKyAgICAgICAgVmFsdWUqIG90aGVyVmFs
dWU7CisgICAgICAgIGlmIChhZGRyKGxlZnQpID09IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90
aGVyVmFsdWUgPSByaWdodDsKKyAgICAgICAgZWxzZSBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21t
dXRhdGl2ZSAmJiBhZGRyKHJpZ2h0KSA9PSBzdG9yZUFkZHIpCisgICAgICAgICAgICBvdGhlclZh
bHVlID0gbGVmdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgc3RvcmVBZGRyLmtpbmQo
KSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXBwZW5kKG9wY29kZSwg
dG1wKG90aGVyVmFsdWUpLCBzdG9yZUFkZHIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBBaXI6Ok9wY29kZSBtb3ZlRm9yVHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVy
biBNb3ZlMzI7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChpczY0Qml0KCkpOworICAgICAgICAgICAgcmV0dXJuIE1vdmU7CisgICAgICAgIGNhc2UgRG91
YmxlOgorICAgICAgICAgICAgcmV0dXJuIE1vdmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5k
KEFpcjo6T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9wY29kZSwgY3VycmVudFZhbHVlLCBzdGQ6
OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorICAgIAorICAgIElu
ZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUg
bm8gVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiB2YWx1ZVRvVG1wOyAvLyBU
aGVzZSBhcmUgdmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQg
YSBWYWx1ZSogd2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KKyAgICBJbmRleE1hcDxC
Mzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gYmxvY2tUb0Jsb2NrOworCisgICAgVXNl
Q291bnRzIHVzZUNvdW50czsKKworICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IGluc3RzOwor
ICAgIFZlY3RvcjxJbnN0PiBwcm9sb2d1ZTsKKworICAgIFZhbHVlKiBjdXJyZW50VmFsdWU7CisK
KyAgICAvLyBUaGUgYWRkcmVzcyBzZWxlY3RvciB3aWxsIG1hdGNoIGFueSBwYXR0ZXJuIHdoZXJl
IHRoZSBpbnB1dCBvcGVyYW5kcyBhcmUgYXZhaWxhYmxlIGFzIFRtcHMuCisgICAgLy8gSXQgZG9l
c24ndCBjYXJlIGFib3V0IHNoYXJpbmcuIEl0IHdpbGwgaGFwcGlseSBlbWl0IHRoZSBzYW1lIGFk
ZHJlc3MgZXhwcmVzc2lvbiBvdmVyIGFuZCBvdmVyCisgICAgLy8gYWdhaW4gcmVnYXJkbGVzcyBv
ZiB0aGUgZXhwcmVzc2lvbidzIGNvbXBsZXhpdHkuIFRoaXMgd29ya3Mgb3V0IGZpbmUsIHNpbmNl
IGF0IHRoZSBtYWNoaW5lCisgICAgLy8gbGV2ZWwsIGFkZHJlc3MgZXhwcmVzc2lvbnMgYXJlIHN1
cGVyIGNoZWFwLiBIb3dldmVyLCB0aGlzIGRvZXMgaGF2ZSBhIGhhY2sgdG8gYXZvaWQKKyAgICAv
LyAidW5ob2lzdGluZyIgYWRkcmVzcyBleHByZXNzaW9ucy4KKyAgICBjbGFzcyBBZGRyZXNzU2Vs
ZWN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgQWRkcmVzc1NlbGVjdG9yKExvd2VyVG9BaXIm
IGxvd2VyKQorICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAgICAgICB7CisgICAg
ICAgICAgICB0aGlzLT5yb290ID0gcm9vdDsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQg
dG8gbWF0Y2ggYW4gYWRkcmVzcyBleHByZXNzaW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb21w
dXRlZAorICAgICAgICAgICAgLy8gZXhwbGljaXRseS4KKyAgICAgICAgICAgIHJldHVybiAhbG93
ZXIudmFsdWVUb1RtcFtyb290XTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWNjZXB0Um9v
dExhdGUoVmFsdWUqKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVu
dHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLnZhbHVlVG9U
bXBbdmFsdWVdKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBhY2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBi
b29sIGFjY2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0
ZShBcmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQu
Y29udGFpbnModmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIHJldHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAg
ICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRz
TGF0ZShBcmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQxKFZhbHVl
KiBpbmRleCwgVmFsdWUqIGxvZ1NjYWxlLCBWYWx1ZSogYmFzZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGxvZ1NjYWxlLT5hc0ludCgpIDwgMCB8fCBsb2dTY2FsZS0+YXNJbnQoKSA+IDMp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2VsZWN0ZWRBZGRy
ZXNzID0gQXJnOjppbmRleCgKKyAgICAgICAgICAgICAgICBsb3dlci50bXAoYmFzZSksIGxvd2Vy
LnRtcChpbmRleCksIDEgPDwgbG9nU2NhbGUtPmFzSW50KCkpOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MihWYWx1ZSogYmFz
ZSwgVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiB0cnlBZGRTaGlmdDEoaW5kZXgsIGxvZ1NjYWxlLCBiYXNlKTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChyaWdodC0+aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAg
IC8vIFRoaXMgcHJvZHVjdGlvbiBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkgc2luY2Ugd2UgZXhw
ZWN0CisgICAgICAgICAgICAgICAgLy8gTG9hZChBZGQoQHgsIEBjb25zdDEpLCBvZmZzZXQgPSBj
b25zdDIpIHRvIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmVuZ3RoLXJlZHVjZWQKKyAgICAgICAgICAg
ICAgICAvLyB0byBMb2FkKEB4LCBvZmZzZXQgPSBjb25zdDEgKyBjb25zdDIpLgorICAgICAgICAg
ICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAobGVmdCksIHJpZ2h0
LT5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KGxvd2VyLnRtcChs
ZWZ0KSwgbG93ZXIudG1wKHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgdHJ5RGlyZWN0KCkKKyAgICAgICAgeworICAgICAgICAgICAg
c2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChyb290KSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93ZXJUb0FpciYg
bG93ZXI7CisgICAgICAgIFZhbHVlKiByb290OworICAgICAgICBBcmcgc2VsZWN0ZWRBZGRyZXNz
OworICAgIH07CisgICAgQWRkcmVzc1NlbGVjdG9yIGFkZHJlc3NTZWxlY3RvcjsKKworICAgIC8v
IEJlbG93IGlzIHRoZSBjb2RlIGZvciBhIGxvd2VyaW5nIHNlbGVjdG9yLCBzbyB0aGF0IHdlIGNh
biBwYXNzICp0aGlzIHRvIHJ1bkxvd2VyaW5nTWF0Y2hlci4KKyAgICAvLyBUaGlzIHdpbGwgbWF0
Y2ggY29tcGxleCBtdWx0aS12YWx1ZSBleHByZXNzaW9ucywgYnV0IG9ubHkgaWYgdGhlcmUgaXMg
bm8gc2hhcmluZy4gRm9yIGV4YW1wbGUsCisgICAgLy8gaXQgd29uJ3QgbWF0Y2ggYSBMb2FkIHR3
aWNlIGFuZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gZG8gdHdvIGxvYWRzIHdoZW4gdGhl
IG9yaWdpbmFsCisgICAgLy8gY29kZSBqdXN0IGRpZCBvbmUuCisgICAgCisgICAgYm9vbCBhY2Nl
cHRSb290KFZhbHVlKiByb290KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyb290LCAh
bG9ja2VkLmNvbnRhaW5zKHJvb3QpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IAorICAgIHZvaWQgYWNjZXB0Um9vdExhdGUoVmFsdWUqKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUq
IHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgLy8gSWYgb25l
IG9mIHRoZSBpbnRlcm5hbCB0aGluZ3MgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZCwgdGhlbiB3
ZSBkb24ndCB3YW50IHRvIGNhdXNlCisgICAgICAgIC8vIGl0IHRvIGJlIHJlY29tcHV0ZWQgYWdh
aW4uCisgICAgICAgIGlmICh2YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHJlcXVpcmUgaW50ZXJuYWxzIHRvIGhhdmUg
b25seSBvbmUgdXNlIC0gdXMuCisgICAgICAgIGlmICh1c2VDb3VudHNbdmFsdWVdICE9IDEpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gYWNjZXB0
SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgfQorICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxz
KCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50cz4KKyAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoVmFsdWUqIHZhbHVlLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgbG9ja2VkLmFkZCh2YWx1ZSk7CisgICAg
ICAgIGFjY2VwdEludGVybmFsc0xhdGUoYXJndW1lbnRzLi4uKTsKKyAgICB9CisgICAgdm9pZCBh
Y2NlcHRJbnRlcm5hbHNMYXRlKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaWYgKGxvY2tlZC5jb250YWlucyh2YWx1
ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBhY2NlcHRPcGVy
YW5kcyhhcmd1bWVudHMuLi4pOworICAgIH0KKyAgICBib29sIGFjY2VwdE9wZXJhbmRzKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1bWVudHMuLi4pIHsgfQorICAgIAorICAg
IGJvb2wgdHJ5TG9hZChWYWx1ZSogYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY3Vy
cmVudFZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGFw
cGVuZChNb3ZlMzIsIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcyksIHRtcChjdXJyZW50VmFsdWUpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAg
ICAgaWYgKGlzNjRCaXQoKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBlZmZlY3Rp
dmVBZGRyKGFkZHJlc3MpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIGVmZmVjdGl2
ZUFkZHIoYWRkcmVzcyksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICBjYXNl
IEludDMyOgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBJbnQ2NDoK
KyAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFkZDY0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQp
OworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlTdG9yZUFkZExvYWQoVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFsdWUqKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChs
ZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiB0
cnlBcHBlbmRTdG9yZUJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVz
IQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAg
IGJvb2wgdHJ5U3RvcmVBbmRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIFZhbHVlKikK
KyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50
MzI6CisgICAgICAgICAgICByZXR1cm4gdHJ5QXBwZW5kU3RvcmVCaW5PcDxBbmQzMiwgQ29tbXV0
YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIHRyeVN0b3JlKFZhbHVlKiB2YWx1ZSwgVmFs
dWUqIGFkZHJlc3MpCisgICAgeworICAgICAgICBhcHBlbmQobW92ZUZvclR5cGUodmFsdWUtPnR5
cGUoKSksIHRtcCh2YWx1ZSksIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcykpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeVRydW5jQXJndW1lbnRSZWcoVmFsdWUqIGFy
Z3VtZW50UmVnKQorICAgIHsKKyAgICAgICAgcHJvbG9ndWUuYXBwZW5kKEluc3QoCisgICAgICAg
ICAgICBNb3ZlLCBjdXJyZW50VmFsdWUsCisgICAgICAgICAgICBUbXAoYXJndW1lbnRSZWctPmFz
PEFyZ3VtZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkpLAorICAgICAgICAgICAgdG1wKGN1
cnJlbnRWYWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0
cnlUcnVuYyhWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHZh
bHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBib29sIHRyeUFyZ3VtZW50UmVnKCkKKyAgICB7CisgICAgICAgIHByb2xvZ3VlLmFwcGVu
ZChJbnN0KAorICAgICAgICAgICAgbW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkpLCBj
dXJyZW50VmFsdWUsCisgICAgICAgICAgICBUbXAoY3VycmVudFZhbHVlLT5hczxBcmd1bWVudFJl
Z1ZhbHVlPigpLT5hcmd1bWVudFJlZygpKSwKKyAgICAgICAgICAgIHRtcChjdXJyZW50VmFsdWUp
KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIHRyeUNvbnN0
MzIoKQorICAgIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIGltbShjdXJyZW50VmFsdWUpLCB0bXAo
Y3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBi
b29sIHRyeUNvbnN0NjQoKQorICAgIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tNjQo
Y3VycmVudFZhbHVlLT5hc0ludDY0KCkpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIHRyeVJldHVybihWYWx1ZSogdmFsdWUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJ
bnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBpbW1P
clRtcCh2YWx1ZSksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUikpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3Vi
bGUsIHRtcCh2YWx1ZSksIFRtcChGUFJJbmZvOjpyZXR1cm5WYWx1ZUZQUikpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
ICAgIGFwcGVuZChSZXQpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAg
UHJvY2VkdXJlJiBwcm9jZWR1cmU7CisgICAgQ29kZSYgY29kZTsKK307CisKK30gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorCit2b2lkIGxvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENv
ZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2NlZHVyZSwgImxvd2Vy
VG9BaXIiKTsKKyAgICBMb3dlclRvQWlyIGxvd2VyVG9BaXIocHJvY2VkdXJlLCBjb2RlKTsKKyAg
ICBsb3dlclRvQWlyLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyVG9BaXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlclRvQWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTG93ZXJUb0Fpcl9o
CisjZGVmaW5lIEIzTG93ZXJUb0Fpcl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworbmFtZXNwYWNlIEFp
ciB7IGNsYXNzIENvZGU7IH0KKworLy8gVGhpcyBsb3dlcnMgdGhlIGN1cnJlbnQgQjMgcHJvY2Vk
dXJlIHRvIGFuIEFpciBjb2RlLgorCit2b2lkIGxvd2VyVG9BaXIoUHJvY2VkdXJlJiwgQWlyOjpD
b2RlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzTG93ZXJUb0Fpcl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVy
bnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBMb3dlcmluZ01hdGNoZXIKKworIyBUaGVzZSBydWxl
cyBhcmUgY29uc2lkZXJlZCBpbiBhIGNhc2NhZGUsIHN0YXJ0aW5nIGF0IHRoZSB0b3AuIEl0J3Mg
aW1wbGVuZW50ZWQgdXNpbmcgc3dpdGNoCisjIHN0YXRlbWVudHMgd2hlcmV2ZXIgcG9zc2libGUu
CisKKyMgTm90ZTogYWRkaW5nIG1vcmUgcnVsZXMgdG8gdGhpcyBtYXRjaGVyIGlzIGFuIGV4Y2Vs
bGVudCB3YXkgb2YgaW1wcm92aW5nIHBlcmZvcm1hbmNlIQorCitMb2FkID0gTG9hZChhZGRyZXNz
KQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK1N0b3JlQWRkTG9hZCA9IFN0b3JlKEFkZChs
ZWZ0LCByaWdodCksIGFkZHJlc3MpCitTdG9yZUFuZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmln
aHQpLCBhZGRyZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcykKKworVHJ1bmNBcmd1
bWVudFJlZyA9IFRydW5jKGFyZ3VtZW50UmVnID0gQXJndW1lbnRSZWcoKSkKK1RydW5jID0gVHJ1
bmModmFsdWUpCisKK0FyZ3VtZW50UmVnID0gQXJndW1lbnRSZWcoKQorCitDb25zdDMyID0gQ29u
c3QzMigpCitDb25zdDY0ID0gQ29uc3Q2NCgpCisKK1JldHVybiA9IFJldHVybih2YWx1ZSkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM01lbW9y
eVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCit7Cit9CisKK3ZvaWQgTWVt
b3J5VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKG1f
b2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzTWVtb3J5VmFsdWVfaAorI2RlZmluZSBCM01lbW9yeVZhbHVl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBGSVhNRTogQWRkIGFsaWFzIGFuYWx5c2lz
IHRvIHRoZXNlIGJ5IGFsbG93aW5nIHRoZSBjbGllbnQgdG8gYXNzb2NpYXRlIGFuIGludGVnZXIg
cmFuZ2UgdG8gdGhlCisvLyB2YWx1ZS4gVHdvIG9wZXJhdGlvbnMgbWF5IGFjY2VzcyB0aGUgc2Ft
ZSBtZW1vcnkgaWYgdGhlaXIgcmFuZ2VzIG92ZXJsYXBzLgorLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzNQorCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBN
ZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExv
YWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkRmxvYXQ6Cisg
ICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3Rv
cmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0b3JlOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUoKTsKKworICAg
IGludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKworcHJvdGVjdGVk
OgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9y
bSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0
aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlw
ZSkuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBp
bnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwg
b3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAg
ICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkg
eworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAg
IGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgICAg
ICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEb3Vi
bGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZv
aWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1
cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBMb2FkRmxvYXQg
PyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9m
ZnNldCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAg
ICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNh
c2UgTG9hZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KKyAgICBNZW1v
cnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludDMyX3Qgb2Zm
c2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZh
bHVlLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAg
IGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAg
ICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGludDMyX3QgbV9vZmZzZXQgeyAwIH07Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNPcGNvZGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9w
Y29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTm9wOgorICAgICAgICBv
dXQucHJpbnQoIk5vcCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJZGVudGl0eToKKyAg
ICAgICAgb3V0LnByaW50KCJJZGVudGl0eSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
b25zdDMyOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0MzIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDY0Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0
RG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAg
b3V0LnByaW50KCJTdGFja1Nsb3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJndW1l
bnRSZWc6CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnRSZWciKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICBvdXQucHJpbnQoIkZyYW1lUG9pbnRl
ciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGQ6CisgICAgICAgIG91dC5wcmludCgi
QWRkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN1YjoKKyAgICAgICAgb3V0LnByaW50
KCJTdWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTXVsOgorICAgICAgICBvdXQucHJp
bnQoIk11bCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEaXY6CisgICAgICAgIG91dC5w
cmludCgiRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoaWxsRGl2OgorICAgICAg
ICBvdXQucHJpbnQoIkNoaWxsRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1vZDoK
KyAgICAgICAgb3V0LnByaW50KCJNb2QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0
QW5kOgorICAgICAgICBvdXQucHJpbnQoIkJpdEFuZCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBCaXRPcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRPciIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIG91dC5wcmludCgiQml0WG9yIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFNobDoKKyAgICAgICAgb3V0LnByaW50KCJTaGwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU1NocjoKKyAgICAgICAgb3V0LnByaW50KCJTU2hyIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpTaHI6CisgICAgICAgIG91dC5wcmludCgiWlNociIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgb3V0LnByaW50KCJT
RXh0OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MTY6CisgICAgICAgIG91dC5w
cmludCgiU0V4dDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICAg
ICAgb3V0LnByaW50KCJTRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgWkV4dDMy
OgorICAgICAgICBvdXQucHJpbnQoIlpFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBUcnVuYzoKKyAgICAgICAgb3V0LnByaW50KCJUcnVuYyIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBGUm91bmQ6CisgICAgICAgIG91dC5wcmludCgiRlJvdW5kIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIG91dC5wcmludCgiSVRvRCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBEVG9JMzI6CisgICAgICAgIG91dC5wcmludCgiRFRvSTMyIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkVx
dWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBvdXQu
cHJpbnQoIk5vdEVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NUaGFuOgor
ICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEdyZWF0ZXJUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzRXF1
YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICBv
dXQucHJpbnQoIkdyZWF0ZXJFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92
ZToKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlRXF1YWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJC
ZWxvd0VxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAg
b3V0LnByaW50KCJMb2FkOFoiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhTOgor
ICAgICAgICBvdXQucHJpbnQoIkxvYWQ4UyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBM
b2FkMTZaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNloiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZTIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkRmxv
YXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDoKKyAgICAgICAgb3V0LnByaW50
KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgb3V0
LnByaW50KCJTdG9yZTgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmUxNjoKKyAg
ICAgICAgb3V0LnByaW50KCJTdG9yZTE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
b3JlRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiU3RvcmVGbG9hdCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDQ2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJDQ2FsbCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBQYXRjaHBvaW50OgorICAgICAgICBvdXQucHJpbnQo
IlBhdGNocG9pbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAg
ICAgIG91dC5wcmludCgiQ2hlY2tBZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hl
Y2tTdWI6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tTdWIiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tNdWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2siKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgb3V0LnByaW50KCJV
cHNpbG9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBoaToKKyAgICAgICAgb3V0LnBy
aW50KCJQaGkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSnVtcDoKKyAgICAgICAgb3V0
LnByaW50KCJKdW1wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJyYW5jaDoKKyAgICAg
ICAgb3V0LnByaW50KCJCcmFuY2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3dpdGNo
OgorICAgICAgICBvdXQucHJpbnQoIlN3aXRjaCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBSZXR1cm46CisgICAgICAgIG91dC5wcmludCgiUmV0dXJuIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIE9vcHM6CisgICAgICAgIG91dC5wcmludCgiT29wcyIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09wY29k
ZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
IDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitlbnVtIE9wY29kZSA6IGludDE2X3QgeworICAgIC8vIEEgbm8tb3AgdGhhdCByZXR1cm5zIFZv
aWQsIHVzZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0byByZW1vdmUgYSB2YWx1ZS4KKyAgICBOb3As
CisgICAgCisgICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1
ZSB0eXBlLgorICAgIElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0
VmFsdWUqIGNsYXNzZXMuIENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0
aGF0IHdlIGNhbgorICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3Qg
dGhlbS4gTGFyZ2UgY29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0
MzIsCisgICAgQ29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2Fs
IHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRo
ZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91
IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9p
bnQgcmFuZ2Ugb2YKKyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUg
Y2xhc3MuCisgICAgU3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVn
aXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9n
cmFtCisgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBp
dCwgYW5kIHRoZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8g
ZG9uJ3QgY2xvYmJlciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAo
ZWl0aGVyIGJ5IHNhdmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJl
c2VydmluZyBpdCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJl
Z1ZhbHVlIGNsYXNzLiBUaGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigp
IChmb3IgR1BScykgb3IgRG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAg
ICAvLyBUaGUgZnJhbWUgcG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250
cm9sIGZsb3cgYnV0IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50
ZXIsIHdpdGggYSBjYXZlYXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2lu
dGVyIHRlbXBvcmFyaWx5IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQ
b2ludGVyIGludHJpbnNpYyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hv
dWxkKiBiZSBub3QKKyAgICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAg
ICBGcmFtZVBvaW50ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBh
bnkgdmFsdWUgdHlwZS4KKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisK
KyAgICAvLyBJbnRlZ2VyIG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVy
LCBiZWhhdmVzIGxpa2UgSlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJp
dE9yLAorICAgIEJpdFhvciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAg
Ly8gQ2FzdHMgYW5kIHN1Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAg
U0V4dDgsCisgICAgU0V4dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0
OgorICAgIFNFeHQzMiwKKyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgSW50NjQgYW5kIHJldHVy
bnMgSW50MzI6CisgICAgVHJ1bmMsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgor
ICAgIEZSb3VuZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJ
VG9ELAorICAgIC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIs
CisKKyAgICAvLyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVl
IHR5cGUuIFJldHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBq
dXN0IEVxdWFsKHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFu
LAorICAgIEdyZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisK
KyAgICAvLyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBB
Ym92ZSwKKyAgICBCZWxvdywKKyAgICBBYm92ZUVxdWFsLAorICAgIEJlbG93RXF1YWwsCisKKyAg
ICAvLyBNZW1vcnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBs
b2FkZWQgdHlwZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHJldHVybiBJ
bnQzMjoKKyAgICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlosCisgICAgTG9hZDE2
UywKKyAgICAvLyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9hdCwKKyAgICAvLyBU
aGlzIHJldHVybiB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwKKworICAg
IC8vIE1lbW9yeSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBpcyBzdG9y
ZWQuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIEludDMyIHZh
bHVlOgorICAgIFN0b3JlOCwKKyAgICBTdG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMgYSBEb3Vi
bGUgdmFsdWU6CisgICAgU3RvcmVGbG9hdCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMg
c3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgYW5kIERvdWJsZToKKyAgICBTdG9yZSwKKworICAgIC8v
IFRoaXMgaXMgYSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5
c3RlbSBDIGNhbGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJn
dW1lbnRzIGFyZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxsLAorCisg
ICAgLy8gVGhpcyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNz
LiBUaGlzIGlzIHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25s
eSBlbWl0cyBjb2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFj
ayBnZXRzIHRvIGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2tt
YXAgYWxvbmcgd2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBt
dXN0IGJlIHBhc3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNr
bWFwIGFyZ3VtZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVz
dAorICAgIC8vIHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9t
IHRoZSB0b3Agb2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFj
ay4KKyAgICBQYXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNr
VmFsdWUgY2xhc3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBnZW5lcmF0
aW9uCisgICAgLy8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNvbWUgY29k
ZSBhZnRlciB0aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAgICAvLyBm
cm9tIHRoZSBjaGVjaywgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxzbyBnZXQg
dG8gc3VwcGx5IGEgc3RhY2ttYXAuIE5vdGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90IGFsbG93
ZWQgdG8ganVtcCBiYWNrIGludG8gdGhlIG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNsb3cgcGF0
aCwgc2luY2UgdGhlIGNvbXBpbGVyCisgICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgZXhlY3V0
aW9uIG9mIHRoZXNlIGluc3RydWN0aW9ucyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRuJ3QgaGFw
cGVuLiBGb3IKKyAgICAvLyBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQnczoKKyAg
ICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0FkZCh4LCB5
KQorICAgIC8vCisgICAgLy8gVGhlbiBpdCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRvOgorICAg
IC8vCisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5KGEpCisg
ICAgLy8KKyAgICAvLyBUaGlzIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxiYWNrcyB1
c2VkIGJ5IHRoZSB0d28gQ2hlY2tBZGRzLiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAorICAgIC8v
IGNhbGxiYWNrcy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhl
eSBhcmUgZGlmZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIgdGhlIGZp
cnN0IENoZWNrQWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZl
IHBvc3NpYmx5IHRha2VuIHNsb3cKKyAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQg
Q2hlY2tBZGQncyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIENoZWNrQWRkLAorICAgIENo
ZWNrU3ViLAorICAgIENoZWNrTXVsLAorCisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBV
c2UgdGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMg
aGFzIGEKKyAgICAvLyBzdGFja21hcCB3aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0
YWtlcyBhbiBJbnQzMiBhcmd1bWVudCB0aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgKKyAgICAv
LyBmdWxsIGJyYW5jaCBmdXNpb24gaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBBIHRydWUg
dmFsdWUganVtcHMgdG8gdGhlIGdlbmVyYXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgorICAgIENo
ZWNrLAorCisgICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAg
IFVwc2lsb24sIC8vIFRoaXMgdXNlcyB0aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAgIFBoaSwK
KworICAgIC8vIEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAor
ICAgIAorICAgIC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5
cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIENvbnRy
b2xWYWx1ZSBjbGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUg
c3VjY2Vzc29yLgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBl
aXRoZXIgSW50MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3
aXRjaCwKKworICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25v
dyB0aGVpciByZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8g
dHlwZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIFJldHVybiwKKworICAgIC8v
IFRoaXMgaXMgYSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0
IGhlcmUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9OworCitpbmxp
bmUgYm9vbCBpc0NoZWNrTWF0aChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2Rl
KSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hl
Y2tNdWw6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3Bh
Y2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3
UG9pbnRlcihtX2RhdGEpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmln
aW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3Jp
Z2luX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJh
dGVzIEIzSVIgY2FuIGNob29zZSB0byBwdXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdoZW4geW91IGRv
IHRoaXMsIEIzIHdpbGwgYmUgYWJsZSB0bworLy8gYWNjb3VudCwgZG93biB0byB0aGUgbWFjaGlu
ZSBjb2RlLCB3aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNwb25kcyB0byB3aGljaCBvcmlnaW4uIEIz
CisvLyB0cmFuc2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQn
cyBhbiBlcnJvciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9w
cyBPcmlnaW5zIG9yIGxpZXMgYWJvdXQgdGhlbS4KK2NsYXNzIE9yaWdpbiB7CitwdWJsaWM6Cisg
ICAgZXhwbGljaXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRhdGEgPSBudWxscHRyKQorICAgICAgICA6
IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29u
c3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBv
aW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRTcGVjaWFsLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNp
bmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworUGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9p
bnRTcGVjaWFsKCkKK3sKK30KKworUGF0Y2hwb2ludFNwZWNpYWw6On5QYXRjaHBvaW50U3BlY2lh
bCgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcoCisgICAgSW5z
dCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxi
YWNrKQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpIHsKKyAgICAgICAg
Zm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgY2FsbGJhY2spOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4t
PmFpclR5cGUoKSk7CisgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMiwgaW5zdCwgY2FsbGJhY2spOwor
fQorCitib29sIFBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAg
aWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGlzVmFsaWRJ
bXBsKDAsIDEsIGluc3QpOworCisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGluc3QuYXJnc1sxXS5raW5kKCkgIT0gQXJnOjpUbXAp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc1R5cGUoaW5z
dC5vcmlnaW4tPmFpclR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVy
biBpc1ZhbGlkSW1wbCgwLCAyLCBpbnN0KTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6
YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgaWYgKGlu
c3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1w
bCgwLCAxLCBpbnN0LCBhcmdJbmRleCk7CisKKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAyLCBpbnN0
LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBQYXRjaHBvaW50U3BlY2lhbDo6
Z2VuZXJhdGUoCisgICAgSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25D
b250ZXh0JiBjb250ZXh0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAg
IFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgIEFTU0VSVChzdGFj
a21hcCk7CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgdW5zaWduZWQgb2Zmc2V0
ID0gMTsKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQorICAgICAgICByZXBz
LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29mZnNldCsrXSkpOwor
ICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVwcyk7CisgICAgCisg
ICAgU3RhY2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgIHBhcmFtcy52YWx1ZSA9
IHZhbHVlOworICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAgIHBhcmFtcy5yZXBz
ID0gcmVwczsKKyAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdp
c3RlcnM7CisKKyAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisK
KyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNw
ZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJQYXRjaHBvaW50Iik7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmRlZXBEdW1wSW1w
bChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiTG93ZXJlZCBCMzo6
UGF0Y2hwb2ludFZhbHVlLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BhdGNocG9pbnRTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50U3BlY2lhbF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzcGVjaWFs
IHRoYXQgcmVjb2duaXplcyB0aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQYXRjaHBvaW50OiBW
b2lkIGFuZCBhbmQgbm9uLVZvaWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0aGUgc3ludGF4IG9m
IHRoZSBBaXIgUGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBv
aW50LCBhcmdzLi4uCisvLworLy8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUgbG93ZXJlZCBhcmd1
bWVudHMgdG8gdGhlIFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBub24tVm9pZCBjYXNl
CisvLyB3ZSB3aWxsIGhhdmU6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCByZXN1bHQs
IGFyZ3MuLi4KKworY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVj
aWFsIHsKK3B1YmxpYzoKKyAgICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAgIHZpcnR1YWwgflBh
dGNocG9pbnRTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWly
OjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYp
IG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBi
b29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsK
KworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlk
ZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5l
cmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJz
OjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2VuZXJhdGlv
bkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBj
b25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0
IG92ZXJyaWRlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNQYXRjaHBvaW50VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3
dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQ
YXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9p
bnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1BhdGNocG9pbnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
UGF0Y2hwb2ludFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9v
bCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9
CisKKyAgICB+UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hw
b2ludFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0
IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBv
aW50LCB0eXBlLCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM1BhdGNocG9pbnRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BoYXNlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUg
IkIzVmFsaWRhdGUuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
UGhhc2VTY29wZTo6UGhhc2VTY29wZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciog
bmFtZSkKKyAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAsIG1fbmFtZShuYW1lKQor
eworICAgIGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2co
IkIzIGFmdGVyICIsIHByb2NlZHVyZS5sYXN0UGhhc2VOYW1lKCksICIsIGJlZm9yZSAiLCBuYW1l
LCAiOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICBpZiAo
c2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3Ry
aW5nKHByb2NlZHVyZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBt
X3Byb2NlZHVyZS5zZXRMYXN0UGhhc2VOYW1lKG1fbmFtZSk7CisgICAgaWYgKHNob3VsZFZhbGlk
YXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShtX3Byb2NlZHVyZSwgbV9kdW1w
QmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNl
U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNj
b3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGhhc2VTY29wZV9oCisjZGVm
aW5lIEIzUGhhc2VTY29wZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3Rm
L05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBQaGFz
ZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoK
KyAgICBQaGFzZVNjb3BlKFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFz
ZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6CisgICAgUHJvY2Vk
dXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBt
X2R1bXBCZWZvcmU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BoYXNlU2NvcGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1
ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCisg
ICAgOiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQoreworfQorCitQcm9jZWR1cmU6On5Qcm9j
ZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBm
cmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBC
YXNpY0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayog
cmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9j
aykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlz
KQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworVmVjdG9yPEJhc2lj
QmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNp
Y0Jsb2NrKj4gcmVzdWx0OworICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xp
c3QucHVzaChhdCgwKSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3Qu
cG9wKCkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICB3b3Jr
bGlzdC5wdXNoKGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgfQorICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblBvc3RP
cmRlcigpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgUG9zdE9yZGVy
QmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGF0KDApKTsKKyAgICB3
aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3
aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlByZToKKyAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2hQb3N0KGl0ZW0ubm9kZSk7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBpdGVtLm5vZGUtPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAg
ICAgICB3b3JrbGlzdC5wdXNoKGl0ZW0ubm9kZS0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UG9zdDoKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVy
ZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0
TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFz
cyBQcm9jZWR1cmUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBQcm9jZWR1cmUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+UHJvY2VkdXJlKCk7CisKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5
ID0gUE5hTik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJh
c2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRl
eF0uZ2V0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVs
bHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBpdGVyYXRvcihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5k
ZXgpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAs
IG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9wcm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQo
bV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2Vk
dXJlLT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAg
aW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQorCisgICAgICAg
IGNvbnN0IFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
KnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
KnRoaXMsIHNpemUoKSk7IH0KKworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVP
cmRlcigpOworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsKKwor
ICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVz
Q29sbGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICAgICAgICAgIDogbV9w
cm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjbGFz
cyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAg
ICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBt
X2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0
ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAg
ICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgLCBt
X2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBWYWx1ZSogb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9wcm9jZWR1cmUtPm1fdmFsdWVzW21faW5kZXhdLmdldCgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAgICAgICBjb25zdCBQcm9jZWR1cmUq
IG1fcHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsK
KworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJv
Y2VkdXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQorCisgICAg
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5z
aXplKCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgVmFsdWUqIG9w
ZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJvY2VkdXJl
OworICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IFZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKKyAgICAvLyBUaGUgbmFtZSBoYXMgdG8gYmUg
YSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9yeSBtYW5hZ2VtZW50
IGZvciB0aGUgc3RyaW5nLgorICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFtZShjb25zdCBjaGFyKiBu
YW1lKQorICAgIHsKKyAgICAgICAgbV9sYXN0UGhhc2VOYW1lID0gbmFtZTsKKyAgICB9CisKKyAg
ICBjb25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGhhc2VO
YW1lOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2Nr
Pj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+IG1fdmFsdWVz
OworICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJv
Y2VkdXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1
cmVJbmxpbmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVy
ZTo6YWRkKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZh
bHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4u
LikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMu
YXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzUHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBX
VEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFBy
aW50U3RyZWFtJiBvdXQsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQp
IHsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJM
b2NrZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnlt
b3VzOgorICAgICAgICBvdXQucHJpbnQoIkFub255bW91cyIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51
bSBjbGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sg
c2xvdCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdl
IGludGVuZCB0byBlc2NhcGUKKyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4g
VGhpcyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFj
aworICAgIC8vIHNsb3QuCisgICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMg
Y291bGQgc2hhcmUgc3BhY2Ugd2l0aCBvdGhlciBzdGFjayBzbG90cywgcHJvdmlkZWQgdGhhdCB0
aGV5IGFyZW4ndCBsaXZlCisgICAgLy8gYXQgdGhlIHNhbWUgdGltZS4gVGhlIGNvbXBpbGVyIHN0
aWxsIGhhcyB0byBkbyBlc2NhcGUgYW5hbHlzaXMsIHNpbmNlIHRoZXNlIGNhbiBiZSBlc2NhcGVk
CisgICAgLy8gZXhwbGljaXRseSBpbiBJUi4KKyAgICBBbm9ueW1vdXMKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07
CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtp
bmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitT
dGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Nsb3RW
YWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
ImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90VmFsdWVfaAorI2RlZmluZSBCM1N0
YWNrU2xvdFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNr
U2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30gLy8gbmFt
ZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNv
ZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVuc2ln
bmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xv
dEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhpcyBnZXRz
IGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5
IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhhdC4K
KyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21G
UDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBz
dGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQorCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAgICBmcmll
bmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCisg
ICAgICAgIDogVmFsdWUoaW5kZXgsIFN0YWNrU2xvdCwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQor
ICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9raW5kKGtpbmQpCisg
ICAgICAgICwgbV9vZmZzZXRGcm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWduZWQg
bV9ieXRlU2l6ZTsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBpbnRwdHJfdCBtX29m
ZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3RhY2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAgICJ7b3BhcXVlID0gIiwgUmF3UG9p
bnRlcihtX29wYXF1ZSksICIsIHJlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLAorICAgICAgICAi
LCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwgIiwgY2xvYmJl
cmVkID0gIiwgbV9jbG9iYmVyZWQsCisgICAgICAgICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3Vz
ZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2ttYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a21hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmlu
ZSBCM1N0YWNrbWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVl
UmVwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQu
aCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQ2hlY2tTcGVjaWFsOworY2xhc3MgU3RhY2ttYXBTcGVjaWFsOwor
Y2xhc3MgVmFsdWU7CisKK2NsYXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2Vu
ZXJhdGlvblBhcmFtcyB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcg
dGhlIHN0YWNrbWFwLgorICAgICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBp
cyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAv
LyBUaGlzIHRlbGxzIHlvdSB0aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdl
cmUgY2hvc2VuLgorICAgICAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisKKyAgICAgICAgLy8g
VGhpcyB0ZWxscyB5b3UgdGhlIHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNlZC4KKyAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBH
ZW5lcmF0b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7
CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7Cisg
ICAgCisgICAgU3RhY2ttYXAoKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTZXQgc29tZSBvcGFx
dWUgZGF0YSB0byBpZGVudGlmeSB0aGlzIHN0YWNrbWFwLiBUaGlzIGlzIHVzZWZ1bCBiZWNhdXNl
IGEgU3RhY2ttYXAtdXNpbmcgVmFsdWUKKyAgICAvLyBjYW4gYmUgZHVwbGljYXRlZCwgYW5kIGVh
Y2ggZHVwbGljYXRlIG1heSBlbmQgdXAgaGF2aW5nIGRpZmZlcmVudCByZWdpc3RlciBhbGxvY2F0
aW9uLiBUaGlzCisgICAgLy8gYWxsb3dzIGFsbCBvZiB0aG9zZSBkdXBsaWNhdGVzIHRvIGJlIGFi
bGUgdG8gcmVmZXIgYmFjayB0byB3aGF0ZXZlciBoaWdoLWxldmVsIGRhdGEgc3RydWN0dXJlcwor
ICAgIC8vIHdlIHdlcmUgdXNpbmcgdG8gY3JlYXRlIHRoZSB2YWx1ZS4KKyAgICB2b2lkIHNldE9w
YXF1ZSh2b2lkKiBwYXJhbWV0ZXIpCisgICAgeworICAgICAgICBtX29wYXF1ZSA9IHBhcmFtZXRl
cjsKKyAgICB9CisgICAgdm9pZCogb3BhcXVlKCkgY29uc3QgeyByZXR1cm4gbV9vcGFxdWU7IH0K
KworICAgIC8vIENvbnZlbmllbmNlIGhlbHBlcnMgd2hlbiB1c2luZyBpbmRpY2VzIGluc3RlYWQg
b2YgcG9pbnRlcnMuCisgICAgdm9pZCBzZXRPcGFxdWVJbmRleChzaXplX3QgaW5kZXgpCisgICAg
eworICAgICAgICBzZXRPcGFxdWUoYml0d2lzZV9jYXN0PHZvaWQqPihpbmRleCkpOworICAgIH0K
KyAgICBzaXplX3Qgb3BhcXVlSW5kZXgoKSBjb25zdCB7IHJldHVybiBiaXR3aXNlX2Nhc3Q8c2l6
ZV90PihvcGFxdWUoKSk7IH0KKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUg
VmFsdWUgdGhhdCB1c2VzIHRoaXMgU3RhY2ttYXAuIEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50IHRo
YXQKKyAgICAvLyByZXR1cm5zIGEgdmFsdWUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgcmVz
dWx0IHZhbHVlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIGluZGV4IHplcm8gcmVmZXJzCisgICAgLy8g
dG8gdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVu
dCBpcyBub3QgY29uc3RyYWluYWJsZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gaW4gYSBDaGVja0Fk
ZCB2YWx1ZSwgaXQgd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQg
MS4gSW4gYSBDaGVjayB2YWx1ZSwgaXQKKyAgICAvLyB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25z
dHJhaW4gaW5kZXggMC4gQnV0LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxl
ZCwgeW91IGNhbgorICAgIC8vIGRlcGVuZCBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBi
ZWluZyBmaWxsZWQgaW4uCisgICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0
IFZhbHVlUmVwJiByZXApCisgICAgeworICAgICAgICBpZiAoaW5kZXggKyAxIDwgbV9yZXBzLnNp
emUoKSkKKyAgICAgICAgICAgIG1fcmVwcy5ncm93KGluZGV4ICsgMSk7CisgICAgICAgIG1fcmVw
c1tpbmRleF0gPSByZXA7CisgICAgfQorCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0IFJlZ2lzdGVy
U2V0JiBzZXQpCisgICAgeworICAgICAgICBtX2Nsb2JiZXJlZC5tZXJnZShzZXQpOworICAgIH0K
KworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBtX2Ns
b2JiZXJlZDsgfQorCisgICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4gZ2Vu
ZXJhdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRvcihj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBjcmVh
dGVTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIENoZWNrU3BlY2lhbDsKKyAgICBmcmllbmQgY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWw7
CisgICAgZnJpZW5kIGNsYXNzIFN0YWNrbWFwU3BlY2lhbDsKKyAgICAKKyAgICB2b2lkKiBtX29w
YXF1ZSB7IG51bGxwdHIgfTsKKyAgICBWZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsKKyAgICBSZWZQ
dHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZDsK
KyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7IC8vIFN0YWNrbWFwcyBjb3VsZCBiZSBm
dXJ0aGVyIGR1cGxpY2F0ZWQgYnkgQWlyLCBidXQgdGhhdCdzIHVubGlrZWx5LCBzbyB3ZSBqdXN0
IG1lcmdlIHRoZSB1c2VkIHJlZ2lzdGVycyBzZXRzIGlmIHRoYXQgd2VyZSB0byBoYXBwZW4uCit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAi
QWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKwor
U3RhY2ttYXBTcGVjaWFsOjpTdGFja21hcFNwZWNpYWwoKQoreworfQorCitTdGFja21hcFNwZWNp
YWw6On5TdGFja21hcFNwZWNpYWwoKQoreworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6cmVw
b3J0VXNlZFJlZ2lzdGVycyhJbnN0JiBpbnN0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lz
dGVycykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCog
c3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgSW5z
dCB0aGF0IHVzZXMgdGhlIFN0YWNrbWFwU3BlY2lhbCBnZXRzIGR1cGxpY2F0ZWQsIHRoZW4gd2Ug
ZW5kIHVwIG1lcmdpbmcgdXNlZAorICAgIC8vIHJlZ2lzdGVyIHNldHMgZnJvbSBtdWx0aXBsZSBw
bGFjZXMuIFRoaXMgY3VycmVudGx5IHdvbid0IGhhcHBlbiBzaW5jZSBBaXIgZG9lc24ndCBoYXZl
IHRhaWxkdXAKKyAgICAvLyBvciB0aGluZ3MgbGlrZSB0aGF0LiBCdXQgbWF5YmUgZXZlbnR1YWxs
eSBpdCBjb3VsZCBiZSBhIHByb2JsZW0uCisgICAgc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVycy5t
ZXJnZSh1c2VkUmVnaXN0ZXJzKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3Bl
Y2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVl
ID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFw
KCk7CisKKyAgICByZXR1cm4gc3RhY2ttYXAtPmNsb2JiZXJlZCgpOworfQorCit2b2lkIFN0YWNr
bWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJn
cywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2Nv
cGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdz
IGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUln
bm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51
bUlnbm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3Jl
ZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBu
dW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSAr
IG51bUlnbm9yZWRCM0FyZ3NdOworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQo
aSArIG51bUlnbm9yZWRBaXJBcmdzKTsKKworICAgICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNl
LCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSkpOworICAgIH0KK30KKworYm9vbCBT
dGFja21hcFNwZWNpYWw6OmlzVmFsaWRJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0Fy
Z3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QpCit7CisgICAg
VmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0
aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0g
bnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkg
Pj0gbnVtSWdub3JlZEIzQXJncyk7CisKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+
c3RhY2ttYXAoKTsKKworICAgIEFTU0VSVChzdGFja21hcCk7CisKKyAgICAvLyBGb3IgdGhlIElu
c3QgdG8gYmUgdmFsaWQsIGl0IG5lZWRzIHRvIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1
bWVudHMuCisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2
YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAvLyBSZWdhcmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMg
aGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVtZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAg
ICAvLyBleGFtcGxlLCB5b3UgY2FuJ3QgaGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhp
cyB2ZXJpZmllcyB0aG9zZSBjb25kaXRpb25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1l
bnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkg
LSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUt
PmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFy
Z3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJn
LmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1t
OgorICAgICAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAg
ICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICBicmVhazsgLy8gT0sKKyAgICAg
ICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BS
SW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAgICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAh
PSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAg
QXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAg
ICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdy
ZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChzdGFja21h
cC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkpOworCisgICAgLy8g
VmVyaWZ5IGFueSBleHBsaWNpdGx5IHN1cHBsaWVkIGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5z
aWduZWQgaSA9IG51bUlnbm9yZWRCM0FyZ3M7IGkgPCBzdGFja21hcC0+bV9yZXBzLnNpemUoKTsg
KytpKSB7CisgICAgICAgIFZhbHVlUmVwJiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOworICAg
ICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9y
ZWRBaXJBcmdzXTsKKworICAgICAgICBzd2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlz
IGFib3ZlLgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcjoKKyAgICAgICAgICAgIGlmICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6
OlJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlu
cHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoK
KyAgICAgICAgICAgIGlmIChhcmcgIT0gQXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qg
YSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAg
ICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywK
KyAgICBJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUg
PSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAo
KTsKKworICAgIHVuc2lnbmVkIHN0YWNrbWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9y
ZWRBaXJBcmdzICsgbnVtSWdub3JlZEIzQXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4
ID49IHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhh
dCB0aGVyZSB3YXMgbm8gY29uc3RyYWludC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQor
ICAgIAorICAgIC8vIFdlIG9ubHkgYWRtaXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBp
cyBub3QgYSB2YWxpZCBpbnB1dCBjb25zdHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8v
IHRyYW5zbGF0ZXMgdG8gYSBDYWxsQXJnIGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVw
c1tzdGFja21hcEFyZ0luZGV4XS5raW5kKCkgPT0gVmFsdWVSZXA6OkFueSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFs
OjphcHBlbmRSZXBzSW1wbCgKKyAgICBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWdu
ZWQgbnVtSWdub3JlZEFyZ3MsIEluc3QmIGluc3QsIFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkK
K3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQXJnczsgaSA8IGluc3QuYXJncy5z
aXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29k
ZSwgaW5zdC5hcmdzW2ldKSk7Cit9CisKK1ZhbHVlUmVwIFN0YWNrbWFwU3BlY2lhbDo6cmVwRm9y
QXJnKENvZGUmIGNvZGUsIGNvbnN0IEFyZyYgYXJnKQoreworICAgIHN3aXRjaCAoYXJnLmtpbmQo
KSkgeworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFy
Zy5yZWcoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBB
cmc6OkltbTY0OgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OmNvbnN0YW50KGFyZy52YWx1ZSgp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgIGlmIChhcmcu
YmFzZSgpID09IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikpCisgICAgICAgICAgICBy
ZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChhcmcu
YmFzZSgpID09IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKyAg
ICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6
ZSgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgcmV0dXJuIFZhbHVlUmVwKCk7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1N0YWNrbWFwU3BlY2lhbF9oCisjZGVmaW5lIEIzU3RhY2ttYXBTcGVjaWFsX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVk
ZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFt
ZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKworLy8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9y
IHNwZWNpYWxzIHRoYXQgaGF2ZSBzdGFja21hcHMuIE5vdGUgdGhhdCBpdCBjYW4gZmluZCB0aGUg
U3RhY2ttYXAgYnkKKy8vIGFza2luZyBmb3IgdGhlIEluc3QncyBvcmlnaW4uIEhlbmNlLCB0aGVz
ZSBvYmplY3RzIGRvbid0IG5lZWQgdG8gZXZlbiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8g
U3RhY2ttYXAuCisKK2NsYXNzIFN0YWNrbWFwU3BlY2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNpYWwg
eworcHVibGljOgorICAgIFN0YWNrbWFwU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflN0YWNrbWFw
U3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEFp
cjo6SW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhBaXI6Okluc3QmKSBvdmVycmlkZTsKKworICAgIC8v
IE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwo
KS9kZWVwRHVtcEltcGwoKS4gV2UgaGF2ZSBtYW55IHNvbWUKKyAgICAvLyBzdWJjbGFzc2VzIHRo
YXQgaW1wbGVtZW50IHRoYXQuCisKKyAgICB2b2lkIGZvckVhY2hBcmdJbXBsKAorICAgICAgICB1
bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAg
ICAgICAgQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0Nh
bGxiYWNrPiYpOworICAgIGJvb2wgaXNWYWxpZEltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUln
bm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Oklu
c3QmKTsKKyAgICBib29sIGFkbWl0c1N0YWNrSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdu
b3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5z
dCYsIHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRo
ZSBJbnN0J3MgYXJncywgc3RhcnRpbmcgd2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVu
IHZlY3Rvci4KKyAgICB2b2lkIGFwcGVuZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQm
LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYp
OworCisgICAgc3RhdGljIFZhbHVlUmVwIHJlcEZvckFyZyhBaXI6OkNvZGUmLCBjb25zdCBBaXI6
OkFyZyYpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja21hcFNwZWNpYWxfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlv
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9u
X2gKKyNkZWZpbmUgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgZ2VuZXJp
YyB3cmFwcGVyIGFyb3VuZCBsaXN0cyBvZiBmcmVxdWVudGVkIGJsb2Nrcywgd2hpY2ggZ2l2ZXMg
eW91IGp1c3QgdGhlIGJsb2Nrcy4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaywgdHlw
ZW5hbWUgU3VjY2Vzc29yTGlzdD4KK2NsYXNzIFN1Y2Nlc3NvckNvbGxlY3Rpb24geworcHVibGlj
OgorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24oU3VjY2Vzc29yTGlzdCYgbGlzdCkKKyAgICAgICAg
OiBtX2xpc3QobGlzdCkKKyAgICB7CisgICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7
IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2Nr
KiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAg
ICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQo
aW5kZXgpOyB9CisgICAgQmFzaWNCbG9jayomIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJl
dHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisg
ICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
aXRlcmF0b3IoU3VjY2Vzc29yQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgc2l6ZV90IGluZGV4KQor
ICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pIC8vIGNvbnN0IGlzIHN0dXBp
ZCBhbnl3YXkuCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAg
fQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbiogbV9j
b2xsZWN0aW9uOworICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBl
bmQoKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCitwcml2YXRlOgorICAg
IFN1Y2Nlc3Nvckxpc3QmIG1fbGlzdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3VjY2Vzc29yQ29sbGVj
dGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNTd2l0Y2hDYXNlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN3aXRj
aENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9j
YXNlVmFsdWUsICItPiIsIG1fdGFyZ2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaENhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hD
YXNlX2gKKyNkZWZpbmUgQjNTd2l0Y2hDYXNlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRjaENhc2Uo
KQorICAgIHsKKyAgICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVlLCBjb25z
dCBGcmVxdWVudGVkQmxvY2smIHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VWYWx1ZShjYXNlVmFs
dWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3RhcmdldDsgfQorCisgICAg
aW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1ZTsgfQorICAgIEZy
ZXF1ZW50ZWRCbG9jayB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorICAgIEJh
c2ljQmxvY2sqIHRhcmdldEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuYmxvY2soKTsg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGludDY0X3QgbV9jYXNlVmFsdWU7CisgICAgRnJlcXVlbnRlZEJsb2NrIG1fdGFyZ2V0Owor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hWYWx1ZTo6
flN3aXRjaFZhbHVlKCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2Fz
ZSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBGcmVxdWVudGVkQmxvY2sgcmVzdWx0QmxvY2sgPSBt
X3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIGludDY0X3QgcmVzdWx0VmFsdWUgPSBtX3ZhbHVlc1tp
bmRleF07CisgICAgbV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0KCk7Cisg
ICAgbV9zdWNjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICBtX3ZhbHVlc1tpbmRleF0gPSBtX3Zh
bHVlcy5sYXN0KCk7CisgICAgbV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiBTd2l0
Y2hDYXNlKHJlc3VsdFZhbHVlLCByZXN1bHRCbG9jayk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6
OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nl
c3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3VjY2Vzc29yc1ttX3N1
Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOworICAgIG1fdmFsdWVz
LmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRlc3RydWN0
aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisgICAgb3V0LnByaW50
KGxpc3REdW1wKCp0aGlzKSwgIiwgZmFsbFRocm91Z2ggPSAiLCBmYWxsVGhyb3VnaCgpKTsKK30K
KworU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVl
KGluZGV4LCBTd2l0Y2gsIFZvaWQsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5k
KGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAor
I2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29u
dHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNv
ZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOwor
CisgICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5z
aWduZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQor
CisgICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1l
IGluZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgRnJlcXVlbnRl
ZEJsb2NrIGZhbGxUaHJvdWdoKCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsg
fQorICAgIEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNjZXNzb3Jz
KCkubGFzdCgpOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtQ2Fz
ZVZhbHVlcygpOyB9CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nlc3Nv
cihpbmRleCkpOworICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWduZWQgaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAg
ICAgICAgIDogbV9zd2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTd2l0Y2hWYWx1ZSYg
c3dpdGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dp
dGNoVmFsdWUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsr
OworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgU3dpdGNoVmFsdWUqIG1fc3dpdGNoOworICAgICAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAgICB0eXBlZGVmIGl0ZXJhdG9yIGNvbnN0
X2l0ZXJhdG9yOworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgLy8gVGhpcyByZW1vdmVzIHRoZSBjYXNlIGFuZCBy
ZW9yZGVycyB0aGluZ3MgYSBiaXQuIElmIHlvdSdyZSBpdGVyYXRpbmcgdGhlIGNhc2VzIGZyb20g
MCB0byBOLAorICAgIC8vIHRoZW4geW91IGNhbiBrZWVwIGl0ZXJhdGluZyBhZnRlciB0aGlzIHNv
IGxvbmcgYXMgeW91IHJldmlzaXQgdGhpcyBzYW1lIGluZGV4ICh3aGljaCB3aWxsIG5vdworICAg
IC8vIGNvbnRhaW4gc29tZSBvdGhlciBjYXNlIHZhbHVlKS4gVGhpcyByZW1vdmVzIHRoZSBjYXNl
IHRoYXQgd2FzIHJlbW92ZWQuCisgICAgU3dpdGNoQ2FzZSByZW1vdmVDYXNlKHVuc2lnbmVkIGlu
ZGV4KTsKKworICAgIHZvaWQgYXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJik7CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN3aXRjaFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91
Z2gpOworCisgICAgVmVjdG9yPGludDY0X3Q+IG1fdmFsdWVzOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNT
d2l0Y2hWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFR5cGUgdHlwZSkKK3sKKyAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICBjYXNlIFZvaWQ6CisgICAgICAgIG91dC5wcmludCgiVm9pZCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgb3V0LnByaW50KCJJbnQzMiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgb3V0LnByaW50KCJJbnQ2NCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEb3VibGU6CisgICAgICAgIG91dC5wcmludCgi
RG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNUeXBlX2gKKyNkZWZpbmUgQjNUeXBlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gVHlwZSB7CisgICAgVm9p
ZCwKKyAgICBJbnQzMiwKKyAgICBJbnQ2NCwKKyAgICBEb3VibGUKK307CisKK2lubGluZSBib29s
IGlzSW50KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSBJbnQzMiB8fCB0eXBlID09
IEludDY0OworfQorCitpbmxpbmUgYm9vbCBpc0Zsb2F0KFR5cGUgdHlwZSkKK3sKKyAgICByZXR1
cm4gdHlwZSA9PSBEb3VibGU7Cit9CisKK2lubGluZSBUeXBlIHBvaW50ZXJUeXBlKCkKK3sKKyAg
ICBpZiAoaXMzMkJpdCgpKQorICAgICAgICByZXR1cm4gSW50MzI7CisgICAgcmV0dXJuIEludDY0
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2Ns
YXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkIzOjpUeXBlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNUeXBlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVXBzaWxvblZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Vwc2lsb25WYWx1
ZTo6flVwc2lsb25WYWx1ZSgpCit7Cit9CisKK3ZvaWQgVXBzaWxvblZhbHVlOjpkdW1wTWV0YShQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiXiIsIG1fcGhpLT5pbmRl
eCgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNVcHNpbG9uVmFsdWVfaAorI2RlZmlu
ZSBCM1Vwc2lsb25WYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVXBzaWxv
blZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBVcHNpbG9uOyB9CisKKyAgICB+VXBz
aWxvblZhbHVlKCk7CisKKyAgICBWYWx1ZSogcGhpKCkgY29uc3QgeyByZXR1cm4gbV9waGk7IH0K
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAg
IFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVl
LCBWYWx1ZSogcGhpKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQaGksIFZvaWQsIG9yaWdpbiwg
dmFsdWUpCisgICAgICAgICwgbV9waGkocGhpKQorICAgIHsKKyAgICAgICAgQVNTRVJUKHZhbHVl
LT50eXBlKCkgPT0gcGhpLT50eXBlKCkpOworICAgIH0KKworICAgIFZhbHVlKiBtX3BoaTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzVXBzaWxvblZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVc2VDb3VudHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitVc2VDb3VudHM6OlVzZUNvdW50cyhQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICA6
IG1fY291bnRzKHByb2NlZHVyZS52YWx1ZXMoKS5zaXplKCkpCit7CisgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiBwcm9jZWR1cmUudmFsdWVzKCkpIHsKKyAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgIG1fY291bnRzW2NoaWxkXSsrOworICAg
IH0KK30KKworVXNlQ291bnRzOjp+VXNlQ291bnRzKCkKK3sKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVc2VDb3VudHMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNV
c2VDb3VudHNfaAorI2RlZmluZSBCM1VzZUNvdW50c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgVXNl
Q291bnRzIHsKK3B1YmxpYzoKKyAgICBVc2VDb3VudHMoUHJvY2VkdXJlJik7CisgICAgflVzZUNv
dW50cygpOworCisgICAgdW5zaWduZWQgb3BlcmF0b3JbXShWYWx1ZSogdmFsdWUpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9jb3VudHNbdmFsdWVdOworICAgIH0KK3ByaXZhdGU6Cisg
ICAgSW5kZXhNYXA8VmFsdWUsIHVuc2lnbmVkPiBtX2NvdW50czsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
VXNlQ291bnRzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNC
bG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFs
dWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0
ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3Qg
Y2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAg
ICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBW
QUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWls
KF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9D
U3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2b2lkIHJ1bigp
CisgICAgeworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7CisgICAgICAgIEhh
c2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVl
SW5CbG9jazsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUp
IHsKKyAgICAgICAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICAgICAgZm9yIChWYWx1
ZSogdmFsdWUgOiAqYmxvY2spCisgICAgICAgICAgICAgICAgdmFsdWVJbkJsb2NrLmFkZCh2YWx1
ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJl
LnZhbHVlcygpKQorICAgICAgICAgICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsKKworICAgICAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCisgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisKKyAgICAgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1
ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZUluUHJvYy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4iLCBwb2ludGVy
RHVtcChjaGlsZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
YmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKSB7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoCisg
ICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpi
bG9jaywgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRTogRXhwYW5kIHRoaXMgdmFsaWRhdGlv
biBwaGFzZS4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDQ4MAorICAgIH0KKworcHJpdmF0ZToKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNI
IHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVy
LCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBD
U3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOwor
ICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAg
ICBvdXQucHJpbnQoIkIzIFZBTElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAgICAgICBvdXQu
cHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIs
ICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOwor
ICAgICAgICAgICAgb3V0LnByaW50KCIgICAgQWZ0ZXIgIiwgbV9wcm9jZWR1cmUubGFzdFBoYXNl
TmFtZSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmlu
ZygpOworICAgICAgICB9CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAg
ICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkJlZm9yZSAiLCBt
X3Byb2NlZHVyZS5sYXN0UGhhc2VOYW1lKCksICI6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2co
bV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZh
aWx1cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhtX3Byb2NlZHVyZSk7CisKKyAgICAgICAgZGF0
YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUo
ZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFT
SCgpOworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIGNvbnN0
IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2
b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBjaGFyKiBkdW1wQmVmb3Jl
KQoreworICAgIFZhbGlkYXRlciB2YWxpZGF0ZXIocHJvY2VkdXJlLCBkdW1wQmVmb3JlKTsKKyAg
ICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsaWRhdGVfaAorI2RlZmluZSBC
M1ZhbGlkYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK3ZvaWQgdmFsaWRhdGUoUHJvY2VkdXJl
JiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbGlk
YXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVk
ZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY29uc3QgY2hhciogY29uc3Qg
VmFsdWU6OmR1bXBQcmVmaXggPSAiQCI7CisKK1ZhbHVlOjp+VmFsdWUoKQoreworfQorCit2b2lk
IFZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlz
IGlzIGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRl
dmVyIFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkg
VmFsdWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0
aGVuIHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQg
dGhlbiB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5z
aWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmln
aW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25l
cjsKKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKworICAgIFJF
TEVBU0VfQVNTRVJUKHR5cGUgPT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6
flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBJZGVudGl0eSwgdHlwZSwg
b3JpZ2luLCB2YWx1ZSk7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJl
cGxhY2VtZW50ID0gcmVwbGFjZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoTm9w
KCkKK3sKKyAgICB1bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgT3JpZ2luIG9yaWdpbiA9
IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFs
dWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisKKyAgICB0aGlzLT5WYWx1ZTo6
flZhbHVlKCk7CisKKyAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBOb3AsIFZvaWQsIG9yaWdp
bik7CisKKyAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPnJlcGxhY2VtZW50ID0g
cmVwbGFjZW1lbnQ7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFs
dWU6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1f
dHlwZSwgIiAiLCAqdGhpcywgIiA9ICIsIG1fb3Bjb2RlKTsKKworICAgIG91dC5wcmludCgiKCIp
OworICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxk
cmVuKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKwor
ICAgIFN0cmluZ1ByaW50U3RyZWFtIHN0cmluZ091dDsKKyAgICBkdW1wTWV0YShzdHJpbmdPdXQp
OworICAgIENTdHJpbmcgc3RyaW5nID0gc3RyaW5nT3V0LnRvQ1N0cmluZygpOworICAgIGlmIChz
dHJpbmcubGVuZ3RoKCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgc3RyaW5nKTsKKworICAg
IG91dC5wcmludCgiKSIpOworfQorCit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYp
IGNvbnN0Cit7Cit9CisKK1R5cGUgVmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUq
IGZpcnN0Q2hpbGQpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5
OgorICAgIGNhc2UgQWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2Ug
RGl2OgorICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6
CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBj
YXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBD
aGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+
dHlwZSgpOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRlclR5
cGUoKTsKKyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgVHJ1bmM6
CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgor
ICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NF
cXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2Ug
QmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAg
ICAgcmV0dXJuIEludDMyOworICAgIGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAg
ICAgICByZXR1cm4gSW50NjQ7CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAg
ICAgICByZXR1cm4gRG91YmxlOworICAgIGNhc2UgTm9wOgorICAgICAgICByZXR1cm4gVm9pZDsK
KyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDIwOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzVmFsdWVfaAorI2RlZmluZSBCM1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgorI2luY2x1
ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBTdGFja21hcDsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgVmFsdWUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBl
ZGVmIFZlY3RvcjxWYWx1ZSosIDM+IEFkamFjZW5jeUxpc3Q7CisKKyAgICBzdGF0aWMgY29uc3Qg
Y2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2Rl
KSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIH5WYWx1ZSgpOworCisgICAgdW5zaWdu
ZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAgLy8gTm90ZSB0
aGF0IHRoZSBvcGNvZGUgaXMgaW1tdXRhYmxlLCBleGNlcHQgZm9yIHJlcGxhY2luZyB2YWx1ZXMg
d2l0aCBpZGVudGl0eS4KKyAgICBPcGNvZGUgb3Bjb2RlKCkgY29uc3QgeyByZXR1cm4gbV9vcGNv
ZGU7IH0KKworICAgIE9yaWdpbiBvcmlnaW4oKSBjb25zdCB7IHJldHVybiBtX29yaWdpbjsgfQor
ICAgIAorICAgIFZhbHVlKiYgY2hpbGQodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fY2hpbGRy
ZW5baW5kZXhdOyB9CisgICAgVmFsdWUqIGNoaWxkKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorCisgICAgLy8gVGhpcyBjb21wdXRlcyB0aGUgdHlw
ZSB1c2luZyB0aGUgb3Bjb2RlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fdHlw
ZTsgfQorCisgICAgLy8gVGhpcyBpcyB1c2VmdWwgd2hlbiBsb3dlcmluZy4gTm90ZSB0aGF0IHRo
aXMgaXMgb25seSB2YWxpZCBmb3Igbm9uLXZvaWQgdmFsdWVzLgorICAgIEFpcjo6QXJnOjpUeXBl
IGFpclR5cGUoKSBjb25zdCB7IHJldHVybiBBaXI6OkFyZzo6dHlwZUZvckIzVHlwZSh0eXBlKCkp
OyB9CisKKyAgICBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47
IH0gCisgICAgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSBjb25zdCB7IHJldHVybiBt
X2NoaWxkcmVuOyB9CisKKyAgICB2b2lkIHJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqKTsKKyAg
ICB2b2lkIHJlcGxhY2VXaXRoTm9wKCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICAvLyBU
aGlzIGlzIGhvdyB5b3UgY2FzdCBWYWx1ZXMuIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudCB0byBk
byBzb21ldGhpbmcgcHJvdmlkZWQgdGhhdCB3ZSBoYXZlIGEKKyAgICAvLyBBcmd1bWVudFJlZ1Zh
bHVlLCB5b3UgY2FuIGRvOgorICAgIC8vCisgICAgLy8gaWYgKEFyZ3VtZW50UmVnVmFsdWUqIGFy
Z3VtZW50UmVnID0gdmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCkpIHsKKyAgICAvLyAgICAg
dGhpbmdzCisgICAgLy8gfQorICAgIC8vCisgICAgLy8gVGhpcyB3aWxsIHJldHVybiBudWxsIGlm
IHRoaXMgb3Bjb2RlKCkgIT0gQXJndW1lbnRSZWcuIFRoaXMgd29ya3MgYmVjYXVzZSB0aGlzIHJl
dHVybnMgbnVsbHB0cgorICAgIC8vIGlmIFQ6OmFjY2VwdHMob3Bjb2RlKCkpIHJldHVybnMgZmFs
c2UuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBUKiBhcygpOworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgY29uc3QgVCogYXMoKSBjb25zdDsKKyAgICAKKyAgICBib29sIGhh
c0ludDMyKCkgY29uc3Q7CisgICAgaW50MzJfdCBhc0ludDMyKCkgY29uc3Q7CisgICAgCisgICAg
Ym9vbCBoYXNJbnQ2NCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisg
ICAgYm9vbCBoYXNJbnQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50KCkgY29uc3Q7CisgICAg
Ym9vbCBpc0ludChpbnQ2NF90IHZhbHVlKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkg
Y29uc3Q7CisgICAgZG91YmxlIGFzRG91YmxlKCkgY29uc3Q7CisKKyAgICBTdGFja21hcCogc3Rh
Y2ttYXAoKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworCitwcm90ZWN0ZWQ6CisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUu
CisgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRs
eToKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDog
bV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90
eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRy
ZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlz
IGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNv
ZGUgaGFzIG5vIGNoaWxkcmVuOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRl
eChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5
cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVGhp
cyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJv
bSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2Rl
KQorICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFy
Z3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3Nl
IG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUs
IGFuZCB0aGF0IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0
IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAg
ICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9vcmlnaW4o
b3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgdmFyYXJncy4K
KyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAg
ICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAg
LCBtX3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9j
aGlsZHJlbihjaGlsZHJlbikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBU
eXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCk7CisKKyAgICAvLyBUaGlzIGdy
b3VwIG9mIGZpZWxkcyBpcyBhcnJhbmdlZCB0byBmaXQgaW4gNjQgYml0cy4KKyAgICB1bnNpZ25l
ZCBtX2luZGV4OworICAgIE9wY29kZSBtX29wY29kZTsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICAK
KyAgICBPcmlnaW4gbV9vcmlnaW47CisgICAgQWRqYWNlbmN5TGlzdCBtX2NoaWxkcmVuOworCitw
dWJsaWM6CisgICAgQmFzaWNCbG9jayogb3duZXIgeyBudWxscHRyIH07IC8vIGNvbXB1dGVkIGxh
emlseS4KKyAgICBWYWx1ZSogcmVwbGFjZW1lbnQgeyBudWxscHRyIH07IC8vIHVzZWQgZm9yIGFu
YWx5c2VzIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsK
K3B1YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKGNvbnN0IFZhbHVlKiB2YWx1ZSkKKyAgICAgICAg
OiBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAg
bV92YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnBy
aW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVmFsdWUqIG1fdmFs
dWU7Cit9OworCitpbmxpbmUgRGVlcFZhbHVlRHVtcCBkZWVwRHVtcChjb25zdCBWYWx1ZSogdmFs
dWUpCit7CisgICAgcmV0dXJuIERlZXBWYWx1ZUR1bXAodmFsdWUpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNk
ZWZpbmUgQjNWYWx1ZUlubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzQ2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAi
QjNDb25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKyNpbmNs
dWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUKiBWYWx1
ZTo6YXMoKQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGNvbnN0X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworaW5saW5lIGJvb2wgVmFs
dWU6Omhhc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDMyVmFsdWU+KCk7
Cit9CisKK2lubGluZSBpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gYXM8Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6
aGFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30K
KworaW5saW5lIGludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiBh
czxDb25zdDY0VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJ
bnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0KCk7Cit9CisK
K2lubGluZSBpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0lu
dDMyKCkgPyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpp
c0ludChpbnQ2NF90IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQoKSAmJiBhc0lu
dCgpID09IHZhbHVlOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitpbmxpbmUgZG91
YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91Ymxl
VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2lubGluZSBTdGFja21hcCogVmFsdWU6OnN0YWNrbWFw
KCkKK3sKKyAgICBpZiAoQ2hlY2tWYWx1ZSogY2hlY2sgPSBhczxDaGVja1ZhbHVlPigpKQorICAg
ICAgICByZXR1cm4gJmNoZWNrLT5zdGFja21hcDsKKyAgICBpZiAoUGF0Y2hwb2ludFZhbHVlKiBw
YXRjaHBvaW50ID0gYXM8UGF0Y2hwb2ludFZhbHVlPigpKQorICAgICAgICByZXR1cm4gJnBhdGNo
cG9pbnQtPnN0YWNrbWFwOworICAgIHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Zh
bHVlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNWYWx1ZVJlcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAg
IGNhc2UgQW55OgorICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgcmVnKCksICIpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZz
ZXRGcm9tRlAoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1bWVu
dDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2YWx1
ZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2Ug
V1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBWYWx1ZVJlcDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAgb3V0LnByaW50KCJBbnkiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAg
ICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
VmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnByaW50
KCJTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1
bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJDb25z
dGFudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlUmVwX2gKKyNkZWZpbmUgQjNWYWx1ZVJlcF9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB1
c2UgdGhpcyBjbGFzcyB0byBkZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3RhY2tt
YXBzLiBJdCdzIHVzZWQgYm90aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQgdG8g
Z2V0IHRoZSByZXByZXNlbnRhdGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJlcHJl
c2VudGF0aW9uLCB3ZSBzYXkKKy8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxscyB0
aGUgY2xpZW50IHdoYXQgcmVwcmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBpdCdz
IGFuCisvLyBvdXRwdXQuCisKK2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVtIEtp
bmQgeworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0
aGF0IEIzIGNhbiBwaWNrIGFueSByZXByZXNlbnRhdGlvbi4gQXMgYW4KKyAgICAgICAgLy8gb3V0
cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhpcyB3
aWxsIG9ubHkgYXJpc2UgZm9yIHRoZQorICAgICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUuIGNo
aWxkKDEpKSBvZiBhIENoZWNrTXVsLgorICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMgYW4g
aW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBzb21l
IHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBhCisgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhpcyBj
bGFpbXMgdG8gY2xvYmJlciEKKyAgICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFz
IGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVnaXN0
ZXIuIEFzIGFuIG91dHB1dAorICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1
cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAgICAg
Ly8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3RhY2sg
c2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVwcmVz
ZW50YXRpb24uCisgICAgICAgIFN0YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJl
c2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1bWVu
dCBhcmVhIGF0IHNvbWUKKyAgICAgICAgLy8gb2Zmc2V0LgorICAgICAgICAvLyBGSVhNRTogVGhl
IFN0YWNrbWFwU3BlY2lhbCBjbGFzcyBuZWVkcyB0byBhY2NvdW50IGZvciB0aGUgZmFjdCB0aGF0
IHRoZXNlIGRvbid0IHR1cm4gaW50bworICAgICAgICAvLyBBaXIgb3BlcmFuZHMuCisgICAgICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1NDAKKyAgICAg
ICAgU3RhY2tBcmd1bWVudCwKKworICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRp
b24sIHRoaXMgdGVsbHMgdXMgdGhhdCBCMyBjb25zdGFudC1mb2xkZWQgdGhlIHZhbHVlLgorICAg
ICAgICBDb25zdGFudAorICAgIH07CisgICAgCisgICAgVmFsdWVSZXAoKQorICAgICAgICA6IG1f
a2luZChBbnkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFZhbHVlUmVwKFJlZyByZWcp
CisgICAgICAgIDogbV9raW5kKFJlZ2lzdGVyKQorICAgICAgICAsIG1fdmFsdWUocmVnLmluZGV4
KCkpCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKKyAg
ICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChyZWcpOworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCBzdGFjayhpbnRwdHJfdCBvZmZzZXRGcm9tRlApCisgICAgeworICAgICAgICBWYWx1
ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVz
dWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9tRlA7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrQXJndW1lbnQoaW50cHRyX3Qgb2Zmc2V0RnJv
bVNQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gU3RhY2tBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBvZmZzZXRGcm9t
U1A7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVw
IGNvbnN0YW50KGludDY0X3QgdmFsdWUpCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7
CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0Lm1fdmFs
dWUgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMg
VmFsdWVSZXAgY29uc3RhbnREb3VibGUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFZhbHVlUmVwOjpjb25zdGFudChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAg
ICB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gQW55OyB9CisK
KyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVn
aXN0ZXIpOworICAgICAgICByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV92YWx1ZSk7CisgICAgfQor
CisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KG1fdmFsdWUpOworICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21TUCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrQXJndW1lbnQpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fdmFsdWUpOworICAgIH0KKworICAgIGludDY0
X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25zdGFu
dCk7CisgICAgICAgIHJldHVybiBtX3ZhbHVlOworICAgIH0KKworICAgIGRvdWJsZSBkb3VibGVW
YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4o
dmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2luZCk7CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
VmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0
dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9n
ZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTUwIEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
IyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCiskdmFySW5kZXggPSAw
CitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7JHZhckluZGV4fSIK
K2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOm5hbWUs
IDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAgIGRlZiBpbml0
aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAgICAgQG9yaWdpbiA9
IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255bW91cyA9IChuYW1l
ID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAgIEB2YXJOYW1lID0g
QGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4gL1xBXCQvID8gJCcgOiBuYW1lCisgICAgICAg
IEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4gPyBjaGlsZHJl
biA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAgIG9wY29kZSAhPSBu
aWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIGNoaWxk
cmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNoaWxkLCBpbmRleCB8CisgICAg
ICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQubmFtZSwKKyAg
ICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5h
bm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9uT3BlcmFuZCkg
OiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAorICAgICAgICAgICAgICAg
ICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAg
fQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwg
OnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9ucykKKyAg
ICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rpb25zCisg
ICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6
bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVy
KQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxp
bmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFt
ZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJf
cmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4s
IHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3Ry
aW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5p
c19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQK
KyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBl
bmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7
b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAg
ICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjog
I3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAj
e3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYg
bGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUp
CisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIu
ZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAg
ICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAg
ICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAg
ICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLworICAgICAgICAgICAgcmVz
dWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisg
ICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdu
b3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2Vu
Lm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUs
IGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNw
ZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQK
KyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMgV2UgY2FuIGV4
dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3YW50ICJp
bmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcil8KGluY2x1ZGUp
KVxaLworZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBW2Et
ekEtWjAtOSRdKFthLXpBLVowLTlfXSopXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5k
CisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAg
ICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAg
IGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKwor
ICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBh
cnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5w
YXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50
LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmls
ZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3Ig
YXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAg
ZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJy
b3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAg
YWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJl
c3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlm
aWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAg
ICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25z
LCBwcm9kdWN0aW9uKQorICAgICAgICBpZiBuYW1lID09IHByb2R1Y3Rpb24udmFyTmFtZQorICAg
ICAgICAgICAgcGFyc2VFcnJvcigiQ2hpbGQgcHJvZHVjdGlvbiBoYXMgc2FtZSBuYW1lIGFzIHBh
cmVudCBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRl
dGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAg
ICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAg
ICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UK
KyAgICAgICAgY29uc3VtZSgibWF0Y2hlciIpCisKKyAgICAgICAgbWF0Y2hlck5hbWUgPSBjb25z
dW1lSWRlbnRpZmllcgorCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKworICAgICAgICBsb29w
IHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAg
ICAgICAgIyBXZSBtaWdodCB3YW50IHRvIHN1cHBvcnQgImluY2x1ZGUiLiBJZiB3ZSBkaWQgdGhh
dCwgaXQgd291bGQgZ28gaGVyZS4KKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwYXJzZVByb2R1
Y3Rpb24KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsg
fCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAgICAg
ICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgICAgICBlbmQKKwor
ICAgICAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgICAgICB9CisKKyAgICAg
ICAgTWF0Y2hlci5uZXcobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorCisgICAg
ZGVmIHBhcnNlUHJvZHVjdGlvbgorICAgICAgICBvcmlnaW4gPSB0b2tlbi5vcmlnaW4KKyAgICAg
ICAgbmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgaWYgdG9rZW4gPT0gIj0iCisg
ICAgICAgICAgICBjb25zdW1lKCI9IikKKyAgICAgICAgICAgIG9wY29kZSA9IGNvbnN1bWVJZGVu
dGlmaWVyCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgZWxzaWYgdG9rZW4gPT0g
IigiCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgICAgIG9wY29kZSA9IG5hbWUK
KyAgICAgICAgICAgIG5hbWUgPSBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJu
IFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgbmlsLCBuaWwpCisgICAgICAgIGVuZAorICAg
ICAgICAKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBsb29wIHsKKyAgICAgICAg
ICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorCisgICAgICAgICAgICBhZGRVbmlxdWUobmFtZSwg
cHJvZHVjdGlvbnMsIHBhcnNlUHJvZHVjdGlvbikKKworICAgICAgICAgICAgYnJlYWsgaWYgdG9r
ZW4gPT0gIikiCisgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgfQorCisgICAgICAg
ICMgQWR2YW5jZSBhZnRlciB0aGUgIikiCisgICAgICAgIGFkdmFuY2UKKworICAgICAgICBQcm9k
dWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG9wY29kZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCitl
bmQKKworZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86OnJlYWQo
ZmlsZU5hbWUpLCBmaWxlTmFtZSkKK21hdGNoZXIgPSBwYXJzZXIucGFyc2UKKworY2xhc3MgU3Vi
TWF0Y2gKKyAgICBhdHRyX3JlYWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0aW9ucworICAgIAorICAg
IGRlZiBpbml0aWFsaXplKGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBpbmRleE1h
cCA9IFtdCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGluZGV4TGlzdC5lYWNo
IHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwIDw8IGluZGV4
CisgICAgICAgICAgICBAcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAg
IH0KKyAgICBlbmQKKworICAgIGRlZiBtYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICBp
bmRleExpc3QubWFwIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4
TWFwW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCitlbmQKKworJHN0ZGVyci5wdXRzICJHZW5l
cmF0aW5nIGNvZGUgZm9yICN7ZmlsZU5hbWV9LiIKKworRmlsZS5vcGVuKCJCMyIgKyBtYXRjaGVy
Lm5hbWUgKyAiLmgiLCAidyIpIHsKKyAgICB8IG91dHAgfAorCisgICAgb3V0cC5wdXRzICIvLyBH
ZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxlTmFtZX0g
LS0gZG8gbm90IGVkaXQhIgorCisgICAgb3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRjaGVyLm5h
bWV9X2giCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2giCisgICAg
CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkIzVmFsdWUuaFwiIgorICAgIAorICAgIG91dHAu
cHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IgorCisgICAgb3V0cC5wdXRzICJ0
ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiIKKyAgICBvdXRwLnB1dHMgImJvb2wgcnVuI3ttYXRj
aGVyLm5hbWV9KFZhbHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91dHAucHV0
cyAieyIKKworICAgICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJseSBpbmRl
bnRlZCBjb2RlLCBiZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91CisgICAg
IyB3YW50IHRvIHNlZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGluIGEgZ29v
ZCB0ZXh0IGVkaXRvciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlvdS4KKwor
ICAgICMgSW4gb2RkIHNpdHVhdGlvbnMsIHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2YWx1ZS4g
VGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgIG91dHAucHV0cyAi
VU5VU0VEX1BBUkFNKF92YWx1ZSk7IgorICAgICAgICAKKyAgICAjIFRoaXMganVzdCBwcm90ZWN0
cyB0aGUgY2FsbGVyIGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25zIGhhdmlu
ZyBkaWZmZXJlbnQgbGVuZ3Rocy4KKyAgICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1l
LCBwcm9kdWN0aW9ucykKKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rp
b25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwK
KyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3Rz
Wy0xXVswXV0uY2hpbGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVuZ3RoCisg
ICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAor
ICAgICAgICB9CisKKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0u
Y2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICBpZiBsZW5ndGggPiAwCisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGlsZHJlbigpLnNpemUoKSA+PSAje2xl
bmd0aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHlpZWxk
IGluZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMg
VGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9kdWN0aW9u
cy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxpY2F0ZWQu
IEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0aGUgY29y
b3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMgY29kZSBm
b3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9mCisgICAg
IyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRlZiBtYXRj
aFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgICMgRmly
c3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0aW9ucyB3
aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9uZS4KKyAg
ICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRl
eCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAgIGlmIGlu
ZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFzT3Bjb2Rl
ID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0g
PDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8
IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICAj
IE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVudGx5IGZv
ciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdpdGhvdXQg
b25lLgorICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3Qg
fAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNvZGUKKyAg
ICAgICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8gZ3JvdXBz
IGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAgICAgICAg
ICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8Cisg
ICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAgICAgICAg
ICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAgICAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlv
bi5vcGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50LgorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29kZSgpKSB7
IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAgICAgICAg
ICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0
Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIG1h
dGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgICAg
IHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9Igor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3
KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0
cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAg
ICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcElu
ZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZW5kCisg
ICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBoYXZlIHRo
ZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20gdGhlbSBi
YXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4uCisgICAg
ZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4
KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJlbi5sZW5n
dGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19hCisgICAg
ICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBuZXdWYXIK
KyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRzICJWYWx1
ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9KTsiCisK
KyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0
byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKCN7
c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHByb2R1Y3Rp
b25zLm1hcCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAgcHJvZHVj
dGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoUmVj
dXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8
IGluZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1l
LCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAgICAgICAg
ICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4
TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBvdXRw
LnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCB2YWx1
ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVl
TmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAg
ICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFpbnMgcHJv
ZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRoZSBzYW1l
IGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwg
cHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1
Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAor
ICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJzaXZlbHko
b3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAg
ICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQorICAgICAg
ICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3twcm9k
dWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVU5VU0VE
X1BBUkFNKCN7cHJvZHVjdGlvbi52YXJOYW1lfSk7IgorICAgICAgICAgICAgaW50ZXJuYWxBcmd1
bWVudHMgPSBbXQorICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAg
ICB0cnlBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgbnVtU2NvcGVzID0gMAorICAgICAgICAg
ICAgc2VlbiA9IHt9CisKKyAgICAgICAgICAgICMgRklYTUU6IFdlIHdhbnQgdG8gYmUgYWJsZSB0
byBjb21iaW5lIHBhdHRlcm4gbWF0Y2hlcnMsIGxpa2UgaGF2ZSB0aGUgcGF0dGVybiBtYXRjaCBy
dWxlCisgICAgICAgICAgICAjIGZvciBCcmFuY2ggaW4gdGhlIGxvd2VyaW5nIHBhdGNoZXIgZGVs
ZWdhdGUgdG8gYSBtYXRjaGVyIHRoYXQgY2FuIGRlZHVjZSB0aGUga2luZCBvZgorICAgICAgICAg
ICAgIyBjb21wYXJpc29uIHRoYXQgd2UncmUgZG9pbmcuIFdlIGNvdWxkIHRoZW4gcmV1c2UgdGhh
dCBsYXR0ZXIgbWF0Y2hlciBmb3IgQ2hlY2sgYW5kCisgICAgICAgICAgICAjIHVuZnVzZWQgY29t
cGFyZS4gVGhlIGtleSB0byBtYWtpbmcgc3VjaCBhIGRlbGVnYXRpb24gd29yayBpcyB0byBoYXZl
IHRoZSBpbm5lciBtYXRjaGVyCisgICAgICAgICAgICAjICh0aGUgY29tcGFyaXNvbiBtYXRjaGVy
IGluIHRoaXMgY2FzZSkga2VlcCBjYXNjYWRpbmcgaWYgaXQgZW5jb3VudGVycyBhIHJ1bGUgdGhh
dAorICAgICAgICAgICAgIyBwcm9kdWNlcyBzb21ldGhpbmcgdGhhdCB0aGUgb3V0ZXIgbWF0Y2hl
ciBjYW5ub3QgaGFuZGxlLiBJdCdzIG5vdCBvYnZpb3VzIHRoYXQgdGhlCisgICAgICAgICAgICAj
IGNvbXBhcmlzb24gbWF0Y2hlciB3b3VsZCBuZWVkIHRoaXMsIGJ1dCB0aGUgYWRkcmVzcyBtYXRj
aGVyIHByb2JhYmx5IHdpbGwuIEZvciBleGFtcGxlLAorICAgICAgICAgICAgIyB3ZSBtYXkgaGF2
ZSBhIFN0b3JlQWRkTG9hZCBydWxlIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSBhZGRyZXNzIG1hdGNo
ZXIsIGFuZCB0aGUgYWRkcmVzcworICAgICAgICAgICAgIyBtYXRjaGVyIG1heSBwcm9kdWNlIGFu
IGFkZHJlc3MgdGhhdCB0aGUgbG93ZXJpbmcgbWF0Y2hlciBjYW5ub3QgdXNlIGJlY2F1c2Ugd2hp
bGUgdGhlCisgICAgICAgICAgICAjIEFkZCBmb3JtIGRvZXMgYWNjZXB0IGFkZHJlc3NlcyBpdCBt
YXkgbm90IGFjY2VwdCB0aGUgcGFydGljdWxhciBhZGRyZXNzIHRoYXQgdGhlCisgICAgICAgICAg
ICAjIGFkZHJlc3MgbWF0Y2hlciBwcm9kdWNlZC4gSW4gdGhhdCBjYXNlLCBpbnN0ZWFkIG9mIGdp
dmluZyB1cCBvbiB0aGUgU3RvcmVBZGRMb2FkIHJ1bGUsCisgICAgICAgICAgICAjIHdlIHdhbnQg
dGhlIGFkZHJlc3MgbWF0Y2hlciB0byBqdXN0IHRyeSBhIGRpZmZlcmVudCBhZGRyZXNzLiBUaGUg
Y29tcGFyaXNvbiBtYXRjaGVyCisgICAgICAgICAgICAjIG1pZ2h0IHdhbnQgdGhpcyBqdXN0IGZv
ciBiZXR0ZXIgY29udHJvbGxpbmcgd2hlbiB0byBwaW4gdmFyaWFibGVzLiBDdXJyZW50bHksIGlm
IGl0CisgICAgICAgICAgICAjIGNvbnN0cnVjdGVkIHNvbWUgY29kZSwgaXQgd291bGQgYWxzbyBw
aW4gdGhlIHZhcmlhYmxlcyB0aGF0IGl0IHVzZWQuIElmIHRoZSBsb3dlcmluZworICAgICAgICAg
ICAgIyBtYXRjaGVyIHRoZW4gZGVjaWRlZCB0byByZWplY3QgdGhlIGNvZGUgY3JlYXRlZCBieSB0
aGUgY29tcGFyaXNvbiBtYXRjaGVyLCBpdCB3b3VsZAorICAgICAgICAgICAgIyBoYXZlIGEgaGFy
ZCB0aW1lICJ1bnBpbm5pbmciIHRob3NlIHZhcmlhYmxlcy4gQnV0IGlmIHdlIGhhZCBzb21lIGtp
bmQgb2YgZGVsZWdhdGlvbiwgd2UKKyAgICAgICAgICAgICMgY291bGQgaGF2ZSB0aGUgcGlubmlu
ZyBvZiB0aGUgY29tcGFyaXNvbiBtYXRjaGVyIGhhcHBlbiBvbmx5IGlmIHRoZSBsb3dlcmluZyBt
YXRjaGVyCisgICAgICAgICAgICAjIGFjY2VwdGVkLgorICAgICAgICAgICAgIworICAgICAgICAg
ICAgIyBUaGlzIGNvdWxkIGFsbCBiZSBhY2NvbXBsaXNoZWQgYnkgaGF2aW5nIHRyeUJsYWgoKSBy
ZXR1cm4gc29tZXRoaW5nLCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgICAgICMgbWF0Y2hlciBhbHNv
IHRha2UgYSBmdW5jdG9yIGFyZ3VtZW50IHRoYXQgYWNjZXB0cyB3aGF0IHRyeUJsYWgoKSByZXR1
cm5zLiBTbyBpbnN0ZWFkIG9mCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGlmICh0cnlC
bGFoKCkpIG9rOworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBXZSB3b3VsZCBoYXZlOgor
ICAgICAgICAgICAgIworICAgICAgICAgICAgIyBpZiAoZnVuY3Rvcih0cnlCbGFoKCkpIG9rOwor
ICAgICAgICAgICAgIworICAgICAgICAgICAgIyBXaGVuIGxvd2VyaW5nIGRlY2lkZWQgdG8gZGVs
ZWdhdGUgdG8gdGhlIGFkZHJlc3Mgb3IgY29tcGFyaXNvbiBtYXRjaGVyLCBpdCBjb3VsZCBzdXBw
bHkKKyAgICAgICAgICAgICMgYSBmdW5jdG9yIHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRoZSB0aGlu
ZyB0aGF0IHRoZSBzdWItbWF0Y2hlciBzZWxlY3RlZCBpcyBpbmRlZWQKKyAgICAgICAgICAgICMg
dXNlZnVsLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJbiB0aGUgbmVhciB0ZXJtLCB3
ZSBwcm9iYWJseSB3b24ndCBuZWVkIHRoaXMuIEJ1dCB3ZSB3aWxsIGRlZmluaXRlbHkgbmVlZCBp
dCBhcyB3ZQorICAgICAgICAgICAgIyBleHBhbmQgdG8gZWZmaWNpZW50bHkgc3VwcG9ydCBtb3Jl
IHBsYXRmb3Jtcy4gT24gWDg2XzY0LCBhbnkgYnJhbmNoaW5nIGluc3RydWN0aW9uIGlzCisgICAg
ICAgICAgICAjIHVzYWJsZSBpbiBhbnkgY29udGV4dCwgYW5kIGFueSBhZGRyZXNzIHNob3VsZCBi
ZSB1c2FibGUgaW4gYW55IGNvbnRleHQgKGFuZCB0aGUgb25seQorICAgICAgICAgICAgIyBjYXNl
cyB3aGVyZSBpdCB3b3VsZG4ndCBiZSBpcyBpZiB3ZSBoYXZlIGhvbGVzIGluIHRoZSBNYWNyb0Fz
c2VtYmxlcikuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1NTkKKyAgICAgICAgICAgIAorICAgICAgICAgICAg
cHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAgICAgICAgICAgICAgIHwgcGFyZW50VmFyTmFt
ZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAg
ICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgje2luZGV4fSkiCisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc2VlbltjaGlsZFZhck5hbWVdCisgICAgICAg
ICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
IlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsiCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsiCisgICAgICAgICAgICAgICAg
ICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVlCisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFtZX0gPSAje2xv
YWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIgZ2V0dGlu
ZyByaWQgb2YgdGhlICQgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICAjIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MjcKKyAgICAgICAgICAgICAgICAgICAg
aWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgY2hpbGRO
YW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBv
ciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFuZEFyZ3Vt
ZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5kID09IDphbm9u
T3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1l
IGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFkYXB0b3Iu
YWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJndW1lbnRz
LmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRJbnRl
cm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5PworICAgICAg
ICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygiICsgb3BlcmFu
ZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0cnlBcmd1
bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRv
ci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBpbnRlcm5hbEFy
Z3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0
SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpOyIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1wdHk/
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJhbmRzTGF0ZSgi
ICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiB0cnVlOyIKKyAgICAgICAgICAgIG91dHAucHV0
cyAifSIKKyAgICAgICAgICAgIG51bVNjb3Blcy50aW1lcyB7CisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJ9IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAg
ICAgICB9CisgICAgfQorICAgIAorICAgIG91dHAucHV0cyAiICAgIHJldHVybiBmYWxzZTsiCisg
ICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21hdGNoZXIubmFtZX1faCIK
K30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgi
CisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZh
bHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb250cm9s
VmFsdWUuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJJbml0aWFsaXplVGhyZWFk
aW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIK
KyNpbmNsdWRlICJWTS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwordXNpbmcgbmFtZXNwYWNl
IEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCituYW1lc3BhY2UgeworCisvLyBOb3Ro
aW5nIGZhbmN5IGZvciBub3c7IHdlIGp1c3QgdXNlIHRoZSBleGlzdGluZyBXVEYgYXNzZXJ0aW9u
IG1hY2hpbmVyeS4KKyNkZWZpbmUgQ0hFQ0soeCkgUkVMRUFTRV9BU1NFUlQoeCkKKworVk0qIHZt
OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitUIGNvbXBp
bGVBbmRSdW4oUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7
CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgZ2VuZXJhdGUocHJvY2VkdXJlLCBqaXQp
OworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7CisgICAgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIsICgidGVz
dGIzIikpOworICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2VfY2FzdDxU
KCopKEFyZ3VtZW50cy4uLik+KGNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOworICAg
IHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOworfQorCit2b2lkIHRlc3Q0MigpCit7Cisg
ICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2so
KTsKKyAgICBWYWx1ZSogY29uc3Q0MiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCA0Mik7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4ocHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwgY29uc3Q0Mik7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVu
PGludD4ocHJvYykgPT0gNDIpOworfQorCit2b2lkIHRlc3RMb2FkNDIoKQoreworICAgIFByb2Nl
ZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAg
aW50IHggPSA0MjsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZh
bHVlPigKKyAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJngpKSk7
CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykgPT0gNDIpOworfQorCit2b2lk
IHRlc3RBcmcoaW50IGFyZ3VtZW50KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRy
b2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYXJndW1l
bnQpID09IGFyZ3VtZW50KTsKK30KKwordm9pZCB0ZXN0QWRkQXJncyhpbnQgYSwgaW50IGIpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywg
UmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCks
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRS
dW48aW50Pihwcm9jLCBhLCBiKSA9PSBhICsgYik7Cit9CisKK3ZvaWQgdGVzdEFkZEFyZ3MzMihp
bnQgYSwgaW50IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigK
KyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2lu
KCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSkpOworCisgICAgQ0hFQ0soY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyBiKTsKK30KKwordm9pZCB0ZXN0U3Rv
cmUoaW50IHZhbHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHNsb3QgPSAweGJhYWRiZWVmOworICAgIHJv
b3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIFN0b3JlLCBPcmlnaW4o
KSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRy
dW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnNsb3QpKTsKKyAg
ICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDAp
KTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYywgdmFsdWUpKTsKKyAgICBD
SEVDSyhzbG90ID09IHZhbHVlKTsKK30KKworI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAg
ICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRhTG9nKCN0ZXN0ICI6XG4iKTsgICAgICAg
ICAgICAgICAgICAgXAorICAgICAgICB0ZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBkYXRhTG9nKCIgICAgT0shXG4iKTsgICAgICAgICAgICAgICAgICAg
XAorICAgIH0gd2hpbGUgKGZhbHNlKTsKKwordm9pZCBydW4oKQoreworICAgIEpTQzo6aW5pdGlh
bGl6ZVRocmVhZGluZygpOworICAgIHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVm
KCk7CisKKyAgICBSVU4odGVzdDQyKCkpOworICAgIFJVTih0ZXN0TG9hZDQyKCkpOworICAgIFJV
Tih0ZXN0QXJnKDQzKSk7CisgICAgUlVOKHRlc3RBZGRBcmdzKDEsIDEpKTsKKyAgICBSVU4odGVz
dEFkZEFyZ3MoMSwgMikpOworICAgIFJVTih0ZXN0QWRkQXJnczMyKDEsIDEpKTsKKyAgICBSVU4o
dGVzdEFkZEFyZ3MzMigxLCAyKSk7CisgICAgUlVOKHRlc3RTdG9yZSg0NCkpOworfQorCit9IC8v
IGFub255bW91cyBuYW1lc3BhY2UKKworI2Vsc2UgLy8gRU5BQkxFKEIzX0pJVCkKKworc3RhdGlj
IHZvaWQgcnVuKCkKK3sKKyAgICBkYXRhTG9nKCJCMyBKSVQgaXMgbm90IGVuYWJsZWQuXG4iKTsK
K30KKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFy
KiogYXJndikKK3sKKyAgICBVTlVTRURfUEFSQU0oYXJnYyk7CisgICAgVU5VU0VEX1BBUkFNKGFy
Z3YpOworICAgIAorICAgIHJ1bigpOworICAgIHJldHVybiAwOworfQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJBaXJBbGxvY2F0ZVN0YWNrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2
ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiU3RhY2tBbGln
bm1lbnQuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitjb25zdCBib29s
IHZlcmJvc2UgPSBmYWxzZTsKKworYm9vbCBhdHRlbXB0QXNzaWdubWVudCgKKyAgICBTdGFja1Ns
b3QqIHNsb3QsIGludHB0cl90IG9mZnNldEZyb21GUCwgY29uc3QgVmVjdG9yPFN0YWNrU2xvdCo+
JiBvdGhlclNsb3RzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJBdHRl
bXB0aW5nIHRvIGFzc2lnbiAiLCBwb2ludGVyRHVtcChzbG90KSwgIiB0byAiLCBvZmZzZXRGcm9t
RlAsICIgd2l0aCBpbnRlcmZlcmVuY2UgIiwgcG9pbnRlckxpc3REdW1wKG90aGVyU2xvdHMpLCAi
XG4iKTsKKyAgICAKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTbG90cykg
eworICAgICAgICBpZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgYm9vbCBvdmVybGFwID0gV1RGOjpyYW5nZXNPdmVybGFwKAorICAg
ICAgICAgICAgb2Zmc2V0RnJvbUZQLAorICAgICAgICAgICAgb2Zmc2V0RnJvbUZQICsgc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkpLAorICAgICAgICAgICAgb3RoZXJTbG90
LT5vZmZzZXRGcm9tRlAoKSwKKyAgICAgICAgICAgIG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkg
KyBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob3RoZXJTbG90LT5ieXRlU2l6ZSgpKSk7CisgICAgICAg
IGlmIChvdmVybGFwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJBc3NpZ25lZCAiLCBwb2ludGVyRHVtcChzbG90
KSwgIiB0byAiLCBvZmZzZXRGcm9tRlAsICJcbiIpOworICAgIHNsb3QtPnNldE9mZnNldEZyb21G
UChvZmZzZXRGcm9tRlApOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGFzc2lnbihTdGFj
a1Nsb3QqIHNsb3QsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiQXR0ZW1wdGluZyB0byBhc3NpZ24gIiwg
cG9pbnRlckR1bXAoc2xvdCksICIgd2l0aCBpbnRlcmZlcmVuY2UgIiwgcG9pbnRlckxpc3REdW1w
KG90aGVyU2xvdHMpLCAiXG4iKTsKKyAgICAKKyAgICBpZiAoYXR0ZW1wdEFzc2lnbm1lbnQoc2xv
dCwgLXN0YXRpY19jYXN0PGludHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwgb3RoZXJTbG90cykp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBvdGhl
clNsb3RzKSB7CisgICAgICAgIGlmICghb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29sIGRpZEFzc2lnbiA9IGF0dGVtcHRBc3NpZ25t
ZW50KAorICAgICAgICAgICAgc2xvdCwgb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSAtIHN0YXRp
Y19jYXN0PGludHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwgb3RoZXJTbG90cyk7CisgICAgICAg
IGlmIChkaWRBc3NpZ24pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K3ZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VT
Y29wZShjb2RlLCAiYWxsb2NhdGVTdGFjayIpOworCisgICAgLy8gQWxsb2NhdGUgYWxsIG9mIHRo
ZSBsb2NrZWQgc2xvdHMgaW4gb3JkZXIuIFRoaXMgaXMga2luZCBvZiBhIGNyYXp5IGFsZ29yaXRo
bSB0byBhbGxvdyBmb3IKKyAgICAvLyB0aGUgcG9zc2liaWxpdHkgb2Ygc3RhY2sgc2xvdHMgYmVp
bmcgYXNzaWduZWQgZnJhbWUgb2Zmc2V0cyBiZWZvcmUgd2UgZXZlbiBnZXQgaGVyZS4KKyAgICBB
U1NFUlQoIWNvZGUuZnJhbWVTaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25l
ZExvY2tlZFN0YWNrU2xvdHM7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGxvY2tlZFN0YWNrU2xv
dHNXb3JrbGlzdDsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygp
KSB7CisgICAgICAgIHN3aXRjaCAoc2xvdC0+a2luZCgpKSB7CisgICAgICAgIGNhc2UgU3RhY2tT
bG90S2luZDo6TG9ja2VkOgorICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQor
ICAgICAgICAgICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0
LmFwcGVuZChzbG90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrU2xv
dEtpbmQ6OkFub255bW91czoKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkg
eworICAgICAgICAgICAgICAgIC8vIEFzIGEgbWF0dGVyIG9mIHNhbml0eSwgdW5hc3NpZ24gdGhp
cy4gTWF5YmUgaXQgd291bGQgYmUgZ29vZCB0byBldmVuIGhhdmUgYQorICAgICAgICAgICAgICAg
IC8vIHZhbGlkYXRpb24gcnVsZSB0aGF0IHRoaXMgY2Fubm90IGhhcHBlbi4KKyAgICAgICAgICAg
ICAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBUaGlzIGlzIGEgZmFpcmx5IGV4cGVu
c2l2ZSBsb29wLCBidXQgaXQncyBPSyBiZWNhdXNlIHdlJ2xsIHVzdWFsbHkgb25seSBoYXZlIGEg
aGFuZGZ1bCBvZgorICAgIC8vIGxvY2tlZCBzdGFjayBzbG90cy4KKyAgICB3aGlsZSAoIWxvY2tl
ZFN0YWNrU2xvdHNXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RhY2tTbG90KiBzbG90
ID0gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGFzc2lnbihz
bG90LCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMpOworICAgICAgICBhc3NpZ25lZExvY2tlZFN0
YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhl
IGFub255bW91cyBzbG90cy4gTm90ZSB0aGF0IHRoZW9yZXRpY2FsbHkgd2Ugc2hvdWxkIGRvIGFu
IGVzY2FwZSBhbmFseXNpcworICAgIC8vIGhlcmUuIEJ1dCwgY3VycmVudGx5IEFpciBkb2Vzbid0
IHN1cHBvcnQgZXNjYXBpbmcgYSBTdGFja1Nsb3QhCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBlc2NhcGluZyBhIFN0YWNrU2xvdCBhbmQgYWRkIGVzY2FwZSBhbmFseXNpcyB0byBhbGxv
Y2F0ZVN0YWNrKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDQzMAorCisgICAgYXV0byBpc1JlbGV2YW50ID0gW10gKGNvbnN0IEFyZyYgYXJnKSAt
PiBib29sIHsKKyAgICAgICAgcmV0dXJuIGFyZy5pc1N0YWNrKCkgJiYgYXJnLnN0YWNrU2xvdCgp
LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOworICAgIH07CisKKyAgICBMaXZl
bmVzczxBcmc+IGxpdmVuZXNzKGNvZGUpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNl
dDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7Cisg
ICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IGNvZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8QXJnPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhs
aXZlbmVzcywgYmxvY2spOworCisgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdICgpIHsKKyAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkludGVyZmVy
aW5nOiAiLCBsaXN0RHVtcChsb2NhbENhbGMubGl2ZSgpKSwgIlxuIik7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIC8vIEZvcm0gYSBjbGlxdWUgb2Ygc3RhY2sgc2xvdHMgdGhhdCBpbnRlcmZl
cmUuIEZpcnN0IGZpbmQgdGhlIGxpc3Qgb2Ygc3RhY2sgc2xvdHMKKyAgICAgICAgICAgIC8vIHRo
YXQgYXJlIGxpdmUgcmlnaHQgbm93LgorICAgICAgICAgICAgc2xvdHMucmVzaXplKDApOworICAg
ICAgICAgICAgZm9yIChBcmcgYXJnIDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAgICAgICAg
ICAgIGlmIChpc1JlbGV2YW50KGFyZykpCisgICAgICAgICAgICAgICAgICAgIHNsb3RzLmFwcGVu
ZChhcmcuc3RhY2tTbG90KCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHZlcmJv
c2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIFNsb3RzOiAiLCBwb2ludGVyTGlzdER1
bXAoc2xvdHMpLCAiXG4iKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
bG90cy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBz
bG90c1tpXTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNs
b3RzLnNpemUoKTsgKytqKSB7CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIg
PSBzbG90c1tqXTsKKworICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmVuY2VbaW5uZXJdLmFk
ZChvdXRlcik7CisgICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZVtvdXRlcl0uYWRkKGlu
bmVyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAg
ICAgICAgaW50ZXJmZXJlKCk7CisgICAgICAgIAorICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJ
bmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiQW5hbHl6aW5nOiAiLCBibG9jay0+YXQo
aW5zdEluZGV4KSwgIlxuIik7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+
YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAgICBpbnRlcmZlcmUoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGlmICh2ZXJib3NlKSB7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDog
Y29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgICAgICBkYXRhTG9nKCJJbnRlcmZlcmVuY2Ugb2Yg
IiwgcG9pbnRlckR1bXAoc2xvdCksICI6ICIsIHBvaW50ZXJMaXN0RHVtcChpbnRlcmZlcmVuY2Vb
c2xvdF0pLCAiXG4iKTsKKyAgICB9CisKKyAgICAvLyBOb3cgd2UgYXNzaWduIHN0YWNrIGxvY2F0
aW9ucy4gQXQgaXRzIGhlYXJ0IHRoaXMgYWxnb3JpdGhtIGlzIGp1c3QgZmlyc3QtZml0LiBGb3Ig
ZWFjaAorICAgIC8vIFN0YWNrU2xvdCB3ZSBqdXN0IHdhbnQgdG8gZmluZCB0aGUgb2Zmc2V0RnJv
bUZQIHRoYXQgaXMgY2xvc2VzdCB0byB6ZXJvIHdoaWxlIGVuc3VyaW5nIG5vCisgICAgLy8gb3Zl
cmxhcCB3aXRoIG90aGVyIFN0YWNrU2xvdHMgdGhhdCB0aGlzIG92ZXJsYXBzIHdpdGguCisgICAg
VmVjdG9yPFN0YWNrU2xvdCo+IG90aGVyU2xvdHM7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3Qg
OiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
IHsKKyAgICAgICAgICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0LgorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+JiBp
bnRlcmZlcmluZ1Nsb3RzID0gaW50ZXJmZXJlbmNlW3Nsb3RdOworICAgICAgICBvdGhlclNsb3Rz
LnJlc2l6ZShhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpICsgaW50ZXJmZXJpbmdTbG90
cy5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzLnNpemUoKTsgKytpKQorICAgICAgICAgICAgb3RoZXJTbG90c1tpXSA9IGFz
c2lnbmVkTG9ja2VkU3RhY2tTbG90c1tpXTsKKyAgICAgICAgdW5zaWduZWQgbmV4dEluZGV4ID0g
YXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3Qq
IG90aGVyU2xvdCA6IGludGVyZmVyaW5nU2xvdHMpCisgICAgICAgICAgICBvdGhlclNsb3RzW25l
eHRJbmRleCsrXSA9IG90aGVyU2xvdDsKKworICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90
cyk7CisgICAgfQorCisgICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzdGFjayB3ZSdyZSB1c2lu
ZyBmb3Igc3RhY2sgc2xvdHMuCisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9
IDA7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAg
ICAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gc3RkOjptYXgoCisgICAgICAgICAgICBmcmFt
ZVNpemVGb3JTdGFja1Nsb3RzLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1z
bG90LT5vZmZzZXRGcm9tRlAoKSkpOworICAgIH0KKworICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xv
dHMgPSBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBmcmFt
ZVNpemVGb3JTdGFja1Nsb3RzKTsKKworICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRlZHVjZSBob3cg
bXVjaCBhcmd1bWVudCBhcmVhIHdlIG5lZWQuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAg
ICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZy5p
c0NhbGxBcmcoKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBhc3N1bWUg
dGhhdCB3ZSB1c2UgOCBieXRlcyBvZiB0aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mgbm90CisgICAg
ICAgICAgICAgICAgICAgIC8vIHN1Y2ggYW4gYXdlc29tZSBhc3N1bXB0aW9uLgorICAgICAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDQ1NAorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLm9mZnNldCgpID49IDAp
OworICAgICAgICAgICAgICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoYXJnLm9m
ZnNldCgpICsgOCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgY29kZS5zZXRGcmFtZVNpemUoZnJhbWVTaXplRm9yU3RhY2tTbG90cyAr
IGNvZGUuY2FsbEFyZ0FyZWFTaXplKCkpOworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRo
ZSBjb2RlIHRvIHVzZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxv
c3NsZXNzCisgICAgLy8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3Rh
Y2tTbG90cyBhcnJheSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAvLyBv
ZmZzZXQtZnJvbS1GUCByZWZlcnMgdG8uCisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
Y29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAg
IGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFy
Zy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgICAg
ICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcu
b2Zmc2V0KCkgKyBhcmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAg
ICAgICAgICAgICAgICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAg
IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAgICAg
ICBhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QWxsb2NhdGVTdGFjay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
ckFsbG9jYXRlU3RhY2tfaAorI2RlZmluZSBBaXJBbGxvY2F0ZVN0YWNrX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFj
ZXMgb24gdGhlIHN0YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGlu
ZGV4CisvLyBvcmRlciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3Qg
Zml0LgorCit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWly
QWxsb2NhdGVTdGFja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFy
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQXJnLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lh
bC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEludmFsaWQ6Cisg
ICAgICAgIG91dC5wcmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFRtcDoKKyAgICAgICAgb3V0LnByaW50KHRtcCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSW1tOgorICAgICAgICBvdXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEltbTY0OgorICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4IiwgbV9vZmZz
ZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGRyOgorICAgICAgICBpZiAob2Zmc2V0
KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQo
IigiLCBiYXNlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZGV4OgorICAg
ICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAg
ICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCksICIsIiwgaW5kZXgoKSk7CisgICAgICAgIGlmIChz
Y2FsZSgpICE9IDEpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKKyAgICAg
ICAgb3V0LnByaW50KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAg
ICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAg
ICAgICBvdXQucHJpbnQoIigiLCBwb2ludGVyRHVtcChzdGFja1Nsb3QoKSksICIpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAg
ICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKGNhbGxB
cmcpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIG91dC5w
cmludChhc1JlbGF0aW9uYWxDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFJlc0NvbmQ6CisgICAgICAgIG91dC5wcmludChhc1Jlc3VsdENvbmRpdGlvbigpKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJE
dW1wKHNwZWNpYWwoKSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQXJnLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NzIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBcmdfaAorI2Rl
ZmluZSBBaXJBcmdfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclRtcC5o
IgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3BlY2lhbDsK
K2NsYXNzIFN0YWNrU2xvdDsKKworLy8gVGhpcyBjbGFzcyBuYW1lIGlzIGFsc28gaW50ZW50aW9u
YWxseSB0ZXJzZSBiZWNhdXNlIHdlIHdpbGwgc2F5IGl0IGEgbG90LiBZb3UnbGwgc2VlIGNvZGUg
bGlrZQorLy8gSW5zdCguLi4sIEFyZzo6aW1tKDUpLCBBcmc6OmFkZHIodGhpbmcsIGJsYWgpLCAu
Li4pCitjbGFzcyBBcmcgeworcHVibGljOgorICAgIC8vIFRoZXNlIGVudW0gbWVtYmVycyBhcmUg
aW50ZW50aW9uYWxseSB0ZXJzZSBiZWNhdXNlIHdlIGhhdmUgdG8gbWVudGlvbiB0aGVtIGEgbG90
LgorICAgIGVudW0gS2luZCA6IGludDhfdCB7CisgICAgICAgIEludmFsaWQsCisgICAgICAgIFRt
cCwKKyAgICAgICAgSW1tLAorICAgICAgICBJbW02NCwKKyAgICAgICAgQWRkciwKKyAgICAgICAg
U3RhY2ssCisgICAgICAgIENhbGxBcmcsCisgICAgICAgIEluZGV4LAorICAgICAgICBSZWxDb25k
LAorICAgICAgICBSZXNDb25kLAorICAgICAgICBTcGVjaWFsCisgICAgfTsKKworICAgIGVudW0g
Um9sZSA6IGludDhfdCB7CisgICAgICAgIFVzZSwKKyAgICAgICAgRGVmLAorICAgICAgICBVc2VE
ZWYKKyAgICB9OworCisgICAgZW51bSBUeXBlIDogaW50OF90IHsKKyAgICAgICAgR1AsCisgICAg
ICAgIEZQCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1UeXBlcyA9IDI7
CisKKyAgICBzdGF0aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNEZWYoUm9s
ZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNl
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAg
Y2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHN0YXRpYyBUeXBlIHR5cGVGb3JCM1R5cGUoQjM6OlR5cGUgdHlwZSkKKyAgICB7Cisg
ICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAg
ICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gRlA7CisgICAgICAgIH0KKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBHUDsKKyAgICB9CisK
KyAgICBBcmcoKQorICAgICAgICA6IG1fa2luZChJbnZhbGlkKQorICAgIHsKKyAgICB9CisKKyAg
ICBBcmcoQWlyOjpUbXAgdG1wKQorICAgICAgICA6IG1fa2luZChUbXApCisgICAgICAgICwgbV9i
YXNlKHRtcCkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW0oaW50MzJfdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJ
bW07CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW1tNjQoaW50cHRyX3QgdmFsdWUpCisgICAg
eworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tNjQ7Cisg
ICAgICAgIHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIHN0YXRpYyBBcmcgYWRkcihBaXI6OlRtcCBiYXNlLCBpbnQzMl90IG9mZnNl
dCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBcmcg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQWRkcjsKKyAgICAgICAgcmVzdWx0Lm1f
YmFzZSA9IGJhc2U7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHN0YWNrKFN0YWNrU2xvdCog
dmFsdWUsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
Yml0d2lzZV9jYXN0PGludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0g
b2Zmc2V0OyAvLyBJIGtub3csIHl1Y2suCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgc3RhdGljIEFyZyBjYWxsQXJnKGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAg
QXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENhbGxBcmc7CisgICAgICAgIHJl
c3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAyOgor
ICAgICAgICBjYXNlIDQ6CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGxvZ1NjYWxlKHVuc2lnbmVkIHNjYWxlKQor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIDg6Cisg
ICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBzdGF0aWMgQXJnIGluZGV4KEFpcjo6VG1wIGJhc2UsIEFpcjo6VG1wIGluZGV4LCB1
bnNpZ25lZCBzY2FsZSA9IDEsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpbmRleC5pc0dQKCkpOworICAgICAg
ICBBU1NFUlQoaXNWYWxpZFNjYWxlKHNjYWxlKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7
CisgICAgICAgIHJlc3VsdC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX3NjYWxl
ID0gc3RhdGljX2Nhc3Q8aW50MzJfdD4oc2NhbGUpOworICAgICAgICByZXN1bHQubV9vZmZzZXQg
PSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFy
ZyByZWxDb25kKE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikK
KyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZWxD
b25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyByZXNDb25kKE1hY3JvQXNzZW1ibGVy
OjpSZXN1bHRDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlc0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNl
dCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0
aWMgQXJnIHNwZWNpYWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQorICAgIHsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFNwZWNpYWw7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oc3BlY2lhbCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFyZyYgb3Ro
ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZz
ZXQKKyAgICAgICAgICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYm
IG1fYmFzZSA9PSBvdGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIu
bV9pbmRleAorICAgICAgICAgICAgJiYgbV9zY2FsZSA9PSBvdGhlci5tX3NjYWxlOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAqdGhpcyAhPSBBcmcoKTsgfQorCisgICAgS2lu
ZCBraW5kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQ7CisgICAgfQorCisg
ICAgYm9vbCBpc1RtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFRt
cDsKKyAgICB9CisKKyAgICBib29sIGlzSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBraW5kKCkgPT0gSW1tOworICAgIH0KKworICAgIGJvb2wgaXNJbW02NCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTY0OworICAgIH0KKworICAgIGJvb2wgaXNB
ZGRyKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKKyAgICB9
CisKKyAgICBib29sIGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBTdGFjazsKKyAgICB9CisKKyAgICBib29sIGlzQ2FsbEFyZygpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IENhbGxBcmc7CisgICAgfQorCisgICAgYm9vbCBpc0lu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CisgICAg
fQorCisgICAgYm9vbCBpc1JlbENvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBSZWxDb25kOworICAgIH0KKworICAgIGJvb2wgaXNSZXNDb25kKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVzQ29uZDsKKyAgICB9CisKKyAgICBib29s
IGlzU3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNp
YWw7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc1RtcCgpIHx8IGlzU3RhY2soKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCB0bXAoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUbXApOworICAgICAgICByZXR1
cm4gbV9iYXNlOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW0gfHwga2luZCgpID09IEltbTY0KTsKKyAgICAgICAg
cmV0dXJuIG1fb2Zmc2V0OworICAgIH0KKworICAgIHZvaWQqIHBvaW50ZXJWYWx1ZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fb2Zmc2V0KSk7Cisg
ICAgfQorCisgICAgQWlyOjpUbXAgYmFzZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IEFkZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fYmFz
ZTsKKyAgICB9CisKKyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgU3RhY2s6
CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGludDMyX3Qgb2Zmc2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChraW5kKCkgPT0gU3RhY2spCisgICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8aW50MzJfdD4obV9zY2FsZSk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRk
ciB8fCBraW5kKCkgPT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpOworICAgIH0KKworICAgIFN0YWNrU2xv
dCogc3RhY2tTbG90KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3Rh
Y2spOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFN0YWNrU2xvdCo+KG1fb2Zmc2V0KTsK
KyAgICB9CisKKyAgICBBaXI6OlRtcCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorCisg
ICAgdW5zaWduZWQgc2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9
PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX3NjYWxlOworICAgIH0KKworICAgIHVuc2lnbmVk
IGxvZ1NjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dTY2FsZShzY2FsZSgp
KTsKKyAgICB9CisKKyAgICBBaXI6OlNwZWNpYWwqIHNwZWNpYWwoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2Vf
Y2FzdDxBaXI6OlNwZWNpYWwqPihtX29mZnNldCk7CisgICAgfQorCisgICAgYm9vbCBpc0dQVG1w
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1AoKTsK
KyAgICB9CisKKyAgICBib29sIGlzRlBUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzVG1wKCkgJiYgdG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAKKyAgICAvLyBUZWxscyB1cyBp
ZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBHUCB2
YWx1ZS4KKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5k
KCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIGNh
c2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAg
ICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVz
Q29uZDoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzR1BUbXAoKTsKKyAgICAgICAg
Y2FzZSBJbnZhbGlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlv
biB0aGF0IHJlcXVpcmVzIGEgRlAgdmFsdWUuCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBj
YXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgY2FzZSBTcGVjaWFs
OgorICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFjazoK
KyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEltbTY0OiAvLyBZZXMsIHdlIGFs
bG93IEltbTY0IGFzIGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVu
dGluZyBzdGFja21hcHMuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBU
bXA6CisgICAgICAgICAgICByZXR1cm4gaXNGUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgYm9vbCBoYXNUeXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7
CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2Ug
VG1wOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHR5
cGUgaXMgYW1iaWd1b3VzIGZvciBzb21lIGFyZyBraW5kcy4gQ2FsbCB3aXRoIGNhcmUuCisgICAg
VHlwZSB0eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0dQKCkgPyBHUCA6IEZQ
OworICAgIH0KKworICAgIGJvb2wgaXNUeXBlKFR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJu
IGlzR1AoKTsKKyAgICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQKCk7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1BSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdw
cigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3ByKCk7CisgICAgfQorCisg
ICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0
bXAoKS5pc0ZQUigpOworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRtcCgpLmZwcigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzUmVnKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzUmVnKCk7Cisg
ICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCku
cmVnKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gdG1wKCkuZ3BUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVk
IGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwVG1wSW5k
ZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gdG1wKCkudG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBBcmcgd2l0aE9mZnNl
dChpbnQzMl90IGFkZGl0aW9uYWxPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhh
c09mZnNldCgpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBpZiAoc3VtT3Zl
cmZsb3dzPGludDMyX3Q+KG9mZnNldCgpLCBhZGRpdGlvbmFsT2Zmc2V0KSkKKyAgICAgICAgICAg
IHJldHVybiBBcmcoKTsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBB
ZGRyOgorICAgICAgICAgICAgcmV0dXJuIGFkZHIoYmFzZSgpLCBvZmZzZXQoKSArIGFkZGl0aW9u
YWxPZmZzZXQpOworICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICAgICAgcmV0dXJuIHN0YWNr
KHN0YWNrU2xvdCgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBjYXNl
IENhbGxBcmc6CisgICAgICAgICAgICByZXR1cm4gY2FsbEFyZyhvZmZzZXQoKSArIGFkZGl0aW9u
YWxPZmZzZXQpOworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGluZGV4
KGJhc2UoKSwgaW5kZXgoKSwgc2NhbGUoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3Qg
RnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAg
ICAgIGNhc2UgVG1wOgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1f
YmFzZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAg
ICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0
IGFuIGFkZHJlc3MgYXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cworICAg
IC8vIHRtcHMgYW5kIG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoKKyAgICAvLwor
ICAgIC8vIG1vdiAlcmF4LCAoJXJjeCkKKyAgICAvLworICAgIC8vIFRoaXMgZGVmcyAoJXJjeCkg
YnV0IHVzZXMgJXJjeC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQg
Zm9yRWFjaFRtcChSb2xlIGFyZ1JvbGUsIFR5cGUgYXJnVHlwZSwgY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgVG1w
OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIGFyZ1JvbGUsIGFyZ1R5cGUpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9i
YXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4Ogor
ICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgZnVuY3Rv
cihtX2luZGV4LCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIoc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyNpZiBVU0Uo
SlNWQUxVRTY0KQorICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQgYXNUcnVzdGVkSW1t
NjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAgIHJl
dHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KHZhbHVlKCkpOworICAgIH0KKyNlbmRp
ZgorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIgYXNUcnVzdGVkSW1tUHRyKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgICAgICBBU1NFUlQo
aXNJbW02NCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUKGlzSW1tKCkpOwor
ICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlclZhbHVl
KCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAgICByZXR1cm4gTWFj
cm9Bc3NlbWJsZXI6OkFkZHJlc3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2FzdDxpbnQzMl90Piht
X29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNl
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgoKSk7CisgICAgICAg
IHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgbV9iYXNlLmdw
cigpLCBtX2luZGV4LmdwcigpLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U2NhbGU+KGxv
Z1NjYWxlKCkpLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsK
KyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0
aW9uYWxDb25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgp
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3Vs
dENvbmRpdGlvbiBhc1Jlc3VsdENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNSZXNDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlc3VsdENvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCisgICAgQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSkKKyAgICAgICAgOiBtX2Jhc2UoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IEFyZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1
ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICAv
LyBUaGlzIHJlYWxseSBkb2Vzbid0IGhhdmUgdG8gYmUgdGhhdCBncmVhdC4KKyAgICAgICAgcmV0
dXJuIFdURjo6SW50SGFzaDxpbnQ2NF90Pjo6aGFzaChtX29mZnNldCkgKyBtX2tpbmQgKyBtX3Nj
YWxlICsgbV9iYXNlLmhhc2goKSArCisgICAgICAgICAgICBtX2luZGV4Lmhhc2goKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX29mZnNldCB7IDAgfTsKKyAgICBLaW5kIG1fa2lu
ZCB7IEludmFsaWQgfTsKKyAgICBpbnQzMl90IG1fc2NhbGUgeyAxIH07CisgICAgQWlyOjpUbXAg
bV9iYXNlOworICAgIEFpcjo6VG1wIG1faW5kZXg7Cit9OworCitzdHJ1Y3QgQXJnSGFzaCB7Cisg
ICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgQXJnJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNo
KCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBBcmcmIGEsIGNvbnN0IEFyZyYgYikg
eyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRv
RW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERl
ZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6QWlyOjpB
cmc+IHsKKyAgICB0eXBlZGVmIEpTQzo6QjM6OkFpcjo6QXJnSGFzaCBIYXNoOworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBI
YXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6QXJnPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6
OkIzOjpBaXI6OkFyZz4geworICAgIC8vIEJlY2F1c2UgbV9zY2FsZSBpcyAxIGluIHRoZSBlbXB0
eSB2YWx1ZS4KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBBaXJBcmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IGNoYXIqIGNvbnN0
IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK2Jvb2wgQmFzaWNCbG9jazo6YWRkUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIEIzOjphZGRQcmVkZWNl
c3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIEIzOjpyZW1vdmVQcmVkZWNlc3Nv
cih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVwbGFjZVByZWRlY2Vzc29y
KEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIHJldHVybiBCMzo6cmVw
bGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgs
IG1faW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9
ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsKKyAgICBmb3IgKGNvbnN0IEluc3QmIGluc3QgOiAqdGhp
cykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cit9CisKK0Jhc2ljQmxv
Y2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBt
X2luZGV4KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckJhc2ljQmxvY2tfaAorI2RlZmlu
ZSBBaXJCYXNpY0Jsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJG
cmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uQ29weWFibGUuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworY2xhc3MgSW5zZXJ0aW9uU2V0OworCitjbGFz
cyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShCYXNpY0Jsb2NrKTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hh
ciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIHR5cGVkZWYgVmVjdG9yPEluc3Q+IEluc3RMaXN0
OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7Cisg
ICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OworCisg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisgICAgCisgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuc2l6ZSgpOyB9CisgICAgSW5z
dExpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAg
SW5zdExpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKyAgICBJ
bnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmJl
Z2luKCk7IH0KKyAgICBJbnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gbV9pbnN0cy5lbmQoKTsgfQorCisgICAgY29uc3QgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSBj
b25zdCB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorICAgIEluc3QmIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKworICAgIGNvbnN0IEluc3QmIGxhc3QoKSBj
b25zdCB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorICAgIEluc3QmIGxhc3QoKSB7IHJldHVy
biBtX2luc3RzLmxhc3QoKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2
b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVu
ZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBcmd1bWVudHMmJi4uLiBhcmd1bWVu
dHMpCisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVuZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1
bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisKKyAgICAvLyBUaGUgIjAiIGNhc2UgaXMg
dGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1wcywgc28gdGhlICJ0aGVuIiBjYXNlLiBU
aGUgIjEiIGNhc2UgaXMgdGhlCisgICAgLy8gImVsc2UiIGNhc2UsIGFuZCBpcyB1c2VkIHRvIHJl
cHJlc2VudCB0aGUgZmFsbC10aHJvdWdoIG9mIGEgY29uZGl0aW9uYWwgYnJhbmNoLgorICAgIHVu
c2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgp
OyB9CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYgc3Vj
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9Cisg
ICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3Vj
Y2Vzc29yczsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1
Y2Nlc3NvcnM7IH0KKworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIHN1Y2Nlc3Nv
cihpbmRleCkuYmxvY2soKTsgfQorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywg
U3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBT
dWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+KG1fc3VjY2Vzc29y
cyk7CisgICAgfQorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29u
c3QgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nl
c3Nvckxpc3Q+KG1fc3VjY2Vzc29ycyk7CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtUHJlZGVj
ZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFz
aWNCbG9jayogcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJl
ZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25l
ZCBpbmRleCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgUHJl
ZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29y
czsgfQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVk
ZWNlc3NvcnM7IH0KKworICAgIGJvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAg
IGJvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVwbGFjZVBy
ZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKyAgICBmcmllbmQg
Y2xhc3MgSW5zZXJ0aW9uU2V0OworICAgIAorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgs
IGRvdWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBJbnN0TGlz
dCBtX2luc3RzOworICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworICAgIFByZWRlY2Vz
c29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBkb3VibGUgbV9mcmVxdWVuY3k7Cit9OworCitj
bGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGljOgorICAgIERlZXBCYXNpY0Jsb2NrRHVt
cChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAgICAgbV9ibG9jay0+ZGVlcER1bXAob3V0
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgY29uc3QgQmFzaWNCbG9jayogbV9ibG9jazsKK307CisKK2lubGlu
ZSBEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCit7
CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChibG9jayk7Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBBaXJCYXNpY0Jsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDQ2FsbFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK0NDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKCkKK3sKKyAgICBtX2Ns
b2JiZXJlZFJlZ3MgPSBSZWdpc3RlclNldDo6YWxsUmVnaXN0ZXJzKCk7CisgICAgbV9jbG9iYmVy
ZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgIG1fY2xv
YmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJz
KCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOworfQorCitDQ2FsbFNwZWNpYWw6On5DQ2FsbFNwZWNpYWwoKQoreworfQor
Cit2b2lkIENDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRM
YW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgY2FsbGJhY2so
aW5zdC5hcmdzWzFdLCBBcmc6OlVzZSwgQXJnOjpHUCk7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICAvLyBGb3IgdGhl
IHR5cGUsIHdlIGNhbiBqdXN0IHF1ZXJ5IHRoZSBhcmcncyB0eXBlLiBUaGUgYXJnIHdpbGwgaGF2
ZSBhIHR5cGUsIGJlY2F1c2Ugd2UKKyAgICAgICAgLy8gcmVxdWlyZSB0aGVzZSBhcmdzIHRvIGJl
IGFyZ3VtZW50IHJlZ2lzdGVycy4KKyAgICAgICAgY2FsbGJhY2soaW5zdC5hcmdzW2ldLCBBcmc6
OlVzZSwgaW5zdC5hcmdzW2ldLnR5cGUoKSk7CisgICAgfQorfQorCitib29sIENDYWxsU3BlY2lh
bDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgp
KSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgaWYgKGlzMzJCaXQoKSkKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6OkltbTY0Ogor
ICAgICAgICBpZiAoaXM2NEJpdCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgIGNhc2UgQXJnOjpBZGRyOgorICAgIGNh
c2UgQXJnOjpTdGFjazoKKyAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghaW5z
dC5hcmdzWzFdLmlzR1AoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoIWlu
c3QuYXJnc1tpXS5pc1JlZygpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAg
IGlmIChpbnN0LmFyZ3NbaV0gPT0gVG1wKHNjcmF0Y2hSZWdpc3RlcikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitib29sIENDYWxsU3Bl
Y2lhbDo6YWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIC8vIEFy
ZyAxIGNhbiBiZSBhIHN0YWNrIGFkZHJlc3MgZm9yIHN1cmUuCisgICAgaWYgKGFyZ0luZGV4ID09
IDEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBDQ2FsbFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lz
dGVyU2V0JikKK3sKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENDYWxsU3BlY2lhbDo6Z2VuZXJh
dGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JikKK3sK
KyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgor
ICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaml0Lm1vdmUoaW5zdC5hcmdzWzFdLmFzVHJ1
c3RlZEltbVB0cigpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBqaXQuY2FsbChzY3JhdGNo
UmVnaXN0ZXIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICBq
aXQuY2FsbChpbnN0LmFyZ3NbMV0uZ3ByKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFy
Zzo6QWRkcjoKKyAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzWzFdLmFzQWRkcmVzcygpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6
Okp1bXAoKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQmIENDYWxsU3BlY2lhbDo6ZXh0cmFDbG9i
YmVyZWRSZWdzKEluc3QmKQoreworICAgIHJldHVybiBtX2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3Zv
aWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1w
bChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiZnVuY3Rpb24gY2Fs
bCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiIpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ0NhbGxTcGVjaWFsX2gKKyNkZWZp
bmUgQWlyQ0NhbGxTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworLy8gVXNlIHRoaXMgc3BlY2lhbCBmb3IgY29uc3RydWN0aW5nIGEgQyBjYWxsLiBB
cmcgMCBpcyBvZiBjb3Vyc2UgYSBTcGVjaWFsIGFyZyB0aGF0IHJlZmVycyB0byB0aGUKKy8vIEND
YWxsU3BlY2lhbCBvYmplY3QuIEFyZyAxIGlzIHRoZSBjYWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4g
SW1tUHRyLCBhIHJlZ2lzdGVyLCBvciBhbiBhZGRyZXNzLiBUaGUKKy8vIHJlbWFpbmluZyBhcmdz
IGFyZSBqdXN0IHRoZSBzZXQgb2YgYXJndW1lbnQgcmVnaXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxs
LiBGb3IgYXJndW1lbnRzIHRoYXQgZ28gdG8KKy8vIHRoZSBzdGFjaywgeW91IGhhdmUgdG8gZG8g
dGhlIGdydW50IHdvcmsgb2YgZG9pbmcgdGhvc2Ugc3RhY2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUg
b25seSByZWFzb24gd2h5CisvLyB3ZSBzcGVjaWZ5IHRoZSBhcmd1bWVudCByZWdpc3RlcnMgYXMg
YXJndW1lbnRzIHRvIGEgY2FsbCBpcyBzbyB0aGF0IHRoZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4g
c2VlCisvLyB0aGF0IHRoZXkgZ2V0IHVzZWQgaGVyZS4gSXQgd291bGQgYmUgd3JvbmcgdG8gYXV0
b21hZ2ljYWxseSByZXBvcnQgYWxsIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBiZWluZworLy8gdXNl
ZCBiZWNhdXNlIGlmIHdlIGhhZCBhIGNhbGwgdGhhdCBkaWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRo
ZXknZCBhcHBlYXIgdG8gYmUgbGl2ZSB1bnRpbCBzb21lCisvLyBjbG9iYmVyIHBvaW50IG9yIHRo
ZSBwcm9sb2d1ZSwgd2hpY2hldmVyIGhhcHBlbmVkIHNvb25lci4KKworY2xhc3MgQ0NhbGxTcGVj
aWFsIDogcHVibGljIFNwZWNpYWwgeworcHVibGljOgorICAgIENDYWxsU3BlY2lhbCgpOworICAg
IH5DQ2FsbFNwZWNpYWwoKTsKKworICAgIC8vIFlvdSBjYW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIg
dG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1c3Qgc28gaGFwcGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIg
aXMgbm90CisgICAgLy8gdXNlZCBmb3IgYXJndW1lbnRzIGluIHRoZSBDIGNhbGxpbmcgY29udmVu
dGlvbi4gQnkgdGhlIHdheSwgdGhpcyBpcyB0aGUgb25seSB0aGluZyB0aGF0IGNhdXNlcworICAg
IC8vIHRoaXMgc3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0byBDIGNhbGxzLgorICAgIHN0YXRpYyBj
b25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BSSW5mbzo6bm9uQXJnR1BSMDsKKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPElu
c3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoSW5zdCYp
IG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4
KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJl
Z2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKElu
c3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOworICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpIG92ZXJyaWRlOworCisg
ICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZvaWQg
ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6Cisg
ICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRSZWdzOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFp
ckNDYWxsU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
b2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJD
Q2FsbFNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0NvZGU6OkNvZGUoKQor
ICAgIDogbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKK3sKK30KKworQ29kZTo6fkNvZGUoKQor
eworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5KQorewor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNCbG9jayhtX2Js
b2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3VsdCA9IGJsb2Nr
LmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsKKyAgICByZXR1
cm4gcmVzdWx0OworfQorCitTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBi
eXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCit7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3RhY2tTbG90KGJ5dGVTaXpl
LCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1ZSkpOworICAgIFN0YWNrU2xvdCogcmVz
dWx0ID0gc2xvdC5nZXQoKTsKKyAgICBtX3N0YWNrU2xvdHMuYXBwZW5kKFdURjo6bW92ZShzbG90
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3BlY2lhbCogQ29kZTo6YWRkU3BlY2lhbChz
dGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKK3sKKyAgICBTcGVjaWFsKiByZXN1bHQg
PSBzcGVjaWFsLmdldCgpOworICAgIG1fc3BlY2lhbHMuYXBwZW5kKFdURjo6bW92ZShzcGVjaWFs
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ0NhbGxTcGVjaWFsKiBDb2RlOjpjQ2FsbFNw
ZWNpYWwoKQoreworICAgIGlmICghbV9jQ2FsbFNwZWNpYWwpIHsKKyAgICAgICAgbV9jQ2FsbFNw
ZWNpYWwgPSBzdGF0aWNfY2FzdDxDQ2FsbFNwZWNpYWwqPigKKyAgICAgICAgICAgIGFkZFNwZWNp
YWwoc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbFNwZWNpYWw+KCkpKTsKKyAgICB9CisKKyAgICByZXR1
cm4gbV9jQ2FsbFNwZWNpYWw7Cit9CisKK3ZvaWQgQ29kZTo6cmVzZXRSZWFjaGFiaWxpdHkoKQor
eworICAgIEIzOjpyZXNldFJlYWNoYWJpbGl0eShtX2Jsb2Nrcyk7Cit9CisKK3ZvaWQgQ29kZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBEdW1wKGJsb2NrKSk7CisgICAgaWYg
KHN0YWNrU2xvdHMoKS5zaXplKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTdGFjayBzbG90czpc
biIpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IHN0YWNrU2xvdHMoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludCgiICAgICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiOiAiLCBkZWVwRHVt
cChzbG90KSwgIlxuIik7CisgICAgfQorICAgIGlmIChzcGVjaWFscygpLnNpemUoKSkgeworICAg
ICAgICBvdXQucHJpbnQoIlNwZWNpYWxzOlxuIik7CisgICAgICAgIGZvciAoU3BlY2lhbCogc3Bl
Y2lhbCA6IHNwZWNpYWxzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBwb2ludGVy
RHVtcChzcGVjaWFsKSwgIjogIiwgZGVlcER1bXAoc3BlY2lhbCksICJcbiIpOworICAgIH0KKyAg
ICBpZiAobV9mcmFtZVNpemUpCisgICAgICAgIG91dC5wcmludCgiRnJhbWUgc2l6ZTogIiwgbV9m
cmFtZVNpemUsICJcbiIpOworICAgIGlmIChtX2NhbGxBcmdBcmVhU2l6ZSkKKyAgICAgICAgb3V0
LnByaW50KCJDYWxsIGFyZyBhcmVhIHNpemU6ICIsIG1fY2FsbEFyZ0FyZWFTaXplLCAiXG4iKTsK
KyAgICBpZiAobV9jYWxsZWVTYXZlUmVnaXN0ZXJzLnNpemUoKSkKKyAgICAgICAgb3V0LnByaW50
KCJDYWxsZWUgc2F2ZXM6ICIsIG1fY2FsbGVlU2F2ZVJlZ2lzdGVycywgIlxuIik7Cit9CisKK3Vu
c2lnbmVkIENvZGU6OmZpbmRGaXJzdEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7
CisgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSgpICYmICFhdChpbmRleCkpCisgICAgICAgIGluZGV4
Kys7CisgICAgcmV0dXJuIGluZGV4OworfQorCit1bnNpZ25lZCBDb2RlOjpmaW5kTmV4dEJsb2Nr
SW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZpbmRGaXJzdEJsb2Nr
SW5kZXgoaW5kZXggKyAxKTsKK30KKworQmFzaWNCbG9jayogQ29kZTo6ZmluZE5leHRCbG9jayhC
YXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICByZXR1cm4gYXQoZmluZE5leHRCbG9ja0lu
ZGV4KGJsb2NrLT5pbmRleCgpKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQ29kZV9o
CisjZGVmaW5lIEFpckNvZGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyU3Rh
Y2tTbG90LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKKyNpbmNsdWRlICJT
dGFja0FsaWdubWVudC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ0NhbGxTcGVjaWFsOwor
CisvLyBUaGlzIGlzIGFuIElSIHRoYXQgaXMgdmVyeSBjbG9zZSB0byB0aGUgYmFyZSBtZXRhbC4g
SXQgcmVxdWlyZXMgYWJvdXQgNDB4IG1vcmUgYnl0ZXMgdGhhbiB0aGUKKy8vIGdlbmVyYXRlZCBt
YWNoaW5lIGNvZGUgLSBmb3IgZXhhbXBsZSBpZiB5b3UncmUgZ2VuZXJhdGluZyAxTUIgb2YgbWFj
aGluZSBjb2RlLCB5b3UgbmVlZCBhYm91dAorLy8gNDBNQiBvZiBBaXIuCisKK2NsYXNzIENvZGUg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvZGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIENvZGUoKTsKKyAgICB+Q29kZSgpOworCisgICAgQmFzaWNC
bG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworCisgICAgU3RhY2tTbG90
KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xv
dFZhbHVlKiA9IG51bGxwdHIpOworCisgICAgU3BlY2lhbCogYWRkU3BlY2lhbChzdGQ6OnVuaXF1
ZV9wdHI8U3BlY2lhbD4pOworCisgICAgLy8gVGhpcyBpcyB0aGUgc3BlY2lhbCB5b3UgbmVlZCB0
byBtYWtlIGEgQyBjYWxsIQorICAgIENDYWxsU3BlY2lhbCogY0NhbGxTcGVjaWFsKCk7CisKKyAg
ICBUbXAgbmV3VG1wKEFyZzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBl
KSB7CisgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAgICAgICAgIHJldHVybiBUbXA6OmdwVG1w
Rm9ySW5kZXgobV9udW1HUFRtcHMrKyk7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAg
ICAgIHJldHVybiBUbXA6OmZwVG1wRm9ySW5kZXgobV9udW1GUFRtcHMrKyk7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1UbXBzKEFyZzo6VHlwZSB0eXBlKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAgICAgICAg
IHJldHVybiBtX251bUdQVG1wczsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAg
cmV0dXJuIG1fbnVtRlBUbXBzOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWduZWQgY2Fs
bEFyZ0FyZWFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9jYWxsQXJnQXJlYVNpemU7IH0KKworICAg
IC8vIFlvdSBjYW4gY2FsbCB0aGlzIGJlZm9yZSBjb2RlIGdlbmVyYXRpb24gdG8gZm9yY2UgYSBt
aW5pbXVtIGNhbGwgYXJnIGFyZWEgc2l6ZS4KKyAgICB2b2lkIHJlcXVlc3RDYWxsQXJnQXJlYVNp
emUodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAgIG1fY2FsbEFyZ0FyZWFTaXplID0gc3Rk
OjptYXgoCisgICAgICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSwKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRC
eXRlcygpLCBzaXplKSkpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZyYW1lU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJhbWVTaXplOyB9CisKKyAgICAvLyBPbmx5IHBoYXNlcyB0aGF0IGRvIHN0
YWNrIGFsbG9jYXRpb24gYXJlIGFsbG93ZWQgdG8gc2V0IHRoaXMuIEN1cnJlbnRseSwgb25seQor
ICAgIC8vIEFpcjo6YWxsb2NhdGVTdGFjaygpIGRvZXMgdGhpcy4KKyAgICB2b2lkIHNldEZyYW1l
U2l6ZSh1bnNpZ25lZCBmcmFtZVNpemUpCisgICAgeworICAgICAgICBtX2ZyYW1lU2l6ZSA9IGZy
YW1lU2l6ZTsKKyAgICB9CisKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJl
Z2lzdGVycygpIHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsgfQorCisgICAgLy8gUmVj
b21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIGRlbGV0ZXMgdW5yZWFjaGFibGUgYmxvY2tzLgorICAg
IHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNp
emUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIC8vIEZpbmRz
IHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5k
ZXgnID49IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmRGaXJzdEJsb2NrSW5kZXgodW5zaWduZWQg
aW5kZXgpIGNvbnN0OworCisgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4JyBzdWNoIHRo
YXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPiBpbmRleC4KKyAgICB1bnNpZ25lZCBm
aW5kTmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0OworCisgICAgQmFzaWNCbG9j
ayogZmluZE5leHRCbG9jayhCYXNpY0Jsb2NrKikgY29uc3Q7CisKKyAgICBjbGFzcyBpdGVyYXRv
ciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fY29k
ZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAg
fQorCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvZGUmIGNvZGUsIHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICAgICAgOiBtX2NvZGUoJmNvZGUpCisgICAgICAgICAgICAsIG1faW5kZXgobV9jb2Rl
LT5maW5kRmlyc3RCbG9ja0luZGV4KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIG1fY29kZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBtX2NvZGUtPmZp
bmRGaXJzdEJsb2NrSW5kZXgobV9pbmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBp
dGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3Qg
Q29kZSogbV9jb2RlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIH07CisKKyAgICBp
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAg
IGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9
CisKKyAgICBjbGFzcyBTdGFja1Nsb3RzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAg
ICBTdGFja1Nsb3RzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQorICAgICAgICAgICAgOiBt
X2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNrU2xvdHMuc2l6ZSgpOyB9CisgICAgICAg
IFN0YWNrU2xvdCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0
YWNrU2xvdHNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3JbXSh1
bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xh
c3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisg
ICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICAgICAs
IG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aXRlcmF0b3IoY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVk
IGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAg
ICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3RhY2tTbG90
c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNv
bnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAgU3RhY2tTbG90c0NvbGxlY3Rpb24gc3Rh
Y2tTbG90cygpIGNvbnN0IHsgcmV0dXJuIFN0YWNrU2xvdHNDb2xsZWN0aW9uKCp0aGlzKTsgfQor
ICAgIAorICAgIGNsYXNzIFNwZWNpYWxzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAg
ICBTcGVjaWFsc0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAgIDogbV9j
b2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFscy5zaXplKCk7IH0KKyAgICAgICAgU3Bl
Y2lhbCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxz
W2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTcGVjaWFsKiBvcGVyYXRvcltdKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRv
ciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgw
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihj
b25zdCBTcGVjaWFsc0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgU3BlY2lhbCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXgg
PT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiogbV9j
b2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAw
KTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29kZSYgbV9jb2Rl
OworICAgIH07CisKKyAgICBTcGVjaWFsc0NvbGxlY3Rpb24gc3BlY2lhbHMoKSBjb25zdCB7IHJl
dHVybiBTcGVjaWFsc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAgCisgICAgLy8gVGhlIG5hbWUg
aGFzIHRvIGJlIGEgc3RyaW5nIGxpdGVyYWwsIHNpbmNlIHdlIGRvbid0IGRvIGFueSBtZW1vcnkg
bWFuYWdlbWVudCBmb3IgdGhlIHN0cmluZy4KKyAgICB2b2lkIHNldExhc3RQaGFzZU5hbWUoY29u
c3QgY2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIG1fbGFzdFBoYXNlTmFtZSA9IG5hbWU7Cisg
ICAgfQorCisgICAgY29uc3QgY2hhciogbGFzdFBoYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1f
bGFzdFBoYXNlTmFtZTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFz
aWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4+
IG1fc3BlY2lhbHM7CisgICAgQ0NhbGxTcGVjaWFsKiBtX2NDYWxsU3BlY2lhbCB7IG51bGxwdHIg
fTsKKyAgICB1bnNpZ25lZCBtX251bUdQVG1wcyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX251bUZQ
VG1wcyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2ZyYW1lU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25l
ZCBtX2NhbGxBcmdBcmVhU2l6ZSB7IDAgfTsKKyAgICBSZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2Nh
bGxlZVNhdmVSZWdpc3RlcnM7CisgICAgY29uc3QgY2hhciogbV9sYXN0UGhhc2VOYW1lOworfTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBBaXJG
cmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR2VuZXJpY0Zy
ZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVkQmxvY2s7CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBBaXJGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKyNpbmNsdWRlICJBaXJD
b2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJBaXJI
YW5kbGVDYWxsZWVTYXZlcy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0aGluZy5oIgorI2lu
Y2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJC
M0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBnZW5lcmF0ZShDb2RlJiBj
b2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQor
ICAgICAgICB2YWxpZGF0ZShjb2RlKTsKKworICAgIC8vIElmIHdlJ3JlIGRvaW5nIHN1cGVyIHZl
cmJvc2UgZHVtcGluZywgdGhlIHBoYXNlIHNjb3BlIG9mIGFueSBwaGFzZSB3aWxsIGFscmVhZHkg
ZG8gYSBkdW1wLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hvdWxkRHVtcElSQXRFYWNo
UGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOworICAgICAgICBk
YXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgcnVuIG91ciBv
cHRpbWl6YXRpb25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCisgICAgLy8gRklYTUU6IEFkZCBBaXIg
b3B0aW1pemF0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwNDU2CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHdvdWxkIGhhdmUgYSByZWFs
IHJlZ2lzdGVyIGFsbG9jYXRvci4gVGhlbiwgd2UgY291bGQgdXNlIHNwaWxsRXZlcnl0aGluZygp
CisgICAgLy8gaW4gcGxhY2Ugb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBvbmx5IGZvciB0ZXN0
aW5nLgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNDU3CisgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOworCisgICAgLy8gUHJpb3IgdG8g
dGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1h
a2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCisgICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlm
eSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCisgICAgaGFu
ZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CisKKyAgICAvLyBUaGlzIHR1cm5zIGFsbCBTdGFjayBhbmQg
Q2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNlIHRoZSBmcmFtZSBwb2ludGVyLiBJ
dCBkb2VzCisgICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxsb2NhdGluZyBzdGFjayBzbG90cy4g
SXQgc2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9wdGltYWwsIHNvIHdlCisgICAgLy8g
c2hvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2ZXJ5IG11Y2guCisgICAgYWxsb2Nh
dGVTdGFjayhjb2RlKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGhhdmUgYSBj
b2RlIGxheW91dCBvcHRpbWl6YXRpb24gaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc4CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIGxh
dGUgbGl2ZW5lc3MgYW5hbHlzaXMgb3ZlciByZWdpc3RlcnMgdG8gZmlsbCBpbiB0aGUKKyAgICAv
LyBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUxMQorCisgICAgaWYgKHNob3VsZFZhbGlkYXRl
SVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSk7CisKKyAgICAvLyBEbyBhIGZpbmFsIGR1bXAg
b2YgQWlyLiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBkbyB0aGlzIGV2ZW4gaWYgd2UgYXJlIGRvaW5n
IHBlci1waGFzZSBkdW1waW5nLAorICAgIC8vIHNpbmNlIHRoZSBmaW5hbCBnZW5lcmF0aW9uIGlz
IG5vdCBhIHBoYXNlLgorICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9n
KCJBaXIgYWZ0ZXIgIiwgY29kZS5sYXN0UGhhc2VOYW1lKCksICIsIGJlZm9yZSBnZW5lcmF0aW9u
OlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gQW5kIG5vdywg
d2UgZ2VuZXJhdGUgY29kZS4KKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIEdlbmVyYXRpb25D
b250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5jb2RlID0gJmNvZGU7CisgICAgSW5kZXhNYXA8
QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tMYWJlbHMoY29kZS5zaXplKCkp
OworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2Nr
SnVtcHMoY29kZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6
Okp1bXAganVtcCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAgICAgIGlmIChibG9ja0xhYmVs
c1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAubGlua1RvKGJsb2NrTGFiZWxz
W3RhcmdldF0sICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAgICB9OworCisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxvY2tKdW1wc1tibG9ja10ubGlu
aygmaml0KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQs
IGNvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5pc1NldCgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9wY29kZSA9PSBKdW1w
CisgICAgICAgICAgICAmJiBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkgPT0gY29kZS5maW5kTmV4
dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChibG9j
ay0+bGFzdCgpLm9wY29kZSA9PSBSZXQpIHsKKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBk
b24ndCByZXByZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBzbyB3ZSBu
ZWVkIHRvCisgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCisgICAgICAgICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAganVtcCA9IGJsb2NrLT5sYXN0KCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKQorICAgICAgICAgICAganVtcCA9IGluc3Qu
Z2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAgc3dpdGNoIChibG9jay0+bnVtU3VjY2Vz
c29ycygpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIEFTU0VSVCghanVtcC5pc1Nl
dCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBs
aW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3VjY2Vzc29y
QmxvY2soMCkpOworICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3JCbG9jaygxKSAhPSBj
b2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgICAgIGxpbmsoaml0Lmp1bXAo
KSwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvJiBsYXRl
UGF0aCA6IGNvbnRleHQubGF0ZVBhdGhzKQorICAgICAgICBsYXRlUGF0aC0+cnVuKGppdCwgY29u
dGV4dCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5lcmF0ZV9o
CisjZGVmaW5lIEFpckdlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0
IGhhc24ndCBoYWQgYW55IHN0YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlvbmFsbHkgaGFzbid0IGhh
ZCBhbnkKKy8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIGRvZXMgYm90aCBvZiB0aG9zZSB0aGlu
Z3MsIGFuZCB0aGVuIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUgZ2l2ZW4KKy8vIENDYWxs
SGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJhY2tzIGluIHRo
ZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzCisvLyBnZW5lcmF0aW5nLgordm9pZCBnZW5lcmF0ZShD
b2RlJiwgQ0NhbGxIZWxwZXJzJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisvLyBUaGlzIGlzIGdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9y
LnJiLgorI2luY2x1ZGUgIkFpck9wY29kZUdlbmVyYXRlZC5oIgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlv
bkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKyNkZWZpbmUgQWlyR2VuZXJhdGlvbkNvbnRl
eHRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3Ry
dWN0IEdlbmVyYXRpb25Db250ZXh0IHsKKyAgICB0eXBlZGVmIHZvaWQgTGF0ZVBhdGhGdW5jdGlv
bihDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworICAgIHR5cGVkZWYgU2hhcmVk
VGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF0
ZVBhdGg+PiBsYXRlUGF0aHM7CisgICAgQ29kZSogY29kZTsKK307CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
ckhhbmRsZUNhbGxlZVNhdmVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpclBo
YXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VT
Y29wZSBwaGFzZVNjb3BlKGNvZGUsICJoYW5kbGVDYWxsZWVTYXZlcyIpOworCisgICAgUmVnaXN0
ZXJTZXQgdXNlZENhbGxlZVNhdmVzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBp
bnN0LmZvckVhY2hUbXBGYXN0KAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gQXQgZmlyc3Qgd2UganVzdCByZWNvcmQgYWxsIHVzZWQgcmVn
cy4KKyAgICAgICAgICAgICAgICAgICAgdXNlZENhbGxlZVNhdmVzLnNldCh0bXAucmVnKCkpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHdlIGZp
bHRlciB0byByZWFsbHkgZ2V0IHRoZSBjYWxsZWUgc2F2ZXMuCisgICAgdXNlZENhbGxlZVNhdmVz
LmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKworICAgIGlmICgh
dXNlZENhbGxlZVNhdmVzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpID0gUmVnaXN0ZXJBdE9mZnNldExpc3Qo
dXNlZENhbGxlZVNhdmVzKTsKKworICAgIHNpemVfdCBieXRlU2l6ZSA9IDA7CisgICAgZm9yIChj
b25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygp
KQorICAgICAgICBieXRlU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4oLWVudHJ5
Lm9mZnNldCgpKSwgYnl0ZVNpemUpOworCisgICAgU3RhY2tTbG90KiBzYXZlc0FyZWEgPSBjb2Rl
LmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICAvLyBU
aGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUgYWxyZWFkeSBwaW5uZWQgYSBk
aWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCisgICAgLy8gYXJlYS4gQWxzbywgb3VyIHJ1bnRp
bWUgZG9lcyBub3QgcmVxdWlyZSB1cyB0byBwaW4gdGhlIHNhdmVzIGFyZWEuIE1heWJlIHdlIHNo
b3VsZG4ndCBwaW4gaXQ/CisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAoLWJ5dGVTaXpl
KTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRy
eSkgLT4gQXJnIHsKKyAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soc2F2ZXNBcmVhLCBlbnRyeS5v
ZmZzZXQoKSArIGJ5dGVTaXplKTsKKyAgICB9OworCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChjb2RlKTsKKyAgICAKKyAgICAvLyBGaXJzdCBpbnNlcnQgc2F2aW5nIGNvZGUgaW4gdGhl
IHByb2xvZ3VlLgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2Rl
LmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAor
ICAgICAgICAgICAgMCwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBj
b2RlWzBdLT5hdCgwKS5vcmlnaW4sCisgICAgICAgICAgICBUbXAoZW50cnkucmVnKCkpLCBhcmdG
b3IoZW50cnkpKTsKKyAgICB9CisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29kZVswXSk7CisK
KyAgICAvLyBOb3cgaW5zZXJ0IHJlc3RvcmUgY29kZSBhdCBlcGlsb2d1ZXMuCisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgSW5zdCYgbGFzdCA9IGJsb2NrLT5s
YXN0KCk7CisgICAgICAgIGlmIChsYXN0Lm9wY29kZSAhPSBSZXQpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29k
ZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnQoCisgICAgICAgICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIGVudHJ5LnJlZygpLmlzR1BS
KCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgbGFzdC5vcmlnaW4sCisgICAgICAgICAgICAgICAgYXJn
Rm9yKGVudHJ5KSwgVG1wKGVudHJ5LnJlZygpKSk7CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNh
dmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRsZUNhbGxlZVNhdmVz
X2gKKyNkZWZpbmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFz
cyBDb2RlOworCisvLyBUaGlzIHBoYXNlIGlkZW50aWZpZXMgY2FsbGVlLXNhdmUgcmVnaXN0ZXJz
IGFuZCBhZGRzIGNvZGUgdG8gc2F2ZS9yZXN0b3JlIHRoZW0gaW4gdGhlCisvLyBwcm9sb2d1ZS9l
cGlsb2d1ZSB0byB0aGUgY29kZS4gSXQncyBhIG1hbmRhdG9yeSBwaGFzZS4KKworLy8gRklYTUU6
IEl0IHdvdWxkIGJlIGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3RpdmUgd2l0aCB0aGUg
QWlyIGNsaWVudCBhbmQgYWxzbyBtb3JlCisvLyBwb3dlcmZ1bC4KKy8vIFdlIHNob3VsZCBoYXZl
IHNocmluayB3cmFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDQ1OAorLy8gV2Ugc2hvdWxkIG1ha2UgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBjbGllbnQ6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTkKKwordm9pZCBo
YW5kbGVDYWxsZWVTYXZlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJIYW5kbGVDYWxs
ZWVTYXZlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0
aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5t
X2luc3RzLCBtX2luc2VydGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJJbnNlcnRpb25TZXRfaAorI2RlZmluZSBBaXJJbnNlcnRpb25T
ZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNs
dWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxv
Y2s7CitjbGFzcyBDb2RlOworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPEluc3Q+IEluc2VydGlv
bjsKKworY2xhc3MgSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBJbnNlcnRpb25TZXQoQ29k
ZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgQ29k
ZSYgY29kZSgpIHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYgaW5zZXJ0aW9uKQorICAgIHsKKyAgICAgICAg
bV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oaW5zZXJ0aW9uKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGluc2VydEluc3Qoc2l6ZV90
IGluZGV4LCBJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVuZEluc2VydGlvbihJbnNl
cnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBpbnNlcnQoc2l6ZV90
IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBpbnNlcnRJ
bnN0KGluZGV4LCBJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsK
KyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitwcml2YXRlOgorICAg
IENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
SW5zdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChvcGNv
ZGUsICIgIiwgbGlzdER1bXAoYXJncykpOworICAgIGlmIChvcmlnaW4pIHsKKyAgICAgICAgaWYg
KGFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOworICAgICAgICBvdXQu
cHJpbnQoKm9yaWdpbik7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3Rf
aAorI2RlZmluZSBBaXJJbnN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJBcmcuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKK2NsYXNzIFJlZ2lz
dGVyU2V0OworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFp
ciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKKworc3RydWN0IEluc3QgeworcHVibGlj
OgorICAgIHR5cGVkZWYgVmVjdG9yPEFyZywgMz4gQXJnTGlzdDsKKworICAgIEluc3QoKQorICAg
ICAgICA6IG9yaWdpbihudWxscHRyKQorICAgICAgICAsIG9wY29kZShOb3ApCisgICAgeworICAg
IH0KKyAgICAKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgICAg
IDogb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEluc3QoT3Bj
b2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICAgICAgOiBhcmdzeyBhcmcsIGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwgb3JpZ2lu
KG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJ
bnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50
cykKKyAgICAgICAgOiBhcmdzKGFyZ3VtZW50cykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQor
ICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2Rl
IG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnTGlzdCYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBh
cmdzKFdURjo6bW92ZShhcmd1bWVudHMpKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAg
ICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRo
ZXNlIGZ1bmN0b3JzIGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1
c2UgdGhlbSBmb3IgdGhpbmdzIHRoYXQKKyAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBi
ZSBlZGl0ZWQ7IGlmIHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4g
eW91J3JlCisgICAgLy8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCisKKyAgICAvLyBUaGlzIG9u
bHkgd2Fsa3MgdGhvc2UgVG1wcyB0aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCwgYW5kIGl0
IGRvZXNuJ3QgdGVsbCB5b3UgdGhlaXIgcm9sZQorICAgIC8vIG9yIHR5cGUuCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKEFyZyYgYXJnIDogYXJncykKKyAgICAg
ICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0eXBlZGVm
IHZvaWQgRWFjaEFyZ0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJnOjpUeXBlKTsKKyAgICAK
KyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUpLiBUaGlzIGZ1
bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEFyZyhjb25z
dCBGdW5jdG9yJik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0bXAsIHJvbGUs
IHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNo
VG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JFYWNoQXJnKAor
ICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBl
KSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlwZSwgZnVuY3Rvcik7
CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGluZyBjYW4gYmUgZWl0aGVyIEFy
ZyBvciBUbXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9ja3Mgc29tZSBl
eHRyYSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0OworCisgICAg
Ly8gUmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3Bl
cmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFDbG9iYmVyZWRS
ZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIGNvbnN0
IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVzZSB0aGlzIHRv
IHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVz
dCBiZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9y
dFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUu
CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7CisKKyAg
ICAvLyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9ybXMgcmlnaHQg
bm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dl
bmVyYXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBBc3N1bWluZyB0
aGlzIGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdpbGwgaXQgc3Rp
bGwgYmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1dCBhbiBBZGRy
IHJlZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFyZywgb2YgY291
cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0aGlzOiBpdCB3
YWxrcyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNwaWxsaW5nOwor
ICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYgaXQgY2FuIHJl
cGxhY2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAgIC8vIGZpbmRz
IGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNoVG1wIHRvIGRv
IGEgcmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlz
IGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBhZG1pdHNT
dGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21lIGNvZGUgZm9y
IHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIgYmFja2VuZC4g
SWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUganVtcCB0aGF0
IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRoZSAiZWxzZSIK
KyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdl
bmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVyczo6SnVtcCBn
ZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFyZ3M7CisgICAgVmFsdWUq
IG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLgorICAg
IE9wY29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gKKyNkZWZpbmUg
QWlySW5zdElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpcklu
c3QuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwu
aCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxUbXA+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVh
Y2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGlu
c3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9y
RWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2
b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgSW5zdDo6Zm9yRWFjaChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JFYWNoKCp0aGlz
LCBmdW5jdG9yKTsKK30KKworaW5saW5lIGJvb2wgSW5zdDo6aGFzU3BlY2lhbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGFyZ3Muc2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7Cit9CisKK2lu
bGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sKKyAg
ICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4
dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEluc3Q6OnJlcG9ydFVz
ZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgQVNT
RVJUKGhhc1NwZWNpYWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdp
c3RlcnMoKnRoaXMsIHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1NoaWZ0VmFs
aWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAg
IHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGluc3QpOworICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9ICAgCisK
K2lubGluZSBib29sIGlzTHNoaWZ0MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJl
dHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0SW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVu
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVzc19oCisjZGVm
aW5lIEFpckxpdmVuZXNzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJC
YXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhT
ZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CisvLyBZb3UgY2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVyIEFyZydzLiBJ
ZiB5b3UgY29tcHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNrIGxpdmVuZXNz
IGFuZCB0bXAgbGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNzIExpdmVu
ZXNzIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsKKyAgICAgICAg
bV9saXZlQXRIZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2ZUF0VGFpbC5y
ZXNpemUoY29kZS5zaXplKCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IHNlZW47
CisKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNoYW5nZWQp
IHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgZm9yIChzaXpl
X3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOworICAgICAgICAg
ICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCisg
ICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgp
KTsKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1fbGl2
ZUF0SGVhZFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
cHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAg
ICBsb2NhbENhbGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5kKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdID0gbG9j
YWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKwor
ICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107CisgICAgfQor
CisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJzZS4KKyAgICBj
bGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxjKExpdmVuZXNz
JiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1fbGl2ZShsaXZl
bmVzcy5saXZlQXRUYWlsKGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xpdmU7IH0KKyAg
ICAgICAgSGFzaFNldDxUaGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6bW92ZShtX2xp
dmUpOyB9CisKKyAgICAgICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFj
aDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVt
b3ZlKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5leHQgaGFu
ZGxlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5oYXNTcGVjaWFs
KCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2go
CisgICAgICAgICAgICAgICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9saXZlLnJlbW92ZShUaGluZyhUbXAocmVnKSkpOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmlu
YWxseSBoYW5kbGUgdXNlJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAg
ICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNl
KHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBIYXNoU2V0
PFRoaW5nPiBtX2xpdmU7CisgICAgfTsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8QmFz
aWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRUYWlsOworfTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
OCBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBTeWxsYWJ1czoK
KyMKKyMgUm9sZXMgYW5kIHR5cGVzOgorIyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJhbC1wdXJwb3Nl
IHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVn
aXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVyYWwtcHVycG9z
ZSByZWdpc3RlciBvciB2YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3Ig
dmFsdWUKKyMgRDpGID0+IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkYg
PT4gdXNlIGFuZCBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIworIyBBcmd1bWVu
dCBraW5kczoKKyMgVG1wID0+IHRlbXBvcmFyeSBvciByZWdpc3RlcgorIyBJbW0gPT4gMzItYml0
IGltbWVkaWF0ZSBpbnQKKyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0CisjIEFkZHIgPT4gYWRkcmVz
cyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJhc2VJbmRleCBhZGRy
ZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhlIHBhcnNlciB2aWV3cyB0aGVz
ZSB0aGluZ3MgYXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0aGF0IHRoZXkgZmFsbCBpbnRv
IHR3byBkaXN0aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28sIGFsdGhvdWdoIHRoaXMgZmls
ZSB1c2VzIGEgcGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwgbm9uZSBvZiB0aGUgd2hpdGVz
cGFjZSBvcgorIyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBwYXJzZXIuIEZv
ciBleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQyIFU6RywgVUQ6RiBJbW0sIFRt
cCBBZGRyLCBUbXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQga25vdyB0aGF0IHRoaXMgaXMg
dGhlIHNhbWUgYXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAgICAgSW1tLCBUbXAKKyMgICAg
IEFkZHIsIFRtcAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1Y3Rpb24gdGhhdCB1c2VzIGEg
R1BSIG9yIGFuIGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBhIGZsb2F0IHJlZ2lzdGVyLgor
CisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBsZWFkaW5nIGNhcGl0YWwgKEFk
ZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1ibGVyCisjIEFQSSB0aGF0IGhh
cyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitOb3AKKworQWRkMzIgVTpHLCBVRDpH
CisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAgIEFkZHIsIFRt
cAorICAgIFRtcCwgQWRkcgorCitBZGQzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRt
cAorCitBZGQ2NCBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIElt
bSwgVG1wCisgICAgQWRkciwgVG1wCisKK0FkZDY0IFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRt
cCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAg
ICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworTHNoaWZ0MzIgVTpH
LCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisg
ICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKworIyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBv
dmVyIHRoZSBmdWxsIHJlZ2lzdGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQt
Yml0IGRlcGVuZGluZyBvbgorIyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0
aGF0IHRoaXMgaXMgYSBnb29kIHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZl
IGEKKyMgTW92ZTY0IGluc3RydWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVh
ZHkgaGF2ZSB0aGlzIG5vdGlvbiBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxseQorIyBtZWFucyBt
b3ZlUHRyLgorTW92ZSBVOkcsIEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJ
bW02NCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWRQdHIgIyBUaGlzIG1lYW5zIHRoYXQgIk1v
dmUgQWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAg
ICBJbmRleCwgVG1wIGFzIGxvYWRQdHIKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVQdHIKKyAgICBU
bXAsIEluZGV4IGFzIHN0b3JlUHRyCisKK01vdmUzMiBVOkcsIEQ6RworICAgIFRtcCwgVG1wIGFz
IHplcm9FeHRlbmQzMlRvUHRyCisgICAgQWRkciwgVG1wIGFzIGxvYWQzMgorICAgIEluZGV4LCBU
bXAgYXMgbG9hZDMyCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlMzIKKyAgICBUbXAsIEluZGV4IGFz
IHN0b3JlMzIKKworTW92ZURvdWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwg
VG1wIGFzIGxvYWREb3VibGUKKyAgICBJbmRleCwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAs
IEFkZHIgYXMgc3RvcmVEb3VibGUKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlRG91YmxlCisKK01v
dmU2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1wLCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpG
LCBEOkcKKyAgICBUbXAsIFRtcAorCitCcmFuY2hBZGQzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNo
CisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0Nv
bmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIs
IFRtcAorCitCcmFuY2hNdWwzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwg
VG1wLCBUbXAKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoU3ViMzIgVTpHLCBVOkcs
IFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBU
bXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBS
ZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBS
ZXNDb25kLCBUbXAKKworSnVtcCAvYnJhbmNoCisKK1JldCAvdGVybWluYWwKKworQnJlYWtwb2lu
dCAvdGVybWluYWwKKworIyBBaXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gn
cyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQs
CisjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9wZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29w
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyUGhhc2VTY29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFp
ckNvZGUuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworUGhh
c2VTY29wZTo6UGhhc2VTY29wZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiBuYW1lKQorICAgIDog
bV9jb2RlKGNvZGUpCisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVtcElS
QXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgIiwgY29kZS5sYXN0
UGhhc2VOYW1lKCksICIsIGJlZm9yZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2co
Y29kZSk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAg
ICAgIG1fZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhjb2RlKTsKK30KKworUGhhc2VTY29wZTo6flBo
YXNlU2NvcGUoKQoreworICAgIG1fY29kZS5zZXRMYXN0UGhhc2VOYW1lKG1fbmFtZSk7CisgICAg
aWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShtX2Nv
ZGUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyUGhhc2VTY29wZV9oCisjZGVmaW5lIEFpclBoYXNlU2NvcGVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1
ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNj
b3BlKENvZGUmLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlz
IGRvZXMgdmFsaWRhdGlvbgorCitwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25z
dCBjaGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQWlyUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclJl
Z2lzdGVyUHJpb3JpdHkuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJSZWdp
c3RlclNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAg
ICBzdGF0aWMgVmVjdG9yPEdQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2Zs
YWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10g
eworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxHUFJSZWc+KCk7CisgICAgICAgICAg
ICBSZWdpc3RlclNldCBhbGwgPSBSZWdpc3RlclNldDo6YWxsR1BScygpOworICAgICAgICAgICAg
YWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAg
YWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7Cisg
ICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNh
dmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAg
IFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0
KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkp
OworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAg
ICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVT
YXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVn
LmdwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpy
ZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkK
K3sKKyAgICBzdGF0aWMgVmVjdG9yPEZQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAg
ICAgW10geworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7CisgICAg
ICAgICAgICBSZWdpc3RlclNldCBhbGwgPSBSZWdpc3RlclNldDo6YWxsRlBScygpOworICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVn
aXN0ZXJzKCk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0g
KFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcp
KQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAg
ICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAg
ICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZS5n
ZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5mcHIo
KSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0
OworfQorCitjb25zdCBWZWN0b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUg
dHlwZSkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPFJlZz4qIHJlc3VsdFtBcmc6Om51bVR5cGVzXTsK
KyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAg
ICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdID0g
bmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBncHJzSW5Q
cmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdLT5hcHBlbmQo
UmVnKHJlZykpOworICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdID0gbmV3IFZlY3RvcjxSZWc+
KCk7CisgICAgICAgICAgICBmb3IgKEZQUlJlZyByZWcgOiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkp
CisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6RlBdLT5hcHBlbmQoUmVnKHJlZykpOworICAg
ICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdFt0eXBlXTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lzdGVyUHJpb3Jp
dHlfaAorI2RlZmluZSBBaXJSZWdpc3RlclByaW9yaXR5X2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAi
R1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3By
c0luUHJpb3JpdHlPcmRlcigpOworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5
T3JkZXIoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4gc3RydWN0IFJlZ2lzdGVyc0luUHJp
b3JpdHlPcmRlcjsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxH
UFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEdQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsg
cmV0dXJuIGdwcnNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IFJl
Z2lzdGVyc0luUHJpb3JpdHlPcmRlcjxGUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEZQUlJl
Zz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGZwcnNJblByaW9yaXR5T3JkZXIoKTsgfQor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4KK2NvbnN0IFZlY3Rvcjx0eXBlbmFtZSBCYW5r
OjpSZWdpc3RlclR5cGU+JiByZWdzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICByZXR1cm4gUmVn
aXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEJhbms+OjppblByaW9yaXR5T3JkZXIoKTsKK30KKworY29u
c3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBjaGFyKiBj
b25zdCBTcGVjaWFsOjpkdW1wUHJlZml4ID0gIiYiOworCitTcGVjaWFsOjpTcGVjaWFsKCkKKyAg
ICA6IG1faW5kZXgoVUlOVF9NQVgpCit7Cit9CisKK1NwZWNpYWw6On5TcGVjaWFsKCkKK3sKK30K
KworQ1N0cmluZyBTcGVjaWFsOjpuYW1lKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQcmludFN0cmVh
bSBvdXQ7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOwor
fQorCit2b2lkIFNwZWNpYWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoZHVtcFByZWZpeCk7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICBpZiAobV9pbmRl
eCAhPSBVSU5UX01BWCkKKyAgICAgICAgb3V0LnByaW50KG1faW5kZXgpOworfQorCit2b2lkIFNw
ZWNpYWw6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCp0aGlzLCAiOiAiKTsKKyAgICBkZWVwRHVtcEltcGwob3V0KTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJTcGVjaWFsX2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3Rm
L1Njb3BlZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJh
dGlvbkNvbnRleHQ7CisKK2NsYXNzIFNwZWNpYWwgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxF
KFNwZWNpYWwpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworICAgIAorICAgIFNwZWNpYWwoKTsK
KyAgICB2aXJ0dWFsIH5TcGVjaWFsKCk7CisKKyAgICBDU3RyaW5nIG5hbWUoKSBjb25zdDsKKwor
ICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5z
dDo6RWFjaEFyZ0NhbGxiYWNrPiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZChJbnN0
JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJn
SW5kZXgpID0gMDsKKworICAgIC8vIFRoaXMgZ2V0cyBjYWxsZWQgb24gZm9yIGVhY2ggSW5zdCB0
aGF0IHVzZXMgdGhpcyBTcGVjaWFsLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvCisgICAg
Ly8gZ3VhcmFudGVlIHRoYXQgYSBTcGVjaWFsIGdldHMgdXNlZCBmcm9tIGp1c3Qgb25lIEluc3Qs
IGJlY2F1c2UgQWlyIG1pZ2h0IHRhaWxkdXAgbGF0ZS4gU28sCisgICAgLy8gaWYgeW91IHdhbnQg
dG8gcGFzcyB0aGlzIGluZm9ybWF0aW9uIGRvd24gdG8gZ2VuZXJhdGUoKSwgdGhlbiB5b3UgaGF2
ZSB0byBlaXRoZXI6CisgICAgLy8KKyAgICAvLyAxKSBHZW5lcmF0ZSBBaXIgdGhhdCBzdGFydHMg
d2l0aCBhIHNlcGFyYXRlIFNwZWNpYWwgcGVyIFBhdGNoIEluc3QsIGFuZCB0aGVuIG1lcmdlCisg
ICAgLy8gICAgdXNlZFJlZ2lzdGVyIHNldHMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGdyZWF0LCBi
dXQgaXQgb3B0aW1pemVzIGZvciB0aGUgY29tbW9uIGNhc2UgdGhhdAorICAgIC8vICAgIEFpciBk
aWRuJ3QgZHVwbGljYXRlIGNvZGUgb3IgdGhhdCBzdWNoIGR1cGxpY2F0aW9uIGRpZG4ndCBjYXVz
ZSBhbnkgaW50ZXJlc3RpbmcgY2hhbmdlcyB0bworICAgIC8vICAgIHJlZ2lzdGVyIGFzc2lnbm1l
bnQuCisgICAgLy8KKyAgICAvLyAyKSBIYXZlIHRoZSBTcGVjaWFsIG1haW50YWluIGEgSGFzaE1h
cDxJbnN0KiwgUmVnaXN0ZXJTZXQ+LiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGFuYWx5c2lzCisg
ICAgLy8gICAgdGhhdCBmZWVkcyBpbnRvIHRoaXMgY2FsbCBpcyBwZXJmb3JtZWQganVzdCBiZWZv
cmUgY29kZSBnZW5lcmF0aW9uIGFuZCB0aGVyZSBpcyBubyB3YXkKKyAgICAvLyAgICBmb3IgdGhl
IFZlY3Rvcjw+J3MgdGhhdCBjb250YWluIHRoZSBJbnN0cyB0byBiZSByZWFsbG9jYXRlZC4gVGhp
cyBhbGxvd3MgZ2VuZXJhdGUoKSB0bworICAgIC8vICAgIGNvbnN1bHQgdGhlIEhhc2hNYXAuCisg
ICAgLy8KKyAgICAvLyAzKSBIeWJyaWQ6IHlvdSBjb3VsZCB1c2UgKDEpIGFuZCBmaXJlIHVwIGEg
SGFzaE1hcCBpZiB5b3Ugc2VlIG11bHRpcGxlIGNhbGxzLgorICAgIC8vCisgICAgLy8gTm90ZSB0
aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIHJlbHkgb24gcmVwb3J0VXNlZFJlZ2lzdGVycygpIGJl
aW5nIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlcgorICAgIC8vIGFzIGdlbmVyYXRlKCkuIElmIHdl
IGNvdWxkIHJlbHkgb24gdGhhdCwgdGhlbiB3ZSBjb3VsZCBqdXN0IGhhdmUgZWFjaCBTcGVjaWFs
IGluc3RhbmNlCisgICAgLy8gbWFpbnRhaW4gYSBWZWN0b3Igb2YgUmVnaXN0ZXJTZXQncyBhbmQg
dGhlbiBwcm9jZXNzIHRoYXQgdmVjdG9yIGluIHRoZSByaWdodCBvcmRlciBpbgorICAgIC8vIGdl
bmVyYXRlKCkuIEJ1dCwgdGhlIG9yZGVyaW5nIGRpZmZlcmVuY2UgaXMgdW5saWtlbHkgdG8gY2hh
bmdlIHNpbmNlIGl0IHdvdWxkIGhhcm0gdGhlCisgICAgLy8gcGVyZm9ybWFuY2Ugb2YgdGhlIGxp
dmVuZXNzIGFuYWx5c2lzLgorICAgIC8vCisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyAoMSkgZm9y
IEIzIHN0YWNrbWFwcy4KKyAgICB2aXJ0dWFsIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0
JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSA9IDA7CisgICAgCisgICAgdmlydHVhbCBDQ2FsbEhlbHBl
cnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0
JikgPSAwOworCisgICAgdmlydHVhbCBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRS
ZWdzKEluc3QmKSA9IDA7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAg
ICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2
aXJ0dWFsIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICB1
bnNpZ25lZCBtX2luZGV4OworfTsKKworY2xhc3MgRGVlcFNwZWNpYWxEdW1wIHsKK3B1YmxpYzoK
KyAgICBEZWVwU3BlY2lhbER1bXAoY29uc3QgU3BlY2lhbCogc3BlY2lhbCkKKyAgICAgICAgOiBt
X3NwZWNpYWwoc3BlY2lhbCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zcGVjaWFsKQorICAgICAgICAg
ICAgbV9zcGVjaWFsLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBv
dXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBTcGVjaWFs
KiBtX3NwZWNpYWw7Cit9OworCitpbmxpbmUgRGVlcFNwZWNpYWxEdW1wIGRlZXBEdW1wKGNvbnN0
IFNwZWNpYWwqIHNwZWNpYWwpCit7CisgICAgcmV0dXJuIERlZXBTcGVjaWFsRHVtcChzcGVjaWFs
KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAi
QWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFp
clBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVk
ZSAiQjNJbmRleE1hcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCit7CisgICAgUGhh
c2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJzcGlsbEV2ZXJ5dGhpbmciKTsKKworICAgIC8vIFdl
IHdhbnQgdG8ga25vdyB0aGUgc2V0IG9mIHJlZ2lzdGVycyB1c2VkIGF0IGV2ZXJ5IHBvaW50IGlu
IGV2ZXJ5IGJhc2ljIGJsb2NrLgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxSZWdp
c3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29kZS5zaXplKCkpOworICAgIExpdmVuZXNzPFRtcD4g
bGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAg
ICAgICAgTGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2sp
OworICAgICAgICB1c2VkUmVnaXN0ZXJzW2Jsb2NrXS5yZXNpemUoYmxvY2stPnNpemUoKSArIDEp
OworCisgICAgICAgIGF1dG8gc2V0VXNlZFJlZ2lzdGVycyA9IFsmXSAodW5zaWduZWQgaW5kZXgp
IHsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXQgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtp
bmRleF07CisgICAgICAgICAgICBmb3IgKFRtcCB0bXAgOiBsb2NhbENhbGMubGl2ZSgpKSB7Cisg
ICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBzZXQu
c2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgc2V0
VXNlZFJlZ2lzdGVycyhibG9jay0+c2l6ZSgpKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodW5z
aWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAg
ICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAg
ICBzZXRVc2VkUmVnaXN0ZXJzKGluc3RJbmRleCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgorICAgIFZlY3RvcjxTdGFja1Ns
b3QqPiBhbGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOworICAgIGZvciAodW5zaWduZWQgdHlw
ZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgQXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgpIHsKKyAg
ICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90c1t0eXBl
SW5kZXhdOworICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6VHlwZT4o
dHlwZUluZGV4KTsKKyAgICAgICAgc3RhY2tTbG90cy5yZXNpemUoY29kZS5udW1UbXBzKHR5cGUp
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNvZGUubnVtVG1wcyh0eXBlKTsg
dG1wSW5kZXgtLTspCisgICAgICAgICAgICBzdGFja1Nsb3RzW3RtcEluZGV4XSA9IGNvZGUuYWRk
U3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgfQorCisgICAgSW5z
ZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRl
eCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNl
dCYgc2V0QmVmb3JlID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4XTsKKyAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0JiBzZXRBZnRlciA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRl
eCArIDFdOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOwor
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0
bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgICAg
ICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBhbGxTdGFja1Nsb3RzW3R5
cGVdW3RtcC50bXBJbmRleCgpXTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFyZzo6
c3RhY2soc3RhY2tTbG90KTsKKworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGZpZ3Vy
ZSBvdXQgYSByZWdpc3RlciB0byB1c2UuIEhvdyB3ZSBkbyB0aGF0IGRlcGVuZHMgb24gdGhlIHJv
bGUuCisgICAgICAgICAgICAgICAgICAgIFJlZyBjaG9zZW5SZWc7CisgICAgICAgICAgICAgICAg
ICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgor
ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRl
cih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdl
dChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQo
cmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkRlZjoKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlw
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEFmdGVyLmdldChyZWcp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlRGVmOgorICAgICAgICAg
ICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpICYm
ICFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
ZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVm
b3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcg
PSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAgICAg
ICAgdG1wID0gVG1wKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1v
dmUgPSB0eXBlID09IEFyZzo6R1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKworICAgICAgICAgICAg
ICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
aW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5k
ZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAg
IGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0
aGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGlsbEV2ZXJ5dGhpbmdf
aAorI2RlZmluZSBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBD
b2RlOworCisvLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRlc3RpbmcuIEl0IGJlaGF2ZXMgbGlrZSBh
IHJlZ2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2UgdGhhdCBpdAorLy8gZWxpbWluYXRlcyB0
ZW1wb3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBhbHdh
eXMgc3BpbGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmllcy4gVGhlIHJlc3VsdGluZyBjb2RlIGlzIGdv
aW5nIHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMgcGhhc2UgaXMgZ3JlYXQgaWYgeW91Cisv
LyB0aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuIFlv
dSBjYW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhpcworLy8gcGhhc2UgaW5zdGVhZCBvZiB0
aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8vIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGlz
IHBoYXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBvc3NpYmxlLCBpdCdzIG5vdCBldmVuIHdy
aXR0ZW4gaW4gYQorLy8gcGFydGljdWxhcmx5IGVmZmljaWVudCB3YXkuIFNvLCBkb24ndCBnZXQg
YW55IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2UgdG8gcmVkdWNlIGNvbXBpbGVyCisvLyBs
YXRlbmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQsIHlvdSBzaG91bGQgY29tZSB1cCB3aXRo
IGEgY2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVzaW5nCisvLyB0aGlzIHNpbGx5IHRoaW5n
LgorCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJT
cGlsbEV2ZXJ5dGhpbmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clN0YWNrU2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFN0YWNrU2xvdDo6c2V0T2Zmc2V0
RnJvbUZQKGludHB0cl90IHZhbHVlKQoreworICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7Cisg
ICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG1fdmFsdWUtPm1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7
Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJzdGFjayIsIG1faW5kZXgpOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZGVl
cER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXpl
ID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIs
IGtpbmQgPSAiLCBtX2tpbmQpOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBvdXQucHJpbnQo
IiwgdmFsdWUgPSAiLCAqbV92YWx1ZSk7Cit9CisKK1N0YWNrU2xvdDo6U3RhY2tTbG90KHVuc2ln
bmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Ns
b3RWYWx1ZSogdmFsdWUpCisgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICwgbV9pbmRl
eChpbmRleCkKKyAgICAsIG1fb2Zmc2V0RnJvbUZQKHZhbHVlID8gdmFsdWUtPm9mZnNldEZyb21G
UCgpIDogMCkKKyAgICAsIG1fa2luZChraW5kKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAg
ICBBU1NFUlQoYnl0ZVNpemUpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEx
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEFpclN0YWNrU2xvdF9oCisjZGVmaW5lIEFpclN0YWNrU2xvdF9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFN0YWNrU2xvdFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3RhY2tTbG90IHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGFja1Nsb3QpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1
cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJu
IG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsg
fQorCisgICAgdW5zaWduZWQgYWxpZ25tZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChi
eXRlU2l6ZSgpIDw9IDEpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKGJ5dGVT
aXplKCkgPD0gMikKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBpZiAoYnl0ZVNpemUo
KSA8PSA0KQorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAgIHJldHVybiA4OworICAgIH0K
KworICAgIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0K
KworICAgIC8vIFplcm8gbWVhbnMgdGhhdCBpdCdzIG5vdCB5ZXQgYXNzaWduZWQuCisgICAgaW50
cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKwor
ICAgIC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkganVzdCBiZSBjYWxsZWQgZnJvbSBwaGFzZXMgdGhh
dCBkbyBzdGFjayBhbGxvY2F0aW9uLiBCdXQgeW91IGNhbgorICAgIC8vIHRvdGFsbHkgZm9yY2Ug
YSBzdGFjayBzbG90IHRvIGxhbmQgYXQgc29tZSBvZmZzZXQuCisgICAgdm9pZCBzZXRPZmZzZXRG
cm9tRlAoaW50cHRyX3QpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBDb2RlOworCisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNp
Z25lZCBpbmRleCwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgaW50cHRyX3Qg
bV9vZmZzZXRGcm9tRlA7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgU3RhY2tTbG90
VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7CitwdWJsaWM6
CisgICAgRGVlcFN0YWNrU2xvdER1bXAoY29uc3QgU3RhY2tTbG90KiBzbG90KQorICAgICAgICA6
IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3QpCisgICAgICAgICAgICBtX3Ns
b3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgi
PG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFN0YWNrU2xvdCogbV9zbG90
OworfTsKKworaW5saW5lIERlZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1wKGNvbnN0IFN0YWNrU2xv
dCogc2xvdCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAoc2xvdCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJTdGFja1Nsb3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFRtcDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAg
b3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChp
c1JlZygpKSB7CisgICAgICAgIG91dC5wcmludChyZWcoKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoaXNHUCgpKSB7CisgICAgICAgIG91dC5wcmludCgiJXRtcCIsIGdwVG1w
SW5kZXgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIiVmdG1w
IiwgZnBUbXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJUbXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBfaAorI2RlZmlu
ZSBBaXJUbXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkZQUkluZm8uaCIK
KyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL0hh
c2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCitjbGFzcyBBcmc7CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgYSByZWdp
c3Rlci4gSXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBvciBGUFIuIEl0IGNhbiBh
bHNvCisvLyBiZSB1c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lzdGVyIChpLmUu
IGEgdGVtcG9yYXJ5KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1c2UKKy8vIGRlbGliZXJh
dGVseSB0ZXJzZSBuYW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGlzIG5hbWUgYSBs
b3QuCisKK2NsYXNzIFRtcCB7CitwdWJsaWM6CisgICAgVG1wKCkKKyAgICAgICAgOiBtX3ZhbHVl
KDApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChSZWcgcmVnKQorICAgIHsKKyAg
ICAgICAgaWYgKHJlZykgeworICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAg
ICAgICAgIG1fdmFsdWUgPSBlbmNvZGVHUFIocmVnLmdwcigpKTsKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJlZy5mcHIoKSk7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgbV92YWx1ZSA9IDA7CisgICAgfQorCisgICAgZXhwbGljaXQg
VG1wKGNvbnN0IEFyZyYpOworCisgICAgc3RhdGljIFRtcCBncFRtcEZvckluZGV4KHVuc2lnbmVk
IGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFs
dWUgPSBlbmNvZGVHUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgc3RhdGljIFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAg
ICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChp
bmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0dQ
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVlKTsKKyAg
ICB9CisKKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5j
b2RlZEZQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29s
IGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUFIobV92YWx1
ZSk7CisgICAgfQorCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gaXNHUFIoKSB8fCBpc0ZQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBG
UFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFIobV92YWx1
ZSk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNH
UCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwcigpOworICAgICAgICByZXR1cm4gZnByKCk7Cisg
ICAgfQorCisgICAgYm9vbCBoYXNUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gIWlzUmVnKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAg
dW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2Rl
RlBUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4
KCk7CisgICAgICAgIHJldHVybiBmcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgYm9vbCBpc0Fs
aXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhISp0aGlzOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7CisKKyAgICBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAg
ICA6IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICB7CisgICAg
fQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gKnRoaXMgPT0gVG1wKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBX
VEY6OkludEhhc2g8aW50Pjo6aGFzaChtX3ZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgor
ICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBy
ZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlAodW5zaWdu
ZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBpbmRleDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0K
KworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICBy
ZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQVG1wKHVuc2lnbmVkIGluZGV4KQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVy
KCkpICsgMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBUbXAodW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlBSKE1hY3JvQXNzZW1i
bGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc0VuY29kZWRHUChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUg
PiAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQKGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA8IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wg
aXNFbmNvZGVkR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRH
UCh2YWx1ZSkgJiYgdmFsdWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0
ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBSKGludCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgdmFsdWUgPj0gZW5j
b2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgYm9vbCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1
cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRHUFIodmFsdWUpOworICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEZQUih2YWx1ZSk7CisgICAg
fQorCisgICAgc3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8R1BSUmVnPigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxl
cjo6Zmlyc3RSZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQUihpbnQgdmFsdWUpCisgICAgewor
ICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxGUFJSZWc+KAorICAgICAgICAgICAgKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6
Zmlyc3RGUFJlZ2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVy
OjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29k
ZUdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFRtcCh2
YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVy
OjpsYXN0UmVnaXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVj
b2RlRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQVG1w
KHZhbHVlKSk7CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0
RlBSZWdpc3RlcigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQorCisgICAgLy8gMDogZW1wdHkgVG1w
CisgICAgLy8gcG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1AgdGVtcHMuCisgICAgLy8gbmVnYXRp
dmU6IEZQUnMgYW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50IG1fdmFsdWU7Cit9OworCitzdHJ1
Y3QgVG1wSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVG1wJiBrZXkpIHsg
cmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUbXAmIGEs
IGNvbnN0IFRtcCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8
SlNDOjpCMzo6QWlyOjpUbXA+IHsKKyAgICB0eXBlZGVmIEpTQzo6QjM6OkFpcjo6VG1wSGFzaCBI
YXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1w
bGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1wPiA6IFNpbXBsZUNsYXNz
SGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OlRtcD4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBJbmxpbmVzX2gKKyNkZWZpbmUgQWly
VG1wSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgi
CisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworaW5saW5lIFRtcDo6VG1wKGNvbnN0IEFyZyYgYXJnKQoreworICAg
ICp0aGlzID0gYXJnLnRtcCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVG1wSW5saW5lc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpclZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
Q29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFs
aWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoQ29kZSYgY29kZSwgY29uc3QgY2hhciog
ZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX2R1bXBCZWZv
cmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQorCisjZGVmaW5lIFZBTElEQVRFKGNvbmRpdGlv
biwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
IGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZhaWwoX19GSUxFX18sIF9fTElO
RV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9uLCB0b0NTdHJpbmcgbWVzc2FnZSk7
IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAg
ICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+IHZhbGlkU2xvdHM7CisgICAgICAgIEhhc2hTZXQ8QmFz
aWNCbG9jayo+IHZhbGlkQmxvY2tzOworICAgICAgICBIYXNoU2V0PFNwZWNpYWwqPiB2YWxpZFNw
ZWNpYWxzOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAg
ICAgICAgICB2YWxpZEJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICBmb3IgKFN0YWNrU2xvdCog
c2xvdCA6IG1fY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgICAgICB2YWxpZFNsb3RzLmFkZChz
bG90KTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogbV9jb2RlLnNwZWNpYWxzKCkp
CisgICAgICAgICAgICB2YWxpZFNwZWNpYWxzLmFkZChzcGVjaWFsKTsKKworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7
CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAg
ICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU2xvdHMuY29u
dGFpbnMoYXJnLnN0YWNrU2xvdCgpKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpTcGVjaWFsOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRTcGVj
aWFscy5jb250YWlucyhhcmcuc3BlY2lhbCgpKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9j
aykpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBWQUxJREFURShpbnN0
LmlzVmFsaWRGb3JtKCksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAg
ICAgICAgICBpZiAoaW5zdEluZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAg
ICAgICAgICBWQUxJREFURShpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAi
IGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgVkFMSURBVEUoIWlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4g
IiwgKmJsb2NrKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkluICIsICpibG9jaykp
OworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggdm9pZCBmYWlsKAorICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBjb25kaXRpb24sCisgICAgICAg
IENTdHJpbmcgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIENTdHJpbmcgZmFpbHVyZU1lc3NhZ2U7
CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiQUlSIFZBTElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAgICAgICBv
dXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1i
ZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIp
OworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgQWZ0ZXIgIiwgbV9jb2RlLmxhc3RQaGFzZU5h
bWUoKSwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmco
KTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAg
ICBpZiAobV9kdW1wQmVmb3JlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV9j
b2RlLmxhc3RQaGFzZU5hbWUoKSwgIjpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyhtX2R1bXBC
ZWZvcmUpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2coIkF0IHRpbWUgb2YgZmFpbHVyZTpc
biIpOworICAgICAgICBkYXRhTG9nKG1fY29kZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJl
TWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxp
bmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0K
KyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVmb3JlOwor
fTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYgY29k
ZSwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKGNv
ZGUsIGR1bXBCZWZvcmUpOworICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyVmFsaWRhdGVfaAorI2RlZmluZSBBaXJWYWxpZGF0ZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYsIGNv
bnN0IGNoYXIqIGR1bXBCZWZvcmUgPSBudWxscHRyKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclZh
bGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2Vu
ZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bj
b2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0NCBA
QAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMg
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKworY2xhc3MgT3Bjb2RlCisgICAgYXR0cl9yZWFk
ZXIgOm5hbWUsIDpzcGVjaWFsLCA6b3ZlcmxvYWRzCisgICAgYXR0cl9hY2Nlc3NvciA6a2luZAor
CisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgc3BlY2lhbCkKKyAgICAgICAgQG5hbWUgPSBuYW1l
CisgICAgICAgIEBzcGVjaWFsID0gc3BlY2lhbAorICAgICAgICBAa2luZCA9IDppbnN0CisgICAg
ICAgIHVubGVzcyBzcGVjaWFsCisgICAgICAgICAgICBAb3ZlcmxvYWRzID0gW10KKyAgICAgICAg
ZW5kCisgICAgZW5kCisKKyAgICBkZWYgbWFzbU5hbWUKKyAgICAgICAgbmFtZVswXS5kb3duY2Fz
ZSArIG5hbWVbMS4uLTFdCisgICAgZW5kCitlbmQKKworY2xhc3MgQXJnCisgICAgYXR0cl9yZWFk
ZXIgOnJvbGUsIDp0eXBlCisKKyAgICBkZWYgaW5pdGlhbGl6ZShyb2xlLCB0eXBlKQorICAgICAg
ICBAcm9sZSA9IHJvbGUKKyAgICAgICAgQHR5cGUgPSB0eXBlCisgICAgZW5kCitlbmQKKworY2xh
c3MgT3ZlcmxvYWQKKyAgICBhdHRyX3JlYWRlciA6c2lnbmF0dXJlLCA6Zm9ybXMKKworICAgIGRl
ZiBpbml0aWFsaXplKHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAgIEBzaWduYXR1cmUgPSBzaWdu
YXR1cmUKKyAgICAgICAgQGZvcm1zID0gZm9ybXMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBLaW5k
CisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX2FjY2Vzc29yIDpzcGVjaWFsCisKKyAg
ICBkZWYgaW5pdGlhbGl6ZShuYW1lKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNw
ZWNpYWwgPSBmYWxzZQorICAgIGVuZAorCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBv
dGhlci5pc19hPyBTdHJpbmcKKyAgICAgICAgICAgIEBuYW1lID09IG90aGVyCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIEBuYW1lID09IG90aGVyLm5hbWUgYW5kIEBzcGVjaWFsID09IG90aGVy
LnNwZWNpYWwKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgS2luZC5hcmdLaW5kcyhr
aW5kKQorICAgICAgICBpZiBraW5kID09ICJBZGRyIgorICAgICAgICAgICAgWyJBZGRyIiwgIlN0
YWNrIiwgIkNhbGxBcmciXQorICAgICAgICBlbHNlCisgICAgICAgICAgICBba2luZF0KKyAgICAg
ICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgYXJnS2luZHMKKyAgICAgICAgS2luZC5hcmdLaW5k
cyhraW5kKQorICAgIGVuZAorZW5kCisKK2NsYXNzIEZvcm0KKyAgICBhdHRyX3JlYWRlciA6a2lu
ZHMsIDphbHROYW1lCisKKyAgICBkZWYgaW5pdGlhbGl6ZShraW5kcywgYWx0TmFtZSkKKyAgICAg
ICAgQGtpbmRzID0ga2luZHMKKyAgICAgICAgQGFsdE5hbWUgPSBhbHROYW1lCisgICAgZW5kCitl
bmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJl
cgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAg
ICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIK
KyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5l
TnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpv
cmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykK
KyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAg
ZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tl
bgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAg
ICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAK
KyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIK
KyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYg
Y29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAj
e2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwg
ZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVz
dWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/Cisg
ICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAg
ICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5l
d2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4g
L1xBKFthLXpBLVowLTlfXSspLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmln
aW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRc
cl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xB
Wyw6KlwvXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxl
TmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAi
TGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwg
dW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAor
ICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKwor
ZGVmIGlzVUQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKSlcWi8KK2VuZAor
CitkZWYgaXNHRih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKEcpfChGKSlcWi8KK2VuZAorCitk
ZWYgaXNLaW5kKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoSW1tNjQpfChB
ZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCkpXFovCitlbmQKKworZGVmIGlzS2V5d29y
ZCh0b2tlbikKKyAgICBpc1VEKHRva2VuKSBvciBpc0dGKHRva2VuKSBvciBpc0tpbmQodG9rZW4p
IG9yCisgICAgICAgIHRva2VuID09ICJzcGVjaWFsIiBvciB0b2tlbiA9PSAiYXMiCitlbmQKKwor
ZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoW2EtekEtWjAtOV9dKylc
Wi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVm
IGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwg
ZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAg
ICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAg
QGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAg
ICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICAgICAg
cmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50
WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBj
b25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9Iikg
dW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBk
ZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAg
ICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVy
KHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAg
IGRlZiBjb25zdW1lUm9sZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAg
cGFyc2VFcnJvcigiRXhwZWN0ZWQgcm9sZSAoVSwgRCwgb3IgVUQpIikgdW5sZXNzIGlzVUQocmVz
dWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVm
IGNvbnN1bWVUeXBlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJz
ZUVycm9yKCJFeHBlY3RlZCB0eXBlIChHIG9yIEYpIikgdW5sZXNzIGlzR0YocmVzdWx0KQorICAg
ICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVL
aW5kCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJF
eHBlY3RlZCBraW5kIChJbW0sIEltbTY0LCBUbXAsIEFkZHIsIEluZGV4LCBSZWxDb25kLCBvciBS
ZXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAg
IHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIHJlc3VsdCA9IHt9Cisg
ICAgICAgIAorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRv
a2Vucy5sZW5ndGgKKworICAgICAgICAgICAgaWYgdG9rZW4gPT0gInNwZWNpYWwiCisgICAgICAg
ICAgICAgICAgY29uc3VtZSgic3BlY2lhbCIpCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9
IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qg
b3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorCisgICAg
ICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCB0
cnVlKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25z
dW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgaWYgcmVzdWx0W29wY29kZU5hbWVdCisg
ICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAg
ICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIp
IGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBvcGNvZGUgPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIGZhbHNlKQorICAgICAgICAgICAg
ICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUKKyAgICAgICAgICAgICAgICBlbmQK
KworICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAgICAgICAgICAgICAgZm9ybXMg
PSBbXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIGlzVUQodG9rZW4pCisg
ICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9
IGNvbnN1bWVSb2xlCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCI6IikKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb25zdW1lVHlwZQorICAgICAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1cmUgPDwgQXJnLm5ldyhyb2xl
LCB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAorCisg
ICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gIi8iCisgICAgICAgICAgICAgICAgICAgIGNvbnN1
bWUoIi8iKQorICAgICAgICAgICAgICAgICAgICBjYXNlIHRva2VuLnN0cmluZworICAgICAgICAg
ICAgICAgICAgICB3aGVuICJicmFuY2giCisgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUu
a2luZCA9IDpicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgd2hlbiAidGVybWluYWwiCisgICAg
ICAgICAgICAgICAgICAgICAgICBvcGNvZGUua2luZCA9IDp0ZXJtaW5hbAorICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJCYWQgLyBk
aXJlY3RpdmUiKQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAg
YWR2YW5jZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgaXNLaW5k
KHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGtpbmRzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBuaWwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGtpbmRzIDw8IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgdG9rZW4gPT0gIioiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IoIkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5sZXNzIGtpbmRzWy0xXS5uYW1l
ID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzWy0xXS5zcGVj
aWFsID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIqIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gImFzIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoImFzIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0g
Y29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3cm9uZyBudW1iZXIgb2YgYXJn
dW1lbnRzIGZvciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5ndGggPT0gc2lnbmF0dXJlLmxl
bmd0aAorICAgICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Iga2luZC5uYW1lID09ICJJbW02
NCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS5y
b2xlICE9ICJVIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJv
cigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBh
IG5vbi1nZW5lcmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3
KGtpbmRzLCBhbHROYW1lKQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIGlz
S2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAor
CisgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAg
ICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMAorICAgICAgICAgICAgICAgICAg
ICBmb3JtcyA8PCBGb3JtLm5ldyhbXSwgbmlsKQorICAgICAgICAgICAgICAgIGVuZAorCisgICAg
ICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9hZC5uZXcoc2lnbmF0dXJlLCBm
b3JtcykKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0CisgICAg
ZW5kCitlbmQKKworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElP
OjpyZWFkKCRmaWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVzID0gcGFyc2VyLnBhcnNlCisK
KyRzdGRlcnIucHV0cyAiR2VuZXJhdGluZyBjb2RlIGZvciAjeyRmaWxlTmFtZX0uIgorCitkZWYg
d3JpdGVIKGZpbGVuYW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tmaWxlbmFtZX0uaCIsICJ3Iikg
eworICAgICAgICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5l
cmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3Qg
ZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQWlyI3tmaWxlbmFt
ZX1faCIKKyAgICAgICAgb3V0cC5wdXRzICIjZGVmaW5lIEFpciN7ZmlsZW5hbWV9X2giCisKKyAg
ICAgICAgeWllbGQgb3V0cAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8g
QWlyI3tmaWxlbmFtZX1faCIKKyAgICB9CitlbmQKKword3JpdGVIKCJPcGNvZGUiKSB7CisgICAg
fCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJlbnVtIE9wY29kZSA6IGludDE2X3QgeyIK
KyAgICAkb3Bjb2Rlcy5rZXlzLnNvcnQuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAg
ICAgb3V0cC5wdXRzICIgICAgI3tvcGNvZGV9LCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9OyIK
KworICAgIG91dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRv
cGNvZGVzLmtleXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBv
dXRwLnB1dHMgImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5w
dXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKKyMgRnJvbSBoZXJlIG9uLCB3ZSBkb24ndCB0
cnkgdG8gZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBzaW5jZSB3ZSdyZSB1c2luZyBhIHJl
Y3Vyc2l2ZSBwYXR0ZXJuCisjIG1hdGNoZXIuCisKK2RlZiBtYXRjaEZvcm1zKG91dHAsIHNwZWVk
LCBmb3JtcywgY29sdW1uSW5kZXgsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAg
ICByZXR1cm4gaWYgZm9ybXMubGVuZ3RoID09IDAKKworICAgIGlmIGZpbHRlcltmb3Jtc10KKyAg
ICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBpZiBjb2x1bW5JbmRleCA+PSBmb3Jtc1swXS5r
aW5kcy5sZW5ndGgKKyAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAxCisgICAg
ICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKyAgICAKKyAg
ICBncm91cHMgPSB7fQorICAgIGZvcm1zLmVhY2ggeworICAgICAgICB8IGZvcm0gfAorICAgICAg
ICBraW5kID0gZm9ybS5raW5kc1tjb2x1bW5JbmRleF0ubmFtZQorICAgICAgICBpZiBncm91cHNb
a2luZF0KKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA8PCBmb3JtCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGdyb3Vwc1traW5kXSA9IFtmb3JtXQorICAgICAgICBlbmQKKyAgICB9CisKKyAg
ICBpZiBzcGVlZCA9PSA6ZmFzdCBhbmQgZ3JvdXBzLmxlbmd0aCA9PSAxCisgICAgICAgIG1hdGNo
Rm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwg
ZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBvdXRwLnB1
dHMgInN3aXRjaCAoI3tjb2x1bW5HZXR0ZXJbY29sdW1uSW5kZXhdfSkgeyIKKyAgICBncm91cHMu
ZWFjaF9wYWlyIHsKKyAgICAgICAgfCBrZXksIHZhbHVlIHwKKyAgICAgICAgb3V0cC5wdXRzICIj
aWYgVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisgICAgICAgIEtpbmQuYXJnS2lu
ZHMoa2V5KS5lYWNoIHsKKyAgICAgICAgICAgIHwgYXJnS2luZCB8CisgICAgICAgICAgICBvdXRw
LnB1dHMgImNhc2UgQXJnOjoje2FyZ0tpbmR9OiIKKyAgICAgICAgfQorICAgICAgICBtYXRjaEZv
cm1zKG91dHAsIHNwZWVkLCB2YWx1ZSwgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZp
bHRlciwgY2FsbGJhY2spCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBvdXRw
LnB1dHMgIiNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICB9
CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBv
dXRwLnB1dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBp
bnN0KQorICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5vcGNvZGUpIHsiCisgICAgJG9w
Y29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0
cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAg
ICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVk
T3ZlcmxvYWRTd2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKSBvciBzcGVlZCA9
PSA6c2FmZSkKKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5hcmdzLnNp
emUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICBvcGNvZGUub3Zlcmxv
YWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92
ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZAorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZW5kCisg
ICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5w
dXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0i
CitlbmQKKyAgICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgc3BlZWQsIGluc3Qp
CisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGluc3QpIHsKKyAgICAgICAgfCBv
cGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAg
IHlpZWxkIG9wY29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29sdW1u
R2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAg
ICAgICAgICAgIiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICBj
YWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAg
ICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRl
ciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisgICAgfQorZW5kCisKK3dyaXRlSCgi
T3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwi
QWlySW5zdC5oXCIiCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpclNwZWNpYWwuaFwiIgor
ICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeyIKKyAgICAKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29sIG9wZ2VuSGlkZGVuVHJ1dGgo
KSB7IHJldHVybiB0cnVlOyB9IgorICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgVD4i
CisgICAgb3V0cC5wdXRzICJpbmxpbmUgVCogb3BnZW5IaWRkZW5QdHJJZGVudGl0eShUKiBwb2lu
dGVyKSB7IHJldHVybiBwb2ludGVyOyB9IgorICAgIG91dHAucHV0cyAiI2RlZmluZSBPUEdFTl9S
RVRVUk4odmFsdWUpIGRvIHtcXCIKKyAgICBvdXRwLnB1dHMgIiAgICBpZiAob3BnZW5IaWRkZW5U
cnV0aCgpKVxcIgorICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm4gdmFsdWU7XFwiCisgICAg
b3V0cC5wdXRzICJ9IHdoaWxlIChmYWxzZSkiCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBJbnN0Ojpmb3JFYWNoQXJnKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RP
dmVybG9hZChvdXRwLCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9h
ZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImZ1
bmN0b3IoYXJnc1swXSwgQXJnOjpVc2UsIEFyZzo6R1ApOyAvLyBUaGlzIGlzIGJhc2ljYWxseSBi
b2d1cywgYnV0IGl0IHdvcmtzIGYgYW5hbHlzZXMgbW9kZWwgU3BlY2lhbCBhcyBhbiBpbW1lZGlh
dGUuIgorICAgICAgICAgICAgb3V0cC5wdXRzICJhcmdzWzBdLnNwZWNpYWwoKS0+Zm9yRWFjaEFy
ZygqdGhpcywgc2NvcGVkTGFtYmRhPEVhY2hBcmdDYWxsYmFjaz4oZnVuY3RvcikpOyIKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7
CisgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xlID0g
bmlsCisgICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQorICAgICAgICAgICAgICAgIHdoZW4g
IlUiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgorICAgICAgICAgICAgICAgIHdo
ZW4gIkQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVmIgorICAgICAgICAgICAgICAg
IHdoZW4gIlVEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZURlZiIKKyAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9y
KGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7cm9sZX0sIEFyZzo6I3thcmcudHlwZX1QKTsiCisgICAg
ICAgICAgICB9CisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBv
dXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4iCisgICAgb3V0cC5wdXRz
ICJBTFdBWVNfSU5MSU5FIGJvb2wgaXNWYWxpZEZvcm0oT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiQXJnOjpL
aW5kIGtpbmRzW3NpemVvZi4uLihBcmd1bWVudHMpXSA9IHsgYXJndW1lbnRzLi4uIH07IgorICAg
IG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2gg
eworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5u
YW1lfToiCisgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChzaXplb2YuLi4oQXJndW1lbnRzKSkg
eyIKKyAgICAgICAgdW5sZXNzIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvcGNvZGUub3Zl
cmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIKKyAgICAg
ICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsgfCBjb2x1bW5JbmRleCB8ICJvcGdlbkhp
ZGRlblB0cklkZW50aXR5KGtpbmRzKVsje2NvbHVtbkluZGV4fV0iIH0KKyAgICAgICAgICAgICAg
ICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJv
YyB7CisgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgIHNw
ZWNpYWwgPSAobm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBraW5kIHwga2luZC5zcGVjaWFsIH0p
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKCN7c3BlY2lhbH0p
OyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6
c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7
IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7
IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsgIgorICAg
IG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wgaXNUZXJtaW5hbChP
cGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2gg
KG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2Rl
IHwKKyAgICAgICAgaWYgb3Bjb2RlLmtpbmQgPT0gOnRlcm1pbmFsIG9yIG9wY29kZS5raW5kID09
IDpicmFuY2gKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisg
ICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVybiB0cnVlOyIKKyAgICBvdXRw
LnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRw
LnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKword3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQi
KSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdElubGlu
ZXMuaFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJ3dGYvUHJpbnRTdHJlYW0uaFwiIgor
ICAgIG91dHAucHV0cyAibmFtZXNwYWNlIFdURiB7IgorICAgIG91dHAucHV0cyAidXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcjsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAg
IG91dHAucHV0cyAiICAgIHN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLmtleXMuZWFj
aCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICIgICAgY2FzZSAje29w
Y29kZX06IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgb3V0LnByaW50KFwiI3tvcGNvZGV9
XCIpOyIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVybjsiCisgICAgfQorICAgIG91
dHAucHV0cyAiICAgIH0iCisgICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3Bh
Y2UgV1RGIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6aXNWYWxpZEZvcm0oKSIK
KyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpzYWZl
LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAg
aWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFyZ3Muc2l6ZSgp
IDwgMSkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICghYXJnc1swXS5pc1NwZWNpYWwoKSkiCisgICAgICAgICAgICBvdXRw
LnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVS
TihhcmdzWzBdLnNwZWNpYWwoKS0+aXNWYWxpZCgqdGhpcykpOyIKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiA9IGZhbHNlCisgICAgICAgICAgICBvdmVybG9h
ZC5zaWduYXR1cmUubGVuZ3RoLnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAg
ICAgICAgICAgICAgICByb2xlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS5yb2xlCisgICAg
ICAgICAgICAgICAgdHlwZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZQorICAgICAg
ICAgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2luZGV4XQorICAgICAgICAgICAgICAgIG5lZWRz
TW9yZVZhbGlkYXRpb24gfD0ga2luZC5zcGVjaWFsCisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgIyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgZm9ybSBtYXRjaGVzLiBXZSBkb24n
dCBoYXZlIHRvIHZhbGlkYXRlIHRoZSByb2xlLCBzaW5jZQorICAgICAgICAgICAgICAgICMga2lu
ZCBpbXBsaWVzIHJvbGUuIFNvLCB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHZhbGlkYXRlIGlzIHRo
ZSB0eXBlLiBBbmQgd2Ugb25seSBoYXZlCisgICAgICAgICAgICAgICAgIyB0byB2YWxpZGF0ZSB0
aGUgdHlwZSBpZiB3ZSBoYXZlIGEgVG1wLgorICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9
PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1sje2luZGV4
fV0udG1wKCkuaXMje3R5cGV9UCgpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGlmIG5lZWRzTW9yZVZhbGlkYXRpb24KKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICghaXMje29wY29kZS5uYW1lfVZhbGlkKCp0aGlzKSkiCisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICBlbmQKKyAg
ICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKwor
ICAgIG91dHAucHV0cyAiYm9vbCBJbnN0OjphZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCki
CisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisg
ICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91
dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNp
YWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdJbmRleCkiCisgICAgICAgICAgICBv
dXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JF
VFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+YWRtaXRzU3RhY2soKnRoaXMsIGFyZ0luZGV4KSk7Igor
ICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFN3aXRjaCBvbiB0aGUgYXJnSW5kZXguCisgICAg
ICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJnSW5kZXgpIHsiCisKKyAgICAgICAgICAgIG51
bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRzLm1hcCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9h
ZCB8CisgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAg
ICAgfS5tYXgKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbnVtQXJncy50aW1lcyB7CisgICAg
ICAgICAgICAgICAgfCBhcmdJbmRleCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNl
ICN7YXJnSW5kZXh9OiIKKworICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgYWxsIG9mIHRoZSBm
b3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJsb2FkcyBlaXRoZXIgZG8sIG9yIGRvbid0LCBhZG1pdCBh
biBhZGRyZXNzCisgICAgICAgICAgICAgICAgIyBhdCB0aGlzIGluZGV4LiBXZSBleHBlY3QgdGhp
cyB0byBiZSBhIHZlcnkgY29tbW9uIGNhc2UuCisgICAgICAgICAgICAgICAgbnVtWWVzID0gMAor
ICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9h
ZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAg
ICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwg
Zm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9
PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5v
ICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZGVs
aWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZpcnN0IGJlY2F1c2UgaWYgd2UgZW5kIHVwIHdpdGggbm8g
Zm9ybXMsIHdlIHdhbnQKKyAgICAgICAgICAgICAgICAjIHRvIHNheSB0aGF0IEFkZHJlc3MgaXMg
aW5hZG1pc3NpYmxlLgorICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAg
ICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VO
X1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg
ICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0LgorCisgICAgICAgICAgICAgICAgICAgIG5lZWRPdmVy
bG9hZFN3aXRjaCA9IChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkKKworICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAg
ICAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdoYXQgd2Ugd2FudC4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG51
bU5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0aGluZywganVzdCBkcm9wIHRvIGRlZmF1bHQuCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBp
ZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgaG93IHdlIHRlc3QgdGhlIGh5cG90
aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlzIGFyZ3VtZW50IHRvIGFuCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIyBhZGRyZXNzIHlpZWxkcyBhIHZhbGlkIGZvcm0uCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBjb2x1bW5JbmRleCA9PSBhcmdJbmRleAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIkFyZzo6QWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3NbI3tjb2x1bW5J
bmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZp
bHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm1zIHwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAjIERyb3AgZG93biwgZW1pdCBubyBjb2RlLCBzaW5j
ZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0
cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICMgS2VlcCBnb2luZy4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUs
IG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAifSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisg
ICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAifSIK
KyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9
CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiI7CisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
b3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1
dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVscGVyczo6SnVtcCBJbnN0OjpnZW5lcmF0
ZShDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpIgorICAgIG91
dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShqaXQpOyIKKyAgICBvdXRw
LnB1dHMgIlVOVVNFRF9QQVJBTShjb250ZXh0KTsiCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBl
cnM6Okp1bXAgcmVzdWx0OyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3Qs
ICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBp
ZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJn
c1swXS5zcGVjaWFsKCktPmdlbmVyYXRlKCp0aGlzLCBqaXQsIGNvbnRleHQpKTsiCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGlmIGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgICAgIG1ldGhv
ZE5hbWUgPSBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
ZXRob2ROYW1lID0gb3Bjb2RlLm1hc21OYW1lCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
IGlmIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJy
ZXN1bHQgPSAiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHJpbnQgImppdC4j
e21ldGhvZE5hbWV9KCIKKworICAgICAgICAgICAgZm9ybS5raW5kcy5lYWNoX3dpdGhfaW5kZXgg
eworICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGlmIGlu
ZGV4ICE9IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiLCAiCisgICAgICAgICAg
ICAgICAgZW5kCisgICAgICAgICAgICAgICAgY2FzZSBraW5kLm5hbWUKKyAgICAgICAgICAgICAg
ICB3aGVuICJUbXAiCisgICAgICAgICAgICAgICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtp
bmRleF0udHlwZSA9PSAiRyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFy
Z3NbI3tpbmRleH1dLmdwcigpIgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5mcHIoKSIKKyAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgd2hlbiAiSW1tIgorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW0zMigpIgorICAg
ICAgICAgICAgICAgIHdoZW4gIkltbTY0IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW02NCgpIgorICAgICAgICAgICAgICAgIHdoZW4g
IkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFz
QWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4IgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAg
ICAgICAgIHdoZW4gIlJlbENvbmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFy
Z3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIHdo
ZW4gIlJlc0NvbmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRl
eH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIG91dHAucHV0cyAiKTsiCisgICAgICAgICAgICBvdXRwLnB1dHMg
Ik9QR0VOX1JFVFVSTihyZXN1bHQpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0
cyAiUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJyZXR1cm4g
cmVzdWx0OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3
MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlRm9ySmV0
dGlzb24oKTsgICAgCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7CiAgICAg
CiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
LmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXggIT0gaW52YWxpZCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAKICAgICBib29sIGlzSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBkZWxldGVkKCk7IH0KQEAgLTE3
MCw2ICsxNjksNDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OwogCisgICAgY2xhc3MgQWxsUmVnc0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisKKyAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVy
YXRvcigpIHsgfQorCisgICAgICAgICAgICBleHBsaWNpdCBpdGVyYXRvcihSZWcgcmVnKQorICAg
ICAgICAgICAgICAgIDogbV9yZWdJbmRleChyZWcuaW5kZXgoKSkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVnIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJu
IFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpOyB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3JlZ0luZGV4ID0g
UmVnOjpmcm9tSW5kZXgobV9yZWdJbmRleCkubmV4dCgpLmluZGV4KCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHJldHVybiBtX3JlZ0luZGV4ID09IG90aGVyLm1fcmVnSW5kZXg7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICB1bnNpZ25lZCBtX3JlZ0luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJzdCgpKTsgfQorICAgICAgICBp
dGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWcoKSk7IH0KKyAgICB9Owor
CisgICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSB7IHJldHVybiBBbGxSZWdzSXRlcmFi
bGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90IGludmFsaWQoKSB7IHJldHVy
biAweGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9m
ZnNldExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJBdE9mZnNldExpc3QuY3BwCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNyArNDIsNyBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6UmVnaXN0ZXJBdE9mZnNldExpCiAg
ICAgaWYgKG9mZnNldEJhc2VUeXBlID09IEZyYW1lUG9pbnRlckJhc2VkKQogICAgICAgICBvZmZz
ZXQgPSAtKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obnVtYmVyT2ZSZWdpc3RlcnMpICogc2l6ZW9m
KHZvaWQqKSk7CiAKLSAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6
Omxhc3QoKTtyZWcgPSByZWcubmV4dCgpKSB7CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJz
dCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAgaWYg
KHJlZ2lzdGVyU2V0LmdldChyZWcpKSB7CiAgICAgICAgICAgICBhcHBlbmQoUmVnaXN0ZXJBdE9m
ZnNldChyZWcsIG9mZnNldCkpOwogICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih2b2lkKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0
TGlzdC5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyQXRPZmZzZXRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVi
bGljOgogICAgICAgICBtX3JlZ2lzdGVycy5jbGVhcigpOwogICAgIH0KIAotICAgIHNpemVfdCBz
aXplKCkKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9y
ZWdpc3RlcnMuc2l6ZSgpOwogICAgIH0KQEAgLTY2LDYgKzY2LDkgQEAgcHVibGljOgogICAgIFJl
Z2lzdGVyQXRPZmZzZXQqIGZpbmQoUmVnKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbmRleE9mKFJl
ZykgY29uc3Q7IC8vIFJldHVybnMgVUlOVF9NQVggaWYgbm90IGZvdW5kLgogCisgICAgVmVjdG9y
PFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJu
IG1fcmVnaXN0ZXJzLmJlZ2luKCk7IH0KKyAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD46OmNv
bnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzLmVuZCgpOyB9CisK
IHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+IG1fcmVnaXN0ZXJzOwogfTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE5
MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Ig
PT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAg
ICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRCaXRzKCkpCisgICAgICAgICAgICBm
dW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAg
ICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9CkluZGV4OiBTb3VyY2UvV1RGL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTkx
NTg2KQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwx
OSBAQAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajoKKyAgICAgICAgKiB3dGYvTWF0aEV4dHJhcy5oOgorICAgICAgICAoV1RGOjpyYW5n
ZXNPdmVybGFwKTogTmljZSB1dGlsaXR5IGZvciBjaGVja2luZyBpZiByYW5nZXMgb3ZlcmxhcC4K
KyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDogQWRkIGEgRU5BQkxFKEIzX0pJVCkgZmVhdHVyZSBm
bGFnLgorICAgICAgICAqIHd0Zi9TY29wZWRMYW1iZGEuaDogQWRkZWQuIFRoaXMgYWxsb3dzIHVz
IHRvIGRvIHplcm8tYWxsb2NhdGlvbiwgemVyby1jb3B5IGV4dGVybiBsYW1iZGFzLgorICAgICAg
ICAoV1RGOjpzY29wZWRMYW1iZGEpOgorICAgICAgICAqIHd0Zi9TaGFyZWRUYXNrLmg6CisgICAg
ICAgIChXVEY6OmNyZWF0ZVNoYXJlZFRhc2spOgorCiAyMDE1LTEwLTIxICBGaWxpcCBQaXpsbyAg
PGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgRmFjdG9yIG91dCB0aGUgZ3JhcGggbm9kZSB3
b3JrbGlzdHMgZnJvbSBERkcgaW50byBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dURi9XVEYueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAog
CQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAv
KiBXb3JkTG9jay5oICovOyB9OwogCQkwRkVCM0RDRjFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVk
VGFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
QjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCAqLzsgfTsKIAkJMEZFQjNERDEx
QkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzREQwMUJCNzM2NkIwMDlEN0FB
RCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi87IH07CisJCTBGRUM4NEIxMUJEQUNEMzkw
MDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEu
aCAqLzsgfTsKIAkJMEZFQzg0QUYxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRB
RTFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2RlV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZFRDY3
QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55
UHRyU2V0LmggKi87IH07CiAJCTBGRjg2MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29t
cGFyaXNvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi87IH07CkBA
IC0zNDUsNiArMzQ2LDcgQEAKIAkJMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2Nr
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmRMb2NrLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRU
YXNrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFRhc2suaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNERDAxQkI3MzY2QjAwOUQ3QUFEIC8qIFBh
cmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3BlZExhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2RlV29ya2xpc3QuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gR3JhcGhOb2RlV29ya2xpc3QuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRp
bnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0Yg
LyogUG9pbnRlckNvbXBhcmlzb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
UG9pbnRlckNvbXBhcmlzb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg3MCw2
ICs4NzIsNyBAQAogCQkJCTE0Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIu
aCAqLywKIAkJCQkxNDY5NDE5ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3Bw
ICovLAogCQkJCTE0Njk0MTk1MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0g
Ki8sCisJCQkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovLAog
CQkJCUE4QTQ3MzA2MTUxQTgyNUIwMDQxMjNGRiAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLywKIAkJ
CQlBOEE0NzMwNzE1MUE4MjVCMDA0MTIzRkYgLyogU2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJ
CQkJQThBNDczMDgxNTFBODI1QjAwNDEyM0ZGIC8qIFNIQTEuY3BwICovLApAQCAtMTI0NCw2ICsx
MjQ3LDcgQEAKIAkJCQlBOEE0NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmll
ckRhdGFQdGhyZWFkcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEy
M0ZGIC8qIFRocmVhZGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAw
NDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0NTUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmlj
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0
clNldC5oIGluIEhlYWRlcnMgKi8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHJldmlzaW9uIDE5MTU4NikK
KysrIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDYgKzUzLDI2
IEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgUG9pbnRlckxp
c3REdW1wIHsKK3B1YmxpYzoKKyAgICBQb2ludGVyTGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29u
c3QgY2hhciogY29tbWEpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgICAgICwgbV9jb21t
YShjb21tYSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBUOjpjb25zdF9pdGVyYXRv
ciBpdGVyID0gbV9saXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9saXN0LmVuZCgpOyArK2l0ZXIpCisg
ICAgICAgICAgICBvdXQucHJpbnQobV9jb21tYSwgcG9pbnRlckR1bXAoKml0ZXIpKTsKKyAgICB9
CisKK3ByaXZhdGU6CisgICAgY29uc3QgVCYgbV9saXN0OworICAgIENvbW1hUHJpbnRlciBtX2Nv
bW1hOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIE1hcER1bXAgewogcHVibGlj
OgogICAgIE1hcER1bXAoY29uc3QgVCYgbWFwLCBjb25zdCBjaGFyKiBhcnJvdywgY29uc3QgY2hh
ciogY29tbWEpCkBAIC04MCw2ICsxMDAsMTIgQEAgTGlzdER1bXA8VD4gbGlzdER1bXAoY29uc3Qg
VCYgbGlzdCwgY29ucwogICAgIHJldHVybiBMaXN0RHVtcDxUPihsaXN0LCBjb21tYSk7CiB9CiAK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitQb2ludGVyTGlzdER1bXA8VD4gcG9pbnRlckxpc3REdW1w
KGNvbnN0IFQmIGxpc3QsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKK3sKKyAgICByZXR1cm4g
UG9pbnRlckxpc3REdW1wPFQ+KGxpc3QsIGNvbW1hKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgQ29tcGFyYXRvcj4KIENTdHJpbmcgc29ydGVkTGlzdER1bXAoY29uc3QgVCYg
bGlzdCwgY29uc3QgQ29tcGFyYXRvciYgY29tcGFyYXRvciwgY29uc3QgY2hhciogY29tbWEgPSAi
LCAiKQogewpJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNl
L1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTksNiArNDE5LDIwIEBA
IGlubGluZSBUIGxlZnRTaGlmdFdpdGhTYXR1cmF0aW9uKFQgdmFsdWUKICAgICByZXR1cm4gcmVz
dWx0OwogfQogCisvLyBQYXNzIHJhbmdlcyB3aXRoIHRoZSBtaW4gYmVpbmcgaW5jbHVzaXZlIGFu
ZCB0aGUgbWF4IGJlaW5nIGV4Y2x1c2l2ZS4gRm9yIGV4YW1wbGUsIHRoaXMgc2hvdWxkCisvLyBy
ZXR1cm4gZmFsc2U6CisvLworLy8gICAgIHJhbmdlc092ZXJsYXAoMCwgOCwgOCwgMTYpCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgcmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQg
bGVmdE1heCwgVCByaWdodE1pbiwgVCByaWdodE1heCkKK3sKKyAgICBpZiAobGVmdE1pbiA8PSBy
aWdodE1pbiAmJiBsZWZ0TWF4ID4gcmlnaHRNaW4pCisgICAgICAgIHJldHVybiB0cnVlOworICAg
IGlmIChyaWdodE1pbiA8PSBsZWZ0TWluICYmIHJpZ2h0TWF4ID4gbGVmdE1pbikKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogI2VuZGlmIC8vICNpZm5kZWYgV1RGX01hdGhFeHRyYXNfaApJbmRleDogU291cmNlL1dURi93
dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShy
ZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNv
cHkpCkBAIC03NzYsMTIgKzc3NiwyMCBAQAogI2RlZmluZSBFTkFCTEVfQ09OQ1VSUkVOVF9KSVQg
MQogI2VuZGlmCiAKKy8qIFRoZSBCMyBjb21waWxlciBpcyBhbiBleHBlcmltZW50YWwgYmFja2Vu
ZCB0aGF0IGlzIHN0aWxsIGluIGRldmVsb3BtZW50LiBXZSB3aWxsIGtlZXAgaXQgYnVpbGRpbmcK
KyAgIG9uIERhcndpbi94ODYtNjQgZm9yIG5vdywgdGhvdWdoIGl0IGlzIHVudXNlZCBleGNlcHQg
Zm9yIHRlc3RzLiAqLworI2lmIE9TKERBUldJTikgJiYgQ1BVKFg4Nl82NCkKKyNkZWZpbmUgRU5B
QkxFX0IzX0pJVCAxCisjZW5kaWYKKwogLyogSWYgdGhlIGJhc2VsaW5lIGppdCBpcyBub3QgYXZh
aWxhYmxlLCB0aGVuIGRpc2FibGUgdXBwZXIgdGllcnMgYXMgd2VsbDogKi8KICNpZiAhRU5BQkxF
KEpJVCkKLSN1bmRlZiBFTkFCTEVfREZHX0pJVCAgICAgIC8qIFVuZGVmIHNvIHRoYXQgd2UgY2Fu
IHJlZGVmaW5lIGl0LiAqLwotI3VuZGVmIEVOQUJMRV9GVExfSklUICAgICAgLyogVW5kZWYgc28g
dGhhdCB3ZSBjYW4gcmVkZWZpbmUgaXQuICovCisjdW5kZWYgRU5BQkxFX0RGR19KSVQKKyN1bmRl
ZiBFTkFCTEVfRlRMX0pJVAorI3VuZGVmIEVOQUJMRV9CM19KSVQKICNkZWZpbmUgRU5BQkxFX0RG
R19KSVQgMAogI2RlZmluZSBFTkFCTEVfRlRMX0pJVCAwCisjZGVmaW5lIEVuYWJsZV9CM19KSVQg
MAogI2VuZGlmCiAKIC8qIENvdW50cyB1c2VzIG9mIHdyaXRlIGJhcnJpZXJzIHVzaW5nIHNhbXBs
aW5nIGNvdW50ZXJzLiBCZSBzdXJlIHRvIGFsc28KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3Bl
ZExhbWJkYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIFNjb3BlZExhbWJkYV9oCisjZGVmaW5lIFNjb3BlZExhbWJkYV9o
CisKK25hbWVzcGFjZSBXVEYgeworCisvLyBZb3UgY2FuIHVzZSBTY29wZWRMYW1iZGEgdG8gZWZm
aWNpZW50bHkgcGFzcyBsYW1iZGFzIHdpdGhvdXQgYWxsb2NhdGluZyBtZW1vcnkgb3IgcmVxdWly
aW5nCisvLyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBvZiB0aGUgY2FsbGVlLiBUaGUgY2FsbGVl
IHNob3VsZCBiZSBkZWNsYXJlZCBhczoKKy8vCisvLyB2b2lkIGZvbyhjb25zdCBTY29wZWRMYW1i
ZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+Jik7CisvLworLy8gVGhlIGNhbGxlciBqdXN0IGRv
ZXM6CisvLworLy8gdm9pZCBmb28oc2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYp
PihbJl0gKGludCB4LCBTdHVmZiYgeSkgLT4gTXlUaGluZ3MqIHsgYmxhaCB9KSk7CisvLworLy8g
Tm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIGZvbygpIG5vdCBlc2NhcGluZyB0aGUgbGFtYmRhLiBU
aGUgbGFtYmRhIGlzIG9ubHkgdmFsaWQgd2hpbGUgZm9vKCkgaXMKKy8vIG9uIHRoZSBzdGFjayAt
IGhlbmNlIHRoZSBuYW1lIFNjb3BlZExhbWJkYS4KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b25UeXBlPiBjbGFzcyBTY29wZWRMYW1iZGE7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBl
LCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2NvcGVkTGFtYmRhPFJlc3VsdFR5
cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAgU2NvcGVkTGFtYmRhKFJlc3Vs
dFR5cGUgKCppbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLikgPSBudWxscHRyLCB2
b2lkKiBhcmcgPSBudWxscHRyKQorICAgICAgICA6IG1faW1wbChpbXBsKQorICAgICAgICAsIG1f
YXJnKGFyZykKKyAgICB7CisgICAgfQorICAgIAorICAgIFJlc3VsdFR5cGUgb3BlcmF0b3IoKShB
cmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4p
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRUeXBlICgqbV9pbXBsKSh2b2lkKiBhcmcs
IEFyZ3VtZW50VHlwZXMmJi4uLik7CisgICAgdm9pZCAqbV9hcmc7Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGNsYXNzIFNjb3BlZExhbWJk
YUZ1bmN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1
bWVudFR5cGVzLCB0eXBlbmFtZSBGdW5jdG9yPgorY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjxS
ZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKSwgRnVuY3Rvcj4gOiBwdWJsaWMgU2NvcGVkTGFt
YmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgUGFzc2VkRnVuY3Rvcj4KKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKFBhc3Nl
ZEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChB
cmd1bWVudFR5cGVzLi4uKT4oaW1wbEZ1bmN0aW9uLCB0aGlzKQorICAgICAgICAsIG1fZnVuY3Rv
cihzdGQ6OmZvcndhcmQ8UGFzc2VkRnVuY3Rvcj4oZnVuY3RvcikpCisgICAgeworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rpb24odm9pZCogYXJndW1l
bnQsIEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4g
c3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5jdG9yKAor
ICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOwor
ICAgIH0KKworICAgIEZ1bmN0b3IgbV9mdW5jdG9yOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
RnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorU2NvcGVkTGFtYmRhRnVuY3RvcjxGdW5j
dGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYShGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAg
ICByZXR1cm4gU2NvcGVkTGFtYmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KHN0ZDo6
Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1
c2luZyBXVEY6OlNjb3BlZExhbWJkYTsKK3VzaW5nIFdURjo6c2NvcGVkTGFtYmRhOworCisjZW5k
aWYgLy8gU2NvcGVkTGFtYmRhX2gKKwpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkx
NTg2KQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OSw2ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFNoYXJlZFRhc2tGdW5j
dG9yKEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVuY3RvcihXVEY6Om1vdmUoZnVu
Y3RvcikpCisgICAgeworICAgIH0KKwogcHJpdmF0ZToKICAgICBSZXN1bHRUeXBlIHJ1bihBcmd1
bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBvdmVycmlkZQogICAgIHsKQEAgLTExMCw2ICsxMTUs
MTEgQEAgUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcgogewogICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rv
cj4oZnVuY3RvcikpOwogfQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFt
ZSBGdW5jdG9yPgorUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFz
ayhGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRU
YXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KFdURjo6bW92ZShmdW5jdG9yKSkpOwor
fQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264121</attachid>
            <date>2015-10-26 23:45:51 -0700</date>
            <delta_ts>2015-10-27 00:01:12 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>626718</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MiBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFjY2VwdFJvb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRSb290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OmFjY2VwdEludGVybmFscyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjphY2NlcHRPcGVyYW5kcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OmFjY2VwdE9wZXJhbmRzTGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUxvYWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBZGQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFuZExvYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAgICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzTG93
ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICog
YjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpvZmZzZXQpOgorICAg
ICAgICAoSlNDOjpCMzo6TWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKToKKyAgICAgICAgKiBiMy9C
M09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzQ2hlY2tNYXRo
KToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZGF0
YSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAo
SlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6
UGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIz
L0IzUGF0Y2hwb2ludFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2lu
dFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpC
Mzo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL0IzUGhhc2VTY29wZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpQcm9jZWR1cmUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjp+UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2sp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3Jb
XSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjppdGVyYXRvcjo6ZmluZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24p
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlv
bjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRv
cltdKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKiBi
My9CM1Byb2NlZHVyZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3RLaW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90S2luZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjph
Y2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpieXRlU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6a2luZCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja1Nsb3RWYWx1ZTo6b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
U2xvdFZhbHVlOjpzZXRPZmZzZXRGcm9tRlApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OlN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6ZHVtcCk6CisgICAgICAgICogYjMvQjNT
dGFja21hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFja21hcCk6
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6c2V0T3BhcXVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN0YWNrbWFwOjpvcGFxdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpvcGFxdWVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y29uc3RyYWluKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwOjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpjbG9iYmVy
ZWQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldEdlbmVyYXRvcik6CisgICAgICAg
ICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21h
cFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNw
ZWNpYWw6OmlzVmFsaWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6
YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6YXBw
ZW5kUmVwc0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JB
cmcpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246OlN1Y2Nlc3NvckNvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNz
b3JDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxl
Y3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3Nv
ckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6
QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nl
c3NvckNvbGxlY3Rpb246OmVuZCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpkdW1wKToKKyAgICAgICAgKiBiMy9C
M1N3aXRjaENhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpTd2l0
Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6Y2FzZVZhbHVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OnRhcmdldCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCbG9jayk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSk6CisgICAgICAgIChKU0M6
OkIzOjpTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6YXBwZW5kQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKToKKyAgICAg
ICAgKiBiMy9CM1N3aXRjaFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Om51bUNhc2VW
YWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6Y2FzZVZhbHVlcyk6CisgICAgICAgIChKU0M6OkIz
OjpTd2l0Y2hWYWx1ZTo6ZmFsbFRocm91Z2gpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN3
aXRjaFZhbHVlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjplbmQpOgorICAgICAgICAqIGIz
L0IzVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM1R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppc0ludCk6CisgICAg
ICAgIChKU0M6OkIzOjppc0Zsb2F0KToKKyAgICAgICAgKEpTQzo6QjM6OnBvaW50ZXJUeXBlKToK
KyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2ls
b25WYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzVXBzaWxvblZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VXBzaWxvblZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6cGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6VXBzaWxvblZhbHVlKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VXNlQ291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpC
Mzo6VXNlQ291bnRzOjp+VXNlQ291bnRzKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6b3BlcmF0b3JbXSk6CisgICAgICAg
ICogYjMvQjNWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6dmFsaWRhdGUp
OgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6On5WYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eSk6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0RvdWJsZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6
OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp0eXBlRm9yKToKKyAgICAgICAg
KiBiMy9CM1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFjY2VwdHMp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Om9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Y2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnR5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFpclR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXAp
OgorICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6Omhhc0ludCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
Y29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
b2Zmc2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2Fpcjog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fp
ci9BaXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29u
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpm
cFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZv
ckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hh
c2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAg
ICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpk
ZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVu
ZEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNl
c3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBC
YXNpY0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVt
cDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBi
My9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0Nh
bGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFs
Ojppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNT
dGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWly
Q29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0lu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICog
YjMvYWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5l
d1RtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJh
bWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tT
bG90c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2lu
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVu
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJh
dG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNp
YWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OnNwZWNpYWxzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zZXJ0aW9uU2V0Ojpjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0
OjphcHBlbmRJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6
Omluc2VydEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2Vy
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6ZHVtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Okluc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpJbnN0OjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNo
VG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Rm9yRWFjaDxUbXA+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Rm9y
RWFjaDxBcmc+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFj
aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Omhhc1NwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6aXNTaGlmdFZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNMc2hpZnQzMlZhbGlk
KToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxp
dmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Omxp
dmVBdFRhaWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpM
b2NhbENhbGMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjps
aXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6dGFrZUxp
dmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpleGVjdXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNj
b3BlOjp+UGhhc2VTY29wZSk6CisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUuaDogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Z3Byc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmZwcnNJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpy
ZWdzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEdQUkluZm8+OjppblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz46OmluUHJpb3JpdHlPcmRlcik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6
OlNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjp+U3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6Om5hbWUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTcGVjaWFsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZGVl
cER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OkRlZXBTcGVjaWFsRHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkRlZXBTcGVjaWFsRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAg
ICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9h
aXIvQWlyU3RhY2tTbG90LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNr
U2xvdDo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6U3RhY2tTbG90KToKKyAgICAgICAgKiBi
My9haXIvQWlyU3RhY2tTbG90Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFj
a1Nsb3Q6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjppbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6YWxpZ25tZW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U3RhY2tTbG90Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6
b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xvdER1bXA6
OkRlZXBTdGFja1Nsb3REdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xv
dER1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEZvckluZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6VG1wOjppc0dQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlRtcDo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzUmVnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmZwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6cmVnKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpoYXNUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6Z3BUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnBUbXBJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6VG1wOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpl
bmNvZGVHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZW5jb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
VG1wOjppc0VuY29kZWRGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVk
R1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRGUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc0VuY29kZWRGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZGVjb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjpkZWNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcEhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6VG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dmFsaWRhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJWYWxp
ZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjogQWRk
ZWQuCisgICAgICAgICogYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGVB
bmRSdW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdDQyKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBqaXQvUmVnLmg6CisgICAgICAgIChKU0M6
OlJlZzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpSZWc6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6
UmVnOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6UmVnOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVy
YXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjplbmQpOgorICAg
ICAgICAoSlNDOjpSZWc6OmFsbCk6CisgICAgICAgIChKU0M6OlJlZzo6aW52YWxpZCk6CisgICAg
ICAgIChKU0M6OlJlZzo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJBdE9mZnNldExpc3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
UmVnaXN0ZXJBdE9mZnNldExpc3QpOgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6ZW5kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpm
b3JFYWNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisKIDIwMTUtMTAt
MjQgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVGVhY2ggY3JlYXRl
X2hhc2hfdGFibGUgdG8gb21pdCBidWlsdGlucyBtYWNyb3Mgd2hlbiBnZW5lcmF0aW5nIHRhYmxl
cyBmb3IgbmF0aXZlLW9ubHkgb2JqZWN0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
IFZQQVRIID0gXAogCiBQWVRIT04gPSBweXRob24KIFBFUkwgPSBwZXJsCitSVUJZID0gcnVieQog
CiBKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUiA9ICQoSmF2YVNjcmlwdENvcmUpL1NjcmlwdHMK
IApAQCAtNTksNiArNjAsMTAgQEAgYWxsIDogXAogICAgIExleGVyLmx1dC5oIFwKICAgICBLZXl3
b3JkTG9va3VwLmggXAogICAgIFJlZ0V4cEppdFRhYmxlcy5oIFwKKyAgICBCM0xvd2VyaW5nTWF0
Y2hlci5oIFwKKyAgICBCM0FkZHJlc3NNYXRjaGVyLmggXAorICAgIEIzQ29tcGFyaXNvbk1hdGNo
ZXIuaCBcCisgICAgQWlyT3Bjb2RlLmggXAogIwogCiAjIEphdmFTY3JpcHQgYnVpbHRpbnMuCkBA
IC0yNjIsNiArMjY3LDE2IEBAIElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUyA9IFwKIEpT
UmVwbGF5SW5wdXRzLmggOiAkKElOUFVUX0dFTkVSQVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBV
VF9HRU5FUkFUT1JfU0NSSVBUUykKIAkkKFBZVEhPTikgJChKYXZhU2NyaXB0Q29yZSkvcmVwbGF5
L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlucHV0cy5weSAtLW91dHB1dERpciAuIC0tZnJh
bWV3b3JrIEphdmFTY3JpcHRDb3JlICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQog
CitCM0xvd2VyaW5nTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0
ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0
dGVybnMKKwkkKFJVQlkpICReIAorQjNBZGRyZXNzTWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3Jl
KS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNB
ZGRyZXNzTWF0Y2hlci5wYXR0ZXJucworCSQoUlVCWSkgJF4KK0IzQ29tcGFyaXNvbk1hdGNoZXIu
aDogJChKYXZhU2NyaXB0Q29yZSkvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiICQoSmF2
YVNjcmlwdENvcmUpL2IzL0IzQ29tcGFyaXNvbk1hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICRe
CisKK0Fpck9wY29kZS5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRv
ci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKKwkkKFJVQlkp
ICReCisKICMgRHluYW1pY2FsbHktZGVmaW5lZCB0YXJnZXRzIGFyZSBsaXN0ZWQgYmVsb3cuIFN0
YXRpYyB0YXJnZXRzIGJlbG9uZyB1cCB0b3AuCiAKIGFsbCA6IFwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5
KQpAQCAtMjUsNiArMjUsNyBAQAogCQkJYnVpbGRQaGFzZXMgPSAoCiAJCQkpOwogCQkJZGVwZW5k
ZW5jaWVzID0gKAorCQkJCTBGRUM4NUIxMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLAogCQkJCTVENkIyQTRGMTUyQjlFMjMwMDUyMzFERSAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLAogCQkJCTVENkIyQTUxMTUyQjlFMjMwMDUyMzFERSAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLAogCQkJCTVENkIyQTU1MTUyQjlFMjMwMDUyMzFERSAvKiBQQlhUYXJnZXREZXBl
bmRlbmN5ICovLApAQCAtNjg1LDYgKzY4NiwxMjIgQEAKIAkJMEZFQTBBMzMxNzBENDBCRjAwQkI3
MjJDIC8qIERGR0pJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQTBBMkYxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICov
OyB9OwogCQkwRkVBMEEzNDE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQTBBMzAxNzBENDBCRjAw
QkI3MjJDIC8qIERGR0pJVENvZGUuaCAqLzsgfTsKIAkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FE
IC8qIE1hY3JvQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUIzRUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5j
cHAgKi87IH07CisJCTBGRUM4NEZFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi87IH07CisJ
CTBGRUM4NEZGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MDAxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Js
b2NrLmNwcCAqLzsgfTsKKwkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovOyB9OworCQkwRkVDODUwMjFC
REFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQmFzaWNCbG9ja0lubGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRp
bHMuaCAqLzsgfTsKKwkJMEZFQzg1MDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlz
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
QkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovOyB9OworCQkwRkVDODUw
NTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCAqLzsg
fTsKKwkJMEZFQzg1MDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRDFCREFDREFD
MDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MDgxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5o
ICovOyB9OworCQkwRkVDODUwOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLzsgfTsKKwkJMEZFQzg1MEExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLzsgfTsKKwkJ
MEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1MEMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRp
dml0eS5oICovOyB9OworCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1MEUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNDFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDMyVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MEYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3Q2NFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAg
Ki87IH07CisJCTBGRUM4NTEwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi87IH07CisJCTBGRUM4NTExMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3REb3VibGVWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnN0RG91YmxlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFs
dWUuaCAqLzsgfTsKKwkJMEZFQzg1MTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4
NTE0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29udHJvbFZhbHVlLmggKi87IH07CisJCTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0ZyZXF1ZW5jeUNsYXNzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNw
cCAqLzsgfTsKKwkJMEZFQzg1MTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3Mu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEND
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggKi87IH07CisJCTBGRUM4NTE3
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzRnJlcXVlbnRlZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTE4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0dlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLzsgfTsK
KwkJMEZFQzg1MTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyYXRlLmggKi87IH07CisJCTBGRUM4NTFBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5k
ZXhNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi87IH07CisJCTBGRUM4NTFD
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4U2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eFNldC5oICovOyB9OworCQkwRkVDODUxRDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWly
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwICovOyB9OworCQkwRkVDODUx
RTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNM
b3dlclRvQWlyLmggKi87IH07CisJCTBGRUM4NTFGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9y
eVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmggKi87IH07CisJCTBGRUM4NTIxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM09wY29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICovOyB9OworCQkw
RkVDODUyMjFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M09wY29kZS5oICovOyB9OworCQkwRkVDODUyMzFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4u
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCAq
LzsgfTsKKwkJMEZFQzg1MjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwICovOyB9OworCQkw
RkVDODUyNjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1MjcxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Bh
dGNocG9pbnRWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTI4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmgg
Ki87IH07CisJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi87IH07CisJCTBGRUM4NTJBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2Nv
cGUuaCAqLzsgfTsKKwkJMEZFQzg1MkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUx
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgKi87IH07CisJCTBGRUM4NTJDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2Vk
dXJlLmggKi87IH07CisJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLzsgfTsKKwkJ
MEZFQzg1MkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXAuY3BwICovOyB9OworCQkwRkVDODUyRjFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja21hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuaCAqLzsgfTsKKwkJMEZF
Qzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU2MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTMxMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXBTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi87IH07
CisJCTBGRUM4NTMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLzsgfTsKKwkJMEZFQzg1MzQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tT
bG90VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuaCAqLzsgfTsK
KwkJMEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovOyB9OworCQkwRkVDODUz
NzFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaENhc2UuY3BwICovOyB9OworCQkwRkVDODUzODFCREFDREFDMDA4MEZGNzQgLyogQjNT
d2l0Y2hDYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi87IH07CisJCTBG
RUM4NTM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0ExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi87
IH07CisJCTBGRUM4NTNCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVHlwZS5jcHAgKi87IH07CisJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1R5cGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLzsgfTsKKwkJMEZFQzg1M0QxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vw
c2lsb25WYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi87IH07CisJ
CTBGRUM4NTNGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNTFCREFDREFDMDA4MEZG
NzQgLyogQjNVc2VDb3VudHMuY3BwICovOyB9OworCQkwRkVDODU0MDFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovOyB9Owor
CQkwRkVDODU0MTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGNzFCREFDREFDMDA4MEZG
NzQgLyogQjNWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovOyB9OworCQkw
RkVDODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
QTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovOyB9OworCQkwRkVDODU0NTFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5s
aW5lcy5oICovOyB9OworCQkwRkVDODU0NjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
QzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi87IH07CisJCTBGRUM4NTQ3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJl
cC5oICovOyB9OworCQkwRkVDODU2RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFj
ay5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi87IH07CisJCTBG
RUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0OTFCREFDREM3MDA4MEZG
NzQgLyogQWlyQWxsb2NhdGVTdGFjay5oICovOyB9OworCQkwRkVDODU2RjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovOyB9OworCQkw
RkVDODU3MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWly
QXJnLmggKi87IH07CisJCTBGRUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2Nr
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NzIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJCYXNpY0Jsb2NrLmggKi87IH07CisJCTBGRUM4NTczMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
Q2FsbFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi87
IH07CisJCTBGRUM4NTc0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRGMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1NzUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3BwICov
OyB9OworCQkwRkVDODU3NjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNvZGUuaCAqLzsgfTsKKwkJMEZFQzg1NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5o
ICovOyB9OworCQkwRkVDODU3ODFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzkxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUu
aCAqLzsgfTsKKwkJMEZFQzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250
ZXh0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLzsgfTsKKwkJ
MEZFQzg1N0IxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU2MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgKi87IH07CisJCTBGRUM4NTdD
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi87IH07CisJCTBGRUM4NTdEMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlv
blNldC5jcHAgKi87IH07CisJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRp
b25TZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTU5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLzsgfTsKKwkJMEZF
Qzg1N0YxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckluc3QuY3BwICovOyB9OworCQkwRkVDODU4MDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLzsgfTsKKwkJMEZFQzg1ODExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGlu
ZXMuaCAqLzsgfTsKKwkJMEZFQzg1ODIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RDFC
REFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAqLzsgfTsKKwkJMEZFQzg1ODMxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNl
U2NvcGUuY3BwICovOyB9OworCQkwRkVDODU4NDFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VT
Y29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NUYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLzsgfTsKKwkJMEZFQzg1
ODUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjAxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovOyB9OworCQkwRkVDODU4NjFCREFDREM3
MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJl
Z2lzdGVyUHJpb3JpdHkuaCAqLzsgfTsKKwkJMEZFQzg1ODcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwICovOyB9OworCQkw
RkVDODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1ODkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
aWxsRXZlcnl0aGluZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cCAqLzsgfTsKKwkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGlu
Zy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1
NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovOyB9OworCQkwRkVD
ODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTdGFja1Nsb3QuY3BwICovOyB9OworCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi87IH07CisJ
CTBGRUM4NThEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclRtcC5jcHAgKi87IH07CisJCTBGRUM4NThFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY5
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLzsgfTsKKwkJMEZFQzg1OEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclRtcElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVz
LmggKi87IH07CisJCTBGRUM4NTkwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2QjFC
REFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVDODU5MTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0
ZS5oICovOyB9OworCQkwRkVDODU5MzFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTky
MUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovOyB9OworCQkwRkVDODVBMzFC
REI1Q0YxMDA4MEZGNzQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1MUYwRUI2MTA1Qzg2QzZCMDBFNkRGMUIg
LyogRm91bmRhdGlvbi5mcmFtZXdvcmsgKi87IH07CisJCTBGRUM4NUE0MUJEQjVDRjEwMDgwRkY3
NCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNj
cmlwdENvcmUuZnJhbWV3b3JrICovOyB9OworCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyog
dGVzdGIzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovOyB9OworCQkwRkVDODVC
MzFCREVEOTU3MDA4MEZGNzQgLyogQjNDb25zdFB0clZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCMjFCREVEOTU3MDA4MEZGNzQgLyog
QjNDb25zdFB0clZhbHVlLmggKi87IH07CiAJCTBGRUQ2N0I5MUIyNjI1NkQwMDY2Q0UxNSAvKiBE
RkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50
SG9pc3RpbmdQaGFzZS5jcHAgKi87IH07CiAJCTBGRUQ2N0JBMUIyNjI1NkQwMDY2Q0UxNSAvKiBE
RkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I4MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhv
aXN0aW5nUGhhc2UuaCAqLzsgfTsKIAkJMEZFRTk4NDExQTg4NjVCNzAwNzU0RTkzIC8qIFNldHVw
VmFyYXJnc0ZyYW1lLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVFOTg0MDFBODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTgzOSw2ICsx
OTU2LDEzIEBACiAJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGQ0VGQUI1MTgwNUQ2MTYwMDQ3
MkNFNDsKIAkJCXJlbW90ZUluZm8gPSBsbHZtRm9ySlNDOwogCQl9OworCQkwRkVDODVCMDFCREI1
RDhGMDA4MEZGNzQgLyogUEJYQ29udGFpbmVySXRlbVByb3h5ICovID0geworCQkJaXNhID0gUEJY
Q29udGFpbmVySXRlbVByb3h5OworCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4
RkMwMkFBQzA3IC8qIFByb2plY3Qgb2JqZWN0ICovOworCQkJcHJveHlUeXBlID0gMTsKKwkJCXJl
bW90ZUdsb2JhbElEU3RyaW5nID0gMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0OworCQkJcmVtb3Rl
SW5mbyA9IHRlc3RiMzsKKwkJfTsKIAkJMEZGOTIyRDIxNEY0NkIyRjAwNDFBMjRFIC8qIFBCWENv
bnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsKIAkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsK
IAkJCWNvbnRhaW5lclBvcnRhbCA9IDA4NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0
IG9iamVjdCAqLzsKQEAgLTI1ODAsNiArMjcwNCwxMjEgQEAKIAkJMEZFQTBBMkYxNzBENDBCRjAw
QkI3MjJDIC8qIERGR0pJVENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHSklUQ29kZS5jcHA7IHBhdGggPSBkZmcvREZHSklUQ29kZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRD
b2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0pJVENvZGUuaDsgcGF0
aCA9IGRmZy9ERkdKSVRDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIz
RUNFMTYyMzdGNjcwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBNYWNyb0Fzc2VtYmxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVn
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNBcmd1bWVu
dFJlZ1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3Vt
ZW50UmVnVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNBcmd1bWVu
dFJlZ1ZhbHVlLmg7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9j
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Jhc2ljQmxvY2su
Y3BwOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0QjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2suaDsgcGF0aCA9IGIzL0IzQmFz
aWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCODFCREFDREFD
MDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0Jhc2ljQmxvY2tJbmxpbmVzLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2tJ
bmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0Jhc2ljQmxvY2tVdGlscy5oOyBwYXRoID0gYjMvQjNCYXNpY0Jsb2NrVXRpbHMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0Jsb2NrV29ya2xpc3QuaDsgcGF0aCA9IGIzL0IzQmxvY2tXb3JrbGlzdC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQjFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1Nw
ZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDaGVja1Nw
ZWNpYWwuY3BwOyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDaGVja1NwZWNpYWwuaDsgcGF0
aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDaGVja1ZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ2hl
Y2tWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJFMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNDaGVja1ZhbHVlLmg7IHBhdGggPSBiMy9CM0NoZWNrVmFsdWUuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9u
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29tbW9uLmNwcDsg
cGF0aCA9IGIzL0IzQ29tbW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzQ29tbW9uLmg7IHBhdGggPSBiMy9CM0NvbW1vbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDMTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRh
dGl2aXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29tbXV0
YXRpdml0eS5jcHA7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHkuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2
aXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29tbXV0YXRpdml0eS5o
OyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0MzJWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM0NvbnN0MzJWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnN0MzJWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdDMy
VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzQ29uc3Q2NFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29uc3Q2NFZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
Q29uc3Q2NFZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0NjRWYWx1ZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJs
ZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3RE
b3VibGVWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25z
dERvdWJsZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29uc3RE
b3VibGVWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnRyb2xW
YWx1ZS5jcHA7IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbnRyb2xWYWx1ZS5oOyBwYXRo
ID0gYjMvQjNDb250cm9sVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHBhdGggPSBi
My9CM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNGcmVxdWVuY3lDbGFzcy5oOyBwYXRoID0gYjMvQjNGcmVx
dWVuY3lDbGFzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRDFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9IGIzL0IzRnJlcXVlbnRlZEJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENFMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzR2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvQjNHZW5lcmF0ZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJhdGUuaDsgcGF0aCA9
IGIzL0IzR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaDsgcGF0aCA9
IGIzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREMTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0luZGV4TWFwLmg7IHBhdGggPSBiMy9CM0luZGV4TWFw
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0luZGV4U2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW5k
ZXhTZXQuaDsgcGF0aCA9IGIzL0IzSW5kZXhTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0xvd2VyVG9BaXIuY3BwOyBwYXRoID0g
YjMvQjNMb3dlclRvQWlyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM0xvd2VyVG9BaXIuaDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyog
QjNNZW1vcnlWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M01lbW9yeVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFsdWUuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlW
YWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM01lbW9yeVZhbHVlLmg7
IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09wY29kZS5jcHA7IHBhdGggPSBiMy9CM09wY29kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM09wY29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM09wY29k
ZS5oOyBwYXRoID0gYjMvQjNPcGNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3JpZ2luLmNwcDsgcGF0aCA9IGIzL0IzT3JpZ2luLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzT3JpZ2lu
Lmg7IHBhdGggPSBiMy9CM09yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcDsg
cGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BhdGNocG9pbnRTcGVjaWFsLmg7
IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BhdGNocG9pbnRWYWx1ZS5j
cHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1BhdGNocG9pbnRWYWx1ZS5oOyBw
YXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1BoYXNlU2NvcGUuY3BwOyBwYXRoID0gYjMv
QjNQaGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM1BoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFMTFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQcm9j
ZWR1cmUuY3BwOyBwYXRoID0gYjMvQjNQcm9jZWR1cmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1cmUuaDsgcGF0aCA9IGIzL0Iz
UHJvY2VkdXJlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNQcm9jZWR1cmVJbmxpbmVzLmg7IHBhdGggPSBiMy9CM1Byb2NlZHVyZUlu
bGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQjNTdGFja21hcC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrbWFwLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcC5oOyBwYXRo
ID0gYjMvQjNTdGFja21hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRF
NjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwuY3BwOyBwYXRoID0gYjMv
QjNTdGFja21hcFNwZWNpYWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwuaDsgcGF0aCA9IGIzL0IzU3Rh
Y2ttYXBTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tT
bG90S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU5MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNTdGFja1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNTdGFja1Nsb3RWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNT
dGFja1Nsb3RWYWx1ZS5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNz
b3JDb2xsZWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3VjY2Vz
c29yQ29sbGVjdGlvbi5oOyBwYXRoID0gYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3
aXRjaENhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTd2l0
Y2hDYXNlLmNwcDsgcGF0aCA9IGIzL0IzU3dpdGNoQ2FzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTd2l0Y2hDYXNlLmg7IHBhdGggPSBi
My9CM1N3aXRjaENhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gQjNTd2l0Y2hWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRjaFZh
bHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjAxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNTd2l0Y2hWYWx1ZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMTFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVHlwZS5jcHA7IHBhdGgg
PSBiMy9CM1R5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMjFC
REFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzVHlwZS5oOyBwYXRoID0gYjMvQjNUeXBlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Vwc2lsb25WYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Vwc2lsb25WYWx1ZS5oOyBwYXRoID0gYjMvQjNVcHNp
bG9uVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEIzVXNlQ291bnRzLmNwcDsgcGF0aCA9IGIzL0IzVXNlQ291bnRzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VXNlQ291bnRzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVXNlQ291bnRz
Lmg7IHBhdGggPSBiMy9CM1VzZUNvdW50cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbGlkYXRlLmNwcDsgcGF0aCA9IGIzL0IzVmFs
aWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGODFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1ZhbGlkYXRlLmg7IHBhdGggPSBiMy9CM1ZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWUuY3BwOyBwYXRoID0gYjMv
QjNWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEIzVmFsdWUuaDsgcGF0aCA9IGIzL0IzVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFsdWVJbmxpbmVzLmg7IHBhdGggPSBiMy9C
M1ZhbHVlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGQzFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBCM1ZhbHVlUmVwLmNwcDsgcGF0aCA9IGIzL0IzVmFsdWVSZXAuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGRDFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZVJlcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlUmVw
Lmg7IHBhdGggPSBiMy9CM1ZhbHVlUmVwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFsbG9jYXRlU3RhY2suY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU0OTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBbGxvY2F0ZVN0YWNrLmg7IHBhdGggPSBi
My9haXIvQWlyQWxsb2NhdGVTdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEFpckFyZy5jcHA7IHBhdGggPSBiMy9haXIvQWlyQXJnLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFyZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJBcmcuaDsgcGF0
aCA9IGIzL2Fpci9BaXJBcmcuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQmFzaWNCbG9jay5jcHA7IHBhdGggPSBiMy9haXIvQWly
QmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTREMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEFpckJhc2ljQmxvY2suaDsgcGF0aCA9IGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQWlyQ0NhbGxTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0RjFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ0NhbGxTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckNDYWxsU3BlY2lhbC5oOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29k
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJDb2RlLmNwcDsg
cGF0aCA9IGIzL2Fpci9BaXJDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQ29kZS5oOyBwYXRoID0gYjMvYWlyL0FpckNvZGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZy
ZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJGcmVx
dWVudGVkQmxvY2suaDsgcGF0aCA9IGIzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdl
bmVyYXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckdlbmVy
YXRlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5lcmF0ZS5oOyBwYXRoID0gYjMv
YWlyL0FpckdlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU1
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBwYXRoID0gYjMvYWly
L0FpckdlbmVyYXRpb25Db250ZXh0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA7
IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU1NzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVl
U2F2ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlySGFuZGxlQ2FsbGVl
U2F2ZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0
aW9uU2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckluc2Vy
dGlvblNldC5jcHA7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2Vy
dGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJbnNlcnRpb25T
ZXQuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NUExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySW5zdC5jcHA7IHBhdGggPSBiMy9h
aXIvQWlySW5zdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVCMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEFpckluc3QuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0SW5saW5lcy5oOyBwYXRo
ID0gYjMvYWlyL0Fpckluc3RJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJMaXZlbmVzcy5oOyBwYXRoID0gYjMvYWlyL0FpckxpdmVu
ZXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVFMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEFpclBoYXNlU2NvcGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlU2NvcGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQg
LyogQWlyUGhhc2VTY29wZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJQ
aGFzZVNjb3BlLmg7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29wZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU2MDFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQ
cmlvcml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjExQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclJlZ2lzdGVyUHJpb3JpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyUmVnaXN0ZXJQcmlvcml0eS5oOyBwYXRoID0gYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFs
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNwZWNpYWwuaDsgcGF0aCA9
IGIzL2Fpci9BaXJTcGVjaWFsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclNwaWxsRXZlcnl0aGluZy5oOyBwYXRo
ID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclN0YWNrU2xvdC5jcHA7IHBhdGggPSBi
My9haXIvQWlyU3RhY2tTbG90LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja1Nsb3QuaDsgcGF0aCA9IGIzL2Fpci9BaXJTdGFja1Ns
b3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBB
aXJUbXAuY3BwOyBwYXRoID0gYjMvYWlyL0FpclRtcC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVG1wLmg7IHBhdGggPSBiMy9haXIvQWlyVG1wLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJUbXBJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRt
cElubGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJUbXBJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJWYWxpZGF0ZS5jcHA7
IHBhdGggPSBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyVmFsaWRhdGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJW
YWxpZGF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU5MjFCREIxRTEw
MDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgbmFtZSA9IEFpckdlbmVyYXRlZC5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2VuZXJhdGVkLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0
IC8qIHRlc3RiMyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBl
ID0gImNvbXBpbGVkLm1hY2gtby5leGVjdXRhYmxlIjsgaW5jbHVkZUluSW5kZXggPSAwOyBwYXRo
ID0gdGVzdGIzOyBzb3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OworCQkwRkVDODVB
RTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IHRlc3RiMy5jcHA7IHBhdGggPSBiMy90ZXN0YjMuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODVCMjFCREVEOTU3MDA4MEZGNzQgLyogQjNDb25zdFB0
clZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29uc3RQdHJWYWx1
ZS5oOyBwYXRoID0gYjMvQjNDb25zdFB0clZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhh
c2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHQ29uc3RhbnRI
b2lzdGluZ1BoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCODFCMjYyNTZEMDA2NkNFMTUg
LyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50
SG9pc3RpbmdQaGFzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVFOTg0MDFB
ODg2NUI2MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gU2V0dXBWYXJhcmdzRnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTM4MDEsNiArNDA0MCwxNSBAQAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OworCQkwRkVDODVBMjFCREI1Q0YxMDA4MEZGNzQg
LyogRnJhbWV3b3JrcyAqLyA9IHsKKwkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwor
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKKwkJCWZpbGVzID0gKAorCQkJCTBGRUM4
NUEzMUJEQjVDRjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovLAorCQkJCTBGRUM4NUE0MUJEQjVDRjEwMDgwRkY3NCAvKiBKYXZhU2NyaXB0Q29yZS5mcmFt
ZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEZGOTIyQzYxNEY0NkIxMzAwNDFBMjRFIC8qIEZy
YW1ld29ya3MgKi8gPSB7CiAJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC0zODcwLDYgKzQxMTgsNyBAQAogCQkJCTE0
MTIxMTIwMEE0ODc5M0MwMDQ4MDI1NSAvKiBtaW5pZG9tICovLAogCQkJCTE0QkQ1OUJGMEEzRThG
OTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTY1MTEyMzA1MTQwNDZBNEMwMDJCMTAxRCAv
KiB0ZXN0UmVnRXhwICovLAorCQkJCTBGRUM4NUFEMUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMg
Ki8sCiAJCQkpOwogCQkJbmFtZSA9IFByb2R1Y3RzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsKQEAgLTM4OTAsNiArNDEzOSw3IEBACiAJCQkJQTdDMjI1Q0MxMzk5ODFGMTAwRkYxNjYyIC8q
IEtleXdvcmRMb29rdXBHZW5lcmF0b3IucHkgKi8sCiAJCQkJMTQzMkVCRDcwQTM0Q0FENDAwNzE3
QjlGIC8qIEFQSSAqLywKIAkJCQk5Njg4Q0IxMjBFRDEyQjRFMDAxRDY0OUYgLyogYXNzZW1ibGVy
ICovLAorCQkJCTBGRUM4NEIyMUJEQUNENUUwMDgwRkY3NCAvKiBiMyAqLywKIAkJCQlBNTRDRjJF
QTE4NEVBNzM5MDAyMzdGMTkgLyogYmluZGluZ3MgKi8sCiAJCQkJQTdEODAxOUYxODgwRDY2RTAw
MjZDMzlCIC8qIGJ1aWx0aW5zICovLAogCQkJCTk2OUEwNzhGMEVEMUQzQUUwMEYxRjY4MSAvKiBi
eXRlY29kZSAqLywKQEAgLTQxMDMsNiArNDM1MywxMzUgQEAKIAkJCW5hbWUgPSBmdGw7CiAJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9OworCQkwRkVDODRCMjFCREFDRDVFMDA4MEZGNzQg
LyogYjMgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBG
RUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8sCisJCQkJMEZFQzg0QjQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QjUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovLAorCQkJCTBGRUM4NEI2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NEI3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLywKKwkJCQkwRkVDODRCODFCREFDREFDMDA4MEZG
NzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovLAorCQkJCTBGRUM4NEI5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oICovLAorCQkJCTBGRUM4NEJBMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLywKKwkJCQkwRkVDODRCQjFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NoZWNrU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEJEMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NoZWNrVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NoZWNrVmFsdWUuaCAqLywKKwkJCQkwRkVDODRCRjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21t
b24uY3BwICovLAorCQkJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICov
LAorCQkJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwICov
LAorCQkJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLywK
KwkJCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovLAor
CQkJCTBGRUM4NEM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oICovLAorCQkJ
CTBGRUM4NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0QzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggKi8sCisJCQkJMEZF
Qzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovLAorCQkJ
CTBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCAqLywKKwkJCQkw
RkVDODRDOTFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovLAorCQkJCTBG
RUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oICovLAorCQkJCTBGRUM4
NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKKwkJCQkwRkVD
ODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovLAorCQkJCTBGRUM4
NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4
NENFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODRDRjFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NEQwMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODREMTFC
REFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovLAorCQkJCTBGRUM4NEQyMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0luZGV4U2V0LmggKi8sCisJCQkJMEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi8sCisJCQkJMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTG93ZXJUb0Fpci5oICovLAorCQkJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01l
bW9yeVZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1v
cnlWYWx1ZS5oICovLAorCQkJCTBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5j
cHAgKi8sCisJCQkJMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8sCisJ
CQkJMEZFQzg0RDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCAqLywKKwkJCQkwRkVD
ODREQTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCAqLywKKwkJCQkwRkVDODREQjFCREFD
REFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0REMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODRE
RDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwICovLAorCQkJCTBGRUM4
NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovLAorCQkJCTBGRUM4
NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovLAorCQkJCTBGRUM4NEUw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLywKKwkJCQkwRkVDODRFMTFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovLAorCQkJCTBGRUM4NEUyMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovLAorCQkJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLywKKwkJCQkwRkVDODRFNDFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcC5jcHAgKi8sCisJCQkJMEZFQzg0RTUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXAuaCAqLywKKwkJCQkwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a21hcFNwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrbWFwU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrU2xvdEtpbmQuY3BwICovLAorCQkJCTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0
YWNrU2xvdEtpbmQuaCAqLywKKwkJCQkwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2tTbG90VmFsdWUuaCAqLywKKwkJCQkwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uLmggKi8sCisJCQkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3dpdGNoQ2FzZS5jcHAgKi8sCisJCQkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoQ2FzZS5oICovLAorCQkJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZh
bHVlLmNwcCAqLywKKwkJCQkwRkVDODRGMDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1
ZS5oICovLAorCQkJCTBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuY3BwICovLAor
CQkJCTBGRUM4NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLywKKwkJCQkwRkVDODRG
MzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEY0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovLAorCQkJCTBGRUM4NEY1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi8sCisJCQkJMEZFQzg0RjYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi8sCisJCQkJMEZFQzg0RjcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuY3BwICovLAorCQkJCTBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1ZhbGlkYXRlLmggKi8sCisJCQkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuY3BwICovLAorCQkJCTBGRUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi8s
CisJCQkJMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggKi8sCisJ
CQkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovLAorCQkJCTBG
RUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggKi8sCisJCQkJMEZFQzg1QUUx
QkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi8sCisJCQkpOworCQkJbmFtZSA9IGIzOwor
CQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKKwkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBG
Rjc0IC8qIGFpciAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovLAor
CQkJCTBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi8sCisJ
CQkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8sCisJCQkJMEZFQzg1
NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovLAorCQkJCTBGRUM4NTRDMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLywKKwkJCQkwRkVDODU0RDFCREFDREM3MDA4
MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4NTRGMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODU1MDFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ29kZS5jcHAgKi8sCisJCQkJMEZFQzg1NTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNv
ZGUuaCAqLywKKwkJCQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJs
b2NrLmggKi8sCisJCQkJMEZFQzg1NTMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNw
cCAqLywKKwkJCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCAqLywK
KwkJCQkwRkVDODU5MjFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLywKKwkJ
CQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAqLywK
KwkJCQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
ICovLAorCQkJCTBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5oICovLAorCQkJCTBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
Y3BwICovLAorCQkJCTBGRUM4NTU5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
aCAqLywKKwkJCQkwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgKi8sCisJ
CQkJMEZFQzg1NUIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLywKKwkJCQkwRkVDODU1
QzFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCAqLywKKwkJCQkwRkVDODU1RDFC
REFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAqLywKKwkJCQkwRkVDODU1RTFCREFDREM3
MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8sCisJCQkJMEZFQzg1NUYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLywKKwkJCQkwRkVDODU2MDFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi8sCisJCQkJMEZFQzg1NjExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCAqLywKKwkJCQkwRkVDODU2MjFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg1NjMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclNwZWNpYWwuaCAqLywKKwkJCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3BpbGxFdmVyeXRoaW5nLmNwcCAqLywKKwkJCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi8sCisJCQkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclN0YWNrU2xvdC5jcHAgKi8sCisJCQkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclN0YWNrU2xvdC5oICovLAorCQkJCTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJU
bXAuY3BwICovLAorCQkJCTBGRUM4NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLywK
KwkJCQkwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovLAorCQkJ
CTBGRUM4NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZF
Qzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggKi8sCisJCQkpOworCQkJbmFt
ZSA9IGFpcjsKKwkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CisJCX07CiAJCTBGRjQyNzJFMTU4
RUJDQ0UwMDRDQjlGRiAvKiBkaXNhc3NlbWJsZXIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsK
IAkJCWNoaWxkcmVuID0gKApAQCAtNjA4OSw2ICs2NDY4LDcgQEAKIAkJCQkwRjFGRTUxQzE5MjJB
M0JDMDA2OTg3QzUgLyogQWJvcnRSZWFzb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUUz
MEYzQTgzQzEwMEY4NDcxMCAvKiBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjU1RjBGNTE0RDEwNjNDMDBBQzc2NDkgLyogQWJzdHJhY3RQQy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTVFQTcwRTkxOUY1QjEwMTAwOThGNUVDIC8qIEFsdGVybmF0ZURp
c3BhdGNoYWJsZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTQ4RDE5MTE3NzIzNjVCMDBD
NjVBNUYgLyogQVBJQ2FsbGJhY2tGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMz
RTUwRTE2RjVDRDAwQjM0NDYwIC8qIEFQSUNhc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjExNyw4
ICs2NDk3LDEwIEBACiAJCQkJQTVFQTcwRTgxOUY1QjEwMTAwOThGNUVDIC8qIEF1Z21lbnRhYmxl
SW5zcGVjdG9yQ29udHJvbGxlckNsaWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTI2NzhGOEYx
QTAzMTAwOTAwNkEzMDZEIC8qIEJhc2ljQmxvY2tMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTQ3QjgzQUMwRTZEQjhDOTAwNDc3NUE0IC8qIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1pemVy
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjY3MzlEMjEzQkZERTcxMDAy
M0Q4N0MgLyogQmlnSW50ZWdlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NEIyNzIxQTc4NEJB
RjAwNkU0RTY2IC8qIEJpbmFyeVN3aXRjaC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEUx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRUMw
RTE2RjVDRDAwQjM0NDYwIC8qIEJvb2xlYW5PYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUZF
QTA4NjIwMTgyQjdBMDQwMEY2RDg1MSAvKiBCcmVha3BvaW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0Q4MDFBNTE4ODBENjZFMDAyNkMzOUIgLyogQnVpbHRpbkV4ZWN1dGFibGVzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYxMzMsNiArNjUxNSw3IEBACiAJCQkJOTlEQTAwQTQxQkQ1OTkzMTAwRjQ1
NzVDIC8qIGJ1aWx0aW5zX21vZGVsLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJOTlEQTAwQTUxQkQ1
OTkzMTAwRjQ1NzVDIC8qIGJ1aWx0aW5zX3RlbXBsYXRlcy5weSBpbiBIZWFkZXJzICovLAogCQkJ
CTQxREVBMTMyMUI5RjMxNjMwMDZENjVERCAvKiBCdWlsdGluVXRpbHMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTEwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOUU3Mjk0MEIxOTBGMDUxNDAwMUE5MUI1IC8qIEJ1bmRsZVBhdGguaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk3MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJmbHku
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk4MTVFRDhFNDYwMEYxNjdCMiAvKiBCdXR0ZXJm
bHlJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNDMsNiArNjUyNiw3IEBACiAJCQkJMEYy
REQ4MEIxQUIzRDg1ODAwQkJCOEU4IC8qIEJ5dGVjb2RlS2lsbHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCUMyRkNBRTEzMTdBOUMyNEUwMDM0QzczNSAvKiBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjY2RUMwMTgzNTY2RjkwMEQwMTdGMSAvKiBCeXRlY29k
ZUxpdmVuZXNzQW5hbHlzaXNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNjFC
REFDREFDMDA4MEZGNzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1
MTRGMjE5MThCM0UxNjcwMDk4RkY4QiAvKiBCeXRlY29kZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGODg1RTExMTg0OUEzQkUwMEYxRTNGQSAvKiBCeXRlY29kZVVzZURlZi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY4MDIzRUExNjEzODMyQjAwQTBCQTQ1IC8qIEJ5VmFsSW5mby5oIGluIEhlYWRl
cnMgKi8sCkBAIC02MTc5LDYgKzY1NjMsNyBAQAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3
RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTNBMzMyMTdBMUYx
RUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUEzQTgxNzk3NDMyRDAwRTg5M0MwIC8qIENvbXBpbGF0
aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNDBFMTZGNUNEMDBCMzQ0NjAg
LyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMUQxQkRBMDhFRjAwMzMx
Qjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTg2LDggKzY1
NzEsMTAgQEAKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRUExNzQ4OTZDNzAwN0IzQzFCIC8qIENvbmN1
cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGNTBFMTZGNUNEMDBCMzQ0
NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4ODFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0ODM2RTcxMzJEQTdCRTAw
NUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4
QTE4QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTVGRDAwN0ExODlCMDUxMDAwNjMzMjMxIC8qIENvbnNvbGVNZXNzYWdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5OTZCNzMxOTFCREEwNjgwMDAzMzFCODQgLyogQm9vbGVhblByb3RvdHlw
ZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDg2MThCQzFBNTYwMEJFREY3NiAvKiBD
b25zb2xlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTYyMDIsNiArNjU4OSw3IEBACiAJ
CQkJQzJGQzlCRDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJsb2NrSW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEyIC8qIENvcGllZFNwYWNlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAyRDE0QTNDNkUwMDA1NzhFNjUgLyogQ29waWVkU3Bh
Y2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyNDFCREFDREFDMDA4MEZGNzQg
LyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0MxMUFEMUJDMzg2MkMwMEM3NENE
QiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1QTUyRDAxN0FERDcxNzAw
OEVDQjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyMzlEMTgxNjI2MkJE
RDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTYyMTMsNiArNjYw
MSw3IEBACiAJCQkJOTk1OUU5MkIxQkQxN0ZBNDAwMUFBNDEzIC8qIGNzc21pbi5weSBpbiBIZWFk
ZXJzICovLAogCQkJCTJBMTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0
ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENENkUwMDEzMUY4RiAvKiBEYXRh
Rm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyog
QjNCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZERjE3QjZCNUFCMDBB
N0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDRDIwMzRBMEUxNzEzNUUw
MDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTQxMzU5Q0Yz
MEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGluIEhlYWRlcnMgKi8sCkBAIC02
MjMzLDYgKzY2MjIsNyBAQAogCQkJCUE3MDREOTAzMTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0
cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0RDkwNDE3QTBCQUE4MDA2
QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0cmFjdFZhbHVlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU3MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZl
cnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE4RDNE
MDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0IyRTQgLyogREZHQWRqYWNlbmN5
TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjQzLDcgKzY2MzMsOSBAQAogCQkJCTBGMkREODE0
MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNDg1MzIyMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdBcml0aE1vZGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAvKiBERkdBcnJheWlmeVNsb3dQ
YXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNzFCREFDREFDMDA4MEZG
NzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5NDg1MTVF
NDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5
QTI5NTE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJhY3RTdGF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWls
YWJpbGl0eU1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjUzLDYgKzY2NDUsNyBAQAogCQkJCUE3
RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXBJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyog
QjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEw
MDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkYxNThEMTlC
N0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzNDRDAwMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTYyOTIsOCArNjY4NSwxMCBAQAogCQkJCTBGNjZFMTZDMTRERjNGMTYwMEI3QjJF
NCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5QTI5NjE3QTBCQzc0MDBFRTI2
MTggLyogREZHRWRnZURvbWluYXRlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc5ODZENTcxN0Ew
QkIxRTAwQTk1REQwIC8qIERGR0VkZ2VVc2VzU3RydWN0dXJlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY4RjE0MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERGR0Vwb2NoLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyogREZHRXhpdFByb2ZpbGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2tVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUxNzk3MzhCODAwOURGNzQ0IC8q
IERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCRkYzQzAxNzk4Njg5
NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIuaCBpbiBIZWFkZXJzICovLApA
QCAtNjMyMyw2ICs2NzE4LDcgQEAKIAkJCQk2MkYyQUEzODFCMEJFREUzMDA2MTBDN0EgLyogREZH
TGF6eU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk4MTdBMEJDNzQwMEVFMjYxOCAv
KiBERkdMSUNNUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5QzRCMTVFMUJBMjE1OEYwMEZE
NTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU4NjFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0xp
dmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxOUIxNkI3MjlG
QTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzY3
QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRlckNyZWF0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLApAQCAtNjMzMSw2ICs2NzI3LDcgQEAKIAkJCQkwRjJCREM0NTE1MjI4MDFC
MDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRTg5
MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERGR01pbmlmaWVkSUQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkJEQzQ2MTUyMjgwMjAwMENEODkxMCAvKiBERkdNaW5pZmllZE5vZGUuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTE0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzYxQURGMDkwMTAwRUQ3OTJDIC8qIERGR01vdkhpbnRS
ZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjJDRDVDMUI2MUE0RjgwMDQ5NTVB
OCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NE
MDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9ycy5oIGluIEhlYWRlcnMgKi8s
CkBAIC02MzQ5LDYgKzY3NDYsNyBAQAogCQkJCTBGQzA5NzZBMTQ2OEE2RjcwMENGMjQ0MiAvKiBE
RkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJFQzE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI5MjFDMTZEMDJGMTEw
MDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8qIERGR09TUkV4aXRDb21waWxl
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBGQzAwMzgyQzBFIC8qIERGR09T
UkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzOTJDOEExQjQ2MTg4
NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVycyAqLywKQEAgLTYzNjYsNiAr
Njc2NCw4IEBACiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2IC8qIERGR1Byb3BlcnR5VHlw
ZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZCOEY5RTAwOTEwNTJBIC8qIERG
R1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQTFCRkExQTlFQ0I3RDAwMERFMDFB
IC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU2
RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdSZWdpc3RlckJhbmsuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdGOCAvKiBERkdTYWZlcG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQzMTdBMEJCRkQwMEE4REI4MSAvKiBERkdTYWZl
VG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTYzOTAsNiArNjc5MCw3IEBACiAJCQkJMEZE
OEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRDhBMzJBMTdENTFGNTcwMENBMkM0MCAvKiBERkdUb0ZUTERl
ZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkMx
N0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdFMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTcyMTFFMTkzQjlDNTkw
MDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjYzOTQzRjE1
Qzc1RjE5MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCRTBGNzcxNkMxREIxMjAwODJDNUU4IC8qIERGR1VuaWZpY2F0aW9uUGhhc2Uu
aCBpbiBIZWFkZXJzICovLApAQCAtNjQwMSw2ICs2ODAyLDcgQEAKIAkJCQkwRjYyMDE3NDE0M0ZD
RDMzMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhRHVtcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkxNTIyODA5NjAwQ0Q4OTEwIC8qIERGR1Zhcmlh
YmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzRCMTUyMjgwOUQwMENE
ODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZG
Qzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lzdGVyQWxsb2NhdGlvblBoYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxODFCREEwNjgwMDAzMzFCODQgLyogQXJyYXlJ
dGVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNjQzMSw2ICs2ODMzLDcg
QEAKIAkJCQkwRjU2QTFEMzE1MDAwRjM1MDAyOTkyQjEgLyogRXhlY3V0aW9uQ291bnRlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYzQUM3NTQxODhFNUVDODAwMzIwMjlGIC8qIEV4aXRpbmdKSVRU
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxMDU4NjE2NzU0ODEyMDBGOEFCNkUgLyogRXhp
dEtpbmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4M0FCMTRCQ0Y1QkIwMDg4NUI0
RiAvKiBFeHByZXNzaW9uUmFuZ2VJbmZvLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4QUYzODE3
QURCNUYzMDA1QUIxNzQgLyogRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0E4
QUYzOTE3QURCNUYzMDA1QUIxNzQgLyogRmxvYXQ2NEFycmF5LmggaW4gSGVhZGVycyAqLywKQEAg
LTY0OTEsNiArNjg5NCw3IEBACiAJCQkJMEZFQTBBMjAxNzA4QjAwNzAwQkI3MjJDIC8qIEZUTFR5
cGVkUG9pbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3
IC8qIEZUTFVud2luZEluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGREIyQ0NBMTczREE1MjMw
MDdCM0MxQiAvKiBGVExWYWx1ZUZyb21CbG9jay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NzcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY1QTYyODQxODhDOThENDAwNzJDOURGIC8qIEZUTFZhbHVlUmFuZ2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMDMzMkM2MThCNTNGQTkwMDVGOTc5QSAvKiBGVExXZWlnaHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMDMzMkM4MThCNTQ2RUMwMDVGOTc5QSAvKiBGVExXZWlnaHRlZFRh
cmdldC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDk4LDggKzY5MDIsMTAgQEAKIAkJCQkyQTgzNjM4
QTE4RDdEMEZFMDAwMEVCQ0MgLyogRnVsbEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0MDQwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9uQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjBGMUEwMTZCNzJBMUEwMDVERjk1QiAvKiBGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzQTFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzEwRkIxOTc0
QUU2MTAwODA4NTdDIC8qIEZ1bmN0aW9uSGFzRXhlY3V0ZWRDYWNoZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkU0QkZGMkMxQUQ0NzZFNzAwMDg4Rjg3IC8qIEZ1bmN0aW9uT3ZlcnJpZGVzLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUyRjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MDUwRTE2RjVDRDAwQjM0NDYwIC8qIEZ1bmN0aW9u
UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk2MkQyRDM5MDFBREYxMDNGMDAwMjA2QzEg
LyogRnVuY3Rpb25SYXJlRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQ0U2M0QxOENBNUEw
MzAwRUQwMTkxIC8qIEdDQWN0aXZpdHlDYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTM4
LDYgKzY5NDQsNyBAQAogCQkJCUM0NzAzQ0Q1MTkyODQ0Q0MwMDEzRkJFQSAvKiBnZW5lcmF0b3Jf
dGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMTkxQUE5MDkxMTAwRDMzQjMz
IC8qIEdlbmVyaWNBcmd1bWVudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFBMUFBOTA5
MTEwMEQzM0IzMyAvKiBHZW5lcmljQXJndW1lbnRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1MEExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkUwNTAxQjFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY09mZnNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RTAxN0I2QjVBQjAwQTdBRTNGIC8qIEdlbmVyaWNUeXBlZEFycmF5
Vmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTExN0I2QjVBQjAwQTdBRTNGIC8qIEdl
bmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjU2Myw2ICs2
OTcwLDcgQEAKIAkJCQlDMkU1MjZCRTE1OTBFRjAwMDA1NEU0OEQgLyogSGVhcFRpbWVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlGRTdCQTYxMDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBENTE0QkJEMjRCMDBCRkUyNzIgLyogSG9zdENh
bGxSZXR1cm5WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MEMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29tbXV0YXRpdml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2
RjVDRDAwQjM0NDYwIC8qIElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVB
MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVGRDAwNzYxODlCMDM4QzAwNjMzMjMxIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhl
YWRlcnMgKi8sCkBAIC02NjE2LDYgKzcwMjQsNyBAQAogCQkJCUExQjlFMjNDMUI0RTBENjcwMEJD
N0ZFRCAvKiBJbnRsQ29sbGF0b3JDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4
MTkzRTMxQjRFMENEQjAwRkMxMDI5IC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmx1dC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTFCOUUyM0UxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRv
clByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUExODE5M0U0MUI0RTBD
REIwMEZDMTAyOSAvKiBJbnRsQ29sbGF0b3JQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlBMTU4N0Q2RTFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1lRm9ybWF0LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTU4N0Q3MDFCNERDMTQxMDBENjk4NDkgLyogSW50bERhdGVUaW1l
Rm9ybWF0Q29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjY0Niw2ICs3MDU1LDcgQEAK
IAkJCQkwRjI0RTU0RDE3RUUyNzQ5MDBBQkIyMTcgLyogSklUT3BlcmF0aW9ucy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY3NjZEMzExNUFBODExMjAwOEYzNjNFIC8qIEpJVFN0dWJSb3V0aW5lLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQyQzE1QThDQzNBMDA4RjM2M0UgLyogSklUU3R1YlJv
dXRpbmVTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTkxMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1RUY5MUYxNjg3OEY3RDAwM0U1
QzI1IC8qIEpJVFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDNzEyRTMxN0NEODc5MzAw
OENDOTNDIC8qIEpJVFRvREZHRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzZGNTRBMzEzQjI4QUFCMDBFRjJCQ0UgLyogSklUV3JpdGVCYXJyaWVyLmgg
aW4gSGVhZGVycyAqLywKQEAgLTY2NTYsOSArNzA2NiwxMSBAQAogCQkJCTBGMkI2NkU1MTdCNkI1
QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkU3MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFOTE3QjZCNUFCMDBBN0FFM0YgLyogSlNBcnJheUJ1
ZmZlclZpZXcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NUIzMUJERUQ5NTcwMDgwRkY3NCAv
KiBCM0NvbnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVBMTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QkRBRUNCMTdGNEVBMTQwMEY2MTQwQyAvKiBKU0FycmF5SXRlcmF0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCThCMTQxODZEMUI2MjUyN0YwMEZCMjA2OCAvKiBKU0Fycm93RnVuY3Rpb24uaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTEyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91
YmxlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDE4MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0Jhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MEQxN0Q3MEU4QUQ0QTkwMDBDRDE3RCAv
KiBKU0Jhc2VQcml2YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkZBOUU5MjE0MkJCQjJFMDAx
NzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKQEAgLTY2NzUsNiArNzA4
Nyw4IEBACiAJCQkJODY1QTMwRjExMzUwMDdFMTAwQ0RCNDlFIC8qIEpTQ0pTVmFsdWVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxRDBFMTZGNUNEMDBCMzQ0NjAgLyogSlNDbGFz
c1JlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwODgxOEJDMUE1NjAwQkVERjc2IC8qIEpT
Q29uc29sZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjEzMTY3QkFC
RDcwMDZENzYwQSAvKiBKU0NvbnRleHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTNDNjE3MTY3
QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHRJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QTU4QzAyNDIxOEU0QTQxQTAwMDMyQkM1IC8qIEpTQ29udGV4dFByaXZhdGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjY5MCw2ICs3MTA0LDcgQEAKIAkJCQlGRTM4NEVFNjFBRERCN0FEMDA1NURFMkMg
LyogSlNEb2xsYXJWTS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzODRFRTgxQUREQjdBRDAwNTVE
RTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDJE
MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUyMDFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFM0M2MTQxNjdCQUJENzAwNkQ3NjBBIC8qIEpTRXhwb3J0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0I0QUNBRjE0ODRDOUNFMDBCMzhBMzYgLyogSlNFeHBvcnRNYWNyb3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkVGMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Zsb2F0
MzJBcnJheS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzAwLDExICs3MTE1LDEzIEBACiAJCQkJMEYy
QjY2RjExN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZGMjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRB
cnJheVZpZXdDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjMxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3Q29uc3RydWN0b3JJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0NTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBK
U0dlbmVyaWNUeXBlZEFycmF5Vmlld0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2
NkY1MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTM5MTdFN0IxQjc5MDZGQTAwMEVCRDMzIC8qIEpTR2VuZXJp
Y1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZGNjE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5
cGVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTdFMDdBQTFCOEZDRkI5MDA4NDAwQkEg
LyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTFCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQyMTBFMTZGNUNEMDBCMzQ0NjAgLyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE1RkQwMDg2MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVDM0ExQTYxOEMwNDkwMjAwQzk1OTNBIC8qIEpT
R2xvYmFsT2JqZWN0Q29uc29sZUNsaWVudC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzM1LDYgKzcx
NTIsNyBAQAogCQkJCUE3MDA4NzQyMTdDQkU4RUIwMEMzRTY0MyAvKiBKU01hcC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTc0REVGOTYxODJEOTkxNDAwNTIyQzIyIC8qIEpTTWFwSXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5NTlFOTJEMUJEMTdGQTQwMDFBQTQxMyAvKiBqc21pbi5weSBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFM0QyMzlDOTFCODI5QzFDMDBCQkVGNjcgLyogSlNNb2R1
bGVFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTMxOENCQzExQjhBRUY1MTAwQTI5
MjlEIC8qIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzlE
QTRBNzFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuaCBpbiBIZWFkZXJzICovLApA
QCAtNjc2NCw2ICs3MTgyLDcgQEAKIAkJCQlBN0MxRUFGMDE3OTg3QUI2MDAyOTlEQjIgLyogSlNT
dGFja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI3MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFODU1MzkxMTFCOTk2ODAwMUFG
NTFFIC8qIEpTU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0UxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEVD
MEVDMzFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjYwMEI1QTcxNTJCQUFBNzAwOTFFRTVGIC8qIEpTU3RyaW5nSm9pbmVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQyODBFMTZGNUNEMDBCMzQ0NjAgLyogSlNTdHJpbmdSZWYuaCBp
biBIZWFkZXJzICovLApAQCAtNjgyMSw5ICs3MjQwLDExIEBACiAJCQkJMEY0NjgwQTMxNEJBN0Y4
RDAwQkZFMjcyIC8qIExMSW50RXhjZXB0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0Njgw
Q0IxNEJCQjE3MjAwQkZFMjcyIC8qIExMSW50T2ZmbGluZUFzbUNvbmZpZy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVEMjg3QjIxNUVDOUE1NzAwREE4MTYxIC8qIExMSW50T3Bjb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwQTUxNEJBN0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1Bh
dGhzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjBCODM5RDE0QkNGNDY2MDA4ODVCNEYgLyogTExJ
bnRUaHVua3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUNFMTgwNUU3NTUwMDQ3MkNFNCAv
KiBMTFZNQVBJLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4QzFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3RhY2tTbG90LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFDRjE4MDVFNzU1MDA0
NzJDRTQgLyogTExWTUFQSUZ1bmN0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUFCMzgx
Nzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQ0VGQUQzMTgwNUVEQ0MwMDQ3MkNFNCAvKiBMTFZNSGVhZGVycy5oIGluIEhlYWRlcnMgKi8s
CkBAIC02ODM2LDEyICs3MjU3LDE0IEBACiAJCQkJODZEM0IyQzYxMDE1NkJERTAwMjg2NUU3IC8q
IE1hY3JvQXNzZW1ibGVyQVJNLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUEwMDlDMDE4MzFBMjJE
MDBDRjg3MTEgLyogTWFjcm9Bc3NlbWJsZXJBUk02NC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZB
REQxNDYwRkRERUE5ODAwMDZFRUMyIC8qIE1hY3JvQXNzZW1ibGVyQVJNdjcuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTNDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2M0IyM0UwMEZDNjExODkwMDcwM0FBNCAvKiBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QzU2OEUxMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNy
b0Fzc2VtYmxlck1JUFMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFNjhDNjM3MUI5MERFMDQwMDQy
QkNCMyAvKiBNYWNyb0Fzc2VtYmxlclByaW50ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2QUU2
NEE5MTM1RTVFMUMwMDk2MzAxMiAvKiBNYWNyb0Fzc2VtYmxlclNINC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODYwMTYxRTQwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2LmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNTBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJs
ZXJYODZfNjQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU2MEYzQTgz
QzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTcwMDg3M0ExN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNzg1MDdENzE3Q0JDNkZEMDAxMUY2RTcgLyogTWFwRGF0YS5oIGluIEhlYWRl
cnMgKi8sCkBAIC02ODY3LDYgKzcyOTAsNyBAQAogCQkJCUJDMDJFOTExMEUxODM5REIwMDBGOTI5
NyAvKiBOYXRpdmVFcnJvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzAyRTkx
MzBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCUUzM0U4RDIxMUI5MDEzREUwMDM0NkI1MiAvKiBOYXRpdmVTdGRGdW5jdGlvbkNlbGwu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNo
cG9pbnRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMjAxNkQwMzNCNzAwNTVBNURC
IC8qIE5vZGVDb25zdHJ1Y3RvcnMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDNGMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBOb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTlFNDVBMjgxOEExQjI1
OTAwMjZEODhGIC8qIE5vbmRldGVybWluaXN0aWNJbnB1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
ODg3LDYgKzczMTEsNyBAQAogCQkJCUUxMjRBOEY3MEU1NTU3NzUwMDMwOTFGMSAvKiBPcGFxdWVK
U1N0cmluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUREQjFGNjMxOEQ3N0RCRTAwOUI1OEE4IC8q
IE9wYXF1ZVJvb3RTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTk2OUEwNzlCMEVEMUQzQUUwMEYx
RjY4MSAvKiBPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRD
MkMxNTFGREU5MTAwQ0Q4OTEwIC8qIE9wZXJhbmRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzA0
NDdFQTE3QTBCRDQ2MDBGNTg5OEUgLyogT3BlcmFuZHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQ0ODBFMTZGNUNEMDBCMzQ0NjAgLyogT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02OTAwLDEzICs3MzI1LDE3IEBACiAJCQkJMEZGOUNFNzQxQjlDRDZEMDAwNEVEQ0E2
IC8qIFBvbHltb3JwaGljQWNjZXNzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkU4MzQxODFBNkVG
OTdCMDBEMDQ4NDcgLyogUG9seW1vcnBoaWNDYWxsU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGOTgyMDYxMTZCRkUzODMwMDI0MEQwMiAvKiBQcmVjaXNlSnVtcFRhcmdldHMuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0
aW9uQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4OTE2QjAxNTVGMjg2MzAwQ0IyQjlB
IC8qIFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyMjFCREFDREFDMDA4
MEZGNzQgLyogQjNPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDUwMEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5NUNENDU3NzBFMUM0RkRE
MDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1NDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2Rl
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAwOUNDQjA3IC8qIFByb2Zp
bGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBp
bGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMxNjZBRDM2MDAwMEY1QkEz
IC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTI4LDEw
ICs3MzU3LDEzIEBACiAJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0IyIC8qIFByb3BlcnR5U3Rv
cmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2RjVDRDAwQjM0NDYwIC8qIFBy
b3RlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzRDMzNCMTZBQTJEOTUwMDYyRjAxRCAvKiBQ
cm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjU3ODBBMjE4RkUxRTk4
MDAxRTcyRDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxNUNEMjMxQkE1Rjk4
NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MzMyQTQx
NENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1dERpcmVjdEluZGV4TW9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAwRDUyQUUwIC8qIFB1dEtp
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEwMDQ3NzVBNCAvKiBQdXRQ
cm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjk1Miw2ICs3Mzg0LDcgQEAKIAkJCQkw
RkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1N0QyM0VFMTg5MUI1NTQwMDMxQzdGQSAvKiBSZWd1bGFyRXhwcmVzc2lvbi5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8qIFJlamVjdC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNw
ZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUU4MTgyMzQwQjMwMEE4MkU2OSAvKiBS
ZW1vdGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUVBMTgyMzQwQjQwMEE4
MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JDb25zdGFudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
QkExNUYwMTgyMzQ1QUYwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmggaW4g
SGVhZGVycyAqLywKQEAgLTY5NTksNiArNzM5Miw3IEBACiAJCQkJQTVCQTE1RUQxODIzNDBCNDAw
QTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjlFQkNCNzBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcwQjBBOUQxMUE5QjY2NDYwMDAxMzA2QSAvKiBSdW50aW1lRmxhZ3MuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAvKiBSdW50aW1lVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQjMxQjkxNDA1NzdENzAwREI0NzVBIC8qIFNhbXBsaW5n
Q291bnRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTg4LDYgKzc0MjIsNyBAQAogCQkJCUE3MDlG
MkYwMTdBMEFDMDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTkzMzA0MDA0MEU2QTc0OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3MuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDY0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VDb2RlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODUwRTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VQcm92
aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNv
dXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0OURDMTZEMTJFRjI5NTMw
MDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhlYWRlcnMgKi8sCkBAIC03
MDA3LDYgKzc0NDIsNyBAQAogCQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTdHJpbmdQ
cm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNCMTM0RkYwQTYwMEFGQURCNSAv
KiBTdHJvbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQzN0UxNDAwMDVGREUyNiAv
KiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDREUzQUI4MEU2Qzgy
RjUwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTdFNEVFNzA5MEVC
Qjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFB
QUEzMTIxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5oIGluIEhlYWRlcnMgKi8s
CkBAIC03MDQzLDEwICs3NDc5LDEyIEBACiAJCQkJMEYyRDRERUExOTgzMkRBQzAwN0Q0QjE5IC8q
IFR5cGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzExMDExOTc1QjQ2NzAwODA4
NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCNkMzOTFB
RjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQk1
MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJENERFQzE5ODMyREM0MDA3RDRCMTkgLyogVHlwZVByb2ZpbGVyTG9nLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJENERGMDE5ODMyREQ2MDA3RDRCMTkgLyogVHlwZVNldC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8qIHVkaXM4Ni5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4RDAwNENCOUZGIC8qIHVk
aXM4Nl9kZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQyMTU4RUJFOTEwMDRDQjlG
RiAvKiB1ZGlzODZfZXh0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0NDE1OEVCRTkx
MDA0Q0I5RkYgLyogdWRpczg2X2lucHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTcwODQsOCArNzUy
MiwxMCBAQAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNDMTM0RkYwQTYwMEFGQURCNSAvKiBXZWFrLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUwMjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2Nr
SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGOUYxNEVFMUFDQzAwRDZENUQ0IC8q
IFdlYWtCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCRkNFNjkxMENEQjFGQzAwMzY0Q0NF
IC8qIFdlYWtHQ01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQUQ4NkE5M0UxQUE0
RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0
RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCTE0RTg0RkEyMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1wbC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC03MTA3LDkgKzc1NDcsMTIgQEAKIAkJCQk5OTU5RTkyRTFCRDE3RkE0MDAxQUE0MTMg
LyogeHhkLnBsIGluIEhlYWRlcnMgKi8sCiAJCQkJNDUxNTM5QjkxMkRDOTk0NTAwRUY3QUM0IC8q
IFlhcnIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEzMzcwMEE5RkU3QiAvKiBZ
YXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NzQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCNDMxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50YXhD
aGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBv
c3Rwcm9jZXNzaW5nID0gMDsKQEAgLTcxMzQsNiArNzU3NywyMiBAQAogCQkJcHJvZHVjdFJlZmVy
ZW5jZSA9IDBGQ0VGQUI2MTgwNUQ2MTYwMDQ3MkNFNCAvKiBsaWJsbHZtRm9ySlNDLmR5bGliICov
OwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlwZS5saWJyYXJ5LmR5bmFt
aWMiOwogCQl9OworCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovID0gewor
CQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDBG
RUM4NUE4MUJEQjVDRjEwMDgwRkY3NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBC
WE5hdGl2ZVRhcmdldCAidGVzdGIzIiAqLzsKKwkJCWJ1aWxkUGhhc2VzID0gKAorCQkJCTBGRUM4
NTk1MUJEQjVDRjEwMDgwRkY3NCAvKiBTb3VyY2VzICovLAorCQkJCTBGRUM4NUEyMUJEQjVDRjEw
MDgwRkY3NCAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxkUnVsZXMgPSAoCisJCQkp
OworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0ZXN0YjM7CisJCQlwcm9k
dWN0TmFtZSA9IHRlc3RhcGk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0gMEZFQzg1QUQxQkRCNUNG
MTAwODBGRjc0IC8qIHRlc3RiMyAqLzsKKwkJCXByb2R1Y3RUeXBlID0gImNvbS5hcHBsZS5wcm9k
dWN0LXR5cGUudG9vbCI7CisJCX07CiAJCTBGRjkyMkMzMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NM
TEludE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CiAJ
CQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZGOTIyQ0ExNEY0NkIxMzAwNDFBMjRFIC8qIEJ1
aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0ICJKU0NMTEludE9mZnNl
dHNFeHRyYWN0b3IiICovOwpAQCAtNzI4OSw2ICs3NzQ4LDcgQEAKIAkJCQkxNEJENTlCRTBBM0U4
RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywKIAkJCQk5MzJGNUJEQTA4MjJBMUM3MDA3MzY5NzUg
LyoganNjICovLAogCQkJCTY1MTEyMkY3MTQwNDZBNEMwMDJCMTAxRCAvKiB0ZXN0UmVnRXhwICov
LAorCQkJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8sCiAJCQkJNUQ2QjJB
NDcxNTJCOUUxNzAwNTIzMURFIC8qIFRlc3QgVG9vbHMgKi8sCiAJCQkpOwogCQl9OwpAQCAtNzUz
Niw2ICs3OTk2LDE0IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vz
c2luZyA9IDA7CiAJCX07CisJCTBGRUM4NTk1MUJEQjVDRjEwMDgwRkY3NCAvKiBTb3VyY2VzICov
ID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0
IC8qIHRlc3RiMy5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQlydW5Pbmx5Rm9yRGVwbG95
bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEZGOTIyQzQxNEY0NkIxMzAwNDFBMjRF
IC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKIAkJCWJ1
aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC03NTkxLDYgKzgwNTksNyBAQAogCQkJCTBG
NTVGMEY0MTREMTA2MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERpc2Fzc2VtYmxlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkQzQjJDMzEwMTU2QkRFMDAyODY1RTcgLyog
QVJNQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODUwMTcxNzk1RTIwMDM1
MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NUMwMjg1
QzE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
NzU5OCw4ICs4MDY3LDEwIEBACiAJCQkJQTdBOEFGMzQxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5
QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5OUQ0MTg0RUUzMTgwMDlDMTBBQiAv
KiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdBOEFGMzYxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyVmlldy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUzRDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkYxMDdFQzM3NjAwNDI3QTQ4IC8qIEFycmF5Q29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdCREFFQzgxN0Y0RUExNDAwRjYxNDBD
IC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY2Mzk0NTQxNUQwNzA1NTAwNkE1OTdDIC8qIEFycmF5UHJvZmlsZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlDMDEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlQcm90b3R5
cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNEU1NDAxN0VBOUY1OTAwQUJCMjE3IC8qIEFz
c2VtYmx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MjAsOCArODA5MSwxMCBAQAog
CQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNjJFQzlCQjYxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxGcmFtZVNodWZmbGVEYXRh
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ2MUI4NEZCNDYwMDE4MDFGQSAvKiBDYWxs
RnJhbWVTaHVmZmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxMzFCREFDREFDMDA4
MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDUx
Qjg0RkI0MDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAxNEJDRjcxNjAwODg1QjRG
IC8qIENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzI5RDE0Q0E3REMz
MDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjI3Njcz
MjMxQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYz
NCw2ICs4MTA3LDcgQEAKIAkJCQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2Rl
T3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAv
KiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU5MzFCREIxRTEwMDA4
MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY5MTRE
Mjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OEY5NDNDMTY2NzYzMTMwMEQ2MTk3MSAvKiBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGOEY5NDQyMTY2NzYzMzUwMEQ2MTk3MSAvKiBDb2RlVHlwZS5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTc2NDEsNiArODExNSw3IEBACiAJCQkJQTcwOUYyRjIxN0EwQUMy
QTAwNTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTUz
QTMzMTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhjZXB0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRpb25S
ZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OEIxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMjEwN0VDMzc2MDA0
MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjZGQzc1MDE5NjEx
MEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDZCMTZEODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9vdHMuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03NjY4LDYgKzgxNDMsNyBAQAogCQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkz
QyAvKiBEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
RkU1MDY4NjcxQUUyNUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFw
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NThEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJU
bXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERG
R0Fic3RyYWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MDExQjYxOEFBRjAw
QzgwRTFFIC8qIERGR0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjE4RDNDRjFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRp
dmVTdHJ1Y3R1cmVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY3Nyw2ICs4MTUz
LDcgQEAKIAkJCQkwRjYzOTQ4NDE1RTQ4MTE4MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3RDlBMjk0MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxB
YnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjY2RUM2MTgzNTY3MkIwMEQw
MTdGMSAvKiBERkdBdmFpbGFiaWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODcx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYy
QjlDRTIxOUQwQkE3RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFn
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNB
RDggLyogREZHQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2ODUsNiArODE2Miw3
IEBACiAJCQkJODZFQzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBh
YmlsaXRpZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMy
IC8qIERGR0NGQVBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQ2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0
NEM5OTUwMDNFRDBGRiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGOUQzNjk0MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTc3QTQyM0YxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2Ji
ZXJpemUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NzIyLDYgKzgyMDAsNyBAQAogCQkJCTJBODgw
Njc4MTkxMDdENTUwMENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk4NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEYyRkNDRjkxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBv
aW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJBbGxvY2F0ZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYwMTk2QjhGOUUw
MDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODQx
NjgxQkE4QzMyMTAwNjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RT
dGF0ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3NjQsMTQgKzgyNDMsMTcgQEAKIAkJCQkwRkMw
OTc3MjE0NjkzQUY5MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxl
ckNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM5MkM4OTFCNDYxODg0MDA4NDQ3Mjgg
LyogREZHT1NSRXhpdEZ1enouY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRkM5QUExNjgx
QTNCMzAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYyMzVCRUQxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjYyMzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZH
UGhhbnRvbUluc2VydGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVCMTRF
RjkwQUQwMEM3MjUzMiAvKiBERkdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUw
RjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyQjlDRUExOUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3OEE5NzdBMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQkUwRjc0MTZDMURCMDkwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9u
SW5qZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUQxNEVGOTBCMzAw
QzcyNTMyIC8qIERGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3RO
dW1iZXJpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1
IC8qIERGR1Byb21vdGVkSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3
NjYyMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03Nzg5LDYgKzgyNzEsOCBAQAogCQkJCTBGQzIwQ0I1MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdT
dHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGODkzQkRCMTkz
NkUyM0MwMDEyMTFGNCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNzkwODU1MTlBMjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3Ry
YXRpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzNDFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyOTFC
REFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkZDQ0ZFMThBNjAwNzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQzA5N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5q
ZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODE2LDYgKzgzMDAsNyBAQAogCQkJ
CTJBODM2Mzg1MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTk5RTQ1QTI1MThBMUIyNTkwMDI2RDg4RiAvKiBFbmNvZGVkVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzcxMDdFQzM3NjAwNDI3QTQ4IC8qIEVy
cm9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDODEwN0VDMzc2MDA0MjdBNDgg
LyogRXJyb3JDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUI1OEMxNDE4N0I4
QjE2MDA5OEVGMEIgLyogRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0N0YzOUM5MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckluc3RhbmNlLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzg2MCw2ICs4MzQ1LDcgQEAKIAkJCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUg
LyogRlRMTGluay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFERjE4MDczOEMwMDA0NzJD
RTQgLyogRlRMTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEYxNzA1MTNE
QjAwQkI3MjJDIC8qIEZUTExvd2VyREZHVG9MTFZNLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTAwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyQjlDRjgxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JF
eGl0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg2Nyw2ICs4MzUzLDcgQEAKIAkJCQkwRkVBMEEy
QTE3MDk2Mjk2MDBCQjcyMkMgLyogRlRMT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NDg1MzI5MTg3REZERUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxs
RXZlcnl0aGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFCMTE4MTYzNUYzMDA1MjJG
MzkgLyogRlRMU2xvd1BhdGhDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIzMTgx
NjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY5RDMzOUExODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNl
cyAqLywKQEAgLTc4OTksNiArODM4Niw3IEBACiAJCQkJQTVGRDAwNzUxODlCMDM4QzAwNjMzMjMx
IC8qIElkZW50aWZpZXJzRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVGOEJDRDE1
NzU0NEE5MDAyNDVCNzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGMTNFMDRFMTYxNjRBMUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZl
cnJlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2
IC8qIEluZmVycmVkVHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjhCREVBMUFE
NENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkw
Niw2ICs4Mzk0LDcgQEAKIAkJCQk5RUE1QzdBMjE5MEYwODg3MDA1MDhFQkUgLyogSW5pdGlhbGl6
ZUxMVk1NYWMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDgxOTBGMDIxRTAwMUE5MUI1
IC8qIEluaXRpYWxpemVMTFZNUE9TSVguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDcx
OTBGMDFBNTAwMUE5MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1N0IxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3Rl
ZFNjcmlwdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0Ig
LyogSW5qZWN0ZWRTY3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OEUzNTkxMTg2
MERFQ0YwMDFGMjRGRSAvKiBJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03OTE3LDYgKzg0MDYsNyBAQAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNw
ZWN0b3JBZ2VudFJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2
MDMwMEJGQ0UyNyAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTMyNDM4NzE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3Bh
dGNoZXJzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwODExODlCMTkxQTAw
NjMzMjMxIC8qIEluc3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTdEMjNFNTE4OTBDRUJGMDAzMUM3RkEgLyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTMyNDM4OTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJv
bnRlbmREaXNwYXRjaGVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5NzMsNiArODQ2Myw3IEBA
CiAJCQkJODZGQTlFOTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDQwRjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Nv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGODkyMEE1MDhCMTAwMDA1RjA2
MSAvKiBKU0NhbGxiYWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NkYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEFCREY2
MDBBNDM3RkVGMDBFQ0NBMDEgLyogSlNDYWxsYmFja09iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk2NTdDRjQ1ODE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTdEODAxQTgxODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzk4MCw2ICs4NDcxLDggQEAKIAkJCQkxNDdGMzlENjEwN0VDMzc2MDA0
MjdBNDggLyogSlNDSlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRkNFNDBBNTFF
NDZCMDAwNUYwNjEgLyogSlNDbGFzc1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4
NzE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTkwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0g
aW4gU291cmNlcyAqLywKIAkJCQkxNEJENUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0
UmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MjAyOEI2MTc5NzYwMUUwMDk4MDI4QyAvKiBK
U0NUZXN0UnVubmVyVXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTkwLDE2ICs4NDgzLDE5
IEBACiAJCQkJRkUzODRFRTcxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52
aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAw
NURCQzhEIC8qIEpTRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MUQxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3OTdF
MDdBOTFCOEZDRkI5MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDIxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTR2xvYmFsT2Jq
ZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1RkQwMDg1MTg5QjFCN0UwMDYzMzIzMSAvKiBK
U0dsb2JhbE9iamVjdENvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUMzQTFB
NTE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTk0NTU5MjE4MjQ3NDQ3MDBDQzM4NDMgLyogSlNH
bG9iYWxPYmplY3REZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U5MTg5
MUIwNzcwMDMxQzdGQSAvKiBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0RnVu
Y3Rpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTAwN0MwMTg3Q0MzQzYwMEIzODg3OSAv
KiBKU0dsb2JhbE9iamVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUwRTRCNjMxODgwOURENTAwNjhBNDZEIC8qIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTI5MTg4RjEwNTkwMDExMEYxNCAvKiBKU0ds
b2JhbE9iamVjdFNjcmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTIzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NTEzRTVCRjE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxM0U1QzExODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDgwMUI4NDI5QTQw
MDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMTgs
NiArODUxNCw3IEBACiAJCQkJRTMxOENCQzAxQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzOURBNEE2MUI3RThCN0MwMDg0
RjMzQSAvKiBKU01vZHVsZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNFOEQxQzFC
OTAxM0MzMDAzNDZCNTIgLyogSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2Jq
ZWN0UmVmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODAzMSw2ICs4NTI4LDcgQEAKIAkJCQlFM0VG
ODg3NDFCNjZERjIzMDAzRjI2Q0IgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlBNTUyQzM3RjFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNw
ZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTI4RkYzQjE4QUM0
QUVDMDBCOENGMTIgLyogSlNSZXBsYXlJbnB1dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4
NzRBRTUxNUVCREU0QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTdDMEM0QUQxNjgxMDY3RTAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICov
LApAQCAtODA1OSw2ICs4NTU3LDcgQEAKIAkJCQk3MDlGQjg2NzFBRTMzNUM2MDAzOUQwNjkgLyog
SlNXZWFrU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5
QiAvKiBKU1dpdGhTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVF
MDA2RDc2MEEgLyogSlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQyODA4NzAxMDdFQzEzNDAwMTNFN0IyIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFu
ZFZhbHVlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwNjYsOSArODU2NSwxMiBAQAog
CQkJCTE0OEYyMUIwMTA3RUM1NDEwMDQyRUMyQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY0Mjc1NzE1OTE0QTIwMDA0Q0I5RkYgLyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0UyRUE2QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9i
amVjdExpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMw
IC8qIExMSW50Q0xvb3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAw
QkZFMjcyIC8qIExMSW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODRGRTFCREFD
REFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGMzhCMDExMTdDRjA3ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50RXhjZXB0
aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyog
TExJbnRTbG93UGF0aHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDc3LDYgKzg1NzksNyBAQAog
CQkJCUE3RTVBQjM3MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50
ZXJwcmV0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTWVtb3J5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0
NjAwM0JENUVEIC8qIE1hY2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkVCM0VDRjE2MjM3RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZDNTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNw
cCBpbiBTb3VyY2VzICovLApAQCAtODA4NiwxMCArODU4OSwxMiBAQAogCQkJCUE3QTRBRTA4MTc5
NzNCMjYwMDU2MTJCMSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNzAwODczOTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTc0REVGOTMxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9y
UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3M0QxN0NCRThE
MzAwQzNFNjQzIC8qIE1hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkI5MTZD
NTE0REEwNDBDMDBDQkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0MkQ2RjA4MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFj
ay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0MzQwQTQ4NDFBOTA1MUFGMDBENzNDQ0EgLyogTWF0
aENvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYg
LyogTWF0aE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMjgsMTcgKzg2MzMsMjEgQEAK
IAkJCQkwRkY3MjlBRDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlBRTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRl
Y29kZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMjkxNjc3MUMzMzAwOUNDQjA3IC8q
IFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUw
QjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRjcyOUFGMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNv
bXBpbGF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMTE2NkFEMzVDMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGRjcyOUIyMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFiYXNlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMTkwQ0FDMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29u
UmVhc29uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2NkFE
MzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NS
RXhpdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyog
UHJvZmlsZXJPU1JFeGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2Nzcx
QzNBMDA5Q0NCMDcgLyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkQzRTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0ZCNjBBNDEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVy
dHlEZXNjcmlwdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REU4MTA3RUM3RTcwMDY1
MDQ0NiAvKiBQcm9wZXJ0eVNsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQURFMzlGRkYxNkRE
MTQ0QjAwMDNDRDRBIC8qIFByb3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTQ3
LDEwICs4NjU2LDEyIEBACiAJCQkJMEYxNUNEMjIxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRG
bGFncy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyog
UHV0QnlJZFN0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzQjRBOTE4QjkyQzREMDAx
NzhBM0YgLyogUHV0QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MkIx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
RjYwQUMzMTY3NDBGODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUUzMzYzN0E1MUI2MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAg
aW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3ODFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJl
Z0V4cENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRF
RiAvKiBSZWdFeHBDYWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDIx
MDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODE2NCw2ICs4Njc1LDcgQEAKIAkJCQlBNUJBMTVFOTE4MjM0MEIzMDBBODJFNjkgLyogUmVt
b3RlSW5zcGVjdG9yLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OEYxODI0NUVGRDAwQ0Mz
ODQzIC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTVCQTE1RUMxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25u
ZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUVFMTgyMzQwQjQw
MEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYyNEU1NTAxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNTI3NzczREUxQUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtODE4Miw2ICs4Njk0LDcgQEAKIAkJCQlBNTRDRjJGOTE4NEVBRURBMDAy
MzdGMTkgLyogU2NyaXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NENGMkY1MTg0
RUFCMjQwMDIzN0YxOSAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5
OURBNTE3RDEyODU4MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1ODUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTc5MERENkQxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0ZXJh
dG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REExMTdEMTI4NDgwMDVG
NUZGOSAvKiBTZXRQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRTk4NDMxQTg5
MjI3NTAwNzU0RTkzIC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
ODE5Niw2ICs4NzA5LDcgQEAKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3Vs
YXRlZFR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUVBRjExNzk4N0FCNjAwMjk5REIy
IC8qIFN0YWNrVmlzaXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzMwQjYxMzEyNTAwNjhG
MDA5RDI1QjEgLyogU3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1MjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NDY5REVCMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0
b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUw
NDQ2IC8qIFN0cmluZ09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMTIsNiArODcyNiw3
IEBACiAJCQkJNzA1QjQxQUQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTcwNUI0MUFGMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA1QjQxQjExQTZFNTAxRTAwNzE2NzU3IC8q
IFN5bWJvbFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzRjFCREFDREFD
MDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MTlEMjgx
NTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcw
RUNBNjA3MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0ZXJTZXQuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MjQwLDYgKzg3NTUsNyBAQAogCQkJCTBGMjRFNTU4MTdGNzRF
REIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTc5RUUw
QkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4MzFCREFDREM3MDA4MEZGNzQgLyog
QWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyQzFBQTkwOTU2MDBE
MzNCMzMgLyogVmFyT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjBDMjU5MUE4MDEz
QUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE4
RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODI1OSw2
ICs4Nzc1LDcgQEAKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vha1NldENvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwOUZCODZCMUFFMzM1QzYwMDM5RDA2OSAv
KiBXZWFrU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBNEVDOTBCMTg2MEQ2
QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1N0QxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJyaWVyU3VwcG9y
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QUIzQTE3OTlFNEIyMDBEMjgzM0QgLyogWDg2
RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4
NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyODUs
NiArODgwMiwxMSBAQAogCQkJdGFyZ2V0ID0gMEZDRUZBQjUxODA1RDYxNjAwNDcyQ0U0IC8qIGxs
dm1Gb3JKU0MgKi87CiAJCQl0YXJnZXRQcm94eSA9IDBGQ0VGQUJDMTgwNUQ2NjMwMDQ3MkNFNCAv
KiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CiAJCX07CisJCTBGRUM4NUIxMUJEQjVEOEYwMDgw
RkY3NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJYVGFyZ2V0RGVw
ZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMg
Ki87CisJCQl0YXJnZXRQcm94eSA9IDBGRUM4NUIwMUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhDb250
YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCTBGRjkyMkQzMTRGNDZCMkYwMDQxQTI0RSAvKiBQ
QlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVwZW5kZW5jeTsK
IAkJCXRhcmdldCA9IDBGNDY4MEE5MTRCQTdGRDkwMEJGRTI3MiAvKiBMTEludCBPZmZzZXRzICov
OwpAQCAtODQwOSw2ICs4OTMxLDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IFByb2R1Y3Rpb247CiAJ
CX07CisJCTBGRUM4NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLyA9IHsKKwkJCWlzYSA9
IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBC
QzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CisJ
CQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsKKwkJCX07CisJ
CQluYW1lID0gRGVidWc7CisJCX07CisJCTBGRUM4NUFBMUJEQjVDRjEwMDgwRkY3NCAvKiBSZWxl
YXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmln
dXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0
YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1F
ID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkwRkVDODVBQjFC
REI1Q0YxMDA4MEZGNzQgLyogUHJvZmlsaW5nICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZp
Z3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAw
QzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGlu
Z3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9m
aWxpbmc7CisJCX07CisJCTBGRUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9uICov
ID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlv
blJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54
Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVz
dGIzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRkY5MjJDQjE0RjQ2
QjEzMDA0MUEyNEUgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlv
bjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1
NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtODc2MSw2ICs5MzE1LDE3IEBA
CiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRkVDODVBODFCREI1Q0YxMDA4MEZG
NzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgInRlc3Ri
MyIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVpbGRDb25maWd1
cmF0aW9ucyA9ICgKKwkJCQkwRkVDODVBOTFCREI1Q0YxMDA4MEZGNzQgLyogRGVidWcgKi8sCisJ
CQkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8qIFJlbGVhc2UgKi8sCisJCQkJMEZFQzg1QUIx
QkRCNUNGMTAwODBGRjc0IC8qIFByb2ZpbGluZyAqLywKKwkJCQkwRkVDODVBQzFCREI1Q0YxMDA4
MEZGNzQgLyogUHJvZHVjdGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklz
VmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwor
CQl9OwogCQkwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29uZmlndXJhdGlvbiBs
aXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciIgKi8gPSB7
CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9ucyA9
ICgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
OCBAQAogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKIAorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgZG91YmxlIE1hY3JvQXNzZW1ibGVyOjp0
d29Ub1RoZTMyID0gKGRvdWJsZSkweDEwMDAwMDAwMHVsbDsKQEAgLTQ3LDUgKzQ5LDcwIEBAIHZv
aWQgTWFjcm9Bc3NlbWJsZXI6OmNhbGxQcm9iZShzdGQ6OmZ1bmMKIAogfSAvLyBuYW1lc3BhY2Ug
SlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw6CisgICAgICAgIG91dC5wcmlu
dCgiTm90RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6
OkFib3ZlOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgi
QWJvdmVPckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVy
OjpCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsOgorICAgICAgICBvdXQucHJpbnQo
IkJlbG93T3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxl
cjo6R3JlYXRlclRoYW46CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuT3JFcXVhbDoK
KyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbk9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuOgorICAgICAgICBvdXQucHJpbnQo
Ikxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpM
ZXNzVGhhbk9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW5PckVxdWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE1hY3JvQXNzZW1ibGVy
OjpSZXN1bHRDb25kaXRpb24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNl
IE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJPdmVyZmxvdyIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6U2lnbmVkOgorICAg
ICAgICBvdXQucHJpbnQoIlNpZ25lZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNy
b0Fzc2VtYmxlcjo6UG9zaXRpdmVPclplcm86CisgICAgICAgIG91dC5wcmludCgiUG9zaXRpdmVP
clplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Olplcm86
CisgICAgICAgIG91dC5wcmludCgiWmVybyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBN
YWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJOb25aZXJvIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTYsOCArMTU5NiwxOSBA
QCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RGIHsKKworY2xh
c3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKK25hbWVz
cGFjZSBKU0MgeworCiAvLyBJZiB0aGVyZSBpcyBubyBhc3NlbWJsZXIgZm9yIHRoaXMgcGxhdGZv
cm0sIGF0IGxlYXN0IGFsbG93IGNvZGUgdG8gbWFrZSByZWZlcmVuY2VzIHRvCiAvLyBzb21lIG9m
IHRoZSB0aGluZ3MgaXQgd291bGQgb3RoZXJ3aXNlIGRlZmluZSwgYWxiZWl0IHdpdGhvdXQgZ2l2
aW5nIHRoYXQgY29kZSBhbnkgd2F5CiAvLyBvZiBkb2luZyBhbnl0aGluZyB1c2VmdWwuCkBAIC0x
NjExLDYgKzE2MjIsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBGUFJlZ2lzdGVySUQgeyBOb0ZQUmVn
aXN0ZXIgfTsKIH07CiAKK30gLy8gbmFtZXNwYWNlIEpTQworCiAjZW5kaWYgLy8gRU5BQkxFKEFT
U0VNQkxFUikKIAogI2VuZGlmIC8vIE1hY3JvQXNzZW1ibGVyX2gKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVy
bnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExB
UlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0Ug
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hlcgorCisjIE5vdGUgdGhhdCB0
aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNzb2NpYXRpb24gYW5kIGNhbm9u
Y2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5ldmVyIHNlZSBBZGQoQWRkKHgs
IGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkgYmVlbiByZWFz
c29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3QyKS4gQWxzbywgd2Ugd2lsbCBu
ZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGNhbm9uaWNhbGl6
ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBpbiB0aGlzIGNvZGUgd2UgbmV2
ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXphdGlvbnMKKyMgaGF2aW5nIGJl
ZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMgaW4g
QjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3QgbmVlZCB0byBtYXRjaCBBZGQo
eCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQgaW50byB0aGUgTG9hZC9TdG9y
ZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5IGZhbmN5IG1hdGhpbmcgdGhp
cyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0FkZFNoaWZ0MSA9IEFkZChTaGwo
aW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBBZGQoYmFzZSwgU2hsKGluZGV4
LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK0RpcmVjdApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJndW1lbnRSZWdW
YWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3VtZW50UmVnVmFsdWVfaAorI2RlZmluZSBCM0Fy
Z3VtZW50UmVnVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEFyZ3VtZW50UmVnVmFsdWUgOiBwdWJsaWMgVmFs
dWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyBy
ZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3VtZW50UmVnVmFs
dWUoKTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVnOyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIEFyZ3Vt
ZW50UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyByZWcpCisgICAg
ICAgIDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXJUeXBl
KCkgOiBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3JlZyhyZWcpCisgICAgeworICAgICAg
ICBBU1NFUlQocmVnLmlzU2V0KCkpOworICAgIH0KKworICAgIFJlZyBtX3JlZzsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjb25zdCBjaGFyKiBjb25zdCBC
YXNpY0Jsb2NrOjpkdW1wUHJlZml4ID0gIiMiOworCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVu
c2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRleCkKKyAg
ICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxv
Y2soKQoreworfQorCit2b2lkIEJhc2ljQmxvY2s6OmFwcGVuZChWYWx1ZSogdmFsdWUpCit7Cisg
ICAgbV92YWx1ZXMuYXBwZW5kKHZhbHVlKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVk
ZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vz
c29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nv
cihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6OnJlbW92ZVByZWRlY2Vzc29y
KHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3Io
QmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAgcmV0dXJuIEIzOjpyZXBs
YWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwg
bV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6IDsgZnJlcXVlbmN5ID0g
IiwgbV9mcmVxdWVuY3ksICJcbiIpOworICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKnRoaXMpCisg
ICAgICAgIG91dC5wcmludCgiICAgICIsIEIzOjpkZWVwRHVtcCh2YWx1ZSksICJcbiIpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2NrX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgor
I2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsK
K2NsYXNzIFZhbHVlOworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSo+IFZhbHVlTGlzdDsKKyAgICB0eXBlZGVmIFZlY3Rv
cjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEZy
ZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsgLy8gVGhpcyBtYXRjaGVzIENvbnRyb2xW
YWx1ZTo6U3VjY2Vzc29yTGlzdAorCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQ
cmVmaXg7CisKKyAgICB+QmFzaWNCbG9jaygpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICBWYWx1ZUxpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkg
eyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZhbHVlTGlzdDo6aXRlcmF0b3IgZW5k
KCkgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7IH0KKyAgICBWYWx1ZUxpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuYmVnaW4oKTsgfQorICAgIFZhbHVl
TGlzdDo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuZW5kKCk7
IH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9
CisgICAgVmFsdWUqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5k
ZXhdOyB9CisgICAgVmFsdWUqJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fdmFsdWVzW2lu
ZGV4XTsgfQorCisgICAgVmFsdWUqIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5sYXN0
KCk7IH0KKyAgICBWYWx1ZSomIGxhc3QoKSB7IHJldHVybiBtX3ZhbHVlcy5sYXN0KCk7IH0KKwor
ICAgIGNvbnN0IFZhbHVlTGlzdCYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0K
KyAgICBWYWx1ZUxpc3QmIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGFwcGVuZChWYWx1ZSopOworCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhcHBl
bmROZXcoUHJvY2VkdXJlJiwgQXJndW1lbnRzLi4uKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nl
c3NvcnMoKSBjb25zdDsKKyAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNp
Z25lZCBpbmRleCkgY29uc3Q7CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpOworICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdDsK
KyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBzdWNj
ZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisgICAgQmFzaWNCbG9jayomIHN1Y2Nl
c3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KTsKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2lj
QmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpOworICAgIFN1Y2Nlc3NvckNv
bGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29y
QmxvY2tzKCkgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7
IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNl
c3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhd
OyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHBy
ZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisgICAgUHJlZGVj
ZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorCisg
ICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZW1vdmVQcmVk
ZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNC
bG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCisgICAgZG91YmxlIGZyZXF1ZW5jeSgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICAvLyBJbnN0YW50aWF0
ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBm
cmVxdWVuY3kpOworCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1
ZXM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2Zy
ZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAg
RGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1f
YmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Js
b2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQo
IjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Js
b2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChjb25zdCBCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisjZGVmaW5lIEIzQmFzaWNCbG9j
a0lubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogQmFz
aWNCbG9jazo6YXBwZW5kTmV3KFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gcHJvY2VkdXJlLmFkZDxWYWx1ZVR5
cGU+KGFyZ3VtZW50cy4uLik7CisgICAgYXBwZW5kKHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworaW5saW5lIHVuc2lnbmVkIEJhc2ljQmxvY2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25z
dAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29y
cygpOworfQorCitpbmxpbmUgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29u
dHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitpbmxpbmUgRnJlcXVlbnRlZEJs
b2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJu
IGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOworfQorCitpbmxp
bmUgY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdCYgQmFzaWNCbG9jazo6c3VjY2Vzc29y
cygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNj
ZXNzb3JzKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Js
b2NrOjpzdWNjZXNzb3JzKCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+
KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2sqIEJhc2ljQmxvY2s6OnN1
Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBzdWNjZXNz
b3IoaW5kZXgpLmJsb2NrKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6
c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIHN1Y2Nlc3Nvcihp
bmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9j
aywgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2tz
KCkKK3sKKyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNz
b3JMaXN0PihzdWNjZXNzb3JzKCkpOworfQorCitpbmxpbmUgU3VjY2Vzc29yQ29sbGVjdGlvbjxj
b25zdCBCYXNpY0Jsb2NrLCBjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Js
b2NrOjpzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAoreworICAgIHJldHVybiBTdWNjZXNzb3JDb2xs
ZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMo
KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrVXRpbHNfaAorI2RlZmluZSBCM0Jhc2lj
QmxvY2tVdGlsc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNJbmRleFNl
dC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2Nr
LCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBi
bG9jay0+cHJlZGVjZXNzb3JzKCk7CisKKyAgICBpZiAocHJlZGVjZXNzb3JzLmNvbnRhaW5zKHBy
ZWRlY2Vzc29yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcHJlZGVjZXNzb3JzLmFw
cGVuZChwcmVkZWNlc3Nvcik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhc2ljQmxvY2s+Citib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2Nr
LCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBi
bG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRl
Y2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IHBy
ZWRlY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnNbaS0tXSA9IHByZWRlY2Vzc29y
cy5sYXN0KCk7CisgICAgICAgICAgICBwcmVkZWNlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgICAg
ICAgICAgQVNTRVJUKCFwcmVkZWNlc3NvcnMuY29udGFpbnMocHJlZGVjZXNzb3IpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVwbGFjZVByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykK
K3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IGZyb20pIHsKKyAgICAgICAgICAgIHByZWRlY2Vz
c29yc1tpXSA9IHRvOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlzIHJlY29tcHV0ZXMgcHJlZGVjZXNzb3Jz
IGFuZCByZW1vdmVzIGJsb2NrcyB0aGF0IGFyZW4ndCByZWFjaGFibGUuCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCYXNpY0Jsb2NrPgordm9pZCByZXNldFJlYWNoYWJpbGl0eShWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQoreworICAgIC8vIENsZWFyIGFsbCBwcmVkZWNl
c3NvciBsaXN0cyBmaXJzdC4KKyAgICBmb3IgKGF1dG8mIGJsb2NrIDogYmxvY2tzKQorICAgICAg
ICBibG9jay0+cHJlZGVjZXNzb3JzKCkucmVzaXplKDApOworCisgICAgR3JhcGhOb2RlV29ya2xp
c3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsKKyAgICB3b3Jr
bGlzdC5wdXNoKGJsb2Nrc1swXS5nZXQoKSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2Nr
ID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
OiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgIGlmICh3b3JrbGlzdC5w
dXNoKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAgc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMo
KS5hcHBlbmQoYmxvY2spOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMTsgaSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoYmxvY2tzW2ldLT5w
cmVkZWNlc3NvcnMoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICBibG9ja3NbaV0gPSBudWxscHRy
OworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrVXRpbHNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM0Jsb2NrV29ya2xpc3RfaAorI2RlZmluZSBCM0Jsb2NrV29ya2xp
c3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgor
I2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlIDx3dGYvR3JhcGhOb2RlV29ya2xpc3Qu
aD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdyYXBoTm9kZVdvcmtsaXN0PEJh
c2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gQmxvY2tXb3JrbGlzdDsKKworLy8gV2hl
biB5b3Ugc2F5IEJsb2NrV2l0aDxpbnQ+IHlvdSBzaG91bGQgcmVhZCBpdCBhcyAiYmxvY2sgd2l0
aCBhbiBpbnQiLgordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgQmxvY2tXaXRoID0gR3JhcGhO
b2RlV2l0aDxCYXNpY0Jsb2NrKiwgVD47CisKKy8vIEV4dGVuZGVkIGJsb2NrIHdvcmtsaXN0IGlz
IHVzZWZ1bCBmb3IgZW5xdWV1ZWluZyBzb21lIG1ldGEtZGF0YSBhbG9uZyB3aXRoIHRoZSBibG9j
ay4gSXQgYWxzbworLy8gcGVybWl0cyBmb3JjaWJseSBlbnF1ZXVlaW5nIHRoaW5ncyBldmVuIGlm
IHRoZSBibG9jayBoYXMgYWxyZWFkeSBiZWVuIHNlZW4uIEl0J3MgdXNlZnVsIGZvcgorLy8gdGhp
bmdzIGxpa2UgYnVpbGRpbmcgYSBzcGFubmluZyB0cmVlLCBpbiB3aGljaCBjYXNlIFQgKHRoZSBh
dXhpbGlhcnkgcGF5bG9hZCkgd291bGQgYmUgdGhlCisvLyBzdWNjZXNzb3IgaW5kZXguCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBFeHRlbmRlZEJsb2NrV29ya2xpc3QgPSBFeHRlbmRlZEdy
YXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBULCBJbmRleFNldDxCYXNpY0Jsb2NrPj47CisK
K3R5cGVkZWYgR3JhcGhWaXNpdE9yZGVyIFZpc2l0T3JkZXI7CisKK3R5cGVkZWYgR3JhcGhOb2Rl
V2l0aE9yZGVyPEJhc2ljQmxvY2sqPiBCbG9ja1dpdGhPcmRlcjsKKwordHlwZWRlZiBQb3N0T3Jk
ZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IFBv
c3RPcmRlckJsb2NrV29ya2xpc3Q7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmxvY2tXb3JrbGlzdF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hl
Y2tTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5o
IgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQWlySW5zdElu
bGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsKKwor
dW5zaWduZWQgbnVtQjNBcmdzKEluc3QmIGluc3QpCit7CisgICAgc3dpdGNoIChpbnN0Lm9yaWdp
bi0+b3Bjb2RlKCkpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6Cisg
ICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgLy8gUmVzQ29uZCwgVG1wLCBUbXAKKyAgICAgICAg
cmV0dXJuIDM7CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgfQorfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworQ2hlY2tTcGVjaWFs
OjpDaGVja1NwZWNpYWwoQWlyOjpPcGNvZGUgb3Bjb2RlLCB1bnNpZ25lZCBudW1BcmdzKQorICAg
IDogbV9jaGVja09wY29kZShvcGNvZGUpCisgICAgLCBtX251bUNoZWNrQXJncyhudW1BcmdzKQor
eworICAgIEFTU0VSVChpc1Rlcm1pbmFsKG9wY29kZSkpOworfQorCitDaGVja1NwZWNpYWw6On5D
aGVja1NwZWNpYWwoKQoreworfQorCitJbnN0IENoZWNrU3BlY2lhbDo6aGlkZGVuQnJhbmNoKGNv
bnN0IEluc3QmIGluc3QpIGNvbnN0Cit7CisgICAgSW5zdCBoaWRkZW5CcmFuY2gobV9jaGVja09w
Y29kZSwgaW5zdC5vcmlnaW4pOworICAgIGhpZGRlbkJyYW5jaC5hcmdzLnJlc2VydmVJbml0aWFs
Q2FwYWNpdHkobV9udW1DaGVja0FyZ3MpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X251bUNoZWNrQXJnczsgKytpKQorICAgICAgICBoaWRkZW5CcmFuY2guYXJncy5hcHBlbmQoaW5z
dC5hcmdzW2kgKyAxXSk7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaDsKK30KKwordm9pZCBDaGVj
a1NwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6
OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGhpZGRlbkJyYW5jaChpbnN0KS5m
b3JFYWNoQXJnKGNhbGxiYWNrKTsKKyAgICBmb3JFYWNoQXJnSW1wbChudW1CM0FyZ3MoaW5zdCks
IG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgY2FsbGJhY2spOworfQorCitib29sIENoZWNrU3Bl
Y2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5z
dCkuaXNWYWxpZEZvcm0oKQorICAgICAgICAmJiBpc1ZhbGlkSW1wbChudW1CM0FyZ3MoaW5zdCks
IG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjphZG1p
dHNTdGFjayhJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBpZiAoYXJnSW5k
ZXggPj0gMSAmJiBhcmdJbmRleCA8IDEgKyBtX251bUNoZWNrQXJncykKKyAgICAgICAgcmV0dXJu
IGhpZGRlbkJyYW5jaChpbnN0KS5hZG1pdHNTdGFjayhhcmdJbmRleCAtIDEpOworICAgIHJldHVy
biBhZG1pdHNTdGFja0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGlu
c3QsIGFyZ0luZGV4KTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIENoZWNrU3BlY2lhbDo6Z2Vu
ZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBj
b250ZXh0KQoreworICAgIENDYWxsSGVscGVyczo6SnVtcCBmYWlsID0gaGlkZGVuQnJhbmNoKGlu
c3QpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgQVNTRVJUKGZhaWwuaXNTZXQoKSk7CisK
KyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIFZlY3RvcjxWYWx1ZVJlcD4g
cmVwczsKKyAgICBpZiAoaXNDaGVja01hdGgodmFsdWUtPm9wY29kZSgpKSkgeworICAgICAgICBp
ZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNrTXVsKQorICAgICAgICAgICAgcmVwcy5hcHBlbmQo
VmFsdWVSZXAoKSk7CisgICAgICAgIGVsc2UgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja1N1
YiAmJiB2YWx1ZS0+Y2hpbGQoMCktPmlzSW50KDApKQorICAgICAgICAgICAgcmVwcy5hcHBlbmQo
VmFsdWVSZXA6OmNvbnN0YW50KDApKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVwcy5h
cHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1szXSkpOworICAgICAgICBy
ZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzJdKSk7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVjayk7CisgICAg
ICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgxKSk7CisgICAgfQorCisgICAgYXBw
ZW5kUmVwc0ltcGwoY29udGV4dCwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCByZXBzKTsKKyAg
ICAKKyAgICBjb250ZXh0LmxhdGVQYXRocy5hcHBlbmQoCisgICAgICAgIGNyZWF0ZVNoYXJlZFRh
c2s8R2VuZXJhdGlvbkNvbnRleHQ6OkxhdGVQYXRoRnVuY3Rpb24+KAorICAgICAgICAgICAgWz1d
IChDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKSB7CisgICAgICAgICAgICAg
ICAgZmFpbC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIFN0
YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgICAgICAgICAgICAgIEFT
U0VSVChzdGFja21hcCk7CisKKyAgICAgICAgICAgICAgICBTdGFja21hcDo6R2VuZXJhdGlvblBh
cmFtcyBwYXJhbXM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAg
ICAgICAgICAgICAgcGFyYW1zLnN0YWNrbWFwID0gc3RhY2ttYXA7CisgICAgICAgICAgICAgICAg
cGFyYW1zLnJlcHMgPSByZXBzOworICAgICAgICAgICAgICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJz
ID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVyczsKKworICAgICAgICAgICAgICAgIHN0YWNrbWFw
LT5tX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKyAgICAgICAgICAgIH0pKTsKKworICAg
IHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsgLy8gQXMgZmFyIGFzIEFpciB0aGlua3MsIHdl
IGFyZSBub3QgYSB0ZXJtaW5hbC4KK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmR1bXBJbXBsKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fY2hlY2tPcGNvZGUsICIo
IiwgbV9udW1DaGVja0FyZ3MsICIpIik7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpkZWVwRHVt
cEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkIzOjpDaGVj
a1ZhbHVlIGxvd2VyZWQgdG8gIiwgbV9jaGVja09wY29kZSwgIiB3aXRoICIsIG1fbnVtQ2hlY2tB
cmdzLCAiIGFyZ3MuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
U3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tTcGVjaWFs
X2gKKyNkZWZpbmUgQjNDaGVja1NwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXZSB3YW50IHRvIGxvd2VyIENoZWNr
IGluc3RydWN0aW9ucyB0byBhIGJyYW5jaCwgYnV0IHRoZW4gd2Ugd2FudCB0byByb3V0ZSB0aGF0
IGJyYW5jaCB0byBvdXIKKy8vIG91dC1vZi1saW5lIGNvZGUgaW5zdGVhZCBvZiBkb2luZyBhbnl0
aGluZyBlbHNlLiBGb3IgdGhpcyByZWFzb24sIGEgQ2hlY2tTcGVjaWFsIHdpbGwgcmVtZW1iZXIK
Ky8vIHdoaWNoIGJyYW5jaCBvcGNvZGUgd2UgaGF2ZSBzZWxlY3RlZCBhbG9uZyB3aXRoIHRoZSBu
dW1iZXIgb2YgYXJncyBpbiB0aGUgb3ZlcmxvYWQgd2Ugd2FudC4gSXQKKy8vIHdpbGwgY3JlYXRl
IGFuIEluc3Qgd2l0aCB0aGF0IG9wY29kZSBwbHVzIHRoZSBhcHByb3ByaWF0ZSBhcmdzIGZyb20g
dGhlIG93bmluZyBJbnN0IHdoZW5ldmVyIHlvdQorLy8gY2FsbCBhbnkgb2YgdGhlIGNhbGxiYWNr
cy4KKy8vCisvLyBOb3RlIHRoYXQgZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVs
IHdlIGV4cGVjdCB0aGF0IHRoZSBCMyBhcmd1bWVudHMgYXJlIHRoZSByZXZlcnNlCisvLyBvZiB0
aGUgQWlyIGFyZ3VtZW50cyAoQWRkKGEsIGIpID0+IEFkZDMyIGIsIGEpLiBFeGNlcHQ6CisvLyAt
IENoZWNrU3ViKDAsIHgpLCB3aGljaCB0dXJucyBpbnRvIEJyYW5jaE5lZzMyIHguCisvLyAtIENo
ZWNrTXVsKGEsIGIpLCB3aGljaCB0dXJucyBpbnRvIE11bDMyIGIsIGEgYnV0IHdlIHBhc3MgQW55
IGZvciBhJ3MgVmFsdWVSZXAuCisKK2NsYXNzIENoZWNrU3BlY2lhbCA6IHB1YmxpYyBTdGFja21h
cFNwZWNpYWwgeworcHVibGljOgorICAgIENoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSwgdW5zaWdu
ZWQgbnVtQXJncyk7CisgICAgfkNoZWNrU3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgLy8g
Q29uc3RydWN0cyBhbmQgcmV0dXJucyB0aGUgSW5zdCByZXByZXNlbnRpbmcgdGhlIGJyYW5jaCB0
aGF0IHRoaXMgd2lsbCB1c2UuCisgICAgQWlyOjpJbnN0IGhpZGRlbkJyYW5jaChjb25zdCBBaXI6
Okluc3QmKSBjb25zdDsKKworICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBT
Y29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAg
Ym9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2so
QWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisgICAgLy8gTk9URTog
dGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4gYnJhbmNoIGFuZCB0
aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRlcyB0aGUgc3RhY2tt
YXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUo
QWlyOjpJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJy
aWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3By
aXZhdGU6CisgICAgQWlyOjpPcGNvZGUgbV9jaGVja09wY29kZTsKKyAgICB1bnNpZ25lZCBtX251
bUNoZWNrQXJnczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tTcGVjaWFsX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitD
aGVja1ZhbHVlOjp+Q2hlY2tWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ2hlY2tWYWx1ZTo6ZHVtcE1l
dGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0g
Iiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1Zh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NoZWNrVmFsdWVfaAorI2RlZmlu
ZSBCM0NoZWNrVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3Rh
Y2ttYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBDaGVja1ZhbHVlIDogcHVibGljIFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIENoZWNrQWRkOgor
ICAgICAgICBjYXNlIENoZWNrU3ViOgorICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBj
YXNlIENoZWNrOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+Q2hlY2tW
YWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNr
QWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgorICAgIENoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmln
aHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgbGVmdC0+dHlwZSgpLCBvcmlnaW4s
IGxlZnQsIHJpZ2h0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW50KHR5cGUoKSkpOworICAg
ICAgICBBU1NFUlQobGVmdC0+dHlwZSgpID09IHJpZ2h0LT50eXBlKCkpOworICAgICAgICBBU1NF
UlQob3Bjb2RlID09IENoZWNrQWRkIHx8IG9wY29kZSA9PSBDaGVja1N1YiB8fCBvcGNvZGUgPT0g
Q2hlY2tNdWwpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgorICAg
IENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IENoZWNr
KTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NoZWNrVmFsdWVfaAorCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJERkdDb21tb24uaCIKKyNpbmNsdWRlICJGVExTdGF0ZS5oIgorI2luY2x1
ZGUgIk9wdGlvbnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Jvb2wg
c2hvdWxkRHVtcElSKCkKK3sKKyAgICByZXR1cm4gRlRMOjp2ZXJib3NlQ29tcGlsYXRpb25FbmFi
bGVkKCkgfHwgRlRMOjpzaG91bGREdW1wRGlzYXNzZW1ibHkoKSB8fCBzaG91bGREdW1wSVJBdEVh
Y2hQaGFzZSgpOworfQorCitib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkKK3sKKyAgICBy
ZXR1cm4gT3B0aW9uczo6ZHVtcEdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRW
YWxpZGF0ZUlSKCkKK3sKKyAgICByZXR1cm4gREZHOjp2YWxpZGF0aW9uRW5hYmxlZCgpIHx8IHNo
b3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVJB
dEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZhbGlkYXRlR3JhcGhBdEVhY2hQ
aGFzZSgpOworfQorCitib29sIHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkKK3sKKyAgICByZXR1
cm4gT3B0aW9uczo6dmVyYm9zZVZhbGlkYXRpb25GYWlsdXJlKCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21tb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb21t
b25faAorI2RlZmluZSBCM0NvbW1vbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworaW5saW5lIGJvb2wgaXM2NEJpdCgpIHsgcmV0dXJu
IHNpemVvZih2b2lkKikgPT0gODsgfQoraW5saW5lIGJvb2wgaXMzMkJpdCgpIHsgcmV0dXJuICFp
czY0Qml0KCk7IH0KKworYm9vbCBzaG91bGREdW1wSVIoKTsKK2Jvb2wgc2hvdWxkRHVtcElSQXRF
YWNoUGhhc2UoKTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUigpOworYm9vbCBzaG91bGRWYWxpZGF0
ZUlSQXRFYWNoUGhhc2UoKTsKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNDb21tb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21t
dXRhdGl2aXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b21tdXRhdGl2aXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbW11dGF0aXZpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzQ29tbXV0YXRpdml0eS5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYgb3V0LCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkpCit7CisgICAgc3dpdGNoIChjb21t
dXRhdGl2aXR5KSB7CisgICAgY2FzZSBDb21tdXRhdGl2ZToKKyAgICAgICAgb3V0LnByaW50KCJD
b21tdXRhdGl2ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOb3RDb21tdXRhdGl2ZToK
KyAgICAgICAgb3V0LnByaW50KCJOb3RDb21tdXRhdGl2ZSIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQ29tbXV0YXRpdml0eV9oCisjZGVmaW5lIEIzQ29tbXV0YXRpdml0eV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51
bSBDb21tdXRhdGl2aXR5IHsKKyAgICBDb21tdXRhdGl2ZSwKKyAgICBOb3RDb21tdXRhdGl2ZQor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFz
cyBQcmludFN0cmVhbTsKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6
OkNvbW11dGF0aXZpdHkpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbW11dGF0aXZpdHlfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworQ29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdDMyVmFs
dWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1f
dmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVm
aW5lIEIzQ29uc3QzMlZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19F
WFBPUlRfUFJJVkFURSBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAg
IHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENv
bnN0MzI7IH0KKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29uc3QzMlZhbHVlKCk7Cisg
ICAgCisgICAgaW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJv
dGVjdGVkOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKKworICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBD
b25zdDMyVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUp
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0MzIsIEludDMyLCBvcmlnaW4pCisgICAgICAg
ICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIGludDMyX3Qg
bV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3QzMlZhbHVlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0NvbnN0NjRWYWx1ZTo6fkNvbnN0NjRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29uc3Q2NFZh
bHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCht
X3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2Rl
ZmluZSBCM0NvbnN0NjRWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSlNf
RVhQT1JUX1BSSVZBVEUgQ29uc3Q2NFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBD
b25zdDY0OyB9CisgICAgCisgICAgfkNvbnN0NjRWYWx1ZSgpOworICAgIAorICAgIGludDY0X3Qg
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDY0LCBJ
bnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAg
ICAKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25z
dDY0VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJs
ZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91Ymxl
VmFsdWU6On5Db25zdERvdWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVl
OjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVs
ZSIsIG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERv
dWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3REb3VibGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Nv
bnN0RG91YmxlVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0RG91YmxlVmFsdWVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgewor
cHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4g
b3Bjb2RlID09IENvbnN0RG91YmxlOyB9CisgICAgCisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsK
KyAgICAKKyAgICBkb3VibGUgdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7
CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0RG91
YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAg
ICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICBkb3VibGUgbV92YWx1
ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzQ29uc3RQdHJWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3RQdHJWYWx1ZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNp
bmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworLy8gVXN1YWxseSB5b3Ugd2FudCB0byB1c2UgQ29uc3QzMlZhbHVlIG9yIENvbnN0NjRW
YWx1ZSBkaXJlY3RseS4gQnV0IHRoaXMgaXMgdXNlZnVsIGZvciB3cml0aW5nCisvLyBwbGF0Zm9y
bS1hZ25vc3RpYyBjb2RlLiBOb3RlIHRoYXQgYSBDb25zdFB0clZhbHVlIHdpbGwgYmVoYXZlIGxp
a2UgZWl0aGVyIGEgQ29uc3QzMlZhbHVlIG9yCisvLyBDb25zdDY0VmFsdWUgZGVwZW5kaW5nIG9u
IHBsYXRmb3JtLgorCisjaWYgVVNFKEpTVkFMVUU2NCkKK3R5cGVkZWYgQ29uc3Q2NFZhbHVlIENv
bnN0UHRyVmFsdWVCYXNlOworI2Vsc2UKK3R5cGVkZWYgQ29uc3QzMlZhbHVlIENvbnN0UHRyVmFs
dWVCYXNlOworI2VuZGlmCisKK2NsYXNzIENvbnN0UHRyVmFsdWUgOiBwdWJsaWMgQ29uc3RQdHJW
YWx1ZUJhc2UgeworcHVibGljOgorICAgIHZvaWQqIHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KENvbnN0UHRyVmFsdWVCYXNlOjp2YWx1ZSgp
KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IENvbnN0UHRyVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHZvaWQqIHBvaW50
ZXIpCisgICAgICAgIDogQ29uc3RQdHJWYWx1ZUJhc2UoaW5kZXgsIG9yaWdpbiwgYml0d2lzZV9j
YXN0PGludHB0cl90Pihwb2ludGVyKSkKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjND
b25zdFB0clZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJv
bFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250
cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29udHJvbFZhbHVlOjp+Q29udHJvbFZh
bHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGxpc3REdW1wKG1fc3VjY2Vzc29ycykpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb250cm9sVmFsdWVfaAorI2RlZmluZSBCM0NvbnRy
b2xWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVk
QmxvY2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBD
b250cm9sVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFj
Y2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIGNhc2UgUmV0
dXJuOgorICAgICAgICBjYXNlIE9vcHM6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgY2FzZSBTd2l0Y2g6IAorICAgICAgICAgICAgLy8gVGhpcyBpcyBoZXJlIGJlY2F1c2UgU3dp
dGNoVmFsdWUgaXMgYSBzdWJjbGFzcyBvZiBDb250cm9sVmFsdWUsIHNvIHdlIHdhbnQKKyAgICAg
ICAgICAgIC8vIHN3aXRjaFZhbHVlLT5hczxDb250cm9sVmFsdWU+KCkgdG8gcmV0dXJuIG5vbi1u
dWxsLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0eXBlZGVmIFZlY3Rv
cjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSB+Q29udHJvbFZhbHVlKCk7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgY29u
c3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIGNvbnN0IEZyZXF1ZW50ZWRC
bG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3Nv
cnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JM
aXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisgICAgU3Vj
Y2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCitwcm90
ZWN0ZWQ6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9y
aWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9CisKKyAgICAvLyBTdWJjbGFzc2VzIHdp
bGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKworcHJp
dmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9y
IE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBP
cmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdp
bikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CisgICAgfQorCisgICAg
Ly8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCisgICAgeworICAgICAg
ICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9y
IEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBP
cmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRhcmdldCkKKyAgICAgICAgOiBW
YWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAgICBBU1NFUlQo
b3Bjb2RlID09IEp1bXApOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHRhcmdldCk7Cisg
ICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEJyYW5jaC4KKyAgICBDb250cm9sVmFsdWUoCisg
ICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogcHJlZGljYXRlLAorICAgICAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHllcywgY29uc3Qg
RnJlcXVlbnRlZEJsb2NrJiBubykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lk
LCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJh
bmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOworICAgICAgICBtX3N1Y2Nl
c3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnRyb2xWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lD
bGFzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBGcmVx
dWVuY3lDbGFzcyBmcmVxdWVuY3kpCit7CisgICAgc3dpdGNoIChmcmVxdWVuY3kpIHsKKyAgICBj
YXNlIEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWw6CisgICAgICAgIG91dC5wcmludCgiTm9ybWFsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZyZXF1ZW5jeUNsYXNzOjpSYXJlOgorICAgICAg
ICBvdXQucHJpbnQoIlJhcmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Zy
ZXF1ZW5jeUNsYXNzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
RnJlcXVlbmN5Q2xhc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJl
cXVlbmN5Q2xhc3NfaAorI2RlZmluZSBCM0ZyZXF1ZW5jeUNsYXNzX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIGNsYXNzIEZy
ZXF1ZW5jeUNsYXNzIDogdWludDhfdCB7CisgICAgLy8gV2UgZG9uJ3QgaGF2ZSBhbnkgaHlwb3Ro
ZXNpcyBhYm91dCB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVjdC4g
VGhpcyBpcworICAgIC8vIHRoZSBjb21tb24gY2FzZS4gV2UgY2FuIHN0aWxsIHVzZSBiYXNpYyBi
bG9jayBmcmVxdWVuY3kgaW4gdGhpcyBjYXNlLgorICAgIE5vcm1hbCwKKworICAgIC8vIFdlIGV4
cGVjdCB0aGF0IHRoaXMgY29udHJvbCBmbG93IGNvbnN0cnVjdCB3aWxsIGJlIHJlYWNoZWQgc3Vw
ZXIgcmFyZWx5LiBJdCdzIHZhbGlkIHRvCisgICAgLy8gcGVyZm9ybSBvcHRpbWl6YXRpb25zIHRo
YXQgcHVuaXNoIFJhcmUgY29kZS4gTm90ZSB0aGF0IHRoZXJlIHdpbGwgYmUgc2l0dWF0aW9ucyB3
aGVyZSB5b3UKKyAgICAvLyBoYXZlIHRvIHNvbWVob3cgY29uc3RydWN0IGEgbmV3IGZyZXF1ZW5j
eSBjbGFzcyBmcm9tIGEgbWVyZ2luZyBvZiBtdWx0aXBsZSBjbGFzc2VzLiBXaGVuCisgICAgLy8g
dGhpcyBoYXBwZW5zLCBuZXZlciBjaG9vc2UgUmFyZTsgYWx3YXlzIGdvIHdpdGggTm9ybWFsLiBU
aGlzIGlzIG5lY2Vzc2FyeSBiZWNhdXNlIHdlCisgICAgLy8gcmVhbGx5IGRvIHB1bmlzaCBSYXJl
IGNvZGUgdmVyeSBiYWRseS4KKyAgICBSYXJlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpGcmVxdWVuY3lDbGFzcyk7CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
RnJlcXVlbmN5Q2xhc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVx
dWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNG
cmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0ZyZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Zy
ZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEIzRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVk
ZWYgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVudGVkQmxvY2s7CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisjaW5jbHVkZSAi
QWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzTG93
ZXJUb0Fpci5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBnZW5lcmF0ZShQ
cm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgQWlyOjpDb2Rl
IGNvZGU7CisgICAgZ2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworICAgIEFpcjo6Z2Vu
ZXJhdGUoY29kZSwgaml0KTsKK30KKwordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJv
Y2VkdXJlLCBBaXI6OkNvZGUmIGNvZGUpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkK
KyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlKTsKKworICAgIC8vIElmIHdlJ3JlIGRvaW5nIHN1
cGVyIHZlcmJvc2UgZHVtcGluZywgdGhlIHBoYXNlIHNjb3BlIG9mIGFueSBwaGFzZSB3aWxsIGFs
cmVhZHkgZG8gYSBkdW1wLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hvdWxkRHVtcElS
QXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIEIzOlxuIik7CisgICAg
ICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogQWRkIG1vcmUg
b3B0aW1pemF0aW9ucyBoZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA1MDcKKworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAg
IHZhbGlkYXRlKHByb2NlZHVyZSk7CisgICAgCisgICAgLy8gSWYgd2UncmUgZG9pbmcgc3VwZXIg
dmVyYm9zZSBkdW1waW5nLCB0aGUgcGhhc2Ugc2NvcGUgb2YgYW55IHBoYXNlIHdpbGwgYWxyZWFk
eSBkbyBhIGR1bXAuCisgICAgLy8gTm90ZSB0aGF0IGxvd2VyVG9BaXIoKSBhY3RzIGxpa2UgYSBw
aGFzZSBpbiB0aGlzIHJlZ2FyZC4KKyAgICBpZiAoc2hvdWxkRHVtcElSKCkgJiYgIXNob3VsZER1
bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQjMgYWZ0ZXIgIiwgcHJvY2Vk
dXJlLmxhc3RQaGFzZU5hbWUoKSwgIiwgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsKKyAgICAgICAg
ZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIGxvd2VyVG9BaXIocHJvY2VkdXJlLCBj
b2RlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyYXRlX2gKKyNkZWZpbmUgQjNHZW5lcmF0ZV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxI
ZWxwZXJzOworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CituYW1lc3BhY2Ug
QWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBhbmQgZ2VuZXJhdGVzIGl0IHRvIG1hY2hpbmUgY29kZSBieSBm
aXJzdAorLy8gaW50ZXJuYWxseSBjb252ZXJ0aW5nIHRvIGFuIEFpcjo6Q29kZSBhbmQgdGhlbiBn
ZW5lcmF0aW5nIHRoYXQuCitKU19FWFBPUlRfUFJJVkFURSB2b2lkIGdlbmVyYXRlKFByb2NlZHVy
ZSYsIENDYWxsSGVscGVycyYpOworCisvLyBUaGlzIHRha2VzIGEgQjM6OlByb2NlZHVyZSwgb3B0
aW1pemVzIGl0IGluLXBsYWNlLCBhbmQgbG93ZXJzIGl0IHRvIEFpci4gWW91IGNhbiB0aGVuIGdl
bmVyYXRlCisvLyB0aGUgQWlyIHRvIG1hY2hpbmUgY29kZSB1c2luZyBBaXI6OmdlbmVyYXRlKCku
IE5vdGUgdGhhdCBhbiBBaXI6OkNvZGUgd2lsbCBoYXZlIHBvaW50ZXJzIGludG8gdGhlCisvLyBC
Mzo6UHJvY2VkdXJlLCBzbyB5b3UgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgQjM6OlByb2NlZHVy
ZSBvdXRsaXZlcyB0aGUgQWlyOjpDb2RlLgordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYs
IEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0dlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVk
QmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrX2gKKyNkZWZpbmUgQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBB
IGZyZXF1ZW50ZWQgYmxvY2sgaXMgYSB0dXBsZSBvZiBCYXNpY0Jsb2NrKiBhbmQgRnJlcXVlbmN5
Q2xhc3MuIEl0J3MgdXN1YWxseSB1c2VkIGFzIGEKKy8vIHN1Y2Nlc3NvciBlZGdlLgorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorY2xhc3MgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayB7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jaygKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBudWxscHRyLCBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3kgPSBG
cmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgICAg
ICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gbV9ibG9jayA9PSBvdGhlci5tX2Jsb2NrCisgICAgICAgICAgICAmJiBt
X2ZyZXF1ZW5jeSA9PSBvdGhlci5tX2ZyZXF1ZW5jeTsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yIT0oY29uc3QgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jayYgb3RoZXIpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQg
b3BlcmF0b3IgYm9vbCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgIT0gR2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jaygpOworICAgIH0KKworICAgIEJhc2ljQmxvY2sqIGJsb2NrKCkg
Y29uc3QgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIEJhc2ljQmxvY2sqJiBibG9jaygpIHsgcmV0
dXJuIG1fYmxvY2s7IH0KKyAgICBGcmVxdWVuY3lDbGFzcyBmcmVxdWVuY3koKSBjb25zdCB7IHJl
dHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CisgICAgeworICAgICAgICBpZiAoZnJlcXVlbmN5KCkgIT0gRnJlcXVlbmN5Q2xhc3M6Ok5v
cm1hbCkKKyAgICAgICAgICAgIG91dC5wcmludChmcmVxdWVuY3koKSwgIjoiKTsKKyAgICAgICAg
b3V0LnByaW50KHBvaW50ZXJEdW1wKG1fYmxvY2spKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
QmFzaWNCbG9jayogbV9ibG9jazsKKyAgICBGcmVxdWVuY3lDbGFzcyBtX2ZyZXF1ZW5jeTsKK307
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
SW5kZXhNYXBfaAorI2RlZmluZSBCM0luZGV4TWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCisvLyBUaGlzIGlzIGEgbWFwIGZvciBrZXlzIHRoYXQgaGF2ZSBhbiBpbmRleCgpLiBJdCdz
IHN1cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8gZWZmaWNpZW50
IGZvciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVzZSBtYXBzLCBz
aW5jZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeQorLy8gc3BhcnNlIGluZGljZXMgYW5kIHRoZXJlIGFy
ZSBhIGxvdCBvZiBWYWx1ZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwgdHlwZW5hbWUgVmFs
dWU+CitjbGFzcyBJbmRleE1hcCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgSW5kZXhNYXAoc2l6
ZV90IHNpemUgPSAwKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IucmVzaXplKHNpemUpOworICAg
IH0KKworICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKQorICAgIHsKKyAgICAgICAgbV92ZWN0
b3IucmVzaXplKHNpemUpOworICAgIH0KKworICAgIFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgfQor
ICAgIAorICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNJbmRl
eE1hcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIzSW5kZXhTZXRfaAor
CisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzZXQg
Zm9yIHRoaW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9y
IEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBk
b24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFsdWVzIGNhbiBoYXZl
IHZlcnkgc3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgor
CisvLyBJZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRvIEluZGV4U2V0PEJh
c2ljQmxvY2s+LiBTbywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgSW5kZXhTZXQgeworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7CisgICAgfQorCisg
ICAgYm9vbCBhZGQoVCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gIW1fc2V0LnNldCh2
YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhUKiB2YWx1ZSkgY29u
c3QKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAg
IHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNzIEl0ZXJhYmxlIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xs
ZWN0aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24o
Y29sbGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25z
dCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRCaXRzSXRlcmFibGU6
Oml0ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rp
b24pCisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVyKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhp
czsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0
ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBl
KiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJpdHNJdGVyYWJsZTo6
aXRlcmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5iZWdpbigpKTsgfQor
ICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rp
b24sIG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29sbGVj
dGlvblR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhTZXQmIG1fc2V0Owor
ICAgIH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86CisgICAgLy8gaW5kZXhT
ZXQudmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFsdWVzLCB5b3UgZG86
CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+
IHZhbHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVjdGlvbik7CisgICAg
fQorCisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyByZXR1cm4gbV9zZXQ7
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAg
ICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IGluZGlj
ZXMoKS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIFQ6OmR1bXBQcmVm
aXgsIGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9yIG1fc2V0OworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0luZGV4U2V0X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNMb3dlclRv
QWlyLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQjNBZGRyZXNzTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbW11
dGF0aXZpdHkuaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNJbmRleFNl
dC5oIgorI2luY2x1ZGUgIkIzTG93ZXJpbmdNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTG93
ZXJUb0FpciB7CitwdWJsaWM6CisgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwg
Q29kZSYgY29kZSkKKyAgICAgICAgOiB2YWx1ZVRvVG1wKHByb2NlZHVyZS52YWx1ZXMoKS5zaXpl
KCkpCisgICAgICAgICwgYmxvY2tUb0Jsb2NrKHByb2NlZHVyZS5zaXplKCkpCisgICAgICAgICwg
dXNlQ291bnRzKHByb2NlZHVyZSkKKyAgICAgICAgLCBhZGRyZXNzU2VsZWN0b3IoKnRoaXMpCisg
ICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBjb2RlKGNvZGUpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQjM6OkJhc2lj
QmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlKQorICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2Nr
XSA9IGNvZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1ZW5jeSgpKTsKKworICAgICAgICAvLyBMb3dl
ciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29vZCBoZXVy
aXN0aWMgdG8gbG9jayBkb3duIGEKKyAgICAgICAgLy8gaG9pc3RlZCBhZGRyZXNzIGV4cHJlc3Np
b24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3AuCisgICAgICAgIGZv
ciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlLmJsb2Nrc0luUHJlT3JkZXIoKSkg
eworICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KKyAgICAgICAgICAgIGluc3RzLnJl
c2l6ZSgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9ja3MgaW4g
cmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdzIHdoYXQgYWxs
b3dzIHVzCisgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3RpdmVseS4KKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAg
aWYgKGxvY2tlZC5jb250YWlucyhjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOwor
ICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcnVuTG93ZXJpbmdNYXRjaGVyKGN1cnJlbnRW
YWx1ZSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBjb3VsZCBub3QgbG93ZXIgIiwgZGVlcER1bXAoY3Vy
cmVudFZhbHVlKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIGluc3RzIGNvbnRhaW5zIHRoZW0g
aW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcworICAgICAgICAgICAgLy8gaXQgaW4gcmV2
ZXJzZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluc3RzLnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IGluc3RzW2ldKQorICAgICAgICAg
ICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJbnN0KFdURjo6bW92ZShpbnN0
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBz
dWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgorICAgICAgICAgICAgQVNTRVJUKGJsb2Nr
LT5zdWNjZXNzb3JzKCkuc2l6ZSgpIDw9IDIpOworICAgICAgICAgICAgZm9yIChCMzo6QmFzaWNC
bG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAg
ICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoYmxvY2tUb0Jsb2Nr
W3N1Y2Nlc3Nvcl0pOworICAgICAgICB9CisKKyAgICAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChjb2RlKTsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogcHJvbG9ndWUpCisgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdCgwLCBXVEY6Om1vdmUoaW5zdCkpOworICAgICAg
ICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKyAgICB9CisKKyAgICBUbXAgdG1wKFZh
bHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1wID0gdmFsdWVUb1RtcFt2YWx1ZV07
CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1wID0gY29kZS5uZXdUbXAoaXNJbnQo
dmFsdWUtPnR5cGUoKSkgPyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgICAgIHJldHVybiB0bXA7
CisgICAgfQorCisgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4gb3BlcmFuZCBpbnRvIGFuIGFk
ZHJlc3MuCisgICAgQXJnIGVmZmVjdGl2ZUFkZHIoVmFsdWUqIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBhZGRyZXNzU2VsZWN0b3Iuc2VsZWN0ZWRBZGRyZXNzID0gQXJnKCk7CisgICAgICAgIGlm
IChydW5BZGRyZXNzTWF0Y2hlcihhZGRyZXNzLCBhZGRyZXNzU2VsZWN0b3IpKQorICAgICAgICAg
ICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFkZHJlc3M7CisKKyAgICAgICAgcmV0
dXJuIEFyZzo6YWRkcih0bXAoYWRkcmVzcykpOworICAgIH0KKworICAgIC8vIFRoaXMgZ2l2ZXMg
eW91IHRoZSBhZGRyZXNzIG9mIHRoZSBnaXZlbiBMb2FkIG9yIFN0b3JlLiBJZiBpdCdzIG5vdCBh
IExvYWQgb3IgU3RvcmUsIHRoZW4KKyAgICAvLyBpdCByZXR1cm5zIEFyZygpLgorICAgIEFyZyBh
ZGRyKFZhbHVlKiBtZW1vcnlWYWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiB2YWx1
ZSA9IG1lbW9yeVZhbHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKworICAgICAgICBBcmcgcmVzdWx0ID0gZWZmZWN0
aXZlQWRkcih2YWx1ZS0+Y2hpbGRyZW4oKS5sYXN0KCkpOworICAgICAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0LndpdGhP
ZmZzZXQodmFsdWUtPm9mZnNldCgpKTsKKyAgICB9CisKKyAgICBBcmcgbG9hZEFkZHIoVmFsdWUq
IGxvYWRWYWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChsb2FkVmFsdWUtPm9wY29kZSgpID09IExv
YWQpCisgICAgICAgICAgICByZXR1cm4gYWRkcihsb2FkVmFsdWUpOworICAgICAgICByZXR1cm4g
QXJnKCk7CisgICAgfQorCisgICAgQXJnIGltbShWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUtPmhhc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjppbW0odmFs
dWUtPmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcg
aW1tT3JUbXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKEFyZyByZXN1bHQgPSBp
bW0odmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHRt
cCh2YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21t
dXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICB2b2lkIGFwcGVu
ZEJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBUbXAgcmVz
dWx0ID0gdG1wKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIAorICAgICAgICAvLyBUaHJlZS1vcGVy
YW5kIGZvcm1zIGxpa2U6CisgICAgICAgIC8vICAgICBPcCBhLCBiLCBjCisgICAgICAgIC8vIG1l
YW4gc29tZXRoaW5nIGxpa2U6CisgICAgICAgIC8vICAgICBjID0gYSBPcCBiCisKKyAgICAgICAg
aWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsK
KyAgICAgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGltbShyaWdodCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9w
Y29kZSwgaW1tKHJpZ2h0KSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBBIG5vbi1jb21tdXRhdGl2ZSBvcGVyYXRpb24gY291bGQgaGF2ZSBhbiBp
bW1lZGlhdGUgaW4gbGVmdC4KKyAgICAgICAgICAgICAgICBpZiAoaW1tKGxlZnQpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbW0ocmlnaHQpICYmIGlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIHsKKyAgICAgICAg
ICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgaW1tKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIFR3by1vcGVyYW5kIGZvcm1z
IGxpa2U6CisgICAgICAgIC8vICAgICBPcCBhLCBiCisgICAgICAgIC8vIG1lYW4gc29tZXRoaW5n
IGxpa2U6CisgICAgICAgIC8vICAgICBiID0gYiBPcCBhCisKKyAgICAgICAgLy8gQXQgdGhpcyBw
b2ludCwgd2UgcHJlZmVyIHZlcnNpb25zIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBoYXZlIGEgZnVz
ZWQgbG9hZCBvdmVyIHRocmVlCisgICAgICAgIC8vIG9wZXJhbmQgZm9ybXMuCisgICAgICAgIAor
ICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAgICAgICAg
QXJnIGxlZnRBZGRyID0gbG9hZEFkZHIobGVmdCk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZv
cm0ob3Bjb2RlLCBsZWZ0QWRkci5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBVc2UgdGhlIHJpZ2h0IE1vdmUgb3Bjb2RlLiBJZiB3ZSdyZSBkZWFsaW5nIHdp
dGggMzItYml0IHR5cGVzLCB3ZSBzaG91bGQKKyAgICAgICAgICAgICAgICAvLyB1c2UgTW92ZTMy
LiBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggRG91Ymxlcywgd2Ugc2hvdWxkIHVzZSBNb3ZlRG91Ymxl
LgorICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA1MzMKKyAgICAgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHJpZ2h0KSwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBsZWZ0QWRkciwgcmVzdWx0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBBcmcgcmlnaHRBZGRyID0gbG9hZEFkZHIocmlnaHQpOworICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0ob3Bjb2RlLCByaWdodEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCByaWdodEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAsIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAocmln
aHQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAg
YXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKG9wY29kZSwg
dG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBv
cGNvZGUsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAg
IGJvb2wgdHJ5QXBwZW5kU3RvcmVCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IFRoaXMgZmFpbHMgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFu
eSBlZmZlY3RzIGJldHdlZW4gdGhlIExvYWQgYW5kIHRoZSBTdG9yZSB0aGF0CisgICAgICAgIC8v
IGNvdWxkIGNsb2JiZXIgdGhlIGxvYWRlZCB2YWx1ZS4gV2UgbmVlZCB0byBjaGVjayBzdWNoIHRo
aW5ncyBiZWNhdXNlIHdlIGFyZSBlZmZlY3RpdmVseQorICAgICAgICAvLyBzaW5raW5nIHRoZSBs
b2FkLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNTM0CisgICAgICAgIAorICAgICAgICBBcmcgc3RvcmVBZGRyID0gYWRkcihjdXJyZW50VmFs
dWUpOworICAgICAgICBBU1NFUlQoc3RvcmVBZGRyKTsKKworICAgICAgICBWYWx1ZSogb3RoZXJW
YWx1ZTsKKyAgICAgICAgaWYgKGFkZHIobGVmdCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAg
b3RoZXJWYWx1ZSA9IHJpZ2h0OworICAgICAgICBlbHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENv
bW11dGF0aXZlICYmIGFkZHIocmlnaHQpID09IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVy
VmFsdWUgPSBsZWZ0OworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIHN0b3JlQWRkci5raW5k
KCkpICYmIGltbShvdGhlclZhbHVlKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1t
KG90aGVyVmFsdWUpLCBzdG9yZUFkZHIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIHN0b3Jl
QWRkci5raW5kKCkpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGFwcGVu
ZChvcGNvZGUsIHRtcChvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgQWlyOjpPcGNvZGUgbW92ZUZvclR5cGUoVHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAg
ICAgICByZXR1cm4gTW92ZTMyOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoaXM2NEJpdCgpKTsKKyAgICAgICAgICAgIHJldHVybiBNb3ZlOworICAgICAg
ICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2
b2lkIGFwcGVuZChBaXI6Ok9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIGluc3RzLmxhc3QoKS5hcHBlbmQoSW5zdChvcGNvZGUsIGN1cnJlbnRW
YWx1ZSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKyAg
ICAKKyAgICBJbmRleFNldDxWYWx1ZT4gbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQg
d2lsbCBoYXZlIG5vIFRtcCBpbiBBaXIuCisgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gdmFsdWVU
b1RtcDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdl
IHNheSB0aGF0IGEgVmFsdWUqIHdpdGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAg
SW5kZXhNYXA8QjM6OkJhc2ljQmxvY2ssIEFpcjo6QmFzaWNCbG9jayo+IGJsb2NrVG9CbG9jazsK
KworICAgIFVzZUNvdW50cyB1c2VDb3VudHM7CisKKyAgICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+
PiBpbnN0czsKKyAgICBWZWN0b3I8SW5zdD4gcHJvbG9ndWU7CisKKyAgICBWYWx1ZSogY3VycmVu
dFZhbHVlOworCisgICAgLy8gVGhlIGFkZHJlc3Mgc2VsZWN0b3Igd2lsbCBtYXRjaCBhbnkgcGF0
dGVybiB3aGVyZSB0aGUgaW5wdXQgb3BlcmFuZHMgYXJlIGF2YWlsYWJsZSBhcyBUbXBzLgorICAg
IC8vIEl0IGRvZXNuJ3QgY2FyZSBhYm91dCBzaGFyaW5nLiBJdCB3aWxsIGhhcHBpbHkgZW1pdCB0
aGUgc2FtZSBhZGRyZXNzIGV4cHJlc3Npb24gb3ZlciBhbmQgb3ZlcgorICAgIC8vIGFnYWluIHJl
Z2FyZGxlc3Mgb2YgdGhlIGV4cHJlc3Npb24ncyBjb21wbGV4aXR5LiBUaGlzIHdvcmtzIG91dCBm
aW5lLCBzaW5jZSBhdCB0aGUgbWFjaGluZQorICAgIC8vIGxldmVsLCBhZGRyZXNzIGV4cHJlc3Np
b25zIGFyZSBzdXBlciBjaGVhcC4gSG93ZXZlciwgdGhpcyBkb2VzIGhhdmUgYSBoYWNrIHRvIGF2
b2lkCisgICAgLy8gInVuaG9pc3RpbmciIGFkZHJlc3MgZXhwcmVzc2lvbnMuCisgICAgY2xhc3Mg
QWRkcmVzc1NlbGVjdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEFkZHJlc3NTZWxlY3RvcihM
b3dlclRvQWlyJiBsb3dlcikKKyAgICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAg
ICAgeworICAgICAgICAgICAgdGhpcy0+cm9vdCA9IHJvb3Q7CisgICAgICAgICAgICAvLyBXZSBk
b24ndCB3YW50IHRvIG1hdGNoIGFuIGFkZHJlc3MgZXhwcmVzc2lvbiB0aGF0IGhhcyBhbHJlYWR5
IGJlZW4gY29tcHV0ZWQKKyAgICAgICAgICAgIC8vIGV4cGxpY2l0bHkuCisgICAgICAgICAgICBy
ZXR1cm4gIWxvd2VyLnZhbHVlVG9UbXBbcm9vdF07CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IGFjY2VwdFJvb3RMYXRlKFZhbHVlKikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUs
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dl
ci52YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0K
KyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdElu
dGVybmFsc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVl
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG93
ZXIubG9ja2VkLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICByZXR1cm4gYWNjZXB0T3BlcmFuZHMoYXJndW1lbnRzLi4uKTsKKyAgICAg
ICAgfQorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisg
ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2Nl
cHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKworICAgICAgICBib29sIHRyeUFkZFNo
aWZ0MShWYWx1ZSogaW5kZXgsIFZhbHVlKiBsb2dTY2FsZSwgVmFsdWUqIGJhc2UpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGlmIChsb2dTY2FsZS0+YXNJbnQoKSA8IDAgfHwgbG9nU2NhbGUtPmFz
SW50KCkgPiAzKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNl
bGVjdGVkQWRkcmVzcyA9IEFyZzo6aW5kZXgoCisgICAgICAgICAgICAgICAgbG93ZXIudG1wKGJh
c2UpLCBsb3dlci50bXAoaW5kZXgpLCAxIDw8IGxvZ1NjYWxlLT5hc0ludCgpKTsKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDIo
VmFsdWUqIGJhc2UsIFZhbHVlKiBpbmRleCwgVmFsdWUqIGxvZ1NjYWxlKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gdHJ5QWRkU2hpZnQxKGluZGV4LCBsb2dTY2FsZSwgYmFzZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAocmlnaHQtPmhhc0ludDMyKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBUaGlzIHByb2R1Y3Rpb24gaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHNp
bmNlIHdlIGV4cGVjdAorICAgICAgICAgICAgICAgIC8vIExvYWQoQWRkKEB4LCBAY29uc3QxKSwg
b2Zmc2V0ID0gY29uc3QyKSB0byBoYXZlIGFscmVhZHkgYmVlbiBzdHJlbmd0aC1yZWR1Y2VkCisg
ICAgICAgICAgICAgICAgLy8gdG8gTG9hZChAeCwgb2Zmc2V0ID0gY29uc3QxICsgY29uc3QyKS4K
KyAgICAgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIobG93ZXIudG1wKGxl
ZnQpLCByaWdodC0+YXNJbnQzMigpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjppbmRleChs
b3dlci50bXAobGVmdCksIGxvd2VyLnRtcChyaWdodCkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeURpcmVjdCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAocm9vdCkpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExv
d2VyVG9BaXImIGxvd2VyOworICAgICAgICBWYWx1ZSogcm9vdDsKKyAgICAgICAgQXJnIHNlbGVj
dGVkQWRkcmVzczsKKyAgICB9OworICAgIEFkZHJlc3NTZWxlY3RvciBhZGRyZXNzU2VsZWN0b3I7
CisKKyAgICAvLyBCZWxvdyBpcyB0aGUgY29kZSBmb3IgYSBsb3dlcmluZyBzZWxlY3Rvciwgc28g
dGhhdCB3ZSBjYW4gcGFzcyAqdGhpcyB0byBydW5Mb3dlcmluZ01hdGNoZXIuCisgICAgLy8gVGhp
cyB3aWxsIG1hdGNoIGNvbXBsZXggbXVsdGktdmFsdWUgZXhwcmVzc2lvbnMsIGJ1dCBvbmx5IGlm
IHRoZXJlIGlzIG5vIHNoYXJpbmcuIEZvciBleGFtcGxlLAorICAgIC8vIGl0IHdvbid0IG1hdGNo
IGEgTG9hZCB0d2ljZSBhbmQgY2F1c2UgdGhlIGdlbmVyYXRlZCBjb2RlIHRvIGRvIHR3byBsb2Fk
cyB3aGVuIHRoZSBvcmlnaW5hbAorICAgIC8vIGNvZGUganVzdCBkaWQgb25lLgorICAgIAorICAg
IGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVT
RUQocm9vdCwgIWxvY2tlZC5jb250YWlucyhyb290KSk7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGFjY2VwdFJvb3RMYXRlKFZhbHVlKikgeyB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGJvb2wgYWNjZXB0SW50ZXJu
YWxzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAg
IC8vIElmIG9uZSBvZiB0aGUgaW50ZXJuYWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0
ZWQsIHRoZW4gd2UgZG9uJ3Qgd2FudCB0byBjYXVzZQorICAgICAgICAvLyBpdCB0byBiZSByZWNv
bXB1dGVkIGFnYWluLgorICAgICAgICBpZiAodmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICAvLyBXZSByZXF1aXJlIGludGVybmFs
cyB0byBoYXZlIG9ubHkgb25lIHVzZSAtIHVzLgorICAgICAgICBpZiAodXNlQ291bnRzW3ZhbHVl
XSAhPSAxKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0
dXJuIGFjY2VwdEludGVybmFscyhhcmd1bWVudHMuLi4pOworICAgIH0KKyAgICBib29sIGFjY2Vw
dEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKFZhbHVlKiB2YWx1
ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGxvY2tlZC5hZGQodmFs
dWUpOworICAgICAgICBhY2NlcHRJbnRlcm5hbHNMYXRlKGFyZ3VtZW50cy4uLik7CisgICAgfQor
ICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZSgpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1
ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGlmIChsb2NrZWQuY29u
dGFpbnModmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4g
YWNjZXB0T3BlcmFuZHMoYXJndW1lbnRzLi4uKTsKKyAgICB9CisgICAgYm9vbCBhY2NlcHRPcGVy
YW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0K
KyAgICAKKyAgICBib29sIHRyeUxvYWQoVmFsdWUqIGFkZHJlc3MpCisgICAgeworICAgICAgICBz
d2l0Y2ggKGN1cnJlbnRWYWx1ZS0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAg
ICAgICAgICBhcHBlbmQoTW92ZTMyLCBlZmZlY3RpdmVBZGRyKGFkZHJlc3MpLCB0bXAoY3VycmVu
dFZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBJbnQ2NDoK
KyAgICAgICAgICAgIGlmIChpczY0Qml0KCkpIHsKKyAgICAgICAgICAgICAgICBhcHBlbmQoTW92
ZSwgZWZmZWN0aXZlQWRkcihhZGRyZXNzKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlRG91Ymxl
LCBlZmZlY3RpdmVBZGRyKGFkZHJlc3MpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIHRyeUFkZChWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAg
ICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFkZDMyLCBDb21tdXRh
dGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNh
c2UgSW50NjQ6CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxBZGQ2NCwgQ29tbXV0YXRpdmU+KGxl
ZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5QW5kKFZh
bHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5
cGUoKSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5k
MzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDY0LCBDb21t
dXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9v
bCB0cnlTdG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFsdWUqKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoK
KyAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRTdG9yZUJpbk9wPEFkZDMyLCBDb21tdXRhdGl2
ZT4obGVmdCwgcmlnaHQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gRklYTUU6
IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5U3RvcmVBbmRMb2FkKFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQsIFZhbHVlKikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgp
KSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gdHJ5QXBwZW5kU3Rv
cmVCaW5PcDxBbmQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIHRyeVN0
b3JlKFZhbHVlKiB2YWx1ZSwgVmFsdWUqIGFkZHJlc3MpCisgICAgeworICAgICAgICBhcHBlbmQo
bW92ZUZvclR5cGUodmFsdWUtPnR5cGUoKSksIHRtcCh2YWx1ZSksIGVmZmVjdGl2ZUFkZHIoYWRk
cmVzcykpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeVRydW5j
QXJndW1lbnRSZWcoVmFsdWUqIGFyZ3VtZW50UmVnKQorICAgIHsKKyAgICAgICAgcHJvbG9ndWUu
YXBwZW5kKEluc3QoCisgICAgICAgICAgICBNb3ZlLCBjdXJyZW50VmFsdWUsCisgICAgICAgICAg
ICBUbXAoYXJndW1lbnRSZWctPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkp
LAorICAgICAgICAgICAgdG1wKGN1cnJlbnRWYWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgYm9vbCB0cnlUcnVuYyhWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAg
ICBhcHBlbmQoTW92ZSwgdG1wKHZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUFyZ3VtZW50UmVnKCkKKyAgICB7Cisg
ICAgICAgIHByb2xvZ3VlLmFwcGVuZChJbnN0KAorICAgICAgICAgICAgbW92ZUZvclR5cGUoY3Vy
cmVudFZhbHVlLT50eXBlKCkpLCBjdXJyZW50VmFsdWUsCisgICAgICAgICAgICBUbXAoY3VycmVu
dFZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpLT5hcmd1bWVudFJlZygpKSwKKyAgICAgICAg
ICAgIHRtcChjdXJyZW50VmFsdWUpKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICAKKyAgICBib29sIHRyeUNvbnN0MzIoKQorICAgIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIGlt
bShjdXJyZW50VmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBib29sIHRyeUNvbnN0NjQoKQorICAgIHsKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIEFyZzo6aW1tNjQoY3VycmVudFZhbHVlLT5hc0ludDY0KCkpLCB0bXAoY3VycmVu
dFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIHRy
eVJldHVybihWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHZhbHVlLT50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAg
ICAgIGFwcGVuZChNb3ZlLCBpbW1PclRtcCh2YWx1ZSksIFRtcChHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAg
ICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIHRtcCh2YWx1ZSksIFRtcChGUFJJbmZvOjpyZXR1cm5W
YWx1ZUZQUikpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgICAgIGFwcGVuZChSZXQpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBwcm9jZWR1cmU7CisgICAgQ29kZSYgY29k
ZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGxvd2VyVG9BaXIoUHJv
Y2VkdXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNj
b3BlKHByb2NlZHVyZSwgImxvd2VyVG9BaXIiKTsKKyAgICBMb3dlclRvQWlyIGxvd2VyVG9BaXIo
cHJvY2VkdXJlLCBjb2RlKTsKKyAgICBsb3dlclRvQWlyLnJ1bigpOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzTG93ZXJUb0Fpcl9oCisjZGVmaW5lIEIzTG93ZXJUb0Fpcl9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJv
Y2VkdXJlOworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKworLy8gVGhpcyBsb3dlcnMg
dGhlIGN1cnJlbnQgQjMgcHJvY2VkdXJlIHRvIGFuIEFpciBjb2RlLgorCit2b2lkIGxvd2VyVG9B
aXIoUHJvY2VkdXJlJiwgQWlyOjpDb2RlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzTG93ZXJUb0Fpcl9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJu
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNo
ZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNM
b3dlcmluZ01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OSBAQAor
IyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIwor
IyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIwor
IyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklC
VVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
CisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBMb3dlcmluZ01h
dGNoZXIKKworIyBUaGVzZSBydWxlcyBhcmUgY29uc2lkZXJlZCBpbiBhIGNhc2NhZGUsIHN0YXJ0
aW5nIGF0IHRoZSB0b3AuIEl0J3MgaW1wbGVuZW50ZWQgdXNpbmcgc3dpdGNoCisjIHN0YXRlbWVu
dHMgd2hlcmV2ZXIgcG9zc2libGUuCisKKyMgTm90ZTogYWRkaW5nIG1vcmUgcnVsZXMgdG8gdGhp
cyBtYXRjaGVyIGlzIGFuIGV4Y2VsbGVudCB3YXkgb2YgaW1wcm92aW5nIHBlcmZvcm1hbmNlIQor
CitMb2FkID0gTG9hZChhZGRyZXNzKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCitBbmQgPSBC
aXRBbmQobGVmdCwgcmlnaHQpCisKK1N0b3JlQWRkTG9hZCA9IFN0b3JlKEFkZChsZWZ0LCByaWdo
dCksIGFkZHJlc3MpCitTdG9yZUFuZExvYWQgPSBTdG9yZShCaXRBbmQobGVmdCwgcmlnaHQpLCBh
ZGRyZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcykKKworVHJ1bmNBcmd1bWVudFJl
ZyA9IFRydW5jKGFyZ3VtZW50UmVnID0gQXJndW1lbnRSZWcoKSkKK1RydW5jID0gVHJ1bmModmFs
dWUpCisKK0FyZ3VtZW50UmVnID0gQXJndW1lbnRSZWcoKQorCitDb25zdDMyID0gQ29uc3QzMigp
CitDb25zdDY0ID0gQ29uc3Q2NCgpCisKK1JldHVybiA9IFJldHVybih2YWx1ZSkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVl
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCit7Cit9CisKK3ZvaWQgTWVtb3J5VmFs
dWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKG1fb2Zmc2V0
KQorICAgICAgICBvdXQucHJpbnQoIm9mZnNldCA9ICIsIG1fb2Zmc2V0KTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzTWVtb3J5VmFsdWVfaAorI2RlZmluZSBCM01lbW9yeVZhbHVlX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBGSVhNRTogQWRkIGFsaWFzIGFuYWx5c2lzIHRvIHRo
ZXNlIGJ5IGFsbG93aW5nIHRoZSBjbGllbnQgdG8gYXNzb2NpYXRlIGFuIGludGVnZXIgcmFuZ2Ug
dG8gdGhlCisvLyB2YWx1ZS4gVHdvIG9wZXJhdGlvbnMgbWF5IGFjY2VzcyB0aGUgc2FtZSBtZW1v
cnkgaWYgdGhlaXIgcmFuZ2VzIG92ZXJsYXBzLgorLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDUzNQorCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBNZW1vcnlW
YWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAg
Y2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICBjYXNlIExvYWQxNlo6
CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAg
IGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIGNhc2UgU3RvcmUxNjoK
KyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUoKTsKKworICAgIGludDMy
X3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
TG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhh
dmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCisg
ICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnQzMl90
IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2lu
LCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlm
ICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAg
ICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2Ug
TG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgICAgICBBU1NF
UlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBEb3VibGUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAg
ICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAg
ICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IFZvaWQpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRzIHdoZXJlIHRoZSByZXR1cm4gdHlw
ZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIG9wY29kZSA9PSBMb2FkRmxvYXQgPyBEb3Vi
bGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkK
KyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0
Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNl
IExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9h
ZDE2UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KKyAgICBNZW1vcnlWYWx1
ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0g
MCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBw
b2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7CisgICAgICAgIGlmICgh
QVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAg
ICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAg
ICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGludDMyX3QgbV9vZmZzZXQgeyAwIH07Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
T3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNPcGNvZGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIz
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkK
K3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTm9wOgorICAgICAgICBvdXQucHJp
bnQoIk5vcCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJZGVudGl0eToKKyAgICAgICAg
b3V0LnByaW50KCJJZGVudGl0eSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdDMy
OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ29uc3Q2NDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDY0Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0RG91Ymxl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdDoKKyAgICAgICAgb3V0LnBy
aW50KCJTdGFja1Nsb3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQXJndW1lbnRSZWc6
CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnRSZWciKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICBvdXQucHJpbnQoIkZyYW1lUG9pbnRlciIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGQ6CisgICAgICAgIG91dC5wcmludCgiQWRkIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN1YjoKKyAgICAgICAgb3V0LnByaW50KCJTdWIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTXVsOgorICAgICAgICBvdXQucHJpbnQoIk11
bCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEaXY6CisgICAgICAgIG91dC5wcmludCgi
RGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICBvdXQu
cHJpbnQoIkNoaWxsRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1vZDoKKyAgICAg
ICAgb3V0LnByaW50KCJNb2QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQml0QW5kOgor
ICAgICAgICBvdXQucHJpbnQoIkJpdEFuZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBC
aXRPcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRPciIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBCaXRYb3I6CisgICAgICAgIG91dC5wcmludCgiQml0WG9yIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFNobDoKKyAgICAgICAgb3V0LnByaW50KCJTaGwiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU1NocjoKKyAgICAgICAgb3V0LnByaW50KCJTU2hyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFpTaHI6CisgICAgICAgIG91dC5wcmludCgiWlNociIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0OCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MTY6CisgICAgICAgIG91dC5wcmludCgi
U0V4dDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgb3V0
LnByaW50KCJTRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgWkV4dDMyOgorICAg
ICAgICBvdXQucHJpbnQoIlpFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUcnVu
YzoKKyAgICAgICAgb3V0LnByaW50KCJUcnVuYyIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBGUm91bmQ6CisgICAgICAgIG91dC5wcmludCgiRlJvdW5kIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIElUb0Q6CisgICAgICAgIG91dC5wcmludCgiSVRvRCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBEVG9JMzI6CisgICAgICAgIG91dC5wcmludCgiRFRvSTMyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkVxdWFsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgICAgICBvdXQucHJpbnQo
Ik5vdEVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NUaGFuOgorICAgICAg
ICBvdXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0
ZXJUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzRXF1YWwiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgICAgICBvdXQucHJp
bnQoIkdyZWF0ZXJFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBYm92ZToKKyAg
ICAgICAgb3V0LnByaW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCZWxv
dzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBBYm92ZUVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlRXF1YWwiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvd0Vx
dWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgb3V0LnBy
aW50KCJMb2FkOFoiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhTOgorICAgICAg
ICBvdXQucHJpbnQoIkxvYWQ4UyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZa
OgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNloiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTG9hZDE2UzoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZTIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkRmxvYXQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2Fk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgb3V0LnByaW50
KCJTdG9yZTgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAg
b3V0LnByaW50KCJTdG9yZTE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlRmxv
YXQ6CisgICAgICAgIG91dC5wcmludCgiU3RvcmVGbG9hdCIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBDQ2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJDQ2FsbCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBQYXRjaHBvaW50OgorICAgICAgICBvdXQucHJpbnQoIlBhdGNo
cG9pbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIG91
dC5wcmludCgiQ2hlY2tBZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tTdWI6
CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tTdWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQ2hlY2tNdWw6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tNdWwiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2siKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgb3V0LnByaW50KCJVcHNpbG9u
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBoaToKKyAgICAgICAgb3V0LnByaW50KCJQ
aGkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSnVtcDoKKyAgICAgICAgb3V0LnByaW50
KCJKdW1wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgb3V0
LnByaW50KCJCcmFuY2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3dpdGNoOgorICAg
ICAgICBvdXQucHJpbnQoIlN3aXRjaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXR1
cm46CisgICAgICAgIG91dC5wcmludCgiUmV0dXJuIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIE9vcHM6CisgICAgICAgIG91dC5wcmludCgiT29wcyIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09wY29kZV9oCisj
ZGVmaW5lIEIzT3Bjb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYv
U3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IE9wY29kZSA6IGludDE2X3QgeworICAgIC8vIEEgbm8tb3AgdGhhdCByZXR1cm5zIFZvaWQsIHVz
ZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0byByZW1vdmUgYSB2YWx1ZS4KKyAgICBOb3AsCisgICAg
CisgICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBl
LgorICAgIElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2UgdGhlIENvbnN0VmFsdWUq
IGNsYXNzZXMuIENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBmbG93LCBzbyB0aGF0IHdl
IGNhbgorICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBjb25zdHJ1Y3QgdGhlbS4g
TGFyZ2UgY29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgorICAgIENvbnN0MzIsCisg
ICAgQ29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNr
IHNsb3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9n
cmFtIHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBp
dC4gRWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFu
Z2Ugb2YKKyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3Mu
CisgICAgU3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIu
IFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCisg
ICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdCwgYW5k
IHRoZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdlCisgICAgLy8gZG9uJ3Qg
Y2xvYmJlciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBvciBjYWxscyAoZWl0aGVy
IGJ5IHNhdmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3RhY2sgb3IgcHJlc2Vydmlu
ZyBpdCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBBcmd1bWVudFJlZ1ZhbHVl
IGNsYXNzLiBUaGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIgcG9pbnRlcigpIChmb3Ig
R1BScykgb3IgRG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRSZWcsCisKKyAgICAvLyBU
aGUgZnJhbWUgcG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVyZSBpbiBjb250cm9sIGZs
b3cgYnV0IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZyYW1lIHBvaW50ZXIsIHdp
dGggYSBjYXZlYXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBmcmFtZSBwb2ludGVyIHRl
bXBvcmFyaWx5IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0aGUgRnJhbWVQb2ludGVy
IGludHJpbnNpYyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9pbnRlciAqc2hvdWxkKiBi
ZSBub3QKKyAgICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0IG5vdy4KKyAgICBGcmFt
ZVBvaW50ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2FibGUgd2l0aCBhbnkgdmFs
dWUgdHlwZS4KKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAgICBEaXYsCisKKyAgICAv
LyBJbnRlZ2VyIG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3QgdHJhcCBldmVyLCBiZWhh
dmVzIGxpa2UgSlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5kLAorICAgIEJpdE9yLAor
ICAgIEJpdFhvciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hyLAorCisgICAgLy8gQ2Fz
dHMgYW5kIHN1Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50MzI6CisgICAgU0V4dDgs
CisgICAgU0V4dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1cm5zIEludDY0OgorICAg
IFNFeHQzMiwKKyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgSW50NjQgYW5kIHJldHVybnMgSW50
MzI6CisgICAgVHJ1bmMsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIEZS
b3VuZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBJVG9ELAor
ICAgIC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBEVG9JMzIsCisKKyAg
ICAvLyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUu
IFJldHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAgICAvLyBpcyBqdXN0IEVx
dWFsKHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAgIExlc3NUaGFuLAorICAg
IEdyZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVyRXF1YWwsCisKKyAgICAv
LyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3IgMS4KKyAgICBBYm92ZSwK
KyAgICBCZWxvdywKKyAgICBBYm92ZUVxdWFsLAorICAgIEJlbG93RXF1YWwsCisKKyAgICAvLyBN
ZW1vcnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQgYW5kIHRoZSBsb2FkZWQg
dHlwZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHJldHVybiBJbnQzMjoK
KyAgICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlosCisgICAgTG9hZDE2UywKKyAg
ICAvLyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9hdCwKKyAgICAvLyBUaGlzIHJl
dHVybiB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwKKworICAgIC8vIE1l
bW9yeSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBpcyBzdG9yZWQuIFRo
ZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIEludDMyIHZhbHVlOgor
ICAgIFN0b3JlOCwKKyAgICBTdG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMgYSBEb3VibGUgdmFs
dWU6CisgICAgU3RvcmVGbG9hdCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1vcnBoaWMgc3RvcmUg
Zm9yIEludDMyLCBJbnQ2NCwgYW5kIERvdWJsZToKKyAgICBTdG9yZSwKKworICAgIC8vIFRoaXMg
aXMgYSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcgdGhlIHN5c3RlbSBD
IGNhbGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0aGUgYXJndW1lbnRz
IGFyZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxsLAorCisgICAgLy8g
VGhpcyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVlIGNsYXNzLiBUaGlz
IGlzIHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBidXQgb25seSBlbWl0
cyBjb2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRz
IHRvIGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEgc3RhY2ttYXAgYWxv
bmcgd2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1bWVudCBtdXN0IGJl
IHBhc3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBhIHN0YWNrbWFwIGFy
Z3VtZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8gcmVxdWVzdAorICAg
IC8vIHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNldCBmcm9tIHRoZSB0
b3Agb2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAvLyBzdGFjay4KKyAg
ICBQYXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhlIENoZWNrVmFsdWUg
Y2xhc3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBnZW5lcmF0aW9uCisg
ICAgLy8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNvbWUgY29kZSBhZnRl
ciB0aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAgICAvLyBmcm9tIHRo
ZSBjaGVjaywgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxzbyBnZXQgdG8gc3Vw
cGx5IGEgc3RhY2ttYXAuIE5vdGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90IGFsbG93ZWQgdG8g
anVtcCBiYWNrIGludG8gdGhlIG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNsb3cgcGF0aCwgc2lu
Y2UgdGhlIGNvbXBpbGVyCisgICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUgZXhlY3V0aW9uIG9m
IHRoZXNlIGluc3RydWN0aW9ucyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRuJ3QgaGFwcGVuLiBG
b3IKKyAgICAvLyBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQnczoKKyAgICAvLwor
ICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0FkZCh4LCB5KQorICAg
IC8vCisgICAgLy8gVGhlbiBpdCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRvOgorICAgIC8vCisg
ICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5KGEpCisgICAgLy8K
KyAgICAvLyBUaGlzIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxiYWNrcyB1c2VkIGJ5
IHRoZSB0d28gQ2hlY2tBZGRzLiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAorICAgIC8vIGNhbGxi
YWNrcy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4gaWYgdGhleSBhcmUg
ZGlmZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIgdGhlIGZpcnN0IENo
ZWNrQWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5vdCBoYXZlIHBvc3Np
Ymx5IHRha2VuIHNsb3cKKyAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBzZWNvbmQgQ2hlY2tB
ZGQncyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIENoZWNrQWRkLAorICAgIENoZWNrU3Vi
LAorICAgIENoZWNrTXVsLAorCisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4aXRzLiBVc2UgdGhl
IENoZWNrVmFsdWUgY2xhc3MuIExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMsIHRoaXMgaGFzIGEK
KyAgICAvLyBzdGFja21hcCB3aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhpcyB0YWtlcyBh
biBJbnQzMiBhcmd1bWVudCB0aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgKKyAgICAvLyBmdWxs
IGJyYW5jaCBmdXNpb24gaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBBIHRydWUgdmFsdWUg
anVtcHMgdG8gdGhlIGdlbmVyYXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgorICAgIENoZWNrLAor
CisgICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NBLgorICAgIFVwc2ls
b24sIC8vIFRoaXMgdXNlcyB0aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAgIFBoaSwKKworICAg
IC8vIEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBKdW1wLAorICAgIAor
ICAgIC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuIEJy
YW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8vIENvbnRyb2xWYWx1
ZSBjbGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhlIHRydWUgc3VjY2Vz
c29yLgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMgb3ZlciBlaXRoZXIg
SW50MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgorICAgIFN3aXRjaCwK
KworICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9uJ3Qga25vdyB0aGVp
ciByZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55CisgICAgLy8gdHlwZS4g
VXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIFJldHVybiwKKworICAgIC8vIFRoaXMg
aXMgYSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2ZXIgZ2V0IGhlcmUu
IFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9OworCitpbmxpbmUgYm9v
bCBpc0NoZWNrTWF0aChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2luOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4oIiwgUmF3UG9pbnRl
cihtX2RhdGEpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmln
aW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5lIEIzT3JpZ2luX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdob2V2ZXIgZ2VuZXJhdGVzIEIz
SVIgY2FuIGNob29zZSB0byBwdXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdoZW4geW91IGRvIHRoaXMs
IEIzIHdpbGwgYmUgYWJsZSB0bworLy8gYWNjb3VudCwgZG93biB0byB0aGUgbWFjaGluZSBjb2Rl
LCB3aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNwb25kcyB0byB3aGljaCBvcmlnaW4uIEIzCisvLyB0
cmFuc2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVmdWxseS4gSXQncyBhbiBl
cnJvciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVpdGhlciBkcm9wcyBPcmln
aW5zIG9yIGxpZXMgYWJvdXQgdGhlbS4KK2NsYXNzIE9yaWdpbiB7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRhdGEgPSBudWxscHRyKQorICAgICAgICA6IG1fZGF0
YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCB2b2lkKiBkYXRhKCkgY29uc3QgeyBy
ZXR1cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAg
ICAKK3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNP
cmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hw
b2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRTcGVjaWFsLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEFpcjsKKworUGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVj
aWFsKCkKK3sKK30KKworUGF0Y2hwb2ludFNwZWNpYWw6On5QYXRjaHBvaW50U3BlY2lhbCgpCit7
Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcoCisgICAgSW5zdCYgaW5z
dCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQor
eworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpIHsKKyAgICAgICAgZm9yRWFj
aEFyZ0ltcGwoMCwgMSwgaW5zdCwgY2FsbGJhY2spOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OkRlZiwgaW5zdC5vcmlnaW4tPmFpclR5
cGUoKSk7CisgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMiwgaW5zdCwgY2FsbGJhY2spOworfQorCiti
b29sIFBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGlu
c3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAs
IDEsIGluc3QpOworCisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgaWYgKGluc3QuYXJnc1sxXS5raW5kKCkgIT0gQXJnOjpUbXApCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc1R5cGUoaW5zdC5vcmln
aW4tPmFpclR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBpc1Zh
bGlkSW1wbCgwLCAyLCBpbnN0KTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6YWRtaXRz
U3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgaWYgKGluc3Qub3Jp
Z2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAx
LCBpbnN0LCBhcmdJbmRleCk7CisKKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAyLCBpbnN0LCBhcmdJ
bmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBQYXRjaHBvaW50U3BlY2lhbDo6Z2VuZXJh
dGUoCisgICAgSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0
JiBjb250ZXh0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNr
bWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgIEFTU0VSVChzdGFja21hcCk7
CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0gMTsK
KyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQorICAgICAgICByZXBzLmFwcGVu
ZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29mZnNldCsrXSkpOworICAgIGFw
cGVuZFJlcHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgU3Rh
Y2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgIHBhcmFtcy52YWx1ZSA9IHZhbHVl
OworICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAgIHBhcmFtcy5yZXBzID0gcmVw
czsKKyAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7
CisKKyAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisKKyAgICBy
ZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6
OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJQYXRj
aHBvaW50Iik7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiTG93ZXJlZCBCMzo6UGF0Y2hw
b2ludFZhbHVlLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBv
aW50U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bh
dGNocG9pbnRTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1BhdGNocG9pbnRTcGVjaWFsX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBzcGVjaWFsIHRoYXQg
cmVjb2duaXplcyB0aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQYXRjaHBvaW50OiBWb2lkIGFu
ZCBhbmQgbm9uLVZvaWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0aGUgc3ludGF4IG9mIHRoZSBB
aXIgUGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCBh
cmdzLi4uCisvLworLy8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUgbG93ZXJlZCBhcmd1bWVudHMg
dG8gdGhlIFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBub24tVm9pZCBjYXNlCisvLyB3
ZSB3aWxsIGhhdmU6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCByZXN1bHQsIGFyZ3Mu
Li4KKworY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsK
K3B1YmxpYzoKKyAgICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAgIHZpcnR1YWwgflBhdGNocG9p
bnRTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoQWlyOjpJbnN0
JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJy
aWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFk
bWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKworICAg
IC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUgaGlkZGVuIGJy
YW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBnZW5lcmF0ZXMg
dGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2VuZXJhdGlvbkNvbnRl
eHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRj
aHBvaW50VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvQ29t
bWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBv
aW50VmFsdWU6On5QYXRjaHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1
ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0
YWNrbWFwID0gIiwgc3RhY2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1BhdGNocG9pbnRWYWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNW
YWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hw
b2ludFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAg
ICB+UGF0Y2hwb2ludFZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZh
bHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFj
ZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0
eXBlLCBvcmlnaW4sIGNoaWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Bh
dGNocG9pbnRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNl
U2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNl
U2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhh
c2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFs
aWRhdGUuaCIKKyNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQ
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VT
Y29wZTo6UGhhc2VTY29wZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkK
KyAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAg
IGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGFm
dGVyICIsIHByb2NlZHVyZS5sYXN0UGhhc2VOYW1lKCksICIsIGJlZm9yZSAiLCBuYW1lLCAiOlxu
Iik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxk
U2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3RyaW5nKHBy
b2NlZHVyZSk7Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBtX3Byb2Nl
ZHVyZS5zZXRMYXN0UGhhc2VOYW1lKG1fbmFtZSk7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJB
dEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShtX3Byb2NlZHVyZSwgbV9kdW1wQmVmb3Jl
LmRhdGEoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGhhc2VTY29wZV9oCisjZGVmaW5lIEIz
UGhhc2VTY29wZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBQaGFzZVNjb3Bl
IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQ
aGFzZVNjb3BlKFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3Bl
KCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBt
X3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBC
ZWZvcmU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
OTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIz
QmxvY2tXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQcm9jZWR1cmU6OlByb2NlZHVyZSgpCisgICAgOiBt
X2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQoreworfQorCitQcm9jZWR1cmU6On5Qcm9jZWR1cmUo
KQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVu
Y3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Js
b2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0
ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAg
ICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sq
PiBQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIoKQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gcmVzdWx0OworICAgIEJsb2NrV29ya2xpc3Qgd29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVz
aChhdCgwKSk7CisgICAgd2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkp
IHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChibG9jayk7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGktLTspCisgICAgICAgICAgICB3b3JrbGlzdC5w
dXNoKGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7
Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcigp
Cit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgUG9zdE9yZGVyQmxvY2tX
b3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGF0KDApKTsKKyAgICB3aGlsZSAo
QmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAo
aXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFZpc2l0T3JkZXI6OlByZToKKyAgICAgICAgICAg
IHdvcmtsaXN0LnB1c2hQb3N0KGl0ZW0ubm9kZSk7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBpdGVtLm5vZGUtPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgICAgICB3
b3JrbGlzdC5wdXNoKGl0ZW0ubm9kZS0+c3VjY2Vzc29yQmxvY2soaSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UG9zdDoKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxOTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVyZV9oCisj
ZGVmaW5lIEIzUHJvY2VkdXJlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJQ
dXJlTmFOLmgiCisjaW5jbHVkZSA8d3RmL0JhZy5oPgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9j
Lmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3Ry
ZWFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9j
ZWR1cmUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9j
ZWR1cmUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+UHJvY2VkdXJlKCk7CisKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5h
Tik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBB
cmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQoQXJndW1lbnRzLi4uKTsKKworICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxv
Y2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF0uZ2V0
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikK
KyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBpdGVyYXRvcihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAsIG1faW5k
ZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNp
Y0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9wcm9j
ZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRl
eCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5k
ZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJlLT5z
aXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgaW5kZXgr
KzsKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
fTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IHNpemUoKSk7IH0KKworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRlcigp
OworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsKKworICAgIGNs
YXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29sbGVj
dGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1
cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBpdGVy
YXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAg
ICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4
KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9y
KGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAg
ICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4
KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBWYWx1
ZSogb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9wcm9jZWR1cmUtPm1fdmFsdWVzW21faW5kZXhdLmdldCgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9p
bmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICBwcml2YXRlOgorCisgICAgICAgICAgICBjb25zdCBQcm9jZWR1cmUqIG1fcHJv
Y2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAg
ICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJl
LCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvciht
X3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQorCisgICAgICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCk7
IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3By
b2NlZHVyZS5tX3ZhbHVlc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgVmFsdWUqIG9wZXJhdG9y
W10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAg
IH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIFZhbHVl
c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKKyAgICAvLyBUaGUgbmFtZSBoYXMgdG8gYmUgYSBzdHJp
bmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9yeSBtYW5hZ2VtZW50IGZvciB0
aGUgc3RyaW5nLgorICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFtZShjb25zdCBjaGFyKiBuYW1lKQor
ICAgIHsKKyAgICAgICAgbV9sYXN0UGhhc2VOYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICBjb25z
dCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGhhc2VOYW1lOyB9
CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9i
bG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+IG1fdmFsdWVzOworICAg
IGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2VkdXJl
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGlu
ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJbmxp
bmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVmFs
dWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRk
KEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlVHlw
ZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikpOwor
ICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBwZW5k
KFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
UHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdEtpbmQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgewor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiBvdXQsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAg
ICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NrZWQi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgor
ICAgICAgICBvdXQucHJpbnQoIkFub255bW91cyIpOworICAgICAgICByZXR1cm47CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFz
cyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBu
ZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVu
ZCB0byBlc2NhcGUKKyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBo
YXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjaworICAg
IC8vIHNsb3QuCisgICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgY291bGQg
c2hhcmUgc3BhY2Ugd2l0aCBvdGhlciBzdGFjayBzbG90cywgcHJvdmlkZWQgdGhhdCB0aGV5IGFy
ZW4ndCBsaXZlCisgICAgLy8gYXQgdGhlIHNhbWUgdGltZS4gVGhlIGNvbXBpbGVyIHN0aWxsIGhh
cyB0byBkbyBlc2NhcGUgYW5hbHlzaXMsIHNpbmNlIHRoZXNlIGNhbiBiZSBlc2NhcGVkCisgICAg
Ly8gZXhwbGljaXRseSBpbiBJUi4KKyAgICBBbm9ueW1vdXMKKworICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgYWRkIGEgdGhpcmQgbW9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc3RhY2sgc2xvdCB3
aWxsIGJlIHJlYWQgYXN5bmNocm9ub3VzbHkKKyAgICAvLyBhcyB3aXRoIExvY2tlZCwgYnV0IG5l
dmVyIHdyaXR0ZW4gdG8gYXN5bmNocm9ub3VzbHkuIFRoZW4sIEFpciBjb3VsZCBvcHRpbWl6ZSBz
cGlsbGluZyBhbmQKKyAgICAvLyBmaWxsaW5nIGJ5IHRyYWNraW5nIHdoZXRoZXIgdGhlIHZhbHVl
IGhhZCBiZWVuIHN0b3JlZCB0byBhIHJlYWQtb25seSBsb2NrZWQgc2xvdC4gSWYgaXQgaGFkLAor
ICAgIC8vIHRoZW4gd2UgY2FuIHJlZmlsbCBmcm9tIHRoYXQgc2xvdC4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTg3Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpTdGFja1Nsb3RLaW5k
KTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNTdGFja1Nsb3RLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3Rh
Y2tTbG90VmFsdWU6On5TdGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90VmFs
dWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJi
eXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNTdGFj
a1Nsb3RWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Ns
b3RLaW5kLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworbmFtZXNwYWNlIEFpciB7CitjbGFzcyBTdGFja1Nsb3Q7Cit9IC8vIG5hbWVz
cGFjZSBBaXIKKworY2xhc3MgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IFN0YWNrU2xvdDsgfQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNpZ25l
ZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RL
aW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIC8vIFRoaXMgZ2V0cyBh
c3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBw
aW4gc3RhY2sgc2xvdHMuIFVzZSB0aGUKKyAgICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQuCisg
ICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7
IH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUgc3Rh
Y2sgc2xvdCBpcyBMb2NrZWQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFs
dWUpCisgICAgeworICAgICAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAgIH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CisgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQorICAg
ICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXJUeXBlKCksIG9yaWdpbikKKyAg
ICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fa2luZChraW5kKQorICAg
ICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVkIG1f
Ynl0ZVNpemU7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9vZmZz
ZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitTdGFja21hcDo6U3RhY2ttYXAoKQoreworfQorCitTdGFja21h
cDo6flN0YWNrbWFwKCkKK3sKK30KKwordm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgIntyZXBzID0gIiwgbGlzdER1
bXAobV9yZXBzKSwgIiwgZ2VuZXJhdG9yID0gIiwgUmF3UG9pbnRlcihtX2dlbmVyYXRvci5nZXQo
KSksCisgICAgICAgICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJlcmVkLCAiLCB1c2VkUmVnaXN0
ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAifSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNr
bWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrU3BlY2lhbDsKK2NsYXNzIFN0YWNr
bWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBTdGFja21hcCB7CitwdWJsaWM6Cisg
ICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBWYWx1
ZSBjb250YWluaW5nIHRoZSBzdGFja21hcC4KKyAgICAgICAgVmFsdWUqIHZhbHVlOworCisgICAg
ICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgorICAgICAgICBTdGFja21hcCogc3RhY2ttYXA7
CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVhbCB2YWx1ZSByZXByZXNlbnRh
dGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOwor
CisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVzZWQu
CisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgfTsKKyAgICAKKyAgICB0
eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3QgR2VuZXJh
dGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4g
R2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFwKCk7CisgICAgflN0YWNrbWFwKCk7CisKKyAg
ICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlzIFN0
YWNrbWFwLiBJbiBjYXNlIG9mIGEgUGF0Y2hwb2ludCB0aGF0CisgICAgLy8gcmV0dXJucyBhIHZh
bHVlLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gSW4gYWxsIG90aGVy
IGNhc2VzLCBpbmRleCB6ZXJvIHJlZmVycworICAgIC8vIHRvIHRoZSBmaXJzdCBhcmd1bWVudCB0
byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90IGNvbnN0cmFpbmFibGUu
IEZvciBleGFtcGxlLAorICAgIC8vIGluIGEgQ2hlY2tBZGQgdmFsdWUsIGl0IHdvdWxkIGJlIGFu
IGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEgQ2hlY2sgdmFsdWUsIGl0
CisgICAgLy8gd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGV4IDAuIEJ1dCwgd2hl
biB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBjYW4KKyAgICAvLyBkZXBl
bmQgb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmlsbGVkIGluLgorICAgIHZv
aWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQorICAgIHsK
KyAgICAgICAgaWYgKGluZGV4ICsgMSA+PSBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAgbV9y
ZXBzLmdyb3coaW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAgICB9
CisKKyAgICB2b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAgICB7CisgICAg
ICAgIG1fY2xvYmJlcmVkLm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3QgUmVnaXN0ZXJT
ZXQmIGNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisKKyAgICB2b2lk
IHNldEdlbmVyYXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgeworICAgICAg
ICBtX2dlbmVyYXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3Ip
CisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9y
RnVuY3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFsOwor
ICAgIGZyaWVuZCBjbGFzcyBQYXRjaHBvaW50U3BlY2lhbDsKKyAgICBmcmllbmQgY2xhc3MgU3Rh
Y2ttYXBTcGVjaWFsOworICAgIAorICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBzOworICAgIFJl
ZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIFJlZ2lzdGVyU2V0IG1fY2xvYmJlcmVk
OworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsgLy8gU3RhY2ttYXBzIGNvdWxkIGJl
IGZ1cnRoZXIgZHVwbGljYXRlZCBieSBBaXIsIGJ1dCB0aGF0J3MgdW5saWtlbHksIHNvIHdlIGp1
c3QgbWVyZ2UgdGhlIHVzZWQgcmVnaXN0ZXJzIHNldHMgaWYgdGhhdCB3ZXJlIHRvIGhhcHBlbi4K
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRl
ICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOwor
CitTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK1N0YWNrbWFwU3Bl
Y2lhbDo6flN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpy
ZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmIGluc3QsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVn
aXN0ZXJzKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFw
KiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgLy8gRklYTUU6IElmIHRoZSBJ
bnN0IHRoYXQgdXNlcyB0aGUgU3RhY2ttYXBTcGVjaWFsIGdldHMgZHVwbGljYXRlZCwgdGhlbiB3
ZSBlbmQgdXAgbWVyZ2luZyB1c2VkCisgICAgLy8gcmVnaXN0ZXIgc2V0cyBmcm9tIG11bHRpcGxl
IHBsYWNlcy4gVGhpcyBjdXJyZW50bHkgd29uJ3QgaGFwcGVuIHNpbmNlIEFpciBkb2Vzbid0IGhh
dmUgdGFpbGR1cAorICAgIC8vIG9yIHRoaW5ncyBsaWtlIHRoYXQuIEJ1dCBtYXliZSBldmVudHVh
bGx5IGl0IGNvdWxkIGJlIGEgcHJvYmxlbS4KKyAgICBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJz
Lm1lcmdlKHVzZWRSZWdpc3RlcnMpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgU3RhY2ttYXBT
cGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBWYWx1ZSogdmFs
dWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2tt
YXAoKTsKKworICAgIHJldHVybiBzdGFja21hcC0+Y2xvYmJlcmVkKCk7Cit9CisKK3ZvaWQgU3Rh
Y2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNB
cmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCBjb25zdCBT
Y29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgVmFs
dWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGlu
Z3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVt
SWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0g
bnVtSWdub3JlZEIzQXJncyk7CisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25v
cmVkQWlyQXJncyA9PSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdz
KTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUoKSAt
IG51bUlnbm9yZWRCM0FyZ3M7ICsraSkgeworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tp
ICsgbnVtSWdub3JlZEIzQXJnc107CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGls
ZChpICsgbnVtSWdub3JlZEFpckFyZ3MpOworCisgICAgICAgIGNhbGxiYWNrKGFyZywgQXJnOjpV
c2UsIEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSk7CisgICAgfQorfQorCitib29s
IFN0YWNrbWFwU3BlY2lhbDo6aXNWYWxpZEltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIz
QXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCkKK3sKKyAg
ICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5l
IHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+
PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbigpLnNpemUo
KSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVl
LT5zdGFja21hcCgpOworCisgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgIC8vIEZvciB0aGUg
SW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMgdG8gaGF2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGFy
Z3VtZW50cy4KKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzICE9
IHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIC8vIFJlZ2FyZGxlc3Mgb2YgY29uc3RyYWludHMsIHN0YWNrbWFw
cyBoYXZlIHNvbWUgYmFzaWMgcmVxdWlyZW1lbnRzIGZvciB0aGVpciBhcmd1bWVudHMuIEZvcgor
ICAgIC8vIGV4YW1wbGUsIHlvdSBjYW4ndCBoYXZlIGEgbm9uLUZQLW9mZnNldCBhZGRyZXNzLiBU
aGlzIHZlcmlmaWVzIHRob3NlIGNvbmRpdGlvbnMgYXMgd2VsbCBhcyB0aGUKKyAgICAvLyBhcmd1
bWVudCB0eXBlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdzLnNpemUo
KSAtIG51bUlnbm9yZWRCM0FyZ3M7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1
ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRCM0FyZ3MpOworICAgICAgICBBcmcmIGFyZyA9IGluc3Qu
YXJnc1tpICsgbnVtSWdub3JlZEFpckFyZ3NdOworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChh
cmcua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGNhc2UgQXJnOjpJ
bW06CisgICAgICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgor
ICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgICAgIGJyZWFrOyAvLyBPSworICAg
ICAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgICAgIGlmIChhcmcuYmFzZSgpICE9IFRtcChH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAmJiBhcmcuYmFzZSgp
ICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICBBcmc6OlR5cGUgdHlwZSA9IEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKTsKKwor
ICAgICAgICBpZiAoIWFyZy5pc1R5cGUodHlwZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgLy8gVGhlIG51bWJlciBvZiBjb25zdHJhaW50cyBoYXMgdG8gYmUgbm8g
Z3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgQjMgY2hpbGRyZW4uCisgICAgQVNTRVJUKHN0YWNr
bWFwLT5tX3JlcHMuc2l6ZSgpIDw9IHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSk7CisKKyAgICAv
LyBWZXJpZnkgYW55IGV4cGxpY2l0bHkgc3VwcGxpZWQgY29uc3RyYWludHMuCisgICAgZm9yICh1
bnNpZ25lZCBpID0gbnVtSWdub3JlZEIzQXJnczsgaSA8IHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgVmFsdWVSZXAmIHJlcCA9IHN0YWNrbWFwLT5tX3JlcHNbaV07Cisg
ICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgLSBudW1JZ25vcmVkQjNBcmdzICsgbnVtSWdu
b3JlZEFpckFyZ3NdOworCisgICAgICAgIHN3aXRjaCAocmVwLmtpbmQoKSkgeworICAgICAgICBj
YXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgICAgICAvLyBXZSBhbHJlYWR5IHZlcmlmaWVkIHRo
aXMgYWJvdmUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U29t
ZVJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJl
cDo6UmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAoYXJnICE9IFRtcChyZXAucmVnKCkpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQg
aW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50
OgorICAgICAgICAgICAgaWYgKGFyZyAhPSBBcmc6OmNhbGxBcmcocmVwLm9mZnNldEZyb21TUCgp
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgICAgICAvLyBUaGlzIGlzIG5v
dCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3RhY2tJbXBsKAor
ICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdz
LAorICAgIEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIFZhbHVlKiB2YWx1
ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21h
cCgpOworCisgICAgdW5zaWduZWQgc3RhY2ttYXBBcmdJbmRleCA9IGFyZ0luZGV4IC0gbnVtSWdu
b3JlZEFpckFyZ3MgKyBudW1JZ25vcmVkQjNBcmdzOworCisgICAgaWYgKHN0YWNrbWFwQXJnSW5k
ZXggPj0gc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkpIHsKKyAgICAgICAgLy8gVGhpcyBtZWFucyB0
aGF0IHRoZXJlIHdhcyBubyBjb25zdHJhaW50LgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgCisgICAgLy8gV2Ugb25seSBhZG1pdCBzdGFjayBmb3IgQW55J3MsIHNpbmNlIFN0YWNr
IGlzIG5vdCBhIHZhbGlkIGlucHV0IGNvbnN0cmFpbnQsIGFuZCBTdGFja0FyZ3VtZW50CisgICAg
Ly8gdHJhbnNsYXRlcyB0byBhIENhbGxBcmcgaW4gQWlyLgorICAgIGlmIChzdGFja21hcC0+bV9y
ZXBzW3N0YWNrbWFwQXJnSW5kZXhdLmtpbmQoKSA9PSBWYWx1ZVJlcDo6QW55KQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTdGFja21hcFNwZWNp
YWw6OmFwcGVuZFJlcHNJbXBsKAorICAgIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0LCB1bnNp
Z25lZCBudW1JZ25vcmVkQXJncywgSW5zdCYgaW5zdCwgVmVjdG9yPFZhbHVlUmVwPiYgcmVzdWx0
KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9yZWRBcmdzOyBpIDwgaW5zdC5hcmdz
LnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5j
b2RlLCBpbnN0LmFyZ3NbaV0pKTsKK30KKworVmFsdWVSZXAgU3RhY2ttYXBTcGVjaWFsOjpyZXBG
b3JBcmcoQ29kZSYgY29kZSwgY29uc3QgQXJnJiBhcmcpCit7CisgICAgc3dpdGNoIChhcmcua2lu
ZCgpKSB7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpyZWco
YXJnLnJlZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OkltbToKKyAgICBjYXNl
IEFyZzo6SW1tNjQ6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQoYXJnLnZhbHVl
KCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgaWYgKGFy
Zy5iYXNlKCkgPT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSkKKyAgICAgICAgICAg
IHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpKTsKKyAgICAgICAgQVNTRVJUKGFy
Zy5iYXNlKCkgPT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpOwor
ICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVT
aXplKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4gVmFsdWVSZXAoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzU3RhY2ttYXBTcGVjaWFsX2gKKyNkZWZpbmUgQjNTdGFja21hcFNwZWNpYWxf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNs
dWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitu
YW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGlzIGEgYmFzZSBjbGFzcyBm
b3Igc3BlY2lhbHMgdGhhdCBoYXZlIHN0YWNrbWFwcy4gTm90ZSB0aGF0IGl0IGNhbiBmaW5kIHRo
ZSBTdGFja21hcCBieQorLy8gYXNraW5nIGZvciB0aGUgSW5zdCdzIG9yaWdpbi4gSGVuY2UsIHRo
ZXNlIG9iamVjdHMgZG9uJ3QgbmVlZCB0byBldmVuIGhvbGQgYSByZWZlcmVuY2UgdG8gdGhlCisv
LyBTdGFja21hcC4KKworY2xhc3MgU3RhY2ttYXBTcGVjaWFsIDogcHVibGljIEFpcjo6U3BlY2lh
bCB7CitwdWJsaWM6CisgICAgU3RhY2ttYXBTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+U3RhY2tt
YXBTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMo
QWlyOjpJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWdp
c3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworCisgICAg
Ly8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBvciBkdW1wSW1w
bCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkgc29tZQorICAgIC8vIHN1YmNsYXNzZXMg
dGhhdCBpbXBsZW1lbnQgdGhhdC4KKworICAgIHZvaWQgZm9yRWFjaEFyZ0ltcGwoCisgICAgICAg
IHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAor
ICAgICAgICBBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJn
Q2FsbGJhY2s+Jik7CisgICAgYm9vbCBpc1ZhbGlkSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVt
SWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6
SW5zdCYpOworICAgIGJvb2wgYWRtaXRzU3RhY2tJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1J
Z25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJ
bnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpOworCisgICAgLy8gQXBwZW5kcyB0aGUgcmVwcyBmb3Ig
dGhlIEluc3QncyBhcmdzLCBzdGFydGluZyB3aXRoIG51bUlnbm9yZWRBcmdzLCB0byB0aGUgZ2l2
ZW4gdmVjdG9yLgorICAgIHZvaWQgYXBwZW5kUmVwc0ltcGwoQWlyOjpHZW5lcmF0aW9uQ29udGV4
dCYsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBBaXI6Okluc3QmLCBWZWN0b3I8VmFsdWVSZXA+
Jik7CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVwRm9yQXJnKEFpcjo6Q29kZSYsIGNvbnN0IEFp
cjo6QXJnJik7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwU3BlY2lhbF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N1Y2Nlc3NvckNvbGxlY3Rp
b25faAorI2RlZmluZSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBnZW5l
cmljIHdyYXBwZXIgYXJvdW5kIGxpc3RzIG9mIGZyZXF1ZW50ZWQgYmxvY2tzLCB3aGljaCBnaXZl
cyB5b3UganVzdCB0aGUgYmxvY2tzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrLCB0
eXBlbmFtZSBTdWNjZXNzb3JMaXN0PgorY2xhc3MgU3VjY2Vzc29yQ29sbGVjdGlvbiB7CitwdWJs
aWM6CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbihTdWNjZXNzb3JMaXN0JiBsaXN0KQorICAgICAg
ICA6IG1fbGlzdChsaXN0KQorICAgIHsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdChzaXplX3QgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpbmRleF0uYmxvY2soKTsgfQorICAgIEJhc2ljQmxv
Y2sqJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fbGlzdFtpbmRleF0uYmxvY2soKTsgfQor
ICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBh
dChpbmRleCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIHsg
cmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoK
KyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikK
KyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBpdGVyYXRvcihTdWNjZXNzb3JDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCBzaXplX3QgaW5kZXgp
CisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikgLy8gY29uc3QgaXMgc3R1
cGlkIGFueXdheS4KKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayomIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAg
ICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTdWNjZXNzb3JDb2xsZWN0aW9uKiBt
X2NvbGxlY3Rpb247CisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgIH07CisKKyAgICBpdGVy
YXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9y
IGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKK3ByaXZhdGU6Cisg
ICAgU3VjY2Vzc29yTGlzdCYgbV9saXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdWNjZXNzb3JDb2xs
ZWN0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM1N3aXRjaENhc2UuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgU3dp
dGNoQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCht
X2Nhc2VWYWx1ZSwgIi0+IiwgbV90YXJnZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRj
aENhc2VfaAorI2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJh
cy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoQ2FzZSB7CitwdWJsaWM6CisgICAgU3dpdGNoQ2Fz
ZSgpCisgICAgeworICAgIH0KKworICAgIFN3aXRjaENhc2UoaW50NjRfdCBjYXNlVmFsdWUsIGNv
bnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IG1fY2FzZVZhbHVlKGNhc2VW
YWx1ZSkKKyAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgeworICAgIH0KKworICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdGFyZ2V0OyB9CisKKyAg
ICBpbnQ2NF90IGNhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FzZVZhbHVlOyB9CisgICAg
RnJlcXVlbnRlZEJsb2NrIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0OyB9CisgICAg
QmFzaWNCbG9jayogdGFyZ2V0QmxvY2soKSBjb25zdCB7IHJldHVybiBtX3RhcmdldC5ibG9jaygp
OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgaW50NjRfdCBtX2Nhc2VWYWx1ZTsKKyAgICBGcmVxdWVudGVkQmxvY2sgbV90YXJnZXQ7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM1N3aXRjaENhc2VfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoVmFsdWUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvTGlz
dER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N3aXRjaFZhbHVl
Ojp+U3dpdGNoVmFsdWUoKQoreworfQorCitTd2l0Y2hDYXNlIFN3aXRjaFZhbHVlOjpyZW1vdmVD
YXNlKHVuc2lnbmVkIGluZGV4KQoreworICAgIEZyZXF1ZW50ZWRCbG9jayByZXN1bHRCbG9jayA9
IG1fc3VjY2Vzc29yc1tpbmRleF07CisgICAgaW50NjRfdCByZXN1bHRWYWx1ZSA9IG1fdmFsdWVz
W2luZGV4XTsKKyAgICBtX3N1Y2Nlc3NvcnNbaW5kZXhdID0gbV9zdWNjZXNzb3JzLmxhc3QoKTsK
KyAgICBtX3N1Y2Nlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgIG1fdmFsdWVzW2luZGV4XSA9IG1f
dmFsdWVzLmxhc3QoKTsKKyAgICBtX3ZhbHVlcy5yZW1vdmVMYXN0KCk7CisgICAgcmV0dXJuIFN3
aXRjaENhc2UocmVzdWx0VmFsdWUsIHJlc3VsdEJsb2NrKTsKK30KKwordm9pZCBTd2l0Y2hWYWx1
ZTo6YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQoreworICAgIG1fc3Vj
Y2Vzc29ycy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNjZXNzb3JzW21f
c3VjY2Vzc29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7CisgICAgbV92YWx1
ZXMuYXBwZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3aXRjaFZhbHVl
OjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRoaXMgZGVzdHJ1
Y3RpdmVseSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAgICBvdXQucHJp
bnQobGlzdER1bXAoKnRoaXMpLCAiLCBmYWxsVGhyb3VnaCA9ICIsIGZhbGxUaHJvdWdoKCkpOwor
fQorCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmln
aW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpCisgICAgOiBDb250cm9sVmFs
dWUoaW5kZXgsIFN3aXRjaCwgVm9pZCwgb3JpZ2luKQoreworICAgIG1fc3VjY2Vzc29ycy5hcHBl
bmQoZmFsbFRocm91Z2gpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hWYWx1ZV9o
CisjZGVmaW5lIEIzU3dpdGNoVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hWYWx1ZSA6IHB1YmxpYyBD
b250cm9sVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN3aXRjaDsgfQorCisgICAgflN3aXRjaFZhbHVlKCk7
CisKKyAgICAvLyBudW1DYXNlVmFsdWVzKCkgKyAxID09IG51bVN1Y2Nlc3NvcnMoKS4KKyAgICB1
bnNpZ25lZCBudW1DYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMuc2l6ZSgpOyB9
CisKKyAgICAvLyBUaGUgc3VjY2Vzc29yIGZvciB0aGlzIGNhc2UgdmFsdWUgaXMgYXQgdGhlIHNh
bWUgaW5kZXguCisgICAgaW50NjRfdCBjYXNlVmFsdWUodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIAorICAgIGNvbnN0IFZlY3RvcjxpbnQ2NF90
PiYgY2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAgICBGcmVxdWVu
dGVkQmxvY2sgZmFsbFRocm91Z2goKSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3JzKCkubGFzdCgp
OyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCgpIHsgcmV0dXJuIHN1Y2Nlc3Nv
cnMoKS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBudW1D
YXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNlIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENhc2UoY2FzZVZhbHVlKGluZGV4KSwgc3VjY2Vz
c29yKGluZGV4KSk7CisgICAgfQorICAgIFN3aXRjaENhc2Ugb3BlcmF0b3JbXSh1bnNpZ25lZCBp
bmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgfQorCisg
ICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgOiBtX3N3aXRjaChudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisg
ICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN3aXRjaFZhbHVl
JiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fc3dpdGNoKCZz
d2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRvciooKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAg
ICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4
Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisK
KyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBTd2l0Y2hWYWx1ZSogbV9zd2l0Y2g7CisgICAg
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIHR5cGVkZWYgaXRlcmF0b3IgY29u
c3RfaXRlcmF0b3I7CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIGNhc2UgYW5k
IHJlb3JkZXJzIHRoaW5ncyBhIGJpdC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0aGUgY2FzZXMgZnJv
bSAwIHRvIE4sCisgICAgLy8gdGhlbiB5b3UgY2FuIGtlZXAgaXRlcmF0aW5nIGFmdGVyIHRoaXMg
c28gbG9uZyBhcyB5b3UgcmV2aXNpdCB0aGlzIHNhbWUgaW5kZXggKHdoaWNoIHdpbGwgbm93Cisg
ICAgLy8gY29udGFpbiBzb21lIG90aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJlbW92ZXMgdGhlIGNh
c2UgdGhhdCB3YXMgcmVtb3ZlZC4KKyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNhc2UodW5zaWduZWQg
aW5kZXgpOworCisgICAgdm9pZCBhcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmKTsKKworcHJv
dGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3dpdGNoVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhy
b3VnaCk7CisKKyAgICBWZWN0b3I8aW50NjRfdD4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1N3aXRjaFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlw
ZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgb3V0LnByaW50KCJWb2lkIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBvdXQucHJpbnQoIkludDMyIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDY0OgorICAgICAgICBvdXQucHJpbnQoIkludDY0
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgb3V0LnByaW50
KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBW
b2lkLAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJv
b2wgaXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUg
PT0gSW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJl
dHVybiB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlclR5cGUoKQorewor
ICAgIGlmIChpczMyQml0KCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICByZXR1cm4gSW50
NjQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwor
Y2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6QjM6OlR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVXBzaWxvblZh
bHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFsdWU6OmR1bXBNZXRh
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJeIiwgbV9waGktPmlu
ZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2lsb25WYWx1ZV9oCisjZGVm
aW5lIEIzVXBzaWxvblZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBVcHNp
bG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVwc2lsb247IH0KKworICAgIH5V
cHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBjb25zdCB7IHJldHVybiBtX3BoaTsg
fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisg
ICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFs
dWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2lu
LCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAgeworICAgICAgICBBU1NFUlQodmFs
dWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQorCisgICAgVmFsdWUqIG1fcGhpOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNVcHNpbG9uVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK1VzZUNvdW50czo6VXNlQ291bnRzKFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAg
IDogbV9jb3VudHMocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKK3sKKyAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6IHByb2NlZHVyZS52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKFZhbHVlKiBjaGls
ZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgbV9jb3VudHNbY2hpbGRdKys7Cisg
ICAgfQorfQorCitVc2VDb3VudHM6On5Vc2VDb3VudHMoKQoreworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1VzZUNvdW50c19oCisjZGVmaW5lIEIzVXNlQ291bnRzX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBV
c2VDb3VudHMgeworcHVibGljOgorICAgIFVzZUNvdW50cyhQcm9jZWR1cmUmKTsKKyAgICB+VXNl
Q291bnRzKCk7CisKKyAgICB1bnNpZ25lZCBvcGVyYXRvcltdKFZhbHVlKiB2YWx1ZSkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2NvdW50c1t2YWx1ZV07CisgICAgfQorcHJpdmF0ZToK
KyAgICBJbmRleE1hcDxWYWx1ZSwgdW5zaWduZWQ+IG1fY291bnRzOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNVc2VDb3VudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM1ZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNW
YWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFZhbGlk
YXRlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25z
dCBjaGFyKiBkdW1wQmVmb3JlKQorICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAg
ICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQorCisjZGVmaW5l
IFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZh
aWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9uLCB0
b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKworICAgIHZvaWQgcnVu
KCkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IGJsb2NrczsKKyAgICAgICAg
SGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5Qcm9jOworICAgICAgICBIYXNoU2V0PFZhbHVlKj4gdmFs
dWVJbkJsb2NrOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2NlZHVy
ZSkgeworICAgICAgICAgICAgYmxvY2tzLmFkZChibG9jayk7CisgICAgICAgICAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6ICpibG9jaykKKyAgICAgICAgICAgICAgICB2YWx1ZUluQmxvY2suYWRkKHZh
bHVlKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbV9wcm9jZWR1
cmUudmFsdWVzKCkpCisgICAgICAgICAgICB2YWx1ZUluUHJvYy5hZGQodmFsdWUpOworCisgICAg
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2MpCisgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZUluQmxvY2suY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5CbG9jaykKKyAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlSW5Qcm9jLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKworICAgICAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKSB7CisgICAgICAgICAgICBmb3IgKFZh
bHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlSW5Qcm9jLmNvbnRhaW5zKGNoaWxkKSwgKCJBdCAiLCAqdmFsdWUsICItPiIsIHBvaW50
ZXJEdW1wKGNoaWxkKSkpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBi
bG9jayA6IGJsb2NrcykgeworICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
OiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgK
KyAgICAgICAgICAgICAgICAgICAgYmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiQXQgIiwg
KmJsb2NrLCAiLT4iLCBwb2ludGVyRHVtcChzdWNjZXNzb3IpKSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8vIEZJWE1FOiBFeHBhbmQgdGhpcyB2YWxpZGF0
aW9uIHBoYXNlLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwNDgwCisgICAgfQorCitwcml2YXRlOgorICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JB
U0ggdm9pZCBmYWlsKAorICAgICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1i
ZXIsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBjb25kaXRpb24sCisgICAgICAg
IENTdHJpbmcgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIENTdHJpbmcgZmFpbHVyZU1lc3NhZ2U7
CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiQjMgVkFMSURBVElPTiBGQUlMVVJFXG4iKTsKKyAgICAgICAgICAgIG91
dC5wcmludCgiICAgICIsIGNvbmRpdGlvbiwgIiAoIiwgZmlsZW5hbWUsICI6IiwgbGluZU51bWJl
ciwgIilcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgbWVzc2FnZSwgIlxuIik7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBBZnRlciAiLCBtX3Byb2NlZHVyZS5sYXN0UGhh
c2VOYW1lKCksICJcbiIpOworICAgICAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9DU3Ry
aW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAg
ICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAgZGF0YUxvZygiQmVmb3JlICIs
IG1fcHJvY2VkdXJlLmxhc3RQaGFzZU5hbWUoKSwgIjpcbiIpOworICAgICAgICAgICAgZGF0YUxv
ZyhtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2coIkF0IHRpbWUgb2Yg
ZmFpbHVyZTpcbiIpOworICAgICAgICBkYXRhTG9nKG1fcHJvY2VkdXJlKTsKKworICAgICAgICBk
YXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVy
ZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVuY3Rpb24sIGNvbmRpdGlvbik7CisgICAgICAgIENS
QVNIKCk7CisgICAgfQorICAgIAorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29u
c3QgY2hhciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K3ZvaWQgdmFsaWRhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIGR1bXBCZWZv
cmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihwcm9jZWR1cmUsIGR1bXBCZWZvcmUpOwor
ICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxp
ZGF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWxpZGF0ZV9oCisjZGVmaW5l
IEIzVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1
cmUmLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFs
aWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNs
dWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjb25zdCBjaGFyKiBjb25z
dCBWYWx1ZTo6ZHVtcFByZWZpeCA9ICJAIjsKKworVmFsdWU6On5WYWx1ZSgpCit7Cit9CisKK3Zv
aWQgVmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqIHZhbHVlKQoreworICAgIC8vIFRo
aXMgaXMgYSBiaXQgY3JhenkuIEl0IGRvZXMgYW4gaW4tcGxhY2UgcmVwbGFjZW1lbnQgb2Ygd2hh
dGV2ZXIgVmFsdWUgc3ViY2xhc3MgdGhpcyBpcyB3aXRoCisgICAgLy8gYSBwbGFpbiBJZGVudGl0
eSBWYWx1ZS4gV2UgZmlyc3QgY29sbGVjdCBhbGwgb2YgdGhlIGluZm9ybWF0aW9uIHdlIG5lZWQs
IHRoZW4gd2UgZGVzdHJ1Y3QgdGhlCisgICAgLy8gcHJldmlvdXMgdmFsdWUgaW4gcGxhY2UsIGFu
ZCB0aGVuIHdlIGNvbnN0cnVjdCB0aGUgSWRlbnRpdHkgVmFsdWUgaW4gcGxhY2UuCisKKyAgICB1
bnNpZ25lZCBpbmRleCA9IG1faW5kZXg7CisgICAgVHlwZSB0eXBlID0gbV90eXBlOworICAgIE9y
aWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93
bmVyOworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworCisgICAg
UkVMRUFTRV9BU1NFUlQodHlwZSA9PSB2YWx1ZS0+dHlwZSgpKTsKKworICAgIHRoaXMtPlZhbHVl
Ojp+VmFsdWUoKTsKKworICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIElkZW50aXR5LCB0eXBl
LCBvcmlnaW4sIHZhbHVlKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+
cmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudDsKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhO
b3AoKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBPcmlnaW4gb3JpZ2lu
ID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKyAgICBW
YWx1ZSogcmVwbGFjZW1lbnQgPSB0aGlzLT5yZXBsYWNlbWVudDsKKworICAgIHRoaXMtPlZhbHVl
Ojp+VmFsdWUoKTsKKworICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIE5vcCwgVm9pZCwgb3Jp
Z2luKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+cmVwbGFjZW1lbnQg
PSByZXBsYWNlbWVudDsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBW
YWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
bV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNvZGUpOworCisgICAgb3V0LnByaW50KCIo
Iik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hp
bGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOwor
CisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0OworICAgIGR1bXBNZXRhKHN0cmluZ091
dCk7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgaWYg
KHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBzdHJpbmcpOworCisg
ICAgb3V0LnByaW50KCIpIik7Cit9CisKK3ZvaWQgVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFt
JikgY29uc3QKK3sKK30KKworVHlwZSBWYWx1ZTo6dHlwZUZvcihPcGNvZGUgb3Bjb2RlLCBWYWx1
ZSogZmlyc3RDaGlsZCkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgSWRlbnRp
dHk6CisgICAgY2FzZSBBZGQ6CisgICAgY2FzZSBTdWI6CisgICAgY2FzZSBNdWw6CisgICAgY2Fz
ZSBEaXY6CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICBjYXNlIE1vZDoKKyAgICBjYXNlIEJpdEFu
ZDoKKyAgICBjYXNlIEJpdE9yOgorICAgIGNhc2UgQml0WG9yOgorICAgIGNhc2UgU2hsOgorICAg
IGNhc2UgU1NocjoKKyAgICBjYXNlIFpTaHI6CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNl
IENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiBmaXJzdENoaWxk
LT50eXBlKCk7CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIHJldHVybiBwb2ludGVy
VHlwZSgpOworICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBUcnVu
YzoKKyAgICBjYXNlIERUb0kzMjoKKyAgICBjYXNlIEVxdWFsOgorICAgIGNhc2UgTm90RXF1YWw6
CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgIGNhc2UgTGVz
c0VxdWFsOgorICAgIGNhc2UgR3JlYXRlckVxdWFsOgorICAgIGNhc2UgQWJvdmU6CisgICAgY2Fz
ZSBCZWxvdzoKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAg
ICAgICByZXR1cm4gSW50MzI7CisgICAgY2FzZSBTRXh0MzI6CisgICAgY2FzZSBaRXh0MzI6Cisg
ICAgICAgIHJldHVybiBJbnQ2NDsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBjYXNlIElUb0Q6Cisg
ICAgICAgIHJldHVybiBEb3VibGU7CisgICAgY2FzZSBOb3A6CisgICAgICAgIHJldHVybiBWb2lk
OworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMjA5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNWYWx1ZV9oCisjZGVmaW5lIEIzVmFsdWVfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisjaW5j
bHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3dGYvRmFz
dE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIFN0YWNrbWFwOwor
CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBWYWx1ZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoVmFsdWUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5
cGVkZWYgVmVjdG9yPFZhbHVlKiwgMz4gQWRqYWNlbmN5TGlzdDsKKworICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUpIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwgflZhbHVlKCk7CisKKyAgICB1bnNp
Z25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICAvLyBOb3Rl
IHRoYXQgdGhlIG9wY29kZSBpcyBpbW11dGFibGUsIGV4Y2VwdCBmb3IgcmVwbGFjaW5nIHZhbHVl
cyB3aXRoIGlkZW50aXR5LgorICAgIE9wY29kZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29w
Y29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9
CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGls
ZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hpbGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0
eXBlIHVzaW5nIHRoZSBvcGNvZGUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90
eXBlOyB9CisKKyAgICAvLyBUaGlzIGlzIHVzZWZ1bCB3aGVuIGxvd2VyaW5nLiBOb3RlIHRoYXQg
dGhpcyBpcyBvbmx5IHZhbGlkIGZvciBub24tdm9pZCB2YWx1ZXMuCisgICAgQWlyOjpBcmc6OlR5
cGUgYWlyVHlwZSgpIGNvbnN0IHsgcmV0dXJuIEFpcjo6QXJnOjp0eXBlRm9yQjNUeXBlKHR5cGUo
KSk7IH0KKworICAgIEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJl
bjsgfSAKKyAgICBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJu
IG1fY2hpbGRyZW47IH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOwor
ICAgIHZvaWQgcmVwbGFjZVdpdGhOb3AoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8v
IFRoaXMgaXMgaG93IHlvdSBjYXN0IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRv
IGRvIHNvbWV0aGluZyBwcm92aWRlZCB0aGF0IHdlIGhhdmUgYQorICAgIC8vIEFyZ3VtZW50UmVn
VmFsdWUsIHlvdSBjYW4gZG86CisgICAgLy8KKyAgICAvLyBpZiAoQXJndW1lbnRSZWdWYWx1ZSog
YXJndW1lbnRSZWcgPSB2YWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkgeworICAgIC8vICAg
ICB0aGluZ3MKKyAgICAvLyB9CisgICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwg
aWYgdGhpcyBvcGNvZGUoKSAhPSBBcmd1bWVudFJlZy4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoaXMg
cmV0dXJucyBudWxscHRyCisgICAgLy8gaWYgVDo6YWNjZXB0cyhvcGNvZGUoKSkgcmV0dXJucyBm
YWxzZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7CisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgVD4KKyAgICBjb25zdCBUKiBhcygpIGNvbnN0OworICAgIAorICAgIGJvb2wg
aGFzSW50MzIoKSBjb25zdDsKKyAgICBpbnQzMl90IGFzSW50MzIoKSBjb25zdDsKKyAgICAKKyAg
ICBib29sIGhhc0ludDY0KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludDY0KCkgY29uc3Q7CisK
KyAgICBib29sIGhhc0ludCgpIGNvbnN0OworICAgIGludDY0X3QgYXNJbnQoKSBjb25zdDsKKyAg
ICBib29sIGlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0OworCisgICAgYm9vbCBoYXNEb3VibGUo
KSBjb25zdDsKKyAgICBkb3VibGUgYXNEb3VibGUoKSBjb25zdDsKKworICAgIFN0YWNrbWFwKiBz
dGFja21hcCgpOworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1
cmU7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVy
ZS4KKyAgICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNp
dGx5OgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAg
OiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBt
X3R5cGUodHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGls
ZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRo
aXMgZm9ybSBpcyBmb3Igc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9w
Y29kZSBoYXMgbm8gY2hpbGRyZW46CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAvLyBU
aGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBm
cm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGNoaWxkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNv
ZGUpCisgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKKyAgICAg
ICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwg
YXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhv
c2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbG9u
ZSwgYW5kIHRoYXQgZG9uJ3QKKyAgICAvLyB0YWtlIGFueSBhcmd1bWVudHM6CisgICAgZXhwbGlj
aXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisg
ICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAg
ICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBudWxscHRyKSkKKyAgICAgICAgLCBtX29yaWdp
bihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciB2YXJhcmdz
LgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAg
ICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBt
X2NoaWxkcmVuKGNoaWxkcmVuKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGlj
IFR5cGUgdHlwZUZvcihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKworICAgIC8vIFRoaXMg
Z3JvdXAgb2YgZmllbGRzIGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgorICAgIHVuc2ln
bmVkIG1faW5kZXg7CisgICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgIFR5cGUgbV90eXBlOworICAg
IAorICAgIE9yaWdpbiBtX29yaWdpbjsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisK
K3B1YmxpYzoKKyAgICBCYXNpY0Jsb2NrKiBvd25lciB7IG51bGxwdHIgfTsgLy8gY29tcHV0ZWQg
bGF6aWx5LgorICAgIFZhbHVlKiByZXBsYWNlbWVudCB7IG51bGxwdHIgfTsgLy8gdXNlZCBmb3Ig
YW5hbHlzZXMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KK307CisKK2NsYXNzIERlZXBWYWx1ZUR1bXAg
eworcHVibGljOgorICAgIERlZXBWYWx1ZUR1bXAoY29uc3QgVmFsdWUqIHZhbHVlKQorICAgICAg
ICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFsdWUpCisgICAgICAgICAg
ICBtX3ZhbHVlLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQu
cHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBWYWx1ZSogbV92
YWx1ZTsKK307CisKK2lubGluZSBEZWVwVmFsdWVEdW1wIGRlZXBEdW1wKGNvbnN0IFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVtcCh2YWx1ZSk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGlu
ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZUlubGluZXNfaAor
I2RlZmluZSBCM1ZhbHVlSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1QqIFZh
bHVlOjphcygpCit7CisgICAgaWYgKFQ6OmFjY2VwdHMob3Bjb2RlKCkpKQorICAgICAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIHJldHVybiBudWxscHRyOworfQorCit0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorY29uc3QgVCogVmFsdWU6OmFzKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gY29uc3RfY2FzdDxWYWx1ZSo+KHRoaXMpLT5hczxUPigpOworfQorCitpbmxpbmUgYm9vbCBW
YWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0MzJWYWx1ZT4o
KTsKK30KKworaW5saW5lIGludDMyX3QgVmFsdWU6OmFzSW50MzIoKSBjb25zdAoreworICAgIHJl
dHVybiBhczxDb25zdDMyVmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIFZhbHVl
OjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3Q2NFZhbHVlPigpOwor
fQorCitpbmxpbmUgaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJu
IGFzPENvbnN0NjRWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhh
c0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkgfHwgaGFzSW50NjQoKTsKK30K
KworaW5saW5lIGludDY0X3QgVmFsdWU6OmFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFz
SW50MzIoKSA/IGFzSW50MzIoKSA6IGFzSW50NjQoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6
OmlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludCgpICYmIGFz
SW50KCkgPT0gdmFsdWU7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25z
dAoreworICAgIHJldHVybiAhIWFzPENvbnN0RG91YmxlVmFsdWU+KCk7Cit9CisKK2lubGluZSBk
b3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3Vi
bGVWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworaW5saW5lIFN0YWNrbWFwKiBWYWx1ZTo6c3RhY2tt
YXAoKQoreworICAgIGlmIChDaGVja1ZhbHVlKiBjaGVjayA9IGFzPENoZWNrVmFsdWU+KCkpCisg
ICAgICAgIHJldHVybiAmY2hlY2stPnN0YWNrbWFwOworICAgIGlmIChQYXRjaHBvaW50VmFsdWUq
IHBhdGNocG9pbnQgPSBhczxQYXRjaHBvaW50VmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmcGF0
Y2hwb2ludC0+c3RhY2ttYXA7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
VmFsdWVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVS
ZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVw
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVw
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlUmVwLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1ZVJlcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChtX2tpbmQpOworICAgIHN3aXRjaCAobV9raW5kKSB7Cisg
ICAgY2FzZSBBbnk6CisgICAgY2FzZSBTb21lUmVnaXN0ZXI6CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIigiLCByZWcoKSwgIikiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9m
ZnNldEZyb21GUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja0FyZ3Vt
ZW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCBvZmZzZXRGcm9tU1AoKSwgIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIHZh
bHVlKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIFZhbHVlUmVwOjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChr
aW5kKSB7CisgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICBvdXQucHJpbnQoIkFueSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAg
ICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAgICBvdXQucHJp
bnQoIlN0YWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0Fy
Z3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrQXJndW1lbnQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNv
bnN0YW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDE2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdl
IHVzZSB0aGlzIGNsYXNzIHRvIGRlc2NyaWJlIHZhbHVlIHJlcHJlc2VudGF0aW9ucyBhdCBzdGFj
a21hcHMuIEl0J3MgdXNlZCBib3RoIHRvIGZvcmNlIGEKKy8vIHJlcHJlc2VudGF0aW9uIGFuZCB0
byBnZXQgdGhlIHJlcHJlc2VudGF0aW9uLiBXaGVuIHRoZSBCMyBjbGllbnQgZm9yY2VzIGEgcmVw
cmVzZW50YXRpb24sIHdlIHNheQorLy8gdGhhdCBpdCdzIGFuIGlucHV0LiBXaGVuIEIzIHRlbGxz
IHRoZSBjbGllbnQgd2hhdCByZXByZXNlbnRhdGlvbiBpdCBwaWNrZWQsIHdlIHNheSB0aGF0IGl0
J3MgYW4KKy8vIG91dHB1dC4KKworY2xhc3MgVmFsdWVSZXAgeworcHVibGljOgorICAgIGVudW0g
S2luZCB7CisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5z
IHRoYXQgQjMgY2FuIHBpY2sgYW55IHJlcHJlc2VudGF0aW9uLiBBcyBhbgorICAgICAgICAvLyBv
dXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93LiBUaGlz
IHdpbGwgb25seSBhcmlzZSBmb3IgdGhlCisgICAgICAgIC8vIHJpZ2h0IG9wZXJhbmQgKGkuZS4g
Y2hpbGQoMSkpIG9mIGEgQ2hlY2tNdWwuCisgICAgICAgIEFueSwKKworICAgICAgICAvLyBBcyBh
biBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNv
bWUgcmVnaXN0ZXIuIEl0IGNvdWxkIGJlIGEKKyAgICAgICAgLy8gcmVnaXN0ZXIgdGhhdCB0aGlz
IGNsYWltcyB0byBjbG9iYmVyIQorICAgICAgICBTb21lUmVnaXN0ZXIsCisKKyAgICAgICAgLy8g
QXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdp
c3Rlci4gQXMgYW4gb3V0cHV0CisgICAgICAgIC8vIHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxz
IHVzIHdoYXQgcmVnaXN0ZXIgQjMgcGlja2VkLgorICAgICAgICBSZWdpc3RlciwKKworICAgICAg
ICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFj
ayBzbG90IEIzIHBpY2tlZC4gSXQncyBub3QgYSB2YWxpZAorICAgICAgICAvLyBpbnB1dCByZXBy
ZXNlbnRhdGlvbi4KKyAgICAgICAgU3RhY2ssCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVw
cmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIHRoZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhlIGFyZ3Vt
ZW50IGFyZWEgYXQgc29tZQorICAgICAgICAvLyBvZmZzZXQuCisgICAgICAgIC8vIEZJWE1FOiBU
aGUgU3RhY2ttYXBTcGVjaWFsIGNsYXNzIG5lZWRzIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRo
YXQgdGhlc2UgZG9uJ3QgdHVybiBpbnRvCisgICAgICAgIC8vIEFpciBvcGVyYW5kcy4KKyAgICAg
ICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDU0MAorICAg
ICAgICBTdGFja0FyZ3VtZW50LAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRh
dGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIzIGNvbnN0YW50LWZvbGRlZCB0aGUgdmFsdWUuCisg
ICAgICAgIENvbnN0YW50CisgICAgfTsKKyAgICAKKyAgICBWYWx1ZVJlcCgpCisgICAgICAgIDog
bV9raW5kKEFueSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVmFsdWVSZXAoUmVnIHJl
ZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0ZXIpCisgICAgICAgICwgbV92YWx1ZShyZWcuaW5k
ZXgoKSkKKyAgICB7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHJlZyhSZWcgcmVnKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7CisgICAgfQorCisgICAgc3RhdGlj
IFZhbHVlUmVwIHN0YWNrKGludHB0cl90IG9mZnNldEZyb21GUCkKKyAgICB7CisgICAgICAgIFZh
bHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAgICAgICBy
ZXN1bHQubV92YWx1ZSA9IG9mZnNldEZyb21GUDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRG
cm9tU1ApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBTdGFja0FyZ3VtZW50OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IG9mZnNldEZy
b21TUDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVS
ZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50OworICAgICAgICByZXN1bHQubV92
YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBWYWx1ZVJlcCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gVmFsdWVSZXA6OmNvbnN0YW50KGJpdHdpc2VfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOwor
ICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBBbnk7IH0K
KworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBS
ZWdpc3Rlcik7CisgICAgICAgIHJldHVybiBSZWc6OmZyb21JbmRleChtX3ZhbHVlKTsKKyAgICB9
CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnRwdHJf
dD4obV92YWx1ZSk7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2tBcmd1bWVudCk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV92YWx1ZSk7CisgICAgfQorCisgICAgaW50
NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IENvbnN0
YW50KTsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWU7CisgICAgfQorCisgICAgZG91YmxlIGRvdWJs
ZVZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8ZG91Ymxl
Pih2YWx1ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBLaW5kIG1fa2luZDsKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlZhbHVlUmVwOjpLaW5kKTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNWYWx1ZVJlcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9w
YXR0ZXJuX21hdGNoZXIucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NTAgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKKyR2YXJJbmRleCA9
IDAKK2RlZiBuZXdWYXIKKyAgICAkdmFySW5kZXggKz0gMQorICAgICJfdG1wI3skdmFySW5kZXh9
IgorZW5kCisKK2NsYXNzIFByb2R1Y3Rpb24KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6bmFt
ZSwgOnZhck5hbWUsIDphbm9ueW1vdXMsIDpvcGNvZGUsIDpjaGlsZHJlbgorCisgICAgZGVmIGlu
aXRpYWxpemUob3JpZ2luLCBuYW1lLCBvcGNvZGUsIGNoaWxkcmVuKQorICAgICAgICBAb3JpZ2lu
ID0gb3JpZ2luCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAYW5vbnltb3VzID0gKG5h
bWUgPT0gbmlsIG9yIG5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLykKKyAgICAgICAgQHZhck5hbWUg
PSBAYW5vbnltb3VzID8gbmV3VmFyIDogbmFtZSA9fiAvXEFcJC8gPyAkJyA6IG5hbWUKKyAgICAg
ICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNoaWxk
cmVuIDogW10KKyAgICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAgICAgb3Bjb2RlICE9
IG5pbAorICAgIGVuZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgY2hp
bGRyZW4uZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQsIGluZGV4IHwKKyAg
ICAgICAgICAgIHlpZWxkIHZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5uYW1lLAor
ICAgICAgICAgICAgICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxk
LmFub255bW91cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDogOmFub25PcGVyYW5k
KSA6IChjaGlsZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisgICAgICAgICAgICAg
ICAgICBpbmRleAorICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAg
ICB9CisgICAgZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVyIDpuYW1l
LCA6cHJvZHVjdGlvbnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rpb25zKQor
ICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMK
KyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUs
IDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1i
ZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0g
bGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVO
YW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0
cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdp
biwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBz
dHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVy
LmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVu
ZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAg
IGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQg
I3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQor
ICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9y
OiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6
ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2Rl
ZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFt
ZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0
ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLwor
ICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAg
ICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAg
ICAgICAgd2hlbiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKikvCisgICAgICAgICAgICBy
ZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikK
KyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBp
Z25vcmUKKyAgICAgICAgd2hlbiAvXEFbPSgpLF0vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9r
ZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFt
ZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmlu
c3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVu
ZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgIyBXZSBjYW4g
ZXh0ZW5kIHRoaXMgYXMgd2UgYWRkIG1vcmUga2V5d29yZHMuIExpa2UsIHdlIG1pZ2h0IHdhbnQg
ImluY2x1ZGUiIGV2ZW50dWFsbHkuCisgICAgdG9rZW4gPX4gL1xBKChtYXRjaGVyKXwoaW5jbHVk
ZSkpXFovCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEFb
YS16QS1aMC05JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitl
bmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisg
ICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisg
ICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAor
CisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYg
cGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2Vu
LnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1l
bnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBm
aWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJv
ciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAg
ICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VF
cnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAg
ICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAg
cmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50
aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAg
ICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlv
bnMsIHByb2R1Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0gcHJvZHVjdGlvbi52YXJOYW1lCisg
ICAgICAgICAgICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0aW9uIGhhcyBzYW1lIG5hbWUgYXMg
cGFyZW50IHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgaWYgcHJvZHVjdGlvbnMu
ZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAg
ICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisg
ICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBlbmQKKworICAgIGRlZiBwYXJz
ZQorICAgICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAgICAgICBtYXRjaGVyTmFtZSA9IGNv
bnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorCisgICAgICAgIGxv
b3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAg
ICAgICAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVkZSIuIElmIHdlIGRpZCB0
aGF0LCBpdCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHBhcnNlUHJv
ZHVjdGlvbgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3Qg
eyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAg
ICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgICAgIGVuZAor
CisgICAgICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgICAgIH0KKworICAg
ICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAg
ICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAg
ICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBpZiB0b2tlbiA9PSAiPSIK
KyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAgICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlk
ZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9
PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICAgICAgb3Bjb2RlID0gbmFt
ZQorICAgICAgICAgICAgbmFtZSA9IG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1
cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisg
ICAgICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGxvb3AgeworICAgICAg
ICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisKKyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1l
LCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorCisgICAgICAgICAgICBicmVhayBpZiB0
b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICB9CisKKyAgICAg
ICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAgICAgICAgYWR2YW5jZQorCisgICAgICAgIFBy
b2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQK
K2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVh
ZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hlciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBT
dWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRleE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisg
ICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4
TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVh
Y2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5k
ZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAg
ICAgfQorICAgIGVuZAorCisgICAgZGVmIG1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAg
IGluZGV4TGlzdC5tYXAgeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5k
ZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCiskc3RkZXJyLnB1dHMgIkdl
bmVyYXRpbmcgY29kZSBmb3IgI3tmaWxlTmFtZX0uIgorCitGaWxlLm9wZW4oIkIzIiArIG1hdGNo
ZXIubmFtZSArICIuaCIsICJ3IikgeworICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMgIi8v
IEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVOYW1l
fSAtLSBkbyBub3QgZWRpdCEiCisKKyAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNoZXIu
bmFtZX1faCIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIKKyAg
ICAKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAgb3V0
cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1dHMg
InRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IgorICAgIG91dHAucHV0cyAiYm9vbCBydW4je21h
dGNoZXIubmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0cC5w
dXRzICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5IGlu
ZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAg
ICAjIHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBn
b29kIHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91Lgor
CisgICAgIyBJbiBvZGQgc2l0dWF0aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZhbHVl
LiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5wdXRz
ICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsiCisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHByb3Rl
Y3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2
aW5nIGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5h
bWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVj
dGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXgg
fAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlz
dHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgK
KyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5k
CisgICAgICAgIH0KKworICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBp
bmRleExpc3QgfAorICAgICAgICAgICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBd
XS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0tPmNoaWxkcmVuKCkuc2l6ZSgpID49ICN7
bGVuZ3RofSkgeyIKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeWll
bGQgaW5kZXhMaXN0CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVuZAorCisgICAg
IyBUaGlzIGVmZmljaWVudGx5IHNlbGVjdHMgZnJvbSB0aGUgZ2l2ZW4gc2V0IG9mIHByb2R1Y3Rp
b25zLiBJdCBhc3N1bWVzIHRoYXQgcHJvZHVjdGlvbnMKKyAgICAjIGFyZSBub3QgZHVwbGljYXRl
ZC4gSXQgeWllbGRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgcHJvZHVjdGlvbiwgYW5kIHRoZSBj
b3JvdXRpbmUgaXMKKyAgICAjIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBzcGVjaWZpYyBjb2Rl
IGZvciB0aGF0IHByb2R1Y3Rpb24uIFRoZSBjb3JvdXRpbmUgaXMgZ2l2ZW4gbGlzdHMgb2YKKyAg
ICAjIGluZGljZXMgb2YgcG9zc2libHktbWF0Y2hpbmcgcHJvZHVjdGlvbnMuCisgICAgZGVmIG1h
dGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgIyBG
aXJzdCwgc3BsaXQgdGhlIHByb2R1Y3Rpb25zIGxpc3QgaW50byBydW5zIG9mIHByb2R1Y3Rpb25z
IHdpdGggYW4gb3Bjb2RlIGFuZCBwcm9kdWN0aW9ucworICAgICAgICAjIHdpdGhvdXQgb25lLgor
ICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2lu
ZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYg
aW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5oYXNPcGNv
ZGUgPT0gcHJvZHVjdGlvbi5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0x
XSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMg
PDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
ICMgTm93LCBlbWl0IHBhdHRlcm4gbWF0Y2hpbmcgY29kZS4gV2UgZG8gaXQgZGlmZmVyZW50bHkg
Zm9yIGxpc3RzIHdpdGggYW4gb3Bjb2RlIHRoYW4gZm9yCisgICAgICAgICMgbGlzdHMgd2l0aG91
dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4TGlz
dCB8CisgICAgICAgICAgICBpZiBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmhhc09wY29kZQor
ICAgICAgICAgICAgICAgICMgTm93LCB3ZSBzcGxpdCB0aGlzIGluZGV4IGxpc3QgaW50byBncm91
cHMgZm9yIGVhY2ggb3Bjb2RlLgorICAgICAgICAgICAgICAgIGdyb3VwcyA9IHt9CisgICAgICAg
ICAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4IHwK
KyAgICAgICAgICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHByb2R1Y3Rpb25zW2luZGV4XQorICAg
ICAgICAgICAgICAgICAgICBpZiBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdCisgICAgICAgICAg
ICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdIDw8IGluZGV4CisgICAgICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9kdWN0
aW9uLm9wY29kZV0gPSBbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgRW1pdCBhIHN3aXRjaCBzdGF0ZW1lbnQuCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7dmFsdWVOYW1lfS0+b3Bjb2RlKCkp
IHsiCisgICAgICAgICAgICAgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgICAgICAgICAg
ICAgIHwgb3Bjb2RlLCBzdWJJbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJN
YXRjaC5uZXcoc3ViSW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICAgICAg
bWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAg
ICAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICAg
ICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0i
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5u
ZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChv
dXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAg
ICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFw
SW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmQK
KyAgICAgICAgfQorICAgIGVuZAorCisgICAgIyBUYWtlcyBwcm9kdWN0aW9ucyB0aGF0IGhhdmUg
dGhlIHNhbWUgb3Bjb2RlIGFuZCB0aGUgc2FtZSBsZW5ndGggYW5kIHNlbGVjdHMgZnJvbSB0aGVt
IGJhc2VkIG9uCisgICAgIyB0aGUgcHJvZHVjdGlvbnMgYXQgdGhlIGdpdmVuIGNvbHVtbi4KKyAg
ICBkZWYgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucywgY29sdW1uSW5k
ZXgpCisgICAgICAgIGlmIGNvbHVtbkluZGV4ID49IHByb2R1Y3Rpb25zWzBdLmNoaWxkcmVuLmxl
bmd0aAorICAgICAgICAgICAgeWllbGQgKDAuLi4ocHJvZHVjdGlvbnMuc2l6ZSkpLnRvX2EKKyAg
ICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKworICAgICAgICBzdWJWYWx1ZSA9IG5ld1Zh
cgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICBvdXRwLnB1dHMgIlZh
bHVlKiAje3N1YlZhbHVlfSA9ICN7dmFsdWVOYW1lfS0+Y2hpbGQoI3tjb2x1bW5JbmRleH0pOyIK
KworICAgICAgICAjIFdlIG1heSBub3QgdXNlIHRoaXMgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVy
IHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICAgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0o
I3tzdWJWYWx1ZX0pOyIKKyAgICAgICAgCisgICAgICAgIHN1YlByb2R1Y3Rpb25zID0gcHJvZHVj
dGlvbnMubWFwIHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiB8CisgICAgICAgICAgICBwcm9k
dWN0aW9uLmNoaWxkcmVuW2NvbHVtbkluZGV4XQorICAgICAgICB9CisKKyAgICAgICAgbWF0Y2hS
ZWN1cnNpdmVseShvdXRwLCBzdWJWYWx1ZSwgc3ViUHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAg
IHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4
TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5h
bWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCArIDEpIHsKKyAgICAgICAgICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5k
ZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG91
dHAucHV0cyAifSIKKyAgICBlbmQKKworICAgIGRlZiBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHZh
bHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFs
dWVOYW1lLCBwcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAg
ICAgICAgIyBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoaXMgaW5kZXggbGlzdCBjb250YWlucyBw
cm9kdWN0aW9ucyB3aXRoIHRoZSBzYW1lIG9wY29kZSBhbmQKKyAgICAgICAgICAgICMgdGhlIHNh
bWUgbGVuZ3RoLgorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0
LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwg
c3ViTWF0Y2gucHJvZHVjdGlvbnMsIDApIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8
CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgbWF0Y2hSZWN1cnNpdmVs
eShvdXRwLCAiX3ZhbHVlIiwgbWF0Y2hlci5wcm9kdWN0aW9ucykgeworICAgICAgICB8IGluZGV4
TGlzdCB8CisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAor
ICAgICAgICAgICAgcHJvZHVjdGlvbiA9IG1hdGNoZXIucHJvZHVjdGlvbnNbaW5kZXhdCisgICAg
ICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3By
b2R1Y3Rpb24udmFyTmFtZX0gPSBfdmFsdWU7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJVTlVT
RURfUEFSQU0oI3twcm9kdWN0aW9uLnZhck5hbWV9KTsiCisgICAgICAgICAgICBpbnRlcm5hbEFy
Z3VtZW50cyA9IFtdCisgICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRzID0gW10KKyAgICAgICAg
ICAgIHRyeUFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBudW1TY29wZXMgPSAwCisgICAgICAg
ICAgICBzZWVuID0ge30KKworICAgICAgICAgICAgIyBGSVhNRTogV2Ugd2FudCB0byBiZSBhYmxl
IHRvIGNvbWJpbmUgcGF0dGVybiBtYXRjaGVycywgbGlrZSBoYXZlIHRoZSBwYXR0ZXJuIG1hdGNo
IHJ1bGUKKyAgICAgICAgICAgICMgZm9yIEJyYW5jaCBpbiB0aGUgbG93ZXJpbmcgcGF0Y2hlciBk
ZWxlZ2F0ZSB0byBhIG1hdGNoZXIgdGhhdCBjYW4gZGVkdWNlIHRoZSBraW5kIG9mCisgICAgICAg
ICAgICAjIGNvbXBhcmlzb24gdGhhdCB3ZSdyZSBkb2luZy4gV2UgY291bGQgdGhlbiByZXVzZSB0
aGF0IGxhdHRlciBtYXRjaGVyIGZvciBDaGVjayBhbmQKKyAgICAgICAgICAgICMgdW5mdXNlZCBj
b21wYXJlLiBUaGUga2V5IHRvIG1ha2luZyBzdWNoIGEgZGVsZWdhdGlvbiB3b3JrIGlzIHRvIGhh
dmUgdGhlIGlubmVyIG1hdGNoZXIKKyAgICAgICAgICAgICMgKHRoZSBjb21wYXJpc29uIG1hdGNo
ZXIgaW4gdGhpcyBjYXNlKSBrZWVwIGNhc2NhZGluZyBpZiBpdCBlbmNvdW50ZXJzIGEgcnVsZSB0
aGF0CisgICAgICAgICAgICAjIHByb2R1Y2VzIHNvbWV0aGluZyB0aGF0IHRoZSBvdXRlciBtYXRj
aGVyIGNhbm5vdCBoYW5kbGUuIEl0J3Mgbm90IG9idmlvdXMgdGhhdCB0aGUKKyAgICAgICAgICAg
ICMgY29tcGFyaXNvbiBtYXRjaGVyIHdvdWxkIG5lZWQgdGhpcywgYnV0IHRoZSBhZGRyZXNzIG1h
dGNoZXIgcHJvYmFibHkgd2lsbC4gRm9yIGV4YW1wbGUsCisgICAgICAgICAgICAjIHdlIG1heSBo
YXZlIGEgU3RvcmVBZGRMb2FkIHJ1bGUgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIGFkZHJlc3MgbWF0
Y2hlciwgYW5kIHRoZSBhZGRyZXNzCisgICAgICAgICAgICAjIG1hdGNoZXIgbWF5IHByb2R1Y2Ug
YW4gYWRkcmVzcyB0aGF0IHRoZSBsb3dlcmluZyBtYXRjaGVyIGNhbm5vdCB1c2UgYmVjYXVzZSB3
aGlsZSB0aGUKKyAgICAgICAgICAgICMgQWRkIGZvcm0gZG9lcyBhY2NlcHQgYWRkcmVzc2VzIGl0
IG1heSBub3QgYWNjZXB0IHRoZSBwYXJ0aWN1bGFyIGFkZHJlc3MgdGhhdCB0aGUKKyAgICAgICAg
ICAgICMgYWRkcmVzcyBtYXRjaGVyIHByb2R1Y2VkLiBJbiB0aGF0IGNhc2UsIGluc3RlYWQgb2Yg
Z2l2aW5nIHVwIG9uIHRoZSBTdG9yZUFkZExvYWQgcnVsZSwKKyAgICAgICAgICAgICMgd2Ugd2Fu
dCB0aGUgYWRkcmVzcyBtYXRjaGVyIHRvIGp1c3QgdHJ5IGEgZGlmZmVyZW50IGFkZHJlc3MuIFRo
ZSBjb21wYXJpc29uIG1hdGNoZXIKKyAgICAgICAgICAgICMgbWlnaHQgd2FudCB0aGlzIGp1c3Qg
Zm9yIGJldHRlciBjb250cm9sbGluZyB3aGVuIHRvIHBpbiB2YXJpYWJsZXMuIEN1cnJlbnRseSwg
aWYgaXQKKyAgICAgICAgICAgICMgY29uc3RydWN0ZWQgc29tZSBjb2RlLCBpdCB3b3VsZCBhbHNv
IHBpbiB0aGUgdmFyaWFibGVzIHRoYXQgaXQgdXNlZC4gSWYgdGhlIGxvd2VyaW5nCisgICAgICAg
ICAgICAjIG1hdGNoZXIgdGhlbiBkZWNpZGVkIHRvIHJlamVjdCB0aGUgY29kZSBjcmVhdGVkIGJ5
IHRoZSBjb21wYXJpc29uIG1hdGNoZXIsIGl0IHdvdWxkCisgICAgICAgICAgICAjIGhhdmUgYSBo
YXJkIHRpbWUgInVucGlubmluZyIgdGhvc2UgdmFyaWFibGVzLiBCdXQgaWYgd2UgaGFkIHNvbWUg
a2luZCBvZiBkZWxlZ2F0aW9uLCB3ZQorICAgICAgICAgICAgIyBjb3VsZCBoYXZlIHRoZSBwaW5u
aW5nIG9mIHRoZSBjb21wYXJpc29uIG1hdGNoZXIgaGFwcGVuIG9ubHkgaWYgdGhlIGxvd2VyaW5n
IG1hdGNoZXIKKyAgICAgICAgICAgICMgYWNjZXB0ZWQuCisgICAgICAgICAgICAjCisgICAgICAg
ICAgICAjIFRoaXMgY291bGQgYWxsIGJlIGFjY29tcGxpc2hlZCBieSBoYXZpbmcgdHJ5QmxhaCgp
IHJldHVybiBzb21ldGhpbmcsIGFuZCBoYXZlIHRoZQorICAgICAgICAgICAgIyBtYXRjaGVyIGFs
c28gdGFrZSBhIGZ1bmN0b3IgYXJndW1lbnQgdGhhdCBhY2NlcHRzIHdoYXQgdHJ5QmxhaCgpIHJl
dHVybnMuIFNvIGluc3RlYWQgb2YKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgaWYgKHRy
eUJsYWgoKSkgb2s7CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFdlIHdvdWxkIGhhdmU6
CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGlmIChmdW5jdG9yKHRyeUJsYWgoKSkgb2s7
CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFdoZW4gbG93ZXJpbmcgZGVjaWRlZCB0byBk
ZWxlZ2F0ZSB0byB0aGUgYWRkcmVzcyBvciBjb21wYXJpc29uIG1hdGNoZXIsIGl0IGNvdWxkIHN1
cHBseQorICAgICAgICAgICAgIyBhIGZ1bmN0b3IgdGhhdCBkZWNpZGVzIHdoZXRoZXIgdGhlIHRo
aW5nIHRoYXQgdGhlIHN1Yi1tYXRjaGVyIHNlbGVjdGVkIGlzIGluZGVlZAorICAgICAgICAgICAg
IyB1c2VmdWwuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEluIHRoZSBuZWFyIHRlcm0s
IHdlIHByb2JhYmx5IHdvbid0IG5lZWQgdGhpcy4gQnV0IHdlIHdpbGwgZGVmaW5pdGVseSBuZWVk
IGl0IGFzIHdlCisgICAgICAgICAgICAjIGV4cGFuZCB0byBlZmZpY2llbnRseSBzdXBwb3J0IG1v
cmUgcGxhdGZvcm1zLiBPbiBYODZfNjQsIGFueSBicmFuY2hpbmcgaW5zdHJ1Y3Rpb24gaXMKKyAg
ICAgICAgICAgICMgdXNhYmxlIGluIGFueSBjb250ZXh0LCBhbmQgYW55IGFkZHJlc3Mgc2hvdWxk
IGJlIHVzYWJsZSBpbiBhbnkgY29udGV4dCAoYW5kIHRoZSBvbmx5CisgICAgICAgICAgICAjIGNh
c2VzIHdoZXJlIGl0IHdvdWxkbid0IGJlIGlzIGlmIHdlIGhhdmUgaG9sZXMgaW4gdGhlIE1hY3Jv
QXNzZW1ibGVyKS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDU1OQorICAgICAgICAgICAgCisgICAgICAgICAg
ICBwcm9kdWN0aW9uLmVhY2hWYXJpYWJsZSB7CisgICAgICAgICAgICAgICAgfCBwYXJlbnRWYXJO
YW1lLCBjaGlsZE5hbWUsIGNoaWxkVmFyTmFtZSwga2luZCwgaW5kZXggfAorICAgICAgICAgICAg
ICAgIGxvYWRFeHByID0gIiN7cGFyZW50VmFyTmFtZX0tPmNoaWxkKCN7aW5kZXh9KSIKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBzZWVuW2NoaWxkVmFyTmFtZV0KKyAgICAg
ICAgICAgICAgICAgICAgdG1wID0gbmV3VmFyCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiVmFsdWUqICN7dG1wfSA9ICN7bG9hZEV4cHJ9OyIKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJpZiAoI3t0bXB9ID09ICN7Y2hpbGRWYXJOYW1lfSkgeyIKKyAgICAgICAgICAgICAg
ICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIHNlZW5bY2hpbGRWYXJOYW1lXSA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7Y2hpbGRWYXJOYW1lfSA9ICN7
bG9hZEV4cHJ9OyIKKworICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBDb25zaWRlciBnZXR0
aW5nIHJpZCBvZiB0aGUgJCBwcmVmaXguCisgICAgICAgICAgICAgICAgICAgICMgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUyNworICAgICAgICAgICAgICAgICAg
ICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGls
ZE5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAgICAg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAgICAgICAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAg
ICAgaW50ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFs
IG9yIGtpbmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kQXJn
dW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5kIG9yIGtpbmQgPT0gOmFu
b25PcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA8PCBjaGlsZFZhck5h
bWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFuZAorICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRhcHRv
ci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICB1bmxlc3MgaW50ZXJuYWxBcmd1bWVu
dHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdElu
dGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1wdHk/CisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdE9wZXJhbmRzKCIgKyBvcGVy
YW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgIG91dHAucHV0cygiJiYgYWRhcHRvci50cnkje3Byb2R1Y3Rpb24ubmFtZX0oIiArIHRyeUFy
Z3VtZW50cy5qb2luKCIsICIpICsgIikpIHsiKQorICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFw
dG9yLmFjY2VwdFJvb3RMYXRlKF92YWx1ZSk7IgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFs
QXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2Nl
cHRJbnRlcm5hbHNMYXRlKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7Igor
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB1bmxlc3Mgb3BlcmFuZEFyZ3VtZW50cy5lbXB0
eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0T3BlcmFuZHNMYXRl
KCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKTsiCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAgICAgICAgICAgb3V0cC5w
dXRzICJ9IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgcmV0dXJuIGZhbHNlOyIK
KyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0Y2hlci5uYW1lfV9o
IgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDI3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUu
aCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb25zdDMy
VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnRy
b2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZh
bHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5l
cy5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVUaHJl
YWRpbmcuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5o
IgorI2luY2x1ZGUgIlZNLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCit1c2luZyBuYW1lc3Bh
Y2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK25hbWVzcGFjZSB7CisKKy8vIE5v
dGhpbmcgZmFuY3kgZm9yIG5vdzsgd2UganVzdCB1c2UgdGhlIGV4aXN0aW5nIFdURiBhc3NlcnRp
b24gbWFjaGluZXJ5LgorI2RlZmluZSBDSEVDSyh4KSBSRUxFQVNFX0FTU0VSVCh4KQorCitWTSog
dm07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1QgY29t
cGlsZUFuZFJ1bihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
K3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBnZW5lcmF0ZShwcm9jZWR1cmUsIGpp
dCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJ0
ZXN0YjMiKSk7CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0
PFQoKikoQXJndW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7Cit9CisKK3ZvaWQgdGVzdDQyKCkKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIFZhbHVlKiBjb25zdDQyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIDQyKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjb25zdDQyKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRS
dW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisKK3ZvaWQgdGVzdExvYWQ0MigpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICBpbnQgeCA9IDQyOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmeCkp
KTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisKK3Zv
aWQgdGVzdEFyZyhpbnQgYXJndW1lbnQpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29u
dHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBhcmd1
bWVudCkgPT0gYXJndW1lbnQpOworfQorCit2b2lkIHRlc3RBZGRBcmdzKGludCBhLCBpbnQgYikK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIw
KSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFu
ZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyBiKTsKK30KKwordm9pZCB0ZXN0QWRkQXJnczMy
KGludCBhLCBpbnQgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+
KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9y
aWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmln
aW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKSk7CisKKyAgICBDSEVDSyhj
b21waWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikgPT0gYSArIGIpOworfQorCit2b2lkIHRlc3RT
dG9yZShpbnQgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayog
cm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgc2xvdCA9IDB4YmFhZGJlZWY7CisgICAg
cm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgcHJvYywgU3RvcmUsIE9yaWdp
bigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywg
VHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmc2xvdCkpOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4s
IE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
MCkpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB2YWx1ZSkpOworICAg
IENIRUNLKHNsb3QgPT0gdmFsdWUpOworfQorCit2b2lkIHRlc3RUcnVuYyhpbnQ2NF90IHZhbHVl
KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB2YWx1ZSkgPT0g
c3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpOworfQorCit2b2lkIHRlc3RBZGQxKGludCB2YWx1ZSkK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVB
bmRSdW48aW50Pihwcm9jLCB2YWx1ZSkgPT0gdmFsdWUgKyAxKTsKK30KKwordm9pZCB0ZXN0U3Rv
cmVBZGRMb2FkKGludCBhbW91bnQpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgc2xvdCA9IDM3OworICAgIENv
bnN0UHRyVmFsdWUqIHNsb3RQdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksICZzbG90KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAor
ICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHNs
b3RQdHIpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIGFtb3VudCkpLAorICAgICAgICBzbG90UHRyKTsKKyAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKwor
ICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworICAgIENIRUNLKHNsb3QgPT0g
MzcgKyBhbW91bnQpOworfQorCit2b2lkIHRlc3RTdG9yZUFkZEFuZExvYWQoaW50IGFtb3VudCwg
aW50IG1hc2spCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgc2xvdCA9IDM3OworICAgIENvbnN0UHRyVmFsdWUq
IHNsb3RQdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
ICZzbG90KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9j
LCBTdG9yZSwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAg
ICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIs
IE9yaWdpbigpLCBzbG90UHRyKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29u
c3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KSksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzaykpLAorICAgICAgICBz
bG90UHRyKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJv
YywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4o
cHJvYykpOworICAgIENIRUNLKHNsb3QgPT0gKCgzNyArIGFtb3VudCkgJiBtYXNrKSk7Cit9CisK
KyNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgZGF0YUxvZygjdGVzdCAiOlxuIik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGVz
dDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygi
ICAgIE9LIVxuIik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSk7CisK
K3ZvaWQgcnVuKCkKK3sKKyAgICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICB2bSA9
ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOworCisgICAgUlVOKHRlc3Q0MigpKTsK
KyAgICBSVU4odGVzdExvYWQ0MigpKTsKKyAgICBSVU4odGVzdEFyZyg0MykpOworICAgIFJVTih0
ZXN0QWRkQXJncygxLCAxKSk7CisgICAgUlVOKHRlc3RBZGRBcmdzKDEsIDIpKTsKKyAgICBSVU4o
dGVzdEFkZEFyZ3MzMigxLCAxKSk7CisgICAgUlVOKHRlc3RBZGRBcmdzMzIoMSwgMikpOworICAg
IFJVTih0ZXN0U3RvcmUoNDQpKTsKKyAgICBSVU4odGVzdFRydW5jKChzdGF0aWNfY2FzdDxpbnQ2
NF90PigxKSA8PCA0MCkgKyA0MikpOworICAgIFJVTih0ZXN0QWRkMSg0NSkpOworICAgIFJVTih0
ZXN0U3RvcmVBZGRMb2FkKDQ2KSk7CisgICAgUlVOKHRlc3RTdG9yZUFkZEFuZExvYWQoNDcsIDB4
ZmZmZikpOworICAgIFJVTih0ZXN0U3RvcmVBZGRBbmRMb2FkKDQ3MDAwMCwgMHhmZmZmKSk7Cit9
CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisjZWxzZSAvLyBFTkFCTEUoQjNfSklUKQor
CitzdGF0aWMgdm9pZCBydW4oKQoreworICAgIGRhdGFMb2coIkIzIEpJVCBpcyBub3QgZW5hYmxl
ZC5cbiIpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworaW50IG1haW4oaW50IGFy
Z2MsIGNoYXIqKiBhcmd2KQoreworICAgIFVOVVNFRF9QQVJBTShhcmdjKTsKKyAgICBVTlVTRURf
UEFSQU0oYXJndik7CisgICAgCisgICAgcnVuKCk7CisgICAgcmV0dXJuIDA7Cit9CisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2Nh
dGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRl
ICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJT
dGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2Nv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitib29sIGF0dGVtcHRBc3NpZ25tZW50KAorICAg
IFN0YWNrU2xvdCogc2xvdCwgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25zdCBWZWN0b3I8U3Rh
Y2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2coIkF0dGVtcHRpbmcgdG8gYXNzaWduICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiIHRvICIsIG9m
ZnNldEZyb21GUCwgIiB3aXRoIGludGVyZmVyZW5jZSAiLCBwb2ludGVyTGlzdER1bXAob3RoZXJT
bG90cyksICJcbiIpOworCisgICAgLy8gTmVlZCB0byBhbGlnbiBpdCB0byB0aGUgc2xvdCdzIGRl
c2lyZWQgYWxpZ25tZW50LgorICAgIG9mZnNldEZyb21GUCA9IC1XVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc2xvdC0+YWxpZ25tZW50KCksIC1vZmZzZXRGcm9tRlApOworICAgIAorICAgIGZvciAo
U3RhY2tTbG90KiBvdGhlclNsb3QgOiBvdGhlclNsb3RzKSB7CisgICAgICAgIGlmICghb3RoZXJT
bG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29s
IG92ZXJsYXAgPSBXVEY6OnJhbmdlc092ZXJsYXAoCisgICAgICAgICAgICBvZmZzZXRGcm9tRlAs
CisgICAgICAgICAgICBvZmZzZXRGcm9tRlAgKyBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xvdC0+
Ynl0ZVNpemUoKSksCisgICAgICAgICAgICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpLAorICAg
ICAgICAgICAgb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSArIHN0YXRpY19jYXN0PGludHB0cl90
PihvdGhlclNsb3QtPmJ5dGVTaXplKCkpKTsKKyAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRh
dGFMb2coIkFzc2lnbmVkICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiIHRvICIsIG9mZnNldEZyb21G
UCwgIlxuIik7CisgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQKG9mZnNldEZyb21GUCk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgYXNzaWduKFN0YWNrU2xvdCogc2xvdCwgY29uc3QgVmVj
dG9yPFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGFzc2lnbiAiLCBwb2ludGVyRHVtcChzbG90KSwgIiB3
aXRoIGludGVyZmVyZW5jZSAiLCBwb2ludGVyTGlzdER1bXAob3RoZXJTbG90cyksICJcbiIpOwor
ICAgIAorICAgIGlmIChhdHRlbXB0QXNzaWdubWVudChzbG90LCAtc3RhdGljX2Nhc3Q8aW50cHRy
X3Q+KHNsb3QtPmJ5dGVTaXplKCkpLCBvdGhlclNsb3RzKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAgICAgaWYg
KCFvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIGJvb2wgZGlkQXNzaWduID0gYXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgICAgICAgICBzbG90
LCBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpIC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3Qt
PmJ5dGVTaXplKCkpLCBvdGhlclNsb3RzKTsKKyAgICAgICAgaWYgKGRpZEFzc2lnbikKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0YWNrKENv
ZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0
YWNrIik7CisKKyAgICAvLyBBbGxvY2F0ZSBhbGwgb2YgdGhlIGxvY2tlZCBzbG90cyBpbiBvcmRl
ci4gVGhpcyBpcyBraW5kIG9mIGEgY3JhenkgYWxnb3JpdGhtIHRvIGFsbG93IGZvcgorICAgIC8v
IHRoZSBwb3NzaWJpbGl0eSBvZiBzdGFjayBzbG90cyBiZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZz
ZXRzIGJlZm9yZSB3ZSBldmVuIGdldCBoZXJlLgorICAgIEFTU0VSVCghY29kZS5mcmFtZVNpemUo
KSk7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90czsKKyAg
ICBWZWN0b3I8U3RhY2tTbG90Kj4gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0OworICAgIGZvciAo
U3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgc3dpdGNoIChz
bG90LT5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAg
ICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICAgICAgYXNzaWdu
ZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QuYXBwZW5kKHNsb3QpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAg
ICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAgICAgLy8g
QXMgYSBtYXR0ZXIgb2Ygc2FuaXR5LCB1bmFzc2lnbiB0aGlzLiBNYXliZSBpdCB3b3VsZCBiZSBn
b29kIHRvIGV2ZW4gaGF2ZSBhCisgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBydWxlIHRo
YXQgdGhpcyBjYW5ub3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIHNsb3QtPnNldE9mZnNldEZy
b21GUCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorICAgIC8vIFRoaXMgaXMgYSBmYWlybHkgZXhwZW5zaXZlIGxvb3AsIGJ1dCBpdCdzIE9L
IGJlY2F1c2Ugd2UnbGwgdXN1YWxseSBvbmx5IGhhdmUgYSBoYW5kZnVsIG9mCisgICAgLy8gbG9j
a2VkIHN0YWNrIHNsb3RzLgorICAgIHdoaWxlICghbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0Lmlz
RW1wdHkoKSkgeworICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBsb2NrZWRTdGFja1Nsb3RzV29y
a2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgYXNzaWduKHNsb3QsIGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90cyk7CisgICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7
CisgICAgfQorCisgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgYW5vbnltb3VzIHNsb3RzLiBOb3Rl
IHRoYXQgdGhlb3JldGljYWxseSB3ZSBzaG91bGQgZG8gYW4gZXNjYXBlIGFuYWx5c2lzCisgICAg
Ly8gaGVyZS4gQnV0LCBjdXJyZW50bHkgQWlyIGRvZXNuJ3Qgc3VwcG9ydCBlc2NhcGluZyBhIFN0
YWNrU2xvdCEKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGVzY2FwaW5nIGEgU3RhY2tT
bG90IGFuZCBhZGQgZXNjYXBlIGFuYWx5c2lzIHRvIGFsbG9jYXRlU3RhY2soKS4KKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDMwCisKKyAgICBhdXRv
IGlzUmVsZXZhbnQgPSBbXSAoY29uc3QgQXJnJiBhcmcpIC0+IGJvb2wgeworICAgICAgICByZXR1
cm4gYXJnLmlzU3RhY2soKSAmJiBhcmcuc3RhY2tTbG90KCktPmtpbmQoKSA9PSBTdGFja1Nsb3RL
aW5kOjpBbm9ueW1vdXM7CisgICAgfTsKKworICAgIExpdmVuZXNzPEFyZz4gbGl2ZW5lc3MoY29k
ZSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZl
cmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4g
c2xvdHM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBM
aXZlbmVzczxBcmc+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAg
ICAgICAgYXV0byBpbnRlcmZlcmUgPSBbJl0gKEluc3QmIGluc3QpIHsKKyAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkludGVyZmVyaW5nOiAiLCBsaXN0
RHVtcChsb2NhbENhbGMubGl2ZSgpKSwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIEZvcm0gYSBjbGlxdWUgb2Ygc3RhY2sgc2xvdHMgdGhhdCBpbnRlcmZlcmUuIEZpcnN0IGZp
bmQgdGhlIGxpc3Qgb2Ygc3RhY2sgc2xvdHMKKyAgICAgICAgICAgIC8vIHRoYXQgYXJlIGxpdmUg
cmlnaHQgbm93LgorICAgICAgICAgICAgc2xvdHMucmVzaXplKDApOworICAgICAgICAgICAgZm9y
IChBcmcgYXJnIDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1Jl
bGV2YW50KGFyZykpCisgICAgICAgICAgICAgICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tT
bG90KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBtdXN0bid0IG1hbmRh
dGUgdGhhdCB0aGUgaW5wdXQgY29kZSBpcyBvcHRpbWFsLiBUaGVyZWZvcmUsIGl0IG1heSBoYXZl
IGRlYWQgc3RvcmVzCisgICAgICAgICAgICAvLyB0byB0aGUgc3RhY2suIFdlIG5lZWQgdG8gdHJl
YXQgdGhlc2UgYXMgaW50ZXJmZXJpbmcuCisgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisg
ICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSAmJiBpc1JlbGV2YW50
KGFyZykgJiYgIWxvY2FsQ2FsYy5saXZlKCkuY29udGFpbnMoYXJnKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tTbG90KCkpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgU2xvdHM6ICIsIHBvaW50ZXJMaXN0RHVtcChzbG90cyksICJcbiIp
OworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNsb3RzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBvdXRlciA9IHNsb3RzW2ldOworICAgICAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgc2xvdHMuc2l6ZSgpOyArK2op
IHsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBpbm5lciA9IHNsb3RzW2pdOworCisg
ICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZVtpbm5lcl0uYWRkKG91dGVyKTsKKyAgICAg
ICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW291dGVyXS5hZGQoaW5uZXIpOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiQW5hbHl6aW5nOiAiLCBi
bG9jay0+YXQoaW5zdEluZGV4KSwgIlxuIik7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxv
Y2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnRlcmZlcmUoaW5zdCk7CisgICAgICAg
ICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0KTsKKyAgICAgICAgfQorICAgICAgICBJbnN0IG5v
cDsKKyAgICAgICAgaW50ZXJmZXJlKG5vcCk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpIHsK
KyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAg
ICAgICAgIGRhdGFMb2coIkludGVyZmVyZW5jZSBvZiAiLCBwb2ludGVyRHVtcChzbG90KSwgIjog
IiwgcG9pbnRlckxpc3REdW1wKGludGVyZmVyZW5jZVtzbG90XSksICJcbiIpOworICAgIH0KKwor
ICAgIC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25zLiBBdCBpdHMgaGVhcnQgdGhpcyBh
bGdvcml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNoCisgICAgLy8gU3RhY2tTbG90IHdl
IGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHpl
cm8gd2hpbGUgZW5zdXJpbmcgbm8KKyAgICAvLyBvdmVybGFwIHdpdGggb3RoZXIgU3RhY2tTbG90
cyB0aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJT
bG90czsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7Cisg
ICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgLy8gQWxyZWFk
eSBhc3NpZ25lZCBhbiBvZmZzZXQuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQor
CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGludGVyZmVyaW5nU2xvdHMgPSBpbnRlcmZl
cmVuY2Vbc2xvdF07CisgICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Nsb3RzLnNpemUoKSk7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOyArK2kp
CisgICAgICAgICAgICBvdGhlclNsb3RzW2ldID0gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzW2ld
OworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMu
c2l6ZSgpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogaW50ZXJmZXJpbmdT
bG90cykKKyAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dEluZGV4KytdID0gb3RoZXJTbG90Owor
CisgICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKKyAgICB9CisKKyAgICAvLyBGaWd1
cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFjayBzbG90cy4KKyAgICB1
bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsKKyAgICBmb3IgKFN0YWNrU2xvdCog
c2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xv
dHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMsCisgICAg
ICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXNsb3QtPm9mZnNldEZyb21GUCgpKSk7Cisg
ICAgfQorCisgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IFdURjo6cm91bmRVcFRvTXVsdGlw
bGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMpOworCisg
ICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVl
ZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKElu
c3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFy
Z3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRo
ZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3VjaCBh
biBhd2Vzb21lIGFzc3VtcHRpb24uCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgIGNv
ZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShhcmcub2Zmc2V0KCkgKyA4KTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb2RlLnNldEZy
YW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3RzICsgY29kZS5jYWxsQXJnQXJlYVNpemUoKSk7
CisKKyAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0gdGhlIGNvZGUgdG8gdXNlIEFkZHIncyBpbnN0
ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEgbG9zc2xlc3MKKyAgICAvLyB0cmFuc2Zvcm1h
dGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBTdGFja1Nsb3RzIGFycmF5IHRvIGZpZ3VyZSBv
dXQgd2hpY2ggU3RhY2tTbG90IGFueQorICAgIC8vIG9mZnNldC1mcm9tLUZQIHJlZmVycyB0by4K
KworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5z
dCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJn
cykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRy
KAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGFyZy5zdGFja1Nsb3Qo
KS0+b2Zmc2V0RnJvbUZQKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJn
OjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJh
bWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQWxsb2NhdGVTdGFja19oCisjZGVmaW5l
IEFpckFsbG9jYXRlU3RhY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBU
aGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBvbiB0aGUgc3RhY2suIEl0IGZpcnN0
IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgKKy8vIG9yZGVyIGFuZCB0aGVuIGl0
IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQuCisKK3ZvaWQgYWxsb2NhdGVTdGFj
ayhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJBbGxvY2F0ZVN0YWNrX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBcmcuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tT
bG90LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxp
ZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQo
dG1wKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmlu
dCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tNjQ6CisgICAg
ICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmlu
dChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2Uo
KSwgIiwiLCBpbmRleCgpKTsKKyAgICAgICAgaWYgKHNjYWxlKCkgIT0gMSkKKyAgICAgICAgICAg
IG91dC5wcmludCgiLCIsIHNjYWxlKCkpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50
ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2Fs
bEFyZzoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNl
dCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoY2FsbEFyZykiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVsYXRpb25hbENvbmRpdGlv
bigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgb3V0LnBy
aW50KGFzUmVzdWx0Q29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTcGVj
aWFsOgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckFyZ19oCisjZGVmaW5lIEFpckFyZ19oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIK
KyNpbmNsdWRlICJCM1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjbGFzcyBTcGVjaWFsOworY2xhc3MgU3RhY2tTbG90OworCisvLyBU
aGlzIGNsYXNzIG5hbWUgaXMgYWxzbyBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2ls
bCBzYXkgaXQgYSBsb3QuIFlvdSdsbCBzZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjpp
bW0oNSksIEFyZzo6YWRkcih0aGluZywgYmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6
CisgICAgLy8gVGhlc2UgZW51bSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1
c2Ugd2UgaGF2ZSB0byBtZW50aW9uIHRoZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90
IHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgVG1wLAorICAgICAgICBJbW0sCisgICAgICAg
IEltbTY0LAorICAgICAgICBBZGRyLAorICAgICAgICBTdGFjaywKKyAgICAgICAgQ2FsbEFyZywK
KyAgICAgICAgSW5kZXgsCisgICAgICAgIFJlbENvbmQsCisgICAgICAgIFJlc0NvbmQsCisgICAg
ICAgIFNwZWNpYWwKKyAgICB9OworCisgICAgZW51bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAg
VXNlLAorICAgICAgICBEZWYsCisgICAgICAgIFVzZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5
cGUgOiBpbnQ4X3QgeworICAgICAgICBHUCwKKyAgICAgICAgRlAKKyAgICB9OworCisgICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKKworICAgIHN0YXRpYyBib29sIGlzVXNl
KFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNl
IFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgY2FzZSBEZWY6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xlIHJvbGUpCisgICAgeworICAgICAgICBz
d2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZv
ckIzVHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIElu
dDY0OgorICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAg
ICAgICAgIHJldHVybiBGUDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIEdQOworICAgIH0KKworICAgIEFyZygpCisgICAgICAgIDogbV9r
aW5kKEludmFsaWQpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAg
ICAgIDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisK
KyAgICBzdGF0aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zm
c2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBpbW02NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7Cisg
ICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
dmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBh
ZGRyKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBBZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVz
dWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAw
KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0
YWNrOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZh
bHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4K
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmco
aW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0Owor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRT
Y2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAg
ICAgICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAg
Y2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5z
aWduZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNj
YWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBj
YXNlIDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAg
ICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgo
QWlyOjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAg
ICAgQVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2Nh
bGUpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4
OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXgg
PSBpbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90Pihz
Y2FsZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6
OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29m
ZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRp
b24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
UmVzQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNp
YWwqIHNwZWNpYWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQu
bV9raW5kID0gU3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0
PGludHB0cl90PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5k
ID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQor
ICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBt
X3NjYWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJ
bW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQor
CisgICAgYm9vbCBpc0ltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkg
PT0gSW1tNjQ7CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAg
IGJvb2wgaXNDYWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
Q2FsbEFyZzsKKyAgICB9CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQor
CisgICAgYm9vbCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBSZXNDb25kOworICAgIH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlz
QWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygp
OworICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAg
aW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IElt
bSB8fCBraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQor
CisgICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0
aWNfY2FzdDxpbnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNl
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkg
PT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGJvb2wgaGFz
T2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAg
IGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgor
ICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSA9
PSBTdGFjaykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3NjYWxl
KTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8
IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90Piht
X29mZnNldCk7CisgICAgfQorCisgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBiaXR3
aXNlX2Nhc3Q8U3RhY2tTbG90Kj4obV9vZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGlu
ZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAg
ICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzY2FsZSgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJu
IG1fc2NhbGU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9nU2NhbGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOworICAgIH0KKworICAgIEFpcjo6U3Bl
Y2lhbCogc3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNw
ZWNpYWwpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zm
c2V0KTsKKyAgICB9CisKKyAgICBib29sIGlzR1BUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOworICAgIH0KKworICAgIGJvb2wgaXNGUFRt
cCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQKCk7
CisgICAgfQorICAgIAorICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGlu
IGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEdQIHZhbHVlLgorICAgIGJvb2wgaXNHUCgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToK
KyAgICAgICAgY2FzZSBJbW02NDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIElu
ZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAg
IGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNp
YWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAg
ICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBpZiB0
aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2YWx1
ZS4KKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkp
IHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2Fz
ZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgSW52YWxpZDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBj
YXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6Cisg
ICAgICAgIGNhc2UgSW1tNjQ6IC8vIFllcywgd2UgYWxsb3cgSW1tNjQgYXMgYSBkb3VibGUgaW1t
ZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBp
c0ZQVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhhc1R5cGUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAg
ICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUgdHlwZSBpcyBhbWJpZ3VvdXMgZm9yIHNvbWUg
YXJnIGtpbmRzLiBDYWxsIHdpdGggY2FyZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzR1AoKSA/IEdQIDogRlA7CisgICAgfQorCisgICAgYm9vbCBpc1R5
cGUoVHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
ICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4gaXNHUCgpOworICAgICAgICBjYXNlIEZQ
OgorICAgICAgICAgICAgcmV0dXJuIGlzRlAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJv
b2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCku
aXNHUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0bXAoKS5ncHIoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAgfQorCisg
ICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnByKCk7
CisgICAgfQorICAgIAorICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncFRt
cEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2ln
bmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS50bXBJbmRl
eCgpOworICAgIH0KKworICAgIEFyZyB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNl
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzT2Zmc2V0KCkpCisgICAgICAgICAgICBy
ZXR1cm4gQXJnKCk7CisgICAgICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0KCks
IGFkZGl0aW9uYWxPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICByZXR1cm4g
YWRkcihiYXNlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2Ug
U3RhY2s6CisgICAgICAgICAgICByZXR1cm4gc3RhY2soc3RhY2tTbG90KCksIG9mZnNldCgpICsg
YWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJl
dHVybiBjYWxsQXJnKG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2Ug
SW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgoYmFzZSgpLCBpbmRleCgpLCBzY2FsZSgp
LCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBB
cmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNh
c2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAg
ICAgICAgICAgZnVuY3RvcihtX2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBU
aGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYg
b3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRo
ZW0uIEZvciBleGFtcGxlLCB0aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQor
ICAgIC8vCisgICAgLy8gVGhpcyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwg
VHlwZSBhcmdUeXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dp
dGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1f
YmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFz
ZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVz
dGVkSW1tMzIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAg
ICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90
PihtX29mZnNldCkpOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW02NCBhc1RydXN0ZWRJbW02NCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoaXNJbW02NCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tNjQodmFsdWUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbVB0ciBhc1RydXN0ZWRJbW1QdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGlzNjRCaXQoKSkKKyAgICAgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyVmFsdWUoKSk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jh
c2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAg
TWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpC
YXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRp
Y19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1i
bGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAg
ICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGFzUmVzdWx0Q29uZGl0
aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Jlc0NvbmQoKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uPihtX29m
ZnNldCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAg
ICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYmFzZShX
VEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PT0gQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRoaXMgcmVhbGx5IGRvZXNuJ3QgaGF2
ZSB0byBiZSB0aGF0IGdyZWF0LgorICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludDY0X3Q+
OjpoYXNoKG1fb2Zmc2V0KSArIG1fa2luZCArIG1fc2NhbGUgKyBtX2Jhc2UuaGFzaCgpICsKKyAg
ICAgICAgICAgIG1faW5kZXguaGFzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2NF90
IG1fb2Zmc2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsgSW52YWxpZCB9OworICAgIGludDMy
X3QgbV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9p
bmRleDsKK307CisKK3N0cnVjdCBBcmdIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBBcmcmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IEFyZyYgYSwgY29uc3QgQXJnJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpBaXI6OkFyZz4geworICAgIHR5cGVkZWYgSlNDOjpC
Mzo6QWlyOjpBcmdIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpB
cmc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgLy8g
QmVjYXVzZSBtX3NjYWxlIGlzIDEgaW4gdGhlIGVtcHR5IHZhbHVlLgorICAgIHN0YXRpYyBjb25z
dCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckFyZ19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
QmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY29uc3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9
ICIjIjsKKworYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9j
aykKK3sKKyAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwor
Ym9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sK
KyAgICByZXR1cm4gQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9v
bCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNC
bG9jayogdG8pCit7CisgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJv
bSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFz
aWNCbG9jazo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoIkJCIiwgKnRoaXMsICI6IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOwor
ICAgIGZvciAoY29uc3QgSW5zdCYgaW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBpbnN0LCAiXG4iKTsKK30KKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2Zy
ZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFpckJhc2ljQmxvY2tfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1
ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENv
ZGU7CitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisg
ICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFz
aWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVu
dGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7
IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkg
eyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpj
b25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAg
ICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5k
ZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4
XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFz
dCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0JiYgaW5z
dCkKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0
KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZv
aWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1faW5z
dHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOwor
ICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJh
bmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAv
LyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2gg
b2YgYSBjb25kaXRpb25hbCBicmFuY2guCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNv
bnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sg
c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5k
ZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBz
dWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisgICAgU3VjY2Vzc29y
TGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCisgICAgQmFzaWNC
bG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nl
c3NvcihpbmRleCkuYmxvY2soKTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAg
U3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JC
bG9ja3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNC
bG9jaywgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29y
Q29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNz
b3JCbG9ja3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rp
b248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBt
X3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNp
Z25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAg
QmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRl
Y2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0
JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorCisgICAgYm9vbCBh
ZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZW1vdmVQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJv
bSwgQmFzaWNCbG9jayogdG8pOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBDb2RlOworICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAg
CisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgIEluc3RMaXN0IG1faW5zdHM7CisgICAgU3VjY2Vzc29y
TGlzdCBtX3N1Y2Nlc3NvcnM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOwor
ICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7
CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2Nr
KQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisg
ICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBC
YXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBkZWVw
RHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxv
Y2tEdW1wKGJsb2NrKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2Fs
bFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ0NhbGxTcGVj
aWFsOjpDQ2FsbFNwZWNpYWwoKQoreworICAgIG1fY2xvYmJlcmVkUmVncyA9IFJlZ2lzdGVyU2V0
OjphbGxSZWdpc3RlcnMoKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNl
dDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0
ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdz
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK0NDYWxs
U3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpmb3JF
YWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJh
Y2s+JiBjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6VXNlLCBB
cmc6OkdQKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNp
emUoKTsgKytpKSB7CisgICAgICAgIC8vIEZvciB0aGUgdHlwZSwgd2UgY2FuIGp1c3QgcXVlcnkg
dGhlIGFyZydzIHR5cGUuIFRoZSBhcmcgd2lsbCBoYXZlIGEgdHlwZSwgYmVjYXVzZSB3ZQorICAg
ICAgICAvLyByZXF1aXJlIHRoZXNlIGFyZ3MgdG8gYmUgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAg
ICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbaV0sIEFyZzo6VXNlLCBpbnN0LmFyZ3NbaV0udHlwZSgp
KTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7
CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgor
ICAgICAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGlmIChpczY0Qml0KCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpU
bXA6CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgIGNhc2Ug
QXJnOjpDYWxsQXJnOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNHUCgpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdz
LnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5zdC5hcmdzW2ldLmlzUmVnKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGluc3QuYXJnc1tpXSA9PSBUbXAo
c2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0Jiwg
dW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEgY2FuIGJlIGEgc3RhY2sgYWRkcmVz
cyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6cmVwb3J0
VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQoreworfQorCitDQ2FsbEhl
bHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBl
cnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFd
LmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAg
ICAgICBqaXQubW92ZShpbnN0LmFyZ3NbMV0uYXNUcnVzdGVkSW1tUHRyKCksIHNjcmF0Y2hSZWdp
c3Rlcik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIo
KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2Fs
bChpbnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0
OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdp
c3RlclNldCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpCit7CisgICAg
cmV0dXJuIG1fY2xvYmJlcmVkUmVnczsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmR1bXBJbXBs
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJDQ2FsbCIpOworfQor
Cit2b2lkIENDYWxsU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCJmdW5jdGlvbiBjYWxsIHRoYXQgdXNlcyB0aGUgQyBjYWxsaW5n
IGNvbnZlbnRpb24uIik7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNDYWxsU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJDQ2FsbFNwZWNpYWxfaAorI2RlZmluZSBBaXJDQ2FsbFNwZWNpYWxfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBVc2UgdGhpcyBzcGVj
aWFsIGZvciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFyZyAwIGlzIG9mIGNvdXJzZSBhIFNwZWNp
YWwgYXJnIHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0NhbGxTcGVjaWFsIG9iamVjdC4gQXJnIDEg
aXMgdGhlIGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJbW1QdHIsIGEgcmVnaXN0ZXIsIG9yIGFu
IGFkZHJlc3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3MgYXJlIGp1c3QgdGhlIHNldCBvZiBhcmd1
bWVudCByZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwuIEZvciBhcmd1bWVudHMgdGhhdCBnbyB0
bworLy8gdGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0aGUgZ3J1bnQgd29yayBvZiBkb2luZyB0
aG9zZSBzdGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBvbmx5IHJlYXNvbiB3aHkKKy8vIHdlIHNw
ZWNpZnkgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBhcmd1bWVudHMgdG8gYSBjYWxsIGlzIHNv
IHRoYXQgdGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBzZWUKKy8vIHRoYXQgdGhleSBnZXQgdXNl
ZCBoZXJlLiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRvbWFnaWNhbGx5IHJlcG9ydCBhbGwgYXJn
dW1lbnQgcmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2VkIGJlY2F1c2UgaWYgd2UgaGFkIGEgY2Fs
bCB0aGF0IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhleSdkIGFwcGVhciB0byBiZSBsaXZlIHVu
dGlsIHNvbWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhlIHByb2xvZ3VlLCB3aGljaGV2ZXIgaGFw
cGVuZWQgc29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNpYWwgOiBwdWJsaWMgU3BlY2lhbCB7Citw
dWJsaWM6CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAgfkNDYWxsU3BlY2lhbCgpOworCisgICAg
Ly8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4gSXQganVz
dCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBub3QKKyAgICAvLyB1c2VkIGZvciBh
cmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0aGlzIGlz
IHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8gdGhpcyBzcGVjaWFsIHRvIGJlIHNw
ZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNoUmVnaXN0
ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNo
QXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92
ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1p
dHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVw
b3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBvdmVycmlkZTsKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVy
YXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xv
YmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJl
ZFJlZ3M7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorI2luY2x1ZGUg
IkIzQmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworQ29kZTo6Q29kZSgpCisgICAgOiBtX2xhc3RQaGFzZU5hbWUoImlu
aXRpYWwiKQoreworfQorCitDb2RlOjp+Q29kZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6
OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2lj
QmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7
CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBw
ZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0YWNrU2xv
dCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtp
bmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tT
bG90PiBzbG90KG5ldyBTdGFja1Nsb3QoYnl0ZVNpemUsIG1fc3RhY2tTbG90cy5zaXplKCksIGtp
bmQsIHZhbHVlKSk7CisgICAgU3RhY2tTbG90KiByZXN1bHQgPSBzbG90LmdldCgpOworICAgIG1f
c3RhY2tTbG90cy5hcHBlbmQoV1RGOjptb3ZlKHNsb3QpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitTcGVjaWFsKiBDb2RlOjphZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBz
cGVjaWFsKQoreworICAgIFNwZWNpYWwqIHJlc3VsdCA9IHNwZWNpYWwuZ2V0KCk7CisgICAgbV9z
cGVjaWFscy5hcHBlbmQoV1RGOjptb3ZlKHNwZWNpYWwpKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3BlY2lhbCgpCit7CisgICAgaWYgKCFtX2ND
YWxsU3BlY2lhbCkgeworICAgICAgICBtX2NDYWxsU3BlY2lhbCA9IHN0YXRpY19jYXN0PENDYWxs
U3BlY2lhbCo+KAorICAgICAgICAgICAgYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPENDYWxs
U3BlY2lhbD4oKSkpOworICAgIH0KKworICAgIHJldHVybiBtX2NDYWxsU3BlY2lhbDsKK30KKwor
dm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmls
aXR5KG1fYmxvY2tzKTsKK30KKwordm9pZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQu
cHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgewor
ICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxuIik7CisgICAgICAgIGZvciAoU3RhY2tT
bG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwg
cG9pbnRlckR1bXAoc2xvdCksICI6ICIsIGRlZXBEdW1wKHNsb3QpLCAiXG4iKTsKKyAgICB9Cisg
ICAgaWYgKHNwZWNpYWxzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiU3BlY2lhbHM6
XG4iKTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDogc3BlY2lhbHMoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludCgiICAgICIsIHBvaW50ZXJEdW1wKHNwZWNpYWwpLCAiOiAiLCBkZWVw
RHVtcChzcGVjaWFsKSwgIlxuIik7CisgICAgfQorICAgIGlmIChtX2ZyYW1lU2l6ZSkKKyAgICAg
ICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwgIlxuIik7CisgICAgaWYg
KG1fY2FsbEFyZ0FyZWFTaXplKQorICAgICAgICBvdXQucHJpbnQoIkNhbGwgYXJnIGFyZWEgc2l6
ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIpOworICAgIGlmIChtX2NhbGxlZVNhdmVSZWdp
c3RlcnMuc2l6ZSgpKQorICAgICAgICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgbV9jYWxs
ZWVTYXZlUmVnaXN0ZXJzLCAiXG4iKTsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZEZpcnN0Qmxv
Y2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICB3aGlsZSAoaW5kZXggPCBzaXpl
KCkgJiYgIWF0KGluZGV4KSkKKyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gaW5kZXg7Cit9
CisKK3Vuc2lnbmVkIENvZGU6OmZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29u
c3QKK3sKKyAgICByZXR1cm4gZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCArIDEpOworfQorCitC
YXNpY0Jsb2NrKiBDb2RlOjpmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAor
eworICAgIHJldHVybiBhdChmaW5kTmV4dEJsb2NrSW5kZXgoYmxvY2stPmluZGV4KCkpKTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDb2RlX2gKKyNkZWZpbmUgQWlyQ29kZV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUg
IkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKyNpbmNsdWRlICJSZWdp
c3RlckF0T2Zmc2V0TGlzdC5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK25hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBDQ2FsbFNwZWNpYWw7CisKKy8vIFRoaXMgaXMgYW4gSVIgdGhhdCBp
cyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJdCByZXF1aXJlcyBhYm91dCA0MHggbW9y
ZSBieXRlcyB0aGFuIHRoZQorLy8gZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSAtIGZvciBleGFtcGxl
IGlmIHlvdSdyZSBnZW5lcmF0aW5nIDFNQiBvZiBtYWNoaW5lIGNvZGUsIHlvdSBuZWVkIGFib3V0
CisvLyA0ME1CIG9mIEFpci4KKworY2xhc3MgQ29kZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoQ29kZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ29k
ZSgpOworICAgIH5Db2RlKCk7CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJl
cXVlbmN5ID0gUE5hTik7CisKKyAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBi
eXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7CisKKyAg
ICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7CisKKyAgICAv
LyBUaGlzIGlzIHRoZSBzcGVjaWFsIHlvdSBuZWVkIHRvIG1ha2UgYSBDIGNhbGwhCisgICAgQ0Nh
bGxTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIFRtcCBuZXdUbXAoQXJnOjpUeXBlIHR5
cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQ
OgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6Z3BUbXBGb3JJbmRleChtX251bUdQVG1wcysrKTsK
KyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6ZnBUbXBGb3JJ
bmRleChtX251bUZQVG1wcysrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIG51
bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAg
ICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtR1BUbXBzOworICAg
ICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1cm4gbV9udW1GUFRtcHM7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYWxsQXJnQXJlYVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2NhbGxBcmdBcmVhU2l6ZTsgfQorCisgICAgLy8gWW91IGNhbiBjYWxsIHRoaXMgYmVm
b3JlIGNvZGUgZ2VuZXJhdGlvbiB0byBmb3JjZSBhIG1pbmltdW0gY2FsbCBhcmcgYXJlYSBzaXpl
LgorICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6ZSh1bnNpZ25lZCBzaXplKQorICAgIHsK
KyAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIG1fY2Fs
bEFyZ0FyZWFTaXplLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIHNpemUpKSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgZnJhbWVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVNpemU7IH0K
KworICAgIC8vIE9ubHkgcGhhc2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbiBhcmUgYWxsb3dl
ZCB0byBzZXQgdGhpcy4gQ3VycmVudGx5LCBvbmx5CisgICAgLy8gQWlyOjphbGxvY2F0ZVN0YWNr
KCkgZG9lcyB0aGlzLgorICAgIHZvaWQgc2V0RnJhbWVTaXplKHVuc2lnbmVkIGZyYW1lU2l6ZSkK
KyAgICB7CisgICAgICAgIG1fZnJhbWVTaXplID0gZnJhbWVTaXplOworICAgIH0KKworICAgIFJl
Z2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jYWxs
ZWVTYXZlUmVnaXN0ZXJzOyB9CisKKyAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBhbmQg
ZGVsZXRlcyB1bnJlYWNoYWJsZSBibG9ja3MuCisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgp
OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayog
YXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5nZXQoKTsg
fQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGF0KGluZGV4KTsgfQorCisgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4JyBzdWNo
IHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcgPj0gaW5kZXguCisgICAgdW5zaWdu
ZWQgZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICAvLyBG
aW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5k
IGluZGV4JyA+IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CisKKyAgICBCYXNpY0Jsb2NrKiBmaW5kTmV4dEJsb2NrKEJhc2ljQmxv
Y2sqKSBjb25zdDsKKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2RlKG51bGxwdHIpCisgICAgICAgICAgICAs
IG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29u
c3QgQ29kZSYgY29kZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29kZSgmY29k
ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChtX2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgoaW5k
ZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRv
ciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2RlLT5hdChtX2luZGV4KTsK
KyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9pbmRleCA9IG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleChtX2luZGV4
ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9
CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlKiBtX2NvZGU7CisgICAgICAgIHVu
c2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIGNsYXNzIFN0YWNrU2xvdHND
b2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNv
bnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2Rl
Lm1fc3RhY2tTbG90cy5zaXplKCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBhdCh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90c1tpbmRleF0uZ2V0KCk7IH0K
KyAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVj
dGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTdGFja1Nsb3Rz
Q29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAg
OiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGlu
ZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdGFja1Ns
b3QqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1f
Y29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0
ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2lu
ZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1f
aW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZh
dGU6CisgICAgICAgICAgICBjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9u
OworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBp
dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgp
KTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOworICAgIH07
CisKKyAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4g
U3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAgCisgICAgY2xhc3MgU3BlY2lhbHND
b2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNwZWNpYWxzQ29sbGVjdGlvbihjb25z
dCBDb2RlJiBjb2RlKQorICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5t
X3NwZWNpYWxzLnNpemUoKTsgfQorICAgICAgICBTcGVjaWFsKiBhdCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHNbaW5kZXhdLmdldCgpOyB9CisgICAgICAg
IFNwZWNpYWwqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGlu
ZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxw
dHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiYg
Y29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rp
b24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTcGVjaWFsKiBvcGVyYXRvcioo
KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0
KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0
b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAg
ICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9v
bCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAg
ICAgY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1
bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkg
Y29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVu
ZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2
YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFNwZWNpYWxz
Q29sbGVjdGlvbiBzcGVjaWFscygpIGNvbnN0IHsgcmV0dXJuIFNwZWNpYWxzQ29sbGVjdGlvbigq
dGhpcyk7IH0KKyAgICAKKyAgICAvLyBUaGUgbmFtZSBoYXMgdG8gYmUgYSBzdHJpbmcgbGl0ZXJh
bCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9yeSBtYW5hZ2VtZW50IGZvciB0aGUgc3RyaW5n
LgorICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFtZShjb25zdCBjaGFyKiBuYW1lKQorICAgIHsKKyAg
ICAgICAgbV9sYXN0UGhhc2VOYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBs
YXN0UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGhhc2VOYW1lOyB9CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7
CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAg
VmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBDQ2FsbFNw
ZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fbnVtR1BU
bXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBzIHsgMCB9OworICAgIHVuc2lnbmVk
IG1fZnJhbWVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1fY2FsbEFyZ0FyZWFTaXplIHsgMCB9
OworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBj
b25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ29k
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVx
dWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
ckZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEFpckZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
QmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJhc2ljQmxvY2s+
IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckZyZXF1ZW50ZWRCbG9ja19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckdlbmVyYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
QWxsb2NhdGVTdGFjay5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5l
cmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCisjaW5j
bHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCit2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgaml0KQor
eworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUpOwor
CisgICAgLy8gSWYgd2UncmUgZG9pbmcgc3VwZXIgdmVyYm9zZSBkdW1waW5nLCB0aGUgcGhhc2Ug
c2NvcGUgb2YgYW55IHBoYXNlIHdpbGwgYWxyZWFkeSBkbyBhIGR1bXAuCisgICAgaWYgKHNob3Vs
ZER1bXBJUigpICYmICFzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFM
b2coIkluaXRpYWwgYWlyOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisg
ICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSBydW4gb3VyIG9wdGltaXphdGlvbnMgYW5kIHRyYW5zZm9y
bWF0aW9ucy4KKyAgICAvLyBGSVhNRTogQWRkIEFpciBvcHRpbWl6YXRpb25zLgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTYKKworICAgIC8vIFRo
aXMgaXMgd2hlcmUgd2Ugd291bGQgaGF2ZSBhIHJlYWwgcmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGVu
LCB3ZSBjb3VsZCB1c2Ugc3BpbGxFdmVyeXRoaW5nKCkKKyAgICAvLyBpbiBwbGFjZSBvZiB0aGUg
cmVnaXN0ZXIgYWxsb2NhdG9yIG9ubHkgZm9yIHRlc3RpbmcuCisgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTcKKyAgICBzcGlsbEV2ZXJ5
dGhpbmcoY29kZSk7CisKKyAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBh
bmQgZXBpbG9ndWUgaXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28K
KyAgICAvLyBkb2VzIHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdy
ZSB1c2luZyBhbmQgc2F2ZXMgdGhlbS4KKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKKwor
ICAgIC8vIFRoaXMgdHVybnMgYWxsIFN0YWNrIGFuZCBDYWxsQXJnIEFyZ3MgaW50byBBZGRyIGFy
Z3MgdGhhdCB1c2UgdGhlIGZyYW1lIHBvaW50ZXIuIEl0IGRvZXMKKyAgICAvLyB0aGlzIGJ5IGZp
cnN0LWZpdCBhbGxvY2F0aW5nIHN0YWNrIHNsb3RzLiBJdCBzaG91bGQgYmUgcHJldHR5IGRhcm4g
Y2xvc2UgdG8gb3B0aW1hbCwgc28gd2UKKyAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBh
Ym91dCB0aGlzIHZlcnkgbXVjaC4KKyAgICBhbGxvY2F0ZVN0YWNrKGNvZGUpOworCisgICAgLy8g
RklYTUU6IFdlIHNob3VsZCByZWFsbHkgaGF2ZSBhIGNvZGUgbGF5b3V0IG9wdGltaXphdGlvbiBo
ZXJlLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0
NzgKKworICAgIC8vIEZJWE1FOiBXZSBuZWVkIGEgbGF0ZSBsaXZlbmVzcyBhbmFseXNpcyBvdmVy
IHJlZ2lzdGVycyB0byBmaWxsIGluIHRoZQorICAgIC8vIFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdp
c3RlcnMoKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNTExCisKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShj
b2RlKTsKKworICAgIC8vIERvIGEgZmluYWwgZHVtcCBvZiBBaXIuIE5vdGUgdGhhdCB3ZSBoYXZl
IHRvIGRvIHRoaXMgZXZlbiBpZiB3ZSBhcmUgZG9pbmcgcGVyLXBoYXNlIGR1bXBpbmcsCisgICAg
Ly8gc2luY2UgdGhlIGZpbmFsIGdlbmVyYXRpb24gaXMgbm90IGEgcGhhc2UuCisgICAgaWYgKHNo
b3VsZER1bXBJUigpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBhZnRlciAiLCBjb2RlLmxhc3RQ
aGFzZU5hbWUoKSwgIiwgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsKKyAgICAgICAgZGF0YUxvZyhj
b2RlKTsKKyAgICB9CisKKyAgICAvLyBBbmQgbm93LCB3ZSBnZW5lcmF0ZSBjb2RlLgorICAgIGpp
dC5lbWl0RnVuY3Rpb25Qcm9sb2d1ZSgpOworICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIoLWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworCisgICAgR2VuZXJhdGlvbkNvbnRleHQgY29udGV4dDsKKyAgICBjb250
ZXh0LmNvZGUgPSAmY29kZTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6
OkxhYmVsPiBibG9ja0xhYmVscyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9j
aywgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CisKKyAg
ICBhdXRvIGxpbmsgPSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiB0
YXJnZXQpIHsKKyAgICAgICAgaWYgKGJsb2NrTGFiZWxzW3RhcmdldF0uaXNTZXQoKSkgeworICAg
ICAgICAgICAganVtcC5saW5rVG8oYmxvY2tMYWJlbHNbdGFyZ2V0XSwgJmppdCk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBibG9ja0p1bXBzW3RhcmdldF0uYXBw
ZW5kKGp1bXApOworICAgIH07CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
eworICAgICAgICBibG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQpOworICAgICAgICBBU1NFUlQo
YmxvY2stPnNpemUoKSA+PSAxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJs
b2NrLT5zaXplKCkgLSAxOyArK2kpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBq
dW1wID0gYmxvY2stPmF0KGkpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICBB
U1NFUlRfVU5VU0VEKGp1bXAsICFqdW1wLmlzU2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAg
aWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2NrLT5z
dWNjZXNzb3JCbG9jaygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IFJldCkg
eworICAgICAgICAgICAgLy8gV2UgY3VycmVudGx5IGRvbid0IHJlcHJlc2VudCB0aGUgZnVsbCBw
cm9sb2d1ZS9lcGlsb2d1ZSBpbiBBaXIsIHNvIHdlIG5lZWQgdG8KKyAgICAgICAgICAgIC8vIGhh
dmUgdGhpcyBvdmVycmlkZS4KKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgp
OworICAgICAgICAgICAgaml0LnJldCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmxh
c3QoKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAq
YmxvY2spCisgICAgICAgICAgICBqdW1wID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOwor
ICAgICAgICBzd2l0Y2ggKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgY2FzZSAw
OgorICAgICAgICAgICAgQVNTRVJUKCFqdW1wLmlzU2V0KCkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3Nv
ckJsb2NrKDApKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAg
ICAgICBsaW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAgICBp
ZiAoYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpICE9IGNvZGUuZmluZE5leHRCbG9jayhibG9jaykp
CisgICAgICAgICAgICAgICAgbGluayhqaXQuanVtcCgpLCBibG9jay0+c3VjY2Vzc29yQmxvY2so
MSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBmb3IgKGF1dG8mIGxhdGVQYXRoIDogY29udGV4dC5sYXRlUGF0aHMp
CisgICAgICAgIGxhdGVQYXRoLT5ydW4oaml0LCBjb250ZXh0KTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckdlbmVyYXRlX2gKKyNkZWZpbmUgQWlyR2VuZXJhdGVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVs
cGVyczsKKworbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisK
Ky8vIFRoaXMgdGFrZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxs
b2NhdGlvbiBhbmQgb3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQorLy8gcmVnaXN0ZXIgYWxsb2Nh
dGlvbiBhbmQgZG9lcyBib3RoIG9mIHRob3NlIHRoaW5ncywgYW5kIHRoZW4gZ2VuZXJhdGVzIHRo
ZSBjb2RlIHVzaW5nIHRoZSBnaXZlbgorLy8gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRo
YXQgdGhpcyBtYXkgY2FsbCBjYWxsYmFja3MgaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMK
Ky8vIGdlbmVyYXRpbmcuCit2b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKy8vIFRoaXMg
aXMgZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisjaW5jbHVkZSAiQWlyT3Bjb2Rl
R2VuZXJhdGVkLmgiCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNv
bnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGlvbkNvbnRl
eHRfaAorI2RlZmluZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQgewor
ICAgIHR5cGVkZWYgdm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVyYXRp
b25Db250ZXh0Jik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExh
dGVQYXRoOworCisgICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKKyAgICBD
b2RlKiBjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRpb25Db250ZXh0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5k
bGVDYWxsZWVTYXZlcy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
SW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgaGFuZGxlQ2FsbGVl
U2F2ZXMoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImhh
bmRsZUNhbGxlZVNhdmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1c2VkQ2FsbGVlU2F2ZXM7CisK
KyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3Qm
IGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoCisgICAg
ICAgICAgICAgICAgWyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdCBm
aXJzdCB3ZSBqdXN0IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAgICAgICAgICAgICAgICAgICB1
c2VkQ2FsbGVlU2F2ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRvIHJlYWxseSBnZXQgdGhlIGNh
bGxlZSBzYXZlcy4KKyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCkpOworCisgICAgaWYgKCF1c2VkQ2FsbGVlU2F2ZXMubnVtYmVyT2ZT
ZXRSZWdpc3RlcnMoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29kZS5jYWxsZWVTYXZlUmVn
aXN0ZXJzKCkgPSBSZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworCisgICAg
c2l6ZV90IGJ5dGVTaXplID0gMDsKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVu
dHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpCisgICAgICAgIGJ5dGVTaXplID0gc3Rk
OjptYXgoc3RhdGljX2Nhc3Q8c2l6ZV90PigtZW50cnkub2Zmc2V0KCkpLCBieXRlU2l6ZSk7CisK
KyAgICBTdGFja1Nsb3QqIHNhdmVzQXJlYSA9IGNvZGUuYWRkU3RhY2tTbG90KGJ5dGVTaXplLCBT
dGFja1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgc2luY2Ug
d2UgY291bGQgaGF2ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVudCBzdGFjayBzbG90IHRvIHRo
aXMKKyAgICAvLyBhcmVhLiBBbHNvLCBvdXIgcnVudGltZSBkb2VzIG5vdCByZXF1aXJlIHVzIHRv
IHBpbiB0aGUgc2F2ZXMgYXJlYS4gTWF5YmUgd2Ugc2hvdWxkbid0IHBpbiBpdD8KKyAgICBzYXZl
c0FyZWEtPnNldE9mZnNldEZyb21GUCgtYnl0ZVNpemUpOworCisgICAgYXV0byBhcmdGb3IgPSBb
Jl0gKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5KSAtPiBBcmcgeworICAgICAgICByZXR1
cm4gQXJnOjpzdGFjayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgpICsgYnl0ZVNpemUpOworICAg
IH07CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIAorICAgIC8v
IEZpcnN0IGluc2VydCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9ndWUuCisgICAgZm9yIChjb25z
dCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7
CisgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAwLCBlbnRyeS5yZWco
KS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3VibGUsIGNvZGVbMF0tPmF0KDApLm9yaWdpbiwKKyAg
ICAgICAgICAgIFRtcChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRyeSkpOworICAgIH0KKyAgICBp
bnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKworICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9y
ZSBjb2RlIGF0IGVwaWxvZ3Vlcy4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkg
eworICAgICAgICBJbnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgaWYgKGxhc3Qu
b3Bjb2RlICE9IFJldCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoY29u
c3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkg
eworICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICBibG9j
ay0+c2l6ZSgpIC0gMSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBs
YXN0Lm9yaWdpbiwKKyAgICAgICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnkucmVn
KCkpKTsKKyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7Cisg
ICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5k
bGVDYWxsZWVTYXZlcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorI2RlZmluZSBBaXJIYW5kbGVDYWxs
ZWVTYXZlc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgcGhhc2Ug
aWRlbnRpZmllcyBjYWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jl
c3RvcmUgdGhlbSBpbiB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdz
IGEgbWFuZGF0b3J5IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtl
IHRoaXMgbW9yZSBpbnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUK
Ky8vIHBvd2VyZnVsLgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5rIHdyYXBwaW5nOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4CisvLyBXZSBzaG91bGQgbWFr
ZSB0aGlzIGludGVyYWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmKTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJC
YXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKwordm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCit7
CisgICAgZXhlY3V0ZUluc2VydGlvbnMoYmxvY2stPm1faW5zdHMsIG1faW5zZXJ0aW9ucyk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9u
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNl
cnRpb25TZXQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2Vy
dGlvblNldF9oCisjZGVmaW5lIEFpckluc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIENvZGU7CisKK3R5cGVk
ZWYgV1RGOjpJbnNlcnRpb248SW5zdD4gSW5zZXJ0aW9uOworCitjbGFzcyBJbnNlcnRpb25TZXQg
eworcHVibGljOgorICAgIEluc2VydGlvblNldChDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBDb2RlJiBjb2RlKCkgeyByZXR1cm4gbV9jb2Rl
OyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kSW5zZXJ0aW9u
KFQmJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5kKHN0ZDo6
Zm9yd2FyZDxUPihpbnNlcnRpb24pKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJ
bnN0PgorICAgIHZvaWQgaW5zZXJ0SW5zdChzaXplX3QgaW5kZXgsIEluc3QmJiBpbnN0KQorICAg
IHsKKyAgICAgICAgYXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJk
PEluc3Q+KGluc3QpKSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIEluc3Qoc3RkOjpmb3J3
YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0
ZShCYXNpY0Jsb2NrKik7CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3Rv
cjxJbnNlcnRpb24sIDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJ
bnNlcnRpb25TZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5z
dC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpcklu
c3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckluc3QuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnN0OjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAiLCBsaXN0RHVtcChhcmdzKSk7
CisgICAgaWYgKG9yaWdpbikgeworICAgICAgICBpZiAoYXJncy5zaXplKCkpCisgICAgICAgICAg
ICBvdXQucHJpbnQoIiwgIik7CisgICAgICAgIG91dC5wcmludCgqb3JpZ2luKTsKKyAgICB9Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVmaW5lIEFpckluc3RfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpck9w
Y29kZS5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQ0NhbGxIZWxwZXJzOworY2xhc3MgUmVnaXN0ZXJTZXQ7CisKK25hbWVzcGFjZSBCMyB7
CisKK2NsYXNzIFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25D
b250ZXh0OworCitzdHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJn
LCAzPiBBcmdMaXN0OworCisgICAgSW5zdCgpCisgICAgICAgIDogb3JpZ2luKG51bGxwdHIpCisg
ICAgICAgICwgb3Bjb2RlKE5vcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEluc3QoT3Bjb2Rl
IG9wY29kZSwgVmFsdWUqIG9yaWdpbikKKyAgICAgICAgOiBvcmlnaW4ob3JpZ2luKQorICAgICAg
ICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2lu
LCBBcmcgYXJnLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3N7IGFyZywg
YXJndW1lbnRzLi4uIH0KKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29k
ZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUq
IG9yaWdpbiwgY29uc3QgQXJnTGlzdCYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoYXJndW1l
bnRzKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkK
KyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBB
cmdMaXN0JiYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoV1RGOjptb3ZlKGFyZ3VtZW50cykp
CisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAg
IHsKKyAgICB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVz
aW5nICJjb25zdCIgYmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAor
ICAgIC8vIGVkaXQgSVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5
aW5nIGFyb3VuZCBhICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKKyAgICAvLyBwcm9iYWJseSBk
b2luZyBpdCB3cm9uZy4KKworICAgIC8vIFRoaXMgb25seSB3YWxrcyB0aG9zZSBUbXBzIHRoYXQg
YXJlIGV4cGxpY2l0bHkgbWVudGlvbmVkLCBhbmQgaXQgZG9lc24ndCB0ZWxsIHlvdSB0aGVpciBy
b2xlCisgICAgLy8gb3IgdHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAg
ICAgIGZvciAoQXJnJiBhcmcgOiBhcmdzKQorICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0
KGZ1bmN0b3IpOworICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCBFYWNoQXJnQ2FsbGJhY2soQXJn
JiwgQXJnOjpSb2xlLCBBcmc6OlR5cGUpOworICAgIAorICAgIC8vIENhbGxzIHRoZSBmdW5jdG9y
IHdpdGggKGFyZywgcm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQg
YnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIENh
bGxzIHRoZSBmdW5jdG9yIHdpdGggKHRtcCwgcm9sZSwgdHlwZSkuCisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKKyAgICB7CisgICAgICAgIGZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJn
LCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBhcmcu
Zm9yRWFjaFRtcChyb2xlLCB0eXBlLCBmdW5jdG9yKTsKKyAgICAgICAgICAgIH0pOworICAgIH0K
KworICAgIC8vIFRoaW5nIGNhbiBiZSBlaXRoZXIgQXJnIG9yIFRtcC4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3Qg
RnVuY3RvciYpOworCisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFz
IGEgU3BlY2lhbCouIFRoaXMgdW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAg
Ym9vbCBoYXNTcGVjaWFsKCkgY29uc3Q7CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFs
IHJlZ2lzdGVycyBjbG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZm
aWNpZW5jeSwKKyAgICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1Nw
ZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJl
cmVkUmVncygpOworCisgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBh
cmUgbGl2ZS4gVGhpcyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisg
ICAgLy8gdGhhdCBmb3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29y
a3MgaWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdp
c3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24g
aW4gb25lIG9mIHRoZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0
by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNW
YWxpZEZvcm0oKTsKKworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2
YWxpZCBmb3JtIHJpZ2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlk
CisgICAgLy8gZm9ybXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChv
ciBhIFN0YWNrU2xvdCBvciBDYWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVu
IGluZGV4PyBTcGlsbGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRv
IGZpbmQgVG1wcyB0aGF0IG5lZWQgc3BpbGxpbmc7CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBp
dCBjYWxscyB0aGlzIHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBh
biBBcmc6OkFkZHIuIElmIGl0CisgICAgLy8gZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBj
YWxscyB0aGF0IEFyZydzIGZvckVhY2hUbXAgdG8gZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4K
KyAgICAvLworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2Rl
X2dlbmVyYXRvci5yYi4KKyAgICBib29sIGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsK
KworICAgIC8vIEdlbmVyYXRlIHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBp
cywgbGlrZSwgbGl0ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRl
cm1pbmFsLCBpdCByZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0
aGUgInRoZW4iIGNhc2UsIHdpdGggdGhlICJlbHNlIgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10
aHJvdWdoLiBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0
b3IucmIuCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdl
bmVyYXRpb25Db250ZXh0Jik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworICAgIEFyZ0xpc3QgYXJnczsKKyAgICBWYWx1ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVl
IHRoYXQgdGhpcyBvcmlnaW5hdGVkIGZyb20uCisgICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJJbnN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlySW5zdElubGluZXNfaAorI2RlZmluZSBBaXJJbnN0SW5saW5lc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29k
ZVV0aWxzLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZvckVhY2g7
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPFRtcD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoVG1wKGZ1bmN0b3IpOwor
ICAgIH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPEFyZz4geworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBj
b25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1
bmN0b3IpOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBG
dW5jdG9yPgordm9pZCBJbnN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7Cisg
ICAgRm9yRWFjaDxUaGluZz46OmZvckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitpbmxpbmUg
Ym9vbCBJbnN0OjpoYXNTcGVjaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXJncy5zaXplKCkg
JiYgYXJnc1swXS5pc1NwZWNpYWwoKTsKK30KKworaW5saW5lIGNvbnN0IFJlZ2lzdGVyU2V0JiBJ
bnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MoKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOwor
ICAgIHJldHVybiBhcmdzWzBdLnNwZWNpYWwoKS0+ZXh0cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsK
K30KKworaW5saW5lIHZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICBh
cmdzWzBdLnNwZWNpYWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lzdGVy
cyk7Cit9CisKK2lubGluZSBib29sIGlzU2hpZnRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQorewor
I2lmIENQVShYODYpIHx8IENQVShYODZfNjQpCisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9PSBU
bXAoWDg2UmVnaXN0ZXJzOjplY3gpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW5zdCk7Cisg
ICAgcmV0dXJuIHRydWU7CisjZW5kaWYKK30gICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZh
bGlkKGNvbnN0IEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpckxpdmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJC
M0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIFlvdSBjYW4gY29tcHV0ZSBsaXZl
bmVzcyBvdmVyIFRtcCdzIG9yIG92ZXIgQXJnJ3MuIElmIHlvdSBjb21wdXRlIG92ZXIgQXJnJ3Ms
IHlvdSBnZXQgYm90aAorLy8gc3RhY2sgbGl2ZW5lc3MgYW5kIHRtcCBsaXZlbmVzcy4KK3RlbXBs
YXRlPHR5cGVuYW1lIFRoaW5nPgorY2xhc3MgTGl2ZW5lc3MgeworcHVibGljOgorICAgIExpdmVu
ZXNzKENvZGUmIGNvZGUpCisgICAgeworICAgICAgICBtX2xpdmVBdEhlYWQucmVzaXplKGNvZGUu
c2l6ZSgpKTsKKyAgICAgICAgbV9saXZlQXRUYWlsLnJlc2l6ZShjb2RlLnNpemUoKSk7CisKKyAg
ICAgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gc2VlbjsKKworICAgICAgICBib29sIGNoYW5nZWQg
PSB0cnVlOworICAgICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgY2hhbmdlZCA9
IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5zaXpl
KCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9
IGNvZGUuYXQoYmxvY2tJbmRleCk7CisgICAgICAgICAgICAgICAgTG9jYWxDYWxjIGxvY2FsQ2Fs
YygqdGhpcywgYmxvY2spOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRleCA9
IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxD
YWxjLmV4ZWN1dGUoYmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgICAgIGJvb2wg
Zmlyc3RUaW1lID0gc2Vlbi5hZGQoYmxvY2spOworICAgICAgICAgICAgICAgIGlmICghZmlyc3RU
aW1lICYmIGxvY2FsQ2FsYy5saXZlKCkgPT0gbV9saXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVk
ZWNlc3NvcnMoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2xpdmVBdFRhaWxbcHJlZGVjZXNz
b3JdLmFkZCgKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5saXZlKCkuYmVnaW4o
KSwgbG9jYWxDYWxjLmxpdmUoKS5lbmQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIG1fbGl2ZUF0SGVhZFtibG9ja10gPSBsb2NhbENhbGMudGFrZUxpdmUoKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBs
aXZlQXRIZWFkKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fbGl2ZUF0SGVhZFtibG9ja107CisgICAgfQorCisgICAgY29uc3QgSGFzaFNldDxUaGluZz4m
IGxpdmVBdFRhaWwoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gbV9saXZlQXRUYWlsW2Jsb2NrXTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNhbGN1bGF0b3Ig
aGFzIHRvIGJlIHJ1biBpbiByZXZlcnNlLgorICAgIGNsYXNzIExvY2FsQ2FsYyB7CisgICAgcHVi
bGljOgorICAgICAgICBMb2NhbENhbGMoTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBi
bG9jaykKKyAgICAgICAgICAgIDogbV9saXZlKGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGl2ZTsgfQorICAgICAgICBIYXNoU2V0PFRoaW5nPiYmIHRh
a2VMaXZlKCkgeyByZXR1cm4gV1RGOjptb3ZlKG1fbGl2ZSk7IH0KKworICAgICAgICB2b2lkIGV4
ZWN1dGUoSW5zdCYgaW5zdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxl
IGRlZidzLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAg
ICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKworICAgICAgICAgICAgLy8gTmV4dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4K
KyAgICAgICAgICAgIGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgICAgIGlu
c3QuZXh0cmFDbG9iYmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgW3Ro
aXNdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKFRo
aW5nKFRtcChyZWcpKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1c2Uncy4KKyAgICAg
ICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGlu
ZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2xpdmUuYWRkKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+IG1fbGl2ZTsKKyAgICB9Owor
ICAgIAorcHJpdmF0ZToKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4g
bV9saXZlQXRIZWFkOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBt
X2xpdmVBdFRhaWw7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNv
ZGVzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYyIEBACisjIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
IyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorCisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6Cisj
IFU6RyA9PiB1c2Ugb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpH
ID0+IGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+
IHVzZSBhbmQgZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6
RiA9PiB1c2Ugb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEg
ZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0
IHJlZ2lzdGVyIG9yIHZhbHVlCisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9y
YXJ5IG9yIHJlZ2lzdGVyCisjIEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9
PiBUcnVzdGVkSW1tNjQKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3Rlcitv
ZmZzZXQKKyMgSW5kZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRk
cmVzcworIworIyBUaGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5k
IHVuZGVyc3RhbmRzIHRoYXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMg
b2YgdGhpbmdzLiBTbywgYWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVu
dGF0aW9uIHN0eWxlLCBub25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMg
YXJlIG1lYW5pbmdmdWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0
ZToKKyMKKyMgRm9vNDIgVTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhl
IHBhcnNlciB3b3VsZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIg
VTpHLCBVRDpGCisjICAgICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0
d28tZm9ybSBpbnN0cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBh
bmQgdXNlcytkZWZzIGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVz
IGhlcmUgaGF2ZSBhIGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQg
dG8gTWFjcm9Bc3NlbWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChh
ZGQzMikuCisKK05vcAorCitBZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwg
QWRkcgorICAgIEltbSwgVG1wCisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMy
IFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRtcCwgVG1wCisKK0FkZDY0IFU6RywgVUQ6RworICAg
IFRtcCwgVG1wCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKwor
QWRkNjQgVTpHLCBVOkcsIEQ6RworICAgIEltbSwgVG1wLCBUbXAKKworQW5kMzIgVTpHLCBVRDpH
CisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIFRtcCwgQWRkcgorICAgIEFkZHIsIFRt
cAorICAgIEltbSwgQWRkcgorCitBbmQ2NCBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIElt
bSwgVG1wCisKK0xzaGlmdDMyIFU6RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1w
CisKK011bDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisKKyMgTm90
ZSB0aGF0IE1vdmUgb3BlcmF0ZXMgb3ZlciB0aGUgZnVsbCByZWdpc3RlciBzaXplLCB3aGljaCBp
cyBlaXRoZXIgMzItYml0IG9yIDY0LWJpdCBkZXBlbmRpbmcgb24KKyMgdGhlIHBsYXRmb3JtLiBJ
J20gbm90IGVudGlyZWx5IHN1cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZzsgaXQgbWlnaHQg
YmUgYmV0dGVyIHRvIGp1c3QgaGF2ZSBhCisjIE1vdmU2NCBpbnN0cnVjdGlvbi4gT1RPSCwgb3Vy
IE1hY3JvQXNzZW1ibGVycyBhbHJlYWR5IGhhdmUgdGhpcyBub3Rpb24gb2YgIm1vdmUoKSIgdGhh
dCBiYXNpY2FsbHkKKyMgbWVhbnMgbW92ZVB0ci4KK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRt
cAorICAgIEltbSwgVG1wCisgICAgSW1tNjQsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkUHRy
ICMgVGhpcyBtZWFucyB0aGF0ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMg
ImxvYWQiIG5vdCAibW92ZSIuCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkUHRyCisgICAgVG1wLCBB
ZGRyIGFzIHN0b3JlUHRyCisgICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgorCitNb3ZlMzIgVTpH
LCBEOkcKKyAgICBUbXAsIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1B0cgorICAgIEFkZHIsIFRtcCBh
cyBsb2FkMzIKKyAgICBJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIFRtcCwgQWRkciBhcyBzdG9y
ZTMyCisgICAgVG1wLCBJbmRleCBhcyBzdG9yZTMyCisKK01vdmVEb3VibGUgVTpGLCBEOkYKKyAg
ICBUbXAsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgSW5kZXgsIFRtcCBh
cyBsb2FkRG91YmxlCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlRG91YmxlCisgICAgVG1wLCBJbmRl
eCBhcyBzdG9yZURvdWJsZQorCitNb3ZlNjRUb0RvdWJsZSBVOkcsIEQ6RgorICAgIFRtcCwgVG1w
CisKK01vdmVEb3VibGVUbzY0IFU6RiwgRDpHCisgICAgVG1wLCBUbXAKKworQnJhbmNoQWRkMzIg
VTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29u
ZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFk
ZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTXVsMzIgVTpHLCBVOkcsIFVEOkcg
L2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisK
K0JyYW5jaFN1YjMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRt
cAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVz
Q29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE5lZzMyIFU6
RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wCisKK0p1bXAgL2JyYW5jaAorCitSZXQg
L3Rlcm1pbmFsCisKK0JyZWFrcG9pbnQgL3Rlcm1pbmFsCisKKyMgQWlyIGFsbG93cyBmb3IgZXhv
dGljIGJlaGF2aW9yLiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBi
eSB0aGUgU3BlY2lhbCBvcGVyYW5kLAorIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5k
Lgorc3BlY2lhbCBQYXRjaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clBoYXNlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUGhhc2VTY29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIK
KyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7CisKK1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29kZSwgY29u
c3QgY2hhciogbmFtZSkKKyAgICA6IG1fY29kZShjb2RlKQorICAgICwgbV9uYW1lKG5hbWUpCit7
CisgICAgaWYgKHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygi
QWlyIGFmdGVyICIsIGNvZGUubGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgIiwgbmFtZSwgIjpc
biIpOworICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIGlmIChzaG91bGRTYXZl
SVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJpbmcoY29kZSk7
Cit9CisKK1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBtX2NvZGUuc2V0TGFzdFBo
YXNlTmFtZShtX25hbWUpOworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkK
KyAgICAgICAgdmFsaWRhdGUobV9jb2RlLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3Bl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclBoYXNlU2NvcGVfaAorI2RlZmlu
ZSBBaXJQaGFzZVNjb3BlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKwor
Y2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7
CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShDb2RlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAg
flBoYXNlU2NvcGUoKTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBD
b2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1w
QmVmb3JlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclBoYXNlU2NvcGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJl
Z2lzdGVyUHJpb3JpdHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0lu
UHJpb3JpdHlPcmRlcigpCit7CisgICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+KiByZXN1bHQ7Cisg
ICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAg
ICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8
R1BSUmVnPigpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFs
bEdQUnMoKTsKKyAgICAgICAgICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lz
dGVycygpKTsKKyAgICAgICAgICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhh
cmR3YXJlUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9
IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBhbGwuZm9y
RWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8RlBSUmVnPiYg
ZnByc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgc3RhdGljIFZlY3RvcjxGUFJSZWc+KiByZXN1
bHQ7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uo
CisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBW
ZWN0b3I8RlBSUmVnPigpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJT
ZXQ6OmFsbEZQUnMoKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdp
c3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgYWxsLmZvckVhY2go
CisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+
YXBwZW5kKHJlZy5mcHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhbGwu
Zm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXN1bHQtPmFwcGVuZChyZWcuZnByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9
KTsKKyAgICByZXR1cm4gKnJlc3VsdDsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblBy
aW9yaXR5T3JkZXIoQXJnOjpUeXBlIHR5cGUpCit7CisgICAgc3RhdGljIFZlY3RvcjxSZWc+KiBy
ZXN1bHRbQXJnOjpudW1UeXBlc107CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7Cisg
ICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAg
ICAgIHJlc3VsdFtBcmc6OkdQXSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9y
IChHUFJSZWcgcmVnIDogZ3Byc0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJl
c3VsdFtBcmc6OkdQXS0+YXBwZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6
OkZQXSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChGUFJSZWcgcmVnIDog
ZnByc0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXS0+
YXBwZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHRbdHlwZV07
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVy
UHJpb3JpdHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clJlZ2lzdGVyUHJpb3JpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBBaXJSZWdpc3RlclByaW9yaXR5X2gKKyNkZWZpbmUgQWlyUmVnaXN0ZXJQcmlvcml0eV9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAi
RlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29u
c3QgVmVjdG9yPEdQUlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKTsKK2NvbnN0IFZlY3RvcjxG
UFJSZWc+JiBmcHJzSW5Qcmlvcml0eU9yZGVyKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+
IHN0cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdp
c3RlcnNJblByaW9yaXR5T3JkZXI8R1BSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxHUFJSZWc+
JiBpblByaW9yaXR5T3JkZXIoKSB7IHJldHVybiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7IH0KK307
Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz4gewor
ICAgIGNvbnN0IFZlY3RvcjxGUFJSZWc+JiBpblByaW9yaXR5T3JkZXIoKSB7IHJldHVybiBmcHJz
SW5Qcmlvcml0eU9yZGVyKCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+Citjb25z
dCBWZWN0b3I8dHlwZW5hbWUgQmFuazo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRl
cigpCit7CisgICAgcmV0dXJuIFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlv
cml0eU9yZGVyKCk7Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVy
KEFyZzo6VHlwZSk7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJSZWdpc3RlclByaW9yaXR5X2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJT
cGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0cmluZ1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworY29uc3QgY2hhciogY29uc3QgU3BlY2lhbDo6ZHVtcFByZWZpeCA9ICImIjsKKwor
U3BlY2lhbDo6U3BlY2lhbCgpCisgICAgOiBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVj
aWFsOjp+U3BlY2lhbCgpCit7Cit9CisKK0NTdHJpbmcgU3BlY2lhbDo6bmFtZSgpIGNvbnN0Cit7
CisgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgIGR1bXBJbXBsKG91dCk7CisgICAgcmV0
dXJuIG91dC50b0NTdHJpbmcoKTsKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgpOworICAgIGR1bXBJbXBs
KG91dCk7CisgICAgaWYgKG1faW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludCht
X2luZGV4KTsKK30KKwordm9pZCBTcGVjaWFsOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgqdGhpcywgIjogIik7CisgICAgZGVlcER1bXBJbXBsKG91
dCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNp
YWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNp
YWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bl
Y2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BlY2lhbF9oCisjZGVm
aW5lIEFpclNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpcklu
c3QuaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5
YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsK
KyAgICAKKyAgICBTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+U3BlY2lhbCgpOworCisgICAgQ1N0
cmluZyBuYW1lKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0Jiwg
Y29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAgdmly
dHVhbCBib29sIGlzVmFsaWQoSW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRzU3Rh
Y2soSW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMgY2Fs
bGVkIG9uIGZvciBlYWNoIEluc3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0IHRo
ZXJlIGlzIG5vIHdheSB0bworICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRzIHVz
ZWQgZnJvbSBqdXN0IG9uZSBJbnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUuIFNv
LAorICAgIC8vIGlmIHlvdSB3YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRvIGdl
bmVyYXRlKCksIHRoZW4geW91IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkgR2Vu
ZXJhdGUgQWlyIHRoYXQgc3RhcnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRjaCBJ
bnN0LCBhbmQgdGhlbiBtZXJnZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlzIGlz
IHByb2JhYmx5IG5vdCBncmVhdCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNl
IHRoYXQKKyAgICAvLyAgICBBaXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3VjaCBk
dXBsaWNhdGlvbiBkaWRuJ3QgY2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAgICAv
LyAgICByZWdpc3RlciBhc3NpZ25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUgU3Bl
Y2lhbCBtYWludGFpbiBhIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3JrcyBi
ZWNhdXNlIHRoZSBhbmFseXNpcworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNhbGwg
aXMgcGVyZm9ybWVkIGp1c3QgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMgbm8g
d2F5CisgICAgLy8gICAgZm9yIHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5zdHMg
dG8gYmUgcmVhbGxvY2F0ZWQuIFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAgICBj
b25zdWx0IHRoZSBIYXNoTWFwLgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291bGQg
dXNlICgxKSBhbmQgZmlyZSB1cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxscy4K
KyAgICAvLworICAgIC8vIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIHJl
cG9ydFVzZWRSZWdpc3RlcnMoKSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAv
LyBhcyBnZW5lcmF0ZSgpLiBJZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291bGQg
anVzdCBoYXZlIGVhY2ggU3BlY2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVjdG9y
IG9mIFJlZ2lzdGVyU2V0J3MgYW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUgcmln
aHQgb3JkZXIgaW4KKyAgICAvLyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZmZXJl
bmNlIGlzIHVubGlrZWx5IHRvIGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAgIC8v
IHBlcmZvcm1hbmNlIG9mIHRoZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8vIEN1
cnJlbnRseSwgd2UgZG8gKDEpIGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lkIHJl
cG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAgIAor
ICAgIHZpcnR1YWwgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBl
cnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVnaXN0
ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworCitwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikg
Y29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBj
b25zdCA9IDA7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBjb25z
dCBjaGFyKiBtX25hbWU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERlZXBT
cGVjaWFsRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFNwZWNpYWxEdW1wKGNvbnN0IFNwZWNpYWwq
IHNwZWNpYWwpCisgICAgICAgIDogbV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KG1fc3BlY2lhbCkKKyAgICAgICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgY29uc3QgU3BlY2lhbCogbV9zcGVjaWFsOworfTsKKworaW5saW5lIERlZXBTcGVj
aWFsRHVtcCBkZWVwRHVtcChjb25zdCBTcGVjaWFsKiBzcGVjaWFsKQoreworICAgIHJldHVybiBE
ZWVwU3BlY2lhbER1bXAoc3BlY2lhbCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGVjaWFs
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bp
bGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2Vy
dGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2
ZW5lc3MuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0
ZXJQcmlvcml0eS5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGluZyhD
b2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxFdmVy
eXRoaW5nIik7CisKKyAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMg
dXNlZCBhdCBldmVyeSBwb2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KKyAgICBJbmRleE1hcDxC
YXNpY0Jsb2NrLCBWZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgp
KTsKKyAgICBMaXZlbmVzczxUbXA+IGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2Nh
bENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10ucmVz
aXplKGJsb2NrLT5zaXplKCkgKyAxKTsKKworICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMg
PSBbJl0gKHVuc2lnbmVkIGluZGV4LCBJbnN0JiBpbnN0KSB7CisgICAgICAgICAgICBSZWdpc3Rl
clNldCYgc2V0ID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5kZXhdOworICAgICAgICAgICAgZm9y
IChUbXAgdG1wIDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAgICAgICAgICAgIGlmICh0bXAu
aXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgc2V0LnNldCh0bXAucmVnKCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAvLyBHb3R0YSBhY2NvdW50IGZvciBkZWFkIGFzc2lnbm1l
bnRzIHRvIHJlZ2lzdGVycy4gVGhlc2UgbWF5IGhhcHBlbiBiZWNhdXNlIHRoZSBpbnB1dAorICAg
ICAgICAgICAgLy8gY29kZSBpcyBzdWJvcHRpbWFsLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNo
QXJnKAorICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6
OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkgJiYgYXJn
LmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KGFyZy5yZWcoKSk7Cisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIElu
c3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIHNldFVzZWRSZWdp
c3RlcnMoaW5zdEluZGV4ICsgMSwgaW5zdCk7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0
ZShpbnN0KTsKKyAgICAgICAgfQorCisgICAgICAgIEluc3Qgbm9wOworICAgICAgICBzZXRVc2Vk
UmVnaXN0ZXJzKDAsIG5vcCk7CisgICAgfQorCisgICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90
IGZvciBlYWNoIHRtcC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6
Om51bVR5cGVzXTsKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8
IEFyZzo6bnVtVHlwZXM7ICsrdHlwZUluZGV4KSB7CisgICAgICAgIFZlY3RvcjxTdGFja1Nsb3Qq
PiYgc3RhY2tTbG90cyA9IGFsbFN0YWNrU2xvdHNbdHlwZUluZGV4XTsKKyAgICAgICAgQXJnOjpU
eXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxBcmc6OlR5cGU+KHR5cGVJbmRleCk7CisgICAgICAgIHN0
YWNrU2xvdHMucmVzaXplKGNvZGUubnVtVG1wcyh0eXBlKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgdG1wSW5kZXggPSBjb2RlLm51bVRtcHModHlwZSk7IHRtcEluZGV4LS07KQorICAgICAgICAg
ICAgc3RhY2tTbG90c1t0bXBJbmRleF0gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RL
aW5kOjpBbm9ueW1vdXMpOworICAgIH0KKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQo
Y29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2lu
c3RJbmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldEJlZm9yZSA9IHVzZWRSZWdp
c3RlcnNbYmxvY2tdW2luc3RJbmRleF07CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0QWZ0
ZXIgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXggKyAxXTsKKyAgICAgICAgICAgIElu
c3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFj
aFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJn
OjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgIFN0YWNr
U2xvdCogc3RhY2tTbG90ID0gYWxsU3RhY2tTbG90c1t0eXBlXVt0bXAudG1wSW5kZXgoKV07Cisg
ICAgICAgICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBmaWd1cmUgb3V0IGEgcmVnaXN0ZXIgdG8gdXNl
LiBIb3cgd2UgZG8gdGhhdCBkZXBlbmRzIG9uIHRoZSByb2xlLgorICAgICAgICAgICAgICAgICAg
ICBSZWcgY2hvc2VuUmVnOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZToKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSBBcmc6OlVzZURlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVn
IHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcp
OworCisgICAgICAgICAgICAgICAgICAgIE9wY29kZSBtb3ZlID0gdHlwZSA9PSBBcmc6OkdQID8g
TW92ZSA6IE1vdmVEb3VibGU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uo
cm9sZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwg
YXJnLCB0bXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzRGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25T
ZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIG1v
dmUsIGluc3Qub3JpZ2luLCB0bXAsIGFyZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShi
bG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQWlyU3BpbGxFdmVyeXRoaW5nX2gKKyNkZWZpbmUgQWlyU3BpbGxFdmVy
eXRoaW5nX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpcyBhIHBo
YXNlIGZvciB0ZXN0aW5nLiBJdCBiZWhhdmVzIGxpa2UgYSByZWdpc3RlciBhbGxvY2F0b3IgaW4g
dGhlIHNlbnNlIHRoYXQgaXQKKy8vIGVsaW1pbmF0ZXMgdGVtcG9yYXJpZXMgZnJvbSB0aGUgcHJv
Z3JhbS4gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgYWx3YXlzIHNwaWxsaW5nIGFsbAorLy8gdGVt
cG9yYXJpZXMuIFRoZSByZXN1bHRpbmcgY29kZSBpcyBnb2luZyB0byBiZSB2ZXJ5IGluZWZmaWNp
ZW50LiBUaGlzIHBoYXNlIGlzIGdyZWF0IGlmIHlvdQorLy8gdGhpbmsgdGhhdCB0aGVyZSBpcyBh
IGJ1ZyBpbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLiBZb3UgY2FuIGNvbmZpcm0gdGhpcyBieSBy
dW5uaW5nIHRoaXMKKy8vIHBoYXNlIGluc3RlYWQgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4K
Ky8vCisvLyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggdGhpcyBwaGFzZSBkb2VzIHRoZSBjaGVhcGVz
dCB0aGluZyBwb3NzaWJsZSwgaXQncyBub3QgZXZlbiB3cml0dGVuIGluIGEKKy8vIHBhcnRpY3Vs
YXJseSBlZmZpY2llbnQgd2F5LiBTbywgZG9uJ3QgZ2V0IGFueSBpZGVhcyBhYm91dCB1c2luZyB0
aGlzIHBoYXNlIHRvIHJlZHVjZSBjb21waWxlcgorLy8gbGF0ZW5jeS4gSWYgeW91IHdhbnRlZCB0
byBkbyB0aGF0LCB5b3Ugc2hvdWxkIGNvbWUgdXAgd2l0aCBhIGNsZXZlciBhbGdvcml0aG0gaW5z
dGVhZCBvZiB1c2luZworLy8gdGhpcyBzaWxseSB0aGluZy4KKwordm9pZCBzcGlsbEV2ZXJ5dGhp
bmcoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3BpbGxFdmVyeXRoaW5nX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJTdGFja1Nsb3QuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNr
U2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKwordm9pZCBTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkK
K3sKKyAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAgIGlmIChtX3ZhbHVlKQorICAgICAg
ICBtX3ZhbHVlLT5tX29mZnNldEZyb21GUCA9IHZhbHVlOworfQorCit2b2lkIFN0YWNrU2xvdDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgic3RhY2siLCBt
X2luZGV4KTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIG9m
ZnNldEZyb21GUCA9ICIsIG1fb2Zmc2V0RnJvbUZQLCAiLCBraW5kID0gIiwgbV9raW5kKTsKKyAg
ICBpZiAobV92YWx1ZSkKKyAgICAgICAgb3V0LnByaW50KCIsIHZhbHVlID0gIiwgKm1fdmFsdWUp
OworfQorCitTdGFja1Nsb3Q6OlN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQg
aW5kZXgsIFN0YWNrU2xvdEtpbmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorICAgIDog
bV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgLCBtX29mZnNl
dEZyb21GUCh2YWx1ZSA/IHZhbHVlLT5vZmZzZXRGcm9tRlAoKSA6IDApCisgICAgLCBtX2tpbmQo
a2luZCkKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7CisgICAgQVNTRVJUKGJ5dGVTaXplKTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3Qu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tT
bG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTdGFja1Nsb3RfaAorI2Rl
ZmluZSBBaXJTdGFja1Nsb3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
U3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8
d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTdGFja1Nsb3RWYWx1ZTsKKworbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIFN0YWNrU2xvdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFC
TEUoU3RhY2tTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBT
dGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIHVuc2lnbmVkIGFsaWdu
bWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAxKQorICAgICAg
ICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDIpCisgICAgICAgICAg
ICByZXR1cm4gMjsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gNCkKKyAgICAgICAgICAgIHJl
dHVybiA0OworICAgICAgICByZXR1cm4gODsKKyAgICB9CisKKyAgICBTdGFja1Nsb3RWYWx1ZSog
dmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICAvLyBaZXJvIG1lYW5zIHRo
YXQgaXQncyBub3QgeWV0IGFzc2lnbmVkLgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNv
bnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAvLyBUaGlzIHNob3VsZCB1c3Vh
bGx5IGp1c3QgYmUgY2FsbGVkIGZyb20gcGhhc2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbi4g
QnV0IHlvdSBjYW4KKyAgICAvLyB0b3RhbGx5IGZvcmNlIGEgc3RhY2sgc2xvdCB0byBsYW5kIGF0
IHNvbWUgb2Zmc2V0LgorICAgIHZvaWQgc2V0T2Zmc2V0RnJvbUZQKGludHB0cl90KTsKKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAg
IFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtp
bmQsIFN0YWNrU2xvdFZhbHVlKik7CisgICAgCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAg
ICB1bnNpZ25lZCBtX2luZGV4OworICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOworICAgIFN0
YWNrU2xvdEtpbmQgbV9raW5kOworICAgIFN0YWNrU2xvdFZhbHVlKiBtX3ZhbHVlOworfTsKKwor
Y2xhc3MgRGVlcFN0YWNrU2xvdER1bXAgeworcHVibGljOgorICAgIERlZXBTdGFja1Nsb3REdW1w
KGNvbnN0IFN0YWNrU2xvdCogc2xvdCkKKyAgICAgICAgOiBtX3Nsb3Qoc2xvdCkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9zbG90KQorICAgICAgICAgICAgbV9zbG90LT5kZWVwRHVtcChvdXQpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJp
dmF0ZToKKyAgICBjb25zdCBTdGFja1Nsb3QqIG1fc2xvdDsKK307CisKK2lubGluZSBEZWVwU3Rh
Y2tTbG90RHVtcCBkZWVwRHVtcChjb25zdCBTdGFja1Nsb3QqIHNsb3QpCit7CisgICAgcmV0dXJu
IERlZXBTdGFja1Nsb3REdW1wKHNsb3QpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3RhY2tT
bG90X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJUbXAu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBUbXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPG5vbmU+Iik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNSZWcoKSkgeworICAgICAgICBvdXQu
cHJpbnQocmVnKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzR1AoKSkg
eworICAgICAgICBvdXQucHJpbnQoIiV0bXAiLCBncFRtcEluZGV4KCkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCIlZnRtcCIsIGZwVG1wSW5kZXgoKSk7Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyVG1wX2gKKyNkZWZpbmUgQWlyVG1wX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgor
I2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQXJnOworCisvLyBB
IFRtcCBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIGEgcmVnaXN0ZXIuIEl0IGNhbiBiZSB1c2VkIHRv
IHJlZmVyIHRvIGFueSBHUFIgb3IgRlBSLiBJdCBjYW4gYWxzbworLy8gYmUgdXNlZCB0byByZWZl
ciB0byBhbiB1bmFsbG9jYXRlZCByZWdpc3RlciAoaS5lLiBhIHRlbXBvcmFyeSkuIExpa2UgbWFu
eSBBaXIgY2xhc3Nlcywgd2UgdXNlCisvLyBkZWxpYmVyYXRlbHkgdGVyc2UgbmFtaW5nIHNpbmNl
IHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhpcyBuYW1lIGEgbG90LgorCitjbGFzcyBUbXAgeworcHVi
bGljOgorICAgIFRtcCgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBUbXAoUmVnIHJlZykKKyAgICB7CisgICAgICAgIGlmIChyZWcpIHsKKyAgICAg
ICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2Rl
R1BSKHJlZy5ncHIoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV92YWx1
ZSA9IGVuY29kZUZQUihyZWcuZnByKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1f
dmFsdWUgPSAwOworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChjb25zdCBBcmcmKTsKKworICAg
IHN0YXRpYyBUbXAgZ3BUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlR1BUbXAoaW5kZXgp
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZnBUbXBG
b3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiAhIW1fdmFsdWU7IH0KKworICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNFbmNvZGVkR1AobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUChtX3ZhbHVlKTsKKyAgICB9
CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29k
ZWRHUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wg
aXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1BSKCkgfHwgaXNGUFIoKTsK
KyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBk
ZWNvZGVHUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gZGVjb2RlRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIFJlZyBy
ZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVy
biBncHIoKTsKKyAgICAgICAgcmV0dXJuIGZwcigpOworICAgIH0KKworICAgIGJvb2wgaGFzVG1w
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc1JlZygpOworICAgIH0KKwor
ICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRl
Y29kZUdQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQVG1wKG1fdmFsdWUpOworICAgIH0K
KworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQ
KCkpCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBJbmRleCgpOworICAgICAgICByZXR1cm4gZnBU
bXBJbmRleCgpOworICAgIH0KKworICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
VG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVy
Lm1fdmFsdWU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRtcCYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisgICAgVG1wKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3ZhbHVlKHN0ZDo6bnVtZXJp
Y19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFi
bGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IFRt
cChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludD46Omhhc2go
bV92YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQ
KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDEgKyBpbmRleDsKKyAgICB9
CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIC0xIC0gaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFIo
R1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUChncHIgLSBNYWNyb0Fz
c2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29k
ZUZQUihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQKGZwciAtIE1h
Y3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGlu
dCBlbmNvZGVHUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNv
ZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEgKyBpbmRleDsKKyAgICB9
CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkg
LSAxIC0gaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1AoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID4gMDsKKyAgICB9CisKKyAgICBzdGF0
aWMgYm9vbCBpc0VuY29kZWRGUChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFs
dWUgPCAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQUihpbnQgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmIHZhbHVlIDw9IGVu
Y29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0
YXRpYyBib29sIGlzRW5jb2RlZEZQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
aXNFbmNvZGVkRlAodmFsdWUpICYmIHZhbHVlID49IGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6
bGFzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BU
bXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAm
JiAhaXNFbmNvZGVkR1BSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29k
ZWRGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFs
dWUpICYmICFpc0VuY29kZWRGUFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBHUFJSZWcg
ZGVjb2RlR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFIo
dmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQUlJlZz4oCisgICAgICAgICAg
ICAodmFsdWUgLSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSkpICsg
TWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIEZQ
UlJlZyBkZWNvZGVGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2Rl
ZEZQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPigKKyAgICAg
ICAgICAgIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKSAtIHZh
bHVlKSArCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpOwor
ICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVHUFRtcChpbnQgdmFsdWUpCisgICAg
eworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHZhbHVlIC0gKGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSk7
CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29kZUZQVG1wKGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1
cm4gKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxKSAtIHZh
bHVlOworICAgIH0KKworICAgIC8vIDA6IGVtcHR5IFRtcAorICAgIC8vIHBvc2l0aXZlOiBHUFJz
IGFuZCB0aGVuIEdQIHRlbXBzLgorICAgIC8vIG5lZ2F0aXZlOiBGUFJzIGFuZCB0aGVuIEZQIHRl
bXBzLgorICAgIGludCBtX3ZhbHVlOworfTsKKworc3RydWN0IFRtcEhhc2ggeworICAgIHN0YXRp
YyB1bnNpZ25lZCBoYXNoKGNvbnN0IFRtcCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9Cisg
ICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVG1wJiBhLCBjb25zdCBUbXAmIGIpIHsgcmV0dXJu
IGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JE
ZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
bmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFz
aDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OkFpcjo6VG1wPiB7Cisg
ICAgdHlwZWRlZiBKU0M6OkIzOjpBaXI6OlRtcEhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0
czxKU0M6OkIzOjpBaXI6OlRtcD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6QWly
OjpUbXA+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyVG1wX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyVG1wSW5saW5lc19oCisjZGVmaW5lIEFpclRtcElubGluZXNfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2lubGlu
ZSBUbXA6OlRtcChjb25zdCBBcmcmIGFyZykKK3sKKyAgICAqdGhpcyA9IGFyZy50bXAoKTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpclRtcElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJ
bnN0SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFZhbGlkYXRlciB7CitwdWJsaWM6CisgICAg
VmFsaWRhdGVyKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDog
bV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgewor
ICAgIH0KKworI2RlZmluZSBWQUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg
YnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBmYWlsKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElP
TiwgI2NvbmRpdGlvbiwgdG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2Up
CisgICAgCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3Qq
PiB2YWxpZFNsb3RzOworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiB2YWxpZEJsb2NrczsK
KyAgICAgICAgSGFzaFNldDxTcGVjaWFsKj4gdmFsaWRTcGVjaWFsczsKKworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQorICAgICAgICAgICAgdmFsaWRCbG9ja3MuYWRk
KGJsb2NrKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBtX2NvZGUuc3RhY2tTbG90
cygpKQorICAgICAgICAgICAgdmFsaWRTbG90cy5hZGQoc2xvdCk7CisgICAgICAgIGZvciAoU3Bl
Y2lhbCogc3BlY2lhbCA6IG1fY29kZS5zcGVjaWFscygpKQorICAgICAgICAgICAgdmFsaWRTcGVj
aWFscy5hZGQoc3BlY2lhbCk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
Y29kZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgICAgIEluc3Qm
IGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKEFyZyYg
YXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQo
KSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgICAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWxpZFNsb3RzLmNvbnRhaW5zKGFyZy5zdGFja1Nsb3QoKSks
ICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU3BlY2lhbHMuY29udGFpbnMoYXJnLnNwZWNp
YWwoKSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaW5zdC5pc1ZhbGlkRm9ybSgpLCAoIkF0ICIs
IGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgaWYgKGluc3RJbmRleCA9
PSBibG9jay0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNUZXJt
aW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCFpc1Rlcm1pbmFs
KGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3Vj
Y2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRCbG9ja3MuY29u
dGFpbnMoc3VjY2Vzc29yKSwgKCJJbiAiLCAqYmxvY2spKTsKKyAgICAgICAgfQorICAgIH0KKwor
cHJpdmF0ZToKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZmFpbCgKKyAgICAgICAg
Y29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlv
biwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAg
eworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAg
ICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkFJUiBWQUxJ
REFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0
aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAg
ICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiICAgIEFmdGVyICIsIG1fY29kZS5sYXN0UGhhc2VOYW1lKCksICJcbiIpOworICAgICAgICAg
ICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAg
ICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgewor
ICAgICAgICAgICAgZGF0YUxvZygiQmVmb3JlICIsIG1fY29kZS5sYXN0UGhhc2VOYW1lKCksICI6
XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAg
ICAgICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyht
X2NvZGUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBXVEZS
ZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5jdGlvbiwgY29u
ZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgQ29kZSYgbV9jb2Rl
OworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5h
bWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIGR1bXBCZWZv
cmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihjb2RlLCBkdW1wQmVmb3JlKTsKKyAgICB2
YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
clZhbGlkYXRlX2gKKyNkZWZpbmUgQWlyVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFz
cyBDb2RlOworCit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlID0g
bnVsbHB0cik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3Iu
cmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NDQgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkK
KworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
IworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
IworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5h
bWUiCisKK2NsYXNzIE9wY29kZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92
ZXJsb2FkcworICAgIGF0dHJfYWNjZXNzb3IgOmtpbmQKKworICAgIGRlZiBpbml0aWFsaXplKG5h
bWUsIHNwZWNpYWwpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IHNw
ZWNpYWwKKyAgICAgICAgQGtpbmQgPSA6aW5zdAorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAg
ICAgICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IG1hc21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVu
ZAorZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAg
ZGVmIGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAg
IEB0eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9y
ZWFkZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUs
IGZvcm1zKQorICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9
IGZvcm1zCisgICAgZW5kCitlbmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1l
CisgICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkK
KyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQK
KworICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAg
ICAgICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9
PSBvdGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAor
ICAgIGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9
PSAiQWRkciIKKyAgICAgICAgICAgIFsiQWRkciIsICJTdGFjayIsICJDYWxsQXJnIl0KKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgW2tpbmRdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAg
ZGVmIGFyZ0tpbmRzCisgICAgICAgIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICBlbmQKK2VuZAor
CitjbGFzcyBGb3JtCisgICAgYXR0cl9yZWFkZXIgOmtpbmRzLCA6YWx0TmFtZQorCisgICAgZGVm
IGluaXRpYWxpemUoa2luZHMsIGFsdE5hbWUpCisgICAgICAgIEBraW5kcyA9IGtpbmRzCisgICAg
ICAgIEBhbHROYW1lID0gYWx0TmFtZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAg
IGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlh
bGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUK
KyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVm
IHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQK
KworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisg
ICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmln
aW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShv
dGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcg
PT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3Ro
ZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAg
ICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAg
IiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVm
IHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAg
ICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAg
ZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1l
ID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJl
ciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAg
ICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAg
ICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAg
ICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQShbYS16QS1aMC05X10rKS8KKyAg
ICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51
bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAjIHdo
aXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVssOipcL10vCisgICAgICAgICAgICBy
ZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2lu
Lm5ldyhmaWxlTmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tz
dHJbMC4uMjBdLmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9t
YXRjaAorICAgIGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc1VEKHRva2VuKQorICAgIHRv
a2VuID1+IC9cQSgoVSl8KEQpfChVRCkpXFovCitlbmQKKworZGVmIGlzR0YodG9rZW4pCisgICAg
dG9rZW4gPX4gL1xBKChHKXwoRikpXFovCitlbmQKKworZGVmIGlzS2luZCh0b2tlbikKKyAgICB0
b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEltbTY0KXwoQWRkcil8KEluZGV4KXwoUmVsQ29uZCl8
KFJlc0NvbmQpKVxaLworZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgaXNVRCh0b2tl
bikgb3IgaXNHRih0b2tlbikgb3IgaXNLaW5kKHRva2VuKSBvcgorICAgICAgICB0b2tlbiA9PSAi
c3BlY2lhbCIgb3IgdG9rZW4gPT0gImFzIgorZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4p
CisgICAgdG9rZW4gPX4gL1xBKFthLXpBLVowLTlfXSspXFovIGFuZCBub3QgaXNLZXl3b3JkKHRv
a2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVO
YW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4
ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAg
ICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisg
ICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAg
ICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBp
ZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBl
bmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFy
c2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAg
IHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcK
KyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisg
ICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3Rl
ZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFu
Y2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVJvbGUKKyAgICAg
ICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHJv
bGUgKFUsIEQsIG9yIFVEKSIpIHVubGVzcyBpc1VEKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQor
ICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lVHlwZQorICAgICAgICBy
ZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgdHlwZSAo
RyBvciBGKSIpIHVubGVzcyBpc0dGKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICBy
ZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lS2luZAorICAgICAgICByZXN1bHQgPSB0
b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBJbW02
NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgb3IgUmVzQ29uZCkiKSB1bmxlc3MgaXNLaW5k
KHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAg
IGRlZiBwYXJzZQorICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICAKKyAgICAgICAgbG9vcCB7
CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAg
ICAgIGlmIHRva2VuID09ICJzcGVjaWFsIgorICAgICAgICAgICAgICAgIGNvbnN1bWUoInNwZWNp
YWwiKQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNv
ZGUiKSBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKworICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNv
ZGVOYW1lXSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgdHJ1ZSkKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAg
ICAgICAgICAgIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBvcGNv
ZGUgPSByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigi
Q2Fubm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBpZiBvcGNvZGUuc3BlY2lhbAorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gT3Bjb2RlLm5l
dyhvcGNvZGVOYW1lLCBmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5h
bWVdID0gb3Bjb2RlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBzaWdu
YXR1cmUgPSBbXQorICAgICAgICAgICAgICAgIGZvcm1zID0gW10KKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBpZiBpc1VEKHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29w
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSBjb25zdW1lUm9sZQorICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3VtZSgiOiIpCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBl
ID0gY29uc3VtZVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
ICAgICAgICAgc2lnbmF0dXJlIDw8IEFyZy5uZXcocm9sZSwgdHlwZSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09
ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIHRva2Vu
ID09ICIvIgorICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIvIikKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSB0b2tlbi5zdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgd2hlbiAiYnJhbmNo
IgorICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLmtpbmQgPSA6YnJhbmNoCisgICAgICAg
ICAgICAgICAgICAgIHdoZW4gInRlcm1pbmFsIgorICAgICAgICAgICAgICAgICAgICAgICAgb3Bj
b2RlLmtpbmQgPSA6dGVybWluYWwKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQmFkIC8gZGlyZWN0aXZlIikKKyAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UKKyAgICAgICAgICAgICAg
ICBlbmQKKworICAgICAgICAgICAgICAgIGlmIGlzS2luZCh0b2tlbikKKyAgICAgICAgICAgICAg
ICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcyA9IFtdCisgICAgICAg
ICAgICAgICAgICAgICAgICBhbHROYW1lID0gbmlsCisgICAgICAgICAgICAgICAgICAgICAgICBs
b29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kcyA8PCBLaW5kLm5ldyhjb25z
dW1lS2luZCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICIqIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW4gb25seSBhcHBs
eSAqIHRvIFRtcCIpIHVubGVzcyBraW5kc1stMV0ubmFtZSA9PSAiVG1wIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBraW5kc1stMV0uc3BlY2lhbCA9IHRydWUKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiKiIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9r
ZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRva2Vu
ID09ICJhcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCJhcyIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VF
cnJvcigiRm9ybSBoYXMgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Igb3ZlcmxvYWQiKSB1
bmxlc3Mga2luZHMubGVuZ3RoID09IHNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGtpbmRzLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga2luZC5u
YW1lID09ICJJbW0iIG9yIGtpbmQubmFtZSA9PSAiSW1tNjQiCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0ucm9sZSAhPSAiVSIKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0
ZSBmb3IgYSBub24tdXNlIGFyZ3VtZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRl
eF0udHlwZSAhPSAiRyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNl
RXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tZ2VuZXJhbC1wdXJwb3NlIGFy
Z3VtZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JtcyA8PCBGb3JtLm5ldyhraW5kcywgYWx0TmFtZSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyBpc0tpbmQodG9rZW4pCisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIHNp
Z25hdHVyZS5sZW5ndGggPT0gMAorICAgICAgICAgICAgICAgICAgICByYWlzZSB1bmxlc3MgZm9y
bXMubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoW10s
IG5pbCkKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIG9wY29kZS5vdmVy
bG9hZHMgPDwgT3ZlcmxvYWQubmV3KHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorZW5kCisKKyRmaWxlTmFtZSA9
IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZCgkZmlsZU5hbWUpLCAkZmls
ZU5hbWUpCiskb3Bjb2RlcyA9IHBhcnNlci5wYXJzZQorCiskc3RkZXJyLnB1dHMgIkdlbmVyYXRp
bmcgY29kZSBmb3IgI3skZmlsZU5hbWV9LiIKKworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBG
aWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAg
ICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0
b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAg
ICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0
cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAg
ICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAg
fQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRz
ICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91
dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0
LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bj
b2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifTsiCisKKyAgICBvdXRwLnB1dHMgInN0YXRp
YyBjb25zdCB1bnNpZ25lZCBudW1PcGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIKKyAg
ICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCisgICAgCisgICAg
b3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJjbGFzcyBQcmludFN0
cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OkIzOjpBaXI6Ok9wY29kZSk7IgorICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2UgV1RG
IgorfQorCisjIEZyb20gaGVyZSBvbiwgd2UgZG9uJ3QgdHJ5IHRvIGVtaXQgcHJvcGVybHkgaW5k
ZW50ZWQgY29kZSwgc2luY2Ugd2UncmUgdXNpbmcgYSByZWN1cnNpdmUgcGF0dGVybgorIyBtYXRj
aGVyLgorCitkZWYgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4LCBj
b2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgcmV0dXJuIGlmIGZvcm1zLmxlbmd0
aCA9PSAwCisKKyAgICBpZiBmaWx0ZXJbZm9ybXNdCisgICAgICAgIHJldHVybgorICAgIGVuZAor
CisgICAgaWYgY29sdW1uSW5kZXggPj0gZm9ybXNbMF0ua2luZHMubGVuZ3RoCisgICAgICAgIHJh
aXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMQorICAgICAgICBjYWxsYmFja1tmb3Jtc1swXV0K
KyAgICAgICAgcmV0dXJuCisgICAgZW5kCisgICAgCisgICAgZ3JvdXBzID0ge30KKyAgICBmb3Jt
cy5lYWNoIHsKKyAgICAgICAgfCBmb3JtIHwKKyAgICAgICAga2luZCA9IGZvcm0ua2luZHNbY29s
dW1uSW5kZXhdLm5hbWUKKyAgICAgICAgaWYgZ3JvdXBzW2tpbmRdCisgICAgICAgICAgICBncm91
cHNba2luZF0gPDwgZm9ybQorICAgICAgICBlbHNlCisgICAgICAgICAgICBncm91cHNba2luZF0g
PSBbZm9ybV0KKyAgICAgICAgZW5kCisgICAgfQorCisgICAgaWYgc3BlZWQgPT0gOmZhc3QgYW5k
IGdyb3Vwcy5sZW5ndGggPT0gMQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3Jt
cywgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAg
ICAgIHJldHVybgorICAgIGVuZAorCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7Y29sdW1uR2V0
dGVyW2NvbHVtbkluZGV4XX0pIHsiCisgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgIHwg
a2V5LCB2YWx1ZSB8CisgICAgICAgIG91dHAucHV0cyAiI2lmIFVTRShKU1ZBTFVFNjQpIiBpZiBr
ZXkgPT0gIkltbTY0IgorICAgICAgICBLaW5kLmFyZ0tpbmRzKGtleSkuZWFjaCB7CisgICAgICAg
ICAgICB8IGFyZ0tpbmQgfAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlIEFyZzo6I3thcmdL
aW5kfToiCisgICAgICAgIH0KKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUs
IGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAg
ICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gVVNFKEpT
VkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVs
dDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisKK2Rl
ZiBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBvdXRwLnB1dHMgInN3
aXRjaCAoI3tpbnN0fS0+b3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAg
ICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06
IgorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBu
aWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKChvcGNv
ZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkgb3Igc3BlZWQgPT0gOnNhZmUpCisgICAgICAgICAgICBv
dXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+YXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAg
ICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVy
bG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAg
ICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1
bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0
cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisgICAgCitkZWYgbWF0Y2hJ
bnN0T3ZlcmxvYWRGb3JtKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG1hdGNoSW5zdE92ZXJsb2Fk
KG91dHAsIHNwZWVkLCBpbnN0KSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAg
ICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbCwgbmls
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAg
ICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAgICAgICAgICIje2luc3R9LT5hcmdz
WyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWx0
ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAg
ICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3Zlcmxv
YWQsIGZvcm0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3Bl
ZWQsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisg
ICAgICAgIGVuZAorICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZVV0aWxzIikgeworICAgIHwg
b3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3QuaFwiIgorICAgIG91dHAu
cHV0cyAiI2luY2x1ZGUgXCJBaXJTcGVjaWFsLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5w
dXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAg
ICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIFQ+IgorICAgIG91dHAucHV0cyAiaW5saW5l
IFQqIG9wZ2VuSGlkZGVuUHRySWRlbnRpdHkoVCogcG9pbnRlcikgeyByZXR1cm4gcG9pbnRlcjsg
fSIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisg
ICAgb3V0cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1
dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSB3aGlsZSAoZmFs
c2UpIgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiIKKyAgICBv
dXRwLnB1dHMgInZvaWQgSW5zdDo6Zm9yRWFjaEFyZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSIK
KyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgOmZhc3QsICJ0
aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUu
c3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbMF0sIEFyZzo6VXNl
LCBBcmc6OkdQKTsgLy8gVGhpcyBpcyBiYXNpY2FsbHkgYm9ndXMsIGJ1dCBpdCB3b3JrcyBmIGFu
YWx5c2VzIG1vZGVsIFNwZWNpYWwgYXMgYW4gaW1tZWRpYXRlLiIKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiYXJnc1swXS5zcGVjaWFsKCktPmZvckVhY2hBcmcoKnRoaXMsIHNjb3BlZExhbWJkYTxF
YWNoQXJnQ2FsbGJhY2s+KGZ1bmN0b3IpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG92
ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwgYXJn
LCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG5pbAorICAgICAgICAgICAgICAgIGNh
c2UgYXJnLnJvbGUKKyAgICAgICAgICAgICAgICB3aGVuICJVIgorICAgICAgICAgICAgICAgICAg
ICByb2xlID0gIlVzZSIKKyAgICAgICAgICAgICAgICB3aGVuICJEIgorICAgICAgICAgICAgICAg
ICAgICByb2xlID0gIkRlZiIKKyAgICAgICAgICAgICAgICB3aGVuICJVRCIKKyAgICAgICAgICAg
ICAgICAgICAgcm9sZSA9ICJVc2VEZWYiCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7aW5kZXh9XSwgQXJnOjoj
e3JvbGV9LCBBcmc6OiN7YXJnLnR5cGV9UCk7IgorICAgICAgICAgICAgfQorICAgICAgICBlbmQK
KyAgICB9CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+IgorICAgIG91dHAucHV0cyAiQUxXQVlTX0lOTElORSBib29sIGlz
VmFsaWRGb3JtKE9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpIgorICAgIG91
dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIkFyZzo6S2luZCBraW5kc1tzaXplb2YuLi4oQXJn
dW1lbnRzKV0gPSB7IGFyZ3VtZW50cy4uLiB9OyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bj
b2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAor
ICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBvdXRwLnB1
dHMgInN3aXRjaCAoc2l6ZW9mLi4uKEFyZ3VtZW50cykpIHsiCisgICAgICAgIHVubGVzcyBvcGNv
ZGUuc3BlY2lhbAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAg
ICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tv
dmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiCisgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVy
ID0gcHJvYyB7IHwgY29sdW1uSW5kZXggfCAib3BnZW5IaWRkZW5QdHJJZGVudGl0eShraW5kcylb
I3tjb2x1bW5JbmRleH1dIiB9CisgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNl
IH0KKyAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAg
ICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0gKG5vdCBmb3JtLmtpbmRz
LmRldGVjdCB7IHwga2luZCB8IGtpbmQuc3BlY2lhbCB9KQorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTigje3NwZWNpYWx9KTsiCisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAw
LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1
dHMgImRlZmF1bHQ6IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5w
dXRzICJ9IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRz
ICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisg
ICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7ICIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBv
dXRwLnB1dHMgImlubGluZSBib29sIGlzVGVybWluYWwoT3Bjb2RlIG9wY29kZSkiCisgICAgb3V0
cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29k
ZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29kZS5r
aW5kID09IDp0ZXJtaW5hbCBvciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBv
dXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9CisgICAg
b3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBv
dXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0
cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIiCit9CisKK3dyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgeworICAgIHwgb3V0cCB8CisgICAg
b3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3RJbmxpbmVzLmhcIiIKKyAgICBvdXRwLnB1dHMg
IiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFj
ZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7Igor
ICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29k
ZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2gg
KG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8
CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5w
dXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0
cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91
dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0
cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKKyAgICBvdXRwLnB1dHMg
Im5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0
cC5wdXRzICJib29sIEluc3Q6OmlzVmFsaWRGb3JtKCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAg
IG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6c2FmZSwgInRoaXMiKSB7CisgICAgICAgIHwg
b3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAg
ICAgICAgICBvdXRwLnB1dHMgImlmIChhcmdzLnNpemUoKSA8IDEpIgorICAgICAgICAgICAgb3V0
cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3Nb
MF0uaXNTcGVjaWFsKCkpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7Igor
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmlz
VmFsaWQoKnRoaXMpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlk
YXRpb24gPSBmYWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aC50aW1l
cyB7CisgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG92
ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZQorICAgICAgICAgICAgICAgIHR5cGUgPSBvdmVy
bG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUKKyAgICAgICAgICAgICAgICBraW5kID0gZm9ybS5r
aW5kc1tpbmRleF0KKyAgICAgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uIHw9IGtpbmQu
c3BlY2lhbAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBr
bm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0byB2YWxpZGF0ZSB0aGUg
cm9sZSwgc2luY2UKKyAgICAgICAgICAgICAgICAjIGtpbmQgaW1wbGllcyByb2xlLiBTbywgdGhl
IG9ubHkgdGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBpcyB0aGUgdHlwZS4gQW5kIHdlIG9ubHkgaGF2
ZQorICAgICAgICAgICAgICAgICMgdG8gdmFsaWRhdGUgdGhlIHR5cGUgaWYgd2UgaGF2ZSBhIFRt
cC4KKyAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tpbmRleH1dLnRtcCgpLmlzI3t0eXBlfVAoKSki
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkc01v
cmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWlzI3tvcGNvZGUu
bmFtZX1WYWxpZCgqdGhpcykpIgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVU
VVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0
dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5z
dDo6YWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAg
ICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNo
IHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUu
bmFtZX06IgorCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1
dHMgImlmICghYXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7
IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCkt
PmFkbWl0c1N0YWNrKCp0aGlzLCBhcmdJbmRleCkpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgIyBTd2l0Y2ggb24gdGhlIGFyZ0luZGV4LgorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKGFyZ0luZGV4KSB7IgorCisgICAgICAgICAgICBudW1BcmdzID0gb3Bjb2RlLm92ZXJsb2Fk
cy5tYXAgeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG92
ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgIH0ubWF4CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIG51bUFyZ3MudGltZXMgeworICAgICAgICAgICAgICAgIHwgYXJnSW5kZXgg
fAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4fToiCisKKyAgICAg
ICAgICAgICAgICAjIENoZWNrIGlmIGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxsIG9mIHRoZSBvdmVy
bG9hZHMgZWl0aGVyIGRvLCBvciBkb24ndCwgYWRtaXQgYW4gYWRkcmVzcworICAgICAgICAgICAg
ICAgICMgYXQgdGhpcyBpbmRleC4gV2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2ZXJ5IGNvbW1vbiBj
YXNlLgorICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICBudW1ObyA9
IDAKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAg
ICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMu
ZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAg
ICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0ZXN0IG51bVllcyBm
aXJzdCBiZWNhdXNlIGlmIHdlIGVuZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3YW50CisgICAgICAg
ICAgICAgICAgIyB0byBzYXkgdGhhdCBBZGRyZXNzIGlzIGluYWRtaXNzaWJsZS4KKyAgICAgICAg
ICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9Q
R0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgZG8gdGhlIGZ1bGwgdGVz
dC4KKworICAgICAgICAgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAob3Bjb2RlLm92
ZXJsb2Fkcy5zaXplICE9IDEpCisKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKGFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAg
ICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwg
b3ZlcmxvYWQgfAorCisgICAgICAgICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBh
bGwgb2YgdGhlbSBkbyB3aGF0IHdlIHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBudW1Z
ZXMgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1th
cmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVll
cyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IGVtaXQgYW55
dGhpbmcsIGp1c3QgZHJvcCB0byBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgZWxz
aWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2Fz
ZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVk
T3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVu
Z3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBUaGlzIGlzIGhvdyB3ZSB0ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQgY2hhbmdpbmcgdGhp
cyBhcmd1bWVudCB0byBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkcmVzcyB5
aWVsZHMgYSB2YWxpZCBmb3JtLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdl
dHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbHVtbklu
ZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29sdW1uSW5kZXggPT0g
YXJnSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmc6OkFkZHIi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJhcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtcyB8CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG51bVllcyA9IDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBm
b3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0lu
ZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIyBEcm9wIGRvd24sIGVtaXQgbm8gY29kZSwgc2luY2Ugd2UgY2Fubm90IG1hdGNoLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAj
IEtlZXAgZ29pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4o
dHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29s
dW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsi
CisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICAgICAg
ICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisg
ICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgb3V0cC5wdXRzICJi
cmVhazsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIGVuZAorICAgICAgICAK
KyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVs
dDoiOworICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRw
LnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRz
ICJDQ2FsbEhlbHBlcnM6Okp1bXAgSW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIEdl
bmVyYXRpb25Db250ZXh0JiBjb250ZXh0KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5w
dXRzICJVTlVTRURfUEFSQU0oaml0KTsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oY29u
dGV4dCk7IgorICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIHJlc3VsdDsiCisgICAg
bWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBv
cGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0
ZSgqdGhpcywgaml0LCBjb250ZXh0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBm
b3JtLmFsdE5hbWUKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gZm9ybS5hbHROYW1lCisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IG9wY29kZS5tYXNt
TmFtZQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6YnJh
bmNoCisgICAgICAgICAgICAgICAgb3V0cC5wcmludCAicmVzdWx0ID0gIgorICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICBvdXRwLnByaW50ICJqaXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAg
ICAgICAgIGZvcm0ua2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtp
bmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBpZiBpbmRleCAhPSAwCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgIiwgIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgIGNhc2Uga2luZC5uYW1lCisgICAgICAgICAgICAgICAgd2hlbiAiVG1wIgorICAgICAgICAg
ICAgICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmlu
dCAiYXJnc1sje2luZGV4fV0uZnByKCkiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgIHdoZW4gIkltbSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJn
c1sje2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbW02
NCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVz
dGVkSW1tNjQoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJBZGRyIgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAg
ICAgICB3aGVuICJJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sj
e2luZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgor
ICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9u
YWxDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigp
IgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRw
LnB1dHMgIik7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4ocmVzdWx0KTsi
CisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAicmV0dXJuIHJlc3VsdDsiCisgICAgb3V0cC5wdXRz
ICJ9IgorCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgor
fQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShy
ZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBwdWJsaWM6CiAgICAgfQog
CiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpldHRpc29uKCk7ICAgIAotICAgIENvZGVC
bG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVC
bG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBHZXQgcmlk
IG9mIHRoaXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyMzY3NwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTE1ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUs
NyArMTA1LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4g
bV9pbmRleDsgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
ICE9IGludmFsaWQoKTsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlz
U2V0KCk7IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNT
ZXQoKTsgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1faW5kZXggPT0gZGVsZXRlZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoK
ICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFs
bFJlZ3NJdGVyYWJsZSB7CisgICAgcHVibGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAgICAgICAg
ICAgZXhwbGljaXQgaXRlcmF0b3IoUmVnIHJlZykKKyAgICAgICAgICAgICAgICA6IG1fcmVnSW5k
ZXgocmVnLmluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFJlZyBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBSZWc6OmZyb21JbmRleChtX3JlZ0lu
ZGV4KTsgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9yZWdJbmRleCA9IFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5k
ZXgpLm5leHQoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9yZWdJ
bmRleCA9PSBvdGhlci5tX3JlZ0luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdW5zaWduZWQgbV9yZWdJbmRleDsK
KyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRl
cmFibGUgYWxsKCkgeyByZXR1cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAg
ICBzdGF0aWMgdWludDhfdCBpbnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAko
cmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0
T2Zmc2V0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUmVnaXN0ZXJB
dE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaQogICAgIGlmIChvZmZzZXRCYXNlVHlwZSA9
PSBGcmFtZVBvaW50ZXJCYXNlZCkKICAgICAgICAgb2Zmc2V0ID0gLShzdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KG51bWJlck9mUmVnaXN0ZXJzKSAqIHNpemVvZih2b2lkKikpOwogCi0gICAgZm9yIChS
ZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7cmVnID0gcmVnLm5leHQo
KSkgeworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgp
OyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmIChyZWdpc3RlclNldC5nZXQocmVnKSkg
ewogICAgICAgICAgICAgYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQocmVnLCBvZmZzZXQpKTsKICAg
ICAgICAgICAgIG9mZnNldCArPSBzaXplb2Yodm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAkocmV2aXNpb24gMTkxNTg2
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWdpc3Rl
cnMuY2xlYXIoKTsKICAgICB9CiAKLSAgICBzaXplX3Qgc2l6ZSgpCisgICAgc2l6ZV90IHNpemUo
KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzLnNpemUoKTsKICAgICB9
CkBAIC02Niw2ICs2Niw5IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zmc2V0KiBmaW5kKFJl
ZykgY29uc3Q7CiAgICAgdW5zaWduZWQgaW5kZXhPZihSZWcpIGNvbnN0OyAvLyBSZXR1cm5zIFVJ
TlRfTUFYIGlmIG5vdCBmb3VuZC4KIAorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29u
c3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVycy5iZWdpbigpOyB9
CisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBtX3JlZ2lzdGVycy5lbmQoKTsgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxS
ZWdpc3RlckF0T2Zmc2V0PiBtX3JlZ2lzdGVyczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgs
MTMgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNl
dCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDog
bV92ZWN0b3Iuc2V0Qml0cygpKQorICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChp
bmRleCkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykg
eyBzZXQocmVnKTsgfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTAtMjQgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBDcmVhdGUgYSBzdXBlciByb3Vn
aCBwcm90b3R5cGUgb2YgQjMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDI4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3Rm
L01hdGhFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6cmFuZ2VzT3ZlcmxhcCk6IE5pY2UgdXRpbGl0
eSBmb3IgY2hlY2tpbmcgaWYgcmFuZ2VzIG92ZXJsYXAuCisgICAgICAgICogd3RmL1BsYXRmb3Jt
Lmg6IEFkZCBhIEVOQUJMRShCM19KSVQpIGZlYXR1cmUgZmxhZy4KKyAgICAgICAgKiB3dGYvU2Nv
cGVkTGFtYmRhLmg6IEFkZGVkLiBUaGlzIGFsbG93cyB1cyB0byBkbyB6ZXJvLWFsbG9jYXRpb24s
IHplcm8tY29weSBleHRlcm4gbGFtYmRhcy4KKyAgICAgICAgKFdURjo6c2NvcGVkTGFtYmRhKToK
KyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpjcmVhdGVTaGFyZWRU
YXNrKToKKwogMjAxNS0xMC0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZhY3RvciBvdXQgdGhlIGdyYXBoIG5vZGUgd29ya2xpc3RzIGZyb20gREZHIGludG8g
V1RGCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5
OEVCIC8qIFdvcmRMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJ
MEZFQjNEQ0YxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAv
KiBTaGFyZWRUYXNrLmggKi87IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJh
bGxlbFZlY3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVy
YXRvci5oICovOyB9OworCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
MDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJE
ODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdy
YXBoTm9kZVdvcmtsaXN0LmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBU
aW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkwRkY4
NjA5NTFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3
RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBG
RTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0
IC8qIFNjb3BlZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29w
ZWRMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUz
MTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5
NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVB
QjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFB
RkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNE
MzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0
MTIzRkYgLyogU2VnbWVudGVkVmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEy
M0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQx
MjNGRiAvKiBTSEExLmNwcCAqLywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmlt
aXRpdmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyog
U2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9MaXN0RHVtcC5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvV1RGL3d0Zi9MaXN0
RHVtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC01Myw2ICs1MywyNiBAQCBwcml2YXRlOgogfTsKIAogdGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFBvaW50ZXJMaXN0RHVtcCB7CitwdWJsaWM6CisgICAg
UG9pbnRlckxpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IGNoYXIqIGNvbW1hKQorICAgICAg
ICA6IG1fbGlzdChsaXN0KQorICAgICAgICAsIG1fY29tbWEoY29tbWEpCisgICAgeworICAgIH0K
KyAgICAKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGZvciAodHlwZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fbGlzdC5iZWdpbigp
OyBpdGVyICE9IG1fbGlzdC5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgb3V0LnByaW50KG1f
Y29tbWEsIHBvaW50ZXJEdW1wKCppdGVyKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0
IFQmIG1fbGlzdDsKKyAgICBDb21tYVByaW50ZXIgbV9jb21tYTsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+CiBjbGFzcyBNYXBEdW1wIHsKIHB1YmxpYzoKICAgICBNYXBEdW1wKGNvbnN0IFQm
IG1hcCwgY29uc3QgY2hhciogYXJyb3csIGNvbnN0IGNoYXIqIGNvbW1hKQpAQCAtODAsNiArMTAw
LDEyIEBAIExpc3REdW1wPFQ+IGxpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnMKICAgICByZXR1
cm4gTGlzdER1bXA8VD4obGlzdCwgY29tbWEpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
UG9pbnRlckxpc3REdW1wPFQ+IHBvaW50ZXJMaXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25zdCBj
aGFyKiBjb21tYSA9ICIsICIpCit7CisgICAgcmV0dXJuIFBvaW50ZXJMaXN0RHVtcDxUPihsaXN0
LCBjb21tYSk7Cit9CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbXBhcmF0b3I+
CiBDU3RyaW5nIHNvcnRlZExpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IENvbXBhcmF0b3Im
IGNvbXBhcmF0b3IsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKIHsKSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL01hdGhFeHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0
cmFzLmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAko
d29ya2luZyBjb3B5KQpAQCAtNDE5LDYgKzQxOSwyMCBAQCBpbmxpbmUgVCBsZWZ0U2hpZnRXaXRo
U2F0dXJhdGlvbihUIHZhbHVlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLy8gUGFzcyByYW5n
ZXMgd2l0aCB0aGUgbWluIGJlaW5nIGluY2x1c2l2ZSBhbmQgdGhlIG1heCBiZWluZyBleGNsdXNp
dmUuIEZvciBleGFtcGxlLCB0aGlzIHNob3VsZAorLy8gcmV0dXJuIGZhbHNlOgorLy8KKy8vICAg
ICByYW5nZXNPdmVybGFwKDAsIDgsIDgsIDE2KQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGlu
ZSBib29sIHJhbmdlc092ZXJsYXAoVCBsZWZ0TWluLCBUIGxlZnRNYXgsIFQgcmlnaHRNaW4sIFQg
cmlnaHRNYXgpCit7CisgICAgaWYgKGxlZnRNaW4gPD0gcmlnaHRNaW4gJiYgbGVmdE1heCA+IHJp
Z2h0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocmlnaHRNaW4gPD0gbGVmdE1p
biAmJiByaWdodE1heCA+IGxlZnRNaW4pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVy
biBmYWxzZTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyAjaWZuZGVmIFdU
Rl9NYXRoRXh0cmFzX2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291
cmNlL1dURi93dGYvUGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNzc2LDEyICs3NzYsMjAg
QEAKICNkZWZpbmUgRU5BQkxFX0NPTkNVUlJFTlRfSklUIDEKICNlbmRpZgogCisvKiBUaGUgQjMg
Y29tcGlsZXIgaXMgYW4gZXhwZXJpbWVudGFsIGJhY2tlbmQgdGhhdCBpcyBzdGlsbCBpbiBkZXZl
bG9wbWVudC4gV2Ugd2lsbCBrZWVwIGl0IGJ1aWxkaW5nCisgICBvbiBEYXJ3aW4veDg2LTY0IGZv
ciBub3csIHRob3VnaCBpdCBpcyB1bnVzZWQgZXhjZXB0IGZvciB0ZXN0cy4gKi8KKyNpZiBPUyhE
QVJXSU4pICYmIENQVShYODZfNjQpCisjZGVmaW5lIEVOQUJMRV9CM19KSVQgMQorI2VuZGlmCisK
IC8qIElmIHRoZSBiYXNlbGluZSBqaXQgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBkaXNhYmxlIHVw
cGVyIHRpZXJzIGFzIHdlbGw6ICovCiAjaWYgIUVOQUJMRShKSVQpCi0jdW5kZWYgRU5BQkxFX0RG
R19KSVQgICAgICAvKiBVbmRlZiBzbyB0aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KLSN1bmRl
ZiBFTkFCTEVfRlRMX0pJVCAgICAgIC8qIFVuZGVmIHNvIHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0
LiAqLworI3VuZGVmIEVOQUJMRV9ERkdfSklUCisjdW5kZWYgRU5BQkxFX0ZUTF9KSVQKKyN1bmRl
ZiBFTkFCTEVfQjNfSklUCiAjZGVmaW5lIEVOQUJMRV9ERkdfSklUIDAKICNkZWZpbmUgRU5BQkxF
X0ZUTF9KSVQgMAorI2RlZmluZSBFbmFibGVfQjNfSklUIDAKICNlbmRpZgogCiAvKiBDb3VudHMg
dXNlcyBvZiB3cml0ZSBiYXJyaWVycyB1c2luZyBzYW1wbGluZyBjb3VudGVycy4gQmUgc3VyZSB0
byBhbHNvCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9X
VEYvd3RmL1Njb3BlZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29w
ZWRMYW1iZGFfaAorI2RlZmluZSBTY29wZWRMYW1iZGFfaAorCituYW1lc3BhY2UgV1RGIHsKKwor
Ly8gWW91IGNhbiB1c2UgU2NvcGVkTGFtYmRhIHRvIGVmZmljaWVudGx5IHBhc3MgbGFtYmRhcyB3
aXRob3V0IGFsbG9jYXRpbmcgbWVtb3J5IG9yIHJlcXVpcmluZworLy8gdGVtcGxhdGUgc3BlY2lh
bGl6YXRpb24gb2YgdGhlIGNhbGxlZS4gVGhlIGNhbGxlZSBzaG91bGQgYmUgZGVjbGFyZWQgYXM6
CisvLworLy8gdm9pZCBmb28oY29uc3QgU2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVm
ZiYpPiYpOworLy8KKy8vIFRoZSBjYWxsZXIganVzdCBkb2VzOgorLy8KKy8vIHZvaWQgZm9vKHNj
b3BlZExhbWJkYTxNeVRoaW5ncyogKGludCwgU3R1ZmYmKT4oWyZdIChpbnQgeCwgU3R1ZmYmIHkp
IC0+IE15VGhpbmdzKiB7IGJsYWggfSkpOworLy8KKy8vIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBv
biBmb28oKSBub3QgZXNjYXBpbmcgdGhlIGxhbWJkYS4gVGhlIGxhbWJkYSBpcyBvbmx5IHZhbGlk
IHdoaWxlIGZvbygpIGlzCisvLyBvbiB0aGUgc3RhY2sgLSBoZW5jZSB0aGUgbmFtZSBTY29wZWRM
YW1iZGEuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2NvcGVkTGFt
YmRhOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRU
eXBlcz4KK2NsYXNzIFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4g
eworcHVibGljOgorICAgIFNjb3BlZExhbWJkYShSZXN1bHRUeXBlICgqaW1wbCkodm9pZCogYXJn
LCBBcmd1bWVudFR5cGVzJiYuLi4pID0gbnVsbHB0ciwgdm9pZCogYXJnID0gbnVsbHB0cikKKyAg
ICAgICAgOiBtX2ltcGwoaW1wbCkKKyAgICAgICAgLCBtX2FyZyhhcmcpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBSZXN1bHRUeXBlIG9wZXJhdG9yKCkoQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3Vt
ZW50cykgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2ltcGwobV9hcmcsIHN0ZDo6Zm9y
d2FyZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKK3ByaXZhdGU6Cisg
ICAgUmVzdWx0VHlwZSAoKm1faW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pOwor
ICAgIHZvaWQgKm1fYXJnOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0
eXBlbmFtZSBGdW5jdG9yPiBjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yOwordGVtcGxhdGU8dHlw
ZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcywgdHlwZW5hbWUgRnVu
Y3Rvcj4KK2NsYXNzIFNjb3BlZExhbWJkYUZ1bmN0b3I8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBl
cy4uLiksIEZ1bmN0b3I+IDogcHVibGljIFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVu
dFR5cGVzLi4uKT4geworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBhc3NlZEZ1bmN0
b3I+CisgICAgU2NvcGVkTGFtYmRhRnVuY3RvcihQYXNzZWRGdW5jdG9yJiYgZnVuY3RvcikKKyAg
ICAgICAgOiBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+KGltcGxG
dW5jdGlvbiwgdGhpcykKKyAgICAgICAgLCBtX2Z1bmN0b3Ioc3RkOjpmb3J3YXJkPFBhc3NlZEZ1
bmN0b3I+KGZ1bmN0b3IpKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFJl
c3VsdFR5cGUgaW1wbEZ1bmN0aW9uKHZvaWQqIGFyZ3VtZW50LCBBcmd1bWVudFR5cGVzJiYuLi4g
YXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjb3BlZExhbWJk
YUZ1bmN0b3IqPihhcmd1bWVudCktPm1fZnVuY3RvcigKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2Fy
ZDxBcmd1bWVudFR5cGVzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICBGdW5jdG9yIG1f
ZnVuY3RvcjsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUg
RnVuY3Rvcj4KK1Njb3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPiBzY29w
ZWRMYW1iZGEoRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIFNjb3BlZExhbWJkYUZ1
bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3Rv
cikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTY29wZWRMYW1iZGE7
Cit1c2luZyBXVEY6OnNjb3BlZExhbWJkYTsKKworI2VuZGlmIC8vIFNjb3BlZExhbWJkYV9oCisK
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvd3Rm
L1NoYXJlZFRhc2suaAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMTEgQEAgcHVibGljOgog
ICAgIHsKICAgICB9CiAKKyAgICBTaGFyZWRUYXNrRnVuY3RvcihGdW5jdG9yJiYgZnVuY3RvcikK
KyAgICAgICAgOiBtX2Z1bmN0b3IoV1RGOjptb3ZlKGZ1bmN0b3IpKQorICAgIHsKKyAgICB9CisK
IHByaXZhdGU6CiAgICAgUmVzdWx0VHlwZSBydW4oQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50
cykgb3ZlcnJpZGUKICAgICB7CkBAIC0xMTAsNiArMTE1LDExIEBAIFJlZjxTaGFyZWRUYXNrPEZ1
bmN0aW9uVHlwZT4+IGNyZWF0ZVNoYXIKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFy
ZWRUYXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KK3RlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1JlZjxTaGFyZWRU
YXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0ZVNoYXJlZFRhc2soRnVuY3RvciYmIGZ1bmN0b3IpCit7
CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBl
LCBGdW5jdG9yPihXVEY6Om1vdmUoZnVuY3RvcikpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV1RG
CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264122</attachid>
            <date>2015-10-27 00:01:12 -0700</date>
            <delta_ts>2015-10-27 11:41:26 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>626552</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MiBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFjY2VwdFJvb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRSb290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OmFjY2VwdEludGVybmFscyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjphY2NlcHRPcGVyYW5kcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OmFjY2VwdE9wZXJhbmRzTGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUxvYWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBZGQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFuZExvYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAgICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzTG93
ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICog
YjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpvZmZzZXQpOgorICAg
ICAgICAoSlNDOjpCMzo6TWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKToKKyAgICAgICAgKiBiMy9C
M09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzQ2hlY2tNYXRo
KToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZGF0
YSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAo
SlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6
UGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIz
L0IzUGF0Y2hwb2ludFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2lu
dFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpC
Mzo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL0IzUGhhc2VTY29wZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpQcm9jZWR1cmUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjp+UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2sp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3Jb
XSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjppdGVyYXRvcjo6ZmluZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24p
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlv
bjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRv
cltdKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKiBi
My9CM1Byb2NlZHVyZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3RLaW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90S2luZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjph
Y2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpieXRlU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6a2luZCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja1Nsb3RWYWx1ZTo6b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
U2xvdFZhbHVlOjpzZXRPZmZzZXRGcm9tRlApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OlN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6ZHVtcCk6CisgICAgICAgICogYjMvQjNT
dGFja21hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFja21hcCk6
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6c2V0T3BhcXVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN0YWNrbWFwOjpvcGFxdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpvcGFxdWVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y29uc3RyYWluKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwOjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpjbG9iYmVy
ZWQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldEdlbmVyYXRvcik6CisgICAgICAg
ICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21h
cFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNw
ZWNpYWw6OmlzVmFsaWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6
YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6YXBw
ZW5kUmVwc0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JB
cmcpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246OlN1Y2Nlc3NvckNvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNz
b3JDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxl
Y3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3Nv
ckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6
QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nl
c3NvckNvbGxlY3Rpb246OmVuZCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpkdW1wKToKKyAgICAgICAgKiBiMy9C
M1N3aXRjaENhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpTd2l0
Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6Y2FzZVZhbHVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OnRhcmdldCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCbG9jayk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSk6CisgICAgICAgIChKU0M6
OkIzOjpTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6YXBwZW5kQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKToKKyAgICAg
ICAgKiBiMy9CM1N3aXRjaFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Om51bUNhc2VW
YWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6Y2FzZVZhbHVlcyk6CisgICAgICAgIChKU0M6OkIz
OjpTd2l0Y2hWYWx1ZTo6ZmFsbFRocm91Z2gpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN3
aXRjaFZhbHVlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjplbmQpOgorICAgICAgICAqIGIz
L0IzVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM1R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppc0ludCk6CisgICAg
ICAgIChKU0M6OkIzOjppc0Zsb2F0KToKKyAgICAgICAgKEpTQzo6QjM6OnBvaW50ZXJUeXBlKToK
KyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2ls
b25WYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzVXBzaWxvblZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VXBzaWxvblZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6cGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6VXBzaWxvblZhbHVlKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VXNlQ291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpC
Mzo6VXNlQ291bnRzOjp+VXNlQ291bnRzKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6b3BlcmF0b3JbXSk6CisgICAgICAg
ICogYjMvQjNWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6dmFsaWRhdGUp
OgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6On5WYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eSk6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0RvdWJsZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6
OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp0eXBlRm9yKToKKyAgICAgICAg
KiBiMy9CM1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFjY2VwdHMp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Om9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Y2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnR5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFpclR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXAp
OgorICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6Omhhc0ludCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
Y29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
b2Zmc2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2Fpcjog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fp
ci9BaXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29u
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpm
cFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZv
ckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hh
c2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAg
ICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpk
ZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVu
ZEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNl
c3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBC
YXNpY0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVt
cDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBi
My9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0Nh
bGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFs
Ojppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNT
dGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWly
Q29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0lu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICog
YjMvYWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5l
d1RtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJh
bWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tT
bG90c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2lu
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVu
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJh
dG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNp
YWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OnNwZWNpYWxzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zZXJ0aW9uU2V0Ojpjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0
OjphcHBlbmRJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6
Omluc2VydEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2Vy
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6ZHVtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Okluc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpJbnN0OjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNo
VG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Rm9yRWFjaDxUbXA+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Rm9y
RWFjaDxBcmc+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFj
aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Omhhc1NwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6aXNTaGlmdFZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNMc2hpZnQzMlZhbGlk
KToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxp
dmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Omxp
dmVBdFRhaWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpM
b2NhbENhbGMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjps
aXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6dGFrZUxp
dmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpleGVjdXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNj
b3BlOjp+UGhhc2VTY29wZSk6CisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUuaDogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Z3Byc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmZwcnNJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpy
ZWdzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEdQUkluZm8+OjppblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz46OmluUHJpb3JpdHlPcmRlcik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6
OlNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjp+U3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6Om5hbWUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTcGVjaWFsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZGVl
cER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OkRlZXBTcGVjaWFsRHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkRlZXBTcGVjaWFsRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAg
ICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9h
aXIvQWlyU3RhY2tTbG90LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNr
U2xvdDo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6U3RhY2tTbG90KToKKyAgICAgICAgKiBi
My9haXIvQWlyU3RhY2tTbG90Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFj
a1Nsb3Q6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjppbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6YWxpZ25tZW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U3RhY2tTbG90Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6
b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xvdER1bXA6
OkRlZXBTdGFja1Nsb3REdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xv
dER1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEZvckluZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6VG1wOjppc0dQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlRtcDo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzUmVnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmZwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6cmVnKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpoYXNUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6Z3BUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnBUbXBJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6VG1wOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpl
bmNvZGVHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZW5jb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
VG1wOjppc0VuY29kZWRGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVk
R1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRGUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc0VuY29kZWRGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZGVjb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjpkZWNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcEhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6VG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dmFsaWRhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJWYWxp
ZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjogQWRk
ZWQuCisgICAgICAgICogYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGVB
bmRSdW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdDQyKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBqaXQvUmVnLmg6CisgICAgICAgIChKU0M6
OlJlZzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpSZWc6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6
UmVnOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6UmVnOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVy
YXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjplbmQpOgorICAg
ICAgICAoSlNDOjpSZWc6OmFsbCk6CisgICAgICAgIChKU0M6OlJlZzo6aW52YWxpZCk6CisgICAg
ICAgIChKU0M6OlJlZzo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJBdE9mZnNldExpc3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
UmVnaXN0ZXJBdE9mZnNldExpc3QpOgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6ZW5kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpm
b3JFYWNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisKIDIwMTUtMTAt
MjQgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVGVhY2ggY3JlYXRl
X2hhc2hfdGFibGUgdG8gb21pdCBidWlsdGlucyBtYWNyb3Mgd2hlbiBnZW5lcmF0aW5nIHRhYmxl
cyBmb3IgbmF0aXZlLW9ubHkgb2JqZWN0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
IFZQQVRIID0gXAogCiBQWVRIT04gPSBweXRob24KIFBFUkwgPSBwZXJsCitSVUJZID0gcnVieQog
CiBKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUiA9ICQoSmF2YVNjcmlwdENvcmUpL1NjcmlwdHMK
IApAQCAtNTksNiArNjAsOSBAQCBhbGwgOiBcCiAgICAgTGV4ZXIubHV0LmggXAogICAgIEtleXdv
cmRMb29rdXAuaCBcCiAgICAgUmVnRXhwSml0VGFibGVzLmggXAorICAgIEIzTG93ZXJpbmdNYXRj
aGVyLmggXAorICAgIEIzQWRkcmVzc01hdGNoZXIuaCBcCisgICAgQWlyT3Bjb2RlLmggXAogIwog
CiAjIEphdmFTY3JpcHQgYnVpbHRpbnMuCkBAIC0yNjIsNiArMjY2LDE0IEBAIElOUFVUX0dFTkVS
QVRPUl9TUEVDSUZJQ0FUSU9OUyA9IFwKIEpTUmVwbGF5SW5wdXRzLmggOiAkKElOUFVUX0dFTkVS
QVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBVVF9HRU5FUkFUT1JfU0NSSVBUUykKIAkkKFBZVEhP
TikgJChKYXZhU2NyaXB0Q29yZSkvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlu
cHV0cy5weSAtLW91dHB1dERpciAuIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlICQoSU5QVVRf
R0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQogCitCM0xvd2VyaW5nTWF0Y2hlci5oOiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29y
ZSkvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReIAorQjNBZGRyZXNz
TWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIu
cmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucworCSQoUlVC
WSkgJF4KKworQWlyT3Bjb2RlLmg6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9vcGNvZGVfZ2Vu
ZXJhdG9yLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworCSQo
UlVCWSkgJF4KKwogIyBEeW5hbWljYWxseS1kZWZpbmVkIHRhcmdldHMgYXJlIGxpc3RlZCBiZWxv
dy4gU3RhdGljIHRhcmdldHMgYmVsb25nIHVwIHRvcC4KIAogYWxsIDogXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlk
ZXBlbmRlbmNpZXMgPSAoCisJCQkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNTExNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNTUxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCkBAIC02ODUsNiArNjg2LDEyMiBAQAogCQkwRkVBMEEzMzE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5j
cHAgKi87IH07CiAJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovOyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBB
QjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1i
bGVyLmNwcCAqLzsgfTsKKwkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRS
ZWdWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZFQzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovOyB9OworCQkwRkVDODUwMDFC
REFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwICovOyB9OworCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi87IH07CisJCTBGRUM4
NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCODFCREFDREFDMDA4MEZG
NzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovOyB9OworCQkwRkVDODUwMzFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2tVdGlscy5oICovOyB9OworCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dv
cmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRCQTFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi87IH07CisJCTBG
RUM4NTA1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQjFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUwNjFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5o
ICovOyB9OworCQkwRkVDODUwNzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUwODFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1Zh
bHVlLmggKi87IH07CisJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRjFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3BwICovOyB9OworCQkwRkVDODUwQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyB9
OworCQkwRkVDODUwQjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMxMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwICovOyB9OworCQkwRkVDODUwQzFCREFD
REFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21t
dXRhdGl2aXR5LmggKi87IH07CisJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
MzJWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovOyB9Owor
CQkwRkVDODUwRTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oICovOyB9OworCQkwRkVDODUwRjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVl
LmNwcCAqLzsgfTsKKwkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
NjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNzFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3Vi
bGVWYWx1ZS5oICovOyB9OworCQkwRkVDODUxMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9s
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuY3BwICovOyB9OworCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lD
bGFzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLzsgfTsKKwkJMEZF
Qzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRDFCREFDREFDMDA4MEZG
NzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MTgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzR2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICov
OyB9OworCQkwRkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0YxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLzsgfTsKKwkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJp
Y0ZyZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxQjFCREFDREFDMDA4MEZGNzQgLyog
QjNJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLzsgfTsKKwkJMEZF
Qzg1MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0luZGV4U2V0LmggKi87IH07CisJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi87IH07CisJCTBG
RUM4NTFFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0xvd2VyVG9BaXIuaCAqLzsgfTsKKwkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
TWVtb3J5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUyMDFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MjExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi87IH07
CisJCTBGRUM4NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzT3Bjb2RlLmggKi87IH07CisJCTBGRUM4NTIzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09y
aWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovOyB9OworCQkwRkVDODUy
NDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdp
bi5oICovOyB9OworCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi87IH07
CisJCTBGRUM4NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQzFCREFD
REFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovOyB9OworCQkwRkVDODUyNzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFs
dWUuaCAqLzsgfTsKKwkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRE
RjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhh
c2VTY29wZS5oICovOyB9OworCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLzsgfTsKKwkJMEZFQzg1
MkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmUuaCAqLzsgfTsKKwkJMEZFQzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2Vk
dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovOyB9
OworCQkwRkVDODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNDFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi87IH07CisJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrbWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovOyB9Owor
CQkwRkVDODUzMDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja21hcFNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovOyB9OworCQkwRkVDODUzNDFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja1Nsb3RWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICov
OyB9OworCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
QzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CisJCTBG
RUM4NTM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5jcHAgKi87IH07CisJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsK
KwkJMEZFQzg1MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzQTFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUu
aCAqLzsgfTsKKwkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMTFCREFDREFD
MDA4MEZGNzQgLyogQjNUeXBlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovOyB9OworCQkwRkVDODUz
RDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi87IH07CisJCTBGRUM4NTQwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi87
IH07CisJCTBGRUM4NTQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07
CisJCTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTQ1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVl
UmVwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmggKi87IH07CisJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0
ZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLzsgfTsK
KwkJMEZFQzg1NkUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ5MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi87IH07CisJCTBGRUM4NTZGMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi87IH07
CisJCTBGRUM4NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuaCAqLzsgfTsKKwkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2lj
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovOyB9OworCQkw
RkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckJhc2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNw
cCAqLzsgfTsKKwkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovOyB9OworCQkwRkVDODU3NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5j
cHAgKi87IH07CisJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovOyB9OworCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQg
LyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJs
b2NrLmggKi87IH07CisJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1
MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovOyB9OworCQkwRkVDODU3OTFC
REFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0ZS5oICovOyB9OworCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlv
bkNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovOyB9
OworCQkwRkVDODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1N0MxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NzFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLzsgfTsKKwkJMEZFQzg1N0QxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
ZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpcklu
c2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovOyB9Owor
CQkwRkVDODU3RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QTFCREFDREM3MDA4MEZGNzQg
LyogQWlySW5zdC5jcHAgKi87IH07CisJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovOyB9OworCQkwRkVDODU4MTFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oICovOyB9OworCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5l
c3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovOyB9OworCQkwRkVDODU4MzFC
REFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWly
UGhhc2VTY29wZS5jcHAgKi87IH07CisJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQ
aGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovOyB9OworCQkw
RkVDODU4NTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MDFCREFDREM3
MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi87IH07CisJCTBGRUM4NTg2MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyUmVnaXN0ZXJQcmlvcml0eS5oICovOyB9OworCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi87IH07
CisJCTBGRUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3BlY2lhbC5oICovOyB9OworCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwICovOyB9OworCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVy
eXRoaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi87IH07CisJ
CTBGRUM4NThCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgKi87IH07CisJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLzsg
fTsKKwkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2ODFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wLmNwcCAqLzsgfTsKKwkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clRtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovOyB9OworCQkwRkVDODU4RjFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElu
bGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTkx
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZh
bGlkYXRlLmggKi87IH07CisJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0
ZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1OTIxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi87IH07CisJCTBGRUM4
NUEzMUJEQjVDRjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2
REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QTQxQkRCNUNGMTAw
ODBGRjc0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBK
YXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGRUM4NUFGMUJEQjVENUUwMDgwRkY3
NCAvKiB0ZXN0YjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi87IH07CisJCTBG
RUM4NUIzMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3
NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0
YW50SG9pc3RpbmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMgLyog
U2V0dXBWYXJhcmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODM5
LDYgKzE5NTYsMTMgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZDRUZBQjUxODA1RDYx
NjAwNDcyQ0U0OwogCQkJcmVtb3RlSW5mbyA9IGxsdm1Gb3JKU0M7CiAJCX07CisJCTBGRUM4NUIw
MUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2Eg
PSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZF
ODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOwor
CQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQ7CisJCQly
ZW1vdGVJbmZvID0gdGVzdGIzOworCQl9OwogCQkwRkY5MjJEMjE0RjQ2QjJGMDA0MUEyNEUgLyog
UEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVBy
b3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFBy
b2plY3Qgb2JqZWN0ICovOwpAQCAtMjU4MCw2ICsyNzA0LDEyMSBAQAogCQkwRkVBMEEyRjE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdKSVRDb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMzAxNzBENDBCRjAwQkI3MjJDIC8qIERG
R0pJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklUQ29kZS5o
OyBwYXRoID0gZGZnL0RGR0pJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1l
bnRSZWdWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QXJndW1lbnRSZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQmFzaWNC
bG9jay5jcHA7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9jay5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGIzL0IzQmFzaWNC
bG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja1V0aWxzLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2tV
dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQTFCREFDREFDMDA4
MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQmxvY2tXb3JrbGlzdC5oOyBwYXRoID0gYjMvQjNCbG9ja1dvcmtsaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0No
ZWNrU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3Bl
Y2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NoZWNrU3BlY2lhbC5o
OyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMv
QjNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb21tb24u
Y3BwOyBwYXRoID0gYjMvQjNDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tb24uaDsgcGF0aCA9IGIzL0IzQ29tbW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b21tdXRhdGl2aXR5LmNwcDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11
dGF0aXZpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tdXRhdGl2
aXR5Lmg7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmg7IHBhdGggPSBiMy9CM0Nv
bnN0MzJWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNTFCREFD
REFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNDb25zdDY0VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDY0VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNDb25zdDY0VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3Q2NFZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
RG91YmxlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0RG91YmxlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
dHJvbFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29u
dHJvbFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29udHJvbFZhbHVlLmg7
IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgcGF0
aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmg7IHBhdGggPSBiMy9C
M0ZyZXF1ZW5jeUNsYXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvQjNGcmVxdWVu
dGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0UxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmF0ZS5oOyBw
YXRoID0gYjMvQjNHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBw
YXRoID0gYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW5kZXhNYXAuaDsgcGF0aCA9IGIzL0IzSW5k
ZXhNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNJbmRleFNldC5oOyBwYXRoID0gYjMvQjNJbmRleFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5jcHA7IHBh
dGggPSBiMy9CM0xvd2VyVG9BaXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5oOyBwYXRoID0gYjMvQjNMb3dlclRvQWly
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzTWVtb3J5VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01l
bW9yeVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTWVtb3J5VmFs
dWUuaDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3Bjb2RlLmNwcDsgcGF0aCA9IGIzL0IzT3Bj
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDgxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
T3Bjb2RlLmg7IHBhdGggPSBiMy9CM09wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW4uY3BwOyBwYXRoID0gYjMvQjNPcmln
aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQTFCREFDREFDMDA4
MEZGNzQgLyogQjNPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNP
cmlnaW4uaDsgcGF0aCA9IGIzL0IzT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVj
aWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNp
YWwuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZh
bHVlLmNwcDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZhbHVl
Lmg7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhhc2VTY29wZS5jcHA7IHBhdGgg
PSBiMy9CM1BoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1Byb2NlZHVyZS5jcHA7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZS5oOyBwYXRoID0g
YjMvQjNQcm9jZWR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZUlubGluZXMuaDsgcGF0aCA9IGIzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNDFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1N0YWNrbWFwLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja21hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwLmg7
IHBhdGggPSBiMy9CM1N0YWNrbWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5oOyBwYXRoID0gYjMv
QjNTdGFja21hcFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuY3BwOyBwYXRoID0gYjMvQjNT
dGFja1Nsb3RLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90S2lu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1N0YWNrU2xvdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1N0YWNrU2xvdFZhbHVlLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmg7IHBhdGggPSBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1N3aXRjaENhc2UuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2Fz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N3aXRjaENhc2UuaDsgcGF0
aCA9IGIzL0IzU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3dp
dGNoVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMDFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmg7IHBhdGggPSBiMy9CM1N3aXRjaFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNUeXBlLmNwcDsg
cGF0aCA9IGIzL0IzVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNUeXBlLmg7IHBhdGggPSBiMy9CM1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmg7IHBhdGggPSBiMy9C
M1Vwc2lsb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNTFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNVc2VDb3VudHMuY3BwOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVc2VD
b3VudHMuaDsgcGF0aCA9IGIzL0IzVXNlQ291bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMv
QjNWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFsaWRhdGUuaDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNWYWx1ZS5oOyBwYXRoID0gYjMvQjNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUlubGluZXMuaDsgcGF0aCA9
IGIzL0IzVmFsdWVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVSZXAuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlUmVwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFs
dWVSZXAuaDsgcGF0aCA9IGIzL0IzVmFsdWVSZXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFjay5jcHA7
IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlU3RhY2suaDsgcGF0
aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQXJnLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFyZy5o
OyBwYXRoID0gYjMvYWlyL0FpckFyZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQmFzaWNCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEUxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyQ0NhbGxTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNvZGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
R2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRlLmg7IHBhdGgg
PSBiMy9haXIvQWlyR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRpb25Db250ZXh0Lmg7IHBhdGggPSBi
My9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NTYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVz
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
SW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc2Vy
dGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnN0LmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJJbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NUIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlySW5zdC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3RJbmxpbmVzLmg7
IHBhdGggPSBiMy9haXIvQWlySW5zdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxpdmVuZXNzLmg7IHBhdGggPSBiMy9haXIvQWly
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyUGhhc2VTY29wZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpclBoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
clJlZ2lzdGVyUHJpb3JpdHkuY3BwOyBwYXRoID0gYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MTFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJSZWdpc3RlclByaW9yaXR5Lmg7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
ZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BlY2lhbC5oOyBw
YXRoID0gYjMvYWlyL0FpclNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBw
YXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BpbGxFdmVyeXRoaW5nLmg7
IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3RhY2tTbG90LmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclN0YWNrU2xvdC5oOyBwYXRoID0gYjMvYWlyL0FpclN0
YWNrU2xvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2ODFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpclRtcC5jcHA7IHBhdGggPSBiMy9haXIvQWlyVG1wLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJU
bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyVG1wSW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpclRtcElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclZhbGlkYXRl
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJWYWxpZGF0ZS5oOyBwYXRoID0gYjMvYWly
L0FpclZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTkyMUJE
QjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyR2VuZXJhdGVkLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0
ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODVBRDFCREI1Q0YxMDA4
MEZGNzQgLyogdGVzdGIzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSB0ZXN0YjM7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBG
RUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gdGVzdGIzLmNwcDsgcGF0aCA9IGIzL3Rlc3RiMy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0Nv
bnN0UHRyVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdFB0
clZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0UHRyVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I4MUIyNjI1NkQwMDY2
Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUU5
ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZhcmFyZ3NGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzgwMSw2ICs0MDQwLDE1IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCTBGRUM4NUEyMUJEQjVDRjEwMDgw
RkY3NCAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJ
MEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8sCisJCQkJMEZFQzg1QTQxQkRCNUNGMTAwODBGRjc0IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNjE0RjQ2QjEzMDA0MUEyNEUg
LyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTM4NzAsNiArNDExOCw3IEBACiAJ
CQkJMTQxMjExMjAwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5QkYw
QTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCiAJCQkJNjUxMTIzMDUxNDA0NkE0QzAwMkIx
MDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRl
c3RiMyAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzg5MCw2ICs0MTM5LDcgQEAKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBGRjE2
NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRDQUQ0
MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBhc3Nl
bWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovLAogCQkJCUE1
NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBiaW5kaW5ncyAqLywKIAkJCQlBN0Q4MDE5RjE4ODBE
NjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgx
IC8qIGJ5dGVjb2RlICovLApAQCAtNDEwMyw2ICs0MzUzLDEzNSBAQAogCQkJbmFtZSA9IGZ0bDsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRUM4NEIyMUJEQUNENUUwMDgw
RkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKKwkJCQkwRkVDODRCNDFCREFD
REFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRCNTFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0QjYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJMEZFQzg0QjcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NEI4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0QjkxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8sCisJCQkJMEZFQzg0QkExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGRUM4NEJCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0QkMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0QkQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9u
LmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5j
cHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5o
ICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAg
Ki8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8s
CisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLywK
KwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLywKKwkJ
CQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLywK
KwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi8s
CisJCQkJMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oICovLAor
CQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8sCisJ
CQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggKi8sCisJCQkJ
MEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICovLAorCQkJ
CTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggKi8sCisJCQkJ
MEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJ
MEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4
NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggKi8sCisJCQkJMEZFQzg0RDAxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4
NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8sCisJCQkJMEZFQzg0RDIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLywKKwkJCQkwRkVDODREMzFCREFDREFDMDA4
MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLywKKwkJCQkwRkVDODRENDFCREFDREFDMDA4MEZG
NzQgLyogQjNMb3dlclRvQWlyLmggKi8sCisJCQkJMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTWVtb3J5VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M01lbW9yeVZhbHVlLmggKi8sCisJCQkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bj
b2RlLmNwcCAqLywKKwkJCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAq
LywKKwkJCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovLAorCQkJ
CTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovLAorCQkJCTBGRUM4NERC
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVD
ODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAorCQkJCTBG
RUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJ
MEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8sCisJCQkJMEZF
Qzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NEUx
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgKi8sCisJCQkJMEZFQzg0RTIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8sCisJCQkJMEZFQzg0RTMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovLAorCQkJCTBGRUM4NEU0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLywKKwkJCQkwRkVDODRFNTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcC5oICovLAorCQkJCTBGRUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5jcHAgKi8sCisJCQkJMEZFQzg0RTkxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5oICovLAorCQkJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja1Nsb3RWYWx1ZS5oICovLAorCQkJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLywKKwkJCQkwRkVDODRFRDFCREFDREFDMDA4MEZGNzQg
LyogQjNTd2l0Y2hDYXNlLmNwcCAqLywKKwkJCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hDYXNlLmggKi8sCisJCQkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRj
aFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAg
Ki8sCisJCQkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovLAorCQkJCTBG
RUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgKi8sCisJCQkJMEZF
Qzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8sCisJCQkJMEZFQzg0
RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLywKKwkJCQkwRkVDODRGNjFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLywKKwkJCQkwRkVDODRGNzFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuaCAqLywKKwkJCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUu
aCAqLywKKwkJCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAq
LywKKwkJCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8sCisJ
CQkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLywKKwkJCQkwRkVD
ODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0g
YjM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkwRkVDODRCMzFCREFDRDg4
MDA4MEZGNzQgLyogYWlyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAg
Ki8sCisJCQkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAq
LywKKwkJCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLywKKwkJCQkw
RkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggKi8sCisJCQkJMEZFQzg1NEMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NTREMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEZFQzg1NEUxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg1NEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTUwMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKKwkJCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ29kZS5oICovLAorCQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVu
dGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGUuY3BwICovLAorCQkJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5o
ICovLAorCQkJCTBGRUM4NTkyMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICov
LAorCQkJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5o
ICovLAorCQkJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAgKi8sCisJCQkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxl
ZVNhdmVzLmggKi8sCisJCQkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlv
blNldC5jcHAgKi8sCisJCQkJMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlv
blNldC5oICovLAorCQkJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAq
LywKKwkJCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovLAorCQkJCTBG
RUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oICovLAorCQkJCTBGRUM4
NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRUM4NTVFMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLywKKwkJCQkwRkVDODU1RjFCREFD
REM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NTYwMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLywKKwkJCQkwRkVDODU2MTFCREFD
REM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovLAorCQkJCTBGRUM4NTYyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODU2MzFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICovLAorCQkJCTBGRUM4NTY1MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLywKKwkJCQkwRkVDODU2NjFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLywKKwkJCQkwRkVDODU2NzFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3RhY2tTbG90LmggKi8sCisJCQkJMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclRtcC5jcHAgKi8sCisJCQkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5o
ICovLAorCQkJCTBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8s
CisJCQkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLywKKwkJ
CQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLywKKwkJCSk7CisJ
CQluYW1lID0gYWlyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMEZGNDI3
MkUxNThFQkNDRTAwNENCOUZGIC8qIGRpc2Fzc2VtYmxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC02MDg5LDYgKzY0NjgsNyBAQAogCQkJCTBGMUZFNTFD
MTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3Bl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNDhEMTkxMTc3MjM2
NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
MTE3LDggKzY0OTcsMTAgQEAKIAkJCQlBNUVBNzBFODE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3
OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRp
bWl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRF
NzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3MjFB
Nzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RDgwMUE1MTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuaCBp
biBIZWFkZXJzICovLApAQCAtNjEzMyw2ICs2NTE1LDcgQEAKIAkJCQk5OURBMDBBNDFCRDU5OTMx
MDBGNDU3NUMgLyogYnVpbHRpbnNfbW9kZWwucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBB
NTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJNDFERUExMzIxQjlGMzE2MzAwNkQ2NUREIC8qIEJ1aWx0aW5VdGlscy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5RTcyOTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVuZGxlUGF0
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRl
cmZseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1
dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0Myw2ICs2NTI2LDcgQEAKIAkJ
CQkwRjJERDgwQjFBQjNEODU4MDBCQkI4RTggLyogQnl0ZWNvZGVLaWxscy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4g
SGVhZGVycyAqLywKQEAgLTYxNzksNiArNjU2Myw3IEBACiAJCQkJMEYxNUYxNUYxNEI3QTczRTAw
NURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1M0EzMzIx
N0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2Vk
dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QTNBODE3OTc0MzJEMDBFODkzQzAgLyogQ29t
cGlsYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxRDFCREEwOEVG
MDAzMzFCODQgLyogSlNHbG9iYWxPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTYxODYs
OCArNjU3MSwxMCBAQAogCQkJCTBGNkZDNzUxMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyog
Q29uY3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg4MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRB
N0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
M0NFMDhBMThCQzIxQzMwMEJFREY3NiAvKiBDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUZEMDA3QTE4OUIwNTEwMDA2MzMyMzEgLyogQ29uc29sZU1lc3NhZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE5MUJEQTA2ODAwMDMzMUI4NCAvKiBCb29sZWFuUHJv
dG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwODYxOEJDMUE1NjAwQkVERjc2
IC8qIENvbnNvbGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjIwMiw2ICs2NTg5LDcg
QEAKIAkJCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3Bp
ZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzExQUQxQkMzODYyQzAw
Qzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNTJEMDE3QURE
NzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjIxMyw2
ICs2NjAxLDcgQEAKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRl
clNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8q
IERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1
QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEwRTE3
MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEz
NTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywK
QEAgLTYyMzMsNiArNjYyMiw3IEBACiAJCQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJBNTU0IC8qIERG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA0MTdBMEJB
QTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyNDMsNyArNjYzMyw5IEBACiAJCQkJMEYy
REQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3IC8qIERGR0FyaXRoTW9kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5
U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0
ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDlBMjk1MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmls
aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZH
QXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTYyNTMsNiArNjY0NSw3IEBACiAJ
CQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGQzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZFMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjE1
OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjI5Miw4ICs2Njg1LDEwIEBACiAJCQkJMEY2NkUxNkMxNERGM0YxNjAw
QjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk2MTdBMEJDNzQw
MEVFMjYxOCAvKiBERkdFZGdlRG9taW5hdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzk4NkQ1
NzE3QTBCQjFFMDBBOTVERDAgLyogREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjhGMTQzNDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3
NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JGRjNDMDE3
OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MzIzLDYgKzY3MTgsNyBAQAogCQkJCTYyRjJBQTM4MUIwQkVERTMwMDYxMEM3QSAv
KiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUy
NjE4IC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDNEIxNUUxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTg2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclBy
aW9yaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyog
REZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5QjE2
QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzMxLDYgKzY3MjcsNyBAQAogCQkJCTBGMkJEQzQ1MTUy
MjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92
SGludFJlbW92YWxQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMkNENUMxQjYxQTRGODAw
NDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzNDksNiArNjc0Niw3IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQy
IC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQw
MkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENv
bXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyog
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM5MkM4QTFC
NDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLApAQCAtNjM2
Niw2ICs2NzY0LDggQEAKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MzE5NkI4RjlFMDA5MTA1MkEg
LyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBMUJGQTFBOUVDQjdEMDAw
REUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVw
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERG
R1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjM5MCw2ICs2NzkwLDcgQEAKIAkJ
CQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0UxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5
NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkJFMEY3NzE2QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDAxLDYgKzY4MDIsNyBAQAogCQkJCTBGNjIwMTc0
MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0OTE1MjI4MDk2MDBDRDg5MTAgLyogREZH
VmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNEIxNTIyODA5
RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE4MUJEQTA2ODAwMDMzMUI4NCAvKiBB
cnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDMxLDYgKzY4
MzMsNyBAQAogCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGlu
Z0pJVFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAv
KiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAw
ODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThB
RjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICov
LApAQCAtNjQ5MSw2ICs2ODk0LDcgQEAKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyog
RlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4
NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNE
QTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdo
dGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OTgsOCArNjkwMiwxMCBAQAogCQkJCTJB
ODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTBG
QjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTRCRkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVu
Y3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAy
MDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4
Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAg
LTY1MzgsNiArNjk0NCw3IEBACiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBE
MzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUEx
QUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTA1MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0Yg
LyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTYz
LDYgKzY5NzAsNyBAQAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVy
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQw
RjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
NkRERUExOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNUZEMDA3NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTY2MTYsNiArNzAyNCw3IEBACiAJCQkJQTFCOUUyM0MxQjRFMEQ2
NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTgxOTNFMzFCNEUwQ0RCMDBGQzEwMjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENv
bGxhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQx
QjRFMENEQjAwRkMxMDI5IC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUExNTg3RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0
ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ2LDYgKzcwNTUs
NyBAQAogCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRT
dHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdE
MDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4
NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJp
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjY1Niw5ICs3MDY2LDExIEBACiAJCQkJMEYyQjY2RTUx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBG
Rjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdCREFFQ0IxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOEIxNDE4NkQxQjYyNTI3RjAwRkIyMDY4IC8qIEpTQXJyb3dGdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
c3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTgwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENE
MTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjY3NSw2
ICs3MDg3LDggQEAKIAkJCQk4NjVBMzBGMTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4ODE4QkMxQTU2MDBCRURGNzYg
LyogSlNDb25zb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxRTFCREFDREFDMDA4MEZG
NzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RjFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMx
NjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2
MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC02NjkwLDYgKzcxMDQsNyBAQAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1
REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM4NEVFODFBRERCN0FE
MDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1h
Y3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MDAsMTEgKzcxMTUsMTMgQEAKIAkJ
CQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzkxN0U3QjFCNzkwNkZBMDAwRUJEMzMgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0
MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29u
c29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0Eg
LyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MzUs
NiArNzE1Miw3IEBACiAJCQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
aWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBK
U01vZHVsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUx
MDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02NzY0LDYgKzcxODIsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAv
KiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4
MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUz
RTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1Jl
Zi5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIxLDkgKzcyNDAsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0
QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRT
bG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAv
KiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3
NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1
QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTY4MzYsMTIgKzcyNTcsMTQgQEAKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1
RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgz
MUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8q
IE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUw
NDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8qIE1hY3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fz
c2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4g
SGVhZGVycyAqLywKQEAgLTY4NjcsNiArNzI5MCw3IEBACiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAw
MEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTMzRThEMjExQjkwMTNERTAwMzQ2QjUyIC8qIE5hdGl2ZVN0ZEZ1bmN0aW9u
Q2VsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1
NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0Yw
RTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyODE4
QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJtaW5pc3RpY0lucHV0LmggaW4gSGVhZGVycyAqLywK
QEAgLTY4ODcsNiArNzMxMSw3IEBACiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9w
YXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4
QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNB
RTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0MxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVh
ZGVycyAqLywKQEAgLTY5MDAsMTMgKzczMjUsMTcgQEAKIAkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0
RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTgzNDE4
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdl
bmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBD
QjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2
RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUx
QzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0
ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyog
UHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQTFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5
MjgsMTAgKzczNTcsMTMgQEAKIAkJCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVy
dHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAg
LyogUHJvdGVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFE
IC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODQxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThG
RTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFC
QTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkz
MzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5k
ZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyog
UHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8q
IFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTUyLDYgKzczODQsNyBAQAog
CQkJCTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTU3RDIzRUUxODkxQjU1NDAwMzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNzaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyNjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5
IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBC
NDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVCQTE1RjAxODIzNDVBRjAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUu
aCBpbiBIZWFkZXJzICovLApAQCAtNjk1OSw2ICs3MzkyLDcgQEAKIAkJCQlBNUJBMTVFRDE4MjM0
MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzBCMEE5RDExQTlCNjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVU
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2Ft
cGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5ODgsNiArNzQyMiw3IEBACiAJCQkJ
QTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJj
ZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVG
Mjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywK
QEAgLTcwMDcsNiArNzQ0Miw3IEBACiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0
cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZB
REI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZE
RTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgyMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgw
RTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3
MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVy
cyAqLywKQEAgLTcwNDMsMTAgKzc0NzksMTIgQEAKIAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRC
MTkgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTEwMTE5NzVCNDY3
MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI2
QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkQ0REVDMTk4MzJEQzQwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkQ0REYwMTk4MzJERDYwMDdENEIxOSAvKiBUeXBlU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVu
dFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYg
LyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAw
NENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4
RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfaW5wdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzA4NCw4
ICs3NTIyLDEwIEBACiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2lj
QmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1
RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEwQ0RCMUZDMDAz
NjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzMzFCREFDREFD
MDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2QTkz
RTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVh
ZGVycyAqLywKQEAgLTcxMDcsOSArNzU0NywxMiBAQAogCQkJCTk5NTlFOTJFMUJEMTdGQTQwMDFB
QTQxMyAvKiB4eGQucGwgaW4gSGVhZGVycyAqLywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdB
QzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1ODExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5
bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtNzEzNCw2ICs3NTc3LDIyIEBACiAJCQlwcm9kdWN0
UmVmZXJlbmNlID0gMEZDRUZBQjYxODA1RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHls
aWIgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnku
ZHluYW1pYyI7CiAJCX07CisJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8g
PSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMEZFQzg1QTgxQkRCNUNGMTAwODBGRjc0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YjMiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJ
MEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QTIxQkRC
NUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgK
KwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHRlc3RiMzsKKwkJ
CXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRkVDODVBRDFC
REI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxl
LnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsKIAkJMEZGOTIyQzMxNEY0NkIxMzAwNDFBMjRFIC8q
IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdl
dDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50
T2Zmc2V0c0V4dHJhY3RvciIgKi87CkBAIC03Mjg5LDYgKzc3NDgsNyBAQAogCQkJCTE0QkQ1OUJF
MEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDcz
Njk3NSAvKiBqc2MgKi8sCiAJCQkJNjUxMTIyRjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdF
eHAgKi8sCisJCQkJMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1
RDZCMkE0NzE1MkI5RTE3MDA1MjMxREUgLyogVGVzdCBUb29scyAqLywKIAkJCSk7CiAJCX07CkBA
IC03NTM2LDYgKzc5OTYsMTQgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKKwkJMEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJj
ZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBRjFCREI1RDVFMDA4
MEZGNzQgLyogdGVzdGIzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNDE0RjQ2QjEzMDA0
MUEyNEUgLyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTc1OTEsNiArODA1OSw3IEBACiAJ
CQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QkQxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJC
YXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVF
NyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVF
MjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1
QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03NTk4LDggKzgwNjcsMTAgQEAKIAkJCQlBN0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyog
QXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMx
MEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJy
YXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBG
NjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcg
LyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYyMCw4ICs4MDkxLDEw
IEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2MkVDOUJCNjFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8q
IENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3
NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZs
ZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRD
QTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2
Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03NjM0LDYgKzgxMDcsNyBAQAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8q
IENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlD
MzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTkzMUJEQjFF
MTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgy
NjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY0MSw2ICs4MTE1LDcgQEAKIAkJCQlBNzA5RjJGMjE3
QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBM0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxh
dGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMz
NzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUw
MTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc2NjgsNiArODE0Myw3IEBACiAJCQkJMEZDNzEyREUxN0NEODc3OTAw
OENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFj
dEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQg
LyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzRTQwMTFCNjE4
QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Njc3LDYg
KzgxNTMsNyBAQAogCQkJCTBGNjM5NDg0MTVFNDgxMTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1Njcy
QjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0Mw
MDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY4NSw2ICs4
MTYyLDcgQEAKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERG
R0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBD
NzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNB
MjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDM2OTQxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEgLyogREZH
Q2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3MjIsNiArODIwMCw3IEBACiAJCQkJ
MkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGOTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhT
YWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc2NCwxNCArODI0MywxNyBAQAogCQkJ
CTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlB
QTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjIzNUJFRDE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBh
cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjIzNzk3MUFFNDVDQTcwMEQ0MDJFQSAv
KiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5
NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3N0ExNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5
MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJl
UG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQzE5RDBCQTdEMDBC
MUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc3ODksNiArODI3MSw4IEBACiAJCQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8q
IERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4OTNC
REIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY3OTA4NTUxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJl
Z2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4MTYsNiArODMwMCw3IEBA
CiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlFNDVBMjUxOEExQjI1OTAwMjZEODhGIC8qIEVuY29k
ZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDgg
LyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM4MTA3RUMzNzYwMDQy
N0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjU4QzE0
MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC03ODYwLDYgKzgzNDUsNyBAQAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdE
QkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50
cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODY3LDYgKzgzNTMsNyBAQAogCQkJCTBG
RUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY0ODUzMjkxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9y
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIxMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYx
QjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzg5OSw2ICs4Mzg2LDcgQEAKIAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2
MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4
QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUyNzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8q
IEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZDOTIxMTFCOTRENERGMDA3
MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJE
RUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03OTA2LDYgKzgzOTQsNyBAQAogCQkJCTlFQTVDN0EyMTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0
aWFsaXplTExWTU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwODE5MEYwMjFFMDAx
QTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcy
OTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYz
QzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1
OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc5MTcsNiArODQwNiw3IEBACiAJCQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8q
IEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0Mx
ODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MzI0Mzg3MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIx
OTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdGQSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg5MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0
b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzk3Myw2ICs4NDYz
LDcgQEAKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxi
YWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAw
MDVGMDYxIC8qIEpTQ2FsbGJhY2tGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU2RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
QUJERjYwMEE0MzdGRUYwMEVDQ0EwMSAvKiBKU0NhbGxiYWNrT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTY1N0NGNDU4MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBN0Q4MDFBODE4ODBENkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC03OTgwLDYgKzg0NzEsOCBAQAogCQkJCTE0N0YzOUQ2MTA3RUMz
NzYwMDQyN0E0OCAvKiBKU0NKU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGQ0U0
MEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
M0NFMDg3MThCQzFBNTYwMEJFREY3NiAvKiBKU0NvbnNvbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTczMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0Nv
bnRleHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyMDI4QjYxNzk3NjAxRTAwOTgwMjhD
IC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5OTAsMTYgKzg0
ODMsMTkgQEAKIAkJCQlGRTM4NEVFNzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3Rv
dHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENzEwN0VDMzc2MDA0MjdBNDggLyog
SlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VD
MjcxMDA1REJDOEQgLyogSlNGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUx
RDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9i
YWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwODUxODlCMUI3RTAwNjMzMjMx
IC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
QzNBMUE1MThDMDQ5MDIwMEM5NTkzQSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Qz
MlZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NTkyMTgyNDc0NDcwMENDMzg0MyAv
KiBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIz
RTkxODkxQjA3NzAwMzFDN0ZBIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4
ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTBFNEI2MzE4ODA5REQ1MDA2OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1l
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMjkxODhGMTA1OTAwMTEwRjE0IC8q
IEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MTNFNUJGMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDMTE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3Rl
ZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwODAxQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
ODAxOCw2ICs4NTE0LDcgQEAKIAkJCQlFMzE4Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3
QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0U4
RDFDMUI5MDEzQzMwMDM0NkI1MiAvKiBKU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTE4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyog
SlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDMxLDYgKzg1MjgsNyBAQAogCQkJ
CUUzRUY4ODc0MUI2NkRGMjMwMDNGMjZDQiAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTJDMzdGMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90
ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5MjhGRjNC
MThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC04MDU5LDYgKzg1NTcsNyBAQAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2
OSAvKiBKU1dlYWtTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAw
NjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3
QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA2Niw5ICs4NTY1LDEy
IEBACiAJCQkJMTQ4RjIxQjAxMDdFQzU0MTAwNDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBM
aXZlT2JqZWN0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBE
RjM0MzAgLyogTExJbnRDTG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJE
MTY1MDBCRkUyNzIgLyogTExJbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NEZF
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBODE0QkE3RkFCMDBCRkUyNzIgLyogTExJbnRF
eGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJGRTI3
MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwNzcsNiArODU3OSw3
IEBACiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2
ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxRjFCREFDREFDMDA4
MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEy
RDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJB
Uk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDg2LDEwICs4NTg5LDEyIEBACiAJCQkJQTdBNEFF
MDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3MDA4NzM5MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRERUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRl
cmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDcxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3
Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
QjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFy
a1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzNDBBNDg0MUE5MDUxQUYwMEQ3M0NDQSAv
KiBNYXRoQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1
MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODEyOCwxNyArODYzMywy
MSBAQAogCQkJCTBGRjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ckJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NC
MDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGNzI5QUYxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2Zp
bGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQz
NUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzAxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIz
MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmls
ZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2
RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJC
MTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNU
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQ
cm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTgxMDdFQzdF
NzAwNjUwNDQ2IC8qIFByb3BlcnR5U2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBREUzOUZG
RjE2REQxNDRCMDAwM0NENEEgLyogUHJvcGVydHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTgxNDcsMTAgKzg2NTYsMTIgQEAKIAkJCQkwRjE1Q0QyMjFCQTVGOTg2MDAzMUZGRDMgLyogUHV0
QnlJZEZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjND
NiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTMzNjM3QTUxQjYzMjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhw
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJH
ZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUg
LyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAw
NDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04MTY0LDYgKzg2NzUsNyBAQAogCQkJCUE1QkExNUU5MTgyMzQwQjMwMEE4MkU2OSAv
KiBSZW1vdGVJbnNwZWN0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1RUZE
MDBDQzM4NDMgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJs
ZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwNTFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RUUxODIz
NDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24ubW0gaW4gU291cmNl
cyAqLywKIAkJCQkwRjI0RTU1MDE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1Mjc3NzNERTFBQUY4M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MTgyLDYgKzg2OTQsNyBAQAogCQkJCUE1NENGMkY5MTg0RUFF
REEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0Q0Yy
RjUxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3Mjk5REE1MTdEMTI4NTgwMDVGNUZGOSAvKiBTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU4NTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzkwREQ2RDE4MkY0OTk3MDA1ODg4MDcgLyogU2V0
SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTlEQTExN0QxMjg0
ODAwNUY1RkY5IC8qIFNldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVFOTg0
MzFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC04MTk2LDYgKzg3MDksNyBAQAogCQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBT
cGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MxRUFGMTE3OTg3QUI2MDAy
OTlEQjIgLyogU3RhY2tWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MzBCNjEzMTI1
MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ0NjlERUIxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUMwRUM2MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJ
dGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQzEwN0VDN0U3
MDA2NTA0NDYgLyogU3RyaW5nT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODIxMiw2ICs4
NzI2LDcgQEAKIAkJCQk3MDVCNDFBRDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA1QjQxQUYxQTZFNTAxRTAwNzE2NzU3IC8qIFN5
bWJvbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3
NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNGMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkx
OUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNl
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyNDAsNiArODc1NSw3IEBACiAJCQkJMEYyNEU1NTgx
N0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzlFRTBCRkYxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2QzczNTAxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVG
aXJlRGV0YWlsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTA1MDJDMUFBOTA5
NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMEMyNTkx
QTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04
MjU5LDYgKzg3NzUsNyBAQAogCQkJCTcwOUZCODY5MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0
Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA5RkI4NkIxQUUzMzVDNjAwMzlE
MDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE0RUM5MEIx
ODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBQjNBMTc5OUU0QjIwMEQyODMzRCAv
KiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYzQzZEOUMxNTIxMTEx
QTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
ODI4NSw2ICs4ODAyLDExIEBACiAJCQl0YXJnZXQgPSAwRkNFRkFCNTE4MDVENjE2MDA0NzJDRTQg
LyogbGx2bUZvckpTQyAqLzsKIAkJCXRhcmdldFByb3h5ID0gMEZDRUZBQkMxODA1RDY2MzAwNDcy
Q0U0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKIAkJfTsKKwkJMEZFQzg1QjExQkRCNUQ4
RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJn
ZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRl
c3RiMyAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBC
WENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEZGOTIyRDMxNEY0NkIyRjAwNDFBMjRF
IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRl
bmN5OwogCQkJdGFyZ2V0ID0gMEY0NjgwQTkxNEJBN0ZEOTAwQkZFMjcyIC8qIExMSW50IE9mZnNl
dHMgKi87CkBAIC04NDA5LDYgKzg5MzEsMzggQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlv
bjsKIAkJfTsKKwkJMEZFQzg1QTkxQkRCNUNGMTAwODBGRjc0IC8qIERlYnVnICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5j
ZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAq
LzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJ
fTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8q
IFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGRUM4
NUFCMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9maWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIx
MzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9
IFByb2ZpbGluZzsKKwkJfTsKKwkJMEZFQzg1QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rp
b24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1
cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRh
YmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUg
PSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNC
MTRGNDZCMTMwMDQxQTI0RSAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMz
MDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CkBAIC04NzYxLDYgKzkzMTUs
MTcgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRD
b25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGRUM4NUE4MUJEQjVDRjEw
MDgwRkY3NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
dGVzdGIzIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENv
bmZpZ3VyYXRpb25zID0gKAorCQkJCTBGRUM4NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAq
LywKKwkJCQkwRkVDODVBQTFCREI1Q0YxMDA4MEZGNzQgLyogUmVsZWFzZSAqLywKKwkJCQkwRkVD
ODVBQjFCREI1Q0YxMDA4MEZGNzQgLyogUHJvZmlsaW5nICovLAorCQkJCTBGRUM4NUFDMUJEQjVD
RjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rp
b247CisJCX07CiAJCTBGRjkyMkNBMTRGNDZCMTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAq
LyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25zID0gKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJs
ZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOwpAQCAtNDcsNSArNDksNzAg
QEAgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbFByb2JlKHN0ZDo6ZnVuYwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kKQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbDoKKyAgICAgICAgb3V0
LnByaW50KCJOb3RFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmU6CisgICAgICAgIG91dC5wcmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbDoKKyAgICAgICAgb3V0LnBy
aW50KCJBYm92ZU9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93OgorICAgICAgICBvdXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWw6CisgICAgICAgIG91dC5w
cmludCgiQmVsb3dPckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpHcmVhdGVyVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVx
dWFsOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuT3JFcXVhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW46CisgICAgICAgIG91dC5w
cmludCgiTGVzc1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuT3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzVGhhbk9yRXF1YWwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3Nl
bWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kKQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAg
IGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93OgorICAgICAgICBvdXQucHJpbnQoIk92ZXJm
bG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQ6
CisgICAgICAgIG91dC5wcmludCgiU2lnbmVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE1hY3JvQXNzZW1ibGVyOjpQb3NpdGl2ZU9yWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJQb3Np
dGl2ZU9yWmVybyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6
WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJaZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOgorICAgICAgICBvdXQucHJpbnQoIk5vblplcm8i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJM
RVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5Niw4ICsxNTk2
LDE5IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7Cit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24p
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2Vsc2UgLy8gRU5BQkxFKEFTU0VNQkxFUikKIAor
bmFtZXNwYWNlIEpTQyB7CisKIC8vIElmIHRoZXJlIGlzIG5vIGFzc2VtYmxlciBmb3IgdGhpcyBw
bGF0Zm9ybSwgYXQgbGVhc3QgYWxsb3cgY29kZSB0byBtYWtlIHJlZmVyZW5jZXMgdG8KIC8vIHNv
bWUgb2YgdGhlIHRoaW5ncyBpdCB3b3VsZCBvdGhlcndpc2UgZGVmaW5lLCBhbGJlaXQgd2l0aG91
dCBnaXZpbmcgdGhhdCBjb2RlIGFueSB3YXkKIC8vIG9mIGRvaW5nIGFueXRoaW5nIHVzZWZ1bC4K
QEAgLTE2MTEsNiArMTYyMiw4IEBAIHB1YmxpYzoKICAgICBlbnVtIEZQUmVnaXN0ZXJJRCB7IE5v
RlBSZWdpc3RlciB9OwogfTsKIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKICNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKQogCiAjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5w
YXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIEFkZHJlc3NNYXRjaGVyCisKKyMgTm90ZSB0
aGF0IHRoaXMgcmVsaWVzIG9uIEIzIGRvaW5nIGFnZ3Jlc3NpdmUgcmVhc3NvY2lhdGlvbiBhbmQg
Y2Fub25jYWxpemF0aW9uIG9mIGludGVnZXIgYWRkcy4KKyMgV2UnbGwgbmV2ZXIgc2VlIEFkZChB
ZGQoeCwgY29uc3QxKSwgY29uc3QyKSBiZWNhdXNlIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVu
IHJlYXNzb2NpYXRlZCBpbnRvCisjIEFkZCh4LCBjb25zdDEgKyBjb25zdDIpLiBBbHNvLCB3ZSB3
aWxsIG5ldmVyIHNlZSBBZGQoY29uc3QsIHgpLCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgY2Fub25p
Y2FsaXplZAorIyBpdCB0byBBZGQoeCwgY29uc3QpLiBUaGF0IHNhaWQsIGluIHRoaXMgY29kZSB3
ZSBuZXZlciBtYWtlIGFzc2VydGlvbnMgYWJvdXQgdGhlc2Ugb3B0aW1pemF0aW9ucworIyBoYXZp
bmcgYmVlbiBwZXJmb3JtZWQuIEFsc28sIHNpbmNlIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9u
cyBpbiBCMyBoYXZlIGEgYnVpbHQtaW4gb2Zmc2V0LCB3ZQorIyBkb24ndCBuZWVkIHRvIG1hdGNo
IEFkZCh4LCBjb25zdCkuIFRoYXQgd291bGQgaGF2ZSBiZWVuIGZvbGRlZCBpbnRvIHRoZSBMb2Fk
L1N0b3JlIGluc3RydWN0aW9ucworIyBhbHJlYWR5LiBTbywgdGhlIG9ubHkgZmFuY3kgbWF0aGlu
ZyB0aGlzIGNhbiBkbyBpcyBqdXN0IEJhc2VJbmRleCBmb3Jtcy4KKworQWRkU2hpZnQxID0gQWRk
KFNobChpbmRleCwgJGxvZ1NjYWxlKSwgYmFzZSkKK0FkZFNoaWZ0MiA9IEFkZChiYXNlLCBTaGwo
aW5kZXgsICRsb2dTY2FsZSkpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworRGlyZWN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVu
dFJlZ1ZhbHVlKCkKK3sKK30KKwordm9pZCBBcmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisjZGVmaW5l
IEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQXJndW1lbnRSZWdWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KSB7IHJldHVybiBvcGNvZGUgPT0gQXJndW1lbnRSZWc7IH0KKyAgICAKKyAgICB+QXJndW1lbnRS
ZWdWYWx1ZSgpOworCisgICAgUmVnIGFyZ3VtZW50UmVnKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
QXJndW1lbnRSZWdWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykK
KyAgICAgICAgOiBWYWx1ZShpbmRleCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRl
clR5cGUoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyZWcuaXNTZXQoKSk7CisgICAgfQorCisgICAgUmVnIG1fcmVnOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NvbnN0IGNoYXIqIGNv
bnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK0Jhc2ljQmxvY2s6OkJhc2ljQmxv
Y2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2luZGV4KGluZGV4
KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNpY0Jsb2NrOjp+QmFz
aWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCitib29sIEJhc2ljQmxvY2s6OmFk
ZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6YWRkUHJl
ZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6cmVtb3ZlUHJlZGVj
ZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICByZXR1cm4gQjM6
OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9j
azo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJl
Zml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVu
Y3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhp
cykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgQjM6OmRlZXBEdW1wKHZhbHVlKSwgIlxuIik7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tfaAorI2RlZmluZSBCM0Jhc2ljQmxv
Y2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2Nr
LmgiCisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2Vk
dXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5cGVkZWYg
VmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisgICAgdHlwZWRlZiBWZWN0
b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29u
dHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
ZHVtcFByZWZpeDsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFZhbHVlTGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0OjppdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAg
VmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5l
bmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
c1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1
ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
Lmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsg
fQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
czsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKFZhbHVlKik7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUq
IGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAgdW5zaWduZWQgbnVt
U3VjY2Vzc29ycygpIGNvbnN0OworICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1
bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNv
bnN0OworICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKTsKKworICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYg
c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248
QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCk7CisgICAgU3VjY2Vz
c29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNj
ZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIHBy
ZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tp
bmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKyAgICBQ
cmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9
CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92
ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICBkb3VibGUgZnJlcXVlbmN5
KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8vIEluc3Rh
bnRpYXRlIHZpYSBQcm9jZWR1cmUuCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVlTGlzdCBt
X3ZhbHVlczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgZG91Ymxl
IG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoK
KyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAg
IDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAg
IG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5w
cmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEJhc2ljQmxvY2sq
IG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKGNvbnN0
IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxv
Y2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKyNkZWZpbmUgQjNCYXNp
Y0Jsb2NrSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBl
KiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZh
bHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitpbmxpbmUgdW5zaWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vzc29ycygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5udW1TdWNj
ZXNzb3JzKCk7Cit9CisKK2lubGluZSBjb25zdCBGcmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6
OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5h
czxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lubGluZSBGcmVxdWVu
dGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBy
ZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisK
K2lubGluZSBjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCkt
PnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJh
c2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xW
YWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jayogQmFzaWNCbG9j
azo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1
Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2sqJiBCYXNpY0Js
b2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gc3VjY2Vz
c29yKGluZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNp
Y0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JC
bG9ja3MoKQoreworICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1
Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK2lubGluZSBTdWNjZXNzb3JDb2xsZWN0
aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IEJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN1Y2Nlc3Nv
ckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4oc3VjY2Vz
c29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIz
QmFzaWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0lu
ZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayog
YmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29y
cyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChwcmVkZWNlc3NvcnMuY29udGFp
bnMocHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcmVkZWNlc3Nv
cnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayog
YmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29y
cyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0g
PT0gcHJlZGVjZXNzb3IpIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpLS1dID0gcHJlZGVj
ZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAgIHByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgICAgICBBU1NFUlQoIXByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBsYWNlUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sq
IHRvKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgeworICAgICAgICAgICAgcHJl
ZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVjb21wdXRlcyBwcmVkZWNl
c3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KK3RlbXBsYXRl
PHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAgLy8gQ2xlYXIgYWxsIHBy
ZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoYXV0byYgYmxvY2sgOiBibG9ja3MpCisg
ICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisKKyAgICBHcmFwaE5vZGVX
b3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAg
IHdvcmtsaXN0LnB1c2goYmxvY2tzWzBdLmdldCgpKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayog
YmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgaWYgKHdvcmts
aXN0LnB1c2goc3VjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnByZWRlY2Vz
c29ycygpLmFwcGVuZChibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChibG9ja3Nb
aV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJsb2Nrc1tpXSA9IG51
bGxwdHI7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIzQmxvY2tX
b3JrbGlzdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
LmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3Jr
bGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xp
c3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisv
LyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9j
ayB3aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
cmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xp
c3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhl
IGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2
ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisv
LyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAo
dGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVu
ZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+
PjsKKwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFw
aE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBv
c3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2Nr
Pj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja1dvcmtsaXN0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDaGVja1NwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJD
b2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJBaXJJ
bnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2Ug
eworCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBzd2l0Y2ggKGluc3Qu
b3JpZ2luLT5vcGNvZGUoKSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1
YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAvLyBSZXNDb25kLCBUbXAsIFRtcAorICAg
ICAgICByZXR1cm4gMzsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1cm4gMTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitDaGVja1Nw
ZWNpYWw6OkNoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3Mp
CisgICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fbnVtQ2hlY2tBcmdzKG51bUFy
Z3MpCit7CisgICAgQVNTRVJUKGlzVGVybWluYWwob3Bjb2RlKSk7Cit9CisKK0NoZWNrU3BlY2lh
bDo6fkNoZWNrU3BlY2lhbCgpCit7Cit9CisKK0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFu
Y2goY29uc3QgSW5zdCYgaW5zdCkgY29uc3QKK3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2No
ZWNrT3Bjb2RlLCBpbnN0Lm9yaWdpbik7CisgICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX251bUNoZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fbnVtQ2hlY2tBcmdzOyArK2kpCisgICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzLmFwcGVu
ZChpbnN0LmFyZ3NbaSArIDFdKTsKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lk
IENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8
SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaGlkZGVuQnJhbmNoKGlu
c3QpLmZvckVhY2hBcmcoY2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhp
bnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hl
Y2tTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5j
aChpbnN0KS5pc1ZhbGlkRm9ybSgpCisgICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJncyhp
bnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0KTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6
OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChh
cmdJbmRleCA+PSAxICYmIGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hlY2tBcmdzKQorICAgICAgICBy
ZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmFkbWl0c1N0YWNrKGFyZ0luZGV4IC0gMSk7CisgICAg
cmV0dXJuIGFkbWl0c1N0YWNrSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsg
MSwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFs
OjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRl
eHQmIGNvbnRleHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWwgPSBoaWRkZW5CcmFu
Y2goaW5zdCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICBBU1NFUlQoZmFpbC5pc1NldCgp
KTsKKworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgVmVjdG9yPFZhbHVl
UmVwPiByZXBzOworICAgIGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7CisgICAg
ICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisgICAgICAgICAgICByZXBzLmFw
cGVuZChWYWx1ZVJlcCgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPm9wY29kZSgpID09IENo
ZWNrU3ViICYmIHZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpCisgICAgICAgICAgICByZXBzLmFw
cGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzNdKSk7CisgICAg
ICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENoZWNrKTsK
KyAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEpKTsKKyAgICB9CisKKyAg
ICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIHJlcHMp
OworICAgIAorICAgIGNvbnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgY3JlYXRlU2hh
cmVkVGFzazxHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCisgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpIHsKKyAgICAgICAg
ICAgICAgICBmYWlsLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgICAgICAgICAgICAgIFN0YWNrbWFwOjpHZW5lcmF0
aW9uUGFyYW1zIHBhcmFtczsKKyAgICAgICAgICAgICAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICAgICAgICAg
ICAgICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnVzZWRSZWdp
c3RlcnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgICAgICAgICAgICAgc3Rh
Y2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworICAgICAgICAgICAgfSkpOwor
CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOyAvLyBBcyBmYXIgYXMgQWlyIHRoaW5r
cywgd2UgYXJlIG5vdCBhIHRlcm1pbmFsLgorfQorCit2b2lkIENoZWNrU3BlY2lhbDo6ZHVtcElt
cGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jaGVja09wY29k
ZSwgIigiLCBtX251bUNoZWNrQXJncywgIikiKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmRl
ZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQjM6
OkNoZWNrVmFsdWUgbG93ZXJlZCB0byAiLCBtX2NoZWNrT3Bjb2RlLCAiIHdpdGggIiwgbV9udW1D
aGVja0FyZ3MsICIgYXJncy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1Nw
ZWNpYWxfaAorI2RlZmluZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHdhbnQgdG8gbG93ZXIg
Q2hlY2sgaW5zdHJ1Y3Rpb25zIHRvIGEgYnJhbmNoLCBidXQgdGhlbiB3ZSB3YW50IHRvIHJvdXRl
IHRoYXQgYnJhbmNoIHRvIG91cgorLy8gb3V0LW9mLWxpbmUgY29kZSBpbnN0ZWFkIG9mIGRvaW5n
IGFueXRoaW5nIGVsc2UuIEZvciB0aGlzIHJlYXNvbiwgYSBDaGVja1NwZWNpYWwgd2lsbCByZW1l
bWJlcgorLy8gd2hpY2ggYnJhbmNoIG9wY29kZSB3ZSBoYXZlIHNlbGVjdGVkIGFsb25nIHdpdGgg
dGhlIG51bWJlciBvZiBhcmdzIGluIHRoZSBvdmVybG9hZCB3ZSB3YW50LiBJdAorLy8gd2lsbCBj
cmVhdGUgYW4gSW5zdCB3aXRoIHRoYXQgb3Bjb2RlIHBsdXMgdGhlIGFwcHJvcHJpYXRlIGFyZ3Mg
ZnJvbSB0aGUgb3duaW5nIEluc3Qgd2hlbmV2ZXIgeW91CisvLyBjYWxsIGFueSBvZiB0aGUgY2Fs
bGJhY2tzLgorLy8KKy8vIE5vdGUgdGhhdCBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hl
Y2tNdWwgd2UgZXhwZWN0IHRoYXQgdGhlIEIzIGFyZ3VtZW50cyBhcmUgdGhlIHJldmVyc2UKKy8v
IG9mIHRoZSBBaXIgYXJndW1lbnRzIChBZGQoYSwgYikgPT4gQWRkMzIgYiwgYSkuIEV4Y2VwdDoK
Ky8vIC0gQ2hlY2tTdWIoMCwgeCksIHdoaWNoIHR1cm5zIGludG8gQnJhbmNoTmVnMzIgeC4KKy8v
IC0gQ2hlY2tNdWwoYSwgYiksIHdoaWNoIHR1cm5zIGludG8gTXVsMzIgYiwgYSBidXQgd2UgcGFz
cyBBbnkgZm9yIGEncyBWYWx1ZVJlcC4KKworY2xhc3MgQ2hlY2tTcGVjaWFsIDogcHVibGljIFN0
YWNrbWFwU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1
bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICAvLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJh
bmNoIHRoYXQgdGhpcyB3aWxsIHVzZS4KKyAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNvbnN0
IEFpcjo6SW5zdCYpIGNvbnN0OworCisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNv
bnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsK
KyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNT
dGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisKKyAgICAvLyBO
T1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhpZGRlbiBicmFuY2gg
YW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2VuZXJhdGVzIHRoZSBz
dGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5l
cmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRpb25Db250ZXh0Jikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVk
IG1fbnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1NwZWNpYWxfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0NoZWNrVmFsdWU6On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9pZCBDaGVja1ZhbHVlOjpk
dW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgic3RhY2tt
YXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tWYWx1ZV9oCisj
ZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUgOiBwdWJs
aWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29k
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tB
ZGQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAg
ICAgIGNhc2UgQ2hlY2s6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5D
aGVja1ZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
Q2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVl
KiByaWdodCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9y
aWdpbiwgbGVmdCwgcmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7
CisgICAgICAgIEFTU0VSVChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAg
IEFTU0VSVChvcGNvZGUgPT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29k
ZSA9PSBDaGVja011bCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2su
CisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIHByZWRpY2F0ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBW
b2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0g
Q2hlY2spOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisj
aW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Ym9vbCBzaG91bGREdW1wSVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlv
bkVuYWJsZWQoKSB8fCBGVEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJ
UkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQorewor
ICAgIHJldHVybiBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNo
b3VsZFZhbGlkYXRlSVIoKQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkg
fHwgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRh
dGVJUkF0RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0
RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAg
IHJldHVybiBPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M0NvbW1vbl9oCisjZGVmaW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitpbmxpbmUgYm9vbCBpczY0Qml0KCkgeyBy
ZXR1cm4gc2l6ZW9mKHZvaWQqKSA9PSA4OyB9CitpbmxpbmUgYm9vbCBpczMyQml0KCkgeyByZXR1
cm4gIWlzNjRCaXQoKTsgfQorCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1w
SVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZh
bGlkYXRlSVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM0NvbW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW11dGF0aXZpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbW11dGF0aXZpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2gg
KGNvbW11dGF0aXZpdHkpIHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJp
bnQoIkNvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0
aXZlOgorICAgICAgICBvdXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNDb21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitlbnVtIENvbW11dGF0aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0
aXZlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisK
K2NsYXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpCMzo6Q29tbXV0YXRpdml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFs
dWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitDb25zdDMyVmFsdWU6On5Db25zdDMyVmFsdWUoKQoreworfQorCit2b2lkIENvbnN0
MzJWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Qz
MlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3QzMlZhbHVlX2gK
KyNkZWZpbmUgQjNDb25zdDMyVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IEpTX0VYUE9SVF9QUklWQVRFIENvbnN0MzJWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUg
PT0gQ29uc3QzMjsgfQorICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db25zdDMyVmFsdWUo
KTsKKyAgICAKKyAgICBpbnQzMl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2
YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3QzMiwgSW50MzIsIG9yaWdpbikKKyAg
ICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50
MzJfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25zdDMyVmFsdWVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZh
bHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25z
dDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0
VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0NjRWYWx1ZV9o
CisjZGVmaW5lIEIzQ29uc3Q2NFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IENvbnN0NjQ7IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50
NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0VmFsdWUodW5zaWduZWQgaW5kZXgsIE9y
aWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0
NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0NvbnN0NjRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
RG91YmxlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3RE
b3VibGVWYWx1ZTo6fkNvbnN0RG91YmxlVmFsdWUoKQoreworfQorCit2b2lkIENvbnN0RG91Ymxl
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
ZigiJWxlIiwgbV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQ29uc3REb3VibGVWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3REb3VibGVWYWx1ZSA6IHB1YmxpYyBWYWx1
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJl
dHVybiBvcGNvZGUgPT0gQ29uc3REb3VibGU7IH0KKyAgICAKKyAgICB+Q29uc3REb3VibGVWYWx1
ZSgpOworICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0K
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29u
c3REb3VibGVWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVl
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdERvdWJsZSwgRG91YmxlLCBvcmlnaW4pCisg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBt
X3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNDb25zdFB0clZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdFB0clZh
bHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5o
IgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCisvLyBVc3VhbGx5IHlvdSB3YW50IHRvIHVzZSBDb25zdDMyVmFsdWUgb3IgQ29u
c3Q2NFZhbHVlIGRpcmVjdGx5LiBCdXQgdGhpcyBpcyB1c2VmdWwgZm9yIHdyaXRpbmcKKy8vIHBs
YXRmb3JtLWFnbm9zdGljIGNvZGUuIE5vdGUgdGhhdCBhIENvbnN0UHRyVmFsdWUgd2lsbCBiZWhh
dmUgbGlrZSBlaXRoZXIgYSBDb25zdDMyVmFsdWUgb3IKKy8vIENvbnN0NjRWYWx1ZSBkZXBlbmRp
bmcgb24gcGxhdGZvcm0uCisKKyNpZiBVU0UoSlNWQUxVRTY0KQordHlwZWRlZiBDb25zdDY0VmFs
dWUgQ29uc3RQdHJWYWx1ZUJhc2U7CisjZWxzZQordHlwZWRlZiBDb25zdDMyVmFsdWUgQ29uc3RQ
dHJWYWx1ZUJhc2U7CisjZW5kaWYKKworY2xhc3MgQ29uc3RQdHJWYWx1ZSA6IHB1YmxpYyBDb25z
dFB0clZhbHVlQmFzZSB7CitwdWJsaWM6CisgICAgdm9pZCogdmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oQ29uc3RQdHJWYWx1ZUJhc2U6OnZh
bHVlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwor
CisgICAgQ29uc3RQdHJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgdm9pZCog
cG9pbnRlcikKKyAgICAgICAgOiBDb25zdFB0clZhbHVlQmFzZShpbmRleCwgb3JpZ2luLCBiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0NvbnN0UHRyVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b250cm9sVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnRyb2xWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb250cm9sVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250
cm9sVmFsdWUoKQoreworfQorCit2b2lkIENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobGlzdER1bXAobV9zdWNjZXNzb3JzKSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIz
Q29udHJvbFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1
ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2Fz
ZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVz
ZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAor
ICAgICAgICAgICAgLy8gc3dpdGNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4g
bm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVkZWYg
VmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIEpTX0VYUE9S
VF9QUklWQVRFIH5Db250cm9sVmFsdWUoKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMo
KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgY29uc3QgRnJlcXVl
bnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vj
Y2Vzc29yc1tpbmRleF07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25l
ZCBpbmRleCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nl
c3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAg
ICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisK
K3Byb3RlY3RlZDoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNZXRhKFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQ29udHJvbFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFy
Z3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlw
ZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCisgICAgeworICAgIH0KKworICAgIC8vIFN1YmNsYXNz
ZXMgd2lsbCBwb3B1bGF0ZSB0aGlzLgorICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhp
cyBmb3IgT29wcy4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBPb3BzKTsKKyAgICB9CisK
KyAgICAvLyBVc2UgdGhpcyBmb3IgUmV0dXJuLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHJlc3VsdCkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHJlc3VsdCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvcGNvZGUgPT0gUmV0dXJuKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhp
cyBmb3IgSnVtcC4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFT
U0VSVChvcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQodGFyZ2V0
KTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRyb2xWYWx1
ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgeWVzLCBj
b25zdCBGcmVxdWVudGVkQmxvY2smIG5vKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9
PSBCcmFuY2gpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHllcyk7CisgICAgICAgIG1f
c3VjY2Vzc29ycy5hcHBlbmQobm8pOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29udHJvbFZh
bHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNs
YXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1
ZW5jeUNsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBu
YW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSkKK3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgewor
ICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3Jt
YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6Cisg
ICAgICAgIG91dC5wcmludCgiUmFyZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRnJlcXVlbmN5Q2xhc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNGcmVxdWVuY3lDbGFzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNGcmVxdWVuY3lDbGFzc19oCisjZGVmaW5lIEIzRnJlcXVlbmN5Q2xhc3NfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xh
c3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBo
eXBvdGhlc2lzIGFib3V0IHRoZSBmcmVxdWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3Ry
dWN0LiBUaGlzIGlzCisgICAgLy8gdGhlIGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJh
c2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8g
V2UgZXhwZWN0IHRoYXQgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hl
ZCBzdXBlciByYXJlbHkuIEl0J3MgdmFsaWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlv
bnMgdGhhdCBwdW5pc2ggUmFyZSBjb2RlLiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRp
b25zIHdoZXJlIHlvdQorICAgIC8vIGhhdmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJl
cXVlbmN5IGNsYXNzIGZyb20gYSBtZXJnaW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAg
ICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVyIGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3Jt
YWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNo
IFJhcmUgY29kZSB2ZXJ5IGJhZGx5LgorICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNGcmVxdWVuY3lDbGFzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwor
dHlwZWRlZiBHZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9j
azsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNs
dWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAi
QjNMb3dlclRvQWlyLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1Zh
bGlkYXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIGdlbmVy
YXRlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBBaXI6
OkNvZGUgY29kZTsKKyAgICBnZW5lcmF0ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgQWly
OjpnZW5lcmF0ZShjb2RlLCBqaXQpOworfQorCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEFpcjo6Q29kZSYgY29kZSkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJ
UigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUpOworCisgICAgLy8gSWYgd2UncmUgZG9p
bmcgc3VwZXIgdmVyYm9zZSBkdW1waW5nLCB0aGUgcGhhc2Ugc2NvcGUgb2YgYW55IHBoYXNlIHdp
bGwgYWxyZWFkeSBkbyBhIGR1bXAuCisgICAgaWYgKHNob3VsZER1bXBJUigpICYmICFzaG91bGRE
dW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgQjM6XG4iKTsK
KyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBBZGQg
bW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDUwNworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAg
ICAgICAgdmFsaWRhdGUocHJvY2VkdXJlKTsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBkb2luZyBz
dXBlciB2ZXJib3NlIGR1bXBpbmcsIHRoZSBwaGFzZSBzY29wZSBvZiBhbnkgcGhhc2Ugd2lsbCBh
bHJlYWR5IGRvIGEgZHVtcC4KKyAgICAvLyBOb3RlIHRoYXQgbG93ZXJUb0FpcigpIGFjdHMgbGlr
ZSBhIHBoYXNlIGluIHRoaXMgcmVnYXJkLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hv
dWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBhZnRlciAiLCBw
cm9jZWR1cmUubGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAg
ICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorCisgICAgbG93ZXJUb0Fpcihwcm9jZWR1
cmUsIGNvZGUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJhdGVfaAorI2RlZmluZSBCM0dlbmVy
YXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBD
Q2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVz
cGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJl
LCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGFuZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBjb2Rl
IGJ5IGZpcnN0CisvLyBpbnRlcm5hbGx5IGNvbnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFuZCB0
aGVuIGdlbmVyYXRpbmcgdGhhdC4KK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJv
Y2VkdXJlJiwgQ0NhbGxIZWxwZXJzJik7CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJl
LCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRo
ZW4gZ2VuZXJhdGUKKy8vIHRoZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6Z2VuZXJh
dGUoKS4gTm90ZSB0aGF0IGFuIEFpcjo6Q29kZSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0aGUK
Ky8vIEIzOjpQcm9jZWR1cmUsIHNvIHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCMzo6UHJv
Y2VkdXJlIG91dGxpdmVzIHRoZSBBaXI6OkNvZGUuCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2Vk
dXJlJiwgQWlyOjpDb2RlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzR2VuZXJhdGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1
ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2tfaAorI2RlZmluZSBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
Ky8vIEEgZnJlcXVlbnRlZCBibG9jayBpcyBhIHR1cGxlIG9mIEJhc2ljQmxvY2sqIGFuZCBGcmVx
dWVuY3lDbGFzcy4gSXQncyB1c3VhbGx5IHVzZWQgYXMgYQorLy8gc3VjY2Vzc29yIGVkZ2UuCisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CitjbGFzcyBHZW5lcmljRnJlcXVlbnRlZEJs
b2NrIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKAorICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG51bGxwdHIsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5j
eSA9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAg
ICAgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAg
ICYmIG1fZnJlcXVlbmN5ID09IG90aGVyLm1fZnJlcXVlbmN5OworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAh
PSBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKCk7CisgICAgfQorCisgICAgQmFzaWNCbG9jayogYmxv
Y2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgQmFzaWNCbG9jayomIGJsb2NrKCkg
eyByZXR1cm4gbV9ibG9jazsgfQorICAgIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lDbGFz
czo6Tm9ybWFsKQorICAgICAgICAgICAgb3V0LnByaW50KGZyZXF1ZW5jeSgpLCAiOiIpOworICAg
ICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAobV9ibG9jaykpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIEZyZXF1ZW5jeUNsYXNzIG1fZnJlcXVlbmN5
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNJbmRleE1hcF9oCisjZGVmaW5lIEIzSW5kZXhNYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBtYXAgZm9yIGtleXMgdGhhdCBoYXZlIGFuIGluZGV4KCku
IEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZp
Y2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIG1h
cHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5CisvLyBzcGFyc2UgaW5kaWNlcyBhbmQgdGhl
cmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZT4KK2NsYXNzIEluZGV4TWFwIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbmRleE1h
cChzaXplX3Qgc2l6ZSA9IDApCisgICAgeworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7
CisgICAgfQorCisgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBt
X3ZlY3Rvci5yZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5
KiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAg
ICB9CisgICAgCisgICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV92ZWN0b3I7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0luZGV4TWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJbmRleFNl
dF9oCisKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJp
bnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBh
IHNldCBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVu
dCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYg
eW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1ZXMgY2Fu
IGhhdmUgdmVyeSBzcGFyc2UKKy8vIGluZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1
ZXMuCisKKy8vIElmIHlvdSB3YW50IGEgc2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8gSW5kZXhT
ZXQ8QmFzaWNCbG9jaz4uIFNvLCBUID0gQmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitjbGFzcyBJbmRleFNldCB7CitwdWJsaWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zZXQu
c2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQqIHZhbHVl
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFi
bGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUm
IGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVj
dGlvbihjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxw
dHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9y
KGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVy
YWJsZTo6aXRlcmF0b3IgaXRlcikKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29s
bGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX2l0ZXIgPT0gb3RoZXIubV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlv
blR5cGUqIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJh
YmxlOjppdGVyYXRvciBtX2l0ZXI7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkp
OyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29s
bGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBD
b2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9z
ZXQ7CisgICAgfTsKKworICAgIC8vIEZvciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBp
bmRleFNldC52YWx1ZXMocHJvY2VkdXJlKTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlv
dSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9u
VHlwZT4gdmFsdWVzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsK
KyAgICB9CisKKyAgICBjb25zdCBCaXRWZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBt
X3NldDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDog
aW5kaWNlcygpLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVt
cFByZWZpeCwgaW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0xv
d2VyVG9BaXIuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMu
aCIKKyNpbmNsdWRlICJCM0FkZHJlc3NNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJl
Z1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIz
Q29tbXV0YXRpdml0eS5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0lu
ZGV4U2V0LmgiCisjaW5jbHVkZSAiQjNMb3dlcmluZ01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM01l
bW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9j
ZWR1cmUuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2UgeworCitjbGFz
cyBMb3dlclRvQWlyIHsKK3B1YmxpYzoKKyAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBDb2RlJiBjb2RlKQorICAgICAgICA6IHZhbHVlVG9UbXAocHJvY2VkdXJlLnZhbHVlcygp
LnNpemUoKSkKKyAgICAgICAgLCBibG9ja1RvQmxvY2socHJvY2VkdXJlLnNpemUoKSkKKyAgICAg
ICAgLCB1c2VDb3VudHMocHJvY2VkdXJlKQorICAgICAgICAsIGFkZHJlc3NTZWxlY3RvcigqdGhp
cykKKyAgICAgICAgLCBwcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICAsIGNvZGUoY29kZSkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCMzo6
QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1cmUpCisgICAgICAgICAgICBibG9ja1RvQmxvY2tb
YmxvY2tdID0gY29kZS5hZGRCbG9jayhibG9jay0+ZnJlcXVlbmN5KCkpOworCisgICAgICAgIC8v
IExvd2VyIGRlZnMgYmVmb3JlIHVzZXMgb24gYSBnbG9iYWwgbGV2ZWwuIFRoaXMgaXMgYSBnb29k
IGhldXJpc3RpYyB0byBsb2NrIGRvd24gYQorICAgICAgICAvLyBob2lzdGVkIGFkZHJlc3MgZXhw
cmVzc2lvbiBiZWZvcmUgd2UgZHVwbGljYXRlIGl0IGJhY2sgaW50byB0aGUgbG9vcC4KKyAgICAg
ICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1cmUuYmxvY2tzSW5QcmVPcmRl
cigpKSB7CisgICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgorICAgICAgICAgICAgaW5z
dHMucmVzaXplKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2Nr
cyBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hh
dCBhbGxvd3MgdXMKKyAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5
LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobG9ja2VkLmNvbnRhaW5zKGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGluc3RzLmFwcGVuZChWZWN0b3I8SW5zdD4o
KSk7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBydW5Mb3dlcmluZ01hdGNoZXIoY3Vy
cmVudFZhbHVlLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBsb3dlciAiLCBkZWVwRHVt
cChjdXJyZW50VmFsdWUpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4gaW5zdHMgY29udGFpbnMg
dGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAgICAgICAgICAvLyBpdCBp
biByZXZlcnNlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5zdHMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHNbaV0pCisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVuZEluc3QoV1RGOjptb3Zl
KGluc3QpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCisgICAgICAgICAgICBBU1NFUlQo
YmxvY2stPnN1Y2Nlc3NvcnMoKS5zaXplKCkgPD0gMik7CisgICAgICAgICAgICBmb3IgKEIzOjpC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAg
ICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZChibG9ja1Rv
QmxvY2tbc3VjY2Vzc29yXSk7CisgICAgICAgIH0KKworICAgICAgICBJbnNlcnRpb25TZXQgaW5z
ZXJ0aW9uU2V0KGNvZGUpOworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBwcm9sb2d1ZSkKKyAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0KDAsIFdURjo6bW92ZShpbnN0KSk7Cisg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOworICAgIH0KKworICAgIFRtcCB0
bXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgVG1wJiB0bXAgPSB2YWx1ZVRvVG1wW3Zh
bHVlXTsKKyAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAgICB0bXAgPSBjb2RlLm5ld1RtcChp
c0ludCh2YWx1ZS0+dHlwZSgpKSA/IEFyZzo6R1AgOiBBcmc6OkZQKTsKKyAgICAgICAgcmV0dXJu
IHRtcDsKKyAgICB9CisKKyAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGludG8g
YW4gYWRkcmVzcy4KKyAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRkcmVzcykKKyAgICB7
CisgICAgICAgIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFkZHJlc3MgPSBBcmcoKTsKKyAgICAg
ICAgaWYgKHJ1bkFkZHJlc3NNYXRjaGVyKGFkZHJlc3MsIGFkZHJlc3NTZWxlY3RvcikpCisgICAg
ICAgICAgICByZXR1cm4gYWRkcmVzc1NlbGVjdG9yLnNlbGVjdGVkQWRkcmVzczsKKworICAgICAg
ICByZXR1cm4gQXJnOjphZGRyKHRtcChhZGRyZXNzKSk7CisgICAgfQorCisgICAgLy8gVGhpcyBn
aXZlcyB5b3UgdGhlIGFkZHJlc3Mgb2YgdGhlIGdpdmVuIExvYWQgb3IgU3RvcmUuIElmIGl0J3Mg
bm90IGEgTG9hZCBvciBTdG9yZSwgdGhlbgorICAgIC8vIGl0IHJldHVybnMgQXJnKCkuCisgICAg
QXJnIGFkZHIoVmFsdWUqIG1lbW9yeVZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFsdWUq
IHZhbHVlID0gbWVtb3J5VmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBpZiAoIXZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworCisgICAgICAgIEFyZyByZXN1bHQgPSBl
ZmZlY3RpdmVBZGRyKHZhbHVlLT5jaGlsZHJlbigpLmxhc3QoKSk7CisgICAgICAgIGlmICghcmVz
dWx0KQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworCisgICAgICAgIHJldHVybiByZXN1bHQu
d2l0aE9mZnNldCh2YWx1ZS0+b2Zmc2V0KCkpOworICAgIH0KKworICAgIEFyZyBsb2FkQWRkcihW
YWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+b3Bjb2RlKCkg
PT0gTG9hZCkKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIHJl
dHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcgaW1tKFZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBBcmc6Omlt
bSh2YWx1ZS0+YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAg
IEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoQXJnIHJlc3Vs
dCA9IGltbSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gdG1wKHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUs
IENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAgIHZvaWQg
YXBwZW5kQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIFRt
cCByZXN1bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRocmVl
LW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIsIGMKKyAgICAgICAg
Ly8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGMgPSBhIE9wIGIKKworICAg
ICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXAsIEFyZzo6VG1w
KSkgeworICAgICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBl
bmQob3Bjb2RlLCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9wZXJhdGlvbiBjb3VsZCBoYXZl
IGFuIGltbWVkaWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAgIGlmIChpbW0obGVmdCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKGxlZnQpLCB0bXAocmlnaHQp
LCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGltbShyaWdodCkgJiYg
aXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgeworICAg
ICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0ocmlnaHQpLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gVHdvLW9wZXJhbmQg
Zm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAgICAgICAgLy8gbWVhbiBzb21l
dGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEKKworICAgICAgICAvLyBBdCB0
aGlzIHBvaW50LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGhhdmUg
YSBmdXNlZCBsb2FkIG92ZXIgdGhyZWUKKyAgICAgICAgLy8gb3BlcmFuZCBmb3Jtcy4KKyAgICAg
ICAgCisgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAgICAg
ICAgICBBcmcgbGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAgICAgICAgICAgIGlmIChpc1Zh
bGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAgICAg
ICAgICAgLy8gRklYTUU6IFVzZSB0aGUgcmlnaHQgTW92ZSBvcGNvZGUuIElmIHdlJ3JlIGRlYWxp
bmcgd2l0aCAzMi1iaXQgdHlwZXMsIHdlIHNob3VsZAorICAgICAgICAgICAgICAgIC8vIHVzZSBN
b3ZlMzIuIElmIHdlJ3JlIGRlYWxpbmcgd2l0aCBEb3VibGVzLCB3ZSBzaG91bGQgdXNlIE1vdmVE
b3VibGUuCisgICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE1MDUzMworICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAocmlnaHQp
LCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGxlZnRBZGRyLCByZXN1
bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIEFyZyByaWdodEFkZHIgPSBsb2FkQWRkcihyaWdodCk7CisgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAg
ICAgICAgYXBwZW5kKE1vdmUsIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVu
ZChvcGNvZGUsIHJpZ2h0QWRkciwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRt
cCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIHRt
cChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQob3Bj
b2RlLCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPEFpcjo6T3Bj
b2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+
CisgICAgYm9vbCB0cnlBcHBlbmRTdG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBmYWlscyB0byBjaGVjayBpZiB0aGVyZSBh
cmUgYW55IGVmZmVjdHMgYmV0d2VlbiB0aGUgTG9hZCBhbmQgdGhlIFN0b3JlIHRoYXQKKyAgICAg
ICAgLy8gY291bGQgY2xvYmJlciB0aGUgbG9hZGVkIHZhbHVlLiBXZSBuZWVkIHRvIGNoZWNrIHN1
Y2ggdGhpbmdzIGJlY2F1c2Ugd2UgYXJlIGVmZmVjdGl2ZWx5CisgICAgICAgIC8vIHNpbmtpbmcg
dGhlIGxvYWQuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA1MzQKKyAgICAgICAgCisgICAgICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRyKGN1cnJl
bnRWYWx1ZSk7CisgICAgICAgIEFTU0VSVChzdG9yZUFkZHIpOworCisgICAgICAgIFZhbHVlKiBv
dGhlclZhbHVlOworICAgICAgICBpZiAoYWRkcihsZWZ0KSA9PSBzdG9yZUFkZHIpCisgICAgICAg
ICAgICBvdGhlclZhbHVlID0gcmlnaHQ7CisgICAgICAgIGVsc2UgaWYgKGNvbW11dGF0aXZpdHkg
PT0gQ29tbXV0YXRpdmUgJiYgYWRkcihyaWdodCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAg
b3RoZXJWYWx1ZSA9IGxlZnQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgc3RvcmVBZGRy
LmtpbmQoKSkgJiYgaW1tKG90aGVyVmFsdWUpKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2Rl
LCBpbW0ob3RoZXJWYWx1ZSksIHN0b3JlQWRkcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwg
c3RvcmVBZGRyLmtpbmQoKSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
YXBwZW5kKG9wY29kZSwgdG1wKG90aGVyVmFsdWUpLCBzdG9yZUFkZHIpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBBaXI6Ok9wY29kZSBtb3ZlRm9yVHlwZShUeXBlIHR5cGUp
CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAg
ICAgICAgICAgIHJldHVybiBNb3ZlMzI7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChpczY0Qml0KCkpOworICAgICAgICAgICAgcmV0dXJuIE1vdmU7Cisg
ICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIE1vdmVEb3VibGU7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIHZvaWQgYXBwZW5kKEFpcjo6T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1l
bnRzKQorICAgIHsKKyAgICAgICAgaW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9wY29kZSwgY3Vy
cmVudFZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAg
fQorICAgIAorICAgIEluZGV4U2V0PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMg
dGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiB2
YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFp
ci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSogd2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4K
KyAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gYmxvY2tUb0Js
b2NrOworCisgICAgVXNlQ291bnRzIHVzZUNvdW50czsKKworICAgIFZlY3RvcjxWZWN0b3I8SW5z
dCwgND4+IGluc3RzOworICAgIFZlY3RvcjxJbnN0PiBwcm9sb2d1ZTsKKworICAgIFZhbHVlKiBj
dXJyZW50VmFsdWU7CisKKyAgICAvLyBUaGUgYWRkcmVzcyBzZWxlY3RvciB3aWxsIG1hdGNoIGFu
eSBwYXR0ZXJuIHdoZXJlIHRoZSBpbnB1dCBvcGVyYW5kcyBhcmUgYXZhaWxhYmxlIGFzIFRtcHMu
CisgICAgLy8gSXQgZG9lc24ndCBjYXJlIGFib3V0IHNoYXJpbmcuIEl0IHdpbGwgaGFwcGlseSBl
bWl0IHRoZSBzYW1lIGFkZHJlc3MgZXhwcmVzc2lvbiBvdmVyIGFuZCBvdmVyCisgICAgLy8gYWdh
aW4gcmVnYXJkbGVzcyBvZiB0aGUgZXhwcmVzc2lvbidzIGNvbXBsZXhpdHkuIFRoaXMgd29ya3Mg
b3V0IGZpbmUsIHNpbmNlIGF0IHRoZSBtYWNoaW5lCisgICAgLy8gbGV2ZWwsIGFkZHJlc3MgZXhw
cmVzc2lvbnMgYXJlIHN1cGVyIGNoZWFwLiBIb3dldmVyLCB0aGlzIGRvZXMgaGF2ZSBhIGhhY2sg
dG8gYXZvaWQKKyAgICAvLyAidW5ob2lzdGluZyIgYWRkcmVzcyBleHByZXNzaW9ucy4KKyAgICBj
bGFzcyBBZGRyZXNzU2VsZWN0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgQWRkcmVzc1NlbGVj
dG9yKExvd2VyVG9BaXImIGxvd2VyKQorICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQor
ICAgICAgICB7CisgICAgICAgICAgICB0aGlzLT5yb290ID0gcm9vdDsKKyAgICAgICAgICAgIC8v
IFdlIGRvbid0IHdhbnQgdG8gbWF0Y2ggYW4gYWRkcmVzcyBleHByZXNzaW9uIHRoYXQgaGFzIGFs
cmVhZHkgYmVlbiBjb21wdXRlZAorICAgICAgICAgICAgLy8gZXhwbGljaXRseS4KKyAgICAgICAg
ICAgIHJldHVybiAhbG93ZXIudmFsdWVUb1RtcFtyb290XTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgYWNjZXB0Um9vdExhdGUoVmFsdWUqKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2
YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYg
KGxvd2VyLnZhbHVlVG9UbXBbdmFsdWVdKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgICAgIHJldHVybiBhY2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAg
ICAgfQorICAgICAgICBib29sIGFjY2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNj
ZXB0SW50ZXJuYWxzTGF0ZShBcmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSog
dmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlm
IChsb3dlci5sb2NrZWQuY29udGFpbnModmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgIHJldHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOwor
ICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9
CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lk
IGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5
QWRkU2hpZnQxKFZhbHVlKiBpbmRleCwgVmFsdWUqIGxvZ1NjYWxlLCBWYWx1ZSogYmFzZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgaWYgKGxvZ1NjYWxlLT5hc0ludCgpIDwgMCB8fCBsb2dTY2Fs
ZS0+YXNJbnQoKSA+IDMpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjppbmRleCgKKyAgICAgICAgICAgICAgICBsb3dlci50
bXAoYmFzZSksIGxvd2VyLnRtcChpbmRleCksIDEgPDwgbG9nU2NhbGUtPmFzSW50KCkpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZFNo
aWZ0MihWYWx1ZSogYmFzZSwgVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiB0cnlBZGRTaGlmdDEoaW5kZXgsIGxvZ1NjYWxlLCBiYXNl
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChyaWdodC0+aGFzSW50MzIoKSkgewor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJvZHVjdGlvbiBpc24ndCBzdHJpY3RseSBuZWNlc3Nh
cnkgc2luY2Ugd2UgZXhwZWN0CisgICAgICAgICAgICAgICAgLy8gTG9hZChBZGQoQHgsIEBjb25z
dDEpLCBvZmZzZXQgPSBjb25zdDIpIHRvIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmVuZ3RoLXJlZHVj
ZWQKKyAgICAgICAgICAgICAgICAvLyB0byBMb2FkKEB4LCBvZmZzZXQgPSBjb25zdDEgKyBjb25z
dDIpLgorICAgICAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50
bXAobGVmdCksIHJpZ2h0LT5hc0ludDMyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6Omlu
ZGV4KGxvd2VyLnRtcChsZWZ0KSwgbG93ZXIudG1wKHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5RGlyZWN0KCkKKyAgICAgICAg
eworICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChyb290
KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAg
ICAgTG93ZXJUb0FpciYgbG93ZXI7CisgICAgICAgIFZhbHVlKiByb290OworICAgICAgICBBcmcg
c2VsZWN0ZWRBZGRyZXNzOworICAgIH07CisgICAgQWRkcmVzc1NlbGVjdG9yIGFkZHJlc3NTZWxl
Y3RvcjsKKworICAgIC8vIEJlbG93IGlzIHRoZSBjb2RlIGZvciBhIGxvd2VyaW5nIHNlbGVjdG9y
LCBzbyB0aGF0IHdlIGNhbiBwYXNzICp0aGlzIHRvIHJ1bkxvd2VyaW5nTWF0Y2hlci4KKyAgICAv
LyBUaGlzIHdpbGwgbWF0Y2ggY29tcGxleCBtdWx0aS12YWx1ZSBleHByZXNzaW9ucywgYnV0IG9u
bHkgaWYgdGhlcmUgaXMgbm8gc2hhcmluZy4gRm9yIGV4YW1wbGUsCisgICAgLy8gaXQgd29uJ3Qg
bWF0Y2ggYSBMb2FkIHR3aWNlIGFuZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gZG8gdHdv
IGxvYWRzIHdoZW4gdGhlIG9yaWdpbmFsCisgICAgLy8gY29kZSBqdXN0IGRpZCBvbmUuCisgICAg
CisgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAgIHsKKyAgICAgICAgQVNTRVJU
X1VOVVNFRChyb290LCAhbG9ja2VkLmNvbnRhaW5zKHJvb3QpKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIHZvaWQgYWNjZXB0Um9vdExhdGUoVmFsdWUqKSB7IH0KKyAg
ICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgYm9vbCBhY2NlcHRJ
bnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAg
ICAgICAgLy8gSWYgb25lIG9mIHRoZSBpbnRlcm5hbCB0aGluZ3MgaGFzIGFscmVhZHkgYmVlbiBj
b21wdXRlZCwgdGhlbiB3ZSBkb24ndCB3YW50IHRvIGNhdXNlCisgICAgICAgIC8vIGl0IHRvIGJl
IHJlY29tcHV0ZWQgYWdhaW4uCisgICAgICAgIGlmICh2YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIC8vIFdlIHJlcXVpcmUgaW50
ZXJuYWxzIHRvIGhhdmUgb25seSBvbmUgdXNlIC0gdXMuCisgICAgICAgIGlmICh1c2VDb3VudHNb
dmFsdWVdICE9IDEpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAg
ICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgfQorICAgIGJvb2wg
YWNjZXB0SW50ZXJuYWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoVmFsdWUq
IHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgbG9ja2VkLmFk
ZCh2YWx1ZSk7CisgICAgICAgIGFjY2VwdEludGVybmFsc0xhdGUoYXJndW1lbnRzLi4uKTsKKyAg
ICB9CisgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKCkgeyB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUq
IHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaWYgKGxvY2tl
ZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgIH0KKyAgICBib29sIGFjY2Vw
dE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1bWVudHMuLi4p
IHsgfQorICAgIAorICAgIGJvb2wgdHJ5TG9hZChWYWx1ZSogYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoY3VycmVudFZhbHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoK
KyAgICAgICAgICAgIGFwcGVuZChNb3ZlMzIsIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcyksIHRtcChj
dXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIElu
dDY0OgorICAgICAgICAgICAgaWYgKGlzNjRCaXQoKSkgeworICAgICAgICAgICAgICAgIGFwcGVu
ZChNb3ZlLCBlZmZlY3RpdmVBZGRyKGFkZHJlc3MpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVE
b3VibGUsIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcyksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkg
eworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIENv
bW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFkZDY0LCBDb21tdXRhdGl2
ZT4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlB
bmQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVm
dC0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBhcHBlbmRCaW5P
cDxBbmQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5kNjQs
IENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBl
cyEKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBib29sIHRyeVN0b3JlQWRkTG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSop
CisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICBjYXNlIElu
dDMyOgorICAgICAgICAgICAgcmV0dXJuIHRyeUFwcGVuZFN0b3JlQmluT3A8QWRkMzIsIENvbW11
dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlTdG9yZUFuZExvYWQoVmFsdWUqIGxl
ZnQsIFZhbHVlKiByaWdodCwgVmFsdWUqKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiB0cnlBcHBl
bmRTdG9yZUJpbk9wPEFuZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wg
dHJ5U3RvcmUoVmFsdWUqIHZhbHVlLCBWYWx1ZSogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGFw
cGVuZChtb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwgdG1wKHZhbHVlKSwgZWZmZWN0aXZlQWRk
cihhZGRyZXNzKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5
VHJ1bmNBcmd1bWVudFJlZyhWYWx1ZSogYXJndW1lbnRSZWcpCisgICAgeworICAgICAgICBwcm9s
b2d1ZS5hcHBlbmQoSW5zdCgKKyAgICAgICAgICAgIE1vdmUsIGN1cnJlbnRWYWx1ZSwKKyAgICAg
ICAgICAgIFRtcChhcmd1bWVudFJlZy0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKS0+YXJndW1lbnRS
ZWcoKSksCisgICAgICAgICAgICB0bXAoY3VycmVudFZhbHVlKSkpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeVRydW5jKFZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGFwcGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5QXJndW1lbnRSZWcoKQorICAg
IHsKKyAgICAgICAgcHJvbG9ndWUuYXBwZW5kKEluc3QoCisgICAgICAgICAgICBtb3ZlRm9yVHlw
ZShjdXJyZW50VmFsdWUtPnR5cGUoKSksIGN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgIFRtcChj
dXJyZW50VmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkpLAorICAg
ICAgICAgICAgdG1wKGN1cnJlbnRWYWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIAorICAgIGJvb2wgdHJ5Q29uc3QzMigpCisgICAgeworICAgICAgICBhcHBlbmQoTW92
ZSwgaW1tKGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5Q29uc3Q2NCgpCisgICAgeworICAgICAg
ICBhcHBlbmQoTW92ZSwgQXJnOjppbW02NChjdXJyZW50VmFsdWUtPmFzSW50NjQoKSksIHRtcChj
dXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJv
b2wgdHJ5UmV0dXJuKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodmFsdWUt
PnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIEludDY0OgorICAg
ICAgICAgICAgYXBwZW5kKE1vdmUsIGltbU9yVG1wKHZhbHVlKSwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEb3VibGU6Cisg
ICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJsZSwgdG1wKHZhbHVlKSwgVG1wKEZQUkluZm86OnJl
dHVyblZhbHVlRlBSKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgYXBwZW5kKFJldCk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1cmUmIHByb2NlZHVyZTsKKyAgICBDb2Rl
JiBjb2RlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJUb0Fp
cihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBo
YXNlU2NvcGUocHJvY2VkdXJlLCAibG93ZXJUb0FpciIpOworICAgIExvd2VyVG9BaXIgbG93ZXJU
b0Fpcihwcm9jZWR1cmUsIGNvZGUpOworICAgIGxvd2VyVG9BaXIucnVuKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNMb3dlclRvQWlyX2gKKyNkZWZpbmUgQjNMb3dlclRvQWlyX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQcm9jZWR1cmU7CituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGxv
d2VycyB0aGUgY3VycmVudCBCMyBwcm9jZWR1cmUgdG8gYW4gQWlyIGNvZGUuCisKK3ZvaWQgbG93
ZXJUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNMb3dlclRvQWly
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBh
dHRlcm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5n
TWF0Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5
IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMg
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJ
VFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2Vy
aW5nTWF0Y2hlcgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwg
c3RhcnRpbmcgYXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3Rh
dGVtZW50cyB3aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0
byB0aGlzIG1hdGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFu
Y2UhCisKK0xvYWQgPSBMb2FkKGFkZHJlc3MpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKK0Fu
ZCA9IEJpdEFuZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkID0gU3RvcmUoQWRkKGxlZnQs
IHJpZ2h0KSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0b3JlKEJpdEFuZChsZWZ0LCByaWdo
dCksIGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZhbHVlLCBhZGRyZXNzKQorCitUcnVuY0FyZ3Vt
ZW50UmVnID0gVHJ1bmMoYXJndW1lbnRSZWcgPSBBcmd1bWVudFJlZygpKQorVHJ1bmMgPSBUcnVu
Yyh2YWx1ZSkKKworQXJndW1lbnRSZWcgPSBBcmd1bWVudFJlZygpCisKK0NvbnN0MzIgPSBDb25z
dDMyKCkKK0NvbnN0NjQgPSBDb25zdDY0KCkKKworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKK3sKK30KKwordm9pZCBNZW1v
cnlWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAobV9v
ZmZzZXQpCisgICAgICAgIG91dC5wcmludCgib2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEZJWE1FOiBBZGQgYWxpYXMgYW5hbHlzaXMg
dG8gdGhlc2UgYnkgYWxsb3dpbmcgdGhlIGNsaWVudCB0byBhc3NvY2lhdGUgYW4gaW50ZWdlciBy
YW5nZSB0byB0aGUKKy8vIHZhbHVlLiBUd28gb3BlcmF0aW9ucyBtYXkgYWNjZXNzIHRoZSBzYW1l
IG1lbW9yeSBpZiB0aGVpciByYW5nZXMgb3ZlcmxhcHMuCisvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTM1CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIE1l
bW9yeVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAg
ICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9h
ZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAg
ICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgY2FzZSBTdG9y
ZTE2OgorICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1vcnlWYWx1ZSgpOworCisgICAg
aW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3Jt
IGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRo
YXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBl
KS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGlu
dDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBv
cmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAg
ICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7
CisgICAgICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAg
Y2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgICAg
IEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IERvdWJs
ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAg
ICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAg
ICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9p
ZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVy
biB0eXBlIGlzIGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9
IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgb3Bjb2RlID09IExvYWRGbG9hdCA/
IERvdWJsZSA6IEludDMyLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zm
c2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAg
IHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAg
IGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2Fz
ZSBMb2FkMTZTOgorICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgorICAgIE1lbW9y
eVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJfdCBvZmZz
ZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFs
dWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAg
ICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKK307CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzTWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNP
cGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM09wY29kZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpT
Qzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bj
b2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBOb3A6CisgICAgICAgIG91
dC5wcmludCgiTm9wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElkZW50aXR5OgorICAg
ICAgICBvdXQucHJpbnQoIklkZW50aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENv
bnN0MzI6CisgICAgICAgIG91dC5wcmludCgiQ29uc3QzMiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDb25zdDY0OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0NjQiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RE
b3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBv
dXQucHJpbnQoIlN0YWNrU2xvdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmd1bWVu
dFJlZzoKKyAgICAgICAgb3V0LnByaW50KCJBcmd1bWVudFJlZyIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIG91dC5wcmludCgiRnJhbWVQb2ludGVy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFkZDoKKyAgICAgICAgb3V0LnByaW50KCJB
ZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3ViOgorICAgICAgICBvdXQucHJpbnQo
IlN1YiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNdWw6CisgICAgICAgIG91dC5wcmlu
dCgiTXVsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERpdjoKKyAgICAgICAgb3V0LnBy
aW50KCJEaXYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAg
IG91dC5wcmludCgiQ2hpbGxEaXYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTW9kOgor
ICAgICAgICBvdXQucHJpbnQoIk1vZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRB
bmQ6CisgICAgICAgIG91dC5wcmludCgiQml0QW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEJpdE9yOgorICAgICAgICBvdXQucHJpbnQoIkJpdE9yIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRYb3IiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgU2hsOgorICAgICAgICBvdXQucHJpbnQoIlNobCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTU2hyOgorICAgICAgICBvdXQucHJpbnQoIlNTaHIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgWlNocjoKKyAgICAgICAgb3V0LnByaW50KCJaU2hyIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQ4OgorICAgICAgICBvdXQucHJpbnQoIlNF
eHQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAgb3V0LnBy
aW50KCJTRXh0MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDMyOgorICAgICAg
ICBvdXQucHJpbnQoIlNFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBaRXh0MzI6
CisgICAgICAgIG91dC5wcmludCgiWkV4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFRydW5jOgorICAgICAgICBvdXQucHJpbnQoIlRydW5jIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEZSb3VuZDoKKyAgICAgICAgb3V0LnByaW50KCJGUm91bmQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSVRvRDoKKyAgICAgICAgb3V0LnByaW50KCJJVG9EIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIERUb0kzMjoKKyAgICAgICAgb3V0LnByaW50KCJEVG9JMzIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRXF1
YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIG91dC5w
cmludCgiTm90RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVzc1RoYW46Cisg
ICAgICAgIG91dC5wcmludCgiTGVzc1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
R3JlYXRlclRoYW46CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NFcXVh
bCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgICAgIG91
dC5wcmludCgiR3JlYXRlckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3Zl
OgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEJlbG93OgorICAgICAgICBvdXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEFib3ZlRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQWJvdmVFcXVhbCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkJl
bG93RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBv
dXQucHJpbnQoIkxvYWQ4WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgIG91dC5wcmludCgiTG9hZDhTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExv
YWQxNlo6CisgICAgICAgIG91dC5wcmludCgiTG9hZDE2WiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNlMiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGbG9h
dCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQo
IkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBvdXQu
cHJpbnQoIlN0b3JlOCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTE2OgorICAg
ICAgICBvdXQucHJpbnQoIlN0b3JlMTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3Rv
cmVGbG9hdDoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZUZsb2F0Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENDYWxsOgorICAgICAgICBvdXQucHJpbnQoIkNDYWxsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBhdGNocG9pbnQ6CisgICAgICAgIG91dC5wcmludCgi
UGF0Y2hwb2ludCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICAg
ICAgb3V0LnByaW50KCJDaGVja0FkZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVj
a1N1YjoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja1N1YiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja011bCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgb3V0LnByaW50KCJDaGVjayIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBvdXQucHJpbnQoIlVw
c2lsb24iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUGhpOgorICAgICAgICBvdXQucHJp
bnQoIlBoaSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKdW1wOgorICAgICAgICBvdXQu
cHJpbnQoIkp1bXAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQnJhbmNoOgorICAgICAg
ICBvdXQucHJpbnQoIkJyYW5jaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTd2l0Y2g6
CisgICAgICAgIG91dC5wcmludCgiU3dpdGNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFJldHVybjoKKyAgICAgICAgb3V0LnByaW50KCJSZXR1cm4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgT29wczoKKyAgICAgICAgb3V0LnByaW50KCJPb3BzIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3Bjb2Rl
X2gKKyNkZWZpbmUgQjNPcGNvZGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2VudW0gT3Bjb2RlIDogaW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9p
ZCwgdXNlZnVsIGZvciB3aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwK
KyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55IHZhbHVl
IHR5cGUuCisgICAgSWRlbnRpdHksCisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUgQ29uc3RW
YWx1ZSogY2xhc3Nlcy4gQ29uc3RhbnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3csIHNvIHRo
YXQgd2UgY2FuCisgICAgLy8gcmVhc29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0
aGVtLiBMYXJnZSBjb25zdGFudHMgYXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgQ29uc3Qz
MiwKKyAgICBDb25zdDY0LAorICAgIENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1hZ2ljYWwg
c3RhY2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhl
IHByb2dyYW0gcmVnYXJkbGVzcyBvZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3Ug
cHV0IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBkaXNqb2lu
dCByYW5nZSBvZgorICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBj
bGFzcy4KKyAgICBTdGFja1Nsb3QsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdp
c3Rlci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dy
YW0KKyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0
LCBhbmQgdGhlIGNvbXBpbGVyIHRha2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBk
b24ndCBjbG9iYmVyIHRoZSB2YWx1ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNhbGxzIChl
aXRoZXIgYnkgc2F2aW5nIHRoZSBhcmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBvciBwcmVz
ZXJ2aW5nIGl0IGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVn
VmFsdWUgY2xhc3MuIFRoZSByZXR1cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2ludGVyKCkg
KGZvciBHUFJzKSBvciBEb3VibGUgKGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywKKworICAg
IC8vIFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRy
b2wgZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRl
ciwgd2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50
ZXIgdGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBv
aW50ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91
bGQqIGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAg
IEZyYW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFu
eSB2YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKwor
ICAgIC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIs
IGJlaGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0
T3IsCisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisKKyAgICAv
LyBDYXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBT
RXh0OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6
CisgICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBJbnQ2NCBhbmQgcmV0dXJu
cyBJbnQzMjoKKyAgICBUcnVuYywKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3VibGU6Cisg
ICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIElU
b0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERUb0kzMiwK
KworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUg
dHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8vIGlzIGp1
c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVzc1RoYW4s
CisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVhbCwKKwor
ICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgorICAgIEFi
b3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwsCisgICAgQmVsb3dFcXVhbCwKKworICAg
IC8vIE1lbW9yeSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxv
YWRlZCB0eXBlLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIElu
dDMyOgorICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZT
LAorICAgIC8vIFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRo
aXMgcmV0dXJuIHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAg
Ly8gTWVtb3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3Jl
ZC4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFs
dWU6CisgICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJs
ZSB2YWx1ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBz
dG9yZSBmb3IgSW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8g
VGhpcyBpcyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lz
dGVtIEMgY2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1
bWVudHMgYXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAg
ICAvLyBUaGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3Mu
IFRoaXMgaXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5
IGVtaXRzIGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNr
IGdldHMgdG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21h
cCBhbG9uZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11
c3QgYmUgcGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2tt
YXAgYXJndW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0
CisgICAgLy8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20g
dGhlIHRvcCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNr
LgorICAgIFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tW
YWx1ZSBjbGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRp
b24KKyAgICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2Rl
IGFmdGVyIHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZy
b20gdGhlIGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0
byBzdXBwbHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dl
ZCB0byBqdW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRo
LCBzaW5jZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRp
b24gb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBw
ZW4uIEZvcgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAg
IC8vCisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkp
CisgICAgLy8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAg
Ly8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAg
ICAvLworICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVz
ZWQgYnkgdGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8g
Y2FsbGJhY2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5
IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmly
c3QgQ2hlY2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUg
cG9zc2libHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBD
aGVja0FkZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hl
Y2tTdWIsCisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVz
ZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBo
YXMgYQorICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRh
a2VzIGFuIEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8v
IGZ1bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2
YWx1ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hl
Y2ssCisKKyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAg
VXBzaWxvbiwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAor
CisgICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisg
ICAgCisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlw
ZS4gQnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJv
bFZhbHVlIGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBz
dWNjZXNzb3IuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVp
dGhlciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dp
dGNoLAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93
IHRoZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0
eXBlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8g
VGhpcyBpcyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQg
aGVyZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK2lubGlu
ZSBib29sIGlzQ2hlY2tNYXRoKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVj
a011bDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFj
ZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiwgSlNDOjpCMzo6T3Bjb2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBPcmlnaW46OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9yaWdpbigiLCBSYXdQ
b2ludGVyKG1fZGF0YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdp
bi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNPcmln
aW5faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2hvZXZlciBnZW5lcmF0
ZXMgQjNJUiBjYW4gY2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZhbHVlcy4gV2hlbiB5b3UgZG8g
dGhpcywgQjMgd2lsbCBiZSBhYmxlIHRvCisvLyBhY2NvdW50LCBkb3duIHRvIHRoZSBtYWNoaW5l
IGNvZGUsIHdoaWNoIGluc3RydWN0aW9uIGNvcnJlc3BvbmRzIHRvIHdoaWNoIG9yaWdpbi4gQjMK
Ky8vIHRyYW5zZm9ybWF0aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdpbnMgY2FyZWZ1bGx5LiBJdCdz
IGFuIGVycm9yIHRvIHdyaXRlIGEgdHJhbnNmb3JtYXRpb24gdGhhdAorLy8gZWl0aGVyIGRyb3Bz
IE9yaWdpbnMgb3IgbGllcyBhYm91dCB0aGVtLgorY2xhc3MgT3JpZ2luIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBPcmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9IG51bGxwdHIpCisgICAgICAgIDog
bV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25z
dCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0
OworICAgIAorcHJpdmF0ZToKKyAgICBjb25zdCB2b2lkKiBtX2RhdGE7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM09yaWdpbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9p
bnRTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50U3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFNwZWNpYWwuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCitQYXRjaHBvaW50U3BlY2lhbDo6UGF0Y2hwb2lu
dFNwZWNpYWwoKQoreworfQorCitQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFs
KCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50U3BlY2lhbDo6Zm9yRWFjaEFyZygKKyAgICBJbnN0
JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJh
Y2spCit7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkgeworICAgICAgICBm
b3JFYWNoQXJnSW1wbCgwLCAxLCBpbnN0LCBjYWxsYmFjayk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6RGVmLCBpbnN0Lm9yaWdpbi0+
YWlyVHlwZSgpKTsKKyAgICBmb3JFYWNoQXJnSW1wbCgwLCAyLCBpbnN0LCBjYWxsYmFjayk7Cit9
CisKK2Jvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBp
ZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBWb2lkKQorICAgICAgICByZXR1cm4gaXNWYWxpZElt
cGwoMCwgMSwgaW5zdCk7CisKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICBpZiAoaW5zdC5hcmdzWzFdLmtpbmQoKSAhPSBBcmc6OlRtcCkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghaW5zdC5hcmdzWzFdLmlzVHlwZShpbnN0
Lm9yaWdpbi0+YWlyVHlwZSgpKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJu
IGlzVmFsaWRJbXBsKDAsIDIsIGluc3QpOworfQorCitib29sIFBhdGNocG9pbnRTcGVjaWFsOjph
ZG1pdHNTdGFjayhJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBpZiAoaW5z
dC5vcmlnaW4tPnR5cGUoKSA9PSBWb2lkKQorICAgICAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBs
KDAsIDEsIGluc3QsIGFyZ0luZGV4KTsKKworICAgIGlmIChhcmdJbmRleCA9PSAxKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKDAsIDIsIGluc3Qs
IGFyZ0luZGV4KTsKK30KKworQ0NhbGxIZWxwZXJzOjpKdW1wIFBhdGNocG9pbnRTcGVjaWFsOjpn
ZW5lcmF0ZSgKKyAgICBJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNv
bnRleHQmIGNvbnRleHQpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAg
U3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAgQVNTRVJUKHN0YWNr
bWFwKTsKKworICAgIFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKKyAgICB1bnNpZ25lZCBvZmZzZXQg
PSAxOworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgIHJlcHMu
YXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3Nbb2Zmc2V0KytdKSk7Cisg
ICAgYXBwZW5kUmVwc0ltcGwoY29udGV4dCwgb2Zmc2V0LCBpbnN0LCByZXBzKTsKKyAgICAKKyAg
ICBTdGFja21hcDo6R2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgcGFyYW1zLnZhbHVlID0g
dmFsdWU7CisgICAgcGFyYW1zLnN0YWNrbWFwID0gc3RhY2ttYXA7CisgICAgcGFyYW1zLnJlcHMg
PSByZXBzOworICAgIHBhcmFtcy51c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lz
dGVyczsKKworICAgIHN0YWNrbWFwLT5tX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKwor
ICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKwordm9pZCBQYXRjaHBvaW50U3Bl
Y2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
IlBhdGNocG9pbnQiKTsKK30KKwordm9pZCBQYXRjaHBvaW50U3BlY2lhbDo6ZGVlcER1bXBJbXBs
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJMb3dlcmVkIEIzOjpQ
YXRjaHBvaW50VmFsdWUuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bh
dGNocG9pbnRTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGF0Y2hwb2ludFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzUGF0Y2hwb2ludFNwZWNpYWxfaAorI2RlZmluZSBCM1BhdGNocG9pbnRTcGVjaWFsX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNwZWNpYWwg
dGhhdCByZWNvZ25pemVzIHRoYXQgdGhlcmUgYXJlIHR3byB1c2VzIG9mIFBhdGNocG9pbnQ6IFZv
aWQgYW5kIGFuZCBub24tVm9pZC4KKy8vIEluIHRoZSBWb2lkIGNhc2UsIHRoZSBzeW50YXggb2Yg
dGhlIEFpciBQYXRjaCBpbnN0cnVjdGlvbiBpczoKKy8vCisvLyAgICAgUGF0Y2ggJnBhdGNocG9p
bnQsIGFyZ3MuLi4KKy8vCisvLyBXaGVyZSAiYXJncy4uLiIgYXJlIHRoZSBsb3dlcmVkIGFyZ3Vt
ZW50cyB0byB0aGUgUGF0Y2hwb2ludCBpbnN0cnVjdGlvbi4gSW4gdGhlIG5vbi1Wb2lkIGNhc2UK
Ky8vIHdlIHdpbGwgaGF2ZToKKy8vCisvLyAgICAgUGF0Y2ggJnBhdGNocG9pbnQsIHJlc3VsdCwg
YXJncy4uLgorCitjbGFzcyBQYXRjaHBvaW50U3BlY2lhbCA6IHB1YmxpYyBTdGFja21hcFNwZWNp
YWwgeworcHVibGljOgorICAgIFBhdGNocG9pbnRTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+UGF0
Y2hwb2ludFNwZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6
Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikg
b3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJv
b2wgYWRtaXRzU3RhY2soQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOwor
CisgICAgLy8gTk9URTogdGhlIGdlbmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRk
ZW4gYnJhbmNoIGFuZCB0aGVuIHJlZ2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVy
YXRlcyB0aGUgc3RhY2ttYXAuIFN1cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZ2VuZXJhdGUoQWlyOjpJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgQWlyOjpHZW5lcmF0aW9u
Q29udGV4dCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1BhdGNocG9pbnRWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Bh
dGNocG9pbnRWYWx1ZTo6flBhdGNocG9pbnRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2lu
dFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgic3RhY2ttYXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50VmFsdWVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQ
YXRjaHBvaW50VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29s
IGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFBhdGNocG9pbnQ7IH0K
KworICAgIH5QYXRjaHBvaW50VmFsdWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOworCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRjaHBv
aW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3Qg
QWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBhdGNocG9p
bnQsIHR5cGUsIG9yaWdpbiwgY2hpbGRyZW4pCisgICAgeworICAgIH0KK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzUGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UGhhc2VTY29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAi
QjNWYWxpZGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3RmL1N0
cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQ
aGFzZVNjb3BlOjpQaGFzZVNjb3BlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBjaGFyKiBu
YW1lKQorICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICwgbV9uYW1lKG5hbWUpCit7
CisgICAgaWYgKHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygi
QjMgYWZ0ZXIgIiwgcHJvY2VkdXJlLmxhc3RQaGFzZU5hbWUoKSwgIiwgYmVmb3JlICIsIG5hbWUs
ICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIGlmIChz
aG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJp
bmcocHJvY2VkdXJlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAgIG1f
cHJvY2VkdXJlLnNldExhc3RQaGFzZU5hbWUobV9uYW1lKTsKKyAgICBpZiAoc2hvdWxkVmFsaWRh
dGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKG1fcHJvY2VkdXJlLCBtX2R1bXBC
ZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VT
Y29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2Nv
cGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQaGFzZVNjb3BlX2gKKyNkZWZp
bmUgQjNQaGFzZVNjb3BlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYv
Tm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFBoYXNl
U2NvcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBoYXNlU2NvcGUpOworcHVibGljOgor
ICAgIFBoYXNlU2NvcGUoUHJvY2VkdXJlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNl
U2NvcGUoKTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBQcm9jZWR1
cmUmIG1fcHJvY2VkdXJlOworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICBDU3RyaW5nIG1f
ZHVtcEJlZm9yZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUGhhc2VTY29wZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQjNCbG9ja1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkKKyAg
ICA6IG1fbGFzdFBoYXNlTmFtZSgiaW5pdGlhbCIpCit7Cit9CisKK1Byb2NlZHVyZTo6flByb2Nl
ZHVyZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soZG91YmxlIGZy
ZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJh
c2ljQmxvY2sobV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiBy
ZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2Nr
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMp
CisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworfQorCitWZWN0b3I8QmFzaWNC
bG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcigpCit7CisgICAgVmVjdG9yPEJhc2lj
QmxvY2sqPiByZXN1bHQ7CisgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlz
dC5wdXNoKGF0KDApKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5w
b3AoKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgIHdvcmts
aXN0LnB1c2goYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpKTsKKyAgICB9CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUG9zdE9y
ZGVyKCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBQb3N0T3JkZXJC
bG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goYXQoMCkpOworICAgIHdo
aWxlIChCbG9ja1dpdGhPcmRlciBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgc3dp
dGNoIChpdGVtLm9yZGVyKSB7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UHJlOgorICAgICAg
ICAgICAgd29ya2xpc3QucHVzaFBvc3QoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IGl0ZW0ubm9kZS0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAgICAg
ICAgIHdvcmtsaXN0LnB1c2goaXRlbS5ub2RlLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWaXNpdE9yZGVyOjpQb3N0OgorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZChpdGVtLm5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2VkdXJl
X2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIlB1cmVOYU4uaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgVmFsdWU7CisKK2NsYXNz
IFByb2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJvY2VkdXJlKTsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIEpTX0VYUE9SVF9QUklWQVRF
IFByb2NlZHVyZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Qcm9jZWR1cmUoKTsKKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kg
PSBQTmFOKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFz
aWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4
XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1
YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxs
cHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGl0ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwg
bV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dCht
X2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
ICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25l
ZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1
cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBp
bmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsK
KyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigq
dGhpcywgc2l6ZSgpKTsgfQorCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblByZU9y
ZGVyKCk7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRlcigpOworCisg
ICAgY2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZXND
b2xsZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBtX3By
b2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAg
ICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1f
aW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRl
cmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAgICAg
ICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAgICAsIG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IFZhbHVlKiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX3Byb2NlZHVyZS0+bV92YWx1ZXNbbV9pbmRleF0uZ2V0KCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgIHByaXZhdGU6CisKKyAgICAgICAgICAgIGNvbnN0IFByb2NlZHVyZSog
bV9wcm9jZWR1cmU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9Owor
CisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9j
ZWR1cmUsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKG1fcHJvY2VkdXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisKKyAgICAg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNp
emUoKTsgfQorICAgICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvY2VkdXJlLm1fdmFsdWVzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBWYWx1ZSogb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAg
ICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7
CisgICAgfTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFsdWVzKCkgY29uc3QgeyByZXR1cm4g
VmFsdWVzQ29sbGVjdGlvbigqdGhpcyk7IH0KKworICAgIC8vIFRoZSBuYW1lIGhhcyB0byBiZSBh
IHN0cmluZyBsaXRlcmFsLCBzaW5jZSB3ZSBkb24ndCBkbyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQg
Zm9yIHRoZSBzdHJpbmcuCisgICAgdm9pZCBzZXRMYXN0UGhhc2VOYW1lKGNvbnN0IGNoYXIqIG5h
bWUpCisgICAgeworICAgICAgICBtX2xhc3RQaGFzZU5hbWUgPSBuYW1lOworICAgIH0KKworICAg
IGNvbnN0IGNoYXIqIGxhc3RQaGFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQaGFzZU5h
bWU7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+
PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlPj4gbV92YWx1ZXM7
CisgICAgY29uc3QgY2hhciogbV9sYXN0UGhhc2VOYW1lOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQcm9j
ZWR1cmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2NlZHVy
ZUlubGluZXNfaAorI2RlZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogUHJvY2VkdXJl
OjphZGQoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFs
dWVUeXBlPiB2YWx1ZShuZXcgVmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRzLi4u
KSk7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVlcy5h
cHBlbmQoV1RGOjptb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNQcm9jZWR1cmVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2tTbG90S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdU
RiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgU3RhY2tTbG90S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2luZCkg
eworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgorICAgICAgICBvdXQucHJpbnQoIkxv
Y2tlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1v
dXM6CisgICAgICAgIG91dC5wcmludCgiQW5vbnltb3VzIik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tlZCBzdGFjayBz
bG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2Ug
aW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBU
aGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNr
CisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBj
b3VsZCBzaGFyZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRlZCB0aGF0IHRo
ZXkgYXJlbid0IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29tcGlsZXIgc3Rp
bGwgaGFzIHRvIGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJlIGVzY2FwZWQK
KyAgICAvLyBleHBsaWNpdGx5IGluIElSLgorICAgIEFub255bW91cworCisgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBhZGQgYSB0aGlyZCBtb2RlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBzdGFjayBz
bG90IHdpbGwgYmUgcmVhZCBhc3luY2hyb25vdXNseQorICAgIC8vIGFzIHdpdGggTG9ja2VkLCBi
dXQgbmV2ZXIgd3JpdHRlbiB0byBhc3luY2hyb25vdXNseS4gVGhlbiwgQWlyIGNvdWxkIG9wdGlt
aXplIHNwaWxsaW5nIGFuZAorICAgIC8vIGZpbGxpbmcgYnkgdHJhY2tpbmcgd2hldGhlciB0aGUg
dmFsdWUgaGFkIGJlZW4gc3RvcmVkIHRvIGEgcmVhZC1vbmx5IGxvY2tlZCBzbG90LiBJZiBpdCBo
YWQsCisgICAgLy8gdGhlbiB3ZSBjYW4gcmVmaWxsIGZyb20gdGhhdCBzbG90LgorICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1ODcKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJl
YW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xv
dEtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFja1Ns
b3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90VmFsdWVfaAorI2RlZmluZSBC
M1N0YWNrU2xvdFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0
YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30gLy8g
bmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBv
cGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAgIHVu
c2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNr
U2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhpcyBn
ZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0b3Rh
bGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8gdGhh
dC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZy
b21GUDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNzIHRo
ZSBzdGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJf
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQp
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIFN0YWNrU2xvdCwgcG9pbnRlclR5cGUoKSwgb3JpZ2lu
KQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9raW5kKGtpbmQp
CisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgbV9ieXRlU2l6ZTsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBpbnRwdHJfdCBt
X29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N0YWNrbWFwOjpTdGFja21hcCgpCit7Cit9CisKK1N0
YWNrbWFwOjp+U3RhY2ttYXAoKQoreworfQorCit2b2lkIFN0YWNrbWFwOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KAorICAgICAgICAie3JlcHMgPSAiLCBs
aXN0RHVtcChtX3JlcHMpLCAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJhdG9y
LmdldCgpKSwKKyAgICAgICAgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsICIsIHVzZWRS
ZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja21hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
U3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNrbWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5j
bHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ2hlY2tTcGVjaWFsOworY2xhc3Mg
U3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFN0YWNrbWFwIHsKK3B1Ymxp
YzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7CisgICAgICAgIC8vIFRoaXMgaXMgdGhl
IFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAgICAgICBWYWx1ZSogdmFsdWU7CisK
KyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFN0YWNrbWFwKiBzdGFj
a21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgYWN0dWFsIHZhbHVlIHJlcHJl
c2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgorICAgICAgICBWZWN0b3I8VmFsdWVSZXA+IHJl
cHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIHJlZ2lzdGVycyB0aGF0IHdlcmUg
dXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB9OworICAgIAor
ICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBjb25zdCBH
ZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0
aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3RhY2ttYXAoKTsKKyAgICB+U3RhY2ttYXAoKTsK
KworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1c2VzIHRo
aXMgU3RhY2ttYXAuIEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50IHRoYXQKKyAgICAvLyByZXR1cm5z
IGEgdmFsdWUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgcmVzdWx0IHZhbHVlLiBJbiBhbGwg
b3RoZXIgY2FzZXMsIGluZGV4IHplcm8gcmVmZXJzCisgICAgLy8gdG8gdGhlIGZpcnN0IGFyZ3Vt
ZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVudCBpcyBub3QgY29uc3RyYWlu
YWJsZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gaW4gYSBDaGVja0FkZCB2YWx1ZSwgaXQgd291bGQg
YmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQgMS4gSW4gYSBDaGVjayB2YWx1
ZSwgaXQKKyAgICAvLyB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kZXggMC4gQnV0
LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCwgeW91IGNhbgorICAgIC8v
IGRlcGVuZCBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBiZWluZyBmaWxsZWQgaW4uCisg
ICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0IFZhbHVlUmVwJiByZXApCisg
ICAgeworICAgICAgICBpZiAoaW5kZXggKyAxID49IG1fcmVwcy5zaXplKCkpCisgICAgICAgICAg
ICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhdID0gcmVwOwor
ICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0KQorICAgIHsK
KyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICBjb25zdCBSZWdp
c3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKworICAg
IHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcikKKyAgICB7Cisg
ICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxHZW5l
cmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNp
YWw7CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRTcGVjaWFsOworICAgIGZyaWVuZCBjbGFz
cyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7Cisg
ICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9i
YmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291
bGQgYmUgZnVydGhlciBkdXBsaWNhdGVkIGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28g
d2UganVzdCBtZXJnZSB0aGUgdXNlZCByZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFw
cGVuLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja21hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVj
aWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBB
aXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKCkKK3sKK30KKworU3RhY2tt
YXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVjaWFsKCkKK3sKK30KKwordm9pZCBTdGFja21hcFNwZWNp
YWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYgaW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYg
dGhlIEluc3QgdGhhdCB1c2VzIHRoZSBTdGFja21hcFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0
aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVzZWQKKyAgICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVs
dGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJlbnRseSB3b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNu
J3QgaGF2ZSB0YWlsZHVwCisgICAgLy8gb3IgdGhpbmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2
ZW50dWFsbHkgaXQgY291bGQgYmUgYSBwcm9ibGVtLgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdp
c3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVycyk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFj
a21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5z
dGFja21hcCgpOworCisgICAgcmV0dXJuIHN0YWNrbWFwLT5jbG9iYmVyZWQoKTsKK30KKwordm9p
ZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9y
ZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIGNv
bnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAg
ICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5l
IHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+
PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbigpLnNpemUo
KSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSAtIG51
bUlnbm9yZWRBaXJBcmdzID09IHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRC
M0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6
ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5h
cmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUt
PmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7CisKKyAgICAgICAgY2FsbGJhY2soYXJnLCBB
cmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICB9Cit9CisK
K2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25v
cmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0KQor
eworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBp
bnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6
ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCku
c2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0g
dmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgLy8gRm9y
IHRoZSBJbnN0IHRvIGJlIHZhbGlkLCBpdCBuZWVkcyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIg
b2YgYXJndW1lbnRzLgorICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFy
Z3MgIT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUmVnYXJkbGVzcyBvZiBjb25zdHJhaW50cywgc3Rh
Y2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1aXJlbWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4g
Rm9yCisgICAgLy8gZXhhbXBsZSwgeW91IGNhbid0IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFkZHJl
c3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29uZGl0aW9ucyBhcyB3ZWxsIGFzIHRoZQorICAgIC8v
IGFyZ3VtZW50IHR5cGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9
IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7CisgICAgICAgIEFyZyYgYXJnID0g
aW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc107CisgICAgICAgIAorICAgICAgICBzd2l0
Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgY2FzZSBB
cmc6OkltbToKKyAgICAgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICBjYXNlIEFyZzo6U3Rh
Y2s6CisgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgYnJlYWs7IC8vIE9L
CisgICAgICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0g
VG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICYmIGFyZy5i
YXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkp
OworCisgICAgICAgIGlmICghYXJnLmlzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGNvbnN0cmFpbnRzIGhhcyB0byBi
ZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBCMyBjaGlsZHJlbi4KKyAgICBBU1NFUlQo
c3RhY2ttYXAtPm1fcmVwcy5zaXplKCkgPD0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKwor
ICAgIC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBzdXBwbGllZCBjb25zdHJhaW50cy4KKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNBcmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5z
aXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZVJlcCYgcmVwID0gc3RhY2ttYXAtPm1fcmVwc1tp
XTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSAtIG51bUlnbm9yZWRCM0FyZ3MgKyBu
dW1JZ25vcmVkQWlyQXJnc107CisKKyAgICAgICAgc3dpdGNoIChyZXAua2luZCgpKSB7CisgICAg
ICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgdmVyaWZp
ZWQgdGhpcyBhYm92ZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVw
OjpTb21lUmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZh
bHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmIChhcmcgIT0gVG1wKHJlcC5yZWcoKSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2
YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJn
dW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnICE9IEFyZzo6Y2FsbEFyZyhyZXAub2Zmc2V0RnJv
bVNQKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFudDoKKyAgICAgICAgICAgIC8vIFRoaXMg
aXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0lt
cGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgVmFsdWUq
IHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0
YWNrbWFwKCk7CisKKyAgICB1bnNpZ25lZCBzdGFja21hcEFyZ0luZGV4ID0gYXJnSW5kZXggLSBu
dW1JZ25vcmVkQWlyQXJncyArIG51bUlnbm9yZWRCM0FyZ3M7CisKKyAgICBpZiAoc3RhY2ttYXBB
cmdJbmRleCA+PSBzdGFja21hcC0+bV9yZXBzLnNpemUoKSkgeworICAgICAgICAvLyBUaGlzIG1l
YW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNvbnN0cmFpbnQuCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKyAgICAKKyAgICAvLyBXZSBvbmx5IGFkbWl0IHN0YWNrIGZvciBBbnkncywgc2luY2Ug
U3RhY2sgaXMgbm90IGEgdmFsaWQgaW5wdXQgY29uc3RyYWludCwgYW5kIFN0YWNrQXJndW1lbnQK
KyAgICAvLyB0cmFuc2xhdGVzIHRvIGEgQ2FsbEFyZyBpbiBBaXIuCisgICAgaWYgKHN0YWNrbWFw
LT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRleF0ua2luZCgpID09IFZhbHVlUmVwOjpBbnkpCisgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFN0YWNrbWFw
U3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwoCisgICAgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQs
IHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBJbnN0JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+JiBy
ZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0
LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKCpjb250
ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkpOworfQorCitWYWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6
OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBjb25zdCBBcmcmIGFyZykKK3sKKyAgICBzd2l0Y2ggKGFy
Zy5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6
OnJlZyhhcmcucmVnKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAg
IGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFudChhcmcu
dmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBp
ZiAoYXJnLmJhc2UoKSA9PSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpKQorICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkpOworICAgICAgICBBU1NF
UlQoYXJnLmJhc2UoKSA9PSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KSk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpIC0gY29kZS5m
cmFtZVNpemUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgIHJldHVybiBWYWx1ZVJlcCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNTdGFja21hcFNwZWNpYWxfaAorI2RlZmluZSBCM1N0YWNrbWFwU3Bl
Y2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgor
I2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNs
YXNzIGZvciBzcGVjaWFscyB0aGF0IGhhdmUgc3RhY2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZp
bmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBhc2tpbmcgZm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5j
ZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBuZWVkIHRvIGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0
aGUKKy8vIFN0YWNrbWFwLgorCitjbGFzcyBTdGFja21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpT
cGVjaWFsIHsKK3B1YmxpYzoKKyAgICBTdGFja21hcFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5T
dGFja21hcFNwZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lz
dGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0
IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisK
KyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1
bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gc3ViY2xh
c3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgorCisgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKKyAg
ICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFy
Z3MsCisgICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVh
Y2hBcmdDYWxsYmFjaz4mKTsKKyAgICBib29sIGlzVmFsaWRJbXBsKAorICAgICAgICB1bnNpZ25l
ZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAg
QWlyOjpJbnN0Jik7CisgICAgYm9vbCBhZG1pdHNTdGFja0ltcGwoCisgICAgICAgIHVuc2lnbmVk
IG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBB
aXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBBcHBlbmRzIHRoZSByZXBz
IGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0YXJ0aW5nIHdpdGggbnVtSWdub3JlZEFyZ3MsIHRvIHRo
ZSBnaXZlbiB2ZWN0b3IuCisgICAgdm9pZCBhcHBlbmRSZXBzSW1wbChBaXI6OkdlbmVyYXRpb25D
b250ZXh0JiwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxWYWx1
ZVJlcD4mKTsKKworICAgIHN0YXRpYyBWYWx1ZVJlcCByZXBGb3JBcmcoQWlyOjpDb2RlJiwgY29u
c3QgQWlyOjpBcmcmKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24u
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNv
bGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3VjY2Vzc29yQ29s
bGVjdGlvbl9oCisjZGVmaW5lIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBh
IGdlbmVyaWMgd3JhcHBlciBhcm91bmQgbGlzdHMgb2YgZnJlcXVlbnRlZCBibG9ja3MsIHdoaWNo
IGdpdmVzIHlvdSBqdXN0IHRoZSBibG9ja3MuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxv
Y2ssIHR5cGVuYW1lIFN1Y2Nlc3Nvckxpc3Q+CitjbGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsK
K3B1YmxpYzoKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisg
ICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgeworICAgIH0KKworICAgIHNpemVfdCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFz
aWNCbG9jayomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygp
OyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIGF0KGluZGV4KTsgfQorICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvcltdKHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVi
bGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxs
cHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3NvckNvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBp
bmRleCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKSAvLyBjb25zdCBp
cyBzdHVwaWQgYW55d2F5LgorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rp
b24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAg
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworcHJpdmF0
ZToKKyAgICBTdWNjZXNzb3JMaXN0JiBtX2xpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hD
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hD
YXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9p
ZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fY2FzZVZhbHVlLCAiLT4iLCBtX3RhcmdldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
U3dpdGNoQ2FzZV9oCisjZGVmaW5lIEIzU3dpdGNoQ2FzZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0
Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1
ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUo
Y2FzZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0K
KworICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0K
KyAgICBGcmVxdWVudGVkQmxvY2sgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0K
KyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmJs
b2NrKCk7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBpbnQ2NF90IG1fY2FzZVZhbHVlOworICAgIEZyZXF1ZW50ZWRCbG9jayBtX3Rh
cmdldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNo
VmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJl
bW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgRnJlcXVlbnRlZEJsb2NrIHJlc3VsdEJs
b2NrID0gbV9zdWNjZXNzb3JzW2luZGV4XTsKKyAgICBpbnQ2NF90IHJlc3VsdFZhbHVlID0gbV92
YWx1ZXNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFz
dCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgbV92YWx1ZXNbaW5kZXhd
ID0gbV92YWx1ZXMubGFzdCgpOworICAgIG1fdmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1
cm4gU3dpdGNoQ2FzZShyZXN1bHRWYWx1ZSwgcmVzdWx0QmxvY2spOworfQorCit2b2lkIFN3aXRj
aFZhbHVlOjphcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAg
bV9zdWNjZXNzb3JzLmFwcGVuZChtX3N1Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3Nv
cnNbbV9zdWNjZXNzb3JzLnNpemUoKSAtIDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBt
X3ZhbHVlcy5hcHBlbmQoc3dpdGNoQ2FzZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNo
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBk
ZXN0cnVjdGl2ZWx5IG92ZXJyaWRlcyBDb250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91
dC5wcmludChsaXN0RHVtcCgqdGhpcyksICIsIGZhbGxUaHJvdWdoID0gIiwgZmFsbFRocm91Z2go
KSk7Cit9CisKK1N3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2lu
IG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRy
b2xWYWx1ZShpbmRleCwgU3dpdGNoLCBWb2lkLCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNzb3Jz
LmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZh
bHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVi
bGljIENvbnRyb2xWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFs
dWUoKTsKKworICAgIC8vIG51bUNhc2VWYWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgor
ICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCk7IH0KKworICAgIC8vIFRoZSBzdWNjZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0
aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgCisgICAgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEZy
ZXF1ZW50ZWRCbG9jayBmYWxsVGhyb3VnaCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5s
YXN0KCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKCkgeyByZXR1cm4gc3Vj
Y2Vzc29ycygpLmxhc3QoKTsgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG51bUNhc2VWYWx1ZXMoKTsgfQorICAgIFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gU3dpdGNoQ2FzZShjYXNlVmFsdWUoaW5kZXgpLCBz
dWNjZXNzb3IoaW5kZXgpKTsKKyAgICB9CisgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcltdKHVuc2ln
bmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9
CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigp
CisgICAgICAgICAgICA6IG1fc3dpdGNoKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgo
MCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3dpdGNo
VmFsdWUmIHN3aXRjaFZhbHVlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9zd2l0
Y2goJnN3aXRjaFZhbHVlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yKigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3N3aXRjaC0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
aW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0K
KworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAg
IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN3aXRjaFZhbHVlKiBtX3N3aXRjaDsK
KyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgdHlwZWRlZiBpdGVyYXRv
ciBjb25zdF9pdGVyYXRvcjsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4g
aXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
aXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2Fz
ZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNl
cyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIg
dGhpcyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBu
b3cKKyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0
aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNp
Z25lZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYpOwor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTd2l0
Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZh
bGxUaHJvdWdoKTsKKworICAgIFZlY3RvcjxpbnQ2NF90PiBtX3ZhbHVlczsKK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlw
ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5o
PgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQoIlZvaWQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIG91dC5wcmludCgi
SW50NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICBvdXQu
cHJpbnQoIkRvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzVHlwZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0
cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgewor
ICAgIFZvaWQsCisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxp
bmUgYm9vbCBpc0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwg
dHlwZSA9PSBJbnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7Cisg
ICAgcmV0dXJuIHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyVHlwZSgp
Cit7CisgICAgaWYgKGlzMzJCaXQoKSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVy
biBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVcHNp
bG9uVmFsdWU6On5VcHNpbG9uVmFsdWUoKQoreworfQorCit2b2lkIFVwc2lsb25WYWx1ZTo6ZHVt
cE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4iLCBtX3Bo
aS0+aW5kZXgoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25W
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25W
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxv
blZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXBzaWxvblZhbHVlX2gK
KyNkZWZpbmUgQjNVcHNpbG9uVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IFVwc2lsb25WYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wg
YWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gVXBzaWxvbjsgfQorCisg
ICAgflVwc2lsb25WYWx1ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNvbnN0IHsgcmV0dXJuIG1f
cGhpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAg
ICAKKyAgICBVcHNpbG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiB2YWx1ZSwgVmFsdWUqIHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGhpLCBWb2lkLCBv
cmlnaW4sIHZhbHVlKQorICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7CisgICAgICAgIEFTU0VS
VCh2YWx1ZS0+dHlwZSgpID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisKKyAgICBWYWx1ZSogbV9w
aGk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworVXNlQ291bnRzOjpVc2VDb3VudHMoUHJvY2VkdXJlJiBwcm9jZWR1cmUp
CisgICAgOiBtX2NvdW50cyhwcm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQoreworICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogcHJvY2VkdXJlLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoVmFsdWUq
IGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICBtX2NvdW50c1tjaGlsZF0r
KzsKKyAgICB9Cit9CisKK1VzZUNvdW50czo6flVzZUNvdW50cygpCit7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzVXNlQ291bnRzX2gKKyNkZWZpbmUgQjNVc2VDb3VudHNfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2Ns
YXNzIFVzZUNvdW50cyB7CitwdWJsaWM6CisgICAgVXNlQ291bnRzKFByb2NlZHVyZSYpOworICAg
IH5Vc2VDb3VudHMoKTsKKworICAgIHVuc2lnbmVkIG9wZXJhdG9yW10oVmFsdWUqIHZhbHVlKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY291bnRzW3ZhbHVlXTsKKyAgICB9Citwcml2
YXRlOgorICAgIEluZGV4TWFwPFZhbHVlLCB1bnNpZ25lZD4gbV9jb3VudHM7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM1VzZUNvdW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxp
ZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxp
ZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3Mg
VmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUs
IGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJl
KQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNk
ZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRp
b24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisgICAgdm9p
ZCBydW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzOworICAg
ICAgICBIYXNoU2V0PFZhbHVlKj4gdmFsdWVJblByb2M7CisgICAgICAgIEhhc2hTZXQ8VmFsdWUq
PiB2YWx1ZUluQmxvY2s7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJv
Y2VkdXJlKSB7CisgICAgICAgICAgICBibG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgICAgIGZv
ciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKQorICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5h
ZGQodmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3By
b2NlZHVyZS52YWx1ZXMoKSkKKyAgICAgICAgICAgIHZhbHVlSW5Qcm9jLmFkZCh2YWx1ZSk7CisK
KyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykKKyAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlSW5CbG9jay5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJbkJsb2NrKQorICAgICAgICAgICAgVkFM
SURBVEUodmFsdWVJblByb2MuY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOworCisg
ICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2MpIHsKKyAgICAgICAgICAgIGZv
ciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWVJblByb2MuY29udGFpbnMoY2hpbGQpLCAoIkF0ICIsICp2YWx1ZSwgIi0+Iiwg
cG9pbnRlckR1bXAoY2hpbGQpKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgICAgIFZBTElE
QVRFKAorICAgICAgICAgICAgICAgICAgICBibG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJB
dCAiLCAqYmxvY2ssICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvcikpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEV4cGFuZCB0aGlzIHZh
bGlkYXRpb24gcGhhc2UuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA0ODAKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOX0RVRV9U
T19DUkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGlu
ZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAg
ICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVz
c2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAg
ICAgICAgICAgb3V0LnByaW50KCJCMyBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAg
ICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5l
TnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAi
XG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgIEFmdGVyICIsIG1fcHJvY2VkdXJlLmxh
c3RQaGFzZU5hbWUoKSwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50
b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2Up
OworICAgICAgICBpZiAobV9kdW1wQmVmb3JlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZv
cmUgIiwgbV9wcm9jZWR1cmUubGFzdFBoYXNlTmFtZSgpLCAiOlxuIik7CisgICAgICAgICAgICBk
YXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygiQXQgdGlt
ZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFMb2cobV9wcm9jZWR1cmUpOworCisgICAg
ICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25G
YWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5jdGlvbiwgY29uZGl0aW9uKTsKKyAgICAg
ICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAg
ICBjb25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3Bh
Y2UKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogZHVt
cEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKHByb2NlZHVyZSwgZHVtcEJlZm9y
ZSk7CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbGlkYXRlX2gKKyNk
ZWZpbmUgQjNWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCit2b2lkIHZhbGlkYXRlKFBy
b2NlZHVyZSYsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUgPSBudWxscHRyKTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgor
I2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NvbnN0IGNoYXIq
IGNvbnN0IFZhbHVlOjpkdW1wUHJlZml4ID0gIkAiOworCitWYWx1ZTo6flZhbHVlKCkKK3sKK30K
Kwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdmFsdWUpCit7CisgICAg
Ly8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNlbWVudCBv
ZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBsYWluIElk
ZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd2Ug
bmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFj
ZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4KKwor
ICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5cGU7Cisg
ICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhp
cy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisK
KyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+
VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgSWRlbnRpdHks
IHR5cGUsIG9yaWdpbiwgdmFsdWUpOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0
aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNl
V2l0aE5vcCgpCit7CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIE9yaWdpbiBv
cmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOwor
ICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworCisgICAgdGhpcy0+
VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgTm9wLCBWb2lk
LCBvcmlnaW4pOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNl
bWVudCA9IHJlcGxhY2VtZW50OworfQorCit2b2lkIFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2
b2lkIFZhbHVlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX3R5cGUsICIgIiwgKnRoaXMsICIgPSAiLCBtX29wY29kZSk7CisKKyAgICBvdXQucHJp
bnQoIigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChWYWx1ZSogY2hpbGQg
OiBjaGlsZHJlbigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGNoaWxk
KSk7CisKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJpbmdPdXQ7CisgICAgZHVtcE1ldGEoc3Ry
aW5nT3V0KTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKKyAg
ICBpZiAoc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cmluZyk7
CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRT
dHJlYW0mKSBjb25zdAoreworfQorCitUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUs
IFZhbHVlKiBmaXJzdENoaWxkKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJ
ZGVudGl0eToKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAg
ICBjYXNlIERpdjoKKyAgICBjYXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2Ug
Qml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6
CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAg
IGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0
Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHBv
aW50ZXJUeXBlKCk7CisgICAgY2FzZSBTRXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBjYXNl
IFRydW5jOgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RF
cXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2Fz
ZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAg
ICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6
CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQz
MjoKKyAgICAgICAgcmV0dXJuIEludDY0OworICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRv
RDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJu
IFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIK
KyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgU3RhY2tt
YXA7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgc3RhdGlj
IGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRz
KE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAg
IHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8v
IE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcg
dmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJu
IG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmln
aW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMg
dGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3R5cGU7IH0KKworICAgIC8vIFRoaXMgaXMgdXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5vdGUg
dGhhdCB0aGlzIGlzIG9ubHkgdmFsaWQgZm9yIG5vbi12b2lkIHZhbHVlcy4KKyAgICBBaXI6OkFy
Zzo6VHlwZSBhaXJUeXBlKCkgY29uc3QgeyByZXR1cm4gQWlyOjpBcmc6OnR5cGVGb3JCM1R5cGUo
dHlwZSgpKTsgfQorCisgICAgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2No
aWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVl
Kik7CisgICAgdm9pZCByZXBsYWNlV2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisg
ICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdh
bnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1l
bnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1bWVudFJlZ1Zh
bHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAg
Ly8gICAgIHRoaW5ncworICAgIC8vIH0KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4g
bnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2Ug
dGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1
cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7CisgICAgCisgICAg
Ym9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAg
IAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25z
dDsKKworICAgIGJvb2wgaGFzSW50KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0
OworICAgIGJvb2wgaXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0Rv
dWJsZSgpIGNvbnN0OworICAgIGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgU3RhY2tt
YXAqIHN0YWNrbWFwKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKworcHJvdGVjdGVkOgorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJv
Y2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4
cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxp
Y2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAg
ICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBt
X2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAg
Ly8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hlbiB0
aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6
IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1f
dHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAg
IC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0
eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNv
ZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2Rl
KG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQor
ICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENo
aWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZv
ciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2Rl
IGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKKyAgICBl
eHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdp
bikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkK
KyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAgICAgICAsIG1f
b3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZh
cmFyZ3MuCisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4p
CisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisg
ICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAg
ICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBz
dGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8g
VGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAg
dW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7
CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJl
bjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21w
dXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2Vk
IGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorfTsKKworY2xhc3MgRGVlcFZhbHVl
RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVlRHVtcChjb25zdCBWYWx1ZSogdmFsdWUpCisg
ICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAg
ICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFZhbHVl
KiBtX3ZhbHVlOworfTsKKworaW5saW5lIERlZXBWYWx1ZUR1bXAgZGVlcER1bXAoY29uc3QgVmFs
dWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVwVmFsdWVEdW1wKHZhbHVlKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlSW5saW5l
c19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgi
CisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
VCogVmFsdWU6OmFzKCkKK3sKKyAgICBpZiAoVDo6YWNjZXB0cyhvcGNvZGUoKSkpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdCBUKiBWYWx1ZTo6YXMoKSBjb25zdAoreworICAg
IHJldHVybiBjb25zdF9jYXN0PFZhbHVlKj4odGhpcyktPmFzPFQ+KCk7Cit9CisKK2lubGluZSBi
b29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZh
bHVlPigpOworfQorCitpbmxpbmUgaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wg
VmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDY0VmFsdWU+
KCk7Cit9CisKK2lubGluZSBpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1
ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSB8fCBoYXNJbnQ2NCgp
OworfQorCitpbmxpbmUgaW50NjRfdCBWYWx1ZTo6YXNJbnQoKSBjb25zdAoreworICAgIHJldHVy
biBoYXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNJbnQ2NCgpOworfQorCitpbmxpbmUgYm9vbCBW
YWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkg
JiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0RvdWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKworaW5s
aW5lIGRvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25z
dERvdWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQorCitpbmxpbmUgU3RhY2ttYXAqIFZhbHVlOjpz
dGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4o
KSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2ttYXA7CisgICAgaWYgKFBhdGNocG9pbnRW
YWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJu
ICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFs
dWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQp
IHsKKyAgICBjYXNlIEFueToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCIo
Iiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNr
QXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCIo
IiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0
Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmludCgi
QW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6
CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91
dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0
YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmlu
dCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVS
ZXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Ly8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25zIGF0
IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRpb24g
YW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3JjZXMg
YSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4gQjMg
dGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5IHRo
YXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6CisgICAg
ZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMg
bWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uIEFzIGFuCisgICAgICAg
IC8vIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cu
IFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZvciB0aGUKKyAgICAgICAgLy8gcmlnaHQgb3BlcmFuZCAo
aS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVja011bC4KKyAgICAgICAgQW55LAorCisgICAgICAgIC8v
IEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBp
Y2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQorICAgICAgICAvLyByZWdpc3RlciB0aGF0
IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIhCisgICAgICAgIFNvbWVSZWdpc3RlciwKKworICAgICAg
ICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFy
IHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMg
dGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNrZWQuCisgICAgICAgIFJlZ2lzdGVyLAorCisg
ICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0
IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJdCdzIG5vdCBhIHZhbGlkCisgICAgICAgIC8vIGlucHV0
IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBTdGFjaywKKworICAgICAgICAvLyBBcyBhbiBpbnB1
dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUg
YXJndW1lbnQgYXJlYSBhdCBzb21lCisgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgLy8gRklY
TUU6IFRoZSBTdGFja21hcFNwZWNpYWwgY2xhc3MgbmVlZHMgdG8gYWNjb3VudCBmb3IgdGhlIGZh
Y3QgdGhhdCB0aGVzZSBkb24ndCB0dXJuIGludG8KKyAgICAgICAgLy8gQWlyIG9wZXJhbmRzLgor
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTQw
CisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJl
c2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1
ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9OworICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAg
ICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChS
ZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdpc3RlcikKKyAgICAgICAgLCBtX3ZhbHVlKHJl
Zy5pbmRleCgpKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVnKFJlZyBy
ZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXAocmVnKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKQorICAgIHsKKyAgICAg
ICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAg
ICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zmc2V0RnJvbUZQOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50KGludHB0cl90IG9m
ZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gb2Zm
c2V0RnJvbVNQOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3Vs
dC5tX3ZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c3RhdGljIFZhbHVlUmVwIGNvbnN0YW50RG91YmxlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVl
KSk7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisK
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFu
eTsgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fdmFsdWUpOwor
ICAgIH0KKworICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGlu
dHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBj
b25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludHB0cl90PihtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
Q29uc3RhbnQpOworICAgICAgICByZXR1cm4gbV92YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUg
ZG91YmxlVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxk
b3VibGU+KHZhbHVlKCkpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIEtpbmQgbV9raW5kOworICAgIGludDY0X3QgbV92YWx1ZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKwordm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOwor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM1ZhbHVlUmVwX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVy
YXRlX3BhdHRlcm5fbWF0Y2hlci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU1MCBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFT
IElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JT
CisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKworJHZhcklu
ZGV4ID0gMAorZGVmIG5ld1ZhcgorICAgICR2YXJJbmRleCArPSAxCisgICAgIl90bXAjeyR2YXJJ
bmRleH0iCitlbmQKKworY2xhc3MgUHJvZHVjdGlvbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4s
IDpuYW1lLCA6dmFyTmFtZSwgOmFub255bW91cywgOm9wY29kZSwgOmNoaWxkcmVuCisKKyAgICBk
ZWYgaW5pdGlhbGl6ZShvcmlnaW4sIG5hbWUsIG9wY29kZSwgY2hpbGRyZW4pCisgICAgICAgIEBv
cmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBhbm9ueW1vdXMg
PSAobmFtZSA9PSBuaWwgb3IgbmFtZSA9fiAvXEFcJChbMC05XSspXFovKQorICAgICAgICBAdmFy
TmFtZSA9IEBhbm9ueW1vdXMgPyBuZXdWYXIgOiBuYW1lID1+IC9cQVwkLyA/ICQnIDogbmFtZQor
ICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAgICAgIEBjaGlsZHJlbiA9IGNoaWxkcmVuID8g
Y2hpbGRyZW4gOiBbXQorICAgIGVuZAorCisgICAgZGVmIGhhc09wY29kZQorICAgICAgICBvcGNv
ZGUgIT0gbmlsCisgICAgZW5kCisKKyAgICBkZWYgZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAg
ICBjaGlsZHJlbi5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBjaGlsZCwgaW5kZXgg
fAorICAgICAgICAgICAgeWllbGQgdmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLm5h
bWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC52YXJOYW1lLAorICAgICAgICAgICAgICAgICAg
Y2hpbGQuYW5vbnltb3VzID8gKGNoaWxkLm9wY29kZSA/IDphbm9uSW50ZXJuYWwgOiA6YW5vbk9w
ZXJhbmQpIDogKGNoaWxkLm9wY29kZSA/IDppbnRlcm5hbCA6IDpvcGVyYW5kKSwKKyAgICAgICAg
ICAgICAgICAgIGluZGV4CisgICAgICAgICAgICBjaGlsZC5lYWNoVmFyaWFibGUoJnByb2MpCisg
ICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBNYXRjaGVyCisgICAgYXR0cl9yZWFkZXIg
Om5hbWUsIDpwcm9kdWN0aW9ucworCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgcHJvZHVjdGlv
bnMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBwcm9kdWN0
aW9ucworICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxl
TmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGlu
ZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1i
ZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7
ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAg
ICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGluaXRpYWxpemUo
b3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmlu
ZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYg
b3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisg
ICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90aGVy
CisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0
fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1l
bnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlzZSAiUGFyc2Ug
ZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBl
cnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQK
KworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZp
bGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBu
b3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5d
KikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxuLwor
ICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0g
MQorICAgICAgICB3aGVuIC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKS8KKyAgICAgICAg
ICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciks
ICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAjIHdoaXRlc3Bh
Y2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVs9KCksXS8KKyAgICAgICAgICAgIHJlc3VsdCA8
PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAg
ICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZp
bGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4y
MF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisg
ICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICAjIFdl
IGNhbiBleHRlbmQgdGhpcyBhcyB3ZSBhZGQgbW9yZSBrZXl3b3Jkcy4gTGlrZSwgd2UgbWlnaHQg
d2FudCAiaW5jbHVkZSIgZXZlbnR1YWxseS4KKyAgICB0b2tlbiA9fiAvXEEoKG1hdGNoZXIpfChp
bmNsdWRlKSlcWi8KK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+
IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10qKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tl
bikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFt
ZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9
IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAg
ZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAg
IGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAg
dG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYg
Y29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5k
IG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNl
IGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisg
ICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBw
YXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisg
ICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAg
ICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQg
aWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNl
CisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9k
dWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAgaWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5h
bWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNoaWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFt
ZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisgICAgICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0
aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQor
ICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBl
bmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVm
IHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1hdGNoZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1l
ID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAg
ICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisK
KyAgICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2Ug
ZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUuCisgICAgICAgICAgICBwcm9kdWN0aW9uID0gcGFy
c2VQcm9kdWN0aW9uCisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRl
dGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRlIHByb2R1Y3Rpb24iKQorICAgICAgICAgICAg
ZW5kCisKKyAgICAgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICAgICAgfQor
CisgICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJOYW1lLCBwcm9kdWN0aW9ucykKKyAgICBlbmQK
KworICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAgICAgICAgb3JpZ2luID0gdG9rZW4ub3JpZ2lu
CisgICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIGlmIHRva2VuID09
ICI9IgorICAgICAgICAgICAgY29uc3VtZSgiPSIpCisgICAgICAgICAgICBvcGNvZGUgPSBjb25z
dW1lSWRlbnRpZmllcgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgIGVsc2lmIHRv
a2VuID09ICIoIgorICAgICAgICAgICAgY29uc3VtZSgiKCIpCisgICAgICAgICAgICBvcGNvZGUg
PSBuYW1lCisgICAgICAgICAgICBuYW1lID0gbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJldHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG5pbCwgbmlsKQorICAgICAgICBl
bmQKKyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgbG9vcCB7Cisg
ICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKworICAgICAgICAgICAgYWRkVW5pcXVl
KG5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1Y3Rpb24pCisKKyAgICAgICAgICAgIGJyZWFr
IGlmIHRva2VuID09ICIpIgorICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgIH0KKwor
ICAgICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIpIgorICAgICAgICBhZHZhbmNlCisKKyAgICAg
ICAgUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBvcGNvZGUsIHByb2R1Y3Rpb25zKQorICAg
IGVuZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElP
OjpyZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCittYXRjaGVyID0gcGFyc2VyLnBhcnNlCisKK2Ns
YXNzIFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIgOmluZGV4TWFwLCA6cHJvZHVjdGlvbnMKKyAg
ICAKKyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICBA
aW5kZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBpbmRleExp
c3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcCA8
PCBpbmRleAorICAgICAgICAgICAgQHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb25zW2luZGV4XQor
ICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYgbWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAg
ICAgICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAg
IEBpbmRleE1hcFtpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorZW5kCisKKyRzdGRlcnIucHV0
cyAiR2VuZXJhdGluZyBjb2RlIGZvciAje2ZpbGVOYW1lfS4iCisKK0ZpbGUub3BlbigiQjMiICsg
bWF0Y2hlci5uYW1lICsgIi5oIiwgInciKSB7CisgICAgfCBvdXRwIHwKKworICAgIG91dHAucHV0
cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7Zmls
ZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKworICAgIG91dHAucHV0cyAiI2lmbmRlZiBCMyN7bWF0
Y2hlci5uYW1lfV9oIgorICAgIG91dHAucHV0cyAiI2RlZmluZSBCMyN7bWF0Y2hlci5uYW1lfV9o
IgorICAgIAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAKKyAg
ICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyIKKworICAgIG91dHAu
cHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRvcj4iCisgICAgb3V0cC5wdXRzICJib29sIHJ1
biN7bWF0Y2hlci5uYW1lfShWYWx1ZSogX3ZhbHVlLCBBZGFwdG9yJiBhZGFwdG9yKSIKKyAgICBv
dXRwLnB1dHMgInsiCisKKyAgICAjIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IGVtaXQgcHJvcGVy
bHkgaW5kZW50ZWQgY29kZSwgYmVjYXVzZSBpdCdzIGEgcmVjdXJzaXZlIGVtaXR0ZXIuIElmIHlv
dQorICAgICMgd2FudCB0byBzZWUgdGhlIGNvZGUgbmljZWx5IGZvcm1hdHRlZCwgb3BlbiBpdCBp
biBhIGdvb2QgdGV4dCBlZGl0b3IgYW5kIGFzayBpdCB0byBmb3JtYXQgaXQKKyAgICAjIGZvciB5
b3UuCisKKyAgICAjIEluIG9kZCBzaXR1YXRpb25zLCB3ZSBtYXkgbm90IHVzZSB0aGUgaW5wdXQg
dmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICBvdXRw
LnB1dHMgIlVOVVNFRF9QQVJBTShfdmFsdWUpOyIKKyAgICAgICAgCisgICAgIyBUaGlzIGp1c3Qg
cHJvdGVjdHMgdGhlIGNhbGxlciBmcm9tIGhhdmluZyB0byB3b3JyeSBhYm91dCBwcm9kdWN0aW9u
cyBoYXZpbmcgZGlmZmVyZW50IGxlbmd0aHMuCisgICAgZGVmIG1hdGNoTGVuZ3RoKG91dHAsIHZh
bHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAgICBw
cm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBp
bmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5k
ZXhMaXN0c1stMV1bMF1dLmNoaWxkcmVuLmxlbmd0aCA9PSBwcm9kdWN0aW9uLmNoaWxkcmVuLmxl
bmd0aAorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAg
ICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBsZW5ndGggPSBwcm9kdWN0aW9uc1tpbmRleExp
c3RbMF1dLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgaWYgbGVuZ3RoID4gMAorICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dmFsdWVOYW1lfS0+Y2hpbGRyZW4oKS5zaXplKCkg
Pj0gI3tsZW5ndGh9KSB7IgorICAgICAgICAgICAgICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisK
KyAgICAjIFRoaXMgZWZmaWNpZW50bHkgc2VsZWN0cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgcHJv
ZHVjdGlvbnMuIEl0IGFzc3VtZXMgdGhhdCBwcm9kdWN0aW9ucworICAgICMgYXJlIG5vdCBkdXBs
aWNhdGVkLiBJdCB5aWVsZHMgdGhlIGluZGV4IG9mIHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBhbmQg
dGhlIGNvcm91dGluZSBpcworICAgICMgcmVzcG9uc2libGUgZm9yIGVtaXR0aW5nIHNwZWNpZmlj
IGNvZGUgZm9yIHRoYXQgcHJvZHVjdGlvbi4gVGhlIGNvcm91dGluZSBpcyBnaXZlbiBsaXN0cyBv
ZgorICAgICMgaW5kaWNlcyBvZiBwb3NzaWJseS1tYXRjaGluZyBwcm9kdWN0aW9ucy4KKyAgICBk
ZWYgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAg
ICAjIEZpcnN0LCBzcGxpdCB0aGUgcHJvZHVjdGlvbnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJvZHVj
dGlvbnMgd2l0aCBhbiBvcGNvZGUgYW5kIHByb2R1Y3Rpb25zCisgICAgICAgICMgd2l0aG91dCBv
bmUuCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dp
dGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAg
ICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmhh
c09wY29kZSA9PSBwcm9kdWN0aW9uLmhhc09wY29kZQorICAgICAgICAgICAgICAgIGluZGV4TGlz
dHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhM
aXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgICAgICAKKyAg
ICAgICAgIyBOb3csIGVtaXQgcGF0dGVybiBtYXRjaGluZyBjb2RlLiBXZSBkbyBpdCBkaWZmZXJl
bnRseSBmb3IgbGlzdHMgd2l0aCBhbiBvcGNvZGUgdGhhbiBmb3IKKyAgICAgICAgIyBsaXN0cyB3
aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5k
ZXhMaXN0IHwKKyAgICAgICAgICAgIGlmIHByb2R1Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFzT3Bj
b2RlCisgICAgICAgICAgICAgICAgIyBOb3csIHdlIHNwbGl0IHRoaXMgaW5kZXggbGlzdCBpbnRv
IGdyb3VwcyBmb3IgZWFjaCBvcGNvZGUuCisgICAgICAgICAgICAgICAgZ3JvdXBzID0ge30KKyAg
ICAgICAgICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgaW5k
ZXggfAorICAgICAgICAgICAgICAgICAgICBwcm9kdWN0aW9uID0gcHJvZHVjdGlvbnNbaW5kZXhd
CisgICAgICAgICAgICAgICAgICAgIGlmIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0gPDwgaW5kZXgKKyAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgZ3JvdXBzW3By
b2R1Y3Rpb24ub3Bjb2RlXSA9IFtpbmRleF0KKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRlbWVu
dC4KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5vcGNv
ZGUoKSkgeyIKKyAgICAgICAgICAgICAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgICAg
ICAgICAgICAgfCBvcGNvZGUsIHN1YkluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiY2FzZSAje29wY29kZX06IgorICAgICAgICAgICAgICAgICAgICBzdWJNYXRjaCA9
IFN1Yk1hdGNoLm5ldyhzdWJJbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAg
ICAgICBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7
CisgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAg
ICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1h
dGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgIG1hdGNoTGVu
Z3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAg
ICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRj
aC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRha2VzIHByb2R1Y3Rpb25zIHRoYXQg
aGF2ZSB0aGUgc2FtZSBvcGNvZGUgYW5kIHRoZSBzYW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBmcm9t
IHRoZW0gYmFzZWQgb24KKyAgICAjIHRoZSBwcm9kdWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29sdW1u
LgorICAgIGRlZiBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBjb2x1
bW5JbmRleCkKKyAgICAgICAgaWYgY29sdW1uSW5kZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hpbGRy
ZW4ubGVuZ3RoCisgICAgICAgICAgICB5aWVsZCAoMC4uLihwcm9kdWN0aW9ucy5zaXplKSkudG9f
YQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAgIGVuZAorCisgICAgICAgIHN1YlZhbHVlID0g
bmV3VmFyCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgIG91dHAucHV0
cyAiVmFsdWUqICN7c3ViVmFsdWV9ID0gI3t2YWx1ZU5hbWV9LT5jaGlsZCgje2NvbHVtbkluZGV4
fSk7IgorCisgICAgICAgICMgV2UgbWF5IG5vdCB1c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUgY29t
cGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9Q
QVJBTSgje3N1YlZhbHVlfSk7IgorICAgICAgICAKKyAgICAgICAgc3ViUHJvZHVjdGlvbnMgPSBw
cm9kdWN0aW9ucy5tYXAgeworICAgICAgICAgICAgfCBwcm9kdWN0aW9uIHwKKyAgICAgICAgICAg
IHByb2R1Y3Rpb24uY2hpbGRyZW5bY29sdW1uSW5kZXhdCisgICAgICAgIH0KKworICAgICAgICBt
YXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHN1YlZhbHVlLCBzdWJQcm9kdWN0aW9ucykgeworICAgICAg
ICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXco
aW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZh
bHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMsIGNvbHVtbkluZGV4ICsgMSkgeworICAgICAg
ICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5t
YXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgb3V0cC5wdXRzICJ9IgorICAgIGVuZAorCisgICAgZGVmIG1hdGNoUmVjdXJzaXZlbHkob3V0
cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhvdXRw
LCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8Cisg
ICAgICAgICAgICAjIFdlIGFyZSBndWFyYW50ZWVkIHRoYXQgdGhpcyBpbmRleCBsaXN0IGNvbnRh
aW5zIHByb2R1Y3Rpb25zIHdpdGggdGhlIHNhbWUgb3Bjb2RlIGFuZAorICAgICAgICAgICAgIyB0
aGUgc2FtZSBsZW5ndGguCisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRl
eExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVO
YW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgMCkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhM
aXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhM
aXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBtYXRjaFJlY3Vy
c2l2ZWx5KG91dHAsICJfdmFsdWUiLCBtYXRjaGVyLnByb2R1Y3Rpb25zKSB7CisgICAgICAgIHwg
aW5kZXhMaXN0IHwKKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRl
eCB8CisgICAgICAgICAgICBwcm9kdWN0aW9uID0gbWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRleF0K
KyAgICAgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUq
ICN7cHJvZHVjdGlvbi52YXJOYW1lfSA9IF92YWx1ZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMg
IlVOVVNFRF9QQVJBTSgje3Byb2R1Y3Rpb24udmFyTmFtZX0pOyIKKyAgICAgICAgICAgIGludGVy
bmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAg
ICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAg
ICAgICAgICAgIHNlZW4gPSB7fQorCisgICAgICAgICAgICAjIEZJWE1FOiBXZSB3YW50IHRvIGJl
IGFibGUgdG8gY29tYmluZSBwYXR0ZXJuIG1hdGNoZXJzLCBsaWtlIGhhdmUgdGhlIHBhdHRlcm4g
bWF0Y2ggcnVsZQorICAgICAgICAgICAgIyBmb3IgQnJhbmNoIGluIHRoZSBsb3dlcmluZyBwYXRj
aGVyIGRlbGVnYXRlIHRvIGEgbWF0Y2hlciB0aGF0IGNhbiBkZWR1Y2UgdGhlIGtpbmQgb2YKKyAg
ICAgICAgICAgICMgY29tcGFyaXNvbiB0aGF0IHdlJ3JlIGRvaW5nLiBXZSBjb3VsZCB0aGVuIHJl
dXNlIHRoYXQgbGF0dGVyIG1hdGNoZXIgZm9yIENoZWNrIGFuZAorICAgICAgICAgICAgIyB1bmZ1
c2VkIGNvbXBhcmUuIFRoZSBrZXkgdG8gbWFraW5nIHN1Y2ggYSBkZWxlZ2F0aW9uIHdvcmsgaXMg
dG8gaGF2ZSB0aGUgaW5uZXIgbWF0Y2hlcgorICAgICAgICAgICAgIyAodGhlIGNvbXBhcmlzb24g
bWF0Y2hlciBpbiB0aGlzIGNhc2UpIGtlZXAgY2FzY2FkaW5nIGlmIGl0IGVuY291bnRlcnMgYSBy
dWxlIHRoYXQKKyAgICAgICAgICAgICMgcHJvZHVjZXMgc29tZXRoaW5nIHRoYXQgdGhlIG91dGVy
IG1hdGNoZXIgY2Fubm90IGhhbmRsZS4gSXQncyBub3Qgb2J2aW91cyB0aGF0IHRoZQorICAgICAg
ICAgICAgIyBjb21wYXJpc29uIG1hdGNoZXIgd291bGQgbmVlZCB0aGlzLCBidXQgdGhlIGFkZHJl
c3MgbWF0Y2hlciBwcm9iYWJseSB3aWxsLiBGb3IgZXhhbXBsZSwKKyAgICAgICAgICAgICMgd2Ug
bWF5IGhhdmUgYSBTdG9yZUFkZExvYWQgcnVsZSB0aGF0IGRlbGVnYXRlcyB0byB0aGUgYWRkcmVz
cyBtYXRjaGVyLCBhbmQgdGhlIGFkZHJlc3MKKyAgICAgICAgICAgICMgbWF0Y2hlciBtYXkgcHJv
ZHVjZSBhbiBhZGRyZXNzIHRoYXQgdGhlIGxvd2VyaW5nIG1hdGNoZXIgY2Fubm90IHVzZSBiZWNh
dXNlIHdoaWxlIHRoZQorICAgICAgICAgICAgIyBBZGQgZm9ybSBkb2VzIGFjY2VwdCBhZGRyZXNz
ZXMgaXQgbWF5IG5vdCBhY2NlcHQgdGhlIHBhcnRpY3VsYXIgYWRkcmVzcyB0aGF0IHRoZQorICAg
ICAgICAgICAgIyBhZGRyZXNzIG1hdGNoZXIgcHJvZHVjZWQuIEluIHRoYXQgY2FzZSwgaW5zdGVh
ZCBvZiBnaXZpbmcgdXAgb24gdGhlIFN0b3JlQWRkTG9hZCBydWxlLAorICAgICAgICAgICAgIyB3
ZSB3YW50IHRoZSBhZGRyZXNzIG1hdGNoZXIgdG8ganVzdCB0cnkgYSBkaWZmZXJlbnQgYWRkcmVz
cy4gVGhlIGNvbXBhcmlzb24gbWF0Y2hlcgorICAgICAgICAgICAgIyBtaWdodCB3YW50IHRoaXMg
anVzdCBmb3IgYmV0dGVyIGNvbnRyb2xsaW5nIHdoZW4gdG8gcGluIHZhcmlhYmxlcy4gQ3VycmVu
dGx5LCBpZiBpdAorICAgICAgICAgICAgIyBjb25zdHJ1Y3RlZCBzb21lIGNvZGUsIGl0IHdvdWxk
IGFsc28gcGluIHRoZSB2YXJpYWJsZXMgdGhhdCBpdCB1c2VkLiBJZiB0aGUgbG93ZXJpbmcKKyAg
ICAgICAgICAgICMgbWF0Y2hlciB0aGVuIGRlY2lkZWQgdG8gcmVqZWN0IHRoZSBjb2RlIGNyZWF0
ZWQgYnkgdGhlIGNvbXBhcmlzb24gbWF0Y2hlciwgaXQgd291bGQKKyAgICAgICAgICAgICMgaGF2
ZSBhIGhhcmQgdGltZSAidW5waW5uaW5nIiB0aG9zZSB2YXJpYWJsZXMuIEJ1dCBpZiB3ZSBoYWQg
c29tZSBraW5kIG9mIGRlbGVnYXRpb24sIHdlCisgICAgICAgICAgICAjIGNvdWxkIGhhdmUgdGhl
IHBpbm5pbmcgb2YgdGhlIGNvbXBhcmlzb24gbWF0Y2hlciBoYXBwZW4gb25seSBpZiB0aGUgbG93
ZXJpbmcgbWF0Y2hlcgorICAgICAgICAgICAgIyBhY2NlcHRlZC4KKyAgICAgICAgICAgICMKKyAg
ICAgICAgICAgICMgVGhpcyBjb3VsZCBhbGwgYmUgYWNjb21wbGlzaGVkIGJ5IGhhdmluZyB0cnlC
bGFoKCkgcmV0dXJuIHNvbWV0aGluZywgYW5kIGhhdmUgdGhlCisgICAgICAgICAgICAjIG1hdGNo
ZXIgYWxzbyB0YWtlIGEgZnVuY3RvciBhcmd1bWVudCB0aGF0IGFjY2VwdHMgd2hhdCB0cnlCbGFo
KCkgcmV0dXJucy4gU28gaW5zdGVhZCBvZgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBp
ZiAodHJ5QmxhaCgpKSBvazsKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgV2Ugd291bGQg
aGF2ZToKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgaWYgKGZ1bmN0b3IodHJ5QmxhaCgp
KSBvazsKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgV2hlbiBsb3dlcmluZyBkZWNpZGVk
IHRvIGRlbGVnYXRlIHRvIHRoZSBhZGRyZXNzIG9yIGNvbXBhcmlzb24gbWF0Y2hlciwgaXQgY291
bGQgc3VwcGx5CisgICAgICAgICAgICAjIGEgZnVuY3RvciB0aGF0IGRlY2lkZXMgd2hldGhlciB0
aGUgdGhpbmcgdGhhdCB0aGUgc3ViLW1hdGNoZXIgc2VsZWN0ZWQgaXMgaW5kZWVkCisgICAgICAg
ICAgICAjIHVzZWZ1bC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgSW4gdGhlIG5lYXIg
dGVybSwgd2UgcHJvYmFibHkgd29uJ3QgbmVlZCB0aGlzLiBCdXQgd2Ugd2lsbCBkZWZpbml0ZWx5
IG5lZWQgaXQgYXMgd2UKKyAgICAgICAgICAgICMgZXhwYW5kIHRvIGVmZmljaWVudGx5IHN1cHBv
cnQgbW9yZSBwbGF0Zm9ybXMuIE9uIFg4Nl82NCwgYW55IGJyYW5jaGluZyBpbnN0cnVjdGlvbiBp
cworICAgICAgICAgICAgIyB1c2FibGUgaW4gYW55IGNvbnRleHQsIGFuZCBhbnkgYWRkcmVzcyBz
aG91bGQgYmUgdXNhYmxlIGluIGFueSBjb250ZXh0IChhbmQgdGhlIG9ubHkKKyAgICAgICAgICAg
ICMgY2FzZXMgd2hlcmUgaXQgd291bGRuJ3QgYmUgaXMgaWYgd2UgaGF2ZSBob2xlcyBpbiB0aGUg
TWFjcm9Bc3NlbWJsZXIpLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTU5CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxlIHsKKyAgICAgICAgICAgICAgICB8IHBhcmVu
dFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJOYW1lLCBraW5kLCBpbmRleCB8CisgICAgICAg
ICAgICAgICAgbG9hZEV4cHIgPSAiI3twYXJlbnRWYXJOYW1lfS0+Y2hpbGQoI3tpbmRleH0pIgor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGlmIHNlZW5bY2hpbGRWYXJOYW1lXQor
ICAgICAgICAgICAgICAgICAgICB0bXAgPSBuZXdWYXIKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJWYWx1ZSogI3t0bXB9ID0gI3tsb2FkRXhwcn07IgorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICgje3RtcH0gPT0gI3tjaGlsZFZhck5hbWV9KSB7IgorICAgICAgICAg
ICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgc2VlbltjaGlsZFZhck5hbWVdID0gdHJ1ZQorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3tjaGlsZFZhck5hbWV9
ID0gI3tsb2FkRXhwcn07IgorCisgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IENvbnNpZGVy
IGdldHRpbmcgcmlkIG9mIHRoZSAkIHByZWZpeC4KKyAgICAgICAgICAgICAgICAgICAgIyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTI3CisgICAgICAgICAgICAg
ICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJC8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGNoaWxkTmFtZSA9fiAvXEFcJChbMC05XSspXFovCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5pc0ludCgjeyQxfSkpIHsiCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5oYXNJbnQoKSkgeyIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAg
ICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50
ZXJuYWwgb3Iga2luZCA9PSA6YW5vbkludGVybmFsCisgICAgICAgICAgICAgICAgICAgIG9wZXJh
bmRBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOm9wZXJhbmQgb3Iga2luZCA9
PSA6YW5vbk9wZXJhbmQKKyAgICAgICAgICAgICAgICAgICAgdHJ5QXJndW1lbnRzIDw8IGNoaWxk
VmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBvciBraW5kID09IDpvcGVyYW5kCisgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChh
ZGFwdG9yLmFjY2VwdFJvb3QoX3ZhbHVlKSIKKyAgICAgICAgICAgIHVubGVzcyBpbnRlcm5hbEFy
Z3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IuYWNj
ZXB0SW50ZXJuYWxzKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICB1bmxlc3Mgb3BlcmFuZEFyZ3VtZW50cy5lbXB0eT8K
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IuYWNjZXB0T3BlcmFuZHMoIiAr
IG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLnRyeSN7cHJvZHVjdGlvbi5uYW1lfSgiICsg
dHJ5QXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSkgeyIpCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImFkYXB0b3IuYWNjZXB0Um9vdExhdGUoX3ZhbHVlKTsiCisgICAgICAgICAgICB1bmxlc3MgaW50
ZXJuYWxBcmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9y
LmFjY2VwdEludGVybmFsc0xhdGUoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAi
KTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRz
LmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2NlcHRPcGVyYW5k
c0xhdGUoIiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSArICIpOyIKKyAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgICAgICBudW1TY29wZXMudGltZXMgeworICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAi
fSIKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBvdXRwLnB1dHMgIiAgICByZXR1cm4gZmFs
c2U7IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMyIKKworICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEIzI3ttYXRjaGVyLm5h
bWV9X2giCit9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Nv
bnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
Q29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkIzTWVt
b3J5VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiSW5pdGlhbGl6
ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVm
ZmVyLmgiCisjaW5jbHVkZSAiVk0uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKworbmFtZXNwYWNlIHsKKwor
Ly8gTm90aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBqdXN0IHVzZSB0aGUgZXhpc3RpbmcgV1RGIGFz
c2VydGlvbiBtYWNoaW5lcnkuCisjZGVmaW5lIENIRUNLKHgpIFJFTEVBU0VfQVNTRVJUKHgpCisK
K1ZNKiB2bTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
VCBjb21waWxlQW5kUnVuKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQoreworICAgIENDYWxsSGVscGVycyBqaXQodm0pOworICAgIGdlbmVyYXRlKHByb2NlZHVy
ZSwgaml0KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOwor
ICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2RlID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVy
LCAoInRlc3RiMyIpKTsKKyAgICBUICgqZnVuY3Rpb24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNl
X2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihjb2RlLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygp
KTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1lbnRzLi4uKTsKK30KKwordm9pZCB0ZXN0NDIo
KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CisgICAgVmFsdWUqIGNvbnN0NDIgPSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFs
dWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNvbnN0NDIpOworCisgICAgQ0hFQ0soY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MpID09IDQyKTsKK30KKwordm9pZCB0ZXN0TG9hZDQyKCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIGludCB4ID0gNDI7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxN
ZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
ICZ4KSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpID09IDQyKTsKK30K
Kwordm9pZCB0ZXN0QXJnKGludCBhcmd1bWVudCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAg
ICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAg
ICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2Ms
IGFyZ3VtZW50KSA9PSBhcmd1bWVudCk7Cit9CisKK3ZvaWQgdGVzdEFkZEFyZ3MoaW50IGEsIGlu
dCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjApLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSk7CisKKyAgICBDSEVDSyhjb21w
aWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikgPT0gYSArIGIpOworfQorCit2b2lkIHRlc3RBZGRB
cmdzMzIoaW50IGEsIGludCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xW
YWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVu
YywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVn
VmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMs
IE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpKTsKKworICAgIENI
RUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBhLCBiKSA9PSBhICsgYik7Cit9CisKK3ZvaWQg
dGVzdFN0b3JlKGludCB2YWx1ZSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludCBzbG90ID0gMHhiYWFkYmVlZjsK
KyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBTdG9yZSwg
T3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBw
cm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1l
bnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAg
ICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90
KSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJl
dHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAwKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIHZhbHVlKSk7
CisgICAgQ0hFQ0soc2xvdCA9PSB2YWx1ZSk7Cit9CisKK3ZvaWQgdGVzdFRydW5jKGludDY0X3Qg
dmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVl
PigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJn
dW1lbnRHUFIwKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIHZhbHVl
KSA9PSBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSk7Cit9CisKK3ZvaWQgdGVzdEFkZDEoaW50IHZh
bHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9y
aWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSkpOworCisgICAgQ0hFQ0soY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MsIHZhbHVlKSA9PSB2YWx1ZSArIDEpOworfQorCit2b2lkIHRl
c3RTdG9yZUFkZExvYWQoaW50IGFtb3VudCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBC
YXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludCBzbG90ID0gMzc7Cisg
ICAgQ29uc3RQdHJWYWx1ZSogc2xvdFB0ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgJnNsb3QpOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4oCisgICAgICAgIHByb2MsIFN0b3JlLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4o
KSwgc2xvdFB0ciksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYW1vdW50KSksCisgICAgICAgIHNsb3RQdHIpOworICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkp
OworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisgICAgQ0hFQ0soc2xv
dCA9PSAzNyArIGFtb3VudCk7Cit9CisKK3ZvaWQgdGVzdFN0b3JlQWRkQW5kTG9hZChpbnQgYW1v
dW50LCBpbnQgbWFzaykKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludCBzbG90ID0gMzc7CisgICAgQ29uc3RQdHJW
YWx1ZSogc2xvdFB0ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgJnNsb3QpOworICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAg
IHByb2MsIFN0b3JlLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisg
ICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJ
bnQzMiwgT3JpZ2luKCksIHNsb3RQdHIpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhbW91bnQpKSwKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBtYXNrKSksCisgICAg
ICAgIHNsb3RQdHIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48
aW50Pihwcm9jKSk7CisgICAgQ0hFQ0soc2xvdCA9PSAoKDM3ICsgYW1vdW50KSAmIG1hc2spKTsK
K30KKworI2RlZmluZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICBkYXRhTG9nKCN0ZXN0ICI6XG4iKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAg
ICB0ZXN0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRh
TG9nKCIgICAgT0shXG4iKTsgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNl
KTsKKwordm9pZCBydW4oKQoreworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAg
IHZtID0gJlZNOjpjcmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisKKyAgICBSVU4odGVzdDQy
KCkpOworICAgIFJVTih0ZXN0TG9hZDQyKCkpOworICAgIFJVTih0ZXN0QXJnKDQzKSk7CisgICAg
UlVOKHRlc3RBZGRBcmdzKDEsIDEpKTsKKyAgICBSVU4odGVzdEFkZEFyZ3MoMSwgMikpOworICAg
IFJVTih0ZXN0QWRkQXJnczMyKDEsIDEpKTsKKyAgICBSVU4odGVzdEFkZEFyZ3MzMigxLCAyKSk7
CisgICAgUlVOKHRlc3RTdG9yZSg0NCkpOworICAgIFJVTih0ZXN0VHJ1bmMoKHN0YXRpY19jYXN0
PGludDY0X3Q+KDEpIDw8IDQwKSArIDQyKSk7CisgICAgUlVOKHRlc3RBZGQxKDQ1KSk7CisgICAg
UlVOKHRlc3RTdG9yZUFkZExvYWQoNDYpKTsKKyAgICBSVU4odGVzdFN0b3JlQWRkQW5kTG9hZCg0
NywgMHhmZmZmKSk7CisgICAgUlVOKHRlc3RTdG9yZUFkZEFuZExvYWQoNDcwMDAwLCAweGZmZmYp
KTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKKyNlbHNlIC8vIEVOQUJMRShCM19K
SVQpCisKK3N0YXRpYyB2b2lkIHJ1bigpCit7CisgICAgZGF0YUxvZygiQjMgSklUIGlzIG5vdCBl
bmFibGVkLlxuIik7Cit9CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCitpbnQgbWFpbihp
bnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgICAgVU5VU0VEX1BBUkFNKGFyZ2MpOworICAgIFVO
VVNFRF9QQVJBTShhcmd2KTsKKyAgICAKKyAgICBydW4oKTsKKyAgICByZXR1cm4gMDsKK30KKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3Rh
Y2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
bGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1
ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsK
KworY29uc3QgYm9vbCB2ZXJib3NlID0gZmFsc2U7CisKK2Jvb2wgYXR0ZW1wdEFzc2lnbm1lbnQo
CisgICAgU3RhY2tTbG90KiBzbG90LCBpbnRwdHJfdCBvZmZzZXRGcm9tRlAsIGNvbnN0IFZlY3Rv
cjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ZGF0YUxvZygiQXR0ZW1wdGluZyB0byBhc3NpZ24gIiwgcG9pbnRlckR1bXAoc2xvdCksICIgdG8g
Iiwgb2Zmc2V0RnJvbUZQLCAiIHdpdGggaW50ZXJmZXJlbmNlICIsIHBvaW50ZXJMaXN0RHVtcChv
dGhlclNsb3RzKSwgIlxuIik7CisKKyAgICAvLyBOZWVkIHRvIGFsaWduIGl0IHRvIHRoZSBzbG90
J3MgZGVzaXJlZCBhbGlnbm1lbnQuCisgICAgb2Zmc2V0RnJvbUZQID0gLVdURjo6cm91bmRVcFRv
TXVsdGlwbGVPZihzbG90LT5hbGlnbm1lbnQoKSwgLW9mZnNldEZyb21GUCk7CisgICAgCisgICAg
Zm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAgICAgaWYgKCFv
dGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IGJvb2wgb3ZlcmxhcCA9IFdURjo6cmFuZ2VzT3ZlcmxhcCgKKyAgICAgICAgICAgIG9mZnNldEZy
b21GUCwKKyAgICAgICAgICAgIG9mZnNldEZyb21GUCArIHN0YXRpY19jYXN0PGludHB0cl90Pihz
bG90LT5ieXRlU2l6ZSgpKSwKKyAgICAgICAgICAgIG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCks
CisgICAgICAgICAgICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpICsgc3RhdGljX2Nhc3Q8aW50
cHRyX3Q+KG90aGVyU2xvdC0+Ynl0ZVNpemUoKSkpOworICAgICAgICBpZiAob3ZlcmxhcCkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAg
ICAgZGF0YUxvZygiQXNzaWduZWQgIiwgcG9pbnRlckR1bXAoc2xvdCksICIgdG8gIiwgb2Zmc2V0
RnJvbUZQLCAiXG4iKTsKKyAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAob2Zmc2V0RnJvbUZQKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBhc3NpZ24oU3RhY2tTbG90KiBzbG90LCBjb25z
dCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgIGRhdGFMb2coIkF0dGVtcHRpbmcgdG8gYXNzaWduICIsIHBvaW50ZXJEdW1wKHNsb3Qp
LCAiIHdpdGggaW50ZXJmZXJlbmNlICIsIHBvaW50ZXJMaXN0RHVtcChvdGhlclNsb3RzKSwgIlxu
Iik7CisgICAgCisgICAgaWYgKGF0dGVtcHRBc3NpZ25tZW50KHNsb3QsIC1zdGF0aWNfY2FzdDxp
bnRwdHJfdD4oc2xvdC0+Ynl0ZVNpemUoKSksIG90aGVyU2xvdHMpKQorICAgICAgICByZXR1cm47
CisKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTbG90cykgeworICAgICAg
ICBpZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgYm9vbCBkaWRBc3NpZ24gPSBhdHRlbXB0QXNzaWdubWVudCgKKyAgICAgICAgICAg
IHNsb3QsIG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkgLSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
c2xvdC0+Ynl0ZVNpemUoKSksIG90aGVyU2xvdHMpOworICAgICAgICBpZiAoZGlkQXNzaWduKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlU3Rh
Y2soQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9j
YXRlU3RhY2siKTsKKworICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0aGUgbG9ja2VkIHNsb3RzIGlu
IG9yZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCisg
ICAgLy8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1l
IG9mZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCisgICAgQVNTRVJUKCFjb2RlLmZyYW1l
U2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3Rz
OworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Q7CisgICAg
Zm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBzd2l0
Y2ggKHNsb3QtPmtpbmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoK
KyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgICAgICBh
c3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5hcHBlbmQoc2xvdCk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6
CisgICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBBcyBhIG1hdHRlciBvZiBzYW5pdHksIHVuYXNzaWduIHRoaXMuIE1heWJlIGl0IHdvdWxk
IGJlIGdvb2QgdG8gZXZlbiBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIHJ1
bGUgdGhhdCB0aGlzIGNhbm5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgc2xvdC0+c2V0T2Zm
c2V0RnJvbUZQKDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgLy8gVGhpcyBpcyBhIGZhaXJseSBleHBlbnNpdmUgbG9vcCwgYnV0IGl0
J3MgT0sgYmVjYXVzZSB3ZSdsbCB1c3VhbGx5IG9ubHkgaGF2ZSBhIGhhbmRmdWwgb2YKKyAgICAv
LyBsb2NrZWQgc3RhY2sgc2xvdHMuCisgICAgd2hpbGUgKCFsb2NrZWRTdGFja1Nsb3RzV29ya2xp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGxvY2tlZFN0YWNrU2xv
dHNXb3JrbGlzdC50YWtlTGFzdCgpOworICAgICAgICBhc3NpZ24oc2xvdCwgYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzKTsKKyAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChz
bG90KTsKKyAgICB9CisKKyAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMu
IE5vdGUgdGhhdCB0aGVvcmV0aWNhbGx5IHdlIHNob3VsZCBkbyBhbiBlc2NhcGUgYW5hbHlzaXMK
KyAgICAvLyBoZXJlLiBCdXQsIGN1cnJlbnRseSBBaXIgZG9lc24ndCBzdXBwb3J0IGVzY2FwaW5n
IGEgU3RhY2tTbG90IQorICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZXNjYXBpbmcgYSBT
dGFja1Nsb3QgYW5kIGFkZCBlc2NhcGUgYW5hbHlzaXMgdG8gYWxsb2NhdGVTdGFjaygpLgorICAg
IC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0MzAKKworICAg
IGF1dG8gaXNSZWxldmFudCA9IFtdIChjb25zdCBBcmcmIGFyZykgLT4gYm9vbCB7CisgICAgICAg
IHJldHVybiBhcmcuaXNTdGFjaygpICYmIGFyZy5zdGFja1Nsb3QoKS0+a2luZCgpID09IFN0YWNr
U2xvdEtpbmQ6OkFub255bW91czsKKyAgICB9OworCisgICAgTGl2ZW5lc3M8QXJnPiBsaXZlbmVz
cyhjb2RlKTsKKyAgICBJbmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGlu
dGVyZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMoKS5zaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Ns
b3QqPiBzbG90czsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAg
ICAgIExpdmVuZXNzPEFyZz46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsK
KworICAgICAgICBhdXRvIGludGVyZmVyZSA9IFsmXSAoSW5zdCYgaW5zdCkgeworICAgICAgICAg
ICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJpbmc6ICIs
IGxpc3REdW1wKGxvY2FsQ2FsYy5saXZlKCkpLCAiXG4iKTsKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgLy8gRm9ybSBhIGNsaXF1ZSBvZiBzdGFjayBzbG90cyB0aGF0IGludGVyZmVyZS4gRmly
c3QgZmluZCB0aGUgbGlzdCBvZiBzdGFjayBzbG90cworICAgICAgICAgICAgLy8gdGhhdCBhcmUg
bGl2ZSByaWdodCBub3cuCisgICAgICAgICAgICBzbG90cy5yZXNpemUoMCk7CisgICAgICAgICAg
ICBmb3IgKEFyZyBhcmcgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KGlzUmVsZXZhbnQoYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5z
dGFja1Nsb3QoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFdlIG11c3RuJ3Qg
bWFuZGF0ZSB0aGF0IHRoZSBpbnB1dCBjb2RlIGlzIG9wdGltYWwuIFRoZXJlZm9yZSwgaXQgbWF5
IGhhdmUgZGVhZCBzdG9yZXMKKyAgICAgICAgICAgIC8vIHRvIHRoZSBzdGFjay4gV2UgbmVlZCB0
byB0cmVhdCB0aGVzZSBhcyBpbnRlcmZlcmluZy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaEFy
ZygKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpU
eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpICYmIGlzUmVs
ZXZhbnQoYXJnKSAmJiAhbG9jYWxDYWxjLmxpdmUoKS5jb250YWlucyhhcmcpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAg
ICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBTbG90czogIiwgcG9pbnRlckxpc3REdW1wKHNsb3RzKSwg
IlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2xvdHMuc2l6ZSgp
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIG91dGVyID0gc2xvdHNbaV07Cisg
ICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSArIDE7IGogPCBzbG90cy5zaXplKCk7
ICsraikgeworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIGlubmVyID0gc2xvdHNbal07
CisKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW2lubmVyXS5hZGQob3V0ZXIpOwor
ICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmVuY2Vbb3V0ZXJdLmFkZChpbm5lcik7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9OworCisgICAgICAgIGZvciAo
dW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAg
ICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJBbmFseXppbmc6
ICIsIGJsb2NrLT5hdChpbnN0SW5kZXgpLCAiXG4iKTsKKyAgICAgICAgICAgIEluc3QmIGluc3Qg
PSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGludGVyZmVyZShpbnN0KTsKKyAg
ICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3QpOworICAgICAgICB9CisgICAgICAgIElu
c3Qgbm9wOworICAgICAgICBpbnRlcmZlcmUobm9wKTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9z
ZSkgeworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKQor
ICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJlbmNlIG9mICIsIHBvaW50ZXJEdW1wKHNsb3Qp
LCAiOiAiLCBwb2ludGVyTGlzdER1bXAoaW50ZXJmZXJlbmNlW3Nsb3RdKSwgIlxuIik7CisgICAg
fQorCisgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFjayBsb2NhdGlvbnMuIEF0IGl0cyBoZWFydCB0
aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9yIGVhY2gKKyAgICAvLyBTdGFja1Ns
b3Qgd2UganVzdCB3YW50IHRvIGZpbmQgdGhlIG9mZnNldEZyb21GUCB0aGF0IGlzIGNsb3Nlc3Qg
dG8gemVybyB3aGlsZSBlbnN1cmluZyBubworICAgIC8vIG92ZXJsYXAgd2l0aCBvdGhlciBTdGFj
a1Nsb3RzIHRoYXQgdGhpcyBvdmVybGFwcyB3aXRoLgorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBv
dGhlclNsb3RzOworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkp
IHsKKyAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAvLyBB
bHJlYWR5IGFzc2lnbmVkIGFuIG9mZnNldC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiYgaW50ZXJmZXJpbmdTbG90cyA9IGlu
dGVyZmVyZW5jZVtzbG90XTsKKyAgICAgICAgb3RoZXJTbG90cy5yZXNpemUoYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzLnNpemUoKSArIGludGVyZmVyaW5nU2xvdHMuc2l6ZSgpKTsKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7
ICsraSkKKyAgICAgICAgICAgIG90aGVyU2xvdHNbaV0gPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xv
dHNbaV07CisgICAgICAgIHVuc2lnbmVkIG5leHRJbmRleCA9IGFzc2lnbmVkTG9ja2VkU3RhY2tT
bG90cy5zaXplKCk7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBpbnRlcmZl
cmluZ1Nsb3RzKQorICAgICAgICAgICAgb3RoZXJTbG90c1tuZXh0SW5kZXgrK10gPSBvdGhlclNs
b3Q7CisKKyAgICAgICAgYXNzaWduKHNsb3QsIG90aGVyU2xvdHMpOworICAgIH0KKworICAgIC8v
IEZpZ3VyZSBvdXQgaG93IG11Y2ggc3RhY2sgd2UncmUgdXNpbmcgZm9yIHN0YWNrIHNsb3RzLgor
ICAgIHVuc2lnbmVkIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSAwOworICAgIGZvciAoU3RhY2tT
bG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgZnJhbWVTaXplRm9yU3Rh
Y2tTbG90cyA9IHN0ZDo6bWF4KAorICAgICAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cywK
KyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPigtc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
KTsKKyAgICB9CisKKyAgICBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gV1RGOjpyb3VuZFVwVG9N
dWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgZnJhbWVTaXplRm9yU3RhY2tTbG90cyk7
CisKKyAgICAvLyBOb3cgd2UgbmVlZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQgYXJlYSB3
ZSBuZWVkLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZv
ciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGlu
c3QuYXJncykgeworICAgICAgICAgICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgLy8gRm9yIG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDggYnl0ZXMg
b2YgdGhlIGNhbGwgYXJnLiBCdXQgdGhhdCdzIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBz
dWNoIGFuIGF3ZXNvbWUgYXNzdW1wdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKKyAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGFyZy5vZmZzZXQoKSA+PSAwKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29kZS5yZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKGFyZy5vZmZzZXQoKSArIDgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvZGUu
c2V0RnJhbWVTaXplKGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgKyBjb2RlLmNhbGxBcmdBcmVhU2l6
ZSgpKTsKKworICAgIC8vIEZpbmFsbHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1c2UgQWRkcidz
IGluc3RlYWQgb2YgU3RhY2tTbG90J3MuIFRoaXMgaXMgYSBsb3NzbGVzcworICAgIC8vIHRyYW5z
Zm9ybWF0aW9uIHNpbmNlIHdlIGNhbiBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJyYXkgdG8gZmln
dXJlIG91dCB3aGljaCBTdGFja1Nsb3QgYW55CisgICAgLy8gb2Zmc2V0LWZyb20tRlAgcmVmZXJz
IHRvLgorCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9y
IChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5z
dC5hcmdzKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6
OmFkZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVn
aXN0ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgYXJnLnN0YWNr
U2xvdCgpLT5vZmZzZXRGcm9tRlAoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgICAgICAgICBhcmcg
PSBBcmc6OmFkZHIoCisgICAgICAgICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIpLAorICAgICAgICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpIC0gY29k
ZS5mcmFtZVNpemUoKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBbGxvY2F0ZVN0YWNrX2gKKyNk
ZWZpbmUgQWlyQWxsb2NhdGVTdGFja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisK
Ky8vIFRoaXMgYWxsb2NhdGVzIFN0YWNrU2xvdHMgdG8gcGxhY2VzIG9uIHRoZSBzdGFjay4gSXQg
Zmlyc3QgYWxsb2NhdGVzIHRoZSBwaW5uZWQgb25lcyBpbiBpbmRleAorLy8gb3JkZXIgYW5kIHRo
ZW4gaXQgYWxsb2NhdGVzIHRoZSByZXN0IHVzaW5nIGZpcnN0IGZpdC4KKwordm9pZCBhbGxvY2F0
ZVN0YWNrKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckFsbG9jYXRlU3RhY2tfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFyZy5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJT
dGFja1Nsb3QuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCit2b2lkIEFyZzo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3
aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQoIjxp
bnZhbGlkPiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBUbXA6CisgICAgICAgIG91dC5w
cmludCh0bXAoKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEltbToKKyAgICAgICAgb3V0
LnByaW50KCIkIiwgbV9vZmZzZXQpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW02NDoK
KyAgICAgICAgb3V0LnByaW50ZigiJDB4JWxseCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQWRkcjoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0
LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbmRleDoKKyAgICAgICAgaWYgKG9mZnNldCgpKQor
ICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
YmFzZSgpLCAiLCIsIGluZGV4KCkpOworICAgICAgICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAg
ICAgICAgb3V0LnByaW50KCIsIiwgc2NhbGUoKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgaWYgKG9mZnNldCgpKQor
ICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwg
cG9pbnRlckR1bXAoc3RhY2tTbG90KCkpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDYWxsQXJnOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQo
b2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIihjYWxsQXJnKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZWxhdGlvbmFsQ29u
ZGl0aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBv
dXQucHJpbnQoYXNSZXN1bHRDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFNwZWNpYWw6CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJUbXAuaCIKKyNpbmNsdWRlICJCM0NvbW1v
bi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFja1Nsb3Q7CisK
Ky8vIFRoaXMgY2xhc3MgbmFtZSBpcyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3
ZSB3aWxsIHNheSBpdCBhIGxvdC4gWW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3QoLi4uLCBB
cmc6OmltbSg1KSwgQXJnOjphZGRyKHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1
YmxpYzoKKyAgICAvLyBUaGVzZSBlbnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkgdGVyc2Ug
YmVjYXVzZSB3ZSBoYXZlIHRvIG1lbnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtpbmQgOiBp
bnQ4X3QgeworICAgICAgICBJbnZhbGlkLAorICAgICAgICBUbXAsCisgICAgICAgIEltbSwKKyAg
ICAgICAgSW1tNjQsCisgICAgICAgIEFkZHIsCisgICAgICAgIFN0YWNrLAorICAgICAgICBDYWxs
QXJnLAorICAgICAgICBJbmRleCwKKyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAgUmVzQ29uZCwK
KyAgICAgICAgU3BlY2lhbAorICAgIH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAg
ICAgICBVc2UsCisgICAgICAgIERlZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsKKworICAgIGVu
dW0gVHlwZSA6IGludDhfdCB7CisgICAgICAgIEdQLAorICAgICAgICBGUAorICAgIH07CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtVHlwZXMgPSAyOworCisgICAgc3RhdGljIGJvb2wg
aXNVc2UoUm9sZSByb2xlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAg
IGNhc2UgVXNlOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0
eXBlRm9yQjNUeXBlKEIzOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUp
IHsKKyAgICAgICAgY2FzZSBWb2lkOgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNh
c2UgSW50NjQ6CisgICAgICAgICAgICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgRG91YmxlOgor
ICAgICAgICAgICAgcmV0dXJuIEZQOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gR1A7CisgICAgfQorCisgICAgQXJnKCkKKyAgICAgICAg
OiBtX2tpbmQoSW52YWxpZCkKKyAgICB7CisgICAgfQorCisgICAgQXJnKEFpcjo6VG1wIHRtcCkK
KyAgICAgICAgOiBtX2tpbmQoVG1wKQorICAgICAgICAsIG1fYmFzZSh0bXApCisgICAgeworICAg
IH0KKworICAgIHN0YXRpYyBBcmcgaW1tKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBB
cmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tOworICAgICAgICByZXN1bHQu
bV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgQXJnIGltbTY0KGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3Vs
dDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTY0OworICAgICAgICByZXN1bHQubV9vZmZz
ZXQgPSB2YWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMg
QXJnIGFkZHIoQWlyOjpUbXAgYmFzZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IEFkZHI7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIEFyZyBzdGFjayhTdGFja1Nsb3QqIHZhbHVlLCBpbnQzMl90IG9mZnNl
dCA9IDApCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4odmFsdWUpOworICAgICAgICByZXN1bHQubV9zY2FsZSA9IG9mZnNldDsgLy8gSSBrbm93LCB5
dWNrLgorICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgY2Fs
bEFyZyhpbnQzMl90IG9mZnNldCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAg
IHJlc3VsdC5tX2tpbmQgPSBDYWxsQXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZz
ZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNW
YWxpZFNjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkg
eworICAgICAgICBjYXNlIDE6CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2FzZSA0OgorICAg
ICAgICBjYXNlIDg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRp
YyB1bnNpZ25lZCBsb2dTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIDQ6CisgICAg
ICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIDM7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIEFyZyBp
bmRleChBaXI6OlRtcCBiYXNlLCBBaXI6OlRtcCBpbmRleCwgdW5zaWduZWQgc2NhbGUgPSAxLCBp
bnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOwor
ICAgICAgICBBU1NFUlQoaW5kZXguaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRTY2Fs
ZShzY2FsZSkpOworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0g
SW5kZXg7CisgICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9p
bmRleCA9IGluZGV4OworICAgICAgICByZXN1bHQubV9zY2FsZSA9IHN0YXRpY19jYXN0PGludDMy
X3Q+KHNjYWxlKTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVsQ29uZDsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgcmVzQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNv
bmRpdGlvbikKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBSZXNDb25kOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBzcGVjaWFsKEFpcjo6
U3BlY2lhbCogc3BlY2lhbCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJl
c3VsdC5tX2tpbmQgPSBTcGVjaWFsOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNl
X2Nhc3Q8aW50cHRyX3Q+KHNwZWNpYWwpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fb2Zmc2V0ID09IG90aGVyLm1fb2Zmc2V0CisgICAgICAgICAgICAmJiBt
X2tpbmQgPT0gb3RoZXIubV9raW5kCisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9i
YXNlCisgICAgICAgICAgICAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAg
ICYmIG1fc2NhbGUgPT0gb3RoZXIubV9zY2FsZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlz
ID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gKnRoaXMgIT0gQXJnKCk7IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9raW5kOworICAgIH0KKworICAgIGJvb2wgaXNUbXAoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBUbXA7CisgICAgfQorCisgICAgYm9v
bCBpc0ltbSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTsKKyAg
ICB9CisKKyAgICBib29sIGlzSW1tNjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBJbW02NDsKKyAgICB9CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IEFkZHI7CisgICAgfQorCisgICAgYm9vbCBpc1N0YWNr
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3RhY2s7CisgICAgfQor
CisgICAgYm9vbCBpc0NhbGxBcmcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQo
KSA9PSBDYWxsQXJnOworICAgIH0KKworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4ga2luZCgpID09IEluZGV4OworICAgIH0KKworICAgIGJvb2wgaXNSZWxD
b25kKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKKyAg
ICB9CisKKyAgICBib29sIGlzUmVzQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
a2luZCgpID09IFJlc0NvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTcGVjaWFsOworICAgIH0KKworICAgIGJv
b2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSB8fCBpc1N0
YWNrKCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChraW5kKCkgPT0gVG1wKTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisK
KyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gSW1tIHx8IGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAg
ICB9CisKKyAgICB2b2lkKiBwb2ludGVyVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBJbW02NCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+
KHN0YXRpY19jYXN0PGludHB0cl90PihtX29mZnNldCkpOworICAgIH0KKworICAgIEFpcjo6VG1w
IGJhc2UoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtp
bmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgYm9v
bCBoYXNPZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxB
cmc6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0K
KyAgICAKKyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2lu
ZCgpID09IFN0YWNrKQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1f
c2NhbGUpOworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IENhbGxB
cmcgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMy
X3Q+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJu
IGJpdHdpc2VfY2FzdDxTdGFja1Nsb3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpU
bXAgaW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7
CisgICAgICAgIHJldHVybiBtX2luZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICBy
ZXR1cm4gbV9zY2FsZTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgQWly
OjpTcGVjaWFsKiBzcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkg
PT0gU3BlY2lhbCk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4o
bV9vZmZzZXQpOworICAgIH0KKworICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9vbCBp
c0ZQVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlz
RlAoKTsKKyAgICB9CisgICAgCisgICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVz
ZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBpc0dQ
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2Ug
SW1tOgorICAgICAgICBjYXNlIEltbTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNh
c2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAg
ICAgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2Ug
U3BlY2lhbDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAg
ICAgICAgICAgIHJldHVybiBpc0dQVG1wKCk7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlbGxzIHVz
IGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEZQ
IHZhbHVlLgorICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtp
bmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAgICAg
ICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBJbnZh
bGlkOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZHI6CisgICAg
ICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFy
ZzoKKyAgICAgICAgY2FzZSBJbW02NDogLy8gWWVzLCB3ZSBhbGxvdyBJbW02NCBhcyBhIGRvdWJs
ZSBpbW1lZGlhdGUuIFdlIHVzZSB0aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0
dXJuIGlzRlBUbXAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaGFzVHlwZSgpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToK
KyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorICAgIAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmlndW91cyBmb3Ig
c29tZSBhcmcga2luZHMuIENhbGwgd2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisKKyAgICBib29s
IGlzVHlwZShUeXBlIHR5cGUpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBHUDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQKCk7CisgICAgICAgIGNh
c2UgRlA6CisgICAgICAgICAgICByZXR1cm4gaXNGUCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0
bXAoKS5pc0dQUigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIHRtcCgpLmdwcigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAgICB9
CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5m
cHIoKTsKKyAgICB9CisgICAgCisgICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyByZWco
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKworICAg
IHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgp
LmdwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisgICAg
dW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnRt
cEluZGV4KCk7CisgICAgfQorCisgICAgQXJnIHdpdGhPZmZzZXQoaW50MzJfdCBhZGRpdGlvbmFs
T2Zmc2V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCFoYXNPZmZzZXQoKSkKKyAgICAgICAg
ICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90PihvZmZz
ZXQoKSwgYWRkaXRpb25hbE9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAg
ICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIHJl
dHVybiBhZGRyKGJhc2UoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAg
Y2FzZSBTdGFjazoKKyAgICAgICAgICAgIHJldHVybiBzdGFjayhzdGFja1Nsb3QoKSwgb2Zmc2V0
KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICAg
ICAgcmV0dXJuIGNhbGxBcmcob2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAg
Y2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiBpbmRleChiYXNlKCksIGluZGV4KCksIHNj
YWxlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0
dXJuIEFyZygpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAg
ICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7
CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IC8vIFRoaXMgaXMgc21hcnQgZW5vdWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBh
IERlZiBvciBVc2VEZWYgcnVsZSB3aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBk
ZWYgdGhlbS4gRm9yIGV4YW1wbGUsIHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVy
Y3gpCisgICAgLy8KKyAgICAvLyBUaGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdS
b2xlLCBUeXBlIGFyZ1R5cGUsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0
b3IobV9iYXNlLCBhcmdSb2xlLCBhcmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3Io
bV9iYXNlLCBVc2UsIEdQKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBh
c1RydXN0ZWRJbW0zMigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW0oKSk7Cisg
ICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0IGFzVHJ1c3RlZEltbTY0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW02NCh2YWx1ZSgpKTsKKyAgICB9CisjZW5kaWYKKworICAgIE1hY3JvQXNzZW1i
bGVyOjpUcnVzdGVkSW1tUHRyIGFzVHJ1c3RlZEltbVB0cigpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAoaXM2NEJpdCgpKQorICAgICAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIEFTU0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKHBvaW50ZXJWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBN
YWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyBhc0FkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAg
QVNTRVJUKGlzQWRkcigpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNz
KG1fYmFzZS5ncHIoKSwgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6QmFzZUluZGV4IGFzQmFzZUluZGV4KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0luZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJs
ZXI6OkJhc2VJbmRleCgKKyAgICAgICAgICAgIG1fYmFzZS5ncHIoKSwgbV9pbmRleC5ncHIoKSwg
c3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlNjYWxlPihsb2dTY2FsZSgpKSwKKyAgICAgICAg
ICAgIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9B
c3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1JlbENvbmQoKSk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbj4obV9vZmZzZXQp
OworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gYXNSZXN1bHRD
b25kaXRpb24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVzQ29uZCgpKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24+
KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KworICAgIEFyZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9i
YXNlKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAq
dGhpcyA9PSBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKworICAgIHVu
c2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gVGhpcyByZWFsbHkgZG9lc24n
dCBoYXZlIHRvIGJlIHRoYXQgZ3JlYXQuCisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50
NjRfdD46Omhhc2gobV9vZmZzZXQpICsgbV9raW5kICsgbV9zY2FsZSArIG1fYmFzZS5oYXNoKCkg
KworICAgICAgICAgICAgbV9pbmRleC5oYXNoKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGlu
dDY0X3QgbV9vZmZzZXQgeyAwIH07CisgICAgS2luZCBtX2tpbmQgeyBJbnZhbGlkIH07CisgICAg
aW50MzJfdCBtX3NjYWxlIHsgMSB9OworICAgIEFpcjo6VG1wIG1fYmFzZTsKKyAgICBBaXI6OlRt
cCBtX2luZGV4OworfTsKKworc3RydWN0IEFyZ0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoKGNvbnN0IEFyZyYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJv
b2wgZXF1YWwoY29uc3QgQXJnJiBhLCBjb25zdCBBcmcmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQor
ICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1
ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRl
PD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgdHlwZWRlZiBK
U0M6OkIzOjpBaXI6OkFyZ0hhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0
cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpB
aXI6OkFyZz4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpBcmc+IHsKKyAg
ICAvLyBCZWNhdXNlIG1fc2NhbGUgaXMgMSBpbiB0aGUgZW1wdHkgdmFsdWUuCisgICAgc3RhdGlj
IGNvbnN0IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQXJnX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2su
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNp
Y0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJl
Zml4ID0gIiMiOworCitib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sq
IGJsb2NrKQoreworICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOwor
fQorCitib29sIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2Nr
KQoreworICAgIHJldHVybiBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQor
Citib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBC
YXNpY0Jsb2NrKiB0bykKK3sKKyAgICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlz
LCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxu
Iik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMpCisgICAgICAgIG91dC5wcmlu
dCgiICAgICIsIGluc3QsICJcbiIpOworfQorCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2ln
bmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRleCkKKyAgICAs
IG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWlyQmFzaWNCbG9ja19oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyRnJlcXVlbnRlZEJsb2NrLmgiCisj
aW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xh
c3MgQ29kZTsKK2NsYXNzIEluc2VydGlvblNldDsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAg
V1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7
CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAgICB0eXBlZGVmIFZlY3Rv
cjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEZy
ZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIHVuc2lnbmVkIGluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBiZWdp
bigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0OjppdGVyYXRvciBl
bmQoKSB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5zdExp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuZW5kKCk7IH0K
KworICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9pbnN0
c1tpbmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1faW5zdHNb
aW5kZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0
cy5sYXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0K
KworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBhcHBlbmRJbnN0KEluc3Qm
JiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3RkOjpmb3J3YXJkPEluc3Q+
KGluc3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgdm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAg
bV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4u
KSk7CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBjYXNlIHRvIHdoaWNoIHRo
ZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIxIiBjYXNlIGlzIHRoZQor
ICAgIC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGZhbGwtdGhy
b3VnaCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3Jz
KCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQorICAgIEZyZXF1ZW50ZWRC
bG9jayBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29y
c1tpbmRleF07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRl
eCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxp
c3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNj
ZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKKyAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
c3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIHN1Y2Nlc3NvckJs
b2NrKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0K
KyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nl
c3NvckJsb2NrcygpCisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxC
YXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMpOworICAgIH0KKyAgICBTdWNj
ZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1
Y2Nlc3NvckJsb2NrcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vzc29yQ29s
bGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3Nv
cnMpOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0
dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0K
KyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1f
cHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVj
ZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nv
ckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisKKyAgICBi
b29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vz
c29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2Nr
KiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsK
KyAgICAKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsK
KworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9pbnN0czsKKyAgICBTdWNj
ZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3Nv
cnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tE
dW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayog
YmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9j
aykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNv
bnN0IEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1w
IGRlZXBEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFz
aWNCbG9ja0R1bXAoYmxvY2spOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQmFzaWNCbG9ja19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3Bl
Y2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDQ2Fs
bFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0
ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lz
dGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShS
ZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJl
ZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKK30KKwor
Q0NhbGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6
OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpV
c2UsIEFyZzo6R1ApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFy
Z3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBx
dWVyeSB0aGUgYXJnJ3MgdHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdl
CisgICAgICAgIC8vIHJlcXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1bWVudCByZWdpc3RlcnMu
CisgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2UsIGluc3QuYXJnc1tpXS50
eXBlKCkpOworICAgIH0KK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5z
dCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJ
bW06CisgICAgICAgIGlmIChpczMyQml0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaWYgKGlzNjRCaXQo
KSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgY2FzZSBB
cmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAg
Y2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc0dQKCkpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0
LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFyZ3NbaV0uaXNSZWcoKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaW5zdC5hcmdzW2ldID09
IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6OmFkbWl0c1N0YWNrKElu
c3QmLCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICAvLyBBcmcgMSBjYW4gYmUgYSBzdGFjayBh
ZGRyZXNzIGZvciBzdXJlLgorICAgIGlmIChhcmdJbmRleCA9PSAxKQorICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpy
ZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpCit7Cit9CisKK0ND
YWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxs
SGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAgc3dpdGNoIChpbnN0LmFy
Z3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAgICBjYXNlIEFyZzo6SW1tNjQ6
CisgICAgICAgIGppdC5tb3ZlKGluc3QuYXJnc1sxXS5hc1RydXN0ZWRJbW1QdHIoKSwgc2NyYXRj
aFJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmNhbGwoc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgaml0LmNhbGwoaW5zdC5hcmdzWzFd
LmdwcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgIGpp
dC5jYWxsKGluc3QuYXJnc1sxXS5hc0FkZHJlc3MoKSk7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK2NvbnN0
IFJlZ2lzdGVyU2V0JiBDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0JikKK3sK
KyAgICByZXR1cm4gbV9jbG9iYmVyZWRSZWdzOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6ZHVt
cEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkNDYWxsIik7
Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoImZ1bmN0aW9uIGNhbGwgdGhhdCB1c2VzIHRoZSBDIGNh
bGxpbmcgY29udmVudGlvbi4iKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5lIEFpckNDYWxsU3BlY2lhbF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIFVzZSB0aGlz
IHNwZWNpYWwgZm9yIGNvbnN0cnVjdGluZyBhIEMgY2FsbC4gQXJnIDAgaXMgb2YgY291cnNlIGEg
U3BlY2lhbCBhcmcgdGhhdCByZWZlcnMgdG8gdGhlCisvLyBDQ2FsbFNwZWNpYWwgb2JqZWN0LiBB
cmcgMSBpcyB0aGUgY2FsbGVlLCBhbmQgaXQgY2FuIGJlIGFuIEltbVB0ciwgYSByZWdpc3Rlciwg
b3IgYW4gYWRkcmVzcy4gVGhlCisvLyByZW1haW5pbmcgYXJncyBhcmUganVzdCB0aGUgc2V0IG9m
IGFyZ3VtZW50IHJlZ2lzdGVycyB1c2VkIGJ5IHRoaXMgY2FsbC4gRm9yIGFyZ3VtZW50cyB0aGF0
IGdvIHRvCisvLyB0aGUgc3RhY2ssIHlvdSBoYXZlIHRvIGRvIHRoZSBncnVudCB3b3JrIG9mIGRv
aW5nIHRob3NlIHN0YWNrIHN0b3Jlcy4gSW4gZmFjdCwgdGhlIG9ubHkgcmVhc29uIHdoeQorLy8g
d2Ugc3BlY2lmeSB0aGUgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGFyZ3VtZW50cyB0byBhIGNhbGwg
aXMgc28gdGhhdCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgY2FuIHNlZQorLy8gdGhhdCB0aGV5IGdl
dCB1c2VkIGhlcmUuIEl0IHdvdWxkIGJlIHdyb25nIHRvIGF1dG9tYWdpY2FsbHkgcmVwb3J0IGFs
bCBhcmd1bWVudCByZWdpc3RlcnMgYXMgYmVpbmcKKy8vIHVzZWQgYmVjYXVzZSBpZiB3ZSBoYWQg
YSBjYWxsIHRoYXQgZGlkbid0IHBhc3MgdGhlbSwgdGhlbiB0aGV5J2QgYXBwZWFyIHRvIGJlIGxp
dmUgdW50aWwgc29tZQorLy8gY2xvYmJlciBwb2ludCBvciB0aGUgcHJvbG9ndWUsIHdoaWNoZXZl
ciBoYXBwZW5lZCBzb29uZXIuCisKK2NsYXNzIENDYWxsU3BlY2lhbCA6IHB1YmxpYyBTcGVjaWFs
IHsKK3B1YmxpYzoKKyAgICBDQ2FsbFNwZWNpYWwoKTsKKyAgICB+Q0NhbGxTcGVjaWFsKCk7CisK
KyAgICAvLyBZb3UgY2Fubm90IHVzZSB0aGlzIHJlZ2lzdGVyIHRvIHBhc3MgYXJndW1lbnRzLiBJ
dCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIHJlZ2lzdGVyIGlzIG5vdAorICAgIC8vIHVzZWQg
Zm9yIGFyZ3VtZW50cyBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIEJ5IHRoZSB3YXksIHRo
aXMgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYXVzZXMKKyAgICAvLyB0aGlzIHNwZWNpYWwgdG8g
YmUgc3BlY2lmaWMgdG8gQyBjYWxscy4KKyAgICBzdGF0aWMgY29uc3QgR1BSUmVnIHNjcmF0Y2hS
ZWdpc3RlciA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZv
ckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+
Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEluc3QmKSBvdmVycmlkZTsKKyAgICBib29s
IGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisgICAgdm9p
ZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRl
OworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwg
R2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0
cmFDbG9iYmVyZWRSZWdzKEluc3QmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJp
bnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJlZ2lzdGVyU2V0IG1fY2xv
YmJlcmVkUmVnczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDQ2FsbFNwZWNpYWxfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisjaW5j
bHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKKyAgICA6IG1fbGFzdFBoYXNlTmFt
ZSgiaW5pdGlhbCIpCit7Cit9CisKK0NvZGU6On5Db2RlKCkKK3sKK30KKworQmFzaWNCbG9jayog
Q29kZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2sobV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVu
Y3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nr
cy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3Rh
Y2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtp
bmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxT
dGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChieXRlU2l6ZSwgbV9zdGFja1Nsb3RzLnNpemUo
KSwga2luZCwgdmFsdWUpKTsKKyAgICBTdGFja1Nsb3QqIHJlc3VsdCA9IHNsb3QuZ2V0KCk7Cisg
ICAgbV9zdGFja1Nsb3RzLmFwcGVuZChXVEY6Om1vdmUoc2xvdCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK1NwZWNpYWwqIENvZGU6OmFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNp
YWw+IHNwZWNpYWwpCit7CisgICAgU3BlY2lhbCogcmVzdWx0ID0gc3BlY2lhbC5nZXQoKTsKKyAg
ICBtX3NwZWNpYWxzLmFwcGVuZChXVEY6Om1vdmUoc3BlY2lhbCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK0NDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxTcGVjaWFsKCkKK3sKKyAgICBpZiAo
IW1fY0NhbGxTcGVjaWFsKSB7CisgICAgICAgIG1fY0NhbGxTcGVjaWFsID0gc3RhdGljX2Nhc3Q8
Q0NhbGxTcGVjaWFsKj4oCisgICAgICAgICAgICBhZGRTcGVjaWFsKHN0ZDo6bWFrZV91bmlxdWU8
Q0NhbGxTcGVjaWFsPigpKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fY0NhbGxTcGVjaWFsOwor
fQorCit2b2lkIENvZGU6OnJlc2V0UmVhY2hhYmlsaXR5KCkKK3sKKyAgICBCMzo6cmVzZXRSZWFj
aGFiaWxpdHkobV9ibG9ja3MpOworfQorCit2b2lkIENvZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAg
IG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworICAgIGlmIChzdGFja1Nsb3RzKCkuc2l6ZSgp
KSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xvdHM6XG4iKTsKKyAgICAgICAgZm9yIChT
dGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAg
ICAiLCBwb2ludGVyRHVtcChzbG90KSwgIjogIiwgZGVlcER1bXAoc2xvdCksICJcbiIpOworICAg
IH0KKyAgICBpZiAoc3BlY2lhbHMoKS5zaXplKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJTcGVj
aWFsczpcbiIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBzcGVjaWFscygpKQor
ICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgcG9pbnRlckR1bXAoc3BlY2lhbCksICI6ICIs
IGRlZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsKKyAgICB9CisgICAgaWYgKG1fZnJhbWVTaXplKQor
ICAgICAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVTaXplLCAiXG4iKTsKKyAg
ICBpZiAobV9jYWxsQXJnQXJlYVNpemUpCisgICAgICAgIG91dC5wcmludCgiQ2FsbCBhcmcgYXJl
YSBzaXplOiAiLCBtX2NhbGxBcmdBcmVhU2l6ZSwgIlxuIik7CisgICAgaWYgKG1fY2FsbGVlU2F2
ZVJlZ2lzdGVycy5zaXplKCkpCisgICAgICAgIG91dC5wcmludCgiQ2FsbGVlIHNhdmVzOiAiLCBt
X2NhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOworfQorCit1bnNpZ25lZCBDb2RlOjpmaW5kRmly
c3RCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHdoaWxlIChpbmRleCA8
IHNpemUoKSAmJiAhYXQoaW5kZXgpKQorICAgICAgICBpbmRleCsrOworICAgIHJldHVybiBpbmRl
eDsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4
KSBjb25zdAoreworICAgIHJldHVybiBmaW5kRmlyc3RCbG9ja0luZGV4KGluZGV4ICsgMSk7Cit9
CisKK0Jhc2ljQmxvY2sqIENvZGU6OmZpbmROZXh0QmxvY2soQmFzaWNCbG9jayogYmxvY2spIGNv
bnN0Cit7CisgICAgcmV0dXJuIGF0KGZpbmROZXh0QmxvY2tJbmRleChibG9jay0+aW5kZXgoKSkp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNvZGVfaAorI2RlZmluZSBBaXJDb2RlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5j
bHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgorI2luY2x1ZGUg
IlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIENDYWxsU3BlY2lhbDsKKworLy8gVGhpcyBpcyBhbiBJUiB0
aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQw
eCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4
YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUgY29kZSwgeW91IG5lZWQg
YWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBDb2RlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJs
ZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2ln
bmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSogPSBudWxscHRyKTsK
KworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+KTsKKwor
ICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8gbWFrZSBhIEMgY2FsbCEKKyAg
ICBDQ2FsbFNwZWNpYWwqIGNDYWxsU3BlY2lhbCgpOworCisgICAgVG1wIG5ld1RtcChBcmc6OlR5
cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFy
Zzo6R1A6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpncFRtcEZvckluZGV4KG1fbnVtR1BUbXBz
KyspOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpmcFRt
cEZvckluZGV4KG1fbnVtRlBUbXBzKyspOworICAgICAgICB9CisgICAgfQorCisgICAgdW5zaWdu
ZWQgbnVtVG1wcyhBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkg
eworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gbV9udW1HUFRtcHM7
CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJldHVybiBtX251bUZQVG1wczsK
KyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNhbGxBcmdBcmVhU2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9CisKKyAgICAvLyBZb3UgY2FuIGNhbGwgdGhp
cyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHRvIGZvcmNlIGEgbWluaW11bSBjYWxsIGFyZyBhcmVh
IHNpemUuCisgICAgdm9pZCByZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKHVuc2lnbmVkIHNpemUpCisg
ICAgeworICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSA9IHN0ZDo6bWF4KAorICAgICAgICAgICAg
bV9jYWxsQXJnQXJlYVNpemUsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oV1RG
Ojpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgc2l6ZSkpKTsKKyAg
ICB9CisKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lU2l6
ZTsgfQorCisgICAgLy8gT25seSBwaGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uIGFyZSBh
bGxvd2VkIHRvIHNldCB0aGlzLiBDdXJyZW50bHksIG9ubHkKKyAgICAvLyBBaXI6OmFsbG9jYXRl
U3RhY2soKSBkb2VzIHRoaXMuCisgICAgdm9pZCBzZXRGcmFtZVNpemUodW5zaWduZWQgZnJhbWVT
aXplKQorICAgIHsKKyAgICAgICAgbV9mcmFtZVNpemUgPSBmcmFtZVNpemU7CisgICAgfQorCisg
ICAgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNhdmVSZWdpc3RlcnMoKSB7IHJldHVybiBt
X2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKworICAgIC8vIFJlY29tcHV0ZXMgcHJlZGVjZXNzb3Jz
IGFuZCBkZWxldGVzIHVucmVhY2hhYmxlIGJsb2Nrcy4KKyAgICB2b2lkIHJlc2V0UmVhY2hhYmls
aXR5KCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Js
b2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdLmdl
dCgpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgn
IHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+PSBpbmRleC4KKyAgICB1
bnNpZ25lZCBmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAg
IC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0KGluZGV4JykgIT0gbnVs
bCBhbmQgaW5kZXgnID4gaW5kZXguCisgICAgdW5zaWduZWQgZmluZE5leHRCbG9ja0luZGV4KHVu
c2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIEJhc2ljQmxvY2sqIGZpbmROZXh0QmxvY2soQmFz
aWNCbG9jayopIGNvbnN0OworCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAg
ICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX2NvZGUobnVsbHB0cikKKyAgICAgICAg
ICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRv
cihjb25zdCBDb2RlJiBjb2RlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2Rl
KCZjb2RlKQorICAgICAgICAgICAgLCBtX2luZGV4KG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRl
eChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqIG9w
ZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvZGUtPmF0KG1faW5k
ZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAg
ICB7CisgICAgICAgICAgICBtX2luZGV4ID0gbV9jb2RlLT5maW5kRmlyc3RCbG9ja0luZGV4KG1f
aW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUqIG1fY29kZTsKKyAgICAg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgY2xhc3MgU3RhY2tT
bG90c0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3RhY2tTbG90c0NvbGxlY3Rp
b24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBt
X2NvZGUubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIGF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzW2luZGV4XS5nZXQo
KTsgfQorICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAg
ICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0YWNr
U2xvdHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFN0
YWNrU2xvdCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
cHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uKiBtX2NvbGxl
Y3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAg
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBz
aXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7Cisg
ICAgfTsKKworICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHN0YWNrU2xvdHMoKSBjb25zdCB7IHJl
dHVybiBTdGFja1Nsb3RzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKKyAgICBjbGFzcyBTcGVj
aWFsc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3BlY2lhbHNDb2xsZWN0aW9u
KGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlLm1fc3BlY2lhbHMuc2l6ZSgpOyB9CisgICAgICAgIFNwZWNpYWwqIGF0KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFsc1tpbmRleF0uZ2V0KCk7IH0KKyAg
ICAgICAgU3BlY2lhbCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24o
bnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3BlY2lhbHNDb2xsZWN0
aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fY29s
bGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFNwZWNpYWwqIG9wZXJh
dG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlv
bi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAg
ICAgICAgICBjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICAgICAgaXRlcmF0
b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAgU3Bl
Y2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1cm4gU3BlY2lhbHNDb2xsZWN0
aW9uKCp0aGlzKTsgfQorICAgIAorICAgIC8vIFRoZSBuYW1lIGhhcyB0byBiZSBhIHN0cmluZyBs
aXRlcmFsLCBzaW5jZSB3ZSBkb24ndCBkbyBhbnkgbWVtb3J5IG1hbmFnZW1lbnQgZm9yIHRoZSBz
dHJpbmcuCisgICAgdm9pZCBzZXRMYXN0UGhhc2VOYW1lKGNvbnN0IGNoYXIqIG5hbWUpCisgICAg
eworICAgICAgICBtX2xhc3RQaGFzZU5hbWUgPSBuYW1lOworICAgIH0KKworICAgIGNvbnN0IGNo
YXIqIGxhc3RQaGFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQaGFzZU5hbWU7IH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tT
bG90czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIEND
YWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07CisgICAgdW5zaWduZWQgbV9u
dW1HUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1GUFRtcHMgeyAwIH07CisgICAgdW5z
aWduZWQgbV9mcmFtZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9jYWxsQXJnQXJlYVNpemUg
eyAwIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOwor
ICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVu
dGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQWlyRnJlcXVlbnRlZEJsb2NrX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8QmFzaWNC
bG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyRnJlcXVlbnRlZEJs
b2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJBbGxvY2F0ZVN0YWNrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFp
ckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIK
KyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5o
IgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1
ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK3ZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiBq
aXQpCit7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29k
ZSk7CisKKyAgICAvLyBJZiB3ZSdyZSBkb2luZyBzdXBlciB2ZXJib3NlIGR1bXBpbmcsIHRoZSBw
aGFzZSBzY29wZSBvZiBhbnkgcGhhc2Ugd2lsbCBhbHJlYWR5IGRvIGEgZHVtcC4KKyAgICBpZiAo
c2hvdWxkRHVtcElSKCkgJiYgIXNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAg
ZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9
CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0aW9ucyBhbmQgdHJh
bnNmb3JtYXRpb25zLgorICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXphdGlvbnMuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NgorCisgICAg
Ly8gVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBoYXZlIGEgcmVhbCByZWdpc3RlciBhbGxvY2F0b3Iu
IFRoZW4sIHdlIGNvdWxkIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKQorICAgIC8vIGluIHBsYWNlIG9m
IHRoZSByZWdpc3RlciBhbGxvY2F0b3Igb25seSBmb3IgdGVzdGluZy4KKyAgICAvLyBGSVhNRTog
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NworICAgIHNwaWxs
RXZlcnl0aGluZyhjb2RlKTsKKworICAgIC8vIFByaW9yIHRvIHRoaXMgcG9pbnQgdGhlIHByb2xv
Z3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBleHBsaWNpdC4gSXQg
YWxzbworICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2ggY2FsbGVlLXNhdmVz
IHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgorICAgIGhhbmRsZUNhbGxlZVNhdmVzKGNvZGUp
OworCisgICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcgQXJncyBpbnRvIEFk
ZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcworICAgIC8vIHRoaXMg
YnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3VsZCBiZSBwcmV0dHkg
ZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQorICAgIC8vIHNob3VsZG4ndCBoYXZlIHRvIHdv
cnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgorICAgIGFsbG9jYXRlU3RhY2soY29kZSk7CisKKyAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBoYXZlIGEgY29kZSBsYXlvdXQgb3B0aW1pemF0
aW9uIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDQ3OAorCisgICAgLy8gRklYTUU6IFdlIG5lZWQgYSBsYXRlIGxpdmVuZXNzIGFuYWx5c2lz
IG92ZXIgcmVnaXN0ZXJzIHRvIGZpbGwgaW4gdGhlCisgICAgLy8gU3BlY2lhbDo6cmVwb3J0VXNl
ZFJlZ2lzdGVycygpLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA1MTEKKworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlk
YXRlKGNvZGUpOworCisgICAgLy8gRG8gYSBmaW5hbCBkdW1wIG9mIEFpci4gTm90ZSB0aGF0IHdl
IGhhdmUgdG8gZG8gdGhpcyBldmVuIGlmIHdlIGFyZSBkb2luZyBwZXItcGhhc2UgZHVtcGluZywK
KyAgICAvLyBzaW5jZSB0aGUgZmluYWwgZ2VuZXJhdGlvbiBpcyBub3QgYSBwaGFzZS4KKyAgICBp
ZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGFmdGVyICIsIGNvZGUu
bGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAgICAgICBkYXRh
TG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIEFuZCBub3csIHdlIGdlbmVyYXRlIGNvZGUuCisg
ICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LmFkZFB0cihDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBHZW5lcmF0aW9uQ29udGV4dCBjb250ZXh0OworICAg
IGNvbnRleHQuY29kZSA9ICZjb2RlOworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVs
cGVyczo6TGFiZWw+IGJsb2NrTGFiZWxzKGNvZGUuc2l6ZSgpKTsKKyAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNvZGUuc2l6ZSgpKTsK
KworICAgIGF1dG8gbGluayA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAsIEJhc2ljQmxv
Y2sqIHRhcmdldCkgeworICAgICAgICBpZiAoYmxvY2tMYWJlbHNbdGFyZ2V0XS5pc1NldCgpKSB7
CisgICAgICAgICAgICBqdW1wLmxpbmtUbyhibG9ja0xhYmVsc1t0YXJnZXRdLCAmaml0KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJsb2NrSnVtcHNbdGFyZ2V0
XS5hcHBlbmQoanVtcCk7CisgICAgfTsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7CisgICAgICAgIGJsb2NrSnVtcHNbYmxvY2tdLmxpbmsoJmppdCk7CisgICAgICAgIEFT
U0VSVChibG9jay0+c2l6ZSgpID49IDEpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpK
dW1wIGp1bXAgPSBibG9jay0+YXQoaSkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAg
ICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoYmxvY2stPmxhc3QoKS5vcGNvZGUgPT0gSnVtcAorICAgICAgICAgICAgJiYgYmxv
Y2stPnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmluZE5leHRCbG9jayhibG9jaykpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5vcGNvZGUgPT0g
UmV0KSB7CisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVwcmVzZW50IHRoZSBm
dWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bworICAgICAgICAgICAg
Ly8gaGF2ZSB0aGlzIG92ZXJyaWRlLgorICAgICAgICAgICAgaml0LmVtaXRGdW5jdGlvbkVwaWxv
Z3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9j
ay0+bGFzdCgpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIGZvciAoSW5zdCYgaW5z
dCA6ICpibG9jaykKKyAgICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRlKGppdCwgY29udGV4
dCk7CisgICAgICAgIHN3aXRjaCAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkgeworICAgICAgICBj
YXNlIDA6CisgICAgICAgICAgICBBU1NFUlQoIWp1bXAuaXNTZXQoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3Vj
Y2Vzc29yQmxvY2soMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAg
ICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAgICAg
ICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxvY2soMSkgIT0gY29kZS5maW5kTmV4dEJsb2NrKGJs
b2NrKSkKKyAgICAgICAgICAgICAgICBsaW5rKGppdC5qdW1wKCksIGJsb2NrLT5zdWNjZXNzb3JC
bG9jaygxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgbGF0ZVBhdGggOiBjb250ZXh0LmxhdGVQ
YXRocykKKyAgICAgICAgbGF0ZVBhdGgtPnJ1bihqaXQsIGNvbnRleHQpOworfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGVfaAorI2RlZmluZSBBaXJHZW5lcmF0
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0Nh
bGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29k
ZTsKKworLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3QgaGFkIGFueSBzdGFj
ayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55CisvLyByZWdpc3RlciBh
bGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLCBhbmQgdGhlbiBnZW5lcmF0
ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuCisvLyBDQ2FsbEhlbHBlcnMgaW5zdGFuY2UuIE5v
dGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcyBpbiB0aGUgc3VwcGxpZWQgY29kZSBhcyBp
dCBpcworLy8gZ2VuZXJhdGluZy4KK3ZvaWQgZ2VuZXJhdGUoQ29kZSYsIENDYWxsSGVscGVycyYp
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworLy8g
VGhpcyBpcyBnZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyNpbmNsdWRlICJBaXJP
cGNvZGVHZW5lcmF0ZWQuaCIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5lcmF0aW9u
Q29udGV4dF9oCisjZGVmaW5lIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4
dCB7CisgICAgdHlwZWRlZiB2b2lkIExhdGVQYXRoRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgR2Vu
ZXJhdGlvbkNvbnRleHQmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8TGF0ZVBhdGhGdW5jdGlv
bj4gTGF0ZVBhdGg7CisKKyAgICBWZWN0b3I8UmVmUHRyPExhdGVQYXRoPj4gbGF0ZVBhdGhzOwor
ICAgIENvZGUqIGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGlvbkNvbnRl
eHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxl
ZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRl
ICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBoYW5kbGVD
YWxsZWVTYXZlcyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2Rl
LCAiaGFuZGxlQ2FsbGVlU2F2ZXMiKTsKKworICAgIFJlZ2lzdGVyU2V0IHVzZWRDYWxsZWVTYXZl
czsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAo
SW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wRmFzdCgK
KyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IEF0IGZpcnN0IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2VkIHJlZ3MuCisgICAgICAgICAgICAgICAg
ICAgIHVzZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3ZSBmaWx0ZXIgdG8gcmVhbGx5IGdldCB0
aGUgY2FsbGVlIHNhdmVzLgorICAgIHVzZWRDYWxsZWVTYXZlcy5maWx0ZXIoUmVnaXN0ZXJTZXQ6
OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKKyAgICBpZiAoIXVzZWRDYWxsZWVTYXZlcy5udW1i
ZXJPZlNldFJlZ2lzdGVycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb2RlLmNhbGxlZVNh
dmVSZWdpc3RlcnMoKSA9IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KHVzZWRDYWxsZWVTYXZlcyk7CisK
KyAgICBzaXplX3QgYnl0ZVNpemUgPSAwOworICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkKKyAgICAgICAgYnl0ZVNpemUg
PSBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KC1lbnRyeS5vZmZzZXQoKSksIGJ5dGVTaXpl
KTsKKworICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFja1Nsb3QoYnl0ZVNp
emUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgLy8gVGhpcyBpcyBhIGJpdCB3ZWlyZCBz
aW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50IHN0YWNrIHNsb3Qg
dG8gdGhpcworICAgIC8vIGFyZWEuIEFsc28sIG91ciBydW50aW1lIGRvZXMgbm90IHJlcXVpcmUg
dXMgdG8gcGluIHRoZSBzYXZlcyBhcmVhLiBNYXliZSB3ZSBzaG91bGRuJ3QgcGluIGl0PworICAg
IHNhdmVzQXJlYS0+c2V0T2Zmc2V0RnJvbUZQKC1ieXRlU2l6ZSk7CisKKyAgICBhdXRvIGFyZ0Zv
ciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIC0+IEFyZyB7CisgICAgICAg
IHJldHVybiBBcmc6OnN0YWNrKHNhdmVzQXJlYSwgZW50cnkub2Zmc2V0KCkgKyBieXRlU2l6ZSk7
CisgICAgfTsKKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgCisg
ICAgLy8gRmlyc3QgaW5zZXJ0IHNhdmluZyBjb2RlIGluIHRoZSBwcm9sb2d1ZS4KKyAgICBmb3Ig
KGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpIHsKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgIDAsIGVudHJ5
LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgY29kZVswXS0+YXQoMCkub3JpZ2lu
LAorICAgICAgICAgICAgVG1wKGVudHJ5LnJlZygpKSwgYXJnRm9yKGVudHJ5KSk7CisgICAgfQor
ICAgIGluc2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOworCisgICAgLy8gTm93IGluc2VydCBy
ZXN0b3JlIGNvZGUgYXQgZXBpbG9ndWVzLgorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7CisgICAgICAgIEluc3QmIGxhc3QgPSBibG9jay0+bGFzdCgpOworICAgICAgICBpZiAo
bGFzdC5vcGNvZGUgIT0gUmV0KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9y
IChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVy
cygpKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAg
IGJsb2NrLT5zaXplKCkgLSAxLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92ZSA6IE1vdmVEb3Vi
bGUsIGxhc3Qub3JpZ2luLAorICAgICAgICAgICAgICAgIGFyZ0ZvcihlbnRyeSksIFRtcChlbnRy
eS5yZWcoKSkpOworICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2Nr
KTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisjZGVmaW5lIEFpckhhbmRs
ZUNhbGxlZVNhdmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBw
aGFzZSBpZGVudGlmaWVzIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBhbmQgYWRkcyBjb2RlIHRvIHNh
dmUvcmVzdG9yZSB0aGVtIGluIHRoZQorLy8gcHJvbG9ndWUvZXBpbG9ndWUgdG8gdGhlIGNvZGUu
IEl0J3MgYSBtYW5kYXRvcnkgcGhhc2UuCisKKy8vIEZJWE1FOiBJdCB3b3VsZCBiZSBjb29sIHRv
IG1ha2UgdGhpcyBtb3JlIGludGVyYWN0aXZlIHdpdGggdGhlIEFpciBjbGllbnQgYW5kIGFsc28g
bW9yZQorLy8gcG93ZXJmdWwuCisvLyBXZSBzaG91bGQgaGF2ZSBzaHJpbmsgd3JhcHBpbmc6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTgKKy8vIFdlIHNob3Vs
ZCBtYWtlIHRoaXMgaW50ZXJhY3Qgd2l0aCB0aGUgY2xpZW50OiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU5CisKK3ZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29k
ZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25T
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkFpckJhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCit2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9j
aykKK3sKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhibG9jay0+bV9pbnN0cywgbV9pbnNlcnRpb25z
KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNl
cnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgxIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWly
SW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgQWlySW5zZXJ0aW9uU2V0X2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgQ29kZTsKKwor
dHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247CisKK2NsYXNzIEluc2VydGlv
blNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUmIGNvZGUpCisgICAgICAgIDog
bV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUmIGNvZGUoKSB7IHJldHVybiBt
X2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9pZCBhcHBlbmRJbnNl
cnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0aW9ucy5hcHBlbmQo
c3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwgSW5zdCYmIGluc3Qp
CisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCBzdGQ6OmZv
cndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRleCwgSW5zdChzdGQ6
OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgdm9pZCBl
eGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAg
VmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpckluc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlySW5zdC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
VmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc3Q6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQob3Bjb2RlLCAiICIsIGxpc3REdW1wKGFy
Z3MpKTsKKyAgICBpZiAob3JpZ2luKSB7CisgICAgICAgIGlmIChhcmdzLnNpemUoKSkKKyAgICAg
ICAgICAgIG91dC5wcmludCgiLCAiKTsKKyAgICAgICAgb3V0LnByaW50KCpvcmlnaW4pOworICAg
IH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0X2gKKyNkZWZpbmUgQWlySW5zdF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAi
QWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBSZWdpc3RlclNldDsKKworbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJh
dGlvbkNvbnRleHQ7CisKK3N0cnVjdCBJbnN0IHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3Rv
cjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJbnN0KCkKKyAgICAgICAgOiBvcmlnaW4obnVsbHB0
cikKKyAgICAgICAgLCBvcGNvZGUoTm9wKQorICAgIHsKKyAgICB9CisgICAgCisgICAgSW5zdChP
cGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAgICA6IG9yaWdpbihvcmlnaW4pCisg
ICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBv
cmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogYXJnc3sg
YXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwg
b3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBW
YWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhh
cmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bj
b2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmln
aW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhXVEY6Om1vdmUoYXJndW1l
bnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUp
CisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5jdG9ycyBhbGwgYXZv
aWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0gZm9yIHRoaW5ncyB0
aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVkOyBpZiB5b3UncmUg
Y2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQorICAgIC8vIHByb2Jh
Ymx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBvbmx5IHdhbGtzIHRob3NlIFRtcHMg
dGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBpdCBkb2Vzbid0IHRlbGwgeW91IHRo
ZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgZm9yIChBcmcmIGFyZyA6IGFyZ3MpCisgICAgICAgICAgICBhcmcuZm9yRWFjaFRt
cEZhc3QoZnVuY3Rvcik7CisgICAgfQorCisgICAgdHlwZWRlZiB2b2lkIEVhY2hBcmdDYWxsYmFj
ayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSk7CisgICAgCisgICAgLy8gQ2FsbHMgdGhlIGZ1
bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVy
YXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYpOworCisgICAg
Ly8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xlLCB0eXBlKS4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChjb25zdCBGdW5jdG9yJiBm
dW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZygKKyAgICAgICAgICAgIFsmXSAoQXJn
JiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAg
IGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIGZ1bmN0b3IpOworICAgICAgICAgICAgfSk7Cisg
ICAgfQorCisgICAgLy8gVGhpbmcgY2FuIGJlIGVpdGhlciBBcmcgb3IgVG1wLgorICAgIHRlbXBs
YXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChj
b25zdCBGdW5jdG9yJik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhpcyBpbnN0cnVjdGlv
biBoYXMgYSBTcGVjaWFsKi4gVGhpcyB1bmxvY2tzIHNvbWUgZXh0cmEgZnVuY3Rpb25hbGl0eS4K
KyAgICBib29sIGhhc1NwZWNpYWwoKSBjb25zdDsKKworICAgIC8vIFJlcG9ydHMgYW55IGFkZGl0
aW9uYWwgcmVnaXN0ZXJzIGNsb2JiZXJlZCBieSB0aGlzIG9wZXJhdGlvbi4gTm90ZSB0aGF0IGZv
ciBlZmZpY2llbmN5LAorICAgIC8vIGV4dHJhQ2xvYmJlcmVkUmVncygpIG9ubHkgd29ya3MgaWYg
aGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFD
bG9iYmVyZWRSZWdzKCk7CisKKyAgICAvLyBVc2UgdGhpcyB0byByZXBvcnQgd2hpY2ggcmVnaXN0
ZXJzIGFyZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBkb25lIGp1c3QgYmVmb3JlIGNvZGVnZW4uIE5v
dGUKKyAgICAvLyB0aGF0IGZvciBlZmZpY2llbmN5LCByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgb25s
eSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIHZvaWQgcmVwb3J0VXNl
ZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYpOworCisgICAgLy8gSXMgdGhpcyBpbnN0cnVj
dGlvbiBpbiBvbmUgb2YgdGhlIHZhbGlkIGZvcm1zIHJpZ2h0IG5vdz8gVGhpcyBmdW5jdGlvbiBp
cyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9v
bCBpc1ZhbGlkRm9ybSgpOworCisgICAgLy8gQXNzdW1pbmcgdGhpcyBpbnN0cnVjdGlvbiBpcyBp
biBhIHZhbGlkIGZvcm0gcmlnaHQgbm93LCB3aWxsIGl0IHN0aWxsIGJlIGluIG9uZSBvZiB0aGUg
dmFsaWQKKyAgICAvLyBmb3JtcyBpZiB3ZSBwdXQgYW4gQWRkciByZWZlcmVuY2luZyB0aGUgc3Rh
Y2sgKG9yIGEgU3RhY2tTbG90IG9yIENhbGxBcmcsIG9mIGNvdXJzZSkgaW4gdGhlCisgICAgLy8g
Z2l2ZW4gaW5kZXg/IFNwaWxsaW5nIHVzZXMgdGhpczogaXQgd2Fsa3MgdGhlIGFyZ3MgYnkgaW5k
ZXggdG8gZmluZCBUbXBzIHRoYXQgbmVlZCBzcGlsbGluZzsKKyAgICAvLyBpZiBpdCBmaW5kcyBv
bmUsIGl0IGNhbGxzIHRoaXMgdG8gc2VlIGlmIGl0IGNhbiByZXBsYWNlIHRoZSBBcmc6OlRtcCB3
aXRoIGFuIEFyZzo6QWRkci4gSWYgaXQKKyAgICAvLyBmaW5kcyBhIG5vbi1UbXAgQXJnLCB0aGVu
IGl0IGNhbGxzIHRoYXQgQXJnJ3MgZm9yRWFjaFRtcCB0byBkbyBhIHJlcGxhY2VtZW50IHRoYXQg
d2F5LgorICAgIC8vCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieSBv
cGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgYWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5k
ZXgpOworCisgICAgLy8gR2VuZXJhdGUgc29tZSBjb2RlIGZvciB0aGlzIGluc3RydWN0aW9uLiBU
aGlzIGlzLCBsaWtlLCBsaXRlcmFsbHkgb3VyIGJhY2tlbmQuIElmIHRoaXMgaXMgdGhlCisgICAg
Ly8gdGVybWluYWwsIGl0IHJldHVybnMgdGhlIGp1bXAgdGhhdCBuZWVkcyB0byBiZSBsaW5rZWQg
Zm9yIHRoZSAidGhlbiIgY2FzZSwgd2l0aCB0aGUgImVsc2UiCisgICAgLy8gY2FzZSBiZWluZyBm
YWxsLXRocm91Z2guIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dl
bmVyYXRvci5yYi4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoQ0NhbGxIZWxwZXJz
JiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCisgICAgQXJnTGlzdCBhcmdzOworICAgIFZhbHVlKiBvcmlnaW47IC8vIFRoZSBCMzo6
VmFsdWUgdGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbS4KKyAgICBPcGNvZGUgb3Bjb2RlOworfTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckluc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBaXJJbnN0SW5saW5lc19oCisjZGVmaW5lIEFpckluc3RJbmxpbmVzX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQWly
T3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNTdGFj
a21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRm9y
RWFjaDsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8VG1wPiB7CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKEluc3QmIGluc3QsIGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpbnN0LmZvckVhY2hUbXAoZnVuY3Rv
cik7CisgICAgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8QXJnPiB7CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKEluc3QmIGlu
c3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpbnN0LmZvckVhY2hB
cmcoZnVuY3Rvcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVu
YW1lIEZ1bmN0b3I+Cit2b2lkIEluc3Q6OmZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
K3sKKyAgICBGb3JFYWNoPFRoaW5nPjo6Zm9yRWFjaCgqdGhpcywgZnVuY3Rvcik7Cit9CisKK2lu
bGluZSBib29sIEluc3Q6Omhhc1NwZWNpYWwoKSBjb25zdAoreworICAgIHJldHVybiBhcmdzLnNp
emUoKSAmJiBhcmdzWzBdLmlzU3BlY2lhbCgpOworfQorCitpbmxpbmUgY29uc3QgUmVnaXN0ZXJT
ZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncygpCit7CisgICAgQVNTRVJUKGhhc1NwZWNpYWwo
KSk7CisgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUNsb2JiZXJlZFJlZ3MoKnRo
aXMpOworfQorCitpbmxpbmUgdm9pZCBJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOwor
ICAgIGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0ZXJzKCp0aGlzLCB1c2VkUmVn
aXN0ZXJzKTsKK30KKworaW5saW5lIGJvb2wgaXNTaGlmdFZhbGlkKGNvbnN0IEluc3QmIGluc3Qp
Cit7CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICByZXR1cm4gaW5zdC5hcmdzWzBd
ID09IFRtcChYODZSZWdpc3RlcnM6OmVjeCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShpbnN0
KTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfSAgIAorCitpbmxpbmUgYm9vbCBpc0xzaGlm
dDMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNTaGlmdFZhbGlkKGlu
c3QpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdElubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyTGl2ZW5lc3NfaAorI2RlZmluZSBBaXJMaXZlbmVzc19oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1
ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gWW91IGNhbiBjb21wdXRl
IGxpdmVuZXNzIG92ZXIgVG1wJ3Mgb3Igb3ZlciBBcmcncy4gSWYgeW91IGNvbXB1dGUgb3ZlciBB
cmcncywgeW91IGdldCBib3RoCisvLyBzdGFjayBsaXZlbmVzcyBhbmQgdG1wIGxpdmVuZXNzLgor
dGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+CitjbGFzcyBMaXZlbmVzcyB7CitwdWJsaWM6CisgICAg
TGl2ZW5lc3MoQ29kZSYgY29kZSkKKyAgICB7CisgICAgICAgIG1fbGl2ZUF0SGVhZC5yZXNpemUo
Y29kZS5zaXplKCkpOworICAgICAgICBtX2xpdmVBdFRhaWwucmVzaXplKGNvZGUuc2l6ZSgpKTsK
KworICAgICAgICBJbmRleFNldDxCYXNpY0Jsb2NrPiBzZWVuOworCisgICAgICAgIGJvb2wgY2hh
bmdlZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7CisgICAgICAgICAgICBjaGFu
Z2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGJsb2NrSW5kZXggPSBjb2Rl
LnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gY29kZS5hdChibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBMb2NhbENhbGMgbG9j
YWxDYWxjKCp0aGlzLCBibG9jayk7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3QgaW5zdElu
ZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KQorICAgICAgICAgICAgICAgICAgICBs
b2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAgICAgICAgICAgICAg
Ym9vbCBmaXJzdFRpbWUgPSBzZWVuLmFkZChibG9jayk7CisgICAgICAgICAgICAgICAgaWYgKCFm
aXJzdFRpbWUgJiYgbG9jYWxDYWxjLmxpdmUoKSA9PSBtX2xpdmVBdEhlYWRbYmxvY2tdKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2st
PnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbGl2ZUF0VGFpbFtwcmVk
ZWNlc3Nvcl0uYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmxpdmUoKS5i
ZWdpbigpLCBsb2NhbENhbGMubGl2ZSgpLmVuZCgpKTsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgbV9saXZlQXRIZWFkW2Jsb2NrXSA9IGxvY2FsQ2FsYy50YWtlTGl2ZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY29uc3QgSGFzaFNldDxUaGlu
Zz4mIGxpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKKyAgICBjb25zdCBIYXNoU2V0PFRo
aW5nPiYgbGl2ZUF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2xpdmVBdFRhaWxbYmxvY2tdOworICAgIH0KKworICAgIC8vIFRoaXMgY2FsY3Vs
YXRvciBoYXMgdG8gYmUgcnVuIGluIHJldmVyc2UuCisgICAgY2xhc3MgTG9jYWxDYWxjIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIExvY2FsQ2FsYyhMaXZlbmVzcyYgbGl2ZW5lc3MsIEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2xpdmUobGl2ZW5lc3MubGl2ZUF0VGFpbChibG9j
aykpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+
JiBsaXZlKCkgY29uc3QgeyByZXR1cm4gbV9saXZlOyB9CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+
JiYgdGFrZUxpdmUoKSB7IHJldHVybiBXVEY6Om1vdmUobV9saXZlKTsgfQorCisgICAgICAgIHZv
aWQgZXhlY3V0ZShJbnN0JiBpbnN0KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBGaXJzdCBo
YW5kbGUgZGVmJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAgICAgICAg
ICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUp
KQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShhcmcpOworICAgICAgICAg
ICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBOZXh0IGhhbmRsZSBjbG9iYmVyZWQgcmVnaXN0
ZXJzLgorICAgICAgICAgICAgaWYgKGluc3QuaGFzU3BlY2lhbCgpKSB7CisgICAgICAgICAgICAg
ICAgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAgICAgICAgICAgICAg
ICBbdGhpc10gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1v
dmUoVGhpbmcoVG1wKHJlZykpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmFsbHkgaGFuZGxlIHVzZSdzLgor
ICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10g
KFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbGl2ZS5hZGQoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFzaFNldDxUaGluZz4gbV9saXZlOworICAg
IH07CisgICAgCitwcml2YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhp
bmc+PiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgSGFzaFNldDxUaGlu
Zz4+IG1fbGl2ZUF0VGFpbDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJMaXZlbmVzc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rl
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjIgQEAKKyMgQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgU3lsbGFidXM6CisjCisjIFJvbGVzIGFuZCB0eXBl
czoKKyMgVTpHID0+IHVzZSBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQor
IyBEOkcgPT4gZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVE
OkcgPT4gdXNlIGFuZCBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUK
KyMgVTpGID0+IHVzZSBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RiA9PiBkZWYg
b2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpGID0+IHVzZSBhbmQgZGVmIG9mIGEg
ZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMKKyMgQXJndW1lbnQga2luZHM6CisjIFRtcCA9PiB0
ZW1wb3Jhcnkgb3IgcmVnaXN0ZXIKKyMgSW1tID0+IDMyLWJpdCBpbW1lZGlhdGUgaW50CisjIElt
bTY0ID0+IFRydXN0ZWRJbW02NAorIyBBZGRyID0+IGFkZHJlc3MgYXMgdGVtcG9yYXJ5L3JlZ2lz
dGVyK29mZnNldAorIyBJbmRleCA9PiBCYXNlSW5kZXggYWRkcmVzcworIyBBYnMgPT4gQWJzb2x1
dGVBZGRyZXNzCisjCisjIFRoZSBwYXJzZXIgdmlld3MgdGhlc2UgdGhpbmdzIGFzIGtleXdvcmRz
LCBhbmQgdW5kZXJzdGFuZHMgdGhhdCB0aGV5IGZhbGwgaW50byB0d28gZGlzdGluY3QgY2xhc3Nl
cworIyBvZiB0aGluZ3MuIFNvLCBhbHRob3VnaCB0aGlzIGZpbGUgdXNlcyBhIHBhcnRpY3VsYXIg
aW5kZW50YXRpb24gc3R5bGUsIG5vbmUgb2YgdGhlIHdoaXRlc3BhY2Ugb3IKKyMgZXZlbiBuZXds
aW5lcyBhcmUgbWVhbmluZ2Z1bCB0byB0aGUgcGFyc2VyLiBGb3IgZXhhbXBsZSwgeW91IGNvdWxk
IHdyaXRlOgorIworIyBGb280MiBVOkcsIFVEOkYgSW1tLCBUbXAgQWRkciwgVG1wCisjCisjIEFu
ZCB0aGUgcGFyc2VyIHdvdWxkIGtub3cgdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzOgorIworIyBG
b280MiBVOkcsIFVEOkYKKyMgICAgIEltbSwgVG1wCisjICAgICBBZGRyLCBUbXAKKyMKKyMgSS5l
LiBhIHR3by1mb3JtIGluc3RydWN0aW9uIHRoYXQgdXNlcyBhIEdQUiBvciBhbiBpbnQgaW1tZWRp
YXRlIGFuZCB1c2VzK2RlZnMgYSBmbG9hdCByZWdpc3Rlci4KKworIyBOb3RlIHRoYXQgdGhlIG9w
Y29kZXMgaGVyZSBoYXZlIGEgbGVhZGluZyBjYXBpdGFsIChBZGQzMikgYnV0IG11c3QgY29ycmVz
cG9uZCB0byBNYWNyb0Fzc2VtYmxlcgorIyBBUEkgdGhhdCBoYXMgYSBsZWFkaW5nIGxvd2VyLWNh
c2UgKGFkZDMyKS4KKworTm9wCisKK0FkZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAg
SW1tLCBBZGRyCisgICAgSW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBUbXAsIEFkZHIKKwor
QWRkMzIgVTpHLCBVOkcsIEQ6RworICAgIEltbSwgVG1wLCBUbXAKKworQWRkNjQgVTpHLCBVRDpH
CisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAgIEFkZHIsIFRt
cAorCitBZGQ2NCBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRtcAorCitBbmQzMiBVOkcs
IFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAgVG1wLCBBZGRyCisgICAgQWRk
ciwgVG1wCisgICAgSW1tLCBBZGRyCisKK0FuZDY0IFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisg
ICAgSW1tLCBUbXAKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwgVG1wCisgICAgSW1t
LCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAKKwor
IyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVyIHRoZSBmdWxsIHJlZ2lzdGVyIHNpemUsIHdo
aWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0IGRlcGVuZGluZyBvbgorIyB0aGUgcGxhdGZv
cm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0IHRoaXMgaXMgYSBnb29kIHRoaW5nOyBpdCBt
aWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEKKyMgTW92ZTY0IGluc3RydWN0aW9uLiBPVE9I
LCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkgaGF2ZSB0aGlzIG5vdGlvbiBvZiAibW92ZSgp
IiB0aGF0IGJhc2ljYWxseQorIyBtZWFucyBtb3ZlUHRyLgorTW92ZSBVOkcsIEQ6RworICAgIFRt
cCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxv
YWRQdHIgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBjb2RlLWdlbmVyYXRl
ZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBJbmRleCwgVG1wIGFzIGxvYWRQdHIKKyAgICBU
bXAsIEFkZHIgYXMgc3RvcmVQdHIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlUHRyCisKK01vdmUz
MiBVOkcsIEQ6RworICAgIFRtcCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRyCisgICAgQWRkciwg
VG1wIGFzIGxvYWQzMgorICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAgVG1wLCBBZGRyIGFz
IHN0b3JlMzIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIKKworTW92ZURvdWJsZSBVOkYsIEQ6
RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBJbmRleCwg
VG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3VibGUKKyAgICBUbXAs
IEluZGV4IGFzIHN0b3JlRG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6RywgRDpGCisgICAgVG1w
LCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRtcAorCitCcmFuY2hB
ZGQzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBS
ZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRt
cCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hNdWwzMiBVOkcsIFU6Rywg
VUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBBZGRyLCBU
bXAKKworQnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRt
cCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAg
ICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAKKworQnJhbmNoTmVn
MzIgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKworSnVtcCAvYnJhbmNoCisK
K1JldCAvdGVybWluYWwKKworQnJlYWtwb2ludCAvdGVybWluYWwKKworIyBBaXIgYWxsb3dzIGZv
ciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRlcm1pbmVkIGVudGly
ZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUgdGhlIGZpcnN0IG9w
ZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0
ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29wZShDb2RlJiBjb2Rl
LCBjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9jb2RlKGNvZGUpCisgICAgLCBtX25hbWUobmFt
ZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRh
TG9nKCJBaXIgYWZ0ZXIgIiwgY29kZS5sYXN0UGhhc2VOYW1lKCksICIsIGJlZm9yZSAiLCBuYW1l
LCAiOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgaWYgKHNob3Vs
ZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhj
b2RlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAgIG1fY29kZS5zZXRM
YXN0UGhhc2VOYW1lKG1fbmFtZSk7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFz
ZSgpKQorICAgICAgICB2YWxpZGF0ZShtX2NvZGUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3Bl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNl
U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUGhhc2VTY29wZV9oCisj
ZGVmaW5lIEFpclBoYXNlU2NvcGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2Rl
OworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQaGFzZVNj
b3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKENvZGUmLCBjb25zdCBjaGFyKiBuYW1lKTsK
KyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFsaWRhdGlvbgorCitwcml2YXRlOgor
ICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBt
X2R1bXBCZWZvcmU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyUGhhc2VTY29wZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBn
cHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPEdQUlJlZz4qIHJlc3Vs
dDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgK
KyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0ID0gbmV3IFZl
Y3RvcjxHUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBhbGwgPSBSZWdpc3RlclNl
dDo6YWxsR1BScygpOworICAgICAgICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2Vy
dmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBjYWxsZWVT
YXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgIGFs
bC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAg
ICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3RvcjxGUFJS
ZWc+JiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPEZQUlJlZz4q
IHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxf
b25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVzdWx0ID0g
bmV3IFZlY3RvcjxGUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBhbGwgPSBSZWdp
c3RlclNldDo6YWxsRlBScygpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9
IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBhbGwuZm9y
RWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVz
dWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAg
IGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5mcHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAg
ICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8UmVnPiYgcmVn
c0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUgdHlwZSkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPFJl
Zz4qIHJlc3VsdFtBcmc6Om51bVR5cGVzXTsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25j
ZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAg
ICAgICAgICAgcmVzdWx0W0FyZzo6R1BdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAg
ICBmb3IgKEdQUlJlZyByZWcgOiBncHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAg
ICAgcmVzdWx0W0FyZzo6R1BdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICAgICAgcmVzdWx0
W0FyZzo6RlBdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBmb3IgKEZQUlJlZyBy
ZWcgOiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6
RlBdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdFt0
eXBlXTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVn
aXN0ZXJQcmlvcml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorI2RlZmluZSBBaXJSZWdpc3RlclByaW9y
aXR5X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIKKyNpbmNs
dWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0
b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
Citjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpOworY29uc3QgVmVj
dG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
QmFuaz4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjsKK3RlbXBsYXRlPD4gc3RydWN0
IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEdQ
UlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGdwcnNJblByaW9yaXR5T3JkZXIoKTsg
fQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxGUFJJbmZv
PiB7CisgICAgY29uc3QgVmVjdG9yPEZQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJu
IGZwcnNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFuaz4K
K2NvbnN0IFZlY3Rvcjx0eXBlbmFtZSBCYW5rOjpSZWdpc3RlclR5cGU+JiByZWdzSW5Qcmlvcml0
eU9yZGVyKCkKK3sKKyAgICByZXR1cm4gUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEJhbms+Ojpp
blByaW9yaXR5T3JkZXIoKTsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5
T3JkZXIoQXJnOjpUeXBlKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclJlZ2lzdGVyUHJpb3JpdHlf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkFpclNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjb25zdCBjaGFyKiBjb25zdCBTcGVjaWFsOjpkdW1wUHJlZml4ID0gIiYi
OworCitTcGVjaWFsOjpTcGVjaWFsKCkKKyAgICA6IG1faW5kZXgoVUlOVF9NQVgpCit7Cit9CisK
K1NwZWNpYWw6On5TcGVjaWFsKCkKK3sKK30KKworQ1N0cmluZyBTcGVjaWFsOjpuYW1lKCkgY29u
c3QKK3sKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgZHVtcEltcGwob3V0KTsKKyAg
ICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOworfQorCit2b2lkIFNwZWNpYWw6OmR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZpeCk7CisgICAgZHVt
cEltcGwob3V0KTsKKyAgICBpZiAobV9pbmRleCAhPSBVSU5UX01BWCkKKyAgICAgICAgb3V0LnBy
aW50KG1faW5kZXgpOworfQorCit2b2lkIFNwZWNpYWw6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCp0aGlzLCAiOiAiKTsKKyAgICBkZWVwRHVtcElt
cGwob3V0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGVjaWFsX2gK
KyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgorI2luY2x1ZGUgPHd0
Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK2NsYXNzIFNwZWNpYWwg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNpYWwpOworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJl
Zml4OworICAgIAorICAgIFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TcGVjaWFsKCk7CisKKyAg
ICBDU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBmb3JFYWNoQXJnKElu
c3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpID0gMDsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNWYWxpZChJbnN0JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBhZG1p
dHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpID0gMDsKKworICAgIC8vIFRoaXMgZ2V0
cyBjYWxsZWQgb24gZm9yIGVhY2ggSW5zdCB0aGF0IHVzZXMgdGhpcyBTcGVjaWFsLiBOb3RlIHRo
YXQgdGhlcmUgaXMgbm8gd2F5IHRvCisgICAgLy8gZ3VhcmFudGVlIHRoYXQgYSBTcGVjaWFsIGdl
dHMgdXNlZCBmcm9tIGp1c3Qgb25lIEluc3QsIGJlY2F1c2UgQWlyIG1pZ2h0IHRhaWxkdXAgbGF0
ZS4gU28sCisgICAgLy8gaWYgeW91IHdhbnQgdG8gcGFzcyB0aGlzIGluZm9ybWF0aW9uIGRvd24g
dG8gZ2VuZXJhdGUoKSwgdGhlbiB5b3UgaGF2ZSB0byBlaXRoZXI6CisgICAgLy8KKyAgICAvLyAx
KSBHZW5lcmF0ZSBBaXIgdGhhdCBzdGFydHMgd2l0aCBhIHNlcGFyYXRlIFNwZWNpYWwgcGVyIFBh
dGNoIEluc3QsIGFuZCB0aGVuIG1lcmdlCisgICAgLy8gICAgdXNlZFJlZ2lzdGVyIHNldHMuIFRo
aXMgaXMgcHJvYmFibHkgbm90IGdyZWF0LCBidXQgaXQgb3B0aW1pemVzIGZvciB0aGUgY29tbW9u
IGNhc2UgdGhhdAorICAgIC8vICAgIEFpciBkaWRuJ3QgZHVwbGljYXRlIGNvZGUgb3IgdGhhdCBz
dWNoIGR1cGxpY2F0aW9uIGRpZG4ndCBjYXVzZSBhbnkgaW50ZXJlc3RpbmcgY2hhbmdlcyB0bwor
ICAgIC8vICAgIHJlZ2lzdGVyIGFzc2lnbm1lbnQuCisgICAgLy8KKyAgICAvLyAyKSBIYXZlIHRo
ZSBTcGVjaWFsIG1haW50YWluIGEgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJTZXQ+LiBUaGlzIHdv
cmtzIGJlY2F1c2UgdGhlIGFuYWx5c2lzCisgICAgLy8gICAgdGhhdCBmZWVkcyBpbnRvIHRoaXMg
Y2FsbCBpcyBwZXJmb3JtZWQganVzdCBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIGFuZCB0aGVyZSBp
cyBubyB3YXkKKyAgICAvLyAgICBmb3IgdGhlIFZlY3Rvcjw+J3MgdGhhdCBjb250YWluIHRoZSBJ
bnN0cyB0byBiZSByZWFsbG9jYXRlZC4gVGhpcyBhbGxvd3MgZ2VuZXJhdGUoKSB0bworICAgIC8v
ICAgIGNvbnN1bHQgdGhlIEhhc2hNYXAuCisgICAgLy8KKyAgICAvLyAzKSBIeWJyaWQ6IHlvdSBj
b3VsZCB1c2UgKDEpIGFuZCBmaXJlIHVwIGEgSGFzaE1hcCBpZiB5b3Ugc2VlIG11bHRpcGxlIGNh
bGxzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGl0J3Mgbm90IHBvc3NpYmxlIHRvIHJlbHkg
b24gcmVwb3J0VXNlZFJlZ2lzdGVycygpIGJlaW5nIGNhbGxlZCBpbiB0aGUgc2FtZSBvcmRlcgor
ICAgIC8vIGFzIGdlbmVyYXRlKCkuIElmIHdlIGNvdWxkIHJlbHkgb24gdGhhdCwgdGhlbiB3ZSBj
b3VsZCBqdXN0IGhhdmUgZWFjaCBTcGVjaWFsIGluc3RhbmNlCisgICAgLy8gbWFpbnRhaW4gYSBW
ZWN0b3Igb2YgUmVnaXN0ZXJTZXQncyBhbmQgdGhlbiBwcm9jZXNzIHRoYXQgdmVjdG9yIGluIHRo
ZSByaWdodCBvcmRlciBpbgorICAgIC8vIGdlbmVyYXRlKCkuIEJ1dCwgdGhlIG9yZGVyaW5nIGRp
ZmZlcmVuY2UgaXMgdW5saWtlbHkgdG8gY2hhbmdlIHNpbmNlIGl0IHdvdWxkIGhhcm0gdGhlCisg
ICAgLy8gcGVyZm9ybWFuY2Ugb2YgdGhlIGxpdmVuZXNzIGFuYWx5c2lzLgorICAgIC8vCisgICAg
Ly8gQ3VycmVudGx5LCB3ZSBkbyAoMSkgZm9yIEIzIHN0YWNrbWFwcy4KKyAgICB2aXJ0dWFsIHZv
aWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSA9IDA7Cisg
ICAgCisgICAgdmlydHVhbCBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxs
SGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikgPSAwOworCisgICAgdmlydHVhbCBjb25zdCBS
ZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSA9IDA7CisKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJl
YW0mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVh
bSYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAg
IGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworfTsKKworY2xhc3Mg
RGVlcFNwZWNpYWxEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3BlY2lhbER1bXAoY29uc3QgU3Bl
Y2lhbCogc3BlY2lhbCkKKyAgICAgICAgOiBtX3NwZWNpYWwoc3BlY2lhbCkKKyAgICB7CisgICAg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAg
ICBpZiAobV9zcGVjaWFsKQorICAgICAgICAgICAgbV9zcGVjaWFsLT5kZWVwRHVtcChvdXQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBjb25zdCBTcGVjaWFsKiBtX3NwZWNpYWw7Cit9OworCitpbmxpbmUgRGVl
cFNwZWNpYWxEdW1wIGRlZXBEdW1wKGNvbnN0IFNwZWNpYWwqIHNwZWNpYWwpCit7CisgICAgcmV0
dXJuIERlZXBTcGVjaWFsRHVtcChzcGVjaWFsKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclNw
ZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZl
cnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWly
SW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJB
aXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJBaXJS
ZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgc3BpbGxFdmVyeXRo
aW5nKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJzcGls
bEV2ZXJ5dGhpbmciKTsKKworICAgIC8vIFdlIHdhbnQgdG8ga25vdyB0aGUgc2V0IG9mIHJlZ2lz
dGVycyB1c2VkIGF0IGV2ZXJ5IHBvaW50IGluIGV2ZXJ5IGJhc2ljIGJsb2NrLgorICAgIEluZGV4
TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxSZWdpc3RlclNldD4+IHVzZWRSZWdpc3RlcnMoY29kZS5z
aXplKCkpOworICAgIExpdmVuZXNzPFRtcD4gbGl2ZW5lc3MoY29kZSk7CisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8VG1wPjo6TG9jYWxDYWxj
IGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAgICB1c2VkUmVnaXN0ZXJzW2Jsb2Nr
XS5yZXNpemUoYmxvY2stPnNpemUoKSArIDEpOworCisgICAgICAgIGF1dG8gc2V0VXNlZFJlZ2lz
dGVycyA9IFsmXSAodW5zaWduZWQgaW5kZXgsIEluc3QmIGluc3QpIHsKKyAgICAgICAgICAgIFJl
Z2lzdGVyU2V0JiBzZXQgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbmRleF07CisgICAgICAgICAg
ICBmb3IgKFRtcCB0bXAgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYg
KHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICBzZXQuc2V0KHRtcC5yZWcoKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIEdvdHRhIGFjY291bnQgZm9yIGRlYWQgYXNz
aWdubWVudHMgdG8gcmVnaXN0ZXJzLiBUaGVzZSBtYXkgaGFwcGVuIGJlY2F1c2UgdGhlIGlucHV0
CisgICAgICAgICAgICAvLyBjb2RlIGlzIHN1Ym9wdGltYWwuCisgICAgICAgICAgICBpbnN0LmZv
ckVhY2hBcmcoCisgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUs
IEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSAm
JiBhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldC5zZXQoYXJnLnJlZygp
KTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKHVuc2ln
bmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAg
ICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgc2V0VXNl
ZFJlZ2lzdGVycyhpbnN0SW5kZXggKyAxLCBpbnN0KTsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5l
eGVjdXRlKGluc3QpOworICAgICAgICB9CisKKyAgICAgICAgSW5zdCBub3A7CisgICAgICAgIHNl
dFVzZWRSZWdpc3RlcnMoMCwgbm9wKTsKKyAgICB9CisKKyAgICAvLyBBbGxvY2F0ZSBhIHN0YWNr
IHNsb3QgZm9yIGVhY2ggdG1wLgorICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhbGxTdGFja1Nsb3Rz
W0FyZzo6bnVtVHlwZXNdOworICAgIGZvciAodW5zaWduZWQgdHlwZUluZGV4ID0gMDsgdHlwZUlu
ZGV4IDwgQXJnOjpudW1UeXBlczsgKyt0eXBlSW5kZXgpIHsKKyAgICAgICAgVmVjdG9yPFN0YWNr
U2xvdCo+JiBzdGFja1Nsb3RzID0gYWxsU3RhY2tTbG90c1t0eXBlSW5kZXhdOworICAgICAgICBB
cmc6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6VHlwZT4odHlwZUluZGV4KTsKKyAgICAg
ICAgc3RhY2tTbG90cy5yZXNpemUoY29kZS5udW1UbXBzKHR5cGUpKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCB0bXBJbmRleCA9IGNvZGUubnVtVG1wcyh0eXBlKTsgdG1wSW5kZXgtLTspCisgICAg
ICAgICAgICBzdGFja1Nsb3RzW3RtcEluZGV4XSA9IGNvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNr
U2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgfQorCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChjb2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7
ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0QmVmb3JlID0gdXNl
ZFJlZ2lzdGVyc1tibG9ja11baW5zdEluZGV4XTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBz
ZXRBZnRlciA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleCArIDFdOworICAgICAgICAg
ICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgaW5zdC5m
b3JFYWNoVG1wKAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xl
LCBBcmc6OlR5cGUgdHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkp
CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICAgICAg
U3RhY2tTbG90KiBzdGFja1Nsb3QgPSBhbGxTdGFja1Nsb3RzW3R5cGVdW3RtcC50bXBJbmRleCgp
XTsKKyAgICAgICAgICAgICAgICAgICAgQXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90KTsK
KworICAgICAgICAgICAgICAgICAgICAvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgYSByZWdpc3RlciB0
byB1c2UuIEhvdyB3ZSBkbyB0aGF0IGRlcGVuZHMgb24gdGhlIHJvbGUuCisgICAgICAgICAgICAg
ICAgICAgIFJlZyBjaG9zZW5SZWc7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkg
eworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6VXNlOgorICAgICAgICAgICAgICAgICAg
ICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkRlZjoKKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6VXNlRGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9y
IChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmICghc2V0QmVmb3JlLmdldChyZWcpICYmICFzZXRBZnRlci5nZXQocmVn
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNob3NlblJlZyk7CisKKyAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKGNob3Nl
blJlZyk7CisKKyAgICAgICAgICAgICAgICAgICAgT3Bjb2RlIG1vdmUgPSB0eXBlID09IEFyZzo6
R1AgPyBNb3ZlIDogTW92ZURvdWJsZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjpp
c1VzZShyb2xlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3Jp
Z2luLCBhcmcsIHRtcCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgaWYgKEFyZzo6aXNEZWYocm9sZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2Vy
dGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsg
MSwgbW92ZSwgaW5zdC5vcmlnaW4sIHRtcCwgYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorI2RlZmluZSBBaXJTcGls
bEV2ZXJ5dGhpbmdfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGlz
IGEgcGhhc2UgZm9yIHRlc3RpbmcuIEl0IGJlaGF2ZXMgbGlrZSBhIHJlZ2lzdGVyIGFsbG9jYXRv
ciBpbiB0aGUgc2Vuc2UgdGhhdCBpdAorLy8gZWxpbWluYXRlcyB0ZW1wb3JhcmllcyBmcm9tIHRo
ZSBwcm9ncmFtLiBJdCBhY2NvbXBsaXNoZXMgdGhpcyBieSBhbHdheXMgc3BpbGxpbmcgYWxsCisv
LyB0ZW1wb3Jhcmllcy4gVGhlIHJlc3VsdGluZyBjb2RlIGlzIGdvaW5nIHRvIGJlIHZlcnkgaW5l
ZmZpY2llbnQuIFRoaXMgcGhhc2UgaXMgZ3JlYXQgaWYgeW91CisvLyB0aGluayB0aGF0IHRoZXJl
IGlzIGEgYnVnIGluIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuIFlvdSBjYW4gY29uZmlybSB0aGlz
IGJ5IHJ1bm5pbmcgdGhpcworLy8gcGhhc2UgaW5zdGVhZCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2Nh
dG9yLgorLy8KKy8vIE5vdGUgdGhhdCBldmVuIHRob3VnaCB0aGlzIHBoYXNlIGRvZXMgdGhlIGNo
ZWFwZXN0IHRoaW5nIHBvc3NpYmxlLCBpdCdzIG5vdCBldmVuIHdyaXR0ZW4gaW4gYQorLy8gcGFy
dGljdWxhcmx5IGVmZmljaWVudCB3YXkuIFNvLCBkb24ndCBnZXQgYW55IGlkZWFzIGFib3V0IHVz
aW5nIHRoaXMgcGhhc2UgdG8gcmVkdWNlIGNvbXBpbGVyCisvLyBsYXRlbmN5LiBJZiB5b3Ugd2Fu
dGVkIHRvIGRvIHRoYXQsIHlvdSBzaG91bGQgY29tZSB1cCB3aXRoIGEgY2xldmVyIGFsZ29yaXRo
bSBpbnN0ZWFkIG9mIHVzaW5nCisvLyB0aGlzIHNpbGx5IHRoaW5nLgorCit2b2lkIHNwaWxsRXZl
cnl0aGluZyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Ns
b3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkFpclN0YWNrU2xvdC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
U3RhY2tTbG90VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCit2b2lkIFN0YWNrU2xvdDo6c2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZh
bHVlKQoreworICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAgaWYgKG1fdmFsdWUpCisg
ICAgICAgIG1fdmFsdWUtPm1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7Cit9CisKK3ZvaWQgU3RhY2tT
bG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFj
ayIsIG1faW5kZXgpOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwg
Iiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBtX2tpbmQp
OworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBvdXQucHJpbnQoIiwgdmFsdWUgPSAiLCAqbV92
YWx1ZSk7Cit9CisKK1N0YWNrU2xvdDo6U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNp
Z25lZCBpbmRleCwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCisg
ICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICwgbV9pbmRleChpbmRleCkKKyAgICAsIG1f
b2Zmc2V0RnJvbUZQKHZhbHVlID8gdmFsdWUtPm9mZnNldEZyb21GUCgpIDogMCkKKyAgICAsIG1f
a2luZChraW5kKQorICAgICwgbV92YWx1ZSh2YWx1ZSkKK3sKKyAgICBBU1NFUlQoYnl0ZVNpemUp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Ns
b3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
dGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclN0YWNrU2xvdF9o
CisjZGVmaW5lIEFpclN0YWNrU2xvdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN0YWNrU2xvdFZhbHVlOwor
CituYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3RhY2tTbG90IHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShTdGFja1Nsb3QpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQor
ICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIHVu
c2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgdW5zaWduZWQg
YWxpZ25tZW50KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDEpCisg
ICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMikKKyAgICAg
ICAgICAgIHJldHVybiAyOworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSA0KQorICAgICAgICAg
ICAgcmV0dXJuIDQ7CisgICAgICAgIHJldHVybiA4OworICAgIH0KKworICAgIFN0YWNrU2xvdFZh
bHVlKiB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIC8vIFplcm8gbWVh
bnMgdGhhdCBpdCdzIG5vdCB5ZXQgYXNzaWduZWQuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQ
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9tRlA7IH0KKworICAgIC8vIFRoaXMgc2hvdWxk
IHVzdWFsbHkganVzdCBiZSBjYWxsZWQgZnJvbSBwaGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0
aW9uLiBCdXQgeW91IGNhbgorICAgIC8vIHRvdGFsbHkgZm9yY2UgYSBzdGFjayBzbG90IHRvIGxh
bmQgYXQgc29tZSBvZmZzZXQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QpOwor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQ
cmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOwor
CisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tT
bG90S2luZCwgU3RhY2tTbG90VmFsdWUqKTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXpl
OworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Cisg
ICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgU3RhY2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9
OworCitjbGFzcyBEZWVwU3RhY2tTbG90RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFN0YWNrU2xv
dER1bXAoY29uc3QgU3RhY2tTbG90KiBzbG90KQorICAgICAgICA6IG1fc2xvdChzbG90KQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChtX3Nsb3QpCisgICAgICAgICAgICBtX3Nsb3QtPmRlZXBEdW1wKG91dCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQor
Citwcml2YXRlOgorICAgIGNvbnN0IFN0YWNrU2xvdCogbV9zbG90OworfTsKKworaW5saW5lIERl
ZXBTdGFja1Nsb3REdW1wIGRlZXBEdW1wKGNvbnN0IFN0YWNrU2xvdCogc2xvdCkKK3sKKyAgICBy
ZXR1cm4gRGVlcFN0YWNrU2xvdER1bXAoc2xvdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJT
dGFja1Nsb3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
clRtcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFRtcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAoreworICAgIGlmICghKnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8bm9uZT4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc1JlZygpKSB7CisgICAgICAg
IG91dC5wcmludChyZWcoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNH
UCgpKSB7CisgICAgICAgIG91dC5wcmludCgiJXRtcCIsIGdwVG1wSW5kZXgoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoIiVmdG1wIiwgZnBUbXBJbmRleCgpKTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBfaAorI2RlZmluZSBBaXJUbXBfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZv
LmgiCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBBcmc7CisK
Ky8vIEEgVG1wIGlzIGEgZ2VuZXJhbGl6YXRpb24gb2YgYSByZWdpc3Rlci4gSXQgY2FuIGJlIHVz
ZWQgdG8gcmVmZXIgdG8gYW55IEdQUiBvciBGUFIuIEl0IGNhbiBhbHNvCisvLyBiZSB1c2VkIHRv
IHJlZmVyIHRvIGFuIHVuYWxsb2NhdGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9yYXJ5KS4gTGlr
ZSBtYW55IEFpciBjbGFzc2VzLCB3ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJzZSBuYW1pbmcg
c2luY2Ugd2Ugd2lsbCBoYXZlIHRvIHVzZSB0aGlzIG5hbWUgYSBsb3QuCisKK2NsYXNzIFRtcCB7
CitwdWJsaWM6CisgICAgVG1wKCkKKyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgeworICAgIH0K
KworICAgIGV4cGxpY2l0IFRtcChSZWcgcmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJlZykgewor
ICAgICAgICAgICAgaWYgKHJlZy5pc0dQUigpKQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBl
bmNvZGVHUFIocmVnLmdwcigpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBt
X3ZhbHVlID0gZW5jb2RlRlBSKHJlZy5mcHIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAg
ICAgbV92YWx1ZSA9IDA7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKGNvbnN0IEFyZyYpOwor
CisgICAgc3RhdGljIFRtcCBncFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAg
ICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVHUFRtcChp
bmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBm
cFRtcEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVGUFRtcChpbmRleCk7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0
IHsgcmV0dXJuICEhbV92YWx1ZTsgfQorCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBpc0VuY29kZWRHUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlz
RlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUpOwor
ICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
RW5jb2RlZEdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAg
Ym9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNHUFIoKSB8fCBpc0ZQ
UigpOworICAgIH0KKworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGRlY29kZUdQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAg
UmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAg
cmV0dXJuIGdwcigpOworICAgICAgICByZXR1cm4gZnByKCk7CisgICAgfQorCisgICAgYm9vbCBo
YXNUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIWlzUmVnKCk7CisgICAg
fQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZGVjb2RlR1BUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRl
eCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7Cisg
ICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIHJldHVy
biBmcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAhISp0aGlzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0g
b3RoZXIubV92YWx1ZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wJiBv
dGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKKyAgICBUbXAo
V1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fdmFsdWUoc3RkOjpu
dW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMg
PT0gVG1wKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50Pjo6
aGFzaChtX3ZhbHVlKTsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgZW5j
b2RlR1AodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gMSArIGluZGV4Owor
ICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlAodW5zaWduZWQgaW5kZXgpCisgICAgewor
ICAgICAgICByZXR1cm4gLTEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29k
ZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQKGdwciAtIE1h
Y3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQg
ZW5jb2RlRlBSKEZQUlJlZyBmcHIpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlAoZnBy
IC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW50IGVuY29kZUdQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSArIGluZGV4Owor
ICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBUbXAodW5zaWduZWQgaW5kZXgpCisgICAg
eworICAgICAgICByZXR1cm4gZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3Rl
cigpKSAtIDEgLSBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUChp
bnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPiAwOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzRW5jb2RlZEZQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biB2YWx1ZSA8IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BSKGludCB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUg
PD0gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisg
ICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgdmFsdWUgPj0gZW5jb2RlRlBSKE1hY3JvQXNzZW1i
bGVyOjpsYXN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29k
ZWRHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFs
dWUpICYmICFpc0VuY29kZWRHUFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlz
RW5jb2RlZEZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRG
UCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEZQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIEdQ
UlJlZyBkZWNvZGVHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2Rl
ZEdQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPigKKyAgICAg
ICAgICAgICh2YWx1ZSAtIGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3Rlcigp
KSkgKyBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgRlBSUmVnIGRlY29kZUZQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNF
bmNvZGVkRlBSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KAor
ICAgICAgICAgICAgKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkp
IC0gdmFsdWUpICsKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIo
KSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29kZUdQVG1wKGludCB2YWx1ZSkK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFRtcCh2YWx1ZSkpOworICAgICAgICBy
ZXR1cm4gdmFsdWUgLSAoZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkg
KyAxKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVjb2RlRlBUbXAoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQVG1wKHZhbHVlKSk7CisgICAgICAg
IHJldHVybiAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEp
IC0gdmFsdWU7CisgICAgfQorCisgICAgLy8gMDogZW1wdHkgVG1wCisgICAgLy8gcG9zaXRpdmU6
IEdQUnMgYW5kIHRoZW4gR1AgdGVtcHMuCisgICAgLy8gbmVnYXRpdmU6IEZQUnMgYW5kIHRoZW4g
RlAgdGVtcHMuCisgICAgaW50IG1fdmFsdWU7Cit9OworCitzdHJ1Y3QgVG1wSGFzaCB7CisgICAg
c3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgVG1wJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7
IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBUbXAmIGEsIGNvbnN0IFRtcCYgYikgeyBy
ZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1w
dHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1
bHRIYXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6QWlyOjpUbXA+
IHsKKyAgICB0eXBlZGVmIEpTQzo6QjM6OkFpcjo6VG1wSGFzaCBIYXNoOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNo
VHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1wPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIz
OjpBaXI6OlRtcD4geyB9OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBBaXJUbXBJbmxpbmVzX2gKKyNkZWZpbmUgQWlyVG1wSW5saW5lc19oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyVG1w
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
aW5saW5lIFRtcDo6VG1wKGNvbnN0IEFyZyYgYXJnKQoreworICAgICp0aGlzID0gYXJnLnRtcCgp
OworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVG1wSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
IkFpckluc3RJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoK
KyAgICBWYWxpZGF0ZXIoQ29kZSYgY29kZSwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAg
ICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAg
ICB7CisgICAgfQorCisjZGVmaW5lIFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg
ICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIGZhaWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZV
TkNUSU9OLCAjY29uZGl0aW9uLCB0b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChm
YWxzZSkKKyAgICAKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBIYXNoU2V0PFN0YWNr
U2xvdCo+IHZhbGlkU2xvdHM7CisgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHZhbGlkQmxv
Y2tzOworICAgICAgICBIYXNoU2V0PFNwZWNpYWwqPiB2YWxpZFNwZWNpYWxzOworCisgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpCisgICAgICAgICAgICB2YWxpZEJsb2Nr
cy5hZGQoYmxvY2spOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fY29kZS5zdGFj
a1Nsb3RzKCkpCisgICAgICAgICAgICB2YWxpZFNsb3RzLmFkZChzbG90KTsKKyAgICAgICAgZm9y
IChTcGVjaWFsKiBzcGVjaWFsIDogbV9jb2RlLnNwZWNpYWxzKCkpCisgICAgICAgICAgICB2YWxp
ZFNwZWNpYWxzLmFkZChzcGVjaWFsKTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9jb2RlKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGlu
c3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAg
SW5zdCYgaW5zdCA9IGJsb2NrLT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAo
QXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcu
a2luZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU2xvdHMuY29udGFpbnMoYXJnLnN0YWNrU2xv
dCgpKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTcGVjaWFsOgorICAg
ICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRTcGVjaWFscy5jb250YWlucyhhcmcu
c3BlY2lhbCgpKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBWQUxJREFURShpbnN0LmlzVmFsaWRGb3JtKCksICgi
QXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdElu
ZGV4ID09IGJsb2NrLT5zaXplKCkgLSAxKQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURShp
c1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOwor
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoIWlzVGVy
bWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2Nr
LT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nr
cy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkluICIsICpibG9jaykpOworICAgICAgICB9CisgICAg
fQorCitwcml2YXRlOgorICAgIE5PX1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBmYWlsKAorICAg
ICAgICBjb25zdCBjaGFyKiBmaWxlbmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGZ1
bmN0aW9uLCBjb25zdCBjaGFyKiBjb25kaXRpb24sCisgICAgICAgIENTdHJpbmcgbWVzc2FnZSkK
KyAgICB7CisgICAgICAgIENTdHJpbmcgZmFpbHVyZU1lc3NhZ2U7CisgICAgICAgIHsKKyAgICAg
ICAgICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICAgICAgICAgIG91dC5wcmludCgiQUlS
IFZBTElEQVRJT04gRkFJTFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBj
b25kaXRpb24sICIgKCIsIGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAg
ICAgICAgIG91dC5wcmludCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgb3V0
LnByaW50KCIgICAgQWZ0ZXIgIiwgbV9jb2RlLmxhc3RQaGFzZU5hbWUoKSwgIlxuIik7CisgICAg
ICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBpZiAobV9kdW1wQmVmb3Jl
KSB7CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV9jb2RlLmxhc3RQaGFzZU5hbWUo
KSwgIjpcbiIpOworICAgICAgICAgICAgZGF0YUxvZyhtX2R1bXBCZWZvcmUpOworICAgICAgICB9
CisgICAgICAgIGRhdGFMb2coIkF0IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgICAgICBkYXRh
TG9nKG1fY29kZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAg
IFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9u
LCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBt
X2NvZGU7CisgICAgY29uc3QgY2hhciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1v
dXMgbmFtZXNwYWNlCisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogZHVt
cEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIGR1bXBCZWZvcmUpOwor
ICAgIHZhbGlkYXRlci5ydW4oKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyVmFsaWRhdGVfaAorI2RlZmluZSBBaXJWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIENvZGU7CisKK3ZvaWQgdmFsaWRhdGUoQ29kZSYsIGNvbnN0IGNoYXIqIGR1bXBCZWZv
cmUgPSBudWxscHRyKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclZhbGlkYXRlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVy
YXRvci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0NCBAQAorIyEvdXNyL2Jpbi9lbnYg
cnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRT
IENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJw
YXRobmFtZSIKKworY2xhc3MgT3Bjb2RlCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpzcGVjaWFs
LCA6b3ZlcmxvYWRzCisgICAgYXR0cl9hY2Nlc3NvciA6a2luZAorCisgICAgZGVmIGluaXRpYWxp
emUobmFtZSwgc3BlY2lhbCkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFs
ID0gc3BlY2lhbAorICAgICAgICBAa2luZCA9IDppbnN0CisgICAgICAgIHVubGVzcyBzcGVjaWFs
CisgICAgICAgICAgICBAb3ZlcmxvYWRzID0gW10KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAg
ICBkZWYgbWFzbU5hbWUKKyAgICAgICAgbmFtZVswXS5kb3duY2FzZSArIG5hbWVbMS4uLTFdCisg
ICAgZW5kCitlbmQKKworY2xhc3MgQXJnCisgICAgYXR0cl9yZWFkZXIgOnJvbGUsIDp0eXBlCisK
KyAgICBkZWYgaW5pdGlhbGl6ZShyb2xlLCB0eXBlKQorICAgICAgICBAcm9sZSA9IHJvbGUKKyAg
ICAgICAgQHR5cGUgPSB0eXBlCisgICAgZW5kCitlbmQKKworY2xhc3MgT3ZlcmxvYWQKKyAgICBh
dHRyX3JlYWRlciA6c2lnbmF0dXJlLCA6Zm9ybXMKKworICAgIGRlZiBpbml0aWFsaXplKHNpZ25h
dHVyZSwgZm9ybXMpCisgICAgICAgIEBzaWduYXR1cmUgPSBzaWduYXR1cmUKKyAgICAgICAgQGZv
cm1zID0gZm9ybXMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBLaW5kCisgICAgYXR0cl9yZWFkZXIg
Om5hbWUKKyAgICBhdHRyX2FjY2Vzc29yIDpzcGVjaWFsCisKKyAgICBkZWYgaW5pdGlhbGl6ZShu
YW1lKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBmYWxzZQorICAg
IGVuZAorCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBTdHJpbmcK
KyAgICAgICAgICAgIEBuYW1lID09IG90aGVyCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBu
YW1lID09IG90aGVyLm5hbWUgYW5kIEBzcGVjaWFsID09IG90aGVyLnNwZWNpYWwKKyAgICAgICAg
ZW5kCisgICAgZW5kCisKKyAgICBkZWYgS2luZC5hcmdLaW5kcyhraW5kKQorICAgICAgICBpZiBr
aW5kID09ICJBZGRyIgorICAgICAgICAgICAgWyJBZGRyIiwgIlN0YWNrIiwgIkNhbGxBcmciXQor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBba2luZF0KKyAgICAgICAgZW5kCisgICAgZW5kCisK
KyAgICBkZWYgYXJnS2luZHMKKyAgICAgICAgS2luZC5hcmdLaW5kcyhraW5kKQorICAgIGVuZAor
ZW5kCisKK2NsYXNzIEZvcm0KKyAgICBhdHRyX3JlYWRlciA6a2luZHMsIDphbHROYW1lCisKKyAg
ICBkZWYgaW5pdGlhbGl6ZShraW5kcywgYWx0TmFtZSkKKyAgICAgICAgQGtpbmRzID0ga2luZHMK
KyAgICAgICAgQGFsdE5hbWUgPSBhbHROYW1lCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2lu
CisgICAgYXR0cl9yZWFkZXIgOmZpbGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBp
bml0aWFsaXplKGZpbGVOYW1lLCBsaW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxl
TmFtZQorICAgICAgICBAbGluZU51bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAg
ICBkZWYgdG9fcworICAgICAgICAiI3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQK
K2VuZAorCitjbGFzcyBUb2tlbgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAg
ICAKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9
IG9yaWdpbgorICAgICAgICBAc3RyaW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVm
ID09KG90aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0
cmluZyA9PSBvdGhlci5zdHJpbmcKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9
PSBvdGhlcgorICAgICAgICBlbmQKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisg
ICAgICAgIEBzdHJpbmcgPX4gb3RoZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAg
ICAgICAiI3tAc3RyaW5nLmluc3BlY3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAg
ICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAg
ICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAg
ICAgICBlbmQKKyAgICBlbmQKK2VuZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmls
ZU5hbWUgPSBQYXRobmFtZS5uZXcoZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5l
TnVtYmVyID0gMQorICAgIHdoaWxlIG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisg
ICAgICAgIHdoZW4gL1xBXCMoW15cbl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3Jl
CisgICAgICAgIHdoZW4gL1xBXG4vCisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAg
ICAgICAgICAgbGluZU51bWJlciArPSAxCisgICAgICAgIHdoZW4gL1xBKFthLXpBLVowLTlfXSsp
LworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBs
aW5lTnVtYmVyKSwgJCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAg
ICMgd2hpdGVzcGFjZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWyw6KlwvXS8KKyAgICAgICAg
ICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciks
ICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tP
cmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5j
ZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5w
b3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVmIGlzVUQodG9rZW4pCisg
ICAgdG9rZW4gPX4gL1xBKChVKXwoRCl8KFVEKSlcWi8KK2VuZAorCitkZWYgaXNHRih0b2tlbikK
KyAgICB0b2tlbiA9fiAvXEEoKEcpfChGKSlcWi8KK2VuZAorCitkZWYgaXNLaW5kKHRva2VuKQor
ICAgIHRva2VuID1+IC9cQSgoVG1wKXwoSW1tKXwoSW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxD
b25kKXwoUmVzQ29uZCkpXFovCitlbmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICBpc1VE
KHRva2VuKSBvciBpc0dGKHRva2VuKSBvciBpc0tpbmQodG9rZW4pIG9yCisgICAgICAgIHRva2Vu
ID09ICJzcGVjaWFsIiBvciB0b2tlbiA9PSAiYXMiCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0
b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoW2EtekEtWjAtOV9dKylcWi8gYW5kIG5vdCBpc0tleXdv
cmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwg
ZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAg
IEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4
XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5k
CisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAg
ICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9y
IGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNl
ICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAg
IGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0
cmluZworICAgICAgICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZp
ZXIKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4
cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAg
YWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lUm9sZQor
ICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0
ZWQgcm9sZSAoVSwgRCwgb3IgVUQpIikgdW5sZXNzIGlzVUQocmVzdWx0KQorICAgICAgICBhZHZh
bmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVUeXBlCisgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCB0
eXBlIChHIG9yIEYpIikgdW5sZXNzIGlzR0YocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAg
ICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVLaW5kCisgICAgICAgIHJlc3Vs
dCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0s
IEltbTY0LCBUbXAsIEFkZHIsIEluZGV4LCBSZWxDb25kLCBvciBSZXNDb25kKSIpIHVubGVzcyBp
c0tpbmQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAor
CisgICAgZGVmIHBhcnNlCisgICAgICAgIHJlc3VsdCA9IHt9CisgICAgICAgIAorICAgICAgICBs
b29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAg
ICAgICAgICAgaWYgdG9rZW4gPT0gInNwZWNpYWwiCisgICAgICAgICAgICAgICAgY29uc3VtZSgi
c3BlY2lhbCIpCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVy
CisKKyAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFs
IG9wY29kZSIpIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorCisgICAgICAgICAgICAgICAgcmVzdWx0
W29wY29kZU5hbWVdID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCB0cnVlKQorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisg
ICAgICAgICAgICAgICAgaWYgcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAg
IG9wY29kZSA9IHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBwYXJzZUVy
cm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIG9wY29kZS5zcGVjaWFs
CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBPcGNv
ZGUubmV3KG9wY29kZU5hbWUsIGZhbHNlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbb3Bj
b2RlTmFtZV0gPSBvcGNvZGUKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAg
IHNpZ25hdHVyZSA9IFtdCisgICAgICAgICAgICAgICAgZm9ybXMgPSBbXQorICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIGlmIGlzVUQodG9rZW4pCisgICAgICAgICAgICAgICAgICAg
IGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgcm9sZSA9IGNvbnN1bWVSb2xlCisgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAg
IHR5cGUgPSBjb25zdW1lVHlwZQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgICAgICAgICBzaWduYXR1cmUgPDwgQXJnLm5ldyhyb2xlLCB0eXBlKQorICAgICAgICAg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9r
ZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYg
dG9rZW4gPT0gIi8iCisgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIi8iKQorICAgICAgICAg
ICAgICAgICAgICBjYXNlIHRva2VuLnN0cmluZworICAgICAgICAgICAgICAgICAgICB3aGVuICJi
cmFuY2giCisgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUua2luZCA9IDpicmFuY2gKKyAg
ICAgICAgICAgICAgICAgICAgd2hlbiAidGVybWluYWwiCisgICAgICAgICAgICAgICAgICAgICAg
ICBvcGNvZGUua2luZCA9IDp0ZXJtaW5hbAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJCYWQgLyBkaXJlY3RpdmUiKQorICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgYWR2YW5jZQorICAgICAgICAg
ICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgaXNLaW5kKHRva2VuKQorICAgICAgICAg
ICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzID0gW10KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUgPSBuaWwKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzIDw8IEtpbmQubmV3
KGNvbnN1bWVLaW5kKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0g
IioiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbiBvbmx5
IGFwcGx5ICogdG8gVG1wIikgdW5sZXNzIGtpbmRzWy0xXS5uYW1lID09ICJUbXAiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzWy0xXS5zcGVjaWFsID0gdHJ1ZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIqIikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVz
cyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIsIikK
KyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
dG9rZW4gPT0gImFzIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoImFzIikK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0gY29uc3VtZUlkZW50aWZpZXIK
KyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJGb3JtIGhhcyB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBvdmVybG9h
ZCIpIHVubGVzcyBraW5kcy5sZW5ndGggPT0gc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAg
ICAgICAgICAgICAga2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBr
aW5kLm5hbWUgPT0gIkltbSIgb3Iga2luZC5uYW1lID09ICJJbW02NCIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS5yb2xlICE9ICJVIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1t
ZWRpYXRlIGZvciBhIG5vbi11c2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJl
W2luZGV4XS50eXBlICE9ICJHIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi1nZW5lcmFsLXB1cnBv
c2UgYXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KGtpbmRzLCBhbHROYW1lKQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIGlzS2luZCh0b2tlbikKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAg
aWYgc2lnbmF0dXJlLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVubGVz
cyBmb3Jtcy5sZW5ndGggPT0gMAorICAgICAgICAgICAgICAgICAgICBmb3JtcyA8PCBGb3JtLm5l
dyhbXSwgbmlsKQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgb3Bjb2Rl
Lm92ZXJsb2FkcyA8PCBPdmVybG9hZC5uZXcoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgICAg
IGVuZAorICAgICAgICB9CisKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCitlbmQKKworJGZpbGVO
YW1lID0gQVJHVlswXQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKCRmaWxlTmFtZSks
ICRmaWxlTmFtZSkKKyRvcGNvZGVzID0gcGFyc2VyLnBhcnNlCisKKyRzdGRlcnIucHV0cyAiR2Vu
ZXJhdGluZyBjb2RlIGZvciAjeyRmaWxlTmFtZX0uIgorCitkZWYgd3JpdGVIKGZpbGVuYW1lKQor
ICAgIEZpbGUub3BlbigiQWlyI3tmaWxlbmFtZX0uaCIsICJ3IikgeworICAgICAgICB8IG91dHAg
fAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dl
bmVyYXRvci5yYiBmcm9tICN7JGZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAgIAor
ICAgICAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQWlyI3tmaWxlbmFtZX1faCIKKyAgICAgICAgb3V0
cC5wdXRzICIjZGVmaW5lIEFpciN7ZmlsZW5hbWV9X2giCisKKyAgICAgICAgeWllbGQgb3V0cAor
ICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQWlyI3tmaWxlbmFtZX1faCIK
KyAgICB9CitlbmQKKword3JpdGVIKCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRw
LnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisg
ICAgb3V0cC5wdXRzICJlbnVtIE9wY29kZSA6IGludDE2X3QgeyIKKyAgICAkb3Bjb2Rlcy5rZXlz
LnNvcnQuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICIgICAg
I3tvcGNvZGV9LCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9OyIKKworICAgIG91dHAucHV0cyAi
c3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6ZX07
IgorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAgICAK
KyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNzIFBy
aW50U3RyZWFtOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6QjM6OkFpcjo6T3Bjb2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFj
ZSBXVEYiCit9CisKKyMgRnJvbSBoZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1pdCBwcm9wZXJs
eSBpbmRlbnRlZCBjb2RlLCBzaW5jZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuCisj
IG1hdGNoZXIuCisKK2RlZiBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5k
ZXgsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICByZXR1cm4gaWYgZm9ybXMu
bGVuZ3RoID09IDAKKworICAgIGlmIGZpbHRlcltmb3Jtc10KKyAgICAgICAgcmV0dXJuCisgICAg
ZW5kCisKKyAgICBpZiBjb2x1bW5JbmRleCA+PSBmb3Jtc1swXS5raW5kcy5sZW5ndGgKKyAgICAg
ICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAxCisgICAgICAgIGNhbGxiYWNrW2Zvcm1z
WzBdXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKyAgICAKKyAgICBncm91cHMgPSB7fQorICAg
IGZvcm1zLmVhY2ggeworICAgICAgICB8IGZvcm0gfAorICAgICAgICBraW5kID0gZm9ybS5raW5k
c1tjb2x1bW5JbmRleF0ubmFtZQorICAgICAgICBpZiBncm91cHNba2luZF0KKyAgICAgICAgICAg
IGdyb3Vwc1traW5kXSA8PCBmb3JtCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdyb3Vwc1tr
aW5kXSA9IFtmb3JtXQorICAgICAgICBlbmQKKyAgICB9CisKKyAgICBpZiBzcGVlZCA9PSA6ZmFz
dCBhbmQgZ3JvdXBzLmxlbmd0aCA9PSAxCisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQs
IGZvcm1zLCBjb2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykK
KyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tjb2x1
bW5HZXR0ZXJbY29sdW1uSW5kZXhdfSkgeyIKKyAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAg
ICAgfCBrZXksIHZhbHVlIHwKKyAgICAgICAgb3V0cC5wdXRzICIjaWYgVVNFKEpTVkFMVUU2NCki
IGlmIGtleSA9PSAiSW1tNjQiCisgICAgICAgIEtpbmQuYXJnS2luZHMoa2V5KS5lYWNoIHsKKyAg
ICAgICAgICAgIHwgYXJnS2luZCB8CisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgQXJnOjoj
e2FyZ0tpbmR9OiIKKyAgICAgICAgfQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCB2
YWx1ZSwgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBV
U0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJk
ZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQK
KworZGVmIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG91dHAucHV0
cyAic3dpdGNoICgje2luc3R9LT5vcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2gg
eworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5u
YW1lfToiCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNv
ZGUsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAo
KG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkKKyAgICAgICAg
ICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92
ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAg
ICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAg
ICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZAorICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
ZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAg
ICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAg
ICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAgICAKK2RlZiBt
YXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0Y2hJbnN0T3Zl
cmxvYWQob3V0cCwgc3BlZWQsIGluc3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwK
KyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmls
LCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7Cisg
ICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgIiN7aW5zdH0t
PmFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb2Mgewor
ICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBv
dmVybG9hZCwgZm9ybQorICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRw
LCBzcGVlZCwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFj
aykKKyAgICAgICAgZW5kCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7Cisg
ICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAg
b3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpclNwZWNpYWwuaFwiIgorICAgIG91dHAucHV0cyAibmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICAKKyAgICBv
dXRwLnB1dHMgImlubGluZSBib29sIG9wZ2VuSGlkZGVuVHJ1dGgoKSB7IHJldHVybiB0cnVlOyB9
IgorICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgVD4iCisgICAgb3V0cC5wdXRzICJp
bmxpbmUgVCogb3BnZW5IaWRkZW5QdHJJZGVudGl0eShUKiBwb2ludGVyKSB7IHJldHVybiBwb2lu
dGVyOyB9IgorICAgIG91dHAucHV0cyAiI2RlZmluZSBPUEdFTl9SRVRVUk4odmFsdWUpIGRvIHtc
XCIKKyAgICBvdXRwLnB1dHMgIiAgICBpZiAob3BnZW5IaWRkZW5UcnV0aCgpKVxcIgorICAgIG91
dHAucHV0cyAiICAgICAgICByZXR1cm4gdmFsdWU7XFwiCisgICAgb3V0cC5wdXRzICJ9IHdoaWxl
IChmYWxzZSkiCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Igor
ICAgIG91dHAucHV0cyAidm9pZCBJbnN0Ojpmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCA6ZmFz
dCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9w
Y29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1swXSwgQXJn
OjpVc2UsIEFyZzo6R1ApOyAvLyBUaGlzIGlzIGJhc2ljYWxseSBib2d1cywgYnV0IGl0IHdvcmtz
IGYgYW5hbHlzZXMgbW9kZWwgU3BlY2lhbCBhcyBhbiBpbW1lZGlhdGUuIgorICAgICAgICAgICAg
b3V0cC5wdXRzICJhcmdzWzBdLnNwZWNpYWwoKS0+Zm9yRWFjaEFyZygqdGhpcywgc2NvcGVkTGFt
YmRhPEVhY2hBcmdDYWxsYmFjaz4oZnVuY3RvcikpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAg
fCBhcmcsIGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xlID0gbmlsCisgICAgICAgICAgICAg
ICAgY2FzZSBhcmcucm9sZQorICAgICAgICAgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAgICAg
ICAgICAgIHJvbGUgPSAiVXNlIgorICAgICAgICAgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAg
ICAgICAgICAgIHJvbGUgPSAiRGVmIgorICAgICAgICAgICAgICAgIHdoZW4gIlVEIgorICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlVzZURlZiIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgIHJhaXNlCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBB
cmc6OiN7cm9sZX0sIEFyZzo6I3thcmcudHlwZX1QKTsiCisgICAgICAgICAgICB9CisgICAgICAg
IGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4iCisgICAgb3V0cC5wdXRzICJBTFdBWVNfSU5MSU5FIGJv
b2wgaXNWYWxpZEZvcm0oT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykiCisg
ICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiQXJnOjpLaW5kIGtpbmRzW3NpemVvZi4u
LihBcmd1bWVudHMpXSA9IHsgYXJndW1lbnRzLi4uIH07IgorICAgIG91dHAucHV0cyAic3dpdGNo
IChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29k
ZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIG91
dHAucHV0cyAic3dpdGNoIChzaXplb2YuLi4oQXJndW1lbnRzKSkgeyIKKyAgICAgICAgdW5sZXNz
IG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAg
ICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2Fz
ZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIKKyAgICAgICAgICAgICAgICBjb2x1bW5H
ZXR0ZXIgPSBwcm9jIHsgfCBjb2x1bW5JbmRleCB8ICJvcGdlbkhpZGRlblB0cklkZW50aXR5KGtp
bmRzKVsje2NvbHVtbkluZGV4fV0iIH0KKyAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsg
ZmFsc2UgfQorICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAg
ICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgIHNwZWNpYWwgPSAobm90IGZvcm0u
a2luZHMuZGV0ZWN0IHsgfCBraW5kIHwga2luZC5zcGVjaWFsIH0pCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKCN7c3BlY2lhbH0pOyIKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9y
bXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgICAgIG91
dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBv
dXRwLnB1dHMgIn0iCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRw
LnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAi
fSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsgIgorICAgIG91dHAucHV0cyAifSIKKwor
ICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wgaXNUZXJtaW5hbChPcGNvZGUgb3Bjb2RlKSIKKyAg
ICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAk
b3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgaWYgb3Bj
b2RlLmtpbmQgPT0gOnRlcm1pbmFsIG9yIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGVuZAorICAgIH0K
KyAgICBvdXRwLnB1dHMgInJldHVybiB0cnVlOyIKKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6Igor
ICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0
cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpciIKK30KKword3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CisgICAgfCBvdXRwIHwK
KyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdElubGluZXMuaFwiIgorICAgIG91dHAu
cHV0cyAiI2luY2x1ZGUgXCJ3dGYvUHJpbnRTdHJlYW0uaFwiIgorICAgIG91dHAucHV0cyAibmFt
ZXNwYWNlIFdURiB7IgorICAgIG91dHAucHV0cyAidXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cjsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
T3Bjb2RlIG9wY29kZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiICAgIHN3
aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLmtleXMuZWFjaCB7CisgICAgICAgIHwgb3Bj
b2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICIgICAgY2FzZSAje29wY29kZX06IgorICAgICAgICBv
dXRwLnB1dHMgIiAgICAgICAgb3V0LnByaW50KFwiI3tvcGNvZGV9XCIpOyIKKyAgICAgICAgb3V0
cC5wdXRzICIgICAgICAgIHJldHVybjsiCisgICAgfQorICAgIG91dHAucHV0cyAiICAgIH0iCisg
ICAgb3V0cC5wdXRzICIgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0
cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorICAgIG91dHAu
cHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAg
ICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6aXNWYWxpZEZvcm0oKSIKKyAgICBvdXRwLnB1dHMgInsi
CisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpzYWZlLCAidGhpcyIpIHsKKyAgICAg
ICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwK
KyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFyZ3Muc2l6ZSgpIDwgMSkiCisgICAgICAgICAg
ICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgh
YXJnc1swXS5pc1NwZWNpYWwoKSkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxz
ZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNpYWwo
KS0+aXNWYWxpZCgqdGhpcykpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZHNNb3Jl
VmFsaWRhdGlvbiA9IGZhbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3Ro
LnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xl
ID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS5yb2xlCisgICAgICAgICAgICAgICAgdHlwZSA9
IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZQorICAgICAgICAgICAgICAgIGtpbmQgPSBm
b3JtLmtpbmRzW2luZGV4XQorICAgICAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gfD0g
a2luZC5zcGVjaWFsCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgIyBXZSBhbHJl
YWR5IGtub3cgdGhhdCB0aGUgZm9ybSBtYXRjaGVzLiBXZSBkb24ndCBoYXZlIHRvIHZhbGlkYXRl
IHRoZSByb2xlLCBzaW5jZQorICAgICAgICAgICAgICAgICMga2luZCBpbXBsaWVzIHJvbGUuIFNv
LCB0aGUgb25seSB0aGluZyBsZWZ0IHRvIHZhbGlkYXRlIGlzIHRoZSB0eXBlLiBBbmQgd2Ugb25s
eSBoYXZlCisgICAgICAgICAgICAgICAgIyB0byB2YWxpZGF0ZSB0aGUgdHlwZSBpZiB3ZSBoYXZl
IGEgVG1wLgorICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiVG1wIgorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1sje2luZGV4fV0udG1wKCkuaXMje3R5cGV9
UCgpKSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2Up
OyIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5l
ZWRzTW9yZVZhbGlkYXRpb24KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghaXMje29w
Y29kZS5uYW1lfVZhbGlkKCp0aGlzKSkiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdF
Tl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRz
ICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiYm9v
bCBJbnN0OjphZG1pdHNTdGFjayh1bnNpZ25lZCBhcmdJbmRleCkiCisgICAgb3V0cC5wdXRzICJ7
IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVz
LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29w
Y29kZS5uYW1lfToiCisKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKCFhcmdJbmRleCkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBm
YWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNp
YWwoKS0+YWRtaXRzU3RhY2soKnRoaXMsIGFyZ0luZGV4KSk7IgorICAgICAgICBlbHNlCisgICAg
ICAgICAgICAjIFN3aXRjaCBvbiB0aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMg
InN3aXRjaCAoYXJnSW5kZXgpIHsiCisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3Zl
cmxvYWRzLm1hcCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAg
ICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgbnVtQXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJ
bmRleCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKwor
ICAgICAgICAgICAgICAgICMgQ2hlY2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhl
IG92ZXJsb2FkcyBlaXRoZXIgZG8sIG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAg
ICAgICAgICAgIyBhdCB0aGlzIGluZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29t
bW9uIGNhc2UuCisgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51
bU5vID0gMAorICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAg
ICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5m
b3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgIyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVt
WWVzIGZpcnN0IGJlY2F1c2UgaWYgd2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAg
ICAgICAgICAgICAgICAjIHRvIHNheSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAg
ICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0g
MAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisg
ICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVs
bCB0ZXN0LgorCisgICAgICAgICAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNv
ZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
InN3aXRjaCAoYXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAg
ICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAg
ICAgfCBvdmVybG9hZCB8CisKKyAgICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNr
IGlmIGFsbCBvZiB0aGVtIGRvIHdoYXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAg
IG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAg
ICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtp
bmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1p
dCBhbnl0aGluZywganVzdCBkcm9wIHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0
Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0
cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlm
IG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjIFRoaXMgaXMgaG93IHdlIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2lu
ZyB0aGlzIGFyZ3VtZW50IHRvIGFuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRy
ZXNzIHlpZWxkcyBhIHZhbGlkIGZvcm0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29s
dW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29s
dW1uSW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRl
eCA9PSBhcmdJbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6
QWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtWWVzID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBm
b3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNb
YXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAjIERyb3AgZG93biwgZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2gu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICMgS2VlcCBnb2luZy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZh
bHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHBy
b2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JF
VFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAw
LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAg
ICAgIAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJk
ZWZhdWx0OiI7CisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAg
IG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRw
LnB1dHMgIkNDYWxsSGVscGVyczo6SnVtcCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGpp
dCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBv
dXRwLnB1dHMgIlVOVVNFRF9QQVJBTShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJB
TShjb250ZXh0KTsiCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIK
KyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAg
ICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAor
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdl
bmVyYXRlKCp0aGlzLCBqaXQsIGNvbnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGlmIGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5h
bWUKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2Rl
Lm1hc21OYW1lCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5raW5kID09
IDpicmFuY2gKKyAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAg
ICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKwor
ICAgICAgICAgICAgZm9ybS5raW5kcy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAg
IHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wcmludCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgY2FzZSBraW5kLm5hbWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAg
ICAgICAgICAgICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIK
KyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigp
IgorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnByaW50ICJhcmdzWyN7aW5kZXh9XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICAgICAgd2hlbiAiSW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4g
IkltbTY0IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5h
c1RydXN0ZWRJbW02NCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAg
ICAgICAgICAgIHdoZW4gIkluZGV4IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5hc0Jhc2VJbmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENv
bmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVs
YXRpb25hbENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAg
ICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0
aW9uKCkiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IG91dHAucHV0cyAiKTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1
bHQpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRw
LnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIiCit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHB1YmxpYzoKICAg
ICB9CiAKICAgICBDb2RlQmxvY2sqIGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCi0gICAg
Q29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q29kZUJsb2NrKiBiYXNlbGluZUFsdGVybmF0aXZlKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IEdl
dCByaWQgb2YgdGhpcy4KICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTIzNjc3CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHJldmlzaW9uIDE5MTU4
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEwNSw3ICsxMDUsNiBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4OyB9CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXggIT0gaW52YWxpZCgpOyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhaXNTZXQoKTsgfQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biBpc1NldCgpOyB9CiAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmRleCA9PSBkZWxldGVkKCk7IH0KQEAgLTE3MCw2ICsxNjksNDYgQEAgcHVi
bGljOgogICAgIAogICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCisgICAgY2xh
c3MgQWxsUmVnc0l0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisKKyAgICAgICAgY2xhc3MgaXRlcmF0
b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpIHsgfQorCisgICAg
ICAgICAgICBleHBsaWNpdCBpdGVyYXRvcihSZWcgcmVnKQorICAgICAgICAgICAgICAgIDogbV9y
ZWdJbmRleChyZWcuaW5kZXgoKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgUmVnIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1f
cmVnSW5kZXgpOyB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3JlZ0luZGV4ID0gUmVnOjpmcm9tSW5kZXgobV9y
ZWdJbmRleCkubmV4dCgpLmluZGV4KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBt
X3JlZ0luZGV4ID09IG90aGVyLm1fcmVnSW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICB1bnNpZ25lZCBtX3JlZ0lu
ZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoUmVnOjpmaXJzdCgpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcihSZWcoKSk7IH0KKyAgICB9OworCisgICAgc3RhdGljIEFsbFJl
Z3NJdGVyYWJsZSBhbGwoKSB7IHJldHVybiBBbGxSZWdzSXRlcmFibGUoKTsgfQorCiBwcml2YXRl
OgogICAgIHN0YXRpYyB1aW50OF90IGludmFsaWQoKSB7IHJldHVybiAweGZmOyB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3Qu
Y3BwCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyQXRPZmZzZXRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBSZWdp
c3RlckF0T2Zmc2V0TGlzdDo6UmVnaXN0ZXJBdE9mZnNldExpCiAgICAgaWYgKG9mZnNldEJhc2VU
eXBlID09IEZyYW1lUG9pbnRlckJhc2VkKQogICAgICAgICBvZmZzZXQgPSAtKHN0YXRpY19jYXN0
PHB0cmRpZmZfdD4obnVtYmVyT2ZSZWdpc3RlcnMpICogc2l6ZW9mKHZvaWQqKSk7CiAKLSAgICBm
b3IgKFJlZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTtyZWcgPSByZWcu
bmV4dCgpKSB7CisgICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjps
YXN0KCk7IHJlZyA9IHJlZy5uZXh0KCkpIHsKICAgICAgICAgaWYgKHJlZ2lzdGVyU2V0LmdldChy
ZWcpKSB7CiAgICAgICAgICAgICBhcHBlbmQoUmVnaXN0ZXJBdE9mZnNldChyZWcsIG9mZnNldCkp
OwogICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZih2b2lkKik7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCShyZXZpc2lvbiAx
OTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICBtX3Jl
Z2lzdGVycy5jbGVhcigpOwogICAgIH0KIAotICAgIHNpemVfdCBzaXplKCkKKyAgICBzaXplX3Qg
c2l6ZSgpIGNvbnN0CiAgICAgewogICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnMuc2l6ZSgpOwog
ICAgIH0KQEAgLTY2LDYgKzY2LDkgQEAgcHVibGljOgogICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGZp
bmQoUmVnKSBjb25zdDsKICAgICB1bnNpZ25lZCBpbmRleE9mKFJlZykgY29uc3Q7IC8vIFJldHVy
bnMgVUlOVF9NQVggaWYgbm90IGZvdW5kLgogCisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+
Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzLmJlZ2lu
KCk7IH0KKyAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgp
IGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzLmVuZCgpOyB9CisKIHByaXZhdGU6CiAgICAgVmVj
dG9yPFJlZ2lzdGVyQXRPZmZzZXQ+IG1fcmVnaXN0ZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYg
KzExOCwxMyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lz
dGVyU2V0JiBvdGhlcikgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7
IH0KICAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5k
ZXggOiBtX3ZlY3Rvci5zZXRCaXRzKCkpCisgICAgICAgICAgICBmdW5jdG9yKFJlZzo6ZnJvbUlu
ZGV4KGluZGV4KSk7CisgICAgfQogICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcg
cmVnKSB7IHNldChyZWcpOyB9CkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dU
Ri9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOSBAQAorMjAxNS0xMC0yNCAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBhIHN1cGVy
IHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBXVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAg
KiB3dGYvTWF0aEV4dHJhcy5oOgorICAgICAgICAoV1RGOjpyYW5nZXNPdmVybGFwKTogTmljZSB1
dGlsaXR5IGZvciBjaGVja2luZyBpZiByYW5nZXMgb3ZlcmxhcC4KKyAgICAgICAgKiB3dGYvUGxh
dGZvcm0uaDogQWRkIGEgRU5BQkxFKEIzX0pJVCkgZmVhdHVyZSBmbGFnLgorICAgICAgICAqIHd0
Zi9TY29wZWRMYW1iZGEuaDogQWRkZWQuIFRoaXMgYWxsb3dzIHVzIHRvIGRvIHplcm8tYWxsb2Nh
dGlvbiwgemVyby1jb3B5IGV4dGVybiBsYW1iZGFzLgorICAgICAgICAoV1RGOjpzY29wZWRMYW1i
ZGEpOgorICAgICAgICAqIHd0Zi9TaGFyZWRUYXNrLmg6CisgICAgICAgIChXVEY6OmNyZWF0ZVNo
YXJlZFRhc2spOgorCiAyMDE1LTEwLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+
CiAKICAgICAgICAgRmFjdG9yIG91dCB0aGUgZ3JhcGggbm9kZSB3b3JrbGlzdHMgZnJvbSBERkcg
aW50byBXVEYKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogCQkwRkU0NDc5RDFCN0FBQTAz
MDA5NDk4RUIgLyogV29yZExvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovOyB9
OwogCQkwRkVCM0RDRjFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3
QUFEIC8qIFNoYXJlZFRhc2suaCAqLzsgfTsKIAkJMEZFQjNERDExQkI3MzY2QjAwOUQ3QUFEIC8q
IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rv
ckl0ZXJhdG9yLmggKi87IH07CisJCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRM
YW1iZGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLzsgfTsKIAkJMEZFQzg0
QUYxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQg
LyogR3JhcGhOb2RlV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1
IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi87IH07CiAJ
CTBGRjg2MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGODYwOTQxQkNDQkQ3NDAw
NDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi87IH07CkBAIC0zNDUsNiArMzQ2LDcgQEAK
IAkJMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdvcmRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNoYXJlZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFQjNERDAxQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxWZWN0b3JJdGVy
YXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCMDFCREFDRDM5MDA4
MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNjb3BlZExhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRBRTFC
RDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2RlV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gR3JhcGhOb2RlV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlz
b24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckNvbXBhcmlzb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg3MCw2ICs4NzIsNyBAQAogCQkJCTE0
Njk0MTk0MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCAqLywKIAkJCQkxNDY5NDE5
ODE2RUFCMDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwICovLAogCQkJCTE0Njk0MTk1
MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCisJCQkJMEZFQzg0QjAx
QkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovLAogCQkJCUE4QTQ3MzA2MTUxQTgy
NUIwMDQxMjNGRiAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLywKIAkJCQlBOEE0NzMwNzE1MUE4MjVC
MDA0MTIzRkYgLyogU2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJCQkJQThBNDczMDgxNTFBODI1
QjAwNDEyM0ZGIC8qIFNIQTEuY3BwICovLApAQCAtMTI0NCw2ICsxMjQ3LDcgQEAKIAkJCQlBOEE0
NzQ0OTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGlu
Z1ByaW1pdGl2ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3
NCAvKiBTY29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIw
MDQxMjNGRiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThB
NDc0NTUxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmljLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMg
Ki8sCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL0xpc3REdW1wLmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvd3Rm
L0xpc3REdW1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJp
Z2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTUzLDYgKzUzLDI2IEBAIHByaXZhdGU6CiB9Owog
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xhc3MgUG9pbnRlckxpc3REdW1wIHsKK3B1YmxpYzoK
KyAgICBQb2ludGVyTGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgY2hhciogY29tbWEpCisg
ICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgICAgICwgbV9jb21tYShjb21tYSkKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgZm9yICh0eXBlbmFtZSBUOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9saXN0LmJl
Z2luKCk7IGl0ZXIgIT0gbV9saXN0LmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICBvdXQucHJp
bnQobV9jb21tYSwgcG9pbnRlckR1bXAoKml0ZXIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Y29uc3QgVCYgbV9saXN0OworICAgIENvbW1hUHJpbnRlciBtX2NvbW1hOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KIGNsYXNzIE1hcER1bXAgewogcHVibGljOgogICAgIE1hcER1bXAoY29u
c3QgVCYgbWFwLCBjb25zdCBjaGFyKiBhcnJvdywgY29uc3QgY2hhciogY29tbWEpCkBAIC04MCw2
ICsxMDAsMTIgQEAgTGlzdER1bXA8VD4gbGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29ucwogICAg
IHJldHVybiBMaXN0RHVtcDxUPihsaXN0LCBjb21tYSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitQb2ludGVyTGlzdER1bXA8VD4gcG9pbnRlckxpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNv
bnN0IGNoYXIqIGNvbW1hID0gIiwgIikKK3sKKyAgICByZXR1cm4gUG9pbnRlckxpc3REdW1wPFQ+
KGxpc3QsIGNvbW1hKTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcGFy
YXRvcj4KIENTdHJpbmcgc29ydGVkTGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgQ29tcGFy
YXRvciYgY29tcGFyYXRvciwgY29uc3QgY2hhciogY29tbWEgPSAiLCAiKQogewpJbmRleDogU291
cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01h
dGhFeHRyYXMuaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJh
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTksNiArNDE5LDIwIEBAIGlubGluZSBUIGxlZnRTaGlm
dFdpdGhTYXR1cmF0aW9uKFQgdmFsdWUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvLyBQYXNz
IHJhbmdlcyB3aXRoIHRoZSBtaW4gYmVpbmcgaW5jbHVzaXZlIGFuZCB0aGUgbWF4IGJlaW5nIGV4
Y2x1c2l2ZS4gRm9yIGV4YW1wbGUsIHRoaXMgc2hvdWxkCisvLyByZXR1cm4gZmFsc2U6CisvLwor
Ly8gICAgIHJhbmdlc092ZXJsYXAoMCwgOCwgOCwgMTYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgor
aW5saW5lIGJvb2wgcmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQgbGVmdE1heCwgVCByaWdodE1p
biwgVCByaWdodE1heCkKK3sKKyAgICBpZiAobGVmdE1pbiA8PSByaWdodE1pbiAmJiBsZWZ0TWF4
ID4gcmlnaHRNaW4pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChyaWdodE1pbiA8PSBs
ZWZ0TWluICYmIHJpZ2h0TWF4ID4gbGVmdE1pbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
cmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vICNpZm5k
ZWYgV1RGX01hdGhFeHRyYXNfaApJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxOTE1ODYpCisr
KyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTIgKzc3
NiwyMCBAQAogI2RlZmluZSBFTkFCTEVfQ09OQ1VSUkVOVF9KSVQgMQogI2VuZGlmCiAKKy8qIFRo
ZSBCMyBjb21waWxlciBpcyBhbiBleHBlcmltZW50YWwgYmFja2VuZCB0aGF0IGlzIHN0aWxsIGlu
IGRldmVsb3BtZW50LiBXZSB3aWxsIGtlZXAgaXQgYnVpbGRpbmcKKyAgIG9uIERhcndpbi94ODYt
NjQgZm9yIG5vdywgdGhvdWdoIGl0IGlzIHVudXNlZCBleGNlcHQgZm9yIHRlc3RzLiAqLworI2lm
IE9TKERBUldJTikgJiYgQ1BVKFg4Nl82NCkKKyNkZWZpbmUgRU5BQkxFX0IzX0pJVCAxCisjZW5k
aWYKKwogLyogSWYgdGhlIGJhc2VsaW5lIGppdCBpcyBub3QgYXZhaWxhYmxlLCB0aGVuIGRpc2Fi
bGUgdXBwZXIgdGllcnMgYXMgd2VsbDogKi8KICNpZiAhRU5BQkxFKEpJVCkKLSN1bmRlZiBFTkFC
TEVfREZHX0pJVCAgICAgIC8qIFVuZGVmIHNvIHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0LiAqLwot
I3VuZGVmIEVOQUJMRV9GVExfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVkZWZp
bmUgaXQuICovCisjdW5kZWYgRU5BQkxFX0RGR19KSVQKKyN1bmRlZiBFTkFCTEVfRlRMX0pJVAor
I3VuZGVmIEVOQUJMRV9CM19KSVQKICNkZWZpbmUgRU5BQkxFX0RGR19KSVQgMAogI2RlZmluZSBF
TkFCTEVfRlRMX0pJVCAwCisjZGVmaW5lIEVuYWJsZV9CM19KSVQgMAogI2VuZGlmCiAKIC8qIENv
dW50cyB1c2VzIG9mIHdyaXRlIGJhcnJpZXJzIHVzaW5nIHNhbXBsaW5nIGNvdW50ZXJzLiBCZSBz
dXJlIHRvIGFsc28KSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IFNjb3BlZExhbWJkYV9oCisjZGVmaW5lIFNjb3BlZExhbWJkYV9oCisKK25hbWVzcGFjZSBXVEYg
eworCisvLyBZb3UgY2FuIHVzZSBTY29wZWRMYW1iZGEgdG8gZWZmaWNpZW50bHkgcGFzcyBsYW1i
ZGFzIHdpdGhvdXQgYWxsb2NhdGluZyBtZW1vcnkgb3IgcmVxdWlyaW5nCisvLyB0ZW1wbGF0ZSBz
cGVjaWFsaXphdGlvbiBvZiB0aGUgY2FsbGVlLiBUaGUgY2FsbGVlIHNob3VsZCBiZSBkZWNsYXJl
ZCBhczoKKy8vCisvLyB2b2lkIGZvbyhjb25zdCBTY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQs
IFN0dWZmJik+Jik7CisvLworLy8gVGhlIGNhbGxlciBqdXN0IGRvZXM6CisvLworLy8gdm9pZCBm
b28oc2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPihbJl0gKGludCB4LCBTdHVm
ZiYgeSkgLT4gTXlUaGluZ3MqIHsgYmxhaCB9KSk7CisvLworLy8gTm90ZSB0aGF0IHRoaXMgcmVs
aWVzIG9uIGZvbygpIG5vdCBlc2NhcGluZyB0aGUgbGFtYmRhLiBUaGUgbGFtYmRhIGlzIG9ubHkg
dmFsaWQgd2hpbGUgZm9vKCkgaXMKKy8vIG9uIHRoZSBzdGFjayAtIGhlbmNlIHRoZSBuYW1lIFNj
b3BlZExhbWJkYS4KKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBTY29w
ZWRMYW1iZGE7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1
bWVudFR5cGVzPgorY2xhc3MgU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMu
Li4pPiB7CitwdWJsaWM6CisgICAgU2NvcGVkTGFtYmRhKFJlc3VsdFR5cGUgKCppbXBsKSh2b2lk
KiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLikgPSBudWxscHRyLCB2b2lkKiBhcmcgPSBudWxscHRy
KQorICAgICAgICA6IG1faW1wbChpbXBsKQorICAgICAgICAsIG1fYXJnKGFyZykKKyAgICB7Cisg
ICAgfQorICAgIAorICAgIFJlc3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYuLi4g
YXJndW1lbnRzKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3Rk
Ojpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBSZXN1bHRUeXBlICgqbV9pbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4u
Lik7CisgICAgdm9pZCAqbV9hcmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5
cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGNsYXNzIFNjb3BlZExhbWJkYUZ1bmN0b3I7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzLCB0eXBlbmFt
ZSBGdW5jdG9yPgorY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjxSZXN1bHRUeXBlIChBcmd1bWVu
dFR5cGVzLi4uKSwgRnVuY3Rvcj4gOiBwdWJsaWMgU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGFzc2Vk
RnVuY3Rvcj4KKyAgICBTY29wZWRMYW1iZGFGdW5jdG9yKFBhc3NlZEZ1bmN0b3ImJiBmdW5jdG9y
KQorICAgICAgICA6IFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4o
aW1wbEZ1bmN0aW9uLCB0aGlzKQorICAgICAgICAsIG1fZnVuY3RvcihzdGQ6OmZvcndhcmQ8UGFz
c2VkRnVuY3Rvcj4oZnVuY3RvcikpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0
aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rpb24odm9pZCogYXJndW1lbnQsIEFyZ3VtZW50VHlwZXMm
Ji4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVk
TGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+bV9mdW5jdG9yKAorICAgICAgICAgICAgc3RkOjpm
b3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIEZ1bmN0
b3IgbV9mdW5jdG9yOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBl
bmFtZSBGdW5jdG9yPgorU2NvcGVkTGFtYmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+
IHNjb3BlZExhbWJkYShGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gU2NvcGVkTGFt
YmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihm
dW5jdG9yKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlNjb3BlZExh
bWJkYTsKK3VzaW5nIFdURjo6c2NvcGVkTGFtYmRhOworCisjZW5kaWYgLy8gU2NvcGVkTGFtYmRh
X2gKKwpJbmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dU
Ri93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwxMSBAQCBwdWJs
aWM6CiAgICAgewogICAgIH0KIAorICAgIFNoYXJlZFRhc2tGdW5jdG9yKEZ1bmN0b3ImJiBmdW5j
dG9yKQorICAgICAgICA6IG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAgeworICAg
IH0KKwogcHJpdmF0ZToKICAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzJiYuLi4gYXJn
dW1lbnRzKSBvdmVycmlkZQogICAgIHsKQEAgLTExMCw2ICsxMTUsMTEgQEAgUmVmPFNoYXJlZFRh
c2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcgogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3RvcikpOwogfQor
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorUmVmPFNo
YXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFzayhGdW5jdG9yJiYgZnVuY3Rv
cikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlv
blR5cGUsIEZ1bmN0b3I+KFdURjo6bW92ZShmdW5jdG9yKSkpOworfQogCiB9IC8vIG5hbWVzcGFj
ZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264146</attachid>
            <date>2015-10-27 11:41:26 -0700</date>
            <delta_ts>2015-10-27 17:54:15 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>627099</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MiBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFjY2VwdFJvb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRSb290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OmFjY2VwdEludGVybmFscyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjphY2NlcHRPcGVyYW5kcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OmFjY2VwdE9wZXJhbmRzTGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUxvYWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBZGQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFuZExvYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAgICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzTG93
ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICog
YjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpvZmZzZXQpOgorICAg
ICAgICAoSlNDOjpCMzo6TWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKToKKyAgICAgICAgKiBiMy9C
M09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzQ2hlY2tNYXRo
KToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZGF0
YSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAo
SlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6
UGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIz
L0IzUGF0Y2hwb2ludFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2lu
dFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpC
Mzo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL0IzUGhhc2VTY29wZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpQcm9jZWR1cmUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjp+UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2sp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3Jb
XSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjppdGVyYXRvcjo6ZmluZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24p
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlv
bjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRv
cltdKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKiBi
My9CM1Byb2NlZHVyZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3RLaW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90S2luZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjph
Y2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpieXRlU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6a2luZCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja1Nsb3RWYWx1ZTo6b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
U2xvdFZhbHVlOjpzZXRPZmZzZXRGcm9tRlApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OlN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6ZHVtcCk6CisgICAgICAgICogYjMvQjNT
dGFja21hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFja21hcCk6
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6c2V0T3BhcXVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN0YWNrbWFwOjpvcGFxdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpvcGFxdWVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y29uc3RyYWluKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwOjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpjbG9iYmVy
ZWQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldEdlbmVyYXRvcik6CisgICAgICAg
ICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21h
cFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNw
ZWNpYWw6OmlzVmFsaWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6
YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6YXBw
ZW5kUmVwc0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JB
cmcpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246OlN1Y2Nlc3NvckNvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNz
b3JDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxl
Y3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3Nv
ckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6
QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nl
c3NvckNvbGxlY3Rpb246OmVuZCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpkdW1wKToKKyAgICAgICAgKiBiMy9C
M1N3aXRjaENhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpTd2l0
Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6Y2FzZVZhbHVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OnRhcmdldCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCbG9jayk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSk6CisgICAgICAgIChKU0M6
OkIzOjpTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6YXBwZW5kQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKToKKyAgICAg
ICAgKiBiMy9CM1N3aXRjaFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Om51bUNhc2VW
YWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6Y2FzZVZhbHVlcyk6CisgICAgICAgIChKU0M6OkIz
OjpTd2l0Y2hWYWx1ZTo6ZmFsbFRocm91Z2gpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN3
aXRjaFZhbHVlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjplbmQpOgorICAgICAgICAqIGIz
L0IzVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM1R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppc0ludCk6CisgICAg
ICAgIChKU0M6OkIzOjppc0Zsb2F0KToKKyAgICAgICAgKEpTQzo6QjM6OnBvaW50ZXJUeXBlKToK
KyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2ls
b25WYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzVXBzaWxvblZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VXBzaWxvblZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6cGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6VXBzaWxvblZhbHVlKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VXNlQ291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpC
Mzo6VXNlQ291bnRzOjp+VXNlQ291bnRzKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6b3BlcmF0b3JbXSk6CisgICAgICAg
ICogYjMvQjNWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6dmFsaWRhdGUp
OgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6On5WYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eSk6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0RvdWJsZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6
OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp0eXBlRm9yKToKKyAgICAgICAg
KiBiMy9CM1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFjY2VwdHMp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Om9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Y2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnR5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFpclR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXAp
OgorICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6Omhhc0ludCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
Y29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
b2Zmc2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2Fpcjog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fp
ci9BaXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29u
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpm
cFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZv
ckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hh
c2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAg
ICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpk
ZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVu
ZEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNl
c3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBC
YXNpY0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVt
cDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBi
My9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0Nh
bGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFs
Ojppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNT
dGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWly
Q29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0lu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICog
YjMvYWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5l
d1RtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJh
bWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tT
bG90c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2lu
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVu
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJh
dG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNp
YWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OnNwZWNpYWxzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zZXJ0aW9uU2V0Ojpjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0
OjphcHBlbmRJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6
Omluc2VydEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2Vy
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6ZHVtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Okluc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpJbnN0OjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNo
VG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Rm9yRWFjaDxUbXA+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Rm9y
RWFjaDxBcmc+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFj
aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Omhhc1NwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6aXNTaGlmdFZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNMc2hpZnQzMlZhbGlk
KToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxp
dmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Omxp
dmVBdFRhaWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpM
b2NhbENhbGMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjps
aXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6dGFrZUxp
dmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpleGVjdXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNj
b3BlOjp+UGhhc2VTY29wZSk6CisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUuaDogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Z3Byc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmZwcnNJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpy
ZWdzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEdQUkluZm8+OjppblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz46OmluUHJpb3JpdHlPcmRlcik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6
OlNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjp+U3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6Om5hbWUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTcGVjaWFsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZGVl
cER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OkRlZXBTcGVjaWFsRHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkRlZXBTcGVjaWFsRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAg
ICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9h
aXIvQWlyU3RhY2tTbG90LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNr
U2xvdDo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6U3RhY2tTbG90KToKKyAgICAgICAgKiBi
My9haXIvQWlyU3RhY2tTbG90Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFj
a1Nsb3Q6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjppbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6YWxpZ25tZW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U3RhY2tTbG90Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6
b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xvdER1bXA6
OkRlZXBTdGFja1Nsb3REdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xv
dER1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEZvckluZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6VG1wOjppc0dQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlRtcDo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzUmVnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmZwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6cmVnKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpoYXNUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6Z3BUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnBUbXBJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6VG1wOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpl
bmNvZGVHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZW5jb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
VG1wOjppc0VuY29kZWRGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVk
R1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRGUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc0VuY29kZWRGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZGVjb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjpkZWNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcEhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6VG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dmFsaWRhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJWYWxp
ZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjogQWRk
ZWQuCisgICAgICAgICogYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGVB
bmRSdW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdDQyKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBqaXQvUmVnLmg6CisgICAgICAgIChKU0M6
OlJlZzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpSZWc6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6
UmVnOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6UmVnOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVy
YXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjplbmQpOgorICAg
ICAgICAoSlNDOjpSZWc6OmFsbCk6CisgICAgICAgIChKU0M6OlJlZzo6aW52YWxpZCk6CisgICAg
ICAgIChKU0M6OlJlZzo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJBdE9mZnNldExpc3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
UmVnaXN0ZXJBdE9mZnNldExpc3QpOgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6ZW5kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpm
b3JFYWNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisKIDIwMTUtMTAt
MjQgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVGVhY2ggY3JlYXRl
X2hhc2hfdGFibGUgdG8gb21pdCBidWlsdGlucyBtYWNyb3Mgd2hlbiBnZW5lcmF0aW5nIHRhYmxl
cyBmb3IgbmF0aXZlLW9ubHkgb2JqZWN0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
IFZQQVRIID0gXAogCiBQWVRIT04gPSBweXRob24KIFBFUkwgPSBwZXJsCitSVUJZID0gcnVieQog
CiBKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUiA9ICQoSmF2YVNjcmlwdENvcmUpL1NjcmlwdHMK
IApAQCAtNTksNiArNjAsOSBAQCBhbGwgOiBcCiAgICAgTGV4ZXIubHV0LmggXAogICAgIEtleXdv
cmRMb29rdXAuaCBcCiAgICAgUmVnRXhwSml0VGFibGVzLmggXAorICAgIEIzTG93ZXJpbmdNYXRj
aGVyLmggXAorICAgIEIzQWRkcmVzc01hdGNoZXIuaCBcCisgICAgQWlyT3Bjb2RlLmggXAogIwog
CiAjIEphdmFTY3JpcHQgYnVpbHRpbnMuCkBAIC0yNjIsNiArMjY2LDE0IEBAIElOUFVUX0dFTkVS
QVRPUl9TUEVDSUZJQ0FUSU9OUyA9IFwKIEpTUmVwbGF5SW5wdXRzLmggOiAkKElOUFVUX0dFTkVS
QVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBVVF9HRU5FUkFUT1JfU0NSSVBUUykKIAkkKFBZVEhP
TikgJChKYXZhU2NyaXB0Q29yZSkvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlu
cHV0cy5weSAtLW91dHB1dERpciAuIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlICQoSU5QVVRf
R0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQogCitCM0xvd2VyaW5nTWF0Y2hlci5oOiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29y
ZSkvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReIAorQjNBZGRyZXNz
TWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIu
cmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucworCSQoUlVC
WSkgJF4KKworQWlyT3Bjb2RlLmg6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9vcGNvZGVfZ2Vu
ZXJhdG9yLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworCSQo
UlVCWSkgJF4KKwogIyBEeW5hbWljYWxseS1kZWZpbmVkIHRhcmdldHMgYXJlIGxpc3RlZCBiZWxv
dy4gU3RhdGljIHRhcmdldHMgYmVsb25nIHVwIHRvcC4KIAogYWxsIDogXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlk
ZXBlbmRlbmNpZXMgPSAoCisJCQkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNTExNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNTUxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCkBAIC02ODUsNiArNjg2LDEyMiBAQAogCQkwRkVBMEEzMzE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5j
cHAgKi87IH07CiAJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovOyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBB
QjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1i
bGVyLmNwcCAqLzsgfTsKKwkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRS
ZWdWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZFQzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovOyB9OworCQkwRkVDODUwMDFC
REFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwICovOyB9OworCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi87IH07CisJCTBGRUM4
NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCODFCREFDREFDMDA4MEZG
NzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovOyB9OworCQkwRkVDODUwMzFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2tVdGlscy5oICovOyB9OworCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dv
cmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRCQTFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi87IH07CisJCTBG
RUM4NTA1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQjFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUwNjFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5o
ICovOyB9OworCQkwRkVDODUwNzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUwODFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1Zh
bHVlLmggKi87IH07CisJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRjFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3BwICovOyB9OworCQkwRkVDODUwQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyB9
OworCQkwRkVDODUwQjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMxMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwICovOyB9OworCQkwRkVDODUwQzFCREFD
REFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21t
dXRhdGl2aXR5LmggKi87IH07CisJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
MzJWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovOyB9Owor
CQkwRkVDODUwRTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oICovOyB9OworCQkwRkVDODUwRjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVl
LmNwcCAqLzsgfTsKKwkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
NjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNzFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3Vi
bGVWYWx1ZS5oICovOyB9OworCQkwRkVDODUxMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9s
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuY3BwICovOyB9OworCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lD
bGFzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLzsgfTsKKwkJMEZF
Qzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRDFCREFDREFDMDA4MEZG
NzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MTgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzR2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICov
OyB9OworCQkwRkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0YxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLzsgfTsKKwkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJp
Y0ZyZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxQjFCREFDREFDMDA4MEZGNzQgLyog
QjNJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLzsgfTsKKwkJMEZF
Qzg1MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0luZGV4U2V0LmggKi87IH07CisJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi87IH07CisJCTBG
RUM4NTFFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0xvd2VyVG9BaXIuaCAqLzsgfTsKKwkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
TWVtb3J5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUyMDFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MjExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi87IH07
CisJCTBGRUM4NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzT3Bjb2RlLmggKi87IH07CisJCTBGRUM4NTIzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09y
aWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovOyB9OworCQkwRkVDODUy
NDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdp
bi5oICovOyB9OworCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi87IH07
CisJCTBGRUM4NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQzFCREFD
REFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovOyB9OworCQkwRkVDODUyNzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFs
dWUuaCAqLzsgfTsKKwkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRE
RjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhh
c2VTY29wZS5oICovOyB9OworCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLzsgfTsKKwkJMEZFQzg1
MkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmUuaCAqLzsgfTsKKwkJMEZFQzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2Vk
dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovOyB9
OworCQkwRkVDODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNDFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi87IH07CisJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrbWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovOyB9Owor
CQkwRkVDODUzMDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja21hcFNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovOyB9OworCQkwRkVDODUzNDFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja1Nsb3RWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICov
OyB9OworCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
QzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CisJCTBG
RUM4NTM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5jcHAgKi87IH07CisJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsK
KwkJMEZFQzg1MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzQTFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUu
aCAqLzsgfTsKKwkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMTFCREFDREFD
MDA4MEZGNzQgLyogQjNUeXBlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovOyB9OworCQkwRkVDODUz
RDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi87IH07CisJCTBGRUM4NTQwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi87
IH07CisJCTBGRUM4NTQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07
CisJCTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTQ1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVl
UmVwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmggKi87IH07CisJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0
ZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLzsgfTsK
KwkJMEZFQzg1NkUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ5MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi87IH07CisJCTBGRUM4NTZGMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi87IH07
CisJCTBGRUM4NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuaCAqLzsgfTsKKwkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2lj
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovOyB9OworCQkw
RkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckJhc2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNw
cCAqLzsgfTsKKwkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovOyB9OworCQkwRkVDODU3NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5j
cHAgKi87IH07CisJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovOyB9OworCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQg
LyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJs
b2NrLmggKi87IH07CisJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1
MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovOyB9OworCQkwRkVDODU3OTFC
REFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0ZS5oICovOyB9OworCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlv
bkNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovOyB9
OworCQkwRkVDODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1N0MxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NzFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLzsgfTsKKwkJMEZFQzg1N0QxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
ZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpcklu
c2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovOyB9Owor
CQkwRkVDODU3RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QTFCREFDREM3MDA4MEZGNzQg
LyogQWlySW5zdC5jcHAgKi87IH07CisJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovOyB9OworCQkwRkVDODU4MTFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oICovOyB9OworCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5l
c3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovOyB9OworCQkwRkVDODU4MzFC
REFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWly
UGhhc2VTY29wZS5jcHAgKi87IH07CisJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQ
aGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovOyB9OworCQkw
RkVDODU4NTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MDFCREFDREM3
MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi87IH07CisJCTBGRUM4NTg2MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyUmVnaXN0ZXJQcmlvcml0eS5oICovOyB9OworCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi87IH07
CisJCTBGRUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3BlY2lhbC5oICovOyB9OworCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwICovOyB9OworCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVy
eXRoaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi87IH07CisJ
CTBGRUM4NThCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgKi87IH07CisJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLzsg
fTsKKwkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2ODFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wLmNwcCAqLzsgfTsKKwkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clRtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovOyB9OworCQkwRkVDODU4RjFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElu
bGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTkx
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZh
bGlkYXRlLmggKi87IH07CisJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0
ZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1OTIxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi87IH07CisJCTBGRUM4
NUEzMUJEQjVDRjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2
REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QTQxQkRCNUNGMTAw
ODBGRjc0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBK
YXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGRUM4NUFGMUJEQjVENUUwMDgwRkY3
NCAvKiB0ZXN0YjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi87IH07CisJCTBG
RUM4NUIzMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3
NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0
YW50SG9pc3RpbmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMgLyog
U2V0dXBWYXJhcmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODM5
LDYgKzE5NTYsMTMgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZDRUZBQjUxODA1RDYx
NjAwNDcyQ0U0OwogCQkJcmVtb3RlSW5mbyA9IGxsdm1Gb3JKU0M7CiAJCX07CisJCTBGRUM4NUIw
MUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2Eg
PSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZF
ODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOwor
CQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQ7CisJCQly
ZW1vdGVJbmZvID0gdGVzdGIzOworCQl9OwogCQkwRkY5MjJEMjE0RjQ2QjJGMDA0MUEyNEUgLyog
UEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVBy
b3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFBy
b2plY3Qgb2JqZWN0ICovOwpAQCAtMjU4MCw2ICsyNzA0LDEyMSBAQAogCQkwRkVBMEEyRjE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdKSVRDb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMzAxNzBENDBCRjAwQkI3MjJDIC8qIERG
R0pJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklUQ29kZS5o
OyBwYXRoID0gZGZnL0RGR0pJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1l
bnRSZWdWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QXJndW1lbnRSZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQmFzaWNC
bG9jay5jcHA7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9jay5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGIzL0IzQmFzaWNC
bG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja1V0aWxzLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2tV
dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQTFCREFDREFDMDA4
MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQmxvY2tXb3JrbGlzdC5oOyBwYXRoID0gYjMvQjNCbG9ja1dvcmtsaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0No
ZWNrU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3Bl
Y2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NoZWNrU3BlY2lhbC5o
OyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMv
QjNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb21tb24u
Y3BwOyBwYXRoID0gYjMvQjNDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tb24uaDsgcGF0aCA9IGIzL0IzQ29tbW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b21tdXRhdGl2aXR5LmNwcDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11
dGF0aXZpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tdXRhdGl2
aXR5Lmg7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmg7IHBhdGggPSBiMy9CM0Nv
bnN0MzJWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNTFCREFD
REFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNDb25zdDY0VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDY0VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNDb25zdDY0VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3Q2NFZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
RG91YmxlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0RG91YmxlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
dHJvbFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29u
dHJvbFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29udHJvbFZhbHVlLmg7
IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgcGF0
aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmg7IHBhdGggPSBiMy9C
M0ZyZXF1ZW5jeUNsYXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvQjNGcmVxdWVu
dGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0UxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmF0ZS5oOyBw
YXRoID0gYjMvQjNHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBw
YXRoID0gYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW5kZXhNYXAuaDsgcGF0aCA9IGIzL0IzSW5k
ZXhNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNJbmRleFNldC5oOyBwYXRoID0gYjMvQjNJbmRleFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5jcHA7IHBh
dGggPSBiMy9CM0xvd2VyVG9BaXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5oOyBwYXRoID0gYjMvQjNMb3dlclRvQWly
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzTWVtb3J5VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01l
bW9yeVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTWVtb3J5VmFs
dWUuaDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3Bjb2RlLmNwcDsgcGF0aCA9IGIzL0IzT3Bj
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDgxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
T3Bjb2RlLmg7IHBhdGggPSBiMy9CM09wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW4uY3BwOyBwYXRoID0gYjMvQjNPcmln
aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQTFCREFDREFDMDA4
MEZGNzQgLyogQjNPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNP
cmlnaW4uaDsgcGF0aCA9IGIzL0IzT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVj
aWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNp
YWwuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZh
bHVlLmNwcDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZhbHVl
Lmg7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhhc2VTY29wZS5jcHA7IHBhdGgg
PSBiMy9CM1BoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1Byb2NlZHVyZS5jcHA7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZS5oOyBwYXRoID0g
YjMvQjNQcm9jZWR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZUlubGluZXMuaDsgcGF0aCA9IGIzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNDFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1N0YWNrbWFwLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja21hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwLmg7
IHBhdGggPSBiMy9CM1N0YWNrbWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5oOyBwYXRoID0gYjMv
QjNTdGFja21hcFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuY3BwOyBwYXRoID0gYjMvQjNT
dGFja1Nsb3RLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90S2lu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1N0YWNrU2xvdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1N0YWNrU2xvdFZhbHVlLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmg7IHBhdGggPSBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1N3aXRjaENhc2UuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2Fz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N3aXRjaENhc2UuaDsgcGF0
aCA9IGIzL0IzU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3dp
dGNoVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMDFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmg7IHBhdGggPSBiMy9CM1N3aXRjaFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNUeXBlLmNwcDsg
cGF0aCA9IGIzL0IzVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNUeXBlLmg7IHBhdGggPSBiMy9CM1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmg7IHBhdGggPSBiMy9C
M1Vwc2lsb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNTFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNVc2VDb3VudHMuY3BwOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVc2VD
b3VudHMuaDsgcGF0aCA9IGIzL0IzVXNlQ291bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMv
QjNWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFsaWRhdGUuaDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNWYWx1ZS5oOyBwYXRoID0gYjMvQjNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUlubGluZXMuaDsgcGF0aCA9
IGIzL0IzVmFsdWVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVSZXAuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlUmVwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFs
dWVSZXAuaDsgcGF0aCA9IGIzL0IzVmFsdWVSZXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFjay5jcHA7
IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlU3RhY2suaDsgcGF0
aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQXJnLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFyZy5o
OyBwYXRoID0gYjMvYWlyL0FpckFyZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQmFzaWNCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEUxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyQ0NhbGxTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNvZGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
R2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRlLmg7IHBhdGgg
PSBiMy9haXIvQWlyR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRpb25Db250ZXh0Lmg7IHBhdGggPSBi
My9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NTYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVz
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
SW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc2Vy
dGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnN0LmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJJbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NUIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlySW5zdC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3RJbmxpbmVzLmg7
IHBhdGggPSBiMy9haXIvQWlySW5zdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxpdmVuZXNzLmg7IHBhdGggPSBiMy9haXIvQWly
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyUGhhc2VTY29wZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpclBoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
clJlZ2lzdGVyUHJpb3JpdHkuY3BwOyBwYXRoID0gYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MTFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJSZWdpc3RlclByaW9yaXR5Lmg7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
ZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BlY2lhbC5oOyBw
YXRoID0gYjMvYWlyL0FpclNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBw
YXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BpbGxFdmVyeXRoaW5nLmg7
IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3RhY2tTbG90LmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclN0YWNrU2xvdC5oOyBwYXRoID0gYjMvYWlyL0FpclN0
YWNrU2xvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2ODFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpclRtcC5jcHA7IHBhdGggPSBiMy9haXIvQWlyVG1wLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJU
bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyVG1wSW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpclRtcElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclZhbGlkYXRl
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJWYWxpZGF0ZS5oOyBwYXRoID0gYjMvYWly
L0FpclZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTkyMUJE
QjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyR2VuZXJhdGVkLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0
ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODVBRDFCREI1Q0YxMDA4
MEZGNzQgLyogdGVzdGIzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSB0ZXN0YjM7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBG
RUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gdGVzdGIzLmNwcDsgcGF0aCA9IGIzL3Rlc3RiMy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0Nv
bnN0UHRyVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdFB0
clZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0UHRyVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I4MUIyNjI1NkQwMDY2
Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUU5
ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZhcmFyZ3NGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzgwMSw2ICs0MDQwLDE1IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCTBGRUM4NUEyMUJEQjVDRjEwMDgw
RkY3NCAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJ
MEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8sCisJCQkJMEZFQzg1QTQxQkRCNUNGMTAwODBGRjc0IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNjE0RjQ2QjEzMDA0MUEyNEUg
LyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTM4NzAsNiArNDExOCw3IEBACiAJ
CQkJMTQxMjExMjAwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5QkYw
QTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCiAJCQkJNjUxMTIzMDUxNDA0NkE0QzAwMkIx
MDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRl
c3RiMyAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzg5MCw2ICs0MTM5LDcgQEAKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBGRjE2
NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRDQUQ0
MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBhc3Nl
bWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovLAogCQkJCUE1
NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBiaW5kaW5ncyAqLywKIAkJCQlBN0Q4MDE5RjE4ODBE
NjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgx
IC8qIGJ5dGVjb2RlICovLApAQCAtNDEwMyw2ICs0MzUzLDEzNSBAQAogCQkJbmFtZSA9IGZ0bDsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRUM4NEIyMUJEQUNENUUwMDgw
RkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKKwkJCQkwRkVDODRCNDFCREFD
REFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRCNTFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0QjYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJMEZFQzg0QjcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NEI4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0QjkxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8sCisJCQkJMEZFQzg0QkExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGRUM4NEJCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0QkMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0QkQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9u
LmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5j
cHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5o
ICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAg
Ki8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8s
CisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLywK
KwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLywKKwkJ
CQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLywK
KwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi8s
CisJCQkJMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oICovLAor
CQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8sCisJ
CQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggKi8sCisJCQkJ
MEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICovLAorCQkJ
CTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggKi8sCisJCQkJ
MEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJ
MEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4
NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggKi8sCisJCQkJMEZFQzg0RDAxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4
NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8sCisJCQkJMEZFQzg0RDIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLywKKwkJCQkwRkVDODREMzFCREFDREFDMDA4
MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLywKKwkJCQkwRkVDODRENDFCREFDREFDMDA4MEZG
NzQgLyogQjNMb3dlclRvQWlyLmggKi8sCisJCQkJMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTWVtb3J5VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M01lbW9yeVZhbHVlLmggKi8sCisJCQkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bj
b2RlLmNwcCAqLywKKwkJCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAq
LywKKwkJCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovLAorCQkJ
CTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovLAorCQkJCTBGRUM4NERC
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVD
ODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAorCQkJCTBG
RUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJ
MEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8sCisJCQkJMEZF
Qzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NEUx
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgKi8sCisJCQkJMEZFQzg0RTIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8sCisJCQkJMEZFQzg0RTMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovLAorCQkJCTBGRUM4NEU0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLywKKwkJCQkwRkVDODRFNTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcC5oICovLAorCQkJCTBGRUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5jcHAgKi8sCisJCQkJMEZFQzg0RTkxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5oICovLAorCQkJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja1Nsb3RWYWx1ZS5oICovLAorCQkJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLywKKwkJCQkwRkVDODRFRDFCREFDREFDMDA4MEZGNzQg
LyogQjNTd2l0Y2hDYXNlLmNwcCAqLywKKwkJCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hDYXNlLmggKi8sCisJCQkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRj
aFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAg
Ki8sCisJCQkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovLAorCQkJCTBG
RUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgKi8sCisJCQkJMEZF
Qzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8sCisJCQkJMEZFQzg0
RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLywKKwkJCQkwRkVDODRGNjFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLywKKwkJCQkwRkVDODRGNzFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuaCAqLywKKwkJCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUu
aCAqLywKKwkJCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAq
LywKKwkJCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8sCisJ
CQkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLywKKwkJCQkwRkVD
ODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0g
YjM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkwRkVDODRCMzFCREFDRDg4
MDA4MEZGNzQgLyogYWlyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAg
Ki8sCisJCQkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAq
LywKKwkJCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLywKKwkJCQkw
RkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggKi8sCisJCQkJMEZFQzg1NEMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NTREMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEZFQzg1NEUxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg1NEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTUwMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKKwkJCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ29kZS5oICovLAorCQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVu
dGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGUuY3BwICovLAorCQkJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5o
ICovLAorCQkJCTBGRUM4NTkyMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICov
LAorCQkJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5o
ICovLAorCQkJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAgKi8sCisJCQkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxl
ZVNhdmVzLmggKi8sCisJCQkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlv
blNldC5jcHAgKi8sCisJCQkJMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlv
blNldC5oICovLAorCQkJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAq
LywKKwkJCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovLAorCQkJCTBG
RUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oICovLAorCQkJCTBGRUM4
NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRUM4NTVFMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLywKKwkJCQkwRkVDODU1RjFCREFD
REM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NTYwMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLywKKwkJCQkwRkVDODU2MTFCREFD
REM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovLAorCQkJCTBGRUM4NTYyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODU2MzFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICovLAorCQkJCTBGRUM4NTY1MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLywKKwkJCQkwRkVDODU2NjFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLywKKwkJCQkwRkVDODU2NzFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3RhY2tTbG90LmggKi8sCisJCQkJMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclRtcC5jcHAgKi8sCisJCQkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5o
ICovLAorCQkJCTBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8s
CisJCQkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLywKKwkJ
CQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLywKKwkJCSk7CisJ
CQluYW1lID0gYWlyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMEZGNDI3
MkUxNThFQkNDRTAwNENCOUZGIC8qIGRpc2Fzc2VtYmxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC02MDg5LDYgKzY0NjgsNyBAQAogCQkJCTBGMUZFNTFD
MTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3Bl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNDhEMTkxMTc3MjM2
NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
MTE3LDggKzY0OTcsMTAgQEAKIAkJCQlBNUVBNzBFODE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3
OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRp
bWl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRF
NzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3MjFB
Nzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RDgwMUE1MTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuaCBp
biBIZWFkZXJzICovLApAQCAtNjEzMyw2ICs2NTE1LDcgQEAKIAkJCQk5OURBMDBBNDFCRDU5OTMx
MDBGNDU3NUMgLyogYnVpbHRpbnNfbW9kZWwucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBB
NTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJNDFERUExMzIxQjlGMzE2MzAwNkQ2NUREIC8qIEJ1aWx0aW5VdGlscy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5RTcyOTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVuZGxlUGF0
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRl
cmZseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1
dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0Myw2ICs2NTI2LDcgQEAKIAkJ
CQkwRjJERDgwQjFBQjNEODU4MDBCQkI4RTggLyogQnl0ZWNvZGVLaWxscy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4g
SGVhZGVycyAqLywKQEAgLTYxNzksNiArNjU2Myw3IEBACiAJCQkJMEYxNUYxNUYxNEI3QTczRTAw
NURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1M0EzMzIx
N0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2Vk
dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QTNBODE3OTc0MzJEMDBFODkzQzAgLyogQ29t
cGlsYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxRDFCREEwOEVG
MDAzMzFCODQgLyogSlNHbG9iYWxPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTYxODYs
OCArNjU3MSwxMCBAQAogCQkJCTBGNkZDNzUxMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyog
Q29uY3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg4MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRB
N0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
M0NFMDhBMThCQzIxQzMwMEJFREY3NiAvKiBDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUZEMDA3QTE4OUIwNTEwMDA2MzMyMzEgLyogQ29uc29sZU1lc3NhZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE5MUJEQTA2ODAwMDMzMUI4NCAvKiBCb29sZWFuUHJv
dG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwODYxOEJDMUE1NjAwQkVERjc2
IC8qIENvbnNvbGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjIwMiw2ICs2NTg5LDcg
QEAKIAkJCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3Bp
ZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzExQUQxQkMzODYyQzAw
Qzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNTJEMDE3QURE
NzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjIxMyw2
ICs2NjAxLDcgQEAKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRl
clNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8q
IERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1
QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEwRTE3
MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEz
NTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywK
QEAgLTYyMzMsNiArNjYyMiw3IEBACiAJCQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJBNTU0IC8qIERG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA0MTdBMEJB
QTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyNDMsNyArNjYzMyw5IEBACiAJCQkJMEYy
REQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3IC8qIERGR0FyaXRoTW9kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5
U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0
ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDlBMjk1MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmls
aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZH
QXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTYyNTMsNiArNjY0NSw3IEBACiAJ
CQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGQzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZFMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjE1
OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjI5Miw4ICs2Njg1LDEwIEBACiAJCQkJMEY2NkUxNkMxNERGM0YxNjAw
QjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk2MTdBMEJDNzQw
MEVFMjYxOCAvKiBERkdFZGdlRG9taW5hdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzk4NkQ1
NzE3QTBCQjFFMDBBOTVERDAgLyogREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjhGMTQzNDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3
NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JGRjNDMDE3
OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MzIzLDYgKzY3MTgsNyBAQAogCQkJCTYyRjJBQTM4MUIwQkVERTMwMDYxMEM3QSAv
KiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUy
NjE4IC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDNEIxNUUxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTg2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclBy
aW9yaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyog
REZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5QjE2
QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzMxLDYgKzY3MjcsNyBAQAogCQkJCTBGMkJEQzQ1MTUy
MjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92
SGludFJlbW92YWxQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMkNENUMxQjYxQTRGODAw
NDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzNDksNiArNjc0Niw3IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQy
IC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQw
MkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENv
bXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyog
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM5MkM4QTFC
NDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLApAQCAtNjM2
Niw2ICs2NzY0LDggQEAKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MzE5NkI4RjlFMDA5MTA1MkEg
LyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBMUJGQTFBOUVDQjdEMDAw
REUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVw
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERG
R1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjM5MCw2ICs2NzkwLDcgQEAKIAkJ
CQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0UxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5
NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkJFMEY3NzE2QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDAxLDYgKzY4MDIsNyBAQAogCQkJCTBGNjIwMTc0
MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0OTE1MjI4MDk2MDBDRDg5MTAgLyogREZH
VmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNEIxNTIyODA5
RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE4MUJEQTA2ODAwMDMzMUI4NCAvKiBB
cnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDMxLDYgKzY4
MzMsNyBAQAogCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGlu
Z0pJVFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAv
KiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAw
ODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThB
RjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICov
LApAQCAtNjQ5MSw2ICs2ODk0LDcgQEAKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyog
RlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4
NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNE
QTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdo
dGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OTgsOCArNjkwMiwxMCBAQAogCQkJCTJB
ODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTBG
QjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTRCRkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVu
Y3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAy
MDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4
Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAg
LTY1MzgsNiArNjk0NCw3IEBACiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBE
MzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUEx
QUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTA1MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0Yg
LyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTYz
LDYgKzY5NzAsNyBAQAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVy
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQw
RjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
NkRERUExOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNUZEMDA3NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTY2MTYsNiArNzAyNCw3IEBACiAJCQkJQTFCOUUyM0MxQjRFMEQ2
NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTgxOTNFMzFCNEUwQ0RCMDBGQzEwMjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENv
bGxhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQx
QjRFMENEQjAwRkMxMDI5IC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUExNTg3RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0
ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ2LDYgKzcwNTUs
NyBAQAogCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRT
dHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdE
MDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4
NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJp
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjY1Niw5ICs3MDY2LDExIEBACiAJCQkJMEYyQjY2RTUx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBG
Rjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdCREFFQ0IxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOEIxNDE4NkQxQjYyNTI3RjAwRkIyMDY4IC8qIEpTQXJyb3dGdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
c3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTgwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENE
MTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjY3NSw2
ICs3MDg3LDggQEAKIAkJCQk4NjVBMzBGMTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4ODE4QkMxQTU2MDBCRURGNzYg
LyogSlNDb25zb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxRTFCREFDREFDMDA4MEZG
NzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RjFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMx
NjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2
MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC02NjkwLDYgKzcxMDQsNyBAQAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1
REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM4NEVFODFBRERCN0FE
MDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1h
Y3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MDAsMTEgKzcxMTUsMTMgQEAKIAkJ
CQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzkxN0U3QjFCNzkwNkZBMDAwRUJEMzMgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0
MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29u
c29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0Eg
LyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MzUs
NiArNzE1Miw3IEBACiAJCQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
aWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBK
U01vZHVsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUx
MDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02NzY0LDYgKzcxODIsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAv
KiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4
MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUz
RTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1Jl
Zi5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIxLDkgKzcyNDAsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0
QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRT
bG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAv
KiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3
NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1
QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTY4MzYsMTIgKzcyNTcsMTQgQEAKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1
RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgz
MUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8q
IE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUw
NDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8qIE1hY3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fz
c2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4g
SGVhZGVycyAqLywKQEAgLTY4NjcsNiArNzI5MCw3IEBACiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAw
MEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTMzRThEMjExQjkwMTNERTAwMzQ2QjUyIC8qIE5hdGl2ZVN0ZEZ1bmN0aW9u
Q2VsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1
NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0Yw
RTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyODE4
QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJtaW5pc3RpY0lucHV0LmggaW4gSGVhZGVycyAqLywK
QEAgLTY4ODcsNiArNzMxMSw3IEBACiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9w
YXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4
QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNB
RTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0MxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVh
ZGVycyAqLywKQEAgLTY5MDAsMTMgKzczMjUsMTcgQEAKIAkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0
RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTgzNDE4
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdl
bmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBD
QjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2
RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUx
QzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0
ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyog
UHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQTFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5
MjgsMTAgKzczNTcsMTMgQEAKIAkJCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVy
dHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAg
LyogUHJvdGVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFE
IC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODQxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThG
RTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFC
QTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkz
MzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5k
ZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyog
UHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8q
IFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTUyLDYgKzczODQsNyBAQAog
CQkJCTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTU3RDIzRUUxODkxQjU1NDAwMzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNzaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyNjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5
IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBC
NDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVCQTE1RjAxODIzNDVBRjAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUu
aCBpbiBIZWFkZXJzICovLApAQCAtNjk1OSw2ICs3MzkyLDcgQEAKIAkJCQlBNUJBMTVFRDE4MjM0
MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzBCMEE5RDExQTlCNjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVU
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2Ft
cGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5ODgsNiArNzQyMiw3IEBACiAJCQkJ
QTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJj
ZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVG
Mjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywK
QEAgLTcwMDcsNiArNzQ0Miw3IEBACiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0
cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZB
REI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZE
RTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgyMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgw
RTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3
MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVy
cyAqLywKQEAgLTcwNDMsMTAgKzc0NzksMTIgQEAKIAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRC
MTkgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTEwMTE5NzVCNDY3
MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI2
QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkQ0REVDMTk4MzJEQzQwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkQ0REYwMTk4MzJERDYwMDdENEIxOSAvKiBUeXBlU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVu
dFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYg
LyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAw
NENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4
RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfaW5wdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzA4NCw4
ICs3NTIyLDEwIEBACiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2lj
QmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1
RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEwQ0RCMUZDMDAz
NjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzMzFCREFDREFD
MDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2QTkz
RTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVh
ZGVycyAqLywKQEAgLTcxMDcsOSArNzU0NywxMiBAQAogCQkJCTk5NTlFOTJFMUJEMTdGQTQwMDFB
QTQxMyAvKiB4eGQucGwgaW4gSGVhZGVycyAqLywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdB
QzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1ODExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5
bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtNzEzNCw2ICs3NTc3LDIyIEBACiAJCQlwcm9kdWN0
UmVmZXJlbmNlID0gMEZDRUZBQjYxODA1RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHls
aWIgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnku
ZHluYW1pYyI7CiAJCX07CisJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8g
PSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMEZFQzg1QTgxQkRCNUNGMTAwODBGRjc0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YjMiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJ
MEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QTIxQkRC
NUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgK
KwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHRlc3RiMzsKKwkJ
CXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRkVDODVBRDFC
REI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxl
LnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsKIAkJMEZGOTIyQzMxNEY0NkIxMzAwNDFBMjRFIC8q
IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdl
dDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50
T2Zmc2V0c0V4dHJhY3RvciIgKi87CkBAIC03Mjg5LDYgKzc3NDgsNyBAQAogCQkJCTE0QkQ1OUJF
MEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDcz
Njk3NSAvKiBqc2MgKi8sCiAJCQkJNjUxMTIyRjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdF
eHAgKi8sCisJCQkJMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1
RDZCMkE0NzE1MkI5RTE3MDA1MjMxREUgLyogVGVzdCBUb29scyAqLywKIAkJCSk7CiAJCX07CkBA
IC03NTM2LDYgKzc5OTYsMTQgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKKwkJMEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJj
ZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBRjFCREI1RDVFMDA4
MEZGNzQgLyogdGVzdGIzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNDE0RjQ2QjEzMDA0
MUEyNEUgLyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTc1OTEsNiArODA1OSw3IEBACiAJ
CQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QkQxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJC
YXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVF
NyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVF
MjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1
QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03NTk4LDggKzgwNjcsMTAgQEAKIAkJCQlBN0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyog
QXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMx
MEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJy
YXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBG
NjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcg
LyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYyMCw4ICs4MDkxLDEw
IEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2MkVDOUJCNjFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8q
IENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3
NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZs
ZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRD
QTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2
Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03NjM0LDYgKzgxMDcsNyBAQAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8q
IENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlD
MzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTkzMUJEQjFF
MTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgy
NjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY0MSw2ICs4MTE1LDcgQEAKIAkJCQlBNzA5RjJGMjE3
QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBM0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxh
dGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMz
NzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUw
MTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc2NjgsNiArODE0Myw3IEBACiAJCQkJMEZDNzEyREUxN0NEODc3OTAw
OENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFj
dEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQg
LyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzRTQwMTFCNjE4
QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Njc3LDYg
KzgxNTMsNyBAQAogCQkJCTBGNjM5NDg0MTVFNDgxMTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1Njcy
QjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0Mw
MDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY4NSw2ICs4
MTYyLDcgQEAKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERG
R0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBD
NzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNB
MjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDM2OTQxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEgLyogREZH
Q2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3MjIsNiArODIwMCw3IEBACiAJCQkJ
MkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGOTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhT
YWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc2NCwxNCArODI0MywxNyBAQAogCQkJ
CTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlB
QTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjIzNUJFRDE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBh
cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjIzNzk3MUFFNDVDQTcwMEQ0MDJFQSAv
KiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5
NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3N0ExNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5
MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJl
UG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQzE5RDBCQTdEMDBC
MUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc3ODksNiArODI3MSw4IEBACiAJCQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8q
IERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4OTNC
REIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY3OTA4NTUxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJl
Z2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4MTYsNiArODMwMCw3IEBA
CiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlFNDVBMjUxOEExQjI1OTAwMjZEODhGIC8qIEVuY29k
ZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDgg
LyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM4MTA3RUMzNzYwMDQy
N0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjU4QzE0
MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC03ODYwLDYgKzgzNDUsNyBAQAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdE
QkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50
cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODY3LDYgKzgzNTMsNyBAQAogCQkJCTBG
RUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY0ODUzMjkxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9y
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIxMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYx
QjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzg5OSw2ICs4Mzg2LDcgQEAKIAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2
MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4
QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUyNzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8q
IEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZDOTIxMTFCOTRENERGMDA3
MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJE
RUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03OTA2LDYgKzgzOTQsNyBAQAogCQkJCTlFQTVDN0EyMTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0
aWFsaXplTExWTU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwODE5MEYwMjFFMDAx
QTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcy
OTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYz
QzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1
OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc5MTcsNiArODQwNiw3IEBACiAJCQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8q
IEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0Mx
ODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MzI0Mzg3MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIx
OTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdGQSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg5MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0
b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzk3Myw2ICs4NDYz
LDcgQEAKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxi
YWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAw
MDVGMDYxIC8qIEpTQ2FsbGJhY2tGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU2RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
QUJERjYwMEE0MzdGRUYwMEVDQ0EwMSAvKiBKU0NhbGxiYWNrT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTY1N0NGNDU4MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBN0Q4MDFBODE4ODBENkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC03OTgwLDYgKzg0NzEsOCBAQAogCQkJCTE0N0YzOUQ2MTA3RUMz
NzYwMDQyN0E0OCAvKiBKU0NKU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGQ0U0
MEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
M0NFMDg3MThCQzFBNTYwMEJFREY3NiAvKiBKU0NvbnNvbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTczMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0Nv
bnRleHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyMDI4QjYxNzk3NjAxRTAwOTgwMjhD
IC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5OTAsMTYgKzg0
ODMsMTkgQEAKIAkJCQlGRTM4NEVFNzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3Rv
dHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENzEwN0VDMzc2MDA0MjdBNDggLyog
SlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VD
MjcxMDA1REJDOEQgLyogSlNGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUx
RDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9i
YWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwODUxODlCMUI3RTAwNjMzMjMx
IC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
QzNBMUE1MThDMDQ5MDIwMEM5NTkzQSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Qz
MlZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NTkyMTgyNDc0NDcwMENDMzg0MyAv
KiBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIz
RTkxODkxQjA3NzAwMzFDN0ZBIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4
ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTBFNEI2MzE4ODA5REQ1MDA2OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1l
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMjkxODhGMTA1OTAwMTEwRjE0IC8q
IEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MTNFNUJGMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDMTE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3Rl
ZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwODAxQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
ODAxOCw2ICs4NTE0LDcgQEAKIAkJCQlFMzE4Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3
QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0U4
RDFDMUI5MDEzQzMwMDM0NkI1MiAvKiBKU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTE4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyog
SlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDMxLDYgKzg1MjgsNyBAQAogCQkJ
CUUzRUY4ODc0MUI2NkRGMjMwMDNGMjZDQiAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTJDMzdGMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90
ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5MjhGRjNC
MThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC04MDU5LDYgKzg1NTcsNyBAQAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2
OSAvKiBKU1dlYWtTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAw
NjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3
QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA2Niw5ICs4NTY1LDEy
IEBACiAJCQkJMTQ4RjIxQjAxMDdFQzU0MTAwNDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBM
aXZlT2JqZWN0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBE
RjM0MzAgLyogTExJbnRDTG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJE
MTY1MDBCRkUyNzIgLyogTExJbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NEZF
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBODE0QkE3RkFCMDBCRkUyNzIgLyogTExJbnRF
eGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJGRTI3
MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwNzcsNiArODU3OSw3
IEBACiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2
ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxRjFCREFDREFDMDA4
MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEy
RDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJB
Uk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDg2LDEwICs4NTg5LDEyIEBACiAJCQkJQTdBNEFF
MDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3MDA4NzM5MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRERUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRl
cmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDcxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3
Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
QjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFy
a1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzNDBBNDg0MUE5MDUxQUYwMEQ3M0NDQSAv
KiBNYXRoQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1
MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODEyOCwxNyArODYzMywy
MSBAQAogCQkJCTBGRjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ckJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NC
MDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGNzI5QUYxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2Zp
bGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQz
NUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzAxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIz
MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmls
ZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2
RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJC
MTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNU
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQ
cm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTgxMDdFQzdF
NzAwNjUwNDQ2IC8qIFByb3BlcnR5U2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBREUzOUZG
RjE2REQxNDRCMDAwM0NENEEgLyogUHJvcGVydHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTgxNDcsMTAgKzg2NTYsMTIgQEAKIAkJCQkwRjE1Q0QyMjFCQTVGOTg2MDAzMUZGRDMgLyogUHV0
QnlJZEZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjND
NiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTMzNjM3QTUxQjYzMjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhw
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJH
ZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUg
LyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAw
NDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04MTY0LDYgKzg2NzUsNyBAQAogCQkJCUE1QkExNUU5MTgyMzQwQjMwMEE4MkU2OSAv
KiBSZW1vdGVJbnNwZWN0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1RUZE
MDBDQzM4NDMgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJs
ZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwNTFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RUUxODIz
NDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24ubW0gaW4gU291cmNl
cyAqLywKIAkJCQkwRjI0RTU1MDE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1Mjc3NzNERTFBQUY4M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MTgyLDYgKzg2OTQsNyBAQAogCQkJCUE1NENGMkY5MTg0RUFF
REEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0Q0Yy
RjUxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3Mjk5REE1MTdEMTI4NTgwMDVGNUZGOSAvKiBTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU4NTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzkwREQ2RDE4MkY0OTk3MDA1ODg4MDcgLyogU2V0
SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTlEQTExN0QxMjg0
ODAwNUY1RkY5IC8qIFNldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVFOTg0
MzFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC04MTk2LDYgKzg3MDksNyBAQAogCQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBT
cGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MxRUFGMTE3OTg3QUI2MDAy
OTlEQjIgLyogU3RhY2tWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MzBCNjEzMTI1
MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ0NjlERUIxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUMwRUM2MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJ
dGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQzEwN0VDN0U3
MDA2NTA0NDYgLyogU3RyaW5nT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODIxMiw2ICs4
NzI2LDcgQEAKIAkJCQk3MDVCNDFBRDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA1QjQxQUYxQTZFNTAxRTAwNzE2NzU3IC8qIFN5
bWJvbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3
NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNGMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkx
OUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNl
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyNDAsNiArODc1NSw3IEBACiAJCQkJMEYyNEU1NTgx
N0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzlFRTBCRkYxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2QzczNTAxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVG
aXJlRGV0YWlsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTA1MDJDMUFBOTA5
NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMEMyNTkx
QTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04
MjU5LDYgKzg3NzUsNyBAQAogCQkJCTcwOUZCODY5MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0
Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA5RkI4NkIxQUUzMzVDNjAwMzlE
MDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE0RUM5MEIx
ODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBQjNBMTc5OUU0QjIwMEQyODMzRCAv
KiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYzQzZEOUMxNTIxMTEx
QTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
ODI4NSw2ICs4ODAyLDExIEBACiAJCQl0YXJnZXQgPSAwRkNFRkFCNTE4MDVENjE2MDA0NzJDRTQg
LyogbGx2bUZvckpTQyAqLzsKIAkJCXRhcmdldFByb3h5ID0gMEZDRUZBQkMxODA1RDY2MzAwNDcy
Q0U0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKIAkJfTsKKwkJMEZFQzg1QjExQkRCNUQ4
RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJn
ZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRl
c3RiMyAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBC
WENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEZGOTIyRDMxNEY0NkIyRjAwNDFBMjRF
IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRl
bmN5OwogCQkJdGFyZ2V0ID0gMEY0NjgwQTkxNEJBN0ZEOTAwQkZFMjcyIC8qIExMSW50IE9mZnNl
dHMgKi87CkBAIC04NDA5LDYgKzg5MzEsMzggQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlv
bjsKIAkJfTsKKwkJMEZFQzg1QTkxQkRCNUNGMTAwODBGRjc0IC8qIERlYnVnICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5j
ZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAq
LzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJ
fTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8q
IFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGRUM4
NUFCMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9maWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIx
MzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9
IFByb2ZpbGluZzsKKwkJfTsKKwkJMEZFQzg1QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rp
b24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1
cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRh
YmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUg
PSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNC
MTRGNDZCMTMwMDQxQTI0RSAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMz
MDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CkBAIC04NzYxLDYgKzkzMTUs
MTcgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRD
b25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGRUM4NUE4MUJEQjVDRjEw
MDgwRkY3NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
dGVzdGIzIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENv
bmZpZ3VyYXRpb25zID0gKAorCQkJCTBGRUM4NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAq
LywKKwkJCQkwRkVDODVBQTFCREI1Q0YxMDA4MEZGNzQgLyogUmVsZWFzZSAqLywKKwkJCQkwRkVD
ODVBQjFCREI1Q0YxMDA4MEZGNzQgLyogUHJvZmlsaW5nICovLAorCQkJCTBGRUM4NUFDMUJEQjVD
RjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rp
b247CisJCX07CiAJCTBGRjkyMkNBMTRGNDZCMTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAq
LyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25zID0gKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJs
ZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOwpAQCAtNDcsNSArNDksNzAg
QEAgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbFByb2JlKHN0ZDo6ZnVuYwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kKQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbDoKKyAgICAgICAgb3V0
LnByaW50KCJOb3RFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmU6CisgICAgICAgIG91dC5wcmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbDoKKyAgICAgICAgb3V0LnBy
aW50KCJBYm92ZU9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93OgorICAgICAgICBvdXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWw6CisgICAgICAgIG91dC5w
cmludCgiQmVsb3dPckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpHcmVhdGVyVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVx
dWFsOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuT3JFcXVhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW46CisgICAgICAgIG91dC5w
cmludCgiTGVzc1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuT3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzVGhhbk9yRXF1YWwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3Nl
bWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kKQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAg
IGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93OgorICAgICAgICBvdXQucHJpbnQoIk92ZXJm
bG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQ6
CisgICAgICAgIG91dC5wcmludCgiU2lnbmVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE1hY3JvQXNzZW1ibGVyOjpQb3NpdGl2ZU9yWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJQb3Np
dGl2ZU9yWmVybyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6
WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJaZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOgorICAgICAgICBvdXQucHJpbnQoIk5vblplcm8i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJM
RVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5Niw4ICsxNTk2
LDE5IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7Cit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24p
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2Vsc2UgLy8gRU5BQkxFKEFTU0VNQkxFUikKIAor
bmFtZXNwYWNlIEpTQyB7CisKIC8vIElmIHRoZXJlIGlzIG5vIGFzc2VtYmxlciBmb3IgdGhpcyBw
bGF0Zm9ybSwgYXQgbGVhc3QgYWxsb3cgY29kZSB0byBtYWtlIHJlZmVyZW5jZXMgdG8KIC8vIHNv
bWUgb2YgdGhlIHRoaW5ncyBpdCB3b3VsZCBvdGhlcndpc2UgZGVmaW5lLCBhbGJlaXQgd2l0aG91
dCBnaXZpbmcgdGhhdCBjb2RlIGFueSB3YXkKIC8vIG9mIGRvaW5nIGFueXRoaW5nIHVzZWZ1bC4K
QEAgLTE2MTEsNiArMTYyMiw4IEBAIHB1YmxpYzoKICAgICBlbnVtIEZQUmVnaXN0ZXJJRCB7IE5v
RlBSZWdpc3RlciB9OwogfTsKIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKICNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKQogCiAjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5w
YXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIEFkZHJlc3NNYXRjaGVyCisKKyMgTm90ZSB0
aGF0IHRoaXMgcmVsaWVzIG9uIEIzIGRvaW5nIGFnZ3Jlc3NpdmUgcmVhc3NvY2lhdGlvbiBhbmQg
Y2Fub25jYWxpemF0aW9uIG9mIGludGVnZXIgYWRkcy4KKyMgV2UnbGwgbmV2ZXIgc2VlIEFkZChB
ZGQoeCwgY29uc3QxKSwgY29uc3QyKSBiZWNhdXNlIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVu
IHJlYXNzb2NpYXRlZCBpbnRvCisjIEFkZCh4LCBjb25zdDEgKyBjb25zdDIpLiBBbHNvLCB3ZSB3
aWxsIG5ldmVyIHNlZSBBZGQoY29uc3QsIHgpLCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgY2Fub25p
Y2FsaXplZAorIyBpdCB0byBBZGQoeCwgY29uc3QpLiBUaGF0IHNhaWQsIGluIHRoaXMgY29kZSB3
ZSBuZXZlciBtYWtlIGFzc2VydGlvbnMgYWJvdXQgdGhlc2Ugb3B0aW1pemF0aW9ucworIyBoYXZp
bmcgYmVlbiBwZXJmb3JtZWQuIEFsc28sIHNpbmNlIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9u
cyBpbiBCMyBoYXZlIGEgYnVpbHQtaW4gb2Zmc2V0LCB3ZQorIyBkb24ndCBuZWVkIHRvIG1hdGNo
IEFkZCh4LCBjb25zdCkuIFRoYXQgd291bGQgaGF2ZSBiZWVuIGZvbGRlZCBpbnRvIHRoZSBMb2Fk
L1N0b3JlIGluc3RydWN0aW9ucworIyBhbHJlYWR5LiBTbywgdGhlIG9ubHkgZmFuY3kgbWF0aGlu
ZyB0aGlzIGNhbiBkbyBpcyBqdXN0IEJhc2VJbmRleCBmb3Jtcy4KKworQWRkU2hpZnQxID0gQWRk
KFNobChpbmRleCwgJGxvZ1NjYWxlKSwgYmFzZSkKK0FkZFNoaWZ0MiA9IEFkZChiYXNlLCBTaGwo
aW5kZXgsICRsb2dTY2FsZSkpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworRGlyZWN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVu
dFJlZ1ZhbHVlKCkKK3sKK30KKwordm9pZCBBcmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisjZGVmaW5l
IEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQXJndW1lbnRSZWdWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KSB7IHJldHVybiBvcGNvZGUgPT0gQXJndW1lbnRSZWc7IH0KKyAgICAKKyAgICB+QXJndW1lbnRS
ZWdWYWx1ZSgpOworCisgICAgUmVnIGFyZ3VtZW50UmVnKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
QXJndW1lbnRSZWdWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykK
KyAgICAgICAgOiBWYWx1ZShpbmRleCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRl
clR5cGUoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyZWcuaXNTZXQoKSk7CisgICAgfQorCisgICAgUmVnIG1fcmVnOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDgy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NvbnN0IGNoYXIqIGNv
bnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK0Jhc2ljQmxvY2s6OkJhc2ljQmxv
Y2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2luZGV4KGluZGV4
KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNpY0Jsb2NrOjp+QmFz
aWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZhbHVlKiB2YWx1ZSkK
K3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCitib29sIEJhc2ljQmxvY2s6OmFk
ZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6YWRkUHJl
ZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6cmVtb3ZlUHJlZGVj
ZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICByZXR1cm4gQjM6
OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9j
azo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJl
Zml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVu
Y3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhp
cykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgQjM6OmRlZXBEdW1wKHZhbHVlKSwgIlxuIik7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tfaAorI2RlZmluZSBCM0Jhc2ljQmxv
Y2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2Nr
LmgiCisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2Vk
dXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05P
TkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVMaXN0OworICAgIHR5cGVkZWYg
VmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisgICAgdHlwZWRlZiBWZWN0
b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29u
dHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3Qg
ZHVtcFByZWZpeDsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAgICB1bnNpZ25lZCBpbmRleCgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFZhbHVlTGlzdDo6aXRlcmF0b3IgYmVn
aW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0OjppdGVyYXRv
ciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAgIFZhbHVlTGlzdDo6Y29uc3Rf
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAg
VmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5l
bmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
c1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV92YWx1
ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVz
Lmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsg
fQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
czsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKFZhbHVlKik7CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUq
IGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOworCisgICAgdW5zaWduZWQgbnVt
U3VjY2Vzc29ycygpIGNvbnN0OworICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29y
KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1
bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNv
bnN0OworICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKTsKKworICAgIEJhc2ljQmxvY2sq
IHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBCYXNpY0Jsb2NrKiYg
c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248
QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCk7CisgICAgU3VjY2Vz
c29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNj
ZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29ycygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIHBy
ZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tp
bmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsg
cmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vzc29yTGlz
dCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKyAgICBQ
cmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9
CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlbW92
ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNlc3NvcihC
YXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICBkb3VibGUgZnJlcXVlbmN5
KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8vIEluc3Rh
bnRpYXRlIHZpYSBQcm9jZWR1cmUuCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVlTGlzdCBt
X3ZhbHVlczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgZG91Ymxl
IG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoK
KyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAg
IDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAg
IG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5w
cmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEJhc2ljQmxvY2sq
IG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKGNvbnN0
IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxv
Y2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKyNkZWZpbmUgQjNCYXNp
Y0Jsb2NrSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBl
KiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZh
bHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCitpbmxpbmUgdW5zaWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vzc29ycygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5udW1TdWNj
ZXNzb3JzKCk7Cit9CisKK2lubGluZSBjb25zdCBGcmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6
OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5h
czxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lubGluZSBGcmVxdWVu
dGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBy
ZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisK
K2lubGluZSBjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCkt
PnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJh
c2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xW
YWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jayogQmFzaWNCbG9j
azo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1
Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2sqJiBCYXNpY0Js
b2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gc3VjY2Vz
c29yKGluZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNp
Y0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JC
bG9ja3MoKQoreworICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1
Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK2lubGluZSBTdWNjZXNzb3JDb2xsZWN0
aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IEJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN1Y2Nlc3Nv
ckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4oc3VjY2Vz
c29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIz
QmFzaWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0lu
ZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayog
YmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29y
cyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChwcmVkZWNlc3NvcnMuY29udGFp
bnMocHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcmVkZWNlc3Nv
cnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8
dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayog
YmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29y
cyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
cHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0g
PT0gcHJlZGVjZXNzb3IpIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpLS1dID0gcHJlZGVj
ZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAgIHByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7Cisg
ICAgICAgICAgICBBU1NFUlQoIXByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpOwor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZh
bHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBsYWNlUHJl
ZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sq
IHRvKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgeworICAgICAgICAgICAgcHJl
ZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVjb21wdXRlcyBwcmVkZWNl
c3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KK3RlbXBsYXRl
PHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAgLy8gQ2xlYXIgYWxsIHBy
ZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAoYXV0byYgYmxvY2sgOiBibG9ja3MpCisg
ICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisKKyAgICBHcmFwaE5vZGVX
b3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAg
IHdvcmtsaXN0LnB1c2goYmxvY2tzWzBdLmdldCgpKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayog
YmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nl
c3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgaWYgKHdvcmts
aXN0LnB1c2goc3VjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBzdWNjZXNzb3ItPnByZWRlY2Vz
c29ycygpLmFwcGVuZChibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChibG9ja3Nb
aV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJsb2Nrc1tpXSA9IG51
bGxwdHI7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIzQmxvY2tX
b3JrbGlzdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2Nr
LmgiCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3Jr
bGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xp
c3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisv
LyBXaGVuIHlvdSBzYXkgQmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9j
ayB3aXRoIGFuIGludCIuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBH
cmFwaE5vZGVXaXRoPEJhc2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xp
c3QgaXMgdXNlZnVsIGZvciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhl
IGJsb2NrLiBJdCBhbHNvCisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2
ZW4gaWYgdGhlIGJsb2NrIGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisv
LyB0aGluZ3MgbGlrZSBidWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAo
dGhlIGF1eGlsaWFyeSBwYXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4K
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVu
ZGVkR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+
PjsKKwordHlwZWRlZiBHcmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFw
aE5vZGVXaXRoT3JkZXI8QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBv
c3RPcmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2Nr
Pj4gUG9zdE9yZGVyQmxvY2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja1dvcmtsaXN0X2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDaGVja1NwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJD
b2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJBaXJJ
bnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2Ug
eworCit1bnNpZ25lZCBudW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBzd2l0Y2ggKGluc3Qu
b3JpZ2luLT5vcGNvZGUoKSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1
YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAvLyBSZXNDb25kLCBUbXAsIFRtcAorICAg
ICAgICByZXR1cm4gMzsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1cm4gMTsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm4gMDsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitDaGVja1Nw
ZWNpYWw6OkNoZWNrU3BlY2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3Mp
CisgICAgOiBtX2NoZWNrT3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fbnVtQ2hlY2tBcmdzKG51bUFy
Z3MpCit7CisgICAgQVNTRVJUKGlzVGVybWluYWwob3Bjb2RlKSk7Cit9CisKK0NoZWNrU3BlY2lh
bDo6fkNoZWNrU3BlY2lhbCgpCit7Cit9CisKK0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFu
Y2goY29uc3QgSW5zdCYgaW5zdCkgY29uc3QKK3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2No
ZWNrT3Bjb2RlLCBpbnN0Lm9yaWdpbik7CisgICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShtX251bUNoZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fbnVtQ2hlY2tBcmdzOyArK2kpCisgICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzLmFwcGVu
ZChpbnN0LmFyZ3NbaSArIDFdKTsKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lk
IENoZWNrU3BlY2lhbDo6Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8
SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaGlkZGVuQnJhbmNoKGlu
c3QpLmZvckVhY2hBcmcoY2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhp
bnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hl
Y2tTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5j
aChpbnN0KS5pc1ZhbGlkRm9ybSgpCisgICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJncyhp
bnN0KSwgbV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0KTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6
OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChh
cmdJbmRleCA+PSAxICYmIGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hlY2tBcmdzKQorICAgICAgICBy
ZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmFkbWl0c1N0YWNrKGFyZ0luZGV4IC0gMSk7CisgICAg
cmV0dXJuIGFkbWl0c1N0YWNrSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsg
MSwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFs
OjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRl
eHQmIGNvbnRleHQpCit7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWwgPSBoaWRkZW5CcmFu
Y2goaW5zdCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICBBU1NFUlQoZmFpbC5pc1NldCgp
KTsKKworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgVmVjdG9yPFZhbHVl
UmVwPiByZXBzOworICAgIGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7CisgICAg
ICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisgICAgICAgICAgICByZXBzLmFw
cGVuZChWYWx1ZVJlcCgpKTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPm9wY29kZSgpID09IENo
ZWNrU3ViICYmIHZhbHVlLT5jaGlsZCgwKS0+aXNJbnQoMCkpCisgICAgICAgICAgICByZXBzLmFw
cGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzNdKSk7CisgICAg
ICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsK
KyAgICB9IGVsc2UgeworICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENoZWNrKTsK
KyAgICAgICAgcmVwcy5hcHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEpKTsKKyAgICB9CisKKyAg
ICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIHJlcHMp
OworICAgIAorICAgIGNvbnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgY3JlYXRlU2hh
cmVkVGFzazxHZW5lcmF0aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCisgICAgICAgICAg
ICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpIHsKKyAgICAgICAg
ICAgICAgICBmYWlsLmxpbmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAgICAgICAgICAg
ICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgICAgICAgICAgICAgIFN0YWNrbWFwOjpHZW5lcmF0
aW9uUGFyYW1zIHBhcmFtczsKKyAgICAgICAgICAgICAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsK
KyAgICAgICAgICAgICAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICAgICAgICAg
ICAgICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnVzZWRSZWdp
c3RlcnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgICAgICAgICAgICAgc3Rh
Y2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworICAgICAgICAgICAgfSkpOwor
CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOyAvLyBBcyBmYXIgYXMgQWlyIHRoaW5r
cywgd2UgYXJlIG5vdCBhIHRlcm1pbmFsLgorfQorCit2b2lkIENoZWNrU3BlY2lhbDo6ZHVtcElt
cGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jaGVja09wY29k
ZSwgIigiLCBtX251bUNoZWNrQXJncywgIikiKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmRl
ZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQjM6
OkNoZWNrVmFsdWUgbG93ZXJlZCB0byAiLCBtX2NoZWNrT3Bjb2RlLCAiIHdpdGggIiwgbV9udW1D
aGVja0FyZ3MsICIgYXJncy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1NwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1Nw
ZWNpYWxfaAorI2RlZmluZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHdhbnQgdG8gbG93ZXIg
Q2hlY2sgaW5zdHJ1Y3Rpb25zIHRvIGEgYnJhbmNoLCBidXQgdGhlbiB3ZSB3YW50IHRvIHJvdXRl
IHRoYXQgYnJhbmNoIHRvIG91cgorLy8gb3V0LW9mLWxpbmUgY29kZSBpbnN0ZWFkIG9mIGRvaW5n
IGFueXRoaW5nIGVsc2UuIEZvciB0aGlzIHJlYXNvbiwgYSBDaGVja1NwZWNpYWwgd2lsbCByZW1l
bWJlcgorLy8gd2hpY2ggYnJhbmNoIG9wY29kZSB3ZSBoYXZlIHNlbGVjdGVkIGFsb25nIHdpdGgg
dGhlIG51bWJlciBvZiBhcmdzIGluIHRoZSBvdmVybG9hZCB3ZSB3YW50LiBJdAorLy8gd2lsbCBj
cmVhdGUgYW4gSW5zdCB3aXRoIHRoYXQgb3Bjb2RlIHBsdXMgdGhlIGFwcHJvcHJpYXRlIGFyZ3Mg
ZnJvbSB0aGUgb3duaW5nIEluc3Qgd2hlbmV2ZXIgeW91CisvLyBjYWxsIGFueSBvZiB0aGUgY2Fs
bGJhY2tzLgorLy8KKy8vIE5vdGUgdGhhdCBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hl
Y2tNdWwgd2UgZXhwZWN0IHRoYXQgdGhlIEIzIGFyZ3VtZW50cyBhcmUgdGhlIHJldmVyc2UKKy8v
IG9mIHRoZSBBaXIgYXJndW1lbnRzIChBZGQoYSwgYikgPT4gQWRkMzIgYiwgYSkuIEV4Y2VwdDoK
Ky8vIC0gQ2hlY2tTdWIoMCwgeCksIHdoaWNoIHR1cm5zIGludG8gQnJhbmNoTmVnMzIgeC4KKy8v
IC0gQ2hlY2tNdWwoYSwgYiksIHdoaWNoIHR1cm5zIGludG8gTXVsMzIgYiwgYSBidXQgd2UgcGFz
cyBBbnkgZm9yIGEncyBWYWx1ZVJlcC4KKworY2xhc3MgQ2hlY2tTcGVjaWFsIDogcHVibGljIFN0
YWNrbWFwU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1
bnNpZ25lZCBudW1BcmdzKTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAg
ICAvLyBDb25zdHJ1Y3RzIGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJh
bmNoIHRoYXQgdGhpcyB3aWxsIHVzZS4KKyAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNvbnN0
IEFpcjo6SW5zdCYpIGNvbnN0OworCisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNv
bnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsK
KyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNT
dGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisKKyAgICAvLyBO
T1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhpZGRlbiBicmFuY2gg
YW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2VuZXJhdGVzIHRoZSBz
dGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5l
cmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRpb25Db250ZXh0Jikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVk
IG1fbnVtQ2hlY2tBcmdzOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1NwZWNpYWxfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKK0NoZWNrVmFsdWU6On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9pZCBDaGVja1ZhbHVlOjpk
dW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgic3RhY2tt
YXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tWYWx1ZV9oCisj
ZGVmaW5lIEIzQ2hlY2tWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUgOiBwdWJs
aWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29k
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tB
ZGQ6CisgICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAg
ICAgIGNhc2UgQ2hlY2s6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5D
aGVja1ZhbHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
Q2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVl
KiByaWdodCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9y
aWdpbiwgbGVmdCwgcmlnaHQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7
CisgICAgICAgIEFTU0VSVChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAg
IEFTU0VSVChvcGNvZGUgPT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29k
ZSA9PSBDaGVja011bCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2su
CisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbiwgVmFsdWUqIHByZWRpY2F0ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBW
b2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0g
Q2hlY2spOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisj
aW5jbHVkZSAiT3B0aW9ucy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Ym9vbCBzaG91bGREdW1wSVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlv
bkVuYWJsZWQoKSB8fCBGVEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJ
UkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQorewor
ICAgIHJldHVybiBPcHRpb25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNo
b3VsZFZhbGlkYXRlSVIoKQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkg
fHwgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRh
dGVJUkF0RWFjaFBoYXNlKCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0
RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAg
IHJldHVybiBPcHRpb25zOjp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M0NvbW1vbl9oCisjZGVmaW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitpbmxpbmUgYm9vbCBpczY0Qml0KCkgeyBy
ZXR1cm4gc2l6ZW9mKHZvaWQqKSA9PSA4OyB9CitpbmxpbmUgYm9vbCBpczMyQml0KCkgeyByZXR1
cm4gIWlzNjRCaXQoKTsgfQorCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1w
SVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZh
bGlkYXRlSVJBdEVhY2hQaGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOwor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM0NvbW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW11dGF0aXZpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbW11dGF0aXZpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2gg
KGNvbW11dGF0aXZpdHkpIHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJp
bnQoIkNvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0
aXZlOgorICAgICAgICBvdXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNDb21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitlbnVtIENvbW11dGF0aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0
aXZlCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisK
K2NsYXNzIFByaW50U3RyZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpCMzo6Q29tbXV0YXRpdml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFs
dWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitDb25zdDMyVmFsdWU6On5Db25zdDMyVmFsdWUoKQoreworfQorCit2b2lkIENvbnN0
MzJWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Qz
MlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3QzMlZhbHVlX2gK
KyNkZWZpbmUgQjNDb25zdDMyVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IEpTX0VYUE9SVF9QUklWQVRFIENvbnN0MzJWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6
CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUg
PT0gQ29uc3QzMjsgfQorICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Db25zdDMyVmFsdWUo
KTsKKyAgICAKKyAgICBpbnQzMl90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2
YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3QzMiwgSW50MzIsIG9yaWdpbikKKyAg
ICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50
MzJfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25zdDMyVmFsdWVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZh
bHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkKK3sKK30KKwordm9pZCBDb25z
dDY0VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fdmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0
VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0NjRWYWx1ZV9o
CisjZGVmaW5lIEIzQ29uc3Q2NFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBKU19FWFBPUlRfUFJJVkFURSBDb25zdDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGlj
OgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2Rl
ID09IENvbnN0NjQ7IH0KKyAgICAKKyAgICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50
NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworcHJvdGVjdGVkOgorICAg
IHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdDY0VmFsdWUodW5zaWduZWQgaW5kZXgsIE9y
aWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0
NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0NvbnN0NjRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0
RG91YmxlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3RE
b3VibGVWYWx1ZTo6fkNvbnN0RG91YmxlVmFsdWUoKQoreworfQorCit2b2lkIENvbnN0RG91Ymxl
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
ZigiJWxlIiwgbV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQ29uc3REb3VibGVWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3REb3VibGVWYWx1ZSA6IHB1YmxpYyBWYWx1
ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJl
dHVybiBvcGNvZGUgPT0gQ29uc3REb3VibGU7IH0KKyAgICAKKyAgICB+Q29uc3REb3VibGVWYWx1
ZSgpOworICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0K
KworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29u
c3REb3VibGVWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVl
KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdERvdWJsZSwgRG91YmxlLCBvcmlnaW4pCisg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBt
X3ZhbHVlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNDb25zdFB0clZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdFB0clZh
bHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5o
IgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCisvLyBVc3VhbGx5IHlvdSB3YW50IHRvIHVzZSBDb25zdDMyVmFsdWUgb3IgQ29u
c3Q2NFZhbHVlIGRpcmVjdGx5LiBCdXQgdGhpcyBpcyB1c2VmdWwgZm9yIHdyaXRpbmcKKy8vIHBs
YXRmb3JtLWFnbm9zdGljIGNvZGUuIE5vdGUgdGhhdCBhIENvbnN0UHRyVmFsdWUgd2lsbCBiZWhh
dmUgbGlrZSBlaXRoZXIgYSBDb25zdDMyVmFsdWUgb3IKKy8vIENvbnN0NjRWYWx1ZSBkZXBlbmRp
bmcgb24gcGxhdGZvcm0uCisKKyNpZiBVU0UoSlNWQUxVRTY0KQordHlwZWRlZiBDb25zdDY0VmFs
dWUgQ29uc3RQdHJWYWx1ZUJhc2U7CisjZWxzZQordHlwZWRlZiBDb25zdDMyVmFsdWUgQ29uc3RQ
dHJWYWx1ZUJhc2U7CisjZW5kaWYKKworY2xhc3MgQ29uc3RQdHJWYWx1ZSA6IHB1YmxpYyBDb25z
dFB0clZhbHVlQmFzZSB7CitwdWJsaWM6CisgICAgdm9pZCogdmFsdWUoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oQ29uc3RQdHJWYWx1ZUJhc2U6OnZh
bHVlKCkpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwor
CisgICAgQ29uc3RQdHJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgdm9pZCog
cG9pbnRlcikKKyAgICAgICAgOiBDb25zdFB0clZhbHVlQmFzZShpbmRleCwgb3JpZ2luLCBiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0NvbnN0UHRyVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b250cm9sVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnRyb2xWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb250cm9sVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250
cm9sVmFsdWUoKQoreworfQorCit2b2lkIENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobGlzdER1bXAobV9zdWNjZXNzb3JzKSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIz
Q29udHJvbFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1
ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIENvbnRyb2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUp
IHsKKyAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2Fz
ZSBSZXR1cm46CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBjYXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVz
ZSBTd2l0Y2hWYWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAor
ICAgICAgICAgICAgLy8gc3dpdGNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4g
bm9uLW51bGwuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVkZWYg
VmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIEpTX0VYUE9S
VF9QUklWQVRFIH5Db250cm9sVmFsdWUoKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMo
KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgY29uc3QgRnJlcXVl
bnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vj
Y2Vzc29yc1tpbmRleF07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25l
ZCBpbmRleCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nl
c3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAg
ICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisK
K3Byb3RlY3RlZDoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNZXRhKFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQ29udHJvbFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFy
Z3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlw
ZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCisgICAgeworICAgIH0KKworICAgIC8vIFN1YmNsYXNz
ZXMgd2lsbCBwb3B1bGF0ZSB0aGlzLgorICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhp
cyBmb3IgT29wcy4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBPb3BzKTsKKyAgICB9CisK
KyAgICAvLyBVc2UgdGhpcyBmb3IgUmV0dXJuLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHJlc3VsdCkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHJlc3VsdCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChvcGNvZGUgPT0gUmV0dXJuKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhp
cyBmb3IgSnVtcC4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFT
U0VSVChvcGNvZGUgPT0gSnVtcCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQodGFyZ2V0
KTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRyb2xWYWx1
ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgeWVzLCBj
b25zdCBGcmVxdWVudGVkQmxvY2smIG5vKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9
PSBCcmFuY2gpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHllcyk7CisgICAgICAgIG1f
c3VjY2Vzc29ycy5hcHBlbmQobm8pOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29udHJvbFZh
bHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3Mu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNs
YXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1
ZW5jeUNsYXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBu
YW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSkKK3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgewor
ICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3Jt
YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6Cisg
ICAgICAgIG91dC5wcmludCgiUmFyZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzRnJlcXVlbmN5Q2xhc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNGcmVxdWVuY3lDbGFzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNGcmVxdWVuY3lDbGFzc19oCisjZGVmaW5lIEIzRnJlcXVlbmN5Q2xhc3NfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xh
c3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBo
eXBvdGhlc2lzIGFib3V0IHRoZSBmcmVxdWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3Ry
dWN0LiBUaGlzIGlzCisgICAgLy8gdGhlIGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJh
c2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8g
V2UgZXhwZWN0IHRoYXQgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hl
ZCBzdXBlciByYXJlbHkuIEl0J3MgdmFsaWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlv
bnMgdGhhdCBwdW5pc2ggUmFyZSBjb2RlLiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRp
b25zIHdoZXJlIHlvdQorICAgIC8vIGhhdmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJl
cXVlbmN5IGNsYXNzIGZyb20gYSBtZXJnaW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAg
ICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVyIGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3Jt
YWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNo
IFJhcmUgY29kZSB2ZXJ5IGJhZGx5LgorICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNGcmVxdWVuY3lDbGFzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwor
dHlwZWRlZiBHZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9j
azsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNs
dWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAi
QjNMb3dlclRvQWlyLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1Zh
bGlkYXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIGdlbmVy
YXRlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBBaXI6
OkNvZGUgY29kZTsKKyAgICBnZW5lcmF0ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAgQWly
OjpnZW5lcmF0ZShjb2RlLCBqaXQpOworfQorCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEFpcjo6Q29kZSYgY29kZSkKK3sKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJ
UigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUpOworCisgICAgLy8gSWYgd2UncmUgZG9p
bmcgc3VwZXIgdmVyYm9zZSBkdW1waW5nLCB0aGUgcGhhc2Ugc2NvcGUgb2YgYW55IHBoYXNlIHdp
bGwgYWxyZWFkeSBkbyBhIGR1bXAuCisgICAgaWYgKHNob3VsZER1bXBJUigpICYmICFzaG91bGRE
dW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgQjM6XG4iKTsK
KyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBBZGQg
bW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDUwNworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAg
ICAgICAgdmFsaWRhdGUocHJvY2VkdXJlKTsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBkb2luZyBz
dXBlciB2ZXJib3NlIGR1bXBpbmcsIHRoZSBwaGFzZSBzY29wZSBvZiBhbnkgcGhhc2Ugd2lsbCBh
bHJlYWR5IGRvIGEgZHVtcC4KKyAgICAvLyBOb3RlIHRoYXQgbG93ZXJUb0FpcigpIGFjdHMgbGlr
ZSBhIHBoYXNlIGluIHRoaXMgcmVnYXJkLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hv
dWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBhZnRlciAiLCBw
cm9jZWR1cmUubGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAg
ICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorCisgICAgbG93ZXJUb0Fpcihwcm9jZWR1
cmUsIGNvZGUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJhdGVfaAorI2RlZmluZSBCM0dlbmVy
YXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBD
Q2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVz
cGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJl
LCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGFuZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBjb2Rl
IGJ5IGZpcnN0CisvLyBpbnRlcm5hbGx5IGNvbnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFuZCB0
aGVuIGdlbmVyYXRpbmcgdGhhdC4KK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJv
Y2VkdXJlJiwgQ0NhbGxIZWxwZXJzJik7CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJl
LCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRo
ZW4gZ2VuZXJhdGUKKy8vIHRoZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6Z2VuZXJh
dGUoKS4gTm90ZSB0aGF0IGFuIEFpcjo6Q29kZSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0aGUK
Ky8vIEIzOjpQcm9jZWR1cmUsIHNvIHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCMzo6UHJv
Y2VkdXJlIG91dGxpdmVzIHRoZSBBaXI6OkNvZGUuCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2Vk
dXJlJiwgQWlyOjpDb2RlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzR2VuZXJhdGVfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1
ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVx
dWVudGVkQmxvY2tfaAorI2RlZmluZSBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKKyNpbmNsdWRl
IDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
Ky8vIEEgZnJlcXVlbnRlZCBibG9jayBpcyBhIHR1cGxlIG9mIEJhc2ljQmxvY2sqIGFuZCBGcmVx
dWVuY3lDbGFzcy4gSXQncyB1c3VhbGx5IHVzZWQgYXMgYQorLy8gc3VjY2Vzc29yIGVkZ2UuCisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CitjbGFzcyBHZW5lcmljRnJlcXVlbnRlZEJs
b2NrIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKAorICAg
ICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG51bGxwdHIsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5j
eSA9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAg
ICAgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAg
ICYmIG1fZnJlcXVlbmN5ID09IG90aGVyLm1fZnJlcXVlbmN5OworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAh
PSBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKCk7CisgICAgfQorCisgICAgQmFzaWNCbG9jayogYmxv
Y2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgQmFzaWNCbG9jayomIGJsb2NrKCkg
eyByZXR1cm4gbV9ibG9jazsgfQorICAgIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSgpIGNvbnN0
IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lDbGFz
czo6Tm9ybWFsKQorICAgICAgICAgICAgb3V0LnByaW50KGZyZXF1ZW5jeSgpLCAiOiIpOworICAg
ICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAobV9ibG9jaykpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIEZyZXF1ZW5jeUNsYXNzIG1fZnJlcXVlbmN5
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNJbmRleE1hcF9oCisjZGVmaW5lIEIzSW5kZXhNYXBfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBtYXAgZm9yIGtleXMgdGhhdCBoYXZlIGFuIGluZGV4KCku
IEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZp
Y2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIG1h
cHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5CisvLyBzcGFyc2UgaW5kaWNlcyBhbmQgdGhl
cmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBlbmFt
ZSBWYWx1ZT4KK2NsYXNzIEluZGV4TWFwIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbmRleE1h
cChzaXplX3Qgc2l6ZSA9IDApCisgICAgeworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7
CisgICAgfQorCisgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAgICBt
X3ZlY3Rvci5yZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAgVmFsdWUmIG9wZXJhdG9yW10oS2V5
KiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAg
ICB9CisgICAgCisgICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9CisgICAg
Citwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV92ZWN0b3I7Cit9OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0luZGV4TWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJbmRleFNl
dF9oCisKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1hUHJp
bnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBh
IHNldCBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVu
dCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYg
eW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1ZXMgY2Fu
IGhhdmUgdmVyeSBzcGFyc2UKKy8vIGluZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1
ZXMuCisKKy8vIElmIHlvdSB3YW50IGEgc2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8gSW5kZXhT
ZXQ8QmFzaWNCbG9jaz4uIFNvLCBUID0gQmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
CitjbGFzcyBJbmRleFNldCB7CitwdWJsaWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9zZXQu
c2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQqIHZhbHVl
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRlcmFi
bGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5cGUm
IGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29sbGVj
dGlvbihjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAg
ICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxw
dHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9y
KGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJdGVy
YWJsZTo6aXRlcmF0b3IgaXRlcikKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29s
bGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgbV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiBtX2l0ZXIgPT0gb3RoZXIubV9pdGVyOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVjdGlv
blR5cGUqIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0ZXJh
YmxlOjppdGVyYXRvciBtX2l0ZXI7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVn
aW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2luKCkp
OyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29s
bGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBD
b2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYgbV9z
ZXQ7CisgICAgfTsKKworICAgIC8vIEZvciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAvLyBp
bmRleFNldC52YWx1ZXMocHJvY2VkdXJlKTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMsIHlv
dSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0aW9u
VHlwZT4gdmFsdWVzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9uKTsK
KyAgICB9CisKKyAgICBjb25zdCBCaXRWZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVybiBt
X3NldDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgewor
ICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDog
aW5kaWNlcygpLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6ZHVt
cFByZWZpeCwgaW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9zZXQ7
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhTZXRf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0xv
d2VyVG9BaXIuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMu
aCIKKyNpbmNsdWRlICJCM0FkZHJlc3NNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJl
Z1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIz
Q29tbXV0YXRpdml0eS5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0lu
ZGV4U2V0LmgiCisjaW5jbHVkZSAiQjNMb3dlcmluZ01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM01l
bW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9j
ZWR1cmUuaCIKKyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2UgeworCitjbGFz
cyBMb3dlclRvQWlyIHsKK3B1YmxpYzoKKyAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBDb2RlJiBjb2RlKQorICAgICAgICA6IHZhbHVlVG9UbXAocHJvY2VkdXJlLnZhbHVlcygp
LnNpemUoKSkKKyAgICAgICAgLCBibG9ja1RvQmxvY2socHJvY2VkdXJlLnNpemUoKSkKKyAgICAg
ICAgLCB1c2VDb3VudHMocHJvY2VkdXJlKQorICAgICAgICAsIGFkZHJlc3NTZWxlY3RvcigqdGhp
cykKKyAgICAgICAgLCBwcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICAsIGNvZGUoY29kZSkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCMzo6
QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1cmUpCisgICAgICAgICAgICBibG9ja1RvQmxvY2tb
YmxvY2tdID0gY29kZS5hZGRCbG9jayhibG9jay0+ZnJlcXVlbmN5KCkpOworCisgICAgICAgIC8v
IExvd2VyIGRlZnMgYmVmb3JlIHVzZXMgb24gYSBnbG9iYWwgbGV2ZWwuIFRoaXMgaXMgYSBnb29k
IGhldXJpc3RpYyB0byBsb2NrIGRvd24gYQorICAgICAgICAvLyBob2lzdGVkIGFkZHJlc3MgZXhw
cmVzc2lvbiBiZWZvcmUgd2UgZHVwbGljYXRlIGl0IGJhY2sgaW50byB0aGUgbG9vcC4KKyAgICAg
ICAgZm9yIChCMzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1cmUuYmxvY2tzSW5QcmVPcmRl
cigpKSB7CisgICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgorICAgICAgICAgICAgaW5z
dHMucmVzaXplKDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2Nr
cyBpbiByZXZlcnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hh
dCBhbGxvd3MgdXMKKyAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5
LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgewor
ICAgICAgICAgICAgICAgIGN1cnJlbnRWYWx1ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAg
ICAgICBpZiAobG9ja2VkLmNvbnRhaW5zKGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGluc3RzLmFwcGVuZChWZWN0b3I8SW5zdD4o
KSk7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBydW5Mb3dlcmluZ01hdGNoZXIoY3Vy
cmVudFZhbHVlLCAqdGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBsb3dlciAiLCBkZWVwRHVt
cChjdXJyZW50VmFsdWUpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4gaW5zdHMgY29udGFpbnMg
dGhlbSBpbiByZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAgICAgICAgICAvLyBpdCBp
biByZXZlcnNlLgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5zdHMuc2l6ZSgpOyBp
LS07KSB7CisgICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHNbaV0pCisgICAg
ICAgICAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVuZEluc3QoV1RGOjptb3Zl
KGluc3QpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQg
dGhlIHN1Y2Nlc3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCisgICAgICAgICAgICBBU1NFUlQo
YmxvY2stPnN1Y2Nlc3NvcnMoKS5zaXplKCkgPD0gMik7CisgICAgICAgICAgICBmb3IgKEIzOjpC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAg
ICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZChibG9ja1Rv
QmxvY2tbc3VjY2Vzc29yXSk7CisgICAgICAgIH0KKworICAgICAgICBJbnNlcnRpb25TZXQgaW5z
ZXJ0aW9uU2V0KGNvZGUpOworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBwcm9sb2d1ZSkKKyAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0KDAsIFdURjo6bW92ZShpbnN0KSk7Cisg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOworICAgIH0KKworICAgIFRtcCB0
bXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgVG1wJiB0bXAgPSB2YWx1ZVRvVG1wW3Zh
bHVlXTsKKyAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAgICB0bXAgPSBjb2RlLm5ld1RtcChp
c0ludCh2YWx1ZS0+dHlwZSgpKSA/IEFyZzo6R1AgOiBBcmc6OkZQKTsKKyAgICAgICAgcmV0dXJu
IHRtcDsKKyAgICB9CisKKyAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGludG8g
YW4gYWRkcmVzcy4KKyAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRkcmVzcykKKyAgICB7
CisgICAgICAgIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFkZHJlc3MgPSBBcmcoKTsKKyAgICAg
ICAgaWYgKHJ1bkFkZHJlc3NNYXRjaGVyKGFkZHJlc3MsIGFkZHJlc3NTZWxlY3RvcikpCisgICAg
ICAgICAgICByZXR1cm4gYWRkcmVzc1NlbGVjdG9yLnNlbGVjdGVkQWRkcmVzczsKKworICAgICAg
ICByZXR1cm4gQXJnOjphZGRyKHRtcChhZGRyZXNzKSk7CisgICAgfQorCisgICAgLy8gVGhpcyBn
aXZlcyB5b3UgdGhlIGFkZHJlc3Mgb2YgdGhlIGdpdmVuIExvYWQgb3IgU3RvcmUuIElmIGl0J3Mg
bm90IGEgTG9hZCBvciBTdG9yZSwgdGhlbgorICAgIC8vIGl0IHJldHVybnMgQXJnKCkuCisgICAg
QXJnIGFkZHIoVmFsdWUqIG1lbW9yeVZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFsdWUq
IHZhbHVlID0gbWVtb3J5VmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBpZiAoIXZh
bHVlKQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworCisgICAgICAgIEFyZyByZXN1bHQgPSBl
ZmZlY3RpdmVBZGRyKHZhbHVlLT5jaGlsZHJlbigpLmxhc3QoKSk7CisgICAgICAgIGlmICghcmVz
dWx0KQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworCisgICAgICAgIHJldHVybiByZXN1bHQu
d2l0aE9mZnNldCh2YWx1ZS0+b2Zmc2V0KCkpOworICAgIH0KKworICAgIEFyZyBsb2FkQWRkcihW
YWx1ZSogbG9hZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+b3Bjb2RlKCkg
PT0gTG9hZCkKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIHJl
dHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcgaW1tKFZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGlmICh2YWx1ZS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBBcmc6Omlt
bSh2YWx1ZS0+YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAg
IEFyZyBpbW1PclRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoQXJnIHJlc3Vs
dCA9IGltbSh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1
cm4gdG1wKHZhbHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUs
IENvbW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAgIHZvaWQg
YXBwZW5kQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIFRt
cCByZXN1bHQgPSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRocmVl
LW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIsIGMKKyAgICAgICAg
Ly8gbWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGMgPSBhIE9wIGIKKworICAg
ICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXAsIEFyZzo6VG1w
KSkgeworICAgICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBl
bmQob3Bjb2RlLCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9wZXJhdGlvbiBjb3VsZCBoYXZl
IGFuIGltbWVkaWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAgIGlmIChpbW0obGVmdCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKGxlZnQpLCB0bXAocmlnaHQp
LCByZXN1bHQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGltbShyaWdodCkgJiYg
aXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgeworICAg
ICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0ocmlnaHQpLCByZXN1bHQpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm90ZSB0aGF0IG5v
IGtub3duIGFyY2hpdGVjdHVyZSBoYXMgYSB0aHJlZS1vcGVyYW5kIGZvcm0gb2YgYmluYXJ5IG9w
ZXJhdGlvbnMgdGhhdCBhbHNvCisgICAgICAgIC8vIGxvYWQgZnJvbSBtZW1vcnkuIElmIHN1Y2gg
YW4gYWJvbWluYXRpb24gZGlkIGV4aXN0LCB3ZSB3b3VsZCBoYW5kbGUgaXQgc29tZXdoZXJlIGFy
b3VuZAorICAgICAgICAvLyBoZXJlLgorCisgICAgICAgIC8vIFR3by1vcGVyYW5kIGZvcm1zIGxp
a2U6CisgICAgICAgIC8vICAgICBPcCBhLCBiCisgICAgICAgIC8vIG1lYW4gc29tZXRoaW5nIGxp
a2U6CisgICAgICAgIC8vICAgICBiID0gYiBPcCBhCisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2lu
dCwgd2UgcHJlZmVyIHZlcnNpb25zIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBoYXZlIGEgZnVzZWQg
bG9hZCBvciBhbiBpbW1lZGlhdGUKKyAgICAgICAgLy8gb3ZlciB0aHJlZSBvcGVyYW5kIGZvcm1z
LgorICAgICAgICAKKyAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsK
KyAgICAgICAgICAgIEFyZyBsZWZ0QWRkciA9IGxvYWRBZGRyKGxlZnQpOworICAgICAgICAgICAg
aWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgbGVmdEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogVXNlIHRoZSByaWdodCBNb3ZlIG9wY29kZS4gSWYgd2Un
cmUgZGVhbGluZyB3aXRoIDMyLWJpdCB0eXBlcywgd2Ugc2hvdWxkCisgICAgICAgICAgICAgICAg
Ly8gdXNlIE1vdmUzMi4gSWYgd2UncmUgZGVhbGluZyB3aXRoIERvdWJsZXMsIHdlIHNob3VsZCB1
c2UgTW92ZURvdWJsZS4KKyAgICAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTMzCisgICAgICAgICAgICAgICAgYXBwZW5kKE1vdmUsIHRt
cChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgbGVmdEFk
ZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgQXJnIHJpZ2h0QWRkciA9IGxvYWRBZGRyKHJpZ2h0KTsKKyAgICAg
ICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgcmlnaHRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7
CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAg
ICAgYXBwZW5kKG9wY29kZSwgcmlnaHRBZGRyLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKGltbShyaWdodCkgJiYgaXNWYWxpZEZvcm0ob3Bj
b2RlLCBBcmc6OkltbSwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQoTW92ZSwgdG1w
KGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKHJpZ2h0KSwg
cmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAg
ICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBhcHBlbmQoTW92ZSwgdG1w
KGxlZnQpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAocmlnaHQpLCByZXN1
bHQpOworICAgIH0KKworICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRp
dml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CisgICAgYm9vbCB0cnlBcHBlbmRT
dG9yZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICAvLyBG
SVhNRTogVGhpcyBmYWlscyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGVmZmVjdHMgYmV0d2Vl
biB0aGUgTG9hZCBhbmQgdGhlIFN0b3JlIHRoYXQKKyAgICAgICAgLy8gY291bGQgY2xvYmJlciB0
aGUgbG9hZGVkIHZhbHVlLiBXZSBuZWVkIHRvIGNoZWNrIHN1Y2ggdGhpbmdzIGJlY2F1c2Ugd2Ug
YXJlIGVmZmVjdGl2ZWx5CisgICAgICAgIC8vIHNpbmtpbmcgdGhlIGxvYWQuCisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzQKKyAgICAgICAg
CisgICAgICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRyKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFT
U0VSVChzdG9yZUFkZHIpOworCisgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlOworICAgICAgICBp
ZiAoYWRkcihsZWZ0KSA9PSBzdG9yZUFkZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gcmln
aHQ7CisgICAgICAgIGVsc2UgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUgJiYgYWRk
cihyaWdodCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaXNW
YWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgc3RvcmVBZGRyLmtpbmQoKSkgJiYgaW1tKG90aGVy
VmFsdWUpKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0ob3RoZXJWYWx1ZSksIHN0
b3JlQWRkcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgc3RvcmVBZGRyLmtpbmQoKSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG90
aGVyVmFsdWUpLCBzdG9yZUFkZHIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBBaXI6Ok9wY29kZSBtb3ZlRm9yVHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBNb3Zl
MzI7CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpczY0
Qml0KCkpOworICAgICAgICAgICAgcmV0dXJuIE1vdmU7CisgICAgICAgIGNhc2UgRG91YmxlOgor
ICAgICAgICAgICAgcmV0dXJuIE1vdmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFpcjo6
T3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAg
aW5zdHMubGFzdCgpLmFwcGVuZChJbnN0KG9wY29kZSwgY3VycmVudFZhbHVlLCBzdGQ6OmZvcndh
cmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorICAgIAorICAgIEluZGV4U2V0
PFZhbHVlPiBsb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1w
IGluIEFpci4KKyAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiB2YWx1ZVRvVG1wOyAvLyBUaGVzZSBh
cmUgdmFsdWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1
ZSogd2l0aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KKyAgICBJbmRleE1hcDxCMzo6QmFz
aWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gYmxvY2tUb0Jsb2NrOworCisgICAgVXNlQ291bnRz
IHVzZUNvdW50czsKKworICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IGluc3RzOworICAgIFZl
Y3RvcjxJbnN0PiBwcm9sb2d1ZTsKKworICAgIFZhbHVlKiBjdXJyZW50VmFsdWU7CisKKyAgICAv
LyBUaGUgYWRkcmVzcyBzZWxlY3RvciB3aWxsIG1hdGNoIGFueSBwYXR0ZXJuIHdoZXJlIHRoZSBp
bnB1dCBvcGVyYW5kcyBhcmUgYXZhaWxhYmxlIGFzIFRtcHMuCisgICAgLy8gSXQgZG9lc24ndCBj
YXJlIGFib3V0IHNoYXJpbmcuIEl0IHdpbGwgaGFwcGlseSBlbWl0IHRoZSBzYW1lIGFkZHJlc3Mg
ZXhwcmVzc2lvbiBvdmVyIGFuZCBvdmVyCisgICAgLy8gYWdhaW4gcmVnYXJkbGVzcyBvZiB0aGUg
ZXhwcmVzc2lvbidzIGNvbXBsZXhpdHkuIFRoaXMgd29ya3Mgb3V0IGZpbmUsIHNpbmNlIGF0IHRo
ZSBtYWNoaW5lCisgICAgLy8gbGV2ZWwsIGFkZHJlc3MgZXhwcmVzc2lvbnMgYXJlIHN1cGVyIGNo
ZWFwLiBIb3dldmVyLCB0aGlzIGRvZXMgaGF2ZSBhIGhhY2sgdG8gYXZvaWQKKyAgICAvLyAidW5o
b2lzdGluZyIgYWRkcmVzcyBleHByZXNzaW9ucy4KKyAgICBjbGFzcyBBZGRyZXNzU2VsZWN0b3Ig
eworICAgIHB1YmxpYzoKKyAgICAgICAgQWRkcmVzc1NlbGVjdG9yKExvd2VyVG9BaXImIGxvd2Vy
KQorICAgICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAgICAgICB7CisgICAgICAgICAg
ICB0aGlzLT5yb290ID0gcm9vdDsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbWF0
Y2ggYW4gYWRkcmVzcyBleHByZXNzaW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZAor
ICAgICAgICAgICAgLy8gZXhwbGljaXRseS4KKyAgICAgICAgICAgIHJldHVybiAhbG93ZXIudmFs
dWVUb1RtcFtyb290XTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWNjZXB0Um9vdExhdGUo
VmFsdWUqKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Cisg
ICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLnZhbHVlVG9UbXBbdmFs
dWVdKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBh
Y2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFj
Y2VwdEludGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZShBcmd1
bWVudHMuLi4pIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQuY29udGFp
bnModmFsdWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJl
dHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJv
b2wgYWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8
dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShB
cmd1bWVudHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQxKFZhbHVlKiBpbmRl
eCwgVmFsdWUqIGxvZ1NjYWxlLCBWYWx1ZSogYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKGxvZ1NjYWxlLT5hc0ludCgpIDwgMCB8fCBsb2dTY2FsZS0+YXNJbnQoKSA+IDMpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0g
QXJnOjppbmRleCgKKyAgICAgICAgICAgICAgICBsb3dlci50bXAoYmFzZSksIGxvd2VyLnRtcChp
bmRleCksIDEgPDwgbG9nU2NhbGUtPmFzSW50KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MihWYWx1ZSogYmFzZSwgVmFs
dWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biB0cnlBZGRTaGlmdDEoaW5kZXgsIGxvZ1NjYWxlLCBiYXNlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGlmIChyaWdodC0+aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIC8vIFRo
aXMgcHJvZHVjdGlvbiBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkgc2luY2Ugd2UgZXhwZWN0Cisg
ICAgICAgICAgICAgICAgLy8gTG9hZChBZGQoQHgsIEBjb25zdDEpLCBvZmZzZXQgPSBjb25zdDIp
IHRvIGhhdmUgYWxyZWFkeSBiZWVuIHN0cmVuZ3RoLXJlZHVjZWQKKyAgICAgICAgICAgICAgICAv
LyB0byBMb2FkKEB4LCBvZmZzZXQgPSBjb25zdDEgKyBjb25zdDIpLgorICAgICAgICAgICAgICAg
IHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAobGVmdCksIHJpZ2h0LT5hc0lu
dDMyKCkpOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KGxvd2VyLnRtcChsZWZ0KSwg
bG93ZXIudG1wKHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGJvb2wgdHJ5RGlyZWN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgc2VsZWN0
ZWRBZGRyZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChyb290KSk7CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93ZXJUb0FpciYgbG93ZXI7
CisgICAgICAgIFZhbHVlKiByb290OworICAgICAgICBBcmcgc2VsZWN0ZWRBZGRyZXNzOworICAg
IH07CisgICAgQWRkcmVzc1NlbGVjdG9yIGFkZHJlc3NTZWxlY3RvcjsKKworICAgIC8vIEJlbG93
IGlzIHRoZSBjb2RlIGZvciBhIGxvd2VyaW5nIHNlbGVjdG9yLCBzbyB0aGF0IHdlIGNhbiBwYXNz
ICp0aGlzIHRvIHJ1bkxvd2VyaW5nTWF0Y2hlci4KKyAgICAvLyBUaGlzIHdpbGwgbWF0Y2ggY29t
cGxleCBtdWx0aS12YWx1ZSBleHByZXNzaW9ucywgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm8gc2hh
cmluZy4gRm9yIGV4YW1wbGUsCisgICAgLy8gaXQgd29uJ3QgbWF0Y2ggYSBMb2FkIHR3aWNlIGFu
ZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gZG8gdHdvIGxvYWRzIHdoZW4gdGhlIG9yaWdp
bmFsCisgICAgLy8gY29kZSBqdXN0IGRpZCBvbmUuCisgICAgCisgICAgYm9vbCBhY2NlcHRSb290
KFZhbHVlKiByb290KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyb290LCAhbG9ja2Vk
LmNvbnRhaW5zKHJvb3QpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAg
IHZvaWQgYWNjZXB0Um9vdExhdGUoVmFsdWUqKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZS4uLiBBcmd1bWVudHM+CisgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVl
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgLy8gSWYgb25lIG9mIHRo
ZSBpbnRlcm5hbCB0aGluZ3MgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZCwgdGhlbiB3ZSBkb24n
dCB3YW50IHRvIGNhdXNlCisgICAgICAgIC8vIGl0IHRvIGJlIHJlY29tcHV0ZWQgYWdhaW4uCisg
ICAgICAgIGlmICh2YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgCisgICAgICAgIC8vIFdlIHJlcXVpcmUgaW50ZXJuYWxzIHRvIGhhdmUgb25seSBv
bmUgdXNlIC0gdXMuCisgICAgICAgIGlmICh1c2VDb3VudHNbdmFsdWVdICE9IDEpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJu
YWxzKGFyZ3VtZW50cy4uLik7CisgICAgfQorICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgbG9ja2VkLmFkZCh2YWx1ZSk7CisgICAgICAgIGFj
Y2VwdEludGVybmFsc0xhdGUoYXJndW1lbnRzLi4uKTsKKyAgICB9CisgICAgdm9pZCBhY2NlcHRJ
bnRlcm5hbHNMYXRlKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgorICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4g
YXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaWYgKGxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBhY2NlcHRPcGVyYW5kcyhh
cmd1bWVudHMuLi4pOworICAgIH0KKyAgICBib29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2
b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1bWVudHMuLi4pIHsgfQorICAgIAorICAgIGJvb2wg
dHJ5TG9hZChWYWx1ZSogYWRkcmVzcykKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY3VycmVudFZh
bHVlLT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGFwcGVuZChN
b3ZlMzIsIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcyksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgaWYg
KGlzNjRCaXQoKSkgeworICAgICAgICAgICAgICAgIGFwcGVuZChNb3ZlLCBlZmZlY3RpdmVBZGRy
KGFkZHJlc3MpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNh
c2UgRG91YmxlOgorICAgICAgICAgICAgYXBwZW5kKE1vdmVEb3VibGUsIGVmZmVjdGl2ZUFkZHIo
YWRkcmVzcyksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMy
OgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdo
dCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAg
ICAgICAgIGFwcGVuZEJpbk9wPEFkZDY0LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBG
SVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlBbmQoVmFsdWUqIGxlZnQsIFZhbHVl
KiByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAgICAg
IGNhc2UgSW50MzI6CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQzMiwgQ29tbXV0YXRpdmU+
KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIElu
dDY0OgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5kNjQsIENvbW11dGF0aXZlPihsZWZ0LCBy
aWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIHRyeVN0b3JlQWRkTG9h
ZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCisgICAgeworICAgICAgICBzd2l0
Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0
dXJuIHRyeUFwcGVuZFN0b3JlQmluT3A8QWRkMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUg
dHlwZXMhCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgYm9vbCB0cnlTdG9yZUFuZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFs
dWUqKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgY2Fz
ZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRTdG9yZUJpbk9wPEFuZDMyLCBD
b21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
Ly8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5U3RvcmUoVmFsdWUqIHZhbHVl
LCBWYWx1ZSogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGFwcGVuZChtb3ZlRm9yVHlwZSh2YWx1
ZS0+dHlwZSgpKSwgdG1wKHZhbHVlKSwgZWZmZWN0aXZlQWRkcihhZGRyZXNzKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5VHJ1bmNBcmd1bWVudFJlZyhWYWx1
ZSogYXJndW1lbnRSZWcpCisgICAgeworICAgICAgICBwcm9sb2d1ZS5hcHBlbmQoSW5zdCgKKyAg
ICAgICAgICAgIE1vdmUsIGN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgIFRtcChhcmd1bWVudFJl
Zy0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKS0+YXJndW1lbnRSZWcoKSksCisgICAgICAgICAgICB0
bXAoY3VycmVudFZhbHVlKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBi
b29sIHRyeVRydW5jKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGVuZChNb3ZlLCB0
bXAodmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKworICAgIGJvb2wgdHJ5QXJndW1lbnRSZWcoKQorICAgIHsKKyAgICAgICAgcHJvbG9ndWUu
YXBwZW5kKEluc3QoCisgICAgICAgICAgICBtb3ZlRm9yVHlwZShjdXJyZW50VmFsdWUtPnR5cGUo
KSksIGN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgIFRtcChjdXJyZW50VmFsdWUtPmFzPEFyZ3Vt
ZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkpLAorICAgICAgICAgICAgdG1wKGN1cnJlbnRW
YWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5
Q29uc3QzMigpCisgICAgeworICAgICAgICBhcHBlbmQoTW92ZSwgaW1tKGN1cnJlbnRWYWx1ZSks
IHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAor
ICAgIGJvb2wgdHJ5Q29uc3Q2NCgpCisgICAgeworICAgICAgICBhcHBlbmQoTW92ZSwgQXJnOjpp
bW02NChjdXJyZW50VmFsdWUtPmFzSW50NjQoKSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5UmV0dXJuKFZhbHVlKiB2
YWx1ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodmFsdWUtPnR5cGUoKSkgeworICAgICAgICBj
YXNlIEludDMyOgorICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgYXBwZW5kKE1vdmUs
IGltbU9yVG1wKHZhbHVlKSwgVG1wKEdQUkluZm86OnJldHVyblZhbHVlR1BSKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICBhcHBlbmQoTW92
ZURvdWJsZSwgdG1wKHZhbHVlKSwgVG1wKEZQUkluZm86OnJldHVyblZhbHVlRlBSKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICAgICAgYXBwZW5kKFJldCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAK
KyAgICBQcm9jZWR1cmUmIHByb2NlZHVyZTsKKyAgICBDb2RlJiBjb2RlOworfTsKKworfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVy
ZSwgQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvY2VkdXJlLCAi
bG93ZXJUb0FpciIpOworICAgIExvd2VyVG9BaXIgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUp
OworICAgIGxvd2VyVG9BaXIucnVuKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzTG93ZXJUb0Fpci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0xvd2VyVG9BaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNMb3dlclRv
QWlyX2gKKyNkZWZpbmUgQjNMb3dlclRvQWlyX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CituYW1lc3Bh
Y2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGxvd2VycyB0aGUgY3VycmVudCBCMyBw
cm9jZWR1cmUgdG8gYW4gQWlyIGNvZGUuCisKK3ZvaWQgbG93ZXJUb0FpcihQcm9jZWR1cmUmLCBB
aXI6OkNvZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNMb3dlclRvQWlyX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5w
YXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisjIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5nTWF0Y2hlcgorCisjIFRoZXNl
IHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3RhcnRpbmcgYXQgdGhlIHRvcC4g
SXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVtZW50cyB3aGVyZXZlciBwb3Nz
aWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0aGlzIG1hdGNoZXIgaXMgYW4g
ZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2UhCisKK0xvYWQgPSBMb2FkKGFk
ZHJlc3MpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKK0FuZCA9IEJpdEFuZChsZWZ0LCByaWdo
dCkKKworU3RvcmVBZGRMb2FkID0gU3RvcmUoQWRkKGxlZnQsIHJpZ2h0KSwgYWRkcmVzcykKK1N0
b3JlQW5kTG9hZCA9IFN0b3JlKEJpdEFuZChsZWZ0LCByaWdodCksIGFkZHJlc3MpCitTdG9yZSA9
IFN0b3JlKHZhbHVlLCBhZGRyZXNzKQorCitUcnVuY0FyZ3VtZW50UmVnID0gVHJ1bmMoYXJndW1l
bnRSZWcgPSBBcmd1bWVudFJlZygpKQorVHJ1bmMgPSBUcnVuYyh2YWx1ZSkKKworQXJndW1lbnRS
ZWcgPSBBcmd1bWVudFJlZygpCisKK0NvbnN0MzIgPSBDb25zdDMyKCkKK0NvbnN0NjQgPSBDb25z
dDY0KCkKKworUmV0dXJuID0gUmV0dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1
ZTo6fk1lbW9yeVZhbHVlKCkKK3sKK30KKwordm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5w
cmludCgib2Zmc2V0ID0gIiwgbV9vZmZzZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNN
ZW1vcnlWYWx1ZV9oCisjZGVmaW5lIEIzTWVtb3J5VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKKy8vIEZJWE1FOiBBZGQgYWxpYXMgYW5hbHlzaXMgdG8gdGhlc2UgYnkgYWxsb3dpbmcg
dGhlIGNsaWVudCB0byBhc3NvY2lhdGUgYW4gaW50ZWdlciByYW5nZSB0byB0aGUKKy8vIHZhbHVl
LiBUd28gb3BlcmF0aW9ucyBtYXkgYWNjZXNzIHRoZSBzYW1lIG1lbW9yeSBpZiB0aGVpciByYW5n
ZXMgb3ZlcmxhcHMuCisvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNTM1CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHVibGljIFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisg
ICAgeworICAgICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAg
ICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBM
b2FkMTZTOgorICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAg
ICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0
b3JlRmxvYXQ6CisgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIH5NZW1vcnlWYWx1ZSgpOworCisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldDsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExv
YWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0
CisgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KKyAgICBNZW1vcnlWYWx1ZSgK
KyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAg
ICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAg
ICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJM
RUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExv
YWQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAg
ICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAg
ICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMy
KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0Ogor
ICAgICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IERvdWJsZSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUx
NjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6
CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gVm9pZCk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNl
IHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisg
ICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUo
aW5kZXgsIG9wY29kZSwgb3Bjb2RlID09IExvYWRGbG9hdCA/IERvdWJsZSA6IEludDMyLCBvcmln
aW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAg
aWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7Cisg
ICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAg
ICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICAg
ICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8g
VXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBW
YWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZh
bHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCisgICAgICAg
ICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQp
IHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIFN0b3Jl
ODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9h
dDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQor
CisgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzTWVtb3J5VmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCitu
YW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgY2FzZSBOb3A6CisgICAgICAgIG91dC5wcmludCgiTm9wIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIElkZW50aXR5OgorICAgICAgICBvdXQucHJpbnQoIklkZW50
aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0MzI6CisgICAgICAgIG91dC5w
cmludCgiQ29uc3QzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdDY0OgorICAg
ICAgICBvdXQucHJpbnQoIkNvbnN0NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29u
c3REb3VibGU6CisgICAgICAgIG91dC5wcmludCgiQ29uc3REb3VibGUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrU2xvdCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAgICAgICAgb3V0LnBy
aW50KCJBcmd1bWVudFJlZyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGcmFtZVBvaW50
ZXI6CisgICAgICAgIG91dC5wcmludCgiRnJhbWVQb2ludGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEFkZDoKKyAgICAgICAgb3V0LnByaW50KCJBZGQiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgU3ViOgorICAgICAgICBvdXQucHJpbnQoIlN1YiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBNdWw6CisgICAgICAgIG91dC5wcmludCgiTXVsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIERpdjoKKyAgICAgICAgb3V0LnByaW50KCJEaXYiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAgIG91dC5wcmludCgiQ2hpbGxEaXYi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTW9kOgorICAgICAgICBvdXQucHJpbnQoIk1v
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCaXRBbmQ6CisgICAgICAgIG91dC5wcmlu
dCgiQml0QW5kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdE9yOgorICAgICAgICBv
dXQucHJpbnQoIkJpdE9yIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdFhvcjoKKyAg
ICAgICAgb3V0LnByaW50KCJCaXRYb3IiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU2hs
OgorICAgICAgICBvdXQucHJpbnQoIlNobCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
U2hyOgorICAgICAgICBvdXQucHJpbnQoIlNTaHIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgWlNocjoKKyAgICAgICAgb3V0LnByaW50KCJaU2hyIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFNFeHQ4OgorICAgICAgICBvdXQucHJpbnQoIlNFeHQ4Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0MTYiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDMyOgorICAgICAgICBvdXQucHJpbnQoIlNFeHQzMiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBaRXh0MzI6CisgICAgICAgIG91dC5wcmludCgi
WkV4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFRydW5jOgorICAgICAgICBvdXQu
cHJpbnQoIlRydW5jIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICAg
ICAgb3V0LnByaW50KCJGUm91bmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSVRvRDoK
KyAgICAgICAgb3V0LnByaW50KCJJVG9EIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERU
b0kzMjoKKyAgICAgICAgb3V0LnByaW50KCJEVG9JMzIiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiRXF1YWwiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTm90RXF1YWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgIG91dC5wcmludCgiTGVz
c1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgICAg
IG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVz
c0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NFcXVhbCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlckVxdWFs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlOgorICAgICAgICBvdXQucHJpbnQo
IkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJlbG93OgorICAgICAgICBvdXQu
cHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFib3ZlRXF1YWw6Cisg
ICAgICAgIG91dC5wcmludCgiQWJvdmVFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBCZWxvd0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkJlbG93RXF1YWwiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4WiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFM6CisgICAgICAgIG91dC5wcmludCgiTG9h
ZDhTIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIG91dC5w
cmludCgiTG9hZDE2WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkMTZTOgorICAg
ICAgICBvdXQucHJpbnQoIkxvYWQxNlMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9h
ZEZsb2F0OgorICAgICAgICBvdXQucHJpbnQoIkxvYWRGbG9hdCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBMb2FkOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlOCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBvdXQucHJpbnQoIlN0b3Jl
MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgb3V0
LnByaW50KCJTdG9yZUZsb2F0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlOgor
ICAgICAgICBvdXQucHJpbnQoIlN0b3JlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEND
YWxsOgorICAgICAgICBvdXQucHJpbnQoIkNDYWxsIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFBhdGNocG9pbnQ6CisgICAgICAgIG91dC5wcmludCgiUGF0Y2hwb2ludCIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja0Fk
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgb3V0LnBy
aW50KCJDaGVja1N1YiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja011bDoKKyAg
ICAgICAgb3V0LnByaW50KCJDaGVja011bCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBD
aGVjazoKKyAgICAgICAgb3V0LnByaW50KCJDaGVjayIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBVcHNpbG9uOgorICAgICAgICBvdXQucHJpbnQoIlVwc2lsb24iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgUGhpOgorICAgICAgICBvdXQucHJpbnQoIlBoaSIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBKdW1wOgorICAgICAgICBvdXQucHJpbnQoIkp1bXAiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQnJhbmNoOgorICAgICAgICBvdXQucHJpbnQoIkJyYW5jaCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgIG91dC5wcmludCgi
U3dpdGNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJldHVybjoKKyAgICAgICAgb3V0
LnByaW50KCJSZXR1cm4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgT29wczoKKyAgICAg
ICAgb3V0LnByaW50KCJPb3BzIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNvZGVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gT3Bjb2RlIDogaW50MTZf
dCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVybnMgVm9pZCwgdXNlZnVsIGZvciB3aGVuIHlv
dSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAgIE5vcCwKKyAgICAKKyAgICAvLyBQb2x5bW9y
cGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgSWRlbnRpdHks
CisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUgQ29uc3RWYWx1ZSogY2xhc3Nlcy4gQ29uc3Rh
bnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3csIHNvIHRoYXQgd2UgY2FuCisgICAgLy8gcmVh
c29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0cnVjdCB0aGVtLiBMYXJnZSBjb25zdGFudHMg
YXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAgQ29uc3QzMiwKKyAgICBDb25zdDY0LAorICAg
IENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1hZ2ljYWwgc3RhY2sgc2xvdC4gVGhpcyBpcyB2
aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0gcmVnYXJkbGVzcyBv
ZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LiBFYWNoIGluc3RhbmNl
IG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBkaXNqb2ludCByYW5nZSBvZgorICAgIC8vIHN0
YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFzcy4KKyAgICBTdGFja1Nsb3Qs
CisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdpc3Rlci4gVGhpcyBpcyB2aWV3ZWQg
YXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0KKyAgICAvLyByZWdhcmRsZXNz
IG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LCBhbmQgdGhlIGNvbXBpbGVyIHRh
a2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAgICAvLyBkb24ndCBjbG9iYmVyIHRoZSB2YWx1
ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNhbGxzIChlaXRoZXIgYnkgc2F2aW5nIHRoZSBh
cmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBvciBwcmVzZXJ2aW5nIGl0IGluIGEgY2FsbGVl
LXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3VtZW50UmVnVmFsdWUgY2xhc3MuIFRoZSByZXR1
cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2ludGVyKCkgKGZvciBHUFJzKSBvciBEb3VibGUg
KGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywKKworICAgIC8vIFRoZSBmcmFtZSBwb2ludGVy
LiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGluIGNvbnRyb2wgZmxvdyBidXQgaXQgd2lsbCBh
bHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUgcG9pbnRlciwgd2l0aCBhIGNhdmVhdDogaWYg
b3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1lIHBvaW50ZXIgdGVtcG9yYXJpbHkgZm9yIHNv
bWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBGcmFtZVBvaW50ZXIgaW50cmluc2ljIHdpbGwg
cmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVyICpzaG91bGQqIGJlIG5vdAorICAgIC8vIHdo
ZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93LgorICAgIEZyYW1lUG9pbnRlciwKKworICAg
IC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIEFk
ZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERpdiwKKworICAgIC8vIEludGVnZXIgbWF0aC4K
KyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFwIGV2ZXIsIGJlaGF2ZXMgbGlrZSBKUyAoeC95
KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisgICAgQml0T3IsCisgICAgQml0WG9yLAorICAg
IFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisKKyAgICAvLyBDYXN0cyBhbmQgc3VjaC4KKyAg
ICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBTRXh0OCwKKyAgICBTRXh0MTYsCisg
ICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMgSW50NjQ6CisgICAgU0V4dDMyLAorICAgIFpF
eHQzMiwKKyAgICAvLyBUYWtlcyBJbnQ2NCBhbmQgcmV0dXJucyBJbnQzMjoKKyAgICBUcnVuYywK
KyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgRlJvdW5kLAorICAgIC8vIFRh
a2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgorICAgIElUb0QsCisgICAgLy8gVGFrZXMgRG91
YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERUb0kzMiwKKworICAgIC8vIFBvbHltb3JwaGlj
IGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gUmV0dXJucyBpbnQzMiAw
IG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8vIGlzIGp1c3QgRXF1YWwoeCwgMCkuCisgICAg
RXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVzc1RoYW4sCisgICAgR3JlYXRlclRoYW4sCisg
ICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVhbCwKKworICAgIC8vIEludGVnZXIgY29tcGFy
aXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgorICAgIEFib3ZlLAorICAgIEJlbG93LAorICAg
IEFib3ZlRXF1YWwsCisgICAgQmVsb3dFcXVhbCwKKworICAgIC8vIE1lbW9yeSBsb2Fkcy4gT3Bj
b2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQgdGhlIGxvYWRlZCB0eXBlLiBUaGVzZSB1c2Ug
TWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0dXJuIEludDMyOgorICAgIExvYWQ4WiwKKyAg
ICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBMb2FkMTZTLAorICAgIC8vIFRoaXMgcmV0dXJu
cyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAgIC8vIFRoaXMgcmV0dXJuIHdoYXRldmVyIHRo
ZSByZXR1cm4gdHlwZSBpczoKKyAgICBMb2FkLAorCisgICAgLy8gTWVtb3J5IHN0b3Jlcy4gT3Bj
b2RlIGluZGljYXRlcyBob3cgdGhlIHZhbHVlIGlzIHN0b3JlZC4gVGhlc2UgdXNlIE1lbW9yeVZh
bHVlLgorICAgIC8vIFRoZXNlIHRha2UgYW4gSW50MzIgdmFsdWU6CisgICAgU3RvcmU4LAorICAg
IFN0b3JlMTYsCisgICAgLy8gVGhpcyB0YWtlcyBhIERvdWJsZSB2YWx1ZToKKyAgICBTdG9yZUZs
b2F0LAorICAgIC8vIFRoaXMgaXMgYSBwb2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0
LCBhbmQgRG91YmxlOgorICAgIFN0b3JlLAorCisgICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgb3Jk
aW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1c2luZyB0aGUgc3lzdGVtIEMgY2FsbGluZyBjb252ZW50
aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0aGF0IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB1c2lu
ZyB0aGUgcmlnaHQgdHlwZXMuCisgICAgQ0NhbGwsCisKKyAgICAvLyBUaGlzIGlzIGEgcGF0Y2hw
b2ludC4gVXNlIHRoZSBQYXRjaHBvaW50VmFsdWUgY2xhc3MuIFRoaXMgaXMgdmlld2VkIGFzIGJl
aGF2aW5nIGxpa2UgYSBjYWxsLAorICAgIC8vIGJ1dCBvbmx5IGVtaXRzIGNvZGUgdmlhIGEgY29k
ZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBjb2RlIGlu
bGluZS4KKyAgICAvLyBZb3UgY2FuIHBhc3MgYSBzdGFja21hcCBhbG9uZyB3aXRoIGNvbnN0cmFp
bnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFwIGFyZ3VtZW50IG11c3QgYmUgcGFzc2VkLgorICAgIC8v
IEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgaW4gc29t
ZSByZWdpc3RlciBhbmQgaXQncyBsZWdhbCB0byByZXF1ZXN0CisgICAgLy8gdGhhdCBhIHN0YWNr
bWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUgb2Zmc2V0IGZyb20gdGhlIHRvcCBvZiB0aGUgYXJndW1l
bnQgcGFzc2luZyBhcmVhIG9uIHRoZQorICAgIC8vIHN0YWNrLgorICAgIFBhdGNocG9pbnQsCisK
KyAgICAvLyBDaGVja2VkIG1hdGguIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBhIFBh
dGNocG9pbnQsIHRoaXMgdGFrZXMgYSBjb2RlIGdlbmVyYXRpb24KKyAgICAvLyBjYWxsYmFjay4g
VGhhdCBjYWxsYmFjayBnZXRzIHRvIGVtaXQgc29tZSBjb2RlIGFmdGVyIHRoZSBlcGlsb2d1ZSwg
YW5kIGdldHMgdG8gbGluayB0aGUganVtcAorICAgIC8vIGZyb20gdGhlIGNoZWNrLCBhbmQgdGhl
IGNob2ljZSBvZiByZWdpc3RlcnMuIFlvdSBhbHNvIGdldCB0byBzdXBwbHkgYSBzdGFja21hcC4g
Tm90ZSB0aGF0IHlvdQorICAgIC8vIGFyZSBub3QgYWxsb3dlZCB0byBqdW1wIGJhY2sgaW50byB0
aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlvdXIgc2xvdyBwYXRoLCBzaW5jZSB0aGUgY29tcGlsZXIK
KyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0IHRoZSBleGVjdXRpb24gb2YgdGhlc2UgaW5zdHJ1Y3Rp
b25zIHByb3ZlcyB0aGF0IG92ZXJmbG93IGRpZG4ndCBoYXBwZW4uIEZvcgorICAgIC8vIGV4YW1w
bGUsIGlmIHlvdSBoYXZlIHR3byBDaGVja0FkZCdzOgorICAgIC8vCisgICAgLy8gYSA9IENoZWNr
QWRkKHgsIHkpCisgICAgLy8gYiA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8KKyAgICAvLyBUaGVu
IGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRoaXMgdG86CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tB
ZGQoeCwgeSkKKyAgICAvLyBiID0gSWRlbnRpdHkoYSkKKyAgICAvLworICAgIC8vIFRoaXMgaXMg
dmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUgY2FsbGJhY2tzIHVzZWQgYnkgdGhlIHR3byBDaGVja0Fk
ZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVyZW50CisgICAgLy8gY2FsbGJhY2tzLiBZZXQsIHRoaXMg
dHJhbnNmb3JtYXRpb24gaXMgdmFsaWQgZXZlbiBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgYmVjYXVz
ZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBhZnRlciB0aGUgZmlyc3QgQ2hlY2tBZGQgZXhlY3V0ZXMs
IHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291bGQgbm90IGhhdmUgcG9zc2libHkgdGFrZW4gc2xvdwor
ICAgIC8vIHBhdGguIFRoZXJlZm9yZSwgdGhlIHNlY29uZCBDaGVja0FkZCdzIGNhbGxiYWNrIGlz
IGlycmVsZXZhbnQuCisgICAgQ2hlY2tBZGQsCisgICAgQ2hlY2tTdWIsCisgICAgQ2hlY2tNdWws
CisKKyAgICAvLyBDaGVjayB0aGF0IHNpZGUtZXhpdHMuIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFz
cy4gTGlrZSBDaGVja0FkZCBhbmQgZnJpZW5kcywgdGhpcyBoYXMgYQorICAgIC8vIHN0YWNrbWFw
IHdpdGggYSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBUaGlzIHRha2VzIGFuIEludDMyIGFyZ3VtZW50
IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwgd2l0aAorICAgIC8vIGZ1bGwgYnJhbmNoIGZ1c2lvbiBp
biB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1wcyB0byB0aGUgZ2Vu
ZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBhdGguCisgICAgQ2hlY2ssCisKKyAgICAvLyBTU0Egc3Vw
cG9ydCwgaW4gdGhlIHN0eWxlIG9mIERGRyBTU0EuCisgICAgVXBzaWxvbiwgLy8gVGhpcyB1c2Vz
IHRoZSBVcHNpbG9uVmFsdWUgY2xhc3MuCisgICAgUGhpLAorCisgICAgLy8gSnVtcC4gVXNlcyB0
aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIEp1bXAsCisgICAgCisgICAgLy8gUG9seW1vcnBo
aWMgYnJhbmNoLCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4gQnJhbmNoZXMgaWYgbm90IGVx
dWFsIHRvIHplcm8uIFVzZXMgdGhlCisgICAgLy8gQ29udHJvbFZhbHVlIGNsYXNzLCB3aXRoIHRo
ZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWluZyB0aGUgdHJ1ZSBzdWNjZXNzb3IuCisgICAgQnJhbmNo
LAorCisgICAgLy8gU3dpdGNoLiBTd2l0Y2hlcyBvdmVyIGVpdGhlciBJbnQzMiBvciBJbnQ2NC4g
VXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xhc3MuCisgICAgU3dpdGNoLAorCisgICAgLy8gUmV0dXJu
LiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJlcyBkb24ndCBrbm93IHRoZWlyIHJldHVybiB0eXBlLCBz
byB0aGlzIGNhbiBqdXN0IHJldHVybiBhbnkKKyAgICAvLyB0eXBlLiBVc2VzIHRoZSBDb250cm9s
VmFsdWUgY2xhc3MuCisgICAgUmV0dXJuLAorCisgICAgLy8gVGhpcyBpcyBhIHRlcm1pbmFsIHRo
YXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2lsbCBuZXZlciBnZXQgaGVyZS4gVXNlcyB0aGUgQ29udHJv
bFZhbHVlIGNsYXNzLgorICAgIE9vcHMKK307CisKK2lubGluZSBib29sIGlzQ2hlY2tNYXRoKE9w
Y29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIENoZWNrQWRk
OgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmlu
dFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6T3Bj
b2RlKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNPcGNvZGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmln
aW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzT3JpZ2luLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordm9pZCBPcmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQoIk9yaWdpbigiLCBSYXdQb2ludGVyKG1fZGF0YSksICIpIik7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzT3JpZ2luX2gKKyNkZWZpbmUgQjNPcmlnaW5faAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworLy8gV2hvZXZlciBnZW5lcmF0ZXMgQjNJUiBjYW4gY2hvb3NlIHRv
IHB1dCBvcmlnaW5zIG9uIHZhbHVlcy4gV2hlbiB5b3UgZG8gdGhpcywgQjMgd2lsbCBiZSBhYmxl
IHRvCisvLyBhY2NvdW50LCBkb3duIHRvIHRoZSBtYWNoaW5lIGNvZGUsIHdoaWNoIGluc3RydWN0
aW9uIGNvcnJlc3BvbmRzIHRvIHdoaWNoIG9yaWdpbi4gQjMKKy8vIHRyYW5zZm9ybWF0aW9ucyBt
dXN0IHByZXNlcnZlIE9yaWdpbnMgY2FyZWZ1bGx5LiBJdCdzIGFuIGVycm9yIHRvIHdyaXRlIGEg
dHJhbnNmb3JtYXRpb24gdGhhdAorLy8gZWl0aGVyIGRyb3BzIE9yaWdpbnMgb3IgbGllcyBhYm91
dCB0aGVtLgorY2xhc3MgT3JpZ2luIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcmlnaW4oY29u
c3Qgdm9pZCogZGF0YSA9IG51bGxwdHIpCisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgewor
ICAgIH0KKworICAgIGNvbnN0IHZvaWQqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAg
ICBjb25zdCB2b2lkKiBtX2RhdGE7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM09yaWdpbl9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3Bl
Y2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzUGF0Y2hwb2ludFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVz
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3BhY2Ug
QWlyOworCitQYXRjaHBvaW50U3BlY2lhbDo6UGF0Y2hwb2ludFNwZWNpYWwoKQoreworfQorCitQ
YXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKCkKK3sKK30KKwordm9pZCBQYXRj
aHBvaW50U3BlY2lhbDo6Zm9yRWFjaEFyZygKKyAgICBJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRM
YW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaWYgKGluc3Qu
b3JpZ2luLT50eXBlKCkgPT0gVm9pZCkgeworICAgICAgICBmb3JFYWNoQXJnSW1wbCgwLCAxLCBp
bnN0LCBjYWxsYmFjayk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjYWxsYmFjayhp
bnN0LmFyZ3NbMV0sIEFyZzo6RGVmLCBpbnN0Lm9yaWdpbi0+YWlyVHlwZSgpKTsKKyAgICBmb3JF
YWNoQXJnSW1wbCgwLCAyLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgUGF0Y2hwb2ludFNw
ZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUo
KSA9PSBWb2lkKQorICAgICAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMSwgaW5zdCk7CisKKyAg
ICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBp
ZiAoaW5zdC5hcmdzWzFdLmtpbmQoKSAhPSBBcmc6OlRtcCkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIGlmICghaW5zdC5hcmdzWzFdLmlzVHlwZShpbnN0Lm9yaWdpbi0+YWlyVHlwZSgpKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGlzVmFsaWRJbXBsKDAsIDIsIGlu
c3QpOworfQorCitib29sIFBhdGNocG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiBpbnN0
LCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBW
b2lkKQorICAgICAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKDAsIDEsIGluc3QsIGFyZ0luZGV4
KTsKKworICAgIGlmIChhcmdJbmRleCA9PSAxKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKDAsIDIsIGluc3QsIGFyZ0luZGV4KTsKK30KKworQ0Nh
bGxIZWxwZXJzOjpKdW1wIFBhdGNocG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSgKKyAgICBJbnN0JiBp
bnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpCit7Cisg
ICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0g
dmFsdWUtPnN0YWNrbWFwKCk7CisgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgIFZlY3RvcjxW
YWx1ZVJlcD4gcmVwczsKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSAxOworICAgIGlmIChpbnN0Lm9y
aWdpbi0+dHlwZSgpICE9IFZvaWQpCisgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29u
dGV4dC5jb2RlLCBpbnN0LmFyZ3Nbb2Zmc2V0KytdKSk7CisgICAgYXBwZW5kUmVwc0ltcGwoY29u
dGV4dCwgb2Zmc2V0LCBpbnN0LCByZXBzKTsKKyAgICAKKyAgICBTdGFja21hcDo6R2VuZXJhdGlv
blBhcmFtcyBwYXJhbXM7CisgICAgcGFyYW1zLnZhbHVlID0gdmFsdWU7CisgICAgcGFyYW1zLnN0
YWNrbWFwID0gc3RhY2ttYXA7CisgICAgcGFyYW1zLnJlcHMgPSByZXBzOworICAgIHBhcmFtcy51
c2VkUmVnaXN0ZXJzID0gc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVyczsKKworICAgIHN0YWNrbWFw
LT5tX2dlbmVyYXRvci0+cnVuKGppdCwgcGFyYW1zKTsKKworICAgIHJldHVybiBDQ2FsbEhlbHBl
cnM6Okp1bXAoKTsKK30KKwordm9pZCBQYXRjaHBvaW50U3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIlBhdGNocG9pbnQiKTsKK30KKwor
dm9pZCBQYXRjaHBvaW50U3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KCJMb3dlcmVkIEIzOjpQYXRjaHBvaW50VmFsdWUuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRT
cGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUGF0Y2hwb2ludFNwZWNp
YWxfaAorI2RlZmluZSBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1N0YWNrbWFwU3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIHNwZWNpYWwgdGhhdCByZWNvZ25pemVzIHRoYXQg
dGhlcmUgYXJlIHR3byB1c2VzIG9mIFBhdGNocG9pbnQ6IFZvaWQgYW5kIGFuZCBub24tVm9pZC4K
Ky8vIEluIHRoZSBWb2lkIGNhc2UsIHRoZSBzeW50YXggb2YgdGhlIEFpciBQYXRjaCBpbnN0cnVj
dGlvbiBpczoKKy8vCisvLyAgICAgUGF0Y2ggJnBhdGNocG9pbnQsIGFyZ3MuLi4KKy8vCisvLyBX
aGVyZSAiYXJncy4uLiIgYXJlIHRoZSBsb3dlcmVkIGFyZ3VtZW50cyB0byB0aGUgUGF0Y2hwb2lu
dCBpbnN0cnVjdGlvbi4gSW4gdGhlIG5vbi1Wb2lkIGNhc2UKKy8vIHdlIHdpbGwgaGF2ZToKKy8v
CisvLyAgICAgUGF0Y2ggJnBhdGNocG9pbnQsIHJlc3VsdCwgYXJncy4uLgorCitjbGFzcyBQYXRj
aHBvaW50U3BlY2lhbCA6IHB1YmxpYyBTdGFja21hcFNwZWNpYWwgeworcHVibGljOgorICAgIFBh
dGNocG9pbnRTcGVjaWFsKCk7CisgICAgdmlydHVhbCB+UGF0Y2hwb2ludFNwZWNpYWwoKTsKKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhBaXI6Okluc3QmLCBjb25zdCBTY29wZWRM
YW1iZGE8QWlyOjpJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBp
c1ZhbGlkKEFpcjo6SW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2soQWlyOjpJ
bnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworCisgICAgLy8gTk9URTogdGhlIGdl
bmVyYXRlIG1ldGhvZCB3aWxsIGdlbmVyYXRlIHRoZSBoaWRkZW4gYnJhbmNoIGFuZCB0aGVuIHJl
Z2lzdGVyIGEgTGF0ZVBhdGggdGhhdAorICAgIC8vIGdlbmVyYXRlcyB0aGUgc3RhY2ttYXAuIFN1
cGVyIGNyYXp5IGR1ZGUhCisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoQWlyOjpJ
bnN0JiwgQ0NhbGxIZWxwZXJzJiwgQWlyOjpHZW5lcmF0aW9uQ29udGV4dCYpIG92ZXJyaWRlOwor
CisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIHZv
aWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRWYWx1ZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K1BhdGNocG9pbnRWYWx1ZTo6flBhdGNocG9pbnRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgUGF0Y2hw
b2ludFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgic3RhY2ttYXAgPSAiLCBzdGFja21hcCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzUGF0Y2hwb2ludFZhbHVlX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50VmFsdWVf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBQYXRjaHBvaW50VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFBhdGNocG9pbnQ7
IH0KKworICAgIH5QYXRjaHBvaW50VmFsdWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOwor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBQYXRj
aHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBhdGNo
cG9pbnQsIHR5cGUsIG9yaWdpbiwgY2hpbGRyZW4pCisgICAgeworICAgIH0KK307CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzUGF0Y2hwb2ludFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUGhhc2VTY29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVk
ZSAiQjNWYWxpZGF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9EYXRhTG9nLmg+CisjaW5jbHVkZSA8d3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitQaGFzZVNjb3BlOjpQaGFzZVNjb3BlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBjb25zdCBjaGFy
KiBuYW1lKQorICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICwgbV9uYW1lKG5hbWUp
Cit7CisgICAgaWYgKHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxv
ZygiQjMgYWZ0ZXIgIiwgcHJvY2VkdXJlLmxhc3RQaGFzZU5hbWUoKSwgIiwgYmVmb3JlICIsIG5h
bWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIGlm
IChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NT
dHJpbmcocHJvY2VkdXJlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAg
IG1fcHJvY2VkdXJlLnNldExhc3RQaGFzZU5hbWUobV9uYW1lKTsKKyAgICBpZiAoc2hvdWxkVmFs
aWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKG1fcHJvY2VkdXJlLCBtX2R1
bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhh
c2VTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNl
U2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNl
U2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQaGFzZVNjb3BlX2gKKyNk
ZWZpbmUgQjNQaGFzZVNjb3BlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFBo
YXNlU2NvcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBoYXNlU2NvcGUpOworcHVibGlj
OgorICAgIFBoYXNlU2NvcGUoUHJvY2VkdXJlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBo
YXNlU2NvcGUoKTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBQcm9j
ZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICBDU3RyaW5n
IG1fZHVtcEJlZm9yZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUGhhc2VTY29wZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw5NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5j
bHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJlKCkK
KyAgICA6IG1fbGFzdFBoYXNlTmFtZSgiaW5pdGlhbCIpCit7Cit9CisKK1Byb2NlZHVyZTo6flBy
b2NlZHVyZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soZG91Ymxl
IGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3
IEJhc2ljQmxvY2sobV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2Nr
KiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJs
b2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRo
aXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworfQorCitWZWN0b3I8QmFz
aWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcigpCit7CisgICAgVmVjdG9yPEJh
c2ljQmxvY2sqPiByZXN1bHQ7CisgICAgQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3Jr
bGlzdC5wdXNoKGF0KDApKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlz
dC5wb3AoKSkgeworICAgICAgICByZXN1bHQuYXBwZW5kKGJsb2NrKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBpID0gYmxvY2stPm51bVN1Y2Nlc3NvcnMoKTsgaS0tOykKKyAgICAgICAgICAgIHdv
cmtsaXN0LnB1c2goYmxvY2stPnN1Y2Nlc3NvckJsb2NrKGkpKTsKKyAgICB9CisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUG9z
dE9yZGVyKCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IHJlc3VsdDsKKyAgICBQb3N0T3Jk
ZXJCbG9ja1dvcmtsaXN0IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goYXQoMCkpOworICAg
IHdoaWxlIChCbG9ja1dpdGhPcmRlciBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAg
c3dpdGNoIChpdGVtLm9yZGVyKSB7CisgICAgICAgIGNhc2UgVmlzaXRPcmRlcjo6UHJlOgorICAg
ICAgICAgICAgd29ya2xpc3QucHVzaFBvc3QoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IGl0ZW0ubm9kZS0+bnVtU3VjY2Vzc29ycygpOyBpLS07KQorICAgICAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2goaXRlbS5ub2RlLT5zdWNjZXNzb3JCbG9jayhpKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWaXNpdE9yZGVyOjpQb3N0OgorICAgICAgICAg
ICAgcmVzdWx0LmFwcGVuZChpdGVtLm5vZGUpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzUHJvY2Vk
dXJlX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIlB1cmVOYU4uaCIKKyNpbmNsdWRlIDx3dGYvQmFnLmg+CisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgVmFsdWU7CisKK2Ns
YXNzIFByb2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUHJvY2VkdXJlKTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKworICAgIEpTX0VYUE9SVF9QUklW
QVRFIFByb2NlZHVyZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIH5Qcm9jZWR1cmUoKTsKKwor
ICAgIEpTX0VYUE9SVF9QUklWQVRFIEJhc2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVu
Y3kgPSBQTmFOKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOworCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAg
QmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2lu
ZGV4XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShu
dWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBp
bmRleCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAg
ICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRv
ciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4
dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNp
Z25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9j
ZWR1cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAg
ICBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAgICAg
ICAgY29uc3QgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBy
ZU9yZGVyKCk7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRlcigpOwor
CisgICAgY2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1
ZXNDb2xsZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAgOiBt
X3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNs
YXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQor
ICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAgICAs
IG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aXRlcmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAg
ICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAgICAs
IG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIFZhbHVlKiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX3Byb2NlZHVyZS0+bV92YWx1ZXNbbV9pbmRleF0uZ2V0KCk7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0
aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
ICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAg
ICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisKKyAgICAgICAgICAgIGNvbnN0IFByb2NlZHVy
ZSogbV9wcm9jZWR1cmU7CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9
OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9w
cm9jZWR1cmUsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKG1fcHJvY2VkdXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9CisKKyAg
ICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVz
LnNpemUoKTsgfQorICAgICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBWYWx1ZSog
b3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Cisg
ICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9jZWR1
cmU7CisgICAgfTsKKworICAgIFZhbHVlc0NvbGxlY3Rpb24gdmFsdWVzKCkgY29uc3QgeyByZXR1
cm4gVmFsdWVzQ29sbGVjdGlvbigqdGhpcyk7IH0KKworICAgIC8vIFRoZSBuYW1lIGhhcyB0byBi
ZSBhIHN0cmluZyBsaXRlcmFsLCBzaW5jZSB3ZSBkb24ndCBkbyBhbnkgbWVtb3J5IG1hbmFnZW1l
bnQgZm9yIHRoZSBzdHJpbmcuCisgICAgdm9pZCBzZXRMYXN0UGhhc2VOYW1lKGNvbnN0IGNoYXIq
IG5hbWUpCisgICAgeworICAgICAgICBtX2xhc3RQaGFzZU5hbWUgPSBuYW1lOworICAgIH0KKwor
ICAgIGNvbnN0IGNoYXIqIGxhc3RQaGFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQaGFz
ZU5hbWU7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxv
Y2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlPj4gbV92YWx1
ZXM7CisgICAgY29uc3QgY2hhciogbV9sYXN0UGhhc2VOYW1lOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQ
cm9jZWR1cmVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJ
bmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
UHJvY2VkdXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Byb2Nl
ZHVyZUlubGluZXNfaAorI2RlZmluZSBCM1Byb2NlZHVyZUlubGluZXNfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzUHJvY2Vk
dXJlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlVHlwZSogUHJvY2Vk
dXJlOjphZGQoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8
VmFsdWVUeXBlPiB2YWx1ZShuZXcgVmFsdWVUeXBlKG1fdmFsdWVzLnNpemUoKSwgYXJndW1lbnRz
Li4uKSk7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICBtX3ZhbHVl
cy5hcHBlbmQoV1RGOjptb3ZlKHZhbHVlKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNQcm9jZWR1cmVJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgU3RhY2tTbG90S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgorICAgICAgICBvdXQucHJpbnQo
IkxvY2tlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9u
eW1vdXM6CisgICAgICAgIG91dC5wcmludCgiQW5vbnltb3VzIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitl
bnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tlZCBzdGFj
ayBzbG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ug
d2UgaW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3Vz
LiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0
YWNrCisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFjayBzbG90
cyBjb3VsZCBzaGFyZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNsb3RzLCBwcm92aWRlZCB0aGF0
IHRoZXkgYXJlbid0IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0aW1lLiBUaGUgY29tcGlsZXIg
c3RpbGwgaGFzIHRvIGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2UgdGhlc2UgY2FuIGJlIGVzY2Fw
ZWQKKyAgICAvLyBleHBsaWNpdGx5IGluIElSLgorICAgIEFub255bW91cworCisgICAgLy8gRklY
TUU6IFdlIHNob3VsZCBhZGQgYSB0aGlyZCBtb2RlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBzdGFj
ayBzbG90IHdpbGwgYmUgcmVhZCBhc3luY2hyb25vdXNseQorICAgIC8vIGFzIHdpdGggTG9ja2Vk
LCBidXQgbmV2ZXIgd3JpdHRlbiB0byBhc3luY2hyb25vdXNseS4gVGhlbiwgQWlyIGNvdWxkIG9w
dGltaXplIHNwaWxsaW5nIGFuZAorICAgIC8vIGZpbGxpbmcgYnkgdHJhY2tpbmcgd2hldGhlciB0
aGUgdmFsdWUgaGFkIGJlZW4gc3RvcmVkIHRvIGEgcmVhZC1vbmx5IGxvY2tlZCBzbG90LiBJZiBp
dCBoYWQsCisgICAgLy8gdGhlbiB3ZSBjYW4gcmVmaWxsIGZyb20gdGhhdCBzbG90LgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1ODcKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRT
dHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNr
U2xvdEtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkKK3sKK30KKwordm9pZCBTdGFj
a1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2luZCA9ICIsIG1fa2luZCk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90VmFsdWVfaAorI2RlZmlu
ZSBCM1N0YWNrU2xvdFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsKK2NsYXNzIFN0YWNrU2xvdDsKK30g
Ly8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVy
biBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tTbG90VmFsdWUoKTsKKworICAg
IHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0
YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgLy8gVGhp
cyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRpb24uIEJ1dCwgeW91IGNhbiB0
b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAgIC8vIHNldCBtZXRob2QgdG8gZG8g
dGhhdC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNl
dEZyb21GUDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgbWVhbmluZ2xlc3MgdW5sZXNz
IHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRw
dHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBBaXI6OlN0YWNrU2xvdDsKKyAg
ICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tTbG90VmFsdWUodW5zaWduZWQg
aW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtp
bmQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFN0YWNrU2xvdCwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgICAgICwgbV9raW5kKGtp
bmQpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAoMCkKKyAgICB7CisgICAgfQorCisgICAgdW5z
aWduZWQgbV9ieXRlU2l6ZTsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBpbnRwdHJf
dCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90VmFsdWVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N0YWNrbWFwOjpTdGFja21hcCgpCit7Cit9CisK
K1N0YWNrbWFwOjp+U3RhY2ttYXAoKQoreworfQorCit2b2lkIFN0YWNrbWFwOjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KAorICAgICAgICAie3JlcHMgPSAi
LCBsaXN0RHVtcChtX3JlcHMpLCAiLCBnZW5lcmF0b3IgPSAiLCBSYXdQb2ludGVyKG1fZ2VuZXJh
dG9yLmdldCgpKSwKKyAgICAgICAgIiwgY2xvYmJlcmVkID0gIiwgbV9jbG9iYmVyZWQsICIsIHVz
ZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDExMyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNrbWFwX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisj
aW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ2hlY2tTcGVjaWFsOworY2xh
c3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFN0YWNrbWFwIHsKK3B1
YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7CisgICAgICAgIC8vIFRoaXMgaXMg
dGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAgICAgICBWYWx1ZSogdmFsdWU7
CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFN0YWNrbWFwKiBz
dGFja21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgYWN0dWFsIHZhbHVlIHJl
cHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgorICAgICAgICBWZWN0b3I8VmFsdWVSZXA+
IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIHJlZ2lzdGVycyB0aGF0IHdl
cmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVyczsKKyAgICB9OworICAg
IAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihDQ2FsbEhlbHBlcnMmLCBjb25z
dCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPEdlbmVyYXRvckZ1
bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3RhY2ttYXAoKTsKKyAgICB+U3RhY2ttYXAo
KTsKKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0aGUgVmFsdWUgdGhhdCB1c2Vz
IHRoaXMgU3RhY2ttYXAuIEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50IHRoYXQKKyAgICAvLyByZXR1
cm5zIGEgdmFsdWUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgcmVzdWx0IHZhbHVlLiBJbiBh
bGwgb3RoZXIgY2FzZXMsIGluZGV4IHplcm8gcmVmZXJzCisgICAgLy8gdG8gdGhlIGZpcnN0IGFy
Z3VtZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1bWVudCBpcyBub3QgY29uc3Ry
YWluYWJsZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gaW4gYSBDaGVja0FkZCB2YWx1ZSwgaXQgd291
bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBhbmQgMS4gSW4gYSBDaGVjayB2
YWx1ZSwgaXQKKyAgICAvLyB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kZXggMC4g
QnV0LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNhbGxlZCwgeW91IGNhbgorICAg
IC8vIGRlcGVuZCBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNlcyBiZWluZyBmaWxsZWQgaW4u
CisgICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNvbnN0IFZhbHVlUmVwJiByZXAp
CisgICAgeworICAgICAgICBpZiAoaW5kZXggKyAxID49IG1fcmVwcy5zaXplKCkpCisgICAgICAg
ICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBtX3JlcHNbaW5kZXhdID0gcmVw
OworICAgIH0KKworICAgIHZvaWQgY2xvYmJlcihjb25zdCBSZWdpc3RlclNldCYgc2V0KQorICAg
IHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0KTsKKyAgICB9CisKKyAgICBjb25zdCBS
ZWdpc3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyByZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKwor
ICAgIHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRvcikKKyAgICB7
CisgICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9yOworICAgIH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRHZW5lcmF0b3IoY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gY3JlYXRlU2hhcmVkVGFzazxH
ZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDaGVja1Nw
ZWNpYWw7CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9pbnRTcGVjaWFsOworICAgIGZyaWVuZCBj
bGFzcyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAgVmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7
CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9j
bG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOyAvLyBTdGFja21hcHMg
Y291bGQgYmUgZnVydGhlciBkdXBsaWNhdGVkIGJ5IEFpciwgYnV0IHRoYXQncyB1bmxpa2VseSwg
c28gd2UganVzdCBtZXJnZSB0aGUgdXNlZCByZWdpc3RlcnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8g
aGFwcGVuLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja21hcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXBT
cGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFj
ZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKCkKK3sKK30KKworU3Rh
Y2ttYXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVjaWFsKCkKK3sKK30KKwordm9pZCBTdGFja21hcFNw
ZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYgaW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAg
U3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICAvLyBGSVhNRTog
SWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBTdGFja21hcFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVk
LCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVzZWQKKyAgICAvLyByZWdpc3RlciBzZXRzIGZyb20g
bXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJlbnRseSB3b24ndCBoYXBwZW4gc2luY2UgQWlyIGRv
ZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8gb3IgdGhpbmdzIGxpa2UgdGhhdC4gQnV0IG1heWJl
IGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBwcm9ibGVtLgorICAgIHN0YWNrbWFwLT5tX3VzZWRS
ZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVycyk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBT
dGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0JiBpbnN0KQoreworICAgIFZh
bHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVl
LT5zdGFja21hcCgpOworCisgICAgcmV0dXJuIHN0YWNrbWFwLT5jbG9iYmVyZWQoKTsKK30KKwor
dm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJbXBsKAorICAgIHVuc2lnbmVkIG51bUln
bm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3Qs
IGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sK
KyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIC8vIENoZWNrIHRoYXQgaW5z
YW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUo
KSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJlbigpLnNp
emUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSAt
IG51bUlnbm9yZWRBaXJBcmdzID09IHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9y
ZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Mu
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIEFyZyYgYXJnID0gaW5z
dC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFs
dWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7CisKKyAgICAgICAgY2FsbGJhY2soYXJn
LCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpKTsKKyAgICB9Cit9
CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlkSW1wbCgKKyAgICB1bnNpZ25lZCBudW1J
Z25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0
KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgLy8gQ2hlY2sgdGhh
dCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VSVChpbnN0LmFyZ3Mu
c2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFsdWUtPmNoaWxkcmVu
KCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFw
ID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgLy8g
Rm9yIHRoZSBJbnN0IHRvIGJlIHZhbGlkLCBpdCBuZWVkcyB0byBoYXZlIHRoZSByaWdodCBudW1i
ZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFp
ckFyZ3MgIT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncykKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUmVnYXJkbGVzcyBvZiBjb25zdHJhaW50cywg
c3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1aXJlbWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50
cy4gRm9yCisgICAgLy8gZXhhbXBsZSwgeW91IGNhbid0IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFk
ZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29uZGl0aW9ucyBhcyB3ZWxsIGFzIHRoZQorICAg
IC8vIGFyZ3VtZW50IHR5cGVzLgorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbnN0LmFy
Z3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7CisgICAgICAgIFZhbHVlKiBjaGls
ZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEIzQXJncyk7CisgICAgICAgIEFyZyYgYXJn
ID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJnc107CisgICAgICAgIAorICAgICAgICBz
d2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgY2Fz
ZSBBcmc6OkltbToKKyAgICAgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICBjYXNlIEFyZzo6
U3RhY2s6CisgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICAgICAgYnJlYWs7IC8v
IE9LCisgICAgICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICAgICAgaWYgKGFyZy5iYXNlKCkg
IT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKQorICAgICAgICAgICAgICAgICYmIGFy
Zy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3RlcikpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBl
KCkpOworCisgICAgICAgIGlmICghYXJnLmlzVHlwZSh0eXBlKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgbnVtYmVyIG9mIGNvbnN0cmFpbnRzIGhhcyB0
byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBvZiBCMyBjaGlsZHJlbi4KKyAgICBBU1NF
UlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkgPD0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpKTsK
KworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBzdXBwbGllZCBjb25zdHJhaW50cy4KKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNBcmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVw
cy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZVJlcCYgcmVwID0gc3RhY2ttYXAtPm1fcmVw
c1tpXTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSAtIG51bUlnbm9yZWRCM0FyZ3Mg
KyBudW1JZ25vcmVkQWlyQXJnc107CisKKyAgICAgICAgc3dpdGNoIChyZXAua2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAgICAgIC8vIFdlIGFscmVhZHkgdmVy
aWZpZWQgdGhpcyBhYm92ZS4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVl
UmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAoIWFyZy5pc1RtcCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmIChhcmcgIT0gVG1wKHJlcC5yZWco
KSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3Qg
YSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNr
QXJndW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnICE9IEFyZzo6Y2FsbEFyZyhyZXAub2Zmc2V0
RnJvbVNQKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFudDoKKyAgICAgICAgICAgIC8vIFRo
aXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjphZG1pdHNTdGFj
a0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3Jl
ZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgVmFs
dWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUt
PnN0YWNrbWFwKCk7CisKKyAgICB1bnNpZ25lZCBzdGFja21hcEFyZ0luZGV4ID0gYXJnSW5kZXgg
LSBudW1JZ25vcmVkQWlyQXJncyArIG51bUlnbm9yZWRCM0FyZ3M7CisKKyAgICBpZiAoc3RhY2tt
YXBBcmdJbmRleCA+PSBzdGFja21hcC0+bV9yZXBzLnNpemUoKSkgeworICAgICAgICAvLyBUaGlz
IG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNvbnN0cmFpbnQuCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICAvLyBXZSBvbmx5IGFkbWl0IHN0YWNrIGZvciBBbnkncywgc2lu
Y2UgU3RhY2sgaXMgbm90IGEgdmFsaWQgaW5wdXQgY29uc3RyYWludCwgYW5kIFN0YWNrQXJndW1l
bnQKKyAgICAvLyB0cmFuc2xhdGVzIHRvIGEgQ2FsbEFyZyBpbiBBaXIuCisgICAgaWYgKHN0YWNr
bWFwLT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRleF0ua2luZCgpID09IFZhbHVlUmVwOjpBbnkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIFN0YWNr
bWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwoCisgICAgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRl
eHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBJbnN0JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+
JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBp
bnN0LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJlc3VsdC5hcHBlbmQocmVwRm9yQXJnKCpj
b250ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkpOworfQorCitWYWx1ZVJlcCBTdGFja21hcFNwZWNp
YWw6OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBjb25zdCBBcmcmIGFyZykKK3sKKyAgICBzd2l0Y2gg
KGFyZy5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAgICAgICByZXR1cm4gVmFsdWVS
ZXA6OnJlZyhhcmcucmVnKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6SW1tOgor
ICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFudChh
cmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAg
ICBpZiAoYXJnLmJhc2UoKSA9PSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpKQorICAg
ICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhhcmcub2Zmc2V0KCkpOworICAgICAgICBB
U1NFUlQoYXJnLmJhc2UoKSA9PSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyKSk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpIC0gY29k
ZS5mcmFtZVNpemUoKSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcFNwZWNpYWxfaAorI2RlZmluZSBCM1N0YWNrbWFw
U3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5o
IgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgaXMgYSBiYXNl
IGNsYXNzIGZvciBzcGVjaWFscyB0aGF0IGhhdmUgc3RhY2ttYXBzLiBOb3RlIHRoYXQgaXQgY2Fu
IGZpbmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBhc2tpbmcgZm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBI
ZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBuZWVkIHRvIGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0
byB0aGUKKy8vIFN0YWNrbWFwLgorCitjbGFzcyBTdGFja21hcFNwZWNpYWwgOiBwdWJsaWMgQWly
OjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBTdGFja21hcFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFs
IH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgcmVwb3J0VXNlZFJl
Z2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIGNv
bnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7
CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9y
IGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhhdmUgbWFueSBzb21lCisgICAgLy8gc3Vi
Y2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgorCisgICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgK
KyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6
OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBib29sIGlzVmFsaWRJbXBsKAorICAgICAgICB1bnNp
Z25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAg
ICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBhZG1pdHNTdGFja0ltcGwoCisgICAgICAgIHVuc2ln
bmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdzLAorICAgICAg
ICBBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBBcHBlbmRzIHRoZSBy
ZXBzIGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0YXJ0aW5nIHdpdGggbnVtSWdub3JlZEFyZ3MsIHRv
IHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgdm9pZCBhcHBlbmRSZXBzSW1wbChBaXI6OkdlbmVyYXRp
b25Db250ZXh0JiwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxW
YWx1ZVJlcD4mKTsKKworICAgIHN0YXRpYyBWYWx1ZVJlcCByZXBGb3JBcmcoQWlyOjpDb2RlJiwg
Y29uc3QgQWlyOjpBcmcmKTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rp
b24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3VjY2Vzc29y
Q29sbGVjdGlvbl9oCisjZGVmaW5lIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBp
cyBhIGdlbmVyaWMgd3JhcHBlciBhcm91bmQgbGlzdHMgb2YgZnJlcXVlbnRlZCBibG9ja3MsIHdo
aWNoIGdpdmVzIHlvdSBqdXN0IHRoZSBibG9ja3MuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2lj
QmxvY2ssIHR5cGVuYW1lIFN1Y2Nlc3Nvckxpc3Q+CitjbGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9u
IHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3Qp
CisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgeworICAgIH0KKworICAgIHNpemVfdCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHNp
emVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAg
QmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9saXN0W2luZGV4XS5ibG9j
aygpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvcltdKHNpemVfdCBp
bmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAg
cHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihu
dWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3NvckNvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHNpemVf
dCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKSAvLyBjb25z
dCBpcyBzdHVwaWQgYW55d2F5LgorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7
CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5k
ZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxl
Y3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKwor
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAg
aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworcHJp
dmF0ZToKKyAgICBTdWNjZXNzb3JMaXN0JiBtX2xpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N1Y2Nl
c3NvckNvbGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hDYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hDYXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dm9pZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1fY2FzZVZhbHVlLCAiLT4iLCBtX3RhcmdldCk7Cit9CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzU3dpdGNoQ2FzZV9oCisjZGVmaW5lIEIzU3dpdGNoQ2FzZV9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBT
d2l0Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VW
YWx1ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFs
dWUoY2FzZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQor
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7
IH0KKworICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7
IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7
IH0KKyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
LmJsb2NrKCk7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fY2FzZVZhbHVlOworICAgIEZyZXF1ZW50ZWRCbG9jayBt
X3RhcmdldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUg
PHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dp
dGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6
OnJlbW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgRnJlcXVlbnRlZEJsb2NrIHJlc3Vs
dEJsb2NrID0gbV9zdWNjZXNzb3JzW2luZGV4XTsKKyAgICBpbnQ2NF90IHJlc3VsdFZhbHVlID0g
bV92YWx1ZXNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMu
bGFzdCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgbV92YWx1ZXNbaW5k
ZXhdID0gbV92YWx1ZXMubGFzdCgpOworICAgIG1fdmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICBy
ZXR1cm4gU3dpdGNoQ2FzZShyZXN1bHRWYWx1ZSwgcmVzdWx0QmxvY2spOworfQorCit2b2lkIFN3
aXRjaFZhbHVlOjphcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7Cisg
ICAgbV9zdWNjZXNzb3JzLmFwcGVuZChtX3N1Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nl
c3NvcnNbbV9zdWNjZXNzb3JzLnNpemUoKSAtIDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAg
ICBtX3ZhbHVlcy5hcHBlbmQoc3dpdGNoQ2FzZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dp
dGNoVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhp
cyBkZXN0cnVjdGl2ZWx5IG92ZXJyaWRlcyBDb250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAg
IG91dC5wcmludChsaXN0RHVtcCgqdGhpcyksICIsIGZhbGxUaHJvdWdoID0gIiwgZmFsbFRocm91
Z2goKSk7Cit9CisKK1N3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Jp
Z2luIG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENv
bnRyb2xWYWx1ZShpbmRleCwgU3dpdGNoLCBWb2lkLCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNz
b3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3dpdGNoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRj
aFZhbHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDog
cHVibGljIENvbnRyb2xWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNo
VmFsdWUoKTsKKworICAgIC8vIG51bUNhc2VWYWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygp
LgorICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5z
aXplKCk7IH0KKworICAgIC8vIFRoZSBzdWNjZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBh
dCB0aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgCisgICAgY29uc3QgVmVjdG9y
PGludDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAg
IEZyZXF1ZW50ZWRCbG9jayBmYWxsVGhyb3VnaCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMo
KS5sYXN0KCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKCkgeyByZXR1cm4g
c3VjY2Vzc29ycygpLmxhc3QoKTsgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0
dXJuIG51bUNhc2VWYWx1ZXMoKTsgfQorICAgIFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gU3dpdGNoQ2FzZShjYXNlVmFsdWUoaW5kZXgp
LCBzdWNjZXNzb3IoaW5kZXgpKTsKKyAgICB9CisgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAg
ICB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICA6IG1fc3dpdGNoKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3dp
dGNoVmFsdWUmIHN3aXRjaFZhbHVlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9z
d2l0Y2goJnN3aXRjaFZhbHVlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yKigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX3N3aXRjaC0+YXQobV9pbmRleCk7CisgICAgICAgIH0K
KworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN3aXRjaFZhbHVlKiBtX3N3aXRj
aDsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgdHlwZWRlZiBpdGVy
YXRvciBjb25zdF9pdGVyYXRvcjsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUg
Y2FzZSBhbmQgcmVvcmRlcnMgdGhpbmdzIGEgYml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBj
YXNlcyBmcm9tIDAgdG8gTiwKKyAgICAvLyB0aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0
ZXIgdGhpcyBzbyBsb25nIGFzIHlvdSByZXZpc2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2ls
bCBub3cKKyAgICAvLyBjb250YWluIHNvbWUgb3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3Zl
cyB0aGUgY2FzZSB0aGF0IHdhcyByZW1vdmVkLgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1
bnNpZ25lZCBpbmRleCk7CisKKyAgICB2b2lkIGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYp
OworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92
ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBT
d2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2sm
IGZhbGxUaHJvdWdoKTsKKworICAgIFZlY3RvcjxpbnQ2NF90PiBtX3ZhbHVlczsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzU3dpdGNoVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNUeXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
VHlwZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7CisgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgY2FzZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQoIlZvaWQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50
MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIG91dC5wcmlu
dCgiSW50NjQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICBv
dXQucHJpbnQoIkRvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzVHlwZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUg
eworICAgIFZvaWQsCisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitp
bmxpbmUgYm9vbCBpc0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIg
fHwgdHlwZSA9PSBJbnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7
CisgICAgcmV0dXJuIHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyVHlw
ZSgpCit7CisgICAgaWYgKGlzMzJCaXQoKSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJl
dHVybiBJbnQ2NDsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBX
VEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3Ry
ZWFtJiwgSlNDOjpCMzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitV
cHNpbG9uVmFsdWU6On5VcHNpbG9uVmFsdWUoKQoreworfQorCit2b2lkIFVwc2lsb25WYWx1ZTo6
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4iLCBt
X3BoaS0+aW5kZXgoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2ls
b25WYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2ls
b25WYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBz
aWxvblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXBzaWxvblZhbHVl
X2gKKyNkZWZpbmUgQjNVcHNpbG9uVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFVwc2lsb25WYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJv
b2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gVXBzaWxvbjsgfQor
CisgICAgflVwc2lsb25WYWx1ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNvbnN0IHsgcmV0dXJu
IG1fcGhpOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KyAgICAKKyAgICBVcHNpbG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiB2YWx1ZSwgVmFsdWUqIHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGhpLCBWb2lk
LCBvcmlnaW4sIHZhbHVlKQorICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7CisgICAgICAgIEFT
U0VSVCh2YWx1ZS0+dHlwZSgpID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisKKyAgICBWYWx1ZSog
bV9waGk7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworVXNlQ291bnRzOjpVc2VDb3VudHMoUHJvY2VkdXJlJiBwcm9jZWR1
cmUpCisgICAgOiBtX2NvdW50cyhwcm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQoreworICAgIGZv
ciAoVmFsdWUqIHZhbHVlIDogcHJvY2VkdXJlLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoVmFs
dWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICBtX2NvdW50c1tjaGls
ZF0rKzsKKyAgICB9Cit9CisKK1VzZUNvdW50czo6flVzZUNvdW50cygpCit7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzVXNlQ291bnRzX2gKKyNkZWZpbmUgQjNVc2VDb3VudHNfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisK
K2NsYXNzIFVzZUNvdW50cyB7CitwdWJsaWM6CisgICAgVXNlQ291bnRzKFByb2NlZHVyZSYpOwor
ICAgIH5Vc2VDb3VudHMoKTsKKworICAgIHVuc2lnbmVkIG9wZXJhdG9yW10oVmFsdWUqIHZhbHVl
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fY291bnRzW3ZhbHVlXTsKKyAgICB9Citw
cml2YXRlOgorICAgIEluZGV4TWFwPFZhbHVlLCB1bnNpZ25lZD4gbV9jb3VudHM7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM1VzZUNvdW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNW
YWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xh
c3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2Vk
dXJlKQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisK
KyNkZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg
ICAgICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25k
aXRpb24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisgICAg
dm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzOwor
ICAgICAgICBIYXNoU2V0PFZhbHVlKj4gdmFsdWVJblByb2M7CisgICAgICAgIEhhc2hTZXQ8VmFs
dWUqPiB2YWx1ZUluQmxvY2s7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1f
cHJvY2VkdXJlKSB7CisgICAgICAgICAgICBibG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgICAg
IGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKQorICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9j
ay5hZGQodmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBt
X3Byb2NlZHVyZS52YWx1ZXMoKSkKKyAgICAgICAgICAgIHZhbHVlSW5Qcm9jLmFkZCh2YWx1ZSk7
CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykKKyAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlSW5CbG9jay5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJbkJsb2NrKQorICAgICAgICAgICAg
VkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOwor
CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2MpIHsKKyAgICAgICAgICAg
IGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnMoY2hpbGQpLCAoIkF0ICIsICp2YWx1ZSwgIi0+
IiwgcG9pbnRlckR1bXAoY2hpbGQpKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgICAgIFZB
TElEQVRFKAorICAgICAgICAgICAgICAgICAgICBibG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwg
KCJBdCAiLCAqYmxvY2ssICItPiIsIHBvaW50ZXJEdW1wKHN1Y2Nlc3NvcikpKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLy8gRklYTUU6IEV4cGFuZCB0aGlz
IHZhbGlkYXRpb24gcGhhc2UuCisgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTA0ODAKKyAgICB9CisKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOX0RV
RV9UT19DUkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQg
bGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwK
KyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJl
TWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0Owor
ICAgICAgICAgICAgb3V0LnByaW50KCJCMyBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAg
ICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBs
aW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdl
LCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgIEFmdGVyICIsIG1fcHJvY2VkdXJl
Lmxhc3RQaGFzZU5hbWUoKSwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91
dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3Nh
Z2UpOworICAgICAgICBpZiAobV9kdW1wQmVmb3JlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJC
ZWZvcmUgIiwgbV9wcm9jZWR1cmUubGFzdFBoYXNlTmFtZSgpLCAiOlxuIik7CisgICAgICAgICAg
ICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygiQXQg
dGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFMb2cobV9wcm9jZWR1cmUpOworCisg
ICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBXVEZSZXBvcnRBc3NlcnRp
b25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5jdGlvbiwgY29uZGl0aW9uKTsKKyAg
ICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsK
KyAgICBjb25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciog
ZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVyKHByb2NlZHVyZSwgZHVtcEJl
Zm9yZSk7CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbGlkYXRlX2gK
KyNkZWZpbmUgQjNWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCit2b2lkIHZhbGlkYXRl
KFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUgPSBudWxscHRyKTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NvbnN0IGNo
YXIqIGNvbnN0IFZhbHVlOjpkdW1wUHJlZml4ID0gIkAiOworCitWYWx1ZTo6flZhbHVlKCkKK3sK
K30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdmFsdWUpCit7Cisg
ICAgLy8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNlbWVu
dCBvZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBsYWlu
IElkZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24g
d2UgbmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBw
bGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4K
KworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5cGU7
CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0g
dGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJlcGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7
CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBlID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhp
cy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgSWRlbnRp
dHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAg
ICB0aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworfQorCit2b2lkIFZhbHVlOjpyZXBs
YWNlV2l0aE5vcCgpCit7CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIE9yaWdp
biBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVy
OworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9IHRoaXMtPnJlcGxhY2VtZW50OworCisgICAgdGhp
cy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgTm9wLCBW
b2lkLCBvcmlnaW4pOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5yZXBs
YWNlbWVudCA9IHJlcGxhY2VtZW50OworfQorCit2b2lkIFZhbHVlOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQor
Cit2b2lkIFZhbHVlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChtX3R5cGUsICIgIiwgKnRoaXMsICIgPSAiLCBtX29wY29kZSk7CisKKyAgICBvdXQu
cHJpbnQoIigiKTsKKyAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgZm9yIChWYWx1ZSogY2hp
bGQgOiBjaGlsZHJlbigpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGNo
aWxkKSk7CisKKyAgICBTdHJpbmdQcmludFN0cmVhbSBzdHJpbmdPdXQ7CisgICAgZHVtcE1ldGEo
c3RyaW5nT3V0KTsKKyAgICBDU3RyaW5nIHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsK
KyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cmlu
Zyk7CisKKyAgICBvdXQucHJpbnQoIikiKTsKK30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mKSBjb25zdAoreworfQorCitUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNv
ZGUsIFZhbHVlKiBmaXJzdENoaWxkKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2Fz
ZSBJZGVudGl0eToKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoK
KyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNh
c2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBT
aGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgor
ICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIGZp
cnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJu
IHBvaW50ZXJUeXBlKCk7CisgICAgY2FzZSBTRXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBj
YXNlIFRydW5jOgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBO
b3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAg
Y2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToK
KyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1
YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpF
eHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0OworICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2Ug
SVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0
dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUu
aCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUg
PHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgU3Rh
Y2ttYXA7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgc3Rh
dGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKwor
ICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAg
IC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNp
bmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisgICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0
dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9v
cmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVy
biBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKworICAgIC8vIFRoaXMgY29tcHV0
ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3R5cGU7IH0KKworICAgIC8vIFRoaXMgaXMgdXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5v
dGUgdGhhdCB0aGlzIGlzIG9ubHkgdmFsaWQgZm9yIG5vbi12b2lkIHZhbHVlcy4KKyAgICBBaXI6
OkFyZzo6VHlwZSBhaXJUeXBlKCkgY29uc3QgeyByZXR1cm4gQWlyOjpBcmc6OnR5cGVGb3JCM1R5
cGUodHlwZSgpKTsgfQorCisgICAgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBt
X2NoaWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3Qg
eyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50aXR5KFZh
bHVlKik7CisgICAgdm9pZCByZXBsYWNlV2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
CisgICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91
IHdhbnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gQXJn
dW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1bWVudFJl
Z1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpKSB7Cisg
ICAgLy8gICAgIHRoaW5ncworICAgIC8vIH0KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCByZXR1
cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1
c2UgdGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29kZSgpKSBy
ZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMoKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7CisgICAgCisg
ICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0Owor
ICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50NjQoKSBj
b25zdDsKKworICAgIGJvb2wgaGFzSW50KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludCgpIGNv
bnN0OworICAgIGJvb2wgaXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGhh
c0RvdWJsZSgpIGNvbnN0OworICAgIGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworcHJvdGVjdGVkOgorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEg
UHJvY2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBl
IGV4cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4
cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQor
ICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAg
ICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAg
LCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9Cisg
ICAgLy8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hl
biB0aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAg
ICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAs
IG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQor
ICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVp
ciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bj
b2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQp
KQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJz
dENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlz
IGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bj
b2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKKyAg
ICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29k
ZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAgICAgICAs
IG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9y
IHZhcmFyZ3MuCisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRy
ZW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUp
CisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAg
ICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAg
Ly8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5
cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGls
ZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBj
b21wdXRlZCBsYXppbHkuCisgICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1
c2VkIGZvciBhbmFseXNlcyBhbmQgdHJhbnNmb3JtYXRpb25zLgorfTsKKworY2xhc3MgRGVlcFZh
bHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVlRHVtcChjb25zdCBWYWx1ZSogdmFsdWUp
CisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSkKKyAg
ICAgICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFZh
bHVlKiBtX3ZhbHVlOworfTsKKworaW5saW5lIERlZXBWYWx1ZUR1bXAgZGVlcER1bXAoY29uc3Qg
VmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVwVmFsdWVEdW1wKHZhbHVlKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlSW5s
aW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgor
I2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVl
LmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgorVCogVmFsdWU6OmFzKCkKK3sKKyAgICBpZiAoVDo6YWNjZXB0cyhvcGNvZGUoKSkpCisgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxUKj4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+Citjb25zdCBUKiBWYWx1ZTo6YXMoKSBjb25zdAorewor
ICAgIHJldHVybiBjb25zdF9jYXN0PFZhbHVlKj4odGhpcyktPmFzPFQ+KCk7Cit9CisKK2lubGlu
ZSBib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3Qz
MlZhbHVlPigpOworfQorCitpbmxpbmUgaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworaW5saW5lIGJv
b2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDY0VmFs
dWU+KCk7Cit9CisKK2lubGluZSBpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBW
YWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSB8fCBoYXNJbnQ2
NCgpOworfQorCitpbmxpbmUgaW50NjRfdCBWYWx1ZTo6YXNJbnQoKSBjb25zdAoreworICAgIHJl
dHVybiBoYXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNJbnQ2NCgpOworfQorCitpbmxpbmUgYm9v
bCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50
KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0RvdWJs
ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKwor
aW5saW5lIGRvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBhczxD
b25zdERvdWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQorCitpbmxpbmUgU3RhY2ttYXAqIFZhbHVl
OjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1
ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2ttYXA7CisgICAgaWYgKFBhdGNocG9p
bnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0
dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tp
bmQpIHsKKyAgICBjYXNlIEFueToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAi
KSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50
KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50
KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBz
d2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmlu
dCgiQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0
ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3Rl
ciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAg
IG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6
OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5w
cmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFs
dWVSZXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25z
IGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRp
b24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3Jj
ZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4g
QjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5
IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6Cisg
ICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRo
aXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uIEFzIGFuCisgICAg
ICAgIC8vIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IGtu
b3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZvciB0aGUKKyAgICAgICAgLy8gcmlnaHQgb3BlcmFu
ZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVja011bC4KKyAgICAgICAgQW55LAorCisgICAgICAg
IC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxk
IHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQorICAgICAgICAvLyByZWdpc3RlciB0
aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIhCisgICAgICAgIFNvbWVSZWdpc3RlciwKKworICAg
ICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1
bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRo
aXMgdGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNrZWQuCisgICAgICAgIFJlZ2lzdGVyLAor
CisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3
aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJdCdzIG5vdCBhIHZhbGlkCisgICAgICAgIC8vIGlu
cHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBTdGFjaywKKworICAgICAgICAvLyBBcyBhbiBp
bnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0
aGUgYXJndW1lbnQgYXJlYSBhdCBzb21lCisgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgLy8g
RklYTUU6IFRoZSBTdGFja21hcFNwZWNpYWwgY2xhc3MgbmVlZHMgdG8gYWNjb3VudCBmb3IgdGhl
IGZhY3QgdGhhdCB0aGVzZSBkb24ndCB0dXJuIGludG8KKyAgICAgICAgLy8gQWlyIG9wZXJhbmRz
LgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
NTQwCisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJl
cHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2
YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9OworICAgIAorICAgIFZhbHVlUmVwKCkKKyAg
ICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBWYWx1ZVJl
cChSZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdpc3RlcikKKyAgICB7CisgICAgICAgIHUu
cmVnID0gcmVnOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKKyAg
ICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChyZWcpOworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCBzdGFjayhpbnRwdHJfdCBvZmZzZXRGcm9tRlApCisgICAgeworICAgICAgICBWYWx1
ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVz
dWx0LnUub2Zmc2V0RnJvbUZQID0gb2Zmc2V0RnJvbUZQOworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50KGludHB0cl90IG9m
ZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC51Lm9mZnNldEZyb21T
UCA9IG9mZnNldEZyb21TUDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBz
dGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZh
bHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50OworICAgICAg
ICByZXN1bHQudS52YWx1ZSA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gVmFsdWVSZXA6OmNvbnN0YW50KGJpdHdpc2VfY2FzdDxpbnQ2NF90
Pih2YWx1ZSkpOworICAgIH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQo
KSAhPSBBbnk7IH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBSZWdpc3Rlcik7CisgICAgICAgIHJldHVybiB1LnJlZzsKKyAgICB9CisKKyAg
ICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtp
bmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiB1Lm9mZnNldEZyb21GUDsKKyAgICB9CisK
KyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHUub2Zmc2V0RnJvbVNQ
OworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGtpbmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJldHVybiB1LnZhbHVlOworICAgIH0K
KworICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
Yml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgdW5p
b24gVSB7CisgICAgICAgIFJlZyByZWc7CisgICAgICAgIGludHB0cl90IG9mZnNldEZyb21GUDsK
KyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbVNQOworICAgICAgICBpbnQ2NF90IHZhbHVlOwor
CisgICAgICAgIFUoKQorICAgICAgICB7CisgICAgICAgICAgICBtZW1zZXQodGhpcywgMCwgc2l6
ZW9mKCp0aGlzKSk7CisgICAgICAgIH0KKyAgICB9IHU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QjM6OlZhbHVlUmVwOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZVJlcF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5f
bWF0Y2hlci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5l
cmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NTAgQEAK
KyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBt
ZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
IyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKKyR2YXJJbmRleCA9IDAKK2RlZiBuZXdWYXIKKyAg
ICAkdmFySW5kZXggKz0gMQorICAgICJfdG1wI3skdmFySW5kZXh9IgorZW5kCisKK2NsYXNzIFBy
b2R1Y3Rpb24KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6bmFtZSwgOnZhck5hbWUsIDphbm9u
eW1vdXMsIDpvcGNvZGUsIDpjaGlsZHJlbgorCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBu
YW1lLCBvcGNvZGUsIGNoaWxkcmVuKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAg
IEBuYW1lID0gbmFtZQorICAgICAgICBAYW5vbnltb3VzID0gKG5hbWUgPT0gbmlsIG9yIG5hbWUg
PX4gL1xBXCQoWzAtOV0rKVxaLykKKyAgICAgICAgQHZhck5hbWUgPSBAYW5vbnltb3VzID8gbmV3
VmFyIDogbmFtZSA9fiAvXEFcJC8gPyAkJyA6IG5hbWUKKyAgICAgICAgQG9wY29kZSA9IG9wY29k
ZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNoaWxkcmVuIDogW10KKyAgICBlbmQK
KworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAgICAgb3Bjb2RlICE9IG5pbAorICAgIGVuZAorCisg
ICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAgY2hpbGRyZW4uZWFjaF93aXRoX2lu
ZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQsIGluZGV4IHwKKyAgICAgICAgICAgIHlpZWxkIHZh
ck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5uYW1lLAorICAgICAgICAgICAgICAgICAg
Y2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLmFub255bW91cyA/IChjaGls
ZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDogOmFub25PcGVyYW5kKSA6IChjaGlsZC5vcGNvZGUg
PyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisgICAgICAgICAgICAgICAgICBpbmRleAorICAgICAg
ICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICB9CisgICAgZW5kCitlbmQK
KworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6cHJvZHVjdGlvbnMKKwor
ICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBAbmFtZSA9IG5h
bWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMKKyAgICBlbmQKK2VuZAorCitj
bGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAg
CisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxl
TmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVu
ZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9
IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwg
OnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAg
ICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAg
ICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAg
ICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9
fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRl
ZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVu
ZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50
LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAg
ICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVu
dFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFt
ZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBb
XQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAg
Y2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21t
ZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwg
aWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEFbYS16
QS1aMC05JF0oW2EtekEtWjAtOV9dKikvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3
KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEo
WyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hl
biAvXEFbPSgpLF0vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXco
ZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFp
c2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlcikudG9f
c30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9IgorICAgICAgICBl
bmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJlc3VsdAorZW5k
CisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgIyBXZSBjYW4gZXh0ZW5kIHRoaXMgYXMgd2Ug
YWRkIG1vcmUga2V5d29yZHMuIExpa2UsIHdlIG1pZ2h0IHdhbnQgImluY2x1ZGUiIGV2ZW50dWFs
bHkuCisgICAgdG9rZW4gPX4gL1xBKChtYXRjaGVyKXwoaW5jbHVkZSkpXFovCitlbmQKKworZGVm
IGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEFbYS16QS1aMC05JF0oW2EtekEt
WjAtOV9dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2Vy
CisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBs
ZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYg
dG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UK
KyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1l
bnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAg
ICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTog
I3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKwor
ICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tz
dHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNlCisgICAgZW5k
CisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3Ry
aW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJ
ZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBl
bmQKKworICAgIGRlZiBhZGRVbmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHByb2R1Y3Rpb24pCisg
ICAgICAgIGlmIG5hbWUgPT0gcHJvZHVjdGlvbi52YXJOYW1lCisgICAgICAgICAgICBwYXJzZUVy
cm9yKCJDaGlsZCBwcm9kdWN0aW9uIGhhcyBzYW1lIG5hbWUgYXMgcGFyZW50IHByb2R1Y3Rpb24i
KQorICAgICAgICBlbmQKKyAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8
IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAgIHBhcnNlRXJyb3Io
IkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIHByb2R1Y3Rpb25z
IDw8IHByb2R1Y3Rpb24KKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICBjb25zdW1l
KCJtYXRjaGVyIikKKworICAgICAgICBtYXRjaGVyTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisK
KyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAg
YnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICAjIFdlIG1pZ2h0
IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVkZSIuIElmIHdlIGRpZCB0aGF0LCBpdCB3b3VsZCBnbyBo
ZXJlLgorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHBhcnNlUHJvZHVjdGlvbgorICAgICAgICAg
ICAgCisgICAgICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnku
bmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkR1
cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBwcm9k
dWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgICAgIH0KKworICAgICAgICBNYXRjaGVyLm5ldyht
YXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VQcm9kdWN0
aW9uCisgICAgICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgorICAgICAgICBuYW1lID0gY29uc3Vt
ZUlkZW50aWZpZXIKKworICAgICAgICBpZiB0b2tlbiA9PSAiPSIKKyAgICAgICAgICAgIGNvbnN1
bWUoIj0iKQorICAgICAgICAgICAgb3Bjb2RlID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAg
ICAgIGNvbnN1bWUoIigiKQorICAgICAgICBlbHNpZiB0b2tlbiA9PSAiKCIKKyAgICAgICAgICAg
IGNvbnN1bWUoIigiKQorICAgICAgICAgICAgb3Bjb2RlID0gbmFtZQorICAgICAgICAgICAgbmFt
ZSA9IG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gUHJvZHVjdGlvbi5uZXco
b3JpZ2luLCBuYW1lLCBuaWwsIG5pbCkKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBw
cm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgdG9r
ZW4gPT0gIikiCisKKyAgICAgICAgICAgIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcGFy
c2VQcm9kdWN0aW9uKQorCisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKyAgICAg
ICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICB9CisKKyAgICAgICAgIyBBZHZhbmNlIGFmdGVy
IHRoZSAiKSIKKyAgICAgICAgYWR2YW5jZQorCisgICAgICAgIFByb2R1Y3Rpb24ubmV3KG9yaWdp
biwgbmFtZSwgb3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKK2VuZAorCitmaWxlTmFtZSA9
IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZChmaWxlTmFtZSksIGZpbGVO
YW1lKQorbWF0Y2hlciA9IHBhcnNlci5wYXJzZQorCitjbGFzcyBTdWJNYXRjaAorICAgIGF0dHJf
cmVhZGVyIDppbmRleE1hcCwgOnByb2R1Y3Rpb25zCisgICAgCisgICAgZGVmIGluaXRpYWxpemUo
aW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQGluZGV4TWFwID0gW10KKyAgICAgICAg
QHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAg
fCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXAgPDwgaW5kZXgKKyAgICAgICAgICAgIEBw
cm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorCisg
ICAgZGVmIG1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgIGluZGV4TGlzdC5tYXAgewor
ICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXBbaW5kZXhdCisgICAg
ICAgIH0KKyAgICBlbmQKK2VuZAorCiskc3RkZXJyLnB1dHMgIkdlbmVyYXRpbmcgY29kZSBmb3Ig
I3tmaWxlTmFtZX0uIgorCitGaWxlLm9wZW4oIkIzIiArIG1hdGNoZXIubmFtZSArICIuaCIsICJ3
IikgeworICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBnZW5l
cmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEi
CisKKyAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICBvdXRw
LnB1dHMgIiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICAKKyAgICBvdXRwLnB1dHMg
IiNpbmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1l
IEFkYXB0b3I+IgorICAgIG91dHAucHV0cyAiYm9vbCBydW4je21hdGNoZXIubmFtZX0oVmFsdWUq
IF92YWx1ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0cC5wdXRzICJ7IgorCisgICAgIyBO
b3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIGJlY2F1
c2UgaXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UKKyAgICAjIHdhbnQgdG8gc2VlIHRo
ZSBjb2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4gYSBnb29kIHRleHQgZWRpdG9yIGFu
ZCBhc2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91LgorCisgICAgIyBJbiBvZGQgc2l0
dWF0aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZhbHVlLiBUZWxsIHRoZSBjb21waWxl
ciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oX3Zh
bHVlKTsiCisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHByb3RlY3RzIHRoZSBjYWxsZXIgZnJv
bSBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5nIGRpZmZlcmVudCBsZW5n
dGhzLgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQor
ICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2lu
ZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYg
aW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5jaGlsZHJl
bi5sZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgICAgICBp
bmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAg
ICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAg
ICAgICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5jaGlsZHJlbi5sZW5ndGgK
KyAgICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlm
ICgje3ZhbHVlTmFtZX0tPmNoaWxkcmVuKCkuc2l6ZSgpID49ICN7bGVuZ3RofSkgeyIKKyAgICAg
ICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0i
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVuZAorCisgICAgIyBUaGlzIGVmZmljaWVudGx5
IHNlbGVjdHMgZnJvbSB0aGUgZ2l2ZW4gc2V0IG9mIHByb2R1Y3Rpb25zLiBJdCBhc3N1bWVzIHRo
YXQgcHJvZHVjdGlvbnMKKyAgICAjIGFyZSBub3QgZHVwbGljYXRlZC4gSXQgeWllbGRzIHRoZSBp
bmRleCBvZiB0aGUgZm91bmQgcHJvZHVjdGlvbiwgYW5kIHRoZSBjb3JvdXRpbmUgaXMKKyAgICAj
IHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBzcGVjaWZpYyBjb2RlIGZvciB0aGF0IHByb2R1Y3Rp
b24uIFRoZSBjb3JvdXRpbmUgaXMgZ2l2ZW4gbGlzdHMgb2YKKyAgICAjIGluZGljZXMgb2YgcG9z
c2libHktbWF0Y2hpbmcgcHJvZHVjdGlvbnMuCisgICAgZGVmIG1hdGNoUHJvZHVjdGlvbnMob3V0
cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgIyBGaXJzdCwgc3BsaXQgdGhlIHBy
b2R1Y3Rpb25zIGxpc3QgaW50byBydW5zIG9mIHByb2R1Y3Rpb25zIHdpdGggYW4gb3Bjb2RlIGFu
ZCBwcm9kdWN0aW9ucworICAgICAgICAjIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3Rz
ID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAg
IHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5k
IHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5oYXNPcGNvZGUgPT0gcHJvZHVjdGlvbi5o
YXNPcGNvZGUKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAg
ICAgICAgZW5kCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgICMgTm93LCBlbWl0IHBhdHRl
cm4gbWF0Y2hpbmcgY29kZS4gV2UgZG8gaXQgZGlmZmVyZW50bHkgZm9yIGxpc3RzIHdpdGggYW4g
b3Bjb2RlIHRoYW4gZm9yCisgICAgICAgICMgbGlzdHMgd2l0aG91dCBvbmUuCisgICAgICAgIGlu
ZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBp
ZiBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmhhc09wY29kZQorICAgICAgICAgICAgICAgICMg
Tm93LCB3ZSBzcGxpdCB0aGlzIGluZGV4IGxpc3QgaW50byBncm91cHMgZm9yIGVhY2ggb3Bjb2Rl
LgorICAgICAgICAgICAgICAgIGdyb3VwcyA9IHt9CisgICAgICAgICAgICAgICAgaW5kZXhMaXN0
LmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICAg
ICAgcHJvZHVjdGlvbiA9IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBp
ZiBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdCisgICAgICAgICAgICAgICAgICAgICAgICBncm91
cHNbcHJvZHVjdGlvbi5vcGNvZGVdIDw8IGluZGV4CisgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0gPSBbaW5k
ZXhdCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgICAgICMgRW1pdCBhIHN3aXRjaCBzdGF0ZW1lbnQuCisgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJzd2l0Y2ggKCN7dmFsdWVOYW1lfS0+b3Bjb2RlKCkpIHsiCisgICAgICAgICAgICAg
ICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgICAgICAgICAgICAgIHwgb3Bjb2RlLCBzdWJJ
bmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGV9
OiIKKyAgICAgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoc3ViSW5kZXhM
aXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwg
dmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gu
bWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9k
dWN0aW9ucykKKyAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHN1
Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwK
KyAgICAgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlz
dCkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVu
ZAorCisgICAgIyBUYWtlcyBwcm9kdWN0aW9ucyB0aGF0IGhhdmUgdGhlIHNhbWUgb3Bjb2RlIGFu
ZCB0aGUgc2FtZSBsZW5ndGggYW5kIHNlbGVjdHMgZnJvbSB0aGVtIGJhc2VkIG9uCisgICAgIyB0
aGUgcHJvZHVjdGlvbnMgYXQgdGhlIGdpdmVuIGNvbHVtbi4KKyAgICBkZWYgbWF0Y2hDb2x1bW4o
b3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucywgY29sdW1uSW5kZXgpCisgICAgICAgIGlmIGNv
bHVtbkluZGV4ID49IHByb2R1Y3Rpb25zWzBdLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAg
eWllbGQgKDAuLi4ocHJvZHVjdGlvbnMuc2l6ZSkpLnRvX2EKKyAgICAgICAgICAgIHJldHVybgor
ICAgICAgICBlbmQKKworICAgICAgICBzdWJWYWx1ZSA9IG5ld1ZhcgorICAgICAgICAKKyAgICAg
ICAgb3V0cC5wdXRzICJ7IgorICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3N1YlZhbHVlfSA9
ICN7dmFsdWVOYW1lfS0+Y2hpbGQoI3tjb2x1bW5JbmRleH0pOyIKKworICAgICAgICAjIFdlIG1h
eSBub3QgdXNlIHRoaXMgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91
dCBpdC4KKyAgICAgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oI3tzdWJWYWx1ZX0pOyIKKyAg
ICAgICAgCisgICAgICAgIHN1YlByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMubWFwIHsKKyAgICAg
ICAgICAgIHwgcHJvZHVjdGlvbiB8CisgICAgICAgICAgICBwcm9kdWN0aW9uLmNoaWxkcmVuW2Nv
bHVtbkluZGV4XQorICAgICAgICB9CisKKyAgICAgICAgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCBz
dWJWYWx1ZSwgc3ViUHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAg
ICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMp
CisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1
Y3Rpb25zLCBjb2x1bW5JbmRleCArIDEpIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8
CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICBl
bmQKKworICAgIGRlZiBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlv
bnMpCisgICAgICAgIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9u
cykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgIyBXZSBhcmUgZ3Vh
cmFudGVlZCB0aGF0IHRoaXMgaW5kZXggbGlzdCBjb250YWlucyBwcm9kdWN0aW9ucyB3aXRoIHRo
ZSBzYW1lIG9wY29kZSBhbmQKKyAgICAgICAgICAgICMgdGhlIHNhbWUgbGVuZ3RoLgorICAgICAg
ICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAg
ICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlv
bnMsIDApIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAg
eWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIGVuZAorCisgICAgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCAiX3ZhbHVlIiwg
bWF0Y2hlci5wcm9kdWN0aW9ucykgeworICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgIGlu
ZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgcHJvZHVj
dGlvbiA9IG1hdGNoZXIucHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICBvdXRwLnB1dHMg
InsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3Byb2R1Y3Rpb24udmFyTmFtZX0g
PSBfdmFsdWU7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oI3twcm9kdWN0
aW9uLnZhck5hbWV9KTsiCisgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA9IFtdCisgICAg
ICAgICAgICBvcGVyYW5kQXJndW1lbnRzID0gW10KKyAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA9
IFtdCisgICAgICAgICAgICBudW1TY29wZXMgPSAwCisgICAgICAgICAgICBzZWVuID0ge30KKwor
ICAgICAgICAgICAgIyBGSVhNRTogV2Ugd2FudCB0byBiZSBhYmxlIHRvIGNvbWJpbmUgcGF0dGVy
biBtYXRjaGVycywgbGlrZSBoYXZlIHRoZSBwYXR0ZXJuIG1hdGNoIHJ1bGUKKyAgICAgICAgICAg
ICMgZm9yIEJyYW5jaCBpbiB0aGUgbG93ZXJpbmcgcGF0Y2hlciBkZWxlZ2F0ZSB0byBhIG1hdGNo
ZXIgdGhhdCBjYW4gZGVkdWNlIHRoZSBraW5kIG9mCisgICAgICAgICAgICAjIGNvbXBhcmlzb24g
dGhhdCB3ZSdyZSBkb2luZy4gV2UgY291bGQgdGhlbiByZXVzZSB0aGF0IGxhdHRlciBtYXRjaGVy
IGZvciBDaGVjayBhbmQKKyAgICAgICAgICAgICMgdW5mdXNlZCBjb21wYXJlLiBUaGUga2V5IHRv
IG1ha2luZyBzdWNoIGEgZGVsZWdhdGlvbiB3b3JrIGlzIHRvIGhhdmUgdGhlIGlubmVyIG1hdGNo
ZXIKKyAgICAgICAgICAgICMgKHRoZSBjb21wYXJpc29uIG1hdGNoZXIgaW4gdGhpcyBjYXNlKSBr
ZWVwIGNhc2NhZGluZyBpZiBpdCBlbmNvdW50ZXJzIGEgcnVsZSB0aGF0CisgICAgICAgICAgICAj
IHByb2R1Y2VzIHNvbWV0aGluZyB0aGF0IHRoZSBvdXRlciBtYXRjaGVyIGNhbm5vdCBoYW5kbGUu
IEl0J3Mgbm90IG9idmlvdXMgdGhhdCB0aGUKKyAgICAgICAgICAgICMgY29tcGFyaXNvbiBtYXRj
aGVyIHdvdWxkIG5lZWQgdGhpcywgYnV0IHRoZSBhZGRyZXNzIG1hdGNoZXIgcHJvYmFibHkgd2ls
bC4gRm9yIGV4YW1wbGUsCisgICAgICAgICAgICAjIHdlIG1heSBoYXZlIGEgU3RvcmVBZGRMb2Fk
IHJ1bGUgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIGFkZHJlc3MgbWF0Y2hlciwgYW5kIHRoZSBhZGRy
ZXNzCisgICAgICAgICAgICAjIG1hdGNoZXIgbWF5IHByb2R1Y2UgYW4gYWRkcmVzcyB0aGF0IHRo
ZSBsb3dlcmluZyBtYXRjaGVyIGNhbm5vdCB1c2UgYmVjYXVzZSB3aGlsZSB0aGUKKyAgICAgICAg
ICAgICMgQWRkIGZvcm0gZG9lcyBhY2NlcHQgYWRkcmVzc2VzIGl0IG1heSBub3QgYWNjZXB0IHRo
ZSBwYXJ0aWN1bGFyIGFkZHJlc3MgdGhhdCB0aGUKKyAgICAgICAgICAgICMgYWRkcmVzcyBtYXRj
aGVyIHByb2R1Y2VkLiBJbiB0aGF0IGNhc2UsIGluc3RlYWQgb2YgZ2l2aW5nIHVwIG9uIHRoZSBT
dG9yZUFkZExvYWQgcnVsZSwKKyAgICAgICAgICAgICMgd2Ugd2FudCB0aGUgYWRkcmVzcyBtYXRj
aGVyIHRvIGp1c3QgdHJ5IGEgZGlmZmVyZW50IGFkZHJlc3MuIFRoZSBjb21wYXJpc29uIG1hdGNo
ZXIKKyAgICAgICAgICAgICMgbWlnaHQgd2FudCB0aGlzIGp1c3QgZm9yIGJldHRlciBjb250cm9s
bGluZyB3aGVuIHRvIHBpbiB2YXJpYWJsZXMuIEN1cnJlbnRseSwgaWYgaXQKKyAgICAgICAgICAg
ICMgY29uc3RydWN0ZWQgc29tZSBjb2RlLCBpdCB3b3VsZCBhbHNvIHBpbiB0aGUgdmFyaWFibGVz
IHRoYXQgaXQgdXNlZC4gSWYgdGhlIGxvd2VyaW5nCisgICAgICAgICAgICAjIG1hdGNoZXIgdGhl
biBkZWNpZGVkIHRvIHJlamVjdCB0aGUgY29kZSBjcmVhdGVkIGJ5IHRoZSBjb21wYXJpc29uIG1h
dGNoZXIsIGl0IHdvdWxkCisgICAgICAgICAgICAjIGhhdmUgYSBoYXJkIHRpbWUgInVucGlubmlu
ZyIgdGhvc2UgdmFyaWFibGVzLiBCdXQgaWYgd2UgaGFkIHNvbWUga2luZCBvZiBkZWxlZ2F0aW9u
LCB3ZQorICAgICAgICAgICAgIyBjb3VsZCBoYXZlIHRoZSBwaW5uaW5nIG9mIHRoZSBjb21wYXJp
c29uIG1hdGNoZXIgaGFwcGVuIG9ubHkgaWYgdGhlIGxvd2VyaW5nIG1hdGNoZXIKKyAgICAgICAg
ICAgICMgYWNjZXB0ZWQuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoaXMgY291bGQg
YWxsIGJlIGFjY29tcGxpc2hlZCBieSBoYXZpbmcgdHJ5QmxhaCgpIHJldHVybiBzb21ldGhpbmcs
IGFuZCBoYXZlIHRoZQorICAgICAgICAgICAgIyBtYXRjaGVyIGFsc28gdGFrZSBhIGZ1bmN0b3Ig
YXJndW1lbnQgdGhhdCBhY2NlcHRzIHdoYXQgdHJ5QmxhaCgpIHJldHVybnMuIFNvIGluc3RlYWQg
b2YKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgaWYgKHRyeUJsYWgoKSkgb2s7CisgICAg
ICAgICAgICAjCisgICAgICAgICAgICAjIFdlIHdvdWxkIGhhdmU6CisgICAgICAgICAgICAjCisg
ICAgICAgICAgICAjIGlmIChmdW5jdG9yKHRyeUJsYWgoKSkgb2s7CisgICAgICAgICAgICAjCisg
ICAgICAgICAgICAjIFdoZW4gbG93ZXJpbmcgZGVjaWRlZCB0byBkZWxlZ2F0ZSB0byB0aGUgYWRk
cmVzcyBvciBjb21wYXJpc29uIG1hdGNoZXIsIGl0IGNvdWxkIHN1cHBseQorICAgICAgICAgICAg
IyBhIGZ1bmN0b3IgdGhhdCBkZWNpZGVzIHdoZXRoZXIgdGhlIHRoaW5nIHRoYXQgdGhlIHN1Yi1t
YXRjaGVyIHNlbGVjdGVkIGlzIGluZGVlZAorICAgICAgICAgICAgIyB1c2VmdWwuCisgICAgICAg
ICAgICAjCisgICAgICAgICAgICAjIEluIHRoZSBuZWFyIHRlcm0sIHdlIHByb2JhYmx5IHdvbid0
IG5lZWQgdGhpcy4gQnV0IHdlIHdpbGwgZGVmaW5pdGVseSBuZWVkIGl0IGFzIHdlCisgICAgICAg
ICAgICAjIGV4cGFuZCB0byBlZmZpY2llbnRseSBzdXBwb3J0IG1vcmUgcGxhdGZvcm1zLiBPbiBY
ODZfNjQsIGFueSBicmFuY2hpbmcgaW5zdHJ1Y3Rpb24gaXMKKyAgICAgICAgICAgICMgdXNhYmxl
IGluIGFueSBjb250ZXh0LCBhbmQgYW55IGFkZHJlc3Mgc2hvdWxkIGJlIHVzYWJsZSBpbiBhbnkg
Y29udGV4dCAoYW5kIHRoZSBvbmx5CisgICAgICAgICAgICAjIGNhc2VzIHdoZXJlIGl0IHdvdWxk
bid0IGJlIGlzIGlmIHdlIGhhdmUgaG9sZXMgaW4gdGhlIE1hY3JvQXNzZW1ibGVyKS4KKyAgICAg
ICAgICAgICMKKyAgICAgICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1MDU1OQorICAgICAgICAgICAgCisgICAgICAgICAgICBwcm9kdWN0aW9uLmVhY2hW
YXJpYWJsZSB7CisgICAgICAgICAgICAgICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5hbWUsIGNo
aWxkVmFyTmFtZSwga2luZCwgaW5kZXggfAorICAgICAgICAgICAgICAgIGxvYWRFeHByID0gIiN7
cGFyZW50VmFyTmFtZX0tPmNoaWxkKCN7aW5kZXh9KSIKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBpZiBzZWVuW2NoaWxkVmFyTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgdG1w
ID0gbmV3VmFyCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7dG1wfSA9
ICN7bG9hZEV4cHJ9OyIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t0bXB9
ID09ICN7Y2hpbGRWYXJOYW1lfSkgeyIKKyAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9
IDEKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNlZW5bY2hpbGRW
YXJOYW1lXSA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiVmFsdWUqICN7Y2hpbGRWYXJOYW1lfSA9ICN7bG9hZEV4cHJ9OyIKKworICAg
ICAgICAgICAgICAgICAgICAjIEZJWE1FOiBDb25zaWRlciBnZXR0aW5nIHJpZCBvZiB0aGUgJCBw
cmVmaXguCisgICAgICAgICAgICAgICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDUyNworICAgICAgICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4g
L1xBXCQvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQoWzAt
OV0rKVxaLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hp
bGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJO
YW1lfS0+aGFzSW50KCkpIHsiCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVu
dHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOmFub25J
bnRlcm5hbAorICAgICAgICAgICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRzIDw8IGNoaWxkVmFy
TmFtZSBpZiBraW5kID09IDpvcGVyYW5kIG9yIGtpbmQgPT0gOmFub25PcGVyYW5kCisgICAgICAg
ICAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50
ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRhcHRvci5hY2NlcHRSb290KF92YWx1
ZSkiCisgICAgICAgICAgICB1bmxlc3MgaW50ZXJuYWxBcmd1bWVudHMuZW1wdHk/CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJu
YWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5w
dXRzKCImJiBhZGFwdG9yLmFjY2VwdE9wZXJhbmRzKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4o
IiwgIikgKyAiKSIpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cygiJiYg
YWRhcHRvci50cnkje3Byb2R1Y3Rpb24ubmFtZX0oIiArIHRyeUFyZ3VtZW50cy5qb2luKCIsICIp
ICsgIikpIHsiKQorICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdFJvb3RMYXRl
KF92YWx1ZSk7IgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJndW1lbnRzLmVtcHR5Pwor
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5hY2NlcHRJbnRlcm5hbHNMYXRlKCIg
KyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICB1bmxlc3Mgb3BlcmFuZEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0T3BlcmFuZHNMYXRlKCIgKyBvcGVyYW5kQXJndW1l
bnRzLmpvaW4oIiwgIikgKyAiKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAu
cHV0cyAicmV0dXJuIHRydWU7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAg
ICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIH0KKyAgICB9Cisg
ICAgCisgICAgb3V0cC5wdXRzICIgICAgcmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0i
CisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBv
dXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI3MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM0NvbnN0UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAi
QjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkND
YWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlZNLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFt
ZXNwYWNlIEpTQzo6QjM7CisKK25hbWVzcGFjZSB7CisKKy8vIE5vdGhpbmcgZmFuY3kgZm9yIG5v
dzsgd2UganVzdCB1c2UgdGhlIGV4aXN0aW5nIFdURiBhc3NlcnRpb24gbWFjaGluZXJ5LgorI2Rl
ZmluZSBDSEVDSyh4KSBSRUxFQVNFX0FTU0VSVCh4KQorCitWTSogdm07CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1QgY29tcGlsZUFuZFJ1bihQcm9jZWR1
cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBDQ2FsbEhlbHBl
cnMgaml0KHZtKTsKKyAgICBnZW5lcmF0ZShwcm9jZWR1cmUsIGppdCk7CisgICAgTGlua0J1ZmZl
ciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgY29kZSA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwgKCJ0ZXN0YjMiKSk7CisgICAgVCAo
KmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJndW1lbnRzLi4u
KT4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIGZ1bmN0aW9u
KGFyZ3VtZW50cy4uLik7Cit9CisKK3ZvaWQgdGVzdDQyKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBj
b25zdDQyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQy
KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdp
bigpLCBjb25zdDQyKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0
Mik7Cit9CisKK3ZvaWQgdGVzdExvYWQ0MigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgeCA9IDQyOworICAg
IHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9y
aWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmeCkpKTsKKworICAgIENIRUNLKGNv
bXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisKK3ZvaWQgdGVzdEFyZyhpbnQgYXJn
dW1lbnQpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHBy
b2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAg
ICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3Vt
ZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKwor
ICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBhcmd1bWVudCkgPT0gYXJndW1lbnQp
OworfQorCit2b2lkIHRlc3RBZGRBcmdzKGludCBhLCBpbnQgYikKK3sKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRk
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEs
IGIpID09IGEgKyBiKTsKK30KKwordm9pZCB0ZXN0QWRkQXJnczMyKGludCBhLCBpbnQgYikKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBS
ZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAg
ICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMSkpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4o
cHJvYywgYSwgYikgPT0gYSArIGIpOworfQorCit2b2lkIHRlc3RTdG9yZShpbnQgdmFsdWUpCit7
CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxv
Y2soKTsKKyAgICBpbnQgc2xvdCA9IDB4YmFhZGJlZWY7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPigKKyAgICAgICAgcHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICByb290
LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAor
ICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdp
bigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENv
bnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmc2xvdCkpOworICAgIHJvb3QtPmFwcGVuZE5l
dzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5h
cHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgQ0hFQ0so
IWNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB2YWx1ZSkpOworICAgIENIRUNLKHNsb3QgPT0gdmFs
dWUpOworfQorCit2b2lkIHRlc3RUcnVuYyhpbnQ2NF90IHZhbHVlKQoreworICAgIFByb2NlZHVy
ZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2lu
KCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBU
cnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKworICAgIENI
RUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB2YWx1ZSkgPT0gc3RhdGljX2Nhc3Q8aW50Pih2
YWx1ZSkpOworfQorCit2b2lkIHRlc3RBZGQxKGludCB2YWx1ZSkKK3sKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRk
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAg
ICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1l
bnRHUFIwKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgMSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB2
YWx1ZSkgPT0gdmFsdWUgKyAxKTsKK30KKwordm9pZCB0ZXN0U3RvcmVBZGRMb2FkKGludCBhbW91
bnQpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICBpbnQgc2xvdCA9IDM3OworICAgIENvbnN0UHRyVmFsdWUqIHNsb3RQ
dHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90
KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBTdG9y
ZSwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHNsb3RQdHIpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCkp
LAorICAgICAgICBzbG90UHRyKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigK
KyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKworICAgIENIRUNLKCFjb21waWxl
QW5kUnVuPGludD4ocHJvYykpOworICAgIENIRUNLKHNsb3QgPT0gMzcgKyBhbW91bnQpOworfQor
Cit2b2lkIHRlc3RTdG9yZUFkZEFuZExvYWQoaW50IGFtb3VudCwgaW50IG1hc2spCit7CisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBpbnQgc2xvdCA9IDM3OworICAgIENvbnN0UHRyVmFsdWUqIHNsb3RQdHIgPSByb290LT5h
cHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90KTsKKyAgICByb290
LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBCaXRB
bmQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAg
ICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBzbG90UHRy
KSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgYW1vdW50KSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzaykpLAorICAgICAgICBzbG90UHRyKTsKKyAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IDApKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworICAgIENIRUNL
KHNsb3QgPT0gKCgzNyArIGFtb3VudCkgJiBtYXNrKSk7Cit9CisKKyNkZWZpbmUgUlVOKHRlc3Qp
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygjdGVzdCAi
OlxuIik7ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgdGVzdDsgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygiICAgIE9LIVxuIik7ICAgICAg
ICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlIChmYWxzZSk7CisKK3ZvaWQgcnVuKCkKK3sKKyAg
ICBKU0M6OmluaXRpYWxpemVUaHJlYWRpbmcoKTsKKyAgICB2bSA9ICZWTTo6Y3JlYXRlKExhcmdl
SGVhcCkubGVha1JlZigpOworCisgICAgUlVOKHRlc3Q0MigpKTsKKyAgICBSVU4odGVzdExvYWQ0
MigpKTsKKyAgICBSVU4odGVzdEFyZyg0MykpOworICAgIFJVTih0ZXN0QWRkQXJncygxLCAxKSk7
CisgICAgUlVOKHRlc3RBZGRBcmdzKDEsIDIpKTsKKyAgICBSVU4odGVzdEFkZEFyZ3MzMigxLCAx
KSk7CisgICAgUlVOKHRlc3RBZGRBcmdzMzIoMSwgMikpOworICAgIFJVTih0ZXN0U3RvcmUoNDQp
KTsKKyAgICBSVU4odGVzdFRydW5jKChzdGF0aWNfY2FzdDxpbnQ2NF90PigxKSA8PCA0MCkgKyA0
MikpOworICAgIFJVTih0ZXN0QWRkMSg0NSkpOworICAgIFJVTih0ZXN0U3RvcmVBZGRMb2FkKDQ2
KSk7CisgICAgUlVOKHRlc3RTdG9yZUFkZEFuZExvYWQoNDcsIDB4ZmZmZikpOworICAgIFJVTih0
ZXN0U3RvcmVBZGRBbmRMb2FkKDQ3MDAwMCwgMHhmZmZmKSk7Cit9CisKK30gLy8gYW5vbnltb3Vz
IG5hbWVzcGFjZQorCisjZWxzZSAvLyBFTkFCTEUoQjNfSklUKQorCitzdGF0aWMgdm9pZCBydW4o
KQoreworICAgIGRhdGFMb2coIkIzIEpJVCBpcyBub3QgZW5hYmxlZC5cbiIpOworfQorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQor
eworICAgIFVOVVNFRF9QQVJBTShhcmdjKTsKKyAgICBVTlVTRURfUEFSQU0oYXJndik7CisgICAg
CisgICAgcnVuKCk7CisgICAgcmV0dXJuIDA7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9j
YXRlU3RhY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgi
CisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgor
I2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgor
I2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGJvb2wgdmVyYm9zZSA9
IGZhbHNlOworCitib29sIGF0dGVtcHRBc3NpZ25tZW50KAorICAgIFN0YWNrU2xvdCogc2xvdCwg
aW50cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xv
dHMpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIkF0dGVtcHRpbmcgdG8g
YXNzaWduICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiIHRvICIsIG9mZnNldEZyb21GUCwgIiB3aXRo
IGludGVyZmVyZW5jZSAiLCBwb2ludGVyTGlzdER1bXAob3RoZXJTbG90cyksICJcbiIpOworCisg
ICAgLy8gTmVlZCB0byBhbGlnbiBpdCB0byB0aGUgc2xvdCdzIGRlc2lyZWQgYWxpZ25tZW50Lgor
ICAgIG9mZnNldEZyb21GUCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdC0+YWxpZ25t
ZW50KCksIC1vZmZzZXRGcm9tRlApOworICAgIAorICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNs
b3QgOiBvdGhlclNsb3RzKSB7CisgICAgICAgIGlmICghb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAo
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29sIG92ZXJsYXAgPSBXVEY6OnJh
bmdlc092ZXJsYXAoCisgICAgICAgICAgICBvZmZzZXRGcm9tRlAsCisgICAgICAgICAgICBvZmZz
ZXRGcm9tRlAgKyBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xvdC0+Ynl0ZVNpemUoKSksCisgICAg
ICAgICAgICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpLAorICAgICAgICAgICAgb3RoZXJTbG90
LT5vZmZzZXRGcm9tRlAoKSArIHN0YXRpY19jYXN0PGludHB0cl90PihvdGhlclNsb3QtPmJ5dGVT
aXplKCkpKTsKKyAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIkFzc2lnbmVkICIs
IHBvaW50ZXJEdW1wKHNsb3QpLCAiIHRvICIsIG9mZnNldEZyb21GUCwgIlxuIik7CisgICAgc2xv
dC0+c2V0T2Zmc2V0RnJvbUZQKG9mZnNldEZyb21GUCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgYXNzaWduKFN0YWNrU2xvdCogc2xvdCwgY29uc3QgVmVjdG9yPFN0YWNrU2xvdCo+JiBv
dGhlclNsb3RzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJBdHRlbXB0
aW5nIHRvIGFzc2lnbiAiLCBwb2ludGVyRHVtcChzbG90KSwgIiB3aXRoIGludGVyZmVyZW5jZSAi
LCBwb2ludGVyTGlzdER1bXAob3RoZXJTbG90cyksICJcbiIpOworICAgIAorICAgIGlmIChhdHRl
bXB0QXNzaWdubWVudChzbG90LCAtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXpl
KCkpLCBvdGhlclNsb3RzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChTdGFja1Nsb3Qq
IG90aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhlclNsb3QtPm9mZnNl
dEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJvb2wgZGlkQXNzaWdu
ID0gYXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgICAgICAgICBzbG90LCBvdGhlclNsb3QtPm9mZnNl
dEZyb21GUCgpIC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkpLCBvdGhl
clNsb3RzKTsKKyAgICAgICAgaWYgKGRpZEFzc2lnbikKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIGFub255
bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCit7CisgICAg
UGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrIik7CisKKyAgICAvLyBB
bGxvY2F0ZSBhbGwgb2YgdGhlIGxvY2tlZCBzbG90cyBpbiBvcmRlci4gVGhpcyBpcyBraW5kIG9m
IGEgY3JhenkgYWxnb3JpdGhtIHRvIGFsbG93IGZvcgorICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBv
ZiBzdGFjayBzbG90cyBiZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVu
IGdldCBoZXJlLgorICAgIEFTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7CisgICAgVmVjdG9yPFN0
YWNrU2xvdCo+IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90czsKKyAgICBWZWN0b3I8U3RhY2tTbG90
Kj4gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0OworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDog
Y29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgc3dpdGNoIChzbG90LT5raW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgICAgICBpZiAoc2xvdC0+
b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3Rz
LmFwcGVuZChzbG90KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2NrZWRT
dGFja1Nsb3RzV29ya2xpc3QuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICAgICAgaWYgKHNsb3Qt
Pm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQXMgYSBtYXR0ZXIgb2Ygc2Fu
aXR5LCB1bmFzc2lnbiB0aGlzLiBNYXliZSBpdCB3b3VsZCBiZSBnb29kIHRvIGV2ZW4gaGF2ZSBh
CisgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBydWxlIHRoYXQgdGhpcyBjYW5ub3QgaGFw
cGVuLgorICAgICAgICAgICAgICAgIHNsb3QtPnNldE9mZnNldEZyb21GUCgwKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIC8vIFRoaXMg
aXMgYSBmYWlybHkgZXhwZW5zaXZlIGxvb3AsIGJ1dCBpdCdzIE9LIGJlY2F1c2Ugd2UnbGwgdXN1
YWxseSBvbmx5IGhhdmUgYSBoYW5kZnVsIG9mCisgICAgLy8gbG9ja2VkIHN0YWNrIHNsb3RzLgor
ICAgIHdoaWxlICghbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAg
ICBTdGFja1Nsb3QqIHNsb3QgPSBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QudGFrZUxhc3QoKTsK
KyAgICAgICAgYXNzaWduKHNsb3QsIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cyk7CisgICAgICAg
IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAgfQorCisgICAgLy8g
Tm93IHdlIGhhbmRsZSB0aGUgYW5vbnltb3VzIHNsb3RzLiBOb3RlIHRoYXQgdGhlb3JldGljYWxs
eSB3ZSBzaG91bGQgZG8gYW4gZXNjYXBlIGFuYWx5c2lzCisgICAgLy8gaGVyZS4gQnV0LCBjdXJy
ZW50bHkgQWlyIGRvZXNuJ3Qgc3VwcG9ydCBlc2NhcGluZyBhIFN0YWNrU2xvdCEKKyAgICAvLyBG
SVhNRTogQWRkIHN1cHBvcnQgZm9yIGVzY2FwaW5nIGEgU3RhY2tTbG90IGFuZCBhZGQgZXNjYXBl
IGFuYWx5c2lzIHRvIGFsbG9jYXRlU3RhY2soKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDMwCisKKyAgICBhdXRvIGlzUmVsZXZhbnQgPSBbXSAo
Y29uc3QgQXJnJiBhcmcpIC0+IGJvb2wgeworICAgICAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAm
JiBhcmcuc3RhY2tTbG90KCktPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM7Cisg
ICAgfTsKKworICAgIExpdmVuZXNzPEFyZz4gbGl2ZW5lc3MoY29kZSk7CisgICAgSW5kZXhNYXA8
U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Ns
b3RzKCkuc2l6ZSgpKTsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CisKKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxBcmc+OjpMb2Nh
bENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgYXV0byBpbnRlcmZl
cmUgPSBbJl0gKEluc3QmIGluc3QpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkludGVyZmVyaW5nOiAiLCBsaXN0RHVtcChsb2NhbENhbGMubGl2
ZSgpKSwgIlxuIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvcm0gYSBjbGlxdWUg
b2Ygc3RhY2sgc2xvdHMgdGhhdCBpbnRlcmZlcmUuIEZpcnN0IGZpbmQgdGhlIGxpc3Qgb2Ygc3Rh
Y2sgc2xvdHMKKyAgICAgICAgICAgIC8vIHRoYXQgYXJlIGxpdmUgcmlnaHQgbm93LgorICAgICAg
ICAgICAgc2xvdHMucmVzaXplKDApOworICAgICAgICAgICAgZm9yIChBcmcgYXJnIDogbG9jYWxD
YWxjLmxpdmUoKSkgeworICAgICAgICAgICAgICAgIGlmIChpc1JlbGV2YW50KGFyZykpCisgICAg
ICAgICAgICAgICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tTbG90KCkpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAvLyBXZSBtdXN0bid0IG1hbmRhdGUgdGhhdCB0aGUgaW5wdXQg
Y29kZSBpcyBvcHRpbWFsLiBUaGVyZWZvcmUsIGl0IG1heSBoYXZlIGRlYWQgc3RvcmVzCisgICAg
ICAgICAgICAvLyB0byB0aGUgc3RhY2suIFdlIG5lZWQgdG8gdHJlYXQgdGhlc2UgYXMgaW50ZXJm
ZXJpbmcuCisgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSAmJiBpc1JlbGV2YW50KGFyZykgJiYgIWxvY2FsQ2Fs
Yy5saXZlKCkuY29udGFpbnMoYXJnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RzLmFw
cGVuZChhcmcuc3RhY2tTbG90KCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAg
U2xvdHM6ICIsIHBvaW50ZXJMaXN0RHVtcChzbG90cyksICJcbiIpOworICAgICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNsb3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAg
ICAgU3RhY2tTbG90KiBvdXRlciA9IHNsb3RzW2ldOworICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaiA9IGkgKyAxOyBqIDwgc2xvdHMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAg
ICAgICAgU3RhY2tTbG90KiBpbm5lciA9IHNsb3RzW2pdOworCisgICAgICAgICAgICAgICAgICAg
IGludGVyZmVyZW5jZVtpbm5lcl0uYWRkKG91dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaW50
ZXJmZXJlbmNlW291dGVyXS5hZGQoaW5uZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJs
b2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiQW5hbHl6aW5nOiAiLCBibG9jay0+YXQoaW5zdEluZGV4
KSwgIlxuIik7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7
CisgICAgICAgICAgICBpbnRlcmZlcmUoaW5zdCk7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhl
Y3V0ZShpbnN0KTsKKyAgICAgICAgfQorICAgICAgICBJbnN0IG5vcDsKKyAgICAgICAgaW50ZXJm
ZXJlKG5vcCk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZm9yIChTdGFj
a1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIklu
dGVyZmVyZW5jZSBvZiAiLCBwb2ludGVyRHVtcChzbG90KSwgIjogIiwgcG9pbnRlckxpc3REdW1w
KGludGVyZmVyZW5jZVtzbG90XSksICJcbiIpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBhc3Np
Z24gc3RhY2sgbG9jYXRpb25zLiBBdCBpdHMgaGVhcnQgdGhpcyBhbGdvcml0aG0gaXMganVzdCBm
aXJzdC1maXQuIEZvciBlYWNoCisgICAgLy8gU3RhY2tTbG90IHdlIGp1c3Qgd2FudCB0byBmaW5k
IHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHplcm8gd2hpbGUgZW5zdXJpbmcg
bm8KKyAgICAvLyBvdmVybGFwIHdpdGggb3RoZXIgU3RhY2tTbG90cyB0aGF0IHRoaXMgb3Zlcmxh
cHMgd2l0aC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90czsKKyAgICBmb3IgKFN0
YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGlmIChzbG90LT5v
ZmZzZXRGcm9tRlAoKSkgeworICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZz
ZXQuCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hTZXQ8
U3RhY2tTbG90Kj4mIGludGVyZmVyaW5nU2xvdHMgPSBpbnRlcmZlcmVuY2Vbc2xvdF07CisgICAg
ICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCkgKyBp
bnRlcmZlcmluZ1Nsb3RzLnNpemUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdGhl
clNsb3RzW2ldID0gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzW2ldOworICAgICAgICB1bnNpZ25l
ZCBuZXh0SW5kZXggPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOworICAgICAgICBm
b3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogaW50ZXJmZXJpbmdTbG90cykKKyAgICAgICAgICAg
IG90aGVyU2xvdHNbbmV4dEluZGV4KytdID0gb3RoZXJTbG90OworCisgICAgICAgIGFzc2lnbihz
bG90LCBvdGhlclNsb3RzKTsKKyAgICB9CisKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHN0
YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFjayBzbG90cy4KKyAgICB1bnNpZ25lZCBmcmFtZVNpemVG
b3JTdGFja1Nsb3RzID0gMDsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tT
bG90cygpKSB7CisgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBzdGQ6Om1heCgKKyAg
ICAgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMsCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oLXNsb3QtPm9mZnNldEZyb21GUCgpKSk7CisgICAgfQorCisgICAgZnJhbWVT
aXplRm9yU3RhY2tTbG90cyA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVu
dEJ5dGVzKCksIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMpOworCisgICAgLy8gTm93IHdlIG5lZWQg
dG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50IGFyZWEgd2UgbmVlZC4KKyAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2sp
IHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBu
b3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4IGJ5dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0IHRo
YXQncyBub3QKKyAgICAgICAgICAgICAgICAgICAgLy8gc3VjaCBhbiBhd2Vzb21lIGFzc3VtcHRp
b24uCisgICAgICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChhcmcu
b2Zmc2V0KCkgPj0gMCk7CisgICAgICAgICAgICAgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdB
cmVhU2l6ZShhcmcub2Zmc2V0KCkgKyA4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb2RlLnNldEZyYW1lU2l6ZShmcmFtZVNpemVG
b3JTdGFja1Nsb3RzICsgY29kZS5jYWxsQXJnQXJlYVNpemUoKSk7CisKKyAgICAvLyBGaW5hbGx5
LCB0cmFuc2Zvcm0gdGhlIGNvZGUgdG8gdXNlIEFkZHIncyBpbnN0ZWFkIG9mIFN0YWNrU2xvdCdz
LiBUaGlzIGlzIGEgbG9zc2xlc3MKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBzaW5jZSB3ZSBjYW4g
c2VhcmNoIHRoZSBTdGFja1Nsb3RzIGFycmF5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggU3RhY2tTbG90
IGFueQorICAgIC8vIG9mZnNldC1mcm9tLUZQIHJlZmVycyB0by4KKworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykg
eworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAg
ICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFj
azoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAg
ICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGFyZy5zdGFja1Nsb3QoKS0+b2Zmc2V0RnJvbUZQKCkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
Q2FsbEFyZzoKKyAgICAgICAgICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAorICAgICAgICAg
ICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlyQWxsb2NhdGVTdGFja19oCisjZGVmaW5lIEFpckFsbG9jYXRlU3RhY2tf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGFsbG9jYXRlcyBTdGFj
a1Nsb3RzIHRvIHBsYWNlcyBvbiB0aGUgc3RhY2suIEl0IGZpcnN0IGFsbG9jYXRlcyB0aGUgcGlu
bmVkIG9uZXMgaW4gaW5kZXgKKy8vIG9yZGVyIGFuZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVz
dCB1c2luZyBmaXJzdCBmaXQuCisKK3ZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJik7CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBBaXJBbGxvY2F0ZVN0YWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJBaXJBcmcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBBcmc6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNh
c2UgSW52YWxpZDoKKyAgICAgICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgVG1wOgorICAgICAgICBvdXQucHJpbnQodG1wKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBJbW06CisgICAgICAgIG91dC5wcmludCgiJCIsIG1fb2Zmc2V0KTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIG91dC5wcmludGYoIiQw
eCVsbHgiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFkZHI6CisgICAg
ICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAg
ICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgSW5kZXg6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChv
ZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwgIiwiLCBpbmRleCgpKTsK
KyAgICAgICAgaWYgKHNjYWxlKCkgIT0gMSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNj
YWxlKCkpOworICAgICAgICBvdXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU3RhY2s6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChv
ZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIHBvaW50ZXJEdW1wKHN0YWNrU2xvdCgp
KSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgaWYg
KG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0
LnByaW50KCIoY2FsbEFyZykiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVsQ29uZDoK
KyAgICAgICAgb3V0LnByaW50KGFzUmVsYXRpb25hbENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVzdWx0Q29uZGl0
aW9uKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBvdXQu
cHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpckFyZ19oCisjZGVmaW5lIEFpckFyZ19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1R5cGUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBTcGVjaWFsOworY2xhc3MgU3RhY2tTbG90OworCisvLyBUaGlzIGNsYXNzIG5hbWUgaXMg
YWxzbyBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2Ugd2lsbCBzYXkgaXQgYSBsb3QuIFlv
dSdsbCBzZWUgY29kZSBsaWtlCisvLyBJbnN0KC4uLiwgQXJnOjppbW0oNSksIEFyZzo6YWRkcih0
aGluZywgYmxhaCksIC4uLikKK2NsYXNzIEFyZyB7CitwdWJsaWM6CisgICAgLy8gVGhlc2UgZW51
bSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2UgaGF2ZSB0byBtZW50
aW9uIHRoZW0gYSBsb3QuCisgICAgZW51bSBLaW5kIDogaW50OF90IHsKKyAgICAgICAgSW52YWxp
ZCwKKyAgICAgICAgVG1wLAorICAgICAgICBJbW0sCisgICAgICAgIEltbTY0LAorICAgICAgICBB
ZGRyLAorICAgICAgICBTdGFjaywKKyAgICAgICAgQ2FsbEFyZywKKyAgICAgICAgSW5kZXgsCisg
ICAgICAgIFJlbENvbmQsCisgICAgICAgIFJlc0NvbmQsCisgICAgICAgIFNwZWNpYWwKKyAgICB9
OworCisgICAgZW51bSBSb2xlIDogaW50OF90IHsKKyAgICAgICAgVXNlLAorICAgICAgICBEZWYs
CisgICAgICAgIFVzZURlZgorICAgIH07CisKKyAgICBlbnVtIFR5cGUgOiBpbnQ4X3QgeworICAg
ICAgICBHUCwKKyAgICAgICAgRlAKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bVR5cGVzID0gMjsKKworICAgIHN0YXRpYyBib29sIGlzVXNlKFJvbGUgcm9sZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2Fz
ZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEZWY6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc0RlZihSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAg
ICAgICAgY2FzZSBVc2U6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2Ug
RGVmOgorICAgICAgICBjYXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgc3RhdGljIFR5cGUgdHlwZUZvckIzVHlwZShCMzo6VHlwZSB0
eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVm9pZDoK
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEdQ
OworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAg
cmV0dXJuIEdQOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBGUDsK
KyAgICAgICAgfQorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJu
IEdQOworICAgIH0KKworICAgIEFyZygpCisgICAgICAgIDogbV9raW5kKEludmFsaWQpCisgICAg
eworICAgIH0KKworICAgIEFyZyhBaXI6OlRtcCB0bXApCisgICAgICAgIDogbV9raW5kKFRtcCkK
KyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGlt
bShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW02NChpbnRwdHJf
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBhZGRyKEFpcjo6VG1wIGJhc2Us
IGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7
CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBZGRyOworICAg
ICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zm
c2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3Rh
Y2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAg
QXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAgICAgICByZXN1
bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKyAgICAgICAgcmVz
dWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkga25vdywgeXVjay4KKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGNhbGxBcmcoaW50MzJfdCBvZmZzZXQpCisg
ICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ2FsbEFy
ZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNpZ25lZCBzY2Fs
ZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAg
ICAgICBjYXNlIDI6CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9nU2NhbGUodW5z
aWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNh
c2UgMToKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAg
ICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAg
ICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiAzOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBBcmcgaW5kZXgoQWlyOjpUbXAgYmFzZSwgQWly
OjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxlID0gMSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGluZGV4Lmlz
R1AoKSk7CisgICAgICAgIEFTU0VSVChpc1ZhbGlkU2NhbGUoc2NhbGUpKTsKKyAgICAgICAgQXJn
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEluZGV4OworICAgICAgICByZXN1bHQu
bV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1faW5kZXggPSBpbmRleDsKKyAgICAgICAg
cmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2FzdDxpbnQzMl90PihzY2FsZSk7CisgICAgICAgIHJl
c3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRp
b24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlc0NvbmQo
TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAg
ICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gUmVzQ29uZDsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lhbChBaXI6OlNwZWNpYWwqIHNwZWNpYWwpCisgICAg
eworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3BlY2lhbDsK
KyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0PGludHB0cl90PihzcGVjaWFs
KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9
PSBvdGhlci5tX29mZnNldAorICAgICAgICAgICAgJiYgbV9raW5kID09IG90aGVyLm1fa2luZAor
ICAgICAgICAgICAgJiYgbV9iYXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9p
bmRleCA9PSBvdGhlci5tX2luZGV4CisgICAgICAgICAgICAmJiBtX3NjYWxlID09IG90aGVyLm1f
c2NhbGU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFyZyYgb3RoZXIpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFyZygp
OyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2lu
ZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBraW5kKCkgPT0gVG1wOworICAgIH0KKworICAgIGJvb2wgaXNJbW0oKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW07CisgICAgfQorCisgICAgYm9vbCBpc0ltbTY0
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tNjQ7CisgICAgfQor
CisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9
PSBBZGRyOworICAgIH0KKworICAgIGJvb2wgaXNTdGFjaygpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4ga2luZCgpID09IFN0YWNrOworICAgIH0KKworICAgIGJvb2wgaXNDYWxsQXJnKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQ2FsbEFyZzsKKyAgICB9CisK
KyAgICBib29sIGlzSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9
PSBJbmRleDsKKyAgICB9CisKKyAgICBib29sIGlzUmVsQ29uZCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4ga2luZCgpID09IFJlbENvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1Jlc0Nv
bmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZXNDb25kOworICAg
IH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBr
aW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgfHwgaXNTdGFjaygpOworICAgIH0KKworICAgIEFp
cjo6VG1wIHRtcCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRtcCk7
CisgICAgICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgaW50NjRfdCB2YWx1ZSgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEltbSB8fCBraW5kKCkgPT0gSW1t
NjQpOworICAgICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgfQorCisgICAgdm9pZCogcG9pbnRl
clZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW1tNjQpOwor
ICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4o
bV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCBiYXNlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAg
ICByZXR1cm4gbV9iYXNlOworICAgIH0KKworICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAg
ICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEluZGV4
OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaW50MzJfdCBvZmZz
ZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykKKyAgICAgICAg
ICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX3NjYWxlKTsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7
CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCk7CisgICAgfQor
CisgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RhY2tTbG90
Kj4obV9vZmZzZXQpOworICAgIH0KKworICAgIEFpcjo6VG1wIGluZGV4KCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9pbmRl
eDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICBB
U1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fc2NhbGU7CisgICAgfQor
CisgICAgdW5zaWduZWQgbG9nU2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxv
Z1NjYWxlKHNjYWxlKCkpOworICAgIH0KKworICAgIEFpcjo6U3BlY2lhbCogc3BlY2lhbCgpIGNv
bnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFNwZWNpYWwpOworICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAg
ICBib29sIGlzR1BUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYg
dG1wKCkuaXNHUCgpOworICAgIH0KKworICAgIGJvb2wgaXNGUFRtcCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQKCk7CisgICAgfQorICAgIAorICAg
IC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCBy
ZXF1aXJlcyBhIEdQIHZhbHVlLgorICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAg
ICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBJbW02
NDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNl
IFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAg
ICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNHUFRt
cCgpOworICAgICAgICBjYXNlIEludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNl
ZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBGUCB2YWx1ZS4KKyAgICBib29sIGlzRlAo
KSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJ
bW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAg
ICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAg
ICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW1tNjQ6
IC8vIFllcywgd2UgYWxsb3cgSW1tNjQgYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhp
cyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFwcy4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQVG1wKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBib29sIGhhc1R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgU3BlY2lhbDoK
KyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICAvLyBUaGUgdHlwZSBpcyBhbWJpZ3VvdXMgZm9yIHNvbWUgYXJnIGtpbmRzLiBDYWxsIHdp
dGggY2FyZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
R1AoKSA/IEdQIDogRlA7CisgICAgfQorCisgICAgYm9vbCBpc1R5cGUoVHlwZSB0eXBlKSBjb25z
dAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAg
ICAgICAgICByZXR1cm4gaXNHUCgpOworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0
dXJuIGlzRlAoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKKyAgICB9CisK
KyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncHIo
KTsKKyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBpc1RtcCgpICYmIHRtcCgpLmlzRlBSKCk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnByKCk7CisgICAgfQorICAgIAorICAg
IGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1w
KCkuaXNSZWcoKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0bXAoKS5yZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncFRtcEluZGV4KCk7CisgICAgfQor
CisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dG1wKCkuZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS50bXBJbmRleCgpOworICAgIH0KKworICAg
IEFyZyB3aXRoT2Zmc2V0KGludDMyX3QgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIGlmICghaGFzT2Zmc2V0KCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAg
ICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJfdD4ob2Zmc2V0KCksIGFkZGl0aW9uYWxPZmZzZXQp
KQorICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgewor
ICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICByZXR1cm4gYWRkcihiYXNlKCksIG9mZnNl
dCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAg
ICByZXR1cm4gc3RhY2soc3RhY2tTbG90KCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7
CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgICAgIHJldHVybiBjYWxsQXJnKG9mZnNl
dCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAg
ICByZXR1cm4gaW5kZXgoYmFzZSgpLCBpbmRleCgpLCBzY2FsZSgpLCBvZmZzZXQoKSArIGFkZGl0
aW9uYWxPZmZzZXQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNo
VG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoICht
X2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAg
ICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElu
ZGV4OgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgZnVuY3Rvciht
X2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3Vn
aCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2ls
bCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0
aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVyYXgsICglcmN4KQorICAgIC8vCisgICAgLy8gVGhp
cyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJvbGUgYXJnUm9sZSwgVHlwZSBhcmdUeXBlLCBjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAg
ICAgICAgY2FzZSBUbXA6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgYXJnUm9sZSwgYXJn
VHlwZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAg
ICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgSW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAg
ICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3Nl
bWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAg
IH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02
NCBhc1RydXN0ZWRJbW02NCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW02NCgp
KTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQodmFsdWUoKSk7
CisgICAgfQorI2VuZGlmCisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciBhc1Ry
dXN0ZWRJbW1QdHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzNjRCaXQoKSkKKyAgICAg
ICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NF
UlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cihwb2ludGVyVmFsdWUoKSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3Mg
YXNBZGRyZXNzKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0FkZHIoKSk7CisgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIHN0YXRpY19j
YXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJh
c2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbmRl
eCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAg
ICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXguZ3ByKCksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1i
bGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90
PihtX29mZnNldCkpOworICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29u
ZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoaXNSZWxDb25kKCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJs
ZXI6OlJlbGF0aW9uYWxDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBNYWNyb0Fz
c2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGFzUmVzdWx0Q29uZGl0aW9uKCkgY29uc3QKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc1Jlc0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmcoV1RGOjpIYXNoVGFi
bGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1fYmFzZShXVEY6Okhhc2hUYWJsZURlbGV0
ZWRWYWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gQXJnKFdURjo6SGFzaFRh
YmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIC8vIFRoaXMgcmVhbGx5IGRvZXNuJ3QgaGF2ZSB0byBiZSB0aGF0IGdyZWF0
LgorICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludDY0X3Q+OjpoYXNoKG1fb2Zmc2V0KSAr
IG1fa2luZCArIG1fc2NhbGUgKyBtX2Jhc2UuaGFzaCgpICsKKyAgICAgICAgICAgIG1faW5kZXgu
aGFzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fb2Zmc2V0IHsgMCB9Owor
ICAgIEtpbmQgbV9raW5kIHsgSW52YWxpZCB9OworICAgIGludDMyX3QgbV9zY2FsZSB7IDEgfTsK
KyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAgQWlyOjpUbXAgbV9pbmRleDsKK307CisKK3N0cnVj
dCBBcmdIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBBcmcmIGtleSkgeyBy
ZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEFyZyYgYSwg
Y29uc3QgQXJnJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBz
YWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxK
U0M6OkIzOjpBaXI6OkFyZz4geworICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpBcmdIYXNoIEhh
c2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBs
YXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpBcmc+IDogU2ltcGxlQ2xhc3NI
YXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgLy8gQmVjYXVzZSBtX3NjYWxlIGlz
IDEgaW4gdGhlIGVtcHR5IHZhbHVlLgorICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJ
c1plcm8gPSBmYWxzZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckFyZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29u
c3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9ICIjIjsKKworYm9vbCBCYXNp
Y0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4g
QjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpy
ZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6OnJl
bW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZXBs
YWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAg
cmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOworfQorCit2b2lk
IEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6
IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOworICAgIGZvciAoY29uc3QgSW5z
dCYgaW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbnN0LCAiXG4iKTsK
K30KKworQmFzaWNCbG9jazo6QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1
ZW5jeSkKKyAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kp
Cit7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2lj
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJh
c2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmFzaWNC
bG9ja19oCisjZGVmaW5lIEFpckJhc2ljQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKyNp
bmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CitjbGFzcyBJbnNlcnRp
b25TZXQ7CisKK2NsYXNzIEJhc2ljQmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJh
c2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0
YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4OworCisgICAgdHlwZWRlZiBWZWN0b3I8
SW5zdD4gSW5zdExpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRl
Y2Vzc29yTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nl
c3Nvckxpc3Q7CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7
IH0KKyAgICAKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXpl
KCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2luc3RzLmJl
Z2luKCk7IH0KKyAgICBJbnN0TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9pbnN0cy5l
bmQoKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisKKyAgICBjb25zdCBJbnN0JiBhdChz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisgICAgSW5zdCYg
YXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorCisgICAgY29uc3Qg
SW5zdCYgbGFzdCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisgICAgSW5zdCYg
bGFzdCgpIHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBJbnN0PgorICAgIHZvaWQgYXBwZW5kSW5zdChJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAg
IG1faW5zdHMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSk7CisgICAgfQorCisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50
cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKEluc3Qoc3Rk
Ojpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIC8vIFRo
ZSAiMCIgY2FzZSBpcyB0aGUgY2FzZSB0byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUg
InRoZW4iIGNhc2UuIFRoZSAiMSIgY2FzZSBpcyB0aGUKKyAgICAvLyAiZWxzZSIgY2FzZSwgYW5k
IGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBmYWxsLXRocm91Z2ggb2YgYSBjb25kaXRpb25hbCBi
cmFuY2guCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3Vj
Y2Vzc29ycy5zaXplKCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVk
IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVl
bnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29y
c1tpbmRleF07IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Qg
eyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygp
IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorCisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxv
Y2sodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2so
KTsgfQorICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgeyBy
ZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlv
bjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlz
dD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBC
YXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9j
aywgY29uc3QgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBudW1QcmVkZWNlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXpl
KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9wcmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRl
Y2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0K
KyAgICBjb25zdCBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fcHJlZGVjZXNzb3JzOyB9CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7
IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorCisgICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNp
Y0Jsb2NrKik7CisgICAgYm9vbCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAg
Ym9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8p
OworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVt
cChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2Rl
OworICAgIGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAgCisgICAgQmFzaWNCbG9jayh1
bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIEluc3RMaXN0IG1faW5zdHM7CisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7
CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1
ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVl
cEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxv
Y2soYmxvY2spCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Jsb2Nr
LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxu
dWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2Nr
OworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Js
b2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckJhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2Fs
bFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ0NhbGxTcGVjaWFsOjpDQ2FsbFNwZWNpYWwo
KQoreworICAgIG1fY2xvYmJlcmVkUmVncyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsK
KyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMo
KSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFy
ZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Cit9CisKK0NDYWxsU3BlY2lhbDo6fkNDYWxsU3Bl
Y2lhbCgpCit7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3Qs
IGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sK
KyAgICBjYWxsYmFjayhpbnN0LmFyZ3NbMV0sIEFyZzo6VXNlLCBBcmc6OkdQKTsKKyAgICAKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIC8vIEZvciB0aGUgdHlwZSwgd2UgY2FuIGp1c3QgcXVlcnkgdGhlIGFyZydzIHR5cGUuIFRo
ZSBhcmcgd2lsbCBoYXZlIGEgdHlwZSwgYmVjYXVzZSB3ZQorICAgICAgICAvLyByZXF1aXJlIHRo
ZXNlIGFyZ3MgdG8gYmUgYXJndW1lbnQgcmVnaXN0ZXJzLgorICAgICAgICBjYWxsYmFjayhpbnN0
LmFyZ3NbaV0sIEFyZzo6VXNlLCBpbnN0LmFyZ3NbaV0udHlwZSgpKTsKKyAgICB9Cit9CisKK2Jv
b2wgQ0NhbGxTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJn
cy5zaXplKCkgPCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGluc3Qu
YXJnc1sxXS5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBpZiAoaXMzMkJp
dCgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNl
IEFyZzo6SW1tNjQ6CisgICAgICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgY2FzZSBBcmc6
OkFkZHI6CisgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAg
ICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNHUCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGlmICghaW5zdC5hcmdzW2ldLmlzUmVnKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgaWYgKGluc3QuYXJnc1tpXSA9PSBUbXAoc2NyYXRjaFJlZ2lzdGVyKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K2Jvb2wgQ0NhbGxTcGVjaWFsOjphZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgp
Cit7CisgICAgLy8gQXJnIDEgY2FuIGJlIGEgc3RhY2sgYWRkcmVzcyBmb3Igc3VyZS4KKyAgICBp
ZiAoYXJnSW5kZXggPT0gMSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0
JiwgY29uc3QgUmVnaXN0ZXJTZXQmKQoreworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxT
cGVjaWFsOjpnZW5lcmF0ZShJbnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlv
bkNvbnRleHQmKQoreworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNh
c2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICBqaXQubW92ZShpbnN0
LmFyZ3NbMV0uYXNUcnVzdGVkSW1tUHRyKCksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGpp
dC5jYWxsKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpU
bXA6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNB
ZGRyZXNzKCkpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJu
IENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVj
aWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpCit7CisgICAgcmV0dXJuIG1fY2xvYmJlcmVk
UmVnczsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJDQ2FsbCIpOworfQorCit2b2lkIENDYWxsU3BlY2lh
bDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJmdW5jdGlvbiBjYWxsIHRoYXQgdXNlcyB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIik7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxT
cGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDQ2FsbFNw
ZWNpYWxfaAorI2RlZmluZSBBaXJDQ2FsbFNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBVc2UgdGhpcyBzcGVjaWFsIGZvciBjb25zdHJ1Y3Rp
bmcgYSBDIGNhbGwuIEFyZyAwIGlzIG9mIGNvdXJzZSBhIFNwZWNpYWwgYXJnIHRoYXQgcmVmZXJz
IHRvIHRoZQorLy8gQ0NhbGxTcGVjaWFsIG9iamVjdC4gQXJnIDEgaXMgdGhlIGNhbGxlZSwgYW5k
IGl0IGNhbiBiZSBhbiBJbW1QdHIsIGEgcmVnaXN0ZXIsIG9yIGFuIGFkZHJlc3MuIFRoZQorLy8g
cmVtYWluaW5nIGFyZ3MgYXJlIGp1c3QgdGhlIHNldCBvZiBhcmd1bWVudCByZWdpc3RlcnMgdXNl
ZCBieSB0aGlzIGNhbGwuIEZvciBhcmd1bWVudHMgdGhhdCBnbyB0bworLy8gdGhlIHN0YWNrLCB5
b3UgaGF2ZSB0byBkbyB0aGUgZ3J1bnQgd29yayBvZiBkb2luZyB0aG9zZSBzdGFjayBzdG9yZXMu
IEluIGZhY3QsIHRoZSBvbmx5IHJlYXNvbiB3aHkKKy8vIHdlIHNwZWNpZnkgdGhlIGFyZ3VtZW50
IHJlZ2lzdGVycyBhcyBhcmd1bWVudHMgdG8gYSBjYWxsIGlzIHNvIHRoYXQgdGhlIGxpdmVuZXNz
IGFuYWx5c2lzIGNhbiBzZWUKKy8vIHRoYXQgdGhleSBnZXQgdXNlZCBoZXJlLiBJdCB3b3VsZCBi
ZSB3cm9uZyB0byBhdXRvbWFnaWNhbGx5IHJlcG9ydCBhbGwgYXJndW1lbnQgcmVnaXN0ZXJzIGFz
IGJlaW5nCisvLyB1c2VkIGJlY2F1c2UgaWYgd2UgaGFkIGEgY2FsbCB0aGF0IGRpZG4ndCBwYXNz
IHRoZW0sIHRoZW4gdGhleSdkIGFwcGVhciB0byBiZSBsaXZlIHVudGlsIHNvbWUKKy8vIGNsb2Ji
ZXIgcG9pbnQgb3IgdGhlIHByb2xvZ3VlLCB3aGljaGV2ZXIgaGFwcGVuZWQgc29vbmVyLgorCitj
bGFzcyBDQ2FsbFNwZWNpYWwgOiBwdWJsaWMgU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ0NhbGxT
cGVjaWFsKCk7CisgICAgfkNDYWxsU3BlY2lhbCgpOworCisgICAgLy8gWW91IGNhbm5vdCB1c2Ug
dGhpcyByZWdpc3RlciB0byBwYXNzIGFyZ3VtZW50cy4gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQg
dGhpcyByZWdpc3RlciBpcyBub3QKKyAgICAvLyB1c2VkIGZvciBhcmd1bWVudHMgaW4gdGhlIEMg
Y2FsbGluZyBjb252ZW50aW9uLiBCeSB0aGUgd2F5LCB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHRo
YXQgY2F1c2VzCisgICAgLy8gdGhpcyBzcGVjaWFsIHRvIGJlIHNwZWNpZmljIHRvIEMgY2FsbHMu
CisgICAgc3RhdGljIGNvbnN0IEdQUlJlZyBzY3JhdGNoUmVnaXN0ZXIgPSBHUFJJbmZvOjpub25B
cmdHUFIwOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBT
Y29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wg
aXNWYWxpZChJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5z
aWduZWQgYXJnSW5kZXgpIG92ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJ
bnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBvdmVycmlkZTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1
bXAgZ2VuZXJhdGUoSW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3Zl
cnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0Jikg
b3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
KworcHJpdmF0ZToKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZFJlZ3M7Cit9OworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQWlyQ0NhbGxTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxz
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
Q29kZTo6Q29kZSgpCisgICAgOiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQoreworfQorCitD
b2RlOjp+Q29kZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBm
cmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBC
YXNpY0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayog
cmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9j
aykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tT
bG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVl
KiB2YWx1ZSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFj
a1Nsb3QoYnl0ZVNpemUsIG1fc3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7CisgICAg
U3RhY2tTbG90KiByZXN1bHQgPSBzbG90LmdldCgpOworICAgIG1fc3RhY2tTbG90cy5hcHBlbmQo
V1RGOjptb3ZlKHNsb3QpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTcGVjaWFsKiBDb2Rl
OjphZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQoreworICAgIFNw
ZWNpYWwqIHJlc3VsdCA9IHNwZWNpYWwuZ2V0KCk7CisgICAgbV9zcGVjaWFscy5hcHBlbmQoV1RG
Ojptb3ZlKHNwZWNpYWwpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitDQ2FsbFNwZWNpYWwq
IENvZGU6OmNDYWxsU3BlY2lhbCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAg
ICAgICBtX2NDYWxsU3BlY2lhbCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAg
ICAgICAgYWRkU3BlY2lhbChzdGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAg
IH0KKworICAgIHJldHVybiBtX2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJl
YWNoYWJpbGl0eSgpCit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30K
Kwordm9pZCBDb2RlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxv
Y2spKTsKKyAgICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQo
IlN0YWNrIHNsb3RzOlxuIik7CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tT
bG90cygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgcG9pbnRlckR1bXAoc2xvdCks
ICI6ICIsIGRlZXBEdW1wKHNsb3QpLCAiXG4iKTsKKyAgICB9CisgICAgaWYgKHNwZWNpYWxzKCku
c2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9y
IChTcGVjaWFsKiBzcGVjaWFsIDogc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgi
ICAgICIsIHBvaW50ZXJEdW1wKHNwZWNpYWwpLCAiOiAiLCBkZWVwRHVtcChzcGVjaWFsKSwgIlxu
Iik7CisgICAgfQorICAgIGlmIChtX2ZyYW1lU2l6ZSkKKyAgICAgICAgb3V0LnByaW50KCJGcmFt
ZSBzaXplOiAiLCBtX2ZyYW1lU2l6ZSwgIlxuIik7CisgICAgaWYgKG1fY2FsbEFyZ0FyZWFTaXpl
KQorICAgICAgICBvdXQucHJpbnQoIkNhbGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJnQXJl
YVNpemUsICJcbiIpOworICAgIGlmIChtX2NhbGxlZVNhdmVSZWdpc3RlcnMuc2l6ZSgpKQorICAg
ICAgICBvdXQucHJpbnQoIkNhbGxlZSBzYXZlczogIiwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzLCAi
XG4iKTsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBp
bmRleCkgY29uc3QKK3sKKyAgICB3aGlsZSAoaW5kZXggPCBzaXplKCkgJiYgIWF0KGluZGV4KSkK
KyAgICAgICAgaW5kZXgrKzsKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3Vuc2lnbmVkIENvZGU6
OmZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4g
ZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCArIDEpOworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjpm
aW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAoreworICAgIHJldHVybiBhdChm
aW5kTmV4dEJsb2NrSW5kZXgoYmxvY2stPmluZGV4KCkpKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwz
MTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBBaXJDb2RlX2gKKyNkZWZpbmUgQWlyQ29kZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNp
bmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKyNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5o
IgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBD
Q2FsbFNwZWNpYWw7CisKKy8vIFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRo
ZSBiYXJlIG1ldGFsLiBJdCByZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFuIHRoZQor
Ly8gZ2VuZXJhdGVkIG1hY2hpbmUgY29kZSAtIGZvciBleGFtcGxlIGlmIHlvdSdyZSBnZW5lcmF0
aW5nIDFNQiBvZiBtYWNoaW5lIGNvZGUsIHlvdSBuZWVkIGFib3V0CisvLyA0ME1CIG9mIEFpci4K
KworY2xhc3MgQ29kZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29kZSk7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgQ29kZSgpOworICAgIH5Db2RlKCk7
CisKKyAgICBCYXNpY0Jsb2NrKiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisK
KyAgICBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90
S2luZCwgU3RhY2tTbG90VmFsdWUqID0gbnVsbHB0cik7CisKKyAgICBTcGVjaWFsKiBhZGRTcGVj
aWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPik7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBzcGVj
aWFsIHlvdSBuZWVkIHRvIG1ha2UgYSBDIGNhbGwhCisgICAgQ0NhbGxTcGVjaWFsKiBjQ2FsbFNw
ZWNpYWwoKTsKKworICAgIFRtcCBuZXdUbXAoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0
dXJuIFRtcDo6Z3BUbXBGb3JJbmRleChtX251bUdQVG1wcysrKTsKKyAgICAgICAgY2FzZSBBcmc6
OkZQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6ZnBUbXBGb3JJbmRleChtX251bUZQVG1wcysr
KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIG51bVRtcHMoQXJnOjpUeXBlIHR5
cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQ
OgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtR1BUbXBzOworICAgICAgICBjYXNlIEFyZzo6RlA6
CisgICAgICAgICAgICByZXR1cm4gbV9udW1GUFRtcHM7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBjYWxsQXJnQXJlYVNpemUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxBcmdBcmVh
U2l6ZTsgfQorCisgICAgLy8gWW91IGNhbiBjYWxsIHRoaXMgYmVmb3JlIGNvZGUgZ2VuZXJhdGlv
biB0byBmb3JjZSBhIG1pbmltdW0gY2FsbCBhcmcgYXJlYSBzaXplLgorICAgIHZvaWQgcmVxdWVz
dENhbGxBcmdBcmVhU2l6ZSh1bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgbV9jYWxsQXJn
QXJlYVNpemUgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIG1fY2FsbEFyZ0FyZWFTaXplLAorICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
dGFja0FsaWdubWVudEJ5dGVzKCksIHNpemUpKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnJh
bWVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVNpemU7IH0KKworICAgIC8vIE9ubHkgcGhh
c2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbiBhcmUgYWxsb3dlZCB0byBzZXQgdGhpcy4gQ3Vy
cmVudGx5LCBvbmx5CisgICAgLy8gQWlyOjphbGxvY2F0ZVN0YWNrKCkgZG9lcyB0aGlzLgorICAg
IHZvaWQgc2V0RnJhbWVTaXplKHVuc2lnbmVkIGZyYW1lU2l6ZSkKKyAgICB7CisgICAgICAgIG1f
ZnJhbWVTaXplID0gZnJhbWVTaXplOworICAgIH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0
JiBjYWxsZWVTYXZlUmVnaXN0ZXJzKCkgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9
CisKKyAgICAvLyBSZWNvbXB1dGVzIHByZWRlY2Vzc29ycyBhbmQgZGVsZXRlcyB1bnJlYWNoYWJs
ZSBibG9ja3MuCisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1
cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sq
IG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQor
CisgICAgLy8gRmluZHMgdGhlIHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAh
PSBudWxsIGFuZCBpbmRleCcgPj0gaW5kZXguCisgICAgdW5zaWduZWQgZmluZEZpcnN0QmxvY2tJ
bmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3Qg
aW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+IGluZGV4Lgor
ICAgIHVuc2lnbmVkIGZpbmROZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisK
KyAgICBCYXNpY0Jsb2NrKiBmaW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqKSBjb25zdDsKKworICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAg
ICAgICAgIDogbV9jb2RlKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29kZSYgY29kZSwgdW5z
aWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29kZSgmY29kZSkKKyAgICAgICAgICAgICwg
bV9pbmRleChtX2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgpKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gbV9jb2RlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAg
ICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRl
eCA9IG1fY29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleChtX2luZGV4ICsgMSk7CisgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBjb25zdCBDb2RlKiBtX2NvZGU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Cisg
ICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIHNpemUoKSk7IH0KKworICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisg
ICAgICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90cy5zaXpl
KCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9jb2RlLm1fc3RhY2tTbG90c1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgU3RhY2tTbG90
KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0K
KworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVj
dGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNv
bGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9p
bmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisr
KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAg
ICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBj
b25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5z
aWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNv
bnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQo
KSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTdGFja1Nsb3Rz
Q29sbGVjdGlvbiBzdGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rp
b24oKnRoaXMpOyB9CisgICAgCisgICAgY2xhc3MgU3BlY2lhbHNDb2xsZWN0aW9uIHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFNwZWNpYWxzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQorICAg
ICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
dW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzLnNpemUoKTsg
fQorICAgICAgICBTcGVjaWFsKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9j
b2RlLm1fc3BlY2lhbHNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFNwZWNpYWwqIG9wZXJhdG9y
W10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3Io
KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAg
ICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWdu
ZWQgaW5kZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisg
ICAgICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBTcGVjaWFsKiBvcGVyYXRvciooKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3BlY2lhbHND
b2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4Owor
ICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJu
IGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25z
dCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFNwZWNpYWxzQ29sbGVjdGlvbiBzcGVjaWFs
cygpIGNvbnN0IHsgcmV0dXJuIFNwZWNpYWxzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKKyAg
ICAvLyBUaGUgbmFtZSBoYXMgdG8gYmUgYSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3Qg
ZG8gYW55IG1lbW9yeSBtYW5hZ2VtZW50IGZvciB0aGUgc3RyaW5nLgorICAgIHZvaWQgc2V0TGFz
dFBoYXNlTmFtZShjb25zdCBjaGFyKiBuYW1lKQorICAgIHsKKyAgICAgICAgbV9sYXN0UGhhc2VO
YW1lID0gbmFtZTsKKyAgICB9CisKKyAgICBjb25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29u
c3QgeyByZXR1cm4gbV9sYXN0UGhhc2VOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0
ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxTcGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBDQ2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVj
aWFsIHsgbnVsbHB0ciB9OworICAgIHVuc2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9OworICAgIHVu
c2lnbmVkIG1fbnVtRlBUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9
OworICAgIHVuc2lnbmVkIG1fY2FsbEFyZ0FyZWFTaXplIHsgMCB9OworICAgIFJlZ2lzdGVyQXRP
ZmZzZXRMaXN0IG1fY2FsbGVlU2F2ZVJlZ2lzdGVyczsKKyAgICBjb25zdCBjaGFyKiBtX2xhc3RQ
aGFzZU5hbWU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJs
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckZyZXF1ZW50ZWRCbG9ja19o
CisjZGVmaW5lIEFpckZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlw
ZWRlZiBHZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpckZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgor
I2luY2x1ZGUgIkFpckhhbmRsZUNhbGxlZVNhdmVzLmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVy
eXRoaW5nLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5o
IgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGdl
bmVyYXRlKENvZGUmIGNvZGUsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIGlmIChzaG91bGRW
YWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUpOworCisgICAgLy8gSWYgd2UncmUg
ZG9pbmcgc3VwZXIgdmVyYm9zZSBkdW1waW5nLCB0aGUgcGhhc2Ugc2NvcGUgb2YgYW55IHBoYXNl
IHdpbGwgYWxyZWFkeSBkbyBhIGR1bXAuCisgICAgaWYgKHNob3VsZER1bXBJUigpICYmICFzaG91
bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgYWlyOlxu
Iik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB3aGVy
ZSB3ZSBydW4gb3VyIG9wdGltaXphdGlvbnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KKyAgICAvLyBG
SVhNRTogQWRkIEFpciBvcHRpbWl6YXRpb25zLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTYKKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2Ugd291
bGQgaGF2ZSBhIHJlYWwgcmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGVuLCB3ZSBjb3VsZCB1c2Ugc3Bp
bGxFdmVyeXRoaW5nKCkKKyAgICAvLyBpbiBwbGFjZSBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9y
IG9ubHkgZm9yIHRlc3RpbmcuCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA0NTcKKyAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7CisKKyAg
ICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUgaXMgaW1w
bGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KKyAgICAvLyBkb2VzIHRoaW5n
cyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQgc2F2ZXMg
dGhlbS4KKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKKworICAgIC8vIFRoaXMgdHVybnMg
YWxsIFN0YWNrIGFuZCBDYWxsQXJnIEFyZ3MgaW50byBBZGRyIGFyZ3MgdGhhdCB1c2UgdGhlIGZy
YW1lIHBvaW50ZXIuIEl0IGRvZXMKKyAgICAvLyB0aGlzIGJ5IGZpcnN0LWZpdCBhbGxvY2F0aW5n
IHN0YWNrIHNsb3RzLiBJdCBzaG91bGQgYmUgcHJldHR5IGRhcm4gY2xvc2UgdG8gb3B0aW1hbCwg
c28gd2UKKyAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHZlcnkgbXVj
aC4KKyAgICBhbGxvY2F0ZVN0YWNrKGNvZGUpOworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBy
ZWFsbHkgaGF2ZSBhIGNvZGUgbGF5b3V0IG9wdGltaXphdGlvbiBoZXJlLgorICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NzgKKworICAgIC8vIEZJWE1F
OiBXZSBuZWVkIGEgbGF0ZSBsaXZlbmVzcyBhbmFseXNpcyBvdmVyIHJlZ2lzdGVycyB0byBmaWxs
IGluIHRoZQorICAgIC8vIFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoKS4KKyAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTExCisKKyAgICBpZiAo
c2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShjb2RlKTsKKworICAgIC8vIERv
IGEgZmluYWwgZHVtcCBvZiBBaXIuIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoaXMgZXZlbiBp
ZiB3ZSBhcmUgZG9pbmcgcGVyLXBoYXNlIGR1bXBpbmcsCisgICAgLy8gc2luY2UgdGhlIGZpbmFs
IGdlbmVyYXRpb24gaXMgbm90IGEgcGhhc2UuCisgICAgaWYgKHNob3VsZER1bXBJUigpKSB7Cisg
ICAgICAgIGRhdGFMb2coIkFpciBhZnRlciAiLCBjb2RlLmxhc3RQaGFzZU5hbWUoKSwgIiwgYmVm
b3JlIGdlbmVyYXRpb246XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAg
ICAvLyBBbmQgbm93LCB3ZSBnZW5lcmF0ZSBjb2RlLgorICAgIGppdC5lbWl0RnVuY3Rpb25Qcm9s
b2d1ZSgpOworICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoLWNvZGUu
ZnJhbWVTaXplKCkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisg
ICAgR2VuZXJhdGlvbkNvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmNvZGUgPSAmY29kZTsK
KyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6OkxhYmVsPiBibG9ja0xhYmVs
cyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CisKKyAgICBhdXRvIGxpbmsgPSBbJl0g
KENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiB0YXJnZXQpIHsKKyAgICAgICAg
aWYgKGJsb2NrTGFiZWxzW3RhcmdldF0uaXNTZXQoKSkgeworICAgICAgICAgICAganVtcC5saW5r
VG8oYmxvY2tMYWJlbHNbdGFyZ2V0XSwgJmppdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBibG9ja0p1bXBzW3RhcmdldF0uYXBwZW5kKGp1bXApOworICAgIH07
CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBibG9ja0p1
bXBzW2Jsb2NrXS5saW5rKCZqaXQpOworICAgICAgICBBU1NFUlQoYmxvY2stPnNpemUoKSA+PSAx
KTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCkgLSAxOyAr
K2kpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmF0KGkp
LmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGp1bXAs
ICFqdW1wLmlzU2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCku
b3Bjb2RlID09IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSA9
PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgY29udGludWU7CisKKyAg
ICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IFJldCkgeworICAgICAgICAgICAgLy8g
V2UgY3VycmVudGx5IGRvbid0IHJlcHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1ZS9lcGlsb2d1ZSBp
biBBaXIsIHNvIHdlIG5lZWQgdG8KKyAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVycmlkZS4K
KyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAgICAgaml0
LnJldCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmxhc3QoKS5nZW5lcmF0ZShqaXQs
IGNvbnRleHQpOworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spCisgICAgICAgICAg
ICBqdW1wID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICBzd2l0Y2ggKGJs
b2NrLT5udW1TdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgQVNT
RVJUKCFqdW1wLmlzU2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToK
KyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBsaW5rKGp1bXAsIGJs
b2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAgICBpZiAoYmxvY2stPnN1Y2Nlc3Nv
ckJsb2NrKDEpICE9IGNvZGUuZmluZE5leHRCbG9jayhibG9jaykpCisgICAgICAgICAgICAgICAg
bGluayhqaXQuanVtcCgpLCBibG9jay0+c3VjY2Vzc29yQmxvY2soMSkpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBm
b3IgKGF1dG8mIGxhdGVQYXRoIDogY29udGV4dC5sYXRlUGF0aHMpCisgICAgICAgIGxhdGVQYXRo
LT5ydW4oaml0LCBjb250ZXh0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpckdlbmVyYXRlX2gKKyNkZWZpbmUgQWlyR2VuZXJhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgdGFrZXMgYW4g
QWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQgb3B0aW9u
YWxseSBoYXNuJ3QgaGFkIGFueQorLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9lcyBib3Ro
IG9mIHRob3NlIHRoaW5ncywgYW5kIHRoZW4gZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5nIHRoZSBn
aXZlbgorLy8gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkgY2FsbCBj
YWxsYmFja3MgaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMKKy8vIGdlbmVyYXRpbmcuCit2
b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFp
ckdlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5l
cmF0ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
R2VuZXJhdGVkLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKy8vIFRoaXMgaXMgZ2VuZXJhdGVkIGJ5IG9w
Y29kZV9nZW5lcmF0b3IucmIuCisjaW5jbHVkZSAiQWlyT3Bjb2RlR2VuZXJhdGVkLmgiCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorI2RlZmluZSBBaXJH
ZW5lcmF0aW9uQ29udGV4dF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3Rm
L1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQgeworICAgIHR5cGVkZWYgdm9pZCBM
YXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7CisgICAg
dHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOworCisgICAgVmVj
dG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKKyAgICBDb2RlKiBjb2RlOworfTsKKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNh
bGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisj
aW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29kZSYgY29kZSkK
K3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImhhbmRsZUNhbGxlZVNhdmVzIik7
CisKKyAgICBSZWdpc3RlclNldCB1c2VkQ2FsbGVlU2F2ZXM7CisKKyAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsK
KyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAgICAgICAgWyZdIChU
bXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdCBmaXJzdCB3ZSBqdXN0IHJlY29y
ZCBhbGwgdXNlZCByZWdzLgorICAgICAgICAgICAgICAgICAgICB1c2VkQ2FsbGVlU2F2ZXMuc2V0
KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICAvLyBOb3cgd2UgZmlsdGVyIHRvIHJlYWxseSBnZXQgdGhlIGNhbGxlZSBzYXZlcy4KKyAgICB1
c2VkQ2FsbGVlU2F2ZXMuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkp
OworCisgICAgaWYgKCF1c2VkQ2FsbGVlU2F2ZXMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSBSZWdpc3Rl
ckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworCisgICAgc2l6ZV90IGJ5dGVTaXplID0g
MDsKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpCisgICAgICAgIGJ5dGVTaXplID0gc3RkOjptYXgoc3RhdGljX2Nhc3Q8
c2l6ZV90PigtZW50cnkub2Zmc2V0KCkpLCBieXRlU2l6ZSk7CisKKyAgICBTdGFja1Nsb3QqIHNh
dmVzQXJlYSA9IGNvZGUuYWRkU3RhY2tTbG90KGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kOjpMb2Nr
ZWQpOworICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgc2luY2Ugd2UgY291bGQgaGF2ZSBhbHJl
YWR5IHBpbm5lZCBhIGRpZmZlcmVudCBzdGFjayBzbG90IHRvIHRoaXMKKyAgICAvLyBhcmVhLiBB
bHNvLCBvdXIgcnVudGltZSBkb2VzIG5vdCByZXF1aXJlIHVzIHRvIHBpbiB0aGUgc2F2ZXMgYXJl
YS4gTWF5YmUgd2Ugc2hvdWxkbid0IHBpbiBpdD8KKyAgICBzYXZlc0FyZWEtPnNldE9mZnNldEZy
b21GUCgtYnl0ZVNpemUpOworCisgICAgYXV0byBhcmdGb3IgPSBbJl0gKGNvbnN0IFJlZ2lzdGVy
QXRPZmZzZXQmIGVudHJ5KSAtPiBBcmcgeworICAgICAgICByZXR1cm4gQXJnOjpzdGFjayhzYXZl
c0FyZWEsIGVudHJ5Lm9mZnNldCgpICsgYnl0ZVNpemUpOworICAgIH07CisKKyAgICBJbnNlcnRp
b25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIAorICAgIC8vIEZpcnN0IGluc2VydCBzYXZp
bmcgY29kZSBpbiB0aGUgcHJvbG9ndWUuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0
JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnQoCisgICAgICAgICAgICAwLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92ZSA6
IE1vdmVEb3VibGUsIGNvZGVbMF0tPmF0KDApLm9yaWdpbiwKKyAgICAgICAgICAgIFRtcChlbnRy
eS5yZWcoKSksIGFyZ0ZvcihlbnRyeSkpOworICAgIH0KKyAgICBpbnNlcnRpb25TZXQuZXhlY3V0
ZShjb2RlWzBdKTsKKworICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9yZSBjb2RlIGF0IGVwaWxvZ3Vl
cy4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBJbnN0JiBs
YXN0ID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgaWYgKGxhc3Qub3Bjb2RlICE9IFJldCkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNl
dCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICAgICAgaW5z
ZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICBibG9jay0+c2l6ZSgpIC0gMSwgZW50
cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBsYXN0Lm9yaWdpbiwKKyAgICAg
ICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKKyAgICAgICAgfQor
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVl
U2F2ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySGFu
ZGxlQ2FsbGVlU2F2ZXNfaAorI2RlZmluZSBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgcGhhc2UgaWRlbnRpZmllcyBjYWxsZWUt
c2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUgdGhlbSBpbiB0aGUK
Ky8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFuZGF0b3J5IHBoYXNl
LgorCisvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtlIHRoaXMgbW9yZSBpbnRlcmFj
dGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUKKy8vIHBvd2VyZnVsLgorLy8g
V2Ugc2hvdWxkIGhhdmUgc2hyaW5rIHdyYXBwaW5nOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTUwNDU4CisvLyBXZSBzaG91bGQgbWFrZSB0aGlzIGludGVyYWN0IHdp
dGggdGhlIGNsaWVudDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDQ1OQorCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBJbnNl
cnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgZXhlY3V0ZUluc2Vy
dGlvbnMoYmxvY2stPm1faW5zdHMsIG1faW5zZXJ0aW9ucyk7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisjZGVmaW5l
IEFpckluc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
SW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
Y2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIENvZGU7CisKK3R5cGVkZWYgV1RGOjpJbnNlcnRpb248
SW5zdD4gSW5zZXJ0aW9uOworCitjbGFzcyBJbnNlcnRpb25TZXQgeworcHVibGljOgorICAgIElu
c2VydGlvblNldChDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgIHsKKyAg
ICB9CisKKyAgICBDb2RlJiBjb2RlKCkgeyByZXR1cm4gbV9jb2RlOyB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kSW5zZXJ0aW9uKFQmJiBpbnNlcnRpb24pCisg
ICAgeworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxUPihpbnNlcnRp
b24pKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQgaW5z
ZXJ0SW5zdChzaXplX3QgaW5kZXgsIEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgYXBwZW5k
SW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKSk7Cisg
ICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lk
IGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7Cisg
ICAgICAgIGluc2VydEluc3QoaW5kZXgsIEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJn
dW1lbnRzKS4uLikpOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKik7CisK
K3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxJbnNlcnRpb24sIDg+IG1f
aW5zZXJ0aW9uczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnNlcnRpb25TZXRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKwordm9pZCBJbnN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KG9wY29kZSwgIiAiLCBsaXN0RHVtcChhcmdzKSk7CisgICAgaWYgKG9yaWdpbikg
eworICAgICAgICBpZiAoYXJncy5zaXplKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiwgIik7
CisgICAgICAgIG91dC5wcmludCgqb3JpZ2luKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlySW5zdF9oCisjZGVmaW5lIEFpckluc3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2luY2x1ZGUg
IkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxIZWxwZXJz
OworY2xhc3MgUmVnaXN0ZXJTZXQ7CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhbHVlOwor
CituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0OworCitzdHJ1Y3Qg
SW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBBcmdMaXN0OworCisg
ICAgSW5zdCgpCisgICAgICAgIDogb3JpZ2luKG51bGxwdHIpCisgICAgICAgICwgb3Bjb2RlKE5v
cCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9y
aWdpbikKKyAgICAgICAgOiBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUp
CisgICAgeworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBBcmcgYXJnLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3N7IGFyZywgYXJndW1lbnRzLi4uIH0KKyAg
ICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgewor
ICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgY29uc3QgQXJn
TGlzdCYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoYXJndW1lbnRzKQorICAgICAgICAsIG9y
aWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisg
ICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJndW1lbnRz
KQorICAgICAgICA6IGFyZ3MoV1RGOjptb3ZlKGFyZ3VtZW50cykpCisgICAgICAgICwgb3JpZ2lu
KG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICAv
LyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIgYmVjYXVz
ZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAorICAgIC8vIGVkaXQgSVIuIElS
IGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBhICJjb25z
dCBJbnN0JiIgdGhlbiB5b3UncmUKKyAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9uZy4KKwor
ICAgIC8vIFRoaXMgb25seSB3YWxrcyB0aG9zZSBUbXBzIHRoYXQgYXJlIGV4cGxpY2l0bHkgbWVu
dGlvbmVkLCBhbmQgaXQgZG9lc24ndCB0ZWxsIHlvdSB0aGVpciByb2xlCisgICAgLy8gb3IgdHlw
ZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZh
c3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoQXJnJiBhcmcg
OiBhcmdzKQorICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0KGZ1bmN0b3IpOworICAgIH0K
KworICAgIHR5cGVkZWYgdm9pZCBFYWNoQXJnQ2FsbGJhY2soQXJnJiwgQXJnOjpSb2xlLCBBcmc6
OlR5cGUpOworICAgIAorICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKGFyZywgcm9sZSwg
dHlwZSkuIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBvcGNvZGVf
Z2VuZXJhdG9yLnJiLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBm
b3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdp
dGggKHRtcCwgcm9sZSwgdHlwZSkuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAg
ICB2b2lkIGZvckVhY2hUbXAoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IGZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcChyb2xlLCB0
eXBlLCBmdW5jdG9yKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIFRoaW5nIGNh
biBiZSBlaXRoZXIgQXJnIG9yIFRtcC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZywgdHlw
ZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYpOworCisgICAg
Ly8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGEgU3BlY2lhbCouIFRoaXMg
dW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAgYm9vbCBoYXNTcGVjaWFsKCkg
Y29uc3Q7CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFsIHJlZ2lzdGVycyBjbG9iYmVy
ZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5jeSwKKyAgICAvLyBl
eHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRy
dWUuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpOworCisgICAg
Ly8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4gVGhpcyBzaG91
bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisgICAgLy8gdGhhdCBmb3IgZWZm
aWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgaWYgaGFzU3BlY2lhbCgp
IHJldHVybnMgdHJ1ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0
ZXJTZXQmKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gb25lIG9mIHRoZSB2YWxp
ZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAg
ICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNWYWxpZEZvcm0oKTsKKworICAg
IC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBmb3JtIHJpZ2h0IG5v
dywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisgICAgLy8gZm9ybXMgaWYg
d2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChvciBhIFN0YWNrU2xvdCBvciBD
YWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVuIGluZGV4PyBTcGlsbGluZyB1
c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvIGZpbmQgVG1wcyB0aGF0IG5l
ZWQgc3BpbGxpbmc7CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlzIHRvIHNl
ZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBhbiBBcmc6OkFkZHIuIElmIGl0
CisgICAgLy8gZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFyZydzIGZv
ckVhY2hUbXAgdG8gZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4KKyAgICAvLworICAgIC8vIFRo
aXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAg
ICBib29sIGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEdlbmVyYXRl
IHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBpcywgbGlrZSwgbGl0ZXJhbGx5
IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRlcm1pbmFsLCBpdCByZXR1cm5z
IHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0aGUgInRoZW4iIGNhc2UsIHdp
dGggdGhlICJlbHNlIgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10aHJvdWdoLiBUaGlzIGZ1bmN0
aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIEFyZ0xpc3QgYXJn
czsKKyAgICBWYWx1ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVlIHRoYXQgdGhpcyBvcmlnaW5h
dGVkIGZyb20uCisgICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJ
bnN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5zdElubGlu
ZXNfaAorI2RlZmluZSBBaXJJbnN0SW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCisjaW5jbHVk
ZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKyNpbmNsdWRlICJCM1Zh
bHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZvckVhY2g7Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBGb3JFYWNoPFRtcD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3Rh
dGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAg
IHsKKyAgICAgICAgaW5zdC5mb3JFYWNoVG1wKGZ1bmN0b3IpOworICAgIH0KK307Cit0ZW1wbGF0
ZTw+IHN0cnVjdCBGb3JFYWNoPEFyZz4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1bmN0b3IpOworICAgIH0KK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgordm9pZCBJbnN0
Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgRm9yRWFjaDxUaGluZz46
OmZvckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitpbmxpbmUgYm9vbCBJbnN0OjpoYXNTcGVj
aWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXJncy5zaXplKCkgJiYgYXJnc1swXS5pc1NwZWNp
YWwoKTsKK30KKworaW5saW5lIGNvbnN0IFJlZ2lzdGVyU2V0JiBJbnN0OjpleHRyYUNsb2JiZXJl
ZFJlZ3MoKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOworICAgIHJldHVybiBhcmdzWzBd
LnNwZWNpYWwoKS0+ZXh0cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsKK30KKworaW5saW5lIHZvaWQg
SW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cykKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICBhcmdzWzBdLnNwZWNpYWwoKS0+
cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lzdGVycyk7Cit9CisKK2lubGluZSBi
b29sIGlzU2hpZnRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworI2lmIENQVShYODYpIHx8IENQ
VShYODZfNjQpCisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9PSBUbXAoWDg2UmVnaXN0ZXJzOjpl
Y3gpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW5zdCk7CisgICAgcmV0dXJuIHRydWU7Cisj
ZW5kaWYKK30gICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbGlkKGNvbnN0IEluc3QmIGlu
c3QpCit7CisgICAgcmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckxp
dmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5j
bHVkZSAiQjNJbmRleFNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKKy8vIFlvdSBjYW4gY29tcHV0ZSBsaXZlbmVzcyBvdmVyIFRtcCdzIG9y
IG92ZXIgQXJnJ3MuIElmIHlvdSBjb21wdXRlIG92ZXIgQXJnJ3MsIHlvdSBnZXQgYm90aAorLy8g
c3RhY2sgbGl2ZW5lc3MgYW5kIHRtcCBsaXZlbmVzcy4KK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5n
PgorY2xhc3MgTGl2ZW5lc3MgeworcHVibGljOgorICAgIExpdmVuZXNzKENvZGUmIGNvZGUpCisg
ICAgeworICAgICAgICBtX2xpdmVBdEhlYWQucmVzaXplKGNvZGUuc2l6ZSgpKTsKKyAgICAgICAg
bV9saXZlQXRUYWlsLnJlc2l6ZShjb2RlLnNpemUoKSk7CisKKyAgICAgICAgSW5kZXhTZXQ8QmFz
aWNCbG9jaz4gc2VlbjsKKworICAgICAgICBib29sIGNoYW5nZWQgPSB0cnVlOworICAgICAgICB3
aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworCisgICAgICAg
ICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGUuYXQoYmxvY2tJbmRl
eCk7CisgICAgICAgICAgICAgICAgTG9jYWxDYWxjIGxvY2FsQ2FsYygqdGhpcywgYmxvY2spOwor
ICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGlu
c3RJbmRleC0tOykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoYmxvY2st
PmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RUaW1lID0gc2Vlbi5h
ZGQoYmxvY2spOworICAgICAgICAgICAgICAgIGlmICghZmlyc3RUaW1lICYmIGxvY2FsQ2FsYy5s
aXZlKCkgPT0gbV9saXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkgeworICAg
ICAgICAgICAgICAgICAgICBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdLmFkZCgKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5saXZlKCkuYmVnaW4oKSwgbG9jYWxDYWxjLmxpdmUo
KS5lbmQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fbGl2ZUF0SGVh
ZFtibG9ja10gPSBsb2NhbENhbGMudGFrZUxpdmUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRIZWFkKEJhc2ljQmxv
Y2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0SGVhZFtibG9j
a107CisgICAgfQorCisgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmVBdFRhaWwoQmFzaWNC
bG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9saXZlQXRUYWlsW2Js
b2NrXTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNhbGN1bGF0b3IgaGFzIHRvIGJlIHJ1biBpbiBy
ZXZlcnNlLgorICAgIGNsYXNzIExvY2FsQ2FsYyB7CisgICAgcHVibGljOgorICAgICAgICBMb2Nh
bENhbGMoTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAgICAgICAg
IDogbV9saXZlKGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fbGl2ZTsgfQorICAgICAgICBIYXNoU2V0PFRoaW5nPiYmIHRha2VMaXZlKCkgeyByZXR1cm4g
V1RGOjptb3ZlKG1fbGl2ZSk7IH0KKworICAgICAgICB2b2lkIGV4ZWN1dGUoSW5zdCYgaW5zdCkK
KyAgICAgICAgeworICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGRlZidzLgorICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRoaW5nJiBh
cmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAg
ICAgLy8gTmV4dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAgICAgIGlmIChp
bnN0Lmhhc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgICAgIGluc3QuZXh0cmFDbG9iYmVyZWRS
ZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgW3RoaXNdIChSZWcgcmVnKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKFRoaW5nKFRtcChyZWcpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAg
ICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFj
aDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUuYWRk
KGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6Cisg
ICAgICAgIEhhc2hTZXQ8VGhpbmc+IG1fbGl2ZTsKKyAgICB9OworICAgIAorcHJpdmF0ZToKKyAg
ICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRIZWFkOworICAg
IEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdFRhaWw7Cit9Owor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTYyIEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoK
KyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisj
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
CisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9PiB1c2Ugb2YgYSBn
ZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBvZiBhIGdlbmVy
YWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQgZGVmIG9mIGEg
Z2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ugb2YgYSBmbG9h
dCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3Ig
dmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVl
CisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJlZ2lzdGVyCisj
IEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9PiBUcnVzdGVkSW1tNjQKKyMg
QWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKKyMgSW5kZXggPT4g
QmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVzcworIworIyBUaGUgcGFy
c2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVuZGVyc3RhbmRzIHRoYXQg
dGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhpbmdzLiBTbywgYWx0
aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0aW9uIHN0eWxlLCBub25l
IG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJlIG1lYW5pbmdmdWwgdG8g
dGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKyMKKyMgRm9vNDIgVTpH
LCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBhcnNlciB3b3VsZCBrbm93
IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBVRDpGCisjICAgICBJ
bW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28tZm9ybSBpbnN0cnVjdGlv
biB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQgdXNlcytkZWZzIGEgZmxv
YXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2ZSBhIGxlYWRp
bmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9Bc3NlbWJsZXIK
KyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisKK05vcAorCitB
ZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgVG1w
CisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBEOkcKKyAg
ICBJbW0sIFRtcCwgVG1wCisKK0FkZDY0IFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1t
LCBBZGRyCisgICAgSW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKworQWRkNjQgVTpHLCBVOkcsIEQ6
RworICAgIEltbSwgVG1wLCBUbXAKKworQW5kMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAg
ICBJbW0sIFRtcAorICAgIFRtcCwgQWRkcgorICAgIEFkZHIsIFRtcAorICAgIEltbSwgQWRkcgor
CitBbmQ2NCBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisKK0xzaGlmdDMy
IFU6RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisKK011bDMyIFU6RywgVUQ6
RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisKKyMgTm90ZSB0aGF0IE1vdmUgb3BlcmF0
ZXMgb3ZlciB0aGUgZnVsbCByZWdpc3RlciBzaXplLCB3aGljaCBpcyBlaXRoZXIgMzItYml0IG9y
IDY0LWJpdCBkZXBlbmRpbmcgb24KKyMgdGhlIHBsYXRmb3JtLiBJJ20gbm90IGVudGlyZWx5IHN1
cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZzsgaXQgbWlnaHQgYmUgYmV0dGVyIHRvIGp1c3Qg
aGF2ZSBhCisjIE1vdmU2NCBpbnN0cnVjdGlvbi4gT1RPSCwgb3VyIE1hY3JvQXNzZW1ibGVycyBh
bHJlYWR5IGhhdmUgdGhpcyBub3Rpb24gb2YgIm1vdmUoKSIgdGhhdCBiYXNpY2FsbHkKKyMgbWVh
bnMgbW92ZVB0ci4KK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisg
ICAgSW1tNjQsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkUHRyICMgVGhpcyBtZWFucyB0aGF0
ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMgImxvYWQiIG5vdCAibW92ZSIu
CisgICAgSW5kZXgsIFRtcCBhcyBsb2FkUHRyCisgICAgVG1wLCBBZGRyIGFzIHN0b3JlUHRyCisg
ICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgorCitNb3ZlMzIgVTpHLCBEOkcKKyAgICBUbXAsIFRt
cCBhcyB6ZXJvRXh0ZW5kMzJUb1B0cgorICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKKyAgICBJbmRl
eCwgVG1wIGFzIGxvYWQzMgorICAgIFRtcCwgQWRkciBhcyBzdG9yZTMyCisgICAgVG1wLCBJbmRl
eCBhcyBzdG9yZTMyCisKK01vdmVEb3VibGUgVTpGLCBEOkYKKyAgICBUbXAsIFRtcAorICAgIEFk
ZHIsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkRG91YmxlCisgICAg
VG1wLCBBZGRyIGFzIHN0b3JlRG91YmxlCisgICAgVG1wLCBJbmRleCBhcyBzdG9yZURvdWJsZQor
CitNb3ZlNjRUb0RvdWJsZSBVOkcsIEQ6RgorICAgIFRtcCwgVG1wCisKK01vdmVEb3VibGVUbzY0
IFU6RiwgRDpHCisgICAgVG1wLCBUbXAKKworQnJhbmNoQWRkMzIgVTpHLCBVOkcsIFVEOkcgL2Jy
YW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBS
ZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBB
ZGRyLCBUbXAKKworQnJhbmNoTXVsMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0Nv
bmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaFN1YjMyIFU6Rywg
VTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIElt
bSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisg
ICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE5lZzMyIFU6RywgVUQ6RyAvYnJhbmNoCisg
ICAgUmVzQ29uZCwgVG1wCisKK0p1bXAgL2JyYW5jaAorCitSZXQgL3Rlcm1pbmFsCisKK0JyZWFr
cG9pbnQgL3Rlcm1pbmFsCisKKyMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2aW9yLiBBIFBh
dGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3BlY2lhbCBvcGVy
YW5kLAorIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgorc3BlY2lhbCBQYXRjaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNl
U2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0NvbW1v
bi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogbmFtZSkKKyAg
ICA6IG1fY29kZShjb2RlKQorICAgICwgbV9uYW1lKG5hbWUpCit7CisgICAgaWYgKHNob3VsZER1
bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGFmdGVyICIsIGNvZGUu
bGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRh
TG9nKGNvZGUpOworICAgIH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpKQor
ICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJpbmcoY29kZSk7Cit9CisKK1BoYXNlU2NvcGU6
On5QaGFzZVNjb3BlKCkKK3sKKyAgICBtX2NvZGUuc2V0TGFzdFBoYXNlTmFtZShtX25hbWUpOwor
ICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgdmFsaWRhdGUo
bV9jb2RlLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEFpclBoYXNlU2NvcGVfaAorI2RlZmluZSBBaXJQaGFzZVNjb3BlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworY2xhc3MgUGhhc2VTY29wZSB7
CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhh
c2VTY29wZShDb2RlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUoKTsgLy8g
dGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7CisgICAg
Y29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpclBoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJSZWdpc3RlclByaW9yaXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
UmVnaXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigpCit7
CisgICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0ZDo6b25j
ZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAg
IFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8R1BSUmVnPigpOworICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKTsKKyAgICAgICAg
ICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICAgICAg
ICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkp
OworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxs
ZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAg
ICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZl
LmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdw
cigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAg
ICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2Fs
bGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5k
KHJlZy5ncHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVy
biAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3JpdHlPcmRl
cigpCit7CisgICAgc3RhdGljIFZlY3RvcjxGUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisg
ICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8RlBSUmVnPigpOwor
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFsbEZQUnMoKTsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAg
WyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQo
cmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5mcHIoKSk7
CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAg
ICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNh
dmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcu
ZnByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJl
c3VsdDsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIoQXJnOjpU
eXBlIHR5cGUpCit7CisgICAgc3RhdGljIFZlY3RvcjxSZWc+KiByZXN1bHRbQXJnOjpudW1UeXBl
c107CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2Uo
CisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQ
XSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChHUFJSZWcgcmVnIDogZ3By
c0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQXS0+YXBw
ZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXSA9IG5ldyBWZWN0b3I8
UmVnPigpOworICAgICAgICAgICAgZm9yIChGUFJSZWcgcmVnIDogZnByc0luUHJpb3JpdHlPcmRl
cigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXS0+YXBwZW5kKFJlZyhyZWcpKTsK
KyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHRbdHlwZV07Cit9CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0
ZXJQcmlvcml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJSZWdpc3RlclBy
aW9yaXR5X2gKKyNkZWZpbmUgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiRlBSSW5mby5oIgorI2luY2x1
ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQUlJlZz4m
IGdwcnNJblByaW9yaXR5T3JkZXIoKTsKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHJzSW5Qcmlv
cml0eU9yZGVyKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+IHN0cnVjdCBSZWdpc3RlcnNJ
blByaW9yaXR5T3JkZXI7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3Jk
ZXI8R1BSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxHUFJSZWc+JiBpblByaW9yaXR5T3JkZXIo
KSB7IHJldHVybiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7IH0KK307Cit0ZW1wbGF0ZTw+IHN0cnVj
dCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxG
UFJSZWc+JiBpblByaW9yaXR5T3JkZXIoKSB7IHJldHVybiBmcHJzSW5Qcmlvcml0eU9yZGVyKCk7
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+Citjb25zdCBWZWN0b3I8dHlwZW5hbWUg
QmFuazo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAgcmV0dXJu
IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7Cit9CisK
K2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJSZWdpc3RlclByaW9yaXR5X2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgY2hh
ciogY29uc3QgU3BlY2lhbDo6ZHVtcFByZWZpeCA9ICImIjsKKworU3BlY2lhbDo6U3BlY2lhbCgp
CisgICAgOiBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVjaWFsOjp+U3BlY2lhbCgpCit7
Cit9CisKK0NTdHJpbmcgU3BlY2lhbDo6bmFtZSgpIGNvbnN0Cit7CisgICAgU3RyaW5nUHJpbnRT
dHJlYW0gb3V0OworICAgIGR1bXBJbXBsKG91dCk7CisgICAgcmV0dXJuIG91dC50b0NTdHJpbmco
KTsKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KGR1bXBQcmVmaXgpOworICAgIGR1bXBJbXBsKG91dCk7CisgICAgaWYgKG1f
aW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludChtX2luZGV4KTsKK30KKwordm9p
ZCBTcGVjaWFsOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludCgqdGhpcywgIjogIik7CisgICAgZGVlcER1bXBJbXBsKG91dCk7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNwZWNpYWxfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdl
bmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKyAgICAKKyAgICBTcGVjaWFs
KCk7CisgICAgdmlydHVhbCB+U3BlY2lhbCgpOworCisgICAgQ1N0cmluZyBuYW1lKCkgY29uc3Q7
CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRh
PEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlzVmFsaWQo
SW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVk
IGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMgY2FsbGVkIG9uIGZvciBlYWNoIElu
c3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHdheSB0bwor
ICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRzIHVzZWQgZnJvbSBqdXN0IG9uZSBJ
bnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUuIFNvLAorICAgIC8vIGlmIHlvdSB3
YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRvIGdlbmVyYXRlKCksIHRoZW4geW91
IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkgR2VuZXJhdGUgQWlyIHRoYXQgc3Rh
cnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRjaCBJbnN0LCBhbmQgdGhlbiBtZXJn
ZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlzIGlzIHByb2JhYmx5IG5vdCBncmVh
dCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlIHRoYXQKKyAgICAvLyAgICBB
aXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3VjaCBkdXBsaWNhdGlvbiBkaWRuJ3Qg
Y2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAgICAvLyAgICByZWdpc3RlciBhc3Np
Z25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUgU3BlY2lhbCBtYWludGFpbiBhIEhh
c2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBhbmFseXNp
cworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNhbGwgaXMgcGVyZm9ybWVkIGp1c3Qg
YmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMgbm8gd2F5CisgICAgLy8gICAgZm9y
IHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5zdHMgdG8gYmUgcmVhbGxvY2F0ZWQu
IFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAgICBjb25zdWx0IHRoZSBIYXNoTWFw
LgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291bGQgdXNlICgxKSBhbmQgZmlyZSB1
cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxscy4KKyAgICAvLworICAgIC8vIE5v
dGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIHJlcG9ydFVzZWRSZWdpc3RlcnMo
KSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAvLyBhcyBnZW5lcmF0ZSgpLiBJ
ZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291bGQganVzdCBoYXZlIGVhY2ggU3Bl
Y2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVjdG9yIG9mIFJlZ2lzdGVyU2V0J3Mg
YW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUgcmlnaHQgb3JkZXIgaW4KKyAgICAv
LyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZmZXJlbmNlIGlzIHVubGlrZWx5IHRv
IGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAgIC8vIHBlcmZvcm1hbmNlIG9mIHRo
ZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8vIEN1cnJlbnRseSwgd2UgZG8gKDEp
IGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMo
SW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAgIAorICAgIHZpcnR1YWwgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29u
dGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJl
cmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcm90ZWN0ZWQ6Cisg
ICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworICAgIHZp
cnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7Cisg
ICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERlZXBTcGVjaWFsRHVtcCB7CitwdWJs
aWM6CisgICAgRGVlcFNwZWNpYWxEdW1wKGNvbnN0IFNwZWNpYWwqIHNwZWNpYWwpCisgICAgICAg
IDogbV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3BlY2lhbCkKKyAgICAg
ICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgU3Bl
Y2lhbCogbV9zcGVjaWFsOworfTsKKworaW5saW5lIERlZXBTcGVjaWFsRHVtcCBkZWVwRHVtcChj
b25zdCBTcGVjaWFsKiBzcGVjaWFsKQoreworICAgIHJldHVybiBEZWVwU3BlY2lhbER1bXAoc3Bl
Y2lhbCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGVjaWFsX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1
ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNsdWRl
ICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgorI2lu
Y2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQoreworICAg
IFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxFdmVyeXRoaW5nIik7CisKKyAgICAv
LyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVyeSBwb2lu
dCBpbiBldmVyeSBiYXNpYyBibG9jay4KKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBWZWN0b3I8
UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBMaXZlbmVzczxU
bXA+IGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7
CisgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJs
b2NrKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5zaXplKCkg
KyAxKTsKKworICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2lnbmVkIGlu
ZGV4LCBJbnN0JiBpbnN0KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0ID0gdXNlZFJl
Z2lzdGVyc1tibG9ja11baW5kZXhdOworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbG9jYWxD
YWxjLmxpdmUoKSkgeworICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAg
ICAgICAgICAgICAgc2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBHb3R0YSBhY2NvdW50IGZvciBkZWFkIGFzc2lnbm1lbnRzIHRvIHJlZ2lzdGVycy4g
VGhlc2UgbWF5IGhhcHBlbiBiZWNhdXNlIHRoZSBpbnB1dAorICAgICAgICAgICAgLy8gY29kZSBp
cyBzdWJvcHRpbWFsLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAg
ICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkgJiYgYXJnLmlzUmVnKCkpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzZXQuc2V0KGFyZy5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH07CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+
c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+
YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIHNldFVzZWRSZWdpc3RlcnMoaW5zdEluZGV4ICsg
MSwgaW5zdCk7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0KTsKKyAgICAgICAg
fQorCisgICAgICAgIEluc3Qgbm9wOworICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKDAsIG5vcCk7
CisgICAgfQorCisgICAgLy8gQWxsb2NhdGUgYSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KKyAg
ICBWZWN0b3I8U3RhY2tTbG90Kj4gYWxsU3RhY2tTbG90c1tBcmc6Om51bVR5cGVzXTsKKyAgICBm
b3IgKHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsr
dHlwZUluZGV4KSB7CisgICAgICAgIFZlY3RvcjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFs
bFN0YWNrU2xvdHNbdHlwZUluZGV4XTsKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNf
Y2FzdDxBcmc6OlR5cGU+KHR5cGVJbmRleCk7CisgICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNv
ZGUubnVtVG1wcyh0eXBlKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2Rl
Lm51bVRtcHModHlwZSk7IHRtcEluZGV4LS07KQorICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJ
bmRleF0gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOwor
ICAgIH0KKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5k
ZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQmIHNldEJlZm9yZSA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJ
bmRleF07CisgICAgICAgICAgICBSZWdpc3RlclNldCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJz
W2Jsb2NrXVtpbnN0SW5kZXggKyAxXTsKKyAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+
YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAg
ICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0g
YWxsU3RhY2tTbG90c1t0eXBlXVt0bXAudG1wSW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAg
IEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNrU2xvdCk7CisKKyAgICAgICAgICAgICAgICAgICAg
Ly8gTmVlZCB0byBmaWd1cmUgb3V0IGEgcmVnaXN0ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBk
ZXBlbmRzIG9uIHRoZSByb2xlLgorICAgICAgICAgICAgICAgICAgICBSZWcgY2hvc2VuUmVnOwor
ICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSBBcmc6OlVzZToKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJl
Z3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo
b3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
QXJnOjpEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Q
cmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFz
ZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRB
ZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVn
ID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVz
ZURlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9y
aXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJl
Zm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjaG9zZW5SZWcpOworCisg
ICAgICAgICAgICAgICAgICAgIHRtcCA9IFRtcChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAg
ICAgICAgIE9wY29kZSBtb3ZlID0gdHlwZSA9PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7
CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW5zdEluZGV4LCBtb3ZlLCBpbnN0Lm9yaWdpbiwgYXJnLCB0bXApOworICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGluc3RJbmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0
bXAsIGFyZyk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQor
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhp
bmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxs
RXZlcnl0aGluZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWly
U3BpbGxFdmVyeXRoaW5nX2gKKyNkZWZpbmUgQWlyU3BpbGxFdmVyeXRoaW5nX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8gVGhpcyBpcyBhIHBoYXNlIGZvciB0ZXN0aW5nLiBJ
dCBiZWhhdmVzIGxpa2UgYSByZWdpc3RlciBhbGxvY2F0b3IgaW4gdGhlIHNlbnNlIHRoYXQgaXQK
Ky8vIGVsaW1pbmF0ZXMgdGVtcG9yYXJpZXMgZnJvbSB0aGUgcHJvZ3JhbS4gSXQgYWNjb21wbGlz
aGVzIHRoaXMgYnkgYWx3YXlzIHNwaWxsaW5nIGFsbAorLy8gdGVtcG9yYXJpZXMuIFRoZSByZXN1
bHRpbmcgY29kZSBpcyBnb2luZyB0byBiZSB2ZXJ5IGluZWZmaWNpZW50LiBUaGlzIHBoYXNlIGlz
IGdyZWF0IGlmIHlvdQorLy8gdGhpbmsgdGhhdCB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgcmVnaXN0
ZXIgYWxsb2NhdG9yLiBZb3UgY2FuIGNvbmZpcm0gdGhpcyBieSBydW5uaW5nIHRoaXMKKy8vIHBo
YXNlIGluc3RlYWQgb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4KKy8vCisvLyBOb3RlIHRoYXQg
ZXZlbiB0aG91Z2ggdGhpcyBwaGFzZSBkb2VzIHRoZSBjaGVhcGVzdCB0aGluZyBwb3NzaWJsZSwg
aXQncyBub3QgZXZlbiB3cml0dGVuIGluIGEKKy8vIHBhcnRpY3VsYXJseSBlZmZpY2llbnQgd2F5
LiBTbywgZG9uJ3QgZ2V0IGFueSBpZGVhcyBhYm91dCB1c2luZyB0aGlzIHBoYXNlIHRvIHJlZHVj
ZSBjb21waWxlcgorLy8gbGF0ZW5jeS4gSWYgeW91IHdhbnRlZCB0byBkbyB0aGF0LCB5b3Ugc2hv
dWxkIGNvbWUgdXAgd2l0aCBhIGNsZXZlciBhbGdvcml0aG0gaW5zdGVhZCBvZiB1c2luZworLy8g
dGhpcyBzaWxseSB0aGluZy4KKwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYpOworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQWlyU3BpbGxFdmVyeXRoaW5nX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBTdGFj
a1Nsb3Q6OnNldE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKK3sKKyAgICBtX29mZnNldEZy
b21GUCA9IHZhbHVlOworICAgIGlmIChtX3ZhbHVlKQorICAgICAgICBtX3ZhbHVlLT5tX29mZnNl
dEZyb21GUCA9IHZhbHVlOworfQorCit2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgic3RhY2siLCBtX2luZGV4KTsKK30KKwordm9p
ZCBTdGFja1Nsb3Q6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIG9mZnNldEZyb21GUCA9ICIsIG1f
b2Zmc2V0RnJvbUZQLCAiLCBraW5kID0gIiwgbV9raW5kKTsKKyAgICBpZiAobV92YWx1ZSkKKyAg
ICAgICAgb3V0LnByaW50KCIsIHZhbHVlID0gIiwgKm1fdmFsdWUpOworfQorCitTdGFja1Nsb3Q6
OlN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtp
bmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQorICAgIDogbV9ieXRlU2l6ZShieXRlU2l6
ZSkKKyAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgLCBtX29mZnNldEZyb21GUCh2YWx1ZSA/IHZh
bHVlLT5vZmZzZXRGcm9tRlAoKSA6IDApCisgICAgLCBtX2tpbmQoa2luZCkKKyAgICAsIG1fdmFs
dWUodmFsdWUpCit7CisgICAgQVNTRVJUKGJ5dGVTaXplKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBBaXJTdGFja1Nsb3RfaAorI2RlZmluZSBBaXJTdGFja1Nsb3Rf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgor
I2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+
CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitjbGFzcyBTdGFja1Nsb3RWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2Ns
YXNzIFN0YWNrU2xvdCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3RhY2tTbG90KTsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB1bnNpZ25lZCBieXRlU2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXg7IH0KKworICAgIHVuc2lnbmVkIGFsaWdubWVudCgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAxKQorICAgICAgICAgICAgcmV0dXJuIDE7Cisg
ICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDIpCisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAg
ICAgaWYgKGJ5dGVTaXplKCkgPD0gNCkKKyAgICAgICAgICAgIHJldHVybiA0OworICAgICAgICBy
ZXR1cm4gODsKKyAgICB9CisKKyAgICBTdGFja1Nsb3RWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisKKyAgICAvLyBaZXJvIG1lYW5zIHRoYXQgaXQncyBub3QgeWV0IGFz
c2lnbmVkLgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zm
c2V0RnJvbUZQOyB9CisKKyAgICAvLyBUaGlzIHNob3VsZCB1c3VhbGx5IGp1c3QgYmUgY2FsbGVk
IGZyb20gcGhhc2VzIHRoYXQgZG8gc3RhY2sgYWxsb2NhdGlvbi4gQnV0IHlvdSBjYW4KKyAgICAv
LyB0b3RhbGx5IGZvcmNlIGEgc3RhY2sgc2xvdCB0byBsYW5kIGF0IHNvbWUgb2Zmc2V0LgorICAg
IHZvaWQgc2V0T2Zmc2V0RnJvbUZQKGludHB0cl90KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ29kZTsKKworICAgIFN0YWNrU2xvdCh1bnNpZ25l
ZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVl
Kik7CisgICAgCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOworICAgIFN0YWNrU2xvdEtpbmQgbV9raW5k
OworICAgIFN0YWNrU2xvdFZhbHVlKiBtX3ZhbHVlOworfTsKKworY2xhc3MgRGVlcFN0YWNrU2xv
dER1bXAgeworcHVibGljOgorICAgIERlZXBTdGFja1Nsb3REdW1wKGNvbnN0IFN0YWNrU2xvdCog
c2xvdCkKKyAgICAgICAgOiBtX3Nsb3Qoc2xvdCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9zbG90KQor
ICAgICAgICAgICAgbV9zbG90LT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBT
dGFja1Nsb3QqIG1fc2xvdDsKK307CisKK2lubGluZSBEZWVwU3RhY2tTbG90RHVtcCBkZWVwRHVt
cChjb25zdCBTdGFja1Nsb3QqIHNsb3QpCit7CisgICAgcmV0dXJuIERlZXBTdGFja1Nsb3REdW1w
KHNsb3QpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3RhY2tTbG90X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kwordm9pZCBUbXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0
aGlzKSB7CisgICAgICAgIG91dC5wcmludCgiPG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoaXNSZWcoKSkgeworICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKGlzR1AoKSkgeworICAgICAgICBvdXQucHJp
bnQoIiV0bXAiLCBncFRtcEluZGV4KCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
b3V0LnByaW50KCIlZnRtcCIsIGZwVG1wSW5kZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyVG1wX2gKKyNkZWZpbmUgQWlyVG1wX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIlJlZy5oIgor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQXJnOworCisvLyBBIFRtcCBpcyBhIGdlbmVyYWxp
emF0aW9uIG9mIGEgcmVnaXN0ZXIuIEl0IGNhbiBiZSB1c2VkIHRvIHJlZmVyIHRvIGFueSBHUFIg
b3IgRlBSLiBJdCBjYW4gYWxzbworLy8gYmUgdXNlZCB0byByZWZlciB0byBhbiB1bmFsbG9jYXRl
ZCByZWdpc3RlciAoaS5lLiBhIHRlbXBvcmFyeSkuIExpa2UgbWFueSBBaXIgY2xhc3Nlcywgd2Ug
dXNlCisvLyBkZWxpYmVyYXRlbHkgdGVyc2UgbmFtaW5nIHNpbmNlIHdlIHdpbGwgaGF2ZSB0byB1
c2UgdGhpcyBuYW1lIGEgbG90LgorCitjbGFzcyBUbXAgeworcHVibGljOgorICAgIFRtcCgpCisg
ICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBUbXAoUmVn
IHJlZykKKyAgICB7CisgICAgICAgIGlmIChyZWcpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNH
UFIoKSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlR1BSKHJlZy5ncHIoKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUZQUihyZWcu
ZnByKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0K
KworICAgIGV4cGxpY2l0IFRtcChjb25zdCBBcmcmKTsKKworICAgIHN0YXRpYyBUbXAgZ3BUbXBG
b3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlR1BUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBUbXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBp
bmRleCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVl
ID0gZW5jb2RlRlBUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKwor
ICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0K
KworICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVk
R1AobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBpc0VuY29kZWRGUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzR1BS
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUFIobV92YWx1ZSk7Cisg
ICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNF
bmNvZGVkRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzR1BSKCkgfHwgaXNGUFIoKTsKKyAgICB9CisKKyAgICBHUFJS
ZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFIobV92YWx1ZSk7
CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ZGVjb2RlRlBSKG1fdmFsdWUpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAg
cmV0dXJuIGZwcigpOworICAgIH0KKworICAgIGJvb2wgaGFzVG1wSW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICFpc1JlZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1w
SW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQVG1wKG1fdmFsdWUp
OworICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZUZQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRt
cEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICBy
ZXR1cm4gZ3BUbXBJbmRleCgpOworICAgICAgICByZXR1cm4gZnBUbXBJbmRleCgpOworICAgIH0K
KworICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhp
czsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX3ZhbHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQor
CisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisgICAgVG1wKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZh
bHVlVHlwZSkKKyAgICAgICAgOiBtX3ZhbHVlKHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4
KCkpCisgICAgeworICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzID09IFRtcChXVEY6Okhhc2hUYWJsZURl
bGV0ZWRWYWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNoPGludD46Omhhc2gobV92YWx1ZSk7CisgICAgfQor
ICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50
IGVuY29kZUZQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIC0xIC0gaW5k
ZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFIoR1BSUmVnIGdwcikKKyAgICB7
CisgICAgICAgIHJldHVybiBlbmNvZGVHUChncHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdp
c3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQUihGUFJSZWcgZnByKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQKGZwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJz
dEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVHUFRtcCh1bnNp
Z25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJs
ZXI6Omxhc3RSZWdpc3RlcigpKSArIDEgKyBpbmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50
IGVuY29kZUZQVG1wKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29k
ZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxIC0gaW5kZXg7CisgICAg
fQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1AoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHZhbHVlID4gMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRG
UChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gdmFsdWUgPCAwOworICAgIH0KKwor
ICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICBy
ZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmIHZhbHVlIDw9IGVuY29kZUdQUihNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2Rl
ZEZQUihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUp
ICYmIHZhbHVlID49IGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSk7
CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BUbXAoaW50IHZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiAhaXNFbmNvZGVkR1BSKHZh
bHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFRtcChpbnQgdmFsdWUp
CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmICFpc0VuY29kZWRG
UFIodmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBHUFJSZWcgZGVjb2RlR1BSKGludCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRHUFIodmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEdQUlJlZz4oCisgICAgICAgICAgICAodmFsdWUgLSBlbmNvZGVH
UFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSkpICsgTWFjcm9Bc3NlbWJsZXI6OmZp
cnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIEZQUlJlZyBkZWNvZGVGUFIoaW50
IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEZQUih2YWx1ZSkpOworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBSUmVnPigKKyAgICAgICAgICAgIChlbmNvZGVGUFIo
TWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKSAtIHZhbHVlKSArCisgICAgICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRp
YyB1bnNpZ25lZCBkZWNvZGVHUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQo
aXNFbmNvZGVkR1BUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlIC0gKGVuY29kZUdQ
UihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSk7CisgICAgfQorCisgICAgc3Rh
dGljIHVuc2lnbmVkIGRlY29kZUZQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0VuY29kZWRGUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gKGVuY29kZUZQUihNYWNy
b0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSkgLSAxKSAtIHZhbHVlOworICAgIH0KKworICAg
IC8vIDA6IGVtcHR5IFRtcAorICAgIC8vIHBvc2l0aXZlOiBHUFJzIGFuZCB0aGVuIEdQIHRlbXBz
LgorICAgIC8vIG5lZ2F0aXZlOiBGUFJzIGFuZCB0aGVuIEZQIHRlbXBzLgorICAgIGludCBtX3Zh
bHVlOworfTsKKworc3RydWN0IFRtcEhhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNv
bnN0IFRtcCYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1
YWwoY29uc3QgVG1wJiBhLCBjb25zdCBUbXAmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0
YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3Ry
dWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OkFpcjo6VG1wPiB7CisgICAgdHlwZWRlZiBKU0M6OkIz
OjpBaXI6OlRtcEhhc2ggSGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBI
YXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OlRt
cD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpUbXA+IHsgfTsKKworfSAv
LyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyVG1wX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJ
bmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clRtcElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wSW5saW5l
c19oCisjZGVmaW5lIEFpclRtcElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2lubGluZSBUbXA6OlRtcChjb25zdCBB
cmcmIGFyZykKK3sKKyAgICAqdGhpcyA9IGFyZy50bXAoKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpclRtcElubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclZhbGlkYXRlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFj
ZSB7CisKK2NsYXNzIFZhbGlkYXRlciB7CitwdWJsaWM6CisgICAgVmFsaWRhdGVyKENvZGUmIGNv
ZGUsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAg
ICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBW
QUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWls
KF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9D
U3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisgICAgCisgICAgdm9pZCBy
dW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiB2YWxpZFNsb3RzOworICAg
ICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiB2YWxpZEJsb2NrczsKKyAgICAgICAgSGFzaFNldDxT
cGVjaWFsKj4gdmFsaWRTcGVjaWFsczsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogbV9jb2RlKQorICAgICAgICAgICAgdmFsaWRCbG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAg
Zm9yIChTdGFja1Nsb3QqIHNsb3QgOiBtX2NvZGUuc3RhY2tTbG90cygpKQorICAgICAgICAgICAg
dmFsaWRTbG90cy5hZGQoc2xvdCk7CisgICAgICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6IG1f
Y29kZS5zcGVjaWFscygpKQorICAgICAgICAgICAgdmFsaWRTcGVjaWFscy5hZGQoc3BlY2lhbCk7
CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgp
OyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQo
aW5zdEluZGV4KTsKKyAgICAgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7
CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAg
ICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWxpZFNsb3RzLmNvbnRhaW5zKGFyZy5zdGFja1Nsb3QoKSksICgiQXQgIiwgaW5zdCwgIiBp
biAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6U3BlY2lhbDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbGlkU3BlY2lhbHMuY29udGFpbnMoYXJnLnNwZWNpYWwoKSksICgiQXQgIiwgaW5z
dCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUoaW5zdC5pc1ZhbGlkRm9ybSgpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJs
b2NrKSk7CisgICAgICAgICAgICAgICAgaWYgKGluc3RJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0g
MSkKKyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNUZXJtaW5hbChpbnN0Lm9wY29kZSks
ICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJB
dCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwg
KCJJbiAiLCAqYmxvY2spKTsKKyAgICAgICAgfQorICAgIH0KKworcHJpdmF0ZToKKyAgICBOT19S
RVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5h
bWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29u
ZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5n
IGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVh
bSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIp
OworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFt
ZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAi
LCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgIEFmdGVyICIsIG1f
Y29kZS5sYXN0UGhhc2VOYW1lKCksICJcbiIpOworICAgICAgICAgICAgZmFpbHVyZU1lc3NhZ2Ug
PSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAgIH0KKworICAgICAgICBkYXRhTG9nKGZhaWx1cmVN
ZXNzYWdlKTsKKyAgICAgICAgaWYgKG1fZHVtcEJlZm9yZSkgeworICAgICAgICAgICAgZGF0YUxv
ZygiQmVmb3JlICIsIG1fY29kZS5sYXN0UGhhc2VOYW1lKCksICI6XG4iKTsKKyAgICAgICAgICAg
IGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAgICAgICBkYXRhTG9nKCJBdCB0
aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhtX2NvZGUpOworCisgICAgICAg
IGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWls
dXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5jdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAg
Q1JBU0goKTsKKyAgICB9CisgICAgCisgICAgQ29kZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIq
IG1fZHVtcEJlZm9yZTsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZh
bGlkYXRlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRh
dGVyIHZhbGlkYXRlcihjb2RlLCBkdW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlk
YXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclZhbGlkYXRlX2gKKyNkZWZp
bmUgQWlyVmFsaWRhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworCit2b2lkIHZh
bGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4NDQgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMg
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycn
CisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29k
ZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6c3BlY2lhbCwgOm92ZXJsb2FkcworICAgIGF0dHJf
YWNjZXNzb3IgOmtpbmQKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHNwZWNpYWwpCisgICAg
ICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAc3BlY2lhbCA9IHNwZWNpYWwKKyAgICAgICAgQGtp
bmQgPSA6aW5zdAorICAgICAgICB1bmxlc3Mgc3BlY2lhbAorICAgICAgICAgICAgQG92ZXJsb2Fk
cyA9IFtdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIG1hc21OYW1lCisgICAgICAg
IG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEuLi0xXQorICAgIGVuZAorZW5kCisKK2NsYXNzIEFy
ZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6dHlwZQorCisgICAgZGVmIGluaXRpYWxpemUocm9s
ZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSByb2xlCisgICAgICAgIEB0eXBlID0gdHlwZQorICAg
IGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2FkCisgICAgYXR0cl9yZWFkZXIgOnNpZ25hdHVyZSwg
OmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICBA
c2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAgICAgIEBmb3JtcyA9IGZvcm1zCisgICAgZW5kCitl
bmQKKworY2xhc3MgS2luZAorICAgIGF0dHJfcmVhZGVyIDpuYW1lCisgICAgYXR0cl9hY2Nlc3Nv
ciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSkKKyAgICAgICAgQG5hbWUgPSBu
YW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFsc2UKKyAgICBlbmQKKworICAgIGRlZiA9PShvdGhl
cikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gU3RyaW5nCisgICAgICAgICAgICBAbmFtZSA9PSBv
dGhlcgorICAgICAgICBlbHNlCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlci5uYW1lIGFuZCBA
c3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAgICAgaWYga2luZCA9PSAiQWRkciIKKyAgICAgICAg
ICAgIFsiQWRkciIsICJTdGFjayIsICJDYWxsQXJnIl0KKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgW2tpbmRdCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIGFyZ0tpbmRzCisgICAg
ICAgIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICBlbmQKK2VuZAorCitjbGFzcyBGb3JtCisgICAg
YXR0cl9yZWFkZXIgOmtpbmRzLCA6YWx0TmFtZQorCisgICAgZGVmIGluaXRpYWxpemUoa2luZHMs
IGFsdE5hbWUpCisgICAgICAgIEBraW5kcyA9IGtpbmRzCisgICAgICAgIEBhbHROYW1lID0gYWx0
TmFtZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxl
TmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGlu
ZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1i
ZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7
ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAg
ICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5nCisgICAgCisgICAgZGVmIGluaXRpYWxpemUo
b3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmlu
ZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYg
b3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisg
ICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90aGVy
CisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0
fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1l
bnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICByYWlzZSAiUGFyc2Ug
ZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBl
cnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQK
KworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZp
bGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAgbGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBu
b3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5d
KikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxuLwor
ICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0g
MQorICAgICAgICB3aGVuIC9cQShbYS16QS1aMC05X10rKS8KKyAgICAgICAgICAgIHJlc3VsdCA8
PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAg
ICB3aGVuIC9cQShbIFx0XHJdKykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQor
ICAgICAgICB3aGVuIC9cQVssOipcL10vCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3
KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGlu
ZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9
IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAg
IHJlc3VsdAorZW5kCisKK2RlZiBpc1VEKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVSl8KEQp
fChVRCkpXFovCitlbmQKKworZGVmIGlzR0YodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChHKXwo
RikpXFovCitlbmQKKworZGVmIGlzS2luZCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8
KEltbSl8KEltbTY0KXwoQWRkcil8KEluZGV4KXwoUmVsQ29uZCl8KFJlc0NvbmQpKVxaLworZW5k
CisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgaXNVRCh0b2tlbikgb3IgaXNHRih0b2tlbikg
b3IgaXNLaW5kKHRva2VuKSBvcgorICAgICAgICB0b2tlbiA9PSAic3BlY2lhbCIgb3IgdG9rZW4g
PT0gImFzIgorZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xB
KFthLXpBLVowLTlfXSspXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNz
IFBhcnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9r
ZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisg
ICAgZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBh
ZHZhbmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3Io
KmNvbW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9y
KCpjb21tZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5Pwor
ICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9m
IGZpbGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAg
ZW5kCisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVj
dGVkICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQor
ICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRv
a2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5s
ZXNzIGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0
CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVJvbGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4u
c3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHJvbGUgKFUsIEQsIG9yIFVEKSIp
IHVubGVzcyBpc1VEKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAg
ICBlbmQKKworICAgIGRlZiBjb25zdW1lVHlwZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJp
bmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgdHlwZSAoRyBvciBGKSIpIHVubGVzcyBp
c0dGKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKwor
ICAgIGRlZiBjb25zdW1lS2luZAorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAg
ICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2luZCAoSW1tLCBJbW02NCwgVG1wLCBBZGRyLCBJbmRl
eCwgUmVsQ29uZCwgb3IgUmVzQ29uZCkiKSB1bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAg
YWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAg
ICByZXN1bHQgPSB7fQorICAgICAgICAKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVh
ayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgIGlmIHRva2VuID09ICJz
cGVjaWFsIgorICAgICAgICAgICAgICAgIGNvbnN1bWUoInNwZWNpYWwiKQorICAgICAgICAgICAg
ICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgcGFy
c2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBpZiByZXN1bHRbb3Bj
b2RlTmFtZV0KKworICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IE9wY29kZS5u
ZXcob3Bjb2RlTmFtZSwgdHJ1ZSkKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBv
cGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIGlmIHJlc3Vs
dFtvcGNvZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSByZXN1bHRbb3Bjb2Rl
TmFtZV0KKyAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEg
c3BlY2lhbCBvcGNvZGUiKSBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCBmYWxz
ZSkKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gb3Bjb2RlCisgICAg
ICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBzaWduYXR1cmUgPSBbXQorICAgICAg
ICAgICAgICAgIGZvcm1zID0gW10KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBp
ZiBpc1VEKHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJvbGUgPSBjb25zdW1lUm9sZQorICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3VtZSgiOiIpCisgICAgICAgICAgICAgICAgICAgICAgICB0eXBlID0gY29uc3VtZVR5cGUKKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJl
IDw8IEFyZy5uZXcocm9sZSwgdHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICIvIgorICAgICAgICAg
ICAgICAgICAgICBjb25zdW1lKCIvIikKKyAgICAgICAgICAgICAgICAgICAgY2FzZSB0b2tlbi5z
dHJpbmcKKyAgICAgICAgICAgICAgICAgICAgd2hlbiAiYnJhbmNoIgorICAgICAgICAgICAgICAg
ICAgICAgICAgb3Bjb2RlLmtpbmQgPSA6YnJhbmNoCisgICAgICAgICAgICAgICAgICAgIHdoZW4g
InRlcm1pbmFsIgorICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLmtpbmQgPSA6dGVybWlu
YWwKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFy
c2VFcnJvcigiQmFkIC8gZGlyZWN0aXZlIikKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgIGFkdmFuY2UKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAg
ICAgICAgIGlmIGlzS2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAg
ICAgICAgICAgICAgICAgICAgICBraW5kcyA9IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBh
bHROYW1lID0gbmlsCisgICAgICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBraW5kcyA8PCBLaW5kLm5ldyhjb25zdW1lS2luZCkKKworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICIqIgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW4gb25seSBhcHBseSAqIHRvIFRtcCIpIHVubGVz
cyBraW5kc1stMV0ubmFtZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBraW5kc1stMV0uc3BlY2lhbCA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3VtZSgiKiIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLCIpCisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRva2VuID09ICJhcyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCJhcyIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYWx0TmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQKKworICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgd3Jv
bmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Igb3ZlcmxvYWQiKSB1bmxlc3Mga2luZHMubGVuZ3Ro
ID09IHNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgICAgICAgICAgICAgIGtpbmRzLmVhY2hf
d2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYga2luZC5uYW1lID09ICJJbW0iIG9yIGtp
bmQubmFtZSA9PSAiSW1tNjQiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNp
Z25hdHVyZVtpbmRleF0ucm9sZSAhPSAiVSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tdXNlIGFy
Z3VtZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0udHlwZSAhPSAiRyIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFu
IGltbWVkaWF0ZSBmb3IgYSBub24tZ2VuZXJhbC1wdXJwb3NlIGFyZ3VtZW50IikKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBm
b3JtcyA8PCBGb3JtLm5ldyhraW5kcywgYWx0TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrIHVubGVzcyBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZS5sZW5ndGggPT0g
MAorICAgICAgICAgICAgICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDAKKyAg
ICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5uZXcoW10sIG5pbCkKKyAgICAgICAgICAg
ICAgICBlbmQKKworICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMgPDwgT3ZlcmxvYWQu
bmV3KHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAg
ICAgIHJlc3VsdAorICAgIGVuZAorZW5kCisKKyRmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2Vy
ID0gUGFyc2VyLm5ldyhJTzo6cmVhZCgkZmlsZU5hbWUpLCAkZmlsZU5hbWUpCiskb3Bjb2RlcyA9
IHBhcnNlci5wYXJzZQorCiskc3RkZXJyLnB1dHMgIkdlbmVyYXRpbmcgY29kZSBmb3IgI3skZmls
ZU5hbWV9LiIKKworZGVmIHdyaXRlSChmaWxlbmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7Zmls
ZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAgfCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91
dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxl
TmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZu
ZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAgICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2Zp
bGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxkIG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAu
cHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5hbWV9X2giCisgICAgfQorZW5kCisKK3dyaXRlSCgi
T3Bjb2RlIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNv
ZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29kZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8
IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAg
IG91dHAucHV0cyAifTsiCisKKyAgICBvdXRwLnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBu
dW1PcGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlzLnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3Bh
Y2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJjbGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5w
dXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29k
ZSk7IgorICAgIG91dHAucHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorfQorCisjIEZyb20gaGVy
ZSBvbiwgd2UgZG9uJ3QgdHJ5IHRvIGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgc2luY2Ug
d2UncmUgdXNpbmcgYSByZWN1cnNpdmUgcGF0dGVybgorIyBtYXRjaGVyLgorCitkZWYgbWF0Y2hG
b3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4LCBjb2x1bW5HZXR0ZXIsIGZpbHRl
ciwgY2FsbGJhY2spCisgICAgcmV0dXJuIGlmIGZvcm1zLmxlbmd0aCA9PSAwCisKKyAgICBpZiBm
aWx0ZXJbZm9ybXNdCisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgaWYgY29sdW1uSW5k
ZXggPj0gZm9ybXNbMF0ua2luZHMubGVuZ3RoCisgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5s
ZW5ndGggPT0gMQorICAgICAgICBjYWxsYmFja1tmb3Jtc1swXV0KKyAgICAgICAgcmV0dXJuCisg
ICAgZW5kCisgICAgCisgICAgZ3JvdXBzID0ge30KKyAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAg
fCBmb3JtIHwKKyAgICAgICAga2luZCA9IGZvcm0ua2luZHNbY29sdW1uSW5kZXhdLm5hbWUKKyAg
ICAgICAgaWYgZ3JvdXBzW2tpbmRdCisgICAgICAgICAgICBncm91cHNba2luZF0gPDwgZm9ybQor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBncm91cHNba2luZF0gPSBbZm9ybV0KKyAgICAgICAg
ZW5kCisgICAgfQorCisgICAgaWYgc3BlZWQgPT0gOmZhc3QgYW5kIGdyb3Vwcy5sZW5ndGggPT0g
MQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXggKyAx
LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIHJldHVybgorICAgIGVu
ZAorCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7Y29sdW1uR2V0dGVyW2NvbHVtbkluZGV4XX0p
IHsiCisgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgIHwga2V5LCB2YWx1ZSB8CisgICAg
ICAgIG91dHAucHV0cyAiI2lmIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAg
ICAgICBLaW5kLmFyZ0tpbmRzKGtleSkuZWFjaCB7CisgICAgICAgICAgICB8IGFyZ0tpbmQgfAor
ICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlIEFyZzo6I3thcmdLaW5kfToiCisgICAgICAgIH0K
KyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwg
Y29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFr
OyIKKyAgICAgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9
PSAiSW1tNjQiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisKK2RlZiBtYXRjaEluc3RPdmVybG9h
ZChvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bj
b2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAor
ICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBpZiBvcGNv
ZGUuc3BlY2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKChvcGNvZGUub3ZlcmxvYWRzLnNpemUg
IT0gMSkgb3Igc3BlZWQgPT0gOnNhZmUpCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAo
I3tpbnN0fS0+YXJncy5zaXplKCkpIHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAg
ICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwK
KyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVu
Z3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29k
ZSwgb3ZlcmxvYWQKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92
ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRT
d2l0Y2gKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisg
ICAgb3V0cC5wdXRzICJ9IgorZW5kCisgICAgCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91
dHAsIHNwZWVkLCBpbnN0KQorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0
KSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVj
aWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbCwgbmlsCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgY29sdW1u
SW5kZXggfAorICAgICAgICAgICAgICAgICIje2luc3R9LT5hcmdzWyN7Y29sdW1uSW5kZXh9XS5r
aW5kKCkiCisgICAgICAgICAgICB9CisgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2Ug
fQorICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGZvcm0g
fAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIG92ZXJsb2FkLmZvcm1z
LCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIGVuZAorICAgIH0K
K2VuZAorCit3cml0ZUgoIk9wY29kZVV0aWxzIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5w
dXRzICIjaW5jbHVkZSBcIkFpckluc3QuaFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJB
aXJTcGVjaWFsLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBv
cGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4gdHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgInRlbXBs
YXRlPHR5cGVuYW1lIFQ+IgorICAgIG91dHAucHV0cyAiaW5saW5lIFQqIG9wZ2VuSGlkZGVuUHRy
SWRlbnRpdHkoVCogcG9pbnRlcikgeyByZXR1cm4gcG9pbnRlcjsgfSIKKyAgICBvdXRwLnB1dHMg
IiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVlKSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAg
aWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIKKyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJu
IHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAifSB3aGlsZSAoZmFsc2UpIgorCisgICAgb3V0cC5w
dXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5z
dDo6Zm9yRWFjaEFyZyhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsi
CisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8
IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAg
ICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbMF0sIEFyZzo6VXNlLCBBcmc6OkdQKTsgLy8gVGhp
cyBpcyBiYXNpY2FsbHkgYm9ndXMsIGJ1dCBpdCB3b3JrcyBmIGFuYWx5c2VzIG1vZGVsIFNwZWNp
YWwgYXMgYW4gaW1tZWRpYXRlLiIKKyAgICAgICAgICAgIG91dHAucHV0cyAiYXJnc1swXS5zcGVj
aWFsKCktPmZvckVhY2hBcmcoKnRoaXMsIHNjb3BlZExhbWJkYTxFYWNoQXJnQ2FsbGJhY2s+KGZ1
bmN0b3IpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5l
YWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAg
ICAgICAgICAgcm9sZSA9IG5pbAorICAgICAgICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAg
ICAgICAgICAgICB3aGVuICJVIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAg
ICAgICAgICAgICAgICB3aGVuICJEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIK
KyAgICAgICAgICAgICAgICB3aGVuICJVRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJV
c2VEZWYiCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICByYWlzZQor
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7aW5kZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJn
LnR5cGV9UCk7IgorICAgICAgICAgICAgfQorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5w
dXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
IgorICAgIG91dHAucHV0cyAiQUxXQVlTX0lOTElORSBib29sIGlzVmFsaWRGb3JtKE9wY29kZSBv
cGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBv
dXRwLnB1dHMgIkFyZzo6S2luZCBraW5kc1tzaXplb2YuLi4oQXJndW1lbnRzKV0gPSB7IGFyZ3Vt
ZW50cy4uLiB9OyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNv
ZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMg
ImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoc2l6ZW9m
Li4uKEFyZ3VtZW50cykpIHsiCisgICAgICAgIHVubGVzcyBvcGNvZGUuc3BlY2lhbAorICAgICAg
ICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2Fk
IHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUu
bGVuZ3RofToiCisgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7IHwgY29sdW1u
SW5kZXggfCAib3BnZW5IaWRkZW5QdHJJZGVudGl0eShraW5kcylbI3tjb2x1bW5JbmRleH1dIiB9
CisgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgICAg
ICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAg
ICAgICAgICAgICAgICBzcGVjaWFsID0gKG5vdCBmb3JtLmtpbmRzLmRldGVjdCB7IHwga2luZCB8
IGtpbmQuc3BlY2lhbCB9KQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JF
VFVSTigje3NwZWNpYWx9KTsiCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1h
dGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZp
bHRlciwgY2FsbGJhY2spCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
ICAgICAgICB9CisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
ICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBv
dXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1
cm4gZmFsc2U7ICIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImlubGluZSBi
b29sIGlzVGVybWluYWwoT3Bjb2RlIG9wY29kZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91
dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggewor
ICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5hbCBv
ciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tv
cGNvZGUubmFtZX06IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4g
dHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVybiBm
YWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBv
dXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlSCgi
T3Bjb2RlR2VuZXJhdGVkIikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVk
ZSBcIkFpckluc3RJbmxpbmVzLmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1By
aW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRw
LnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9p
ZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91
dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAk
b3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0
cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5w
cmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47
IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAgICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1
dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6
OmlzVmFsaWRGb3JtKCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2Fk
Rm9ybShvdXRwLCA6c2FmZSwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwg
Zm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmIChhcmdzLnNpemUoKSA8IDEpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFs
c2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgor
ICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAg
ICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAg
ICAgfCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtp
bmRleF0ucm9sZQorICAgICAgICAgICAgICAgIHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5k
ZXhdLnR5cGUKKyAgICAgICAgICAgICAgICBraW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAg
ICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgICAgICMgV2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0g
bWF0Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0byB2YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAg
ICAgICAgICAgICAjIGtpbmQgaW1wbGllcyByb2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0
byB2YWxpZGF0ZSBpcyB0aGUgdHlwZS4gQW5kIHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAg
ICMgdG8gdmFsaWRhdGUgdGhlIHR5cGUgaWYgd2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAg
ICBpZiBraW5kLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJp
ZiAoIWFyZ3NbI3tpbmRleH1dLnRtcCgpLmlzI3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWlzI3tvcGNvZGUubmFtZX1WYWxpZCgqdGhpcykp
IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIK
KyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBv
dXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5z
aWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRj
aCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNv
ZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAg
IGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgp
IgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0
cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlz
LCBhcmdJbmRleCkpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhl
IGFyZ0luZGV4LgorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7Igor
CisgICAgICAgICAgICBudW1BcmdzID0gb3Bjb2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAg
ICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5s
ZW5ndGgKKyAgICAgICAgICAgIH0ubWF4CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFy
Z3MudGltZXMgeworICAgICAgICAgICAgICAgIHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNr
IGlmIGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxsIG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBv
ciBkb24ndCwgYWRtaXQgYW4gYWRkcmVzcworICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRl
eC4gV2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAg
ICAgIG51bVllcyA9IDAKKyAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAg
ICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2Fk
IHwKKyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAg
ICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5r
aW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
WWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMg
Tm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdl
IGVuZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkg
dGhhdCBBZGRyZXNzIGlzIGluYWRtaXNzaWJsZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMg
PT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7
IgorICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICAgICAgIyBOb3cgZG8gdGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAg
ICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEp
CisKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7
IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJs
b2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAg
ICAgICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0
IHdlIHdhbnQuCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAg
ICAgICAgICAgICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2Fk
LmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ObyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICAjIERvbid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0
byBkZWZhdWx0LgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25h
dHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVy
bG9hZFN3aXRjaAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3
ZSB0ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQgY2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3Jt
LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgY29sdW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJhcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfCBmb3JtcyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9
IDAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMg
PT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVt
aXQgbm8gY29kZSwgc2luY2Ugd2UgY2Fubm90IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZv
cm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIs
IGNhbGxiYWNrKQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2Fk
U3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
YnJlYWs7IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1
dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAg
ICBvdXRwLnB1dHMgIn0iCisgICAgICAgIGVuZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0
cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxz
ZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1
bXAgSW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBj
b250ZXh0KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0o
aml0KTsiCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oY29udGV4dCk7IgorICAgIG91dHAu
cHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIHJlc3VsdDsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRG
b3JtKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBm
b3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAi
T1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250
ZXh0KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAg
ICAgICAgICAgICBtZXRob2ROYW1lID0gZm9ybS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAicmVzdWx0ID0gIgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBv
dXRwLnByaW50ICJqaXQuI3ttZXRob2ROYW1lfSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMu
ZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICBpZiBpbmRleCAhPSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
IiwgIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1l
CisgICAgICAgICAgICAgICAgd2hlbiAiVG1wIgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVy
bG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUgPT0gIkciCisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
ZnByKCkiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIklt
bSIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVz
dGVkSW1tMzIoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tNjQoKSIKKyAgICAg
ICAgICAgICAgICB3aGVuICJBZGRyIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJh
cmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIK
KyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5k
ZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZWxDb25kIgorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKKyAg
ICAgICAgICAgICAgICB3aGVuICJSZXNDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnBy
aW50ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3VsdENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAg
IH0KKyAgICBvdXRwLnB1dHMgIlJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91
dHAucHV0cyAicmV0dXJuIHJlc3VsdDsiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5w
dXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxOTE1ODYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBh
bHRlcm5hdGl2ZUZvckpldHRpc29uKCk7ICAgIAotICAgIENvZGVCbG9jayogYmFzZWxpbmVBbHRl
cm5hdGl2ZSgpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRl
cm5hdGl2ZSgpOwogICAgIAogICAgIC8vIEZJWE1FOiBHZXQgcmlkIG9mIHRoaXMuCiAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyMzY3NwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZy5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDYgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIAog
ICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ICE9IGludmFsaWQoKTsgfQot
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogCiAgICAgYm9v
bCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gZGVs
ZXRlZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAorICAgIGNsYXNzIEFsbFJlZ3NJdGVyYWJsZSB7Cisg
ICAgcHVibGljOgorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgor
ICAgICAgICAgICAgaXRlcmF0b3IoKSB7IH0KKworICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0
b3IoUmVnIHJlZykKKyAgICAgICAgICAgICAgICA6IG1fcmVnSW5kZXgocmVnLmluZGV4KCkpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvcioo
KSBjb25zdCB7IHJldHVybiBSZWc6OmZyb21JbmRleChtX3JlZ0luZGV4KTsgfQorCisgICAgICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV9yZWdJbmRleCA9IFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpLm5leHQoKS5pbmRleCgp
OworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9yZWdJbmRleCA9PSBvdGhlci5tX3Jl
Z0luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2
YXRlOgorICAgICAgICAgICAgdW5zaWduZWQgbV9yZWdJbmRleDsKKyAgICAgICAgfTsKKworICAg
ICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3Qo
KSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVn
KCkpOyB9CisgICAgfTsKKworICAgIHN0YXRpYyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgeyByZXR1
cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBp
bnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxNTg2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lz
dGVyQXRPZmZzZXRMaQogICAgIGlmIChvZmZzZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNl
ZCkKICAgICAgICAgb2Zmc2V0ID0gLShzdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVn
aXN0ZXJzKSAqIHNpemVvZih2b2lkKikpOwogCi0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJz
dCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7cmVnID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVn
IHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgp
KSB7CiAgICAgICAgIGlmIChyZWdpc3RlclNldC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBw
ZW5kKFJlZ2lzdGVyQXRPZmZzZXQocmVnLCBvZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCAr
PSBzaXplb2Yodm9pZCopOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
ckF0T2Zmc2V0TGlzdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJBdE9mZnNldExpc3QuaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAgICAgbV9yZWdpc3RlcnMuY2xlYXIoKTsKICAgICB9
CiAKLSAgICBzaXplX3Qgc2l6ZSgpCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAg
ICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzLnNpemUoKTsKICAgICB9CkBAIC02Niw2ICs2Niw5IEBA
IHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zmc2V0KiBmaW5kKFJlZykgY29uc3Q7CiAgICAgdW5z
aWduZWQgaW5kZXhPZihSZWcpIGNvbnN0OyAvLyBSZXR1cm5zIFVJTlRfTUFYIGlmIG5vdCBmb3Vu
ZC4KIAorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4o
KSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVycy5iZWdpbigpOyB9CisgICAgVmVjdG9yPFJlZ2lz
dGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lz
dGVycy5lbmQoKTsgfQorCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0PiBt
X3JlZ2lzdGVyczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNl
dC5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTExOCw2ICsxMTgsMTMgQEAgcHVibGljOgogICAg
IAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsg
cmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1fdmVjdG9yOyB9CiAgICAgdW5zaWduZWQgaGFzaCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhhc2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29u
c3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0cygp
KQorICAgICAgICAgICAgZnVuY3RvcihSZWc6OmZyb21JbmRleChpbmRleCkpOworICAgIH0KICAg
ICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRBbnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJbmRl
eDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUtMTAtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFw
cGxlLmNvbT4KKworICAgICAgICBDcmVhdGUgYSBzdXBlciByb3VnaCBwcm90b3R5cGUgb2YgQjMK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDI4MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhj
b2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAg
ICAgICAgKFdURjo6cmFuZ2VzT3ZlcmxhcCk6IE5pY2UgdXRpbGl0eSBmb3IgY2hlY2tpbmcgaWYg
cmFuZ2VzIG92ZXJsYXAuCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6IEFkZCBhIEVOQUJMRShC
M19KSVQpIGZlYXR1cmUgZmxhZy4KKyAgICAgICAgKiB3dGYvU2NvcGVkTGFtYmRhLmg6IEFkZGVk
LiBUaGlzIGFsbG93cyB1cyB0byBkbyB6ZXJvLWFsbG9jYXRpb24sIHplcm8tY29weSBleHRlcm4g
bGFtYmRhcy4KKyAgICAgICAgKFdURjo6c2NvcGVkTGFtYmRhKToKKyAgICAgICAgKiB3dGYvU2hh
cmVkVGFzay5oOgorICAgICAgICAoV1RGOjpjcmVhdGVTaGFyZWRUYXNrKToKKwogMjAxNS0xMC0y
MSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIEZhY3RvciBvdXQg
dGhlIGdyYXBoIG5vZGUgd29ya2xpc3RzIGZyb20gREZHIGludG8gV1RGCkluZGV4OiBTb3VyY2Uv
V1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTU4NikKKysrIFNv
dXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5QjFC
N0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJMEZFQjNEQ0YxQkI1RDY4NDAw
OUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi87
IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9y
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0RE
MDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICovOyB9OworCQkw
RkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQg
LyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJEODI1MzEwMDgwRkY3NCAvKiBH
cmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0Lmgg
Ki87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4
MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkwRkY4NjA5NTFCQ0NCRDc0MDA0NTEy
N0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFy
aXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0
OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3Jk
TG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0RDRTFCQjVENjg0MDA5
RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBT
aGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUIzREQwMUJCNzM2
NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29wZWRMYW1iZGEuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBo
Tm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoTm9k
ZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0
RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGODYwOTQx
QkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5NDE2RUFBRkY4MDAyNEUxNDYg
LyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNj
aGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2No
ZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29w
ZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0MTIzRkYgLyogU2VnbWVudGVk
VmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlu
a2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQxMjNGRiAvKiBTSEExLmNwcCAq
LywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8q
IFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3
NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4
QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1MTUxQTgyNUIwMDQxMjNGRiAv
KiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRDY3QjYxQjIyRDREODAw
NjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93
dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCShy
ZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC01Myw2ICs1MywyNiBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgVD4K
K2NsYXNzIFBvaW50ZXJMaXN0RHVtcCB7CitwdWJsaWM6CisgICAgUG9pbnRlckxpc3REdW1wKGNv
bnN0IFQmIGxpc3QsIGNvbnN0IGNoYXIqIGNvbW1hKQorICAgICAgICA6IG1fbGlzdChsaXN0KQor
ICAgICAgICAsIG1fY29tbWEoY29tbWEpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2b2lkIGR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodHlwZW5hbWUg
VDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fbGlzdC5iZWdpbigpOyBpdGVyICE9IG1fbGlzdC5l
bmQoKTsgKytpdGVyKQorICAgICAgICAgICAgb3V0LnByaW50KG1fY29tbWEsIHBvaW50ZXJEdW1w
KCppdGVyKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFQmIG1fbGlzdDsKKyAgICBD
b21tYVByaW50ZXIgbV9jb21tYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBjbGFzcyBN
YXBEdW1wIHsKIHB1YmxpYzoKICAgICBNYXBEdW1wKGNvbnN0IFQmIG1hcCwgY29uc3QgY2hhciog
YXJyb3csIGNvbnN0IGNoYXIqIGNvbW1hKQpAQCAtODAsNiArMTAwLDEyIEBAIExpc3REdW1wPFQ+
IGxpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnMKICAgICByZXR1cm4gTGlzdER1bXA8VD4obGlz
dCwgY29tbWEpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorUG9pbnRlckxpc3REdW1wPFQ+
IHBvaW50ZXJMaXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25zdCBjaGFyKiBjb21tYSA9ICIsICIp
Cit7CisgICAgcmV0dXJuIFBvaW50ZXJMaXN0RHVtcDxUPihsaXN0LCBjb21tYSk7Cit9CisKIHRl
bXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbXBhcmF0b3I+CiBDU3RyaW5nIHNvcnRlZExp
c3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IENvbXBhcmF0b3ImIGNvbXBhcmF0b3IsIGNvbnN0
IGNoYXIqIGNvbW1hID0gIiwgIikKIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlzaW9uIDE5
MTU4NikKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NDE5LDYgKzQxOSwyMCBAQCBpbmxpbmUgVCBsZWZ0U2hpZnRXaXRoU2F0dXJhdGlvbihUIHZhbHVl
CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLy8gUGFzcyByYW5nZXMgd2l0aCB0aGUgbWluIGJl
aW5nIGluY2x1c2l2ZSBhbmQgdGhlIG1heCBiZWluZyBleGNsdXNpdmUuIEZvciBleGFtcGxlLCB0
aGlzIHNob3VsZAorLy8gcmV0dXJuIGZhbHNlOgorLy8KKy8vICAgICByYW5nZXNPdmVybGFwKDAs
IDgsIDgsIDE2KQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIHJhbmdlc092ZXJs
YXAoVCBsZWZ0TWluLCBUIGxlZnRNYXgsIFQgcmlnaHRNaW4sIFQgcmlnaHRNYXgpCit7CisgICAg
aWYgKGxlZnRNaW4gPD0gcmlnaHRNaW4gJiYgbGVmdE1heCA+IHJpZ2h0TWluKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICBpZiAocmlnaHRNaW4gPD0gbGVmdE1pbiAmJiByaWdodE1heCA+IGxl
ZnRNaW4pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30KKwogfSAv
LyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyAjaWZuZGVmIFdURl9NYXRoRXh0cmFzX2gKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dURi93dGYvUGxhdGZv
cm0uaAkod29ya2luZyBjb3B5KQpAQCAtNzc2LDEyICs3NzYsMjAgQEAKICNkZWZpbmUgRU5BQkxF
X0NPTkNVUlJFTlRfSklUIDEKICNlbmRpZgogCisvKiBUaGUgQjMgY29tcGlsZXIgaXMgYW4gZXhw
ZXJpbWVudGFsIGJhY2tlbmQgdGhhdCBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudC4gV2Ugd2lsbCBr
ZWVwIGl0IGJ1aWxkaW5nCisgICBvbiBEYXJ3aW4veDg2LTY0IGZvciBub3csIHRob3VnaCBpdCBp
cyB1bnVzZWQgZXhjZXB0IGZvciB0ZXN0cy4gKi8KKyNpZiBPUyhEQVJXSU4pICYmIENQVShYODZf
NjQpCisjZGVmaW5lIEVOQUJMRV9CM19KSVQgMQorI2VuZGlmCisKIC8qIElmIHRoZSBiYXNlbGlu
ZSBqaXQgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBkaXNhYmxlIHVwcGVyIHRpZXJzIGFzIHdlbGw6
ICovCiAjaWYgIUVOQUJMRShKSVQpCi0jdW5kZWYgRU5BQkxFX0RGR19KSVQgICAgICAvKiBVbmRl
ZiBzbyB0aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KLSN1bmRlZiBFTkFCTEVfRlRMX0pJVCAg
ICAgIC8qIFVuZGVmIHNvIHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0LiAqLworI3VuZGVmIEVOQUJM
RV9ERkdfSklUCisjdW5kZWYgRU5BQkxFX0ZUTF9KSVQKKyN1bmRlZiBFTkFCTEVfQjNfSklUCiAj
ZGVmaW5lIEVOQUJMRV9ERkdfSklUIDAKICNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMAorI2RlZmlu
ZSBFbmFibGVfQjNfSklUIDAKICNlbmRpZgogCiAvKiBDb3VudHMgdXNlcyBvZiB3cml0ZSBiYXJy
aWVycyB1c2luZyBzYW1wbGluZyBjb3VudGVycy4gQmUgc3VyZSB0byBhbHNvCkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9T
Y29wZWRMYW1iZGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJk
YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRMYW1iZGFfaAorI2RlZmlu
ZSBTY29wZWRMYW1iZGFfaAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gWW91IGNhbiB1c2UgU2Nv
cGVkTGFtYmRhIHRvIGVmZmljaWVudGx5IHBhc3MgbGFtYmRhcyB3aXRob3V0IGFsbG9jYXRpbmcg
bWVtb3J5IG9yIHJlcXVpcmluZworLy8gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gb2YgdGhlIGNh
bGxlZS4gVGhlIGNhbGxlZSBzaG91bGQgYmUgZGVjbGFyZWQgYXM6CisvLworLy8gdm9pZCBmb28o
Y29uc3QgU2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPiYpOworLy8KKy8vIFRo
ZSBjYWxsZXIganVzdCBkb2VzOgorLy8KKy8vIHZvaWQgZm9vKHNjb3BlZExhbWJkYTxNeVRoaW5n
cyogKGludCwgU3R1ZmYmKT4oWyZdIChpbnQgeCwgU3R1ZmYmIHkpIC0+IE15VGhpbmdzKiB7IGJs
YWggfSkpOworLy8KKy8vIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBmb28oKSBub3QgZXNjYXBp
bmcgdGhlIGxhbWJkYS4gVGhlIGxhbWJkYSBpcyBvbmx5IHZhbGlkIHdoaWxlIGZvbygpIGlzCisv
LyBvbiB0aGUgc3RhY2sgLSBoZW5jZSB0aGUgbmFtZSBTY29wZWRMYW1iZGEuCisKK3RlbXBsYXRl
PHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2NvcGVkTGFtYmRhOwordGVtcGxhdGU8dHlw
ZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNjb3Bl
ZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgorICAgIFNj
b3BlZExhbWJkYShSZXN1bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYu
Li4pID0gbnVsbHB0ciwgdm9pZCogYXJnID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2ltcGwoaW1w
bCkKKyAgICAgICAgLCBtX2FyZyhhcmcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBSZXN1bHRU
eXBlIG9wZXJhdG9yKCkoQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2ltcGwobV9hcmcsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVz
Pihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzdWx0VHlwZSAoKm1f
aW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pOworICAgIHZvaWQgKm1fYXJnOwor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBj
bGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcywgdHlwZW5hbWUgRnVuY3Rvcj4KK2NsYXNzIFNjb3Bl
ZExhbWJkYUZ1bmN0b3I8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLiksIEZ1bmN0b3I+IDog
cHVibGljIFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVi
bGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBhc3NlZEZ1bmN0b3I+CisgICAgU2NvcGVkTGFt
YmRhRnVuY3RvcihQYXNzZWRGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBTY29wZWRMYW1i
ZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+KGltcGxGdW5jdGlvbiwgdGhpcykKKyAg
ICAgICAgLCBtX2Z1bmN0b3Ioc3RkOjpmb3J3YXJkPFBhc3NlZEZ1bmN0b3I+KGZ1bmN0b3IpKQor
ICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFJlc3VsdFR5cGUgaW1wbEZ1bmN0
aW9uKHZvaWQqIGFyZ3VtZW50LCBBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjb3BlZExhbWJkYUZ1bmN0b3IqPihhcmd1bWVu
dCktPm1fZnVuY3RvcigKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5cGVzPihh
cmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICBGdW5jdG9yIG1fZnVuY3RvcjsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1Njb3BlZExh
bWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1iZGEoRnVuY3RvciYm
IGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIFNjb3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBl
LCBGdW5jdG9yPihzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworfQorCit9IC8vIG5h
bWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTY29wZWRMYW1iZGE7Cit1c2luZyBXVEY6OnNjb3Bl
ZExhbWJkYTsKKworI2VuZGlmIC8vIFNjb3BlZExhbWJkYV9oCisKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL1NoYXJlZFRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNr
LmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAkod29y
a2luZyBjb3B5KQpAQCAtNzksNiArNzksMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9CiAKKyAg
ICBTaGFyZWRUYXNrRnVuY3RvcihGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBtX2Z1bmN0
b3IoV1RGOjptb3ZlKGZ1bmN0b3IpKQorICAgIHsKKyAgICB9CisKIHByaXZhdGU6CiAgICAgUmVz
dWx0VHlwZSBydW4oQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykgb3ZlcnJpZGUKICAgICB7
CkBAIC0xMTAsNiArMTE1LDExIEBAIFJlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0
ZVNoYXIKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5j
dGlvblR5cGUsIEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1JlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+
IGNyZWF0ZVNoYXJlZFRhc2soRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihXVEY6Om1v
dmUoZnVuY3RvcikpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264185</attachid>
            <date>2015-10-27 17:54:15 -0700</date>
            <delta_ts>2015-10-28 13:18:32 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>640547</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MiBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFjY2VwdFJvb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRSb290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OmFjY2VwdEludGVybmFscyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjphY2NlcHRPcGVyYW5kcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OmFjY2VwdE9wZXJhbmRzTGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUxvYWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBZGQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFuZExvYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAgICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzTG93
ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICog
YjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpvZmZzZXQpOgorICAg
ICAgICAoSlNDOjpCMzo6TWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKToKKyAgICAgICAgKiBiMy9C
M09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzQ2hlY2tNYXRo
KToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZGF0
YSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAo
SlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6
UGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIz
L0IzUGF0Y2hwb2ludFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2lu
dFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpC
Mzo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL0IzUGhhc2VTY29wZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpQcm9jZWR1cmUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjp+UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2sp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3Jb
XSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjppdGVyYXRvcjo6ZmluZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24p
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlv
bjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRv
cltdKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKiBi
My9CM1Byb2NlZHVyZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3RLaW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90S2luZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjph
Y2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpieXRlU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6a2luZCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja1Nsb3RWYWx1ZTo6b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
U2xvdFZhbHVlOjpzZXRPZmZzZXRGcm9tRlApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OlN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6ZHVtcCk6CisgICAgICAgICogYjMvQjNT
dGFja21hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFja21hcCk6
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6c2V0T3BhcXVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN0YWNrbWFwOjpvcGFxdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpvcGFxdWVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y29uc3RyYWluKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwOjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpjbG9iYmVy
ZWQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldEdlbmVyYXRvcik6CisgICAgICAg
ICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21h
cFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNw
ZWNpYWw6OmlzVmFsaWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6
YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6YXBw
ZW5kUmVwc0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JB
cmcpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246OlN1Y2Nlc3NvckNvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNz
b3JDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxl
Y3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3Nv
ckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6
QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nl
c3NvckNvbGxlY3Rpb246OmVuZCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpkdW1wKToKKyAgICAgICAgKiBiMy9C
M1N3aXRjaENhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpTd2l0
Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6Y2FzZVZhbHVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OnRhcmdldCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCbG9jayk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSk6CisgICAgICAgIChKU0M6
OkIzOjpTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6YXBwZW5kQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKToKKyAgICAg
ICAgKiBiMy9CM1N3aXRjaFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Om51bUNhc2VW
YWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6Y2FzZVZhbHVlcyk6CisgICAgICAgIChKU0M6OkIz
OjpTd2l0Y2hWYWx1ZTo6ZmFsbFRocm91Z2gpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN3
aXRjaFZhbHVlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjplbmQpOgorICAgICAgICAqIGIz
L0IzVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM1R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppc0ludCk6CisgICAg
ICAgIChKU0M6OkIzOjppc0Zsb2F0KToKKyAgICAgICAgKEpTQzo6QjM6OnBvaW50ZXJUeXBlKToK
KyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2ls
b25WYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzVXBzaWxvblZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VXBzaWxvblZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6cGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6VXBzaWxvblZhbHVlKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VXNlQ291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpC
Mzo6VXNlQ291bnRzOjp+VXNlQ291bnRzKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6b3BlcmF0b3JbXSk6CisgICAgICAg
ICogYjMvQjNWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6dmFsaWRhdGUp
OgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6On5WYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eSk6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0RvdWJsZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6
OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp0eXBlRm9yKToKKyAgICAgICAg
KiBiMy9CM1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFjY2VwdHMp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Om9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Y2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnR5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFpclR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXAp
OgorICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6Omhhc0ludCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
Y29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
b2Zmc2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2Fpcjog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fp
ci9BaXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29u
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpm
cFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZv
ckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hh
c2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAg
ICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpk
ZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVu
ZEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNl
c3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBC
YXNpY0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVt
cDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBi
My9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0Nh
bGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFs
Ojppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNT
dGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWly
Q29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0lu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICog
YjMvYWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5l
d1RtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJh
bWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tT
bG90c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2lu
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVu
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJh
dG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNp
YWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OnNwZWNpYWxzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zZXJ0aW9uU2V0Ojpjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0
OjphcHBlbmRJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6
Omluc2VydEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2Vy
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6ZHVtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Okluc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpJbnN0OjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNo
VG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Rm9yRWFjaDxUbXA+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Rm9y
RWFjaDxBcmc+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFj
aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Omhhc1NwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6aXNTaGlmdFZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNMc2hpZnQzMlZhbGlk
KToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxp
dmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Omxp
dmVBdFRhaWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpM
b2NhbENhbGMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjps
aXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6dGFrZUxp
dmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpleGVjdXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNj
b3BlOjp+UGhhc2VTY29wZSk6CisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUuaDogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Z3Byc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmZwcnNJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpy
ZWdzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEdQUkluZm8+OjppblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz46OmluUHJpb3JpdHlPcmRlcik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6
OlNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjp+U3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6Om5hbWUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTcGVjaWFsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZGVl
cER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OkRlZXBTcGVjaWFsRHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkRlZXBTcGVjaWFsRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAg
ICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9h
aXIvQWlyU3RhY2tTbG90LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNr
U2xvdDo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6U3RhY2tTbG90KToKKyAgICAgICAgKiBi
My9haXIvQWlyU3RhY2tTbG90Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFj
a1Nsb3Q6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjppbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6YWxpZ25tZW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U3RhY2tTbG90Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6
b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xvdER1bXA6
OkRlZXBTdGFja1Nsb3REdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xv
dER1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEZvckluZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6VG1wOjppc0dQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlRtcDo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzUmVnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmZwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6cmVnKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpoYXNUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6Z3BUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnBUbXBJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6VG1wOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpl
bmNvZGVHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZW5jb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
VG1wOjppc0VuY29kZWRGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVk
R1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRGUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc0VuY29kZWRGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZGVjb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjpkZWNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcEhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6VG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dmFsaWRhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJWYWxp
ZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjogQWRk
ZWQuCisgICAgICAgICogYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGVB
bmRSdW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdDQyKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBqaXQvUmVnLmg6CisgICAgICAgIChKU0M6
OlJlZzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpSZWc6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6
UmVnOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6UmVnOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVy
YXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjplbmQpOgorICAg
ICAgICAoSlNDOjpSZWc6OmFsbCk6CisgICAgICAgIChKU0M6OlJlZzo6aW52YWxpZCk6CisgICAg
ICAgIChKU0M6OlJlZzo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJBdE9mZnNldExpc3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
UmVnaXN0ZXJBdE9mZnNldExpc3QpOgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6ZW5kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpm
b3JFYWNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisKIDIwMTUtMTAt
MjQgIEJyaWFuIEJ1cmcgIDxiYnVyZ0BhcHBsZS5jb20+CiAKICAgICAgICAgVGVhY2ggY3JlYXRl
X2hhc2hfdGFibGUgdG8gb21pdCBidWlsdGlucyBtYWNyb3Mgd2hlbiBnZW5lcmF0aW5nIHRhYmxl
cyBmb3IgbmF0aXZlLW9ubHkgb2JqZWN0cwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0Rl
cml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBA
IFZQQVRIID0gXAogCiBQWVRIT04gPSBweXRob24KIFBFUkwgPSBwZXJsCitSVUJZID0gcnVieQog
CiBKYXZhU2NyaXB0Q29yZV9TQ1JJUFRTX0RJUiA9ICQoSmF2YVNjcmlwdENvcmUpL1NjcmlwdHMK
IApAQCAtNTksNiArNjAsOSBAQCBhbGwgOiBcCiAgICAgTGV4ZXIubHV0LmggXAogICAgIEtleXdv
cmRMb29rdXAuaCBcCiAgICAgUmVnRXhwSml0VGFibGVzLmggXAorICAgIEIzTG93ZXJpbmdNYXRj
aGVyLmggXAorICAgIEIzQWRkcmVzc01hdGNoZXIuaCBcCisgICAgQWlyT3Bjb2RlLmggXAogIwog
CiAjIEphdmFTY3JpcHQgYnVpbHRpbnMuCkBAIC0yNjIsNiArMjY2LDE0IEBAIElOUFVUX0dFTkVS
QVRPUl9TUEVDSUZJQ0FUSU9OUyA9IFwKIEpTUmVwbGF5SW5wdXRzLmggOiAkKElOUFVUX0dFTkVS
QVRPUl9TUEVDSUZJQ0FUSU9OUykgJChJTlBVVF9HRU5FUkFUT1JfU0NSSVBUUykKIAkkKFBZVEhP
TikgJChKYXZhU2NyaXB0Q29yZSkvcmVwbGF5L3NjcmlwdHMvQ29kZUdlbmVyYXRvclJlcGxheUlu
cHV0cy5weSAtLW91dHB1dERpciAuIC0tZnJhbWV3b3JrIEphdmFTY3JpcHRDb3JlICQoSU5QVVRf
R0VORVJBVE9SX1NQRUNJRklDQVRJT05TKQogCitCM0xvd2VyaW5nTWF0Y2hlci5oOiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgJChKYXZhU2NyaXB0Q29y
ZSkvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVybnMKKwkkKFJVQlkpICReIAorQjNBZGRyZXNz
TWF0Y2hlci5oOiAkKEphdmFTY3JpcHRDb3JlKS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIu
cmIgJChKYXZhU2NyaXB0Q29yZSkvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucworCSQoUlVC
WSkgJF4KKworQWlyT3Bjb2RlLmg6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9vcGNvZGVfZ2Vu
ZXJhdG9yLnJiICQoSmF2YVNjcmlwdENvcmUpL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2RlcworCSQo
UlVCWSkgJF4KKwogIyBEeW5hbWljYWxseS1kZWZpbmVkIHRhcmdldHMgYXJlIGxpc3RlZCBiZWxv
dy4gU3RhdGljIHRhcmdldHMgYmVsb25nIHVwIHRvcC4KIAogYWxsIDogXApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yNSw2ICsyNSw3IEBACiAJCQlidWlsZFBoYXNlcyA9ICgKIAkJCSk7CiAJCQlk
ZXBlbmRlbmNpZXMgPSAoCisJCQkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNEYxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNTExNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCiAJCQkJNUQ2QjJBNTUxNTJCOUUyMzAwNTIzMURFIC8qIFBCWFRhcmdl
dERlcGVuZGVuY3kgKi8sCkBAIC02ODUsNiArNjg2LDEyMiBAQAogCQkwRkVBMEEzMzE3MEQ0MEJG
MDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEyRjE3MEQ0MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5j
cHAgKi87IH07CiAJCTBGRUEwQTM0MTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVBMEEzMDE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5oICovOyB9OwogCQkwRkVCM0VDRjE2MjM3RjZDMDBB
QjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1i
bGVyLmNwcCAqLzsgfTsKKwkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRS
ZWdWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLzsg
fTsKKwkJMEZFQzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5oICovOyB9OworCQkwRkVDODUwMDFC
REFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2suY3BwICovOyB9OworCQkwRkVDODUwMTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi87IH07CisJCTBGRUM4
NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCODFCREFDREFDMDA4MEZG
NzQgLyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oICovOyB9OworCQkwRkVDODUwMzFCREFDREFDMDA4
MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2tVdGlscy5oICovOyB9OworCQkwRkVDODUwNDFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dv
cmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRCQTFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi87IH07CisJCTBG
RUM4NTA1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCQjFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUwNjFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5o
ICovOyB9OworCQkwRkVDODUwNzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUwODFCREFD
REFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1Zh
bHVlLmggKi87IH07CisJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCRjFC
REFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uY3BwICovOyB9OworCQkwRkVDODUwQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovOyB9
OworCQkwRkVDODUwQjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMxMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwICovOyB9OworCQkwRkVDODUwQzFCREFD
REFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21t
dXRhdGl2aXR5LmggKi87IH07CisJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
MzJWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuY3BwICovOyB9Owor
CQkwRkVDODUwRTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oICovOyB9OworCQkwRkVDODUwRjFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVl
LmNwcCAqLzsgfTsKKwkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRD
NjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDNzFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MTIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3Vi
bGVWYWx1ZS5oICovOyB9OworCQkwRkVDODUxMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9s
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAqLzsgfTsKKwkJ
MEZFQzg1MTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb250cm9sVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MTUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xh
c3MuY3BwICovOyB9OworCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lD
bGFzcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0Q0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLzsgfTsKKwkJMEZF
Qzg1MTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRDFCREFDREFDMDA4MEZG
NzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MTgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzR2VuZXJhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICov
OyB9OworCQkwRkVDODUxOTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0Q0YxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzR2VuZXJhdGUuaCAqLzsgfTsKKwkJMEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJp
Y0ZyZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxQjFCREFDREFDMDA4MEZGNzQgLyog
QjNJbmRleE1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCAqLzsgfTsKKwkJMEZF
Qzg1MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQyMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0luZGV4U2V0LmggKi87IH07CisJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2Vy
VG9BaXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgKi87IH07CisJCTBG
RUM4NTFFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0xvd2VyVG9BaXIuaCAqLzsgfTsKKwkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
TWVtb3J5VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUyMDFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1MjExQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEQ3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAgKi87IH07
CisJCTBGRUM4NTIyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzT3Bjb2RlLmggKi87IH07CisJCTBGRUM4NTIzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09y
aWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovOyB9OworCQkwRkVDODUy
NDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdp
bi5oICovOyB9OworCQkwRkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3Bl
Y2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODREQjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgKi87IH07
CisJCTBGRUM4NTI2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREQzFCREFD
REFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovOyB9OworCQkwRkVDODUyNzFC
REFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFs
dWUuaCAqLzsgfTsKKwkJMEZFQzg1MjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRE
RjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhh
c2VTY29wZS5oICovOyB9OworCQkwRkVDODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLzsgfTsKKwkJMEZFQzg1
MkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmUuaCAqLzsgfTsKKwkJMEZFQzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2Vk
dXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovOyB9
OworCQkwRkVDODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNDFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi87IH07CisJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrbWFwLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICovOyB9Owor
CQkwRkVDODUzMDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTYxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja21hcFNwZWNpYWwuaCAqLzsgfTsKKwkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAq
LzsgfTsKKwkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovOyB9OworCQkwRkVDODUzNDFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja1Nsb3RWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICov
OyB9OworCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
QzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CisJCTBG
RUM4NTM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3dpdGNoQ2FzZS5jcHAgKi87IH07CisJCTBGRUM4NTM4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLzsgfTsK
KwkJMEZFQzg1MzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUYxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzQTFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUu
aCAqLzsgfTsKKwkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMTFCREFDREFD
MDA4MEZGNzQgLyogQjNUeXBlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovOyB9OworCQkwRkVDODUz
RDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1M0UxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXBzaWxvblZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1M0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi87IH07CisJCTBGRUM4NTQwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1VzZUNvdW50cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggKi87
IH07CisJCTBGRUM4NTQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEY4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi87IH07
CisJCTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEZBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTQ1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVl
UmVwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlUmVwLmggKi87IH07CisJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0
ZVN0YWNrLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTQ4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLzsgfTsK
KwkJMEZFQzg1NkUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTQ5MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggKi87IH07CisJCTBGRUM4NTZGMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJBcmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi87IH07
CisJCTBGRUM4NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTRCMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJBcmcuaCAqLzsgfTsKKwkJMEZFQzg1NzExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2lj
QmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovOyB9OworCQkw
RkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckJhc2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNDYWxsU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNw
cCAqLzsgfTsKKwkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovOyB9OworCQkwRkVDODU3NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5j
cHAgKi87IH07CisJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1MTFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ29kZS5oICovOyB9OworCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQg
LyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJs
b2NrLmggKi87IH07CisJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1
MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovOyB9OworCQkwRkVDODU3OTFC
REFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0ZS5oICovOyB9OworCQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlv
bkNvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovOyB9
OworCQkwRkVDODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1N0MxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NzFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLzsgfTsKKwkJMEZFQzg1N0QxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5z
ZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZFQzg1N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpcklu
c2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovOyB9Owor
CQkwRkVDODU3RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1QTFCREFDREM3MDA4MEZGNzQg
LyogQWlySW5zdC5jcHAgKi87IH07CisJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovOyB9OworCQkwRkVDODU4MTFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdElubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
SW5saW5lcy5oICovOyB9OworCQkwRkVDODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5l
c3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovOyB9OworCQkwRkVDODU4MzFC
REFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1RTFCREFDREM3MDA4MEZGNzQgLyogQWly
UGhhc2VTY29wZS5jcHAgKi87IH07CisJCTBGRUM4NTg0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQ
aGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovOyB9OworCQkw
RkVDODU4NTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MDFCREFDREM3
MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAgKi87IH07CisJCTBGRUM4NTg2MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyUmVnaXN0ZXJQcmlvcml0eS5oICovOyB9OworCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU2MjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi87IH07
CisJCTBGRUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2MzFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3BlY2lhbC5oICovOyB9OworCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyog
QWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwICovOyB9OworCQkwRkVDODU4QTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVy
eXRoaW5nLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmggKi87IH07CisJ
CTBGRUM4NThCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NjYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgKi87IH07CisJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLzsg
fTsKKwkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2ODFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wLmNwcCAqLzsgfTsKKwkJMEZFQzg1OEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clRtcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovOyB9OworCQkwRkVDODU4RjFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElu
bGluZXMuaCAqLzsgfTsKKwkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTZCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTkx
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZh
bGlkYXRlLmggKi87IH07CisJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0
ZWQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1OTIxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi87IH07CisJCTBGRUM4
NUEzMUJEQjVDRjEwMDgwRkY3NCAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayBpbiBGcmFtZXdvcmtz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRjBFQjYxMDVDODZDNkIwMEU2
REYxQiAvKiBGb3VuZGF0aW9uLmZyYW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QTQxQkRCNUNGMTAw
ODBGRjc0IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBK
YXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CisJCTBGRUM4NUFGMUJEQjVENUUwMDgwRkY3
NCAvKiB0ZXN0YjMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi87IH07CisJCTBG
RUM4NUIzMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3
NCAvKiBCM0NvbnN0UHRyVmFsdWUuaCAqLzsgfTsKIAkJMEZFRDY3QjkxQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCNzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLzsgfTsKIAkJMEZFRDY3QkExQjI2MjU2RDAwNjZDRTE1
IC8qIERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0
YW50SG9pc3RpbmdQaGFzZS5oICovOyB9OwogCQkwRkVFOTg0MTFBODg2NUI3MDA3NTRFOTMgLyog
U2V0dXBWYXJhcmdzRnJhbWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5o
ICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xODM5
LDYgKzE5NTYsMTMgQEAKIAkJCXJlbW90ZUdsb2JhbElEU3RyaW5nID0gMEZDRUZBQjUxODA1RDYx
NjAwNDcyQ0U0OwogCQkJcmVtb3RlSW5mbyA9IGxsdm1Gb3JKU0M7CiAJCX07CisJCTBGRUM4NUIw
MUJEQjVEOEYwMDgwRkY3NCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CisJCQlpc2Eg
PSBQQlhDb250YWluZXJJdGVtUHJveHk7CisJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZF
ODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi87CisJCQlwcm94eVR5cGUgPSAxOwor
CQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQ7CisJCQly
ZW1vdGVJbmZvID0gdGVzdGIzOworCQl9OwogCQkwRkY5MjJEMjE0RjQ2QjJGMDA0MUEyNEUgLyog
UEJYQ29udGFpbmVySXRlbVByb3h5ICovID0gewogCQkJaXNhID0gUEJYQ29udGFpbmVySXRlbVBy
b3h5OwogCQkJY29udGFpbmVyUG9ydGFsID0gMDg2N0Q2OTBGRTg0MDI4RkMwMkFBQzA3IC8qIFBy
b2plY3Qgb2JqZWN0ICovOwpAQCAtMjU4MCw2ICsyNzA0LDEyMSBAQAogCQkwRkVBMEEyRjE3MEQ0
MEJGMDBCQjcyMkMgLyogREZHSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBERkdKSVRDb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdKSVRDb2RlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQTBBMzAxNzBENDBCRjAwQkI3MjJDIC8qIERG
R0pJVENvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSklUQ29kZS5o
OyBwYXRoID0gZGZnL0RGR0pJVENvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZFQjNFQ0UxNjIzN0Y2NzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVyLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1hY3JvQXNzZW1ibGVyLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1l
bnRSZWdWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
QXJndW1lbnRSZWdWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Fy
Z3VtZW50UmVnVmFsdWUuaDsgcGF0aCA9IGIzL0IzQXJndW1lbnRSZWdWYWx1ZS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQmFzaWNC
bG9jay5jcHA7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9jay5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja0lubGluZXMuaDsgcGF0aCA9IGIzL0IzQmFzaWNC
bG9ja0lubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEIzQmFzaWNCbG9ja1V0aWxzLmg7IHBhdGggPSBiMy9CM0Jhc2ljQmxvY2tV
dGlscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCQTFCREFDREFDMDA4
MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQmxvY2tXb3JrbGlzdC5oOyBwYXRoID0gYjMvQjNCbG9ja1dvcmtsaXN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0No
ZWNrU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3Bl
Y2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NoZWNrU3BlY2lhbC5o
OyBwYXRoID0gYjMvQjNDaGVja1NwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NoZWNrVmFsdWUuY3BwOyBwYXRoID0gYjMv
QjNDaGVja1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NoZWNrVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ2hlY2tWYWx1ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCRjFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb21tb24u
Y3BwOyBwYXRoID0gYjMvQjNDb21tb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tb24uaDsgcGF0aCA9IGIzL0IzQ29tbW9uLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW11dGF0aXZpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b21tdXRhdGl2aXR5LmNwcDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11
dGF0aXZpdHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb21tdXRhdGl2
aXR5Lmg7IHBhdGggPSBiMy9CM0NvbW11dGF0aXZpdHkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0QzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzQ29uc3QzMlZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29uc3QzMlZhbHVlLmg7IHBhdGggPSBiMy9CM0Nv
bnN0MzJWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNTFCREFD
REFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNDb25zdDY0VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDY0VmFs
dWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDNjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNDb25zdDY0VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3Q2NFZhbHVlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
RG91YmxlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnN0RG91YmxlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjND
b25zdERvdWJsZVZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0RG91YmxlVmFsdWUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
dHJvbFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ29u
dHJvbFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ29udHJvbFZhbHVlLmg7
IHBhdGggPSBiMy9CM0NvbnRyb2xWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmNwcDsgcGF0
aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRDQzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW5jeUNsYXNzLmg7IHBhdGggPSBiMy9C
M0ZyZXF1ZW5jeUNsYXNzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NENE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM0ZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvQjNGcmVxdWVu
dGVkQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0UxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2Vu
ZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmF0ZS5oOyBw
YXRoID0gYjMvQjNHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oOyBw
YXRoID0gYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzSW5kZXhNYXAuaDsgcGF0aCA9IGIzL0IzSW5k
ZXhNYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNJbmRleFNldC5oOyBwYXRoID0gYjMvQjNJbmRleFNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5jcHA7IHBh
dGggPSBiMy9CM0xvd2VyVG9BaXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzTG93ZXJUb0Fpci5oOyBwYXRoID0gYjMvQjNMb3dlclRvQWly
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM01lbW9yeVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzTWVtb3J5VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01l
bW9yeVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzTWVtb3J5VmFs
dWUuaDsgcGF0aCA9IGIzL0IzTWVtb3J5VmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzT3Bjb2RlLmNwcDsgcGF0aCA9IGIzL0IzT3Bj
b2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDgxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3Bjb2RlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
T3Bjb2RlLmg7IHBhdGggPSBiMy9CM09wY29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcmlnaW4uY3BwOyBwYXRoID0gYjMvQjNPcmln
aW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREQTFCREFDREFDMDA4
MEZGNzQgLyogQjNPcmlnaW4uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNP
cmlnaW4uaDsgcGF0aCA9IGIzL0IzT3JpZ2luLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVj
aWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFNwZWNp
YWwuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZh
bHVlLmNwcDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZh
bHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUGF0Y2hwb2ludFZhbHVl
Lmg7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODRERjFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzUGhhc2VTY29wZS5jcHA7IHBhdGgg
PSBiMy9CM1BoYXNlU2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvQjNQaGFzZVNjb3BlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1Byb2NlZHVyZS5jcHA7IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZS5oOyBwYXRoID0g
YjMvQjNQcm9jZWR1cmUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1Byb2NlZHVyZUlubGluZXMuaDsgcGF0aCA9IGIzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNDFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IG5hbWUgPSBCM1N0YWNrbWFwLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja21hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwLmg7
IHBhdGggPSBiMy9CM1N0YWNrbWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N0YWNrbWFwU3BlY2lhbC5oOyBwYXRoID0gYjMv
QjNTdGFja21hcFNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0
RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuY3BwOyBwYXRoID0gYjMvQjNT
dGFja1Nsb3RLaW5kLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1N0YWNrU2xvdEtpbmQuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90S2lu
ZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBCM1N0YWNrU2xvdFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFQjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1N0YWNrU2xvdFZhbHVlLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmg7IHBhdGggPSBiMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3dpdGNoQ2FzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M1N3aXRjaENhc2UuY3BwOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2Fz
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N3aXRjaENhc2UuaDsgcGF0
aCA9IGIzL0IzU3dpdGNoQ2FzZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU3dp
dGNoVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMDFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1N3aXRjaFZhbHVlLmg7IHBhdGggPSBiMy9CM1N3aXRjaFZhbHVlLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5
cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNUeXBlLmNwcDsg
cGF0aCA9IGIzL0IzVHlwZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEYyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQjNUeXBlLmg7IHBhdGggPSBiMy9CM1R5cGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0RjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzVXBzaWxvblZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVXBzaWxvblZhbHVlLmg7IHBhdGggPSBiMy9C
M1Vwc2lsb25WYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNTFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNVc2VDb3VudHMuY3BwOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVc2VD
b3VudHMuaDsgcGF0aCA9IGIzL0IzVXNlQ291bnRzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsaWRhdGUuY3BwOyBwYXRoID0gYjMv
QjNWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY4MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFsaWRhdGUuaDsgcGF0aCA9IGIzL0IzVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZS5jcHA7IHBhdGgg
PSBiMy9CM1ZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNWYWx1ZS5oOyBwYXRoID0gYjMvQjNWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYWx1ZUlubGluZXMuaDsgcGF0aCA9
IGIzL0IzVmFsdWVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEZDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFsdWVSZXAuY3BwOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlUmVwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFs
dWVSZXAuaDsgcGF0aCA9IGIzL0IzVmFsdWVSZXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NDgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFjay5jcHA7
IHBhdGggPSBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTQ5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFsbG9jYXRlU3RhY2suaDsgcGF0
aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NTRBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyQXJnLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBcmcu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckFyZy5o
OyBwYXRoID0gYjMvYWlyL0FpckFyZy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQWlyQmFzaWNCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckJhc2ljQmxv
Y2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEUxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpckNDYWxsU3BlY2lh
bC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQWlyQ0NhbGxTcGVjaWFsLmg7IHBhdGggPSBiMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckNvZGUu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpckNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJDb2RlLmg7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MjFCREFDREM3MDA4MEZGNzQgLyog
QWlyRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckZyZXF1ZW50ZWRCbG9jay5oOyBwYXRoID0gYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyog
QWlyR2VuZXJhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
R2VuZXJhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpckdlbmVyYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRlLmg7IHBhdGgg
PSBiMy9haXIvQWlyR2VuZXJhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1NTUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckdlbmVyYXRpb25Db250ZXh0Lmg7IHBhdGggPSBi
My9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1NTYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckhhbmRsZUNhbGxlZVNhdmVz
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnNlcnRpb25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
SW5zZXJ0aW9uU2V0LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc2Vy
dGlvblNldC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODU1QTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJJbnN0LmNwcDsgcGF0aCA9
IGIzL2Fpci9BaXJJbnN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1
NUIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlySW5zdC5oOyBwYXRoID0gYjMvYWlyL0Fpckluc3QuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxp
bmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckluc3RJbmxpbmVzLmg7
IHBhdGggPSBiMy9haXIvQWlySW5zdElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckxpdmVuZXNzLmg7IHBhdGggPSBiMy9haXIvQWly
TGl2ZW5lc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyUGhhc2VTY29wZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUGhhc2VTY29w
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVGMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9
IEFpclBoYXNlU2NvcGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFp
clJlZ2lzdGVyUHJpb3JpdHkuY3BwOyBwYXRoID0gYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHku
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MTFCREFDREM3MDA4MEZG
NzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBBaXJSZWdpc3RlclByaW9yaXR5Lmg7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQcmlv
cml0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MjFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJTcGVjaWFsLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNw
ZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BlY2lhbC5oOyBw
YXRoID0gYjMvYWlyL0FpclNwZWNpYWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOyBw
YXRoID0gYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3BpbGxFdmVyeXRoaW5nLmg7
IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3RhY2tTbG90LmNwcDsgcGF0
aCA9IGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclN0YWNrU2xvdC5oOyBwYXRoID0gYjMvYWlyL0FpclN0
YWNrU2xvdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2ODFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEFpclRtcC5jcHA7IHBhdGggPSBiMy9haXIvQWlyVG1wLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJUbXAuaDsgcGF0aCA9IGIzL2Fpci9BaXJU
bXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyVG1wSW5saW5lcy5oOyBwYXRoID0gYjMvYWlyL0FpclRtcElubGluZXMuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclZhbGlkYXRl
LmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTZDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJWYWxpZGF0ZS5oOyBwYXRoID0gYjMvYWly
L0FpclZhbGlkYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTkyMUJE
QjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQWlyR2VuZXJhdGVkLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0
ZWQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODVBRDFCREI1Q0YxMDA4
MEZGNzQgLyogdGVzdGIzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGV4cGxpY2l0Rmls
ZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRlSW5JbmRleCA9IDA7
IHBhdGggPSB0ZXN0YjM7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CisJCTBG
RUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBuYW1lID0gdGVzdGIzLmNwcDsgcGF0aCA9IGIzL3Rlc3RiMy5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NUIyMUJERUQ5NTcwMDgwRkY3NCAvKiBCM0Nv
bnN0UHRyVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdFB0
clZhbHVlLmg7IHBhdGggPSBiMy9CM0NvbnN0UHRyVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9pc3Rp
bmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQaGFz
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I4MUIyNjI1NkQwMDY2
Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZHQ29u
c3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUU5
ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZhcmFyZ3NGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMzgwMSw2ICs0MDQwLDE1IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCTBGRUM4NUEyMUJEQjVDRjEwMDgw
RkY3NCAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhh
c2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJ
MEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8sCisJCQkJMEZFQzg1QTQxQkRCNUNGMTAwODBGRjc0IC8qIEphdmFTY3JpcHRDb3Jl
LmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNjE0RjQ2QjEzMDA0MUEyNEUg
LyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTM4NzAsNiArNDExOCw3IEBACiAJ
CQkJMTQxMjExMjAwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5QkYw
QTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCiAJCQkJNjUxMTIzMDUxNDA0NkE0QzAwMkIx
MDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRl
c3RiMyAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwpAQCAtMzg5MCw2ICs0MTM5LDcgQEAKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBGRjE2
NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRDQUQ0
MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBhc3Nl
bWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovLAogCQkJCUE1
NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBiaW5kaW5ncyAqLywKIAkJCQlBN0Q4MDE5RjE4ODBE
NjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFGNjgx
IC8qIGJ5dGVjb2RlICovLApAQCAtNDEwMyw2ICs0MzUzLDEzNSBAQAogCQkJbmFtZSA9IGZ0bDsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRUM4NEIyMUJEQUNENUUwMDgw
RkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJ
CQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKKwkJCQkwRkVDODRCNDFCREFD
REFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRCNTFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0QjYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJMEZFQzg0QjcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NEI4MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0QjkxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8sCisJCQkJMEZFQzg0QkExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGRUM4NEJCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0QkMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0QkQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QkUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9u
LmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5j
cHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5o
ICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAg
Ki8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmggKi8s
CisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAqLywK
KwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLywKKwkJ
CQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAqLywK
KwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi8s
CisJCQkJMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oICovLAor
CQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8sCisJ
CQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggKi8sCisJCQkJ
MEZFQzg0Q0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwICovLAorCQkJ
CTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggKi8sCisJCQkJ
MEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJ
MEZFQzg0Q0UxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4
NENGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggKi8sCisJCQkJMEZFQzg0RDAxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4
NEQxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggKi8sCisJCQkJMEZFQzg0RDIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLywKKwkJCQkwRkVDODREMzFCREFDREFDMDA4
MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLywKKwkJCQkwRkVDODRENDFCREFDREFDMDA4MEZG
NzQgLyogQjNMb3dlclRvQWlyLmggKi8sCisJCQkJMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzTWVtb3J5VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M01lbW9yeVZhbHVlLmggKi8sCisJCQkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bj
b2RlLmNwcCAqLywKKwkJCQkwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAq
LywKKwkJCQkwRkVDODREOTFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovLAorCQkJ
CTBGRUM4NERBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovLAorCQkJCTBGRUM4NERC
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVD
ODREQzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAorCQkJCTBG
RUM4NEREMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0REUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJ
MEZFQzg0REYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8sCisJCQkJMEZF
Qzg0RTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NEUx
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgKi8sCisJCQkJMEZFQzg0RTIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlLmggKi8sCisJCQkJMEZFQzg0RTMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovLAorCQkJCTBGRUM4NEU0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLywKKwkJCQkwRkVDODRFNTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcC5oICovLAorCQkJCTBGRUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5jcHAgKi8sCisJCQkJMEZFQzg0RTkxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5oICovLAorCQkJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja1Nsb3RWYWx1ZS5oICovLAorCQkJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLywKKwkJCQkwRkVDODRFRDFCREFDREFDMDA4MEZGNzQg
LyogQjNTd2l0Y2hDYXNlLmNwcCAqLywKKwkJCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hDYXNlLmggKi8sCisJCQkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dp
dGNoVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRj
aFZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAg
Ki8sCisJCQkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovLAorCQkJCTBG
RUM4NEYzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgKi8sCisJCQkJMEZF
Qzg0RjQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXBzaWxvblZhbHVlLmggKi8sCisJCQkJMEZFQzg0
RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmNwcCAqLywKKwkJCQkwRkVDODRGNjFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLywKKwkJCQkwRkVDODRGNzFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsaWRhdGUuaCAqLywKKwkJCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyog
QjNWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUu
aCAqLywKKwkJCQkwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAq
LywKKwkJCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8sCisJ
CQkJMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLywKKwkJCQkwRkVD
ODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0g
YjM7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OworCQkwRkVDODRCMzFCREFDRDg4
MDA4MEZGNzQgLyogYWlyICovID0geworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9
ICgKKwkJCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAg
Ki8sCisJCQkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAq
LywKKwkJCQkwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLywKKwkJCQkw
RkVDODU0QjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmggKi8sCisJCQkJMEZFQzg1NEMxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckJhc2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NTREMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggKi8sCisJCQkJMEZFQzg1NEUxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg1NEYxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTUwMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDb2RlLmNwcCAqLywKKwkJCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyog
QWlyQ29kZS5oICovLAorCQkJCTBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVu
dGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJh
dGUuY3BwICovLAorCQkJCTBGRUM4NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5o
ICovLAorCQkJCTBGRUM4NTkyMUJEQjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICov
LAorCQkJCTBGRUM4NTU1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5o
ICovLAorCQkJCTBGRUM4NTU2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAgKi8sCisJCQkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxl
ZVNhdmVzLmggKi8sCisJCQkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlv
blNldC5jcHAgKi8sCisJCQkJMEZFQzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlv
blNldC5oICovLAorCQkJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAq
LywKKwkJCQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovLAorCQkJCTBG
RUM4NTVDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0SW5saW5lcy5oICovLAorCQkJCTBGRUM4
NTVEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRUM4NTVFMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAqLywKKwkJCQkwRkVDODU1RjFCREFD
REM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NTYwMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLywKKwkJCQkwRkVDODU2MTFCREFD
REM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0eS5oICovLAorCQkJCTBGRUM4NTYyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODU2MzFCREFDREM3
MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oICovLAorCQkJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwICovLAorCQkJCTBGRUM4NTY1MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLywKKwkJCQkwRkVDODU2NjFCREFDREM3MDA4
MEZGNzQgLyogQWlyU3RhY2tTbG90LmNwcCAqLywKKwkJCQkwRkVDODU2NzFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3RhY2tTbG90LmggKi8sCisJCQkJMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclRtcC5jcHAgKi8sCisJCQkJMEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5o
ICovLAorCQkJCTBGRUM4NTZBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8s
CisJCQkJMEZFQzg1NkIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLywKKwkJ
CQkwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLywKKwkJCSk7CisJ
CQluYW1lID0gYWlyOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMEZGNDI3
MkUxNThFQkNDRTAwNENCOUZGIC8qIGRpc2Fzc2VtYmxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdy
b3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC02MDg5LDYgKzY0NjgsNyBAQAogCQkJCTBGMUZFNTFD
MTkyMkEzQkMwMDY5ODdDNSAvKiBBYm9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
MTYxRTMwRjNBODNDMTAwRjg0NzEwIC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNTVGMEY1MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4g
SGVhZGVycyAqLywKKwkJCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3Bl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJu
YXRlRGlzcGF0Y2hhYmxlQWdlbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBNDhEMTkxMTc3MjM2
NUIwMEM2NUE1RiAvKiBBUElDYWxsYmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzNFNTBFMTZGNUNEMDBCMzQ0NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02
MTE3LDggKzY0OTcsMTAgQEAKIAkJCQlBNUVBNzBFODE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVu
dGFibGVJbnNwZWN0b3JDb250cm9sbGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3
OEY4RjFBMDMxMDA5MDA2QTMwNkQgLyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDdCODNBQzBFNkRCOEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRp
bWl6ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRF
NzEwMDIzRDg3QyAvKiBCaWdJbnRlZ2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3MjFB
Nzg0QkFGMDA2RTRFNjYgLyogQmluYXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzNFQzBFMTZGNUNEMDBCMzQ0NjAgLyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkVBMDg2MjAxODJCN0EwNDAwRjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3RDgwMUE1MTg4MEQ2NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuaCBp
biBIZWFkZXJzICovLApAQCAtNjEzMyw2ICs2NTE1LDcgQEAKIAkJCQk5OURBMDBBNDFCRDU5OTMx
MDBGNDU3NUMgLyogYnVpbHRpbnNfbW9kZWwucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBB
NTFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8s
CiAJCQkJNDFERUExMzIxQjlGMzE2MzAwNkQ2NUREIC8qIEJ1aWx0aW5VdGlscy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1MTAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5RTcyOTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVuZGxlUGF0
aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRl
cmZseS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1
dHRlcmZseUlubGluZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjE0Myw2ICs2NTI2LDcgQEAKIAkJ
CQkwRjJERDgwQjFBQjNEODU4MDBCQkI4RTggLyogQnl0ZWNvZGVLaWxscy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzJGQ0FFMTMxN0E5QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFs
eXNpcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5
dGVjb2RlTGl2ZW5lc3NBbmFseXNpc0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjUxNEYyMTkxOEIzRTE2NzAwOThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY4ODVFMTExODQ5QTNCRTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjgwMjNFQTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4g
SGVhZGVycyAqLywKQEAgLTYxNzksNiArNjU2Myw3IEBACiAJCQkJMEYxNUYxNUYxNEI3QTczRTAw
NURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1M0EzMzIx
N0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1hcC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2Vk
dXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QTNBODE3OTc0MzJEMDBFODkzQzAgLyogQ29t
cGlsYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxRDFCREEwOEVG
MDAzMzFCODQgLyogSlNHbG9iYWxPYmplY3QubHV0LmggaW4gSGVhZGVycyAqLywKQEAgLTYxODYs
OCArNjU3MSwxMCBAQAogCQkJCTBGNkZDNzUxMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0
U3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNFQTE3NDg5NkM3MDA3QjNDMUIgLyog
Q29uY3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y1MEUxNkY1Q0Qw
MEIzNDQ2MCAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg4MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDQ4MzZFNzEzMkRB
N0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
M0NFMDhBMThCQzIxQzMwMEJFREY3NiAvKiBDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNUZEMDA3QTE4OUIwNTEwMDA2MzMyMzEgLyogQ29uc29sZU1lc3NhZ2UuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE5MUJEQTA2ODAwMDMzMUI4NCAvKiBCb29sZWFuUHJv
dG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwODYxOEJDMUE1NjAwQkVERjc2
IC8qIENvbnNvbGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjIwMiw2ICs2NTg5LDcg
QEAKIAkJCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVkQmxvY2tJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0UxMTIgLyogQ29waWVkU3Bh
Y2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDJEMTRBM0M2RTAwMDU3OEU2NSAvKiBDb3Bp
ZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTI0MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3QzExQUQxQkMzODYyQzAw
Qzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNTJEMDE3QURE
NzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjIzOUQxODE2
MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtNjIxMyw2
ICs2NjAxLDcgQEAKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMgLyogY3NzbWluLnB5IGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThEIC8qIEN1c3RvbUdldHRl
clNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYwQ0Q2RTAwMTMxRjhGIC8q
IERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkRGMTdCNkI1
QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNEMjAzNEEwRTE3
MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDEz
NTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmggaW4gSGVhZGVycyAqLywK
QEAgLTYyMzMsNiArNjYyMiw3IEBACiAJCQkJQTcwNEQ5MDMxN0EwQkFBODAwNkJBNTU0IC8qIERG
R0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MDREOTA0MTdBMEJB
QTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fic3RyYWN0VmFsdWUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUxRSAvKiBERkdBZGFwdGl2
ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3QjJFNCAvKiBERkdBZGph
Y2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyNDMsNyArNjYzMyw5IEBACiAJCQkJMEYy
REQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0aWxpdGllcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3IC8qIERGR0FyaXRoTW9kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVCIC8qIERGR0FycmF5aWZ5
U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2Mzk0
ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3RDlBMjk1MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEgLyogREZHQXZhaWxhYmls
aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFMzE5RDBCQTdEMDBCMUQxQjUgLyogREZH
QXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTYyNTMsNiArNjY0NSw3IEBACiAJ
CQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5zZXJ0aW9uU2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGQzE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tNYXAu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZEMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9j
a01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZFMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRjE1
OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrV29ya2xpc3QuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjI5Miw4ICs2Njg1LDEwIEBACiAJCQkJMEY2NkUxNkMxNERGM0YxNjAw
QjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk2MTdBMEJDNzQw
MEVFMjYxOCAvKiBERkdFZGdlRG9taW5hdGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzk4NkQ1
NzE3QTBCQjFFMDBBOTVERDAgLyogREZHRWRnZVVzZXNTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjhGMTQzNDFBREYwOTAxMDBFRDc5MkMgLyogREZHRXBvY2guaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAvKiBERkdFeGl0UHJvZmls
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFz
aWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3NTE3OTczOEI4MDA5REY3
NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0JGRjNDMDE3
OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXplci5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MzIzLDYgKzY3MTgsNyBAQAogCQkJCTYyRjJBQTM4MUIwQkVERTMwMDYxMEM3QSAv
KiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEyOTgxN0EwQkM3NDAwRUUy
NjE4IC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzlDNEIxNUUxQkEyMTU4
RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTg2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclBy
aW9yaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBCOENDMDA3NzNBRDggLyog
REZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkYwRjE5QjE2
QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVhZGVyQ3JlYXRpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzMxLDYgKzY3MjcsNyBAQAogCQkJCTBGMkJEQzQ1MTUy
MjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlmaWVkTm9kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNjFBREYwOTAxMDBFRDc5MkMgLyogREZHTW92
SGludFJlbW92YWxQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMkNENUMxQjYxQTRGODAw
NDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0b3JzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzNDksNiArNjc0Niw3IEBACiAJCQkJMEZDMDk3NkExNDY4QTZGNzAwQ0YyNDQy
IC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVDMTcxNzhFNzMwMDY5
MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUMxNkQw
MkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8uaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIgLyogREZHT1NSRXhpdENv
bXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyog
REZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM5MkM4QTFC
NDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLApAQCAtNjM2
Niw2ICs2NzY0LDggQEAKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURENjYgLyogREZHUHJvcGVy
dHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MzE5NkI4RjlFMDA5MTA1MkEg
LyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBMUJGQTFBOUVDQjdEMDAw
REUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERGR1JlZ2lzdGVyQmFuay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkMxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1NhZmVw
b2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJGRDAwQThEQjgxIC8qIERG
R1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjM5MCw2ICs2NzkwLDcgQEAKIAkJ
CQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFz
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1Rv
RlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4
QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRyeURlZmVycmVkQ29tcGls
YXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0UxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFNzIxMUUxOTNC
OUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjM5
NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGluZ1BoYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkJFMEY3NzE2QzFEQjEyMDA4MkM1RTggLyogREZHVW5pZmljYXRpb25Q
aGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDAxLDYgKzY4MDIsNyBAQAogCQkJCTBGNjIwMTc0
MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGFE
dW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0OTE1MjI4MDk2MDBDRDg5MTAgLyogREZH
VmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNEIxNTIyODA5
RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVnaXN0ZXJBbGxvY2F0aW9u
UGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE4MUJEQTA2ODAwMDMzMUI4NCAvKiBB
cnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDMxLDYgKzY4
MzMsNyBAQAogCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGlu
Z0pJVFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAv
KiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAw
ODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThB
RjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICov
LApAQCAtNjQ5MSw2ICs2ODk0LDcgQEAKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyog
RlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4
NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNE
QTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdo
dGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OTgsOCArNjkwMiwxMCBAQAogCQkJCTJB
ODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1
bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTBG
QjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRTRCRkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVu
Y3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAy
MDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4
Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAg
LTY1MzgsNiArNjk0NCw3IEBACiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVy
YXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBE
MzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUEx
QUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRTA1MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0Yg
LyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTYz
LDYgKzY5NzAsNyBAQAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVy
aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBI
b3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFCREFDREFD
MDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQw
RjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYw
NkRERUExOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNUZEMDA3NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTY2MTYsNiArNzAyNCw3IEBACiAJCQkJQTFCOUUyM0MxQjRFMEQ2
NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBMTgxOTNFMzFCNEUwQ0RCMDBGQzEwMjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IubHV0
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENv
bGxhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQx
QjRFMENEQjAwRkMxMDI5IC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUExNTg3RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0
ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ2LDYgKzcwNTUs
NyBAQAogCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRp
bmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRT
dHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdE
MDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4
NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJp
ZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjY1Niw5ICs3MDY2LDExIEBACiAJCQkJMEYyQjY2RTUx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5
cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0Fy
cmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBG
Rjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2
QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTdCREFFQ0IxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOEIxNDE4NkQxQjYyNTI3RjAwRkIyMDY4IC8qIEpTQXJyb3dGdW5jdGlv
bi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29u
c3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTgwRTE2RjVDRDAwQjM0
NDYwIC8qIEpTQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENE
MTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJC
MkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjY3NSw2
ICs3MDg3LDggQEAKIAkJCQk4NjVBMzBGMTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBK
U0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4ODE4QkMxQTU2MDBCRURGNzYg
LyogSlNDb25zb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxRTFCREFDREFDMDA4MEZG
NzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RjFCREFDREM3
MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMx
NjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2
MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhl
YWRlcnMgKi8sCkBAIC02NjkwLDYgKzcxMDQsNyBAQAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1
REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM4NEVFODFBRERCN0FE
MDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4g
SGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1h
Y3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpT
RmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MDAsMTEgKzcxMTUsMTMgQEAKIAkJ
CQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3
QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGlu
ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Zh
bHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzkxN0U3QjFCNzkwNkZBMDAwRUJEMzMgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1By
b3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0
MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29u
c29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0Eg
LyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MzUs
NiArNzE1Miw3IEBACiAJCQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWlu
LnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
aWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBK
U01vZHVsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUx
MDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02NzY0LDYgKzcxODIsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAv
KiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4
MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUz
RTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1Jl
Zi5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIxLDkgKzcyNDAsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0
QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRT
bG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAv
KiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3
NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1
QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTY4MzYsMTIgKzcyNTcsMTQgQEAKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1
RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgz
MUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8q
IE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUw
NDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8qIE1hY3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fz
c2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4g
SGVhZGVycyAqLywKQEAgLTY4NjcsNiArNzI5MCw3IEBACiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAw
MEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTMzRThEMjExQjkwMTNERTAwMzQ2QjUyIC8qIE5hdGl2ZVN0ZEZ1bmN0aW9u
Q2VsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1
NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0Yw
RTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyODE4
QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJtaW5pc3RpY0lucHV0LmggaW4gSGVhZGVycyAqLywK
QEAgLTY4ODcsNiArNzMxMSw3IEBACiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9w
YXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4
QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNB
RTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0MxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVh
ZGVycyAqLywKQEAgLTY5MDAsMTMgKzczMjUsMTcgQEAKIAkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0
RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTgzNDE4
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdl
bmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBD
QjJCOUEgLyogUHJpdmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIyMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2
RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUx
QzRGREQwMDg1MzU4RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQ1MTBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRjcyOUE1MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0
ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyog
UHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQTFC
REFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY3MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
Q29tcGlsYXRpb25LaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAw
RjVCQTMgLyogUHJvZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5
MjgsMTAgKzczNTcsMTMgQEAKIAkJCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVy
dHlTdG9yYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAg
LyogUHJvdGVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFE
IC8qIFByb3RvdHlwZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODQxQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThG
RTFFOTgwMDFFNzJEOSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFC
QTVGOTg2MDAzMUZGRDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkz
MzJBNDE0Q0E3REQ5MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGOTNCNEFBMThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5k
ZXhNb2RlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyog
UHV0S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8q
IFB1dFByb3BlcnR5U2xvdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTUyLDYgKzczODQsNyBAQAog
CQkJCTBGQzMxNDEyMTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTU3RDIzRUUxODkxQjU1NDAwMzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNzaW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyNjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5
IC8qIFJlbW90ZUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBC
NDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVCQTE1RjAxODIzNDVBRjAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUu
aCBpbiBIZWFkZXJzICovLApAQCAtNjk1OSw2ICs3MzkyLDcgQEAKIAkJCQlBNUJBMTVFRDE4MjM0
MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEYyNEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzBCMEE5RDExQTlCNjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVU
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2Ft
cGxpbmdDb3VudGVyLmggaW4gSGVhZGVycyAqLywKQEAgLTY5ODgsNiArNzQyMiw3IEBACiAJCQkJ
QTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJj
ZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVG
Mjk1MzAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywK
QEAgLTcwMDcsNiArNzQ0Miw3IEBACiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0
cmluZ1Byb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZB
REI1IC8qIFN0cm9uZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZE
RTI2IC8qIFN0cm9uZ0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgyMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgw
RTZDODJGNTAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3
MDkwRUJCNzk2MzAwNTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyQUFBQTMxMjE4QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVy
cyAqLywKQEAgLTcwNDMsMTAgKzc0NzksMTIgQEAKIAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRC
MTkgLyogVHlwZUxvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTEwMTE5NzVCNDY3
MDA4MDg1N0MgLyogVHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI2
QzM5MUFGNDhEREMwMERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODU0MDFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTUyQzk1MkI3MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkQ0REVDMTk4MzJEQzQwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkQ0REYwMTk4MzJERDYwMDdENEIxOSAvKiBUeXBlU2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVu
dFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYg
LyogdWRpczg2X2RlY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAw
NENCOUZGIC8qIHVkaXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4
RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfaW5wdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzA4NCw4
ICs3NTIyLDEwIEBACiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2lu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2lj
QmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1
RDQgLyogV2Vha0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEwQ0RCMUZDMDAz
NjRDQ0UgLyogV2Vha0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzMzFCREFDREFD
MDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2QTkz
RTFBQTREODhEMDAyRkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMTRGNzI1NjYxNEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVh
ZGVycyAqLywKQEAgLTcxMDcsOSArNzU0NywxMiBAQAogCQkJCTk5NTlFOTJFMUJEMTdGQTQwMDFB
QTQxMyAvKiB4eGQucGwgaW4gSGVhZGVycyAqLywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdB
QzQgLyogWWFyci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdC
IC8qIFlhcnJJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzExQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NjcwNEI4NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODY3MDRCODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTg2NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1ODExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5
bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3lt
ZW50UG9zdHByb2Nlc3NpbmcgPSAwOwpAQCAtNzEzNCw2ICs3NTc3LDIyIEBACiAJCQlwcm9kdWN0
UmVmZXJlbmNlID0gMEZDRUZBQjYxODA1RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHls
aWIgKi87CiAJCQlwcm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnku
ZHluYW1pYyI7CiAJCX07CisJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8g
PSB7CisJCQlpc2EgPSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0
ID0gMEZFQzg1QTgxQkRCNUNGMTAwODBGRjc0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBm
b3IgUEJYTmF0aXZlVGFyZ2V0ICJ0ZXN0YjMiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJ
MEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QTIxQkRC
NUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgK
KwkJCSk7CisJCQlkZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHRlc3RiMzsKKwkJ
CXByb2R1Y3ROYW1lID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRkVDODVBRDFC
REI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxl
LnByb2R1Y3QtdHlwZS50b29sIjsKKwkJfTsKIAkJMEZGOTIyQzMxNEY0NkIxMzAwNDFBMjRFIC8q
IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdl
dDsKIAkJCWJ1aWxkQ29uZmlndXJhdGlvbkxpc3QgPSAwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUg
LyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50
T2Zmc2V0c0V4dHJhY3RvciIgKi87CkBAIC03Mjg5LDYgKzc3NDgsNyBAQAogCQkJCTE0QkQ1OUJF
MEEzRThGOTAwMEJBRjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDcz
Njk3NSAvKiBqc2MgKi8sCiAJCQkJNjUxMTIyRjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdF
eHAgKi8sCisJCQkJMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1
RDZCMkE0NzE1MkI5RTE3MDA1MjMxREUgLyogVGVzdCBUb29scyAqLywKIAkJCSk7CiAJCX07CkBA
IC03NTM2LDYgKzc5OTYsMTQgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rw
cm9jZXNzaW5nID0gMDsKIAkJfTsKKwkJMEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJj
ZXMgKi8gPSB7CisJCQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBRjFCREI1RDVFMDA4
MEZGNzQgLyogdGVzdGIzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JE
ZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNDE0RjQ2QjEzMDA0
MUEyNEUgLyogU291cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwog
CQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTc1OTEsNiArODA1OSw3IEBACiAJ
CQkJMEY1NUYwRjQxNEQxMDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ3RjM5QkQxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJC
YXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVF
NyAvKiBBUk1Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVF
MjAwMzUxRTM1IC8qIEFSTXY3RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1
QzAyODVDMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC03NTk4LDggKzgwNjcsMTAgQEAKIAkJCQlBN0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyog
QXJyYXlCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMx
MEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0E4QUYzNjE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJy
YXlDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBG
NjE0MEMgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RkVDODUyNTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVBy
b3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcg
LyogQXNzZW1ibHlIZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYyMCw4ICs4MDkxLDEw
IEBACiAJCQkJMTQyOUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2MkVDOUJCNjFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZs
ZURhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8q
IENhbGxGcmFtZVNodWZmbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3
NTVENTFCODRGQjQwMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZs
ZXI2NC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4
ODVCNEYgLyogQ2FsbExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRD
QTdEQzMwMDg1RjNDNiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2
Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03NjM0LDYgKzgxMDcsNyBAQAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8q
IENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlD
MzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTkzMUJEQjFF
MTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgy
NjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBl
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY0MSw2ICs4MTE1LDcgQEAKIAkJCQlBNzA5RjJGMjE3
QTBBQzJBMDA1MTJFOTggLyogQ29tbW9uU2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTY1NTNBMzMxMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBM0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxh
dGlvblJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyU3RhY2tTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMz
NzYwMDQyN0E0OCAvKiBDb21wbGV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUw
MTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NkIxNkQ4MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc2NjgsNiArODE0Myw3IEBACiAJCQkJMEZDNzEyREUxN0NEODc3OTAw
OENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJyZWRTb3VyY2VEdW1wLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4REI4MSAvKiBERkdBYnN0cmFj
dEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OEQxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5NDE3Mjc2RTQ2MDBDRUFCRkQg
LyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzRTQwMTFCNjE4
QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMThEM0NGMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdB
ZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Njc3LDYg
KzgxNTMsNyBAQAogCQkJCTBGNjM5NDg0MTVFNDgxMTgwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEOUEyOTQxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0F0
VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2NjZFQzYxODM1Njcy
QjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJFQiAvKiBERkdCYWNrd2FyZHNQ
cm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDg5Q0YyMTdBMEI4Q0Mw
MDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY4NSw2ICs4
MTYyLDcgQEAKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcgLyogREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFMjExNDE3MkNFMzAwMTc5Qzk0IC8qIERG
R0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1NzE0RUY5MEEwMDBD
NzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NDYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYzQjNB
MjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY5RDM2OTQxQUU5Q0MzMzAwMEQ0REZCIC8qIERGR0NsZWFuVXBQaGFz
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBCQkZEMDBBOERCODEgLyogREZH
Q2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3MjIsNiArODIwMCw3IEBACiAJCQkJ
MkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9uV2hpdGVsaXN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFENyAvKiBERkdHcmFwaC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGOTE4QTYwMDcwMDAxQTI3RjggLyogREZHR3JhcGhT
YWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjAxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRUeXBlQ2hlY2suY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0EwQkFBODAwNkJBNTU0IC8qIERGR0luUGxhY2VBYnN0
cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc2NCwxNCArODI0MywxNyBAQAogCQkJ
CTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAvKiBERkdPU1JFeGl0Q29tcGlsZXI2NC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJDMEUgLyogREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzkyQzg5MUI0NjE4ODQwMDg0
NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3NTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVGQzlB
QTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFjZWhvbGRlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjIzNUJFRDE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdFByZXBh
cmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjIzNzk3MUFFNDVDQTcwMEQ0MDJFQSAv
KiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5
NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZHUGhpQ2hpbGRyZW4uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3N0ExNzk3MzhCODAwOURGNzQ0IC8qIERGR1BsYW4uY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzQxNkMxREIwOTAwODJDNUU4IC8qIERGR1ByZWRp
Y3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZGQzk1RDE0RUY5
MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNFMDFBQTE5RDM1M0E1MDBGNjFCN0YgLyogREZHUHJl
UG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQzE5RDBCQTdEMDBC
MUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc3ODksNiArODI3MSw4IEBACiAJCQkJMEZDMjBDQjUxODUyRTJDNjAwQzlFOTU0IC8q
IERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4OTNC
REIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3RyYWN0VmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY3OTA4NTUxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJl
Z2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8qIERGR1RodW5rcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4MTYsNiArODMwMCw3IEBA
CiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5HQ0FjdGl2aXR5Q2FsbGJhY2su
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlFNDVBMjUxOEExQjI1OTAwMjZEODhGIC8qIEVuY29k
ZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDNzEwN0VDMzc2MDA0MjdBNDgg
LyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM4MTA3RUMzNzYwMDQy
N0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFQjU4QzE0
MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9ySW5zdGFuY2UuY3BwIGluIFNv
dXJjZXMgKi8sCkBAIC03ODYwLDYgKzgzNDUsNyBAQAogCQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdE
QkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQURGMTgwNzM4QzAw
MDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3
MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBDQTJDNDAgLyogRlRMT1NSRW50
cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCREMxNzE3OEUxQzAwNjkwQzdGIC8qIEZU
TE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODY3LDYgKzgzNTMsNyBAQAogCQkJCTBG
RUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY0ODUzMjkxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292ZXJ5T3Bjb2RlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9y
ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4OTFCREFDREM3MDA4MEZGNzQgLyogQWly
U3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIxMTgxNjM1RjMw
MDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNUYx
QjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtleS5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRMU3RhY2tNYXBzLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzg5OSw2ICs4Mzg2LDcgQEAKIAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2
MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyNUY4
QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRhbFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUyNzFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8q
IEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkZDOTIxMTFCOTRENERGMDA3
MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJE
RUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC03OTA2LDYgKzgzOTQsNyBAQAogCQkJCTlFQTVDN0EyMTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0
aWFsaXplTExWTU1hYy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwODE5MEYwMjFFMDAx
QTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5RTcy
OTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU3QjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1QjcxODVCOEJEMzAwN0U5NUFEIC8qIElu
amVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYz
QzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1
OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2NyaXB0SG9zdC5jcHAgaW4gU291cmNlcyAq
LywKQEAgLTc5MTcsNiArODQwNiw3IEBACiAJCQkJQTU5M0NGODYxODQwMzhDQTAwQkZDRTI3IC8q
IEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5M0NGN0Mx
ODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MzI0Mzg3MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5k
RGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4MTE4OUIx
OTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdGQSAvKiBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg5MTg1NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0
b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzk3Myw2ICs4NDYz
LDcgQEAKIAkJCQk4NkZBOUU5MTE0MkJCQjJFMDAxNzczQjcgLyogSlNCb3VuZEZ1bmN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGOEFGMEE1MDhEMjAwMDA1RjA2MSAvKiBKU0NhbGxi
YWNrQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4OTIwQTUwOEIxMDAw
MDVGMDYxIC8qIEpTQ2FsbGJhY2tGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU2RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
QUJERjYwMEE0MzdGRUYwMEVDQ0EwMSAvKiBKU0NhbGxiYWNrT2JqZWN0LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTY1N0NGNDU4MTlCRjY2NjIwMDRBQ0JGMiAvKiBKU0NhbGxlZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBN0Q4MDFBODE4ODBENkE4MDAyNkMzOUIgLyogSlNDQnVpbHRpbnMuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC03OTgwLDYgKzg0NzEsOCBAQAogCQkJCTE0N0YzOUQ2MTA3RUMz
NzYwMDQyN0E0OCAvKiBKU0NKU1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGQ0U0
MEE1MUU0NkIwMDA1RjA2MSAvKiBKU0NsYXNzUmVmLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
M0NFMDg3MThCQzFBNTYwMEJFREY3NiAvKiBKU0NvbnNvbGUuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1OTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTczMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MTYxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4
dC5tbSBpbiBTb3VyY2VzICovLAogCQkJCTE0QkQ1QTMwMEEzRTkxRjYwMEJBRjU5QyAvKiBKU0Nv
bnRleHRSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyMDI4QjYxNzk3NjAxRTAwOTgwMjhD
IC8qIEpTQ1Rlc3RSdW5uZXJVdGlscy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5OTAsMTYgKzg0
ODMsMTkgQEAKIAkJCQlGRTM4NEVFNzFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3Rv
dHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENzEwN0VDMzc2MDA0MjdBNDggLyog
SlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDA1NjZENjEwN0VD
MjcxMDA1REJDOEQgLyogSlNGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUx
RDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTc5N0UwN0E5MUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlEMjEwN0VDMzc2MDA0MjdBNDggLyogSlNHbG9i
YWxPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwODUxODlCMUI3RTAwNjMzMjMx
IC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1
QzNBMUE1MThDMDQ5MDIwMEM5NTkzQSAvKiBKU0dsb2JhbE9iamVjdENvbnNvbGVDbGllbnQuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Qz
MlZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1NTkyMTgyNDc0NDcwMENDMzg0MyAv
KiBKU0dsb2JhbE9iamVjdERlYnVnZ2FibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU3RDIz
RTkxODkxQjA3NzAwMzFDN0ZBIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnZXJBZ2VudC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNEU5RDE3QjEwN0VDNDY5MDA0RERBMjEgLyogSlNHbG9iYWxPYmpl
Y3RGdW5jdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxMDA3QzAxODdDQzNDNjAwQjM4
ODc5IC8qIEpTR2xvYmFsT2JqZWN0SW5zcGVjdG9yQ29udHJvbGxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQlBNTBFNEI2MzE4ODA5REQ1MDA2OEE0NkQgLyogSlNHbG9iYWxPYmplY3RSdW50aW1l
QWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwM0ZBMjkxODhGMTA1OTAwMTEwRjE0IC8q
IEpTR2xvYmFsT2JqZWN0U2NyaXB0RGVidWdTZXJ2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MTNFNUJGMTg1QkZBQ0MwMDdFOTVBRCAvKiBKU0luamVjdGVkU2NyaXB0SG9zdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVDMTE4NUJGQUNDMDA3RTk1QUQgLyogSlNJbmplY3Rl
ZFNjcmlwdEhvc3RQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTMzRjUwODAxQjg0
MjlBNDAwNDEzODU2IC8qIEpTSW50ZXJuYWxQcm9taXNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
ODAxOCw2ICs4NTE0LDcgQEAKIAkJCQlFMzE4Q0JDMDFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1
bGVOYW1lc3BhY2VPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTM5REE0QTYxQjdFOEI3
QzAwODRGMzNBIC8qIEpTTW9kdWxlUmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0U4
RDFDMUI5MDEzQzMwMDM0NkI1MiAvKiBKU05hdGl2ZVN0ZEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTE4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3MjcwMDkwMERBQzZCQkMwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ0MTA3RUMzNzYwMDQyN0E0OCAvKiBKU09i
amVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDgyQjdFNDBBNDMwNzYwMDA1MTdDRkMgLyog
SlNPYmplY3RSZWYuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDMxLDYgKzg1MjgsNyBAQAogCQkJ
CUUzRUY4ODc0MUI2NkRGMjMwMDNGMjZDQiAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTg2MjU1M0QxMTYxMzZEQTkwMDlGMTdEMCAvKiBKU1Byb3h5LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCUE1NTJDMzdGMUFEREI4RkUwMDEzOTcyNiAvKiBKU1JlbW90
ZUluc3BlY3Rvci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxMTFCREFDREFDMDA4MEZG
NzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTk5MjhGRjNC
MThBQzRBRUMwMEI4Q0YxMiAvKiBKU1JlcGxheUlucHV0cy5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDg3NEFFNTE1RUJERTRBMDAyRTM1ODcgLyogSlNTY29wZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBN0MwQzRBRDE2ODEwNjdFMDAxNzAxMUQgLyogSlNTY3JpcHRSZWYuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC04MDU5LDYgKzg1NTcsNyBAQAogCQkJCTcwOUZCODY3MUFFMzM1QzYwMDM5RDA2
OSAvKiBKU1dlYWtTZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MjU2NjExNUVERTk4RDAw
NjZBNDlCIC8qIEpTV2l0aFNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjE4MTY3
QkFCRUUwMDZENzYwQSAvKiBKU1dyYXBwZXJNYXAubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDI4MDg3MDEwN0VDMTM0MDAxM0U3QjIgLyogSlNXcmFwcGVyT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDRkQ4QzkyMEVFQjJFRTcwMDI4Mzg0OCAvKiBKdW1wVGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExhenlP
cGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA2Niw5ICs4NTY1LDEy
IEBACiAJCQkJMTQ4RjIxQjAxMDdFQzU0MTAwNDJFQzJDIC8qIExleGVyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRjQyNzU3MTU5MTRBMjAwMDRDQjlGRiAvKiBMaW5rQnVmZmVyLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3RTJFQTZDMEZCNDYwQ0YwMDYwMUYwNiAvKiBMaXRlcmFsUGFyc2Vy
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTdGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMzkxMzU0MUI3OTRGNkUwMEVEQUY3MSAvKiBM
aXZlT2JqZWN0TGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTIwQ0U5RDE1RjA0QTk1MDBE
RjM0MzAgLyogTExJbnRDTG9vcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBEMjE0QkJE
MTY1MDBCRkUyNzIgLyogTExJbnREYXRhLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NEZF
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzOEIwMTExN0NGMDc4MDAwQjE0NEQzIC8qIExMSW50RW50cnlwb2ludC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBBODE0QkE3RkFCMDBCRkUyNzIgLyogTExJbnRF
eGNlcHRpb25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE0MTRCQTdGOEQwMEJGRTI3
MiAvKiBMTEludFNsb3dQYXRocy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwNzcsNiArODU3OSw3
IEBACiAJCQkJQTdFNUFCMzcxNzk5RTRCMjAwRDI4MzNEIC8qIExMVk1EaXNhc3NlbWJsZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREUxMDdFQzdFNzAwNjUwNDQ2IC8qIExvb2t1cC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjQ2ODBDQzE0QkJCMTdBMDBCRkUyNzIgLyogTG93TGV2
ZWxJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUxRjFCREFDREFDMDA4
MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEI3MjNCMjEy
RDdEQTQ2MDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2VyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBNYWNyb0Fzc2VtYmxlci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NkM1NjhFMDExQTIxM0VFMDAwN0Y3RjAgLyogTWFjcm9Bc3NlbWJsZXJB
Uk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDg2LDEwICs4NTg5LDEyIEBACiAJCQkJQTdBNEFF
MDgxNzk3M0IyNjAwNTYxMkIxIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE3MDA4NzM5MTdDQkU4NTMwMEMzRTY0MyAvKiBNYXBDb25zdHJ1Y3Rvci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzRERUY5MzE4MkQ5OTE0MDA1MjJDMjIgLyogTWFwSXRl
cmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDcxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAwODczRDE3
Q0JFOEQzMDBDM0U2NDMgLyogTWFwUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMy
QjkxNkM1MTREQTA0MEMwMENCQUM4NiAvKiBNYXJrZWRBbGxvY2F0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyRDZGMDgxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRTcGFjZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU0MzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyogTWFy
a1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTQzNDBBNDg0MUE5MDUxQUYwMEQ3M0NDQSAv
KiBNYXRoQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3RTcwMDY1
MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODEyOCwxNyArODYzMywy
MSBAQAogCQkJCTBGRjcyOUFEMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUFFMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxl
ckJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyOTE2NzcxQzMzMDA5Q0NC
MDcgLyogUHJvZmlsZXJCeXRlY29kZVNlcXVlbmNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZGNzI5QUYxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjAxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2Zp
bGVyQ29tcGlsYXRpb25LaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIxMTY2QUQz
NUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGVkQnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZGNzI5QjIxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyRGF0YWJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYxOTBDQUMxODlEODJGNjAwMEFFNUYwIC8qIFByb2ZpbGVySmV0
dGlzb25SZWFzb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzAxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIz
MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRkY3MjlCNDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUyRTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkIxMDU4QjE2NzU0ODMxMDBGOEFCNkUgLyogUHJvZmls
ZXJPU1JFeGl0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThEMTY3NTQ4MzcwMEY4QUI2
RSAvKiBQcm9maWxlck9TUkV4aXRTaXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTJC
MTY3NzFDM0EwMDlDQ0IwNyAvKiBQcm9maWxlclByb2ZpbGVkQnl0ZWNvZGVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRDNFNDBEMUI2MThCNjYwMEM4MEUxRSAvKiBQcm9wZXJ0eUNvbmRpdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNU
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RkI2MEE0MTAzRjdEQzIwMDE3QTI4NiAvKiBQ
cm9wZXJ0eURlc2NyaXB0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERTgxMDdFQzdF
NzAwNjUwNDQ2IC8qIFByb3BlcnR5U2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBREUzOUZG
RjE2REQxNDRCMDAwM0NENEEgLyogUHJvcGVydHlUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTgxNDcsMTAgKzg2NTYsMTIgQEAKIAkJCQkwRjE1Q0QyMjFCQTVGOTg2MDAzMUZGRDMgLyogUHV0
QnlJZEZsYWdzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMkEzMTRDQTdERDcwMDg1RjND
NiAvKiBQdXRCeUlkU3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTNCNEE5MThCOTJD
NEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODUyQjFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNjBBQzMxNjc0MEY4ODAwMDI5Nzc5IC8qIFJlZHVjZVdoaXRlc3BhY2UuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJRTMzNjM3QTUxQjYzMjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZBN0E4RUIxOEI0MTNDODAwNTIzNzFEIC8qIFJlZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4MDg0MTEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhw
LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTc4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJH
ZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBMTcxMkIzQjExQzdCMjEyMDA3QTUzMTUg
LyogUmVnRXhwQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY0MkM1MTAxNTFDMDZBOTAw
NDZENEVGIC8qIFJlZ0V4cENhY2hlZFJlc3VsdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI4
MDg0MjEwN0VDMDkzMDAxM0U3QjIgLyogUmVnRXhwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC04MTY0LDYgKzg2NzUsNyBAQAogCQkJCUE1QkExNUU5MTgyMzQwQjMwMEE4MkU2OSAv
KiBSZW1vdGVJbnNwZWN0b3IubW0gaW4gU291cmNlcyAqLywKIAkJCQlBNTk0NTU4RjE4MjQ1RUZE
MDBDQzM4NDMgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNUJBMTVFQzE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yRGVidWdnYWJs
ZUNvbm5lY3Rpb24ubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwNTFCREFDREFDMDA4MEZG
NzQgLyogQjNDaGVja1NwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RUUxODIz
NDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24ubW0gaW4gU291cmNl
cyAqLywKIAkJCQkwRjI0RTU1MDE3RUUyNzQ5MDBBQkIyMTcgLyogUmVwYXRjaC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk1Mjc3NzNERTFBQUY4M0FDMDBCREU3RTggLyogUnVudGltZVR5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCkBAIC04MTgyLDYgKzg2OTQsNyBAQAogCQkJCUE1NENGMkY5MTg0RUFF
REEwMDIzN0YxOSAvKiBTY3JpcHRPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU0Q0Yy
RjUxODRFQUIyNDAwMjM3RjE5IC8qIFNjcmlwdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3Mjk5REE1MTdEMTI4NTgwMDVGNUZGOSAvKiBTZXRDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODU4NTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVnaXN0ZXJQcmlvcml0
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzkwREQ2RDE4MkY0OTk3MDA1ODg4MDcgLyogU2V0
SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyOTlEQTExN0QxMjg0
ODAwNUY1RkY5IC8qIFNldFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVFOTg0
MzFBODkyMjc1MDA3NTRFOTMgLyogU2V0dXBWYXJhcmdzRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8s
CkBAIC04MTk2LDYgKzg3MDksNyBAQAogCQkJCTBGRDgyRTg2MTQxRjNGRjEwMDE3OUM5NCAvKiBT
cGVjdWxhdGVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0MxRUFGMTE3OTg3QUI2MDAy
OTlEQjIgLyogU3RhY2tWaXNpdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3MzBCNjEzMTI1
MDA2OEYwMDlEMjVCMSAvKiBTdHJpY3RFdmFsQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQ0NjlERUIxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUMwRUM2MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJ
dGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQzEwN0VDN0U3
MDA2NTA0NDYgLyogU3RyaW5nT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODIxMiw2ICs4
NzI2LDcgQEAKIAkJCQk3MDVCNDFBRDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0
b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA1QjQxQUYxQTZFNTAxRTAwNzE2NzU3IC8qIFN5
bWJvbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3
NTcgLyogU3ltYm9sUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNGMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkx
OUQyODE1ODU2NzczMDA0QTRFN0QgLyogU3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMxODE0NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNl
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyNDAsNiArODc1NSw3IEBACiAJCQkJMEYyNEU1NTgx
N0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
NzlFRTBCRkYxQjRBRkI4NTAwMDM4NUM5IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY2QzczNTAxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVG
aXJlRGV0YWlsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRTA1MDJDMUFBOTA5
NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMEMyNTkx
QTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlFMThFM0E1OTBERjkyNzhDMDBEOTBCMzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04
MjU5LDYgKzg3NzUsNyBAQAogCQkJCTcwOUZCODY5MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0
Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA5RkI4NkIxQUUzMzVDNjAwMzlE
MDY5IC8qIFdlYWtTZXRQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE0RUM5MEIx
ODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCTBGQzgxNTBCMTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJT
dXBwb3J0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RTVBQjNBMTc5OUU0QjIwMEQyODMzRCAv
KiBYODZEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYzQzZEOUMxNTIxMTEx
QTAwNTg1RTRFIC8qIFlhcnJDYW5vbmljYWxpemVVQ1MyLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
ODI4NSw2ICs4ODAyLDExIEBACiAJCQl0YXJnZXQgPSAwRkNFRkFCNTE4MDVENjE2MDA0NzJDRTQg
LyogbGx2bUZvckpTQyAqLzsKIAkJCXRhcmdldFByb3h5ID0gMEZDRUZBQkMxODA1RDY2MzAwNDcy
Q0U0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKIAkJfTsKKwkJMEZFQzg1QjExQkRCNUQ4
RjAwODBGRjc0IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJn
ZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0ID0gMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRl
c3RiMyAqLzsKKwkJCXRhcmdldFByb3h5ID0gMEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBC
WENvbnRhaW5lckl0ZW1Qcm94eSAqLzsKKwkJfTsKIAkJMEZGOTIyRDMxNEY0NkIyRjAwNDFBMjRF
IC8qIFBCWFRhcmdldERlcGVuZGVuY3kgKi8gPSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRl
bmN5OwogCQkJdGFyZ2V0ID0gMEY0NjgwQTkxNEJBN0ZEOTAwQkZFMjcyIC8qIExMSW50IE9mZnNl
dHMgKi87CkBAIC04NDA5LDYgKzg5MzEsMzggQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlv
bjsKIAkJfTsKKwkJMEZFQzg1QTkxQkRCNUNGMTAwODBGRjc0IC8qIERlYnVnICovID0geworCQkJ
aXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5j
ZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAq
LzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJ
fTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJfTsKKwkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8q
IFJlbGVhc2UgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGRUM4
NUFCMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9maWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxk
Q29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIx
MzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRT
ZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9
IFByb2ZpbGluZzsKKwkJfTsKKwkJMEZFQzg1QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rp
b24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1
cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRh
YmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUg
PSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNC
MTRGNDZCMTMwMDQxQTI0RSAvKiBEZWJ1ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1
cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMz
MDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25maWcgKi87CkBAIC04NzYxLDYgKzkzMTUs
MTcgQEAKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRD
b25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CiAJCX07CisJCTBGRUM4NUE4MUJEQjVDRjEw
MDgwRkY3NCAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAi
dGVzdGIzIiAqLyA9IHsKKwkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENv
bmZpZ3VyYXRpb25zID0gKAorCQkJCTBGRUM4NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAq
LywKKwkJCQkwRkVDODVBQTFCREI1Q0YxMDA4MEZGNzQgLyogUmVsZWFzZSAqLywKKwkJCQkwRkVD
ODVBQjFCREI1Q0YxMDA4MEZGNzQgLyogUHJvZmlsaW5nICovLAorCQkJCTBGRUM4NUFDMUJEQjVD
RjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9uICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0
aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rp
b247CisJCX07CiAJCTBGRjkyMkNBMTRGNDZCMTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAq
LyA9IHsKIAkJCWlzYSA9IFhDQ29uZmlndXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRp
b25zID0gKApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw4IEBACiAKICNpZiBFTkFCTEUoQVNTRU1CTEVSKQogCisjaW5jbHVkZSA8d3RmL1ByaW50
U3RyZWFtLmg+CisKIG5hbWVzcGFjZSBKU0MgewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJs
ZXI6OnR3b1RvVGhlMzIgPSAoZG91YmxlKTB4MTAwMDAwMDAwdWxsOwpAQCAtNDcsNSArNDksNzAg
QEAgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6Y2FsbFByb2JlKHN0ZDo6ZnVuYwogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRp
b25hbENvbmRpdGlvbiBjb25kKQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFj
cm9Bc3NlbWJsZXI6OkVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbDoKKyAgICAgICAgb3V0
LnByaW50KCJOb3RFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2Vt
Ymxlcjo6QWJvdmU6CisgICAgICAgIG91dC5wcmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbDoKKyAgICAgICAgb3V0LnBy
aW50KCJBYm92ZU9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3Nl
bWJsZXI6OkJlbG93OgorICAgICAgICBvdXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpCZWxvd09yRXF1YWw6CisgICAgICAgIG91dC5w
cmludCgiQmVsb3dPckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpHcmVhdGVyVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVx
dWFsOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuT3JFcXVhbCIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW46CisgICAgICAgIG91dC5w
cmludCgiTGVzc1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJs
ZXI6Okxlc3NUaGFuT3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzVGhhbk9yRXF1YWwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3Nl
bWJsZXI6OlJlc3VsdENvbmRpdGlvbiBjb25kKQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAg
IGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok92ZXJmbG93OgorICAgICAgICBvdXQucHJpbnQoIk92ZXJm
bG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQ6
CisgICAgICAgIG91dC5wcmludCgiU2lnbmVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IE1hY3JvQXNzZW1ibGVyOjpQb3NpdGl2ZU9yWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJQb3Np
dGl2ZU9yWmVybyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6
WmVybzoKKyAgICAgICAgb3V0LnByaW50KCJaZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvOgorICAgICAgICBvdXQucHJpbnQoIk5vblplcm8i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJM
RVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU5Niw4ICsxNTk2
LDE5IEBAIHB1YmxpYzoKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbik7Cit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6Ok1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24p
OworCit9IC8vIG5hbWVzcGFjZSBXVEYKKwogI2Vsc2UgLy8gRU5BQkxFKEFTU0VNQkxFUikKIAor
bmFtZXNwYWNlIEpTQyB7CisKIC8vIElmIHRoZXJlIGlzIG5vIGFzc2VtYmxlciBmb3IgdGhpcyBw
bGF0Zm9ybSwgYXQgbGVhc3QgYWxsb3cgY29kZSB0byBtYWtlIHJlZmVyZW5jZXMgdG8KIC8vIHNv
bWUgb2YgdGhlIHRoaW5ncyBpdCB3b3VsZCBvdGhlcndpc2UgZGVmaW5lLCBhbGJlaXQgd2l0aG91
dCBnaXZpbmcgdGhhdCBjb2RlIGFueSB3YXkKIC8vIG9mIGRvaW5nIGFueXRoaW5nIHVzZWZ1bC4K
QEAgLTE2MTEsNiArMTYyMiw4IEBAIHB1YmxpYzoKICAgICBlbnVtIEZQUmVnaXN0ZXJJRCB7IE5v
RlBSZWdpc3RlciB9OwogfTsKIAorfSAvLyBuYW1lc3BhY2UgSlNDCisKICNlbmRpZiAvLyBFTkFC
TEUoQVNTRU1CTEVSKQogCiAjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJfaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5w
YXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycK
KyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIEFkZHJlc3NNYXRjaGVyCisKKyMgTm90ZSB0
aGF0IHRoaXMgcmVsaWVzIG9uIEIzIGRvaW5nIGFnZ3Jlc3NpdmUgcmVhc3NvY2lhdGlvbiBhbmQg
Y2Fub25jYWxpemF0aW9uIG9mIGludGVnZXIgYWRkcy4KKyMgV2UnbGwgbmV2ZXIgc2VlIEFkZChB
ZGQoeCwgY29uc3QxKSwgY29uc3QyKSBiZWNhdXNlIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVu
IHJlYXNzb2NpYXRlZCBpbnRvCisjIEFkZCh4LCBjb25zdDEgKyBjb25zdDIpLiBBbHNvLCB3ZSB3
aWxsIG5ldmVyIHNlZSBBZGQoY29uc3QsIHgpLCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgY2Fub25p
Y2FsaXplZAorIyBpdCB0byBBZGQoeCwgY29uc3QpLiBUaGF0IHNhaWQsIGluIHRoaXMgY29kZSB3
ZSBuZXZlciBtYWtlIGFzc2VydGlvbnMgYWJvdXQgdGhlc2Ugb3B0aW1pemF0aW9ucworIyBoYXZp
bmcgYmVlbiBwZXJmb3JtZWQuIEFsc28sIHNpbmNlIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9u
cyBpbiBCMyBoYXZlIGEgYnVpbHQtaW4gb2Zmc2V0LCB3ZQorIyBkb24ndCBuZWVkIHRvIG1hdGNo
IEFkZCh4LCBjb25zdCkuIFRoYXQgd291bGQgaGF2ZSBiZWVuIGZvbGRlZCBpbnRvIHRoZSBMb2Fk
L1N0b3JlIGluc3RydWN0aW9ucworIyBhbHJlYWR5LiBTbywgdGhlIG9ubHkgZmFuY3kgbWF0aGlu
ZyB0aGlzIGNhbiBkbyBpcyBqdXN0IEJhc2VJbmRleCBmb3Jtcy4KKworQWRkU2hpZnQxID0gQWRk
KFNobChpbmRleCwgJGxvZ1NjYWxlKSwgYmFzZSkKK0FkZFNoaWZ0MiA9IEFkZChiYXNlLCBTaGwo
aW5kZXgsICRsb2dTY2FsZSkpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKKworRGlyZWN0Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVn
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVu
dFJlZ1ZhbHVlKCkKK3sKK30KKwordm9pZCBBcmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisjZGVmaW5l
IEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJlZy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQXJndW1lbnRSZWdWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KSB7IHJldHVybiBvcGNvZGUgPT0gQXJndW1lbnRSZWc7IH0KKyAgICAKKyAgICB+QXJndW1lbnRS
ZWdWYWx1ZSgpOworCisgICAgUmVnIGFyZ3VtZW50UmVnKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
QXJndW1lbnRSZWdWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykK
KyAgICAgICAgOiBWYWx1ZShpbmRleCwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRl
clR5cGUoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChyZWcuaXNTZXQoKSk7CisgICAgfQorCisgICAgUmVnIG1fcmVnOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNBcmd1bWVudFJlZ1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg1
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAi
IyI7CisKK0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVx
dWVuY3kpCisgICAgOiBtX2luZGV4KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5
KQoreworfQorCitCYXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNC
bG9jazo6YXBwZW5kKFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUp
OworfQorCitib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2Nr
KQoreworICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCiti
b29sIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQorewor
ICAgIHJldHVybiBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29s
IEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Js
b2NrKiB0bykKK3sKKyAgICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9t
LCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNp
Y0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7Cisg
ICAgaWYgKHByZWRlY2Vzc29ycygpLnNpemUoKSkKKyAgICAgICAgb3V0LnByaW50KCIgIFByZWRl
Y2Vzc29yczogIiwgcG9pbnRlckxpc3REdW1wKHByZWRlY2Vzc29ycygpKSwgIlxuIik7CisgICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgQjM6
OmRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxv
Y2tfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0
aW9uLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2lj
QmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4g
VmFsdWVMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nv
ckxpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JM
aXN0OyAvLyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBz
dGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIH5CYXNpY0Jsb2NrKCk7
CisKKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAg
IFZhbHVlTGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9
CisgICAgVmFsdWVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsg
fQorICAgIFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlcy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBj
b25zdCB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVf
dCBpbmRleCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsg
cmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyBy
ZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKFZh
bHVlKik7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMu
Li4pOworCisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIGNvbnN0IEZy
ZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBGcmVx
dWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgU3VjY2Vz
c29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0OworICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3Nv
cnMoKTsKKworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBj
b25zdDsKKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOwor
ICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vz
c29yQmxvY2tzKCk7CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBj
b25zdCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2ln
bmVkIG51bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUo
KTsgfQorICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVj
ZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIGNvbnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4g
bV9wcmVkZWNlc3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsg
cmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2lj
QmxvY2sqKTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBi
b29sIHJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7
CisKKyAgICBkb3VibGUgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZpYSBQcm9jZWR1cmUuCisgICAgQmFzaWNC
bG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBt
X2luZGV4OworICAgIFZhbHVlTGlzdCBtX3ZhbHVlczsKKyAgICBQcmVkZWNlc3Nvckxpc3QgbV9w
cmVkZWNlc3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3MgRGVlcEJh
c2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29uc3QgQmFz
aWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRl
OgorICAgIGNvbnN0IEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVlcEJhc2lj
QmxvY2tEdW1wIGRlZXBEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVy
biBEZWVwQmFzaWNCbG9ja0R1bXAoYmxvY2spOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxp
bmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Js
b2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJ
bmxpbmVzX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFs
dWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBCYXNpY0Jsb2NrOjphcHBlbmROZXcoUHJvY2VkdXJl
JiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgVmFsdWVUeXBlKiBy
ZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4oYXJndW1lbnRzLi4uKTsKKyAgICBhcHBl
bmQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbmxpbmUgdW5zaWduZWQgQmFz
aWNCbG9jazo6bnVtU3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8
Q29udHJvbFZhbHVlPigpLT5udW1TdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBjb25zdCBGcmVx
dWVudGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRl
eCk7Cit9CisKK2lubGluZSBGcmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1
bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCkt
PnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lubGluZSBjb25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNz
b3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFz
dCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJhc2lj
QmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvcnMoKQoreworICAgIHJl
dHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+c3VjY2Vzc29ycygpOworfQorCitpbmxp
bmUgQmFzaWNCbG9jayogQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5s
aW5lIEJhc2ljQmxvY2sqJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRl
eCkKK3sKKyAgICByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOworfQorCitpbmxpbmUg
U3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0
PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKQoreworICAgIHJldHVybiBTdWNjZXNzb3JD
b2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisK
K2lubGluZSBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IEJhc2lj
QmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0
Cit7CisgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29u
c3QgU3VjY2Vzc29yTGlzdD4oc3VjY2Vzc29ycygpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Js
b2NrSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxv
Y2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tVdGlscy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
QmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2lj
QmxvY2tVdGlsc19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja1V0aWxzX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3RmL0dyYXBoTm9k
ZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRk
UHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQor
eworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKworICAg
IGlmIChwcmVkZWNlc3NvcnMuY29udGFpbnMocHJlZGVjZXNzb3IpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBwcmVkZWNlc3NvcnMuYXBwZW5kKHByZWRlY2Vzc29yKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3Zl
UHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKQor
eworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gcHJlZGVjZXNzb3IpIHsKKyAgICAgICAgICAgIHBy
ZWRlY2Vzc29yc1tpLS1dID0gcHJlZGVjZXNzb3JzLmxhc3QoKTsKKyAgICAgICAgICAgIHByZWRl
Y2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBBU1NFUlQoIXByZWRlY2Vzc29ycy5j
b250YWlucyhwcmVkZWNlc3NvcikpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNp
Y0Jsb2NrPgorYm9vbCByZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJhc2lj
QmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9
IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJl
ZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0g
ZnJvbSkgeworICAgICAgICAgICAgcHJlZGVjZXNzb3JzW2ldID0gdG87CisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8v
IFRoaXMgcmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJl
bid0IHJlYWNoYWJsZS4KK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0
UmVhY2hhYmlsaXR5KFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+JiBibG9ja3Mp
Cit7CisgICAgLy8gQ2xlYXIgYWxsIHByZWRlY2Vzc29yIGxpc3RzIGZpcnN0LgorICAgIGZvciAo
YXV0byYgYmxvY2sgOiBibG9ja3MpCisgICAgICAgIGJsb2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNp
emUoMCk7CisKKyAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFz
aWNCbG9jaz4+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2goYmxvY2tzWzBdLmdldCgpKTsK
KyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3b3JrbGlzdC5wb3AoKSkgeworICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkg
eworICAgICAgICAgICAgaWYgKHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKSkKKyAgICAgICAgICAg
ICAgICBhZGRQcmVkZWNlc3NvcihzdWNjZXNzb3IsIGJsb2NrKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAg
ICAgICAgaWYgKGJsb2Nrc1tpXS0+cHJlZGVjZXNzb3JzKCkuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgYmxvY2tzW2ldID0gbnVsbHB0cjsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9j
a1V0aWxzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlz
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xp
c3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29y
a2xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCbG9ja1dvcmtsaXN0X2gK
KyNkZWZpbmUgQjNCbG9ja1dvcmtsaXN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8
d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRl
ZiBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJs
b2NrV29ya2xpc3Q7CisKKy8vIFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ugc2hvdWxk
IHJlYWQgaXQgYXMgImJsb2NrIHdpdGggYW4gaW50Ii4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVz
aW5nIEJsb2NrV2l0aCA9IEdyYXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OworCisvLyBFeHRl
bmRlZCBibG9jayB3b3JrbGlzdCBpcyB1c2VmdWwgZm9yIGVucXVldWVpbmcgc29tZSBtZXRhLWRh
dGEgYWxvbmcgd2l0aCB0aGUgYmxvY2suIEl0IGFsc28KKy8vIHBlcm1pdHMgZm9yY2libHkgZW5x
dWV1ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJ
dCdzIHVzZWZ1bCBmb3IKKy8vIHRoaW5ncyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwg
aW4gd2hpY2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQorLy8g
c3VjY2Vzc29yIGluZGV4LgordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9j
a1dvcmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5k
ZXhTZXQ8QmFzaWNCbG9jaz4+OworCit0eXBlZGVmIEdyYXBoVmlzaXRPcmRlciBWaXNpdE9yZGVy
OworCit0eXBlZGVmIEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3Jk
ZXI7CisKK3R5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIElu
ZGV4U2V0PEJhc2ljQmxvY2s+PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OworCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M0Jsb2NrV29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVj
a1NwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDaGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5o
IgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBB
aXI7CisKK25hbWVzcGFjZSB7CisKK3Vuc2lnbmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQorewor
ICAgIHN3aXRjaCAoaW5zdC5vcmlnaW4tPm9wY29kZSgpKSB7CisgICAgY2FzZSBDaGVja0FkZDoK
KyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIC8vIFJlc0Nv
bmQsIFRtcCwgVG1wCisgICAgICAgIHJldHVybiAzOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAg
IHJldHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKK0NoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwg
dW5zaWduZWQgbnVtQXJncykKKyAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQorICAgICwgbV9u
dW1DaGVja0FyZ3MobnVtQXJncykKK3sKKyAgICBBU1NFUlQoaXNUZXJtaW5hbChvcGNvZGUpKTsK
K30KKworQ2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKCkKK3sKK30KKworSW5zdCBDaGVja1Nw
ZWNpYWw6OmhpZGRlbkJyYW5jaChjb25zdCBJbnN0JiBpbnN0KSBjb25zdAoreworICAgIEluc3Qg
aGlkZGVuQnJhbmNoKG1fY2hlY2tPcGNvZGUsIGluc3Qub3JpZ2luKTsKKyAgICBoaWRkZW5CcmFu
Y2guYXJncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbnVtQ2hlY2tBcmdzKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsraSkKKyAgICAgICAgaGlkZGVu
QnJhbmNoLmFyZ3MuYXBwZW5kKGluc3QuYXJnc1tpICsgMV0pOworICAgIHJldHVybiBoaWRkZW5C
cmFuY2g7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNv
bnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAg
ICBoaWRkZW5CcmFuY2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7CisgICAgZm9yRWFjaEFy
Z0ltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGNhbGxiYWNr
KTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBy
ZXR1cm4gaGlkZGVuQnJhbmNoKGluc3QpLmlzVmFsaWRGb3JtKCkKKyAgICAgICAgJiYgaXNWYWxp
ZEltcGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOworfQorCiti
b29sIENoZWNrU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5k
ZXgpCit7CisgICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9udW1DaGVj
a0FyZ3MpCisgICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3RhY2soYXJn
SW5kZXggLSAxKTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhpbnN0KSwg
bV9udW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6
SnVtcCBDaGVja1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0
LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZmFpbCA9IGhpZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgIEFT
U0VSVChmYWlsLmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisK
KyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZhbHVlLT5v
cGNvZGUoKSkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCkKKyAg
ICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1
ZS0+b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkKKyAg
ICAgICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0
LmFyZ3NbM10pKTsKKyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUs
IGluc3QuYXJnc1syXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+b3Bj
b2RlKCkgPT0gQ2hlY2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQo
MSkpOworICAgIH0KKworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdz
ICsgMSwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5kKAor
ICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1bmN0
aW9uPigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250
ZXh0JikgeworICAgICAgICAgICAgICAgIGZhaWwubGluaygmaml0KTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAo
KTsKKyAgICAgICAgICAgICAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgICAgICAgICAgICAg
U3RhY2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICAgIHBhcmFt
cy52YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNr
bWFwOworICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAg
ICAgICAgICAgICAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7Cisg
ICAgICAgICAgICB9KSk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7IC8vIEFz
IGZhciBhcyBBaXIgdGhpbmtzLCB3ZSBhcmUgbm90IGEgdGVybWluYWwuCit9CisKK3ZvaWQgQ2hl
Y2tTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX2NoZWNrT3Bjb2RlLCAiKCIsIG1fbnVtQ2hlY2tBcmdzLCAiKSIpOworfQorCit2b2lk
IENoZWNrU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUs
ICIgd2l0aCAiLCBtX251bUNoZWNrQXJncywgIiBhcmdzLiIpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0NoZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0
YWNrbWFwU3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8g
V2Ugd2FudCB0byBsb3dlciBDaGVjayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVu
IHdlIHdhbnQgdG8gcm91dGUgdGhhdCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2Rl
IGluc3RlYWQgb2YgZG9pbmcgYW55dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNr
U3BlY2lhbCB3aWxsIHJlbWVtYmVyCisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2Vs
ZWN0ZWQgYWxvbmcgd2l0aCB0aGUgbnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdh
bnQuIEl0CisvLyB3aWxsIGNyZWF0ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUg
YXBwcm9wcmlhdGUgYXJncyBmcm9tIHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNh
bGwgYW55IG9mIHRoZSBjYWxsYmFja3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwg
Q2hlY2tTdWIsIGFuZCBDaGVja011bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFy
ZSB0aGUgcmV2ZXJzZQorLy8gb2YgdGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQz
MiBiLCBhKS4gRXhjZXB0OgorLy8gLSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBC
cmFuY2hOZWczMiB4LgorLy8gLSBDaGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwz
MiBiLCBhIGJ1dCB3ZSBwYXNzIEFueSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1Nw
ZWNpYWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNp
YWwoQWlyOjpPcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsK
KworcHJvdGVjdGVkOgorICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVw
cmVzZW50aW5nIHRoZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAgIEFpcjo6SW5zdCBo
aWRkZW5CcmFuY2goY29uc3QgQWlyOjpJbnN0JikgY29uc3Q7CisKKyAgICB2b2lkIGZvckVhY2hB
cmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxi
YWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsK
KyAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVy
cmlkZTsKKworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0
aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAv
LyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2Vu
ZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEFpcjo6T3Bjb2RlIG1fY2hlY2tPcGNv
ZGU7CisgICAgdW5zaWduZWQgbV9udW1DaGVja0FyZ3M7Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NoZWNr
U3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNDaGVja1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworQ2hlY2tWYWx1ZTo6fkNoZWNrVmFsdWUoKQoreworfQorCit2
b2lkIENoZWNrVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDaGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUg
Q2hlY2tWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNj
ZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgY2Fz
ZSBDaGVja011bDoKKyAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorCisgICAgfkNoZWNrVmFsdWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOwor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBV
c2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011bC4KKyAgICBD
aGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUs
IGxlZnQtPnR5cGUoKSwgb3JpZ2luLCBsZWZ0LCByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0ludCh0eXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdodC0+
dHlwZSgpKTsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBDaGVja0FkZCB8fCBvcGNvZGUgPT0g
Q2hlY2tTdWIgfHwgb3Bjb2RlID09IENoZWNrTXVsKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhp
cyBmb3JtIGZvciBDaGVjay4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAg
QVNTRVJUKG9wY29kZSA9PSBDaGVjayk7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1Zh
bHVlX2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVk
ZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitib29sIHNob3VsZER1bXBJUigpCit7CisgICAgcmV0dXJuIEZUTDo6
dmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpIHx8IEZUTDo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5
KCkgfHwgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNl
KCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUigpCit7CisgICAgcmV0dXJuIERGRzo6dmFs
aWRhdGlvbkVuYWJsZWQoKSB8fCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKK30KKwor
Ym9vbCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25z
Ojp2YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRTYXZlSVJCZWZv
cmVQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZlcmJvc2VWYWxpZGF0aW9uRmFpbHVy
ZSgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzQ29tbW9uX2gKKyNkZWZpbmUgQjNDb21tb25faAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2lubGluZSBi
b29sIGlzNjRCaXQoKSB7IHJldHVybiBzaXplb2Yodm9pZCopID09IDg7IH0KK2lubGluZSBib29s
IGlzMzJCaXQoKSB7IHJldHVybiAhaXM2NEJpdCgpOyB9CisKK2Jvb2wgc2hvdWxkRHVtcElSKCk7
Citib29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVIo
KTsKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFNhdmVJ
UkJlZm9yZVBoYXNlKCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbW9uX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW11dGF0aXZpdHku
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5
KQoreworICAgIHN3aXRjaCAoY29tbXV0YXRpdml0eSkgeworICAgIGNhc2UgQ29tbXV0YXRpdmU6
CisgICAgICAgIG91dC5wcmludCgiQ29tbXV0YXRpdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgTm90Q29tbXV0YXRpdmU6CisgICAgICAgIG91dC5wcmludCgiTm90Q29tbXV0YXRpdmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW11dGF0aXZpdHlfaAorI2RlZmluZSBC
M0NvbW11dGF0aXZpdHlfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gQ29tbXV0YXRpdml0eSB7CisgICAgQ29tbXV0YXRpdmUs
CisgICAgTm90Q29tbXV0YXRpdmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCitu
YW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07Cit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpDb21tdXRhdGl2aXR5KTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb21tdXRhdGl2
aXR5X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSgpCit7
Cit9CisKK3ZvaWQgQ29uc3QzMlZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25z
dAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNDb25zdDMyVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29uc3QzMlZhbHVlIDogcHVibGlj
IFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUp
IHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdDMyOyB9CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgfkNvbnN0MzJWYWx1ZSgpOworICAgIAorICAgIGludDMyX3QgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJ
bnQzMiwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0MzJW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVl
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6On5Db25zdDY0VmFsdWUoKQor
eworfQorCit2b2lkIENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29u
c3QKK3sKKyAgICBvdXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzQ29uc3Q2NFZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnN0NjRWYWx1ZSA6IHB1Ymxp
YyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2Rl
KSB7IHJldHVybiBvcGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25zdDY0VmFsdWUo
KTsKKyAgICAKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0NjRWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgOiBW
YWx1ZShpbmRleCwgQ29uc3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZh
bHVlKQorICAgIHsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAgIGludDY0X3QgbV92YWx1ZTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91Ymxl
VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisK
K3ZvaWQgQ29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERv
dWJsZVZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdERvdWJsZVZh
bHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9w
Y29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQorICAgIAorICAg
IH5Db25zdERvdWJsZVZhbHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CisKKyAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3Jp
Z2luLCBkb3VibGUgdmFsdWUpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0RG91YmxlLCBE
b3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9Cisg
ICAgCisgICAgZG91YmxlIG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0UHRyVmFsdWVfaAorI2Rl
ZmluZSBCM0NvbnN0UHRyVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdDY0VmFsdWUuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFVzdWFsbHkgeW91IHdhbnQgdG8gdXNlIENv
bnN0MzJWYWx1ZSBvciBDb25zdDY0VmFsdWUgZGlyZWN0bHkuIEJ1dCB0aGlzIGlzIHVzZWZ1bCBm
b3Igd3JpdGluZworLy8gcGxhdGZvcm0tYWdub3N0aWMgY29kZS4gTm90ZSB0aGF0IGEgQ29uc3RQ
dHJWYWx1ZSB3aWxsIGJlaGF2ZSBsaWtlIGVpdGhlciBhIENvbnN0MzJWYWx1ZSBvcgorLy8gQ29u
c3Q2NFZhbHVlIGRlcGVuZGluZyBvbiBwbGF0Zm9ybS4KKworI2lmIFVTRShKU1ZBTFVFNjQpCit0
eXBlZGVmIENvbnN0NjRWYWx1ZSBDb25zdFB0clZhbHVlQmFzZTsKKyNlbHNlCit0eXBlZGVmIENv
bnN0MzJWYWx1ZSBDb25zdFB0clZhbHVlQmFzZTsKKyNlbmRpZgorCitjbGFzcyBDb25zdFB0clZh
bHVlIDogcHVibGljIENvbnN0UHRyVmFsdWVCYXNlIHsKK3B1YmxpYzoKKyAgICB2b2lkKiB2YWx1
ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihDb25z
dFB0clZhbHVlQmFzZTo6dmFsdWUoKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdFB0clZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCB2b2lkKiBwb2ludGVyKQorICAgICAgICA6IENvbnN0UHRyVmFsdWVCYXNlKGlu
ZGV4LCBvcmlnaW4sIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCisgICAgeworICAg
IH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3RQdHJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Nv
bnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29udHJvbFZhbHVlOjpk
dW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChsaXN0RHVt
cChtX3N1Y2Nlc3NvcnMpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
dHJvbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
dHJvbFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b250cm9sVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29udHJvbFZh
bHVlX2gKKyNkZWZpbmUgQjNDb250cm9sVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKworY2xh
c3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29udHJvbFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIEp1bXA6CisgICAgICAgIGNhc2UgQnJh
bmNoOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBPb3BzOgorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU3dpdGNoOiAKKyAgICAgICAgICAgIC8vIFRo
aXMgaXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEgc3ViY2xhc3Mgb2YgQ29udHJvbFZh
bHVlLCBzbyB3ZSB3YW50CisgICAgICAgICAgICAvLyBzd2l0Y2hWYWx1ZS0+YXM8Q29udHJvbFZh
bHVlPigpIHRvIHJldHVybiBub24tbnVsbC4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAg
fQorCisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0
OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5zaWdu
ZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0K
KyAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYg
c3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9
CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1f
c3VjY2Vzc29yczsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVybiBt
X3N1Y2Nlc3NvcnM7IH0KKworcHJvdGVjdGVkOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFVzZSB0aGlz
IGZvciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShp
bmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKKyAgICB7CisgICAgfQor
CisgICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVsYXRlIHRoaXMuCisgICAgU3VjY2Vzc29yTGlz
dCBtX3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KworICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1ZShpbmRl
eCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09
IE9vcHMpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBSZXR1cm4uCisgICAgQ29udHJv
bFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogcmVzdWx0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwg
cmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBSZXR1cm4pOworICAgIH0K
KworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNjZXNz
b3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFuY2gu
CisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29k
ZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgY29uc3QgRnJlcXVl
bnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgbm8pCisgICAgICAgIDogVmFs
dWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAgICAg
ICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQo
eWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChubyk7CisgICAgfQorfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNDb250cm9sVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNGcmVxdWVuY3lDbGFzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KQoreworICAgIHN3aXRj
aCAoZnJlcXVlbmN5KSB7CisgICAgY2FzZSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsOgorICAgICAg
ICBvdXQucHJpbnQoIk5vcm1hbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGcmVxdWVu
Y3lDbGFzczo6UmFyZToKKyAgICAgICAgb3V0LnByaW50KCJSYXJlIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM0ZyZXF1ZW5jeUNsYXNzX2gKKyNkZWZpbmUgQjNGcmVxdWVuY3lD
bGFzc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworZW51bSBjbGFzcyBGcmVxdWVuY3lDbGFzcyA6IHVpbnQ4X3QgeworICAgIC8vIFdl
IGRvbid0IGhhdmUgYW55IGh5cG90aGVzaXMgYWJvdXQgdGhlIGZyZXF1ZW5jeSBvZiB0aGlzIGNv
bnRyb2wgZmxvdyBjb25zdHJ1Y3QuIFRoaXMgaXMKKyAgICAvLyB0aGUgY29tbW9uIGNhc2UuIFdl
IGNhbiBzdGlsbCB1c2UgYmFzaWMgYmxvY2sgZnJlcXVlbmN5IGluIHRoaXMgY2FzZS4KKyAgICBO
b3JtYWwsCisKKyAgICAvLyBXZSBleHBlY3QgdGhhdCB0aGlzIGNvbnRyb2wgZmxvdyBjb25zdHJ1
Y3Qgd2lsbCBiZSByZWFjaGVkIHN1cGVyIHJhcmVseS4gSXQncyB2YWxpZCB0bworICAgIC8vIHBl
cmZvcm0gb3B0aW1pemF0aW9ucyB0aGF0IHB1bmlzaCBSYXJlIGNvZGUuIE5vdGUgdGhhdCB0aGVy
ZSB3aWxsIGJlIHNpdHVhdGlvbnMgd2hlcmUgeW91CisgICAgLy8gaGF2ZSB0byBzb21laG93IGNv
bnN0cnVjdCBhIG5ldyBmcmVxdWVuY3kgY2xhc3MgZnJvbSBhIG1lcmdpbmcgb2YgbXVsdGlwbGUg
Y2xhc3Nlcy4gV2hlbgorICAgIC8vIHRoaXMgaGFwcGVucywgbmV2ZXIgY2hvb3NlIFJhcmU7IGFs
d2F5cyBnbyB3aXRoIE5vcm1hbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVzZSB3ZQorICAgIC8v
IHJlYWxseSBkbyBwdW5pc2ggUmFyZSBjb2RlIHZlcnkgYmFkbHkuCisgICAgUmFyZQorfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmlu
dFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6RnJl
cXVlbmN5Q2xhc3MpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW5jeUNsYXNzX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBCM0ZyZXF1ZW50
ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5lcmljRnJl
cXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFz
cyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxvY2s8QmFzaWNCbG9j
az4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW50ZWRCbG9ja19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNHZW5lcmF0ZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJH
ZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21t
b24uaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5o
IgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3ZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIENDYWxsSGVscGVycyYg
aml0KQoreworICAgIEFpcjo6Q29kZSBjb2RlOworICAgIGdlbmVyYXRlVG9BaXIocHJvY2VkdXJl
LCBjb2RlKTsKKyAgICBBaXI6OmdlbmVyYXRlKGNvZGUsIGppdCk7Cit9CisKK3ZvaWQgZ2VuZXJh
dGVUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQWlyOjpDb2RlJiBjb2RlKQoreworICAgIC8v
IFdlIGRvbid0IHJlcXVpcmUgdGhlIGluY29taW5nIElSIHRvIGhhdmUgcHJlZGVjZXNzb3JzIGNv
bXB1dGVkLgorICAgIHByb2NlZHVyZS5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIAorICAgIGlm
IChzaG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKHByb2NlZHVyZSk7CisKKyAg
ICAvLyBJZiB3ZSdyZSBkb2luZyBzdXBlciB2ZXJib3NlIGR1bXBpbmcsIHRoZSBwaGFzZSBzY29w
ZSBvZiBhbnkgcGhhc2Ugd2lsbCBhbHJlYWR5IGRvIGEgZHVtcC4KKyAgICBpZiAoc2hvdWxkRHVt
cElSKCkgJiYgIXNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygi
SW5pdGlhbCBCMzpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorCisg
ICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlvbnMgaGVyZS4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTA3CisKKyAgICBpZiAoc2hvdWxk
VmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUpOworICAgIAorICAgIC8v
IElmIHdlJ3JlIGRvaW5nIHN1cGVyIHZlcmJvc2UgZHVtcGluZywgdGhlIHBoYXNlIHNjb3BlIG9m
IGFueSBwaGFzZSB3aWxsIGFscmVhZHkgZG8gYSBkdW1wLgorICAgIC8vIE5vdGUgdGhhdCBsb3dl
clRvQWlyKCkgYWN0cyBsaWtlIGEgcGhhc2UgaW4gdGhpcyByZWdhcmQuCisgICAgaWYgKHNob3Vs
ZER1bXBJUigpICYmICFzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFM
b2coIkIzIGFmdGVyICIsIHByb2NlZHVyZS5sYXN0UGhhc2VOYW1lKCksICIsIGJlZm9yZSBnZW5l
cmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICBs
b3dlclRvQWlyKHByb2NlZHVyZSwgY29kZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNHZW5lcmF0ZV9o
CisjZGVmaW5lIEIzR2VuZXJhdGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
UHJvY2VkdXJlOworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKworLy8gVGhpcyB0YWtl
cyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGdlbmVyYXRlcyBp
dCB0byBtYWNoaW5lIGNvZGUgYnkgZmlyc3QKKy8vIGludGVybmFsbHkgY29udmVydGluZyB0byBh
biBBaXI6OkNvZGUgYW5kIHRoZW4gZ2VuZXJhdGluZyB0aGF0LgorSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmLCBDQ2FsbEhlbHBlcnMmKTsKKworLy8gVGhpcyB0YWtl
cyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBpbi1wbGFjZSwgYW5kIGxvd2VycyBpdCB0
byBBaXIuIFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQorLy8gdGhlIEFpciB0byBtYWNoaW5lIGNvZGUg
dXNpbmcgQWlyOjpnZW5lcmF0ZSgpLiBOb3RlIHRoYXQgYW4gQWlyOjpDb2RlIHdpbGwgaGF2ZSBw
b2ludGVycyBpbnRvIHRoZQorLy8gQjM6OlByb2NlZHVyZSwgc28geW91IG5lZWQgdG8gZW5zdXJl
IHRoYXQgdGhlIEIzOjpQcm9jZWR1cmUgb3V0bGl2ZXMgdGhlIEFpcjo6Q29kZS4KK3ZvaWQgZ2Vu
ZXJhdGVUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNHZW5lcmF0
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVk
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEIzR2VuZXJpY0ZyZXF1ZW50
ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNGcmVxdWVuY3lD
bGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVxdWVudGVkIGJsb2NrIGlzIGEgdHVwbGUgb2YgQmFz
aWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNzLiBJdCdzIHVzdWFsbHkgdXNlZCBhcyBhCisvLyBz
dWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdl
bmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVibGljOgorICAgIGV4cGxpY2l0IEdlbmVyaWNGcmVx
dWVudGVkQmxvY2soCisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gbnVsbHB0ciwgRnJlcXVl
bmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbCkKKyAgICAgICAgOiBt
X2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKKyAgICB7Cisg
ICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2sm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fYmxvY2sgPT0gb3RoZXIubV9i
bG9jaworICAgICAgICAgICAgJiYgbV9mcmVxdWVuY3kgPT0gb3RoZXIubV9mcmVxdWVuY3k7Cisg
ICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2sm
IG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwor
ICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuICp0aGlzICE9IEdlbmVyaWNGcmVxdWVudGVkQmxvY2soKTsKKyAgICB9CisKKyAg
ICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2s7IH0KKyAgICBCYXNp
Y0Jsb2NrKiYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgRnJlcXVlbmN5Q2xhc3Mg
ZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGZyZXF1ZW5jeSgp
ICE9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpCisgICAgICAgICAgICBvdXQucHJpbnQoZnJlcXVl
bmN5KCksICI6Iik7CisgICAgICAgIG91dC5wcmludChwb2ludGVyRHVtcChtX2Jsb2NrKSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7CisgICAgRnJlcXVlbmN5
Q2xhc3MgbV9mcmVxdWVuY3k7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0dlbmVyaWNGcmVxdWVudGVkQmxv
Y2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4TWFwX2gKKyNkZWZpbmUgQjNJbmRleE1hcF9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIG1hcCBmb3Iga2V5cyB0aGF0
IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJ
dCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9v
IG1hbnkgb2YgdGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkKKy8vIHNwYXJz
ZSBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBLZXksIHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5kZXhNYXAgeworcHVibGljOgorICAg
IGV4cGxpY2l0IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkKKyAgICB7CisgICAgICAgIG1fdmVj
dG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkK
KyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBWYWx1
ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3Rvcltr
ZXktPmluZGV4KCldOworICAgIH0KKyAgICAKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShL
ZXkqIGtleSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4
KCldOworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX3ZlY3RvcjsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzSW5kZXhNYXBfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNJbmRleFNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
SW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAor
I2RlZmluZSBCM0luZGV4U2V0X2gKKworI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNs
dWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCisvLyBUaGlzIGlzIGEgc2V0IGZvciB0aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0
J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2ll
bnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMs
IHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUg
YXJlIGEgbG90IG9mIFZhbHVlcy4KKworLy8gSWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9j
a3MsIHlvdSBkbyBJbmRleFNldDxCYXNpY0Jsb2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVt
cGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIEluZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNl
dCgpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuICFtX3NldC5zZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wg
Y29udGFpbnMoVCogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KHZhbHVlLT5p
bmRleCgpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4K
KyAgICBjbGFzcyBJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBJdGVyYWJsZShjb25z
dCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3QgSW5kZXhTZXQmIHNldCkKKyAgICAg
ICAgICAgIDogbV9jb2xsZWN0aW9uKGNvbGxlY3Rpb24pCisgICAgICAgICAgICAsIG1fc2V0KHNl
dCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAg
ICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBt
X2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIEJpdFZl
Y3Rvcjo6U2V0Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBpdGVyKQorICAgICAgICAgICAgICAgIDog
bV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pdGVyKGl0ZXIp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFQqIG9wZXJhdG9y
KigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+
YXQoKm1faXRlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVy
YXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2l0ZXIrKzsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faXRlciA9PSBvdGhlci5tX2l0ZXI7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAg
ICBjb25zdCBDb2xsZWN0aW9uVHlwZSogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgQml0VmVj
dG9yOjpTZXRCaXRzSXRlcmFibGU6Oml0ZXJhdG9yIG1faXRlcjsKKyAgICAgICAgfTsKKworICAg
ICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlv
biwgbV9zZXQuYmVnaW4oKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5lbmQoKSk7IH0KKworICAgIHByaXZhdGU6
CisgICAgICAgIGNvbnN0IENvbGxlY3Rpb25UeXBlJiBtX2NvbGxlY3Rpb247CisgICAgICAgIGNv
bnN0IEluZGV4U2V0JiBtX3NldDsKKyAgICB9OworCisgICAgLy8gRm9yIGJhc2ljIGJsb2Nrcywg
eW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUpOworICAgIC8vCisgICAg
Ly8gRm9yIHZhbHVlcywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUu
dmFsdWVzKCkpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIEl0
ZXJhYmxlPENvbGxlY3Rpb25UeXBlPiB2YWx1ZXMoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxl
Y3Rpb24pIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gSXRlcmFibGU8Q29sbGVjdGlvblR5
cGU+KGNvbGxlY3Rpb24pOworICAgIH0KKworICAgIGNvbnN0IEJpdFZlY3RvciYgaW5kaWNlcygp
IGNvbnN0IHsgcmV0dXJuIG1fc2V0OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKKyAgICB7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9y
IChzaXplX3QgaW5kZXggOiBpbmRpY2VzKCkuc2V0Qml0cygpKQorICAgICAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBUOjpkdW1wUHJlZml4LCBpbmRleCk7CisgICAgfQorCitwcml2YXRlOgorICAg
IEJpdFZlY3RvciBtX3NldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gQjNJbmRleFNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xv
d2VyVG9BaXIuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1ODYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzTG93ZXJUb0Fpci5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRl
ICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQWRkcmVzc01hdGNoZXIuaCIKKyNpbmNs
dWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5o
IgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKyNpbmNsdWRlICJCM0xvd2VyaW5nTWF0Y2hlci5o
IgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIK
KyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25h
bWVzcGFjZSB7CisKK2NsYXNzIExvd2VyVG9BaXIgeworcHVibGljOgorICAgIExvd2VyVG9BaXIo
UHJvY2VkdXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCisgICAgICAgIDogdmFsdWVUb1RtcChw
cm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQorICAgICAgICAsIGJsb2NrVG9CbG9jayhwcm9jZWR1
cmUuc2l6ZSgpKQorICAgICAgICAsIHVzZUNvdW50cyhwcm9jZWR1cmUpCisgICAgICAgICwgYWRk
cmVzc1NlbGVjdG9yKCp0aGlzKQorICAgICAgICAsIHByb2NlZHVyZShwcm9jZWR1cmUpCisgICAg
ICAgICwgY29kZShjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisgICAgewor
ICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZSkKKyAgICAgICAg
ICAgIGJsb2NrVG9CbG9ja1tibG9ja10gPSBjb2RlLmFkZEJsb2NrKGJsb2NrLT5mcmVxdWVuY3ko
KSk7CisKKyAgICAgICAgLy8gTG93ZXIgZGVmcyBiZWZvcmUgdXNlcyBvbiBhIGdsb2JhbCBsZXZl
bC4gVGhpcyBpcyBhIGdvb2QgaGV1cmlzdGljIHRvIGxvY2sgZG93biBhCisgICAgICAgIC8vIGhv
aXN0ZWQgYWRkcmVzcyBleHByZXNzaW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBpbnRv
IHRoZSBsb29wLgorICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVy
ZS5ibG9ja3NJblByZU9yZGVyKCkpIHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUu
CisgICAgICAgICAgICBpbnN0cy5yZXNpemUoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IC8vIFByb2Nlc3MgYmxvY2tzIGluIHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3Jl
IGRlZnMuIFRoYXQncyB3aGF0IGFsbG93cyB1cworICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0
dGVybnMgZWZmZWN0aXZlbHkuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+
c2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICAgICAgY3VycmVudFZhbHVlID0gYmxvY2stPmF0
KGkpOworICAgICAgICAgICAgICAgIGlmIChsb2NrZWQuY29udGFpbnMoY3VycmVudFZhbHVlKSkK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaW5zdHMuYXBw
ZW5kKFZlY3RvcjxJbnN0PigpKTsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHJ1bkxv
d2VyaW5nTWF0Y2hlcihjdXJyZW50VmFsdWUsICp0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdCkgeworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKCJGQVRBTDogY291bGQgbm90
IGxvd2VyICIsIGRlZXBEdW1wKGN1cnJlbnRWYWx1ZSksICJcbiIpOworICAgICAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25z
LiBpbnN0cyBjb250YWlucyB0aGVtIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MKKyAg
ICAgICAgICAgIC8vIGl0IGluIHJldmVyc2UuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBpbnN0cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3Qg
OiBpbnN0c1tpXSkKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+YXBw
ZW5kSW5zdChXVEY6Om1vdmUoaW5zdCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBNYWtlIHN1cmUgdGhhdCB0aGUgc3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAg
ICAgICAgICAgIEFTU0VSVChibG9jay0+c3VjY2Vzc29ycygpLnNpemUoKSA8PSAyKTsKKyAgICAg
ICAgICAgIGZvciAoQjM6OkJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JC
bG9ja3MoKSkKKyAgICAgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3Jz
KCkuYXBwZW5kKGJsb2NrVG9CbG9ja1tzdWNjZXNzb3JdKTsKKyAgICAgICAgfQorCisgICAgICAg
IEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CisgICAgICAgIGZvciAoSW5zdCYgaW5z
dCA6IHByb2xvZ3VlKQorICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3QoMCwgV1RG
Ojptb3ZlKGluc3QpKTsKKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29kZVswXSk7Cisg
ICAgfQorCisgICAgVG1wIHRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBUbXAmIHRt
cCA9IHZhbHVlVG9UbXBbdmFsdWVdOworICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgIHRt
cCA9IGNvZGUubmV3VG1wKGlzSW50KHZhbHVlLT50eXBlKCkpID8gQXJnOjpHUCA6IEFyZzo6RlAp
OworICAgICAgICByZXR1cm4gdG1wOworICAgIH0KKworICAgIC8vIFRoaXMgdHVybnMgdGhlIGdp
dmVuIG9wZXJhbmQgaW50byBhbiBhZGRyZXNzLgorICAgIEFyZyBlZmZlY3RpdmVBZGRyKFZhbHVl
KiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYWRkcmVzc1NlbGVjdG9yLnNlbGVjdGVkQWRkcmVz
cyA9IEFyZygpOworICAgICAgICBpZiAocnVuQWRkcmVzc01hdGNoZXIoYWRkcmVzcywgYWRkcmVz
c1NlbGVjdG9yKSkKKyAgICAgICAgICAgIHJldHVybiBhZGRyZXNzU2VsZWN0b3Iuc2VsZWN0ZWRB
ZGRyZXNzOworCisgICAgICAgIHJldHVybiBBcmc6OmFkZHIodG1wKGFkZHJlc3MpKTsKKyAgICB9
CisKKyAgICAvLyBUaGlzIGdpdmVzIHlvdSB0aGUgYWRkcmVzcyBvZiB0aGUgZ2l2ZW4gTG9hZCBv
ciBTdG9yZS4gSWYgaXQncyBub3QgYSBMb2FkIG9yIFN0b3JlLCB0aGVuCisgICAgLy8gaXQgcmV0
dXJucyBBcmcoKS4KKyAgICBBcmcgYWRkcihWYWx1ZSogbWVtb3J5VmFsdWUpCisgICAgeworICAg
ICAgICBNZW1vcnlWYWx1ZSogdmFsdWUgPSBtZW1vcnlWYWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7
CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisKKyAgICAg
ICAgQXJnIHJlc3VsdCA9IGVmZmVjdGl2ZUFkZHIodmFsdWUtPmNoaWxkcmVuKCkubGFzdCgpKTsK
KyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdC53aXRoT2Zmc2V0KHZhbHVlLT5vZmZzZXQoKSk7CisgICAgfQorCisg
ICAgQXJnIGxvYWRBZGRyKFZhbHVlKiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICBpZiAobG9h
ZFZhbHVlLT5vcGNvZGUoKSA9PSBMb2FkKQorICAgICAgICAgICAgcmV0dXJuIGFkZHIobG9hZFZh
bHVlKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW0oVmFsdWUq
IHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAgICAgICAg
ICAgcmV0dXJuIEFyZzo6aW1tKHZhbHVlLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gQXJn
KCk7CisgICAgfQorCisgICAgQXJnIGltbU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGlmIChBcmcgcmVzdWx0ID0gaW1tKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQ7CisgICAgICAgIHJldHVybiB0bXAodmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPEFp
cjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0
YXRpdmU+CisgICAgdm9pZCBhcHBlbmRCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdCA9IHRtcChjdXJyZW50VmFsdWUpOworICAgICAgICAK
KyAgICAgICAgLy8gVGhyZWUtb3BlcmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAgICAgT3Ag
YSwgYiwgYworICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAgICAg
YyA9IGEgT3AgYgorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBB
cmc6OlRtcCwgQXJnOjpUbXApKSB7CisgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBD
b21tdXRhdGl2ZSkgeworICAgICAgICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwgcmVzdWx0
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gQSBub24tY29tbXV0YXRpdmUgb3Bl
cmF0aW9uIGNvdWxkIGhhdmUgYW4gaW1tZWRpYXRlIGluIGxlZnQuCisgICAgICAgICAgICAgICAg
aWYgKGltbShsZWZ0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0o
bGVmdCksIHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaW1tKHJpZ2h0KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwg
QXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIGltbShy
aWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICAvLyBOb3RlIHRoYXQgbm8ga25vd24gYXJjaGl0ZWN0dXJlIGhhcyBhIHRocmVlLW9wZXJhbmQg
Zm9ybSBvZiBiaW5hcnkgb3BlcmF0aW9ucyB0aGF0IGFsc28KKyAgICAgICAgLy8gbG9hZCBmcm9t
IG1lbW9yeS4gSWYgc3VjaCBhbiBhYm9taW5hdGlvbiBkaWQgZXhpc3QsIHdlIHdvdWxkIGhhbmRs
ZSBpdCBzb21ld2hlcmUgYXJvdW5kCisgICAgICAgIC8vIGhlcmUuCisKKyAgICAgICAgLy8gVHdv
LW9wZXJhbmQgZm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAgICAgICAgLy8g
bWVhbiBzb21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEKKworICAgICAg
ICAvLyBBdCB0aGlzIHBvaW50LCB3ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGlvbiB0
aGF0IGhhdmUgYSBmdXNlZCBsb2FkIG9yIGFuIGltbWVkaWF0ZQorICAgICAgICAvLyBvdmVyIHRo
cmVlIG9wZXJhbmQgZm9ybXMuCisgICAgICAgIAorICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9
PSBDb21tdXRhdGl2ZSkgeworICAgICAgICAgICAgQXJnIGxlZnRBZGRyID0gbG9hZEFkZHIobGVm
dCk7CisgICAgICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBsZWZ0QWRkci5raW5kKCks
IEFyZzo6VG1wKSkgeworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBVc2UgdGhlIHJpZ2h0IE1v
dmUgb3Bjb2RlLiBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggMzItYml0IHR5cGVzLCB3ZSBzaG91bGQK
KyAgICAgICAgICAgICAgICAvLyB1c2UgTW92ZTMyLiBJZiB3ZSdyZSBkZWFsaW5nIHdpdGggRG91
Ymxlcywgd2Ugc2hvdWxkIHVzZSBNb3ZlRG91YmxlLgorICAgICAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzMKKyAgICAgICAgICAgICAg
ICBhcHBlbmQoTW92ZSwgdG1wKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBhcHBl
bmQob3Bjb2RlLCBsZWZ0QWRkciwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBBcmcgcmlnaHRBZGRyID0gbG9hZEFk
ZHIocmlnaHQpOworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCByaWdodEFkZHIua2lu
ZCgpLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJl
c3VsdCk7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCByaWdodEFkZHIsIHJlc3VsdCk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW1tKHJpZ2h0KSAm
JiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAg
IGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQob3Bj
b2RlLCBpbW0ocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisKKyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBB
cmc6OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJp
Z2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGFwcGVuZChNb3ZlLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUs
IHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUg
b3Bjb2RlLCBDb21tdXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAg
ICBib29sIHRyeUFwcGVuZFN0b3JlQmluT3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGZhaWxzIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBh
bnkgZWZmZWN0cyBiZXR3ZWVuIHRoZSBMb2FkIGFuZCB0aGUgU3RvcmUgdGhhdAorICAgICAgICAv
LyBjb3VsZCBjbG9iYmVyIHRoZSBsb2FkZWQgdmFsdWUuIFdlIG5lZWQgdG8gY2hlY2sgc3VjaCB0
aGluZ3MgYmVjYXVzZSB3ZSBhcmUgZWZmZWN0aXZlbHkKKyAgICAgICAgLy8gc2lua2luZyB0aGUg
bG9hZC4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDUzNAorICAgICAgICAKKyAgICAgICAgQXJnIHN0b3JlQWRkciA9IGFkZHIoY3VycmVudFZh
bHVlKTsKKyAgICAgICAgQVNTRVJUKHN0b3JlQWRkcik7CisKKyAgICAgICAgVmFsdWUqIG90aGVy
VmFsdWU7CisgICAgICAgIGlmIChhZGRyKGxlZnQpID09IHN0b3JlQWRkcikKKyAgICAgICAgICAg
IG90aGVyVmFsdWUgPSByaWdodDsKKyAgICAgICAgZWxzZSBpZiAoY29tbXV0YXRpdml0eSA9PSBD
b21tdXRhdGl2ZSAmJiBhZGRyKHJpZ2h0KSA9PSBzdG9yZUFkZHIpCisgICAgICAgICAgICBvdGhl
clZhbHVlID0gbGVmdDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBzdG9yZUFkZHIua2lu
ZCgpKSAmJiBpbW0ob3RoZXJWYWx1ZSkpIHsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGlt
bShvdGhlclZhbHVlKSwgc3RvcmVBZGRyKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKCFpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBzdG9y
ZUFkZHIua2luZCgpKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhcHBl
bmQob3Bjb2RlLCB0bXAob3RoZXJWYWx1ZSksIHN0b3JlQWRkcik7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIEFpcjo6T3Bjb2RlIG1vdmVGb3JUeXBlKFR5cGUgdHlwZSkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAg
ICAgICAgcmV0dXJuIE1vdmUzMjsKKyAgICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKGlzNjRCaXQoKSk7CisgICAgICAgICAgICByZXR1cm4gTW92ZTsKKyAgICAg
ICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
dm9pZCBhcHBlbmQoQWlyOjpPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMp
CisgICAgeworICAgICAgICBpbnN0cy5sYXN0KCkuYXBwZW5kKEluc3Qob3Bjb2RlLCBjdXJyZW50
VmFsdWUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9Cisg
ICAgCisgICAgSW5kZXhTZXQ8VmFsdWU+IGxvY2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0
IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgorICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IHZhbHVl
VG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBX
ZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEgbm9uLW51bGwgVG1wIGlzICJwaW5uZWQiLgorICAg
IEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBibG9ja1RvQmxvY2s7
CisKKyAgICBVc2VDb3VudHMgdXNlQ291bnRzOworCisgICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0
Pj4gaW5zdHM7CisgICAgVmVjdG9yPEluc3Q+IHByb2xvZ3VlOworCisgICAgVmFsdWUqIGN1cnJl
bnRWYWx1ZTsKKworICAgIC8vIFRoZSBhZGRyZXNzIHNlbGVjdG9yIHdpbGwgbWF0Y2ggYW55IHBh
dHRlcm4gd2hlcmUgdGhlIGlucHV0IG9wZXJhbmRzIGFyZSBhdmFpbGFibGUgYXMgVG1wcy4KKyAg
ICAvLyBJdCBkb2Vzbid0IGNhcmUgYWJvdXQgc2hhcmluZy4gSXQgd2lsbCBoYXBwaWx5IGVtaXQg
dGhlIHNhbWUgYWRkcmVzcyBleHByZXNzaW9uIG92ZXIgYW5kIG92ZXIKKyAgICAvLyBhZ2FpbiBy
ZWdhcmRsZXNzIG9mIHRoZSBleHByZXNzaW9uJ3MgY29tcGxleGl0eS4gVGhpcyB3b3JrcyBvdXQg
ZmluZSwgc2luY2UgYXQgdGhlIG1hY2hpbmUKKyAgICAvLyBsZXZlbCwgYWRkcmVzcyBleHByZXNz
aW9ucyBhcmUgc3VwZXIgY2hlYXAuIEhvd2V2ZXIsIHRoaXMgZG9lcyBoYXZlIGEgaGFjayB0byBh
dm9pZAorICAgIC8vICJ1bmhvaXN0aW5nIiBhZGRyZXNzIGV4cHJlc3Npb25zLgorICAgIGNsYXNz
IEFkZHJlc3NTZWxlY3RvciB7CisgICAgcHVibGljOgorICAgICAgICBBZGRyZXNzU2VsZWN0b3Io
TG93ZXJUb0FpciYgbG93ZXIpCisgICAgICAgICAgICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBib29sIGFjY2VwdFJvb3QoVmFsdWUqIHJvb3QpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHRoaXMtPnJvb3QgPSByb290OworICAgICAgICAgICAgLy8gV2Ug
ZG9uJ3Qgd2FudCB0byBtYXRjaCBhbiBhZGRyZXNzIGV4cHJlc3Npb24gdGhhdCBoYXMgYWxyZWFk
eSBiZWVuIGNvbXB1dGVkCisgICAgICAgICAgICAvLyBleHBsaWNpdGx5LgorICAgICAgICAgICAg
cmV0dXJuICFsb3dlci52YWx1ZVRvVG1wW3Jvb3RdOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBhY2NlcHRSb290TGF0ZShWYWx1ZSopIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVl
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG93
ZXIudmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhhcmd1bWVudHMuLi4pOworICAgICAgICB9
CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAg
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRJ
bnRlcm5hbHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgICAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1
ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxv
d2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAg
ICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNj
ZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRT
aGlmdDEoVmFsdWUqIGluZGV4LCBWYWx1ZSogbG9nU2NhbGUsIFZhbHVlKiBiYXNlKQorICAgICAg
ICB7CisgICAgICAgICAgICBpZiAobG9nU2NhbGUtPmFzSW50KCkgPCAwIHx8IGxvZ1NjYWxlLT5h
c0ludCgpID4gMykKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBz
ZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KAorICAgICAgICAgICAgICAgIGxvd2VyLnRtcChi
YXNlKSwgbG93ZXIudG1wKGluZGV4KSwgMSA8PCBsb2dTY2FsZS0+YXNJbnQoKSk7CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQy
KFZhbHVlKiBiYXNlLCBWYWx1ZSogaW5kZXgsIFZhbHVlKiBsb2dTY2FsZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIHRyeUFkZFNoaWZ0MShpbmRleCwgbG9nU2NhbGUsIGJhc2UpOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdo
dCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHJpZ2h0LT5oYXNJbnQzMigpKSB7CisgICAg
ICAgICAgICAgICAgLy8gVGhpcyBwcm9kdWN0aW9uIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBz
aW5jZSB3ZSBleHBlY3QKKyAgICAgICAgICAgICAgICAvLyBMb2FkKEFkZChAeCwgQGNvbnN0MSks
IG9mZnNldCA9IGNvbnN0MikgdG8gaGF2ZSBhbHJlYWR5IGJlZW4gc3RyZW5ndGgtcmVkdWNlZAor
ICAgICAgICAgICAgICAgIC8vIHRvIExvYWQoQHgsIG9mZnNldCA9IGNvbnN0MSArIGNvbnN0Miku
CisgICAgICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChs
ZWZ0KSwgcmlnaHQtPmFzSW50MzIoKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6aW5kZXgo
bG93ZXIudG1wKGxlZnQpLCBsb3dlci50bXAocmlnaHQpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlEaXJlY3QoKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIobG93ZXIudG1wKHJvb3QpKTsK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBM
b3dlclRvQWlyJiBsb3dlcjsKKyAgICAgICAgVmFsdWUqIHJvb3Q7CisgICAgICAgIEFyZyBzZWxl
Y3RlZEFkZHJlc3M7CisgICAgfTsKKyAgICBBZGRyZXNzU2VsZWN0b3IgYWRkcmVzc1NlbGVjdG9y
OworCisgICAgLy8gQmVsb3cgaXMgdGhlIGNvZGUgZm9yIGEgbG93ZXJpbmcgc2VsZWN0b3IsIHNv
IHRoYXQgd2UgY2FuIHBhc3MgKnRoaXMgdG8gcnVuTG93ZXJpbmdNYXRjaGVyLgorICAgIC8vIFRo
aXMgd2lsbCBtYXRjaCBjb21wbGV4IG11bHRpLXZhbHVlIGV4cHJlc3Npb25zLCBidXQgb25seSBp
ZiB0aGVyZSBpcyBubyBzaGFyaW5nLiBGb3IgZXhhbXBsZSwKKyAgICAvLyBpdCB3b24ndCBtYXRj
aCBhIExvYWQgdHdpY2UgYW5kIGNhdXNlIHRoZSBnZW5lcmF0ZWQgY29kZSB0byBkbyB0d28gbG9h
ZHMgd2hlbiB0aGUgb3JpZ2luYWwKKyAgICAvLyBjb2RlIGp1c3QgZGlkIG9uZS4KKyAgICAKKyAg
ICBib29sIGFjY2VwdFJvb3QoVmFsdWUqIHJvb3QpCisgICAgeworICAgICAgICBBU1NFUlRfVU5V
U0VEKHJvb3QsICFsb2NrZWQuY29udGFpbnMocm9vdCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBhY2NlcHRSb290TGF0ZShWYWx1ZSopIHsgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBib29sIGFjY2VwdEludGVy
bmFscyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAg
ICAvLyBJZiBvbmUgb2YgdGhlIGludGVybmFsIHRoaW5ncyBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1
dGVkLCB0aGVuIHdlIGRvbid0IHdhbnQgdG8gY2F1c2UKKyAgICAgICAgLy8gaXQgdG8gYmUgcmVj
b21wdXRlZCBhZ2Fpbi4KKyAgICAgICAgaWYgKHZhbHVlVG9UbXBbdmFsdWVdKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgLy8gV2UgcmVxdWlyZSBpbnRlcm5h
bHMgdG8gaGF2ZSBvbmx5IG9uZSB1c2UgLSB1cy4KKyAgICAgICAgaWYgKHVzZUNvdW50c1t2YWx1
ZV0gIT0gMSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJl
dHVybiBhY2NlcHRJbnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICB9CisgICAgYm9vbCBhY2Nl
cHRJbnRlcm5hbHMoKSB7IHJldHVybiB0cnVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZShWYWx1ZSogdmFs
dWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBsb2NrZWQuYWRkKHZh
bHVlKTsKKyAgICAgICAgYWNjZXB0SW50ZXJuYWxzTGF0ZShhcmd1bWVudHMuLi4pOworICAgIH0K
KyAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFs
dWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBpZiAobG9ja2VkLmNv
bnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJu
IGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAgfQorICAgIGJvb2wgYWNjZXB0T3Bl
cmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgorICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9
CisgICAgCisgICAgYm9vbCB0cnlMb2FkKFZhbHVlKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
c3dpdGNoIChjdXJyZW50VmFsdWUtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMyOgorICAg
ICAgICAgICAgYXBwZW5kKE1vdmUzMiwgZWZmZWN0aXZlQWRkcihhZGRyZXNzKSwgdG1wKGN1cnJl
bnRWYWx1ZSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgSW50NjQ6
CisgICAgICAgICAgICBpZiAoaXM2NEJpdCgpKSB7CisgICAgICAgICAgICAgICAgYXBwZW5kKE1v
dmUsIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcyksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAgICBhcHBlbmQoTW92ZURvdWJs
ZSwgZWZmZWN0aXZlQWRkcihhZGRyZXNzKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlBZGQoVmFsdWUqIGxlZnQs
IFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxBZGQzMiwgQ29tbXV0
YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBj
YXNlIEludDY0OgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkNjQsIENvbW11dGF0aXZlPihs
ZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIHRyeUFuZChW
YWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50
eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFu
ZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQ2NCwgQ29t
bXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJv
b2wgdHJ5U3RvcmVBZGRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIFZhbHVlKikKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6
CisgICAgICAgICAgICByZXR1cm4gdHJ5QXBwZW5kU3RvcmVCaW5PcDxBZGQzMiwgQ29tbXV0YXRp
dmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEZJWE1F
OiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIHRyeVN0b3JlQW5kTG9hZChWYWx1ZSogbGVmdCwg
VmFsdWUqIHJpZ2h0LCBWYWx1ZSopCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUo
KSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIHRyeUFwcGVuZFN0
b3JlQmluT3A8QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlT
dG9yZShWYWx1ZSogdmFsdWUsIFZhbHVlKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXBwZW5k
KG1vdmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpLCB0bXAodmFsdWUpLCBlZmZlY3RpdmVBZGRyKGFk
ZHJlc3MpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlUcnVu
Y0FyZ3VtZW50UmVnKFZhbHVlKiBhcmd1bWVudFJlZykKKyAgICB7CisgICAgICAgIHByb2xvZ3Vl
LmFwcGVuZChJbnN0KAorICAgICAgICAgICAgTW92ZSwgY3VycmVudFZhbHVlLAorICAgICAgICAg
ICAgVG1wKGFyZ3VtZW50UmVnLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpLT5hcmd1bWVudFJlZygp
KSwKKyAgICAgICAgICAgIHRtcChjdXJyZW50VmFsdWUpKSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKworICAgIGJvb2wgdHJ5VHJ1bmMoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlBcmd1bWVudFJlZygpCisgICAgewor
ICAgICAgICBwcm9sb2d1ZS5hcHBlbmQoSW5zdCgKKyAgICAgICAgICAgIG1vdmVGb3JUeXBlKGN1
cnJlbnRWYWx1ZS0+dHlwZSgpKSwgY3VycmVudFZhbHVlLAorICAgICAgICAgICAgVG1wKGN1cnJl
bnRWYWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKS0+YXJndW1lbnRSZWcoKSksCisgICAgICAg
ICAgICB0bXAoY3VycmVudFZhbHVlKSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9Cisg
ICAgCisgICAgYm9vbCB0cnlDb25zdDMyKCkKKyAgICB7CisgICAgICAgIGFwcGVuZChNb3ZlLCBp
bW0oY3VycmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlDb25zdDY0KCkKKyAgICB7CisgICAgICAgIGFw
cGVuZChNb3ZlLCBBcmc6OmltbTY0KGN1cnJlbnRWYWx1ZS0+YXNJbnQ2NCgpKSwgdG1wKGN1cnJl
bnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCB0
cnlSZXR1cm4oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh2YWx1ZS0+dHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAg
ICAgICBhcHBlbmQoTW92ZSwgaW1tT3JUbXAodmFsdWUpLCBUbXAoR1BSSW5mbzo6cmV0dXJuVmFs
dWVHUFIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAg
ICAgICAgIGFwcGVuZChNb3ZlRG91YmxlLCB0bXAodmFsdWUpLCBUbXAoRlBSSW5mbzo6cmV0dXJu
VmFsdWVGUFIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgICAgICBhcHBlbmQoUmV0KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIFByb2NlZHVyZSYgcHJvY2VkdXJlOworICAgIENvZGUmIGNv
ZGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsb3dlclRvQWlyKFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VT
Y29wZShwcm9jZWR1cmUsICJsb3dlclRvQWlyIik7CisgICAgTG93ZXJUb0FpciBsb3dlclRvQWly
KHByb2NlZHVyZSwgY29kZSk7CisgICAgbG93ZXJUb0Fpci5ydW4oKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0xvd2VyVG9BaXJfaAorI2RlZmluZSBCM0xvd2VyVG9BaXJfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBy
b2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgbG93ZXJz
IHRoZSBjdXJyZW50IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKwordm9pZCBsb3dlclRv
QWlyKFByb2NlZHVyZSYsIEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVy
bnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRj
aGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdN
YXRjaGVyCisKKyMgVGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFy
dGluZyBhdCB0aGUgdG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1l
bnRzIHdoZXJldmVyIHBvc3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRo
aXMgbWF0Y2hlciBpcyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEK
KworTG9hZCA9IExvYWQoYWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorQW5kID0g
Qml0QW5kKGxlZnQsIHJpZ2h0KQorCitTdG9yZUFkZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmln
aHQpLCBhZGRyZXNzKQorU3RvcmVBbmRMb2FkID0gU3RvcmUoQml0QW5kKGxlZnQsIHJpZ2h0KSwg
YWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFsdWUsIGFkZHJlc3MpCisKK1RydW5jQXJndW1lbnRS
ZWcgPSBUcnVuYyhhcmd1bWVudFJlZyA9IEFyZ3VtZW50UmVnKCkpCitUcnVuYyA9IFRydW5jKHZh
bHVlKQorCitBcmd1bWVudFJlZyA9IEFyZ3VtZW50UmVnKCkKKworQ29uc3QzMiA9IENvbnN0MzIo
KQorQ29uc3Q2NCA9IENvbnN0NjQoKQorCitSZXR1cm4gPSBSZXR1cm4odmFsdWUpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1
ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQoreworfQorCit2b2lkIE1lbW9yeVZh
bHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmIChtX29mZnNl
dCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29mZnNldCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZpbmUgQjNNZW1vcnlWYWx1ZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gRklYTUU6IEFkZCBhbGlhcyBhbmFseXNpcyB0byB0
aGVzZSBieSBhbGxvd2luZyB0aGUgY2xpZW50IHRvIGFzc29jaWF0ZSBhbiBpbnRlZ2VyIHJhbmdl
IHRvIHRoZQorLy8gdmFsdWUuIFR3byBvcGVyYXRpb25zIG1heSBhY2Nlc3MgdGhlIHNhbWUgbWVt
b3J5IGlmIHRoZWlyIHJhbmdlcyBvdmVybGFwcy4KKy8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA1MzUKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgTWVtb3J5
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAg
IGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgY2FzZSBMb2FkMTZa
OgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAg
ICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICBjYXNlIFN0b3JlMTY6
CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZhbHVlKCk7CisKKyAgICBpbnQz
Ml90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9y
IExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBvZiB0aGUgTG9hZHMgdGhhdCBo
YXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMgdGhlIHJldHVybmVkIHR5cGUpLgor
ICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdp
biwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBp
ZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAg
ICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNl
IExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gRG91YmxlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAg
ICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAg
ICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBWb2lkKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5
cGUgaXMgaW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkK
KyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8gRG91
YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQp
CisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2Fz
ZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExv
YWQxNlM6CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMuCisgICAgTWVtb3J5VmFs
dWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2lu
LCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBpbnQzMl90IG9mZnNldCA9
IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwg
cG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAgeworICAgICAgICBpZiAo
IUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAg
ICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAg
ICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQzMl90IG1fb2Zmc2V0IHsgMCB9OworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNNZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bj
b2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzT3Bjb2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpC
MzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE9wY29kZSBvcGNvZGUp
Cit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgb3V0LnBy
aW50KCJOb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAg
IG91dC5wcmludCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3Qz
MjoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENvbnN0NjQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3Q2NCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJDb25zdERvdWJs
ZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAgIG91dC5w
cmludCgiU3RhY2tTbG90Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFyZ3VtZW50UmVn
OgorICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50UmVnIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgb3V0LnByaW50KCJGcmFtZVBvaW50ZXIiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkOgorICAgICAgICBvdXQucHJpbnQoIkFkZCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdWI6CisgICAgICAgIG91dC5wcmludCgiU3Vi
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE11bDoKKyAgICAgICAgb3V0LnByaW50KCJN
dWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRGl2OgorICAgICAgICBvdXQucHJpbnQo
IkRpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGlsbERpdjoKKyAgICAgICAgb3V0
LnByaW50KCJDaGlsbERpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNb2Q6CisgICAg
ICAgIG91dC5wcmludCgiTW9kIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJpdEFuZDoK
KyAgICAgICAgb3V0LnByaW50KCJCaXRBbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
Qml0T3I6CisgICAgICAgIG91dC5wcmludCgiQml0T3IiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQml0WG9yOgorICAgICAgICBvdXQucHJpbnQoIkJpdFhvciIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTaGw6CisgICAgICAgIG91dC5wcmludCgiU2hsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFNTaHI6CisgICAgICAgIG91dC5wcmludCgiU1NociIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBaU2hyOgorICAgICAgICBvdXQucHJpbnQoIlpTaHIiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDg6CisgICAgICAgIG91dC5wcmludCgiU0V4dDgi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDE2OgorICAgICAgICBvdXQucHJpbnQo
IlNFeHQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MzI6CisgICAgICAgIG91
dC5wcmludCgiU0V4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpFeHQzMjoKKyAg
ICAgICAgb3V0LnByaW50KCJaRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVHJ1
bmM6CisgICAgICAgIG91dC5wcmludCgiVHJ1bmMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgRlJvdW5kOgorICAgICAgICBvdXQucHJpbnQoIkZSb3VuZCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBJVG9EOgorICAgICAgICBvdXQucHJpbnQoIklUb0QiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgRFRvSTMyOgorICAgICAgICBvdXQucHJpbnQoIkRUb0kzMiIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50
KCJOb3RFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMZXNzVGhhbjoKKyAgICAg
ICAgb3V0LnByaW50KCJMZXNzVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHcmVh
dGVyVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc0VxdWFsIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICAgICAgb3V0LnBy
aW50KCJHcmVhdGVyRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWJvdmU6Cisg
ICAgICAgIG91dC5wcmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVs
b3c6CisgICAgICAgIG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQWJvdmVFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZUVxdWFsIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dF
cXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIG91dC5w
cmludCgiTG9hZDhaIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4UzoKKyAgICAg
ICAgb3V0LnByaW50KCJMb2FkOFMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDE2
WjoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZaIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIExvYWQxNlM6CisgICAgICAgIG91dC5wcmludCgiTG9hZDE2UyIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiTG9hZEZsb2F0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIG91dC5wcmludCgiTG9h
ZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTg6CisgICAgICAgIG91dC5wcmlu
dCgiU3RvcmU4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlMTY6CisgICAgICAg
IG91dC5wcmludCgiU3RvcmUxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZUZs
b2F0OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiU3RvcmUiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQ0NhbGw6CisgICAgICAgIG91dC5wcmludCgiQ0NhbGwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgUGF0Y2hwb2ludDoKKyAgICAgICAgb3V0LnByaW50KCJQYXRj
aHBvaW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICBv
dXQucHJpbnQoIkNoZWNrQWRkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrU3Vi
OgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrU3ViIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENoZWNrTXVsOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrTXVsIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFVwc2lsb246CisgICAgICAgIG91dC5wcmludCgiVXBzaWxv
biIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQaGk6CisgICAgICAgIG91dC5wcmludCgi
UGhpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEp1bXA6CisgICAgICAgIG91dC5wcmlu
dCgiSnVtcCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCcmFuY2g6CisgICAgICAgIG91
dC5wcmludCgiQnJhbmNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN3aXRjaDoKKyAg
ICAgICAgb3V0LnByaW50KCJTd2l0Y2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmV0
dXJuOgorICAgICAgICBvdXQucHJpbnQoIlJldHVybiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBPb3BzOgorICAgICAgICBvdXQucHJpbnQoIk9vcHMiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcGNvZGVfaAor
I2RlZmluZSBCM09wY29kZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3Rm
L1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51
bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQgcmV0dXJucyBWb2lkLCB1
c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUuCisgICAgTm9wLAorICAg
IAorICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1c2FibGUgd2l0aCBhbnkgdmFsdWUgdHlw
ZS4KKyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0YW50cy4gVXNlIHRoZSBDb25zdFZhbHVl
KiBjbGFzc2VzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2wgZmxvdywgc28gdGhhdCB3
ZSBjYW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUgd2Ugd291bGQgY29uc3RydWN0IHRoZW0u
IExhcmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRvIGNyZWF0ZS4KKyAgICBDb25zdDMyLAor
ICAgIENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBzdGFj
ayBzbG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJv
Z3JhbSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQg
aXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJh
bmdlIG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNz
LgorICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVy
LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQor
ICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQsIGFu
ZCB0aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1cmUgdGhhdCB3ZQorICAgIC8vIGRvbid0
IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFsbG9jYXRpb24gb3IgY2FsbHMgKGVpdGhl
ciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQorICAgIC8vIHN0YWNrIG9yIHByZXNlcnZp
bmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3RlcikuIFVzZSB0aGUgQXJndW1lbnRSZWdWYWx1
ZSBjbGFzcy4gVGhlIHJldHVybgorICAgIC8vIHR5cGUgaXMgZWl0aGVyIHBvaW50ZXIoKSAoZm9y
IEdQUnMpIG9yIERvdWJsZSAoZm9yIEZQUnMpLgorICAgIEFyZ3VtZW50UmVnLAorCisgICAgLy8g
VGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4gcHV0IHRoaXMgYW55d2hlcmUgaW4gY29udHJvbCBm
bG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVsZCB0aGUKKyAgICAvLyBmcmFtZSBwb2ludGVyLCB3
aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29tcGlsZXIgY2hhbmdlcyB0aGUgZnJhbWUgcG9pbnRlciB0
ZW1wb3JhcmlseSBmb3Igc29tZQorICAgIC8vIHNpbGx5IHJlYXNvbiwgdGhlIEZyYW1lUG9pbnRl
ciBpbnRyaW5zaWMgd2lsbCByZXR1cm4gd2hlcmUgdGhlIGZyYW1lIHBvaW50ZXIgKnNob3VsZCog
YmUgbm90CisgICAgLy8gd2hlcmUgaXQgaGFwcGVucyB0byBiZSByaWdodCBub3cuCisgICAgRnJh
bWVQb2ludGVyLAorCisgICAgLy8gUG9seW1vcnBoaWMgbWF0aCwgdXNhYmxlIHdpdGggYW55IHZh
bHVlIHR5cGUuCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisgICAgRGl2LAorCisgICAg
Ly8gSW50ZWdlciBtYXRoLgorICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0IHRyYXAgZXZlciwgYmVo
YXZlcyBsaWtlIEpTICh4L3kpfDAuCisgICAgTW9kLAorICAgIEJpdEFuZCwKKyAgICBCaXRPciwK
KyAgICBCaXRYb3IsCisgICAgU2hsLAorICAgIFNTaHIsCisgICAgWlNociwKKworICAgIC8vIENh
c3RzIGFuZCBzdWNoLgorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIEludDMyOgorICAgIFNFeHQ4
LAorICAgIFNFeHQxNiwKKyAgICAvLyBUYWtlcyBJbnQzMiBhbmQgcmV0dXJucyBJbnQ2NDoKKyAg
ICBTRXh0MzIsCisgICAgWkV4dDMyLAorICAgIC8vIFRha2VzIEludDY0IGFuZCByZXR1cm5zIElu
dDMyOgorICAgIFRydW5jLAorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIERvdWJsZToKKyAgICBG
Um91bmQsCisgICAgLy8gVGFrZXMgaW50cyBhbmQgcmV0dXJucyBEb3VibGU6CisgICAgSVRvRCwK
KyAgICAvLyBUYWtlcyBEb3VibGUgYW5kIHJldHVybnMgSW50MzI6CisgICAgRFRvSTMyLAorCisg
ICAgLy8gUG9seW1vcnBoaWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBl
LiBSZXR1cm5zIGludDMyIDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCisgICAgLy8gaXMganVzdCBF
cXVhbCh4LCAwKS4KKyAgICBFcXVhbCwKKyAgICBOb3RFcXVhbCwKKyAgICBMZXNzVGhhbiwKKyAg
ICBHcmVhdGVyVGhhbiwKKyAgICBMZXNzRXF1YWwsCisgICAgR3JlYXRlckVxdWFsLAorCisgICAg
Ly8gSW50ZWdlciBjb21wYXJpc29ucy4gUmV0dXJucyBpbnQzMiAwIG9yIDEuCisgICAgQWJvdmUs
CisgICAgQmVsb3csCisgICAgQWJvdmVFcXVhbCwKKyAgICBCZWxvd0VxdWFsLAorCisgICAgLy8g
TWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2FkIGFuZCB0aGUgbG9hZGVk
IHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSByZXR1cm4gSW50MzI6
CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAorICAgIExvYWQxNlMsCisg
ICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQsCisgICAgLy8gVGhpcyBy
ZXR1cm4gd2hhdGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExvYWQsCisKKyAgICAvLyBN
ZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFsdWUgaXMgc3RvcmVkLiBU
aGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBhbiBJbnQzMiB2YWx1ZToK
KyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRha2VzIGEgRG91YmxlIHZh
bHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBvbHltb3JwaGljIHN0b3Jl
IGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUsCisKKyAgICAvLyBUaGlz
IGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVzaW5nIHRoZSBzeXN0ZW0g
QyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRoYXQgdGhlIGFyZ3VtZW50
cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBDQ2FsbCwKKworICAgIC8v
IFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRWYWx1ZSBjbGFzcy4gVGhp
cyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAgLy8gYnV0IG9ubHkgZW1p
dHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0
cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFzcyBhIHN0YWNrbWFwIGFs
b25nIHdpdGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAgYXJndW1lbnQgbXVzdCBi
ZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRoYXQgYSBzdGFja21hcCBh
cmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2FsIHRvIHJlcXVlc3QKKyAg
ICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBvZmZzZXQgZnJvbSB0aGUg
dG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisgICAgLy8gc3RhY2suCisg
ICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNlIHRoZSBDaGVja1ZhbHVl
IGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNvZGUgZ2VuZXJhdGlvbgor
ICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBzb21lIGNvZGUgYWZ0
ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1wCisgICAgLy8gZnJvbSB0
aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91IGFsc28gZ2V0IHRvIHN1
cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJlIG5vdCBhbGxvd2VkIHRv
IGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91ciBzbG93IHBhdGgsIHNp
bmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGV4ZWN1dGlvbiBv
ZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cgZGlkbid0IGhhcHBlbi4g
Rm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNrQWRkJ3M6CisgICAgLy8K
KyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hlY2tBZGQoeCwgeSkKKyAg
ICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhpcyB0bzoKKyAgICAvLwor
ICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVudGl0eShhKQorICAgIC8v
CisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBjYWxsYmFja3MgdXNlZCBi
eSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJlbnQKKyAgICAvLyBjYWxs
YmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBldmVuIGlmIHRoZXkgYXJl
IGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFmdGVyIHRoZSBmaXJzdCBD
aGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3VsZCBub3QgaGF2ZSBwb3Nz
aWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0aGUgc2Vjb25kIENoZWNr
QWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0FkZCwKKyAgICBDaGVja1N1
YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lkZS1leGl0cy4gVXNlIHRo
ZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmllbmRzLCB0aGlzIGhhcyBh
CisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJhY2suIFRoaXMgdGFrZXMg
YW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3aXRoCisgICAgLy8gZnVs
bCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQSB0cnVlIHZhbHVl
IGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0aC4KKyAgICBDaGVjaywK
KworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZHIFNTQS4KKyAgICBVcHNp
bG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4KKyAgICBQaGksCisKKyAg
ICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgSnVtcCwKKyAgICAK
KyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFueSB2YWx1ZSB0eXBlLiBC
cmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAgICAvLyBDb250cm9sVmFs
dWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5nIHRoZSB0cnVlIHN1Y2Nl
c3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRjaGVzIG92ZXIgZWl0aGVy
IEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFzcy4KKyAgICBTd2l0Y2gs
CisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVzIGRvbid0IGtub3cgdGhl
aXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFueQorICAgIC8vIHR5cGUu
IFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4sCisKKyAgICAvLyBUaGlz
IGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxsIG5ldmVyIGdldCBoZXJl
LiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcworfTsKKworaW5saW5lIGJv
b2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgewor
ICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVs
OgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdU
RiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mLCBKU0M6OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM09wY29kZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIE9yaWdpbjo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiT3JpZ2luKCIsIFJhd1BvaW50
ZXIobV9kYXRhKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Jp
Z2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcmlnaW5faAorI2RlZmluZSBCM09yaWdpbl9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9ldmVyIGdlbmVyYXRlcyBC
M0lSIGNhbiBjaG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBXaGVuIHlvdSBkbyB0aGlz
LCBCMyB3aWxsIGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8gdGhlIG1hY2hpbmUgY29k
ZSwgd2hpY2ggaW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2ggb3JpZ2luLiBCMworLy8g
dHJhbnNmb3JtYXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJlZnVsbHkuIEl0J3MgYW4g
ZXJyb3IgdG8gd3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBlaXRoZXIgZHJvcHMgT3Jp
Z2lucyBvciBsaWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4geworcHVibGljOgorICAgIGV4
cGxpY2l0IE9yaWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2Rh
dGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgY29uc3Qgdm9pZCogZGF0YSgpIGNvbnN0IHsg
cmV0dXJuIG1fZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgCitwcml2YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIz
T3JpZ2luX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNw
ZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50U3BlY2lhbC5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVk
ZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1BhdGNocG9pbnRTcGVjaWFsOjpQYXRjaHBvaW50U3Bl
Y2lhbCgpCit7Cit9CisKK1BhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwoKQor
eworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKAorICAgIEluc3QmIGlu
c3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykK
K3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBWb2lkKSB7CisgICAgICAgIGZvckVh
Y2hBcmdJbXBsKDAsIDEsIGluc3QsIGNhbGxiYWNrKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpEZWYsIGluc3Qub3JpZ2luLT5haXJU
eXBlKCkpOworICAgIGZvckVhY2hBcmdJbXBsKDAsIDIsIGluc3QsIGNhbGxiYWNrKTsKK30KKwor
Ym9vbCBQYXRjaHBvaW50U3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIGlmIChp
bnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJldHVybiBpc1ZhbGlkSW1wbCgw
LCAxLCBpbnN0KTsKKworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIGlmIChpbnN0LmFyZ3NbMV0ua2luZCgpICE9IEFyZzo6VG1wKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpbnN0LmFyZ3NbMV0uaXNUeXBlKGluc3Qub3Jp
Z2luLT5haXJUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gaXNW
YWxpZEltcGwoMCwgMiwgaW5zdCk7Cit9CisKK2Jvb2wgUGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0
c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChpbnN0Lm9y
aWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwg
MSwgaW5zdCwgYXJnSW5kZXgpOworCisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIHJldHVybiBhZG1pdHNTdGFja0ltcGwoMCwgMiwgaW5zdCwgYXJn
SW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hwb2ludFNwZWNpYWw6OmdlbmVy
YXRlKAorICAgIEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4
dCYgY29udGV4dCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFj
a21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAgICBBU1NFUlQoc3RhY2ttYXAp
OworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAgIHVuc2lnbmVkIG9mZnNldCA9IDE7
CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgIT0gVm9pZCkKKyAgICAgICAgcmVwcy5hcHBl
bmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tvZmZzZXQrK10pKTsKKyAgICBh
cHBlbmRSZXBzSW1wbChjb250ZXh0LCBvZmZzZXQsIGluc3QsIHJlcHMpOworICAgIAorICAgIFN0
YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKKyAgICBwYXJhbXMudmFsdWUgPSB2YWx1
ZTsKKyAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICBwYXJhbXMucmVwcyA9IHJl
cHM7CisgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21hcC0+bV91c2VkUmVnaXN0ZXJz
OworCisgICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworCisgICAg
cmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFs
OjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiUGF0
Y2hwb2ludCIpOworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkxvd2VyZWQgQjM6OlBhdGNo
cG9pbnRWYWx1ZS4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hw
b2ludFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50U3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY5IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNQYXRjaHBvaW50U3BlY2lhbF9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFNwZWNpYWxfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgc3BlY2lhbCB0aGF0
IHJlY29nbml6ZXMgdGhhdCB0aGVyZSBhcmUgdHdvIHVzZXMgb2YgUGF0Y2hwb2ludDogVm9pZCBh
bmQgYW5kIG5vbi1Wb2lkLgorLy8gSW4gdGhlIFZvaWQgY2FzZSwgdGhlIHN5bnRheCBvZiB0aGUg
QWlyIFBhdGNoIGluc3RydWN0aW9uIGlzOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hwb2ludCwg
YXJncy4uLgorLy8KKy8vIFdoZXJlICJhcmdzLi4uIiBhcmUgdGhlIGxvd2VyZWQgYXJndW1lbnRz
IHRvIHRoZSBQYXRjaHBvaW50IGluc3RydWN0aW9uLiBJbiB0aGUgbm9uLVZvaWQgY2FzZQorLy8g
d2Ugd2lsbCBoYXZlOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hwb2ludCwgcmVzdWx0LCBhcmdz
Li4uCisKK2NsYXNzIFBhdGNocG9pbnRTcGVjaWFsIDogcHVibGljIFN0YWNrbWFwU3BlY2lhbCB7
CitwdWJsaWM6CisgICAgUGF0Y2hwb2ludFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5QYXRjaHBv
aW50U3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5z
dCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVy
cmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBh
ZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisKKyAg
ICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhpZGRlbiBi
cmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2VuZXJhdGVz
IHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVyczo6SnVt
cCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRpb25Db250
ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFNwZWNpYWxfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGF0
Y2hwb2ludFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworUGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKCkKK3sK
K30KKwordm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50VmFsdWVfaAorI2RlZmluZSBC
M1BhdGNocG9pbnRWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNT
dGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFBhdGNocG9pbnRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJs
aWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNv
ZGUgPT0gUGF0Y2hwb2ludDsgfQorCisgICAgflBhdGNocG9pbnRWYWx1ZSgpOworCisgICAgU3Rh
Y2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2Nl
ZHVyZTsKKworICAgIFBhdGNocG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBW
YWx1ZShpbmRleCwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luLCBjaGlsZHJlbikKKyAgICB7Cisg
ICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50VmFsdWVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNQcm9j
ZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisjaW5jbHVkZSA8d3RmL0RhdGFMb2cu
aD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoUHJvY2VkdXJlJiBwcm9j
ZWR1cmUsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisg
ICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkg
eworICAgICAgICBkYXRhTG9nKCJCMyBhZnRlciAiLCBwcm9jZWR1cmUubGFzdFBoYXNlTmFtZSgp
LCAiLCBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7
CisgICAgfQorCisgICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1f
ZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhwcm9jZWR1cmUpOworfQorCitQaGFzZVNjb3BlOjp+UGhh
c2VTY29wZSgpCit7CisgICAgbV9wcm9jZWR1cmUuc2V0TGFzdFBoYXNlTmFtZShtX25hbWUpOwor
ICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgdmFsaWRhdGUo
bV9wcm9jZWR1cmUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1BoYXNlU2NvcGVfaAorI2RlZmluZSBCM1BoYXNlU2NvcGVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2Nl
ZHVyZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhh
c2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShQcm9jZWR1cmUmLCBjb25zdCBjaGFy
KiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFsaWRhdGlvbgorCitw
cml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgY29uc3QgY2hhciogbV9u
YW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQaGFzZVNj
b3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQ
cm9jZWR1cmUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxv
Y2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJC
M0Jsb2NrV29ya2xpc3QuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQorICAgIDog
bV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKK3sKK30KKworUHJvY2VkdXJlOjp+UHJvY2VkdXJl
KCkKK3sKK30KKworQmFzaWNCbG9jayogUHJvY2VkdXJlOjphZGRCbG9jayhkb3VibGUgZnJlcXVl
bmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBibG9jayhuZXcgQmFzaWNC
bG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJhc2ljQmxvY2sqIHJlc3Vs
dCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6Om1vdmUoYmxvY2spKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFByb2NlZHVyZTo6cmVzZXRSZWFjaGFiaWxp
dHkoKQoreworICAgIEIzOjpyZXNldFJlYWNoYWJpbGl0eShtX2Jsb2Nrcyk7Cit9CisKK3ZvaWQg
UHJvY2VkdXJlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2sp
KTsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUHJlT3JkZXIo
KQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0OworICAgIEJsb2NrV29ya2xpc3Qg
d29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChhdCgwKSk7CisgICAgd2hpbGUgKEJhc2ljQmxv
Y2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgcmVzdWx0LmFwcGVuZChibG9j
ayk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5udW1TdWNjZXNzb3JzKCk7IGkt
LTspCisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGJsb2NrLT5zdWNjZXNzb3JCbG9jayhpKSk7
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJv
Y2VkdXJlOjpibG9ja3NJblBvc3RPcmRlcigpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBy
ZXN1bHQ7CisgICAgUG9zdE9yZGVyQmxvY2tXb3JrbGlzdCB3b3JrbGlzdDsKKyAgICB3b3JrbGlz
dC5wdXNoKGF0KDApKTsKKyAgICB3aGlsZSAoQmxvY2tXaXRoT3JkZXIgaXRlbSA9IHdvcmtsaXN0
LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAgICBjYXNlIFZp
c2l0T3JkZXI6OlByZToKKyAgICAgICAgICAgIHdvcmtsaXN0LnB1c2hQb3N0KGl0ZW0ubm9kZSk7
CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpdGVtLm5vZGUtPm51bVN1Y2Nlc3NvcnMo
KTsgaS0tOykKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5wdXNoKGl0ZW0ubm9kZS0+c3VjY2Vz
c29yQmxvY2soaSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmlzaXRPcmRl
cjo6UG9zdDoKKyAgICAgICAgICAgIHJlc3VsdC5hcHBlbmQoaXRlbS5ub2RlKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1Byb2NlZHVyZV9oCisjZGVmaW5lIEIzUHJvY2VkdXJlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJQdXJlTmFOLmgiCisjaW5jbHVkZSA8d3RmL0JhZy5o
PgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsK
K2NsYXNzIFZhbHVlOworCitjbGFzcyBQcm9jZWR1cmUgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFByb2NlZHVyZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBQcm9jZWR1cmUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSB+UHJvY2VkdXJlKCk7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSBCYXNpY0Jsb2NrKiBhZGRC
bG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVmFsdWVUeXBlKiBhZGQo
QXJndW1lbnRzLi4uKTsKKworICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKKworICAgIEpT
X0VYUE9SVF9QUklWQVRFIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5z
aWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2lj
QmxvY2sqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF0u
Z2V0KCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0
cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAg
ICAgICBpdGVyYXRvcihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgp
CisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAsIG1f
aW5kZXgoZmluZE5leHQoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBC
YXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9w
cm9jZWR1cmUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9w
ZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9p
bmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQg
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJl
LT5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgaW5k
ZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGNv
bnN0IFByb2NlZHVyZSogbV9wcm9jZWR1cmU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Cisg
ICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIHNpemUoKSk7IH0KKworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRl
cigpOworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsKKworICAg
IGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVzQ29s
bGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSkKKyAgICAgICAgICAgIDogbV9wcm9j
ZWR1cmUocHJvY2VkdXJlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBp
dGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAg
ICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJh
dG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAg
ICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBW
YWx1ZSogb3BlcmF0b3IqKCkgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9wcm9jZWR1cmUtPm1fdmFsdWVzW21faW5kZXhdLmdldCgpOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
bV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAg
eworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAgICAgICBjb25zdCBQcm9jZWR1cmUqIG1f
cHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2Vk
dXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQorCisgICAgICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXpl
KCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgVmFsdWUqIG9wZXJh
dG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgICAg
ICAKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwor
ICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIFZh
bHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKKyAgICAvLyBUaGUgbmFtZSBoYXMgdG8gYmUgYSBz
dHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9yeSBtYW5hZ2VtZW50IGZv
ciB0aGUgc3RyaW5nLgorICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFtZShjb25zdCBjaGFyKiBuYW1l
KQorICAgIHsKKyAgICAgICAgbV9sYXN0UGhhc2VOYW1lID0gbmFtZTsKKyAgICB9CisKKyAgICBj
b25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGhhc2VOYW1l
OyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4g
bV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+IG1fdmFsdWVzOwor
ICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJvY2Vk
dXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5l
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlu
bGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1cmVJ
bmxpbmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVyZTo6
YWRkKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVl
VHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4uLikp
OworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMuYXBw
ZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzUHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdEtpbmQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYg
eworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsK
KyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2Nr
ZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3Vz
OgorICAgICAgICBvdXQucHJpbnQoIkFub255bW91cyIpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBj
bGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xv
dCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGlu
dGVuZCB0byBlc2NhcGUKKyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhp
cyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjawor
ICAgIC8vIHNsb3QuCisgICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgY291
bGQgc2hhcmUgc3BhY2Ugd2l0aCBvdGhlciBzdGFjayBzbG90cywgcHJvdmlkZWQgdGhhdCB0aGV5
IGFyZW4ndCBsaXZlCisgICAgLy8gYXQgdGhlIHNhbWUgdGltZS4gVGhlIGNvbXBpbGVyIHN0aWxs
IGhhcyB0byBkbyBlc2NhcGUgYW5hbHlzaXMsIHNpbmNlIHRoZXNlIGNhbiBiZSBlc2NhcGVkCisg
ICAgLy8gZXhwbGljaXRseSBpbiBJUi4KKyAgICBBbm9ueW1vdXMKKworICAgIC8vIEZJWE1FOiBX
ZSBzaG91bGQgYWRkIGEgdGhpcmQgbW9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc3RhY2sgc2xv
dCB3aWxsIGJlIHJlYWQgYXN5bmNocm9ub3VzbHkKKyAgICAvLyBhcyB3aXRoIExvY2tlZCwgYnV0
IG5ldmVyIHdyaXR0ZW4gdG8gYXN5bmNocm9ub3VzbHkuIFRoZW4sIEFpciBjb3VsZCBvcHRpbWl6
ZSBzcGlsbGluZyBhbmQKKyAgICAvLyBmaWxsaW5nIGJ5IHRyYWNraW5nIHdoZXRoZXIgdGhlIHZh
bHVlIGhhZCBiZWVuIHN0b3JlZCB0byBhIHJlYWQtb25seSBsb2NrZWQgc2xvdC4gSWYgaXQgaGFk
LAorICAgIC8vIHRoZW4gd2UgY2FuIHJlZmlsbCBmcm9tIHRoYXQgc2xvdC4KKyAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTg3Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFt
OworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpTdGFja1Nsb3RL
aW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNTdGFja1Nsb3RLaW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
U3RhY2tTbG90VmFsdWU6On5TdGFja1Nsb3RWYWx1ZSgpCit7Cit9CisKK3ZvaWQgU3RhY2tTbG90
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xvdFZhbHVlX2gKKyNkZWZpbmUgQjNT
dGFja1Nsb3RWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFj
a1Nsb3RLaW5kLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIEFpciB7CitjbGFzcyBTdGFja1Nsb3Q7Cit9IC8vIG5h
bWVzcGFjZSBBaXIKKworY2xhc3MgU3RhY2tTbG90VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bj
b2RlID09IFN0YWNrU2xvdDsgfQorCisgICAgflN0YWNrU2xvdFZhbHVlKCk7CisKKyAgICB1bnNp
Z25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KKyAgICBTdGFja1Ns
b3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIC8vIFRoaXMgZ2V0
cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxs
eSBwaW4gc3RhY2sgc2xvdHMuIFVzZSB0aGUKKyAgICAvLyBzZXQgbWV0aG9kIHRvIGRvIHRoYXQu
CisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXRGcm9t
RlA7IH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGlzIG1lYW5pbmdsZXNzIHVubGVzcyB0aGUg
c3RhY2sgc2xvdCBpcyBMb2NrZWQuCisgICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3Qg
dmFsdWUpCisgICAgeworICAgICAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAgIH0KKwor
cHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlk
ZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFN0YWNrU2xvdFZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcmlnaW4gb3JpZ2luLCB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBTdGFja1Nsb3QsIHBvaW50ZXJUeXBlKCksIG9yaWdpbikK
KyAgICAgICAgLCBtX2J5dGVTaXplKGJ5dGVTaXplKQorICAgICAgICAsIG1fa2luZChraW5kKQor
ICAgICAgICAsIG1fb2Zmc2V0RnJvbUZQKDApCisgICAgeworICAgIH0KKworICAgIHVuc2lnbmVk
IG1fYnl0ZVNpemU7CisgICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgaW50cHRyX3QgbV9v
ZmZzZXRGcm9tRlA7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdFZhbHVlX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja21hcDo6U3RhY2ttYXAoKQoreworfQorCitTdGFj
a21hcDo6flN0YWNrbWFwKCkKK3sKK30KKwordm9pZCBTdGFja21hcDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgKKyAgICAgICAgIntyZXBzID0gIiwgbGlz
dER1bXAobV9yZXBzKSwgIiwgZ2VuZXJhdG9yID0gIiwgUmF3UG9pbnRlcihtX2dlbmVyYXRvci5n
ZXQoKSksCisgICAgICAgICIsIGNsb2JiZXJlZCA9ICIsIG1fY2xvYmJlcmVkLCAiLCB1c2VkUmVn
aXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAifSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0
YWNrbWFwX2gKKyNkZWZpbmUgQjNTdGFja21hcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNWYWx1ZVJlcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1
ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIENoZWNrU3BlY2lhbDsKK2NsYXNzIFN0
YWNrbWFwU3BlY2lhbDsKK2NsYXNzIFZhbHVlOworCitjbGFzcyBTdGFja21hcCB7CitwdWJsaWM6
CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgeworICAgICAgICAvLyBUaGlzIGlzIHRoZSBW
YWx1ZSBjb250YWluaW5nIHRoZSBzdGFja21hcC4KKyAgICAgICAgVmFsdWUqIHZhbHVlOworCisg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIHN0YWNrbWFwLgorICAgICAgICBTdGFja21hcCogc3RhY2tt
YXA7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhlIGFjdHVhbCB2YWx1ZSByZXByZXNl
bnRhdGlvbnMgdGhhdCB3ZXJlIGNob3Nlbi4KKyAgICAgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBz
OworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSByZWdpc3RlcnMgdGhhdCB3ZXJlIHVz
ZWQuCisgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnM7CisgICAgfTsKKyAgICAKKyAg
ICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgY29uc3QgR2Vu
ZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlv
bj4gR2VuZXJhdG9yOworICAgIAorICAgIFN0YWNrbWFwKCk7CisgICAgflN0YWNrbWFwKCk7CisK
KyAgICAvLyBDb25zdHJhaW4gYW4gYXJndW1lbnQgdG8gdGhlIFZhbHVlIHRoYXQgdXNlcyB0aGlz
IFN0YWNrbWFwLiBJbiBjYXNlIG9mIGEgUGF0Y2hwb2ludCB0aGF0CisgICAgLy8gcmV0dXJucyBh
IHZhbHVlLCB0aGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIHJlc3VsdCB2YWx1ZS4gSW4gYWxsIG90
aGVyIGNhc2VzLCBpbmRleCB6ZXJvIHJlZmVycworICAgIC8vIHRvIHRoZSBmaXJzdCBhcmd1bWVu
dCB0byB0aGF0IFZhbHVlLCBldmVuIGlmIHRoYXQgYXJndW1lbnQgaXMgbm90IGNvbnN0cmFpbmFi
bGUuIEZvciBleGFtcGxlLAorICAgIC8vIGluIGEgQ2hlY2tBZGQgdmFsdWUsIGl0IHdvdWxkIGJl
IGFuIGVycm9yIHRvIGNvbnN0cmFpbiBpbmRpY2VzIDAgYW5kIDEuIEluIGEgQ2hlY2sgdmFsdWUs
IGl0CisgICAgLy8gd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGV4IDAuIEJ1dCwg
d2hlbiB0aGUgZ2VuZXJhdGlvbiBjYWxsYmFjayBpcyBjYWxsZWQsIHlvdSBjYW4KKyAgICAvLyBk
ZXBlbmQgb24gdGhlIHJlcHMgZm9yIHRob3NlIGluZGljZXMgYmVpbmcgZmlsbGVkIGluLgorICAg
IHZvaWQgY29uc3RyYWluKHVuc2lnbmVkIGluZGV4LCBjb25zdCBWYWx1ZVJlcCYgcmVwKQorICAg
IHsKKyAgICAgICAgaWYgKGluZGV4ICsgMSA+PSBtX3JlcHMuc2l6ZSgpKQorICAgICAgICAgICAg
bV9yZXBzLmdyb3coaW5kZXggKyAxKTsKKyAgICAgICAgbV9yZXBzW2luZGV4XSA9IHJlcDsKKyAg
ICB9CisKKyAgICBjb25zdCBWZWN0b3I8VmFsdWVSZXA+JiByZXBzKCkgY29uc3QgeyByZXR1cm4g
bV9yZXBzOyB9CisKKyAgICB2b2lkIGNsb2JiZXIoY29uc3QgUmVnaXN0ZXJTZXQmIHNldCkKKyAg
ICB7CisgICAgICAgIG1fY2xvYmJlcmVkLm1lcmdlKHNldCk7CisgICAgfQorCisgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIGNsb2JiZXJlZCgpIGNvbnN0IHsgcmV0dXJuIG1fY2xvYmJlcmVkOyB9CisK
KyAgICB2b2lkIHNldEdlbmVyYXRvcihSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAg
eworICAgICAgICBtX2dlbmVyYXRvciA9IGdlbmVyYXRvcjsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgc2V0R2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCisgICAgeworICAgICAgICBtX2dlbmVyYXRvciA9IGNyZWF0ZVNoYXJlZFRhc2s8
R2VuZXJhdG9yRnVuY3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgQ2hlY2tT
cGVjaWFsOworICAgIGZyaWVuZCBjbGFzcyBQYXRjaHBvaW50U3BlY2lhbDsKKyAgICBmcmllbmQg
Y2xhc3MgU3RhY2ttYXBTcGVjaWFsOworICAgIAorICAgIFZlY3RvcjxWYWx1ZVJlcD4gbV9yZXBz
OworICAgIFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworICAgIFJlZ2lzdGVyU2V0IG1f
Y2xvYmJlcmVkOworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsgLy8gU3RhY2ttYXBz
IGNvdWxkIGJlIGZ1cnRoZXIgZHVwbGljYXRlZCBieSBBaXIsIGJ1dCB0aGF0J3MgdW5saWtlbHks
IHNvIHdlIGp1c3QgbWVyZ2UgdGhlIHVzZWQgcmVnaXN0ZXJzIHNldHMgaWYgdGhhdCB3ZXJlIHRv
IGhhcHBlbi4KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2ttYXBfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrbWFw
U3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIK
KyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit1c2luZyBuYW1lc3Bh
Y2UgQWlyOworCitTdGFja21hcFNwZWNpYWw6OlN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK1N0
YWNrbWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgU3RhY2ttYXBT
cGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmIGluc3QsIGNvbnN0IFJlZ2lzdGVyU2V0
JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAg
IFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgLy8gRklYTUU6
IElmIHRoZSBJbnN0IHRoYXQgdXNlcyB0aGUgU3RhY2ttYXBTcGVjaWFsIGdldHMgZHVwbGljYXRl
ZCwgdGhlbiB3ZSBlbmQgdXAgbWVyZ2luZyB1c2VkCisgICAgLy8gcmVnaXN0ZXIgc2V0cyBmcm9t
IG11bHRpcGxlIHBsYWNlcy4gVGhpcyBjdXJyZW50bHkgd29uJ3QgaGFwcGVuIHNpbmNlIEFpciBk
b2Vzbid0IGhhdmUgdGFpbGR1cAorICAgIC8vIG9yIHRoaW5ncyBsaWtlIHRoYXQuIEJ1dCBtYXli
ZSBldmVudHVhbGx5IGl0IGNvdWxkIGJlIGEgcHJvYmxlbS4KKyAgICBzdGFja21hcC0+bV91c2Vk
UmVnaXN0ZXJzLm1lcmdlKHVzZWRSZWdpc3RlcnMpOworfQorCitjb25zdCBSZWdpc3RlclNldCYg
U3RhY2ttYXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBW
YWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1
ZS0+c3RhY2ttYXAoKTsKKworICAgIHJldHVybiBzdGFja21hcC0+Y2xvYmJlcmVkKCk7Cit9CisK
K3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCgKKyAgICB1bnNpZ25lZCBudW1J
Z25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0
LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2FsbGJhY2spCit7
CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAgICAvLyBDaGVjayB0aGF0IGlu
c2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAgQVNTRVJUKGluc3QuYXJncy5zaXpl
KCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4oKS5z
aXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkg
LSBudW1JZ25vcmVkQWlyQXJncyA9PSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgLSBudW1JZ25v
cmVkQjNBcmdzKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5hcmdz
LnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3M7ICsraSkgeworICAgICAgICBBcmcmIGFyZyA9IGlu
c3QuYXJnc1tpICsgbnVtSWdub3JlZEIzQXJnc107CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZh
bHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEFpckFyZ3MpOworCisgICAgICAgIGNhbGxiYWNrKGFy
ZywgQXJnOjpVc2UsIEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlwZSgpKSk7CisgICAgfQor
fQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6aXNWYWxpZEltcGwoCisgICAgdW5zaWduZWQgbnVt
SWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5z
dCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKworICAgIC8vIENoZWNrIHRo
YXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAgICBBU1NFUlQoaW5zdC5hcmdz
LnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNTRVJUKHZhbHVlLT5jaGlsZHJl
bigpLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKworICAgIFN0YWNrbWFwKiBzdGFja21h
cCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgQVNTRVJUKHN0YWNrbWFwKTsKKworICAgIC8v
IEZvciB0aGUgSW5zdCB0byBiZSB2YWxpZCwgaXQgbmVlZHMgdG8gaGF2ZSB0aGUgcmlnaHQgbnVt
YmVyIG9mIGFyZ3VtZW50cy4KKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRB
aXJBcmdzICE9IHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpCisg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIFJlZ2FyZGxlc3Mgb2YgY29uc3RyYWludHMs
IHN0YWNrbWFwcyBoYXZlIHNvbWUgYmFzaWMgcmVxdWlyZW1lbnRzIGZvciB0aGVpciBhcmd1bWVu
dHMuIEZvcgorICAgIC8vIGV4YW1wbGUsIHlvdSBjYW4ndCBoYXZlIGEgbm9uLUZQLW9mZnNldCBh
ZGRyZXNzLiBUaGlzIHZlcmlmaWVzIHRob3NlIGNvbmRpdGlvbnMgYXMgd2VsbCBhcyB0aGUKKyAg
ICAvLyBhcmd1bWVudCB0eXBlcy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5zdC5h
cmdzLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3M7ICsraSkgeworICAgICAgICBWYWx1ZSogY2hp
bGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRCM0FyZ3MpOworICAgICAgICBBcmcmIGFy
ZyA9IGluc3QuYXJnc1tpICsgbnVtSWdub3JlZEFpckFyZ3NdOworICAgICAgICAKKyAgICAgICAg
c3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGNh
c2UgQXJnOjpJbW06CisgICAgICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgY2FzZSBBcmc6
OlN0YWNrOgorICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgICAgIGJyZWFrOyAv
LyBPSworICAgICAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgICAgIGlmIChhcmcuYmFzZSgp
ICE9IFRtcChHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcikKKyAgICAgICAgICAgICAgICAmJiBh
cmcuYmFzZSgpICE9IFRtcChNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IEFyZzo6dHlwZUZvckIzVHlwZShjaGlsZC0+dHlw
ZSgpKTsKKworICAgICAgICBpZiAoIWFyZy5pc1R5cGUodHlwZSkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgLy8gVGhlIG51bWJlciBvZiBjb25zdHJhaW50cyBoYXMg
dG8gYmUgbm8gZ3JlYXRlciB0aGFuIHRoZSBudW1iZXIgb2YgQjMgY2hpbGRyZW4uCisgICAgQVNT
RVJUKHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpIDw9IHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSk7
CisKKyAgICAvLyBWZXJpZnkgYW55IGV4cGxpY2l0bHkgc3VwcGxpZWQgY29uc3RyYWludHMuCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gbnVtSWdub3JlZEIzQXJnczsgaSA8IHN0YWNrbWFwLT5tX3Jl
cHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgVmFsdWVSZXAmIHJlcCA9IHN0YWNrbWFwLT5tX3Jl
cHNbaV07CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgLSBudW1JZ25vcmVkQjNBcmdz
ICsgbnVtSWdub3JlZEFpckFyZ3NdOworCisgICAgICAgIHN3aXRjaCAocmVwLmtpbmQoKSkgewor
ICAgICAgICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgICAgICAvLyBXZSBhbHJlYWR5IHZl
cmlmaWVkIHRoaXMgYWJvdmUuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1
ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKCFhcmcuaXNUbXAoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAgICAgICAgICBpZiAoYXJnICE9IFRtcChyZXAucmVn
KCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90
IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50YXRpb24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTdGFj
a0FyZ3VtZW50OgorICAgICAgICAgICAgaWYgKGFyZyAhPSBBcmc6OmNhbGxBcmcocmVwLm9mZnNl
dEZyb21TUCgpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgICAgICAvLyBU
aGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiB0cnVlOworfQorCitib29sIFN0YWNrbWFwU3BlY2lhbDo6YWRtaXRzU3Rh
Y2tJbXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9y
ZWRBaXJBcmdzLAorICAgIEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIFZh
bHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVl
LT5zdGFja21hcCgpOworCisgICAgdW5zaWduZWQgc3RhY2ttYXBBcmdJbmRleCA9IGFyZ0luZGV4
IC0gbnVtSWdub3JlZEFpckFyZ3MgKyBudW1JZ25vcmVkQjNBcmdzOworCisgICAgaWYgKHN0YWNr
bWFwQXJnSW5kZXggPj0gc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkpIHsKKyAgICAgICAgLy8gVGhp
cyBtZWFucyB0aGF0IHRoZXJlIHdhcyBubyBjb25zdHJhaW50LgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgLy8gV2Ugb25seSBhZG1pdCBzdGFjayBmb3IgQW55J3MsIHNp
bmNlIFN0YWNrIGlzIG5vdCBhIHZhbGlkIGlucHV0IGNvbnN0cmFpbnQsIGFuZCBTdGFja0FyZ3Vt
ZW50CisgICAgLy8gdHJhbnNsYXRlcyB0byBhIENhbGxBcmcgaW4gQWlyLgorICAgIGlmIChzdGFj
a21hcC0+bV9yZXBzW3N0YWNrbWFwQXJnSW5kZXhdLmtpbmQoKSA9PSBWYWx1ZVJlcDo6QW55KQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBTdGFj
a21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKAorICAgIEdlbmVyYXRpb25Db250ZXh0JiBjb250
ZXh0LCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgSW5zdCYgaW5zdCwgVmVjdG9yPFZhbHVlUmVw
PiYgcmVzdWx0KQoreworICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9yZWRBcmdzOyBpIDwg
aW5zdC5hcmdzLnNpemUoKTsgKytpKQorICAgICAgICByZXN1bHQuYXBwZW5kKHJlcEZvckFyZygq
Y29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbaV0pKTsKK30KKworVmFsdWVSZXAgU3RhY2ttYXBTcGVj
aWFsOjpyZXBGb3JBcmcoQ29kZSYgY29kZSwgY29uc3QgQXJnJiBhcmcpCit7CisgICAgc3dpdGNo
IChhcmcua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgcmV0dXJuIFZhbHVl
UmVwOjpyZWcoYXJnLnJlZygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OkltbToK
KyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQo
YXJnLnZhbHVlKCkpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAg
ICAgaWYgKGFyZy5iYXNlKCkgPT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSkKKyAg
ICAgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6c3RhY2soYXJnLm9mZnNldCgpKTsKKyAgICAgICAg
QVNTRVJUKGFyZy5iYXNlKCkgPT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdp
c3RlcikpOworICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZzZXQoKSAtIGNv
ZGUuZnJhbWVTaXplKCkpOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm4gVmFsdWVSZXAoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBTcGVjaWFsX2gKKyNkZWZpbmUgQjNTdGFja21h
cFNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNwZWNpYWwu
aCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGlzIGEgYmFz
ZSBjbGFzcyBmb3Igc3BlY2lhbHMgdGhhdCBoYXZlIHN0YWNrbWFwcy4gTm90ZSB0aGF0IGl0IGNh
biBmaW5kIHRoZSBTdGFja21hcCBieQorLy8gYXNraW5nIGZvciB0aGUgSW5zdCdzIG9yaWdpbi4g
SGVuY2UsIHRoZXNlIG9iamVjdHMgZG9uJ3QgbmVlZCB0byBldmVuIGhvbGQgYSByZWZlcmVuY2Ug
dG8gdGhlCisvLyBTdGFja21hcC4KKworY2xhc3MgU3RhY2ttYXBTcGVjaWFsIDogcHVibGljIEFp
cjo6U3BlY2lhbCB7CitwdWJsaWM6CisgICAgU3RhY2ttYXBTcGVjaWFsKCk7CisgICAgdmlydHVh
bCB+U3RhY2ttYXBTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHJlcG9ydFVzZWRS
ZWdpc3RlcnMoQWlyOjpJbnN0JiwgY29uc3QgUmVnaXN0ZXJTZXQmKSBvdmVycmlkZTsKKyAgICBj
b25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEFpcjo6SW5zdCYpIG92ZXJyaWRl
OworCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgZ2VuZXJhdGUoKSBv
ciBkdW1wSW1wbCgpL2RlZXBEdW1wSW1wbCgpLiBXZSBoYXZlIG1hbnkgc29tZQorICAgIC8vIHN1
YmNsYXNzZXMgdGhhdCBpbXBsZW1lbnQgdGhhdC4KKworICAgIHZvaWQgZm9yRWFjaEFyZ0ltcGwo
CisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRB
aXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8QWlyOjpJbnN0
OjpFYWNoQXJnQ2FsbGJhY2s+Jik7CisgICAgYm9vbCBpc1ZhbGlkSW1wbCgKKyAgICAgICAgdW5z
aWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAg
ICAgIEFpcjo6SW5zdCYpOworICAgIGJvb2wgYWRtaXRzU3RhY2tJbXBsKAorICAgICAgICB1bnNp
Z25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAg
ICAgQWlyOjpJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpOworCisgICAgLy8gQXBwZW5kcyB0aGUg
cmVwcyBmb3IgdGhlIEluc3QncyBhcmdzLCBzdGFydGluZyB3aXRoIG51bUlnbm9yZWRBcmdzLCB0
byB0aGUgZ2l2ZW4gdmVjdG9yLgorICAgIHZvaWQgYXBwZW5kUmVwc0ltcGwoQWlyOjpHZW5lcmF0
aW9uQ29udGV4dCYsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBBaXI6Okluc3QmLCBWZWN0b3I8
VmFsdWVSZXA+Jik7CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgcmVwRm9yQXJnKEFpcjo6Q29kZSYs
IGNvbnN0IEFpcjo6QXJnJik7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwU3BlY2lhbF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNzb3JDb2xsZWN0
aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNz
b3JDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb25faAorI2RlZmluZSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb25faAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMg
aXMgYSBnZW5lcmljIHdyYXBwZXIgYXJvdW5kIGxpc3RzIG9mIGZyZXF1ZW50ZWQgYmxvY2tzLCB3
aGljaCBnaXZlcyB5b3UganVzdCB0aGUgYmxvY2tzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNp
Y0Jsb2NrLCB0eXBlbmFtZSBTdWNjZXNzb3JMaXN0PgorY2xhc3MgU3VjY2Vzc29yQ29sbGVjdGlv
biB7CitwdWJsaWM6CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbihTdWNjZXNzb3JMaXN0JiBsaXN0
KQorICAgICAgICA6IG1fbGlzdChsaXN0KQorICAgIHsKKyAgICB9CisKKyAgICBzaXplX3Qgc2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdC5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdChz
aXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fbGlzdFtpbmRleF0uYmxvY2soKTsgfQorICAg
IEJhc2ljQmxvY2sqJiBhdChzaXplX3QgaW5kZXgpIHsgcmV0dXJuIG1fbGlzdFtpbmRleF0uYmxv
Y2soKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7
IHJldHVybiBhdChpbmRleCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3JbXShzaXplX3Qg
aW5kZXgpIHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24o
bnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0K
KworICAgICAgICBpdGVyYXRvcihTdWNjZXNzb3JDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCBzaXpl
X3QgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikgLy8gY29u
c3QgaXMgc3R1cGlkIGFueXdheS4KKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayomIG9wZXJhdG9yKigpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgp
OworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0g
b3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBTdWNjZXNzb3JDb2xs
ZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgIH07CisK
KyAgICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAg
IGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKK3By
aXZhdGU6CisgICAgU3VjY2Vzc29yTGlzdCYgbV9saXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdWNj
ZXNzb3JDb2xsZWN0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoQ2FzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoQ2FzZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hDYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3ZvaWQgU3dpdGNoQ2FzZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChtX2Nhc2VWYWx1ZSwgIi0+IiwgbV90YXJnZXQpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM1N3aXRjaENhc2VfaAorI2RlZmluZSBCM1N3aXRjaENhc2VfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSA8d3RmL1N0
ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoQ2FzZSB7CitwdWJsaWM6CisgICAg
U3dpdGNoQ2FzZSgpCisgICAgeworICAgIH0KKworICAgIFN3aXRjaENhc2UoaW50NjRfdCBjYXNl
VmFsdWUsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IG1fY2FzZVZh
bHVlKGNhc2VWYWx1ZSkKKyAgICAgICAgLCBtX3RhcmdldCh0YXJnZXQpCisgICAgeworICAgIH0K
KworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fdGFyZ2V0
OyB9CisKKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FzZVZhbHVl
OyB9CisgICAgRnJlcXVlbnRlZEJsb2NrIHRhcmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0
OyB9CisgICAgQmFzaWNCbG9jayogdGFyZ2V0QmxvY2soKSBjb25zdCB7IHJldHVybiBtX3Rhcmdl
dC5ibG9jaygpOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgaW50NjRfdCBtX2Nhc2VWYWx1ZTsKKyAgICBGcmVxdWVudGVkQmxvY2sg
bV90YXJnZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N3aXRjaENhc2VfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3dpdGNoVmFsdWUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRl
IDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N3
aXRjaFZhbHVlOjp+U3dpdGNoVmFsdWUoKQoreworfQorCitTd2l0Y2hDYXNlIFN3aXRjaFZhbHVl
OjpyZW1vdmVDYXNlKHVuc2lnbmVkIGluZGV4KQoreworICAgIEZyZXF1ZW50ZWRCbG9jayByZXN1
bHRCbG9jayA9IG1fc3VjY2Vzc29yc1tpbmRleF07CisgICAgaW50NjRfdCByZXN1bHRWYWx1ZSA9
IG1fdmFsdWVzW2luZGV4XTsKKyAgICBtX3N1Y2Nlc3NvcnNbaW5kZXhdID0gbV9zdWNjZXNzb3Jz
Lmxhc3QoKTsKKyAgICBtX3N1Y2Nlc3NvcnMucmVtb3ZlTGFzdCgpOworICAgIG1fdmFsdWVzW2lu
ZGV4XSA9IG1fdmFsdWVzLmxhc3QoKTsKKyAgICBtX3ZhbHVlcy5yZW1vdmVMYXN0KCk7CisgICAg
cmV0dXJuIFN3aXRjaENhc2UocmVzdWx0VmFsdWUsIHJlc3VsdEJsb2NrKTsKK30KKwordm9pZCBT
d2l0Y2hWYWx1ZTo6YXBwZW5kQ2FzZShjb25zdCBTd2l0Y2hDYXNlJiBzd2l0Y2hDYXNlKQorewor
ICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQobV9zdWNjZXNzb3JzLmxhc3QoKSk7CisgICAgbV9zdWNj
ZXNzb3JzW21fc3VjY2Vzc29ycy5zaXplKCkgLSAyXSA9IHN3aXRjaENhc2UudGFyZ2V0KCk7Cisg
ICAgbV92YWx1ZXMuYXBwZW5kKHN3aXRjaENhc2UuY2FzZVZhbHVlKCkpOworfQorCit2b2lkIFN3
aXRjaFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIC8vIFRo
aXMgZGVzdHJ1Y3RpdmVseSBvdmVycmlkZXMgQ29udHJvbFZhbHVlJ3MgZHVtcE1ldGEoKS4KKyAg
ICBvdXQucHJpbnQobGlzdER1bXAoKnRoaXMpLCAiLCBmYWxsVGhyb3VnaCA9ICIsIGZhbGxUaHJv
dWdoKCkpOworfQorCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9y
aWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpCisgICAgOiBD
b250cm9sVmFsdWUoaW5kZXgsIFN3aXRjaCwgVm9pZCwgb3JpZ2luKQoreworICAgIG1fc3VjY2Vz
c29ycy5hcHBlbmQoZmFsbFRocm91Z2gpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0
Y2hWYWx1ZV9oCisjZGVmaW5lIEIzU3dpdGNoVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hDYXNlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hWYWx1ZSA6
IHB1YmxpYyBDb250cm9sVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFN3aXRjaDsgfQorCisgICAgflN3aXRj
aFZhbHVlKCk7CisKKyAgICAvLyBudW1DYXNlVmFsdWVzKCkgKyAxID09IG51bVN1Y2Nlc3NvcnMo
KS4KKyAgICB1bnNpZ25lZCBudW1DYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMu
c2l6ZSgpOyB9CisKKyAgICAvLyBUaGUgc3VjY2Vzc29yIGZvciB0aGlzIGNhc2UgdmFsdWUgaXMg
YXQgdGhlIHNhbWUgaW5kZXguCisgICAgaW50NjRfdCBjYXNlVmFsdWUodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsgfQorICAgIAorICAgIGNvbnN0IFZlY3Rv
cjxpbnQ2NF90PiYgY2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisKKyAg
ICBGcmVxdWVudGVkQmxvY2sgZmFsbFRocm91Z2goKSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3Jz
KCkubGFzdCgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCgpIHsgcmV0dXJu
IHN1Y2Nlc3NvcnMoKS5sYXN0KCk7IH0KKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJl
dHVybiBudW1DYXNlVmFsdWVzKCk7IH0KKyAgICBTd2l0Y2hDYXNlIGF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIFN3aXRjaENhc2UoY2FzZVZhbHVlKGluZGV4
KSwgc3VjY2Vzc29yKGluZGV4KSk7CisgICAgfQorICAgIFN3aXRjaENhc2Ugb3BlcmF0b3JbXSh1
bnNpZ25lZCBpbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBhdChpbmRleCk7Cisg
ICAgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0
b3IoKQorICAgICAgICAgICAgOiBtX3N3aXRjaChudWxscHRyKQorICAgICAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN3
aXRjaFZhbHVlJiBzd2l0Y2hWYWx1ZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1f
c3dpdGNoKCZzd2l0Y2hWYWx1ZSkKKyAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgU3dpdGNoQ2FzZSBvcGVyYXRvciooKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9zd2l0Y2gtPmF0KG1faW5kZXgpOworICAgICAgICB9
CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2luZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAg
ICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAg
ICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBTd2l0Y2hWYWx1ZSogbV9zd2l0
Y2g7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIHR5cGVkZWYgaXRl
cmF0b3IgY29uc3RfaXRlcmF0b3I7CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0
dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICAvLyBUaGlzIHJlbW92ZXMgdGhl
IGNhc2UgYW5kIHJlb3JkZXJzIHRoaW5ncyBhIGJpdC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0aGUg
Y2FzZXMgZnJvbSAwIHRvIE4sCisgICAgLy8gdGhlbiB5b3UgY2FuIGtlZXAgaXRlcmF0aW5nIGFm
dGVyIHRoaXMgc28gbG9uZyBhcyB5b3UgcmV2aXNpdCB0aGlzIHNhbWUgaW5kZXggKHdoaWNoIHdp
bGwgbm93CisgICAgLy8gY29udGFpbiBzb21lIG90aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJlbW92
ZXMgdGhlIGNhc2UgdGhhdCB3YXMgcmVtb3ZlZC4KKyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNhc2Uo
dW5zaWduZWQgaW5kZXgpOworCisgICAgdm9pZCBhcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2Um
KTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
U3dpdGNoVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiBmYWxsVGhyb3VnaCk7CisKKyAgICBWZWN0b3I8aW50NjRfdD4gbV92YWx1ZXM7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM1N3aXRjaFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlw
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1R5cGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZSB0eXBlKQoreworICAgIHN3
aXRjaCAodHlwZSkgeworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgb3V0LnByaW50KCJWb2lkIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBvdXQucHJpbnQoIklu
dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEludDY0OgorICAgICAgICBvdXQucHJp
bnQoIkludDY0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAg
b3V0LnByaW50KCJEb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExp
YkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBl
IHsKKyAgICBWb2lkLAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKwor
aW5saW5lIGJvb2wgaXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMy
IHx8IHR5cGUgPT0gSW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQor
eworICAgIHJldHVybiB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlclR5
cGUoKQoreworICAgIGlmIChpczMyQml0KCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBy
ZXR1cm4gSW50NjQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2Ug
V1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYsIEpTQzo6QjM6OlR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJeIiwg
bV9waGktPmluZGV4KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNp
bG9uVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNp
bG9uVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vw
c2lsb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2lsb25WYWx1
ZV9oCisjZGVmaW5lIEIzVXBzaWxvblZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitj
bGFzcyBVcHNpbG9uVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVwc2lsb247IH0K
KworICAgIH5VcHNpbG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBjb25zdCB7IHJldHVy
biBtX3BoaTsgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisgICAgCisgICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBoaSwgVm9p
ZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAgeworICAgICAgICBB
U1NFUlQodmFsdWUtPnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQorCisgICAgVmFsdWUq
IG1fcGhpOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNVcHNpbG9uVmFsdWVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK1VzZUNvdW50czo6VXNlQ291bnRzKFByb2NlZHVyZSYgcHJvY2Vk
dXJlKQorICAgIDogbV9jb3VudHMocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKK3sKKyAgICBm
b3IgKFZhbHVlKiB2YWx1ZSA6IHByb2NlZHVyZS52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKFZh
bHVlKiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgbV9jb3VudHNbY2hp
bGRdKys7CisgICAgfQorfQorCitVc2VDb3VudHM6On5Vc2VDb3VudHMoKQoreworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1VzZUNvdW50c19oCisjZGVmaW5lIEIzVXNlQ291bnRzX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOwor
CitjbGFzcyBVc2VDb3VudHMgeworcHVibGljOgorICAgIFVzZUNvdW50cyhQcm9jZWR1cmUmKTsK
KyAgICB+VXNlQ291bnRzKCk7CisKKyAgICB1bnNpZ25lZCBvcGVyYXRvcltdKFZhbHVlKiB2YWx1
ZSkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2NvdW50c1t2YWx1ZV07CisgICAgfQor
cHJpdmF0ZToKKyAgICBJbmRleE1hcDxWYWx1ZSwgdW5zaWduZWQ+IG1fY291bnRzOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNVc2VDb3VudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5o
IgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Cisj
aW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsK
KworY2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBw
cm9jZWR1cmUsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9wcm9jZWR1cmUo
cHJvY2VkdXJlKQorICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAg
ICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJy
ZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04s
ICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQor
CisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gYmxv
Y2tzOworICAgICAgICBIYXNoU2V0PFZhbHVlKj4gdmFsdWVJblByb2M7CisgICAgICAgIEhhc2hT
ZXQ8VmFsdWUqPiB2YWx1ZUluQmxvY2s7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fcHJvY2VkdXJlKSB7CisgICAgICAgICAgICBibG9ja3MuYWRkKGJsb2NrKTsKKyAgICAg
ICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogKmJsb2NrKQorICAgICAgICAgICAgICAgIHZhbHVl
SW5CbG9jay5hZGQodmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFs
dWUgOiBtX3Byb2NlZHVyZS52YWx1ZXMoKSkKKyAgICAgICAgICAgIHZhbHVlSW5Qcm9jLmFkZCh2
YWx1ZSk7CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykKKyAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlSW5CbG9jay5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJbkJsb2NrKQorICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1
ZSkpOworCisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2MpIHsKKyAgICAg
ICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnMoY2hpbGQpLCAoIkF0ICIsICp2YWx1
ZSwgIi0+IiwgcG9pbnRlckR1bXAoY2hpbGQpKSk7CisgICAgICAgIH0KKworICAgICAgICBIYXNo
TWFwPEJhc2ljQmxvY2sqLCBIYXNoU2V0PEJhc2ljQmxvY2sqPj4gYWxsUHJlZGVjZXNzb3JzOwor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICBW
QUxJREFURShibG9jay0+c2l6ZSgpID49IDEsICgiQXQgIiwgKmJsb2NrKSk7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSghQ29udHJvbFZhbHVlOjphY2NlcHRzKGJsb2NrLT5hdChpKS0+
b3Bjb2RlKCkpLCAoIkF0ICIsICpibG9jay0+YXQoaSkpKTsKKyAgICAgICAgICAgIFZBTElEQVRF
KENvbnRyb2xWYWx1ZTo6YWNjZXB0cyhibG9jay0+bGFzdCgpLT5vcGNvZGUoKSksICgiQXQgIiwg
KmJsb2NrLT5sYXN0KCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChCYXNpY0Js
b2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAg
ICAgICBhbGxQcmVkZWNlc3NvcnMuYWRkKHN1Y2Nlc3NvciwgSGFzaFNldDxCYXNpY0Jsb2NrKj4o
KSkuaXRlcmF0b3ItPnZhbHVlLmFkZChibG9jayk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
CisgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIs
ICpibG9jaywgIi0+IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdG90YWxseSBhbGxvd3MgZGVh
ZCBjb2RlLgorICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogYWxsUHJlZGVjZXNzb3JzKSB7Cisg
ICAgICAgICAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBlbnRyeS5rZXk7CisgICAgICAgICAg
ICBIYXNoU2V0PEJhc2ljQmxvY2sqPiYgcHJlZGVjZXNzb3JzID0gZW50cnkudmFsdWU7CisgICAg
ICAgICAgICBWQUxJREFURShwcmVkZWNlc3NvcnMgPT0gc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMo
KSwgKCJBdCAiLCAqc3VjY2Vzc29yKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6IG1fcHJvY2VkdXJlLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVl
KiBjaGlsZCA6IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIFZBTElEQVRFKGNo
aWxkLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUsICItPiIsICpjaGlsZCkpOworICAg
ICAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9w
OgorICAgICAgICAgICAgY2FzZSBKdW1wOgorICAgICAgICAgICAgY2FzZSBPb3BzOgorICAgICAg
ICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElk
ZW50aXR5OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09
IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5
cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnN0MzI6Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIs
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIENvbnN0NjQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJl
bigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50
eXBlKCkgPT0gSW50NjQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICAgICAgICAgIFZBTElEQVRF
KCF2YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAg
ICAgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVl
LT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICAodmFs
dWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkuaXNHUFIoKSA/IHBvaW50
ZXJUeXBlKCkgOiBEb3VibGUpCisgICAgICAgICAgICAgICAgICAgID09IHZhbHVlLT50eXBlKCks
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIEFkZDoKKyAgICAgICAgICAgIGNhc2UgU3ViOgorICAgICAgICAgICAgY2FzZSBNdWw6Cisg
ICAgICAgICAgICBjYXNlIERpdjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+
Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICAgICAgY2Fz
ZSBNb2Q6CisgICAgICAgICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgICAgIGNhc2UgQml0T3I6
CisgICAgICAgICAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2
YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURShpc0ludCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU2hsOgorICAgICAgICAgICAgY2Fz
ZSBTU2hyOgorICAgICAgICAgICAgY2FzZSBaU2hyOgorICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQo
MSktPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURShpc0ludCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU0V4dDg6CisgICAgICAgICAgICBjYXNl
IFNFeHQxNjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9
PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAg
ICAgIGNhc2UgWkV4dDMyOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGls
ZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHJ1bmM6Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5
cGUoKSA9PSBJbnQ2NCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBGUm91bmQ6CisgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBEb3VibGUsICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9
PSBEb3VibGUsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIElUb0Q6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNo
aWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBEb3VibGUsICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERUb0kzMjoK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+
dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgIGNhc2Ug
Tm90RXF1YWw6CisgICAgICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICAgICAgY2FzZSBH
cmVhdGVyVGhhbjoKKyAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICAgICAgY2Fz
ZSBHcmVhdGVyRXF1YWw6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IElu
dDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBBYm92ZToKKyAgICAgICAgICAgIGNhc2UgQmVsb3c6CisgICAgICAgICAgICBjYXNl
IEFib3ZlRXF1YWw6CisgICAgICAgICAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1
ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9h
ZDhaOgorICAgICAgICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6
CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0g
SW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBEb3VibGUs
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIExvYWQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkg
PT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4Ogor
ICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVl
LT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0g
cG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBEb3VibGUs
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxk
KDEpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkg
PT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENDYWxsOgorICAgICAgICAgICAgICAgIC8v
IFRoaXMgaXMgYSB3aWxkY2FyZC4gWW91IGNhbiBwYXNzIGFueSBub24tdm9pZCBhcmd1bWVudHMg
YW5kIHlvdSBjYW4gc2VsZWN0IGFueQorICAgICAgICAgICAgICAgIC8vIHJldHVybiB0eXBlLgor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQYXRjaHBvaW50OgorICAg
ICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2ttYXAodmFsdWUpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgICAgIGNhc2UgQ2hlY2tT
dWI6CisgICAgICAgICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5udW1DaGlsZHJlbigpID49IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT5jaGlsZCgxKS0+
dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNr
bWFwKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ2hl
Y2s6CisgICAgICAgICAgICAgICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+
YXM8VXBzaWxvblZhbHVlPigpLT5waGkoKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKHZhbHVlLT5hczxVcHNp
bG9uVmFsdWU+KCktPnBoaSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2
YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgIGNh
c2UgUmV0dXJuOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigp
ID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
PnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBTd2l0Y2g6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIHZvaWQgdmFsaWRhdGVTdGFja21hcChWYWx1
ZSogdmFsdWUpCisgICAgeworICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3Rh
Y2ttYXAoKTsKKyAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPj0gc3RhY2tt
YXAtPnJlcHMoKS5zaXplKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBzdGFja21hcC0+cmVwcygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAg
ICBjb25zdCBWYWx1ZVJlcCYgcmVwID0gc3RhY2ttYXAtPnJlcHMoKVtpXTsKKyAgICAgICAgICAg
IGlmIChyZXAua2luZCgpICE9IFZhbHVlUmVwOjpSZWdpc3RlcikKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIGlmIChyZXAucmVnKCkuaXNHUFIoKSkKKyAgICAgICAgICAg
ICAgICBWQUxJREFURShpc0ludCh2YWx1ZS0+Y2hpbGQoaSktPnR5cGUoKSksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNGbG9h
dCh2YWx1ZS0+Y2hpbGQoaSktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisgICAg
ICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVu
Y3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQor
ICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAg
ICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJCMyBW
QUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29u
ZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAg
ICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5w
cmludCgiICAgIEFmdGVyICIsIG1fcHJvY2VkdXJlLmxhc3RQaGFzZU5hbWUoKSwgIlxuIik7Cisg
ICAgICAgICAgICBmYWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQor
CisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBpZiAobV9kdW1wQmVm
b3JlKSB7CisgICAgICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV9wcm9jZWR1cmUubGFzdFBo
YXNlTmFtZSgpLCAiOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7Cisg
ICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAg
ICAgIGRhdGFMb2cobV9wcm9jZWR1cmUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3Nh
Z2UpOworICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVt
YmVyLCBmdW5jdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAg
CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX2R1bXBCZWZv
cmU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxpZGF0ZShQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0
ZXIgdmFsaWRhdGVyKHByb2NlZHVyZSwgZHVtcEJlZm9yZSk7CisgICAgdmFsaWRhdGVyLnJ1bigp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1ZhbGlkYXRlX2gKKyNkZWZpbmUgQjNWYWxpZGF0ZV9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgUHJvY2VkdXJlOworCit2b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIGR1
bXBCZWZvcmUgPSBudWxscHRyKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWxpZGF0ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTkg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IFZhbHVlOjpkdW1wUHJlZml4
ID0gIkAiOworCitWYWx1ZTo6flZhbHVlKCkKK3sKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdp
dGhJZGVudGl0eShWYWx1ZSogdmFsdWUpCit7CisgICAgLy8gVGhpcyBpcyBhIGJpdCBjcmF6eS4g
SXQgZG9lcyBhbiBpbi1wbGFjZSByZXBsYWNlbWVudCBvZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFz
cyB0aGlzIGlzIHdpdGgKKyAgICAvLyBhIHBsYWluIElkZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBj
b2xsZWN0IGFsbCBvZiB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0
aGUKKyAgICAvLyBwcmV2aW91cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0
IHRoZSBJZGVudGl0eSBWYWx1ZSBpbiBwbGFjZS4KKworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9p
bmRleDsKKyAgICBUeXBlIHR5cGUgPSBtX3R5cGU7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3Jp
Z2luOworICAgIEJhc2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisgICAgVmFsdWUqIHJl
cGxhY2VtZW50ID0gdGhpcy0+cmVwbGFjZW1lbnQ7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBl
ID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAg
bmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgSWRlbnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOwor
CisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxh
Y2VtZW50OworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aE5vcCgpCit7CisgICAgdW5zaWdu
ZWQgaW5kZXggPSBtX2luZGV4OworICAgIE9yaWdpbiBvcmlnaW4gPSBtX29yaWdpbjsKKyAgICBC
YXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworICAgIFZhbHVlKiByZXBsYWNlbWVudCA9
IHRoaXMtPnJlcGxhY2VtZW50OworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAg
bmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgTm9wLCBWb2lkLCBvcmlnaW4pOworCisgICAgdGhpcy0+
b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5yZXBsYWNlbWVudCA9IHJlcGxhY2VtZW50OworfQor
Cit2b2lkIFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIFZhbHVlOjpkZWVwRHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICIgIiwgKnRoaXMs
ICIgPSAiLCBtX29wY29kZSk7CisKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBDb21tYVByaW50
ZXIgY29tbWE7CisgICAgZm9yIChWYWx1ZSogY2hpbGQgOiBjaGlsZHJlbigpKQorICAgICAgICBv
dXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKGNoaWxkKSk7CisKKyAgICBTdHJpbmdQcmludFN0
cmVhbSBzdHJpbmdPdXQ7CisgICAgZHVtcE1ldGEoc3RyaW5nT3V0KTsKKyAgICBDU3RyaW5nIHN0
cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKKyAgICBpZiAoc3RyaW5nLmxlbmd0aCgpKQor
ICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cmluZyk7CisKKyAgICBvdXQucHJpbnQoIikiKTsK
K30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdAoreworfQorCitU
eXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQorewor
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEFkZDoK
KyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENo
aWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6
CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNh
c2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2Fz
ZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNl
IEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHBvaW50ZXJUeXBlKCk7CisgICAgY2FzZSBT
RXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBjYXNlIFRydW5jOgorICAgIGNhc2UgRFRvSTMy
OgorICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFu
OgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBH
cmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2Ug
QWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsK
KyAgICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0
OworICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJs
ZTsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVl
X2gKKyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQXJnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgor
I2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgU3RhY2ttYXA7CisKK2NsYXNzIEpTX0VYUE9SVF9Q
UklWQVRFIFZhbHVlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUq
LCAzPiBBZGphY2VuY3lMaXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQ
cmVmaXg7CisKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgdmlydHVhbCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlz
IGltbXV0YWJsZSwgZXhjZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggaWRlbnRpdHkuCisg
ICAgT3Bjb2RlIG9wY29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmln
aW4gb3JpZ2luKCkgY29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSom
IGNoaWxkKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAg
IFZhbHVlKiBjaGlsZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltp
bmRleF07IH0KKworICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9j
aGlsZHJlbi5zaXplKCk7IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcg
dGhlIG9wY29kZS4KKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKwor
ICAgIC8vIFRoaXMgaXMgdXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5vdGUgdGhhdCB0aGlzIGlzIG9u
bHkgdmFsaWQgZm9yIG5vbi12b2lkIHZhbHVlcy4KKyAgICBBaXI6OkFyZzo6VHlwZSBhaXJUeXBl
KCkgY29uc3QgeyByZXR1cm4gQWlyOjpBcmc6OnR5cGVGb3JCM1R5cGUodHlwZSgpKTsgfQorCisg
ICAgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAg
IGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJl
bjsgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCBy
ZXBsYWNlV2l0aE5vcCgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBo
b3cgeW91IGNhc3QgVmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRo
aW5nIHByb3ZpZGVkIHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91
IGNhbiBkbzoKKyAgICAvLworICAgIC8vIGlmIChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJl
ZyA9IHZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncwor
ICAgIC8vIH0KKyAgICAvLworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9w
Y29kZSgpICE9IEFyZ3VtZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51
bGxwdHIKKyAgICAvLyBpZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAg
IHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorICAgIGNvbnN0IFQqIGFzKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQzMigp
IGNvbnN0OworICAgIGludDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFz
SW50NjQoKSBjb25zdDsKKyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wg
aGFzSW50KCkgY29uc3Q7CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJ
bnQoaW50NjRfdCB2YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0Owor
ICAgIGRvdWJsZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7
CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworcHJv
dGVjdGVkOgorICAgIC8vIEluc3RhbnRpYXRlIHZhbHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIC8v
IFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1faW5kZXgo
aW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBl
KQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJz
dENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlz
IGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBu
byBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgp
CisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAg
ICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBp
cyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9w
Y29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAg
ICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAg
ICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQpKQorICAgICAgICAsIG1fb3Jp
Z2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMu
Li4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVz
IHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhh
dCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKKyAgICBleHBsaWNpdCBWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBt
X2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5
cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikK
KyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCisgICAgZXhw
bGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9p
bmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBl
KHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW4o
Y2hpbGRyZW4pCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgVHlwZSB0eXBl
Rm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpOworCisgICAgLy8gVGhpcyBncm91cCBvZiBm
aWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCisgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAgVHlwZSBtX3R5cGU7CisgICAgCisgICAgT3Jp
Z2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxpc3QgbV9jaGlsZHJlbjsKKworcHVibGljOgor
ICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCisg
ICAgVmFsdWUqIHJlcGxhY2VtZW50IHsgbnVsbHB0ciB9OyAvLyB1c2VkIGZvciBhbmFseXNlcyBh
bmQgdHJhbnNmb3JtYXRpb25zLgorfTsKKworY2xhc3MgRGVlcFZhbHVlRHVtcCB7CitwdWJsaWM6
CisgICAgRGVlcFZhbHVlRHVtcChjb25zdCBWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV92YWx1
ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWUt
PmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51
bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFZhbHVlKiBtX3ZhbHVlOworfTsK
KworaW5saW5lIERlZXBWYWx1ZUR1bXAgZGVlcER1bXAoY29uc3QgVmFsdWUqIHZhbHVlKQorewor
ICAgIHJldHVybiBEZWVwVmFsdWVEdW1wKHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIz
VmFsdWVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NoZWNr
VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2
NFZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdERvdWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQ
YXRjaHBvaW50VmFsdWUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCogVmFsdWU6OmFzKCkK
K3sKKyAgICBpZiAoVDo6YWNjZXB0cyhvcGNvZGUoKSkpCisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxUKj4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+Citjb25zdCBUKiBWYWx1ZTo6YXMoKSBjb25zdAoreworICAgIHJldHVybiBjb25zdF9j
YXN0PFZhbHVlKj4odGhpcyktPmFzPFQ+KCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJ
bnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitp
bmxpbmUgaW50MzJfdCBWYWx1ZTo6YXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENv
bnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludDY0
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDY0VmFsdWU+KCk7Cit9CisKK2lubGlu
ZSBpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2
NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSB8fCBoYXNJbnQ2NCgpOworfQorCitpbmxpbmUg
aW50NjRfdCBWYWx1ZTo6YXNJbnQoKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpID8g
YXNJbnQzMigpIDogYXNJbnQ2NCgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aXNJbnQoaW50
NjRfdCB2YWx1ZSkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2
YWx1ZTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuICEhYXM8Q29uc3REb3VibGVWYWx1ZT4oKTsKK30KKworaW5saW5lIGRvdWJsZSBWYWx1
ZTo6YXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdERvdWJsZVZhbHVlPigp
LT52YWx1ZSgpOworfQorCitpbmxpbmUgU3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7Cisg
ICAgaWYgKENoZWNrVmFsdWUqIGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0
dXJuICZjaGVjay0+c3RhY2ttYXA7CisgICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2lu
dCA9IGFzPFBhdGNocG9pbnRWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5z
dGFja21hcDsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZUlubGlu
ZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVS
ZXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCit2b2lkIFZhbHVlUmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KG1fa2luZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEFu
eToKKyAgICBjYXNlIFNvbWVSZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVn
aXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBTdGFjazoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbUZQ
KCksICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1lbnQ6CisgICAg
ICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFsdWUoKSwgIiki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisK
K3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJl
YW0mIG91dCwgVmFsdWVSZXA6OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAg
ICBjYXNlIFZhbHVlUmVwOjpBbnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgIG91dC5w
cmludCgiU29tZVJlZ2lzdGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVw
OjpSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmludCgiU3RhY2si
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6Cisg
ICAgICAgIG91dC5wcmludCgiU3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBWYWx1ZVJlcDo6Q29uc3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNWYWx1ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2UgdXNlIHRoaXMg
Y2xhc3MgdG8gZGVzY3JpYmUgdmFsdWUgcmVwcmVzZW50YXRpb25zIGF0IHN0YWNrbWFwcy4gSXQn
cyB1c2VkIGJvdGggdG8gZm9yY2UgYQorLy8gcmVwcmVzZW50YXRpb24gYW5kIHRvIGdldCB0aGUg
cmVwcmVzZW50YXRpb24uIFdoZW4gdGhlIEIzIGNsaWVudCBmb3JjZXMgYSByZXByZXNlbnRhdGlv
biwgd2Ugc2F5CisvLyB0aGF0IGl0J3MgYW4gaW5wdXQuIFdoZW4gQjMgdGVsbHMgdGhlIGNsaWVu
dCB3aGF0IHJlcHJlc2VudGF0aW9uIGl0IHBpY2tlZCwgd2Ugc2F5IHRoYXQgaXQncyBhbgorLy8g
b3V0cHV0LgorCitjbGFzcyBWYWx1ZVJlcCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAg
ICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBj
YW4gcGljayBhbnkgcmVwcmVzZW50YXRpb24uIEFzIGFuCisgICAgICAgIC8vIG91dHB1dCByZXBy
ZXNlbnRhdGlvbiwgdGhpcyBtZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMgd2lsbCBvbmx5
IGFyaXNlIGZvciB0aGUKKyAgICAgICAgLy8gcmlnaHQgb3BlcmFuZCAoaS5lLiBjaGlsZCgxKSkg
b2YgYSBDaGVja011bC4KKyAgICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJl
cHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rl
ci4gSXQgY291bGQgYmUgYQorICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMgY2xhaW1zIHRv
IGNsb2JiZXIhCisgICAgICAgIFNvbWVSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBpbnB1
dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiBBcyBh
biBvdXRwdXQKKyAgICAgICAgLy8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBy
ZWdpc3RlciBCMyBwaWNrZWQuCisgICAgICAgIFJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFu
IG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMg
cGlja2VkLiBJdCdzIG5vdCBhIHZhbGlkCisgICAgICAgIC8vIGlucHV0IHJlcHJlc2VudGF0aW9u
LgorICAgICAgICBTdGFjaywKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlv
biwgdGhpcyBmb3JjZXMgdGhlIHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUgYXJndW1lbnQgYXJlYSBh
dCBzb21lCisgICAgICAgIC8vIG9mZnNldC4KKyAgICAgICAgLy8gRklYTUU6IFRoZSBTdGFja21h
cFNwZWNpYWwgY2xhc3MgbmVlZHMgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCB0aGVzZSBk
b24ndCB0dXJuIGludG8KKyAgICAgICAgLy8gQWlyIG9wZXJhbmRzLgorICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTQwCisgICAgICAgIFN0YWNr
QXJndW1lbnQsCisKKyAgICAgICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlz
IHRlbGxzIHVzIHRoYXQgQjMgY29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29u
c3RhbnQKKyAgICB9OworICAgIAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55
KQorICAgIHsKKyAgICB9CisKKyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAg
ICA6IG1fa2luZChSZWdpc3RlcikKKyAgICB7CisgICAgICAgIHUucmVnID0gcmVnOworICAgIH0K
KworICAgIHN0YXRpYyBWYWx1ZVJlcCByZWcoUmVnIHJlZykKKyAgICB7CisgICAgICAgIHJldHVy
biBWYWx1ZVJlcChyZWcpOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFjayhpbnRw
dHJfdCBvZmZzZXRGcm9tRlApCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0LnUub2Zmc2V0RnJvbUZQ
ID0gb2Zmc2V0RnJvbUZQOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0
YXRpYyBWYWx1ZVJlcCBzdGFja0FyZ3VtZW50KGludHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7
CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNr
QXJndW1lbnQ7CisgICAgICAgIHJlc3VsdC51Lm9mZnNldEZyb21TUCA9IG9mZnNldEZyb21TUDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29u
c3RhbnQoaW50NjRfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IENvbnN0YW50OworICAgICAgICByZXN1bHQudS52YWx1ZSA9
IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1
ZVJlcCBjb25zdGFudERvdWJsZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
VmFsdWVSZXA6OmNvbnN0YW50KGJpdHdpc2VfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAgIH0K
KworICAgIEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgZXhwbGlj
aXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBBbnk7IH0KKworICAg
IFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZWdpc3Rl
cik7CisgICAgICAgIHJldHVybiB1LnJlZzsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRG
cm9tRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7Cisg
ICAgICAgIHJldHVybiB1Lm9mZnNldEZyb21GUDsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZz
ZXRGcm9tU1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0Fy
Z3VtZW50KTsKKyAgICAgICAgcmV0dXJuIHUub2Zmc2V0RnJvbVNQOworICAgIH0KKworICAgIGlu
dDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25z
dGFudCk7CisgICAgICAgIHJldHVybiB1LnZhbHVlOworICAgIH0KKworICAgIGRvdWJsZSBkb3Vi
bGVWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJs
ZT4odmFsdWUoKSk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisKK3ByaXZhdGU6CisgICAgS2luZCBtX2tpbmQ7CisgICAgdW5pb24gVSB7CisgICAgICAgIFJl
ZyByZWc7CisgICAgICAgIGludHB0cl90IG9mZnNldEZyb21GUDsKKyAgICAgICAgaW50cHRyX3Qg
b2Zmc2V0RnJvbVNQOworICAgICAgICBpbnQ2NF90IHZhbHVlOworCisgICAgICAgIFUoKQorICAg
ICAgICB7CisgICAgICAgICAgICBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7CisgICAg
ICAgIH0KKyAgICB9IHU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNw
YWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlZh
bHVlUmVwOjpLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZVJlcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNo
ZXIucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NTAgQEAKKyMhL3Vzci9iaW4vZW52IHJ1
YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0
aG5hbWUiCisKKyR2YXJJbmRleCA9IDAKK2RlZiBuZXdWYXIKKyAgICAkdmFySW5kZXggKz0gMQor
ICAgICJfdG1wI3skdmFySW5kZXh9IgorZW5kCisKK2NsYXNzIFByb2R1Y3Rpb24KKyAgICBhdHRy
X3JlYWRlciA6b3JpZ2luLCA6bmFtZSwgOnZhck5hbWUsIDphbm9ueW1vdXMsIDpvcGNvZGUsIDpj
aGlsZHJlbgorCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBuYW1lLCBvcGNvZGUsIGNoaWxk
cmVuKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBuYW1lID0gbmFtZQorICAg
ICAgICBAYW5vbnltb3VzID0gKG5hbWUgPT0gbmlsIG9yIG5hbWUgPX4gL1xBXCQoWzAtOV0rKVxa
LykKKyAgICAgICAgQHZhck5hbWUgPSBAYW5vbnltb3VzID8gbmV3VmFyIDogbmFtZSA9fiAvXEFc
JC8gPyAkJyA6IG5hbWUKKyAgICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRy
ZW4gPSBjaGlsZHJlbiA/IGNoaWxkcmVuIDogW10KKyAgICBlbmQKKworICAgIGRlZiBoYXNPcGNv
ZGUKKyAgICAgICAgb3Bjb2RlICE9IG5pbAorICAgIGVuZAorCisgICAgZGVmIGVhY2hWYXJpYWJs
ZSgmcHJvYykKKyAgICAgICAgY2hpbGRyZW4uZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAg
IHwgY2hpbGQsIGluZGV4IHwKKyAgICAgICAgICAgIHlpZWxkIHZhck5hbWUsCisgICAgICAgICAg
ICAgICAgICBjaGlsZC5uYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQudmFyTmFtZSwKKyAg
ICAgICAgICAgICAgICAgIGNoaWxkLmFub255bW91cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5vbklu
dGVybmFsIDogOmFub25PcGVyYW5kKSA6IChjaGlsZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6b3Bl
cmFuZCksCisgICAgICAgICAgICAgICAgICBpbmRleAorICAgICAgICAgICAgY2hpbGQuZWFjaFZh
cmlhYmxlKCZwcm9jKQorICAgICAgICB9CisgICAgZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgor
ICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6cHJvZHVjdGlvbnMKKworICAgIGRlZiBpbml0aWFsaXpl
KG5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1
Y3Rpb25zID0gcHJvZHVjdGlvbnMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBh
dHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxp
emUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisg
ICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0
b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisK
K2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAg
IGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2lu
CisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3Ro
ZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09
IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVy
CisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAg
QHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIj
e0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBw
YXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAg
ICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAg
ICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVu
ZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9
IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIg
PSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAg
d2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAg
ICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAg
ICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hlbiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAt
OV9dKikvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5h
bWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAg
ICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbPSgpLF0vCisgICAg
ICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1i
ZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0
ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2Vx
dWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0g
JH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc0tleXdvcmQo
dG9rZW4pCisgICAgIyBXZSBjYW4gZXh0ZW5kIHRoaXMgYXMgd2UgYWRkIG1vcmUga2V5d29yZHMu
IExpa2UsIHdlIG1pZ2h0IHdhbnQgImluY2x1ZGUiIGV2ZW50dWFsbHkuCisgICAgdG9rZW4gPX4g
L1xBKChtYXRjaGVyKXwoaW5jbHVkZSkpXFovCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tl
bikKKyAgICB0b2tlbiA9fiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5v
dCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxp
emUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUp
CisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRv
a2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAx
CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9r
ZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBh
cnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0
cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRv
a2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3Vt
ZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNl
RXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkK
KyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRV
bmlxdWUobmFtZSwgcHJvZHVjdGlvbnMsIHByb2R1Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0g
cHJvZHVjdGlvbi52YXJOYW1lCisgICAgICAgICAgICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0
aW9uIGhhcyBzYW1lIG5hbWUgYXMgcGFyZW50IHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAg
ICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJv
ZHVjdGlvbi5uYW1lIH0KKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0
aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAg
ICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAg
ICAgICBtYXRjaGVyTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlv
bnMgPSBbXQorCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBA
dG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAi
aW5jbHVkZSIuIElmIHdlIGRpZCB0aGF0LCBpdCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAg
cHJvZHVjdGlvbiA9IHBhcnNlUHJvZHVjdGlvbgorICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9u
Lm5hbWUgfQorICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9u
IikKKyAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0
aW9uCisgICAgICAgIH0KKworICAgICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVj
dGlvbnMpCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdp
biA9IHRva2VuLm9yaWdpbgorICAgICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAg
ICAgICBpZiB0b2tlbiA9PSAiPSIKKyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAgICAgICAg
ICAgb3Bjb2RlID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQor
ICAgICAgICBlbHNpZiB0b2tlbiA9PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAg
ICAgICAgICAgb3Bjb2RlID0gbmFtZQorICAgICAgICAgICAgbmFtZSA9IG5pbAorICAgICAgICBl
bHNlCisgICAgICAgICAgICByZXR1cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWws
IG5pbCkKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisg
ICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisKKyAgICAg
ICAgICAgIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorCisg
ICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1bWUoIiwi
KQorICAgICAgICB9CisKKyAgICAgICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAgICAgICAg
YWR2YW5jZQorCisgICAgICAgIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBw
cm9kdWN0aW9ucykKKyAgICBlbmQKK2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2Vy
ID0gUGFyc2VyLm5ldyhJTzo6cmVhZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hlciA9IHBh
cnNlci5wYXJzZQorCitjbGFzcyBTdWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRleE1hcCwg
OnByb2R1Y3Rpb25zCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0
aW9ucykKKyAgICAgICAgQGluZGV4TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25zID0gW10K
KyAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAg
ICAgICBAaW5kZXhNYXAgPDwgaW5kZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9k
dWN0aW9uc1tpbmRleF0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgZGVmIG1hcEluZGV4TGlz
dChpbmRleExpc3QpCisgICAgICAgIGluZGV4TGlzdC5tYXAgeworICAgICAgICAgICAgfCBpbmRl
eCB8CisgICAgICAgICAgICBAaW5kZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKK2Vu
ZAorCiskc3RkZXJyLnB1dHMgIkdlbmVyYXRpbmcgY29kZSBmb3IgI3tmaWxlTmFtZX0uIgorCitG
aWxlLm9wZW4oIkIzIiArIG1hdGNoZXIubmFtZSArICIuaCIsICJ3IikgeworICAgIHwgb3V0cCB8
CisKKyAgICBvdXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJuX21hdGNo
ZXIucmIgZnJvbSAje2ZpbGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisKKyAgICBvdXRwLnB1dHMg
IiNpZm5kZWYgQjMje21hdGNoZXIubmFtZX1faCIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQjMj
e21hdGNoZXIubmFtZX1faCIKKyAgICAKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQjNWYWx1
ZS5oXCIiCisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsiCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IgorICAgIG91
dHAucHV0cyAiYm9vbCBydW4je21hdGNoZXIubmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRhcHRvciYg
YWRhcHRvcikiCisgICAgb3V0cC5wdXRzICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBkb2Vz
IG5vdCBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vyc2l2
ZSBlbWl0dGVyLiBJZiB5b3UKKyAgICAjIHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBmb3Jt
YXR0ZWQsIG9wZW4gaXQgaW4gYSBnb29kIHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9ybWF0
IGl0CisgICAgIyBmb3IgeW91LgorCisgICAgIyBJbiBvZGQgc2l0dWF0aW9ucywgd2UgbWF5IG5v
dCB1c2UgdGhlIGlucHV0IHZhbHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJv
dXQgaXQuCisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsiCisgICAgICAgIAor
ICAgICMgVGhpcyBqdXN0IHByb3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29ycnkg
YWJvdXQgcHJvZHVjdGlvbnMgaGF2aW5nIGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBtYXRj
aExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRleExpc3Rz
ID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAg
IHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5k
IHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJvZHVj
dGlvbi5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBp
bmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2lu
ZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICBpbmRleExpc3RzLmVh
Y2ggeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgbGVuZ3RoID0gcHJv
ZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlmIGxl
bmd0aCA+IDAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0tPmNo
aWxkcmVuKCkuc2l6ZSgpID49ICN7bGVuZ3RofSkgeyIKKyAgICAgICAgICAgICAgICB5aWVsZCBp
bmRleExpc3QKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICBlbmQKKyAgICAg
ICAgfQorICAgIGVuZAorCisgICAgIyBUaGlzIGVmZmljaWVudGx5IHNlbGVjdHMgZnJvbSB0aGUg
Z2l2ZW4gc2V0IG9mIHByb2R1Y3Rpb25zLiBJdCBhc3N1bWVzIHRoYXQgcHJvZHVjdGlvbnMKKyAg
ICAjIGFyZSBub3QgZHVwbGljYXRlZC4gSXQgeWllbGRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQg
cHJvZHVjdGlvbiwgYW5kIHRoZSBjb3JvdXRpbmUgaXMKKyAgICAjIHJlc3BvbnNpYmxlIGZvciBl
bWl0dGluZyBzcGVjaWZpYyBjb2RlIGZvciB0aGF0IHByb2R1Y3Rpb24uIFRoZSBjb3JvdXRpbmUg
aXMgZ2l2ZW4gbGlzdHMgb2YKKyAgICAjIGluZGljZXMgb2YgcG9zc2libHktbWF0Y2hpbmcgcHJv
ZHVjdGlvbnMuCisgICAgZGVmIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9k
dWN0aW9ucykKKyAgICAgICAgIyBGaXJzdCwgc3BsaXQgdGhlIHByb2R1Y3Rpb25zIGxpc3QgaW50
byBydW5zIG9mIHByb2R1Y3Rpb25zIHdpdGggYW4gb3Bjb2RlIGFuZCBwcm9kdWN0aW9ucworICAg
ICAgICAjIHdpdGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJv
ZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5k
ZXggfAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4
TGlzdHNbLTFdWzBdXS5oYXNPcGNvZGUgPT0gcHJvZHVjdGlvbi5oYXNPcGNvZGUKKyAgICAgICAg
ICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAg
IH0KKyAgICAgICAgCisgICAgICAgICMgTm93LCBlbWl0IHBhdHRlcm4gbWF0Y2hpbmcgY29kZS4g
V2UgZG8gaXQgZGlmZmVyZW50bHkgZm9yIGxpc3RzIHdpdGggYW4gb3Bjb2RlIHRoYW4gZm9yCisg
ICAgICAgICMgbGlzdHMgd2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7Cisg
ICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBpZiBwcm9kdWN0aW9uc1tpbmRl
eExpc3RbMF1dLmhhc09wY29kZQorICAgICAgICAgICAgICAgICMgTm93LCB3ZSBzcGxpdCB0aGlz
IGluZGV4IGxpc3QgaW50byBncm91cHMgZm9yIGVhY2ggb3Bjb2RlLgorICAgICAgICAgICAgICAg
IGdyb3VwcyA9IHt9CisgICAgICAgICAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAg
ICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHBy
b2R1Y3Rpb25zW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBpZiBncm91cHNbcHJvZHVjdGlv
bi5vcGNvZGVdCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNv
ZGVdIDw8IGluZGV4CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdyb3Vwc1twcm9kdWN0aW9uLm9wY29kZV0gPSBbaW5kZXhdCisgICAgICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgRW1pdCBh
IHN3aXRjaCBzdGF0ZW1lbnQuCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7
dmFsdWVOYW1lfS0+b3Bjb2RlKCkpIHsiCisgICAgICAgICAgICAgICAgZ3JvdXBzLmVhY2hfcGFp
ciB7CisgICAgICAgICAgICAgICAgICAgIHwgb3Bjb2RlLCBzdWJJbmRleExpc3QgfAorICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgICAgICAg
ICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoc3ViSW5kZXhMaXN0LCBwcm9kdWN0aW9ucykK
KyAgICAgICAgICAgICAgICAgICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRj
aC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAor
ICAgICAgICAgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4
TGlzdCkKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
c3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAg
ICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25z
KSB7CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAg
ICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVuZAorCisgICAgIyBUYWtlcyBw
cm9kdWN0aW9ucyB0aGF0IGhhdmUgdGhlIHNhbWUgb3Bjb2RlIGFuZCB0aGUgc2FtZSBsZW5ndGgg
YW5kIHNlbGVjdHMgZnJvbSB0aGVtIGJhc2VkIG9uCisgICAgIyB0aGUgcHJvZHVjdGlvbnMgYXQg
dGhlIGdpdmVuIGNvbHVtbi4KKyAgICBkZWYgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBw
cm9kdWN0aW9ucywgY29sdW1uSW5kZXgpCisgICAgICAgIGlmIGNvbHVtbkluZGV4ID49IHByb2R1
Y3Rpb25zWzBdLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgeWllbGQgKDAuLi4ocHJvZHVj
dGlvbnMuc2l6ZSkpLnRvX2EKKyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKworICAg
ICAgICBzdWJWYWx1ZSA9IG5ld1ZhcgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJ7Igor
ICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje3N1YlZhbHVlfSA9ICN7dmFsdWVOYW1lfS0+Y2hp
bGQoI3tjb2x1bW5JbmRleH0pOyIKKworICAgICAgICAjIFdlIG1heSBub3QgdXNlIHRoaXMgdmFs
dWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICAgICAgb3V0
cC5wdXRzICJVTlVTRURfUEFSQU0oI3tzdWJWYWx1ZX0pOyIKKyAgICAgICAgCisgICAgICAgIHN1
YlByb2R1Y3Rpb25zID0gcHJvZHVjdGlvbnMubWFwIHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlv
biB8CisgICAgICAgICAgICBwcm9kdWN0aW9uLmNoaWxkcmVuW2NvbHVtbkluZGV4XQorICAgICAg
ICB9CisKKyAgICAgICAgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCBzdWJWYWx1ZSwgc3ViUHJvZHVj
dGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIHN1Yk1hdGNo
ID0gU3ViTWF0Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRj
aENvbHVtbihvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCBjb2x1bW5JbmRl
eCArIDEpIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAg
eWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICBlbmQKKworICAgIGRlZiBtYXRj
aFJlY3Vyc2l2ZWx5KG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIG1hdGNo
UHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykgeworICAgICAgICAgICAg
fCBpbmRleExpc3QgfAorICAgICAgICAgICAgIyBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoaXMg
aW5kZXggbGlzdCBjb250YWlucyBwcm9kdWN0aW9ucyB3aXRoIHRoZSBzYW1lIG9wY29kZSBhbmQK
KyAgICAgICAgICAgICMgdGhlIHNhbWUgbGVuZ3RoLgorICAgICAgICAgICAgc3ViTWF0Y2ggPSBT
dWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29s
dW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMsIDApIHsKKyAgICAgICAg
ICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFw
SW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGVuZAor
CisgICAgbWF0Y2hSZWN1cnNpdmVseShvdXRwLCAiX3ZhbHVlIiwgbWF0Y2hlci5wcm9kdWN0aW9u
cykgeworICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAg
ICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IG1hdGNoZXIucHJv
ZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgICAgICBv
dXRwLnB1dHMgIlZhbHVlKiAje3Byb2R1Y3Rpb24udmFyTmFtZX0gPSBfdmFsdWU7IgorICAgICAg
ICAgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oI3twcm9kdWN0aW9uLnZhck5hbWV9KTsiCisg
ICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBvcGVyYW5kQXJn
dW1lbnRzID0gW10KKyAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBu
dW1TY29wZXMgPSAwCisgICAgICAgICAgICBzZWVuID0ge30KKworICAgICAgICAgICAgIyBGSVhN
RTogV2Ugd2FudCB0byBiZSBhYmxlIHRvIGNvbWJpbmUgcGF0dGVybiBtYXRjaGVycywgbGlrZSBo
YXZlIHRoZSBwYXR0ZXJuIG1hdGNoIHJ1bGUKKyAgICAgICAgICAgICMgZm9yIEJyYW5jaCBpbiB0
aGUgbG93ZXJpbmcgcGF0Y2hlciBkZWxlZ2F0ZSB0byBhIG1hdGNoZXIgdGhhdCBjYW4gZGVkdWNl
IHRoZSBraW5kIG9mCisgICAgICAgICAgICAjIGNvbXBhcmlzb24gdGhhdCB3ZSdyZSBkb2luZy4g
V2UgY291bGQgdGhlbiByZXVzZSB0aGF0IGxhdHRlciBtYXRjaGVyIGZvciBDaGVjayBhbmQKKyAg
ICAgICAgICAgICMgdW5mdXNlZCBjb21wYXJlLiBUaGUga2V5IHRvIG1ha2luZyBzdWNoIGEgZGVs
ZWdhdGlvbiB3b3JrIGlzIHRvIGhhdmUgdGhlIGlubmVyIG1hdGNoZXIKKyAgICAgICAgICAgICMg
KHRoZSBjb21wYXJpc29uIG1hdGNoZXIgaW4gdGhpcyBjYXNlKSBrZWVwIGNhc2NhZGluZyBpZiBp
dCBlbmNvdW50ZXJzIGEgcnVsZSB0aGF0CisgICAgICAgICAgICAjIHByb2R1Y2VzIHNvbWV0aGlu
ZyB0aGF0IHRoZSBvdXRlciBtYXRjaGVyIGNhbm5vdCBoYW5kbGUuIEl0J3Mgbm90IG9idmlvdXMg
dGhhdCB0aGUKKyAgICAgICAgICAgICMgY29tcGFyaXNvbiBtYXRjaGVyIHdvdWxkIG5lZWQgdGhp
cywgYnV0IHRoZSBhZGRyZXNzIG1hdGNoZXIgcHJvYmFibHkgd2lsbC4gRm9yIGV4YW1wbGUsCisg
ICAgICAgICAgICAjIHdlIG1heSBoYXZlIGEgU3RvcmVBZGRMb2FkIHJ1bGUgdGhhdCBkZWxlZ2F0
ZXMgdG8gdGhlIGFkZHJlc3MgbWF0Y2hlciwgYW5kIHRoZSBhZGRyZXNzCisgICAgICAgICAgICAj
IG1hdGNoZXIgbWF5IHByb2R1Y2UgYW4gYWRkcmVzcyB0aGF0IHRoZSBsb3dlcmluZyBtYXRjaGVy
IGNhbm5vdCB1c2UgYmVjYXVzZSB3aGlsZSB0aGUKKyAgICAgICAgICAgICMgQWRkIGZvcm0gZG9l
cyBhY2NlcHQgYWRkcmVzc2VzIGl0IG1heSBub3QgYWNjZXB0IHRoZSBwYXJ0aWN1bGFyIGFkZHJl
c3MgdGhhdCB0aGUKKyAgICAgICAgICAgICMgYWRkcmVzcyBtYXRjaGVyIHByb2R1Y2VkLiBJbiB0
aGF0IGNhc2UsIGluc3RlYWQgb2YgZ2l2aW5nIHVwIG9uIHRoZSBTdG9yZUFkZExvYWQgcnVsZSwK
KyAgICAgICAgICAgICMgd2Ugd2FudCB0aGUgYWRkcmVzcyBtYXRjaGVyIHRvIGp1c3QgdHJ5IGEg
ZGlmZmVyZW50IGFkZHJlc3MuIFRoZSBjb21wYXJpc29uIG1hdGNoZXIKKyAgICAgICAgICAgICMg
bWlnaHQgd2FudCB0aGlzIGp1c3QgZm9yIGJldHRlciBjb250cm9sbGluZyB3aGVuIHRvIHBpbiB2
YXJpYWJsZXMuIEN1cnJlbnRseSwgaWYgaXQKKyAgICAgICAgICAgICMgY29uc3RydWN0ZWQgc29t
ZSBjb2RlLCBpdCB3b3VsZCBhbHNvIHBpbiB0aGUgdmFyaWFibGVzIHRoYXQgaXQgdXNlZC4gSWYg
dGhlIGxvd2VyaW5nCisgICAgICAgICAgICAjIG1hdGNoZXIgdGhlbiBkZWNpZGVkIHRvIHJlamVj
dCB0aGUgY29kZSBjcmVhdGVkIGJ5IHRoZSBjb21wYXJpc29uIG1hdGNoZXIsIGl0IHdvdWxkCisg
ICAgICAgICAgICAjIGhhdmUgYSBoYXJkIHRpbWUgInVucGlubmluZyIgdGhvc2UgdmFyaWFibGVz
LiBCdXQgaWYgd2UgaGFkIHNvbWUga2luZCBvZiBkZWxlZ2F0aW9uLCB3ZQorICAgICAgICAgICAg
IyBjb3VsZCBoYXZlIHRoZSBwaW5uaW5nIG9mIHRoZSBjb21wYXJpc29uIG1hdGNoZXIgaGFwcGVu
IG9ubHkgaWYgdGhlIGxvd2VyaW5nIG1hdGNoZXIKKyAgICAgICAgICAgICMgYWNjZXB0ZWQuCisg
ICAgICAgICAgICAjCisgICAgICAgICAgICAjIFRoaXMgY291bGQgYWxsIGJlIGFjY29tcGxpc2hl
ZCBieSBoYXZpbmcgdHJ5QmxhaCgpIHJldHVybiBzb21ldGhpbmcsIGFuZCBoYXZlIHRoZQorICAg
ICAgICAgICAgIyBtYXRjaGVyIGFsc28gdGFrZSBhIGZ1bmN0b3IgYXJndW1lbnQgdGhhdCBhY2Nl
cHRzIHdoYXQgdHJ5QmxhaCgpIHJldHVybnMuIFNvIGluc3RlYWQgb2YKKyAgICAgICAgICAgICMK
KyAgICAgICAgICAgICMgaWYgKHRyeUJsYWgoKSkgb2s7CisgICAgICAgICAgICAjCisgICAgICAg
ICAgICAjIFdlIHdvdWxkIGhhdmU6CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGlmIChm
dW5jdG9yKHRyeUJsYWgoKSkgb2s7CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFdoZW4g
bG93ZXJpbmcgZGVjaWRlZCB0byBkZWxlZ2F0ZSB0byB0aGUgYWRkcmVzcyBvciBjb21wYXJpc29u
IG1hdGNoZXIsIGl0IGNvdWxkIHN1cHBseQorICAgICAgICAgICAgIyBhIGZ1bmN0b3IgdGhhdCBk
ZWNpZGVzIHdoZXRoZXIgdGhlIHRoaW5nIHRoYXQgdGhlIHN1Yi1tYXRjaGVyIHNlbGVjdGVkIGlz
IGluZGVlZAorICAgICAgICAgICAgIyB1c2VmdWwuCisgICAgICAgICAgICAjCisgICAgICAgICAg
ICAjIEluIHRoZSBuZWFyIHRlcm0sIHdlIHByb2JhYmx5IHdvbid0IG5lZWQgdGhpcy4gQnV0IHdl
IHdpbGwgZGVmaW5pdGVseSBuZWVkIGl0IGFzIHdlCisgICAgICAgICAgICAjIGV4cGFuZCB0byBl
ZmZpY2llbnRseSBzdXBwb3J0IG1vcmUgcGxhdGZvcm1zLiBPbiBYODZfNjQsIGFueSBicmFuY2hp
bmcgaW5zdHJ1Y3Rpb24gaXMKKyAgICAgICAgICAgICMgdXNhYmxlIGluIGFueSBjb250ZXh0LCBh
bmQgYW55IGFkZHJlc3Mgc2hvdWxkIGJlIHVzYWJsZSBpbiBhbnkgY29udGV4dCAoYW5kIHRoZSBv
bmx5CisgICAgICAgICAgICAjIGNhc2VzIHdoZXJlIGl0IHdvdWxkbid0IGJlIGlzIGlmIHdlIGhh
dmUgaG9sZXMgaW4gdGhlIE1hY3JvQXNzZW1ibGVyKS4KKyAgICAgICAgICAgICMKKyAgICAgICAg
ICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDU1OQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBwcm9kdWN0aW9uLmVhY2hWYXJpYWJsZSB7CisgICAgICAg
ICAgICAgICAgfCBwYXJlbnRWYXJOYW1lLCBjaGlsZE5hbWUsIGNoaWxkVmFyTmFtZSwga2luZCwg
aW5kZXggfAorICAgICAgICAgICAgICAgIGxvYWRFeHByID0gIiN7cGFyZW50VmFyTmFtZX0tPmNo
aWxkKCN7aW5kZXh9KSIKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBzZWVu
W2NoaWxkVmFyTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgdG1wID0gbmV3VmFyCisgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7dG1wfSA9ICN7bG9hZEV4cHJ9OyIKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t0bXB9ID09ICN7Y2hpbGRWYXJOYW1l
fSkgeyIKKyAgICAgICAgICAgICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHNlZW5bY2hpbGRWYXJOYW1lXSA9IHRydWUKKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUq
ICN7Y2hpbGRWYXJOYW1lfSA9ICN7bG9hZEV4cHJ9OyIKKworICAgICAgICAgICAgICAgICAgICAj
IEZJWE1FOiBDb25zaWRlciBnZXR0aW5nIHJpZCBvZiB0aGUgJCBwcmVmaXguCisgICAgICAgICAg
ICAgICAgICAgICMgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUy
NworICAgICAgICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQo
I3skMX0pKSB7IgorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsi
CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51
bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1l
IGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAg
ICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpv
cGVyYW5kIG9yIGtpbmQgPT0gOmFub25PcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFy
Z3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6
b3BlcmFuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAg
b3V0cC5wdXRzICJpZiAoYWRhcHRvci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICB1
bmxlc3MgaW50ZXJuYWxBcmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
KCImJiBhZGFwdG9yLmFjY2VwdEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigi
LCAiKSArICIpIikKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRB
cmd1bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFj
Y2VwdE9wZXJhbmRzKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci50cnkje3Byb2R1
Y3Rpb24ubmFtZX0oIiArIHRyeUFyZ3VtZW50cy5qb2luKCIsICIpICsgIikpIHsiKQorICAgICAg
ICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdFJvb3RMYXRlKF92YWx1ZSk7IgorICAgICAg
ICAgICAgdW5sZXNzIGludGVybmFsQXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiYWRhcHRvci5hY2NlcHRJbnRlcm5hbHNMYXRlKCIgKyBpbnRlcm5hbEFyZ3VtZW50
cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB1bmxlc3Mg
b3BlcmFuZEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0
b3IuYWNjZXB0T3BlcmFuZHNMYXRlKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAi
KTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7
IgorICAgICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVz
IHsKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRz
ICIgICAgcmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5w
dXRzICJ9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAv
LyBCMyN7bWF0Y2hlci5uYW1lfV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3Ri
My5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRl
ICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgi
CisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUu
aCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIK
KyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNp
bmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2lu
Y2x1ZGUgIkluaXRpYWxpemVUaHJlYWRpbmcuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisj
aW5jbHVkZSAiTGlua0J1ZmZlci5oIgorI2luY2x1ZGUgIlZNLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisK
K25hbWVzcGFjZSB7CisKKy8vIE5vdGhpbmcgZmFuY3kgZm9yIG5vdzsgd2UganVzdCB1c2UgdGhl
IGV4aXN0aW5nIFdURiBhc3NlcnRpb24gbWFjaGluZXJ5LgorI2RlZmluZSBDSEVDSyh4KSBSRUxF
QVNFX0FTU0VSVCh4KQorCitWTSogdm07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KK1QgY29tcGlsZUFuZFJ1bihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBn
ZW5lcmF0ZShwcm9jZWR1cmUsIGppdCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwg
aml0LCBudWxscHRyKTsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpF
X0NPREUobGlua0J1ZmZlciwgKCJ0ZXN0YjMiKSk7CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVu
dHMuLi4pID0gYml0d2lzZV9jYXN0PFQoKikoQXJndW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7Cit9
CisKK3ZvaWQgdGVzdDQyKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIFZhbHVlKiBjb25zdDQyID0gcm9vdC0+YXBw
ZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDQyKTsKKyAgICByb290LT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjb25zdDQyKTsKKwor
ICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisKK3ZvaWQgdGVz
dExvYWQ0MigpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9
IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgeCA9IDQyOworICAgIHJvb3QtPmFwcGVuZE5ldzxD
b250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICBy
b290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgTG9hZCwgSW50
MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAmeCkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihw
cm9jKSA9PSA0Mik7Cit9CisKK3ZvaWQgdGVzdEFyZyhpbnQgYXJndW1lbnQpCit7CisgICAgUHJv
Y2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAg
ICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKTsKKworICAgIENIRUNLKGNvbXBpbGVB
bmRSdW48aW50Pihwcm9jLCBhcmd1bWVudCkgPT0gYXJndW1lbnQpOworfQorCit2b2lkIHRlc3RB
ZGRBcmdzKGludCBhLCBpbnQgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9s
VmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
R1BSSW5mbzo6YXJndW1lbnRHUFIwKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1
bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOwor
CisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyBiKTsKK30K
Kwordm9pZCB0ZXN0QWRkQXJnczMyKGludCBhLCBpbnQgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJv
YzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFw
cGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAor
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
ICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BS
MSkpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikgPT0gYSAr
IGIpOworfQorCit2b2lkIHRlc3RTdG9yZShpbnQgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHBy
b2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgc2xv
dCA9IDB4YmFhZGJlZWY7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAg
ICAgcHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAmc2xvdCkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAor
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZh
bHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50
Pihwcm9jLCB2YWx1ZSkpOworICAgIENIRUNLKHNsb3QgPT0gdmFsdWUpOworfQorCit2b2lkIHRl
c3RUcnVuYyhpbnQ2NF90IHZhbHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRy
b2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3Qt
PmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisg
ICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48
aW50Pihwcm9jLCB2YWx1ZSkgPT0gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpOworfQorCit2b2lk
IHRlc3RBZGQxKGludCB2YWx1ZSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9s
VmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5h
cHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1
bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpKTsK
KworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB2YWx1ZSkgPT0gdmFsdWUgKyAx
KTsKK30KKwordm9pZCB0ZXN0U3RvcmVBZGRMb2FkKGludCBhbW91bnQpCit7CisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBp
bnQgc2xvdCA9IDM3OworICAgIENvbnN0UHRyVmFsdWUqIHNsb3RQdHIgPSByb290LT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90KTsKKyAgICByb290LT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2luKCksCisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdp
bigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2Fk
LCBJbnQzMiwgT3JpZ2luKCksIHNsb3RQdHIpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCkpLAorICAgICAgICBzbG90UHRy
KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIDApKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykp
OworICAgIENIRUNLKHNsb3QgPT0gMzcgKyBhbW91bnQpOworfQorCit2b2lkIHRlc3RTdG9yZUFk
ZEFuZExvYWQoaW50IGFtb3VudCwgaW50IG1hc2spCit7CisgICAgUHJvY2VkdXJlIHByb2M7Cisg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgc2xvdCA9IDM3
OworICAgIENvbnN0UHRyVmFsdWUqIHNsb3RQdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5
VmFsdWU+KAorICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBB
ZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1
ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBzbG90UHRyKSwKKyAgICAgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KSks
CisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgbWFzaykpLAorICAgICAgICBzbG90UHRyKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJv
bFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKworICAgIENIRUNL
KCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworICAgIENIRUNLKHNsb3QgPT0gKCgzNyArIGFt
b3VudCkgJiBtYXNrKSk7Cit9CisKK3ZvaWQgdGVzdEFkZDFVbmNvbW11dGVkKGludCB2YWx1ZSkK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAg
ICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAxKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAor
ICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBP
cmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVB
bmRSdW48aW50Pihwcm9jLCB2YWx1ZSkgPT0gdmFsdWUgKyAxKTsKK30KKworI2RlZmluZSBSVU4o
dGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRhTG9nKCN0
ZXN0ICI6XG4iKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZXN0OyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRhTG9nKCIgICAgT0shXG4iKTsg
ICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKTsKKwordm9pZCBydW4oKQor
eworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIHZtID0gJlZNOjpjcmVhdGUo
TGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisKKyAgICBSVU4odGVzdDQyKCkpOworICAgIFJVTih0ZXN0
TG9hZDQyKCkpOworICAgIFJVTih0ZXN0QXJnKDQzKSk7CisgICAgUlVOKHRlc3RBZGRBcmdzKDEs
IDEpKTsKKyAgICBSVU4odGVzdEFkZEFyZ3MoMSwgMikpOworICAgIFJVTih0ZXN0QWRkQXJnczMy
KDEsIDEpKTsKKyAgICBSVU4odGVzdEFkZEFyZ3MzMigxLCAyKSk7CisgICAgUlVOKHRlc3RTdG9y
ZSg0NCkpOworICAgIFJVTih0ZXN0VHJ1bmMoKHN0YXRpY19jYXN0PGludDY0X3Q+KDEpIDw8IDQw
KSArIDQyKSk7CisgICAgUlVOKHRlc3RBZGQxKDQ1KSk7CisgICAgUlVOKHRlc3RTdG9yZUFkZExv
YWQoNDYpKTsKKyAgICBSVU4odGVzdFN0b3JlQWRkQW5kTG9hZCg0NywgMHhmZmZmKSk7CisgICAg
UlVOKHRlc3RTdG9yZUFkZEFuZExvYWQoNDcwMDAwLCAweGZmZmYpKTsKKyAgICBSVU4odGVzdEFk
ZDFVbmNvbW11dGVkKDQ4KSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisjZWxz
ZSAvLyBFTkFCTEUoQjNfSklUKQorCitzdGF0aWMgdm9pZCBydW4oKQoreworICAgIGRhdGFMb2co
IkIzIEpJVCBpcyBub3QgZW5hYmxlZC5cbiIpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIFVOVVNFRF9QQVJB
TShhcmdjKTsKKyAgICBVTlVTRURfUEFSQU0oYXJndik7CisgICAgCisgICAgcnVuKCk7CisgICAg
cmV0dXJuIDA7Cit9CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwyNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5z
dElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNl
U2NvcGUuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitib29sIGF0
dGVtcHRBc3NpZ25tZW50KAorICAgIFN0YWNrU2xvdCogc2xvdCwgaW50cHRyX3Qgb2Zmc2V0RnJv
bUZQLCBjb25zdCBWZWN0b3I8U3RhY2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgaWYgKHZl
cmJvc2UpCisgICAgICAgIGRhdGFMb2coIkF0dGVtcHRpbmcgdG8gYXNzaWduICIsIHBvaW50ZXJE
dW1wKHNsb3QpLCAiIHRvICIsIG9mZnNldEZyb21GUCwgIiB3aXRoIGludGVyZmVyZW5jZSAiLCBw
b2ludGVyTGlzdER1bXAob3RoZXJTbG90cyksICJcbiIpOworCisgICAgLy8gTmVlZCB0byBhbGln
biBpdCB0byB0aGUgc2xvdCdzIGRlc2lyZWQgYWxpZ25tZW50LgorICAgIG9mZnNldEZyb21GUCA9
IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc2xvdC0+YWxpZ25tZW50KCksIC1vZmZzZXRGcm9t
RlApOworICAgIAorICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBvdGhlclNsb3RzKSB7
CisgICAgICAgIGlmICghb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBib29sIG92ZXJsYXAgPSBXVEY6OnJhbmdlc092ZXJsYXAoCisgICAg
ICAgICAgICBvZmZzZXRGcm9tRlAsCisgICAgICAgICAgICBvZmZzZXRGcm9tRlAgKyBzdGF0aWNf
Y2FzdDxpbnRwdHJfdD4oc2xvdC0+Ynl0ZVNpemUoKSksCisgICAgICAgICAgICBvdGhlclNsb3Qt
Pm9mZnNldEZyb21GUCgpLAorICAgICAgICAgICAgb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSAr
IHN0YXRpY19jYXN0PGludHB0cl90PihvdGhlclNsb3QtPmJ5dGVTaXplKCkpKTsKKyAgICAgICAg
aWYgKG92ZXJsYXApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIkFzc2lnbmVkICIsIHBvaW50ZXJEdW1wKHNsb3Qp
LCAiIHRvICIsIG9mZnNldEZyb21GUCwgIlxuIik7CisgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQ
KG9mZnNldEZyb21GUCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgYXNzaWduKFN0YWNr
U2xvdCogc2xvdCwgY29uc3QgVmVjdG9yPFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAg
IGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGFzc2lnbiAiLCBw
b2ludGVyRHVtcChzbG90KSwgIiB3aXRoIGludGVyZmVyZW5jZSAiLCBwb2ludGVyTGlzdER1bXAo
b3RoZXJTbG90cyksICJcbiIpOworICAgIAorICAgIGlmIChhdHRlbXB0QXNzaWdubWVudChzbG90
LCAtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkpLCBvdGhlclNsb3RzKSkK
KyAgICAgICAgcmV0dXJuOworCisgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IG90aGVy
U2xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGJvb2wgZGlkQXNzaWduID0gYXR0ZW1wdEFzc2lnbm1l
bnQoCisgICAgICAgICAgICBzbG90LCBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpIC0gc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkpLCBvdGhlclNsb3RzKTsKKyAgICAgICAg
aWYgKGRpZEFzc2lnbikKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwor
dm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNj
b3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrIik7CisKKyAgICAvLyBBbGxvY2F0ZSBhbGwgb2YgdGhl
IGxvY2tlZCBzbG90cyBpbiBvcmRlci4gVGhpcyBpcyBraW5kIG9mIGEgY3JhenkgYWxnb3JpdGht
IHRvIGFsbG93IGZvcgorICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBvZiBzdGFjayBzbG90cyBiZWlu
ZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVuIGdldCBoZXJlLgorICAgIEFT
U0VSVCghY29kZS5mcmFtZVNpemUoKSk7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVk
TG9ja2VkU3RhY2tTbG90czsKKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gbG9ja2VkU3RhY2tTbG90
c1dvcmtsaXN0OworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkp
IHsKKyAgICAgICAgc3dpdGNoIChzbG90LT5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdGFja1Ns
b3RLaW5kOjpMb2NrZWQ6CisgICAgICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisg
ICAgICAgICAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Qu
YXBwZW5kKHNsb3QpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tTbG90
S2luZDo6QW5vbnltb3VzOgorICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gQXMgYSBtYXR0ZXIgb2Ygc2FuaXR5LCB1bmFzc2lnbiB0aGlz
LiBNYXliZSBpdCB3b3VsZCBiZSBnb29kIHRvIGV2ZW4gaGF2ZSBhCisgICAgICAgICAgICAgICAg
Ly8gdmFsaWRhdGlvbiBydWxlIHRoYXQgdGhpcyBjYW5ub3QgaGFwcGVuLgorICAgICAgICAgICAg
ICAgIHNsb3QtPnNldE9mZnNldEZyb21GUCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIC8vIFRoaXMgaXMgYSBmYWlybHkgZXhwZW5z
aXZlIGxvb3AsIGJ1dCBpdCdzIE9LIGJlY2F1c2Ugd2UnbGwgdXN1YWxseSBvbmx5IGhhdmUgYSBo
YW5kZnVsIG9mCisgICAgLy8gbG9ja2VkIHN0YWNrIHNsb3RzLgorICAgIHdoaWxlICghbG9ja2Vk
U3RhY2tTbG90c1dvcmtsaXN0LmlzRW1wdHkoKSkgeworICAgICAgICBTdGFja1Nsb3QqIHNsb3Qg
PSBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QudGFrZUxhc3QoKTsKKyAgICAgICAgYXNzaWduKHNs
b3QsIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cyk7CisgICAgICAgIGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAgfQorCisgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUg
YW5vbnltb3VzIHNsb3RzLiBOb3RlIHRoYXQgdGhlb3JldGljYWxseSB3ZSBzaG91bGQgZG8gYW4g
ZXNjYXBlIGFuYWx5c2lzCisgICAgLy8gaGVyZS4gQnV0LCBjdXJyZW50bHkgQWlyIGRvZXNuJ3Qg
c3VwcG9ydCBlc2NhcGluZyBhIFN0YWNrU2xvdCEKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQg
Zm9yIGVzY2FwaW5nIGEgU3RhY2tTbG90IGFuZCBhZGQgZXNjYXBlIGFuYWx5c2lzIHRvIGFsbG9j
YXRlU3RhY2soKS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNDMwCisKKyAgICBhdXRvIGlzUmVsZXZhbnQgPSBbXSAoY29uc3QgQXJnJiBhcmcpIC0+
IGJvb2wgeworICAgICAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAmJiBhcmcuc3RhY2tTbG90KCkt
PmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM7CisgICAgfTsKKworICAgIExpdmVu
ZXNzPEFyZz4gbGl2ZW5lc3MoY29kZSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0
PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAg
ICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxBcmc+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxp
dmVuZXNzLCBibG9jayk7CisKKyAgICAgICAgYXV0byBpbnRlcmZlcmUgPSBbJl0gKEluc3QmIGlu
c3QpIHsKKyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2co
IkludGVyZmVyaW5nOiAiLCBsaXN0RHVtcChsb2NhbENhbGMubGl2ZSgpKSwgIlxuIik7CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIC8vIEZvcm0gYSBjbGlxdWUgb2Ygc3RhY2sgc2xvdHMgdGhh
dCBpbnRlcmZlcmUuIEZpcnN0IGZpbmQgdGhlIGxpc3Qgb2Ygc3RhY2sgc2xvdHMKKyAgICAgICAg
ICAgIC8vIHRoYXQgYXJlIGxpdmUgcmlnaHQgbm93LgorICAgICAgICAgICAgc2xvdHMucmVzaXpl
KDApOworICAgICAgICAgICAgZm9yIChBcmcgYXJnIDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAg
ICAgICAgICAgICAgIGlmIChpc1JlbGV2YW50KGFyZykpCisgICAgICAgICAgICAgICAgICAgIHNs
b3RzLmFwcGVuZChhcmcuc3RhY2tTbG90KCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICAvLyBXZSBtdXN0bid0IG1hbmRhdGUgdGhhdCB0aGUgaW5wdXQgY29kZSBpcyBvcHRpbWFsLiBU
aGVyZWZvcmUsIGl0IG1heSBoYXZlIGRlYWQgc3RvcmVzCisgICAgICAgICAgICAvLyB0byB0aGUg
c3RhY2suIFdlIG5lZWQgdG8gdHJlYXQgdGhlc2UgYXMgaW50ZXJmZXJpbmcuCisgICAgICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0Rl
Zihyb2xlKSAmJiBpc1JlbGV2YW50KGFyZykgJiYgIWxvY2FsQ2FsYy5saXZlKCkuY29udGFpbnMo
YXJnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tTbG90
KCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAo
dmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgU2xvdHM6ICIsIHBvaW50ZXJM
aXN0RHVtcChzbG90cyksICJcbiIpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IHNsb3RzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBvdXRl
ciA9IHNsb3RzW2ldOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBq
IDwgc2xvdHMuc2l6ZSgpOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBp
bm5lciA9IHNsb3RzW2pdOworCisgICAgICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZVtpbm5l
cl0uYWRkKG91dGVyKTsKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNlW291dGVyXS5h
ZGQoaW5uZXIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsK
KworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJ
bmRleC0tOykgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0
YUxvZygiQW5hbHl6aW5nOiAiLCBibG9jay0+YXQoaW5zdEluZGV4KSwgIlxuIik7CisgICAgICAg
ICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnRl
cmZlcmUoaW5zdCk7CisgICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0KTsKKyAgICAg
ICAgfQorICAgICAgICBJbnN0IG5vcDsKKyAgICAgICAgaW50ZXJmZXJlKG5vcCk7CisgICAgfQor
CisgICAgaWYgKHZlcmJvc2UpIHsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2Rl
LnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIGRhdGFMb2coIkludGVyZmVyZW5jZSBvZiAiLCBw
b2ludGVyRHVtcChzbG90KSwgIjogIiwgcG9pbnRlckxpc3REdW1wKGludGVyZmVyZW5jZVtzbG90
XSksICJcbiIpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25z
LiBBdCBpdHMgaGVhcnQgdGhpcyBhbGdvcml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNo
CisgICAgLy8gU3RhY2tTbG90IHdlIGp1c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAg
dGhhdCBpcyBjbG9zZXN0IHRvIHplcm8gd2hpbGUgZW5zdXJpbmcgbm8KKyAgICAvLyBvdmVybGFw
IHdpdGggb3RoZXIgU3RhY2tTbG90cyB0aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KKyAgICBWZWN0
b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90czsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNv
ZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkgewor
ICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZzZXQuCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGludGVy
ZmVyaW5nU2xvdHMgPSBpbnRlcmZlcmVuY2Vbc2xvdF07CisgICAgICAgIG90aGVyU2xvdHMucmVz
aXplKGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Nsb3RzLnNp
emUoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhc3NpZ25lZExvY2tlZFN0
YWNrU2xvdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBvdGhlclNsb3RzW2ldID0gYXNzaWdu
ZWRMb2NrZWRTdGFja1Nsb3RzW2ldOworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3Np
Z25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3Ro
ZXJTbG90IDogaW50ZXJmZXJpbmdTbG90cykKKyAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dElu
ZGV4KytdID0gb3RoZXJTbG90OworCisgICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsK
KyAgICB9CisKKyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZv
ciBzdGFjayBzbG90cy4KKyAgICB1bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsK
KyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAg
IGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIGZyYW1lU2l6
ZUZvclN0YWNrU2xvdHMsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXNsb3Qt
Pm9mZnNldEZyb21GUCgpKSk7CisgICAgfQorCisgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9
IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lU2l6
ZUZvclN0YWNrU2xvdHMpOworCisgICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNo
IGFyZ3VtZW50IGFyZWEgd2UgbmVlZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZv
ciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2Fs
bEFyZygpKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0
IHdlIHVzZSA4IGJ5dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKKyAgICAgICAg
ICAgICAgICAgICAgLy8gc3VjaCBhbiBhd2Vzb21lIGFzc3VtcHRpb24uCisgICAgICAgICAgICAg
ICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNDU0CisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7Cisg
ICAgICAgICAgICAgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShhcmcub2Zmc2V0
KCkgKyA4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBjb2RlLnNldEZyYW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3RzICsgY29k
ZS5jYWxsQXJnQXJlYVNpemUoKSk7CisKKyAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0gdGhlIGNv
ZGUgdG8gdXNlIEFkZHIncyBpbnN0ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEgbG9zc2xl
c3MKKyAgICAvLyB0cmFuc2Zvcm1hdGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBTdGFja1Ns
b3RzIGFycmF5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggU3RhY2tTbG90IGFueQorICAgIC8vIG9mZnNl
dC1mcm9tLUZQIHJlZmVycyB0by4KKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2Rl
KSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9y
IChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtp
bmQoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAgICAg
ICAgICAgYXJnID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUklu
Zm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZz
ZXQoKSArIGFyZy5zdGFja1Nsb3QoKS0+b2Zmc2V0RnJvbUZQKCkpOworICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAg
ICAgICAgICAgICAgYXJnID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgVG1w
KEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFy
Zy5vZmZzZXQoKSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisK
K30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFsbG9jYXRlU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQWxs
b2NhdGVTdGFja19oCisjZGVmaW5lIEFpckFsbG9jYXRlU3RhY2tfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBDb2RlOworCisvLyBUaGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBv
biB0aGUgc3RhY2suIEl0IGZpcnN0IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgK
Ky8vIG9yZGVyIGFuZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQu
CisKK3ZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJBbGxv
Y2F0ZVN0YWNrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJB
aXJBcmcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgi
CisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAg
ICAgb3V0LnByaW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVG1w
OgorICAgICAgICBvdXQucHJpbnQodG1wKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
bW06CisgICAgICAgIG91dC5wcmludCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBtX29mZnNldCk7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChvZmZzZXQoKSkK
KyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIs
IGJhc2UoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5kZXg6CisgICAgICAg
IGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAg
IG91dC5wcmludCgiKCIsIGJhc2UoKSwgIiwiLCBpbmRleCgpKTsKKyAgICAgICAgaWYgKHNjYWxl
KCkgIT0gMSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOworICAgICAgICBv
dXQucHJpbnQoIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAg
IGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAg
IG91dC5wcmludCgiKCIsIHBvaW50ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAg
ICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoY2FsbEFyZyki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgb3V0LnByaW50
KGFzUmVsYXRpb25hbENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVz
Q29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVzdWx0Q29uZGl0aW9uKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAo
c3BlY2lhbCgpKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJBcmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckFyZy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBcmcuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFyZ19oCisjZGVmaW5l
IEFpckFyZ19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisj
aW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTcGVjaWFsOworY2xh
c3MgU3RhY2tTbG90OworCisvLyBUaGlzIGNsYXNzIG5hbWUgaXMgYWxzbyBpbnRlbnRpb25hbGx5
IHRlcnNlIGJlY2F1c2Ugd2Ugd2lsbCBzYXkgaXQgYSBsb3QuIFlvdSdsbCBzZWUgY29kZSBsaWtl
CisvLyBJbnN0KC4uLiwgQXJnOjppbW0oNSksIEFyZzo6YWRkcih0aGluZywgYmxhaCksIC4uLikK
K2NsYXNzIEFyZyB7CitwdWJsaWM6CisgICAgLy8gVGhlc2UgZW51bSBtZW1iZXJzIGFyZSBpbnRl
bnRpb25hbGx5IHRlcnNlIGJlY2F1c2Ugd2UgaGF2ZSB0byBtZW50aW9uIHRoZW0gYSBsb3QuCisg
ICAgZW51bSBLaW5kIDogaW50OF90IHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgVG1wLAor
ICAgICAgICBJbW0sCisgICAgICAgIEltbTY0LAorICAgICAgICBBZGRyLAorICAgICAgICBTdGFj
aywKKyAgICAgICAgQ2FsbEFyZywKKyAgICAgICAgSW5kZXgsCisgICAgICAgIFJlbENvbmQsCisg
ICAgICAgIFJlc0NvbmQsCisgICAgICAgIFNwZWNpYWwKKyAgICB9OworCisgICAgZW51bSBSb2xl
IDogaW50OF90IHsKKyAgICAgICAgVXNlLAorICAgICAgICBEZWYsCisgICAgICAgIFVzZURlZgor
ICAgIH07CisKKyAgICBlbnVtIFR5cGUgOiBpbnQ4X3QgeworICAgICAgICBHUCwKKyAgICAgICAg
RlAKKyAgICB9OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKKwor
ICAgIHN0YXRpYyBib29sIGlzVXNlKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
cm9sZSkgeworICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xlIHJv
bGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNl
IFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgc3RhdGljIFR5cGUgdHlwZUZvckIzVHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIElu
dDMyOgorICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAg
ICBjYXNlIERvdWJsZToKKyAgICAgICAgICAgIHJldHVybiBGUDsKKyAgICAgICAgfQorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEdQOworICAgIH0KKworICAg
IEFyZygpCisgICAgICAgIDogbV9raW5kKEludmFsaWQpCisgICAgeworICAgIH0KKworICAgIEFy
ZyhBaXI6OlRtcCB0bXApCisgICAgICAgIDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2Uo
dG1wKQorICAgIHsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsK
KyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW02NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAg
ICAgcmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIEFyZyBhZGRyKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0g
MCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1
bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBBZGRyOworICAgICAgICByZXN1bHQubV9iYXNl
ID0gYmFzZTsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1
ZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAg
ICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3
aXNlX2Nhc3Q8aW50cHRyX3Q+KHZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZz
ZXQ7IC8vIEkga25vdywgeXVjay4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBzdGF0aWMgQXJnIGNhbGxBcmcoaW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBBcmcg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzVmFsaWRTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAg
ICAgIGNhc2UgNDoKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAg
eworICAgICAgICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAg
IHJldHVybiAwOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAg
ICAgY2FzZSA0OgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAg
ICAgICAgIHJldHVybiAzOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIHN0YXRpYyBBcmcgaW5kZXgoQWlyOjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2ln
bmVkIHNjYWxlID0gMSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGJhc2UuaXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFT
U0VSVChpc1ZhbGlkU2NhbGUoc2NhbGUpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAg
cmVzdWx0Lm1fa2luZCA9IEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAg
ICAgICAgcmVzdWx0Lm1faW5kZXggPSBpbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBz
dGF0aWNfY2FzdDxpbnQzMl90PihzY2FsZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9m
ZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJl
bENvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQorICAg
IHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7
CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJl
c3VsdENvbmRpdGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gUmVzQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
Y29uZGl0aW9uOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBB
cmcgc3BlY2lhbChBaXI6OlNwZWNpYWwqIHNwZWNpYWwpCisgICAgeworICAgICAgICBBcmcgcmVz
dWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1f
b2Zmc2V0ID0gYml0d2lzZV9jYXN0PGludHB0cl90PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAor
ICAgICAgICAgICAgJiYgbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9i
YXNlID09IG90aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4CisgICAgICAgICAgICAmJiBtX3NjYWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0
b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtp
bmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBi
b29sIGlzVG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOwor
ICAgIH0KKworICAgIGJvb2wgaXNJbW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtp
bmQoKSA9PSBJbW07CisgICAgfQorCisgICAgYm9vbCBpc0ltbTY0KCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gSW1tNjQ7CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRyOworICAgIH0KKwor
ICAgIGJvb2wgaXNTdGFjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09
IFN0YWNrOworICAgIH0KKworICAgIGJvb2wgaXNDYWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gQ2FsbEFyZzsKKyAgICB9CisKKyAgICBib29sIGlzSW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisK
KyAgICBib29sIGlzUmVsQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgp
ID09IFJlbENvbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZXNDb25kOworICAgIH0KKworICAgIGJvb2wgaXNT
cGVjaWFsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsK
KyAgICB9CisKKyAgICBib29sIGlzQWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGlzVG1wKCkgfHwgaXNTdGFjaygpOworICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBt
X2Jhc2U7CisgICAgfQorCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IEltbSB8fCBraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1
cm4gbV9vZmZzZXQ7CisgICAgfQorCisgICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gYml0
d2lzZV9jYXN0PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9
CisKKyAgICBBaXI6OlRtcCBiYXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5k
KCkgPT0gQWRkciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9iYXNlOwor
ICAgIH0KKworICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRj
aCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAg
ICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisgICAgCisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGtpbmQoKSA9PSBTdGFjaykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxpbnQzMl90PihtX3NjYWxlKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8
IGtpbmQoKSA9PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCk7CisgICAgfQorCisgICAgU3RhY2tTbG90KiBz
dGFja1Nsb3QoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RhY2tTbG90Kj4obV9vZmZzZXQpOworICAg
IH0KKworICAgIEFpcjo6VG1wIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChr
aW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBzY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IElu
ZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fc2NhbGU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9n
U2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOwor
ICAgIH0KKworICAgIEFpcjo6U3BlY2lhbCogc3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAg
ICBBU1NFUlQoa2luZCgpID09IFNwZWNpYWwpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PEFpcjo6U3BlY2lhbCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBib29sIGlzR1BUbXAoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOworICAg
IH0KKworICAgIGJvb2wgaXNGUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNU
bXAoKSAmJiB0bXAoKS5pc0ZQKCk7CisgICAgfQorICAgIAorICAgIC8vIFRlbGxzIHVzIGlmIHRo
aXMgQXJnIGNhbiBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEdQIHZhbHVl
LgorICAgIGJvb2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkg
eworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBJbW02NDoKKyAgICAgICAgY2FzZSBB
ZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBj
YXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25k
OgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgY2FzZSBUbXA6CisgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICBjYXNl
IEludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRo
YXQgcmVxdWlyZXMgYSBGUCB2YWx1ZS4KKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2Ug
UmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6Cisg
ICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
Y2FzZSBBZGRyOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAg
ICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW1tNjQ6IC8vIFllcywgd2UgYWxsb3cg
SW1tNjQgYXMgYSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5n
IHN0YWNrbWFwcy4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoK
KyAgICAgICAgICAgIHJldHVybiBpc0ZQVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBi
b29sIGhhc1R5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAg
ICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBUbXA6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUgdHlwZSBp
cyBhbWJpZ3VvdXMgZm9yIHNvbWUgYXJnIGtpbmRzLiBDYWxsIHdpdGggY2FyZS4KKyAgICBUeXBl
IHR5cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1AoKSA/IEdQIDogRlA7Cisg
ICAgfQorCisgICAgYm9vbCBpc1R5cGUoVHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAg
c3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4gaXNH
UCgpOworICAgICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIGlzRlAoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncHIoKTsKKyAgICB9CisKKyAgICBi
b29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgp
LmlzRlBSKCk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gdG1wKCkuZnByKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNSZWcoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9
CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5yZWco
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiB0bXAoKS5ncFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBU
bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgp
OworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiB0bXAoKS50bXBJbmRleCgpOworICAgIH0KKworICAgIEFyZyB3aXRoT2Zmc2V0KGlu
dDMyX3QgYWRkaXRpb25hbE9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzT2Zm
c2V0KCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIGlmIChzdW1PdmVyZmxv
d3M8aW50MzJfdD4ob2Zmc2V0KCksIGFkZGl0aW9uYWxPZmZzZXQpKQorICAgICAgICAgICAgcmV0
dXJuIEFyZygpOworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6
CisgICAgICAgICAgICByZXR1cm4gYWRkcihiYXNlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9m
ZnNldCk7CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICByZXR1cm4gc3RhY2soc3Rh
Y2tTbG90KCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgQ2Fs
bEFyZzoKKyAgICAgICAgICAgIHJldHVybiBjYWxsQXJnKG9mZnNldCgpICsgYWRkaXRpb25hbE9m
ZnNldCk7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgoYmFz
ZSgpLCBpbmRleCgpLCBzY2FsZSgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAg
Y2FzZSBUbXA6CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNl
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAg
ZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4g
YWRkcmVzcyBhcmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCisgICAgLy8g
dG1wcyBhbmQgbmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgorICAgIC8vCisgICAg
Ly8gbW92ICVyYXgsICglcmN4KQorICAgIC8vCisgICAgLy8gVGhpcyBkZWZzICglcmN4KSBidXQg
dXNlcyAlcmN4LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JF
YWNoVG1wKFJvbGUgYXJnUm9sZSwgVHlwZSBhcmdUeXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6Cisg
ICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2Us
IFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAg
ICAgICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBmdW5jdG9yKG1f
aW5kZXgsIFVzZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tMzIgYXNUcnVzdGVkSW1tMzIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzSW1tKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0z
MihzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworI2lmIFVTRShKU1ZB
TFVFNjQpCisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NCBhc1RydXN0ZWRJbW02NCgp
IGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW02NCgpKTsKKyAgICAgICAgcmV0dXJu
IE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQodmFsdWUoKSk7CisgICAgfQorI2VuZGlmCisK
KyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciBhc1RydXN0ZWRJbW1QdHIoKSBjb25z
dAorICAgIHsKKyAgICAgICAgaWYgKGlzNjRCaXQoKSkKKyAgICAgICAgICAgIEFTU0VSVChpc0lt
bTY0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAg
ICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyVmFsdWUoKSk7
CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChpc0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlcjo6QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zm
c2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRl
eCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0
dXJuIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCks
IG1faW5kZXguZ3ByKCksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2Nh
bGUoKSksCisgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAg
IH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25h
bENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOwor
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25k
aXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29u
ZGl0aW9uIGFzUmVzdWx0Q29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c1Jlc0NvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6
UmVzdWx0Q29uZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KQorICAgICAgICA6IG1fYmFzZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7Cisg
ICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgewor
ICAgICAgICByZXR1cm4gKnRoaXMgPT0gQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRo
aXMgcmVhbGx5IGRvZXNuJ3QgaGF2ZSB0byBiZSB0aGF0IGdyZWF0LgorICAgICAgICByZXR1cm4g
V1RGOjpJbnRIYXNoPGludDY0X3Q+OjpoYXNoKG1fb2Zmc2V0KSArIG1fa2luZCArIG1fc2NhbGUg
KyBtX2Jhc2UuaGFzaCgpICsKKyAgICAgICAgICAgIG1faW5kZXguaGFzaCgpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBpbnQ2NF90IG1fb2Zmc2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsg
SW52YWxpZCB9OworICAgIGludDMyX3QgbV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jh
c2U7CisgICAgQWlyOjpUbXAgbV9pbmRleDsKK307CisKK3N0cnVjdCBBcmdIYXNoIHsKKyAgICBz
dGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBBcmcmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsg
fQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IEFyZyYgYSwgY29uc3QgQXJnJiBiKSB7IHJl
dHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0
eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVs
dEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpBaXI6OkFyZz4g
eworICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpBcmdIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hU
cmFpdHM8SlNDOjpCMzo6QWlyOjpBcmc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6
OkFpcjo6QXJnPiB7CisgICAgLy8gQmVjYXVzZSBtX3NjYWxlIGlzIDEgaW4gdGhlIGVtcHR5IHZh
bHVlLgorICAgIHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEFpckFyZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QmFzaWNCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCisjaW5jbHVkZSA8d3RmL0xp
c3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworY29uc3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9ICIjIjsKKwor
Ym9vbCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAg
ICByZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNp
Y0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1
cm4gQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Js
b2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8p
Cit7CisgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOwor
fQorCit2b2lkIEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBvdXQucHJpbnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6
ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwg
KnRoaXMsICI6IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOworICAgIGlmIChw
cmVkZWNlc3NvcnMoKS5zaXplKCkpCisgICAgICAgIG91dC5wcmludCgiICBQcmVkZWNlc3NvcnM6
ICIsIHBvaW50ZXJMaXN0RHVtcChwcmVkZWNlc3NvcnMoKSksICJcbiIpOworICAgIGZvciAoY29u
c3QgSW5zdCYgaW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbnN0LCAi
XG4iKTsKKyAgICBpZiAoc3VjY2Vzc29ycygpLnNpemUoKSkKKyAgICAgICAgb3V0LnByaW50KCIg
IFN1Y2Nlc3NvcnM6ICIsIGxpc3REdW1wKHN1Y2Nlc3NvcnMoKSksICJcbiIpOworfQorCitCYXNp
Y0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAg
IDogbV9pbmRleChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Js
b2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJCYXNpY0Jsb2NrX2gKKyNk
ZWZpbmUgQWlyQmFzaWNCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5j
bHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKK2NsYXNzIEluc2VydGlvblNldDsKKwor
Y2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnN0PiBJbnN0
TGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0
OworICAgIHR5cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsK
KworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAor
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQorICAg
IEluc3RMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQor
ICAgIEluc3RMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9Cisg
ICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0
cy5iZWdpbigpOyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIG1faW5zdHMuZW5kKCk7IH0KKworICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRl
eCkgY29uc3QgeyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3Qg
aW5kZXgpIHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0
KCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyBy
ZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+Cisg
ICAgdm9pZCBhcHBlbmRJbnN0KEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5h
cHBlbmQoc3RkOjpmb3J3YXJkPEluc3Q+KGluc3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJn
dW1lbnRzKQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8
QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNl
IGlzIHRoZSBjYXNlIHRvIHdoaWNoIHRoZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2Fz
ZS4gVGhlICIxIiBjYXNlIGlzIHRoZQorICAgIC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0
byByZXByZXNlbnQgdGhlIGZhbGwtdGhyb3VnaCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAg
ICB1bnNpZ25lZCBudW1TdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNp
emUoKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBGcmVxdWVudGVkQmxvY2sm
IHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsg
fQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBt
X3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4g
bV9zdWNjZXNzb3JzOyB9CisKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAg
QmFzaWNCbG9jayomIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBzdWNj
ZXNzb3IoaW5kZXgpLmJsb2NrKCk7IH0KKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxv
Y2ssIFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpCisgICAgeworICAgICAgICByZXR1
cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nl
c3NvcnMpOworICAgIH0KKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ss
IGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBT
dWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMpOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bVBy
ZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAg
IEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5z
aWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0
IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNl
c3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1f
cHJlZGVjZXNzb3JzOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsK
KyAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxh
Y2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisgICAgZnJp
ZW5kIGNsYXNzIEluc2VydGlvblNldDsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGlu
ZGV4LCBkb3VibGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5z
dExpc3QgbV9pbnN0czsKKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBQcmVk
ZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsK
KworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9j
a0R1bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1w
KG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitp
bmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2Nr
KQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxvY2spOworfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQWlyQmFzaWNCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgpCit7CisgICAg
bV9jbG9iYmVyZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgIG1fY2xv
YmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICBt
X2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lz
dGVycygpKTsKKyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVycygpKTsKK30KKworQ0NhbGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKK3sK
K30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2Nv
cGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGNhbGxi
YWNrKGluc3QuYXJnc1sxXSwgQXJnOjpVc2UsIEFyZzo6R1ApOworICAgIAorICAgIGZvciAodW5z
aWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRm9y
IHRoZSB0eXBlLCB3ZSBjYW4ganVzdCBxdWVyeSB0aGUgYXJnJ3MgdHlwZS4gVGhlIGFyZyB3aWxs
IGhhdmUgYSB0eXBlLCBiZWNhdXNlIHdlCisgICAgICAgIC8vIHJlcXVpcmUgdGhlc2UgYXJncyB0
byBiZSBhcmd1bWVudCByZWdpc3RlcnMuCisgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1tpXSwg
QXJnOjpVc2UsIGluc3QuYXJnc1tpXS50eXBlKCkpOworICAgIH0KK30KKworYm9vbCBDQ2FsbFNw
ZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8
IDIpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtp
bmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAgIGlmIChpczMyQml0KCkpCisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02
NDoKKyAgICAgICAgaWYgKGlzNjRCaXQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAg
ICBjYXNlIEFyZzo6U3RhY2s6CisgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAo
IWluc3QuYXJnc1sxXS5pc0dQKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYg
KCFpbnN0LmFyZ3NbaV0uaXNSZWcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBpZiAoaW5zdC5hcmdzW2ldID09IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQ2Fs
bFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICAv
LyBBcmcgMSBjYW4gYmUgYSBzdGFjayBhZGRyZXNzIGZvciBzdXJlLgorICAgIGlmIChhcmdJbmRl
eCA9PSAxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBS
ZWdpc3RlclNldCYpCit7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6Omdl
bmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYp
Cit7CisgICAgc3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6Oklt
bToKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGppdC5tb3ZlKGluc3QuYXJnc1sxXS5h
c1RydXN0ZWRJbW1QdHIoKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmNhbGwoc2Ny
YXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAg
ICAgaml0LmNhbGwoaW5zdC5hcmdzWzFdLmdwcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBBcmc6OkFkZHI6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5hc0FkZHJlc3MoKSk7
CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gQ0NhbGxIZWxw
ZXJzOjpKdW1wKCk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBDQ2FsbFNwZWNpYWw6OmV4dHJh
Q2xvYmJlcmVkUmVncyhJbnN0JikKK3sKKyAgICByZXR1cm4gbV9jbG9iYmVyZWRSZWdzOworfQor
Cit2b2lkIENDYWxsU3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoIkNDYWxsIik7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkZWVwRHVt
cEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImZ1bmN0aW9u
IGNhbGwgdGhhdCB1c2VzIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4iKTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVj
aWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisj
ZGVmaW5lIEFpckNDYWxsU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQWlyU3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKKy8vIFVzZSB0aGlzIHNwZWNpYWwgZm9yIGNvbnN0cnVjdGluZyBhIEMgY2Fs
bC4gQXJnIDAgaXMgb2YgY291cnNlIGEgU3BlY2lhbCBhcmcgdGhhdCByZWZlcnMgdG8gdGhlCisv
LyBDQ2FsbFNwZWNpYWwgb2JqZWN0LiBBcmcgMSBpcyB0aGUgY2FsbGVlLCBhbmQgaXQgY2FuIGJl
IGFuIEltbVB0ciwgYSByZWdpc3Rlciwgb3IgYW4gYWRkcmVzcy4gVGhlCisvLyByZW1haW5pbmcg
YXJncyBhcmUganVzdCB0aGUgc2V0IG9mIGFyZ3VtZW50IHJlZ2lzdGVycyB1c2VkIGJ5IHRoaXMg
Y2FsbC4gRm9yIGFyZ3VtZW50cyB0aGF0IGdvIHRvCisvLyB0aGUgc3RhY2ssIHlvdSBoYXZlIHRv
IGRvIHRoZSBncnVudCB3b3JrIG9mIGRvaW5nIHRob3NlIHN0YWNrIHN0b3Jlcy4gSW4gZmFjdCwg
dGhlIG9ubHkgcmVhc29uIHdoeQorLy8gd2Ugc3BlY2lmeSB0aGUgYXJndW1lbnQgcmVnaXN0ZXJz
IGFzIGFyZ3VtZW50cyB0byBhIGNhbGwgaXMgc28gdGhhdCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMg
Y2FuIHNlZQorLy8gdGhhdCB0aGV5IGdldCB1c2VkIGhlcmUuIEl0IHdvdWxkIGJlIHdyb25nIHRv
IGF1dG9tYWdpY2FsbHkgcmVwb3J0IGFsbCBhcmd1bWVudCByZWdpc3RlcnMgYXMgYmVpbmcKKy8v
IHVzZWQgYmVjYXVzZSBpZiB3ZSBoYWQgYSBjYWxsIHRoYXQgZGlkbid0IHBhc3MgdGhlbSwgdGhl
biB0aGV5J2QgYXBwZWFyIHRvIGJlIGxpdmUgdW50aWwgc29tZQorLy8gY2xvYmJlciBwb2ludCBv
ciB0aGUgcHJvbG9ndWUsIHdoaWNoZXZlciBoYXBwZW5lZCBzb29uZXIuCisKK2NsYXNzIENDYWxs
U3BlY2lhbCA6IHB1YmxpYyBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDQ2FsbFNwZWNpYWwoKTsK
KyAgICB+Q0NhbGxTcGVjaWFsKCk7CisKKyAgICAvLyBZb3UgY2Fubm90IHVzZSB0aGlzIHJlZ2lz
dGVyIHRvIHBhc3MgYXJndW1lbnRzLiBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIHJlZ2lz
dGVyIGlzIG5vdAorICAgIC8vIHVzZWQgZm9yIGFyZ3VtZW50cyBpbiB0aGUgQyBjYWxsaW5nIGNv
bnZlbnRpb24uIEJ5IHRoZSB3YXksIHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYXVzZXMK
KyAgICAvLyB0aGlzIHNwZWNpYWwgdG8gYmUgc3BlY2lmaWMgdG8gQyBjYWxscy4KKyAgICBzdGF0
aWMgY29uc3QgR1BSUmVnIHNjcmF0Y2hSZWdpc3RlciA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJk
YTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKElu
c3QmKSBvdmVycmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJ
bmRleCkgb3ZlcnJpZGU7CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25z
dCBSZWdpc3RlclNldCYpIG92ZXJyaWRlOworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0
ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKyAg
ICBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSBvdmVycmlkZTsK
KworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2
b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIFJlZ2lzdGVyU2V0IG1fY2xvYmJlcmVkUmVnczsKK307CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJDQ2FsbFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQ29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ0NhbGxTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2Rl
KCkKKyAgICA6IG1fbGFzdFBoYXNlTmFtZSgiaW5pdGlhbCIpCit7Cit9CisKK0NvZGU6On5Db2Rl
KCkKK3sKK30KKworQmFzaWNCbG9jayogQ29kZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSkK
K3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2so
bV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBi
bG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAg
cmV0dXJuIHJlc3VsdDsKK30KKworU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QodW5zaWdu
ZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQor
eworICAgIHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChieXRl
U2l6ZSwgbV9zdGFja1Nsb3RzLnNpemUoKSwga2luZCwgdmFsdWUpKTsKKyAgICBTdGFja1Nsb3Qq
IHJlc3VsdCA9IHNsb3QuZ2V0KCk7CisgICAgbV9zdGFja1Nsb3RzLmFwcGVuZChXVEY6Om1vdmUo
c2xvdCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NwZWNpYWwqIENvZGU6OmFkZFNwZWNp
YWwoc3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+IHNwZWNpYWwpCit7CisgICAgU3BlY2lhbCogcmVz
dWx0ID0gc3BlY2lhbC5nZXQoKTsKKyAgICBtX3NwZWNpYWxzLmFwcGVuZChXVEY6Om1vdmUoc3Bl
Y2lhbCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NDYWxsU3BlY2lhbCogQ29kZTo6Y0Nh
bGxTcGVjaWFsKCkKK3sKKyAgICBpZiAoIW1fY0NhbGxTcGVjaWFsKSB7CisgICAgICAgIG1fY0Nh
bGxTcGVjaWFsID0gc3RhdGljX2Nhc3Q8Q0NhbGxTcGVjaWFsKj4oCisgICAgICAgICAgICBhZGRT
cGVjaWFsKHN0ZDo6bWFrZV91bmlxdWU8Q0NhbGxTcGVjaWFsPigpKSk7CisgICAgfQorCisgICAg
cmV0dXJuIG1fY0NhbGxTcGVjaWFsOworfQorCit2b2lkIENvZGU6OnJlc2V0UmVhY2hhYmlsaXR5
KCkKK3sKKyAgICBCMzo6cmVzZXRSZWFjaGFiaWxpdHkobV9ibG9ja3MpOworfQorCit2b2lkIENv
ZGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworICAg
IGlmIChzdGFja1Nsb3RzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xv
dHM6XG4iKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisg
ICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBwb2ludGVyRHVtcChzbG90KSwgIjogIiwgZGVl
cER1bXAoc2xvdCksICJcbiIpOworICAgIH0KKyAgICBpZiAoc3BlY2lhbHMoKS5zaXplKCkpIHsK
KyAgICAgICAgb3V0LnByaW50KCJTcGVjaWFsczpcbiIpOworICAgICAgICBmb3IgKFNwZWNpYWwq
IHNwZWNpYWwgOiBzcGVjaWFscygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgcG9p
bnRlckR1bXAoc3BlY2lhbCksICI6ICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsKKyAgICB9
CisgICAgaWYgKG1fZnJhbWVTaXplKQorICAgICAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIs
IG1fZnJhbWVTaXplLCAiXG4iKTsKKyAgICBpZiAobV9jYWxsQXJnQXJlYVNpemUpCisgICAgICAg
IG91dC5wcmludCgiQ2FsbCBhcmcgYXJlYSBzaXplOiAiLCBtX2NhbGxBcmdBcmVhU2l6ZSwgIlxu
Iik7CisgICAgaWYgKG1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5zaXplKCkpCisgICAgICAgIG91dC5w
cmludCgiQ2FsbGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOworfQor
Cit1bnNpZ25lZCBDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25z
dAoreworICAgIHdoaWxlIChpbmRleCA8IHNpemUoKSAmJiAhYXQoaW5kZXgpKQorICAgICAgICBp
bmRleCsrOworICAgIHJldHVybiBpbmRleDsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZE5leHRC
bG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBmaW5kRmlyc3RC
bG9ja0luZGV4KGluZGV4ICsgMSk7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmZpbmROZXh0Qmxv
Y2soQmFzaWNCbG9jayogYmxvY2spIGNvbnN0Cit7CisgICAgcmV0dXJuIGF0KGZpbmROZXh0Qmxv
Y2tJbmRleChibG9jay0+aW5kZXgoKSkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxMiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNv
ZGVfaAorI2RlZmluZSBBaXJDb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJBaXJCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkFp
clN0YWNrU2xvdC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCisjaW5jbHVk
ZSAiU3RhY2tBbGlnbm1lbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIFByb2NlZHVyZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENDYWxsU3BlY2lh
bDsKKworLy8gVGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0
YWwuIEl0IHJlcXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0
ZWQgbWFjaGluZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9m
IG1hY2hpbmUgY29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBD
b2RlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJh
c2ljQmxvY2sqIGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIFN0YWNr
U2xvdCogYWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFj
a1Nsb3RWYWx1ZSogPSBudWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1
bmlxdWVfcHRyPFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5l
ZWQgdG8gbWFrZSBhIEMgY2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxsU3BlY2lhbCgpOwor
CisgICAgVG1wIG5ld1RtcChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpn
cFRtcEZvckluZGV4KG1fbnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAg
ICAgICAgICByZXR1cm4gVG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBzKyspOworICAgICAg
ICB9CisgICAgfQorCisgICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUgdHlwZSkKKyAgICB7
CisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAg
ICAgICByZXR1cm4gbV9udW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAg
ICAgIHJldHVybiBtX251bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVk
IGNhbGxBcmdBcmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9CisK
KyAgICAvLyBZb3UgY2FuIGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHRvIGZvcmNl
IGEgbWluaW11bSBjYWxsIGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1ZXN0Q2FsbEFyZ0Fy
ZWFTaXplKHVuc2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSA9
IHN0ZDo6bWF4KAorICAgICAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUsCisgICAgICAgICAgICBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgc2l6ZSkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUoKSBj
b25zdCB7IHJldHVybiBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8gT25seSBwaGFzZXMgdGhhdCBk
byBzdGFjayBhbGxvY2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBDdXJyZW50bHksIG9u
bHkKKyAgICAvLyBBaXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRoaXMuCisgICAgdm9pZCBzZXRG
cmFtZVNpemUodW5zaWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAgICAgICAgbV9mcmFtZVNpemUg
PSBmcmFtZVNpemU7CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNh
dmVSZWdpc3RlcnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKworICAgIC8v
IFJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVucmVhY2hhYmxlIGJsb2Nrcy4K
KyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nr
cy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gbV9ibG9ja3NbaW5kZXhdLmdldCgpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3Jb
XSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAvLyBG
aW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5k
IGluZGV4JyA+PSBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2ln
bmVkIGluZGV4KSBjb25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3Vj
aCB0aGF0IGF0KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID4gaW5kZXguCisgICAgdW5zaWdu
ZWQgZmluZE5leHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIEJhc2lj
QmxvY2sqIGZpbmROZXh0QmxvY2soQmFzaWNCbG9jayopIGNvbnN0OworCisgICAgY2xhc3MgaXRl
cmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBt
X2NvZGUobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAg
ICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBDb2RlJiBjb2RlLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICAgICAgICAgIDogbV9jb2RlKCZjb2RlKQorICAgICAgICAgICAgLCBtX2luZGV4KG1f
Y29kZS0+ZmluZEZpcnN0QmxvY2tJbmRleChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBtX2NvZGUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0
b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gbV9jb2Rl
LT5maW5kRmlyc3RCbG9ja0luZGV4KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNv
bnN0IENvZGUqIG1fY29kZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisg
ICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0K
KyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgp
KTsgfQorCisgICAgY2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAg
ICAgICAgU3RhY2tTbG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAg
IDogbV9jb2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAg
ICAgICBTdGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUu
bV9zdGFja1Nsb3RzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9y
W10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3Io
KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAg
ICAgLCBtX2luZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGl0ZXJhdG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNp
Z25lZCBpbmRleCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikK
KyAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAg
ICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFN0YWNr
U2xvdHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2lu
ZGV4OworICAgICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBjb25zdCBDb2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9u
IHN0YWNrU2xvdHMoKSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVjdGlvbigqdGhpcyk7
IH0KKyAgICAKKyAgICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAg
ICAgICAgU3BlY2lhbHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6
IG1fY29kZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBz
aXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6ZSgpOyB9CisgICAgICAg
IFNwZWNpYWwqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVj
aWFsc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgU3BlY2lhbCogb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRl
cmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAg
ICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0
b3IoY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkK
KyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAg
ICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQor
CisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24q
IG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07
CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhp
cywgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
KnRoaXMsIHNpemUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1f
Y29kZTsKKyAgICB9OworCisgICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3Qg
eyByZXR1cm4gU3BlY2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAorICAgIC8vIFRoZSBu
YW1lIGhhcyB0byBiZSBhIHN0cmluZyBsaXRlcmFsLCBzaW5jZSB3ZSBkb24ndCBkbyBhbnkgbWVt
b3J5IG1hbmFnZW1lbnQgZm9yIHRoZSBzdHJpbmcuCisgICAgdm9pZCBzZXRMYXN0UGhhc2VOYW1l
KGNvbnN0IGNoYXIqIG5hbWUpCisgICAgeworICAgICAgICBtX2xhc3RQaGFzZU5hbWUgPSBuYW1l
OworICAgIH0KKworICAgIGNvbnN0IGNoYXIqIGxhc3RQaGFzZU5hbWUoKSBjb25zdCB7IHJldHVy
biBtX2xhc3RQaGFzZU5hbWU7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNwZWNp
YWw+PiBtX3NwZWNpYWxzOworICAgIENDYWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNpYWwgeyBudWxs
cHRyIH07CisgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9u
dW1GUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9mcmFtZVNpemUgeyAwIH07CisgICAgdW5z
aWduZWQgbV9jYWxsQXJnQXJlYVNpemUgeyAwIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3Qg
bV9jYWxsZWVTYXZlUmVnaXN0ZXJzOworICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsK
K307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUg
QWlyRnJlcXVlbnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJC
M0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVy
aWNGcmVxdWVudGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQWlyRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgiCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAi
QWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIK
KyNpbmNsdWRlICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVk
ZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgZ2VuZXJhdGUoQ29k
ZSYgY29kZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IHRo
ZSBpbmNvbWluZyBjb2RlIHRvIGhhdmUgcHJlZGVjZXNzb3JzIGNvbXB1dGVkLgorICAgIGNvZGUu
cmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQor
ICAgICAgICB2YWxpZGF0ZShjb2RlKTsKKworICAgIC8vIElmIHdlJ3JlIGRvaW5nIHN1cGVyIHZl
cmJvc2UgZHVtcGluZywgdGhlIHBoYXNlIHNjb3BlIG9mIGFueSBwaGFzZSB3aWxsIGFscmVhZHkg
ZG8gYSBkdW1wLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hvdWxkRHVtcElSQXRFYWNo
UGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOworICAgICAgICBk
YXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgcnVuIG91ciBv
cHRpbWl6YXRpb25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCisgICAgLy8gRklYTUU6IEFkZCBBaXIg
b3B0aW1pemF0aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwNDU2CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHdvdWxkIGhhdmUgYSByZWFs
IHJlZ2lzdGVyIGFsbG9jYXRvci4gVGhlbiwgd2UgY291bGQgdXNlIHNwaWxsRXZlcnl0aGluZygp
CisgICAgLy8gaW4gcGxhY2Ugb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBvbmx5IGZvciB0ZXN0
aW5nLgorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUwNDU3CisgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOworCisgICAgLy8gUHJpb3IgdG8g
dGhpcyBwb2ludCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1h
a2VzIGl0IGV4cGxpY2l0LiBJdCBhbHNvCisgICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlm
eSB3aGljaCBjYWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCisgICAgaGFu
ZGxlQ2FsbGVlU2F2ZXMoY29kZSk7CisKKyAgICAvLyBUaGlzIHR1cm5zIGFsbCBTdGFjayBhbmQg
Q2FsbEFyZyBBcmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNlIHRoZSBmcmFtZSBwb2ludGVyLiBJ
dCBkb2VzCisgICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxsb2NhdGluZyBzdGFjayBzbG90cy4g
SXQgc2hvdWxkIGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9wdGltYWwsIHNvIHdlCisgICAgLy8g
c2hvdWxkbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2ZXJ5IG11Y2guCisgICAgYWxsb2Nh
dGVTdGFjayhjb2RlKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGhhdmUgYSBj
b2RlIGxheW91dCBvcHRpbWl6YXRpb24gaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDc4CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIGxh
dGUgbGl2ZW5lc3MgYW5hbHlzaXMgb3ZlciByZWdpc3RlcnMgdG8gZmlsbCBpbiB0aGUKKyAgICAv
LyBTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUxMQorCisgICAgaWYgKHNob3VsZFZhbGlkYXRl
SVIoKSkKKyAgICAgICAgdmFsaWRhdGUoY29kZSk7CisKKyAgICAvLyBEbyBhIGZpbmFsIGR1bXAg
b2YgQWlyLiBOb3RlIHRoYXQgd2UgaGF2ZSB0byBkbyB0aGlzIGV2ZW4gaWYgd2UgYXJlIGRvaW5n
IHBlci1waGFzZSBkdW1waW5nLAorICAgIC8vIHNpbmNlIHRoZSBmaW5hbCBnZW5lcmF0aW9uIGlz
IG5vdCBhIHBoYXNlLgorICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9n
KCJBaXIgYWZ0ZXIgIiwgY29kZS5sYXN0UGhhc2VOYW1lKCksICIsIGJlZm9yZSBnZW5lcmF0aW9u
OlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gQW5kIG5vdywg
d2UgZ2VuZXJhdGUgY29kZS4KKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBq
aXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwg
TWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIEdlbmVyYXRpb25D
b250ZXh0IGNvbnRleHQ7CisgICAgY29udGV4dC5jb2RlID0gJmNvZGU7CisgICAgSW5kZXhNYXA8
QmFzaWNCbG9jaywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tMYWJlbHMoY29kZS5zaXplKCkp
OworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2Nr
SnVtcHMoY29kZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6
Okp1bXAganVtcCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAgICAgIGlmIChibG9ja0xhYmVs
c1t0YXJnZXRdLmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAubGlua1RvKGJsb2NrTGFiZWxz
W3RhcmdldF0sICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgYmxvY2tKdW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAgICB9OworCisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxvY2tKdW1wc1tibG9ja10ubGlu
aygmaml0KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQs
IGNvbnRleHQpOworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5pc1NldCgp
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9wY29kZSA9PSBKdW1w
CisgICAgICAgICAgICAmJiBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkgPT0gY29kZS5maW5kTmV4
dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChibG9j
ay0+bGFzdCgpLm9wY29kZSA9PSBSZXQpIHsKKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBk
b24ndCByZXByZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBzbyB3ZSBu
ZWVkIHRvCisgICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCisgICAgICAgICAgICBq
aXQuZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXAganVtcCA9IGJsb2NrLT5sYXN0KCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKQorICAgICAgICAgICAganVtcCA9IGluc3Qu
Z2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAgc3dpdGNoIChibG9jay0+bnVtU3VjY2Vz
c29ycygpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIEFTU0VSVCghanVtcC5pc1Nl
dCgpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBs
aW5rKGp1bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3VjY2Vzc29y
QmxvY2soMCkpOworICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3JCbG9jaygxKSAhPSBj
b2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgICAgIGxpbmsoaml0Lmp1bXAo
KSwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvJiBsYXRl
UGF0aCA6IGNvbnRleHQubGF0ZVBhdGhzKQorICAgICAgICBsYXRlUGF0aC0+cnVuKGppdCwgY29u
dGV4dCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckdl
bmVyYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJH
ZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5lcmF0ZV9o
CisjZGVmaW5lIEFpckdlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0
IGhhc24ndCBoYWQgYW55IHN0YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlvbmFsbHkgaGFzbid0IGhh
ZCBhbnkKKy8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIGRvZXMgYm90aCBvZiB0aG9zZSB0aGlu
Z3MsIGFuZCB0aGVuIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUgZ2l2ZW4KKy8vIENDYWxs
SGVscGVycyBpbnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJhY2tzIGluIHRo
ZSBzdXBwbGllZCBjb2RlIGFzIGl0IGlzCisvLyBnZW5lcmF0aW5nLgordm9pZCBnZW5lcmF0ZShD
b2RlJiwgQ0NhbGxIZWxwZXJzJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRl
ZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisvLyBUaGlzIGlzIGdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9y
LnJiLgorI2luY2x1ZGUgIkFpck9wY29kZUdlbmVyYXRlZC5oIgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlv
bkNvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckdlbmVyYXRpb25Db250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKyNkZWZpbmUgQWlyR2VuZXJhdGlvbkNvbnRl
eHRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3Ry
dWN0IEdlbmVyYXRpb25Db250ZXh0IHsKKyAgICB0eXBlZGVmIHZvaWQgTGF0ZVBhdGhGdW5jdGlv
bihDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworICAgIHR5cGVkZWYgU2hhcmVk
VGFzazxMYXRlUGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF0
ZVBhdGg+PiBsYXRlUGF0aHM7CisgICAgQ29kZSogY29kZTsKK307CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFp
ckhhbmRsZUNhbGxlZVNhdmVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpclBo
YXNlU2NvcGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VT
Y29wZSBwaGFzZVNjb3BlKGNvZGUsICJoYW5kbGVDYWxsZWVTYXZlcyIpOworCisgICAgUmVnaXN0
ZXJTZXQgdXNlZENhbGxlZVNhdmVzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBp
bnN0LmZvckVhY2hUbXBGYXN0KAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsKKyAg
ICAgICAgICAgICAgICAgICAgLy8gQXQgZmlyc3Qgd2UganVzdCByZWNvcmQgYWxsIHVzZWQgcmVn
cy4KKyAgICAgICAgICAgICAgICAgICAgdXNlZENhbGxlZVNhdmVzLnNldCh0bXAucmVnKCkpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHdlIGZp
bHRlciB0byByZWFsbHkgZ2V0IHRoZSBjYWxsZWUgc2F2ZXMuCisgICAgdXNlZENhbGxlZVNhdmVz
LmZpbHRlcihSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKworICAgIGlmICgh
dXNlZENhbGxlZVNhdmVzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpID0gUmVnaXN0ZXJBdE9mZnNldExpc3Qo
dXNlZENhbGxlZVNhdmVzKTsKKworICAgIHNpemVfdCBieXRlU2l6ZSA9IDA7CisgICAgZm9yIChj
b25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygp
KQorICAgICAgICBieXRlU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4oLWVudHJ5
Lm9mZnNldCgpKSwgYnl0ZVNpemUpOworCisgICAgU3RhY2tTbG90KiBzYXZlc0FyZWEgPSBjb2Rl
LmFkZFN0YWNrU2xvdChieXRlU2l6ZSwgU3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICAvLyBU
aGlzIGlzIGEgYml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUgYWxyZWFkeSBwaW5uZWQgYSBk
aWZmZXJlbnQgc3RhY2sgc2xvdCB0byB0aGlzCisgICAgLy8gYXJlYS4gQWxzbywgb3VyIHJ1bnRp
bWUgZG9lcyBub3QgcmVxdWlyZSB1cyB0byBwaW4gdGhlIHNhdmVzIGFyZWEuIE1heWJlIHdlIHNo
b3VsZG4ndCBwaW4gaXQ/CisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAoLWJ5dGVTaXpl
KTsKKworICAgIGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRy
eSkgLT4gQXJnIHsKKyAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soc2F2ZXNBcmVhLCBlbnRyeS5v
ZmZzZXQoKSArIGJ5dGVTaXplKTsKKyAgICB9OworCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlv
blNldChjb2RlKTsKKyAgICAKKyAgICAvLyBGaXJzdCBpbnNlcnQgc2F2aW5nIGNvZGUgaW4gdGhl
IHByb2xvZ3VlLgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2Rl
LmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAor
ICAgICAgICAgICAgMCwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBj
b2RlWzBdLT5hdCgwKS5vcmlnaW4sCisgICAgICAgICAgICBUbXAoZW50cnkucmVnKCkpLCBhcmdG
b3IoZW50cnkpKTsKKyAgICB9CisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29kZVswXSk7CisK
KyAgICAvLyBOb3cgaW5zZXJ0IHJlc3RvcmUgY29kZSBhdCBlcGlsb2d1ZXMuCisgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgSW5zdCYgbGFzdCA9IGJsb2NrLT5s
YXN0KCk7CisgICAgICAgIGlmIChsYXN0Lm9wY29kZSAhPSBSZXQpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29k
ZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnQoCisgICAgICAgICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIGVudHJ5LnJlZygpLmlzR1BS
KCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgbGFzdC5vcmlnaW4sCisgICAgICAgICAgICAgICAgYXJn
Rm9yKGVudHJ5KSwgVG1wKGVudHJ5LnJlZygpKSk7CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0
aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNh
dmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRsZUNhbGxlZVNhdmVz
X2gKKyNkZWZpbmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFz
cyBDb2RlOworCisvLyBUaGlzIHBoYXNlIGlkZW50aWZpZXMgY2FsbGVlLXNhdmUgcmVnaXN0ZXJz
IGFuZCBhZGRzIGNvZGUgdG8gc2F2ZS9yZXN0b3JlIHRoZW0gaW4gdGhlCisvLyBwcm9sb2d1ZS9l
cGlsb2d1ZSB0byB0aGUgY29kZS4gSXQncyBhIG1hbmRhdG9yeSBwaGFzZS4KKworLy8gRklYTUU6
IEl0IHdvdWxkIGJlIGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3RpdmUgd2l0aCB0aGUg
QWlyIGNsaWVudCBhbmQgYWxzbyBtb3JlCisvLyBwb3dlcmZ1bC4KKy8vIFdlIHNob3VsZCBoYXZl
IHNocmluayB3cmFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDQ1OAorLy8gV2Ugc2hvdWxkIG1ha2UgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBjbGllbnQ6
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTkKKwordm9pZCBo
YW5kbGVDYWxsZWVTYXZlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJIYW5kbGVDYWxs
ZWVTYXZlc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0
aW9uU2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc2VydGlvblNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVj
dXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5t
X2luc3RzLCBtX2luc2VydGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBBaXJJbnNlcnRpb25TZXRfaAorI2RlZmluZSBBaXJJbnNlcnRpb25T
ZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNs
dWRlIDx3dGYvSW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxv
Y2s7CitjbGFzcyBDb2RlOworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPEluc3Q+IEluc2VydGlv
bjsKKworY2xhc3MgSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBJbnNlcnRpb25TZXQoQ29k
ZSYgY29kZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgQ29k
ZSYgY29kZSgpIHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICB2b2lkIGFwcGVuZEluc2VydGlvbihUJiYgaW5zZXJ0aW9uKQorICAgIHsKKyAgICAgICAg
bV9pbnNlcnRpb25zLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oaW5zZXJ0aW9uKSk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGluc2VydEluc3Qoc2l6ZV90
IGluZGV4LCBJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVuZEluc2VydGlvbihJbnNl
cnRpb24oaW5kZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOworICAgIH0KKyAgICAKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBpbnNlcnQoc2l6ZV90
IGluZGV4LCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBpbnNlcnRJ
bnN0KGluZGV4LCBJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsK
KyAgICB9CisKKyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitwcml2YXRlOgorICAg
IENvZGUmIG1fY29kZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
SW5zdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChvcGNv
ZGUsICIgIiwgbGlzdER1bXAoYXJncykpOworICAgIGlmIChvcmlnaW4pIHsKKyAgICAgICAgaWYg
KGFyZ3Muc2l6ZSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOworICAgICAgICBvdXQu
cHJpbnQoKm9yaWdpbik7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6
QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJJbnN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3Rf
aAorI2RlZmluZSBBaXJJbnN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJBcmcuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMu
aCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKK2NsYXNzIFJlZ2lz
dGVyU2V0OworCituYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFp
ciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKKworc3RydWN0IEluc3QgeworcHVibGlj
OgorICAgIHR5cGVkZWYgVmVjdG9yPEFyZywgMz4gQXJnTGlzdDsKKworICAgIEluc3QoKQorICAg
ICAgICA6IG9yaWdpbihudWxscHRyKQorICAgICAgICAsIG9wY29kZShOb3ApCisgICAgeworICAg
IH0KKyAgICAKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgICAg
IDogb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9
CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEluc3QoT3Bj
b2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICAgICAgOiBhcmdzeyBhcmcsIGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwgb3JpZ2lu
KG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJ
bnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50
cykKKyAgICAgICAgOiBhcmdzKGFyZ3VtZW50cykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQor
ICAgICAgICAsIG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2Rl
IG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgQXJnTGlzdCYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBh
cmdzKFdURjo6bW92ZShhcmd1bWVudHMpKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAg
ICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRo
ZXNlIGZ1bmN0b3JzIGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1
c2UgdGhlbSBmb3IgdGhpbmdzIHRoYXQKKyAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBi
ZSBlZGl0ZWQ7IGlmIHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4g
eW91J3JlCisgICAgLy8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCisKKyAgICAvLyBUaGlzIG9u
bHkgd2Fsa3MgdGhvc2UgVG1wcyB0aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCwgYW5kIGl0
IGRvZXNuJ3QgdGVsbCB5b3UgdGhlaXIgcm9sZQorICAgIC8vIG9yIHR5cGUuCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0
b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3IgKEFyZyYgYXJnIDogYXJncykKKyAgICAg
ICAgICAgIGFyZy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0eXBlZGVm
IHZvaWQgRWFjaEFyZ0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJnOjpUeXBlKTsKKyAgICAK
KyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUpLiBUaGlzIGZ1
bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEFyZyhjb25z
dCBGdW5jdG9yJik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0bXAsIHJvbGUs
IHR5cGUpLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNo
VG1wKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JFYWNoQXJnKAor
ICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBl
KSB7CisgICAgICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlwZSwgZnVuY3Rvcik7
CisgICAgICAgICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGluZyBjYW4gYmUgZWl0aGVyIEFy
ZyBvciBUbXAuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIFJldHVybnMgdHJ1
ZSBpZiB0aGlzIGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9ja3Mgc29tZSBl
eHRyYSBmdW5jdGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0OworCisgICAg
Ly8gUmVwb3J0cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3Bl
cmF0aW9uLiBOb3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFDbG9iYmVyZWRS
ZWdzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIGNvbnN0
IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVzZSB0aGlzIHRv
IHJlcG9ydCB3aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVz
dCBiZWZvcmUgY29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9y
dFVzZWRSZWdpc3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUu
CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7CisKKyAg
ICAvLyBJcyB0aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9ybXMgcmlnaHQg
bm93PyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dl
bmVyYXRvci5yYi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBBc3N1bWluZyB0
aGlzIGluc3RydWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdpbGwgaXQgc3Rp
bGwgYmUgaW4gb25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1dCBhbiBBZGRy
IHJlZmVyZW5jaW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFyZywgb2YgY291
cnNlKSBpbiB0aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0aGlzOiBpdCB3
YWxrcyB0aGUgYXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNwaWxsaW5nOwor
ICAgIC8vIGlmIGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYgaXQgY2FuIHJl
cGxhY2UgdGhlIEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAgIC8vIGZpbmRz
IGEgbm9uLVRtcCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNoVG1wIHRvIGRv
IGEgcmVwbGFjZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlz
IGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBhZG1pdHNT
dGFjayh1bnNpZ25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21lIGNvZGUgZm9y
IHRoaXMgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIgYmFja2VuZC4g
SWYgdGhpcyBpcyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUganVtcCB0aGF0
IG5lZWRzIHRvIGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRoZSAiZWxzZSIK
KyAgICAvLyBjYXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdl
bmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVyczo6SnVtcCBn
ZW5lcmF0ZShDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworCisgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFyZ3M7CisgICAgVmFsdWUq
IG9yaWdpbjsgLy8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLgorICAg
IE9wY29kZSBvcGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gKKyNkZWZpbmUg
QWlySW5zdElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpcklu
c3QuaCIKKyNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwu
aCIKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxUbXA+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVh
Y2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGlu
c3QuZm9yRWFjaFRtcChmdW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9y
RWFjaDxBcmc+IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2
b2lkIGZvckVhY2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGluc3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBUaGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgSW5zdDo6Zm9yRWFjaChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JFYWNoKCp0aGlz
LCBmdW5jdG9yKTsKK30KKworaW5saW5lIGJvb2wgSW5zdDo6aGFzU3BlY2lhbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGFyZ3Muc2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7Cit9CisKK2lu
bGluZSBjb25zdCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sKKyAg
ICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4
dHJhQ2xvYmJlcmVkUmVncygqdGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEluc3Q6OnJlcG9ydFVz
ZWRSZWdpc3RlcnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgQVNT
RVJUKGhhc1NwZWNpYWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdp
c3RlcnMoKnRoaXMsIHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1NoaWZ0VmFs
aWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAg
IHJldHVybiBpbnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyNlbHNlCisg
ICAgVU5VU0VEX1BBUkFNKGluc3QpOworICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9ICAgCisK
K2lubGluZSBib29sIGlzTHNoaWZ0MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJl
dHVybiBpc1NoaWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0SW5s
aW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3Mu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNz
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVu
ZXNzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVzc19oCisjZGVm
aW5lIEFpckxpdmVuZXNzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJC
YXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhT
ZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CisvLyBZb3UgY2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVyIEFyZydzLiBJ
ZiB5b3UgY29tcHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNrIGxpdmVuZXNz
IGFuZCB0bXAgbGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNzIExpdmVu
ZXNzIHsKK3B1YmxpYzoKKyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsKKyAgICAgICAg
bV9saXZlQXRIZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2ZUF0VGFpbC5y
ZXNpemUoY29kZS5zaXplKCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IHNlZW47
CisKKyAgICAgICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNoYW5nZWQp
IHsKKyAgICAgICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgZm9yIChzaXpl
X3QgYmxvY2tJbmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOworICAgICAgICAg
ICAgICAgIExvY2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKHNpemVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCisg
ICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgp
KTsKKyAgICAgICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsKKyAg
ICAgICAgICAgICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1fbGl2
ZUF0SGVhZFtibG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIGNoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayog
cHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9saXZlQXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAg
ICBsb2NhbENhbGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5kKCkpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdID0gbG9j
YWxDYWxjLnRha2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKwor
ICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107CisgICAgfQor
CisgICAgLy8gVGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJzZS4KKyAgICBj
bGFzcyBMb2NhbENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxjKExpdmVuZXNz
JiBsaXZlbmVzcywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1fbGl2ZShsaXZl
bmVzcy5saXZlQXRUYWlsKGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xpdmU7IH0KKyAg
ICAgICAgSGFzaFNldDxUaGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6bW92ZShtX2xp
dmUpOyB9CisKKyAgICAgICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFj
aDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUo
KSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKEFyZzo6aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVt
b3ZlKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5leHQgaGFu
ZGxlIGNsb2JiZXJlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5oYXNTcGVjaWFs
KCkpIHsKKyAgICAgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2go
CisgICAgICAgICAgICAgICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9saXZlLnJlbW92ZShUaGluZyhUbXAocmVnKSkpOworICAgICAgICAgICAgICAg
ICAgICB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmlu
YWxseSBoYW5kbGUgdXNlJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAg
ICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlw
ZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNl
KHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcpOworICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBIYXNoU2V0
PFRoaW5nPiBtX2xpdmU7CisgICAgfTsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8QmFz
aWNCbG9jaywgSGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNp
Y0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRUYWlsOworfTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckxpdmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJPcGNvZGUub3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpck9wY29kZS5vcGNvZGVzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2
MiBAQAorIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisj
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisj
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1Ig
SVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBTeWxsYWJ1czoK
KyMKKyMgUm9sZXMgYW5kIHR5cGVzOgorIyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJhbC1wdXJwb3Nl
IHJlZ2lzdGVyIG9yIHZhbHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVn
aXN0ZXIgb3IgdmFsdWUKKyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVyYWwtcHVycG9z
ZSByZWdpc3RlciBvciB2YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3Ig
dmFsdWUKKyMgRDpGID0+IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkYg
PT4gdXNlIGFuZCBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIworIyBBcmd1bWVu
dCBraW5kczoKKyMgVG1wID0+IHRlbXBvcmFyeSBvciByZWdpc3RlcgorIyBJbW0gPT4gMzItYml0
IGltbWVkaWF0ZSBpbnQKKyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0CisjIEFkZHIgPT4gYWRkcmVz
cyBhcyB0ZW1wb3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJhc2VJbmRleCBhZGRy
ZXNzCisjIEFicyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhlIHBhcnNlciB2aWV3cyB0aGVz
ZSB0aGluZ3MgYXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0aGF0IHRoZXkgZmFsbCBpbnRv
IHR3byBkaXN0aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28sIGFsdGhvdWdoIHRoaXMgZmls
ZSB1c2VzIGEgcGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwgbm9uZSBvZiB0aGUgd2hpdGVz
cGFjZSBvcgorIyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBwYXJzZXIuIEZv
ciBleGFtcGxlLCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQyIFU6RywgVUQ6RiBJbW0sIFRt
cCBBZGRyLCBUbXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQga25vdyB0aGF0IHRoaXMgaXMg
dGhlIHNhbWUgYXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAgICAgSW1tLCBUbXAKKyMgICAg
IEFkZHIsIFRtcAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1Y3Rpb24gdGhhdCB1c2VzIGEg
R1BSIG9yIGFuIGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBhIGZsb2F0IHJlZ2lzdGVyLgor
CisjIE5vdGUgdGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBsZWFkaW5nIGNhcGl0YWwgKEFk
ZDMyKSBidXQgbXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1ibGVyCisjIEFQSSB0aGF0IGhh
cyBhIGxlYWRpbmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitOb3AKKworQWRkMzIgVTpHLCBVRDpH
CisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAgIEFkZHIsIFRt
cAorICAgIFRtcCwgQWRkcgorCitBZGQzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRt
cAorCitBZGQ2NCBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIElt
bSwgVG1wCisgICAgQWRkciwgVG1wCisKK0FkZDY0IFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRt
cCwgVG1wCisKK0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAg
ICBUbXAsIEFkZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworQW5kNjQgVTpHLCBV
RDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAorCitMc2hpZnQzMiBVOkcsIFVEOkcKKyAg
ICBUbXAqLCBUbXAKKyAgICBJbW0sIFRtcAorCitNdWwzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRt
cAorICAgIEFkZHIsIFRtcAorCisjIE5vdGUgdGhhdCBNb3ZlIG9wZXJhdGVzIG92ZXIgdGhlIGZ1
bGwgcmVnaXN0ZXIgc2l6ZSwgd2hpY2ggaXMgZWl0aGVyIDMyLWJpdCBvciA2NC1iaXQgZGVwZW5k
aW5nIG9uCisjIHRoZSBwbGF0Zm9ybS4gSSdtIG5vdCBlbnRpcmVseSBzdXJlIHRoYXQgdGhpcyBp
cyBhIGdvb2QgdGhpbmc7IGl0IG1pZ2h0IGJlIGJldHRlciB0byBqdXN0IGhhdmUgYQorIyBNb3Zl
NjQgaW5zdHJ1Y3Rpb24uIE9UT0gsIG91ciBNYWNyb0Fzc2VtYmxlcnMgYWxyZWFkeSBoYXZlIHRo
aXMgbm90aW9uIG9mICJtb3ZlKCkiIHRoYXQgYmFzaWNhbGx5CisjIG1lYW5zIG1vdmVQdHIuCitN
b3ZlIFU6RywgRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIEltbTY0LCBUbXAK
KyAgICBBZGRyLCBUbXAgYXMgbG9hZFB0ciAjIFRoaXMgbWVhbnMgdGhhdCAiTW92ZSBBZGRyLCBU
bXAiIGlzIGNvZGUtZ2VuZXJhdGVkIGFzICJsb2FkIiBub3QgIm1vdmUiLgorICAgIEluZGV4LCBU
bXAgYXMgbG9hZFB0cgorICAgIFRtcCwgQWRkciBhcyBzdG9yZVB0cgorICAgIFRtcCwgSW5kZXgg
YXMgc3RvcmVQdHIKKworTW92ZTMyIFU6RywgRDpHCisgICAgVG1wLCBUbXAgYXMgemVyb0V4dGVu
ZDMyVG9QdHIKKyAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCisgICAgSW5kZXgsIFRtcCBhcyBsb2Fk
MzIKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmUzMgorICAgIFRtcCwgSW5kZXggYXMgc3RvcmUzMgor
CitNb3ZlRG91YmxlIFU6RiwgRDpGCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9h
ZERvdWJsZQorICAgIEluZGV4LCBUbXAgYXMgbG9hZERvdWJsZQorICAgIFRtcCwgQWRkciBhcyBz
dG9yZURvdWJsZQorICAgIFRtcCwgSW5kZXggYXMgc3RvcmVEb3VibGUKKworTW92ZTY0VG9Eb3Vi
bGUgVTpHLCBEOkYKKyAgICBUbXAsIFRtcAorCitNb3ZlRG91YmxlVG82NCBVOkYsIEQ6RworICAg
IFRtcCwgVG1wCisKK0JyYW5jaEFkZDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXND
b25kLCBUbXAsIFRtcAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBB
ZGRyCisgICAgUmVzQ29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0Jy
YW5jaE11bDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAor
ICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJh
bmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJl
c0NvbmQsIEltbSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFk
ZHIsIFRtcAorCitCcmFuY2hOZWczMiBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRt
cAorCitKdW1wIC9icmFuY2gKKworUmV0IC90ZXJtaW5hbAorCitCcmVha3BvaW50IC90ZXJtaW5h
bAorCisjIEFpciBhbGxvd3MgZm9yIGV4b3RpYyBiZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9y
IGlzIGRldGVybWluZWQgZW50aXJlbHkgYnkgdGhlIFNwZWNpYWwgb3BlcmFuZCwKKyMgd2hpY2gg
bXVzdCBiZSB0aGUgZmlyc3Qgb3BlcmFuZC4KK3NwZWNpYWwgUGF0Y2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFz
ZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgor
I2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitQaGFzZVNjb3BlOjpQ
aGFzZVNjb3BlKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX2NvZGUoY29k
ZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFz
ZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkFpciBhZnRlciAiLCBjb2RlLmxhc3RQaGFzZU5hbWUo
KSwgIiwgYmVmb3JlICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAg
ICB9CisKKyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1w
QmVmb3JlID0gdG9DU3RyaW5nKGNvZGUpOworfQorCitQaGFzZVNjb3BlOjp+UGhhc2VTY29wZSgp
Cit7CisgICAgbV9jb2RlLnNldExhc3RQaGFzZU5hbWUobV9uYW1lKTsKKyAgICBpZiAoc2hvdWxk
VmFsaWRhdGVJUkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKG1fY29kZSwgbV9kdW1w
QmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclBoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclBoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJQaGFzZVNjb3BlX2gKKyNkZWZpbmUgQWlyUGhhc2VTY29wZV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3Rl
eHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIENvZGU7CisKK2NsYXNzIFBoYXNlU2NvcGUgeworICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFBoYXNlU2NvcGUpOworcHVibGljOgorICAgIFBoYXNlU2NvcGUoQ29kZSYs
IGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxp
ZGF0aW9uCisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIqIG1f
bmFtZTsKKyAgICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJS
ZWdpc3RlclByaW9yaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlv
cml0eS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlJlZ2lzdGVyU2V0Lmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29u
c3QgVmVjdG9yPEdQUlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBW
ZWN0b3I8R1BSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOwor
ICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAg
ICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEdQUlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVy
U2V0IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCk7CisgICAgICAgICAgICBhbGwuZXhjbHVk
ZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBhbGwuZXhjbHVk
ZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgICAg
IFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cygpOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcg
cmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAg
ICAgICAgICAgfSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBb
Jl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJl
ZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdDsKK30K
KworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0
YXRpYyBWZWN0b3I8RlBSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7Cisg
ICAgICAgICAgICByZXN1bHQgPSBuZXcgVmVjdG9yPEZQUlJlZz4oKTsKKyAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCk7CisgICAgICAgICAgICBSZWdp
c3RlclNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsK
KyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAg
ICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZnByKCkpOworICAgICAgICAgICAg
ICAgIH0pOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChS
ZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAgICAg
ICAgICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2Nv
bnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSB0eXBlKQorewor
ICAgIHN0YXRpYyBWZWN0b3I8UmVnPiogcmVzdWx0W0FyZzo6bnVtVHlwZXNdOworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNl
LAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0gPSBuZXcgVmVjdG9y
PFJlZz4oKTsKKyAgICAgICAgICAgIGZvciAoR1BSUmVnIHJlZyA6IGdwcnNJblByaW9yaXR5T3Jk
ZXIoKSkKKyAgICAgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0tPmFwcGVuZChSZWcocmVnKSk7
CisgICAgICAgICAgICByZXN1bHRbQXJnOjpGUF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAg
ICAgICAgIGZvciAoRlBSUmVnIHJlZyA6IGZwcnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAg
ICAgICAgICByZXN1bHRbQXJnOjpGUF0tPmFwcGVuZChSZWcocmVnKSk7CisgICAgICAgIH0pOwor
ICAgIHJldHVybiAqcmVzdWx0W3R5cGVdOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisjZGVm
aW5lIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgi
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0
eU9yZGVyKCk7Citjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3JpdHlPcmRlcigpOwor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCYW5rPiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVy
OwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEdQUkluZm8+IHsK
KyAgICBjb25zdCBWZWN0b3I8R1BSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZ3By
c0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Q
cmlvcml0eU9yZGVyPEZQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8RlBSUmVnPiYgaW5Qcmlv
cml0eU9yZGVyKCkgeyByZXR1cm4gZnByc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OworCit0ZW1w
bGF0ZTx0eXBlbmFtZSBCYW5rPgorY29uc3QgVmVjdG9yPHR5cGVuYW1lIEJhbms6OlJlZ2lzdGVy
VHlwZT4mIHJlZ3NJblByaW9yaXR5T3JkZXIoKQoreworICAgIHJldHVybiBSZWdpc3RlcnNJblBy
aW9yaXR5T3JkZXI8QmFuaz46OmluUHJpb3JpdHlPcmRlcigpOworfQorCitjb25zdCBWZWN0b3I8
UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IFNwZWNp
YWw6OmR1bXBQcmVmaXggPSAiJiI7CisKK1NwZWNpYWw6OlNwZWNpYWwoKQorICAgIDogbV9pbmRl
eChVSU5UX01BWCkKK3sKK30KKworU3BlY2lhbDo6flNwZWNpYWwoKQoreworfQorCitDU3RyaW5n
IFNwZWNpYWw6Om5hbWUoKSBjb25zdAoreworICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAg
ICBkdW1wSW1wbChvdXQpOworICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7Cit9CisKK3ZvaWQg
U3BlY2lhbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChk
dW1wUHJlZml4KTsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIGlmIChtX2luZGV4ICE9IFVJTlRf
TUFYKQorICAgICAgICBvdXQucHJpbnQobV9pbmRleCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZGVl
cER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoKnRoaXMsICI6
ICIpOworICAgIGRlZXBEdW1wSW1wbChvdXQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpclNwZWNpYWxfaAorI2RlZmluZSBBaXJTcGVjaWFsX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2Mu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFt
YmRhLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4
dDsKKworY2xhc3MgU3BlY2lhbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlY2lhbCk7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0
IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisgICAgCisgICAgU3BlY2lhbCgpOworICAgIHZpcnR1
YWwgflNwZWNpYWwoKTsKKworICAgIENTdHJpbmcgbmFtZSgpIGNvbnN0OworCisgICAgdmlydHVh
bCB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJn
Q2FsbGJhY2s+JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKEluc3QmKSA9IDA7Cisg
ICAgdmlydHVhbCBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgPSAw
OworCisgICAgLy8gVGhpcyBnZXRzIGNhbGxlZCBvbiBmb3IgZWFjaCBJbnN0IHRoYXQgdXNlcyB0
aGlzIFNwZWNpYWwuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8KKyAgICAvLyBndWFyYW50
ZWUgdGhhdCBhIFNwZWNpYWwgZ2V0cyB1c2VkIGZyb20ganVzdCBvbmUgSW5zdCwgYmVjYXVzZSBB
aXIgbWlnaHQgdGFpbGR1cCBsYXRlLiBTbywKKyAgICAvLyBpZiB5b3Ugd2FudCB0byBwYXNzIHRo
aXMgaW5mb3JtYXRpb24gZG93biB0byBnZW5lcmF0ZSgpLCB0aGVuIHlvdSBoYXZlIHRvIGVpdGhl
cjoKKyAgICAvLworICAgIC8vIDEpIEdlbmVyYXRlIEFpciB0aGF0IHN0YXJ0cyB3aXRoIGEgc2Vw
YXJhdGUgU3BlY2lhbCBwZXIgUGF0Y2ggSW5zdCwgYW5kIHRoZW4gbWVyZ2UKKyAgICAvLyAgICB1
c2VkUmVnaXN0ZXIgc2V0cy4gVGhpcyBpcyBwcm9iYWJseSBub3QgZ3JlYXQsIGJ1dCBpdCBvcHRp
bWl6ZXMgZm9yIHRoZSBjb21tb24gY2FzZSB0aGF0CisgICAgLy8gICAgQWlyIGRpZG4ndCBkdXBs
aWNhdGUgY29kZSBvciB0aGF0IHN1Y2ggZHVwbGljYXRpb24gZGlkbid0IGNhdXNlIGFueSBpbnRl
cmVzdGluZyBjaGFuZ2VzIHRvCisgICAgLy8gICAgcmVnaXN0ZXIgYXNzaWdubWVudC4KKyAgICAv
LworICAgIC8vIDIpIEhhdmUgdGhlIFNwZWNpYWwgbWFpbnRhaW4gYSBIYXNoTWFwPEluc3QqLCBS
ZWdpc3RlclNldD4uIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYW5hbHlzaXMKKyAgICAvLyAgICB0
aGF0IGZlZWRzIGludG8gdGhpcyBjYWxsIGlzIHBlcmZvcm1lZCBqdXN0IGJlZm9yZSBjb2RlIGdl
bmVyYXRpb24gYW5kIHRoZXJlIGlzIG5vIHdheQorICAgIC8vICAgIGZvciB0aGUgVmVjdG9yPD4n
cyB0aGF0IGNvbnRhaW4gdGhlIEluc3RzIHRvIGJlIHJlYWxsb2NhdGVkLiBUaGlzIGFsbG93cyBn
ZW5lcmF0ZSgpIHRvCisgICAgLy8gICAgY29uc3VsdCB0aGUgSGFzaE1hcC4KKyAgICAvLworICAg
IC8vIDMpIEh5YnJpZDogeW91IGNvdWxkIHVzZSAoMSkgYW5kIGZpcmUgdXAgYSBIYXNoTWFwIGlm
IHlvdSBzZWUgbXVsdGlwbGUgY2FsbHMuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaXQncyBu
b3QgcG9zc2libGUgdG8gcmVseSBvbiByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgYmVpbmcgY2FsbGVk
IGluIHRoZSBzYW1lIG9yZGVyCisgICAgLy8gYXMgZ2VuZXJhdGUoKS4gSWYgd2UgY291bGQgcmVs
eSBvbiB0aGF0LCB0aGVuIHdlIGNvdWxkIGp1c3QgaGF2ZSBlYWNoIFNwZWNpYWwgaW5zdGFuY2UK
KyAgICAvLyBtYWludGFpbiBhIFZlY3RvciBvZiBSZWdpc3RlclNldCdzIGFuZCB0aGVuIHByb2Nl
c3MgdGhhdCB2ZWN0b3IgaW4gdGhlIHJpZ2h0IG9yZGVyIGluCisgICAgLy8gZ2VuZXJhdGUoKS4g
QnV0LCB0aGUgb3JkZXJpbmcgZGlmZmVyZW5jZSBpcyB1bmxpa2VseSB0byBjaGFuZ2Ugc2luY2Ug
aXQgd291bGQgaGFybSB0aGUKKyAgICAvLyBwZXJmb3JtYW5jZSBvZiB0aGUgbGl2ZW5lc3MgYW5h
bHlzaXMuCisgICAgLy8KKyAgICAvLyBDdXJyZW50bHksIHdlIGRvICgxKSBmb3IgQjMgc3RhY2tt
YXBzLgorICAgIHZpcnR1YWwgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBS
ZWdpc3RlclNldCYpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIENDYWxsSGVscGVyczo6SnVtcCBn
ZW5lcmF0ZShJbnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7CisK
KyAgICB2aXJ0dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYp
ID0gMDsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVl
cER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9p
ZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVl
cER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIGZyaWVu
ZCBjbGFzcyBDb2RlOworCisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIHVuc2lnbmVkIG1f
aW5kZXg7Cit9OworCitjbGFzcyBEZWVwU3BlY2lhbER1bXAgeworcHVibGljOgorICAgIERlZXBT
cGVjaWFsRHVtcChjb25zdCBTcGVjaWFsKiBzcGVjaWFsKQorICAgICAgICA6IG1fc3BlY2lhbChz
cGVjaWFsKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3NwZWNpYWwpCisgICAgICAgICAgICBtX3NwZWNp
YWwtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgi
PG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFNwZWNpYWwqIG1fc3BlY2lh
bDsKK307CisKK2lubGluZSBEZWVwU3BlY2lhbER1bXAgZGVlcER1bXAoY29uc3QgU3BlY2lhbCog
c3BlY2lhbCkKK3sKKyAgICByZXR1cm4gRGVlcFNwZWNpYWxEdW1wKHNwZWNpYWwpOworfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQWlyU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNw
aWxsRXZlcnl0aGluZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNv
ZGUuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5s
aW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29w
ZS5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJCM0luZGV4
TWFwLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kwordm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBo
YXNlU2NvcGUoY29kZSwgInNwaWxsRXZlcnl0aGluZyIpOworCisgICAgLy8gV2Ugd2FudCB0byBr
bm93IHRoZSBzZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFz
aWMgYmxvY2suCisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4g
dXNlZFJlZ2lzdGVycyhjb2RlLnNpemUoKSk7CisgICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhj
b2RlKTsKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZl
bmVzczxUbXA+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAg
IHVzZWRSZWdpc3RlcnNbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgpICsgMSk7CisKKyAgICAg
ICAgYXV0byBzZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBpbmRleCwgSW5zdCYgaW5z
dCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldCA9IHVzZWRSZWdpc3RlcnNbYmxvY2td
W2luZGV4XTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHNl
dC5zZXQodG1wLnJlZygpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gR290dGEg
YWNjb3VudCBmb3IgZGVhZCBhc3NpZ25tZW50cyB0byByZWdpc3RlcnMuIFRoZXNlIG1heSBoYXBw
ZW4gYmVjYXVzZSB0aGUgaW5wdXQKKyAgICAgICAgICAgIC8vIGNvZGUgaXMgc3Vib3B0aW1hbC4K
KyAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYg
YXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChBcmc6OmlzRGVmKHJvbGUpICYmIGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0LnNldChhcmcucmVnKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9Owor
CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdElu
ZGV4LS07KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7
CisgICAgICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGluc3RJbmRleCArIDEsIGluc3QpOworICAg
ICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdCk7CisgICAgICAgIH0KKworICAgICAgICBJ
bnN0IG5vcDsKKyAgICAgICAgc2V0VXNlZFJlZ2lzdGVycygwLCBub3ApOworICAgIH0KKworICAg
IC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAuCisgICAgVmVjdG9yPFN0YWNr
U2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1UeXBlc107CisgICAgZm9yICh1bnNpZ25lZCB0
eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyArK3R5cGVJbmRleCkgewor
ICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBhbGxTdGFja1Nsb3RzW3R5
cGVJbmRleF07CisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QXJnOjpUeXBl
Pih0eXBlSW5kZXgpOworICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShjb2RlLm51bVRtcHModHlw
ZSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29kZS5udW1UbXBzKHR5cGUp
OyB0bXBJbmRleC0tOykKKyAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0gY29kZS5h
ZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICB9CisKKyAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdElu
ZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgIFJlZ2lzdGVy
U2V0JiBzZXRCZWZvcmUgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXhdOworICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQmIHNldEFmdGVyID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5zdElu
ZGV4ICsgMV07CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7
CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAgICAgICAgWyZdIChUbXAm
IHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9IGFsbFN0YWNrU2xvdHNb
dHlwZV1bdG1wLnRtcEluZGV4KCldOworICAgICAgICAgICAgICAgICAgICBBcmcgYXJnID0gQXJn
OjpzdGFjayhzdGFja1Nsb3QpOworCisgICAgICAgICAgICAgICAgICAgIC8vIE5lZWQgdG8gZmln
dXJlIG91dCBhIHJlZ2lzdGVyIHRvIHVzZS4gSG93IHdlIGRvIHRoYXQgZGVwZW5kcyBvbiB0aGUg
cm9sZS4KKyAgICAgICAgICAgICAgICAgICAgUmVnIGNob3NlblJlZzsKKyAgICAgICAgICAgICAg
ICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2U6
CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9y
ZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUu
Z2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QmVmb3JlLnNl
dChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5SZWcgPSByZWc7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6RGVmOgorICAg
ICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJpb3JpdHlPcmRlcih0
eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0QWZ0ZXIuZ2V0KHJl
ZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0KHJlZyk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpVc2VEZWY6CisgICAgICAg
ICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykg
JiYgIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRC
ZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJl
ZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAgICAg
ICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAgICAgICAgICBPcGNvZGUg
bW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91YmxlOworCisgICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJ
bmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwgdG1wLCBhcmcpOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVy
eXRoaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclNwaWxsRXZlcnl0aGlu
Z19oCisjZGVmaW5lIEFpclNwaWxsRXZlcnl0aGluZ19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNz
IENvZGU7CisKKy8vIFRoaXMgaXMgYSBwaGFzZSBmb3IgdGVzdGluZy4gSXQgYmVoYXZlcyBsaWtl
IGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGluIHRoZSBzZW5zZSB0aGF0IGl0CisvLyBlbGltaW5hdGVz
IHRlbXBvcmFyaWVzIGZyb20gdGhlIHByb2dyYW0uIEl0IGFjY29tcGxpc2hlcyB0aGlzIGJ5IGFs
d2F5cyBzcGlsbGluZyBhbGwKKy8vIHRlbXBvcmFyaWVzLiBUaGUgcmVzdWx0aW5nIGNvZGUgaXMg
Z29pbmcgdG8gYmUgdmVyeSBpbmVmZmljaWVudC4gVGhpcyBwaGFzZSBpcyBncmVhdCBpZiB5b3UK
Ky8vIHRoaW5rIHRoYXQgdGhlcmUgaXMgYSBidWcgaW4gdGhlIHJlZ2lzdGVyIGFsbG9jYXRvci4g
WW91IGNhbiBjb25maXJtIHRoaXMgYnkgcnVubmluZyB0aGlzCisvLyBwaGFzZSBpbnN0ZWFkIG9m
IHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisvLworLy8gTm90ZSB0aGF0IGV2ZW4gdGhvdWdoIHRo
aXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBlc3QgdGhpbmcgcG9zc2libGUsIGl0J3Mgbm90IGV2ZW4g
d3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1bGFybHkgZWZmaWNpZW50IHdheS4gU28sIGRvbid0IGdl
dCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcgdGhpcyBwaGFzZSB0byByZWR1Y2UgY29tcGlsZXIKKy8v
IGxhdGVuY3kuIElmIHlvdSB3YW50ZWQgdG8gZG8gdGhhdCwgeW91IHNob3VsZCBjb21lIHVwIHdp
dGggYSBjbGV2ZXIgYWxnb3JpdGhtIGluc3RlYWQgb2YgdXNpbmcKKy8vIHRoaXMgc2lsbHkgdGhp
bmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmKTsKKworfSB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFp
clNwaWxsRXZlcnl0aGluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclN0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgU3RhY2tTbG90OjpzZXRPZmZz
ZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCit7CisgICAgbV9vZmZzZXRGcm9tRlAgPSB2YWx1ZTsK
KyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgbV92YWx1ZS0+bV9vZmZzZXRGcm9tRlAgPSB2YWx1
ZTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisKK3ZvaWQgU3RhY2tTbG90Ojpk
ZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiYnl0ZVNp
emUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCwg
Iiwga2luZCA9ICIsIG1fa2luZCk7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG91dC5wcmlu
dCgiLCB2YWx1ZSA9ICIsICptX3ZhbHVlKTsKK30KKworU3RhY2tTbG90OjpTdGFja1Nsb3QodW5z
aWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNr
U2xvdFZhbHVlKiB2YWx1ZSkKKyAgICA6IG1fYnl0ZVNpemUoYnl0ZVNpemUpCisgICAgLCBtX2lu
ZGV4KGluZGV4KQorICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUgPyB2YWx1ZS0+b2Zmc2V0RnJv
bUZQKCkgOiAwKQorICAgICwgbV9raW5kKGtpbmQpCisgICAgLCBtX3ZhbHVlKHZhbHVlKQorewor
ICAgIEFTU0VSVChieXRlU2l6ZSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQWlyU3RhY2tTbG90X2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90X2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlIDx3dGYv
RmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xh
c3MgU3RhY2tTbG90VmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTdGFja1Nsb3Qg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1
cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4
OyB9CisKKyAgICB1bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYg
KGJ5dGVTaXplKCkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBpZiAoYnl0
ZVNpemUoKSA8PSAyKQorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGlmIChieXRlU2l6
ZSgpIDw9IDQpCisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAgcmV0dXJuIDg7CisgICAg
fQorCisgICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsg
fQorCisgICAgLy8gWmVybyBtZWFucyB0aGF0IGl0J3Mgbm90IHlldCBhc3NpZ25lZC4KKyAgICBp
bnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQor
CisgICAgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGNhbGxlZCBmcm9tIHBoYXNlcyB0
aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24uIEJ1dCB5b3UgY2FuCisgICAgLy8gdG90YWxseSBmb3Jj
ZSBhIHN0YWNrIHNsb3QgdG8gbGFuZCBhdCBzb21lIG9mZnNldC4KKyAgICB2b2lkIHNldE9mZnNl
dEZyb21GUChpbnRwdHJfdCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVu
c2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1ZSopOworICAgIAorICAg
IHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBpbnRwdHJf
dCBtX29mZnNldEZyb21GUDsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAgICBTdGFja1Ns
b3RWYWx1ZSogbV92YWx1ZTsKK307CisKK2NsYXNzIERlZXBTdGFja1Nsb3REdW1wIHsKK3B1Ymxp
YzoKKyAgICBEZWVwU3RhY2tTbG90RHVtcChjb25zdCBTdGFja1Nsb3QqIHNsb3QpCisgICAgICAg
IDogbV9zbG90KHNsb3QpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc2xvdCkKKyAgICAgICAgICAgIG1f
c2xvdC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50
KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgU3RhY2tTbG90KiBtX3Ns
b3Q7Cit9OworCitpbmxpbmUgRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1bXAoY29uc3QgU3RhY2tT
bG90KiBzbG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVtcChzbG90KTsKK30KKwor
fSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgVG1wOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEqdGhpcykgeworICAgICAg
ICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYg
KGlzUmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChpc0dQKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCIldG1wIiwgZ3BU
bXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmludCgiJWZ0
bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclRtcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcF9oCisjZGVm
aW5lIEFpclRtcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiRlBSSW5mby5o
IgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK2NsYXNzIEFyZzsKKworLy8gQSBUbXAgaXMgYSBnZW5lcmFsaXphdGlvbiBvZiBhIHJl
Z2lzdGVyLiBJdCBjYW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkgR1BSIG9yIEZQUi4gSXQgY2Fu
IGFsc28KKy8vIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0ZWQgcmVnaXN0ZXIgKGku
ZS4gYSB0ZW1wb3JhcnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdlIHVzZQorLy8gZGVsaWJl
cmF0ZWx5IHRlcnNlIG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8gdXNlIHRoaXMgbmFtZSBh
IGxvdC4KKworY2xhc3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAoKQorICAgICAgICA6IG1fdmFs
dWUoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKFJlZyByZWcpCisgICAgewor
ICAgICAgICBpZiAocmVnKSB7CisgICAgICAgICAgICBpZiAocmVnLmlzR1BSKCkpCisgICAgICAg
ICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIocmVnLmZwcigpKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9CisKKyAgICBleHBsaWNp
dCBUbXAoY29uc3QgQXJnJik7CisKKyAgICBzdGF0aWMgVG1wIGdwVG1wRm9ySW5kZXgodW5zaWdu
ZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92
YWx1ZSA9IGVuY29kZUdQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisKKyAgICBzdGF0aWMgVG1wIGZwVG1wRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgewor
ICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUZQVG1w
KGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBleHBsaWNpdCBv
cGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9CisKKyAgICBib29sIGlz
R1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQKG1fdmFsdWUpOwor
ICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNF
bmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOworICAgIH0KKworICAgIGJv
b2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQUihtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUpOworICAgIH0KKworICAg
IEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQUihtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChp
c0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAgIHJldHVybiBmcHIoKTsK
KyAgICB9CisKKyAgICBib29sIGhhc1RtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhaXNSZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAg
ICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNv
ZGVGUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwVG1wSW5k
ZXgoKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBib29sIGlz
QWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRoaXM7CisgICAgfQorCisg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0KKworICAgIGJvb2wgb3Bl
cmF0b3IhPShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEo
KnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0
KSBjb25zdDsKKworICAgIFRtcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAg
ICAgIDogbV92YWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpKQorICAgIHsKKyAg
ICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAqdGhpcyA9PSBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpOwor
ICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IFdURjo6SW50SGFzaDxpbnQ+OjpoYXNoKG1fdmFsdWUpOworICAgIH0KKyAgICAKK3ByaXZhdGU6
CisgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IHJldHVybiAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUCh1bnNp
Z25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMSAtIGluZGV4OworICAgIH0KKwor
ICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BSKEdQUlJlZyBncHIpCisgICAgeworICAgICAgICByZXR1
cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAg
fQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFIoRlBSUmVnIGZwcikKKyAgICB7CisgICAgICAg
IHJldHVybiBlbmNvZGVGUChmcHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkp
OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAodW5zaWduZWQgaW5kZXgpCisg
ICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0
ZXIoKSkgKyAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFRtcCh1
bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUFIoTWFjcm9Bc3Nl
bWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4OworICAgIH0KKworICAgIHN0YXRp
YyBib29sIGlzRW5jb2RlZEdQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1
ZSA+IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlAoaW50IHZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9v
bCBpc0VuY29kZWRHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2Rl
ZEdQKHZhbHVlKSAmJiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdp
c3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUFIoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiB2YWx1ZSA+PSBl
bmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAg
IHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2YWx1ZSk7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVkRlBSKHZhbHVlKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFsdWUpCisgICAgeworICAg
ICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2RlR1BSKE1hY3JvQXNzZW1i
bGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkp
OworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGludCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0
YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVy
OjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAgICAgTWFjcm9Bc3NlbWJs
ZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgdW5zaWduZWQgZGVj
b2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQVG1w
KHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVHUFIoTWFjcm9Bc3NlbWJs
ZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBk
ZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBU
bXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxh
c3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAgICAvLyAwOiBlbXB0eSBU
bXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1wcy4KKyAgICAvLyBuZWdh
dGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92YWx1ZTsKK307CisKK3N0
cnVjdCBUbXBIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChjb25zdCBUbXAmIGtleSkg
eyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVxdWFsKGNvbnN0IFRtcCYg
YSwgY29uc3QgVG1wJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9OworCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFz
aDxKU0M6OkIzOjpBaXI6OlRtcD4geworICAgIHR5cGVkZWYgSlNDOjpCMzo6QWlyOjpUbXBIYXNo
IEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3Rl
bXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpUbXA+IDogU2ltcGxlQ2xh
c3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1wPiB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5saW5lcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGluZXNfaAorI2RlZmluZSBB
aXJUbXBJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcu
aCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeworCitpbmxpbmUgVG1wOjpUbXAoY29uc3QgQXJnJiBhcmcpCit7Cisg
ICAgKnRoaXMgPSBhcmcudG1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJUbXBJbmxpbmVz
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlk
YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQWlyVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJB
aXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitjbGFzcyBW
YWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihDb2RlJiBjb2RlLCBjb25zdCBjaGFy
KiBkdW1wQmVmb3JlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAgICAgICAsIG1fZHVtcEJl
Zm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUgVkFMSURBVEUoY29uZGl0
aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg
ICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFpbChfX0ZJTEVfXywgX19M
SU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRvQ1N0cmluZyBtZXNzYWdl
KTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorICAgIAorICAgIHZvaWQgcnVuKCkKKyAgICB7Cisg
ICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90czsKKyAgICAgICAgSGFzaFNldDxC
YXNpY0Jsb2NrKj4gdmFsaWRCbG9ja3M7CisgICAgICAgIEhhc2hTZXQ8U3BlY2lhbCo+IHZhbGlk
U3BlY2lhbHM7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fY29kZSkKKyAg
ICAgICAgICAgIHZhbGlkQmxvY2tzLmFkZChibG9jayk7CisgICAgICAgIGZvciAoU3RhY2tTbG90
KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIHZhbGlkU2xvdHMuYWRk
KHNsb3QpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBtX2NvZGUuc3BlY2lhbHMo
KSkKKyAgICAgICAgICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNwZWNpYWwpOworCisgICAgICAgIGZv
ciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgp
IHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0KGluc3RJbmRleCk7Cisg
ICAgICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAg
ICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsaWRTbG90cy5j
b250YWlucyhhcmcuc3RhY2tTbG90KCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OlNwZWNpYWw6CisgICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNw
ZWNpYWxzLmNvbnRhaW5zKGFyZy5zcGVjaWFsKCkpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJs
b2NrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFZBTElEQVRFKGlu
c3QuaXNWYWxpZEZvcm0oKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAg
ICAgICAgICAgIGlmIChpbnN0SW5kZXggPT0gYmxvY2stPnNpemUoKSAtIDEpCisgICAgICAgICAg
ICAgICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAoIkF0ICIsIGluc3Qs
ICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICBWQUxJREFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBp
biAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9j
ayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbGlkQmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiSW4gIiwgKmJsb2Nr
KSk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgTk9fUkVUVVJOX0RVRV9UT19D
UkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVuYW1lLCBpbnQgbGluZU51
bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAg
ICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQ1N0cmluZyBmYWlsdXJlTWVzc2Fn
ZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJlYW0gb3V0OworICAgICAg
ICAgICAgb3V0LnByaW50KCJBSVIgVkFMSURBVElPTiBGQUlMVVJFXG4iKTsKKyAgICAgICAgICAg
IG91dC5wcmludCgiICAgICIsIGNvbmRpdGlvbiwgIiAoIiwgZmlsZW5hbWUsICI6IiwgbGluZU51
bWJlciwgIilcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgbWVzc2FnZSwgIlxu
Iik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBBZnRlciAiLCBtX2NvZGUubGFzdFBoYXNl
TmFtZSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmlu
ZygpOworICAgICAgICB9CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAg
ICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIGRhdGFMb2coIkJlZm9yZSAiLCBt
X2NvZGUubGFzdFBoYXNlTmFtZSgpLCAiOlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1fZHVt
cEJlZm9yZSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygiQXQgdGltZSBvZiBmYWlsdXJl
OlxuIik7CisgICAgICAgIGRhdGFMb2cobV9jb2RlKTsKKworICAgICAgICBkYXRhTG9nKGZhaWx1
cmVNZXNzYWdlKTsKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFpbHVyZShmaWxlbmFtZSwg
bGluZU51bWJlciwgZnVuY3Rpb24sIGNvbmRpdGlvbik7CisgICAgICAgIENSQVNIKCk7CisgICAg
fQorICAgIAorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7
Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxpZGF0ZShDb2RlJiBj
b2RlLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQoreworICAgIFZhbGlkYXRlciB2YWxpZGF0ZXIo
Y29kZSwgZHVtcEJlZm9yZSk7CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJWYWxpZGF0ZV9oCisjZGVmaW5lIEFpclZhbGlkYXRl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKwordm9pZCB2YWxpZGF0ZShDb2RlJiwg
Y29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWly
VmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9n
ZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9v
cGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQ0
IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBh
cmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgor
IyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNvZGUKKyAgICBhdHRyX3Jl
YWRlciA6bmFtZSwgOnNwZWNpYWwsIDpvdmVybG9hZHMKKyAgICBhdHRyX2FjY2Vzc29yIDpraW5k
CisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBzcGVjaWFsKQorICAgICAgICBAbmFtZSA9IG5h
bWUKKyAgICAgICAgQHNwZWNpYWwgPSBzcGVjaWFsCisgICAgICAgIEBraW5kID0gOmluc3QKKyAg
ICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBvdmVybG9hZHMgPSBbXQorICAgICAg
ICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQorICAgICAgICBuYW1lWzBdLmRvd25j
YXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBBcmcKKyAgICBhdHRyX3Jl
YWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFsaXplKHJvbGUsIHR5cGUpCisgICAg
ICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5cGUKKyAgICBlbmQKK2VuZAorCitj
bGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1cmUsIDpmb3JtcworCisgICAg
ZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgQHNpZ25hdHVyZSA9IHNp
Z25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3JtcworICAgIGVuZAorZW5kCisKK2NsYXNzIEtp
bmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfYWNjZXNzb3IgOnNwZWNpYWwKKwor
ICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBA
c3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlm
IG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFtZSBhbmQgQHNwZWNpYWwgPT0gb3Ro
ZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBLaW5kLmFyZ0tpbmRz
KGtpbmQpCisgICAgICAgIGlmIGtpbmQgPT0gIkFkZHIiCisgICAgICAgICAgICBbIkFkZHIiLCAi
U3RhY2siLCAiQ2FsbEFyZyJdCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIFtraW5kXQorICAg
ICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBhcmdLaW5kcworICAgICAgICBLaW5kLmFyZ0tp
bmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xhc3MgRm9ybQorICAgIGF0dHJfcmVhZGVyIDpr
aW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0aWFsaXplKGtpbmRzLCBhbHROYW1lKQorICAg
ICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBAYWx0TmFtZSA9IGFsdE5hbWUKKyAgICBlbmQK
K2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5hbWUsIDpsaW5lTnVt
YmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVOdW1iZXIpCisgICAg
ICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVyID0gbGluZU51bWJl
cgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2ZpbGVOYW1lfToje2xp
bmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAgYXR0cl9yZWFkZXIg
Om9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9yaWdpbiwgc3RyaW5n
KQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcgPSBzdHJpbmcKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFRv
a2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAgIGVuZAorICAgIAor
ICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgorICAgIGVuZAorICAg
IAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0gYXQgI3tvcmlnaW59
IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBp
ZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yOiAje3RvX3N9
IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc306
ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisKK2RlZiBsZXgoc3Ry
LCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxlTmFtZSkKKyAgICBy
ZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90IHN0ci5lbXB0eT8K
KyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSopLworICAgICAgICAg
ICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAgICAgICAgICAgICMg
bmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEKKyAgICAgICAgd2hl
biAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9y
aWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAgd2hlbiAvXEEoWyBc
dFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUKKyAgICAgICAgd2hlbiAv
XEFbLDoqXC9dLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZp
bGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJhaXNl
ICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9
LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0fSIKKyAgICAgICAgZW5k
CisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAgICByZXN1bHQKK2VuZAor
CitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFUpfChEKXwoVUQpKVxaLworZW5k
CisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoRyl8KEYpKVxaLworZW5kCisK
K2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChUbXApfChJbW0pfChJbW02NCl8
KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKSlcWi8KK2VuZAorCitkZWYgaXNLZXl3
b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9rZW4pIG9yIGlzS2luZCh0b2tl
bikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRva2VuID09ICJhcyIKK2VuZAor
CitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQShbYS16QS1aMC05X10r
KVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBk
ZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRh
LCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgor
ICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAg
ICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAg
ICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAg
ICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1l
bnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30i
KSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAg
IGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZp
ZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisg
ICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAg
ICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBVRCkiKSB1bmxlc3MgaXNVRChy
ZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBk
ZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBh
cnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxlc3MgaXNHRihyZXN1bHQpCisg
ICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3Vt
ZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3Io
IkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQsIFRtcCwgQWRkciwgSW5kZXgsIFJlbENvbmQsIG9y
IFJlc0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAg
ICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAgICAgcmVzdWx0ID0ge30K
KyAgICAgICAgCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBA
dG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAic3BlY2lhbCIKKyAgICAg
ICAgICAgICAgICBjb25zdW1lKCJzcGVjaWFsIikKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1l
ID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5v
dCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVzdWx0W29wY29kZU5hbWVdCisKKyAg
ICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBPcGNvZGUubmV3KG9wY29kZU5hbWUs
IHRydWUpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgb3Bjb2RlTmFtZSA9IGNv
bnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBpZiByZXN1bHRbb3Bjb2RlTmFtZV0K
KyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gcmVzdWx0W29wY29kZU5hbWVdCisgICAgICAg
ICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2Rl
IikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgICAgIG9wY29kZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgZmFsc2UpCisgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IG9wY29kZQorICAgICAgICAgICAgICAgIGVu
ZAorCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAgICAgICAgICAgICBmb3Jt
cyA9IFtdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgaXNVRCh0b2tlbikK
KyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICByb2xl
ID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIjoiKQorICAg
ICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBlCisgICAgICAgICAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA8PCBBcmcubmV3KHJv
bGUsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5kCisK
KyAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiLyIKKyAgICAgICAgICAgICAgICAgICAgY29u
c3VtZSgiLyIpCisgICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW4uc3RyaW5nCisgICAgICAg
ICAgICAgICAgICAgIHdoZW4gImJyYW5jaCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29k
ZS5raW5kID0gOmJyYW5jaAorICAgICAgICAgICAgICAgICAgICB3aGVuICJ0ZXJtaW5hbCIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOnRlcm1pbmFsCisgICAgICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkJhZCAv
IGRpcmVjdGl2ZSIpCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAg
ICBhZHZhbmNlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBpc0tp
bmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAgICAgICAg
ICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IG5pbAor
ICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxlc3Mga2luZHNbLTFdLm5h
bWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2luZHNbLTFdLnNw
ZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIioi
KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsdE5hbWUg
PSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdyb25nIG51bWJlciBvZiBh
cmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0aCA9PSBzaWduYXR1cmUu
bGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBraW5kLm5hbWUgPT0gIklt
bTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhd
LnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVy
cm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBhcmd1bWVudCIpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9y
IGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwgRm9ybS5u
ZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3Mg
aXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZW5k
CisKKyAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3RoID09IDAKKyAgICAgICAgICAg
ICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisgICAgICAgICAgICAgICAg
ICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAgICAgICAgICAgZW5kCisKKyAg
ICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2FkLm5ldyhzaWduYXR1cmUs
IGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAgICAgICByZXN1bHQKKyAg
ICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXco
SU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMgPSBwYXJzZXIucGFyc2UK
KworJHN0ZGVyci5wdXRzICJHZW5lcmF0aW5nIGNvZGUgZm9yICN7JGZpbGVOYW1lfS4iCisKK2Rl
ZiB3cml0ZUgoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2ZpbGVuYW1lfS5oIiwgInci
KSB7CisgICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIi8vIEdl
bmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmlsZU5hbWV9IC0tIGRvIG5v
dCBlZGl0ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2lmbmRlZiBBaXIje2ZpbGVu
YW1lfV9oIgorICAgICAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQWlyI3tmaWxlbmFtZX1faCIKKwor
ICAgICAgICB5aWVsZCBvdXRwCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAv
LyBBaXIje2ZpbGVuYW1lfV9oIgorICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZSIpIHsKKyAg
ICB8IG91dHAgfAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImVudW0gT3Bjb2RlIDogaW50MTZfdCB7
IgorICAgICRvcGNvZGVzLmtleXMuc29ydC5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAg
ICAgICBvdXRwLnB1dHMgIiAgICAje29wY29kZX0sIgorICAgIH0KKyAgICBvdXRwLnB1dHMgIn07
IgorCisgICAgb3V0cC5wdXRzICJzdGF0aWMgY29uc3QgdW5zaWduZWQgbnVtT3Bjb2RlcyA9ICN7
JG9wY29kZXMua2V5cy5zaXplfTsiCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMzo6QWlyIgorICAgIAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIFdURiB7IgorICAg
IG91dHAucHV0cyAiY2xhc3MgUHJpbnRTdHJlYW07IgorICAgIG91dHAucHV0cyAidm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpPcGNvZGUpOyIKKyAgICBvdXRw
LnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKworIyBGcm9tIGhlcmUgb24sIHdlIGRvbid0
IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIHNpbmNlIHdlJ3JlIHVzaW5nIGEg
cmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKworZGVmIG1hdGNoRm9ybXMob3V0cCwgc3Bl
ZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQor
ICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAorCisgICAgaWYgZmlsdGVyW2Zvcm1zXQor
ICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIGlmIGNvbHVtbkluZGV4ID49IGZvcm1zWzBd
LmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDEKKyAg
ICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAgICAgIHJldHVybgorICAgIGVuZAorICAgIAor
ICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFjaCB7CisgICAgICAgIHwgZm9ybSB8CisgICAg
ICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbkluZGV4XS5uYW1lCisgICAgICAgIGlmIGdyb3Vw
c1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdIDw8IGZvcm0KKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zvcm1dCisgICAgICAgIGVuZAorICAgIH0KKwor
ICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91cHMubGVuZ3RoID09IDEKKyAgICAgICAgbWF0
Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVy
LCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIG91dHAu
cHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltjb2x1bW5JbmRleF19KSB7IgorICAgIGdyb3Vw
cy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwgdmFsdWUgfAorICAgICAgICBvdXRwLnB1dHMg
IiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAgICAgICAgS2luZC5hcmdL
aW5kcyhrZXkpLmVhY2ggeworICAgICAgICAgICAgfCBhcmdLaW5kIHwKKyAgICAgICAgICAgIG91
dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06IgorICAgICAgICB9CisgICAgICAgIG1hdGNo
Rm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1bW5JbmRleCArIDEsIGNvbHVtbkdldHRlciwg
ZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91
dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAg
IH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
IG91dHAucHV0cyAifSIKK2VuZAorCitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQs
IGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPm9wY29kZSkgeyIKKyAgICAk
b3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5w
dXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAg
ICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5l
ZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpIG9yIHNwZWVk
ID09IDpzYWZlKQorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPmFyZ3Mu
c2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIG9wY29kZS5vdmVy
bG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVk
T3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkCisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbmQK
KyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRw
LnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAi
fSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCBzcGVlZCwgaW5z
dCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkgeworICAgICAgICB8
IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAg
ICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBjb2x1
bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGNvbHVtbkluZGV4IHwKKyAgICAg
ICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAg
IGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAg
ICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtCisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0
dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBlbmQKKyAgICB9CitlbmQKKword3JpdGVI
KCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUg
XCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQWlyU3BlY2lhbC5oXCIi
CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7IgorICAgIAorICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wgb3BnZW5IaWRkZW5UcnV0
aCgpIHsgcmV0dXJuIHRydWU7IH0iCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiIKKyAgICBvdXRwLnB1dHMgImlubGluZSBUKiBvcGdlbkhpZGRlblB0cklkZW50aXR5KFQqIHBv
aW50ZXIpIHsgcmV0dXJuIHBvaW50ZXI7IH0iCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIE9QR0VO
X1JFVFVSTih2YWx1ZSkgZG8ge1xcIgorICAgIG91dHAucHV0cyAiICAgIGlmIChvcGdlbkhpZGRl
blRydXRoKCkpXFwiCisgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVybiB2YWx1ZTtcXCIKKyAg
ICBvdXRwLnB1dHMgIn0gd2hpbGUgKGZhbHNlKSIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIEluc3Q6OmZvckVhY2hBcmco
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG1hdGNoSW5z
dE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJs
b2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAi
ZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7IC8vIFRoaXMgaXMgYmFzaWNhbGx5
IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBtb2RlbCBTcGVjaWFsIGFzIGFuIGltbWVk
aWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFyZ3NbMF0uc3BlY2lhbCgpLT5mb3JFYWNo
QXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxiYWNrPihmdW5jdG9yKSk7IgorICAg
ICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUuZWFjaF93aXRoX2luZGV4
IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUg
PSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCisgICAgICAgICAgICAgICAgd2hl
biAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCisgICAgICAgICAgICAgICAg
d2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYiCisgICAgICAgICAgICAg
ICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlRGVmIgorICAgICAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UKKyAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImZ1bmN0
b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2FyZy50eXBlfVApOyIKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAifSIKKworICAg
IG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPiIKKyAgICBvdXRwLnB1
dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9ybShPcGNvZGUgb3Bjb2RlLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJBcmc6
OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyldID0geyBhcmd1bWVudHMuLi4gfTsiCisg
ICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFj
aCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2Rl
Lm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKHNpemVvZi4uLihBcmd1bWVudHMp
KSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG9wY29kZS5v
dmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IgorICAg
ICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeyB8IGNvbHVtbkluZGV4IHwgIm9wZ2Vu
SGlkZGVuUHRySWRlbnRpdHkoa2luZHMpWyN7Y29sdW1uSW5kZXh9XSIgfQorICAgICAgICAgICAg
ICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBw
cm9jIHsKKyAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAg
c3BlY2lhbCA9IChub3QgZm9ybS5raW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLnNwZWNpYWwg
fSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oI3tzcGVjaWFs
fSk7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAs
IDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNr
KQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAg
ICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyAiCisg
ICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBpc1Rlcm1pbmFs
KE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRj
aCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNv
ZGUgfAorICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6dGVybWluYWwgb3Igb3Bjb2RlLmtpbmQg
PT0gOmJyYW5jaAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIK
KyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAgIG91
dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91
dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCit3cml0ZUgoIk9wY29kZUdlbmVyYXRl
ZCIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0SW5s
aW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcInd0Zi9QcmludFN0cmVhbS5oXCIi
CisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJ1c2luZyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyOyIKKyAgICBvdXRwLnB1dHMgInZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisg
ICAgb3V0cC5wdXRzICIgICAgc3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMua2V5cy5l
YWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICBjYXNlICN7
b3Bjb2RlfToiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICBvdXQucHJpbnQoXCIje29wY29k
ZX1cIik7IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuOyIKKyAgICB9CisgICAg
b3V0cC5wdXRzICIgICAgfSIKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVz
cGFjZSBXVEYiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsg
bmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiYm9vbCBJbnN0Ojppc1ZhbGlkRm9ybSgp
IgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9hZEZvcm0ob3V0cCwgOnNh
ZmUsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQsIGZvcm0gfAorICAgICAg
ICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYXJncy5zaXpl
KCkgPCAxKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWzBdLmlzU3BlY2lhbCgpKSIKKyAgICAgICAgICAgIG91
dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVU
VVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKCp0aGlzKSk7IgorICAgICAgICBlbHNlCisg
ICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uID0gZmFsc2UKKyAgICAgICAgICAgIG92ZXJs
b2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMgeworICAgICAgICAgICAgICAgIHwgaW5kZXggfAor
ICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnJvbGUKKyAg
ICAgICAgICAgICAgICB0eXBlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS50eXBlCisgICAg
ICAgICAgICAgICAga2luZCA9IGZvcm0ua2luZHNbaW5kZXhdCisgICAgICAgICAgICAgICAgbmVl
ZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNwZWNpYWwKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBmb3JtIG1hdGNoZXMuIFdlIGRv
bid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJvbGUsIHNpbmNlCisgICAgICAgICAgICAgICAgIyBr
aW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBvbmx5IHRoaW5nIGxlZnQgdG8gdmFsaWRhdGUgaXMg
dGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAgICAjIHRvIHZhbGlkYXRl
IHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAuCisgICAgICAgICAgICAgICAgaWYga2luZC5uYW1l
ID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWyN7aW5k
ZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
Ik9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
fQorICAgICAgICAgICAgaWYgbmVlZHNNb3JlVmFsaWRhdGlvbgorICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKCFpcyN7b3Bjb2RlLm5hbWV9VmFsaWQoKnRoaXMpKSIKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgZW5kCisg
ICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgIGVuZAor
ICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9Igor
CisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4
KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIK
KyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAg
b3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKworICAgICAgICBpZiBvcGNvZGUuc3Bl
Y2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ0luZGV4KSIKKyAgICAgICAgICAg
IG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5hZG1pdHNTdGFjaygqdGhpcywgYXJnSW5kZXgpKTsi
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgU3dpdGNoIG9uIHRoZSBhcmdJbmRleC4KKyAg
ICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdJbmRleCkgeyIKKworICAgICAgICAgICAg
bnVtQXJncyA9IG9wY29kZS5vdmVybG9hZHMubWFwIHsKKyAgICAgICAgICAgICAgICB8IG92ZXJs
b2FkIHwKKyAgICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoCisgICAgICAg
ICAgICB9Lm1heAorICAgICAgICAgICAgCisgICAgICAgICAgICBudW1BcmdzLnRpbWVzIHsKKyAg
ICAgICAgICAgICAgICB8IGFyZ0luZGV4IHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNh
c2UgI3thcmdJbmRleH06IgorCisgICAgICAgICAgICAgICAgIyBDaGVjayBpZiBhbGwgb2YgdGhl
IGZvcm1zIG9mIGFsbCBvZiB0aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywgb3IgZG9uJ3QsIGFkbWl0
IGFuIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAjIGF0IHRoaXMgaW5kZXguIFdlIGV4cGVjdCB0
aGlzIHRvIGJlIGEgdmVyeSBjb21tb24gY2FzZS4KKyAgICAgICAgICAgICAgICBudW1ZZXMgPSAw
CisgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJs
b2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAg
ICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAg
fCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhd
ID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVt
Tm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIE5vdGUgdGhhdCB3ZSBk
ZWxpYmVyYXRlbHkgdGVzdCBudW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3ZSBlbmQgdXAgd2l0aCBu
byBmb3Jtcywgd2Ugd2FudAorICAgICAgICAgICAgICAgICMgdG8gc2F5IHRoYXQgQWRkcmVzcyBp
cyBpbmFkbWlzc2libGUuCisgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAg
ICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BH
RU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICMgTm93IGRvIHRoZSBmdWxsIHRlc3QuCisKKyAgICAgICAgICAgICAgICAgICAgbmVlZE92
ZXJsb2FkU3dpdGNoID0gKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAxKQorCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKworICAgICAgICAgICAgICAgICAg
ICAgICAgIyBBZ2FpbiwgY2hlY2sgaWYgYWxsIG9mIHRoZW0gZG8gd2hhdCB3ZSB3YW50LgorICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgICAgICAgICAg
bnVtTm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAg
ICAgICAgICAgIyBEb24ndCBlbWl0IGFueXRoaW5nLCBqdXN0IGRyb3AgdG8gZGVmYXVsdC4KKyAg
ICAgICAgICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToi
IGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNl
ICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBob3cgd2UgdGVzdCB0aGUgaHlw
b3RoZXNpcyB0aGF0IGNoYW5naW5nIHRoaXMgYXJndW1lbnQgdG8gYW4KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAjIGFkZHJlc3MgeWllbGRzIGEgdmFsaWQgZm9ybS4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGNvbHVtbkluZGV4ID09IGFyZ0luZGV4CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiQXJnOjpBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYXJnc1sje2NvbHVt
bkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZmlsdGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybXMg
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCisKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRHJvcCBkb3duLCBlbWl0IG5vIGNvZGUsIHNp
bmNlIHdlIGNhbm5vdCBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIyBLZWVwIGdvaW5nLgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCA6c2Fm
ZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVkT3Zl
cmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJ9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIK
KyAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
IH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IjsKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgIG91dHAu
cHV0cyAifSIKKworICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIEluc3Q6OmdlbmVy
YXRlKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkiCisgICAg
b3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKGppdCk7IgorICAgIG91
dHAucHV0cyAiVU5VU0VEX1BBUkFNKGNvbnRleHQpOyIKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVs
cGVyczo6SnVtcCByZXN1bHQ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6ZmFz
dCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAg
IGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihh
cmdzWzBdLnNwZWNpYWwoKS0+Z2VuZXJhdGUoKnRoaXMsIGppdCwgY29udGV4dCkpOyIKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgaWYgZm9ybS5hbHROYW1lCisgICAgICAgICAgICAgICAgbWV0
aG9kTmFtZSA9IGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG1ldGhvZE5hbWUgPSBvcGNvZGUubWFzbU5hbWUKKyAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgaWYgb3Bjb2RlLmtpbmQgPT0gOmJyYW5jaAorICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
InJlc3VsdCA9ICIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wcmludCAiaml0
LiN7bWV0aG9kTmFtZX0oIgorCisgICAgICAgICAgICBmb3JtLmtpbmRzLmVhY2hfd2l0aF9pbmRl
eCB7CisgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgaWYg
aW5kZXggIT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICIsICIKKyAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBjYXNlIGtpbmQubmFtZQorICAgICAgICAgICAg
ICAgIHdoZW4gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgaWYgb3ZlcmxvYWQuc2lnbmF0dXJl
W2luZGV4XS50eXBlID09ICJHIgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uZ3ByKCkiCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmZwcigpIgorICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB3aGVuICJJbW0iCisgICAgICAgICAg
ICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTMyKCkiCisg
ICAgICAgICAgICAgICAgd2hlbiAiSW1tNjQiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJp
bnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTY0KCkiCisgICAgICAgICAgICAgICAgd2hl
biAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0u
YXNBZGRyZXNzKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQmFzZUluZGV4KCkiCisgICAgICAg
ICAgICAgICAgd2hlbiAiUmVsQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCisgICAgICAgICAgICAgICAg
d2hlbiAiUmVzQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNSZXN1bHRDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgb3V0cC5wdXRzICIpOyIKKyAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKHJlc3VsdCk7IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5w
dXRzICJSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgInJldHVy
biByZXN1bHQ7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAifSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsNyAr
MTcwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIENvZGVCbG9jayogYWx0ZXJuYXRpdmVGb3JK
ZXR0aXNvbigpOyAgICAKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0ZXJuYXRpdmUoKTsKICAg
ICAKICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWcuaAkocmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcu
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1YmxpYzoKICAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAKICAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZhbGlkKCk7IH0KLSAgICBib29sIG9wZXJh
dG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KIAogICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IGRlbGV0ZWQoKTsgfQpAQCAt
MTcwLDYgKzE2OSw0NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAKKyAgICBjbGFzcyBBbGxSZWdzSXRlcmFibGUgeworICAgIHB1YmxpYzoKKwor
ICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0
ZXJhdG9yKCkgeyB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJhdG9yKFJlZyByZWcpCisg
ICAgICAgICAgICAgICAgOiBtX3JlZ0luZGV4KHJlZy5pbmRleCgpKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWcgb3BlcmF0b3IqKCkgY29uc3QgeyByZXR1
cm4gUmVnOjpmcm9tSW5kZXgobV9yZWdJbmRleCk7IH0KKworICAgICAgICAgICAgaXRlcmF0b3Im
IG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fcmVnSW5kZXgg
PSBSZWc6OmZyb21JbmRleChtX3JlZ0luZGV4KS5uZXh0KCkuaW5kZXgoKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fcmVnSW5kZXggPT0gb3RoZXIubV9yZWdJbmRleDsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAg
ICAgIHVuc2lnbmVkIG1fcmVnSW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWc6OmZpcnN0KCkpOyB9CisgICAgICAg
IGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZygpKTsgfQorICAgIH07
CisKKyAgICBzdGF0aWMgQWxsUmVnc0l0ZXJhYmxlIGFsbCgpIHsgcmV0dXJuIEFsbFJlZ3NJdGVy
YWJsZSgpOyB9CisKIHByaXZhdGU6CiAgICAgc3RhdGljIHVpbnQ4X3QgaW52YWxpZCgpIHsgcmV0
dXJuIDB4ZmY7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0
T2Zmc2V0TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00Miw3ICs0Miw3IEBAIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpSZWdpc3RlckF0T2Zmc2V0TGkK
ICAgICBpZiAob2Zmc2V0QmFzZVR5cGUgPT0gRnJhbWVQb2ludGVyQmFzZWQpCiAgICAgICAgIG9m
ZnNldCA9IC0oc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihudW1iZXJPZlJlZ2lzdGVycykgKiBzaXpl
b2Yodm9pZCopKTsKIAotICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9IFJl
Zzo6bGFzdCgpO3JlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZp
cnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQoKSkgewogICAgICAgICBp
ZiAocmVnaXN0ZXJTZXQuZ2V0KHJlZykpIHsKICAgICAgICAgICAgIGFwcGVuZChSZWdpc3RlckF0
T2Zmc2V0KHJlZywgb2Zmc2V0KSk7CiAgICAgICAgICAgICBvZmZzZXQgKz0gc2l6ZW9mKHZvaWQq
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZz
ZXRMaXN0LmgJKHJldmlzaW9uIDE5MTU4NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnaXN0ZXJBdE9mZnNldExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBw
dWJsaWM6CiAgICAgICAgIG1fcmVnaXN0ZXJzLmNsZWFyKCk7CiAgICAgfQogCi0gICAgc2l6ZV90
IHNpemUoKQorICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBt
X3JlZ2lzdGVycy5zaXplKCk7CiAgICAgfQpAQCAtNjYsNiArNjYsOSBAQCBwdWJsaWM6CiAgICAg
UmVnaXN0ZXJBdE9mZnNldCogZmluZChSZWcpIGNvbnN0OwogICAgIHVuc2lnbmVkIGluZGV4T2Yo
UmVnKSBjb25zdDsgLy8gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91bmQuCiAKKyAgICBWZWN0
b3I8UmVnaXN0ZXJBdE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1
cm4gbV9yZWdpc3RlcnMuYmVnaW4oKTsgfQorICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0Pjo6
Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnMuZW5kKCk7IH0K
KwogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD4gbV9yZWdpc3RlcnM7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAkocmV2aXNpb24g
MTkxNTg2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICBib29sIG9w
ZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7IHJldHVybiBtX3ZlY3Rv
ciA9PSBvdGhlci5tX3ZlY3RvcjsgfQogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdCB7IHJldHVy
biBtX3ZlY3Rvci5oYXNoKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNvbnN0CisgICAgeworICAg
ICAgICBmb3IgKHNpemVfdCBpbmRleCA6IG1fdmVjdG9yLnNldEJpdHMoKSkKKyAgICAgICAgICAg
IGZ1bmN0b3IoUmVnOjpmcm9tSW5kZXgoaW5kZXgpKTsKKyAgICB9CiAgICAgCiBwcml2YXRlOgog
ICAgIHZvaWQgc2V0QW55KFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KSW5kZXg6IFNvdXJjZS9XVEYv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
OTE1ODYpCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsx
LDE5IEBACisyMDE1LTEwLTI0ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAg
ICAgICAgQ3JlYXRlIGEgc3VwZXIgcm91Z2ggcHJvdG90eXBlIG9mIEIzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAyODAKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9NYXRoRXh0cmFzLmg6CisgICAgICAgIChXVEY6OnJh
bmdlc092ZXJsYXApOiBOaWNlIHV0aWxpdHkgZm9yIGNoZWNraW5nIGlmIHJhbmdlcyBvdmVybGFw
LgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOiBBZGQgYSBFTkFCTEUoQjNfSklUKSBmZWF0dXJl
IGZsYWcuCisgICAgICAgICogd3RmL1Njb3BlZExhbWJkYS5oOiBBZGRlZC4gVGhpcyBhbGxvd3Mg
dXMgdG8gZG8gemVyby1hbGxvY2F0aW9uLCB6ZXJvLWNvcHkgZXh0ZXJuIGxhbWJkYXMuCisgICAg
ICAgIChXVEY6OnNjb3BlZExhbWJkYSk6CisgICAgICAgICogd3RmL1NoYXJlZFRhc2suaDoKKyAg
ICAgICAgKFdURjo6Y3JlYXRlU2hhcmVkVGFzayk6CisKIDIwMTUtMTAtMjEgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBGYWN0b3Igb3V0IHRoZSBncmFwaCBub2Rl
IHdvcmtsaXN0cyBmcm9tIERGRyBpbnRvIFdURgpJbmRleDogU291cmNlL1dURi9XVEYueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL1dURi54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvV1RGL1dURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw3IEBA
CiAJCTBGRTQ0NzlEMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFNDQ3OUIxQjdBQUEwMzAwOTQ5OEVC
IC8qIFdvcmRMb2NrLmggKi87IH07CiAJCTBGRUIzRENGMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFy
ZWRUYXNrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovOyB9OwogCQkwRkVCM0RE
MTFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNERDAxQkI3MzY2QjAwOUQ3
QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAqLzsgfTsKKwkJMEZFQzg0QjExQkRBQ0Qz
OTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJk
YS5oICovOyB9OwogCQkwRkVDODRBRjFCRDgyNTMxMDA4MEZGNzQgLyogR3JhcGhOb2RlV29ya2xp
c3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEFFMUJEODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oICovOyB9OwogCQkwRkVE
NjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRp
bnlQdHJTZXQuaCAqLzsgfTsKIAkJMEZGODYwOTUxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJD
b21wYXJpc29uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAqLzsgfTsK
QEAgLTM0NSw2ICszNDYsNyBAQAogCQkwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV29yZExvY2suaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJl
ZFRhc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2hhcmVkVGFzay5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyog
UGFyYWxsZWxWZWN0b3JJdGVyYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGRUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NvcGVkTGFtYmRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGRUM4NEFFMUJEODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBHcmFwaE5vZGVXb3JrbGlzdC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyog
VGlueVB0clNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBUaW55UHRyU2V0
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3
RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQb2ludGVyQ29tcGFyaXNvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODcw
LDYgKzg3Miw3IEBACiAJCQkJMTQ2OTQxOTQxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFp
ci5oICovLAogCQkJCTE0Njk0MTk4MTZFQUIwNDEwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJDRi5j
cHAgKi8sCiAJCQkJMTQ2OTQxOTUxNkVBQUZGODAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpck1hYy5t
bSAqLywKKwkJCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi8s
CiAJCQkJQThBNDczMDYxNTFBODI1QjAwNDEyM0ZGIC8qIFNlZ21lbnRlZFZlY3Rvci5oICovLAog
CQkJCUE4QTQ3MzA3MTUxQTgyNUIwMDQxMjNGRiAvKiBTZW50aW5lbExpbmtlZExpc3QuaCAqLywK
IAkJCQlBOEE0NzMwODE1MUE4MjVCMDA0MTIzRkYgLyogU0hBMS5jcHAgKi8sCkBAIC0xMjQ0LDYg
KzEyNDcsNyBAQAogCQkJCUE4QTQ3NDQ5MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRJZGVudGlm
aWVyRGF0YVB0aHJlYWRzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0QjE1MUE4MjVCMDA0
MTIzRkYgLyogVGhyZWFkaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ0RDE1MUE4MjVC
MDA0MTIzRkYgLyogVGhyZWFkaW5nUHJpbWl0aXZlcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZF
Qzg0QjExQkRBQ0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQThBNDc0NTQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNhZmVSZWZDb3VudGVkLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NTE1MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU3BlY2lm
aWMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55
UHRyU2V0LmggaW4gSGVhZGVycyAqLywKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHJldmlzaW9uIDE5MTU4NikK
KysrIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDggKzEx
NCw5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWID0gVmFs
dWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRyPFY+Ojp2YWx1ZSwgVmFs
dWVUeXBlPjo6dHlwZSB0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxWPjo6UHRyVHlwZSk7CiAK
ICAgICAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZhbHVlKGNvbnN0IFZhbHVlVHlwZSYpOwotICAg
ICAgICAKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hTZXQmKSBjb25zdDsKKwor
ICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rpb24+CisgICAgICAgIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24mKSBjb25zdDsKIAogICAgIHByaXZhdGU6
CiAgICAgICAgIEhhc2hUYWJsZVR5cGUgbV9pbXBsOwpAQCAtMzM3LDEyICszMzgsMTMgQEAgbmFt
ZXNwYWNlIFdURiB7CiAgICAgfSAgCiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFt
ZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJh
dG9yPT0oY29uc3QgSGFzaFNldCYgb3RoZXIpIGNvbnN0CisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
T3RoZXJDb2xsZWN0aW9uPgorICAgIGlubGluZSBib29sIEhhc2hTZXQ8VCwgVSwgVj46Om9wZXJh
dG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rpb24pIGNvbnN0CiAgICAg
ewotICAgICAgICBpZiAoc2l6ZSgpICE9IG90aGVyLnNpemUoKSkKKyAgICAgICAgaWYgKHNpemUo
KSAhPSBvdGhlckNvbGxlY3Rpb24uc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigpOyBpdGVyICE9IGVuZCgp
OyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmICghb3RoZXIuY29udGFpbnMoKml0ZXIpKQorICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIG90aGVyIDogb3RoZXJDb2xsZWN0aW9uKSB7CisgICAgICAg
ICAgICBpZiAoIWNvbnRhaW5zKG90aGVyKSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9M
aXN0RHVtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHJldmlz
aW9uIDE5MTU4NikKKysrIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTUzLDYgKzUzLDI2IEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgUG9pbnRlckxpc3REdW1wIHsKK3B1YmxpYzoKKyAgICBQb2ludGVyTGlzdER1bXAoY29uc3Qg
VCYgbGlzdCwgY29uc3QgY2hhciogY29tbWEpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAg
ICAgICwgbV9jb21tYShjb21tYSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9yICh0eXBlbmFtZSBUOjpj
b25zdF9pdGVyYXRvciBpdGVyID0gbV9saXN0LmJlZ2luKCk7IGl0ZXIgIT0gbV9saXN0LmVuZCgp
OyArK2l0ZXIpCisgICAgICAgICAgICBvdXQucHJpbnQobV9jb21tYSwgcG9pbnRlckR1bXAoKml0
ZXIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVCYgbV9saXN0OworICAgIENvbW1h
UHJpbnRlciBtX2NvbW1hOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KIGNsYXNzIE1hcER1
bXAgewogcHVibGljOgogICAgIE1hcER1bXAoY29uc3QgVCYgbWFwLCBjb25zdCBjaGFyKiBhcnJv
dywgY29uc3QgY2hhciogY29tbWEpCkBAIC04MCw2ICsxMDAsMTIgQEAgTGlzdER1bXA8VD4gbGlz
dER1bXAoY29uc3QgVCYgbGlzdCwgY29ucwogICAgIHJldHVybiBMaXN0RHVtcDxUPihsaXN0LCBj
b21tYSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitQb2ludGVyTGlzdER1bXA8VD4gcG9p
bnRlckxpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKK3sK
KyAgICByZXR1cm4gUG9pbnRlckxpc3REdW1wPFQ+KGxpc3QsIGNvbW1hKTsKK30KKwogdGVtcGxh
dGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcGFyYXRvcj4KIENTdHJpbmcgc29ydGVkTGlzdER1
bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgQ29tcGFyYXRvciYgY29tcGFyYXRvciwgY29uc3QgY2hh
ciogY29tbWEgPSAiLCAiKQogewpJbmRleDogU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkocmV2aXNpb24gMTkxNTg2
KQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MTks
NiArNDE5LDIwIEBAIGlubGluZSBUIGxlZnRTaGlmdFdpdGhTYXR1cmF0aW9uKFQgdmFsdWUKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCisvLyBQYXNzIHJhbmdlcyB3aXRoIHRoZSBtaW4gYmVpbmcg
aW5jbHVzaXZlIGFuZCB0aGUgbWF4IGJlaW5nIGV4Y2x1c2l2ZS4gRm9yIGV4YW1wbGUsIHRoaXMg
c2hvdWxkCisvLyByZXR1cm4gZmFsc2U6CisvLworLy8gICAgIHJhbmdlc092ZXJsYXAoMCwgOCwg
OCwgMTYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wgcmFuZ2VzT3ZlcmxhcChU
IGxlZnRNaW4sIFQgbGVmdE1heCwgVCByaWdodE1pbiwgVCByaWdodE1heCkKK3sKKyAgICBpZiAo
bGVmdE1pbiA8PSByaWdodE1pbiAmJiBsZWZ0TWF4ID4gcmlnaHRNaW4pCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmIChyaWdodE1pbiA8PSBsZWZ0TWluICYmIHJpZ2h0TWF4ID4gbGVmdE1p
bikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNlOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vICNpZm5kZWYgV1RGX01hdGhFeHRyYXNfaApJbmRleDog
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
bGF0Zm9ybS5oCShyZXZpc2lvbiAxOTE1ODYpCisrKyBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTIgKzc3NiwyMCBAQAogI2RlZmluZSBFTkFCTEVfQ09O
Q1VSUkVOVF9KSVQgMQogI2VuZGlmCiAKKy8qIFRoZSBCMyBjb21waWxlciBpcyBhbiBleHBlcmlt
ZW50YWwgYmFja2VuZCB0aGF0IGlzIHN0aWxsIGluIGRldmVsb3BtZW50LiBXZSB3aWxsIGtlZXAg
aXQgYnVpbGRpbmcKKyAgIG9uIERhcndpbi94ODYtNjQgZm9yIG5vdywgdGhvdWdoIGl0IGlzIHVu
dXNlZCBleGNlcHQgZm9yIHRlc3RzLiAqLworI2lmIE9TKERBUldJTikgJiYgQ1BVKFg4Nl82NCkK
KyNkZWZpbmUgRU5BQkxFX0IzX0pJVCAxCisjZW5kaWYKKwogLyogSWYgdGhlIGJhc2VsaW5lIGpp
dCBpcyBub3QgYXZhaWxhYmxlLCB0aGVuIGRpc2FibGUgdXBwZXIgdGllcnMgYXMgd2VsbDogKi8K
ICNpZiAhRU5BQkxFKEpJVCkKLSN1bmRlZiBFTkFCTEVfREZHX0pJVCAgICAgIC8qIFVuZGVmIHNv
IHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0LiAqLwotI3VuZGVmIEVOQUJMRV9GVExfSklUICAgICAg
LyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVkZWZpbmUgaXQuICovCisjdW5kZWYgRU5BQkxFX0RG
R19KSVQKKyN1bmRlZiBFTkFCTEVfRlRMX0pJVAorI3VuZGVmIEVOQUJMRV9CM19KSVQKICNkZWZp
bmUgRU5BQkxFX0RGR19KSVQgMAogI2RlZmluZSBFTkFCTEVfRlRMX0pJVCAwCisjZGVmaW5lIEVu
YWJsZV9CM19KSVQgMAogI2VuZGlmCiAKIC8qIENvdW50cyB1c2VzIG9mIHdyaXRlIGJhcnJpZXJz
IHVzaW5nIHNhbXBsaW5nIGNvdW50ZXJzLiBCZSBzdXJlIHRvIGFsc28KSW5kZXg6IFNvdXJjZS9X
VEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1Njb3Bl
ZExhbWJkYS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlZExhbWJkYV9oCisjZGVmaW5lIFNj
b3BlZExhbWJkYV9oCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBZb3UgY2FuIHVzZSBTY29wZWRM
YW1iZGEgdG8gZWZmaWNpZW50bHkgcGFzcyBsYW1iZGFzIHdpdGhvdXQgYWxsb2NhdGluZyBtZW1v
cnkgb3IgcmVxdWlyaW5nCisvLyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlvbiBvZiB0aGUgY2FsbGVl
LiBUaGUgY2FsbGVlIHNob3VsZCBiZSBkZWNsYXJlZCBhczoKKy8vCisvLyB2b2lkIGZvbyhjb25z
dCBTY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+Jik7CisvLworLy8gVGhlIGNh
bGxlciBqdXN0IGRvZXM6CisvLworLy8gdm9pZCBmb28oc2NvcGVkTGFtYmRhPE15VGhpbmdzKiAo
aW50LCBTdHVmZiYpPihbJl0gKGludCB4LCBTdHVmZiYgeSkgLT4gTXlUaGluZ3MqIHsgYmxhaCB9
KSk7CisvLworLy8gTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIGZvbygpIG5vdCBlc2NhcGluZyB0
aGUgbGFtYmRhLiBUaGUgbGFtYmRhIGlzIG9ubHkgdmFsaWQgd2hpbGUgZm9vKCkgaXMKKy8vIG9u
IHRoZSBzdGFjayAtIGhlbmNlIHRoZSBuYW1lIFNjb3BlZExhbWJkYS4KKwordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBTY29wZWRMYW1iZGE7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2NvcGVkTGFt
YmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6CisgICAgU2NvcGVk
TGFtYmRhKFJlc3VsdFR5cGUgKCppbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLikg
PSBudWxscHRyLCB2b2lkKiBhcmcgPSBudWxscHRyKQorICAgICAgICA6IG1faW1wbChpbXBsKQor
ICAgICAgICAsIG1fYXJnKGFyZykKKyAgICB7CisgICAgfQorICAgIAorICAgIFJlc3VsdFR5cGUg
b3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFy
Z3VtZW50cykuLi4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1bHRUeXBlICgqbV9pbXBs
KSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLik7CisgICAgdm9pZCAqbV9hcmc7Cit9Owor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGNsYXNz
IFNjb3BlZExhbWJkYUZ1bmN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBl
bmFtZS4uLiBBcmd1bWVudFR5cGVzLCB0eXBlbmFtZSBGdW5jdG9yPgorY2xhc3MgU2NvcGVkTGFt
YmRhRnVuY3RvcjxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKSwgRnVuY3Rvcj4gOiBwdWJs
aWMgU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7CitwdWJsaWM6
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkRnVuY3Rvcj4KKyAgICBTY29wZWRMYW1iZGFG
dW5jdG9yKFBhc3NlZEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IFNjb3BlZExhbWJkYTxS
ZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4oaW1wbEZ1bmN0aW9uLCB0aGlzKQorICAgICAg
ICAsIG1fZnVuY3RvcihzdGQ6OmZvcndhcmQ8UGFzc2VkRnVuY3Rvcj4oZnVuY3RvcikpCisgICAg
eworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVzdWx0VHlwZSBpbXBsRnVuY3Rpb24o
dm9pZCogYXJndW1lbnQsIEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAg
ICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rvcio+KGFyZ3VtZW50KS0+
bV9mdW5jdG9yKAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3Vt
ZW50cykuLi4pOworICAgIH0KKworICAgIEZ1bmN0b3IgbV9mdW5jdG9yOworfTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorU2NvcGVkTGFtYmRh
RnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJkYShGdW5jdG9yJiYgZnVu
Y3RvcikKK3sKKyAgICByZXR1cm4gU2NvcGVkTGFtYmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1
bmN0b3I+KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdURgorCit1c2luZyBXVEY6OlNjb3BlZExhbWJkYTsKK3VzaW5nIFdURjo6c2NvcGVkTGFt
YmRhOworCisjZW5kaWYgLy8gU2NvcGVkTGFtYmRhX2gKKwpJbmRleDogU291cmNlL1dURi93dGYv
U2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2suaAko
cmV2aXNpb24gMTkxNTg2KQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3b3JraW5n
IGNvcHkpCkBAIC03OSw2ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgewogICAgIH0KIAorICAgIFNo
YXJlZFRhc2tGdW5jdG9yKEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6IG1fZnVuY3RvcihX
VEY6Om1vdmUoZnVuY3RvcikpCisgICAgeworICAgIH0KKwogcHJpdmF0ZToKICAgICBSZXN1bHRU
eXBlIHJ1bihBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBvdmVycmlkZQogICAgIHsKQEAg
LTExMCw2ICsxMTUsMTEgQEAgUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hh
cgogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9u
VHlwZSwgRnVuY3Rvcj4oZnVuY3RvcikpOwogfQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25U
eXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3Jl
YXRlU2hhcmVkVGFzayhGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KFdURjo6bW92ZShm
dW5jdG9yKSkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264236</attachid>
            <date>2015-10-28 13:18:32 -0700</date>
            <delta_ts>2015-10-28 14:12:31 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>668692</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc1MiBA
QAorMjAxNS0xMC0yNCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBi
My9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3Vt
ZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBcmd1bWVudFJlZ1ZhbHVlOjphY2NlcHRzKToK
KyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmFyZ3VtZW50UmVnKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OkFyZ3VtZW50UmVnVmFsdWUpOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6QmFzaWNCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjp+QmFzaWNC
bG9jayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAgICAo
SlNDOjpCMzo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6cmVtb3ZlUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNC
bG9jazo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6ZGVlcER1bXApOgorICAgICAg
ICAqIGIzL0IzQmFzaWNCbG9jay5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Js
b2NrOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OkJhc2ljQmxvY2s6Omxhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9j
azo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6Om51bVByZWRlY2Vzc29y
cyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nvcik6CisgICAgICAg
IChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6
QmFzaWNCbG9jazo6ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Jsb2Nr
RHVtcDo6RGVlcEJhc2ljQmxvY2tEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBCYXNpY0Js
b2NrRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpkZWVwRHVtcCk6CisgICAgICAgICog
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkJhc2lj
QmxvY2s6OmFwcGVuZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpudW1TdWNj
ZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcik6CisgICAg
ICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxv
Y2s6OnN1Y2Nlc3NvckJsb2Nrcyk6CisgICAgICAgICogYjMvQjNCYXNpY0Jsb2NrVXRpbHMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6
OkIzOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpyZXBsYWNlUHJlZGVj
ZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAq
IGIzL0IzQmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lh
bC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpC
Mzo6Q2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgor
ICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChK
U0M6OkIzOjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNr
U3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVw
RHVtcEltcGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tW
YWx1ZTo6fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNoZWNrVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
Q2hlY2tWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb21tb24uY3BwOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUik6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGREdW1wSVJB
dEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6OkIzOjpzaG91bGRWYWxpZGF0ZUlSKToKKyAgICAg
ICAgKEpTQzo6QjM6OnNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSk6CisgICAgICAgIChKU0M6
OkIzOjpzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSk6CisgICAgICAgICogYjMvQjNDb21tb24uaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppczY0Qml0KToKKyAgICAgICAgKEpTQzo6QjM6Omlz
MzJCaXQpOgorICAgICAgICAqIGIzL0IzQ29tbXV0YXRpdml0eS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM0NvbW11dGF0aXZpdHkuaDog
QWRkZWQuCisgICAgICAgICogYjMvQjNDb21wYXJpc29uTWF0Y2hlci5wYXR0ZXJuczogQWRkZWQu
CisgICAgICAgICogYjMvQjNDb25zdDMyVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkNvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25z
dDMyVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1ZS5oOiBBZGRl
ZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0NjRWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6Q29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNv
bnN0NjRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2
NFZhbHVlOjpDb25zdDY0VmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91
YmxlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1ZTo6ZHVtcE1ldGEp
OgorICAgICAgICAqIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkNvbnN0RG91YmxlVmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6dmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3REb3VibGVWYWx1
ZTo6Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9C
M0NvbnRyb2xWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW5jeUNsYXNzLmNw
cDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0Iz
RnJlcXVlbmN5Q2xhc3MuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNGcmVxdWVudGVkQmxvY2su
aDogQWRkZWQuCisgICAgICAgICogYjMvQjNHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6Z2VuZXJhdGVUb0Fpcik6Cisg
ICAgICAgICogYjMvQjNHZW5lcmF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVl
bnRlZEJsb2NrOjpHZW5lcmljRnJlcXVlbnRlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6R2Vu
ZXJpY0ZyZXF1ZW50ZWRCbG9jazo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5l
cmljRnJlcXVlbnRlZEJsb2NrOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6QjM6Okdl
bmVyaWNGcmVxdWVudGVkQmxvY2s6OmJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNG
cmVxdWVudGVkQmxvY2s6OmZyZXF1ZW5jeSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJl
cXVlbnRlZEJsb2NrOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0luZGV4TWFwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFwKToKKyAgICAgICAgKEpTQzo6QjM6
OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6Om9wZXJhdG9y
W10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmFkZCk6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpJ
bmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgor
ICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRl
eFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjppbmRpY2VzKToKKyAg
ICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAgICAgICAgKiBiMy9CM0xvd2VyVG9B
aXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6TG93ZXJU
b0Fpcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmFkZHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjps
b2FkQWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmltbU9yVG1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YXBwZW5kQmluT3ApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlBcHBlbmRTdG9yZUJpbk9wKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjpBZGRyZXNzU2VsZWN0b3IpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3QpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdFJvb3RMYXRl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjph
Y2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRy
ZXNzU2VsZWN0b3I6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OmFjY2VwdE9wZXJhbmRzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5k
c0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0
b3I6OnRyeUFkZFNoaWZ0MSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFk
ZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkU2hpZnQyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93
ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlBZGQpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeURpcmVjdCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFjY2VwdFJvb3QpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRSb290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OmFjY2VwdEludGVybmFscyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2Vy
VG9BaXI6OmFjY2VwdEludGVybmFsc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjphY2NlcHRPcGVyYW5kcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OmFjY2VwdE9wZXJhbmRzTGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUxvYWQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlBZGQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFkZExvYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZUFuZExvYWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlTdG9yZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAgICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6
CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzTG93
ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM01lbW9yeVZhbHVl
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICog
YjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVlOjpvZmZzZXQpOgorICAg
ICAgICAoSlNDOjpCMzo6TWVtb3J5VmFsdWU6Ok1lbW9yeVZhbHVlKToKKyAgICAgICAgKiBiMy9C
M09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzQ2hlY2tNYXRo
KToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6ZGF0
YSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OlBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAg
ICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjp+UGF0Y2hwb2ludFNwZWNpYWwpOgorICAg
ICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcpOgorICAgICAgICAo
SlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpCMzo6
UGF0Y2hwb2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvQjNQYXRjaHBvaW50U3BlY2lh
bC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFZhbHVlOjp+UGF0Y2hwb2ludFZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIz
L0IzUGF0Y2hwb2ludFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2lu
dFZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpC
Mzo6UGhhc2VTY29wZTo6flBoYXNlU2NvcGUpOgorICAgICAgICAqIGIzL0IzUGhhc2VTY29wZS5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpQcm9jZWR1cmUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjp+UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2sp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToKKyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIz
OjpQcm9jZWR1cmU6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3Jb
XSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjppdGVyYXRvcjo6ZmluZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAg
IChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24p
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlv
bjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpz
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRv
cltdKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKiBi
My9CM1Byb2NlZHVyZUlubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3RLaW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90S2luZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmNwcDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjph
Y2NlcHRzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpieXRlU2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6a2luZCk6CisgICAgICAgIChKU0M6OkIz
OjpTdGFja1Nsb3RWYWx1ZTo6b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
U2xvdFZhbHVlOjpzZXRPZmZzZXRGcm9tRlApOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OlN0YWNrU2xvdFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6ZHVtcCk6CisgICAgICAgICogYjMvQjNT
dGFja21hcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFja21hcCk6
CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6c2V0T3BhcXVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN0YWNrbWFwOjpvcGFxdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldE9w
YXF1ZUluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpvcGFxdWVJbmRleCk6Cisg
ICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y29uc3RyYWluKToKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrbWFwOjpjbG9iYmVyKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpjbG9iYmVy
ZWQpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OnNldEdlbmVyYXRvcik6CisgICAgICAg
ICogYjMvQjNTdGFja21hcFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0
YWNrbWFwU3BlY2lhbDo6U3RhY2ttYXBTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNr
bWFwU3BlY2lhbDo6flN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21h
cFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tt
YXBTcGVjaWFsOjpmb3JFYWNoQXJnSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNw
ZWNpYWw6OmlzVmFsaWRJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6
YWRtaXRzU3RhY2tJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6YXBw
ZW5kUmVwc0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBGb3JB
cmcpOgorICAgICAgICAqIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAq
IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246OlN1Y2Nlc3NvckNvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpC
Mzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNz
b3JDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNvbGxl
Y3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3Nv
ckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlN1
Y2Nlc3NvckNvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6
QjM6OlN1Y2Nlc3NvckNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nl
c3NvckNvbGxlY3Rpb246OmVuZCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpkdW1wKToKKyAgICAgICAgKiBiMy9C
M1N3aXRjaENhc2UuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpTd2l0
Y2hDYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaENhc2U6Om9wZXJhdG9yIGJvb2wpOgor
ICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6Y2FzZVZhbHVlKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OnRhcmdldCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjp0
YXJnZXRCbG9jayk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6On5Td2l0Y2hWYWx1ZSk6CisgICAgICAgIChKU0M6
OkIzOjpTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6YXBwZW5kQ2FzZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZHVtcE1l
dGEpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKToKKyAgICAg
ICAgKiBiMy9CM1N3aXRjaFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Om51bUNhc2VW
YWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6Y2FzZVZhbHVlcyk6CisgICAgICAgIChKU0M6OkIz
OjpTd2l0Y2hWYWx1ZTo6ZmFsbFRocm91Z2gpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmF0KToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OlN3
aXRjaFZhbHVlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNo
VmFsdWU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVl
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmJl
Z2luKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjplbmQpOgorICAgICAgICAqIGIz
L0IzVHlwZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAg
ICAgKiBiMy9CM1R5cGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjppc0ludCk6CisgICAg
ICAgIChKU0M6OkIzOjppc0Zsb2F0KToKKyAgICAgICAgKEpTQzo6QjM6OnBvaW50ZXJUeXBlKToK
KyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VXBzaWxvblZhbHVlOjp+VXBzaWxvblZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2ls
b25WYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzVXBzaWxvblZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VXBzaWxvblZhbHVlOjphY2NlcHRzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6cGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6VXBzaWxvblZhbHVlKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5jcHA6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VXNlQ291bnRzOjpVc2VDb3VudHMpOgorICAgICAgICAoSlNDOjpC
Mzo6VXNlQ291bnRzOjp+VXNlQ291bnRzKToKKyAgICAgICAgKiBiMy9CM1VzZUNvdW50cy5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6b3BlcmF0b3JbXSk6CisgICAgICAg
ICogYjMvQjNWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6dmFsaWRhdGUp
OgorICAgICAgICAqIGIzL0IzVmFsaWRhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6On5WYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eSk6CisgICAgICAgIChKU0M6OkIz
OjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmR1bXAp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6Cisg
ICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0RvdWJsZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6
OmR1bXBNZXRhKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp0eXBlRm9yKToKKyAgICAgICAg
KiBiMy9CM1ZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFjY2VwdHMp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Om9yaWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZTo6Y2hpbGQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnR5cGUp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFpclR5cGUpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmNoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpWYWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXAp
OgorICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
aGFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6Omhhc0ludCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQp
OgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZh
bHVlOjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJl
cC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAg
ICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToK
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
Y29uc3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6
b2Zmc2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2Fpcjog
QWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0Fp
ckFsbG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fp
ci9BaXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29u
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3Bl
cmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6
OmlzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpp
c1JlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpm
cFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZv
ckVhY2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUlu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hh
c2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAg
ICAgICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkJhc2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpk
ZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2sp
OgorICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdp
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFz
aWNCbG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVu
ZEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNl
c3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBC
YXNpY0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVt
cDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBi
My9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNDYWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0Nh
bGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFs
Ojppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNT
dGFjayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJl
Z2lzdGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWly
Q29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0lu
ZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICog
YjMvYWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5l
d1RtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJh
bWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVy
cyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tT
bG90c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xv
dHNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tT
bG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2lu
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVu
ZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlv
bik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJh
dG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNp
YWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2Rl
OjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OnNwZWNpYWxzKToKKyAgICAgICAgKiBiMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpnZW5lcmF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpckdlbmVyYXRlLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OmhhbmRsZUNhbGxlZVNhdmVzKToKKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlvblNldC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmV4ZWN1dGUpOgorICAgICAg
ICAqIGIzL2Fpci9BaXJJbnNlcnRpb25TZXQuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
SW5zZXJ0aW9uU2V0Ojpjb2RlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0
OjphcHBlbmRJbnNlcnRpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6
Omluc2VydEluc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6Omluc2Vy
dCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6SW5zdDo6ZHVtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3QuaDogQWRkZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Okluc3QpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpJbnN0OjpvcGNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNo
VG1wRmFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6Rm9yRWFjaDxUbXA+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Rm9y
RWFjaDxBcmc+Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFj
aCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Omhhc1NwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpJbnN0OjpleHRyYUNsb2JiZXJlZFJlZ3MpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpJbnN0OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6aXNTaGlmdFZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aXNMc2hpZnQzMlZhbGlk
KToKKyAgICAgICAgKiBiMy9haXIvQWlyTGl2ZW5lc3MuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkxpdmVuZXNzOjpMaXZlbmVzcyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxp
dmVuZXNzOjpsaXZlQXRIZWFkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Omxp
dmVBdFRhaWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpM
b2NhbENhbGMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjps
aXZlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OkxvY2FsQ2FsYzo6dGFrZUxp
dmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjpleGVjdXRl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyT3Bjb2RlLm9wY29kZXM6IEFkZGVkLgorICAgICAgICAq
IGIzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlBoYXNlU2NvcGU6OlBoYXNlU2NvcGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpQaGFzZVNj
b3BlOjp+UGhhc2VTY29wZSk6CisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUuaDogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Z3Byc0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OmZwcnNJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpy
ZWdzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKiBiMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0
eS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEdQUkluZm8+OjppblByaW9yaXR5T3JkZXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpS
ZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz46OmluUHJpb3JpdHlPcmRlcik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6
OlNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjp+U3BlY2lhbCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6Om5hbWUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTcGVjaWFsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6ZGVl
cER1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpEZWVwU3BlY2lhbER1bXA6OkRlZXBTcGVjaWFsRHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkRlZXBTcGVjaWFsRHVtcDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OnNwaWxsRXZlcnl0aGluZyk6CisgICAg
ICAgICogYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9h
aXIvQWlyU3RhY2tTbG90LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNr
U2xvdDo6c2V0T2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpkZWVwRHVtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6U3RhY2tTbG90KToKKyAgICAgICAgKiBi
My9haXIvQWlyU3RhY2tTbG90Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFj
a1Nsb3Q6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjppbmRleCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6YWxpZ25tZW50KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6U3RhY2tTbG90Ojp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6
b2Zmc2V0RnJvbUZQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xvdER1bXA6
OkRlZXBTdGFja1Nsb3REdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFN0YWNrU2xv
dER1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpkZWVwRHVtcCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6
OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9BaXJUbXAuaDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEZv
ckluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEZvckluZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6VG1wOjppc0dQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OlRtcDo6aXNGUFIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzUmVnKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncHIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6OmZwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6cmVnKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpoYXNUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6Z3BUbXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnBUbXBJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6dG1wSW5kZXgpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzQWxpdmUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJh
dG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Om9wZXJhdG9yIT0pOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6VG1wOjpoYXNoKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpl
bmNvZGVHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6ZW5jb2RlRlBSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVHUFRt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZW5jb2RlRlBUbXApOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
VG1wOjppc0VuY29kZWRGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNFbmNvZGVk
R1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRGUFIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjppc0VuY29kZWRGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZGVjb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjpkZWNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcEhhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXBIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpclRtcElubGluZXMuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OlRtcDo6VG1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVmFsaWRhdGUuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6dmFsaWRhdGUpOgorICAgICAgICAqIGIzL2Fpci9BaXJWYWxp
ZGF0ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYjogQWRk
ZWQuCisgICAgICAgICogYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy90ZXN0YjMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmNvbXBpbGVB
bmRSdW4pOgorICAgICAgICAoSlNDOjpCMzo6dGVzdDQyKToKKyAgICAgICAgKEpTQzo6QjM6OnJ1
bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBqaXQvUmVnLmg6CisgICAgICAgIChKU0M6
OlJlZzo6aW5kZXgpOgorICAgICAgICAoSlNDOjpSZWc6OmlzU2V0KToKKyAgICAgICAgKEpTQzo6
UmVnOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6UmVnOjppc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6
aXRlcmF0b3IpOgorICAgICAgICAoSlNDOjpSZWc6OkFsbFJlZ3NJdGVyYWJsZTo6aXRlcmF0b3I6
Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjppdGVy
YXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OlJlZzo6QWxsUmVnc0l0ZXJhYmxlOjplbmQpOgorICAg
ICAgICAoSlNDOjpSZWc6OmFsbCk6CisgICAgICAgIChKU0M6OlJlZzo6aW52YWxpZCk6CisgICAg
ICAgIChKU0M6OlJlZzo6b3BlcmF0b3IhKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJBdE9mZnNldExpc3QuY3BwOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6
UmVnaXN0ZXJBdE9mZnNldExpc3QpOgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlz
dC5oOgorICAgICAgICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6YmVnaW4pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlckF0T2Zmc2V0TGlzdDo6ZW5kKToKKyAgICAgICAgKiBqaXQvUmVnaXN0
ZXJTZXQuaDoKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Om9wZXJhdG9yPT0pOgorICAgICAg
ICAoSlNDOjpSZWdpc3RlclNldDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0Ojpm
b3JFYWNoKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJTZXQ6OnNldEFueSk6CisKIDIwMTUtMTAt
MjcgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIg
SW5zcGVjdG9yOiBSZW1vdmUgdW51c2VkIC8gZHVwbGljYXRlZCBYSFIgdGltZWxpbmUgaW5zdHJ1
bWVudGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFr
ZQkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgVlBBVEggPSBcCiAKIFBZ
VEhPTiA9IHB5dGhvbgogUEVSTCA9IHBlcmwKK1JVQlkgPSBydWJ5CiAKIEphdmFTY3JpcHRDb3Jl
X1NDUklQVFNfRElSID0gJChKYXZhU2NyaXB0Q29yZSkvU2NyaXB0cwogCkBAIC01OSw2ICs2MCw5
IEBAIGFsbCA6IFwKICAgICBMZXhlci5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5oIFwKICAg
ICBSZWdFeHBKaXRUYWJsZXMuaCBcCisgICAgQjNMb3dlcmluZ01hdGNoZXIuaCBcCisgICAgQjNB
ZGRyZXNzTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBcCiAjCiAKICMgSmF2YVNjcmlwdCBi
dWlsdGlucy4KQEAgLTI2Miw2ICsyNjYsMTQgQEAgSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJ
T05TID0gXAogSlNSZXBsYXlJbnB1dHMuaCA6ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJRklDQVRJ
T05TKSAkKElOUFVUX0dFTkVSQVRPUl9TQ1JJUFRTKQogCSQoUFlUSE9OKSAkKEphdmFTY3JpcHRD
b3JlKS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5IC0tb3V0cHV0
RGlyIC4gLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgJChJTlBVVF9HRU5FUkFUT1JfU1BFQ0lG
SUNBVElPTlMpCiAKK0IzTG93ZXJpbmdNYXRjaGVyLmg6ICQoSmF2YVNjcmlwdENvcmUpL2IzL2dl
bmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9CM0xvd2VyaW5n
TWF0Y2hlci5wYXR0ZXJucworCSQoUlVCWSkgJF4gCitCM0FkZHJlc3NNYXRjaGVyLmg6ICQoSmF2
YVNjcmlwdENvcmUpL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRD
b3JlKS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXgorCitBaXJPcGNv
ZGUuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIgJChKYXZh
U2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgorCiAjIER5
bmFtaWNhbGx5LWRlZmluZWQgdGFyZ2V0cyBhcmUgbGlzdGVkIGJlbG93LiBTdGF0aWMgdGFyZ2V0
cyBiZWxvbmcgdXAgdG9wLgogCiBhbGwgOiBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTI1LDYg
KzI1LDcgQEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2llcyA9ICgK
KwkJCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQk1RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQk1RDZCMkE1MTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
IAkJCQk1RDZCMkE1NTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5jeSAqLywK
QEAgLTY4NSw2ICs2ODYsMTI3IEBACiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdK
SVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsKIAkJMEZF
QTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIyQyAvKiBE
RkdKSVRDb2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBNYWNyb0Fz
c2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICovOyB9Owor
CQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI0MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovOyB9OworCQkwRkVDODRGRjFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNTFCREFDREFDMDA4MEZGNzQgLyog
QjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTAwMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi87
IH07CisJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MDIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2tJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2lj
QmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi87IH07
CisJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZFQzg1MDUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3Bl
Y2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3Bl
Y2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi87IH07CisJCTBGRUM4
NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ2hlY2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLzsgfTsKKwkJ
MEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi87IH07CisJCTBGRUM4NTBCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29tbXV0YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuaCAqLzsg
fTsKKwkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMzMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTBFMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Qz
MlZhbHVlLmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRW
YWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRDNTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovOyB9OworCQkw
RkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM2MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVDODUxMTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91Ymxl
VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERv
dWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmggKi87IH07
CisJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDOTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxNDFCREFDREFD
MDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xW
YWx1ZS5oICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lD
bGFzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi87IH07CisJ
CTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQzFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9OworCQkwRkVDODUxNzFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50
ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTE5
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5l
cmF0ZS5oICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJl
cXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2Nr
LmggKi87IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFwLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMTFCREFD
REFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9OworCQkwRkVDODUxQzFCREFDREFDMDA4
MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQuaCAqLzsg
fTsKKwkJMEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMzFCREFDREFD
MDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsKKwkJMEZFQzg1MUUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5o
ICovOyB9OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENTFC
REFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTIwMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1v
cnlWYWx1ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAq
LzsgfTsKKwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBGRUM4NTI0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi87IH07CisJCTBG
RUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1MjYxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERDMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTI3MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFs
dWUuY3BwICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovOyB9OworCQkw
RkVDODUyOTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQg
LyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggKi87IH07
CisJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMTFCREFDREFDMDA4
MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkwRkVDODUyQzFCREFDREFDMDA4MEZG
NzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5oICovOyB9
OworCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMzFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTJFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
bWFwLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU1
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87IH07CisJCTBGRUM4NTMwMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFCREFDREFDMDA4MEZGNzQgLyogQjNT
dGFja21hcFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUzMTFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5o
ICovOyB9OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU4
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovOyB9OworCQkwRkVDODUz
MzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNw
cCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVC
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi87IH07CisJCTBGRUM4NTM2
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsKKwkJMEZFQzg1MzcxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNl
LmNwcCAqLzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUUx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovOyB9OworCQkwRkVDODUzOTFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0
Y2hWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRj
aFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkVDODRGMDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovOyB9OworCQkwRkVD
ODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1R5
cGUuY3BwICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMjFCREFD
REFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUu
Y3BwICovOyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEY0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovOyB9OworCQkwRkVDODUzRjFC
REFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNl
Q291bnRzLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291
bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKKwkJMEZFQzg1NDEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
aWRhdGUuY3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0
RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1NDMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3Bw
ICovOyB9OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1NDUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLzsg
fTsKKwkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkwRkVDODU0NzFCREFDREFDMDA4MEZG
NzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLzsgfTsK
KwkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDgxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovOyB9OworCQkwRkVDODU2RTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFs
bG9jYXRlU3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFy
Zy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLzsgfTsKKwkJMEZFQzg1NzAxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oICovOyB9
OworCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QzFCREFDREM3
MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTcyMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9j
ay5oICovOyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFs
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVD
ODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RjFCREFDREM3MDA4MEZGNzQg
LyogQWlyQ0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTc1MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLzsgfTsKKwkJMEZF
Qzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJD
b2RlLmggKi87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVk
QmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLzsgfTsKKwkJ
MEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi87IH07CisJ
CTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi87IH07CisJCTBGRUM4NTdCMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NjFCREFDREM3MDA4MEZGNzQg
LyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9OworCQkwRkVDODU3QzFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5k
bGVDYWxsZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuY3BwICov
OyB9OworCQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1OTFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBGRUM4NTdGMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAq
LzsgfTsKKwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVCMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggKi87IH07
CisJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUQxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCAq
LzsgfTsKKwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVGMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTg1MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJS
ZWdpc3RlclByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclJlZ2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9y
aXR5LmggKi87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYy
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1ODgxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFs
LmggKi87IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi87IH07CisJ
CTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY1MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsgfTsKKwkJMEZFQzg1OEIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tT
bG90LmNwcCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xv
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1
NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovOyB9OworCQkwRkVDODU4RDFC
REFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3Bw
ICovOyB9OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2OTFCREFDREM3MDA4
MEZGNzQgLyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovOyB9Owor
CQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkIxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0
IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLzsgfTsK
KwkJMEZFQzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU5MjFCREIxRTEwMDA4
MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLzsgfTsKKwkJMEZFQzg1QTMxQkRCNUNGMTAwODBG
Rjc0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZvdW5kYXRp
b24uZnJhbWV3b3JrICovOyB9OworCQkwRkVDODVBNDFCREI1Q0YxMDA4MEZGNzQgLyogSmF2YVNj
cmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRDb3JlLmZy
YW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVBRTFC
REI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLzsgfTsKKwkJMEZFQzg1QjMxQkRFRDk1NzAw
ODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJW
YWx1ZS5oICovOyB9OworCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25T
ZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg1QjQxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsKKwkJMEZF
Qzg1QkExQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCNTFCRTE0NjJGMDA4MEZGNzQg
LyogQjNJbnNlcnRpb25TZXQuaCAqLzsgfTsKKwkJMEZFQzg1QkIxQkUxNDYyRjAwODBGRjc0IC8q
IEIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0
SW5saW5lcy5oICovOyB9OworCQkwRkVDODVCQzFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VT
dHJlbmd0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODVCNzFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAgKi87IH07
CisJCTBGRUM4NUJEMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCODFCRTE0NjJG
MDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oICovOyB9OwogCQkwRkVENjdCOTFCMjYyNTZE
MDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAv
KiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkVENjdCQTFCMjYyNTZE
MDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCODFCMjYyNTZEMDA2NkNFMTUgLyog
REZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi87IH07CiAJCTBGRUU5ODQxMUE4ODY1QjcwMDc1
NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFyYXJn
c0ZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE4MzksNiArMTk2MSwxMyBAQAogCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRkNFRkFC
NTE4MDVENjE2MDA0NzJDRTQ7CiAJCQlyZW1vdGVJbmZvID0gbGx2bUZvckpTQzsKIAkJfTsKKwkJ
MEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
KwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IDA4
NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlw
ZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3
NDsKKwkJCXJlbW90ZUluZm8gPSB0ZXN0YjM7CisJCX07CiAJCTBGRjkyMkQyMTRGNDZCMkYwMDQx
QTI0RSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFD
MDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTgwLDYgKzI3MDksMTI2IEBACiAJCTBGRUEw
QTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdK
SVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyog
QjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNTFCREFDREFDMDA4MEZG
NzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrLmg7IHBh
dGggPSBiMy9CM0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrVXRpbHMuaDsgcGF0aCA9IGIzL0IzQmFz
aWNCbG9ja1V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNCbG9ja1dvcmtsaXN0Lmg7IHBhdGggPSBiMy9CM0Jsb2NrV29ya2xpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQ2hlY2tTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q2hlY2tTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tT
cGVjaWFsLmg7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNDaGVja1ZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M0NvbW1vbi5jcHA7IHBhdGggPSBiMy9CM0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbW1vbi5oOyBwYXRoID0gYjMvQjNDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0NvbW11dGF0aXZpdHkuY3BwOyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29tbXV0YXRpdml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Nv
bW11dGF0aXZpdHkuaDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb25zdDMyVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDMyVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdDMyVmFsdWUuaDsgcGF0aCA9
IGIzL0IzQ29uc3QzMlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0Nv
bnN0NjRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM2MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdDY0VmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZhbHVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDOTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb250cm9sVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNDb250cm9sVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb250cm9sVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjND
b250cm9sVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb250cm9s
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3Mu
Y3BwOyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3MuaDsgcGF0
aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9C
M0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRD
RTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM0dlbmVyYXRlLmNwcDsgcGF0aCA9IGIzL0IzR2VuZXJhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQg
LyogQjNHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVy
YXRlLmg7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljRnJlcXVlbnRlZEJs
b2NrLmg7IHBhdGggPSBiMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbmRleE1hcC5oOyBwYXRoID0g
YjMvQjNJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREMjFC
REFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0luZGV4U2V0Lmg7IHBhdGggPSBiMy9CM0luZGV4U2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9B
aXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNMb3dlclRvQWly
LmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlclRvQWlyLmg7IHBhdGggPSBiMy9CM0xv
d2VyVG9BaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTWVtb3J5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNN
ZW1vcnlWYWx1ZS5oOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcGNvZGUuY3BwOyBwYXRoID0g
YjMvQjNPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREODFC
REFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNPcGNvZGUuaDsgcGF0aCA9IGIzL0IzT3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbi5jcHA7IHBhdGggPSBi
My9CM09yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM09yaWdpbi5oOyBwYXRoID0gYjMvQjNPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRjaHBvaW50
U3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBv
aW50U3BlY2lhbC5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRj
aHBvaW50VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRj
aHBvaW50VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBv
aW50VmFsdWUuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQaGFzZVNjb3BlLmNw
cDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQaGFzZVNjb3BlLmg7IHBhdGggPSBiMy9CM1BoYXNl
U2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzUHJvY2VkdXJlLmNwcDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJv
Y2VkdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlLmg7
IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlSW5saW5lcy5oOyBwYXRoID0gYjMv
QjNQcm9jZWR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXAuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrbWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3Rh
Y2ttYXAuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmNw
cDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmg7IHBh
dGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5oOyBwYXRoID0gYjMvQjNTdGFj
a1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNTdGFja1Ns
b3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0IzU3VjY2Vzc29yQ29sbGVj
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRDFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzU3dpdGNoQ2FzZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNT
d2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoQ2Fz
ZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuY3BwOyBwYXRoID0g
YjMvQjNTd2l0Y2hWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuaDsgcGF0aCA9IGIzL0IzU3dpdGNoVmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1R5
cGUuY3BwOyBwYXRoID0gYjMvQjNUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1R5cGUuaDsgcGF0aCA9IGIzL0IzVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNVcHNpbG9u
VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVcHNpbG9uVmFsdWUuaDsgcGF0
aCA9IGIzL0IzVXBzaWxvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1VzZUNvdW50cy5jcHA7IHBhdGggPSBiMy9CM1VzZUNv
dW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1VzZUNvdW50cy5oOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWxpZGF0ZS5jcHA7IHBh
dGggPSBiMy9CM1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNWYWxpZGF0ZS5oOyBwYXRoID0gYjMvQjNWYWxpZGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1ZhbHVlLmg7IHBhdGggPSBiMy9CM1ZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlSW5saW5lcy5o
OyBwYXRoID0gYjMvQjNWYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZVJlcC5jcHA7IHBhdGggPSBiMy9CM1Zh
bHVlUmVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNWYWx1ZVJlcC5oOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVN0
YWNrLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRl
U3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFj
ay5oOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBcmcuY3BwOyBwYXRoID0gYjMvYWly
L0FpckFyZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyQXJnLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJhc2ljQmxvY2suY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmg7IHBhdGggPSBiMy9haXIvQWly
QmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0RTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ0Nh
bGxTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJDQ2FsbFNwZWNp
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTAxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNvZGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJD
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUyMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9haXIvQWlyRnJlcXVlbnRlZEJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWly
R2VuZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGUu
aDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsg
cGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU5MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlySW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckluc3QuY3Bw
OyBwYXRoID0gYjMvYWlyL0Fpckluc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlySW5zdElu
bGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3MuaDsgcGF0aCA9IGIz
L2Fpci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1
RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQ
aGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlyUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlU2NvcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQ
cmlvcml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpclJlZ2lzdGVyUHJpb3JpdHkuaDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEFpclNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNwZWNpYWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGVj
aWFsLmg7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwaWxsRXZlcnl0aGlu
Zy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZl
cnl0aGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xv
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTdGFja1Nsb3Qu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tTbG90Lmg7IHBhdGggPSBiMy9h
aXIvQWlyU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY4
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyVG1wLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJUbXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1w
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRtcC5oOyBwYXRoID0gYjMv
YWlyL0FpclRtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJUbXBJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyVG1wSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyog
QWlyVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
VmFsaWRhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpclZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclZhbGlkYXRlLmg7IHBhdGgg
PSBiMy9haXIvQWlyVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1OTIxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZWQuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckdlbmVyYXRlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NUFEMUJE
QjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RiMzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKKwkJMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0YjMuY3BwOyBwYXRoID0gYjMvdGVzdGIzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0
IC8qIEIzQ29uc3RQdHJWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0NvbnN0UHRyVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3RQdHJWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRp
b25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNJbnNlcnRp
b25TZXQuY3BwOyBwYXRoID0gYjMvQjNJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODVCNTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbnNlcnRpb25TZXQuaDsgcGF0
aCA9IGIzL0IzSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NUI2MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbnNlcnRpb25TZXRJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM0luc2VydGlvblNldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5jcHA7IHBh
dGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5oOyBwYXRoID0gYjMv
QjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVENjdC
NzFCMjYyNTZEMDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0NvbnN0YW50SG9pc3RpbmdQaGFzZS5j
cHA7IHBhdGggPSBkZmcvREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjgxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50
SG9pc3RpbmdQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdDb25z
dGFudEhvaXN0aW5nUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdDb25zdGFudEhvaXN0aW5nUGhhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkz
IC8qIFNldHVwVmFyYXJnc0ZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNldHVwVmFyYXJnc0ZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0zODAx
LDYgKzQwNTAsMTUgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNz
aW5nID0gMDsKIAkJfTsKKwkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0IC8qIEZyYW1ld29ya3Mg
Ki8gPSB7CisJCQlpc2EgPSBQQlhGcmFtZXdvcmtzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9u
TWFzayA9IDIxNDc0ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBMzFCREI1Q0YxMDA4
MEZGNzQgLyogRm91bmRhdGlvbi5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLywKKwkJCQkwRkVD
ODVBNDFCREI1Q0YxMDA4MEZGNzQgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1l
d29ya3MgKi8sCisJCQkpOworCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9
IDA7CisJCX07CiAJCTBGRjkyMkM2MTRGNDZCMTMwMDQxQTI0RSAvKiBGcmFtZXdvcmtzICovID0g
ewogCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxkUGhhc2U7CiAJCQlidWlsZEFjdGlvbk1hc2sg
PSAyMTQ3NDgzNjQ3OwpAQCAtMzg3MCw2ICs0MTI4LDcgQEAKIAkJCQkxNDEyMTEyMDBBNDg3OTND
MDA0ODAyNTUgLyogbWluaWRvbSAqLywKIAkJCQkxNEJENTlCRjBBM0U4RjkwMDBCQUY1OUMgLyog
dGVzdGFwaSAqLywKIAkJCQk2NTExMjMwNTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAq
LywKKwkJCQkwRkVDODVBRDFCREI1Q0YxMDA4MEZGNzQgLyogdGVzdGIzICovLAogCQkJKTsKIAkJ
CW5hbWUgPSBQcm9kdWN0czsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC0zODkwLDYg
KzQxNDksNyBAQAogCQkJCUE3QzIyNUNDMTM5OTgxRjEwMEZGMTY2MiAvKiBLZXl3b3JkTG9va3Vw
R2VuZXJhdG9yLnB5ICovLAogCQkJCTE0MzJFQkQ3MEEzNENBRDQwMDcxN0I5RiAvKiBBUEkgKi8s
CiAJCQkJOTY4OENCMTIwRUQxMkI0RTAwMUQ2NDlGIC8qIGFzc2VtYmxlciAqLywKKwkJCQkwRkVD
ODRCMjFCREFDRDVFMDA4MEZGNzQgLyogYjMgKi8sCiAJCQkJQTU0Q0YyRUExODRFQTczOTAwMjM3
RjE5IC8qIGJpbmRpbmdzICovLAogCQkJCUE3RDgwMTlGMTg4MEQ2NkUwMDI2QzM5QiAvKiBidWls
dGlucyAqLywKIAkJCQk5NjlBMDc4RjBFRDFEM0FFMDBGMUY2ODEgLyogYnl0ZWNvZGUgKi8sCkBA
IC00MTAzLDYgKzQzNjMsMTQwIEBACiAJCQluYW1lID0gZnRsOwogCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKIAkJfTsKKwkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovID0gewor
CQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODRCMzFCREFDRDg4
MDA4MEZGNzQgLyogYWlyICovLAorCQkJCTBGRUM4NEI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Fy
Z3VtZW50UmVnVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEI1MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0FyZ3VtZW50UmVnVmFsdWUuaCAqLywKKwkJCQkwRkVDODRCNjFCREFDREFDMDA4MEZGNzQgLyog
QjNCYXNpY0Jsb2NrLmNwcCAqLywKKwkJCQkwRkVDODRCNzFCREFDREFDMDA4MEZGNzQgLyogQjNC
YXNpY0Jsb2NrLmggKi8sCisJCQkJMEZFQzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNC
bG9ja0lubGluZXMuaCAqLywKKwkJCQkwRkVDODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNp
Y0Jsb2NrVXRpbHMuaCAqLywKKwkJCQkwRkVDODRCQTFCREFDREFDMDA4MEZGNzQgLyogQjNCbG9j
a1dvcmtsaXN0LmggKi8sCisJCQkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tT
cGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODRCQzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1Nw
ZWNpYWwuaCAqLywKKwkJCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVl
LmNwcCAqLywKKwkJCQkwRkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0QkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCAqLywKKwkJ
CQkwRkVDODRDMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCAqLywKKwkJCQkwRkVDODRD
MTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCAqLywKKwkJCQkwRkVDODRD
MjFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggKi8sCisJCQkJMEZFQzg0QzMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDNDFC
REFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDNTFCREFD
REFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM2MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovLAorCQkJCTBGRUM4NEM3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwICovLAorCQkJCTBGRUM4NEM4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuaCAqLywKKwkJCQkwRkVDODVCMjFCREVE
OTU3MDA4MEZGNzQgLyogQjNDb25zdFB0clZhbHVlLmggKi8sCisJCQkJMEZFQzg0QzkxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRDQTFCREFDREFD
MDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCAqLywKKwkJCQkwRkVDODRDQjFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi8sCisJCQkJMEZFQzg0Q0MxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuaCAqLywKKwkJCQkwRkVDODRDRDFCREFDREFDMDA4
MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODRDRTFCREFDREFDMDA4
MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8sCisJCQkJMEZFQzg0Q0YxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzR2VuZXJhdGUuaCAqLywKKwkJCQkwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggKi8sCisJCQkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzSW5kZXhNYXAuaCAqLywKKwkJCQkwRkVDODREMjFCREFDREFDMDA4MEZGNzQgLyogQjNJ
bmRleFNldC5oICovLAorCQkJCTBGRUM4NUI0MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlv
blNldC5jcHAgKi8sCisJCQkJMEZFQzg1QjUxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9u
U2V0LmggKi8sCisJCQkJMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0
SW5saW5lcy5oICovLAorCQkJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9B
aXIuY3BwICovLAorCQkJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIu
aCAqLywKKwkJCQkwRkVDODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAg
Ki8sCisJCQkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuaCAqLywK
KwkJCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICovLAorCQkJCTBG
RUM4NEQ4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5oICovLAorCQkJCTBGRUM4NEQ5MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8sCisJCQkJMEZFQzg0REExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzT3JpZ2luLmggKi8sCisJCQkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFNwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4NERDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0REQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRERTFCREFDREFDMDA4
MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCAqLywKKwkJCQkwRkVDODRERjFCREFDREFDMDA4
MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCAqLywKKwkJCQkwRkVDODRFMDFCREFDREFDMDA4MEZG
NzQgLyogQjNQaGFzZVNjb3BlLmggKi8sCisJCQkJMEZFQzg0RTExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUHJvY2VkdXJlLmNwcCAqLywKKwkJCQkwRkVDODRFMjFCREFDREFDMDA4MEZGNzQgLyogQjNQ
cm9jZWR1cmUuaCAqLywKKwkJCQkwRkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1
cmVJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNl
U3RyZW5ndGguY3BwICovLAorCQkJCTBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVj
ZVN0cmVuZ3RoLmggKi8sCisJCQkJMEZFQzg0RTQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXAuY3BwICovLAorCQkJCTBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmgg
Ki8sCisJCQkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNw
cCAqLywKKwkJCQkwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwu
aCAqLywKKwkJCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNw
cCAqLywKKwkJCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmgg
Ki8sCisJCQkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90VmFsdWUuY3Bw
ICovLAorCQkJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlv
bi5oICovLAorCQkJCTBGRUM4NEVEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3Bw
ICovLAorCQkJCTBGRUM4NEVFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCAqLywK
KwkJCQkwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgKi8sCisJ
CQkJMEZFQzg0RjAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuaCAqLywKKwkJCQkw
RkVDODRGMTFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCAqLywKKwkJCQkwRkVDODRGMjFC
REFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi8sCisJCQkJMEZFQzg0RjMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVXBzaWxvblZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRGNDFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGNTFCREFDREFDMDA4MEZGNzQg
LyogQjNVc2VDb3VudHMuY3BwICovLAorCQkJCTBGRUM4NEY2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1VzZUNvdW50cy5oICovLAorCQkJCTBGRUM4NEY3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlk
YXRlLmNwcCAqLywKKwkJCQkwRkVDODRGODFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5o
ICovLAorCQkJCTBGRUM4NEY5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlLmNwcCAqLywKKwkJ
CQkwRkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovLAorCQkJCTBGRUM4NEZC
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oICovLAorCQkJCTBGRUM4NEZDMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmNwcCAqLywKKwkJCQkwRkVDODRGRDFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oICovLAorCQkJCTBGRUM4NUFFMUJEQjVENUUwMDgwRkY3
NCAvKiB0ZXN0YjMuY3BwICovLAorCQkJKTsKKwkJCW5hbWUgPSBiMzsKKwkJCXNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7CisJCX07CisJCTBGRUM4NEIzMUJEQUNEODgwMDgwRkY3NCAvKiBhaXIgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTBGRUM4NTQ4MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNrLmNwcCAqLywKKwkJCQkwRkVDODU0OTFC
REFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oICovLAorCQkJCTBGRUM4NTRBMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcuY3BwICovLAorCQkJCTBGRUM4NTRCMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJBcmcuaCAqLywKKwkJCQkwRkVDODU0QzFCREFDREM3MDA4MEZGNzQgLyogQWly
QmFzaWNCbG9jay5jcHAgKi8sCisJCQkJMEZFQzg1NEQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJh
c2ljQmxvY2suaCAqLywKKwkJCQkwRkVDODU0RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxT
cGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODU0RjFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxT
cGVjaWFsLmggKi8sCisJCQkJMEZFQzg1NTAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuY3Bw
ICovLAorCQkJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8sCisJCQkJ
MEZFQzg1NTIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJ
CTBGRUM4NTUzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8sCisJCQkJMEZF
Qzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi8sCisJCQkJMEZFQzg1OTIx
QkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi8sCisJCQkJMEZFQzg1NTUxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi8sCisJCQkJMEZFQzg1NTYx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCAqLywKKwkJCQkwRkVD
ODU1NzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCAqLywKKwkJCQkw
RkVDODU1ODFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCAqLywKKwkJCQkw
RkVDODU1OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi8sCisJCQkJMEZF
Qzg1NUExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuY3BwICovLAorCQkJCTBGRUM4NTVCMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi8sCisJCQkJMEZFQzg1NUMxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc3RJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1NUQxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckxpdmVuZXNzLmggKi8sCisJCQkJMEZFQzg1NUUxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clBoYXNlU2NvcGUuY3BwICovLAorCQkJCTBGRUM4NTVGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQ
aGFzZVNjb3BlLmggKi8sCisJCQkJMEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lz
dGVyUHJpb3JpdHkuY3BwICovLAorCQkJCTBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJS
ZWdpc3RlclByaW9yaXR5LmggKi8sCisJCQkJMEZFQzg1NjIxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clNwZWNpYWwuY3BwICovLAorCQkJCTBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVj
aWFsLmggKi8sCisJCQkJMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0
aGluZy5jcHAgKi8sCisJCQkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZl
cnl0aGluZy5oICovLAorCQkJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Ns
b3QuY3BwICovLAorCQkJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3Qu
aCAqLywKKwkJCQkwRkVDODU2ODFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLywKKwkJ
CQkwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi8sCisJCQkJMEZFQzg1NkEx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElubGluZXMuaCAqLywKKwkJCQkwRkVDODU2QjFCREFD
REM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwICovLAorCQkJCTBGRUM4NTZDMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5oICovLAorCQkJKTsKKwkJCW5hbWUgPSBhaXI7CisJCQlz
b3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkwRkY0MjcyRTE1OEVCQ0NFMDA0Q0I5RkYg
LyogZGlzYXNzZW1ibGVyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9
ICgKQEAgLTYwODksNiArNjQ4Myw3IEBACiAJCQkJMEYxRkU1MUMxOTIyQTNCQzAwNjk4N0M1IC8q
IEFib3J0UmVhc29uLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFMzBGM0E4M0MxMDBGODQ3
MTAgLyogQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1NUYw
RjUxNEQxMDYzQzAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTJBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1RUE3MEU5MTlGNUIxMDEwMDk4RjVFQyAvKiBBbHRlcm5hdGVEaXNwYXRjaGFibGVBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0OEQxOTExNzcyMzY1QjAwQzY1QTVGIC8qIEFQSUNh
bGxiYWNrRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0U1MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBBUElDYXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYxMTcsOCArNjUxMiwxMCBAQAog
CQkJCUE1RUE3MEU4MTlGNUIxMDEwMDk4RjVFQyAvKiBBdWdtZW50YWJsZUluc3BlY3RvckNvbnRy
b2xsZXJDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyNjc4RjhGMUEwMzEwMDkwMDZBMzA2
RCAvKiBCYXNpY0Jsb2NrTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4M0FDMEU2
REI4QzkwMDQ3NzVBNCAvKiBCYXRjaGVkVHJhbnNpdGlvbk9wdGltaXplci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlv
bi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY2NzM5RDIxM0JGREU3MTAwMjNEODdDIC8qIEJpZ0lu
dGVnZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjRCMjcyMUE3ODRCQUYwMDZFNEU2NiAvKiBC
aW5hcnlTd2l0Y2guaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThFMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJUbXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0VDMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBCb29sZWFuT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUEwODYyMDE4MkI3QTA0
MDBGNkQ4NTEgLyogQnJlYWtwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODAxQTUxODgw
RDY2RTAwMjZDMzlCIC8qIEJ1aWx0aW5FeGVjdXRhYmxlcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02
MTMzLDYgKzY1MzAsNyBAQAogCQkJCTk5REEwMEE0MUJENTk5MzEwMEY0NTc1QyAvKiBidWlsdGlu
c19tb2RlbC5weSBpbiBIZWFkZXJzICovLAogCQkJCTk5REEwMEE1MUJENTk5MzEwMEY0NTc1QyAv
KiBidWlsdGluc190ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQk0MURFQTEzMjFCOUYz
MTYzMDA2RDY1REQgLyogQnVpbHRpblV0aWxzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUx
MDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTlFNzI5NDBCMTkwRjA1MTQwMDFBOTFCNSAvKiBCdW5kbGVQYXRoLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkI3RjM5NzE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5ODE1RUQ4RTQ2MDBGMTY3QjIgLyogQnV0dGVyZmx5SW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02MTQzLDYgKzY1NDEsNyBAQAogCQkJCTBGMkREODBCMUFCM0Q4NTgw
MEJCQjhFOCAvKiBCeXRlY29kZUtpbGxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkZDQUUxMzE3
QTlDMjRFMDAzNEM3MzUgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjY2NkVDMDE4MzU2NkY5MDBEMDE3RjEgLyogQnl0ZWNvZGVMaXZlbmVzc0FuYWx5
c2lzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTE0RjIxOTE4QjNFMTY3
MDA5OEZGOEIgLyogQnl0ZWNvZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjg4NUUxMTE4NDlB
M0JFMDBGMUUzRkEgLyogQnl0ZWNvZGVVc2VEZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGODAy
M0VBMTYxMzgzMkIwMEEwQkE0NSAvKiBCeVZhbEluZm8uaCBpbiBIZWFkZXJzICovLApAQCAtNjE3
Niw5ICs2NTc1LDExIEBACiAJCQkJMEYwQjgzQTcxNEJDRjUwNzAwODg1QjRGIC8qIENvZGVUeXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTMyNDM5ODE4NTZBNDg5MDAyRUQ2OTIgLyogQ29tYmlu
ZWREb21haW5zLmpzb24gaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNGMzBFMTZGNUNEMDBCMzQ0
NjAgLyogQ29tbW9uSWRlbnRpZmllcnMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NUJBMUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYx
NUYxNUYxNEI3QTczRTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNjU1M0EzMzIxN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlv
bnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21w
YWN0SklUQ29kZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MkMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUHJvY2VkdXJlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QTNBODE3OTc0MzJE
MDBFODkzQzAgLyogQ29tcGlsYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThD
M0Y0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
OTZCNzMxRDFCREEwOEVGMDAzMzFCODQgLyogSlNHbG9iYWxPYmplY3QubHV0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTYxODYsOCArNjU4NywxMCBAQAogCQkJCTBGNkZDNzUxMTk2MTEwQTgwMEUxRDAy
RCAvKiBDb21wbGV4R2V0U3RhdHVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRCMkNFQTE3NDg5
NkM3MDA3QjNDMUIgLyogQ29uY3VycmVudEpJVExvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDM0Y1MEUxNkY1Q0QwMEIzNDQ2MCAvKiBjb25maWcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTg4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNDQ4MzZFNzEzMkRBN0JFMDA1QkU3ODUgLyogQ29uc2VydmF0aXZlUm9vdHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1M0NFMDhBMThCQzIxQzMwMEJFREY3NiAvKiBDb25zb2xlQ2xpZW50Lmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwODFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1Zh
bHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3QTE4OUIwNTEwMDA2MzMyMzEgLyogQ29u
c29sZU1lc3NhZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE5MUJEQTA2ODAwMDMzMUI4
NCAvKiBCb29sZWFuUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzQ0UwODYx
OEJDMUE1NjAwQkVERjc2IC8qIENvbnNvbGVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLApAQCAt
NjIwMiw2ICs2NjA1LDcgQEAKIAkJCQlDMkZDOUJEMzE2NjQ0REZCMDA4MTBEMzMgLyogQ29waWVk
QmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkVBQTNGQTE0OUE4MzVFMDBGQ0Ux
MTIgLyogQ29waWVkU3BhY2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyQzhEMDJEMTRBM0M2RTAw
MDU3OEU2NSAvKiBDb3BpZWRTcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTI0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3
QzExQUQxQkMzODYyQzAwQzc0Q0RCIC8qIENvcHlCYXJyaWVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjVBNTJEMDE3QURENzE3MDA4RUNCMkQgLyogQ29weVRva2VuLmggaW4gSGVhZGVycyAqLywK
IAkJCQlDMjIzOUQxODE2MjYyQkREMDA1QUM1RkQgLyogQ29weVZpc2l0b3IuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjIxMyw2ICs2NjE3LDcgQEAKIAkJCQk5OTU5RTkyQjFCRDE3RkE0MDAxQUE0MTMg
LyogY3NzbWluLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJMkExMTEyNDYxOTJGQ0U3OTAwNUVFMThE
IC8qIEN1c3RvbUdldHRlclNldHRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNEIxNDYw
Q0Q2RTAwMTMxRjhGIC8qIERhdGFGb3JtYXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMkI2NkRGMTdCNkI1QUIwMEE3QUUzRiAvKiBEYXRhVmlldy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkNEMjAzNEEwRTE3MTM1RTAwMkM3RTgyIC8qIERhdGVDb25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJNDEzNTlDRjMwRkREODlBRDAwMjA2MTgwIC8qIERhdGVDb252ZXJzaW9uLmgg
aW4gSGVhZGVycyAqLywKQEAgLTYyMzMsNiArNjYzOCw3IEBACiAJCQkJQTcwNEQ5MDMxN0EwQkFB
ODAwNkJBNTU0IC8qIERGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MDREOTA0MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2MjAxNzcxNDNGQ0QzRjAwNjhCNzdDIC8qIERGR0Fi
c3RyYWN0VmFsdWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcwMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJBcmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDNFNDAyMUI2MThBQUYwMEM4MEUx
RSAvKiBERkdBZGFwdGl2ZUluZmVycmVkUHJvcGVydHlWYWx1ZVdhdGNocG9pbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGMThEM0QwMUI1NUE2RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVj
dHVyZVdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjZFMTZCMTRERjNGMTYwMEI3
QjJFNCAvKiBERkdBZGphY2VuY3lMaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyNDMsNyArNjY0
OSw5IEBACiAJCQkJMEYyREQ4MTQxQUIzRDhCRTAwQkJCOEU4IC8qIERGR0FyZ3VtZW50c1V0aWxp
dGllcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0ODUzMjIxODc3NTA1NjAwODNCNjg3IC8qIERG
R0FyaXRoTW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwNUMzQjQxNjgzQ0Y5MjAwQkFGNDVC
IC8qIERGR0FycmF5aWZ5U2xvd1BhdGhHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
RUM4NTE3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEY2Mzk0ODUxNUU0ODExQjAwNkE1OTdDIC8qIERGR0FycmF5TW9kZS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3RDlBMjk1MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0
cmFjdFN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2NkVDNzE4MzU2NzJCMDBEMDE3RjEg
LyogREZHQXZhaWxhYmlsaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCOUNFMzE5RDBCQTdE
MDBCMUQxQjUgLyogREZHQXZhaWxhYmlsaXR5TWFwLmggaW4gSGVhZGVycyAqLywKQEAgLTYyNTMs
NiArNjY2MSw3IEBACiAJCQkJQTdEODlDRjQxN0EwQjhDQzAwNzczQUQ4IC8qIERGR0Jsb2NrSW5z
ZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGQzE5QURBNDEwMDA2QUM3MkEg
LyogREZHQmxvY2tNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZEMTlBREE0MTAwMDZB
QzcyQSAvKiBERkdCbG9ja01hcElubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGQzNDQ0ZFMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1NldC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZCRjE1OEQxOUI3QTUzMTAwNjk1REQwIC8qIERGR0Jsb2NrU2V0SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NEMDAxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2Nr
V29ya2xpc3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjI5Miw4ICs2NzAxLDEwIEBACiAJCQkJMEY2
NkUxNkMxNERGM0YxNjAwQjdCMkU0IC8qIERGR0VkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
RDlBMjk2MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdFZGdlRG9taW5hdGVzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzk4NkQ1NzE3QTBCQjFFMDBBOTVERDAgLyogREZHRWRnZVVzZXNTdHJ1Y3R1cmUu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTcyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNDFBREYwOTAxMDBFRDc5MkMgLyog
REZHRXBvY2guaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQkMwQUU4MTQ5NkM3QzcwMEQ0RkJERCAv
KiBERkdFeGl0UHJvZmlsZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzhBOTc3
NTE3OTczOEI4MDA5REY3NDQgLyogREZHRmFpbGVkRmluYWxpemVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0JGRjNDMDE3OTg2ODk0MDAwMkY0NjIgLyogREZHRmlsdHJhdGlvblJlc3VsdC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzcxNzk3MzhCODAwOURGNzQ0IC8qIERGR0ZpbmFsaXpl
ci5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzIzLDYgKzY3MzQsNyBAQAogCQkJCTYyRjJBQTM4MUIw
QkVERTMwMDYxMEM3QSAvKiBERkdMYXp5Tm9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEOUEy
OTgxN0EwQkM3NDAwRUUyNjE4IC8qIERGR0xJQ01QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzlDNEIxNUUxQkEyMTU4RjAwRkQ1OTJFIC8qIERGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0
aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg2MUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJSZWdpc3RlclByaW9yaXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGQzE3QTBC
OENDMDA3NzNBRDggLyogREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkYwRjE5QjE2QjcyOUZBMDA1REY5NUIgLyogREZHTG9uZ0xpdmVkU3RhdGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3NjdCNUI2MTdBMEI5NjUwMDYzRDk0MCAvKiBERkdMb29wUHJlSGVh
ZGVyQ3JlYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzMxLDYgKzY3NDMsNyBAQAog
CQkJCTBGMkJEQzQ1MTUyMjgwMUIwMENEODkxMCAvKiBERkdNaW5pZmllZEdyYXBoLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJFODkyRDE2RDAyQkFGMDA5RTRGRDIgLyogREZHTWluaWZpZWRJRC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDYxNTIyODAyMDAwQ0Q4OTEwIC8qIERGR01pbmlm
aWVkTm9kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTQxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29udHJvbFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMTQzNjFBREYwOTAxMDBF
RDc5MkMgLyogREZHTW92SGludFJlbW92YWxQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZG
MkNENUMxQjYxQTRGODAwNDk1NUE4IC8qIERGR011bHRpR2V0QnlPZmZzZXREYXRhLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkMzQ0QwMjE5QURBNDExMDA2QUM3MkEgLyogREZHTmFpdmVEb21pbmF0
b3JzLmggaW4gSGVhZGVycyAqLywKQEAgLTYzNDksNiArNjc2Miw3IEBACiAJCQkJMEZDMDk3NkEx
NDY4QTZGNzAwQ0YyNDQyIC8qIERGR09TUkV4aXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMjM1
QkVDMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGQjkyMUMxNkQwMkYxMTAwNTVBNURCIC8qIERGR09TUkV4aXRDb21waWxhdGlvbkluZm8u
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNr
U2xvdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMwOTc3MTE0NjkzQUY1MDBDRjI0NDIg
LyogREZHT1NSRXhpdENvbXBpbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRC
MEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFk
ZXJzICovLApAQCAtNjM2Niw2ICs2NzgwLDggQEAKIAkJCQkwRkZDOTIxNjFCOTRGQjNFMDA3MURE
NjYgLyogREZHUHJvcGVydHlUeXBlS2V5LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkIxNzY2MzE5
NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNB
MUJGQTFBOUVDQjdEMDAwREUwMUEgLyogREZHUHV0U3RhY2tTaW5raW5nUGhhc2UuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTZFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0YWNr
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQzFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRl
eFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFQzlERDExMzI4REY4MjAwMkIyQUQ3IC8qIERG
R1JlZ2lzdGVyQmFuay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkNDRkMxOEE2MDA3MDAwMUEy
N0Y4IC8qIERGR1NhZmVwb2ludC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3QTQyNDMxN0EwQkJG
RDAwQThEQjgxIC8qIERGR1NhZmVUb0V4ZWN1dGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjM5MCw2
ICs2ODA2LDcgQEAKIAkJCQkwRkQ4QTMyODE3RDUxRjU3MDBDQTJDNDAgLyogREZHVGllclVwQ2hl
Y2tJbmplY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMkExN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR1RvRlRMRGVmZXJyZWRDb21waWxhdGlvbkNhbGxiYWNrLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRkQ4QTMyQzE3RDUxRjU3MDBDQTJDNDAgLyogREZHVG9GVExGb3JPU1JFbnRy
eURlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
N0UxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZFNzIxMUUxOTNCOUM1OTAwMzFGNkVEIC8qIERGR1RyYW5zaXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNjM5NDNGMTVDNzVGMTkwMDZBNTk3QyAvKiBERkdUeXBlQ2hlY2tIb2lzdGlu
Z1BoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJFMEY3NzE2QzFEQjEyMDA4MkM1RTggLyog
REZHVW5pZmljYXRpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDAxLDYgKzY4MTgsNyBA
QAogCQkJCTBGNjIwMTc0MTQzRkNEMzMwMDY4Qjc3QyAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGRERCRkI2MTY2NkVFREEwMEM1NUZFRiAvKiBERkdWYXJp
YWJsZUFjY2Vzc0RhdGFEdW1wLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCREM0OTE1MjI4MDk2
MDBDRDg5MTAgLyogREZHVmFyaWFibGVFdmVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYyQkRDNEIxNTIyODA5RDAwQ0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnRTdHJlYW0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGRkZDOTYwMTRFRjkwQkQwMEM3MjUzMiAvKiBERkdWaXJ0dWFsUmVn
aXN0ZXJBbGxvY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzE4MUJEQTA2
ODAwMDMzMUI4NCAvKiBBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5oIGluIEhlYWRlcnMgKi8s
CkBAIC02NDMxLDYgKzY4NDksNyBAQAogCQkJCTBGNTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBF
eGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAz
MjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3
NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDEx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYw
QjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJlc3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXku
aCBpbiBIZWFkZXJzICovLApAQCAtNjQ5MSw2ICs2OTEwLDcgQEAKIAkJCQkwRkVBMEEyMDE3MDhC
MDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZC
MUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8qIEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkVDODU3NzFCREFDREM3MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJs
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVBNjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRM
VmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlB
IC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5
NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTY0OTgsOCArNjkx
OCwxMCBAQAogCQkJCTJBODM2MzhBMThEN0QwRkUwMDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNh
bGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyog
RnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkEx
QTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk1MkIzMTBGQjE5NzRBRTYxMDA4MDg1N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENh
Y2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRCRkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVu
Y3Rpb25PdmVycmlkZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJGMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrbWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNE
MDBCMzQ0NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDJE
MzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEgLyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4g
SGVhZGVycyAqLywKQEAgLTY1MzgsNiArNjk2MCw3IEBACiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAw
MTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMucHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkUw
NTAxOTFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJpY0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFMDUwMUExQUE5MDkxMTAwRDMzQjMzIC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21t
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5l
cmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0Yg
LyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3
QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCkBAIC02NTYzLDYgKzY5ODYsNyBAQAogCQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4
RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYx
RjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQy
NEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJODYwNkRERUExOERBNDRBQjAwQTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRp
ZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywKQEAgLTY2MTYsNiArNzA0MCw3IEBACiAJCQkJ
QTFCOUUyM0MxQjRFMEQ2NzAwQkM3RkVEIC8qIEludGxDb2xsYXRvckNvbnN0cnVjdG9yLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBMTgxOTNFMzFCNEUwQ0RCMDBGQzEwMjkgLyogSW50bENvbGxhdG9y
Q29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBMUI5RTIzRTFCNEUwRDY3MDBC
QzdGRUQgLyogSW50bENvbGxhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTE4MTkzRTQxQjRFMENEQjAwRkMxMDI5IC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5s
dXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRs
RGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3RDcwMUI0REMxNDEwMEQ2
OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBA
IC02NjQ2LDYgKzcwNzEsNyBAQAogCQkJCTBGMjRFNTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRP
cGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0Ug
LyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0Ew
MDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklUVGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyogSklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9u
Q2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAv
KiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJzICovLApAQCAtNjY1Niw5ICs3MDgyLDExIEBA
CiAJCQkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJy
YXlCdWZmZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIw
MEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCREFFQ0IxN0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOEIxNDE4NkQxQjYyNTI3RjAwRkIyMDY4IC8q
IEpTQXJyb3dGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MTgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwRDE3
RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJz
ICovLApAQCAtNjY3NSw2ICs3MTAzLDggQEAKIAkJCQk4NjVBMzBGMTEzNTAwN0UxMDBDREI0OUUg
LyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDFEMEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTNDRTA4ODE4
QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUx
RTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBBIC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNThDMDI0MjE4RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0
UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjkwLDYgKzcxMjAsNyBAQAogCQkJCUZFMzg0
RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxhclZNLmggaW4gSGVhZGVycyAqLywKIAkJCQlG
RTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNEb2xsYXJWTVByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAwQjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNv
cmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01l
bW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEg
LyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEz
NiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUYxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MDAsMTEg
KzcxMzEsMTMgQEAKIAkJCQkwRjJCNjZGMTE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlw
ZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0NvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdD
b25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTQ1MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQx
N0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEYyQjY2RjUxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVk
QXJyYXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MzkxN0U3QjFCNzkwNkZB
MDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNU
eXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5N0Uw
N0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2JhbExleGljYWxFbnZpcm9ubWVudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1MUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCBp
biBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9i
amVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpT
R2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4
QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVy
cyAqLywKQEAgLTY3MzUsNiArNzE2OCw3IEBACiAJCQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQz
IC8qIEpTTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIg
LyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAw
MUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDIxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlD
MUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmlyb25tZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNNb2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThCN0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29y
ZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzY0LDYgKzcxOTgsNyBAQAogCQkJCUE3QzFFQUYwMTc5
ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNTdHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJh
dG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjAwQjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNT
dHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIzNDQ2
MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRlcnMgKi8sCkBAIC02Nzk1LDYgKzcyMzAsNyBAQAog
CQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5h
bC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vh
a09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwOUZCODY4MUFFMzM1
QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NUJCMUJF
MTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVDRDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVj
dC5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIxLDkgKzcyNTcsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0
QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJbnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBBNTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRT
bG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAv
KiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcy
Q0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3
NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1
QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVy
cyAqLywKQEAgLTY4MzYsMTIgKzcyNzQsMTQgQEAKIAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1
RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgz
MUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyogTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8q
IE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUw
NDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJpbnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8qIE1hY3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBGODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYu
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fz
c2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYw
RjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1ibGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4g
SGVhZGVycyAqLywKQEAgLTY4NjcsNiArNzMwNyw3IEBACiAJCQkJQkMwMkU5MTEwRTE4MzlEQjAw
MEY5Mjk3IC8qIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MDJFOTEzMEUxODM5REIwMDBGOTI5NyAvKiBOYXRpdmVFcnJvclByb3RvdHlwZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRTMzRThEMjExQjkwMTNERTAwMzQ2QjUyIC8qIE5hdGl2ZVN0ZEZ1bmN0aW9u
Q2VsbC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIyMDE2RDAzM0I3MDA1
NUE1REIgLyogTm9kZUNvbnN0cnVjdG9ycy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0M0Yw
RTE2RjVDRDAwQjM0NDYwIC8qIE5vZGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyODE4
QTFCMjU5MDAyNkQ4OEYgLyogTm9uZGV0ZXJtaW5pc3RpY0lucHV0LmggaW4gSGVhZGVycyAqLywK
QEAgLTY4ODcsNiArNzMyOCw3IEBACiAJCQkJRTEyNEE4RjcwRTU1NTc3NTAwMzA5MUYxIC8qIE9w
YXF1ZUpTU3RyaW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRERCMUY2MzE4RDc3REJFMDA5QjU4
QTggLyogT3BhcXVlUm9vdFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTY5QTA3OUIwRUQxRDNB
RTAwRjFGNjgxIC8qIE9wY29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0MxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCREMyQzE1MUZERTkxMDBDRDg5MTAgLyogT3BlcmFuZHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3MDQ0N0VBMTdBMEJENDYwMEY1ODk4RSAvKiBPcGVyYW5kc0lubGluZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDQ4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBPcGVyYXRpb25zLmggaW4gSGVh
ZGVycyAqLywKQEAgLTY5MDAsMTMgKzczNDIsMTggQEAKIAkJCQkwRkY5Q0U3NDFCOUNENkQwMDA0
RURDQTYgLyogUG9seW1vcnBoaWNBY2Nlc3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTgzNDE4
MUE2RUY5N0IwMEQwNDg0NyAvKiBQb2x5bW9ycGhpY0NhbGxTdHViUm91dGluZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEY5ODIwNjExNkJGRTM4MzAwMjQwRDAyIC8qIFByZWNpc2VKdW1wVGFyZ2V0
cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1N0ExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdl
bmVyYXRpb25Db250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODVCRDFCRTE0NjJGMDA4
MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY4OTE2QjAx
NTVGMjg2MzAwQ0IyQjlBIC8qIFByaXZhdGVOYW1lLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUyMjFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJD
MThDNDUwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
NUNENDU3NzBFMUM0RkREMDA4NTM1OEUgLyogUHJvZmlsZUdlbmVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQkMxOEM0NTEwRTE2RjVDRDAwQjM0NDYwIC8qIFByb2ZpbGVOb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkY3MjlBNTE2NkFEMzUxMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29k
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWVSZXAuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUI5MTY2QUQzNjAwMDBGNUJBMyAvKiBQ
cm9maWxlckJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYxMzkxMkExNjc3MUMzNjAw
OUNDQjA3IC8qIFByb2ZpbGVyQnl0ZWNvZGVTZXF1ZW5jZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1MUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkExNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29t
cGlsYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUJCMTY2QUQzNjAwMDBGNUJBMyAv
KiBQcm9maWxlckNvbXBpbGF0aW9uS2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNzI5QkMx
NjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02OTI4LDEwICs3Mzc1LDEzIEBACiAJCQkJMEZCN0YzOUMxNUVEOEU0NjAwRjE2N0Iy
IC8qIFByb3BlcnR5U3RvcmFnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTYwRTE2RjVD
RDAwQjM0NDYwIC8qIFByb3RlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NzRDMzNCMTZBQTJE
OTUwMDYyRjAxRCAvKiBQcm90b3R5cGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTg0
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjU3ODBBMjE4RkUxRTk4MDAxRTcyRDkgLyogUHVyZU5hTi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEYxNUNEMjMxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY5MzMyQTQxNENBN0REOTAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTgwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjkzQjRBQTE4QjkyQzREMDAxNzhBM0YgLyogUHV0QnlJZFZhcmlhbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTc5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5l
cmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQ0Q0QzIxNUYxQTYwNzAwMzJGMUMwIC8qIFB1
dERpcmVjdEluZGV4TW9kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5RkM4QzUxNEUxQjYwNDAw
RDUyQUUwIC8qIFB1dEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0N0I4NDYzMEU2REU2QjEw
MDQ3NzVBNCAvKiBQdXRQcm9wZXJ0eVNsb3QuaCBpbiBIZWFkZXJzICovLApAQCAtNjk1Miw2ICs3
NDAyLDcgQEAKIAkJCQkwRkMzMTQxMjE4MTQ1NTkxMDAwMzMyMzIgLyogUmVnaXN0ZXJTZXQuaCBp
biBIZWFkZXJzICovLAogCQkJCUE1N0QyM0VFMTg5MUI1NTQwMDMxQzdGQSAvKiBSZWd1bGFyRXhw
cmVzc2lvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUQxNUVEOEU0NjAwRjE2N0IyIC8q
IFJlamVjdC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MjYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkExNUU4MTgyMzQw
QjMwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1QkEx
NUVBMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JDb25zdGFudHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE1QkExNUYwMTgyMzQ1QUYwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0b3JE
ZWJ1Z2dhYmxlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5NTksNiArNzQxMCw3IEBACiAJCQkJQTVC
QTE1RUQxODIzNDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvclhQQ0Nvbm5lY3Rpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMjRFNTUxMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNoLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjlFQkNCNzBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlw
ZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1NDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwQjBBOUQxMUE5QjY2NDYwMDAxMzA2QSAvKiBSdW50
aW1lRmxhZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQzA2MTFGMUFBNTFFMUMwMEI0QURCQSAv
KiBSdW50aW1lVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzIyQjMxQjkxNDA1NzdENzAwREI0
NzVBIC8qIFNhbXBsaW5nQ291bnRlci5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTg4LDYgKzc0NDAs
NyBAQAogCQkJCUE3MDlGMkYwMTdBMEFDMDQwMDUxMkU5OCAvKiBTbG93UGF0aENhbGwuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTkzMzA0MDA0MEU2QTc0OTQwMDc4NkU2QSAvKiBTbWFsbFN0cmluZ3Mu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDY0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBTb3VyY2VD
b2RlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwRTFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdDMyVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDYzMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBTb3VyY2VQcm92aWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0
RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUU0
OURDMTZEMTJFRjI5NTMwMDE4NEExRiAvKiBTb3VyY2VQcm92aWRlckNhY2hlSXRlbS5oIGluIEhl
YWRlcnMgKi8sCkBAIC03MDA3LDYgKzc0NjAsNyBAQAogCQkJCUJDMThDNDZBMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBTdHJpbmdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNCMTM0
RkYwQTYwMEFGQURCNSAvKiBTdHJvbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NTcyMjg2MTQz
N0UxNDAwMDVGREUyNiAvKiBTdHJvbmdJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU4MjFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDREUzQUI4MEU2QzgyRjUwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTdFNEVFNzA5MEVCQjc5NjMwMDU5MzRBQSAvKiBTdHJ1Y3R1cmVDaGFpbi5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMkFBQUEzMTIxOEJENDlEMTAwMzk0Q0M4IC8qIFN0cnVjdHVyZUlEQmxvYi5o
IGluIEhlYWRlcnMgKi8sCkBAIC03MDQzLDEwICs3NDk3LDEyIEBACiAJCQkJMEYyRDRERUExOTgz
MkRBQzAwN0Q0QjE5IC8qIFR5cGVMb2NhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNTJCMzEx
MDExOTc1QjQ2NzAwODA4NTdDIC8qIFR5cGVMb2NhdGlvbkNhY2hlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkZCNkMzOTFBRjQ4RERDMDBEQjFCRjcgLyogVHlwZW9mVHlwZS5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVXNlQ291bnRzLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk1MkM5NTJCNzE5QTI4OTg1MDA2OUIzODYgLyogVHlwZVByb2ZpbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERFQzE5ODMyREM0MDA3RDRCMTkgLyogVHlwZVByb2Zp
bGVyTG9nLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJENERGMDE5ODMyREQ2MDA3RDRCMTkgLyog
VHlwZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NEIxNThFQkU5MTAwNENCOUZGIC8q
IHVkaXM4Ni5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg0RkYxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQXJndW1lbnRSZWdWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDExNThFQkU4
RDAwNENCOUZGIC8qIHVkaXM4Nl9kZWNvZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQy
MTU4RUJFOTEwMDRDQjlGRiAvKiB1ZGlzODZfZXh0ZXJuLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkY0Mjc0NDE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2X2lucHV0LmggaW4gSGVhZGVycyAqLywK
QEAgLTcwODQsOCArNzU0MCwxMCBAQAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBX
YXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8q
IFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MkUzMTNDMTM0RkYwQTYwMEFGQURC
NSAvKiBXZWFrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwMjFCREFDREFDMDA4MEZGNzQg
LyogQjNCYXNpY0Jsb2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRFODRGOUYxNEVF
MUFDQzAwRDZENUQ0IC8qIFdlYWtCbG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRCRkNFNjkx
MENEQjFGQzAwMzY0Q0NFIC8qIFdlYWtHQ01hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1
MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQUQ4NkE5M0UxQUE0RDg4RDAwMkZFNzdGIC8qIFdlYWtHQ01hcElubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTE0RjcyNTY2MTRFRTI2NUUwMEIxNjUyQiAvKiBXZWFrSGFuZGxlT3duZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0RTg0RkEyMTRFRTFBQ0MwMEQ2RDVENCAvKiBXZWFrSW1w
bC5oIGluIEhlYWRlcnMgKi8sCkBAIC03MTA3LDkgKzc1NjUsMTIgQEAKIAkJCQk5OTU5RTkyRTFC
RDE3RkE0MDAxQUE0MTMgLyogeHhkLnBsIGluIEhlYWRlcnMgKi8sCiAJCQkJNDUxNTM5QjkxMkRD
OTk0NTAwRUY3QUM0IC8qIFlhcnIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2NzA0Qjg1MTJEQkEz
MzcwMEE5RkU3QiAvKiBZYXJySW50ZXJwcmV0ZXIuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZFQzg1NzQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJODY3MDRCODcxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJKSVQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTg2NzA0Qjg4MTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGFyc2VyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4QTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRl
cm4uaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCNDMxMkRCOEE4MTAwQTlGRTdC
IC8qIFlhcnJTeW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKQEAgLTcxMzQsNiArNzU5NSwyMiBAQAog
CQkJcHJvZHVjdFJlZmVyZW5jZSA9IDBGQ0VGQUI2MTgwNUQ2MTYwMDQ3MkNFNCAvKiBsaWJsbHZt
Rm9ySlNDLmR5bGliICovOwogCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS5saWJyYXJ5LmR5bmFtaWMiOwogCQl9OworCQkwRkVDODU5NDFCREI1Q0YxMDA4MEZGNzQgLyog
dGVzdGIzICovID0geworCQkJaXNhID0gUEJYTmF0aXZlVGFyZ2V0OworCQkJYnVpbGRDb25maWd1
cmF0aW9uTGlzdCA9IDBGRUM4NUE4MUJEQjVDRjEwMDgwRkY3NCAvKiBCdWlsZCBjb25maWd1cmF0
aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdGIzIiAqLzsKKwkJCWJ1aWxkUGhhc2Vz
ID0gKAorCQkJCTBGRUM4NTk1MUJEQjVDRjEwMDgwRkY3NCAvKiBTb3VyY2VzICovLAorCQkJCTBG
RUM4NUEyMUJEQjVDRjEwMDgwRkY3NCAvKiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCWJ1aWxk
UnVsZXMgPSAoCisJCQkpOworCQkJZGVwZW5kZW5jaWVzID0gKAorCQkJKTsKKwkJCW5hbWUgPSB0
ZXN0YjM7CisJCQlwcm9kdWN0TmFtZSA9IHRlc3RhcGk7CisJCQlwcm9kdWN0UmVmZXJlbmNlID0g
MEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLzsKKwkJCXByb2R1Y3RUeXBlID0g
ImNvbS5hcHBsZS5wcm9kdWN0LXR5cGUudG9vbCI7CisJCX07CiAJCTBGRjkyMkMzMTRGNDZCMTMw
MDQxQTI0RSAvKiBKU0NMTEludE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7CiAJCQlpc2EgPSBQQlhO
YXRpdmVUYXJnZXQ7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZGOTIyQ0ExNEY0NkIx
MzAwNDFBMjRFIC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZlVGFyZ2V0
ICJKU0NMTEludE9mZnNldHNFeHRyYWN0b3IiICovOwpAQCAtNzI4OSw2ICs3NzY2LDcgQEAKIAkJ
CQkxNEJENTlCRTBBM0U4RjkwMDBCQUY1OUMgLyogdGVzdGFwaSAqLywKIAkJCQk5MzJGNUJEQTA4
MjJBMUM3MDA3MzY5NzUgLyoganNjICovLAogCQkJCTY1MTEyMkY3MTQwNDZBNEMwMDJCMTAxRCAv
KiB0ZXN0UmVnRXhwICovLAorCQkJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMg
Ki8sCiAJCQkJNUQ2QjJBNDcxNTJCOUUxNzAwNTIzMURFIC8qIFRlc3QgVG9vbHMgKi8sCiAJCQkp
OwogCQl9OwpAQCAtNzUzNiw2ICs4MDE0LDE0IEBACiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCTBGRUM4NTk1MUJEQjVDRjEwMDgwRkY3
NCAvKiBTb3VyY2VzICovID0geworCQkJaXNhID0gUEJYU291cmNlc0J1aWxkUGhhc2U7CisJCQli
dWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJCQkJMEZFQzg1QUYx
QkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgaW4gU291cmNlcyAqLywKKwkJCSk7CisJCQly
dW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKKwkJfTsKIAkJMEZGOTIyQzQx
NEY0NkIxMzAwNDFBMjRFIC8qIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhTb3VyY2VzQnVp
bGRQaGFzZTsKIAkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0ODM2NDc7CkBAIC03NTkxLDYgKzgw
NzcsNyBAQAogCQkJCTBGNTVGMEY0MTREMTA2MzkwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0N0YzOUJEMTA3RUMzNzYwMDQyN0E0OCAvKiBBcmdMaXN0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzQzQkFBMTZCODgyNDkwMDlGOTI3NyAvKiBBUk02NERp
c2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3MTFCREFDREM3MDA4MEZG
NzQgLyogQWlyQmFzaWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkQzQjJDMzEwMTU2
QkRFMDAyODY1RTcgLyogQVJNQXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAy
ODUwMTcxNzk1RTIwMDM1MUUzNSAvKiBBUk12N0Rpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk2NUMwMjg1QzE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzU5OCw4ICs4MDg1LDEwIEBACiAJCQkJQTdBOEFGMzQxN0FEQjVGMzAw
NUFCMTc0IC8qIEFycmF5QnVmZmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkM5OUQ0MTg0
RUUzMTgwMDlDMTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTdBOEFGMzYxN0FEQjVGMzAwNUFCMTc0IC8qIEFycmF5QnVmZmVyVmll
dy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzRDFCREFDREFDMDA4MEZGNzQgLyogQjNV
cHNpbG9uVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QkYxMDdFQzM3NjAwNDI3
QTQ4IC8qIEFycmF5Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdCREFFQzgx
N0Y0RUExNDAwRjYxNDBDIC8qIEFycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MjUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2Mzk0NTQxNUQwNzA1NTAwNkE1OTdDIC8qIEFycmF5
UHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDMDEwN0VDMzc2MDA0MjdBNDgg
LyogQXJyYXlQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNEU1NDAxN0VBOUY1
OTAwQUJCMjE3IC8qIEFzc2VtYmx5SGVscGVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2MjAs
OCArODEwOSwxMCBAQAogCQkJCTE0MjlEOEREMEVEMjIwNUIwMEI4OTYxOSAvKiBDYWxsRnJhbWUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJFQzlCQjYxQjdFQjA3QzAwMzAzQUQxIC8qIENhbGxG
cmFtZVNodWZmbGVEYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDc1NUQ2MUI4NEZCNDYw
MDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODUxMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjJENzU1RDUxQjg0RkI0MDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyMzJfNjQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDQxQjg0RkIzRDAwMTgwMUZBIC8qIENhbGxG
cmFtZVNodWZmbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzkxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYwQjgzQjAx
NEJDRjcxNjAwODg1QjRGIC8qIENhbGxMaW5rSW5mby5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjkzMzI5RDE0Q0E3REMzMDA4NUYzQzYgLyogQ2FsbExpbmtTdGF0dXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNjI3NjczMjMxQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzYzNCw2ICs4MTI1LDcgQEAKIAkJCQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBB
NDcgLyogQ29kZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEw
MEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTRE
Mjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVD
ODU5MzFCREIxRTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2QjU4MjY5MTREMjc5NzAwMEE5QzMwNiAvKiBDb2RlUHJvZmlsaW5nLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGOEY5NDNDMTY2NzYzMTMwMEQ2MTk3MSAvKiBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQyMTY2NzYzMzUwMEQ2MTk3MSAv
KiBDb2RlVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NDEsNiArODEzMyw3IEBACiAJCQkJ
QTcwOUYyRjIxN0EwQUMyQTAwNTEyRTk4IC8qIENvbW1vblNsb3dQYXRocy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk2NTUzQTMzMTE3QTFGMUVFMDA4Q0Y2RjMgLyogQ29tbW9uU2xvd1BhdGhzRXhj
ZXB0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QTNBNzE3OTc0MzJEMDBFODkzQzAg
LyogQ29tcGlsYXRpb25SZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OEIxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdG
MzlDMjEwN0VDMzc2MDA0MjdBNDggLyogQ29tcGxldGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjZGQzc1MDE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDZCMTZEODEyRUI1QjU5MDAxQkVDMUIgLyogQ29uc2VydmF0aXZlUm9v
dHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjU3LDYgKzgxNTAsNyBAQAogCQkJCTJBMTExMjQ1
MTkyRkNFNzkwMDVFRTE4RCAvKiBDdXN0b21HZXR0ZXJTZXR0ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJNjJFM0Q1RjAxQjhEMEI3MzAwQjg2OEJCIC8qIERhdGFGb3JtYXQuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyQjY2REUxN0I2QjVBQjAwQTdBRTNGIC8qIERhdGFWaWV3LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NUJDMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVu
Z3RoLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMzMTA3RUMzNzYwMDQyN0E0OCAvKiBE
YXRlQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzQxMDdFQzM3NjAw
NDI3QTQ4IC8qIERhdGVDb252ZXJzaW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM1
MTA3RUMzNzYwMDQyN0E0OCAvKiBEYXRlSW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03
NjY4LDYgKzgxNjIsNyBAQAogCQkJCTBGQzcxMkRFMTdDRDg3NzkwMDhDQzkzQyAvKiBEZWZlcnJl
ZENvbXBpbGF0aW9uQ2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkU1MDY4NjcxQUUy
NUUyODAwMDlEQUI3IC8qIERlZmVycmVkU291cmNlRHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlBNzdBNDIzRDE3QTBCQkZEMDBBOERCODEgLyogREZHQWJzdHJhY3RIZWFwLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NThEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEY1NUMxOTQxNzI3NkU0NjAwQ0VBQkZEIC8qIERGR0Fic3RyYWN0VmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MDExQjYxOEFBRjAwQzgwRTFFIC8qIERG
R0FkYXB0aXZlSW5mZXJyZWRQcm9wZXJ0eVZhbHVlV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRjE4RDNDRjFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1cmVX
YXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzY3Nyw2ICs4MTcyLDcgQEAKIAkJCQkw
RjYzOTQ4NDE1RTQ4MTE4MDA2QTU5N0MgLyogREZHQXJyYXlNb2RlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3RDlBMjk0MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdBdFRhaWxBYnN0cmFjdFN0YXRl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjY2RUM2MTgzNTY3MkIwMEQwMTdGMSAvKiBERkdB
dmFpbGFiaWxpdHkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1ODcxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRTIxOUQwQkE3
RDAwQjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjcxNENBNDE2RUE5MkYwMDBGM0VCRUIgLyogREZHQmFja3dhcmRzUHJvcGFnYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0Q4OUNGMjE3QTBCOENDMDA3NzNBRDggLyogREZHQmFz
aWNCbG9jay5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2ODUsNiArODE4MSw3IEBACiAJCQkJODZF
QzlEQzQxMzI4REY4MjAwMkIyQUQ3IC8qIERGR0J5dGVDb2RlUGFyc2VyLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGRDgyRTIxMTQxNzJDRTMwMDE3OUM5NCAvKiBERkdDYXBhYmlsaXRpZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NTcxNEVGOTBBMDAwQzcyNTMyIC8qIERGR0NGQVBo
YXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1ZhbHVlUmVwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGM0IzQTI3MTU0NEM5OTUwMDNFRDBG
RiAvKiBERkdDRkdTaW1wbGlmaWNhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
OUQzNjk0MUFFOUNDMzMwMDBENERGQiAvKiBERkdDbGVhblVwUGhhc2UuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc3QTQyM0YxN0EwQkJGRDAwQThEQjgxIC8qIERGR0Nsb2JiZXJpemUuY3BwIGlu
IFNvdXJjZXMgKi8sCkBAIC03NzIyLDYgKzgyMTksNyBAQAogCQkJCTJBODgwNjc4MTkxMDdENTUw
MENCMEJCQiAvKiBERkdGdW5jdGlvbldoaXRlbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NkVDOURDNzEzMjhERjgyMDAyQjJBRDcgLyogREZHR3JhcGguY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYyRkNDRjkxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR0dyYXBoU2FmZXBvaW50LmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTZEMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBbGxvY2F0ZVN0
YWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYwMTk2QjhGOUUwMDkxMDUyQSAvKiBE
RkdIZWFwTG9jYXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODQxNjgxQkE4QzMyMTAw
NjE4MzdEIC8qIERGR0luZmVycmVkVHlwZUNoZWNrLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3
MDREOTA1MTdBMEJBQTgwMDZCQTU1NCAvKiBERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTc3NjQsMTQgKzgyNjIsMTcgQEAKIAkJCQkwRkMwOTc3MjE0NjkzQUY5
MDBDRjI0NDIgLyogREZHT1NSRXhpdENvbXBpbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY3MDI1QTkxNzE0QjBGQTAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjM5MkM4OTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NSRXhp
dEZ1enouY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzUxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRkM5QUExNjgxQTNCMzAwNTY3RjUz
IC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYy
MzVCRUQxNzE3OEU3MzAwNjkwQzdGIC8qIERGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjYyMzc5NzFBRTQ1Q0E3MDBENDAyRUEgLyogREZHUGhhbnRvbUluc2Vy
dGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRkZDOTVCMTRFRjkwQUQwMEM3MjUz
MiAvKiBERkdQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwRjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRUEx
OUQwQkE3RDAwQjFEMUI1IC8qIERGR1BoaUNoaWxkcmVuLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3OEE5NzdBMTc5NzM4QjgwMDlERjc0NCAvKiBERkdQbGFuLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQkUwRjc0MTZDMURCMDkwMDgyQzVFOCAvKiBERkdQcmVkaWN0aW9uSW5qZWN0aW9uUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGRkM5NUQxNEVGOTBCMzAwQzcyNTMyIC8qIERG
R1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEYzRTAxQUExOUQzNTNBNTAwRjYxQjdGIC8qIERGR1ByZVBvc3ROdW1iZXJpbmcuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlDRUMxOUQwQkE3RDAwQjFEMUI1IC8qIERGR1Byb21v
dGVkSGVhcExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjE3NjYyMTk2QjhGOUUw
MDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03Nzg5LDYgKzgy
OTAsOCBAQAogCQkJCTBGQzIwQ0I1MTg1MkUyQzYwMEM5RTk1NCAvKiBERkdTdHJlbmd0aFJlZHVj
dGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGODkzQkRCMTkzNkUyM0MwMDEyMTFG
NCAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NzkwODU1MTlBMjkwQjIwMEY2MzEwQyAvKiBERkdTdHJ1Y3R1cmVSZWdpc3RyYXRpb25QaGFzZS5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzNDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyOTFCREFDREFDMDA4MEZG
NzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkZDQ0ZFMThBNjAw
NzAwMDFBMjdGOCAvKiBERkdUaHJlYWREYXRhLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzA5
N0ExMTQ2QjI4Q0EwMENGMjQ0MiAvKiBERkdUaHVua3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZEOEEzMjcxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2Uu
Y3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODE2LDYgKzgzMTksNyBAQAogCQkJCTJBODM2Mzg1MThE
N0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTk5RTQ1QTI1MThBMUIyNTkwMDI2RDg4RiAvKiBFbmNvZGVkVmFsdWUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzcxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9yLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTA5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlDODEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3JDb25z
dHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlGRUI1OEMxNDE4N0I4QjE2MDA5OEVGMEIg
LyogRXJyb3JIYW5kbGluZ1Njb3BlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUM5MTA3
RUMzNzYwMDQyN0E0OCAvKiBFcnJvckluc3RhbmNlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg2
MCw2ICs4MzY0LDcgQEAKIAkJCQkwRjhGMkI5NTE3MkUwNEEwMDA3REJEQTUgLyogRlRMTGluay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkNFRkFERjE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9j
YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQTBBMEYxNzA1MTNEQjAwQkI3MjJDIC8q
IEZUTExvd2VyREZHVG9MTFZNLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTAwMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyQjlD
RjgxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZEOEEzMUIxN0Q1MUYyMjAwQ0EyQzQwIC8qIEZUTE9TUkVudHJ5LmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTBGMjM1QkRDMTcxNzhFMUMwMDY5MEM3RiAvKiBGVExPU1JFeGl0LmNwcCBpbiBT
b3VyY2VzICovLApAQCAtNzg2Nyw2ICs4MzcyLDcgQEAKIAkJCQkwRkVBMEEyQTE3MDk2Mjk2MDBC
QjcyMkMgLyogRlRMT3V0cHV0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDg1MzI5MTg3REZE
RUMwMDgzQjY4NyAvKiBGVExSZWNvdmVyeU9wY29kZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1ODkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjI1RjFCMTE4MTYzNUYzMDA1MjJGMzkgLyogRlRMU2xv
d1BhdGhDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjVGMUIzMTgxNjM1RjMwMDUyMkYz
OSAvKiBGVExTbG93UGF0aENhbGxLZXkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzOUEx
ODAzQURCNzAwNzNDMkJDIC8qIEZUTFN0YWNrTWFwcy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc4
OTksNiArODQwNSw3IEBACiAJCQkJQTVGRDAwNzUxODlCMDM4QzAwNjMzMjMxIC8qIElkZW50aWZp
ZXJzRmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMjVGOEJDRDE1NzU0NEE5MDAyNDVC
NzEgLyogSW5jcmVtZW50YWxTd2VlcGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTNFMDRF
MTYxNjRBMUYwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1MjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGMEE3NTIyMUI5NEJGQTkwMDExMDY2MCAvKiBJbmZlcnJlZFR5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQzkyMTExQjk0RDRERjAwNzFERDY2IC8qIEluZmVycmVk
VHlwZVRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjhCREVBMUFENENGNzEwMERGRTg4
NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzkwNiw2ICs4NDEzLDcg
QEAKIAkJCQk5RUE1QzdBMjE5MEYwODg3MDA1MDhFQkUgLyogSW5pdGlhbGl6ZUxMVk1NYWMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDgxOTBGMDIxRTAwMUE5MUI1IC8qIEluaXRpYWxp
emVMTFZNUE9TSVguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOUU3Mjk0MDcxOTBGMDFBNTAwMUE5
MUI1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
N0IxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE1MTNFNUI3MTg1QjhCRDMwMDdFOTVBRCAvKiBJbmplY3RlZFNjcmlwdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlBNTE0QjJDMjE4NUE2ODQ0MDBGM0M3Q0IgLyogSW5qZWN0ZWRT
Y3JpcHRCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OEUzNTkxMTg2MERFQ0YwMDFGMjRG
RSAvKiBJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTE3LDYgKzg0
MjUsNyBAQAogCQkJCUE1OTNDRjg2MTg0MDM4Q0EwMEJGQ0UyNyAvKiBJbnNwZWN0b3JBZ2VudFJl
Z2lzdHJ5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1OTNDRjdDMTg0MDM2MDMwMEJGQ0UyNyAv
KiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTMy
NDM4NzE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXJzLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRUM4NTM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENh
c2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVGRDAwODExODlCMTkxQTAwNjMzMjMxIC8qIElu
c3BlY3RvckNvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTdEMjNFNTE4OTBD
RUJGMDAzMUM3RkEgLyogSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTMyNDM4OTE4NTY4MzM1MDAyRUQ2OTIgLyogSW5zcGVjdG9yRnJvbnRlbmREaXNwYXRj
aGVycy5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5NzMsNiArODQ4Miw3IEBACiAJCQkJODZGQTlF
OTExNDJCQkIyRTAwMTc3M0I3IC8qIEpTQm91bmRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkxNDQwRjhBRjBBNTA4RDIwMDAwNUYwNjEgLyogSlNDYWxsYmFja0NvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDBGODkyMEE1MDhCMTAwMDA1RjA2MSAvKiBKU0NhbGxi
YWNrRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NkYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckFyZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEFCREY2MDBBNDM3RkVGMDBF
Q0NBMDEgLyogSlNDYWxsYmFja09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NTdDRjQ1
ODE5QkY2NjYyMDA0QUNCRjIgLyogSlNDYWxsZWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdE
ODAxQTgxODgwRDZBODAwMjZDMzlCIC8qIEpTQ0J1aWx0aW5zLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtNzk4MCw2ICs4NDkwLDggQEAKIAkJCQkxNDdGMzlENjEwN0VDMzc2MDA0MjdBNDggLyogSlND
SlNWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQwRkNFNDBBNTFFNDZCMDAwNUYwNjEg
LyogSlNDbGFzc1JlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTNDRTA4NzE4QkMxQTU2MDBC
RURGNzYgLyogSlNDb25zb2xlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTkwMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJWYWxpZGF0ZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3
MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTg2RTNDNjE2MTY3QkFCRUUwMDZENzYwQSAvKiBKU0NvbnRleHQubW0gaW4gU291cmNlcyAq
LywKIAkJCQkxNEJENUEzMDBBM0U5MUY2MDBCQUY1OUMgLyogSlNDb250ZXh0UmVmLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3MjAyOEI2MTc5NzYwMUUwMDk4MDI4QyAvKiBKU0NUZXN0UnVubmVy
VXRpbHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTkwLDE2ICs4NTAyLDE5IEBACiAJCQkJRkUz
ODRFRTcxQUREQjdBRDAwNTVERTJDIC8qIEpTRG9sbGFyVk1Qcm90b3R5cGUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ3RjM5RDcxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNv
cmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQwNTY2RDYxMDdFQzI3MTAwNURCQzhEIC8qIEpT
RnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTG93ZXJUb0Fpci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3OTdFMDdBOTFCOEZDRkI5
MDA4NDAwQkEgLyogSlNHbG9iYWxMZXhpY2FsRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5RDIxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTR2xvYmFsT2JqZWN0LmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1RkQwMDg1MTg5QjFCN0UwMDYzMzIzMSAvKiBKU0dsb2JhbE9iamVj
dENvbnNvbGVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUMzQTFBNTE4QzA0OTAyMDBD
OTU5M0EgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQ2xpZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTBEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQlBNTk0NTU5MjE4MjQ3NDQ3MDBDQzM4NDMgLyogSlNHbG9iYWxPYmplY3RE
ZWJ1Z2dhYmxlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U5MTg5MUIwNzcwMDMxQzdG
QSAvKiBKU0dsb2JhbE9iamVjdERlYnVnZ2VyQWdlbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MTRFOUQxN0IxMDdFQzQ2OTAwNEREQTIxIC8qIEpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MTAwN0MwMTg3Q0MzQzYwMEIzODg3OSAvKiBKU0dsb2JhbE9i
amVjdEluc3BlY3RvckNvbnRyb2xsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUwRTRCNjMx
ODgwOURENTAwNjhBNDZEIC8qIEpTR2xvYmFsT2JqZWN0UnVudGltZUFnZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUE1MDNGQTI5MTg4RjEwNTkwMDExMEYxNCAvKiBKU0dsb2JhbE9iamVjdFNj
cmlwdERlYnVnU2VydmVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTIzMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEzRTVCRjE4NUJG
QUNDMDA3RTk1QUQgLyogSlNJbmplY3RlZFNjcmlwdEhvc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJQTUxM0U1QzExODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3JpcHRIb3N0UHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzM0Y1MDgwMUI4NDI5QTQwMDQxMzg1NiAvKiBK
U0ludGVybmFsUHJvbWlzZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMTgsNiArODUzMyw3IEBA
CiAJCQkJRTMxOENCQzAxQjhBRUY1MTAwQTI5MjlEIC8qIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUzOURBNEE2MUI3RThCN0MwMDg0RjMzQSAvKiBKU01v
ZHVsZVJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzNFOEQxQzFCOTAxM0MzMDAzNDZC
NTIgLyogSlNOYXRpdmVTdGRGdW5jdGlvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUx
ODFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NzI3MDA5MDBEQUM2QkJDMDBFNTQ4RDcgLyogSlNOb3RBbk9iamVjdC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDdGMzlENDEwN0VDMzc2MDA0MjdBNDggLyogSlNPYmplY3QuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMTQ4MkI3RTQwQTQzMDc2MDAwNTE3Q0ZDIC8qIEpTT2JqZWN0UmVmLmNwcCBp
biBTb3VyY2VzICovLApAQCAtODAzMSw2ICs4NTQ3LDcgQEAKIAkJCQlFM0VGODg3NDFCNjZERjIz
MDAzRjI2Q0IgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NjI1NTNEMTE2MTM2REE5MDA5RjE3RDAgLyogSlNQcm94eS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTUyQzM3RjFBRERCOEZFMDAxMzk3MjYgLyogSlNSZW1vdGVJbnNwZWN0b3IuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3Vi
bGVWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5OTI4RkYzQjE4QUM0QUVDMDBCOENGMTIg
LyogSlNSZXBsYXlJbnB1dHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ4NzRBRTUxNUVCREU0
QTAwMkUzNTg3IC8qIEpTU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMEM0QUQxNjgx
MDY3RTAwMTcwMTFEIC8qIEpTU2NyaXB0UmVmLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA1OSw2
ICs4NTc2LDcgQEAKIAkJCQk3MDlGQjg2NzFBRTMzNUM2MDAzOUQwNjkgLyogSlNXZWFrU2V0LmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDI1NjYxMTVFREU5OEQwMDY2QTQ5QiAvKiBKU1dpdGhT
Y29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxODE2N0JBQkVFMDA2RDc2MEEgLyog
SlNXcmFwcGVyTWFwLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzRnJlcXVlbmN5Q2xhc3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NzAx
MDdFQzEzNDAwMTNFN0IyIC8qIEpTV3JhcHBlck9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlCQ0ZEOEM5MjBFRUIyRUU3MDAyODM4NDggLyogSnVtcFRhYmxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQjU0Njc5MTRGNUM0NkIwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmls
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwNjYsOSArODU4NCwxMiBAQAogCQkJCTE0OEYyMUIw
MTA3RUM1NDEwMDQyRUMyQyAvKiBMZXhlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc1
NzE1OTE0QTIwMDA0Q0I5RkYgLyogTGlua0J1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
N0UyRUE2QzBGQjQ2MENGMDA2MDFGMDYgLyogTGl0ZXJhbFBhcnNlci5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU3RjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlGRTM5MTM1NDFCNzk0RjZFMDBFREFGNzEgLyogTGl2ZU9iamVjdExpc3QuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJRkUyMENFOUQxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xv
b3AuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwRDIxNEJCRDE2NTAwQkZFMjcyIC8qIExM
SW50RGF0YS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQg
LyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQxMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1ZhbGlkYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMzhC
MDExMTdDRjA3ODAwMEIxNDREMyAvKiBMTEludEVudHJ5cG9pbnQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY0NjgwQTgxNEJBN0ZBQjAwQkZFMjcyIC8qIExMSW50RXhjZXB0aW9ucy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjQ2ODBBNDE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0
aHMuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDc3LDYgKzg1OTgsNyBAQAogCQkJCUE3RTVBQjM3
MTc5OUU0QjIwMEQyODMzRCAvKiBMTFZNRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTE0NDY5RERFMTA3RUM3RTcwMDY1MDQ0NiAvKiBMb29rdXAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEY0NjgwQ0MxNEJCQjE3QTAwQkZFMjcyIC8qIExvd0xldmVsSW50ZXJwcmV0ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCNzIzQjIxMkQ3REE0NjAwM0JENUVEIC8q
IE1hY2hpbmVTdGFja01hcmtlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVCM0VDRjE2MjM3
RjZDMDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZD
NTY4RTAxMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyQVJNLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtODA4NiwxMCArODYwOCwxMiBAQAogCQkJCUE3QTRBRTA4MTc5NzNCMjYwMDU2MTJC
MSAvKiBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzAw
ODczOTE3Q0JFODUzMDBDM0U2NDMgLyogTWFwQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJQTc0REVGOTMxODJEOTkxNDAwNTIyQzIyIC8qIE1hcEl0ZXJhdG9yUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNr
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3M0QxN0NCRThEMzAwQzNFNjQzIC8q
IE1hcFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlDMkI5MTZDNTE0REEwNDBDMDBD
QkFDODYgLyogTWFya2VkQWxsb2NhdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjA4
MTM1MzlBMjgwMEIwMkU4NiAvKiBNYXJrZWRCbG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NEQyRjNEQTEzOUY0QkUyMDA0OTEwMzEgLyogTWFya2VkU3BhY2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMTQyRDZGMTExMzUzOUE0MTAwQjAyRTg2IC8qIE1hcmtTdGFjay5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk0MzQwQTQ4NDFBOTA1MUFGMDBENzNDQ0EgLyogTWF0aENvbW1vbi5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERjEwN0VDN0U3MDA2NTA0NDYgLyogTWF0aE9iamVj
dC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxMjgsMTcgKzg2NTIsMjEgQEAKIAkJCQkwRkY3MjlB
RDE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkY3MjlBRTE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJCeXRlY29kZXMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEYxMzkxMjkxNjc3MUMzMzAwOUNDQjA3IC8qIFByb2ZpbGVyQnl0
ZWNvZGVTZXF1ZW5jZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwQjFCREFDREFDMDA4
MEZGNzQgLyogQjNDb21tdXRhdGl2aXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUFG
MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGRjcyOUIwMTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckNvbXBpbGF0aW9uS2lu
ZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMTE2NkFEMzVDMDAwRjVCQTMgLyogUHJv
ZmlsZXJDb21waWxlZEJ5dGVjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjcyOUIyMTY2
QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlckRhdGFiYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMTkwQ0FDMTg5RDgyRjYwMDBBRTVGMCAvKiBQcm9maWxlckpldHRpc29uUmVhc29uLmNwcCBp
biBTb3VyY2VzICovLAorCQkJCTBGRUM4NTMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFw
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMzE2NkFEMzVDMDAwRjVCQTMg
LyogUHJvZmlsZXJPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QjQxNjZBRDM1
QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZFQzg1MkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXAuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCMTA1OEIxNjc1NDgzMTAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkIxMDU4RDE2NzU0ODM3MDBGOEFCNkUgLyogUHJvZmlsZXJPU1JF
eGl0U2l0ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjEzOTEyQjE2NzcxQzNBMDA5Q0NCMDcg
LyogUHJvZmlsZXJQcm9maWxlZEJ5dGVjb2Rlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQz
RTQwRDFCNjE4QjY2MDBDODBFMUUgLyogUHJvcGVydHlDb25kaXRpb24uY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1M0IxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBN0ZCNjBBNDEwM0Y3REMyMDAxN0EyODYgLyogUHJvcGVydHlEZXNjcmlwdG9y
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REU4MTA3RUM3RTcwMDY1MDQ0NiAvKiBQcm9w
ZXJ0eVNsb3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQURFMzlGRkYxNkREMTQ0QjAwMDNDRDRB
IC8qIFByb3BlcnR5VGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTQ3LDEwICs4Njc1LDEy
IEBACiAJCQkJMEYxNUNEMjIxQkE1Rjk4NjAwMzFGRkQzIC8qIFB1dEJ5SWRGbGFncy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRjkzMzJBMzE0Q0E3REQ3MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkzQjRBOTE4QjkyQzREMDAxNzhBM0YgLyogUHV0
QnlJZFZhcmlhbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MkIxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUHJvY2VkdXJlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjYwQUMzMTY3NDBG
ODgwMDAyOTc3OSAvKiBSZWR1Y2VXaGl0ZXNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUUz
MzYzN0E1MUI2MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQTdBOEVCMThCNDEzQzgwMDUyMzcxRCAvKiBSZWcuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQyODA4NDExMDdFQzA5MzAwMTNFN0IyIC8qIFJlZ0V4cC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU3ODFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTE3MTJCM0IxMUM3QjIxMjAwN0E1MzE1IC8qIFJlZ0V4cENhY2hlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2NDJDNTEwMTUxQzA2QTkwMDQ2RDRFRiAvKiBSZWdFeHBD
YWNoZWRSZXN1bHQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQyODA4NDIxMDdFQzA5MzAwMTNF
N0IyIC8qIFJlZ0V4cENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODE2NCw2ICs4
Njk0LDcgQEAKIAkJCQlBNUJBMTVFOTE4MjM0MEIzMDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9y
Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OEYxODI0NUVGRDAwQ0MzODQzIC8qIFJlbW90
ZUluc3BlY3RvckRlYnVnZ2FibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTVCQTE1RUMxODIz
NDBCNDAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGVDb25uZWN0aW9uLm1tIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVj
aWFsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1QkExNUVFMTgyMzQwQjQwMEE4MkU2OSAvKiBS
ZW1vdGVJbnNwZWN0b3JYUENDb25uZWN0aW9uLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyNEU1
NTAxN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTI3
NzczREUxQUFGODNBQzAwQkRFN0U4IC8qIFJ1bnRpbWVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODE4Miw2ICs4NzEzLDcgQEAKIAkJCQlBNTRDRjJGOTE4NEVBRURBMDAyMzdGMTkgLyogU2Ny
aXB0T2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1NENGMkY1MTg0RUFCMjQwMDIzN0Yx
OSAvKiBTY3JpcHRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5OURBNTE3RDEyODU4
MDA1RjVGRjkgLyogU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
ODUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTc5MERENkQxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0ZXJhdG9yUHJvdG90eXBl
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3Mjk5REExMTdEMTI4NDgwMDVGNUZGOSAvKiBTZXRQ
cm90b3R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFRTk4NDMxQTg5MjI3NTAwNzU0RTkz
IC8qIFNldHVwVmFyYXJnc0ZyYW1lLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODE5Niw2ICs4NzI4
LDcgQEAKIAkJCQkwRkQ4MkU4NjE0MUYzRkYxMDAxNzlDOTQgLyogU3BlY3VsYXRlZFR5cGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQTdDMUVBRjExNzk4N0FCNjAwMjk5REIyIC8qIFN0YWNrVmlz
aXRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzMwQjYxMzEyNTAwNjhGMDA5RDI1QjEgLyog
U3RyaWN0RXZhbEFjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MjExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVC
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk3MEVDMEVDNjFBQTBEN0RBMDBCNkFBRkEgLyogU3RyaW5nSXRlcmF0b3JQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUMxMDdFQzdFNzAwNjUwNDQ2IC8qIFN0cmlu
Z09iamVjdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMDQsNiArODczNyw3IEBACiAJCQkJQkNE
RTNCNDMwRTZDODMyRDAwMTQ1M0E3IC8qIFN0cnVjdHVyZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk3RTRFRTcwRjBFQkI3QTVCMDA1OTM0QUEgLyogU3RydWN0dXJlQ2hhaW4uY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMkFGNzM4MkMxOEJCQkY5MjAwOEE1QTM3IC8qIFN0cnVjdHVyZUlEVGFibGUu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QjkxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5z
ZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUMyRjBGMkQxMTZCQUVFRTkwMDE4N0Mx
OSAvKiBTdHJ1Y3R1cmVSYXJlRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI0MzhBMzE5
MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NzY2RDM4MTVBRTRBMUMwMDhGMzYzRSAvKiBTdHJ1Y3R1cmVTdHViQ2xlYXJpbmdXYXRjaHBvaW50
LmNwcCBpbiBTb3VyY2VzICovLApAQCAtODIxMiw2ICs4NzQ2LDcgQEAKIAkJCQk3MDVCNDFBRDFB
NkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJNzA1QjQxQUYxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbE9iamVjdC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQk3MDVCNDFCMTFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNv
dW50cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjkxOUQyODE1ODU2NzczMDA0QTRFN0QgLyog
U3ltYm9sVGFibGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQ0E2MDcxQUZEQkVBMjAwNDQ5
NzM5IC8qIFRlbXBsYXRlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMzE0MTMx
ODE0NTU5MTAwMDMzMjMyIC8qIFRlbXBSZWdpc3RlclNldC5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTgyNDAsNiArODc3NSw3IEBACiAJCQkJMEYyNEU1NTgxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVl
UmVjb3ZlcnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzlFRTBCRkYxQjRBRkI4NTAwMDM4NUM5
IC8qIFZhcmlhYmxlRW52aXJvbm1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY2QzczNTAx
QUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTBGRUM4NTgzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRTA1MDJDMUFBOTA5NTYwMEQzM0IzMyAvKiBWYXJPZmZzZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMEMyNTkxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1
YWxSZWdpc3Rlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMThFM0E1OTBERjkyNzhDMDBEOTBC
MzQgLyogVk0uY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjU5LDYgKzg3OTUsNyBAQAogCQkJCTcw
OUZCODY5MUFFMzM1QzYwMDM5RDA2OSAvKiBXZWFrU2V0Q29uc3RydWN0b3IuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzA5RkI4NkIxQUUzMzVDNjAwMzlEMDY5IC8qIFdlYWtTZXRQcm90b3R5cGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRl
QmFycmllckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3RDFCREFDREM3MDA4
MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQzgxNTBC
MTQwNDNDMEUwMENGQTYwMyAvKiBXcml0ZUJhcnJpZXJTdXBwb3J0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE3RTVBQjNBMTc5OUU0QjIwMEQyODMzRCAvKiBYODZEaXNhc3NlbWJsZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJODYzQzZEOUMxNTIxMTExQTAwNTg1RTRFIC8qIFlhcnJDYW5vbmlj
YWxpemVVQ1MyLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODI4NSw2ICs4ODIyLDExIEBACiAJCQl0
YXJnZXQgPSAwRkNFRkFCNTE4MDVENjE2MDA0NzJDRTQgLyogbGx2bUZvckpTQyAqLzsKIAkJCXRh
cmdldFByb3h5ID0gMEZDRUZBQkMxODA1RDY2MzAwNDcyQ0U0IC8qIFBCWENvbnRhaW5lckl0ZW1Q
cm94eSAqLzsKIAkJfTsKKwkJMEZFQzg1QjExQkRCNUQ4RjAwODBGRjc0IC8qIFBCWFRhcmdldERl
cGVuZGVuY3kgKi8gPSB7CisJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OworCQkJdGFyZ2V0
ID0gMEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLzsKKwkJCXRhcmdldFByb3h5
ID0gMEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLzsK
KwkJfTsKIAkJMEZGOTIyRDMxNEY0NkIyRjAwNDFBMjRFIC8qIFBCWFRhcmdldERlcGVuZGVuY3kg
Ki8gPSB7CiAJCQlpc2EgPSBQQlhUYXJnZXREZXBlbmRlbmN5OwogCQkJdGFyZ2V0ID0gMEY0Njgw
QTkxNEJBN0ZEOTAwQkZFMjcyIC8qIExMSW50IE9mZnNldHMgKi87CkBAIC04NDA5LDYgKzg5NTEs
MzggQEAKIAkJCX07CiAJCQluYW1lID0gUHJvZHVjdGlvbjsKIAkJfTsKKwkJMEZFQzg1QTkxQkRC
NUNGMTAwODBGRjc0IC8qIERlYnVnICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRp
b247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZD
NTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7
CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBEZWJ1ZzsKKwkJ
fTsKKwkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8qIFJlbGVhc2UgKi8gPSB7CisJCQlpc2Eg
PSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0g
QkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwor
CQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9Owor
CQkJbmFtZSA9IFJlbGVhc2U7CisJCX07CisJCTBGRUM4NUFCMUJEQjVDRjEwMDgwRkY3NCAvKiBQ
cm9maWxpbmcgKi8gPSB7CisJCQlpc2EgPSBYQ0J1aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VD
b25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xF
eGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVpbGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNU
X05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFtZSA9IFByb2ZpbGluZzsKKwkJfTsKKwkJMEZF
Qzg1QUMxQkRCNUNGMTAwODBGRjc0IC8qIFByb2R1Y3Rpb24gKi8gPSB7CisJCQlpc2EgPSBYQ0J1
aWxkQ29uZmlndXJhdGlvbjsKKwkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFC
RjIxMzY5MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOworCQkJYnVp
bGRTZXR0aW5ncyA9IHsKKwkJCQlQUk9EVUNUX05BTUUgPSB0ZXN0YjM7CisJCQl9OworCQkJbmFt
ZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNCMTRGNDZCMTMwMDQxQTI0RSAvKiBEZWJ1
ZyAqLyA9IHsKIAkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOwogCQkJYmFzZUNvbmZpZ3Vy
YXRpb25SZWZlcmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFi
bGUueGNjb25maWcgKi87CkBAIC04NzYxLDYgKzkzMzUsMTcgQEAKIAkJCWRlZmF1bHRDb25maWd1
cmF0aW9uSXNWaXNpYmxlID0gMDsKIAkJCWRlZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1
Y3Rpb247CiAJCX07CisJCTBGRUM4NUE4MUJEQjVDRjEwMDgwRkY3NCAvKiBCdWlsZCBjb25maWd1
cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRhcmdldCAidGVzdGIzIiAqLyA9IHsKKwkJCWlzYSA9
IFhDQ29uZmlndXJhdGlvbkxpc3Q7CisJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKAorCQkJCTBG
RUM4NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLywKKwkJCQkwRkVDODVBQTFCREI1Q0Yx
MDA4MEZGNzQgLyogUmVsZWFzZSAqLywKKwkJCQkwRkVDODVBQjFCREI1Q0YxMDA4MEZGNzQgLyog
UHJvZmlsaW5nICovLAorCQkJCTBGRUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9kdWN0aW9u
ICovLAorCQkJKTsKKwkJCWRlZmF1bHRDb25maWd1cmF0aW9uSXNWaXNpYmxlID0gMDsKKwkJCWRl
ZmF1bHRDb25maWd1cmF0aW9uTmFtZSA9IFByb2R1Y3Rpb247CisJCX07CiAJCTBGRjkyMkNBMTRG
NDZCMTMwMDQxQTI0RSAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWE5hdGl2ZVRh
cmdldCAiSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yIiAqLyA9IHsKIAkJCWlzYSA9IFhDQ29uZmln
dXJhdGlvbkxpc3Q7CiAJCQlidWlsZENvbmZpZ3VyYXRpb25zID0gKApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHAJKHJldmlz
aW9uIDE5MTY1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3Nl
bWJsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw4IEBACiAKICNpZiBFTkFCTEUo
QVNTRU1CTEVSKQogCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKIG5hbWVzcGFjZSBK
U0MgewogCiBjb25zdCBkb3VibGUgTWFjcm9Bc3NlbWJsZXI6OnR3b1RvVGhlMzIgPSAoZG91Ymxl
KTB4MTAwMDAwMDAwdWxsOwpAQCAtNDcsNSArNDksNzAgQEAgdm9pZCBNYWNyb0Fzc2VtYmxlcjo6
Y2FsbFByb2JlKHN0ZDo6ZnVuYwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdU
RiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kKQorewor
ICAgIHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsOgorICAg
ICAgICBvdXQucHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3Jv
QXNzZW1ibGVyOjpOb3RFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3RFcXVhbCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QWJvdmU6CisgICAgICAgIG91
dC5wcmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJs
ZXI6OkFib3ZlT3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZU9yRXF1YWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkJlbG93OgorICAgICAgICBv
dXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1i
bGVyOjpCZWxvd09yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQmVsb3dPckVxdWFsIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbjoKKyAg
ICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW5PckVxdWFsOgorICAgICAgICBvdXQucHJpbnQo
IkdyZWF0ZXJUaGFuT3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fz
c2VtYmxlcjo6TGVzc1RoYW46CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW4iKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuT3JFcXVhbDoKKyAg
ICAgICAgb3V0LnByaW50KCJMZXNzVGhhbk9yRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBj
b25kKQoreworICAgIHN3aXRjaCAoY29uZCkgeworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Ok92
ZXJmbG93OgorICAgICAgICBvdXQucHJpbnQoIk92ZXJmbG93Iik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpTaWduZWQ6CisgICAgICAgIG91dC5wcmludCgiU2ln
bmVkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpQb3NpdGl2
ZU9yWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJQb3NpdGl2ZU9yWmVybyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6WmVybzoKKyAgICAgICAgb3V0LnByaW50
KCJaZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpOb25a
ZXJvOgorICAgICAgICBvdXQucHJpbnQoIk5vblplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKwogI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5
MTY1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtMTU5Niw4ICsxNTk2LDE5IEBAIHB1YmxpYzoKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwor
dm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVs
YXRpb25hbENvbmRpdGlvbik7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
Ok1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24pOworCit9IC8vIG5hbWVzcGFjZSBXVEYK
KwogI2Vsc2UgLy8gRU5BQkxFKEFTU0VNQkxFUikKIAorbmFtZXNwYWNlIEpTQyB7CisKIC8vIElm
IHRoZXJlIGlzIG5vIGFzc2VtYmxlciBmb3IgdGhpcyBwbGF0Zm9ybSwgYXQgbGVhc3QgYWxsb3cg
Y29kZSB0byBtYWtlIHJlZmVyZW5jZXMgdG8KIC8vIHNvbWUgb2YgdGhlIHRoaW5ncyBpdCB3b3Vs
ZCBvdGhlcndpc2UgZGVmaW5lLCBhbGJlaXQgd2l0aG91dCBnaXZpbmcgdGhhdCBjb2RlIGFueSB3
YXkKIC8vIG9mIGRvaW5nIGFueXRoaW5nIHVzZWZ1bC4KQEAgLTE2MTEsNiArMTYyMiw4IEBAIHB1
YmxpYzoKICAgICBlbnVtIEZQUmVnaXN0ZXJJRCB7IE5vRlBSZWdpc3RlciB9OwogfTsKIAorfSAv
LyBuYW1lc3BhY2UgSlNDCisKICNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQogCiAjZW5kaWYg
Ly8gTWFjcm9Bc3NlbWJsZXJfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRk
cmVzc01hdGNoZXIucGF0dGVybnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQWRkcmVzc01hdGNoZXIucGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNBZGRyZXNzTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM5IEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitt
YXRjaGVyIEFkZHJlc3NNYXRjaGVyCisKKyMgTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIEIzIGRv
aW5nIGFnZ3Jlc3NpdmUgcmVhc3NvY2lhdGlvbiBhbmQgY2Fub25jYWxpemF0aW9uIG9mIGludGVn
ZXIgYWRkcy4KKyMgV2UnbGwgbmV2ZXIgc2VlIEFkZChBZGQoeCwgY29uc3QxKSwgY29uc3QyKSBi
ZWNhdXNlIGl0IHdvdWxkIGhhdmUgYWxyZWFkeSBiZWVuIHJlYXNzb2NpYXRlZCBpbnRvCisjIEFk
ZCh4LCBjb25zdDEgKyBjb25zdDIpLiBBbHNvLCB3ZSB3aWxsIG5ldmVyIHNlZSBBZGQoY29uc3Qs
IHgpLCBiZWNhdXNlIHdlIHdvdWxkIGhhdmUgY2Fub25pY2FsaXplZAorIyBpdCB0byBBZGQoeCwg
Y29uc3QpLiBUaGF0IHNhaWQsIGluIHRoaXMgY29kZSB3ZSBuZXZlciBtYWtlIGFzc2VydGlvbnMg
YWJvdXQgdGhlc2Ugb3B0aW1pemF0aW9ucworIyBoYXZpbmcgYmVlbiBwZXJmb3JtZWQuIEFsc28s
IHNpbmNlIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9ucyBpbiBCMyBoYXZlIGEgYnVpbHQtaW4g
b2Zmc2V0LCB3ZQorIyBkb24ndCBuZWVkIHRvIG1hdGNoIEFkZCh4LCBjb25zdCkuIFRoYXQgd291
bGQgaGF2ZSBiZWVuIGZvbGRlZCBpbnRvIHRoZSBMb2FkL1N0b3JlIGluc3RydWN0aW9ucworIyBh
bHJlYWR5LiBTbywgdGhlIG9ubHkgZmFuY3kgbWF0aGluZyB0aGlzIGNhbiBkbyBpcyBqdXN0IEJh
c2VJbmRleCBmb3Jtcy4KKworQWRkU2hpZnQxID0gQWRkKFNobChpbmRleCwgJGxvZ1NjYWxlKSwg
YmFzZSkKK0FkZFNoaWZ0MiA9IEFkZChiYXNlLCBTaGwoaW5kZXgsICRsb2dTY2FsZSkpCisKK0Fk
ZCA9IEFkZChsZWZ0LCByaWdodCkKKworRGlyZWN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1
ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK0FyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVlKCkKK3sKK30KKwordm9p
ZCBBcmd1bWVudFJlZ1ZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludChtX3JlZyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0FyZ3VtZW50UmVnVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisjZGVmaW5lIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgIlJl
Zy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSlNfRVhQT1JU
X1BSSVZBVEUgQXJndW1lbnRSZWdWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAg
c3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gQXJn
dW1lbnRSZWc7IH0KKyAgICAKKyAgICB+QXJndW1lbnRSZWdWYWx1ZSgpOworCisgICAgUmVnIGFy
Z3VtZW50UmVnKCkgY29uc3QgeyByZXR1cm4gbV9yZWc7IH0KKworcHJvdGVjdGVkOgorICAgIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQXJndW1lbnRSZWdWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShpbmRleCwg
QXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRlclR5cGUoKSA6IERvdWJsZSwgb3JpZ2lu
KQorICAgICAgICAsIG1fcmVnKHJlZykKKyAgICB7CisgICAgICAgIEFTU0VSVChyZWcuaXNTZXQo
KSk7CisgICAgfQorCisgICAgUmVnIG1fcmVnOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNBcmd1bWVudFJl
Z1ZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jh
c2ljQmxvY2tVdGlscy5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvTGlz
dER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NvbnN0IGNoYXIq
IGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK0Jhc2ljQmxvY2s6OkJhc2lj
QmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2luZGV4KGlu
ZGV4KQorICAgICwgbV9mcmVxdWVuY3koZnJlcXVlbmN5KQoreworfQorCitCYXNpY0Jsb2NrOjp+
QmFzaWNCbG9jaygpCit7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6YXBwZW5kKFZhbHVlKiB2YWx1
ZSkKK3sKKyAgICBtX3ZhbHVlcy5hcHBlbmQodmFsdWUpOworfQorCitib29sIEJhc2ljQmxvY2s6
OmFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6YWRk
UHJlZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlbW92ZVBy
ZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6cmVtb3ZlUHJl
ZGVjZXNzb3IodGhpcywgYmxvY2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVk
ZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICByZXR1cm4g
QjM6OnJlcGxhY2VQcmVkZWNlc3Nvcih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNC
bG9jazo6cmVtb3ZlTm9wcygpCit7CisgICAgdW5zaWduZWQgc291cmNlSW5kZXggPSAwOworICAg
IHVuc2lnbmVkIHRhcmdldEluZGV4ID0gMDsKKyAgICB3aGlsZSAoc291cmNlSW5kZXggPCBzaXpl
KCkpIHsKKyAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92YWx1ZXNbc291cmNlSW5kZXgrK107Cisg
ICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgIT0gTm9wKQorICAgICAgICAgICAgbV92YWx1ZXNb
dGFyZ2V0SW5kZXgrK10gPSB2YWx1ZTsKKyAgICB9CisgICAgbV92YWx1ZXMucmVzaXplKHRhcmdl
dEluZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJh
c2ljQmxvY2s6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJCQiIsICp0aGlzLCAiOiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsK
KyAgICBpZiAocHJlZGVjZXNzb3JzKCkuc2l6ZSgpKQorICAgICAgICBvdXQucHJpbnQoIiAgUHJl
ZGVjZXNzb3JzOiAiLCBwb2ludGVyTGlzdER1bXAocHJlZGVjZXNzb3JzKCkpLCAiXG4iKTsKKyAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBC
Mzo6ZGVlcER1bXAodmFsdWUpLCAiXG4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQmFzaWNCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0Jhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQmFzaWNC
bG9ja19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3NvckNvbGxl
Y3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBJbnNlcnRpb25TZXQ7CitjbGFzcyBQcm9jZWR1cmU7CitjbGFz
cyBWYWx1ZTsKKworY2xhc3MgQmFzaWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QmFzaWNCbG9jayk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
dHlwZWRlZiBWZWN0b3I8VmFsdWUqPiBWYWx1ZUxpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8QmFz
aWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVu
dGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7IC8vIFRoaXMgbWF0Y2hlcyBDb250cm9sVmFsdWU6
OlN1Y2Nlc3Nvckxpc3QKKworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBkdW1wUHJlZml4
OworCisgICAgfkJhc2ljQmxvY2soKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQorCisgICAgVmFsdWVMaXN0OjppdGVyYXRvciBiZWdpbigpIHsgcmV0
dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsg
cmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmJlZ2luKCk7IH0KKyAgICBWYWx1ZUxpc3Q6
OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLmVuZCgpOyB9CisK
KyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQorICAg
IFZhbHVlKiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzW2luZGV4XTsg
fQorICAgIFZhbHVlKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07
IH0KKworICAgIFZhbHVlKiBsYXN0KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9
CisgICAgVmFsdWUqJiBsYXN0KCkgeyByZXR1cm4gbV92YWx1ZXMubGFzdCgpOyB9CisKKyAgICBj
b25zdCBWYWx1ZUxpc3QmIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAg
VmFsdWVMaXN0JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgSlNfRVhQT1JU
X1BSSVZBVEUgdm9pZCBhcHBlbmQoVmFsdWUqKTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYXBwZW5kTmV3
KFByb2NlZHVyZSYsIEFyZ3VtZW50cy4uLik7CisKKyAgICB1bnNpZ25lZCBudW1TdWNjZXNzb3Jz
KCkgY29uc3Q7CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNzb3IodW5zaWduZWQg
aW5kZXgpIGNvbnN0OworICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KTsKKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3Q7CisgICAg
U3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpOworCisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29y
QmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0OworICAgIEJhc2ljQmxvY2sqJiBzdWNjZXNzb3JC
bG9jayh1bnNpZ25lZCBpbmRleCk7CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2Nr
LCBTdWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKTsKKyAgICBTdWNjZXNzb3JDb2xsZWN0
aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2Nr
cygpIGNvbnN0OworCisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1
cm4gbV9wcmVkZWNlc3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQor
ICAgIEJhc2ljQmxvY2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9w
cmVkZWNlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNl
c3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorICAgIFByZWRlY2Vzc29y
TGlzdCYgcHJlZGVjZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKworICAgIGJv
b2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVtb3ZlUHJlZGVjZXNz
b3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sq
IGZyb20sIEJhc2ljQmxvY2sqIHRvKTsKKworICAgIGRvdWJsZSBmcmVxdWVuY3koKSBjb25zdCB7
IHJldHVybiBtX2ZyZXF1ZW5jeTsgfQorCisgICAgdm9pZCByZW1vdmVOb3BzKCk7CisKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3Ry
ZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEluc2VydGlvblNldDsK
KyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIAorICAgIC8vIEluc3RhbnRpYXRlIHZp
YSBQcm9jZWR1cmUuCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1
ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFZhbHVlTGlzdCBtX3ZhbHVlczsK
KyAgICBQcmVkZWNlc3Nvckxpc3QgbV9wcmVkZWNlc3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVl
bmN5OworfTsKKworY2xhc3MgRGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVw
QmFzaWNCbG9ja0R1bXAoY29uc3QgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9j
ayhibG9jaykKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CisgICAgeworICAgICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2st
PmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51
bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IEJhc2ljQmxvY2sqIG1fYmxvY2s7
Cit9OworCitpbmxpbmUgRGVlcEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKGNvbnN0IEJhc2ljQmxv
Y2sqIGJsb2NrKQoreworICAgIHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxvY2spOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0Jhc2ljQmxvY2tJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0Jhc2ljQmxvY2tJbmxpbmVzX2gKKyNkZWZpbmUgQjNCYXNpY0Jsb2NrSW5s
aW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgi
CisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBCYXNpY0Js
b2NrOjphcHBlbmROZXcoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCit7CisgICAgVmFsdWVUeXBlKiByZXN1bHQgPSBwcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4o
YXJndW1lbnRzLi4uKTsKKyAgICBhcHBlbmQocmVzdWx0KTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCitpbmxpbmUgdW5zaWduZWQgQmFzaWNCbG9jazo6bnVtU3VjY2Vzc29ycygpIGNvbnN0Cit7
CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5udW1TdWNjZXNzb3JzKCk7
Cit9CisKK2lubGluZSBjb25zdCBGcmVxdWVudGVkQmxvY2smIEJhc2ljQmxvY2s6OnN1Y2Nlc3Nv
cih1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9s
VmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lubGluZSBGcmVxdWVudGVkQmxvY2sm
IEJhc2ljQmxvY2s6OnN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gbGFz
dCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcihpbmRleCk7Cit9CisKK2lubGluZSBj
b25zdCBCYXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3Nv
cnMoKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3QmIEJhc2ljQmxvY2s6
OnN1Y2Nlc3NvcnMoKQoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRyb2xWYWx1ZT4oKS0+
c3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgQmFzaWNCbG9jayogQmFzaWNCbG9jazo6c3VjY2Vz
c29yQmxvY2sodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN1Y2Nlc3Nvcihp
bmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIEJhc2ljQmxvY2sqJiBCYXNpY0Jsb2NrOjpzdWNj
ZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICByZXR1cm4gc3VjY2Vzc29yKGluZGV4
KS5ibG9jaygpOworfQorCitpbmxpbmUgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBC
YXNpY0Jsb2NrOjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKQor
eworICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nlc3Nvckxp
c3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK2lubGluZSBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0
IEJhc2ljQmxvY2ssIGNvbnN0IEJhc2ljQmxvY2s6OlN1Y2Nlc3Nvckxpc3Q+IEJhc2ljQmxvY2s6
OnN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIFN1Y2Nlc3NvckNvbGxlY3Rp
b248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4oc3VjY2Vzc29ycygpKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2tVdGlscy5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja1V0aWxzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tVdGlsc19oCisjZGVmaW5lIEIzQmFzaWNCbG9j
a1V0aWxzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0luZGV4U2V0Lmgi
CisjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgQmFzaWNCbG9jaz4KK2Jvb2wgYWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJh
c2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2Nr
LT5wcmVkZWNlc3NvcnMoKTsKKworICAgIGlmIChwcmVkZWNlc3NvcnMuY29udGFpbnMocHJlZGVj
ZXNzb3IpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBwcmVkZWNlc3NvcnMuYXBwZW5k
KHByZWRlY2Vzc29yKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
QmFzaWNCbG9jaz4KK2Jvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2ssIEJh
c2ljQmxvY2sqIHByZWRlY2Vzc29yKQoreworICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2Nr
LT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNz
b3JzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gcHJlZGVj
ZXNzb3IpIHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpLS1dID0gcHJlZGVjZXNzb3JzLmxh
c3QoKTsKKyAgICAgICAgICAgIHByZWRlY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgICAgICAg
ICBBU1NFUlQoIXByZWRlY2Vzc29ycy5jb250YWlucyhwcmVkZWNlc3NvcikpOworICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgorYm9vbCByZXBsYWNlUHJlZGVjZXNzb3Io
QmFzaWNCbG9jayogYmxvY2ssIEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQorewor
ICAgIGF1dG8mIHByZWRlY2Vzc29ycyA9IGJsb2NrLT5wcmVkZWNlc3NvcnMoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcHJlZGVjZXNzb3JzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChwcmVkZWNlc3NvcnNbaV0gPT0gZnJvbSkgeworICAgICAgICAgICAgcHJlZGVjZXNzb3Jz
W2ldID0gdG87CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIFRoaXMgcmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5k
IHJlbW92ZXMgYmxvY2tzIHRoYXQgYXJlbid0IHJlYWNoYWJsZS4KK3RlbXBsYXRlPHR5cGVuYW1l
IEJhc2ljQmxvY2s+Cit2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QmFzaWNCbG9jaz4+JiBibG9ja3MpCit7CisgICAgLy8gQ2xlYXIgYWxsIHByZWRlY2Vzc29y
IGxpc3RzIGZpcnN0LgorICAgIGZvciAoYXV0byYgYmxvY2sgOiBibG9ja3MpCisgICAgICAgIGJs
b2NrLT5wcmVkZWNlc3NvcnMoKS5yZXNpemUoMCk7CisKKyAgICBHcmFwaE5vZGVXb3JrbGlzdDxC
YXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0
LnB1c2goYmxvY2tzWzBdLmdldCgpKTsKKyAgICB3aGlsZSAoQmFzaWNCbG9jayogYmxvY2sgPSB3
b3JrbGlzdC5wb3AoKSkgeworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJs
b2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgaWYgKHdvcmtsaXN0LnB1c2go
c3VjY2Vzc29yKSkKKyAgICAgICAgICAgICAgICBhZGRQcmVkZWNlc3NvcihzdWNjZXNzb3IsIGJs
b2NrKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBi
bG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGJsb2Nrc1tpXS0+cHJlZGVjZXNzb3Jz
KCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgYmxvY2tzW2ldID0gbnVsbHB0cjsKKyAgICB9Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CitWZWN0b3I8QmFzaWNCbG9jayo+IGJs
b2Nrc0luUHJlT3JkZXIoQmFzaWNCbG9jayogcm9vdCkKK3sKKyAgICBWZWN0b3I8QmFzaWNCbG9j
ayo+IHJlc3VsdDsKKyAgICBHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8
QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2gocm9vdCk7CisgICAgd2hp
bGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgcmVzdWx0
LmFwcGVuZChibG9jayk7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxv
Y2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAgd29ya2xpc3QucHVzaChzdWNjZXNz
b3IpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBC
YXNpY0Jsb2NrPgorVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRlcihCYXNpY0Js
b2NrKiByb290KQoreworICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gcmVzdWx0OworICAgIFBvc3RP
cmRlckdyYXBoTm9kZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4g
d29ya2xpc3Q7CisgICAgd29ya2xpc3QucHVzaChyb290KTsKKyAgICB3aGlsZSAoR3JhcGhOb2Rl
V2l0aE9yZGVyPEJhc2ljQmxvY2sqPiBpdGVtID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAg
c3dpdGNoIChpdGVtLm9yZGVyKSB7CisgICAgICAgIGNhc2UgR3JhcGhWaXNpdE9yZGVyOjpQcmU6
CisgICAgICAgICAgICB3b3JrbGlzdC5wdXNoUG9zdChpdGVtLm5vZGUpOworICAgICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBpdGVtLm5vZGUtPnN1Y2Nlc3NvckJsb2Nrcygp
KQorICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIEdyYXBoVmlzaXRPcmRlcjo6UG9zdDoKKyAgICAgICAgICAg
IHJlc3VsdC5hcHBlbmQoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja1V0
aWxzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmxvY2tXb3JrbGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3Qu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCbG9ja1dvcmtsaXN0X2gKKyNk
ZWZpbmUgQjNCbG9ja1dvcmtsaXN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisjaW5jbHVkZSA8d3Rm
L0dyYXBoTm9kZVdvcmtsaXN0Lmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBH
cmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IEJsb2Nr
V29ya2xpc3Q7CisKKy8vIFdoZW4geW91IHNheSBCbG9ja1dpdGg8aW50PiB5b3Ugc2hvdWxkIHJl
YWQgaXQgYXMgImJsb2NrIHdpdGggYW4gaW50Ii4KK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHVzaW5n
IEJsb2NrV2l0aCA9IEdyYXBoTm9kZVdpdGg8QmFzaWNCbG9jayosIFQ+OworCisvLyBFeHRlbmRl
ZCBibG9jayB3b3JrbGlzdCBpcyB1c2VmdWwgZm9yIGVucXVldWVpbmcgc29tZSBtZXRhLWRhdGEg
YWxvbmcgd2l0aCB0aGUgYmxvY2suIEl0IGFsc28KKy8vIHBlcm1pdHMgZm9yY2libHkgZW5xdWV1
ZWluZyB0aGluZ3MgZXZlbiBpZiB0aGUgYmxvY2sgaGFzIGFscmVhZHkgYmVlbiBzZWVuLiBJdCdz
IHVzZWZ1bCBmb3IKKy8vIHRoaW5ncyBsaWtlIGJ1aWxkaW5nIGEgc3Bhbm5pbmcgdHJlZSwgaW4g
d2hpY2ggY2FzZSBUICh0aGUgYXV4aWxpYXJ5IHBheWxvYWQpIHdvdWxkIGJlIHRoZQorLy8gc3Vj
Y2Vzc29yIGluZGV4LgordGVtcGxhdGU8dHlwZW5hbWUgVD4gdXNpbmcgRXh0ZW5kZWRCbG9ja1dv
cmtsaXN0ID0gRXh0ZW5kZWRHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Jsb2NrKiwgVCwgSW5kZXhT
ZXQ8QmFzaWNCbG9jaz4+OworCit0eXBlZGVmIEdyYXBoVmlzaXRPcmRlciBWaXNpdE9yZGVyOwor
Cit0eXBlZGVmIEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gQmxvY2tXaXRoT3JkZXI7
CisKK3R5cGVkZWYgUG9zdE9yZGVyR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4
U2V0PEJhc2ljQmxvY2s+PiBQb3N0T3JkZXJCbG9ja1dvcmtsaXN0OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Js
b2NrV29ya2xpc3RfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1Nw
ZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
U3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
aGVja1NwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NoZWNrU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7
CisKK25hbWVzcGFjZSB7CisKK3Vuc2lnbmVkIG51bUIzQXJncyhJbnN0JiBpbnN0KQoreworICAg
IHN3aXRjaCAoaW5zdC5vcmlnaW4tPm9wY29kZSgpKSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAg
ICBjYXNlIENoZWNrU3ViOgorICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIC8vIFJlc0NvbmQs
IFRtcCwgVG1wCisgICAgICAgIHJldHVybiAzOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIHJl
dHVybiAxOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNw
YWNlCisKK0NoZWNrU3BlY2lhbDo6Q2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlIG9wY29kZSwgdW5z
aWduZWQgbnVtQXJncykKKyAgICA6IG1fY2hlY2tPcGNvZGUob3Bjb2RlKQorICAgICwgbV9udW1D
aGVja0FyZ3MobnVtQXJncykKK3sKKyAgICBBU1NFUlQoaXNUZXJtaW5hbChvcGNvZGUpKTsKK30K
KworQ2hlY2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKCkKK3sKK30KKworSW5zdCBDaGVja1NwZWNp
YWw6OmhpZGRlbkJyYW5jaChjb25zdCBJbnN0JiBpbnN0KSBjb25zdAoreworICAgIEluc3QgaGlk
ZGVuQnJhbmNoKG1fY2hlY2tPcGNvZGUsIGluc3Qub3JpZ2luKTsKKyAgICBoaWRkZW5CcmFuY2gu
YXJncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KG1fbnVtQ2hlY2tBcmdzKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9udW1DaGVja0FyZ3M7ICsraSkKKyAgICAgICAgaGlkZGVuQnJh
bmNoLmFyZ3MuYXBwZW5kKGluc3QuYXJnc1tpICsgMV0pOworICAgIHJldHVybiBoaWRkZW5CcmFu
Y2g7Cit9CisKK3ZvaWQgQ2hlY2tTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0
IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBo
aWRkZW5CcmFuY2goaW5zdCkuZm9yRWFjaEFyZyhjYWxsYmFjayk7CisgICAgZm9yRWFjaEFyZ0lt
cGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIGNhbGxiYWNrKTsK
K30KKworYm9vbCBDaGVja1NwZWNpYWw6OmlzVmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1
cm4gaGlkZGVuQnJhbmNoKGluc3QpLmlzVmFsaWRGb3JtKCkKKyAgICAgICAgJiYgaXNWYWxpZElt
cGwobnVtQjNBcmdzKGluc3QpLCBtX251bUNoZWNrQXJncyArIDEsIGluc3QpOworfQorCitib29s
IENoZWNrU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgp
Cit7CisgICAgaWYgKGFyZ0luZGV4ID49IDEgJiYgYXJnSW5kZXggPCAxICsgbV9udW1DaGVja0Fy
Z3MpCisgICAgICAgIHJldHVybiBoaWRkZW5CcmFuY2goaW5zdCkuYWRtaXRzU3RhY2soYXJnSW5k
ZXggLSAxKTsKKyAgICByZXR1cm4gYWRtaXRzU3RhY2tJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9u
dW1DaGVja0FyZ3MgKyAxLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVt
cCBDaGVja1NwZWNpYWw6OmdlbmVyYXRlKEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBH
ZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZmFp
bCA9IGhpZGRlbkJyYW5jaChpbnN0KS5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgIEFTU0VS
VChmYWlsLmlzU2V0KCkpOworCisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisKKyAg
ICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgaWYgKGlzQ2hlY2tNYXRoKHZhbHVlLT5vcGNv
ZGUoKSkpIHsKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBDaGVja011bCkKKyAgICAg
ICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwKCkpOworICAgICAgICBlbHNlIGlmICh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2tTdWIgJiYgdmFsdWUtPmNoaWxkKDApLT5pc0ludCgwKSkKKyAgICAg
ICAgICAgIHJlcHMuYXBwZW5kKFZhbHVlUmVwOjpjb25zdGFudCgwKSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJlcHMuYXBwZW5kKHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFy
Z3NbM10pKTsKKyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGlu
c3QuYXJnc1syXSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+b3Bjb2Rl
KCkgPT0gQ2hlY2spOworICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6Y29uc3RhbnQoMSkp
OworICAgIH0KKworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG1fbnVtQ2hlY2tBcmdzICsg
MSwgaW5zdCwgcmVwcyk7CisgICAgCisgICAgY29udGV4dC5sYXRlUGF0aHMuYXBwZW5kKAorICAg
ICAgICBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRpb25Db250ZXh0OjpMYXRlUGF0aEZ1bmN0aW9u
PigKKyAgICAgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0
JikgeworICAgICAgICAgICAgICAgIGZhaWwubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgICAgICAgICAgICAgU3Rh
Y2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgICAgICAgICAgICAgIHBhcmFtcy52
YWx1ZSA9IHZhbHVlOworICAgICAgICAgICAgICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFw
OworICAgICAgICAgICAgICAgIHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICAgICAgICAgICAgICBw
YXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICAg
ICAgICAgICAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisgICAg
ICAgICAgICB9KSk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7IC8vIEFzIGZh
ciBhcyBBaXIgdGhpbmtzLCB3ZSBhcmUgbm90IGEgdGVybWluYWwuCit9CisKK3ZvaWQgQ2hlY2tT
cGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dChtX2NoZWNrT3Bjb2RlLCAiKCIsIG1fbnVtQ2hlY2tBcmdzLCAiKSIpOworfQorCit2b2lkIENo
ZWNrU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAg
b3V0LnByaW50KCJCMzo6Q2hlY2tWYWx1ZSBsb3dlcmVkIHRvICIsIG1fY2hlY2tPcGNvZGUsICIg
d2l0aCAiLCBtX251bUNoZWNrQXJncywgIiBhcmdzLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrU3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM0NoZWNrU3BlY2lhbF9oCisjZGVmaW5lIEIzQ2hlY2tTcGVjaWFsX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJCM1N0YWNr
bWFwU3BlY2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2Ug
d2FudCB0byBsb3dlciBDaGVjayBpbnN0cnVjdGlvbnMgdG8gYSBicmFuY2gsIGJ1dCB0aGVuIHdl
IHdhbnQgdG8gcm91dGUgdGhhdCBicmFuY2ggdG8gb3VyCisvLyBvdXQtb2YtbGluZSBjb2RlIGlu
c3RlYWQgb2YgZG9pbmcgYW55dGhpbmcgZWxzZS4gRm9yIHRoaXMgcmVhc29uLCBhIENoZWNrU3Bl
Y2lhbCB3aWxsIHJlbWVtYmVyCisvLyB3aGljaCBicmFuY2ggb3Bjb2RlIHdlIGhhdmUgc2VsZWN0
ZWQgYWxvbmcgd2l0aCB0aGUgbnVtYmVyIG9mIGFyZ3MgaW4gdGhlIG92ZXJsb2FkIHdlIHdhbnQu
IEl0CisvLyB3aWxsIGNyZWF0ZSBhbiBJbnN0IHdpdGggdGhhdCBvcGNvZGUgcGx1cyB0aGUgYXBw
cm9wcmlhdGUgYXJncyBmcm9tIHRoZSBvd25pbmcgSW5zdCB3aGVuZXZlciB5b3UKKy8vIGNhbGwg
YW55IG9mIHRoZSBjYWxsYmFja3MuCisvLworLy8gTm90ZSB0aGF0IGZvciBDaGVja0FkZCwgQ2hl
Y2tTdWIsIGFuZCBDaGVja011bCB3ZSBleHBlY3QgdGhhdCB0aGUgQjMgYXJndW1lbnRzIGFyZSB0
aGUgcmV2ZXJzZQorLy8gb2YgdGhlIEFpciBhcmd1bWVudHMgKEFkZChhLCBiKSA9PiBBZGQzMiBi
LCBhKS4gRXhjZXB0OgorLy8gLSBDaGVja1N1YigwLCB4KSwgd2hpY2ggdHVybnMgaW50byBCcmFu
Y2hOZWczMiB4LgorLy8gLSBDaGVja011bChhLCBiKSwgd2hpY2ggdHVybnMgaW50byBNdWwzMiBi
LCBhIGJ1dCB3ZSBwYXNzIEFueSBmb3IgYSdzIFZhbHVlUmVwLgorCitjbGFzcyBDaGVja1NwZWNp
YWwgOiBwdWJsaWMgU3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDaGVja1NwZWNpYWwo
QWlyOjpPcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpOworICAgIH5DaGVja1NwZWNpYWwoKTsKKwor
cHJvdGVjdGVkOgorICAgIC8vIENvbnN0cnVjdHMgYW5kIHJldHVybnMgdGhlIEluc3QgcmVwcmVz
ZW50aW5nIHRoZSBicmFuY2ggdGhhdCB0aGlzIHdpbGwgdXNlLgorICAgIEFpcjo6SW5zdCBoaWRk
ZW5CcmFuY2goY29uc3QgQWlyOjpJbnN0JikgY29uc3Q7CisKKyAgICB2b2lkIGZvckVhY2hBcmco
QWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNr
PiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsKKyAg
ICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlk
ZTsKKworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0aGUg
aGlkZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAvLyBn
ZW5lcmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2VuZXJh
dGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIEFpcjo6T3Bjb2RlIG1fY2hlY2tPcGNvZGU7
CisgICAgdW5zaWduZWQgbV9udW1DaGVja0FyZ3M7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NoZWNrU3Bl
Y2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDaGVja1ZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworQ2hlY2tWYWx1ZTo6fkNoZWNrVmFsdWUoKQoreworfQorCit2b2lk
IENoZWNrVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJzdGFja21hcCA9ICIsIHN0YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjND
aGVja1ZhbHVlX2gKKyNkZWZpbmUgQjNDaGVja1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ2hl
Y2tWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0
cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAg
ICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgY2FzZSBD
aGVja011bDoKKyAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgfkNoZWNrVmFsdWUoKTsKKworICAgIFN0YWNrbWFwIHN0YWNrbWFwOworCitw
cm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2Ug
dGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBDaGVja011bC4KKyAgICBDaGVj
a1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIGxl
ZnQtPnR5cGUoKSwgb3JpZ2luLCBsZWZ0LCByaWdodCkKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c0ludCh0eXBlKCkpKTsKKyAgICAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdodC0+dHlw
ZSgpKTsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBDaGVja0FkZCB8fCBvcGNvZGUgPT0gQ2hl
Y2tTdWIgfHwgb3Bjb2RlID09IENoZWNrTXVsKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBm
b3JtIGZvciBDaGVjay4KKyAgICBDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKG9wY29kZSA9PSBDaGVjayk7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDaGVja1ZhbHVl
X2gKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tb24uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiREZHQ29tbW9uLmgiCisjaW5jbHVkZSAi
RlRMU3RhdGUuaCIKKyNpbmNsdWRlICJPcHRpb25zLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitib29sIHNob3VsZER1bXBJUigpCit7CisgICAgcmV0dXJuIEZUTDo6dmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpIHx8IEZUTDo6c2hvdWxkRHVtcERpc2Fzc2VtYmx5KCkg
fHwgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGREdW1wSVJBdEVh
Y2hQaGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OmR1bXBHcmFwaEF0RWFjaFBoYXNlKCk7
Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUigpCit7CisgICAgcmV0dXJuIERGRzo6dmFsaWRh
dGlvbkVuYWJsZWQoKSB8fCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKTsKK30KKworYm9v
bCBzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25zOjp2
YWxpZGF0ZUdyYXBoQXRFYWNoUGhhc2UoKTsKK30KKworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQ
aGFzZSgpCit7CisgICAgcmV0dXJuIE9wdGlvbnM6OnZlcmJvc2VWYWxpZGF0aW9uRmFpbHVyZSgp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW1vbi5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzQ29tbW9uX2gKKyNkZWZpbmUgQjNDb21tb25faAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2lubGluZSBib29s
IGlzNjRCaXQoKSB7IHJldHVybiBzaXplb2Yodm9pZCopID09IDg7IH0KK2lubGluZSBib29sIGlz
MzJCaXQoKSB7IHJldHVybiAhaXM2NEJpdCgpOyB9CisKK2Jvb2wgc2hvdWxkRHVtcElSKCk7Citi
b29sIHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVIoKTsK
K2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNlKCk7Citib29sIHNob3VsZFNhdmVJUkJl
Zm9yZVBoYXNlKCk7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29tbW9uX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbW11dGF0aXZpdHkuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKwor
bmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgQ29tbXV0YXRpdml0eSBjb21tdXRhdGl2aXR5KQor
eworICAgIHN3aXRjaCAoY29tbXV0YXRpdml0eSkgeworICAgIGNhc2UgQ29tbXV0YXRpdmU6Cisg
ICAgICAgIG91dC5wcmludCgiQ29tbXV0YXRpdmUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgTm90Q29tbXV0YXRpdmU6CisgICAgICAgIG91dC5wcmludCgiTm90Q29tbXV0YXRpdmUiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb21tdXRhdGl2aXR5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0YXRpdml0eS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW11dGF0aXZpdHlfaAorI2RlZmluZSBCM0Nv
bW11dGF0aXZpdHlfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2VudW0gQ29tbXV0YXRpdml0eSB7CisgICAgQ29tbXV0YXRpdmUsCisg
ICAgTm90Q29tbXV0YXRpdmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07Cit2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpDb21tdXRhdGl2aXR5KTsKKworfSAvLyBuYW1lc3BhY2UgV1RG
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNDb21tdXRhdGl2aXR5
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0NvbnN0MzJWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
UHJvY2VkdXJlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Q29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKworVmFsdWUqIENvbnN0MzJWYWx1
ZTo6bmVnQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jKSBjb25zdAoreworICAgIHJldHVybiBwcm9j
LmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCAtbV92YWx1ZSk7Cit9CisKK1ZhbHVlKiBDb25z
dDMyVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgaW50MzJfdCBvdGhlcikgY29u
c3QKK3sKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1
ZSArIG90aGVyKTsKK30KKworVmFsdWUqIENvbnN0MzJWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2Vk
dXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50
MzIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+YXNJbnQzMigpKTsKK30KKworVmFs
dWUqIENvbnN0MzJWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1f
dmFsdWUgLSBvdGhlci0+YXNJbnQzMigpKTsKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29u
c3QzMlZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0K
KyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAg
aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIFZhbHVlKiBu
ZWdDb25zdGFudChQcm9jZWR1cmUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYWRkQ29u
c3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFs
dWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBN
ZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwg
b3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworcHJpdmF0
ZToKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0MzJWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1By
b2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0Nv
bnN0NjRWYWx1ZTo6fkNvbnN0NjRWYWx1ZSgpCit7Cit9CisKK1ZhbHVlKiBDb25zdDY0VmFsdWU6
Om5lZ0NvbnN0YW50KFByb2NlZHVyZSYgcHJvYykgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvYy5h
ZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgLW1fdmFsdWUpOworfQorCitWYWx1ZSogQ29uc3Q2
NFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGludDMyX3Qgb3RoZXIpIGNvbnN0
Cit7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUg
KyBzdGF0aWNfY2FzdDxpbnQ2NF90PihvdGhlcikpOworfQorCitWYWx1ZSogQ29uc3Q2NFZhbHVl
OjphZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAg
ICBpZiAoIW90aGVyLT5oYXNJbnQ2NCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICBy
ZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSArIG90aGVyLT5h
c0ludDY0KCkpOworfQorCitWYWx1ZSogQ29uc3Q2NFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNJbnQ2
NCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3Q2
NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAtIG90aGVyLT5hc0ludDY0KCkpOworfQorCit2b2lk
IENvbnN0NjRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQobV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Nv
bnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3Q2NFZh
bHVlX2gKKyNkZWZpbmUgQjNDb25zdDY0VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnN0NjRWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBv
cGNvZGUgPT0gQ29uc3Q2NDsgfQorICAgIAorICAgIH5Db25zdDY0VmFsdWUoKTsKKyAgICAKKyAg
ICBpbnQ2NF90IHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsgfQorCisgICAgVmFsdWUq
IG5lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBhZGRD
b25zdGFudChQcm9jZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBW
YWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlk
ZTsKKyAgICBWYWx1ZSogc3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90aGVyKSBjb25z
dCBvdmVycmlkZTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0m
KSBjb25zdCBvdmVycmlkZTsKKworICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBD
b25zdDY0VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDY0X3QgdmFsdWUp
CisgICAgICAgIDogVmFsdWUoaW5kZXgsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCisgICAgICAg
ICwgbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBpbnQ2
NF90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0NjRWYWx1ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDb25zdERvdWJsZVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0RG91YmxlVmFsdWU6On5Db25zdERv
dWJsZVZhbHVlKCkKK3sKK30KKworVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6Om5lZ0NvbnN0YW50
KFByb2NlZHVyZSYgcHJvYykgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3Vi
bGVWYWx1ZT4ob3JpZ2luKCksIC1tX3ZhbHVlKTsKK30KKworVmFsdWUqIENvbnN0RG91YmxlVmFs
dWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgaW50MzJfdCBvdGhlcikgY29uc3QKK3sK
KyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUg
KyBzdGF0aWNfY2FzdDxkb3VibGU+KG90aGVyKSk7Cit9CisKK1ZhbHVlKiBDb25zdERvdWJsZVZh
bHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhlcikgY29uc3QKK3sK
KyAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsg
b3RoZXItPmFzRG91YmxlKCkpOworfQorCitWYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6c3ViQ29u
c3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFv
dGhlci0+aGFzRG91YmxlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBw
cm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSAtIG90aGVyLT5hc0Rv
dWJsZSgpKTsKK30KKwordm9pZCBDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludGYoIiVsZSIsIG1fdmFsdWUpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0RG91YmxlVmFsdWVfaAorI2Rl
ZmluZSBCM0NvbnN0RG91YmxlVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNz
IENvbnN0RG91YmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0RG91Ymxl
OyB9CisgICAgCisgICAgfkNvbnN0RG91YmxlVmFsdWUoKTsKKyAgICAKKyAgICBkb3VibGUgdmFs
dWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICBWYWx1ZSogbmVnQ29uc3RhbnQo
UHJvY2VkdXJlJiBwcm9jKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYWRkQ29uc3RhbnQo
UHJvY2VkdXJlJiBwcm9jLCBpbnQzMl90IG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1
ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJy
aWRlOworICAgIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVlKiBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKKworICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBv
cmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29uc3REb3VibGUs
IERvdWJsZSwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KyAgICAKKyAgICBkb3VibGUgbV92YWx1ZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3REb3VibGVW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVl
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29uc3RQdHJWYWx1ZV9oCisj
ZGVmaW5lIEIzQ29uc3RQdHJWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQjNDb25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVXN1YWxseSB5b3Ugd2FudCB0byB1c2Ug
Q29uc3QzMlZhbHVlIG9yIENvbnN0NjRWYWx1ZSBkaXJlY3RseS4gQnV0IHRoaXMgaXMgdXNlZnVs
IGZvciB3cml0aW5nCisvLyBwbGF0Zm9ybS1hZ25vc3RpYyBjb2RlLiBOb3RlIHRoYXQgYSBDb25z
dFB0clZhbHVlIHdpbGwgYmVoYXZlIGxpa2UgZWl0aGVyIGEgQ29uc3QzMlZhbHVlIG9yCisvLyBD
b25zdDY0VmFsdWUgZGVwZW5kaW5nIG9uIHBsYXRmb3JtLgorCisjaWYgVVNFKEpTVkFMVUU2NCkK
K3R5cGVkZWYgQ29uc3Q2NFZhbHVlIENvbnN0UHRyVmFsdWVCYXNlOworI2Vsc2UKK3R5cGVkZWYg
Q29uc3QzMlZhbHVlIENvbnN0UHRyVmFsdWVCYXNlOworI2VuZGlmCisKK2NsYXNzIENvbnN0UHRy
VmFsdWUgOiBwdWJsaWMgQ29uc3RQdHJWYWx1ZUJhc2UgeworcHVibGljOgorICAgIHZvaWQqIHZh
bHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KENv
bnN0UHRyVmFsdWVCYXNlOjp2YWx1ZSgpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgQ29uc3RQ
dHJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVCogcG9pbnRlcikKKyAgICAg
ICAgOiBDb25zdFB0clZhbHVlQmFzZShpbmRleCwgb3JpZ2luLCBiaXR3aXNlX2Nhc3Q8aW50cHRy
X3Q+KHBvaW50ZXIpKQorICAgIHsKKyAgICB9CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICBDb25zdFB0clZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBUIHBvaW50ZXIp
CisgICAgICAgIDogQ29uc3RQdHJWYWx1ZUJhc2UoaW5kZXgsIG9yaWdpbiwgc3RhdGljX2Nhc3Q8
aW50cHRyX3Q+KHBvaW50ZXIpKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0
UHRyVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFs
dWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250
cm9sVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb250cm9sVmFsdWU6On5Db250cm9sVmFsdWUo
KQoreworfQorCit2b2lkIENvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobGlzdER1bXAobV9zdWNjZXNzb3JzKSk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnRyb2xWYWx1ZV9oCisjZGVmaW5lIEIzQ29udHJvbFZh
bHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9j
ay5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENvbnRy
b2xWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0
cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICAg
ICAgY2FzZSBKdW1wOgorICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgY2FzZSBSZXR1cm46
CisgICAgICAgIGNhc2UgT29wczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBj
YXNlIFN3aXRjaDogCisgICAgICAgICAgICAvLyBUaGlzIGlzIGhlcmUgYmVjYXVzZSBTd2l0Y2hW
YWx1ZSBpcyBhIHN1YmNsYXNzIG9mIENvbnRyb2xWYWx1ZSwgc28gd2Ugd2FudAorICAgICAgICAg
ICAgLy8gc3dpdGNoVmFsdWUtPmFzPENvbnRyb2xWYWx1ZT4oKSB0byByZXR1cm4gbm9uLW51bGwu
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHR5cGVkZWYgVmVjdG9yPEZy
ZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5Db250cm9sVmFsdWUoKTsKKworICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7
IHJldHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tp
bmRleF07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkg
eyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFN1Y2Nlc3Nvckxpc3Qm
IHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKyAgICBTdWNjZXNz
b3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgdHlwZSwgb3JpZ2lu
LCBhcmd1bWVudHMuLi4pCisgICAgeworICAgIH0KKworICAgIC8vIFN1YmNsYXNzZXMgd2lsbCBw
b3B1bGF0ZSB0aGlzLgorICAgIFN1Y2Nlc3Nvckxpc3QgbV9zdWNjZXNzb3JzOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgT29w
cy4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4pCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBPb3BzKTsKKyAgICB9CisKKyAgICAvLyBV
c2UgdGhpcyBmb3IgUmV0dXJuLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHJlc3VsdCkKKyAgICAgICAgOiBWYWx1
ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHJlc3VsdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChvcGNvZGUgPT0gUmV0dXJuKTsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgSnVt
cC4KKyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNv
ZGUgPT0gSnVtcCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQodGFyZ2V0KTsKKyAgICB9
CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNoLgorICAgIENvbnRyb2xWYWx1ZSgKKyAgICAg
ICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
cmVkaWNhdGUsCisgICAgICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgeWVzLCBjb25zdCBGcmVx
dWVudGVkQmxvY2smIG5vKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9y
aWdpbiwgcHJlZGljYXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBCcmFuY2gp
OworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHllcyk7CisgICAgICAgIG1fc3VjY2Vzc29y
cy5hcHBlbmQobm8pOworICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29udHJvbFZhbHVlX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM0ZyZXF1ZW5jeUNsYXNzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8
d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZyZXF1ZW5j
eUNsYXNzIGZyZXF1ZW5jeSkKK3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgeworICAgIGNhc2Ug
RnJlcXVlbmN5Q2xhc3M6Ok5vcm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3JtYWwiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6CisgICAgICAgIG91
dC5wcmludCgiUmFyZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVl
bmN5Q2xhc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVx
dWVuY3lDbGFzcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
RnJlcXVlbmN5Q2xhc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVu
Y3lDbGFzc19oCisjZGVmaW5lIEIzRnJlcXVlbmN5Q2xhc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgRnJlcXVl
bmN5Q2xhc3MgOiB1aW50OF90IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBoeXBvdGhlc2lz
IGFib3V0IHRoZSBmcmVxdWVuY3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0LiBUaGlz
IGlzCisgICAgLy8gdGhlIGNvbW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJhc2ljIGJsb2Nr
IGZyZXF1ZW5jeSBpbiB0aGlzIGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8gV2UgZXhwZWN0
IHRoYXQgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hlZCBzdXBlciBy
YXJlbHkuIEl0J3MgdmFsaWQgdG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlvbnMgdGhhdCBw
dW5pc2ggUmFyZSBjb2RlLiBOb3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRpb25zIHdoZXJl
IHlvdQorICAgIC8vIGhhdmUgdG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJlcXVlbmN5IGNs
YXNzIGZyb20gYSBtZXJnaW5nIG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAgICAvLyB0aGlz
IGhhcHBlbnMsIG5ldmVyIGNob29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3JtYWwuIFRoaXMg
aXMgbmVjZXNzYXJ5IGJlY2F1c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNoIFJhcmUgY29k
ZSB2ZXJ5IGJhZGx5LgorICAgIFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVx
dWVuY3lDbGFzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50
ZWRCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1
ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
RnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVl
bnRlZEJsb2NrX2gKKyNkZWZpbmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBH
ZW5lcmljRnJlcXVlbnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzR2VuZXJhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJBaXJJ
bnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNMb3dlclRv
QWlyLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1JlZHVjZVN0cmVu
Z3RoLmgiCisjaW5jbHVkZSAiQjNWYWxpZGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKwordm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxw
ZXJzJiBqaXQpCit7CisgICAgQWlyOjpDb2RlIGNvZGU7CisgICAgZ2VuZXJhdGVUb0Fpcihwcm9j
ZWR1cmUsIGNvZGUpOworICAgIEFpcjo6Z2VuZXJhdGUoY29kZSwgaml0KTsKK30KKwordm9pZCBn
ZW5lcmF0ZVRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBBaXI6OkNvZGUmIGNvZGUpCit7Cisg
ICAgLy8gV2UgZG9uJ3QgcmVxdWlyZSB0aGUgaW5jb21pbmcgSVIgdG8gaGF2ZSBwcmVkZWNlc3Nv
cnMgY29tcHV0ZWQuCisgICAgcHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgCisg
ICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlKTsK
KworICAgIC8vIElmIHdlJ3JlIGRvaW5nIHN1cGVyIHZlcmJvc2UgZHVtcGluZywgdGhlIHBoYXNl
IHNjb3BlIG9mIGFueSBwaGFzZSB3aWxsIGFscmVhZHkgZG8gYSBkdW1wLgorICAgIGlmIChzaG91
bGREdW1wSVIoKSAmJiAhc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRh
TG9nKCJJbml0aWFsIEIzOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9
CisKKyAgICByZWR1Y2VTdHJlbmd0aChwcm9jZWR1cmUpOworICAgIAorICAgIC8vIEZJWE1FOiBB
ZGQgbW9yZSBvcHRpbWl6YXRpb25zIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDUwNworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkK
KyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlKTsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBkb2lu
ZyBzdXBlciB2ZXJib3NlIGR1bXBpbmcsIHRoZSBwaGFzZSBzY29wZSBvZiBhbnkgcGhhc2Ugd2ls
bCBhbHJlYWR5IGRvIGEgZHVtcC4KKyAgICAvLyBOb3RlIHRoYXQgbG93ZXJUb0FpcigpIGFjdHMg
bGlrZSBhIHBoYXNlIGluIHRoaXMgcmVnYXJkLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAh
c2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBhZnRlciAi
LCBwcm9jZWR1cmUubGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOwor
ICAgICAgICBkYXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorCisgICAgbG93ZXJUb0Fpcihwcm9j
ZWR1cmUsIGNvZGUpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVy
YXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJhdGVfaAorI2RlZmluZSBCM0dl
bmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFz
cyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25h
bWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2Vk
dXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGFuZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBj
b2RlIGJ5IGZpcnN0CisvLyBpbnRlcm5hbGx5IGNvbnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFu
ZCB0aGVuIGdlbmVyYXRpbmcgdGhhdC4KK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUo
UHJvY2VkdXJlJiwgQ0NhbGxIZWxwZXJzJik7CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2Vk
dXJlLCBvcHRpbWl6ZXMgaXQgaW4tcGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2Fu
IHRoZW4gZ2VuZXJhdGUKKy8vIHRoZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6Z2Vu
ZXJhdGUoKS4gTm90ZSB0aGF0IGFuIEFpcjo6Q29kZSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0
aGUKKy8vIEIzOjpQcm9jZWR1cmUsIHNvIHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCMzo6
UHJvY2VkdXJlIG91dGxpdmVzIHRoZSBBaXI6OkNvZGUuCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJv
Y2VkdXJlJiwgQWlyOjpDb2RlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzR2VuZXJhdGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9j
ay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0Zy
ZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2tfaAorI2RlZmluZSBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKKyNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CisKKy8vIEEgZnJlcXVlbnRlZCBibG9jayBpcyBhIHR1cGxlIG9mIEJhc2ljQmxvY2sqIGFuZCBG
cmVxdWVuY3lDbGFzcy4gSXQncyB1c3VhbGx5IHVzZWQgYXMgYQorLy8gc3VjY2Vzc29yIGVkZ2Uu
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+CitjbGFzcyBHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKAor
ICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG51bGxwdHIsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1
ZW5jeSA9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpCisgICAgICAgIDogbV9ibG9jayhibG9jaykK
KyAgICAgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAg
ICAgICYmIG1fZnJlcXVlbmN5ID09IG90aGVyLm1fZnJlcXVlbmN5OworICAgIH0KKworICAgIGJv
b2wgb3BlcmF0b3IhPShjb25zdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhp
cyAhPSBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKCk7CisgICAgfQorCisgICAgQmFzaWNCbG9jayog
YmxvY2soKSBjb25zdCB7IHJldHVybiBtX2Jsb2NrOyB9CisgICAgQmFzaWNCbG9jayomIGJsb2Nr
KCkgeyByZXR1cm4gbV9ibG9jazsgfQorICAgIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSgpIGNv
bnN0IHsgcmV0dXJuIG1fZnJlcXVlbmN5OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lD
bGFzczo6Tm9ybWFsKQorICAgICAgICAgICAgb3V0LnByaW50KGZyZXF1ZW5jeSgpLCAiOiIpOwor
ICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAobV9ibG9jaykpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworICAgIEZyZXF1ZW5jeUNsYXNzIG1fZnJlcXVl
bmN5OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNJbmRleE1hcF9oCisjZGVmaW5lIEIzSW5kZXhNYXBfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBtYXAgZm9yIGtleXMgdGhhdCBoYXZlIGFuIGluZGV4
KCkuIEl0J3Mgc3VwZXIgZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBl
ZmZpY2llbnQgZm9yIFZhbHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNl
IG1hcHMsIHNpbmNlIFZhbHVlcyBjYW4gaGF2ZSB2ZXJ5CisvLyBzcGFyc2UgaW5kaWNlcyBhbmQg
dGhlcmUgYXJlIGEgbG90IG9mIFZhbHVlcy4KKwordGVtcGxhdGU8dHlwZW5hbWUgS2V5LCB0eXBl
bmFtZSBWYWx1ZT4KK2NsYXNzIEluZGV4TWFwIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBJbmRl
eE1hcChzaXplX3Qgc2l6ZSA9IDApCisgICAgeworICAgICAgICBtX3ZlY3Rvci5yZXNpemUoc2l6
ZSk7CisgICAgfQorCisgICAgdm9pZCByZXNpemUoc2l6ZV90IHNpemUpCisgICAgeworICAgICAg
ICBtX3ZlY3Rvci5yZXNpemUoc2l6ZSk7CisgICAgfQorCisgICAgVmFsdWUmIG9wZXJhdG9yW10o
S2V5KiBrZXkpCisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsK
KyAgICB9CisgICAgCisgICAgY29uc3QgVmFsdWUmIG9wZXJhdG9yW10oS2V5KiBrZXkpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKKyAgICB9Cisg
ICAgCitwcml2YXRlOgorICAgIFZlY3RvcjxWYWx1ZT4gbV92ZWN0b3I7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0luZGV4TWFwX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luZGV4U2V0X2gKKyNkZWZpbmUgQjNJbmRl
eFNldF9oCisKKyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0NvbW1h
UHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBp
cyBhIHNldCBmb3IgdGhpbmdzIHRoYXQgaGF2ZSBhbiBpbmRleCgpLiBJdCdzIHN1cGVyIGVmZmlj
aWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQorLy8gZWZmaWNpZW50IGZvciBWYWx1ZXMg
aWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0aGVzZSBzZXRzLCBzaW5jZSBWYWx1ZXMg
Y2FuIGhhdmUgdmVyeSBzcGFyc2UKKy8vIGluZGljZXMgYW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBW
YWx1ZXMuCisKKy8vIElmIHlvdSB3YW50IGEgc2V0IG9mIEJhc2ljQmxvY2tzLCB5b3UgZG8gSW5k
ZXhTZXQ8QmFzaWNCbG9jaz4uIFNvLCBUID0gQmFzaWNCbG9jay4KK3RlbXBsYXRlPHR5cGVuYW1l
IFQ+CitjbGFzcyBJbmRleFNldCB7CitwdWJsaWM6CisgICAgSW5kZXhTZXQoKQorICAgIHsKKyAg
ICB9CisKKyAgICBib29sIGFkZChUKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiAhbV9z
ZXQuc2V0KHZhbHVlLT5pbmRleCgpKTsKKyAgICB9CisKKyAgICBib29sIGNvbnRhaW5zKFQqIHZh
bHVlKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgY2xhc3MgSXRl
cmFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgSXRlcmFibGUoY29uc3QgQ29sbGVjdGlvblR5
cGUmIGNvbGxlY3Rpb24sIGNvbnN0IEluZGV4U2V0JiBzZXQpCisgICAgICAgICAgICA6IG1fY29s
bGVjdGlvbihjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX3NldChzZXQpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgor
ICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51
bGxwdHIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJh
dG9yKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uLCBCaXRWZWN0b3I6OlNldEJpdHNJ
dGVyYWJsZTo6aXRlcmF0b3IgaXRlcikKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigm
Y29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1faXRlcihpdGVyKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KCptX2l0ZXIpOwor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pdGVyKys7CisgICAgICAgICAgICAgICAgcmV0
dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIHJldHVybiBtX2l0ZXIgPT0gb3RoZXIubV9pdGVyOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgQ29sbGVj
dGlvblR5cGUqIG1fY29sbGVjdGlvbjsKKyAgICAgICAgICAgIEJpdFZlY3Rvcjo6U2V0Qml0c0l0
ZXJhYmxlOjppdGVyYXRvciBtX2l0ZXI7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX2NvbGxlY3Rpb24sIG1fc2V0LmJlZ2lu
KCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1f
Y29sbGVjdGlvbiwgbV9zZXQuZW5kKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25z
dCBDb2xsZWN0aW9uVHlwZSYgbV9jb2xsZWN0aW9uOworICAgICAgICBjb25zdCBJbmRleFNldCYg
bV9zZXQ7CisgICAgfTsKKworICAgIC8vIEZvciBiYXNpYyBibG9ja3MsIHlvdSBkbzoKKyAgICAv
LyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlKTsKKyAgICAvLworICAgIC8vIEZvciB2YWx1ZXMs
IHlvdSBkbzoKKyAgICAvLyBpbmRleFNldC52YWx1ZXMocHJvY2VkdXJlLnZhbHVlcygpKTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBJdGVyYWJsZTxDb2xsZWN0
aW9uVHlwZT4gdmFsdWVzKGNvbnN0IENvbGxlY3Rpb25UeXBlJiBjb2xsZWN0aW9uKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIEl0ZXJhYmxlPENvbGxlY3Rpb25UeXBlPihjb2xsZWN0aW9u
KTsKKyAgICB9CisKKyAgICBjb25zdCBCaXRWZWN0b3ImIGluZGljZXMoKSBjb25zdCB7IHJldHVy
biBtX3NldDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAg
eworICAgICAgICBDb21tYVByaW50ZXIgY29tbWE7CisgICAgICAgIGZvciAoc2l6ZV90IGluZGV4
IDogaW5kaWNlcygpLnNldEJpdHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgVDo6
ZHVtcFByZWZpeCwgaW5kZXgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCaXRWZWN0b3IgbV9z
ZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEIzSW5kZXhT
ZXRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25T
ZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkIzSW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lk
IEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICBleGVjdXRl
SW5zZXJ0aW9ucyhibG9jay0+bV92YWx1ZXMsIG1faW5zZXJ0aW9ucyk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQjNJbnNlcnRpb25TZXRfaAorI2RlZmluZSBCM0luc2VydGlvblNldF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL0luc2VydGlvbi5oPgorI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBQcm9jZWR1cmU7CitjbGFzcyBWYWx1ZTsKKwordHlw
ZWRlZiBXVEY6Okluc2VydGlvbjxWYWx1ZSo+IEluc2VydGlvbjsKKworY2xhc3MgSW5zZXJ0aW9u
U2V0IHsKK3B1YmxpYzoKKyAgICBJbnNlcnRpb25TZXQoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisg
ICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQorICAgIHsKKyAgICB9CisKKyAgICBQcm9j
ZWR1cmUmIGNvZGUoKSB7IHJldHVybiBtX3Byb2NlZHVyZTsgfQorCisgICAgdm9pZCBhcHBlbmRJ
bnNlcnRpb24oY29uc3QgSW5zZXJ0aW9uJiBpbnNlcnRpb24pCisgICAgeworICAgICAgICBtX2lu
c2VydGlvbnMuYXBwZW5kKGluc2VydGlvbik7CisgICAgfQorCisgICAgVmFsdWUqIGluc2VydFZh
bHVlKHNpemVfdCBpbmRleCwgVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXBwZW5kSW5z
ZXJ0aW9uKEluc2VydGlvbihpbmRleCwgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgorICAgIFZhbHVlKiBpbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKTsKKworICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2NrKik7CisKK3ByaXZhdGU6Cisg
ICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2lu
c2VydGlvbnM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0luc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldElubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXRJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5zZXJ0aW9uU2V0SW5saW5lc19o
CisjZGVmaW5lIEIzSW5zZXJ0aW9uU2V0SW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWUqIEluc2VydGlvblNl
dDo6aW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBy
ZXR1cm4gaW5zZXJ0VmFsdWUoaW5kZXgsIG1fcHJvY2VkdXJlLmFkZDxWYWx1ZVR5cGU+KGFyZ3Vt
ZW50cy4uLikpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0luc2VydGlvblNldElubGluZXNfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNs
dWRlICJCM0FkZHJlc3NNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1ZhbHVlLmgi
CisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29tbXV0YXRp
dml0eS5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0Lmgi
CisjaW5jbHVkZSAiQjNMb3dlcmluZ01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVl
LmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIK
KyNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisj
aW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2UgeworCitjbGFzcyBMb3dlclRv
QWlyIHsKK3B1YmxpYzoKKyAgICBMb3dlclRvQWlyKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDb2Rl
JiBjb2RlKQorICAgICAgICA6IHZhbHVlVG9UbXAocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkK
KyAgICAgICAgLCBibG9ja1RvQmxvY2socHJvY2VkdXJlLnNpemUoKSkKKyAgICAgICAgLCB1c2VD
b3VudHMocHJvY2VkdXJlKQorICAgICAgICAsIGFkZHJlc3NTZWxlY3RvcigqdGhpcykKKyAgICAg
ICAgLCBwcm9jZWR1cmUocHJvY2VkdXJlKQorICAgICAgICAsIGNvZGUoY29kZSkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgZm9yIChCMzo6QmFzaWNCbG9j
ayogYmxvY2sgOiBwcm9jZWR1cmUpCisgICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdID0g
Y29kZS5hZGRCbG9jayhibG9jay0+ZnJlcXVlbmN5KCkpOworCisgICAgICAgIC8vIExvd2VyIGRl
ZnMgYmVmb3JlIHVzZXMgb24gYSBnbG9iYWwgbGV2ZWwuIFRoaXMgaXMgYSBnb29kIGhldXJpc3Rp
YyB0byBsb2NrIGRvd24gYQorICAgICAgICAvLyBob2lzdGVkIGFkZHJlc3MgZXhwcmVzc2lvbiBi
ZWZvcmUgd2UgZHVwbGljYXRlIGl0IGJhY2sgaW50byB0aGUgbG9vcC4KKyAgICAgICAgZm9yIChC
Mzo6QmFzaWNCbG9jayogYmxvY2sgOiBwcm9jZWR1cmUuYmxvY2tzSW5QcmVPcmRlcigpKSB7Cisg
ICAgICAgICAgICAvLyBSZXNldCBzb21lIHN0YXRlLgorICAgICAgICAgICAgaW5zdHMucmVzaXpl
KDApOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBQcm9jZXNzIGJsb2NrcyBpbiByZXZl
cnNlIG9yZGVyIHNvIHdlIHNlZSB1c2VzIGJlZm9yZSBkZWZzLiBUaGF0J3Mgd2hhdCBhbGxvd3Mg
dXMKKyAgICAgICAgICAgIC8vIHRvIG1hdGNoIHBhdHRlcm5zIGVmZmVjdGl2ZWx5LgorICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gYmxvY2stPnNpemUoKTsgaS0tOykgeworICAgICAgICAg
ICAgICAgIGN1cnJlbnRWYWx1ZSA9IGJsb2NrLT5hdChpKTsKKyAgICAgICAgICAgICAgICBpZiAo
bG9ja2VkLmNvbnRhaW5zKGN1cnJlbnRWYWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICAgICAgICAgIGluc3RzLmFwcGVuZChWZWN0b3I8SW5zdD4oKSk7CisgICAg
ICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBydW5Mb3dlcmluZ01hdGNoZXIoY3VycmVudFZhbHVl
LCAqdGhpcyk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgZGF0YUxvZygiRkFUQUw6IGNvdWxkIG5vdCBsb3dlciAiLCBkZWVwRHVtcChjdXJyZW50
VmFsdWUpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IC8vIE5vdyBhcHBlbmQgdGhlIGluc3RydWN0aW9ucy4gaW5zdHMgY29udGFpbnMgdGhlbSBpbiBy
ZXZlcnNlIG9yZGVyLCBzbyB3ZSBwcm9jZXNzCisgICAgICAgICAgICAvLyBpdCBpbiByZXZlcnNl
LgorICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gaW5zdHMuc2l6ZSgpOyBpLS07KSB7Cisg
ICAgICAgICAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogaW5zdHNbaV0pCisgICAgICAgICAgICAg
ICAgICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPmFwcGVuZEluc3QoV1RGOjptb3ZlKGluc3QpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHRoYXQgdGhlIHN1Y2Nl
c3NvcnMgYXJlIHNldCB1cCBjb3JyZWN0bHkuCisgICAgICAgICAgICBBU1NFUlQoYmxvY2stPnN1
Y2Nlc3NvcnMoKS5zaXplKCkgPD0gMik7CisgICAgICAgICAgICBmb3IgKEIzOjpCYXNpY0Jsb2Nr
KiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAg
YmxvY2tUb0Jsb2NrW2Jsb2NrXS0+c3VjY2Vzc29ycygpLmFwcGVuZChibG9ja1RvQmxvY2tbc3Vj
Y2Vzc29yXSk7CisgICAgICAgIH0KKworICAgICAgICBBaXI6Okluc2VydGlvblNldCBpbnNlcnRp
b25TZXQoY29kZSk7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IHByb2xvZ3VlKQorICAgICAg
ICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydEluc3QoMCwgV1RGOjptb3ZlKGluc3QpKTsKKyAgICAg
ICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29kZVswXSk7CisgICAgfQorCisgICAgVG1wIHRtcChW
YWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBUbXAmIHRtcCA9IHZhbHVlVG9UbXBbdmFsdWVd
OworICAgICAgICBpZiAoIXRtcCkKKyAgICAgICAgICAgIHRtcCA9IGNvZGUubmV3VG1wKGlzSW50
KHZhbHVlLT50eXBlKCkpID8gQXJnOjpHUCA6IEFyZzo6RlApOworICAgICAgICByZXR1cm4gdG1w
OworICAgIH0KKworICAgIC8vIFRoaXMgdHVybnMgdGhlIGdpdmVuIG9wZXJhbmQgaW50byBhbiBh
ZGRyZXNzLgorICAgIEFyZyBlZmZlY3RpdmVBZGRyKFZhbHVlKiBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgYWRkcmVzc1NlbGVjdG9yLnNlbGVjdGVkQWRkcmVzcyA9IEFyZygpOworICAgICAgICBp
ZiAocnVuQWRkcmVzc01hdGNoZXIoYWRkcmVzcywgYWRkcmVzc1NlbGVjdG9yKSkKKyAgICAgICAg
ICAgIHJldHVybiBhZGRyZXNzU2VsZWN0b3Iuc2VsZWN0ZWRBZGRyZXNzOworCisgICAgICAgIHJl
dHVybiBBcmc6OmFkZHIodG1wKGFkZHJlc3MpKTsKKyAgICB9CisKKyAgICBBcmcgZWZmZWN0aXZl
QWRkcihWYWx1ZSogYWRkcmVzcywgVmFsdWUqIG1lbW9yeVZhbHVlKQorICAgIHsKKyAgICAgICAg
QXJnIHJlc3VsdCA9IGVmZmVjdGl2ZUFkZHIoYWRkcmVzcyk7CisgICAgICAgIEFTU0VSVChyZXN1
bHQpOworCisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gbWVtb3J5VmFsdWUtPmFzPE1lbW9yeVZh
bHVlPigpLT5vZmZzZXQoKTsKKyAgICAgICAgQXJnIG9mZnNldFJlc3VsdCA9IHJlc3VsdC53aXRo
T2Zmc2V0KG9mZnNldCk7CisgICAgICAgIGlmICghb2Zmc2V0UmVzdWx0KQorICAgICAgICAgICAg
cmV0dXJuIEFyZzo6YWRkcih0bXAoYWRkcmVzcyksIG9mZnNldCk7CisgICAgICAgIHJldHVybiBv
ZmZzZXRSZXN1bHQ7CisgICAgfQorCisgICAgLy8gVGhpcyBnaXZlcyB5b3UgdGhlIGFkZHJlc3Mg
b2YgdGhlIGdpdmVuIExvYWQgb3IgU3RvcmUuIElmIGl0J3Mgbm90IGEgTG9hZCBvciBTdG9yZSwg
dGhlbgorICAgIC8vIGl0IHJldHVybnMgQXJnKCkuCisgICAgQXJnIGFkZHIoVmFsdWUqIG1lbW9y
eVZhbHVlKQorICAgIHsKKyAgICAgICAgTWVtb3J5VmFsdWUqIHZhbHVlID0gbWVtb3J5VmFsdWUt
PmFzPE1lbW9yeVZhbHVlPigpOworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0
dXJuIEFyZygpOworCisgICAgICAgIHJldHVybiBlZmZlY3RpdmVBZGRyKHZhbHVlLT5jaGlsZHJl
bigpLmxhc3QoKSwgdmFsdWUpOworICAgIH0KKworICAgIEFyZyBsb2FkQWRkcihWYWx1ZSogbG9h
ZFZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKGxvYWRWYWx1ZS0+b3Bjb2RlKCkgPT0gTG9hZCkK
KyAgICAgICAgICAgIHJldHVybiBhZGRyKGxvYWRWYWx1ZSk7CisgICAgICAgIHJldHVybiBBcmco
KTsKKyAgICB9CisKKyAgICBBcmcgaW1tKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlm
ICh2YWx1ZS0+aGFzSW50MzIoKSkKKyAgICAgICAgICAgIHJldHVybiBBcmc6OmltbSh2YWx1ZS0+
YXNJbnQzMigpKTsKKyAgICAgICAgcmV0dXJuIEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW1P
clRtcChWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBpZiAoQXJnIHJlc3VsdCA9IGltbSh2
YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAgICAgICByZXR1cm4gdG1wKHZh
bHVlKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUsIENvbW11dGF0
aXZpdHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAgIHZvaWQgYXBwZW5kQmlu
T3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIFRtcCByZXN1bHQg
PSB0bXAoY3VycmVudFZhbHVlKTsKKyAgICAgICAgCisgICAgICAgIC8vIFRocmVlLW9wZXJhbmQg
Zm9ybXMgbGlrZToKKyAgICAgICAgLy8gICAgIE9wIGEsIGIsIGMKKyAgICAgICAgLy8gbWVhbiBz
b21ldGhpbmcgbGlrZToKKyAgICAgICAgLy8gICAgIGMgPSBhIE9wIGIKKworICAgICAgICBpZiAo
aXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJnOjpUbXAsIEFyZzo6VG1wKSkgeworICAg
ICAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoaW1tKHJpZ2h0KSkgeworICAgICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2Rl
LCBpbW0ocmlnaHQpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIC8vIEEgbm9uLWNvbW11dGF0aXZlIG9wZXJhdGlvbiBjb3VsZCBoYXZlIGFuIGltbWVk
aWF0ZSBpbiBsZWZ0LgorICAgICAgICAgICAgICAgIGlmIChpbW0obGVmdCkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKGxlZnQpLCB0bXAocmlnaHQpLCByZXN1bHQp
OworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKGltbShyaWdodCkgJiYgaXNWYWxpZEZv
cm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpJbW0sIEFyZzo6VG1wKSkgeworICAgICAgICAgICAg
YXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCBpbW0ocmlnaHQpLCByZXN1bHQpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLy8gTm90ZSB0aGF0IG5vIGtub3duIGFy
Y2hpdGVjdHVyZSBoYXMgYSB0aHJlZS1vcGVyYW5kIGZvcm0gb2YgYmluYXJ5IG9wZXJhdGlvbnMg
dGhhdCBhbHNvCisgICAgICAgIC8vIGxvYWQgZnJvbSBtZW1vcnkuIElmIHN1Y2ggYW4gYWJvbWlu
YXRpb24gZGlkIGV4aXN0LCB3ZSB3b3VsZCBoYW5kbGUgaXQgc29tZXdoZXJlIGFyb3VuZAorICAg
ICAgICAvLyBoZXJlLgorCisgICAgICAgIC8vIFR3by1vcGVyYW5kIGZvcm1zIGxpa2U6CisgICAg
ICAgIC8vICAgICBPcCBhLCBiCisgICAgICAgIC8vIG1lYW4gc29tZXRoaW5nIGxpa2U6CisgICAg
ICAgIC8vICAgICBiID0gYiBPcCBhCisKKyAgICAgICAgLy8gQXQgdGhpcyBwb2ludCwgd2UgcHJl
ZmVyIHZlcnNpb25zIG9mIHRoZSBvcGVyYXRpb24gdGhhdCBoYXZlIGEgZnVzZWQgbG9hZCBvciBh
biBpbW1lZGlhdGUKKyAgICAgICAgLy8gb3ZlciB0aHJlZSBvcGVyYW5kIGZvcm1zLgorICAgICAg
ICAKKyAgICAgICAgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUpIHsKKyAgICAgICAg
ICAgIEFyZyBsZWZ0QWRkciA9IGxvYWRBZGRyKGxlZnQpOworICAgICAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKG9wY29kZSwgbGVmdEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsKKyAgICAgICAgICAg
ICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGN1cnJlbnRWYWx1ZS0+dHlwZSgpKSwgdG1w
KHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBsZWZ0QWRk
ciwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKworICAgICAgICBBcmcgcmlnaHRBZGRyID0gbG9hZEFkZHIocmlnaHQpOworICAgICAg
ICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCByaWdodEFkZHIua2luZCgpLCBBcmc6OlRtcCkpIHsK
KyAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBl
KCkpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCByaWdo
dEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoaW1tKHJpZ2h0KSAmJiBpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRt
cCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoY3VycmVudFZhbHVl
LT50eXBlKCkpLCB0bXAobGVmdCksIHJlc3VsdCk7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2Rl
LCBpbW0ocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6VG1wLCBBcmc6
OlRtcCkpIHsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgdG1wKHJpZ2h0
KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGFw
cGVuZChyZWxheGVkTW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkpLCB0bXAobGVmdCks
IHJlc3VsdCk7CisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChyaWdodCksIHJlc3VsdCk7Cisg
ICAgfQorCisgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21tdXRhdGl2aXR5IGNv
bW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICBib29sIHRyeUFwcGVuZFN0b3JlQmlu
T3AoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBU
aGlzIGZhaWxzIHRvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgZWZmZWN0cyBiZXR3ZWVuIHRoZSBM
b2FkIGFuZCB0aGUgU3RvcmUgdGhhdAorICAgICAgICAvLyBjb3VsZCBjbG9iYmVyIHRoZSBsb2Fk
ZWQgdmFsdWUuIFdlIG5lZWQgdG8gY2hlY2sgc3VjaCB0aGluZ3MgYmVjYXVzZSB3ZSBhcmUgZWZm
ZWN0aXZlbHkKKyAgICAgICAgLy8gc2lua2luZyB0aGUgbG9hZC4KKyAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzNAorICAgICAgICAKKyAgICAg
ICAgQXJnIHN0b3JlQWRkciA9IGFkZHIoY3VycmVudFZhbHVlKTsKKyAgICAgICAgQVNTRVJUKHN0
b3JlQWRkcik7CisKKyAgICAgICAgVmFsdWUqIG90aGVyVmFsdWU7CisgICAgICAgIGlmIChhZGRy
KGxlZnQpID09IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSByaWdodDsKKyAg
ICAgICAgZWxzZSBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSAmJiBhZGRyKHJpZ2h0
KSA9PSBzdG9yZUFkZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gbGVmdDsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChpc1ZhbGlkRm9y
bShvcGNvZGUsIEFyZzo6SW1tLCBzdG9yZUFkZHIua2luZCgpKSAmJiBpbW0ob3RoZXJWYWx1ZSkp
IHsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShvdGhlclZhbHVlKSwgc3RvcmVBZGRy
KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFp
c1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBzdG9yZUFkZHIua2luZCgpKSkKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAob3RoZXJWYWx1
ZSksIHN0b3JlQWRkcik7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIEFpcjo6
T3Bjb2RlIG1vdmVGb3JUeXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlw
ZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIE1vdmUzMjsKKyAg
ICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzNjRCaXQoKSk7
CisgICAgICAgICAgICByZXR1cm4gTW92ZTsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAg
ICAgICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBBaXI6
Ok9wY29kZSByZWxheGVkTW92ZUZvclR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dp
dGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNhc2UgSW50NjQ6Cisg
ICAgICAgICAgICByZXR1cm4gTW92ZTsKKyAgICAgICAgY2FzZSBEb3VibGU6CisgICAgICAgICAg
ICByZXR1cm4gTW92ZURvdWJsZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQWlyOjpPcGNvZGUgb3Bj
b2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBpbnN0cy5sYXN0
KCkuYXBwZW5kKEluc3Qob3Bjb2RlLCBjdXJyZW50VmFsdWUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisgICAgCisgICAgSW5kZXhTZXQ8VmFsdWU+IGxv
Y2tlZDsgLy8gVGhlc2UgYXJlIHZhbHVlcyB0aGF0IHdpbGwgaGF2ZSBubyBUbXAgaW4gQWlyLgor
ICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IHZhbHVlVG9UbXA7IC8vIFRoZXNlIGFyZSB2YWx1ZXMg
dGhhdCBtdXN0IGhhdmUgYSBUbXAgaW4gQWlyLiBXZSBzYXkgdGhhdCBhIFZhbHVlKiB3aXRoIGEg
bm9uLW51bGwgVG1wIGlzICJwaW5uZWQiLgorICAgIEluZGV4TWFwPEIzOjpCYXNpY0Jsb2NrLCBB
aXI6OkJhc2ljQmxvY2sqPiBibG9ja1RvQmxvY2s7CisKKyAgICBVc2VDb3VudHMgdXNlQ291bnRz
OworCisgICAgVmVjdG9yPFZlY3RvcjxJbnN0LCA0Pj4gaW5zdHM7CisgICAgVmVjdG9yPEluc3Q+
IHByb2xvZ3VlOworCisgICAgVmFsdWUqIGN1cnJlbnRWYWx1ZTsKKworICAgIC8vIFRoZSBhZGRy
ZXNzIHNlbGVjdG9yIHdpbGwgbWF0Y2ggYW55IHBhdHRlcm4gd2hlcmUgdGhlIGlucHV0IG9wZXJh
bmRzIGFyZSBhdmFpbGFibGUgYXMgVG1wcy4KKyAgICAvLyBJdCBkb2Vzbid0IGNhcmUgYWJvdXQg
c2hhcmluZy4gSXQgd2lsbCBoYXBwaWx5IGVtaXQgdGhlIHNhbWUgYWRkcmVzcyBleHByZXNzaW9u
IG92ZXIgYW5kIG92ZXIKKyAgICAvLyBhZ2FpbiByZWdhcmRsZXNzIG9mIHRoZSBleHByZXNzaW9u
J3MgY29tcGxleGl0eS4gVGhpcyB3b3JrcyBvdXQgZmluZSwgc2luY2UgYXQgdGhlIG1hY2hpbmUK
KyAgICAvLyBsZXZlbCwgYWRkcmVzcyBleHByZXNzaW9ucyBhcmUgc3VwZXIgY2hlYXAuIEhvd2V2
ZXIsIHRoaXMgZG9lcyBoYXZlIGEgaGFjayB0byBhdm9pZAorICAgIC8vICJ1bmhvaXN0aW5nIiBh
ZGRyZXNzIGV4cHJlc3Npb25zLgorICAgIGNsYXNzIEFkZHJlc3NTZWxlY3RvciB7CisgICAgcHVi
bGljOgorICAgICAgICBBZGRyZXNzU2VsZWN0b3IoTG93ZXJUb0FpciYgbG93ZXIpCisgICAgICAg
ICAgICA6IGxvd2VyKGxvd2VyKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBib29s
IGFjY2VwdFJvb3QoVmFsdWUqIHJvb3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIHRoaXMtPnJv
b3QgPSByb290OworICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBtYXRjaCBhbiBhZGRy
ZXNzIGV4cHJlc3Npb24gdGhhdCBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkCisgICAgICAgICAg
ICAvLyBleHBsaWNpdGx5LgorICAgICAgICAgICAgcmV0dXJuICFsb3dlci52YWx1ZVRvVG1wW3Jv
b3RdOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhY2NlcHRSb290TGF0ZShWYWx1ZSopIHsg
fQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgYm9v
bCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQor
ICAgICAgICB7CisgICAgICAgICAgICBpZiAobG93ZXIudmFsdWVUb1RtcFt2YWx1ZV0pCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2VwdEludGVy
bmFscyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNjZXB0SW50ZXJu
YWxzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKEFyZ3VtZW50cy4uLikg
eyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAgICBi
b29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLmxvY2tlZC5jb250YWlucyh2YWx1ZSkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgcmV0dXJuIGFjY2Vw
dE9wZXJhbmRzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRP
cGVyYW5kcygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4u
LikgeyB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDEoVmFsdWUqIGluZGV4LCBWYWx1ZSog
bG9nU2NhbGUsIFZhbHVlKiBiYXNlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG9nU2Nh
bGUtPmFzSW50KCkgPCAwIHx8IGxvZ1NjYWxlLT5hc0ludCgpID4gMykKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4
KAorICAgICAgICAgICAgICAgIGxvd2VyLnRtcChiYXNlKSwgbG93ZXIudG1wKGluZGV4KSwgMSA8
PCBsb2dTY2FsZS0+YXNJbnQoKSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQyKFZhbHVlKiBiYXNlLCBWYWx1ZSogaW5kZXgs
IFZhbHVlKiBsb2dTY2FsZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRyeUFkZFNo
aWZ0MShpbmRleCwgbG9nU2NhbGUsIGJhc2UpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0
cnlBZGQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAgICAgeworICAgICAgICAgICAg
aWYgKHJpZ2h0LT5oYXNJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhpcyBwcm9kdWN0
aW9uIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeSBzaW5jZSB3ZSBleHBlY3QKKyAgICAgICAgICAg
ICAgICAvLyBMb2FkKEFkZChAeCwgQGNvbnN0MSksIG9mZnNldCA9IGNvbnN0MikgdG8gaGF2ZSBh
bHJlYWR5IGJlZW4gc3RyZW5ndGgtcmVkdWNlZAorICAgICAgICAgICAgICAgIC8vIHRvIExvYWQo
QHgsIG9mZnNldCA9IGNvbnN0MSArIGNvbnN0MikuCisgICAgICAgICAgICAgICAgc2VsZWN0ZWRB
ZGRyZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChsZWZ0KSwgcmlnaHQtPmFzSW50MzIoKSk7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6aW5kZXgobG93ZXIudG1wKGxlZnQpLCBsb3dlci50bXAo
cmlnaHQpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCB0cnlEaXJlY3QoKQorICAgICAgICB7CisgICAgICAgICAgICBzZWxlY3RlZEFkZHJlc3Mg
PSBBcmc6OmFkZHIobG93ZXIudG1wKHJvb3QpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICB9CisgICAgICAgIAorICAgICAgICBMb3dlclRvQWlyJiBsb3dlcjsKKyAgICAgICAg
VmFsdWUqIHJvb3Q7CisgICAgICAgIEFyZyBzZWxlY3RlZEFkZHJlc3M7CisgICAgfTsKKyAgICBB
ZGRyZXNzU2VsZWN0b3IgYWRkcmVzc1NlbGVjdG9yOworCisgICAgLy8gQmVsb3cgaXMgdGhlIGNv
ZGUgZm9yIGEgbG93ZXJpbmcgc2VsZWN0b3IsIHNvIHRoYXQgd2UgY2FuIHBhc3MgKnRoaXMgdG8g
cnVuTG93ZXJpbmdNYXRjaGVyLgorICAgIC8vIFRoaXMgd2lsbCBtYXRjaCBjb21wbGV4IG11bHRp
LXZhbHVlIGV4cHJlc3Npb25zLCBidXQgb25seSBpZiB0aGVyZSBpcyBubyBzaGFyaW5nLiBGb3Ig
ZXhhbXBsZSwKKyAgICAvLyBpdCB3b24ndCBtYXRjaCBhIExvYWQgdHdpY2UgYW5kIGNhdXNlIHRo
ZSBnZW5lcmF0ZWQgY29kZSB0byBkbyB0d28gbG9hZHMgd2hlbiB0aGUgb3JpZ2luYWwKKyAgICAv
LyBjb2RlIGp1c3QgZGlkIG9uZS4KKyAgICAKKyAgICBib29sIGFjY2VwdFJvb3QoVmFsdWUqIHJv
b3QpCisgICAgeworICAgICAgICBBU1NFUlRfVU5VU0VEKHJvb3QsICFsb2NrZWQuY29udGFpbnMo
cm9vdCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgdm9pZCBhY2Nl
cHRSb290TGF0ZShWYWx1ZSopIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KKyAgICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50
cy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICAvLyBJZiBvbmUgb2YgdGhlIGludGVybmFs
IHRoaW5ncyBoYXMgYWxyZWFkeSBiZWVuIGNvbXB1dGVkLCB0aGVuIHdlIGRvbid0IHdhbnQgdG8g
Y2F1c2UKKyAgICAgICAgLy8gaXQgdG8gYmUgcmVjb21wdXRlZCBhZ2Fpbi4KKyAgICAgICAgaWYg
KHZhbHVlVG9UbXBbdmFsdWVdKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAK
KyAgICAgICAgLy8gV2UgcmVxdWlyZSBpbnRlcm5hbHMgdG8gaGF2ZSBvbmx5IG9uZSB1c2UgLSB1
cy4KKyAgICAgICAgaWYgKHVzZUNvdW50c1t2YWx1ZV0gIT0gMSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBhY2NlcHRJbnRlcm5hbHMoYXJndW1l
bnRzLi4uKTsKKyAgICB9CisgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoKSB7IHJldHVybiB0cnVl
OyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQg
YWNjZXB0SW50ZXJuYWxzTGF0ZShWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgeworICAgICAgICBsb2NrZWQuYWRkKHZhbHVlKTsKKyAgICAgICAgYWNjZXB0SW50ZXJu
YWxzTGF0ZShhcmd1bWVudHMuLi4pOworICAgIH0KKyAgICB2b2lkIGFjY2VwdEludGVybmFsc0xh
dGUoKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
Ym9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgeworICAgICAgICBpZiAobG9ja2VkLmNvbnRhaW5zKHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIGFjY2VwdE9wZXJhbmRzKGFyZ3VtZW50cy4u
Lik7CisgICAgfQorICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9Cisg
ICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYWNjZXB0
T3BlcmFuZHNMYXRlKEFyZ3VtZW50cy4uLikgeyB9CisgICAgCisgICAgYm9vbCB0cnlMb2FkKFZh
bHVlKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXBwZW5kKAorICAgICAgICAgICAgbW92ZUZv
clR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkpLAorICAgICAgICAgICAgZWZmZWN0aXZlQWRkcihh
ZGRyZXNzLCBjdXJyZW50VmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUq
IHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAg
Y2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4o
bGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgSW50
NjQ6CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxBZGQ2NCwgQ29tbXV0YXRpdmU+KGxlZnQsIHJp
Z2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5QW5kKFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkg
eworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5kMzIsIENv
bW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDY0LCBDb21tdXRhdGl2
ZT4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlT
dG9yZUFkZExvYWQoVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCwgVmFsdWUqKQorICAgIHsKKyAg
ICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAg
ICAgICAgIHJldHVybiB0cnlBcHBlbmRTdG9yZUJpbk9wPEFkZDMyLCBDb21tdXRhdGl2ZT4obGVm
dCwgcmlnaHQpOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLy8gRklYTUU6IEltcGxl
bWVudCBtb3JlIHR5cGVzIQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorICAgIAorICAgIGJvb2wgdHJ5U3RvcmVBbmRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSog
cmlnaHQsIFZhbHVlKikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7Cisg
ICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gdHJ5QXBwZW5kU3RvcmVCaW5P
cDxBbmQzMiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIHRyeVN0b3JlKFZh
bHVlKiB2YWx1ZSwgVmFsdWUqIGFkZHJlc3MpCisgICAgeworICAgICAgICBhcHBlbmQobW92ZUZv
clR5cGUodmFsdWUtPnR5cGUoKSksIHRtcCh2YWx1ZSksIGVmZmVjdGl2ZUFkZHIoYWRkcmVzcywg
Y3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wg
dHJ5VHJ1bmNBcmd1bWVudFJlZyhWYWx1ZSogYXJndW1lbnRSZWcpCisgICAgeworICAgICAgICBw
cm9sb2d1ZS5hcHBlbmQoSW5zdCgKKyAgICAgICAgICAgIE1vdmUsIGN1cnJlbnRWYWx1ZSwKKyAg
ICAgICAgICAgIFRtcChhcmd1bWVudFJlZy0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKS0+YXJndW1l
bnRSZWcoKSksCisgICAgICAgICAgICB0bXAoY3VycmVudFZhbHVlKSkpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeVRydW5jKFZhbHVlKiB2YWx1ZSkKKyAgICB7
CisgICAgICAgIGFwcGVuZChNb3ZlLCB0bXAodmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5QXJndW1lbnRSZWcoKQor
ICAgIHsKKyAgICAgICAgcHJvbG9ndWUuYXBwZW5kKEluc3QoCisgICAgICAgICAgICBtb3ZlRm9y
VHlwZShjdXJyZW50VmFsdWUtPnR5cGUoKSksIGN1cnJlbnRWYWx1ZSwKKyAgICAgICAgICAgIFRt
cChjdXJyZW50VmFsdWUtPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkpLAor
ICAgICAgICAgICAgdG1wKGN1cnJlbnRWYWx1ZSkpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIAorICAgIGJvb2wgdHJ5Q29uc3QzMigpCisgICAgeworICAgICAgICBhcHBlbmQo
TW92ZSwgaW1tKGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5Q29uc3Q2NCgpCisgICAgeworICAg
ICAgICBhcHBlbmQoTW92ZSwgQXJnOjppbW02NChjdXJyZW50VmFsdWUtPmFzSW50NjQoKSksIHRt
cChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9v
bCB0cnlJZGVudGl0eShWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBhcHBlbmQocmVsYXhl
ZE1vdmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpLCBpbW1PclRtcCh2YWx1ZSksIHRtcChjdXJyZW50
VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5
UmV0dXJuKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZv
clR5cGUodmFsdWUtPnR5cGUoKSksIGltbU9yVG1wKHZhbHVlKSwgVG1wKEdQUkluZm86OnJldHVy
blZhbHVlR1BSKSk7CisgICAgICAgIGFwcGVuZChSZXQpOworICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICB9CisgICAgCisgICAgUHJvY2VkdXJlJiBwcm9jZWR1cmU7CisgICAgQ29kZSYgY29kZTsK
K307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGxvd2VyVG9BaXIoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KHByb2NlZHVyZSwgImxvd2VyVG9BaXIiKTsKKyAgICBMb3dlclRvQWlyIGxvd2VyVG9BaXIocHJv
Y2VkdXJlLCBjb2RlKTsKKyAgICBsb3dlclRvQWlyLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzTG93ZXJUb0Fpcl9oCisjZGVmaW5lIEIzTG93ZXJUb0Fpcl9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2Vk
dXJlOworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKworLy8gVGhpcyBsb3dlcnMgdGhl
IGN1cnJlbnQgQjMgcHJvY2VkdXJlIHRvIGFuIEFpciBjb2RlLgorCit2b2lkIGxvd2VyVG9BaXIo
UHJvY2VkdXJlJiwgQWlyOjpDb2RlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzTG93ZXJUb0Fpcl9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIu
cGF0dGVybnMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dl
cmluZ01hdGNoZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBMb3dlcmluZ01hdGNo
ZXIKKworIyBUaGVzZSBydWxlcyBhcmUgY29uc2lkZXJlZCBpbiBhIGNhc2NhZGUsIHN0YXJ0aW5n
IGF0IHRoZSB0b3AuIEl0J3MgaW1wbGVuZW50ZWQgdXNpbmcgc3dpdGNoCisjIHN0YXRlbWVudHMg
d2hlcmV2ZXIgcG9zc2libGUuCisKKyMgTm90ZTogYWRkaW5nIG1vcmUgcnVsZXMgdG8gdGhpcyBt
YXRjaGVyIGlzIGFuIGV4Y2VsbGVudCB3YXkgb2YgaW1wcm92aW5nIHBlcmZvcm1hbmNlIQorCitM
b2FkID0gTG9hZChhZGRyZXNzKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCitBbmQgPSBCaXRB
bmQobGVmdCwgcmlnaHQpCisKK1N0b3JlQWRkTG9hZCA9IFN0b3JlKEFkZChsZWZ0LCByaWdodCks
IGFkZHJlc3MpCitTdG9yZUFuZExvYWQgPSBTdG9yZShCaXRBbmQobGVmdCwgcmlnaHQpLCBhZGRy
ZXNzKQorU3RvcmUgPSBTdG9yZSh2YWx1ZSwgYWRkcmVzcykKKworVHJ1bmNBcmd1bWVudFJlZyA9
IFRydW5jKGFyZ3VtZW50UmVnID0gQXJndW1lbnRSZWcoKSkKK1RydW5jID0gVHJ1bmModmFsdWUp
CisKK0FyZ3VtZW50UmVnID0gQXJndW1lbnRSZWcoKQorCitDb25zdDMyID0gQ29uc3QzMigpCitD
b25zdDY0ID0gQ29uc3Q2NCgpCisKKyMgSXQgd291bGQgYmUgZmFudGFzdGljIHRvIG5vdCBoYXZl
IHRvIGhhdmUgdGhpcyBoZXJlLCBidXQgdGhlIHBoaWxvc29waHkgb2Ygb3VyIGxvd2VyaW5nIGlz
IHRoYXQKKyMgaXQgc2hvdWxkIGJlIHNvdW5kIGV2ZW4gaWYgd2UgaGF2ZW4ndCBydW4gb3B0aW1p
emF0aW9ucy4KK0lkZW50aXR5ID0gSWRlbnRpdHkodmFsdWUpCisKK1JldHVybiA9IFJldHVybih2
YWx1ZSkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJCM01lbW9yeVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworTWVtb3J5VmFsdWU6On5NZW1vcnlWYWx1ZSgpCit7Cit9CisK
K3ZvaWQgTWVtb3J5VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgaWYgKG1fb2Zmc2V0KQorICAgICAgICBvdXQucHJpbnQoIm9mZnNldCA9ICIsIG1fb2Zmc2V0
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzTWVtb3J5VmFsdWVfaAorI2RlZmluZSBCM01l
bW9yeVZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBGSVhNRTogQWRkIGFsaWFz
IGFuYWx5c2lzIHRvIHRoZXNlIGJ5IGFsbG93aW5nIHRoZSBjbGllbnQgdG8gYXNzb2NpYXRlIGFu
IGludGVnZXIgcmFuZ2UgdG8gdGhlCisvLyB2YWx1ZS4gVHdvIG9wZXJhdGlvbnMgbWF5IGFjY2Vz
cyB0aGUgc2FtZSBtZW1vcnkgaWYgdGhlaXIgcmFuZ2VzIG92ZXJsYXBzLgorLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzNQorCitjbGFzcyBKU19FWFBPUlRf
UFJJVkFURSBNZW1vcnlWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcGNv
ZGUpIHsKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhTOgorICAgICAg
ICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgY2FzZSBMb2Fk
RmxvYXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAg
IGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBjYXNlIFN0
b3JlOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB+TWVtb3J5VmFsdWUo
KTsKKworICAgIGludDMyX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKyAg
ICB2b2lkIHNldE9mZnNldChpbnQzMl90IG9mZnNldCkgeyBtX29mZnNldCA9IG9mZnNldDsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBV
c2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2Yg
dGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CisgICAgLy8gZGVzY3JpYmVzIHRoZSBy
ZXR1cm5lZCB0eXBlKS4KKyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIs
CisgICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bj
b2RlLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQor
ICAgIHsKKyAgICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRj
aCAob3Bjb2RlKSB7CisgICAgICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDhTOgor
ICAgICAgICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICAgICAgY2FzZSBMb2FkMTZTOgorICAg
ICAgICAgICAgICAgIEFTU0VSVCh0eXBlID09IEludDMyKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICAgICAgICAgIEFTU0VSVCh0
eXBlID09IERvdWJsZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgICAgIGNhc2UgU3Rv
cmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgQVNTRVJU
KHR5cGUgPT0gVm9pZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hl
cmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxpZWQuCisgICAgTWVtb3J5VmFsdWUodW5zaWduZWQg
aW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQz
Ml90IG9mZnNldCA9IDApCisgICAgICAgIDogTWVtb3J5VmFsdWUoaW5kZXgsIG9wY29kZSwgb3Bj
b2RlID09IExvYWRGbG9hdCA/IERvdWJsZSA6IEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNl
dCkKKyAgICB7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgorICAg
IE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwKKyAgICAgICAgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdp
biwgdmFsdWUsIHBvaW50ZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgaWYgKCFBU1NFUlRfRElTQUJMRUQpIHsKKyAgICAgICAgICAgIHN3aXRjaCAob3Bjb2Rl
KSB7CisgICAgICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAgICAgICAgIGNhc2UgU3RvcmUxNjoK
KyAgICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaW50MzJfdCBtX29mZnNldCB7IDAgfTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzTWVtb3J5VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09wY29kZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjI5IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNw
YWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNv
ZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBOb3A6CisgICAg
ICAgIG91dC5wcmludCgiTm9wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIElkZW50aXR5
OgorICAgICAgICBvdXQucHJpbnQoIklkZW50aXR5Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIENvbnN0MzI6CisgICAgICAgIG91dC5wcmludCgiQ29uc3QzMiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBDb25zdDY0OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0NjQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgICAgIG91dC5wcmludCgi
Q29uc3REb3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90OgorICAg
ICAgICBvdXQucHJpbnQoIlN0YWNrU2xvdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBB
cmd1bWVudFJlZzoKKyAgICAgICAgb3V0LnByaW50KCJBcmd1bWVudFJlZyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBGcmFtZVBvaW50ZXI6CisgICAgICAgIG91dC5wcmludCgiRnJhbWVQ
b2ludGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEFkZDoKKyAgICAgICAgb3V0LnBy
aW50KCJBZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3ViOgorICAgICAgICBvdXQu
cHJpbnQoIlN1YiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNdWw6CisgICAgICAgIG91
dC5wcmludCgiTXVsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERpdjoKKyAgICAgICAg
b3V0LnByaW50KCJEaXYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hpbGxEaXY6Cisg
ICAgICAgIG91dC5wcmludCgiQ2hpbGxEaXYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
TW9kOgorICAgICAgICBvdXQucHJpbnQoIk1vZCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBCaXRBbmQ6CisgICAgICAgIG91dC5wcmludCgiQml0QW5kIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEJpdE9yOgorICAgICAgICBvdXQucHJpbnQoIkJpdE9yIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEJpdFhvcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRYb3IiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU2hsOgorICAgICAgICBvdXQucHJpbnQoIlNobCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBTU2hyOgorICAgICAgICBvdXQucHJpbnQoIlNTaHIi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgWlNocjoKKyAgICAgICAgb3V0LnByaW50KCJa
U2hyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQ4OgorICAgICAgICBvdXQucHJp
bnQoIlNFeHQ4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQxNjoKKyAgICAgICAg
b3V0LnByaW50KCJTRXh0MTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDMyOgor
ICAgICAgICBvdXQucHJpbnQoIlNFeHQzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBa
RXh0MzI6CisgICAgICAgIG91dC5wcmludCgiWkV4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFRydW5jOgorICAgICAgICBvdXQucHJpbnQoIlRydW5jIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEZSb3VuZDoKKyAgICAgICAgb3V0LnByaW50KCJGUm91bmQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSVRvRDoKKyAgICAgICAgb3V0LnByaW50KCJJVG9EIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIERUb0kzMjoKKyAgICAgICAgb3V0LnByaW50KCJEVG9J
MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRXF1YWw6CisgICAgICAgIG91dC5wcmlu
dCgiRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTm90RXF1YWw6CisgICAgICAg
IG91dC5wcmludCgiTm90RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVzc1Ro
YW46CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW4iKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgR3JlYXRlclRoYW46CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4iKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkxl
c3NFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAg
ICAgIG91dC5wcmludCgiR3JlYXRlckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEFib3ZlOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEJlbG93OgorICAgICAgICBvdXQucHJpbnQoIkJlbG93Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIEFib3ZlRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiQWJvdmVFcXVhbCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCZWxvd0VxdWFsOgorICAgICAgICBvdXQucHJp
bnQoIkJlbG93RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDhaOgorICAg
ICAgICBvdXQucHJpbnQoIkxvYWQ4WiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2Fk
OFM6CisgICAgICAgIG91dC5wcmludCgiTG9hZDhTIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIExvYWQxNlo6CisgICAgICAgIG91dC5wcmludCgiTG9hZDE2WiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNlMiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZEZsb2F0OgorICAgICAgICBvdXQucHJpbnQoIkxv
YWRGbG9hdCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOgorICAgICAgICBvdXQu
cHJpbnQoIkxvYWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmU4OgorICAgICAg
ICBvdXQucHJpbnQoIlN0b3JlOCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTE2
OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlMTYiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU3RvcmVGbG9hdDoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZUZsb2F0Iik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFN0b3JlOgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIENDYWxsOgorICAgICAgICBvdXQucHJpbnQoIkNDYWxs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBhdGNocG9pbnQ6CisgICAgICAgIG91dC5w
cmludCgiUGF0Y2hwb2ludCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVja0FkZDoK
KyAgICAgICAgb3V0LnByaW50KCJDaGVja0FkZCIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBDaGVja1N1YjoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja1N1YiIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgb3V0LnByaW50KCJDaGVja011bCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGVjazoKKyAgICAgICAgb3V0LnByaW50KCJDaGVj
ayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBVcHNpbG9uOgorICAgICAgICBvdXQucHJp
bnQoIlVwc2lsb24iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUGhpOgorICAgICAgICBv
dXQucHJpbnQoIlBoaSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKdW1wOgorICAgICAg
ICBvdXQucHJpbnQoIkp1bXAiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQnJhbmNoOgor
ICAgICAgICBvdXQucHJpbnQoIkJyYW5jaCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
d2l0Y2g6CisgICAgICAgIG91dC5wcmludCgiU3dpdGNoIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFJldHVybjoKKyAgICAgICAgb3V0LnByaW50KCJSZXR1cm4iKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgT29wczoKKyAgICAgICAgb3V0LnByaW50KCJPb3BzIik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
T3Bjb2RlX2gKKyNkZWZpbmUgQjNPcGNvZGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2VudW0gT3Bjb2RlIDogaW50MTZfdCB7CisgICAgLy8gQSBuby1vcCB0aGF0IHJldHVy
bnMgVm9pZCwgdXNlZnVsIGZvciB3aGVuIHlvdSB3YW50IHRvIHJlbW92ZSBhIHZhbHVlLgorICAg
IE5vcCwKKyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBpZGVudGl0eSwgdXNhYmxlIHdpdGggYW55
IHZhbHVlIHR5cGUuCisgICAgSWRlbnRpdHksCisKKyAgICAvLyBDb25zdGFudHMuIFVzZSB0aGUg
Q29uc3RWYWx1ZSogY2xhc3Nlcy4gQ29uc3RhbnRzIGV4aXN0IGluIHRoZSBjb250cm9sIGZsb3cs
IHNvIHRoYXQgd2UgY2FuCisgICAgLy8gcmVhc29uIGFib3V0IHdoZXJlIHdlIHdvdWxkIGNvbnN0
cnVjdCB0aGVtLiBMYXJnZSBjb25zdGFudHMgYXJlIGV4cGVuc2l2ZSB0byBjcmVhdGUuCisgICAg
Q29uc3QzMiwKKyAgICBDb25zdDY0LAorICAgIENvbnN0RG91YmxlLAorCisgICAgLy8gVGhlIG1h
Z2ljYWwgc3RhY2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Ag
b2YgdGhlIHByb2dyYW0gcmVnYXJkbGVzcyBvZgorICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxv
dyB5b3UgcHV0IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBk
aXNqb2ludCByYW5nZSBvZgorICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RW
YWx1ZSBjbGFzcy4KKyAgICBTdGFja1Nsb3QsCisKKyAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVu
dCByZWdpc3Rlci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhl
IHByb2dyYW0KKyAgICAvLyByZWdhcmRsZXNzIG9mIHdoZXJlIGluIGNvbnRyb2wgZmxvdyB5b3Ug
cHV0IGl0LCBhbmQgdGhlIGNvbXBpbGVyIHRha2VzIGNhcmUgdG8gZW5zdXJlIHRoYXQgd2UKKyAg
ICAvLyBkb24ndCBjbG9iYmVyIHRoZSB2YWx1ZSBieSByZWdpc3RlciBhbGxvY2F0aW9uIG9yIGNh
bGxzIChlaXRoZXIgYnkgc2F2aW5nIHRoZSBhcmd1bWVudCB0byB0aGUKKyAgICAvLyBzdGFjayBv
ciBwcmVzZXJ2aW5nIGl0IGluIGEgY2FsbGVlLXNhdmUgcmVnaXN0ZXIpLiBVc2UgdGhlIEFyZ3Vt
ZW50UmVnVmFsdWUgY2xhc3MuIFRoZSByZXR1cm4KKyAgICAvLyB0eXBlIGlzIGVpdGhlciBwb2lu
dGVyKCkgKGZvciBHUFJzKSBvciBEb3VibGUgKGZvciBGUFJzKS4KKyAgICBBcmd1bWVudFJlZywK
KworICAgIC8vIFRoZSBmcmFtZSBwb2ludGVyLiBZb3UgY2FuIHB1dCB0aGlzIGFueXdoZXJlIGlu
IGNvbnRyb2wgZmxvdyBidXQgaXQgd2lsbCBhbHdheXMgeWllbGQgdGhlCisgICAgLy8gZnJhbWUg
cG9pbnRlciwgd2l0aCBhIGNhdmVhdDogaWYgb3VyIGNvbXBpbGVyIGNoYW5nZXMgdGhlIGZyYW1l
IHBvaW50ZXIgdGVtcG9yYXJpbHkgZm9yIHNvbWUKKyAgICAvLyBzaWxseSByZWFzb24sIHRoZSBG
cmFtZVBvaW50ZXIgaW50cmluc2ljIHdpbGwgcmV0dXJuIHdoZXJlIHRoZSBmcmFtZSBwb2ludGVy
ICpzaG91bGQqIGJlIG5vdAorICAgIC8vIHdoZXJlIGl0IGhhcHBlbnMgdG8gYmUgcmlnaHQgbm93
LgorICAgIEZyYW1lUG9pbnRlciwKKworICAgIC8vIFBvbHltb3JwaGljIG1hdGgsIHVzYWJsZSB3
aXRoIGFueSB2YWx1ZSB0eXBlLgorICAgIEFkZCwKKyAgICBTdWIsCisgICAgTXVsLAorICAgIERp
diwKKworICAgIC8vIEludGVnZXIgbWF0aC4KKyAgICBDaGlsbERpdiwgLy8gZG9lc24ndCB0cmFw
IGV2ZXIsIGJlaGF2ZXMgbGlrZSBKUyAoeC95KXwwLgorICAgIE1vZCwKKyAgICBCaXRBbmQsCisg
ICAgQml0T3IsCisgICAgQml0WG9yLAorICAgIFNobCwKKyAgICBTU2hyLAorICAgIFpTaHIsCisK
KyAgICAvLyBDYXN0cyBhbmQgc3VjaC4KKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBJbnQzMjoK
KyAgICBTRXh0OCwKKyAgICBTRXh0MTYsCisgICAgLy8gVGFrZXMgSW50MzIgYW5kIHJldHVybnMg
SW50NjQ6CisgICAgU0V4dDMyLAorICAgIFpFeHQzMiwKKyAgICAvLyBUYWtlcyBJbnQ2NCBhbmQg
cmV0dXJucyBJbnQzMjoKKyAgICBUcnVuYywKKyAgICAvLyBUYWtlcyBhbmQgcmV0dXJucyBEb3Vi
bGU6CisgICAgRlJvdW5kLAorICAgIC8vIFRha2VzIGludHMgYW5kIHJldHVybnMgRG91YmxlOgor
ICAgIElUb0QsCisgICAgLy8gVGFrZXMgRG91YmxlIGFuZCByZXR1cm5zIEludDMyOgorICAgIERU
b0kzMiwKKworICAgIC8vIFBvbHltb3JwaGljIGNvbXBhcmlzb25zLCB1c2FibGUgd2l0aCBhbnkg
dmFsdWUgdHlwZS4gUmV0dXJucyBpbnQzMiAwIG9yIDEuIE5vdGUgdGhhdCAiTm90IgorICAgIC8v
IGlzIGp1c3QgRXF1YWwoeCwgMCkuCisgICAgRXF1YWwsCisgICAgTm90RXF1YWwsCisgICAgTGVz
c1RoYW4sCisgICAgR3JlYXRlclRoYW4sCisgICAgTGVzc0VxdWFsLAorICAgIEdyZWF0ZXJFcXVh
bCwKKworICAgIC8vIEludGVnZXIgY29tcGFyaXNvbnMuIFJldHVybnMgaW50MzIgMCBvciAxLgor
ICAgIEFib3ZlLAorICAgIEJlbG93LAorICAgIEFib3ZlRXF1YWwsCisgICAgQmVsb3dFcXVhbCwK
KworICAgIC8vIE1lbW9yeSBsb2Fkcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgd2UgbG9hZCBhbmQg
dGhlIGxvYWRlZCB0eXBlLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgcmV0
dXJuIEludDMyOgorICAgIExvYWQ4WiwKKyAgICBMb2FkOFMsCisgICAgTG9hZDE2WiwKKyAgICBM
b2FkMTZTLAorICAgIC8vIFRoaXMgcmV0dXJucyBEb3VibGU6CisgICAgTG9hZEZsb2F0LAorICAg
IC8vIFRoaXMgcmV0dXJucyB3aGF0ZXZlciB0aGUgcmV0dXJuIHR5cGUgaXM6CisgICAgTG9hZCwK
KworICAgIC8vIE1lbW9yeSBzdG9yZXMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHRoZSB2YWx1ZSBp
cyBzdG9yZWQuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVzZSB0YWtlIGFuIElu
dDMyIHZhbHVlOgorICAgIFN0b3JlOCwKKyAgICBTdG9yZTE2LAorICAgIC8vIFRoaXMgdGFrZXMg
YSBEb3VibGUgdmFsdWU6CisgICAgU3RvcmVGbG9hdCwKKyAgICAvLyBUaGlzIGlzIGEgcG9seW1v
cnBoaWMgc3RvcmUgZm9yIEludDMyLCBJbnQ2NCwgYW5kIERvdWJsZToKKyAgICBTdG9yZSwKKwor
ICAgIC8vIFRoaXMgaXMgYSByZWd1bGFyIG9yZGluYXJ5IEMgZnVuY3Rpb24gY2FsbCwgdXNpbmcg
dGhlIHN5c3RlbSBDIGNhbGxpbmcgY29udmVudGlvbi4gTWFrZSBzdXJlCisgICAgLy8gdGhhdCB0
aGUgYXJndW1lbnRzIGFyZSBwYXNzZWQgdXNpbmcgdGhlIHJpZ2h0IHR5cGVzLgorICAgIENDYWxs
LAorCisgICAgLy8gVGhpcyBpcyBhIHBhdGNocG9pbnQuIFVzZSB0aGUgUGF0Y2hwb2ludFZhbHVl
IGNsYXNzLiBUaGlzIGlzIHZpZXdlZCBhcyBiZWhhdmluZyBsaWtlIGEgY2FsbCwKKyAgICAvLyBi
dXQgb25seSBlbWl0cyBjb2RlIHZpYSBhIGNvZGUgZ2VuZXJhdGlvbiBjYWxsYmFjay4gVGhhdCBj
YWxsYmFjayBnZXRzIHRvIGVtaXQgY29kZSBpbmxpbmUuCisgICAgLy8gWW91IGNhbiBwYXNzIGEg
c3RhY2ttYXAgYWxvbmcgd2l0aCBjb25zdHJhaW50cyBvbiBob3cgZWFjaCBzdGFja21hcCBhcmd1
bWVudCBtdXN0IGJlIHBhc3NlZC4KKyAgICAvLyBJdCdzIGxlZ2FsIHRvIHJlcXVlc3QgdGhhdCBh
IHN0YWNrbWFwIGFyZ3VtZW50IGlzIGluIHNvbWUgcmVnaXN0ZXIgYW5kIGl0J3MgbGVnYWwgdG8g
cmVxdWVzdAorICAgIC8vIHRoYXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBhdCBzb21lIG9mZnNl
dCBmcm9tIHRoZSB0b3Agb2YgdGhlIGFyZ3VtZW50IHBhc3NpbmcgYXJlYSBvbiB0aGUKKyAgICAv
LyBzdGFjay4KKyAgICBQYXRjaHBvaW50LAorCisgICAgLy8gQ2hlY2tlZCBtYXRoLiBVc2UgdGhl
IENoZWNrVmFsdWUgY2xhc3MuIExpa2UgYSBQYXRjaHBvaW50LCB0aGlzIHRha2VzIGEgY29kZSBn
ZW5lcmF0aW9uCisgICAgLy8gY2FsbGJhY2suIFRoYXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IHNv
bWUgY29kZSBhZnRlciB0aGUgZXBpbG9ndWUsIGFuZCBnZXRzIHRvIGxpbmsgdGhlIGp1bXAKKyAg
ICAvLyBmcm9tIHRoZSBjaGVjaywgYW5kIHRoZSBjaG9pY2Ugb2YgcmVnaXN0ZXJzLiBZb3UgYWxz
byBnZXQgdG8gc3VwcGx5IGEgc3RhY2ttYXAuIE5vdGUgdGhhdCB5b3UKKyAgICAvLyBhcmUgbm90
IGFsbG93ZWQgdG8ganVtcCBiYWNrIGludG8gdGhlIG1haW5saW5lIGNvZGUgZnJvbSB5b3VyIHNs
b3cgcGF0aCwgc2luY2UgdGhlIGNvbXBpbGVyCisgICAgLy8gd2lsbCBhc3N1bWUgdGhhdCB0aGUg
ZXhlY3V0aW9uIG9mIHRoZXNlIGluc3RydWN0aW9ucyBwcm92ZXMgdGhhdCBvdmVyZmxvdyBkaWRu
J3QgaGFwcGVuLiBGb3IKKyAgICAvLyBleGFtcGxlLCBpZiB5b3UgaGF2ZSB0d28gQ2hlY2tBZGQn
czoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBDaGVja0Fk
ZCh4LCB5KQorICAgIC8vCisgICAgLy8gVGhlbiBpdCdzIHZhbGlkIHRvIGNoYW5nZSB0aGlzIHRv
OgorICAgIC8vCisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IElkZW50aXR5
KGEpCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHZhbGlkIHJlZ2FyZGxlc3Mgb2YgdGhlIGNhbGxi
YWNrcyB1c2VkIGJ5IHRoZSB0d28gQ2hlY2tBZGRzLiBUaGV5IG1heSBoYXZlIGRpZmZlcmVudAor
ICAgIC8vIGNhbGxiYWNrcy4gWWV0LCB0aGlzIHRyYW5zZm9ybWF0aW9uIGlzIHZhbGlkIGV2ZW4g
aWYgdGhleSBhcmUgZGlmZmVyZW50IGJlY2F1c2Ugd2Uga25vdyB0aGF0CisgICAgLy8gYWZ0ZXIg
dGhlIGZpcnN0IENoZWNrQWRkIGV4ZWN1dGVzLCB0aGUgc2Vjb25kIENoZWNrQWRkIGNvdWxkIG5v
dCBoYXZlIHBvc3NpYmx5IHRha2VuIHNsb3cKKyAgICAvLyBwYXRoLiBUaGVyZWZvcmUsIHRoZSBz
ZWNvbmQgQ2hlY2tBZGQncyBjYWxsYmFjayBpcyBpcnJlbGV2YW50LgorICAgIENoZWNrQWRkLAor
ICAgIENoZWNrU3ViLAorICAgIENoZWNrTXVsLAorCisgICAgLy8gQ2hlY2sgdGhhdCBzaWRlLWV4
aXRzLiBVc2UgdGhlIENoZWNrVmFsdWUgY2xhc3MuIExpa2UgQ2hlY2tBZGQgYW5kIGZyaWVuZHMs
IHRoaXMgaGFzIGEKKyAgICAvLyBzdGFja21hcCB3aXRoIGEgZ2VuZXJhdGlvbiBjYWxsYmFjay4g
VGhpcyB0YWtlcyBhbiBJbnQzMiBhcmd1bWVudCB0aGF0IHRoaXMgYnJhbmNoZXMgb24sIHdpdGgK
KyAgICAvLyBmdWxsIGJyYW5jaCBmdXNpb24gaW4gdGhlIGluc3RydWN0aW9uIHNlbGVjdG9yLiBB
IHRydWUgdmFsdWUganVtcHMgdG8gdGhlIGdlbmVyYXRvcidzIHNsb3cKKyAgICAvLyBwYXRoLgor
ICAgIENoZWNrLAorCisgICAgLy8gU1NBIHN1cHBvcnQsIGluIHRoZSBzdHlsZSBvZiBERkcgU1NB
LgorICAgIFVwc2lsb24sIC8vIFRoaXMgdXNlcyB0aGUgVXBzaWxvblZhbHVlIGNsYXNzLgorICAg
IFBoaSwKKworICAgIC8vIEp1bXAuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBK
dW1wLAorICAgIAorICAgIC8vIFBvbHltb3JwaGljIGJyYW5jaCwgdXNhYmxlIHdpdGggYW55IHZh
bHVlIHR5cGUuIEJyYW5jaGVzIGlmIG5vdCBlcXVhbCB0byB6ZXJvLiBVc2VzIHRoZQorICAgIC8v
IENvbnRyb2xWYWx1ZSBjbGFzcywgd2l0aCB0aGUgMC1pbmRleCBzdWNjZXNzb3IgYmVpbmcgdGhl
IHRydWUgc3VjY2Vzc29yLgorICAgIEJyYW5jaCwKKworICAgIC8vIFN3aXRjaC4gU3dpdGNoZXMg
b3ZlciBlaXRoZXIgSW50MzIgb3IgSW50NjQuIFVzZXMgdGhlIFN3aXRjaFZhbHVlIGNsYXNzLgor
ICAgIFN3aXRjaCwKKworICAgIC8vIFJldHVybi4gTm90ZSB0aGF0IEIzIHByb2NlZHVyZXMgZG9u
J3Qga25vdyB0aGVpciByZXR1cm4gdHlwZSwgc28gdGhpcyBjYW4ganVzdCByZXR1cm4gYW55Cisg
ICAgLy8gdHlwZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIFJldHVybiwKKwor
ICAgIC8vIFRoaXMgaXMgYSB0ZXJtaW5hbCB0aGF0IGluZGljYXRlcyB0aGF0IHdlIHdpbGwgbmV2
ZXIgZ2V0IGhlcmUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBPb3BzCit9Owor
CitpbmxpbmUgYm9vbCBpc0NoZWNrTWF0aChPcGNvZGUgb3Bjb2RlKQoreworICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgY2FzZSBDaGVja0FkZDoKKyAgICBjYXNlIENoZWNrU3ViOgorICAgIGNh
c2UgQ2hlY2tNdWw6CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCitu
YW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYsIEpTQzo6QjM6Ok9wY29kZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzT3Bjb2RlX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM09yaWdpbi5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgT3JpZ2lu
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJPcmlnaW4o
IiwgUmF3UG9pbnRlcihtX2RhdGEpLCAiKSIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcmlnaW4uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09y
aWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM09yaWdpbl9oCisjZGVmaW5l
IEIzT3JpZ2luX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRT
dHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdob2V2ZXIg
Z2VuZXJhdGVzIEIzSVIgY2FuIGNob29zZSB0byBwdXQgb3JpZ2lucyBvbiB2YWx1ZXMuIFdoZW4g
eW91IGRvIHRoaXMsIEIzIHdpbGwgYmUgYWJsZSB0bworLy8gYWNjb3VudCwgZG93biB0byB0aGUg
bWFjaGluZSBjb2RlLCB3aGljaCBpbnN0cnVjdGlvbiBjb3JyZXNwb25kcyB0byB3aGljaCBvcmln
aW4uIEIzCisvLyB0cmFuc2Zvcm1hdGlvbnMgbXVzdCBwcmVzZXJ2ZSBPcmlnaW5zIGNhcmVmdWxs
eS4gSXQncyBhbiBlcnJvciB0byB3cml0ZSBhIHRyYW5zZm9ybWF0aW9uIHRoYXQKKy8vIGVpdGhl
ciBkcm9wcyBPcmlnaW5zIG9yIGxpZXMgYWJvdXQgdGhlbS4KK2NsYXNzIE9yaWdpbiB7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgT3JpZ2luKGNvbnN0IHZvaWQqIGRhdGEgPSBudWxscHRyKQorICAg
ICAgICA6IG1fZGF0YShkYXRhKQorICAgIHsKKyAgICB9CisKKyAgICBjb25zdCB2b2lkKiBkYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9kYXRhOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRTcGVjaWFsLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQu
aCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworUGF0Y2hwb2ludFNwZWNpYWw6OlBh
dGNocG9pbnRTcGVjaWFsKCkKK3sKK30KKworUGF0Y2hwb2ludFNwZWNpYWw6On5QYXRjaHBvaW50
U3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hBcmcoCisg
ICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4m
IGNhbGxiYWNrKQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpIHsKKyAg
ICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgY2FsbGJhY2spOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OkRlZiwgaW5zdC5v
cmlnaW4tPmFpclR5cGUoKSk7CisgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMiwgaW5zdCwgY2FsbGJh
Y2spOworfQorCitib29sIFBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGluc3QpCit7
CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGlz
VmFsaWRJbXBsKDAsIDEsIGluc3QpOworCisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGluc3QuYXJnc1sxXS5raW5kKCkgIT0gQXJn
OjpUbXApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWluc3QuYXJnc1sxXS5pc1R5
cGUoaW5zdC5vcmlnaW4tPmFpclR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHJldHVybiBpc1ZhbGlkSW1wbCgwLCAyLCBpbnN0KTsKK30KKworYm9vbCBQYXRjaHBvaW50U3Bl
Y2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAg
aWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGFkbWl0c1N0
YWNrSW1wbCgwLCAxLCBpbnN0LCBhcmdJbmRleCk7CisKKyAgICBpZiAoYXJnSW5kZXggPT0gMSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1wbCgwLCAy
LCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBQYXRjaHBvaW50U3Bl
Y2lhbDo6Z2VuZXJhdGUoCisgICAgSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQsIEdlbmVy
YXRpb25Db250ZXh0JiBjb250ZXh0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2lu
OworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgIEFTU0VS
VChzdGFja21hcCk7CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgdW5zaWduZWQg
b2Zmc2V0ID0gMTsKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQorICAgICAg
ICByZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29mZnNldCsr
XSkpOworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVwcyk7Cisg
ICAgCisgICAgU3RhY2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgIHBhcmFtcy52
YWx1ZSA9IHZhbHVlOworICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAgIHBhcmFt
cy5yZXBzID0gcmVwczsKKyAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFwLT5tX3Vz
ZWRSZWdpc3RlcnM7CisKKyAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFt
cyk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK3ZvaWQgUGF0Y2hw
b2ludFNwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJQYXRjaHBvaW50Iik7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmRlZXBE
dW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiTG93ZXJl
ZCBCMzo6UGF0Y2hwb2ludFZhbHVlLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKyNkZWZpbmUgQjNQYXRjaHBvaW50U3Bl
Y2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNp
YWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMgaXMgYSBz
cGVjaWFsIHRoYXQgcmVjb2duaXplcyB0aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQYXRjaHBv
aW50OiBWb2lkIGFuZCBhbmQgbm9uLVZvaWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0aGUgc3lu
dGF4IG9mIHRoZSBBaXIgUGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBhdGNoICZw
YXRjaHBvaW50LCBhcmdzLi4uCisvLworLy8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUgbG93ZXJl
ZCBhcmd1bWVudHMgdG8gdGhlIFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBub24tVm9p
ZCBjYXNlCisvLyB3ZSB3aWxsIGhhdmU6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBvaW50LCBy
ZXN1bHQsIGFyZ3MuLi4KKworY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMgU3RhY2tt
YXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAgIHZpcnR1
YWwgflBhdGNocG9pbnRTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZvckVhY2hB
cmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxi
YWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVycmlkZTsK
KyAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVy
cmlkZTsKKworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5lcmF0ZSB0
aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQKKyAgICAv
LyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFpcjo6R2Vu
ZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYp
IGNvbnN0IG92ZXJyaWRlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50U3BlY2lhbF9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRjaHBvaW50
VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3RhY2ttYXAp
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9pbnRWYWx1ZV9o
CisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2ludFZhbHVlIDogcHVibGljIFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsg
cmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+UGF0Y2hwb2ludFZhbHVlKCk7
CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1l
dGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGluZGV4LCBU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQor
ICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4sIGNoaWxkcmVu
KQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3Bl
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNs
dWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKyNpbmNsdWRlIDx3
dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29wZShQcm9j
ZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1fcHJvY2VkdXJlKHBy
b2NlZHVyZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGREdW1wSVJBdEVh
Y2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyICIsIHByb2NlZHVyZS5sYXN0
UGhhc2VOYW1lKCksICIsIGJlZm9yZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2co
cHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkK
KyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3RyaW5nKHByb2NlZHVyZSk7Cit9CisKK1BoYXNl
U2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBtX3Byb2NlZHVyZS5zZXRMYXN0UGhhc2VOYW1l
KG1fbmFtZSk7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQorICAgICAg
ICB2YWxpZGF0ZShtX3Byb2NlZHVyZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzUGhhc2VTY29wZV9oCisjZGVmaW5lIEIzUGhhc2VTY29wZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKFByb2NlZHVyZSYs
IGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxp
ZGF0aW9uCisKK3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25z
dCBjaGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM1BoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCisj
aW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJvY2VkdXJl
KCkKKyAgICA6IG1fbGFzdFBoYXNlTmFtZSgiaW5pdGlhbCIpCit7Cit9CisKK1Byb2NlZHVyZTo6
flByb2NlZHVyZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soZG91
YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2so
bmV3IEJhc2ljQmxvY2sobV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Js
b2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3Zl
KGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6OnJlc2V0
UmVhY2hhYmlsaXR5KCkKK3sKKyAgICBCMzo6cmVzZXRSZWFjaGFiaWxpdHkobV9ibG9ja3MpOwor
fQorCit2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRlZXBE
dW1wKGJsb2NrKSk7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJ
blByZU9yZGVyKCkKK3sKKyAgICByZXR1cm4gQjM6OmJsb2Nrc0luUHJlT3JkZXIoYXQoMCkpOwor
fQorCitWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5Qb3N0T3JkZXIoKQor
eworICAgIHJldHVybiBCMzo6YmxvY2tzSW5Qb3N0T3JkZXIoYXQoMCkpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1Byb2NlZHVyZV9oCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiUHVyZU5hTi5oIgorI2luY2x1ZGUgPHd0Zi9CYWcuaD4KKyNp
bmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgor
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFz
cyBWYWx1ZTsKKworY2xhc3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQ
cm9jZWR1cmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgUHJvY2VkdXJlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgflBy
b2NlZHVyZSgpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRkQmxvY2so
ZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZh
bHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRkKEFyZ3Vt
ZW50cy4uLik7CisKKyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICBKU19FWFBP
UlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVuc2lnbmVk
IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNpY0Jsb2Nr
KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhdLmdldCgp
OyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgor
ICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCisg
ICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
aXRlcmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQorICAg
ICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgLCBtX2luZGV4
KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNC
bG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2Vk
dXJlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRv
cisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXgg
KyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChtX3Byb2NlZHVyZSA9PSBvdGhlci5tX3Byb2NlZHVyZSk7CisgICAg
ICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAg
ICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVk
IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX3Byb2NlZHVy
ZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGlu
ZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBj
b25zdCBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2luZGV4Owor
ICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0
aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0
aGlzLCBzaXplKCkpOyB9CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUHJlT3Jk
ZXIoKTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVyKCk7CisKKyAg
ICBjbGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlc0Nv
bGxlY3Rpb24oY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6IG1fcHJv
Y2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3Mg
aXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAg
ICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9p
bmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVy
YXRvcihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisgICAgICAg
ICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAgICwgbV9p
bmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
VmFsdWUqIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
cmV0dXJuIG1fcHJvY2VkdXJlLT5tX3ZhbHVlc1ttX2luZGV4XS5nZXQoKTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJU
KG1fcHJvY2VkdXJlID09IG90aGVyLm1fcHJvY2VkdXJlKTsKKyAgICAgICAgICAgICAgICByZXR1
cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAgICAgICBjb25zdCBQcm9jZWR1cmUq
IG1fcHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAgICAgfTsK
KworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJv
Y2VkdXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQorCisgICAg
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5z
aXplKCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgVmFsdWUqIG9w
ZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJvY2VkdXJl
OworICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJu
IFZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKKyAgICAvLyBUaGUgbmFtZSBoYXMgdG8gYmUg
YSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9yeSBtYW5hZ2VtZW50
IGZvciB0aGUgc3RyaW5nLgorICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFtZShjb25zdCBjaGFyKiBu
YW1lKQorICAgIHsKKyAgICAgICAgbV9sYXN0UGhhc2VOYW1lID0gbmFtZTsKKyAgICB9CisKKyAg
ICBjb25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0UGhhc2VO
YW1lOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2Nr
Pj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+IG1fdmFsdWVz
OworICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUHJv
Y2VkdXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQcm9jZWR1
cmVJbmxpbmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFByb2NlZHVy
ZTo6YWRkKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZh
bHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3VtZW50cy4u
LikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92YWx1ZXMu
YXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzUHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGguaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKKyNp
bmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNz
IFJlZHVjZVN0cmVuZ3RoIHsKK3B1YmxpYzoKKyAgICBSZWR1Y2VTdHJlbmd0aChQcm9jZWR1cmUm
IHByb2MpCisgICAgICAgIDogbV9wcm9jKHByb2MpCisgICAgICAgICwgbV9pbnNlcnRpb25TZXQo
cHJvYykKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAgICAgYm9v
bCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFuZ2VkID0g
ZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3Byb2MuYmxv
Y2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJsb2NrOworICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAobV9pbmRleCA9IDA7IG1faW5kZXgg
PCBibG9jay0+c2l6ZSgpOyArK21faW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Mo
KTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2spOworCisg
ICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gZG8gRENFLgorICAgICAg
ICAgICAgICAgIGJsb2NrLT5yZW1vdmVOb3BzKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHJlc3VsdCB8PSBtX2NoYW5nZWQ7CisgICAgICAgIH0gd2hpbGUgKG1f
Y2hhbmdlZCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJpdmF0ZToK
KyAgICB2b2lkIHByb2Nlc3MoKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9IG1fYmxvY2stPmF0
KG1faW5kZXgpOworICAgICAgICBtX3ZhbHVlLT5wZXJmb3JtU3Vic3RpdHV0aW9uKCk7CisgICAg
ICAgIAorICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAgIGNhc2Ug
QWRkOgorICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworCisgICAgICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEFkZCAmJiBpc0ludChtX3ZhbHVlLT50
eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld1N1bSA9IG1fdmFsdWUtPmNoaWxk
KDEpLT5hZGRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgxKSk7Cisg
ICAgICAgICAgICAgICAgaWYgKG5ld1N1bSkgeworICAgICAgICAgICAgICAgICAgICBtX2luc2Vy
dGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdTdW0pOworICAgICAgICAgICAgICAgICAg
ICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsKKyAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdTdW07CisgICAgICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQorCisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDApLT5h
ZGRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAgICBicmVh
azsKKworICAgICAgICBjYXNlIFN1YjoKKyAgICAgICAgICAgIGlmIChpc0ludChtX3ZhbHVlLT50
eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKFZhbHVlKiBuZWdhdGVkQ29uc3RhbnQgPSBt
X3ZhbHVlLT5jaGlsZCgxKS0+bmVnQ29uc3RhbnQobV9wcm9jKSkgeworICAgICAgICAgICAgICAg
ICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZWdhdGVkQ29uc3RhbnQp
OworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogYWRkID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92YWx1ZS0+
b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBuZWdhdGVkQ29uc3RhbnQpOworICAgICAgICAg
ICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGFkZCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxkKDAp
LT5zdWJDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAgICBi
cmVhazsKKworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6CisgICAg
ICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNlIExv
YWRGbG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAgICAg
ICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNhc2Ug
U3RvcmU6IHsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gbV92YWx1ZS0+Y2hpbGRyZW4o
KS5sYXN0KCk7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1ZS0+YXM8
TWVtb3J5VmFsdWU+KCk7CisKKyAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUoKSA9PSBB
ZGQgJiYgYWRkcmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0cigpKSB7CisgICAgICAgICAgICAgICAg
aW50cHRyX3Qgb2Zmc2V0ID0gYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCk7CisgICAgICAg
ICAgICAgICAgaWYgKCFzdW1PdmVyZmxvd3M8aW50cHRyX3Q+KG9mZnNldCwgbWVtb3J5LT5vZmZz
ZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG1lbW9yeS0+b2Zmc2V0KCk7
CisgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc21hbGxPZmZzZXQgPSBzdGF0aWNfY2FzdDxp
bnQzMl90PihvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZzZXQgPT0g
b2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzID0gbWVtb3J5LT5jaGls
ZHJlbigpLmxhc3QoKSA9IGFkZHJlc3MtPmNoaWxkKDApOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWVtb3J5LT5zZXRPZmZzZXQoc21hbGxPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGZ1biBjYW5v
bmljYWxpemF0aW9uLiBJdCBwdXJlbHkgcmVncmVzc2VzIG5haXZlbHkgZ2VuZXJhdGVkIGNvZGUu
IFdlIHJlbHkKKyAgICAgICAgICAgIC8vIG9uIGNvbnN0YW50IG1hdGVyaWFsaXphdGlvbiB0byBi
ZSBzbWFydCBlbm91Z2ggdG8gbWF0ZXJpYWxpemUgdGhpcyBjb25zdGFudCB0aGUgc21hcnQKKyAg
ICAgICAgICAgIC8vIHdheS4gV2Ugd2FudCB0aGlzIGNhbm9uaWNhbGl6YXRpb24gYmVjYXVzZSB3
ZSB3YW50IHRvIGtub3cgaWYgdHdvIG1lbW9yeSBhY2Nlc3NlcyBzZWUKKyAgICAgICAgICAgIC8v
IHRoZSBzYW1lIGFkZHJlc3MuCisgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQoKSkgewor
ICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogbmV3QWRkcmVzcyA9IGFkZHJlc3MtPmFkZENvbnN0
YW50KG1fcHJvYywgbWVtb3J5LT5vZmZzZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3QWRkcmVzcyk7CisgICAgICAgICAg
ICAgICAgICAgIGFkZHJlc3MgPSBtZW1vcnktPmNoaWxkcmVuKCkubGFzdCgpID0gbmV3QWRkcmVz
czsKKyAgICAgICAgICAgICAgICAgICAgbWVtb3J5LT5zZXRPZmZzZXQoMCk7CisgICAgICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg
ICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIHZvaWQgaGFuZGxlQ29tbXV0YXRpdml0eSgpCisgICAgeworICAgICAgICBp
ZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQoKSAmJiAhbV92YWx1ZS0+Y2hpbGQoMSkt
PmlzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgc3RkOjpzd2FwKG1fdmFsdWUtPmNoaWxkKDAp
LCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAg
ICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aE5ld1ZhbHVlKFZhbHVlKiBuZXdW
YWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghbmV3VmFsdWUpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld1ZhbHVlKTsK
KyAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdWYWx1ZSk7CisgICAgICAg
IG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQorCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7CisgICAg
SW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEJhc2ljQmxvY2sqIG1fYmxvY2s7Cisg
ICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZSogbV92YWx1ZTsKKyAgICBib29sIG1fY2hh
bmdlZDsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHJlZHVjZVN0cmVu
Z3RoKFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUocHJvYywg
InJlZHVjZVN0cmVuZ3RoIik7CisgICAgUmVkdWNlU3RyZW5ndGggcmVkdWNlU3RyZW5ndGgocHJv
Yyk7CisgICAgcmV0dXJuIHJlZHVjZVN0cmVuZ3RoLnJ1bigpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzUmVkdWNlU3RyZW5ndGhfaAorI2RlZmluZSBCM1JlZHVjZVN0cmVu
Z3RoX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIERvZXMgc3RyZW5ndGggcmVkdWN0aW9uLCBj
b25zdGFudCBmb2xkaW5nLCBhbmQgY2Fub25pY2FsaXphdGlvbi4gSW4gdGhlIGZ1dHVyZSB3ZSBt
YXkgYWxzbyBoYXZlIGl0CisvLyBkbyBDU0UuCisKK2Jvb2wgcmVkdWNlU3RyZW5ndGgoUHJvY2Vk
dXJlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEIzUmVkdWNlU3RyZW5ndGhfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAg
c3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAg
IG91dC5wcmludCgiTG9ja2VkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xv
dEtpbmQ6OkFub255bW91czoKKyAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xvdEtpbmRfaAorI2RlZmluZSBCM1N0YWNrU2xv
dEtpbmRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2VudW0gY2xhc3MgU3RhY2tTbG90S2luZCA6IHVpbnQ4X3QgeworICAgIC8vIEEg
bG9ja2VkIHN0YWNrIHNsb3QgbmVlZHMgdG8gYmUga2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhl
cnMgYmVjYXVzZSB3ZSBpbnRlbmQgdG8gZXNjYXBlCisgICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mg
bm90IG9idmlvdXMuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRy
ZXNzIG9mIGEgc3RhY2sKKyAgICAvLyBzbG90LgorICAgIExvY2tlZCwKKworICAgIC8vIFRoZXNl
IHN0YWNrIHNsb3RzIGNvdWxkIHNoYXJlIHNwYWNlIHdpdGggb3RoZXIgc3RhY2sgc2xvdHMsIHBy
b3ZpZGVkIHRoYXQgdGhleSBhcmVuJ3QgbGl2ZQorICAgIC8vIGF0IHRoZSBzYW1lIHRpbWUuIFRo
ZSBjb21waWxlciBzdGlsbCBoYXMgdG8gZG8gZXNjYXBlIGFuYWx5c2lzLCBzaW5jZSB0aGVzZSBj
YW4gYmUgZXNjYXBlZAorICAgIC8vIGV4cGxpY2l0bHkgaW4gSVIuCisgICAgQW5vbnltb3VzCisK
KyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1lYW5zIHRo
YXQgdGhlIHN0YWNrIHNsb3Qgd2lsbCBiZSByZWFkIGFzeW5jaHJvbm91c2x5CisgICAgLy8gYXMg
d2l0aCBMb2NrZWQsIGJ1dCBuZXZlciB3cml0dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBUaGVuLCBB
aXIgY291bGQgb3B0aW1pemUgc3BpbGxpbmcgYW5kCisgICAgLy8gZmlsbGluZyBieSB0cmFja2lu
ZyB3aGV0aGVyIHRoZSB2YWx1ZSBoYWQgYmVlbiBzdG9yZWQgdG8gYSByZWFkLW9ubHkgbG9ja2Vk
IHNsb3QuIElmIGl0IGhhZCwKKyAgICAvLyB0aGVuIHdlIGNhbiByZWZpbGwgZnJvbSB0aGF0IHNs
b3QuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDU4
NworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitj
bGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpCMzo6U3RhY2tTbG90S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90S2luZF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFj
a1Nsb3RWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK1N0YWNrU2xvdFZhbHVlOjp+U3RhY2tTbG90VmFsdWUoKQoreworfQor
Cit2b2lkIFN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBraW5kID0gIiwg
bV9raW5kKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RWYWx1
ZV9oCisjZGVmaW5lIEIzU3RhY2tTbG90VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSBBaXIgeworY2xhc3MgU3Rh
Y2tTbG90OworfSAvLyBuYW1lc3BhY2UgQWlyCisKK2NsYXNzIFN0YWNrU2xvdFZhbHVlIDogcHVi
bGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNv
ZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTdGFja1Nsb3Q7IH0KKworICAgIH5TdGFja1Nsb3RWYWx1
ZSgpOworCisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXpl
OyB9CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisK
KyAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbi4gQnV0
LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3RzLiBVc2UgdGhlCisgICAgLy8gc2V0IG1l
dGhvZCB0byBkbyB0aGF0LgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0IHsgcmV0
dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBtZWFuaW5n
bGVzcyB1bmxlc3MgdGhlIHN0YWNrIHNsb3QgaXMgTG9ja2VkLgorICAgIHZvaWQgc2V0T2Zmc2V0
RnJvbUZQKGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRGcm9tRlAgPSB2
YWx1ZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFt
JikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFpcjo6U3Rh
Y2tTbG90OworICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTdGFja1Nsb3RWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNr
U2xvdEtpbmQga2luZCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgU3RhY2tTbG90LCBwb2ludGVy
VHlwZSgpLCBvcmlnaW4pCisgICAgICAgICwgbV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAgICAgICAg
LCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29mZnNldEZyb21GUCgwKQorICAgIHsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOwor
ICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RW
YWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFj
a21hcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2ttYXA6OlN0YWNrbWFw
KCkKK3sKK30KKworU3RhY2ttYXA6On5TdGFja21hcCgpCit7Cit9CisKK3ZvaWQgU3RhY2ttYXA6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisgICAgICAg
ICJ7cmVwcyA9ICIsIGxpc3REdW1wKG1fcmVwcyksICIsIGdlbmVyYXRvciA9ICIsIFJhd1BvaW50
ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLAorICAgICAgICAiLCBjbG9iYmVyZWQgPSAiLCBtX2Nsb2Ji
ZXJlZCwgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIn0iKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKyNpbmNsdWRlICJDQ2FsbEhl
bHBlcnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRU
YXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDaGVja1Nw
ZWNpYWw7CitjbGFzcyBTdGFja21hcFNwZWNpYWw7CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgU3Rh
Y2ttYXAgeworcHVibGljOgorICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAg
Ly8gVGhpcyBpcyB0aGUgVmFsdWUgY29udGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAgICAgIFZh
bHVlKiB2YWx1ZTsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAgICAgICAg
U3RhY2ttYXAqIHN0YWNrbWFwOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRoZSBhY3R1
YWwgdmFsdWUgcmVwcmVzZW50YXRpb25zIHRoYXQgd2VyZSBjaG9zZW4uCisgICAgICAgIFZlY3Rv
cjxWYWx1ZVJlcD4gcmVwczsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUgcmVnaXN0
ZXJzIHRoYXQgd2VyZSB1c2VkLgorICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzOwor
ICAgIH07CisgICAgCisgICAgdHlwZWRlZiB2b2lkIEdlbmVyYXRvckZ1bmN0aW9uKENDYWxsSGVs
cGVycyYsIGNvbnN0IEdlbmVyYXRpb25QYXJhbXMmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8
R2VuZXJhdG9yRnVuY3Rpb24+IEdlbmVyYXRvcjsKKyAgICAKKyAgICBTdGFja21hcCgpOworICAg
IH5TdGFja21hcCgpOworCisgICAgLy8gQ29uc3RyYWluIGFuIGFyZ3VtZW50IHRvIHRoZSBWYWx1
ZSB0aGF0IHVzZXMgdGhpcyBTdGFja21hcC4gSW4gY2FzZSBvZiBhIFBhdGNocG9pbnQgdGhhdAor
ICAgIC8vIHJldHVybnMgYSB2YWx1ZSwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSByZXN1bHQg
dmFsdWUuIEluIGFsbCBvdGhlciBjYXNlcywgaW5kZXggemVybyByZWZlcnMKKyAgICAvLyB0byB0
aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhhdCBWYWx1ZSwgZXZlbiBpZiB0aGF0IGFyZ3VtZW50IGlz
IG5vdCBjb25zdHJhaW5hYmxlLiBGb3IgZXhhbXBsZSwKKyAgICAvLyBpbiBhIENoZWNrQWRkIHZh
bHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kaWNlcyAwIGFuZCAxLiBJ
biBhIENoZWNrIHZhbHVlLCBpdAorICAgIC8vIHdvdWxkIGJlIGFuIGVycm9yIHRvIGNvbnN0cmFp
biBpbmRleCAwLiBCdXQsIHdoZW4gdGhlIGdlbmVyYXRpb24gY2FsbGJhY2sgaXMgY2FsbGVkLCB5
b3UgY2FuCisgICAgLy8gZGVwZW5kIG9uIHRoZSByZXBzIGZvciB0aG9zZSBpbmRpY2VzIGJlaW5n
IGZpbGxlZCBpbi4KKyAgICB2b2lkIGNvbnN0cmFpbih1bnNpZ25lZCBpbmRleCwgY29uc3QgVmFs
dWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCArIDEgPj0gbV9yZXBzLnNpemUo
KSkKKyAgICAgICAgICAgIG1fcmVwcy5ncm93KGluZGV4ICsgMSk7CisgICAgICAgIG1fcmVwc1tp
bmRleF0gPSByZXA7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYgcmVwcygp
IGNvbnN0IHsgcmV0dXJuIG1fcmVwczsgfQorCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0IFJlZ2lz
dGVyU2V0JiBzZXQpCisgICAgeworICAgICAgICBtX2Nsb2JiZXJlZC5tZXJnZShzZXQpOworICAg
IH0KKworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjbG9iYmVyZWQoKSBjb25zdCB7IHJldHVybiBt
X2Nsb2JiZXJlZDsgfQorCisgICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVyYXRvcj4g
Z2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7CisgICAg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdlbmVyYXRv
cihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBj
cmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIENoZWNrU3BlY2lhbDsKKyAgICBmcmllbmQgY2xhc3MgUGF0Y2hwb2ludFNwZWNp
YWw7CisgICAgZnJpZW5kIGNsYXNzIFN0YWNrbWFwU3BlY2lhbDsKKyAgICAKKyAgICBWZWN0b3I8
VmFsdWVSZXA+IG1fcmVwczsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKKyAg
ICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3Rl
cnM7IC8vIFN0YWNrbWFwcyBjb3VsZCBiZSBmdXJ0aGVyIGR1cGxpY2F0ZWQgYnkgQWlyLCBidXQg
dGhhdCdzIHVubGlrZWx5LCBzbyB3ZSBqdXN0IG1lcmdlIHRoZSB1c2VkIHJlZ2lzdGVycyBzZXRz
IGlmIHRoYXQgd2VyZSB0byBoYXBwZW4uCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFwX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVj
aWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworU3RhY2ttYXBTcGVjaWFsOjpTdGFja21hcFNwZWNp
YWwoKQoreworfQorCitTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwoKQoreworfQor
Cit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiBpbnN0LCBj
b25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBp
bnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsK
KworICAgIC8vIEZJWE1FOiBJZiB0aGUgSW5zdCB0aGF0IHVzZXMgdGhlIFN0YWNrbWFwU3BlY2lh
bCBnZXRzIGR1cGxpY2F0ZWQsIHRoZW4gd2UgZW5kIHVwIG1lcmdpbmcgdXNlZAorICAgIC8vIHJl
Z2lzdGVyIHNldHMgZnJvbSBtdWx0aXBsZSBwbGFjZXMuIFRoaXMgY3VycmVudGx5IHdvbid0IGhh
cHBlbiBzaW5jZSBBaXIgZG9lc24ndCBoYXZlIHRhaWxkdXAKKyAgICAvLyBvciB0aGluZ3MgbGlr
ZSB0aGF0LiBCdXQgbWF5YmUgZXZlbnR1YWxseSBpdCBjb3VsZCBiZSBhIHByb2JsZW0uCisgICAg
c3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVycy5tZXJnZSh1c2VkUmVnaXN0ZXJzKTsKK30KKworY29u
c3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3Qm
IGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAq
IHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICByZXR1cm4gc3RhY2ttYXAtPmNs
b2JiZXJlZCgpOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0ltcGwoCisg
ICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3Ms
CisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFj
az4mIGNhbGxiYWNrKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAg
Ly8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAgIEFTU0VS
VChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NFUlQodmFs
dWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAgIEFTU0VSVChp
bnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxkcmVuKCku
c2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAgICAg
ICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRCM0FyZ3NdOworICAgICAgICBW
YWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRBaXJBcmdzKTsKKworICAg
ICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNlLCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hpbGQtPnR5
cGUoKSkpOworICAgIH0KK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzVmFsaWRJbXBsKAor
ICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRBaXJBcmdz
LAorICAgIEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisK
KyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQuCisgICAg
QVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAgIEFTU0VS
VCh2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CisKKyAgICBT
dGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIEFTU0VSVChzdGFj
a21hcCk7CisKKyAgICAvLyBGb3IgdGhlIEluc3QgdG8gYmUgdmFsaWQsIGl0IG5lZWRzIHRvIGhh
dmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGluc3QuYXJncy5zaXpl
KCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgLSBudW1J
Z25vcmVkQjNBcmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdhcmRsZXNz
IG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVtZW50cyBm
b3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3QgaGF2ZSBh
IG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRpb25zIGFz
IHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsKKyAg
ICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNBcmdzKTsK
KyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdzXTsKKyAg
ICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNlIEFyZzo6
VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1tNjQ6Cisg
ICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAg
ICAgICAgICBicmVhazsgLy8gT0sKKyAgICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgICAgICAg
ICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpCisgICAg
ICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5cGVGb3JC
M1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5cGUpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSBudW1iZXIgb2Yg
Y29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9mIEIzIGNo
aWxkcmVuLgorICAgIEFTU0VSVChzdGFja21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1ZS0+Y2hp
bGRyZW4oKS5zaXplKCkpOworCisgICAgLy8gVmVyaWZ5IGFueSBleHBsaWNpdGx5IHN1cHBsaWVk
IGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9yZWRCM0FyZ3M7IGkg
PCBzdGFja21hcC0+bV9yZXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZhbHVlUmVwJiByZXAg
PSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJnc1tpIC0g
bnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsKKworICAgICAgICBzd2l0Y2gg
KHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAgICAgICAg
Ly8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgIGlmICghYXJn
LmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAgaWYgKGFy
ZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAgICAgICAg
ICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChhcmcgIT0gQXJnOjpj
YWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0YW50Ogor
ICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4K
KyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdGFja21hcFNw
ZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1
bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCB1bnNpZ25lZCBhcmdJ
bmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCog
c3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVuc2lnbmVkIHN0YWNrbWFwQXJn
SW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsgbnVtSWdub3JlZEIzQXJnczsK
KworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5tX3JlcHMuc2l6ZSgpKSB7
CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8gY29uc3RyYWludC4KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9ubHkgYWRtaXQgc3Rh
Y2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBpbnB1dCBjb25zdHJhaW50
LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8gYSBDYWxsQXJnIGluIEFp
ci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0luZGV4XS5raW5kKCkgPT0g
VmFsdWVSZXA6OkFueSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgKKyAgICBHZW5lcmF0
aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEluc3QmIGluc3Qs
IFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1J
Z25vcmVkQXJnczsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVzdWx0LmFw
cGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW2ldKSk7Cit9CisKK1ZhbHVl
UmVwIFN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKENvZGUmIGNvZGUsIGNvbnN0IEFyZyYgYXJn
KQoreworICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpUbXA6CisgICAg
ICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICByZXR1cm4gVmFs
dWVSZXA6OmNvbnN0YW50KGFyZy52YWx1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBB
cmc6OkFkZHI6CisgICAgICAgIGlmIChhcmcuYmFzZSgpID09IFRtcChHUFJJbmZvOjpjYWxsRnJh
bWVSZWdpc3RlcikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFyZy5vZmZz
ZXQoKSk7CisgICAgICAgIEFTU0VSVChhcmcuYmFzZSgpID09IFRtcChNYWNyb0Fzc2VtYmxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhh
cmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICBkZWZhdWx0OgorICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKCk7CisgICAgfQor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lh
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwU3BlY2lhbF9oCisj
ZGVmaW5lIEIzU3RhY2ttYXBTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KKwor
Ly8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRoYXQgaGF2ZSBzdGFja21hcHMu
IE5vdGUgdGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAgYnkKKy8vIGFza2luZyBmb3IgdGhl
IEluc3QncyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3RzIGRvbid0IG5lZWQgdG8gZXZlbiBo
b2xkIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAuCisKK2NsYXNzIFN0YWNrbWFwU3Bl
Y2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGljOgorICAgIFN0YWNrbWFwU3BlY2lh
bCgpOworICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEFpcjo6SW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikg
b3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhBaXI6
Okluc3QmKSBvdmVycmlkZTsKKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90IG92ZXJy
aWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4gV2UgaGF2ZSBtYW55
IHNvbWUKKyAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCisKKyAgICB2b2lk
IGZvckVhY2hBcmdJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNp
Z25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVk
TGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOworICAgIGJvb2wgaXNWYWxpZElt
cGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9y
ZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmKTsKKyAgICBib29sIGFkbWl0c1N0YWNrSW1w
bCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3Jl
ZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAg
IC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRoZSBJbnN0J3MgYXJncywgc3RhcnRpbmcgd2l0aCBu
dW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVuIHZlY3Rvci4KKyAgICB2b2lkIGFwcGVuZFJlcHNJ
bXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJncywgQWly
OjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYpOworCisgICAgc3RhdGljIFZhbHVlUmVwIHJlcEZv
ckFyZyhBaXI6OkNvZGUmLCBjb25zdCBBaXI6OkFyZyYpOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFj
a21hcFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdWNjZXNz
b3JDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNTdWNjZXNzb3JDb2xsZWN0
aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCisvLyBUaGlzIGlzIGEgZ2VuZXJpYyB3cmFwcGVyIGFyb3VuZCBsaXN0cyBvZiBmcmVx
dWVudGVkIGJsb2Nrcywgd2hpY2ggZ2l2ZXMgeW91IGp1c3QgdGhlIGJsb2Nrcy4KKwordGVtcGxh
dGU8dHlwZW5hbWUgQmFzaWNCbG9jaywgdHlwZW5hbWUgU3VjY2Vzc29yTGlzdD4KK2NsYXNzIFN1
Y2Nlc3NvckNvbGxlY3Rpb24geworcHVibGljOgorICAgIFN1Y2Nlc3NvckNvbGxlY3Rpb24oU3Vj
Y2Vzc29yTGlzdCYgbGlzdCkKKyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAgICB7CisgICAgfQor
CisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9CisgICAg
QmFzaWNCbG9jayogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2xpc3RbaW5kZXhd
LmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJldHVybiBt
X2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQmFzaWNCbG9jayomIG9w
ZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoU3VjY2Vzc29yQ29sbGVjdGlvbiYg
Y29sbGVjdGlvbiwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNv
bGxlY3Rpb24pCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAg
fQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKG1fY29sbGVjdGlvbiA9PSBvdGhlci5tX2NvbGxlY3Rp
b24pOworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3VjY2Vzc29yQ29sbGVjdGlvbiogbV9j
b2xsZWN0aW9uOworICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0
b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBl
bmQoKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCitwcml2YXRlOgorICAg
IFN1Y2Nlc3Nvckxpc3QmIG1fbGlzdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3VjY2Vzc29yQ29sbGVj
dGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNTd2l0Y2hDYXNlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNp
Y0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFN3aXRj
aENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9j
YXNlVmFsdWUsICItPiIsIG1fdGFyZ2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaENhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTd2l0Y2hD
YXNlX2gKKyNkZWZpbmUgQjNTd2l0Y2hDYXNlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJFeHRyYXMu
aD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRjaENhc2Uo
KQorICAgIHsKKyAgICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVlLCBjb25z
dCBGcmVxdWVudGVkQmxvY2smIHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VWYWx1ZShjYXNlVmFs
dWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisKKyAgICBleHBs
aWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3RhcmdldDsgfQorCisgICAg
aW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1ZTsgfQorICAgIEZy
ZXF1ZW50ZWRCbG9jayB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQorICAgIEJh
c2ljQmxvY2sqIHRhcmdldEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuYmxvY2soKTsg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgor
ICAgIGludDY0X3QgbV9jYXNlVmFsdWU7CisgICAgRnJlcXVlbnRlZEJsb2NrIG1fdGFyZ2V0Owor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDcy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hWYWx1ZTo6
flN3aXRjaFZhbHVlKCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVtb3ZlQ2Fz
ZSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBGcmVxdWVudGVkQmxvY2sgcmVzdWx0QmxvY2sgPSBt
X3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIGludDY0X3QgcmVzdWx0VmFsdWUgPSBtX3ZhbHVlc1tp
bmRleF07CisgICAgbV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0KCk7Cisg
ICAgbV9zdWNjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICBtX3ZhbHVlc1tpbmRleF0gPSBtX3Zh
bHVlcy5sYXN0KCk7CisgICAgbV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAgIHJldHVybiBTd2l0
Y2hDYXNlKHJlc3VsdFZhbHVlLCByZXN1bHRCbG9jayk7Cit9CisKK3ZvaWQgU3dpdGNoVmFsdWU6
OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBtX3N1Y2Nl
c3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3VjY2Vzc29yc1ttX3N1
Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOworICAgIG1fdmFsdWVz
LmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBTd2l0Y2hWYWx1ZTo6
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRlc3RydWN0
aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisgICAgb3V0LnByaW50
KGxpc3REdW1wKCp0aGlzKSwgIiwgZmFsbFRocm91Z2ggPSAiLCBmYWxsVGhyb3VnaCgpKTsKK30K
KworU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZhbHVl
KGluZGV4LCBTd2l0Y2gsIFZvaWQsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5k
KGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hW
YWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFsdWVfaAor
I2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJsaWMgQ29u
dHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNv
ZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1ZSgpOwor
CisgICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisgICAgdW5z
aWduZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUoKTsgfQor
CisgICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRoZSBzYW1l
IGluZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50NjRfdD4m
IGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgRnJlcXVlbnRl
ZEJsb2NrIGZhbGxUaHJvdWdoKCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxhc3QoKTsg
fQorICAgIEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNjZXNzb3Jz
KCkubGFzdCgpOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbnVtQ2Fz
ZVZhbHVlcygpOyB9CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1Y2Nlc3Nv
cihpbmRleCkpOworICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWduZWQgaW5k
ZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0KKworICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAg
ICAgICAgIDogbV9zd2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAg
ICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTd2l0Y2hWYWx1ZSYg
c3dpdGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRjaCgmc3dp
dGNoVmFsdWUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAg
ICAgfQorCisgICAgICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCsr
OworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKG1fc3dpdGNoID09IG90aGVyLm1fc3dpdGNoKTsKKyAgICAgICAgICAgIHJl
dHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIGNvbnN0IFN3aXRjaFZhbHVlKiBtX3N3aXRjaDsKKyAgICAgICAgdW5zaWdu
ZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgdHlwZWRlZiBpdGVyYXRvciBjb25zdF9pdGVyYXRv
cjsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IHNpemUoKSk7IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVvcmRlcnMg
dGhpbmdzIGEgYml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAgdG8gTiwK
KyAgICAvLyB0aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBsb25nIGFz
IHlvdSByZXZpc2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAvLyBjb250
YWluIHNvbWUgb3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0aGF0IHdh
cyByZW1vdmVkLgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCk7CisK
KyAgICB2b2lkIGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYpOworCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRl
OgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTd2l0Y2hWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKTsKKwor
ICAgIFZlY3RvcjxpbnQ2NF90PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3dpdGNoVmFs
dWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
V1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQoIlZvaWQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIG91dC5wcmludCgiSW50NjQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRvdWJsZSIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEIzVHlwZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgeworICAgIFZvaWQsCisgICAg
SW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxpbmUgYm9vbCBpc0ludChU
eXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9PSBJbnQ2NDsK
K30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUg
PT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyVHlwZSgpCit7CisgICAgaWYgKGlz
MzJCaXQoKSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVybiBJbnQ2NDsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmlu
dFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6VHlw
ZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vw
c2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVcHNpbG9uVmFsdWU6On5VcHNp
bG9uVmFsdWUoKQoreworfQorCit2b2lkIFVwc2lsb25WYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4iLCBtX3BoaS0+aW5kZXgoKSk7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXBzaWxvblZhbHVlX2gKKyNkZWZpbmUgQjNVcHNp
bG9uVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFVwc2lsb25WYWx1ZSA6
IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUg
b3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gVXBzaWxvbjsgfQorCisgICAgflVwc2lsb25WYWx1
ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhpOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICBVcHNpbG9u
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUq
IHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGhpLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQor
ICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+dHlwZSgp
ID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisKKyAgICBWYWx1ZSogbV9waGk7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1VzZUNvdW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VXNlQ291bnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1VzZUNvdW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
VXNlQ291bnRzOjpVc2VDb3VudHMoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgOiBtX2NvdW50
cyhwcm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQoreworICAgIGZvciAoVmFsdWUqIHZhbHVlIDog
cHJvY2VkdXJlLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUt
PmNoaWxkcmVuKCkpCisgICAgICAgICAgICBtX2NvdW50c1tjaGlsZF0rKzsKKyAgICB9Cit9CisK
K1VzZUNvdW50czo6flVzZUNvdW50cygpCit7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXNlQ291bnRz
X2gKKyNkZWZpbmUgQjNVc2VDb3VudHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFVzZUNvdW50cyB7
CitwdWJsaWM6CisgICAgVXNlQ291bnRzKFByb2NlZHVyZSYpOworICAgIH5Vc2VDb3VudHMoKTsK
KworICAgIHVuc2lnbmVkIG9wZXJhdG9yW10oVmFsdWUqIHZhbHVlKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fY291bnRzW3ZhbHVlXTsKKyAgICB9Citwcml2YXRlOgorICAgIEluZGV4
TWFwPFZhbHVlLCB1bnNpZ25lZD4gbV9jb3VudHM7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1VzZUNvdW50
c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsaWRh
dGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFs
dWUuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNQcm9j
ZWR1cmUuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJ
bmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5n
UHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgeworCitjbGFzcyBWYWxpZGF0ZXIg
eworcHVibGljOgorICAgIFZhbGlkYXRlcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hh
ciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAg
ICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBWQUxJ
REFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBmYWlsKF9f
RklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3Ry
aW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2b2lkIHJ1bigpCisg
ICAgeworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7CisgICAgICAgIEhhc2hT
ZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZhbHVlSW5C
bG9jazsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1cmUpIHsK
KyAgICAgICAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICAgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiAqYmxvY2spCisgICAgICAgICAgICAgICAgdmFsdWVJbkJsb2NrLmFkZCh2YWx1ZSk7
CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2VkdXJlLnZh
bHVlcygpKQorICAgICAgICAgICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsKKworICAgICAgICBm
b3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAgVkFMSURBVEUodmFs
dWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCisgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisKKyAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgeworICAgICAgICAgICAgZm9yIChWYWx1ZSog
Y2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZUluUHJvYy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4iLCBwb2ludGVyRHVt
cChjaGlsZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hNYXA8QmFzaWNCbG9jayosIEhh
c2hTZXQ8QmFzaWNCbG9jayo+PiBhbGxQcmVkZWNlc3NvcnM7CisgICAgICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgIFZBTElEQVRFKGJsb2NrLT5zaXpl
KCkgPj0gMSwgKCJBdCAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKQorICAgICAgICAgICAgICAgIFZBTElEQVRF
KCFDb250cm9sVmFsdWU6OmFjY2VwdHMoYmxvY2stPmF0KGkpLT5vcGNvZGUoKSksICgiQXQgIiwg
KmJsb2NrLT5hdChpKSkpOworICAgICAgICAgICAgVkFMSURBVEUoQ29udHJvbFZhbHVlOjphY2Nl
cHRzKGJsb2NrLT5sYXN0KCktPm9wY29kZSgpKSwgKCJBdCAiLCAqYmxvY2stPmxhc3QoKSkpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJs
b2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgICAgIGFsbFByZWRlY2Vzc29y
cy5hZGQoc3VjY2Vzc29yLCBIYXNoU2V0PEJhc2ljQmxvY2sqPigpKS5pdGVyYXRvci0+dmFsdWUu
YWRkKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgKKyAgICAgICAgICAgICAgICAg
ICAgYmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiQXQgIiwgKmJsb2NrLCAiLT4iLCBwb2lu
dGVyRHVtcChzdWNjZXNzb3IpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAvLyBOb3RlIHRoYXQgdGhpcyB0b3RhbGx5IGFsbG93cyBkZWFkIGNvZGUuCisgICAgICAgIGZv
ciAoYXV0byYgZW50cnkgOiBhbGxQcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgIEJhc2ljQmxv
Y2sqIHN1Y2Nlc3NvciA9IGVudHJ5LmtleTsKKyAgICAgICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9j
ayo+JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIFZBTElEQVRFKHBy
ZWRlY2Vzc29ycyA9PSBzdWNjZXNzb3ItPnByZWRlY2Vzc29ycygpLCAoIkF0ICIsICpzdWNjZXNz
b3IpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbV9wcm9jZWR1
cmUudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNo
aWxkcmVuKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUoY2hpbGQtPnR5cGUoKSAhPSBWb2lk
LCAoIkF0ICIsICp2YWx1ZSwgIi0+IiwgKmNoaWxkKSk7CisgICAgICAgICAgICBzd2l0Y2ggKHZh
bHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb3A6CisgICAgICAgICAgICBjYXNl
IEp1bXA6CisgICAgICAgICAgICBjYXNlIE9vcHM6CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
IXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSWRlbnRpdHk6CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGls
ZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29uc3QzMjoKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
Q29uc3REb3VibGU6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJl
bigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50
eXBlKCkgPT0gRG91YmxlLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAgICAgICBjYXNlIEZyYW1lUG9p
bnRlcjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9
PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICh2YWx1ZS0+YXM8QXJndW1lbnRSZWdW
YWx1ZT4oKS0+YXJndW1lbnRSZWcoKS5pc0dQUigpID8gcG9pbnRlclR5cGUoKSA6IERvdWJsZSkK
KyAgICAgICAgICAgICAgICAgICAgPT0gdmFsdWUtPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQWRkOgorICAgICAgICAg
ICAgY2FzZSBTdWI6CisgICAgICAgICAgICBjYXNlIE11bDoKKyAgICAgICAgICAgIGNhc2UgRGl2
OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9
PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkg
IT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAgICAgICBjYXNlIE1vZDoKKyAgICAgICAgICAg
IGNhc2UgQml0QW5kOgorICAgICAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgICAgIGNhc2Ug
Qml0WG9yOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09
IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5
cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlw
ZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZh
bHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTaGw6CisgICAgICAgICAgICBjYXNlIFNTaHI6CisgICAgICAgICAg
ICBjYXNlIFpTaHI6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVu
KCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09IEludDMy
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVl
LT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgICAgIGNhc2UgU0V4dDE2OgorICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0g
SW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
PnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgU0V4dDMyOgorICAgICAgICAgICAgY2FzZSBaRXh0MzI6Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5
cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+dHlwZSgpID09IEludDY0LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUcnVuYzoKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDY0LCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0g
SW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIEZSb3VuZDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSVRvRDoK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT5jaGls
ZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRFRvSTMyOgorICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gRG91YmxlLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkg
PT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIEVxdWFsOgorICAgICAgICAgICAgY2FzZSBOb3RFcXVhbDoKKyAgICAgICAg
ICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgICAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgICAg
ICAgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgICAgICAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlw
ZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFib3ZlOgorICAg
ICAgICAgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICAg
ICAgICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgp
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVl
LT5jaGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBj
YXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2Ug
TG9hZDE2UzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9
PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZEZsb2F0
OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDAp
LT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09
IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0
b3JlMTY6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0g
MiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hp
bGQoMCktPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0g
Vm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2lu
dGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkg
PT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgQ0NhbGw6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHdpbGRjYXJk
LiBZb3UgY2FuIHBhc3MgYW55IG5vbi12b2lkIGFyZ3VtZW50cyBhbmQgeW91IGNhbiBzZWxlY3Qg
YW55CisgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHR5cGUuCisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIFBhdGNocG9pbnQ6CisgICAgICAgICAgICAgICAgdmFsaWRh
dGVTdGFja21hcCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIENoZWNrQWRkOgorICAgICAgICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAgICAgIGNh
c2UgQ2hlY2tNdWw6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVu
KCkgPj0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0lu
dCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkpLCAoIkF0ICIsICp2
YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2ttYXAodmFsdWUpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAgICAgICAg
ICB2YWxpZGF0ZVN0YWNrbWFwKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHZhbHVlLT5hczxVcHNpbG9uVmFsdWU+KCkt
PnBoaSgpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWVJblByb2MuY29udGFpbnModmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKS0+cGhpKCkp
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBQaGk6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigp
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBl
KCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IFN3aXRjaDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9
PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKK3By
aXZhdGU6CisgICAgdm9pZCB2YWxpZGF0ZVN0YWNrbWFwKFZhbHVlKiB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAgICAgICBW
QUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSBzdGFja21hcC0+cmVwcygpLnNpemUoKSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHN0YWNr
bWFwLT5yZXBzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVlUmVwJiBy
ZXAgPSBzdGFja21hcC0+cmVwcygpW2ldOworICAgICAgICAgICAgaWYgKHJlcC5raW5kKCkgIT0g
VmFsdWVSZXA6OlJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgaWYgKHJlcC5yZWcoKS5pc0dQUigpKQorICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50
KHZhbHVlLT5jaGlsZChpKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0Zsb2F0KHZhbHVlLT5jaGlsZChpKS0+
dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBO
T19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hhciogZmls
ZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciog
Y29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAgICBDU3Ry
aW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQcmludFN0
cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkIzIFZBTElEQVRJT04gRkFJTFVSRVxu
Iik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVu
YW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAg
ICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgQWZ0ZXIgIiwg
bV9wcm9jZWR1cmUubGFzdFBoYXNlTmFtZSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVN
ZXNzYWdlID0gb3V0LnRvQ1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgZGF0YUxvZyhm
YWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAg
IGRhdGFMb2coIkJlZm9yZSAiLCBtX3Byb2NlZHVyZS5sYXN0UGhhc2VOYW1lKCksICI6XG4iKTsK
KyAgICAgICAgICAgIGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAgICAgICBk
YXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhtX3Byb2Nl
ZHVyZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJl
cG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25k
aXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1cmUmIG1f
cHJvY2VkdXJlOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBj
b25zdCBjaGFyKiBkdW1wQmVmb3JlKQoreworICAgIFZhbGlkYXRlciB2YWxpZGF0ZXIocHJvY2Vk
dXJlLCBkdW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
VmFsaWRhdGVfaAorI2RlZmluZSBCM1ZhbGlkYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK3Zv
aWQgdmFsaWRhdGUoUHJvY2VkdXJlJiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIp
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM1ZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4MyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFs
dWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1ZGUgPHd0
Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworY29uc3QgY2hhciogY29uc3QgVmFsdWU6OmR1bXBQcmVmaXggPSAiQCI7CisKK1ZhbHVlOjp+
VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKiB2
YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGluLXBsYWNl
IHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0aAorICAg
IC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9mIHRoZSBp
bmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHByZXZpb3Vz
IHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5IFZhbHVl
IGluIHBsYWNlLgorCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5cGUgdHlw
ZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9j
ayogb3duZXIgPSB0aGlzLT5vd25lcjsKKworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUgPT0gdmFs
dWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBuZXcgKHRo
aXMpIFZhbHVlKGluZGV4LCBJZGVudGl0eSwgdHlwZSwgb3JpZ2luLCB2YWx1ZSk7CisKKyAgICB0
aGlzLT5vd25lciA9IG93bmVyOworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aE5vcCgpCit7
CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIE9yaWdpbiBvcmlnaW4gPSBtX29y
aWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworCisgICAgdGhpcy0+
VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgTm9wLCBWb2lk
LCBvcmlnaW4pOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKK30KKwordm9pZCBWYWx1ZTo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4
LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwgbV9vcGNv
ZGUpOworCisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAg
IGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBwb2ludGVyRHVtcChjaGlsZCkpOworCisgICAgU3RyaW5nUHJpbnRTdHJlYW0gc3RyaW5nT3V0
OworICAgIGR1bXBNZXRhKHN0cmluZ091dCk7CisgICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdP
dXQudG9DU3RyaW5nKCk7CisgICAgaWYgKHN0cmluZy5sZW5ndGgoKSkKKyAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBzdHJpbmcpOworCisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK1ZhbHVlKiBW
YWx1ZTo6bmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworVmFsdWUqIFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbnQzMl90KSBj
b25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCitWYWx1ZSogVmFsdWU6OmFkZENvbnN0
YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
KworVmFsdWUqIFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0Cit7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgVmFsdWU6OnBlcmZvcm1TdWJzdGl0dXRp
b24oKQoreworICAgIGZvciAoVmFsdWUqJiBjaGlsZCA6IGNoaWxkcmVuKCkpIHsKKyAgICAgICAg
d2hpbGUgKGNoaWxkLT5vcGNvZGUoKSA9PSBJZGVudGl0eSkKKyAgICAgICAgICAgIGNoaWxkID0g
Y2hpbGQtPmNoaWxkKDApOworICAgIH0KK30KKwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRT
dHJlYW0mKSBjb25zdAoreworfQorCitUeXBlIFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUs
IFZhbHVlKiBmaXJzdENoaWxkKQoreworICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJ
ZGVudGl0eToKKyAgICBjYXNlIEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAg
ICBjYXNlIERpdjoKKyAgICBjYXNlIENoaWxsRGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2Ug
Qml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6
CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAg
IGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0
Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHBv
aW50ZXJUeXBlKCk7CisgICAgY2FzZSBTRXh0ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBjYXNl
IFRydW5jOgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RF
cXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2Fz
ZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAg
ICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6
CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQz
MjoKKyAgICAgICAgcmV0dXJuIEludDY0OworICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRv
RDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsKKyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJu
IFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gKKyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIK
KyNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0
Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgUHJvY2Vk
dXJlOworY2xhc3MgU3RhY2ttYXA7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFZhbHVlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lM
aXN0OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVh
bCB+VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRl
eDsgfQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhj
ZXB0IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggSWRlbnRpdHkgb3IgTm9wLgorICAgIE9wY29k
ZSBvcGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1
bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSog
Y2hpbGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9
CisKKyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4u
c2l6ZSgpOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBlIHVzaW5nIHRoZSBvcGNv
ZGUuCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICAvLyBU
aGlzIGlzIHVzZWZ1bCB3aGVuIGxvd2VyaW5nLiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IHZhbGlk
IGZvciBub24tdm9pZCB2YWx1ZXMuCisgICAgQWlyOjpBcmc6OlR5cGUgYWlyVHlwZSgpIGNvbnN0
IHsgcmV0dXJuIEFpcjo6QXJnOjp0eXBlRm9yQjNUeXBlKHR5cGUoKSk7IH0KKworICAgIEFkamFj
ZW5jeUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBB
ZGphY2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKwor
ICAgIHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdp
dGhOb3AoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQg
ZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBj
YXN0IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92
aWRlZCB0aGF0IHdlIGhhdmUgYQorICAgIC8vIEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86
CisgICAgLy8KKyAgICAvLyBpZiAoQXJndW1lbnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1
ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkgeworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9
CisgICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAh
PSBBcmd1bWVudFJlZy4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisg
ICAgLy8gaWYgVDo6YWNjZXB0cyhvcGNvZGUoKSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICBjb25zdCBUKiBhcygpIGNvbnN0OworCisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7Cisg
ICAgCisgICAgdmlydHVhbCBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29uc3Q7Cisg
ICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikg
Y29uc3Q7CisgICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUq
IG90aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAg
IGludDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25z
dDsKKyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSW50KCkgY29u
c3Q7CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnQoaW50NjRfdCB2
YWx1ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludFB0cigpIGNvbnN0OworICAgIGludHB0cl90
IGFzSW50UHRyKCkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OworICAgIGRv
dWJsZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgU3RhY2ttYXAqIHN0YWNrbWFwKCk7CisKKyAg
ICAvLyBNYWtlcyBzdXJlIHRoYXQgbm9uZSBvZiB0aGUgY2hpbGRyZW4gYXJlIElkZW50aXR5J3Mu
IElmIGEgY2hpbGQgcG9pbnRzIHRvIElkZW50aXR5LCB0aGlzIHdpbGwKKyAgICAvLyByZXBvaW50
IGl0IGF0IHRoZSBJZGVudGl0eSdzIGNoaWxkLiBGb3Igc2ltcGxpY2l0eSwgdGhpcyB3aWxsIGZv
bGxvdyBhcmJpdHJhcmlseSBsb25nIGNoYWlucworICAgIC8vIG9mIElkZW50aXR5J3MuCisgICAg
dm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworcHJvdGVjdGVkOgorICAgIC8vIEluc3RhbnRpYXRlIHZh
bHVlcyB2aWEgUHJvY2VkdXJlLgorICAgIC8vIFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5aW5n
IHRoZSB0eXBlIGV4cGxpY2l0bHk6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bj
b2RlKQorICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikK
KyAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsK
KyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxp
Y2l0bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKKyAgICBleHBsaWNpdCBWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2lu
KQorICAgICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQor
ICAgICAgICAsIG1fdHlwZSh0eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7
CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBp
bmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAg
ICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZp
cnN0Q2hpbGQpKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxk
cmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQorICAgIHsKKyAgICB9CisgICAgLy8gVGhp
cyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJv
bSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAorICAgIC8vIHRha2UgYW55IGFyZ3Vt
ZW50czoKKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bj
b2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQor
ICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICB7CisgICAgfQorICAgIC8vIFVzZSB0aGlz
IGZvcm0gZm9yIHZhcmFyZ3MuCisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9w
Y29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlz
dCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29k
ZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAgICAgICwgbV9vcmlnaW4ob3Jp
Z2luKQorICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCisgICAgeworICAgIH0KKworcHJp
dmF0ZToKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQp
OworCisgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0
IGJpdHMuCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBPcGNvZGUgbV9vcGNvZGU7CisgICAg
VHlwZSBtX3R5cGU7CisgICAgCisgICAgT3JpZ2luIG1fb3JpZ2luOworICAgIEFkamFjZW5jeUxp
c3QgbV9jaGlsZHJlbjsKKworcHVibGljOgorICAgIEJhc2ljQmxvY2sqIG93bmVyIHsgbnVsbHB0
ciB9OyAvLyBjb21wdXRlZCBsYXppbHkuCit9OworCitjbGFzcyBEZWVwVmFsdWVEdW1wIHsKK3B1
YmxpYzoKKyAgICBEZWVwVmFsdWVEdW1wKGNvbnN0IFZhbHVlKiB2YWx1ZSkKKyAgICAgICAgOiBt
X3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhbHVlKQorICAgICAgICAgICAgbV92
YWx1ZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0LnByaW50
KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVmFsdWUqIG1fdmFsdWU7
Cit9OworCitpbmxpbmUgRGVlcFZhbHVlRHVtcCBkZWVwRHVtcChjb25zdCBWYWx1ZSogdmFsdWUp
Cit7CisgICAgcmV0dXJuIERlZXBWYWx1ZUR1bXAodmFsdWUpOworfQorCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Zh
bHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVJbmxpbmVzX2gKKyNkZWZp
bmUgQjNWYWx1ZUlubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
Q2hlY2tWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjND
b25zdDY0VmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKyNpbmNsdWRl
ICJCM1BhdGNocG9pbnRWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVk
ZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgVD4KK1QqIFZhbHVlOjphcygpCit7CisgICAgaWYgKFQ6OmFjY2VwdHMob3Bj
b2RlKCkpKQorICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VCo+KHRoaXMpOworICAgIHJldHVy
biBudWxscHRyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY29uc3QgVCogVmFsdWU6OmFz
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxWYWx1ZSo+KHRoaXMpLT5hczxUPigp
OworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aXNDb25zdGFudCgpIGNvbnN0Cit7CisgICAgc3dp
dGNoIChvcGNvZGUoKSkgeworICAgIGNhc2UgQ29uc3QzMjoKKyAgICBjYXNlIENvbnN0NjQ6Cisg
ICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omhh
c0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdDMyVmFsdWU+KCk7Cit9CisK
K2lubGluZSBpbnQzMl90IFZhbHVlOjphc0ludDMyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXM8
Q29uc3QzMlZhbHVlPigpLT52YWx1ZSgpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50
NjQoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0NjRWYWx1ZT4oKTsKK30KKworaW5s
aW5lIGludDY0X3QgVmFsdWU6OmFzSW50NjQoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25z
dDY0VmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJbnQoKSBj
b25zdAoreworICAgIHJldHVybiBoYXNJbnQzMigpIHx8IGhhc0ludDY0KCk7Cit9CisKK2lubGlu
ZSBpbnQ2NF90IFZhbHVlOjphc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMyKCkg
PyBhc0ludDMyKCkgOiBhc0ludDY0KCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjppc0ludChp
bnQ2NF90IHZhbHVlKSBjb25zdAoreworICAgIHJldHVybiBoYXNJbnQoKSAmJiBhc0ludCgpID09
IHZhbHVlOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50UHRyKCkgY29uc3QKK3sKKyAg
ICBpZiAoaXM2NEJpdCgpKQorICAgICAgICByZXR1cm4gaGFzSW50NjQoKTsKKyAgICByZXR1cm4g
aGFzSW50MzIoKTsKK30KKworaW5saW5lIGludHB0cl90IFZhbHVlOjphc0ludFB0cigpIGNvbnN0
Cit7CisgICAgaWYgKGlzNjRCaXQoKSkKKyAgICAgICAgcmV0dXJuIGFzSW50NjQoKTsKKyAgICBy
ZXR1cm4gYXNJbnQzMigpOworfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzRG91YmxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gISFhczxDb25zdERvdWJsZVZhbHVlPigpOworfQorCitpbmxpbmUg
ZG91YmxlIFZhbHVlOjphc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0RG91
YmxlVmFsdWU+KCktPnZhbHVlKCk7Cit9CisKK2lubGluZSBTdGFja21hcCogVmFsdWU6OnN0YWNr
bWFwKCkKK3sKKyAgICBpZiAoQ2hlY2tWYWx1ZSogY2hlY2sgPSBhczxDaGVja1ZhbHVlPigpKQor
ICAgICAgICByZXR1cm4gJmNoZWNrLT5zdGFja21hcDsKKyAgICBpZiAoUGF0Y2hwb2ludFZhbHVl
KiBwYXRjaHBvaW50ID0gYXM8UGF0Y2hwb2ludFZhbHVlPigpKQorICAgICAgICByZXR1cm4gJnBh
dGNocG9pbnQtPnN0YWNrbWFwOworICAgIHJldHVybiBudWxscHRyOworfQorCit9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1ZhbHVlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
UmVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJl
cC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4OSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQjNWYWx1ZVJlcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgVmFsdWVSZXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9raW5kKTsKKyAgICBzd2l0Y2ggKG1fa2luZCkgewor
ICAgIGNhc2UgQW55OgorICAgIGNhc2UgU29tZVJlZ2lzdGVyOgorICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBSZWdpc3RlcjoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgcmVnKCksICIpIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIigiLCBv
ZmZzZXRGcm9tRlAoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tBcmd1
bWVudDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbVNQKCksICIpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIigiLCB2
YWx1ZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3Bh
Y2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBWYWx1ZVJlcDo6S2luZCBraW5kKQoreworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAgICAgb3V0LnByaW50KCJBbnki
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAg
ICAgICAgb3V0LnByaW50KCJTb21lUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIlJlZ2lzdGVyIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFjazoKKyAgICAgICAgb3V0LnBy
aW50KCJTdGFjayIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tB
cmd1bWVudDoKKyAgICAgICAgb3V0LnByaW50KCJTdGFja0FyZ3VtZW50Iik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpDb25zdGFudDoKKyAgICAgICAgb3V0LnByaW50KCJD
b25zdGFudCIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlUmVwX2gKKyNkZWZpbmUgQjNWYWx1ZVJlcF9o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiUmVnLmgiCisjaW5jbHVkZSA8d3Rm
L1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBX
ZSB1c2UgdGhpcyBjbGFzcyB0byBkZXNjcmliZSB2YWx1ZSByZXByZXNlbnRhdGlvbnMgYXQgc3Rh
Y2ttYXBzLiBJdCdzIHVzZWQgYm90aCB0byBmb3JjZSBhCisvLyByZXByZXNlbnRhdGlvbiBhbmQg
dG8gZ2V0IHRoZSByZXByZXNlbnRhdGlvbi4gV2hlbiB0aGUgQjMgY2xpZW50IGZvcmNlcyBhIHJl
cHJlc2VudGF0aW9uLCB3ZSBzYXkKKy8vIHRoYXQgaXQncyBhbiBpbnB1dC4gV2hlbiBCMyB0ZWxs
cyB0aGUgY2xpZW50IHdoYXQgcmVwcmVzZW50YXRpb24gaXQgcGlja2VkLCB3ZSBzYXkgdGhhdCBp
dCdzIGFuCisvLyBvdXRwdXQuCisKK2NsYXNzIFZhbHVlUmVwIHsKK3B1YmxpYzoKKyAgICBlbnVt
IEtpbmQgeworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBtZWFu
cyB0aGF0IEIzIGNhbiBwaWNrIGFueSByZXByZXNlbnRhdGlvbi4gQXMgYW4KKyAgICAgICAgLy8g
b3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgd2UgZG9uJ3Qga25vdy4gVGhp
cyB3aWxsIG9ubHkgYXJpc2UgZm9yIHRoZQorICAgICAgICAvLyByaWdodCBvcGVyYW5kIChpLmUu
IGNoaWxkKDEpKSBvZiBhIENoZWNrTXVsLgorICAgICAgICBBbnksCisKKyAgICAgICAgLy8gQXMg
YW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBzaG91bGQgcGljayBz
b21lIHJlZ2lzdGVyLiBJdCBjb3VsZCBiZSBhCisgICAgICAgIC8vIHJlZ2lzdGVyIHRoYXQgdGhp
cyBjbGFpbXMgdG8gY2xvYmJlciEKKyAgICAgICAgU29tZVJlZ2lzdGVyLAorCisgICAgICAgIC8v
IEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyBhIHBhcnRpY3VsYXIgcmVn
aXN0ZXIuIEFzIGFuIG91dHB1dAorICAgICAgICAvLyByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxs
cyB1cyB3aGF0IHJlZ2lzdGVyIEIzIHBpY2tlZC4KKyAgICAgICAgUmVnaXN0ZXIsCisKKyAgICAg
ICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgc3Rh
Y2sgc2xvdCBCMyBwaWNrZWQuIEl0J3Mgbm90IGEgdmFsaWQKKyAgICAgICAgLy8gaW5wdXQgcmVw
cmVzZW50YXRpb24uCisgICAgICAgIFN0YWNrLAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJl
cHJlc2VudGF0aW9uLCB0aGlzIGZvcmNlcyB0aGUgdmFsdWUgdG8gZW5kIHVwIGluIHRoZSBhcmd1
bWVudCBhcmVhIGF0IHNvbWUKKyAgICAgICAgLy8gb2Zmc2V0LgorICAgICAgICAvLyBGSVhNRTog
VGhlIFN0YWNrbWFwU3BlY2lhbCBjbGFzcyBuZWVkcyB0byBhY2NvdW50IGZvciB0aGUgZmFjdCB0
aGF0IHRoZXNlIGRvbid0IHR1cm4gaW50bworICAgICAgICAvLyBBaXIgb3BlcmFuZHMuCisgICAg
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1NDAKKyAg
ICAgICAgU3RhY2tBcmd1bWVudCwKKworICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgdGVsbHMgdXMgdGhhdCBCMyBjb25zdGFudC1mb2xkZWQgdGhlIHZhbHVlLgor
ICAgICAgICBDb25zdGFudAorICAgIH07CisgICAgCisgICAgVmFsdWVSZXAoKQorICAgICAgICA6
IG1fa2luZChBbnkpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFZhbHVlUmVwKFJlZyBy
ZWcpCisgICAgICAgIDogbV9raW5kKFJlZ2lzdGVyKQorICAgIHsKKyAgICAgICAgdS5yZWcgPSBy
ZWc7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIHJlZyhSZWcgcmVnKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFZhbHVlUmVwKHJlZyk7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVw
IHN0YWNrKGludHB0cl90IG9mZnNldEZyb21GUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJl
c3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrOworICAgICAgICByZXN1bHQudS5v
ZmZzZXRGcm9tRlAgPSBvZmZzZXRGcm9tRlA7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAg
fQorCisgICAgc3RhdGljIFZhbHVlUmVwIHN0YWNrQXJndW1lbnQoaW50cHRyX3Qgb2Zmc2V0RnJv
bVNQKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9r
aW5kID0gU3RhY2tBcmd1bWVudDsKKyAgICAgICAgcmVzdWx0LnUub2Zmc2V0RnJvbVNQID0gb2Zm
c2V0RnJvbVNQOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBW
YWx1ZVJlcCBjb25zdGFudChpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAg
cmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gQ29uc3RhbnQ7CisgICAgICAgIHJlc3Vs
dC51LnZhbHVlID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c3RhdGljIFZhbHVlUmVwIGNvbnN0YW50RG91YmxlKGRvdWJsZSB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiBWYWx1ZVJlcDo6Y29uc3RhbnQoYml0d2lzZV9jYXN0PGludDY0X3Q+KHZhbHVl
KSk7CisgICAgfQorCisgICAgS2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisK
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4ga2luZCgpICE9IEFu
eTsgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFJlZ2lzdGVyKTsKKyAgICAgICAgcmV0dXJuIHUucmVnOworICAgIH0KKworICAgIGludHB0
cl90IG9mZnNldEZyb21GUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09
IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIHUub2Zmc2V0RnJvbUZQOworICAgIH0KKworICAgIGlu
dHB0cl90IG9mZnNldEZyb21TUCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgp
ID09IFN0YWNrQXJndW1lbnQpOworICAgICAgICByZXR1cm4gdS5vZmZzZXRGcm9tU1A7CisgICAg
fQorCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2lu
ZCgpID09IENvbnN0YW50KTsKKyAgICAgICAgcmV0dXJuIHUudmFsdWU7CisgICAgfQorCisgICAg
ZG91YmxlIGRvdWJsZVZhbHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBiaXR3aXNl
X2Nhc3Q8ZG91YmxlPih2YWx1ZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBLaW5kIG1fa2luZDsKKyAgICB1bmlvbiBVIHsK
KyAgICAgICAgUmVnIHJlZzsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQOworICAgICAg
ICBpbnRwdHJfdCBvZmZzZXRGcm9tU1A7CisgICAgICAgIGludDY0X3QgdmFsdWU7CisKKyAgICAg
ICAgVSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1lbXNldCh0aGlzLCAwLCBzaXplb2YoKnRo
aXMpKTsKKyAgICAgICAgfQorICAgIH0gdTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCituYW1lc3BhY2UgV1RGIHsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6VmFsdWVSZXA6OktpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbHVlUmVwX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVy
LnJiCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2dlbmVyYXRlX3Bh
dHRlcm5fbWF0Y2hlci5yYgkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1MCBAQAorIyEvdXNy
L2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
CisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCity
ZXF1aXJlICJwYXRobmFtZSIKKworJHZhckluZGV4ID0gMAorZGVmIG5ld1ZhcgorICAgICR2YXJJ
bmRleCArPSAxCisgICAgIl90bXAjeyR2YXJJbmRleH0iCitlbmQKKworY2xhc3MgUHJvZHVjdGlv
bgorICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpuYW1lLCA6dmFyTmFtZSwgOmFub255bW91cywg
Om9wY29kZSwgOmNoaWxkcmVuCisKKyAgICBkZWYgaW5pdGlhbGl6ZShvcmlnaW4sIG5hbWUsIG9w
Y29kZSwgY2hpbGRyZW4pCisgICAgICAgIEBvcmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQG5hbWUg
PSBuYW1lCisgICAgICAgIEBhbm9ueW1vdXMgPSAobmFtZSA9PSBuaWwgb3IgbmFtZSA9fiAvXEFc
JChbMC05XSspXFovKQorICAgICAgICBAdmFyTmFtZSA9IEBhbm9ueW1vdXMgPyBuZXdWYXIgOiBu
YW1lID1+IC9cQVwkLyA/ICQnIDogbmFtZQorICAgICAgICBAb3Bjb2RlID0gb3Bjb2RlCisgICAg
ICAgIEBjaGlsZHJlbiA9IGNoaWxkcmVuID8gY2hpbGRyZW4gOiBbXQorICAgIGVuZAorCisgICAg
ZGVmIGhhc09wY29kZQorICAgICAgICBvcGNvZGUgIT0gbmlsCisgICAgZW5kCisKKyAgICBkZWYg
ZWFjaFZhcmlhYmxlKCZwcm9jKQorICAgICAgICBjaGlsZHJlbi5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgfCBjaGlsZCwgaW5kZXggfAorICAgICAgICAgICAgeWllbGQgdmFyTmFtZSwK
KyAgICAgICAgICAgICAgICAgIGNoaWxkLm5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC52
YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQuYW5vbnltb3VzID8gKGNoaWxkLm9wY29k
ZSA/IDphbm9uSW50ZXJuYWwgOiA6YW5vbk9wZXJhbmQpIDogKGNoaWxkLm9wY29kZSA/IDppbnRl
cm5hbCA6IDpvcGVyYW5kKSwKKyAgICAgICAgICAgICAgICAgIGluZGV4CisgICAgICAgICAgICBj
aGlsZC5lYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCitjbGFz
cyBNYXRjaGVyCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpwcm9kdWN0aW9ucworCisgICAgZGVm
IGluaXRpYWxpemUobmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAg
ICAgICBAcHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucworICAgIGVuZAorZW5kCisKK2NsYXNzIE9y
aWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAgICBk
ZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1lID0g
ZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisgICAg
CisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisgICAg
ZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3RyaW5n
CisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBvcmln
aW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAorICAg
IGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAgICAg
IEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBzdHJp
bmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90aGVy
KQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRvX3MK
KyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisgICAg
CisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/
CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBdfSIK
KyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQorICAg
IGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisgICAg
bGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNlIHN0
cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQsIGln
bm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25vcmUK
KyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQVthLXpBLVowLTkk
XShbYS16QS1aMC05X10qKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2lu
Lm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJd
KykvCisgICAgICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVs9
KCksXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxlTmFt
ZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiTGV4
ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKS50b19zfSwgdW5l
eHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVjdH0iCisgICAgICAgIGVuZAorICAg
ICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisgICAgcmVzdWx0CitlbmQKKworZGVm
IGlzS2V5d29yZCh0b2tlbikKKyAgICAjIFdlIGNhbiBleHRlbmQgdGhpcyBhcyB3ZSBhZGQgbW9y
ZSBrZXl3b3Jkcy4gTGlrZSwgd2UgbWlnaHQgd2FudCAiaW5jbHVkZSIgZXZlbnR1YWxseS4KKyAg
ICB0b2tlbiA9fiAvXEEoKG1hdGNoZXIpfChpbmNsdWRlKSlcWi8KK2VuZAorCitkZWYgaXNJZGVu
dGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9cQVthLXpBLVowLTkkXShbYS16QS1aMC05X10q
KVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFzcyBQYXJzZXIKKyAgICBk
ZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRva2VucyA9IGxleChkYXRh
LCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKworICAgIGRlZiB0b2tlbgor
ICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYgYWR2YW5jZQorICAgICAg
ICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50KQorICAg
ICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJvcigqY29tbWVudCkKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgICAg
ICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlOiAje2NvbW1l
bnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVm
IGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCAje3N0cmluZ30i
KSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UKKyAgICBlbmQKKworICAg
IGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAg
ICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVubGVzcyBpc0lkZW50aWZp
ZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisg
ICAgZGVmIGFkZFVuaXF1ZShuYW1lLCBwcm9kdWN0aW9ucywgcHJvZHVjdGlvbikKKyAgICAgICAg
aWYgbmFtZSA9PSBwcm9kdWN0aW9uLnZhck5hbWUKKyAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNo
aWxkIHByb2R1Y3Rpb24gaGFzIHNhbWUgbmFtZSBhcyBwYXJlbnQgcHJvZHVjdGlvbiIpCisgICAg
ICAgIGVuZAorICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRlY3QgeyB8IGVudHJ5IHwgZW50cnku
bmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGlj
YXRlIHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJv
ZHVjdGlvbgorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAgICAgIGNvbnN1bWUoIm1hdGNo
ZXIiKQorCisgICAgICAgIG1hdGNoZXJOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAg
ICBwcm9kdWN0aW9ucyA9IFtdCisKKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBp
ZiBAaWR4ID49IEB0b2tlbnMubGVuZ3RoCisKKyAgICAgICAgICAgICMgV2UgbWlnaHQgd2FudCB0
byBzdXBwb3J0ICJpbmNsdWRlIi4gSWYgd2UgZGlkIHRoYXQsIGl0IHdvdWxkIGdvIGhlcmUuCisg
ICAgICAgICAgICBwcm9kdWN0aW9uID0gcGFyc2VQcm9kdWN0aW9uCisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIHByb2R1Y3Rpb25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09
IHByb2R1Y3Rpb24ubmFtZSB9CisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRHVwbGljYXRl
IHByb2R1Y3Rpb24iKQorICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgIHByb2R1Y3Rpb25z
IDw8IHByb2R1Y3Rpb24KKyAgICAgICAgfQorCisgICAgICAgIE1hdGNoZXIubmV3KG1hdGNoZXJO
YW1lLCBwcm9kdWN0aW9ucykKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZVByb2R1Y3Rpb24KKyAg
ICAgICAgb3JpZ2luID0gdG9rZW4ub3JpZ2luCisgICAgICAgIG5hbWUgPSBjb25zdW1lSWRlbnRp
ZmllcgorCisgICAgICAgIGlmIHRva2VuID09ICI9IgorICAgICAgICAgICAgY29uc3VtZSgiPSIp
CisgICAgICAgICAgICBvcGNvZGUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgY29u
c3VtZSgiKCIpCisgICAgICAgIGVsc2lmIHRva2VuID09ICIoIgorICAgICAgICAgICAgY29uc3Vt
ZSgiKCIpCisgICAgICAgICAgICBvcGNvZGUgPSBuYW1lCisgICAgICAgICAgICBuYW1lID0gbmls
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBQcm9kdWN0aW9uLm5ldyhvcmlnaW4s
IG5hbWUsIG5pbCwgbmlsKQorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIHByb2R1Y3Rp
b25zID0gW10KKyAgICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiB0b2tlbiA9PSAi
KSIKKworICAgICAgICAgICAgYWRkVW5pcXVlKG5hbWUsIHByb2R1Y3Rpb25zLCBwYXJzZVByb2R1
Y3Rpb24pCisKKyAgICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorICAgICAgICAgICAg
Y29uc3VtZSgiLCIpCisgICAgICAgIH0KKworICAgICAgICAjIEFkdmFuY2UgYWZ0ZXIgdGhlICIp
IgorICAgICAgICBhZHZhbmNlCisKKyAgICAgICAgUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1l
LCBvcGNvZGUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAorZW5kCisKK2ZpbGVOYW1lID0gQVJHVlsw
XQorCitwYXJzZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKGZpbGVOYW1lKSwgZmlsZU5hbWUpCitt
YXRjaGVyID0gcGFyc2VyLnBhcnNlCisKK2NsYXNzIFN1Yk1hdGNoCisgICAgYXR0cl9yZWFkZXIg
OmluZGV4TWFwLCA6cHJvZHVjdGlvbnMKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShpbmRleExp
c3QsIHByb2R1Y3Rpb25zKQorICAgICAgICBAaW5kZXhNYXAgPSBbXQorICAgICAgICBAcHJvZHVj
dGlvbnMgPSBbXQorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4
IHwKKyAgICAgICAgICAgIEBpbmRleE1hcCA8PCBpbmRleAorICAgICAgICAgICAgQHByb2R1Y3Rp
b25zIDw8IHByb2R1Y3Rpb25zW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCisKKyAgICBkZWYg
bWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgaW5kZXhMaXN0Lm1hcCB7CisgICAgICAg
ICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgIEBpbmRleE1hcFtpbmRleF0KKyAgICAgICAgfQor
ICAgIGVuZAorZW5kCisKKyRzdGRlcnIucHV0cyAiR2VuZXJhdGluZyBjb2RlIGZvciAje2ZpbGVO
YW1lfS4iCisKK0ZpbGUub3BlbigiQjMiICsgbWF0Y2hlci5uYW1lICsgIi5oIiwgInciKSB7Cisg
ICAgfCBvdXRwIHwKKworICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IGdlbmVyYXRlX3Bh
dHRlcm5fbWF0Y2hlci5yYiBmcm9tICN7ZmlsZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKworICAg
IG91dHAucHV0cyAiI2lmbmRlZiBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIG91dHAucHV0cyAi
I2RlZmluZSBCMyN7bWF0Y2hlci5uYW1lfV9oIgorICAgIAorICAgIG91dHAucHV0cyAiI2luY2x1
ZGUgXCJCM1ZhbHVlLmhcIiIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgQWRhcHRv
cj4iCisgICAgb3V0cC5wdXRzICJib29sIHJ1biN7bWF0Y2hlci5uYW1lfShWYWx1ZSogX3ZhbHVl
LCBBZGFwdG9yJiBhZGFwdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisKKyAgICAjIE5vdGUgdGhh
dCB0aGlzIGRvZXMgbm90IGVtaXQgcHJvcGVybHkgaW5kZW50ZWQgY29kZSwgYmVjYXVzZSBpdCdz
IGEgcmVjdXJzaXZlIGVtaXR0ZXIuIElmIHlvdQorICAgICMgd2FudCB0byBzZWUgdGhlIGNvZGUg
bmljZWx5IGZvcm1hdHRlZCwgb3BlbiBpdCBpbiBhIGdvb2QgdGV4dCBlZGl0b3IgYW5kIGFzayBp
dCB0byBmb3JtYXQgaXQKKyAgICAjIGZvciB5b3UuCisKKyAgICAjIEluIG9kZCBzaXR1YXRpb25z
LCB3ZSBtYXkgbm90IHVzZSB0aGUgaW5wdXQgdmFsdWUuIFRlbGwgdGhlIGNvbXBpbGVyIHRvIGNo
aWxsIG91dCBhYm91dCBpdC4KKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShfdmFsdWUpOyIK
KyAgICAgICAgCisgICAgIyBUaGlzIGp1c3QgcHJvdGVjdHMgdGhlIGNhbGxlciBmcm9tIGhhdmlu
ZyB0byB3b3JyeSBhYm91dCBwcm9kdWN0aW9ucyBoYXZpbmcgZGlmZmVyZW50IGxlbmd0aHMuCisg
ICAgZGVmIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAg
IGluZGV4TGlzdHMgPSBbXQorICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggewor
ICAgICAgICAgICAgfCBwcm9kdWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExp
c3RzWy0xXSBhbmQgcHJvZHVjdGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmNoaWxkcmVuLmxlbmd0
aCA9PSBwcm9kdWN0aW9uLmNoaWxkcmVuLmxlbmd0aAorICAgICAgICAgICAgICAgIGluZGV4TGlz
dHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaW5kZXhM
aXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIGlu
ZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBs
ZW5ndGggPSBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmNoaWxkcmVuLmxlbmd0aAorICAgICAg
ICAgICAgaWYgbGVuZ3RoID4gMAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCN7dmFs
dWVOYW1lfS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gI3tsZW5ndGh9KSB7IgorICAgICAgICAgICAg
ICAgIHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAgICAg
IGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAgICAjIFRoaXMgZWZmaWNpZW50bHkgc2VsZWN0
cyBmcm9tIHRoZSBnaXZlbiBzZXQgb2YgcHJvZHVjdGlvbnMuIEl0IGFzc3VtZXMgdGhhdCBwcm9k
dWN0aW9ucworICAgICMgYXJlIG5vdCBkdXBsaWNhdGVkLiBJdCB5aWVsZHMgdGhlIGluZGV4IG9m
IHRoZSBmb3VuZCBwcm9kdWN0aW9uLCBhbmQgdGhlIGNvcm91dGluZSBpcworICAgICMgcmVzcG9u
c2libGUgZm9yIGVtaXR0aW5nIHNwZWNpZmljIGNvZGUgZm9yIHRoYXQgcHJvZHVjdGlvbi4gVGhl
IGNvcm91dGluZSBpcyBnaXZlbiBsaXN0cyBvZgorICAgICMgaW5kaWNlcyBvZiBwb3NzaWJseS1t
YXRjaGluZyBwcm9kdWN0aW9ucy4KKyAgICBkZWYgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1
ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICAjIEZpcnN0LCBzcGxpdCB0aGUgcHJvZHVjdGlv
bnMgbGlzdCBpbnRvIHJ1bnMgb2YgcHJvZHVjdGlvbnMgd2l0aCBhbiBvcGNvZGUgYW5kIHByb2R1
Y3Rpb25zCisgICAgICAgICMgd2l0aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMgPSBbXQor
ICAgICAgICBwcm9kdWN0aW9ucy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgfCBwcm9k
dWN0aW9uLCBpbmRleCB8CisgICAgICAgICAgICBpZiBpbmRleExpc3RzWy0xXSBhbmQgcHJvZHVj
dGlvbnNbaW5kZXhMaXN0c1stMV1bMF1dLmhhc09wY29kZSA9PSBwcm9kdWN0aW9uLmhhc09wY29k
ZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHNbLTFdIDw8IGluZGV4CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0cyA8PCBbaW5kZXhdCisgICAgICAgICAgICBl
bmQKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgIyBOb3csIGVtaXQgcGF0dGVybiBtYXRj
aGluZyBjb2RlLiBXZSBkbyBpdCBkaWZmZXJlbnRseSBmb3IgbGlzdHMgd2l0aCBhbiBvcGNvZGUg
dGhhbiBmb3IKKyAgICAgICAgIyBsaXN0cyB3aXRob3V0IG9uZS4KKyAgICAgICAgaW5kZXhMaXN0
cy5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGlmIHByb2R1
Y3Rpb25zW2luZGV4TGlzdFswXV0uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgIyBOb3csIHdl
IHNwbGl0IHRoaXMgaW5kZXggbGlzdCBpbnRvIGdyb3VwcyBmb3IgZWFjaCBvcGNvZGUuCisgICAg
ICAgICAgICAgICAgZ3JvdXBzID0ge30KKyAgICAgICAgICAgICAgICBpbmRleExpc3QuZWFjaCB7
CisgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICBwcm9k
dWN0aW9uID0gcHJvZHVjdGlvbnNbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGlmIGdyb3Vw
c1twcm9kdWN0aW9uLm9wY29kZV0KKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9k
dWN0aW9uLm9wY29kZV0gPDwgaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA9IFtpbmRleF0KKyAg
ICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAg
ICAgIyBFbWl0IGEgc3dpdGNoIHN0YXRlbWVudC4KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
InN3aXRjaCAoI3t2YWx1ZU5hbWV9LT5vcGNvZGUoKSkgeyIKKyAgICAgICAgICAgICAgICBncm91
cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvcGNvZGUsIHN1YkluZGV4TGlz
dCB8CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZX06IgorICAg
ICAgICAgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhzdWJJbmRleExpc3QsIHBy
b2R1Y3Rpb25zKQorICAgICAgICAgICAgICAgICAgICBtYXRjaExlbmd0aChvdXRwLCB2YWx1ZU5h
bWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGlu
ZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRl
eExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7
IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25z
KQorICAgICAgICAgICAgICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gu
cHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAg
ICAgICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgZW5kCisKKyAg
ICAjIFRha2VzIHByb2R1Y3Rpb25zIHRoYXQgaGF2ZSB0aGUgc2FtZSBvcGNvZGUgYW5kIHRoZSBz
YW1lIGxlbmd0aCBhbmQgc2VsZWN0cyBmcm9tIHRoZW0gYmFzZWQgb24KKyAgICAjIHRoZSBwcm9k
dWN0aW9ucyBhdCB0aGUgZ2l2ZW4gY29sdW1uLgorICAgIGRlZiBtYXRjaENvbHVtbihvdXRwLCB2
YWx1ZU5hbWUsIHByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCkKKyAgICAgICAgaWYgY29sdW1uSW5k
ZXggPj0gcHJvZHVjdGlvbnNbMF0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICB5aWVsZCAo
MC4uLihwcm9kdWN0aW9ucy5zaXplKSkudG9fYQorICAgICAgICAgICAgcmV0dXJuCisgICAgICAg
IGVuZAorCisgICAgICAgIHN1YlZhbHVlID0gbmV3VmFyCisgICAgICAgIAorICAgICAgICBvdXRw
LnB1dHMgInsiCisgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7c3ViVmFsdWV9ID0gI3t2YWx1
ZU5hbWV9LT5jaGlsZCgje2NvbHVtbkluZGV4fSk7IgorCisgICAgICAgICMgV2UgbWF5IG5vdCB1
c2UgdGhpcyB2YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0Lgor
ICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3N1YlZhbHVlfSk7IgorICAgICAgICAK
KyAgICAgICAgc3ViUHJvZHVjdGlvbnMgPSBwcm9kdWN0aW9ucy5tYXAgeworICAgICAgICAgICAg
fCBwcm9kdWN0aW9uIHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uY2hpbGRyZW5bY29sdW1uSW5k
ZXhdCisgICAgICAgIH0KKworICAgICAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsIHN1YlZhbHVl
LCBzdWJQcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAg
ICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAg
ICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMs
IGNvbHVtbkluZGV4ICsgMSkgeworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAg
ICAgICAgICAgICB5aWVsZCBzdWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgIGVuZAorCisg
ICAgZGVmIG1hdGNoUmVjdXJzaXZlbHkob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAg
ICAgICAgbWF0Y2hQcm9kdWN0aW9ucyhvdXRwLCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKSB7Cisg
ICAgICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAjIFdlIGFyZSBndWFyYW50ZWVk
IHRoYXQgdGhpcyBpbmRleCBsaXN0IGNvbnRhaW5zIHByb2R1Y3Rpb25zIHdpdGggdGhlIHNhbWUg
b3Bjb2RlIGFuZAorICAgICAgICAgICAgIyB0aGUgc2FtZSBsZW5ndGguCisgICAgICAgICAgICBz
dWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhpbmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAg
ICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgMCkg
eworICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBz
dWJNYXRjaC5tYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgZW5kCisKKyAgICBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAsICJfdmFsdWUiLCBtYXRjaGVy
LnByb2R1Y3Rpb25zKSB7CisgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgaW5kZXhMaXN0
LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBwcm9kdWN0aW9uID0g
bWF0Y2hlci5wcm9kdWN0aW9uc1tpbmRleF0KKyAgICAgICAgICAgIG91dHAucHV0cyAieyIKKyAg
ICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7cHJvZHVjdGlvbi52YXJOYW1lfSA9IF92YWx1
ZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTSgje3Byb2R1Y3Rpb24udmFy
TmFtZX0pOyIKKyAgICAgICAgICAgIGludGVybmFsQXJndW1lbnRzID0gW10KKyAgICAgICAgICAg
IG9wZXJhbmRBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgdHJ5QXJndW1lbnRzID0gW10KKyAg
ICAgICAgICAgIG51bVNjb3BlcyA9IDAKKyAgICAgICAgICAgIHNlZW4gPSB7fQorCisgICAgICAg
ICAgICAjIEZJWE1FOiBXZSB3YW50IHRvIGJlIGFibGUgdG8gY29tYmluZSBwYXR0ZXJuIG1hdGNo
ZXJzLCBsaWtlIGhhdmUgdGhlIHBhdHRlcm4gbWF0Y2ggcnVsZQorICAgICAgICAgICAgIyBmb3Ig
QnJhbmNoIGluIHRoZSBsb3dlcmluZyBwYXRjaGVyIGRlbGVnYXRlIHRvIGEgbWF0Y2hlciB0aGF0
IGNhbiBkZWR1Y2UgdGhlIGtpbmQgb2YKKyAgICAgICAgICAgICMgY29tcGFyaXNvbiB0aGF0IHdl
J3JlIGRvaW5nLiBXZSBjb3VsZCB0aGVuIHJldXNlIHRoYXQgbGF0dGVyIG1hdGNoZXIgZm9yIENo
ZWNrIGFuZAorICAgICAgICAgICAgIyB1bmZ1c2VkIGNvbXBhcmUuIFRoZSBrZXkgdG8gbWFraW5n
IHN1Y2ggYSBkZWxlZ2F0aW9uIHdvcmsgaXMgdG8gaGF2ZSB0aGUgaW5uZXIgbWF0Y2hlcgorICAg
ICAgICAgICAgIyAodGhlIGNvbXBhcmlzb24gbWF0Y2hlciBpbiB0aGlzIGNhc2UpIGtlZXAgY2Fz
Y2FkaW5nIGlmIGl0IGVuY291bnRlcnMgYSBydWxlIHRoYXQKKyAgICAgICAgICAgICMgcHJvZHVj
ZXMgc29tZXRoaW5nIHRoYXQgdGhlIG91dGVyIG1hdGNoZXIgY2Fubm90IGhhbmRsZS4gSXQncyBu
b3Qgb2J2aW91cyB0aGF0IHRoZQorICAgICAgICAgICAgIyBjb21wYXJpc29uIG1hdGNoZXIgd291
bGQgbmVlZCB0aGlzLCBidXQgdGhlIGFkZHJlc3MgbWF0Y2hlciBwcm9iYWJseSB3aWxsLiBGb3Ig
ZXhhbXBsZSwKKyAgICAgICAgICAgICMgd2UgbWF5IGhhdmUgYSBTdG9yZUFkZExvYWQgcnVsZSB0
aGF0IGRlbGVnYXRlcyB0byB0aGUgYWRkcmVzcyBtYXRjaGVyLCBhbmQgdGhlIGFkZHJlc3MKKyAg
ICAgICAgICAgICMgbWF0Y2hlciBtYXkgcHJvZHVjZSBhbiBhZGRyZXNzIHRoYXQgdGhlIGxvd2Vy
aW5nIG1hdGNoZXIgY2Fubm90IHVzZSBiZWNhdXNlIHdoaWxlIHRoZQorICAgICAgICAgICAgIyBB
ZGQgZm9ybSBkb2VzIGFjY2VwdCBhZGRyZXNzZXMgaXQgbWF5IG5vdCBhY2NlcHQgdGhlIHBhcnRp
Y3VsYXIgYWRkcmVzcyB0aGF0IHRoZQorICAgICAgICAgICAgIyBhZGRyZXNzIG1hdGNoZXIgcHJv
ZHVjZWQuIEluIHRoYXQgY2FzZSwgaW5zdGVhZCBvZiBnaXZpbmcgdXAgb24gdGhlIFN0b3JlQWRk
TG9hZCBydWxlLAorICAgICAgICAgICAgIyB3ZSB3YW50IHRoZSBhZGRyZXNzIG1hdGNoZXIgdG8g
anVzdCB0cnkgYSBkaWZmZXJlbnQgYWRkcmVzcy4gVGhlIGNvbXBhcmlzb24gbWF0Y2hlcgorICAg
ICAgICAgICAgIyBtaWdodCB3YW50IHRoaXMganVzdCBmb3IgYmV0dGVyIGNvbnRyb2xsaW5nIHdo
ZW4gdG8gcGluIHZhcmlhYmxlcy4gQ3VycmVudGx5LCBpZiBpdAorICAgICAgICAgICAgIyBjb25z
dHJ1Y3RlZCBzb21lIGNvZGUsIGl0IHdvdWxkIGFsc28gcGluIHRoZSB2YXJpYWJsZXMgdGhhdCBp
dCB1c2VkLiBJZiB0aGUgbG93ZXJpbmcKKyAgICAgICAgICAgICMgbWF0Y2hlciB0aGVuIGRlY2lk
ZWQgdG8gcmVqZWN0IHRoZSBjb2RlIGNyZWF0ZWQgYnkgdGhlIGNvbXBhcmlzb24gbWF0Y2hlciwg
aXQgd291bGQKKyAgICAgICAgICAgICMgaGF2ZSBhIGhhcmQgdGltZSAidW5waW5uaW5nIiB0aG9z
ZSB2YXJpYWJsZXMuIEJ1dCBpZiB3ZSBoYWQgc29tZSBraW5kIG9mIGRlbGVnYXRpb24sIHdlCisg
ICAgICAgICAgICAjIGNvdWxkIGhhdmUgdGhlIHBpbm5pbmcgb2YgdGhlIGNvbXBhcmlzb24gbWF0
Y2hlciBoYXBwZW4gb25seSBpZiB0aGUgbG93ZXJpbmcgbWF0Y2hlcgorICAgICAgICAgICAgIyBh
Y2NlcHRlZC4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhpcyBjb3VsZCBhbGwgYmUg
YWNjb21wbGlzaGVkIGJ5IGhhdmluZyB0cnlCbGFoKCkgcmV0dXJuIHNvbWV0aGluZywgYW5kIGhh
dmUgdGhlCisgICAgICAgICAgICAjIG1hdGNoZXIgYWxzbyB0YWtlIGEgZnVuY3RvciBhcmd1bWVu
dCB0aGF0IGFjY2VwdHMgd2hhdCB0cnlCbGFoKCkgcmV0dXJucy4gU28gaW5zdGVhZCBvZgorICAg
ICAgICAgICAgIworICAgICAgICAgICAgIyBpZiAodHJ5QmxhaCgpKSBvazsKKyAgICAgICAgICAg
ICMKKyAgICAgICAgICAgICMgV2Ugd291bGQgaGF2ZToKKyAgICAgICAgICAgICMKKyAgICAgICAg
ICAgICMgaWYgKGZ1bmN0b3IodHJ5QmxhaCgpKSBvazsKKyAgICAgICAgICAgICMKKyAgICAgICAg
ICAgICMgV2hlbiBsb3dlcmluZyBkZWNpZGVkIHRvIGRlbGVnYXRlIHRvIHRoZSBhZGRyZXNzIG9y
IGNvbXBhcmlzb24gbWF0Y2hlciwgaXQgY291bGQgc3VwcGx5CisgICAgICAgICAgICAjIGEgZnVu
Y3RvciB0aGF0IGRlY2lkZXMgd2hldGhlciB0aGUgdGhpbmcgdGhhdCB0aGUgc3ViLW1hdGNoZXIg
c2VsZWN0ZWQgaXMgaW5kZWVkCisgICAgICAgICAgICAjIHVzZWZ1bC4KKyAgICAgICAgICAgICMK
KyAgICAgICAgICAgICMgSW4gdGhlIG5lYXIgdGVybSwgd2UgcHJvYmFibHkgd29uJ3QgbmVlZCB0
aGlzLiBCdXQgd2Ugd2lsbCBkZWZpbml0ZWx5IG5lZWQgaXQgYXMgd2UKKyAgICAgICAgICAgICMg
ZXhwYW5kIHRvIGVmZmljaWVudGx5IHN1cHBvcnQgbW9yZSBwbGF0Zm9ybXMuIE9uIFg4Nl82NCwg
YW55IGJyYW5jaGluZyBpbnN0cnVjdGlvbiBpcworICAgICAgICAgICAgIyB1c2FibGUgaW4gYW55
IGNvbnRleHQsIGFuZCBhbnkgYWRkcmVzcyBzaG91bGQgYmUgdXNhYmxlIGluIGFueSBjb250ZXh0
IChhbmQgdGhlIG9ubHkKKyAgICAgICAgICAgICMgY2FzZXMgd2hlcmUgaXQgd291bGRuJ3QgYmUg
aXMgaWYgd2UgaGF2ZSBob2xlcyBpbiB0aGUgTWFjcm9Bc3NlbWJsZXIpLgorICAgICAgICAgICAg
IworICAgICAgICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNTU5CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHByb2R1Y3Rpb24uZWFjaFZhcmlhYmxl
IHsKKyAgICAgICAgICAgICAgICB8IHBhcmVudFZhck5hbWUsIGNoaWxkTmFtZSwgY2hpbGRWYXJO
YW1lLCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgbG9hZEV4cHIgPSAiI3twYXJlbnRW
YXJOYW1lfS0+Y2hpbGQoI3tpbmRleH0pIgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIGlmIHNlZW5bY2hpbGRWYXJOYW1lXQorICAgICAgICAgICAgICAgICAgICB0bXAgPSBuZXdW
YXIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSogI3t0bXB9ID0gI3tsb2Fk
RXhwcn07IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICgje3RtcH0gPT0gI3tj
aGlsZFZhck5hbWV9KSB7IgorICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAg
ICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc2VlbltjaGlsZFZhck5hbWVd
ID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJWYWx1ZSogI3tjaGlsZFZhck5hbWV9ID0gI3tsb2FkRXhwcn07IgorCisgICAgICAgICAg
ICAgICAgICAgICMgRklYTUU6IENvbnNpZGVyIGdldHRpbmcgcmlkIG9mIHRoZSAkIHByZWZpeC4K
KyAgICAgICAgICAgICAgICAgICAgIyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwNTI3CisgICAgICAgICAgICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJC8K
KyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGNoaWxkTmFtZSA9fiAvXEFcJChbMC05XSspXFov
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3tjaGlsZFZhck5h
bWV9LT5pc0ludCgjeyQxfSkpIHsiCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3tjaGlsZFZhck5hbWV9LT5o
YXNJbnQoKSkgeyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBpbnRlcm5hbEFyZ3VtZW50cyA8PCBj
aGlsZFZhck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6YW5vbkludGVybmFs
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhbmRBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlm
IGtpbmQgPT0gOm9wZXJhbmQgb3Iga2luZCA9PSA6YW5vbk9wZXJhbmQKKyAgICAgICAgICAgICAg
ICAgICAgdHJ5QXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRlcm5hbCBv
ciBraW5kID09IDpvcGVyYW5kCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhZGFwdG9yLmFjY2VwdFJvb3QoX3ZhbHVlKSIKKyAg
ICAgICAgICAgIHVubGVzcyBpbnRlcm5hbEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IuYWNjZXB0SW50ZXJuYWxzKCIgKyBpbnRlcm5hbEFyZ3Vt
ZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB1bmxl
c3Mgb3BlcmFuZEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMoIiYm
IGFkYXB0b3IuYWNjZXB0T3BlcmFuZHMoIiArIG9wZXJhbmRBcmd1bWVudHMuam9pbigiLCAiKSAr
ICIpIikKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9y
LnRyeSN7cHJvZHVjdGlvbi5uYW1lfSgiICsgdHJ5QXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSkg
eyIpCisgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0Um9vdExhdGUoX3ZhbHVl
KTsiCisgICAgICAgICAgICB1bmxlc3MgaW50ZXJuYWxBcmd1bWVudHMuZW1wdHk/CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdEludGVybmFsc0xhdGUoIiArIGludGVy
bmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiYWRhcHRvci5hY2NlcHRPcGVyYW5kc0xhdGUoIiArIG9wZXJhbmRBcmd1bWVudHMuam9p
bigiLCAiKSArICIpOyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wdXRzICJy
ZXR1cm4gdHJ1ZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBudW1T
Y29wZXMudGltZXMgeworICAgICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAg
ICBvdXRwLnB1dHMgIiAgICByZXR1cm4gZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKyAgICAK
KyAgICBvdXRwLnB1dHMgIn0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMyIKKworICAgIG91dHAucHV0
cyAiI2VuZGlmIC8vIEIzI3ttYXRjaGVyLm5hbWV9X2giCit9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvdGVzdGIzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvdGVzdGIzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9j
a0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29u
c3RQdHJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgiCisjaW5jbHVkZSAiQjNH
ZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKyNpbmNsdWRlICJCM1Byb2Nl
ZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxw
ZXJzLmgiCisjaW5jbHVkZSAiSW5pdGlhbGl6ZVRocmVhZGluZy5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisjaW5jbHVkZSAiVk0uaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKKworbmFtZXNwYWNlIHsKKworLy8gTm90aGluZyBmYW5jeSBmb3Igbm93OyB3ZSBq
dXN0IHVzZSB0aGUgZXhpc3RpbmcgV1RGIGFzc2VydGlvbiBtYWNoaW5lcnkuCisjZGVmaW5lIENI
RUNLKHgpIFJFTEVBU0VfQVNTRVJUKHgpCisKK1ZNKiB2bTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVCBjb21waWxlQW5kUnVuKFByb2NlZHVyZSYgcHJv
Y2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIENDYWxsSGVscGVycyBqaXQo
dm0pOworICAgIGdlbmVyYXRlKHByb2NlZHVyZSwgaml0KTsKKyAgICBMaW5rQnVmZmVyIGxpbmtC
dWZmZXIoKnZtLCBqaXQsIG51bGxwdHIpOworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBjb2Rl
ID0gRklOQUxJWkVfQ09ERShsaW5rQnVmZmVyLCAoInRlc3RiMyIpKTsKKyAgICBUICgqZnVuY3Rp
b24pKEFyZ3VtZW50cy4uLikgPSBiaXR3aXNlX2Nhc3Q8VCgqKShBcmd1bWVudHMuLi4pPihjb2Rl
LmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYXJndW1l
bnRzLi4uKTsKK30KKwordm9pZCB0ZXN0NDIoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgVmFsdWUqIGNvbnN0NDIg
PSByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgNDIpOworICAg
IHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KHByb2MsIFJldHVybiwgT3JpZ2luKCksIGNv
bnN0NDIpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpID09IDQyKTsKK30K
Kwordm9pZCB0ZXN0TG9hZDQyKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludCB4ID0gNDI7CisgICAgcm9vdC0+
YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCks
CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksICZ4KSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFu
ZFJ1bjxpbnQ+KHByb2MpID09IDQyKTsKK30KKwordm9pZCB0ZXN0QXJnKGludCBhcmd1bWVudCkK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9j
LCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpOworCisgICAgQ0hF
Q0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGFyZ3VtZW50KSA9PSBhcmd1bWVudCk7Cit9CisK
K3ZvaWQgdGVzdEFkZEFyZ3MoaW50IGEsIGludCBiKQoreworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdp
bigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApLAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVu
dEdQUjEpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikgPT0g
YSArIGIpOworfQorCit2b2lkIHRlc3RBZGRBcmdzMzIoaW50IGEsIGludCBiKQoreworICAgIFBy
b2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwg
T3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBw
cm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIxKSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBh
LCBiKSA9PSBhICsgYik7Cit9CisKK3ZvaWQgdGVzdFN0b3JlKGludCB2YWx1ZSkKK3sKKyAgICBQ
cm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOwor
ICAgIGludCBzbG90ID0gMHhiYWFkYmVlZjsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFs
dWU+KAorICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQ
UkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksICZzbG90KSk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRy
b2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksIHJvb3QtPmFwcGVuZE5l
dzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisKKyAgICBDSEVDSyghY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MsIHZhbHVlKSk7CisgICAgQ0hFQ0soc2xvdCA9PSB2YWx1ZSk7Cit9
CisKK3ZvaWQgdGVzdFRydW5jKGludDY0X3QgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7
CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSkpOworCisgICAgQ0hFQ0soY29t
cGlsZUFuZFJ1bjxpbnQ+KHByb2MsIHZhbHVlKSA9PSBzdGF0aWNfY2FzdDxpbnQ+KHZhbHVlKSk7
Cit9CisKK3ZvaWQgdGVzdEFkZDEoaW50IHZhbHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOwor
ICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdp
bigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAg
ICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjAp
KSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAxKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIHZhbHVlKSA9
PSB2YWx1ZSArIDEpOworfQorCit2b2lkIHRlc3RTdG9yZUFkZExvYWQoaW50IGFtb3VudCkKK3sK
KyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9j
aygpOworICAgIGludCBzbG90ID0gMzc7CisgICAgQ29uc3RQdHJWYWx1ZSogc2xvdFB0ciA9IHJv
b3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnNsb3QpOworICAg
IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIFN0b3JlLCBPcmln
aW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2Ms
IEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwgc2xvdFB0ciksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KSksCisgICAg
ICAgIHNsb3RQdHIpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3Qz
MlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48
aW50Pihwcm9jKSk7CisgICAgQ0hFQ0soc2xvdCA9PSAzNyArIGFtb3VudCk7Cit9CisKK3ZvaWQg
dGVzdFN0b3JlQWRkQW5kTG9hZChpbnQgYW1vdW50LCBpbnQgbWFzaykKK3sKKyAgICBQcm9jZWR1
cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGlu
dCBzbG90ID0gMzc7CisgICAgQ29uc3RQdHJWYWx1ZSogc2xvdFB0ciA9IHJvb3QtPmFwcGVuZE5l
dzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnNsb3QpOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIFN0b3JlLCBPcmlnaW4oKSwKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEJpdEFuZCwgT3Jp
Z2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAg
ICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIHNsb3RQdHIpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBhbW91bnQpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBtYXNrKSksCisgICAgICAgIHNsb3RQdHIpOworICAgIHJvb3QtPmFwcGVu
ZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAg
ICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpOwor
CisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSk7CisgICAgQ0hFQ0soc2xvdCA9
PSAoKDM3ICsgYW1vdW50KSAmIG1hc2spKTsKK30KKwordm9pZCB0ZXN0QWRkMVVuY29tbXV0ZWQo
aW50IHZhbHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3Qg
PSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSkpOworCisgICAgQ0hF
Q0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIHZhbHVlKSA9PSB2YWx1ZSArIDEpOworfQorCit2
b2lkIHRlc3RMb2FkT2Zmc2V0KCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Js
b2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludCBhcnJheVtdID0geyAxLCAyIH07
CisgICAgQ29uc3RQdHJWYWx1ZSogYXJyYXlQdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIGFycmF5KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJv
bFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBP
cmlnaW4oKSwgYXJyYXlQdHIsIDApLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIGFycmF5UHRyLCBzaXplb2YoaW50
KSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSBhcnJheVswXSAr
IGFycmF5WzFdKTsKK30KKwordm9pZCB0ZXN0TG9hZE9mZnNldE5vdENvbnN0YW50KCkKK3sKKyAg
ICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OworICAgIGludCBhcnJheVtdID0geyAxLCAyIH07CisgICAgVmFsdWUqIGFycmF5UHRyID0gcm9v
dC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjph
cmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBhcnJheVB0
ciwgMCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExv
YWQsIEludDMyLCBPcmlnaW4oKSwgYXJyYXlQdHIsIHNpemVvZihpbnQpKSkpOworCisgICAgQ0hF
Q0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsICZhcnJheVswXSkgPT0gYXJyYXlbMF0gKyBhcnJh
eVsxXSk7Cit9CisKK3ZvaWQgdGVzdExvYWRPZmZzZXRVc2luZ0FkZCgpCit7CisgICAgUHJvY2Vk
dXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBp
bnQgYXJyYXlbXSA9IHsgMSwgMiB9OworICAgIENvbnN0UHRyVmFsdWUqIGFycmF5UHRyID0gcm9v
dC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhcnJheSk7CisgICAg
cm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3Jp
Z2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9j
LCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJv
YywgQWRkLCBPcmlnaW4oKSwgYXJyYXlQdHIsCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMCkpKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgTG9h
ZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksIGFycmF5UHRyLAor
ICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIHNpemVvZihpbnQpKSkpKSk7CisgICAgCisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1
bjxpbnQ+KHByb2MpID09IGFycmF5WzBdICsgYXJyYXlbMV0pOworfQorCit2b2lkIHRlc3RMb2Fk
T2Zmc2V0VXNpbmdBZGROb3RDb25zdGFudCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgYXJyYXlbXSA9IHsg
MSwgMiB9OworICAgIFZhbHVlKiBhcnJheVB0ciA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJl
Z1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFk
ZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBB
ZGQsIE9yaWdpbigpLCBhcnJheVB0ciwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSkpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBMb2FkLCBJ
bnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwgYXJyYXlQdHIsCisgICAg
ICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgc2l6ZW9mKGludCkpKSkpKTsKKyAgICAKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGlu
dD4ocHJvYywgJmFycmF5WzBdKSA9PSBhcnJheVswXSArIGFycmF5WzFdKTsKK30KKworI2RlZmlu
ZSBSVU4odGVzdCkgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRh
TG9nKCN0ZXN0ICI6XG4iKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB0ZXN0OyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBkYXRhTG9nKCIgICAgT0sh
XG4iKTsgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKGZhbHNlKTsKKwordm9pZCBy
dW4oKQoreworICAgIEpTQzo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIHZtID0gJlZNOjpj
cmVhdGUoTGFyZ2VIZWFwKS5sZWFrUmVmKCk7CisKKyAgICBSVU4odGVzdDQyKCkpOworICAgIFJV
Tih0ZXN0TG9hZDQyKCkpOworICAgIFJVTih0ZXN0QXJnKDQzKSk7CisgICAgUlVOKHRlc3RBZGRB
cmdzKDEsIDEpKTsKKyAgICBSVU4odGVzdEFkZEFyZ3MoMSwgMikpOworICAgIFJVTih0ZXN0QWRk
QXJnczMyKDEsIDEpKTsKKyAgICBSVU4odGVzdEFkZEFyZ3MzMigxLCAyKSk7CisgICAgUlVOKHRl
c3RTdG9yZSg0NCkpOworICAgIFJVTih0ZXN0VHJ1bmMoKHN0YXRpY19jYXN0PGludDY0X3Q+KDEp
IDw8IDQwKSArIDQyKSk7CisgICAgUlVOKHRlc3RBZGQxKDQ1KSk7CisgICAgUlVOKHRlc3RTdG9y
ZUFkZExvYWQoNDYpKTsKKyAgICBSVU4odGVzdFN0b3JlQWRkQW5kTG9hZCg0NywgMHhmZmZmKSk7
CisgICAgUlVOKHRlc3RTdG9yZUFkZEFuZExvYWQoNDcwMDAwLCAweGZmZmYpKTsKKyAgICBSVU4o
dGVzdEFkZDFVbmNvbW11dGVkKDQ4KSk7CisgICAgUlVOKHRlc3RMb2FkT2Zmc2V0KCkpOworICAg
IFJVTih0ZXN0TG9hZE9mZnNldE5vdENvbnN0YW50KCkpOworICAgIFJVTih0ZXN0TG9hZE9mZnNl
dFVzaW5nQWRkKCkpOworICAgIFJVTih0ZXN0TG9hZE9mZnNldFVzaW5nQWRkTm90Q29uc3RhbnQo
KSk7Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCisjZWxzZSAvLyBFTkFCTEUoQjNf
SklUKQorCitzdGF0aWMgdm9pZCBydW4oKQoreworICAgIGRhdGFMb2coIkIzIEpJVCBpcyBub3Qg
ZW5hYmxlZC5cbiIpOworfQorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworaW50IG1haW4o
aW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIFVOVVNFRF9QQVJBTShhcmdjKTsKKyAgICBV
TlVTRURfUEFSQU0oYXJndik7CisgICAgCisgICAgcnVuKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0
YWNrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckFsbG9jYXRlU3RhY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNp
bmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNpbmNs
dWRlICJTdGFja0FsaWdubWVudC5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7
CisKK2NvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOworCitib29sIGFyZ3VtZW50SXNPblN0YWNr
KGNvbnN0IEFyZyYgYXJnKQoreworICAgIHJldHVybiBhcmcuaXNTdGFjaygpICYmIGFyZy5zdGFj
a1Nsb3QoKS0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91czsKK30KKworYm9vbCBh
dHRlbXB0QXNzaWdubWVudCgKKyAgICBTdGFja1Nsb3QqIHNsb3QsIGludHB0cl90IG9mZnNldEZy
b21GUCwgY29uc3QgVmVjdG9yPFN0YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJBdHRlbXB0aW5nIHRvIGFzc2lnbiAiLCBwb2ludGVy
RHVtcChzbG90KSwgIiB0byAiLCBvZmZzZXRGcm9tRlAsICIgd2l0aCBpbnRlcmZlcmVuY2UgIiwg
cG9pbnRlckxpc3REdW1wKG90aGVyU2xvdHMpLCAiXG4iKTsKKworICAgIC8vIE5lZWQgdG8gYWxp
Z24gaXQgdG8gdGhlIHNsb3QncyBkZXNpcmVkIGFsaWdubWVudC4KKyAgICBvZmZzZXRGcm9tRlAg
PSAtV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHNsb3QtPmFsaWdubWVudCgpLCAtb2Zmc2V0RnJv
bUZQKTsKKyAgICAKKyAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTbG90cykg
eworICAgICAgICBpZiAoIW90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgYm9vbCBvdmVybGFwID0gV1RGOjpyYW5nZXNPdmVybGFwKAorICAg
ICAgICAgICAgb2Zmc2V0RnJvbUZQLAorICAgICAgICAgICAgb2Zmc2V0RnJvbUZQICsgc3RhdGlj
X2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVTaXplKCkpLAorICAgICAgICAgICAgb3RoZXJTbG90
LT5vZmZzZXRGcm9tRlAoKSwKKyAgICAgICAgICAgIG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCkg
KyBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ob3RoZXJTbG90LT5ieXRlU2l6ZSgpKSk7CisgICAgICAg
IGlmIChvdmVybGFwKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlm
ICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCJBc3NpZ25lZCAiLCBwb2ludGVyRHVtcChzbG90
KSwgIiB0byAiLCBvZmZzZXRGcm9tRlAsICJcbiIpOworICAgIHNsb3QtPnNldE9mZnNldEZyb21G
UChvZmZzZXRGcm9tRlApOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIGFzc2lnbihTdGFj
a1Nsb3QqIHNsb3QsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3QqPiYgb3RoZXJTbG90cykKK3sKKyAg
ICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiQXR0ZW1wdGluZyB0byBhc3NpZ24gIiwg
cG9pbnRlckR1bXAoc2xvdCksICIgd2l0aCBpbnRlcmZlcmVuY2UgIiwgcG9pbnRlckxpc3REdW1w
KG90aGVyU2xvdHMpLCAiXG4iKTsKKyAgICAKKyAgICBpZiAoYXR0ZW1wdEFzc2lnbm1lbnQoc2xv
dCwgLXN0YXRpY19jYXN0PGludHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwgb3RoZXJTbG90cykp
CisgICAgICAgIHJldHVybjsKKworICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBvdGhl
clNsb3RzKSB7CisgICAgICAgIGlmICghb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29sIGRpZEFzc2lnbiA9IGF0dGVtcHRBc3NpZ25t
ZW50KAorICAgICAgICAgICAgc2xvdCwgb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSAtIHN0YXRp
Y19jYXN0PGludHB0cl90PihzbG90LT5ieXRlU2l6ZSgpKSwgb3RoZXJTbG90cyk7CisgICAgICAg
IGlmIChkaWRBc3NpZ24pCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisK
K3ZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VT
Y29wZShjb2RlLCAiYWxsb2NhdGVTdGFjayIpOworCisgICAgLy8gQWxsb2NhdGUgYWxsIG9mIHRo
ZSBsb2NrZWQgc2xvdHMgaW4gb3JkZXIuIFRoaXMgaXMga2luZCBvZiBhIGNyYXp5IGFsZ29yaXRo
bSB0byBhbGxvdyBmb3IKKyAgICAvLyB0aGUgcG9zc2liaWxpdHkgb2Ygc3RhY2sgc2xvdHMgYmVp
bmcgYXNzaWduZWQgZnJhbWUgb2Zmc2V0cyBiZWZvcmUgd2UgZXZlbiBnZXQgaGVyZS4KKyAgICBB
U1NFUlQoIWNvZGUuZnJhbWVTaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25l
ZExvY2tlZFN0YWNrU2xvdHM7CisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGxvY2tlZFN0YWNrU2xv
dHNXb3JrbGlzdDsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygp
KSB7CisgICAgICAgIHN3aXRjaCAoc2xvdC0+a2luZCgpKSB7CisgICAgICAgIGNhc2UgU3RhY2tT
bG90S2luZDo6TG9ja2VkOgorICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQor
ICAgICAgICAgICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0
LmFwcGVuZChzbG90KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFN0YWNrU2xv
dEtpbmQ6OkFub255bW91czoKKyAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkg
eworICAgICAgICAgICAgICAgIC8vIEFzIGEgbWF0dGVyIG9mIHNhbml0eSwgdW5hc3NpZ24gdGhp
cy4gTWF5YmUgaXQgd291bGQgYmUgZ29vZCB0byBldmVuIGhhdmUgYQorICAgICAgICAgICAgICAg
IC8vIHZhbGlkYXRpb24gcnVsZSB0aGF0IHRoaXMgY2Fubm90IGhhcHBlbi4KKyAgICAgICAgICAg
ICAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAoMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICAvLyBUaGlzIGlzIGEgZmFpcmx5IGV4cGVu
c2l2ZSBsb29wLCBidXQgaXQncyBPSyBiZWNhdXNlIHdlJ2xsIHVzdWFsbHkgb25seSBoYXZlIGEg
aGFuZGZ1bCBvZgorICAgIC8vIGxvY2tlZCBzdGFjayBzbG90cy4KKyAgICB3aGlsZSAoIWxvY2tl
ZFN0YWNrU2xvdHNXb3JrbGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RhY2tTbG90KiBzbG90
ID0gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LnRha2VMYXN0KCk7CisgICAgICAgIGFzc2lnbihz
bG90LCBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMpOworICAgICAgICBhc3NpZ25lZExvY2tlZFN0
YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgIH0KKworICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhl
IGFub255bW91cyBzbG90cy4gTm90ZSB0aGF0IHRoZW9yZXRpY2FsbHkgd2Ugc2hvdWxkIGRvIGFu
IGVzY2FwZSBhbmFseXNpcworICAgIC8vIGhlcmUuIEJ1dCwgY3VycmVudGx5IEFpciBkb2Vzbid0
IHN1cHBvcnQgZXNjYXBpbmcgYSBTdGFja1Nsb3QhCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBlc2NhcGluZyBhIFN0YWNrU2xvdCBhbmQgYWRkIGVzY2FwZSBhbmFseXNpcyB0byBhbGxv
Y2F0ZVN0YWNrKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDQzMAorCisgICAgTGl2ZW5lc3M8QXJnPiBsaXZlbmVzcyhjb2RlKTsKKyAgICBJbmRl
eE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5jZShjb2RlLnN0
YWNrU2xvdHMoKS5zaXplKCkpOworICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzbG90czsKKworICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIExpdmVuZXNzPEFyZz46
OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5lc3MsIGJsb2NrKTsKKworICAgICAgICBhdXRvIGlu
dGVyZmVyZSA9IFsmXSAoSW5zdCYgaW5zdCkgeworICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisg
ICAgICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJpbmc6ICIsIGxpc3REdW1wKGxvY2FsQ2Fs
Yy5saXZlKCkpLCAiXG4iKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRm9ybSBhIGNs
aXF1ZSBvZiBzdGFjayBzbG90cyB0aGF0IGludGVyZmVyZS4gRmlyc3QgZmluZCB0aGUgbGlzdCBv
ZiBzdGFjayBzbG90cworICAgICAgICAgICAgLy8gdGhhdCBhcmUgbGl2ZSByaWdodCBub3cuCisg
ICAgICAgICAgICBzbG90cy5yZXNpemUoMCk7CisgICAgICAgICAgICBmb3IgKEFyZyBhcmcgOiBs
b2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZ3VtZW50SXNPblN0YWNr
KGFyZykpCisgICAgICAgICAgICAgICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tTbG90KCkp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBXZSBtdXN0bid0IG1hbmRhdGUgdGhh
dCB0aGUgaW5wdXQgY29kZSBpcyBvcHRpbWFsLiBUaGVyZWZvcmUsIGl0IG1heSBoYXZlIGRlYWQg
c3RvcmVzCisgICAgICAgICAgICAvLyB0byB0aGUgc3RhY2suIFdlIG5lZWQgdG8gdHJlYXQgdGhl
c2UgYXMgaW50ZXJmZXJpbmcuCisgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAg
ICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSAmJiBhcmd1bWVudElzT25TdGFj
ayhhcmcpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbG9jYWxDYWxjLmxpdmUoKS5jb250
YWlucyhhcmcpKQorICAgICAgICAgICAgICAgICAgICAgICAgc2xvdHMuYXBwZW5kKGFyZy5zdGFj
a1Nsb3QoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIiAgICBTbG90czogIiwgcG9p
bnRlckxpc3REdW1wKHNsb3RzKSwgIlxuIik7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2xvdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja1Nsb3Qq
IG91dGVyID0gc2xvdHNbaV07CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gaSAr
IDE7IGogPCBzbG90cy5zaXplKCk7ICsraikgeworICAgICAgICAgICAgICAgICAgICBTdGFja1Ns
b3QqIGlubmVyID0gc2xvdHNbal07CisKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmZXJlbmNl
W2lubmVyXS5hZGQob3V0ZXIpOworICAgICAgICAgICAgICAgICAgICBpbnRlcmZlcmVuY2Vbb3V0
ZXJdLmFkZChpbm5lcik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsg
aW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCJBbmFseXppbmc6ICIsIGJsb2NrLT5hdChpbnN0SW5kZXgpLCAiXG4iKTsKKyAg
ICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAg
IGludGVyZmVyZShpbnN0KTsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3QpOwor
ICAgICAgICB9CisgICAgICAgIEluc3Qgbm9wOworICAgICAgICBpbnRlcmZlcmUobm9wKTsKKyAg
ICB9CisKKyAgICBpZiAodmVyYm9zZSkgeworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6
IGNvZGUuc3RhY2tTbG90cygpKQorICAgICAgICAgICAgZGF0YUxvZygiSW50ZXJmZXJlbmNlIG9m
ICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiOiAiLCBwb2ludGVyTGlzdER1bXAoaW50ZXJmZXJlbmNl
W3Nsb3RdKSwgIlxuIik7CisgICAgfQorCisgICAgLy8gTm93IHdlIGFzc2lnbiBzdGFjayBsb2Nh
dGlvbnMuIEF0IGl0cyBoZWFydCB0aGlzIGFsZ29yaXRobSBpcyBqdXN0IGZpcnN0LWZpdC4gRm9y
IGVhY2gKKyAgICAvLyBTdGFja1Nsb3Qgd2UganVzdCB3YW50IHRvIGZpbmQgdGhlIG9mZnNldEZy
b21GUCB0aGF0IGlzIGNsb3Nlc3QgdG8gemVybyB3aGlsZSBlbnN1cmluZyBubworICAgIC8vIG92
ZXJsYXAgd2l0aCBvdGhlciBTdGFja1Nsb3RzIHRoYXQgdGhpcyBvdmVybGFwcyB3aXRoLgorICAg
IFZlY3RvcjxTdGFja1Nsb3QqPiBvdGhlclNsb3RzID0gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3Rz
OworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAg
ICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAvLyBBbHJlYWR5IGFz
c2lnbmVkIGFuIG9mZnNldC4KKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAg
ICAgICAgSGFzaFNldDxTdGFja1Nsb3QqPiYgaW50ZXJmZXJpbmdTbG90cyA9IGludGVyZmVyZW5j
ZVtzbG90XTsKKyAgICAgICAgb3RoZXJTbG90cy5yZXNpemUoYXNzaWduZWRMb2NrZWRTdGFja1Ns
b3RzLnNpemUoKSk7CisgICAgICAgIG90aGVyU2xvdHMucmVzaXplKGFzc2lnbmVkTG9ja2VkU3Rh
Y2tTbG90cy5zaXplKCkgKyBpbnRlcmZlcmluZ1Nsb3RzLnNpemUoKSk7CisgICAgICAgIHVuc2ln
bmVkIG5leHRJbmRleCA9IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCk7CisgICAgICAg
IGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBpbnRlcmZlcmluZ1Nsb3RzKQorICAgICAgICAg
ICAgb3RoZXJTbG90c1tuZXh0SW5kZXgrK10gPSBvdGhlclNsb3Q7CisKKyAgICAgICAgYXNzaWdu
KHNsb3QsIG90aGVyU2xvdHMpOworICAgIH0KKworICAgIC8vIEZpZ3VyZSBvdXQgaG93IG11Y2gg
c3RhY2sgd2UncmUgdXNpbmcgZm9yIHN0YWNrIHNsb3RzLgorICAgIHVuc2lnbmVkIGZyYW1lU2l6
ZUZvclN0YWNrU2xvdHMgPSAwOworICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFj
a1Nsb3RzKCkpIHsKKyAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IHN0ZDo6bWF4KAor
ICAgICAgICAgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cywKKyAgICAgICAgICAgIHN0YXRpY19j
YXN0PHVuc2lnbmVkPigtc2xvdC0+b2Zmc2V0RnJvbUZQKCkpKTsKKyAgICB9CisKKyAgICBmcmFt
ZVNpemVGb3JTdGFja1Nsb3RzID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25t
ZW50Qnl0ZXMoKSwgZnJhbWVTaXplRm9yU3RhY2tTbG90cyk7CisKKyAgICAvLyBOb3cgd2UgbmVl
ZCB0byBkZWR1Y2UgaG93IG11Y2ggYXJndW1lbnQgYXJlYSB3ZSBuZWVkLgorICAgIGZvciAoQmFz
aWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9j
aykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykgeworICAgICAgICAg
ICAgICAgIGlmIChhcmcuaXNDYWxsQXJnKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRm9y
IG5vdywgd2UgYXNzdW1lIHRoYXQgd2UgdXNlIDggYnl0ZXMgb2YgdGhlIGNhbGwgYXJnLiBCdXQg
dGhhdCdzIG5vdAorICAgICAgICAgICAgICAgICAgICAvLyBzdWNoIGFuIGF3ZXNvbWUgYXNzdW1w
dGlvbi4KKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTQKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGFy
Zy5vZmZzZXQoKSA+PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgY29kZS5yZXF1ZXN0Q2FsbEFy
Z0FyZWFTaXplKGFyZy5vZmZzZXQoKSArIDgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGNvZGUuc2V0RnJhbWVTaXplKGZyYW1lU2l6
ZUZvclN0YWNrU2xvdHMgKyBjb2RlLmNhbGxBcmdBcmVhU2l6ZSgpKTsKKworICAgIC8vIEZpbmFs
bHksIHRyYW5zZm9ybSB0aGUgY29kZSB0byB1c2UgQWRkcidzIGluc3RlYWQgb2YgU3RhY2tTbG90
J3MuIFRoaXMgaXMgYSBsb3NzbGVzcworICAgIC8vIHRyYW5zZm9ybWF0aW9uIHNpbmNlIHdlIGNh
biBzZWFyY2ggdGhlIFN0YWNrU2xvdHMgYXJyYXkgdG8gZmlndXJlIG91dCB3aGljaCBTdGFja1Ns
b3QgYW55CisgICAgLy8gb2Zmc2V0LWZyb20tRlAgcmVmZXJzIHRvLgorCisgICAgZm9yIChCYXNp
Y0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2Nr
KSB7CisgICAgICAgICAgICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAg
ICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0
YWNrOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCisgICAgICAgICAgICAg
ICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgYXJnLm9mZnNldCgpICsgYXJnLnN0YWNrU2xvdCgpLT5vZmZzZXRGcm9tRlAo
KSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgQXJn
OjpDYWxsQXJnOgorICAgICAgICAgICAgICAgICAgICBhcmcgPSBBcmc6OmFkZHIoCisgICAgICAg
ICAgICAgICAgICAgICAgICBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2lmbmRlZiBBaXJBbGxvY2F0ZVN0YWNrX2gKKyNkZWZpbmUgQWlyQWxsb2NhdGVTdGFj
a19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgYWxsb2NhdGVzIFN0
YWNrU2xvdHMgdG8gcGxhY2VzIG9uIHRoZSBzdGFjay4gSXQgZmlyc3QgYWxsb2NhdGVzIHRoZSBw
aW5uZWQgb25lcyBpbiBpbmRleAorLy8gb3JkZXIgYW5kIHRoZW4gaXQgYWxsb2NhdGVzIHRoZSBy
ZXN0IHVzaW5nIGZpcnN0IGZpdC4KKwordm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmKTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpckFsbG9jYXRlU3RhY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFyZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBcmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkFpckFyZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEFyZzo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAg
Y2FzZSBJbnZhbGlkOgorICAgICAgICBvdXQucHJpbnQoIjxpbnZhbGlkPiIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBUbXA6CisgICAgICAgIG91dC5wcmludCh0bXAoKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEltbToKKyAgICAgICAgb3V0LnByaW50KCIkIiwgbV9vZmZzZXQp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW02NDoKKyAgICAgICAgb3V0LnByaW50Zigi
JDB4JWxseCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkcjoKKyAg
ICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50KG9mZnNldCgpKTsKKyAg
ICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBJbmRleDoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50
KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgYmFzZSgpLCAiLCIsIGluZGV4KCkp
OworICAgICAgICBpZiAoc2NhbGUoKSAhPSAxKQorICAgICAgICAgICAgb3V0LnByaW50KCIsIiwg
c2NhbGUoKSk7CisgICAgICAgIG91dC5wcmludCgiKSIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBTdGFjazoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0LnByaW50
KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoIiwgcG9pbnRlckR1bXAoc3RhY2tTbG90
KCkpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICBp
ZiAob2Zmc2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBv
dXQucHJpbnQoIihjYWxsQXJnKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBSZWxDb25k
OgorICAgICAgICBvdXQucHJpbnQoYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBvdXQucHJpbnQoYXNSZXN1bHRDb25k
aXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIG91
dC5wcmludChwb2ludGVyRHVtcChzcGVjaWFsKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQWlyQXJnX2gKKyNkZWZpbmUgQWlyQXJnX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJUbXAuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzVHlw
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIFNwZWNpYWw7CitjbGFzcyBTdGFja1Nsb3Q7CisKKy8vIFRoaXMgY2xhc3MgbmFtZSBp
cyBhbHNvIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSB3aWxsIHNheSBpdCBhIGxvdC4g
WW91J2xsIHNlZSBjb2RlIGxpa2UKKy8vIEluc3QoLi4uLCBBcmc6OmltbSg1KSwgQXJnOjphZGRy
KHRoaW5nLCBibGFoKSwgLi4uKQorY2xhc3MgQXJnIHsKK3B1YmxpYzoKKyAgICAvLyBUaGVzZSBl
bnVtIG1lbWJlcnMgYXJlIGludGVudGlvbmFsbHkgdGVyc2UgYmVjYXVzZSB3ZSBoYXZlIHRvIG1l
bnRpb24gdGhlbSBhIGxvdC4KKyAgICBlbnVtIEtpbmQgOiBpbnQ4X3QgeworICAgICAgICBJbnZh
bGlkLAorICAgICAgICBUbXAsCisgICAgICAgIEltbSwKKyAgICAgICAgSW1tNjQsCisgICAgICAg
IEFkZHIsCisgICAgICAgIFN0YWNrLAorICAgICAgICBDYWxsQXJnLAorICAgICAgICBJbmRleCwK
KyAgICAgICAgUmVsQ29uZCwKKyAgICAgICAgUmVzQ29uZCwKKyAgICAgICAgU3BlY2lhbAorICAg
IH07CisKKyAgICBlbnVtIFJvbGUgOiBpbnQ4X3QgeworICAgICAgICBVc2UsCisgICAgICAgIERl
ZiwKKyAgICAgICAgVXNlRGVmCisgICAgfTsKKworICAgIGVudW0gVHlwZSA6IGludDhfdCB7Cisg
ICAgICAgIEdQLAorICAgICAgICBGUAorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgbnVtVHlwZXMgPSAyOworCisgICAgc3RhdGljIGJvb2wgaXNVc2UoUm9sZSByb2xlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICBj
YXNlIFVzZURlZjoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIERlZjoK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRp
YyBib29sIGlzRGVmKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgewor
ICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2Fz
ZSBEZWY6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgVHlwZSB0eXBlRm9yQjNUeXBlKEIzOjpUeXBl
IHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBWb2lk
OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICByZXR1cm4g
R1A7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAg
ICByZXR1cm4gR1A7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAgICAgICAgcmV0dXJuIEZQ
OworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1
cm4gR1A7CisgICAgfQorCisgICAgQXJnKCkKKyAgICAgICAgOiBtX2tpbmQoSW52YWxpZCkKKyAg
ICB7CisgICAgfQorCisgICAgQXJnKEFpcjo6VG1wIHRtcCkKKyAgICAgICAgOiBtX2tpbmQoVG1w
KQorICAgICAgICAsIG1fYmFzZSh0bXApCisgICAgeworICAgIH0KKworICAgIHN0YXRpYyBBcmcg
aW1tKGludDMyX3QgdmFsdWUpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICBy
ZXN1bHQubV9raW5kID0gSW1tOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbTY0KGludHB0
cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IEltbTY0OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSB2YWx1ZTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGFkZHIoQWlyOjpUbXAgYmFz
ZSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNHUCgp
KTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEFkZHI7Cisg
ICAgICAgIHJlc3VsdC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBv
ZmZzZXQ7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBz
dGFjayhTdGFja1Nsb3QqIHZhbHVlLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgeworICAgICAg
ICBBcmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gU3RhY2s7CisgICAgICAgIHJl
c3VsdC5tX29mZnNldCA9IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4odmFsdWUpOworICAgICAgICBy
ZXN1bHQubV9zY2FsZSA9IG9mZnNldDsgLy8gSSBrbm93LCB5dWNrLgorICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgY2FsbEFyZyhpbnQzMl90IG9mZnNldCkK
KyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBDYWxs
QXJnOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNWYWxpZFNjYWxlKHVuc2lnbmVkIHNj
YWxlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6Cisg
ICAgICAgIGNhc2UgMjoKKyAgICAgICAgY2FzZSA0OgorICAgICAgICBjYXNlIDg6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBsb2dTY2FsZSh1
bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoc2NhbGUpIHsKKyAgICAgICAg
Y2FzZSAxOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAg
ICAgIHJldHVybiAxOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICByZXR1cm4gMjsKKyAg
ICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIDM7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiAwOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbmRleChBaXI6OlRtcCBiYXNlLCBB
aXI6OlRtcCBpbmRleCwgdW5zaWduZWQgc2NhbGUgPSAxLCBpbnQzMl90IG9mZnNldCA9IDApCisg
ICAgeworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaW5kZXgu
aXNHUCgpKTsKKyAgICAgICAgQVNTRVJUKGlzVmFsaWRTY2FsZShzY2FsZSkpOworICAgICAgICBB
cmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW5kZXg7CisgICAgICAgIHJlc3Vs
dC5tX2Jhc2UgPSBiYXNlOworICAgICAgICByZXN1bHQubV9pbmRleCA9IGluZGV4OworICAgICAg
ICByZXN1bHQubV9zY2FsZSA9IHN0YXRpY19jYXN0PGludDMyX3Q+KHNjYWxlKTsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHN0YXRpYyBBcmcgcmVsQ29uZChNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gUmVsQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9u
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgcmVzQ29u
ZChNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAg
ICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZXNDb25kOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgc3RhdGljIEFyZyBzcGVjaWFsKEFpcjo6U3BlY2lhbCogc3BlY2lhbCkKKyAg
ICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTcGVjaWFs
OworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHNwZWNp
YWwpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9
PShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fb2Zmc2V0
ID09IG90aGVyLm1fb2Zmc2V0CisgICAgICAgICAgICAmJiBtX2tpbmQgPT0gb3RoZXIubV9raW5k
CisgICAgICAgICAgICAmJiBtX2Jhc2UgPT0gb3RoZXIubV9iYXNlCisgICAgICAgICAgICAmJiBt
X2luZGV4ID09IG90aGVyLm1faW5kZXgKKyAgICAgICAgICAgICYmIG1fc2NhbGUgPT0gb3RoZXIu
bV9zY2FsZTsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgQXJnJiBvdGhlcikg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisK
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gKnRoaXMgIT0gQXJn
KCk7IH0KKworICAgIEtpbmQga2luZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9r
aW5kOworICAgIH0KKworICAgIGJvb2wgaXNUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGtpbmQoKSA9PSBUbXA7CisgICAgfQorCisgICAgYm9vbCBpc0ltbSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4ga2luZCgpID09IEltbTsKKyAgICB9CisKKyAgICBib29sIGlzSW1t
NjQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbW02NDsKKyAgICB9
CisKKyAgICBib29sIGlzQWRkcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgp
ID09IEFkZHI7CisgICAgfQorCisgICAgYm9vbCBpc1N0YWNrKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBraW5kKCkgPT0gU3RhY2s7CisgICAgfQorCisgICAgYm9vbCBpc0NhbGxBcmco
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBDYWxsQXJnOworICAgIH0K
KworICAgIGJvb2wgaXNJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgp
ID09IEluZGV4OworICAgIH0KKworICAgIGJvb2wgaXNSZWxDb25kKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiBraW5kKCkgPT0gUmVsQ29uZDsKKyAgICB9CisKKyAgICBib29sIGlzUmVz
Q29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlc0NvbmQ7Cisg
ICAgfQorCisgICAgYm9vbCBpc1NwZWNpYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGtpbmQoKSA9PSBTcGVjaWFsOworICAgIH0KKworICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSB8fCBpc1N0YWNrKCk7CisgICAgfQorCisgICAg
QWlyOjpUbXAgdG1wKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gVG1w
KTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gSW1tIHx8IGtpbmQoKSA9PSBJ
bW02NCk7CisgICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICB9CisKKyAgICB2b2lkKiBwb2lu
dGVyVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbW02NCk7
CisgICAgICAgIHJldHVybiBiaXR3aXNlX2Nhc3Q8dm9pZCo+KHN0YXRpY19jYXN0PGludHB0cl90
PihtX29mZnNldCkpOworICAgIH0KKworICAgIEFpcjo6VG1wIGJhc2UoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAg
ICAgIHJldHVybiBtX2Jhc2U7CisgICAgfQorCisgICAgYm9vbCBoYXNPZmZzZXQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBBZGRyOgorICAg
ICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGNhc2UgSW5k
ZXg6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBpbnQzMl90IG9m
ZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoa2luZCgpID09IFN0YWNrKQorICAgICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fc2NhbGUpOworICAgICAgICBBU1NF
UlQoa2luZCgpID09IEFkZHIgfHwga2luZCgpID09IENhbGxBcmcgfHwga2luZCgpID09IEluZGV4
KTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KTsKKyAgICB9
CisKKyAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NF
UlQoa2luZCgpID09IFN0YWNrKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxTdGFja1Ns
b3QqPihtX29mZnNldCk7CisgICAgfQorCisgICAgQWlyOjpUbXAgaW5kZXgoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBtX2lu
ZGV4OworICAgIH0KKworICAgIHVuc2lnbmVkIHNjYWxlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IEFTU0VSVChraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9zY2FsZTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBsb2dTY2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bG9nU2NhbGUoc2NhbGUoKSk7CisgICAgfQorCisgICAgQWlyOjpTcGVjaWFsKiBzcGVjaWFsKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3BlY2lhbCk7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8QWlyOjpTcGVjaWFsKj4obV9vZmZzZXQpOworICAgIH0KKwor
ICAgIGJvb2wgaXNHUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAm
JiB0bXAoKS5pc0dQKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQVG1wKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlAoKTsKKyAgICB9CisgICAgCisg
ICAgLy8gVGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0
IHJlcXVpcmVzIGEgR1AgdmFsdWUuCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIElt
bTY0OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGNh
c2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBSZWxDb25kOgor
ICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiBpc0dQ
VG1wKCk7CisgICAgICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNhbiBiZSB1
c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEZQIHZhbHVlLgorICAgIGJvb2wgaXNG
UCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNl
IEltbToKKyAgICAgICAgY2FzZSBSZWxDb25kOgorICAgICAgICBjYXNlIFJlc0NvbmQ6CisgICAg
ICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBJbnZhbGlkOgorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAg
ICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbW02
NDogLy8gWWVzLCB3ZSBhbGxvdyBJbW02NCBhcyBhIGRvdWJsZSBpbW1lZGlhdGUuIFdlIHVzZSB0
aGlzIGZvciBpbXBsZW1lbnRpbmcgc3RhY2ttYXBzLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzRlBUbXAoKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGJvb2wgaGFzVHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICBz
d2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBTcGVjaWFs
OgorICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIC8vIFRoZSB0eXBlIGlzIGFtYmlndW91cyBmb3Igc29tZSBhcmcga2luZHMuIENhbGwg
d2l0aCBjYXJlLgorICAgIFR5cGUgdHlwZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
aXNHUCgpID8gR1AgOiBGUDsKKyAgICB9CisKKyAgICBib29sIGlzVHlwZShUeXBlIHR5cGUpIGNv
bnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBHUDoKKyAg
ICAgICAgICAgIHJldHVybiBpc0dQKCk7CisgICAgICAgIGNhc2UgRlA6CisgICAgICAgICAgICBy
ZXR1cm4gaXNGUCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBpc0dQUigpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0dQUigpOworICAgIH0K
KworICAgIEdQUlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdw
cigpOworICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNGUFIoKTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5mcHIoKTsKKyAgICB9CisgICAgCisg
ICAgYm9vbCBpc1JlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0
bXAoKS5pc1JlZygpOworICAgIH0KKworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRtcCgpLnJlZygpOworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmdwVG1wSW5kZXgoKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0bXAoKS5mcFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgdG1wSW5kZXgoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLnRtcEluZGV4KCk7CisgICAgfQorCisg
ICAgQXJnIHdpdGhPZmZzZXQoaW50MzJfdCBhZGRpdGlvbmFsT2Zmc2V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKCFoYXNPZmZzZXQoKSkKKyAgICAgICAgICAgIHJldHVybiBBcmcoKTsKKyAg
ICAgICAgaWYgKHN1bU92ZXJmbG93czxpbnQzMl90PihvZmZzZXQoKSwgYWRkaXRpb25hbE9mZnNl
dCkpCisgICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7
CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIHJldHVybiBhZGRyKGJhc2UoKSwgb2Zm
c2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAg
ICAgIHJldHVybiBzdGFjayhzdGFja1Nsb3QoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0
KTsKKyAgICAgICAgY2FzZSBDYWxsQXJnOgorICAgICAgICAgICAgcmV0dXJuIGNhbGxBcmcob2Zm
c2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAg
ICAgIHJldHVybiBpbmRleChiYXNlKCksIGluZGV4KCksIHNjYWxlKCksIG9mZnNldCgpICsgYWRk
aXRpb25hbE9mZnNldCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICB9
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVh
Y2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG1fa2luZCkgeworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAg
ICAgICAgZnVuY3RvcihtX2Jhc2UpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
SW5kZXg6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAgICAgICAgICBmdW5jdG9y
KG1faW5kZXgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFRoaXMgaXMgc21hcnQgZW5v
dWdoIHRvIGtub3cgdGhhdCBhbiBhZGRyZXNzIGFyZyBpbiBhIERlZiBvciBVc2VEZWYgcnVsZSB3
aWxsIHVzZSBpdHMKKyAgICAvLyB0bXBzIGFuZCBuZXZlciBkZWYgdGhlbS4gRm9yIGV4YW1wbGUs
IHRoaXM6CisgICAgLy8KKyAgICAvLyBtb3YgJXJheCwgKCVyY3gpCisgICAgLy8KKyAgICAvLyBU
aGlzIGRlZnMgKCVyY3gpIGJ1dCB1c2VzICVyY3guCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXAoUm9sZSBhcmdSb2xlLCBUeXBlIGFyZ1R5cGUsIGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKG1fa2luZCkgewor
ICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBhcmdSb2xlLCBh
cmdUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAg
ICAgICBmdW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQKTsKKyAg
ICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCwgVXNlLCBHUCk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
CisgICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMiBhc1RydXN0ZWRJbW0zMigpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTMyKHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7Cisg
ICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bTY0IGFzVHJ1c3RlZEltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0ltbTY0
KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NCh2YWx1ZSgp
KTsKKyAgICB9CisjZW5kaWYKKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyIGFz
VHJ1c3RlZEltbVB0cigpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXM2NEJpdCgpKQorICAg
ICAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFT
U0VSVChpc0ltbSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1t
UHRyKHBvaW50ZXJWYWx1ZSgpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6QWRkcmVz
cyBhc0FkZHJlc3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzQWRkcigpKTsKKyAg
ICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzKG1fYmFzZS5ncHIoKSwgc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
QmFzZUluZGV4IGFzQmFzZUluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0lu
ZGV4KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCgKKyAgICAg
ICAgICAgIG1fYmFzZS5ncHIoKSwgbV9pbmRleC5ncHIoKSwgc3RhdGljX2Nhc3Q8TWFjcm9Bc3Nl
bWJsZXI6OlNjYWxlPihsb2dTY2FsZSgpKSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PGludDMy
X3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxD
b25kaXRpb24gYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpc1JlbENvbmQoKSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2Vt
Ymxlcjo6UmVsYXRpb25hbENvbmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIE1hY3Jv
QXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gYXNSZXN1bHRDb25kaXRpb24oKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGlzUmVzQ29uZCgpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19j
YXN0PE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24+KG1fb2Zmc2V0KTsKKyAgICB9CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIEFyZyhXVEY6Okhhc2hU
YWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9iYXNlKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZh
bHVlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBBcmcoV1RGOjpIYXNo
VGFibGVEZWxldGVkVmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAor
ICAgIHsKKyAgICAgICAgLy8gVGhpcyByZWFsbHkgZG9lc24ndCBoYXZlIHRvIGJlIHRoYXQgZ3Jl
YXQuCisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50NjRfdD46Omhhc2gobV9vZmZzZXQp
ICsgbV9raW5kICsgbV9zY2FsZSArIG1fYmFzZS5oYXNoKCkgKworICAgICAgICAgICAgbV9pbmRl
eC5oYXNoKCk7CisgICAgfQorCitwcml2YXRlOgorICAgIGludDY0X3QgbV9vZmZzZXQgeyAwIH07
CisgICAgS2luZCBtX2tpbmQgeyBJbnZhbGlkIH07CisgICAgaW50MzJfdCBtX3NjYWxlIHsgMSB9
OworICAgIEFpcjo6VG1wIG1fYmFzZTsKKyAgICBBaXI6OlRtcCBtX2luZGV4OworfTsKKworc3Ry
dWN0IEFyZ0hhc2ggeworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEFyZyYga2V5KSB7
IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgQXJnJiBh
LCBjb25zdCBBcmcmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNo
PEpTQzo6QjM6OkFpcjo6QXJnPiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpBaXI6OkFyZ0hhc2gg
SGFzaDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVt
cGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OkFyZz4gOiBTaW1wbGVDbGFz
c0hhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpBcmc+IHsKKyAgICAvLyBCZWNhdXNlIG1fc2NhbGUg
aXMgMSBpbiB0aGUgZW1wdHkgdmFsdWUuCisgICAgc3RhdGljIGNvbnN0IGJvb2wgZW1wdHlWYWx1
ZUlzWmVybyA9IGZhbHNlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQXJnX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDc3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2Nr
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMu
aCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpk
dW1wUHJlZml4ID0gIiMiOworCitib29sIEJhc2ljQmxvY2s6OmFkZFByZWRlY2Vzc29yKEJhc2lj
QmxvY2sqIGJsb2NrKQoreworICAgIHJldHVybiBCMzo6YWRkUHJlZGVjZXNzb3IodGhpcywgYmxv
Y2spOworfQorCitib29sIEJhc2ljQmxvY2s6OnJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sq
IGJsb2NrKQoreworICAgIHJldHVybiBCMzo6cmVtb3ZlUHJlZGVjZXNzb3IodGhpcywgYmxvY2sp
OworfQorCitib29sIEJhc2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBm
cm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICByZXR1cm4gQjM6OnJlcGxhY2VQcmVkZWNlc3Nv
cih0aGlzLCBmcm9tLCB0byk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4LCBtX2luZGV4KTsKK30K
Kwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVuY3kgPSAiLCBtX2ZyZXF1ZW5j
eSwgIlxuIik7CisgICAgaWYgKHByZWRlY2Vzc29ycygpLnNpemUoKSkKKyAgICAgICAgb3V0LnBy
aW50KCIgIFByZWRlY2Vzc29yczogIiwgcG9pbnRlckxpc3REdW1wKHByZWRlY2Vzc29ycygpKSwg
IlxuIik7CisgICAgZm9yIChjb25zdCBJbnN0JiBpbnN0IDogKnRoaXMpCisgICAgICAgIG91dC5w
cmludCgiICAgICIsIGluc3QsICJcbiIpOworICAgIGlmIChzdWNjZXNzb3JzKCkuc2l6ZSgpKQor
ICAgICAgICBvdXQucHJpbnQoIiAgU3VjY2Vzc29yczogIiwgbGlzdER1bXAoc3VjY2Vzc29ycygp
KSwgIlxuIik7Cit9CisKK0Jhc2ljQmxvY2s6OkJhc2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRv
dWJsZSBmcmVxdWVuY3kpCisgICAgOiBtX2luZGV4KGluZGV4KQorICAgICwgbV9mcmVxdWVuY3ko
ZnJlcXVlbmN5KQoreworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpckJhc2ljQmxvY2tfaAorI2RlZmluZSBBaXJCYXNpY0Jsb2NrX2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJBaXJJ
bnN0LmgiCisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOworY2xh
c3MgSW5zZXJ0aW9uU2V0OworCitjbGFzcyBCYXNpY0Jsb2NrIHsKKyAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShCYXNpY0Jsb2NrKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIHR5cGVk
ZWYgVmVjdG9yPEluc3Q+IEluc3RMaXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sq
LCAyPiBQcmVkZWNlc3Nvckxpc3Q7CisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2Nr
LCAyPiBTdWNjZXNzb3JMaXN0OworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVy
biBtX2luZGV4OyB9CisgICAgCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zdHMuc2l6ZSgpOyB9CisgICAgSW5zdExpc3Q6Oml0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g
bV9pbnN0cy5iZWdpbigpOyB9CisgICAgSW5zdExpc3Q6Oml0ZXJhdG9yIGVuZCgpIHsgcmV0dXJu
IG1faW5zdHMuZW5kKCk7IH0KKyAgICBJbnN0TGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBj
b25zdCB7IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0TGlzdDo6Y29uc3RfaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorCisgICAgY29uc3Qg
SW5zdCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQor
ICAgIEluc3QmIGF0KHNpemVfdCBpbmRleCkgeyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKwor
ICAgIGNvbnN0IEluc3QmIGxhc3QoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQor
ICAgIEluc3QmIGxhc3QoKSB7IHJldHVybiBtX2luc3RzLmxhc3QoKTsgfQorCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGFwcGVuZEluc3QoSW5zdCYmIGluc3QpCisgICAg
eworICAgICAgICBtX2luc3RzLmFwcGVuZChzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpOworICAg
IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVu
ZChBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBtX2luc3RzLmFwcGVu
ZChJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisK
KyAgICAvLyBUaGUgIjAiIGNhc2UgaXMgdGhlIGNhc2UgdG8gd2hpY2ggdGhlIGJyYW5jaCBqdW1w
cywgc28gdGhlICJ0aGVuIiBjYXNlLiBUaGUgIjEiIGNhc2UgaXMgdGhlCisgICAgLy8gImVsc2Ui
IGNhc2UsIGFuZCBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZmFsbC10aHJvdWdoIG9mIGEgY29u
ZGl0aW9uYWwgYnJhbmNoLgorICAgIHVuc2lnbmVkIG51bVN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJl
dHVybiBtX3N1Y2Nlc3NvcnMuc2l6ZSgpOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrIHN1Y2Nlc3Nv
cih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQor
ICAgIEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBt
X3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29yczsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1
Y2Nlc3NvcnMoKSB7IHJldHVybiBtX3N1Y2Nlc3NvcnM7IH0KKworICAgIEJhc2ljQmxvY2sqIHN1
Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBzdWNjZXNzb3IoaW5k
ZXgpLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQg
aW5kZXgpIHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQorICAgIFN1Y2Nlc3Nv
ckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tzKCkK
KyAgICB7CisgICAgICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1
Y2Nlc3Nvckxpc3Q+KG1fc3VjY2Vzc29ycyk7CisgICAgfQorICAgIFN1Y2Nlc3NvckNvbGxlY3Rp
b248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxvY2tz
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0
IEJhc2ljQmxvY2ssIGNvbnN0IFN1Y2Nlc3Nvckxpc3Q+KG1fc3VjY2Vzc29ycyk7CisgICAgfQor
CisgICAgdW5zaWduZWQgbnVtUHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNl
c3NvcnMuc2l6ZSgpOyB9CisgICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIEJhc2ljQmxv
Y2sqJiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnNb
aW5kZXhdOyB9CisgICAgY29uc3QgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSBjb25z
dCB7IHJldHVybiBtX3ByZWRlY2Vzc29yczsgfQorICAgIFByZWRlY2Vzc29yTGlzdCYgcHJlZGVj
ZXNzb3JzKCkgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0KKworICAgIGJvb2wgYWRkUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayopOworICAgIGJvb2wgcmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9j
ayopOworICAgIGJvb2wgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2lj
QmxvY2sqIHRvKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZv
aWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQg
Y2xhc3MgQ29kZTsKKyAgICBmcmllbmQgY2xhc3MgSW5zZXJ0aW9uU2V0OworICAgIAorICAgIEJh
c2ljQmxvY2sodW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5zaWdu
ZWQgbV9pbmRleDsKKyAgICBJbnN0TGlzdCBtX2luc3RzOworICAgIFN1Y2Nlc3Nvckxpc3QgbV9z
dWNjZXNzb3JzOworICAgIFByZWRlY2Vzc29yTGlzdCBtX3ByZWRlY2Vzc29yczsKKyAgICBkb3Vi
bGUgbV9mcmVxdWVuY3k7Cit9OworCitjbGFzcyBEZWVwQmFzaWNCbG9ja0R1bXAgeworcHVibGlj
OgorICAgIERlZXBCYXNpY0Jsb2NrRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAg
ICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX2Jsb2NrKQorICAgICAgICAg
ICAgbV9ibG9jay0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3V0
LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgQmFzaWNCbG9j
ayogbV9ibG9jazsKK307CisKK2lubGluZSBEZWVwQmFzaWNCbG9ja0R1bXAgZGVlcER1bXAoY29u
c3QgQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIERlZXBCYXNpY0Jsb2NrRHVtcChi
bG9jayk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJCYXNpY0Jsb2NrX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQ0NhbGxTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK0NDYWxsU3BlY2lhbDo6Q0Nh
bGxTcGVjaWFsKCkKK3sKKyAgICBtX2Nsb2JiZXJlZFJlZ3MgPSBSZWdpc3RlclNldDo6YWxsUmVn
aXN0ZXJzKCk7CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNr
UmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRlKFJlZ2lzdGVyU2V0Ojpy
ZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgIG1fY2xvYmJlcmVkUmVncy5leGNsdWRl
KFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOworfQorCitDQ2FsbFNwZWNpYWw6
On5DQ2FsbFNwZWNpYWwoKQoreworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6Zm9yRWFjaEFyZyhJ
bnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYgY2Fs
bGJhY2spCit7CisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OlVzZSwgQXJnOjpHUCk7
CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsr
aSkgeworICAgICAgICAvLyBGb3IgdGhlIHR5cGUsIHdlIGNhbiBqdXN0IHF1ZXJ5IHRoZSBhcmcn
cyB0eXBlLiBUaGUgYXJnIHdpbGwgaGF2ZSBhIHR5cGUsIGJlY2F1c2Ugd2UKKyAgICAgICAgLy8g
cmVxdWlyZSB0aGVzZSBhcmdzIHRvIGJlIGFyZ3VtZW50IHJlZ2lzdGVycy4KKyAgICAgICAgY2Fs
bGJhY2soaW5zdC5hcmdzW2ldLCBBcmc6OlVzZSwgaW5zdC5hcmdzW2ldLnR5cGUoKSk7CisgICAg
fQorfQorCitib29sIENDYWxsU3BlY2lhbDo6aXNWYWxpZChJbnN0JiBpbnN0KQoreworICAgIGlm
IChpbnN0LmFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgc3dp
dGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAg
aWYgKGlzMzJCaXQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICBpZiAoaXM2NEJpdCgpKQorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEFyZzo6VG1wOgorICAg
IGNhc2UgQXJnOjpBZGRyOgorICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICBjYXNlIEFyZzo6Q2Fs
bEFyZzoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKworICAgIGlmICghaW5zdC5hcmdzWzFdLmlzR1AoKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMjsgaSA8IGluc3QuYXJncy5zaXplKCk7
ICsraSkgeworICAgICAgICBpZiAoIWluc3QuYXJnc1tpXS5pc1JlZygpKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmIChpbnN0LmFyZ3NbaV0gPT0gVG1wKHNjcmF0Y2hS
ZWdpc3RlcikpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0
cnVlOworfQorCitib29sIENDYWxsU3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYsIHVuc2lnbmVk
IGFyZ0luZGV4KQoreworICAgIC8vIEFyZyAxIGNhbiBiZSBhIHN0YWNrIGFkZHJlc3MgZm9yIHN1
cmUuCisgICAgaWYgKGFyZ0luZGV4ID09IDEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAor
ICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBDQ2FsbFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdp
c3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikKK3sKK30KKworQ0NhbGxIZWxwZXJzOjpK
dW1wIENDYWxsU3BlY2lhbDo6Z2VuZXJhdGUoSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQs
IEdlbmVyYXRpb25Db250ZXh0JikKK3sKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkp
IHsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgaml0
Lm1vdmUoaW5zdC5hcmdzWzFdLmFzVHJ1c3RlZEltbVB0cigpLCBzY3JhdGNoUmVnaXN0ZXIpOwor
ICAgICAgICBqaXQuY2FsbChzY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEFyZzo6VG1wOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uZ3ByKCkpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICAgICAgaml0LmNhbGwoaW5zdC5h
cmdzWzFdLmFzQWRkcmVzcygpKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiBDQ2FsbEhlbHBlcnM6Okp1bXAoKTsKK30KKworY29uc3QgUmVnaXN0ZXJTZXQm
IENDYWxsU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKQoreworICAgIHJldHVybiBt
X2Nsb2JiZXJlZFJlZ3M7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQ0NhbGwiKTsKK30KKwordm9pZCBD
Q2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgiZnVuY3Rpb24gY2FsbCB0aGF0IHVzZXMgdGhlIEMgY2FsbGluZyBjb252ZW50
aW9uLiIpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJD
Q2FsbFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNDYWxsU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlyQ0NhbGxTcGVjaWFsX2gKKyNkZWZpbmUgQWlyQ0NhbGxTcGVjaWFsX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gVXNlIHRoaXMgc3BlY2lhbCBmb3Ig
Y29uc3RydWN0aW5nIGEgQyBjYWxsLiBBcmcgMCBpcyBvZiBjb3Vyc2UgYSBTcGVjaWFsIGFyZyB0
aGF0IHJlZmVycyB0byB0aGUKKy8vIENDYWxsU3BlY2lhbCBvYmplY3QuIEFyZyAxIGlzIHRoZSBj
YWxsZWUsIGFuZCBpdCBjYW4gYmUgYW4gSW1tUHRyLCBhIHJlZ2lzdGVyLCBvciBhbiBhZGRyZXNz
LiBUaGUKKy8vIHJlbWFpbmluZyBhcmdzIGFyZSBqdXN0IHRoZSBzZXQgb2YgYXJndW1lbnQgcmVn
aXN0ZXJzIHVzZWQgYnkgdGhpcyBjYWxsLiBGb3IgYXJndW1lbnRzIHRoYXQgZ28gdG8KKy8vIHRo
ZSBzdGFjaywgeW91IGhhdmUgdG8gZG8gdGhlIGdydW50IHdvcmsgb2YgZG9pbmcgdGhvc2Ugc3Rh
Y2sgc3RvcmVzLiBJbiBmYWN0LCB0aGUgb25seSByZWFzb24gd2h5CisvLyB3ZSBzcGVjaWZ5IHRo
ZSBhcmd1bWVudCByZWdpc3RlcnMgYXMgYXJndW1lbnRzIHRvIGEgY2FsbCBpcyBzbyB0aGF0IHRo
ZSBsaXZlbmVzcyBhbmFseXNpcyBjYW4gc2VlCisvLyB0aGF0IHRoZXkgZ2V0IHVzZWQgaGVyZS4g
SXQgd291bGQgYmUgd3JvbmcgdG8gYXV0b21hZ2ljYWxseSByZXBvcnQgYWxsIGFyZ3VtZW50IHJl
Z2lzdGVycyBhcyBiZWluZworLy8gdXNlZCBiZWNhdXNlIGlmIHdlIGhhZCBhIGNhbGwgdGhhdCBk
aWRuJ3QgcGFzcyB0aGVtLCB0aGVuIHRoZXknZCBhcHBlYXIgdG8gYmUgbGl2ZSB1bnRpbCBzb21l
CisvLyBjbG9iYmVyIHBvaW50IG9yIHRoZSBwcm9sb2d1ZSwgd2hpY2hldmVyIGhhcHBlbmVkIHNv
b25lci4KKworY2xhc3MgQ0NhbGxTcGVjaWFsIDogcHVibGljIFNwZWNpYWwgeworcHVibGljOgor
ICAgIENDYWxsU3BlY2lhbCgpOworICAgIH5DQ2FsbFNwZWNpYWwoKTsKKworICAgIC8vIFlvdSBj
YW5ub3QgdXNlIHRoaXMgcmVnaXN0ZXIgdG8gcGFzcyBhcmd1bWVudHMuIEl0IGp1c3Qgc28gaGFw
cGVucyB0aGF0IHRoaXMgcmVnaXN0ZXIgaXMgbm90CisgICAgLy8gdXNlZCBmb3IgYXJndW1lbnRz
IGluIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4gQnkgdGhlIHdheSwgdGhpcyBpcyB0aGUgb25s
eSB0aGluZyB0aGF0IGNhdXNlcworICAgIC8vIHRoaXMgc3BlY2lhbCB0byBiZSBzcGVjaWZpYyB0
byBDIGNhbGxzLgorICAgIHN0YXRpYyBjb25zdCBHUFJSZWcgc2NyYXRjaFJlZ2lzdGVyID0gR1BS
SW5mbzo6bm9uQXJnR1BSMDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZm9yRWFjaEFyZyhJbnN0
JiwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsK
KyAgICBib29sIGlzVmFsaWQoSW5zdCYpIG92ZXJyaWRlOworICAgIGJvb2wgYWRtaXRzU3RhY2so
SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KSBvdmVycmlkZTsKKyAgICB2b2lkIHJlcG9ydFVzZWRS
ZWdpc3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0Jikgb3ZlcnJpZGU7CisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29u
dGV4dCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJl
Z3MoSW5zdCYpIG92ZXJyaWRlOworCisgICAgdm9pZCBkdW1wSW1wbChQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworICAgIHZvaWQgZGVlcER1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWRSZWdzOwor
fTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNDYWxsU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNvZGUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKyNpbmNsdWRlICJCM0Jhc2lj
QmxvY2tVdGlscy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK0NvZGU6OkNvZGUoKQorICAgIDogbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikK
K3sKK30KKworQ29kZTo6fkNvZGUoKQoreworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjphZGRCbG9j
ayhkb3VibGUgZnJlcXVlbmN5KQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPiBi
bG9jayhuZXcgQmFzaWNCbG9jayhtX2Jsb2Nrcy5zaXplKCksIGZyZXF1ZW5jeSkpOworICAgIEJh
c2ljQmxvY2sqIHJlc3VsdCA9IGJsb2NrLmdldCgpOworICAgIG1fYmxvY2tzLmFwcGVuZChXVEY6
Om1vdmUoYmxvY2spKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitTdGFja1Nsb3QqIENvZGU6
OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBTdGFj
a1Nsb3RWYWx1ZSogdmFsdWUpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xv
dChuZXcgU3RhY2tTbG90KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCB2YWx1
ZSkpOworICAgIFN0YWNrU2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKKyAgICBtX3N0YWNrU2xv
dHMuYXBwZW5kKFdURjo6bW92ZShzbG90KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworU3Bl
Y2lhbCogQ29kZTo6YWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkK
K3sKKyAgICBTcGVjaWFsKiByZXN1bHQgPSBzcGVjaWFsLmdldCgpOworICAgIG1fc3BlY2lhbHMu
YXBwZW5kKFdURjo6bW92ZShzcGVjaWFsKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworQ0Nh
bGxTcGVjaWFsKiBDb2RlOjpjQ2FsbFNwZWNpYWwoKQoreworICAgIGlmICghbV9jQ2FsbFNwZWNp
YWwpIHsKKyAgICAgICAgbV9jQ2FsbFNwZWNpYWwgPSBzdGF0aWNfY2FzdDxDQ2FsbFNwZWNpYWwq
PigKKyAgICAgICAgICAgIGFkZFNwZWNpYWwoc3RkOjptYWtlX3VuaXF1ZTxDQ2FsbFNwZWNpYWw+
KCkpKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jQ2FsbFNwZWNpYWw7Cit9CisKK3ZvaWQgQ29k
ZTo6cmVzZXRSZWFjaGFiaWxpdHkoKQoreworICAgIEIzOjpyZXNldFJlYWNoYWJpbGl0eShtX2Js
b2Nrcyk7Cit9CisKK3ZvaWQgQ29kZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KGRl
ZXBEdW1wKGJsb2NrKSk7CisgICAgaWYgKHN0YWNrU2xvdHMoKS5zaXplKCkpIHsKKyAgICAgICAg
b3V0LnByaW50KCJTdGFjayBzbG90czpcbiIpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xv
dCA6IHN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIHBvaW50ZXJE
dW1wKHNsb3QpLCAiOiAiLCBkZWVwRHVtcChzbG90KSwgIlxuIik7CisgICAgfQorICAgIGlmIChz
cGVjaWFscygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlNwZWNpYWxzOlxuIik7Cisg
ICAgICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6IHNwZWNpYWxzKCkpCisgICAgICAgICAgICBv
dXQucHJpbnQoIiAgICAiLCBwb2ludGVyRHVtcChzcGVjaWFsKSwgIjogIiwgZGVlcER1bXAoc3Bl
Y2lhbCksICJcbiIpOworICAgIH0KKyAgICBpZiAobV9mcmFtZVNpemUpCisgICAgICAgIG91dC5w
cmludCgiRnJhbWUgc2l6ZTogIiwgbV9mcmFtZVNpemUsICJcbiIpOworICAgIGlmIChtX2NhbGxB
cmdBcmVhU2l6ZSkKKyAgICAgICAgb3V0LnByaW50KCJDYWxsIGFyZyBhcmVhIHNpemU6ICIsIG1f
Y2FsbEFyZ0FyZWFTaXplLCAiXG4iKTsKKyAgICBpZiAobV9jYWxsZWVTYXZlUmVnaXN0ZXJzLnNp
emUoKSkKKyAgICAgICAgb3V0LnByaW50KCJDYWxsZWUgc2F2ZXM6ICIsIG1fY2FsbGVlU2F2ZVJl
Z2lzdGVycywgIlxuIik7Cit9CisKK3Vuc2lnbmVkIENvZGU6OmZpbmRGaXJzdEJsb2NrSW5kZXgo
dW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7CisgICAgd2hpbGUgKGluZGV4IDwgc2l6ZSgpICYmICFh
dChpbmRleCkpCisgICAgICAgIGluZGV4Kys7CisgICAgcmV0dXJuIGluZGV4OworfQorCit1bnNp
Z25lZCBDb2RlOjpmaW5kTmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGZpbmRGaXJzdEJsb2NrSW5kZXgoaW5kZXggKyAxKTsKK30KKworQmFzaWNCbG9j
ayogQ29kZTo6ZmluZE5leHRCbG9jayhCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKK3sKKyAgICBy
ZXR1cm4gYXQoZmluZE5leHRCbG9ja0luZGV4KGJsb2NrLT5pbmRleCgpKSk7Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMzEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpZm5kZWYgQWlyQ29kZV9oCisjZGVmaW5lIEFpckNvZGVfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJBaXJTcGVj
aWFsLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJBdE9m
ZnNldExpc3QuaCIKKyNpbmNsdWRlICJTdGFja0FsaWdubWVudC5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCituYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgQ0NhbGxTcGVjaWFsOworCisvLyBUaGlzIGlzIGFuIElSIHRoYXQgaXMgdmVyeSBj
bG9zZSB0byB0aGUgYmFyZSBtZXRhbC4gSXQgcmVxdWlyZXMgYWJvdXQgNDB4IG1vcmUgYnl0ZXMg
dGhhbiB0aGUKKy8vIGdlbmVyYXRlZCBtYWNoaW5lIGNvZGUgLSBmb3IgZXhhbXBsZSBpZiB5b3Un
cmUgZ2VuZXJhdGluZyAxTUIgb2YgbWFjaGluZSBjb2RlLCB5b3UgbmVlZCBhYm91dAorLy8gNDBN
QiBvZiBBaXIuCisKK2NsYXNzIENvZGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKENvZGUp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIENvZGUoKTsKKyAg
ICB+Q29kZSgpOworCisgICAgQmFzaWNCbG9jayogYWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9
IFBOYU4pOworCisgICAgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUs
IFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKiA9IG51bGxwdHIpOworCisgICAgU3BlY2lh
bCogYWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4pOworCisgICAgLy8gVGhpcyBp
cyB0aGUgc3BlY2lhbCB5b3UgbmVlZCB0byBtYWtlIGEgQyBjYWxsIQorICAgIENDYWxsU3BlY2lh
bCogY0NhbGxTcGVjaWFsKCk7CisKKyAgICBUbXAgbmV3VG1wKEFyZzo6VHlwZSB0eXBlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgQXJnOjpHUDoKKyAgICAg
ICAgICAgIHJldHVybiBUbXA6OmdwVG1wRm9ySW5kZXgobV9udW1HUFRtcHMrKyk7CisgICAgICAg
IGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJldHVybiBUbXA6OmZwVG1wRm9ySW5kZXgobV9u
dW1GUFRtcHMrKyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1UbXBzKEFy
Zzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNh
c2UgQXJnOjpHUDoKKyAgICAgICAgICAgIHJldHVybiBtX251bUdQVG1wczsKKyAgICAgICAgY2Fz
ZSBBcmc6OkZQOgorICAgICAgICAgICAgcmV0dXJuIG1fbnVtRlBUbXBzOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdW5zaWduZWQgY2FsbEFyZ0FyZWFTaXplKCkgY29uc3QgeyByZXR1cm4gbV9j
YWxsQXJnQXJlYVNpemU7IH0KKworICAgIC8vIFlvdSBjYW4gY2FsbCB0aGlzIGJlZm9yZSBjb2Rl
IGdlbmVyYXRpb24gdG8gZm9yY2UgYSBtaW5pbXVtIGNhbGwgYXJnIGFyZWEgc2l6ZS4KKyAgICB2
b2lkIHJlcXVlc3RDYWxsQXJnQXJlYVNpemUodW5zaWduZWQgc2l6ZSkKKyAgICB7CisgICAgICAg
IG1fY2FsbEFyZ0FyZWFTaXplID0gc3RkOjptYXgoCisgICAgICAgICAgICBtX2NhbGxBcmdBcmVh
U2l6ZSwKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PHVuc2lnbmVkPihXVEY6OnJvdW5kVXBUb011
bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBzaXplKSkpOworICAgIH0KKworICAgIHVu
c2lnbmVkIGZyYW1lU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVTaXplOyB9CisKKyAgICAv
LyBPbmx5IHBoYXNlcyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24gYXJlIGFsbG93ZWQgdG8gc2V0
IHRoaXMuIEN1cnJlbnRseSwgb25seQorICAgIC8vIEFpcjo6YWxsb2NhdGVTdGFjaygpIGRvZXMg
dGhpcy4KKyAgICB2b2lkIHNldEZyYW1lU2l6ZSh1bnNpZ25lZCBmcmFtZVNpemUpCisgICAgewor
ICAgICAgICBtX2ZyYW1lU2l6ZSA9IGZyYW1lU2l6ZTsKKyAgICB9CisKKyAgICBSZWdpc3RlckF0
T2Zmc2V0TGlzdCYgY2FsbGVlU2F2ZVJlZ2lzdGVycygpIHsgcmV0dXJuIG1fY2FsbGVlU2F2ZVJl
Z2lzdGVyczsgfQorCisgICAgLy8gUmVjb21wdXRlcyBwcmVkZWNlc3NvcnMgYW5kIGRlbGV0ZXMg
dW5yZWFjaGFibGUgYmxvY2tzLgorICAgIHZvaWQgcmVzZXRSZWFjaGFiaWxpdHkoKTsKKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYmxvY2tzLnNpemUoKTsgfQorICAgIEJhc2ljQmxvY2sqIGF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrc1tpbmRleF0uZ2V0KCk7IH0KKyAgICBC
YXNpY0Jsb2NrKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChp
bmRleCk7IH0KKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0
KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID49IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmRG
aXJzdEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0OworCisgICAgLy8gRmluZHMgdGhl
IHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcg
PiBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kTmV4dEJsb2NrSW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0OworCisgICAgQmFzaWNCbG9jayogZmluZE5leHRCbG9jayhCYXNpY0Jsb2NrKikgY29u
c3Q7CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRv
cigpCisgICAgICAgICAgICA6IG1fY29kZShudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4
KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKGNvbnN0IENvZGUm
IGNvZGUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX2NvZGUoJmNvZGUpCisgICAg
ICAgICAgICAsIG1faW5kZXgobV9jb2RlLT5maW5kRmlyc3RCbG9ja0luZGV4KGluZGV4KSkKKyAg
ICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgQmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29kZS0+YXQobV9pbmRleCk7CisgICAgICAg
IH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIG1faW5kZXggPSBtX2NvZGUtPmZpbmRGaXJzdEJsb2NrSW5kZXgobV9pbmRleCArIDEpOwor
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgY29uc3QgQ29kZSogbV9jb2RlOworICAgICAgICB1bnNpZ25lZCBt
X2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBjbGFzcyBTdGFja1Nsb3RzQ29sbGVjdGlv
biB7CisgICAgcHVibGljOgorICAgICAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbihjb25zdCBDb2Rl
JiBjb2RlKQorICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICAgICAgeworICAgICAgICB9
CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNr
U2xvdHMuc2l6ZSgpOyB9CisgICAgICAgIFN0YWNrU2xvdCogYXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNrU2xvdHNbaW5kZXhdLmdldCgpOyB9CisgICAgICAg
IFN0YWNrU2xvdCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQo
aW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6Cisg
ICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVs
bHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rp
b24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xs
ZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVy
YXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rp
b24tPmF0KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9pbmRleCsrOwor
ICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4Owor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAh
KCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAg
ICAgICAgICAgY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAgICAgaXRlcmF0b3Ig
YmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICAgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKwor
ICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAgICB9OworCisgICAg
U3RhY2tTbG90c0NvbGxlY3Rpb24gc3RhY2tTbG90cygpIGNvbnN0IHsgcmV0dXJuIFN0YWNrU2xv
dHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAorICAgIGNsYXNzIFNwZWNpYWxzQ29sbGVjdGlv
biB7CisgICAgcHVibGljOgorICAgICAgICBTcGVjaWFsc0NvbGxlY3Rpb24oY29uc3QgQ29kZSYg
Y29kZSkKKyAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFs
cy5zaXplKCk7IH0KKyAgICAgICAgU3BlY2lhbCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTcGVjaWFs
KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0K
KworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAg
IGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAg
ICAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24mIGNvbGxlY3Rp
b24sIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xs
ZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgU3BlY2lhbCogb3BlcmF0b3IqKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29u
c3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0
IFNwZWNpYWxzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQg
bV9pbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAg
ICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTcGVjaWFsc0NvbGxlY3Rp
b24gc3BlY2lhbHMoKSBjb25zdCB7IHJldHVybiBTcGVjaWFsc0NvbGxlY3Rpb24oKnRoaXMpOyB9
CisgICAgCisgICAgLy8gVGhlIG5hbWUgaGFzIHRvIGJlIGEgc3RyaW5nIGxpdGVyYWwsIHNpbmNl
IHdlIGRvbid0IGRvIGFueSBtZW1vcnkgbWFuYWdlbWVudCBmb3IgdGhlIHN0cmluZy4KKyAgICB2
b2lkIHNldExhc3RQaGFzZU5hbWUoY29uc3QgY2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIG1f
bGFzdFBoYXNlTmFtZSA9IG5hbWU7CisgICAgfQorCisgICAgY29uc3QgY2hhciogbGFzdFBoYXNl
TmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFzdFBoYXNlTmFtZTsgfQorCitwcml2YXRlOgorICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOworICAgIFZl
Y3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3Rvcjxz
dGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4+IG1fc3BlY2lhbHM7CisgICAgQ0NhbGxTcGVjaWFsKiBt
X2NDYWxsU3BlY2lhbCB7IG51bGxwdHIgfTsKKyAgICB1bnNpZ25lZCBtX251bUdQVG1wcyB7IDAg
fTsKKyAgICB1bnNpZ25lZCBtX251bUZQVG1wcyB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2ZyYW1l
U2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2NhbGxBcmdBcmVhU2l6ZSB7IDAgfTsKKyAgICBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7CisgICAgY29uc3QgY2hh
ciogbV9sYXN0UGhhc2VOYW1lOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckNvZGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJs
b2NrLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZy
ZXF1ZW50ZWRCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJGcmVxdWVu
dGVkQmxvY2tfaAorI2RlZmluZSBBaXJGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxv
Y2s7CisKK3R5cGVkZWYgR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazxCYXNpY0Jsb2NrPiBGcmVxdWVu
dGVkQmxvY2s7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJH
ZW5lcmF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFsbG9jYXRl
U3RhY2suaCIKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNv
bnRleHQuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVDYWxsZWVTYXZlcy5oIgorI2luY2x1ZGUgIkFp
clNwaWxsRXZlcnl0aGluZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAi
QjNDb21tb24uaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxw
ZXJzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
Kwordm9pZCBnZW5lcmF0ZShDb2RlJiBjb2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICAv
LyBXZSBkb24ndCBleHBlY3QgdGhlIGluY29taW5nIGNvZGUgdG8gaGF2ZSBwcmVkZWNlc3NvcnMg
Y29tcHV0ZWQuCisgICAgY29kZS5yZXNldFJlYWNoYWJpbGl0eSgpOworICAgIAorICAgIGlmIChz
aG91bGRWYWxpZGF0ZUlSKCkpCisgICAgICAgIHZhbGlkYXRlKGNvZGUpOworCisgICAgLy8gSWYg
d2UncmUgZG9pbmcgc3VwZXIgdmVyYm9zZSBkdW1waW5nLCB0aGUgcGhhc2Ugc2NvcGUgb2YgYW55
IHBoYXNlIHdpbGwgYWxyZWFkeSBkbyBhIGR1bXAuCisgICAgaWYgKHNob3VsZER1bXBJUigpICYm
ICFzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwg
YWlyOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gVGhpcyBp
cyB3aGVyZSB3ZSBydW4gb3VyIG9wdGltaXphdGlvbnMgYW5kIHRyYW5zZm9ybWF0aW9ucy4KKyAg
ICAvLyBGSVhNRTogQWRkIEFpciBvcHRpbWl6YXRpb25zLgorICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTYKKworICAgIC8vIFRoaXMgaXMgd2hlcmUg
d2Ugd291bGQgaGF2ZSBhIHJlYWwgcmVnaXN0ZXIgYWxsb2NhdG9yLiBUaGVuLCB3ZSBjb3VsZCB1
c2Ugc3BpbGxFdmVyeXRoaW5nKCkKKyAgICAvLyBpbiBwbGFjZSBvZiB0aGUgcmVnaXN0ZXIgYWxs
b2NhdG9yIG9ubHkgZm9yIHRlc3RpbmcuCisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTcKKyAgICBzcGlsbEV2ZXJ5dGhpbmcoY29kZSk7
CisKKyAgICAvLyBQcmlvciB0byB0aGlzIHBvaW50IHRoZSBwcm9sb2d1ZSBhbmQgZXBpbG9ndWUg
aXMgaW1wbGljaXQuIFRoaXMgbWFrZXMgaXQgZXhwbGljaXQuIEl0IGFsc28KKyAgICAvLyBkb2Vz
IHRoaW5ncyBsaWtlIGlkZW50aWZ5IHdoaWNoIGNhbGxlZS1zYXZlcyB3ZSdyZSB1c2luZyBhbmQg
c2F2ZXMgdGhlbS4KKyAgICBoYW5kbGVDYWxsZWVTYXZlcyhjb2RlKTsKKworICAgIC8vIFRoaXMg
dHVybnMgYWxsIFN0YWNrIGFuZCBDYWxsQXJnIEFyZ3MgaW50byBBZGRyIGFyZ3MgdGhhdCB1c2Ug
dGhlIGZyYW1lIHBvaW50ZXIuIEl0IGRvZXMKKyAgICAvLyB0aGlzIGJ5IGZpcnN0LWZpdCBhbGxv
Y2F0aW5nIHN0YWNrIHNsb3RzLiBJdCBzaG91bGQgYmUgcHJldHR5IGRhcm4gY2xvc2UgdG8gb3B0
aW1hbCwgc28gd2UKKyAgICAvLyBzaG91bGRuJ3QgaGF2ZSB0byB3b3JyeSBhYm91dCB0aGlzIHZl
cnkgbXVjaC4KKyAgICBhbGxvY2F0ZVN0YWNrKGNvZGUpOworCisgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCByZWFsbHkgaGF2ZSBhIGNvZGUgbGF5b3V0IG9wdGltaXphdGlvbiBoZXJlLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NzgKKworICAgIC8v
IEZJWE1FOiBXZSBuZWVkIGEgbGF0ZSBsaXZlbmVzcyBhbmFseXNpcyBvdmVyIHJlZ2lzdGVycyB0
byBmaWxsIGluIHRoZQorICAgIC8vIFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoKS4KKyAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTExCisKKyAg
ICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShjb2RlKTsKKworICAg
IC8vIERvIGEgZmluYWwgZHVtcCBvZiBBaXIuIE5vdGUgdGhhdCB3ZSBoYXZlIHRvIGRvIHRoaXMg
ZXZlbiBpZiB3ZSBhcmUgZG9pbmcgcGVyLXBoYXNlIGR1bXBpbmcsCisgICAgLy8gc2luY2UgdGhl
IGZpbmFsIGdlbmVyYXRpb24gaXMgbm90IGEgcGhhc2UuCisgICAgaWYgKHNob3VsZER1bXBJUigp
KSB7CisgICAgICAgIGRhdGFMb2coIkFpciBhZnRlciAiLCBjb2RlLmxhc3RQaGFzZU5hbWUoKSwg
IiwgYmVmb3JlIGdlbmVyYXRpb246XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9
CisKKyAgICAvLyBBbmQgbm93LCB3ZSBnZW5lcmF0ZSBjb2RlLgorICAgIGppdC5lbWl0RnVuY3Rp
b25Qcm9sb2d1ZSgpOworICAgIGppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
LWNvZGUuZnJhbWVTaXplKCkpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OworCisgICAgR2VuZXJhdGlvbkNvbnRleHQgY29udGV4dDsKKyAgICBjb250ZXh0LmNvZGUgPSAm
Y29kZTsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6OkxhYmVsPiBibG9j
a0xhYmVscyhjb2RlLnNpemUoKSk7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdD4gYmxvY2tKdW1wcyhjb2RlLnNpemUoKSk7CisKKyAgICBhdXRvIGxpbmsg
PSBbJl0gKENDYWxsSGVscGVyczo6SnVtcCBqdW1wLCBCYXNpY0Jsb2NrKiB0YXJnZXQpIHsKKyAg
ICAgICAgaWYgKGJsb2NrTGFiZWxzW3RhcmdldF0uaXNTZXQoKSkgeworICAgICAgICAgICAganVt
cC5saW5rVG8oYmxvY2tMYWJlbHNbdGFyZ2V0XSwgJmppdCk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBibG9ja0p1bXBzW3RhcmdldF0uYXBwZW5kKGp1bXApOwor
ICAgIH07CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBi
bG9ja0p1bXBzW2Jsb2NrXS5saW5rKCZqaXQpOworICAgICAgICBBU1NFUlQoYmxvY2stPnNpemUo
KSA+PSAxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJsb2NrLT5zaXplKCkg
LSAxOyArK2kpIHsKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2st
PmF0KGkpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KGp1bXAsICFqdW1wLmlzU2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGJsb2NrLT5s
YXN0KCkub3Bjb2RlID09IEp1bXAKKyAgICAgICAgICAgICYmIGJsb2NrLT5zdWNjZXNzb3JCbG9j
aygwKSA9PSBjb2RlLmZpbmROZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgaWYgKGJsb2NrLT5sYXN0KCkub3Bjb2RlID09IFJldCkgeworICAgICAgICAg
ICAgLy8gV2UgY3VycmVudGx5IGRvbid0IHJlcHJlc2VudCB0aGUgZnVsbCBwcm9sb2d1ZS9lcGls
b2d1ZSBpbiBBaXIsIHNvIHdlIG5lZWQgdG8KKyAgICAgICAgICAgIC8vIGhhdmUgdGhpcyBvdmVy
cmlkZS4KKyAgICAgICAgICAgIGppdC5lbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOworICAgICAgICAg
ICAgaml0LnJldCgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBqdW1wID0gYmxvY2stPmxhc3QoKS5nZW5lcmF0
ZShqaXQsIGNvbnRleHQpOworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spCisgICAg
ICAgICAgICBqdW1wID0gaW5zdC5nZW5lcmF0ZShqaXQsIGNvbnRleHQpOworICAgICAgICBzd2l0
Y2ggKGJsb2NrLT5udW1TdWNjZXNzb3JzKCkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAg
ICAgQVNTRVJUKCFqdW1wLmlzU2V0KCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgMToKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBsaW5rKGp1
bXAsIGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAgICBpZiAoYmxvY2stPnN1
Y2Nlc3NvckJsb2NrKDEpICE9IGNvZGUuZmluZE5leHRCbG9jayhibG9jaykpCisgICAgICAgICAg
ICAgICAgbGluayhqaXQuanVtcCgpLCBibG9jay0+c3VjY2Vzc29yQmxvY2soMSkpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBmb3IgKGF1dG8mIGxhdGVQYXRoIDogY29udGV4dC5sYXRlUGF0aHMpCisgICAgICAgIGxh
dGVQYXRoLT5ydW4oaml0LCBjb250ZXh0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEFpckdlbmVyYXRlX2gKKyNkZWZpbmUgQWlyR2VuZXJhdGVfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKworbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgdGFr
ZXMgYW4gQWlyOjpDb2RlIHRoYXQgaGFzbid0IGhhZCBhbnkgc3RhY2sgYWxsb2NhdGlvbiBhbmQg
b3B0aW9uYWxseSBoYXNuJ3QgaGFkIGFueQorLy8gcmVnaXN0ZXIgYWxsb2NhdGlvbiBhbmQgZG9l
cyBib3RoIG9mIHRob3NlIHRoaW5ncywgYW5kIHRoZW4gZ2VuZXJhdGVzIHRoZSBjb2RlIHVzaW5n
IHRoZSBnaXZlbgorLy8gQ0NhbGxIZWxwZXJzIGluc3RhbmNlLiBOb3RlIHRoYXQgdGhpcyBtYXkg
Y2FsbCBjYWxsYmFja3MgaW4gdGhlIHN1cHBsaWVkIGNvZGUgYXMgaXQgaXMKKy8vIGdlbmVyYXRp
bmcuCit2b2lkIGdlbmVyYXRlKENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKKworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEFpckdlbmVyYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJHZW5lcmF0ZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGVkLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKy8vIFRoaXMgaXMgZ2VuZXJhdGVk
IGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisjaW5jbHVkZSAiQWlyT3Bjb2RlR2VuZXJhdGVkLmgi
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorI2RlZmlu
ZSBBaXJHZW5lcmF0aW9uQ29udGV4dF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQgeworICAgIHR5cGVkZWYg
dm9pZCBMYXRlUGF0aEZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jik7
CisgICAgdHlwZWRlZiBTaGFyZWRUYXNrPExhdGVQYXRoRnVuY3Rpb24+IExhdGVQYXRoOworCisg
ICAgVmVjdG9yPFJlZlB0cjxMYXRlUGF0aD4+IGxhdGVQYXRoczsKKyAgICBDb2RlKiBjb2RlOwor
fTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZl
cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckhh
bmRsZUNhbGxlZVNhdmVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0
LmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgaGFuZGxlQ2FsbGVlU2F2ZXMoQ29kZSYg
Y29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImhhbmRsZUNhbGxlZVNh
dmVzIik7CisKKyAgICBSZWdpc3RlclNldCB1c2VkQ2FsbGVlU2F2ZXM7CisKKyAgICBmb3IgKEJh
c2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxv
Y2spIHsKKyAgICAgICAgICAgIGluc3QuZm9yRWFjaFRtcEZhc3QoCisgICAgICAgICAgICAgICAg
WyZdIChUbXAmIHRtcCkgeworICAgICAgICAgICAgICAgICAgICAvLyBBdCBmaXJzdCB3ZSBqdXN0
IHJlY29yZCBhbGwgdXNlZCByZWdzLgorICAgICAgICAgICAgICAgICAgICB1c2VkQ2FsbGVlU2F2
ZXMuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBOb3cgd2UgZmlsdGVyIHRvIHJlYWxseSBnZXQgdGhlIGNhbGxlZSBzYXZlcy4K
KyAgICB1c2VkQ2FsbGVlU2F2ZXMuZmlsdGVyKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkpOworCisgICAgaWYgKCF1c2VkQ2FsbGVlU2F2ZXMubnVtYmVyT2ZTZXRSZWdpc3RlcnMo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgY29kZS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCkgPSBS
ZWdpc3RlckF0T2Zmc2V0TGlzdCh1c2VkQ2FsbGVlU2F2ZXMpOworCisgICAgc2l6ZV90IGJ5dGVT
aXplID0gMDsKKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5j
YWxsZWVTYXZlUmVnaXN0ZXJzKCkpCisgICAgICAgIGJ5dGVTaXplID0gc3RkOjptYXgoc3RhdGlj
X2Nhc3Q8c2l6ZV90PigtZW50cnkub2Zmc2V0KCkpLCBieXRlU2l6ZSk7CisKKyAgICBTdGFja1Ns
b3QqIHNhdmVzQXJlYSA9IGNvZGUuYWRkU3RhY2tTbG90KGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5k
OjpMb2NrZWQpOworICAgIC8vIFRoaXMgaXMgYSBiaXQgd2VpcmQgc2luY2Ugd2UgY291bGQgaGF2
ZSBhbHJlYWR5IHBpbm5lZCBhIGRpZmZlcmVudCBzdGFjayBzbG90IHRvIHRoaXMKKyAgICAvLyBh
cmVhLiBBbHNvLCBvdXIgcnVudGltZSBkb2VzIG5vdCByZXF1aXJlIHVzIHRvIHBpbiB0aGUgc2F2
ZXMgYXJlYS4gTWF5YmUgd2Ugc2hvdWxkbid0IHBpbiBpdD8KKyAgICBzYXZlc0FyZWEtPnNldE9m
ZnNldEZyb21GUCgtYnl0ZVNpemUpOworCisgICAgYXV0byBhcmdGb3IgPSBbJl0gKGNvbnN0IFJl
Z2lzdGVyQXRPZmZzZXQmIGVudHJ5KSAtPiBBcmcgeworICAgICAgICByZXR1cm4gQXJnOjpzdGFj
ayhzYXZlc0FyZWEsIGVudHJ5Lm9mZnNldCgpICsgYnl0ZVNpemUpOworICAgIH07CisKKyAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIAorICAgIC8vIEZpcnN0IGluc2Vy
dCBzYXZpbmcgY29kZSBpbiB0aGUgcHJvbG9ndWUuCisgICAgZm9yIChjb25zdCBSZWdpc3RlckF0
T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnQoCisgICAgICAgICAgICAwLCBlbnRyeS5yZWcoKS5pc0dQUigpID8g
TW92ZSA6IE1vdmVEb3VibGUsIGNvZGVbMF0tPmF0KDApLm9yaWdpbiwKKyAgICAgICAgICAgIFRt
cChlbnRyeS5yZWcoKSksIGFyZ0ZvcihlbnRyeSkpOworICAgIH0KKyAgICBpbnNlcnRpb25TZXQu
ZXhlY3V0ZShjb2RlWzBdKTsKKworICAgIC8vIE5vdyBpbnNlcnQgcmVzdG9yZSBjb2RlIGF0IGVw
aWxvZ3Vlcy4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBJ
bnN0JiBsYXN0ID0gYmxvY2stPmxhc3QoKTsKKyAgICAgICAgaWYgKGxhc3Qub3Bjb2RlICE9IFJl
dCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAoY29uc3QgUmVnaXN0ZXJB
dE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkgeworICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICBibG9jay0+c2l6ZSgpIC0g
MSwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBsYXN0Lm9yaWdpbiwK
KyAgICAgICAgICAgICAgICBhcmdGb3IoZW50cnkpLCBUbXAoZW50cnkucmVnKCkpKTsKKyAgICAg
ICAgfQorICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZl
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorI2RlZmluZSBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgcGhhc2UgaWRlbnRpZmllcyBj
YWxsZWUtc2F2ZSByZWdpc3RlcnMgYW5kIGFkZHMgY29kZSB0byBzYXZlL3Jlc3RvcmUgdGhlbSBp
biB0aGUKKy8vIHByb2xvZ3VlL2VwaWxvZ3VlIHRvIHRoZSBjb2RlLiBJdCdzIGEgbWFuZGF0b3J5
IHBoYXNlLgorCisvLyBGSVhNRTogSXQgd291bGQgYmUgY29vbCB0byBtYWtlIHRoaXMgbW9yZSBp
bnRlcmFjdGl2ZSB3aXRoIHRoZSBBaXIgY2xpZW50IGFuZCBhbHNvIG1vcmUKKy8vIHBvd2VyZnVs
LgorLy8gV2Ugc2hvdWxkIGhhdmUgc2hyaW5rIHdyYXBwaW5nOiBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU4CisvLyBXZSBzaG91bGQgbWFrZSB0aGlzIGludGVy
YWN0IHdpdGggdGhlIGNsaWVudDogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE1MDQ1OQorCit2b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmKTsKKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25T
ZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9p
ZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgZXhlY3V0
ZUluc2VydGlvbnMoYmxvY2stPm1faW5zdHMsIG1faW5zZXJ0aW9ucyk7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9u
U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc2VydGlvblNldF9oCisj
ZGVmaW5lIEFpckluc2VydGlvblNldF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4KKyNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIENvZGU7CisKK3R5cGVkZWYgV1RGOjpJbnNl
cnRpb248SW5zdD4gSW5zZXJ0aW9uOworCitjbGFzcyBJbnNlcnRpb25TZXQgeworcHVibGljOgor
ICAgIEluc2VydGlvblNldChDb2RlJiBjb2RlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAg
IHsKKyAgICB9CisKKyAgICBDb2RlJiBjb2RlKCkgeyByZXR1cm4gbV9jb2RlOyB9CisKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIHZvaWQgYXBwZW5kSW5zZXJ0aW9uKFQmJiBpbnNlcnRp
b24pCisgICAgeworICAgICAgICBtX2luc2VydGlvbnMuYXBwZW5kKHN0ZDo6Zm9yd2FyZDxUPihp
bnNlcnRpb24pKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZv
aWQgaW5zZXJ0SW5zdChzaXplX3QgaW5kZXgsIEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAg
YXBwZW5kSW5zZXJ0aW9uKEluc2VydGlvbihpbmRleCwgc3RkOjpmb3J3YXJkPEluc3Q+KGluc3Qp
KSk7CisgICAgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAg
ICB2b2lkIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAg
ICB7CisgICAgICAgIGluc2VydEluc3QoaW5kZXgsIEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50
cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIHZvaWQgZXhlY3V0ZShCYXNpY0Jsb2Nr
Kik7CisKK3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIFZlY3RvcjxJbnNlcnRpb24s
IDg+IG1faW5zZXJ0aW9uczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnNlcnRpb25TZXRf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckluc3Qu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisjaW5jbHVk
ZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKwordm9pZCBJbnN0OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgb3V0LnByaW50KG9wY29kZSwgIiAiLCBsaXN0RHVtcChhcmdzKSk7CisgICAgaWYgKG9y
aWdpbikgeworICAgICAgICBpZiAoYXJncy5zaXplKCkpCisgICAgICAgICAgICBvdXQucHJpbnQo
IiwgIik7CisgICAgICAgIG91dC5wcmludCgqb3JpZ2luKTsKKyAgICB9Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3QuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQWlySW5zdF9oCisjZGVmaW5lIEFpckluc3RfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUgIkFpck9wY29kZS5oIgorI2lu
Y2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgQ0NhbGxI
ZWxwZXJzOworY2xhc3MgUmVnaXN0ZXJTZXQ7CisKK25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZh
bHVlOworCituYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVyYXRpb25Db250ZXh0OworCitz
dHJ1Y3QgSW5zdCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8QXJnLCAzPiBBcmdMaXN0
OworCisgICAgSW5zdCgpCisgICAgICAgIDogb3JpZ2luKG51bGxwdHIpCisgICAgICAgICwgb3Bj
b2RlKE5vcCkKKyAgICB7CisgICAgfQorICAgIAorICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFs
dWUqIG9yaWdpbikKKyAgICAgICAgOiBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShv
cGNvZGUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBBcmcgYXJnLCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3N7IGFyZywgYXJndW1lbnRzLi4u
IH0KKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9wY29kZShvcGNvZGUpCisg
ICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIG9yaWdpbiwgY29u
c3QgQXJnTGlzdCYgYXJndW1lbnRzKQorICAgICAgICA6IGFyZ3MoYXJndW1lbnRzKQorICAgICAg
ICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAg
fQorCisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBBcmdMaXN0JiYgYXJn
dW1lbnRzKQorICAgICAgICA6IGFyZ3MoV1RGOjptb3ZlKGFyZ3VtZW50cykpCisgICAgICAgICwg
b3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisK
KyAgICAvLyBOb3RlIHRoYXQgdGhlc2UgZnVuY3RvcnMgYWxsIGF2b2lkIHVzaW5nICJjb25zdCIg
YmVjYXVzZSB3ZSB3YW50IHRvIHVzZSB0aGVtIGZvciB0aGluZ3MgdGhhdAorICAgIC8vIGVkaXQg
SVIuIElSIGlzIG1lYW50IHRvIGJlIGVkaXRlZDsgaWYgeW91J3JlIGNhcnJ5aW5nIGFyb3VuZCBh
ICJjb25zdCBJbnN0JiIgdGhlbiB5b3UncmUKKyAgICAvLyBwcm9iYWJseSBkb2luZyBpdCB3cm9u
Zy4KKworICAgIC8vIFRoaXMgb25seSB3YWxrcyB0aG9zZSBUbXBzIHRoYXQgYXJlIGV4cGxpY2l0
bHkgbWVudGlvbmVkLCBhbmQgaXQgZG9lc24ndCB0ZWxsIHlvdSB0aGVpciByb2xlCisgICAgLy8g
b3IgdHlwZS4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFj
aFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGZvciAoQXJn
JiBhcmcgOiBhcmdzKQorICAgICAgICAgICAgYXJnLmZvckVhY2hUbXBGYXN0KGZ1bmN0b3IpOwor
ICAgIH0KKworICAgIHR5cGVkZWYgdm9pZCBFYWNoQXJnQ2FsbGJhY2soQXJnJiwgQXJnOjpSb2xl
LCBBcmc6OlR5cGUpOworICAgIAorICAgIC8vIENhbGxzIHRoZSBmdW5jdG9yIHdpdGggKGFyZywg
cm9sZSwgdHlwZSkuIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkKKyAgICAvLyBv
cGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAg
dm9pZCBmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIENhbGxzIHRoZSBmdW5j
dG9yIHdpdGggKHRtcCwgcm9sZSwgdHlwZSkuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KKyAgICB2b2lkIGZvckVhY2hUbXAoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7Cisg
ICAgICAgIGZvckVhY2hBcmcoCisgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUg
cm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICBhcmcuZm9yRWFjaFRtcChy
b2xlLCB0eXBlLCBmdW5jdG9yKTsKKyAgICAgICAgICAgIH0pOworICAgIH0KKworICAgIC8vIFRo
aW5nIGNhbiBiZSBlaXRoZXIgQXJnIG9yIFRtcC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUaGlu
ZywgdHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYpOwor
CisgICAgLy8gUmV0dXJucyB0cnVlIGlmIHRoaXMgaW5zdHJ1Y3Rpb24gaGFzIGEgU3BlY2lhbCou
IFRoaXMgdW5sb2NrcyBzb21lIGV4dHJhIGZ1bmN0aW9uYWxpdHkuCisgICAgYm9vbCBoYXNTcGVj
aWFsKCkgY29uc3Q7CisKKyAgICAvLyBSZXBvcnRzIGFueSBhZGRpdGlvbmFsIHJlZ2lzdGVycyBj
bG9iYmVyZWQgYnkgdGhpcyBvcGVyYXRpb24uIE5vdGUgdGhhdCBmb3IgZWZmaWNpZW5jeSwKKyAg
ICAvLyBleHRyYUNsb2JiZXJlZFJlZ3MoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1
cm5zIHRydWUuCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncygpOwor
CisgICAgLy8gVXNlIHRoaXMgdG8gcmVwb3J0IHdoaWNoIHJlZ2lzdGVycyBhcmUgbGl2ZS4gVGhp
cyBzaG91bGQgYmUgZG9uZSBqdXN0IGJlZm9yZSBjb2RlZ2VuLiBOb3RlCisgICAgLy8gdGhhdCBm
b3IgZWZmaWNpZW5jeSwgcmVwb3J0VXNlZFJlZ2lzdGVycygpIG9ubHkgd29ya3MgaWYgaGFzU3Bl
Y2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICB2b2lkIHJlcG9ydFVzZWRSZWdpc3RlcnMoY29uc3Qg
UmVnaXN0ZXJTZXQmKTsKKworICAgIC8vIElzIHRoaXMgaW5zdHJ1Y3Rpb24gaW4gb25lIG9mIHRo
ZSB2YWxpZCBmb3JtcyByaWdodCBub3c/IFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQg
YnkKKyAgICAvLyBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgaXNWYWxpZEZvcm0oKTsK
KworICAgIC8vIEFzc3VtaW5nIHRoaXMgaW5zdHJ1Y3Rpb24gaXMgaW4gYSB2YWxpZCBmb3JtIHJp
Z2h0IG5vdywgd2lsbCBpdCBzdGlsbCBiZSBpbiBvbmUgb2YgdGhlIHZhbGlkCisgICAgLy8gZm9y
bXMgaWYgd2UgcHV0IGFuIEFkZHIgcmVmZXJlbmNpbmcgdGhlIHN0YWNrIChvciBhIFN0YWNrU2xv
dCBvciBDYWxsQXJnLCBvZiBjb3Vyc2UpIGluIHRoZQorICAgIC8vIGdpdmVuIGluZGV4PyBTcGls
bGluZyB1c2VzIHRoaXM6IGl0IHdhbGtzIHRoZSBhcmdzIGJ5IGluZGV4IHRvIGZpbmQgVG1wcyB0
aGF0IG5lZWQgc3BpbGxpbmc7CisgICAgLy8gaWYgaXQgZmluZHMgb25lLCBpdCBjYWxscyB0aGlz
IHRvIHNlZSBpZiBpdCBjYW4gcmVwbGFjZSB0aGUgQXJnOjpUbXAgd2l0aCBhbiBBcmc6OkFkZHIu
IElmIGl0CisgICAgLy8gZmluZHMgYSBub24tVG1wIEFyZywgdGhlbiBpdCBjYWxscyB0aGF0IEFy
ZydzIGZvckVhY2hUbXAgdG8gZG8gYSByZXBsYWNlbWVudCB0aGF0IHdheS4KKyAgICAvLworICAg
IC8vIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5y
Yi4KKyAgICBib29sIGFkbWl0c1N0YWNrKHVuc2lnbmVkIGFyZ0luZGV4KTsKKworICAgIC8vIEdl
bmVyYXRlIHNvbWUgY29kZSBmb3IgdGhpcyBpbnN0cnVjdGlvbi4gVGhpcyBpcywgbGlrZSwgbGl0
ZXJhbGx5IG91ciBiYWNrZW5kLiBJZiB0aGlzIGlzIHRoZQorICAgIC8vIHRlcm1pbmFsLCBpdCBy
ZXR1cm5zIHRoZSBqdW1wIHRoYXQgbmVlZHMgdG8gYmUgbGlua2VkIGZvciB0aGUgInRoZW4iIGNh
c2UsIHdpdGggdGhlICJlbHNlIgorICAgIC8vIGNhc2UgYmVpbmcgZmFsbC10aHJvdWdoLiBUaGlz
IGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250
ZXh0Jik7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIEFyZ0xp
c3QgYXJnczsKKyAgICBWYWx1ZSogb3JpZ2luOyAvLyBUaGUgQjM6OlZhbHVlIHRoYXQgdGhpcyBv
cmlnaW5hdGVkIGZyb20uCisgICAgT3Bjb2RlIG9wY29kZTsKK307CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJJbnN0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlySW5z
dElubGluZXNfaAorI2RlZmluZSBBaXJJbnN0SW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkFpck9wY29kZVV0aWxzLmgiCisj
aW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2Ug
QWlyIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IEZvckVhY2g7Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBGb3JFYWNoPFRtcD4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Cisg
ICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoVG1wKGZ1bmN0b3IpOworICAgIH0KK307Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBGb3JFYWNoPEFyZz4geworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CisgICAgc3RhdGljIHZvaWQgZm9yRWFjaChJbnN0JiBpbnN0LCBjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgaW5zdC5mb3JFYWNoQXJnKGZ1bmN0b3IpOworICAg
IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgordm9p
ZCBJbnN0Ojpmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit7CisgICAgRm9yRWFjaDxU
aGluZz46OmZvckVhY2goKnRoaXMsIGZ1bmN0b3IpOworfQorCitpbmxpbmUgYm9vbCBJbnN0Ojpo
YXNTcGVjaWFsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gYXJncy5zaXplKCkgJiYgYXJnc1swXS5p
c1NwZWNpYWwoKTsKK30KKworaW5saW5lIGNvbnN0IFJlZ2lzdGVyU2V0JiBJbnN0OjpleHRyYUNs
b2JiZXJlZFJlZ3MoKQoreworICAgIEFTU0VSVChoYXNTcGVjaWFsKCkpOworICAgIHJldHVybiBh
cmdzWzBdLnNwZWNpYWwoKS0+ZXh0cmFDbG9iYmVyZWRSZWdzKCp0aGlzKTsKK30KKworaW5saW5l
IHZvaWQgSW5zdDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycykKK3sKKyAgICBBU1NFUlQoaGFzU3BlY2lhbCgpKTsKKyAgICBhcmdzWzBdLnNwZWNp
YWwoKS0+cmVwb3J0VXNlZFJlZ2lzdGVycygqdGhpcywgdXNlZFJlZ2lzdGVycyk7Cit9CisKK2lu
bGluZSBib29sIGlzU2hpZnRWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworI2lmIENQVShYODYp
IHx8IENQVShYODZfNjQpCisgICAgcmV0dXJuIGluc3QuYXJnc1swXSA9PSBUbXAoWDg2UmVnaXN0
ZXJzOjplY3gpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oaW5zdCk7CisgICAgcmV0dXJuIHRy
dWU7CisjZW5kaWYKK30gICAKKworaW5saW5lIGJvb2wgaXNMc2hpZnQzMlZhbGlkKGNvbnN0IElu
c3QmIGluc3QpCit7CisgICAgcmV0dXJuIGlzU2hpZnRWYWxpZChpbnN0KTsKK30KKworfSB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEFpckluc3RJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpckxpdmVuZXNzX2gKKyNkZWZpbmUgQWlyTGl2ZW5lc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgi
CisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKKy8vIFlvdSBjYW4gY29tcHV0ZSBsaXZlbmVzcyBvdmVyIFRt
cCdzIG9yIG92ZXIgQXJnJ3MuIElmIHlvdSBjb21wdXRlIG92ZXIgQXJnJ3MsIHlvdSBnZXQgYm90
aAorLy8gc3RhY2sgbGl2ZW5lc3MgYW5kIHRtcCBsaXZlbmVzcy4KK3RlbXBsYXRlPHR5cGVuYW1l
IFRoaW5nPgorY2xhc3MgTGl2ZW5lc3MgeworcHVibGljOgorICAgIExpdmVuZXNzKENvZGUmIGNv
ZGUpCisgICAgeworICAgICAgICBtX2xpdmVBdEhlYWQucmVzaXplKGNvZGUuc2l6ZSgpKTsKKyAg
ICAgICAgbV9saXZlQXRUYWlsLnJlc2l6ZShjb2RlLnNpemUoKSk7CisKKyAgICAgICAgSW5kZXhT
ZXQ8QmFzaWNCbG9jaz4gc2VlbjsKKworICAgICAgICBib29sIGNoYW5nZWQgPSB0cnVlOworICAg
ICAgICB3aGlsZSAoY2hhbmdlZCkgeworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNlOworCisg
ICAgICAgICAgICBmb3IgKHNpemVfdCBibG9ja0luZGV4ID0gY29kZS5zaXplKCk7IGJsb2NrSW5k
ZXgtLTspIHsKKyAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGNvZGUuYXQoYmxv
Y2tJbmRleCk7CisgICAgICAgICAgICAgICAgTG9jYWxDYWxjIGxvY2FsQ2FsYygqdGhpcywgYmxv
Y2spOworICAgICAgICAgICAgICAgIGZvciAoc2l6ZV90IGluc3RJbmRleCA9IGJsb2NrLT5zaXpl
KCk7IGluc3RJbmRleC0tOykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUo
YmxvY2stPmF0KGluc3RJbmRleCkpOworICAgICAgICAgICAgICAgIGJvb2wgZmlyc3RUaW1lID0g
c2Vlbi5hZGQoYmxvY2spOworICAgICAgICAgICAgICAgIGlmICghZmlyc3RUaW1lICYmIGxvY2Fs
Q2FsYy5saXZlKCkgPT0gbV9saXZlQXRIZWFkW2Jsb2NrXSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA6IGJsb2NrLT5wcmVkZWNlc3NvcnMoKSkg
eworICAgICAgICAgICAgICAgICAgICBtX2xpdmVBdFRhaWxbcHJlZGVjZXNzb3JdLmFkZCgKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2FsQ2FsYy5saXZlKCkuYmVnaW4oKSwgbG9jYWxDYWxj
LmxpdmUoKS5lbmQoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1fbGl2
ZUF0SGVhZFtibG9ja10gPSBsb2NhbENhbGMudGFrZUxpdmUoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGNvbnN0IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRIZWFkKEJh
c2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0SGVh
ZFtibG9ja107CisgICAgfQorCisgICAgY29uc3QgSGFzaFNldDxUaGluZz4mIGxpdmVBdFRhaWwo
QmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9saXZlQXRU
YWlsW2Jsb2NrXTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGNhbGN1bGF0b3IgaGFzIHRvIGJlIHJ1
biBpbiByZXZlcnNlLgorICAgIGNsYXNzIExvY2FsQ2FsYyB7CisgICAgcHVibGljOgorICAgICAg
ICBMb2NhbENhbGMoTGl2ZW5lc3MmIGxpdmVuZXNzLCBCYXNpY0Jsb2NrKiBibG9jaykKKyAgICAg
ICAgICAgIDogbV9saXZlKGxpdmVuZXNzLmxpdmVBdFRhaWwoYmxvY2spKQorICAgICAgICB7Cisg
ICAgICAgIH0KKworICAgICAgICBjb25zdCBIYXNoU2V0PFRoaW5nPiYgbGl2ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbGl2ZTsgfQorICAgICAgICBIYXNoU2V0PFRoaW5nPiYmIHRha2VMaXZlKCkgeyBy
ZXR1cm4gV1RGOjptb3ZlKG1fbGl2ZSk7IH0KKworICAgICAgICB2b2lkIGV4ZWN1dGUoSW5zdCYg
aW5zdCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gRmlyc3QgaGFuZGxlIGRlZidzLgorICAg
ICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAgICAgICBbdGhpc10gKFRo
aW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbGl2ZS5yZW1vdmUoYXJnKTsKKyAgICAgICAgICAgICAgICB9KTsKKworICAg
ICAgICAgICAgLy8gTmV4dCBoYW5kbGUgY2xvYmJlcmVkIHJlZ2lzdGVycy4KKyAgICAgICAgICAg
IGlmIChpbnN0Lmhhc1NwZWNpYWwoKSkgeworICAgICAgICAgICAgICAgIGluc3QuZXh0cmFDbG9i
YmVyZWRSZWdzKCkuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICAgICAgW3RoaXNdIChSZWcgcmVn
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKFRoaW5nKFRtcChyZWcp
KSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
CisgICAgICAgICAgICAvLyBGaW5hbGx5IGhhbmRsZSB1c2Uncy4KKyAgICAgICAgICAgIGluc3Qu
Zm9yRWFjaDxUaGluZz4oCisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlz
QWxpdmUoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNVc2Uocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xp
dmUuYWRkKGFyZyk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0KKworICAgIHByaXZh
dGU6CisgICAgICAgIEhhc2hTZXQ8VGhpbmc+IG1fbGl2ZTsKKyAgICB9OworICAgIAorcHJpdmF0
ZToKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBIYXNoU2V0PFRoaW5nPj4gbV9saXZlQXRIZWFk
OworICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdFRhaWw7
Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyTGl2ZW5lc3NfaAorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2RlLm9wY29kZXMJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTYyIEBACisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJl
IG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMg
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorCisjIFN5bGxhYnVzOgorIworIyBSb2xlcyBhbmQgdHlwZXM6CisjIFU6RyA9PiB1c2Ug
b2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3IgdmFsdWUKKyMgRDpHID0+IGRlZiBvZiBh
IGdlbmVyYWwtcHVycG9zZSByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpHID0+IHVzZSBhbmQgZGVm
IG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9yIHZhbHVlCisjIFU6RiA9PiB1c2Ugb2Yg
YSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBEOkYgPT4gZGVmIG9mIGEgZmxvYXQgcmVnaXN0
ZXIgb3IgdmFsdWUKKyMgVUQ6RiA9PiB1c2UgYW5kIGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9y
IHZhbHVlCisjCisjIEFyZ3VtZW50IGtpbmRzOgorIyBUbXAgPT4gdGVtcG9yYXJ5IG9yIHJlZ2lz
dGVyCisjIEltbSA9PiAzMi1iaXQgaW1tZWRpYXRlIGludAorIyBJbW02NCA9PiBUcnVzdGVkSW1t
NjQKKyMgQWRkciA9PiBhZGRyZXNzIGFzIHRlbXBvcmFyeS9yZWdpc3RlcitvZmZzZXQKKyMgSW5k
ZXggPT4gQmFzZUluZGV4IGFkZHJlc3MKKyMgQWJzID0+IEFic29sdXRlQWRkcmVzcworIworIyBU
aGUgcGFyc2VyIHZpZXdzIHRoZXNlIHRoaW5ncyBhcyBrZXl3b3JkcywgYW5kIHVuZGVyc3RhbmRz
IHRoYXQgdGhleSBmYWxsIGludG8gdHdvIGRpc3RpbmN0IGNsYXNzZXMKKyMgb2YgdGhpbmdzLiBT
bywgYWx0aG91Z2ggdGhpcyBmaWxlIHVzZXMgYSBwYXJ0aWN1bGFyIGluZGVudGF0aW9uIHN0eWxl
LCBub25lIG9mIHRoZSB3aGl0ZXNwYWNlIG9yCisjIGV2ZW4gbmV3bGluZXMgYXJlIG1lYW5pbmdm
dWwgdG8gdGhlIHBhcnNlci4gRm9yIGV4YW1wbGUsIHlvdSBjb3VsZCB3cml0ZToKKyMKKyMgRm9v
NDIgVTpHLCBVRDpGIEltbSwgVG1wIEFkZHIsIFRtcAorIworIyBBbmQgdGhlIHBhcnNlciB3b3Vs
ZCBrbm93IHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhczoKKyMKKyMgRm9vNDIgVTpHLCBVRDpGCisj
ICAgICBJbW0sIFRtcAorIyAgICAgQWRkciwgVG1wCisjCisjIEkuZS4gYSB0d28tZm9ybSBpbnN0
cnVjdGlvbiB0aGF0IHVzZXMgYSBHUFIgb3IgYW4gaW50IGltbWVkaWF0ZSBhbmQgdXNlcytkZWZz
IGEgZmxvYXQgcmVnaXN0ZXIuCisKKyMgTm90ZSB0aGF0IHRoZSBvcGNvZGVzIGhlcmUgaGF2ZSBh
IGxlYWRpbmcgY2FwaXRhbCAoQWRkMzIpIGJ1dCBtdXN0IGNvcnJlc3BvbmQgdG8gTWFjcm9Bc3Nl
bWJsZXIKKyMgQVBJIHRoYXQgaGFzIGEgbGVhZGluZyBsb3dlci1jYXNlIChhZGQzMikuCisKK05v
cAorCitBZGQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIElt
bSwgVG1wCisgICAgQWRkciwgVG1wCisgICAgVG1wLCBBZGRyCisKK0FkZDMyIFU6RywgVTpHLCBE
OkcKKyAgICBJbW0sIFRtcCwgVG1wCisKK0FkZDY0IFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisg
ICAgSW1tLCBBZGRyCisgICAgSW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKworQWRkNjQgVTpHLCBV
OkcsIEQ6RworICAgIEltbSwgVG1wLCBUbXAKKworQW5kMzIgVTpHLCBVRDpHCisgICAgVG1wLCBU
bXAKKyAgICBJbW0sIFRtcAorICAgIFRtcCwgQWRkcgorICAgIEFkZHIsIFRtcAorICAgIEltbSwg
QWRkcgorCitBbmQ2NCBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisKK0xz
aGlmdDMyIFU6RywgVUQ6RworICAgIFRtcCosIFRtcAorICAgIEltbSwgVG1wCisKK011bDMyIFU6
RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wCisKKyMgTm90ZSB0aGF0IE1vdmUg
b3BlcmF0ZXMgb3ZlciB0aGUgZnVsbCByZWdpc3RlciBzaXplLCB3aGljaCBpcyBlaXRoZXIgMzIt
Yml0IG9yIDY0LWJpdCBkZXBlbmRpbmcgb24KKyMgdGhlIHBsYXRmb3JtLiBJJ20gbm90IGVudGly
ZWx5IHN1cmUgdGhhdCB0aGlzIGlzIGEgZ29vZCB0aGluZzsgaXQgbWlnaHQgYmUgYmV0dGVyIHRv
IGp1c3QgaGF2ZSBhCisjIE1vdmU2NCBpbnN0cnVjdGlvbi4gT1RPSCwgb3VyIE1hY3JvQXNzZW1i
bGVycyBhbHJlYWR5IGhhdmUgdGhpcyBub3Rpb24gb2YgIm1vdmUoKSIgdGhhdCBiYXNpY2FsbHkK
KyMgbWVhbnMgbW92ZVB0ci4KK01vdmUgVTpHLCBEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwg
VG1wCisgICAgSW1tNjQsIFRtcAorICAgIEFkZHIsIFRtcCBhcyBsb2FkUHRyICMgVGhpcyBtZWFu
cyB0aGF0ICJNb3ZlIEFkZHIsIFRtcCIgaXMgY29kZS1nZW5lcmF0ZWQgYXMgImxvYWQiIG5vdCAi
bW92ZSIuCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkUHRyCisgICAgVG1wLCBBZGRyIGFzIHN0b3Jl
UHRyCisgICAgVG1wLCBJbmRleCBhcyBzdG9yZVB0cgorCitNb3ZlMzIgVTpHLCBEOkcKKyAgICBU
bXAsIFRtcCBhcyB6ZXJvRXh0ZW5kMzJUb1B0cgorICAgIEFkZHIsIFRtcCBhcyBsb2FkMzIKKyAg
ICBJbmRleCwgVG1wIGFzIGxvYWQzMgorICAgIFRtcCwgQWRkciBhcyBzdG9yZTMyCisgICAgVG1w
LCBJbmRleCBhcyBzdG9yZTMyCisKK01vdmVEb3VibGUgVTpGLCBEOkYKKyAgICBUbXAsIFRtcAor
ICAgIEFkZHIsIFRtcCBhcyBsb2FkRG91YmxlCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkRG91Ymxl
CisgICAgVG1wLCBBZGRyIGFzIHN0b3JlRG91YmxlCisgICAgVG1wLCBJbmRleCBhcyBzdG9yZURv
dWJsZQorCitNb3ZlNjRUb0RvdWJsZSBVOkcsIEQ6RgorICAgIFRtcCwgVG1wCisKK01vdmVEb3Vi
bGVUbzY0IFU6RiwgRDpHCisgICAgVG1wLCBUbXAKKworQnJhbmNoQWRkMzIgVTpHLCBVOkcsIFVE
OkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAK
KyAgICBSZXNDb25kLCBJbW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXND
b25kLCBBZGRyLCBUbXAKKworQnJhbmNoTXVsMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAg
IFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaFN1YjMy
IFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0Nv
bmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAgUmVzQ29uZCwgVG1wLCBB
ZGRyCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE5lZzMyIFU6RywgVUQ6RyAvYnJh
bmNoCisgICAgUmVzQ29uZCwgVG1wCisKK0p1bXAgL2JyYW5jaAorCitSZXQgL3Rlcm1pbmFsCisK
K0JyZWFrcG9pbnQgL3Rlcm1pbmFsCisKKyMgQWlyIGFsbG93cyBmb3IgZXhvdGljIGJlaGF2aW9y
LiBBIFBhdGNoJ3MgYmVoYXZpb3IgaXMgZGV0ZXJtaW5lZCBlbnRpcmVseSBieSB0aGUgU3BlY2lh
bCBvcGVyYW5kLAorIyB3aGljaCBtdXN0IGJlIHRoZSBmaXJzdCBvcGVyYW5kLgorc3BlY2lhbCBQ
YXRjaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VT
Y29wZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clBoYXNlU2NvcGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJC
M0NvbW1vbi5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK1BoYXNlU2NvcGU6OlBoYXNlU2NvcGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogbmFt
ZSkKKyAgICA6IG1fY29kZShjb2RlKQorICAgICwgbV9uYW1lKG5hbWUpCit7CisgICAgaWYgKHNo
b3VsZER1bXBJUkF0RWFjaFBoYXNlKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGFmdGVyICIs
IGNvZGUubGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAg
ICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIGlmIChzaG91bGRTYXZlSVJCZWZvcmVQaGFz
ZSgpKQorICAgICAgICBtX2R1bXBCZWZvcmUgPSB0b0NTdHJpbmcoY29kZSk7Cit9CisKK1BoYXNl
U2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBtX2NvZGUuc2V0TGFzdFBoYXNlTmFtZShtX25h
bWUpOworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkKKyAgICAgICAgdmFs
aWRhdGUobV9jb2RlLCBtX2R1bXBCZWZvcmUuZGF0YSgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclBoYXNlU2NvcGVfaAorI2RlZmluZSBBaXJQaGFzZVNj
b3BlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworY2xhc3MgUGhhc2VT
Y29wZSB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6Cisg
ICAgUGhhc2VTY29wZShDb2RlJiwgY29uc3QgY2hhciogbmFtZSk7CisgICAgflBoYXNlU2NvcGUo
KTsgLy8gdGhpcyBkb2VzIHZhbGlkYXRpb24KKworcHJpdmF0ZToKKyAgICBDb2RlJiBtX2NvZGU7
CisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsK
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKworI2VuZGlmIC8vIEFpclBoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3Jp
dHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTA0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiUmVnaXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRl
cigpCit7CisgICAgc3RhdGljIFZlY3RvcjxHUFJSZWc+KiByZXN1bHQ7CisgICAgc3RhdGljIHN0
ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9uY2UsCisg
ICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8R1BSUmVnPigpOwor
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFsbEdQUnMoKTsKKyAg
ICAgICAgICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAg
ICAgICAgICAgIGFsbC5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0
ZXJzKCkpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgY2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAg
ICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjYWxs
ZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQo
cmVnLmdwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIGFsbC5mb3JFYWNo
KAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+
YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH0pOworICAg
IHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3Jp
dHlPcmRlcigpCit7CisgICAgc3RhdGljIFZlY3RvcjxGUFJSZWc+KiByZXN1bHQ7CisgICAgc3Rh
dGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxsX29uY2UoCisgICAgICAgIG9u
Y2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IG5ldyBWZWN0b3I8RlBSUmVn
PigpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQgYWxsID0gUmVnaXN0ZXJTZXQ6OmFsbEZQUnMo
KTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2Fs
bGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAg
ICAgICAgWyZdIChSZWcgcmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2
ZS5nZXQocmVnKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5m
cHIoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAg
ICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNh
bGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVu
ZChyZWcuZnByKCkpOworICAgICAgICAgICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1
cm4gKnJlc3VsdDsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJlZ3NJblByaW9yaXR5T3JkZXIo
QXJnOjpUeXBlIHR5cGUpCit7CisgICAgc3RhdGljIFZlY3RvcjxSZWc+KiByZXN1bHRbQXJnOjpu
dW1UeXBlc107CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2U7CisgICAgc3RkOjpjYWxs
X29uY2UoCisgICAgICAgIG9uY2UsCisgICAgICAgIFtdIHsKKyAgICAgICAgICAgIHJlc3VsdFtB
cmc6OkdQXSA9IG5ldyBWZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChHUFJSZWcgcmVn
IDogZ3Byc0luUHJpb3JpdHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkdQ
XS0+YXBwZW5kKFJlZyhyZWcpKTsKKyAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXSA9IG5ldyBW
ZWN0b3I8UmVnPigpOworICAgICAgICAgICAgZm9yIChGUFJSZWcgcmVnIDogZnByc0luUHJpb3Jp
dHlPcmRlcigpKQorICAgICAgICAgICAgICAgIHJlc3VsdFtBcmc6OkZQXS0+YXBwZW5kKFJlZyhy
ZWcpKTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHRbdHlwZV07Cit9CisKK30gfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJp
b3JpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
UmVnaXN0ZXJQcmlvcml0eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJSZWdp
c3RlclByaW9yaXR5X2gKKyNkZWZpbmUgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiRlBSSW5mby5oIgor
I2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9yPEdQ
UlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKTsKK2NvbnN0IFZlY3RvcjxGUFJSZWc+JiBmcHJz
SW5Qcmlvcml0eU9yZGVyKCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+IHN0cnVjdCBSZWdp
c3RlcnNJblByaW9yaXR5T3JkZXI7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBSZWdpc3RlcnNJblByaW9y
aXR5T3JkZXI8R1BSSW5mbz4geworICAgIGNvbnN0IFZlY3RvcjxHUFJSZWc+JiBpblByaW9yaXR5
T3JkZXIoKSB7IHJldHVybiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7IH0KK307Cit0ZW1wbGF0ZTw+
IHN0cnVjdCBSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8RlBSSW5mbz4geworICAgIGNvbnN0IFZl
Y3RvcjxGUFJSZWc+JiBpblByaW9yaXR5T3JkZXIoKSB7IHJldHVybiBmcHJzSW5Qcmlvcml0eU9y
ZGVyKCk7IH0KK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhbms+Citjb25zdCBWZWN0b3I8dHlw
ZW5hbWUgQmFuazo6UmVnaXN0ZXJUeXBlPiYgcmVnc0luUHJpb3JpdHlPcmRlcigpCit7CisgICAg
cmV0dXJuIFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxCYW5rPjo6aW5Qcmlvcml0eU9yZGVyKCk7
Cit9CisKK2NvbnN0IFZlY3RvcjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSk7
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBBaXJSZWdpc3RlclByaW9yaXR5X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29u
c3QgY2hhciogY29uc3QgU3BlY2lhbDo6ZHVtcFByZWZpeCA9ICImIjsKKworU3BlY2lhbDo6U3Bl
Y2lhbCgpCisgICAgOiBtX2luZGV4KFVJTlRfTUFYKQoreworfQorCitTcGVjaWFsOjp+U3BlY2lh
bCgpCit7Cit9CisKK0NTdHJpbmcgU3BlY2lhbDo6bmFtZSgpIGNvbnN0Cit7CisgICAgU3RyaW5n
UHJpbnRTdHJlYW0gb3V0OworICAgIGR1bXBJbXBsKG91dCk7CisgICAgcmV0dXJuIG91dC50b0NT
dHJpbmcoKTsKK30KKwordm9pZCBTcGVjaWFsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KGR1bXBQcmVmaXgpOworICAgIGR1bXBJbXBsKG91dCk7CisgICAg
aWYgKG1faW5kZXggIT0gVUlOVF9NQVgpCisgICAgICAgIG91dC5wcmludChtX2luZGV4KTsKK30K
Kwordm9pZCBTcGVjaWFsOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAg
IG91dC5wcmludCgqdGhpcywgIjogIik7CisgICAgZGVlcER1bXBJbXBsKG91dCk7Cit9CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BlY2lhbF9oCisjZGVmaW5lIEFpclNwZWNp
YWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNs
dWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3Ry
dWN0IEdlbmVyYXRpb25Db250ZXh0OworCitjbGFzcyBTcGVjaWFsIHsKKyAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShTcGVjaWFsKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKyAgICAKKyAgICBT
cGVjaWFsKCk7CisgICAgdmlydHVhbCB+U3BlY2lhbCgpOworCisgICAgQ1N0cmluZyBuYW1lKCkg
Y29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgZm9yRWFjaEFyZyhJbnN0JiwgY29uc3QgU2NvcGVk
TGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSA9IDA7CisgICAgdmlydHVhbCBib29sIGlz
VmFsaWQoSW5zdCYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgYWRtaXRzU3RhY2soSW5zdCYsIHVu
c2lnbmVkIGFyZ0luZGV4KSA9IDA7CisKKyAgICAvLyBUaGlzIGdldHMgY2FsbGVkIG9uIGZvciBl
YWNoIEluc3QgdGhhdCB1c2VzIHRoaXMgU3BlY2lhbC4gTm90ZSB0aGF0IHRoZXJlIGlzIG5vIHdh
eSB0bworICAgIC8vIGd1YXJhbnRlZSB0aGF0IGEgU3BlY2lhbCBnZXRzIHVzZWQgZnJvbSBqdXN0
IG9uZSBJbnN0LCBiZWNhdXNlIEFpciBtaWdodCB0YWlsZHVwIGxhdGUuIFNvLAorICAgIC8vIGlm
IHlvdSB3YW50IHRvIHBhc3MgdGhpcyBpbmZvcm1hdGlvbiBkb3duIHRvIGdlbmVyYXRlKCksIHRo
ZW4geW91IGhhdmUgdG8gZWl0aGVyOgorICAgIC8vCisgICAgLy8gMSkgR2VuZXJhdGUgQWlyIHRo
YXQgc3RhcnRzIHdpdGggYSBzZXBhcmF0ZSBTcGVjaWFsIHBlciBQYXRjaCBJbnN0LCBhbmQgdGhl
biBtZXJnZQorICAgIC8vICAgIHVzZWRSZWdpc3RlciBzZXRzLiBUaGlzIGlzIHByb2JhYmx5IG5v
dCBncmVhdCwgYnV0IGl0IG9wdGltaXplcyBmb3IgdGhlIGNvbW1vbiBjYXNlIHRoYXQKKyAgICAv
LyAgICBBaXIgZGlkbid0IGR1cGxpY2F0ZSBjb2RlIG9yIHRoYXQgc3VjaCBkdXBsaWNhdGlvbiBk
aWRuJ3QgY2F1c2UgYW55IGludGVyZXN0aW5nIGNoYW5nZXMgdG8KKyAgICAvLyAgICByZWdpc3Rl
ciBhc3NpZ25tZW50LgorICAgIC8vCisgICAgLy8gMikgSGF2ZSB0aGUgU3BlY2lhbCBtYWludGFp
biBhIEhhc2hNYXA8SW5zdCosIFJlZ2lzdGVyU2V0Pi4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoZSBh
bmFseXNpcworICAgIC8vICAgIHRoYXQgZmVlZHMgaW50byB0aGlzIGNhbGwgaXMgcGVyZm9ybWVk
IGp1c3QgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiBhbmQgdGhlcmUgaXMgbm8gd2F5CisgICAgLy8g
ICAgZm9yIHRoZSBWZWN0b3I8PidzIHRoYXQgY29udGFpbiB0aGUgSW5zdHMgdG8gYmUgcmVhbGxv
Y2F0ZWQuIFRoaXMgYWxsb3dzIGdlbmVyYXRlKCkgdG8KKyAgICAvLyAgICBjb25zdWx0IHRoZSBI
YXNoTWFwLgorICAgIC8vCisgICAgLy8gMykgSHlicmlkOiB5b3UgY291bGQgdXNlICgxKSBhbmQg
ZmlyZSB1cCBhIEhhc2hNYXAgaWYgeW91IHNlZSBtdWx0aXBsZSBjYWxscy4KKyAgICAvLworICAg
IC8vIE5vdGUgdGhhdCBpdCdzIG5vdCBwb3NzaWJsZSB0byByZWx5IG9uIHJlcG9ydFVzZWRSZWdp
c3RlcnMoKSBiZWluZyBjYWxsZWQgaW4gdGhlIHNhbWUgb3JkZXIKKyAgICAvLyBhcyBnZW5lcmF0
ZSgpLiBJZiB3ZSBjb3VsZCByZWx5IG9uIHRoYXQsIHRoZW4gd2UgY291bGQganVzdCBoYXZlIGVh
Y2ggU3BlY2lhbCBpbnN0YW5jZQorICAgIC8vIG1haW50YWluIGEgVmVjdG9yIG9mIFJlZ2lzdGVy
U2V0J3MgYW5kIHRoZW4gcHJvY2VzcyB0aGF0IHZlY3RvciBpbiB0aGUgcmlnaHQgb3JkZXIgaW4K
KyAgICAvLyBnZW5lcmF0ZSgpLiBCdXQsIHRoZSBvcmRlcmluZyBkaWZmZXJlbmNlIGlzIHVubGlr
ZWx5IHRvIGNoYW5nZSBzaW5jZSBpdCB3b3VsZCBoYXJtIHRoZQorICAgIC8vIHBlcmZvcm1hbmNl
IG9mIHRoZSBsaXZlbmVzcyBhbmFseXNpcy4KKyAgICAvLworICAgIC8vIEN1cnJlbnRseSwgd2Ug
ZG8gKDEpIGZvciBCMyBzdGFja21hcHMuCisgICAgdmlydHVhbCB2b2lkIHJlcG9ydFVzZWRSZWdp
c3RlcnMoSW5zdCYsIGNvbnN0IFJlZ2lzdGVyU2V0JikgPSAwOworICAgIAorICAgIHZpcnR1YWwg
Q0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEluc3QmLCBDQ2FsbEhlbHBlcnMmLCBHZW5lcmF0
aW9uQ29udGV4dCYpID0gMDsKKworICAgIHZpcnR1YWwgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJh
Q2xvYmJlcmVkUmVncyhJbnN0JikgPSAwOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcm90ZWN0
ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3QgPSAwOwor
ICAgIHZpcnR1YWwgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBjb25zdCBjaGFyKiBtX25h
bWU7CisgICAgdW5zaWduZWQgbV9pbmRleDsKK307CisKK2NsYXNzIERlZXBTcGVjaWFsRHVtcCB7
CitwdWJsaWM6CisgICAgRGVlcFNwZWNpYWxEdW1wKGNvbnN0IFNwZWNpYWwqIHNwZWNpYWwpCisg
ICAgICAgIDogbV9zcGVjaWFsKHNwZWNpYWwpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc3BlY2lhbCkK
KyAgICAgICAgICAgIG1fc3BlY2lhbC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29u
c3QgU3BlY2lhbCogbV9zcGVjaWFsOworfTsKKworaW5saW5lIERlZXBTcGVjaWFsRHVtcCBkZWVw
RHVtcChjb25zdCBTcGVjaWFsKiBzcGVjaWFsKQoreworICAgIHJldHVybiBEZWVwU3BlY2lhbER1
bXAoc3BlY2lhbCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTcGVjaWFsX2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5n
LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bp
bGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgor
I2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNp
bmNsdWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5o
IgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQor
eworICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAic3BpbGxFdmVyeXRoaW5nIik7CisK
KyAgICAvLyBXZSB3YW50IHRvIGtub3cgdGhlIHNldCBvZiByZWdpc3RlcnMgdXNlZCBhdCBldmVy
eSBwb2ludCBpbiBldmVyeSBiYXNpYyBibG9jay4KKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBW
ZWN0b3I8UmVnaXN0ZXJTZXQ+PiB1c2VkUmVnaXN0ZXJzKGNvZGUuc2l6ZSgpKTsKKyAgICBMaXZl
bmVzczxUbXA+IGxpdmVuZXNzKGNvZGUpOworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBj
b2RlKSB7CisgICAgICAgIExpdmVuZXNzPFRtcD46OkxvY2FsQ2FsYyBsb2NhbENhbGMobGl2ZW5l
c3MsIGJsb2NrKTsKKyAgICAgICAgdXNlZFJlZ2lzdGVyc1tibG9ja10ucmVzaXplKGJsb2NrLT5z
aXplKCkgKyAxKTsKKworICAgICAgICBhdXRvIHNldFVzZWRSZWdpc3RlcnMgPSBbJl0gKHVuc2ln
bmVkIGluZGV4LCBJbnN0JiBpbnN0KSB7CisgICAgICAgICAgICBSZWdpc3RlclNldCYgcmVnaXN0
ZXJTZXQgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbmRleF07CisgICAgICAgICAgICBmb3IgKFRt
cCB0bXAgOiBsb2NhbENhbGMubGl2ZSgpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRtcC5pc1Jl
ZygpKQorICAgICAgICAgICAgICAgICAgICByZWdpc3RlclNldC5zZXQodG1wLnJlZygpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gR290dGEgYWNjb3VudCBmb3IgZGVhZCBhc3Np
Z25tZW50cyB0byByZWdpc3RlcnMuIFRoZXNlIG1heSBoYXBwZW4gYmVjYXVzZSB0aGUgaW5wdXQK
KyAgICAgICAgICAgIC8vIGNvZGUgaXMgc3Vib3B0aW1hbC4KKyAgICAgICAgICAgIGluc3QuZm9y
RWFjaEFyZygKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwg
QXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpICYm
IGFyZy5pc1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJTZXQuc2V0KGFy
Zy5yZWcoKSk7CisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgIH07CisKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAg
ICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAg
IHNldFVzZWRSZWdpc3RlcnMoaW5zdEluZGV4ICsgMSwgaW5zdCk7CisgICAgICAgICAgICBsb2Nh
bENhbGMuZXhlY3V0ZShpbnN0KTsKKyAgICAgICAgfQorCisgICAgICAgIEluc3Qgbm9wOworICAg
ICAgICBzZXRVc2VkUmVnaXN0ZXJzKDAsIG5vcCk7CisgICAgfQorCisgICAgLy8gQWxsb2NhdGUg
YSBzdGFjayBzbG90IGZvciBlYWNoIHRtcC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYWxsU3Rh
Y2tTbG90c1tBcmc6Om51bVR5cGVzXTsKKyAgICBmb3IgKHVuc2lnbmVkIHR5cGVJbmRleCA9IDA7
IHR5cGVJbmRleCA8IEFyZzo6bnVtVHlwZXM7ICsrdHlwZUluZGV4KSB7CisgICAgICAgIFZlY3Rv
cjxTdGFja1Nsb3QqPiYgc3RhY2tTbG90cyA9IGFsbFN0YWNrU2xvdHNbdHlwZUluZGV4XTsKKyAg
ICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxBcmc6OlR5cGU+KHR5cGVJbmRleCk7
CisgICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUubnVtVG1wcyh0eXBlKSk7CisgICAgICAg
IGZvciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51bVRtcHModHlwZSk7IHRtcEluZGV4LS07
KQorICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0gPSBjb2RlLmFkZFN0YWNrU2xvdCg4
LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgIH0KKworICAgIEluc2VydGlvblNldCBp
bnNlcnRpb25TZXQoY29kZSk7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXggPSAwOyBpbnN0SW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldEJlZm9y
ZSA9IHVzZWRSZWdpc3RlcnNbYmxvY2tdW2luc3RJbmRleF07CisgICAgICAgICAgICBSZWdpc3Rl
clNldCYgc2V0QWZ0ZXIgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0SW5kZXggKyAxXTsKKyAg
ICAgICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAg
IGluc3QuZm9yRWFjaFRtcCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wLCBBcmc6OlJv
bGUgcm9sZSwgQXJnOjpUeXBlIHR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRtcC5p
c1JlZygpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICAg
ICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gYWxsU3RhY2tTbG90c1t0eXBlXVt0bXAudG1w
SW5kZXgoKV07CisgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcgPSBBcmc6OnN0YWNrKHN0YWNr
U2xvdCk7CisKKyAgICAgICAgICAgICAgICAgICAgLy8gTmVlZCB0byBmaWd1cmUgb3V0IGEgcmVn
aXN0ZXIgdG8gdXNlLiBIb3cgd2UgZG8gdGhhdCBkZXBlbmRzIG9uIHRoZSByb2xlLgorICAgICAg
ICAgICAgICAgICAgICBSZWcgY2hvc2VuUmVnOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHJvbGUpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZToKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSkgewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpEZWY6CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlVzZURlZjoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJblByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAoIXNldEJlZm9yZS5nZXQocmVnKSAmJiAhc2V0QWZ0ZXIu
Z2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0QWZ0ZXIuc2V0
KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEJlZm9yZS5zZXQocmVn
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuUmVnID0gcmVnOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAgIHRtcCA9IFRt
cChjaG9zZW5SZWcpOworCisgICAgICAgICAgICAgICAgICAgIE9wY29kZSBtb3ZlID0gdHlwZSA9
PSBBcmc6OkdQID8gTW92ZSA6IE1vdmVEb3VibGU7CisKKyAgICAgICAgICAgICAgICAgICAgaWYg
KEFyZzo6aXNVc2Uocm9sZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNl
dC5pbnNlcnQoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4LCBtb3ZlLCBp
bnN0Lm9yaWdpbiwgYXJnLCB0bXApOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIGlmIChBcmc6OmlzRGVmKHJvbGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RJ
bmRleCArIDEsIG1vdmUsIGluc3Qub3JpZ2luLCB0bXAsIGFyZyk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgfQorICAgICAgICBpbnNlcnRpb25T
ZXQuZXhlY3V0ZShibG9jayk7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyU3BpbGxFdmVyeXRoaW5nX2gKKyNkZWZpbmUg
QWlyU3BpbGxFdmVyeXRoaW5nX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKworLy8g
VGhpcyBpcyBhIHBoYXNlIGZvciB0ZXN0aW5nLiBJdCBiZWhhdmVzIGxpa2UgYSByZWdpc3RlciBh
bGxvY2F0b3IgaW4gdGhlIHNlbnNlIHRoYXQgaXQKKy8vIGVsaW1pbmF0ZXMgdGVtcG9yYXJpZXMg
ZnJvbSB0aGUgcHJvZ3JhbS4gSXQgYWNjb21wbGlzaGVzIHRoaXMgYnkgYWx3YXlzIHNwaWxsaW5n
IGFsbAorLy8gdGVtcG9yYXJpZXMuIFRoZSByZXN1bHRpbmcgY29kZSBpcyBnb2luZyB0byBiZSB2
ZXJ5IGluZWZmaWNpZW50LiBUaGlzIHBoYXNlIGlzIGdyZWF0IGlmIHlvdQorLy8gdGhpbmsgdGhh
dCB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLiBZb3UgY2FuIGNvbmZp
cm0gdGhpcyBieSBydW5uaW5nIHRoaXMKKy8vIHBoYXNlIGluc3RlYWQgb2YgdGhlIHJlZ2lzdGVy
IGFsbG9jYXRvci4KKy8vCisvLyBOb3RlIHRoYXQgZXZlbiB0aG91Z2ggdGhpcyBwaGFzZSBkb2Vz
IHRoZSBjaGVhcGVzdCB0aGluZyBwb3NzaWJsZSwgaXQncyBub3QgZXZlbiB3cml0dGVuIGluIGEK
Ky8vIHBhcnRpY3VsYXJseSBlZmZpY2llbnQgd2F5LiBTbywgZG9uJ3QgZ2V0IGFueSBpZGVhcyBh
Ym91dCB1c2luZyB0aGlzIHBoYXNlIHRvIHJlZHVjZSBjb21waWxlcgorLy8gbGF0ZW5jeS4gSWYg
eW91IHdhbnRlZCB0byBkbyB0aGF0LCB5b3Ugc2hvdWxkIGNvbWUgdXAgd2l0aCBhIGNsZXZlciBh
bGdvcml0aG0gaW5zdGVhZCBvZiB1c2luZworLy8gdGhpcyBzaWxseSB0aGluZy4KKwordm9pZCBz
cGlsbEV2ZXJ5dGhpbmcoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyU3BpbGxFdmVyeXRo
aW5nX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tT
bG90LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3RhY2tTbG90LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM1N0YWNrU2xvdFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUChpbnRw
dHJfdCB2YWx1ZSkKK3sKKyAgICBtX29mZnNldEZyb21GUCA9IHZhbHVlOworICAgIGlmIChtX3Zh
bHVlKQorICAgICAgICBtX3ZhbHVlLT5tX29mZnNldEZyb21GUCA9IHZhbHVlOworfQorCit2b2lk
IFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmlu
dCgic3RhY2siLCBtX2luZGV4KTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmRlZXBEdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1fYnl0
ZVNpemUsICIsIG9mZnNldEZyb21GUCA9ICIsIG1fb2Zmc2V0RnJvbUZQLCAiLCBraW5kID0gIiwg
bV9raW5kKTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgb3V0LnByaW50KCIsIHZhbHVlID0g
IiwgKm1fdmFsdWUpOworfQorCitTdGFja1Nsb3Q6OlN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6
ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZh
bHVlKQorICAgIDogbV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAgICAsIG1faW5kZXgoaW5kZXgpCisg
ICAgLCBtX29mZnNldEZyb21GUCh2YWx1ZSA/IHZhbHVlLT5vZmZzZXRGcm9tRlAoKSA6IDApCisg
ICAgLCBtX2tpbmQoa2luZCkKKyAgICAsIG1fdmFsdWUodmFsdWUpCit7CisgICAgQVNTRVJUKGJ5
dGVTaXplKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJTdGFj
a1Nsb3RfaAorI2RlZmluZSBBaXJTdGFja1Nsb3RfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+
CisjaW5jbHVkZSA8d3RmL05vbkNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFt
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTdGFja1Nsb3RW
YWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIFN0YWNrU2xvdCB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoU3RhY2tTbG90KTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNp
emU7IH0KKyAgICBTdGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0K
KyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIHVu
c2lnbmVkIGFsaWdubWVudCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoYnl0ZVNpemUoKSA8
PSAxKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDIp
CisgICAgICAgICAgICByZXR1cm4gMjsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gNCkKKyAg
ICAgICAgICAgIHJldHVybiA0OworICAgICAgICByZXR1cm4gODsKKyAgICB9CisKKyAgICBTdGFj
a1Nsb3RWYWx1ZSogdmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlOyB9CisKKyAgICAvLyBa
ZXJvIG1lYW5zIHRoYXQgaXQncyBub3QgeWV0IGFzc2lnbmVkLgorICAgIGludHB0cl90IG9mZnNl
dEZyb21GUCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAvLyBUaGlz
IHNob3VsZCB1c3VhbGx5IGp1c3QgYmUgY2FsbGVkIGZyb20gcGhhc2VzIHRoYXQgZG8gc3RhY2sg
YWxsb2NhdGlvbi4gQnV0IHlvdSBjYW4KKyAgICAvLyB0b3RhbGx5IGZvcmNlIGEgc3RhY2sgc2xv
dCB0byBsYW5kIGF0IHNvbWUgb2Zmc2V0LgorICAgIHZvaWQgc2V0T2Zmc2V0RnJvbUZQKGludHB0
cl90KTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVl
cER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
Q29kZTsKKworICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgs
IFN0YWNrU2xvdEtpbmQsIFN0YWNrU2xvdFZhbHVlKik7CisgICAgCisgICAgdW5zaWduZWQgbV9i
eXRlU2l6ZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIGludHB0cl90IG1fb2Zmc2V0RnJv
bUZQOworICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOworICAgIFN0YWNrU2xvdFZhbHVlKiBtX3Zh
bHVlOworfTsKKworY2xhc3MgRGVlcFN0YWNrU2xvdER1bXAgeworcHVibGljOgorICAgIERlZXBT
dGFja1Nsb3REdW1wKGNvbnN0IFN0YWNrU2xvdCogc2xvdCkKKyAgICAgICAgOiBtX3Nsb3Qoc2xv
dCkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV9zbG90KQorICAgICAgICAgICAgbV9zbG90LT5kZWVwRHVt
cChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBTdGFja1Nsb3QqIG1fc2xvdDsKK307CisKK2lu
bGluZSBEZWVwU3RhY2tTbG90RHVtcCBkZWVwRHVtcChjb25zdCBTdGFja1Nsb3QqIHNsb3QpCit7
CisgICAgcmV0dXJuIERlZXBTdGFja1Nsb3REdW1wKHNsb3QpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyU3RhY2tTbG90X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
VG1wLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJBaXJUbXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBUbXA6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoISp0aGlzKSB7CisgICAgICAgIG91dC5wcmludCgi
PG5vbmU+Iik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNSZWcoKSkgewor
ICAgICAgICBvdXQucHJpbnQocmVnKCkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKGlzR1AoKSkgeworICAgICAgICBvdXQucHJpbnQoIiV0bXAiLCBncFRtcEluZGV4KCkpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgb3V0LnByaW50KCIlZnRtcCIsIGZwVG1wSW5k
ZXgoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRt
cC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVG1wX2gKKyNkZWZpbmUgQWlyVG1wX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAi
R1BSSW5mby5oIgorI2luY2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
QXJnOworCisvLyBBIFRtcCBpcyBhIGdlbmVyYWxpemF0aW9uIG9mIGEgcmVnaXN0ZXIuIEl0IGNh
biBiZSB1c2VkIHRvIHJlZmVyIHRvIGFueSBHUFIgb3IgRlBSLiBJdCBjYW4gYWxzbworLy8gYmUg
dXNlZCB0byByZWZlciB0byBhbiB1bmFsbG9jYXRlZCByZWdpc3RlciAoaS5lLiBhIHRlbXBvcmFy
eSkuIExpa2UgbWFueSBBaXIgY2xhc3Nlcywgd2UgdXNlCisvLyBkZWxpYmVyYXRlbHkgdGVyc2Ug
bmFtaW5nIHNpbmNlIHdlIHdpbGwgaGF2ZSB0byB1c2UgdGhpcyBuYW1lIGEgbG90LgorCitjbGFz
cyBUbXAgeworcHVibGljOgorICAgIFRtcCgpCisgICAgICAgIDogbV92YWx1ZSgwKQorICAgIHsK
KyAgICB9CisKKyAgICBleHBsaWNpdCBUbXAoUmVnIHJlZykKKyAgICB7CisgICAgICAgIGlmIChy
ZWcpIHsKKyAgICAgICAgICAgIGlmIChyZWcuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBtX3Zh
bHVlID0gZW5jb2RlR1BSKHJlZy5ncHIoKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV92YWx1ZSA9IGVuY29kZUZQUihyZWcuZnByKCkpOworICAgICAgICB9IGVsc2UKKyAg
ICAgICAgICAgIG1fdmFsdWUgPSAwOworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChjb25zdCBB
cmcmKTsKKworICAgIHN0YXRpYyBUbXAgZ3BUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAg
ICB7CisgICAgICAgIFRtcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2Rl
R1BUbXAoaW5kZXgpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRp
YyBUbXAgZnBUbXBGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIFRtcCBy
ZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX3ZhbHVlID0gZW5jb2RlRlBUbXAoaW5kZXgpOworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAhIW1fdmFsdWU7IH0KKworICAgIGJvb2wgaXNHUCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AobV92YWx1ZSk7CisgICAgfQorCisgICAg
Ym9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUChtX3Zh
bHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc0VuY29kZWRHUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQUigpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkRlBSKG1fdmFsdWUpOworICAgIH0K
KworICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1BSKCkg
fHwgaXNGUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBkZWNvZGVHUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgRlBSUmVnIGZwcigp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlRlBSKG1fdmFsdWUpOworICAgIH0K
KworICAgIFJlZyByZWcoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAg
ICAgICAgIHJldHVybiBncHIoKTsKKyAgICAgICAgcmV0dXJuIGZwcigpOworICAgIH0KKworICAg
IGJvb2wgaGFzVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICFpc1JlZygp
OworICAgIH0KKworICAgIHVuc2lnbmVkIGdwVG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZUdQVG1wKG1fdmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZw
VG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUZQVG1wKG1fdmFs
dWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3BUbXBJbmRleCgpOworICAgICAg
ICByZXR1cm4gZnBUbXBJbmRleCgpOworICAgIH0KKworICAgIGJvb2wgaXNBbGl2ZSgpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gISEqdGhpczsKKyAgICB9CisKKyAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Zh
bHVlID09IG90aGVyLm1fdmFsdWU7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IFRtcCYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCisg
ICAgVG1wKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX3ZhbHVl
KHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCkpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICp0aGlzID09IFRtcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQorCisgICAg
dW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpJbnRIYXNo
PGludD46Omhhc2gobV92YWx1ZSk7CisgICAgfQorICAgIAorcHJpdmF0ZToKKyAgICBzdGF0aWMg
aW50IGVuY29kZUdQKHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIDEgKyBp
bmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQKHVuc2lnbmVkIGluZGV4KQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIC0xIC0gaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGlu
dCBlbmNvZGVHUFIoR1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVHUChn
cHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgaW50IGVuY29kZUZQUihGUFJSZWcgZnByKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29k
ZUZQKGZwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisg
ICAgc3RhdGljIGludCBlbmNvZGVHUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IHJldHVybiBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEgKyBp
bmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUZQVG1wKHVuc2lnbmVkIGluZGV4
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQ
UmVnaXN0ZXIoKSkgLSAxIC0gaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNv
ZGVkR1AoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlID4gMDsKKyAgICB9
CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRGUChpbnQgdmFsdWUpCisgICAgeworICAgICAg
ICByZXR1cm4gdmFsdWUgPCAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQ
UihpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYm
IHZhbHVlIDw9IGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lzdGVyKCkpOworICAg
IH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQUihpbnQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gaXNFbmNvZGVkRlAodmFsdWUpICYmIHZhbHVlID49IGVuY29kZUZQUihNYWNy
b0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wg
aXNFbmNvZGVkR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2Rl
ZEdQKHZhbHVlKSAmJiAhaXNFbmNvZGVkR1BSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc0VuY29kZWRGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaXNF
bmNvZGVkRlAodmFsdWUpICYmICFpc0VuY29kZWRGUFIodmFsdWUpOworICAgIH0KKworICAgIHN0
YXRpYyBHUFJSZWcgZGVjb2RlR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChp
c0VuY29kZWRHUFIodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdQUlJlZz4o
CisgICAgICAgICAgICAodmFsdWUgLSBlbmNvZGVHUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVn
aXN0ZXIoKSkpICsgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisg
ICAgc3RhdGljIEZQUlJlZyBkZWNvZGVGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzRW5jb2RlZEZQUih2YWx1ZSkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RlBS
UmVnPigKKyAgICAgICAgICAgIChlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdp
c3RlcigpKSAtIHZhbHVlKSArCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJl
Z2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyB1bnNpZ25lZCBkZWNvZGVHUFRtcChpbnQg
dmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BUbXAodmFsdWUpKTsKKyAg
ICAgICAgcmV0dXJuIHZhbHVlIC0gKGVuY29kZUdQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdFJlZ2lz
dGVyKCkpICsgMSk7CisgICAgfQorCisgICAgc3RhdGljIHVuc2lnbmVkIGRlY29kZUZQVG1wKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFRtcCh2YWx1ZSkpOwor
ICAgICAgICByZXR1cm4gKGVuY29kZUZQUihNYWNyb0Fzc2VtYmxlcjo6bGFzdEZQUmVnaXN0ZXIo
KSkgLSAxKSAtIHZhbHVlOworICAgIH0KKworICAgIC8vIDA6IGVtcHR5IFRtcAorICAgIC8vIHBv
c2l0aXZlOiBHUFJzIGFuZCB0aGVuIEdQIHRlbXBzLgorICAgIC8vIG5lZ2F0aXZlOiBGUFJzIGFu
ZCB0aGVuIEZQIHRlbXBzLgorICAgIGludCBtX3ZhbHVlOworfTsKKworc3RydWN0IFRtcEhhc2gg
eworICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFRtcCYga2V5KSB7IHJldHVybiBrZXku
aGFzaCgpOyB9CisgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgVG1wJiBhLCBjb25zdCBUbXAm
IGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBh
cmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVj
dCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRIYXNoPEpTQzo6QjM6OkFp
cjo6VG1wPiB7CisgICAgdHlwZWRlZiBKU0M6OkIzOjpBaXI6OlRtcEhhc2ggSGFzaDsKK307CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1
Y3QgSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OlRtcD4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8
SlNDOjpCMzo6QWlyOjpUbXA+IHsgfTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyVG1wX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXBJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyVG1wSW5saW5lc19oCisjZGVmaW5lIEFpclRtcElubGluZXNf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFyZy5oIgorI2luY2x1ZGUg
IkFpclRtcC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7CisKK2lubGluZSBUbXA6OlRtcChjb25zdCBBcmcmIGFyZykKK3sKKyAgICAqdGhpcyA9IGFy
Zy50bXAoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclRtcElubGluZXNfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJWYWxp
ZGF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIFZhbGlkYXRlciB7Citw
dWJsaWM6CisgICAgVmFsaWRhdGVyKENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUp
CisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZv
cmUpCisgICAgeworICAgIH0KKworI2RlZmluZSBWQUxJREFURShjb25kaXRpb24sIG1lc3NhZ2Up
IGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoY29uZGl0
aW9uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor
ICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgXAorICAgICAgICBmYWlsKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BS
RVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwgdG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3
aGlsZSAoZmFsc2UpCisgICAgCisgICAgdm9pZCBydW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNl
dDxTdGFja1Nsb3QqPiB2YWxpZFNsb3RzOworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiB2
YWxpZEJsb2NrczsKKyAgICAgICAgSGFzaFNldDxTcGVjaWFsKj4gdmFsaWRTcGVjaWFsczsKKwor
ICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKQorICAgICAgICAgICAgdmFs
aWRCbG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBtX2Nv
ZGUuc3RhY2tTbG90cygpKQorICAgICAgICAgICAgdmFsaWRTbG90cy5hZGQoc2xvdCk7CisgICAg
ICAgIGZvciAoU3BlY2lhbCogc3BlY2lhbCA6IG1fY29kZS5zcGVjaWFscygpKQorICAgICAgICAg
ICAgdmFsaWRTcGVjaWFscy5hZGQoc3BlY2lhbCk7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IG1fY29kZSkgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbnN0SW5kZXgg
PSAwOyBpbnN0SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK2luc3RJbmRleCkgeworICAgICAgICAg
ICAgICAgIEluc3QmIGluc3QgPSBibG9jay0+YXQoaW5zdEluZGV4KTsKKyAgICAgICAgICAgICAg
ICBmb3IgKEFyZyYgYXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgICAgIHN3aXRj
aCAoYXJnLmtpbmQoKSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6Cisg
ICAgICAgICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZFNsb3RzLmNvbnRhaW5zKGFyZy5z
dGFja1Nsb3QoKSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3BlY2lh
bDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkU3BlY2lhbHMuY29udGFp
bnMoYXJnLnNwZWNpYWwoKSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgVkFMSURBVEUoaW5zdC5pc1ZhbGlkRm9y
bSgpLCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgaWYg
KGluc3RJbmRleCA9PSBibG9jay0+c2l6ZSgpIC0gMSkKKyAgICAgICAgICAgICAgICAgICAgVkFM
SURBVEUoaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxv
Y2spKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRF
KCFpc1Rlcm1pbmFsKGluc3Qub3Bjb2RlKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNzb3Ig
OiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
aWRCbG9ja3MuY29udGFpbnMoc3VjY2Vzc29yKSwgKCJJbiAiLCAqYmxvY2spKTsKKyAgICAgICAg
fQorICAgIH0KKworcHJpdmF0ZToKKyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZmFp
bCgKKyAgICAgICAgY29uc3QgY2hhciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBj
aGFyKiBmdW5jdGlvbiwgY29uc3QgY2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1l
c3NhZ2UpCisgICAgeworICAgICAgICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7
CisgICAgICAgICAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJp
bnQoIkFJUiBWQUxJREFUSU9OIEZBSUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIg
ICAgIiwgY29uZGl0aW9uLCAiICgiLCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7
CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAg
ICAgIG91dC5wcmludCgiICAgIEFmdGVyICIsIG1fY29kZS5sYXN0UGhhc2VOYW1lKCksICJcbiIp
OworICAgICAgICAgICAgZmFpbHVyZU1lc3NhZ2UgPSBvdXQudG9DU3RyaW5nKCk7CisgICAgICAg
IH0KKworICAgICAgICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgaWYgKG1fZHVt
cEJlZm9yZSkgeworICAgICAgICAgICAgZGF0YUxvZygiQmVmb3JlICIsIG1fY29kZS5sYXN0UGhh
c2VOYW1lKCksICI6XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAg
ICAgICAgfQorICAgICAgICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAg
ICAgZGF0YUxvZyhtX2NvZGUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOwor
ICAgICAgICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBm
dW5jdGlvbiwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAg
Q29kZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKENvZGUmIGNvZGUsIGNvbnN0IGNo
YXIqIGR1bXBCZWZvcmUpCit7CisgICAgVmFsaWRhdGVyIHZhbGlkYXRlcihjb2RlLCBkdW1wQmVm
b3JlKTsKKyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEFpclZhbGlkYXRlX2gKKyNkZWZpbmUgQWlyVmFsaWRhdGVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBB
aXIgeworCitjbGFzcyBDb2RlOworCit2b2lkIHZhbGlkYXRlKENvZGUmLCBjb25zdCBjaGFyKiBk
dW1wQmVmb3JlID0gbnVsbHB0cik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJWYWxpZGF0ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0
b3IucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29k
ZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NDQgQEAKKyMhL3Vzci9i
aW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
CisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQor
IyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVx
dWlyZSAicGF0aG5hbWUiCisKK2NsYXNzIE9wY29kZQorICAgIGF0dHJfcmVhZGVyIDpuYW1lLCA6
c3BlY2lhbCwgOm92ZXJsb2FkcworICAgIGF0dHJfYWNjZXNzb3IgOmtpbmQKKworICAgIGRlZiBp
bml0aWFsaXplKG5hbWUsIHNwZWNpYWwpCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBA
c3BlY2lhbCA9IHNwZWNpYWwKKyAgICAgICAgQGtpbmQgPSA6aW5zdAorICAgICAgICB1bmxlc3Mg
c3BlY2lhbAorICAgICAgICAgICAgQG92ZXJsb2FkcyA9IFtdCisgICAgICAgIGVuZAorICAgIGVu
ZAorCisgICAgZGVmIG1hc21OYW1lCisgICAgICAgIG5hbWVbMF0uZG93bmNhc2UgKyBuYW1lWzEu
Li0xXQorICAgIGVuZAorZW5kCisKK2NsYXNzIEFyZworICAgIGF0dHJfcmVhZGVyIDpyb2xlLCA6
dHlwZQorCisgICAgZGVmIGluaXRpYWxpemUocm9sZSwgdHlwZSkKKyAgICAgICAgQHJvbGUgPSBy
b2xlCisgICAgICAgIEB0eXBlID0gdHlwZQorICAgIGVuZAorZW5kCisKK2NsYXNzIE92ZXJsb2Fk
CisgICAgYXR0cl9yZWFkZXIgOnNpZ25hdHVyZSwgOmZvcm1zCisKKyAgICBkZWYgaW5pdGlhbGl6
ZShzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICBAc2lnbmF0dXJlID0gc2lnbmF0dXJlCisgICAg
ICAgIEBmb3JtcyA9IGZvcm1zCisgICAgZW5kCitlbmQKKworY2xhc3MgS2luZAorICAgIGF0dHJf
cmVhZGVyIDpuYW1lCisgICAgYXR0cl9hY2Nlc3NvciA6c3BlY2lhbAorCisgICAgZGVmIGluaXRp
YWxpemUobmFtZSkKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gZmFs
c2UKKyAgICBlbmQKKworICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8g
U3RyaW5nCisgICAgICAgICAgICBAbmFtZSA9PSBvdGhlcgorICAgICAgICBlbHNlCisgICAgICAg
ICAgICBAbmFtZSA9PSBvdGhlci5uYW1lIGFuZCBAc3BlY2lhbCA9PSBvdGhlci5zcGVjaWFsCisg
ICAgICAgIGVuZAorICAgIGVuZAorCisgICAgZGVmIEtpbmQuYXJnS2luZHMoa2luZCkKKyAgICAg
ICAgaWYga2luZCA9PSAiQWRkciIKKyAgICAgICAgICAgIFsiQWRkciIsICJTdGFjayIsICJDYWxs
QXJnIl0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgW2tpbmRdCisgICAgICAgIGVuZAorICAg
IGVuZAorCisgICAgZGVmIGFyZ0tpbmRzCisgICAgICAgIEtpbmQuYXJnS2luZHMoa2luZCkKKyAg
ICBlbmQKK2VuZAorCitjbGFzcyBGb3JtCisgICAgYXR0cl9yZWFkZXIgOmtpbmRzLCA6YWx0TmFt
ZQorCisgICAgZGVmIGluaXRpYWxpemUoa2luZHMsIGFsdE5hbWUpCisgICAgICAgIEBraW5kcyA9
IGtpbmRzCisgICAgICAgIEBhbHROYW1lID0gYWx0TmFtZQorICAgIGVuZAorZW5kCisKK2NsYXNz
IE9yaWdpbgorICAgIGF0dHJfcmVhZGVyIDpmaWxlTmFtZSwgOmxpbmVOdW1iZXIKKyAgICAKKyAg
ICBkZWYgaW5pdGlhbGl6ZShmaWxlTmFtZSwgbGluZU51bWJlcikKKyAgICAgICAgQGZpbGVOYW1l
ID0gZmlsZU5hbWUKKyAgICAgICAgQGxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyCisgICAgZW5kCisg
ICAgCisgICAgZGVmIHRvX3MKKyAgICAgICAgIiN7ZmlsZU5hbWV9OiN7bGluZU51bWJlcn0iCisg
ICAgZW5kCitlbmQKKworY2xhc3MgVG9rZW4KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6c3Ry
aW5nCisgICAgCisgICAgZGVmIGluaXRpYWxpemUob3JpZ2luLCBzdHJpbmcpCisgICAgICAgIEBv
cmlnaW4gPSBvcmlnaW4KKyAgICAgICAgQHN0cmluZyA9IHN0cmluZworICAgIGVuZAorICAgIAor
ICAgIGRlZiA9PShvdGhlcikKKyAgICAgICAgaWYgb3RoZXIuaXNfYT8gVG9rZW4KKyAgICAgICAg
ICAgIEBzdHJpbmcgPT0gb3RoZXIuc3RyaW5nCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBz
dHJpbmcgPT0gb3RoZXIKKyAgICAgICAgZW5kCisgICAgZW5kCisgICAgCisgICAgZGVmID1+KG90
aGVyKQorICAgICAgICBAc3RyaW5nID1+IG90aGVyCisgICAgZW5kCisgICAgCisgICAgZGVmIHRv
X3MKKyAgICAgICAgIiN7QHN0cmluZy5pbnNwZWN0fSBhdCAje29yaWdpbn0iCisgICAgZW5kCisg
ICAgCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIGNvbW1lbnQuZW1w
dHk/CisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3I6ICN7dG9fc30iCisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvcjogI3t0b19zfTogI3tjb21tZW50WzBd
fSIKKyAgICAgICAgZW5kCisgICAgZW5kCitlbmQKKworZGVmIGxleChzdHIsIGZpbGVOYW1lKQor
ICAgIGZpbGVOYW1lID0gUGF0aG5hbWUubmV3KGZpbGVOYW1lKQorICAgIHJlc3VsdCA9IFtdCisg
ICAgbGluZU51bWJlciA9IDEKKyAgICB3aGlsZSBub3Qgc3RyLmVtcHR5PworICAgICAgICBjYXNl
IHN0cgorICAgICAgICB3aGVuIC9cQVwjKFteXG5dKikvCisgICAgICAgICAgICAjIGNvbW1lbnQs
IGlnbm9yZQorICAgICAgICB3aGVuIC9cQVxuLworICAgICAgICAgICAgIyBuZXdsaW5lLCBpZ25v
cmUKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMQorICAgICAgICB3aGVuIC9cQShbYS16QS1a
MC05X10rKS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5uZXcoT3JpZ2luLm5ldyhmaWxl
TmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICB3aGVuIC9cQShbIFx0XHJdKykvCisgICAg
ICAgICAgICAjIHdoaXRlc3BhY2UsIGlnbm9yZQorICAgICAgICB3aGVuIC9cQVssOipcL10vCisg
ICAgICAgICAgICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVO
dW1iZXIpLCAkJikKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9y
IGF0ICN7T3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQg
c2VxdWVuY2UgI3tzdHJbMC4uMjBdLmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3Ry
ID0gJH4ucG9zdF9tYXRjaAorICAgIGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc1VEKHRv
a2VuKQorICAgIHRva2VuID1+IC9cQSgoVSl8KEQpfChVRCkpXFovCitlbmQKKworZGVmIGlzR0Yo
dG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChHKXwoRikpXFovCitlbmQKKworZGVmIGlzS2luZCh0
b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFRtcCl8KEltbSl8KEltbTY0KXwoQWRkcil8KEluZGV4
KXwoUmVsQ29uZCl8KFJlc0NvbmQpKVxaLworZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisg
ICAgaXNVRCh0b2tlbikgb3IgaXNHRih0b2tlbikgb3IgaXNLaW5kKHRva2VuKSBvcgorICAgICAg
ICB0b2tlbiA9PSAic3BlY2lhbCIgb3IgdG9rZW4gPT0gImFzIgorZW5kCisKK2RlZiBpc0lkZW50
aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKFthLXpBLVowLTlfXSspXFovIGFuZCBub3Qg
aXNLZXl3b3JkKHRva2VuKQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFsaXpl
KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1lKQor
ICAgICAgICBAaWR4ID0gMAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0b2tl
bnNbQGlkeF0KKyAgICBlbmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0gMQor
ICAgIGVuZAorCisgICAgZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRva2Vu
CisgICAgICAgICAgICB0b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNlCisg
ICAgICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQYXJz
ZSBlcnJvciBhdCBlbmQgb2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShzdHJp
bmcpCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0b2tl
biA9PSBzdHJpbmcKKyAgICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVJ
ZGVudGlmaWVyCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVy
cm9yKCJFeHBlY3RlZCBpZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQpCisg
ICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgY29uc3Vt
ZVJvbGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3Io
IkV4cGVjdGVkIHJvbGUgKFUsIEQsIG9yIFVEKSIpIHVubGVzcyBpc1VEKHJlc3VsdCkKKyAgICAg
ICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lVHlw
ZQorICAgICAgICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhw
ZWN0ZWQgdHlwZSAoRyBvciBGKSIpIHVubGVzcyBpc0dGKHJlc3VsdCkKKyAgICAgICAgYWR2YW5j
ZQorICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lS2luZAorICAgICAg
ICByZXN1bHQgPSB0b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQga2lu
ZCAoSW1tLCBJbW02NCwgVG1wLCBBZGRyLCBJbmRleCwgUmVsQ29uZCwgb3IgUmVzQ29uZCkiKSB1
bmxlc3MgaXNLaW5kKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1bHQKKyAg
ICBlbmQKKworICAgIGRlZiBwYXJzZQorICAgICAgICByZXN1bHQgPSB7fQorICAgICAgICAKKyAg
ICAgICAgbG9vcCB7CisgICAgICAgICAgICBicmVhayBpZiBAaWR4ID49IEB0b2tlbnMubGVuZ3Ro
CisKKyAgICAgICAgICAgIGlmIHRva2VuID09ICJzcGVjaWFsIgorICAgICAgICAgICAgICAgIGNv
bnN1bWUoInNwZWNpYWwiKQorICAgICAgICAgICAgICAgIG9wY29kZU5hbWUgPSBjb25zdW1lSWRl
bnRpZmllcgorCisgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEg
c3BlY2lhbCBvcGNvZGUiKSBpZiByZXN1bHRbb3Bjb2RlTmFtZV0KKworICAgICAgICAgICAgICAg
IHJlc3VsdFtvcGNvZGVOYW1lXSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgdHJ1ZSkKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZp
ZXIKKworICAgICAgICAgICAgICAgIGlmIHJlc3VsdFtvcGNvZGVOYW1lXQorICAgICAgICAgICAg
ICAgICAgICBvcGNvZGUgPSByZXN1bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAg
cGFyc2VFcnJvcigiQ2Fubm90IG92ZXJsb2FkIGEgc3BlY2lhbCBvcGNvZGUiKSBpZiBvcGNvZGUu
c3BlY2lhbAorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgb3Bjb2Rl
ID0gT3Bjb2RlLm5ldyhvcGNvZGVOYW1lLCBmYWxzZSkKKyAgICAgICAgICAgICAgICAgICAgcmVz
dWx0W29wY29kZU5hbWVdID0gb3Bjb2RlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAg
ICAgICAgICBzaWduYXR1cmUgPSBbXQorICAgICAgICAgICAgICAgIGZvcm1zID0gW10KKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBpc1VEKHRva2VuKQorICAgICAgICAgICAg
ICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJvbGUgPSBjb25zdW1lUm9s
ZQorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiOiIpCisgICAgICAgICAgICAgICAg
ICAgICAgICB0eXBlID0gY29uc3VtZVR5cGUKKyAgICAgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICAgICAgc2lnbmF0dXJlIDw8IEFyZy5uZXcocm9sZSwgdHlwZSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5s
ZXNzIHRva2VuID09ICIsIgorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiLCIpCisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAg
ICAgIGlmIHRva2VuID09ICIvIgorICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIvIikKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSB0b2tlbi5zdHJpbmcKKyAgICAgICAgICAgICAgICAgICAg
d2hlbiAiYnJhbmNoIgorICAgICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLmtpbmQgPSA6YnJh
bmNoCisgICAgICAgICAgICAgICAgICAgIHdoZW4gInRlcm1pbmFsIgorICAgICAgICAgICAgICAg
ICAgICAgICAgb3Bjb2RlLmtpbmQgPSA6dGVybWluYWwKKyAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQmFkIC8gZGlyZWN0aXZlIikK
KyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UKKyAg
ICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIGlmIGlzS2luZCh0b2tlbikKKyAg
ICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcyA9
IFtdCisgICAgICAgICAgICAgICAgICAgICAgICBhbHROYW1lID0gbmlsCisgICAgICAgICAgICAg
ICAgICAgICAgICBsb29wIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kcyA8PCBL
aW5kLm5ldyhjb25zdW1lS2luZCkKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRv
a2VuID09ICIqIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJD
YW4gb25seSBhcHBseSAqIHRvIFRtcCIpIHVubGVzcyBraW5kc1stMV0ubmFtZSA9PSAiVG1wIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBraW5kc1stMV0uc3BlY2lhbCA9IHRydWUK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiKiIpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh
ayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Vt
ZSgiLCIpCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIHRva2VuID09ICJhcyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1l
KCJhcyIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWx0TmFtZSA9IGNvbnN1bWVJZGVu
dGlmaWVyCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgICAg
ICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgd3JvbmcgbnVtYmVyIG9mIGFyZ3VtZW50cyBmb3Ig
b3ZlcmxvYWQiKSB1bmxlc3Mga2luZHMubGVuZ3RoID09IHNpZ25hdHVyZS5sZW5ndGgKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGtpbmRzLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaWYga2luZC5uYW1lID09ICJJbW0iIG9yIGtpbmQubmFtZSA9PSAiSW1tNjQiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNpZ25hdHVyZVtpbmRleF0ucm9sZSAhPSAiVSIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFz
IGFuIGltbWVkaWF0ZSBmb3IgYSBub24tdXNlIGFyZ3VtZW50IikKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHNp
Z25hdHVyZVtpbmRleF0udHlwZSAhPSAiRyIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIGFuIGltbWVkaWF0ZSBmb3IgYSBub24tZ2VuZXJh
bC1wdXJwb3NlIGFyZ3VtZW50IikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtcyA8PCBGb3JtLm5ldyhraW5kcywgYWx0
TmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyBpc0tpbmQodG9rZW4p
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAg
ICAgICAgIGlmIHNpZ25hdHVyZS5sZW5ndGggPT0gMAorICAgICAgICAgICAgICAgICAgICByYWlz
ZSB1bmxlc3MgZm9ybXMubGVuZ3RoID09IDAKKyAgICAgICAgICAgICAgICAgICAgZm9ybXMgPDwg
Rm9ybS5uZXcoW10sIG5pbCkKKyAgICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAg
IG9wY29kZS5vdmVybG9hZHMgPDwgT3ZlcmxvYWQubmV3KHNpZ25hdHVyZSwgZm9ybXMpCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgfQorCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorZW5kCisK
KyRmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6cmVhZCgkZmls
ZU5hbWUpLCAkZmlsZU5hbWUpCiskb3Bjb2RlcyA9IHBhcnNlci5wYXJzZQorCiskc3RkZXJyLnB1
dHMgIkdlbmVyYXRpbmcgY29kZSBmb3IgI3skZmlsZU5hbWV9LiIKKworZGVmIHdyaXRlSChmaWxl
bmFtZSkKKyAgICBGaWxlLm9wZW4oIkFpciN7ZmlsZW5hbWV9LmgiLCAidyIpIHsKKyAgICAgICAg
fCBvdXRwIHwKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiLy8gR2VuZXJhdGVkIGJ5IG9w
Y29kZV9nZW5lcmF0b3IucmIgZnJvbSAjeyRmaWxlTmFtZX0gLS0gZG8gbm90IGVkaXQhIgorICAg
ICAgICAKKyAgICAgICAgb3V0cC5wdXRzICIjaWZuZGVmIEFpciN7ZmlsZW5hbWV9X2giCisgICAg
ICAgIG91dHAucHV0cyAiI2RlZmluZSBBaXIje2ZpbGVuYW1lfV9oIgorCisgICAgICAgIHlpZWxk
IG91dHAKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIEFpciN7ZmlsZW5h
bWV9X2giCisgICAgfQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlIikgeworICAgIHwgb3V0cCB8Cisg
ICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFp
ciB7IgorICAgIG91dHAucHV0cyAiZW51bSBPcGNvZGUgOiBpbnQxNl90IHsiCisgICAgJG9wY29k
ZXMua2V5cy5zb3J0LmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0
cyAiICAgICN7b3Bjb2RlfSwiCisgICAgfQorICAgIG91dHAucHV0cyAifTsiCisKKyAgICBvdXRw
LnB1dHMgInN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1PcGNvZGVzID0gI3skb3Bjb2Rlcy5rZXlz
LnNpemV9OyIKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIi
CisgICAgCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0cC5wdXRzICJj
bGFzcyBQcmludFN0cmVhbTsiCisgICAgb3V0cC5wdXRzICJ2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mLCBKU0M6OkIzOjpBaXI6Ok9wY29kZSk7IgorICAgIG91dHAucHV0cyAifSAvLyBu
YW1lc3BhY2UgV1RGIgorfQorCisjIEZyb20gaGVyZSBvbiwgd2UgZG9uJ3QgdHJ5IHRvIGVtaXQg
cHJvcGVybHkgaW5kZW50ZWQgY29kZSwgc2luY2Ugd2UncmUgdXNpbmcgYSByZWN1cnNpdmUgcGF0
dGVybgorIyBtYXRjaGVyLgorCitkZWYgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNv
bHVtbkluZGV4LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgcmV0dXJuIGlm
IGZvcm1zLmxlbmd0aCA9PSAwCisKKyAgICBpZiBmaWx0ZXJbZm9ybXNdCisgICAgICAgIHJldHVy
bgorICAgIGVuZAorCisgICAgaWYgY29sdW1uSW5kZXggPj0gZm9ybXNbMF0ua2luZHMubGVuZ3Ro
CisgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMQorICAgICAgICBjYWxsYmFj
a1tmb3Jtc1swXV0KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisgICAgCisgICAgZ3JvdXBzID0g
e30KKyAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgfCBmb3JtIHwKKyAgICAgICAga2luZCA9IGZv
cm0ua2luZHNbY29sdW1uSW5kZXhdLm5hbWUKKyAgICAgICAgaWYgZ3JvdXBzW2tpbmRdCisgICAg
ICAgICAgICBncm91cHNba2luZF0gPDwgZm9ybQorICAgICAgICBlbHNlCisgICAgICAgICAgICBn
cm91cHNba2luZF0gPSBbZm9ybV0KKyAgICAgICAgZW5kCisgICAgfQorCisgICAgaWYgc3BlZWQg
PT0gOmZhc3QgYW5kIGdyb3Vwcy5sZW5ndGggPT0gMQorICAgICAgICBtYXRjaEZvcm1zKG91dHAs
IHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXggKyAxLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2Fs
bGJhY2spCisgICAgICAgIHJldHVybgorICAgIGVuZAorCisgICAgb3V0cC5wdXRzICJzd2l0Y2gg
KCN7Y29sdW1uR2V0dGVyW2NvbHVtbkluZGV4XX0pIHsiCisgICAgZ3JvdXBzLmVhY2hfcGFpciB7
CisgICAgICAgIHwga2V5LCB2YWx1ZSB8CisgICAgICAgIG91dHAucHV0cyAiI2lmIFVTRShKU1ZB
TFVFNjQpIiBpZiBrZXkgPT0gIkltbTY0IgorICAgICAgICBLaW5kLmFyZ0tpbmRzKGtleSkuZWFj
aCB7CisgICAgICAgICAgICB8IGFyZ0tpbmQgfAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNl
IEFyZzo6I3thcmdLaW5kfToiCisgICAgICAgIH0KKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBz
cGVlZCwgdmFsdWUsIGNvbHVtbkluZGV4ICsgMSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxi
YWNrKQorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgb3V0cC5wdXRzICIjZW5k
aWYgLy8gVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisgICAgfQorICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9
IgorZW5kCisKK2RlZiBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5zdCkKKyAgICBv
dXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+b3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVl
cy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tv
cGNvZGUubmFtZX06IgorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgeWll
bGQgb3Bjb2RlLCBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZE92ZXJsb2FkU3dp
dGNoID0gKChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0gMSkgb3Igc3BlZWQgPT0gOnNhZmUpCisg
ICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tpbnN0fS0+YXJncy5zaXplKCkpIHsiIGlm
IG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsK
KyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRj
aAorICAgICAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgb3ZlcmxvYWQKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQK
KyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVs
dDoiCisgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorZW5kCisgICAg
CitkZWYgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG1hdGNo
SW5zdE92ZXJsb2FkKG91dHAsIHNwZWVkLCBpbnN0KSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVy
bG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNv
ZGUsIG5pbCwgbmlsCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHBy
b2MgeworICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAgICAgICAgICIj
e2luc3R9LT5hcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5kKCkiCisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAgY2FsbGJhY2sgPSBw
cm9jIHsKKyAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgIHlpZWxkIG9w
Y29kZSwgb3ZlcmxvYWQsIGZvcm0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1hdGNoRm9y
bXMob3V0cCwgc3BlZWQsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwg
Y2FsbGJhY2spCisgICAgICAgIGVuZAorICAgIH0KK2VuZAorCit3cml0ZUgoIk9wY29kZVV0aWxz
IikgeworICAgIHwgb3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3QuaFwi
IgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJBaXJTcGVjaWFsLmhcIiIKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAg
CisgICAgb3V0cC5wdXRzICJpbmxpbmUgYm9vbCBvcGdlbkhpZGRlblRydXRoKCkgeyByZXR1cm4g
dHJ1ZTsgfSIKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIFQ+IgorICAgIG91dHAu
cHV0cyAiaW5saW5lIFQqIG9wZ2VuSGlkZGVuUHRySWRlbnRpdHkoVCogcG9pbnRlcikgeyByZXR1
cm4gcG9pbnRlcjsgfSIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgT1BHRU5fUkVUVVJOKHZhbHVl
KSBkbyB7XFwiCisgICAgb3V0cC5wdXRzICIgICAgaWYgKG9wZ2VuSGlkZGVuVHJ1dGgoKSlcXCIK
KyAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJuIHZhbHVlO1xcIgorICAgIG91dHAucHV0cyAi
fSB3aGlsZSAoZmFsc2UpIgorCisgICAgb3V0cC5wdXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5j
dG9yPiIKKyAgICBvdXRwLnB1dHMgInZvaWQgSW5zdDo6Zm9yRWFjaEFyZyhjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0
cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAg
ICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJmdW5jdG9yKGFyZ3Nb
MF0sIEFyZzo6VXNlLCBBcmc6OkdQKTsgLy8gVGhpcyBpcyBiYXNpY2FsbHkgYm9ndXMsIGJ1dCBp
dCB3b3JrcyBmIGFuYWx5c2VzIG1vZGVsIFNwZWNpYWwgYXMgYW4gaW1tZWRpYXRlLiIKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiYXJnc1swXS5zcGVjaWFsKCktPmZvckVhY2hBcmcoKnRoaXMsIHNj
b3BlZExhbWJkYTxFYWNoQXJnQ2FsbGJhY2s+KGZ1bmN0b3IpKTsiCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAg
ICAgICAgIHwgYXJnLCBpbmRleCB8CisgICAgICAgICAgICAgICAgcm9sZSA9IG5pbAorICAgICAg
ICAgICAgICAgIGNhc2UgYXJnLnJvbGUKKyAgICAgICAgICAgICAgICB3aGVuICJVIgorICAgICAg
ICAgICAgICAgICAgICByb2xlID0gIlVzZSIKKyAgICAgICAgICAgICAgICB3aGVuICJEIgorICAg
ICAgICAgICAgICAgICAgICByb2xlID0gIkRlZiIKKyAgICAgICAgICAgICAgICB3aGVuICJVRCIK
KyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2VEZWYiCisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICByYWlzZQorICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWyN7aW5k
ZXh9XSwgQXJnOjoje3JvbGV9LCBBcmc6OiN7YXJnLnR5cGV9UCk7IgorICAgICAgICAgICAgfQor
ICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+IgorICAgIG91dHAucHV0cyAiQUxXQVlTX0lO
TElORSBib29sIGlzVmFsaWRGb3JtKE9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIkFyZzo6S2luZCBraW5kc1tz
aXplb2YuLi4oQXJndW1lbnRzKV0gPSB7IGFyZ3VtZW50cy4uLiB9OyIKKyAgICBvdXRwLnB1dHMg
InN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsKKyAgICAgICAg
fCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAg
ICAgICBvdXRwLnB1dHMgInN3aXRjaCAoc2l6ZW9mLi4uKEFyZ3VtZW50cykpIHsiCisgICAgICAg
IHVubGVzcyBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNo
IHsKKyAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdXRwLnB1
dHMgImNhc2UgI3tvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RofToiCisgICAgICAgICAgICAgICAg
Y29sdW1uR2V0dGVyID0gcHJvYyB7IHwgY29sdW1uSW5kZXggfCAib3BnZW5IaWRkZW5QdHJJZGVu
dGl0eShraW5kcylbI3tjb2x1bW5JbmRleH1dIiB9CisgICAgICAgICAgICAgICAgZmlsdGVyID0g
cHJvYyB7IGZhbHNlIH0KKyAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAg
ICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICBzcGVjaWFsID0gKG5v
dCBmb3JtLmtpbmRzLmRldGVjdCB7IHwga2luZCB8IGtpbmQuc3BlY2lhbCB9KQorICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTigje3NwZWNpYWx9KTsiCisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgOnNhZmUsIG92ZXJs
b2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAg
ICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICB9Cisg
ICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICBvdXRw
LnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7ICIKKyAgICBvdXRwLnB1dHMg
In0iCisKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29sIGlzVGVybWluYWwoT3Bjb2RlIG9wY29k
ZSkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsi
CisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAg
IGlmIG9wY29kZS5raW5kID09IDp0ZXJtaW5hbCBvciBvcGNvZGUua2luZCA9PSA6YnJhbmNoCisg
ICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvcGNvZGUubmFtZX06IgorICAgICAgICBlbmQK
KyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gdHJ1ZTsiCisgICAgb3V0cC5wdXRzICJkZWZh
dWx0OiIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9Igor
ICAgIG91dHAucHV0cyAifSIKKyAgICAKKyAgICBvdXRwLnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXIiCit9CisKK3dyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgeworICAgIHwg
b3V0cCB8CisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkFpckluc3RJbmxpbmVzLmhcIiIKKyAg
ICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwid3RmL1ByaW50U3RyZWFtLmhcIiIKKyAgICBvdXRwLnB1
dHMgIm5hbWVzcGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgInVzaW5nIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXI7IgorICAgIG91dHAucHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiBvdXQsIE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMg
IiAgICBzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLmVhY2ggeworICAgICAg
ICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0cyAiICAgIGNhc2UgI3tvcGNvZGV9OiIKKyAg
ICAgICAgb3V0cC5wdXRzICIgICAgICAgIG91dC5wcmludChcIiN7b3Bjb2RlfVwiKTsiCisgICAg
ICAgIG91dHAucHV0cyAiICAgICAgICByZXR1cm47IgorICAgIH0KKyAgICBvdXRwLnB1dHMgIiAg
ICB9IgorICAgIG91dHAucHV0cyAiICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Igor
ICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKKyAg
ICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWly
IHsiCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmlzVmFsaWRGb3JtKCkiCisgICAgb3V0cC5w
dXRzICJ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShvdXRwLCA6c2FmZSwgInRoaXMiKSB7
CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5z
cGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChhcmdzLnNpemUoKSA8IDEpIgorICAg
ICAgICAgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoIWFyZ3NbMF0uaXNTcGVjaWFsKCkpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJyZXR1
cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1swXS5z
cGVjaWFsKCktPmlzVmFsaWQoKnRoaXMpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5l
ZWRzTW9yZVZhbGlkYXRpb24gPSBmYWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJl
Lmxlbmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICAg
ICAgcm9sZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZQorICAgICAgICAgICAgICAg
IHR5cGUgPSBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUKKyAgICAgICAgICAgICAgICBr
aW5kID0gZm9ybS5raW5kc1tpbmRleF0KKyAgICAgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0
aW9uIHw9IGtpbmQuc3BlY2lhbAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICMg
V2UgYWxyZWFkeSBrbm93IHRoYXQgdGhlIGZvcm0gbWF0Y2hlcy4gV2UgZG9uJ3QgaGF2ZSB0byB2
YWxpZGF0ZSB0aGUgcm9sZSwgc2luY2UKKyAgICAgICAgICAgICAgICAjIGtpbmQgaW1wbGllcyBy
b2xlLiBTbywgdGhlIG9ubHkgdGhpbmcgbGVmdCB0byB2YWxpZGF0ZSBpcyB0aGUgdHlwZS4gQW5k
IHdlIG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgICMgdG8gdmFsaWRhdGUgdGhlIHR5cGUgaWYg
d2UgaGF2ZSBhIFRtcC4KKyAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIlRtcCIKKyAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ3NbI3tpbmRleH1dLnRtcCgpLmlz
I3t0eXBlfVAoKSkiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJO
KGZhbHNlKTsiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBpZiBuZWVkc01vcmVWYWxpZGF0aW9uCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAo
IWlzI3tvcGNvZGUubmFtZX1WYWxpZCgqdGhpcykpIgorICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgIG91
dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91
dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1
dHMgImJvb2wgSW5zdDo6YWRtaXRzU3RhY2sodW5zaWduZWQgYXJnSW5kZXgpIgorICAgIG91dHAu
cHV0cyAieyIKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVz
LnZhbHVlcy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgImNh
c2UgI3tvcGNvZGUubmFtZX06IgorCisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmICghYXJnSW5kZXgpIgorICAgICAgICAgICAgb3V0cC5wdXRzICJy
ZXR1cm4gZmFsc2U7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oYXJnc1sw
XS5zcGVjaWFsKCktPmFkbWl0c1N0YWNrKCp0aGlzLCBhcmdJbmRleCkpOyIKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgIyBTd2l0Y2ggb24gdGhlIGFyZ0luZGV4LgorICAgICAgICAgICAgb3V0
cC5wdXRzICJzd2l0Y2ggKGFyZ0luZGV4KSB7IgorCisgICAgICAgICAgICBudW1BcmdzID0gb3Bj
b2RlLm92ZXJsb2Fkcy5tYXAgeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAg
ICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgKKyAgICAgICAgICAgIH0ubWF4Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIG51bUFyZ3MudGltZXMgeworICAgICAgICAgICAgICAg
IHwgYXJnSW5kZXggfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje2FyZ0luZGV4
fToiCisKKyAgICAgICAgICAgICAgICAjIENoZWNrIGlmIGFsbCBvZiB0aGUgZm9ybXMgb2YgYWxs
IG9mIHRoZSBvdmVybG9hZHMgZWl0aGVyIGRvLCBvciBkb24ndCwgYWRtaXQgYW4gYWRkcmVzcwor
ICAgICAgICAgICAgICAgICMgYXQgdGhpcyBpbmRleC4gV2UgZXhwZWN0IHRoaXMgdG8gYmUgYSB2
ZXJ5IGNvbW1vbiBjYXNlLgorICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAgICAg
ICAgICBudW1ObyA9IDAKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggewor
ICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICAgICAgb3Zl
cmxvYWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAg
ICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgTm90ZSB0aGF0IHdlIGRlbGliZXJhdGVseSB0
ZXN0IG51bVllcyBmaXJzdCBiZWNhdXNlIGlmIHdlIGVuZCB1cCB3aXRoIG5vIGZvcm1zLCB3ZSB3
YW50CisgICAgICAgICAgICAgICAgIyB0byBzYXkgdGhhdCBBZGRyZXNzIGlzIGluYWRtaXNzaWJs
ZS4KKyAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVsc2lmIG51
bU5vID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1
ZSk7IgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgIyBOb3cgZG8g
dGhlIGZ1bGwgdGVzdC4KKworICAgICAgICAgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2gg
PSAob3Bjb2RlLm92ZXJsb2Fkcy5zaXplICE9IDEpCisKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJzd2l0Y2ggKGFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAg
ICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHwgb3ZlcmxvYWQgfAorCisgICAgICAgICAgICAgICAgICAgICAgICAjIEFnYWlu
LCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0IHdlIHdhbnQuCisgICAgICAgICAgICAgICAg
ICAgICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyA9IDAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
Zm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIG51bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIG51bVllcyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAjIERv
bid0IGVtaXQgYW55dGhpbmcsIGp1c3QgZHJvcCB0byBkZWZhdWx0LgorICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92ZXJs
b2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9S
RVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5z
aWduYXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyBUaGlzIGlzIGhvdyB3ZSB0ZXN0IHRoZSBoeXBvdGhlc2lzIHRoYXQg
Y2hhbmdpbmcgdGhpcyBhcmd1bWVudCB0byBhbgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICMgYWRkcmVzcyB5aWVsZHMgYSB2YWxpZCBmb3JtLgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbHVtbkdldHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB8IGNvbHVtbkluZGV4IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgY29s
dW1uSW5kZXggPT0gYXJnSW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJBcmc6OkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcmdzWyN7Y29sdW1uSW5kZXh9XS5raW5k
KCkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9j
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtcyB8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3Jt
LmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIyBEcm9wIGRvd24sIGVtaXQgbm8gY29kZSwgc2luY2Ugd2UgY2Fubm90
IG1hdGNoLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ1ZQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAjIEtlZXAgZ29pbmcuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJh
Y2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJP
UEdFTl9SRVRVUk4odHJ1ZSk7IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5m
b3JtcywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAor
ICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgICAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgIGVu
ZAorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiOworICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAi
fSIKKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgb3V0cC5wdXRzICJ9IgorCisg
ICAgb3V0cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgSW5zdDo6Z2VuZXJhdGUoQ0NhbGxIZWxw
ZXJzJiBqaXQsIEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KSIKKyAgICBvdXRwLnB1dHMgInsi
CisgICAgb3V0cC5wdXRzICJVTlVTRURfUEFSQU0oaml0KTsiCisgICAgb3V0cC5wdXRzICJVTlVT
RURfUEFSQU0oY29udGV4dCk7IgorICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpKdW1wIHJl
c3VsdDsiCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWRGb3JtKG91dHAsIDpmYXN0LCAidGhpcyIpIHsK
KyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNw
ZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lh
bCgpLT5nZW5lcmF0ZSgqdGhpcywgaml0LCBjb250ZXh0KSk7IgorICAgICAgICBlbHNlCisgICAg
ICAgICAgICBpZiBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gZm9y
bS5hbHROYW1lCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWV0aG9kTmFtZSA9
IG9wY29kZS5tYXNtTmFtZQorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBpZiBvcGNvZGUu
a2luZCA9PSA6YnJhbmNoCisgICAgICAgICAgICAgICAgb3V0cC5wcmludCAicmVzdWx0ID0gIgor
ICAgICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnByaW50ICJqaXQuI3ttZXRob2ROYW1l
fSgiCisKKyAgICAgICAgICAgIGZvcm0ua2luZHMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAg
ICAgICAgICB8IGtpbmQsIGluZGV4IHwKKyAgICAgICAgICAgICAgICBpZiBpbmRleCAhPSAwCisg
ICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgIiwgIgorICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgIGNhc2Uga2luZC5uYW1lCisgICAgICAgICAgICAgICAgd2hlbiAiVG1w
IgorICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnR5cGUg
PT0gIkciCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5ncHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZnByKCkiCisgICAgICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgICAgIHdoZW4gIkltbSIKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNUcnVzdGVkSW1tMzIoKSIKKyAgICAgICAgICAgICAg
ICB3aGVuICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAiYXJnc1sje2lu
ZGV4fV0uYXNUcnVzdGVkSW1tNjQoKSIKKyAgICAgICAgICAgICAgICB3aGVuICJBZGRyIgorICAg
ICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0FkZHJlc3MoKSIK
KyAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uYXNCYXNlSW5kZXgoKSIKKyAgICAgICAgICAgICAgICB3aGVu
ICJSZWxDb25kIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5hc1JlbGF0aW9uYWxDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAgICB3aGVuICJSZXNDb25k
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Jlc3Vs
dENvbmRpdGlvbigpIgorICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBvdXRwLnB1dHMgIik7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRV
Uk4ocmVzdWx0KTsiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgIlJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7IgorICAgIG91dHAucHV0cyAicmV0dXJuIHJlc3VsdDsiCisg
ICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyIgorfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29k
ZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw3ICsxNzAsNyBAQCBwdWJs
aWM6CiAgICAgfQogCiAgICAgQ29kZUJsb2NrKiBhbHRlcm5hdGl2ZUZvckpldHRpc29uKCk7ICAg
IAotICAgIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENvZGVCbG9jayogYmFzZWxpbmVBbHRlcm5hdGl2ZSgpOwogICAgIAogICAgIC8vIEZJ
WE1FOiBHZXQgcmlkIG9mIHRoaXMuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyMzY3NwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCShyZXZpc2lv
biAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDUsNyArMTA1LDYgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGluZGV4KCkgY29u
c3QgeyByZXR1cm4gbV9pbmRleDsgfQogICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJl
dHVybiBtX2luZGV4ICE9IGludmFsaWQoKTsgfQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3Qg
eyByZXR1cm4gIWlzU2V0KCk7IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gaXNTZXQoKTsgfQogCiAgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0IHsgcmV0dXJuIG1faW5kZXggPT0gZGVsZXRlZCgpOyB9CkBAIC0xNzAsNiArMTY5LDQ2
IEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAor
ICAgIGNsYXNzIEFsbFJlZ3NJdGVyYWJsZSB7CisgICAgcHVibGljOgorCisgICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKSB7IH0K
KworICAgICAgICAgICAgZXhwbGljaXQgaXRlcmF0b3IoUmVnIHJlZykKKyAgICAgICAgICAgICAg
ICA6IG1fcmVnSW5kZXgocmVnLmluZGV4KCkpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIFJlZyBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBSZWc6OmZyb21J
bmRleChtX3JlZ0luZGV4KTsgfQorCisgICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygp
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9yZWdJbmRleCA9IFJlZzo6ZnJvbUlu
ZGV4KG1fcmVnSW5kZXgpLm5leHQoKS5pbmRleCgpOworICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gbV9yZWdJbmRleCA9PSBvdGhlci5tX3JlZ0luZGV4OworICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgdW5zaWduZWQg
bV9yZWdJbmRleDsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIGl0ZXJhdG9yKFJlZzo6Zmlyc3QoKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5k
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnKCkpOyB9CisgICAgfTsKKworICAgIHN0YXRp
YyBBbGxSZWdzSXRlcmFibGUgYWxsKCkgeyByZXR1cm4gQWxsUmVnc0l0ZXJhYmxlKCk7IH0KKwog
cHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBpbnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZz
ZXRMaXN0LmNwcAkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcg
QEAgUmVnaXN0ZXJBdE9mZnNldExpc3Q6OlJlZ2lzdGVyQXRPZmZzZXRMaQogICAgIGlmIChvZmZz
ZXRCYXNlVHlwZSA9PSBGcmFtZVBvaW50ZXJCYXNlZCkKICAgICAgICAgb2Zmc2V0ID0gLShzdGF0
aWNfY2FzdDxwdHJkaWZmX3Q+KG51bWJlck9mUmVnaXN0ZXJzKSAqIHNpemVvZih2b2lkKikpOwog
Ci0gICAgZm9yIChSZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7cmVn
ID0gcmVnLm5leHQoKSkgeworICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmlyc3QoKTsgcmVnIDw9
IFJlZzo6bGFzdCgpOyByZWcgPSByZWcubmV4dCgpKSB7CiAgICAgICAgIGlmIChyZWdpc3RlclNl
dC5nZXQocmVnKSkgewogICAgICAgICAgICAgYXBwZW5kKFJlZ2lzdGVyQXRPZmZzZXQocmVnLCBv
ZmZzZXQpKTsKICAgICAgICAgICAgIG9mZnNldCArPSBzaXplb2Yodm9pZCopOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAkocmV2
aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zm
c2V0TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHB1YmxpYzoKICAgICAg
ICAgbV9yZWdpc3RlcnMuY2xlYXIoKTsKICAgICB9CiAKLSAgICBzaXplX3Qgc2l6ZSgpCisgICAg
c2l6ZV90IHNpemUoKSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIG1fcmVnaXN0ZXJzLnNp
emUoKTsKICAgICB9CkBAIC02Niw2ICs2Niw5IEBAIHB1YmxpYzoKICAgICBSZWdpc3RlckF0T2Zm
c2V0KiBmaW5kKFJlZykgY29uc3Q7CiAgICAgdW5zaWduZWQgaW5kZXhPZihSZWcpIGNvbnN0OyAv
LyBSZXR1cm5zIFVJTlRfTUFYIGlmIG5vdCBmb3VuZC4KIAorICAgIFZlY3RvcjxSZWdpc3RlckF0
T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVy
cy5iZWdpbigpOyB9CisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRv
ciBlbmQoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lzdGVycy5lbmQoKTsgfQorCiBwcml2YXRlOgog
ICAgIFZlY3RvcjxSZWdpc3RlckF0T2Zmc2V0PiBtX3JlZ2lzdGVyczsKIH07CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTExOCw2ICsxMTgsMTMgQEAgcHVibGljOgogICAgIAogICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBSZWdpc3RlclNldCYgb3RoZXIpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yID09IG90aGVyLm1f
dmVjdG9yOyB9CiAgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmhh
c2goKTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVh
Y2goY29uc3QgRnVuY3RvciYgZnVuY3RvcikgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAoc2l6
ZV90IGluZGV4IDogbV92ZWN0b3Iuc2V0Qml0cygpKQorICAgICAgICAgICAgZnVuY3RvcihSZWc6
OmZyb21JbmRleChpbmRleCkpOworICAgIH0KICAgICAKIHByaXZhdGU6CiAgICAgdm9pZCBzZXRB
bnkoUmVnIHJlZykgeyBzZXQocmVnKTsgfQpJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNv
dXJjZS9XVEYvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTUt
MTAtMjQgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBDcmVhdGUg
YSBzdXBlciByb3VnaCBwcm90b3R5cGUgb2YgQjMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDI4MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6Cisg
ICAgICAgICogd3RmL01hdGhFeHRyYXMuaDoKKyAgICAgICAgKFdURjo6cmFuZ2VzT3ZlcmxhcCk6
IE5pY2UgdXRpbGl0eSBmb3IgY2hlY2tpbmcgaWYgcmFuZ2VzIG92ZXJsYXAuCisgICAgICAgICog
d3RmL1BsYXRmb3JtLmg6IEFkZCBhIEVOQUJMRShCM19KSVQpIGZlYXR1cmUgZmxhZy4KKyAgICAg
ICAgKiB3dGYvU2NvcGVkTGFtYmRhLmg6IEFkZGVkLiBUaGlzIGFsbG93cyB1cyB0byBkbyB6ZXJv
LWFsbG9jYXRpb24sIHplcm8tY29weSBleHRlcm4gbGFtYmRhcy4KKyAgICAgICAgKFdURjo6c2Nv
cGVkTGFtYmRhKToKKyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpj
cmVhdGVTaGFyZWRUYXNrKToKKwogMjAxNS0xMC0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIEZhY3RvciBvdXQgdGhlIGdyYXBoIG5vZGUgd29ya2xpc3RzIGZy
b20gREZHIGludG8gV1RGCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQx
QjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2su
aCAqLzsgfTsKIAkJMEZFQjNEQ0YxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2
ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi87IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlE
N0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxs
ZWxWZWN0b3JJdGVyYXRvci5oICovOyB9OworCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyog
U2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJ
CTBGRUM4NEFGMUJEODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAw
ODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgw
MDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICov
OyB9OwogCQkwRkY4NjA5NTFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJD
Q0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0
Niw3IEBACiAJCTBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rv
ckl0ZXJhdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVj
dG9ySXRlcmF0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRB
Q0QzOTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBTY29wZWRMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZF
Qzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJD
b21wYXJpc29uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21w
YXJpc29uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAK
IAkJCQkxNDY5NDE5NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJ
MTQ2OTQxOTgxNkVBQjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkx
NDY5NDE5NTE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBG
RUM4NEIwMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMw
NjE1MUE4MjVCMDA0MTIzRkYgLyogU2VnbWVudGVkVmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcx
NTFBODI1QjAwNDEyM0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4
MTUxQTgyNUIwMDQxMjNGRiAvKiBTSEExLmNwcCAqLywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJ
CQkJQThBNDc0NDkxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVh
ZHMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJl
YWRpbmcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBU
aHJlYWRpbmdQcmltaXRpdmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5
MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE4QTQ3NDU1MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBI
ZWFkZXJzICovLApJbmRleDogU291cmNlL1dURi93dGYvSGFzaFNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL1dU
Ri93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQsOCArMTE0LDkgQEAgbmFtZXNw
YWNlIFdURiB7CiAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFYgPSBWYWx1ZVR5cGU+IHR5cGVu
YW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8Vj46OnZhbHVlLCBWYWx1ZVR5cGU+Ojp0eXBl
IHRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+OjpQdHJUeXBlKTsKIAogICAgICAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3QgVmFsdWVUeXBlJik7Ci0gICAgICAgIAotICAgICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaFNldCYpIGNvbnN0OworCisgICAgICAgIHRlbXBs
YXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IE90aGVyQ29sbGVjdGlvbiYpIGNvbnN0OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgSGFz
aFRhYmxlVHlwZSBtX2ltcGw7CkBAIC0zMzcsMTIgKzMzOCwxMyBAQCBuYW1lc3BhY2UgV1RGIHsK
ICAgICB9ICAKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1l
IFY+Ci0gICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBI
YXNoU2V0JiBvdGhlcikgY29uc3QKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rp
b24+CisgICAgaW5saW5lIGJvb2wgSGFzaFNldDxULCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBP
dGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlvbikgY29uc3QKICAgICB7Ci0gICAgICAgIGlm
IChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAgICAgICBpZiAoc2l6ZSgpICE9IG90aGVyQ29s
bGVjdGlvbi5zaXplKCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGZvciAo
Y29uc3RfaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikgewot
ICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlucygqaXRlcikpCisgICAgICAgIGZvciAoY29u
c3QgYXV0byYgb3RoZXIgOiBvdGhlckNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgIGlmICghY29u
dGFpbnMob3RoZXIpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkocmV2aXNpb24gMTkxNjUwKQor
KysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTMsNiArNTMsMjYg
QEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBQb2ludGVyTGlz
dER1bXAgeworcHVibGljOgorICAgIFBvaW50ZXJMaXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25z
dCBjaGFyKiBjb21tYSkKKyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAgICAgICAgLCBtX2NvbW1h
KGNvbW1hKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0CisgICAgeworICAgICAgICBmb3IgKHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9y
IGl0ZXIgPSBtX2xpc3QuYmVnaW4oKTsgaXRlciAhPSBtX2xpc3QuZW5kKCk7ICsraXRlcikKKyAg
ICAgICAgICAgIG91dC5wcmludChtX2NvbW1hLCBwb2ludGVyRHVtcCgqaXRlcikpOworICAgIH0K
KworcHJpdmF0ZToKKyAgICBjb25zdCBUJiBtX2xpc3Q7CisgICAgQ29tbWFQcmludGVyIG1fY29t
bWE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogY2xhc3MgTWFwRHVtcCB7CiBwdWJsaWM6
CiAgICAgTWFwRHVtcChjb25zdCBUJiBtYXAsIGNvbnN0IGNoYXIqIGFycm93LCBjb25zdCBjaGFy
KiBjb21tYSkKQEAgLTgwLDYgKzEwMCwxMiBAQCBMaXN0RHVtcDxUPiBsaXN0RHVtcChjb25zdCBU
JiBsaXN0LCBjb25zCiAgICAgcmV0dXJuIExpc3REdW1wPFQ+KGxpc3QsIGNvbW1hKTsKIH0KIAor
dGVtcGxhdGU8dHlwZW5hbWUgVD4KK1BvaW50ZXJMaXN0RHVtcDxUPiBwb2ludGVyTGlzdER1bXAo
Y29uc3QgVCYgbGlzdCwgY29uc3QgY2hhciogY29tbWEgPSAiLCAiKQoreworICAgIHJldHVybiBQ
b2ludGVyTGlzdER1bXA8VD4obGlzdCwgY29tbWEpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBU
LCB0eXBlbmFtZSBDb21wYXJhdG9yPgogQ1N0cmluZyBzb3J0ZWRMaXN0RHVtcChjb25zdCBUJiBs
aXN0LCBjb25zdCBDb21wYXJhdG9yJiBjb21wYXJhdG9yLCBjb25zdCBjaGFyKiBjb21tYSA9ICIs
ICIpCiB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2Uv
V1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxOSw2ICs0MTksMjAgQEAg
aW5saW5lIFQgbGVmdFNoaWZ0V2l0aFNhdHVyYXRpb24oVCB2YWx1ZQogICAgIHJldHVybiByZXN1
bHQ7CiB9CiAKKy8vIFBhc3MgcmFuZ2VzIHdpdGggdGhlIG1pbiBiZWluZyBpbmNsdXNpdmUgYW5k
IHRoZSBtYXggYmVpbmcgZXhjbHVzaXZlLiBGb3IgZXhhbXBsZSwgdGhpcyBzaG91bGQKKy8vIHJl
dHVybiBmYWxzZToKKy8vCisvLyAgICAgcmFuZ2VzT3ZlcmxhcCgwLCA4LCA4LCAxNikKK3RlbXBs
YXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCByYW5nZXNPdmVybGFwKFQgbGVmdE1pbiwgVCBs
ZWZ0TWF4LCBUIHJpZ2h0TWluLCBUIHJpZ2h0TWF4KQoreworICAgIGlmIChsZWZ0TWluIDw9IHJp
Z2h0TWluICYmIGxlZnRNYXggPiByaWdodE1pbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
aWYgKHJpZ2h0TWluIDw9IGxlZnRNaW4gJiYgcmlnaHRNYXggPiBsZWZ0TWluKQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgog
CiAjZW5kaWYgLy8gI2lmbmRlZiBXVEZfTWF0aEV4dHJhc19oCkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJl
dmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTc3NiwxMiArNzc2LDIwIEBACiAjZGVmaW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJVCAx
CiAjZW5kaWYKIAorLyogVGhlIEIzIGNvbXBpbGVyIGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNrZW5k
IHRoYXQgaXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQuIFdlIHdpbGwga2VlcCBpdCBidWlsZGluZwor
ICAgb24gRGFyd2luL3g4Ni02NCBmb3Igbm93LCB0aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2VwdCBm
b3IgdGVzdHMuICovCisjaWYgT1MoREFSV0lOKSAmJiBDUFUoWDg2XzY0KQorI2RlZmluZSBFTkFC
TEVfQjNfSklUIDEKKyNlbmRpZgorCiAvKiBJZiB0aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFp
bGFibGUsIHRoZW4gZGlzYWJsZSB1cHBlciB0aWVycyBhcyB3ZWxsOiAqLwogI2lmICFFTkFCTEUo
SklUKQotI3VuZGVmIEVOQUJMRV9ERkdfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4g
cmVkZWZpbmUgaXQuICovCi0jdW5kZWYgRU5BQkxFX0ZUTF9KSVQgICAgICAvKiBVbmRlZiBzbyB0
aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI3VuZGVm
IEVOQUJMRV9GVExfSklUCisjdW5kZWYgRU5BQkxFX0IzX0pJVAogI2RlZmluZSBFTkFCTEVfREZH
X0pJVCAwCiAjZGVmaW5lIEVOQUJMRV9GVExfSklUIDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJVCAw
CiAjZW5kaWYKIAogLyogQ291bnRzIHVzZXMgb2Ygd3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxp
bmcgY291bnRlcnMuIEJlIHN1cmUgdG8gYWxzbwpJbmRleDogU291cmNlL1dURi93dGYvU2NvcGVk
TGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgU2NvcGVkTGFtYmRhX2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gK
KworbmFtZXNwYWNlIFdURiB7CisKKy8vIFlvdSBjYW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZp
Y2llbnRseSBwYXNzIGxhbWJkYXMgd2l0aG91dCBhbGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJp
bmcKKy8vIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9uIG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUg
c2hvdWxkIGJlIGRlY2xhcmVkIGFzOgorLy8KKy8vIHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJk
YTxNeVRoaW5ncyogKGludCwgU3R1ZmYmKT4mKTsKKy8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9l
czoKKy8vCisvLyB2b2lkIGZvbyhzY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+
KFsmXSAoaW50IHgsIFN0dWZmJiB5KSAtPiBNeVRoaW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBO
b3RlIHRoYXQgdGhpcyByZWxpZXMgb24gZm9vKCkgbm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRo
ZSBsYW1iZGEgaXMgb25seSB2YWxpZCB3aGlsZSBmb28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0g
aGVuY2UgdGhlIG5hbWUgU2NvcGVkTGFtYmRhLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlv
blR5cGU+IGNsYXNzIFNjb3BlZExhbWJkYTsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitjbGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlw
ZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0
VHlwZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZv
aWQqIGFyZyA9IG51bGxwdHIpCisgICAgICAgIDogbV9pbXBsKGltcGwpCisgICAgICAgICwgbV9h
cmcoYXJnKQorICAgIHsKKyAgICB9CisgICAgCisgICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFy
Z3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9pbXBsKG1fYXJnLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7
CisgICAgfQorCitwcml2YXRlOgorICAgIFJlc3VsdFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywg
QXJndW1lbnRUeXBlcyYmLi4uKTsKKyAgICB2b2lkICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRh
RnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJl
c3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1i
ZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBQYXNzZWRGdW5jdG9yPgorICAgIFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2Vk
RnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFy
Z3VtZW50VHlwZXMuLi4pPihpbXBsRnVuY3Rpb24sIHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9y
KHN0ZDo6Zm9yd2FyZDxQYXNzZWRGdW5jdG9yPihmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCitw
cml2YXRlOgorICAgIHN0YXRpYyBSZXN1bHRUeXBlIGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVu
dCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBz
dGF0aWNfY2FzdDxTY29wZWRMYW1iZGFGdW5jdG9yKj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisg
ICAgICAgICAgICBzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7Cisg
ICAgfQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0
aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRhKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAg
IHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3RkOjpm
b3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3Vz
aW5nIFdURjo6U2NvcGVkTGFtYmRhOwordXNpbmcgV1RGOjpzY29wZWRMYW1iZGE7CisKKyNlbmRp
ZiAvLyBTY29wZWRMYW1iZGFfaAorCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTE2
NTApCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5
LDYgKzc5LDExIEBAIHB1YmxpYzoKICAgICB7CiAgICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0
b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5j
dG9yKSkKKyAgICB7CisgICAgfQorCiBwcml2YXRlOgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3Vt
ZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwx
MSBAQCBSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9y
PihmdW5jdG9yKSk7CiB9Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1l
IEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNr
KEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRh
c2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9
CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264243</attachid>
            <date>2015-10-28 14:12:31 -0700</date>
            <delta_ts>2015-10-28 14:29:07 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>690094</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNjg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxMCBA
QAorMjAxNS0xMC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJj
ZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChX
VEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5o
OgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBh
dHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAg
ICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNCYXNp
Y0Jsb2NrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpCYXNpY0Js
b2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNp
Y0Jsb2NrOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpy
ZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpyZXBsYWNl
UHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cmVtb3ZlTm9wcyk6
CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2suaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6
OkIzOjpCYXNpY0Jsb2NrOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpl
bmQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6c2l6ZSk6CisgICAgICAgIChKU0M6
OkIzOjpCYXNpY0Jsb2NrOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpsYXN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnZhbHVlcyk6CisgICAgICAgIChKU0M6
OkIzOjpCYXNpY0Jsb2NrOjpudW1QcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QmFz
aWNCbG9jazo6cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cHJl
ZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmZyZXF1ZW5jeSk6Cisg
ICAgICAgIChKU0M6OkIzOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBCYXNpY0Jsb2NrRHVtcCk6
CisgICAgICAgIChKU0M6OkIzOjpEZWVwQmFzaWNCbG9ja0R1bXA6OmR1bXApOgorICAgICAgICAo
SlNDOjpCMzo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9ja0lubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmROZXcpOgorICAgICAg
ICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6bnVtU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIz
OjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6
c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9j
ayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MpOgorICAg
ICAgICAqIGIzL0IzQmFzaWNCbG9ja1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVtb3ZlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OnJlc2V0UmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6QjM6OmJsb2Nrc0luUHJlT3JkZXIp
OgorICAgICAgICAoSlNDOjpCMzo6YmxvY2tzSW5Qb3N0T3JkZXIpOgorICAgICAgICAqIGIzL0Iz
QmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lhbC5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAgICAoSlND
OjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hl
Y2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lh
bDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Zm9yRWFj
aEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIz
OjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lh
bDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVwRHVtcElt
cGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAqIGIz
L0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1ldGEpOgor
ICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NvbW1v
bi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6c2hvdWxkRHVtcElSKToKKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUkF0RWFjaFBoYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OnNo
b3VsZFZhbGlkYXRlSVIpOgorICAgICAgICAoSlNDOjpCMzo6c2hvdWxkVmFsaWRhdGVJUkF0RWFj
aFBoYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OnNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKToKKyAg
ICAgICAgKiBiMy9CM0NvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzNjRCaXQp
OgorICAgICAgICAoSlNDOjpCMzo6aXMzMkJpdCk6CisgICAgICAgICogYjMvQjNDb21tdXRhdGl2
aXR5LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAq
IGIzL0IzQ29tbXV0YXRpdml0eS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjp+Q29uc3QzMlZh
bHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6bmVnQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
MzJWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3QzMlZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpDb25zdDY0VmFsdWU6On5Db25zdDY0VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3Q2NFZhbHVlOjpuZWdDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6
OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAg
ICogYjMvQjNDb25zdDY0VmFsdWUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNDb25zdERvdWJs
ZVZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjp+
Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpu
ZWdDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAg
ICogYjMvQjNDb25zdERvdWJsZVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZh
bHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpDb25zdERv
dWJsZVZhbHVlKToKKyAgICAgICAgKiBiMy9CM0NvbnN0UHRyVmFsdWUuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpDb25zdFB0clZhbHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpD
b25zdFB0clZhbHVlOjpDb25zdFB0clZhbHVlKToKKyAgICAgICAgKiBiMy9CM0NvbnRyb2xWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29udHJvbFZhbHVlOjp+Q29udHJvbFZh
bHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAg
ICAqIGIzL0IzQ29udHJvbFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzRWZmZWN0cy5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6RWZmZWN0czo6ZHVtcCk6CisgICAgICAgICog
YjMvQjNFZmZlY3RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6RWZmZWN0czo6bXVzdEV4
ZWN1dGUpOgorICAgICAgICAqIGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNGcmVxdWVuY3lDbGFzcy5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW50ZWRCbG9jay5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiMy9CM0dlbmVyYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0
ZSk6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM0dl
bmVyYXRlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OkdlbmVy
aWNGcmVxdWVudGVkQmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jazo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVlbnRlZEJs
b2NrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxv
Y2s6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jazo6YmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6
ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OmR1
bXApOgorICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpIZWFwUmFuZ2U6OmR1bXApOgorICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpIZWFwUmFuZ2UpOgorICAgICAgICAoSlND
OjpCMzo6SGVhcFJhbmdlOjp0b3ApOgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkhlYXBSYW5nZTo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6SGVhcFJhbmdlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6OmVuZCk6
CisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6Om92ZXJsYXBzKToKKyAgICAgICAgKiBiMy9C
M0luZGV4TWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFw
KToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhNYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlND
OjpCMzo6SW5kZXhTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFp
bnMpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3Bl
cmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9y
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRl
cmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6Cisg
ICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6Oklu
ZGV4U2V0OjppbmRpY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAg
ICAgICAgKiBiMy9CM0luc2VydGlvblNldC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
SW5zZXJ0aW9uU2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldC5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAg
ICAgICAgKEpTQzo6QjM6Okluc2VydGlvblNldDo6Y29kZSk6CisgICAgICAgIChKU0M6OkIzOjpJ
bnNlcnRpb25TZXQ6OmFwcGVuZEluc2VydGlvbik6CisgICAgICAgIChKU0M6OkIzOjpJbnNlcnRp
b25TZXQ6Omluc2VydFZhbHVlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldElubGluZXMu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAg
ICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6Okxvd2VyVG9BaXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpydW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0bXApOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjplZmZlY3RpdmVBZGRyKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmxvYWRBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6aW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6aW1tT3JUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphcHBlbmRCaW5PcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFwcGVuZFN0b3JlQmluT3ApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjptb3ZlRm9yVHlwZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJlbGF4ZWRNb3ZlRm9yVHlwZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6QWRkcmVzc1NlbGVjdG9yKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRSb290KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRS
b290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxl
Y3Rvcjo6YWNjZXB0SW50ZXJuYWxzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHNMYXRlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5kcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6YWNjZXB0
T3BlcmFuZHNMYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVz
c1NlbGVjdG9yOjp0cnlBZGRTaGlmdDEpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeUFkZFNoaWZ0Mik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlEaXJlY3QpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphY2NlcHRSb290KToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YWNjZXB0Um9vdExhdGUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjphY2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRJbnRlcm5hbHNMYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YWNjZXB0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjphY2NlcHRPcGVyYW5kc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjp0cnlMb2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
dHJ5QWRkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QW5kKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5U3RvcmVBZGRMb2FkKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5U3RvcmVBbmRMb2FkKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5U3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjp0cnlUcnVuY0FyZ3VtZW50UmVnKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5VHJ1bmMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjp0cnlBcmd1bWVudFJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlD
b25zdDY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5SWRlbnRpdHkp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAg
ICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpN
ZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiMy9CM09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Omlz
Q2hlY2tNYXRoKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9y
aWdpbjo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgor
ICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpQYXRjaHBvaW50U3BlY2lhbCk6CisgICAgICAgIChK
U0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAg
KEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6
QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50
U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6
OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpkZWVwRHVt
cEltcGwpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDogQWRkZWQuCisgICAg
ICAgICogYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OlBhdGNocG9pbnRWYWx1ZTo6flBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQ
YXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1
ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyk6
CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSk6Cisg
ICAgICAgICogYjMvQjNQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQ
aGFzZVNjb3BlOjpQaGFzZVNjb3BlKToKKyAgICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6On5Q
aGFzZVNjb3BlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAg
ICogYjMvQjNQcm9jZWR1cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6flByb2NlZHVyZSk6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVP
cmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToK
KyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmF0KToKKyAgICAg
ICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpQ
cm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpp
dGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJh
dG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6
Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6Zmlu
ZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZh
bHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0
b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xs
ZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2V0TGFz
dFBoYXNlTmFtZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Omxhc3RQaGFzZU5hbWUp
OgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlByb2NlZHVyZTo6YWRkKToKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpyZWR1Y2VTdHJlbmd0aCk6CisgICAgICAgICog
YjMvQjNSZWR1Y2VTdHJlbmd0aC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdEtp
bmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvQjNTdGFja1Nsb3RLaW5kLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90VmFs
dWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjp+U3RhY2tT
bG90VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKToK
KyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2tTbG90VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpvZmZzZXRGcm9tRlApOgorICAg
ICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6OnNldE9mZnNldEZyb21GUCk6CisgICAgICAg
IChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6U3RhY2tTbG90VmFsdWUpOgorICAgICAgICAqIGIz
L0IzU3RhY2ttYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFj
a21hcCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6flN0YWNrbWFwKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrbWFwOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmNvbnN0cmFpbik6CisgICAgICAgIChK
U0M6OkIzOjpTdGFja21hcDo6cmVwcyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xv
YmJlcik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xvYmJlcmVkKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrbWFwOjpzZXRHZW5lcmF0b3IpOgorICAgICAgICAqIGIzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6
OlN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6On5T
dGFja21hcFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBv
cnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6ZXh0
cmFDbG9iYmVyZWRSZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9y
RWFjaEFyZ0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlk
SW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1w
bCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKToK
KyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAgICAg
KiBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0
aW9uOjpTdWNjZXNzb3JDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNv
bGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6
YXQpOgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0
b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9w
ZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JD
b2xsZWN0aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAqIGIzL0IzU3dpdGNoQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoQ2FzZTo6ZHVtcCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OmNhc2VWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNl
Ojp0YXJnZXQpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6dGFyZ2V0QmxvY2spOgor
ICAgICAgICAqIGIzL0IzU3dpdGNoVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OlN3aXRjaFZhbHVlOjp+U3dpdGNoVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnJlbW92ZUNhc2UpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmFwcGVuZENh
c2UpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0
Y2hWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphY2NlcHRz
KToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpudW1DYXNlVmFsdWVzKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpjYXNlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6
U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6
OmZhbGxUaHJvdWdoKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0
Y2hWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRl
cmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6
b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Oml0ZXJhdG9yOjpvcGVy
YXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpiZWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZW5kKToKKyAgICAgICAgKiBiMy9CM1R5cGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNUeXBl
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6aXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6
aXNGbG9hdCk6CisgICAgICAgIChKU0M6OkIzOjpwb2ludGVyVHlwZSk6CisgICAgICAgICogYjMv
QjNVcHNpbG9uVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6flVwc2lsb25WYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBN
ZXRhKToKKyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9u
VmFsdWU6OnBoaSk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OlVwc2lsb25WYWx1
ZSk6CisgICAgICAgICogYjMvQjNVc2VDb3VudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OlVzZUNvdW50czo6VXNlQ291bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6
flVzZUNvdW50cyk6CisgICAgICAgICogYjMvQjNVc2VDb3VudHMuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpVc2VDb3VudHM6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzVmFsaWRh
dGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OnZhbGlkYXRlKToKKyAgICAgICAgKiBi
My9CM1ZhbGlkYXRlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp+VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxh
Y2VXaXRoTm9wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjpkZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bmVnQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFkZENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjpzdWJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
ZWZmZWN0cyk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6cGVyZm9ybVN1YnN0aXR1dGlvbik6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OnR5cGVGb3IpOgorICAgICAgICAqIGIzL0IzVmFsdWUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXApOgor
ICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0NvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0lu
dCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnRQdHIpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50UHRyKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6Y29u
c3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6b2Zm
c2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2FpcjogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9B
aXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
OjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29uZCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
U3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp2
YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
OjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Jl
Zyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmcFRt
cEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVh
Y2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUluZGV4
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24pOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpC
YXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkZWVw
RHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgor
ICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2lj
QmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdpbik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVuZElu
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2lj
QmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6cHJl
ZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nv
cnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBCYXNp
Y0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVtcDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkND
YWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpp
c1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNTdGFj
ayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lz
dGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAgICog
YjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyQ29k
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
b2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICogYjMv
YWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5ld1Rt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJhbWVT
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9yW10p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tTbG90
c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29s
bGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHND
b2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHND
b2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3Rh
Y2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90
c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2luKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVuZCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlvbik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxz
Q29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNw
ZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNw
ZWNpYWxzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0TGFzdFBoYXNlTmFtZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Omxhc3RQaGFzZU5hbWUpOgorICAgICAgICAq
IGIzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdlbmVyYXRlKToK
KyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckdlbmVyYXRlZC5jcHA6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0aW9u
Q29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aGFuZGxlQ2FsbGVlU2F2ZXMpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlv
blNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjpJbnNl
cnRpb25TZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmNvZGUpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmFwcGVuZEluc2VydGlvbik6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5zZXJ0SW5zdCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBiMy9haXIv
QWlySW5zdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpkdW1wKToK
KyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zdDo6SW5zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Om9wY29kZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpGb3JFYWNoPFRtcD46OmZv
ckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpGb3JFYWNoPEFyZz46OmZvckVhY2gpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6SW5zdDo6aGFzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmV4
dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OnJlcG9ydFVz
ZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjppc1NoaWZ0VmFsaWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjppc0xzaGlmdDMyVmFsaWQpOgorICAgICAgICAqIGIzL2Fpci9B
aXJMaXZlbmVzcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Okxp
dmVuZXNzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OmxpdmVBdEhlYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6bGl2ZUF0VGFpbCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OkxvY2FsQ2FsYyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OmxpdmUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjp0YWtlTGl2ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OmV4ZWN1dGUpOgorICAgICAgICAqIGIzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlczogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGhhc2VTY29wZTo6UGhhc2VTY29w
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBoYXNlU2NvcGU6On5QaGFzZVNjb3BlKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIv
QWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpn
cHJzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6ZnByc0luUHJpb3Jp
dHlPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5Lmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8R1BSSW5mbz46OmluUHJpb3Jp
dHlPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlJlZ2lzdGVyc0luUHJpb3JpdHlPcmRl
cjxGUFJJbmZvPjo6aW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cmVn
c0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMvYWlyL0FpclNwZWNpYWwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6U3BlY2lhbCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlNwZWNpYWw6On5TcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3BlY2lhbDo6bmFtZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6OmR1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpkZWVwRHVtcCk6CisgICAgICAgICogYjMv
YWlyL0FpclNwZWNpYWwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBTcGVj
aWFsRHVtcDo6RGVlcFNwZWNpYWxEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFNw
ZWNpYWxEdW1wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6ZGVlcER1bXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6c3BpbGxFdmVyeXRoaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxF
dmVyeXRoaW5nLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmR1bXApOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3RhY2tTbG90OjpTdGFja1Nsb3QpOgorICAgICAgICAqIGIzL2Fpci9BaXJTdGFja1Nsb3QuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6Ynl0ZVNpemUpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmtpbmQpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTdGFja1Nsb3Q6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjphbGlnbm1lbnQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnZhbHVlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpvZmZzZXRGcm9tRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpEZWVwU3RhY2tTbG90RHVtcDo6RGVlcFN0YWNrU2xvdER1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwU3RhY2tTbG90RHVtcDo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZHVtcCk6CisgICAgICAgICogYjMv
YWlyL0FpclRtcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmdwVG1wRm9ySW5kZXgpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpUbXA6OmZwVG1wRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzR1ApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpUbXA6OmlzR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQUik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6Omdwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnByKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Omhhc1Rt
cEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEluZGV4KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6VG1wOjp0bXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNBbGl2ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Omhh
c2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjplbmNvZGVGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZW5jb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjplbmNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNF
bmNvZGVkR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEZQKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUFIpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzRW5jb2RlZEZQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNFbmNvZGVkR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEZQ
VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVHUFIpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUZQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6ZGVjb2RlR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUZQVG1w
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wSW5saW5l
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpUbXApOgorICAgICAgICAq
IGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp2
YWxpZGF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpclZhbGlkYXRlLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOiBBZGRlZC4KKyAgICAgICAgKiBiMy9nZW5l
cmF0ZV9wYXR0ZXJuX21hdGNoZXIucmI6IEFkZGVkLgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0NDIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExvYWQ0Mik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBZGRBcmdzKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RBZGRBcmdzMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3Jl
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RUcnVuYyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
QWRkMSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3RvcmVBZGRMb2FkKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RTdG9yZUFkZEFuZExvYWQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEFkZDFV
bmNvbW11dGVkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMb2FkT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RMb2FkT2Zmc2V0Tm90Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdExvYWRPZmZzZXRVc2luZ0FkZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TG9hZE9mZnNl
dFVzaW5nQWRkTm90Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKyAgICAgICAg
KHJ1bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzcGVjaWFsaXphdGlvbktpbmQpOgorICAgICAgICAq
IGppdC9SZWcuaDoKKyAgICAgICAgKEpTQzo6UmVnOjppbmRleCk6CisgICAgICAgIChKU0M6OlJl
Zzo6aXNTZXQpOgorICAgICAgICAoSlNDOjpSZWc6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAo
SlNDOjpSZWc6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UmVnOjpB
bGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OlJlZzo6
QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6UmVn
OjpBbGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6
UmVnOjpBbGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpT
Qzo6UmVnOjpBbGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6UmVnOjpBbGxSZWdzSXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnOjpB
bGxSZWdzSXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OlJlZzo6YWxsKToKKyAgICAgICAg
KEpTQzo6UmVnOjppbnZhbGlkKToKKyAgICAgICAgKEpTQzo6UmVnOjpvcGVyYXRvciEpOiBEZWxl
dGVkLgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHA6CisgICAgICAgIChK
U0M6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpSZWdpc3RlckF0T2Zmc2V0TGlzdCk6CisgICAgICAg
ICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyQXRP
ZmZzZXRMaXN0OjpjbGVhcik6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojpz
aXplKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmVuZCk6CisgICAgICAgICogaml0L1JlZ2lz
dGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6
Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpzZXRBbnkpOgorCiAyMDE1LTEw
LTI4ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWx0aW5zIGdl
bmVyYXRvciBzaG91bGQgZW1pdCBFTkFCTEUoRkVBVFVSRSkgZ3VhcmRzIGJhc2VkIG9uIEBjb25k
aXRpb25hbCBhbm5vdGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDYxIEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAKICAgICBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwCiAKKyAgICBiMy9haXIvQWlyQWxsb2Nh
dGVTdGFjay5jcHAKKyAgICBiMy9haXIvQWlyQXJnLmNwcAorICAgIGIzL2Fpci9BaXJCYXNpY0Js
b2NrLmNwcAorICAgIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCisgICAgYjMvYWlyL0FpckNv
ZGUuY3BwCisgICAgYjMvYWlyL0FpckdlbmVyYXRlLmNwcAorICAgIGIzL2Fpci9BaXJHZW5lcmF0
ZWQuY3BwCisgICAgYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAorICAgIGIzL2Fpci9B
aXJJbnNlcnRpb25TZXQuY3BwCisgICAgYjMvYWlyL0Fpckluc3QuY3BwCisgICAgYjMvYWlyL0Fp
clBoYXNlU2NvcGUuY3BwCisgICAgYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCisgICAg
YjMvYWlyL0FpclNwZWNpYWwuY3BwCisgICAgYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAK
KyAgICBiMy9haXIvQWlyU3RhY2tTbG90LmNwcAorICAgIGIzL2Fpci9BaXJUbXAuY3BwCisgICAg
YjMvYWlyL0FpclZhbGlkYXRlLmNwcAorCisgICAgYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAor
ICAgIGIzL0IzQmFzaWNCbG9jay5jcHAKKyAgICBiMy9CM0NoZWNrU3BlY2lhbC5jcHAKKyAgICBi
My9CM0NoZWNrVmFsdWUuY3BwCisgICAgYjMvQjNDb21tb24uY3BwCisgICAgYjMvQjNDb21tdXRh
dGl2aXR5LmNwcAorICAgIGIzL0IzQ29uc3QzMlZhbHVlLmNwcAorICAgIGIzL0IzQ29uc3Q2NFZh
bHVlLmNwcAorICAgIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKKyAgICBiMy9CM0NvbnRyb2xW
YWx1ZS5jcHAKKyAgICBiMy9CM0VmZmVjdHMuY3BwCisgICAgYjMvQjNGcmVxdWVuY3lDbGFzcy5j
cHAKKyAgICBiMy9CM0dlbmVyYXRlLmNwcAorICAgIGIzL0IzSGVhcFJhbmdlLmNwcAorICAgIGIz
L0IzSW5zZXJ0aW9uU2V0LmNwcAorICAgIGIzL0IzTG93ZXJUb0Fpci5jcHAKKyAgICBiMy9CM01l
bW9yeVZhbHVlLmNwcAorICAgIGIzL0IzT3Bjb2RlLmNwcAorICAgIGIzL0IzT3JpZ2luLmNwcAor
ICAgIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCisgICAgYjMvQjNQYXRjaHBvaW50VmFsdWUu
Y3BwCisgICAgYjMvQjNQaGFzZVNjb3BlLmNwcAorICAgIGIzL0IzUHJvY2VkdXJlLmNwcAorICAg
IGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisgICAgYjMvQjNTdGFja21hcC5jcHAKKyAgICBiMy9C
M1N0YWNrbWFwU3BlY2lhbC5jcHAKKyAgICBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwCisgICAgYjMv
QjNTdGFja1Nsb3RWYWx1ZS5jcHAKKyAgICBiMy9CM1N3aXRjaENhc2UuY3BwCisgICAgYjMvQjNT
d2l0Y2hWYWx1ZS5jcHAKKyAgICBiMy9CM1R5cGUuY3BwCisgICAgYjMvQjNVcHNpbG9uVmFsdWUu
Y3BwCisgICAgYjMvQjNVc2VDb3VudHMuY3BwCisgICAgYjMvQjNWYWxpZGF0ZS5jcHAKKyAgICBi
My9CM1ZhbHVlLmNwcAorICAgIGIzL0IzVmFsdWVSZXAuY3BwCisKICAgICBiaW5kaW5ncy9TY3Jp
cHRGdW5jdGlvbkNhbGwuY3BwCiAgICAgYmluZGluZ3MvU2NyaXB0T2JqZWN0LmNwcAogICAgIGJp
bmRpbmdzL1NjcmlwdFZhbHVlLmNwcApAQCAtMTI3NCw0ICsxMzI5LDQgQEAgZW5kaWYgKCkKICMg
Rm9yY2Ugc3RhZ2luZyBvZiBzaGFyZWQgc2NyaXB0cywgZXZlbiBpZiB0aGV5IGFyZW4ndCBkaXJl
Y3RseSB1c2VkIHRvIGJ1aWxkIEphdmFTY3JpcHRDb3JlLgogCiBhZGRfY3VzdG9tX3RhcmdldChz
dGFnZVNoYXJlZFNjcmlwdHMgREVQRU5EUyAke0phdmFTY3JpcHRDb3JlX1NDUklQVFN9KQotYWRk
X2RlcGVuZGVuY2llcyhKYXZhU2NyaXB0Q29yZSBzdGFnZVNoYXJlZFNjcmlwdHMpClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQorYWRkX2RlcGVuZGVuY2llcyhKYXZhU2NyaXB0Q29yZSBzdGFn
ZVNoYXJlZFNjcmlwdHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgVlBBVEggPSBc
CiAKIFBZVEhPTiA9IHB5dGhvbgogUEVSTCA9IHBlcmwKK1JVQlkgPSBydWJ5CiAKIEphdmFTY3Jp
cHRDb3JlX1NDUklQVFNfRElSID0gJChKYXZhU2NyaXB0Q29yZSkvU2NyaXB0cwogCkBAIC01OSw2
ICs2MCw5IEBAIGFsbCA6IFwKICAgICBMZXhlci5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5o
IFwKICAgICBSZWdFeHBKaXRUYWJsZXMuaCBcCisgICAgQjNMb3dlcmluZ01hdGNoZXIuaCBcCisg
ICAgQjNBZGRyZXNzTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBcCiAjCiAKICMgSmF2YVNj
cmlwdCBidWlsdGlucy4KQEAgLTI2Miw2ICsyNjYsMTQgQEAgSU5QVVRfR0VORVJBVE9SX1NQRUNJ
RklDQVRJT05TID0gXAogSlNSZXBsYXlJbnB1dHMuaCA6ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJ
RklDQVRJT05TKSAkKElOUFVUX0dFTkVSQVRPUl9TQ1JJUFRTKQogCSQoUFlUSE9OKSAkKEphdmFT
Y3JpcHRDb3JlKS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5IC0t
b3V0cHV0RGlyIC4gLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgJChJTlBVVF9HRU5FUkFUT1Jf
U1BFQ0lGSUNBVElPTlMpCiAKK0IzTG93ZXJpbmdNYXRjaGVyLmg6ICQoSmF2YVNjcmlwdENvcmUp
L2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9CM0xv
d2VyaW5nTWF0Y2hlci5wYXR0ZXJucworCSQoUlVCWSkgJF4gCitCM0FkZHJlc3NNYXRjaGVyLmg6
ICQoSmF2YVNjcmlwdENvcmUpL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXgorCitB
aXJPcGNvZGUuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIg
JChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgor
CiAjIER5bmFtaWNhbGx5LWRlZmluZWQgdGFyZ2V0cyBhcmUgbGlzdGVkIGJlbG93LiBTdGF0aWMg
dGFyZ2V0cyBiZWxvbmcgdXAgdG9wLgogCiBhbGwgOiBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDYgKzI1LDcgQEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2ll
cyA9ICgKKwkJCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKIAkJCQk1RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKIAkJCQk1RDZCMkE1MTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKIAkJCQk1RDZCMkE1NTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKQEAgLTY4NSw2ICs2ODYsMTMxIEBACiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsK
IAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdKSVRDb2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBN
YWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICov
OyB9OworCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovOyB9OworCQkwRkVD
ODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNTFCREFDREFDMDA4MEZG
NzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTAwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5j
cHAgKi87IH07CisJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MDIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2tJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmgg
Ki87IH07CisJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZFQzg1MDUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi87IH07CisJ
CTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJGMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi87IH07CisJCTBGRUM4
NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHku
aCAqLzsgfTsKKwkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMz
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTBF
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3QzMlZhbHVlLmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDNTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVDODUxMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
RG91YmxlVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmgg
Ki87IH07CisJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDOTFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxNDFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnRyb2xWYWx1ZS5oICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVx
dWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi87
IH07CisJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQzFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9OworCQkwRkVDODUxNzFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Zy
ZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNH
ZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBG
RUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5oICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFw
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRE
MTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9OworCQkwRkVDODUxQzFCREFD
REFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQu
aCAqLzsgfTsKKwkJMEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMzFC
REFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsKKwkJMEZFQzg1MUUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJU
b0Fpci5oICovOyB9OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyog
QjNNZW1vcnlWYWx1ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNP
cGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1
MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNv
ZGUuaCAqLzsgfTsKKwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ5MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBGRUM4NTI0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi87IH07
CisJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1
MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTI3MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRj
aHBvaW50VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovOyB9
OworCQkwRkVDODUyOTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERGMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVDODUyQTFCREFDREFDMDA4
MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmgg
Ki87IH07CisJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMTFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkwRkVDODUyQzFCREFDREFD
MDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovOyB9OworCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
MzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4
NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2ttYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87IH07CisJCTBGRUM4NTMw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFCREFDREFDMDA4MEZGNzQg
LyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUzMTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oICovOyB9OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RL
aW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovOyB9OworCQkw
RkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFOTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi87IH07CisJCTBG
RUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsKKwkJMEZFQzg1MzcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0
Y2hDYXNlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNo
Q2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovOyB9OworCQkwRkVDODUz
OTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRGMDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovOyB9Owor
CQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1R5cGUuY3BwICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
MjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBGRUM4NTNEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovOyB9OworCQkwRkVD
ODUzRjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXNlQ291bnRzLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKKwkJMEZF
Qzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1
NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuY3BwICovOyB9OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1NDUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMu
aCAqLzsgfTsKKwkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkwRkVDODU0NzFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAq
LzsgfTsKKwkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDgx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovOyB9OworCQkwRkVDODU2
RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFsbG9jYXRlU3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFyZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5o
ICovOyB9OworCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QzFC
REFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTcyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFz
aWNCbG9jay5oICovOyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxT
cGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovOyB9Owor
CQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTc1MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLzsgfTsK
KwkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDb2RlLmggKi87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVx
dWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLzsg
fTsKKwkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUzMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTc5MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi87
IH07CisJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTUx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi87IH07CisJCTBGRUM4
NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NjFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9OworCQkwRkVDODU3QzFCREFD
REM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJIYW5kbGVDYWxsZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQg
LyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
Y3BwICovOyB9OworCQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1
OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBGRUM4NTdG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmgg
Ki87IH07CisJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUQxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4NTgzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTg1MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmggKi87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVj
aWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1
ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
cGVjaWFsLmggKi87IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2
ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi87
IH07CisJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY1MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsgfTsKKwkJMEZFQzg1OEIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWly
U3RhY2tTbG90LmNwcCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0
YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovOyB9OworCQkwRkVD
ODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJU
bXAuY3BwICovOyB9OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2OTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICov
OyB9OworCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1OTExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAq
LzsgfTsKKwkJMEZFQzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU5MjFCREIx
RTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLzsgfTsKKwkJMEZFQzg1QTMxQkRCNUNG
MTAwODBGRjc0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZv
dW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQkwRkVDODVBNDFCREI1Q0YxMDA4MEZGNzQgLyog
SmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRD
b3JlLmZyYW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3Ri
My5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLzsgfTsKKwkJMEZFQzg1QjMxQkRF
RDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29u
c3RQdHJWYWx1ZS5oICovOyB9OworCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNl
cnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1QjQxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsK
KwkJMEZFQzg1QkExQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCNTFCRTE0NjJGMDA4
MEZGNzQgLyogQjNJbnNlcnRpb25TZXQuaCAqLzsgfTsKKwkJMEZFQzg1QkIxQkUxNDYyRjAwODBG
Rjc0IC8qIEIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0
aW9uU2V0SW5saW5lcy5oICovOyB9OworCQkwRkVDODVCQzFCRTE0NjJGMDA4MEZGNzQgLyogQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODVCNzFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAg
Ki87IH07CisJCTBGRUM4NUJEMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCODFC
RTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oICovOyB9OworCQkwRkVDODVDMTFC
RTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3Rz
LmggKi87IH07CisJCTBGRUM4NUMyMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCRjFC
RTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovOyB9OworCQkwRkVDODVDMzFCRTE2
N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5n
ZS5oICovOyB9OworCQkwRkVDODVDNTFCRTE2RjVBMDA4MEZGNzQgLyogQjNFZmZlY3RzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUM0MUJF
MTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwICovOyB9OwogCQkwRkVENjdCOTFCMjYyNTZE
MDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAv
KiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkVENjdCQTFCMjYyNTZE
MDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCODFCMjYyNTZEMDA2NkNFMTUgLyog
REZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi87IH07CiAJCTBGRUU5ODQxMUE4ODY1QjcwMDc1
NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFyYXJn
c0ZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE4MzksNiArMTk2NSwxMyBAQAogCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRkNFRkFC
NTE4MDVENjE2MDA0NzJDRTQ7CiAJCQlyZW1vdGVJbmZvID0gbGx2bUZvckpTQzsKIAkJfTsKKwkJ
MEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
KwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IDA4
NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlw
ZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3
NDsKKwkJCXJlbW90ZUluZm8gPSB0ZXN0YjM7CisJCX07CiAJCTBGRjkyMkQyMTRGNDZCMkYwMDQx
QTI0RSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFD
MDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTgwLDYgKzI3MTMsMTMwIEBACiAJCTBGRUEw
QTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdK
SVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyog
QjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNTFCREFDREFDMDA4MEZG
NzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrLmg7IHBh
dGggPSBiMy9CM0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrVXRpbHMuaDsgcGF0aCA9IGIzL0IzQmFz
aWNCbG9ja1V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNCbG9ja1dvcmtsaXN0Lmg7IHBhdGggPSBiMy9CM0Jsb2NrV29ya2xpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQ2hlY2tTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q2hlY2tTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tT
cGVjaWFsLmg7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNDaGVja1ZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M0NvbW1vbi5jcHA7IHBhdGggPSBiMy9CM0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbW1vbi5oOyBwYXRoID0gYjMvQjNDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0NvbW11dGF0aXZpdHkuY3BwOyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29tbXV0YXRpdml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Nv
bW11dGF0aXZpdHkuaDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb25zdDMyVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDMyVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdDMyVmFsdWUuaDsgcGF0aCA9
IGIzL0IzQ29uc3QzMlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0Nv
bnN0NjRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM2MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdDY0VmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZhbHVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDOTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb250cm9sVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNDb250cm9sVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb250cm9sVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjND
b250cm9sVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb250cm9s
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3Mu
Y3BwOyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3MuaDsgcGF0
aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9C
M0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRD
RTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM0dlbmVyYXRlLmNwcDsgcGF0aCA9IGIzL0IzR2VuZXJhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQg
LyogQjNHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVy
YXRlLmg7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljRnJlcXVlbnRlZEJs
b2NrLmg7IHBhdGggPSBiMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbmRleE1hcC5oOyBwYXRoID0g
YjMvQjNJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREMjFC
REFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0luZGV4U2V0Lmg7IHBhdGggPSBiMy9CM0luZGV4U2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9B
aXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNMb3dlclRvQWly
LmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlclRvQWlyLmg7IHBhdGggPSBiMy9CM0xv
d2VyVG9BaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTWVtb3J5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNN
ZW1vcnlWYWx1ZS5oOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcGNvZGUuY3BwOyBwYXRoID0g
YjMvQjNPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREODFC
REFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNPcGNvZGUuaDsgcGF0aCA9IGIzL0IzT3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbi5jcHA7IHBhdGggPSBi
My9CM09yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM09yaWdpbi5oOyBwYXRoID0gYjMvQjNPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRjaHBvaW50
U3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBv
aW50U3BlY2lhbC5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRj
aHBvaW50VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRj
aHBvaW50VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBv
aW50VmFsdWUuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQaGFzZVNjb3BlLmNw
cDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQaGFzZVNjb3BlLmg7IHBhdGggPSBiMy9CM1BoYXNl
U2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzUHJvY2VkdXJlLmNwcDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJv
Y2VkdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlLmg7
IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlSW5saW5lcy5oOyBwYXRoID0gYjMv
QjNQcm9jZWR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXAuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrbWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3Rh
Y2ttYXAuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmNw
cDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmg7IHBh
dGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5oOyBwYXRoID0gYjMvQjNTdGFj
a1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNTdGFja1Ns
b3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0IzU3VjY2Vzc29yQ29sbGVj
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRDFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzU3dpdGNoQ2FzZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNT
d2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoQ2Fz
ZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuY3BwOyBwYXRoID0g
YjMvQjNTd2l0Y2hWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuaDsgcGF0aCA9IGIzL0IzU3dpdGNoVmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1R5
cGUuY3BwOyBwYXRoID0gYjMvQjNUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1R5cGUuaDsgcGF0aCA9IGIzL0IzVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNVcHNpbG9u
VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVcHNpbG9uVmFsdWUuaDsgcGF0
aCA9IGIzL0IzVXBzaWxvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1VzZUNvdW50cy5jcHA7IHBhdGggPSBiMy9CM1VzZUNv
dW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1VzZUNvdW50cy5oOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWxpZGF0ZS5jcHA7IHBh
dGggPSBiMy9CM1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNWYWxpZGF0ZS5oOyBwYXRoID0gYjMvQjNWYWxpZGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1ZhbHVlLmg7IHBhdGggPSBiMy9CM1ZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlSW5saW5lcy5o
OyBwYXRoID0gYjMvQjNWYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZVJlcC5jcHA7IHBhdGggPSBiMy9CM1Zh
bHVlUmVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNWYWx1ZVJlcC5oOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVN0
YWNrLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRl
U3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFj
ay5oOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBcmcuY3BwOyBwYXRoID0gYjMvYWly
L0FpckFyZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyQXJnLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJhc2ljQmxvY2suY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmg7IHBhdGggPSBiMy9haXIvQWly
QmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0RTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ0Nh
bGxTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJDQ2FsbFNwZWNp
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTAxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNvZGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJD
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUyMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9haXIvQWlyRnJlcXVlbnRlZEJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWly
R2VuZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGUu
aDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsg
cGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU5MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlySW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckluc3QuY3Bw
OyBwYXRoID0gYjMvYWlyL0Fpckluc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlySW5zdElu
bGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3MuaDsgcGF0aCA9IGIz
L2Fpci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1
RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQ
aGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlyUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlU2NvcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQ
cmlvcml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpclJlZ2lzdGVyUHJpb3JpdHkuaDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEFpclNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNwZWNpYWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGVj
aWFsLmg7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwaWxsRXZlcnl0aGlu
Zy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZl
cnl0aGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xv
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTdGFja1Nsb3Qu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tTbG90Lmg7IHBhdGggPSBiMy9h
aXIvQWlyU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY4
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyVG1wLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJUbXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1w
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRtcC5oOyBwYXRoID0gYjMv
YWlyL0FpclRtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJUbXBJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyVG1wSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyog
QWlyVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
VmFsaWRhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpclZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclZhbGlkYXRlLmg7IHBhdGgg
PSBiMy9haXIvQWlyVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1OTIxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZWQuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckdlbmVyYXRlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NUFEMUJE
QjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RiMzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKKwkJMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0YjMuY3BwOyBwYXRoID0gYjMvdGVzdGIzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0
IC8qIEIzQ29uc3RQdHJWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0NvbnN0UHRyVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3RQdHJWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRp
b25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNJbnNlcnRp
b25TZXQuY3BwOyBwYXRoID0gYjMvQjNJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODVCNTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbnNlcnRpb25TZXQuaDsgcGF0
aCA9IGIzL0IzSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NUI2MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbnNlcnRpb25TZXRJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM0luc2VydGlvblNldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5jcHA7IHBh
dGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5oOyBwYXRoID0gYjMv
QjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODVC
RTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNFZmZlY3RzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5n
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0hlYXBSYW5nZS5j
cHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5oOyBwYXRoID0gYjMvQjNIZWFwUmFu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1QzQxQkUxNkY1QTAwODBG
Rjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3RzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9p
c3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdD
b25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I4MUIyNjI1NkQw
MDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZH
Q29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZhcmFyZ3NGcmFtZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzgwMSw2ICs0MDU4LDE1IEBACiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCTBGRUM4NUEyMUJEQjVDRjEw
MDgwRkY3NCAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJ
CQkJMEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZy
YW1ld29ya3MgKi8sCisJCQkJMEZFQzg1QTQxQkRCNUNGMTAwODBGRjc0IC8qIEphdmFTY3JpcHRD
b3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNjE0RjQ2QjEzMDA0MUEy
NEUgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNl
OwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTM4NzAsNiArNDEzNiw3IEBA
CiAJCQkJMTQxMjExMjAwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5
QkYwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCiAJCQkJNjUxMTIzMDUxNDA0NkE0QzAw
MkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8q
IHRlc3RiMyAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMzg5MCw2ICs0MTU3LDcgQEAKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBG
RjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRD
QUQ0MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBh
c3NlbWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovLAogCQkJ
CUE1NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBiaW5kaW5ncyAqLywKIAkJCQlBN0Q4MDE5RjE4
ODBENjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFG
NjgxIC8qIGJ5dGVjb2RlICovLApAQCAtNDEwMyw2ICs0MzcxLDE0NCBAQAogCQkJbmFtZSA9IGZ0
bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRUM4NEIyMUJEQUNENUUw
MDgwRkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKKwkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0
QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJMEZFQzg0Qjcx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NEI4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8sCisJCQkJMEZFQzg0QkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGRUM4NEJCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0QkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0QkQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QkUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29t
bW9uLmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5jcHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5oICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgKi8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLywK
KwkJCQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oICov
LAorCQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8s
CisJCQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggKi8sCisJ
CQkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8sCisJCQkJMEZF
Qzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oICovLAorCQkJCTBGRUM4NENCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKKwkJCQkwRkVDODRDQzFC
REFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovLAorCQkJCTBGRUM4NENEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NENFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODRDRjFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODVCRjFCRTE2N0Ew
MDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovLAorCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5oICovLAorCQkJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0luZGV4TWFwLmggKi8sCisJCQkJMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5k
ZXhTZXQuaCAqLywKKwkJCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25T
ZXQuY3BwICovLAorCQkJCTBGRUM4NUI1MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNl
dC5oICovLAorCQkJCTBGRUM4NUI2MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElu
bGluZXMuaCAqLywKKwkJCQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWly
LmNwcCAqLywKKwkJCQkwRkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmgg
Ki8sCisJCQkJMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICov
LAorCQkJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggKi8sCisJ
CQkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLywKKwkJCQkwRkVD
ODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLywKKwkJCQkwRkVDODREOTFCREFD
REFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovLAorCQkJCTBGRUM4NERBMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM09yaWdpbi5oICovLAorCQkJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQg
LyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8sCisJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Byb2NlZHVyZS5jcHAgKi8sCisJCQkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJv
Y2VkdXJlLmggKi8sCisJCQkJMEZFQzg0RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJl
SW5saW5lcy5oICovLAorCQkJCTBGRUM4NUI3MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0
cmVuZ3RoLmNwcCAqLywKKwkJCQkwRkVDODVCODFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VT
dHJlbmd0aC5oICovLAorCQkJCTBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFw
LmNwcCAqLywKKwkJCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICov
LAorCQkJCTBGRUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAg
Ki8sCisJCQkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmgg
Ki8sCisJCQkJMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAg
Ki8sCisJCQkJMEZFQzg0RTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICov
LAorCQkJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICov
LAorCQkJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24u
aCAqLywKKwkJCQkwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAq
LywKKwkJCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8sCisJ
CQkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovLAorCQkJ
CTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8sCisJCQkJMEZF
Qzg0RjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgKi8sCisJCQkJMEZFQzg0RjIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovLAorCQkJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVXBzaWxvblZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXNlQ291bnRzLmNwcCAqLywKKwkJCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNV
c2VDb3VudHMuaCAqLywKKwkJCQkwRkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0
ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAq
LywKKwkJCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGQjFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLywKKwkJCQkwRkVDODRGQzFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8sCisJCQkJMEZFQzg0RkQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLywKKwkJCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQg
LyogdGVzdGIzLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0gYjM7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OworCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODU0ODFCREFD
REM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi8sCisJCQkJMEZFQzg1NDkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLywKKwkJCQkwRkVDODU0QTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLywKKwkJCQkwRkVDODU0QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmggKi8sCisJCQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJh
c2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmggKi8sCisJCQkJMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3Bl
Y2lhbC5jcHAgKi8sCisJCQkJMEZFQzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3Bl
Y2lhbC5oICovLAorCQkJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAq
LywKKwkJCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBG
RUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkw
RkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4
NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NTkyMUJE
QjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovLAorCQkJCTBGRUM4NTU1MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovLAorCQkJCTBGRUM4NTU2MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgKi8sCisJCQkJMEZFQzg1
NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8sCisJCQkJMEZF
Qzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZF
Qzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovLAorCQkJCTBGRUM4
NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLywKKwkJCQkwRkVDODU1QjFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovLAorCQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnN0SW5saW5lcy5oICovLAorCQkJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQ
aGFzZVNjb3BlLmNwcCAqLywKKwkJCQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhh
c2VTY29wZS5oICovLAorCQkJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmNwcCAqLywKKwkJCQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVn
aXN0ZXJQcmlvcml0eS5oICovLAorCQkJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
cGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lh
bC5oICovLAorCQkJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwICovLAorCQkJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaCAqLywKKwkJCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90
LmNwcCAqLywKKwkJCQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90Lmgg
Ki8sCisJCQkJMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8sCisJCQkJ
MEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovLAorCQkJCTBGRUM4NTZBMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1NkIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRkVDODU2QzFCREFDREM3MDA4
MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLywKKwkJCSk7CisJCQluYW1lID0gYWlyOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMEZGNDI3MkUxNThFQkNDRTAwNENCOUZGIC8q
IGRpc2Fzc2VtYmxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CkBAIC02MDg5LDYgKzY0OTUsNyBAQAogCQkJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBB
Ym9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0NzEw
IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVGMEY1
MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxs
YmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNTBFMTZGNUNEMDBCMzQ0
NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTE3LDggKzY1MjQsMTAgQEAKIAkJ
CQlBNUVBNzBFODE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQg
LyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRC
OEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRl
Z2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAg
LyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjAxODJCN0EwNDAw
RjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE1MTg4MEQ2
NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjEz
Myw2ICs2NTQyLDcgQEAKIAkJCQk5OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNf
bW9kZWwucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNTFCRDU5OTMxMDBGNDU3NUMgLyog
YnVpbHRpbnNfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERUExMzIxQjlGMzE2
MzAwNkQ2NUREIC8qIEJ1aWx0aW5VdGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
RTcyOTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjE0Myw2ICs2NTUzLDcgQEAKIAkJCQkwRjJERDgwQjFBQjNEODU4MDBC
QkI4RTggLyogQnl0ZWNvZGVLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
c0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAw
OThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNC
RTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNF
QTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNzYs
OSArNjU4NywxMSBAQAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTgxODU2QTQ4OTAwMkVENjkyIC8qIENvbWJpbmVk
RG9tYWlucy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYw
IC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODVCQTFCRTE0
NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVG
MTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFj
dEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUEzQTgxNzk3NDMyRDAw
RTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNG
NDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2
QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MTg2LDggKzY1OTksMTAgQEAKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQg
LyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRUExNzQ4OTZD
NzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNTNDRTA4QTE4QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAwNjMzMjMxIC8qIENvbnNv
bGVNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxOTFCREEwNjgwMDAzMzFCODQg
LyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDg2MThC
QzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTYy
MDIsNiArNjYxNyw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJs
b2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEy
IC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAyRDE0QTNDNkUwMDA1
NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
NDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0Mx
MUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAq
LywKQEAgLTYyMTMsNiArNjYyOSw3IEBACiAJCQkJOTk1OUU5MkIxQkQxN0ZBNDAwMUFBNDEzIC8q
IGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAv
KiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENE
NkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNDFC
REFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02MjMzLDYgKzY2NTAsNyBAQAogCQkJCUE3MDREOTAzMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0
cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MDFCREFDREM3MDA4MEZGNzQg
LyogQWlyQXJnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0Iy
RTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjQzLDcgKzY2NjEs
OSBAQAogCQkJCTBGMkREODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzIyMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdB
cml0aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAv
KiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8q
IERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTMxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjUzLDYg
KzY2NzMsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2Vy
dGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8q
IERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3
MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyRDFC
REFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAwMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dv
cmtsaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyOTIsOCArNjcxMywxMCBAQAogCQkJCTBGNjZF
MTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5
QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VVc2VzU3RydWN0dXJlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERG
R0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyog
REZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtNjMyMyw2ICs2NzQ2LDcgQEAKIAkJCQk2MkYyQUEzODFCMEJF
REUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk4
MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5
QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NjFCREFDREM3MDA4MEZGNzQgLyog
QWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjMzMSw2ICs2NzU1LDcgQEAKIAkJ
CQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERGR01pbmlmaWVkSUQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENEODkxMCAvKiBERkdNaW5pZmll
ZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzYxQURGMDkwMTAwRUQ3
OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjJD
RDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzQ5LDYgKzY3NzQsNyBAQAogCQkJCTBGQzA5NzZBMTQ2
OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJF
QzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Ns
b3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8q
IERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBG
QzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzNjYsNiArNjc5Miw4IEBACiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2
IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQTFC
RkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdS
ZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdG
OCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQzMTdBMEJCRkQw
MEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTYzOTAsNiAr
NjgxOCw3IEBACiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNr
SW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzJBMTdENTFGNTcwMENB
MkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdF
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMxREIxMjAwODJDNUU4IC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjQwMSw2ICs2ODMwLDcgQEAK
IAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkxNTIyODA5NjAw
Q0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM4
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lz
dGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxODFCREEwNjgw
MDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLApA
QCAtNjQwOSw2ICs2ODM5LDcgQEAKIAkJCQkwRkUwNTAxODFBQTkwOTExMDBEMzNCMzMgLyogRGly
ZWN0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxNjFBQTkwOTExMDBEMzNC
MzMgLyogRGlyZWN0QXJndW1lbnRzT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjcz
MTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0NDdFRTE3QTBCRDcwMDBGNTg5OEUgLyogRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJBODM2Mzg2MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyNDE4QTFCMjU5MDAyNkQ4OEYgLyogRW1wdHlJ
bnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDMxLDYgKzY4NjIsNyBAQAogCQkJCTBG
NTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJl
c3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVB
QjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1
RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5MSw2ICs2
OTIzLDcgQEAKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53
aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8q
IEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NzFCREFDREM3
MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVB
NjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4g
SGVhZGVycyAqLywKQEAgLTY0OTgsOCArNjkzMSwxMCBAQAogCQkJCTJBODM2MzhBMThEN0QwRkUw
MDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTBGQjE5NzRBRTYxMDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRC
RkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlv
blJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTY1MzgsNiArNjk3Myw3
IEBACiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJp
Y0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUExQUE5MDkxMTAwRDMzQjMz
IC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUw
QTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1
MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTYzLDYgKzY5OTksNyBAQAog
CQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZh
bHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0
NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNkRERUExOERBNDRBQjAw
QTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3
NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywK
QEAgLTY2MTYsNiArNzA1Myw3IEBACiAJCQkJQTFCOUUyM0MxQjRFMEQ2NzAwQkM3RkVEIC8qIElu
dGxDb2xsYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgxOTNFMzFCNEUw
Q0RCMDBGQzEwMjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVx
dWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQxQjRFMENEQjAwRkMxMDI5
IC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3
RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUExNTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ2LDYgKzcwODQsNyBAQAogCQkJCTBGMjRF
NTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklU
VGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyog
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjY1Niw5ICs3MDk1LDExIEBACiAJCQkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQ
dHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCREFFQ0Ix
N0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OEIxNDE4NkQxQjYyNTI3RjAwRkIyMDY4IC8qIEpTQXJyb3dGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBK
U0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjY3NSw2ICs3MTE2LDggQEAKIAkJ
CQk4NjVBMzBGMTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNTNDRTA4ODE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxRTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRv
QWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBB
IC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNThDMDI0MjE4
RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NjkwLDYgKzcxMzMsNyBAQAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxh
clZNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNE
b2xsYXJWTVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTY3MDAsMTEgKzcxNDQsMTMgQEAKIAkJCQkwRjJCNjZGMTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MzkxN0U3QjFCNzkwNkZBMDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY2MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVG
RDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmpl
Y3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MzUsNiArNzE4MSw3IEBACiAJ
CQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThC
N0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzY0LDYg
KzcyMTEsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3Ry
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNT
dHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzRTFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3
REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjAw
QjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02Nzk1LDYgKzcyNDMsNyBAQAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAv
KiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJC
OTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NUJCMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNl
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAv
KiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIxLDkg
KzcyNzAsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNlcHRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJ
bnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3
MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBB
NTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURp
c2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0
IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTY4MzYsMTIgKzcyODcsMTQgQEAK
IAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxl
ckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyog
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4
OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUwNDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJp
bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8qIE1h
Y3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBG
ODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1
MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2
NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2
RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjcsMTIgKzczMjAs
MTQgQEAKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5h
dGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQyMTFCOTAxM0RF
MDAzNDZCNTIgLyogTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9kZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI4MThBMUIyNTkwMDI2RDg4RiAvKiBOb25kZXRlcm1p
bmlzdGljSW5wdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDIwRTE2
RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NDMwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlck9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1QzMxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ0NDBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVyUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJEMzkzOTEwM0U0NTYwMDA3RENCNTIgLyogTnVtZXJp
Y1N0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTBDMTlGNkRFODIwMDk4RjVFQyAv
KiBvYmpjX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLApAQCAtNjg4Nyw2ICs3MzQyLDcgQEAK
IAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkx
MCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4
OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2
RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtNjkwMCwxMyAr
NzM1NiwxOCBAQAogCQkJCTBGRjlDRTc0MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0Fj
Y2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2
QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NUJEMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVu
Z3RoLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJp
dmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYw
IC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4
RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZG
NUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1
MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRl
Y29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZG
NzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3
MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25L
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJv
ZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MjgsMTAgKzczODks
MTMgQEAKIAkJCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvdGVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlw
ZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJE
OSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZG
RDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODAx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTNCNEFB
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTUyLDYgKzc0MTYsNyBAQAogCQkJCTBGQzMxNDEy
MTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3
RDIzRUUxODkxQjU1NDAwMzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUyNjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUlu
c3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8q
IFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RjAx
ODIzNDVBRjAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjk1OSw2ICs3NDI0LDcgQEAKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkg
LyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
NEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzBCMEE5RDExQTlCNjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTY5ODgsNiArNzQ1NCw3IEBACiAJCQkJQTcwOUYyRjAxN0Ew
QUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQw
MDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJv
dmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFG
IC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTcwMDcsNiAr
NzQ3NCw3IEBACiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9u
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9u
Z0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZDODJGNTAwMTQ1
M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAw
NTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4
QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKQEAgLTcw
NDMsMTAgKzc1MTEsMTIgQEAKIAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1N0MgLyog
VHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI2QzM5MUFGNDhEREMw
MERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0MDFCREFD
REFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQzk1MkI3
MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkQ0REVDMTk4MzJEQzQwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkQ0REYwMTk4MzJERDYwMDdENEIxOSAvKiBUeXBlU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2Rl
Y29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVk
aXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4RUJFOTEwMDRDQjlG
RiAvKiB1ZGlzODZfaW5wdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzA4NCw4ICs3NTU0LDEwIEBA
CiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Js
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEwQ0RCMUZDMDAzNjRDQ0UgLyogV2Vh
a0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2QTkzRTFBQTREODhEMDAy
RkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGNzI1NjYx
NEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLywKQEAg
LTcxMDcsOSArNzU3OSwxMiBAQAogCQkJCTk5NTlFOTJFMUJEMTdGQTQwMDFBQTQxMyAvKiB4eGQu
cGwgaW4gSGVhZGVycyAqLywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRl
cnByZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4
NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRC
ODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1ODExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwpAQCAtNzEzNCw2ICs3NjA5LDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0g
MEZDRUZBQjYxODA1RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi87CiAJCQlw
cm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuZHluYW1pYyI7CiAJ
CX07CisJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZFQzg1QTgx
QkRCNUNGMTAwODBGRjc0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJ0ZXN0YjMiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEZFQzg1OTUxQkRC
NUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0
IC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlk
ZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHRlc3RiMzsKKwkJCXByb2R1Y3ROYW1l
ID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRkVDODVBRDFCREI1Q0YxMDA4MEZG
NzQgLyogdGVzdGIzICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEZGOTIyQzMxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zm
c2V0c0V4dHJhY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxk
Q29uZmlndXJhdGlvbkxpc3QgPSAwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJh
Y3RvciIgKi87CkBAIC03Mjg5LDYgKzc3ODAsNyBAQAogCQkJCTE0QkQ1OUJFMEEzRThGOTAwMEJB
RjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAvKiBqc2Mg
Ki8sCiAJCQkJNjUxMTIyRjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJ
MEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1RDZCMkE0NzE1MkI5
RTE3MDA1MjMxREUgLyogVGVzdCBUb29scyAqLywKIAkJCSk7CiAJCX07CkBAIC03NTM2LDYgKzgw
MjgsMTQgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKKwkJMEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8gPSB7CisJ
CQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyogdGVz
dGIzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNDE0RjQ2QjEzMDA0MUEyNEUgLyogU291
cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTc1OTEsNiArODA5MSw3IEBACiAJCQkJMEY1NUYwRjQx
NEQxMDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QkQxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3Nl
bWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8q
IEFSTXY3RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODVDMTcxNzk2
NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTk4LDgg
KzgwOTksMTAgQEAKIAkJCQlBN0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYz
NjE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJy
YXlJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNTFCREFD
REFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYyMCw4ICs4MTIzLDEwIEBACiAJCQkJMTQy
OUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2MkVDOUJCNjFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNo
dWZmbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQw
MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2Fs
bExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjND
NiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Mjc2NzMyMzFCNjgw
QzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjM0LDYgKzgx
MzksNyBAQAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENvZGVPcmlnaW4u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAw
QTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0Mx
NjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzY0MSw2ICs4MTQ3LDcgQEAKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJF
OTggLyogQ29tbW9uU2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdB
MUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3RTVBM0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Rh
Y2tTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAv
KiBDb21wbGV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUx
RDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4
MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTc2NTcsNiArODE2NCw3IEBACiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1
c3RvbUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjcz
MDBCODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3
QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
QkMxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZlcnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUxMDdFQzM3NjAwNDI3QTQ4IC8qIERh
dGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NjgsNiArODE3Niw3IEBACiAJCQkJ
MEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJy
ZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4
REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OEQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5
NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03Njc3LDYgKzgxODYsNyBAQAogCQkJCTBGNjM5NDg0MTVFNDgxMTgwMDZBNTk3
QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEOUEyOTQxN0EwQkM3
NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxh
YmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzY4NSw2ICs4MTk1LDcgQEAKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcg
LyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFMjExNDE3
MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDM2OTQxQUU5Q0MzMzAwMEQ0REZC
IC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBC
QkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3MjIs
NiArODIzMyw3IEBACiAJCQkJMkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9u
V2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFE
NyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGOTE4QTYwMDcwMDAx
QTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0EwQkFBODAwNkJBNTU0
IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc2NCwx
NCArODI3NiwxNyBAQAogCQkJCTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAvKiBERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MzkyQzg5MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFj
ZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFRDE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjIzNzk3
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGRkM5NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3N0ExNzk3MzhCODAwOURG
NzQ0IC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzQxNkMxREIwOTAw
ODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNFMDFBQTE5RDM1M0E1
MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJCOUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3ODksNiArODMwNCw4IEBACiAJCQkJMEZDMjBDQjUx
ODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3OTA4NTUxOUEyOTBCMjAwRjYzMTBD
IC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVh
ZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8q
IERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTc4MTYsNiArODMzMyw3IEBACiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5H
Q0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlFNDVBMjUxOEExQjI1
OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
NzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9y
SW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODYwLDYgKzgzNzgsNyBAQAogCQkJCTBG
OEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNC
bG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQxQjUgLyog
RlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBD
QTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCREMxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODY3LDYg
KzgzODYsNyBAQAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjkxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292
ZXJ5T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4OTFCREFD
REM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRM
U3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg3OCw2ICs4Mzk4LDcgQEAKIAkJCQkx
NDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RjE2QjcyQTE3MDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRh
YmxlRHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0Mg
LyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NUMyMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRTRCRkYyQjFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBG
dW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg5OSw2ICs4NDIwLDcgQEAK
IAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3
IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNzFCREFDREFD
MDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYw
QTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA2LDYgKzg0MjgsNyBAQAogCQkJCTlFQTVDN0Ey
MTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0aWFsaXplTExWTU1hYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5RTcyOTQwODE5MEYwMjFFMDAxQTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3QjFCREFDREM3MDA4MEZG
NzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1
QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2Ny
aXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTcsNiArODQ0MCw3IEBACiAJCQkJQTU5
M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg3MTg1NjgzMzUwMDJF
RDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdGQSAvKiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg5MTg1
NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzk3MywxMyArODQ5NywxNyBAQAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3
NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4QUYw
QTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2Fs
bGJhY2tPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFD
QkYyIC8qIEpTQ2FsbGVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4MTg4MEQ2QTgw
MDI2QzM5QiAvKiBKU0NCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlEMTEw
N0VDMzc2MDA0MjdBNDggLyogSlNDZWxsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NUM1
MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxs
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEg
LyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFG
NTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzIwMjhCNjE3OTc2
MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Nzk5MCwxNiArODUxOCwxOSBAQAogCQkJCUZFMzg0RUU3MUFEREI3QUQwMDU1REUyQyAvKiBKU0Rv
bGxhclZNUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYw
MDQyN0E0OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0
OCAvKiBKU0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4NTE4OUIx
QjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVDM0ExQTUxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29s
ZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OTIxODI0NzQ0
NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNFOTE4OTFCMDc3MDAzMUM3RkEgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBK
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4
N0NDM0M2MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9i
amVjdFJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5
MDAxMTBGMTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUyMzFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUMxMTg1QkZBQ0MwMDdFOTVBRCAv
KiBKU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MzNGNTA4MDFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC04MDE4LDYgKzg1NDksNyBAQAogCQkJCUUzMThDQkMwMUI4QUVGNTEwMEEyOTI5
RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlE
QTRBNjFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpT
Tm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3
QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCN0U0MEE0MzA3NjAw
MDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMzEsNiArODU2
Myw3IEBACiAJCQkJRTNFRjg4NzQxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8q
IEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MkMzN0YxQUREQjhGRTAwMTM5NzI2
IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTExMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTkyOEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0ODc0QUU1MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QzBDNEFEMTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTgwNTksNiArODU5Miw3IEBACiAJCQkJNzA5RkI4NjcxQUUz
MzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2
MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8q
IEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDY2
LDkgKzg2MDAsMTIgQEAKIAkJCQkxNDhGMjFCMDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZm
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExp
dGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1N0YxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAw
RURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMjBDRTlE
MTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NDY4MEQyMTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODU0MTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRF
bnRyeXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3
MiAvKiBMTEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJB
N0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA3
Nyw2ICs4NjE0LDcgQEAKIAkJCQlBN0U1QUIzNzE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fz
c2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERTEwN0VDN0U3MDA2NTA0NDYg
LyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3
MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTFG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0QjcyM0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNy
b0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwODYsMTAgKzg2MjQsMTIgQEAK
IAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3MzkxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkzMTgyRDk5MTQwMDUyMkMy
MiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUw
NzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3MDA4NzNEMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxv
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1h
cmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIw
MkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MEE0ODQxQTkwNTFB
RjAwRDczQ0NBIC8qIE1hdGhDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYx
MDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTI4
LDE3ICs4NjY4LDIxIEBACiAJCQkJMEZGNzI5QUQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVy
Qnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUUxNjZBRDM1QzAwMEY1QkEz
IC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTI5MTY3
NzFDMzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVC
QTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRh
YmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyog
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMDFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0
YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2
RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1
NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3Bl
cnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNCMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAw
MTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURFODEwN0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtODE0NywxMCArODY5MSwxMiBAQAogCQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMx
RkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENB
N0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
M0I0QTkxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFj
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzM2MzdBNTFCNjMyMjAyMDBFRTA4NDAgLyogUmVm
bGVjdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3
MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdC
MiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNzEyQjNCMTFDN0Iy
MTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjQyQzUx
MDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTgxNjQsNiArODcxMCw3IEBACiAJCQkJQTVCQTE1RTkxODIzNDBC
MzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1
NThGMTgyNDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1QkExNUVDMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0
b3JEZWJ1Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NUJBMTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RFMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50
aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxODIsNiArODcyOSw3IEBACiAJCQkJQTU0
Q0YyRjkxODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTRDRjJGNTE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTlEQTUxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OTBERDZEMTgyRjQ5OTcwMDU4
ODgwNyAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5
OURBMTE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRUU5ODQzMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgxOTYsNiArODc0NCw3IEBACiAJCQkJMEZEODJFODYxNDFGM0ZGMTAw
MTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzFFQUYx
MTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTIxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZB
IC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5
REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04MjA0LDYgKzg3NTMsNyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1
Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8q
IFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBRjczODJDMThCQkJGOTIw
MDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NUI5MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCNDM4QTMxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQzODE1QUU0QTFDMDA4RjM2M0UgLyogU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMTIs
NiArODc2Miw3IEBACiAJCQkJNzA1QjQxQUQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwNUI0MUFGMUE2RTUwMUUwMDcxNjc1NyAv
KiBTeW1ib2xPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA1QjQxQjExQTZFNTAxRTAw
NzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUz
RjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTcwRUNBNjA3MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0
ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjQwLDYgKzg3OTEsNyBAQAogCQkJCTBGMjRF
NTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdy
aXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4MzFCREFDREM3MDA4
MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyQzFB
QTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjBD
MjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODI1OSw2ICs4ODExLDcgQEAKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwOUZCODZCMUFFMzM1QzYw
MDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBNEVD
OTBCMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1N0QxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QUIzQTE3OTlFNEIyMDBEMjgz
M0QgLyogWDg2RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUy
MTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTgyODUsNiArODgzOCwxMSBAQAogCQkJdGFyZ2V0ID0gMEZDRUZBQjUxODA1RDYxNjAwNDcy
Q0U0IC8qIGxsdm1Gb3JKU0MgKi87CiAJCQl0YXJnZXRQcm94eSA9IDBGQ0VGQUJDMTgwNUQ2NjMw
MDQ3MkNFNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CiAJCX07CisJCTBGRUM4NUIxMUJE
QjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJY
VGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAv
KiB0ZXN0YjMgKi87CisJCQl0YXJnZXRQcm94eSA9IDBGRUM4NUIwMUJEQjVEOEYwMDgwRkY3NCAv
KiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCTBGRjkyMkQzMTRGNDZCMkYwMDQx
QTI0RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVw
ZW5kZW5jeTsKIAkJCXRhcmdldCA9IDBGNDY4MEE5MTRCQTdGRDkwMEJGRTI3MiAvKiBMTEludCBP
ZmZzZXRzICovOwpAQCAtODQwOSw2ICs4OTY3LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IFByb2R1
Y3Rpb247CiAJCX07CisJCTBGRUM4NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25m
aWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsK
KwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGRUM4NUFBMUJEQjVDRjEwMDgwRkY3
NCAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
YXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBU
b29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJP
RFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkw
RkVDODVBQjFCREI1Q0YxMDA4MEZGNzQgLyogUHJvZmlsaW5nICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5h
bWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBGRUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9k
dWN0aW9uICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhl
Y3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9O
QU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRkY5
MjJDQjE0RjQ2QjEzMDA0MUEyNEUgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5
MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtODc2MSw2ICs5
MzUxLDE3IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRkVDODVBODFCREI1
Q0YxMDA4MEZGNzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJn
ZXQgInRlc3RiMyIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkwRkVDODVBOTFCREI1Q0YxMDA4MEZGNzQgLyogRGVi
dWcgKi8sCisJCQkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8qIFJlbGVhc2UgKi8sCisJCQkJ
MEZFQzg1QUIxQkRCNUNGMTAwODBGRjc0IC8qIFByb2ZpbGluZyAqLywKKwkJCQkwRkVDODVBQzFC
REI1Q0YxMDA4MEZGNzQgLyogUHJvZHVjdGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9k
dWN0aW9uOworCQl9OwogCQkwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rv
ciIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1
cmF0aW9ucyA9ICgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKIAorI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgZG91YmxlIE1hY3JvQXNz
ZW1ibGVyOjp0d29Ub1RoZTMyID0gKGRvdWJsZSkweDEwMDAwMDAwMHVsbDsKQEAgLTQ3LDUgKzQ5
LDcwIEBAIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNhbGxQcm9iZShzdGQ6OmZ1bmMKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNl
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw6CisgICAgICAg
IG91dC5wcmludCgiTm90RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9B
c3NlbWJsZXI6OkFib3ZlOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWw6CisgICAgICAgIG91
dC5wcmludCgiQWJvdmVPckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsOgorICAgICAgICBv
dXQucHJpbnQoIkJlbG93T3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNy
b0Fzc2VtYmxlcjo6R3JlYXRlclRoYW46CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFu
T3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbk9yRXF1YWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuOgorICAgICAgICBv
dXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW5PckVx
dWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE1hY3Jv
QXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsK
KyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJP
dmVyZmxvdyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6U2ln
bmVkOgorICAgICAgICBvdXQucHJpbnQoIlNpZ25lZCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBNYWNyb0Fzc2VtYmxlcjo6UG9zaXRpdmVPclplcm86CisgICAgICAgIG91dC5wcmludCgi
UG9zaXRpdmVPclplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJs
ZXI6Olplcm86CisgICAgICAgIG91dC5wcmludCgiWmVybyIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJOb25a
ZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoQVNT
RU1CTEVSKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTYsOCAr
MTU5NiwxOSBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0
aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIp
CiAKK25hbWVzcGFjZSBKU0MgeworCiAvLyBJZiB0aGVyZSBpcyBubyBhc3NlbWJsZXIgZm9yIHRo
aXMgcGxhdGZvcm0sIGF0IGxlYXN0IGFsbG93IGNvZGUgdG8gbWFrZSByZWZlcmVuY2VzIHRvCiAv
LyBzb21lIG9mIHRoZSB0aGluZ3MgaXQgd291bGQgb3RoZXJ3aXNlIGRlZmluZSwgYWxiZWl0IHdp
dGhvdXQgZ2l2aW5nIHRoYXQgY29kZSBhbnkgd2F5CiAvLyBvZiBkb2luZyBhbnl0aGluZyB1c2Vm
dWwuCkBAIC0xNjExLDYgKzE2MjIsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBGUFJlZ2lzdGVySUQg
eyBOb0ZQUmVnaXN0ZXIgfTsKIH07CiAKK30gLy8gbmFtZXNwYWNlIEpTQworCiAjZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKIAogI2VuZGlmIC8vIE1hY3JvQXNzZW1ibGVyX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNo
ZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
IyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hlcgorCisjIE5v
dGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNzb2NpYXRpb24g
YW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5ldmVyIHNlZSBB
ZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkg
YmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3QyKS4gQWxzbywg
d2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGNh
bm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBpbiB0aGlzIGNv
ZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXphdGlvbnMKKyMg
aGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9yZSBpbnN0cnVj
dGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3QgbmVlZCB0byBt
YXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQgaW50byB0aGUg
TG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5IGZhbmN5IG1h
dGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0FkZFNoaWZ0MSA9
IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBBZGQoYmFzZSwg
U2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK0RpcmVj
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVu
dFJlZ1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJn
dW1lbnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3VtZW50UmVnVmFsdWVfaAorI2Rl
ZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEFyZ3VtZW50UmVnVmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3Vt
ZW50UmVnVmFsdWUoKTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1f
cmVnOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIEFyZ3VtZW50UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyBy
ZWcpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBv
aW50ZXJUeXBlKCkgOiBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3JlZyhyZWcpCisgICAg
eworICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkpOworICAgIH0KKworICAgIFJlZyBtX3JlZzsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4
ID0gIiMiOworCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUg
ZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1
ZW5jeSkKK3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKQoreworfQorCit2b2lkIEJh
c2ljQmxvY2s6OmFwcGVuZChWYWx1ZSogdmFsdWUpCit7CisgICAgbV92YWx1ZXMuYXBwZW5kKHZh
bHVlKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30K
KworYm9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykK
K3sKKyAgICByZXR1cm4gQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwor
Ym9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFz
aWNCbG9jayogdG8pCit7CisgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywg
ZnJvbSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlbW92ZU5vcHMoKQoreworICAgIHVu
c2lnbmVkIHNvdXJjZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCB0YXJnZXRJbmRleCA9IDA7Cisg
ICAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc2l6ZSgpKSB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWVzW3NvdXJjZUluZGV4KytdOworICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpICE9
IE5vcCkKKyAgICAgICAgICAgIG1fdmFsdWVzW3RhcmdldEluZGV4KytdID0gdmFsdWU7CisgICAg
fQorICAgIG1fdmFsdWVzLnJlc2l6ZSh0YXJnZXRJbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9j
azo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJl
Zml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVu
Y3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgaWYgKHByZWRlY2Vzc29ycygpLnNpemUo
KSkKKyAgICAgICAgb3V0LnByaW50KCIgIFByZWRlY2Vzc29yczogIiwgcG9pbnRlckxpc3REdW1w
KHByZWRlY2Vzc29ycygpKSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykK
KyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgQjM6OmRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgi
CisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSW5zZXJ0aW9u
U2V0OworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVM
aXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7
CisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAv
LyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAg
ICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFZhbHVl
TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAg
VmFsdWVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAg
IFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJu
IG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4g
bV92YWx1ZXM7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKFZhbHVlKik7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOwor
CisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIGNvbnN0IEZyZXF1ZW50
ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBGcmVxdWVudGVk
QmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgU3VjY2Vzc29yTGlz
dCYgc3VjY2Vzc29ycygpIGNvbnN0OworICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKTsK
KworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsK
KyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1
Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxv
Y2tzKCk7CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBT
dWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51
bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQor
ICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNv
bnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVk
ZWNlc3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJu
IG1fcHJlZGVjZXNzb3JzOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sq
KTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJl
cGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAg
ICBkb3VibGUgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAg
IHZvaWQgcmVtb3ZlTm9wcygpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2so
dW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVj
ZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Js
b2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1f
YmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2Nr
RHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVl
cEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5l
c19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgi
CisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KK1ZhbHVlVHlwZSogQmFzaWNCbG9jazo6YXBwZW5kTmV3KFByb2NlZHVyZSYgcHJv
Y2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0
ID0gcHJvY2VkdXJlLmFkZDxWYWx1ZVR5cGU+KGFyZ3VtZW50cy4uLik7CisgICAgYXBwZW5kKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHVuc2lnbmVkIEJhc2ljQmxv
Y2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgY29uc3QgRnJlcXVlbnRl
ZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOwor
fQorCitpbmxpbmUgRnJlcXVlbnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNj
ZXNzb3IoaW5kZXgpOworfQorCitpbmxpbmUgY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlz
dCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+
YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2Nr
OjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKCkKK3sKKyAgICByZXR1cm4g
bGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJh
c2ljQmxvY2sqIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25z
dAoreworICAgIHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7Cit9CisKK2lubGluZSBC
YXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpCit7
CisgICAgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIFN1Y2Nl
c3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gQmFz
aWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkKK3sKKyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVj
dGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihzdWNjZXNzb3JzKCkpOworfQorCitpbmxp
bmUgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBCYXNpY0Jsb2Nr
OjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAorewor
ICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1
Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRp
bHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
VXRpbHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2Nr
VXRpbHNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tVdGlsc19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3Jr
bGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIGFkZFByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAg
ICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisKKyAgICBpZiAo
cHJlZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vzc29yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcHJlZGVjZXNzb3JzLmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlbW92ZVByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAg
ICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAocHJlZGVjZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVkZWNl
c3NvcnNbaS0tXSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBwcmVkZWNlc3Nv
cnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKCFwcmVkZWNlc3NvcnMuY29udGFp
bnMocHJlZGVjZXNzb3IpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9j
az4KK2Jvb2wgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2Nr
KiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9j
ay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IGZyb20p
IHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpXSA9IHRvOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlz
IHJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCByZW1vdmVzIGJsb2NrcyB0aGF0IGFyZW4ndCBy
ZWFjaGFibGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgordm9pZCByZXNldFJlYWNo
YWJpbGl0eShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQorewor
ICAgIC8vIENsZWFyIGFsbCBwcmVkZWNlc3NvciBsaXN0cyBmaXJzdC4KKyAgICBmb3IgKGF1dG8m
IGJsb2NrIDogYmxvY2tzKQorICAgICAgICBibG9jay0+cHJlZGVjZXNzb3JzKCkucmVzaXplKDAp
OworCisgICAgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxv
Y2s+PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2Nrc1swXS5nZXQoKSk7CisgICAg
d2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAg
ICAgICAgICAgIGlmICh3b3JrbGlzdC5wdXNoKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAg
YWRkUHJlZGVjZXNzb3Ioc3VjY2Vzc29yLCBibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChibG9ja3NbaV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJs
b2Nrc1tpXSA9IG51bGxwdHI7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Js
b2NrPgorVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblByZU9yZGVyKEJhc2ljQmxvY2sqIHJv
b3QpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsKKyAgICB3
b3JrbGlzdC5wdXNoKHJvb3QpOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmts
aXN0LnBvcCgpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK1ZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gYmxvY2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKK3sKKyAgICBWZWN0b3I8QmFz
aWNCbG9jayo+IHJlc3VsdDsKKyAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Js
b2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2go
cm9vdCk7CisgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gaXRlbSA9
IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAg
ICBjYXNlIEdyYXBoVmlzaXRPcmRlcjo6UHJlOgorICAgICAgICAgICAgd29ya2xpc3QucHVzaFBv
c3QoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
aXRlbS5ub2RlLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5w
dXNoKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaFZp
c2l0T3JkZXI6OlBvc3Q6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0ubm9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
QjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayos
IEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBXaGVuIHlvdSBzYXkg
QmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJh
c2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3QgaXMgdXNlZnVsIGZv
ciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJsb2NrLiBJdCBhbHNv
CisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKKwordHlwZWRlZiBH
cmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8
QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9k
ZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxv
Y2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja1dvcmtsaXN0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2UgeworCit1bnNpZ25lZCBu
dW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBzd2l0Y2ggKGluc3Qub3JpZ2luLT5vcGNvZGUo
KSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICAvLyBSZXNDb25kLCBUbXAsIFRtcAorICAgICAgICByZXR1cm4gMzsK
KyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitDaGVja1NwZWNpYWw6OkNoZWNrU3Bl
Y2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpCisgICAgOiBtX2NoZWNr
T3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fbnVtQ2hlY2tBcmdzKG51bUFyZ3MpCit7CisgICAgQVNT
RVJUKGlzVGVybWluYWwob3Bjb2RlKSk7Cit9CisKK0NoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lh
bCgpCit7Cit9CisKK0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYg
aW5zdCkgY29uc3QKK3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0
Lm9yaWdpbik7CisgICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X251bUNoZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtQ2hlY2tB
cmdzOyArK2kpCisgICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzLmFwcGVuZChpbnN0LmFyZ3NbaSAr
IDFdKTsKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0Nh
bGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmco
Y2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVj
a0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1Zh
bGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlk
Rm9ybSgpCisgICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVj
a0FyZ3MgKyAxLCBpbnN0KTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6OmFkbWl0c1N0YWNrKElu
c3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChhcmdJbmRleCA+PSAxICYm
IGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hlY2tBcmdzKQorICAgICAgICByZXR1cm4gaGlkZGVuQnJh
bmNoKGluc3QpLmFkbWl0c1N0YWNrKGFyZ0luZGV4IC0gMSk7CisgICAgcmV0dXJuIGFkbWl0c1N0
YWNrSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgYXJnSW5k
ZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFsOjpnZW5lcmF0ZShJbnN0
JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpCit7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWwgPSBoaWRkZW5CcmFuY2goaW5zdCkuZ2VuZXJh
dGUoaml0LCBjb250ZXh0KTsKKyAgICBBU1NFUlQoZmFpbC5pc1NldCgpKTsKKworICAgIFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAg
IGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcCgp
KTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNrU3ViICYmIHZhbHVl
LT5jaGlsZCgwKS0+aXNJbnQoMCkpCisgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6
Y29uc3RhbnQoMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBzLmFwcGVuZChyZXBG
b3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzNdKSk7CisgICAgICAgIHJlcHMuYXBwZW5k
KHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENoZWNrKTsKKyAgICAgICAgcmVwcy5h
cHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEpKTsKKyAgICB9CisKKyAgICBhcHBlbmRSZXBzSW1w
bChjb250ZXh0LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIHJlcHMpOworICAgIAorICAgIGNv
bnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0
aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCisgICAgICAgICAgICBbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICBmYWlsLmxp
bmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3RhY2ttYXAqIHN0
YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0YWNr
bWFwKTsKKworICAgICAgICAgICAgICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFt
czsKKyAgICAgICAgICAgICAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICAgICAgICAgICAgICBwYXJhbXMucmVw
cyA9IHJlcHM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21h
cC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgICAgICAgICAgICAgc3RhY2ttYXAtPm1fZ2VuZXJh
dG9yLT5ydW4oaml0LCBwYXJhbXMpOworICAgICAgICAgICAgfSkpOworCisgICAgcmV0dXJuIEND
YWxsSGVscGVyczo6SnVtcCgpOyAvLyBBcyBmYXIgYXMgQWlyIHRoaW5rcywgd2UgYXJlIG5vdCBh
IHRlcm1pbmFsLgorfQorCit2b2lkIENoZWNrU3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jaGVja09wY29kZSwgIigiLCBtX251bUNo
ZWNrQXJncywgIikiKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQjM6OkNoZWNrVmFsdWUgbG93
ZXJlZCB0byAiLCBtX2NoZWNrT3Bjb2RlLCAiIHdpdGggIiwgbV9udW1DaGVja0FyZ3MsICIgYXJn
cy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1NwZWNpYWxfaAorI2RlZmlu
ZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
T3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHdhbnQgdG8gbG93ZXIgQ2hlY2sgaW5zdHJ1Y3Rp
b25zIHRvIGEgYnJhbmNoLCBidXQgdGhlbiB3ZSB3YW50IHRvIHJvdXRlIHRoYXQgYnJhbmNoIHRv
IG91cgorLy8gb3V0LW9mLWxpbmUgY29kZSBpbnN0ZWFkIG9mIGRvaW5nIGFueXRoaW5nIGVsc2Uu
IEZvciB0aGlzIHJlYXNvbiwgYSBDaGVja1NwZWNpYWwgd2lsbCByZW1lbWJlcgorLy8gd2hpY2gg
YnJhbmNoIG9wY29kZSB3ZSBoYXZlIHNlbGVjdGVkIGFsb25nIHdpdGggdGhlIG51bWJlciBvZiBh
cmdzIGluIHRoZSBvdmVybG9hZCB3ZSB3YW50LiBJdAorLy8gd2lsbCBjcmVhdGUgYW4gSW5zdCB3
aXRoIHRoYXQgb3Bjb2RlIHBsdXMgdGhlIGFwcHJvcHJpYXRlIGFyZ3MgZnJvbSB0aGUgb3duaW5n
IEluc3Qgd2hlbmV2ZXIgeW91CisvLyBjYWxsIGFueSBvZiB0aGUgY2FsbGJhY2tzLgorLy8KKy8v
IE5vdGUgdGhhdCBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwgd2UgZXhwZWN0
IHRoYXQgdGhlIEIzIGFyZ3VtZW50cyBhcmUgdGhlIHJldmVyc2UKKy8vIG9mIHRoZSBBaXIgYXJn
dW1lbnRzIChBZGQoYSwgYikgPT4gQWRkMzIgYiwgYSkuIEV4Y2VwdDoKKy8vIC0gQ2hlY2tTdWIo
MCwgeCksIHdoaWNoIHR1cm5zIGludG8gQnJhbmNoTmVnMzIgeC4KKy8vIC0gQ2hlY2tNdWwoYSwg
YiksIHdoaWNoIHR1cm5zIGludG8gTXVsMzIgYiwgYSBidXQgd2UgcGFzcyBBbnkgZm9yIGEncyBW
YWx1ZVJlcC4KKworY2xhc3MgQ2hlY2tTcGVjaWFsIDogcHVibGljIFN0YWNrbWFwU3BlY2lhbCB7
CitwdWJsaWM6CisgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1bnNpZ25lZCBudW1Bcmdz
KTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBDb25zdHJ1Y3Rz
IGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJhbmNoIHRoYXQgdGhpcyB3
aWxsIHVzZS4KKyAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNvbnN0IEFpcjo6SW5zdCYpIGNv
bnN0OworCisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJk
YTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFs
aWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3Qm
LCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJh
dGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhpZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0
ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2VuZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIg
Y3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3Qm
LCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBk
ZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdz
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNDaGVja1NwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NoZWNrVmFsdWU6
On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9pZCBDaGVja1ZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgic3RhY2ttYXAgPSAiLCBzdGFja21h
cCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tW
YWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIGNh
c2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIGNhc2UgQ2hlY2s6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5DaGVja1ZhbHVlKCk7CisK
KyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2tBZGQsIENoZWNr
U3ViLCBhbmQgQ2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2Rl
IG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbiwgbGVmdCwgcmln
aHQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7CisgICAgICAgIEFTU0VS
VChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAgIEFTU0VSVChvcGNvZGUg
PT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9PSBDaGVja011bCk7
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCisgICAgQ2hlY2tWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBy
ZWRpY2F0ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHBy
ZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2spOworICAgIH0K
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiT3B0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBzaG91bGREdW1w
SVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBG
VEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7
Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRp
b25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVIo
KQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkgfHwgc2hvdWxkVmFsaWRh
dGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNl
KCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCk7Cit9
CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25z
Ojp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVm
aW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitpbmxpbmUgYm9vbCBpczY0Qml0KCkgeyByZXR1cm4gc2l6ZW9mKHZv
aWQqKSA9PSA4OyB9CitpbmxpbmUgYm9vbCBpczMyQml0KCkgeyByZXR1cm4gIWlzNjRCaXQoKTsg
fQorCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgp
OworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQ
aGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Nv
bW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZp
dHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0
YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENv
bW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNvbW11dGF0aXZpdHkp
IHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIkNvbW11dGF0aXZl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZlOgorICAgICAgICBv
dXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjND
b21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIENvbW11dGF0
aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZlCit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3Ry
ZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6Q29tbXV0YXRp
dml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NvbnN0MzJWYWx1ZTo6fkNvbnN0MzJWYWx1ZSgp
Cit7Cit9CisKK1ZhbHVlKiBDb25zdDMyVmFsdWU6Om5lZ0NvbnN0YW50KFByb2NlZHVyZSYgcHJv
YykgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwg
LW1fdmFsdWUpOworfQorCitWYWx1ZSogQ29uc3QzMlZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1
cmUmIHByb2MsIGludDMyX3Qgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb2MuYWRkPENv
bnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlcik7Cit9CisKK1ZhbHVlKiBDb25z
dDMyVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25z
dAoreworICAgIGlmICghb3RoZXItPmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsg
b3RoZXItPmFzSW50MzIoKSk7Cit9CisKK1ZhbHVlKiBDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50
KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXIt
Pmhhc0ludDMyKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFk
ZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzSW50MzIoKSk7Cit9
CisKK3ZvaWQgQ29uc3QzMlZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDMyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjND
b25zdDMyVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0MzJWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29uc3QzMlZhbHVlIDogcHVibGljIFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsg
cmV0dXJuIG9wY29kZSA9PSBDb25zdDMyOyB9CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUg
fkNvbnN0MzJWYWx1ZSgpOworICAgIAorICAgIGludDMyX3QgdmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX3ZhbHVlOyB9CisKKyAgICBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29uc3Qg
b3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGludDMyX3Qgb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBW
YWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBzdWJDb25zdGFudChQcm9j
ZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0MzJWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAgICAgOiBW
YWx1ZShpbmRleCwgQ29uc3QzMiwgSW50MzIsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZh
bHVlKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgaW50MzJfdCBtX3ZhbHVlOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNDb25zdDMyVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitDb25zdDY0VmFsdWU6On5Db25zdDY0VmFsdWUoKQor
eworfQorCitWYWx1ZSogQ29uc3Q2NFZhbHVlOjpuZWdDb25zdGFudChQcm9jZWR1cmUmIHByb2Mp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIC1t
X3ZhbHVlKTsKK30KKworVmFsdWUqIENvbnN0NjRWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJl
JiBwcm9jLCBpbnQzMl90IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBwcm9jLmFkZDxDb25z
dDY0VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsgc3RhdGljX2Nhc3Q8aW50NjRfdD4ob3RoZXIp
KTsKK30KKworVmFsdWUqIENvbnN0NjRWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9j
LCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4o
b3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+YXNJbnQ2NCgpKTsKK30KKworVmFsdWUqIENvbnN0
NjRWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0
Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50NjQoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0NjRWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgLSBv
dGhlci0+YXNJbnQ2NCgpKTsKK30KKwordm9pZCBDb25zdDY0VmFsdWU6OmR1bXBNZXRhKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM0NvbnN0NjRWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3Q2NFZhbHVl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBDb25z
dDY0VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2Vw
dHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0NjQ7IH0KKyAgICAKKyAg
ICB+Q29uc3Q2NFZhbHVlKCk7CisgICAgCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWU7IH0KKworICAgIFZhbHVlKiBuZWdDb25zdGFudChQcm9jZWR1cmUmKSBjb25z
dCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBv
dGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYs
IFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHN1YkNvbnN0YW50KFBy
b2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmcmll
bmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25z
dDY0LCBJbnQ2NCwgb3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgaW50NjRfdCBtX3ZhbHVlOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNDb25zdDY0VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dERvdWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdERvdWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ29uc3REb3VibGVWYWx1ZS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitDb25zdERvdWJsZVZhbHVlOjp+Q29uc3REb3VibGVWYWx1ZSgpCit7Cit9CisKK1ZhbHVlKiBD
b25zdERvdWJsZVZhbHVlOjpuZWdDb25zdGFudChQcm9jZWR1cmUmIHByb2MpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9yaWdpbigpLCAtbV92YWx1ZSk7
Cit9CisKK1ZhbHVlKiBDb25zdERvdWJsZVZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmIHBy
b2MsIGludDMyX3Qgb3RoZXIpIGNvbnN0Cit7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91
YmxlVmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlICsgc3RhdGljX2Nhc3Q8ZG91YmxlPihvdGhlcikp
OworfQorCitWYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBw
cm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzRG91YmxlKCkp
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJs
ZVZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSArIG90aGVyLT5hc0RvdWJsZSgpKTsKK30KKworVmFs
dWUqIENvbnN0RG91YmxlVmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUq
IG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgpKQorICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3VibGVWYWx1ZT4ob3Jp
Z2luKCksIG1fdmFsdWUgLSBvdGhlci0+YXNEb3VibGUoKSk7Cit9CisKK3ZvaWQgQ29uc3REb3Vi
bGVWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnRmKCIlbGUiLCBtX3ZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNDb25zdERvdWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdERvdWJsZVZhbHVlX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBDb25zdERvdWJsZVZhbHVlIDogcHVibGljIFZh
bHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsg
cmV0dXJuIG9wY29kZSA9PSBDb25zdERvdWJsZTsgfQorICAgIAorICAgIH5Db25zdERvdWJsZVZh
bHVlKCk7CisgICAgCisgICAgZG91YmxlIHZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZTsg
fQorCisgICAgVmFsdWUqIG5lZ0NvbnN0YW50KFByb2NlZHVyZSYgcHJvYykgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgaW50MzJfdCBvdGhl
cikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogc3ViQ29uc3RhbnQo
UHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBDb25zdERvdWJsZVZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBkb3VibGUgdmFsdWUpCisgICAgICAg
IDogVmFsdWUoaW5kZXgsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBt
X3ZhbHVlKHZhbHVlKQorICAgIHsKKyAgICB9CisgICAgCisgICAgZG91YmxlIG1fdmFsdWU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM0NvbnN0RG91YmxlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0NvbnN0UHRyVmFsdWVfaAorI2RlZmluZSBCM0NvbnN0UHRyVmFsdWVfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ29uc3QzMlZhbHVlLmgiCisjaW5jbHVk
ZSAiQjNDb25zdDY0VmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
Ky8vIFVzdWFsbHkgeW91IHdhbnQgdG8gdXNlIENvbnN0MzJWYWx1ZSBvciBDb25zdDY0VmFsdWUg
ZGlyZWN0bHkuIEJ1dCB0aGlzIGlzIHVzZWZ1bCBmb3Igd3JpdGluZworLy8gcGxhdGZvcm0tYWdu
b3N0aWMgY29kZS4gTm90ZSB0aGF0IGEgQ29uc3RQdHJWYWx1ZSB3aWxsIGJlaGF2ZSBsaWtlIGVp
dGhlciBhIENvbnN0MzJWYWx1ZSBvcgorLy8gQ29uc3Q2NFZhbHVlIGRlcGVuZGluZyBvbiBwbGF0
Zm9ybS4KKworI2lmIFVTRShKU1ZBTFVFNjQpCit0eXBlZGVmIENvbnN0NjRWYWx1ZSBDb25zdFB0
clZhbHVlQmFzZTsKKyNlbHNlCit0eXBlZGVmIENvbnN0MzJWYWx1ZSBDb25zdFB0clZhbHVlQmFz
ZTsKKyNlbmRpZgorCitjbGFzcyBDb25zdFB0clZhbHVlIDogcHVibGljIENvbnN0UHRyVmFsdWVC
YXNlIHsKK3B1YmxpYzoKKyAgICB2b2lkKiB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gYml0d2lzZV9jYXN0PHZvaWQqPihDb25zdFB0clZhbHVlQmFzZTo6dmFsdWUoKSk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBUPgorICAgIENvbnN0UHRyVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdp
biBvcmlnaW4sIFQqIHBvaW50ZXIpCisgICAgICAgIDogQ29uc3RQdHJWYWx1ZUJhc2UoaW5kZXgs
IG9yaWdpbiwgYml0d2lzZV9jYXN0PGludHB0cl90Pihwb2ludGVyKSkKKyAgICB7CisgICAgfQor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgQ29uc3RQdHJWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3JpZ2luIG9yaWdpbiwgVCBwb2ludGVyKQorICAgICAgICA6IENvbnN0UHRyVmFsdWVCYXNl
KGluZGV4LCBvcmlnaW4sIHN0YXRpY19jYXN0PGludHB0cl90Pihwb2ludGVyKSkKKyAgICB7Cisg
ICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNDb25zdFB0clZhbHVlX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1
ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Q29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCkKK3sKK30KKwordm9pZCBDb250cm9sVmFsdWU6
OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGxpc3RE
dW1wKG1fc3VjY2Vzc29ycykpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b250cm9sVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b250cm9sVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnRyb2xWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDb250cm9s
VmFsdWVfaAorI2RlZmluZSBCM0NvbnRyb2xWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCitj
bGFzcyBKU19FWFBPUlRfUFJJVkFURSBDb250cm9sVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgSnVtcDoKKyAgICAgICAgY2FzZSBC
cmFuY2g6CisgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIE9vcHM6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBTd2l0Y2g6IAorICAgICAgICAgICAgLy8g
VGhpcyBpcyBoZXJlIGJlY2F1c2UgU3dpdGNoVmFsdWUgaXMgYSBzdWJjbGFzcyBvZiBDb250cm9s
VmFsdWUsIHNvIHdlIHdhbnQKKyAgICAgICAgICAgIC8vIHN3aXRjaFZhbHVlLT5hczxDb250cm9s
VmFsdWU+KCkgdG8gcmV0dXJuIG5vbi1udWxsLgorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICB0eXBlZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxp
c3Q7CisKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29udHJvbFZhbHVlKCk7CisKKyAgICB1bnNp
Z25lZCBudW1TdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsg
fQorICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2Nr
JiBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07
IH0KKyAgICBjb25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4g
bV9zdWNjZXNzb3JzOyB9CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJu
IG1fc3VjY2Vzc29yczsgfQorCitwcm90ZWN0ZWQ6CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gVXNlIHRo
aXMgZm9yIHN1YmNsYXNzZXMuCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVl
KGluZGV4LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIHsKKyAgICB9
CisKKyAgICAvLyBTdWJjbGFzc2VzIHdpbGwgcG9wdWxhdGUgdGhpcy4KKyAgICBTdWNjZXNzb3JM
aXN0IG1fc3VjY2Vzc29yczsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworCisgICAgLy8gVXNlIHRoaXMgZm9yIE9vcHMuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUg
PT0gT29wcyk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KKyAgICBDb250
cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiByZXN1bHQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCByZXN1bHQpCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CisgICAg
fQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEp1bXAuCisgICAgQ29udHJvbFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxv
Y2smIHRhcmdldCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4p
CisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2RlID09IEp1bXApOworICAgICAgICBtX3N1Y2Nl
c3NvcnMuYXBwZW5kKHRhcmdldCk7CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9yIEJyYW5j
aC4KKyAgICBDb250cm9sVmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlLAorICAgICAgICBjb25zdCBGcmVx
dWVudGVkQmxvY2smIHllcywgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBubykKKyAgICAgICAgOiBW
YWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHByZWRpY2F0ZSkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVu
ZCh5ZXMpOworICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKG5vKTsKKyAgICB9Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM0NvbnRyb2xWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0VmZmVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0VmZmVjdHMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
RWZmZWN0cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNFZmZlY3RzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8
d3RmL0NvbW1hUHJpbnRlci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dm9pZCBFZmZlY3RzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgQ29tbWFQ
cmludGVyIGNvbW1hKCJ8Iik7CisgICAgaWYgKHRlcm1pbmFsKQorICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJUZXJtaW5hbCIpOworICAgIGlmIChleGl0c1NpZGV3YXlzKQorICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJFeGl0c1NpZGV3YXlzIik7CisgICAgaWYgKGNvbnRyb2xEZXBlbmRlbnQp
CisgICAgICAgIG91dC5wcmludChjb21tYSwgIkNvbnRyb2xEZXBlbmRlbnQiKTsKKyAgICBpZiAo
d3JpdGVzU1NBU3RhdGUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc1NTQVN0YXRl
Iik7CisgICAgaWYgKHdyaXRlcykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiV3JpdGVzOiIs
IHdyaXRlcyk7CisgICAgaWYgKHJlYWRzKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJSZWFk
czoiLCByZWFkcyk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNFZmZlY3RzX2gKKyNkZWZpbmUgQjNFZmZlY3Rz
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgorI2lu
Y2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworc3RydWN0IEVmZmVjdHMgeworICAgIC8vIFRydWUgaWYgdGhpcyBjYW5ub3QgY29udGlu
dWUgZXhlY3V0aW9uIGluIHRoZSBjdXJyZW50IGJsb2NrLgorICAgIGJvb2wgdGVybWluYWwgeyBm
YWxzZSB9OworCisgICAgLy8gVHJ1ZSBpZiB0aGlzIHZhbHVlIGNhbiBjYXVzZSBleGVjdXRpb24g
dG8gdGVybWluYXRlIGFicnVwdGx5LgorICAgIGJvb2wgZXhpdHNTaWRld2F5cyB7IGZhbHNlIH07
CisKKyAgICAvLyBUcnVlIGlmIHRoZSBpbnN0cnVjdGlvbiBtYXkgY2hhbmdlIHNlbWFudGljcyBp
ZiBob2lzdGVkIGFib3ZlIHNvbWUgY29udHJvbCBmbG93LgorICAgIGJvb2wgY29udHJvbERlcGVu
ZGVudCB7IGZhbHNlIH07CisKKyAgICAvLyBUcnVlIGlmIHRoaXMgd3JpdGVzIHRvIHRoZSBTU0Eg
c3RhdGUuIE9wZXJhdGlvbnMgdGhhdCB3cml0ZSBTU0Egc3RhdGUgZG9uJ3Qgd3JpdGUgdG8gYW55
dGhpbmcKKyAgICAvLyBpbiAibWVtb3J5IiBidXQgdGhleSBoYXZlIGEgc2lkZS1lZmZlY3QgYW55
d2F5LiBUaGlzIGlzIGZvciBtb2RlbGluZyBVcHNpbG9ucy4gWW91IGNhbiBpZ25vcmUKKyAgICAv
LyB0aGlzIGlmIHlvdSBoYXZlIHlvdXIgb3duIHdheSBvZiBtb2RlbGluZyBVcHNpbG9ucyBvciBp
ZiB5b3UgaW50ZW5kIHRvIGp1c3QgcmVidWlsZCB0aGVtCisgICAgLy8gYW55d2F5LgorICAgIGJv
b2wgd3JpdGVzU1NBU3RhdGUgeyBmYWxzZSB9OworCisgICAgSGVhcFJhbmdlIHdyaXRlczsKKyAg
ICBIZWFwUmFuZ2UgcmVhZHM7CisKKyAgICBib29sIG11c3RFeGVjdXRlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRlc1NTQVN0
YXRlIHx8IHdyaXRlczsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0VmZmVjdHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzRnJlcXVlbmN5Q2xhc3Mu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHBy
aW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KQor
eworICAgIHN3aXRjaCAoZnJlcXVlbmN5KSB7CisgICAgY2FzZSBGcmVxdWVuY3lDbGFzczo6Tm9y
bWFsOgorICAgICAgICBvdXQucHJpbnQoIk5vcm1hbCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBGcmVxdWVuY3lDbGFzczo6UmFyZToKKyAgICAgICAgb3V0LnByaW50KCJSYXJlIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0ZyZXF1ZW5jeUNsYXNzX2gKKyNkZWZpbmUg
QjNGcmVxdWVuY3lDbGFzc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBGcmVxdWVuY3lDbGFzcyA6IHVpbnQ4X3Qg
eworICAgIC8vIFdlIGRvbid0IGhhdmUgYW55IGh5cG90aGVzaXMgYWJvdXQgdGhlIGZyZXF1ZW5j
eSBvZiB0aGlzIGNvbnRyb2wgZmxvdyBjb25zdHJ1Y3QuIFRoaXMgaXMKKyAgICAvLyB0aGUgY29t
bW9uIGNhc2UuIFdlIGNhbiBzdGlsbCB1c2UgYmFzaWMgYmxvY2sgZnJlcXVlbmN5IGluIHRoaXMg
Y2FzZS4KKyAgICBOb3JtYWwsCisKKyAgICAvLyBXZSBleHBlY3QgdGhhdCB0aGlzIGNvbnRyb2wg
ZmxvdyBjb25zdHJ1Y3Qgd2lsbCBiZSByZWFjaGVkIHN1cGVyIHJhcmVseS4gSXQncyB2YWxpZCB0
bworICAgIC8vIHBlcmZvcm0gb3B0aW1pemF0aW9ucyB0aGF0IHB1bmlzaCBSYXJlIGNvZGUuIE5v
dGUgdGhhdCB0aGVyZSB3aWxsIGJlIHNpdHVhdGlvbnMgd2hlcmUgeW91CisgICAgLy8gaGF2ZSB0
byBzb21laG93IGNvbnN0cnVjdCBhIG5ldyBmcmVxdWVuY3kgY2xhc3MgZnJvbSBhIG1lcmdpbmcg
b2YgbXVsdGlwbGUgY2xhc3Nlcy4gV2hlbgorICAgIC8vIHRoaXMgaGFwcGVucywgbmV2ZXIgY2hv
b3NlIFJhcmU7IGFsd2F5cyBnbyB3aXRoIE5vcm1hbC4gVGhpcyBpcyBuZWNlc3NhcnkgYmVjYXVz
ZSB3ZQorICAgIC8vIHJlYWxseSBkbyBwdW5pc2ggUmFyZSBjb2RlIHZlcnkgYmFkbHkuCisgICAg
UmFyZQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6RnJlcXVlbmN5Q2xhc3MpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW5jeUNsYXNzX2gKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVudGVkQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVudGVkQmxvY2tfaAorI2RlZmlu
ZSBCM0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVudGVkQmxv
Y2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0ZyZXF1ZW50ZWRC
bG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNHZW5l
cmF0ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJHZW5lcmF0ZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5j
bHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlICJCM0xvd2VyVG9BaXIuaCIKKyNpbmNsdWRlICJC
M1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGguaCIKKyNpbmNsdWRlICJC
M1ZhbGlkYXRlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIGdl
bmVyYXRlKFByb2NlZHVyZSYgcHJvY2VkdXJlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBB
aXI6OkNvZGUgY29kZTsKKyAgICBnZW5lcmF0ZVRvQWlyKHByb2NlZHVyZSwgY29kZSk7CisgICAg
QWlyOjpnZW5lcmF0ZShjb2RlLCBqaXQpOworfQorCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2Vk
dXJlJiBwcm9jZWR1cmUsIEFpcjo6Q29kZSYgY29kZSkKK3sKKyAgICAvLyBXZSBkb24ndCByZXF1
aXJlIHRoZSBpbmNvbWluZyBJUiB0byBoYXZlIHByZWRlY2Vzc29ycyBjb21wdXRlZC4KKyAgICBw
cm9jZWR1cmUucmVzZXRSZWFjaGFiaWxpdHkoKTsKKyAgICAKKyAgICBpZiAoc2hvdWxkVmFsaWRh
dGVJUigpKQorICAgICAgICB2YWxpZGF0ZShwcm9jZWR1cmUpOworCisgICAgLy8gSWYgd2UncmUg
ZG9pbmcgc3VwZXIgdmVyYm9zZSBkdW1waW5nLCB0aGUgcGhhc2Ugc2NvcGUgb2YgYW55IHBoYXNl
IHdpbGwgYWxyZWFkeSBkbyBhIGR1bXAuCisgICAgaWYgKHNob3VsZER1bXBJUigpICYmICFzaG91
bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkluaXRpYWwgQjM6XG4i
KTsKKyAgICAgICAgZGF0YUxvZyhwcm9jZWR1cmUpOworICAgIH0KKworICAgIHJlZHVjZVN0cmVu
Z3RoKHByb2NlZHVyZSk7CisgICAgCisgICAgLy8gRklYTUU6IEFkZCBtb3JlIG9wdGltaXphdGlv
bnMgaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTUwNTA3CisKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2YWxpZGF0ZShw
cm9jZWR1cmUpOworICAgIAorICAgIC8vIElmIHdlJ3JlIGRvaW5nIHN1cGVyIHZlcmJvc2UgZHVt
cGluZywgdGhlIHBoYXNlIHNjb3BlIG9mIGFueSBwaGFzZSB3aWxsIGFscmVhZHkgZG8gYSBkdW1w
LgorICAgIC8vIE5vdGUgdGhhdCBsb3dlclRvQWlyKCkgYWN0cyBsaWtlIGEgcGhhc2UgaW4gdGhp
cyByZWdhcmQuCisgICAgaWYgKHNob3VsZER1bXBJUigpICYmICFzaG91bGREdW1wSVJBdEVhY2hQ
aGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyICIsIHByb2NlZHVyZS5sYXN0UGhh
c2VOYW1lKCksICIsIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7CisgICAgICAgIGRhdGFMb2cocHJv
Y2VkdXJlKTsKKyAgICB9CisKKyAgICBsb3dlclRvQWlyKHByb2NlZHVyZSwgY29kZSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNHZW5lcmF0ZV9oCisjZGVmaW5lIEIzR2VuZXJhdGVfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKKwor
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworbmFtZXNwYWNlIEFpciB7IGNsYXNz
IENvZGU7IH0KKworLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBp
bi1wbGFjZSwgYW5kIGdlbmVyYXRlcyBpdCB0byBtYWNoaW5lIGNvZGUgYnkgZmlyc3QKKy8vIGlu
dGVybmFsbHkgY29udmVydGluZyB0byBhbiBBaXI6OkNvZGUgYW5kIHRoZW4gZ2VuZXJhdGluZyB0
aGF0LgorSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBnZW5lcmF0ZShQcm9jZWR1cmUmLCBDQ2FsbEhl
bHBlcnMmKTsKKworLy8gVGhpcyB0YWtlcyBhIEIzOjpQcm9jZWR1cmUsIG9wdGltaXplcyBpdCBp
bi1wbGFjZSwgYW5kIGxvd2VycyBpdCB0byBBaXIuIFlvdSBjYW4gdGhlbiBnZW5lcmF0ZQorLy8g
dGhlIEFpciB0byBtYWNoaW5lIGNvZGUgdXNpbmcgQWlyOjpnZW5lcmF0ZSgpLiBOb3RlIHRoYXQg
YW4gQWlyOjpDb2RlIHdpbGwgaGF2ZSBwb2ludGVycyBpbnRvIHRoZQorLy8gQjM6OlByb2NlZHVy
ZSwgc28geW91IG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIEIzOjpQcm9jZWR1cmUgb3V0bGl2ZXMg
dGhlIEFpcjo6Q29kZS4KK3ZvaWQgZ2VuZXJhdGVUb0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUm
KTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNHZW5lcmF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw4NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisj
ZGVmaW5lIEIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNGcmVxdWVuY3lDbGFzcy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQSBmcmVxdWVudGVk
IGJsb2NrIGlzIGEgdHVwbGUgb2YgQmFzaWNCbG9jayogYW5kIEZyZXF1ZW5jeUNsYXNzLiBJdCdz
IHVzdWFsbHkgdXNlZCBhcyBhCisvLyBzdWNjZXNzb3IgZWRnZS4KKwordGVtcGxhdGU8dHlwZW5h
bWUgQmFzaWNCbG9jaz4KK2NsYXNzIEdlbmVyaWNGcmVxdWVudGVkQmxvY2sgeworcHVibGljOgor
ICAgIGV4cGxpY2l0IEdlbmVyaWNGcmVxdWVudGVkQmxvY2soCisgICAgICAgIEJhc2ljQmxvY2sq
IGJsb2NrID0gbnVsbHB0ciwgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5ID0gRnJlcXVlbmN5Q2xh
c3M6Ok5vcm1hbCkKKyAgICAgICAgOiBtX2Jsb2NrKGJsb2NrKQorICAgICAgICAsIG1fZnJlcXVl
bmN5KGZyZXF1ZW5jeSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEdlbmVyaWNGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIG1fYmxvY2sgPT0gb3RoZXIubV9ibG9jaworICAgICAgICAgICAgJiYgbV9mcmVxdWVuY3kg
PT0gb3RoZXIubV9mcmVxdWVuY3k7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IEdlbmVyaWNGcmVxdWVudGVkQmxvY2smIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJv
b2woKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICp0aGlzICE9IEdlbmVyaWNGcmVxdWVu
dGVkQmxvY2soKTsKKyAgICB9CisKKyAgICBCYXNpY0Jsb2NrKiBibG9jaygpIGNvbnN0IHsgcmV0
dXJuIG1fYmxvY2s7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYmxvY2soKSB7IHJldHVybiBtX2Jsb2Nr
OyB9CisgICAgRnJlcXVlbmN5Q2xhc3MgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVx
dWVuY3k7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGZyZXF1ZW5jeSgpICE9IEZyZXF1ZW5jeUNsYXNzOjpOb3JtYWwpCisgICAg
ICAgICAgICBvdXQucHJpbnQoZnJlcXVlbmN5KCksICI6Iik7CisgICAgICAgIG91dC5wcmludChw
b2ludGVyRHVtcChtX2Jsb2NrKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJhc2ljQmxvY2sq
IG1fYmxvY2s7CisgICAgRnJlcXVlbmN5Q2xhc3MgbV9mcmVxdWVuY3k7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNIZWFwUmFuZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0hlYXBSYW5nZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNIZWFwUmFuZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzSGVhcFJhbmdlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBIZWFwUmFuZ2U6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBpZiAoKnRoaXMgPT0gSGVhcFJhbmdlKCkp
IHsKKyAgICAgICAgb3V0LnByaW50KCJCb3R0b20iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBpZiAoKnRoaXMgPT0gdG9wKCkpIHsKKyAgICAgICAgb3V0LnByaW50KCJUb3AiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBvdXQucHJpbnQobV9iZWdpbiwgIi4uLiIsIG1fZW5k
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0hlYXBSYW5nZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0hlYXBSYW5nZV9oCisjZGVmaW5lIEIzSGVhcFJhbmdl
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgor
I2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworLy8gQWxpYXMgYW5hbHlzaXMgaW4gQjMgaXMgZG9uZSBieSBjaGVja2luZyBpZiB0
d28gaW50ZWdlciByYW5nZXMgb3ZlcmxhcC4gVGhpcyBpcyBwb3dlcmZ1bCBlbm91Z2gKKy8vIHRv
IGJlIHVzZWQgZm9yIFRCQUEtc3R5bGUgYWxpYXMgYW5hbHlzaXMgdXNlZCBieSB0aGUgREZHLCBG
VEwsIGFuZCBMTFZNOiB5b3UganVzdCB0dXJuIGVhY2ggbm9kZQorLy8gaW4gdGhlIHRyZWUgb2Yg
YWJzdHJhY3QgaGVhcHMgaW50byBhIHByZS9wb3N0IHJhbmdlLgorCitjbGFzcyBIZWFwUmFuZ2Ug
eworcHVibGljOgorICAgIEhlYXBSYW5nZSgpCisgICAgICAgIDogbV9iZWdpbigwKQorICAgICAg
ICAsIG1fZW5kKDApCisgICAgeworICAgIH0KKworICAgIEhlYXBSYW5nZSh1bnNpZ25lZCBiZWdp
biwgdW5zaWduZWQgZW5kKQorICAgICAgICA6IG1fYmVnaW4oYmVnaW4pCisgICAgICAgICwgbV9l
bmQoZW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG1fZW5kID49IG1fYmVnaW4pOworICAgICAg
ICBpZiAobV9iZWdpbiA9PSBtX2VuZCkgeworICAgICAgICAgICAgLy8gQ2Fub25pY2FsaXplIGVt
cHR5IHJhbmdlcy4KKyAgICAgICAgICAgIG1fYmVnaW4gPSAwOworICAgICAgICAgICAgbV9lbmQg
PSAwOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIEhlYXBSYW5nZSB0b3AoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEhlYXBSYW5nZSgwLCBVSU5UX01BWCk7CisgICAgfQorCisgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gbV9iZWdpbiA9PSBvdGhlci5tX2JlZ2luCisgICAgICAgICAgICAmJiBtX2Vu
ZCA9PSBvdGhlci5tX2VuZDsKKyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgSGVh
cFJhbmdlJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90
aGVyKTsKKyAgICB9CisgICAgCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsg
cmV0dXJuIG1fYmVnaW4gIT0gbV9lbmQ7IH0KKworICAgIHVuc2lnbmVkIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gbV9iZWdpbjsgfQorICAgIHVuc2lnbmVkIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZW5kOyB9CisKKyAgICBib29sIG92ZXJsYXBzKGNvbnN0IEhlYXBSYW5nZSYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpyYW5nZXNPdmVybGFwKG1fYmVnaW4sIG1fZW5k
LCBvdGhlci5tX2JlZ2luLCBvdGhlci5tX2VuZCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fYmVnaW47
CisgICAgdW5zaWduZWQgbV9lbmQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0hlYXBSYW5nZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEIzSW5kZXhNYXBfaAorI2RlZmluZSBCM0luZGV4TWFwX2gKKworI2lmIEVOQUJM
RShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgbWFwIGZvciBrZXlzIHRoYXQgaGF2ZSBhbiBp
bmRleCgpLiBJdCdzIHN1cGVyIGVmZmljaWVudCBmb3IgQmFzaWNCbG9ja3MuIEl0J3Mgb25seQor
Ly8gZWZmaWNpZW50IGZvciBWYWx1ZXMgaWYgeW91IGRvbid0IGNyZWF0ZSB0b28gbWFueSBvZiB0
aGVzZSBtYXBzLCBzaW5jZSBWYWx1ZXMgY2FuIGhhdmUgdmVyeQorLy8gc3BhcnNlIGluZGljZXMg
YW5kIHRoZXJlIGFyZSBhIGxvdCBvZiBWYWx1ZXMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIEtleSwg
dHlwZW5hbWUgVmFsdWU+CitjbGFzcyBJbmRleE1hcCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
SW5kZXhNYXAoc2l6ZV90IHNpemUgPSAwKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IucmVzaXpl
KHNpemUpOworICAgIH0KKworICAgIHZvaWQgcmVzaXplKHNpemVfdCBzaXplKQorICAgIHsKKyAg
ICAgICAgbV92ZWN0b3IucmVzaXplKHNpemUpOworICAgIH0KKworICAgIFZhbHVlJiBvcGVyYXRv
cltdKEtleSoga2V5KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgo
KV07CisgICAgfQorICAgIAorICAgIGNvbnN0IFZhbHVlJiBvcGVyYXRvcltdKEtleSoga2V5KSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmVjdG9yW2tleS0+aW5kZXgoKV07CisgICAg
fQorICAgIAorcHJpdmF0ZToKKyAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNJbmRleE1hcF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRl
eFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbmRleFNldF9oCisjZGVmaW5lIEIz
SW5kZXhTZXRfaAorCisjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9D
b21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRo
aXMgaXMgYSBzZXQgZm9yIHRoaW5ncyB0aGF0IGhhdmUgYW4gaW5kZXgoKS4gSXQncyBzdXBlciBl
ZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkKKy8vIGVmZmljaWVudCBmb3IgVmFs
dWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2YgdGhlc2Ugc2V0cywgc2luY2UgVmFs
dWVzIGNhbiBoYXZlIHZlcnkgc3BhcnNlCisvLyBpbmRpY2VzIGFuZCB0aGVyZSBhcmUgYSBsb3Qg
b2YgVmFsdWVzLgorCisvLyBJZiB5b3Ugd2FudCBhIHNldCBvZiBCYXNpY0Jsb2NrcywgeW91IGRv
IEluZGV4U2V0PEJhc2ljQmxvY2s+LiBTbywgVCA9IEJhc2ljQmxvY2suCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorY2xhc3MgSW5kZXhTZXQgeworcHVibGljOgorICAgIEluZGV4U2V0KCkKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBhZGQoVCogdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4g
IW1fc2V0LnNldCh2YWx1ZS0+aW5kZXgoKSk7CisgICAgfQorCisgICAgYm9vbCBjb250YWlucyhU
KiB2YWx1ZSkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOwor
ICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIGNsYXNz
IEl0ZXJhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEl0ZXJhYmxlKGNvbnN0IENvbGxlY3Rp
b25UeXBlJiBjb2xsZWN0aW9uLCBjb25zdCBJbmRleFNldCYgc2V0KQorICAgICAgICAgICAgOiBt
X2NvbGxlY3Rpb24oY29sbGVjdGlvbikKKyAgICAgICAgICAgICwgbV9zZXQoc2V0KQorICAgICAg
ICB7CisgICAgICAgIH0KKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1Ymxp
YzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlv
bihudWxscHRyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp
dGVyYXRvcihjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbiwgQml0VmVjdG9yOjpTZXRC
aXRzSXRlcmFibGU6Oml0ZXJhdG9yIGl0ZXIpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rp
b24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBtX2l0ZXIoaXRlcikKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdCgqbV9pdGVy
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1faXRlcisrOworICAgICAgICAgICAgICAg
IHJldHVybiAqdGhpczsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRv
cj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9pdGVyID09IG90aGVyLm1faXRlcjsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IENv
bGxlY3Rpb25UeXBlKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICBCaXRWZWN0b3I6OlNldEJp
dHNJdGVyYWJsZTo6aXRlcmF0b3IgbV9pdGVyOworICAgICAgICB9OworCisgICAgICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9jb2xsZWN0aW9uLCBtX3NldC5i
ZWdpbigpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX2NvbGxlY3Rpb24sIG1fc2V0LmVuZCgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
Y29uc3QgQ29sbGVjdGlvblR5cGUmIG1fY29sbGVjdGlvbjsKKyAgICAgICAgY29uc3QgSW5kZXhT
ZXQmIG1fc2V0OworICAgIH07CisKKyAgICAvLyBGb3IgYmFzaWMgYmxvY2tzLCB5b3UgZG86Cisg
ICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZSk7CisgICAgLy8KKyAgICAvLyBGb3IgdmFs
dWVzLCB5b3UgZG86CisgICAgLy8gaW5kZXhTZXQudmFsdWVzKHByb2NlZHVyZS52YWx1ZXMoKSk7
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ29sbGVjdGlvblR5cGU+CisgICAgSXRlcmFibGU8Q29s
bGVjdGlvblR5cGU+IHZhbHVlcyhjb25zdCBDb2xsZWN0aW9uVHlwZSYgY29sbGVjdGlvbikgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBJdGVyYWJsZTxDb2xsZWN0aW9uVHlwZT4oY29sbGVj
dGlvbik7CisgICAgfQorCisgICAgY29uc3QgQml0VmVjdG9yJiBpbmRpY2VzKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZXQ7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
ICAgIHsKKyAgICAgICAgQ29tbWFQcmludGVyIGNvbW1hOworICAgICAgICBmb3IgKHNpemVfdCBp
bmRleCA6IGluZGljZXMoKS5zZXRCaXRzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEs
IFQ6OmR1bXBQcmVmaXgsIGluZGV4KTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgQml0VmVjdG9y
IG1fc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBCM0lu
ZGV4U2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25T
ZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0
aW9uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM0luc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
dm9pZCBJbnNlcnRpb25TZXQ6OmV4ZWN1dGUoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgZXhl
Y3V0ZUluc2VydGlvbnMoYmxvY2stPm1fdmFsdWVzLCBtX2luc2VydGlvbnMpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzSW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgQjNJbnNlcnRpb25T
ZXRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9JbnNlcnRpb24uaD4K
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
eworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisK
K3R5cGVkZWYgV1RGOjpJbnNlcnRpb248VmFsdWUqPiBJbnNlcnRpb247CisKK2NsYXNzIEluc2Vy
dGlvblNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KFByb2NlZHVyZSYgcHJvY2VkdXJl
KQorICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICB7CisgICAgfQorCisgICAg
UHJvY2VkdXJlJiBjb2RlKCkgeyByZXR1cm4gbV9wcm9jZWR1cmU7IH0KKworICAgIHZvaWQgYXBw
ZW5kSW5zZXJ0aW9uKGNvbnN0IEluc2VydGlvbiYgaW5zZXJ0aW9uKQorICAgIHsKKyAgICAgICAg
bV9pbnNlcnRpb25zLmFwcGVuZChpbnNlcnRpb24pOworICAgIH0KKworICAgIFZhbHVlKiBpbnNl
cnRWYWx1ZShzaXplX3QgaW5kZXgsIFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGVu
ZEluc2VydGlvbihJbnNlcnRpb24oaW5kZXgsIHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1
ZTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KKyAgICBWYWx1ZSogaW5zZXJ0KHNpemVfdCBpbmRleCwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cyk7CisKKyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitwcml2YXRl
OgorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7CisgICAgVmVjdG9yPEluc2VydGlvbiwgOD4g
bV9pbnNlcnRpb25zOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNJbnNlcnRpb25TZXRfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0SW5saW5lcy5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0SW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0luc2VydGlvblNldElubGlu
ZXNfaAorI2RlZmluZSBCM0luc2VydGlvblNldElubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJ
bmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0
eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1ZhbHVlKiBJbnNlcnRp
b25TZXQ6Omluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7Cisg
ICAgcmV0dXJuIGluc2VydFZhbHVlKGluZGV4LCBtX3Byb2NlZHVyZS5hZGQ8VmFsdWVUeXBlPihh
cmd1bWVudHMuLi4pKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNJbnNlcnRpb25TZXRJbmxpbmVzX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDU4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNMb3dlclRv
QWlyLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisj
aW5jbHVkZSAiQjNBZGRyZXNzTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzQXJndW1lbnRSZWdWYWx1
ZS5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0NvbW11
dGF0aXZpdHkuaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNJbmRleFNl
dC5oIgorI2luY2x1ZGUgIkIzTG93ZXJpbmdNYXRjaGVyLmgiCisjaW5jbHVkZSAiQjNNZW1vcnlW
YWx1ZS5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJl
LmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5o
IgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgTG93
ZXJUb0FpciB7CitwdWJsaWM6CisgICAgTG93ZXJUb0FpcihQcm9jZWR1cmUmIHByb2NlZHVyZSwg
Q29kZSYgY29kZSkKKyAgICAgICAgOiB2YWx1ZVRvVG1wKHByb2NlZHVyZS52YWx1ZXMoKS5zaXpl
KCkpCisgICAgICAgICwgYmxvY2tUb0Jsb2NrKHByb2NlZHVyZS5zaXplKCkpCisgICAgICAgICwg
dXNlQ291bnRzKHByb2NlZHVyZSkKKyAgICAgICAgLCBhZGRyZXNzU2VsZWN0b3IoKnRoaXMpCisg
ICAgICAgICwgcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgLCBjb2RlKGNvZGUpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgcnVuKCkKKyAgICB7CisgICAgICAgIGZvciAoQjM6OkJhc2lj
QmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlKQorICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2Nr
XSA9IGNvZGUuYWRkQmxvY2soYmxvY2stPmZyZXF1ZW5jeSgpKTsKKworICAgICAgICAvLyBMb3dl
ciBkZWZzIGJlZm9yZSB1c2VzIG9uIGEgZ2xvYmFsIGxldmVsLiBUaGlzIGlzIGEgZ29vZCBoZXVy
aXN0aWMgdG8gbG9jayBkb3duIGEKKyAgICAgICAgLy8gaG9pc3RlZCBhZGRyZXNzIGV4cHJlc3Np
b24gYmVmb3JlIHdlIGR1cGxpY2F0ZSBpdCBiYWNrIGludG8gdGhlIGxvb3AuCisgICAgICAgIGZv
ciAoQjM6OkJhc2ljQmxvY2sqIGJsb2NrIDogcHJvY2VkdXJlLmJsb2Nrc0luUHJlT3JkZXIoKSkg
eworICAgICAgICAgICAgLy8gUmVzZXQgc29tZSBzdGF0ZS4KKyAgICAgICAgICAgIGluc3RzLnJl
c2l6ZSgwKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHJvY2VzcyBibG9ja3MgaW4g
cmV2ZXJzZSBvcmRlciBzbyB3ZSBzZWUgdXNlcyBiZWZvcmUgZGVmcy4gVGhhdCdzIHdoYXQgYWxs
b3dzIHVzCisgICAgICAgICAgICAvLyB0byBtYXRjaCBwYXR0ZXJucyBlZmZlY3RpdmVseS4KKyAg
ICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGJsb2NrLT5zaXplKCk7IGktLTspIHsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50VmFsdWUgPSBibG9jay0+YXQoaSk7CisgICAgICAgICAgICAgICAg
aWYgKGxvY2tlZC5jb250YWlucyhjdXJyZW50VmFsdWUpKQorICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgICAgICBpbnN0cy5hcHBlbmQoVmVjdG9yPEluc3Q+KCkpOwor
ICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gcnVuTG93ZXJpbmdNYXRjaGVyKGN1cnJlbnRW
YWx1ZSwgKnRoaXMpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAg
ICAgICAgICAgIGRhdGFMb2coIkZBVEFMOiBjb3VsZCBub3QgbG93ZXIgIiwgZGVlcER1bXAoY3Vy
cmVudFZhbHVlKSwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICAvLyBOb3cgYXBwZW5kIHRoZSBpbnN0cnVjdGlvbnMuIGluc3RzIGNvbnRhaW5zIHRoZW0g
aW4gcmV2ZXJzZSBvcmRlciwgc28gd2UgcHJvY2VzcworICAgICAgICAgICAgLy8gaXQgaW4gcmV2
ZXJzZS4KKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGluc3RzLnNpemUoKTsgaS0tOykg
eworICAgICAgICAgICAgICAgIGZvciAoSW5zdCYgaW5zdCA6IGluc3RzW2ldKQorICAgICAgICAg
ICAgICAgICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5hcHBlbmRJbnN0KFdURjo6bW92ZShpbnN0
KSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBz
dWNjZXNzb3JzIGFyZSBzZXQgdXAgY29ycmVjdGx5LgorICAgICAgICAgICAgQVNTRVJUKGJsb2Nr
LT5zdWNjZXNzb3JzKCkuc2l6ZSgpIDw9IDIpOworICAgICAgICAgICAgZm9yIChCMzo6QmFzaWNC
bG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQorICAgICAgICAgICAg
ICAgIGJsb2NrVG9CbG9ja1tibG9ja10tPnN1Y2Nlc3NvcnMoKS5hcHBlbmQoYmxvY2tUb0Jsb2Nr
W3N1Y2Nlc3Nvcl0pOworICAgICAgICB9CisKKyAgICAgICAgQWlyOjpJbnNlcnRpb25TZXQgaW5z
ZXJ0aW9uU2V0KGNvZGUpOworICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBwcm9sb2d1ZSkKKyAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnRJbnN0KDAsIFdURjo6bW92ZShpbnN0KSk7Cisg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOworICAgIH0KKworICAgIFRtcCB0
bXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgVG1wJiB0bXAgPSB2YWx1ZVRvVG1wW3Zh
bHVlXTsKKyAgICAgICAgaWYgKCF0bXApCisgICAgICAgICAgICB0bXAgPSBjb2RlLm5ld1RtcChp
c0ludCh2YWx1ZS0+dHlwZSgpKSA/IEFyZzo6R1AgOiBBcmc6OkZQKTsKKyAgICAgICAgcmV0dXJu
IHRtcDsKKyAgICB9CisKKyAgICAvLyBUaGlzIHR1cm5zIHRoZSBnaXZlbiBvcGVyYW5kIGludG8g
YW4gYWRkcmVzcy4KKyAgICBBcmcgZWZmZWN0aXZlQWRkcihWYWx1ZSogYWRkcmVzcykKKyAgICB7
CisgICAgICAgIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFkZHJlc3MgPSBBcmcoKTsKKyAgICAg
ICAgaWYgKHJ1bkFkZHJlc3NNYXRjaGVyKGFkZHJlc3MsIGFkZHJlc3NTZWxlY3RvcikpCisgICAg
ICAgICAgICByZXR1cm4gYWRkcmVzc1NlbGVjdG9yLnNlbGVjdGVkQWRkcmVzczsKKworICAgICAg
ICByZXR1cm4gQXJnOjphZGRyKHRtcChhZGRyZXNzKSk7CisgICAgfQorCisgICAgQXJnIGVmZmVj
dGl2ZUFkZHIoVmFsdWUqIGFkZHJlc3MsIFZhbHVlKiBtZW1vcnlWYWx1ZSkKKyAgICB7CisgICAg
ICAgIEFyZyByZXN1bHQgPSBlZmZlY3RpdmVBZGRyKGFkZHJlc3MpOworICAgICAgICBBU1NFUlQo
cmVzdWx0KTsKKworICAgICAgICBpbnQzMl90IG9mZnNldCA9IG1lbW9yeVZhbHVlLT5hczxNZW1v
cnlWYWx1ZT4oKS0+b2Zmc2V0KCk7CisgICAgICAgIEFyZyBvZmZzZXRSZXN1bHQgPSByZXN1bHQu
d2l0aE9mZnNldChvZmZzZXQpOworICAgICAgICBpZiAoIW9mZnNldFJlc3VsdCkKKyAgICAgICAg
ICAgIHJldHVybiBBcmc6OmFkZHIodG1wKGFkZHJlc3MpLCBvZmZzZXQpOworICAgICAgICByZXR1
cm4gb2Zmc2V0UmVzdWx0OworICAgIH0KKworICAgIC8vIFRoaXMgZ2l2ZXMgeW91IHRoZSBhZGRy
ZXNzIG9mIHRoZSBnaXZlbiBMb2FkIG9yIFN0b3JlLiBJZiBpdCdzIG5vdCBhIExvYWQgb3IgU3Rv
cmUsIHRoZW4KKyAgICAvLyBpdCByZXR1cm5zIEFyZygpLgorICAgIEFyZyBhZGRyKFZhbHVlKiBt
ZW1vcnlWYWx1ZSkKKyAgICB7CisgICAgICAgIE1lbW9yeVZhbHVlKiB2YWx1ZSA9IG1lbW9yeVZh
bHVlLT5hczxNZW1vcnlWYWx1ZT4oKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBBcmcoKTsKKworICAgICAgICByZXR1cm4gZWZmZWN0aXZlQWRkcih2YWx1ZS0+Y2hp
bGRyZW4oKS5sYXN0KCksIHZhbHVlKTsKKyAgICB9CisKKyAgICBBcmcgbG9hZEFkZHIoVmFsdWUq
IGxvYWRWYWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChsb2FkVmFsdWUtPm9wY29kZSgpID09IExv
YWQpCisgICAgICAgICAgICByZXR1cm4gYWRkcihsb2FkVmFsdWUpOworICAgICAgICByZXR1cm4g
QXJnKCk7CisgICAgfQorCisgICAgQXJnIGltbShWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAg
ICBpZiAodmFsdWUtPmhhc0ludDMyKCkpCisgICAgICAgICAgICByZXR1cm4gQXJnOjppbW0odmFs
dWUtPmFzSW50MzIoKSk7CisgICAgICAgIHJldHVybiBBcmcoKTsKKyAgICB9CisKKyAgICBBcmcg
aW1tT3JUbXAoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgaWYgKEFyZyByZXN1bHQgPSBp
bW0odmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHRt
cCh2YWx1ZSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8QWlyOjpPcGNvZGUgb3Bjb2RlLCBDb21t
dXRhdGl2aXR5IGNvbW11dGF0aXZpdHkgPSBOb3RDb21tdXRhdGl2ZT4KKyAgICB2b2lkIGFwcGVu
ZEJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBUbXAgcmVz
dWx0ID0gdG1wKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIAorICAgICAgICAvLyBUaHJlZS1vcGVy
YW5kIGZvcm1zIGxpa2U6CisgICAgICAgIC8vICAgICBPcCBhLCBiLCBjCisgICAgICAgIC8vIG1l
YW4gc29tZXRoaW5nIGxpa2U6CisgICAgICAgIC8vICAgICBjID0gYSBPcCBiCisKKyAgICAgICAg
aWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFyZzo6VG1wLCBBcmc6OlRtcCkpIHsK
KyAgICAgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAgICAg
ICAgICAgICAgaWYgKGltbShyaWdodCkpIHsKKyAgICAgICAgICAgICAgICAgICAgYXBwZW5kKG9w
Y29kZSwgaW1tKHJpZ2h0KSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICAvLyBBIG5vbi1jb21tdXRhdGl2ZSBvcGVyYXRpb24gY291bGQgaGF2ZSBhbiBp
bW1lZGlhdGUgaW4gbGVmdC4KKyAgICAgICAgICAgICAgICBpZiAoaW1tKGxlZnQpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGltbShsZWZ0KSwgdG1wKHJpZ2h0KSwgcmVz
dWx0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbW0ocmlnaHQpICYmIGlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIEFyZzo6SW1tLCBBcmc6OlRtcCkpIHsKKyAgICAgICAg
ICAgIGFwcGVuZChvcGNvZGUsIHRtcChsZWZ0KSwgaW1tKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIE5vdGUgdGhhdCBubyBrbm93
biBhcmNoaXRlY3R1cmUgaGFzIGEgdGhyZWUtb3BlcmFuZCBmb3JtIG9mIGJpbmFyeSBvcGVyYXRp
b25zIHRoYXQgYWxzbworICAgICAgICAvLyBsb2FkIGZyb20gbWVtb3J5LiBJZiBzdWNoIGFuIGFi
b21pbmF0aW9uIGRpZCBleGlzdCwgd2Ugd291bGQgaGFuZGxlIGl0IHNvbWV3aGVyZSBhcm91bmQK
KyAgICAgICAgLy8gaGVyZS4KKworICAgICAgICAvLyBUd28tb3BlcmFuZCBmb3JtcyBsaWtlOgor
ICAgICAgICAvLyAgICAgT3AgYSwgYgorICAgICAgICAvLyBtZWFuIHNvbWV0aGluZyBsaWtlOgor
ICAgICAgICAvLyAgICAgYiA9IGIgT3AgYQorCisgICAgICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdl
IHByZWZlciB2ZXJzaW9ucyBvZiB0aGUgb3BlcmF0aW9uIHRoYXQgaGF2ZSBhIGZ1c2VkIGxvYWQg
b3IgYW4gaW1tZWRpYXRlCisgICAgICAgIC8vIG92ZXIgdGhyZWUgb3BlcmFuZCBmb3Jtcy4KKyAg
ICAgICAgCisgICAgICAgIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlKSB7CisgICAg
ICAgICAgICBBcmcgbGVmdEFkZHIgPSBsb2FkQWRkcihsZWZ0KTsKKyAgICAgICAgICAgIGlmIChp
c1ZhbGlkRm9ybShvcGNvZGUsIGxlZnRBZGRyLmtpbmQoKSwgQXJnOjpUbXApKSB7CisgICAgICAg
ICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50VmFsdWUtPnR5cGUoKSks
IHRtcChyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgbGVm
dEFkZHIsIHJlc3VsdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisKKyAgICAgICAgQXJnIHJpZ2h0QWRkciA9IGxvYWRBZGRyKHJpZ2h0KTsKKyAg
ICAgICAgaWYgKGlzVmFsaWRGb3JtKG9wY29kZSwgcmlnaHRBZGRyLmtpbmQoKSwgQXJnOjpUbXAp
KSB7CisgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGN1cnJlbnRWYWx1ZS0+
dHlwZSgpKSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwg
cmlnaHRBZGRyLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKGltbShyaWdodCkgJiYgaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgQXJn
OjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGN1cnJlbnRW
YWx1ZS0+dHlwZSgpKSwgdG1wKGxlZnQpLCByZXN1bHQpOworICAgICAgICAgICAgYXBwZW5kKG9w
Y29kZSwgaW1tKHJpZ2h0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OlRtcCwg
QXJnOjpUbXApKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIHRtcChy
aWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBhcHBlbmQocmVsYXhlZE1vdmVGb3JUeXBlKGN1cnJlbnRWYWx1ZS0+dHlwZSgpKSwgdG1wKGxl
ZnQpLCByZXN1bHQpOworICAgICAgICBhcHBlbmQob3Bjb2RlLCB0bXAocmlnaHQpLCByZXN1bHQp
OworICAgIH0KKworICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29tbXV0YXRpdml0
eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CisgICAgYm9vbCB0cnlBcHBlbmRTdG9y
ZUJpbk9wKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICAvLyBGSVhN
RTogVGhpcyBmYWlscyB0byBjaGVjayBpZiB0aGVyZSBhcmUgYW55IGVmZmVjdHMgYmV0d2VlbiB0
aGUgTG9hZCBhbmQgdGhlIFN0b3JlIHRoYXQKKyAgICAgICAgLy8gY291bGQgY2xvYmJlciB0aGUg
bG9hZGVkIHZhbHVlLiBXZSBuZWVkIHRvIGNoZWNrIHN1Y2ggdGhpbmdzIGJlY2F1c2Ugd2UgYXJl
IGVmZmVjdGl2ZWx5CisgICAgICAgIC8vIHNpbmtpbmcgdGhlIGxvYWQuCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzQKKyAgICAgICAgCisg
ICAgICAgIEFyZyBzdG9yZUFkZHIgPSBhZGRyKGN1cnJlbnRWYWx1ZSk7CisgICAgICAgIEFTU0VS
VChzdG9yZUFkZHIpOworCisgICAgICAgIFZhbHVlKiBvdGhlclZhbHVlOworICAgICAgICBpZiAo
YWRkcihsZWZ0KSA9PSBzdG9yZUFkZHIpCisgICAgICAgICAgICBvdGhlclZhbHVlID0gcmlnaHQ7
CisgICAgICAgIGVsc2UgaWYgKGNvbW11dGF0aXZpdHkgPT0gQ29tbXV0YXRpdmUgJiYgYWRkcihy
aWdodCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IGxlZnQ7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoaXNWYWxp
ZEZvcm0ob3Bjb2RlLCBBcmc6OkltbSwgc3RvcmVBZGRyLmtpbmQoKSkgJiYgaW1tKG90aGVyVmFs
dWUpKSB7CisgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0ob3RoZXJWYWx1ZSksIHN0b3Jl
QWRkcik7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlm
ICghaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgc3RvcmVBZGRyLmtpbmQoKSkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKG90aGVy
VmFsdWUpLCBzdG9yZUFkZHIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBB
aXI6Ok9wY29kZSBtb3ZlRm9yVHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlMzI7
CisgICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpczY0Qml0
KCkpOworICAgICAgICAgICAgcmV0dXJuIE1vdmU7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAg
ICAgICAgICAgcmV0dXJuIE1vdmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAg
QWlyOjpPcGNvZGUgcmVsYXhlZE1vdmVGb3JUeXBlKFR5cGUgdHlwZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICBjYXNlIEludDY0
OgorICAgICAgICAgICAgcmV0dXJuIE1vdmU7CisgICAgICAgIGNhc2UgRG91YmxlOgorICAgICAg
ICAgICAgcmV0dXJuIE1vdmVEb3VibGU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFpcjo6T3Bjb2Rl
IG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zdHMu
bGFzdCgpLmFwcGVuZChJbnN0KG9wY29kZSwgY3VycmVudFZhbHVlLCBzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorICAgIAorICAgIEluZGV4U2V0PFZhbHVl
PiBsb2NrZWQ7IC8vIFRoZXNlIGFyZSB2YWx1ZXMgdGhhdCB3aWxsIGhhdmUgbm8gVG1wIGluIEFp
ci4KKyAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiB2YWx1ZVRvVG1wOyAvLyBUaGVzZSBhcmUgdmFs
dWVzIHRoYXQgbXVzdCBoYXZlIGEgVG1wIGluIEFpci4gV2Ugc2F5IHRoYXQgYSBWYWx1ZSogd2l0
aCBhIG5vbi1udWxsIFRtcCBpcyAicGlubmVkIi4KKyAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9j
aywgQWlyOjpCYXNpY0Jsb2NrKj4gYmxvY2tUb0Jsb2NrOworCisgICAgVXNlQ291bnRzIHVzZUNv
dW50czsKKworICAgIFZlY3RvcjxWZWN0b3I8SW5zdCwgND4+IGluc3RzOworICAgIFZlY3RvcjxJ
bnN0PiBwcm9sb2d1ZTsKKworICAgIFZhbHVlKiBjdXJyZW50VmFsdWU7CisKKyAgICAvLyBUaGUg
YWRkcmVzcyBzZWxlY3RvciB3aWxsIG1hdGNoIGFueSBwYXR0ZXJuIHdoZXJlIHRoZSBpbnB1dCBv
cGVyYW5kcyBhcmUgYXZhaWxhYmxlIGFzIFRtcHMuCisgICAgLy8gSXQgZG9lc24ndCBjYXJlIGFi
b3V0IHNoYXJpbmcuIEl0IHdpbGwgaGFwcGlseSBlbWl0IHRoZSBzYW1lIGFkZHJlc3MgZXhwcmVz
c2lvbiBvdmVyIGFuZCBvdmVyCisgICAgLy8gYWdhaW4gcmVnYXJkbGVzcyBvZiB0aGUgZXhwcmVz
c2lvbidzIGNvbXBsZXhpdHkuIFRoaXMgd29ya3Mgb3V0IGZpbmUsIHNpbmNlIGF0IHRoZSBtYWNo
aW5lCisgICAgLy8gbGV2ZWwsIGFkZHJlc3MgZXhwcmVzc2lvbnMgYXJlIHN1cGVyIGNoZWFwLiBI
b3dldmVyLCB0aGlzIGRvZXMgaGF2ZSBhIGhhY2sgdG8gYXZvaWQKKyAgICAvLyAidW5ob2lzdGlu
ZyIgYWRkcmVzcyBleHByZXNzaW9ucy4KKyAgICBjbGFzcyBBZGRyZXNzU2VsZWN0b3IgeworICAg
IHB1YmxpYzoKKyAgICAgICAgQWRkcmVzc1NlbGVjdG9yKExvd2VyVG9BaXImIGxvd2VyKQorICAg
ICAgICAgICAgOiBsb3dlcihsb3dlcikKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBhY2NlcHRSb290KFZhbHVlKiByb290KQorICAgICAgICB7CisgICAgICAgICAgICB0aGlz
LT5yb290ID0gcm9vdDsKKyAgICAgICAgICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gbWF0Y2ggYW4g
YWRkcmVzcyBleHByZXNzaW9uIHRoYXQgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZAorICAgICAg
ICAgICAgLy8gZXhwbGljaXRseS4KKyAgICAgICAgICAgIHJldHVybiAhbG93ZXIudmFsdWVUb1Rt
cFtyb290XTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWNjZXB0Um9vdExhdGUoVmFsdWUq
KSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgICAg
IGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxvd2VyLnZhbHVlVG9UbXBbdmFsdWVdKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBhY2NlcHRJ
bnRlcm5hbHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFjY2VwdElu
dGVybmFscygpIHsgcmV0dXJuIHRydWU7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgICAgIHZvaWQgYWNjZXB0SW50ZXJuYWxzTGF0ZShBcmd1bWVudHMu
Li4pIHsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICAg
ICAgYm9vbCBhY2NlcHRPcGVyYW5kcyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci5sb2NrZWQuY29udGFpbnModmFs
dWUpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHJldHVybiBh
Y2NlcHRPcGVyYW5kcyhhcmd1bWVudHMuLi4pOworICAgICAgICB9CisgICAgICAgIGJvb2wgYWNj
ZXB0T3BlcmFuZHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdE9wZXJhbmRzTGF0ZShBcmd1bWVu
dHMuLi4pIHsgfQorCisgICAgICAgIGJvb2wgdHJ5QWRkU2hpZnQxKFZhbHVlKiBpbmRleCwgVmFs
dWUqIGxvZ1NjYWxlLCBWYWx1ZSogYmFzZSkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGxv
Z1NjYWxlLT5hc0ludCgpIDwgMCB8fCBsb2dTY2FsZS0+YXNJbnQoKSA+IDMpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjpp
bmRleCgKKyAgICAgICAgICAgICAgICBsb3dlci50bXAoYmFzZSksIGxvd2VyLnRtcChpbmRleCks
IDEgPDwgbG9nU2NhbGUtPmFzSW50KCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MihWYWx1ZSogYmFzZSwgVmFsdWUqIGlu
ZGV4LCBWYWx1ZSogbG9nU2NhbGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0cnlB
ZGRTaGlmdDEoaW5kZXgsIGxvZ1NjYWxlLCBiYXNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChyaWdodC0+aGFzSW50MzIoKSkgeworICAgICAgICAgICAgICAgIC8vIFRoaXMgcHJv
ZHVjdGlvbiBpc24ndCBzdHJpY3RseSBuZWNlc3Nhcnkgc2luY2Ugd2UgZXhwZWN0CisgICAgICAg
ICAgICAgICAgLy8gTG9hZChBZGQoQHgsIEBjb25zdDEpLCBvZmZzZXQgPSBjb25zdDIpIHRvIGhh
dmUgYWxyZWFkeSBiZWVuIHN0cmVuZ3RoLXJlZHVjZWQKKyAgICAgICAgICAgICAgICAvLyB0byBM
b2FkKEB4LCBvZmZzZXQgPSBjb25zdDEgKyBjb25zdDIpLgorICAgICAgICAgICAgICAgIHNlbGVj
dGVkQWRkcmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAobGVmdCksIHJpZ2h0LT5hc0ludDMyKCkp
OworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBzZWxlY3RlZEFkZHJlc3MgPSBBcmc6OmluZGV4KGxvd2VyLnRtcChsZWZ0KSwgbG93ZXIu
dG1wKHJpZ2h0KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgdHJ5RGlyZWN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgc2VsZWN0ZWRBZGRy
ZXNzID0gQXJnOjphZGRyKGxvd2VyLnRtcChyb290KSk7CisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgTG93ZXJUb0FpciYgbG93ZXI7CisgICAg
ICAgIFZhbHVlKiByb290OworICAgICAgICBBcmcgc2VsZWN0ZWRBZGRyZXNzOworICAgIH07Cisg
ICAgQWRkcmVzc1NlbGVjdG9yIGFkZHJlc3NTZWxlY3RvcjsKKworICAgIC8vIEJlbG93IGlzIHRo
ZSBjb2RlIGZvciBhIGxvd2VyaW5nIHNlbGVjdG9yLCBzbyB0aGF0IHdlIGNhbiBwYXNzICp0aGlz
IHRvIHJ1bkxvd2VyaW5nTWF0Y2hlci4KKyAgICAvLyBUaGlzIHdpbGwgbWF0Y2ggY29tcGxleCBt
dWx0aS12YWx1ZSBleHByZXNzaW9ucywgYnV0IG9ubHkgaWYgdGhlcmUgaXMgbm8gc2hhcmluZy4g
Rm9yIGV4YW1wbGUsCisgICAgLy8gaXQgd29uJ3QgbWF0Y2ggYSBMb2FkIHR3aWNlIGFuZCBjYXVz
ZSB0aGUgZ2VuZXJhdGVkIGNvZGUgdG8gZG8gdHdvIGxvYWRzIHdoZW4gdGhlIG9yaWdpbmFsCisg
ICAgLy8gY29kZSBqdXN0IGRpZCBvbmUuCisgICAgCisgICAgYm9vbCBhY2NlcHRSb290KFZhbHVl
KiByb290KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChyb290LCAhbG9ja2VkLmNvbnRh
aW5zKHJvb3QpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIHZvaWQg
YWNjZXB0Um9vdExhdGUoVmFsdWUqKSB7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgYm9vbCBhY2NlcHRJbnRlcm5hbHMoVmFsdWUqIHZhbHVlLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgLy8gSWYgb25lIG9mIHRoZSBpbnRl
cm5hbCB0aGluZ3MgaGFzIGFscmVhZHkgYmVlbiBjb21wdXRlZCwgdGhlbiB3ZSBkb24ndCB3YW50
IHRvIGNhdXNlCisgICAgICAgIC8vIGl0IHRvIGJlIHJlY29tcHV0ZWQgYWdhaW4uCisgICAgICAg
IGlmICh2YWx1ZVRvVG1wW3ZhbHVlXSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgCisgICAgICAgIC8vIFdlIHJlcXVpcmUgaW50ZXJuYWxzIHRvIGhhdmUgb25seSBvbmUgdXNl
IC0gdXMuCisgICAgICAgIGlmICh1c2VDb3VudHNbdmFsdWVdICE9IDEpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICByZXR1cm4gYWNjZXB0SW50ZXJuYWxzKGFy
Z3VtZW50cy4uLik7CisgICAgfQorICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKCkgeyByZXR1cm4g
dHJ1ZTsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2
b2lkIGFjY2VwdEludGVybmFsc0xhdGUoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgIHsKKyAgICAgICAgbG9ja2VkLmFkZCh2YWx1ZSk7CisgICAgICAgIGFjY2VwdElu
dGVybmFsc0xhdGUoYXJndW1lbnRzLi4uKTsKKyAgICB9CisgICAgdm9pZCBhY2NlcHRJbnRlcm5h
bHNMYXRlKCkgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgor
ICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgIHsKKyAgICAgICAgaWYgKGxvY2tlZC5jb250YWlucyh2YWx1ZSkpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJldHVybiBhY2NlcHRPcGVyYW5kcyhhcmd1bWVu
dHMuLi4pOworICAgIH0KKyAgICBib29sIGFjY2VwdE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFj
Y2VwdE9wZXJhbmRzTGF0ZShBcmd1bWVudHMuLi4pIHsgfQorICAgIAorICAgIGJvb2wgdHJ5TG9h
ZChWYWx1ZSogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGFwcGVuZCgKKyAgICAgICAgICAgIG1v
dmVGb3JUeXBlKGN1cnJlbnRWYWx1ZS0+dHlwZSgpKSwKKyAgICAgICAgICAgIGVmZmVjdGl2ZUFk
ZHIoYWRkcmVzcywgY3VycmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlBZGQoVmFsdWUqIGxlZnQsIFZh
bHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAg
ICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxBZGQzMiwgQ29tbXV0YXRp
dmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNl
IEludDY0OgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkNjQsIENvbW11dGF0aXZlPihsZWZ0
LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29sIHRyeUFuZChWYWx1
ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBl
KCkpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFuZDMy
LCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGNhc2UgSW50NjQ6CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQ2NCwgQ29tbXV0
YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wg
dHJ5U3RvcmVBZGRMb2FkKFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQsIFZhbHVlKikKKyAgICB7
CisgICAgICAgIHN3aXRjaCAobGVmdC0+dHlwZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6Cisg
ICAgICAgICAgICByZXR1cm4gdHJ5QXBwZW5kU3RvcmVCaW5PcDxBZGQzMiwgQ29tbXV0YXRpdmU+
KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJ
bXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0KKyAgICAKKyAgICBib29sIHRyeVN0b3JlQW5kTG9hZChWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0LCBWYWx1ZSopCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkg
eworICAgICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgcmV0dXJuIHRyeUFwcGVuZFN0b3Jl
QmluT3A8QW5kMzIsIENvbW11dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgIGRlZmF1bHQ6
CisgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlTdG9y
ZShWYWx1ZSogdmFsdWUsIFZhbHVlKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgYXBwZW5kKG1v
dmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpLCB0bXAodmFsdWUpLCBlZmZlY3RpdmVBZGRyKGFkZHJl
c3MsIGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBi
b29sIHRyeVRydW5jQXJndW1lbnRSZWcoVmFsdWUqIGFyZ3VtZW50UmVnKQorICAgIHsKKyAgICAg
ICAgcHJvbG9ndWUuYXBwZW5kKEluc3QoCisgICAgICAgICAgICBNb3ZlLCBjdXJyZW50VmFsdWUs
CisgICAgICAgICAgICBUbXAoYXJndW1lbnRSZWctPmFzPEFyZ3VtZW50UmVnVmFsdWU+KCktPmFy
Z3VtZW50UmVnKCkpLAorICAgICAgICAgICAgdG1wKGN1cnJlbnRWYWx1ZSkpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlUcnVuYyhWYWx1ZSogdmFsdWUpCisg
ICAgeworICAgICAgICBhcHBlbmQoTW92ZSwgdG1wKHZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkp
OworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBib29sIHRyeUFyZ3VtZW50UmVn
KCkKKyAgICB7CisgICAgICAgIHByb2xvZ3VlLmFwcGVuZChJbnN0KAorICAgICAgICAgICAgbW92
ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkpLCBjdXJyZW50VmFsdWUsCisgICAgICAgICAg
ICBUbXAoY3VycmVudFZhbHVlLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpLT5hcmd1bWVudFJlZygp
KSwKKyAgICAgICAgICAgIHRtcChjdXJyZW50VmFsdWUpKSk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICAKKyAgICBib29sIHRyeUNvbnN0MzIoKQorICAgIHsKKyAgICAgICAgYXBw
ZW5kKE1vdmUsIGltbShjdXJyZW50VmFsdWUpLCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29sIHRyeUNvbnN0NjQoKQorICAgIHsK
KyAgICAgICAgYXBwZW5kKE1vdmUsIEFyZzo6aW1tNjQoY3VycmVudFZhbHVlLT5hc0ludDY0KCkp
LCB0bXAoY3VycmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGJvb2wgdHJ5SWRlbnRpdHkoVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXBwZW5kKHJl
bGF4ZWRNb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwgaW1tT3JUbXAodmFsdWUpLCB0bXAoY3Vy
cmVudFZhbHVlKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICBib29s
IHRyeVJldHVybihWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBhcHBlbmQocmVsYXhlZE1v
dmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpLCBpbW1PclRtcCh2YWx1ZSksIFRtcChHUFJJbmZvOjpy
ZXR1cm5WYWx1ZUdQUikpOworICAgICAgICBhcHBlbmQoUmV0KTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIAorICAgIFByb2NlZHVyZSYgcHJvY2VkdXJlOworICAgIENvZGUmIGNv
ZGU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBsb3dlclRvQWlyKFBy
b2NlZHVyZSYgcHJvY2VkdXJlLCBDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhhc2VT
Y29wZShwcm9jZWR1cmUsICJsb3dlclRvQWlyIik7CisgICAgTG93ZXJUb0FpciBsb3dlclRvQWly
KHByb2NlZHVyZSwgY29kZSk7CisgICAgbG93ZXJUb0Fpci5ydW4oKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM0xvd2VyVG9BaXJfaAorI2RlZmluZSBCM0xvd2VyVG9BaXJfaAorCisjaWYgRU5B
QkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBy
b2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2RlOyB9CisKKy8vIFRoaXMgbG93ZXJz
IHRoZSBjdXJyZW50IEIzIHByb2NlZHVyZSB0byBhbiBBaXIgY29kZS4KKwordm9pZCBsb3dlclRv
QWlyKFByb2NlZHVyZSYsIEFpcjo6Q29kZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0xvd2VyVG9BaXJfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlcmluZ01hdGNoZXIucGF0dGVy
bnMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRj
aGVyLnBhdHRlcm5zCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
TG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAK
KyMgQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMK
KyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMK
KyMgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBD
T05UUklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RgorIyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK21hdGNoZXIgTG93ZXJpbmdN
YXRjaGVyCisKKyMgVGhlc2UgcnVsZXMgYXJlIGNvbnNpZGVyZWQgaW4gYSBjYXNjYWRlLCBzdGFy
dGluZyBhdCB0aGUgdG9wLiBJdCdzIGltcGxlbmVudGVkIHVzaW5nIHN3aXRjaAorIyBzdGF0ZW1l
bnRzIHdoZXJldmVyIHBvc3NpYmxlLgorCisjIE5vdGU6IGFkZGluZyBtb3JlIHJ1bGVzIHRvIHRo
aXMgbWF0Y2hlciBpcyBhbiBleGNlbGxlbnQgd2F5IG9mIGltcHJvdmluZyBwZXJmb3JtYW5jZSEK
KworTG9hZCA9IExvYWQoYWRkcmVzcykKKworQWRkID0gQWRkKGxlZnQsIHJpZ2h0KQorQW5kID0g
Qml0QW5kKGxlZnQsIHJpZ2h0KQorCitTdG9yZUFkZExvYWQgPSBTdG9yZShBZGQobGVmdCwgcmln
aHQpLCBhZGRyZXNzKQorU3RvcmVBbmRMb2FkID0gU3RvcmUoQml0QW5kKGxlZnQsIHJpZ2h0KSwg
YWRkcmVzcykKK1N0b3JlID0gU3RvcmUodmFsdWUsIGFkZHJlc3MpCisKK1RydW5jQXJndW1lbnRS
ZWcgPSBUcnVuYyhhcmd1bWVudFJlZyA9IEFyZ3VtZW50UmVnKCkpCitUcnVuYyA9IFRydW5jKHZh
bHVlKQorCitBcmd1bWVudFJlZyA9IEFyZ3VtZW50UmVnKCkKKworQ29uc3QzMiA9IENvbnN0MzIo
KQorQ29uc3Q2NCA9IENvbnN0NjQoKQorCisjIEl0IHdvdWxkIGJlIGZhbnRhc3RpYyB0byBub3Qg
aGF2ZSB0byBoYXZlIHRoaXMgaGVyZSwgYnV0IHRoZSBwaGlsb3NvcGh5IG9mIG91ciBsb3dlcmlu
ZyBpcyB0aGF0CisjIGl0IHNob3VsZCBiZSBzb3VuZCBldmVuIGlmIHdlIGhhdmVuJ3QgcnVuIG9w
dGltaXphdGlvbnMuCitJZGVudGl0eSA9IElkZW50aXR5KHZhbHVlKQorCitSZXR1cm4gPSBSZXR1
cm4odmFsdWUpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlW
YWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK01lbW9yeVZhbHVlOjp+TWVtb3J5VmFsdWUoKQorewor
fQorCit2b2lkIE1lbW9yeVZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIGlmIChtX29mZnNldCkKKyAgICAgICAgb3V0LnByaW50KCJvZmZzZXQgPSAiLCBtX29m
ZnNldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM01lbW9yeVZhbHVlX2gKKyNkZWZpbmUg
QjNNZW1vcnlWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1
ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gRklYTUU6IEFkZCBh
bGlhcyBhbmFseXNpcyB0byB0aGVzZSBieSBhbGxvd2luZyB0aGUgY2xpZW50IHRvIGFzc29jaWF0
ZSBhbiBpbnRlZ2VyIHJhbmdlIHRvIHRoZQorLy8gdmFsdWUuIFR3byBvcGVyYXRpb25zIG1heSBh
Y2Nlc3MgdGhlIHNhbWUgbWVtb3J5IGlmIHRoZWlyIHJhbmdlcyBvdmVybGFwcy4KKy8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzUKKworY2xhc3MgSlNfRVhQ
T1JUX1BSSVZBVEUgTWVtb3J5VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0
YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
b3Bjb2RlKSB7CisgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICBjYXNlIExvYWQ4UzoKKyAg
ICAgICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIGNhc2Ug
TG9hZEZsb2F0OgorICAgICAgICBjYXNlIExvYWQ6CisgICAgICAgIGNhc2UgU3RvcmU4OgorICAg
ICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgY2Fz
ZSBTdG9yZToKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgfk1lbW9yeVZh
bHVlKCk7CisKKyAgICBpbnQzMl90IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9
CisgICAgdm9pZCBzZXRPZmZzZXQoaW50MzJfdCBvZmZzZXQpIHsgbV9vZmZzZXQgPSBvZmZzZXQ7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55
IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhhdAorICAgIC8vIGRlc2NyaWJlcyB0
aGUgcmV0dXJuZWQgdHlwZSkuCisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGlu
ZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2lu
dGVyLAorICAgICAgICBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgs
IG9wY29kZSwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICB7CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBz
d2l0Y2ggKG9wY29kZSkgeworICAgICAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgICAgICBjYXNlIExvYWQ4
UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2UzoK
KyAgICAgICAgICAgICAgICBBU1NFUlQodHlwZSA9PSBJbnQzMik7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgICAgICAgICBBU1NF
UlQodHlwZSA9PSBEb3VibGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3JlMTY6CisgICAgICAgICAgICBjYXNl
IFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIEFT
U0VSVCh0eXBlID09IFZvaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxvYWRz
IHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgorICAgIE1lbW9yeVZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwg
aW50MzJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IE1lbW9yeVZhbHVlKGluZGV4LCBvcGNvZGUs
IG9wY29kZSA9PSBMb2FkRmxvYXQgPyBEb3VibGUgOiBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBv
ZmZzZXQpCisgICAgeworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4K
KyAgICBNZW1vcnlWYWx1ZSgKKyAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCisgICAgICAgIGlu
dDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBv
cmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7
CisgICAgICAgIGlmICghQVNTRVJUX0RJU0FCTEVEKSB7CisgICAgICAgICAgICBzd2l0Y2ggKG9w
Y29kZSkgeworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBjYXNlIFN0b3Jl
MTY6CisgICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICBjYXNlIFN0b3Jl
OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGludDMyX3QgbV9vZmZzZXQgeyAw
IH07Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM01lbW9yeVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzT3Bjb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyOSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5h
bWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
T3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgIGNhc2UgTm9wOgor
ICAgICAgICBvdXQucHJpbnQoIk5vcCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJZGVu
dGl0eToKKyAgICAgICAgb3V0LnByaW50KCJJZGVudGl0eSIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBDb25zdDMyOgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0MzIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ29uc3Q2NDoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDY0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICBvdXQucHJp
bnQoIkNvbnN0RG91YmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdDoK
KyAgICAgICAgb3V0LnByaW50KCJTdGFja1Nsb3QiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgQXJndW1lbnRSZWc6CisgICAgICAgIG91dC5wcmludCgiQXJndW1lbnRSZWciKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgICAgICBvdXQucHJpbnQoIkZy
YW1lUG9pbnRlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBBZGQ6CisgICAgICAgIG91
dC5wcmludCgiQWRkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN1YjoKKyAgICAgICAg
b3V0LnByaW50KCJTdWIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTXVsOgorICAgICAg
ICBvdXQucHJpbnQoIk11bCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEaXY6CisgICAg
ICAgIG91dC5wcmludCgiRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoaWxsRGl2
OgorICAgICAgICBvdXQucHJpbnQoIkNoaWxsRGl2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIE1vZDoKKyAgICAgICAgb3V0LnByaW50KCJNb2QiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQml0QW5kOgorICAgICAgICBvdXQucHJpbnQoIkJpdEFuZCIpOworICAgICAgICByZXR1
cm47CisgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgb3V0LnByaW50KCJCaXRPciIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBCaXRYb3I6CisgICAgICAgIG91dC5wcmludCgiQml0WG9yIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNobDoKKyAgICAgICAgb3V0LnByaW50KCJTaGwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU1NocjoKKyAgICAgICAgb3V0LnByaW50KCJT
U2hyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFpTaHI6CisgICAgICAgIG91dC5wcmlu
dCgiWlNociIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgb3V0
LnByaW50KCJTRXh0OCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0MTY6CisgICAg
ICAgIG91dC5wcmludCgiU0V4dDE2Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNFeHQz
MjoKKyAgICAgICAgb3V0LnByaW50KCJTRXh0MzIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgWkV4dDMyOgorICAgICAgICBvdXQucHJpbnQoIlpFeHQzMiIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBUcnVuYzoKKyAgICAgICAgb3V0LnByaW50KCJUcnVuYyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBGUm91bmQ6CisgICAgICAgIG91dC5wcmludCgiRlJvdW5kIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIElUb0Q6CisgICAgICAgIG91dC5wcmludCgiSVRvRCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBEVG9JMzI6CisgICAgICAgIG91dC5wcmludCgi
RFRvSTMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEVxdWFsOgorICAgICAgICBvdXQu
cHJpbnQoIkVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdEVxdWFsOgorICAg
ICAgICBvdXQucHJpbnQoIk5vdEVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExl
c3NUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIEdyZWF0ZXJUaGFuOgorICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJUaGFuIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICAgICAgb3V0LnByaW50
KCJMZXNzRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR3JlYXRlckVxdWFsOgor
ICAgICAgICBvdXQucHJpbnQoIkdyZWF0ZXJFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBBYm92ZToKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZSIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlRXF1
YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgb3V0
LnByaW50KCJCZWxvd0VxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ4WjoK
KyAgICAgICAgb3V0LnByaW50KCJMb2FkOFoiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
TG9hZDhTOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQ4UyIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBMb2FkMTZaOgorICAgICAgICBvdXQucHJpbnQoIkxvYWQxNloiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZTIik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWRGbG9hdDoKKyAgICAgICAgb3V0LnByaW50
KCJMb2FkRmxvYXQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTG9hZDoKKyAgICAgICAg
b3V0LnByaW50KCJMb2FkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0b3JlODoKKyAg
ICAgICAgb3V0LnByaW50KCJTdG9yZTgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3Rv
cmUxNjoKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZTE2Iik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIG91dC5wcmludCgiU3RvcmVGbG9hdCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAgb3V0LnByaW50KCJTdG9yZSIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDQ2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJD
Q2FsbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQYXRjaHBvaW50OgorICAgICAgICBv
dXQucHJpbnQoIlBhdGNocG9pbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2tB
ZGQ6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tBZGQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQ2hlY2tTdWI6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tTdWIiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIG91dC5wcmludCgiQ2hlY2tNdWwi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIG91dC5wcmludCgi
Q2hlY2siKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgb3V0
LnByaW50KCJVcHNpbG9uIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBoaToKKyAgICAg
ICAgb3V0LnByaW50KCJQaGkiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSnVtcDoKKyAg
ICAgICAgb3V0LnByaW50KCJKdW1wIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJyYW5j
aDoKKyAgICAgICAgb3V0LnByaW50KCJCcmFuY2giKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2UgU3dpdGNoOgorICAgICAgICBvdXQucHJpbnQoIlN3aXRjaCIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBSZXR1cm46CisgICAgICAgIG91dC5wcmludCgiUmV0dXJuIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIE9vcHM6CisgICAgICAgIG91dC5wcmludCgiT29wcyIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjEg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBCM09wY29kZV9oCisjZGVmaW5lIEIzT3Bjb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworCitlbnVtIE9wY29kZSA6IGludDE2X3QgeworICAgIC8vIEEgbm8tb3AgdGhhdCBy
ZXR1cm5zIFZvaWQsIHVzZWZ1bCBmb3Igd2hlbiB5b3Ugd2FudCB0byByZW1vdmUgYSB2YWx1ZS4K
KyAgICBOb3AsCisgICAgCisgICAgLy8gUG9seW1vcnBoaWMgaWRlbnRpdHksIHVzYWJsZSB3aXRo
IGFueSB2YWx1ZSB0eXBlLgorICAgIElkZW50aXR5LAorCisgICAgLy8gQ29uc3RhbnRzLiBVc2Ug
dGhlIENvbnN0VmFsdWUqIGNsYXNzZXMuIENvbnN0YW50cyBleGlzdCBpbiB0aGUgY29udHJvbCBm
bG93LCBzbyB0aGF0IHdlIGNhbgorICAgIC8vIHJlYXNvbiBhYm91dCB3aGVyZSB3ZSB3b3VsZCBj
b25zdHJ1Y3QgdGhlbS4gTGFyZ2UgY29uc3RhbnRzIGFyZSBleHBlbnNpdmUgdG8gY3JlYXRlLgor
ICAgIENvbnN0MzIsCisgICAgQ29uc3Q2NCwKKyAgICBDb25zdERvdWJsZSwKKworICAgIC8vIFRo
ZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUg
dG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKKyAgICAvLyB3aGVyZSBpbiBjb250cm9s
IGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xvdCBWYWx1ZSBnZXRz
IGEgZGlzam9pbnQgcmFuZ2Ugb2YKKyAgICAvLyBzdGFjayBtZW1vcnkuIFVzZSB0aGUgU3RhY2tT
bG90VmFsdWUgY2xhc3MuCisgICAgU3RhY2tTbG90LAorCisgICAgLy8gVGhlIG1hZ2ljYWwgYXJn
dW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9m
IHRoZSBwcm9ncmFtCisgICAgLy8gcmVnYXJkbGVzcyBvZiB3aGVyZSBpbiBjb250cm9sIGZsb3cg
eW91IHB1dCBpdCwgYW5kIHRoZSBjb21waWxlciB0YWtlcyBjYXJlIHRvIGVuc3VyZSB0aGF0IHdl
CisgICAgLy8gZG9uJ3QgY2xvYmJlciB0aGUgdmFsdWUgYnkgcmVnaXN0ZXIgYWxsb2NhdGlvbiBv
ciBjYWxscyAoZWl0aGVyIGJ5IHNhdmluZyB0aGUgYXJndW1lbnQgdG8gdGhlCisgICAgLy8gc3Rh
Y2sgb3IgcHJlc2VydmluZyBpdCBpbiBhIGNhbGxlZS1zYXZlIHJlZ2lzdGVyKS4gVXNlIHRoZSBB
cmd1bWVudFJlZ1ZhbHVlIGNsYXNzLiBUaGUgcmV0dXJuCisgICAgLy8gdHlwZSBpcyBlaXRoZXIg
cG9pbnRlcigpIChmb3IgR1BScykgb3IgRG91YmxlIChmb3IgRlBScykuCisgICAgQXJndW1lbnRS
ZWcsCisKKyAgICAvLyBUaGUgZnJhbWUgcG9pbnRlci4gWW91IGNhbiBwdXQgdGhpcyBhbnl3aGVy
ZSBpbiBjb250cm9sIGZsb3cgYnV0IGl0IHdpbGwgYWx3YXlzIHlpZWxkIHRoZQorICAgIC8vIGZy
YW1lIHBvaW50ZXIsIHdpdGggYSBjYXZlYXQ6IGlmIG91ciBjb21waWxlciBjaGFuZ2VzIHRoZSBm
cmFtZSBwb2ludGVyIHRlbXBvcmFyaWx5IGZvciBzb21lCisgICAgLy8gc2lsbHkgcmVhc29uLCB0
aGUgRnJhbWVQb2ludGVyIGludHJpbnNpYyB3aWxsIHJldHVybiB3aGVyZSB0aGUgZnJhbWUgcG9p
bnRlciAqc2hvdWxkKiBiZSBub3QKKyAgICAvLyB3aGVyZSBpdCBoYXBwZW5zIHRvIGJlIHJpZ2h0
IG5vdy4KKyAgICBGcmFtZVBvaW50ZXIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBtYXRoLCB1c2Fi
bGUgd2l0aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBBZGQsCisgICAgU3ViLAorICAgIE11bCwKKyAg
ICBEaXYsCisKKyAgICAvLyBJbnRlZ2VyIG1hdGguCisgICAgQ2hpbGxEaXYsIC8vIGRvZXNuJ3Qg
dHJhcCBldmVyLCBiZWhhdmVzIGxpa2UgSlMgKHgveSl8MC4KKyAgICBNb2QsCisgICAgQml0QW5k
LAorICAgIEJpdE9yLAorICAgIEJpdFhvciwKKyAgICBTaGwsCisgICAgU1NociwKKyAgICBaU2hy
LAorCisgICAgLy8gQ2FzdHMgYW5kIHN1Y2guCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMgSW50
MzI6CisgICAgU0V4dDgsCisgICAgU0V4dDE2LAorICAgIC8vIFRha2VzIEludDMyIGFuZCByZXR1
cm5zIEludDY0OgorICAgIFNFeHQzMiwKKyAgICBaRXh0MzIsCisgICAgLy8gVGFrZXMgSW50NjQg
YW5kIHJldHVybnMgSW50MzI6CisgICAgVHJ1bmMsCisgICAgLy8gVGFrZXMgYW5kIHJldHVybnMg
RG91YmxlOgorICAgIEZSb3VuZCwKKyAgICAvLyBUYWtlcyBpbnRzIGFuZCByZXR1cm5zIERvdWJs
ZToKKyAgICBJVG9ELAorICAgIC8vIFRha2VzIERvdWJsZSBhbmQgcmV0dXJucyBJbnQzMjoKKyAg
ICBEVG9JMzIsCisKKyAgICAvLyBQb2x5bW9ycGhpYyBjb21wYXJpc29ucywgdXNhYmxlIHdpdGgg
YW55IHZhbHVlIHR5cGUuIFJldHVybnMgaW50MzIgMCBvciAxLiBOb3RlIHRoYXQgIk5vdCIKKyAg
ICAvLyBpcyBqdXN0IEVxdWFsKHgsIDApLgorICAgIEVxdWFsLAorICAgIE5vdEVxdWFsLAorICAg
IExlc3NUaGFuLAorICAgIEdyZWF0ZXJUaGFuLAorICAgIExlc3NFcXVhbCwKKyAgICBHcmVhdGVy
RXF1YWwsCisKKyAgICAvLyBJbnRlZ2VyIGNvbXBhcmlzb25zLiBSZXR1cm5zIGludDMyIDAgb3Ig
MS4KKyAgICBBYm92ZSwKKyAgICBCZWxvdywKKyAgICBBYm92ZUVxdWFsLAorICAgIEJlbG93RXF1
YWwsCisKKyAgICAvLyBNZW1vcnkgbG9hZHMuIE9wY29kZSBpbmRpY2F0ZXMgaG93IHdlIGxvYWQg
YW5kIHRoZSBsb2FkZWQgdHlwZS4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNl
IHJldHVybiBJbnQzMjoKKyAgICBMb2FkOFosCisgICAgTG9hZDhTLAorICAgIExvYWQxNlosCisg
ICAgTG9hZDE2UywKKyAgICAvLyBUaGlzIHJldHVybnMgRG91YmxlOgorICAgIExvYWRGbG9hdCwK
KyAgICAvLyBUaGlzIHJldHVybnMgd2hhdGV2ZXIgdGhlIHJldHVybiB0eXBlIGlzOgorICAgIExv
YWQsCisKKyAgICAvLyBNZW1vcnkgc3RvcmVzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB0aGUgdmFs
dWUgaXMgc3RvcmVkLiBUaGVzZSB1c2UgTWVtb3J5VmFsdWUuCisgICAgLy8gVGhlc2UgdGFrZSBh
biBJbnQzMiB2YWx1ZToKKyAgICBTdG9yZTgsCisgICAgU3RvcmUxNiwKKyAgICAvLyBUaGlzIHRh
a2VzIGEgRG91YmxlIHZhbHVlOgorICAgIFN0b3JlRmxvYXQsCisgICAgLy8gVGhpcyBpcyBhIHBv
bHltb3JwaGljIHN0b3JlIGZvciBJbnQzMiwgSW50NjQsIGFuZCBEb3VibGU6CisgICAgU3RvcmUs
CisKKyAgICAvLyBUaGlzIGlzIGEgcmVndWxhciBvcmRpbmFyeSBDIGZ1bmN0aW9uIGNhbGwsIHVz
aW5nIHRoZSBzeXN0ZW0gQyBjYWxsaW5nIGNvbnZlbnRpb24uIE1ha2Ugc3VyZQorICAgIC8vIHRo
YXQgdGhlIGFyZ3VtZW50cyBhcmUgcGFzc2VkIHVzaW5nIHRoZSByaWdodCB0eXBlcy4KKyAgICBD
Q2FsbCwKKworICAgIC8vIFRoaXMgaXMgYSBwYXRjaHBvaW50LiBVc2UgdGhlIFBhdGNocG9pbnRW
YWx1ZSBjbGFzcy4gVGhpcyBpcyB2aWV3ZWQgYXMgYmVoYXZpbmcgbGlrZSBhIGNhbGwsCisgICAg
Ly8gYnV0IG9ubHkgZW1pdHMgY29kZSB2aWEgYSBjb2RlIGdlbmVyYXRpb24gY2FsbGJhY2suIFRo
YXQgY2FsbGJhY2sgZ2V0cyB0byBlbWl0IGNvZGUgaW5saW5lLgorICAgIC8vIFlvdSBjYW4gcGFz
cyBhIHN0YWNrbWFwIGFsb25nIHdpdGggY29uc3RyYWludHMgb24gaG93IGVhY2ggc3RhY2ttYXAg
YXJndW1lbnQgbXVzdCBiZSBwYXNzZWQuCisgICAgLy8gSXQncyBsZWdhbCB0byByZXF1ZXN0IHRo
YXQgYSBzdGFja21hcCBhcmd1bWVudCBpcyBpbiBzb21lIHJlZ2lzdGVyIGFuZCBpdCdzIGxlZ2Fs
IHRvIHJlcXVlc3QKKyAgICAvLyB0aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgYXQgc29tZSBv
ZmZzZXQgZnJvbSB0aGUgdG9wIG9mIHRoZSBhcmd1bWVudCBwYXNzaW5nIGFyZWEgb24gdGhlCisg
ICAgLy8gc3RhY2suCisgICAgUGF0Y2hwb2ludCwKKworICAgIC8vIENoZWNrZWQgbWF0aC4gVXNl
IHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIGEgUGF0Y2hwb2ludCwgdGhpcyB0YWtlcyBhIGNv
ZGUgZ2VuZXJhdGlvbgorICAgIC8vIGNhbGxiYWNrLiBUaGF0IGNhbGxiYWNrIGdldHMgdG8gZW1p
dCBzb21lIGNvZGUgYWZ0ZXIgdGhlIGVwaWxvZ3VlLCBhbmQgZ2V0cyB0byBsaW5rIHRoZSBqdW1w
CisgICAgLy8gZnJvbSB0aGUgY2hlY2ssIGFuZCB0aGUgY2hvaWNlIG9mIHJlZ2lzdGVycy4gWW91
IGFsc28gZ2V0IHRvIHN1cHBseSBhIHN0YWNrbWFwLiBOb3RlIHRoYXQgeW91CisgICAgLy8gYXJl
IG5vdCBhbGxvd2VkIHRvIGp1bXAgYmFjayBpbnRvIHRoZSBtYWlubGluZSBjb2RlIGZyb20geW91
ciBzbG93IHBhdGgsIHNpbmNlIHRoZSBjb21waWxlcgorICAgIC8vIHdpbGwgYXNzdW1lIHRoYXQg
dGhlIGV4ZWN1dGlvbiBvZiB0aGVzZSBpbnN0cnVjdGlvbnMgcHJvdmVzIHRoYXQgb3ZlcmZsb3cg
ZGlkbid0IGhhcHBlbi4gRm9yCisgICAgLy8gZXhhbXBsZSwgaWYgeW91IGhhdmUgdHdvIENoZWNr
QWRkJ3M6CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gQ2hl
Y2tBZGQoeCwgeSkKKyAgICAvLworICAgIC8vIFRoZW4gaXQncyB2YWxpZCB0byBjaGFuZ2UgdGhp
cyB0bzoKKyAgICAvLworICAgIC8vIGEgPSBDaGVja0FkZCh4LCB5KQorICAgIC8vIGIgPSBJZGVu
dGl0eShhKQorICAgIC8vCisgICAgLy8gVGhpcyBpcyB2YWxpZCByZWdhcmRsZXNzIG9mIHRoZSBj
YWxsYmFja3MgdXNlZCBieSB0aGUgdHdvIENoZWNrQWRkcy4gVGhleSBtYXkgaGF2ZSBkaWZmZXJl
bnQKKyAgICAvLyBjYWxsYmFja3MuIFlldCwgdGhpcyB0cmFuc2Zvcm1hdGlvbiBpcyB2YWxpZCBl
dmVuIGlmIHRoZXkgYXJlIGRpZmZlcmVudCBiZWNhdXNlIHdlIGtub3cgdGhhdAorICAgIC8vIGFm
dGVyIHRoZSBmaXJzdCBDaGVja0FkZCBleGVjdXRlcywgdGhlIHNlY29uZCBDaGVja0FkZCBjb3Vs
ZCBub3QgaGF2ZSBwb3NzaWJseSB0YWtlbiBzbG93CisgICAgLy8gcGF0aC4gVGhlcmVmb3JlLCB0
aGUgc2Vjb25kIENoZWNrQWRkJ3MgY2FsbGJhY2sgaXMgaXJyZWxldmFudC4KKyAgICBDaGVja0Fk
ZCwKKyAgICBDaGVja1N1YiwKKyAgICBDaGVja011bCwKKworICAgIC8vIENoZWNrIHRoYXQgc2lk
ZS1leGl0cy4gVXNlIHRoZSBDaGVja1ZhbHVlIGNsYXNzLiBMaWtlIENoZWNrQWRkIGFuZCBmcmll
bmRzLCB0aGlzIGhhcyBhCisgICAgLy8gc3RhY2ttYXAgd2l0aCBhIGdlbmVyYXRpb24gY2FsbGJh
Y2suIFRoaXMgdGFrZXMgYW4gSW50MzIgYXJndW1lbnQgdGhhdCB0aGlzIGJyYW5jaGVzIG9uLCB3
aXRoCisgICAgLy8gZnVsbCBicmFuY2ggZnVzaW9uIGluIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rv
ci4gQSB0cnVlIHZhbHVlIGp1bXBzIHRvIHRoZSBnZW5lcmF0b3IncyBzbG93CisgICAgLy8gcGF0
aC4KKyAgICBDaGVjaywKKworICAgIC8vIFNTQSBzdXBwb3J0LCBpbiB0aGUgc3R5bGUgb2YgREZH
IFNTQS4KKyAgICBVcHNpbG9uLCAvLyBUaGlzIHVzZXMgdGhlIFVwc2lsb25WYWx1ZSBjbGFzcy4K
KyAgICBQaGksCisKKyAgICAvLyBKdW1wLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisg
ICAgSnVtcCwKKyAgICAKKyAgICAvLyBQb2x5bW9ycGhpYyBicmFuY2gsIHVzYWJsZSB3aXRoIGFu
eSB2YWx1ZSB0eXBlLiBCcmFuY2hlcyBpZiBub3QgZXF1YWwgdG8gemVyby4gVXNlcyB0aGUKKyAg
ICAvLyBDb250cm9sVmFsdWUgY2xhc3MsIHdpdGggdGhlIDAtaW5kZXggc3VjY2Vzc29yIGJlaW5n
IHRoZSB0cnVlIHN1Y2Nlc3Nvci4KKyAgICBCcmFuY2gsCisKKyAgICAvLyBTd2l0Y2guIFN3aXRj
aGVzIG92ZXIgZWl0aGVyIEludDMyIG9yIEludDY0LiBVc2VzIHRoZSBTd2l0Y2hWYWx1ZSBjbGFz
cy4KKyAgICBTd2l0Y2gsCisKKyAgICAvLyBSZXR1cm4uIE5vdGUgdGhhdCBCMyBwcm9jZWR1cmVz
IGRvbid0IGtub3cgdGhlaXIgcmV0dXJuIHR5cGUsIHNvIHRoaXMgY2FuIGp1c3QgcmV0dXJuIGFu
eQorICAgIC8vIHR5cGUuIFVzZXMgdGhlIENvbnRyb2xWYWx1ZSBjbGFzcy4KKyAgICBSZXR1cm4s
CisKKyAgICAvLyBUaGlzIGlzIGEgdGVybWluYWwgdGhhdCBpbmRpY2F0ZXMgdGhhdCB3ZSB3aWxs
IG5ldmVyIGdldCBoZXJlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgT29wcwor
fTsKKworaW5saW5lIGJvb2wgaXNDaGVja01hdGgoT3Bjb2RlIG9wY29kZSkKK3sKKyAgICBzd2l0
Y2ggKG9wY29kZSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAg
ICBjYXNlIENoZWNrTXVsOgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpPcGNvZGUpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM09wY29kZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3JpZ2luLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIE9y
aWdpbjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiT3Jp
Z2luKCIsIFJhd1BvaW50ZXIobV9kYXRhKSwgIikiKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzT3JpZ2luLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNPcmlnaW5faAorI2Rl
ZmluZSBCM09yaWdpbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBXaG9l
dmVyIGdlbmVyYXRlcyBCM0lSIGNhbiBjaG9vc2UgdG8gcHV0IG9yaWdpbnMgb24gdmFsdWVzLiBX
aGVuIHlvdSBkbyB0aGlzLCBCMyB3aWxsIGJlIGFibGUgdG8KKy8vIGFjY291bnQsIGRvd24gdG8g
dGhlIG1hY2hpbmUgY29kZSwgd2hpY2ggaW5zdHJ1Y3Rpb24gY29ycmVzcG9uZHMgdG8gd2hpY2gg
b3JpZ2luLiBCMworLy8gdHJhbnNmb3JtYXRpb25zIG11c3QgcHJlc2VydmUgT3JpZ2lucyBjYXJl
ZnVsbHkuIEl0J3MgYW4gZXJyb3IgdG8gd3JpdGUgYSB0cmFuc2Zvcm1hdGlvbiB0aGF0CisvLyBl
aXRoZXIgZHJvcHMgT3JpZ2lucyBvciBsaWVzIGFib3V0IHRoZW0uCitjbGFzcyBPcmlnaW4gewor
cHVibGljOgorICAgIGV4cGxpY2l0IE9yaWdpbihjb25zdCB2b2lkKiBkYXRhID0gbnVsbHB0cikK
KyAgICAgICAgOiBtX2RhdGEoZGF0YSkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgb3Bl
cmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV9kYXRhOyB9CisKKyAgICBjb25zdCB2b2lk
KiBkYXRhKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6CisgICAgY29uc3Qgdm9pZCogbV9kYXRhOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNPcmlnaW5faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1BhdGNocG9pbnRTcGVj
aWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNv
bnRleHQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworUGF0Y2hwb2ludFNwZWNp
YWw6OlBhdGNocG9pbnRTcGVjaWFsKCkKK3sKK30KKworUGF0Y2hwb2ludFNwZWNpYWw6On5QYXRj
aHBvaW50U3BlY2lhbCgpCit7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6OmZvckVhY2hB
cmcoCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdDYWxs
YmFjaz4mIGNhbGxiYWNrKQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQp
IHsKKyAgICAgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMSwgaW5zdCwgY2FsbGJhY2spOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgY2FsbGJhY2soaW5zdC5hcmdzWzFdLCBBcmc6OkRlZiwg
aW5zdC5vcmlnaW4tPmFpclR5cGUoKSk7CisgICAgZm9yRWFjaEFyZ0ltcGwoMCwgMiwgaW5zdCwg
Y2FsbGJhY2spOworfQorCitib29sIFBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKEluc3QmIGlu
c3QpCit7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0
dXJuIGlzVmFsaWRJbXBsKDAsIDEsIGluc3QpOworCisgICAgaWYgKGluc3QuYXJncy5zaXplKCkg
PCAyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKGluc3QuYXJnc1sxXS5raW5kKCkg
IT0gQXJnOjpUbXApCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIWluc3QuYXJnc1sx
XS5pc1R5cGUoaW5zdC5vcmlnaW4tPmFpclR5cGUoKSkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIHJldHVybiBpc1ZhbGlkSW1wbCgwLCAyLCBpbnN0KTsKK30KKworYm9vbCBQYXRjaHBv
aW50U3BlY2lhbDo6YWRtaXRzU3RhY2soSW5zdCYgaW5zdCwgdW5zaWduZWQgYXJnSW5kZXgpCit7
CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgPT0gVm9pZCkKKyAgICAgICAgcmV0dXJuIGFk
bWl0c1N0YWNrSW1wbCgwLCAxLCBpbnN0LCBhcmdJbmRleCk7CisKKyAgICBpZiAoYXJnSW5kZXgg
PT0gMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGFkbWl0c1N0YWNrSW1w
bCgwLCAyLCBpbnN0LCBhcmdJbmRleCk7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBQYXRjaHBv
aW50U3BlY2lhbDo6Z2VuZXJhdGUoCisgICAgSW5zdCYgaW5zdCwgQ0NhbGxIZWxwZXJzJiBqaXQs
IEdlbmVyYXRpb25Db250ZXh0JiBjb250ZXh0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qu
b3JpZ2luOworICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAg
IEFTU0VSVChzdGFja21hcCk7CisKKyAgICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisgICAgdW5z
aWduZWQgb2Zmc2V0ID0gMTsKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSAhPSBWb2lkKQor
ICAgICAgICByZXBzLmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW29m
ZnNldCsrXSkpOworICAgIGFwcGVuZFJlcHNJbXBsKGNvbnRleHQsIG9mZnNldCwgaW5zdCwgcmVw
cyk7CisgICAgCisgICAgU3RhY2ttYXA6OkdlbmVyYXRpb25QYXJhbXMgcGFyYW1zOworICAgIHBh
cmFtcy52YWx1ZSA9IHZhbHVlOworICAgIHBhcmFtcy5zdGFja21hcCA9IHN0YWNrbWFwOworICAg
IHBhcmFtcy5yZXBzID0gcmVwczsKKyAgICBwYXJhbXMudXNlZFJlZ2lzdGVycyA9IHN0YWNrbWFw
LT5tX3VzZWRSZWdpc3RlcnM7CisKKyAgICBzdGFja21hcC0+bV9nZW5lcmF0b3ItPnJ1bihqaXQs
IHBhcmFtcyk7CisKKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1wKCk7Cit9CisKK3ZvaWQg
UGF0Y2hwb2ludFNwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJQYXRjaHBvaW50Iik7Cit9CisKK3ZvaWQgUGF0Y2hwb2ludFNwZWNpYWw6
OmRlZXBEdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgi
TG93ZXJlZCBCMzo6UGF0Y2hwb2ludFZhbHVlLiIpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9pbnRTcGVjaWFsX2gKKyNkZWZpbmUgQjNQYXRjaHBv
aW50U3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21h
cFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFRoaXMg
aXMgYSBzcGVjaWFsIHRoYXQgcmVjb2duaXplcyB0aGF0IHRoZXJlIGFyZSB0d28gdXNlcyBvZiBQ
YXRjaHBvaW50OiBWb2lkIGFuZCBhbmQgbm9uLVZvaWQuCisvLyBJbiB0aGUgVm9pZCBjYXNlLCB0
aGUgc3ludGF4IG9mIHRoZSBBaXIgUGF0Y2ggaW5zdHJ1Y3Rpb24gaXM6CisvLworLy8gICAgIFBh
dGNoICZwYXRjaHBvaW50LCBhcmdzLi4uCisvLworLy8gV2hlcmUgImFyZ3MuLi4iIGFyZSB0aGUg
bG93ZXJlZCBhcmd1bWVudHMgdG8gdGhlIFBhdGNocG9pbnQgaW5zdHJ1Y3Rpb24uIEluIHRoZSBu
b24tVm9pZCBjYXNlCisvLyB3ZSB3aWxsIGhhdmU6CisvLworLy8gICAgIFBhdGNoICZwYXRjaHBv
aW50LCByZXN1bHQsIGFyZ3MuLi4KKworY2xhc3MgUGF0Y2hwb2ludFNwZWNpYWwgOiBwdWJsaWMg
U3RhY2ttYXBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBQYXRjaHBvaW50U3BlY2lhbCgpOworICAg
IHZpcnR1YWwgflBhdGNocG9pbnRTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGZv
ckVhY2hBcmcoQWlyOjpJbnN0JiwgY29uc3QgU2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFy
Z0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChBaXI6Okluc3QmKSBvdmVy
cmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4
KSBvdmVycmlkZTsKKworICAgIC8vIE5PVEU6IHRoZSBnZW5lcmF0ZSBtZXRob2Qgd2lsbCBnZW5l
cmF0ZSB0aGUgaGlkZGVuIGJyYW5jaCBhbmQgdGhlbiByZWdpc3RlciBhIExhdGVQYXRoIHRoYXQK
KyAgICAvLyBnZW5lcmF0ZXMgdGhlIHN0YWNrbWFwLiBTdXBlciBjcmF6eSBkdWRlIQorCisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRlKEFpcjo6SW5zdCYsIENDYWxsSGVscGVycyYsIEFp
cjo6R2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKworICAgIHZvaWQgZHVtcEltcGwoUHJp
bnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBEdW1wSW1wbChQcmludFN0
cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50U3BlY2lh
bF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZh
bHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQYXRjaHBvaW50VmFsdWU6On5QYXRj
aHBvaW50VmFsdWUoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRWYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrbWFwID0gIiwgc3Rh
Y2ttYXApOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50
VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNo
cG9pbnRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1BhdGNocG9pbnRW
YWx1ZV9oCisjZGVmaW5lIEIzUGF0Y2hwb2ludFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUGF0Y2hwb2ludFZhbHVlIDogcHVi
bGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNv
ZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBQYXRjaHBvaW50OyB9CisKKyAgICB+UGF0Y2hwb2ludFZh
bHVlKCk7CisKKyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQg
ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgUGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxk
cmVuKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4sIGNo
aWxkcmVuKQorICAgIHsKKyAgICB9Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1BhdGNocG9pbnRWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQaGFz
ZVNjb3BlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDb21tb24uaCIK
KyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsaWRhdGUuaCIKKyNpbmNs
dWRlIDx3dGYvRGF0YUxvZy5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29w
ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29uc3QgY2hhciogbmFtZSkKKyAgICA6IG1fcHJvY2Vk
dXJlKHByb2NlZHVyZSkKKyAgICAsIG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGREdW1w
SVJBdEVhY2hQaGFzZSgpKSB7CisgICAgICAgIGRhdGFMb2coIkIzIGFmdGVyICIsIHByb2NlZHVy
ZS5sYXN0UGhhc2VOYW1lKCksICIsIGJlZm9yZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRh
dGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhh
c2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0gdG9DU3RyaW5nKHByb2NlZHVyZSk7Cit9CisK
K1BoYXNlU2NvcGU6On5QaGFzZVNjb3BlKCkKK3sKKyAgICBtX3Byb2NlZHVyZS5zZXRMYXN0UGhh
c2VOYW1lKG1fbmFtZSk7CisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQaGFzZSgpKQor
ICAgICAgICB2YWxpZGF0ZShtX3Byb2NlZHVyZSwgbV9kdW1wQmVmb3JlLmRhdGEoKSk7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzUGhhc2VTY29wZV9oCisjZGVmaW5lIEIzUGhhc2VTY29wZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFL
RV9OT05DT1BZQUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKFByb2Nl
ZHVyZSYsIGNvbnN0IGNoYXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9l
cyB2YWxpZGF0aW9uCisKK3ByaXZhdGU6CisgICAgUHJvY2VkdXJlJiBtX3Byb2NlZHVyZTsKKyAg
ICBjb25zdCBjaGFyKiBtX25hbWU7CisgICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM1BoYXNlU2NvcGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxz
LmgiCisjaW5jbHVkZSAiQjNCbG9ja1dvcmtsaXN0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1Byb2NlZHVyZTo6UHJv
Y2VkdXJlKCkKKyAgICA6IG1fbGFzdFBoYXNlTmFtZSgiaW5pdGlhbCIpCit7Cit9CisKK1Byb2Nl
ZHVyZTo6flByb2NlZHVyZSgpCit7Cit9CisKK0Jhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxv
Y2soZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4g
YmxvY2sobmV3IEJhc2ljQmxvY2sobV9ibG9ja3Muc2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBC
YXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQoKTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RG
Ojptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBQcm9jZWR1cmU6
OnJlc2V0UmVhY2hhYmlsaXR5KCkKK3sKKyAgICBCMzo6cmVzZXRSZWFjaGFiaWxpdHkobV9ibG9j
a3MpOworfQorCit2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
eworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50
KGRlZXBEdW1wKGJsb2NrKSk7Cit9CisKK1ZlY3RvcjxCYXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpi
bG9ja3NJblByZU9yZGVyKCkKK3sKKyAgICByZXR1cm4gQjM6OmJsb2Nrc0luUHJlT3JkZXIoYXQo
MCkpOworfQorCitWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6YmxvY2tzSW5Qb3N0T3Jk
ZXIoKQoreworICAgIHJldHVybiBCMzo6YmxvY2tzSW5Qb3N0T3JkZXIoYXQoMCkpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNQcm9jZWR1cmVfaAorI2RlZmluZSBCM1Byb2NlZHVyZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiUHVyZU5hTi5oIgorI2luY2x1ZGUgPHd0Zi9CYWcu
aD4KKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3Iu
aD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7
CitjbGFzcyBWYWx1ZTsKKworY2xhc3MgUHJvY2VkdXJlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQcm9jZWR1cmUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUHJvY2VkdXJlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZB
VEUgflByb2NlZHVyZSgpOworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQmFzaWNCbG9jayogYWRk
QmxvY2soZG91YmxlIGZyZXF1ZW5jeSA9IFBOYU4pOworICAgIAorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIFZhbHVlVHlwZSogYWRk
KEFyZ3VtZW50cy4uLik7CisKKyAgICB2b2lkIHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIHVu
c2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7IH0KKyAgICBCYXNp
Y0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3NbaW5kZXhd
LmdldCgpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVi
bGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxw
dHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgaXRlcmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4
KQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgLCBt
X2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
QmFzaWNCbG9jayogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1f
cHJvY2VkdXJlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBv
cGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1f
aW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIEFTU0VSVChtX3Byb2NlZHVyZSA9PSBvdGhlci5tX3Byb2NlZHVyZSk7
CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9
CisgICAgICAgIAorICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7
CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVu
c2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX3By
b2NlZHVyZS0+c2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+YXQoaW5kZXgpKQorICAgICAgICAgICAg
ICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0KKworICAg
ICAgICBjb25zdCBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICB1bnNpZ25lZCBtX2lu
ZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0lu
UHJlT3JkZXIoKTsKKyAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVyKCk7
CisKKyAgICBjbGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFZh
bHVlc0NvbGxlY3Rpb24oY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgICAgICAgICA6
IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigp
CisgICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxscHRyKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpdGVyYXRvcihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSwgdW5zaWduZWQgaW5kZXgpCisg
ICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJvY2VkdXJlKQorICAgICAgICAgICAgICAg
ICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgVmFsdWUqIG9wZXJhdG9yKigpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5tX3ZhbHVlc1ttX2luZGV4XS5nZXQoKTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4g
KnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG1fcHJvY2VkdXJlID09IG90aGVyLm1fcHJvY2VkdXJlKTsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICBwcml2YXRlOgorCisgICAgICAgICAgICBjb25zdCBQcm9j
ZWR1cmUqIG1fcHJvY2VkdXJlOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICAg
ICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KG1fcHJvY2VkdXJlLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQor
CisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3Zh
bHVlcy5zaXplKCk7IH0KKyAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgVmFs
dWUqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsg
fQorICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJv
Y2VkdXJlOworICAgIH07CisKKyAgICBWYWx1ZXNDb2xsZWN0aW9uIHZhbHVlcygpIGNvbnN0IHsg
cmV0dXJuIFZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisKKyAgICAvLyBUaGUgbmFtZSBoYXMg
dG8gYmUgYSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9yeSBtYW5h
Z2VtZW50IGZvciB0aGUgc3RyaW5nLgorICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFtZShjb25zdCBj
aGFyKiBuYW1lKQorICAgIHsKKyAgICAgICAgbV9sYXN0UGhhc2VOYW1lID0gbmFtZTsKKyAgICB9
CisKKyAgICBjb25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
UGhhc2VOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNp
Y0Jsb2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+IG1f
dmFsdWVzOworICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzUHJvY2VkdXJlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1By
b2NlZHVyZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZUlubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQ
cm9jZWR1cmVJbmxpbmVzX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVJbmxpbmVzX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNsdWRlICJCM1By
b2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZVR5cGUqIFBy
b2NlZHVyZTo6YWRkKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCit7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFZhbHVlVHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShtX3ZhbHVlcy5zaXplKCksIGFyZ3Vt
ZW50cy4uLikpOworICAgIFZhbHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgbV92
YWx1ZXMuYXBwZW5kKFdURjo6bW92ZSh2YWx1ZSkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwor
I2VuZGlmIC8vIEIzUHJvY2VkdXJlSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUmVkdWNlU3RyZW5ndGguaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMu
aCIKKyNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgi
CisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGlu
ZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSB7CisK
K2NsYXNzIFJlZHVjZVN0cmVuZ3RoIHsKK3B1YmxpYzoKKyAgICBSZWR1Y2VTdHJlbmd0aChQcm9j
ZWR1cmUmIHByb2MpCisgICAgICAgIDogbV9wcm9jKHByb2MpCisgICAgICAgICwgbV9pbnNlcnRp
b25TZXQocHJvYykKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBydW4oKQorICAgIHsKKyAgICAg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgbV9jaGFu
Z2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3By
b2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CisgICAgICAgICAgICAgICAgbV9ibG9jayA9IGJsb2Nr
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGZvciAobV9pbmRleCA9IDA7IG1f
aW5kZXggPCBibG9jay0+c2l6ZSgpOyArK21faW5kZXgpCisgICAgICAgICAgICAgICAgICAgIHBy
b2Nlc3MoKTsKKyAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5leGVjdXRlKG1fYmxvY2sp
OworCisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIGFsc28gZG8gRENFLgor
ICAgICAgICAgICAgICAgIGJsb2NrLT5yZW1vdmVOb3BzKCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAKKyAgICAgICAgICAgIHJlc3VsdCB8PSBtX2NoYW5nZWQ7CisgICAgICAgIH0gd2hp
bGUgKG1fY2hhbmdlZCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIAorcHJp
dmF0ZToKKyAgICB2b2lkIHByb2Nlc3MoKQorICAgIHsKKyAgICAgICAgbV92YWx1ZSA9IG1fYmxv
Y2stPmF0KG1faW5kZXgpOworICAgICAgICBtX3ZhbHVlLT5wZXJmb3JtU3Vic3RpdHV0aW9uKCk7
CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKG1fdmFsdWUtPm9wY29kZSgpKSB7CisgICAgICAg
IGNhc2UgQWRkOgorICAgICAgICAgICAgaGFuZGxlQ29tbXV0YXRpdml0eSgpOworCisgICAgICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPm9wY29kZSgpID09IEFkZCAmJiBpc0ludChtX3Zh
bHVlLT50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgVmFsdWUqIG5ld1N1bSA9IG1fdmFsdWUt
PmNoaWxkKDEpLT5hZGRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgx
KSk7CisgICAgICAgICAgICAgICAgaWYgKG5ld1N1bSkgeworICAgICAgICAgICAgICAgICAgICBt
X2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdTdW0pOworICAgICAgICAgICAg
ICAgICAgICBtX3ZhbHVlLT5jaGlsZCgwKSA9IG1fdmFsdWUtPmNoaWxkKDApLT5jaGlsZCgwKTsK
KyAgICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMSkgPSBuZXdTdW07CisgICAgICAg
ICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNoaWxk
KDApLT5hZGRDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICBjYXNlIFN1YjoKKyAgICAgICAgICAgIGlmIChpc0ludChtX3Zh
bHVlLT50eXBlKCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKFZhbHVlKiBuZWdhdGVkQ29uc3Rh
bnQgPSBtX3ZhbHVlLT5jaGlsZCgxKS0+bmVnQ29uc3RhbnQobV9wcm9jKSkgeworICAgICAgICAg
ICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZWdhdGVkQ29u
c3RhbnQpOworICAgICAgICAgICAgICAgICAgICBWYWx1ZSogYWRkID0gbV9pbnNlcnRpb25TZXQu
aW5zZXJ0PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5kZXgsIEFkZCwgbV92
YWx1ZS0+b3JpZ2luKCksIG1fdmFsdWUtPmNoaWxkKDApLCBuZWdhdGVkQ29uc3RhbnQpOworICAg
ICAgICAgICAgICAgICAgICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGFkZCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXBsYWNlV2l0aE5ld1ZhbHVlKG1fdmFsdWUtPmNo
aWxkKDApLT5zdWJDb25zdGFudChtX3Byb2MsIG1fdmFsdWUtPmNoaWxkKDEpKSk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6
CisgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBj
YXNlIExvYWRGbG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoK
KyAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAg
IGNhc2UgU3RvcmU6IHsKKyAgICAgICAgICAgIFZhbHVlKiBhZGRyZXNzID0gbV92YWx1ZS0+Y2hp
bGRyZW4oKS5sYXN0KCk7CisgICAgICAgICAgICBNZW1vcnlWYWx1ZSogbWVtb3J5ID0gbV92YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisKKyAgICAgICAgICAgIGlmIChhZGRyZXNzLT5vcGNvZGUo
KSA9PSBBZGQgJiYgYWRkcmVzcy0+Y2hpbGQoMSktPmhhc0ludFB0cigpKSB7CisgICAgICAgICAg
ICAgICAgaW50cHRyX3Qgb2Zmc2V0ID0gYWRkcmVzcy0+Y2hpbGQoMSktPmFzSW50UHRyKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKCFzdW1PdmVyZmxvd3M8aW50cHRyX3Q+KG9mZnNldCwgbWVtb3J5
LT5vZmZzZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ICs9IG1lbW9yeS0+b2Zm
c2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc21hbGxPZmZzZXQgPSBzdGF0aWNf
Y2FzdDxpbnQzMl90PihvZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBpZiAoc21hbGxPZmZz
ZXQgPT0gb2Zmc2V0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzID0gbWVtb3J5
LT5jaGlsZHJlbigpLmxhc3QoKSA9IGFkZHJlc3MtPmNoaWxkKDApOworICAgICAgICAgICAgICAg
ICAgICAgICAgbWVtb3J5LT5zZXRPZmZzZXQoc21hbGxPZmZzZXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gVGhpcyBpcyBhIGZ1
biBjYW5vbmljYWxpemF0aW9uLiBJdCBwdXJlbHkgcmVncmVzc2VzIG5haXZlbHkgZ2VuZXJhdGVk
IGNvZGUuIFdlIHJlbHkKKyAgICAgICAgICAgIC8vIG9uIGNvbnN0YW50IG1hdGVyaWFsaXphdGlv
biB0byBiZSBzbWFydCBlbm91Z2ggdG8gbWF0ZXJpYWxpemUgdGhpcyBjb25zdGFudCB0aGUgc21h
cnQKKyAgICAgICAgICAgIC8vIHdheS4gV2Ugd2FudCB0aGlzIGNhbm9uaWNhbGl6YXRpb24gYmVj
YXVzZSB3ZSB3YW50IHRvIGtub3cgaWYgdHdvIG1lbW9yeSBhY2Nlc3NlcyBzZWUKKyAgICAgICAg
ICAgIC8vIHRoZSBzYW1lIGFkZHJlc3MuCisgICAgICAgICAgICBpZiAobWVtb3J5LT5vZmZzZXQo
KSkgeworICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogbmV3QWRkcmVzcyA9IGFkZHJlc3MtPmFk
ZENvbnN0YW50KG1fcHJvYywgbWVtb3J5LT5vZmZzZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3QWRkcmVzcyk7CisgICAg
ICAgICAgICAgICAgICAgIGFkZHJlc3MgPSBtZW1vcnktPmNoaWxkcmVuKCkubGFzdCgpID0gbmV3
QWRkcmVzczsKKyAgICAgICAgICAgICAgICAgICAgbWVtb3J5LT5zZXRPZmZzZXQoMCk7CisgICAg
ICAgICAgICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIHZvaWQgaGFuZGxlQ29tbXV0YXRpdml0eSgpCisgICAgeworICAg
ICAgICBpZiAobV92YWx1ZS0+Y2hpbGQoMCktPmlzQ29uc3RhbnQoKSAmJiAhbV92YWx1ZS0+Y2hp
bGQoMSktPmlzQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgc3RkOjpzd2FwKG1fdmFsdWUtPmNo
aWxkKDApLCBtX3ZhbHVlLT5jaGlsZCgxKSk7CisgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVl
OworICAgICAgICB9CisgICAgfQorCisgICAgdm9pZCByZXBsYWNlV2l0aE5ld1ZhbHVlKFZhbHVl
KiBuZXdWYWx1ZSkKKyAgICB7CisgICAgICAgIGlmICghbmV3VmFsdWUpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld1Zh
bHVlKTsKKyAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShuZXdWYWx1ZSk7Cisg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgfQorCisgICAgUHJvY2VkdXJlJiBtX3Byb2M7
CisgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OworICAgIEJhc2ljQmxvY2sqIG1fYmxv
Y2s7CisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICBWYWx1ZSogbV92YWx1ZTsKKyAgICBib29s
IG1fY2hhbmdlZDsKK307CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitib29sIHJlZHVj
ZVN0cmVuZ3RoKFByb2NlZHVyZSYgcHJvYykKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
cHJvYywgInJlZHVjZVN0cmVuZ3RoIik7CisgICAgUmVkdWNlU3RyZW5ndGggcmVkdWNlU3RyZW5n
dGgocHJvYyk7CisgICAgcmV0dXJuIHJlZHVjZVN0cmVuZ3RoLnJ1bigpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzUmVkdWNlU3RyZW5ndGhfaAorI2RlZmluZSBCM1JlZHVj
ZVN0cmVuZ3RoX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKKy8vIERvZXMgc3RyZW5ndGggcmVkdWN0
aW9uLCBjb25zdGFudCBmb2xkaW5nLCBhbmQgY2Fub25pY2FsaXphdGlvbi4gSW4gdGhlIGZ1dHVy
ZSB3ZSBtYXkgYWxzbyBoYXZlIGl0CisvLyBkbyBDU0UuCisKK2Jvb2wgcmVkdWNlU3RyZW5ndGgo
UHJvY2VkdXJlJik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUmVkdWNlU3RyZW5ndGhfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90
S2luZC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVh
bS5oPgorCituYW1lc3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCit7
CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6Cisg
ICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
YWNrU2xvdEtpbmQ6OkFub255bW91czoKKyAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xvdEtpbmRfaAorI2RlZmluZSBCM1N0
YWNrU2xvdEtpbmRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgU3RhY2tTbG90S2luZCA6IHVpbnQ4X3QgeworICAg
IC8vIEEgbG9ja2VkIHN0YWNrIHNsb3QgbmVlZHMgdG8gYmUga2VwdCBkaXNqb2ludCBmcm9tIGFs
bCBvdGhlcnMgYmVjYXVzZSB3ZSBpbnRlbmQgdG8gZXNjYXBlCisgICAgLy8gaXQgZXZlbiBpZiB0
aGF0J3Mgbm90IG9idmlvdXMuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBydW50aW1lIHRha2VzIHRo
ZSBhZGRyZXNzIG9mIGEgc3RhY2sKKyAgICAvLyBzbG90LgorICAgIExvY2tlZCwKKworICAgIC8v
IFRoZXNlIHN0YWNrIHNsb3RzIGNvdWxkIHNoYXJlIHNwYWNlIHdpdGggb3RoZXIgc3RhY2sgc2xv
dHMsIHByb3ZpZGVkIHRoYXQgdGhleSBhcmVuJ3QgbGl2ZQorICAgIC8vIGF0IHRoZSBzYW1lIHRp
bWUuIFRoZSBjb21waWxlciBzdGlsbCBoYXMgdG8gZG8gZXNjYXBlIGFuYWx5c2lzLCBzaW5jZSB0
aGVzZSBjYW4gYmUgZXNjYXBlZAorICAgIC8vIGV4cGxpY2l0bHkgaW4gSVIuCisgICAgQW5vbnlt
b3VzCisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1l
YW5zIHRoYXQgdGhlIHN0YWNrIHNsb3Qgd2lsbCBiZSByZWFkIGFzeW5jaHJvbm91c2x5CisgICAg
Ly8gYXMgd2l0aCBMb2NrZWQsIGJ1dCBuZXZlciB3cml0dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBU
aGVuLCBBaXIgY291bGQgb3B0aW1pemUgc3BpbGxpbmcgYW5kCisgICAgLy8gZmlsbGluZyBieSB0
cmFja2luZyB3aGV0aGVyIHRoZSB2YWx1ZSBoYWQgYmVlbiBzdG9yZWQgdG8gYSByZWFkLW9ubHkg
bG9ja2VkIHNsb3QuIElmIGl0IGhhZCwKKyAgICAvLyB0aGVuIHdlIGNhbiByZWZpbGwgZnJvbSB0
aGF0IHNsb3QuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDU4NworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6U3RhY2tTbG90S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90S2luZF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdFZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNTdGFja1Nsb3RWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK1N0YWNrU2xvdFZhbHVlOjp+U3RhY2tTbG90VmFsdWUoKQor
eworfQorCit2b2lkIFN0YWNrU2xvdFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBraW5k
ID0gIiwgbV9raW5kKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3RhY2tTbG90VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDg0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Ns
b3RWYWx1ZV9oCisjZGVmaW5lIEIzU3RhY2tTbG90VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSBBaXIgeworY2xh
c3MgU3RhY2tTbG90OworfSAvLyBuYW1lc3BhY2UgQWlyCisKK2NsYXNzIFN0YWNrU2xvdFZhbHVl
IDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29k
ZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTdGFja1Nsb3Q7IH0KKworICAgIH5TdGFja1Ns
b3RWYWx1ZSgpOworCisgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5
dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5k
OyB9CisKKyAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlv
bi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3RzLiBVc2UgdGhlCisgICAgLy8g
c2V0IG1ldGhvZCB0byBkbyB0aGF0LgorICAgIGludHB0cl90IG9mZnNldEZyb21GUCgpIGNvbnN0
IHsgcmV0dXJuIG1fb2Zmc2V0RnJvbUZQOyB9CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBpcyBt
ZWFuaW5nbGVzcyB1bmxlc3MgdGhlIHN0YWNrIHNsb3QgaXMgTG9ja2VkLgorICAgIHZvaWQgc2V0
T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQorICAgIHsKKyAgICAgICAgbV9vZmZzZXRGcm9t
RlAgPSB2YWx1ZTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEFp
cjo6U3RhY2tTbG90OworICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTdGFja1Ns
b3RWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgdW5zaWduZWQgYnl0ZVNpemUs
IFN0YWNrU2xvdEtpbmQga2luZCkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgU3RhY2tTbG90LCBw
b2ludGVyVHlwZSgpLCBvcmlnaW4pCisgICAgICAgICwgbV9ieXRlU2l6ZShieXRlU2l6ZSkKKyAg
ICAgICAgLCBtX2tpbmQoa2luZCkKKyAgICAgICAgLCBtX29mZnNldEZyb21GUCgwKQorICAgIHsK
KyAgICB9CisKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIFN0YWNrU2xvdEtpbmQgbV9r
aW5kOworICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFj
a1Nsb3RWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNTdGFja21hcC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9MaXN0
RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3RhY2ttYXA6OlN0
YWNrbWFwKCkKK3sKK30KKworU3RhY2ttYXA6On5TdGFja21hcCgpCit7Cit9CisKK3ZvaWQgU3Rh
Y2ttYXA6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoCisg
ICAgICAgICJ7cmVwcyA9ICIsIGxpc3REdW1wKG1fcmVwcyksICIsIGdlbmVyYXRvciA9ICIsIFJh
d1BvaW50ZXIobV9nZW5lcmF0b3IuZ2V0KCkpLAorICAgICAgICAiLCBjbG9iYmVyZWQgPSAiLCBt
X2Nsb2JiZXJlZCwgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycywgIn0iKTsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTE1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcF9oCisjZGVmaW5lIEIzU3RhY2ttYXBfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKyNpbmNsdWRlICJD
Q2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9T
aGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBD
aGVja1NwZWNpYWw7CitjbGFzcyBTdGFja21hcFNwZWNpYWw7CitjbGFzcyBWYWx1ZTsKKworY2xh
c3MgU3RhY2ttYXAgeworcHVibGljOgorICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAg
ICAgICAgLy8gVGhpcyBpcyB0aGUgVmFsdWUgY29udGFpbmluZyB0aGUgc3RhY2ttYXAuCisgICAg
ICAgIFZhbHVlKiB2YWx1ZTsKKworICAgICAgICAvLyBUaGlzIGlzIHRoZSBzdGFja21hcC4KKyAg
ICAgICAgU3RhY2ttYXAqIHN0YWNrbWFwOworCisgICAgICAgIC8vIFRoaXMgdGVsbHMgeW91IHRo
ZSBhY3R1YWwgdmFsdWUgcmVwcmVzZW50YXRpb25zIHRoYXQgd2VyZSBjaG9zZW4uCisgICAgICAg
IFZlY3RvcjxWYWx1ZVJlcD4gcmVwczsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0aGUg
cmVnaXN0ZXJzIHRoYXQgd2VyZSB1c2VkLgorICAgICAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0
ZXJzOworICAgIH07CisgICAgCisgICAgdHlwZWRlZiB2b2lkIEdlbmVyYXRvckZ1bmN0aW9uKEND
YWxsSGVscGVycyYsIGNvbnN0IEdlbmVyYXRpb25QYXJhbXMmKTsKKyAgICB0eXBlZGVmIFNoYXJl
ZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+IEdlbmVyYXRvcjsKKyAgICAKKyAgICBTdGFja21hcCgp
OworICAgIH5TdGFja21hcCgpOworCisgICAgLy8gQ29uc3RyYWluIGFuIGFyZ3VtZW50IHRvIHRo
ZSBWYWx1ZSB0aGF0IHVzZXMgdGhpcyBTdGFja21hcC4gSW4gY2FzZSBvZiBhIFBhdGNocG9pbnQg
dGhhdAorICAgIC8vIHJldHVybnMgYSB2YWx1ZSwgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBy
ZXN1bHQgdmFsdWUuIEluIGFsbCBvdGhlciBjYXNlcywgaW5kZXggemVybyByZWZlcnMKKyAgICAv
LyB0byB0aGUgZmlyc3QgYXJndW1lbnQgdG8gdGhhdCBWYWx1ZSwgZXZlbiBpZiB0aGF0IGFyZ3Vt
ZW50IGlzIG5vdCBjb25zdHJhaW5hYmxlLiBGb3IgZXhhbXBsZSwKKyAgICAvLyBpbiBhIENoZWNr
QWRkIHZhbHVlLCBpdCB3b3VsZCBiZSBhbiBlcnJvciB0byBjb25zdHJhaW4gaW5kaWNlcyAwIGFu
ZCAxLiBJbiBhIENoZWNrIHZhbHVlLCBpdAorICAgIC8vIHdvdWxkIGJlIGFuIGVycm9yIHRvIGNv
bnN0cmFpbiBpbmRleCAwLiBCdXQsIHdoZW4gdGhlIGdlbmVyYXRpb24gY2FsbGJhY2sgaXMgY2Fs
bGVkLCB5b3UgY2FuCisgICAgLy8gZGVwZW5kIG9uIHRoZSByZXBzIGZvciB0aG9zZSBpbmRpY2Vz
IGJlaW5nIGZpbGxlZCBpbi4KKyAgICB2b2lkIGNvbnN0cmFpbih1bnNpZ25lZCBpbmRleCwgY29u
c3QgVmFsdWVSZXAmIHJlcCkKKyAgICB7CisgICAgICAgIGlmIChpbmRleCArIDEgPj0gbV9yZXBz
LnNpemUoKSkKKyAgICAgICAgICAgIG1fcmVwcy5ncm93KGluZGV4ICsgMSk7CisgICAgICAgIG1f
cmVwc1tpbmRleF0gPSByZXA7CisgICAgfQorCisgICAgY29uc3QgVmVjdG9yPFZhbHVlUmVwPiYg
cmVwcygpIGNvbnN0IHsgcmV0dXJuIG1fcmVwczsgfQorCisgICAgdm9pZCBjbG9iYmVyKGNvbnN0
IFJlZ2lzdGVyU2V0JiBzZXQpCisgICAgeworICAgICAgICBtX2Nsb2JiZXJlZC5tZXJnZShzZXQp
OworICAgIH0KKworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBjbG9iYmVyZWQoKSBjb25zdCB7IHJl
dHVybiBtX2Nsb2JiZXJlZDsgfQorCisgICAgdm9pZCBzZXRHZW5lcmF0b3IoUmVmUHRyPEdlbmVy
YXRvcj4gZ2VuZXJhdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0b3IgPSBnZW5lcmF0b3I7
CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIHNldEdl
bmVyYXRvcihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgbV9nZW5lcmF0
b3IgPSBjcmVhdGVTaGFyZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9
CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICAKK3ByaXZhdGU6Cisg
ICAgZnJpZW5kIGNsYXNzIENoZWNrU3BlY2lhbDsKKyAgICBmcmllbmQgY2xhc3MgUGF0Y2hwb2lu
dFNwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNzIFN0YWNrbWFwU3BlY2lhbDsKKyAgICAKKyAgICBW
ZWN0b3I8VmFsdWVSZXA+IG1fcmVwczsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRv
cjsKKyAgICBSZWdpc3RlclNldCBtX2Nsb2JiZXJlZDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRS
ZWdpc3RlcnM7IC8vIFN0YWNrbWFwcyBjb3VsZCBiZSBmdXJ0aGVyIGR1cGxpY2F0ZWQgYnkgQWly
LCBidXQgdGhhdCdzIHVubGlrZWx5LCBzbyB3ZSBqdXN0IG1lcmdlIHRoZSB1c2VkIHJlZ2lzdGVy
cyBzZXRzIGlmIHRoYXQgd2VyZSB0byBoYXBwZW4uCit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrbWFw
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFsLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNp
YWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIK
KyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKwordXNpbmcgbmFtZXNwYWNlIEFpcjsKKworU3RhY2ttYXBTcGVjaWFsOjpTdGFja21h
cFNwZWNpYWwoKQoreworfQorCitTdGFja21hcFNwZWNpYWw6On5TdGFja21hcFNwZWNpYWwoKQor
eworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiBp
bnN0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycykKK3sKKyAgICBWYWx1ZSogdmFs
dWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2tt
YXAoKTsKKworICAgIC8vIEZJWE1FOiBJZiB0aGUgSW5zdCB0aGF0IHVzZXMgdGhlIFN0YWNrbWFw
U3BlY2lhbCBnZXRzIGR1cGxpY2F0ZWQsIHRoZW4gd2UgZW5kIHVwIG1lcmdpbmcgdXNlZAorICAg
IC8vIHJlZ2lzdGVyIHNldHMgZnJvbSBtdWx0aXBsZSBwbGFjZXMuIFRoaXMgY3VycmVudGx5IHdv
bid0IGhhcHBlbiBzaW5jZSBBaXIgZG9lc24ndCBoYXZlIHRhaWxkdXAKKyAgICAvLyBvciB0aGlu
Z3MgbGlrZSB0aGF0LiBCdXQgbWF5YmUgZXZlbnR1YWxseSBpdCBjb3VsZCBiZSBhIHByb2JsZW0u
CisgICAgc3RhY2ttYXAtPm1fdXNlZFJlZ2lzdGVycy5tZXJnZSh1c2VkUmVnaXN0ZXJzKTsKK30K
KworY29uc3QgUmVnaXN0ZXJTZXQmIFN0YWNrbWFwU3BlY2lhbDo6ZXh0cmFDbG9iYmVyZWRSZWdz
KEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICByZXR1cm4gc3RhY2tt
YXAtPmNsb2JiZXJlZCgpOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6Zm9yRWFjaEFyZ0lt
cGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFp
ckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRhPEluc3Q6OkVhY2hBcmdD
YWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOwor
CisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVkLgorICAg
IEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAgICBBU1NF
UlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOworICAgIEFT
U0VSVChpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgPT0gdmFsdWUtPmNoaWxk
cmVuKCkuc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJncyk7CisgICAgCisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kpIHsK
KyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRCM0FyZ3NdOworICAg
ICAgICBWYWx1ZSogY2hpbGQgPSB2YWx1ZS0+Y2hpbGQoaSArIG51bUlnbm9yZWRBaXJBcmdzKTsK
KworICAgICAgICBjYWxsYmFjayhhcmcsIEFyZzo6VXNlLCBBcmc6OnR5cGVGb3JCM1R5cGUoY2hp
bGQtPnR5cGUoKSkpOworICAgIH0KK30KKworYm9vbCBTdGFja21hcFNwZWNpYWw6OmlzVmFsaWRJ
bXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRB
aXJBcmdzLAorICAgIEluc3QmIGluc3QpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmln
aW47CisKKyAgICAvLyBDaGVjayB0aGF0IGluc2FuZSB0aGluZ3MgaGF2ZSBub3QgaGFwcGVuZWQu
CisgICAgQVNTRVJUKGluc3QuYXJncy5zaXplKCkgPj0gbnVtSWdub3JlZEFpckFyZ3MpOworICAg
IEFTU0VSVCh2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkgPj0gbnVtSWdub3JlZEIzQXJncyk7CisK
KyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIEFTU0VS
VChzdGFja21hcCk7CisKKyAgICAvLyBGb3IgdGhlIEluc3QgdG8gYmUgdmFsaWQsIGl0IG5lZWRz
IHRvIGhhdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBhcmd1bWVudHMuCisgICAgaWYgKGluc3QuYXJn
cy5zaXplKCkgLSBudW1JZ25vcmVkQWlyQXJncyAhPSB2YWx1ZS0+Y2hpbGRyZW4oKS5zaXplKCkg
LSBudW1JZ25vcmVkQjNBcmdzKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBSZWdh
cmRsZXNzIG9mIGNvbnN0cmFpbnRzLCBzdGFja21hcHMgaGF2ZSBzb21lIGJhc2ljIHJlcXVpcmVt
ZW50cyBmb3IgdGhlaXIgYXJndW1lbnRzLiBGb3IKKyAgICAvLyBleGFtcGxlLCB5b3UgY2FuJ3Qg
aGF2ZSBhIG5vbi1GUC1vZmZzZXQgYWRkcmVzcy4gVGhpcyB2ZXJpZmllcyB0aG9zZSBjb25kaXRp
b25zIGFzIHdlbGwgYXMgdGhlCisgICAgLy8gYXJndW1lbnQgdHlwZXMuCisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IGluc3QuYXJncy5zaXplKCkgLSBudW1JZ25vcmVkQjNBcmdzOyArK2kp
IHsKKyAgICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQjNB
cmdzKTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFyZ3NbaSArIG51bUlnbm9yZWRBaXJBcmdz
XTsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgICAgICBjYXNl
IEFyZzo6VG1wOgorICAgICAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBjYXNlIEFyZzo6SW1t
NjQ6CisgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6
CisgICAgICAgICAgICBicmVhazsgLy8gT0sKKyAgICAgICAgY2FzZSBBcmc6OkFkZHI6CisgICAg
ICAgICAgICBpZiAoYXJnLmJhc2UoKSAhPSBUbXAoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIp
CisgICAgICAgICAgICAgICAgJiYgYXJnLmJhc2UoKSAhPSBUbXAoTWFjcm9Bc3NlbWJsZXI6OnN0
YWNrUG9pbnRlclJlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBBcmc6OnR5
cGVGb3JCM1R5cGUoY2hpbGQtPnR5cGUoKSk7CisKKyAgICAgICAgaWYgKCFhcmcuaXNUeXBlKHR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIC8vIFRoZSBudW1i
ZXIgb2YgY29uc3RyYWludHMgaGFzIHRvIGJlIG5vIGdyZWF0ZXIgdGhhbiB0aGUgbnVtYmVyIG9m
IEIzIGNoaWxkcmVuLgorICAgIEFTU0VSVChzdGFja21hcC0+bV9yZXBzLnNpemUoKSA8PSB2YWx1
ZS0+Y2hpbGRyZW4oKS5zaXplKCkpOworCisgICAgLy8gVmVyaWZ5IGFueSBleHBsaWNpdGx5IHN1
cHBsaWVkIGNvbnN0cmFpbnRzLgorICAgIGZvciAodW5zaWduZWQgaSA9IG51bUlnbm9yZWRCM0Fy
Z3M7IGkgPCBzdGFja21hcC0+bV9yZXBzLnNpemUoKTsgKytpKSB7CisgICAgICAgIFZhbHVlUmVw
JiByZXAgPSBzdGFja21hcC0+bV9yZXBzW2ldOworICAgICAgICBBcmcmIGFyZyA9IGluc3QuYXJn
c1tpIC0gbnVtSWdub3JlZEIzQXJncyArIG51bUlnbm9yZWRBaXJBcmdzXTsKKworICAgICAgICBz
d2l0Y2ggKHJlcC5raW5kKCkpIHsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6QW55OgorICAgICAg
ICAgICAgLy8gV2UgYWxyZWFkeSB2ZXJpZmllZCB0aGlzIGFib3ZlLgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlNvbWVSZWdpc3RlcjoKKyAgICAgICAgICAgIGlm
ICghYXJnLmlzVG1wKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlJlZ2lzdGVyOgorICAgICAgICAgICAg
aWYgKGFyZyAhPSBUbXAocmVwLnJlZygpKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2s6CisgICAg
ICAgICAgICAvLyBUaGlzIGlzIG5vdCBhIHZhbGlkIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBWYWx1ZVJlcDo6U3RhY2tBcmd1bWVudDoKKyAgICAgICAgICAgIGlmIChhcmcgIT0g
QXJnOjpjYWxsQXJnKHJlcC5vZmZzZXRGcm9tU1AoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkNvbnN0
YW50OgorICAgICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRh
dGlvbi4KKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBTdGFj
a21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNB
cmdzLCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICBJbnN0JiBpbnN0LCB1bnNpZ25l
ZCBhcmdJbmRleCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsKKyAgICBTdGFj
a21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKworICAgIHVuc2lnbmVkIHN0YWNr
bWFwQXJnSW5kZXggPSBhcmdJbmRleCAtIG51bUlnbm9yZWRBaXJBcmdzICsgbnVtSWdub3JlZEIz
QXJnczsKKworICAgIGlmIChzdGFja21hcEFyZ0luZGV4ID49IHN0YWNrbWFwLT5tX3JlcHMuc2l6
ZSgpKSB7CisgICAgICAgIC8vIFRoaXMgbWVhbnMgdGhhdCB0aGVyZSB3YXMgbm8gY29uc3RyYWlu
dC4KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIC8vIFdlIG9ubHkgYWRt
aXQgc3RhY2sgZm9yIEFueSdzLCBzaW5jZSBTdGFjayBpcyBub3QgYSB2YWxpZCBpbnB1dCBjb25z
dHJhaW50LCBhbmQgU3RhY2tBcmd1bWVudAorICAgIC8vIHRyYW5zbGF0ZXMgdG8gYSBDYWxsQXJn
IGluIEFpci4KKyAgICBpZiAoc3RhY2ttYXAtPm1fcmVwc1tzdGFja21hcEFyZ0luZGV4XS5raW5k
KCkgPT0gVmFsdWVSZXA6OkFueSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3ZvaWQgU3RhY2ttYXBTcGVjaWFsOjphcHBlbmRSZXBzSW1wbCgKKyAgICBH
ZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCwgdW5zaWduZWQgbnVtSWdub3JlZEFyZ3MsIEluc3Qm
IGluc3QsIFZlY3RvcjxWYWx1ZVJlcD4mIHJlc3VsdCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSBudW1JZ25vcmVkQXJnczsgaSA8IGluc3QuYXJncy5zaXplKCk7ICsraSkKKyAgICAgICAgcmVz
dWx0LmFwcGVuZChyZXBGb3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzW2ldKSk7Cit9CisK
K1ZhbHVlUmVwIFN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKENvZGUmIGNvZGUsIGNvbnN0IEFy
ZyYgYXJnKQoreworICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpUbXA6
CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6cmVnKGFyZy5yZWcoKSk7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgQXJnOjpJbW06CisgICAgY2FzZSBBcmc6OkltbTY0OgorICAgICAgICByZXR1
cm4gVmFsdWVSZXA6OmNvbnN0YW50KGFyZy52YWx1ZSgpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBBcmc6OkFkZHI6CisgICAgICAgIGlmIChhcmcuYmFzZSgpID09IFRtcChHUFJJbmZvOjpj
YWxsRnJhbWVSZWdpc3RlcikpCisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnN0YWNrKGFy
Zy5vZmZzZXQoKSk7CisgICAgICAgIEFTU0VSVChhcmcuYmFzZSgpID09IFRtcChNYWNyb0Fzc2Vt
Ymxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpz
dGFjayhhcmcub2Zmc2V0KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICBkZWZhdWx0OgorICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwKCk7Cisg
ICAgfQorfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNpYWwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFNwZWNp
YWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFw
U3BlY2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0YWNrbWFwU3BlY2lh
bF9oCisjZGVmaW5lIEIzU3RhY2ttYXBTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7
IH0KKworLy8gVGhpcyBpcyBhIGJhc2UgY2xhc3MgZm9yIHNwZWNpYWxzIHRoYXQgaGF2ZSBzdGFj
a21hcHMuIE5vdGUgdGhhdCBpdCBjYW4gZmluZCB0aGUgU3RhY2ttYXAgYnkKKy8vIGFza2luZyBm
b3IgdGhlIEluc3QncyBvcmlnaW4uIEhlbmNlLCB0aGVzZSBvYmplY3RzIGRvbid0IG5lZWQgdG8g
ZXZlbiBob2xkIGEgcmVmZXJlbmNlIHRvIHRoZQorLy8gU3RhY2ttYXAuCisKK2NsYXNzIFN0YWNr
bWFwU3BlY2lhbCA6IHB1YmxpYyBBaXI6OlNwZWNpYWwgeworcHVibGljOgorICAgIFN0YWNrbWFw
U3BlY2lhbCgpOworICAgIHZpcnR1YWwgflN0YWNrbWFwU3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEFpcjo6SW5zdCYsIGNvbnN0IFJlZ2lzdGVy
U2V0Jikgb3ZlcnJpZGU7CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVn
cyhBaXI6Okluc3QmKSBvdmVycmlkZTsKKworICAgIC8vIE5vdGUgdGhhdCB0aGlzIGRvZXMgbm90
IG92ZXJyaWRlIGdlbmVyYXRlKCkgb3IgZHVtcEltcGwoKS9kZWVwRHVtcEltcGwoKS4gV2UgaGF2
ZSBtYW55IHNvbWUKKyAgICAvLyBzdWJjbGFzc2VzIHRoYXQgaW1wbGVtZW50IHRoYXQuCisKKyAg
ICB2b2lkIGZvckVhY2hBcmdJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdz
LCB1bnNpZ25lZCBudW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0JiwgY29uc3Qg
U2NvcGVkTGFtYmRhPEFpcjo6SW5zdDo6RWFjaEFyZ0NhbGxiYWNrPiYpOworICAgIGJvb2wgaXNW
YWxpZEltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51
bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmKTsKKyAgICBib29sIGFkbWl0c1N0
YWNrSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJncywgdW5zaWduZWQgbnVt
SWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIHVuc2lnbmVkIGFyZ0luZGV4KTsK
KworICAgIC8vIEFwcGVuZHMgdGhlIHJlcHMgZm9yIHRoZSBJbnN0J3MgYXJncywgc3RhcnRpbmcg
d2l0aCBudW1JZ25vcmVkQXJncywgdG8gdGhlIGdpdmVuIHZlY3Rvci4KKyAgICB2b2lkIGFwcGVu
ZFJlcHNJbXBsKEFpcjo6R2VuZXJhdGlvbkNvbnRleHQmLCB1bnNpZ25lZCBudW1JZ25vcmVkQXJn
cywgQWlyOjpJbnN0JiwgVmVjdG9yPFZhbHVlUmVwPiYpOworCisgICAgc3RhdGljIFZhbHVlUmVw
IHJlcEZvckFyZyhBaXI6OkNvZGUmLCBjb25zdCBBaXI6OkFyZyYpOworfTsKKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QjNTdGFja21hcFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
dWNjZXNzb3JDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTAyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgQjNTdWNjZXNzb3JDb2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNTdWNjZXNzb3JD
b2xsZWN0aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCisvLyBUaGlzIGlzIGEgZ2VuZXJpYyB3cmFwcGVyIGFyb3VuZCBsaXN0cyBv
ZiBmcmVxdWVudGVkIGJsb2Nrcywgd2hpY2ggZ2l2ZXMgeW91IGp1c3QgdGhlIGJsb2Nrcy4KKwor
dGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaywgdHlwZW5hbWUgU3VjY2Vzc29yTGlzdD4KK2Ns
YXNzIFN1Y2Nlc3NvckNvbGxlY3Rpb24geworcHVibGljOgorICAgIFN1Y2Nlc3NvckNvbGxlY3Rp
b24oU3VjY2Vzc29yTGlzdCYgbGlzdCkKKyAgICAgICAgOiBtX2xpc3QobGlzdCkKKyAgICB7Cisg
ICAgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX2xpc3Quc2l6ZSgpOyB9
CisgICAgQmFzaWNCbG9jayogYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX2xpc3Rb
aW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiYgYXQoc2l6ZV90IGluZGV4KSB7IHJl
dHVybiBtX2xpc3RbaW5kZXhdLmJsb2NrKCk7IH0KKyAgICBCYXNpY0Jsb2NrKiBvcGVyYXRvcltd
KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisgICAgQmFzaWNCbG9j
ayomIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAg
ICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoU3VjY2Vzc29yQ29sbGVj
dGlvbiYgY29sbGVjdGlvbiwgc2l6ZV90IGluZGV4KQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rp
b24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIEJhc2ljQmxvY2sqJiBvcGVyYXRvciooKSBjb25zdAorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAg
ICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9pbmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fY29sbGVjdGlvbiA9PSBvdGhlci5tX2Nv
bGxlY3Rpb24pOworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3Ro
ZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVy
KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgU3VjY2Vzc29yQ29sbGVjdGlv
biogbV9jb2xsZWN0aW9uOworICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAg
aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVy
YXRvciBlbmQoKSB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCitwcml2YXRl
OgorICAgIFN1Y2Nlc3Nvckxpc3QmIG1fbGlzdDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3VjY2Vzc29y
Q29sbGVjdGlvbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaENh
c2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
Q2FzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiQjNTd2l0Y2hDYXNlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAi
QjNCYXNpY0Jsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lk
IFN3aXRjaENhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQobV9jYXNlVmFsdWUsICItPiIsIG1fdGFyZ2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3dpdGNoQ2FzZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaENhc2UuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNT
d2l0Y2hDYXNlX2gKKyNkZWZpbmUgQjNTd2l0Y2hDYXNlX2gKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJCM0ZyZXF1ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaENhc2UgeworcHVibGljOgorICAgIFN3aXRj
aENhc2UoKQorICAgIHsKKyAgICB9CisKKyAgICBTd2l0Y2hDYXNlKGludDY0X3QgY2FzZVZhbHVl
LCBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRhcmdldCkKKyAgICAgICAgOiBtX2Nhc2VWYWx1ZShj
YXNlVmFsdWUpCisgICAgICAgICwgbV90YXJnZXQodGFyZ2V0KQorICAgIHsKKyAgICB9CisKKyAg
ICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3RhcmdldDsgfQor
CisgICAgaW50NjRfdCBjYXNlVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2Nhc2VWYWx1ZTsgfQor
ICAgIEZyZXF1ZW50ZWRCbG9jayB0YXJnZXQoKSBjb25zdCB7IHJldHVybiBtX3RhcmdldDsgfQor
ICAgIEJhc2ljQmxvY2sqIHRhcmdldEJsb2NrKCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQuYmxv
Y2soKTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworCitwcml2
YXRlOgorICAgIGludDY0X3QgbV9jYXNlVmFsdWU7CisgICAgRnJlcXVlbnRlZEJsb2NrIG1fdGFy
Z2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNTd2l0Y2hDYXNlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N3aXRjaFZhbHVlLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSA8d3Rm
L0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitTd2l0Y2hW
YWx1ZTo6flN3aXRjaFZhbHVlKCkKK3sKK30KKworU3dpdGNoQ2FzZSBTd2l0Y2hWYWx1ZTo6cmVt
b3ZlQ2FzZSh1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBGcmVxdWVudGVkQmxvY2sgcmVzdWx0Qmxv
Y2sgPSBtX3N1Y2Nlc3NvcnNbaW5kZXhdOworICAgIGludDY0X3QgcmVzdWx0VmFsdWUgPSBtX3Zh
bHVlc1tpbmRleF07CisgICAgbV9zdWNjZXNzb3JzW2luZGV4XSA9IG1fc3VjY2Vzc29ycy5sYXN0
KCk7CisgICAgbV9zdWNjZXNzb3JzLnJlbW92ZUxhc3QoKTsKKyAgICBtX3ZhbHVlc1tpbmRleF0g
PSBtX3ZhbHVlcy5sYXN0KCk7CisgICAgbV92YWx1ZXMucmVtb3ZlTGFzdCgpOworICAgIHJldHVy
biBTd2l0Y2hDYXNlKHJlc3VsdFZhbHVlLCByZXN1bHRCbG9jayk7Cit9CisKK3ZvaWQgU3dpdGNo
VmFsdWU6OmFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYgc3dpdGNoQ2FzZSkKK3sKKyAgICBt
X3N1Y2Nlc3NvcnMuYXBwZW5kKG1fc3VjY2Vzc29ycy5sYXN0KCkpOworICAgIG1fc3VjY2Vzc29y
c1ttX3N1Y2Nlc3NvcnMuc2l6ZSgpIC0gMl0gPSBzd2l0Y2hDYXNlLnRhcmdldCgpOworICAgIG1f
dmFsdWVzLmFwcGVuZChzd2l0Y2hDYXNlLmNhc2VWYWx1ZSgpKTsKK30KKwordm9pZCBTd2l0Y2hW
YWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICAvLyBUaGlzIGRl
c3RydWN0aXZlbHkgb3ZlcnJpZGVzIENvbnRyb2xWYWx1ZSdzIGR1bXBNZXRhKCkuCisgICAgb3V0
LnByaW50KGxpc3REdW1wKCp0aGlzKSwgIiwgZmFsbFRocm91Z2ggPSAiLCBmYWxsVGhyb3VnaCgp
KTsKK30KKworU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4g
b3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJv
bFZhbHVlKGluZGV4LCBTd2l0Y2gsIFZvaWQsIG9yaWdpbikKK3sKKyAgICBtX3N1Y2Nlc3NvcnMu
YXBwZW5kKGZhbGxUaHJvdWdoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3dpdGNoVmFs
dWVfaAorI2RlZmluZSBCM1N3aXRjaFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJCM0NvbnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgU3dpdGNoVmFsdWUgOiBwdWJs
aWMgQ29udHJvbFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29k
ZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBTd2l0Y2g7IH0KKworICAgIH5Td2l0Y2hWYWx1
ZSgpOworCisgICAgLy8gbnVtQ2FzZVZhbHVlcygpICsgMSA9PSBudW1TdWNjZXNzb3JzKCkuCisg
ICAgdW5zaWduZWQgbnVtQ2FzZVZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzLnNpemUo
KTsgfQorCisgICAgLy8gVGhlIHN1Y2Nlc3NvciBmb3IgdGhpcyBjYXNlIHZhbHVlIGlzIGF0IHRo
ZSBzYW1lIGluZGV4LgorICAgIGludDY0X3QgY2FzZVZhbHVlKHVuc2lnbmVkIGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICAKKyAgICBjb25zdCBWZWN0b3I8aW50
NjRfdD4mIGNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQorCisgICAgRnJl
cXVlbnRlZEJsb2NrIGZhbGxUaHJvdWdoKCkgY29uc3QgeyByZXR1cm4gc3VjY2Vzc29ycygpLmxh
c3QoKTsgfQorICAgIEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2goKSB7IHJldHVybiBzdWNj
ZXNzb3JzKCkubGFzdCgpOyB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bnVtQ2FzZVZhbHVlcygpOyB9CisgICAgU3dpdGNoQ2FzZSBhdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBTd2l0Y2hDYXNlKGNhc2VWYWx1ZShpbmRleCksIHN1
Y2Nlc3NvcihpbmRleCkpOworICAgIH0KKyAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgIH0K
KworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkK
KyAgICAgICAgICAgIDogbV9zd2l0Y2gobnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgw
KQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTd2l0Y2hW
YWx1ZSYgc3dpdGNoVmFsdWUsIHVuc2lnbmVkIGluZGV4KQorICAgICAgICAgICAgOiBtX3N3aXRj
aCgmc3dpdGNoVmFsdWUpCisgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsK
KyAgICAgICAgfQorCisgICAgICAgIFN3aXRjaENhc2Ugb3BlcmF0b3IqKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIG1fc3dpdGNoLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9p
bmRleCsrOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAg
Ym9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKG1fc3dpdGNoID09IG90aGVyLm1fc3dpdGNoKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIGNvbnN0IFN3aXRjaFZhbHVlKiBtX3N3aXRjaDsKKyAgICAgICAg
dW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgdHlwZWRlZiBpdGVyYXRvciBjb25zdF9p
dGVyYXRvcjsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
KnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3Io
KnRoaXMsIHNpemUoKSk7IH0KKworICAgIC8vIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSBhbmQgcmVv
cmRlcnMgdGhpbmdzIGEgYml0LiBJZiB5b3UncmUgaXRlcmF0aW5nIHRoZSBjYXNlcyBmcm9tIDAg
dG8gTiwKKyAgICAvLyB0aGVuIHlvdSBjYW4ga2VlcCBpdGVyYXRpbmcgYWZ0ZXIgdGhpcyBzbyBs
b25nIGFzIHlvdSByZXZpc2l0IHRoaXMgc2FtZSBpbmRleCAod2hpY2ggd2lsbCBub3cKKyAgICAv
LyBjb250YWluIHNvbWUgb3RoZXIgY2FzZSB2YWx1ZSkuIFRoaXMgcmVtb3ZlcyB0aGUgY2FzZSB0
aGF0IHdhcyByZW1vdmVkLgorICAgIFN3aXRjaENhc2UgcmVtb3ZlQ2FzZSh1bnNpZ25lZCBpbmRl
eCk7CisKKyAgICB2b2lkIGFwcGVuZENhc2UoY29uc3QgU3dpdGNoQ2FzZSYpOworCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitw
cml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBTd2l0Y2hWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdo
KTsKKworICAgIFZlY3RvcjxpbnQ2NF90PiBtX3ZhbHVlczsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3dp
dGNoVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1l
c3BhY2UgV1RGIHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBUeXBlIHR5cGUpCit7CisgICAgc3dpdGNoICh0eXBlKSB7
CisgICAgY2FzZSBWb2lkOgorICAgICAgICBvdXQucHJpbnQoIlZvaWQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgSW50MzI6CisgICAgICAgIG91dC5wcmludCgiSW50MzIiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgSW50NjQ6CisgICAgICAgIG91dC5wcmludCgiSW50NjQiKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRG91YmxlOgorICAgICAgICBvdXQucHJpbnQoIkRv
dWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1R5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzVHlwZV9oCisjZGVmaW5lIEIzVHlwZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNDb21tb24uaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIFR5cGUgeworICAgIFZvaWQs
CisgICAgSW50MzIsCisgICAgSW50NjQsCisgICAgRG91YmxlCit9OworCitpbmxpbmUgYm9vbCBp
c0ludChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJuIHR5cGUgPT0gSW50MzIgfHwgdHlwZSA9PSBJ
bnQ2NDsKK30KKworaW5saW5lIGJvb2wgaXNGbG9hdChUeXBlIHR5cGUpCit7CisgICAgcmV0dXJu
IHR5cGUgPT0gRG91YmxlOworfQorCitpbmxpbmUgVHlwZSBwb2ludGVyVHlwZSgpCit7CisgICAg
aWYgKGlzMzJCaXQoKSkKKyAgICAgICAgcmV0dXJuIEludDMyOworICAgIHJldHVybiBJbnQ2NDsK
K30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCitjbGFz
cyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpC
Mzo6VHlwZSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzVHlwZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Vwc2lsb25WYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVXBzaWxvblZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitVcHNpbG9uVmFsdWU6
On5VcHNpbG9uVmFsdWUoKQoreworfQorCit2b2lkIFVwc2lsb25WYWx1ZTo6ZHVtcE1ldGEoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIl4iLCBtX3BoaS0+aW5kZXgo
KSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXBzaWxvblZhbHVlX2gKKyNkZWZpbmUg
QjNVcHNpbG9uVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFVwc2lsb25W
YWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhP
cGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gVXBzaWxvbjsgfQorCisgICAgflVwc2ls
b25WYWx1ZSgpOworCisgICAgVmFsdWUqIHBoaSgpIGNvbnN0IHsgcmV0dXJuIG1fcGhpOyB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICAKKyAgICBV
cHNpbG9uVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwg
VmFsdWUqIHBoaSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGhpLCBWb2lkLCBvcmlnaW4sIHZh
bHVlKQorICAgICAgICAsIG1fcGhpKHBoaSkKKyAgICB7CisgICAgICAgIEFTU0VSVCh2YWx1ZS0+
dHlwZSgpID09IHBoaS0+dHlwZSgpKTsKKyAgICB9CisKKyAgICBWYWx1ZSogbV9waGk7Cit9Owor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM1Vwc2lsb25WYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1VzZUNvdW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVXNlQ291bnRzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1VzZUNvdW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworVXNlQ291bnRzOjpVc2VDb3VudHMoUHJvY2VkdXJlJiBwcm9jZWR1cmUpCisgICAgOiBt
X2NvdW50cyhwcm9jZWR1cmUudmFsdWVzKCkuc2l6ZSgpKQoreworICAgIGZvciAoVmFsdWUqIHZh
bHVlIDogcHJvY2VkdXJlLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDog
dmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICBtX2NvdW50c1tjaGlsZF0rKzsKKyAgICB9
Cit9CisKK1VzZUNvdW50czo6flVzZUNvdW50cygpCit7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1VzZUNvdW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1VzZUNvdW50cy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVXNlQ291bnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVXNl
Q291bnRzX2gKKyNkZWZpbmUgQjNVc2VDb3VudHNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFVzZUNv
dW50cyB7CitwdWJsaWM6CisgICAgVXNlQ291bnRzKFByb2NlZHVyZSYpOworICAgIH5Vc2VDb3Vu
dHMoKTsKKworICAgIHVuc2lnbmVkIG9wZXJhdG9yW10oVmFsdWUqIHZhbHVlKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fY291bnRzW3ZhbHVlXTsKKyAgICB9Citwcml2YXRlOgorICAg
IEluZGV4TWFwPFZhbHVlLCB1bnNpZ25lZD4gbV9jb3VudHM7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Vz
ZUNvdW50c19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
VmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0FyZ3VtZW50
UmVnVmFsdWUuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAi
QjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgorI2luY2x1ZGUgIkIz
VmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYv
U3RyaW5nUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CisKK25h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgeworCitjbGFzcyBWYWxp
ZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihQcm9jZWR1cmUmIHByb2NlZHVyZSwgY29u
c3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisg
ICAgICAgICwgbV9kdW1wQmVmb3JlKGR1bXBCZWZvcmUpCisgICAgeworICAgIH0KKworI2RlZmlu
ZSBWQUxJREFURShjb25kaXRpb24sIG1lc3NhZ2UpIGRvIHsgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgXAorICAgICAgICBpZiAoY29uZGl0aW9uKSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBm
YWlsKF9fRklMRV9fLCBfX0xJTkVfXywgV1RGX1BSRVRUWV9GVU5DVElPTiwgI2NvbmRpdGlvbiwg
dG9DU3RyaW5nIG1lc3NhZ2UpOyBcCisgICAgfSB3aGlsZSAoZmFsc2UpCisKKyAgICB2b2lkIHJ1
bigpCisgICAgeworICAgICAgICBIYXNoU2V0PEJhc2ljQmxvY2sqPiBibG9ja3M7CisgICAgICAg
IEhhc2hTZXQ8VmFsdWUqPiB2YWx1ZUluUHJvYzsKKyAgICAgICAgSGFzaFNldDxWYWx1ZSo+IHZh
bHVlSW5CbG9jazsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jZWR1
cmUpIHsKKyAgICAgICAgICAgIGJsb2Nrcy5hZGQoYmxvY2spOworICAgICAgICAgICAgZm9yIChW
YWx1ZSogdmFsdWUgOiAqYmxvY2spCisgICAgICAgICAgICAgICAgdmFsdWVJbkJsb2NrLmFkZCh2
YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1fcHJvY2Vk
dXJlLnZhbHVlcygpKQorICAgICAgICAgICAgdmFsdWVJblByb2MuYWRkKHZhbHVlKTsKKworICAg
ICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlSW5Qcm9jKQorICAgICAgICAgICAgVkFMSURB
VEUodmFsdWVJbkJsb2NrLmNvbnRhaW5zKHZhbHVlKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluQmxvY2spCisgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZUluUHJvYy5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisKKyAgICAg
ICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykgeworICAgICAgICAgICAgZm9yIChW
YWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZUluUHJvYy5jb250YWlucyhjaGlsZCksICgiQXQgIiwgKnZhbHVlLCAiLT4iLCBwb2lu
dGVyRHVtcChjaGlsZCkpKTsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hNYXA8QmFzaWNCbG9j
ayosIEhhc2hTZXQ8QmFzaWNCbG9jayo+PiBhbGxQcmVkZWNlc3NvcnM7CisgICAgICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBibG9ja3MpIHsKKyAgICAgICAgICAgIFZBTElEQVRFKGJsb2Nr
LT5zaXplKCkgPj0gMSwgKCJBdCAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKQorICAgICAgICAgICAgICAgIFZB
TElEQVRFKCFDb250cm9sVmFsdWU6OmFjY2VwdHMoYmxvY2stPmF0KGkpLT5vcGNvZGUoKSksICgi
QXQgIiwgKmJsb2NrLT5hdChpKSkpOworICAgICAgICAgICAgVkFMSURBVEUoQ29udHJvbFZhbHVl
OjphY2NlcHRzKGJsb2NrLT5sYXN0KCktPm9wY29kZSgpKSwgKCJBdCAiLCAqYmxvY2stPmxhc3Qo
KSkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3Nv
ciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgeworICAgICAgICAgICAgICAgIGFsbFByZWRl
Y2Vzc29ycy5hZGQoc3VjY2Vzc29yLCBIYXNoU2V0PEJhc2ljQmxvY2sqPigpKS5pdGVyYXRvci0+
dmFsdWUuYWRkKGJsb2NrKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSgKKyAgICAgICAgICAg
ICAgICAgICAgYmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3NvciksICgiQXQgIiwgKmJsb2NrLCAiLT4i
LCBwb2ludGVyRHVtcChzdWNjZXNzb3IpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKwor
ICAgICAgICAvLyBOb3RlIHRoYXQgdGhpcyB0b3RhbGx5IGFsbG93cyBkZWFkIGNvZGUuCisgICAg
ICAgIGZvciAoYXV0byYgZW50cnkgOiBhbGxQcmVkZWNlc3NvcnMpIHsKKyAgICAgICAgICAgIEJh
c2ljQmxvY2sqIHN1Y2Nlc3NvciA9IGVudHJ5LmtleTsKKyAgICAgICAgICAgIEhhc2hTZXQ8QmFz
aWNCbG9jayo+JiBwcmVkZWNlc3NvcnMgPSBlbnRyeS52YWx1ZTsKKyAgICAgICAgICAgIFZBTElE
QVRFKHByZWRlY2Vzc29ycyA9PSBzdWNjZXNzb3ItPnByZWRlY2Vzc29ycygpLCAoIkF0ICIsICpz
dWNjZXNzb3IpKTsKKyAgICAgICAgfQorCisgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogbV9w
cm9jZWR1cmUudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFs
dWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgVkFMSURBVEUoY2hpbGQtPnR5cGUoKSAh
PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSwgIi0+IiwgKmNoaWxkKSk7CisgICAgICAgICAgICBzd2l0
Y2ggKHZhbHVlLT5vcGNvZGUoKSkgeworICAgICAgICAgICAgY2FzZSBOb3A6CisgICAgICAgICAg
ICBjYXNlIEp1bXA6CisgICAgICAgICAgICBjYXNlIE9vcHM6CisgICAgICAgICAgICAgICAgVkFM
SURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAg
ICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgSWRlbnRpdHk6CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAq
dmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVl
LT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29uc3QzMjoKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ29uc3Q2NDoK
KyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQ2
NCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgQ29uc3REb3VibGU6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1D
aGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT50eXBlKCkgPT0gRG91YmxlLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdGFja1Nsb3Q6CisgICAgICAgICAgICBjYXNlIEZy
YW1lUG9pbnRlcjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxkcmVu
KCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5
cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAgICAgICAgICAgICAgICBW
QUxJREFURSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAgICAgICAgICAgICh2YWx1ZS0+YXM8QXJndW1l
bnRSZWdWYWx1ZT4oKS0+YXJndW1lbnRSZWcoKS5pc0dQUigpID8gcG9pbnRlclR5cGUoKSA6IERv
dWJsZSkKKyAgICAgICAgICAgICAgICAgICAgPT0gdmFsdWUtPnR5cGUoKSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQWRkOgorICAg
ICAgICAgICAgY2FzZSBTdWI6CisgICAgICAgICAgICBjYXNlIE11bDoKKyAgICAgICAgICAgIGNh
c2UgRGl2OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09
IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5
cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlw
ZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50
eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQ2hpbGxEaXY6CisgICAgICAgICAgICBjYXNlIE1vZDoKKyAgICAg
ICAgICAgIGNhc2UgQml0QW5kOgorICAgICAgICAgICAgY2FzZSBCaXRPcjoKKyAgICAgICAgICAg
IGNhc2UgQml0WG9yOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJl
bigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgx
KS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlz
SW50KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBTaGw6CisgICAgICAgICAgICBjYXNlIFNTaHI6CisgICAg
ICAgICAgICBjYXNlIFpTaHI6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNo
aWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1
ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpID09
IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50
KHZhbHVlLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBTRXh0ODoKKyAgICAgICAgICAgIGNhc2UgU0V4dDE2OgorICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBl
KCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU0V4dDMyOgorICAgICAgICAgICAgY2FzZSBaRXh0
MzI6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQo
MCktPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IEludDY0LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBUcnVuYzoKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IEludDY0
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBl
KCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIEZSb3VuZDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFsdWUp
KTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IERvdWJsZSwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2Ug
SVRvRDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAx
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVl
LT5jaGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRFRvSTMyOgorICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gRG91
YmxlLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50
eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIEVxdWFsOgorICAgICAgICAgICAgY2FzZSBOb3RFcXVhbDoKKyAg
ICAgICAgICAgIGNhc2UgTGVzc1RoYW46CisgICAgICAgICAgICBjYXNlIEdyZWF0ZXJUaGFuOgor
ICAgICAgICAgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgICAgICAgICBjYXNlIEdyZWF0ZXJFcXVh
bDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAo
IkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgw
KS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFib3Zl
OgorICAgICAgICAgICAgY2FzZSBCZWxvdzoKKyAgICAgICAgICAgIGNhc2UgQWJvdmVFcXVhbDoK
KyAgICAgICAgICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAg
ICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHZhbHVlLT5jaGlsZCgxKS0+
dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50
KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAg
ICAgICBjYXNlIExvYWQ4UzoKKyAgICAgICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgICAg
IGNhc2UgTG9hZDE2UzoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9h
ZEZsb2F0OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09
IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNo
aWxkKDApLT50eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZDoKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlw
ZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTdG9yZTg6CisgICAgICAgICAgICBj
YXNlIFN0b3JlMTY6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVu
KCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgp
LCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBl
KCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgU3RvcmVGbG9hdDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+bnVtQ2hpbGRyZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9
PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlLT50eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU6CisgICAgICAgICAgICAgICAgVkFM
SURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9PSBwb2ludGVyVHlw
ZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50
eXBlKCkgPT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgQ0NhbGw6CisgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHdp
bGRjYXJkLiBZb3UgY2FuIHBhc3MgYW55IG5vbi12b2lkIGFyZ3VtZW50cyBhbmQgeW91IGNhbiBz
ZWxlY3QgYW55CisgICAgICAgICAgICAgICAgLy8gcmV0dXJuIHR5cGUuCisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFBhdGNocG9pbnQ6CisgICAgICAgICAgICAgICAg
dmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBjYXNlIENoZWNrQWRkOgorICAgICAgICAgICAgY2FzZSBDaGVja1N1YjoKKyAgICAgICAg
ICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNo
aWxkcmVuKCkgPj0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFU
RShpc0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUoaXNJbnQodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkpLCAoIkF0
ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIHZhbGlkYXRlU3RhY2ttYXAodmFsdWUpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDaGVjazoKKyAgICAgICAg
ICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwKHZhbHVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IHZhbHVlLT5hczxVcHNpbG9uVmFs
dWU+KCktPnBoaSgpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWVJblByb2MuY29udGFpbnModmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKS0+
cGhpKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBQaGk6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGls
ZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVl
LT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgQnJhbmNoOgorICAgICAgICAgICAgY2FzZSBSZXR1cm46Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZv
aWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIFN3aXRjaDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKGlz
SW50KHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
CisKK3ByaXZhdGU6CisgICAgdm9pZCB2YWxpZGF0ZVN0YWNrbWFwKFZhbHVlKiB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIFN0YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA+PSBzdGFja21hcC0+cmVwcygpLnNp
emUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHN0YWNrbWFwLT5yZXBzKCkuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFZhbHVl
UmVwJiByZXAgPSBzdGFja21hcC0+cmVwcygpW2ldOworICAgICAgICAgICAgaWYgKHJlcC5raW5k
KCkgIT0gVmFsdWVSZXA6OlJlZ2lzdGVyKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgaWYgKHJlcC5yZWcoKS5pc0dQUigpKQorICAgICAgICAgICAgICAgIFZBTElEQVRF
KGlzSW50KHZhbHVlLT5jaGlsZChpKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0Zsb2F0KHZhbHVlLT5jaGls
ZChpKS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICAK
KyAgICBOT19SRVRVUk5fRFVFX1RPX0NSQVNIIHZvaWQgZmFpbCgKKyAgICAgICAgY29uc3QgY2hh
ciogZmlsZW5hbWUsIGludCBsaW5lTnVtYmVyLCBjb25zdCBjaGFyKiBmdW5jdGlvbiwgY29uc3Qg
Y2hhciogY29uZGl0aW9uLAorICAgICAgICBDU3RyaW5nIG1lc3NhZ2UpCisgICAgeworICAgICAg
ICBDU3RyaW5nIGZhaWx1cmVNZXNzYWdlOworICAgICAgICB7CisgICAgICAgICAgICBTdHJpbmdQ
cmludFN0cmVhbSBvdXQ7CisgICAgICAgICAgICBvdXQucHJpbnQoIkIzIFZBTElEQVRJT04gRkFJ
TFVSRVxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIs
IGZpbGVuYW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmlu
dCgiICAgICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgQWZ0
ZXIgIiwgbV9wcm9jZWR1cmUubGFzdFBoYXNlTmFtZSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGZh
aWx1cmVNZXNzYWdlID0gb3V0LnRvQ1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgZGF0
YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAg
ICAgICAgIGRhdGFMb2coIkJlZm9yZSAiLCBtX3Byb2NlZHVyZS5sYXN0UGhhc2VOYW1lKCksICI6
XG4iKTsKKyAgICAgICAgICAgIGRhdGFMb2cobV9kdW1wQmVmb3JlKTsKKyAgICAgICAgfQorICAg
ICAgICBkYXRhTG9nKCJBdCB0aW1lIG9mIGZhaWx1cmU6XG4iKTsKKyAgICAgICAgZGF0YUxvZyht
X3Byb2NlZHVyZSk7CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAg
IFdURlJlcG9ydEFzc2VydGlvbkZhaWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9u
LCBjb25kaXRpb24pOworICAgICAgICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1
cmUmIG1fcHJvY2VkdXJlOworICAgIGNvbnN0IGNoYXIqIG1fZHVtcEJlZm9yZTsKK307CisKK30g
Ly8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYgcHJvY2Vk
dXJlLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQoreworICAgIFZhbGlkYXRlciB2YWxpZGF0ZXIo
cHJvY2VkdXJlLCBkdW1wQmVmb3JlKTsKKyAgICB2YWxpZGF0ZXIucnVuKCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzVmFsaWRhdGVfaAorI2RlZmluZSBCM1ZhbGlkYXRlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7
CisKK3ZvaWQgdmFsaWRhdGUoUHJvY2VkdXJlJiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51
bGxwdHIpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI4NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgorI2luY2x1
ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY29uc3QgY2hhciogY29uc3QgVmFsdWU6OmR1bXBQcmVmaXggPSAiQCI7CisKK1Zh
bHVlOjp+VmFsdWUoKQoreworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aElkZW50aXR5KFZh
bHVlKiB2YWx1ZSkKK3sKKyAgICAvLyBUaGlzIGlzIGEgYml0IGNyYXp5LiBJdCBkb2VzIGFuIGlu
LXBsYWNlIHJlcGxhY2VtZW50IG9mIHdoYXRldmVyIFZhbHVlIHN1YmNsYXNzIHRoaXMgaXMgd2l0
aAorICAgIC8vIGEgcGxhaW4gSWRlbnRpdHkgVmFsdWUuIFdlIGZpcnN0IGNvbGxlY3QgYWxsIG9m
IHRoZSBpbmZvcm1hdGlvbiB3ZSBuZWVkLCB0aGVuIHdlIGRlc3RydWN0IHRoZQorICAgIC8vIHBy
ZXZpb3VzIHZhbHVlIGluIHBsYWNlLCBhbmQgdGhlbiB3ZSBjb25zdHJ1Y3QgdGhlIElkZW50aXR5
IFZhbHVlIGluIHBsYWNlLgorCisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIFR5
cGUgdHlwZSA9IG1fdHlwZTsKKyAgICBPcmlnaW4gb3JpZ2luID0gbV9vcmlnaW47CisgICAgQmFz
aWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKworICAgIFJFTEVBU0VfQVNTRVJUKHR5cGUg
PT0gdmFsdWUtPnR5cGUoKSk7CisKKyAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CisKKyAgICBu
ZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBJZGVudGl0eSwgdHlwZSwgb3JpZ2luLCB2YWx1ZSk7CisK
KyAgICB0aGlzLT5vd25lciA9IG93bmVyOworfQorCit2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aE5v
cCgpCit7CisgICAgdW5zaWduZWQgaW5kZXggPSBtX2luZGV4OworICAgIE9yaWdpbiBvcmlnaW4g
PSBtX29yaWdpbjsKKyAgICBCYXNpY0Jsb2NrKiBvd25lciA9IHRoaXMtPm93bmVyOworCisgICAg
dGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAgbmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgTm9w
LCBWb2lkLCBvcmlnaW4pOworCisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKK30KKwordm9pZCBW
YWx1ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1w
UHJlZml4LCBtX2luZGV4KTsKK30KKwordm9pZCBWYWx1ZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiICIsICp0aGlzLCAiID0gIiwg
bV9vcGNvZGUpOworCisgICAgb3V0LnByaW50KCIoIik7CisgICAgQ29tbWFQcmludGVyIGNvbW1h
OworICAgIGZvciAoVmFsdWUqIGNoaWxkIDogY2hpbGRyZW4oKSkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBwb2ludGVyRHVtcChjaGlsZCkpOworCisgICAgaWYgKG1fb3JpZ2luKQorICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIG1fb3JpZ2luKTsKKworICAgIHsKKyAgICAgICAgU3RyaW5nUHJp
bnRTdHJlYW0gc3RyaW5nT3V0OworICAgICAgICBkdW1wTWV0YShzdHJpbmdPdXQpOworICAgICAg
ICBDU3RyaW5nIHN0cmluZyA9IHN0cmluZ091dC50b0NTdHJpbmcoKTsKKyAgICAgICAgaWYgKHN0
cmluZy5sZW5ndGgoKSkKKyAgICAgICAgICAgIG91dC5wcmludChjb21tYSwgc3RyaW5nKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIENTdHJpbmcgc3RyaW5nID0gdG9DU3RyaW5nKGVmZmVjdHMo
KSk7CisgICAgICAgIGlmIChzdHJpbmcubGVuZ3RoKCkpCisgICAgICAgICAgICBvdXQucHJpbnQo
Y29tbWEsIHN0cmluZyk7CisgICAgfQorCisgICAgb3V0LnByaW50KCIpIik7Cit9CisKK1ZhbHVl
KiBWYWx1ZTo6bmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworVmFsdWUqIFZhbHVlOjphZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbnQzMl90
KSBjb25zdAoreworICAgIHJldHVybiBudWxscHRyOworfQorCitWYWx1ZSogVmFsdWU6OmFkZENv
bnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKikgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworVmFsdWUqIFZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0
Cit7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0VmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBj
b25zdAoreworICAgIEVmZmVjdHMgcmVzdWx0OworICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKKyAg
ICBjYXNlIE5vcDoKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNhc2UgQ29uc3QzMjoKKyAgICBj
YXNlIENvbnN0NjQ6CisgICAgY2FzZSBDb25zdERvdWJsZToKKyAgICBjYXNlIFN0YWNrU2xvdDoK
KyAgICBjYXNlIEFyZ3VtZW50UmVnOgorICAgIGNhc2UgRnJhbWVQb2ludGVyOgorICAgIGNhc2Ug
QWRkOgorICAgIGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgQ2hpbGxEaXY6Cisg
ICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAgICBjYXNl
IEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2FzZSBaU2hyOgor
ICAgIGNhc2UgU0V4dDg6CisgICAgY2FzZSBTRXh0MTY6CisgICAgY2FzZSBTRXh0MzI6CisgICAg
Y2FzZSBaRXh0MzI6CisgICAgY2FzZSBUcnVuYzoKKyAgICBjYXNlIEZSb3VuZDoKKyAgICBjYXNl
IElUb0Q6CisgICAgY2FzZSBEVG9JMzI6CisgICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVx
dWFsOgorICAgIGNhc2UgTGVzc1RoYW46CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNl
IExlc3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAg
IGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoK
KyAgICBjYXNlIFBoaToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBEaXY6CisgICAgICAgIHJl
c3VsdC5jb250cm9sRGVwZW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBM
b2FkOFo6CisgICAgY2FzZSBMb2FkOFM6CisgICAgY2FzZSBMb2FkMTZaOgorICAgIGNhc2UgTG9h
ZDE2UzoKKyAgICBjYXNlIExvYWRGbG9hdDoKKyAgICBjYXNlIExvYWQ6CisgICAgICAgIC8vIEZJ
WE1FOiBNZW1vcnlWYWx1ZSBzaG91bGQgaGF2ZSBhIEhlYXBSYW5nZS4KKyAgICAgICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzNQorICAgICAgICByZXN1
bHQucmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICByZXN1bHQuY29udHJvbERlcGVu
ZGVudCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RvcmU4OgorICAgIGNhc2Ug
U3RvcmUxNjoKKyAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgY2FzZSBTdG9yZToKKyAgICAgICAg
Ly8gRklYTUU6IE1lbW9yeVZhbHVlIHNob3VsZCBoYXZlIGEgSGVhcFJhbmdlLgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTM1CisgICAgICAg
IHJlc3VsdC53cml0ZXMgPSBIZWFwUmFuZ2U6OnRvcCgpOworICAgICAgICByZXN1bHQuY29udHJv
bERlcGVuZGVudCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ0NhbGw6CisgICAg
Y2FzZSBQYXRjaHBvaW50OgorICAgICAgICByZXN1bHQucmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgp
OworICAgICAgICByZXN1bHQud3JpdGVzID0gSGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcmVz
dWx0LmV4aXRzU2lkZXdheXMgPSB0cnVlOworICAgICAgICByZXN1bHQuY29udHJvbERlcGVuZGVu
dCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBD
aGVja1N1YjoKKyAgICBjYXNlIENoZWNrTXVsOgorICAgIGNhc2UgQ2hlY2s6CisgICAgICAgIHJl
c3VsdC5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBVcHNp
bG9uOgorICAgICAgICByZXN1bHQud3JpdGVzU1NBU3RhdGUgPSB0cnVlOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEp1bXA6CisgICAgY2FzZSBCcmFuY2g6CisgICAgY2FzZSBTd2l0Y2g6Cisg
ICAgY2FzZSBSZXR1cm46CisgICAgY2FzZSBPb3BzOgorICAgICAgICByZXN1bHQudGVybWluYWwg
PSB0cnVlOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
dm9pZCBWYWx1ZTo6cGVyZm9ybVN1YnN0aXR1dGlvbigpCit7CisgICAgZm9yIChWYWx1ZSomIGNo
aWxkIDogY2hpbGRyZW4oKSkgeworICAgICAgICB3aGlsZSAoY2hpbGQtPm9wY29kZSgpID09IElk
ZW50aXR5KQorICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+Y2hpbGQoMCk7CisgICAgfQorfQor
Cit2b2lkIFZhbHVlOjpkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0Cit7Cit9CisKK1R5cGUg
VmFsdWU6OnR5cGVGb3IoT3Bjb2RlIG9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQpCit7CisgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIElkZW50aXR5OgorICAgIGNhc2UgQWRkOgorICAg
IGNhc2UgU3ViOgorICAgIGNhc2UgTXVsOgorICAgIGNhc2UgRGl2OgorICAgIGNhc2UgQ2hpbGxE
aXY6CisgICAgY2FzZSBNb2Q6CisgICAgY2FzZSBCaXRBbmQ6CisgICAgY2FzZSBCaXRPcjoKKyAg
ICBjYXNlIEJpdFhvcjoKKyAgICBjYXNlIFNobDoKKyAgICBjYXNlIFNTaHI6CisgICAgY2FzZSBa
U2hyOgorICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICByZXR1cm4gZmlyc3RDaGlsZC0+dHlwZSgpOworICAgIGNhc2UgRnJh
bWVQb2ludGVyOgorICAgICAgICByZXR1cm4gcG9pbnRlclR5cGUoKTsKKyAgICBjYXNlIFNFeHQ4
OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgVHJ1bmM6CisgICAgY2FzZSBEVG9JMzI6Cisg
ICAgY2FzZSBFcXVhbDoKKyAgICBjYXNlIE5vdEVxdWFsOgorICAgIGNhc2UgTGVzc1RoYW46Cisg
ICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICBjYXNlIExlc3NFcXVhbDoKKyAgICBjYXNlIEdyZWF0
ZXJFcXVhbDoKKyAgICBjYXNlIEFib3ZlOgorICAgIGNhc2UgQmVsb3c6CisgICAgY2FzZSBBYm92
ZUVxdWFsOgorICAgIGNhc2UgQmVsb3dFcXVhbDoKKyAgICAgICAgcmV0dXJuIEludDMyOworICAg
IGNhc2UgU0V4dDMyOgorICAgIGNhc2UgWkV4dDMyOgorICAgICAgICByZXR1cm4gSW50NjQ7Cisg
ICAgY2FzZSBGUm91bmQ6CisgICAgY2FzZSBJVG9EOgorICAgICAgICByZXR1cm4gRG91YmxlOwor
ICAgIGNhc2UgTm9wOgorICAgICAgICByZXR1cm4gVm9pZDsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFsdWVfaAor
I2RlZmluZSBCM1ZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJB
cmcuaCIKKyNpbmNsdWRlICJCM0VmZmVjdHMuaCIKKyNpbmNsdWRlICJCM09wY29kZS5oIgorI2lu
Y2x1ZGUgIkIzT3JpZ2luLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFzcyBQcm9jZWR1cmU7
CitjbGFzcyBTdGFja21hcDsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgVmFsdWUgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKFZhbHVlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIFZlY3RvcjxWYWx1ZSosIDM+IEFkamFjZW5jeUxpc3Q7
CisKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIHN0YXRp
YyBib29sIGFjY2VwdHMoT3Bjb2RlKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2aXJ0dWFsIH5W
YWx1ZSgpOworCisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9
CisgICAgCisgICAgLy8gTm90ZSB0aGF0IHRoZSBvcGNvZGUgaXMgaW1tdXRhYmxlLCBleGNlcHQg
Zm9yIHJlcGxhY2luZyB2YWx1ZXMgd2l0aCBJZGVudGl0eSBvciBOb3AuCisgICAgT3Bjb2RlIG9w
Y29kZSgpIGNvbnN0IHsgcmV0dXJuIG1fb3Bjb2RlOyB9CisKKyAgICBPcmlnaW4gb3JpZ2luKCkg
Y29uc3QgeyByZXR1cm4gbV9vcmlnaW47IH0KKyAgICAKKyAgICBWYWx1ZSomIGNoaWxkKHVuc2ln
bmVkIGluZGV4KSB7IHJldHVybiBtX2NoaWxkcmVuW2luZGV4XTsgfQorICAgIFZhbHVlKiBjaGls
ZCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKwor
ICAgIHVuc2lnbmVkIG51bUNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbi5zaXpl
KCk7IH0KKworICAgIC8vIFRoaXMgY29tcHV0ZXMgdGhlIHR5cGUgdXNpbmcgdGhlIG9wY29kZS4K
KyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGU7IH0KKworICAgIC8vIFRoaXMg
aXMgdXNlZnVsIHdoZW4gbG93ZXJpbmcuIE5vdGUgdGhhdCB0aGlzIGlzIG9ubHkgdmFsaWQgZm9y
IG5vbi12b2lkIHZhbHVlcy4KKyAgICBBaXI6OkFyZzo6VHlwZSBhaXJUeXBlKCkgY29uc3QgeyBy
ZXR1cm4gQWlyOjpBcmc6OnR5cGVGb3JCM1R5cGUodHlwZSgpKTsgfQorCisgICAgQWRqYWNlbmN5
TGlzdCYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9IAorICAgIGNvbnN0IEFkamFj
ZW5jeUxpc3QmIGNoaWxkcmVuKCkgY29uc3QgeyByZXR1cm4gbV9jaGlsZHJlbjsgfQorCisgICAg
dm9pZCByZXBsYWNlV2l0aElkZW50aXR5KFZhbHVlKik7CisgICAgdm9pZCByZXBsYWNlV2l0aE5v
cCgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVw
RHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCisgICAgLy8gVGhpcyBpcyBob3cgeW91IGNhc3Qg
VmFsdWVzLiBGb3IgZXhhbXBsZSwgaWYgeW91IHdhbnQgdG8gZG8gc29tZXRoaW5nIHByb3ZpZGVk
IHRoYXQgd2UgaGF2ZSBhCisgICAgLy8gQXJndW1lbnRSZWdWYWx1ZSwgeW91IGNhbiBkbzoKKyAg
ICAvLworICAgIC8vIGlmIChBcmd1bWVudFJlZ1ZhbHVlKiBhcmd1bWVudFJlZyA9IHZhbHVlLT5h
czxBcmd1bWVudFJlZ1ZhbHVlPigpKSB7CisgICAgLy8gICAgIHRoaW5ncworICAgIC8vIH0KKyAg
ICAvLworICAgIC8vIFRoaXMgd2lsbCByZXR1cm4gbnVsbCBpZiB0aGlzIG9wY29kZSgpICE9IEFy
Z3VtZW50UmVnLiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhpcyByZXR1cm5zIG51bGxwdHIKKyAgICAv
LyBpZiBUOjphY2NlcHRzKG9wY29kZSgpKSByZXR1cm5zIGZhbHNlLgorICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CisgICAgVCogYXMoKTsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIGNv
bnN0IFQqIGFzKCkgY29uc3Q7CisKKyAgICBib29sIGlzQ29uc3RhbnQoKSBjb25zdDsKKyAgICAK
KyAgICB2aXJ0dWFsIFZhbHVlKiBuZWdDb25zdGFudChQcm9jZWR1cmUmKSBjb25zdDsKKyAgICB2
aXJ0dWFsIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBpbnQzMl90IG90aGVyKSBjb25z
dDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0OworICAgIHZpcnR1YWwgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIFZh
bHVlKiBvdGhlcikgY29uc3Q7CisKKyAgICBib29sIGhhc0ludDMyKCkgY29uc3Q7CisgICAgaW50
MzJfdCBhc0ludDMyKCkgY29uc3Q7CisgICAgCisgICAgYm9vbCBoYXNJbnQ2NCgpIGNvbnN0Owor
ICAgIGludDY0X3QgYXNJbnQ2NCgpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQoKSBjb25zdDsK
KyAgICBpbnQ2NF90IGFzSW50KCkgY29uc3Q7CisgICAgYm9vbCBpc0ludChpbnQ2NF90IHZhbHVl
KSBjb25zdDsKKworICAgIGJvb2wgaGFzSW50UHRyKCkgY29uc3Q7CisgICAgaW50cHRyX3QgYXNJ
bnRQdHIoKSBjb25zdDsKKworICAgIGJvb2wgaGFzRG91YmxlKCkgY29uc3Q7CisgICAgZG91Ymxl
IGFzRG91YmxlKCkgY29uc3Q7CisKKyAgICBFZmZlY3RzIGVmZmVjdHMoKSBjb25zdDsKKworICAg
IFN0YWNrbWFwKiBzdGFja21hcCgpOworCisgICAgLy8gTWFrZXMgc3VyZSB0aGF0IG5vbmUgb2Yg
dGhlIGNoaWxkcmVuIGFyZSBJZGVudGl0eSdzLiBJZiBhIGNoaWxkIHBvaW50cyB0byBJZGVudGl0
eSwgdGhpcyB3aWxsCisgICAgLy8gcmVwb2ludCBpdCBhdCB0aGUgSWRlbnRpdHkncyBjaGlsZC4g
Rm9yIHNpbXBsaWNpdHksIHRoaXMgd2lsbCBmb2xsb3cgYXJiaXRyYXJpbHkgbG9uZyBjaGFpbnMK
KyAgICAvLyBvZiBJZGVudGl0eSdzLgorICAgIHZvaWQgcGVyZm9ybVN1YnN0aXR1dGlvbigpOwor
Citwcm90ZWN0ZWQ6CisgICAgdmlydHVhbCB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Q7CisgICAgCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKK3Byb3Rl
Y3RlZDoKKyAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KKyAgICAvLyBU
aGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5OgorICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
Zmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX2luZGV4KGlu
ZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkK
KyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RD
aGlsZCwgYXJndW1lbnRzLi4uIH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBm
b3Igc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29kZSBoYXMgbm8g
Y2hpbGRyZW46CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX2luZGV4KGluZGV4KQor
ICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUodHlwZSkKKyAgICAg
ICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMg
Zm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNv
ZGUgYW5kIGZpcnN0IGNoaWxkOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAg
ICAgIDogbV9pbmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAg
ICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKKyAgICAgICAgLCBtX29yaWdp
bihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4u
IH0KKyAgICB7CisgICAgfQorICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0
aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5kIHRoYXQg
ZG9uJ3QKKyAgICAvLyB0YWtlIGFueSBhcmd1bWVudHM6CisgICAgZXhwbGljaXQgVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9p
bmRleChpbmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBl
KHR5cGVGb3Iob3Bjb2RlLCBudWxscHRyKSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisg
ICAgeworICAgIH0KKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciB2YXJhcmdzLgorICAgIGV4cGxp
Y2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAgICAgICA6IG1faW5k
ZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlwZSh0
eXBlKQorICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKKyAgICAgICAgLCBtX2NoaWxkcmVuKGNo
aWxkcmVuKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFR5cGUgdHlwZUZv
cihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKTsKKworICAgIC8vIFRoaXMgZ3JvdXAgb2YgZmll
bGRzIGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgorICAgIHVuc2lnbmVkIG1faW5kZXg7
CisgICAgT3Bjb2RlIG1fb3Bjb2RlOworICAgIFR5cGUgbV90eXBlOworICAgIAorICAgIE9yaWdp
biBtX29yaWdpbjsKKyAgICBBZGphY2VuY3lMaXN0IG1fY2hpbGRyZW47CisKK3B1YmxpYzoKKyAg
ICBCYXNpY0Jsb2NrKiBvd25lciB7IG51bGxwdHIgfTsgLy8gY29tcHV0ZWQgbGF6aWx5LgorfTsK
KworY2xhc3MgRGVlcFZhbHVlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhbHVlRHVtcChjb25z
dCBWYWx1ZSogdmFsdWUpCisgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV92YWx1ZSkKKyAgICAgICAgICAgIG1fdmFsdWUtPmRlZXBEdW1wKG91dCk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRl
OgorICAgIGNvbnN0IFZhbHVlKiBtX3ZhbHVlOworfTsKKworaW5saW5lIERlZXBWYWx1ZUR1bXAg
ZGVlcER1bXAoY29uc3QgVmFsdWUqIHZhbHVlKQoreworICAgIHJldHVybiBEZWVwVmFsdWVEdW1w
KHZhbHVlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
NDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1ZhbHVlSW5saW5lc19oCisjZGVmaW5lIEIzVmFsdWVJbmxpbmVzX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NoZWNrVmFsdWUuaCIKKyNpbmNsdWRlICJCM0Nv
bnN0MzJWYWx1ZS5oIgorI2luY2x1ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisjaW5jbHVkZSAiQjND
b25zdERvdWJsZVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50VmFsdWUuaCIKKyNpbmNs
dWRlICJCM1Byb2NlZHVyZS5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitUKiBWYWx1ZTo6YXMo
KQoreworICAgIGlmIChUOjphY2NlcHRzKG9wY29kZSgpKSkKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFQqPih0aGlzKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NvbnN0IFQqIFZhbHVlOjphcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8VmFsdWUqPih0aGlzKS0+YXM8VD4oKTsKK30KKworaW5saW5lIGJvb2wgVmFsdWU6Omlz
Q29uc3RhbnQoKSBjb25zdAoreworICAgIHN3aXRjaCAob3Bjb2RlKCkpIHsKKyAgICBjYXNlIENv
bnN0MzI6CisgICAgY2FzZSBDb25zdDY0OgorICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJbnQzMigpIGNvbnN0Cit7CisgICAgcmV0dXJu
ICEhYXM8Q29uc3QzMlZhbHVlPigpOworfQorCitpbmxpbmUgaW50MzJfdCBWYWx1ZTo6YXNJbnQz
MigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0MzJWYWx1ZT4oKS0+dmFsdWUoKTsKK30K
KworaW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludDY0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gISFh
czxDb25zdDY0VmFsdWU+KCk7Cit9CisKK2lubGluZSBpbnQ2NF90IFZhbHVlOjphc0ludDY0KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3Q2NFZhbHVlPigpLT52YWx1ZSgpOworfQorCitp
bmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIo
KSB8fCBoYXNJbnQ2NCgpOworfQorCitpbmxpbmUgaW50NjRfdCBWYWx1ZTo6YXNJbnQoKSBjb25z
dAoreworICAgIHJldHVybiBoYXNJbnQzMigpID8gYXNJbnQzMigpIDogYXNJbnQ2NCgpOworfQor
CitpbmxpbmUgYm9vbCBWYWx1ZTo6aXNJbnQoaW50NjRfdCB2YWx1ZSkgY29uc3QKK3sKKyAgICBy
ZXR1cm4gaGFzSW50KCkgJiYgYXNJbnQoKSA9PSB2YWx1ZTsKK30KKworaW5saW5lIGJvb2wgVmFs
dWU6Omhhc0ludFB0cigpIGNvbnN0Cit7CisgICAgaWYgKGlzNjRCaXQoKSkKKyAgICAgICAgcmV0
dXJuIGhhc0ludDY0KCk7CisgICAgcmV0dXJuIGhhc0ludDMyKCk7Cit9CisKK2lubGluZSBpbnRw
dHJfdCBWYWx1ZTo6YXNJbnRQdHIoKSBjb25zdAoreworICAgIGlmIChpczY0Qml0KCkpCisgICAg
ICAgIHJldHVybiBhc0ludDY0KCk7CisgICAgcmV0dXJuIGFzSW50MzIoKTsKK30KKworaW5saW5l
IGJvb2wgVmFsdWU6Omhhc0RvdWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEhYXM8Q29uc3RE
b3VibGVWYWx1ZT4oKTsKK30KKworaW5saW5lIGRvdWJsZSBWYWx1ZTo6YXNEb3VibGUoKSBjb25z
dAoreworICAgIHJldHVybiBhczxDb25zdERvdWJsZVZhbHVlPigpLT52YWx1ZSgpOworfQorCitp
bmxpbmUgU3RhY2ttYXAqIFZhbHVlOjpzdGFja21hcCgpCit7CisgICAgaWYgKENoZWNrVmFsdWUq
IGNoZWNrID0gYXM8Q2hlY2tWYWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZjaGVjay0+c3RhY2tt
YXA7CisgICAgaWYgKFBhdGNocG9pbnRWYWx1ZSogcGF0Y2hwb2ludCA9IGFzPFBhdGNocG9pbnRW
YWx1ZT4oKSkKKyAgICAgICAgcmV0dXJuICZwYXRjaHBvaW50LT5zdGFja21hcDsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWx1ZUlubGluZXNfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFsdWVSZXAuaCIKKworI2lmIEVOQUJM
RShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCit2b2lkIFZhbHVl
UmVwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fa2lu
ZCk7CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEFueToKKyAgICBjYXNlIFNvbWVS
ZWdpc3RlcjoKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVnaXN0ZXI6CisgICAgICAgIG91
dC5wcmludCgiKCIsIHJlZygpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFj
azoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgb2Zmc2V0RnJvbUZQKCksICIpIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgiKCIs
IG9mZnNldEZyb21TUCgpLCAiKSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdGFu
dDoKKyAgICAgICAgb3V0LnByaW50KCIoIiwgdmFsdWUoKSwgIikiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBK
U0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVmFsdWVSZXA6
OktpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFZhbHVlUmVwOjpB
bnk6CisgICAgICAgIG91dC5wcmludCgiQW55Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgIG91dC5wcmludCgiU29tZVJlZ2lzdGVy
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAg
ICAgb3V0LnByaW50KCJSZWdpc3RlciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1
ZVJlcDo6U3RhY2s6CisgICAgICAgIG91dC5wcmludCgiU3RhY2siKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgIG91dC5wcmludCgi
U3RhY2tBcmd1bWVudCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6Q29u
c3RhbnQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3RhbnQiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVz
cGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZVJlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlUmVwLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZVJlcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTc4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYWx1
ZVJlcF9oCisjZGVmaW5lIEIzVmFsdWVSZXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIlJlZy5oIgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2UgdXNlIHRoaXMgY2xhc3MgdG8gZGVzY3JpYmUg
dmFsdWUgcmVwcmVzZW50YXRpb25zIGF0IHN0YWNrbWFwcy4gSXQncyB1c2VkIGJvdGggdG8gZm9y
Y2UgYQorLy8gcmVwcmVzZW50YXRpb24gYW5kIHRvIGdldCB0aGUgcmVwcmVzZW50YXRpb24uIFdo
ZW4gdGhlIEIzIGNsaWVudCBmb3JjZXMgYSByZXByZXNlbnRhdGlvbiwgd2Ugc2F5CisvLyB0aGF0
IGl0J3MgYW4gaW5wdXQuIFdoZW4gQjMgdGVsbHMgdGhlIGNsaWVudCB3aGF0IHJlcHJlc2VudGF0
aW9uIGl0IHBpY2tlZCwgd2Ugc2F5IHRoYXQgaXQncyBhbgorLy8gb3V0cHV0LgorCitjbGFzcyBW
YWx1ZVJlcCB7CitwdWJsaWM6CisgICAgZW51bSBLaW5kIHsKKyAgICAgICAgLy8gQXMgYW4gaW5w
dXQgcmVwcmVzZW50YXRpb24sIHRoaXMgbWVhbnMgdGhhdCBCMyBjYW4gcGljayBhbnkgcmVwcmVz
ZW50YXRpb24uIEFzIGFuCisgICAgICAgIC8vIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBt
ZWFucyB0aGF0IHdlIGRvbid0IGtub3cuIFRoaXMgd2lsbCBvbmx5IGFyaXNlIGZvciB0aGUKKyAg
ICAgICAgLy8gcmlnaHQgb3BlcmFuZCAoaS5lLiBjaGlsZCgxKSkgb2YgYSBDaGVja011bC4KKyAg
ICAgICAgQW55LAorCisgICAgICAgIC8vIEFzIGFuIGlucHV0IHJlcHJlc2VudGF0aW9uLCB0aGlz
IG1lYW5zIHRoYXQgQjMgc2hvdWxkIHBpY2sgc29tZSByZWdpc3Rlci4gSXQgY291bGQgYmUgYQor
ICAgICAgICAvLyByZWdpc3RlciB0aGF0IHRoaXMgY2xhaW1zIHRvIGNsb2JiZXIhCisgICAgICAg
IFNvbWVSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwg
dGhpcyBmb3JjZXMgYSBwYXJ0aWN1bGFyIHJlZ2lzdGVyLiBBcyBhbiBvdXRwdXQKKyAgICAgICAg
Ly8gcmVwcmVzZW50YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCByZWdpc3RlciBCMyBwaWNrZWQu
CisgICAgICAgIFJlZ2lzdGVyLAorCisgICAgICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRh
dGlvbiwgdGhpcyB0ZWxscyB1cyB3aGF0IHN0YWNrIHNsb3QgQjMgcGlja2VkLiBJdCdzIG5vdCBh
IHZhbGlkCisgICAgICAgIC8vIGlucHV0IHJlcHJlc2VudGF0aW9uLgorICAgICAgICBTdGFjaywK
KworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyBmb3JjZXMgdGhl
IHZhbHVlIHRvIGVuZCB1cCBpbiB0aGUgYXJndW1lbnQgYXJlYSBhdCBzb21lCisgICAgICAgIC8v
IG9mZnNldC4KKyAgICAgICAgLy8gRklYTUU6IFRoZSBTdGFja21hcFNwZWNpYWwgY2xhc3MgbmVl
ZHMgdG8gYWNjb3VudCBmb3IgdGhlIGZhY3QgdGhhdCB0aGVzZSBkb24ndCB0dXJuIGludG8KKyAg
ICAgICAgLy8gQWlyIG9wZXJhbmRzLgorICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTQwCisgICAgICAgIFN0YWNrQXJndW1lbnQsCisKKyAgICAg
ICAgLy8gQXMgYW4gb3V0cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHRoYXQgQjMg
Y29uc3RhbnQtZm9sZGVkIHRoZSB2YWx1ZS4KKyAgICAgICAgQ29uc3RhbnQKKyAgICB9OworICAg
IAorICAgIFZhbHVlUmVwKCkKKyAgICAgICAgOiBtX2tpbmQoQW55KQorICAgIHsKKyAgICB9CisK
KyAgICBleHBsaWNpdCBWYWx1ZVJlcChSZWcgcmVnKQorICAgICAgICA6IG1fa2luZChSZWdpc3Rl
cikKKyAgICB7CisgICAgICAgIHUucmVnID0gcmVnOworICAgIH0KKworICAgIHN0YXRpYyBWYWx1
ZVJlcCByZWcoUmVnIHJlZykKKyAgICB7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcChyZWcpOwor
ICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFjayhpbnRwdHJfdCBvZmZzZXRGcm9tRlAp
CisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQg
PSBTdGFjazsKKyAgICAgICAgcmVzdWx0LnUub2Zmc2V0RnJvbUZQID0gb2Zmc2V0RnJvbUZQOwor
ICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBzdGFj
a0FyZ3VtZW50KGludHB0cl90IG9mZnNldEZyb21TUCkKKyAgICB7CisgICAgICAgIFZhbHVlUmVw
IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFN0YWNrQXJndW1lbnQ7CisgICAgICAg
IHJlc3VsdC51Lm9mZnNldEZyb21TUCA9IG9mZnNldEZyb21TUDsKKyAgICAgICAgcmV0dXJuIHJl
c3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnQoaW50NjRfdCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIFZhbHVlUmVwIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2lu
ZCA9IENvbnN0YW50OworICAgICAgICByZXN1bHQudS52YWx1ZSA9IHZhbHVlOworICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBWYWx1ZVJlcCBjb25zdGFudERvdWJs
ZShkb3VibGUgdmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXA6OmNvbnN0YW50
KGJpdHdpc2VfY2FzdDxpbnQ2NF90Pih2YWx1ZSkpOworICAgIH0KKworICAgIEtpbmQga2luZCgp
IGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBBbnk7IH0KKworICAgIFJlZyByZWcoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBSZWdpc3Rlcik7CisgICAgICAgIHJldHVy
biB1LnJlZzsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAgIHJldHVybiB1Lm9m
ZnNldEZyb21GUDsKKyAgICB9CisKKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tU1AoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFja0FyZ3VtZW50KTsKKyAgICAgICAg
cmV0dXJuIHUub2Zmc2V0RnJvbVNQOworICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBDb25zdGFudCk7CisgICAgICAgIHJl
dHVybiB1LnZhbHVlOworICAgIH0KKworICAgIGRvdWJsZSBkb3VibGVWYWx1ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PGRvdWJsZT4odmFsdWUoKSk7CisgICAg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAg
S2luZCBtX2tpbmQ7CisgICAgdW5pb24gVSB7CisgICAgICAgIFJlZyByZWc7CisgICAgICAgIGlu
dHB0cl90IG9mZnNldEZyb21GUDsKKyAgICAgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbVNQOworICAg
ICAgICBpbnQ2NF90IHZhbHVlOworCisgICAgICAgIFUoKQorICAgICAgICB7CisgICAgICAgICAg
ICBtZW1zZXQodGhpcywgMCwgc2l6ZW9mKCp0aGlzKSk7CisgICAgICAgIH0KKyAgICB9IHU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlZhbHVlUmVwOjpLaW5kKTsKKwor
fSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNWYWx1ZVJlcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0
ZV9wYXR0ZXJuX21hdGNoZXIucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NTAgQEAKKyMhL3Vzci9iaW4vZW52IHJ1YnkKKworIyBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
IyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworcmVxdWlyZSAicGF0aG5hbWUiCisKKyR2YXJJbmRl
eCA9IDAKK2RlZiBuZXdWYXIKKyAgICAkdmFySW5kZXggKz0gMQorICAgICJfdG1wI3skdmFySW5k
ZXh9IgorZW5kCisKK2NsYXNzIFByb2R1Y3Rpb24KKyAgICBhdHRyX3JlYWRlciA6b3JpZ2luLCA6
bmFtZSwgOnZhck5hbWUsIDphbm9ueW1vdXMsIDpvcGNvZGUsIDpjaGlsZHJlbgorCisgICAgZGVm
IGluaXRpYWxpemUob3JpZ2luLCBuYW1lLCBvcGNvZGUsIGNoaWxkcmVuKQorICAgICAgICBAb3Jp
Z2luID0gb3JpZ2luCisgICAgICAgIEBuYW1lID0gbmFtZQorICAgICAgICBAYW5vbnltb3VzID0g
KG5hbWUgPT0gbmlsIG9yIG5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLykKKyAgICAgICAgQHZhck5h
bWUgPSBAYW5vbnltb3VzID8gbmV3VmFyIDogbmFtZSA9fiAvXEFcJC8gPyAkJyA6IG5hbWUKKyAg
ICAgICAgQG9wY29kZSA9IG9wY29kZQorICAgICAgICBAY2hpbGRyZW4gPSBjaGlsZHJlbiA/IGNo
aWxkcmVuIDogW10KKyAgICBlbmQKKworICAgIGRlZiBoYXNPcGNvZGUKKyAgICAgICAgb3Bjb2Rl
ICE9IG5pbAorICAgIGVuZAorCisgICAgZGVmIGVhY2hWYXJpYWJsZSgmcHJvYykKKyAgICAgICAg
Y2hpbGRyZW4uZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgY2hpbGQsIGluZGV4IHwK
KyAgICAgICAgICAgIHlpZWxkIHZhck5hbWUsCisgICAgICAgICAgICAgICAgICBjaGlsZC5uYW1l
LAorICAgICAgICAgICAgICAgICAgY2hpbGQudmFyTmFtZSwKKyAgICAgICAgICAgICAgICAgIGNo
aWxkLmFub255bW91cyA/IChjaGlsZC5vcGNvZGUgPyA6YW5vbkludGVybmFsIDogOmFub25PcGVy
YW5kKSA6IChjaGlsZC5vcGNvZGUgPyA6aW50ZXJuYWwgOiA6b3BlcmFuZCksCisgICAgICAgICAg
ICAgICAgICBpbmRleAorICAgICAgICAgICAgY2hpbGQuZWFjaFZhcmlhYmxlKCZwcm9jKQorICAg
ICAgICB9CisgICAgZW5kCitlbmQKKworY2xhc3MgTWF0Y2hlcgorICAgIGF0dHJfcmVhZGVyIDpu
YW1lLCA6cHJvZHVjdGlvbnMKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUsIHByb2R1Y3Rpb25z
KQorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHByb2R1Y3Rpb25zID0gcHJvZHVjdGlv
bnMKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6ZmlsZU5h
bWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxpbmVO
dW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVtYmVy
ID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje2Zp
bGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisgICAg
YXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXplKG9y
aWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJpbmcg
PSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlmIG90
aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAorICAg
IGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhlcgor
ICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVjdH0g
YXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21tZW50
KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVy
cm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJy
b3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5kCisK
K2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhmaWxl
TmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUgbm90
IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxuXSop
LworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8KKyAg
ICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9IDEK
KyAgICAgICAgd2hlbiAvXEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKikvCisgICAgICAgICAg
ICByZXN1bHQgPDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAk
JikKKyAgICAgICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNl
LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFbPSgpLF0vCisgICAgICAgICAgICByZXN1bHQgPDwg
VG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcmFpc2UgIkxleGVyIGVycm9yIGF0ICN7T3JpZ2luLm5ldyhmaWxl
TmFtZSwgbGluZU51bWJlcikudG9fc30sIHVuZXhwZWN0ZWQgc2VxdWVuY2UgI3tzdHJbMC4uMjBd
Lmluc3BlY3R9IgorICAgICAgICBlbmQKKyAgICAgICAgc3RyID0gJH4ucG9zdF9tYXRjaAorICAg
IGVuZAorICAgIHJlc3VsdAorZW5kCisKK2RlZiBpc0tleXdvcmQodG9rZW4pCisgICAgIyBXZSBj
YW4gZXh0ZW5kIHRoaXMgYXMgd2UgYWRkIG1vcmUga2V5d29yZHMuIExpa2UsIHdlIG1pZ2h0IHdh
bnQgImluY2x1ZGUiIGV2ZW50dWFsbHkuCisgICAgdG9rZW4gPX4gL1xBKChtYXRjaGVyKXwoaW5j
bHVkZSkpXFovCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAv
XEFbYS16QS1aMC05JF0oW2EtekEtWjAtOV9dKilcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4p
CitlbmQKKworY2xhc3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUp
CisgICAgICAgIEB0b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAw
CisgICAgZW5kCisKKyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVu
ZAorCisgICAgZGVmIGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBk
ZWYgcGFyc2VFcnJvcigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRv
a2VuLnBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNv
bW1lbnQuZW1wdHk/CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBv
ZiBmaWxlIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBl
cnJvciBhdCBlbmQgb2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAg
ICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFy
c2VFcnJvcigiRXhwZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAg
ICAgICBhZHZhbmNlCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAg
ICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlk
ZW50aWZpZXIiKSB1bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQor
ICAgICAgICByZXN1bHQKKyAgICBlbmQKKworICAgIGRlZiBhZGRVbmlxdWUobmFtZSwgcHJvZHVj
dGlvbnMsIHByb2R1Y3Rpb24pCisgICAgICAgIGlmIG5hbWUgPT0gcHJvZHVjdGlvbi52YXJOYW1l
CisgICAgICAgICAgICBwYXJzZUVycm9yKCJDaGlsZCBwcm9kdWN0aW9uIGhhcyBzYW1lIG5hbWUg
YXMgcGFyZW50IHByb2R1Y3Rpb24iKQorICAgICAgICBlbmQKKyAgICAgICAgaWYgcHJvZHVjdGlv
bnMuZGV0ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAg
ICAgICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5k
CisgICAgICAgIHByb2R1Y3Rpb25zIDw8IHByb2R1Y3Rpb24KKyAgICBlbmQKKworICAgIGRlZiBw
YXJzZQorICAgICAgICBjb25zdW1lKCJtYXRjaGVyIikKKworICAgICAgICBtYXRjaGVyTmFtZSA9
IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorCisgICAgICAg
IGxvb3AgeworICAgICAgICAgICAgYnJlYWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisg
ICAgICAgICAgICAjIFdlIG1pZ2h0IHdhbnQgdG8gc3VwcG9ydCAiaW5jbHVkZSIuIElmIHdlIGRp
ZCB0aGF0LCBpdCB3b3VsZCBnbyBoZXJlLgorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHBhcnNl
UHJvZHVjdGlvbgorICAgICAgICAgICAgCisgICAgICAgICAgICBpZiBwcm9kdWN0aW9ucy5kZXRl
Y3QgeyB8IGVudHJ5IHwgZW50cnkubmFtZSA9PSBwcm9kdWN0aW9uLm5hbWUgfQorICAgICAgICAg
ICAgICAgIHBhcnNlRXJyb3IoIkR1cGxpY2F0ZSBwcm9kdWN0aW9uIikKKyAgICAgICAgICAgIGVu
ZAorCisgICAgICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgICAgIH0KKwor
ICAgICAgICBNYXRjaGVyLm5ldyhtYXRjaGVyTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgZW5kCisK
KyAgICBkZWYgcGFyc2VQcm9kdWN0aW9uCisgICAgICAgIG9yaWdpbiA9IHRva2VuLm9yaWdpbgor
ICAgICAgICBuYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICBpZiB0b2tlbiA9PSAi
PSIKKyAgICAgICAgICAgIGNvbnN1bWUoIj0iKQorICAgICAgICAgICAgb3Bjb2RlID0gY29uc3Vt
ZUlkZW50aWZpZXIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICBlbHNpZiB0b2tl
biA9PSAiKCIKKyAgICAgICAgICAgIGNvbnN1bWUoIigiKQorICAgICAgICAgICAgb3Bjb2RlID0g
bmFtZQorICAgICAgICAgICAgbmFtZSA9IG5pbAorICAgICAgICBlbHNlCisgICAgICAgICAgICBy
ZXR1cm4gUHJvZHVjdGlvbi5uZXcob3JpZ2luLCBuYW1lLCBuaWwsIG5pbCkKKyAgICAgICAgZW5k
CisgICAgICAgIAorICAgICAgICBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGxvb3AgeworICAg
ICAgICAgICAgYnJlYWsgaWYgdG9rZW4gPT0gIikiCisKKyAgICAgICAgICAgIGFkZFVuaXF1ZShu
YW1lLCBwcm9kdWN0aW9ucywgcGFyc2VQcm9kdWN0aW9uKQorCisgICAgICAgICAgICBicmVhayBp
ZiB0b2tlbiA9PSAiKSIKKyAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICB9CisKKyAg
ICAgICAgIyBBZHZhbmNlIGFmdGVyIHRoZSAiKSIKKyAgICAgICAgYWR2YW5jZQorCisgICAgICAg
IFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBwcm9kdWN0aW9ucykKKyAgICBl
bmQKK2VuZAorCitmaWxlTmFtZSA9IEFSR1ZbMF0KKworcGFyc2VyID0gUGFyc2VyLm5ldyhJTzo6
cmVhZChmaWxlTmFtZSksIGZpbGVOYW1lKQorbWF0Y2hlciA9IHBhcnNlci5wYXJzZQorCitjbGFz
cyBTdWJNYXRjaAorICAgIGF0dHJfcmVhZGVyIDppbmRleE1hcCwgOnByb2R1Y3Rpb25zCisgICAg
CisgICAgZGVmIGluaXRpYWxpemUoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgQGlu
ZGV4TWFwID0gW10KKyAgICAgICAgQHByb2R1Y3Rpb25zID0gW10KKyAgICAgICAgaW5kZXhMaXN0
LmVhY2ggeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBAaW5kZXhNYXAgPDwg
aW5kZXgKKyAgICAgICAgICAgIEBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uc1tpbmRleF0KKyAg
ICAgICAgfQorICAgIGVuZAorCisgICAgZGVmIG1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAg
ICAgIGluZGV4TGlzdC5tYXAgeworICAgICAgICAgICAgfCBpbmRleCB8CisgICAgICAgICAgICBA
aW5kZXhNYXBbaW5kZXhdCisgICAgICAgIH0KKyAgICBlbmQKK2VuZAorCiskc3RkZXJyLnB1dHMg
IkdlbmVyYXRpbmcgY29kZSBmb3IgI3tmaWxlTmFtZX0uIgorCitGaWxlLm9wZW4oIkIzIiArIG1h
dGNoZXIubmFtZSArICIuaCIsICJ3IikgeworICAgIHwgb3V0cCB8CisKKyAgICBvdXRwLnB1dHMg
Ii8vIEdlbmVyYXRlZCBieSBnZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIgZnJvbSAje2ZpbGVO
YW1lfSAtLSBkbyBub3QgZWRpdCEiCisKKyAgICBvdXRwLnB1dHMgIiNpZm5kZWYgQjMje21hdGNo
ZXIubmFtZX1faCIKKyAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQjMje21hdGNoZXIubmFtZX1faCIK
KyAgICAKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwiQjNWYWx1ZS5oXCIiCisgICAgCisgICAg
b3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsiCisKKyAgICBvdXRwLnB1
dHMgInRlbXBsYXRlPHR5cGVuYW1lIEFkYXB0b3I+IgorICAgIG91dHAucHV0cyAiYm9vbCBydW4j
e21hdGNoZXIubmFtZX0oVmFsdWUqIF92YWx1ZSwgQWRhcHRvciYgYWRhcHRvcikiCisgICAgb3V0
cC5wdXRzICJ7IgorCisgICAgIyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBlbWl0IHByb3Blcmx5
IGluZGVudGVkIGNvZGUsIGJlY2F1c2UgaXQncyBhIHJlY3Vyc2l2ZSBlbWl0dGVyLiBJZiB5b3UK
KyAgICAjIHdhbnQgdG8gc2VlIHRoZSBjb2RlIG5pY2VseSBmb3JtYXR0ZWQsIG9wZW4gaXQgaW4g
YSBnb29kIHRleHQgZWRpdG9yIGFuZCBhc2sgaXQgdG8gZm9ybWF0IGl0CisgICAgIyBmb3IgeW91
LgorCisgICAgIyBJbiBvZGQgc2l0dWF0aW9ucywgd2UgbWF5IG5vdCB1c2UgdGhlIGlucHV0IHZh
bHVlLiBUZWxsIHRoZSBjb21waWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgb3V0cC5w
dXRzICJVTlVTRURfUEFSQU0oX3ZhbHVlKTsiCisgICAgICAgIAorICAgICMgVGhpcyBqdXN0IHBy
b3RlY3RzIHRoZSBjYWxsZXIgZnJvbSBoYXZpbmcgdG8gd29ycnkgYWJvdXQgcHJvZHVjdGlvbnMg
aGF2aW5nIGRpZmZlcmVudCBsZW5ndGhzLgorICAgIGRlZiBtYXRjaExlbmd0aChvdXRwLCB2YWx1
ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJv
ZHVjdGlvbnMuZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5k
ZXggfAorICAgICAgICAgICAgaWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4
TGlzdHNbLTFdWzBdXS5jaGlsZHJlbi5sZW5ndGggPT0gcHJvZHVjdGlvbi5jaGlsZHJlbi5sZW5n
dGgKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzWy0xXSA8PCBpbmRleAorICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlzdHMgPDwgW2luZGV4XQorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKworICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAg
fCBpbmRleExpc3QgfAorICAgICAgICAgICAgbGVuZ3RoID0gcHJvZHVjdGlvbnNbaW5kZXhMaXN0
WzBdXS5jaGlsZHJlbi5sZW5ndGgKKyAgICAgICAgICAgIGlmIGxlbmd0aCA+IDAKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImlmICgje3ZhbHVlTmFtZX0tPmNoaWxkcmVuKCkuc2l6ZSgpID49
ICN7bGVuZ3RofSkgeyIKKyAgICAgICAgICAgICAgICB5aWVsZCBpbmRleExpc3QKKyAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
eWllbGQgaW5kZXhMaXN0CisgICAgICAgICAgICBlbmQKKyAgICAgICAgfQorICAgIGVuZAorCisg
ICAgIyBUaGlzIGVmZmljaWVudGx5IHNlbGVjdHMgZnJvbSB0aGUgZ2l2ZW4gc2V0IG9mIHByb2R1
Y3Rpb25zLiBJdCBhc3N1bWVzIHRoYXQgcHJvZHVjdGlvbnMKKyAgICAjIGFyZSBub3QgZHVwbGlj
YXRlZC4gSXQgeWllbGRzIHRoZSBpbmRleCBvZiB0aGUgZm91bmQgcHJvZHVjdGlvbiwgYW5kIHRo
ZSBjb3JvdXRpbmUgaXMKKyAgICAjIHJlc3BvbnNpYmxlIGZvciBlbWl0dGluZyBzcGVjaWZpYyBj
b2RlIGZvciB0aGF0IHByb2R1Y3Rpb24uIFRoZSBjb3JvdXRpbmUgaXMgZ2l2ZW4gbGlzdHMgb2YK
KyAgICAjIGluZGljZXMgb2YgcG9zc2libHktbWF0Y2hpbmcgcHJvZHVjdGlvbnMuCisgICAgZGVm
IG1hdGNoUHJvZHVjdGlvbnMob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAg
IyBGaXJzdCwgc3BsaXQgdGhlIHByb2R1Y3Rpb25zIGxpc3QgaW50byBydW5zIG9mIHByb2R1Y3Rp
b25zIHdpdGggYW4gb3Bjb2RlIGFuZCBwcm9kdWN0aW9ucworICAgICAgICAjIHdpdGhvdXQgb25l
LgorICAgICAgICBpbmRleExpc3RzID0gW10KKyAgICAgICAgcHJvZHVjdGlvbnMuZWFjaF93aXRo
X2luZGV4IHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiwgaW5kZXggfAorICAgICAgICAgICAg
aWYgaW5kZXhMaXN0c1stMV0gYW5kIHByb2R1Y3Rpb25zW2luZGV4TGlzdHNbLTFdWzBdXS5oYXNP
cGNvZGUgPT0gcHJvZHVjdGlvbi5oYXNPcGNvZGUKKyAgICAgICAgICAgICAgICBpbmRleExpc3Rz
Wy0xXSA8PCBpbmRleAorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGluZGV4TGlz
dHMgPDwgW2luZGV4XQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgICMgTm93LCBlbWl0IHBhdHRlcm4gbWF0Y2hpbmcgY29kZS4gV2UgZG8gaXQgZGlmZmVyZW50
bHkgZm9yIGxpc3RzIHdpdGggYW4gb3Bjb2RlIHRoYW4gZm9yCisgICAgICAgICMgbGlzdHMgd2l0
aG91dCBvbmUuCisgICAgICAgIGluZGV4TGlzdHMuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4
TGlzdCB8CisgICAgICAgICAgICBpZiBwcm9kdWN0aW9uc1tpbmRleExpc3RbMF1dLmhhc09wY29k
ZQorICAgICAgICAgICAgICAgICMgTm93LCB3ZSBzcGxpdCB0aGlzIGluZGV4IGxpc3QgaW50byBn
cm91cHMgZm9yIGVhY2ggb3Bjb2RlLgorICAgICAgICAgICAgICAgIGdyb3VwcyA9IHt9CisgICAg
ICAgICAgICAgICAgaW5kZXhMaXN0LmVhY2ggeworICAgICAgICAgICAgICAgICAgICB8IGluZGV4
IHwKKyAgICAgICAgICAgICAgICAgICAgcHJvZHVjdGlvbiA9IHByb2R1Y3Rpb25zW2luZGV4XQor
ICAgICAgICAgICAgICAgICAgICBpZiBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdCisgICAgICAg
ICAgICAgICAgICAgICAgICBncm91cHNbcHJvZHVjdGlvbi5vcGNvZGVdIDw8IGluZGV4CisgICAg
ICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3Vwc1twcm9k
dWN0aW9uLm9wY29kZV0gPSBbaW5kZXhdCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICMgRW1pdCBhIHN3aXRjaCBzdGF0ZW1lbnQu
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7dmFsdWVOYW1lfS0+b3Bjb2Rl
KCkpIHsiCisgICAgICAgICAgICAgICAgZ3JvdXBzLmVhY2hfcGFpciB7CisgICAgICAgICAgICAg
ICAgICAgIHwgb3Bjb2RlLCBzdWJJbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImNhc2UgI3tvcGNvZGV9OiIKKyAgICAgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBT
dWJNYXRjaC5uZXcoc3ViSW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICAg
ICAgbWF0Y2hMZW5ndGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgICAg
ICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
In0iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRj
aC5uZXcoaW5kZXhMaXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgICAgICBtYXRjaExlbmd0
aChvdXRwLCB2YWx1ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zKSB7CisgICAgICAgICAgICAg
ICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gu
bWFwSW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bmQKKyAgICAgICAgfQorICAgIGVuZAorCisgICAgIyBUYWtlcyBwcm9kdWN0aW9ucyB0aGF0IGhh
dmUgdGhlIHNhbWUgb3Bjb2RlIGFuZCB0aGUgc2FtZSBsZW5ndGggYW5kIHNlbGVjdHMgZnJvbSB0
aGVtIGJhc2VkIG9uCisgICAgIyB0aGUgcHJvZHVjdGlvbnMgYXQgdGhlIGdpdmVuIGNvbHVtbi4K
KyAgICBkZWYgbWF0Y2hDb2x1bW4ob3V0cCwgdmFsdWVOYW1lLCBwcm9kdWN0aW9ucywgY29sdW1u
SW5kZXgpCisgICAgICAgIGlmIGNvbHVtbkluZGV4ID49IHByb2R1Y3Rpb25zWzBdLmNoaWxkcmVu
Lmxlbmd0aAorICAgICAgICAgICAgeWllbGQgKDAuLi4ocHJvZHVjdGlvbnMuc2l6ZSkpLnRvX2EK
KyAgICAgICAgICAgIHJldHVybgorICAgICAgICBlbmQKKworICAgICAgICBzdWJWYWx1ZSA9IG5l
d1ZhcgorICAgICAgICAKKyAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICBvdXRwLnB1dHMg
IlZhbHVlKiAje3N1YlZhbHVlfSA9ICN7dmFsdWVOYW1lfS0+Y2hpbGQoI3tjb2x1bW5JbmRleH0p
OyIKKworICAgICAgICAjIFdlIG1heSBub3QgdXNlIHRoaXMgdmFsdWUuIFRlbGwgdGhlIGNvbXBp
bGVyIHRvIGNoaWxsIG91dCBhYm91dCBpdC4KKyAgICAgICAgb3V0cC5wdXRzICJVTlVTRURfUEFS
QU0oI3tzdWJWYWx1ZX0pOyIKKyAgICAgICAgCisgICAgICAgIHN1YlByb2R1Y3Rpb25zID0gcHJv
ZHVjdGlvbnMubWFwIHsKKyAgICAgICAgICAgIHwgcHJvZHVjdGlvbiB8CisgICAgICAgICAgICBw
cm9kdWN0aW9uLmNoaWxkcmVuW2NvbHVtbkluZGV4XQorICAgICAgICB9CisKKyAgICAgICAgbWF0
Y2hSZWN1cnNpdmVseShvdXRwLCBzdWJWYWx1ZSwgc3ViUHJvZHVjdGlvbnMpIHsKKyAgICAgICAg
ICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGlu
ZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1
ZU5hbWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCBjb2x1bW5JbmRleCArIDEpIHsKKyAgICAgICAg
ICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFw
SW5kZXhMaXN0KGluZGV4TGlzdCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IG91dHAucHV0cyAifSIKKyAgICBlbmQKKworICAgIGRlZiBtYXRjaFJlY3Vyc2l2ZWx5KG91dHAs
IHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAgIG1hdGNoUHJvZHVjdGlvbnMob3V0cCwg
dmFsdWVOYW1lLCBwcm9kdWN0aW9ucykgeworICAgICAgICAgICAgfCBpbmRleExpc3QgfAorICAg
ICAgICAgICAgIyBXZSBhcmUgZ3VhcmFudGVlZCB0aGF0IHRoaXMgaW5kZXggbGlzdCBjb250YWlu
cyBwcm9kdWN0aW9ucyB3aXRoIHRoZSBzYW1lIG9wY29kZSBhbmQKKyAgICAgICAgICAgICMgdGhl
IHNhbWUgbGVuZ3RoLgorICAgICAgICAgICAgc3ViTWF0Y2ggPSBTdWJNYXRjaC5uZXcoaW5kZXhM
aXN0LCBwcm9kdWN0aW9ucykKKyAgICAgICAgICAgIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFt
ZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMsIDApIHsKKyAgICAgICAgICAgICAgICB8IGluZGV4TGlz
dCB8CisgICAgICAgICAgICAgICAgeWllbGQgc3ViTWF0Y2gubWFwSW5kZXhMaXN0KGluZGV4TGlz
dCkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIGVuZAorCisgICAgbWF0Y2hSZWN1cnNp
dmVseShvdXRwLCAiX3ZhbHVlIiwgbWF0Y2hlci5wcm9kdWN0aW9ucykgeworICAgICAgICB8IGlu
ZGV4TGlzdCB8CisgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXgg
fAorICAgICAgICAgICAgcHJvZHVjdGlvbiA9IG1hdGNoZXIucHJvZHVjdGlvbnNbaW5kZXhdCisg
ICAgICAgICAgICBvdXRwLnB1dHMgInsiCisgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAj
e3Byb2R1Y3Rpb24udmFyTmFtZX0gPSBfdmFsdWU7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJV
TlVTRURfUEFSQU0oI3twcm9kdWN0aW9uLnZhck5hbWV9KTsiCisgICAgICAgICAgICBpbnRlcm5h
bEFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBvcGVyYW5kQXJndW1lbnRzID0gW10KKyAgICAg
ICAgICAgIHRyeUFyZ3VtZW50cyA9IFtdCisgICAgICAgICAgICBudW1TY29wZXMgPSAwCisgICAg
ICAgICAgICBzZWVuID0ge30KKworICAgICAgICAgICAgIyBGSVhNRTogV2Ugd2FudCB0byBiZSBh
YmxlIHRvIGNvbWJpbmUgcGF0dGVybiBtYXRjaGVycywgbGlrZSBoYXZlIHRoZSBwYXR0ZXJuIG1h
dGNoIHJ1bGUKKyAgICAgICAgICAgICMgZm9yIEJyYW5jaCBpbiB0aGUgbG93ZXJpbmcgcGF0Y2hl
ciBkZWxlZ2F0ZSB0byBhIG1hdGNoZXIgdGhhdCBjYW4gZGVkdWNlIHRoZSBraW5kIG9mCisgICAg
ICAgICAgICAjIGNvbXBhcmlzb24gdGhhdCB3ZSdyZSBkb2luZy4gV2UgY291bGQgdGhlbiByZXVz
ZSB0aGF0IGxhdHRlciBtYXRjaGVyIGZvciBDaGVjayBhbmQKKyAgICAgICAgICAgICMgdW5mdXNl
ZCBjb21wYXJlLiBUaGUga2V5IHRvIG1ha2luZyBzdWNoIGEgZGVsZWdhdGlvbiB3b3JrIGlzIHRv
IGhhdmUgdGhlIGlubmVyIG1hdGNoZXIKKyAgICAgICAgICAgICMgKHRoZSBjb21wYXJpc29uIG1h
dGNoZXIgaW4gdGhpcyBjYXNlKSBrZWVwIGNhc2NhZGluZyBpZiBpdCBlbmNvdW50ZXJzIGEgcnVs
ZSB0aGF0CisgICAgICAgICAgICAjIHByb2R1Y2VzIHNvbWV0aGluZyB0aGF0IHRoZSBvdXRlciBt
YXRjaGVyIGNhbm5vdCBoYW5kbGUuIEl0J3Mgbm90IG9idmlvdXMgdGhhdCB0aGUKKyAgICAgICAg
ICAgICMgY29tcGFyaXNvbiBtYXRjaGVyIHdvdWxkIG5lZWQgdGhpcywgYnV0IHRoZSBhZGRyZXNz
IG1hdGNoZXIgcHJvYmFibHkgd2lsbC4gRm9yIGV4YW1wbGUsCisgICAgICAgICAgICAjIHdlIG1h
eSBoYXZlIGEgU3RvcmVBZGRMb2FkIHJ1bGUgdGhhdCBkZWxlZ2F0ZXMgdG8gdGhlIGFkZHJlc3Mg
bWF0Y2hlciwgYW5kIHRoZSBhZGRyZXNzCisgICAgICAgICAgICAjIG1hdGNoZXIgbWF5IHByb2R1
Y2UgYW4gYWRkcmVzcyB0aGF0IHRoZSBsb3dlcmluZyBtYXRjaGVyIGNhbm5vdCB1c2UgYmVjYXVz
ZSB3aGlsZSB0aGUKKyAgICAgICAgICAgICMgQWRkIGZvcm0gZG9lcyBhY2NlcHQgYWRkcmVzc2Vz
IGl0IG1heSBub3QgYWNjZXB0IHRoZSBwYXJ0aWN1bGFyIGFkZHJlc3MgdGhhdCB0aGUKKyAgICAg
ICAgICAgICMgYWRkcmVzcyBtYXRjaGVyIHByb2R1Y2VkLiBJbiB0aGF0IGNhc2UsIGluc3RlYWQg
b2YgZ2l2aW5nIHVwIG9uIHRoZSBTdG9yZUFkZExvYWQgcnVsZSwKKyAgICAgICAgICAgICMgd2Ug
d2FudCB0aGUgYWRkcmVzcyBtYXRjaGVyIHRvIGp1c3QgdHJ5IGEgZGlmZmVyZW50IGFkZHJlc3Mu
IFRoZSBjb21wYXJpc29uIG1hdGNoZXIKKyAgICAgICAgICAgICMgbWlnaHQgd2FudCB0aGlzIGp1
c3QgZm9yIGJldHRlciBjb250cm9sbGluZyB3aGVuIHRvIHBpbiB2YXJpYWJsZXMuIEN1cnJlbnRs
eSwgaWYgaXQKKyAgICAgICAgICAgICMgY29uc3RydWN0ZWQgc29tZSBjb2RlLCBpdCB3b3VsZCBh
bHNvIHBpbiB0aGUgdmFyaWFibGVzIHRoYXQgaXQgdXNlZC4gSWYgdGhlIGxvd2VyaW5nCisgICAg
ICAgICAgICAjIG1hdGNoZXIgdGhlbiBkZWNpZGVkIHRvIHJlamVjdCB0aGUgY29kZSBjcmVhdGVk
IGJ5IHRoZSBjb21wYXJpc29uIG1hdGNoZXIsIGl0IHdvdWxkCisgICAgICAgICAgICAjIGhhdmUg
YSBoYXJkIHRpbWUgInVucGlubmluZyIgdGhvc2UgdmFyaWFibGVzLiBCdXQgaWYgd2UgaGFkIHNv
bWUga2luZCBvZiBkZWxlZ2F0aW9uLCB3ZQorICAgICAgICAgICAgIyBjb3VsZCBoYXZlIHRoZSBw
aW5uaW5nIG9mIHRoZSBjb21wYXJpc29uIG1hdGNoZXIgaGFwcGVuIG9ubHkgaWYgdGhlIGxvd2Vy
aW5nIG1hdGNoZXIKKyAgICAgICAgICAgICMgYWNjZXB0ZWQuCisgICAgICAgICAgICAjCisgICAg
ICAgICAgICAjIFRoaXMgY291bGQgYWxsIGJlIGFjY29tcGxpc2hlZCBieSBoYXZpbmcgdHJ5Qmxh
aCgpIHJldHVybiBzb21ldGhpbmcsIGFuZCBoYXZlIHRoZQorICAgICAgICAgICAgIyBtYXRjaGVy
IGFsc28gdGFrZSBhIGZ1bmN0b3IgYXJndW1lbnQgdGhhdCBhY2NlcHRzIHdoYXQgdHJ5QmxhaCgp
IHJldHVybnMuIFNvIGluc3RlYWQgb2YKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgaWYg
KHRyeUJsYWgoKSkgb2s7CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFdlIHdvdWxkIGhh
dmU6CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGlmIChmdW5jdG9yKHRyeUJsYWgoKSkg
b2s7CisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIFdoZW4gbG93ZXJpbmcgZGVjaWRlZCB0
byBkZWxlZ2F0ZSB0byB0aGUgYWRkcmVzcyBvciBjb21wYXJpc29uIG1hdGNoZXIsIGl0IGNvdWxk
IHN1cHBseQorICAgICAgICAgICAgIyBhIGZ1bmN0b3IgdGhhdCBkZWNpZGVzIHdoZXRoZXIgdGhl
IHRoaW5nIHRoYXQgdGhlIHN1Yi1tYXRjaGVyIHNlbGVjdGVkIGlzIGluZGVlZAorICAgICAgICAg
ICAgIyB1c2VmdWwuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIEluIHRoZSBuZWFyIHRl
cm0sIHdlIHByb2JhYmx5IHdvbid0IG5lZWQgdGhpcy4gQnV0IHdlIHdpbGwgZGVmaW5pdGVseSBu
ZWVkIGl0IGFzIHdlCisgICAgICAgICAgICAjIGV4cGFuZCB0byBlZmZpY2llbnRseSBzdXBwb3J0
IG1vcmUgcGxhdGZvcm1zLiBPbiBYODZfNjQsIGFueSBicmFuY2hpbmcgaW5zdHJ1Y3Rpb24gaXMK
KyAgICAgICAgICAgICMgdXNhYmxlIGluIGFueSBjb250ZXh0LCBhbmQgYW55IGFkZHJlc3Mgc2hv
dWxkIGJlIHVzYWJsZSBpbiBhbnkgY29udGV4dCAoYW5kIHRoZSBvbmx5CisgICAgICAgICAgICAj
IGNhc2VzIHdoZXJlIGl0IHdvdWxkbid0IGJlIGlzIGlmIHdlIGhhdmUgaG9sZXMgaW4gdGhlIE1h
Y3JvQXNzZW1ibGVyKS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDU1OQorICAgICAgICAgICAgCisgICAgICAg
ICAgICBwcm9kdWN0aW9uLmVhY2hWYXJpYWJsZSB7CisgICAgICAgICAgICAgICAgfCBwYXJlbnRW
YXJOYW1lLCBjaGlsZE5hbWUsIGNoaWxkVmFyTmFtZSwga2luZCwgaW5kZXggfAorICAgICAgICAg
ICAgICAgIGxvYWRFeHByID0gIiN7cGFyZW50VmFyTmFtZX0tPmNoaWxkKCN7aW5kZXh9KSIKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiBzZWVuW2NoaWxkVmFyTmFtZV0KKyAg
ICAgICAgICAgICAgICAgICAgdG1wID0gbmV3VmFyCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiVmFsdWUqICN7dG1wfSA9ICN7bG9hZEV4cHJ9OyIKKyAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJpZiAoI3t0bXB9ID09ICN7Y2hpbGRWYXJOYW1lfSkgeyIKKyAgICAgICAgICAg
ICAgICAgICAgbnVtU2NvcGVzICs9IDEKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgICAgIHNlZW5bY2hpbGRWYXJOYW1lXSA9IHRydWUKKyAgICAgICAgICAgICAgICAgICAg
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiVmFsdWUqICN7Y2hpbGRWYXJOYW1lfSA9
ICN7bG9hZEV4cHJ9OyIKKworICAgICAgICAgICAgICAgICAgICAjIEZJWE1FOiBDb25zaWRlciBn
ZXR0aW5nIHJpZCBvZiB0aGUgJCBwcmVmaXguCisgICAgICAgICAgICAgICAgICAgICMgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUyNworICAgICAgICAgICAgICAg
ICAgICBpZiBjaGlsZE5hbWUgPX4gL1xBXCQvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBj
aGlsZE5hbWUgPX4gL1xBXCQoWzAtOV0rKVxaLworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aXNJbnQoI3skMX0pKSB7IgorICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiaWYgKCN7Y2hpbGRWYXJOYW1lfS0+aGFzSW50KCkpIHsiCisgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgaW50ZXJuYWxBcmd1bWVudHMgPDwgY2hpbGRWYXJOYW1lIGlmIGtpbmQgPT0gOmludGVy
bmFsIG9yIGtpbmQgPT0gOmFub25JbnRlcm5hbAorICAgICAgICAgICAgICAgICAgICBvcGVyYW5k
QXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDpvcGVyYW5kIG9yIGtpbmQgPT0g
OmFub25PcGVyYW5kCisgICAgICAgICAgICAgICAgICAgIHRyeUFyZ3VtZW50cyA8PCBjaGlsZFZh
ck5hbWUgaWYga2luZCA9PSA6aW50ZXJuYWwgb3Iga2luZCA9PSA6b3BlcmFuZAorICAgICAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYWRh
cHRvci5hY2NlcHRSb290KF92YWx1ZSkiCisgICAgICAgICAgICB1bmxlc3MgaW50ZXJuYWxBcmd1
bWVudHMuZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2Vw
dEludGVybmFscygiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIpIikKKyAgICAg
ICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMuZW1wdHk/Cisg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzKCImJiBhZGFwdG9yLmFjY2VwdE9wZXJhbmRzKCIgKyBv
cGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci50cnkje3Byb2R1Y3Rpb24ubmFtZX0oIiArIHRy
eUFyZ3VtZW50cy5qb2luKCIsICIpICsgIikpIHsiKQorICAgICAgICAgICAgb3V0cC5wdXRzICJh
ZGFwdG9yLmFjY2VwdFJvb3RMYXRlKF92YWx1ZSk7IgorICAgICAgICAgICAgdW5sZXNzIGludGVy
bmFsQXJndW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYWRhcHRvci5h
Y2NlcHRJbnRlcm5hbHNMYXRlKCIgKyBpbnRlcm5hbEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7
IgorICAgICAgICAgICAgZW5kCisgICAgICAgICAgICB1bmxlc3Mgb3BlcmFuZEFyZ3VtZW50cy5l
bXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3IuYWNjZXB0T3BlcmFuZHNM
YXRlKCIgKyBvcGVyYW5kQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKTsiCisgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIHRydWU7IgorICAgICAgICAgICAgb3V0
cC5wdXRzICJ9IgorICAgICAgICAgICAgbnVtU2NvcGVzLnRpbWVzIHsKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIn0iCisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRwLnB1dHMgIn0i
CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgb3V0cC5wdXRzICIgICAgcmV0dXJuIGZhbHNl
OyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAgb3V0cC5wdXRzICJ9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMiCisKKyAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBCMyN7bWF0Y2hlci5uYW1l
fV9oIgorfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDM3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFs
dWUuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb25z
dDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0UHRyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0Nv
bnRyb2xWYWx1ZS5oIgorI2luY2x1ZGUgIkIzR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJCM01lbW9y
eVZhbHVlLmgiCisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkluaXRpYWxpemVU
aHJlYWRpbmcuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgorI2luY2x1ZGUgIlZNLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCit1c2luZyBuYW1l
c3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK25hbWVzcGFjZSB7CisKKy8v
IE5vdGhpbmcgZmFuY3kgZm9yIG5vdzsgd2UganVzdCB1c2UgdGhlIGV4aXN0aW5nIFdURiBhc3Nl
cnRpb24gbWFjaGluZXJ5LgorI2RlZmluZSBDSEVDSyh4KSBSRUxFQVNFX0FTU0VSVCh4KQorCitW
TSogdm07CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KK1Qg
Y29tcGlsZUFuZFJ1bihQcm9jZWR1cmUmIHByb2NlZHVyZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKK3sKKyAgICBDQ2FsbEhlbHBlcnMgaml0KHZtKTsKKyAgICBnZW5lcmF0ZShwcm9jZWR1cmUs
IGppdCk7CisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKCp2bSwgaml0LCBudWxscHRyKTsKKyAg
ICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgY29kZSA9IEZJTkFMSVpFX0NPREUobGlua0J1ZmZlciwg
KCJ0ZXN0YjMiKSk7CisgICAgVCAoKmZ1bmN0aW9uKShBcmd1bWVudHMuLi4pID0gYml0d2lzZV9j
YXN0PFQoKikoQXJndW1lbnRzLi4uKT4oY29kZS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7
CisgICAgcmV0dXJuIGZ1bmN0aW9uKGFyZ3VtZW50cy4uLik7Cit9CisKK3ZvaWQgdGVzdDQyKCkK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIFZhbHVlKiBjb25zdDQyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIDQyKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVl
Pihwcm9jLCBSZXR1cm4sIE9yaWdpbigpLCBjb25zdDQyKTsKKworICAgIENIRUNLKGNvbXBpbGVB
bmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisKK3ZvaWQgdGVzdExvYWQ0MigpCit7CisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBpbnQgeCA9IDQyOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAg
ICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8TWVt
b3J5VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAorICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAm
eCkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSA0Mik7Cit9CisK
K3ZvaWQgdGVzdEFyZyhpbnQgYXJndW1lbnQpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAg
QmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8
Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCBh
cmd1bWVudCkgPT0gYXJndW1lbnQpOworfQorCit2b2lkIHRlc3RBZGRBcmdzKGludCBhLCBpbnQg
YikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRH
UFIwKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9j
LCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIxKSkpOworCisgICAgQ0hFQ0soY29tcGls
ZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyBiKTsKK30KKwordm9pZCB0ZXN0QWRkQXJn
czMyKGludCBhLCBpbnQgYikKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2Nr
KiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFs
dWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMs
IE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1Zh
bHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBP
cmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKSk7CisKKyAgICBDSEVD
Syhjb21waWxlQW5kUnVuPGludD4ocHJvYywgYSwgYikgPT0gYSArIGIpOworfQorCit2b2lkIHRl
c3RTdG9yZShpbnQgdmFsdWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgc2xvdCA9IDB4YmFhZGJlZWY7Cisg
ICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgcHJvYywgU3RvcmUsIE9y
aWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJv
YywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50
UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjApKSwKKyAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAmc2xvdCkp
OworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLCByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4o
KSwgMCkpOworCisgICAgQ0hFQ0soIWNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB2YWx1ZSkpOwor
ICAgIENIRUNLKHNsb3QgPT0gdmFsdWUpOworfQorCit2b2lkIHRlc3RUcnVuYyhpbnQ2NF90IHZh
bHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9j
LmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICBwcm9jLCBUcnVuYywgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5h
cHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3Vt
ZW50R1BSMCkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB2YWx1ZSkg
PT0gc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpOworfQorCit2b2lkIHRlc3RBZGQxKGludCB2YWx1
ZSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5h
ZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBw
cm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmln
aW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgMSkpKTsKKworICAgIENIRUNLKGNvbXBp
bGVBbmRSdW48aW50Pihwcm9jLCB2YWx1ZSkgPT0gdmFsdWUgKyAxKTsKK30KKwordm9pZCB0ZXN0
U3RvcmVBZGRMb2FkKGludCBhbW91bnQpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFz
aWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgc2xvdCA9IDM3OworICAg
IENvbnN0UHRyVmFsdWUqIHNsb3RQdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksICZzbG90KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KAorICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5l
dzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAg
cm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCks
IHNsb3RQdHIpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIGFtb3VudCkpLAorICAgICAgICBzbG90UHRyKTsKKyAgICByb290LT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsK
KworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYykpOworICAgIENIRUNLKHNsb3Qg
PT0gMzcgKyBhbW91bnQpOworfQorCit2b2lkIHRlc3RTdG9yZUFkZEFuZExvYWQoaW50IGFtb3Vu
dCwgaW50IG1hc2spCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9v
dCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgc2xvdCA9IDM3OworICAgIENvbnN0UHRyVmFs
dWUqIHNsb3RQdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksICZzbG90KTsKKyAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICBw
cm9jLCBTdG9yZSwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICBwcm9jLCBCaXRBbmQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAg
ICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50
MzIsIE9yaWdpbigpLCBzbG90UHRyKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8
Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYW1vdW50KSksCisgICAgICAgICAgICByb290
LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihwcm9jLCBPcmlnaW4oKSwgbWFzaykpLAorICAgICAg
ICBzbG90UHRyKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIDApKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGlu
dD4ocHJvYykpOworICAgIENIRUNLKHNsb3QgPT0gKCgzNyArIGFtb3VudCkgJiBtYXNrKSk7Cit9
CisKK3ZvaWQgdGVzdEFkZDFVbmNvbW11dGVkKGludCB2YWx1ZSkKK3sKKyAgICBQcm9jZWR1cmUg
cHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIHJvb3Qt
PmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigp
LAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRk
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCAxKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6
YXJndW1lbnRHUFIwKSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCB2
YWx1ZSkgPT0gdmFsdWUgKyAxKTsKK30KKwordm9pZCB0ZXN0TG9hZE9mZnNldCgpCit7CisgICAg
UHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsK
KyAgICBpbnQgYXJyYXlbXSA9IHsgMSwgMiB9OworICAgIENvbnN0UHRyVmFsdWUqIGFycmF5UHRy
ID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBhcnJheSk7
CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVy
biwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAg
ICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9y
eVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIGFycmF5UHRyLCAwKSwKKyAgICAg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9y
aWdpbigpLCBhcnJheVB0ciwgc2l6ZW9mKGludCkpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5k
UnVuPGludD4ocHJvYykgPT0gYXJyYXlbMF0gKyBhcnJheVsxXSk7Cit9CisKK3ZvaWQgdGVzdExv
YWRPZmZzZXROb3RDb25zdGFudCgpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICBpbnQgYXJyYXlbXSA9IHsgMSwgMiB9
OworICAgIFZhbHVlKiBhcnJheVB0ciA9IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVl
Pihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKTsKKyAgICByb290LT5hcHBl
bmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAg
ICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3Jp
Z2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExv
YWQsIEludDMyLCBPcmlnaW4oKSwgYXJyYXlQdHIsIDApLAorICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksIGFycmF5UHRy
LCBzaXplb2YoaW50KSkpKTsKKworICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCAm
YXJyYXlbMF0pID09IGFycmF5WzBdICsgYXJyYXlbMV0pOworfQorCit2b2lkIHRlc3RMb2FkT2Zm
c2V0VXNpbmdBZGQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IGFycmF5W10gPSB7IDEsIDIgfTsKKyAgICBD
b25zdFB0clZhbHVlKiBhcnJheVB0ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgYXJyYXkpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+
KAorICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgTG9h
ZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1
ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksIGFycmF5UHRyLAor
ICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywg
T3JpZ2luKCksIDApKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+
KAorICAgICAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9j
LCBBZGQsIE9yaWdpbigpLCBhcnJheVB0ciwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBzaXplb2YoaW50KSkpKSkpOwor
ICAgIAorICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jKSA9PSBhcnJheVswXSArIGFy
cmF5WzFdKTsKK30KKwordm9pZCB0ZXN0TG9hZE9mZnNldFVzaW5nQWRkTm90Q29uc3RhbnQoKQor
eworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJs
b2NrKCk7CisgICAgaW50IGFycmF5W10gPSB7IDEsIDIgfTsKKyAgICBWYWx1ZSogYXJyYXlQdHIg
PSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUklu
Zm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisg
ICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxW
YWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBMb2FkLCBJ
bnQzMiwgT3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwgYXJyYXlQdHIsCisgICAg
ICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmln
aW4oKSwgMCkpKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgcHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgIHByb2MsIEFk
ZCwgT3JpZ2luKCksIGFycmF5UHRyLAorICAgICAgICAgICAgICAgICAgICByb290LT5hcHBlbmRO
ZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHNpemVvZihpbnQpKSkpKSk7CisgICAg
CisgICAgQ0hFQ0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsICZhcnJheVswXSkgPT0gYXJyYXlb
MF0gKyBhcnJheVsxXSk7Cit9CisKKyNkZWZpbmUgUlVOKHRlc3QpIGRvIHsgICAgICAgICAgICAg
ICAgICAgICAgICAgIFwKKyAgICAgICAgZGF0YUxvZygjdGVzdCAiOlxuIik7ICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgdGVzdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IFwKKyAgICAgICAgZGF0YUxvZygiICAgIE9LIVxuIik7ICAgICAgICAgICAgICAgICAgIFwKKyAg
ICB9IHdoaWxlIChmYWxzZSk7CisKK3ZvaWQgcnVuKCkKK3sKKyAgICBKU0M6OmluaXRpYWxpemVU
aHJlYWRpbmcoKTsKKyAgICB2bSA9ICZWTTo6Y3JlYXRlKExhcmdlSGVhcCkubGVha1JlZigpOwor
CisgICAgUlVOKHRlc3Q0MigpKTsKKyAgICBSVU4odGVzdExvYWQ0MigpKTsKKyAgICBSVU4odGVz
dEFyZyg0MykpOworICAgIFJVTih0ZXN0QWRkQXJncygxLCAxKSk7CisgICAgUlVOKHRlc3RBZGRB
cmdzKDEsIDIpKTsKKyAgICBSVU4odGVzdEFkZEFyZ3MzMigxLCAxKSk7CisgICAgUlVOKHRlc3RB
ZGRBcmdzMzIoMSwgMikpOworICAgIFJVTih0ZXN0U3RvcmUoNDQpKTsKKyAgICBSVU4odGVzdFRy
dW5jKChzdGF0aWNfY2FzdDxpbnQ2NF90PigxKSA8PCA0MCkgKyA0MikpOworICAgIFJVTih0ZXN0
QWRkMSg0NSkpOworICAgIFJVTih0ZXN0U3RvcmVBZGRMb2FkKDQ2KSk7CisgICAgUlVOKHRlc3RT
dG9yZUFkZEFuZExvYWQoNDcsIDB4ZmZmZikpOworICAgIFJVTih0ZXN0U3RvcmVBZGRBbmRMb2Fk
KDQ3MDAwMCwgMHhmZmZmKSk7CisgICAgUlVOKHRlc3RBZGQxVW5jb21tdXRlZCg0OCkpOworICAg
IFJVTih0ZXN0TG9hZE9mZnNldCgpKTsKKyAgICBSVU4odGVzdExvYWRPZmZzZXROb3RDb25zdGFu
dCgpKTsKKyAgICBSVU4odGVzdExvYWRPZmZzZXRVc2luZ0FkZCgpKTsKKyAgICBSVU4odGVzdExv
YWRPZmZzZXRVc2luZ0FkZE5vdENvbnN0YW50KCkpOworfQorCit9IC8vIGFub255bW91cyBuYW1l
c3BhY2UKKworI2Vsc2UgLy8gRU5BQkxFKEIzX0pJVCkKKworc3RhdGljIHZvaWQgcnVuKCkKK3sK
KyAgICBkYXRhTG9nKCJCMyBKSVQgaXMgbm90IGVuYWJsZWQuXG4iKTsKK30KKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKK3sKKyAg
ICBVTlVTRURfUEFSQU0oYXJnYyk7CisgICAgVU5VU0VEX1BBUkFNKGFyZ3YpOworICAgIAorICAg
IHJ1bigpOworICAgIHJldHVybiAwOworfQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMjcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0
YWNrLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2lu
Y2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVkZSAiQWlyTGl2ZW5lc3MuaCIKKyNpbmNs
dWRlICJBaXJQaGFzZVNjb3BlLmgiCisjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKKyNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5h
bWVzcGFjZSBBaXIgeworCituYW1lc3BhY2UgeworCitjb25zdCBib29sIHZlcmJvc2UgPSBmYWxz
ZTsKKworYm9vbCBhcmd1bWVudElzT25TdGFjayhjb25zdCBBcmcmIGFyZykKK3sKKyAgICByZXR1
cm4gYXJnLmlzU3RhY2soKSAmJiBhcmcuc3RhY2tTbG90KCktPmtpbmQoKSA9PSBTdGFja1Nsb3RL
aW5kOjpBbm9ueW1vdXM7Cit9CisKK2Jvb2wgYXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgU3RhY2tT
bG90KiBzbG90LCBpbnRwdHJfdCBvZmZzZXRGcm9tRlAsIGNvbnN0IFZlY3RvcjxTdGFja1Nsb3Qq
PiYgb3RoZXJTbG90cykKK3sKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygiQXR0
ZW1wdGluZyB0byBhc3NpZ24gIiwgcG9pbnRlckR1bXAoc2xvdCksICIgdG8gIiwgb2Zmc2V0RnJv
bUZQLCAiIHdpdGggaW50ZXJmZXJlbmNlICIsIHBvaW50ZXJMaXN0RHVtcChvdGhlclNsb3RzKSwg
IlxuIik7CisKKyAgICAvLyBOZWVkIHRvIGFsaWduIGl0IHRvIHRoZSBzbG90J3MgZGVzaXJlZCBh
bGlnbm1lbnQuCisgICAgb2Zmc2V0RnJvbUZQID0gLVdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihz
bG90LT5hbGlnbm1lbnQoKSwgLW9mZnNldEZyb21GUCk7CisgICAgCisgICAgZm9yIChTdGFja1Ns
b3QqIG90aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhlclNsb3QtPm9m
ZnNldEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJvb2wgb3Zlcmxh
cCA9IFdURjo6cmFuZ2VzT3ZlcmxhcCgKKyAgICAgICAgICAgIG9mZnNldEZyb21GUCwKKyAgICAg
ICAgICAgIG9mZnNldEZyb21GUCArIHN0YXRpY19jYXN0PGludHB0cl90PihzbG90LT5ieXRlU2l6
ZSgpKSwKKyAgICAgICAgICAgIG90aGVyU2xvdC0+b2Zmc2V0RnJvbUZQKCksCisgICAgICAgICAg
ICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpICsgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG90aGVy
U2xvdC0+Ynl0ZVNpemUoKSkpOworICAgICAgICBpZiAob3ZlcmxhcCkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgZGF0YUxvZygi
QXNzaWduZWQgIiwgcG9pbnRlckR1bXAoc2xvdCksICIgdG8gIiwgb2Zmc2V0RnJvbUZQLCAiXG4i
KTsKKyAgICBzbG90LT5zZXRPZmZzZXRGcm9tRlAob2Zmc2V0RnJvbUZQKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBhc3NpZ24oU3RhY2tTbG90KiBzbG90LCBjb25zdCBWZWN0b3I8U3Rh
Y2tTbG90Kj4mIG90aGVyU2xvdHMpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFM
b2coIkF0dGVtcHRpbmcgdG8gYXNzaWduICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiIHdpdGggaW50
ZXJmZXJlbmNlICIsIHBvaW50ZXJMaXN0RHVtcChvdGhlclNsb3RzKSwgIlxuIik7CisgICAgCisg
ICAgaWYgKGF0dGVtcHRBc3NpZ25tZW50KHNsb3QsIC1zdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xv
dC0+Ynl0ZVNpemUoKSksIG90aGVyU2xvdHMpKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Ig
KFN0YWNrU2xvdCogb3RoZXJTbG90IDogb3RoZXJTbG90cykgeworICAgICAgICBpZiAoIW90aGVy
U2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgYm9v
bCBkaWRBc3NpZ24gPSBhdHRlbXB0QXNzaWdubWVudCgKKyAgICAgICAgICAgIHNsb3QsIG90aGVy
U2xvdC0+b2Zmc2V0RnJvbUZQKCkgLSBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xvdC0+Ynl0ZVNp
emUoKSksIG90aGVyU2xvdHMpOworICAgICAgICBpZiAoZGlkQXNzaWduKQorICAgICAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCit2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29k
ZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlU3RhY2siKTsK
KworICAgIC8vIEFsbG9jYXRlIGFsbCBvZiB0aGUgbG9ja2VkIHNsb3RzIGluIG9yZGVyLiBUaGlz
IGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCisgICAgLy8gdGhlIHBv
c3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9mZnNldHMgYmVm
b3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCisgICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6ZSgpKTsKKyAg
ICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzOworICAgIFZlY3Rv
cjxTdGFja1Nsb3QqPiBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Q7CisgICAgZm9yIChTdGFja1Ns
b3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBzd2l0Y2ggKHNsb3QtPmtp
bmQoKSkgeworICAgICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgICAg
IGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgICAgICBhc3NpZ25lZExvY2tl
ZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC5hcHBlbmQoc2xvdCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6CisgICAgICAgICAg
ICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBBcyBhIG1h
dHRlciBvZiBzYW5pdHksIHVuYXNzaWduIHRoaXMuIE1heWJlIGl0IHdvdWxkIGJlIGdvb2QgdG8g
ZXZlbiBoYXZlIGEKKyAgICAgICAgICAgICAgICAvLyB2YWxpZGF0aW9uIHJ1bGUgdGhhdCB0aGlz
IGNhbm5vdCBoYXBwZW4uCisgICAgICAgICAgICAgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQKDAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cisg
ICAgLy8gVGhpcyBpcyBhIGZhaXJseSBleHBlbnNpdmUgbG9vcCwgYnV0IGl0J3MgT0sgYmVjYXVz
ZSB3ZSdsbCB1c3VhbGx5IG9ubHkgaGF2ZSBhIGhhbmRmdWwgb2YKKyAgICAvLyBsb2NrZWQgc3Rh
Y2sgc2xvdHMuCisgICAgd2hpbGUgKCFsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QuaXNFbXB0eSgp
KSB7CisgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGxvY2tlZFN0YWNrU2xvdHNXb3JrbGlzdC50
YWtlTGFzdCgpOworICAgICAgICBhc3NpZ24oc2xvdCwgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3Rz
KTsKKyAgICAgICAgYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAgICB9
CisKKyAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMuIE5vdGUgdGhhdCB0
aGVvcmV0aWNhbGx5IHdlIHNob3VsZCBkbyBhbiBlc2NhcGUgYW5hbHlzaXMKKyAgICAvLyBoZXJl
LiBCdXQsIGN1cnJlbnRseSBBaXIgZG9lc24ndCBzdXBwb3J0IGVzY2FwaW5nIGEgU3RhY2tTbG90
IQorICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgZXNjYXBpbmcgYSBTdGFja1Nsb3QgYW5k
IGFkZCBlc2NhcGUgYW5hbHlzaXMgdG8gYWxsb2NhdGVTdGFjaygpLgorICAgIC8vIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0MzAKKworICAgIExpdmVuZXNzPEFy
Zz4gbGl2ZW5lc3MoY29kZSk7CisgICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNr
U2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKKyAgICBWZWN0
b3I8U3RhY2tTbG90Kj4gc2xvdHM7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29k
ZSkgeworICAgICAgICBMaXZlbmVzczxBcmc+OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNz
LCBibG9jayk7CisKKyAgICAgICAgYXV0byBpbnRlcmZlcmUgPSBbJl0gKEluc3QmIGluc3QpIHsK
KyAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkludGVy
ZmVyaW5nOiAiLCBsaXN0RHVtcChsb2NhbENhbGMubGl2ZSgpKSwgIlxuIik7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIC8vIEZvcm0gYSBjbGlxdWUgb2Ygc3RhY2sgc2xvdHMgdGhhdCBpbnRl
cmZlcmUuIEZpcnN0IGZpbmQgdGhlIGxpc3Qgb2Ygc3RhY2sgc2xvdHMKKyAgICAgICAgICAgIC8v
IHRoYXQgYXJlIGxpdmUgcmlnaHQgbm93LgorICAgICAgICAgICAgc2xvdHMucmVzaXplKDApOwor
ICAgICAgICAgICAgZm9yIChBcmcgYXJnIDogbG9jYWxDYWxjLmxpdmUoKSkgeworICAgICAgICAg
ICAgICAgIGlmIChhcmd1bWVudElzT25TdGFjayhhcmcpKQorICAgICAgICAgICAgICAgICAgICBz
bG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgLy8gV2UgbXVzdG4ndCBtYW5kYXRlIHRoYXQgdGhlIGlucHV0IGNvZGUgaXMgb3B0aW1hbC4g
VGhlcmVmb3JlLCBpdCBtYXkgaGF2ZSBkZWFkIHN0b3JlcworICAgICAgICAgICAgLy8gdG8gdGhl
IHN0YWNrLiBXZSBuZWVkIHRvIHRyZWF0IHRoZXNlIGFzIGludGVyZmVyaW5nLgorICAgICAgICAg
ICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6
Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNE
ZWYocm9sZSkgJiYgYXJndW1lbnRJc09uU3RhY2soYXJnKQorICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgIWxvY2FsQ2FsYy5saXZlKCkuY29udGFpbnMoYXJnKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNsb3RzLmFwcGVuZChhcmcuc3RhY2tTbG90KCkpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAg
ICBkYXRhTG9nKCIgICAgU2xvdHM6ICIsIHBvaW50ZXJMaXN0RHVtcChzbG90cyksICJcbiIpOwor
ICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNsb3RzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBvdXRlciA9IHNsb3RzW2ldOworICAgICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgaiA9IGkgKyAxOyBqIDwgc2xvdHMuc2l6ZSgpOyArK2opIHsK
KyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBpbm5lciA9IHNsb3RzW2pdOworCisgICAg
ICAgICAgICAgICAgICAgIGludGVyZmVyZW5jZVtpbm5lcl0uYWRkKG91dGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgaW50ZXJmZXJlbmNlW291dGVyXS5hZGQoaW5uZXIpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKHVuc2lnbmVk
IGluc3RJbmRleCA9IGJsb2NrLT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAg
aWYgKHZlcmJvc2UpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiQW5hbHl6aW5nOiAiLCBibG9j
ay0+YXQoaW5zdEluZGV4KSwgIlxuIik7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnRlcmZlcmUoaW5zdCk7CisgICAgICAgICAg
ICBsb2NhbENhbGMuZXhlY3V0ZShpbnN0KTsKKyAgICAgICAgfQorICAgICAgICBJbnN0IG5vcDsK
KyAgICAgICAgaW50ZXJmZXJlKG5vcCk7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpIHsKKyAg
ICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIkludGVyZmVyZW5jZSBvZiAiLCBwb2ludGVyRHVtcChzbG90KSwgIjogIiwg
cG9pbnRlckxpc3REdW1wKGludGVyZmVyZW5jZVtzbG90XSksICJcbiIpOworICAgIH0KKworICAg
IC8vIE5vdyB3ZSBhc3NpZ24gc3RhY2sgbG9jYXRpb25zLiBBdCBpdHMgaGVhcnQgdGhpcyBhbGdv
cml0aG0gaXMganVzdCBmaXJzdC1maXQuIEZvciBlYWNoCisgICAgLy8gU3RhY2tTbG90IHdlIGp1
c3Qgd2FudCB0byBmaW5kIHRoZSBvZmZzZXRGcm9tRlAgdGhhdCBpcyBjbG9zZXN0IHRvIHplcm8g
d2hpbGUgZW5zdXJpbmcgbm8KKyAgICAvLyBvdmVybGFwIHdpdGggb3RoZXIgU3RhY2tTbG90cyB0
aGF0IHRoaXMgb3ZlcmxhcHMgd2l0aC4KKyAgICBWZWN0b3I8U3RhY2tTbG90Kj4gb3RoZXJTbG90
cyA9IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90czsKKyAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6
IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkg
eworICAgICAgICAgICAgLy8gQWxyZWFkeSBhc3NpZ25lZCBhbiBvZmZzZXQuCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4mIGlu
dGVyZmVyaW5nU2xvdHMgPSBpbnRlcmZlcmVuY2Vbc2xvdF07CisgICAgICAgIG90aGVyU2xvdHMu
cmVzaXplKGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5zaXplKCkpOworICAgICAgICBvdGhlclNs
b3RzLnJlc2l6ZShhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpICsgaW50ZXJmZXJpbmdT
bG90cy5zaXplKCkpOworICAgICAgICB1bnNpZ25lZCBuZXh0SW5kZXggPSBhc3NpZ25lZExvY2tl
ZFN0YWNrU2xvdHMuc2l6ZSgpOworICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDog
aW50ZXJmZXJpbmdTbG90cykKKyAgICAgICAgICAgIG90aGVyU2xvdHNbbmV4dEluZGV4KytdID0g
b3RoZXJTbG90OworCisgICAgICAgIGFzc2lnbihzbG90LCBvdGhlclNsb3RzKTsKKyAgICB9CisK
KyAgICAvLyBGaWd1cmUgb3V0IGhvdyBtdWNoIHN0YWNrIHdlJ3JlIHVzaW5nIGZvciBzdGFjayBz
bG90cy4KKyAgICB1bnNpZ25lZCBmcmFtZVNpemVGb3JTdGFja1Nsb3RzID0gMDsKKyAgICBmb3Ig
KFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7CisgICAgICAgIGZyYW1lU2l6
ZUZvclN0YWNrU2xvdHMgPSBzdGQ6Om1heCgKKyAgICAgICAgICAgIGZyYW1lU2l6ZUZvclN0YWNr
U2xvdHMsCisgICAgICAgICAgICBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oLXNsb3QtPm9mZnNldEZy
b21GUCgpKSk7CisgICAgfQorCisgICAgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IFdURjo6cm91
bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVzKCksIGZyYW1lU2l6ZUZvclN0YWNr
U2xvdHMpOworCisgICAgLy8gTm93IHdlIG5lZWQgdG8gZGVkdWNlIGhvdyBtdWNoIGFyZ3VtZW50
IGFyZWEgd2UgbmVlZC4KKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAg
ICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBh
cmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXJnLmlzQ2FsbEFyZygpKSB7
CisgICAgICAgICAgICAgICAgICAgIC8vIEZvciBub3csIHdlIGFzc3VtZSB0aGF0IHdlIHVzZSA4
IGJ5dGVzIG9mIHRoZSBjYWxsIGFyZy4gQnV0IHRoYXQncyBub3QKKyAgICAgICAgICAgICAgICAg
ICAgLy8gc3VjaCBhbiBhd2Vzb21lIGFzc3VtcHRpb24uCisgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU0Cisg
ICAgICAgICAgICAgICAgICAgIEFTU0VSVChhcmcub2Zmc2V0KCkgPj0gMCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvZGUucmVxdWVzdENhbGxBcmdBcmVhU2l6ZShhcmcub2Zmc2V0KCkgKyA4KTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBjb2RlLnNldEZyYW1lU2l6ZShmcmFtZVNpemVGb3JTdGFja1Nsb3RzICsgY29kZS5jYWxsQXJn
QXJlYVNpemUoKSk7CisKKyAgICAvLyBGaW5hbGx5LCB0cmFuc2Zvcm0gdGhlIGNvZGUgdG8gdXNl
IEFkZHIncyBpbnN0ZWFkIG9mIFN0YWNrU2xvdCdzLiBUaGlzIGlzIGEgbG9zc2xlc3MKKyAgICAv
LyB0cmFuc2Zvcm1hdGlvbiBzaW5jZSB3ZSBjYW4gc2VhcmNoIHRoZSBTdGFja1Nsb3RzIGFycmF5
IHRvIGZpZ3VyZSBvdXQgd2hpY2ggU3RhY2tTbG90IGFueQorICAgIC8vIG9mZnNldC1mcm9tLUZQ
IHJlZmVycyB0by4KKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAg
ICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgZm9yIChBcmcmIGFy
ZyA6IGluc3QuYXJncykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoYXJnLmtpbmQoKSkgewor
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgYXJn
ID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86OmNhbGxG
cmFtZVJlZ2lzdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQoKSArIGFy
Zy5zdGFja1Nsb3QoKS0+b2Zmc2V0RnJvbUZQKCkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6Q2FsbEFyZzoKKyAgICAgICAgICAgICAgICAg
ICAgYXJnID0gQXJnOjphZGRyKAorICAgICAgICAgICAgICAgICAgICAgICAgVG1wKEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyZy5vZmZzZXQo
KSAtIGNvZGUuZnJhbWVTaXplKCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNr
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9j
YXRlU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQWxsb2NhdGVTdGFj
a19oCisjZGVmaW5lIEFpckFsbG9jYXRlU3RhY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBD
b2RlOworCisvLyBUaGlzIGFsbG9jYXRlcyBTdGFja1Nsb3RzIHRvIHBsYWNlcyBvbiB0aGUgc3Rh
Y2suIEl0IGZpcnN0IGFsbG9jYXRlcyB0aGUgcGlubmVkIG9uZXMgaW4gaW5kZXgKKy8vIG9yZGVy
IGFuZCB0aGVuIGl0IGFsbG9jYXRlcyB0aGUgcmVzdCB1c2luZyBmaXJzdCBmaXQuCisKK3ZvaWQg
YWxsb2NhdGVTdGFjayhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJBbGxvY2F0ZVN0YWNr
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDkwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJBcmcuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5jbHVk
ZSAiQWlyU3RhY2tTbG90LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKwordm9pZCBBcmc6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBzd2l0Y2ggKG1fa2luZCkgeworICAgIGNhc2UgSW52YWxpZDoKKyAgICAgICAgb3V0LnBy
aW50KCI8aW52YWxpZD4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVG1wOgorICAgICAg
ICBvdXQucHJpbnQodG1wKCkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJbW06CisgICAg
ICAgIG91dC5wcmludCgiJCIsIG1fb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ug
SW1tNjQ6CisgICAgICAgIG91dC5wcmludGYoIiQweCVsbHgiLCBtX29mZnNldCk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIEFkZHI6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAg
ICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKCIsIGJhc2UoKSwg
IikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW5kZXg6CisgICAgICAgIGlmIChvZmZz
ZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmlu
dCgiKCIsIGJhc2UoKSwgIiwiLCBpbmRleCgpKTsKKyAgICAgICAgaWYgKHNjYWxlKCkgIT0gMSkK
KyAgICAgICAgICAgIG91dC5wcmludCgiLCIsIHNjYWxlKCkpOworICAgICAgICBvdXQucHJpbnQo
IikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGlmIChvZmZz
ZXQoKSkKKyAgICAgICAgICAgIG91dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmlu
dCgiKCIsIHBvaW50ZXJEdW1wKHN0YWNrU2xvdCgpKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ2FsbEFyZzoKKyAgICAgICAgaWYgKG9mZnNldCgpKQorICAgICAgICAgICAgb3V0
LnByaW50KG9mZnNldCgpKTsKKyAgICAgICAgb3V0LnByaW50KCIoY2FsbEFyZykiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgb3V0LnByaW50KGFzUmVsYXRp
b25hbENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUmVzQ29uZDoKKyAg
ICAgICAgb3V0LnByaW50KGFzUmVzdWx0Q29uZGl0aW9uKCkpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBvdXQucHJpbnQocG9pbnRlckR1bXAoc3BlY2lhbCgp
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJB
cmcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFyZ19oCisjZGVmaW5lIEFpckFyZ19o
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAi
QjNDb21tb24uaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBTcGVjaWFsOworY2xhc3MgU3RhY2tT
bG90OworCisvLyBUaGlzIGNsYXNzIG5hbWUgaXMgYWxzbyBpbnRlbnRpb25hbGx5IHRlcnNlIGJl
Y2F1c2Ugd2Ugd2lsbCBzYXkgaXQgYSBsb3QuIFlvdSdsbCBzZWUgY29kZSBsaWtlCisvLyBJbnN0
KC4uLiwgQXJnOjppbW0oNSksIEFyZzo6YWRkcih0aGluZywgYmxhaCksIC4uLikKK2NsYXNzIEFy
ZyB7CitwdWJsaWM6CisgICAgLy8gVGhlc2UgZW51bSBtZW1iZXJzIGFyZSBpbnRlbnRpb25hbGx5
IHRlcnNlIGJlY2F1c2Ugd2UgaGF2ZSB0byBtZW50aW9uIHRoZW0gYSBsb3QuCisgICAgZW51bSBL
aW5kIDogaW50OF90IHsKKyAgICAgICAgSW52YWxpZCwKKyAgICAgICAgVG1wLAorICAgICAgICBJ
bW0sCisgICAgICAgIEltbTY0LAorICAgICAgICBBZGRyLAorICAgICAgICBTdGFjaywKKyAgICAg
ICAgQ2FsbEFyZywKKyAgICAgICAgSW5kZXgsCisgICAgICAgIFJlbENvbmQsCisgICAgICAgIFJl
c0NvbmQsCisgICAgICAgIFNwZWNpYWwKKyAgICB9OworCisgICAgZW51bSBSb2xlIDogaW50OF90
IHsKKyAgICAgICAgVXNlLAorICAgICAgICBEZWYsCisgICAgICAgIFVzZURlZgorICAgIH07CisK
KyAgICBlbnVtIFR5cGUgOiBpbnQ4X3QgeworICAgICAgICBHUCwKKyAgICAgICAgRlAKKyAgICB9
OworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG51bVR5cGVzID0gMjsKKworICAgIHN0YXRp
YyBib29sIGlzVXNlKFJvbGUgcm9sZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAocm9sZSkgewor
ICAgICAgICBjYXNlIFVzZToKKyAgICAgICAgY2FzZSBVc2VEZWY6CisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBEZWY6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0RlZihSb2xlIHJvbGUpCisgICAg
eworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsKKyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICBjYXNlIFVzZURlZjoK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGlj
IFR5cGUgdHlwZUZvckIzVHlwZShCMzo6VHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgVm9pZDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIEludDMyOgorICAg
ICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgcmV0dXJuIEdQOworICAgICAgICBjYXNlIERv
dWJsZToKKyAgICAgICAgICAgIHJldHVybiBGUDsKKyAgICAgICAgfQorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIEdQOworICAgIH0KKworICAgIEFyZygpCisg
ICAgICAgIDogbV9raW5kKEludmFsaWQpCisgICAgeworICAgIH0KKworICAgIEFyZyhBaXI6OlRt
cCB0bXApCisgICAgICAgIDogbV9raW5kKFRtcCkKKyAgICAgICAgLCBtX2Jhc2UodG1wKQorICAg
IHsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIGltbShpbnQzMl90IHZhbHVlKQorICAgIHsKKyAg
ICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IEltbTsKKyAgICAgICAg
cmVzdWx0Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgc3RhdGljIEFyZyBpbW02NChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFy
ZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW02NDsKKyAgICAgICAgcmVzdWx0
Lm1fb2Zmc2V0ID0gdmFsdWU7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAg
c3RhdGljIEFyZyBhZGRyKEFpcjo6VG1wIGJhc2UsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChiYXNlLmlzR1AoKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAg
ICAgIHJlc3VsdC5tX2tpbmQgPSBBZGRyOworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsK
KyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0
OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3RhY2soU3RhY2tTbG90KiB2YWx1ZSwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0
Lm1fa2luZCA9IFN0YWNrOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBiaXR3aXNlX2Nhc3Q8
aW50cHRyX3Q+KHZhbHVlKTsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBvZmZzZXQ7IC8vIEkg
a25vdywgeXVjay4KKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMg
QXJnIGNhbGxBcmcoaW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0Owor
ICAgICAgICByZXN1bHQubV9raW5kID0gQ2FsbEFyZzsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0
ID0gb2Zmc2V0OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBi
b29sIGlzVmFsaWRTY2FsZSh1bnNpZ25lZCBzY2FsZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
c2NhbGUpIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICBjYXNlIDI6CisgICAgICAgIGNhc2Ug
NDoKKyAgICAgICAgY2FzZSA4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBzdGF0aWMgdW5zaWduZWQgbG9nU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIHJldHVybiAw
OworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJl
dHVybiAzOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRp
YyBBcmcgaW5kZXgoQWlyOjpUbXAgYmFzZSwgQWlyOjpUbXAgaW5kZXgsIHVuc2lnbmVkIHNjYWxl
ID0gMSwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhc2UuaXNH
UCgpKTsKKyAgICAgICAgQVNTRVJUKGluZGV4LmlzR1AoKSk7CisgICAgICAgIEFTU0VSVChpc1Zh
bGlkU2NhbGUoc2NhbGUpKTsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1f
a2luZCA9IEluZGV4OworICAgICAgICByZXN1bHQubV9iYXNlID0gYmFzZTsKKyAgICAgICAgcmVz
dWx0Lm1faW5kZXggPSBpbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fc2NhbGUgPSBzdGF0aWNfY2Fz
dDxpbnQzMl90PihzY2FsZSk7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHJlbENvbmQoTWFj
cm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAg
ICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IFJlbENvbmQ7CisgICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlvbjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgQXJnIHJlc0NvbmQoTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRp
dGlvbiBjb25kaXRpb24pCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAgICAgICByZXN1
bHQubV9raW5kID0gUmVzQ29uZDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gY29uZGl0aW9u
OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHN0YXRpYyBBcmcgc3BlY2lh
bChBaXI6OlNwZWNpYWwqIHNwZWNpYWwpCisgICAgeworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gU3BlY2lhbDsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0g
Yml0d2lzZV9jYXN0PGludHB0cl90PihzcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgQXJnJiBvdGhlcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAorICAgICAgICAg
ICAgJiYgbV9raW5kID09IG90aGVyLm1fa2luZAorICAgICAgICAgICAgJiYgbV9iYXNlID09IG90
aGVyLm1fYmFzZQorICAgICAgICAgICAgJiYgbV9pbmRleCA9PSBvdGhlci5tX2luZGV4CisgICAg
ICAgICAgICAmJiBtX3NjYWxlID09IG90aGVyLm1fc2NhbGU7CisgICAgfQorCisgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgfQorCisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgp
IGNvbnN0IHsgcmV0dXJuICp0aGlzICE9IEFyZygpOyB9CisKKyAgICBLaW5kIGtpbmQoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fa2luZDsKKyAgICB9CisKKyAgICBib29sIGlzVG1w
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gVG1wOworICAgIH0KKwor
ICAgIGJvb2wgaXNJbW0oKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJ
bW07CisgICAgfQorCisgICAgYm9vbCBpc0ltbTY0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBraW5kKCkgPT0gSW1tNjQ7CisgICAgfQorCisgICAgYm9vbCBpc0FkZHIoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBBZGRyOworICAgIH0KKworICAgIGJvb2wg
aXNTdGFjaygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFN0YWNrOwor
ICAgIH0KKworICAgIGJvb2wgaXNDYWxsQXJnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBraW5kKCkgPT0gQ2FsbEFyZzsKKyAgICB9CisKKyAgICBib29sIGlzSW5kZXgoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBJbmRleDsKKyAgICB9CisKKyAgICBib29s
IGlzUmVsQ29uZCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFJlbENv
bmQ7CisgICAgfQorCisgICAgYm9vbCBpc1Jlc0NvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGtpbmQoKSA9PSBSZXNDb25kOworICAgIH0KKworICAgIGJvb2wgaXNTcGVjaWFsKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gU3BlY2lhbDsKKyAgICB9CisK
KyAgICBib29sIGlzQWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkg
fHwgaXNTdGFjaygpOworICAgIH0KKworICAgIEFpcjo6VG1wIHRtcCgpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoa2luZCgpID09IFRtcCk7CisgICAgICAgIHJldHVybiBtX2Jhc2U7Cisg
ICAgfQorCisgICAgaW50NjRfdCB2YWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IEltbSB8fCBraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gbV9vZmZz
ZXQ7CisgICAgfQorCisgICAgdm9pZCogcG9pbnRlclZhbHVlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIEFTU0VSVChraW5kKCkgPT0gSW1tNjQpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0
PHZvaWQqPihzdGF0aWNfY2FzdDxpbnRwdHJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAgICBB
aXI6OlRtcCBiYXNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRk
ciB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gbV9iYXNlOworICAgIH0KKwor
ICAgIGJvb2wgaGFzT2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgp
KSB7CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2Fz
ZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisgICAgCisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKGtpbmQoKSA9PSBTdGFjaykKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQz
Ml90PihtX3NjYWxlKTsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBBZGRyIHx8IGtpbmQoKSA9
PSBDYWxsQXJnIHx8IGtpbmQoKSA9PSBJbmRleCk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxpbnQzMl90PihtX29mZnNldCk7CisgICAgfQorCisgICAgU3RhY2tTbG90KiBzdGFja1Nsb3Qo
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBTdGFjayk7CisgICAgICAg
IHJldHVybiBiaXR3aXNlX2Nhc3Q8U3RhY2tTbG90Kj4obV9vZmZzZXQpOworICAgIH0KKworICAg
IEFpcjo6VG1wIGluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0g
SW5kZXgpOworICAgICAgICByZXR1cm4gbV9pbmRleDsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBz
Y2FsZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEluZGV4KTsKKyAg
ICAgICAgcmV0dXJuIG1fc2NhbGU7CisgICAgfQorCisgICAgdW5zaWduZWQgbG9nU2NhbGUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGxvZ1NjYWxlKHNjYWxlKCkpOworICAgIH0KKwor
ICAgIEFpcjo6U3BlY2lhbCogc3BlY2lhbCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQo
a2luZCgpID09IFNwZWNpYWwpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PEFpcjo6U3Bl
Y2lhbCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAgICBib29sIGlzR1BUbXAoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNHUCgpOworICAgIH0KKworICAg
IGJvb2wgaXNGUFRtcCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0
bXAoKS5pc0ZQKCk7CisgICAgfQorICAgIAorICAgIC8vIFRlbGxzIHVzIGlmIHRoaXMgQXJnIGNh
biBiZSB1c2VkIGluIGEgcG9zaXRpb24gdGhhdCByZXF1aXJlcyBhIEdQIHZhbHVlLgorICAgIGJv
b2wgaXNHUCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAg
ICBjYXNlIEltbToKKyAgICAgICAgY2FzZSBJbW02NDoKKyAgICAgICAgY2FzZSBBZGRyOgorICAg
ICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNlIENhbGxB
cmc6CisgICAgICAgIGNhc2UgUmVsQ29uZDoKKyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAg
ICBjYXNlIFNwZWNpYWw6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBU
bXA6CisgICAgICAgICAgICByZXR1cm4gaXNHUFRtcCgpOworICAgICAgICBjYXNlIEludmFsaWQ6
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBU
ZWxscyB1cyBpZiB0aGlzIEFyZyBjYW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWly
ZXMgYSBGUCB2YWx1ZS4KKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dp
dGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgUmVsQ29uZDoK
KyAgICAgICAgY2FzZSBSZXNDb25kOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNh
c2UgSW52YWxpZDoKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgY2FzZSBBZGRy
OgorICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICBjYXNl
IENhbGxBcmc6CisgICAgICAgIGNhc2UgSW1tNjQ6IC8vIFllcywgd2UgYWxsb3cgSW1tNjQgYXMg
YSBkb3VibGUgaW1tZWRpYXRlLiBXZSB1c2UgdGhpcyBmb3IgaW1wbGVtZW50aW5nIHN0YWNrbWFw
cy4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBjYXNlIFRtcDoKKyAgICAgICAg
ICAgIHJldHVybiBpc0ZQVG1wKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGhhc1R5
cGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBJbW06CisgICAgICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICAvLyBUaGUgdHlwZSBpcyBhbWJpZ3Vv
dXMgZm9yIHNvbWUgYXJnIGtpbmRzLiBDYWxsIHdpdGggY2FyZS4KKyAgICBUeXBlIHR5cGUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzR1AoKSA/IEdQIDogRlA7CisgICAgfQorCisg
ICAgYm9vbCBpc1R5cGUoVHlwZSB0eXBlKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoICh0
eXBlKSB7CisgICAgICAgIGNhc2UgR1A6CisgICAgICAgICAgICByZXR1cm4gaXNHUCgpOworICAg
ICAgICBjYXNlIEZQOgorICAgICAgICAgICAgcmV0dXJuIGlzRlAoKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGJvb2wgaXNHUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1w
KCkgJiYgdG1wKCkuaXNHUFIoKTsKKyAgICB9CisKKyAgICBHUFJSZWcgZ3ByKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiB0bXAoKS5ncHIoKTsKKyAgICB9CisKKyAgICBib29sIGlzRlBS
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzRlBSKCk7
CisgICAgfQorCisgICAgRlBSUmVnIGZwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dG1wKCkuZnByKCk7CisgICAgfQorICAgIAorICAgIGJvb2wgaXNSZWcoKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYgdG1wKCkuaXNSZWcoKTsKKyAgICB9CisKKyAgICBS
ZWcgcmVnKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0bXAoKS5yZWcoKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCBncFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biB0bXAoKS5ncFRtcEluZGV4KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZnBUbXBJbmRleCgpOworICAgIH0K
KworICAgIHVuc2lnbmVkIHRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiB0
bXAoKS50bXBJbmRleCgpOworICAgIH0KKworICAgIEFyZyB3aXRoT2Zmc2V0KGludDMyX3QgYWRk
aXRpb25hbE9mZnNldCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmICghaGFzT2Zmc2V0KCkpCisg
ICAgICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIGlmIChzdW1PdmVyZmxvd3M8aW50MzJf
dD4ob2Zmc2V0KCksIGFkZGl0aW9uYWxPZmZzZXQpKQorICAgICAgICAgICAgcmV0dXJuIEFyZygp
OworICAgICAgICBzd2l0Y2ggKGtpbmQoKSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAg
ICAgICByZXR1cm4gYWRkcihiYXNlKCksIG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7Cisg
ICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgICAgICByZXR1cm4gc3RhY2soc3RhY2tTbG90KCks
IG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7CisgICAgICAgIGNhc2UgQ2FsbEFyZzoKKyAg
ICAgICAgICAgIHJldHVybiBjYWxsQXJnKG9mZnNldCgpICsgYWRkaXRpb25hbE9mZnNldCk7Cisg
ICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICByZXR1cm4gaW5kZXgoYmFzZSgpLCBpbmRl
eCgpLCBzY2FsZSgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAg
ICAgIHJldHVybiBBcmcoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6
CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgZnVuY3Rvciht
X2Jhc2UpOworICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4KTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICAvLyBUaGlzIGlzIHNtYXJ0IGVub3VnaCB0byBrbm93IHRoYXQgYW4gYWRkcmVzcyBh
cmcgaW4gYSBEZWYgb3IgVXNlRGVmIHJ1bGUgd2lsbCB1c2UgaXRzCisgICAgLy8gdG1wcyBhbmQg
bmV2ZXIgZGVmIHRoZW0uIEZvciBleGFtcGxlLCB0aGlzOgorICAgIC8vCisgICAgLy8gbW92ICVy
YXgsICglcmN4KQorICAgIC8vCisgICAgLy8gVGhpcyBkZWZzICglcmN4KSBidXQgdXNlcyAlcmN4
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKFJv
bGUgYXJnUm9sZSwgVHlwZSBhcmdUeXBlLCBjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAgICAg
ICBmdW5jdG9yKG1fYmFzZSwgYXJnUm9sZSwgYXJnVHlwZSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSBBZGRyOgorICAgICAgICAgICAgZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1Ap
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW5kZXg6CisgICAgICAgICAgICBm
dW5jdG9yKG1fYmFzZSwgVXNlLCBHUCk7CisgICAgICAgICAgICBmdW5jdG9yKG1faW5kZXgsIFVz
ZSwgR1ApOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tMzIgYXNUcnVzdGVkSW1tMzIoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1t
KCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihzdGF0aWNf
Y2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NCBhc1RydXN0ZWRJbW02NCgpIGNvbnN0Cisg
ICAgeworICAgICAgICBBU1NFUlQoaXNJbW02NCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tNjQodmFsdWUoKSk7CisgICAgfQorI2VuZGlmCisKKyAgICBNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0ciBhc1RydXN0ZWRJbW1QdHIoKSBjb25zdAorICAgIHsK
KyAgICAgICAgaWYgKGlzNjRCaXQoKSkKKyAgICAgICAgICAgIEFTU0VSVChpc0ltbTY0KCkpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBBU1NFUlQoaXNJbW0oKSk7CisgICAgICAgIHJldHVy
biBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihwb2ludGVyVmFsdWUoKSk7CisgICAgfQor
CisgICAgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYXNBZGRyZXNzKCkgY29uc3QKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChpc0FkZHIoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcyhtX2Jhc2UuZ3ByKCksIHN0YXRpY19jYXN0PGludDMyX3Q+KG1fb2Zmc2V0KSk7Cisg
ICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OkJhc2VJbmRleCBhc0Jhc2VJbmRleCgpIGNvbnN0
CisgICAgeworICAgICAgICBBU1NFUlQoaXNJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3Jv
QXNzZW1ibGVyOjpCYXNlSW5kZXgoCisgICAgICAgICAgICBtX2Jhc2UuZ3ByKCksIG1faW5kZXgu
Z3ByKCksIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpTY2FsZT4obG9nU2NhbGUoKSksCisg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOworICAgIH0KKworICAg
IE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGFzUmVsYXRpb25hbENvbmRpdGlv
bigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZWxDb25kKCkpOworICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24+KG1f
b2Zmc2V0KTsKKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0aW9uIGFz
UmVzdWx0Q29uZGl0aW9uKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc1Jlc0NvbmQo
KSk7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29u
ZGl0aW9uPihtX29mZnNldCk7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CisKKyAgICBBcmcoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKQorICAgICAg
ICA6IG1fYmFzZShXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSkKKyAgICB7CisgICAgfQorCisg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gKnRoaXMgPT0gQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKKyAgICB9CisK
KyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRoaXMgcmVhbGx5
IGRvZXNuJ3QgaGF2ZSB0byBiZSB0aGF0IGdyZWF0LgorICAgICAgICByZXR1cm4gV1RGOjpJbnRI
YXNoPGludDY0X3Q+OjpoYXNoKG1fb2Zmc2V0KSArIG1fa2luZCArIG1fc2NhbGUgKyBtX2Jhc2Uu
aGFzaCgpICsKKyAgICAgICAgICAgIG1faW5kZXguaGFzaCgpOworICAgIH0KKworcHJpdmF0ZToK
KyAgICBpbnQ2NF90IG1fb2Zmc2V0IHsgMCB9OworICAgIEtpbmQgbV9raW5kIHsgSW52YWxpZCB9
OworICAgIGludDMyX3QgbV9zY2FsZSB7IDEgfTsKKyAgICBBaXI6OlRtcCBtX2Jhc2U7CisgICAg
QWlyOjpUbXAgbV9pbmRleDsKK307CisKK3N0cnVjdCBBcmdIYXNoIHsKKyAgICBzdGF0aWMgdW5z
aWduZWQgaGFzaChjb25zdCBBcmcmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IEFyZyYgYSwgY29uc3QgQXJnJiBiKSB7IHJldHVybiBhID09
IGI7IH0KKyAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRl
ZCA9IHRydWU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVz
cGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0
ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpBaXI6OkFyZz4geworICAgIHR5
cGVkZWYgSlNDOjpCMzo6QWlyOjpBcmdIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlND
OjpCMzo6QWlyOjpBcmc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6QXJn
PiB7CisgICAgLy8gQmVjYXVzZSBtX3NjYWxlIGlzIDEgaW4gdGhlIGVtcHR5IHZhbHVlLgorICAg
IHN0YXRpYyBjb25zdCBib29sIGVtcHR5VmFsdWVJc1plcm8gPSBmYWxzZTsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFp
ckFyZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9j
ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNp
Y0Jsb2NrLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29u
c3QgY2hhciogY29uc3QgQmFzaWNCbG9jazo6ZHVtcFByZWZpeCA9ICIjIjsKKworYm9vbCBCYXNp
Y0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4g
QjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpy
ZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gQjM6OnJl
bW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjpyZXBs
YWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pCit7CisgICAg
cmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywgZnJvbSwgdG8pOworfQorCit2b2lk
IEJhc2ljQmxvY2s6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJp
bnQoZHVtcFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9jazo6ZGVlcER1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIkJCIiwgKnRoaXMsICI6
IDsgZnJlcXVlbmN5ID0gIiwgbV9mcmVxdWVuY3ksICJcbiIpOworICAgIGlmIChwcmVkZWNlc3Nv
cnMoKS5zaXplKCkpCisgICAgICAgIG91dC5wcmludCgiICBQcmVkZWNlc3NvcnM6ICIsIHBvaW50
ZXJMaXN0RHVtcChwcmVkZWNlc3NvcnMoKSksICJcbiIpOworICAgIGZvciAoY29uc3QgSW5zdCYg
aW5zdCA6ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBpbnN0LCAiXG4iKTsKKyAg
ICBpZiAoc3VjY2Vzc29ycygpLnNpemUoKSkKKyAgICAgICAgb3V0LnByaW50KCIgIFN1Y2Nlc3Nv
cnM6ICIsIGxpc3REdW1wKHN1Y2Nlc3NvcnMoKSksICJcbiIpOworfQorCitCYXNpY0Jsb2NrOjpC
YXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUgZnJlcXVlbmN5KQorICAgIDogbV9pbmRl
eChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1ZW5jeSkKK3sKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJCYXNpY0Jsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJCYXNpY0Jsb2NrX2gKKyNkZWZpbmUgQWly
QmFzaWNCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyRnJlcXVl
bnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIzU3VjY2Vzc29y
Q29sbGVjdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3Rm
L05vbkNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworY2xhc3MgQ29kZTsKK2NsYXNzIEluc2VydGlvblNldDsKKworY2xhc3MgQmFz
aWNCbG9jayB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQmFzaWNCbG9jayk7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGR1bXBQcmVmaXg7CisKKyAgICB0eXBlZGVmIFZlY3RvcjxJbnN0PiBJbnN0TGlzdDsKKyAg
ICB0eXBlZGVmIFZlY3RvcjxCYXNpY0Jsb2NrKiwgMj4gUHJlZGVjZXNzb3JMaXN0OworICAgIHR5
cGVkZWYgVmVjdG9yPEZyZXF1ZW50ZWRCbG9jaywgMj4gU3VjY2Vzc29yTGlzdDsKKworICAgIHVu
c2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsgfQorICAgIAorICAgIHVuc2ln
bmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2luc3RzLnNpemUoKTsgfQorICAgIEluc3RMaXN0
OjppdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIG1faW5zdHMuYmVnaW4oKTsgfQorICAgIEluc3RM
aXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX2luc3RzLmVuZCgpOyB9CisgICAgSW5zdExp
c3Q6OmNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5iZWdpbigp
OyB9CisgICAgSW5zdExpc3Q6OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5zdHMuZW5kKCk7IH0KKworICAgIGNvbnN0IEluc3QmIGF0KHNpemVfdCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0c1tpbmRleF07IH0KKyAgICBJbnN0JiBhdChzaXplX3QgaW5kZXgpIHsg
cmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisKKyAgICBjb25zdCBJbnN0JiBsYXN0KCkgY29uc3Qg
eyByZXR1cm4gbV9pbnN0cy5sYXN0KCk7IH0KKyAgICBJbnN0JiBsYXN0KCkgeyByZXR1cm4gbV9p
bnN0cy5sYXN0KCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBh
cHBlbmRJbnN0KEluc3QmJiBpbnN0KQorICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoc3Rk
Ojpmb3J3YXJkPEluc3Q+KGluc3QpKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgdm9pZCBhcHBlbmQoQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQor
ICAgIHsKKyAgICAgICAgbV9pbnN0cy5hcHBlbmQoSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRz
Pihhcmd1bWVudHMpLi4uKSk7CisgICAgfQorCisgICAgLy8gVGhlICIwIiBjYXNlIGlzIHRoZSBj
YXNlIHRvIHdoaWNoIHRoZSBicmFuY2gganVtcHMsIHNvIHRoZSAidGhlbiIgY2FzZS4gVGhlICIx
IiBjYXNlIGlzIHRoZQorICAgIC8vICJlbHNlIiBjYXNlLCBhbmQgaXMgdXNlZCB0byByZXByZXNl
bnQgdGhlIGZhbGwtdGhyb3VnaCBvZiBhIGNvbmRpdGlvbmFsIGJyYW5jaC4KKyAgICB1bnNpZ25l
ZCBudW1TdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzLnNpemUoKTsgfQor
ICAgIEZyZXF1ZW50ZWRCbG9jayBzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nv
cih1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIGNv
bnN0IFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSBjb25zdCB7IHJldHVybiBtX3N1Y2Nlc3Nv
cnM7IH0KKyAgICBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgeyByZXR1cm4gbV9zdWNjZXNz
b3JzOyB9CisKKyAgICBCYXNpY0Jsb2NrKiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gc3VjY2Vzc29yKGluZGV4KS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9j
ayomIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBzdWNjZXNzb3IoaW5k
ZXgpLmJsb2NrKCk7IH0KKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPEJhc2ljQmxvY2ssIFN1Y2Nl
c3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpCisgICAgeworICAgICAgICByZXR1cm4gU3VjY2Vz
c29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihtX3N1Y2Nlc3NvcnMpOwor
ICAgIH0KKyAgICBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1
Y2Nlc3Nvckxpc3Q+IHN1Y2Nlc3NvckJsb2NrcygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBTdWNjZXNzb3JM
aXN0PihtX3N1Y2Nlc3NvcnMpOworICAgIH0KKworICAgIHVuc2lnbmVkIG51bVByZWRlY2Vzc29y
cygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQorICAgIEJhc2ljQmxv
Y2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vz
c29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3IodW5zaWduZWQgaW5k
ZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNvbnN0IFByZWRlY2Vz
c29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNlc3NvcnM7IH0K
KyAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJuIG1fcHJlZGVjZXNz
b3JzOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29s
IHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJlcGxhY2VQcmVkZWNl
c3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNz
IEluc2VydGlvblNldDsKKyAgICAKKyAgICBCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3Vi
bGUgZnJlcXVlbmN5KTsKKworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgSW5zdExpc3QgbV9p
bnN0czsKKyAgICBTdWNjZXNzb3JMaXN0IG1fc3VjY2Vzc29yczsKKyAgICBQcmVkZWNlc3Nvckxp
c3QgbV9wcmVkZWNlc3NvcnM7CisgICAgZG91YmxlIG1fZnJlcXVlbmN5OworfTsKKworY2xhc3Mg
RGVlcEJhc2ljQmxvY2tEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwQmFzaWNCbG9ja0R1bXAoY29u
c3QgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAg
ICAgICBpZiAobV9ibG9jaykKKyAgICAgICAgICAgIG1fYmxvY2stPmRlZXBEdW1wKG91dCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitw
cml2YXRlOgorICAgIGNvbnN0IEJhc2ljQmxvY2sqIG1fYmxvY2s7Cit9OworCitpbmxpbmUgRGVl
cEJhc2ljQmxvY2tEdW1wIGRlZXBEdW1wKGNvbnN0IEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAg
IHJldHVybiBEZWVwQmFzaWNCbG9ja0R1bXAoYmxvY2spOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyQmFzaWNCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
Q0NhbGxTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckNDYWxsU3BlY2lhbC5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitDQ2FsbFNwZWNpYWw6OkNDYWxsU3BlY2lhbCgpCit7CisgICAgbV9jbG9iYmVy
ZWRSZWdzID0gUmVnaXN0ZXJTZXQ6OmFsbFJlZ2lzdGVycygpOworICAgIG1fY2xvYmJlcmVkUmVn
cy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAgICBtX2Nsb2JiZXJl
ZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsK
KyAgICBtX2Nsb2JiZXJlZFJlZ3MuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lz
dGVycygpKTsKK30KKworQ0NhbGxTcGVjaWFsOjp+Q0NhbGxTcGVjaWFsKCkKK3sKK30KKwordm9p
ZCBDQ2FsbFNwZWNpYWw6OmZvckVhY2hBcmcoSW5zdCYgaW5zdCwgY29uc3QgU2NvcGVkTGFtYmRh
PEluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mIGNhbGxiYWNrKQoreworICAgIGNhbGxiYWNrKGluc3Qu
YXJnc1sxXSwgQXJnOjpVc2UsIEFyZzo6R1ApOworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9
IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgLy8gRm9yIHRoZSB0eXBl
LCB3ZSBjYW4ganVzdCBxdWVyeSB0aGUgYXJnJ3MgdHlwZS4gVGhlIGFyZyB3aWxsIGhhdmUgYSB0
eXBlLCBiZWNhdXNlIHdlCisgICAgICAgIC8vIHJlcXVpcmUgdGhlc2UgYXJncyB0byBiZSBhcmd1
bWVudCByZWdpc3RlcnMuCisgICAgICAgIGNhbGxiYWNrKGluc3QuYXJnc1tpXSwgQXJnOjpVc2Us
IGluc3QuYXJnc1tpXS50eXBlKCkpOworICAgIH0KK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6Omlz
VmFsaWQoSW5zdCYgaW5zdCkKK3sKKyAgICBpZiAoaW5zdC5hcmdzLnNpemUoKSA8IDIpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgewor
ICAgIGNhc2UgQXJnOjpJbW06CisgICAgICAgIGlmIChpczMyQml0KCkpCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAg
ICAgaWYgKGlzNjRCaXQoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICBjYXNlIEFyZzo6QWRkcjoKKyAgICBjYXNlIEFy
Zzo6U3RhY2s6CisgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIWluc3QuYXJn
c1sxXS5pc0dQKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDI7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFpbnN0LmFy
Z3NbaV0uaXNSZWcoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAo
aW5zdC5hcmdzW2ldID09IFRtcChzY3JhdGNoUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBDQ2FsbFNwZWNpYWw6
OmFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkKK3sKKyAgICAvLyBBcmcgMSBj
YW4gYmUgYSBzdGFjayBhZGRyZXNzIGZvciBzdXJlLgorICAgIGlmIChhcmdJbmRleCA9PSAxKQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQg
Q0NhbGxTcGVjaWFsOjpyZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNl
dCYpCit7Cit9CisKK0NDYWxsSGVscGVyczo6SnVtcCBDQ2FsbFNwZWNpYWw6OmdlbmVyYXRlKElu
c3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpCit7CisgICAg
c3dpdGNoIChpbnN0LmFyZ3NbMV0ua2luZCgpKSB7CisgICAgY2FzZSBBcmc6OkltbToKKyAgICBj
YXNlIEFyZzo6SW1tNjQ6CisgICAgICAgIGppdC5tb3ZlKGluc3QuYXJnc1sxXS5hc1RydXN0ZWRJ
bW1QdHIoKSwgc2NyYXRjaFJlZ2lzdGVyKTsKKyAgICAgICAgaml0LmNhbGwoc2NyYXRjaFJlZ2lz
dGVyKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OlRtcDoKKyAgICAgICAgaml0LmNh
bGwoaW5zdC5hcmdzWzFdLmdwcigpKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBcmc6OkFk
ZHI6CisgICAgICAgIGppdC5jYWxsKGluc3QuYXJnc1sxXS5hc0FkZHJlc3MoKSk7CisgICAgICAg
IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gQ0NhbGxIZWxwZXJzOjpKdW1w
KCk7Cit9CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVk
UmVncyhJbnN0JikKK3sKKyAgICByZXR1cm4gbV9jbG9iYmVyZWRSZWdzOworfQorCit2b2lkIEND
YWxsU3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQu
cHJpbnQoIkNDYWxsIik7Cit9CisKK3ZvaWQgQ0NhbGxTcGVjaWFsOjpkZWVwRHVtcEltcGwoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoImZ1bmN0aW9uIGNhbGwgdGhh
dCB1c2VzIHRoZSBDIGNhbGxpbmcgY29udmVudGlvbi4iKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNDYWxsU3BlY2lhbF9oCisjZGVmaW5lIEFp
ckNDYWxsU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3Bl
Y2lhbC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKKy8vIFVzZSB0aGlzIHNwZWNpYWwgZm9yIGNvbnN0cnVjdGluZyBhIEMgY2FsbC4gQXJnIDAg
aXMgb2YgY291cnNlIGEgU3BlY2lhbCBhcmcgdGhhdCByZWZlcnMgdG8gdGhlCisvLyBDQ2FsbFNw
ZWNpYWwgb2JqZWN0LiBBcmcgMSBpcyB0aGUgY2FsbGVlLCBhbmQgaXQgY2FuIGJlIGFuIEltbVB0
ciwgYSByZWdpc3Rlciwgb3IgYW4gYWRkcmVzcy4gVGhlCisvLyByZW1haW5pbmcgYXJncyBhcmUg
anVzdCB0aGUgc2V0IG9mIGFyZ3VtZW50IHJlZ2lzdGVycyB1c2VkIGJ5IHRoaXMgY2FsbC4gRm9y
IGFyZ3VtZW50cyB0aGF0IGdvIHRvCisvLyB0aGUgc3RhY2ssIHlvdSBoYXZlIHRvIGRvIHRoZSBn
cnVudCB3b3JrIG9mIGRvaW5nIHRob3NlIHN0YWNrIHN0b3Jlcy4gSW4gZmFjdCwgdGhlIG9ubHkg
cmVhc29uIHdoeQorLy8gd2Ugc3BlY2lmeSB0aGUgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGFyZ3Vt
ZW50cyB0byBhIGNhbGwgaXMgc28gdGhhdCB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMgY2FuIHNlZQor
Ly8gdGhhdCB0aGV5IGdldCB1c2VkIGhlcmUuIEl0IHdvdWxkIGJlIHdyb25nIHRvIGF1dG9tYWdp
Y2FsbHkgcmVwb3J0IGFsbCBhcmd1bWVudCByZWdpc3RlcnMgYXMgYmVpbmcKKy8vIHVzZWQgYmVj
YXVzZSBpZiB3ZSBoYWQgYSBjYWxsIHRoYXQgZGlkbid0IHBhc3MgdGhlbSwgdGhlbiB0aGV5J2Qg
YXBwZWFyIHRvIGJlIGxpdmUgdW50aWwgc29tZQorLy8gY2xvYmJlciBwb2ludCBvciB0aGUgcHJv
bG9ndWUsIHdoaWNoZXZlciBoYXBwZW5lZCBzb29uZXIuCisKK2NsYXNzIENDYWxsU3BlY2lhbCA6
IHB1YmxpYyBTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBDQ2FsbFNwZWNpYWwoKTsKKyAgICB+Q0Nh
bGxTcGVjaWFsKCk7CisKKyAgICAvLyBZb3UgY2Fubm90IHVzZSB0aGlzIHJlZ2lzdGVyIHRvIHBh
c3MgYXJndW1lbnRzLiBJdCBqdXN0IHNvIGhhcHBlbnMgdGhhdCB0aGlzIHJlZ2lzdGVyIGlzIG5v
dAorICAgIC8vIHVzZWQgZm9yIGFyZ3VtZW50cyBpbiB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24u
IEJ5IHRoZSB3YXksIHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgdGhhdCBjYXVzZXMKKyAgICAvLyB0
aGlzIHNwZWNpYWwgdG8gYmUgc3BlY2lmaWMgdG8gQyBjYWxscy4KKyAgICBzdGF0aWMgY29uc3Qg
R1BSUmVnIHNjcmF0Y2hSZWdpc3RlciA9IEdQUkluZm86Om5vbkFyZ0dQUjA7CisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIGZvckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpF
YWNoQXJnQ2FsbGJhY2s+Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBpc1ZhbGlkKEluc3QmKSBvdmVy
cmlkZTsKKyAgICBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgb3Zl
cnJpZGU7CisgICAgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3Rl
clNldCYpIG92ZXJyaWRlOworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJbnN0Jiwg
Q0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSBvdmVycmlkZTsKKyAgICBjb25zdCBS
ZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSBvdmVycmlkZTsKKworICAgIHZv
aWQgZHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICB2b2lkIGRlZXBE
dW1wSW1wbChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIFJl
Z2lzdGVyU2V0IG1fY2xvYmJlcmVkUmVnczsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJDQ2Fs
bFNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJBaXJDb2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ0NhbGxT
cGVjaWFsLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitDb2RlOjpDb2RlKCkKKyAgICA6
IG1fbGFzdFBoYXNlTmFtZSgiaW5pdGlhbCIpCit7Cit9CisKK0NvZGU6On5Db2RlKCkKK3sKK30K
KworQmFzaWNCbG9jayogQ29kZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1ZW5jeSkKK3sKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4gYmxvY2sobmV3IEJhc2ljQmxvY2sobV9ibG9ja3Mu
c2l6ZSgpLCBmcmVxdWVuY3kpKTsKKyAgICBCYXNpY0Jsb2NrKiByZXN1bHQgPSBibG9jay5nZXQo
KTsKKyAgICBtX2Jsb2Nrcy5hcHBlbmQoV1RGOjptb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNp
emUsIFN0YWNrU2xvdEtpbmQga2luZCwgU3RhY2tTbG90VmFsdWUqIHZhbHVlKQoreworICAgIHN0
ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChieXRlU2l6ZSwgbV9z
dGFja1Nsb3RzLnNpemUoKSwga2luZCwgdmFsdWUpKTsKKyAgICBTdGFja1Nsb3QqIHJlc3VsdCA9
IHNsb3QuZ2V0KCk7CisgICAgbV9zdGFja1Nsb3RzLmFwcGVuZChXVEY6Om1vdmUoc2xvdCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1NwZWNpYWwqIENvZGU6OmFkZFNwZWNpYWwoc3RkOjp1
bmlxdWVfcHRyPFNwZWNpYWw+IHNwZWNpYWwpCit7CisgICAgU3BlY2lhbCogcmVzdWx0ID0gc3Bl
Y2lhbC5nZXQoKTsKKyAgICBtX3NwZWNpYWxzLmFwcGVuZChXVEY6Om1vdmUoc3BlY2lhbCkpOwor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0NDYWxsU3BlY2lhbCogQ29kZTo6Y0NhbGxTcGVjaWFs
KCkKK3sKKyAgICBpZiAoIW1fY0NhbGxTcGVjaWFsKSB7CisgICAgICAgIG1fY0NhbGxTcGVjaWFs
ID0gc3RhdGljX2Nhc3Q8Q0NhbGxTcGVjaWFsKj4oCisgICAgICAgICAgICBhZGRTcGVjaWFsKHN0
ZDo6bWFrZV91bmlxdWU8Q0NhbGxTcGVjaWFsPigpKSk7CisgICAgfQorCisgICAgcmV0dXJuIG1f
Y0NhbGxTcGVjaWFsOworfQorCit2b2lkIENvZGU6OnJlc2V0UmVhY2hhYmlsaXR5KCkKK3sKKyAg
ICBCMzo6cmVzZXRSZWFjaGFiaWxpdHkobV9ibG9ja3MpOworfQorCit2b2lkIENvZGU6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDog
KnRoaXMpCisgICAgICAgIG91dC5wcmludChkZWVwRHVtcChibG9jaykpOworICAgIGlmIChzdGFj
a1Nsb3RzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiU3RhY2sgc2xvdHM6XG4iKTsK
KyAgICAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBzdGFja1Nsb3RzKCkpCisgICAgICAgICAg
ICBvdXQucHJpbnQoIiAgICAiLCBwb2ludGVyRHVtcChzbG90KSwgIjogIiwgZGVlcER1bXAoc2xv
dCksICJcbiIpOworICAgIH0KKyAgICBpZiAoc3BlY2lhbHMoKS5zaXplKCkpIHsKKyAgICAgICAg
b3V0LnByaW50KCJTcGVjaWFsczpcbiIpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwg
OiBzcGVjaWFscygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgcG9pbnRlckR1bXAo
c3BlY2lhbCksICI6ICIsIGRlZXBEdW1wKHNwZWNpYWwpLCAiXG4iKTsKKyAgICB9CisgICAgaWYg
KG1fZnJhbWVTaXplKQorICAgICAgICBvdXQucHJpbnQoIkZyYW1lIHNpemU6ICIsIG1fZnJhbWVT
aXplLCAiXG4iKTsKKyAgICBpZiAobV9jYWxsQXJnQXJlYVNpemUpCisgICAgICAgIG91dC5wcmlu
dCgiQ2FsbCBhcmcgYXJlYSBzaXplOiAiLCBtX2NhbGxBcmdBcmVhU2l6ZSwgIlxuIik7CisgICAg
aWYgKG1fY2FsbGVlU2F2ZVJlZ2lzdGVycy5zaXplKCkpCisgICAgICAgIG91dC5wcmludCgiQ2Fs
bGVlIHNhdmVzOiAiLCBtX2NhbGxlZVNhdmVSZWdpc3RlcnMsICJcbiIpOworfQorCit1bnNpZ25l
ZCBDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAg
IHdoaWxlIChpbmRleCA8IHNpemUoKSAmJiAhYXQoaW5kZXgpKQorICAgICAgICBpbmRleCsrOwor
ICAgIHJldHVybiBpbmRleDsKK30KKwordW5zaWduZWQgQ29kZTo6ZmluZE5leHRCbG9ja0luZGV4
KHVuc2lnbmVkIGluZGV4KSBjb25zdAoreworICAgIHJldHVybiBmaW5kRmlyc3RCbG9ja0luZGV4
KGluZGV4ICsgMSk7Cit9CisKK0Jhc2ljQmxvY2sqIENvZGU6OmZpbmROZXh0QmxvY2soQmFzaWNC
bG9jayogYmxvY2spIGNvbnN0Cit7CisgICAgcmV0dXJuIGF0KGZpbmROZXh0QmxvY2tJbmRleChi
bG9jay0+aW5kZXgoKSkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxMiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckNvZGVfaAorI2Rl
ZmluZSBBaXJDb2RlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNp
Y0Jsb2NrLmgiCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xv
dC5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCisjaW5jbHVkZSAiU3RhY2tB
bGlnbm1lbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBy
b2NlZHVyZTsKKworbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENDYWxsU3BlY2lhbDsKKworLy8g
VGhpcyBpcyBhbiBJUiB0aGF0IGlzIHZlcnkgY2xvc2UgdG8gdGhlIGJhcmUgbWV0YWwuIEl0IHJl
cXVpcmVzIGFib3V0IDQweCBtb3JlIGJ5dGVzIHRoYW4gdGhlCisvLyBnZW5lcmF0ZWQgbWFjaGlu
ZSBjb2RlIC0gZm9yIGV4YW1wbGUgaWYgeW91J3JlIGdlbmVyYXRpbmcgMU1CIG9mIG1hY2hpbmUg
Y29kZSwgeW91IG5lZWQgYWJvdXQKKy8vIDQwTUIgb2YgQWlyLgorCitjbGFzcyBDb2RlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShDb2RlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBDb2RlKCk7CisgICAgfkNvZGUoKTsKKworICAgIEJhc2ljQmxvY2sq
IGFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKworICAgIFN0YWNrU2xvdCogYWRk
U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1
ZSogPSBudWxscHRyKTsKKworICAgIFNwZWNpYWwqIGFkZFNwZWNpYWwoc3RkOjp1bmlxdWVfcHRy
PFNwZWNpYWw+KTsKKworICAgIC8vIFRoaXMgaXMgdGhlIHNwZWNpYWwgeW91IG5lZWQgdG8gbWFr
ZSBhIEMgY2FsbCEKKyAgICBDQ2FsbFNwZWNpYWwqIGNDYWxsU3BlY2lhbCgpOworCisgICAgVG1w
IG5ld1RtcChBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAodHlwZSkgewor
ICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1cm4gVG1wOjpncFRtcEZvcklu
ZGV4KG1fbnVtR1BUbXBzKyspOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICBy
ZXR1cm4gVG1wOjpmcFRtcEZvckluZGV4KG1fbnVtRlBUbXBzKyspOworICAgICAgICB9CisgICAg
fQorCisgICAgdW5zaWduZWQgbnVtVG1wcyhBcmc6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAg
IHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIEFyZzo6R1A6CisgICAgICAgICAgICByZXR1
cm4gbV9udW1HUFRtcHM7CisgICAgICAgIGNhc2UgQXJnOjpGUDoKKyAgICAgICAgICAgIHJldHVy
biBtX251bUZQVG1wczsKKyAgICAgICAgfQorICAgIH0KKworICAgIHVuc2lnbmVkIGNhbGxBcmdB
cmVhU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbEFyZ0FyZWFTaXplOyB9CisKKyAgICAvLyBZ
b3UgY2FuIGNhbGwgdGhpcyBiZWZvcmUgY29kZSBnZW5lcmF0aW9uIHRvIGZvcmNlIGEgbWluaW11
bSBjYWxsIGFyZyBhcmVhIHNpemUuCisgICAgdm9pZCByZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKHVu
c2lnbmVkIHNpemUpCisgICAgeworICAgICAgICBtX2NhbGxBcmdBcmVhU2l6ZSA9IHN0ZDo6bWF4
KAorICAgICAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUsCisgICAgICAgICAgICBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4oV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSwgc2l6ZSkpKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcmFtZVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2ZyYW1lU2l6ZTsgfQorCisgICAgLy8gT25seSBwaGFzZXMgdGhhdCBkbyBzdGFjayBh
bGxvY2F0aW9uIGFyZSBhbGxvd2VkIHRvIHNldCB0aGlzLiBDdXJyZW50bHksIG9ubHkKKyAgICAv
LyBBaXI6OmFsbG9jYXRlU3RhY2soKSBkb2VzIHRoaXMuCisgICAgdm9pZCBzZXRGcmFtZVNpemUo
dW5zaWduZWQgZnJhbWVTaXplKQorICAgIHsKKyAgICAgICAgbV9mcmFtZVNpemUgPSBmcmFtZVNp
emU7CisgICAgfQorCisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QmIGNhbGxlZVNhdmVSZWdpc3Rl
cnMoKSB7IHJldHVybiBtX2NhbGxlZVNhdmVSZWdpc3RlcnM7IH0KKworICAgIC8vIFJlY29tcHV0
ZXMgcHJlZGVjZXNzb3JzIGFuZCBkZWxldGVzIHVucmVhY2hhYmxlIGJsb2Nrcy4KKyAgICB2b2lk
IHJlc2V0UmVhY2hhYmlsaXR5KCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKKworICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2Jsb2Nrcy5zaXplKCk7
IH0KKyAgICBCYXNpY0Jsb2NrKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9i
bG9ja3NbaW5kZXhdLmdldCgpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAvLyBGaW5kcyB0aGUg
c21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBhdChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+
PSBpbmRleC4KKyAgICB1bnNpZ25lZCBmaW5kRmlyc3RCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4
KSBjb25zdDsKKworICAgIC8vIEZpbmRzIHRoZSBzbWFsbGVzdCBpbmRleCcgc3VjaCB0aGF0IGF0
KGluZGV4JykgIT0gbnVsbCBhbmQgaW5kZXgnID4gaW5kZXguCisgICAgdW5zaWduZWQgZmluZE5l
eHRCbG9ja0luZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKworICAgIEJhc2ljQmxvY2sqIGZp
bmROZXh0QmxvY2soQmFzaWNCbG9jayopIGNvbnN0OworCisgICAgY2xhc3MgaXRlcmF0b3Igewor
ICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX2NvZGUobnVs
bHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKwor
ICAgICAgICBpdGVyYXRvcihjb25zdCBDb2RlJiBjb2RlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAg
ICAgICAgIDogbV9jb2RlKCZjb2RlKQorICAgICAgICAgICAgLCBtX2luZGV4KG1fY29kZS0+Zmlu
ZEZpcnN0QmxvY2tJbmRleChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2NvZGUtPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gbV9jb2RlLT5maW5kRmly
c3RCbG9ja0luZGV4KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIp
IGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1f
aW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0
b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9
PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUq
IG1fY29kZTsKKyAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB9OworCisgICAgaXRlcmF0
b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVy
YXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisg
ICAgY2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3Rh
Y2tTbG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKKyAgICAgICAgICAgIDogbV9jb2Rl
KGNvZGUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUoKSBj
b25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzLnNpemUoKTsgfQorICAgICAgICBTdGFj
a1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Ns
b3RzW2luZGV4XS5nZXQoKTsgfQorICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0
ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2lu
ZGV4KDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJh
dG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAg
ICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3IqKCkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVy
YXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJu
IG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIGNvbnN0IFN0YWNrU2xvdHNDb2xs
ZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAg
ICAgICB9OworCisgICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IoKnRoaXMsIDApOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBD
b2RlJiBtX2NvZGU7CisgICAgfTsKKworICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHN0YWNrU2xv
dHMoKSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAK
KyAgICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24geworICAgIHB1YmxpYzoKKyAgICAgICAgU3Bl
Y2lhbHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29kZShj
b2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6ZSgpOyB9CisgICAgICAgIFNwZWNpYWwq
IGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFsc1tpbmRl
eF0uZ2V0KCk7IH0KKyAgICAgICAgU3BlY2lhbCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3Igewor
ICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAg
OiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaXRlcmF0b3IoY29uc3Qg
U3BlY2lhbHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAg
ICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICAgICAsIG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IFNwZWNpYWwqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0
dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAg
fQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBj
b25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90
aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3Ih
PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAg
IHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24qIG1fY29sbGVj
dGlvbjsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgICAgIH07CisKKyAgICAg
ICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0K
KyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNp
emUoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKKyAg
ICB9OworCisgICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1cm4g
U3BlY2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIAorICAgIC8vIFRoZSBuYW1lIGhhcyB0
byBiZSBhIHN0cmluZyBsaXRlcmFsLCBzaW5jZSB3ZSBkb24ndCBkbyBhbnkgbWVtb3J5IG1hbmFn
ZW1lbnQgZm9yIHRoZSBzdHJpbmcuCisgICAgdm9pZCBzZXRMYXN0UGhhc2VOYW1lKGNvbnN0IGNo
YXIqIG5hbWUpCisgICAgeworICAgICAgICBtX2xhc3RQaGFzZU5hbWUgPSBuYW1lOworICAgIH0K
KworICAgIGNvbnN0IGNoYXIqIGxhc3RQaGFzZU5hbWUoKSBjb25zdCB7IHJldHVybiBtX2xhc3RQ
aGFzZU5hbWU7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNr
U2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxv
Y2s+PiBtX2Jsb2NrczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3Nw
ZWNpYWxzOworICAgIENDYWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNpYWwgeyBudWxscHRyIH07Cisg
ICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07CisgICAgdW5zaWduZWQgbV9udW1GUFRtcHMg
eyAwIH07CisgICAgdW5zaWduZWQgbV9mcmFtZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9j
YWxsQXJnQXJlYVNpemUgeyAwIH07CisgICAgUmVnaXN0ZXJBdE9mZnNldExpc3QgbV9jYWxsZWVT
YXZlUmVnaXN0ZXJzOworICAgIGNvbnN0IGNoYXIqIG1fbGFzdFBoYXNlTmFtZTsKK307CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJDb2RlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQWlyRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZpbmUgQWlyRnJlcXVl
bnRlZEJsb2NrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0dlbmVyaWNG
cmVxdWVudGVkQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworCit0eXBlZGVmIEdlbmVyaWNGcmVxdWVu
dGVkQmxvY2s8QmFzaWNCbG9jaz4gRnJlcXVlbnRlZEJsb2NrOworCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8g
QWlyRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckdlbmVyYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE1NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJBaXJBbGxvY2F0ZVN0YWNrLmgiCisjaW5jbHVkZSAiQWlyQ29kZS5o
IgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0LmgiCisjaW5jbHVkZSAiQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5dGhpbmcuaCIKKyNpbmNsdWRl
ICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNJbmRl
eE1hcC5oIgorI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgZ2VuZXJhdGUoQ29kZSYgY29kZSwg
Q0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAgLy8gV2UgZG9uJ3QgZXhwZWN0IHRoZSBpbmNvbWlu
ZyBjb2RlIHRvIGhhdmUgcHJlZGVjZXNzb3JzIGNvbXB1dGVkLgorICAgIGNvZGUucmVzZXRSZWFj
aGFiaWxpdHkoKTsKKyAgICAKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJUigpKQorICAgICAgICB2
YWxpZGF0ZShjb2RlKTsKKworICAgIC8vIElmIHdlJ3JlIGRvaW5nIHN1cGVyIHZlcmJvc2UgZHVt
cGluZywgdGhlIHBoYXNlIHNjb3BlIG9mIGFueSBwaGFzZSB3aWxsIGFscmVhZHkgZG8gYSBkdW1w
LgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkg
eworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIGFpcjpcbiIpOworICAgICAgICBkYXRhTG9nKGNv
ZGUpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgd2hlcmUgd2UgcnVuIG91ciBvcHRpbWl6YXRp
b25zIGFuZCB0cmFuc2Zvcm1hdGlvbnMuCisgICAgLy8gRklYTUU6IEFkZCBBaXIgb3B0aW1pemF0
aW9ucy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
NDU2CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHdvdWxkIGhhdmUgYSByZWFsIHJlZ2lzdGVy
IGFsbG9jYXRvci4gVGhlbiwgd2UgY291bGQgdXNlIHNwaWxsRXZlcnl0aGluZygpCisgICAgLy8g
aW4gcGxhY2Ugb2YgdGhlIHJlZ2lzdGVyIGFsbG9jYXRvciBvbmx5IGZvciB0ZXN0aW5nLgorICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU3
CisgICAgc3BpbGxFdmVyeXRoaW5nKGNvZGUpOworCisgICAgLy8gUHJpb3IgdG8gdGhpcyBwb2lu
dCB0aGUgcHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGlzIGltcGxpY2l0LiBUaGlzIG1ha2VzIGl0IGV4
cGxpY2l0LiBJdCBhbHNvCisgICAgLy8gZG9lcyB0aGluZ3MgbGlrZSBpZGVudGlmeSB3aGljaCBj
YWxsZWUtc2F2ZXMgd2UncmUgdXNpbmcgYW5kIHNhdmVzIHRoZW0uCisgICAgaGFuZGxlQ2FsbGVl
U2F2ZXMoY29kZSk7CisKKyAgICAvLyBUaGlzIHR1cm5zIGFsbCBTdGFjayBhbmQgQ2FsbEFyZyBB
cmdzIGludG8gQWRkciBhcmdzIHRoYXQgdXNlIHRoZSBmcmFtZSBwb2ludGVyLiBJdCBkb2VzCisg
ICAgLy8gdGhpcyBieSBmaXJzdC1maXQgYWxsb2NhdGluZyBzdGFjayBzbG90cy4gSXQgc2hvdWxk
IGJlIHByZXR0eSBkYXJuIGNsb3NlIHRvIG9wdGltYWwsIHNvIHdlCisgICAgLy8gc2hvdWxkbid0
IGhhdmUgdG8gd29ycnkgYWJvdXQgdGhpcyB2ZXJ5IG11Y2guCisgICAgYWxsb2NhdGVTdGFjayhj
b2RlKTsKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcmVhbGx5IGhhdmUgYSBjb2RlIGxheW91
dCBvcHRpbWl6YXRpb24gaGVyZS4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUwNDc4CisKKyAgICAvLyBGSVhNRTogV2UgbmVlZCBhIGxhdGUgbGl2ZW5l
c3MgYW5hbHlzaXMgb3ZlciByZWdpc3RlcnMgdG8gZmlsbCBpbiB0aGUKKyAgICAvLyBTcGVjaWFs
OjpyZXBvcnRVc2VkUmVnaXN0ZXJzKCkuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE1MDUxMQorCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAg
ICAgICAgdmFsaWRhdGUoY29kZSk7CisKKyAgICAvLyBEbyBhIGZpbmFsIGR1bXAgb2YgQWlyLiBO
b3RlIHRoYXQgd2UgaGF2ZSB0byBkbyB0aGlzIGV2ZW4gaWYgd2UgYXJlIGRvaW5nIHBlci1waGFz
ZSBkdW1waW5nLAorICAgIC8vIHNpbmNlIHRoZSBmaW5hbCBnZW5lcmF0aW9uIGlzIG5vdCBhIHBo
YXNlLgorICAgIGlmIChzaG91bGREdW1wSVIoKSkgeworICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0
ZXIgIiwgY29kZS5sYXN0UGhhc2VOYW1lKCksICIsIGJlZm9yZSBnZW5lcmF0aW9uOlxuIik7Cisg
ICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisgICAgLy8gQW5kIG5vdywgd2UgZ2VuZXJh
dGUgY29kZS4KKyAgICBqaXQuZW1pdEZ1bmN0aW9uUHJvbG9ndWUoKTsKKyAgICBqaXQuYWRkUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKC1jb2RlLmZyYW1lU2l6ZSgpKSwgTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIEdlbmVyYXRpb25Db250ZXh0IGNv
bnRleHQ7CisgICAgY29udGV4dC5jb2RlID0gJmNvZGU7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9j
aywgQ0NhbGxIZWxwZXJzOjpMYWJlbD4gYmxvY2tMYWJlbHMoY29kZS5zaXplKCkpOworICAgIElu
ZGV4TWFwPEJhc2ljQmxvY2ssIENDYWxsSGVscGVyczo6SnVtcExpc3Q+IGJsb2NrSnVtcHMoY29k
ZS5zaXplKCkpOworCisgICAgYXV0byBsaW5rID0gWyZdIChDQ2FsbEhlbHBlcnM6Okp1bXAganVt
cCwgQmFzaWNCbG9jayogdGFyZ2V0KSB7CisgICAgICAgIGlmIChibG9ja0xhYmVsc1t0YXJnZXRd
LmlzU2V0KCkpIHsKKyAgICAgICAgICAgIGp1bXAubGlua1RvKGJsb2NrTGFiZWxzW3RhcmdldF0s
ICZqaXQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgYmxvY2tK
dW1wc1t0YXJnZXRdLmFwcGVuZChqdW1wKTsKKyAgICB9OworCisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgYmxvY2tKdW1wc1tibG9ja10ubGluaygmaml0KTsK
KyAgICAgICAgQVNTRVJUKGJsb2NrLT5zaXplKCkgPj0gMSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBibG9jay0+c2l6ZSgpIC0gMTsgKytpKSB7CisgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAganVtcCA9IGJsb2NrLT5hdChpKS5nZW5lcmF0ZShqaXQsIGNvbnRleHQp
OworICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChqdW1wLCAhanVtcC5pc1NldCgpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChibG9jay0+bGFzdCgpLm9wY29kZSA9PSBKdW1wCisgICAgICAg
ICAgICAmJiBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkgPT0gY29kZS5maW5kTmV4dEJsb2NrKGJs
b2NrKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChibG9jay0+bGFzdCgp
Lm9wY29kZSA9PSBSZXQpIHsKKyAgICAgICAgICAgIC8vIFdlIGN1cnJlbnRseSBkb24ndCByZXBy
ZXNlbnQgdGhlIGZ1bGwgcHJvbG9ndWUvZXBpbG9ndWUgaW4gQWlyLCBzbyB3ZSBuZWVkIHRvCisg
ICAgICAgICAgICAvLyBoYXZlIHRoaXMgb3ZlcnJpZGUuCisgICAgICAgICAgICBqaXQuZW1pdEZ1
bmN0aW9uRXBpbG9ndWUoKTsKKyAgICAgICAgICAgIGppdC5yZXQoKTsKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
anVtcCA9IGJsb2NrLT5sYXN0KCkuZ2VuZXJhdGUoaml0LCBjb250ZXh0KTsKKyAgICAgICAgZm9y
IChJbnN0JiBpbnN0IDogKmJsb2NrKQorICAgICAgICAgICAganVtcCA9IGluc3QuZ2VuZXJhdGUo
aml0LCBjb250ZXh0KTsKKyAgICAgICAgc3dpdGNoIChibG9jay0+bnVtU3VjY2Vzc29ycygpKSB7
CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAgIEFTU0VSVCghanVtcC5pc1NldCgpKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBsaW5rKGp1bXAs
IGJsb2NrLT5zdWNjZXNzb3JCbG9jaygwKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSAyOgorICAgICAgICAgICAgbGluayhqdW1wLCBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkp
OworICAgICAgICAgICAgaWYgKGJsb2NrLT5zdWNjZXNzb3JCbG9jaygxKSAhPSBjb2RlLmZpbmRO
ZXh0QmxvY2soYmxvY2spKQorICAgICAgICAgICAgICAgIGxpbmsoaml0Lmp1bXAoKSwgYmxvY2st
PnN1Y2Nlc3NvckJsb2NrKDEpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgZm9yIChhdXRvJiBsYXRlUGF0aCA6IGNv
bnRleHQubGF0ZVBhdGhzKQorICAgICAgICBsYXRlUGF0aC0+cnVuKGppdCwgY29udGV4dCk7Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJHZW5lcmF0ZV9oCisjZGVmaW5l
IEFpckdlbmVyYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mgewor
CitjbGFzcyBDQ2FsbEhlbHBlcnM7CisKK25hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBDb2RlOworCisvLyBUaGlzIHRha2VzIGFuIEFpcjo6Q29kZSB0aGF0IGhhc24ndCBo
YWQgYW55IHN0YWNrIGFsbG9jYXRpb24gYW5kIG9wdGlvbmFsbHkgaGFzbid0IGhhZCBhbnkKKy8v
IHJlZ2lzdGVyIGFsbG9jYXRpb24gYW5kIGRvZXMgYm90aCBvZiB0aG9zZSB0aGluZ3MsIGFuZCB0
aGVuIGdlbmVyYXRlcyB0aGUgY29kZSB1c2luZyB0aGUgZ2l2ZW4KKy8vIENDYWxsSGVscGVycyBp
bnN0YW5jZS4gTm90ZSB0aGF0IHRoaXMgbWF5IGNhbGwgY2FsbGJhY2tzIGluIHRoZSBzdXBwbGll
ZCBjb2RlIGFzIGl0IGlzCisvLyBnZW5lcmF0aW5nLgordm9pZCBnZW5lcmF0ZShDb2RlJiwgQ0Nh
bGxIZWxwZXJzJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJHZW5lcmF0ZV9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGVkLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisvLyBUaGlzIGlzIGdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorI2lu
Y2x1ZGUgIkFpck9wY29kZUdlbmVyYXRlZC5oIgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGlvbkNvbnRleHQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRp
b25Db250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckdlbmVyYXRpb25Db250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
ckdlbmVyYXRpb25Db250ZXh0X2gKKyNkZWZpbmUgQWlyR2VuZXJhdGlvbkNvbnRleHRfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworc3RydWN0IEdlbmVy
YXRpb25Db250ZXh0IHsKKyAgICB0eXBlZGVmIHZvaWQgTGF0ZVBhdGhGdW5jdGlvbihDQ2FsbEhl
bHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxMYXRl
UGF0aEZ1bmN0aW9uPiBMYXRlUGF0aDsKKworICAgIFZlY3RvcjxSZWZQdHI8TGF0ZVBhdGg+PiBs
YXRlUGF0aHM7CisgICAgQ29kZSogY29kZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJHZW5l
cmF0aW9uQ29udGV4dF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckhhbmRsZUNh
bGxlZVNhdmVzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5o
IgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2
b2lkIGhhbmRsZUNhbGxlZVNhdmVzKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFz
ZVNjb3BlKGNvZGUsICJoYW5kbGVDYWxsZWVTYXZlcyIpOworCisgICAgUmVnaXN0ZXJTZXQgdXNl
ZENhbGxlZVNhdmVzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBpbnN0LmZvckVh
Y2hUbXBGYXN0KAorICAgICAgICAgICAgICAgIFsmXSAoVG1wJiB0bXApIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gQXQgZmlyc3Qgd2UganVzdCByZWNvcmQgYWxsIHVzZWQgcmVncy4KKyAgICAg
ICAgICAgICAgICAgICAgdXNlZENhbGxlZVNhdmVzLnNldCh0bXAucmVnKCkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gTm93IHdlIGZpbHRlciB0byBy
ZWFsbHkgZ2V0IHRoZSBjYWxsZWUgc2F2ZXMuCisgICAgdXNlZENhbGxlZVNhdmVzLmZpbHRlcihS
ZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKKworICAgIGlmICghdXNlZENhbGxl
ZVNhdmVzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGNv
ZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpID0gUmVnaXN0ZXJBdE9mZnNldExpc3QodXNlZENhbGxl
ZVNhdmVzKTsKKworICAgIHNpemVfdCBieXRlU2l6ZSA9IDA7CisgICAgZm9yIChjb25zdCBSZWdp
c3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVlU2F2ZVJlZ2lzdGVycygpKQorICAgICAg
ICBieXRlU2l6ZSA9IHN0ZDo6bWF4KHN0YXRpY19jYXN0PHNpemVfdD4oLWVudHJ5Lm9mZnNldCgp
KSwgYnl0ZVNpemUpOworCisgICAgU3RhY2tTbG90KiBzYXZlc0FyZWEgPSBjb2RlLmFkZFN0YWNr
U2xvdChieXRlU2l6ZSwgU3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICAvLyBUaGlzIGlzIGEg
Yml0IHdlaXJkIHNpbmNlIHdlIGNvdWxkIGhhdmUgYWxyZWFkeSBwaW5uZWQgYSBkaWZmZXJlbnQg
c3RhY2sgc2xvdCB0byB0aGlzCisgICAgLy8gYXJlYS4gQWxzbywgb3VyIHJ1bnRpbWUgZG9lcyBu
b3QgcmVxdWlyZSB1cyB0byBwaW4gdGhlIHNhdmVzIGFyZWEuIE1heWJlIHdlIHNob3VsZG4ndCBw
aW4gaXQ/CisgICAgc2F2ZXNBcmVhLT5zZXRPZmZzZXRGcm9tRlAoLWJ5dGVTaXplKTsKKworICAg
IGF1dG8gYXJnRm9yID0gWyZdIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSkgLT4gQXJn
IHsKKyAgICAgICAgcmV0dXJuIEFyZzo6c3RhY2soc2F2ZXNBcmVhLCBlbnRyeS5vZmZzZXQoKSAr
IGJ5dGVTaXplKTsKKyAgICB9OworCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2Rl
KTsKKyAgICAKKyAgICAvLyBGaXJzdCBpbnNlcnQgc2F2aW5nIGNvZGUgaW4gdGhlIHByb2xvZ3Vl
LgorICAgIGZvciAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNh
dmVSZWdpc3RlcnMoKSkgeworICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAg
ICAgMCwgZW50cnkucmVnKCkuaXNHUFIoKSA/IE1vdmUgOiBNb3ZlRG91YmxlLCBjb2RlWzBdLT5h
dCgwKS5vcmlnaW4sCisgICAgICAgICAgICBUbXAoZW50cnkucmVnKCkpLCBhcmdGb3IoZW50cnkp
KTsKKyAgICB9CisgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoY29kZVswXSk7CisKKyAgICAvLyBO
b3cgaW5zZXJ0IHJlc3RvcmUgY29kZSBhdCBlcGlsb2d1ZXMuCisgICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgSW5zdCYgbGFzdCA9IGJsb2NrLT5sYXN0KCk7Cisg
ICAgICAgIGlmIChsYXN0Lm9wY29kZSAhPSBSZXQpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAg
ICAgICAgICAgICAgYmxvY2stPnNpemUoKSAtIDEsIGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3Zl
IDogTW92ZURvdWJsZSwgbGFzdC5vcmlnaW4sCisgICAgICAgICAgICAgICAgYXJnRm9yKGVudHJ5
KSwgVG1wKGVudHJ5LnJlZygpKSk7CisgICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4
ZWN1dGUoYmxvY2spOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKyNkZWZp
bmUgQWlySGFuZGxlQ2FsbGVlU2F2ZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDb2RlOwor
CisvLyBUaGlzIHBoYXNlIGlkZW50aWZpZXMgY2FsbGVlLXNhdmUgcmVnaXN0ZXJzIGFuZCBhZGRz
IGNvZGUgdG8gc2F2ZS9yZXN0b3JlIHRoZW0gaW4gdGhlCisvLyBwcm9sb2d1ZS9lcGlsb2d1ZSB0
byB0aGUgY29kZS4gSXQncyBhIG1hbmRhdG9yeSBwaGFzZS4KKworLy8gRklYTUU6IEl0IHdvdWxk
IGJlIGNvb2wgdG8gbWFrZSB0aGlzIG1vcmUgaW50ZXJhY3RpdmUgd2l0aCB0aGUgQWlyIGNsaWVu
dCBhbmQgYWxzbyBtb3JlCisvLyBwb3dlcmZ1bC4KKy8vIFdlIHNob3VsZCBoYXZlIHNocmluayB3
cmFwcGluZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1OAor
Ly8gV2Ugc2hvdWxkIG1ha2UgdGhpcyBpbnRlcmFjdCB3aXRoIHRoZSBjbGllbnQ6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTkKKwordm9pZCBoYW5kbGVDYWxs
ZWVTYXZlcyhDb2RlJik7CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJIYW5kbGVDYWxsZWVTYXZlc19o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlv
blNldC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc2VydGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2lj
QmxvY2sqIGJsb2NrKQoreworICAgIGV4ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5tX2luc3RzLCBt
X2luc2VydGlvbnMpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc2VydGlvblNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlySW5zZXJ0aW9uU2V0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBBaXJJbnNlcnRpb25TZXRfaAorI2RlZmluZSBBaXJJbnNlcnRpb25TZXRfaAorCisj
aWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlIDx3dGYv
SW5zZXJ0aW9uLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEJhc2ljQmxvY2s7CitjbGFz
cyBDb2RlOworCit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPEluc3Q+IEluc2VydGlvbjsKKworY2xh
c3MgSW5zZXJ0aW9uU2V0IHsKK3B1YmxpYzoKKyAgICBJbnNlcnRpb25TZXQoQ29kZSYgY29kZSkK
KyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAgICB7CisgICAgfQorCisgICAgQ29kZSYgY29kZSgp
IHsgcmV0dXJuIG1fY29kZTsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICB2b2lk
IGFwcGVuZEluc2VydGlvbihUJiYgaW5zZXJ0aW9uKQorICAgIHsKKyAgICAgICAgbV9pbnNlcnRp
b25zLmFwcGVuZChzdGQ6OmZvcndhcmQ8VD4oaW5zZXJ0aW9uKSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgSW5zdD4KKyAgICB2b2lkIGluc2VydEluc3Qoc2l6ZV90IGluZGV4LCBJ
bnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIGFwcGVuZEluc2VydGlvbihJbnNlcnRpb24oaW5k
ZXgsIHN0ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSkpOworICAgIH0KKyAgICAKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBpbnNlcnQoc2l6ZV90IGluZGV4LCBB
cmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICBpbnNlcnRJbnN0KGluZGV4
LCBJbnN0KHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKTsKKyAgICB9CisK
KyAgICB2b2lkIGV4ZWN1dGUoQmFzaWNCbG9jayopOworCitwcml2YXRlOgorICAgIENvZGUmIG1f
Y29kZTsKKyAgICBWZWN0b3I8SW5zZXJ0aW9uLCA4PiBtX2luc2VydGlvbnM7Cit9OworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQWlySW5zZXJ0aW9uU2V0X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNWYWx1ZS5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgSW5zdDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChvcGNvZGUsICIgIiwg
bGlzdER1bXAoYXJncykpOworICAgIGlmIChvcmlnaW4pIHsKKyAgICAgICAgaWYgKGFyZ3Muc2l6
ZSgpKQorICAgICAgICAgICAgb3V0LnByaW50KCIsICIpOworICAgICAgICBvdXQucHJpbnQoKm9y
aWdpbik7CisgICAgfQorfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJJbnN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckluc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RfaAorI2RlZmlu
ZSBBaXJJbnN0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJBcmcuaCIK
KyNpbmNsdWRlICJBaXJPcGNvZGUuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIENDYWxsSGVscGVyczsKK2NsYXNzIFJlZ2lzdGVyU2V0Owor
CituYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYWx1ZTsKKworbmFtZXNwYWNlIEFpciB7CisKK3N0
cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKKworc3RydWN0IEluc3QgeworcHVibGljOgorICAgIHR5
cGVkZWYgVmVjdG9yPEFyZywgMz4gQXJnTGlzdDsKKworICAgIEluc3QoKQorICAgICAgICA6IG9y
aWdpbihudWxscHRyKQorICAgICAgICAsIG9wY29kZShOb3ApCisgICAgeworICAgIH0KKyAgICAK
KyAgICBJbnN0KE9wY29kZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4pCisgICAgICAgIDogb3JpZ2lu
KG9yaWdpbikKKyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIEluc3QoT3Bjb2RlIG9wY29k
ZSwgVmFsdWUqIG9yaWdpbiwgQXJnIGFyZywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAg
ICAgOiBhcmdzeyBhcmcsIGFyZ3VtZW50cy4uLiB9CisgICAgICAgICwgb3JpZ2luKG9yaWdpbikK
KyAgICAgICAgLCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29k
ZSBvcGNvZGUsIFZhbHVlKiBvcmlnaW4sIGNvbnN0IEFyZ0xpc3QmIGFyZ3VtZW50cykKKyAgICAg
ICAgOiBhcmdzKGFyZ3VtZW50cykKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAs
IG9wY29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIEluc3QoT3Bjb2RlIG9wY29kZSwg
VmFsdWUqIG9yaWdpbiwgQXJnTGlzdCYmIGFyZ3VtZW50cykKKyAgICAgICAgOiBhcmdzKFdURjo6
bW92ZShhcmd1bWVudHMpKQorICAgICAgICAsIG9yaWdpbihvcmlnaW4pCisgICAgICAgICwgb3Bj
b2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoZXNlIGZ1bmN0
b3JzIGFsbCBhdm9pZCB1c2luZyAiY29uc3QiIGJlY2F1c2Ugd2Ugd2FudCB0byB1c2UgdGhlbSBm
b3IgdGhpbmdzIHRoYXQKKyAgICAvLyBlZGl0IElSLiBJUiBpcyBtZWFudCB0byBiZSBlZGl0ZWQ7
IGlmIHlvdSdyZSBjYXJyeWluZyBhcm91bmQgYSAiY29uc3QgSW5zdCYiIHRoZW4geW91J3JlCisg
ICAgLy8gcHJvYmFibHkgZG9pbmcgaXQgd3JvbmcuCisKKyAgICAvLyBUaGlzIG9ubHkgd2Fsa3Mg
dGhvc2UgVG1wcyB0aGF0IGFyZSBleHBsaWNpdGx5IG1lbnRpb25lZCwgYW5kIGl0IGRvZXNuJ3Qg
dGVsbCB5b3UgdGhlaXIgcm9sZQorICAgIC8vIG9yIHR5cGUuCisgICAgdGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hUbXBGYXN0KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICBmb3IgKEFyZyYgYXJnIDogYXJncykKKyAgICAgICAgICAgIGFy
Zy5mb3JFYWNoVG1wRmFzdChmdW5jdG9yKTsKKyAgICB9CisKKyAgICB0eXBlZGVmIHZvaWQgRWFj
aEFyZ0NhbGxiYWNrKEFyZyYsIEFyZzo6Um9sZSwgQXJnOjpUeXBlKTsKKyAgICAKKyAgICAvLyBD
YWxscyB0aGUgZnVuY3RvciB3aXRoIChhcmcsIHJvbGUsIHR5cGUpLiBUaGlzIGZ1bmN0aW9uIGlz
IGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaEFyZyhjb25zdCBGdW5jdG9y
Jik7CisKKyAgICAvLyBDYWxscyB0aGUgZnVuY3RvciB3aXRoICh0bXAsIHJvbGUsIHR5cGUpLgor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wKGNvbnN0
IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBmb3JFYWNoQXJnKAorICAgICAgICAg
ICAgWyZdIChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7CisgICAg
ICAgICAgICAgICAgYXJnLmZvckVhY2hUbXAocm9sZSwgdHlwZSwgZnVuY3Rvcik7CisgICAgICAg
ICAgICB9KTsKKyAgICB9CisKKyAgICAvLyBUaGluZyBjYW4gYmUgZWl0aGVyIEFyZyBvciBUbXAu
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9p
ZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImKTsKKworICAgIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGlz
IGluc3RydWN0aW9uIGhhcyBhIFNwZWNpYWwqLiBUaGlzIHVubG9ja3Mgc29tZSBleHRyYSBmdW5j
dGlvbmFsaXR5LgorICAgIGJvb2wgaGFzU3BlY2lhbCgpIGNvbnN0OworCisgICAgLy8gUmVwb3J0
cyBhbnkgYWRkaXRpb25hbCByZWdpc3RlcnMgY2xvYmJlcmVkIGJ5IHRoaXMgb3BlcmF0aW9uLiBO
b3RlIHRoYXQgZm9yIGVmZmljaWVuY3ksCisgICAgLy8gZXh0cmFDbG9iYmVyZWRSZWdzKCkgb25s
eSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoKTsKKworICAgIC8vIFVzZSB0aGlzIHRvIHJlcG9ydCB3
aGljaCByZWdpc3RlcnMgYXJlIGxpdmUuIFRoaXMgc2hvdWxkIGJlIGRvbmUganVzdCBiZWZvcmUg
Y29kZWdlbi4gTm90ZQorICAgIC8vIHRoYXQgZm9yIGVmZmljaWVuY3ksIHJlcG9ydFVzZWRSZWdp
c3RlcnMoKSBvbmx5IHdvcmtzIGlmIGhhc1NwZWNpYWwoKSByZXR1cm5zIHRydWUuCisgICAgdm9p
ZCByZXBvcnRVc2VkUmVnaXN0ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0Jik7CisKKyAgICAvLyBJcyB0
aGlzIGluc3RydWN0aW9uIGluIG9uZSBvZiB0aGUgdmFsaWQgZm9ybXMgcmlnaHQgbm93PyBUaGlz
IGZ1bmN0aW9uIGlzIGF1dG8tZ2VuZXJhdGVkIGJ5CisgICAgLy8gb3Bjb2RlX2dlbmVyYXRvci5y
Yi4KKyAgICBib29sIGlzVmFsaWRGb3JtKCk7CisKKyAgICAvLyBBc3N1bWluZyB0aGlzIGluc3Ry
dWN0aW9uIGlzIGluIGEgdmFsaWQgZm9ybSByaWdodCBub3csIHdpbGwgaXQgc3RpbGwgYmUgaW4g
b25lIG9mIHRoZSB2YWxpZAorICAgIC8vIGZvcm1zIGlmIHdlIHB1dCBhbiBBZGRyIHJlZmVyZW5j
aW5nIHRoZSBzdGFjayAob3IgYSBTdGFja1Nsb3Qgb3IgQ2FsbEFyZywgb2YgY291cnNlKSBpbiB0
aGUKKyAgICAvLyBnaXZlbiBpbmRleD8gU3BpbGxpbmcgdXNlcyB0aGlzOiBpdCB3YWxrcyB0aGUg
YXJncyBieSBpbmRleCB0byBmaW5kIFRtcHMgdGhhdCBuZWVkIHNwaWxsaW5nOworICAgIC8vIGlm
IGl0IGZpbmRzIG9uZSwgaXQgY2FsbHMgdGhpcyB0byBzZWUgaWYgaXQgY2FuIHJlcGxhY2UgdGhl
IEFyZzo6VG1wIHdpdGggYW4gQXJnOjpBZGRyLiBJZiBpdAorICAgIC8vIGZpbmRzIGEgbm9uLVRt
cCBBcmcsIHRoZW4gaXQgY2FsbHMgdGhhdCBBcmcncyBmb3JFYWNoVG1wIHRvIGRvIGEgcmVwbGFj
ZW1lbnQgdGhhdCB3YXkuCisgICAgLy8KKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGlzIGF1dG8tZ2Vu
ZXJhdGVkIGJ5IG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgYm9vbCBhZG1pdHNTdGFjayh1bnNp
Z25lZCBhcmdJbmRleCk7CisKKyAgICAvLyBHZW5lcmF0ZSBzb21lIGNvZGUgZm9yIHRoaXMgaW5z
dHJ1Y3Rpb24uIFRoaXMgaXMsIGxpa2UsIGxpdGVyYWxseSBvdXIgYmFja2VuZC4gSWYgdGhpcyBp
cyB0aGUKKyAgICAvLyB0ZXJtaW5hbCwgaXQgcmV0dXJucyB0aGUganVtcCB0aGF0IG5lZWRzIHRv
IGJlIGxpbmtlZCBmb3IgdGhlICJ0aGVuIiBjYXNlLCB3aXRoIHRoZSAiZWxzZSIKKyAgICAvLyBj
YXNlIGJlaW5nIGZhbGwtdGhyb3VnaC4gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBi
eSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShD
Q2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uQ29udGV4dCYpOworCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKKyAgICBBcmdMaXN0IGFyZ3M7CisgICAgVmFsdWUqIG9yaWdpbjsg
Ly8gVGhlIEIzOjpWYWx1ZSB0aGF0IHRoaXMgb3JpZ2luYXRlZCBmcm9tLgorICAgIE9wY29kZSBv
cGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdF9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpckluc3RJbmxpbmVzX2gKKyNkZWZpbmUgQWlySW5zdElu
bGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckluc3QuaCIKKyNp
bmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNs
dWRlICJCM1N0YWNrbWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+
IHN0cnVjdCBGb3JFYWNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxUbXA+IHsKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVhY2goSW5zdCYg
aW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGluc3QuZm9yRWFj
aFRtcChmdW5jdG9yKTsKKyAgICB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgRm9yRWFjaDxBcmc+
IHsKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHN0YXRpYyB2b2lkIGZvckVh
Y2goSW5zdCYgaW5zdCwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIGlu
c3QuZm9yRWFjaEFyZyhmdW5jdG9yKTsKKyAgICB9Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
aGluZywgdHlwZW5hbWUgRnVuY3Rvcj4KK3ZvaWQgSW5zdDo6Zm9yRWFjaChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yKQoreworICAgIEZvckVhY2g8VGhpbmc+Ojpmb3JFYWNoKCp0aGlzLCBmdW5jdG9y
KTsKK30KKworaW5saW5lIGJvb2wgSW5zdDo6aGFzU3BlY2lhbCgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIGFyZ3Muc2l6ZSgpICYmIGFyZ3NbMF0uaXNTcGVjaWFsKCk7Cit9CisKK2lubGluZSBjb25z
dCBSZWdpc3RlclNldCYgSW5zdDo6ZXh0cmFDbG9iYmVyZWRSZWdzKCkKK3sKKyAgICBBU1NFUlQo
aGFzU3BlY2lhbCgpKTsKKyAgICByZXR1cm4gYXJnc1swXS5zcGVjaWFsKCktPmV4dHJhQ2xvYmJl
cmVkUmVncygqdGhpcyk7Cit9CisKK2lubGluZSB2b2lkIEluc3Q6OnJlcG9ydFVzZWRSZWdpc3Rl
cnMoY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgQVNTRVJUKGhhc1Nw
ZWNpYWwoKSk7CisgICAgYXJnc1swXS5zcGVjaWFsKCktPnJlcG9ydFVzZWRSZWdpc3RlcnMoKnRo
aXMsIHVzZWRSZWdpc3RlcnMpOworfQorCitpbmxpbmUgYm9vbCBpc1NoaWZ0VmFsaWQoY29uc3Qg
SW5zdCYgaW5zdCkKK3sKKyNpZiBDUFUoWDg2KSB8fCBDUFUoWDg2XzY0KQorICAgIHJldHVybiBp
bnN0LmFyZ3NbMF0gPT0gVG1wKFg4NlJlZ2lzdGVyczo6ZWN4KTsKKyNlbHNlCisgICAgVU5VU0VE
X1BBUkFNKGluc3QpOworICAgIHJldHVybiB0cnVlOworI2VuZGlmCit9ICAgCisKK2lubGluZSBi
b29sIGlzTHNoaWZ0MzJWYWxpZChjb25zdCBJbnN0JiBpbnN0KQoreworICAgIHJldHVybiBpc1No
aWZ0VmFsaWQoaW5zdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKwor
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJJbnN0SW5saW5lc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJMaXZlbmVzc19oCisjZGVmaW5lIEFpckxp
dmVuZXNzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJCYXNpY0Jsb2Nr
LmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCisvLyBZb3Ug
Y2FuIGNvbXB1dGUgbGl2ZW5lc3Mgb3ZlciBUbXAncyBvciBvdmVyIEFyZydzLiBJZiB5b3UgY29t
cHV0ZSBvdmVyIEFyZydzLCB5b3UgZ2V0IGJvdGgKKy8vIHN0YWNrIGxpdmVuZXNzIGFuZCB0bXAg
bGl2ZW5lc3MuCit0ZW1wbGF0ZTx0eXBlbmFtZSBUaGluZz4KK2NsYXNzIExpdmVuZXNzIHsKK3B1
YmxpYzoKKyAgICBMaXZlbmVzcyhDb2RlJiBjb2RlKQorICAgIHsKKyAgICAgICAgbV9saXZlQXRI
ZWFkLnJlc2l6ZShjb2RlLnNpemUoKSk7CisgICAgICAgIG1fbGl2ZUF0VGFpbC5yZXNpemUoY29k
ZS5zaXplKCkpOworCisgICAgICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IHNlZW47CisKKyAgICAg
ICAgYm9vbCBjaGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgd2hpbGUgKGNoYW5nZWQpIHsKKyAgICAg
ICAgICAgIGNoYW5nZWQgPSBmYWxzZTsKKworICAgICAgICAgICAgZm9yIChzaXplX3QgYmxvY2tJ
bmRleCA9IGNvZGUuc2l6ZSgpOyBibG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgQmFz
aWNCbG9jayogYmxvY2sgPSBjb2RlLmF0KGJsb2NrSW5kZXgpOworICAgICAgICAgICAgICAgIExv
Y2FsQ2FsYyBsb2NhbENhbGMoKnRoaXMsIGJsb2NrKTsKKyAgICAgICAgICAgICAgICBmb3IgKHNp
emVfdCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspCisgICAgICAgICAg
ICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGJsb2NrLT5hdChpbnN0SW5kZXgpKTsKKyAgICAg
ICAgICAgICAgICBib29sIGZpcnN0VGltZSA9IHNlZW4uYWRkKGJsb2NrKTsKKyAgICAgICAgICAg
ICAgICBpZiAoIWZpcnN0VGltZSAmJiBsb2NhbENhbGMubGl2ZSgpID09IG1fbGl2ZUF0SGVhZFti
bG9ja10pCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIGNo
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNz
b3IgOiBibG9jay0+cHJlZGVjZXNzb3JzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9saXZl
QXRUYWlsW3ByZWRlY2Vzc29yXS5hZGQoCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhbENh
bGMubGl2ZSgpLmJlZ2luKCksIGxvY2FsQ2FsYy5saXZlKCkuZW5kKCkpOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBtX2xpdmVBdEhlYWRbYmxvY2tdID0gbG9jYWxDYWxjLnRh
a2VMaXZlKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjb25zdCBI
YXNoU2V0PFRoaW5nPiYgbGl2ZUF0SGVhZChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2xpdmVBdEhlYWRbYmxvY2tdOworICAgIH0KKworICAgIGNvbnN0
IEhhc2hTZXQ8VGhpbmc+JiBsaXZlQXRUYWlsKEJhc2ljQmxvY2sqIGJsb2NrKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fbGl2ZUF0VGFpbFtibG9ja107CisgICAgfQorCisgICAgLy8g
VGhpcyBjYWxjdWxhdG9yIGhhcyB0byBiZSBydW4gaW4gcmV2ZXJzZS4KKyAgICBjbGFzcyBMb2Nh
bENhbGMgeworICAgIHB1YmxpYzoKKyAgICAgICAgTG9jYWxDYWxjKExpdmVuZXNzJiBsaXZlbmVz
cywgQmFzaWNCbG9jayogYmxvY2spCisgICAgICAgICAgICA6IG1fbGl2ZShsaXZlbmVzcy5saXZl
QXRUYWlsKGJsb2NrKSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgSGFz
aFNldDxUaGluZz4mIGxpdmUoKSBjb25zdCB7IHJldHVybiBtX2xpdmU7IH0KKyAgICAgICAgSGFz
aFNldDxUaGluZz4mJiB0YWtlTGl2ZSgpIHsgcmV0dXJuIFdURjo6bW92ZShtX2xpdmUpOyB9CisK
KyAgICAgICAgdm9pZCBleGVjdXRlKEluc3QmIGluc3QpCisgICAgICAgIHsKKyAgICAgICAgICAg
IC8vIEZpcnN0IGhhbmRsZSBkZWYncy4KKyAgICAgICAgICAgIGluc3QuZm9yRWFjaDxUaGluZz4o
CisgICAgICAgICAgICAgICAgW3RoaXNdIChUaGluZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJn
OjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzQWxpdmUoKSkKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6
aXNEZWYocm9sZSkpCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKGFyZyk7
CisgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIC8vIE5leHQgaGFuZGxlIGNsb2Ji
ZXJlZCByZWdpc3RlcnMuCisgICAgICAgICAgICBpZiAoaW5zdC5oYXNTcGVjaWFsKCkpIHsKKyAg
ICAgICAgICAgICAgICBpbnN0LmV4dHJhQ2xvYmJlcmVkUmVncygpLmZvckVhY2goCisgICAgICAg
ICAgICAgICAgICAgIFt0aGlzXSAoUmVnIHJlZykgeworICAgICAgICAgICAgICAgICAgICAgICAg
bV9saXZlLnJlbW92ZShUaGluZyhUbXAocmVnKSkpOworICAgICAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gRmluYWxseSBoYW5k
bGUgdXNlJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+KAorICAgICAgICAgICAg
ICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAg
ICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLmFkZChhcmcpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBIYXNoU2V0PFRoaW5nPiBt
X2xpdmU7CisgICAgfTsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
SGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0SGVhZDsKKyAgICBJbmRleE1hcDxCYXNpY0Jsb2NrLCBI
YXNoU2V0PFRoaW5nPj4gbV9saXZlQXRUYWlsOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckxp
dmVuZXNzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJPcGNvZGUu
b3Bjb2Rlcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpck9w
Y29kZS5vcGNvZGVzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJPcGNvZGUub3Bjb2Rlcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2MiBAQAorIyBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyMgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRS
SUJVVE9SUworIyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UworIyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisj
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworIyBTeWxsYWJ1czoKKyMKKyMgUm9s
ZXMgYW5kIHR5cGVzOgorIyBVOkcgPT4gdXNlIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVy
IG9yIHZhbHVlCisjIEQ6RyA9PiBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0ZXIgb3Ig
dmFsdWUKKyMgVUQ6RyA9PiB1c2UgYW5kIGRlZiBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3Rl
ciBvciB2YWx1ZQorIyBVOkYgPT4gdXNlIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMg
RDpGID0+IGRlZiBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisjIFVEOkYgPT4gdXNlIGFu
ZCBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIworIyBBcmd1bWVudCBraW5kczoK
KyMgVG1wID0+IHRlbXBvcmFyeSBvciByZWdpc3RlcgorIyBJbW0gPT4gMzItYml0IGltbWVkaWF0
ZSBpbnQKKyMgSW1tNjQgPT4gVHJ1c3RlZEltbTY0CisjIEFkZHIgPT4gYWRkcmVzcyBhcyB0ZW1w
b3JhcnkvcmVnaXN0ZXIrb2Zmc2V0CisjIEluZGV4ID0+IEJhc2VJbmRleCBhZGRyZXNzCisjIEFi
cyA9PiBBYnNvbHV0ZUFkZHJlc3MKKyMKKyMgVGhlIHBhcnNlciB2aWV3cyB0aGVzZSB0aGluZ3Mg
YXMga2V5d29yZHMsIGFuZCB1bmRlcnN0YW5kcyB0aGF0IHRoZXkgZmFsbCBpbnRvIHR3byBkaXN0
aW5jdCBjbGFzc2VzCisjIG9mIHRoaW5ncy4gU28sIGFsdGhvdWdoIHRoaXMgZmlsZSB1c2VzIGEg
cGFydGljdWxhciBpbmRlbnRhdGlvbiBzdHlsZSwgbm9uZSBvZiB0aGUgd2hpdGVzcGFjZSBvcgor
IyBldmVuIG5ld2xpbmVzIGFyZSBtZWFuaW5nZnVsIHRvIHRoZSBwYXJzZXIuIEZvciBleGFtcGxl
LCB5b3UgY291bGQgd3JpdGU6CisjCisjIEZvbzQyIFU6RywgVUQ6RiBJbW0sIFRtcCBBZGRyLCBU
bXAKKyMKKyMgQW5kIHRoZSBwYXJzZXIgd291bGQga25vdyB0aGF0IHRoaXMgaXMgdGhlIHNhbWUg
YXM6CisjCisjIEZvbzQyIFU6RywgVUQ6RgorIyAgICAgSW1tLCBUbXAKKyMgICAgIEFkZHIsIFRt
cAorIworIyBJLmUuIGEgdHdvLWZvcm0gaW5zdHJ1Y3Rpb24gdGhhdCB1c2VzIGEgR1BSIG9yIGFu
IGludCBpbW1lZGlhdGUgYW5kIHVzZXMrZGVmcyBhIGZsb2F0IHJlZ2lzdGVyLgorCisjIE5vdGUg
dGhhdCB0aGUgb3Bjb2RlcyBoZXJlIGhhdmUgYSBsZWFkaW5nIGNhcGl0YWwgKEFkZDMyKSBidXQg
bXVzdCBjb3JyZXNwb25kIHRvIE1hY3JvQXNzZW1ibGVyCisjIEFQSSB0aGF0IGhhcyBhIGxlYWRp
bmcgbG93ZXItY2FzZSAoYWRkMzIpLgorCitOb3AKKworQWRkMzIgVTpHLCBVRDpHCisgICAgVG1w
LCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAorICAgIEFkZHIsIFRtcAorICAgIFRt
cCwgQWRkcgorCitBZGQzMiBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRtcAorCitBZGQ2
NCBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgQWRkcgorICAgIEltbSwgVG1wCisg
ICAgQWRkciwgVG1wCisKK0FkZDY0IFU6RywgVTpHLCBEOkcKKyAgICBJbW0sIFRtcCwgVG1wCisK
K0FuZDMyIFU6RywgVUQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBUbXAsIEFk
ZHIKKyAgICBBZGRyLCBUbXAKKyAgICBJbW0sIEFkZHIKKworQW5kNjQgVTpHLCBVRDpHCisgICAg
VG1wLCBUbXAKKyAgICBJbW0sIFRtcAorCitMc2hpZnQzMiBVOkcsIFVEOkcKKyAgICBUbXAqLCBU
bXAKKyAgICBJbW0sIFRtcAorCitNdWwzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEFk
ZHIsIFRtcAorCisjIE5vdGUgdGhhdCBNb3ZlIG9wZXJhdGVzIG92ZXIgdGhlIGZ1bGwgcmVnaXN0
ZXIgc2l6ZSwgd2hpY2ggaXMgZWl0aGVyIDMyLWJpdCBvciA2NC1iaXQgZGVwZW5kaW5nIG9uCisj
IHRoZSBwbGF0Zm9ybS4gSSdtIG5vdCBlbnRpcmVseSBzdXJlIHRoYXQgdGhpcyBpcyBhIGdvb2Qg
dGhpbmc7IGl0IG1pZ2h0IGJlIGJldHRlciB0byBqdXN0IGhhdmUgYQorIyBNb3ZlNjQgaW5zdHJ1
Y3Rpb24uIE9UT0gsIG91ciBNYWNyb0Fzc2VtYmxlcnMgYWxyZWFkeSBoYXZlIHRoaXMgbm90aW9u
IG9mICJtb3ZlKCkiIHRoYXQgYmFzaWNhbGx5CisjIG1lYW5zIG1vdmVQdHIuCitNb3ZlIFU6Rywg
RDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIFRtcAorICAgIEltbTY0LCBUbXAKKyAgICBBZGRy
LCBUbXAgYXMgbG9hZFB0ciAjIFRoaXMgbWVhbnMgdGhhdCAiTW92ZSBBZGRyLCBUbXAiIGlzIGNv
ZGUtZ2VuZXJhdGVkIGFzICJsb2FkIiBub3QgIm1vdmUiLgorICAgIEluZGV4LCBUbXAgYXMgbG9h
ZFB0cgorICAgIFRtcCwgQWRkciBhcyBzdG9yZVB0cgorICAgIFRtcCwgSW5kZXggYXMgc3RvcmVQ
dHIKKworTW92ZTMyIFU6RywgRDpHCisgICAgVG1wLCBUbXAgYXMgemVyb0V4dGVuZDMyVG9QdHIK
KyAgICBBZGRyLCBUbXAgYXMgbG9hZDMyCisgICAgSW5kZXgsIFRtcCBhcyBsb2FkMzIKKyAgICBU
bXAsIEFkZHIgYXMgc3RvcmUzMgorICAgIFRtcCwgSW5kZXggYXMgc3RvcmUzMgorCitNb3ZlRG91
YmxlIFU6RiwgRDpGCisgICAgVG1wLCBUbXAKKyAgICBBZGRyLCBUbXAgYXMgbG9hZERvdWJsZQor
ICAgIEluZGV4LCBUbXAgYXMgbG9hZERvdWJsZQorICAgIFRtcCwgQWRkciBhcyBzdG9yZURvdWJs
ZQorICAgIFRtcCwgSW5kZXggYXMgc3RvcmVEb3VibGUKKworTW92ZTY0VG9Eb3VibGUgVTpHLCBE
OkYKKyAgICBUbXAsIFRtcAorCitNb3ZlRG91YmxlVG82NCBVOkYsIEQ6RworICAgIFRtcCwgVG1w
CisKK0JyYW5jaEFkZDMyIFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAs
IFRtcAorICAgIFJlc0NvbmQsIEltbSwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBBZGRyCisgICAg
UmVzQ29uZCwgVG1wLCBBZGRyCisgICAgUmVzQ29uZCwgQWRkciwgVG1wCisKK0JyYW5jaE11bDMy
IFU6RywgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAsIFRtcAorICAgIFJlc0Nv
bmQsIEFkZHIsIFRtcAorCitCcmFuY2hTdWIzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAg
UmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIElt
bSwgQWRkcgorICAgIFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAor
CitCcmFuY2hOZWczMiBVOkcsIFVEOkcgL2JyYW5jaAorICAgIFJlc0NvbmQsIFRtcAorCitKdW1w
IC9icmFuY2gKKworUmV0IC90ZXJtaW5hbAorCitCcmVha3BvaW50IC90ZXJtaW5hbAorCisjIEFp
ciBhbGxvd3MgZm9yIGV4b3RpYyBiZWhhdmlvci4gQSBQYXRjaCdzIGJlaGF2aW9yIGlzIGRldGVy
bWluZWQgZW50aXJlbHkgYnkgdGhlIFNwZWNpYWwgb3BlcmFuZCwKKyMgd2hpY2ggbXVzdCBiZSB0
aGUgZmlyc3Qgb3BlcmFuZC4KK3NwZWNpYWwgUGF0Y2gKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclBoYXNlU2NvcGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3BlLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUg
IkFpclZhbGlkYXRlLmgiCisjaW5jbHVkZSAiQjNDb21tb24uaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitQaGFzZVNjb3BlOjpQaGFzZVNjb3Bl
KENvZGUmIGNvZGUsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX2NvZGUoY29kZSkKKyAgICAs
IG1fbmFtZShuYW1lKQoreworICAgIGlmIChzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgpKSB7Cisg
ICAgICAgIGRhdGFMb2coIkFpciBhZnRlciAiLCBjb2RlLmxhc3RQaGFzZU5hbWUoKSwgIiwgYmVm
b3JlICIsIG5hbWUsICI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhjb2RlKTsKKyAgICB9CisKKyAg
ICBpZiAoc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKSkKKyAgICAgICAgbV9kdW1wQmVmb3JlID0g
dG9DU3RyaW5nKGNvZGUpOworfQorCitQaGFzZVNjb3BlOjp+UGhhc2VTY29wZSgpCit7CisgICAg
bV9jb2RlLnNldExhc3RQaGFzZU5hbWUobV9uYW1lKTsKKyAgICBpZiAoc2hvdWxkVmFsaWRhdGVJ
UkF0RWFjaFBoYXNlKCkpCisgICAgICAgIHZhbGlkYXRlKG1fY29kZSwgbV9kdW1wQmVmb3JlLmRh
dGEoKSk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclBo
YXNlU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clBoYXNlU2NvcGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJQaGFz
ZVNjb3BlX2gKKyNkZWZpbmUgQWlyUGhhc2VTY29wZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmlu
Zy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisK
K2NsYXNzIENvZGU7CisKK2NsYXNzIFBoYXNlU2NvcGUgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFBoYXNlU2NvcGUpOworcHVibGljOgorICAgIFBoYXNlU2NvcGUoQ29kZSYsIGNvbnN0IGNo
YXIqIG5hbWUpOworICAgIH5QaGFzZVNjb3BlKCk7IC8vIHRoaXMgZG9lcyB2YWxpZGF0aW9uCisK
K3ByaXZhdGU6CisgICAgQ29kZSYgbV9jb2RlOworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAg
ICBDU3RyaW5nIG1fZHVtcEJlZm9yZTsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
OjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJQaGFzZVNj
b3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclBy
aW9yaXR5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clJlZ2lzdGVyUHJpb3JpdHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUmVnaXN0ZXJQcmlvcml0eS5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY29uc3QgVmVjdG9y
PEdQUlJlZz4mIGdwcnNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBWZWN0b3I8R1BS
UmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAgIHN0ZDo6
Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAgICByZXN1
bHQgPSBuZXcgVmVjdG9yPEdQUlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0IGFsbCA9
IFJlZ2lzdGVyU2V0OjphbGxHUFJzKCk7CisgICAgICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3Rl
clNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBhbGwuZXhjbHVkZShSZWdpc3Rl
clNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVy
U2V0IGNhbGxlZVNhdmUgPSBSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAg
ICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5ncHIoKSk7CisgICAgICAgICAgICAgICAg
fSk7CisgICAgICAgICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyBy
ZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAg
ICAgICAgIH0pOworICAgICAgICB9KTsKKyAgICByZXR1cm4gKnJlc3VsdDsKK30KKworY29uc3Qg
VmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKQoreworICAgIHN0YXRpYyBWZWN0
b3I8RlBSUmVnPiogcmVzdWx0OworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBvbmNlOworICAg
IHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAgICBbXSB7CisgICAgICAgICAg
ICByZXN1bHQgPSBuZXcgVmVjdG9yPEZQUlJlZz4oKTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IGFsbCA9IFJlZ2lzdGVyU2V0OjphbGxGUFJzKCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBj
YWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAgICAgICAg
ICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgeworICAgICAg
ICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZnByKCkpOworICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcgcmVnKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2NvbnN0IFZlY3Rv
cjxSZWc+JiByZWdzSW5Qcmlvcml0eU9yZGVyKEFyZzo6VHlwZSB0eXBlKQoreworICAgIHN0YXRp
YyBWZWN0b3I8UmVnPiogcmVzdWx0W0FyZzo6bnVtVHlwZXNdOworICAgIHN0YXRpYyBzdGQ6Om9u
Y2VfZmxhZyBvbmNlOworICAgIHN0ZDo6Y2FsbF9vbmNlKAorICAgICAgICBvbmNlLAorICAgICAg
ICBbXSB7CisgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsK
KyAgICAgICAgICAgIGZvciAoR1BSUmVnIHJlZyA6IGdwcnNJblByaW9yaXR5T3JkZXIoKSkKKyAg
ICAgICAgICAgICAgICByZXN1bHRbQXJnOjpHUF0tPmFwcGVuZChSZWcocmVnKSk7CisgICAgICAg
ICAgICByZXN1bHRbQXJnOjpGUF0gPSBuZXcgVmVjdG9yPFJlZz4oKTsKKyAgICAgICAgICAgIGZv
ciAoRlBSUmVnIHJlZyA6IGZwcnNJblByaW9yaXR5T3JkZXIoKSkKKyAgICAgICAgICAgICAgICBy
ZXN1bHRbQXJnOjpGUF0tPmFwcGVuZChSZWcocmVnKSk7CisgICAgICAgIH0pOworICAgIHJldHVy
biAqcmVzdWx0W3R5cGVdOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyUmVnaXN0ZXJQcmlvcml0eV9oCisjZGVmaW5lIEFpclJl
Z2lzdGVyUHJpb3JpdHlfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckFy
Zy5oIgorI2luY2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NvbnN0IFZlY3RvcjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCk7
Citjb25zdCBWZWN0b3I8RlBSUmVnPiYgZnByc0luUHJpb3JpdHlPcmRlcigpOworCit0ZW1wbGF0
ZTx0eXBlbmFtZSBCYW5rPiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyOwordGVtcGxh
dGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9yZGVyPEdQUkluZm8+IHsKKyAgICBjb25z
dCBWZWN0b3I8R1BSUmVnPiYgaW5Qcmlvcml0eU9yZGVyKCkgeyByZXR1cm4gZ3Byc0luUHJpb3Jp
dHlPcmRlcigpOyB9Cit9OwordGVtcGxhdGU8PiBzdHJ1Y3QgUmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEZQUkluZm8+IHsKKyAgICBjb25zdCBWZWN0b3I8RlBSUmVnPiYgaW5Qcmlvcml0eU9yZGVy
KCkgeyByZXR1cm4gZnByc0luUHJpb3JpdHlPcmRlcigpOyB9Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBCYW5rPgorY29uc3QgVmVjdG9yPHR5cGVuYW1lIEJhbms6OlJlZ2lzdGVyVHlwZT4mIHJl
Z3NJblByaW9yaXR5T3JkZXIoKQoreworICAgIHJldHVybiBSZWdpc3RlcnNJblByaW9yaXR5T3Jk
ZXI8QmFuaz46OmluUHJpb3JpdHlPcmRlcigpOworfQorCitjb25zdCBWZWN0b3I8UmVnPiYgcmVn
c0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyUmVnaXN0
ZXJQcmlvcml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bl
Y2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IFNwZWNpYWw6OmR1bXBQ
cmVmaXggPSAiJiI7CisKK1NwZWNpYWw6OlNwZWNpYWwoKQorICAgIDogbV9pbmRleChVSU5UX01B
WCkKK3sKK30KKworU3BlY2lhbDo6flNwZWNpYWwoKQoreworfQorCitDU3RyaW5nIFNwZWNpYWw6
Om5hbWUoKSBjb25zdAoreworICAgIFN0cmluZ1ByaW50U3RyZWFtIG91dDsKKyAgICBkdW1wSW1w
bChvdXQpOworICAgIHJldHVybiBvdXQudG9DU3RyaW5nKCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJlZml4
KTsKKyAgICBkdW1wSW1wbChvdXQpOworICAgIGlmIChtX2luZGV4ICE9IFVJTlRfTUFYKQorICAg
ICAgICBvdXQucHJpbnQobV9pbmRleCk7Cit9CisKK3ZvaWQgU3BlY2lhbDo6ZGVlcER1bXAoUHJp
bnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoKnRoaXMsICI6ICIpOworICAg
IGRlZXBEdW1wSW1wbChvdXQpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGVjaWFsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTcGVjaWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyOCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
clNwZWNpYWxfaAorI2RlZmluZSBBaXJTcGVjaWFsX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5lcmF0aW9uQ29udGV4dDsKKworY2xh
c3MgU3BlY2lhbCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoU3BlY2lhbCk7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNv
bnN0IGR1bXBQcmVmaXg7CisgICAgCisgICAgU3BlY2lhbCgpOworICAgIHZpcnR1YWwgflNwZWNp
YWwoKTsKKworICAgIENTdHJpbmcgbmFtZSgpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGZv
ckVhY2hBcmcoSW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+
JikgPSAwOworICAgIHZpcnR1YWwgYm9vbCBpc1ZhbGlkKEluc3QmKSA9IDA7CisgICAgdmlydHVh
bCBib29sIGFkbWl0c1N0YWNrKEluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCkgPSAwOworCisgICAg
Ly8gVGhpcyBnZXRzIGNhbGxlZCBvbiBmb3IgZWFjaCBJbnN0IHRoYXQgdXNlcyB0aGlzIFNwZWNp
YWwuIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB3YXkgdG8KKyAgICAvLyBndWFyYW50ZWUgdGhhdCBh
IFNwZWNpYWwgZ2V0cyB1c2VkIGZyb20ganVzdCBvbmUgSW5zdCwgYmVjYXVzZSBBaXIgbWlnaHQg
dGFpbGR1cCBsYXRlLiBTbywKKyAgICAvLyBpZiB5b3Ugd2FudCB0byBwYXNzIHRoaXMgaW5mb3Jt
YXRpb24gZG93biB0byBnZW5lcmF0ZSgpLCB0aGVuIHlvdSBoYXZlIHRvIGVpdGhlcjoKKyAgICAv
LworICAgIC8vIDEpIEdlbmVyYXRlIEFpciB0aGF0IHN0YXJ0cyB3aXRoIGEgc2VwYXJhdGUgU3Bl
Y2lhbCBwZXIgUGF0Y2ggSW5zdCwgYW5kIHRoZW4gbWVyZ2UKKyAgICAvLyAgICB1c2VkUmVnaXN0
ZXIgc2V0cy4gVGhpcyBpcyBwcm9iYWJseSBub3QgZ3JlYXQsIGJ1dCBpdCBvcHRpbWl6ZXMgZm9y
IHRoZSBjb21tb24gY2FzZSB0aGF0CisgICAgLy8gICAgQWlyIGRpZG4ndCBkdXBsaWNhdGUgY29k
ZSBvciB0aGF0IHN1Y2ggZHVwbGljYXRpb24gZGlkbid0IGNhdXNlIGFueSBpbnRlcmVzdGluZyBj
aGFuZ2VzIHRvCisgICAgLy8gICAgcmVnaXN0ZXIgYXNzaWdubWVudC4KKyAgICAvLworICAgIC8v
IDIpIEhhdmUgdGhlIFNwZWNpYWwgbWFpbnRhaW4gYSBIYXNoTWFwPEluc3QqLCBSZWdpc3RlclNl
dD4uIFRoaXMgd29ya3MgYmVjYXVzZSB0aGUgYW5hbHlzaXMKKyAgICAvLyAgICB0aGF0IGZlZWRz
IGludG8gdGhpcyBjYWxsIGlzIHBlcmZvcm1lZCBqdXN0IGJlZm9yZSBjb2RlIGdlbmVyYXRpb24g
YW5kIHRoZXJlIGlzIG5vIHdheQorICAgIC8vICAgIGZvciB0aGUgVmVjdG9yPD4ncyB0aGF0IGNv
bnRhaW4gdGhlIEluc3RzIHRvIGJlIHJlYWxsb2NhdGVkLiBUaGlzIGFsbG93cyBnZW5lcmF0ZSgp
IHRvCisgICAgLy8gICAgY29uc3VsdCB0aGUgSGFzaE1hcC4KKyAgICAvLworICAgIC8vIDMpIEh5
YnJpZDogeW91IGNvdWxkIHVzZSAoMSkgYW5kIGZpcmUgdXAgYSBIYXNoTWFwIGlmIHlvdSBzZWUg
bXVsdGlwbGUgY2FsbHMuCisgICAgLy8KKyAgICAvLyBOb3RlIHRoYXQgaXQncyBub3QgcG9zc2li
bGUgdG8gcmVseSBvbiByZXBvcnRVc2VkUmVnaXN0ZXJzKCkgYmVpbmcgY2FsbGVkIGluIHRoZSBz
YW1lIG9yZGVyCisgICAgLy8gYXMgZ2VuZXJhdGUoKS4gSWYgd2UgY291bGQgcmVseSBvbiB0aGF0
LCB0aGVuIHdlIGNvdWxkIGp1c3QgaGF2ZSBlYWNoIFNwZWNpYWwgaW5zdGFuY2UKKyAgICAvLyBt
YWludGFpbiBhIFZlY3RvciBvZiBSZWdpc3RlclNldCdzIGFuZCB0aGVuIHByb2Nlc3MgdGhhdCB2
ZWN0b3IgaW4gdGhlIHJpZ2h0IG9yZGVyIGluCisgICAgLy8gZ2VuZXJhdGUoKS4gQnV0LCB0aGUg
b3JkZXJpbmcgZGlmZmVyZW5jZSBpcyB1bmxpa2VseSB0byBjaGFuZ2Ugc2luY2UgaXQgd291bGQg
aGFybSB0aGUKKyAgICAvLyBwZXJmb3JtYW5jZSBvZiB0aGUgbGl2ZW5lc3MgYW5hbHlzaXMuCisg
ICAgLy8KKyAgICAvLyBDdXJyZW50bHksIHdlIGRvICgxKSBmb3IgQjMgc3RhY2ttYXBzLgorICAg
IHZpcnR1YWwgdm9pZCByZXBvcnRVc2VkUmVnaXN0ZXJzKEluc3QmLCBjb25zdCBSZWdpc3RlclNl
dCYpID0gMDsKKyAgICAKKyAgICB2aXJ0dWFsIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShJ
bnN0JiwgQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKSA9IDA7CisKKyAgICB2aXJ0
dWFsIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJlZ3MoSW5zdCYpID0gMDsKKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wSW1w
bChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZGVlcER1bXBJbXBs
KFByaW50U3RyZWFtJikgY29uc3QgPSAwOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBD
b2RlOworCisgICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIHVuc2lnbmVkIG1faW5kZXg7Cit9
OworCitjbGFzcyBEZWVwU3BlY2lhbER1bXAgeworcHVibGljOgorICAgIERlZXBTcGVjaWFsRHVt
cChjb25zdCBTcGVjaWFsKiBzcGVjaWFsKQorICAgICAgICA6IG1fc3BlY2lhbChzcGVjaWFsKQor
ICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChtX3NwZWNpYWwpCisgICAgICAgICAgICBtX3NwZWNpYWwtPmRlZXBE
dW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7
CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFNwZWNpYWwqIG1fc3BlY2lhbDsKK307CisK
K2lubGluZSBEZWVwU3BlY2lhbER1bXAgZGVlcER1bXAoY29uc3QgU3BlY2lhbCogc3BlY2lhbCkK
K3sKKyAgICByZXR1cm4gRGVlcFNwZWNpYWxEdW1wKHNwZWNpYWwpOworfQorCit9IH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQWlyU3BlY2lhbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclNwaWxsRXZlcnl0
aGluZy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2lu
Y2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIKKyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwordm9pZCBz
cGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUo
Y29kZSwgInNwaWxsRXZlcnl0aGluZyIpOworCisgICAgLy8gV2Ugd2FudCB0byBrbm93IHRoZSBz
ZXQgb2YgcmVnaXN0ZXJzIHVzZWQgYXQgZXZlcnkgcG9pbnQgaW4gZXZlcnkgYmFzaWMgYmxvY2su
CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywgVmVjdG9yPFJlZ2lzdGVyU2V0Pj4gdXNlZFJlZ2lz
dGVycyhjb2RlLnNpemUoKSk7CisgICAgTGl2ZW5lc3M8VG1wPiBsaXZlbmVzcyhjb2RlKTsKKyAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBMaXZlbmVzczxUbXA+
OjpMb2NhbENhbGMgbG9jYWxDYWxjKGxpdmVuZXNzLCBibG9jayk7CisgICAgICAgIHVzZWRSZWdp
c3RlcnNbYmxvY2tdLnJlc2l6ZShibG9jay0+c2l6ZSgpICsgMSk7CisKKyAgICAgICAgYXV0byBz
ZXRVc2VkUmVnaXN0ZXJzID0gWyZdICh1bnNpZ25lZCBpbmRleCwgSW5zdCYgaW5zdCkgeworICAg
ICAgICAgICAgUmVnaXN0ZXJTZXQmIHJlZ2lzdGVyU2V0ID0gdXNlZFJlZ2lzdGVyc1tibG9ja11b
aW5kZXhdOworICAgICAgICAgICAgZm9yIChUbXAgdG1wIDogbG9jYWxDYWxjLmxpdmUoKSkgewor
ICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAgcmVn
aXN0ZXJTZXQuc2V0KHRtcC5yZWcoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8v
IEdvdHRhIGFjY291bnQgZm9yIGRlYWQgYXNzaWdubWVudHMgdG8gcmVnaXN0ZXJzLiBUaGVzZSBt
YXkgaGFwcGVuIGJlY2F1c2UgdGhlIGlucHV0CisgICAgICAgICAgICAvLyBjb2RlIGlzIHN1Ym9w
dGltYWwuCisgICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCisgICAgICAgICAgICAgICAgWyZd
IChBcmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSkgeworICAgICAgICAgICAgICAg
ICAgICBpZiAoQXJnOjppc0RlZihyb2xlKSAmJiBhcmcuaXNSZWcoKSkKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHJlZ2lzdGVyU2V0LnNldChhcmcucmVnKCkpOworICAgICAgICAgICAgICAgIH0p
OworICAgICAgICB9OworCisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gYmxvY2st
PnNpemUoKTsgaW5zdEluZGV4LS07KSB7CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBzZXRVc2VkUmVnaXN0ZXJzKGluc3RJbmRleCAr
IDEsIGluc3QpOworICAgICAgICAgICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdCk7CisgICAgICAg
IH0KKworICAgICAgICBJbnN0IG5vcDsKKyAgICAgICAgc2V0VXNlZFJlZ2lzdGVycygwLCBub3Ap
OworICAgIH0KKworICAgIC8vIEFsbG9jYXRlIGEgc3RhY2sgc2xvdCBmb3IgZWFjaCB0bXAuCisg
ICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFsbFN0YWNrU2xvdHNbQXJnOjpudW1UeXBlc107CisgICAg
Zm9yICh1bnNpZ25lZCB0eXBlSW5kZXggPSAwOyB0eXBlSW5kZXggPCBBcmc6Om51bVR5cGVzOyAr
K3R5cGVJbmRleCkgeworICAgICAgICBWZWN0b3I8U3RhY2tTbG90Kj4mIHN0YWNrU2xvdHMgPSBh
bGxTdGFja1Nsb3RzW3R5cGVJbmRleF07CisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGlj
X2Nhc3Q8QXJnOjpUeXBlPih0eXBlSW5kZXgpOworICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShj
b2RlLm51bVRtcHModHlwZSkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29k
ZS5udW1UbXBzKHR5cGUpOyB0bXBJbmRleC0tOykKKyAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1w
SW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsK
KyAgICB9CisKKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOworICAgIGZvciAo
QmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5zdElu
ZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUoKTsgKytpbnN0SW5kZXgpIHsKKyAgICAg
ICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRCZWZvcmUgPSB1c2VkUmVnaXN0ZXJzW2Jsb2NrXVtpbnN0
SW5kZXhdOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQmIHNldEFmdGVyID0gdXNlZFJlZ2lzdGVy
c1tibG9ja11baW5zdEluZGV4ICsgMV07CisgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2st
PmF0KGluc3RJbmRleCk7CisgICAgICAgICAgICBpbnN0LmZvckVhY2hUbXAoCisgICAgICAgICAg
ICAgICAgWyZdIChUbXAmIHRtcCwgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSB0eXBlKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh0bXAuaXNSZWcoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9
IGFsbFN0YWNrU2xvdHNbdHlwZV1bdG1wLnRtcEluZGV4KCldOworICAgICAgICAgICAgICAgICAg
ICBBcmcgYXJnID0gQXJnOjpzdGFjayhzdGFja1Nsb3QpOworCisgICAgICAgICAgICAgICAgICAg
IC8vIE5lZWQgdG8gZmlndXJlIG91dCBhIHJlZ2lzdGVyIHRvIHVzZS4gSG93IHdlIGRvIHRoYXQg
ZGVwZW5kcyBvbiB0aGUgcm9sZS4KKyAgICAgICAgICAgICAgICAgICAgUmVnIGNob3NlblJlZzsK
KyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgQXJnOjpVc2U6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiBy
ZWdzSW5Qcmlvcml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKCFzZXRCZWZvcmUuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgc2V0QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
aG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6RGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0lu
UHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
c2V0QWZ0ZXIuZ2V0KHJlZykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0
QWZ0ZXIuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNob3NlblJl
ZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpV
c2VEZWY6CisgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKFJlZyByZWcgOiByZWdzSW5Qcmlv
cml0eU9yZGVyKHR5cGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZXRC
ZWZvcmUuZ2V0KHJlZykgJiYgIXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNldEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzZXRCZWZvcmUuc2V0KHJlZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNob3NlblJlZyA9IHJlZzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2hvc2VuUmVnKTsKKwor
ICAgICAgICAgICAgICAgICAgICB0bXAgPSBUbXAoY2hvc2VuUmVnKTsKKworICAgICAgICAgICAg
ICAgICAgICBPcGNvZGUgbW92ZSA9IHR5cGUgPT0gQXJnOjpHUCA/IE1vdmUgOiBNb3ZlRG91Ymxl
OworCisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzVXNlKHJvbGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGluc3RJbmRleCwgbW92ZSwgaW5zdC5vcmlnaW4sIGFyZywgdG1wKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc0RlZihyb2xl
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnN0SW5kZXggKyAxLCBtb3ZlLCBpbnN0Lm9yaWdpbiwg
dG1wLCBhcmcpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgIH0KKyAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOworICAgIH0KK30K
KworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRo
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGls
bEV2ZXJ5dGhpbmcuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3BpbGxFdmVyeXRoaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFp
clNwaWxsRXZlcnl0aGluZ19oCisjZGVmaW5lIEFpclNwaWxsRXZlcnl0aGluZ19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNl
IEFpciB7CisKK2NsYXNzIENvZGU7CisKKy8vIFRoaXMgaXMgYSBwaGFzZSBmb3IgdGVzdGluZy4g
SXQgYmVoYXZlcyBsaWtlIGEgcmVnaXN0ZXIgYWxsb2NhdG9yIGluIHRoZSBzZW5zZSB0aGF0IGl0
CisvLyBlbGltaW5hdGVzIHRlbXBvcmFyaWVzIGZyb20gdGhlIHByb2dyYW0uIEl0IGFjY29tcGxp
c2hlcyB0aGlzIGJ5IGFsd2F5cyBzcGlsbGluZyBhbGwKKy8vIHRlbXBvcmFyaWVzLiBUaGUgcmVz
dWx0aW5nIGNvZGUgaXMgZ29pbmcgdG8gYmUgdmVyeSBpbmVmZmljaWVudC4gVGhpcyBwaGFzZSBp
cyBncmVhdCBpZiB5b3UKKy8vIHRoaW5rIHRoYXQgdGhlcmUgaXMgYSBidWcgaW4gdGhlIHJlZ2lz
dGVyIGFsbG9jYXRvci4gWW91IGNhbiBjb25maXJtIHRoaXMgYnkgcnVubmluZyB0aGlzCisvLyBw
aGFzZSBpbnN0ZWFkIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3IuCisvLworLy8gTm90ZSB0aGF0
IGV2ZW4gdGhvdWdoIHRoaXMgcGhhc2UgZG9lcyB0aGUgY2hlYXBlc3QgdGhpbmcgcG9zc2libGUs
IGl0J3Mgbm90IGV2ZW4gd3JpdHRlbiBpbiBhCisvLyBwYXJ0aWN1bGFybHkgZWZmaWNpZW50IHdh
eS4gU28sIGRvbid0IGdldCBhbnkgaWRlYXMgYWJvdXQgdXNpbmcgdGhpcyBwaGFzZSB0byByZWR1
Y2UgY29tcGlsZXIKKy8vIGxhdGVuY3kuIElmIHlvdSB3YW50ZWQgdG8gZG8gdGhhdCwgeW91IHNo
b3VsZCBjb21lIHVwIHdpdGggYSBjbGV2ZXIgYWxnb3JpdGhtIGluc3RlYWQgb2YgdXNpbmcKKy8v
IHRoaXMgc2lsbHkgdGhpbmcuCisKK3ZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmKTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpclNwaWxsRXZlcnl0aGluZ19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RWYWx1ZS5oIgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQgU3Rh
Y2tTbG90OjpzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QgdmFsdWUpCit7CisgICAgbV9vZmZzZXRG
cm9tRlAgPSB2YWx1ZTsKKyAgICBpZiAobV92YWx1ZSkKKyAgICAgICAgbV92YWx1ZS0+bV9vZmZz
ZXRGcm9tRlAgPSB2YWx1ZTsKK30KKwordm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7Cit9CisKK3Zv
aWQgU3RhY2tTbG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBt
X29mZnNldEZyb21GUCwgIiwga2luZCA9ICIsIG1fa2luZCk7CisgICAgaWYgKG1fdmFsdWUpCisg
ICAgICAgIG91dC5wcmludCgiLCB2YWx1ZSA9ICIsICptX3ZhbHVlKTsKK30KKworU3RhY2tTbG90
OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RL
aW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKKyAgICA6IG1fYnl0ZVNpemUoYnl0ZVNp
emUpCisgICAgLCBtX2luZGV4KGluZGV4KQorICAgICwgbV9vZmZzZXRGcm9tRlAodmFsdWUgPyB2
YWx1ZS0+b2Zmc2V0RnJvbUZQKCkgOiAwKQorICAgICwgbV9raW5kKGtpbmQpCisgICAgLCBtX3Zh
bHVlKHZhbHVlKQoreworICAgIEFTU0VSVChieXRlU2l6ZSk7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQWlyU3RhY2tTbG90X2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90
X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIK
KyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25Db3B5YWJsZS5o
PgorI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworY2xhc3MgU3RhY2tTbG90VmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitj
bGFzcyBTdGFja1Nsb3QgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFN0YWNrU2xvdCk7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdW5zaWduZWQgYnl0ZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9CisgICAgU3RhY2tTbG90S2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7
IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB1bnNpZ25lZCBhbGlnbm1lbnQoKSBjb25zdAorICAg
IHsKKyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMSkKKyAgICAgICAgICAgIHJldHVybiAxOwor
ICAgICAgICBpZiAoYnl0ZVNpemUoKSA8PSAyKQorICAgICAgICAgICAgcmV0dXJuIDI7CisgICAg
ICAgIGlmIChieXRlU2l6ZSgpIDw9IDQpCisgICAgICAgICAgICByZXR1cm4gNDsKKyAgICAgICAg
cmV0dXJuIDg7CisgICAgfQorCisgICAgU3RhY2tTbG90VmFsdWUqIHZhbHVlKCkgY29uc3QgeyBy
ZXR1cm4gbV92YWx1ZTsgfQorCisgICAgLy8gWmVybyBtZWFucyB0aGF0IGl0J3Mgbm90IHlldCBh
c3NpZ25lZC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25zdCB7IHJldHVybiBtX29m
ZnNldEZyb21GUDsgfQorCisgICAgLy8gVGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGNhbGxl
ZCBmcm9tIHBoYXNlcyB0aGF0IGRvIHN0YWNrIGFsbG9jYXRpb24uIEJ1dCB5b3UgY2FuCisgICAg
Ly8gdG90YWxseSBmb3JjZSBhIHN0YWNrIHNsb3QgdG8gbGFuZCBhdCBzb21lIG9mZnNldC4KKyAg
ICB2b2lkIHNldE9mZnNldEZyb21GUChpbnRwdHJfdCk7CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisK
K3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIENvZGU7CisKKyAgICBTdGFja1Nsb3QodW5zaWdu
ZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kLCBTdGFja1Nsb3RWYWx1
ZSopOworICAgIAorICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7CisgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2lu
ZDsKKyAgICBTdGFja1Nsb3RWYWx1ZSogbV92YWx1ZTsKK307CisKK2NsYXNzIERlZXBTdGFja1Ns
b3REdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3RhY2tTbG90RHVtcChjb25zdCBTdGFja1Nsb3Qq
IHNsb3QpCisgICAgICAgIDogbV9zbG90KHNsb3QpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fc2xvdCkK
KyAgICAgICAgICAgIG1fc2xvdC0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAg
ICAgICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3Qg
U3RhY2tTbG90KiBtX3Nsb3Q7Cit9OworCitpbmxpbmUgRGVlcFN0YWNrU2xvdER1bXAgZGVlcER1
bXAoY29uc3QgU3RhY2tTbG90KiBzbG90KQoreworICAgIHJldHVybiBEZWVwU3RhY2tTbG90RHVt
cChzbG90KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclN0YWNrU2xvdF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CisKK3ZvaWQgVG1wOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCEq
dGhpcykgeworICAgICAgICBvdXQucHJpbnQoIjxub25lPiIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGlzUmVnKCkpIHsKKyAgICAgICAgb3V0LnByaW50KHJlZygpKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChpc0dQKCkpIHsKKyAgICAgICAgb3V0LnBy
aW50KCIldG1wIiwgZ3BUbXBJbmRleCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG91dC5wcmludCgiJWZ0bXAiLCBmcFRtcEluZGV4KCkpOworfQorCit9IH0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI5MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEFpclRtcF9oCisjZGVmaW5lIEFpclRtcF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJSZWcuaCIK
KyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIEFyZzsKKworLy8gQSBUbXAgaXMgYSBnZW5lcmFs
aXphdGlvbiBvZiBhIHJlZ2lzdGVyLiBJdCBjYW4gYmUgdXNlZCB0byByZWZlciB0byBhbnkgR1BS
IG9yIEZQUi4gSXQgY2FuIGFsc28KKy8vIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW4gdW5hbGxvY2F0
ZWQgcmVnaXN0ZXIgKGkuZS4gYSB0ZW1wb3JhcnkpLiBMaWtlIG1hbnkgQWlyIGNsYXNzZXMsIHdl
IHVzZQorLy8gZGVsaWJlcmF0ZWx5IHRlcnNlIG5hbWluZyBzaW5jZSB3ZSB3aWxsIGhhdmUgdG8g
dXNlIHRoaXMgbmFtZSBhIGxvdC4KKworY2xhc3MgVG1wIHsKK3B1YmxpYzoKKyAgICBUbXAoKQor
ICAgICAgICA6IG1fdmFsdWUoMCkKKyAgICB7CisgICAgfQorCisgICAgZXhwbGljaXQgVG1wKFJl
ZyByZWcpCisgICAgeworICAgICAgICBpZiAocmVnKSB7CisgICAgICAgICAgICBpZiAocmVnLmlz
R1BSKCkpCisgICAgICAgICAgICAgICAgbV92YWx1ZSA9IGVuY29kZUdQUihyZWcuZ3ByKCkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVGUFIocmVn
LmZwcigpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX3ZhbHVlID0gMDsKKyAgICB9
CisKKyAgICBleHBsaWNpdCBUbXAoY29uc3QgQXJnJik7CisKKyAgICBzdGF0aWMgVG1wIGdwVG1w
Rm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV92YWx1ZSA9IGVuY29kZUdQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVG1wIGZwVG1wRm9ySW5kZXgodW5zaWduZWQg
aW5kZXgpCisgICAgeworICAgICAgICBUbXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV92YWx1
ZSA9IGVuY29kZUZQVG1wKGluZGV4KTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gISFtX3ZhbHVlOyB9
CisKKyAgICBib29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2Rl
ZEdQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNGUCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gaXNFbmNvZGVkRlAobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc0dQ
UigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1BSKG1fdmFsdWUpOwor
ICAgIH0KKworICAgIGJvb2wgaXNGUFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlz
RW5jb2RlZEZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc0dQUigpIHx8IGlzRlBSKCk7CisgICAgfQorCisgICAgR1BS
UmVnIGdwcigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BSKG1fdmFsdWUp
OworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IGRlY29kZUZQUihtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpc0dQKCkpCisgICAgICAgICAgICByZXR1cm4gZ3ByKCk7CisgICAgICAg
IHJldHVybiBmcHIoKTsKKyAgICB9CisKKyAgICBib29sIGhhc1RtcEluZGV4KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAhaXNSZWcoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBncFRt
cEluZGV4KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBkZWNvZGVHUFRtcChtX3ZhbHVl
KTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBmcFRtcEluZGV4KCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBkZWNvZGVGUFRtcChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCB0
bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAg
cmV0dXJuIGdwVG1wSW5kZXgoKTsKKyAgICAgICAgcmV0dXJuIGZwVG1wSW5kZXgoKTsKKyAgICB9
CisKKyAgICBib29sIGlzQWxpdmUoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICEhKnRo
aXM7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFRtcCYgb3RoZXIpIGNvbnN0
CisgICAgeworICAgICAgICByZXR1cm4gbV92YWx1ZSA9PSBvdGhlci5tX3ZhbHVlOworICAgIH0K
KworICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBUbXAmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworICAgIFRtcChXVEY6Okhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpCisgICAgICAgIDogbV92YWx1ZShzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1h
eCgpKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyA9PSBUbXAoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWUpOworICAgIH0KKworICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIFdURjo6SW50SGFzaDxpbnQ+OjpoYXNoKG1fdmFsdWUpOworICAgIH0K
KyAgICAKK3ByaXZhdGU6CisgICAgc3RhdGljIGludCBlbmNvZGVHUCh1bnNpZ25lZCBpbmRleCkK
KyAgICB7CisgICAgICAgIHJldHVybiAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGlu
dCBlbmNvZGVGUCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiAtMSAtIGlu
ZGV4OworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BSKEdQUlJlZyBncHIpCisgICAg
eworICAgICAgICByZXR1cm4gZW5jb2RlR1AoZ3ByIC0gTWFjcm9Bc3NlbWJsZXI6OmZpcnN0UmVn
aXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGludCBlbmNvZGVGUFIoRlBSUmVnIGZwcikK
KyAgICB7CisgICAgICAgIHJldHVybiBlbmNvZGVGUChmcHIgLSBNYWNyb0Fzc2VtYmxlcjo6Zmly
c3RGUFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlR1BUbXAodW5z
aWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlR1BSKE1hY3JvQXNzZW1i
bGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxICsgaW5kZXg7CisgICAgfQorCisgICAgc3RhdGljIGlu
dCBlbmNvZGVGUFRtcCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIHJldHVybiBlbmNv
ZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSAtIGluZGV4OworICAg
IH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQKGludCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIHJldHVybiB2YWx1ZSA+IDA7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVk
RlAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHZhbHVlIDwgMDsKKyAgICB9CisK
KyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGlzRW5jb2RlZEdQKHZhbHVlKSAmJiB2YWx1ZSA8PSBlbmNvZGVHUFIoTWFjcm9Bc3Nl
bWJsZXI6Omxhc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29k
ZWRGUFIoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVl
KSAmJiB2YWx1ZSA+PSBlbmNvZGVGUFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkp
OworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEdQVG1wKGludCB2YWx1ZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgIWlzRW5jb2RlZEdQUih2
YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkRlBUbXAoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKHZhbHVlKSAmJiAhaXNFbmNvZGVk
RlBSKHZhbHVlKTsKKyAgICB9CisKKyAgICBzdGF0aWMgR1BSUmVnIGRlY29kZUdQUihpbnQgdmFs
dWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkR1BSKHZhbHVlKSk7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHUFJSZWc+KAorICAgICAgICAgICAgKHZhbHVlIC0gZW5jb2Rl
R1BSKE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJlZ2lzdGVyKCkpKSArIE1hY3JvQXNzZW1ibGVyOjpm
aXJzdFJlZ2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBGUFJSZWcgZGVjb2RlRlBSKGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0VuY29kZWRGUFIodmFsdWUpKTsKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEZQUlJlZz4oCisgICAgICAgICAgICAoZW5jb2RlRlBS
KE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSkgLSB2YWx1ZSkgKworICAgICAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6OmZpcnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0
aWMgdW5zaWduZWQgZGVjb2RlR1BUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJU
KGlzRW5jb2RlZEdQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZSAtIChlbmNvZGVH
UFIoTWFjcm9Bc3NlbWJsZXI6Omxhc3RSZWdpc3RlcigpKSArIDEpOworICAgIH0KKworICAgIHN0
YXRpYyB1bnNpZ25lZCBkZWNvZGVGUFRtcChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NF
UlQoaXNFbmNvZGVkRlBUbXAodmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIChlbmNvZGVGUFIoTWFj
cm9Bc3NlbWJsZXI6Omxhc3RGUFJlZ2lzdGVyKCkpIC0gMSkgLSB2YWx1ZTsKKyAgICB9CisKKyAg
ICAvLyAwOiBlbXB0eSBUbXAKKyAgICAvLyBwb3NpdGl2ZTogR1BScyBhbmQgdGhlbiBHUCB0ZW1w
cy4KKyAgICAvLyBuZWdhdGl2ZTogRlBScyBhbmQgdGhlbiBGUCB0ZW1wcy4KKyAgICBpbnQgbV92
YWx1ZTsKK307CisKK3N0cnVjdCBUbXBIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBUbXAmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFRtcCYgYSwgY29uc3QgVG1wJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKK25hbWVzcGFjZSBXVEYgewor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0
cnVjdCBEZWZhdWx0SGFzaDxKU0M6OkIzOjpBaXI6OlRtcD4geworICAgIHR5cGVkZWYgSlNDOjpC
Mzo6QWlyOjpUbXBIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
SGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpCMzo6QWlyOjpU
bXA+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6VG1wPiB7IH07CisKK30g
Ly8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpclRtcF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1w
SW5saW5lcy5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJUbXBJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpclRtcElubGlu
ZXNfaAorI2RlZmluZSBBaXJUbXBJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJBaXJBcmcuaCIKKyNpbmNsdWRlICJBaXJUbXAuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitpbmxpbmUgVG1wOjpUbXAoY29uc3Qg
QXJnJiBhcmcpCit7CisgICAgKnRoaXMgPSBhcmcudG1wKCk7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJUbXBJbmxpbmVzX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlyVmFsaWRhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQp
CisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCituYW1lc3Bh
Y2UgeworCitjbGFzcyBWYWxpZGF0ZXIgeworcHVibGljOgorICAgIFZhbGlkYXRlcihDb2RlJiBj
b2RlLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQorICAgICAgICA6IG1fY29kZShjb2RlKQorICAg
ICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZpbmUg
VkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZmFp
bChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24sIHRv
Q1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorICAgIAorICAgIHZvaWQg
cnVuKCkKKyAgICB7CisgICAgICAgIEhhc2hTZXQ8U3RhY2tTbG90Kj4gdmFsaWRTbG90czsKKyAg
ICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gdmFsaWRCbG9ja3M7CisgICAgICAgIEhhc2hTZXQ8
U3BlY2lhbCo+IHZhbGlkU3BlY2lhbHM7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fY29kZSkKKyAgICAgICAgICAgIHZhbGlkQmxvY2tzLmFkZChibG9jayk7CisgICAgICAg
IGZvciAoU3RhY2tTbG90KiBzbG90IDogbV9jb2RlLnN0YWNrU2xvdHMoKSkKKyAgICAgICAgICAg
IHZhbGlkU2xvdHMuYWRkKHNsb3QpOworICAgICAgICBmb3IgKFNwZWNpYWwqIHNwZWNpYWwgOiBt
X2NvZGUuc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIHZhbGlkU3BlY2lhbHMuYWRkKHNwZWNpYWwp
OworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2NvZGUpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgaW5zdEluZGV4ID0gMDsgaW5zdEluZGV4IDwgYmxvY2stPnNpemUo
KTsgKytpbnN0SW5kZXgpIHsKKyAgICAgICAgICAgICAgICBJbnN0JiBpbnN0ID0gYmxvY2stPmF0
KGluc3RJbmRleCk7CisgICAgICAgICAgICAgICAgZm9yIChBcmcmIGFyZyA6IGluc3QuYXJncykg
eworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOgorICAgICAgICAgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsaWRTbG90cy5jb250YWlucyhhcmcuc3RhY2tTbG90KCkpLCAoIkF0ICIsIGluc3QsICIg
aW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgY2FzZSBBcmc6OlNwZWNpYWw6CisgICAgICAgICAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWxpZFNwZWNpYWxzLmNvbnRhaW5zKGFyZy5zcGVjaWFsKCkpLCAoIkF0ICIsIGlu
c3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIFZBTElEQVRFKGluc3QuaXNWYWxpZEZvcm0oKSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpi
bG9jaykpOworICAgICAgICAgICAgICAgIGlmIChpbnN0SW5kZXggPT0gYmxvY2stPnNpemUoKSAt
IDEpCisgICAgICAgICAgICAgICAgICAgIFZBTElEQVRFKGlzVGVybWluYWwoaW5zdC5vcGNvZGUp
LCAoIkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICBWQUxJREFURSghaXNUZXJtaW5hbChpbnN0Lm9wY29kZSksICgi
QXQgIiwgaW5zdCwgIiBpbiAiLCAqYmxvY2spKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDogYmxvY2stPnN1Y2Nlc3NvckJsb2NrcygpKQor
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbGlkQmxvY2tzLmNvbnRhaW5zKHN1Y2Nlc3Nvciks
ICgiSW4gIiwgKmJsb2NrKSk7CisgICAgICAgIH0KKyAgICB9CisKK3ByaXZhdGU6CisgICAgTk9f
UkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNoYXIqIGZpbGVu
YW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0IGNoYXIqIGNv
bmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAgICAgQ1N0cmlu
ZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5nUHJpbnRTdHJl
YW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJBSVIgVkFMSURBVElPTiBGQUlMVVJFXG4i
KTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIGNvbmRpdGlvbiwgIiAoIiwgZmlsZW5h
bWUsICI6IiwgbGluZU51bWJlciwgIilcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAg
IiwgbWVzc2FnZSwgIlxuIik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICBBZnRlciAiLCBt
X2NvZGUubGFzdFBoYXNlTmFtZSgpLCAiXG4iKTsKKyAgICAgICAgICAgIGZhaWx1cmVNZXNzYWdl
ID0gb3V0LnRvQ1N0cmluZygpOworICAgICAgICB9CisKKyAgICAgICAgZGF0YUxvZyhmYWlsdXJl
TWVzc2FnZSk7CisgICAgICAgIGlmIChtX2R1bXBCZWZvcmUpIHsKKyAgICAgICAgICAgIGRhdGFM
b2coIkJlZm9yZSAiLCBtX2NvZGUubGFzdFBoYXNlTmFtZSgpLCAiOlxuIik7CisgICAgICAgICAg
ICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0KKyAgICAgICAgZGF0YUxvZygiQXQg
dGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFMb2cobV9jb2RlKTsKKworICAgICAg
ICBkYXRhTG9nKGZhaWx1cmVNZXNzYWdlKTsKKyAgICAgICAgV1RGUmVwb3J0QXNzZXJ0aW9uRmFp
bHVyZShmaWxlbmFtZSwgbGluZU51bWJlciwgZnVuY3Rpb24sIGNvbmRpdGlvbik7CisgICAgICAg
IENSQVNIKCk7CisgICAgfQorICAgIAorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFy
KiBtX2R1bXBCZWZvcmU7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2
YWxpZGF0ZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiBkdW1wQmVmb3JlKQoreworICAgIFZhbGlk
YXRlciB2YWxpZGF0ZXIoY29kZSwgZHVtcEJlZm9yZSk7CisgICAgdmFsaWRhdGVyLnJ1bigpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclZhbGlkYXRl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxp
ZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJWYWxpZGF0ZV9oCisjZGVm
aW5lIEFpclZhbGlkYXRlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsKKwordm9pZCB2
YWxpZGF0ZShDb2RlJiwgY29uc3QgY2hhciogZHVtcEJlZm9yZSA9IG51bGxwdHIpOworCit9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQWlyVmFsaWRhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsODQ0IEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMn
JworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCitjbGFzcyBPcGNv
ZGUKKyAgICBhdHRyX3JlYWRlciA6bmFtZSwgOnNwZWNpYWwsIDpvdmVybG9hZHMKKyAgICBhdHRy
X2FjY2Vzc29yIDpraW5kCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBzcGVjaWFsKQorICAg
ICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBzcGVjaWFsCisgICAgICAgIEBr
aW5kID0gOmluc3QKKyAgICAgICAgdW5sZXNzIHNwZWNpYWwKKyAgICAgICAgICAgIEBvdmVybG9h
ZHMgPSBbXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBtYXNtTmFtZQorICAgICAg
ICBuYW1lWzBdLmRvd25jYXNlICsgbmFtZVsxLi4tMV0KKyAgICBlbmQKK2VuZAorCitjbGFzcyBB
cmcKKyAgICBhdHRyX3JlYWRlciA6cm9sZSwgOnR5cGUKKworICAgIGRlZiBpbml0aWFsaXplKHJv
bGUsIHR5cGUpCisgICAgICAgIEByb2xlID0gcm9sZQorICAgICAgICBAdHlwZSA9IHR5cGUKKyAg
ICBlbmQKK2VuZAorCitjbGFzcyBPdmVybG9hZAorICAgIGF0dHJfcmVhZGVyIDpzaWduYXR1cmUs
IDpmb3JtcworCisgICAgZGVmIGluaXRpYWxpemUoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAg
QHNpZ25hdHVyZSA9IHNpZ25hdHVyZQorICAgICAgICBAZm9ybXMgPSBmb3JtcworICAgIGVuZAor
ZW5kCisKK2NsYXNzIEtpbmQKKyAgICBhdHRyX3JlYWRlciA6bmFtZQorICAgIGF0dHJfYWNjZXNz
b3IgOnNwZWNpYWwKKworICAgIGRlZiBpbml0aWFsaXplKG5hbWUpCisgICAgICAgIEBuYW1lID0g
bmFtZQorICAgICAgICBAc3BlY2lhbCA9IGZhbHNlCisgICAgZW5kCisKKyAgICBkZWYgPT0ob3Ro
ZXIpCisgICAgICAgIGlmIG90aGVyLmlzX2E/IFN0cmluZworICAgICAgICAgICAgQG5hbWUgPT0g
b3RoZXIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQG5hbWUgPT0gb3RoZXIubmFtZSBhbmQg
QHNwZWNpYWwgPT0gb3RoZXIuc3BlY2lhbAorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRl
ZiBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgICAgIGlmIGtpbmQgPT0gIkFkZHIiCisgICAgICAg
ICAgICBbIkFkZHIiLCAiU3RhY2siLCAiQ2FsbEFyZyJdCisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIFtraW5kXQorICAgICAgICBlbmQKKyAgICBlbmQKKworICAgIGRlZiBhcmdLaW5kcworICAg
ICAgICBLaW5kLmFyZ0tpbmRzKGtpbmQpCisgICAgZW5kCitlbmQKKworY2xhc3MgRm9ybQorICAg
IGF0dHJfcmVhZGVyIDpraW5kcywgOmFsdE5hbWUKKworICAgIGRlZiBpbml0aWFsaXplKGtpbmRz
LCBhbHROYW1lKQorICAgICAgICBAa2luZHMgPSBraW5kcworICAgICAgICBAYWx0TmFtZSA9IGFs
dE5hbWUKKyAgICBlbmQKK2VuZAorCitjbGFzcyBPcmlnaW4KKyAgICBhdHRyX3JlYWRlciA6Zmls
ZU5hbWUsIDpsaW5lTnVtYmVyCisgICAgCisgICAgZGVmIGluaXRpYWxpemUoZmlsZU5hbWUsIGxp
bmVOdW1iZXIpCisgICAgICAgIEBmaWxlTmFtZSA9IGZpbGVOYW1lCisgICAgICAgIEBsaW5lTnVt
YmVyID0gbGluZU51bWJlcgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIj
e2ZpbGVOYW1lfToje2xpbmVOdW1iZXJ9IgorICAgIGVuZAorZW5kCisKK2NsYXNzIFRva2VuCisg
ICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwgOnN0cmluZworICAgIAorICAgIGRlZiBpbml0aWFsaXpl
KG9yaWdpbiwgc3RyaW5nKQorICAgICAgICBAb3JpZ2luID0gb3JpZ2luCisgICAgICAgIEBzdHJp
bmcgPSBzdHJpbmcKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgPT0ob3RoZXIpCisgICAgICAgIGlm
IG90aGVyLmlzX2E/IFRva2VuCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyLnN0cmluZwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBAc3RyaW5nID09IG90aGVyCisgICAgICAgIGVuZAor
ICAgIGVuZAorICAgIAorICAgIGRlZiA9fihvdGhlcikKKyAgICAgICAgQHN0cmluZyA9fiBvdGhl
cgorICAgIGVuZAorICAgIAorICAgIGRlZiB0b19zCisgICAgICAgICIje0BzdHJpbmcuaW5zcGVj
dH0gYXQgI3tvcmlnaW59IgorICAgIGVuZAorICAgIAorICAgIGRlZiBwYXJzZUVycm9yKCpjb21t
ZW50KQorICAgICAgICBpZiBjb21tZW50LmVtcHR5PworICAgICAgICAgICAgcmFpc2UgIlBhcnNl
IGVycm9yOiAje3RvX3N9IgorICAgICAgICBlbHNlCisgICAgICAgICAgICByYWlzZSAiUGFyc2Ug
ZXJyb3I6ICN7dG9fc306ICN7Y29tbWVudFswXX0iCisgICAgICAgIGVuZAorICAgIGVuZAorZW5k
CisKK2RlZiBsZXgoc3RyLCBmaWxlTmFtZSkKKyAgICBmaWxlTmFtZSA9IFBhdGhuYW1lLm5ldyhm
aWxlTmFtZSkKKyAgICByZXN1bHQgPSBbXQorICAgIGxpbmVOdW1iZXIgPSAxCisgICAgd2hpbGUg
bm90IHN0ci5lbXB0eT8KKyAgICAgICAgY2FzZSBzdHIKKyAgICAgICAgd2hlbiAvXEFcIyhbXlxu
XSopLworICAgICAgICAgICAgIyBjb21tZW50LCBpZ25vcmUKKyAgICAgICAgd2hlbiAvXEFcbi8K
KyAgICAgICAgICAgICMgbmV3bGluZSwgaWdub3JlCisgICAgICAgICAgICBsaW5lTnVtYmVyICs9
IDEKKyAgICAgICAgd2hlbiAvXEEoW2EtekEtWjAtOV9dKykvCisgICAgICAgICAgICByZXN1bHQg
PDwgVG9rZW4ubmV3KE9yaWdpbi5uZXcoZmlsZU5hbWUsIGxpbmVOdW1iZXIpLCAkJikKKyAgICAg
ICAgd2hlbiAvXEEoWyBcdFxyXSspLworICAgICAgICAgICAgIyB3aGl0ZXNwYWNlLCBpZ25vcmUK
KyAgICAgICAgd2hlbiAvXEFbLDoqXC9dLworICAgICAgICAgICAgcmVzdWx0IDw8IFRva2VuLm5l
dyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmlsZU5hbWUsIGxp
bmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIwXS5pbnNwZWN0
fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAgICBlbmQKKyAg
ICByZXN1bHQKK2VuZAorCitkZWYgaXNVRCh0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKFUpfChE
KXwoVUQpKVxaLworZW5kCisKK2RlZiBpc0dGKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoRyl8
KEYpKVxaLworZW5kCisKK2RlZiBpc0tpbmQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChUbXAp
fChJbW0pfChJbW02NCl8KEFkZHIpfChJbmRleCl8KFJlbENvbmQpfChSZXNDb25kKSlcWi8KK2Vu
ZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgIGlzVUQodG9rZW4pIG9yIGlzR0YodG9rZW4p
IG9yIGlzS2luZCh0b2tlbikgb3IKKyAgICAgICAgdG9rZW4gPT0gInNwZWNpYWwiIG9yIHRva2Vu
ID09ICJhcyIKK2VuZAorCitkZWYgaXNJZGVudGlmaWVyKHRva2VuKQorICAgIHRva2VuID1+IC9c
QShbYS16QS1aMC05X10rKVxaLyBhbmQgbm90IGlzS2V5d29yZCh0b2tlbikKK2VuZAorCitjbGFz
cyBQYXJzZXIKKyAgICBkZWYgaW5pdGlhbGl6ZShkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQHRv
a2VucyA9IGxleChkYXRhLCBmaWxlTmFtZSkKKyAgICAgICAgQGlkeCA9IDAKKyAgICBlbmQKKwor
ICAgIGRlZiB0b2tlbgorICAgICAgICBAdG9rZW5zW0BpZHhdCisgICAgZW5kCisKKyAgICBkZWYg
YWR2YW5jZQorICAgICAgICBAaWR4ICs9IDEKKyAgICBlbmQKKworICAgIGRlZiBwYXJzZUVycm9y
KCpjb21tZW50KQorICAgICAgICBpZiB0b2tlbgorICAgICAgICAgICAgdG9rZW4ucGFyc2VFcnJv
cigqY29tbWVudCkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgY29tbWVudC5lbXB0eT8K
KyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2UgZXJyb3IgYXQgZW5kIG9mIGZpbGUiCisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBv
ZiBmaWxlOiAje2NvbW1lbnRbMF19IgorICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAg
IGVuZAorCisgICAgZGVmIGNvbnN1bWUoc3RyaW5nKQorICAgICAgICBwYXJzZUVycm9yKCJFeHBl
Y3RlZCAje3N0cmluZ30iKSB1bmxlc3MgdG9rZW4gPT0gc3RyaW5nCisgICAgICAgIGFkdmFuY2UK
KyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICByZXN1bHQgPSB0
b2tlbi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgaWRlbnRpZmllciIpIHVu
bGVzcyBpc0lkZW50aWZpZXIocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3Vs
dAorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVSb2xlCisgICAgICAgIHJlc3VsdCA9IHRva2Vu
LnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCByb2xlIChVLCBELCBvciBVRCki
KSB1bmxlc3MgaXNVRChyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0Cisg
ICAgZW5kCisKKyAgICBkZWYgY29uc3VtZVR5cGUKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3Ry
aW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIHR5cGUgKEcgb3IgRikiKSB1bmxlc3Mg
aXNHRihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisK
KyAgICBkZWYgY29uc3VtZUtpbmQKKyAgICAgICAgcmVzdWx0ID0gdG9rZW4uc3RyaW5nCisgICAg
ICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGtpbmQgKEltbSwgSW1tNjQsIFRtcCwgQWRkciwgSW5k
ZXgsIFJlbENvbmQsIG9yIFJlc0NvbmQpIikgdW5sZXNzIGlzS2luZChyZXN1bHQpCisgICAgICAg
IGFkdmFuY2UKKyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgcGFyc2UKKyAgICAg
ICAgcmVzdWx0ID0ge30KKyAgICAgICAgCisgICAgICAgIGxvb3AgeworICAgICAgICAgICAgYnJl
YWsgaWYgQGlkeCA+PSBAdG9rZW5zLmxlbmd0aAorCisgICAgICAgICAgICBpZiB0b2tlbiA9PSAi
c3BlY2lhbCIKKyAgICAgICAgICAgICAgICBjb25zdW1lKCJzcGVjaWFsIikKKyAgICAgICAgICAg
ICAgICBvcGNvZGVOYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKworICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBhIHNwZWNpYWwgb3Bjb2RlIikgaWYgcmVzdWx0W29w
Y29kZU5hbWVdCisKKyAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBPcGNvZGUu
bmV3KG9wY29kZU5hbWUsIHRydWUpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
b3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBpZiByZXN1
bHRbb3Bjb2RlTmFtZV0KKyAgICAgICAgICAgICAgICAgICAgb3Bjb2RlID0gcmVzdWx0W29wY29k
ZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbm5vdCBvdmVybG9hZCBh
IHNwZWNpYWwgb3Bjb2RlIikgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgICAgICBlbHNl
CisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IE9wY29kZS5uZXcob3Bjb2RlTmFtZSwgZmFs
c2UpCisgICAgICAgICAgICAgICAgICAgIHJlc3VsdFtvcGNvZGVOYW1lXSA9IG9wY29kZQorICAg
ICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgc2lnbmF0dXJlID0gW10KKyAgICAg
ICAgICAgICAgICBmb3JtcyA9IFtdCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
aWYgaXNVRCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByb2xlID0gY29uc3VtZVJvbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN1bWUoIjoiKQorICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9IGNvbnN1bWVUeXBlCisg
ICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVy
ZSA8PCBBcmcubmV3KHJvbGUsIHR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiLyIKKyAgICAgICAg
ICAgICAgICAgICAgY29uc3VtZSgiLyIpCisgICAgICAgICAgICAgICAgICAgIGNhc2UgdG9rZW4u
c3RyaW5nCisgICAgICAgICAgICAgICAgICAgIHdoZW4gImJyYW5jaCIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG9wY29kZS5raW5kID0gOmJyYW5jaAorICAgICAgICAgICAgICAgICAgICB3aGVu
ICJ0ZXJtaW5hbCIKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wY29kZS5raW5kID0gOnRlcm1p
bmFsCisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnNlRXJyb3IoIkJhZCAvIGRpcmVjdGl2ZSIpCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICBhZHZhbmNlCisgICAgICAgICAgICAgICAgZW5kCisKKyAgICAgICAg
ICAgICAgICBpZiBpc0tpbmQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAg
ICAgICAgICAgICAgICAgICAgICAga2luZHMgPSBbXQorICAgICAgICAgICAgICAgICAgICAgICAg
YWx0TmFtZSA9IG5pbAorICAgICAgICAgICAgICAgICAgICAgICAgbG9vcCB7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAga2luZHMgPDwgS2luZC5uZXcoY29uc3VtZUtpbmQpCisKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiKiIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2FuIG9ubHkgYXBwbHkgKiB0byBUbXAiKSB1bmxl
c3Mga2luZHNbLTFdLm5hbWUgPT0gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAga2luZHNbLTFdLnNwZWNpYWwgPSB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN1bWUoIioiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsgdW5sZXNzIHRva2VuID09ICIsIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoIiwiKQorICAgICAgICAgICAgICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2tlbiA9PSAiYXMiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3VtZSgiYXMiKQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGFsdE5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorICAgICAgICAgICAgICAgICAgICAg
ICAgZW5kCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkZvcm0gaGFzIHdy
b25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIG92ZXJsb2FkIikgdW5sZXNzIGtpbmRzLmxlbmd0
aCA9PSBzaWduYXR1cmUubGVuZ3RoCisgICAgICAgICAgICAgICAgICAgICAgICBraW5kcy5lYWNo
X3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXgg
fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGtpbmQubmFtZSA9PSAiSW1tIiBvciBr
aW5kLm5hbWUgPT0gIkltbTY0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBz
aWduYXR1cmVbaW5kZXhdLnJvbGUgIT0gIlUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBhbiBpbW1lZGlhdGUgZm9yIGEgbm9uLXVzZSBh
cmd1bWVudCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmVbaW5kZXhdLnR5cGUgIT0gIkciCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyBh
biBpbW1lZGlhdGUgZm9yIGEgbm9uLWdlbmVyYWwtcHVycG9zZSBhcmd1bWVudCIpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAg
Zm9ybXMgPDwgRm9ybS5uZXcoa2luZHMsIGFsdE5hbWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICBicmVhayB1bmxlc3MgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBpZiBzaWduYXR1cmUubGVuZ3RoID09
IDAKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1zLmxlbmd0aCA9PSAwCisg
ICAgICAgICAgICAgICAgICAgIGZvcm1zIDw8IEZvcm0ubmV3KFtdLCBuaWwpCisgICAgICAgICAg
ICAgICAgZW5kCisKKyAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzIDw8IE92ZXJsb2Fk
Lm5ldyhzaWduYXR1cmUsIGZvcm1zKQorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKworICAg
ICAgICByZXN1bHQKKyAgICBlbmQKK2VuZAorCiskZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNl
ciA9IFBhcnNlci5uZXcoSU86OnJlYWQoJGZpbGVOYW1lKSwgJGZpbGVOYW1lKQorJG9wY29kZXMg
PSBwYXJzZXIucGFyc2UKKworJHN0ZGVyci5wdXRzICJHZW5lcmF0aW5nIGNvZGUgZm9yICN7JGZp
bGVOYW1lfS4iCisKK2RlZiB3cml0ZUgoZmlsZW5hbWUpCisgICAgRmlsZS5vcGVuKCJBaXIje2Zp
bGVuYW1lfS5oIiwgInciKSB7CisgICAgICAgIHwgb3V0cCB8CisgICAgICAgIAorICAgICAgICBv
dXRwLnB1dHMgIi8vIEdlbmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiIGZyb20gI3skZmls
ZU5hbWV9IC0tIGRvIG5vdCBlZGl0ISIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAiI2lm
bmRlZiBBaXIje2ZpbGVuYW1lfV9oIgorICAgICAgICBvdXRwLnB1dHMgIiNkZWZpbmUgQWlyI3tm
aWxlbmFtZX1faCIKKworICAgICAgICB5aWVsZCBvdXRwCisgICAgICAgIAorICAgICAgICBvdXRw
LnB1dHMgIiNlbmRpZiAvLyBBaXIje2ZpbGVuYW1lfV9oIgorICAgIH0KK2VuZAorCit3cml0ZUgo
Ik9wY29kZSIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImVudW0gT3Bj
b2RlIDogaW50MTZfdCB7IgorICAgICRvcGNvZGVzLmtleXMuc29ydC5lYWNoIHsKKyAgICAgICAg
fCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1dHMgIiAgICAje29wY29kZX0sIgorICAgIH0KKyAg
ICBvdXRwLnB1dHMgIn07IgorCisgICAgb3V0cC5wdXRzICJzdGF0aWMgY29uc3QgdW5zaWduZWQg
bnVtT3Bjb2RlcyA9ICN7JG9wY29kZXMua2V5cy5zaXplfTsiCisgICAgb3V0cC5wdXRzICJ9IH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorICAgIAorICAgIG91dHAucHV0cyAibmFtZXNw
YWNlIFdURiB7IgorICAgIG91dHAucHV0cyAiY2xhc3MgUHJpbnRTdHJlYW07IgorICAgIG91dHAu
cHV0cyAidm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpPcGNv
ZGUpOyIKKyAgICBvdXRwLnB1dHMgIn0gLy8gbmFtZXNwYWNlIFdURiIKK30KKworIyBGcm9tIGhl
cmUgb24sIHdlIGRvbid0IHRyeSB0byBlbWl0IHByb3Blcmx5IGluZGVudGVkIGNvZGUsIHNpbmNl
IHdlJ3JlIHVzaW5nIGEgcmVjdXJzaXZlIHBhdHRlcm4KKyMgbWF0Y2hlci4KKworZGVmIG1hdGNo
Rm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCwgY29sdW1uR2V0dGVyLCBmaWx0
ZXIsIGNhbGxiYWNrKQorICAgIHJldHVybiBpZiBmb3Jtcy5sZW5ndGggPT0gMAorCisgICAgaWYg
ZmlsdGVyW2Zvcm1zXQorICAgICAgICByZXR1cm4KKyAgICBlbmQKKworICAgIGlmIGNvbHVtbklu
ZGV4ID49IGZvcm1zWzBdLmtpbmRzLmxlbmd0aAorICAgICAgICByYWlzZSB1bmxlc3MgZm9ybXMu
bGVuZ3RoID09IDEKKyAgICAgICAgY2FsbGJhY2tbZm9ybXNbMF1dCisgICAgICAgIHJldHVybgor
ICAgIGVuZAorICAgIAorICAgIGdyb3VwcyA9IHt9CisgICAgZm9ybXMuZWFjaCB7CisgICAgICAg
IHwgZm9ybSB8CisgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2NvbHVtbkluZGV4XS5uYW1lCisg
ICAgICAgIGlmIGdyb3Vwc1traW5kXQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdIDw8IGZvcm0K
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ3JvdXBzW2tpbmRdID0gW2Zvcm1dCisgICAgICAg
IGVuZAorICAgIH0KKworICAgIGlmIHNwZWVkID09IDpmYXN0IGFuZCBncm91cHMubGVuZ3RoID09
IDEKKyAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgZm9ybXMsIGNvbHVtbkluZGV4ICsg
MSwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICByZXR1cm4KKyAgICBl
bmQKKworICAgIG91dHAucHV0cyAic3dpdGNoICgje2NvbHVtbkdldHRlcltjb2x1bW5JbmRleF19
KSB7IgorICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICB8IGtleSwgdmFsdWUgfAorICAg
ICAgICBvdXRwLnB1dHMgIiNpZiBVU0UoSlNWQUxVRTY0KSIgaWYga2V5ID09ICJJbW02NCIKKyAg
ICAgICAgS2luZC5hcmdLaW5kcyhrZXkpLmVhY2ggeworICAgICAgICAgICAgfCBhcmdLaW5kIHwK
KyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSBBcmc6OiN7YXJnS2luZH06IgorICAgICAgICB9
CisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIHZhbHVlLCBjb2x1bW5JbmRleCArIDEs
IGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgb3V0cC5wdXRzICJicmVh
azsiCisgICAgICAgIG91dHAucHV0cyAiI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIiBpZiBrZXkg
PT0gIkltbTY0IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0
cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKK2VuZAorCitkZWYgbWF0Y2hJbnN0T3Zlcmxv
YWQob3V0cCwgc3BlZWQsIGluc3QpCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKCN7aW5zdH0tPm9w
Y29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwK
KyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgaWYgb3Bj
b2RlLnNwZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsCisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9ICgob3Bjb2RlLm92ZXJsb2Fkcy5zaXpl
ICE9IDEpIG9yIHNwZWVkID09IDpzYWZlKQorICAgICAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2gg
KCN7aW5zdH0tPmFyZ3Muc2l6ZSgpKSB7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAg
ICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8
CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxl
bmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNv
ZGUsIG92ZXJsb2FkCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRP
dmVybG9hZFN3aXRjaAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZE92ZXJsb2Fk
U3dpdGNoCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIn0iCisg
ICAgICAgICAgICBlbmQKKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAiYnJlYWs7Igor
ICAgIG91dHAucHV0cyAifSIKK2VuZAorICAgIAorZGVmIG1hdGNoSW5zdE92ZXJsb2FkRm9ybShv
dXRwLCBzcGVlZCwgaW5zdCkKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCBzcGVlZCwgaW5z
dCkgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQgfAorICAgICAgICBpZiBvcGNvZGUuc3Bl
Y2lhbAorICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBuaWwsIG5pbAorICAgICAgICBlbHNlCisg
ICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICB8IGNvbHVt
bkluZGV4IHwKKyAgICAgICAgICAgICAgICAiI3tpbnN0fS0+YXJnc1sje2NvbHVtbkluZGV4fV0u
a2luZCgpIgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNl
IH0KKyAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBmb3Jt
IHwKKyAgICAgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG92ZXJsb2FkLCBmb3JtCisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCBvdmVybG9hZC5mb3Jt
cywgMCwgY29sdW1uR2V0dGVyLCBmaWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICBlbmQKKyAgICB9
CitlbmQKKword3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAu
cHV0cyAiI2luY2x1ZGUgXCJBaXJJbnN0LmhcIiIKKyAgICBvdXRwLnB1dHMgIiNpbmNsdWRlIFwi
QWlyU3BlY2lhbC5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIAorICAgIG91dHAucHV0cyAiaW5saW5lIGJvb2wg
b3BnZW5IaWRkZW5UcnV0aCgpIHsgcmV0dXJuIHRydWU7IH0iCisgICAgb3V0cC5wdXRzICJ0ZW1w
bGF0ZTx0eXBlbmFtZSBUPiIKKyAgICBvdXRwLnB1dHMgImlubGluZSBUKiBvcGdlbkhpZGRlblB0
cklkZW50aXR5KFQqIHBvaW50ZXIpIHsgcmV0dXJuIHBvaW50ZXI7IH0iCisgICAgb3V0cC5wdXRz
ICIjZGVmaW5lIE9QR0VOX1JFVFVSTih2YWx1ZSkgZG8ge1xcIgorICAgIG91dHAucHV0cyAiICAg
IGlmIChvcGdlbkhpZGRlblRydXRoKCkpXFwiCisgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVy
biB2YWx1ZTtcXCIKKyAgICBvdXRwLnB1dHMgIn0gd2hpbGUgKGZhbHNlKSIKKworICAgIG91dHAu
cHV0cyAidGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4iCisgICAgb3V0cC5wdXRzICJ2b2lkIElu
c3Q6OmZvckVhY2hBcmcoY29uc3QgRnVuY3RvciYgZnVuY3RvcikiCisgICAgb3V0cC5wdXRzICJ7
IgorICAgIG1hdGNoSW5zdE92ZXJsb2FkKG91dHAsIDpmYXN0LCAidGhpcyIpIHsKKyAgICAgICAg
fCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAg
ICAgIG91dHAucHV0cyAiZnVuY3RvcihhcmdzWzBdLCBBcmc6OlVzZSwgQXJnOjpHUCk7IC8vIFRo
aXMgaXMgYmFzaWNhbGx5IGJvZ3VzLCBidXQgaXQgd29ya3MgZiBhbmFseXNlcyBtb2RlbCBTcGVj
aWFsIGFzIGFuIGltbWVkaWF0ZS4iCisgICAgICAgICAgICBvdXRwLnB1dHMgImFyZ3NbMF0uc3Bl
Y2lhbCgpLT5mb3JFYWNoQXJnKCp0aGlzLCBzY29wZWRMYW1iZGE8RWFjaEFyZ0NhbGxiYWNrPihm
dW5jdG9yKSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUu
ZWFjaF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICB8IGFyZywgaW5kZXggfAorICAgICAg
ICAgICAgICAgIHJvbGUgPSBuaWwKKyAgICAgICAgICAgICAgICBjYXNlIGFyZy5yb2xlCisgICAg
ICAgICAgICAgICAgd2hlbiAiVSIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJVc2UiCisg
ICAgICAgICAgICAgICAgd2hlbiAiRCIKKyAgICAgICAgICAgICAgICAgICAgcm9sZSA9ICJEZWYi
CisgICAgICAgICAgICAgICAgd2hlbiAiVUQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAi
VXNlRGVmIgorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmFpc2UK
KyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImZ1bmN0b3IoYXJnc1sje2luZGV4fV0sIEFyZzo6I3tyb2xlfSwgQXJnOjoje2Fy
Zy50eXBlfVApOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAu
cHV0cyAifSIKKworICAgIG91dHAucHV0cyAidGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRz
PiIKKyAgICBvdXRwLnB1dHMgIkFMV0FZU19JTkxJTkUgYm9vbCBpc1ZhbGlkRm9ybShPcGNvZGUg
b3Bjb2RlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAg
b3V0cC5wdXRzICJBcmc6OktpbmQga2luZHNbc2l6ZW9mLi4uKEFyZ3VtZW50cyldID0geyBhcmd1
bWVudHMuLi4gfTsiCisgICAgb3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bj
b2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRz
ICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgb3V0cC5wdXRzICJzd2l0Y2ggKHNpemVv
Zi4uLihBcmd1bWVudHMpKSB7IgorICAgICAgICB1bmxlc3Mgb3Bjb2RlLnNwZWNpYWwKKyAgICAg
ICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgfCBvdmVybG9h
ZCB8CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJl
Lmxlbmd0aH06IgorICAgICAgICAgICAgICAgIGNvbHVtbkdldHRlciA9IHByb2MgeyB8IGNvbHVt
bkluZGV4IHwgIm9wZ2VuSGlkZGVuUHRySWRlbnRpdHkoa2luZHMpWyN7Y29sdW1uSW5kZXh9XSIg
fQorICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CisgICAgICAgICAgICAg
ICAgY2FsbGJhY2sgPSBwcm9jIHsKKyAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAg
ICAgICAgICAgICAgICAgc3BlY2lhbCA9IChub3QgZm9ybS5raW5kcy5kZXRlY3QgeyB8IGtpbmQg
fCBraW5kLnNwZWNpYWwgfSkKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9S
RVRVUk4oI3tzcGVjaWFsfSk7IgorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBt
YXRjaEZvcm1zKG91dHAsIDpzYWZlLCBvdmVybG9hZC5mb3JtcywgMCwgY29sdW1uR2V0dGVyLCBm
aWx0ZXIsIGNhbGxiYWNrKQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAg
ICAgICAgICAgfQorICAgICAgICBlbmQKKyAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgfQorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAg
b3V0cC5wdXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0
dXJuIGZhbHNlOyAiCisgICAgb3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJpbmxpbmUg
Ym9vbCBpc1Rlcm1pbmFsKE9wY29kZSBvcGNvZGUpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBv
dXRwLnB1dHMgInN3aXRjaCAob3Bjb2RlKSB7IgorICAgICRvcGNvZGVzLnZhbHVlcy5lYWNoIHsK
KyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBpZiBvcGNvZGUua2luZCA9PSA6dGVybWluYWwg
b3Igb3Bjb2RlLmtpbmQgPT0gOmJyYW5jaAorICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7
b3Bjb2RlLm5hbWV9OiIKKyAgICAgICAgZW5kCisgICAgfQorICAgIG91dHAucHV0cyAicmV0dXJu
IHRydWU7IgorICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgb3V0cC5wdXRzICJyZXR1cm4g
ZmFsc2U7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgCisgICAg
b3V0cC5wdXRzICJ9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyIgorfQorCit3cml0ZUgo
Ik9wY29kZUdlbmVyYXRlZCIpIHsKKyAgICB8IG91dHAgfAorICAgIG91dHAucHV0cyAiI2luY2x1
ZGUgXCJBaXJJbnN0SW5saW5lcy5oXCIiCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcInd0Zi9Q
cmludFN0cmVhbS5oXCIiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgV1RGIHsiCisgICAgb3V0
cC5wdXRzICJ1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyOyIKKyAgICBvdXRwLnB1dHMgInZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGNvZGUgb3Bjb2RlKSIKKyAgICBv
dXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICIgICAgc3dpdGNoIChvcGNvZGUpIHsiCisgICAg
JG9wY29kZXMua2V5cy5lYWNoIHsKKyAgICAgICAgfCBvcGNvZGUgfAorICAgICAgICBvdXRwLnB1
dHMgIiAgICBjYXNlICN7b3Bjb2RlfToiCisgICAgICAgIG91dHAucHV0cyAiICAgICAgICBvdXQu
cHJpbnQoXCIje29wY29kZX1cIik7IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgcmV0dXJu
OyIKKyAgICB9CisgICAgb3V0cC5wdXRzICIgICAgfSIKKyAgICBvdXRwLnB1dHMgIiAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5w
dXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCisgICAgb3V0cC5wdXRzICJuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7IgorICAgIG91dHAucHV0cyAiYm9vbCBJbnN0
Ojppc1ZhbGlkRm9ybSgpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBtYXRjaEluc3RPdmVybG9h
ZEZvcm0ob3V0cCwgOnNhZmUsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQs
IGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRz
ICJpZiAoYXJncy5zaXplKCkgPCAxKSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZh
bHNlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdzWzBdLmlzU3BlY2lhbCgpKSIK
KyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5pc1ZhbGlkKCp0aGlzKSk7Igor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkc01vcmVWYWxpZGF0aW9uID0gZmFsc2UKKyAg
ICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGgudGltZXMgeworICAgICAgICAgICAg
ICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgIHJvbGUgPSBvdmVybG9hZC5zaWduYXR1cmVb
aW5kZXhdLnJvbGUKKyAgICAgICAgICAgICAgICB0eXBlID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2lu
ZGV4XS50eXBlCisgICAgICAgICAgICAgICAga2luZCA9IGZvcm0ua2luZHNbaW5kZXhdCisgICAg
ICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiB8PSBraW5kLnNwZWNpYWwKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgICAgICAjIFdlIGFscmVhZHkga25vdyB0aGF0IHRoZSBmb3Jt
IG1hdGNoZXMuIFdlIGRvbid0IGhhdmUgdG8gdmFsaWRhdGUgdGhlIHJvbGUsIHNpbmNlCisgICAg
ICAgICAgICAgICAgIyBraW5kIGltcGxpZXMgcm9sZS4gU28sIHRoZSBvbmx5IHRoaW5nIGxlZnQg
dG8gdmFsaWRhdGUgaXMgdGhlIHR5cGUuIEFuZCB3ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAg
ICAjIHRvIHZhbGlkYXRlIHRoZSB0eXBlIGlmIHdlIGhhdmUgYSBUbXAuCisgICAgICAgICAgICAg
ICAgaWYga2luZC5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
aWYgKCFhcmdzWyN7aW5kZXh9XS50bXAoKS5pcyN7dHlwZX1QKCkpIgorICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgIGVu
ZAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgbmVlZHNNb3JlVmFsaWRhdGlvbgorICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFpcyN7b3Bjb2RlLm5hbWV9VmFsaWQoKnRoaXMp
KSIKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsi
CisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAg
b3V0cC5wdXRzICJ9IgorCisgICAgb3V0cC5wdXRzICJib29sIEluc3Q6OmFkbWl0c1N0YWNrKHVu
c2lnbmVkIGFyZ0luZGV4KSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgb3V0cC5wdXRzICJzd2l0
Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7CisgICAgICAgIHwgb3Bj
b2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3Bjb2RlLm5hbWV9OiIKKworICAgICAg
ICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIWFyZ0luZGV4
KSIKKyAgICAgICAgICAgIG91dHAucHV0cyAicmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgIG91
dHAucHV0cyAiT1BHRU5fUkVUVVJOKGFyZ3NbMF0uc3BlY2lhbCgpLT5hZG1pdHNTdGFjaygqdGhp
cywgYXJnSW5kZXgpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgU3dpdGNoIG9uIHRo
ZSBhcmdJbmRleC4KKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdJbmRleCkgeyIK
KworICAgICAgICAgICAgbnVtQXJncyA9IG9wY29kZS5vdmVybG9hZHMubWFwIHsKKyAgICAgICAg
ICAgICAgICB8IG92ZXJsb2FkIHwKKyAgICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUu
bGVuZ3RoCisgICAgICAgICAgICB9Lm1heAorICAgICAgICAgICAgCisgICAgICAgICAgICBudW1B
cmdzLnRpbWVzIHsKKyAgICAgICAgICAgICAgICB8IGFyZ0luZGV4IHwKKyAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImNhc2UgI3thcmdJbmRleH06IgorCisgICAgICAgICAgICAgICAgIyBDaGVj
ayBpZiBhbGwgb2YgdGhlIGZvcm1zIG9mIGFsbCBvZiB0aGUgb3ZlcmxvYWRzIGVpdGhlciBkbywg
b3IgZG9uJ3QsIGFkbWl0IGFuIGFkZHJlc3MKKyAgICAgICAgICAgICAgICAjIGF0IHRoaXMgaW5k
ZXguIFdlIGV4cGVjdCB0aGlzIHRvIGJlIGEgdmVyeSBjb21tb24gY2FzZS4KKyAgICAgICAgICAg
ICAgICBudW1ZZXMgPSAwCisgICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAg
ICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9h
ZCB8CisgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggeworICAgICAgICAg
ICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0u
a2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bVllcyArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbnVtTm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAj
IE5vdGUgdGhhdCB3ZSBkZWxpYmVyYXRlbHkgdGVzdCBudW1ZZXMgZmlyc3QgYmVjYXVzZSBpZiB3
ZSBlbmQgdXAgd2l0aCBubyBmb3Jtcywgd2Ugd2FudAorICAgICAgICAgICAgICAgICMgdG8gc2F5
IHRoYXQgQWRkcmVzcyBpcyBpbmFkbWlzc2libGUuCisgICAgICAgICAgICAgICAgaWYgbnVtWWVz
ID09IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2Up
OyIKKyAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgICAgICMgTm93IGRvIHRoZSBmdWxsIHRlc3QuCisKKyAgICAgICAgICAg
ICAgICAgICAgbmVlZE92ZXJsb2FkU3dpdGNoID0gKG9wY29kZS5vdmVybG9hZHMuc2l6ZSAhPSAx
KQorCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChhcmdzLnNpemUoKSkg
eyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgIG9wY29kZS5vdmVy
bG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwKKworICAg
ICAgICAgICAgICAgICAgICAgICAgIyBBZ2FpbiwgY2hlY2sgaWYgYWxsIG9mIHRoZW0gZG8gd2hh
dCB3ZSB3YW50LgorICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0gMAorICAgICAgICAg
ICAgICAgICAgICAgICAgbnVtTm8gPSAwCisgICAgICAgICAgICAgICAgICAgICAgICBvdmVybG9h
ZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRy
IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bnVtTm8gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBudW1ZZXMgPT0gMAor
ICAgICAgICAgICAgICAgICAgICAgICAgIyBEb24ndCBlbWl0IGFueXRoaW5nLCBqdXN0IGRyb3Ag
dG8gZGVmYXVsdC4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2lmIG51bU5vID09IDAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgI3tvdmVybG9hZC5zaWdu
YXR1cmUubGVuZ3RofToiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisg
ICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3Zl
cmxvYWRTd2l0Y2gKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVGhpcyBpcyBob3cg
d2UgdGVzdCB0aGUgaHlwb3RoZXNpcyB0aGF0IGNoYW5naW5nIHRoaXMgYXJndW1lbnQgdG8gYW4K
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGFkZHJlc3MgeWllbGRzIGEgdmFsaWQgZm9y
bS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBjb2x1bW5JbmRleCB8CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGNvbHVtbkluZGV4ID09IGFyZ0luZGV4CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXJnOjpBZGRyIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiYXJnc1sje2NvbHVtbkluZGV4fV0ua2luZCgpIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHwgZm9ybXMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMg
PSAwCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybXMuZWFjaCB7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVz
ID09IDAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRHJvcCBkb3duLCBl
bWl0IG5vIGNvZGUsIHNpbmNlIHdlIGNhbm5vdCBtYXRjaC4KKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRydWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBLZWVwIGdvaW5nLgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHRydWUpOyIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hG
b3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVy
LCBjYWxsYmFjaykKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAor
ICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAg
ICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImJyZWFrOyIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgb3V0cC5w
dXRzICJkZWZhdWx0OiIKKyAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICAg
ICAgb3V0cC5wdXRzICJ9IgorICAgICAgICBlbmQKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0
cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IjsKKyAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFs
c2U7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiQ0NhbGxIZWxwZXJzOjpK
dW1wIEluc3Q6OmdlbmVyYXRlKENDYWxsSGVscGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYg
Y29udGV4dCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFN
KGppdCk7IgorICAgIG91dHAucHV0cyAiVU5VU0VEX1BBUkFNKGNvbnRleHQpOyIKKyAgICBvdXRw
LnB1dHMgIkNDYWxsSGVscGVyczo6SnVtcCByZXN1bHQ7IgorICAgIG1hdGNoSW5zdE92ZXJsb2Fk
Rm9ybShvdXRwLCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAgIHwgb3Bjb2RlLCBvdmVybG9hZCwg
Zm9ybSB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICBvdXRwLnB1dHMg
Ik9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+Z2VuZXJhdGUoKnRoaXMsIGppdCwgY29u
dGV4dCkpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgZm9ybS5hbHROYW1lCisgICAg
ICAgICAgICAgICAgbWV0aG9kTmFtZSA9IGZvcm0uYWx0TmFtZQorICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBvcGNvZGUubWFzbU5hbWUKKyAgICAgICAgICAg
IGVuZAorICAgICAgICAgICAgaWYgb3Bjb2RlLmtpbmQgPT0gOmJyYW5jaAorICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgInJlc3VsdCA9ICIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAg
b3V0cC5wcmludCAiaml0LiN7bWV0aG9kTmFtZX0oIgorCisgICAgICAgICAgICBmb3JtLmtpbmRz
LmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBraW5kLCBpbmRleCB8CisgICAg
ICAgICAgICAgICAgaWYgaW5kZXggIT0gMAorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50
ICIsICIKKyAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICBjYXNlIGtpbmQubmFt
ZQorICAgICAgICAgICAgICAgIHdoZW4gIlRtcCIKKyAgICAgICAgICAgICAgICAgICAgaWYgb3Zl
cmxvYWQuc2lnbmF0dXJlW2luZGV4XS50eXBlID09ICJHIgorICAgICAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uZ3ByKCkiCisgICAgICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1d
LmZwcigpIgorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICB3aGVuICJJ
bW0iCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1
c3RlZEltbTMyKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiSW1tNjQiCisgICAgICAgICAgICAg
ICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzVHJ1c3RlZEltbTY0KCkiCisgICAg
ICAgICAgICAgICAgd2hlbiAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmludCAi
YXJnc1sje2luZGV4fV0uYXNBZGRyZXNzKCkiCisgICAgICAgICAgICAgICAgd2hlbiAiSW5kZXgi
CisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzQmFzZUlu
ZGV4KCkiCisgICAgICAgICAgICAgICAgd2hlbiAiUmVsQ29uZCIKKyAgICAgICAgICAgICAgICAg
ICAgb3V0cC5wcmludCAiYXJnc1sje2luZGV4fV0uYXNSZWxhdGlvbmFsQ29uZGl0aW9uKCkiCisg
ICAgICAgICAgICAgICAgd2hlbiAiUmVzQ29uZCIKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5w
cmludCAiYXJnc1sje2luZGV4fV0uYXNSZXN1bHRDb25kaXRpb24oKSIKKyAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgb3V0cC5wdXRzICIpOyIKKyAgICAg
ICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKHJlc3VsdCk7IgorICAgICAgICBlbmQKKyAg
ICB9CisgICAgb3V0cC5wdXRzICJSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOyIKKyAgICBv
dXRwLnB1dHMgInJldHVybiByZXN1bHQ7IgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAu
cHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTkxNjUwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzAsNyArMTcwLDcgQEAgcHVibGljOgogICAgIH0KIAogICAgIENvZGVCbG9jayog
YWx0ZXJuYXRpdmVGb3JKZXR0aXNvbigpOyAgICAKLSAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0
ZXJuYXRpdmUoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlQmxvY2sqIGJhc2VsaW5lQWx0
ZXJuYXRpdmUoKTsKICAgICAKICAgICAvLyBGSVhNRTogR2V0IHJpZCBvZiB0aGlzLgogICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjM2NzcKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWcuaAkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9SZWcuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw2IEBAIHB1Ymxp
YzoKICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KICAgICAK
ICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZhbGlkKCk7IH0K
LSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KIAogICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09IGRl
bGV0ZWQoKTsgfQpAQCAtMTcwLDYgKzE2OSw0NiBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKKyAgICBjbGFzcyBBbGxSZWdzSXRlcmFibGUgewor
ICAgIHB1YmxpYzoKKworICAgICAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoK
KyAgICAgICAgICAgIGl0ZXJhdG9yKCkgeyB9CisKKyAgICAgICAgICAgIGV4cGxpY2l0IGl0ZXJh
dG9yKFJlZyByZWcpCisgICAgICAgICAgICAgICAgOiBtX3JlZ0luZGV4KHJlZy5pbmRleCgpKQor
ICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBSZWcgb3BlcmF0b3Iq
KCkgY29uc3QgeyByZXR1cm4gUmVnOjpmcm9tSW5kZXgobV9yZWdJbmRleCk7IH0KKworICAgICAg
ICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIG1fcmVnSW5kZXggPSBSZWc6OmZyb21JbmRleChtX3JlZ0luZGV4KS5uZXh0KCkuaW5kZXgo
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fcmVnSW5kZXggPT0gb3RoZXIubV9y
ZWdJbmRleDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNv
bnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgcHJp
dmF0ZToKKyAgICAgICAgICAgIHVuc2lnbmVkIG1fcmVnSW5kZXg7CisgICAgICAgIH07CisKKyAg
ICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihSZWc6OmZpcnN0
KCkpOyB9CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKFJl
ZygpKTsgfQorICAgIH07CisKKyAgICBzdGF0aWMgQWxsUmVnc0l0ZXJhYmxlIGFsbCgpIHsgcmV0
dXJuIEFsbFJlZ3NJdGVyYWJsZSgpOyB9CisKIHByaXZhdGU6CiAgICAgc3RhdGljIHVpbnQ4X3Qg
aW52YWxpZCgpIHsgcmV0dXJuIDB4ZmY7IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHAJKHJldmlzaW9uIDE5MTY1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIFJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpSZWdp
c3RlckF0T2Zmc2V0TGkKICAgICBpZiAob2Zmc2V0QmFzZVR5cGUgPT0gRnJhbWVQb2ludGVyQmFz
ZWQpCiAgICAgICAgIG9mZnNldCA9IC0oc3RhdGljX2Nhc3Q8cHRyZGlmZl90PihudW1iZXJPZlJl
Z2lzdGVycykgKiBzaXplb2Yodm9pZCopKTsKIAotICAgIGZvciAoUmVnIHJlZyA9IFJlZzo6Zmly
c3QoKTsgcmVnIDw9IFJlZzo6bGFzdCgpO3JlZyA9IHJlZy5uZXh0KCkpIHsKKyAgICBmb3IgKFJl
ZyByZWcgPSBSZWc6OmZpcnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTsgcmVnID0gcmVnLm5leHQo
KSkgewogICAgICAgICBpZiAocmVnaXN0ZXJTZXQuZ2V0KHJlZykpIHsKICAgICAgICAgICAgIGFw
cGVuZChSZWdpc3RlckF0T2Zmc2V0KHJlZywgb2Zmc2V0KSk7CiAgICAgICAgICAgICBvZmZzZXQg
Kz0gc2l6ZW9mKHZvaWQqKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJBdE9mZnNldExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDcsNyArNDcsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fcmVnaXN0ZXJzLmNsZWFyKCk7CiAgICAg
fQogCi0gICAgc2l6ZV90IHNpemUoKQorICAgIHNpemVfdCBzaXplKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIHJldHVybiBtX3JlZ2lzdGVycy5zaXplKCk7CiAgICAgfQpAQCAtNjYsNiArNjYsOSBA
QCBwdWJsaWM6CiAgICAgUmVnaXN0ZXJBdE9mZnNldCogZmluZChSZWcpIGNvbnN0OwogICAgIHVu
c2lnbmVkIGluZGV4T2YoUmVnKSBjb25zdDsgLy8gUmV0dXJucyBVSU5UX01BWCBpZiBub3QgZm91
bmQuCiAKKyAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gbV9yZWdpc3RlcnMuYmVnaW4oKTsgfQorICAgIFZlY3RvcjxSZWdp
c3RlckF0T2Zmc2V0Pjo6Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gbV9yZWdp
c3RlcnMuZW5kKCk7IH0KKwogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVnaXN0ZXJBdE9mZnNldD4g
bV9yZWdpc3RlcnM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJT
ZXQuaAkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdp
c3RlclNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTgsNiArMTE4LDEzIEBAIHB1YmxpYzoKICAg
ICAKICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgUmVnaXN0ZXJTZXQmIG90aGVyKSBjb25zdCB7
IHJldHVybiBtX3ZlY3RvciA9PSBvdGhlci5tX3ZlY3RvcjsgfQogICAgIHVuc2lnbmVkIGhhc2go
KSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvci5oYXNoKCk7IH0KKworICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIGNv
bnN0CisgICAgeworICAgICAgICBmb3IgKHNpemVfdCBpbmRleCA6IG1fdmVjdG9yLnNldEJpdHMo
KSkKKyAgICAgICAgICAgIGZ1bmN0b3IoUmVnOjpmcm9tSW5kZXgoaW5kZXgpKTsKKyAgICB9CiAg
ICAgCiBwcml2YXRlOgogICAgIHZvaWQgc2V0QW55KFJlZyByZWcpIHsgc2V0KHJlZyk7IH0KSW5k
ZXg6IFNvdXJjZS9XVEYvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvV1RGL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDMxIEBACisyMDE1LTEwLTI4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgQ3JlYXRlIGEgc3VwZXIgcm91Z2ggcHJvdG90eXBlIG9mIEIz
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTAyODAK
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdURi54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHd0Zi9DTWFrZUxpc3RzLnR4dDoK
KyAgICAgICAgKiB3dGYvSGFzaFNldC5oOgorICAgICAgICAoV1RGOjpjb3B5VG9WZWN0b3IpOgor
ICAgICAgICAoV1RGOjo9KToKKyAgICAgICAgKiB3dGYvTGlzdER1bXAuaDoKKyAgICAgICAgKFdU
Rjo6UG9pbnRlckxpc3REdW1wOjpQb2ludGVyTGlzdER1bXApOgorICAgICAgICAoV1RGOjpQb2lu
dGVyTGlzdER1bXA6OmR1bXApOgorICAgICAgICAoV1RGOjpNYXBEdW1wOjpNYXBEdW1wKToKKyAg
ICAgICAgKFdURjo6bGlzdER1bXApOgorICAgICAgICAoV1RGOjpwb2ludGVyTGlzdER1bXApOgor
ICAgICAgICAoV1RGOjpzb3J0ZWRMaXN0RHVtcCk6CisgICAgICAgICogd3RmL01hdGhFeHRyYXMu
aDoKKyAgICAgICAgKFdURjo6bGVmdFNoaWZ0V2l0aFNhdHVyYXRpb24pOgorICAgICAgICAoV1RG
OjpyYW5nZXNPdmVybGFwKToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKyAgICAgICAgKiB3
dGYvU2NvcGVkTGFtYmRhLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpzY29wZWRMYW1iZGEpOgor
ICAgICAgICAqIHd0Zi9TaGFyZWRUYXNrLmg6CisgICAgICAgIChXVEY6OmNyZWF0ZVNoYXJlZFRh
c2spOgorCiAyMDE1LTEwLTIxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAg
ICAgICAgRmFjdG9yIG91dCB0aGUgZ3JhcGggbm9kZSB3b3JrbGlzdHMgZnJvbSBERkcgaW50byBX
VEYKSW5kZXg6IFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNp
b24gMTkxNjUwKQorKysgU291cmNlL1dURi9XVEYueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
d29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsNyBAQAogCQkwRkU0NDc5RDFCN0FBQTAzMDA5NDk4
RUIgLyogV29yZExvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovOyB9OwogCQkw
RkVCM0RDRjFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQjNEQ0UxQkI1RDY4NDAwOUQ3QUFEIC8q
IFNoYXJlZFRhc2suaCAqLzsgfTsKIAkJMEZFQjNERDExQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFs
bGVsVmVjdG9ySXRlcmF0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJh
dG9yLmggKi87IH07CisJCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEIw
MUJEQUNEMzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLzsgfTsKIAkJMEZFQzg0QUYxQkQ4
MjUzMTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRBRTFCRDgyNTMxMDA4MEZGNzQgLyogR3Jh
cGhOb2RlV29ya2xpc3QuaCAqLzsgfTsKIAkJMEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRp
bnlQdHJTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi87IH07CiAJCTBGRjg2
MDk1MUJDQ0JENzQwMDQ1MTI3RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdG
IC8qIFBvaW50ZXJDb21wYXJpc29uLmggKi87IH07CkBAIC0zNDUsNiArMzQ2LDcgQEAKIAkJMEZF
NDQ3OUIxQjdBQUEwMzAwOTQ5OEVCIC8qIFdvcmRMb2NrLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdvcmRMb2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAvKiBTaGFyZWRUYXNrLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFNoYXJlZFRhc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFQjNERDAxQkI3MzY2QjAwOUQ3QUFEIC8qIFBhcmFsbGVsVmVjdG9ySXRlcmF0b3IuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGFyYWxsZWxWZWN0b3JJdGVyYXRvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCMDFCREFDRDM5MDA4MEZGNzQg
LyogU2NvcGVkTGFtYmRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNjb3Bl
ZExhbWJkYS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRBRTFCRDgyNTMx
MDA4MEZGNzQgLyogR3JhcGhOb2RlV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gR3JhcGhOb2RlV29ya2xpc3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMEZFRDY3QjUxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVGlueVB0clNldC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkY4NjA5NDFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUG9pbnRlckNvbXBhcmlzb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg3MCw2ICs4NzIsNyBAQAogCQkJCTE0Njk0MTk0
MTZFQUFGRjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXIuaCAqLywKIAkJCQkxNDY5NDE5ODE2RUFC
MDQxMDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyQ0YuY3BwICovLAogCQkJCTE0Njk0MTk1MTZFQUFG
RjgwMDI0RTE0NiAvKiBTY2hlZHVsZVBhaXJNYWMubW0gKi8sCisJCQkJMEZFQzg0QjAxQkRBQ0Qz
OTAwODBGRjc0IC8qIFNjb3BlZExhbWJkYS5oICovLAogCQkJCUE4QTQ3MzA2MTUxQTgyNUIwMDQx
MjNGRiAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLywKIAkJCQlBOEE0NzMwNzE1MUE4MjVCMDA0MTIz
RkYgLyogU2VudGluZWxMaW5rZWRMaXN0LmggKi8sCiAJCQkJQThBNDczMDgxNTFBODI1QjAwNDEy
M0ZGIC8qIFNIQTEuY3BwICovLApAQCAtMTI0NCw2ICsxMjQ3LDcgQEAKIAkJCQlBOEE0NzQ0OTE1
MUE4MjVCMDA0MTIzRkYgLyogVGhyZWFkSWRlbnRpZmllckRhdGFQdGhyZWFkcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQThBNDc0NEIxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQThBNDc0NEQxNTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZGluZ1ByaW1p
dGl2ZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NEIxMUJEQUNEMzkwMDgwRkY3NCAvKiBT
Y29wZWRMYW1iZGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU0MTUxQTgyNUIwMDQxMjNG
RiAvKiBUaHJlYWRTYWZlUmVmQ291bnRlZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQThBNDc0NTUx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZFNwZWNpZmljLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVENjdCNjFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oIGluIEhlYWRlcnMgKi8sCklu
ZGV4OiBTb3VyY2UvV1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL1dURi93
dGYvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTg3LDYgKzg3LDcgQEAgc2V0KFdU
Rl9IRUFERVJTCiAgICAgU0hBMS5oCiAgICAgU2hhcmVkVGFzay5oCiAgICAgU2F0dXJhdGVkQXJp
dGhtZXRpYy5oCisgICAgU2NvcGVkTGFtYmRhLmgKICAgICBTZWdtZW50ZWRWZWN0b3IuaAogICAg
IFN0YWNrQm91bmRzLmgKICAgICBTdGFja1N0YXRzLmgKQEAgLTE4MSw2ICsxODIsNyBAQCBzZXQo
V1RGX1NPVVJDRVMKICAgICBSZWZDb3VudGVyLmNwcAogICAgIFJ1bkxvb3AuY3BwCiAgICAgU0hB
MS5jcHAKKyAgICBTY29wZWRMYW1iZGEuY3BwCiAgICAgU2l4Q2hhcmFjdGVySGFzaC5jcHAKICAg
ICBTdGFja0JvdW5kcy5jcHAKICAgICBTdGFja1N0YXRzLmNwcApJbmRleDogU291cmNlL1dURi93
dGYvSGFzaFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkocmV2
aXNpb24gMTkxNjUwKQorKysgU291cmNlL1dURi93dGYvSGFzaFNldC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTQsOCArMTE0LDkgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFYgPSBWYWx1ZVR5cGU+IHR5cGVuYW1lIHN0ZDo6ZW5hYmxlX2lmPElzU21hcnRQdHI8
Vj46OnZhbHVlLCBWYWx1ZVR5cGU+Ojp0eXBlIHRha2UodHlwZW5hbWUgR2V0UHRySGVscGVyPFY+
OjpQdHJUeXBlKTsKIAogICAgICAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFsdWUoY29uc3QgVmFs
dWVUeXBlJik7Ci0gICAgICAgIAotICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSGFzaFNl
dCYpIGNvbnN0OworCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4K
KyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYpIGNvbnN0Owog
CiAgICAgcHJpdmF0ZToKICAgICAgICAgSGFzaFRhYmxlVHlwZSBtX2ltcGw7CkBAIC0zMzcsMTIg
KzMzOCwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICB9ICAKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIFQsIHR5cGVuYW1lIFUsIHR5cGVuYW1lIFY+Ci0gICAgaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBIYXNoU2V0JiBvdGhlcikgY29uc3QKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rpb24+CisgICAgaW5saW5lIGJvb2wgSGFzaFNldDxU
LCBVLCBWPjo6b3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24mIG90aGVyQ29sbGVjdGlv
bikgY29uc3QKICAgICB7Ci0gICAgICAgIGlmIChzaXplKCkgIT0gb3RoZXIuc2l6ZSgpKQorICAg
ICAgICBpZiAoc2l6ZSgpICE9IG90aGVyQ29sbGVjdGlvbi5zaXplKCkpCiAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgICAgIGZvciAoY29uc3RfaXRlcmF0b3IgaXRlciA9IGJlZ2luKCk7
IGl0ZXIgIT0gZW5kKCk7ICsraXRlcikgewotICAgICAgICAgICAgaWYgKCFvdGhlci5jb250YWlu
cygqaXRlcikpCisgICAgICAgIGZvciAoY29uc3QgYXV0byYgb3RoZXIgOiBvdGhlckNvbGxlY3Rp
b24pIHsKKyAgICAgICAgICAgIGlmICghY29udGFpbnMob3RoZXIpKQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNv
dXJjZS9XVEYvd3RmL0xpc3REdW1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTGlz
dER1bXAuaAkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL1dURi93dGYvTGlzdER1bXAuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwpAQCAtNTMsNiArNTMsMjYgQEAgcHJpdmF0ZToKIH07CiAKIHRlbXBsYXRlPHR5
cGVuYW1lIFQ+CitjbGFzcyBQb2ludGVyTGlzdER1bXAgeworcHVibGljOgorICAgIFBvaW50ZXJM
aXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25zdCBjaGFyKiBjb21tYSkKKyAgICAgICAgOiBtX2xp
c3QobGlzdCkKKyAgICAgICAgLCBtX2NvbW1hKGNvbW1hKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBmb3Ig
KHR5cGVuYW1lIFQ6OmNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX2xpc3QuYmVnaW4oKTsgaXRlciAh
PSBtX2xpc3QuZW5kKCk7ICsraXRlcikKKyAgICAgICAgICAgIG91dC5wcmludChtX2NvbW1hLCBw
b2ludGVyRHVtcCgqaXRlcikpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBUJiBtX2xp
c3Q7CisgICAgQ29tbWFQcmludGVyIG1fY29tbWE7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PgogY2xhc3MgTWFwRHVtcCB7CiBwdWJsaWM6CiAgICAgTWFwRHVtcChjb25zdCBUJiBtYXAsIGNv
bnN0IGNoYXIqIGFycm93LCBjb25zdCBjaGFyKiBjb21tYSkKQEAgLTgwLDYgKzEwMCwxMiBAQCBM
aXN0RHVtcDxUPiBsaXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25zCiAgICAgcmV0dXJuIExpc3RE
dW1wPFQ+KGxpc3QsIGNvbW1hKTsKIH0KIAordGVtcGxhdGU8dHlwZW5hbWUgVD4KK1BvaW50ZXJM
aXN0RHVtcDxUPiBwb2ludGVyTGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgY2hhciogY29t
bWEgPSAiLCAiKQoreworICAgIHJldHVybiBQb2ludGVyTGlzdER1bXA8VD4obGlzdCwgY29tbWEp
OworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZSBDb21wYXJhdG9yPgogQ1N0cmlu
ZyBzb3J0ZWRMaXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25zdCBDb21wYXJhdG9yJiBjb21wYXJh
dG9yLCBjb25zdCBjaGFyKiBjb21tYSA9ICIsICIpCiB7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9N
YXRoRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCShy
ZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQxOSw2ICs0MTksMjAgQEAgaW5saW5lIFQgbGVmdFNoaWZ0V2l0aFNhdHVyYXRp
b24oVCB2YWx1ZQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKKy8vIFBhc3MgcmFuZ2VzIHdpdGgg
dGhlIG1pbiBiZWluZyBpbmNsdXNpdmUgYW5kIHRoZSBtYXggYmVpbmcgZXhjbHVzaXZlLiBGb3Ig
ZXhhbXBsZSwgdGhpcyBzaG91bGQKKy8vIHJldHVybiBmYWxzZToKKy8vCisvLyAgICAgcmFuZ2Vz
T3ZlcmxhcCgwLCA4LCA4LCAxNikKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitpbmxpbmUgYm9vbCBy
YW5nZXNPdmVybGFwKFQgbGVmdE1pbiwgVCBsZWZ0TWF4LCBUIHJpZ2h0TWluLCBUIHJpZ2h0TWF4
KQoreworICAgIGlmIChsZWZ0TWluIDw9IHJpZ2h0TWluICYmIGxlZnRNYXggPiByaWdodE1pbikK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHJpZ2h0TWluIDw9IGxlZnRNaW4gJiYgcmln
aHRNYXggPiBsZWZ0TWluKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICByZXR1cm4gZmFsc2U7
Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gI2lmbmRlZiBXVEZfTWF0aEV4
dHJhc19oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYv
d3RmL1BsYXRmb3JtLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3NiwxMiArNzc2LDIwIEBACiAjZGVm
aW5lIEVOQUJMRV9DT05DVVJSRU5UX0pJVCAxCiAjZW5kaWYKIAorLyogVGhlIEIzIGNvbXBpbGVy
IGlzIGFuIGV4cGVyaW1lbnRhbCBiYWNrZW5kIHRoYXQgaXMgc3RpbGwgaW4gZGV2ZWxvcG1lbnQu
IFdlIHdpbGwga2VlcCBpdCBidWlsZGluZworICAgb24gRGFyd2luL3g4Ni02NCBmb3Igbm93LCB0
aG91Z2ggaXQgaXMgdW51c2VkIGV4Y2VwdCBmb3IgdGVzdHMuICovCisjaWYgT1MoREFSV0lOKSAm
JiBDUFUoWDg2XzY0KQorI2RlZmluZSBFTkFCTEVfQjNfSklUIDEKKyNlbmRpZgorCiAvKiBJZiB0
aGUgYmFzZWxpbmUgaml0IGlzIG5vdCBhdmFpbGFibGUsIHRoZW4gZGlzYWJsZSB1cHBlciB0aWVy
cyBhcyB3ZWxsOiAqLwogI2lmICFFTkFCTEUoSklUKQotI3VuZGVmIEVOQUJMRV9ERkdfSklUICAg
ICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVkZWZpbmUgaXQuICovCi0jdW5kZWYgRU5BQkxF
X0ZUTF9KSVQgICAgICAvKiBVbmRlZiBzbyB0aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KKyN1
bmRlZiBFTkFCTEVfREZHX0pJVAorI3VuZGVmIEVOQUJMRV9GVExfSklUCisjdW5kZWYgRU5BQkxF
X0IzX0pJVAogI2RlZmluZSBFTkFCTEVfREZHX0pJVCAwCiAjZGVmaW5lIEVOQUJMRV9GVExfSklU
IDAKKyNkZWZpbmUgRW5hYmxlX0IzX0pJVCAwCiAjZW5kaWYKIAogLyogQ291bnRzIHVzZXMgb2Yg
d3JpdGUgYmFycmllcnMgdXNpbmcgc2FtcGxpbmcgY291bnRlcnMuIEJlIHN1cmUgdG8gYWxzbwpJ
bmRleDogU291cmNlL1dURi93dGYvU2NvcGVkTGFtYmRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvU2NvcGVkTGFtYmRhLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvV1RGL3d0Zi9T
Y29wZWRMYW1iZGEuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgU2NvcGVkTGFtYmRh
X2gKKyNkZWZpbmUgU2NvcGVkTGFtYmRhX2gKKworbmFtZXNwYWNlIFdURiB7CisKKy8vIFlvdSBj
YW4gdXNlIFNjb3BlZExhbWJkYSB0byBlZmZpY2llbnRseSBwYXNzIGxhbWJkYXMgd2l0aG91dCBh
bGxvY2F0aW5nIG1lbW9yeSBvciByZXF1aXJpbmcKKy8vIHRlbXBsYXRlIHNwZWNpYWxpemF0aW9u
IG9mIHRoZSBjYWxsZWUuIFRoZSBjYWxsZWUgc2hvdWxkIGJlIGRlY2xhcmVkIGFzOgorLy8KKy8v
IHZvaWQgZm9vKGNvbnN0IFNjb3BlZExhbWJkYTxNeVRoaW5ncyogKGludCwgU3R1ZmYmKT4mKTsK
Ky8vCisvLyBUaGUgY2FsbGVyIGp1c3QgZG9lczoKKy8vCisvLyB2b2lkIGZvbyhzY29wZWRMYW1i
ZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+KFsmXSAoaW50IHgsIFN0dWZmJiB5KSAtPiBNeVRo
aW5ncyogeyBibGFoIH0pKTsKKy8vCisvLyBOb3RlIHRoYXQgdGhpcyByZWxpZXMgb24gZm9vKCkg
bm90IGVzY2FwaW5nIHRoZSBsYW1iZGEuIFRoZSBsYW1iZGEgaXMgb25seSB2YWxpZCB3aGlsZSBm
b28oKSBpcworLy8gb24gdGhlIHN0YWNrIC0gaGVuY2UgdGhlIG5hbWUgU2NvcGVkTGFtYmRhLgor
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNjb3BlZExhbWJkYTsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+Citj
bGFzcyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+IHsKK3B1Ymxp
YzoKKyAgICBTY29wZWRMYW1iZGEoUmVzdWx0VHlwZSAoKmltcGwpKHZvaWQqIGFyZywgQXJndW1l
bnRUeXBlcyYmLi4uKSA9IG51bGxwdHIsIHZvaWQqIGFyZyA9IG51bGxwdHIpCisgICAgICAgIDog
bV9pbXBsKGltcGwpCisgICAgICAgICwgbV9hcmcoYXJnKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgUmVzdWx0VHlwZSBvcGVyYXRvcigpKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gbV9pbXBsKG1fYXJnLCBzdGQ6OmZvcndhcmQ8QXJn
dW1lbnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlc3Vs
dFR5cGUgKCptX2ltcGwpKHZvaWQqIGFyZywgQXJndW1lbnRUeXBlcyYmLi4uKTsKKyAgICB2b2lk
ICptX2FyZzsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUg
RnVuY3Rvcj4gY2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJl
c3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+Citj
bGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pLCBG
dW5jdG9yPiA6IHB1YmxpYyBTY29wZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4u
Lik+IHsKK3B1YmxpYzoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBQYXNzZWRGdW5jdG9yPgorICAg
IFNjb3BlZExhbWJkYUZ1bmN0b3IoUGFzc2VkRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAgIDog
U2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPihpbXBsRnVuY3Rpb24s
IHRoaXMpCisgICAgICAgICwgbV9mdW5jdG9yKHN0ZDo6Zm9yd2FyZDxQYXNzZWRGdW5jdG9yPihm
dW5jdG9yKSkKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBSZXN1bHRUeXBl
IGltcGxGdW5jdGlvbih2b2lkKiBhcmd1bWVudCwgQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50
cykKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxTY29wZWRMYW1iZGFGdW5jdG9y
Kj4oYXJndW1lbnQpLT5tX2Z1bmN0b3IoCisgICAgICAgICAgICBzdGQ6OmZvcndhcmQ8QXJndW1l
bnRUeXBlcz4oYXJndW1lbnRzKS4uLik7CisgICAgfQorCisgICAgRnVuY3RvciBtX2Z1bmN0b3I7
Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+
CitTY29wZWRMYW1iZGFGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4gc2NvcGVkTGFtYmRh
KEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJldHVybiBTY29wZWRMYW1iZGFGdW5jdG9yPEZ1
bmN0aW9uVHlwZSwgRnVuY3Rvcj4oc3RkOjpmb3J3YXJkPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV1RGCisKK3VzaW5nIFdURjo6U2NvcGVkTGFtYmRhOwordXNpbmcg
V1RGOjpzY29wZWRMYW1iZGE7CisKKyNlbmRpZiAvLyBTY29wZWRMYW1iZGFfaAorCkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYv
U2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRU
YXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTc5LDYgKzc5LDExIEBAIHB1YmxpYzoKICAgICB7CiAg
ICAgfQogCisgICAgU2hhcmVkVGFza0Z1bmN0b3IoRnVuY3RvciYmIGZ1bmN0b3IpCisgICAgICAg
IDogbV9mdW5jdG9yKFdURjo6bW92ZShmdW5jdG9yKSkKKyAgICB7CisgICAgfQorCiBwcml2YXRl
OgogICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVudHMpIG92ZXJy
aWRlCiAgICAgewpAQCAtMTEwLDYgKzExNSwxMSBAQCBSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5
cGU+PiBjcmVhdGVTaGFyCiB7CiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1
bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9Cit0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFzazxGdW5j
dGlvblR5cGU+PiBjcmVhdGVTaGFyZWRUYXNrKEZ1bmN0b3ImJiBmdW5jdG9yKQoreworICAgIHJl
dHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rv
cj4oV1RGOjptb3ZlKGZ1bmN0b3IpKSk7Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264245</attachid>
            <date>2015-10-28 14:29:07 -0700</date>
            <delta_ts>2015-10-28 14:53:22 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>690152</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNjg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxMCBA
QAorMjAxNS0xMC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJj
ZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChX
VEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5o
OgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBh
dHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAg
ICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNCYXNp
Y0Jsb2NrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpCYXNpY0Js
b2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNp
Y0Jsb2NrOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpy
ZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpyZXBsYWNl
UHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cmVtb3ZlTm9wcyk6
CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2suaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6
OkIzOjpCYXNpY0Jsb2NrOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpl
bmQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6c2l6ZSk6CisgICAgICAgIChKU0M6
OkIzOjpCYXNpY0Jsb2NrOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpsYXN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnZhbHVlcyk6CisgICAgICAgIChKU0M6
OkIzOjpCYXNpY0Jsb2NrOjpudW1QcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QmFz
aWNCbG9jazo6cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cHJl
ZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmZyZXF1ZW5jeSk6Cisg
ICAgICAgIChKU0M6OkIzOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBCYXNpY0Jsb2NrRHVtcCk6
CisgICAgICAgIChKU0M6OkIzOjpEZWVwQmFzaWNCbG9ja0R1bXA6OmR1bXApOgorICAgICAgICAo
SlNDOjpCMzo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9ja0lubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmROZXcpOgorICAgICAg
ICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6bnVtU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIz
OjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6
c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9j
ayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MpOgorICAg
ICAgICAqIGIzL0IzQmFzaWNCbG9ja1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVtb3ZlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OnJlc2V0UmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6QjM6OmJsb2Nrc0luUHJlT3JkZXIp
OgorICAgICAgICAoSlNDOjpCMzo6YmxvY2tzSW5Qb3N0T3JkZXIpOgorICAgICAgICAqIGIzL0Iz
QmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lhbC5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAgICAoSlND
OjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hl
Y2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lh
bDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Zm9yRWFj
aEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIz
OjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lh
bDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVwRHVtcElt
cGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAqIGIz
L0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1ldGEpOgor
ICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NvbW1v
bi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6c2hvdWxkRHVtcElSKToKKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUkF0RWFjaFBoYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OnNo
b3VsZFZhbGlkYXRlSVIpOgorICAgICAgICAoSlNDOjpCMzo6c2hvdWxkVmFsaWRhdGVJUkF0RWFj
aFBoYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OnNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKToKKyAg
ICAgICAgKiBiMy9CM0NvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzNjRCaXQp
OgorICAgICAgICAoSlNDOjpCMzo6aXMzMkJpdCk6CisgICAgICAgICogYjMvQjNDb21tdXRhdGl2
aXR5LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAq
IGIzL0IzQ29tbXV0YXRpdml0eS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjp+Q29uc3QzMlZh
bHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6bmVnQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
MzJWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3QzMlZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpDb25zdDY0VmFsdWU6On5Db25zdDY0VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3Q2NFZhbHVlOjpuZWdDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6
OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAg
ICogYjMvQjNDb25zdDY0VmFsdWUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNDb25zdERvdWJs
ZVZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjp+
Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpu
ZWdDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAg
ICogYjMvQjNDb25zdERvdWJsZVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZh
bHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpDb25zdERv
dWJsZVZhbHVlKToKKyAgICAgICAgKiBiMy9CM0NvbnN0UHRyVmFsdWUuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpDb25zdFB0clZhbHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpD
b25zdFB0clZhbHVlOjpDb25zdFB0clZhbHVlKToKKyAgICAgICAgKiBiMy9CM0NvbnRyb2xWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29udHJvbFZhbHVlOjp+Q29udHJvbFZh
bHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAg
ICAqIGIzL0IzQ29udHJvbFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzRWZmZWN0cy5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6RWZmZWN0czo6ZHVtcCk6CisgICAgICAgICog
YjMvQjNFZmZlY3RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6RWZmZWN0czo6bXVzdEV4
ZWN1dGUpOgorICAgICAgICAqIGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNGcmVxdWVuY3lDbGFzcy5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW50ZWRCbG9jay5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiMy9CM0dlbmVyYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0
ZSk6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM0dl
bmVyYXRlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OkdlbmVy
aWNGcmVxdWVudGVkQmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jazo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVlbnRlZEJs
b2NrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxv
Y2s6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jazo6YmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6
ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OmR1
bXApOgorICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpIZWFwUmFuZ2U6OmR1bXApOgorICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpIZWFwUmFuZ2UpOgorICAgICAgICAoSlND
OjpCMzo6SGVhcFJhbmdlOjp0b3ApOgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkhlYXBSYW5nZTo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6SGVhcFJhbmdlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6OmVuZCk6
CisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6Om92ZXJsYXBzKToKKyAgICAgICAgKiBiMy9C
M0luZGV4TWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFw
KToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhNYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlND
OjpCMzo6SW5kZXhTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFp
bnMpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3Bl
cmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9y
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRl
cmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6Cisg
ICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6Oklu
ZGV4U2V0OjppbmRpY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAg
ICAgICAgKiBiMy9CM0luc2VydGlvblNldC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
SW5zZXJ0aW9uU2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldC5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAg
ICAgICAgKEpTQzo6QjM6Okluc2VydGlvblNldDo6Y29kZSk6CisgICAgICAgIChKU0M6OkIzOjpJ
bnNlcnRpb25TZXQ6OmFwcGVuZEluc2VydGlvbik6CisgICAgICAgIChKU0M6OkIzOjpJbnNlcnRp
b25TZXQ6Omluc2VydFZhbHVlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldElubGluZXMu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAg
ICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6Okxvd2VyVG9BaXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpydW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0bXApOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjplZmZlY3RpdmVBZGRyKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmxvYWRBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6aW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6aW1tT3JUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphcHBlbmRCaW5PcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFwcGVuZFN0b3JlQmluT3ApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjptb3ZlRm9yVHlwZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJlbGF4ZWRNb3ZlRm9yVHlwZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6QWRkcmVzc1NlbGVjdG9yKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRSb290KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRS
b290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxl
Y3Rvcjo6YWNjZXB0SW50ZXJuYWxzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHNMYXRlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5kcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6YWNjZXB0
T3BlcmFuZHNMYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVz
c1NlbGVjdG9yOjp0cnlBZGRTaGlmdDEpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeUFkZFNoaWZ0Mik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlEaXJlY3QpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphY2NlcHRSb290KToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YWNjZXB0Um9vdExhdGUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjphY2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRJbnRlcm5hbHNMYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YWNjZXB0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjphY2NlcHRPcGVyYW5kc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjp0cnlMb2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
dHJ5QWRkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QW5kKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5U3RvcmVBZGRMb2FkKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5U3RvcmVBbmRMb2FkKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5U3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjp0cnlUcnVuY0FyZ3VtZW50UmVnKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5VHJ1bmMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjp0cnlBcmd1bWVudFJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlD
b25zdDY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5SWRlbnRpdHkp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAg
ICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpN
ZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiMy9CM09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Omlz
Q2hlY2tNYXRoKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9y
aWdpbjo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgor
ICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpQYXRjaHBvaW50U3BlY2lhbCk6CisgICAgICAgIChK
U0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAg
KEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6
QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50
U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6
OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpkZWVwRHVt
cEltcGwpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDogQWRkZWQuCisgICAg
ICAgICogYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OlBhdGNocG9pbnRWYWx1ZTo6flBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQ
YXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1
ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyk6
CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSk6Cisg
ICAgICAgICogYjMvQjNQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQ
aGFzZVNjb3BlOjpQaGFzZVNjb3BlKToKKyAgICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6On5Q
aGFzZVNjb3BlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAg
ICogYjMvQjNQcm9jZWR1cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6flByb2NlZHVyZSk6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVP
cmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToK
KyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmF0KToKKyAgICAg
ICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpQ
cm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpp
dGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJh
dG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6
Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6Zmlu
ZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZh
bHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0
b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xs
ZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2V0TGFz
dFBoYXNlTmFtZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Omxhc3RQaGFzZU5hbWUp
OgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlByb2NlZHVyZTo6YWRkKToKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpyZWR1Y2VTdHJlbmd0aCk6CisgICAgICAgICog
YjMvQjNSZWR1Y2VTdHJlbmd0aC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdEtp
bmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvQjNTdGFja1Nsb3RLaW5kLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90VmFs
dWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjp+U3RhY2tT
bG90VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKToK
KyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2tTbG90VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpvZmZzZXRGcm9tRlApOgorICAg
ICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6OnNldE9mZnNldEZyb21GUCk6CisgICAgICAg
IChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6U3RhY2tTbG90VmFsdWUpOgorICAgICAgICAqIGIz
L0IzU3RhY2ttYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFj
a21hcCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6flN0YWNrbWFwKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrbWFwOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmNvbnN0cmFpbik6CisgICAgICAgIChK
U0M6OkIzOjpTdGFja21hcDo6cmVwcyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xv
YmJlcik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xvYmJlcmVkKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrbWFwOjpzZXRHZW5lcmF0b3IpOgorICAgICAgICAqIGIzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6
OlN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6On5T
dGFja21hcFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBv
cnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6ZXh0
cmFDbG9iYmVyZWRSZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9y
RWFjaEFyZ0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlk
SW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1w
bCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKToK
KyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAgICAg
KiBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0
aW9uOjpTdWNjZXNzb3JDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNv
bGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6
YXQpOgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0
b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9w
ZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JD
b2xsZWN0aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAqIGIzL0IzU3dpdGNoQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoQ2FzZTo6ZHVtcCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OmNhc2VWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNl
Ojp0YXJnZXQpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6dGFyZ2V0QmxvY2spOgor
ICAgICAgICAqIGIzL0IzU3dpdGNoVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OlN3aXRjaFZhbHVlOjp+U3dpdGNoVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnJlbW92ZUNhc2UpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmFwcGVuZENh
c2UpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0
Y2hWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphY2NlcHRz
KToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpudW1DYXNlVmFsdWVzKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpjYXNlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6
U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6
OmZhbGxUaHJvdWdoKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0
Y2hWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRl
cmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6
b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Oml0ZXJhdG9yOjpvcGVy
YXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpiZWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZW5kKToKKyAgICAgICAgKiBiMy9CM1R5cGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNUeXBl
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6aXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6
aXNGbG9hdCk6CisgICAgICAgIChKU0M6OkIzOjpwb2ludGVyVHlwZSk6CisgICAgICAgICogYjMv
QjNVcHNpbG9uVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6flVwc2lsb25WYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBN
ZXRhKToKKyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9u
VmFsdWU6OnBoaSk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OlVwc2lsb25WYWx1
ZSk6CisgICAgICAgICogYjMvQjNVc2VDb3VudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OlVzZUNvdW50czo6VXNlQ291bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6
flVzZUNvdW50cyk6CisgICAgICAgICogYjMvQjNVc2VDb3VudHMuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpVc2VDb3VudHM6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzVmFsaWRh
dGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OnZhbGlkYXRlKToKKyAgICAgICAgKiBi
My9CM1ZhbGlkYXRlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp+VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxh
Y2VXaXRoTm9wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjpkZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bmVnQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFkZENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjpzdWJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
ZWZmZWN0cyk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6cGVyZm9ybVN1YnN0aXR1dGlvbik6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OnR5cGVGb3IpOgorICAgICAgICAqIGIzL0IzVmFsdWUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXApOgor
ICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0NvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0lu
dCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnRQdHIpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50UHRyKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6Y29u
c3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6b2Zm
c2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2FpcjogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9B
aXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
OjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29uZCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
U3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp2
YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
OjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Jl
Zyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmcFRt
cEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVh
Y2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUluZGV4
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24pOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpC
YXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkZWVw
RHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgor
ICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2lj
QmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdpbik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVuZElu
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2lj
QmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6cHJl
ZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nv
cnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBCYXNp
Y0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVtcDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkND
YWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpp
c1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNTdGFj
ayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lz
dGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAgICog
YjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyQ29k
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
b2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICogYjMv
YWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5ld1Rt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJhbWVT
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9yW10p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tTbG90
c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29s
bGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHND
b2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHND
b2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3Rh
Y2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90
c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2luKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVuZCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlvbik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxz
Q29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNw
ZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNw
ZWNpYWxzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0TGFzdFBoYXNlTmFtZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Omxhc3RQaGFzZU5hbWUpOgorICAgICAgICAq
IGIzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdlbmVyYXRlKToK
KyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckdlbmVyYXRlZC5jcHA6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0aW9u
Q29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aGFuZGxlQ2FsbGVlU2F2ZXMpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlv
blNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjpJbnNl
cnRpb25TZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmNvZGUpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmFwcGVuZEluc2VydGlvbik6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5zZXJ0SW5zdCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBiMy9haXIv
QWlySW5zdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpkdW1wKToK
KyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zdDo6SW5zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Om9wY29kZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpGb3JFYWNoPFRtcD46OmZv
ckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpGb3JFYWNoPEFyZz46OmZvckVhY2gpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6SW5zdDo6aGFzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmV4
dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OnJlcG9ydFVz
ZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjppc1NoaWZ0VmFsaWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjppc0xzaGlmdDMyVmFsaWQpOgorICAgICAgICAqIGIzL2Fpci9B
aXJMaXZlbmVzcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Okxp
dmVuZXNzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OmxpdmVBdEhlYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6bGl2ZUF0VGFpbCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OkxvY2FsQ2FsYyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OmxpdmUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjp0YWtlTGl2ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OmV4ZWN1dGUpOgorICAgICAgICAqIGIzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlczogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGhhc2VTY29wZTo6UGhhc2VTY29w
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBoYXNlU2NvcGU6On5QaGFzZVNjb3BlKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIv
QWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpn
cHJzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6ZnByc0luUHJpb3Jp
dHlPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5Lmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8R1BSSW5mbz46OmluUHJpb3Jp
dHlPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlJlZ2lzdGVyc0luUHJpb3JpdHlPcmRl
cjxGUFJJbmZvPjo6aW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cmVn
c0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMvYWlyL0FpclNwZWNpYWwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6U3BlY2lhbCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlNwZWNpYWw6On5TcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3BlY2lhbDo6bmFtZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6OmR1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpkZWVwRHVtcCk6CisgICAgICAgICogYjMv
YWlyL0FpclNwZWNpYWwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBTcGVj
aWFsRHVtcDo6RGVlcFNwZWNpYWxEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFNw
ZWNpYWxEdW1wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6ZGVlcER1bXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6c3BpbGxFdmVyeXRoaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxF
dmVyeXRoaW5nLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmR1bXApOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3RhY2tTbG90OjpTdGFja1Nsb3QpOgorICAgICAgICAqIGIzL2Fpci9BaXJTdGFja1Nsb3QuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6Ynl0ZVNpemUpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmtpbmQpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTdGFja1Nsb3Q6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjphbGlnbm1lbnQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnZhbHVlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpvZmZzZXRGcm9tRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpEZWVwU3RhY2tTbG90RHVtcDo6RGVlcFN0YWNrU2xvdER1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwU3RhY2tTbG90RHVtcDo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZHVtcCk6CisgICAgICAgICogYjMv
YWlyL0FpclRtcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmdwVG1wRm9ySW5kZXgpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpUbXA6OmZwVG1wRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzR1ApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpUbXA6OmlzR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQUik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6Omdwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnByKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Omhhc1Rt
cEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEluZGV4KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6VG1wOjp0bXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNBbGl2ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Omhh
c2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjplbmNvZGVGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZW5jb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjplbmNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNF
bmNvZGVkR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEZQKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUFIpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzRW5jb2RlZEZQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNFbmNvZGVkR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEZQ
VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVHUFIpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUZQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6ZGVjb2RlR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUZQVG1w
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wSW5saW5l
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpUbXApOgorICAgICAgICAq
IGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp2
YWxpZGF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpclZhbGlkYXRlLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOiBBZGRlZC4KKyAgICAgICAgKiBiMy9nZW5l
cmF0ZV9wYXR0ZXJuX21hdGNoZXIucmI6IEFkZGVkLgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0NDIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExvYWQ0Mik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBZGRBcmdzKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RBZGRBcmdzMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3Jl
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RUcnVuYyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
QWRkMSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3RvcmVBZGRMb2FkKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RTdG9yZUFkZEFuZExvYWQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEFkZDFV
bmNvbW11dGVkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMb2FkT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RMb2FkT2Zmc2V0Tm90Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdExvYWRPZmZzZXRVc2luZ0FkZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TG9hZE9mZnNl
dFVzaW5nQWRkTm90Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKyAgICAgICAg
KHJ1bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzcGVjaWFsaXphdGlvbktpbmQpOgorICAgICAgICAq
IGppdC9SZWcuaDoKKyAgICAgICAgKEpTQzo6UmVnOjppbmRleCk6CisgICAgICAgIChKU0M6OlJl
Zzo6aXNTZXQpOgorICAgICAgICAoSlNDOjpSZWc6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAo
SlNDOjpSZWc6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UmVnOjpB
bGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OlJlZzo6
QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6UmVn
OjpBbGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6
UmVnOjpBbGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpT
Qzo6UmVnOjpBbGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6UmVnOjpBbGxSZWdzSXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnOjpB
bGxSZWdzSXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OlJlZzo6YWxsKToKKyAgICAgICAg
KEpTQzo6UmVnOjppbnZhbGlkKToKKyAgICAgICAgKEpTQzo6UmVnOjpvcGVyYXRvciEpOiBEZWxl
dGVkLgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHA6CisgICAgICAgIChK
U0M6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpSZWdpc3RlckF0T2Zmc2V0TGlzdCk6CisgICAgICAg
ICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyQXRP
ZmZzZXRMaXN0OjpjbGVhcik6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojpz
aXplKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmVuZCk6CisgICAgICAgICogaml0L1JlZ2lz
dGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6
Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpzZXRBbnkpOgorCiAyMDE1LTEw
LTI4ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWx0aW5zIGdl
bmVyYXRvciBzaG91bGQgZW1pdCBFTkFCTEUoRkVBVFVSRSkgZ3VhcmRzIGJhc2VkIG9uIEBjb25k
aXRpb25hbCBhbm5vdGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDYxIEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAKICAgICBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwCiAKKyAgICBiMy9haXIvQWlyQWxsb2Nh
dGVTdGFjay5jcHAKKyAgICBiMy9haXIvQWlyQXJnLmNwcAorICAgIGIzL2Fpci9BaXJCYXNpY0Js
b2NrLmNwcAorICAgIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCisgICAgYjMvYWlyL0FpckNv
ZGUuY3BwCisgICAgYjMvYWlyL0FpckdlbmVyYXRlLmNwcAorICAgIGIzL2Fpci9BaXJHZW5lcmF0
ZWQuY3BwCisgICAgYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAorICAgIGIzL2Fpci9B
aXJJbnNlcnRpb25TZXQuY3BwCisgICAgYjMvYWlyL0Fpckluc3QuY3BwCisgICAgYjMvYWlyL0Fp
clBoYXNlU2NvcGUuY3BwCisgICAgYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCisgICAg
YjMvYWlyL0FpclNwZWNpYWwuY3BwCisgICAgYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAK
KyAgICBiMy9haXIvQWlyU3RhY2tTbG90LmNwcAorICAgIGIzL2Fpci9BaXJUbXAuY3BwCisgICAg
YjMvYWlyL0FpclZhbGlkYXRlLmNwcAorCisgICAgYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAor
ICAgIGIzL0IzQmFzaWNCbG9jay5jcHAKKyAgICBiMy9CM0NoZWNrU3BlY2lhbC5jcHAKKyAgICBi
My9CM0NoZWNrVmFsdWUuY3BwCisgICAgYjMvQjNDb21tb24uY3BwCisgICAgYjMvQjNDb21tdXRh
dGl2aXR5LmNwcAorICAgIGIzL0IzQ29uc3QzMlZhbHVlLmNwcAorICAgIGIzL0IzQ29uc3Q2NFZh
bHVlLmNwcAorICAgIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKKyAgICBiMy9CM0NvbnRyb2xW
YWx1ZS5jcHAKKyAgICBiMy9CM0VmZmVjdHMuY3BwCisgICAgYjMvQjNGcmVxdWVuY3lDbGFzcy5j
cHAKKyAgICBiMy9CM0dlbmVyYXRlLmNwcAorICAgIGIzL0IzSGVhcFJhbmdlLmNwcAorICAgIGIz
L0IzSW5zZXJ0aW9uU2V0LmNwcAorICAgIGIzL0IzTG93ZXJUb0Fpci5jcHAKKyAgICBiMy9CM01l
bW9yeVZhbHVlLmNwcAorICAgIGIzL0IzT3Bjb2RlLmNwcAorICAgIGIzL0IzT3JpZ2luLmNwcAor
ICAgIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCisgICAgYjMvQjNQYXRjaHBvaW50VmFsdWUu
Y3BwCisgICAgYjMvQjNQaGFzZVNjb3BlLmNwcAorICAgIGIzL0IzUHJvY2VkdXJlLmNwcAorICAg
IGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisgICAgYjMvQjNTdGFja21hcC5jcHAKKyAgICBiMy9C
M1N0YWNrbWFwU3BlY2lhbC5jcHAKKyAgICBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwCisgICAgYjMv
QjNTdGFja1Nsb3RWYWx1ZS5jcHAKKyAgICBiMy9CM1N3aXRjaENhc2UuY3BwCisgICAgYjMvQjNT
d2l0Y2hWYWx1ZS5jcHAKKyAgICBiMy9CM1R5cGUuY3BwCisgICAgYjMvQjNVcHNpbG9uVmFsdWUu
Y3BwCisgICAgYjMvQjNVc2VDb3VudHMuY3BwCisgICAgYjMvQjNWYWxpZGF0ZS5jcHAKKyAgICBi
My9CM1ZhbHVlLmNwcAorICAgIGIzL0IzVmFsdWVSZXAuY3BwCisKICAgICBiaW5kaW5ncy9TY3Jp
cHRGdW5jdGlvbkNhbGwuY3BwCiAgICAgYmluZGluZ3MvU2NyaXB0T2JqZWN0LmNwcAogICAgIGJp
bmRpbmdzL1NjcmlwdFZhbHVlLmNwcApAQCAtMTI3NCw0ICsxMzI5LDQgQEAgZW5kaWYgKCkKICMg
Rm9yY2Ugc3RhZ2luZyBvZiBzaGFyZWQgc2NyaXB0cywgZXZlbiBpZiB0aGV5IGFyZW4ndCBkaXJl
Y3RseSB1c2VkIHRvIGJ1aWxkIEphdmFTY3JpcHRDb3JlLgogCiBhZGRfY3VzdG9tX3RhcmdldChz
dGFnZVNoYXJlZFNjcmlwdHMgREVQRU5EUyAke0phdmFTY3JpcHRDb3JlX1NDUklQVFN9KQotYWRk
X2RlcGVuZGVuY2llcyhKYXZhU2NyaXB0Q29yZSBzdGFnZVNoYXJlZFNjcmlwdHMpClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQorYWRkX2RlcGVuZGVuY2llcyhKYXZhU2NyaXB0Q29yZSBzdGFn
ZVNoYXJlZFNjcmlwdHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgVlBBVEggPSBc
CiAKIFBZVEhPTiA9IHB5dGhvbgogUEVSTCA9IHBlcmwKK1JVQlkgPSBydWJ5CiAKIEphdmFTY3Jp
cHRDb3JlX1NDUklQVFNfRElSID0gJChKYXZhU2NyaXB0Q29yZSkvU2NyaXB0cwogCkBAIC01OSw2
ICs2MCw5IEBAIGFsbCA6IFwKICAgICBMZXhlci5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5o
IFwKICAgICBSZWdFeHBKaXRUYWJsZXMuaCBcCisgICAgQjNMb3dlcmluZ01hdGNoZXIuaCBcCisg
ICAgQjNBZGRyZXNzTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBcCiAjCiAKICMgSmF2YVNj
cmlwdCBidWlsdGlucy4KQEAgLTI2Miw2ICsyNjYsMTQgQEAgSU5QVVRfR0VORVJBVE9SX1NQRUNJ
RklDQVRJT05TID0gXAogSlNSZXBsYXlJbnB1dHMuaCA6ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJ
RklDQVRJT05TKSAkKElOUFVUX0dFTkVSQVRPUl9TQ1JJUFRTKQogCSQoUFlUSE9OKSAkKEphdmFT
Y3JpcHRDb3JlKS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5IC0t
b3V0cHV0RGlyIC4gLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgJChJTlBVVF9HRU5FUkFUT1Jf
U1BFQ0lGSUNBVElPTlMpCiAKK0IzTG93ZXJpbmdNYXRjaGVyLmg6ICQoSmF2YVNjcmlwdENvcmUp
L2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9CM0xv
d2VyaW5nTWF0Y2hlci5wYXR0ZXJucworCSQoUlVCWSkgJF4gCitCM0FkZHJlc3NNYXRjaGVyLmg6
ICQoSmF2YVNjcmlwdENvcmUpL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXgorCitB
aXJPcGNvZGUuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIg
JChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgor
CiAjIER5bmFtaWNhbGx5LWRlZmluZWQgdGFyZ2V0cyBhcmUgbGlzdGVkIGJlbG93LiBTdGF0aWMg
dGFyZ2V0cyBiZWxvbmcgdXAgdG9wLgogCiBhbGwgOiBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDYgKzI1LDcgQEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2ll
cyA9ICgKKwkJCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKIAkJCQk1RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKIAkJCQk1RDZCMkE1MTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKIAkJCQk1RDZCMkE1NTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKQEAgLTY4NSw2ICs2ODYsMTMxIEBACiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsK
IAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdKSVRDb2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBN
YWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICov
OyB9OworCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovOyB9OworCQkwRkVD
ODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNTFCREFDREFDMDA4MEZG
NzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTAwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5j
cHAgKi87IH07CisJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MDIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2tJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmgg
Ki87IH07CisJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZFQzg1MDUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi87IH07CisJ
CTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJGMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi87IH07CisJCTBGRUM4
NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHku
aCAqLzsgfTsKKwkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMz
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTBF
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3QzMlZhbHVlLmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDNTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVDODUxMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
RG91YmxlVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmgg
Ki87IH07CisJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDOTFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxNDFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnRyb2xWYWx1ZS5oICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVx
dWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi87
IH07CisJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQzFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9OworCQkwRkVDODUxNzFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Zy
ZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNH
ZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBG
RUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5oICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFw
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRE
MTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9OworCQkwRkVDODUxQzFCREFD
REFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQu
aCAqLzsgfTsKKwkJMEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMzFC
REFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsKKwkJMEZFQzg1MUUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJU
b0Fpci5oICovOyB9OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyog
QjNNZW1vcnlWYWx1ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNP
cGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1
MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNv
ZGUuaCAqLzsgfTsKKwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ5MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBGRUM4NTI0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi87IH07
CisJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1
MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTI3MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRj
aHBvaW50VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovOyB9
OworCQkwRkVDODUyOTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERGMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVDODUyQTFCREFDREFDMDA4
MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmgg
Ki87IH07CisJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMTFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkwRkVDODUyQzFCREFDREFD
MDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovOyB9OworCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
MzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4
NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2ttYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87IH07CisJCTBGRUM4NTMw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFCREFDREFDMDA4MEZGNzQg
LyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUzMTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oICovOyB9OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RL
aW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovOyB9OworCQkw
RkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFOTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi87IH07CisJCTBG
RUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsKKwkJMEZFQzg1MzcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0
Y2hDYXNlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNo
Q2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovOyB9OworCQkwRkVDODUz
OTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRGMDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovOyB9Owor
CQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1R5cGUuY3BwICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
MjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBGRUM4NTNEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovOyB9OworCQkwRkVD
ODUzRjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXNlQ291bnRzLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKKwkJMEZF
Qzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1
NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuY3BwICovOyB9OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1NDUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMu
aCAqLzsgfTsKKwkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkwRkVDODU0NzFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAq
LzsgfTsKKwkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDgx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovOyB9OworCQkwRkVDODU2
RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFsbG9jYXRlU3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFyZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5o
ICovOyB9OworCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QzFC
REFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTcyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFz
aWNCbG9jay5oICovOyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxT
cGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovOyB9Owor
CQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTc1MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLzsgfTsK
KwkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDb2RlLmggKi87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVx
dWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLzsg
fTsKKwkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUzMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTc5MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi87
IH07CisJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTUx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi87IH07CisJCTBGRUM4
NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NjFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9OworCQkwRkVDODU3QzFCREFD
REM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJIYW5kbGVDYWxsZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQg
LyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
Y3BwICovOyB9OworCQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1
OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBGRUM4NTdG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmgg
Ki87IH07CisJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUQxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4NTgzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTg1MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmggKi87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVj
aWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1
ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
cGVjaWFsLmggKi87IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2
ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi87
IH07CisJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY1MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsgfTsKKwkJMEZFQzg1OEIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWly
U3RhY2tTbG90LmNwcCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0
YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovOyB9OworCQkwRkVD
ODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJU
bXAuY3BwICovOyB9OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2OTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICov
OyB9OworCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1OTExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAq
LzsgfTsKKwkJMEZFQzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU5MjFCREIx
RTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLzsgfTsKKwkJMEZFQzg1QTMxQkRCNUNG
MTAwODBGRjc0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZv
dW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQkwRkVDODVBNDFCREI1Q0YxMDA4MEZGNzQgLyog
SmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRD
b3JlLmZyYW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3Ri
My5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLzsgfTsKKwkJMEZFQzg1QjMxQkRF
RDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29u
c3RQdHJWYWx1ZS5oICovOyB9OworCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNl
cnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1QjQxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsK
KwkJMEZFQzg1QkExQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCNTFCRTE0NjJGMDA4
MEZGNzQgLyogQjNJbnNlcnRpb25TZXQuaCAqLzsgfTsKKwkJMEZFQzg1QkIxQkUxNDYyRjAwODBG
Rjc0IC8qIEIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0
aW9uU2V0SW5saW5lcy5oICovOyB9OworCQkwRkVDODVCQzFCRTE0NjJGMDA4MEZGNzQgLyogQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODVCNzFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAg
Ki87IH07CisJCTBGRUM4NUJEMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCODFC
RTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oICovOyB9OworCQkwRkVDODVDMTFC
RTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3Rz
LmggKi87IH07CisJCTBGRUM4NUMyMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCRjFC
RTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovOyB9OworCQkwRkVDODVDMzFCRTE2
N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5n
ZS5oICovOyB9OworCQkwRkVDODVDNTFCRTE2RjVBMDA4MEZGNzQgLyogQjNFZmZlY3RzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUM0MUJF
MTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwICovOyB9OwogCQkwRkVENjdCOTFCMjYyNTZE
MDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAv
KiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkVENjdCQTFCMjYyNTZE
MDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCODFCMjYyNTZEMDA2NkNFMTUgLyog
REZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi87IH07CiAJCTBGRUU5ODQxMUE4ODY1QjcwMDc1
NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFyYXJn
c0ZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE4MzksNiArMTk2NSwxMyBAQAogCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRkNFRkFC
NTE4MDVENjE2MDA0NzJDRTQ7CiAJCQlyZW1vdGVJbmZvID0gbGx2bUZvckpTQzsKIAkJfTsKKwkJ
MEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
KwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IDA4
NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlw
ZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3
NDsKKwkJCXJlbW90ZUluZm8gPSB0ZXN0YjM7CisJCX07CiAJCTBGRjkyMkQyMTRGNDZCMkYwMDQx
QTI0RSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFD
MDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTgwLDYgKzI3MTMsMTMwIEBACiAJCTBGRUEw
QTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdK
SVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyog
QjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNTFCREFDREFDMDA4MEZG
NzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrLmg7IHBh
dGggPSBiMy9CM0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrVXRpbHMuaDsgcGF0aCA9IGIzL0IzQmFz
aWNCbG9ja1V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNCbG9ja1dvcmtsaXN0Lmg7IHBhdGggPSBiMy9CM0Jsb2NrV29ya2xpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQ2hlY2tTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q2hlY2tTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tT
cGVjaWFsLmg7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNDaGVja1ZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M0NvbW1vbi5jcHA7IHBhdGggPSBiMy9CM0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbW1vbi5oOyBwYXRoID0gYjMvQjNDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0NvbW11dGF0aXZpdHkuY3BwOyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29tbXV0YXRpdml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Nv
bW11dGF0aXZpdHkuaDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb25zdDMyVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDMyVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdDMyVmFsdWUuaDsgcGF0aCA9
IGIzL0IzQ29uc3QzMlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0Nv
bnN0NjRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM2MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdDY0VmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZhbHVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDOTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb250cm9sVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNDb250cm9sVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb250cm9sVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjND
b250cm9sVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb250cm9s
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3Mu
Y3BwOyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3MuaDsgcGF0
aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9C
M0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRD
RTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM0dlbmVyYXRlLmNwcDsgcGF0aCA9IGIzL0IzR2VuZXJhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQg
LyogQjNHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVy
YXRlLmg7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljRnJlcXVlbnRlZEJs
b2NrLmg7IHBhdGggPSBiMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbmRleE1hcC5oOyBwYXRoID0g
YjMvQjNJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREMjFC
REFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0luZGV4U2V0Lmg7IHBhdGggPSBiMy9CM0luZGV4U2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9B
aXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNMb3dlclRvQWly
LmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlclRvQWlyLmg7IHBhdGggPSBiMy9CM0xv
d2VyVG9BaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTWVtb3J5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNN
ZW1vcnlWYWx1ZS5oOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcGNvZGUuY3BwOyBwYXRoID0g
YjMvQjNPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREODFC
REFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNPcGNvZGUuaDsgcGF0aCA9IGIzL0IzT3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbi5jcHA7IHBhdGggPSBi
My9CM09yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM09yaWdpbi5oOyBwYXRoID0gYjMvQjNPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRjaHBvaW50
U3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBv
aW50U3BlY2lhbC5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRj
aHBvaW50VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRj
aHBvaW50VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBv
aW50VmFsdWUuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQaGFzZVNjb3BlLmNw
cDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQaGFzZVNjb3BlLmg7IHBhdGggPSBiMy9CM1BoYXNl
U2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzUHJvY2VkdXJlLmNwcDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJv
Y2VkdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlLmg7
IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlSW5saW5lcy5oOyBwYXRoID0gYjMv
QjNQcm9jZWR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXAuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrbWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3Rh
Y2ttYXAuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmNw
cDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmg7IHBh
dGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5oOyBwYXRoID0gYjMvQjNTdGFj
a1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNTdGFja1Ns
b3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0IzU3VjY2Vzc29yQ29sbGVj
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRDFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzU3dpdGNoQ2FzZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNT
d2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoQ2Fz
ZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuY3BwOyBwYXRoID0g
YjMvQjNTd2l0Y2hWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuaDsgcGF0aCA9IGIzL0IzU3dpdGNoVmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1R5
cGUuY3BwOyBwYXRoID0gYjMvQjNUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1R5cGUuaDsgcGF0aCA9IGIzL0IzVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNVcHNpbG9u
VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVcHNpbG9uVmFsdWUuaDsgcGF0
aCA9IGIzL0IzVXBzaWxvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1VzZUNvdW50cy5jcHA7IHBhdGggPSBiMy9CM1VzZUNv
dW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1VzZUNvdW50cy5oOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWxpZGF0ZS5jcHA7IHBh
dGggPSBiMy9CM1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNWYWxpZGF0ZS5oOyBwYXRoID0gYjMvQjNWYWxpZGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1ZhbHVlLmg7IHBhdGggPSBiMy9CM1ZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlSW5saW5lcy5o
OyBwYXRoID0gYjMvQjNWYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZVJlcC5jcHA7IHBhdGggPSBiMy9CM1Zh
bHVlUmVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNWYWx1ZVJlcC5oOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVN0
YWNrLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRl
U3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFj
ay5oOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBcmcuY3BwOyBwYXRoID0gYjMvYWly
L0FpckFyZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyQXJnLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJhc2ljQmxvY2suY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmg7IHBhdGggPSBiMy9haXIvQWly
QmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0RTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ0Nh
bGxTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJDQ2FsbFNwZWNp
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTAxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNvZGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJD
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUyMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9haXIvQWlyRnJlcXVlbnRlZEJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWly
R2VuZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGUu
aDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsg
cGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU5MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlySW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckluc3QuY3Bw
OyBwYXRoID0gYjMvYWlyL0Fpckluc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlySW5zdElu
bGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3MuaDsgcGF0aCA9IGIz
L2Fpci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1
RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQ
aGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlyUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlU2NvcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQ
cmlvcml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpclJlZ2lzdGVyUHJpb3JpdHkuaDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEFpclNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNwZWNpYWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGVj
aWFsLmg7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwaWxsRXZlcnl0aGlu
Zy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZl
cnl0aGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xv
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTdGFja1Nsb3Qu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tTbG90Lmg7IHBhdGggPSBiMy9h
aXIvQWlyU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY4
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyVG1wLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJUbXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1w
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRtcC5oOyBwYXRoID0gYjMv
YWlyL0FpclRtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJUbXBJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyVG1wSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyog
QWlyVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
VmFsaWRhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpclZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclZhbGlkYXRlLmg7IHBhdGgg
PSBiMy9haXIvQWlyVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1OTIxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZWQuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckdlbmVyYXRlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NUFEMUJE
QjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RiMzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKKwkJMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0YjMuY3BwOyBwYXRoID0gYjMvdGVzdGIzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0
IC8qIEIzQ29uc3RQdHJWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0NvbnN0UHRyVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3RQdHJWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRp
b25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNJbnNlcnRp
b25TZXQuY3BwOyBwYXRoID0gYjMvQjNJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODVCNTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbnNlcnRpb25TZXQuaDsgcGF0
aCA9IGIzL0IzSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NUI2MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbnNlcnRpb25TZXRJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM0luc2VydGlvblNldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5jcHA7IHBh
dGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5oOyBwYXRoID0gYjMv
QjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODVC
RTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNFZmZlY3RzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5n
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0hlYXBSYW5nZS5j
cHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5oOyBwYXRoID0gYjMvQjNIZWFwUmFu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1QzQxQkUxNkY1QTAwODBG
Rjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3RzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9p
c3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdD
b25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I4MUIyNjI1NkQw
MDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZH
Q29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZhcmFyZ3NGcmFtZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzgwMSw2ICs0MDU4LDE1IEBACiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCTBGRUM4NUEyMUJEQjVDRjEw
MDgwRkY3NCAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJ
CQkJMEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZy
YW1ld29ya3MgKi8sCisJCQkJMEZFQzg1QTQxQkRCNUNGMTAwODBGRjc0IC8qIEphdmFTY3JpcHRD
b3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNjE0RjQ2QjEzMDA0MUEy
NEUgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNl
OwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTM4NzAsNiArNDEzNiw3IEBA
CiAJCQkJMTQxMjExMjAwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5
QkYwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCiAJCQkJNjUxMTIzMDUxNDA0NkE0QzAw
MkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8q
IHRlc3RiMyAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMzg5MCw2ICs0MTU3LDcgQEAKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBG
RjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRD
QUQ0MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBh
c3NlbWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovLAogCQkJ
CUE1NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBiaW5kaW5ncyAqLywKIAkJCQlBN0Q4MDE5RjE4
ODBENjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFG
NjgxIC8qIGJ5dGVjb2RlICovLApAQCAtNDEwMyw2ICs0MzcxLDE0NCBAQAogCQkJbmFtZSA9IGZ0
bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRUM4NEIyMUJEQUNENUUw
MDgwRkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKKwkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0
QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJMEZFQzg0Qjcx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NEI4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8sCisJCQkJMEZFQzg0QkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGRUM4NEJCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0QkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0QkQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QkUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29t
bW9uLmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5jcHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5oICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgKi8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLywK
KwkJCQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oICov
LAorCQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8s
CisJCQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggKi8sCisJ
CQkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8sCisJCQkJMEZF
Qzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oICovLAorCQkJCTBGRUM4NENCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKKwkJCQkwRkVDODRDQzFC
REFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovLAorCQkJCTBGRUM4NENEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NENFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODRDRjFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODVCRjFCRTE2N0Ew
MDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovLAorCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5oICovLAorCQkJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0luZGV4TWFwLmggKi8sCisJCQkJMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5k
ZXhTZXQuaCAqLywKKwkJCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25T
ZXQuY3BwICovLAorCQkJCTBGRUM4NUI1MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNl
dC5oICovLAorCQkJCTBGRUM4NUI2MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElu
bGluZXMuaCAqLywKKwkJCQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWly
LmNwcCAqLywKKwkJCQkwRkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmgg
Ki8sCisJCQkJMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICov
LAorCQkJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggKi8sCisJ
CQkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLywKKwkJCQkwRkVD
ODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLywKKwkJCQkwRkVDODREOTFCREFD
REFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovLAorCQkJCTBGRUM4NERBMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM09yaWdpbi5oICovLAorCQkJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQg
LyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8sCisJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Byb2NlZHVyZS5jcHAgKi8sCisJCQkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJv
Y2VkdXJlLmggKi8sCisJCQkJMEZFQzg0RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJl
SW5saW5lcy5oICovLAorCQkJCTBGRUM4NUI3MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0
cmVuZ3RoLmNwcCAqLywKKwkJCQkwRkVDODVCODFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VT
dHJlbmd0aC5oICovLAorCQkJCTBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFw
LmNwcCAqLywKKwkJCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICov
LAorCQkJCTBGRUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAg
Ki8sCisJCQkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmgg
Ki8sCisJCQkJMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAg
Ki8sCisJCQkJMEZFQzg0RTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICov
LAorCQkJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICov
LAorCQkJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24u
aCAqLywKKwkJCQkwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAq
LywKKwkJCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8sCisJ
CQkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovLAorCQkJ
CTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8sCisJCQkJMEZF
Qzg0RjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgKi8sCisJCQkJMEZFQzg0RjIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovLAorCQkJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVXBzaWxvblZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXNlQ291bnRzLmNwcCAqLywKKwkJCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNV
c2VDb3VudHMuaCAqLywKKwkJCQkwRkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0
ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAq
LywKKwkJCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGQjFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLywKKwkJCQkwRkVDODRGQzFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8sCisJCQkJMEZFQzg0RkQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLywKKwkJCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQg
LyogdGVzdGIzLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0gYjM7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OworCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODU0ODFCREFD
REM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi8sCisJCQkJMEZFQzg1NDkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLywKKwkJCQkwRkVDODU0QTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLywKKwkJCQkwRkVDODU0QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmggKi8sCisJCQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJh
c2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmggKi8sCisJCQkJMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3Bl
Y2lhbC5jcHAgKi8sCisJCQkJMEZFQzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3Bl
Y2lhbC5oICovLAorCQkJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAq
LywKKwkJCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBG
RUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkw
RkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4
NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NTkyMUJE
QjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovLAorCQkJCTBGRUM4NTU1MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovLAorCQkJCTBGRUM4NTU2MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgKi8sCisJCQkJMEZFQzg1
NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8sCisJCQkJMEZF
Qzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZF
Qzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovLAorCQkJCTBGRUM4
NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLywKKwkJCQkwRkVDODU1QjFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovLAorCQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnN0SW5saW5lcy5oICovLAorCQkJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQ
aGFzZVNjb3BlLmNwcCAqLywKKwkJCQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhh
c2VTY29wZS5oICovLAorCQkJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmNwcCAqLywKKwkJCQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVn
aXN0ZXJQcmlvcml0eS5oICovLAorCQkJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
cGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lh
bC5oICovLAorCQkJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwICovLAorCQkJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaCAqLywKKwkJCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90
LmNwcCAqLywKKwkJCQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90Lmgg
Ki8sCisJCQkJMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8sCisJCQkJ
MEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovLAorCQkJCTBGRUM4NTZBMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1NkIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRkVDODU2QzFCREFDREM3MDA4
MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLywKKwkJCSk7CisJCQluYW1lID0gYWlyOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMEZGNDI3MkUxNThFQkNDRTAwNENCOUZGIC8q
IGRpc2Fzc2VtYmxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CkBAIC02MDg5LDYgKzY0OTUsNyBAQAogCQkJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBB
Ym9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0NzEw
IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVGMEY1
MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxs
YmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNTBFMTZGNUNEMDBCMzQ0
NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTE3LDggKzY1MjQsMTAgQEAKIAkJ
CQlBNUVBNzBFODE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQg
LyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRC
OEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRl
Z2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAg
LyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjAxODJCN0EwNDAw
RjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE1MTg4MEQ2
NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjEz
Myw2ICs2NTQyLDcgQEAKIAkJCQk5OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNf
bW9kZWwucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNTFCRDU5OTMxMDBGNDU3NUMgLyog
YnVpbHRpbnNfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERUExMzIxQjlGMzE2
MzAwNkQ2NUREIC8qIEJ1aWx0aW5VdGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
RTcyOTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjE0Myw2ICs2NTUzLDcgQEAKIAkJCQkwRjJERDgwQjFBQjNEODU4MDBC
QkI4RTggLyogQnl0ZWNvZGVLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
c0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAw
OThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNC
RTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNF
QTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNzYs
OSArNjU4NywxMSBAQAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTgxODU2QTQ4OTAwMkVENjkyIC8qIENvbWJpbmVk
RG9tYWlucy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYw
IC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODVCQTFCRTE0
NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVG
MTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFj
dEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUEzQTgxNzk3NDMyRDAw
RTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNG
NDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2
QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MTg2LDggKzY1OTksMTAgQEAKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQg
LyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRUExNzQ4OTZD
NzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNTNDRTA4QTE4QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAwNjMzMjMxIC8qIENvbnNv
bGVNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxOTFCREEwNjgwMDAzMzFCODQg
LyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDg2MThC
QzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTYy
MDIsNiArNjYxNyw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJs
b2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEy
IC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAyRDE0QTNDNkUwMDA1
NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
NDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0Mx
MUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAq
LywKQEAgLTYyMTMsNiArNjYyOSw3IEBACiAJCQkJOTk1OUU5MkIxQkQxN0ZBNDAwMUFBNDEzIC8q
IGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAv
KiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENE
NkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNDFC
REFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02MjMzLDYgKzY2NTAsNyBAQAogCQkJCUE3MDREOTAzMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0
cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MDFCREFDREM3MDA4MEZGNzQg
LyogQWlyQXJnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0Iy
RTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjQzLDcgKzY2NjEs
OSBAQAogCQkJCTBGMkREODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzIyMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdB
cml0aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAv
KiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8q
IERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTMxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjUzLDYg
KzY2NzMsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2Vy
dGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8q
IERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3
MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyRDFC
REFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAwMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dv
cmtsaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyOTIsOCArNjcxMywxMCBAQAogCQkJCTBGNjZF
MTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5
QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VVc2VzU3RydWN0dXJlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERG
R0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyog
REZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtNjMyMyw2ICs2NzQ2LDcgQEAKIAkJCQk2MkYyQUEzODFCMEJF
REUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk4
MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5
QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NjFCREFDREM3MDA4MEZGNzQgLyog
QWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjMzMSw2ICs2NzU1LDcgQEAKIAkJ
CQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERGR01pbmlmaWVkSUQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENEODkxMCAvKiBERkdNaW5pZmll
ZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzYxQURGMDkwMTAwRUQ3
OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjJD
RDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzQ5LDYgKzY3NzQsNyBAQAogCQkJCTBGQzA5NzZBMTQ2
OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJF
QzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Ns
b3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8q
IERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBG
QzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzNjYsNiArNjc5Miw4IEBACiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2
IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQTFC
RkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdS
ZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdG
OCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQzMTdBMEJCRkQw
MEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTYzOTAsNiAr
NjgxOCw3IEBACiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNr
SW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzJBMTdENTFGNTcwMENB
MkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdF
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMxREIxMjAwODJDNUU4IC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjQwMSw2ICs2ODMwLDcgQEAK
IAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkxNTIyODA5NjAw
Q0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM4
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lz
dGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxODFCREEwNjgw
MDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLApA
QCAtNjQwOSw2ICs2ODM5LDcgQEAKIAkJCQkwRkUwNTAxODFBQTkwOTExMDBEMzNCMzMgLyogRGly
ZWN0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxNjFBQTkwOTExMDBEMzNC
MzMgLyogRGlyZWN0QXJndW1lbnRzT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjcz
MTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0NDdFRTE3QTBCRDcwMDBGNTg5OEUgLyogRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJBODM2Mzg2MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyNDE4QTFCMjU5MDAyNkQ4OEYgLyogRW1wdHlJ
bnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDMxLDYgKzY4NjIsNyBAQAogCQkJCTBG
NTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJl
c3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVB
QjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1
RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5MSw2ICs2
OTIzLDcgQEAKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53
aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8q
IEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NzFCREFDREM3
MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVB
NjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4g
SGVhZGVycyAqLywKQEAgLTY0OTgsOCArNjkzMSwxMCBAQAogCQkJCTJBODM2MzhBMThEN0QwRkUw
MDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTBGQjE5NzRBRTYxMDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRC
RkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlv
blJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTY1MzgsNiArNjk3Myw3
IEBACiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJp
Y0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUExQUE5MDkxMTAwRDMzQjMz
IC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUw
QTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1
MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTYzLDYgKzY5OTksNyBAQAog
CQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZh
bHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0
NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNkRERUExOERBNDRBQjAw
QTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3
NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywK
QEAgLTY2MTYsNiArNzA1Myw3IEBACiAJCQkJQTFCOUUyM0MxQjRFMEQ2NzAwQkM3RkVEIC8qIElu
dGxDb2xsYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgxOTNFMzFCNEUw
Q0RCMDBGQzEwMjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVx
dWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQxQjRFMENEQjAwRkMxMDI5
IC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3
RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUExNTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ2LDYgKzcwODQsNyBAQAogCQkJCTBGMjRF
NTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklU
VGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyog
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjY1Niw5ICs3MDk1LDExIEBACiAJCQkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQ
dHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCREFFQ0Ix
N0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OEIxNDE4NkQxQjYyNTI3RjAwRkIyMDY4IC8qIEpTQXJyb3dGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBK
U0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjY3NSw2ICs3MTE2LDggQEAKIAkJ
CQk4NjVBMzBGMTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNTNDRTA4ODE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxRTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRv
QWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBB
IC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNThDMDI0MjE4
RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NjkwLDYgKzcxMzMsNyBAQAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxh
clZNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNE
b2xsYXJWTVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTY3MDAsMTEgKzcxNDQsMTMgQEAKIAkJCQkwRjJCNjZGMTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MzkxN0U3QjFCNzkwNkZBMDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY2MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVG
RDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmpl
Y3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MzUsNiArNzE4MSw3IEBACiAJ
CQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThC
N0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzY0LDYg
KzcyMTEsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3Ry
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNT
dHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzRTFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3
REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjAw
QjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02Nzk1LDYgKzcyNDMsNyBAQAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAv
KiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJC
OTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NUJCMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNl
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAv
KiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIxLDkg
KzcyNzAsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNlcHRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJ
bnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3
MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBB
NTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURp
c2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0
IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTY4MzYsMTIgKzcyODcsMTQgQEAK
IAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxl
ckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyog
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4
OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUwNDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJp
bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8qIE1h
Y3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBG
ODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1
MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2
NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2
RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjcsMTIgKzczMjAs
MTQgQEAKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5h
dGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQyMTFCOTAxM0RF
MDAzNDZCNTIgLyogTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9kZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI4MThBMUIyNTkwMDI2RDg4RiAvKiBOb25kZXRlcm1p
bmlzdGljSW5wdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDIwRTE2
RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NDMwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlck9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1QzMxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ0NDBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVyUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJEMzkzOTEwM0U0NTYwMDA3RENCNTIgLyogTnVtZXJp
Y1N0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTBDMTlGNkRFODIwMDk4RjVFQyAv
KiBvYmpjX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLApAQCAtNjg4Nyw2ICs3MzQyLDcgQEAK
IAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkx
MCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4
OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2
RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtNjkwMCwxMyAr
NzM1NiwxOCBAQAogCQkJCTBGRjlDRTc0MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0Fj
Y2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2
QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NUJEMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVu
Z3RoLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJp
dmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYw
IC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4
RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZG
NUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1
MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRl
Y29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZG
NzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3
MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25L
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJv
ZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MjgsMTAgKzczODks
MTMgQEAKIAkJCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvdGVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlw
ZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJE
OSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZG
RDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODAx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTNCNEFB
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTUyLDYgKzc0MTYsNyBAQAogCQkJCTBGQzMxNDEy
MTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3
RDIzRUUxODkxQjU1NDAwMzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUyNjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUlu
c3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8q
IFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RjAx
ODIzNDVBRjAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjk1OSw2ICs3NDI0LDcgQEAKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkg
LyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
NEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzBCMEE5RDExQTlCNjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTY5ODgsNiArNzQ1NCw3IEBACiAJCQkJQTcwOUYyRjAxN0Ew
QUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQw
MDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJv
dmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFG
IC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTcwMDcsNiAr
NzQ3NCw3IEBACiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9u
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9u
Z0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZDODJGNTAwMTQ1
M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAw
NTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4
QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKQEAgLTcw
NDMsMTAgKzc1MTEsMTIgQEAKIAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1N0MgLyog
VHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI2QzM5MUFGNDhEREMw
MERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0MDFCREFD
REFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQzk1MkI3
MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkQ0REVDMTk4MzJEQzQwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkQ0REYwMTk4MzJERDYwMDdENEIxOSAvKiBUeXBlU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2Rl
Y29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVk
aXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4RUJFOTEwMDRDQjlG
RiAvKiB1ZGlzODZfaW5wdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzA4NCw4ICs3NTU0LDEwIEBA
CiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Js
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEwQ0RCMUZDMDAzNjRDQ0UgLyogV2Vh
a0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2QTkzRTFBQTREODhEMDAy
RkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGNzI1NjYx
NEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLywKQEAg
LTcxMDcsOSArNzU3OSwxMiBAQAogCQkJCTk5NTlFOTJFMUJEMTdGQTQwMDFBQTQxMyAvKiB4eGQu
cGwgaW4gSGVhZGVycyAqLywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRl
cnByZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4
NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRC
ODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1ODExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwpAQCAtNzEzNCw2ICs3NjA5LDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0g
MEZDRUZBQjYxODA1RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi87CiAJCQlw
cm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuZHluYW1pYyI7CiAJ
CX07CisJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZFQzg1QTgx
QkRCNUNGMTAwODBGRjc0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJ0ZXN0YjMiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEZFQzg1OTUxQkRC
NUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0
IC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlk
ZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHRlc3RiMzsKKwkJCXByb2R1Y3ROYW1l
ID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRkVDODVBRDFCREI1Q0YxMDA4MEZG
NzQgLyogdGVzdGIzICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEZGOTIyQzMxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zm
c2V0c0V4dHJhY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxk
Q29uZmlndXJhdGlvbkxpc3QgPSAwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJh
Y3RvciIgKi87CkBAIC03Mjg5LDYgKzc3ODAsNyBAQAogCQkJCTE0QkQ1OUJFMEEzRThGOTAwMEJB
RjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAvKiBqc2Mg
Ki8sCiAJCQkJNjUxMTIyRjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJ
MEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1RDZCMkE0NzE1MkI5
RTE3MDA1MjMxREUgLyogVGVzdCBUb29scyAqLywKIAkJCSk7CiAJCX07CkBAIC03NTM2LDYgKzgw
MjgsMTQgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKKwkJMEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8gPSB7CisJ
CQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyogdGVz
dGIzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNDE0RjQ2QjEzMDA0MUEyNEUgLyogU291
cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTc1OTEsNiArODA5MSw3IEBACiAJCQkJMEY1NUYwRjQx
NEQxMDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QkQxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3Nl
bWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8q
IEFSTXY3RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODVDMTcxNzk2
NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTk4LDgg
KzgwOTksMTAgQEAKIAkJCQlBN0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYz
NjE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJy
YXlJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNTFCREFD
REFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYyMCw4ICs4MTIzLDEwIEBACiAJCQkJMTQy
OUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2MkVDOUJCNjFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNo
dWZmbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQw
MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2Fs
bExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjND
NiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Mjc2NzMyMzFCNjgw
QzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjM0LDYgKzgx
MzksNyBAQAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENvZGVPcmlnaW4u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAw
QTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0Mx
NjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzY0MSw2ICs4MTQ3LDcgQEAKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJF
OTggLyogQ29tbW9uU2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdB
MUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3RTVBM0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Rh
Y2tTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAv
KiBDb21wbGV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUx
RDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4
MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTc2NTcsNiArODE2NCw3IEBACiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1
c3RvbUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjcz
MDBCODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3
QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
QkMxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZlcnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUxMDdFQzM3NjAwNDI3QTQ4IC8qIERh
dGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NjgsNiArODE3Niw3IEBACiAJCQkJ
MEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJy
ZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4
REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OEQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5
NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03Njc3LDYgKzgxODYsNyBAQAogCQkJCTBGNjM5NDg0MTVFNDgxMTgwMDZBNTk3
QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEOUEyOTQxN0EwQkM3
NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxh
YmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzY4NSw2ICs4MTk1LDcgQEAKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcg
LyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFMjExNDE3
MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDM2OTQxQUU5Q0MzMzAwMEQ0REZC
IC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBC
QkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3MjIs
NiArODIzMyw3IEBACiAJCQkJMkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9u
V2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFE
NyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGOTE4QTYwMDcwMDAx
QTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0EwQkFBODAwNkJBNTU0
IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc2NCwx
NCArODI3NiwxNyBAQAogCQkJCTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAvKiBERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MzkyQzg5MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFj
ZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFRDE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjIzNzk3
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGRkM5NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3N0ExNzk3MzhCODAwOURG
NzQ0IC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzQxNkMxREIwOTAw
ODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNFMDFBQTE5RDM1M0E1
MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJCOUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3ODksNiArODMwNCw4IEBACiAJCQkJMEZDMjBDQjUx
ODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3OTA4NTUxOUEyOTBCMjAwRjYzMTBD
IC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVh
ZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8q
IERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTc4MTYsNiArODMzMyw3IEBACiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5H
Q0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlFNDVBMjUxOEExQjI1
OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
NzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9y
SW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODYwLDYgKzgzNzgsNyBAQAogCQkJCTBG
OEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNC
bG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQxQjUgLyog
RlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBD
QTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCREMxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODY3LDYg
KzgzODYsNyBAQAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjkxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292
ZXJ5T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4OTFCREFD
REM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRM
U3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg3OCw2ICs4Mzk4LDcgQEAKIAkJCQkx
NDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RjE2QjcyQTE3MDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRh
YmxlRHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0Mg
LyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NUMyMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRTRCRkYyQjFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBG
dW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg5OSw2ICs4NDIwLDcgQEAK
IAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3
IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNzFCREFDREFD
MDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYw
QTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA2LDYgKzg0MjgsNyBAQAogCQkJCTlFQTVDN0Ey
MTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0aWFsaXplTExWTU1hYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5RTcyOTQwODE5MEYwMjFFMDAxQTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3QjFCREFDREM3MDA4MEZG
NzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1
QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2Ny
aXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTcsNiArODQ0MCw3IEBACiAJCQkJQTU5
M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg3MTg1NjgzMzUwMDJF
RDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdGQSAvKiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg5MTg1
NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzk3MywxMyArODQ5NywxNyBAQAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3
NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4QUYw
QTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2Fs
bGJhY2tPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFD
QkYyIC8qIEpTQ2FsbGVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4MTg4MEQ2QTgw
MDI2QzM5QiAvKiBKU0NCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlEMTEw
N0VDMzc2MDA0MjdBNDggLyogSlNDZWxsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NUM1
MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxs
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEg
LyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFG
NTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzIwMjhCNjE3OTc2
MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Nzk5MCwxNiArODUxOCwxOSBAQAogCQkJCUZFMzg0RUU3MUFEREI3QUQwMDU1REUyQyAvKiBKU0Rv
bGxhclZNUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYw
MDQyN0E0OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0
OCAvKiBKU0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4NTE4OUIx
QjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVDM0ExQTUxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29s
ZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OTIxODI0NzQ0
NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNFOTE4OTFCMDc3MDAzMUM3RkEgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBK
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4
N0NDM0M2MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9i
amVjdFJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5
MDAxMTBGMTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUyMzFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUMxMTg1QkZBQ0MwMDdFOTVBRCAv
KiBKU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MzNGNTA4MDFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC04MDE4LDYgKzg1NDksNyBAQAogCQkJCUUzMThDQkMwMUI4QUVGNTEwMEEyOTI5
RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlE
QTRBNjFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpT
Tm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3
QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCN0U0MEE0MzA3NjAw
MDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMzEsNiArODU2
Myw3IEBACiAJCQkJRTNFRjg4NzQxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8q
IEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MkMzN0YxQUREQjhGRTAwMTM5NzI2
IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTExMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTkyOEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0ODc0QUU1MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QzBDNEFEMTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTgwNTksNiArODU5Miw3IEBACiAJCQkJNzA5RkI4NjcxQUUz
MzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2
MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8q
IEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDY2
LDkgKzg2MDAsMTIgQEAKIAkJCQkxNDhGMjFCMDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZm
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExp
dGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1N0YxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAw
RURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMjBDRTlE
MTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NDY4MEQyMTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODU0MTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRF
bnRyeXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3
MiAvKiBMTEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJB
N0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA3
Nyw2ICs4NjE0LDcgQEAKIAkJCQlBN0U1QUIzNzE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fz
c2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERTEwN0VDN0U3MDA2NTA0NDYg
LyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3
MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTFG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0QjcyM0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNy
b0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwODYsMTAgKzg2MjQsMTIgQEAK
IAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3MzkxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkzMTgyRDk5MTQwMDUyMkMy
MiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUw
NzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3MDA4NzNEMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxv
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1h
cmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIw
MkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MEE0ODQxQTkwNTFB
RjAwRDczQ0NBIC8qIE1hdGhDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYx
MDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTI4
LDE3ICs4NjY4LDIxIEBACiAJCQkJMEZGNzI5QUQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVy
Qnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUUxNjZBRDM1QzAwMEY1QkEz
IC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTI5MTY3
NzFDMzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVC
QTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRh
YmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyog
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMDFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0
YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2
RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1
NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3Bl
cnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNCMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAw
MTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURFODEwN0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtODE0NywxMCArODY5MSwxMiBAQAogCQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMx
RkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENB
N0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
M0I0QTkxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFj
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzM2MzdBNTFCNjMyMjAyMDBFRTA4NDAgLyogUmVm
bGVjdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3
MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdC
MiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNzEyQjNCMTFDN0Iy
MTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjQyQzUx
MDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTgxNjQsNiArODcxMCw3IEBACiAJCQkJQTVCQTE1RTkxODIzNDBC
MzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1
NThGMTgyNDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1QkExNUVDMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0
b3JEZWJ1Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NUJBMTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RFMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50
aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxODIsNiArODcyOSw3IEBACiAJCQkJQTU0
Q0YyRjkxODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTRDRjJGNTE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTlEQTUxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OTBERDZEMTgyRjQ5OTcwMDU4
ODgwNyAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5
OURBMTE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRUU5ODQzMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgxOTYsNiArODc0NCw3IEBACiAJCQkJMEZEODJFODYxNDFGM0ZGMTAw
MTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzFFQUYx
MTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTIxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZB
IC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5
REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04MjA0LDYgKzg3NTMsNyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1
Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8q
IFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBRjczODJDMThCQkJGOTIw
MDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NUI5MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCNDM4QTMxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQzODE1QUU0QTFDMDA4RjM2M0UgLyogU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMTIs
NiArODc2Miw3IEBACiAJCQkJNzA1QjQxQUQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwNUI0MUFGMUE2RTUwMUUwMDcxNjc1NyAv
KiBTeW1ib2xPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA1QjQxQjExQTZFNTAxRTAw
NzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUz
RjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTcwRUNBNjA3MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0
ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjQwLDYgKzg3OTEsNyBAQAogCQkJCTBGMjRF
NTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdy
aXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4MzFCREFDREM3MDA4
MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyQzFB
QTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjBD
MjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODI1OSw2ICs4ODExLDcgQEAKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwOUZCODZCMUFFMzM1QzYw
MDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBNEVD
OTBCMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1N0QxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QUIzQTE3OTlFNEIyMDBEMjgz
M0QgLyogWDg2RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUy
MTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTgyODUsNiArODgzOCwxMSBAQAogCQkJdGFyZ2V0ID0gMEZDRUZBQjUxODA1RDYxNjAwNDcy
Q0U0IC8qIGxsdm1Gb3JKU0MgKi87CiAJCQl0YXJnZXRQcm94eSA9IDBGQ0VGQUJDMTgwNUQ2NjMw
MDQ3MkNFNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CiAJCX07CisJCTBGRUM4NUIxMUJE
QjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJY
VGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAv
KiB0ZXN0YjMgKi87CisJCQl0YXJnZXRQcm94eSA9IDBGRUM4NUIwMUJEQjVEOEYwMDgwRkY3NCAv
KiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCTBGRjkyMkQzMTRGNDZCMkYwMDQx
QTI0RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVw
ZW5kZW5jeTsKIAkJCXRhcmdldCA9IDBGNDY4MEE5MTRCQTdGRDkwMEJGRTI3MiAvKiBMTEludCBP
ZmZzZXRzICovOwpAQCAtODQwOSw2ICs4OTY3LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IFByb2R1
Y3Rpb247CiAJCX07CisJCTBGRUM4NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25m
aWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsK
KwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGRUM4NUFBMUJEQjVDRjEwMDgwRkY3
NCAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
YXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBU
b29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJP
RFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkw
RkVDODVBQjFCREI1Q0YxMDA4MEZGNzQgLyogUHJvZmlsaW5nICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5h
bWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBGRUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9k
dWN0aW9uICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhl
Y3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9O
QU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRkY5
MjJDQjE0RjQ2QjEzMDA0MUEyNEUgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5
MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtODc2MSw2ICs5
MzUxLDE3IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRkVDODVBODFCREI1
Q0YxMDA4MEZGNzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJn
ZXQgInRlc3RiMyIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkwRkVDODVBOTFCREI1Q0YxMDA4MEZGNzQgLyogRGVi
dWcgKi8sCisJCQkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8qIFJlbGVhc2UgKi8sCisJCQkJ
MEZFQzg1QUIxQkRCNUNGMTAwODBGRjc0IC8qIFByb2ZpbGluZyAqLywKKwkJCQkwRkVDODVBQzFC
REI1Q0YxMDA4MEZGNzQgLyogUHJvZHVjdGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9k
dWN0aW9uOworCQl9OwogCQkwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rv
ciIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1
cmF0aW9ucyA9ICgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKIAorI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgZG91YmxlIE1hY3JvQXNz
ZW1ibGVyOjp0d29Ub1RoZTMyID0gKGRvdWJsZSkweDEwMDAwMDAwMHVsbDsKQEAgLTQ3LDUgKzQ5
LDcwIEBAIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNhbGxQcm9iZShzdGQ6OmZ1bmMKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNl
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw6CisgICAgICAg
IG91dC5wcmludCgiTm90RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9B
c3NlbWJsZXI6OkFib3ZlOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWw6CisgICAgICAgIG91
dC5wcmludCgiQWJvdmVPckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsOgorICAgICAgICBv
dXQucHJpbnQoIkJlbG93T3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNy
b0Fzc2VtYmxlcjo6R3JlYXRlclRoYW46CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFu
T3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbk9yRXF1YWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuOgorICAgICAgICBv
dXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW5PckVx
dWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE1hY3Jv
QXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsK
KyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJP
dmVyZmxvdyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6U2ln
bmVkOgorICAgICAgICBvdXQucHJpbnQoIlNpZ25lZCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBNYWNyb0Fzc2VtYmxlcjo6UG9zaXRpdmVPclplcm86CisgICAgICAgIG91dC5wcmludCgi
UG9zaXRpdmVPclplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJs
ZXI6Olplcm86CisgICAgICAgIG91dC5wcmludCgiWmVybyIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJOb25a
ZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoQVNT
RU1CTEVSKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTYsOCAr
MTU5NiwxOSBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0
aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIp
CiAKK25hbWVzcGFjZSBKU0MgeworCiAvLyBJZiB0aGVyZSBpcyBubyBhc3NlbWJsZXIgZm9yIHRo
aXMgcGxhdGZvcm0sIGF0IGxlYXN0IGFsbG93IGNvZGUgdG8gbWFrZSByZWZlcmVuY2VzIHRvCiAv
LyBzb21lIG9mIHRoZSB0aGluZ3MgaXQgd291bGQgb3RoZXJ3aXNlIGRlZmluZSwgYWxiZWl0IHdp
dGhvdXQgZ2l2aW5nIHRoYXQgY29kZSBhbnkgd2F5CiAvLyBvZiBkb2luZyBhbnl0aGluZyB1c2Vm
dWwuCkBAIC0xNjExLDYgKzE2MjIsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBGUFJlZ2lzdGVySUQg
eyBOb0ZQUmVnaXN0ZXIgfTsKIH07CiAKK30gLy8gbmFtZXNwYWNlIEpTQworCiAjZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKIAogI2VuZGlmIC8vIE1hY3JvQXNzZW1ibGVyX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNo
ZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
IyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hlcgorCisjIE5v
dGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNzb2NpYXRpb24g
YW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5ldmVyIHNlZSBB
ZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkg
YmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3QyKS4gQWxzbywg
d2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGNh
bm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBpbiB0aGlzIGNv
ZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXphdGlvbnMKKyMg
aGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9yZSBpbnN0cnVj
dGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3QgbmVlZCB0byBt
YXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQgaW50byB0aGUg
TG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5IGZhbmN5IG1h
dGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0FkZFNoaWZ0MSA9
IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBBZGQoYmFzZSwg
U2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK0RpcmVj
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVu
dFJlZ1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJn
dW1lbnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3VtZW50UmVnVmFsdWVfaAorI2Rl
ZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEFyZ3VtZW50UmVnVmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3Vt
ZW50UmVnVmFsdWUoKTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1f
cmVnOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIEFyZ3VtZW50UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyBy
ZWcpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBv
aW50ZXJUeXBlKCkgOiBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3JlZyhyZWcpCisgICAg
eworICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkpOworICAgIH0KKworICAgIFJlZyBtX3JlZzsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4
ID0gIiMiOworCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUg
ZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1
ZW5jeSkKK3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKQoreworfQorCit2b2lkIEJh
c2ljQmxvY2s6OmFwcGVuZChWYWx1ZSogdmFsdWUpCit7CisgICAgbV92YWx1ZXMuYXBwZW5kKHZh
bHVlKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30K
KworYm9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykK
K3sKKyAgICByZXR1cm4gQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwor
Ym9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFz
aWNCbG9jayogdG8pCit7CisgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywg
ZnJvbSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlbW92ZU5vcHMoKQoreworICAgIHVu
c2lnbmVkIHNvdXJjZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCB0YXJnZXRJbmRleCA9IDA7Cisg
ICAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc2l6ZSgpKSB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWVzW3NvdXJjZUluZGV4KytdOworICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpICE9
IE5vcCkKKyAgICAgICAgICAgIG1fdmFsdWVzW3RhcmdldEluZGV4KytdID0gdmFsdWU7CisgICAg
fQorICAgIG1fdmFsdWVzLnJlc2l6ZSh0YXJnZXRJbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9j
azo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJl
Zml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVu
Y3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgaWYgKHByZWRlY2Vzc29ycygpLnNpemUo
KSkKKyAgICAgICAgb3V0LnByaW50KCIgIFByZWRlY2Vzc29yczogIiwgcG9pbnRlckxpc3REdW1w
KHByZWRlY2Vzc29ycygpKSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykK
KyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgQjM6OmRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgi
CisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSW5zZXJ0aW9u
U2V0OworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVM
aXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7
CisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAv
LyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAg
ICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFZhbHVl
TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAg
VmFsdWVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAg
IFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJu
IG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4g
bV92YWx1ZXM7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKFZhbHVlKik7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOwor
CisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIGNvbnN0IEZyZXF1ZW50
ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBGcmVxdWVudGVk
QmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgU3VjY2Vzc29yTGlz
dCYgc3VjY2Vzc29ycygpIGNvbnN0OworICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKTsK
KworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsK
KyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1
Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxv
Y2tzKCk7CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBT
dWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51
bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQor
ICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNv
bnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVk
ZWNlc3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJu
IG1fcHJlZGVjZXNzb3JzOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sq
KTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJl
cGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAg
ICBkb3VibGUgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAg
IHZvaWQgcmVtb3ZlTm9wcygpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2so
dW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVj
ZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Js
b2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1f
YmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2Nr
RHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVl
cEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5l
c19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgi
CisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KK1ZhbHVlVHlwZSogQmFzaWNCbG9jazo6YXBwZW5kTmV3KFByb2NlZHVyZSYgcHJv
Y2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0
ID0gcHJvY2VkdXJlLmFkZDxWYWx1ZVR5cGU+KGFyZ3VtZW50cy4uLik7CisgICAgYXBwZW5kKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHVuc2lnbmVkIEJhc2ljQmxv
Y2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgY29uc3QgRnJlcXVlbnRl
ZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOwor
fQorCitpbmxpbmUgRnJlcXVlbnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNj
ZXNzb3IoaW5kZXgpOworfQorCitpbmxpbmUgY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlz
dCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+
YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2Nr
OjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKCkKK3sKKyAgICByZXR1cm4g
bGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJh
c2ljQmxvY2sqIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25z
dAoreworICAgIHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7Cit9CisKK2lubGluZSBC
YXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpCit7
CisgICAgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIFN1Y2Nl
c3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gQmFz
aWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkKK3sKKyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVj
dGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihzdWNjZXNzb3JzKCkpOworfQorCitpbmxp
bmUgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBCYXNpY0Jsb2Nr
OjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAorewor
ICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1
Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRp
bHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
VXRpbHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2Nr
VXRpbHNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tVdGlsc19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3Jr
bGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIGFkZFByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAg
ICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisKKyAgICBpZiAo
cHJlZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vzc29yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcHJlZGVjZXNzb3JzLmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlbW92ZVByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAg
ICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAocHJlZGVjZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVkZWNl
c3NvcnNbaS0tXSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBwcmVkZWNlc3Nv
cnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKCFwcmVkZWNlc3NvcnMuY29udGFp
bnMocHJlZGVjZXNzb3IpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9j
az4KK2Jvb2wgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2Nr
KiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9j
ay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IGZyb20p
IHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpXSA9IHRvOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlz
IHJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCByZW1vdmVzIGJsb2NrcyB0aGF0IGFyZW4ndCBy
ZWFjaGFibGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgordm9pZCByZXNldFJlYWNo
YWJpbGl0eShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQorewor
ICAgIC8vIENsZWFyIGFsbCBwcmVkZWNlc3NvciBsaXN0cyBmaXJzdC4KKyAgICBmb3IgKGF1dG8m
IGJsb2NrIDogYmxvY2tzKQorICAgICAgICBibG9jay0+cHJlZGVjZXNzb3JzKCkucmVzaXplKDAp
OworCisgICAgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxv
Y2s+PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2Nrc1swXS5nZXQoKSk7CisgICAg
d2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAg
ICAgICAgICAgIGlmICh3b3JrbGlzdC5wdXNoKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAg
YWRkUHJlZGVjZXNzb3Ioc3VjY2Vzc29yLCBibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChibG9ja3NbaV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJs
b2Nrc1tpXSA9IG51bGxwdHI7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Js
b2NrPgorVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblByZU9yZGVyKEJhc2ljQmxvY2sqIHJv
b3QpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsKKyAgICB3
b3JrbGlzdC5wdXNoKHJvb3QpOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmts
aXN0LnBvcCgpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK1ZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gYmxvY2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKK3sKKyAgICBWZWN0b3I8QmFz
aWNCbG9jayo+IHJlc3VsdDsKKyAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Js
b2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2go
cm9vdCk7CisgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gaXRlbSA9
IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAg
ICBjYXNlIEdyYXBoVmlzaXRPcmRlcjo6UHJlOgorICAgICAgICAgICAgd29ya2xpc3QucHVzaFBv
c3QoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
aXRlbS5ub2RlLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5w
dXNoKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaFZp
c2l0T3JkZXI6OlBvc3Q6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0ubm9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
QjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayos
IEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBXaGVuIHlvdSBzYXkg
QmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJh
c2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3QgaXMgdXNlZnVsIGZv
ciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJsb2NrLiBJdCBhbHNv
CisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKKwordHlwZWRlZiBH
cmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8
QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9k
ZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxv
Y2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja1dvcmtsaXN0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2UgeworCit1bnNpZ25lZCBu
dW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBzd2l0Y2ggKGluc3Qub3JpZ2luLT5vcGNvZGUo
KSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICAvLyBSZXNDb25kLCBUbXAsIFRtcAorICAgICAgICByZXR1cm4gMzsK
KyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitDaGVja1NwZWNpYWw6OkNoZWNrU3Bl
Y2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpCisgICAgOiBtX2NoZWNr
T3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fbnVtQ2hlY2tBcmdzKG51bUFyZ3MpCit7CisgICAgQVNT
RVJUKGlzVGVybWluYWwob3Bjb2RlKSk7Cit9CisKK0NoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lh
bCgpCit7Cit9CisKK0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYg
aW5zdCkgY29uc3QKK3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0
Lm9yaWdpbik7CisgICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X251bUNoZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtQ2hlY2tB
cmdzOyArK2kpCisgICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzLmFwcGVuZChpbnN0LmFyZ3NbaSAr
IDFdKTsKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0Nh
bGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmco
Y2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVj
a0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1Zh
bGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlk
Rm9ybSgpCisgICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVj
a0FyZ3MgKyAxLCBpbnN0KTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6OmFkbWl0c1N0YWNrKElu
c3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChhcmdJbmRleCA+PSAxICYm
IGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hlY2tBcmdzKQorICAgICAgICByZXR1cm4gaGlkZGVuQnJh
bmNoKGluc3QpLmFkbWl0c1N0YWNrKGFyZ0luZGV4IC0gMSk7CisgICAgcmV0dXJuIGFkbWl0c1N0
YWNrSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgYXJnSW5k
ZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFsOjpnZW5lcmF0ZShJbnN0
JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpCit7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWwgPSBoaWRkZW5CcmFuY2goaW5zdCkuZ2VuZXJh
dGUoaml0LCBjb250ZXh0KTsKKyAgICBBU1NFUlQoZmFpbC5pc1NldCgpKTsKKworICAgIFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAg
IGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcCgp
KTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNrU3ViICYmIHZhbHVl
LT5jaGlsZCgwKS0+aXNJbnQoMCkpCisgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6
Y29uc3RhbnQoMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBzLmFwcGVuZChyZXBG
b3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzNdKSk7CisgICAgICAgIHJlcHMuYXBwZW5k
KHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENoZWNrKTsKKyAgICAgICAgcmVwcy5h
cHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEpKTsKKyAgICB9CisKKyAgICBhcHBlbmRSZXBzSW1w
bChjb250ZXh0LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIHJlcHMpOworICAgIAorICAgIGNv
bnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0
aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCisgICAgICAgICAgICBbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICBmYWlsLmxp
bmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3RhY2ttYXAqIHN0
YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0YWNr
bWFwKTsKKworICAgICAgICAgICAgICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFt
czsKKyAgICAgICAgICAgICAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICAgICAgICAgICAgICBwYXJhbXMucmVw
cyA9IHJlcHM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21h
cC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgICAgICAgICAgICAgc3RhY2ttYXAtPm1fZ2VuZXJh
dG9yLT5ydW4oaml0LCBwYXJhbXMpOworICAgICAgICAgICAgfSkpOworCisgICAgcmV0dXJuIEND
YWxsSGVscGVyczo6SnVtcCgpOyAvLyBBcyBmYXIgYXMgQWlyIHRoaW5rcywgd2UgYXJlIG5vdCBh
IHRlcm1pbmFsLgorfQorCit2b2lkIENoZWNrU3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jaGVja09wY29kZSwgIigiLCBtX251bUNo
ZWNrQXJncywgIikiKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQjM6OkNoZWNrVmFsdWUgbG93
ZXJlZCB0byAiLCBtX2NoZWNrT3Bjb2RlLCAiIHdpdGggIiwgbV9udW1DaGVja0FyZ3MsICIgYXJn
cy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1NwZWNpYWxfaAorI2RlZmlu
ZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
T3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHdhbnQgdG8gbG93ZXIgQ2hlY2sgaW5zdHJ1Y3Rp
b25zIHRvIGEgYnJhbmNoLCBidXQgdGhlbiB3ZSB3YW50IHRvIHJvdXRlIHRoYXQgYnJhbmNoIHRv
IG91cgorLy8gb3V0LW9mLWxpbmUgY29kZSBpbnN0ZWFkIG9mIGRvaW5nIGFueXRoaW5nIGVsc2Uu
IEZvciB0aGlzIHJlYXNvbiwgYSBDaGVja1NwZWNpYWwgd2lsbCByZW1lbWJlcgorLy8gd2hpY2gg
YnJhbmNoIG9wY29kZSB3ZSBoYXZlIHNlbGVjdGVkIGFsb25nIHdpdGggdGhlIG51bWJlciBvZiBh
cmdzIGluIHRoZSBvdmVybG9hZCB3ZSB3YW50LiBJdAorLy8gd2lsbCBjcmVhdGUgYW4gSW5zdCB3
aXRoIHRoYXQgb3Bjb2RlIHBsdXMgdGhlIGFwcHJvcHJpYXRlIGFyZ3MgZnJvbSB0aGUgb3duaW5n
IEluc3Qgd2hlbmV2ZXIgeW91CisvLyBjYWxsIGFueSBvZiB0aGUgY2FsbGJhY2tzLgorLy8KKy8v
IE5vdGUgdGhhdCBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwgd2UgZXhwZWN0
IHRoYXQgdGhlIEIzIGFyZ3VtZW50cyBhcmUgdGhlIHJldmVyc2UKKy8vIG9mIHRoZSBBaXIgYXJn
dW1lbnRzIChBZGQoYSwgYikgPT4gQWRkMzIgYiwgYSkuIEV4Y2VwdDoKKy8vIC0gQ2hlY2tTdWIo
MCwgeCksIHdoaWNoIHR1cm5zIGludG8gQnJhbmNoTmVnMzIgeC4KKy8vIC0gQ2hlY2tNdWwoYSwg
YiksIHdoaWNoIHR1cm5zIGludG8gTXVsMzIgYiwgYSBidXQgd2UgcGFzcyBBbnkgZm9yIGEncyBW
YWx1ZVJlcC4KKworY2xhc3MgQ2hlY2tTcGVjaWFsIDogcHVibGljIFN0YWNrbWFwU3BlY2lhbCB7
CitwdWJsaWM6CisgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1bnNpZ25lZCBudW1Bcmdz
KTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBDb25zdHJ1Y3Rz
IGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJhbmNoIHRoYXQgdGhpcyB3
aWxsIHVzZS4KKyAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNvbnN0IEFpcjo6SW5zdCYpIGNv
bnN0OworCisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJk
YTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFs
aWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3Qm
LCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJh
dGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhpZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0
ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2VuZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIg
Y3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3Qm
LCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBk
ZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdz
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNDaGVja1NwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NoZWNrVmFsdWU6
On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9pZCBDaGVja1ZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgic3RhY2ttYXAgPSAiLCBzdGFja21h
cCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tW
YWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIGNh
c2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIGNhc2UgQ2hlY2s6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5DaGVja1ZhbHVlKCk7CisK
KyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2tBZGQsIENoZWNr
U3ViLCBhbmQgQ2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2Rl
IG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbiwgbGVmdCwgcmln
aHQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7CisgICAgICAgIEFTU0VS
VChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAgIEFTU0VSVChvcGNvZGUg
PT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9PSBDaGVja011bCk7
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCisgICAgQ2hlY2tWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBy
ZWRpY2F0ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHBy
ZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2spOworICAgIH0K
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiT3B0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBzaG91bGREdW1w
SVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBG
VEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7
Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRp
b25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVIo
KQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkgfHwgc2hvdWxkVmFsaWRh
dGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNl
KCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCk7Cit9
CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25z
Ojp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVm
aW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitpbmxpbmUgYm9vbCBpczY0Qml0KCkgeyByZXR1cm4gc2l6ZW9mKHZv
aWQqKSA9PSA4OyB9CitpbmxpbmUgYm9vbCBpczMyQml0KCkgeyByZXR1cm4gIWlzNjRCaXQoKTsg
fQorCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgp
OworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQ
aGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Nv
bW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZp
dHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0
YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENv
bW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNvbW11dGF0aXZpdHkp
IHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIkNvbW11dGF0aXZl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZlOgorICAgICAgICBv
dXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjND
b21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIENvbW11dGF0
aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZlCit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3Ry
ZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6Q29tbXV0YXRp
dml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Q29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKworVmFsdWUqIENvbnN0MzJWYWx1
ZTo6bmVnQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jKSBjb25zdAoreworICAgIHJldHVybiBwcm9j
LmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCAtbV92YWx1ZSk7Cit9CisKK1ZhbHVlKiBDb25z
dDMyVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgaW50MzJfdCBvdGhlcikgY29u
c3QKK3sKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1
ZSArIG90aGVyKTsKK30KKworVmFsdWUqIENvbnN0MzJWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2Vk
dXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50
MzIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+YXNJbnQzMigpKTsKK30KKworVmFs
dWUqIENvbnN0MzJWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1f
dmFsdWUgLSBvdGhlci0+YXNJbnQzMigpKTsKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29u
c3QzMlZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0K
KyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAg
aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIFZhbHVlKiBu
ZWdDb25zdGFudChQcm9jZWR1cmUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYWRkQ29u
c3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFs
dWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBN
ZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwg
b3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworcHJpdmF0
ZToKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0MzJWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1By
b2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkK
K3sKK30KKworVmFsdWUqIENvbnN0NjRWYWx1ZTo6bmVnQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9j
KSBjb25zdAoreworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCAt
bV92YWx1ZSk7Cit9CisKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVy
ZSYgcHJvYywgaW50MzJfdCBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29u
c3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG90aGVy
KSk7Cit9CisKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+
KG9yaWdpbigpLCBtX3ZhbHVlICsgb3RoZXItPmFzSW50NjQoKSk7Cit9CisKK1ZhbHVlKiBDb25z
dDY0VmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25z
dAoreworICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0g
b3RoZXItPmFzSW50NjQoKSk7Cit9CisKK3ZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29u
c3Q2NFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdDY0OyB9CisgICAgCisg
ICAgfkNvbnN0NjRWYWx1ZSgpOworICAgIAorICAgIGludDY0X3QgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisKKyAgICBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGludDMyX3Qg
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBzdWJDb25zdGFudChQ
cm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0NjRWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29u
c3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworQ29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91YmxlVmFsdWUoKQoreworfQorCitWYWx1ZSog
Q29uc3REb3VibGVWYWx1ZTo6bmVnQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jKSBjb25zdAorewor
ICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4oKSwgLW1fdmFsdWUp
OworfQorCitWYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBw
cm9jLCBpbnQzMl90IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERv
dWJsZVZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSArIHN0YXRpY19jYXN0PGRvdWJsZT4ob3RoZXIp
KTsKK30KKworVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3Vi
bGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+YXNEb3VibGUoKSk7Cit9CisKK1Zh
bHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVl
KiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9y
aWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzRG91YmxlKCkpOworfQorCit2b2lkIENvbnN0RG91
YmxlVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50ZigiJWxlIiwgbV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzQ29uc3REb3VibGVWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3REb3VibGVWYWx1ZSA6IHB1YmxpYyBW
YWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7
IHJldHVybiBvcGNvZGUgPT0gQ29uc3REb3VibGU7IH0KKyAgICAKKyAgICB+Q29uc3REb3VibGVW
YWx1ZSgpOworICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKworICAgIFZhbHVlKiBuZWdDb25zdGFudChQcm9jZWR1cmUmIHByb2MpIGNvbnN0IG92ZXJy
aWRlOworICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGludDMyX3Qgb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHBy
b2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHN1YkNvbnN0YW50
KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3REb3VibGVW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBDb25zdERvdWJsZSwgRG91YmxlLCBvcmlnaW4pCisgICAgICAgICwg
bV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBtX3ZhbHVlOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDb25zdFB0clZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdFB0clZhbHVlX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CisvLyBVc3VhbGx5IHlvdSB3YW50IHRvIHVzZSBDb25zdDMyVmFsdWUgb3IgQ29uc3Q2NFZhbHVl
IGRpcmVjdGx5LiBCdXQgdGhpcyBpcyB1c2VmdWwgZm9yIHdyaXRpbmcKKy8vIHBsYXRmb3JtLWFn
bm9zdGljIGNvZGUuIE5vdGUgdGhhdCBhIENvbnN0UHRyVmFsdWUgd2lsbCBiZWhhdmUgbGlrZSBl
aXRoZXIgYSBDb25zdDMyVmFsdWUgb3IKKy8vIENvbnN0NjRWYWx1ZSBkZXBlbmRpbmcgb24gcGxh
dGZvcm0uCisKKyNpZiBVU0UoSlNWQUxVRTY0KQordHlwZWRlZiBDb25zdDY0VmFsdWUgQ29uc3RQ
dHJWYWx1ZUJhc2U7CisjZWxzZQordHlwZWRlZiBDb25zdDMyVmFsdWUgQ29uc3RQdHJWYWx1ZUJh
c2U7CisjZW5kaWYKKworY2xhc3MgQ29uc3RQdHJWYWx1ZSA6IHB1YmxpYyBDb25zdFB0clZhbHVl
QmFzZSB7CitwdWJsaWM6CisgICAgdm9pZCogdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oQ29uc3RQdHJWYWx1ZUJhc2U6OnZhbHVlKCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBDb25zdFB0clZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCBUKiBwb2ludGVyKQorICAgICAgICA6IENvbnN0UHRyVmFsdWVCYXNlKGluZGV4
LCBvcmlnaW4sIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCisgICAgeworICAgIH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIENvbnN0UHRyVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9yaWdpbiBvcmlnaW4sIFQgcG9pbnRlcikKKyAgICAgICAgOiBDb25zdFB0clZhbHVlQmFz
ZShpbmRleCwgb3JpZ2luLCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCisgICAgewor
ICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3RQdHJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K0NvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29udHJvbFZhbHVl
OjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChsaXN0
RHVtcChtX3N1Y2Nlc3NvcnMpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb250cm9sVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29udHJv
bFZhbHVlX2gKKyNkZWZpbmUgQjNDb250cm9sVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29udHJvbFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIEp1bXA6CisgICAgICAgIGNhc2Ug
QnJhbmNoOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBPb3BzOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU3dpdGNoOiAKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEgc3ViY2xhc3Mgb2YgQ29udHJv
bFZhbHVlLCBzbyB3ZSB3YW50CisgICAgICAgICAgICAvLyBzd2l0Y2hWYWx1ZS0+YXM8Q29udHJv
bFZhbHVlPigpIHRvIHJldHVybiBub24tbnVsbC4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JM
aXN0OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5z
aWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7
IH0KKyAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEZyZXF1ZW50ZWRCbG9j
ayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhd
OyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fc3VjY2Vzc29yczsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVy
biBtX3N1Y2Nlc3NvcnM7IH0KKworcHJvdGVjdGVkOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFVzZSB0
aGlzIGZvciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1
ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKKyAgICB7CisgICAg
fQorCisgICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVsYXRlIHRoaXMuCisgICAgU3VjY2Vzc29y
TGlzdCBtX3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1ZShp
bmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2Rl
ID09IE9vcHMpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBSZXR1cm4uCisgICAgQ29u
dHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogcmVzdWx0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdp
biwgcmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBSZXR1cm4pOworICAg
IH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJs
b2NrJiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNj
ZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFu
Y2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgY29uc3QgRnJl
cXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgbm8pCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAg
ICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBl
bmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChubyk7CisgICAgfQorfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNDb250cm9sVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNFZmZlY3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFZmZlY3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzRWZmZWN0cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3ZvaWQgRWZmZWN0czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1h
UHJpbnRlciBjb21tYSgifCIpOworICAgIGlmICh0ZXJtaW5hbCkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiVGVybWluYWwiKTsKKyAgICBpZiAoZXhpdHNTaWRld2F5cykKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiRXhpdHNTaWRld2F5cyIpOworICAgIGlmIChjb250cm9sRGVwZW5kZW50
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJDb250cm9sRGVwZW5kZW50Iik7CisgICAgaWYg
KHdyaXRlc1NTQVN0YXRlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0ZXNTU0FTdGF0
ZSIpOworICAgIGlmICh3cml0ZXMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlczoi
LCB3cml0ZXMpOworICAgIGlmIChyZWFkcykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUmVh
ZHM6IiwgcmVhZHMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVj
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRWZmZWN0c19oCisjZGVmaW5lIEIzRWZmZWN0
c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3N0cnVjdCBFZmZlY3RzIHsKKyAgICAvLyBUcnVlIGlmIHRoaXMgY2Fubm90IGNvbnRp
bnVlIGV4ZWN1dGlvbiBpbiB0aGUgY3VycmVudCBibG9jay4KKyAgICBib29sIHRlcm1pbmFsIHsg
ZmFsc2UgfTsKKworICAgIC8vIFRydWUgaWYgdGhpcyB2YWx1ZSBjYW4gY2F1c2UgZXhlY3V0aW9u
IHRvIHRlcm1pbmF0ZSBhYnJ1cHRseS4KKyAgICBib29sIGV4aXRzU2lkZXdheXMgeyBmYWxzZSB9
OworCisgICAgLy8gVHJ1ZSBpZiB0aGUgaW5zdHJ1Y3Rpb24gbWF5IGNoYW5nZSBzZW1hbnRpY3Mg
aWYgaG9pc3RlZCBhYm92ZSBzb21lIGNvbnRyb2wgZmxvdy4KKyAgICBib29sIGNvbnRyb2xEZXBl
bmRlbnQgeyBmYWxzZSB9OworCisgICAgLy8gVHJ1ZSBpZiB0aGlzIHdyaXRlcyB0byB0aGUgU1NB
IHN0YXRlLiBPcGVyYXRpb25zIHRoYXQgd3JpdGUgU1NBIHN0YXRlIGRvbid0IHdyaXRlIHRvIGFu
eXRoaW5nCisgICAgLy8gaW4gIm1lbW9yeSIgYnV0IHRoZXkgaGF2ZSBhIHNpZGUtZWZmZWN0IGFu
eXdheS4gVGhpcyBpcyBmb3IgbW9kZWxpbmcgVXBzaWxvbnMuIFlvdSBjYW4gaWdub3JlCisgICAg
Ly8gdGhpcyBpZiB5b3UgaGF2ZSB5b3VyIG93biB3YXkgb2YgbW9kZWxpbmcgVXBzaWxvbnMgb3Ig
aWYgeW91IGludGVuZCB0byBqdXN0IHJlYnVpbGQgdGhlbQorICAgIC8vIGFueXdheS4KKyAgICBi
b29sIHdyaXRlc1NTQVN0YXRlIHsgZmFsc2UgfTsKKworICAgIEhlYXBSYW5nZSB3cml0ZXM7Cisg
ICAgSGVhcFJhbmdlIHJlYWRzOworCisgICAgYm9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNTU0FT
dGF0ZSB8fCB3cml0ZXM7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNFZmZlY3RzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNz
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSkK
K3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgeworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6Ok5v
cm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3JtYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6CisgICAgICAgIG91dC5wcmludCgiUmFyZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVuY3lDbGFzc19oCisjZGVmaW5l
IEIzRnJlcXVlbmN5Q2xhc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50OF90
IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBoeXBvdGhlc2lzIGFib3V0IHRoZSBmcmVxdWVu
Y3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0LiBUaGlzIGlzCisgICAgLy8gdGhlIGNv
bW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJhc2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0aGlz
IGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhpcyBjb250cm9s
IGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hlZCBzdXBlciByYXJlbHkuIEl0J3MgdmFsaWQg
dG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlvbnMgdGhhdCBwdW5pc2ggUmFyZSBjb2RlLiBO
b3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRpb25zIHdoZXJlIHlvdQorICAgIC8vIGhhdmUg
dG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJlcXVlbmN5IGNsYXNzIGZyb20gYSBtZXJnaW5n
IG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAgICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVyIGNo
b29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3JtYWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1
c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNoIFJhcmUgY29kZSB2ZXJ5IGJhZGx5LgorICAg
IFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsK
KworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVuY3lDbGFzc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZp
bmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVlbnRlZEJs
b2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVudGVk
QmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzR2Vu
ZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCisjaW5jbHVkZSAi
QjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1JlZHVjZVN0cmVuZ3RoLmgiCisjaW5jbHVkZSAi
QjNWYWxpZGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBn
ZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAg
QWlyOjpDb2RlIGNvZGU7CisgICAgZ2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworICAg
IEFpcjo6Z2VuZXJhdGUoY29kZSwgaml0KTsKK30KKwordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCBBaXI6OkNvZGUmIGNvZGUpCit7CisgICAgLy8gV2UgZG9uJ3QgcmVx
dWlyZSB0aGUgaW5jb21pbmcgSVIgdG8gaGF2ZSBwcmVkZWNlc3NvcnMgY29tcHV0ZWQuCisgICAg
cHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgCisgICAgaWYgKHNob3VsZFZhbGlk
YXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlKTsKKworICAgIC8vIElmIHdlJ3Jl
IGRvaW5nIHN1cGVyIHZlcmJvc2UgZHVtcGluZywgdGhlIHBoYXNlIHNjb3BlIG9mIGFueSBwaGFz
ZSB3aWxsIGFscmVhZHkgZG8gYSBkdW1wLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hv
dWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIEIzOlxu
Iik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICByZWR1Y2VTdHJl
bmd0aChwcm9jZWR1cmUpOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRp
b25zIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDUwNworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUo
cHJvY2VkdXJlKTsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBkb2luZyBzdXBlciB2ZXJib3NlIGR1
bXBpbmcsIHRoZSBwaGFzZSBzY29wZSBvZiBhbnkgcGhhc2Ugd2lsbCBhbHJlYWR5IGRvIGEgZHVt
cC4KKyAgICAvLyBOb3RlIHRoYXQgbG93ZXJUb0FpcigpIGFjdHMgbGlrZSBhIHBoYXNlIGluIHRo
aXMgcmVnYXJkLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hvdWxkRHVtcElSQXRFYWNo
UGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBhZnRlciAiLCBwcm9jZWR1cmUubGFzdFBo
YXNlTmFtZSgpLCAiLCBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAgICAgICBkYXRhTG9nKHBy
b2NlZHVyZSk7CisgICAgfQorCisgICAgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzR2VuZXJhdGVfaAorI2RlZmluZSBCM0dlbmVyYXRlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisK
K25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFz
cyBDb2RlOyB9CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQg
aW4tcGxhY2UsIGFuZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBjb2RlIGJ5IGZpcnN0CisvLyBp
bnRlcm5hbGx5IGNvbnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFuZCB0aGVuIGdlbmVyYXRpbmcg
dGhhdC4KK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0NhbGxI
ZWxwZXJzJik7CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQg
aW4tcGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKKy8v
IHRoZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6Z2VuZXJhdGUoKS4gTm90ZSB0aGF0
IGFuIEFpcjo6Q29kZSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0aGUKKy8vIEIzOjpQcm9jZWR1
cmUsIHNvIHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCMzo6UHJvY2VkdXJlIG91dGxpdmVz
IHRoZSBBaXI6OkNvZGUuCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgQWlyOjpDb2Rl
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzR2VuZXJhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAor
I2RlZmluZSBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEEgZnJlcXVlbnRl
ZCBibG9jayBpcyBhIHR1cGxlIG9mIEJhc2ljQmxvY2sqIGFuZCBGcmVxdWVuY3lDbGFzcy4gSXQn
cyB1c3VhbGx5IHVzZWQgYXMgYQorLy8gc3VjY2Vzc29yIGVkZ2UuCisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhc2ljQmxvY2s+CitjbGFzcyBHZW5lcmljRnJlcXVlbnRlZEJsb2NrIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKAorICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG51bGxwdHIsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSA9IEZyZXF1ZW5jeUNs
YXNzOjpOb3JtYWwpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX2ZyZXF1
ZW5jeShmcmVxdWVuY3kpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAgICYmIG1fZnJlcXVlbmN5
ID09IG90aGVyLm1fZnJlcXVlbmN5OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBHZW5lcmljRnJlcXVl
bnRlZEJsb2NrKCk7CisgICAgfQorCisgICAgQmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2NrOyB9CisgICAgQmFzaWNCbG9jayomIGJsb2NrKCkgeyByZXR1cm4gbV9ibG9j
azsgfQorICAgIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJl
cXVlbmN5OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAg
ICAgICAgICAgb3V0LnByaW50KGZyZXF1ZW5jeSgpLCAiOiIpOworICAgICAgICBvdXQucHJpbnQo
cG9pbnRlckR1bXAobV9ibG9jaykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2Nr
KiBtX2Jsb2NrOworICAgIEZyZXF1ZW5jeUNsYXNzIG1fZnJlcXVlbmN5OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzSGVhcFJhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNIZWFwUmFuZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzSGVhcFJhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgSGVhcFJhbmdlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCp0aGlzID09IEhlYXBSYW5nZSgp
KSB7CisgICAgICAgIG91dC5wcmludCgiQm90dG9tIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKCp0aGlzID09IHRvcCgpKSB7CisgICAgICAgIG91dC5wcmludCgiVG9wIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50KG1fYmVnaW4sICIuLi4iLCBtX2Vu
ZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNIZWFwUmFuZ2VfaAorI2RlZmluZSBCM0hlYXBSYW5n
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKKy8vIEFsaWFzIGFuYWx5c2lzIGluIEIzIGlzIGRvbmUgYnkgY2hlY2tpbmcgaWYg
dHdvIGludGVnZXIgcmFuZ2VzIG92ZXJsYXAuIFRoaXMgaXMgcG93ZXJmdWwgZW5vdWdoCisvLyB0
byBiZSB1c2VkIGZvciBUQkFBLXN0eWxlIGFsaWFzIGFuYWx5c2lzIHVzZWQgYnkgdGhlIERGRywg
RlRMLCBhbmQgTExWTTogeW91IGp1c3QgdHVybiBlYWNoIG5vZGUKKy8vIGluIHRoZSB0cmVlIG9m
IGFic3RyYWN0IGhlYXBzIGludG8gYSBwcmUvcG9zdCByYW5nZS4KKworY2xhc3MgSGVhcFJhbmdl
IHsKK3B1YmxpYzoKKyAgICBIZWFwUmFuZ2UoKQorICAgICAgICA6IG1fYmVnaW4oMCkKKyAgICAg
ICAgLCBtX2VuZCgwKQorICAgIHsKKyAgICB9CisKKyAgICBIZWFwUmFuZ2UodW5zaWduZWQgYmVn
aW4sIHVuc2lnbmVkIGVuZCkKKyAgICAgICAgOiBtX2JlZ2luKGJlZ2luKQorICAgICAgICAsIG1f
ZW5kKGVuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VuZCA+PSBtX2JlZ2luKTsKKyAgICAg
ICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQpIHsKKyAgICAgICAgICAgIC8vIENhbm9uaWNhbGl6ZSBl
bXB0eSByYW5nZXMuCisgICAgICAgICAgICBtX2JlZ2luID0gMDsKKyAgICAgICAgICAgIG1fZW5k
ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBIZWFwUmFuZ2UgdG9wKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBIZWFwUmFuZ2UoMCwgVUlOVF9NQVgpOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fYmVnaW4gPT0gb3RoZXIubV9iZWdpbgorICAgICAgICAgICAgJiYgbV9l
bmQgPT0gb3RoZXIubV9lbmQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhl
YXBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CisKKyAgICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fYmVnaW47IH0KKyAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBt
X2VuZDsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cmFuZ2VzT3ZlcmxhcChtX2JlZ2luLCBtX2Vu
ZCwgb3RoZXIubV9iZWdpbiwgb3RoZXIubV9lbmQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2JlZ2lu
OworICAgIHVuc2lnbmVkIG1fZW5kOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNIZWFwUmFuZ2VfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0luZGV4TWFwX2gKKyNkZWZpbmUgQjNJbmRleE1hcF9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIG1hcCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4g
aW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkK
Ky8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2Yg
dGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkKKy8vIHNwYXJzZSBpbmRpY2Vz
IGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5kZXhNYXAgeworcHVibGljOgorICAgIGV4cGxpY2l0
IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6
ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkKKyAgICB7Cisg
ICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0
b3JbXShLZXkqIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4
KCldOworICAgIH0KKyAgICAKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX3ZlY3RvcjsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzSW5kZXhNYXBfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5k
ZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNl
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBC
M0luZGV4U2V0X2gKKworI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBU
aGlzIGlzIGEgc2V0IGZvciB0aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIg
ZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZh
bHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZh
bHVlcyBjYW4gaGF2ZSB2ZXJ5IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90
IG9mIFZhbHVlcy4KKworLy8gSWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBk
byBJbmRleFNldDxCYXNpY0Jsb2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NsYXNzIEluZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFtX3NldC5zZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMo
VCogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBjbGFz
cyBJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBJdGVyYWJsZShjb25zdCBDb2xsZWN0
aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3QgSW5kZXhTZXQmIHNldCkKKyAgICAgICAgICAgIDog
bV9jb2xsZWN0aW9uKGNvbGxlY3Rpb24pCisgICAgICAgICAgICAsIG1fc2V0KHNldCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rp
b24obnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aXRlcmF0b3IoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIEJpdFZlY3Rvcjo6U2V0
Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBpdGVyKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0
aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pdGVyKGl0ZXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRl
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2l0ZXIrKzsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1faXRlciA9PSBvdGhlci5tX2l0ZXI7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBD
b2xsZWN0aW9uVHlwZSogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgQml0VmVjdG9yOjpTZXRC
aXRzSXRlcmFibGU6Oml0ZXJhdG9yIG1faXRlcjsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQu
YmVnaW4oKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IobV9jb2xsZWN0aW9uLCBtX3NldC5lbmQoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IGNvbnN0IENvbGxlY3Rpb25UeXBlJiBtX2NvbGxlY3Rpb247CisgICAgICAgIGNvbnN0IEluZGV4
U2V0JiBtX3NldDsKKyAgICB9OworCisgICAgLy8gRm9yIGJhc2ljIGJsb2NrcywgeW91IGRvOgor
ICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUpOworICAgIC8vCisgICAgLy8gRm9yIHZh
bHVlcywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUudmFsdWVzKCkp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIEl0ZXJhYmxlPENv
bGxlY3Rpb25UeXBlPiB2YWx1ZXMoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+KGNvbGxl
Y3Rpb24pOworICAgIH0KKworICAgIGNvbnN0IEJpdFZlY3RvciYgaW5kaWNlcygpIGNvbnN0IHsg
cmV0dXJuIG1fc2V0OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggOiBpbmRpY2VzKCkuc2V0Qml0cygpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBUOjpkdW1wUHJlZml4LCBpbmRleCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJpdFZlY3Rv
ciBtX3NldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNJ
bmRleFNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2Vy
dGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4
ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5tX3ZhbHVlcywgbV9pbnNlcnRpb25zKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0luc2VydGlvblNldF9oCisjZGVmaW5lIEIzSW5zZXJ0aW9u
U2V0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIFByb2NlZHVyZTsKK2NsYXNzIFZhbHVlOwor
Cit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPFZhbHVlKj4gSW5zZXJ0aW9uOworCitjbGFzcyBJbnNl
cnRpb25TZXQgeworcHVibGljOgorICAgIEluc2VydGlvblNldChQcm9jZWR1cmUmIHByb2NlZHVy
ZSkKKyAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgeworICAgIH0KKworICAg
IFByb2NlZHVyZSYgY29kZSgpIHsgcmV0dXJuIG1fcHJvY2VkdXJlOyB9CisKKyAgICB2b2lkIGFw
cGVuZEluc2VydGlvbihjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKKyAgICB7CisgICAgICAg
IG1faW5zZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0aW9uKTsKKyAgICB9CisKKyAgICBWYWx1ZSogaW5z
ZXJ0VmFsdWUoc2l6ZV90IGluZGV4LCBWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBhcHBl
bmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCB2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgVmFsdWUqIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpOworCisgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0
ZToKKyAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIFZlY3RvcjxJbnNlcnRpb24sIDg+
IG1faW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzSW5zZXJ0aW9uU2V0X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldElubGluZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbnNlcnRpb25TZXRJbmxp
bmVzX2gKKyNkZWZpbmUgQjNJbnNlcnRpb25TZXRJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZSogSW5zZXJ0
aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorewor
ICAgIHJldHVybiBpbnNlcnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4o
YXJndW1lbnRzLi4uKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzSW5zZXJ0aW9uU2V0SW5saW5lc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJU
b0Fpci5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkIzQWRkcmVzc01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFs
dWUuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21t
dXRhdGl2aXR5LmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhT
ZXQuaCIKKyNpbmNsdWRlICJCM0xvd2VyaW5nTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZS5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIExv
d2VyVG9BaXIgeworcHVibGljOgorICAgIExvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUs
IENvZGUmIGNvZGUpCisgICAgICAgIDogdmFsdWVUb1RtcChwcm9jZWR1cmUudmFsdWVzKCkuc2l6
ZSgpKQorICAgICAgICAsIGJsb2NrVG9CbG9jayhwcm9jZWR1cmUuc2l6ZSgpKQorICAgICAgICAs
IHVzZUNvdW50cyhwcm9jZWR1cmUpCisgICAgICAgICwgYWRkcmVzc1NlbGVjdG9yKCp0aGlzKQor
ICAgICAgICAsIHByb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgY29kZShjb2RlKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKEIzOjpCYXNp
Y0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZSkKKyAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9j
a10gPSBjb2RlLmFkZEJsb2NrKGJsb2NrLT5mcmVxdWVuY3koKSk7CisKKyAgICAgICAgLy8gTG93
ZXIgZGVmcyBiZWZvcmUgdXNlcyBvbiBhIGdsb2JhbCBsZXZlbC4gVGhpcyBpcyBhIGdvb2QgaGV1
cmlzdGljIHRvIGxvY2sgZG93biBhCisgICAgICAgIC8vIGhvaXN0ZWQgYWRkcmVzcyBleHByZXNz
aW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBpbnRvIHRoZSBsb29wLgorICAgICAgICBm
b3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZS5ibG9ja3NJblByZU9yZGVyKCkp
IHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCisgICAgICAgICAgICBpbnN0cy5y
ZXNpemUoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgYmxvY2tzIGlu
IHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3JlIGRlZnMuIFRoYXQncyB3aGF0IGFs
bG93cyB1cworICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0dGVybnMgZWZmZWN0aXZlbHkuCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICAgICAgY3VycmVudFZhbHVlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAg
IGlmIChsb2NrZWQuY29udGFpbnMoY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgaW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsK
KyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHJ1bkxvd2VyaW5nTWF0Y2hlcihjdXJyZW50
VmFsdWUsICp0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJGQVRBTDogY291bGQgbm90IGxvd2VyICIsIGRlZXBEdW1wKGN1
cnJlbnRWYWx1ZSksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBpbnN0cyBjb250YWlucyB0aGVt
IGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MKKyAgICAgICAgICAgIC8vIGl0IGluIHJl
dmVyc2UuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbnN0cy5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBpbnN0c1tpXSkKKyAgICAgICAg
ICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+YXBwZW5kSW5zdChXVEY6Om1vdmUoaW5z
dCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
c3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAgICAgICAgIEFTU0VSVChibG9j
ay0+c3VjY2Vzc29ycygpLnNpemUoKSA8PSAyKTsKKyAgICAgICAgICAgIGZvciAoQjM6OkJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAg
ICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3JzKCkuYXBwZW5kKGJsb2NrVG9CbG9j
a1tzdWNjZXNzb3JdKTsKKyAgICAgICAgfQorCisgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChjb2RlKTsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogcHJvbG9ndWUpCisg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdCgwLCBXVEY6Om1vdmUoaW5zdCkpOwor
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKyAgICB9CisKKyAgICBUbXAg
dG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1wID0gdmFsdWVUb1RtcFt2
YWx1ZV07CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1wID0gY29kZS5uZXdUbXAo
aXNJbnQodmFsdWUtPnR5cGUoKSkgPyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgICAgIHJldHVy
biB0bXA7CisgICAgfQorCisgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4gb3BlcmFuZCBpbnRv
IGFuIGFkZHJlc3MuCisgICAgQXJnIGVmZmVjdGl2ZUFkZHIoVmFsdWUqIGFkZHJlc3MpCisgICAg
eworICAgICAgICBhZGRyZXNzU2VsZWN0b3Iuc2VsZWN0ZWRBZGRyZXNzID0gQXJnKCk7CisgICAg
ICAgIGlmIChydW5BZGRyZXNzTWF0Y2hlcihhZGRyZXNzLCBhZGRyZXNzU2VsZWN0b3IpKQorICAg
ICAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFkZHJlc3M7CisKKyAgICAg
ICAgcmV0dXJuIEFyZzo6YWRkcih0bXAoYWRkcmVzcykpOworICAgIH0KKworICAgIEFyZyBlZmZl
Y3RpdmVBZGRyKFZhbHVlKiBhZGRyZXNzLCBWYWx1ZSogbWVtb3J5VmFsdWUpCisgICAgeworICAg
ICAgICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZlQWRkcihhZGRyZXNzKTsKKyAgICAgICAgQVNTRVJU
KHJlc3VsdCk7CisKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSBtZW1vcnlWYWx1ZS0+YXM8TWVt
b3J5VmFsdWU+KCktPm9mZnNldCgpOworICAgICAgICBBcmcgb2Zmc2V0UmVzdWx0ID0gcmVzdWx0
LndpdGhPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvZmZzZXRSZXN1bHQpCisgICAgICAg
ICAgICByZXR1cm4gQXJnOjphZGRyKHRtcChhZGRyZXNzKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG9mZnNldFJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGdpdmVzIHlvdSB0aGUgYWRk
cmVzcyBvZiB0aGUgZ2l2ZW4gTG9hZCBvciBTdG9yZS4gSWYgaXQncyBub3QgYSBMb2FkIG9yIFN0
b3JlLCB0aGVuCisgICAgLy8gaXQgcmV0dXJucyBBcmcoKS4KKyAgICBBcmcgYWRkcihWYWx1ZSog
bWVtb3J5VmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogdmFsdWUgPSBtZW1vcnlW
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gQXJnKCk7CisKKyAgICAgICAgcmV0dXJuIGVmZmVjdGl2ZUFkZHIodmFsdWUtPmNo
aWxkcmVuKCkubGFzdCgpLCB2YWx1ZSk7CisgICAgfQorCisgICAgQXJnIGxvYWRBZGRyKFZhbHVl
KiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICBpZiAobG9hZFZhbHVlLT5vcGNvZGUoKSA9PSBM
b2FkKQorICAgICAgICAgICAgcmV0dXJuIGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW0oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6aW1tKHZh
bHVlLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgfQorCisgICAgQXJn
IGltbU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChBcmcgcmVzdWx0ID0g
aW1tKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB0
bXAodmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29t
bXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CisgICAgdm9pZCBhcHBl
bmRCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgVG1wIHJl
c3VsdCA9IHRtcChjdXJyZW50VmFsdWUpOworICAgICAgICAKKyAgICAgICAgLy8gVGhyZWUtb3Bl
cmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAgICAgT3AgYSwgYiwgYworICAgICAgICAvLyBt
ZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAgICAgYyA9IGEgT3AgYgorCisgICAgICAg
IGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7
CisgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAg
ICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChv
cGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gQSBub24tY29tbXV0YXRpdmUgb3BlcmF0aW9uIGNvdWxkIGhhdmUgYW4g
aW1tZWRpYXRlIGluIGxlZnQuCisgICAgICAgICAgICAgICAgaWYgKGltbShsZWZ0KSkgeworICAg
ICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0obGVmdCksIHRtcChyaWdodCksIHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW1tKHJpZ2h0KSAmJiBpc1Zh
bGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSB7CisgICAgICAg
ICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIGltbShyaWdodCksIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3RlIHRoYXQgbm8ga25v
d24gYXJjaGl0ZWN0dXJlIGhhcyBhIHRocmVlLW9wZXJhbmQgZm9ybSBvZiBiaW5hcnkgb3BlcmF0
aW9ucyB0aGF0IGFsc28KKyAgICAgICAgLy8gbG9hZCBmcm9tIG1lbW9yeS4gSWYgc3VjaCBhbiBh
Ym9taW5hdGlvbiBkaWQgZXhpc3QsIHdlIHdvdWxkIGhhbmRsZSBpdCBzb21ld2hlcmUgYXJvdW5k
CisgICAgICAgIC8vIGhlcmUuCisKKyAgICAgICAgLy8gVHdvLW9wZXJhbmQgZm9ybXMgbGlrZToK
KyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToK
KyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEKKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB3
ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGhhdmUgYSBmdXNlZCBsb2Fk
IG9yIGFuIGltbWVkaWF0ZQorICAgICAgICAvLyBvdmVyIHRocmVlIG9wZXJhbmQgZm9ybXMuCisg
ICAgICAgIAorICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgeworICAg
ICAgICAgICAgQXJnIGxlZnRBZGRyID0gbG9hZEFkZHIobGVmdCk7CisgICAgICAgICAgICBpZiAo
aXNWYWxpZEZvcm0ob3Bjb2RlLCBsZWZ0QWRkci5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAg
ICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkp
LCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGxl
ZnRBZGRyLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIEFyZyByaWdodEFkZHIgPSBsb2FkQWRkcihyaWdodCk7Cisg
ICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5raW5kKCksIEFyZzo6VG1w
KSkgeworICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50VmFsdWUt
PnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUs
IHJpZ2h0QWRkciwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpbW0ocmlnaHQpICYmIGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50
VmFsdWUtPnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChv
cGNvZGUsIGltbShyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAs
IEFyZzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAo
cmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50VmFsdWUtPnR5cGUoKSksIHRtcChs
ZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHJpZ2h0KSwgcmVzdWx0
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUsIENvbW11dGF0aXZp
dHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAgIGJvb2wgdHJ5QXBwZW5kU3Rv
cmVCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgZmFpbHMgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBlZmZlY3RzIGJldHdlZW4g
dGhlIExvYWQgYW5kIHRoZSBTdG9yZSB0aGF0CisgICAgICAgIC8vIGNvdWxkIGNsb2JiZXIgdGhl
IGxvYWRlZCB2YWx1ZS4gV2UgbmVlZCB0byBjaGVjayBzdWNoIHRoaW5ncyBiZWNhdXNlIHdlIGFy
ZSBlZmZlY3RpdmVseQorICAgICAgICAvLyBzaW5raW5nIHRoZSBsb2FkLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTM0CisgICAgICAgIAor
ICAgICAgICBBcmcgc3RvcmVBZGRyID0gYWRkcihjdXJyZW50VmFsdWUpOworICAgICAgICBBU1NF
UlQoc3RvcmVBZGRyKTsKKworICAgICAgICBWYWx1ZSogb3RoZXJWYWx1ZTsKKyAgICAgICAgaWYg
KGFkZHIobGVmdCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IHJpZ2h0
OworICAgICAgICBlbHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlICYmIGFkZHIo
cmlnaHQpID09IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSBsZWZ0OworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIHN0b3JlQWRkci5raW5kKCkpICYmIGltbShvdGhlclZh
bHVlKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKG90aGVyVmFsdWUpLCBzdG9y
ZUFkZHIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIHN0b3JlQWRkci5raW5kKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChvdGhl
clZhbHVlKSwgc3RvcmVBZGRyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
QWlyOjpPcGNvZGUgbW92ZUZvclR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gTW92ZTMy
OworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXM2NEJp
dCgpKTsKKyAgICAgICAgICAgIHJldHVybiBNb3ZlOworICAgICAgICBjYXNlIERvdWJsZToKKyAg
ICAgICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEFpcjo6T3Bjb2RlIHJlbGF4ZWRNb3ZlRm9yVHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2
NDoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAg
ICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBaXI6Ok9wY29k
ZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGluc3Rz
Lmxhc3QoKS5hcHBlbmQoSW5zdChvcGNvZGUsIGN1cnJlbnRWYWx1ZSwgc3RkOjpmb3J3YXJkPEFy
Z3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKyAgICAKKyAgICBJbmRleFNldDxWYWx1
ZT4gbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCisgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gdmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZh
bHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdp
dGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxv
Y2ssIEFpcjo6QmFzaWNCbG9jayo+IGJsb2NrVG9CbG9jazsKKworICAgIFVzZUNvdW50cyB1c2VD
b3VudHM7CisKKyAgICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBpbnN0czsKKyAgICBWZWN0b3I8
SW5zdD4gcHJvbG9ndWU7CisKKyAgICBWYWx1ZSogY3VycmVudFZhbHVlOworCisgICAgLy8gVGhl
IGFkZHJlc3Mgc2VsZWN0b3Igd2lsbCBtYXRjaCBhbnkgcGF0dGVybiB3aGVyZSB0aGUgaW5wdXQg
b3BlcmFuZHMgYXJlIGF2YWlsYWJsZSBhcyBUbXBzLgorICAgIC8vIEl0IGRvZXNuJ3QgY2FyZSBh
Ym91dCBzaGFyaW5nLiBJdCB3aWxsIGhhcHBpbHkgZW1pdCB0aGUgc2FtZSBhZGRyZXNzIGV4cHJl
c3Npb24gb3ZlciBhbmQgb3ZlcgorICAgIC8vIGFnYWluIHJlZ2FyZGxlc3Mgb2YgdGhlIGV4cHJl
c3Npb24ncyBjb21wbGV4aXR5LiBUaGlzIHdvcmtzIG91dCBmaW5lLCBzaW5jZSBhdCB0aGUgbWFj
aGluZQorICAgIC8vIGxldmVsLCBhZGRyZXNzIGV4cHJlc3Npb25zIGFyZSBzdXBlciBjaGVhcC4g
SG93ZXZlciwgdGhpcyBkb2VzIGhhdmUgYSBoYWNrIHRvIGF2b2lkCisgICAgLy8gInVuaG9pc3Rp
bmciIGFkZHJlc3MgZXhwcmVzc2lvbnMuCisgICAgY2xhc3MgQWRkcmVzc1NlbGVjdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEFkZHJlc3NTZWxlY3RvcihMb3dlclRvQWlyJiBsb3dlcikKKyAg
ICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhp
cy0+cm9vdCA9IHJvb3Q7CisgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIG1hdGNoIGFu
IGFkZHJlc3MgZXhwcmVzc2lvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQKKyAgICAg
ICAgICAgIC8vIGV4cGxpY2l0bHkuCisgICAgICAgICAgICByZXR1cm4gIWxvd2VyLnZhbHVlVG9U
bXBbcm9vdF07CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFjY2VwdFJvb3RMYXRlKFZhbHVl
KikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAg
ICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3ZhbHVlXSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYWNjZXB0
SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRJ
bnRlcm5hbHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoQXJndW1lbnRz
Li4uKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
ICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG93ZXIubG9ja2VkLmNvbnRhaW5zKHZh
bHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4g
YWNjZXB0T3BlcmFuZHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFj
Y2VwdE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUoQXJndW1l
bnRzLi4uKSB7IH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MShWYWx1ZSogaW5kZXgsIFZh
bHVlKiBsb2dTY2FsZSwgVmFsdWUqIGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChs
b2dTY2FsZS0+YXNJbnQoKSA8IDAgfHwgbG9nU2NhbGUtPmFzSW50KCkgPiAzKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6
aW5kZXgoCisgICAgICAgICAgICAgICAgbG93ZXIudG1wKGJhc2UpLCBsb3dlci50bXAoaW5kZXgp
LCAxIDw8IGxvZ1NjYWxlLT5hc0ludCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDIoVmFsdWUqIGJhc2UsIFZhbHVlKiBp
bmRleCwgVmFsdWUqIGxvZ1NjYWxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ5
QWRkU2hpZnQxKGluZGV4LCBsb2dTY2FsZSwgYmFzZSk7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAocmlnaHQtPmhhc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHBy
b2R1Y3Rpb24gaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHNpbmNlIHdlIGV4cGVjdAorICAgICAg
ICAgICAgICAgIC8vIExvYWQoQWRkKEB4LCBAY29uc3QxKSwgb2Zmc2V0ID0gY29uc3QyKSB0byBo
YXZlIGFscmVhZHkgYmVlbiBzdHJlbmd0aC1yZWR1Y2VkCisgICAgICAgICAgICAgICAgLy8gdG8g
TG9hZChAeCwgb2Zmc2V0ID0gY29uc3QxICsgY29uc3QyKS4KKyAgICAgICAgICAgICAgICBzZWxl
Y3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIobG93ZXIudG1wKGxlZnQpLCByaWdodC0+YXNJbnQzMigp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjppbmRleChsb3dlci50bXAobGVmdCksIGxvd2Vy
LnRtcChyaWdodCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHRyeURpcmVjdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRk
cmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAocm9vdCkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxvd2VyOworICAg
ICAgICBWYWx1ZSogcm9vdDsKKyAgICAgICAgQXJnIHNlbGVjdGVkQWRkcmVzczsKKyAgICB9Owor
ICAgIEFkZHJlc3NTZWxlY3RvciBhZGRyZXNzU2VsZWN0b3I7CisKKyAgICAvLyBCZWxvdyBpcyB0
aGUgY29kZSBmb3IgYSBsb3dlcmluZyBzZWxlY3Rvciwgc28gdGhhdCB3ZSBjYW4gcGFzcyAqdGhp
cyB0byBydW5Mb3dlcmluZ01hdGNoZXIuCisgICAgLy8gVGhpcyB3aWxsIG1hdGNoIGNvbXBsZXgg
bXVsdGktdmFsdWUgZXhwcmVzc2lvbnMsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG5vIHNoYXJpbmcu
IEZvciBleGFtcGxlLAorICAgIC8vIGl0IHdvbid0IG1hdGNoIGEgTG9hZCB0d2ljZSBhbmQgY2F1
c2UgdGhlIGdlbmVyYXRlZCBjb2RlIHRvIGRvIHR3byBsb2FkcyB3aGVuIHRoZSBvcmlnaW5hbAor
ICAgIC8vIGNvZGUganVzdCBkaWQgb25lLgorICAgIAorICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1
ZSogcm9vdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocm9vdCwgIWxvY2tlZC5jb250
YWlucyhyb290KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGFjY2VwdFJvb3RMYXRlKFZhbHVlKikgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8vIElmIG9uZSBvZiB0aGUgaW50
ZXJuYWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4gd2UgZG9uJ3Qgd2Fu
dCB0byBjYXVzZQorICAgICAgICAvLyBpdCB0byBiZSByZWNvbXB1dGVkIGFnYWluLgorICAgICAg
ICBpZiAodmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICAvLyBXZSByZXF1aXJlIGludGVybmFscyB0byBoYXZlIG9ubHkgb25lIHVz
ZSAtIHVzLgorICAgICAgICBpZiAodXNlQ291bnRzW3ZhbHVlXSAhPSAxKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhh
cmd1bWVudHMuLi4pOworICAgIH0KKyAgICBib29sIGFjY2VwdEludGVybmFscygpIHsgcmV0dXJu
IHRydWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
dm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIGxvY2tlZC5hZGQodmFsdWUpOworICAgICAgICBhY2NlcHRJ
bnRlcm5hbHNMYXRlKGFyZ3VtZW50cy4uLik7CisgICAgfQorICAgIHZvaWQgYWNjZXB0SW50ZXJu
YWxzTGF0ZSgpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIGlmIChsb2NrZWQuY29udGFpbnModmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gYWNjZXB0T3BlcmFuZHMoYXJndW1l
bnRzLi4uKTsKKyAgICB9CisgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBh
Y2NlcHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKyAgICAKKyAgICBib29sIHRyeUxv
YWQoVmFsdWUqIGFkZHJlc3MpCisgICAgeworICAgICAgICBhcHBlbmQoCisgICAgICAgICAgICBt
b3ZlRm9yVHlwZShjdXJyZW50VmFsdWUtPnR5cGUoKSksCisgICAgICAgICAgICBlZmZlY3RpdmVB
ZGRyKGFkZHJlc3MsIGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAg
ICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIENvbW11dGF0
aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2Fz
ZSBJbnQ2NDoKKyAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFkZDY0LCBDb21tdXRhdGl2ZT4obGVm
dCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlBbmQoVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC0+dHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQz
MiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5kNjQsIENvbW11
dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29s
IHRyeVN0b3JlQWRkTG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCisgICAg
eworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMyOgor
ICAgICAgICAgICAgcmV0dXJuIHRyeUFwcGVuZFN0b3JlQmluT3A8QWRkMzIsIENvbW11dGF0aXZl
PihsZWZ0LCByaWdodCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlTdG9yZUFuZExvYWQoVmFsdWUqIGxlZnQsIFZh
bHVlKiByaWdodCwgVmFsdWUqKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkp
IHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRTdG9y
ZUJpbk9wPEFuZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5U3Rv
cmUoVmFsdWUqIHZhbHVlLCBWYWx1ZSogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGFwcGVuZCht
b3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwgdG1wKHZhbHVlKSwgZWZmZWN0aXZlQWRkcihhZGRy
ZXNzLCBjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ym9vbCB0cnlUcnVuY0FyZ3VtZW50UmVnKFZhbHVlKiBhcmd1bWVudFJlZykKKyAgICB7CisgICAg
ICAgIHByb2xvZ3VlLmFwcGVuZChJbnN0KAorICAgICAgICAgICAgTW92ZSwgY3VycmVudFZhbHVl
LAorICAgICAgICAgICAgVG1wKGFyZ3VtZW50UmVnLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpLT5h
cmd1bWVudFJlZygpKSwKKyAgICAgICAgICAgIHRtcChjdXJyZW50VmFsdWUpKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5VHJ1bmMoVmFsdWUqIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRtcChjdXJyZW50VmFsdWUp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlBcmd1bWVudFJl
ZygpCisgICAgeworICAgICAgICBwcm9sb2d1ZS5hcHBlbmQoSW5zdCgKKyAgICAgICAgICAgIG1v
dmVGb3JUeXBlKGN1cnJlbnRWYWx1ZS0+dHlwZSgpKSwgY3VycmVudFZhbHVlLAorICAgICAgICAg
ICAgVG1wKGN1cnJlbnRWYWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKS0+YXJndW1lbnRSZWco
KSksCisgICAgICAgICAgICB0bXAoY3VycmVudFZhbHVlKSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlDb25zdDMyKCkKKyAgICB7CisgICAgICAgIGFw
cGVuZChNb3ZlLCBpbW0oY3VycmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlDb25zdDY0KCkKKyAgICB7
CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbTY0KGN1cnJlbnRWYWx1ZS0+YXNJbnQ2NCgp
KSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBib29sIHRyeUlkZW50aXR5KFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUodmFsdWUtPnR5cGUoKSksIGltbU9yVG1wKHZhbHVlKSwgdG1wKGN1
cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCB0cnlSZXR1cm4oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXBwZW5kKHJlbGF4ZWRN
b3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwgaW1tT3JUbXAodmFsdWUpLCBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICAgICAgYXBwZW5kKFJldCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1cmUmIHByb2NlZHVyZTsKKyAgICBDb2RlJiBj
b2RlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJUb0FpcihQ
cm9jZWR1cmUmIHByb2NlZHVyZSwgQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUocHJvY2VkdXJlLCAibG93ZXJUb0FpciIpOworICAgIExvd2VyVG9BaXIgbG93ZXJUb0Fp
cihwcm9jZWR1cmUsIGNvZGUpOworICAgIGxvd2VyVG9BaXIucnVuKCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNMb3dlclRvQWlyX2gKKyNkZWZpbmUgQjNMb3dlclRvQWlyX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQ
cm9jZWR1cmU7CituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGxvd2Vy
cyB0aGUgY3VycmVudCBCMyBwcm9jZWR1cmUgdG8gYW4gQWlyIGNvZGUuCisKK3ZvaWQgbG93ZXJU
b0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNMb3dlclRvQWlyX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRl
cm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0
Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBA
CisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5n
TWF0Y2hlcgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3Rh
cnRpbmcgYXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVt
ZW50cyB3aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0
aGlzIG1hdGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2Uh
CisKK0xvYWQgPSBMb2FkKGFkZHJlc3MpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKK0FuZCA9
IEJpdEFuZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkID0gU3RvcmUoQWRkKGxlZnQsIHJp
Z2h0KSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0b3JlKEJpdEFuZChsZWZ0LCByaWdodCks
IGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZhbHVlLCBhZGRyZXNzKQorCitUcnVuY0FyZ3VtZW50
UmVnID0gVHJ1bmMoYXJndW1lbnRSZWcgPSBBcmd1bWVudFJlZygpKQorVHJ1bmMgPSBUcnVuYyh2
YWx1ZSkKKworQXJndW1lbnRSZWcgPSBBcmd1bWVudFJlZygpCisKK0NvbnN0MzIgPSBDb25zdDMy
KCkKK0NvbnN0NjQgPSBDb25zdDY0KCkKKworIyBJdCB3b3VsZCBiZSBmYW50YXN0aWMgdG8gbm90
IGhhdmUgdG8gaGF2ZSB0aGlzIGhlcmUsIGJ1dCB0aGUgcGhpbG9zb3BoeSBvZiBvdXIgbG93ZXJp
bmcgaXMgdGhhdAorIyBpdCBzaG91bGQgYmUgc291bmQgZXZlbiBpZiB3ZSBoYXZlbid0IHJ1biBv
cHRpbWl6YXRpb25zLgorSWRlbnRpdHkgPSBJZGVudGl0eSh2YWx1ZSkKKworUmV0dXJuID0gUmV0
dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKK3sK
K30KKwordm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5wcmludCgib2Zmc2V0ID0gIiwgbV9v
ZmZzZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5l
IEIzTWVtb3J5VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEZJWE1FOiBBZGQg
YWxpYXMgYW5hbHlzaXMgdG8gdGhlc2UgYnkgYWxsb3dpbmcgdGhlIGNsaWVudCB0byBhc3NvY2lh
dGUgYW4gaW50ZWdlciByYW5nZSB0byB0aGUKKy8vIHZhbHVlLiBUd28gb3BlcmF0aW9ucyBtYXkg
YWNjZXNzIHRoZSBzYW1lIG1lbW9yeSBpZiB0aGVpciByYW5nZXMgb3ZlcmxhcHMuCisvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTM1CisKK2NsYXNzIEpTX0VY
UE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNl
IExvYWRGbG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAg
ICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNh
c2UgU3RvcmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1vcnlW
YWx1ZSgpOworCisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorICAgIHZvaWQgc2V0T2Zmc2V0KGludDMyX3Qgb2Zmc2V0KSB7IG1fb2Zmc2V0ID0gb2Zmc2V0
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFu
eSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMg
dGhlIHJldHVybmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9p
bnRlciwKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4
LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2Fk
OFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6
CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gRG91YmxlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2Fz
ZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBB
U1NFUlQodHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2Fk
cyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIs
IGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBNZW1vcnlWYWx1ZShpbmRleCwgb3Bjb2Rl
LCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMu
CisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBp
bnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
eworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQzMl90IG1fb2Zmc2V0IHsg
MCB9OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNNZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBu
YW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIE5vcDoK
KyAgICAgICAgb3V0LnByaW50KCJOb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSWRl
bnRpdHk6CisgICAgICAgIG91dC5wcmludCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ29uc3QzMjoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDMyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENvbnN0NjQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3Q2NCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAgICAgb3V0LnBy
aW50KCJDb25zdERvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3Q6
CisgICAgICAgIG91dC5wcmludCgiU3RhY2tTbG90Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFyZ3VtZW50UmVnOgorICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50UmVnIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgb3V0LnByaW50KCJG
cmFtZVBvaW50ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkOgorICAgICAgICBv
dXQucHJpbnQoIkFkZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdWI6CisgICAgICAg
IG91dC5wcmludCgiU3ViIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE11bDoKKyAgICAg
ICAgb3V0LnByaW50KCJNdWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRGl2OgorICAg
ICAgICBvdXQucHJpbnQoIkRpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGlsbERp
djoKKyAgICAgICAgb3V0LnByaW50KCJDaGlsbERpdiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBNb2Q6CisgICAgICAgIG91dC5wcmludCgiTW9kIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEJpdEFuZDoKKyAgICAgICAgb3V0LnByaW50KCJCaXRBbmQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQml0T3I6CisgICAgICAgIG91dC5wcmludCgiQml0T3IiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQml0WG9yOgorICAgICAgICBvdXQucHJpbnQoIkJpdFhvciIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTaGw6CisgICAgICAgIG91dC5wcmludCgiU2hs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNTaHI6CisgICAgICAgIG91dC5wcmludCgi
U1NociIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBaU2hyOgorICAgICAgICBvdXQucHJp
bnQoIlpTaHIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDg6CisgICAgICAgIG91
dC5wcmludCgiU0V4dDgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDE2OgorICAg
ICAgICBvdXQucHJpbnQoIlNFeHQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0
MzI6CisgICAgICAgIG91dC5wcmludCgiU0V4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFpFeHQzMjoKKyAgICAgICAgb3V0LnByaW50KCJaRXh0MzIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHJ1bmM6CisgICAgICAgIG91dC5wcmludCgiVHJ1bmMiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgRlJvdW5kOgorICAgICAgICBvdXQucHJpbnQoIkZSb3VuZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJVG9EOgorICAgICAgICBvdXQucHJpbnQoIklUb0Qi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRFRvSTMyOgorICAgICAgICBvdXQucHJpbnQo
IkRUb0kzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgb3V0
LnByaW50KCJFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOb3RFcXVhbDoKKyAg
ICAgICAgb3V0LnByaW50KCJOb3RFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBM
ZXNzVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzVGhhbiIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgICAgIG91dC5wcmlu
dCgiTGVzc0VxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoK
KyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWJvdmU6CisgICAgICAgIG91dC5wcmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQmVsb3c6CisgICAgICAgIG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZUVx
dWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIG91
dC5wcmludCgiQmVsb3dFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFo6
CisgICAgICAgIG91dC5wcmludCgiTG9hZDhaIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IExvYWQ4UzoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkOFMiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZaIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIG91dC5wcmludCgiTG9hZDE2UyIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIG91dC5wcmlu
dCgiTG9hZEZsb2F0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAg
IG91dC5wcmludCgiTG9hZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTg6Cisg
ICAgICAgIG91dC5wcmludCgiU3RvcmU4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
b3JlMTY6CisgICAgICAgIG91dC5wcmludCgiU3RvcmUxNiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlRmxvYXQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ0NhbGw6CisgICAgICAgIG91dC5wcmludCgi
Q0NhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUGF0Y2hwb2ludDoKKyAgICAgICAg
b3V0LnByaW50KCJQYXRjaHBvaW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNr
QWRkOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrQWRkIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENoZWNrU3ViOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrU3ViIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrTXVs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICBvdXQucHJpbnQo
IkNoZWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFVwc2lsb246CisgICAgICAgIG91
dC5wcmludCgiVXBzaWxvbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQaGk6CisgICAg
ICAgIG91dC5wcmludCgiUGhpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEp1bXA6Cisg
ICAgICAgIG91dC5wcmludCgiSnVtcCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCcmFu
Y2g6CisgICAgICAgIG91dC5wcmludCgiQnJhbmNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFN3aXRjaDoKKyAgICAgICAgb3V0LnByaW50KCJTd2l0Y2giKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBvdXQucHJpbnQoIlJldHVybiIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBPb3BzOgorICAgICAgICBvdXQucHJpbnQoIk9vcHMiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09wY29kZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQg
cmV0dXJucyBWb2lkLCB1c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUu
CisgICAgTm9wLAorICAgIAorICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1c2FibGUgd2l0
aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0YW50cy4gVXNl
IHRoZSBDb25zdFZhbHVlKiBjbGFzc2VzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2wg
Zmxvdywgc28gdGhhdCB3ZSBjYW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUgd2Ugd291bGQg
Y29uc3RydWN0IHRoZW0uIExhcmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRvIGNyZWF0ZS4K
KyAgICBDb25zdDMyLAorICAgIENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisKKyAgICAvLyBU
aGUgbWFnaWNhbCBzdGFjayBzbG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhl
IHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUgaW4gY29udHJv
bCBmbG93IHlvdSBwdXQgaXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0
cyBhIGRpc2pvaW50IHJhbmdlIG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNr
U2xvdFZhbHVlIGNsYXNzLgorICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBtYWdpY2FsIGFy
Z3VtZW50IHJlZ2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBv
ZiB0aGUgcHJvZ3JhbQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29udHJvbCBmbG93
IHlvdSBwdXQgaXQsIGFuZCB0aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1cmUgdGhhdCB3
ZQorICAgIC8vIGRvbid0IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFsbG9jYXRpb24g
b3IgY2FsbHMgKGVpdGhlciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQorICAgIC8vIHN0
YWNrIG9yIHByZXNlcnZpbmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3RlcikuIFVzZSB0aGUg
QXJndW1lbnRSZWdWYWx1ZSBjbGFzcy4gVGhlIHJldHVybgorICAgIC8vIHR5cGUgaXMgZWl0aGVy
IHBvaW50ZXIoKSAoZm9yIEdQUnMpIG9yIERvdWJsZSAoZm9yIEZQUnMpLgorICAgIEFyZ3VtZW50
UmVnLAorCisgICAgLy8gVGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4gcHV0IHRoaXMgYW55d2hl
cmUgaW4gY29udHJvbCBmbG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVsZCB0aGUKKyAgICAvLyBm
cmFtZSBwb2ludGVyLCB3aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29tcGlsZXIgY2hhbmdlcyB0aGUg
ZnJhbWUgcG9pbnRlciB0ZW1wb3JhcmlseSBmb3Igc29tZQorICAgIC8vIHNpbGx5IHJlYXNvbiwg
dGhlIEZyYW1lUG9pbnRlciBpbnRyaW5zaWMgd2lsbCByZXR1cm4gd2hlcmUgdGhlIGZyYW1lIHBv
aW50ZXIgKnNob3VsZCogYmUgbm90CisgICAgLy8gd2hlcmUgaXQgaGFwcGVucyB0byBiZSByaWdo
dCBub3cuCisgICAgRnJhbWVQb2ludGVyLAorCisgICAgLy8gUG9seW1vcnBoaWMgbWF0aCwgdXNh
YmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisg
ICAgRGl2LAorCisgICAgLy8gSW50ZWdlciBtYXRoLgorICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0
IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCisgICAgTW9kLAorICAgIEJpdEFu
ZCwKKyAgICBCaXRPciwKKyAgICBCaXRYb3IsCisgICAgU2hsLAorICAgIFNTaHIsCisgICAgWlNo
ciwKKworICAgIC8vIENhc3RzIGFuZCBzdWNoLgorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIElu
dDMyOgorICAgIFNFeHQ4LAorICAgIFNFeHQxNiwKKyAgICAvLyBUYWtlcyBJbnQzMiBhbmQgcmV0
dXJucyBJbnQ2NDoKKyAgICBTRXh0MzIsCisgICAgWkV4dDMyLAorICAgIC8vIFRha2VzIEludDY0
IGFuZCByZXR1cm5zIEludDMyOgorICAgIFRydW5jLAorICAgIC8vIFRha2VzIGFuZCByZXR1cm5z
IERvdWJsZToKKyAgICBGUm91bmQsCisgICAgLy8gVGFrZXMgaW50cyBhbmQgcmV0dXJucyBEb3Vi
bGU6CisgICAgSVRvRCwKKyAgICAvLyBUYWtlcyBEb3VibGUgYW5kIHJldHVybnMgSW50MzI6Cisg
ICAgRFRvSTMyLAorCisgICAgLy8gUG9seW1vcnBoaWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRo
IGFueSB2YWx1ZSB0eXBlLiBSZXR1cm5zIGludDMyIDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCisg
ICAgLy8gaXMganVzdCBFcXVhbCh4LCAwKS4KKyAgICBFcXVhbCwKKyAgICBOb3RFcXVhbCwKKyAg
ICBMZXNzVGhhbiwKKyAgICBHcmVhdGVyVGhhbiwKKyAgICBMZXNzRXF1YWwsCisgICAgR3JlYXRl
ckVxdWFsLAorCisgICAgLy8gSW50ZWdlciBjb21wYXJpc29ucy4gUmV0dXJucyBpbnQzMiAwIG9y
IDEuCisgICAgQWJvdmUsCisgICAgQmVsb3csCisgICAgQWJvdmVFcXVhbCwKKyAgICBCZWxvd0Vx
dWFsLAorCisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2Fk
IGFuZCB0aGUgbG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVz
ZSByZXR1cm4gSW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAor
ICAgIExvYWQxNlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQs
CisgICAgLy8gVGhpcyByZXR1cm5zIHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBM
b2FkLAorCisgICAgLy8gTWVtb3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZh
bHVlIGlzIHN0b3JlZC4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2Ug
YW4gSW50MzIgdmFsdWU6CisgICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0
YWtlcyBhIERvdWJsZSB2YWx1ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBw
b2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3Jl
LAorCisgICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1
c2luZyB0aGUgc3lzdGVtIEMgY2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0
aGF0IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAg
Q0NhbGwsCisKKyAgICAvLyBUaGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50
VmFsdWUgY2xhc3MuIFRoaXMgaXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAg
IC8vIGJ1dCBvbmx5IGVtaXRzIGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBU
aGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBh
c3MgYSBzdGFja21hcCBhbG9uZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFw
IGFyZ3VtZW50IG11c3QgYmUgcGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0
aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdh
bCB0byByZXF1ZXN0CisgICAgLy8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUg
b2Zmc2V0IGZyb20gdGhlIHRvcCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQor
ICAgIC8vIHN0YWNrLgorICAgIFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVz
ZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBj
b2RlIGdlbmVyYXRpb24KKyAgICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVt
aXQgc29tZSBjb2RlIGFmdGVyIHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVt
cAorICAgIC8vIGZyb20gdGhlIGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlv
dSBhbHNvIGdldCB0byBzdXBwbHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFy
ZSBub3QgYWxsb3dlZCB0byBqdW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlv
dXIgc2xvdyBwYXRoLCBzaW5jZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0
IHRoZSBleGVjdXRpb24gb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93
IGRpZG4ndCBoYXBwZW4uIEZvcgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVj
a0FkZCdzOgorICAgIC8vCisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENo
ZWNrQWRkKHgsIHkpCisgICAgLy8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRo
aXMgdG86CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRl
bnRpdHkoYSkKKyAgICAvLworICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUg
Y2FsbGJhY2tzIHVzZWQgYnkgdGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVy
ZW50CisgICAgLy8gY2FsbGJhY2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQg
ZXZlbiBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBh
ZnRlciB0aGUgZmlyc3QgQ2hlY2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291
bGQgbm90IGhhdmUgcG9zc2libHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwg
dGhlIHNlY29uZCBDaGVja0FkZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tB
ZGQsCisgICAgQ2hlY2tTdWIsCisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNp
ZGUtZXhpdHMuIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJp
ZW5kcywgdGhpcyBoYXMgYQorICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxi
YWNrLiBUaGlzIHRha2VzIGFuIEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwg
d2l0aAorICAgIC8vIGZ1bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0
b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBh
dGguCisgICAgQ2hlY2ssCisKKyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERG
RyBTU0EuCisgICAgVXBzaWxvbiwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3Mu
CisgICAgUGhpLAorCisgICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgor
ICAgIEp1bXAsCisgICAgCisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBh
bnkgdmFsdWUgdHlwZS4gQnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisg
ICAgLy8gQ29udHJvbFZhbHVlIGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWlu
ZyB0aGUgdHJ1ZSBzdWNjZXNzb3IuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0
Y2hlcyBvdmVyIGVpdGhlciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xh
c3MuCisgICAgU3dpdGNoLAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJl
cyBkb24ndCBrbm93IHRoZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBh
bnkKKyAgICAvLyB0eXBlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJu
LAorCisgICAgLy8gVGhpcyBpcyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2ls
bCBuZXZlciBnZXQgaGVyZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMK
K307CisKK2lubGluZSBib29sIGlzQ2hlY2tNYXRoKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6Cisg
ICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6T3Bjb2RlKTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBP
cmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9y
aWdpbigiLCBSYXdQb2ludGVyKG1fZGF0YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNk
ZWZpbmUgQjNPcmlnaW5faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2hv
ZXZlciBnZW5lcmF0ZXMgQjNJUiBjYW4gY2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZhbHVlcy4g
V2hlbiB5b3UgZG8gdGhpcywgQjMgd2lsbCBiZSBhYmxlIHRvCisvLyBhY2NvdW50LCBkb3duIHRv
IHRoZSBtYWNoaW5lIGNvZGUsIHdoaWNoIGluc3RydWN0aW9uIGNvcnJlc3BvbmRzIHRvIHdoaWNo
IG9yaWdpbi4gQjMKKy8vIHRyYW5zZm9ybWF0aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdpbnMgY2Fy
ZWZ1bGx5LiBJdCdzIGFuIGVycm9yIHRvIHdyaXRlIGEgdHJhbnNmb3JtYXRpb24gdGhhdAorLy8g
ZWl0aGVyIGRyb3BzIE9yaWdpbnMgb3IgbGllcyBhYm91dCB0aGVtLgorY2xhc3MgT3JpZ2luIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9IG51bGxwdHIp
CisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZGF0YTsgfQorCisgICAgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzT3JpZ2luX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50U3Bl
Y2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckdlbmVyYXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1BhdGNocG9pbnRTcGVj
aWFsOjpQYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9CisKK1BhdGNocG9pbnRTcGVjaWFsOjp+UGF0
Y2hwb2ludFNwZWNpYWwoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNo
QXJnKAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2Fs
bGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBWb2lk
KSB7CisgICAgICAgIGZvckVhY2hBcmdJbXBsKDAsIDEsIGluc3QsIGNhbGxiYWNrKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpEZWYs
IGluc3Qub3JpZ2luLT5haXJUeXBlKCkpOworICAgIGZvckVhY2hBcmdJbXBsKDAsIDIsIGluc3Qs
IGNhbGxiYWNrKTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6aXNWYWxpZChJbnN0JiBp
bnN0KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJl
dHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsKKworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgp
IDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpbnN0LmFyZ3NbMV0ua2luZCgp
ICE9IEFyZzo6VG1wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpbnN0LmFyZ3Nb
MV0uaXNUeXBlKGluc3Qub3JpZ2luLT5haXJUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMiwgaW5zdCk7Cit9CisKK2Jvb2wgUGF0Y2hw
b2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQor
eworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJldHVybiBh
ZG1pdHNTdGFja0ltcGwoMCwgMSwgaW5zdCwgYXJnSW5kZXgpOworCisgICAgaWYgKGFyZ0luZGV4
ID09IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhZG1pdHNTdGFja0lt
cGwoMCwgMiwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hw
b2ludFNwZWNpYWw6OmdlbmVyYXRlKAorICAgIEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0
LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0
Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAg
ICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAgIHVu
c2lnbmVkIG9mZnNldCA9IDE7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgIT0gVm9pZCkK
KyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tv
ZmZzZXQrK10pKTsKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBvZmZzZXQsIGluc3QsIHJl
cHMpOworICAgIAorICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKKyAgICBw
YXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAg
ICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21h
cC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0
LCBwYXJhbXMpOworCisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit2b2lk
IFBhdGNocG9pbnRTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiUGF0Y2hwb2ludCIpOworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFs
OjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
Ikxvd2VyZWQgQjM6OlBhdGNocG9pbnRWYWx1ZS4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisjZGVmaW5lIEIzUGF0Y2hw
b2ludFNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tt
YXBTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlz
IGlzIGEgc3BlY2lhbCB0aGF0IHJlY29nbml6ZXMgdGhhdCB0aGVyZSBhcmUgdHdvIHVzZXMgb2Yg
UGF0Y2hwb2ludDogVm9pZCBhbmQgYW5kIG5vbi1Wb2lkLgorLy8gSW4gdGhlIFZvaWQgY2FzZSwg
dGhlIHN5bnRheCBvZiB0aGUgQWlyIFBhdGNoIGluc3RydWN0aW9uIGlzOgorLy8KKy8vICAgICBQ
YXRjaCAmcGF0Y2hwb2ludCwgYXJncy4uLgorLy8KKy8vIFdoZXJlICJhcmdzLi4uIiBhcmUgdGhl
IGxvd2VyZWQgYXJndW1lbnRzIHRvIHRoZSBQYXRjaHBvaW50IGluc3RydWN0aW9uLiBJbiB0aGUg
bm9uLVZvaWQgY2FzZQorLy8gd2Ugd2lsbCBoYXZlOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmdzLi4uCisKK2NsYXNzIFBhdGNocG9pbnRTcGVjaWFsIDogcHVibGlj
IFN0YWNrbWFwU3BlY2lhbCB7CitwdWJsaWM6CisgICAgUGF0Y2hwb2ludFNwZWNpYWwoKTsKKyAg
ICB2aXJ0dWFsIH5QYXRjaHBvaW50U3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBm
b3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hB
cmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRl
eCkgb3ZlcnJpZGU7CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2Vu
ZXJhdGUgdGhlIGhpZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0
CisgICAgLy8gZ2VuZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAg
IENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBB
aXI6OkdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFNwZWNp
YWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGF0Y2hwb2ludFZhbHVlOjp+UGF0
Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0
YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2lu
dFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50
VmFsdWVfaAorI2RlZmluZSBCM1BhdGNocG9pbnRWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBhdGNocG9pbnRWYWx1ZSA6IHB1
YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bj
b2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsgfQorCisgICAgflBhdGNocG9pbnRW
YWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFBhdGNocG9pbnRWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGls
ZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luLCBj
aGlsZHJlbikKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50VmFsdWVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGhh
c2VTY29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ29tbW9uLmgi
CisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisjaW5j
bHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1BoYXNlU2NvcGU6OlBoYXNlU2Nv
cGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX3Byb2Nl
ZHVyZShwcm9jZWR1cmUpCisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVt
cElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBhZnRlciAiLCBwcm9jZWR1
cmUubGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBk
YXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBo
YXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhwcm9jZWR1cmUpOworfQor
CitQaGFzZVNjb3BlOjp+UGhhc2VTY29wZSgpCit7CisgICAgbV9wcm9jZWR1cmUuc2V0TGFzdFBo
YXNlTmFtZShtX25hbWUpOworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkK
KyAgICAgICAgdmFsaWRhdGUobV9wcm9jZWR1cmUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1BoYXNlU2NvcGVfaAorI2RlZmluZSBCM1BoYXNlU2NvcGVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShQcm9j
ZWR1cmUmLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRv
ZXMgdmFsaWRhdGlvbgorCitwcml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7Cisg
ICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGls
cy5oIgorI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQcm9jZWR1cmU6OlBy
b2NlZHVyZSgpCisgICAgOiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQoreworfQorCitQcm9j
ZWR1cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJs
b2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+
IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAg
QmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdU
Rjo6bW92ZShibG9jaykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJl
OjpyZXNldFJlYWNoYWJpbGl0eSgpCit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxv
Y2tzKTsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmlu
dChkZWVwRHVtcChibG9jaykpOworfQorCitWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6
YmxvY2tzSW5QcmVPcmRlcigpCit7CisgICAgcmV0dXJuIEIzOjpibG9ja3NJblByZU9yZGVyKGF0
KDApKTsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUG9zdE9y
ZGVyKCkKK3sKKyAgICByZXR1cm4gQjM6OmJsb2Nrc0luUG9zdE9yZGVyKGF0KDApKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlB1cmVOYU4uaCIKKyNpbmNsdWRlIDx3dGYvQmFn
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2Nr
OworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFByb2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUHJvY2VkdXJlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KworICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb2NlZHVyZSgpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5Qcm9jZWR1cmUoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJhc2ljQmxvY2sqIGFk
ZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFk
ZChBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOworCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFz
aWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4
XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1
YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxs
cHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGl0ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwg
bV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dCht
X2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQobV9wcm9jZWR1cmUgPT0gb3RoZXIubV9wcm9jZWR1cmUp
OworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1
bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9w
cm9jZWR1cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAg
ICAgICBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJ
blByZU9yZGVyKCk7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRlcigp
OworCisgICAgY2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBW
YWx1ZXNDb2xsZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAg
OiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3Io
KQorICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAg
ICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaXRlcmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFZhbHVlKiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+bV92YWx1ZXNbbV9pbmRleF0uZ2V0KCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEFTU0VSVChtX3Byb2NlZHVyZSA9PSBvdGhlci5tX3Byb2NlZHVyZSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgY29uc3QgUHJv
Y2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
ICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX3Byb2NlZHVyZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0K
KworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92
YWx1ZXMuc2l6ZSgpOyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFZh
bHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUHJvY2VkdXJlJiBtX3By
b2NlZHVyZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSBjb25zdCB7
IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCisgICAgLy8gVGhlIG5hbWUgaGFz
IHRvIGJlIGEgc3RyaW5nIGxpdGVyYWwsIHNpbmNlIHdlIGRvbid0IGRvIGFueSBtZW1vcnkgbWFu
YWdlbWVudCBmb3IgdGhlIHN0cmluZy4KKyAgICB2b2lkIHNldExhc3RQaGFzZU5hbWUoY29uc3Qg
Y2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIG1fbGFzdFBoYXNlTmFtZSA9IG5hbWU7CisgICAg
fQorCisgICAgY29uc3QgY2hhciogbGFzdFBoYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFz
dFBoYXNlTmFtZTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFz
aWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBt
X3ZhbHVlczsKKyAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
UHJvY2VkdXJlSW5saW5lc19oCisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQ
cm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBQ
cm9jZWR1cmU6OmFkZChBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5ldyBWYWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1
bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgIG1f
dmFsdWVzLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1JlZHVjZVN0cmVuZ3RoLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5o
IgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2Ugewor
CitjbGFzcyBSZWR1Y2VTdHJlbmd0aCB7CitwdWJsaWM6CisgICAgUmVkdWNlU3RyZW5ndGgoUHJv
Y2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgICAgICAsIG1faW5zZXJ0
aW9uU2V0KHByb2MpCisgICAgeworICAgIH0KKworICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hh
bmdlZCA9IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9j
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKG1faW5kZXggPSAwOyBt
X2luZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4KQorICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzKCk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShtX2Jsb2Nr
KTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGRvIERDRS4K
KyAgICAgICAgICAgICAgICBibG9jay0+cmVtb3ZlTm9wcygpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQgfD0gbV9jaGFuZ2VkOworICAgICAgICB9IHdo
aWxlIChtX2NoYW5nZWQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgPSBtX2Js
b2NrLT5hdChtX2luZGV4KTsKKyAgICAgICAgbV92YWx1ZS0+cGVyZm9ybVN1YnN0aXR1dGlvbigp
OworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgeworICAgICAg
ICBjYXNlIEFkZDoKKyAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKworICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQgJiYgaXNJbnQobV92
YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSBtX3ZhbHVl
LT5jaGlsZCgxKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSkpOworICAgICAgICAgICAgICAgIGlmIChuZXdTdW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3U3VtKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7
CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3U3VtOworICAgICAg
ICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGls
ZCgwKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTdWI6CisgICAgICAgICAgICBpZiAoaXNJbnQobV92
YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogbmVnYXRlZENvbnN0
YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPm5lZ0NvbnN0YW50KG1fcHJvYykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmVnYXRlZENv
bnN0YW50KTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGFkZCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1f
dmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbmVnYXRlZENvbnN0YW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShhZGQpOworICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5j
aGlsZCgwKS0+c3ViQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhT
OgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAg
Y2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6
CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAg
ICBjYXNlIFN0b3JlOiB7CisgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IG1fdmFsdWUtPmNo
aWxkcmVuKCkubGFzdCgpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpOworCisgICAgICAgICAgICBpZiAoYWRkcmVzcy0+b3Bjb2Rl
KCkgPT0gQWRkICYmIGFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSkgeworICAgICAgICAg
ICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigpOwor
ICAgICAgICAgICAgICAgIGlmICghc3VtT3ZlcmZsb3dzPGludHB0cl90PihvZmZzZXQsIG1lbW9y
eS0+b2Zmc2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBtZW1vcnktPm9m
ZnNldCgpOworICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNtYWxsT2Zmc2V0ID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zm
c2V0ID09IG9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9IG1lbW9y
eS0+Y2hpbGRyZW4oKS5sYXN0KCkgPSBhZGRyZXNzLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1lbW9yeS0+c2V0T2Zmc2V0KHNtYWxsT2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBm
dW4gY2Fub25pY2FsaXphdGlvbi4gSXQgcHVyZWx5IHJlZ3Jlc3NlcyBuYWl2ZWx5IGdlbmVyYXRl
ZCBjb2RlLiBXZSByZWx5CisgICAgICAgICAgICAvLyBvbiBjb25zdGFudCBtYXRlcmlhbGl6YXRp
b24gdG8gYmUgc21hcnQgZW5vdWdoIHRvIG1hdGVyaWFsaXplIHRoaXMgY29uc3RhbnQgdGhlIHNt
YXJ0CisgICAgICAgICAgICAvLyB3YXkuIFdlIHdhbnQgdGhpcyBjYW5vbmljYWxpemF0aW9uIGJl
Y2F1c2Ugd2Ugd2FudCB0byBrbm93IGlmIHR3byBtZW1vcnkgYWNjZXNzZXMgc2VlCisgICAgICAg
ICAgICAvLyB0aGUgc2FtZSBhZGRyZXNzLgorICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIG5ld0FkZHJlc3MgPSBhZGRyZXNzLT5h
ZGRDb25zdGFudChtX3Byb2MsIG1lbW9yeS0+b2Zmc2V0KCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld0FkZHJlc3MpOworICAg
ICAgICAgICAgICAgICAgICBhZGRyZXNzID0gbWVtb3J5LT5jaGlsZHJlbigpLmxhc3QoKSA9IG5l
d0FkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+c2V0T2Zmc2V0KDApOworICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGhhbmRsZUNvbW11dGF0aXZpdHkoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pc0NvbnN0YW50KCkgJiYgIW1fdmFsdWUtPmNo
aWxkKDEpLT5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVlLT5j
aGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhOZXdWYWx1ZShWYWx1
ZSogbmV3VmFsdWUpCisgICAgeworICAgICAgICBpZiAoIW5ld1ZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdW
YWx1ZSk7CisgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3VmFsdWUpOwor
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIFByb2NlZHVyZSYgbV9wcm9j
OworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWUqIG1fdmFsdWU7CisgICAgYm9v
bCBtX2NoYW5nZWQ7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCByZWR1
Y2VTdHJlbmd0aChQcm9jZWR1cmUmIHByb2MpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KHByb2MsICJyZWR1Y2VTdHJlbmd0aCIpOworICAgIFJlZHVjZVN0cmVuZ3RoIHJlZHVjZVN0cmVu
Z3RoKHByb2MpOworICAgIHJldHVybiByZWR1Y2VTdHJlbmd0aC5ydW4oKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1JlZHVjZVN0cmVuZ3RoX2gKKyNkZWZpbmUgQjNSZWR1
Y2VTdHJlbmd0aF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBEb2VzIHN0cmVuZ3RoIHJlZHVj
dGlvbiwgY29uc3RhbnQgZm9sZGluZywgYW5kIGNhbm9uaWNhbGl6YXRpb24uIEluIHRoZSBmdXR1
cmUgd2UgbWF5IGFsc28gaGF2ZSBpdAorLy8gZG8gQ1NFLgorCitib29sIHJlZHVjZVN0cmVuZ3Ro
KFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1JlZHVjZVN0cmVuZ3RoX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xv
dEtpbmQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhY2tTbG90S2luZCBraW5kKQor
eworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgor
ICAgICAgICBvdXQucHJpbnQoIkxvY2tlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6CisgICAgICAgIG91dC5wcmludCgiQW5vbnltb3VzIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKKyNkZWZpbmUgQjNT
dGFja1Nsb3RLaW5kX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitlbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAg
ICAvLyBBIGxvY2tlZCBzdGFjayBzbG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBh
bGwgb3RoZXJzIGJlY2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYg
dGhhdCdzIG5vdCBvYnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0
aGUgYWRkcmVzcyBvZiBhIHN0YWNrCisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAv
LyBUaGVzZSBzdGFjayBzbG90cyBjb3VsZCBzaGFyZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNs
b3RzLCBwcm92aWRlZCB0aGF0IHRoZXkgYXJlbid0IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0
aW1lLiBUaGUgY29tcGlsZXIgc3RpbGwgaGFzIHRvIGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2Ug
dGhlc2UgY2FuIGJlIGVzY2FwZWQKKyAgICAvLyBleHBsaWNpdGx5IGluIElSLgorICAgIEFub255
bW91cworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSB0aGlyZCBtb2RlLCB3aGljaCBt
ZWFucyB0aGF0IHRoZSBzdGFjayBzbG90IHdpbGwgYmUgcmVhZCBhc3luY2hyb25vdXNseQorICAg
IC8vIGFzIHdpdGggTG9ja2VkLCBidXQgbmV2ZXIgd3JpdHRlbiB0byBhc3luY2hyb25vdXNseS4g
VGhlbiwgQWlyIGNvdWxkIG9wdGltaXplIHNwaWxsaW5nIGFuZAorICAgIC8vIGZpbGxpbmcgYnkg
dHJhY2tpbmcgd2hldGhlciB0aGUgdmFsdWUgaGFkIGJlZW4gc3RvcmVkIHRvIGEgcmVhZC1vbmx5
IGxvY2tlZCBzbG90LiBJZiBpdCBoYWQsCisgICAgLy8gdGhlbiB3ZSBjYW4gcmVmaWxsIGZyb20g
dGhhdCBzbG90LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA1ODcKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzU3RhY2tTbG90VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkK
K3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2lu
ZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tT
bG90VmFsdWVfaAorI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsKK2Ns
YXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tT
bG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9i
eXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRp
b24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAgIC8v
IHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMg
bWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lkIHNl
dE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0RnJv
bUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBB
aXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tT
bG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXpl
LCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFN0YWNrU2xvdCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisg
ICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAoMCkKKyAgICB7
CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICBTdGFja1Nsb3RLaW5kIG1f
a2luZDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3Rh
Y2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzU3RhY2ttYXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTGlz
dER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N0YWNrbWFwOjpT
dGFja21hcCgpCit7Cit9CisKK1N0YWNrbWFwOjp+U3RhY2ttYXAoKQoreworfQorCit2b2lkIFN0
YWNrbWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KAor
ICAgICAgICAie3JlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLCAiLCBnZW5lcmF0b3IgPSAiLCBS
YXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwKKyAgICAgICAgIiwgY2xvYmJlcmVkID0gIiwg
bV9jbG9iYmVyZWQsICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNrbWFwX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYv
U2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
Q2hlY2tTcGVjaWFsOworY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7CisKK2Ns
YXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAg
ICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisg
ICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0
aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgorICAgICAg
ICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhl
IHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVyczsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihD
Q2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFy
ZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3RhY2ttYXAo
KTsKKyAgICB+U3RhY2ttYXAoKTsKKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0
aGUgVmFsdWUgdGhhdCB1c2VzIHRoaXMgU3RhY2ttYXAuIEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50
IHRoYXQKKyAgICAvLyByZXR1cm5zIGEgdmFsdWUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUg
cmVzdWx0IHZhbHVlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIGluZGV4IHplcm8gcmVmZXJzCisgICAg
Ly8gdG8gdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1
bWVudCBpcyBub3QgY29uc3RyYWluYWJsZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gaW4gYSBDaGVj
a0FkZCB2YWx1ZSwgaXQgd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBh
bmQgMS4gSW4gYSBDaGVjayB2YWx1ZSwgaXQKKyAgICAvLyB3b3VsZCBiZSBhbiBlcnJvciB0byBj
b25zdHJhaW4gaW5kZXggMC4gQnV0LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNh
bGxlZCwgeW91IGNhbgorICAgIC8vIGRlcGVuZCBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNl
cyBiZWluZyBmaWxsZWQgaW4uCisgICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNv
bnN0IFZhbHVlUmVwJiByZXApCisgICAgeworICAgICAgICBpZiAoaW5kZXggKyAxID49IG1fcmVw
cy5zaXplKCkpCisgICAgICAgICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBt
X3JlcHNbaW5kZXhdID0gcmVwOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4m
IHJlcHMoKSBjb25zdCB7IHJldHVybiBtX3JlcHM7IH0KKworICAgIHZvaWQgY2xvYmJlcihjb25z
dCBSZWdpc3RlclNldCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0
KTsKKyAgICB9CisKKyAgICBjb25zdCBSZWdpc3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKworICAgIHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5l
cmF0b3I+IGdlbmVyYXRvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9y
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRH
ZW5lcmF0b3IoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJh
dG9yID0gY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9p
bnRTcGVjaWFsOworICAgIGZyaWVuZCBjbGFzcyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAg
VmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0
b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV91c2Vk
UmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhlciBkdXBsaWNhdGVkIGJ5IEFp
ciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJnZSB0aGUgdXNlZCByZWdpc3Rl
cnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja21h
cF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVj
aWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
bWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2tt
YXBTcGVjaWFsKCkKK3sKK30KKworU3RhY2ttYXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVjaWFsKCkK
K3sKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYg
aW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFsdWUqIHZh
bHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNr
bWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBTdGFja21h
cFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVzZWQKKyAg
ICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJlbnRseSB3
b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8gb3IgdGhp
bmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBwcm9ibGVt
LgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVycyk7Cit9
CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0
YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgcmV0dXJuIHN0YWNr
bWFwLT5jbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJ
bXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRB
aXJBcmdzLAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJn
Q2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsK
KworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAg
ICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNT
RVJUKHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICBB
U1NFUlQoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzID09IHZhbHVlLT5jaGls
ZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7
CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAg
ICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7
CisKKyAgICAgICAgY2FsbGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNo
aWxkLT50eXBlKCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlk
SW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVk
QWlyQXJncywKKyAgICBJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVk
LgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAg
ICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOwor
CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICBBU1NF
UlQoc3RhY2ttYXApOworCisgICAgLy8gRm9yIHRoZSBJbnN0IHRvIGJlIHZhbGlkLCBpdCBuZWVk
cyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChpbnN0LmFy
Z3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgp
IC0gbnVtSWdub3JlZEIzQXJncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUmVn
YXJkbGVzcyBvZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1aXJl
bWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4gRm9yCisgICAgLy8gZXhhbXBsZSwgeW91IGNhbid0
IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29uZGl0
aW9ucyBhcyB3ZWxsIGFzIHRoZQorICAgIC8vIGFyZ3VtZW50IHR5cGVzLgorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytp
KSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEIz
QXJncyk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJn
c107CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBBcmc6OlRtcDoKKyAgICAgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgY2FzZSBBcmc6Oklt
bTY0OgorICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJn
OgorICAgICAgICAgICAgYnJlYWs7IC8vIE9LCisgICAgICAgIGNhc2UgQXJnOjpBZGRyOgorICAg
ICAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KQorICAgICAgICAgICAgICAgICYmIGFyZy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0
eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpOworCisgICAgICAgIGlmICghYXJnLmlzVHlwZSh0
eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgbnVt
YmVyIG9mIGNvbnN0cmFpbnRzIGhhcyB0byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBv
ZiBCMyBjaGlsZHJlbi4KKyAgICBBU1NFUlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkgPD0gdmFs
dWUtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBz
dXBwbGllZCBjb25zdHJhaW50cy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNB
cmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZVJl
cCYgcmVwID0gc3RhY2ttYXAtPm1fcmVwc1tpXTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFy
Z3NbaSAtIG51bUlnbm9yZWRCM0FyZ3MgKyBudW1JZ25vcmVkQWlyQXJnc107CisKKyAgICAgICAg
c3dpdGNoIChyZXAua2luZCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAg
ICAgICAgIC8vIFdlIGFscmVhZHkgdmVyaWZpZWQgdGhpcyBhYm92ZS4KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgICAgICBp
ZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAg
IGlmIChhcmcgIT0gVG1wKHJlcC5yZWcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAg
ICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnICE9
IEFyZzo6Y2FsbEFyZyhyZXAub2Zmc2V0RnJvbVNQKCkpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb25z
dGFudDoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50
YXRpb24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3Rh
Y2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIz
QXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgdW5zaWdu
ZWQgYXJnSW5kZXgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICB1bnNpZ25lZCBzdGFj
a21hcEFyZ0luZGV4ID0gYXJnSW5kZXggLSBudW1JZ25vcmVkQWlyQXJncyArIG51bUlnbm9yZWRC
M0FyZ3M7CisKKyAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSBzdGFja21hcC0+bV9yZXBzLnNp
emUoKSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNvbnN0cmFp
bnQuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBvbmx5IGFk
bWl0IHN0YWNrIGZvciBBbnkncywgc2luY2UgU3RhY2sgaXMgbm90IGEgdmFsaWQgaW5wdXQgY29u
c3RyYWludCwgYW5kIFN0YWNrQXJndW1lbnQKKyAgICAvLyB0cmFuc2xhdGVzIHRvIGEgQ2FsbEFy
ZyBpbiBBaXIuCisgICAgaWYgKHN0YWNrbWFwLT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRleF0ua2lu
ZCgpID09IFZhbHVlUmVwOjpBbnkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwoCisgICAg
R2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBJbnN0
JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkpOworfQor
CitWYWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBjb25zdCBB
cmcmIGFyZykKK3sKKyAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6VG1w
OgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnJlZyhhcmcucmVnKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgcmV0
dXJuIFZhbHVlUmVwOjpjb25zdGFudChhcmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBpZiAoYXJnLmJhc2UoKSA9PSBUbXAoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhh
cmcub2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoYXJnLmJhc2UoKSA9PSBUbXAoTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6
c3RhY2soYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcCgpOwor
ICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVj
aWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcFNwZWNp
YWxfaAorI2RlZmluZSBCM1N0YWNrbWFwU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2Rl
OyB9CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWFscyB0aGF0IGhhdmUgc3Rh
Y2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBhc2tpbmcg
Zm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBuZWVkIHRv
IGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNrbWFwLgorCitjbGFzcyBTdGFj
a21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBTdGFja21h
cFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3Rl
clNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJl
Z3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5v
dCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhh
dmUgbWFueSBzb21lCisgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgorCisg
ICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJn
cywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0
IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBib29sIGlz
VmFsaWRJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBu
dW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBhZG1pdHNT
dGFja0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51
bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCk7
CisKKyAgICAvLyBBcHBlbmRzIHRoZSByZXBzIGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0YXJ0aW5n
IHdpdGggbnVtSWdub3JlZEFyZ3MsIHRvIHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgdm9pZCBhcHBl
bmRSZXBzSW1wbChBaXI6OkdlbmVyYXRpb25Db250ZXh0JiwgdW5zaWduZWQgbnVtSWdub3JlZEFy
Z3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxWYWx1ZVJlcD4mKTsKKworICAgIHN0YXRpYyBWYWx1ZVJl
cCByZXBGb3JBcmcoQWlyOjpDb2RlJiwgY29uc3QgQWlyOjpBcmcmKTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisjZGVmaW5lIEIzU3VjY2Vzc29y
Q29sbGVjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIGdlbmVyaWMgd3JhcHBlciBhcm91bmQgbGlzdHMg
b2YgZnJlcXVlbnRlZCBibG9ja3MsIHdoaWNoIGdpdmVzIHlvdSBqdXN0IHRoZSBibG9ja3MuCisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2ssIHR5cGVuYW1lIFN1Y2Nlc3Nvckxpc3Q+Citj
bGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JDb2xsZWN0
aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgewor
ICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsg
fQorICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9saXN0
W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRleCkgeyBy
ZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3Jb
XShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJhc2ljQmxv
Y2sqJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAg
ICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAg
ICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDAp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3NvckNvbGxl
Y3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0
aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbGxlY3Rpb24gPT0gb3RoZXIubV9j
b2xsZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rp
b24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAg
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworcHJpdmF0
ZToKKyAgICBTdWNjZXNzb3JMaXN0JiBtX2xpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hD
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hD
YXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9p
ZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fY2FzZVZhbHVlLCAiLT4iLCBtX3RhcmdldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
U3dpdGNoQ2FzZV9oCisjZGVmaW5lIEIzU3dpdGNoQ2FzZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0
Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1
ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUo
Y2FzZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0K
KworICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0K
KyAgICBGcmVxdWVudGVkQmxvY2sgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0K
KyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmJs
b2NrKCk7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBpbnQ2NF90IG1fY2FzZVZhbHVlOworICAgIEZyZXF1ZW50ZWRCbG9jayBtX3Rh
cmdldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNo
VmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJl
bW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgRnJlcXVlbnRlZEJsb2NrIHJlc3VsdEJs
b2NrID0gbV9zdWNjZXNzb3JzW2luZGV4XTsKKyAgICBpbnQ2NF90IHJlc3VsdFZhbHVlID0gbV92
YWx1ZXNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFz
dCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgbV92YWx1ZXNbaW5kZXhd
ID0gbV92YWx1ZXMubGFzdCgpOworICAgIG1fdmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1
cm4gU3dpdGNoQ2FzZShyZXN1bHRWYWx1ZSwgcmVzdWx0QmxvY2spOworfQorCit2b2lkIFN3aXRj
aFZhbHVlOjphcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAg
bV9zdWNjZXNzb3JzLmFwcGVuZChtX3N1Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3Nv
cnNbbV9zdWNjZXNzb3JzLnNpemUoKSAtIDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBt
X3ZhbHVlcy5hcHBlbmQoc3dpdGNoQ2FzZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNo
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBk
ZXN0cnVjdGl2ZWx5IG92ZXJyaWRlcyBDb250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91
dC5wcmludChsaXN0RHVtcCgqdGhpcyksICIsIGZhbGxUaHJvdWdoID0gIiwgZmFsbFRocm91Z2go
KSk7Cit9CisKK1N3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2lu
IG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRy
b2xWYWx1ZShpbmRleCwgU3dpdGNoLCBWb2lkLCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNzb3Jz
LmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZh
bHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVi
bGljIENvbnRyb2xWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFs
dWUoKTsKKworICAgIC8vIG51bUNhc2VWYWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgor
ICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCk7IH0KKworICAgIC8vIFRoZSBzdWNjZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0
aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgCisgICAgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEZy
ZXF1ZW50ZWRCbG9jayBmYWxsVGhyb3VnaCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5s
YXN0KCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKCkgeyByZXR1cm4gc3Vj
Y2Vzc29ycygpLmxhc3QoKTsgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG51bUNhc2VWYWx1ZXMoKTsgfQorICAgIFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gU3dpdGNoQ2FzZShjYXNlVmFsdWUoaW5kZXgpLCBz
dWNjZXNzb3IoaW5kZXgpKTsKKyAgICB9CisgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcltdKHVuc2ln
bmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9
CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigp
CisgICAgICAgICAgICA6IG1fc3dpdGNoKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgo
MCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3dpdGNo
VmFsdWUmIHN3aXRjaFZhbHVlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9zd2l0
Y2goJnN3aXRjaFZhbHVlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yKigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3N3aXRjaC0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
aW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChtX3N3aXRjaCA9PSBvdGhlci5tX3N3aXRjaCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBjb25zdCBTd2l0Y2hWYWx1ZSogbV9zd2l0Y2g7CisgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIHR5cGVkZWYgaXRlcmF0b3IgY29uc3Rf
aXRlcmF0b3I7CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIGNhc2UgYW5kIHJl
b3JkZXJzIHRoaW5ncyBhIGJpdC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0aGUgY2FzZXMgZnJvbSAw
IHRvIE4sCisgICAgLy8gdGhlbiB5b3UgY2FuIGtlZXAgaXRlcmF0aW5nIGFmdGVyIHRoaXMgc28g
bG9uZyBhcyB5b3UgcmV2aXNpdCB0aGlzIHNhbWUgaW5kZXggKHdoaWNoIHdpbGwgbm93CisgICAg
Ly8gY29udGFpbiBzb21lIG90aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJlbW92ZXMgdGhlIGNhc2Ug
dGhhdCB3YXMgcmVtb3ZlZC4KKyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNhc2UodW5zaWduZWQgaW5k
ZXgpOworCisgICAgdm9pZCBhcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmKTsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3dpdGNoVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3Vn
aCk7CisKKyAgICBWZWN0b3I8aW50NjRfdD4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N3
aXRjaFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgb3V0LnByaW50KCJWb2lkIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEludDY0OgorICAgICAgICBvdXQucHJpbnQoIkludDY0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJE
b3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lk
LAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJvb2wg
aXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUgPT0g
SW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJldHVy
biB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlclR5cGUoKQoreworICAg
IGlmIChpczMyQml0KCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICByZXR1cm4gSW50NjQ7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xh
c3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
QjM6OlR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVcHNpbG9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVXBzaWxvblZhbHVl
Ojp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJeIiwgbV9waGktPmluZGV4
KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2lsb25WYWx1ZV9oCisjZGVmaW5l
IEIzVXBzaWxvblZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Zh
bHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBVcHNpbG9u
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVwc2lsb247IH0KKworICAgIH5VcHNp
bG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAg
VXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUs
IFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2
YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUt
PnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQorCisgICAgVmFsdWUqIG1fcGhpOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNVcHNpbG9uVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVc2VDb3VudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1VzZUNvdW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVc2VDb3VudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK1VzZUNvdW50czo6VXNlQ291bnRzKFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgIDog
bV9jb3VudHMocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKK3sKKyAgICBmb3IgKFZhbHVlKiB2
YWx1ZSA6IHByb2NlZHVyZS52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6
IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgbV9jb3VudHNbY2hpbGRdKys7CisgICAg
fQorfQorCitVc2VDb3VudHM6On5Vc2VDb3VudHMoKQoreworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1VzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vz
ZUNvdW50c19oCisjZGVmaW5lIEIzVXNlQ291bnRzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBVc2VD
b3VudHMgeworcHVibGljOgorICAgIFVzZUNvdW50cyhQcm9jZWR1cmUmKTsKKyAgICB+VXNlQ291
bnRzKCk7CisKKyAgICB1bnNpZ25lZCBvcGVyYXRvcltdKFZhbHVlKiB2YWx1ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2NvdW50c1t2YWx1ZV07CisgICAgfQorcHJpdmF0ZToKKyAg
ICBJbmRleE1hcDxWYWx1ZSwgdW5zaWduZWQ+IG1fY291bnRzOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNV
c2VDb3VudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1ZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNBcmd1bWVu
dFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFs
aWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNv
bnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQor
ICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZp
bmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24s
IHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisgICAgdm9pZCBy
dW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzOworICAgICAg
ICBIYXNoU2V0PFZhbHVlKj4gdmFsdWVJblByb2M7CisgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2
YWx1ZUluQmxvY2s7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2Vk
dXJlKSB7CisgICAgICAgICAgICBibG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogKmJsb2NrKQorICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQo
dmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2Nl
ZHVyZS52YWx1ZXMoKSkKKyAgICAgICAgICAgIHZhbHVlSW5Qcm9jLmFkZCh2YWx1ZSk7CisKKyAg
ICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykKKyAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlSW5CbG9jay5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJbkJsb2NrKQorICAgICAgICAgICAgVkFMSURB
VEUodmFsdWVJblByb2MuY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOworCisgICAg
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2MpIHsKKyAgICAgICAgICAgIGZvciAo
VmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWVJblByb2MuY29udGFpbnMoY2hpbGQpLCAoIkF0ICIsICp2YWx1ZSwgIi0+IiwgcG9p
bnRlckR1bXAoY2hpbGQpKSk7CisgICAgICAgIH0KKworICAgICAgICBIYXNoTWFwPEJhc2ljQmxv
Y2sqLCBIYXNoU2V0PEJhc2ljQmxvY2sqPj4gYWxsUHJlZGVjZXNzb3JzOworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICBWQUxJREFURShibG9j
ay0+c2l6ZSgpID49IDEsICgiQXQgIiwgKmJsb2NrKSk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkKKyAgICAgICAgICAgICAgICBW
QUxJREFURSghQ29udHJvbFZhbHVlOjphY2NlcHRzKGJsb2NrLT5hdChpKS0+b3Bjb2RlKCkpLCAo
IkF0ICIsICpibG9jay0+YXQoaSkpKTsKKyAgICAgICAgICAgIFZBTElEQVRFKENvbnRyb2xWYWx1
ZTo6YWNjZXB0cyhibG9jay0+bGFzdCgpLT5vcGNvZGUoKSksICgiQXQgIiwgKmJsb2NrLT5sYXN0
KCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgICAgICBhbGxQcmVk
ZWNlc3NvcnMuYWRkKHN1Y2Nlc3NvciwgSGFzaFNldDxCYXNpY0Jsb2NrKj4oKSkuaXRlcmF0b3It
PnZhbHVlLmFkZChibG9jayk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAg
ICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaywgIi0+
IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdG90YWxseSBhbGxvd3MgZGVhZCBjb2RlLgorICAg
ICAgICBmb3IgKGF1dG8mIGVudHJ5IDogYWxsUHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBlbnRyeS5rZXk7CisgICAgICAgICAgICBIYXNoU2V0PEJh
c2ljQmxvY2sqPiYgcHJlZGVjZXNzb3JzID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICBWQUxJ
REFURShwcmVkZWNlc3NvcnMgPT0gc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMoKSwgKCJBdCAiLCAq
c3VjY2Vzc29yKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1f
cHJvY2VkdXJlLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZh
bHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIFZBTElEQVRFKGNoaWxkLT50eXBlKCkg
IT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUsICItPiIsICpjaGlsZCkpOworICAgICAgICAgICAgc3dp
dGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9wOgorICAgICAgICAg
ICAgY2FzZSBKdW1wOgorICAgICAgICAgICAgY2FzZSBPb3BzOgorICAgICAgICAgICAgICAgIFZB
TElEQVRFKCF2YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElkZW50aXR5OgorICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnN0MzI6CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnN0NjQ6
CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50
NjQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICAgICAgY2FzZSBG
cmFtZVBvaW50ZXI6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJl
bigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50
eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAgICAgICAgICAgICAg
VkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICAodmFsdWUtPmFzPEFyZ3Vt
ZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkuaXNHUFIoKSA/IHBvaW50ZXJUeXBlKCkgOiBE
b3VibGUpCisgICAgICAgICAgICAgICAgICAgID09IHZhbHVlLT50eXBlKCksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFkZDoKKyAg
ICAgICAgICAgIGNhc2UgU3ViOgorICAgICAgICAgICAgY2FzZSBNdWw6CisgICAgICAgICAgICBj
YXNlIERpdjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9
PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50
eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5
cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICAgICAgY2FzZSBNb2Q6CisgICAg
ICAgICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgICAg
ICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQo
MSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShp
c0ludCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgU2hsOgorICAgICAgICAgICAgY2FzZSBTU2hyOgorICAg
ICAgICAgICAgY2FzZSBaU2hyOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1D
aGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9
PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0lu
dCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgU0V4dDg6CisgICAgICAgICAgICBjYXNlIFNFeHQxNjoKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlw
ZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgICAgIGNhc2UgWkV4
dDMyOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEs
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxk
KDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHJ1bmM6CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQ2
NCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlw
ZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBGUm91bmQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
Pm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBEb3VibGUsICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBEb3VibGUsICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IElUb0Q6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0g
MSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBEb3VibGUsICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERUb0kzMjoKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IERv
dWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgIGNhc2UgTm90RXF1YWw6Cisg
ICAgICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoK
KyAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICAgICAgY2FzZSBHcmVhdGVyRXF1
YWw6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQo
MCktPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBYm92
ZToKKyAgICAgICAgICAgIGNhc2UgQmVsb3c6CisgICAgICAgICAgICBjYXNlIEFib3ZlRXF1YWw6
CisgICAgICAgICAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSkt
PnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0lu
dCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAg
ICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAg
ICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExv
YWRGbG9hdDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9
PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBEb3VibGUsICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWQ6Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5
cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAg
Y2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJl
bigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUo
KSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlw
ZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBEb3VibGUsICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkg
PT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gcG9pbnRlclR5
cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENDYWxsOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB3
aWxkY2FyZC4gWW91IGNhbiBwYXNzIGFueSBub24tdm9pZCBhcmd1bWVudHMgYW5kIHlvdSBjYW4g
c2VsZWN0IGFueQorICAgICAgICAgICAgICAgIC8vIHJldHVybiB0eXBlLgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQYXRjaHBvaW50OgorICAgICAgICAgICAgICAg
IHZhbGlkYXRlU3RhY2ttYXAodmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAg
ICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1D
aGlsZHJlbigpID49IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURB
VEUoaXNJbnQodmFsdWUtPmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpKSwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ2hlY2s6CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+YXM8VXBzaWxvblZh
bHVlPigpLT5waGkoKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKHZhbHVlLT5hczxVcHNpbG9uVmFsdWU+KCkt
PnBoaSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgIGNhc2UgUmV0dXJuOgor
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBW
b2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBTd2l0Y2g6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShp
c0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCitwcml2YXRlOgorICAgIHZvaWQgdmFsaWRhdGVTdGFja21hcChWYWx1ZSogdmFsdWUpCisg
ICAgeworICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAg
ICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPj0gc3RhY2ttYXAtPnJlcHMoKS5z
aXplKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGFja21hcC0+cmVwcygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBWYWx1
ZVJlcCYgcmVwID0gc3RhY2ttYXAtPnJlcHMoKVtpXTsKKyAgICAgICAgICAgIGlmIChyZXAua2lu
ZCgpICE9IFZhbHVlUmVwOjpSZWdpc3RlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGlmIChyZXAucmVnKCkuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFU
RShpc0ludCh2YWx1ZS0+Y2hpbGQoaSktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNGbG9hdCh2YWx1ZS0+Y2hp
bGQoaSktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNo
YXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0
IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAg
ICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5n
UHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJCMyBWQUxJREFUSU9OIEZB
SUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgi
LCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJp
bnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgIEFm
dGVyICIsIG1fcHJvY2VkdXJlLmxhc3RQaGFzZU5hbWUoKSwgIlxuIik7CisgICAgICAgICAgICBm
YWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGRh
dGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBpZiAobV9kdW1wQmVmb3JlKSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV9wcm9jZWR1cmUubGFzdFBoYXNlTmFtZSgpLCAi
OlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZGF0YUxvZygiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFMb2co
bV9wcm9jZWR1cmUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAg
ICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5jdGlv
biwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgUHJvY2Vk
dXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7Cit9OworCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVy
KHByb2NlZHVyZSwgZHVtcEJlZm9yZSk7CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1ZhbGlkYXRlX2gKKyNkZWZpbmUgQjNWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJl
OworCit2b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUgPSBu
dWxscHRyKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IFZhbHVlOjpkdW1wUHJlZml4ID0gIkAiOworCitW
YWx1ZTo6flZhbHVlKCkKK3sKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShW
YWx1ZSogdmFsdWUpCit7CisgICAgLy8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBp
bi1wbGFjZSByZXBsYWNlbWVudCBvZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdp
dGgKKyAgICAvLyBhIHBsYWluIElkZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBv
ZiB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBw
cmV2aW91cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0
eSBWYWx1ZSBpbiBwbGFjZS4KKworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBU
eXBlIHR5cGUgPSBtX3R5cGU7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJh
c2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBl
ID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAg
bmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgSWRlbnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOwor
CisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhO
b3AoKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBPcmlnaW4gb3JpZ2lu
ID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKworICAg
IHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKworICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIE5v
cCwgVm9pZCwgb3JpZ2luKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7Cit9CisKK3ZvaWQg
VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVt
cFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6OmRlZXBEdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIiAiLCAqdGhpcywgIiA9ICIs
IG1fb3Bjb2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21t
YTsKKyAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVuKCkpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAgIGlmIChtX29yaWdpbikKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBtX29yaWdpbik7CisKKyAgICB7CisgICAgICAgIFN0cmluZ1By
aW50U3RyZWFtIHN0cmluZ091dDsKKyAgICAgICAgZHVtcE1ldGEoc3RyaW5nT3V0KTsKKyAgICAg
ICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgICAgIGlmIChz
dHJpbmcubGVuZ3RoKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cmluZyk7Cisg
ICAgfQorCisgICAgeworICAgICAgICBDU3RyaW5nIHN0cmluZyA9IHRvQ1N0cmluZyhlZmZlY3Rz
KCkpOworICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBzdHJpbmcpOworICAgIH0KKworICAgIG91dC5wcmludCgiKSIpOworfQorCitWYWx1
ZSogVmFsdWU6Om5lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0Cit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK1ZhbHVlKiBWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJf
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmFsdWUqIFZhbHVlOjphZGRD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK1ZhbHVlKiBWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25z
dAoreworICAgIHJldHVybiBudWxscHRyOworfQorCitFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkg
Y29uc3QKK3sKKyAgICBFZmZlY3RzIHJlc3VsdDsKKyAgICBzd2l0Y2ggKG9wY29kZSgpKSB7Cisg
ICAgY2FzZSBOb3A6CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIENvbnN0MzI6CisgICAg
Y2FzZSBDb25zdDY0OgorICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgY2FzZSBTdGFja1Nsb3Q6
CisgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICBjYXNl
IEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIENoaWxsRGl2Ogor
ICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2Fz
ZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoK
KyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgU0V4dDMyOgorICAg
IGNhc2UgWkV4dDMyOgorICAgIGNhc2UgVHJ1bmM6CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2Fz
ZSBJVG9EOgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RF
cXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2Fz
ZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAg
ICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6
CisgICAgY2FzZSBQaGk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGl2OgorICAgICAgICBy
ZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNlIExv
YWQxNlM6CisgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgY2FzZSBMb2FkOgorICAgICAgICAvLyBG
SVhNRTogTWVtb3J5VmFsdWUgc2hvdWxkIGhhdmUgYSBIZWFwUmFuZ2UuCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzUKKyAgICAgICAgcmVz
dWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBl
bmRlbnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNl
IFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAg
IC8vIEZJWE1FOiBNZW1vcnlWYWx1ZSBzaG91bGQgaGF2ZSBhIEhlYXBSYW5nZS4KKyAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzNQorICAgICAg
ICByZXN1bHQud3JpdGVzID0gSGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcmVzdWx0LmNvbnRy
b2xEZXBlbmRlbnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENDYWxsOgorICAg
IGNhc2UgUGF0Y2hwb2ludDoKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3Ao
KTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgIHJl
c3VsdC5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRl
bnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2Ug
Q2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICBjYXNlIENoZWNrOgorICAgICAgICBy
ZXN1bHQuZXhpdHNTaWRld2F5cyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVXBz
aWxvbjoKKyAgICAgICAgcmVzdWx0LndyaXRlc1NTQVN0YXRlID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBKdW1wOgorICAgIGNhc2UgQnJhbmNoOgorICAgIGNhc2UgU3dpdGNoOgor
ICAgIGNhc2UgUmV0dXJuOgorICAgIGNhc2UgT29wczoKKyAgICAgICAgcmVzdWx0LnRlcm1pbmFs
ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgVmFsdWU6OnBlcmZvcm1TdWJzdGl0dXRpb24oKQoreworICAgIGZvciAoVmFsdWUqJiBj
aGlsZCA6IGNoaWxkcmVuKCkpIHsKKyAgICAgICAgd2hpbGUgKGNoaWxkLT5vcGNvZGUoKSA9PSBJ
ZGVudGl0eSkKKyAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPmNoaWxkKDApOworICAgIH0KK30K
Kwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdAoreworfQorCitUeXBl
IFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQoreworICAg
IHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEFkZDoKKyAg
ICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENoaWxs
RGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6Cisg
ICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2Ug
WlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBD
aGVja011bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNlIEZy
YW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHBvaW50ZXJUeXBlKCk7CisgICAgY2FzZSBTRXh0
ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBjYXNlIFRydW5jOgorICAgIGNhc2UgRFRvSTMyOgor
ICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgor
ICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVh
dGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJv
dmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAg
ICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0Owor
ICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsK
KyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gK
KyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
QXJnLmgiCisjaW5jbHVkZSAiQjNFZmZlY3RzLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKyNp
bmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgUHJvY2VkdXJl
OworY2xhc3MgU3RhY2ttYXA7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFZhbHVlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0
OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBzdGF0
aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+
VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsg
fQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0
IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggSWRlbnRpdHkgb3IgTm9wLgorICAgIE9wY29kZSBv
cGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNp
Z25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hp
bGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisK
KyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4uc2l6
ZSgpOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBlIHVzaW5nIHRoZSBvcGNvZGUu
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICAvLyBUaGlz
IGlzIHVzZWZ1bCB3aGVuIGxvd2VyaW5nLiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IHZhbGlkIGZv
ciBub24tdm9pZCB2YWx1ZXMuCisgICAgQWlyOjpBcmc6OlR5cGUgYWlyVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIEFpcjo6QXJnOjp0eXBlRm9yQjNUeXBlKHR5cGUoKSk7IH0KKworICAgIEFkamFjZW5j
eUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGph
Y2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAg
IHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdpdGhO
b3AoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVl
cER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBjYXN0
IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92aWRl
ZCB0aGF0IHdlIGhhdmUgYQorICAgIC8vIEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86Cisg
ICAgLy8KKyAgICAvLyBpZiAoQXJndW1lbnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1ZS0+
YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkgeworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9Cisg
ICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAhPSBB
cmd1bWVudFJlZy4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisgICAg
Ly8gaWYgVDo6YWNjZXB0cyhvcGNvZGUoKSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBj
b25zdCBUKiBhcygpIGNvbnN0OworCisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisgICAg
CisgICAgdmlydHVhbCBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29uc3Q7CisgICAg
dmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29u
c3Q7CisgICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90
aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBW
YWx1ZSogb3RoZXIpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGlu
dDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsK
KyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSW50KCkgY29uc3Q7
CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnQoaW50NjRfdCB2YWx1
ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludFB0cigpIGNvbnN0OworICAgIGludHB0cl90IGFz
SW50UHRyKCkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OworICAgIGRvdWJs
ZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgRWZmZWN0cyBlZmZlY3RzKCkgY29uc3Q7CisKKyAg
ICBTdGFja21hcCogc3RhY2ttYXAoKTsKKworICAgIC8vIE1ha2VzIHN1cmUgdGhhdCBub25lIG9m
IHRoZSBjaGlsZHJlbiBhcmUgSWRlbnRpdHkncy4gSWYgYSBjaGlsZCBwb2ludHMgdG8gSWRlbnRp
dHksIHRoaXMgd2lsbAorICAgIC8vIHJlcG9pbnQgaXQgYXQgdGhlIElkZW50aXR5J3MgY2hpbGQu
IEZvciBzaW1wbGljaXR5LCB0aGlzIHdpbGwgZm9sbG93IGFyYml0cmFyaWx5IGxvbmcgY2hhaW5z
CisgICAgLy8gb2YgSWRlbnRpdHkncy4KKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oKTsK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCitwcm90
ZWN0ZWQ6CisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUuCisgICAgLy8g
VGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseToKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChp
bmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUp
CisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0
Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMg
Zm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNvZGUgaGFzIG5v
IGNoaWxkcmVuOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkK
KyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAg
ICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlz
IGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bj
b2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAg
ICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmln
aW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4u
LiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMg
dGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0
IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlw
ZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQor
ICAgIHsKKyAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgdmFyYXJncy4KKyAgICBleHBs
aWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmln
aW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbihj
aGlsZHJlbikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBUeXBlIHR5cGVG
b3IoT3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCk7CisKKyAgICAvLyBUaGlzIGdyb3VwIG9mIGZp
ZWxkcyBpcyBhcnJhbmdlZCB0byBmaXQgaW4gNjQgYml0cy4KKyAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIE9wY29kZSBtX29wY29kZTsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICAKKyAgICBPcmln
aW4gbV9vcmlnaW47CisgICAgQWRqYWNlbmN5TGlzdCBtX2NoaWxkcmVuOworCitwdWJsaWM6Cisg
ICAgQmFzaWNCbG9jayogb3duZXIgeyBudWxscHRyIH07IC8vIGNvbXB1dGVkIGxhemlseS4KK307
CisKK2NsYXNzIERlZXBWYWx1ZUR1bXAgeworcHVibGljOgorICAgIERlZXBWYWx1ZUR1bXAoY29u
c3QgVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1fdmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVlLT5kZWVwRHVtcChvdXQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBjb25zdCBWYWx1ZSogbV92YWx1ZTsKK307CisKK2lubGluZSBEZWVwVmFsdWVEdW1w
IGRlZXBEdW1wKGNvbnN0IFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVt
cCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNWYWx1ZUlubGluZXNfaAorI2RlZmluZSBCM1ZhbHVlSW5saW5lc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjND
b25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
Q29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCogVmFsdWU6OmFz
KCkKK3sKKyAgICBpZiAoVDo6YWNjZXB0cyhvcGNvZGUoKSkpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUKj4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Citjb25zdCBUKiBWYWx1ZTo6YXMoKSBjb25zdAoreworICAgIHJldHVybiBjb25z
dF9jYXN0PFZhbHVlKj4odGhpcyktPmFzPFQ+KCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpp
c0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CisgICAgY2FzZSBD
b25zdDMyOgorICAgIGNhc2UgQ29uc3Q2NDoKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVy
biAhIWFzPENvbnN0MzJWYWx1ZT4oKTsKK30KKworaW5saW5lIGludDMyX3QgVmFsdWU6OmFzSW50
MzIoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdDMyVmFsdWU+KCktPnZhbHVlKCk7Cit9
CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEh
YXM8Q29uc3Q2NFZhbHVlPigpOworfQorCitpbmxpbmUgaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKwor
aW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMy
KCkgfHwgaGFzSW50NjQoKTsKK30KKworaW5saW5lIGludDY0X3QgVmFsdWU6OmFzSW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSA/IGFzSW50MzIoKSA6IGFzSW50NjQoKTsKK30K
KworaW5saW5lIGJvb2wgVmFsdWU6OmlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGhhc0ludCgpICYmIGFzSW50KCkgPT0gdmFsdWU7Cit9CisKK2lubGluZSBib29sIFZh
bHVlOjpoYXNJbnRQdHIoKSBjb25zdAoreworICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgIHJl
dHVybiBoYXNJbnQ2NCgpOworICAgIHJldHVybiBoYXNJbnQzMigpOworfQorCitpbmxpbmUgaW50
cHRyX3QgVmFsdWU6OmFzSW50UHRyKCkgY29uc3QKK3sKKyAgICBpZiAoaXM2NEJpdCgpKQorICAg
ICAgICByZXR1cm4gYXNJbnQ2NCgpOworICAgIHJldHVybiBhc0ludDMyKCk7Cit9CisKK2lubGlu
ZSBib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0
RG91YmxlVmFsdWU+KCk7Cit9CisKK2lubGluZSBkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKwor
aW5saW5lIFN0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQoreworICAgIGlmIChDaGVja1ZhbHVl
KiBjaGVjayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmY2hlY2stPnN0YWNr
bWFwOworICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhczxQYXRjaHBvaW50
VmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2ludC0+c3RhY2ttYXA7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVJbmxpbmVzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1
ZVJlcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tp
bmQpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBBbnk6CisgICAgY2FzZSBTb21l
UmVnaXN0ZXI6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlZ2lzdGVyOgorICAgICAgICBv
dXQucHJpbnQoIigiLCByZWcoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3Rh
Y2s6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21GUCgpLCAiKSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTdGFja0FyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIigi
LCBvZmZzZXRGcm9tU1AoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3Rh
bnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIHZhbHVlKCksICIpIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZhbHVlUmVw
OjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBWYWx1ZVJlcDo6
QW55OgorICAgICAgICBvdXQucHJpbnQoIkFueSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3Rl
ciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAg
ICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFs
dWVSZXA6OlN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQo
IlN0YWNrQXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OkNv
bnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFs
dWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHVzZSB0aGlzIGNsYXNzIHRvIGRlc2NyaWJl
IHZhbHVlIHJlcHJlc2VudGF0aW9ucyBhdCBzdGFja21hcHMuIEl0J3MgdXNlZCBib3RoIHRvIGZv
cmNlIGEKKy8vIHJlcHJlc2VudGF0aW9uIGFuZCB0byBnZXQgdGhlIHJlcHJlc2VudGF0aW9uLiBX
aGVuIHRoZSBCMyBjbGllbnQgZm9yY2VzIGEgcmVwcmVzZW50YXRpb24sIHdlIHNheQorLy8gdGhh
dCBpdCdzIGFuIGlucHV0LiBXaGVuIEIzIHRlbGxzIHRoZSBjbGllbnQgd2hhdCByZXByZXNlbnRh
dGlvbiBpdCBwaWNrZWQsIHdlIHNheSB0aGF0IGl0J3MgYW4KKy8vIG91dHB1dC4KKworY2xhc3Mg
VmFsdWVSZXAgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIC8vIEFzIGFuIGlu
cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgY2FuIHBpY2sgYW55IHJlcHJl
c2VudGF0aW9uLiBBcyBhbgorICAgICAgICAvLyBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMg
bWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93LiBUaGlzIHdpbGwgb25seSBhcmlzZSBmb3IgdGhlCisg
ICAgICAgIC8vIHJpZ2h0IG9wZXJhbmQgKGkuZS4gY2hpbGQoMSkpIG9mIGEgQ2hlY2tNdWwuCisg
ICAgICAgIEFueSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIuIEl0IGNvdWxkIGJlIGEK
KyAgICAgICAgLy8gcmVnaXN0ZXIgdGhhdCB0aGlzIGNsYWltcyB0byBjbG9iYmVyIQorICAgICAg
ICBTb21lUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24s
IHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdpc3Rlci4gQXMgYW4gb3V0cHV0CisgICAgICAg
IC8vIHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgcmVnaXN0ZXIgQjMgcGlja2Vk
LgorICAgICAgICBSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tlZC4gSXQncyBub3Qg
YSB2YWxpZAorICAgICAgICAvLyBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgU3RhY2ss
CisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIHRo
ZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhlIGFyZ3VtZW50IGFyZWEgYXQgc29tZQorICAgICAgICAv
LyBvZmZzZXQuCisgICAgICAgIC8vIEZJWE1FOiBUaGUgU3RhY2ttYXBTcGVjaWFsIGNsYXNzIG5l
ZWRzIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQgdGhlc2UgZG9uJ3QgdHVybiBpbnRvCisg
ICAgICAgIC8vIEFpciBvcGVyYW5kcy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDU0MAorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAg
ICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIz
IGNvbnN0YW50LWZvbGRlZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAg
ICAKKyAgICBWYWx1ZVJlcCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQor
CisgICAgZXhwbGljaXQgVmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0
ZXIpCisgICAgeworICAgICAgICB1LnJlZyA9IHJlZzsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFs
dWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXAocmVnKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qgb2Zmc2V0RnJvbUZQ
KQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC51Lm9mZnNldEZyb21GUCA9IG9mZnNldEZyb21GUDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3Rh
Y2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9tU1ApCisgICAgeworICAgICAgICBWYWx1ZVJl
cCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFja0FyZ3VtZW50OworICAgICAg
ICByZXN1bHQudS5vZmZzZXRGcm9tU1AgPSBvZmZzZXRGcm9tU1A7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGludDY0X3QgdmFs
dWUpCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnREb3Vi
bGUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFu
dChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1
cm4gdS5yZWc7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gdS5v
ZmZzZXRGcm9tRlA7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2tBcmd1bWVudCk7CisgICAgICAg
IHJldHVybiB1Lm9mZnNldEZyb21TUDsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICBy
ZXR1cm4gdS52YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IEtpbmQgbV9raW5kOworICAgIHVuaW9uIFUgeworICAgICAgICBSZWcgcmVnOworICAgICAgICBp
bnRwdHJfdCBvZmZzZXRGcm9tRlA7CisgICAgICAgIGludHB0cl90IG9mZnNldEZyb21TUDsKKyAg
ICAgICAgaW50NjRfdCB2YWx1ZTsKKworICAgICAgICBVKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOworICAgICAgICB9CisgICAgfSB1Owor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2luZCk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJh
dGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTUwIEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCiskdmFySW5k
ZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7JHZhcklu
ZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwg
Om5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAgIGRl
ZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAgICAgQG9y
aWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255bW91cyA9
IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAgIEB2YXJO
YW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4gL1xBXCQvID8gJCcgOiBuYW1lCisg
ICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4gPyBj
aGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAgIG9wY29k
ZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAg
IGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNoaWxkLCBpbmRleCB8
CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQubmFt
ZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAgICAgICAgICAgICBj
aGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9uT3Bl
cmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAorICAgICAgICAg
ICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykKKyAg
ICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3JlYWRlciA6
bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9u
cykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rp
b25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVO
YW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5l
TnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJl
ciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tm
aWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAg
IGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShv
cmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5n
ID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBv
dGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIK
KyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9
IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBl
cnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVy
cm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAor
CitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmls
ZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5v
dCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0q
KS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisg
ICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAx
CisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLworICAgICAgICAg
ICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwg
JCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFj
ZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0IDw8
IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmls
ZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIw
XS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAg
ICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMgV2Ug
Y2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3
YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcil8KGlu
Y2x1ZGUpKVxaLworZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4g
L1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2Vu
KQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1l
KQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0g
MAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBl
bmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAg
ZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0
b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBj
b21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQg
b2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2Ug
ZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAg
ICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBh
cnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAg
ICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBp
ZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UK
KyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgYWRkVW5pcXVlKG5hbWUsIHByb2R1
Y3Rpb25zLCBwcm9kdWN0aW9uKQorICAgICAgICBpZiBuYW1lID09IHByb2R1Y3Rpb24udmFyTmFt
ZQorICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2hpbGQgcHJvZHVjdGlvbiBoYXMgc2FtZSBuYW1l
IGFzIHBhcmVudCBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIGlmIHByb2R1Y3Rp
b25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9Cisg
ICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgIGVu
ZAorICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgZW5kCisKKyAgICBkZWYg
cGFyc2UKKyAgICAgICAgY29uc3VtZSgibWF0Y2hlciIpCisKKyAgICAgICAgbWF0Y2hlck5hbWUg
PSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKworICAgICAg
ICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKwor
ICAgICAgICAgICAgIyBXZSBtaWdodCB3YW50IHRvIHN1cHBvcnQgImluY2x1ZGUiLiBJZiB3ZSBk
aWQgdGhhdCwgaXQgd291bGQgZ28gaGVyZS4KKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwYXJz
ZVByb2R1Y3Rpb24KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0
ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAg
ICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgICAgICBl
bmQKKworICAgICAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgICAgICB9CisK
KyAgICAgICAgTWF0Y2hlci5uZXcobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAor
CisgICAgZGVmIHBhcnNlUHJvZHVjdGlvbgorICAgICAgICBvcmlnaW4gPSB0b2tlbi5vcmlnaW4K
KyAgICAgICAgbmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgaWYgdG9rZW4gPT0g
Ij0iCisgICAgICAgICAgICBjb25zdW1lKCI9IikKKyAgICAgICAgICAgIG9wY29kZSA9IGNvbnN1
bWVJZGVudGlmaWVyCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgZWxzaWYgdG9r
ZW4gPT0gIigiCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgICAgIG9wY29kZSA9
IG5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmV0dXJuIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgbmlsLCBuaWwpCisgICAgICAgIGVu
ZAorICAgICAgICAKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBsb29wIHsKKyAg
ICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorCisgICAgICAgICAgICBhZGRVbmlxdWUo
bmFtZSwgcHJvZHVjdGlvbnMsIHBhcnNlUHJvZHVjdGlvbikKKworICAgICAgICAgICAgYnJlYWsg
aWYgdG9rZW4gPT0gIikiCisgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgfQorCisg
ICAgICAgICMgQWR2YW5jZSBhZnRlciB0aGUgIikiCisgICAgICAgIGFkdmFuY2UKKworICAgICAg
ICBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG9wY29kZSwgcHJvZHVjdGlvbnMpCisgICAg
ZW5kCitlbmQKKworZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86
OnJlYWQoZmlsZU5hbWUpLCBmaWxlTmFtZSkKK21hdGNoZXIgPSBwYXJzZXIucGFyc2UKKworY2xh
c3MgU3ViTWF0Y2gKKyAgICBhdHRyX3JlYWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0aW9ucworICAg
IAorICAgIGRlZiBpbml0aWFsaXplKGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBp
bmRleE1hcCA9IFtdCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGluZGV4TGlz
dC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwIDw8
IGluZGV4CisgICAgICAgICAgICBAcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNbaW5kZXhdCisg
ICAgICAgIH0KKyAgICBlbmQKKworICAgIGRlZiBtYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAg
ICAgICBpbmRleExpc3QubWFwIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAg
QGluZGV4TWFwW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCitlbmQKKworJHN0ZGVyci5wdXRz
ICJHZW5lcmF0aW5nIGNvZGUgZm9yICN7ZmlsZU5hbWV9LiIKKworRmlsZS5vcGVuKCJCMyIgKyBt
YXRjaGVyLm5hbWUgKyAiLmgiLCAidyIpIHsKKyAgICB8IG91dHAgfAorCisgICAgb3V0cC5wdXRz
ICIvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxl
TmFtZX0gLS0gZG8gbm90IGVkaXQhIgorCisgICAgb3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRj
aGVyLm5hbWV9X2giCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2gi
CisgICAgCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkIzVmFsdWUuaFwiIgorICAgIAorICAg
IG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IgorCisgICAgb3V0cC5w
dXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiIKKyAgICBvdXRwLnB1dHMgImJvb2wgcnVu
I3ttYXRjaGVyLm5hbWV9KFZhbHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91
dHAucHV0cyAieyIKKworICAgICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJs
eSBpbmRlbnRlZCBjb2RlLCBiZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91
CisgICAgIyB3YW50IHRvIHNlZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGlu
IGEgZ29vZCB0ZXh0IGVkaXRvciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlv
dS4KKworICAgICMgSW4gb2RkIHNpdHVhdGlvbnMsIHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2
YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgIG91dHAu
cHV0cyAiVU5VU0VEX1BBUkFNKF92YWx1ZSk7IgorICAgICAgICAKKyAgICAjIFRoaXMganVzdCBw
cm90ZWN0cyB0aGUgY2FsbGVyIGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25z
IGhhdmluZyBkaWZmZXJlbnQgbGVuZ3Rocy4KKyAgICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFs
dWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHBy
b2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGlu
ZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRl
eExpc3RzWy0xXVswXV0uY2hpbGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVu
Z3RoCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAg
IGVuZAorICAgICAgICB9CisKKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAg
IHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlz
dFswXV0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICBpZiBsZW5ndGggPiAwCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGlsZHJlbigpLnNpemUoKSA+
PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKwor
ICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9k
dWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxp
Y2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0
aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMg
Y29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9m
CisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRl
ZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAg
ICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0
aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9u
ZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0
aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAg
IGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFz
T3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0
c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExp
c3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVu
dGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdp
dGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRl
eExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNv
ZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8g
Z3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAg
ICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRl
eCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0K
KyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJv
ZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50
LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29k
ZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAg
ICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0g
U3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAg
ICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0
Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5n
dGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAg
ICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNo
Lm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBo
YXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20g
dGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4u
CisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVt
bkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJl
bi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19h
CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBu
ZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRz
ICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9
KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21w
aWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BB
UkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHBy
b2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAg
cHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1h
dGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhp
bmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFs
dWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAg
ICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1h
cEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRw
LCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAs
IHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAg
ICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFp
bnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRo
ZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4
TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5h
bWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExp
c3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJz
aXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBp
bmRleExpc3QgfAorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4
IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQor
ICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSog
I3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAi
VU5VU0VEX1BBUkFNKCN7cHJvZHVjdGlvbi52YXJOYW1lfSk7IgorICAgICAgICAgICAgaW50ZXJu
YWxBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9IFtdCisgICAg
ICAgICAgICB0cnlBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgbnVtU2NvcGVzID0gMAorICAg
ICAgICAgICAgc2VlbiA9IHt9CisKKyAgICAgICAgICAgICMgRklYTUU6IFdlIHdhbnQgdG8gYmUg
YWJsZSB0byBjb21iaW5lIHBhdHRlcm4gbWF0Y2hlcnMsIGxpa2UgaGF2ZSB0aGUgcGF0dGVybiBt
YXRjaCBydWxlCisgICAgICAgICAgICAjIGZvciBCcmFuY2ggaW4gdGhlIGxvd2VyaW5nIHBhdGNo
ZXIgZGVsZWdhdGUgdG8gYSBtYXRjaGVyIHRoYXQgY2FuIGRlZHVjZSB0aGUga2luZCBvZgorICAg
ICAgICAgICAgIyBjb21wYXJpc29uIHRoYXQgd2UncmUgZG9pbmcuIFdlIGNvdWxkIHRoZW4gcmV1
c2UgdGhhdCBsYXR0ZXIgbWF0Y2hlciBmb3IgQ2hlY2sgYW5kCisgICAgICAgICAgICAjIHVuZnVz
ZWQgY29tcGFyZS4gVGhlIGtleSB0byBtYWtpbmcgc3VjaCBhIGRlbGVnYXRpb24gd29yayBpcyB0
byBoYXZlIHRoZSBpbm5lciBtYXRjaGVyCisgICAgICAgICAgICAjICh0aGUgY29tcGFyaXNvbiBt
YXRjaGVyIGluIHRoaXMgY2FzZSkga2VlcCBjYXNjYWRpbmcgaWYgaXQgZW5jb3VudGVycyBhIHJ1
bGUgdGhhdAorICAgICAgICAgICAgIyBwcm9kdWNlcyBzb21ldGhpbmcgdGhhdCB0aGUgb3V0ZXIg
bWF0Y2hlciBjYW5ub3QgaGFuZGxlLiBJdCdzIG5vdCBvYnZpb3VzIHRoYXQgdGhlCisgICAgICAg
ICAgICAjIGNvbXBhcmlzb24gbWF0Y2hlciB3b3VsZCBuZWVkIHRoaXMsIGJ1dCB0aGUgYWRkcmVz
cyBtYXRjaGVyIHByb2JhYmx5IHdpbGwuIEZvciBleGFtcGxlLAorICAgICAgICAgICAgIyB3ZSBt
YXkgaGF2ZSBhIFN0b3JlQWRkTG9hZCBydWxlIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSBhZGRyZXNz
IG1hdGNoZXIsIGFuZCB0aGUgYWRkcmVzcworICAgICAgICAgICAgIyBtYXRjaGVyIG1heSBwcm9k
dWNlIGFuIGFkZHJlc3MgdGhhdCB0aGUgbG93ZXJpbmcgbWF0Y2hlciBjYW5ub3QgdXNlIGJlY2F1
c2Ugd2hpbGUgdGhlCisgICAgICAgICAgICAjIEFkZCBmb3JtIGRvZXMgYWNjZXB0IGFkZHJlc3Nl
cyBpdCBtYXkgbm90IGFjY2VwdCB0aGUgcGFydGljdWxhciBhZGRyZXNzIHRoYXQgdGhlCisgICAg
ICAgICAgICAjIGFkZHJlc3MgbWF0Y2hlciBwcm9kdWNlZC4gSW4gdGhhdCBjYXNlLCBpbnN0ZWFk
IG9mIGdpdmluZyB1cCBvbiB0aGUgU3RvcmVBZGRMb2FkIHJ1bGUsCisgICAgICAgICAgICAjIHdl
IHdhbnQgdGhlIGFkZHJlc3MgbWF0Y2hlciB0byBqdXN0IHRyeSBhIGRpZmZlcmVudCBhZGRyZXNz
LiBUaGUgY29tcGFyaXNvbiBtYXRjaGVyCisgICAgICAgICAgICAjIG1pZ2h0IHdhbnQgdGhpcyBq
dXN0IGZvciBiZXR0ZXIgY29udHJvbGxpbmcgd2hlbiB0byBwaW4gdmFyaWFibGVzLiBDdXJyZW50
bHksIGlmIGl0CisgICAgICAgICAgICAjIGNvbnN0cnVjdGVkIHNvbWUgY29kZSwgaXQgd291bGQg
YWxzbyBwaW4gdGhlIHZhcmlhYmxlcyB0aGF0IGl0IHVzZWQuIElmIHRoZSBsb3dlcmluZworICAg
ICAgICAgICAgIyBtYXRjaGVyIHRoZW4gZGVjaWRlZCB0byByZWplY3QgdGhlIGNvZGUgY3JlYXRl
ZCBieSB0aGUgY29tcGFyaXNvbiBtYXRjaGVyLCBpdCB3b3VsZAorICAgICAgICAgICAgIyBoYXZl
IGEgaGFyZCB0aW1lICJ1bnBpbm5pbmciIHRob3NlIHZhcmlhYmxlcy4gQnV0IGlmIHdlIGhhZCBz
b21lIGtpbmQgb2YgZGVsZWdhdGlvbiwgd2UKKyAgICAgICAgICAgICMgY291bGQgaGF2ZSB0aGUg
cGlubmluZyBvZiB0aGUgY29tcGFyaXNvbiBtYXRjaGVyIGhhcHBlbiBvbmx5IGlmIHRoZSBsb3dl
cmluZyBtYXRjaGVyCisgICAgICAgICAgICAjIGFjY2VwdGVkLgorICAgICAgICAgICAgIworICAg
ICAgICAgICAgIyBUaGlzIGNvdWxkIGFsbCBiZSBhY2NvbXBsaXNoZWQgYnkgaGF2aW5nIHRyeUJs
YWgoKSByZXR1cm4gc29tZXRoaW5nLCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgICAgICMgbWF0Y2hl
ciBhbHNvIHRha2UgYSBmdW5jdG9yIGFyZ3VtZW50IHRoYXQgYWNjZXB0cyB3aGF0IHRyeUJsYWgo
KSByZXR1cm5zLiBTbyBpbnN0ZWFkIG9mCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGlm
ICh0cnlCbGFoKCkpIG9rOworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBXZSB3b3VsZCBo
YXZlOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBpZiAoZnVuY3Rvcih0cnlCbGFoKCkp
IG9rOworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBXaGVuIGxvd2VyaW5nIGRlY2lkZWQg
dG8gZGVsZWdhdGUgdG8gdGhlIGFkZHJlc3Mgb3IgY29tcGFyaXNvbiBtYXRjaGVyLCBpdCBjb3Vs
ZCBzdXBwbHkKKyAgICAgICAgICAgICMgYSBmdW5jdG9yIHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRo
ZSB0aGluZyB0aGF0IHRoZSBzdWItbWF0Y2hlciBzZWxlY3RlZCBpcyBpbmRlZWQKKyAgICAgICAg
ICAgICMgdXNlZnVsLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJbiB0aGUgbmVhciB0
ZXJtLCB3ZSBwcm9iYWJseSB3b24ndCBuZWVkIHRoaXMuIEJ1dCB3ZSB3aWxsIGRlZmluaXRlbHkg
bmVlZCBpdCBhcyB3ZQorICAgICAgICAgICAgIyBleHBhbmQgdG8gZWZmaWNpZW50bHkgc3VwcG9y
dCBtb3JlIHBsYXRmb3Jtcy4gT24gWDg2XzY0LCBhbnkgYnJhbmNoaW5nIGluc3RydWN0aW9uIGlz
CisgICAgICAgICAgICAjIHVzYWJsZSBpbiBhbnkgY29udGV4dCwgYW5kIGFueSBhZGRyZXNzIHNo
b3VsZCBiZSB1c2FibGUgaW4gYW55IGNvbnRleHQgKGFuZCB0aGUgb25seQorICAgICAgICAgICAg
IyBjYXNlcyB3aGVyZSBpdCB3b3VsZG4ndCBiZSBpcyBpZiB3ZSBoYXZlIGhvbGVzIGluIHRoZSBN
YWNyb0Fzc2VtYmxlcikuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1NTkKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAgICAgICAgICAgICAgIHwgcGFyZW50
VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4IHwKKyAgICAgICAg
ICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgje2luZGV4fSkiCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc2VlbltjaGlsZFZhck5hbWVdCisg
ICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsiCisgICAgICAgICAg
ICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVlCisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFtZX0g
PSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIg
Z2V0dGluZyByaWQgb2YgdGhlICQgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICAjIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MjcKKyAgICAgICAgICAgICAg
ICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
Y2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRl
cm5hbCBvciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFu
ZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5kID09
IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRW
YXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFk
YXB0b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJn
dW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2Nl
cHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5Pwor
ICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygiICsg
b3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0
cnlBcmd1bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0cyAi
YWRhcHRvci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBpbnRl
cm5hbEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3Iu
YWNjZXB0SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIp
OyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMu
ZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJhbmRz
TGF0ZSgiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiB0cnVlOyIKKyAgICAgICAgICAgIG91
dHAucHV0cyAifSIKKyAgICAgICAgICAgIG51bVNjb3Blcy50aW1lcyB7CisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIG91dHAucHV0cyAiICAgIHJldHVybiBmYWxz
ZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21hdGNoZXIubmFt
ZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1Zh
bHVlLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29u
c3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCisjaW5jbHVkZSAiQjND
b250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisjaW5jbHVkZSAiQjNNZW1v
cnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJJbml0aWFsaXpl
VGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKyNpbmNsdWRlICJWTS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCituYW1lc3BhY2UgeworCisv
LyBOb3RoaW5nIGZhbmN5IGZvciBub3c7IHdlIGp1c3QgdXNlIHRoZSBleGlzdGluZyBXVEYgYXNz
ZXJ0aW9uIG1hY2hpbmVyeS4KKyNkZWZpbmUgQ0hFQ0soeCkgUkVMRUFTRV9BU1NFUlQoeCkKKwor
Vk0qIHZtOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitU
IGNvbXBpbGVBbmRSdW4oUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgZ2VuZXJhdGUocHJvY2VkdXJl
LCBqaXQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
ICgidGVzdGIzIikpOworICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2Vf
Y2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOworfQorCit2b2lkIHRlc3Q0Migp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBWYWx1ZSogY29uc3Q0MiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCA0Mik7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY29uc3Q0Mik7CisKKyAgICBDSEVDSyhjb21waWxl
QW5kUnVuPGludD4ocHJvYykgPT0gNDIpOworfQorCit2b2lkIHRlc3RMb2FkNDIoKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgaW50IHggPSA0MjsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
JngpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykgPT0gNDIpOworfQor
Cit2b2lkIHRlc3RBcmcoaW50IGFyZ3VtZW50KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywg
YXJndW1lbnQpID09IGFyZ3VtZW50KTsKK30KKwordm9pZCB0ZXN0QWRkQXJncyhpbnQgYSwgaW50
IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIENIRUNLKGNvbXBp
bGVBbmRSdW48aW50Pihwcm9jLCBhLCBiKSA9PSBhICsgYik7Cit9CisKK3ZvaWQgdGVzdEFkZEFy
Z3MzMihpbnQgYSwgaW50IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZh
bHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSkpOworCisgICAgQ0hF
Q0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyBiKTsKK30KKwordm9pZCB0
ZXN0U3RvcmUoaW50IHZhbHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHNsb3QgPSAweGJhYWRiZWVmOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIFN0b3JlLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnNsb3Qp
KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDApKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYywgdmFsdWUpKTsK
KyAgICBDSEVDSyhzbG90ID09IHZhbHVlKTsKK30KKwordm9pZCB0ZXN0VHJ1bmMoaW50NjRfdCB2
YWx1ZSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgdmFsdWUp
ID09IHN0YXRpY19jYXN0PGludD4odmFsdWUpKTsKK30KKwordm9pZCB0ZXN0QWRkMShpbnQgdmFs
dWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpKSk7CisKKyAgICBDSEVDSyhjb21w
aWxlQW5kUnVuPGludD4ocHJvYywgdmFsdWUpID09IHZhbHVlICsgMSk7Cit9CisKK3ZvaWQgdGVz
dFN0b3JlQWRkTG9hZChpbnQgYW1vdW50KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHNsb3QgPSAzNzsKKyAg
ICBDb25zdFB0clZhbHVlKiBzbG90UHRyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAmc2xvdCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PigKKyAgICAgICAgcHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigp
LCBzbG90UHRyKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBhbW91bnQpKSwKKyAgICAgICAgc2xvdFB0cik7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7
CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKyAgICBDSEVDSyhzbG90
ID09IDM3ICsgYW1vdW50KTsKK30KKwordm9pZCB0ZXN0U3RvcmVBZGRBbmRMb2FkKGludCBhbW91
bnQsIGludCBtYXNrKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHNsb3QgPSAzNzsKKyAgICBDb25zdFB0clZh
bHVlKiBzbG90UHRyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAmc2xvdCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAg
cHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIElu
dDMyLCBPcmlnaW4oKSwgc2xvdFB0ciksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCkpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spKSwKKyAgICAg
ICAgc2xvdFB0cik7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpKTsKKyAgICBDSEVDSyhzbG90ID09ICgoMzcgKyBhbW91bnQpICYgbWFzaykpOwor
fQorCit2b2lkIHRlc3RBZGQxVW5jb21tdXRlZChpbnQgdmFsdWUpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFk
ZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgMSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCkpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywg
dmFsdWUpID09IHZhbHVlICsgMSk7Cit9CisKK3ZvaWQgdGVzdExvYWRPZmZzZXQoKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgaW50IGFycmF5W10gPSB7IDEsIDIgfTsKKyAgICBDb25zdFB0clZhbHVlKiBhcnJheVB0
ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYXJyYXkp
OworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBhcnJheVB0ciwgMCksCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBP
cmlnaW4oKSwgYXJyYXlQdHIsIHNpemVvZihpbnQpKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFu
ZFJ1bjxpbnQ+KHByb2MpID09IGFycmF5WzBdICsgYXJyYXlbMV0pOworfQorCit2b2lkIHRlc3RM
b2FkT2Zmc2V0Tm90Q29uc3RhbnQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IGFycmF5W10gPSB7IDEsIDIg
fTsKKyAgICBWYWx1ZSogYXJyYXlQdHIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBM
b2FkLCBJbnQzMiwgT3JpZ2luKCksIGFycmF5UHRyLCAwKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBhcnJheVB0
ciwgc2l6ZW9mKGludCkpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywg
JmFycmF5WzBdKSA9PSBhcnJheVswXSArIGFycmF5WzFdKTsKK30KKwordm9pZCB0ZXN0TG9hZE9m
ZnNldFVzaW5nQWRkKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludCBhcnJheVtdID0geyAxLCAyIH07CisgICAg
Q29uc3RQdHJWYWx1ZSogYXJyYXlQdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGFycmF5KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVl
PigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIExv
YWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLCBhcnJheVB0ciwK
KyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAwKSkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJv
YywgQWRkLCBPcmlnaW4oKSwgYXJyYXlQdHIsCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgc2l6ZW9mKGludCkpKSkpKTsK
KyAgICAKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykgPT0gYXJyYXlbMF0gKyBh
cnJheVsxXSk7Cit9CisKK3ZvaWQgdGVzdExvYWRPZmZzZXRVc2luZ0FkZE5vdENvbnN0YW50KCkK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIGludCBhcnJheVtdID0geyAxLCAyIH07CisgICAgVmFsdWUqIGFycmF5UHRy
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAor
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgTG9hZCwg
SW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksIGFycmF5UHRyLAorICAg
ICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIDApKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBB
ZGQsIE9yaWdpbigpLCBhcnJheVB0ciwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBzaXplb2YoaW50KSkpKSkpOworICAg
IAorICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCAmYXJyYXlbMF0pID09IGFycmF5
WzBdICsgYXJyYXlbMV0pOworfQorCisjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIGRhdGFMb2coI3Rlc3QgIjpcbiIpOyAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHRlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIGRhdGFMb2coIiAgICBPSyFcbiIpOyAgICAgICAgICAgICAgICAgICBcCisg
ICAgfSB3aGlsZSAoZmFsc2UpOworCit2b2lkIHJ1bigpCit7CisgICAgSlNDOjppbml0aWFsaXpl
VGhyZWFkaW5nKCk7CisgICAgdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsK
KworICAgIFJVTih0ZXN0NDIoKSk7CisgICAgUlVOKHRlc3RMb2FkNDIoKSk7CisgICAgUlVOKHRl
c3RBcmcoNDMpKTsKKyAgICBSVU4odGVzdEFkZEFyZ3MoMSwgMSkpOworICAgIFJVTih0ZXN0QWRk
QXJncygxLCAyKSk7CisgICAgUlVOKHRlc3RBZGRBcmdzMzIoMSwgMSkpOworICAgIFJVTih0ZXN0
QWRkQXJnczMyKDEsIDIpKTsKKyAgICBSVU4odGVzdFN0b3JlKDQ0KSk7CisgICAgUlVOKHRlc3RU
cnVuYygoc3RhdGljX2Nhc3Q8aW50NjRfdD4oMSkgPDwgNDApICsgNDIpKTsKKyAgICBSVU4odGVz
dEFkZDEoNDUpKTsKKyAgICBSVU4odGVzdFN0b3JlQWRkTG9hZCg0NikpOworICAgIFJVTih0ZXN0
U3RvcmVBZGRBbmRMb2FkKDQ3LCAweGZmZmYpKTsKKyAgICBSVU4odGVzdFN0b3JlQWRkQW5kTG9h
ZCg0NzAwMDAsIDB4ZmZmZikpOworICAgIFJVTih0ZXN0QWRkMVVuY29tbXV0ZWQoNDgpKTsKKyAg
ICBSVU4odGVzdExvYWRPZmZzZXQoKSk7CisgICAgUlVOKHRlc3RMb2FkT2Zmc2V0Tm90Q29uc3Rh
bnQoKSk7CisgICAgUlVOKHRlc3RMb2FkT2Zmc2V0VXNpbmdBZGQoKSk7CisgICAgUlVOKHRlc3RM
b2FkT2Zmc2V0VXNpbmdBZGROb3RDb25zdGFudCgpKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKKyNlbHNlIC8vIEVOQUJMRShCM19KSVQpCisKK3N0YXRpYyB2b2lkIHJ1bigpCit7
CisgICAgZGF0YUxvZygiQjMgSklUIGlzIG5vdCBlbmFibGVkLlxuIik7Cit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGFyZ2MpOworICAgIFVOVVNFRF9QQVJBTShhcmd2KTsKKyAgICAKKyAg
ICBydW4oKTsKKyAgICByZXR1cm4gMDsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVT
dGFjay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5j
bHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKK2Jvb2wgYXJndW1lbnRJc09uU3RhY2soY29uc3QgQXJnJiBhcmcpCit7CisgICAgcmV0
dXJuIGFyZy5pc1N0YWNrKCkgJiYgYXJnLnN0YWNrU2xvdCgpLT5raW5kKCkgPT0gU3RhY2tTbG90
S2luZDo6QW5vbnltb3VzOworfQorCitib29sIGF0dGVtcHRBc3NpZ25tZW50KAorICAgIFN0YWNr
U2xvdCogc2xvdCwgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25zdCBWZWN0b3I8U3RhY2tTbG90
Kj4mIG90aGVyU2xvdHMpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIkF0
dGVtcHRpbmcgdG8gYXNzaWduICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiIHRvICIsIG9mZnNldEZy
b21GUCwgIiB3aXRoIGludGVyZmVyZW5jZSAiLCBwb2ludGVyTGlzdER1bXAob3RoZXJTbG90cyks
ICJcbiIpOworCisgICAgLy8gTmVlZCB0byBhbGlnbiBpdCB0byB0aGUgc2xvdCdzIGRlc2lyZWQg
YWxpZ25tZW50LgorICAgIG9mZnNldEZyb21GUCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c2xvdC0+YWxpZ25tZW50KCksIC1vZmZzZXRGcm9tRlApOworICAgIAorICAgIGZvciAoU3RhY2tT
bG90KiBvdGhlclNsb3QgOiBvdGhlclNsb3RzKSB7CisgICAgICAgIGlmICghb3RoZXJTbG90LT5v
ZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29sIG92ZXJs
YXAgPSBXVEY6OnJhbmdlc092ZXJsYXAoCisgICAgICAgICAgICBvZmZzZXRGcm9tRlAsCisgICAg
ICAgICAgICBvZmZzZXRGcm9tRlAgKyBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xvdC0+Ynl0ZVNp
emUoKSksCisgICAgICAgICAgICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpLAorICAgICAgICAg
ICAgb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSArIHN0YXRpY19jYXN0PGludHB0cl90PihvdGhl
clNsb3QtPmJ5dGVTaXplKCkpKTsKKyAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2co
IkFzc2lnbmVkICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiIHRvICIsIG9mZnNldEZyb21GUCwgIlxu
Iik7CisgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQKG9mZnNldEZyb21GUCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgYXNzaWduKFN0YWNrU2xvdCogc2xvdCwgY29uc3QgVmVjdG9yPFN0
YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCJBdHRlbXB0aW5nIHRvIGFzc2lnbiAiLCBwb2ludGVyRHVtcChzbG90KSwgIiB3aXRoIGlu
dGVyZmVyZW5jZSAiLCBwb2ludGVyTGlzdER1bXAob3RoZXJTbG90cyksICJcbiIpOworICAgIAor
ICAgIGlmIChhdHRlbXB0QXNzaWdubWVudChzbG90LCAtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNs
b3QtPmJ5dGVTaXplKCkpLCBvdGhlclNsb3RzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhl
clNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJv
b2wgZGlkQXNzaWduID0gYXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgICAgICAgICBzbG90LCBvdGhl
clNsb3QtPm9mZnNldEZyb21GUCgpIC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVT
aXplKCkpLCBvdGhlclNsb3RzKTsKKyAgICAgICAgaWYgKGRpZEFzc2lnbikKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNv
ZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrIik7
CisKKyAgICAvLyBBbGxvY2F0ZSBhbGwgb2YgdGhlIGxvY2tlZCBzbG90cyBpbiBvcmRlci4gVGhp
cyBpcyBraW5kIG9mIGEgY3JhenkgYWxnb3JpdGhtIHRvIGFsbG93IGZvcgorICAgIC8vIHRoZSBw
b3NzaWJpbGl0eSBvZiBzdGFjayBzbG90cyBiZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJl
Zm9yZSB3ZSBldmVuIGdldCBoZXJlLgorICAgIEFTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7Cisg
ICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90czsKKyAgICBWZWN0
b3I8U3RhY2tTbG90Kj4gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0OworICAgIGZvciAoU3RhY2tT
bG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgc3dpdGNoIChzbG90LT5r
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgICAg
ICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICAgICAgYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICAg
ICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQXMgYSBt
YXR0ZXIgb2Ygc2FuaXR5LCB1bmFzc2lnbiB0aGlzLiBNYXliZSBpdCB3b3VsZCBiZSBnb29kIHRv
IGV2ZW4gaGF2ZSBhCisgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBydWxlIHRoYXQgdGhp
cyBjYW5ub3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIHNsb3QtPnNldE9mZnNldEZyb21GUCgw
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIC8vIFRoaXMgaXMgYSBmYWlybHkgZXhwZW5zaXZlIGxvb3AsIGJ1dCBpdCdzIE9LIGJlY2F1
c2Ugd2UnbGwgdXN1YWxseSBvbmx5IGhhdmUgYSBoYW5kZnVsIG9mCisgICAgLy8gbG9ja2VkIHN0
YWNrIHNsb3RzLgorICAgIHdoaWxlICghbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LmlzRW1wdHko
KSkgeworICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Qu
dGFrZUxhc3QoKTsKKyAgICAgICAgYXNzaWduKHNsb3QsIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90
cyk7CisgICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAg
fQorCisgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgYW5vbnltb3VzIHNsb3RzLiBOb3RlIHRoYXQg
dGhlb3JldGljYWxseSB3ZSBzaG91bGQgZG8gYW4gZXNjYXBlIGFuYWx5c2lzCisgICAgLy8gaGVy
ZS4gQnV0LCBjdXJyZW50bHkgQWlyIGRvZXNuJ3Qgc3VwcG9ydCBlc2NhcGluZyBhIFN0YWNrU2xv
dCEKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGVzY2FwaW5nIGEgU3RhY2tTbG90IGFu
ZCBhZGQgZXNjYXBlIGFuYWx5c2lzIHRvIGFsbG9jYXRlU3RhY2soKS4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDMwCisKKyAgICBMaXZlbmVzczxB
cmc+IGxpdmVuZXNzKGNvZGUpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFj
a1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAgVmVj
dG9yPFN0YWNrU2xvdCo+IHNsb3RzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8QXJnPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVz
cywgYmxvY2spOworCisgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdIChJbnN0JiBpbnN0KSB7
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRl
cmZlcmluZzogIiwgbGlzdER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBGb3JtIGEgY2xpcXVlIG9mIHN0YWNrIHNsb3RzIHRoYXQgaW50
ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0IG9mIHN0YWNrIHNsb3RzCisgICAgICAgICAgICAv
LyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgIHNsb3RzLnJlc2l6ZSgwKTsK
KyAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRJc09uU3RhY2soYXJnKSkKKyAgICAgICAgICAgICAgICAgICAg
c2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFdlIG11c3RuJ3QgbWFuZGF0ZSB0aGF0IHRoZSBpbnB1dCBjb2RlIGlzIG9wdGltYWwu
IFRoZXJlZm9yZSwgaXQgbWF5IGhhdmUgZGVhZCBzdG9yZXMKKyAgICAgICAgICAgIC8vIHRvIHRo
ZSBzdGFjay4gV2UgbmVlZCB0byB0cmVhdCB0aGVzZSBhcyBpbnRlcmZlcmluZy4KKyAgICAgICAg
ICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
RGVmKHJvbGUpICYmIGFyZ3VtZW50SXNPblN0YWNrKGFyZykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICYmICFsb2NhbENhbGMubGl2ZSgpLmNvbnRhaW5zKGFyZykpCisgICAgICAgICAgICAgICAg
ICAgICAgICBzbG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgpKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIFNsb3RzOiAiLCBwb2ludGVyTGlzdER1bXAoc2xvdHMpLCAiXG4iKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbG90cy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBzbG90c1tpXTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNsb3RzLnNpemUoKTsgKytqKSB7
CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIgPSBzbG90c1tqXTsKKworICAg
ICAgICAgICAgICAgICAgICBpbnRlcmZlcmVuY2VbaW5uZXJdLmFkZChvdXRlcik7CisgICAgICAg
ICAgICAgICAgICAgIGludGVyZmVyZW5jZVtvdXRlcl0uYWRkKGlubmVyKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxv
Y2stPmF0KGluc3RJbmRleCksICJcbiIpOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgaW50ZXJmZXJlKGluc3QpOworICAgICAgICAg
ICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdCk7CisgICAgICAgIH0KKyAgICAgICAgSW5zdCBub3A7
CisgICAgICAgIGludGVyZmVyZShub3ApOworICAgIH0KKworICAgIGlmICh2ZXJib3NlKSB7Cisg
ICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCJJbnRlcmZlcmVuY2Ugb2YgIiwgcG9pbnRlckR1bXAoc2xvdCksICI6ICIs
IHBvaW50ZXJMaXN0RHVtcChpbnRlcmZlcmVuY2Vbc2xvdF0pLCAiXG4iKTsKKyAgICB9CisKKyAg
ICAvLyBOb3cgd2UgYXNzaWduIHN0YWNrIGxvY2F0aW9ucy4gQXQgaXRzIGhlYXJ0IHRoaXMgYWxn
b3JpdGhtIGlzIGp1c3QgZmlyc3QtZml0LiBGb3IgZWFjaAorICAgIC8vIFN0YWNrU2xvdCB3ZSBq
dXN0IHdhbnQgdG8gZmluZCB0aGUgb2Zmc2V0RnJvbUZQIHRoYXQgaXMgY2xvc2VzdCB0byB6ZXJv
IHdoaWxlIGVuc3VyaW5nIG5vCisgICAgLy8gb3ZlcmxhcCB3aXRoIG90aGVyIFN0YWNrU2xvdHMg
dGhhdCB0aGlzIG92ZXJsYXBzIHdpdGguCisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IG90aGVyU2xv
dHMgPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHM7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3Qg
OiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
IHsKKyAgICAgICAgICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0LgorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+JiBp
bnRlcmZlcmluZ1Nsb3RzID0gaW50ZXJmZXJlbmNlW3Nsb3RdOworICAgICAgICBvdGhlclNsb3Rz
LnJlc2l6ZShhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpKTsKKyAgICAgICAgb3RoZXJT
bG90cy5yZXNpemUoYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKSArIGludGVyZmVyaW5n
U2xvdHMuc2l6ZSgpKTsKKyAgICAgICAgdW5zaWduZWQgbmV4dEluZGV4ID0gYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzLnNpemUoKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6
IGludGVyZmVyaW5nU2xvdHMpCisgICAgICAgICAgICBvdGhlclNsb3RzW25leHRJbmRleCsrXSA9
IG90aGVyU2xvdDsKKworICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90cyk7CisgICAgfQor
CisgICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzdGFjayB3ZSdyZSB1c2luZyBmb3Igc3RhY2sg
c2xvdHMuCisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IDA7CisgICAgZm9y
IChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBmcmFtZVNp
emVGb3JTdGFja1Nsb3RzID0gc3RkOjptYXgoCisgICAgICAgICAgICBmcmFtZVNpemVGb3JTdGFj
a1Nsb3RzLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1zbG90LT5vZmZzZXRG
cm9tRlAoKSkpOworICAgIH0KKworICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBmcmFtZVNpemVGb3JTdGFj
a1Nsb3RzKTsKKworICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRlZHVjZSBob3cgbXVjaCBhcmd1bWVu
dCBhcmVhIHdlIG5lZWQuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYg
YXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZy5pc0NhbGxBcmcoKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBhc3N1bWUgdGhhdCB3ZSB1c2Ug
OCBieXRlcyBvZiB0aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mgbm90CisgICAgICAgICAgICAgICAg
ICAgIC8vIHN1Y2ggYW4gYXdlc29tZSBhc3N1bXB0aW9uLgorICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NAor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLm9mZnNldCgpID49IDApOworICAgICAgICAg
ICAgICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoYXJnLm9mZnNldCgpICsgOCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgY29kZS5zZXRGcmFtZVNpemUoZnJhbWVTaXplRm9yU3RhY2tTbG90cyArIGNvZGUuY2FsbEFy
Z0FyZWFTaXplKCkpOworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBjb2RlIHRvIHVz
ZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3NsZXNzCisgICAg
Ly8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tTbG90cyBhcnJh
eSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAvLyBvZmZzZXQtZnJvbS1G
UCByZWZlcnMgdG8uCisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAg
ICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBh
cmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGFy
ZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcChHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0KCkgKyBh
cmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICAgICAg
ICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0
KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
ay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFsbG9jYXRlU3Rh
Y2tfaAorI2RlZmluZSBBaXJBbGxvY2F0ZVN0YWNrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
Q29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFjZXMgb24gdGhlIHN0
YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGluZGV4CisvLyBvcmRl
ciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3QgZml0LgorCit2b2lk
IGFsbG9jYXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQWxsb2NhdGVTdGFj
a19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQXJnLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1
ZGUgIkFpclN0YWNrU2xvdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK3ZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIG91dC5w
cmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFRtcDoKKyAgICAg
ICAgb3V0LnByaW50KHRtcCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tOgorICAg
ICAgICBvdXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEltbTY0OgorICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4IiwgbV9vZmZzZXQpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBZGRyOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAg
ICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCks
ICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZGV4OgorICAgICAgICBpZiAob2Zm
c2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJp
bnQoIigiLCBiYXNlKCksICIsIiwgaW5kZXgoKSk7CisgICAgICAgIGlmIChzY2FsZSgpICE9IDEp
CisgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKKyAgICAgICAgb3V0LnByaW50
KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAgICBpZiAob2Zm
c2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJp
bnQoIigiLCBwb2ludGVyRHVtcChzdGFja1Nsb3QoKSksICIpIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91
dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKGNhbGxBcmcpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIG91dC5wcmludChhc1JlbGF0
aW9uYWxDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlc0NvbmQ6Cisg
ICAgICAgIG91dC5wcmludChhc1Jlc3VsdENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHNwZWNpYWwo
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBcmdfaAorI2RlZmluZSBBaXJBcmdf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclRtcC5oIgorI2luY2x1ZGUg
IkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3BlY2lhbDsKK2NsYXNzIFN0YWNr
U2xvdDsKKworLy8gVGhpcyBjbGFzcyBuYW1lIGlzIGFsc28gaW50ZW50aW9uYWxseSB0ZXJzZSBi
ZWNhdXNlIHdlIHdpbGwgc2F5IGl0IGEgbG90LiBZb3UnbGwgc2VlIGNvZGUgbGlrZQorLy8gSW5z
dCguLi4sIEFyZzo6aW1tKDUpLCBBcmc6OmFkZHIodGhpbmcsIGJsYWgpLCAuLi4pCitjbGFzcyBB
cmcgeworcHVibGljOgorICAgIC8vIFRoZXNlIGVudW0gbWVtYmVycyBhcmUgaW50ZW50aW9uYWxs
eSB0ZXJzZSBiZWNhdXNlIHdlIGhhdmUgdG8gbWVudGlvbiB0aGVtIGEgbG90LgorICAgIGVudW0g
S2luZCA6IGludDhfdCB7CisgICAgICAgIEludmFsaWQsCisgICAgICAgIFRtcCwKKyAgICAgICAg
SW1tLAorICAgICAgICBJbW02NCwKKyAgICAgICAgQWRkciwKKyAgICAgICAgU3RhY2ssCisgICAg
ICAgIENhbGxBcmcsCisgICAgICAgIEluZGV4LAorICAgICAgICBSZWxDb25kLAorICAgICAgICBS
ZXNDb25kLAorICAgICAgICBTcGVjaWFsCisgICAgfTsKKworICAgIGVudW0gUm9sZSA6IGludDhf
dCB7CisgICAgICAgIFVzZSwKKyAgICAgICAgRGVmLAorICAgICAgICBVc2VEZWYKKyAgICB9Owor
CisgICAgZW51bSBUeXBlIDogaW50OF90IHsKKyAgICAgICAgR1AsCisgICAgICAgIEZQCisgICAg
fTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1UeXBlcyA9IDI7CisKKyAgICBzdGF0
aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsK
KyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNEZWYoUm9sZSByb2xlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VEZWY6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRp
YyBUeXBlIHR5cGVGb3JCM1R5cGUoQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAg
ICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAgICAgY2FzZSBE
b3VibGU6CisgICAgICAgICAgICByZXR1cm4gRlA7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBHUDsKKyAgICB9CisKKyAgICBBcmcoKQor
ICAgICAgICA6IG1fa2luZChJbnZhbGlkKQorICAgIHsKKyAgICB9CisKKyAgICBBcmcoQWlyOjpU
bXAgdG1wKQorICAgICAgICA6IG1fa2luZChUbXApCisgICAgICAgICwgbV9iYXNlKHRtcCkKKyAg
ICB7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW0oaW50MzJfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW07CisgICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHN0YXRpYyBBcmcgaW1tNjQoaW50cHRyX3QgdmFsdWUpCisgICAgeworICAgICAgICBB
cmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tNjQ7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHN0YXRpYyBBcmcgYWRkcihBaXI6OlRtcCBiYXNlLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAg
eworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gQWRkcjsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7
CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHN0YWNrKFN0YWNrU2xvdCogdmFsdWUsIGludDMy
X3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0
PGludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0gb2Zmc2V0OyAvLyBJ
IGtub3csIHl1Y2suCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBjYWxsQXJnKGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENhbGxBcmc7CisgICAgICAgIHJlc3VsdC5tX29mZnNl
dCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAyOgorICAgICAgICBjYXNl
IDQ6CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgc3RhdGljIHVuc2lnbmVkIGxvZ1NjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2Ug
NDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBy
ZXR1cm4gMzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0
aWMgQXJnIGluZGV4KEFpcjo6VG1wIGJhc2UsIEFpcjo6VG1wIGluZGV4LCB1bnNpZ25lZCBzY2Fs
ZSA9IDEsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlz
R1AoKSk7CisgICAgICAgIEFTU0VSVChpbmRleC5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNW
YWxpZFNjYWxlKHNjYWxlKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJl
c3VsdC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oc2NhbGUpOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyByZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAg
ICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZWxDb25kOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgc3RhdGljIEFyZyByZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25k
aXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IFJlc0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlv
bjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHNwZWNp
YWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IFNwZWNpYWw7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oc3BlY2lhbCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQKKyAgICAgICAg
ICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fYmFzZSA9PSBv
dGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleAorICAg
ICAgICAgICAgJiYgbV9zY2FsZSA9PSBvdGhlci5tX3NjYWxlOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAqdGhpcyAhPSBBcmcoKTsgfQorCisgICAgS2luZCBraW5kKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1Rt
cCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFRtcDsKKyAgICB9CisK
KyAgICBib29sIGlzSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
SW1tOworICAgIH0KKworICAgIGJvb2wgaXNJbW02NCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4ga2luZCgpID09IEltbTY0OworICAgIH0KKworICAgIGJvb2wgaXNBZGRyKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKKyAgICB9CisKKyAgICBib29s
IGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTdGFjazsK
KyAgICB9CisKKyAgICBib29sIGlzQ2FsbEFyZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4ga2luZCgpID09IENhbGxBcmc7CisgICAgfQorCisgICAgYm9vbCBpc0luZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CisgICAgfQorCisgICAgYm9v
bCBpc1JlbENvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZWxD
b25kOworICAgIH0KKworICAgIGJvb2wgaXNSZXNDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBraW5kKCkgPT0gUmVzQ29uZDsKKyAgICB9CisKKyAgICBib29sIGlzU3BlY2lhbCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7CisgICAgfQor
CisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgp
IHx8IGlzU3RhY2soKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCB0bXAoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUbXApOworICAgICAgICByZXR1cm4gbV9iYXNlOwor
ICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBJbW0gfHwga2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zm
c2V0OworICAgIH0KKworICAgIHZvaWQqIHBvaW50ZXJWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAg
QWlyOjpUbXAgYmFzZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFk
ZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisK
KyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNh
c2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGludDMyX3Qgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChraW5kKCkgPT0gU3RhY2spCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdD4obV9zY2FsZSk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkg
PT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50MzJfdD4obV9vZmZzZXQpOworICAgIH0KKworICAgIFN0YWNrU2xvdCogc3RhY2tTbG90
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PFN0YWNrU2xvdCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAg
ICBBaXI6OlRtcCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09
IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorCisgICAgdW5zaWduZWQg
c2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7Cisg
ICAgICAgIHJldHVybiBtX3NjYWxlOworICAgIH0KKworICAgIHVuc2lnbmVkIGxvZ1NjYWxlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dTY2FsZShzY2FsZSgpKTsKKyAgICB9CisK
KyAgICBBaXI6OlNwZWNpYWwqIHNwZWNpYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBaXI6OlNw
ZWNpYWwqPihtX29mZnNldCk7CisgICAgfQorCisgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1AoKTsKKyAgICB9CisKKyAg
ICBib29sIGlzRlBUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYg
dG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAKKyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBj
YW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBHUCB2YWx1ZS4KKyAgICBi
b29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIGNhc2UgQWRkcjoKKyAg
ICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxs
QXJnOgorICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVzQ29uZDoKKyAgICAg
ICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2Ug
VG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzR1BUbXAoKTsKKyAgICAgICAgY2FzZSBJbnZhbGlk
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
VGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVp
cmVzIGEgRlAgdmFsdWUuCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIFJlbENvbmQ6
CisgICAgICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBj
YXNlIEludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQWRk
cjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2Fz
ZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEltbTY0OiAvLyBZZXMsIHdlIGFsbG93IEltbTY0IGFz
IGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFja21h
cHMuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAg
ICAgICByZXR1cm4gaXNGUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBoYXNU
eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNh
c2UgSW1tOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgVG1wOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHR5cGUgaXMgYW1iaWd1
b3VzIGZvciBzb21lIGFyZyBraW5kcy4gQ2FsbCB3aXRoIGNhcmUuCisgICAgVHlwZSB0eXBlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0dQKCkgPyBHUCA6IEZQOworICAgIH0KKwor
ICAgIGJvb2wgaXNUeXBlKFR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIGlzR1AoKTsKKyAg
ICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1Rt
cCgpICYmIHRtcCgpLmlzR1BSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3ByKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQ
UigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQUigp
OworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRtcCgpLmZwcigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzUmVnKCk7CisgICAgfQorCisgICAg
UmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkucmVnKCk7CisgICAg
fQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdG1wKCkuZ3BUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwVG1wSW5kZXgoKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dG1wKCkudG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBBcmcgd2l0aE9mZnNldChpbnQzMl90IGFk
ZGl0aW9uYWxPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc09mZnNldCgpKQor
ICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBpZiAoc3VtT3ZlcmZsb3dzPGludDMy
X3Q+KG9mZnNldCgpLCBhZGRpdGlvbmFsT2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBBcmco
KTsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAg
ICAgICAgcmV0dXJuIGFkZHIoYmFzZSgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOwor
ICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICAgICAgcmV0dXJuIHN0YWNrKHN0YWNrU2xvdCgp
LCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBjYXNlIENhbGxBcmc6Cisg
ICAgICAgICAgICByZXR1cm4gY2FsbEFyZyhvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOwor
ICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGluZGV4KGJhc2UoKSwgaW5k
ZXgoKSwgc2NhbGUoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgVG1w
OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3Io
bV9iYXNlKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0IGFuIGFkZHJlc3Mg
YXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cworICAgIC8vIHRtcHMgYW5k
IG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoKKyAgICAvLworICAgIC8vIG1vdiAl
cmF4LCAoJXJjeCkKKyAgICAvLworICAgIC8vIFRoaXMgZGVmcyAoJXJjeCkgYnV0IHVzZXMgJXJj
eC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChS
b2xlIGFyZ1JvbGUsIFR5cGUgYXJnVHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7
CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAg
ICAgZnVuY3RvcihtX2Jhc2UsIGFyZ1JvbGUsIGFyZ1R5cGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQ
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAg
ZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4LCBV
c2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0lt
bSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQgYXNUcnVzdGVkSW1tNjQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KHZhbHVlKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIgYXNUcnVzdGVkSW1tUHRyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgICAgICBBU1NFUlQoaXNJbW02NCgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlclZhbHVlKCkpOworICAgIH0K
KworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOwor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgbV9iYXNlLmdwcigpLCBtX2luZGV4
LmdwcigpLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U2NhbGU+KGxvZ1NjYWxlKCkpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9uYWxDb25kaXRp
b24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uPiht
X29mZnNldCk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBh
c1Jlc3VsdENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZXNDb25k
KCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENv
bmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworCisgICAgQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAg
ICAgOiBtX2Jhc2UoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAgeworICAgIH0KKwor
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICp0aGlzID09IEFyZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBUaGlzIHJlYWxs
eSBkb2Vzbid0IGhhdmUgdG8gYmUgdGhhdCBncmVhdC4KKyAgICAgICAgcmV0dXJuIFdURjo6SW50
SGFzaDxpbnQ2NF90Pjo6aGFzaChtX29mZnNldCkgKyBtX2tpbmQgKyBtX3NjYWxlICsgbV9iYXNl
Lmhhc2goKSArCisgICAgICAgICAgICBtX2luZGV4Lmhhc2goKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgaW50NjRfdCBtX29mZnNldCB7IDAgfTsKKyAgICBLaW5kIG1fa2luZCB7IEludmFsaWQg
fTsKKyAgICBpbnQzMl90IG1fc2NhbGUgeyAxIH07CisgICAgQWlyOjpUbXAgbV9iYXNlOworICAg
IEFpcjo6VG1wIG1faW5kZXg7Cit9OworCitzdHJ1Y3QgQXJnSGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQXJnJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBBcmcmIGEsIGNvbnN0IEFyZyYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6QWlyOjpBcmc+IHsKKyAgICB0
eXBlZGVmIEpTQzo6QjM6OkFpcjo6QXJnSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpT
Qzo6QjM6OkFpcjo6QXJnPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OkFy
Zz4geworICAgIC8vIEJlY2F1c2UgbV9zY2FsZSBpcyAxIGluIHRoZSBlbXB0eSB2YWx1ZS4KKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJBcmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Nv
bnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK2Jvb2wgQmFz
aWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJu
IEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6
cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIEIzOjpy
ZW1vdmVQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVw
bGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAg
IHJldHVybiBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAi
OiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsKKyAgICBpZiAocHJlZGVjZXNz
b3JzKCkuc2l6ZSgpKQorICAgICAgICBvdXQucHJpbnQoIiAgUHJlZGVjZXNzb3JzOiAiLCBwb2lu
dGVyTGlzdER1bXAocHJlZGVjZXNzb3JzKCkpLCAiXG4iKTsKKyAgICBmb3IgKGNvbnN0IEluc3Qm
IGluc3QgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cisg
ICAgaWYgKHN1Y2Nlc3NvcnMoKS5zaXplKCkpCisgICAgICAgIG91dC5wcmludCgiICBTdWNjZXNz
b3JzOiAiLCBsaXN0RHVtcChzdWNjZXNzb3JzKCkpLCAiXG4iKTsKK30KKworQmFzaWNCbG9jazo6
QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5k
ZXgoaW5kZXgpCisgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFp
ckJhc2ljQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckZyZXF1
ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25Db3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIENvZGU7CitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK2NsYXNzIEJh
c2ljQmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBkdW1wUHJlZml4OworCisgICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7Cisg
ICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0
eXBlZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlz
dDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0
TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RM
aXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4o
KTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBt
X2luc3RzLmVuZCgpOyB9CisKKyAgICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7
IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1f
aW5zdHMubGFzdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQg
YXBwZW5kSW5zdChJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0
ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50
cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUg
Y2FzZSB0byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAi
MSIgY2FzZSBpcyB0aGUKKyAgICAvLyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQgdG8gcmVwcmVz
ZW50IHRoZSBmYWxsLXRocm91Z2ggb2YgYSBjb25kaXRpb25hbCBicmFuY2guCisgICAgdW5zaWdu
ZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0K
KyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBj
b25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNz
b3JzOyB9CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vz
c29yczsgfQorCisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQorICAgIEJhc2ljQmxv
Y2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGlu
ZGV4KS5ibG9jaygpOyB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNj
ZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nl
c3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsK
KyAgICB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBT
dWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29y
TGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3Nv
cnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Js
b2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNl
c3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNl
c3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9
CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vz
c29yczsgfQorCisgICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9v
bCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworICAgIGZyaWVuZCBjbGFz
cyBJbnNlcnRpb25TZXQ7CisgICAgCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIEluc3RMaXN0IG1f
aW5zdHM7CisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisgICAgUHJlZGVjZXNzb3JM
aXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNz
IERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNv
bnN0IEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERl
ZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAg
ICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpckJhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworQ0NhbGxTcGVjaWFsOjpDQ2FsbFNwZWNpYWwoKQoreworICAgIG1fY2xvYmJl
cmVkUmVncyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKKyAgICBtX2Nsb2JiZXJlZFJl
Z3MuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVy
ZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7
CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7Cit9CisKK0NDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgpCit7Cit9CisKK3Zv
aWQgQ0NhbGxTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJk
YTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhpbnN0
LmFyZ3NbMV0sIEFyZzo6VXNlLCBBcmc6OkdQKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIEZvciB0aGUgdHlw
ZSwgd2UgY2FuIGp1c3QgcXVlcnkgdGhlIGFyZydzIHR5cGUuIFRoZSBhcmcgd2lsbCBoYXZlIGEg
dHlwZSwgYmVjYXVzZSB3ZQorICAgICAgICAvLyByZXF1aXJlIHRoZXNlIGFyZ3MgdG8gYmUgYXJn
dW1lbnQgcmVnaXN0ZXJzLgorICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbaV0sIEFyZzo6VXNl
LCBpbnN0LmFyZ3NbaV0udHlwZSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjpp
c1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsK
KyAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAg
ICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgY2FzZSBB
cmc6OlN0YWNrOgorICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbnN0LmFy
Z3NbMV0uaXNHUCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5zdC5h
cmdzW2ldLmlzUmVnKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYg
KGluc3QuYXJnc1tpXSA9PSBUbXAoc2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFs
OjphZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEg
Y2FuIGJlIGEgc3RhY2sgYWRkcmVzcyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IENDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJT
ZXQmKQoreworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJ
bnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAg
IHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAg
Y2FzZSBBcmc6OkltbTY0OgorICAgICAgICBqaXQubW92ZShpbnN0LmFyZ3NbMV0uYXNUcnVzdGVk
SW1tUHRyKCksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdp
c3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGppdC5j
YWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpB
ZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVt
cCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNsb2JiZXJl
ZFJlZ3MoSW5zdCYpCit7CisgICAgcmV0dXJuIG1fY2xvYmJlcmVkUmVnczsKK30KKwordm9pZCBD
Q2FsbFNwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJDQ2FsbCIpOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJmdW5jdGlvbiBjYWxsIHRo
YXQgdXNlcyB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIik7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDQ2FsbFNwZWNpYWxfaAorI2RlZmluZSBB
aXJDQ2FsbFNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNw
ZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCisvLyBVc2UgdGhpcyBzcGVjaWFsIGZvciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFyZyAw
IGlzIG9mIGNvdXJzZSBhIFNwZWNpYWwgYXJnIHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0NhbGxT
cGVjaWFsIG9iamVjdC4gQXJnIDEgaXMgdGhlIGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJbW1Q
dHIsIGEgcmVnaXN0ZXIsIG9yIGFuIGFkZHJlc3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3MgYXJl
IGp1c3QgdGhlIHNldCBvZiBhcmd1bWVudCByZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwuIEZv
ciBhcmd1bWVudHMgdGhhdCBnbyB0bworLy8gdGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0aGUg
Z3J1bnQgd29yayBvZiBkb2luZyB0aG9zZSBzdGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBvbmx5
IHJlYXNvbiB3aHkKKy8vIHdlIHNwZWNpZnkgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBhcmd1
bWVudHMgdG8gYSBjYWxsIGlzIHNvIHRoYXQgdGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBzZWUK
Ky8vIHRoYXQgdGhleSBnZXQgdXNlZCBoZXJlLiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRvbWFn
aWNhbGx5IHJlcG9ydCBhbGwgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2VkIGJl
Y2F1c2UgaWYgd2UgaGFkIGEgY2FsbCB0aGF0IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhleSdk
IGFwcGVhciB0byBiZSBsaXZlIHVudGlsIHNvbWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhlIHBy
b2xvZ3VlLCB3aGljaGV2ZXIgaGFwcGVuZWQgc29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNpYWwg
OiBwdWJsaWMgU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAgfkND
YWxsU3BlY2lhbCgpOworCisgICAgLy8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBw
YXNzIGFyZ3VtZW50cy4gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBu
b3QKKyAgICAvLyB1c2VkIGZvciBhcmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9u
LiBCeSB0aGUgd2F5LCB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8g
dGhpcyBzcGVjaWFsIHRvIGJlIHNwZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyBzY3JhdGNoUmVnaXN0ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwOworCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6
RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0
ZXJTZXQmKSBvdmVycmlkZTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYs
IENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVw
RHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBS
ZWdpc3RlclNldCBtX2Nsb2JiZXJlZFJlZ3M7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ0Nh
bGxTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQ29kZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxs
U3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ29kZTo6Q29kZSgpCisgICAg
OiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQoreworfQorCitDb2RlOjp+Q29kZSgpCit7Cit9
CisKK0Jhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tz
LnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0
KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1N0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVT
aXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFja1Nsb3QoYnl0ZVNpemUsIG1f
c3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7CisgICAgU3RhY2tTbG90KiByZXN1bHQg
PSBzbG90LmdldCgpOworICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RGOjptb3ZlKHNsb3QpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitTcGVjaWFsKiBDb2RlOjphZGRTcGVjaWFsKHN0ZDo6
dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQoreworICAgIFNwZWNpYWwqIHJlc3VsdCA9IHNw
ZWNpYWwuZ2V0KCk7CisgICAgbV9zcGVjaWFscy5hcHBlbmQoV1RGOjptb3ZlKHNwZWNpYWwpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3BlY2lh
bCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAgICAgICBtX2NDYWxsU3BlY2lh
bCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAgICAgICAgYWRkU3BlY2lhbChz
dGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAgIH0KKworICAgIHJldHVybiBt
X2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7Cisg
ICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30KKwordm9pZCBDb2RlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAoc3Rh
Y2tTbG90cygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxuIik7
CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAgICAg
ICAgb3V0LnByaW50KCIgICAgIiwgcG9pbnRlckR1bXAoc2xvdCksICI6ICIsIGRlZXBEdW1wKHNs
b3QpLCAiXG4iKTsKKyAgICB9CisgICAgaWYgKHNwZWNpYWxzKCkuc2l6ZSgpKSB7CisgICAgICAg
IG91dC5wcmludCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFs
IDogc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIHBvaW50ZXJEdW1w
KHNwZWNpYWwpLCAiOiAiLCBkZWVwRHVtcChzcGVjaWFsKSwgIlxuIik7CisgICAgfQorICAgIGlm
IChtX2ZyYW1lU2l6ZSkKKyAgICAgICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAiLCBtX2ZyYW1l
U2l6ZSwgIlxuIik7CisgICAgaWYgKG1fY2FsbEFyZ0FyZWFTaXplKQorICAgICAgICBvdXQucHJp
bnQoIkNhbGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIpOworICAg
IGlmIChtX2NhbGxlZVNhdmVSZWdpc3RlcnMuc2l6ZSgpKQorICAgICAgICBvdXQucHJpbnQoIkNh
bGxlZSBzYXZlczogIiwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzLCAiXG4iKTsKK30KKwordW5zaWdu
ZWQgQ29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAg
ICB3aGlsZSAoaW5kZXggPCBzaXplKCkgJiYgIWF0KGluZGV4KSkKKyAgICAgICAgaW5kZXgrKzsK
KyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3Vuc2lnbmVkIENvZGU6OmZpbmROZXh0QmxvY2tJbmRl
eCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmluZEZpcnN0QmxvY2tJbmRl
eChpbmRleCArIDEpOworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjpmaW5kTmV4dEJsb2NrKEJhc2lj
QmxvY2sqIGJsb2NrKSBjb25zdAoreworICAgIHJldHVybiBhdChmaW5kTmV4dEJsb2NrSW5kZXgo
YmxvY2stPmluZGV4KCkpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDb2RlX2gKKyNk
ZWZpbmUgQWlyQ29kZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFz
aWNCbG9jay5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Ns
b3QuaCIKKyNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgorI2luY2x1ZGUgIlN0YWNr
QWxpZ25tZW50LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQ
cm9jZWR1cmU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDQ2FsbFNwZWNpYWw7CisKKy8v
IFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJdCBy
ZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFuIHRoZQorLy8gZ2VuZXJhdGVkIG1hY2hp
bmUgY29kZSAtIGZvciBleGFtcGxlIGlmIHlvdSdyZSBnZW5lcmF0aW5nIDFNQiBvZiBtYWNoaW5l
IGNvZGUsIHlvdSBuZWVkIGFib3V0CisvLyA0ME1CIG9mIEFpci4KKworY2xhc3MgQ29kZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29kZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgQ29kZSgpOworICAgIH5Db2RlKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBTdGFja1Nsb3QqIGFk
ZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFs
dWUqID0gbnVsbHB0cik7CisKKyAgICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0
cjxTcGVjaWFsPik7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBzcGVjaWFsIHlvdSBuZWVkIHRvIG1h
a2UgYSBDIGNhbGwhCisgICAgQ0NhbGxTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIFRt
cCBuZXdUbXAoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6Z3BUbXBGb3JJ
bmRleChtX251bUdQVG1wcysrKTsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAg
cmV0dXJuIFRtcDo6ZnBUbXBGb3JJbmRleChtX251bUZQVG1wcysrKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHVuc2lnbmVkIG51bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0
dXJuIG1fbnVtR1BUbXBzOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1
cm4gbV9udW1GUFRtcHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYWxsQXJn
QXJlYVNpemUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxBcmdBcmVhU2l6ZTsgfQorCisgICAgLy8g
WW91IGNhbiBjYWxsIHRoaXMgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiB0byBmb3JjZSBhIG1pbmlt
dW0gY2FsbCBhcmcgYXJlYSBzaXplLgorICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6ZSh1
bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUgPSBzdGQ6Om1h
eCgKKyAgICAgICAgICAgIG1fY2FsbEFyZ0FyZWFTaXplLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVz
KCksIHNpemUpKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnJhbWVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVNpemU7IH0KKworICAgIC8vIE9ubHkgcGhhc2VzIHRoYXQgZG8gc3RhY2sg
YWxsb2NhdGlvbiBhcmUgYWxsb3dlZCB0byBzZXQgdGhpcy4gQ3VycmVudGx5LCBvbmx5CisgICAg
Ly8gQWlyOjphbGxvY2F0ZVN0YWNrKCkgZG9lcyB0aGlzLgorICAgIHZvaWQgc2V0RnJhbWVTaXpl
KHVuc2lnbmVkIGZyYW1lU2l6ZSkKKyAgICB7CisgICAgICAgIG1fZnJhbWVTaXplID0gZnJhbWVT
aXplOworICAgIH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisKKyAgICAvLyBSZWNvbXB1
dGVzIHByZWRlY2Vzc29ycyBhbmQgZGVsZXRlcyB1bnJlYWNoYWJsZSBibG9ja3MuCisgICAgdm9p
ZCByZXNldFJlYWNoYWJpbGl0eSgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgp
OyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
YmxvY2tzW2luZGV4XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgLy8gRmluZHMgdGhl
IHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcg
Pj0gaW5kZXguCisgICAgdW5zaWduZWQgZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBh
dChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmRO
ZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICBCYXNpY0Jsb2NrKiBm
aW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqKSBjb25zdDsKKworICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2RlKG51
bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29kZSYgY29kZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICA6IG1fY29kZSgmY29kZSkKKyAgICAgICAgICAgICwgbV9pbmRleChtX2NvZGUtPmZp
bmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jb2RlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVy
YXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fY29kZS0+ZmluZEZp
cnN0QmxvY2tJbmRleChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5t
X2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2Rl
KiBtX2NvZGU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKwor
ICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0
YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90cy5zaXplKCk7IH0KKyAgICAgICAgU3Rh
Y2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tT
bG90c1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBp
dGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAg
ICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9p
bmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVy
YXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5k
ZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAg
ICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTdGFja1Nsb3RzQ29s
bGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAg
ICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3Qg
Q29kZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Ns
b3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAg
CisgICAgY2xhc3MgU3BlY2lhbHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNw
ZWNpYWxzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQorICAgICAgICAgICAgOiBtX2NvZGUo
Y29kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzLnNpemUoKTsgfQorICAgICAgICBTcGVjaWFs
KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHNbaW5k
ZXhdLmdldCgpOyB9CisgICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0
IFNwZWNpYWxzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAg
ICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBt
X2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBTcGVjaWFsKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBv
dGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uKiBtX2NvbGxl
Y3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAg
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBz
aXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7Cisg
ICAgfTsKKworICAgIFNwZWNpYWxzQ29sbGVjdGlvbiBzcGVjaWFscygpIGNvbnN0IHsgcmV0dXJu
IFNwZWNpYWxzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKKyAgICAvLyBUaGUgbmFtZSBoYXMg
dG8gYmUgYSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9yeSBtYW5h
Z2VtZW50IGZvciB0aGUgc3RyaW5nLgorICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFtZShjb25zdCBj
aGFyKiBuYW1lKQorICAgIHsKKyAgICAgICAgbV9sYXN0UGhhc2VOYW1lID0gbmFtZTsKKyAgICB9
CisKKyAgICBjb25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
UGhhc2VOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFj
a1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Js
b2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPj4gbV9z
cGVjaWFsczsKKyAgICBDQ2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9Owor
ICAgIHVuc2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBz
IHsgMCB9OworICAgIHVuc2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1f
Y2FsbEFyZ0FyZWFTaXplIHsgMCB9OworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVl
U2F2ZVJlZ2lzdGVyczsKKyAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7Cit9OworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEFpckZyZXF1
ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVl
bnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpckZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkFpckhhbmRs
ZUNhbGxlZVNhdmVzLmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisjaW5jbHVk
ZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzSW5k
ZXhNYXAuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUs
IENDYWxsSGVscGVycyYgaml0KQoreworICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0aGUgaW5jb21p
bmcgY29kZSB0byBoYXZlIHByZWRlY2Vzc29ycyBjb21wdXRlZC4KKyAgICBjb2RlLnJlc2V0UmVh
Y2hhYmlsaXR5KCk7CisgICAgCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAg
dmFsaWRhdGUoY29kZSk7CisKKyAgICAvLyBJZiB3ZSdyZSBkb2luZyBzdXBlciB2ZXJib3NlIGR1
bXBpbmcsIHRoZSBwaGFzZSBzY29wZSBvZiBhbnkgcGhhc2Ugd2lsbCBhbHJlYWR5IGRvIGEgZHVt
cC4KKyAgICBpZiAoc2hvdWxkRHVtcElSKCkgJiYgIXNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkp
IHsKKyAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhj
b2RlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0
aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXph
dGlvbnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDQ1NgorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBoYXZlIGEgcmVhbCByZWdpc3Rl
ciBhbGxvY2F0b3IuIFRoZW4sIHdlIGNvdWxkIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKQorICAgIC8v
IGluIHBsYWNlIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3Igb25seSBmb3IgdGVzdGluZy4KKyAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1
NworICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKKworICAgIC8vIFByaW9yIHRvIHRoaXMgcG9p
bnQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBl
eHBsaWNpdC4gSXQgYWxzbworICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2gg
Y2FsbGVlLXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgorICAgIGhhbmRsZUNhbGxl
ZVNhdmVzKGNvZGUpOworCisgICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcg
QXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcwor
ICAgIC8vIHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3Vs
ZCBiZSBwcmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQorICAgIC8vIHNob3VsZG4n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgorICAgIGFsbG9jYXRlU3RhY2so
Y29kZSk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBoYXZlIGEgY29kZSBsYXlv
dXQgb3B0aW1pemF0aW9uIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ3OAorCisgICAgLy8gRklYTUU6IFdlIG5lZWQgYSBsYXRlIGxpdmVu
ZXNzIGFuYWx5c2lzIG92ZXIgcmVnaXN0ZXJzIHRvIGZpbGwgaW4gdGhlCisgICAgLy8gU3BlY2lh
bDo6cmVwb3J0VXNlZFJlZ2lzdGVycygpLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA1MTEKKworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisg
ICAgICAgIHZhbGlkYXRlKGNvZGUpOworCisgICAgLy8gRG8gYSBmaW5hbCBkdW1wIG9mIEFpci4g
Tm90ZSB0aGF0IHdlIGhhdmUgdG8gZG8gdGhpcyBldmVuIGlmIHdlIGFyZSBkb2luZyBwZXItcGhh
c2UgZHVtcGluZywKKyAgICAvLyBzaW5jZSB0aGUgZmluYWwgZ2VuZXJhdGlvbiBpcyBub3QgYSBw
aGFzZS4KKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGFm
dGVyICIsIGNvZGUubGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOwor
ICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIEFuZCBub3csIHdlIGdlbmVy
YXRlIGNvZGUuCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBHZW5lcmF0aW9uQ29udGV4dCBj
b250ZXh0OworICAgIGNvbnRleHQuY29kZSA9ICZjb2RlOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIENDYWxsSGVscGVyczo6TGFiZWw+IGJsb2NrTGFiZWxzKGNvZGUuc2l6ZSgpKTsKKyAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNv
ZGUuc2l6ZSgpKTsKKworICAgIGF1dG8gbGluayA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpKdW1wIGp1
bXAsIEJhc2ljQmxvY2sqIHRhcmdldCkgeworICAgICAgICBpZiAoYmxvY2tMYWJlbHNbdGFyZ2V0
XS5pc1NldCgpKSB7CisgICAgICAgICAgICBqdW1wLmxpbmtUbyhibG9ja0xhYmVsc1t0YXJnZXRd
LCAmaml0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJsb2Nr
SnVtcHNbdGFyZ2V0XS5hcHBlbmQoanVtcCk7CisgICAgfTsKKworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGJsb2NrSnVtcHNbYmxvY2tdLmxpbmsoJmppdCk7
CisgICAgICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49IDEpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+YXQoaSkuZ2VuZXJhdGUoaml0LCBjb250ZXh0
KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5vcGNvZGUgPT0gSnVtcAorICAgICAg
ICAgICAgJiYgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmluZE5leHRCbG9jayhi
bG9jaykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYmxvY2stPmxhc3Qo
KS5vcGNvZGUgPT0gUmV0KSB7CisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVw
cmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwor
ICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgorICAgICAgICAgICAgaml0LmVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGp1bXAgPSBibG9jay0+bGFzdCgpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIGZv
ciAoSW5zdCYgaW5zdCA6ICpibG9jaykKKyAgICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRl
KGppdCwgY29udGV4dCk7CisgICAgICAgIHN3aXRjaCAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkg
eworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBBU1NFUlQoIWp1bXAuaXNTZXQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbGluayhqdW1w
LCBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgMjoKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDAp
KTsKKyAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxvY2soMSkgIT0gY29kZS5maW5k
TmV4dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgICAgICBsaW5rKGppdC5qdW1wKCksIGJsb2Nr
LT5zdWNjZXNzb3JCbG9jaygxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgbGF0ZVBhdGggOiBj
b250ZXh0LmxhdGVQYXRocykKKyAgICAgICAgbGF0ZVBhdGgtPnJ1bihqaXQsIGNvbnRleHQpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGVfaAorI2RlZmlu
ZSBBaXJHZW5lcmF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgQ29kZTsKKworLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3Qg
aGFkIGFueSBzdGFjayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55Cisv
LyByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLCBhbmQg
dGhlbiBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuCisvLyBDQ2FsbEhlbHBlcnMg
aW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcyBpbiB0aGUgc3VwcGxp
ZWQgY29kZSBhcyBpdCBpcworLy8gZ2VuZXJhdGluZy4KK3ZvaWQgZ2VuZXJhdGUoQ29kZSYsIEND
YWxsSGVscGVycyYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworLy8gVGhpcyBpcyBnZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyNp
bmNsdWRlICJBaXJPcGNvZGVHZW5lcmF0ZWQuaCIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
aW9uQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJHZW5lcmF0aW9uQ29udGV4dF9oCisjZGVmaW5lIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5l
cmF0aW9uQ29udGV4dCB7CisgICAgdHlwZWRlZiB2b2lkIExhdGVQYXRoRnVuY3Rpb24oQ0NhbGxI
ZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8TGF0
ZVBhdGhGdW5jdGlvbj4gTGF0ZVBhdGg7CisKKyAgICBWZWN0b3I8UmVmUHRyPExhdGVQYXRoPj4g
bGF0ZVBhdGhzOworICAgIENvZGUqIGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2Vu
ZXJhdGlvbkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3Bl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
dm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhh
c2VTY29wZShjb2RlLCAiaGFuZGxlQ2FsbGVlU2F2ZXMiKTsKKworICAgIFJlZ2lzdGVyU2V0IHVz
ZWRDYWxsZWVTYXZlczsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Cisg
ICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgaW5zdC5mb3JF
YWNoVG1wRmFzdCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEF0IGZpcnN0IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2VkIHJlZ3MuCisgICAg
ICAgICAgICAgICAgICAgIHVzZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3ZSBmaWx0ZXIgdG8g
cmVhbGx5IGdldCB0aGUgY2FsbGVlIHNhdmVzLgorICAgIHVzZWRDYWxsZWVTYXZlcy5maWx0ZXIo
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKKyAgICBpZiAoIXVzZWRDYWxs
ZWVTYXZlcy5udW1iZXJPZlNldFJlZ2lzdGVycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
b2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSA9IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KHVzZWRDYWxs
ZWVTYXZlcyk7CisKKyAgICBzaXplX3QgYnl0ZVNpemUgPSAwOworICAgIGZvciAoY29uc3QgUmVn
aXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkKKyAgICAg
ICAgYnl0ZVNpemUgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KC1lbnRyeS5vZmZzZXQo
KSksIGJ5dGVTaXplKTsKKworICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFj
a1Nsb3QoYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgLy8gVGhpcyBpcyBh
IGJpdCB3ZWlyZCBzaW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50
IHN0YWNrIHNsb3QgdG8gdGhpcworICAgIC8vIGFyZWEuIEFsc28sIG91ciBydW50aW1lIGRvZXMg
bm90IHJlcXVpcmUgdXMgdG8gcGluIHRoZSBzYXZlcyBhcmVhLiBNYXliZSB3ZSBzaG91bGRuJ3Qg
cGluIGl0PworICAgIHNhdmVzQXJlYS0+c2V0T2Zmc2V0RnJvbUZQKC1ieXRlU2l6ZSk7CisKKyAg
ICBhdXRvIGFyZ0ZvciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIC0+IEFy
ZyB7CisgICAgICAgIHJldHVybiBBcmc6OnN0YWNrKHNhdmVzQXJlYSwgZW50cnkub2Zmc2V0KCkg
KyBieXRlU2l6ZSk7CisgICAgfTsKKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29k
ZSk7CisgICAgCisgICAgLy8gRmlyc3QgaW5zZXJ0IHNhdmluZyBjb2RlIGluIHRoZSBwcm9sb2d1
ZS4KKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAg
ICAgIDAsIGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgY29kZVswXS0+
YXQoMCkub3JpZ2luLAorICAgICAgICAgICAgVG1wKGVudHJ5LnJlZygpKSwgYXJnRm9yKGVudHJ5
KSk7CisgICAgfQorICAgIGluc2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOworCisgICAgLy8g
Tm93IGluc2VydCByZXN0b3JlIGNvZGUgYXQgZXBpbG9ndWVzLgorICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIEluc3QmIGxhc3QgPSBibG9jay0+bGFzdCgpOwor
ICAgICAgICBpZiAobGFzdC5vcGNvZGUgIT0gUmV0KQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVl
U2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAg
ICAgICAgICAgICAgIGJsb2NrLT5zaXplKCkgLSAxLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92
ZSA6IE1vdmVEb3VibGUsIGxhc3Qub3JpZ2luLAorICAgICAgICAgICAgICAgIGFyZ0ZvcihlbnRy
eSksIFRtcChlbnRyeS5yZWcoKSkpOworICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5l
eGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisjZGVm
aW5lIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsK
KworLy8gVGhpcyBwaGFzZSBpZGVudGlmaWVzIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBhbmQgYWRk
cyBjb2RlIHRvIHNhdmUvcmVzdG9yZSB0aGVtIGluIHRoZQorLy8gcHJvbG9ndWUvZXBpbG9ndWUg
dG8gdGhlIGNvZGUuIEl0J3MgYSBtYW5kYXRvcnkgcGhhc2UuCisKKy8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBjb29sIHRvIG1ha2UgdGhpcyBtb3JlIGludGVyYWN0aXZlIHdpdGggdGhlIEFpciBjbGll
bnQgYW5kIGFsc28gbW9yZQorLy8gcG93ZXJmdWwuCisvLyBXZSBzaG91bGQgaGF2ZSBzaHJpbmsg
d3JhcHBpbmc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTgK
Ky8vIFdlIHNob3VsZCBtYWtlIHRoaXMgaW50ZXJhY3Qgd2l0aCB0aGUgY2xpZW50OiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU5CisKK3ZvaWQgaGFuZGxlQ2Fs
bGVlU2F2ZXMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySGFuZGxlQ2FsbGVlU2F2ZXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRp
b25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhibG9jay0+bV9pbnN0cywg
bV9pbnNlcnRpb25zKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlySW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgQWlySW5zZXJ0aW9uU2V0X2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3Rm
L0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xh
c3MgQ29kZTsKKwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247CisKK2Ns
YXNzIEluc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUmIGNvZGUp
CisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUmIGNvZGUo
KSB7IHJldHVybiBtX2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9p
ZCBhcHBlbmRJbnNlcnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0
aW9ucy5hcHBlbmQoc3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwg
SW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGlu
ZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwg
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRl
eCwgSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQor
CisgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBt
X2NvZGU7CisgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpckluc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc3Q6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQob3Bjb2RlLCAiICIs
IGxpc3REdW1wKGFyZ3MpKTsKKyAgICBpZiAob3JpZ2luKSB7CisgICAgICAgIGlmIChhcmdzLnNp
emUoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKKyAgICAgICAgb3V0LnByaW50KCpv
cmlnaW4pOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0X2gKKyNkZWZp
bmUgQWlySW5zdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgi
CisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBSZWdpc3RlclNldDsK
KworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitz
dHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK3N0cnVjdCBJbnN0IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJbnN0KCkKKyAgICAgICAgOiBv
cmlnaW4obnVsbHB0cikKKyAgICAgICAgLCBvcGNvZGUoTm9wKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAgICA6IG9yaWdp
bihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9wY29kZSBvcGNv
ZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAg
ICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAsIG9yaWdpbihvcmlnaW4p
CisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNv
ZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCisgICAg
ICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAg
LCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUs
IFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhXVEY6
Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9w
Y29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5j
dG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0g
Zm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVk
OyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQor
ICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBvbmx5IHdhbGtz
IHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBpdCBkb2Vzbid0
IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcmIGFyZyA6IGFyZ3MpCisgICAgICAgICAgICBh
cmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAgfQorCisgICAgdHlwZWRlZiB2b2lkIEVh
Y2hBcmdDYWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSk7CisgICAgCisgICAgLy8g
Q2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4gVGhpcyBmdW5jdGlvbiBp
cyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBcmcoY29uc3QgRnVuY3Rv
ciYpOworCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xlLCB0eXBlKS4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZygKKyAgICAgICAg
ICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAg
ICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIGZ1bmN0b3IpOworICAgICAg
ICAgICAgfSk7CisgICAgfQorCisgICAgLy8gVGhpbmcgY2FuIGJlIGVpdGhlciBBcmcgb3IgVG1w
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhp
cyBpbnN0cnVjdGlvbiBoYXMgYSBTcGVjaWFsKi4gVGhpcyB1bmxvY2tzIHNvbWUgZXh0cmEgZnVu
Y3Rpb25hbGl0eS4KKyAgICBib29sIGhhc1NwZWNpYWwoKSBjb25zdDsKKworICAgIC8vIFJlcG9y
dHMgYW55IGFkZGl0aW9uYWwgcmVnaXN0ZXJzIGNsb2JiZXJlZCBieSB0aGlzIG9wZXJhdGlvbi4g
Tm90ZSB0aGF0IGZvciBlZmZpY2llbmN5LAorICAgIC8vIGV4dHJhQ2xvYmJlcmVkUmVncygpIG9u
bHkgd29ya3MgaWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKCk7CisKKyAgICAvLyBVc2UgdGhpcyB0byByZXBvcnQg
d2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBkb25lIGp1c3QgYmVmb3Jl
IGNvZGVnZW4uIE5vdGUKKyAgICAvLyB0aGF0IGZvciBlZmZpY2llbmN5LCByZXBvcnRVc2VkUmVn
aXN0ZXJzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIHZv
aWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYpOworCisgICAgLy8gSXMg
dGhpcyBpbnN0cnVjdGlvbiBpbiBvbmUgb2YgdGhlIHZhbGlkIGZvcm1zIHJpZ2h0IG5vdz8gVGhp
cyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3Iu
cmIuCisgICAgYm9vbCBpc1ZhbGlkRm9ybSgpOworCisgICAgLy8gQXNzdW1pbmcgdGhpcyBpbnN0
cnVjdGlvbiBpcyBpbiBhIHZhbGlkIGZvcm0gcmlnaHQgbm93LCB3aWxsIGl0IHN0aWxsIGJlIGlu
IG9uZSBvZiB0aGUgdmFsaWQKKyAgICAvLyBmb3JtcyBpZiB3ZSBwdXQgYW4gQWRkciByZWZlcmVu
Y2luZyB0aGUgc3RhY2sgKG9yIGEgU3RhY2tTbG90IG9yIENhbGxBcmcsIG9mIGNvdXJzZSkgaW4g
dGhlCisgICAgLy8gZ2l2ZW4gaW5kZXg/IFNwaWxsaW5nIHVzZXMgdGhpczogaXQgd2Fsa3MgdGhl
IGFyZ3MgYnkgaW5kZXggdG8gZmluZCBUbXBzIHRoYXQgbmVlZCBzcGlsbGluZzsKKyAgICAvLyBp
ZiBpdCBmaW5kcyBvbmUsIGl0IGNhbGxzIHRoaXMgdG8gc2VlIGlmIGl0IGNhbiByZXBsYWNlIHRo
ZSBBcmc6OlRtcCB3aXRoIGFuIEFyZzo6QWRkci4gSWYgaXQKKyAgICAvLyBmaW5kcyBhIG5vbi1U
bXAgQXJnLCB0aGVuIGl0IGNhbGxzIHRoYXQgQXJnJ3MgZm9yRWFjaFRtcCB0byBkbyBhIHJlcGxh
Y2VtZW50IHRoYXQgd2F5LgorICAgIC8vCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdl
bmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgYWRtaXRzU3RhY2sodW5z
aWduZWQgYXJnSW5kZXgpOworCisgICAgLy8gR2VuZXJhdGUgc29tZSBjb2RlIGZvciB0aGlzIGlu
c3RydWN0aW9uLiBUaGlzIGlzLCBsaWtlLCBsaXRlcmFsbHkgb3VyIGJhY2tlbmQuIElmIHRoaXMg
aXMgdGhlCisgICAgLy8gdGVybWluYWwsIGl0IHJldHVybnMgdGhlIGp1bXAgdGhhdCBuZWVkcyB0
byBiZSBsaW5rZWQgZm9yIHRoZSAidGhlbiIgY2FzZSwgd2l0aCB0aGUgImVsc2UiCisgICAgLy8g
Y2FzZSBiZWluZyBmYWxsLXRocm91Z2guIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQg
Ynkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUo
Q0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCisgICAgQXJnTGlzdCBhcmdzOworICAgIFZhbHVlKiBvcmlnaW47
IC8vIFRoZSBCMzo6VmFsdWUgdGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbS4KKyAgICBPcGNvZGUg
b3Bjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckluc3RfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0SW5saW5lc19oCisjZGVmaW5lIEFpckluc3RJ
bmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisj
aW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5j
bHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRm9yRWFjaDsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8VG1wPiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKEluc3Qm
IGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpbnN0LmZvckVh
Y2hUbXAoZnVuY3Rvcik7CisgICAgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8QXJn
PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JF
YWNoKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBp
bnN0LmZvckVhY2hBcmcoZnVuY3Rvcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIEluc3Q6OmZvckVhY2goY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKK3sKKyAgICBGb3JFYWNoPFRoaW5nPjo6Zm9yRWFjaCgqdGhpcywgZnVuY3Rv
cik7Cit9CisKK2lubGluZSBib29sIEluc3Q6Omhhc1NwZWNpYWwoKSBjb25zdAoreworICAgIHJl
dHVybiBhcmdzLnNpemUoKSAmJiBhcmdzWzBdLmlzU3BlY2lhbCgpOworfQorCitpbmxpbmUgY29u
c3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncygpCit7CisgICAgQVNTRVJU
KGhhc1NwZWNpYWwoKSk7CisgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUNsb2Ji
ZXJlZFJlZ3MoKnRoaXMpOworfQorCitpbmxpbmUgdm9pZCBJbnN0OjpyZXBvcnRVc2VkUmVnaXN0
ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIEFTU0VSVChoYXNT
cGVjaWFsKCkpOworICAgIGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0ZXJzKCp0
aGlzLCB1c2VkUmVnaXN0ZXJzKTsKK30KKworaW5saW5lIGJvb2wgaXNTaGlmdFZhbGlkKGNvbnN0
IEluc3QmIGluc3QpCit7CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICByZXR1cm4g
aW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3RlcnM6OmVjeCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShpbnN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfSAgIAorCitpbmxpbmUg
Ym9vbCBpc0xzaGlmdDMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNT
aGlmdFZhbGlkKGluc3QpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdElubGluZXNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTGl2ZW5lc3NfaAorI2RlZmluZSBBaXJM
aXZlbmVzc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gWW91
IGNhbiBjb21wdXRlIGxpdmVuZXNzIG92ZXIgVG1wJ3Mgb3Igb3ZlciBBcmcncy4gSWYgeW91IGNv
bXB1dGUgb3ZlciBBcmcncywgeW91IGdldCBib3RoCisvLyBzdGFjayBsaXZlbmVzcyBhbmQgdG1w
IGxpdmVuZXNzLgordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+CitjbGFzcyBMaXZlbmVzcyB7Citw
dWJsaWM6CisgICAgTGl2ZW5lc3MoQ29kZSYgY29kZSkKKyAgICB7CisgICAgICAgIG1fbGl2ZUF0
SGVhZC5yZXNpemUoY29kZS5zaXplKCkpOworICAgICAgICBtX2xpdmVBdFRhaWwucmVzaXplKGNv
ZGUuc2l6ZSgpKTsKKworICAgICAgICBJbmRleFNldDxCYXNpY0Jsb2NrPiBzZWVuOworCisgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7CisgICAg
ICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGJsb2Nr
SW5kZXggPSBjb2RlLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gY29kZS5hdChibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBM
b2NhbENhbGMgbG9jYWxDYWxjKCp0aGlzLCBibG9jayk7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KQorICAgICAgICAg
ICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAg
ICAgICAgICAgICAgYm9vbCBmaXJzdFRpbWUgPSBzZWVuLmFkZChibG9jayk7CisgICAgICAgICAg
ICAgICAgaWYgKCFmaXJzdFRpbWUgJiYgbG9jYWxDYWxjLmxpdmUoKSA9PSBtX2xpdmVBdEhlYWRb
YmxvY2tdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbGl2
ZUF0VGFpbFtwcmVkZWNlc3Nvcl0uYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxD
YWxjLmxpdmUoKS5iZWdpbigpLCBsb2NhbENhbGMubGl2ZSgpLmVuZCgpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgbV9saXZlQXRIZWFkW2Jsb2NrXSA9IGxvY2FsQ2FsYy50
YWtlTGl2ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY29uc3Qg
SGFzaFNldDxUaGluZz4mIGxpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKKyAgICBjb25z
dCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdFRhaWxbYmxvY2tdOworICAgIH0KKworICAgIC8v
IFRoaXMgY2FsY3VsYXRvciBoYXMgdG8gYmUgcnVuIGluIHJldmVyc2UuCisgICAgY2xhc3MgTG9j
YWxDYWxjIHsKKyAgICBwdWJsaWM6CisgICAgICAgIExvY2FsQ2FsYyhMaXZlbmVzcyYgbGl2ZW5l
c3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2xpdmUobGl2ZW5lc3MubGl2
ZUF0VGFpbChibG9jaykpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEhh
c2hTZXQ8VGhpbmc+JiBsaXZlKCkgY29uc3QgeyByZXR1cm4gbV9saXZlOyB9CisgICAgICAgIEhh
c2hTZXQ8VGhpbmc+JiYgdGFrZUxpdmUoKSB7IHJldHVybiBXVEY6Om1vdmUobV9saXZlKTsgfQor
CisgICAgICAgIHZvaWQgZXhlY3V0ZShJbnN0JiBpbnN0KQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBGaXJzdCBoYW5kbGUgZGVmJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+
KAorICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShhcmcp
OworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBOZXh0IGhhbmRsZSBjbG9i
YmVyZWQgcmVnaXN0ZXJzLgorICAgICAgICAgICAgaWYgKGluc3QuaGFzU3BlY2lhbCgpKSB7Cisg
ICAgICAgICAgICAgICAgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAg
ICAgICAgICAgICAgICBbdGhpc10gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fbGl2ZS5yZW1vdmUoVGhpbmcoVG1wKHJlZykpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmFsbHkgaGFu
ZGxlIHVzZSdzLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAg
ICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5hZGQoYXJnKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFzaFNldDxUaGluZz4g
bV9saXZlOworICAgIH07CisgICAgCitwcml2YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ss
IEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
SGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0VGFpbDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJM
aXZlbmVzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjIgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgU3lsbGFidXM6CisjCisjIFJv
bGVzIGFuZCB0eXBlczoKKyMgVTpHID0+IHVzZSBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3Rl
ciBvciB2YWx1ZQorIyBEOkcgPT4gZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9y
IHZhbHVlCisjIFVEOkcgPT4gdXNlIGFuZCBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0
ZXIgb3IgdmFsdWUKKyMgVTpGID0+IHVzZSBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisj
IEQ6RiA9PiBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpGID0+IHVzZSBh
bmQgZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMKKyMgQXJndW1lbnQga2luZHM6
CisjIFRtcCA9PiB0ZW1wb3Jhcnkgb3IgcmVnaXN0ZXIKKyMgSW1tID0+IDMyLWJpdCBpbW1lZGlh
dGUgaW50CisjIEltbTY0ID0+IFRydXN0ZWRJbW02NAorIyBBZGRyID0+IGFkZHJlc3MgYXMgdGVt
cG9yYXJ5L3JlZ2lzdGVyK29mZnNldAorIyBJbmRleCA9PiBCYXNlSW5kZXggYWRkcmVzcworIyBB
YnMgPT4gQWJzb2x1dGVBZGRyZXNzCisjCisjIFRoZSBwYXJzZXIgdmlld3MgdGhlc2UgdGhpbmdz
IGFzIGtleXdvcmRzLCBhbmQgdW5kZXJzdGFuZHMgdGhhdCB0aGV5IGZhbGwgaW50byB0d28gZGlz
dGluY3QgY2xhc3NlcworIyBvZiB0aGluZ3MuIFNvLCBhbHRob3VnaCB0aGlzIGZpbGUgdXNlcyBh
IHBhcnRpY3VsYXIgaW5kZW50YXRpb24gc3R5bGUsIG5vbmUgb2YgdGhlIHdoaXRlc3BhY2Ugb3IK
KyMgZXZlbiBuZXdsaW5lcyBhcmUgbWVhbmluZ2Z1bCB0byB0aGUgcGFyc2VyLiBGb3IgZXhhbXBs
ZSwgeW91IGNvdWxkIHdyaXRlOgorIworIyBGb280MiBVOkcsIFVEOkYgSW1tLCBUbXAgQWRkciwg
VG1wCisjCisjIEFuZCB0aGUgcGFyc2VyIHdvdWxkIGtub3cgdGhhdCB0aGlzIGlzIHRoZSBzYW1l
IGFzOgorIworIyBGb280MiBVOkcsIFVEOkYKKyMgICAgIEltbSwgVG1wCisjICAgICBBZGRyLCBU
bXAKKyMKKyMgSS5lLiBhIHR3by1mb3JtIGluc3RydWN0aW9uIHRoYXQgdXNlcyBhIEdQUiBvciBh
biBpbnQgaW1tZWRpYXRlIGFuZCB1c2VzK2RlZnMgYSBmbG9hdCByZWdpc3Rlci4KKworIyBOb3Rl
IHRoYXQgdGhlIG9wY29kZXMgaGVyZSBoYXZlIGEgbGVhZGluZyBjYXBpdGFsIChBZGQzMikgYnV0
IG11c3QgY29ycmVzcG9uZCB0byBNYWNyb0Fzc2VtYmxlcgorIyBBUEkgdGhhdCBoYXMgYSBsZWFk
aW5nIGxvd2VyLWNhc2UgKGFkZDMyKS4KKworTm9wCisKK0FkZDMyIFU6RywgVUQ6RworICAgIFRt
cCwgVG1wCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBU
bXAsIEFkZHIKKworQWRkMzIgVTpHLCBVOkcsIEQ6RworICAgIEltbSwgVG1wLCBUbXAKKworQWRk
NjQgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAor
ICAgIEFkZHIsIFRtcAorCitBZGQ2NCBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRtcAor
CitBbmQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAgVG1wLCBB
ZGRyCisgICAgQWRkciwgVG1wCisgICAgSW1tLCBBZGRyCisKK0FuZDY0IFU6RywgVUQ6RworICAg
IFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwg
VG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBB
ZGRyLCBUbXAKKworIyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVyIHRoZSBmdWxsIHJlZ2lz
dGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0IGRlcGVuZGluZyBvbgor
IyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0IHRoaXMgaXMgYSBnb29k
IHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEKKyMgTW92ZTY0IGluc3Ry
dWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkgaGF2ZSB0aGlzIG5vdGlv
biBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxseQorIyBtZWFucyBtb3ZlUHRyLgorTW92ZSBVOkcs
IEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAgQWRk
ciwgVG1wIGFzIGxvYWRQdHIgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBj
b2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBJbmRleCwgVG1wIGFzIGxv
YWRQdHIKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVQdHIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3Jl
UHRyCisKK01vdmUzMiBVOkcsIEQ6RworICAgIFRtcCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRy
CisgICAgQWRkciwgVG1wIGFzIGxvYWQzMgorICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAg
VG1wLCBBZGRyIGFzIHN0b3JlMzIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIKKworTW92ZURv
dWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWREb3VibGUK
KyAgICBJbmRleCwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3Vi
bGUKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlRG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6Rywg
RDpGCisgICAgVG1wLCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRt
cAorCitCcmFuY2hBZGQzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1w
LCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAg
IFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hNdWwz
MiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXND
b25kLCBBZGRyLCBUbXAKKworQnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAg
IFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJ
bW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAK
KworQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKworSnVt
cCAvYnJhbmNoCisKK1JldCAvdGVybWluYWwKKworQnJlYWtwb2ludCAvdGVybWluYWwKKworIyBB
aXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRl
cm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUg
dGhlIGZpcnN0IG9wZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRl
ICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29w
ZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9jb2RlKGNvZGUpCisgICAg
LCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgewor
ICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgIiwgY29kZS5sYXN0UGhhc2VOYW1lKCksICIsIGJl
Zm9yZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisg
ICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9
IHRvQ1N0cmluZyhjb2RlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAg
IG1fY29kZS5zZXRMYXN0UGhhc2VOYW1lKG1fbmFtZSk7CisgICAgaWYgKHNob3VsZFZhbGlkYXRl
SVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShtX2NvZGUsIG1fZHVtcEJlZm9yZS5k
YXRhKCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQ
aGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclBoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUGhh
c2VTY29wZV9oCisjZGVmaW5lIEFpclBoYXNlU2NvcGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBDb2RlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKENvZGUmLCBjb25zdCBj
aGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFsaWRhdGlvbgor
Citwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7Cisg
ICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyUGhhc2VT
Y29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQ
cmlvcml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJSZWdpc3RlclByaW9yaXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3Rv
cjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPEdQ
UlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6
OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVz
dWx0ID0gbmV3IFZlY3RvcjxHUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBhbGwg
PSBSZWdpc3RlclNldDo6YWxsR1BScygpOworICAgICAgICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0
ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0
ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBSZWdpc3Rl
clNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAg
ICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcg
cmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2NvbnN0
IFZlY3RvcjxGUFJSZWc+JiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVj
dG9yPEZQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAg
ICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAg
ICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdpc3RlclNl
dCBhbGwgPSBSZWdpc3RlclNldDo6YWxsRlBScygpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQg
Y2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAg
ICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5mcHIoKSk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0
b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUgdHlwZSkKK3sKKyAgICBzdGF0
aWMgVmVjdG9yPFJlZz4qIHJlc3VsdFtBcmc6Om51bVR5cGVzXTsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAg
ICAgW10geworICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdID0gbmV3IFZlY3RvcjxSZWc+KCk7
CisgICAgICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBncHJzSW5Qcmlvcml0eU9yZGVyKCkpCisg
ICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAg
ICAgICAgcmVzdWx0W0FyZzo6RlBdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBm
b3IgKEZQUlJlZyByZWcgOiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAg
cmVzdWx0W0FyZzo6RlBdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICB9KTsKKyAgICByZXR1
cm4gKnJlc3VsdFt0eXBlXTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorI2RlZmluZSBBaXJS
ZWdpc3RlclByaW9yaXR5X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJB
cmcuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigp
OworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQmFuaz4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjsKK3RlbXBs
YXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPiB7CisgICAgY29u
c3QgVmVjdG9yPEdQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGdwcnNJblByaW9y
aXR5T3JkZXIoKTsgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlP
cmRlcjxGUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEZQUlJlZz4mIGluUHJpb3JpdHlPcmRl
cigpIHsgcmV0dXJuIGZwcnNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgQmFuaz4KK2NvbnN0IFZlY3Rvcjx0eXBlbmFtZSBCYW5rOjpSZWdpc3RlclR5cGU+JiBy
ZWdzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICByZXR1cm4gUmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEJhbms+OjppblByaW9yaXR5T3JkZXIoKTsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJl
Z3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclJlZ2lz
dGVyUHJpb3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNw
ZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBjaGFyKiBjb25zdCBTcGVjaWFsOjpkdW1w
UHJlZml4ID0gIiYiOworCitTcGVjaWFsOjpTcGVjaWFsKCkKKyAgICA6IG1faW5kZXgoVUlOVF9N
QVgpCit7Cit9CisKK1NwZWNpYWw6On5TcGVjaWFsKCkKK3sKK30KKworQ1N0cmluZyBTcGVjaWFs
OjpuYW1lKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgZHVtcElt
cGwob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOworfQorCit2b2lkIFNwZWNpYWw6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZp
eCk7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICBpZiAobV9pbmRleCAhPSBVSU5UX01BWCkKKyAg
ICAgICAgb3V0LnByaW50KG1faW5kZXgpOworfQorCit2b2lkIFNwZWNpYWw6OmRlZXBEdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCp0aGlzLCAiOiAiKTsKKyAg
ICBkZWVwRHVtcEltcGwob3V0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJTcGVjaWFsX2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK2Ns
YXNzIFNwZWNpYWwgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNpYWwpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBkdW1wUHJlZml4OworICAgIAorICAgIFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TcGVj
aWFsKCk7CisKKyAgICBDU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBm
b3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNr
PiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZChJbnN0JikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpID0gMDsKKworICAg
IC8vIFRoaXMgZ2V0cyBjYWxsZWQgb24gZm9yIGVhY2ggSW5zdCB0aGF0IHVzZXMgdGhpcyBTcGVj
aWFsLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvCisgICAgLy8gZ3VhcmFudGVlIHRoYXQg
YSBTcGVjaWFsIGdldHMgdXNlZCBmcm9tIGp1c3Qgb25lIEluc3QsIGJlY2F1c2UgQWlyIG1pZ2h0
IHRhaWxkdXAgbGF0ZS4gU28sCisgICAgLy8gaWYgeW91IHdhbnQgdG8gcGFzcyB0aGlzIGluZm9y
bWF0aW9uIGRvd24gdG8gZ2VuZXJhdGUoKSwgdGhlbiB5b3UgaGF2ZSB0byBlaXRoZXI6CisgICAg
Ly8KKyAgICAvLyAxKSBHZW5lcmF0ZSBBaXIgdGhhdCBzdGFydHMgd2l0aCBhIHNlcGFyYXRlIFNw
ZWNpYWwgcGVyIFBhdGNoIEluc3QsIGFuZCB0aGVuIG1lcmdlCisgICAgLy8gICAgdXNlZFJlZ2lz
dGVyIHNldHMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGdyZWF0LCBidXQgaXQgb3B0aW1pemVzIGZv
ciB0aGUgY29tbW9uIGNhc2UgdGhhdAorICAgIC8vICAgIEFpciBkaWRuJ3QgZHVwbGljYXRlIGNv
ZGUgb3IgdGhhdCBzdWNoIGR1cGxpY2F0aW9uIGRpZG4ndCBjYXVzZSBhbnkgaW50ZXJlc3Rpbmcg
Y2hhbmdlcyB0bworICAgIC8vICAgIHJlZ2lzdGVyIGFzc2lnbm1lbnQuCisgICAgLy8KKyAgICAv
LyAyKSBIYXZlIHRoZSBTcGVjaWFsIG1haW50YWluIGEgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJT
ZXQ+LiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGFuYWx5c2lzCisgICAgLy8gICAgdGhhdCBmZWVk
cyBpbnRvIHRoaXMgY2FsbCBpcyBwZXJmb3JtZWQganVzdCBiZWZvcmUgY29kZSBnZW5lcmF0aW9u
IGFuZCB0aGVyZSBpcyBubyB3YXkKKyAgICAvLyAgICBmb3IgdGhlIFZlY3Rvcjw+J3MgdGhhdCBj
b250YWluIHRoZSBJbnN0cyB0byBiZSByZWFsbG9jYXRlZC4gVGhpcyBhbGxvd3MgZ2VuZXJhdGUo
KSB0bworICAgIC8vICAgIGNvbnN1bHQgdGhlIEhhc2hNYXAuCisgICAgLy8KKyAgICAvLyAzKSBI
eWJyaWQ6IHlvdSBjb3VsZCB1c2UgKDEpIGFuZCBmaXJlIHVwIGEgSGFzaE1hcCBpZiB5b3Ugc2Vl
IG11bHRpcGxlIGNhbGxzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGl0J3Mgbm90IHBvc3Np
YmxlIHRvIHJlbHkgb24gcmVwb3J0VXNlZFJlZ2lzdGVycygpIGJlaW5nIGNhbGxlZCBpbiB0aGUg
c2FtZSBvcmRlcgorICAgIC8vIGFzIGdlbmVyYXRlKCkuIElmIHdlIGNvdWxkIHJlbHkgb24gdGhh
dCwgdGhlbiB3ZSBjb3VsZCBqdXN0IGhhdmUgZWFjaCBTcGVjaWFsIGluc3RhbmNlCisgICAgLy8g
bWFpbnRhaW4gYSBWZWN0b3Igb2YgUmVnaXN0ZXJTZXQncyBhbmQgdGhlbiBwcm9jZXNzIHRoYXQg
dmVjdG9yIGluIHRoZSByaWdodCBvcmRlciBpbgorICAgIC8vIGdlbmVyYXRlKCkuIEJ1dCwgdGhl
IG9yZGVyaW5nIGRpZmZlcmVuY2UgaXMgdW5saWtlbHkgdG8gY2hhbmdlIHNpbmNlIGl0IHdvdWxk
IGhhcm0gdGhlCisgICAgLy8gcGVyZm9ybWFuY2Ugb2YgdGhlIGxpdmVuZXNzIGFuYWx5c2lzLgor
ICAgIC8vCisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyAoMSkgZm9yIEIzIHN0YWNrbWFwcy4KKyAg
ICB2aXJ0dWFsIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJT
ZXQmKSA9IDA7CisgICAgCisgICAgdmlydHVhbCBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUo
SW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikgPSAwOworCisgICAgdmly
dHVhbCBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSA9IDA7CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcElt
cGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlZXBEdW1wSW1w
bChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
Q29kZTsKKworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4Owor
fTsKKworY2xhc3MgRGVlcFNwZWNpYWxEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3BlY2lhbER1
bXAoY29uc3QgU3BlY2lhbCogc3BlY2lhbCkKKyAgICAgICAgOiBtX3NwZWNpYWwoc3BlY2lhbCkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV9zcGVjaWFsKQorICAgICAgICAgICAgbV9zcGVjaWFsLT5kZWVw
RHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBTcGVjaWFsKiBtX3NwZWNpYWw7Cit9Owor
CitpbmxpbmUgRGVlcFNwZWNpYWxEdW1wIGRlZXBEdW1wKGNvbnN0IFNwZWNpYWwqIHNwZWNpYWwp
Cit7CisgICAgcmV0dXJuIERlZXBTcGVjaWFsRHVtcChzcGVjaWFsKTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEFpclNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5
dGhpbmcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIK
KyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNp
bmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
c3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KGNvZGUsICJzcGlsbEV2ZXJ5dGhpbmciKTsKKworICAgIC8vIFdlIHdhbnQgdG8ga25vdyB0aGUg
c2V0IG9mIHJlZ2lzdGVycyB1c2VkIGF0IGV2ZXJ5IHBvaW50IGluIGV2ZXJ5IGJhc2ljIGJsb2Nr
LgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxSZWdpc3RlclNldD4+IHVzZWRSZWdp
c3RlcnMoY29kZS5zaXplKCkpOworICAgIExpdmVuZXNzPFRtcD4gbGl2ZW5lc3MoY29kZSk7Cisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8VG1w
Pjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAgICB1c2VkUmVn
aXN0ZXJzW2Jsb2NrXS5yZXNpemUoYmxvY2stPnNpemUoKSArIDEpOworCisgICAgICAgIGF1dG8g
c2V0VXNlZFJlZ2lzdGVycyA9IFsmXSAodW5zaWduZWQgaW5kZXgsIEluc3QmIGluc3QpIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0JiByZWdpc3RlclNldCA9IHVzZWRSZWdpc3RlcnNbYmxvY2td
W2luZGV4XTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyU2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBHb3R0YSBhY2NvdW50IGZvciBkZWFkIGFzc2lnbm1lbnRzIHRvIHJlZ2lzdGVycy4gVGhlc2Ug
bWF5IGhhcHBlbiBiZWNhdXNlIHRoZSBpbnB1dAorICAgICAgICAgICAgLy8gY29kZSBpcyBzdWJv
cHRpbWFsLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgIFsm
XSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkgJiYgYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZWdpc3RlclNldC5zZXQoYXJnLnJlZygpKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgc2V0VXNlZFJlZ2lzdGVycyhpbnN0SW5kZXgg
KyAxLCBpbnN0KTsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3QpOworICAgICAg
ICB9CisKKyAgICAgICAgSW5zdCBub3A7CisgICAgICAgIHNldFVzZWRSZWdpc3RlcnMoMCwgbm9w
KTsKKyAgICB9CisKKyAgICAvLyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgor
ICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhbGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOworICAg
IGZvciAodW5zaWduZWQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgQXJnOjpudW1UeXBlczsg
Kyt0eXBlSW5kZXgpIHsKKyAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0g
YWxsU3RhY2tTbG90c1t0eXBlSW5kZXhdOworICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHN0YXRp
Y19jYXN0PEFyZzo6VHlwZT4odHlwZUluZGV4KTsKKyAgICAgICAgc3RhY2tTbG90cy5yZXNpemUo
Y29kZS5udW1UbXBzKHR5cGUpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNv
ZGUubnVtVG1wcyh0eXBlKTsgdG1wSW5kZXgtLTspCisgICAgICAgICAgICBzdGFja1Nsb3RzW3Rt
cEluZGV4XSA9IGNvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7
CisgICAgfQorCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJ
bmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAg
ICAgICAgICBSZWdpc3RlclNldCYgc2V0QmVmb3JlID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5z
dEluZGV4XTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRBZnRlciA9IHVzZWRSZWdpc3Rl
cnNbYmxvY2tdW2luc3RJbmRleCArIDFdOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAg
ICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3Qg
PSBhbGxTdGFja1Nsb3RzW3R5cGVdW3RtcC50bXBJbmRleCgpXTsKKyAgICAgICAgICAgICAgICAg
ICAgQXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90KTsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgYSByZWdpc3RlciB0byB1c2UuIEhvdyB3ZSBkbyB0aGF0
IGRlcGVuZHMgb24gdGhlIHJvbGUuCisgICAgICAgICAgICAgICAgICAgIFJlZyBjaG9zZW5SZWc7
CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6VXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDog
cmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghc2V0QmVmb3JlLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkRlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJ
blByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5S
ZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
VXNlRGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJp
b3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0
QmVmb3JlLmdldChyZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNob3NlblJlZyk7CisK
KyAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKGNob3NlblJlZyk7CisKKyAgICAgICAgICAg
ICAgICAgICAgT3Bjb2RlIG1vdmUgPSB0eXBlID09IEFyZzo6R1AgPyBNb3ZlIDogTW92ZURvdWJs
ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9s
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4s
IHRtcCwgYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0
aGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bp
bGxFdmVyeXRoaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJTcGlsbEV2ZXJ5dGhpbmdfaAorI2RlZmluZSBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRlc3Rpbmcu
IEl0IGJlaGF2ZXMgbGlrZSBhIHJlZ2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2UgdGhhdCBp
dAorLy8gZWxpbWluYXRlcyB0ZW1wb3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBhY2NvbXBs
aXNoZXMgdGhpcyBieSBhbHdheXMgc3BpbGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmllcy4gVGhlIHJl
c3VsdGluZyBjb2RlIGlzIGdvaW5nIHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMgcGhhc2Ug
aXMgZ3JlYXQgaWYgeW91CisvLyB0aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRoZSByZWdp
c3RlciBhbGxvY2F0b3IuIFlvdSBjYW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhpcworLy8g
cGhhc2UgaW5zdGVhZCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8vIE5vdGUgdGhh
dCBldmVuIHRob3VnaCB0aGlzIHBoYXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBvc3NpYmxl
LCBpdCdzIG5vdCBldmVuIHdyaXR0ZW4gaW4gYQorLy8gcGFydGljdWxhcmx5IGVmZmljaWVudCB3
YXkuIFNvLCBkb24ndCBnZXQgYW55IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2UgdG8gcmVk
dWNlIGNvbXBpbGVyCisvLyBsYXRlbmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQsIHlvdSBz
aG91bGQgY29tZSB1cCB3aXRoIGEgY2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVzaW5nCisv
LyB0aGlzIHNpbGx5IHRoaW5nLgorCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFN0
YWNrU2xvdDo6c2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQoreworICAgIG1fb2Zmc2V0
RnJvbUZQID0gdmFsdWU7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG1fdmFsdWUtPm1fb2Zm
c2V0RnJvbUZQID0gdmFsdWU7Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFjayIsIG1faW5kZXgpOworfQorCit2
b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwg
bV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworICAgIGlmIChtX3ZhbHVlKQor
ICAgICAgICBvdXQucHJpbnQoIiwgdmFsdWUgPSAiLCAqbV92YWx1ZSk7Cit9CisKK1N0YWNrU2xv
dDo6U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90
S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCisgICAgOiBtX2J5dGVTaXplKGJ5dGVT
aXplKQorICAgICwgbV9pbmRleChpbmRleCkKKyAgICAsIG1fb2Zmc2V0RnJvbUZQKHZhbHVlID8g
dmFsdWUtPm9mZnNldEZyb21GUCgpIDogMCkKKyAgICAsIG1fa2luZChraW5kKQorICAgICwgbV92
YWx1ZSh2YWx1ZSkKK3sKKyAgICBBU1NFUlQoYnl0ZVNpemUpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclN0YWNrU2xvdF9oCisjZGVmaW5lIEFpclN0YWNrU2xv
dF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgi
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFN0YWNrU2xvdFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKwor
Y2xhc3MgU3RhY2tTbG90IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGFja1Nsb3QpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVuc2lnbmVkIGJ5dGVT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2lu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgdW5zaWduZWQgYWxpZ25tZW50KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDEpCisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMikKKyAgICAgICAgICAgIHJldHVybiAyOworICAg
ICAgICBpZiAoYnl0ZVNpemUoKSA8PSA0KQorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAg
IHJldHVybiA4OworICAgIH0KKworICAgIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKworICAgIC8vIFplcm8gbWVhbnMgdGhhdCBpdCdzIG5vdCB5ZXQg
YXNzaWduZWQuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9v
ZmZzZXRGcm9tRlA7IH0KKworICAgIC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkganVzdCBiZSBjYWxs
ZWQgZnJvbSBwaGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uLiBCdXQgeW91IGNhbgorICAg
IC8vIHRvdGFsbHkgZm9yY2UgYSBzdGFjayBzbG90IHRvIGxhbmQgYXQgc29tZSBvZmZzZXQuCisg
ICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QpOworCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgU3RhY2tTbG90KHVuc2ln
bmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFs
dWUqKTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7CisgICAgU3RhY2tTbG90S2luZCBtX2tp
bmQ7CisgICAgU3RhY2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3RhY2tT
bG90RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoY29uc3QgU3RhY2tTbG90
KiBzbG90KQorICAgICAgICA6IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3Qp
CisgICAgICAgICAgICBtX3Nsb3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0
IFN0YWNrU2xvdCogbV9zbG90OworfTsKKworaW5saW5lIERlZXBTdGFja1Nsb3REdW1wIGRlZXBE
dW1wKGNvbnN0IFN0YWNrU2xvdCogc2xvdCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1
bXAoc2xvdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTdGFja1Nsb3RfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCit2b2lkIFRtcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChpc1JlZygpKSB7CisgICAgICAgIG91dC5wcmludChyZWcoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNHUCgpKSB7CisgICAgICAgIG91dC5w
cmludCgiJXRtcCIsIGdwVG1wSW5kZXgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBvdXQucHJpbnQoIiVmdG1wIiwgZnBUbXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJUbXBfaAorI2RlZmluZSBBaXJUbXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiUmVnLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBBcmc7CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJh
bGl6YXRpb24gb2YgYSByZWdpc3Rlci4gSXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQ
UiBvciBGUFIuIEl0IGNhbiBhbHNvCisvLyBiZSB1c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2Nh
dGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9yYXJ5KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3
ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJzZSBuYW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRv
IHVzZSB0aGlzIG5hbWUgYSBsb3QuCisKK2NsYXNzIFRtcCB7CitwdWJsaWM6CisgICAgVG1wKCkK
KyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChS
ZWcgcmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJlZykgeworICAgICAgICAgICAgaWYgKHJlZy5p
c0dQUigpKQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVHUFIocmVnLmdwcigpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJl
Zy5mcHIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV92YWx1ZSA9IDA7CisgICAg
fQorCisgICAgZXhwbGljaXQgVG1wKGNvbnN0IEFyZyYpOworCisgICAgc3RhdGljIFRtcCBncFRt
cEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVHUFRtcChpbmRleCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVk
IGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFs
dWUgPSBlbmNvZGVGUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsg
fQorCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29k
ZWRHUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNH
UFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsK
KyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0VuY29kZWRGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc1JlZygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNHUFIoKSB8fCBpc0ZQUigpOworICAgIH0KKworICAgIEdQ
UlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQUihtX3ZhbHVl
KTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBkZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwcigpOworICAgICAg
ICByZXR1cm4gZnByKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNUbXBJbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIWlzUmVnKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BU
bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1
ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQg
dG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAg
IHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIHJldHVybiBmcFRtcEluZGV4KCk7CisgICAg
fQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhISp0
aGlzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUbXAmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKKyAgICBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQorICAgICAgICA6IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gVG1wKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50Pjo6aGFzaChtX3ZhbHVlKTsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBp
bnQgZW5jb2RlRlAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBp
bmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJl
Z2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIp
CisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZp
cnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQVG1wKHVu
c2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQUihNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBp
bnQgZW5jb2RlRlBUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5j
b2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEgLSBpbmRleDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUChpbnQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWUgPiAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2Rl
ZEZQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA8IDA7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNv
ZGVkRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1
ZSkgJiYgdmFsdWUgPj0gZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3Rlcigp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRHUFIo
dmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5jb2Rl
ZEZQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVuY29k
ZUdQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxlcjo6
Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQUihp
bnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KAorICAgICAgICAgICAgKGVuY29kZUZQ
UihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3Rh
dGljIHVuc2lnbmVkIGRlY29kZUdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0VuY29kZWRHUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5jb2Rl
R1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdW5zaWduZWQgZGVjb2RlRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzRW5jb2RlZEZQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBSKE1h
Y3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQorCisg
ICAgLy8gMDogZW1wdHkgVG1wCisgICAgLy8gcG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1AgdGVt
cHMuCisgICAgLy8gbmVnYXRpdmU6IEZQUnMgYW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50IG1f
dmFsdWU7Cit9OworCitzdHJ1Y3QgVG1wSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgVG1wJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBUbXAmIGEsIGNvbnN0IFRtcCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6QWlyOjpUbXA+IHsKKyAgICB0eXBlZGVmIEpTQzo6
QjM6OkFpcjo6VG1wSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6
VG1wPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OlRtcD4geyB9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJUbXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRt
cElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBJbmxp
bmVzX2gKKyNkZWZpbmUgQWlyVG1wSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworaW5saW5lIFRtcDo6VG1wKGNvbnN0
IEFyZyYgYXJnKQoreworICAgICp0aGlzID0gYXJnLnRtcCgpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyVG1wSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNw
YWNlIHsKKworY2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoQ29kZSYg
Y29kZSwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAg
ICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQorCisjZGVmaW5l
IFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZh
aWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9uLCB0
b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKyAgICAKKyAgICB2b2lk
IHJ1bigpCisgICAgeworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+IHZhbGlkU2xvdHM7Cisg
ICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHZhbGlkQmxvY2tzOworICAgICAgICBIYXNoU2V0
PFNwZWNpYWwqPiB2YWxpZFNwZWNpYWxzOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2NvZGUpCisgICAgICAgICAgICB2YWxpZEJsb2Nrcy5hZGQoYmxvY2spOworICAgICAg
ICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgICAg
ICB2YWxpZFNsb3RzLmFkZChzbG90KTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDog
bV9jb2RlLnNwZWNpYWxzKCkpCisgICAgICAgICAgICB2YWxpZFNwZWNpYWxzLmFkZChzcGVjaWFs
KTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5h
dChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3Mp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbGlkU2xvdHMuY29udGFpbnMoYXJnLnN0YWNrU2xvdCgpKSwgKCJBdCAiLCBpbnN0LCAi
IGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpTcGVjaWFsOgorICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsaWRTcGVjaWFscy5jb250YWlucyhhcmcuc3BlY2lhbCgpKSwgKCJBdCAiLCBp
bnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBWQUxJREFURShpbnN0LmlzVmFsaWRGb3JtKCksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAq
YmxvY2spKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdEluZGV4ID09IGJsb2NrLT5zaXplKCkg
LSAxKQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURShpc1Rlcm1pbmFsKGluc3Qub3Bjb2Rl
KSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoIWlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAo
IkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3Ip
LCAoIkluICIsICpibG9jaykpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBmYWlsKAorICAgICAgICBjb25zdCBjaGFyKiBmaWxl
bmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBj
b25kaXRpb24sCisgICAgICAgIENTdHJpbmcgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIENTdHJp
bmcgZmFpbHVyZU1lc3NhZ2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3Ry
ZWFtIG91dDsKKyAgICAgICAgICAgIG91dC5wcmludCgiQUlSIFZBTElEQVRJT04gRkFJTFVSRVxu
Iik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVu
YW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAg
ICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgQWZ0ZXIgIiwg
bV9jb2RlLmxhc3RQaGFzZU5hbWUoKSwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2Fn
ZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFMb2coZmFpbHVy
ZU1lc3NhZ2UpOworICAgICAgICBpZiAobV9kdW1wQmVmb3JlKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCJCZWZvcmUgIiwgbV9jb2RlLmxhc3RQaGFzZU5hbWUoKSwgIjpcbiIpOworICAgICAgICAg
ICAgZGF0YUxvZyhtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2coIkF0
IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgICAgICBkYXRhTG9nKG1fY29kZSk7CisKKyAgICAg
ICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZh
aWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAg
ICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hh
ciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQg
dmFsaWRhdGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxp
ZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIGR1bXBCZWZvcmUpOworICAgIHZhbGlkYXRlci5ydW4oKTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRh
dGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFs
aWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVmFsaWRhdGVfaAorI2Rl
ZmluZSBBaXJWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK3ZvaWQg
dmFsaWRhdGUoQ29kZSYsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUgPSBudWxscHRyKTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpclZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDg0NCBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisj
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKworY2xhc3MgT3Bj
b2RlCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpzcGVjaWFsLCA6b3ZlcmxvYWRzCisgICAgYXR0
cl9hY2Nlc3NvciA6a2luZAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgc3BlY2lhbCkKKyAg
ICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gc3BlY2lhbAorICAgICAgICBA
a2luZCA9IDppbnN0CisgICAgICAgIHVubGVzcyBzcGVjaWFsCisgICAgICAgICAgICBAb3Zlcmxv
YWRzID0gW10KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgbWFzbU5hbWUKKyAgICAg
ICAgbmFtZVswXS5kb3duY2FzZSArIG5hbWVbMS4uLTFdCisgICAgZW5kCitlbmQKKworY2xhc3Mg
QXJnCisgICAgYXR0cl9yZWFkZXIgOnJvbGUsIDp0eXBlCisKKyAgICBkZWYgaW5pdGlhbGl6ZShy
b2xlLCB0eXBlKQorICAgICAgICBAcm9sZSA9IHJvbGUKKyAgICAgICAgQHR5cGUgPSB0eXBlCisg
ICAgZW5kCitlbmQKKworY2xhc3MgT3ZlcmxvYWQKKyAgICBhdHRyX3JlYWRlciA6c2lnbmF0dXJl
LCA6Zm9ybXMKKworICAgIGRlZiBpbml0aWFsaXplKHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAg
IEBzaWduYXR1cmUgPSBzaWduYXR1cmUKKyAgICAgICAgQGZvcm1zID0gZm9ybXMKKyAgICBlbmQK
K2VuZAorCitjbGFzcyBLaW5kCisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX2FjY2Vz
c29yIDpzcGVjaWFsCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lKQorICAgICAgICBAbmFtZSA9
IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBmYWxzZQorICAgIGVuZAorCisgICAgZGVmID09KG90
aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBTdHJpbmcKKyAgICAgICAgICAgIEBuYW1lID09
IG90aGVyCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBuYW1lID09IG90aGVyLm5hbWUgYW5k
IEBzcGVjaWFsID09IG90aGVyLnNwZWNpYWwKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBk
ZWYgS2luZC5hcmdLaW5kcyhraW5kKQorICAgICAgICBpZiBraW5kID09ICJBZGRyIgorICAgICAg
ICAgICAgWyJBZGRyIiwgIlN0YWNrIiwgIkNhbGxBcmciXQorICAgICAgICBlbHNlCisgICAgICAg
ICAgICBba2luZF0KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgYXJnS2luZHMKKyAg
ICAgICAgS2luZC5hcmdLaW5kcyhraW5kKQorICAgIGVuZAorZW5kCisKK2NsYXNzIEZvcm0KKyAg
ICBhdHRyX3JlYWRlciA6a2luZHMsIDphbHROYW1lCisKKyAgICBkZWYgaW5pdGlhbGl6ZShraW5k
cywgYWx0TmFtZSkKKyAgICAgICAgQGtpbmRzID0ga2luZHMKKyAgICAgICAgQGFsdE5hbWUgPSBh
bHROYW1lCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZp
bGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBs
aW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51
bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAi
I3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgor
ICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6
ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3Ry
aW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBp
ZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQK
KyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3Ro
ZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3Bl
Y3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29t
bWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJz
ZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNl
IGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2Vu
ZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXco
ZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxl
IG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15c
bl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4v
CisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciAr
PSAxCisgICAgICAgIHdoZW4gL1xBKFthLXpBLVowLTlfXSspLworICAgICAgICAgICAgcmVzdWx0
IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAg
ICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3Jl
CisgICAgICAgIHdoZW4gL1xBWyw6KlwvXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5u
ZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisg
ICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBs
aW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVj
dH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisg
ICAgcmVzdWx0CitlbmQKKworZGVmIGlzVUQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChVKXwo
RCl8KFVEKSlcWi8KK2VuZAorCitkZWYgaXNHRih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKEcp
fChGKSlcWi8KK2VuZAorCitkZWYgaXNLaW5kKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVG1w
KXwoSW1tKXwoSW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCkpXFovCitl
bmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICBpc1VEKHRva2VuKSBvciBpc0dGKHRva2Vu
KSBvciBpc0tpbmQodG9rZW4pIG9yCisgICAgICAgIHRva2VuID09ICJzcGVjaWFsIiBvciB0b2tl
biA9PSAiYXMiCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAv
XEEoW2EtekEtWjAtOV9dKylcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xh
c3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0
b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisK
KyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVm
IGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJv
cigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJy
b3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/
CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQg
b2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAg
ICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhw
ZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNl
CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0g
dG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1
bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1
bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lUm9sZQorICAgICAgICByZXN1bHQgPSB0b2tl
bi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgcm9sZSAoVSwgRCwgb3IgVUQp
IikgdW5sZXNzIGlzVUQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAor
ICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVUeXBlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0
cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCB0eXBlIChHIG9yIEYpIikgdW5sZXNz
IGlzR0YocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAor
CisgICAgZGVmIGNvbnN1bWVLaW5kCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEltbTY0LCBUbXAsIEFkZHIsIElu
ZGV4LCBSZWxDb25kLCBvciBSZXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAg
ICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAg
ICAgIHJlc3VsdCA9IHt9CisgICAgICAgIAorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJy
ZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgaWYgdG9rZW4gPT0g
InNwZWNpYWwiCisgICAgICAgICAgICAgICAgY29uc3VtZSgic3BlY2lhbCIpCisgICAgICAgICAg
ICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIHJlc3VsdFtv
cGNvZGVOYW1lXQorCisgICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gT3Bjb2Rl
Lm5ldyhvcGNvZGVOYW1lLCB0cnVlKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgaWYgcmVz
dWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IHJlc3VsdFtvcGNv
ZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQg
YSBzcGVjaWFsIG9wY29kZSIpIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIGZh
bHNlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUKKyAg
ICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAg
ICAgICAgICAgICAgZm9ybXMgPSBbXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIGlzVUQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcm9sZSA9IGNvbnN1bWVSb2xlCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdW1lKCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb25zdW1lVHlwZQor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1
cmUgPDwgQXJnLm5ldyhyb2xlLCB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gIi8iCisgICAgICAg
ICAgICAgICAgICAgIGNvbnN1bWUoIi8iKQorICAgICAgICAgICAgICAgICAgICBjYXNlIHRva2Vu
LnN0cmluZworICAgICAgICAgICAgICAgICAgICB3aGVuICJicmFuY2giCisgICAgICAgICAgICAg
ICAgICAgICAgICBvcGNvZGUua2luZCA9IDpicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgd2hl
biAidGVybWluYWwiCisgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUua2luZCA9IDp0ZXJt
aW5hbAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJCYWQgLyBkaXJlY3RpdmUiKQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgYWR2YW5jZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgaWYgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGtpbmRzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAg
IGFsdE5hbWUgPSBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtpbmRzIDw8IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gIioiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5s
ZXNzIGtpbmRzWy0xXS5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtpbmRzWy0xXS5zcGVjaWFsID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKCIqIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gImFzIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoImFzIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbHROYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3
cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5n
dGggPT0gc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Ig
a2luZC5uYW1lID09ICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
c2lnbmF0dXJlW2luZGV4XS5yb2xlICE9ICJVIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2Ug
YXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMg
YW4gaW1tZWRpYXRlIGZvciBhIG5vbi1nZW5lcmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvcm1zIDw8IEZvcm0ubmV3KGtpbmRzLCBhbHROYW1lKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsgdW5sZXNzIGlzS2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlLmxlbmd0aCA9
PSAwCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMAor
ICAgICAgICAgICAgICAgICAgICBmb3JtcyA8PCBGb3JtLm5ldyhbXSwgbmlsKQorICAgICAgICAg
ICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9h
ZC5uZXcoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAg
ICAgICAgcmVzdWx0CisgICAgZW5kCitlbmQKKworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJz
ZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKCRmaWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVz
ID0gcGFyc2VyLnBhcnNlCisKKyRzdGRlcnIucHV0cyAiR2VuZXJhdGluZyBjb2RlIGZvciAjeyRm
aWxlTmFtZX0uIgorCitkZWYgd3JpdGVIKGZpbGVuYW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tm
aWxlbmFtZX0uaCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAg
b3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZp
bGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNp
Zm5kZWYgQWlyI3tmaWxlbmFtZX1faCIKKyAgICAgICAgb3V0cC5wdXRzICIjZGVmaW5lIEFpciN7
ZmlsZW5hbWV9X2giCisKKyAgICAgICAgeWllbGQgb3V0cAorICAgICAgICAKKyAgICAgICAgb3V0
cC5wdXRzICIjZW5kaWYgLy8gQWlyI3tmaWxlbmFtZX1faCIKKyAgICB9CitlbmQKKword3JpdGVI
KCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJlbnVtIE9w
Y29kZSA6IGludDE2X3QgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLnNvcnQuZWFjaCB7CisgICAgICAg
IHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICIgICAgI3tvcGNvZGV9LCIKKyAgICB9Cisg
ICAgb3V0cC5wdXRzICJ9OyIKKworICAgIG91dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVz
cGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRw
LnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bj
b2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKKyMgRnJvbSBo
ZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBzaW5j
ZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuCisjIG1hdGNoZXIuCisKK2RlZiBtYXRj
aEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXgsIGNvbHVtbkdldHRlciwgZmls
dGVyLCBjYWxsYmFjaykKKyAgICByZXR1cm4gaWYgZm9ybXMubGVuZ3RoID09IDAKKworICAgIGlm
IGZpbHRlcltmb3Jtc10KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBpZiBjb2x1bW5J
bmRleCA+PSBmb3Jtc1swXS5raW5kcy5sZW5ndGgKKyAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1z
Lmxlbmd0aCA9PSAxCisgICAgICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQorICAgICAgICByZXR1cm4K
KyAgICBlbmQKKyAgICAKKyAgICBncm91cHMgPSB7fQorICAgIGZvcm1zLmVhY2ggeworICAgICAg
ICB8IGZvcm0gfAorICAgICAgICBraW5kID0gZm9ybS5raW5kc1tjb2x1bW5JbmRleF0ubmFtZQor
ICAgICAgICBpZiBncm91cHNba2luZF0KKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA8PCBmb3Jt
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA9IFtmb3JtXQorICAgICAg
ICBlbmQKKyAgICB9CisKKyAgICBpZiBzcGVlZCA9PSA6ZmFzdCBhbmQgZ3JvdXBzLmxlbmd0aCA9
PSAxCisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCAr
IDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuCisgICAg
ZW5kCisKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tjb2x1bW5HZXR0ZXJbY29sdW1uSW5kZXhd
fSkgeyIKKyAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgfCBrZXksIHZhbHVlIHwKKyAg
ICAgICAgb3V0cC5wdXRzICIjaWYgVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisg
ICAgICAgIEtpbmQuYXJnS2luZHMoa2V5KS5lYWNoIHsKKyAgICAgICAgICAgIHwgYXJnS2luZCB8
CisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgQXJnOjoje2FyZ0tpbmR9OiIKKyAgICAgICAg
fQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCB2YWx1ZSwgY29sdW1uSW5kZXggKyAx
LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSIgaWYga2V5
ID09ICJJbW02NCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92ZXJs
b2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5v
cGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8
CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlmIG9w
Y29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBlbHNl
CisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMuc2l6
ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkKKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNo
ICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAg
ICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5s
ZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgeWllbGQgb3Bj
b2RlLCBvdmVybG9hZAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVk
T3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9Igor
ICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAgICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZvcm0o
b3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGlu
c3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNw
ZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBjb2x1
bW5JbmRleCB8CisgICAgICAgICAgICAgICAgIiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRleH1d
LmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxz
ZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgZm9y
bSB8CisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQuZm9y
bXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisgICAg
fQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRw
LnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBc
IkFpclNwZWNpYWwuaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICAKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29s
IG9wZ2VuSGlkZGVuVHJ1dGgoKSB7IHJldHVybiB0cnVlOyB9IgorICAgIG91dHAucHV0cyAidGVt
cGxhdGU8dHlwZW5hbWUgVD4iCisgICAgb3V0cC5wdXRzICJpbmxpbmUgVCogb3BnZW5IaWRkZW5Q
dHJJZGVudGl0eShUKiBwb2ludGVyKSB7IHJldHVybiBwb2ludGVyOyB9IgorICAgIG91dHAucHV0
cyAiI2RlZmluZSBPUEdFTl9SRVRVUk4odmFsdWUpIGRvIHtcXCIKKyAgICBvdXRwLnB1dHMgIiAg
ICBpZiAob3BnZW5IaWRkZW5UcnV0aCgpKVxcIgorICAgIG91dHAucHV0cyAiICAgICAgICByZXR1
cm4gdmFsdWU7XFwiCisgICAgb3V0cC5wdXRzICJ9IHdoaWxlIChmYWxzZSkiCisKKyAgICBvdXRw
LnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBJ
bnN0Ojpmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIgorICAgIG91dHAucHV0cyAi
eyIKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAg
IHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAg
ICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1swXSwgQXJnOjpVc2UsIEFyZzo6R1ApOyAvLyBU
aGlzIGlzIGJhc2ljYWxseSBib2d1cywgYnV0IGl0IHdvcmtzIGYgYW5hbHlzZXMgbW9kZWwgU3Bl
Y2lhbCBhcyBhbiBpbW1lZGlhdGUuIgorICAgICAgICAgICAgb3V0cC5wdXRzICJhcmdzWzBdLnNw
ZWNpYWwoKS0+Zm9yRWFjaEFyZygqdGhpcywgc2NvcGVkTGFtYmRhPEVhY2hBcmdDYWxsYmFjaz4o
ZnVuY3RvcikpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJl
LmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICByb2xlID0gbmlsCisgICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQorICAg
ICAgICAgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgor
ICAgICAgICAgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVm
IgorICAgICAgICAgICAgICAgIHdoZW4gIlVEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0g
IlVzZURlZiIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJhaXNl
CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7cm9sZX0sIEFyZzo6I3th
cmcudHlwZX1QKTsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRw
LnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4iCisgICAgb3V0cC5wdXRzICJBTFdBWVNfSU5MSU5FIGJvb2wgaXNWYWxpZEZvcm0oT3Bjb2Rl
IG9wY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykiCisgICAgb3V0cC5wdXRzICJ7IgorICAg
IG91dHAucHV0cyAiQXJnOjpLaW5kIGtpbmRzW3NpemVvZi4uLihBcmd1bWVudHMpXSA9IHsgYXJn
dW1lbnRzLi4uIH07IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9w
Y29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0
cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChzaXpl
b2YuLi4oQXJndW1lbnRzKSkgeyIKKyAgICAgICAgdW5sZXNzIG9wY29kZS5zcGVjaWFsCisgICAg
ICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3Zlcmxv
YWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGh9OiIKKyAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsgfCBjb2x1
bW5JbmRleCB8ICJvcGdlbkhpZGRlblB0cklkZW50aXR5KGtpbmRzKVsje2NvbHVtbkluZGV4fV0i
IH0KKyAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAg
ICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAg
ICAgICAgICAgICAgICAgIHNwZWNpYWwgPSAobm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBraW5k
IHwga2luZC5zcGVjaWFsIH0pCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKCN7c3BlY2lhbH0pOyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwg
ZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJl
dHVybiBmYWxzZTsgIgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiaW5saW5l
IGJvb2wgaXNUZXJtaW5hbChPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAg
b3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7
CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgaWYgb3Bjb2RlLmtpbmQgPT0gOnRlcm1pbmFs
IG9yIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e29wY29kZS5uYW1lfToiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVy
biB0cnVlOyIKKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAicmV0dXJu
IGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAg
IG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKword3JpdGVI
KCJPcGNvZGVHZW5lcmF0ZWQiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNs
dWRlIFwiQWlySW5zdElubGluZXMuaFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJ3dGYv
UHJpbnRTdHJlYW0uaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIFdURiB7IgorICAgIG91
dHAucHV0cyAidXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFpcjsiCisgICAgb3V0cC5wdXRzICJ2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkiCisgICAg
b3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiICAgIHN3aXRjaCAob3Bjb2RlKSB7IgorICAg
ICRvcGNvZGVzLmtleXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5w
dXRzICIgICAgY2FzZSAje29wY29kZX06IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgb3V0
LnByaW50KFwiI3tvcGNvZGV9XCIpOyIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVy
bjsiCisgICAgfQorICAgIG91dHAucHV0cyAiICAgIH0iCisgICAgb3V0cC5wdXRzICIgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAu
cHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5z
dDo6aXNWYWxpZEZvcm0oKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3Zlcmxv
YWRGb3JtKG91dHAsIDpzYWZlLCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2Fk
LCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0
cyAiaWYgKGFyZ3Muc2l6ZSgpIDwgMSkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBm
YWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1swXS5pc1NwZWNpYWwoKSki
CisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRw
LnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+aXNWYWxpZCgqdGhpcykpOyIK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiA9IGZhbHNlCisg
ICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoLnRpbWVzIHsKKyAgICAgICAgICAg
ICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xlID0gb3ZlcmxvYWQuc2lnbmF0dXJl
W2luZGV4XS5yb2xlCisgICAgICAgICAgICAgICAgdHlwZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtp
bmRleF0udHlwZQorICAgICAgICAgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2luZGV4XQorICAg
ICAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gfD0ga2luZC5zcGVjaWFsCisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgIyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgZm9y
bSBtYXRjaGVzLiBXZSBkb24ndCBoYXZlIHRvIHZhbGlkYXRlIHRoZSByb2xlLCBzaW5jZQorICAg
ICAgICAgICAgICAgICMga2luZCBpbXBsaWVzIHJvbGUuIFNvLCB0aGUgb25seSB0aGluZyBsZWZ0
IHRvIHZhbGlkYXRlIGlzIHRoZSB0eXBlLiBBbmQgd2Ugb25seSBoYXZlCisgICAgICAgICAgICAg
ICAgIyB0byB2YWxpZGF0ZSB0aGUgdHlwZSBpZiB3ZSBoYXZlIGEgVG1wLgorICAgICAgICAgICAg
ICAgIGlmIGtpbmQubmFtZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICghYXJnc1sje2luZGV4fV0udG1wKCkuaXMje3R5cGV9UCgpKSIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRzTW9yZVZhbGlkYXRpb24KKyAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghaXMje29wY29kZS5uYW1lfVZhbGlkKCp0aGlz
KSkiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7
IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAg
IG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiYm9vbCBJbnN0OjphZG1pdHNTdGFjayh1
bnNpZ25lZCBhcmdJbmRleCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dp
dGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9w
Y29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisKKyAgICAg
ICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdJbmRl
eCkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+YWRtaXRzU3RhY2soKnRo
aXMsIGFyZ0luZGV4KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFN3aXRjaCBvbiB0
aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJnSW5kZXgpIHsi
CisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRzLm1hcCB7CisgICAgICAg
ICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJl
Lmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbnVt
QXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRleCB8CisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAgICAgICAgICAgICAgICMgQ2hl
Y2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJsb2FkcyBlaXRoZXIgZG8s
IG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAgICAgICAgIyBhdCB0aGlzIGlu
ZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9uIGNhc2UuCisgICAgICAgICAg
ICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAg
ICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgb3Zlcmxv
YWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3Jt
LmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
IyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZpcnN0IGJlY2F1c2UgaWYg
d2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAgICAgICAgICAgICAjIHRvIHNh
eSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAgICAgICAgICAgIGlmIG51bVll
cyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNl
KTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0LgorCisgICAgICAgICAg
ICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0g
MSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJncy5zaXplKCkp
IHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3Zl
cmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdo
YXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgb3Zlcmxv
YWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRk
ciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAK
KyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0aGluZywganVzdCBkcm9w
IHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2ln
bmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92
ZXJsb2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgaG93
IHdlIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlzIGFyZ3VtZW50IHRvIGFu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIHlpZWxkcyBhIHZhbGlkIGZv
cm0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9PSBhcmdJbmRleAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRkciIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVz
ID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLmVhY2ggeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVll
cyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERyb3AgZG93biwg
ZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgS2VlcCBnb2luZy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
Rm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRl
ciwgY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiBuZWVkT3Zlcmxv
YWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAg
ICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiI7CisgICAgb3V0cC5w
dXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZh
bHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVscGVyczo6
SnVtcCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQm
IGNvbnRleHQpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJB
TShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShjb250ZXh0KTsiCisgICAgb3V0
cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIKKyAgICBtYXRjaEluc3RPdmVybG9h
ZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQs
IGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdlbmVyYXRlKCp0aGlzLCBqaXQsIGNv
bnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGZvcm0uYWx0TmFtZQorICAg
ICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2RlLm1hc21OYW1lCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
IG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKworICAgICAgICAgICAgZm9ybS5raW5k
cy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAg
ICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmlu
dCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgY2FzZSBraW5kLm5h
bWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAgICAgICAgICAgICAgICAgIGlmIG92
ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgorICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgd2hlbiAi
SW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Ry
dXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4gIkltbTY0IgorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW02NCgpIgorICAg
ICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
ImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJ
bmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgor
ICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCisgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dHAucHV0cyAiKTsiCisgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1bHQpOyIKKyAgICAgICAgZW5kCisg
ICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAg
b3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRw
LnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5MTY1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUFs
dGVybmF0aXZlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBiYXNlbGluZUFs
dGVybmF0aXZlKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnLmgJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAg
CiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggIT0gaW52YWxpZCgpOyB9
Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAKICAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBk
ZWxldGVkKCk7IH0KQEAgLTE3MCw2ICsxNjksNDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCisgICAgY2xhc3MgQWxsUmVnc0l0ZXJhYmxlIHsK
KyAgICBwdWJsaWM6CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBpdGVyYXRvcigpIHsgfQorCisgICAgICAgICAgICBleHBsaWNpdCBpdGVy
YXRvcihSZWcgcmVnKQorICAgICAgICAgICAgICAgIDogbV9yZWdJbmRleChyZWcuaW5kZXgoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVnIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpOyB9CisKKyAgICAg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX3JlZ0luZGV4ID0gUmVnOjpmcm9tSW5kZXgobV9yZWdJbmRleCkubmV4dCgpLmluZGV4
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZ0luZGV4ID09IG90aGVyLm1f
cmVnSW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICB1bnNpZ25lZCBtX3JlZ0luZGV4OworICAgICAgICB9OworCisg
ICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJz
dCgpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihS
ZWcoKSk7IH0KKyAgICB9OworCisgICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSB7IHJl
dHVybiBBbGxSZWdzSXRlcmFibGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90
IGludmFsaWQoKSB7IHJldHVybiAweGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCShyZXZpc2lvbiAxOTE2NTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6UmVn
aXN0ZXJBdE9mZnNldExpCiAgICAgaWYgKG9mZnNldEJhc2VUeXBlID09IEZyYW1lUG9pbnRlckJh
c2VkKQogICAgICAgICBvZmZzZXQgPSAtKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obnVtYmVyT2ZS
ZWdpc3RlcnMpICogc2l6ZW9mKHZvaWQqKSk7CiAKLSAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZp
cnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTtyZWcgPSByZWcubmV4dCgpKSB7CisgICAgZm9yIChS
ZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0
KCkpIHsKICAgICAgICAgaWYgKHJlZ2lzdGVyU2V0LmdldChyZWcpKSB7CiAgICAgICAgICAgICBh
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChyZWcsIG9mZnNldCkpOwogICAgICAgICAgICAgb2Zmc2V0
ICs9IHNpemVvZih2b2lkKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyQXRPZmZzZXRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICBtX3JlZ2lzdGVycy5jbGVhcigpOwogICAg
IH0KIAotICAgIHNpemVfdCBzaXplKCkKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnMuc2l6ZSgpOwogICAgIH0KQEAgLTY2LDYgKzY2LDkg
QEAgcHVibGljOgogICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGZpbmQoUmVnKSBjb25zdDsKICAgICB1
bnNpZ25lZCBpbmRleE9mKFJlZykgY29uc3Q7IC8vIFJldHVybnMgVUlOVF9NQVggaWYgbm90IGZv
dW5kLgogCisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzLmJlZ2luKCk7IH0KKyAgICBWZWN0b3I8UmVn
aXN0ZXJBdE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
aXN0ZXJzLmVuZCgpOyB9CisKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+
IG1fcmVnaXN0ZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmgJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxMyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBj
b25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRCaXRz
KCkpCisgICAgICAgICAgICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7CisgICAgfQog
ICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9Cklu
ZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxNS0xMC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBC
MworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogd3RmL0hhc2hTZXQuaDoKKyAgICAgICAgKFdURjo6Y29weVRvVmVjdG9yKToK
KyAgICAgICAgKFdURjo6PSk6CisgICAgICAgICogd3RmL0xpc3REdW1wLmg6CisgICAgICAgIChX
VEY6OlBvaW50ZXJMaXN0RHVtcDo6UG9pbnRlckxpc3REdW1wKToKKyAgICAgICAgKFdURjo6UG9p
bnRlckxpc3REdW1wOjpkdW1wKToKKyAgICAgICAgKFdURjo6TWFwRHVtcDo6TWFwRHVtcCk6Cisg
ICAgICAgIChXVEY6Omxpc3REdW1wKToKKyAgICAgICAgKFdURjo6cG9pbnRlckxpc3REdW1wKToK
KyAgICAgICAgKFdURjo6c29ydGVkTGlzdER1bXApOgorICAgICAgICAqIHd0Zi9NYXRoRXh0cmFz
Lmg6CisgICAgICAgIChXVEY6OmxlZnRTaGlmdFdpdGhTYXR1cmF0aW9uKToKKyAgICAgICAgKFdU
Rjo6cmFuZ2VzT3ZlcmxhcCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICog
d3RmL1Njb3BlZExhbWJkYS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6c2NvcGVkTGFtYmRhKToK
KyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpjcmVhdGVTaGFyZWRU
YXNrKToKKwogMjAxNS0xMC0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZhY3RvciBvdXQgdGhlIGdyYXBoIG5vZGUgd29ya2xpc3RzIGZyb20gREZHIGludG8g
V1RGCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5
OEVCIC8qIFdvcmRMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJ
MEZFQjNEQ0YxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAv
KiBTaGFyZWRUYXNrLmggKi87IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJh
bGxlbFZlY3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVy
YXRvci5oICovOyB9OworCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
MDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJE
ODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdy
YXBoTm9kZVdvcmtsaXN0LmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBU
aW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkwRkY4
NjA5NTFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3
RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBG
RTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0
IC8qIFNjb3BlZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29w
ZWRMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUz
MTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5
NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVB
QjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFB
RkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNE
MzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0
MTIzRkYgLyogU2VnbWVudGVkVmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEy
M0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQx
MjNGRiAvKiBTSEExLmNwcCAqLywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmlt
aXRpdmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyog
U2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHNldChX
VEZfSEVBREVSUwogICAgIFNIQTEuaAogICAgIFNoYXJlZFRhc2suaAogICAgIFNhdHVyYXRlZEFy
aXRobWV0aWMuaAorICAgIFNjb3BlZExhbWJkYS5oCiAgICAgU2VnbWVudGVkVmVjdG9yLmgKICAg
ICBTdGFja0JvdW5kcy5oCiAgICAgU3RhY2tTdGF0cy5oCkBAIC0xODEsNiArMTgyLDcgQEAgc2V0
KFdURl9TT1VSQ0VTCiAgICAgUmVmQ291bnRlci5jcHAKICAgICBSdW5Mb29wLmNwcAogICAgIFNI
QTEuY3BwCisgICAgU2NvcGVkTGFtYmRhLmNwcAogICAgIFNpeENoYXJhY3Rlckhhc2guY3BwCiAg
ICAgU3RhY2tCb3VuZHMuY3BwCiAgICAgU3RhY2tTdGF0cy5jcHAKSW5kZXg6IFNvdXJjZS9XVEYv
d3RmL0hhc2hTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHJl
dmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYvd3RmL0hhc2hTZXQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTE0LDggKzExNCw5IEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBWID0gVmFsdWVUeXBlPiB0eXBlbmFtZSBzdGQ6OmVuYWJsZV9pZjxJc1NtYXJ0UHRy
PFY+Ojp2YWx1ZSwgVmFsdWVUeXBlPjo6dHlwZSB0YWtlKHR5cGVuYW1lIEdldFB0ckhlbHBlcjxW
Pjo6UHRyVHlwZSk7CiAKICAgICAgICAgc3RhdGljIGJvb2wgaXNWYWxpZFZhbHVlKGNvbnN0IFZh
bHVlVHlwZSYpOwotICAgICAgICAKLSAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEhhc2hT
ZXQmKSBjb25zdDsKKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPdGhlckNvbGxlY3Rpb24+
CisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBPdGhlckNvbGxlY3Rpb24mKSBjb25zdDsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIEhhc2hUYWJsZVR5cGUgbV9pbXBsOwpAQCAtMzM3LDEy
ICszMzgsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgfSAgCiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBULCB0eXBlbmFtZSBVLCB0eXBlbmFtZSBWPgotICAgIGlubGluZSBib29sIEhhc2hTZXQ8
VCwgVSwgVj46Om9wZXJhdG9yPT0oY29uc3QgSGFzaFNldCYgb3RoZXIpIGNvbnN0CisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgorICAgIGlubGluZSBib29sIEhhc2hTZXQ8
VCwgVSwgVj46Om9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJiBvdGhlckNvbGxlY3Rp
b24pIGNvbnN0CiAgICAgewotICAgICAgICBpZiAoc2l6ZSgpICE9IG90aGVyLnNpemUoKSkKKyAg
ICAgICAgaWYgKHNpemUoKSAhPSBvdGhlckNvbGxlY3Rpb24uc2l6ZSgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICBmb3IgKGNvbnN0X2l0ZXJhdG9yIGl0ZXIgPSBiZWdpbigp
OyBpdGVyICE9IGVuZCgpOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIGlmICghb3RoZXIuY29udGFp
bnMoKml0ZXIpKQorICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG90aGVyIDogb3RoZXJDb2xsZWN0
aW9uKSB7CisgICAgICAgICAgICBpZiAoIWNvbnRhaW5zKG90aGVyKSkKICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBT
b3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL0xp
c3REdW1wLmgJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYvd3RmL0xpc3REdW1wLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMywg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTUzLDYgKzUzLDI2IEBAIHByaXZhdGU6CiB9OwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorY2xhc3MgUG9pbnRlckxpc3REdW1wIHsKK3B1YmxpYzoKKyAgICBQb2ludGVy
TGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgY2hhciogY29tbWEpCisgICAgICAgIDogbV9s
aXN0KGxpc3QpCisgICAgICAgICwgbV9jb21tYShjb21tYSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgZm9y
ICh0eXBlbmFtZSBUOjpjb25zdF9pdGVyYXRvciBpdGVyID0gbV9saXN0LmJlZ2luKCk7IGl0ZXIg
IT0gbV9saXN0LmVuZCgpOyArK2l0ZXIpCisgICAgICAgICAgICBvdXQucHJpbnQobV9jb21tYSwg
cG9pbnRlckR1bXAoKml0ZXIpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVCYgbV9s
aXN0OworICAgIENvbW1hUHJpbnRlciBtX2NvbW1hOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KIGNsYXNzIE1hcER1bXAgewogcHVibGljOgogICAgIE1hcER1bXAoY29uc3QgVCYgbWFwLCBj
b25zdCBjaGFyKiBhcnJvdywgY29uc3QgY2hhciogY29tbWEpCkBAIC04MCw2ICsxMDAsMTIgQEAg
TGlzdER1bXA8VD4gbGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29ucwogICAgIHJldHVybiBMaXN0
RHVtcDxUPihsaXN0LCBjb21tYSk7CiB9CiAKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitQb2ludGVy
TGlzdER1bXA8VD4gcG9pbnRlckxpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IGNoYXIqIGNv
bW1hID0gIiwgIikKK3sKKyAgICByZXR1cm4gUG9pbnRlckxpc3REdW1wPFQ+KGxpc3QsIGNvbW1h
KTsKK30KKwogdGVtcGxhdGU8dHlwZW5hbWUgVCwgdHlwZW5hbWUgQ29tcGFyYXRvcj4KIENTdHJp
bmcgc29ydGVkTGlzdER1bXAoY29uc3QgVCYgbGlzdCwgY29uc3QgQ29tcGFyYXRvciYgY29tcGFy
YXRvciwgY29uc3QgY2hhciogY29tbWEgPSAiLCAiKQogewpJbmRleDogU291cmNlL1dURi93dGYv
TWF0aEV4dHJhcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAko
cmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL1dURi93dGYvTWF0aEV4dHJhcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC00MTksNiArNDE5LDIwIEBAIGlubGluZSBUIGxlZnRTaGlmdFdpdGhTYXR1cmF0
aW9uKFQgdmFsdWUKICAgICByZXR1cm4gcmVzdWx0OwogfQogCisvLyBQYXNzIHJhbmdlcyB3aXRo
IHRoZSBtaW4gYmVpbmcgaW5jbHVzaXZlIGFuZCB0aGUgbWF4IGJlaW5nIGV4Y2x1c2l2ZS4gRm9y
IGV4YW1wbGUsIHRoaXMgc2hvdWxkCisvLyByZXR1cm4gZmFsc2U6CisvLworLy8gICAgIHJhbmdl
c092ZXJsYXAoMCwgOCwgOCwgMTYpCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoraW5saW5lIGJvb2wg
cmFuZ2VzT3ZlcmxhcChUIGxlZnRNaW4sIFQgbGVmdE1heCwgVCByaWdodE1pbiwgVCByaWdodE1h
eCkKK3sKKyAgICBpZiAobGVmdE1pbiA8PSByaWdodE1pbiAmJiBsZWZ0TWF4ID4gcmlnaHRNaW4p
CisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChyaWdodE1pbiA8PSBsZWZ0TWluICYmIHJp
Z2h0TWF4ID4gbGVmdE1pbikKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGZhbHNl
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vICNpZm5kZWYgV1RGX01hdGhF
eHRyYXNfaApJbmRleDogU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvV1RG
L3d0Zi9QbGF0Zm9ybS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NzYsMTIgKzc3NiwyMCBAQAogI2Rl
ZmluZSBFTkFCTEVfQ09OQ1VSUkVOVF9KSVQgMQogI2VuZGlmCiAKKy8qIFRoZSBCMyBjb21waWxl
ciBpcyBhbiBleHBlcmltZW50YWwgYmFja2VuZCB0aGF0IGlzIHN0aWxsIGluIGRldmVsb3BtZW50
LiBXZSB3aWxsIGtlZXAgaXQgYnVpbGRpbmcKKyAgIG9uIERhcndpbi94ODYtNjQgZm9yIG5vdywg
dGhvdWdoIGl0IGlzIHVudXNlZCBleGNlcHQgZm9yIHRlc3RzLiAqLworI2lmIE9TKERBUldJTikg
JiYgQ1BVKFg4Nl82NCkKKyNkZWZpbmUgRU5BQkxFX0IzX0pJVCAxCisjZW5kaWYKKwogLyogSWYg
dGhlIGJhc2VsaW5lIGppdCBpcyBub3QgYXZhaWxhYmxlLCB0aGVuIGRpc2FibGUgdXBwZXIgdGll
cnMgYXMgd2VsbDogKi8KICNpZiAhRU5BQkxFKEpJVCkKLSN1bmRlZiBFTkFCTEVfREZHX0pJVCAg
ICAgIC8qIFVuZGVmIHNvIHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0LiAqLwotI3VuZGVmIEVOQUJM
RV9GVExfSklUICAgICAgLyogVW5kZWYgc28gdGhhdCB3ZSBjYW4gcmVkZWZpbmUgaXQuICovCisj
dW5kZWYgRU5BQkxFX0RGR19KSVQKKyN1bmRlZiBFTkFCTEVfRlRMX0pJVAorI3VuZGVmIEVOQUJM
RV9CM19KSVQKICNkZWZpbmUgRU5BQkxFX0RGR19KSVQgMAogI2RlZmluZSBFTkFCTEVfRlRMX0pJ
VCAwCisjZGVmaW5lIEVuYWJsZV9CM19KSVQgMAogI2VuZGlmCiAKIC8qIENvdW50cyB1c2VzIG9m
IHdyaXRlIGJhcnJpZXJzIHVzaW5nIHNhbXBsaW5nIGNvdW50ZXJzLiBCZSBzdXJlIHRvIGFsc28K
SW5kZXg6IFNvdXJjZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1Njb3BlZExhbWJkYS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL1dURi93dGYv
U2NvcGVkTGFtYmRhLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFNjb3BlZExhbWJk
YV9oCisjZGVmaW5lIFNjb3BlZExhbWJkYV9oCisKK25hbWVzcGFjZSBXVEYgeworCisvLyBZb3Ug
Y2FuIHVzZSBTY29wZWRMYW1iZGEgdG8gZWZmaWNpZW50bHkgcGFzcyBsYW1iZGFzIHdpdGhvdXQg
YWxsb2NhdGluZyBtZW1vcnkgb3IgcmVxdWlyaW5nCisvLyB0ZW1wbGF0ZSBzcGVjaWFsaXphdGlv
biBvZiB0aGUgY2FsbGVlLiBUaGUgY2FsbGVlIHNob3VsZCBiZSBkZWNsYXJlZCBhczoKKy8vCisv
LyB2b2lkIGZvbyhjb25zdCBTY29wZWRMYW1iZGE8TXlUaGluZ3MqIChpbnQsIFN0dWZmJik+Jik7
CisvLworLy8gVGhlIGNhbGxlciBqdXN0IGRvZXM6CisvLworLy8gdm9pZCBmb28oc2NvcGVkTGFt
YmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPihbJl0gKGludCB4LCBTdHVmZiYgeSkgLT4gTXlU
aGluZ3MqIHsgYmxhaCB9KSk7CisvLworLy8gTm90ZSB0aGF0IHRoaXMgcmVsaWVzIG9uIGZvbygp
IG5vdCBlc2NhcGluZyB0aGUgbGFtYmRhLiBUaGUgbGFtYmRhIGlzIG9ubHkgdmFsaWQgd2hpbGUg
Zm9vKCkgaXMKKy8vIG9uIHRoZSBzdGFjayAtIGhlbmNlIHRoZSBuYW1lIFNjb3BlZExhbWJkYS4K
KwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBTY29wZWRMYW1iZGE7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgor
Y2xhc3MgU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMuLi4pPiB7CitwdWJs
aWM6CisgICAgU2NvcGVkTGFtYmRhKFJlc3VsdFR5cGUgKCppbXBsKSh2b2lkKiBhcmcsIEFyZ3Vt
ZW50VHlwZXMmJi4uLikgPSBudWxscHRyLCB2b2lkKiBhcmcgPSBudWxscHRyKQorICAgICAgICA6
IG1faW1wbChpbXBsKQorICAgICAgICAsIG1fYXJnKGFyZykKKyAgICB7CisgICAgfQorICAgIAor
ICAgIFJlc3VsdFR5cGUgb3BlcmF0b3IoKShBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1faW1wbChtX2FyZywgc3RkOjpmb3J3YXJkPEFy
Z3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworcHJpdmF0ZToKKyAgICBSZXN1
bHRUeXBlICgqbV9pbXBsKSh2b2lkKiBhcmcsIEFyZ3VtZW50VHlwZXMmJi4uLik7CisgICAgdm9p
ZCAqbV9hcmc7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1l
IEZ1bmN0b3I+IGNsYXNzIFNjb3BlZExhbWJkYUZ1bmN0b3I7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBS
ZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzLCB0eXBlbmFtZSBGdW5jdG9yPgor
Y2xhc3MgU2NvcGVkTGFtYmRhRnVuY3RvcjxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKSwg
RnVuY3Rvcj4gOiBwdWJsaWMgU2NvcGVkTGFtYmRhPFJlc3VsdFR5cGUgKEFyZ3VtZW50VHlwZXMu
Li4pPiB7CitwdWJsaWM6CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgUGFzc2VkRnVuY3Rvcj4KKyAg
ICBTY29wZWRMYW1iZGFGdW5jdG9yKFBhc3NlZEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAgICA6
IFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4oaW1wbEZ1bmN0aW9u
LCB0aGlzKQorICAgICAgICAsIG1fZnVuY3RvcihzdGQ6OmZvcndhcmQ8UGFzc2VkRnVuY3Rvcj4o
ZnVuY3RvcikpCisgICAgeworICAgIH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgUmVzdWx0VHlw
ZSBpbXBsRnVuY3Rpb24odm9pZCogYXJndW1lbnQsIEFyZ3VtZW50VHlwZXMmJi4uLiBhcmd1bWVu
dHMpCisgICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8U2NvcGVkTGFtYmRhRnVuY3Rv
cio+KGFyZ3VtZW50KS0+bV9mdW5jdG9yKAorICAgICAgICAgICAgc3RkOjpmb3J3YXJkPEFyZ3Vt
ZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOworICAgIH0KKworICAgIEZ1bmN0b3IgbV9mdW5jdG9y
OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9y
PgorU2NvcGVkTGFtYmRhRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+IHNjb3BlZExhbWJk
YShGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICByZXR1cm4gU2NvcGVkTGFtYmRhRnVuY3RvcjxG
dW5jdGlvblR5cGUsIEZ1bmN0b3I+KHN0ZDo6Zm9yd2FyZDxGdW5jdG9yPihmdW5jdG9yKSk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCit1c2luZyBXVEY6OlNjb3BlZExhbWJkYTsKK3VzaW5n
IFdURjo6c2NvcGVkTGFtYmRhOworCisjZW5kaWYgLy8gU2NvcGVkTGFtYmRhX2gKKwpJbmRleDog
U291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL1dURi93dGYvU2hhcmVk
VGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC03OSw2ICs3OSwxMSBAQCBwdWJsaWM6CiAgICAgewog
ICAgIH0KIAorICAgIFNoYXJlZFRhc2tGdW5jdG9yKEZ1bmN0b3ImJiBmdW5jdG9yKQorICAgICAg
ICA6IG1fZnVuY3RvcihXVEY6Om1vdmUoZnVuY3RvcikpCisgICAgeworICAgIH0KKwogcHJpdmF0
ZToKICAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBvdmVy
cmlkZQogICAgIHsKQEAgLTExMCw2ICsxMTUsMTEgQEAgUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25U
eXBlPj4gY3JlYXRlU2hhcgogewogICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tG
dW5jdG9yPEZ1bmN0aW9uVHlwZSwgRnVuY3Rvcj4oZnVuY3RvcikpOwogfQordGVtcGxhdGU8dHlw
ZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorUmVmPFNoYXJlZFRhc2s8RnVu
Y3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFzayhGdW5jdG9yJiYgZnVuY3RvcikKK3sKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0
b3I+KFdURjo6bW92ZShmdW5jdG9yKSkpOworfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>264251</attachid>
            <date>2015-10-28 14:53:22 -0700</date>
            <delta_ts>2015-10-28 16:00:31 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>689976</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkxNjg5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDgxMCBA
QAorMjAxNS0xMC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBCMworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBjaGFuZ2VzZXQgYWRkcyB0aGUgYmFz
aWMgc2NhZmZvbGRpbmcgb2YgdGhlIEIzIGNvbXBpbGVyLiBCMyBzdGFuZHMgZm9yIEJhcmUgQm9u
ZXMKKyAgICAgICAgQmFja2VuZC4gSXQncyBhIGxvdy1sZXZlbCBTU0EtYmFzZWQgbGFuZ3VhZ2Ut
YWdub3N0aWMgY29tcGlsZXIuIFRoZSBiYXNpYyBzdHJ1Y3R1cmUgYWxsb3dzCisgICAgICAgIGZv
ciBhZ2dyZXNzaXZlIEMtbGV2ZWwgb3B0aW1pemF0aW9ucyBhbmQgYW4gYXdlc29tZSBwb3J0YWJs
ZSBiYWNrZW5kLiBUaGUgYmFja2VuZCwgY2FsbGVkCisgICAgICAgIEFpciAoQXNzZW1ibHkgSVIp
LCBpcyBhIHJlZmxlY3RpdmUgYWJzdHJhY3Rpb24gb3ZlciBvdXIgTWFjcm9Bc3NlbWJsZXIuIFRo
ZSBhYnN0cmFjdGlvbiBpcworICAgICAgICBkZWZpbmVkIHVzaW5nIGEgc3BlYyBmaWxlIChBaXJP
cGNvZGUub3Bjb2Rlcykgd2hpY2ggZGVzY3JpYmVzIHRoZSB2YXJpb3VzIGtpbmRzIG9mCisgICAg
ICAgIGluc3RydWN0aW9ucyB0aGF0IHdlIHdpc2ggdG8gc3VwcG9ydC4gVGhlbiwgdGhlIEIzOjpM
b3dlclRvQWlyIHBoYXNlLCB3aGljaCBkb2VzIG91cgorICAgICAgICBpbnN0cnVjdGlvbiBzZWxl
Y3Rpb24sIHJlZmxlY3RpdmVseSBzZWxlY3RzIEFpciBvcGNvZGVzIGJ5IHF1ZXJ5aW5nIHdoaWNo
IGluc3RydWN0aW9uIGZvcm1zCisgICAgICAgIGFyZSBwb3NzaWJsZS4gQWlyIGFsbG93cyBmb3Ig
b3B0aW1hbCByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBzdGFjayBsYXlvdXQuIEN1cnJlbnRseSB0
aGUKKyAgICAgICAgcmVnaXN0ZXIgYWxsb2NhdG9yIGlzbid0IHdyaXR0ZW4sIGJ1dCB0aGUgc3Rh
Y2sgbGF5b3V0IGlzLgorCisgICAgICAgIE9mIGNvdXJzZSB0aGlzIGlzbid0IGRvbmUgeWV0LiBJ
dCBjYW4gb25seSBjb21waWxlIGEgc2ltcGxlIHByb2dyYW0sIHNlZW4gaW4gdGhlICJ0ZXN0IHN1
aXRlIgorICAgICAgICBjYWxsZWQgInRlc3RiMy5jcHAiLiBUaGVyZSdzIGEgbG90IG9mIG9wdGlt
aXphdGlvbnMgdGhhdCBoYXZlIHRvIGJlIHdyaXR0ZW4gYW5kIGEgbG90IG9mCisgICAgICAgIHN0
dWZmIGFkZGVkIHRvIHRoZSBpbnN0cnVjdGlvbiBzZWxlY3Rvci4gQnV0IGl0J3MgYSBuZWF0IHN0
YXJ0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJj
ZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5jcHA6CisgICAgICAgIChX
VEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5o
OgorICAgICAgICAqIGIzOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0FkZHJlc3NNYXRjaGVyLnBh
dHRlcm5zOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6On5Bcmd1bWVudFJlZ1ZhbHVl
KToKKyAgICAgICAgKEpTQzo6QjM6OkFyZ3VtZW50UmVnVmFsdWU6OmR1bXBNZXRhKToKKyAgICAg
ICAgKiBiMy9CM0FyZ3VtZW50UmVnVmFsdWUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNCYXNp
Y0Jsb2NrLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpCYXNpY0Js
b2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6On5CYXNpY0Jsb2NrKToKKyAgICAg
ICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNp
Y0Jsb2NrOjphZGRQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpy
ZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpyZXBsYWNl
UHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cmVtb3ZlTm9wcyk6
CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkJhc2ljQmxvY2s6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9CM0Jhc2ljQmxvY2suaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6
OkIzOjpCYXNpY0Jsb2NrOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpl
bmQpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6c2l6ZSk6CisgICAgICAgIChKU0M6
OkIzOjpCYXNpY0Jsb2NrOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpsYXN0
KToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OnZhbHVlcyk6CisgICAgICAgIChKU0M6
OkIzOjpCYXNpY0Jsb2NrOjpudW1QcmVkZWNlc3NvcnMpOgorICAgICAgICAoSlNDOjpCMzo6QmFz
aWNCbG9jazo6cHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6cHJl
ZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkJhc2ljQmxvY2s6OmZyZXF1ZW5jeSk6Cisg
ICAgICAgIChKU0M6OkIzOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBCYXNpY0Jsb2NrRHVtcCk6
CisgICAgICAgIChKU0M6OkIzOjpEZWVwQmFzaWNCbG9ja0R1bXA6OmR1bXApOgorICAgICAgICAo
SlNDOjpCMzo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL0IzQmFzaWNCbG9ja0lubGluZXMuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjphcHBlbmROZXcpOgorICAgICAg
ICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6bnVtU3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIz
OjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QmFzaWNCbG9jazo6
c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9j
ayk6CisgICAgICAgIChKU0M6OkIzOjpCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MpOgorICAg
ICAgICAqIGIzL0IzQmFzaWNCbG9ja1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6cmVtb3ZlUHJlZGVjZXNzb3IpOgor
ICAgICAgICAoSlNDOjpCMzo6cmVwbGFjZVByZWRlY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6
OnJlc2V0UmVhY2hhYmlsaXR5KToKKyAgICAgICAgKEpTQzo6QjM6OmJsb2Nrc0luUHJlT3JkZXIp
OgorICAgICAgICAoSlNDOjpCMzo6YmxvY2tzSW5Qb3N0T3JkZXIpOgorICAgICAgICAqIGIzL0Iz
QmxvY2tXb3JrbGlzdC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NoZWNrU3BlY2lhbC5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpudW1CM0FyZ3MpOgorICAgICAgICAoSlND
OjpCMzo6Q2hlY2tTcGVjaWFsOjpDaGVja1NwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hl
Y2tTcGVjaWFsOjp+Q2hlY2tTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lh
bDo6aGlkZGVuQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lhbDo6Zm9yRWFj
aEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1NwZWNpYWw6OmlzVmFsaWQpOgorICAgICAg
ICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIz
OjpDaGVja1NwZWNpYWw6OmdlbmVyYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrU3BlY2lh
bDo6ZHVtcEltcGwpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tTcGVjaWFsOjpkZWVwRHVtcElt
cGwpOgorICAgICAgICAqIGIzL0IzQ2hlY2tTcGVjaWFsLmg6IEFkZGVkLgorICAgICAgICAqIGIz
L0IzQ2hlY2tWYWx1ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6
fkNoZWNrVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q2hlY2tWYWx1ZTo6ZHVtcE1ldGEpOgor
ICAgICAgICAqIGIzL0IzQ2hlY2tWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NvbW1v
bi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6c2hvdWxkRHVtcElSKToKKyAgICAgICAg
KEpTQzo6QjM6OnNob3VsZER1bXBJUkF0RWFjaFBoYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OnNo
b3VsZFZhbGlkYXRlSVIpOgorICAgICAgICAoSlNDOjpCMzo6c2hvdWxkVmFsaWRhdGVJUkF0RWFj
aFBoYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OnNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKToKKyAg
ICAgICAgKiBiMy9CM0NvbW1vbi5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OmlzNjRCaXQp
OgorICAgICAgICAoSlNDOjpCMzo6aXMzMkJpdCk6CisgICAgICAgICogYjMvQjNDb21tdXRhdGl2
aXR5LmNwcDogQWRkZWQuCisgICAgICAgIChXVEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAq
IGIzL0IzQ29tbXV0YXRpdml0eS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0NvbnN0MzJWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjp+Q29uc3QzMlZh
bHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0MzJWYWx1ZTo6bmVnQ29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpCMzo6Q29uc3QzMlZhbHVlOjphZGRDb25zdGFudCk6CisgICAgICAgIChKU0M6
OkIzOjpDb25zdDMyVmFsdWU6OnN1YkNvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0
MzJWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAqIGIzL0IzQ29uc3QzMlZhbHVlLmg6IEFkZGVk
LgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpDb25zdDY0VmFsdWU6On5Db25zdDY0VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3Q2NFZhbHVlOjpuZWdDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdDY0VmFsdWU6
OmFkZENvbnN0YW50KToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0NjRWYWx1ZTo6c3ViQ29uc3Rh
bnQpOgorICAgICAgICAoSlNDOjpCMzo6Q29uc3Q2NFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAg
ICogYjMvQjNDb25zdDY0VmFsdWUuaDogQWRkZWQuCisgICAgICAgICogYjMvQjNDb25zdERvdWJs
ZVZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjp+
Q29uc3REb3VibGVWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpu
ZWdDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjphZGRDb25z
dGFudCk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudCk6
CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAg
ICogYjMvQjNDb25zdERvdWJsZVZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29u
c3REb3VibGVWYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZh
bHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpDb25zdERvdWJsZVZhbHVlOjpDb25zdERv
dWJsZVZhbHVlKToKKyAgICAgICAgKiBiMy9CM0NvbnN0UHRyVmFsdWUuaDogQWRkZWQuCisgICAg
ICAgIChKU0M6OkIzOjpDb25zdFB0clZhbHVlOjp2YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpD
b25zdFB0clZhbHVlOjpDb25zdFB0clZhbHVlKToKKyAgICAgICAgKiBiMy9CM0NvbnRyb2xWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Q29udHJvbFZhbHVlOjp+Q29udHJvbFZh
bHVlKToKKyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAg
ICAqIGIzL0IzQ29udHJvbFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzRWZmZWN0cy5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6RWZmZWN0czo6ZHVtcCk6CisgICAgICAgICog
YjMvQjNFZmZlY3RzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6RWZmZWN0czo6bXVzdEV4
ZWN1dGUpOgorICAgICAgICAqIGIzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNGcmVxdWVuY3lDbGFzcy5o
OiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM0ZyZXF1ZW50ZWRCbG9jay5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiMy9CM0dlbmVyYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0
ZSk6CisgICAgICAgIChKU0M6OkIzOjpnZW5lcmF0ZVRvQWlyKToKKyAgICAgICAgKiBiMy9CM0dl
bmVyYXRlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OkdlbmVy
aWNGcmVxdWVudGVkQmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jazo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpHZW5lcmljRnJlcXVlbnRlZEJs
b2NrOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxv
Y2s6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRC
bG9jazo6YmxvY2spOgorICAgICAgICAoSlNDOjpCMzo6R2VuZXJpY0ZyZXF1ZW50ZWRCbG9jazo6
ZnJlcXVlbmN5KToKKyAgICAgICAgKEpTQzo6QjM6OkdlbmVyaWNGcmVxdWVudGVkQmxvY2s6OmR1
bXApOgorICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkIzOjpIZWFwUmFuZ2U6OmR1bXApOgorICAgICAgICAqIGIzL0IzSGVhcFJhbmdlLmg6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpIZWFwUmFuZ2UpOgorICAgICAgICAoSlND
OjpCMzo6SGVhcFJhbmdlOjp0b3ApOgorICAgICAgICAoSlNDOjpCMzo6SGVhcFJhbmdlOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkhlYXBSYW5nZTo6b3BlcmF0b3IhPSk6CisgICAg
ICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpC
Mzo6SGVhcFJhbmdlOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6OmVuZCk6
CisgICAgICAgIChKU0M6OkIzOjpIZWFwUmFuZ2U6Om92ZXJsYXBzKToKKyAgICAgICAgKiBiMy9C
M0luZGV4TWFwLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OkluZGV4TWFw
KToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFwOjpyZXNpemUpOgorICAgICAgICAoSlNDOjpC
Mzo6SW5kZXhNYXA6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzSW5kZXhTZXQuaDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SW5kZXhTZXQpOgorICAgICAgICAoSlND
OjpCMzo6SW5kZXhTZXQ6OmFkZCk6CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6Y29udGFp
bnMpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjpJdGVyYWJsZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6
CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRv
ciopOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxlOjppdGVyYXRvcjo6b3Bl
cmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6Oml0ZXJhdG9y
OjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpJdGVyYWJsZTo6aXRl
cmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6Okl0ZXJhYmxl
OjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6SXRlcmFibGU6OmVuZCk6Cisg
ICAgICAgIChKU0M6OkIzOjpJbmRleFNldDo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6Oklu
ZGV4U2V0OjppbmRpY2VzKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4U2V0OjpkdW1wKToKKyAg
ICAgICAgKiBiMy9CM0luc2VydGlvblNldC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
SW5zZXJ0aW9uU2V0OjpleGVjdXRlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldC5oOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Okluc2VydGlvblNldDo6SW5zZXJ0aW9uU2V0KToKKyAg
ICAgICAgKEpTQzo6QjM6Okluc2VydGlvblNldDo6Y29kZSk6CisgICAgICAgIChKU0M6OkIzOjpJ
bnNlcnRpb25TZXQ6OmFwcGVuZEluc2VydGlvbik6CisgICAgICAgIChKU0M6OkIzOjpJbnNlcnRp
b25TZXQ6Omluc2VydFZhbHVlKToKKyAgICAgICAgKiBiMy9CM0luc2VydGlvblNldElubGluZXMu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpJbnNlcnRpb25TZXQ6Omluc2VydCk6CisgICAg
ICAgICogYjMvQjNMb3dlclRvQWlyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6Okxvd2VyVG9BaXIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpydW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0bXApOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjplZmZlY3RpdmVBZGRyKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YWRkcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
Okxvd2VyVG9BaXI6OmxvYWRBZGRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6aW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6aW1tT3JUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphcHBlbmRCaW5PcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnRyeUFwcGVuZFN0b3JlQmluT3ApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjptb3ZlRm9yVHlwZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJlbGF4ZWRNb3ZlRm9yVHlwZSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6Okxvd2VyVG9BaXI6OmFwcGVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxv
d2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6QWRkcmVzc1NlbGVjdG9yKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRSb290KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRS
b290TGF0ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxl
Y3Rvcjo6YWNjZXB0SW50ZXJuYWxzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fp
cjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRJbnRlcm5hbHNMYXRlKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjphY2NlcHRPcGVyYW5kcyk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6YWNjZXB0
T3BlcmFuZHNMYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVz
c1NlbGVjdG9yOjp0cnlBZGRTaGlmdDEpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRv
QWlyOjpBZGRyZXNzU2VsZWN0b3I6OnRyeUFkZFNoaWZ0Mik6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okxvd2VyVG9BaXI6OkFkZHJlc3NTZWxlY3Rvcjo6dHJ5QWRkKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6QWRkcmVzc1NlbGVjdG9yOjp0cnlEaXJlY3QpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjphY2NlcHRSb290KToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6TG93ZXJUb0Fpcjo6YWNjZXB0Um9vdExhdGUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjphY2NlcHRJbnRlcm5hbHMpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpMb3dlclRvQWlyOjphY2NlcHRJbnRlcm5hbHNMYXRlKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6TG93ZXJUb0Fpcjo6YWNjZXB0T3BlcmFuZHMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjphY2NlcHRPcGVyYW5kc0xhdGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpM
b3dlclRvQWlyOjp0cnlMb2FkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6
dHJ5QWRkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5QW5kKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5U3RvcmVBZGRMb2FkKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5U3RvcmVBbmRMb2FkKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5U3RvcmUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpMb3dlclRvQWlyOjp0cnlUcnVuY0FyZ3VtZW50UmVnKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5VHJ1bmMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dl
clRvQWlyOjp0cnlBcmd1bWVudFJlZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9B
aXI6OnRyeUNvbnN0MzIpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlD
b25zdDY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TG93ZXJUb0Fpcjo6dHJ5SWRlbnRpdHkp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpMb3dlclRvQWlyOjp0cnlSZXR1cm4pOgorICAgICAg
ICAoSlNDOjpCMzo6bG93ZXJUb0Fpcik6CisgICAgICAgICogYjMvQjNMb3dlclRvQWlyLmg6IEFk
ZGVkLgorICAgICAgICAqIGIzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRlcm5zOiBBZGRlZC4KKyAg
ICAgICAgKiBiMy9CM01lbW9yeVZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpN
ZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKToKKyAgICAgICAgKEpTQzo6QjM6Ok1lbW9yeVZhbHVl
OjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNNZW1vcnlWYWx1ZS5oOiBBZGRlZC4KKyAgICAg
ICAgKiBiMy9CM09wY29kZS5jcHA6IEFkZGVkLgorICAgICAgICAoV1RGOjpwcmludEludGVybmFs
KToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6Omlz
Q2hlY2tNYXRoKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6T3JpZ2luOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM09yaWdpbi5oOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QjM6Ok9yaWdpbjo6T3JpZ2luKToKKyAgICAgICAgKEpTQzo6QjM6Ok9y
aWdpbjo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIzOjpPcmlnaW46OmRhdGEpOgor
ICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpQYXRjaHBvaW50U3BlY2lhbCk6CisgICAgICAgIChK
U0M6OkIzOjpQYXRjaHBvaW50U3BlY2lhbDo6flBhdGNocG9pbnRTcGVjaWFsKToKKyAgICAgICAg
KEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6
QjM6OlBhdGNocG9pbnRTcGVjaWFsOjppc1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNo
cG9pbnRTcGVjaWFsOjphZG1pdHNTdGFjayk6CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50
U3BlY2lhbDo6Z2VuZXJhdGUpOgorICAgICAgICAoSlNDOjpCMzo6UGF0Y2hwb2ludFNwZWNpYWw6
OmR1bXBJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRTcGVjaWFsOjpkZWVwRHVt
cEltcGwpOgorICAgICAgICAqIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaDogQWRkZWQuCisgICAg
ICAgICogYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OlBhdGNocG9pbnRWYWx1ZTo6flBhdGNocG9pbnRWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpQ
YXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1
ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyk6
CisgICAgICAgIChKU0M6OkIzOjpQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSk6Cisg
ICAgICAgICogYjMvQjNQaGFzZVNjb3BlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpQ
aGFzZVNjb3BlOjpQaGFzZVNjb3BlKToKKyAgICAgICAgKEpTQzo6QjM6OlBoYXNlU2NvcGU6On5Q
aGFzZVNjb3BlKToKKyAgICAgICAgKiBiMy9CM1BoYXNlU2NvcGUuaDogQWRkZWQuCisgICAgICAg
ICogYjMvQjNQcm9jZWR1cmUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6UHJvY2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6flByb2NlZHVyZSk6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmFkZEJsb2NrKToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6cmVzZXRSZWFjaGFiaWxpdHkpOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YmxvY2tzSW5QcmVP
cmRlcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmJsb2Nrc0luUG9zdE9yZGVyKToK
KyAgICAgICAgKiBiMy9CM1Byb2NlZHVyZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlBy
b2NlZHVyZTo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmF0KToKKyAgICAg
ICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpQ
cm9jZWR1cmU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpp
dGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Oml0ZXJh
dG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6aXRlcmF0b3I6
Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjppdGVyYXRvcjo6Zmlu
ZE5leHQpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpiZWdpbik6CisgICAgICAgIChK
U0M6OkIzOjpQcm9jZWR1cmU6OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZh
bHVlc0NvbGxlY3Rpb246OlZhbHVlc0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6aXRlcmF0
b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xs
ZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpT
Qzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlND
OjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjplbmQpOgorICAgICAgICAoSlNDOjpC
Mzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6YXQpOgorICAgICAgICAoSlNDOjpCMzo6UHJv
Y2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6
OlByb2NlZHVyZTo6dmFsdWVzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6c2V0TGFz
dFBoYXNlTmFtZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6Omxhc3RQaGFzZU5hbWUp
OgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlSW5saW5lcy5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlByb2NlZHVyZTo6YWRkKToKKyAgICAgICAgKiBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpyZWR1Y2VTdHJlbmd0aCk6CisgICAgICAgICog
YjMvQjNSZWR1Y2VTdHJlbmd0aC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdEtp
bmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICog
YjMvQjNTdGFja1Nsb3RLaW5kLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzU3RhY2tTbG90VmFs
dWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjp+U3RhY2tT
bG90VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6OmR1bXBNZXRhKToK
KyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdFZhbHVlLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2tTbG90VmFsdWU6OmFjY2VwdHMpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90
VmFsdWU6OmJ5dGVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpraW5k
KToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrU2xvdFZhbHVlOjpvZmZzZXRGcm9tRlApOgorICAg
ICAgICAoSlNDOjpCMzo6U3RhY2tTbG90VmFsdWU6OnNldE9mZnNldEZyb21GUCk6CisgICAgICAg
IChKU0M6OkIzOjpTdGFja1Nsb3RWYWx1ZTo6U3RhY2tTbG90VmFsdWUpOgorICAgICAgICAqIGIz
L0IzU3RhY2ttYXAuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwOjpTdGFj
a21hcCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6flN0YWNrbWFwKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrbWFwOjpkdW1wKToKKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwLmg6IEFk
ZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXA6OmNvbnN0cmFpbik6CisgICAgICAgIChK
U0M6OkIzOjpTdGFja21hcDo6cmVwcyk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xv
YmJlcik6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcDo6Y2xvYmJlcmVkKToKKyAgICAgICAg
KEpTQzo6QjM6OlN0YWNrbWFwOjpzZXRHZW5lcmF0b3IpOgorICAgICAgICAqIGIzL0IzU3RhY2tt
YXBTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6
OlN0YWNrbWFwU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6On5T
dGFja21hcFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjpyZXBv
cnRVc2VkUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6ZXh0
cmFDbG9iYmVyZWRSZWdzKToKKyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6Zm9y
RWFjaEFyZ0ltcGwpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlk
SW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmFkbWl0c1N0YWNrSW1w
bCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja21hcFNwZWNpYWw6OmFwcGVuZFJlcHNJbXBsKToK
KyAgICAgICAgKEpTQzo6QjM6OlN0YWNrbWFwU3BlY2lhbDo6cmVwRm9yQXJnKToKKyAgICAgICAg
KiBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9CM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb24uaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0
aW9uOjpTdWNjZXNzb3JDb2xsZWN0aW9uKToKKyAgICAgICAgKEpTQzo6QjM6OlN1Y2Nlc3NvckNv
bGxlY3Rpb246OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6
YXQpOgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6
CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0
b3IpOgorICAgICAgICAoSlNDOjpCMzo6U3VjY2Vzc29yQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9w
ZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjppdGVyYXRv
cjo6b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0
aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JD
b2xsZWN0aW9uOjpiZWdpbik6CisgICAgICAgIChKU0M6OkIzOjpTdWNjZXNzb3JDb2xsZWN0aW9u
OjplbmQpOgorICAgICAgICAqIGIzL0IzU3dpdGNoQ2FzZS5jcHA6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6U3dpdGNoQ2FzZTo6ZHVtcCk6CisgICAgICAgICogYjMvQjNTd2l0Y2hDYXNlLmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6U3dpdGNoQ2FzZSk6CisgICAg
ICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNlOjpvcGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6
QjM6OlN3aXRjaENhc2U6OmNhc2VWYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hDYXNl
Ojp0YXJnZXQpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoQ2FzZTo6dGFyZ2V0QmxvY2spOgor
ICAgICAgICAqIGIzL0IzU3dpdGNoVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6
OlN3aXRjaFZhbHVlOjp+U3dpdGNoVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFs
dWU6OnJlbW92ZUNhc2UpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmFwcGVuZENh
c2UpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6OmR1bXBNZXRhKToKKyAgICAgICAg
KEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0
Y2hWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphY2NlcHRz
KToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpudW1DYXNlVmFsdWVzKToKKyAgICAg
ICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpjYXNlVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6
U3dpdGNoVmFsdWU6OmNhc2VWYWx1ZXMpOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6
OmZhbGxUaHJvdWdoKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpzaXplKToKKyAg
ICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0
Y2hWYWx1ZTo6b3BlcmF0b3JbXSk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRl
cmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRv
cjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjppdGVyYXRvcjo6
b3BlcmF0b3IrKyk6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6aXRlcmF0b3I6Om9w
ZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6U3dpdGNoVmFsdWU6Oml0ZXJhdG9yOjpvcGVy
YXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpiZWdpbik6CisgICAgICAg
IChKU0M6OkIzOjpTd2l0Y2hWYWx1ZTo6ZW5kKToKKyAgICAgICAgKiBiMy9CM1R5cGUuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYjMvQjNUeXBl
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6aXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6
aXNGbG9hdCk6CisgICAgICAgIChKU0M6OkIzOjpwb2ludGVyVHlwZSk6CisgICAgICAgICogYjMv
QjNVcHNpbG9uVmFsdWUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlVwc2lsb25WYWx1
ZTo6flVwc2lsb25WYWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OmR1bXBN
ZXRhKToKKyAgICAgICAgKiBiMy9CM1Vwc2lsb25WYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OlVwc2lsb25WYWx1ZTo6YWNjZXB0cyk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9u
VmFsdWU6OnBoaSk6CisgICAgICAgIChKU0M6OkIzOjpVcHNpbG9uVmFsdWU6OlVwc2lsb25WYWx1
ZSk6CisgICAgICAgICogYjMvQjNVc2VDb3VudHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
QjM6OlVzZUNvdW50czo6VXNlQ291bnRzKToKKyAgICAgICAgKEpTQzo6QjM6OlVzZUNvdW50czo6
flVzZUNvdW50cyk6CisgICAgICAgICogYjMvQjNVc2VDb3VudHMuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpVc2VDb3VudHM6Om9wZXJhdG9yW10pOgorICAgICAgICAqIGIzL0IzVmFsaWRh
dGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OnZhbGlkYXRlKToKKyAgICAgICAgKiBi
My9CM1ZhbGlkYXRlLmg6IEFkZGVkLgorICAgICAgICAqIGIzL0IzVmFsdWUuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjp+VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFs
dWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OnJlcGxh
Y2VXaXRoTm9wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpkdW1wKToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjpkZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6bmVnQ29u
c3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFkZENvbnN0YW50KToKKyAgICAgICAg
KEpTQzo6QjM6OlZhbHVlOjpzdWJDb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
ZWZmZWN0cyk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6cGVyZm9ybVN1YnN0aXR1dGlvbik6
CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OnR5cGVGb3IpOgorICAgICAgICAqIGIzL0IzVmFsdWUuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkIzOjpEZWVwVmFsdWVEdW1wOjpEZWVwVmFsdWVEdW1wKToKKyAgICAgICAgKEpTQzo6
QjM6OkRlZXBWYWx1ZUR1bXA6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXApOgor
ICAgICAgICAqIGIzL0IzVmFsdWVJbmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmFzKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjppc0NvbnN0YW50KToKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6
YXNJbnQzMik6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6aGFzSW50NjQpOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OmFzSW50NjQpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6Omhhc0lu
dCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6YXNJbnQpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWU6OmlzSW50KToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjpoYXNJbnRQdHIpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzSW50UHRyKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjpoYXNEb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWU6OmFzRG91YmxlKToKKyAgICAg
ICAgKEpTQzo6QjM6OlZhbHVlOjpzdGFja21hcCk6CisgICAgICAgICogYjMvQjNWYWx1ZVJlcC5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmR1bXApOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM1ZhbHVlUmVwLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OlZhbHVlUmVwKToKKyAgICAgICAgKEpTQzo6QjM6
OlZhbHVlUmVwOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OnN0YWNrKToKKyAg
ICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjpzdGFja0FyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
QjM6OlZhbHVlUmVwOjpjb25zdGFudCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6Y29u
c3RhbnREb3VibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFsdWVSZXA6OmtpbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6VmFsdWVSZXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpCMzo6
VmFsdWVSZXA6Om9mZnNldEZyb21GUCk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZVJlcDo6b2Zm
c2V0RnJvbVNQKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlUmVwOjp2YWx1ZSk6CisgICAgICAg
IChKU0M6OkIzOjpWYWx1ZVJlcDo6ZG91YmxlVmFsdWUpOgorICAgICAgICAqIGIzL2FpcjogQWRk
ZWQuCisgICAgICAgICogYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6YWxsb2NhdGVTdGFjayk6CisgICAgICAgICogYjMvYWlyL0FpckFs
bG9jYXRlU3RhY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpckFyZy5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmR1bXApOgorICAgICAgICAqIGIzL2Fpci9B
aXJBcmcuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNVc2UpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzRGVmKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjp0eXBlRm9yQjNUeXBlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpBcmcpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmltbSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6aW1tNjQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFkZHIpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpBcmc6OnN0YWNrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
OjpjYWxsQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1ZhbGlkU2NhbGUpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmxvZ1NjYWxlKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVsQ29uZCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVzQ29uZCk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkFyZzo6c3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0
b3I9PSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IhPSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6a2luZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUbXApOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzSW1tKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjppc0ltbTY0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0FkZHIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmlzU3RhY2spOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpBcmc6OmlzQ2FsbEFyZyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNJbmRleCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNSZWxDb25kKToKKyAgICAgICAgKEpTQzo6
QjM6OkFpcjo6QXJnOjppc1Jlc0NvbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Omlz
U3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNBbGl2ZSk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6dG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp2
YWx1ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cG9pbnRlclZhbHVlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpiYXNlKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJn
OjpoYXNPZmZzZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6Om9mZnNldCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6c3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QXJnOjpzY2FsZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNHUFRtcCk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkFyZzo6aXNHUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNGUCk6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aGFzVHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6dHlwZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6aXNUeXBlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0dQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFy
Zzo6Z3ByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc0ZQUik6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6ZnByKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjppc1Jl
Zyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZzo6cmVnKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6QXJnOjpncFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjpmcFRt
cEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjp0bXBJbmRleCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkFyZzo6d2l0aE9mZnNldCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkFyZzo6Zm9yRWFjaFRtcEZhc3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmZvckVh
Y2hUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzVHJ1c3RlZEltbTMyKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1RydXN0ZWRJbW02NCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkFyZzo6YXNUcnVzdGVkSW1tUHRyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
QXJnOjphc0FkZHJlc3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzQmFzZUluZGV4
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QXJnOjphc1JlbGF0aW9uYWxDb25kaXRpb24pOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmc6OmFzUmVzdWx0Q29uZGl0aW9uKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6QXJnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkFyZzo6aGFzaCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkFyZ0hhc2g6
Omhhc2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpBcmdIYXNoOjplcXVhbCk6CisgICAgICAg
ICogYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6YWRkUHJlZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpC
YXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OnJlcGxhY2VQcmVkZWNlc3Nvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJh
c2ljQmxvY2s6OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpkZWVw
RHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OkJhc2ljQmxvY2spOgor
ICAgICAgICAqIGIzL2Fpci9BaXJCYXNpY0Jsb2NrLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpCYXNpY0Jsb2NrOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2lj
QmxvY2s6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpiZWdpbik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmVuZCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNC
bG9jazo6bGFzdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2ljQmxvY2s6OmFwcGVuZElu
c3QpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjphcHBlbmQpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpudW1TdWNjZXNzb3JzKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6c3VjY2Vzc29yKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6QmFzaWNCbG9jazo6c3VjY2Vzc29ycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkJhc2lj
QmxvY2s6OnN1Y2Nlc3NvckJsb2NrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9j
azo6c3VjY2Vzc29yQmxvY2tzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6
bnVtUHJlZGVjZXNzb3JzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6QmFzaWNCbG9jazo6cHJl
ZGVjZXNzb3IpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpCYXNpY0Jsb2NrOjpwcmVkZWNlc3Nv
cnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwQmFzaWNCbG9ja0R1bXA6OkRlZXBCYXNp
Y0Jsb2NrRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBCYXNpY0Jsb2NrRHVtcDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9h
aXIvQWlyQ0NhbGxTcGVjaWFsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkND
YWxsU3BlY2lhbDo6Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxT
cGVjaWFsOjp+Q0NhbGxTcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVj
aWFsOjpmb3JFYWNoQXJnKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjpp
c1ZhbGlkKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q0NhbGxTcGVjaWFsOjphZG1pdHNTdGFj
ayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lz
dGVycyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6Z2VuZXJhdGUpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVncyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNDYWxsU3BlY2lhbDo6ZHVtcEltcGwpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDQ2FsbFNwZWNpYWw6OmRlZXBEdW1wSW1wbCk6CisgICAgICAgICog
YjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyQ29k
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpDb2RlKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6fkNvZGUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpD
b2RlOjphZGRCbG9jayk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFN0YWNrU2xv
dCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OmFkZFNwZWNpYWwpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpDb2RlOjpjQ2FsbFNwZWNpYWwpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6
OmR1bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmaW5kRmlyc3RCbG9ja0luZGV4
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9ja0luZGV4KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6ZmluZE5leHRCbG9jayk6CisgICAgICAgICogYjMv
YWlyL0FpckNvZGUuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om5ld1Rt
cCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om51bVRtcHMpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpjYWxsQXJnQXJlYVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpDb2RlOjpyZXF1ZXN0Q2FsbEFyZ0FyZWFTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
Q29kZTo6ZnJhbWVTaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0RnJhbWVT
aXplKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6Y2FsbGVlU2F2ZVJlZ2lzdGVycyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNpemUpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Om9wZXJhdG9yW10p
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6aXRlcmF0b3IpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAg
KEpTQzo6QjM6OkFpcjo6Q29kZTo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkNvZGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjplbmQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6U3RhY2tTbG90
c0NvbGxlY3Rpb24pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29s
bGVjdGlvbjo6c2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHND
b2xsZWN0aW9uOjphdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHND
b2xsZWN0aW9uOjpvcGVyYXRvcltdKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3Rh
Y2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IqKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90
c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmJlZ2luKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OmVuZCk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnN0YWNrU2xvdHMpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlvbik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Om9wZXJhdG9y
W10pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0
ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxz
Q29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVy
YXRvcj09KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNw
ZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OnNw
ZWNpYWxzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c2V0TGFzdFBoYXNlTmFtZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6Omxhc3RQaGFzZU5hbWUpOgorICAgICAgICAq
IGIzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaDogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0Fp
ckdlbmVyYXRlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OmdlbmVyYXRlKToK
KyAgICAgICAgKiBiMy9haXIvQWlyR2VuZXJhdGUuaDogQWRkZWQuCisgICAgICAgICogYjMvYWly
L0FpckdlbmVyYXRlZC5jcHA6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJHZW5lcmF0aW9u
Q29udGV4dC5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6aGFuZGxlQ2FsbGVlU2F2ZXMpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oOiBBZGRlZC4KKyAgICAgICAg
KiBiMy9haXIvQWlySW5zZXJ0aW9uU2V0LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6Okluc2VydGlvblNldDo6ZXhlY3V0ZSk6CisgICAgICAgICogYjMvYWlyL0Fpckluc2VydGlv
blNldC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6SW5zZXJ0aW9uU2V0OjpJbnNl
cnRpb25TZXQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmNvZGUpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnNlcnRpb25TZXQ6OmFwcGVuZEluc2VydGlvbik6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5zZXJ0SW5zdCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6Okluc2VydGlvblNldDo6aW5zZXJ0KToKKyAgICAgICAgKiBiMy9haXIv
QWlySW5zdC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0OjpkdW1wKToK
KyAgICAgICAgKiBiMy9haXIvQWlySW5zdC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6SW5zdDo6SW5zdCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6Om9wY29kZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmZvckVhY2hUbXBGYXN0KToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6SW5zdDo6Zm9yRWFjaFRtcCk6CisgICAgICAgICogYjMvYWlyL0Fpckluc3RJ
bmxpbmVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpGb3JFYWNoPFRtcD46OmZv
ckVhY2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpGb3JFYWNoPEFyZz46OmZvckVhY2gpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpJbnN0Ojpmb3JFYWNoKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6SW5zdDo6aGFzU3BlY2lhbCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OmV4
dHJhQ2xvYmJlcmVkUmVncyk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okluc3Q6OnJlcG9ydFVz
ZWRSZWdpc3RlcnMpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjppc1NoaWZ0VmFsaWQpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjppc0xzaGlmdDMyVmFsaWQpOgorICAgICAgICAqIGIzL2Fpci9B
aXJMaXZlbmVzcy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6Okxp
dmVuZXNzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6TGl2ZW5lc3M6OmxpdmVBdEhlYWQpOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpMaXZlbmVzczo6bGl2ZUF0VGFpbCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OkxvY2FsQ2FsYyk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OmxpdmUpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpMaXZlbmVzczo6TG9jYWxDYWxjOjp0YWtlTGl2ZSk6CisgICAgICAgIChKU0M6OkIz
OjpBaXI6OkxpdmVuZXNzOjpMb2NhbENhbGM6OmV4ZWN1dGUpOgorICAgICAgICAqIGIzL2Fpci9B
aXJPcGNvZGUub3Bjb2RlczogQWRkZWQuCisgICAgICAgICogYjMvYWlyL0FpclBoYXNlU2NvcGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6UGhhc2VTY29wZTo6UGhhc2VTY29w
ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlBoYXNlU2NvcGU6On5QaGFzZVNjb3BlKToKKyAg
ICAgICAgKiBiMy9haXIvQWlyUGhhc2VTY29wZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIv
QWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpn
cHJzSW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6ZnByc0luUHJpb3Jp
dHlPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnJlZ3NJblByaW9yaXR5T3JkZXIpOgor
ICAgICAgICAqIGIzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5Lmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpSZWdpc3RlcnNJblByaW9yaXR5T3JkZXI8R1BSSW5mbz46OmluUHJpb3Jp
dHlPcmRlcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlJlZ2lzdGVyc0luUHJpb3JpdHlPcmRl
cjxGUFJJbmZvPjo6aW5Qcmlvcml0eU9yZGVyKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6cmVn
c0luUHJpb3JpdHlPcmRlcik6CisgICAgICAgICogYjMvYWlyL0FpclNwZWNpYWwuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3BlY2lhbDo6U3BlY2lhbCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OlNwZWNpYWw6On5TcGVjaWFsKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3BlY2lhbDo6bmFtZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlNwZWNpYWw6OmR1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpkZWVwRHVtcCk6CisgICAgICAgICogYjMv
YWlyL0FpclNwZWNpYWwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkRlZXBTcGVj
aWFsRHVtcDo6RGVlcFNwZWNpYWxEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6RGVlcFNw
ZWNpYWxEdW1wOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6ZGVlcER1bXApOgorICAg
ICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6c3BpbGxFdmVyeXRoaW5nKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3BpbGxF
dmVyeXRoaW5nLmg6IEFkZGVkLgorICAgICAgICAqIGIzL2Fpci9BaXJTdGFja1Nsb3QuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAp
OgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmR1bXApOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6
U3RhY2tTbG90OjpTdGFja1Nsb3QpOgorICAgICAgICAqIGIzL2Fpci9BaXJTdGFja1Nsb3QuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6Ynl0ZVNpemUpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmtpbmQpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTdGFja1Nsb3Q6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
OjphbGlnbm1lbnQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OnZhbHVlKToK
KyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpvZmZzZXRGcm9tRlApOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpEZWVwU3RhY2tTbG90RHVtcDo6RGVlcFN0YWNrU2xvdER1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpEZWVwU3RhY2tTbG90RHVtcDo6ZHVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OmRlZXBEdW1wKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wLmNwcDog
QWRkZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZHVtcCk6CisgICAgICAgICogYjMv
YWlyL0FpclRtcC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpUbXApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmdwVG1wRm9ySW5kZXgpOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpUbXA6OmZwVG1wRm9ySW5kZXgpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzR1ApOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRlApOgorICAgICAgICAoSlNDOjpCMzo6QWly
OjpUbXA6OmlzR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0ZQUik6CisgICAg
ICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNSZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpU
bXA6Omdwcik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6ZnByKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjpyZWcpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Omhhc1Rt
cEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpncFRtcEluZGV4KToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpmcFRtcEluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6VG1wOjp0bXBJbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNBbGl2ZSk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3I9PSk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcDo6b3BlcmF0b3IhPSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6Omhh
c2gpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQKToKKyAgICAgICAgKEpT
Qzo6QjM6OkFpcjo6VG1wOjplbmNvZGVGUCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
ZW5jb2RlR1BSKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjplbmNvZGVGUFIpOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmVuY29kZUdQVG1wKToKKyAgICAgICAgKEpTQzo6QjM6
OkFpcjo6VG1wOjplbmNvZGVGUFRtcCk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6aXNF
bmNvZGVkR1ApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEZQKToKKyAg
ICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjppc0VuY29kZWRHUFIpOgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpUbXA6OmlzRW5jb2RlZEZQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRtcDo6
aXNFbmNvZGVkR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmlzRW5jb2RlZEZQ
VG1wKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpkZWNvZGVHUFIpOgorICAgICAgICAo
SlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUZQUik6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlRt
cDo6ZGVjb2RlR1BUbXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpUbXA6OmRlY29kZUZQVG1w
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6
OkIzOjpBaXI6OlRtcEhhc2g6OmVxdWFsKToKKyAgICAgICAgKiBiMy9haXIvQWlyVG1wSW5saW5l
cy5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6VG1wOjpUbXApOgorICAgICAgICAq
IGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp2
YWxpZGF0ZSk6CisgICAgICAgICogYjMvYWlyL0FpclZhbGlkYXRlLmg6IEFkZGVkLgorICAgICAg
ICAqIGIzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiOiBBZGRlZC4KKyAgICAgICAgKiBiMy9nZW5l
cmF0ZV9wYXR0ZXJuX21hdGNoZXIucmI6IEFkZGVkLgorICAgICAgICAqIGIzL3Rlc3RiMy5jcHA6
IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6Y29tcGlsZUFuZFJ1bik6CisgICAgICAgIChKU0M6
OkIzOjp0ZXN0NDIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdExvYWQ0Mik6CisgICAgICAgIChK
U0M6OkIzOjp0ZXN0QXJnKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RBZGRBcmdzKToKKyAgICAg
ICAgKEpTQzo6QjM6OnRlc3RBZGRBcmdzMzIpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3Jl
KToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RUcnVuYyk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0
QWRkMSk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0U3RvcmVBZGRMb2FkKToKKyAgICAgICAgKEpT
Qzo6QjM6OnRlc3RTdG9yZUFkZEFuZExvYWQpOgorICAgICAgICAoSlNDOjpCMzo6dGVzdEFkZDFV
bmNvbW11dGVkKToKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RMb2FkT2Zmc2V0KToKKyAgICAgICAg
KEpTQzo6QjM6OnRlc3RMb2FkT2Zmc2V0Tm90Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6
dGVzdExvYWRPZmZzZXRVc2luZ0FkZCk6CisgICAgICAgIChKU0M6OkIzOjp0ZXN0TG9hZE9mZnNl
dFVzaW5nQWRkTm90Q29uc3RhbnQpOgorICAgICAgICAoSlNDOjpCMzo6cnVuKToKKyAgICAgICAg
KHJ1bik6CisgICAgICAgIChtYWluKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoK
KyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpzcGVjaWFsaXphdGlvbktpbmQpOgorICAgICAgICAq
IGppdC9SZWcuaDoKKyAgICAgICAgKEpTQzo6UmVnOjppbmRleCk6CisgICAgICAgIChKU0M6OlJl
Zzo6aXNTZXQpOgorICAgICAgICAoSlNDOjpSZWc6Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAo
SlNDOjpSZWc6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UmVnOjpB
bGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjppdGVyYXRvcik6CisgICAgICAgIChKU0M6OlJlZzo6
QWxsUmVnc0l0ZXJhYmxlOjppdGVyYXRvcjo6b3BlcmF0b3IqKToKKyAgICAgICAgKEpTQzo6UmVn
OjpBbGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKEpTQzo6
UmVnOjpBbGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAgKEpT
Qzo6UmVnOjpBbGxSZWdzSXRlcmFibGU6Oml0ZXJhdG9yOjpvcGVyYXRvciE9KToKKyAgICAgICAg
KEpTQzo6UmVnOjpBbGxSZWdzSXRlcmFibGU6OmJlZ2luKToKKyAgICAgICAgKEpTQzo6UmVnOjpB
bGxSZWdzSXRlcmFibGU6OmVuZCk6CisgICAgICAgIChKU0M6OlJlZzo6YWxsKToKKyAgICAgICAg
KEpTQzo6UmVnOjppbnZhbGlkKToKKyAgICAgICAgKEpTQzo6UmVnOjpvcGVyYXRvciEpOiBEZWxl
dGVkLgorICAgICAgICAqIGppdC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5jcHA6CisgICAgICAgIChK
U0M6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0OjpSZWdpc3RlckF0T2Zmc2V0TGlzdCk6CisgICAgICAg
ICogaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyQXRP
ZmZzZXRMaXN0OjpjbGVhcik6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyQXRPZmZzZXRMaXN0Ojpz
aXplKToKKyAgICAgICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmJlZ2luKToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJBdE9mZnNldExpc3Q6OmVuZCk6CisgICAgICAgICogaml0L1JlZ2lz
dGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6UmVnaXN0ZXJTZXQ6Omhhc2gpOgorICAgICAgICAoSlNDOjpSZWdpc3RlclNldDo6
Zm9yRWFjaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0OjpzZXRBbnkpOgorCiAyMDE1LTEw
LTI4ICBCcmlhbiBCdXJnICA8YmJ1cmdAYXBwbGUuY29tPgogCiAgICAgICAgIEJ1aWx0aW5zIGdl
bmVyYXRvciBzaG91bGQgZW1pdCBFTkFCTEUoRkVBVFVSRSkgZ3VhcmRzIGJhc2VkIG9uIEBjb25k
aXRpb25hbCBhbm5vdGF0aW9uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
CShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50
eHQJKHdvcmtpbmcgY29weSkKQEAgLTY2LDYgKzY2LDYxIEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyUHJpbnRlci5jcHAKICAgICBhc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZDb21tb24uY3BwCiAKKyAgICBiMy9haXIvQWlyQWxsb2Nh
dGVTdGFjay5jcHAKKyAgICBiMy9haXIvQWlyQXJnLmNwcAorICAgIGIzL2Fpci9BaXJCYXNpY0Js
b2NrLmNwcAorICAgIGIzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCisgICAgYjMvYWlyL0FpckNv
ZGUuY3BwCisgICAgYjMvYWlyL0FpckdlbmVyYXRlLmNwcAorICAgIGIzL2Fpci9BaXJHZW5lcmF0
ZWQuY3BwCisgICAgYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAorICAgIGIzL2Fpci9B
aXJJbnNlcnRpb25TZXQuY3BwCisgICAgYjMvYWlyL0Fpckluc3QuY3BwCisgICAgYjMvYWlyL0Fp
clBoYXNlU2NvcGUuY3BwCisgICAgYjMvYWlyL0FpclJlZ2lzdGVyUHJpb3JpdHkuY3BwCisgICAg
YjMvYWlyL0FpclNwZWNpYWwuY3BwCisgICAgYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAK
KyAgICBiMy9haXIvQWlyU3RhY2tTbG90LmNwcAorICAgIGIzL2Fpci9BaXJUbXAuY3BwCisgICAg
YjMvYWlyL0FpclZhbGlkYXRlLmNwcAorCisgICAgYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcAor
ICAgIGIzL0IzQmFzaWNCbG9jay5jcHAKKyAgICBiMy9CM0NoZWNrU3BlY2lhbC5jcHAKKyAgICBi
My9CM0NoZWNrVmFsdWUuY3BwCisgICAgYjMvQjNDb21tb24uY3BwCisgICAgYjMvQjNDb21tdXRh
dGl2aXR5LmNwcAorICAgIGIzL0IzQ29uc3QzMlZhbHVlLmNwcAorICAgIGIzL0IzQ29uc3Q2NFZh
bHVlLmNwcAorICAgIGIzL0IzQ29uc3REb3VibGVWYWx1ZS5jcHAKKyAgICBiMy9CM0NvbnRyb2xW
YWx1ZS5jcHAKKyAgICBiMy9CM0VmZmVjdHMuY3BwCisgICAgYjMvQjNGcmVxdWVuY3lDbGFzcy5j
cHAKKyAgICBiMy9CM0dlbmVyYXRlLmNwcAorICAgIGIzL0IzSGVhcFJhbmdlLmNwcAorICAgIGIz
L0IzSW5zZXJ0aW9uU2V0LmNwcAorICAgIGIzL0IzTG93ZXJUb0Fpci5jcHAKKyAgICBiMy9CM01l
bW9yeVZhbHVlLmNwcAorICAgIGIzL0IzT3Bjb2RlLmNwcAorICAgIGIzL0IzT3JpZ2luLmNwcAor
ICAgIGIzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCisgICAgYjMvQjNQYXRjaHBvaW50VmFsdWUu
Y3BwCisgICAgYjMvQjNQaGFzZVNjb3BlLmNwcAorICAgIGIzL0IzUHJvY2VkdXJlLmNwcAorICAg
IGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwCisgICAgYjMvQjNTdGFja21hcC5jcHAKKyAgICBiMy9C
M1N0YWNrbWFwU3BlY2lhbC5jcHAKKyAgICBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwCisgICAgYjMv
QjNTdGFja1Nsb3RWYWx1ZS5jcHAKKyAgICBiMy9CM1N3aXRjaENhc2UuY3BwCisgICAgYjMvQjNT
d2l0Y2hWYWx1ZS5jcHAKKyAgICBiMy9CM1R5cGUuY3BwCisgICAgYjMvQjNVcHNpbG9uVmFsdWUu
Y3BwCisgICAgYjMvQjNVc2VDb3VudHMuY3BwCisgICAgYjMvQjNWYWxpZGF0ZS5jcHAKKyAgICBi
My9CM1ZhbHVlLmNwcAorICAgIGIzL0IzVmFsdWVSZXAuY3BwCisKICAgICBiaW5kaW5ncy9TY3Jp
cHRGdW5jdGlvbkNhbGwuY3BwCiAgICAgYmluZGluZ3MvU2NyaXB0T2JqZWN0LmNwcAogICAgIGJp
bmRpbmdzL1NjcmlwdFZhbHVlLmNwcApAQCAtMTI3NCw0ICsxMzI5LDQgQEAgZW5kaWYgKCkKICMg
Rm9yY2Ugc3RhZ2luZyBvZiBzaGFyZWQgc2NyaXB0cywgZXZlbiBpZiB0aGV5IGFyZW4ndCBkaXJl
Y3RseSB1c2VkIHRvIGJ1aWxkIEphdmFTY3JpcHRDb3JlLgogCiBhZGRfY3VzdG9tX3RhcmdldChz
dGFnZVNoYXJlZFNjcmlwdHMgREVQRU5EUyAke0phdmFTY3JpcHRDb3JlX1NDUklQVFN9KQotYWRk
X2RlcGVuZGVuY2llcyhKYXZhU2NyaXB0Q29yZSBzdGFnZVNoYXJlZFNjcmlwdHMpClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQorYWRkX2RlcGVuZGVuY2llcyhKYXZhU2NyaXB0Q29yZSBzdGFn
ZVNoYXJlZFNjcmlwdHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJj
ZXMubWFrZQkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2
ZWRTb3VyY2VzLm1ha2UJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1LDcgQEAgVlBBVEggPSBc
CiAKIFBZVEhPTiA9IHB5dGhvbgogUEVSTCA9IHBlcmwKK1JVQlkgPSBydWJ5CiAKIEphdmFTY3Jp
cHRDb3JlX1NDUklQVFNfRElSID0gJChKYXZhU2NyaXB0Q29yZSkvU2NyaXB0cwogCkBAIC01OSw2
ICs2MCw5IEBAIGFsbCA6IFwKICAgICBMZXhlci5sdXQuaCBcCiAgICAgS2V5d29yZExvb2t1cC5o
IFwKICAgICBSZWdFeHBKaXRUYWJsZXMuaCBcCisgICAgQjNMb3dlcmluZ01hdGNoZXIuaCBcCisg
ICAgQjNBZGRyZXNzTWF0Y2hlci5oIFwKKyAgICBBaXJPcGNvZGUuaCBcCiAjCiAKICMgSmF2YVNj
cmlwdCBidWlsdGlucy4KQEAgLTI2Miw2ICsyNjYsMTQgQEAgSU5QVVRfR0VORVJBVE9SX1NQRUNJ
RklDQVRJT05TID0gXAogSlNSZXBsYXlJbnB1dHMuaCA6ICQoSU5QVVRfR0VORVJBVE9SX1NQRUNJ
RklDQVRJT05TKSAkKElOUFVUX0dFTkVSQVRPUl9TQ1JJUFRTKQogCSQoUFlUSE9OKSAkKEphdmFT
Y3JpcHRDb3JlKS9yZXBsYXkvc2NyaXB0cy9Db2RlR2VuZXJhdG9yUmVwbGF5SW5wdXRzLnB5IC0t
b3V0cHV0RGlyIC4gLS1mcmFtZXdvcmsgSmF2YVNjcmlwdENvcmUgJChJTlBVVF9HRU5FUkFUT1Jf
U1BFQ0lGSUNBVElPTlMpCiAKK0IzTG93ZXJpbmdNYXRjaGVyLmg6ICQoSmF2YVNjcmlwdENvcmUp
L2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFTY3JpcHRDb3JlKS9iMy9CM0xv
d2VyaW5nTWF0Y2hlci5wYXR0ZXJucworCSQoUlVCWSkgJF4gCitCM0FkZHJlc3NNYXRjaGVyLmg6
ICQoSmF2YVNjcmlwdENvcmUpL2IzL2dlbmVyYXRlX3BhdHRlcm5fbWF0Y2hlci5yYiAkKEphdmFT
Y3JpcHRDb3JlKS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCisJJChSVUJZKSAkXgorCitB
aXJPcGNvZGUuaDogJChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIg
JChKYXZhU2NyaXB0Q29yZSkvYjMvYWlyL0Fpck9wY29kZS5vcGNvZGVzCisJJChSVUJZKSAkXgor
CiAjIER5bmFtaWNhbGx5LWRlZmluZWQgdGFyZ2V0cyBhcmUgbGlzdGVkIGJlbG93LiBTdGF0aWMg
dGFyZ2V0cyBiZWxvbmcgdXAgdG9wLgogCiBhbGwgOiBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAg
LTI1LDYgKzI1LDcgQEAKIAkJCWJ1aWxkUGhhc2VzID0gKAogCQkJKTsKIAkJCWRlcGVuZGVuY2ll
cyA9ICgKKwkJCQkwRkVDODVCMTFCREI1RDhGMDA4MEZGNzQgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKIAkJCQk1RDZCMkE0RjE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKIAkJCQk1RDZCMkE1MTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKIAkJCQk1RDZCMkE1NTE1MkI5RTIzMDA1MjMxREUgLyogUEJYVGFyZ2V0RGVwZW5kZW5j
eSAqLywKQEAgLTY4NSw2ICs2ODYsMTMxIEBACiAJCTBGRUEwQTMzMTcwRDQwQkYwMEJCNzIyQyAv
KiBERkdKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUEwQTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLzsgfTsK
IAkJMEZFQTBBMzQxNzBENDBCRjAwQkI3MjJDIC8qIERGR0pJVENvZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUEwQTMwMTcwRDQwQkYwMEJCNzIy
QyAvKiBERkdKSVRDb2RlLmggKi87IH07CiAJCTBGRUIzRUNGMTYyMzdGNkMwMEFCNjdBRCAvKiBN
YWNyb0Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICov
OyB9OworCQkwRkVDODRGRTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI0
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0FyZ3VtZW50UmVnVmFsdWUuY3BwICovOyB9OworCQkwRkVD
ODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRCNTFCREFDREFDMDA4MEZG
NzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi87IH07CisJCTBGRUM4NTAwMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jhc2ljQmxvY2suY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5j
cHAgKi87IH07CisJCTBGRUM4NTAxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI3MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2suaCAqLzsgfTsKKwkJMEZFQzg1MDIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEI4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jh
c2ljQmxvY2tJbmxpbmVzLmggKi87IH07CisJCTBGRUM4NTAzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZFQzg0QjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmgg
Ki87IH07CisJCTBGRUM4NTA0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLzsgfTsKKwkJMEZFQzg1MDUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5jcHAgKi87IH07CisJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0No
ZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi87IH07CisJ
CTBGRUM4NTA3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QkQxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTA4MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NoZWNrVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NEJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrVmFsdWUuaCAqLzsg
fTsKKwkJMEZFQzg1MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEJGMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0NvbW1vbi5jcHAgKi87IH07CisJCTBGRUM4NTBBMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmggKi87IH07CisJCTBGRUM4
NTBCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHkuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi87IH07CisJCTBGRUM4NTBDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW11dGF0aXZpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW11dGF0aXZpdHku
aCAqLzsgfTsKKwkJMEZFQzg1MEQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEMz
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTBF
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q29uc3QzMlZhbHVlLmggKi87IH07CisJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnN0NjRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDNTFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuY3BwICovOyB9
OworCQkwRkVDODUxMDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovOyB9OworCQkwRkVDODUxMTFCREFDREFDMDA4
MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEM3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0
RG91YmxlVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxMjFCREFDREFDMDA4MEZGNzQgLyogQjND
b25zdERvdWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmgg
Ki87IH07CisJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDOTFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuY3BwICovOyB9OworCQkwRkVDODUxNDFC
REFDREFDMDA4MEZGNzQgLyogQjNDb250cm9sVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Nv
bnRyb2xWYWx1ZS5oICovOyB9OworCQkwRkVDODUxNTFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVx
dWVuY3lDbGFzcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRDQjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5jcHAgKi87
IH07CisJCTBGRUM4NTE2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDQzFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovOyB9OworCQkwRkVDODUxNzFCREFD
REFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NENEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Zy
ZXF1ZW50ZWRCbG9jay5oICovOyB9OworCQkwRkVDODUxODFCREFDREFDMDA4MEZGNzQgLyogQjNH
ZW5lcmF0ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRDRTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBG
RUM4NTE5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRDRjFCREFDREFDMDA4MEZGNzQgLyog
QjNHZW5lcmF0ZS5oICovOyB9OworCQkwRkVDODUxQTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5l
cmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODREMDFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmljRnJlcXVlbnRl
ZEJsb2NrLmggKi87IH07CisJCTBGRUM4NTFCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0luZGV4TWFw
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRE
MTFCREFDREFDMDA4MEZGNzQgLyogQjNJbmRleE1hcC5oICovOyB9OworCQkwRkVDODUxQzFCREFD
REFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhTZXQu
aCAqLzsgfTsKKwkJMEZFQzg1MUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREMzFC
REFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmNwcCAqLzsgfTsKKwkJMEZFQzg1MUUxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzTG93ZXJUb0Fpci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RDQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTG93ZXJU
b0Fpci5oICovOyB9OworCQkwRkVDODUxRjFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRENTFCREFDREFDMDA4MEZGNzQgLyogQjNNZW1vcnlWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRENjFCREFDREFDMDA4MEZGNzQgLyog
QjNNZW1vcnlWYWx1ZS5oICovOyB9OworCQkwRkVDODUyMTFCREFDREFDMDA4MEZGNzQgLyogQjNP
cGNvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLzsgfTsKKwkJMEZFQzg1
MjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNv
ZGUuaCAqLzsgfTsKKwkJMEZFQzg1MjMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEQ5MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi87IH07CisJCTBGRUM4NTI0MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM09yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0REExQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3JpZ2luLmggKi87IH07
CisJCTBGRUM4NTI1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1
MjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNpYWwuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTI3MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRj
aHBvaW50VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NERFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5oICovOyB9
OworCQkwRkVDODUyOTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NERGMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3BwICovOyB9OworCQkwRkVDODUyQTFCREFDREFDMDA4
MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRFMDFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmgg
Ki87IH07CisJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFMTFCREFD
REFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuY3BwICovOyB9OworCQkwRkVDODUyQzFCREFDREFD
MDA4MEZGNzQgLyogQjNQcm9jZWR1cmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5o
ICovOyB9OworCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVz
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRF
MzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi87IH07CisJCTBGRUM4
NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwLmNwcCAqLzsgfTsKKwkJMEZFQzg1MkYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2ttYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEU1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggKi87IH07CisJCTBGRUM4NTMw
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFNjFCREFDREFDMDA4MEZGNzQg
LyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovOyB9OworCQkwRkVDODUzMTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oICovOyB9OworCQkwRkVDODUzMjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RL
aW5kLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovOyB9OworCQkw
RkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFOTFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi87IH07CisJCTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZh
bHVlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi87IH07CisJCTBG
RUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsKKwkJMEZFQzg1MzcxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0
Y2hDYXNlLmNwcCAqLzsgfTsKKwkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNo
Q2FzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovOyB9OworCQkwRkVDODUz
OTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFRjFCREFDREFDMDA4MEZGNzQgLyog
QjNTd2l0Y2hWYWx1ZS5jcHAgKi87IH07CisJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRGMDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1ZS5oICovOyB9Owor
CQkwRkVDODUzQjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEYxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1R5cGUuY3BwICovOyB9OworCQkwRkVDODUzQzFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRG
MjFCREFDREFDMDA4MEZGNzQgLyogQjNUeXBlLmggKi87IH07CisJCTBGRUM4NTNEMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuY3BwICovOyB9OworCQkwRkVDODUzRTFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NEY0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5oICovOyB9OworCQkwRkVD
ODUzRjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXNlQ291bnRzLmNwcCAqLzsgfTsKKwkJMEZFQzg1NDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
VXNlQ291bnRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCAqLzsgfTsKKwkJMEZF
Qzg1NDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVmFsaWRhdGUuY3BwICovOyB9OworCQkwRkVDODU0MjFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWxpZGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLzsgfTsKKwkJMEZFQzg1
NDMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RjkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFs
dWUuY3BwICovOyB9OworCQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLzsgfTsKKwkJMEZFQzg1NDUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzVmFsdWVJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODRGQjFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMu
aCAqLzsgfTsKKwkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RkMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovOyB9OworCQkwRkVDODU0NzFCREFDREFD
MDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAq
LzsgfTsKKwkJMEZFQzg1NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDgx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwICovOyB9OworCQkwRkVDODU2
RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFsbG9jYXRlU3RhY2suaCAqLzsgfTsKKwkJMEZFQzg1NkYxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpckFyZy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVDODU0QTFCREFDREM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLzsgfTsKKwkJMEZFQzg1
NzAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NEIxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5o
ICovOyB9OworCQkwRkVDODU3MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0QzFC
REFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5jcHAgKi87IH07CisJCTBGRUM4NTcyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFz
aWNCbG9jay5oICovOyB9OworCQkwRkVDODU3MzFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxT
cGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGRUM4NTRFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDQ2FsbFNwZWNpYWwuY3BwICovOyB9Owor
CQkwRkVDODU3NDFCREFDREM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU0RjFCREFDREM3MDA4
MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggKi87IH07CisJCTBGRUM4NTc1MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAqLzsgfTsK
KwkJMEZFQzg1NzYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNvZGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJDb2RlLmggKi87IH07CisJCTBGRUM4NTc3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVx
dWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLzsg
fTsKKwkJMEZFQzg1NzgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTUzMUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi87IH07CisJCTBGRUM4NTc5MUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJHZW5lcmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NTQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggKi87
IH07CisJCTBGRUM4NTdBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NTUx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRpb25Db250ZXh0LmggKi87IH07CisJCTBGRUM4
NTdCMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1NjFCREFDREM3MDA4
MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwICovOyB9OworCQkwRkVDODU3QzFCREFD
REM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTU3MUJEQUNEQzcwMDgwRkY3NCAvKiBB
aXJIYW5kbGVDYWxsZWVTYXZlcy5oICovOyB9OworCQkwRkVDODU3RDFCREFDREM3MDA4MEZGNzQg
LyogQWlySW5zZXJ0aW9uU2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NTU4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQu
Y3BwICovOyB9OworCQkwRkVDODU3RTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU1
OTFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zZXJ0aW9uU2V0LmggKi87IH07CisJCTBGRUM4NTdG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0
LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODAxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJJbnN0LmggKi87IH07CisJCTBGRUM4NTgxMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnN0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg1NUMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmgg
Ki87IH07CisJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJMaXZlbmVzcy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NUQxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpckxpdmVuZXNzLmggKi87IH07CisJCTBGRUM4NTgzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJQaGFzZVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3Bl
LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTVG
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQaGFzZVNjb3BlLmggKi87IH07CisJCTBGRUM4NTg1MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJSZWdpc3RlclByaW9yaXR5LmNwcCAqLzsgfTsKKwkJMEZFQzg1ODYxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclJlZ2lzdGVyUHJpb3JpdHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmggKi87IH07CisJCTBGRUM4NTg3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVj
aWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
RUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLzsgfTsKKwkJMEZFQzg1
ODgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwZWNpYWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTYzMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
cGVjaWFsLmggKi87IH07CisJCTBGRUM4NTg5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2
ZXJ5dGhpbmcuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1NjQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5jcHAgKi87
IH07CisJCTBGRUM4NThBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY1MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhpbmcuaCAqLzsgfTsKKwkJMEZFQzg1OEIx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWly
U3RhY2tTbG90LmNwcCAqLzsgfTsKKwkJMEZFQzg1OEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0
YWNrU2xvdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICovOyB9OworCQkwRkVD
ODU4RDFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJU
bXAuY3BwICovOyB9OworCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU2OTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi87IH07CisJCTBGRUM4NThGMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJUbXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVDODU2QTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICov
OyB9OworCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1NkIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLzsgfTsKKwkJMEZFQzg1OTExQkRBQ0RDNzAw
ODBGRjc0IC8qIEFpclZhbGlkYXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkVDODU2QzFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAq
LzsgfTsKKwkJMEZFQzg1OTMxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODU5MjFCREIx
RTEwMDA4MEZGNzQgLyogQWlyR2VuZXJhdGVkLmNwcCAqLzsgfTsKKwkJMEZFQzg1QTMxQkRCNUNG
MTAwODBGRjc0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNTFGMEVCNjEwNUM4NkM2QjAwRTZERjFCIC8qIEZv
dW5kYXRpb24uZnJhbWV3b3JrICovOyB9OworCQkwRkVDODVBNDFCREI1Q0YxMDA4MEZGNzQgLyog
SmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrIGluIEZyYW1ld29ya3MgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gOTMyRjVCRDkwODIyQTFDNzAwNzM2OTc1IC8qIEphdmFTY3JpcHRD
b3JlLmZyYW1ld29yayAqLzsgfTsKKwkJMEZFQzg1QUYxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3Ri
My5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODVBRTFCREI1RDVFMDA4MEZGNzQgLyogdGVzdGIzLmNwcCAqLzsgfTsKKwkJMEZFQzg1QjMxQkRF
RDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29u
c3RQdHJWYWx1ZS5oICovOyB9OworCQkwRkVDODVCOTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNl
cnRpb25TZXQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZFQzg1QjQxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmNwcCAqLzsgfTsK
KwkJMEZFQzg1QkExQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCNTFCRTE0NjJGMDA4
MEZGNzQgLyogQjNJbnNlcnRpb25TZXQuaCAqLzsgfTsKKwkJMEZFQzg1QkIxQkUxNDYyRjAwODBG
Rjc0IC8qIEIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg1QjYxQkUxNDYyRjAwODBGRjc0IC8qIEIzSW5zZXJ0
aW9uU2V0SW5saW5lcy5oICovOyB9OworCQkwRkVDODVCQzFCRTE0NjJGMDA4MEZGNzQgLyogQjNS
ZWR1Y2VTdHJlbmd0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkVDODVCNzFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAg
Ki87IH07CisJCTBGRUM4NUJEMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVuZ3RoLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCODFC
RTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oICovOyB9OworCQkwRkVDODVDMTFC
RTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCRTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3Rz
LmggKi87IH07CisJCTBGRUM4NUMyMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODVCRjFC
RTE2N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovOyB9OworCQkwRkVDODVDMzFCRTE2
N0EwMDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5n
ZS5oICovOyB9OworCQkwRkVDODVDNTFCRTE2RjVBMDA4MEZGNzQgLyogQjNFZmZlY3RzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NUM0MUJF
MTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwICovOyB9OwogCQkwRkVENjdCOTFCMjYyNTZE
MDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUQ2N0I3MUIyNjI1NkQwMDY2Q0UxNSAv
KiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuY3BwICovOyB9OwogCQkwRkVENjdCQTFCMjYyNTZE
MDA2NkNFMTUgLyogREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVENjdCODFCMjYyNTZEMDA2NkNFMTUgLyog
REZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmggKi87IH07CiAJCTBGRUU5ODQxMUE4ODY1QjcwMDc1
NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEZFRTk4NDAxQTg4NjVCNjAwNzU0RTkzIC8qIFNldHVwVmFyYXJn
c0ZyYW1lLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
QEAgLTE4MzksNiArMTk2NSwxMyBAQAogCQkJcmVtb3RlR2xvYmFsSURTdHJpbmcgPSAwRkNFRkFC
NTE4MDVENjE2MDA0NzJDRTQ7CiAJCQlyZW1vdGVJbmZvID0gbGx2bUZvckpTQzsKIAkJfTsKKwkJ
MEZFQzg1QjAxQkRCNUQ4RjAwODBGRjc0IC8qIFBCWENvbnRhaW5lckl0ZW1Qcm94eSAqLyA9IHsK
KwkJCWlzYSA9IFBCWENvbnRhaW5lckl0ZW1Qcm94eTsKKwkJCWNvbnRhaW5lclBvcnRhbCA9IDA4
NjdENjkwRkU4NDAyOEZDMDJBQUMwNyAvKiBQcm9qZWN0IG9iamVjdCAqLzsKKwkJCXByb3h5VHlw
ZSA9IDE7CisJCQlyZW1vdGVHbG9iYWxJRFN0cmluZyA9IDBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3
NDsKKwkJCXJlbW90ZUluZm8gPSB0ZXN0YjM7CisJCX07CiAJCTBGRjkyMkQyMTRGNDZCMkYwMDQx
QTI0RSAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi8gPSB7CiAJCQlpc2EgPSBQQlhDb250YWlu
ZXJJdGVtUHJveHk7CiAJCQljb250YWluZXJQb3J0YWwgPSAwODY3RDY5MEZFODQwMjhGQzAyQUFD
MDcgLyogUHJvamVjdCBvYmplY3QgKi87CkBAIC0yNTgwLDYgKzI3MTMsMTMwIEBACiAJCTBGRUEw
QTJGMTcwRDQwQkYwMEJCNzIyQyAvKiBERkdKSVRDb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0pJVENvZGUuY3BwOyBwYXRoID0gZGZnL0RGR0pJVENvZGUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVBMEEzMDE3MEQ0MEJGMDBCQjcy
MkMgLyogREZHSklUQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdK
SVRDb2RlLmg7IHBhdGggPSBkZmcvREZHSklUQ29kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRkVCM0VDRTE2MjM3RjY3MDBBQjY3QUQgLyogTWFjcm9Bc3NlbWJsZXIuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWFjcm9Bc3NlbWJsZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNDFCREFDREFDMDA4MEZGNzQgLyog
QjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0FyZ3VtZW50UmVnVmFsdWUu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRCNTFCREFDREFDMDA4MEZG
NzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFt
ZSA9IEIzQXJndW1lbnRSZWdWYWx1ZS5oOyBwYXRoID0gYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0Jhc2ljQmxvY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNCYXNpY0Jsb2NrLmNwcDsgcGF0aCA9IGIzL0IzQmFzaWNCbG9jay5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEI3MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxv
Y2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrLmg7IHBh
dGggPSBiMy9CM0Jhc2ljQmxvY2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0QjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja0lubGluZXMuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBwYXRoID0gYjMv
QjNCYXNpY0Jsb2NrSW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVD
ODRCOTFCREFDREFDMDA4MEZGNzQgLyogQjNCYXNpY0Jsb2NrVXRpbHMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gQjNCYXNpY0Jsb2NrVXRpbHMuaDsgcGF0aCA9IGIzL0IzQmFz
aWNCbG9ja1V0aWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0Jsb2NrV29ya2xpc3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBuYW1lID0gQjNCbG9ja1dvcmtsaXN0Lmg7IHBhdGggPSBiMy9CM0Jsb2NrV29ya2xpc3Qu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ2hlY2tTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IEIzQ2hlY2tTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzQ2hlY2tTcGVjaWFsLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
Q2hlY2tTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tT
cGVjaWFsLmg7IHBhdGggPSBiMy9CM0NoZWNrU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRCRDFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5jcHA7IHBh
dGggPSBiMy9CM0NoZWNrVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRCRTFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEIzQ2hlY2tWYWx1ZS5oOyBwYXRoID0gYjMvQjNDaGVja1ZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0NvbW1vbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBC
M0NvbW1vbi5jcHA7IHBhdGggPSBiMy9CM0NvbW1vbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NEMwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbW1vbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0NvbW1vbi5oOyBwYXRoID0gYjMvQjNDb21tb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0NvbW11dGF0aXZpdHkuY3BwOyBwYXRoID0gYjMvQjNDb21tdXRhdGl2aXR5LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29tbXV0YXRpdml0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0Nv
bW11dGF0aXZpdHkuaDsgcGF0aCA9IGIzL0IzQ29tbXV0YXRpdml0eS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkwRkVDODRDMzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNDb25zdDMyVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdDMyVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODRDNDFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDMyVmFsdWUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb25zdDMyVmFsdWUuaDsgcGF0aCA9
IGIzL0IzQ29uc3QzMlZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEM1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM0Nv
bnN0NjRWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEM2MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBCM0NvbnN0NjRWYWx1ZS5oOyBwYXRoID0gYjMvQjNDb25zdDY0VmFsdWUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzQ29uc3REb3VibGVWYWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb25zdERvdWJsZVZhbHVl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QzgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM0NvbnN0RG91YmxlVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3REb3VibGVWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDOTFCREFDREFDMDA4MEZGNzQg
LyogQjNDb250cm9sVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNDb250cm9sVmFsdWUuY3BwOyBwYXRoID0gYjMvQjNDb250cm9sVmFsdWUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDQTFCREFDREFDMDA4MEZGNzQgLyogQjND
b250cm9sVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNDb250cm9s
VmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29udHJvbFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NENCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3Mu
Y3BwOyBwYXRoID0gYjMvQjNGcmVxdWVuY3lDbGFzcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NENDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbmN5Q2xhc3MuaDsgcGF0
aCA9IGIzL0IzRnJlcXVlbmN5Q2xhc3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEZFQzg0Q0QxQkRBQ0RBQzAwODBGRjc0IC8qIEIzRnJlcXVlbnRlZEJsb2NrLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9C
M0ZyZXF1ZW50ZWRCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRD
RTFCREFDREFDMDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBCM0dlbmVyYXRlLmNwcDsgcGF0aCA9IGIzL0IzR2VuZXJhdGUuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRDRjFCREFDREFDMDA4MEZGNzQg
LyogQjNHZW5lcmF0ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0dlbmVy
YXRlLmg7IHBhdGggPSBiMy9CM0dlbmVyYXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2su
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNHZW5lcmljRnJlcXVlbnRlZEJs
b2NrLmg7IHBhdGggPSBiMy9CM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhNYXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbmRleE1hcC5oOyBwYXRoID0g
YjMvQjNJbmRleE1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREMjFC
REFDREFDMDA4MEZGNzQgLyogQjNJbmRleFNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM0luZGV4U2V0Lmg7IHBhdGggPSBiMy9CM0luZGV4U2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEQzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9B
aXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNMb3dlclRvQWly
LmNwcDsgcGF0aCA9IGIzL0IzTG93ZXJUb0Fpci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NEQ0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNMb3dlclRvQWlyLmg7IHBhdGggPSBiMy9CM0xv
d2VyVG9BaXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDUxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQjNNZW1vcnlWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM01lbW9yeVZhbHVlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RDYxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzTWVtb3J5VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNN
ZW1vcnlWYWx1ZS5oOyBwYXRoID0gYjMvQjNNZW1vcnlWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRENzFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNPcGNvZGUuY3BwOyBwYXRoID0g
YjMvQjNPcGNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODREODFC
REFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNPcGNvZGUuaDsgcGF0aCA9IGIzL0IzT3Bjb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NEQ5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM09yaWdpbi5jcHA7IHBhdGggPSBi
My9CM09yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NERBMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM09yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM09yaWdpbi5oOyBwYXRoID0gYjMvQjNPcmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg0REIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hwb2ludFNwZWNp
YWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRjaHBvaW50
U3BlY2lhbC5jcHA7IHBhdGggPSBiMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0REMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUGF0Y2hw
b2ludFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBv
aW50U3BlY2lhbC5oOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERDFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBv
aW50VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQYXRj
aHBvaW50VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRERTFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRj
aHBvaW50VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQYXRjaHBv
aW50VmFsdWUuaDsgcGF0aCA9IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGRUM4NERGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNQaGFzZVNjb3BlLmNw
cDsgcGF0aCA9IGIzL0IzUGhhc2VTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEUwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQaGFzZVNjb3BlLmg7IHBhdGggPSBiMy9CM1BoYXNl
U2NvcGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTExQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzUHJvY2VkdXJlLmNwcDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJv
Y2VkdXJlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlLmg7
IHBhdGggPSBiMy9CM1Byb2NlZHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRFMzFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzUHJvY2VkdXJlSW5saW5lcy5oOyBwYXRoID0gYjMv
QjNQcm9jZWR1cmVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXAuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEU1MUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrbWFwLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3Rh
Y2ttYXAuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXAuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmNw
cDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmg7IHBh
dGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5oOyBwYXRoID0gYjMvQjNTdGFj
a1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNTdGFja1Ns
b3RWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEVCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzU3RhY2tTbG90VmFsdWUuaDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90VmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0IzU3VjY2Vzc29yQ29sbGVj
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRDFCREFDREFDMDA4
MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEIzU3dpdGNoQ2FzZS5jcHA7IHBhdGggPSBiMy9CM1N3aXRjaENhc2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNT
d2l0Y2hDYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoQ2Fz
ZS5oOyBwYXRoID0gYjMvQjNTd2l0Y2hDYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NEVGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuY3BwOyBwYXRoID0g
YjMvQjNTd2l0Y2hWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4
NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IEIzU3dpdGNoVmFsdWUuaDsgcGF0aCA9IGIzL0IzU3dpdGNoVmFsdWUu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjExQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVHlwZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1R5
cGUuY3BwOyBwYXRoID0gYjMvQjNUeXBlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RjIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBCM1R5cGUuaDsgcGF0aCA9IGIzL0IzVHlwZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGMzFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9u
VmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNVcHNpbG9u
VmFsdWUuY3BwOyBwYXRoID0gYjMvQjNVcHNpbG9uVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODRGNDFCREFDREFDMDA4MEZGNzQgLyogQjNVcHNpbG9uVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNVcHNpbG9uVmFsdWUuaDsgcGF0
aCA9IGIzL0IzVXBzaWxvblZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NEY1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1VzZUNvdW50cy5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1VzZUNvdW50cy5jcHA7IHBhdGggPSBiMy9CM1VzZUNv
dW50cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEY2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1VzZUNvdW50cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBCM1VzZUNvdW50cy5oOyBwYXRoID0gYjMvQjNVc2VDb3VudHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RjcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWxpZGF0ZS5jcHA7IHBh
dGggPSBiMy9CM1ZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gQjNWYWxpZGF0ZS5oOyBwYXRoID0gYjMvQjNWYWxpZGF0ZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNW
YWx1ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhbHVlLmNw
cDsgcGF0aCA9IGIzL0IzVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkVDODRGQTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBCM1ZhbHVlLmg7IHBhdGggPSBiMy9CM1ZhbHVlLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NEZCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5s
aW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1ZhbHVlSW5saW5lcy5o
OyBwYXRoID0gYjMvQjNWYWx1ZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYWx1ZVJlcC5jcHA7IHBhdGggPSBiMy9CM1Zh
bHVlUmVwLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0RkQxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gQjNWYWx1ZVJlcC5oOyBwYXRoID0gYjMvQjNWYWx1ZVJlcC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU0ODFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFj
ay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBbGxvY2F0ZVN0
YWNrLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NDkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRl
U3RhY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyQWxsb2NhdGVTdGFj
ay5oOyBwYXRoID0gYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEZFQzg1NEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFyZy5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJBcmcuY3BwOyBwYXRoID0gYjMvYWly
L0FpckFyZy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTRCMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJBcmcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlyQXJnLmg7IHBhdGggPSBiMy9haXIvQWlyQXJnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBGRUM4NTRDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckJhc2ljQmxvY2suY3BwOyBwYXRo
ID0gYjMvYWlyL0FpckJhc2ljQmxvY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU0RDFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNCbG9jay5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJCYXNpY0Jsb2NrLmg7IHBhdGggPSBiMy9haXIvQWly
QmFzaWNCbG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU0RTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEFpckNDYWxsU3BlY2lhbC5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ0Nh
bGxTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NEYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBBaXJDQ2FsbFNwZWNpYWwuaDsgcGF0aCA9IGIzL2Fpci9BaXJDQ2FsbFNwZWNp
YWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTAxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QWlyQ29kZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyQ29kZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGRUM4NTUxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpckNvZGUuaDsgcGF0aCA9IGIzL2Fpci9BaXJD
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUyMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQWlyRnJlcXVlbnRlZEJsb2NrLmg7IHBhdGggPSBiMy9haXIvQWlyRnJlcXVlbnRlZEJs
b2NrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTUzMUJEQUNEQzcwMDgw
RkY3NCAvKiBBaXJHZW5lcmF0ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJHZW5lcmF0ZS5jcHA7IHBhdGggPSBiMy9haXIvQWlyR2VuZXJhdGUuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1NDFCREFDREM3MDA4MEZGNzQgLyogQWly
R2VuZXJhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGUu
aDsgcGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRkVDODU1NTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyR2VuZXJhdGlvbkNvbnRleHQuaDsg
cGF0aCA9IGIzL2Fpci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkVDODU1NjFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlySGFuZGxlQ2Fs
bGVlU2F2ZXMuY3BwOyBwYXRoID0gYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFp
ckhhbmRsZUNhbGxlZVNhdmVzLmg7IHBhdGggPSBiMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NTgxQkRBQ0RDNzAwODBGRjc0
IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBBaXJJbnNlcnRpb25TZXQuY3BwOyBwYXRoID0gYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTU5MUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnNlcnRpb25TZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QWlySW5zZXJ0aW9uU2V0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zZXJ0aW9uU2V0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJ
bnN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpckluc3QuY3Bw
OyBwYXRoID0gYjMvYWlyL0Fpckluc3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkVDODU1QjFCREFDREM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IG5hbWUgPSBBaXJJbnN0Lmg7IHBhdGggPSBiMy9haXIvQWlySW5zdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1QzFCREFDREM3MDA4MEZGNzQgLyogQWly
SW5zdElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlySW5zdElu
bGluZXMuaDsgcGF0aCA9IGIzL2Fpci9BaXJJbnN0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODU1RDFCREFDREM3MDA4MEZGNzQgLyogQWlyTGl2ZW5lc3MuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyTGl2ZW5lc3MuaDsgcGF0aCA9IGIz
L2Fpci9BaXJMaXZlbmVzcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU1
RTFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJQaGFzZVNjb3BlLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJQ
aGFzZVNjb3BlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NUYxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpclBoYXNlU2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBuYW1lID0gQWlyUGhhc2VTY29wZS5oOyBwYXRoID0gYjMvYWlyL0FpclBoYXNlU2NvcGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjAxQkRBQ0RDNzAwODBGRjc0IC8q
IEFpclJlZ2lzdGVyUHJpb3JpdHkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHA7IHBhdGggPSBiMy9haXIvQWlyUmVnaXN0ZXJQ
cmlvcml0eS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYxMUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJSZWdpc3RlclByaW9yaXR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEFpclJlZ2lzdGVyUHJpb3JpdHkuaDsgcGF0aCA9IGIzL2Fpci9BaXJSZWdp
c3RlclByaW9yaXR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTYyMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IEFpclNwZWNpYWwuY3BwOyBwYXRoID0gYjMvYWlyL0FpclNwZWNpYWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQg
LyogQWlyU3BlY2lhbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGVj
aWFsLmg7IHBhdGggPSBiMy9haXIvQWlyU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRkVDODU2NDFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclNwaWxsRXZlcnl0aGlu
Zy5jcHA7IHBhdGggPSBiMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZl
cnl0aGluZy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaDsgcGF0aCA9IGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xv
dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJTdGFja1Nsb3Qu
Y3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQWlyU3RhY2tTbG90Lmg7IHBhdGggPSBiMy9h
aXIvQWlyU3RhY2tTbG90Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NTY4
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gQWlyVG1wLmNwcDsgcGF0aCA9IGIzL2Fpci9BaXJUbXAuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1w
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclRtcC5oOyBwYXRoID0gYjMv
YWlyL0FpclRtcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBBaXJUbXBJbmxpbmVzLmg7IHBhdGggPSBiMy9haXIvQWlyVG1wSW5saW5lcy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODU2QjFCREFDREM3MDA4MEZGNzQgLyog
QWlyVmFsaWRhdGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWly
VmFsaWRhdGUuY3BwOyBwYXRoID0gYjMvYWlyL0FpclZhbGlkYXRlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1NkMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlkYXRl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclZhbGlkYXRlLmg7IHBhdGgg
PSBiMy9haXIvQWlyVmFsaWRhdGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZF
Qzg1OTIxQkRCMUUxMDAwODBGRjc0IC8qIEFpckdlbmVyYXRlZC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBBaXJHZW5lcmF0ZWQuY3BwOyBwYXRoID0gYjMvYWlyL0Fp
ckdlbmVyYXRlZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NUFEMUJE
QjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhw
bGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbklu
ZGV4ID0gMDsgcGF0aCA9IHRlc3RiMzsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsg
fTsKKwkJMEZFQzg1QUUxQkRCNUQ1RTAwODBGRjc0IC8qIHRlc3RiMy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSB0ZXN0YjMuY3BwOyBwYXRoID0gYjMvdGVzdGIzLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0
IC8qIEIzQ29uc3RQdHJWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M0NvbnN0UHRyVmFsdWUuaDsgcGF0aCA9IGIzL0IzQ29uc3RQdHJWYWx1ZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRp
b25TZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNJbnNlcnRp
b25TZXQuY3BwOyBwYXRoID0gYjMvQjNJbnNlcnRpb25TZXQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRkVDODVCNTFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXQu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbnNlcnRpb25TZXQuaDsgcGF0
aCA9IGIzL0IzSW5zZXJ0aW9uU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBG
RUM4NUI2MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElubGluZXMuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNJbnNlcnRpb25TZXRJbmxpbmVzLmg7IHBhdGgg
PSBiMy9CM0luc2VydGlvblNldElubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1QjcxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5jcHA7IHBh
dGggPSBiMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJMEZFQzg1QjgxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNSZWR1Y2VTdHJlbmd0aC5oOyBwYXRoID0gYjMv
QjNSZWR1Y2VTdHJlbmd0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkVDODVC
RTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEIzRWZmZWN0cy5oOyBwYXRoID0gYjMvQjNFZmZlY3RzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTBGRUM4NUJGMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5n
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM0hlYXBSYW5nZS5j
cHA7IHBhdGggPSBiMy9CM0hlYXBSYW5nZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRUM4NUMwMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBCM0hlYXBSYW5nZS5oOyBwYXRoID0gYjMvQjNIZWFwUmFu
Z2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg1QzQxQkUxNkY1QTAwODBG
Rjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUg
PSBCM0VmZmVjdHMuY3BwOyBwYXRoID0gYjMvQjNFZmZlY3RzLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFRDY3QjcxQjI2MjU2RDAwNjZDRTE1IC8qIERGR0NvbnN0YW50SG9p
c3RpbmdQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdD
b25zdGFudEhvaXN0aW5nUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR0NvbnN0YW50SG9pc3RpbmdQ
aGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUQ2N0I4MUIyNjI1NkQw
MDY2Q0UxNSAvKiBERkdDb25zdGFudEhvaXN0aW5nUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gREZHQ29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHBhdGggPSBkZmcvREZH
Q29uc3RhbnRIb2lzdGluZ1BoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
RUU5ODQwMUE4ODY1QjYwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBTZXR1cFZhcmFyZ3NGcmFtZS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzgwMSw2ICs0MDU4LDE1IEBACiAJCQkpOwogCQkJcnVuT25seUZv
ckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CisJCTBGRUM4NUEyMUJEQjVDRjEw
MDgwRkY3NCAvKiBGcmFtZXdvcmtzICovID0geworCQkJaXNhID0gUEJYRnJhbWV3b3Jrc0J1aWxk
UGhhc2U7CisJCQlidWlsZEFjdGlvbk1hc2sgPSAyMTQ3NDgzNjQ3OworCQkJZmlsZXMgPSAoCisJ
CQkJMEZFQzg1QTMxQkRCNUNGMTAwODBGRjc0IC8qIEZvdW5kYXRpb24uZnJhbWV3b3JrIGluIEZy
YW1ld29ya3MgKi8sCisJCQkJMEZFQzg1QTQxQkRCNUNGMTAwODBGRjc0IC8qIEphdmFTY3JpcHRD
b3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBs
b3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNjE0RjQ2QjEzMDA0MUEy
NEUgLyogRnJhbWV3b3JrcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEZyYW1ld29ya3NCdWlsZFBoYXNl
OwogCQkJYnVpbGRBY3Rpb25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTM4NzAsNiArNDEzNiw3IEBA
CiAJCQkJMTQxMjExMjAwQTQ4NzkzQzAwNDgwMjU1IC8qIG1pbmlkb20gKi8sCiAJCQkJMTRCRDU5
QkYwQTNFOEY5MDAwQkFGNTlDIC8qIHRlc3RhcGkgKi8sCiAJCQkJNjUxMTIzMDUxNDA0NkE0QzAw
MkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJMEZFQzg1QUQxQkRCNUNGMTAwODBGRjc0IC8q
IHRlc3RiMyAqLywKIAkJCSk7CiAJCQluYW1lID0gUHJvZHVjdHM7CiAJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwpAQCAtMzg5MCw2ICs0MTU3LDcgQEAKIAkJCQlBN0MyMjVDQzEzOTk4MUYxMDBG
RjE2NjIgLyogS2V5d29yZExvb2t1cEdlbmVyYXRvci5weSAqLywKIAkJCQkxNDMyRUJENzBBMzRD
QUQ0MDA3MTdCOUYgLyogQVBJICovLAogCQkJCTk2ODhDQjEyMEVEMTJCNEUwMDFENjQ5RiAvKiBh
c3NlbWJsZXIgKi8sCisJCQkJMEZFQzg0QjIxQkRBQ0Q1RTAwODBGRjc0IC8qIGIzICovLAogCQkJ
CUE1NENGMkVBMTg0RUE3MzkwMDIzN0YxOSAvKiBiaW5kaW5ncyAqLywKIAkJCQlBN0Q4MDE5RjE4
ODBENjZFMDAyNkMzOUIgLyogYnVpbHRpbnMgKi8sCiAJCQkJOTY5QTA3OEYwRUQxRDNBRTAwRjFG
NjgxIC8qIGJ5dGVjb2RlICovLApAQCAtNDEwMyw2ICs0MzcxLDE0NCBAQAogCQkJbmFtZSA9IGZ0
bDsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07CisJCTBGRUM4NEIyMUJEQUNENUUw
MDgwRkY3NCAvKiBiMyAqLyA9IHsKKwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAo
CisJCQkJMEZFQzg0QjMxQkRBQ0Q4ODAwODBGRjc0IC8qIGFpciAqLywKKwkJCQkwRkVDODRCNDFC
REFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmNwcCAqLywKKwkJCQkwRkVDODRC
NTFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmggKi8sCisJCQkJMEZFQzg0
QjYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5jcHAgKi8sCisJCQkJMEZFQzg0Qjcx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9jay5oICovLAorCQkJCTBGRUM4NEI4MUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg0QjkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9ja1V0aWxzLmggKi8sCisJCQkJMEZFQzg0QkExQkRB
Q0RBQzAwODBGRjc0IC8qIEIzQmxvY2tXb3JrbGlzdC5oICovLAorCQkJCTBGRUM4NEJCMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgKi8sCisJCQkJMEZFQzg0QkMxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzQ2hlY2tTcGVjaWFsLmggKi8sCisJCQkJMEZFQzg0QkQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzQ2hlY2tWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0QkUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzQ2hlY2tWYWx1ZS5oICovLAorCQkJCTBGRUM4NEJGMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbW1vbi5jcHAgKi8sCisJCQkJMEZFQzg0QzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29t
bW9uLmggKi8sCisJCQkJMEZFQzg0QzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5jcHAgKi8sCisJCQkJMEZFQzg0QzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0
eS5oICovLAorCQkJCTBGRUM4NEMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5j
cHAgKi8sCisJCQkJMEZFQzg0QzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3QzMlZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg0QzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDNjFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdDY0VmFsdWUuaCAqLywK
KwkJCQkwRkVDODRDNzFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRDODFCREFDREFDMDA4MEZGNzQgLyogQjNDb25zdERvdWJsZVZhbHVlLmgg
Ki8sCisJCQkJMEZFQzg1QjIxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQdHJWYWx1ZS5oICov
LAorCQkJCTBGRUM4NEM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnRyb2xWYWx1ZS5jcHAgKi8s
CisJCQkJMEZFQzg0Q0ExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29udHJvbFZhbHVlLmggKi8sCisJ
CQkJMEZFQzg1QzQxQkUxNkY1QTAwODBGRjc0IC8qIEIzRWZmZWN0cy5jcHAgKi8sCisJCQkJMEZF
Qzg1QkUxQkUxNjdBMDAwODBGRjc0IC8qIEIzRWZmZWN0cy5oICovLAorCQkJCTBGRUM4NENCMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCAqLywKKwkJCQkwRkVDODRDQzFC
REFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVuY3lDbGFzcy5oICovLAorCQkJCTBGRUM4NENEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW50ZWRCbG9jay5oICovLAorCQkJCTBGRUM4NENFMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmNwcCAqLywKKwkJCQkwRkVDODRDRjFCREFDREFD
MDA4MEZGNzQgLyogQjNHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NEQwMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkwRkVDODVCRjFCRTE2N0Ew
MDA4MEZGNzQgLyogQjNIZWFwUmFuZ2UuY3BwICovLAorCQkJCTBGRUM4NUMwMUJFMTY3QTAwMDgw
RkY3NCAvKiBCM0hlYXBSYW5nZS5oICovLAorCQkJCTBGRUM4NEQxMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0luZGV4TWFwLmggKi8sCisJCQkJMEZFQzg0RDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5k
ZXhTZXQuaCAqLywKKwkJCQkwRkVDODVCNDFCRTE0NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25T
ZXQuY3BwICovLAorCQkJCTBGRUM4NUI1MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNl
dC5oICovLAorCQkJCTBGRUM4NUI2MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldElu
bGluZXMuaCAqLywKKwkJCQkwRkVDODREMzFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWly
LmNwcCAqLywKKwkJCQkwRkVDODRENDFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRvQWlyLmgg
Ki8sCisJCQkJMEZFQzg0RDUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzTWVtb3J5VmFsdWUuY3BwICov
LAorCQkJCTBGRUM4NEQ2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggKi8sCisJ
CQkJMEZFQzg0RDcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzT3Bjb2RlLmNwcCAqLywKKwkJCQkwRkVD
ODREODFCREFDREFDMDA4MEZGNzQgLyogQjNPcGNvZGUuaCAqLywKKwkJCQkwRkVDODREOTFCREFD
REFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwICovLAorCQkJCTBGRUM4NERBMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM09yaWdpbi5oICovLAorCQkJCTBGRUM4NERCMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1BhdGNocG9pbnRTcGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODREQzFCREFDREFDMDA4MEZGNzQg
LyogQjNQYXRjaHBvaW50U3BlY2lhbC5oICovLAorCQkJCTBGRUM4NEREMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1BhdGNocG9pbnRWYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0REUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGF0Y2hwb2ludFZhbHVlLmggKi8sCisJCQkJMEZFQzg0REYxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUGhhc2VTY29wZS5jcHAgKi8sCisJCQkJMEZFQzg0RTAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUGhhc2VTY29wZS5oICovLAorCQkJCTBGRUM4NEUxMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Byb2NlZHVyZS5jcHAgKi8sCisJCQkJMEZFQzg0RTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJv
Y2VkdXJlLmggKi8sCisJCQkJMEZFQzg0RTMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJl
SW5saW5lcy5oICovLAorCQkJCTBGRUM4NUI3MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0
cmVuZ3RoLmNwcCAqLywKKwkJCQkwRkVDODVCODFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VT
dHJlbmd0aC5oICovLAorCQkJCTBGRUM4NEU0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFw
LmNwcCAqLywKKwkJCQkwRkVDODRFNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcC5oICov
LAorCQkJCTBGRUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAg
Ki8sCisJCQkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmgg
Ki8sCisJCQkJMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAg
Ki8sCisJCQkJMEZFQzg0RTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICov
LAorCQkJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCAq
LywKKwkJCQkwRkVDODRFQjFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RWYWx1ZS5oICov
LAorCQkJCTBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24u
aCAqLywKKwkJCQkwRkVDODRFRDFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAq
LywKKwkJCQkwRkVDODRFRTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8sCisJ
CQkJMEZFQzg0RUYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwICovLAorCQkJ
CTBGRUM4NEYwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmggKi8sCisJCQkJMEZF
Qzg0RjExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVHlwZS5jcHAgKi8sCisJCQkJMEZFQzg0RjIxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzVHlwZS5oICovLAorCQkJCTBGRUM4NEYzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVXBzaWxvblZhbHVlLmggKi8sCisJCQkJMEZFQzg0RjUxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzVXNlQ291bnRzLmNwcCAqLywKKwkJCQkwRkVDODRGNjFCREFDREFDMDA4MEZGNzQgLyogQjNV
c2VDb3VudHMuaCAqLywKKwkJCQkwRkVDODRGNzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0
ZS5jcHAgKi8sCisJCQkJMEZFQzg0RjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCAq
LywKKwkJCQkwRkVDODRGOTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5jcHAgKi8sCisJCQkJ
MEZFQzg0RkExQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWUuaCAqLywKKwkJCQkwRkVDODRGQjFC
REFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZUlubGluZXMuaCAqLywKKwkJCQkwRkVDODRGQzFCREFD
REFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8sCisJCQkJMEZFQzg0RkQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLywKKwkJCQkwRkVDODVBRTFCREI1RDVFMDA4MEZGNzQg
LyogdGVzdGIzLmNwcCAqLywKKwkJCSk7CisJCQluYW1lID0gYjM7CisJCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOworCQl9OworCQkwRkVDODRCMzFCREFDRDg4MDA4MEZGNzQgLyogYWlyICovID0g
eworCQkJaXNhID0gUEJYR3JvdXA7CisJCQljaGlsZHJlbiA9ICgKKwkJCQkwRkVDODU0ODFCREFD
REM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5jcHAgKi8sCisJCQkJMEZFQzg1NDkxQkRB
Q0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suaCAqLywKKwkJCQkwRkVDODU0QTFCREFD
REM3MDA4MEZGNzQgLyogQWlyQXJnLmNwcCAqLywKKwkJCQkwRkVDODU0QjFCREFDREM3MDA4MEZG
NzQgLyogQWlyQXJnLmggKi8sCisJCQkJMEZFQzg1NEMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckJh
c2ljQmxvY2suY3BwICovLAorCQkJCTBGRUM4NTREMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNp
Y0Jsb2NrLmggKi8sCisJCQkJMEZFQzg1NEUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3Bl
Y2lhbC5jcHAgKi8sCisJCQkJMEZFQzg1NEYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxsU3Bl
Y2lhbC5oICovLAorCQkJCTBGRUM4NTUwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmNwcCAq
LywKKwkJCQkwRkVDODU1MTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5oICovLAorCQkJCTBG
RUM4NTUyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJGcmVxdWVudGVkQmxvY2suaCAqLywKKwkJCQkw
RkVDODU1MzFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGUuY3BwICovLAorCQkJCTBGRUM4
NTU0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZS5oICovLAorCQkJCTBGRUM4NTkyMUJE
QjFFMTAwMDgwRkY3NCAvKiBBaXJHZW5lcmF0ZWQuY3BwICovLAorCQkJCTBGRUM4NTU1MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJHZW5lcmF0aW9uQ29udGV4dC5oICovLAorCQkJCTBGRUM4NTU2MUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJIYW5kbGVDYWxsZWVTYXZlcy5jcHAgKi8sCisJCQkJMEZFQzg1
NTcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckhhbmRsZUNhbGxlZVNhdmVzLmggKi8sCisJCQkJMEZF
Qzg1NTgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAgKi8sCisJCQkJMEZF
Qzg1NTkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5oICovLAorCQkJCTBGRUM4
NTVBMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnN0LmNwcCAqLywKKwkJCQkwRkVDODU1QjFCREFD
REM3MDA4MEZGNzQgLyogQWlySW5zdC5oICovLAorCQkJCTBGRUM4NTVDMUJEQUNEQzcwMDgwRkY3
NCAvKiBBaXJJbnN0SW5saW5lcy5oICovLAorCQkJCTBGRUM4NTVEMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJMaXZlbmVzcy5oICovLAorCQkJCTBGRUM4NTVFMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJQ
aGFzZVNjb3BlLmNwcCAqLywKKwkJCQkwRkVDODU1RjFCREFDREM3MDA4MEZGNzQgLyogQWlyUGhh
c2VTY29wZS5oICovLAorCQkJCTBGRUM4NTYwMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdpc3Rl
clByaW9yaXR5LmNwcCAqLywKKwkJCQkwRkVDODU2MTFCREFDREM3MDA4MEZGNzQgLyogQWlyUmVn
aXN0ZXJQcmlvcml0eS5oICovLAorCQkJCTBGRUM4NTYyMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJT
cGVjaWFsLmNwcCAqLywKKwkJCQkwRkVDODU2MzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lh
bC5oICovLAorCQkJCTBGRUM4NTY0MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5dGhp
bmcuY3BwICovLAorCQkJCTBGRUM4NTY1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTcGlsbEV2ZXJ5
dGhpbmcuaCAqLywKKwkJCQkwRkVDODU2NjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90
LmNwcCAqLywKKwkJCQkwRkVDODU2NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3RhY2tTbG90Lmgg
Ki8sCisJCQkJMEZFQzg1NjgxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgKi8sCisJCQkJ
MEZFQzg1NjkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5oICovLAorCQkJCTBGRUM4NTZBMUJE
QUNEQzcwMDgwRkY3NCAvKiBBaXJUbXBJbmxpbmVzLmggKi8sCisJCQkJMEZFQzg1NkIxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclZhbGlkYXRlLmNwcCAqLywKKwkJCQkwRkVDODU2QzFCREFDREM3MDA4
MEZGNzQgLyogQWlyVmFsaWRhdGUuaCAqLywKKwkJCSk7CisJCQluYW1lID0gYWlyOworCQkJc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsKIAkJMEZGNDI3MkUxNThFQkNDRTAwNENCOUZGIC8q
IGRpc2Fzc2VtYmxlciAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAo
CkBAIC02MDg5LDYgKzY0OTUsNyBAQAogCQkJCTBGMUZFNTFDMTkyMkEzQkMwMDY5ODdDNSAvKiBB
Ym9ydFJlYXNvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTMwRjNBODNDMTAwRjg0NzEw
IC8qIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTVGMEY1
MTREMTA2M0MwMEFDNzY0OSAvKiBBYnN0cmFjdFBDLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNUVBNzBFOTE5RjVCMTAxMDA5OEY1RUMgLyogQWx0ZXJuYXRlRGlzcGF0Y2hhYmxlQWdlbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTJBNDhEMTkxMTc3MjM2NUIwMEM2NUE1RiAvKiBBUElDYWxs
YmFja0Z1bmN0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFNTBFMTZGNUNEMDBCMzQ0
NjAgLyogQVBJQ2FzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MTE3LDggKzY1MjQsMTAgQEAKIAkJ
CQlBNUVBNzBFODE5RjVCMTAxMDA5OEY1RUMgLyogQXVnbWVudGFibGVJbnNwZWN0b3JDb250cm9s
bGVyQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk1MjY3OEY4RjFBMDMxMDA5MDA2QTMwNkQg
LyogQmFzaWNCbG9ja0xvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDdCODNBQzBFNkRC
OEM5MDA0Nzc1QTQgLyogQmF0Y2hlZFRyYW5zaXRpb25PcHRpbWl6ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTM2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTg2NjczOUQyMTNCRkRFNzEwMDIzRDg3QyAvKiBCaWdJbnRl
Z2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY0QjI3MjFBNzg0QkFGMDA2RTRFNjYgLyogQmlu
YXJ5U3dpdGNoLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RTFCREFDREM3MDA4MEZGNzQg
LyogQWlyVG1wLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNFQzBFMTZGNUNEMDBCMzQ0NjAg
LyogQm9vbGVhbk9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkVBMDg2MjAxODJCN0EwNDAw
RjZEODUxIC8qIEJyZWFrcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDgwMUE1MTg4MEQ2
NkUwMDI2QzM5QiAvKiBCdWlsdGluRXhlY3V0YWJsZXMuaCBpbiBIZWFkZXJzICovLApAQCAtNjEz
Myw2ICs2NTQyLDcgQEAKIAkJCQk5OURBMDBBNDFCRDU5OTMxMDBGNDU3NUMgLyogYnVpbHRpbnNf
bW9kZWwucHkgaW4gSGVhZGVycyAqLywKIAkJCQk5OURBMDBBNTFCRDU5OTMxMDBGNDU3NUMgLyog
YnVpbHRpbnNfdGVtcGxhdGVzLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJNDFERUExMzIxQjlGMzE2
MzAwNkQ2NUREIC8qIEJ1aWx0aW5VdGlscy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MTAx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3Q2NFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5
RTcyOTQwQjE5MEYwNTE0MDAxQTkxQjUgLyogQnVuZGxlUGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZCN0YzOTgxNUVEOEU0NjAwRjE2N0IyIC8qIEJ1dHRlcmZseUlubGluZXMuaCBpbiBI
ZWFkZXJzICovLApAQCAtNjE0Myw2ICs2NTUzLDcgQEAKIAkJCQkwRjJERDgwQjFBQjNEODU4MDBC
QkI4RTggLyogQnl0ZWNvZGVLaWxscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJGQ0FFMTMxN0E5
QzI0RTAwMzRDNzM1IC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEY2NjZFQzAxODM1NjZGOTAwRDAxN0YxIC8qIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNp
c0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTA2MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NoZWNrU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjUxNEYyMTkxOEIzRTE2NzAw
OThGRjhCIC8qIEJ5dGVjb2Rlcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4ODVFMTExODQ5QTNC
RTAwRjFFM0ZBIC8qIEJ5dGVjb2RlVXNlRGVmLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjgwMjNF
QTE2MTM4MzJCMDBBMEJBNDUgLyogQnlWYWxJbmZvLmggaW4gSGVhZGVycyAqLywKQEAgLTYxNzYs
OSArNjU4NywxMSBAQAogCQkJCTBGMEI4M0E3MTRCQ0Y1MDcwMDg4NUI0RiAvKiBDb2RlVHlwZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTUzMjQzOTgxODU2QTQ4OTAwMkVENjkyIC8qIENvbWJpbmVk
RG9tYWlucy5qc29uIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjMwRTE2RjVDRDAwQjM0NDYw
IC8qIENvbW1vbklkZW50aWZpZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODVCQTFCRTE0
NjJGMDA4MEZGNzQgLyogQjNJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMTVG
MTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFj
dEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTJDMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1Byb2NlZHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdFNUEzQTgxNzk3NDMyRDAw
RTg5M0MwIC8qIENvbXBpbGF0aW9uUmVzdWx0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzNG
NDBFMTZGNUNEMDBCMzQ0NjAgLyogQ29tcGxldGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2
QjczMUQxQkRBMDhFRjAwMzMxQjg0IC8qIEpTR2xvYmFsT2JqZWN0Lmx1dC5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02MTg2LDggKzY1OTksMTAgQEAKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQg
LyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRUExNzQ4OTZD
NzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKSVRMb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4
QzNGNTBFMTZGNUNEMDBCMzQ0NjAgLyogY29uZmlnLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODU4ODFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTQ0ODM2RTcxMzJEQTdCRTAwNUJFNzg1IC8qIENvbnNlcnZhdGl2ZVJvb3RzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBNTNDRTA4QTE4QkMyMUMzMDBCRURGNzYgLyogQ29uc29sZUNsaWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ2hlY2tWYWx1
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAwN0ExODlCMDUxMDAwNjMzMjMxIC8qIENvbnNv
bGVNZXNzYWdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxOTFCREEwNjgwMDAzMzFCODQg
LyogQm9vbGVhblByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1M0NFMDg2MThC
QzFBNTYwMEJFREY3NiAvKiBDb25zb2xlUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKQEAgLTYy
MDIsNiArNjYxNyw3IEBACiAJCQkJQzJGQzlCRDMxNjY0NERGQjAwODEwRDMzIC8qIENvcGllZEJs
b2NrSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQzJFQUEzRkExNDlBODM1RTAwRkNFMTEy
IC8qIENvcGllZFNwYWNlLmggaW4gSGVhZGVycyAqLywKIAkJCQlDMkM4RDAyRDE0QTNDNkUwMDA1
NzhFNjUgLyogQ29waWVkU3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUy
NDFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGN0Mx
MUFEMUJDMzg2MkMwMEM3NENEQiAvKiBDb3B5QmFycmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEY1QTUyRDAxN0FERDcxNzAwOEVDQjJEIC8qIENvcHlUb2tlbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQzIyMzlEMTgxNjI2MkJERDAwNUFDNUZEIC8qIENvcHlWaXNpdG9yLmggaW4gSGVhZGVycyAq
LywKQEAgLTYyMTMsNiArNjYyOSw3IEBACiAJCQkJOTk1OUU5MkIxQkQxN0ZBNDAwMUFBNDEzIC8q
IGNzc21pbi5weSBpbiBIZWFkZXJzICovLAogCQkJCTJBMTExMjQ2MTkyRkNFNzkwMDVFRTE4RCAv
KiBDdXN0b21HZXR0ZXJTZXR0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTRCMTQ2MENE
NkUwMDEzMUY4RiAvKiBEYXRhRm9ybWF0LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwNDFC
REFDREFDMDA4MEZGNzQgLyogQjNCbG9ja1dvcmtsaXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RjJCNjZERjE3QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUJDRDIwMzRBMEUxNzEzNUUwMDJDN0U4MiAvKiBEYXRlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTQxMzU5Q0YzMEZERDg5QUQwMDIwNjE4MCAvKiBEYXRlQ29udmVyc2lvbi5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02MjMzLDYgKzY2NTAsNyBAQAogCQkJCUE3MDREOTAzMTdBMEJBQTgw
MDZCQTU1NCAvKiBERkdBYnN0cmFjdEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NzA0RDkwNDE3QTBCQUE4MDA2QkE1NTQgLyogREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIwMTc3MTQzRkNEM0YwMDY4Qjc3QyAvKiBERkdBYnN0
cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MDFCREFDREM3MDA4MEZGNzQg
LyogQWlyQXJnLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQzRTQwMjFCNjE4QUFGMDBDODBFMUUg
LyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3BlcnR5VmFsdWVXYXRjaHBvaW50LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjE4RDNEMDFCNTVBNkUwMDAyQzVDOUYgLyogREZHQWRhcHRpdmVTdHJ1Y3R1
cmVXYXRjaHBvaW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjY2RTE2QjE0REYzRjE2MDBCN0Iy
RTQgLyogREZHQWRqYWNlbmN5TGlzdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjQzLDcgKzY2NjEs
OSBAQAogCQkJCTBGMkREODE0MUFCM0Q4QkUwMEJCQjhFOCAvKiBERkdBcmd1bWVudHNVdGlsaXRp
ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDg1MzIyMTg3NzUwNTYwMDgzQjY4NyAvKiBERkdB
cml0aE1vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMDVDM0I0MTY4M0NGOTIwMEJBRjQ1QiAv
KiBERkdBcnJheWlmeVNsb3dQYXRoR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVD
ODUxNzFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVxdWVudGVkQmxvY2suaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGNjM5NDg1MTVFNDgxMUIwMDZBNTk3QyAvKiBERkdBcnJheU1vZGUuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTBGRUM4NTc2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJDb2RlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBN0Q5QTI5NTE3QTBCQzc0MDBFRTI2MTggLyogREZHQXRUYWlsQWJzdHJh
Y3RTdGF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY2NjZFQzcxODM1NjcyQjAwRDAxN0YxIC8q
IERGR0F2YWlsYWJpbGl0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRTMxOUQwQkE3RDAw
QjFEMUI1IC8qIERGR0F2YWlsYWJpbGl0eU1hcC5oIGluIEhlYWRlcnMgKi8sCkBAIC02MjUzLDYg
KzY2NzMsNyBAQAogCQkJCUE3RDg5Q0Y0MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2Vy
dGlvblNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8q
IERGR0Jsb2NrTWFwLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3
MkEgLyogREZHQmxvY2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUyRDFC
REFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxvY2tTZXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQkYxNThEMTlCN0E1MzEwMDY5NUREMCAvKiBERkdCbG9ja1NldElubGluZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGQzNDRDAwMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja1dv
cmtsaXN0LmggaW4gSGVhZGVycyAqLywKQEAgLTYyOTIsOCArNjcxMywxMCBAQAogCQkJCTBGNjZF
MTZDMTRERjNGMTYwMEI3QjJFNCAvKiBERkdFZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q5
QTI5NjE3QTBCQzc0MDBFRTI2MTggLyogREZHRWRnZURvbWluYXRlcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc5ODZENTcxN0EwQkIxRTAwQTk1REQwIC8qIERGR0VkZ2VVc2VzU3RydWN0dXJlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3MjFCREFDREM3MDA4MEZGNzQgLyogQWlyQmFzaWNC
bG9jay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzQxQURGMDkwMTAwRUQ3OTJDIC8qIERG
R0Vwb2NoLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkJDMEFFODE0OTZDN0M3MDBENEZCREQgLyog
REZHRXhpdFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTAzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM0Jhc2ljQmxvY2tVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc4QTk3NzUx
Nzk3MzhCODAwOURGNzQ0IC8qIERGR0ZhaWxlZEZpbmFsaXplci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTdCRkYzQzAxNzk4Njg5NDAwMDJGNDYyIC8qIERGR0ZpbHRyYXRpb25SZXN1bHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE3OEE5Nzc3MTc5NzM4QjgwMDlERjc0NCAvKiBERkdGaW5hbGl6ZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtNjMyMyw2ICs2NzQ2LDcgQEAKIAkJCQk2MkYyQUEzODFCMEJF
REUzMDA2MTBDN0EgLyogREZHTGF6eU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDlBMjk4
MTdBMEJDNzQwMEVFMjYxOCAvKiBERkdMSUNNUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTc5
QzRCMTVFMUJBMjE1OEYwMEZENTkyRSAvKiBERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlv
blBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4NjFCREFDREM3MDA4MEZGNzQgLyog
QWlyUmVnaXN0ZXJQcmlvcml0eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdEODlDRkMxN0EwQjhD
QzAwNzczQUQ4IC8qIERGR0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEZGMEYxOUIxNkI3MjlGQTAwNURGOTVCIC8qIERGR0xvbmdMaXZlZFN0YXRlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlBNzY3QjVCNjE3QTBCOTY1MDA2M0Q5NDAgLyogREZHTG9vcFByZUhlYWRl
ckNyZWF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjMzMSw2ICs2NzU1LDcgQEAKIAkJ
CQkwRjJCREM0NTE1MjI4MDFCMDBDRDg5MTAgLyogREZHTWluaWZpZWRHcmFwaC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyRTg5MkQxNkQwMkJBRjAwOUU0RkQyIC8qIERGR01pbmlmaWVkSUQuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMkJEQzQ2MTUyMjgwMjAwMENEODkxMCAvKiBERkdNaW5pZmll
ZE5vZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE0MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M0NvbnRyb2xWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY4RjE0MzYxQURGMDkwMTAwRUQ3
OTJDIC8qIERGR01vdkhpbnRSZW1vdmFsUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjJD
RDVDMUI2MUE0RjgwMDQ5NTVBOCAvKiBERkdNdWx0aUdldEJ5T2Zmc2V0RGF0YS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZDM0NEMDIxOUFEQTQxMTAwNkFDNzJBIC8qIERGR05haXZlRG9taW5hdG9y
cy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzQ5LDYgKzY3NzQsNyBAQAogCQkJCTBGQzA5NzZBMTQ2
OEE2RjcwMENGMjQ0MiAvKiBERkdPU1JFeGl0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjIzNUJF
QzE3MTc4RTczMDA2OTBDN0YgLyogREZHT1NSRXhpdEJhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRkI5MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Ns
b3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3NzExNDY5M0FGNTAwQ0YyNDQyIC8q
IERGR09TUkV4aXRDb21waWxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY3MDI1QUExNzE0QjBG
QzAwMzgyQzBFIC8qIERGR09TUkV4aXRDb21waWxlckNvbW1vbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYzOTJDOEExQjQ2MTg4NDAwODQ0NzI4IC8qIERGR09TUkV4aXRGdXp6LmggaW4gSGVhZGVy
cyAqLywKQEAgLTYzNjYsNiArNjc5Miw4IEBACiAJCQkJMEZGQzkyMTYxQjk0RkIzRTAwNzFERDY2
IC8qIERGR1Byb3BlcnR5VHlwZUtleS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCMTc2NjMxOTZC
OEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYzQTFC
RkExQTlFQ0I3RDAwMERFMDFBIC8qIERGR1B1dFN0YWNrU2lua2luZ1BoYXNlLmggaW4gSGVhZGVy
cyAqLywKKwkJCQkwRkVDODU2RTFCREFDREM3MDA4MEZGNzQgLyogQWlyQWxsb2NhdGVTdGFjay5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzSW5kZXhT
ZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RUM5REQxMTMyOERGODIwMDJCMkFENyAvKiBERkdS
ZWdpc3RlckJhbmsuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkZDQ0ZDMThBNjAwNzAwMDFBMjdG
OCAvKiBERkdTYWZlcG9pbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3N0E0MjQzMTdBMEJCRkQw
MEE4REI4MSAvKiBERkdTYWZlVG9FeGVjdXRlLmggaW4gSGVhZGVycyAqLywKQEAgLTYzOTAsNiAr
NjgxOCw3IEBACiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENoZWNr
SW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRDhBMzJBMTdENTFGNTcwMENB
MkM0MCAvKiBERkdUb0ZUTERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZEOEEzMkMxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RvRlRMRm9yT1NSRW50cnlE
ZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTdF
MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGRTcyMTFFMTkzQjlDNTkwMDMxRjZFRCAvKiBERkdUcmFuc2l0aW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjYzOTQzRjE1Qzc1RjE5MDA2QTU5N0MgLyogREZHVHlwZUNoZWNrSG9pc3RpbmdQ
aGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCRTBGNzcxNkMxREIxMjAwODJDNUU4IC8qIERG
R1VuaWZpY2F0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjQwMSw2ICs2ODMwLDcgQEAK
IAkJCQkwRjYyMDE3NDE0M0ZDRDMzMDA2OEI3N0MgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkREQkZCNjE2NjZFRURBMDBDNTVGRUYgLyogREZHVmFyaWFi
bGVBY2Nlc3NEYXRhRHVtcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQkRDNDkxNTIyODA5NjAw
Q0Q4OTEwIC8qIERGR1ZhcmlhYmxlRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTM4
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkJEQzRCMTUyMjgwOUQwMENEODkxMCAvKiBERkdWYXJpYWJsZUV2ZW50U3RyZWFtLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkZGQzk2MDE0RUY5MEJEMDBDNzI1MzIgLyogREZHVmlydHVhbFJlZ2lz
dGVyQWxsb2NhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMxODFCREEwNjgw
MDAzMzFCODQgLyogQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLApA
QCAtNjQwOSw2ICs2ODM5LDcgQEAKIAkJCQkwRkUwNTAxODFBQTkwOTExMDBEMzNCMzMgLyogRGly
ZWN0QXJndW1lbnRzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxNjFBQTkwOTExMDBEMzNC
MzMgLyogRGlyZWN0QXJndW1lbnRzT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjcz
MTE1OEVCRDU0MDA0Q0I5RkYgLyogRGlzYXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODVDMTFCRTE2N0EwMDA4MEZGNzQgLyogQjNFZmZlY3RzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzA0NDdFRTE3QTBCRDcwMDBGNTg5OEUgLyogRHVtcENvbnRleHQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTJBODM2Mzg2MThEN0QwRUUwMDAwRUJDQyAvKiBFZGVuR0NBY3Rpdml0eUNhbGxiYWNr
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OUU0NUEyNDE4QTFCMjU5MDAyNkQ4OEYgLyogRW1wdHlJ
bnB1dEN1cnNvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDMxLDYgKzY4NjIsNyBAQAogCQkJCTBG
NTZBMUQzMTUwMDBGMzUwMDI5OTJCMSAvKiBFeGVjdXRpb25Db3VudGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjNBQzc1NDE4OEU1RUM4MDAzMjAyOUYgLyogRXhpdGluZ0pJVFR5cGUuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGQjEwNTg2MTY3NTQ4MTIwMEY4QUI2RSAvKiBFeGl0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MDExQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNCbG9j
ay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYwQjgzQUIxNEJDRjVCQjAwODg1QjRGIC8qIEV4cHJl
c3Npb25SYW5nZUluZm8uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM4MTdBREI1RjMwMDVB
QjE3NCAvKiBGbG9hdDMyQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3QThBRjM5MTdBREI1
RjMwMDVBQjE3NCAvKiBGbG9hdDY0QXJyYXkuaCBpbiBIZWFkZXJzICovLApAQCAtNjQ5MSw2ICs2
OTIzLDcgQEAKIAkJCQkwRkVBMEEyMDE3MDhCMDA3MDBCQjcyMkMgLyogRlRMVHlwZWRQb2ludGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53
aW5kSW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDQ0ExNzNEQTUyMzAwN0IzQzFCIC8q
IEZUTFZhbHVlRnJvbUJsb2NrLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NzFCREFDREM3
MDA4MEZGNzQgLyogQWlyRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVB
NjI4NDE4OEM5OEQ0MDA3MkM5REYgLyogRlRMVmFsdWVSYW5nZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEYwMzMyQzYxOEI1M0ZBOTAwNUY5NzlBIC8qIEZUTFdlaWdodC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEYwMzMyQzgxOEI1NDZFQzAwNUY5NzlBIC8qIEZUTFdlaWdodGVkVGFyZ2V0LmggaW4g
SGVhZGVycyAqLywKQEAgLTY0OTgsOCArNjkzMSwxMCBAQAogCQkJCTJBODM2MzhBMThEN0QwRkUw
MDAwRUJDQyAvKiBGdWxsR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQlC
QzE4QzQwNDBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEZGMEYxQTAxNkI3MkExQTAwNURGOTVCIC8qIEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTNBMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N3aXRjaFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTBGQjE5NzRBRTYxMDA4MDg1
N0MgLyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTRC
RkYyQzFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NTJGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlCQzE4QzQwNTBFMTZGNUNEMDBCMzQ0NjAgLyogRnVuY3Rpb25Qcm90b3R5cGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlv
blJhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFDRTYzRDE4Q0E1QTAzMDBFRDAxOTEg
LyogR0NBY3Rpdml0eUNhbGxiYWNrLmggaW4gSGVhZGVycyAqLywKQEAgLTY1MzgsNiArNjk3Myw3
IEBACiAJCQkJQzQ3MDNDRDUxOTI4NDRDQzAwMTNGQkVBIC8qIGdlbmVyYXRvcl90ZW1wbGF0ZXMu
cHkgaW4gSGVhZGVycyAqLywKIAkJCQkwRkUwNTAxOTFBQTkwOTExMDBEMzNCMzMgLyogR2VuZXJp
Y0FyZ3VtZW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFMDUwMUExQUE5MDkxMTAwRDMzQjMz
IC8qIEdlbmVyaWNBcmd1bWVudHNJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUw
QTFCREFDREFDMDA4MEZGNzQgLyogQjNDb21tb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTA1
MDFCMUFBOTA5MTEwMEQzM0IzMyAvKiBHZW5lcmljT2Zmc2V0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjJCNjZFMDE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVkQXJyYXlWaWV3LmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjJCNjZFMTE3QjZCNUFCMDBBN0FFM0YgLyogR2VuZXJpY1R5cGVk
QXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02NTYzLDYgKzY5OTksNyBAQAog
CQkJCUMyRTUyNkJFMTU5MEVGMDAwMDU0RTQ4RCAvKiBIZWFwVGltZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZFN0JBNjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGNDY4MEQ1MTRCQkQyNEIwMEJGRTI3MiAvKiBIb3N0Q2FsbFJldHVyblZh
bHVlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUwQzFCREFDREFDMDA4MEZGNzQgLyogQjND
b21tdXRhdGl2aXR5LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQwRjBFMTZGNUNEMDBCMzQ0
NjAgLyogSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwNkRERUExOERBNDRBQjAw
QTM4M0QwIC8qIElkZW50aWZpZXJJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNUZEMDA3
NjE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmggaW4gSGVhZGVycyAqLywK
QEAgLTY2MTYsNiArNzA1Myw3IEBACiAJCQkJQTFCOUUyM0MxQjRFMEQ2NzAwQkM3RkVEIC8qIElu
dGxDb2xsYXRvckNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlBMTgxOTNFMzFCNEUw
Q0RCMDBGQzEwMjkgLyogSW50bENvbGxhdG9yQ29uc3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAq
LywKIAkJCQlBMUI5RTIzRTFCNEUwRDY3MDBCQzdGRUQgLyogSW50bENvbGxhdG9yUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxNjFCREFDREFDMDA4MEZGNzQgLyogQjNGcmVx
dWVuY3lDbGFzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTE4MTkzRTQxQjRFMENEQjAwRkMxMDI5
IC8qIEludGxDb2xsYXRvclByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUExNTg3
RDZFMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUExNTg3RDcwMUI0REMxNDEwMEQ2OTg0OSAvKiBJbnRsRGF0ZVRpbWVGb3JtYXRDb25z
dHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCkBAIC02NjQ2LDYgKzcwODQsNyBAQAogCQkJCTBGMjRF
NTREMTdFRTI3NDkwMEFCQjIxNyAvKiBKSVRPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRjc2NkQzMTE1QUE4MTEyMDA4RjM2M0UgLyogSklUU3R1YlJvdXRpbmUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGNzY2RDJDMTVBOENDM0EwMDhGMzYzRSAvKiBKSVRTdHViUm91dGluZVNldC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1OTExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclZhbGlk
YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjVFRjkxRjE2ODc4RjdEMDAzRTVDMjUgLyogSklU
VGh1bmtzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkM3MTJFMzE3Q0Q4NzkzMDA4Q0M5M0MgLyog
SklUVG9ERkdEZWZlcnJlZENvbXBpbGF0aW9uQ2FsbGJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE3NkY1NEEzMTNCMjhBQUIwMEVGMkJDRSAvKiBKSVRXcml0ZUJhcnJpZXIuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjY1Niw5ICs3MDk1LDExIEBACiAJCQkJMEYyQjY2RTUxN0I2QjVBQjAwQTdBRTNG
IC8qIEpTQXJyYXlCdWZmZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2
RTcxN0I2QjVBQjAwQTdBRTNGIC8qIEpTQXJyYXlCdWZmZXJQcm90b3R5cGUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMkI2NkU5MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0FycmF5QnVmZmVyVmlldy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1QjMxQkRFRDk1NzAwODBGRjc0IC8qIEIzQ29uc3RQ
dHJWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RUExN0I2QjVBQjAwQTdBRTNGIC8q
IEpTQXJyYXlCdWZmZXJWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTdCREFFQ0Ix
N0Y0RUExNDAwRjYxNDBDIC8qIEpTQXJyYXlJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OEIxNDE4NkQxQjYyNTI3RjAwRkIyMDY4IC8qIEpTQXJyb3dGdW5jdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1MTIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29uc3REb3VibGVWYWx1ZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTgwRTE2RjVDRDAwQjM0NDYwIC8qIEpTQmFzZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFzZVBy
aXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RkE5RTkyMTQyQkJCMkUwMDE3NzNCNyAvKiBK
U0JvdW5kRnVuY3Rpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjY3NSw2ICs3MTE2LDggQEAKIAkJ
CQk4NjVBMzBGMTEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDFEMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0NsYXNzUmVmLmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNTNDRTA4ODE4QkMxQTU2MDBCRURGNzYgLyogSlNDb25zb2xlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxRTFCREFDREFDMDA4MEZGNzQgLyogQjNMb3dlclRv
QWlyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU4RjFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTMxNjdCQUJENzAwNkQ3NjBB
IC8qIEpTQ29udGV4dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTcxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTQ29udGV4dEludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNThDMDI0MjE4
RTRBNDFBMDAwMzJCQzUgLyogSlNDb250ZXh0UHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02
NjkwLDYgKzcxMzMsNyBAQAogCQkJCUZFMzg0RUU2MUFEREI3QUQwMDU1REUyQyAvKiBKU0RvbGxh
clZNLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRTM4NEVFODFBRERCN0FEMDA1NURFMkMgLyogSlNE
b2xsYXJWTVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkQwRTE2RjVDRDAw
QjM0NDYwIC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4
NTIwMUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkUzQzYxNDE2N0JBQkQ3MDA2RDc2MEEgLyogSlNFeHBvcnQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE3QjRBQ0FGMTQ4NEM5Q0UwMEIzOEEzNiAvKiBKU0V4cG9ydE1hY3Jvcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY2RUYxN0I2QjVBQjAwQTdBRTNGIC8qIEpTRmxvYXQzMkFycmF5Lmgg
aW4gSGVhZGVycyAqLywKQEAgLTY3MDAsMTEgKzcxNDQsMTMgQEAKIAkJCQkwRjJCNjZGMTE3QjZC
NUFCMDBBN0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXcuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkYyMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0Nv
bnN0cnVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0Yg
LyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTQ1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlSW5saW5lcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjQxN0I2QjVBQjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5
cGVkQXJyYXlWaWV3SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY2RjUxN0I2QjVB
QjAwQTdBRTNGIC8qIEpTR2VuZXJpY1R5cGVkQXJyYXlWaWV3UHJvdG90eXBlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk1MzkxN0U3QjFCNzkwNkZBMDAwRUJEMzMgLyogSlNHZW5lcmljVHlwZWRBcnJh
eVZpZXdQcm90b3R5cGVGdW5jdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkY2MTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld1Byb3RvdHlwZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc5N0UwN0FBMUI4RkNGQjkwMDg0MDBCQSAvKiBKU0dsb2Jh
bExleGljYWxFbnZpcm9ubWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MUIxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzSW5kZXhNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIxMEUx
NkY1Q0QwMEIzNDQ2MCAvKiBKU0dsb2JhbE9iamVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVG
RDAwODYxODlCMUI3RTAwNjMzMjMxIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29sZUFnZW50LmggaW4g
SGVhZGVycyAqLywKIAkJCQlBNUMzQTFBNjE4QzA0OTAyMDBDOTU5M0EgLyogSlNHbG9iYWxPYmpl
Y3RDb25zb2xlQ2xpZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTY3MzUsNiArNzE4MSw3IEBACiAJ
CQkJQTcwMDg3NDIxN0NCRThFQjAwQzNFNjQzIC8qIEpTTWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNzRERUY5NjE4MkQ5OTE0MDA1MjJDMjIgLyogSlNNYXBJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJOTk1OUU5MkQxQkQxN0ZBNDAwMUFBNDEzIC8qIGpzbWluLnB5IGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1NDIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsaWRhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUUzRDIzOUM5MUI4MjlDMUMwMEJCRUY2NyAvKiBKU01vZHVsZUVudmlyb25t
ZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzE4Q0JDMTFCOEFFRjUxMDBBMjkyOUQgLyogSlNN
b2R1bGVOYW1lc3BhY2VPYmplY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCUUzOURBNEE3MUI3RThC
N0MwMDg0RjMzQSAvKiBKU01vZHVsZVJlY29yZC5oIGluIEhlYWRlcnMgKi8sCkBAIC02NzY0LDYg
KzcyMTEsNyBAQAogCQkJCUE3QzFFQUYwMTc5ODdBQjYwMDI5OURCMiAvKiBKU1N0YWNrSW5saW5l
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MjcwRTE2RjVDRDAwQjM0NDYwIC8qIEpTU3Ry
aW5nLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkU4NTUzOTExMUI5OTY4MDAxQUY1MUUgLyogSlNT
dHJpbmdCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzRTFCREFDREFDMDA4MEZG
NzQgLyogQjNVcHNpbG9uVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3
REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQkyNjAw
QjVBNzE1MkJBQUE3MDA5MUVFNUYgLyogSlNTdHJpbmdKb2luZXIuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDI4MEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU1N0cmluZ1JlZi5oIGluIEhlYWRlcnMg
Ki8sCkBAIC02Nzk1LDYgKzcyNDMsNyBAQAogCQkJCUE3NDgyRTkzMTE2QTdDQUQwMDNCMDcxMiAv
KiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc0ODJC
OTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZhdGUuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcwOUZCODY4MUFFMzM1QzYwMDM5RDA2OSAvKiBKU1dlYWtTZXQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NUJCMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNl
dElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTE0NDI1NjYyMTVFREU5OEQwMDY2QTQ5QiAv
KiBKU1dpdGhTY29wZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZFM0M2MTkxNjdCQUJFRTAwNkQ3
NjBBIC8qIEpTV3JhcHBlck1hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MkUwRTE2RjVD
RDAwQjM0NDYwIC8qIEpTV3JhcHBlck9iamVjdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02ODIxLDkg
KzcyNzAsMTEgQEAKIAkJCQkwRjQ2ODBBMzE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRFeGNlcHRp
b25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBDQjE0QkJCMTcyMDBCRkUyNzIgLyogTExJ
bnRPZmZsaW5lQXNtQ29uZmlnLmggaW4gSGVhZGVycyAqLywKIAkJCQlGRUQyODdCMjE1RUM5QTU3
MDBEQTgxNjEgLyogTExJbnRPcGNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTE5MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0dlbmVyYXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQ2ODBB
NTE0QkE3RjhEMDBCRkUyNzIgLyogTExJbnRTbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGMEI4MzlEMTRCQ0Y0NjYwMDg4NUI0RiAvKiBMTEludFRodW5rcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDRUZBQ0UxODA1RTc1NTAwNDcyQ0U0IC8qIExMVk1BUEkuaCBpbiBIZWFkZXJzICov
LAorCQkJCTBGRUM4NThDMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGQ0VGQUNGMTgwNUU3NTUwMDQ3MkNFNCAvKiBMTFZNQVBJRnVuY3Rpb25z
LmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QUIzODE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURp
c2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBRDMxODA1RURDQzAwNDcyQ0U0
IC8qIExMVk1IZWFkZXJzLmggaW4gSGVhZGVycyAqLywKQEAgLTY4MzYsMTIgKzcyODcsMTQgQEAK
IAkJCQk4NkQzQjJDNjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBI
ZWFkZXJzICovLAogCQkJCUExQTAwOUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxl
ckFSTTY0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFERDE0NjBGRERFQTk4MDAwNkVFQzIgLyog
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1M0MxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzVHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYzQjIzRTAwRkM2MTE4
OTAwNzAzQUE0IC8qIE1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODZDNTY4RTExMUEyMTNFRTAwMDdGN0YwIC8qIE1hY3JvQXNzZW1ibGVyTUlQUy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU2OEM2MzcxQjkwREUwNDAwNDJCQ0IzIC8qIE1hY3JvQXNzZW1ibGVyUHJp
bnRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QTkxMzVFNUUxQzAwOTYzMDEyIC8qIE1h
Y3JvQXNzZW1ibGVyU0g0LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjAxNjFFNDBGM0E4M0MxMDBG
ODQ3MTAgLyogTWFjcm9Bc3NlbWJsZXJYODYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDE2MUU1
MEYzQTgzQzEwMEY4NDcxMCAvKiBNYWNyb0Fzc2VtYmxlclg4Nl82NC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEZFQzg1OEExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODYwMTYxRTYwRjNBODNDMTAwRjg0NzEwIC8qIE1hY3JvQXNzZW1i
bGVyWDg2Q29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzAwODczQTE3Q0JFODUzMDBDM0U2
NDMgLyogTWFwQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3ODUwN0Q3MTdDQkM2
RkQwMDExRjZFNyAvKiBNYXBEYXRhLmggaW4gSGVhZGVycyAqLywKQEAgLTY4NjcsMTIgKzczMjAs
MTQgQEAKIAkJCQlCQzAyRTkxMTBFMTgzOURCMDAwRjkyOTcgLyogTmF0aXZlRXJyb3JDb25zdHJ1
Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMwMkU5MTMwRTE4MzlEQjAwMEY5Mjk3IC8qIE5h
dGl2ZUVycm9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMzNFOEQyMTFCOTAxM0RF
MDAzNDZCNTIgLyogTmF0aXZlU3RkRnVuY3Rpb25DZWxsLmggaW4gSGVhZGVycyAqLywKKwkJCQkw
RkVDODUyODFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGRkI5MjIwMTZEMDMzQjcwMDU1QTVEQiAvKiBOb2RlQ29uc3RydWN0b3JzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQzRjBFMTZGNUNEMDBCMzQ0NjAgLyogTm9kZXMuaCBp
biBIZWFkZXJzICovLAogCQkJCTk5RTQ1QTI4MThBMUIyNTkwMDI2RDg4RiAvKiBOb25kZXRlcm1p
bmlzdGljSW5wdXQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDQxMEUxNkY1Q0QwMEIzNDQ2
MCAvKiBOdW1iZXJDb25zdHJ1Y3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDIwRTE2
RjVDRDAwQjM0NDYwIC8qIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQkMxOEM0NDMwRTE2RjVDRDAwQjM0NDYwIC8qIE51bWJlck9iamVjdC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJMEZFQzg1QzMxQkUxNjdBMDAwODBGRjc0IC8qIEIzSGVhcFJhbmdlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ0NDBFMTZGNUNEMDBCMzQ0NjAgLyogTnVtYmVyUHJvdG90eXBl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDJEMzkzOTEwM0U0NTYwMDA3RENCNTIgLyogTnVtZXJp
Y1N0cmluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1RUE3MTBDMTlGNkRFODIwMDk4RjVFQyAv
KiBvYmpjX2dlbmVyYXRvci5weSBpbiBIZWFkZXJzICovLApAQCAtNjg4Nyw2ICs3MzQyLDcgQEAK
IAkJCQlFMTI0QThGNzBFNTU1Nzc1MDAzMDkxRjEgLyogT3BhcXVlSlNTdHJpbmcuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUFEREIxRjYzMThENzdEQkUwMDlCNThBOCAvKiBPcGFxdWVSb290U2V0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5QjBFRDFEM0FFMDBGMUY2ODEgLyogT3Bjb2RlLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3QzFCREFDREM3MDA4MEZGNzQgLyogQWlySGFuZGxl
Q2FsbGVlU2F2ZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkJEQzJDMTUxRkRFOTEwMENEODkx
MCAvKiBPcGVyYW5kcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTcwNDQ3RUExN0EwQkQ0NjAwRjU4
OThFIC8qIE9wZXJhbmRzSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NDgwRTE2
RjVDRDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLApAQCAtNjkwMCwxMyAr
NzM1NiwxOCBAQAogCQkJCTBGRjlDRTc0MUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0Fj
Y2Vzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFODM0MTgxQTZFRjk3QjAwRDA0ODQ3IC8qIFBv
bHltb3JwaGljQ2FsbFN0dWJSb3V0aW5lLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk4MjA2MTE2
QkZFMzgzMDAyNDBEMDIgLyogUHJlY2lzZUp1bXBUYXJnZXRzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU3QTFCREFDREM3MDA4MEZGNzQgLyogQWlyR2VuZXJhdGlvbkNvbnRleHQuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGRUM4NUJEMUJFMTQ2MkYwMDgwRkY3NCAvKiBCM1JlZHVjZVN0cmVu
Z3RoLmggaW4gSGVhZGVycyAqLywKIAkJCQk4Njg5MTZCMDE1NUYyODYzMDBDQjJCOUEgLyogUHJp
dmF0ZU5hbWUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTIyMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM09wY29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NTAwRTE2RjVDRDAwQjM0NDYw
IC8qIFByb2ZpbGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk1Q0Q0NTc3MEUxQzRGREQwMDg1MzU4
RSAvKiBQcm9maWxlR2VuZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1MTBFMTZG
NUNEMDBCMzQ0NjAgLyogUHJvZmlsZU5vZGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjcyOUE1
MTY2QUQzNTEwMDBGNUJBMyAvKiBQcm9maWxlckJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU0NzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGNzI5QjkxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjEzOTEyQTE2NzcxQzM2MDA5Q0NCMDcgLyogUHJvZmlsZXJCeXRl
Y29kZVNlcXVlbmNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUxQTFCREFDREFDMDA4MEZG
NzQgLyogQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3
MjlCQTE2NkFEMzYwMDAwRjVCQTMgLyogUHJvZmlsZXJDb21waWxhdGlvbi5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZGNzI5QkIxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsYXRpb25L
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkY3MjlCQzE2NkFEMzYwMDAwRjVCQTMgLyogUHJv
ZmlsZXJDb21waWxlZEJ5dGVjb2RlLmggaW4gSGVhZGVycyAqLywKQEAgLTY5MjgsMTAgKzczODks
MTMgQEAKIAkJCQkwRkI3RjM5QzE1RUQ4RTQ2MDBGMTY3QjIgLyogUHJvcGVydHlTdG9yYWdlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ1NjBFMTZGNUNEMDBCMzQ0NjAgLyogUHJvdGVjdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3NEMzM0IxNkFBMkQ5NTAwNjJGMDFEIC8qIFByb3RvdHlw
ZU1hcC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODQxQkRBQ0RDNzAwODBGRjc0IC8qIEFp
clBoYXNlU2NvcGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNTc4MEEyMThGRTFFOTgwMDFFNzJE
OSAvKiBQdXJlTmFOLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjE1Q0QyMzFCQTVGOTg2MDAzMUZG
RDMgLyogUHV0QnlJZEZsYWdzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjkzMzJBNDE0Q0E3REQ5
MDA4NUYzQzYgLyogUHV0QnlJZFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1ODAx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOTNCNEFB
MThCOTJDNEQwMDE3OEEzRiAvKiBQdXRCeUlkVmFyaWFudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
MEZFQzg1NzkxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckdlbmVyYXRlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjBDRDRDMjE1RjFBNjA3MDAzMkYxQzAgLyogUHV0RGlyZWN0SW5kZXhNb2RlLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjlGQzhDNTE0RTFCNjA0MDBENTJBRTAgLyogUHV0S2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ3Qjg0NjMwRTZERTZCMTAwNDc3NUE0IC8qIFB1dFByb3BlcnR5
U2xvdC5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTUyLDYgKzc0MTYsNyBAQAogCQkJCTBGQzMxNDEy
MTgxNDU1OTEwMDAzMzIzMiAvKiBSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU3
RDIzRUUxODkxQjU1NDAwMzFDN0ZBIC8qIFJlZ3VsYXJFeHByZXNzaW9uLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkI3RjM5RDE1RUQ4RTQ2MDBGMTY3QjIgLyogUmVqZWN0LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODUyNjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RTgxODIzNDBCMzAwQTgyRTY5IC8qIFJlbW90ZUlu
c3BlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RUExODIzNDBCNDAwQTgyRTY5IC8q
IFJlbW90ZUluc3BlY3RvckNvbnN0YW50cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVCQTE1RjAx
ODIzNDVBRjAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3RvckRlYnVnZ2FibGUuaCBpbiBIZWFkZXJz
ICovLApAQCAtNjk1OSw2ICs3NDI0LDcgQEAKIAkJCQlBNUJBMTVFRDE4MjM0MEI0MDBBODJFNjkg
LyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYy
NEU1NTExN0VFMjc0OTAwQUJCMjE3IC8qIFJlcGF0Y2guaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
OUVCQ0I3MEU4QzZENEEwMDg3MjJDQyAvKiBSZXN1bHRUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwRkVDODU0NDFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzBCMEE5RDExQTlCNjY0NjAwMDEzMDZBIC8qIFJ1bnRpbWVGbGFncy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJNTJDMDYxMUYxQUE1MUUxQzAwQjRBREJBIC8qIFJ1bnRpbWVUeXBlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDMjJCMzFCOTE0MDU3N0Q3MDBEQjQ3NUEgLyogU2FtcGxpbmdDb3VudGVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTY5ODgsNiArNzQ1NCw3IEBACiAJCQkJQTcwOUYyRjAxN0Ew
QUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQw
MDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRUM4NTBFMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0MzJWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJv
dmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkQxMkVGMjk1MzAwMTg0QTFG
IC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGVJdGVtLmggaW4gSGVhZGVycyAqLywKQEAgLTcwMDcsNiAr
NzQ3NCw3IEBACiAJCQkJQkMxOEM0NkEwRTE2RjVDRDAwQjM0NDYwIC8qIFN0cmluZ1Byb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxM0IxMzRGRjBBNjAwQUZBREI1IC8qIFN0cm9u
Zy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ1NzIyODYxNDM3RTE0MDAwNUZERTI2IC8qIFN0cm9u
Z0lubGluZXMuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRUM4NTgyMUJEQUNEQzcwMDgwRkY3NCAv
KiBBaXJMaXZlbmVzcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERTNBQjgwRTZDODJGNTAwMTQ1
M0E3IC8qIFN0cnVjdHVyZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0U0RUU3MDkwRUJCNzk2MzAw
NTkzNEFBIC8qIFN0cnVjdHVyZUNoYWluLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFBQTMxMjE4
QkQ0OUQxMDAzOTRDQzggLyogU3RydWN0dXJlSURCbG9iLmggaW4gSGVhZGVycyAqLywKQEAgLTcw
NDMsMTAgKzc1MTEsMTIgQEAKIAkJCQkwRjJENERFQTE5ODMyREFDMDA3RDRCMTkgLyogVHlwZUxv
Y2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk1MkIzMTEwMTE5NzVCNDY3MDA4MDg1N0MgLyog
VHlwZUxvY2F0aW9uQ2FjaGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRkI2QzM5MUFGNDhEREMw
MERCMUJGNyAvKiBUeXBlb2ZUeXBlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU0MDFCREFD
REFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTUyQzk1MkI3
MTlBMjg5ODUwMDY5QjM4NiAvKiBUeXBlUHJvZmlsZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
MkQ0REVDMTk4MzJEQzQwMDdENEIxOSAvKiBUeXBlUHJvZmlsZXJMb2cuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkQ0REYwMTk4MzJERDYwMDdENEIxOSAvKiBUeXBlU2V0LmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRkY0Mjc0QjE1OEVCRTkxMDA0Q0I5RkYgLyogdWRpczg2LmggaW4gSGVhZGVycyAq
LywKKwkJCQkwRkVDODRGRjFCREFDREFDMDA4MEZGNzQgLyogQjNBcmd1bWVudFJlZ1ZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkY0Mjc0MTE1OEVCRThEMDA0Q0I5RkYgLyogdWRpczg2X2Rl
Y29kZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGNDI3NDIxNThFQkU5MTAwNENCOUZGIC8qIHVk
aXM4Nl9leHRlcm4uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRjQyNzQ0MTU4RUJFOTEwMDRDQjlG
RiAvKiB1ZGlzODZfaW5wdXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzA4NCw4ICs3NTU0LDEwIEBA
CiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMTQyRTMxM0MxMzRGRjBBNjAwQUZBREI1IC8qIFdlYWsuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTBGRUM4NTAyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0Jhc2ljQmxvY2tJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEU4NEY5RjE0RUUxQUNDMDBENkQ1RDQgLyogV2Vha0Js
b2NrLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJGQ0U2OTEwQ0RCMUZDMDAzNjRDQ0UgLyogV2Vh
a0dDTWFwLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODUzMzFCREFDREFDMDA4MEZGNzQgLyog
QjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBRDg2QTkzRTFBQTREODhEMDAy
RkU3N0YgLyogV2Vha0dDTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTRGNzI1NjYx
NEVFMjY1RTAwQjE2NTJCIC8qIFdlYWtIYW5kbGVPd25lci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRFODRGQTIxNEVFMUFDQzAwRDZENUQ0IC8qIFdlYWtJbXBsLmggaW4gSGVhZGVycyAqLywKQEAg
LTcxMDcsOSArNzU3OSwxMiBAQAogCQkJCTk5NTlFOTJFMUJEMTdGQTQwMDFBQTQxMyAvKiB4eGQu
cGwgaW4gSGVhZGVycyAqLywKIAkJCQk0NTE1MzlCOTEyREM5OTQ1MDBFRjdBQzQgLyogWWFyci5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRCODUxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRl
cnByZXRlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODU3NDFCREFDREM3
MDA4MEZGNzQgLyogQWlyQ0NhbGxTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjcwNEI4
NzEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODY3MDRC
ODgxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJQYXJzZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2
NzA0QjhBMTJEQkEzMzcwMEE5RkU3QiAvKiBZYXJyUGF0dGVybi5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJMEZFQzg1ODExQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc3RJbmxpbmVzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk4NjcwNEI0MzEyREI4QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nl
c3NpbmcgPSAwOwpAQCAtNzEzNCw2ICs3NjA5LDIyIEBACiAJCQlwcm9kdWN0UmVmZXJlbmNlID0g
MEZDRUZBQjYxODA1RDYxNjAwNDcyQ0U0IC8qIGxpYmxsdm1Gb3JKU0MuZHlsaWIgKi87CiAJCQlw
cm9kdWN0VHlwZSA9ICJjb20uYXBwbGUucHJvZHVjdC10eXBlLmxpYnJhcnkuZHluYW1pYyI7CiAJ
CX07CisJCTBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAvKiB0ZXN0YjMgKi8gPSB7CisJCQlpc2Eg
PSBQQlhOYXRpdmVUYXJnZXQ7CisJCQlidWlsZENvbmZpZ3VyYXRpb25MaXN0ID0gMEZFQzg1QTgx
QkRCNUNGMTAwODBGRjc0IC8qIEJ1aWxkIGNvbmZpZ3VyYXRpb24gbGlzdCBmb3IgUEJYTmF0aXZl
VGFyZ2V0ICJ0ZXN0YjMiICovOworCQkJYnVpbGRQaGFzZXMgPSAoCisJCQkJMEZFQzg1OTUxQkRC
NUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1QTIxQkRCNUNGMTAwODBGRjc0
IC8qIEZyYW1ld29ya3MgKi8sCisJCQkpOworCQkJYnVpbGRSdWxlcyA9ICgKKwkJCSk7CisJCQlk
ZXBlbmRlbmNpZXMgPSAoCisJCQkpOworCQkJbmFtZSA9IHRlc3RiMzsKKwkJCXByb2R1Y3ROYW1l
ID0gdGVzdGFwaTsKKwkJCXByb2R1Y3RSZWZlcmVuY2UgPSAwRkVDODVBRDFCREI1Q0YxMDA4MEZG
NzQgLyogdGVzdGIzICovOworCQkJcHJvZHVjdFR5cGUgPSAiY29tLmFwcGxlLnByb2R1Y3QtdHlw
ZS50b29sIjsKKwkJfTsKIAkJMEZGOTIyQzMxNEY0NkIxMzAwNDFBMjRFIC8qIEpTQ0xMSW50T2Zm
c2V0c0V4dHJhY3RvciAqLyA9IHsKIAkJCWlzYSA9IFBCWE5hdGl2ZVRhcmdldDsKIAkJCWJ1aWxk
Q29uZmlndXJhdGlvbkxpc3QgPSAwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29u
ZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJh
Y3RvciIgKi87CkBAIC03Mjg5LDYgKzc3ODAsNyBAQAogCQkJCTE0QkQ1OUJFMEEzRThGOTAwMEJB
RjU5QyAvKiB0ZXN0YXBpICovLAogCQkJCTkzMkY1QkRBMDgyMkExQzcwMDczNjk3NSAvKiBqc2Mg
Ki8sCiAJCQkJNjUxMTIyRjcxNDA0NkE0QzAwMkIxMDFEIC8qIHRlc3RSZWdFeHAgKi8sCisJCQkJ
MEZFQzg1OTQxQkRCNUNGMTAwODBGRjc0IC8qIHRlc3RiMyAqLywKIAkJCQk1RDZCMkE0NzE1MkI5
RTE3MDA1MjMxREUgLyogVGVzdCBUb29scyAqLywKIAkJCSk7CiAJCX07CkBAIC03NTM2LDYgKzgw
MjgsMTQgQEAKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0g
MDsKIAkJfTsKKwkJMEZFQzg1OTUxQkRCNUNGMTAwODBGRjc0IC8qIFNvdXJjZXMgKi8gPSB7CisJ
CQlpc2EgPSBQQlhTb3VyY2VzQnVpbGRQaGFzZTsKKwkJCWJ1aWxkQWN0aW9uTWFzayA9IDIxNDc0
ODM2NDc7CisJCQlmaWxlcyA9ICgKKwkJCQkwRkVDODVBRjFCREI1RDVFMDA4MEZGNzQgLyogdGVz
dGIzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJKTsKKwkJCXJ1bk9ubHlGb3JEZXBsb3ltZW50UG9z
dHByb2Nlc3NpbmcgPSAwOworCQl9OwogCQkwRkY5MjJDNDE0RjQ2QjEzMDA0MUEyNEUgLyogU291
cmNlcyAqLyA9IHsKIAkJCWlzYSA9IFBCWFNvdXJjZXNCdWlsZFBoYXNlOwogCQkJYnVpbGRBY3Rp
b25NYXNrID0gMjE0NzQ4MzY0NzsKQEAgLTc1OTEsNiArODA5MSw3IEBACiAJCQkJMEY1NUYwRjQx
NEQxMDYzOTAwQUM3NjQ5IC8qIEFic3RyYWN0UEMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5QkQxMDdFQzM3NjAwNDI3QTQ4IC8qIEFyZ0xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY3NDNCQUExNkI4ODI0OTAwOUY5Mjc3IC8qIEFSTTY0RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTcxMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJCYXNpY0Jsb2NrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTg2RDNCMkMzMTAxNTZCREUwMDI4NjVFNyAvKiBBUk1Bc3Nl
bWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjVDMDI4NTAxNzE3OTVFMjAwMzUxRTM1IC8q
IEFSTXY3RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1QzAyODVDMTcxNzk2
NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NTk4LDgg
KzgwOTksMTAgQEAKIAkJCQlBN0E4QUYzNDE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGQzk5RDQxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5
QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0E4QUYz
NjE3QURCNUYzMDA1QUIxNzQgLyogQXJyYXlCdWZmZXJWaWV3LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTNEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Vwc2lsb25WYWx1ZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDdGMzlCRjEwN0VDMzc2MDA0MjdBNDggLyogQXJyYXlDb25zdHJ1Y3Rv
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0JEQUVDODE3RjRFQTE0MDBGNjE0MEMgLyogQXJy
YXlJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNTFCREFD
REFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwRjYzOTQ1NDE1RDA3MDU1MDA2QTU5N0MgLyogQXJyYXlQcm9maWxlLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCTE0N0YzOUMwMTA3RUMzNzYwMDQyN0E0OCAvKiBBcnJheVByb3RvdHlwZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjI0RTU0MDE3RUE5RjU5MDBBQkIyMTcgLyogQXNzZW1ibHlI
ZWxwZXJzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzYyMCw4ICs4MTIzLDEwIEBACiAJCQkJMTQy
OUQ4REQwRUQyMjA1QjAwQjg5NjE5IC8qIENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2MkVDOUJCNjFCN0VCMDdDMDAzMDNBRDEgLyogQ2FsbEZyYW1lU2h1ZmZsZURhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJNjJENzU1RDYxQjg0RkI0NjAwMTgwMUZBIC8qIENhbGxGcmFtZVNo
dWZmbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTEzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM0NvbnRyb2xWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkQ3NTVENTFCODRGQjQw
MDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXIzMl82NC5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk2MkQ3NTVENDFCODRGQjNEMDAxODAxRkEgLyogQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODUzOTFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjBCODNCMDE0QkNGNzE2MDA4ODVCNEYgLyogQ2Fs
bExpbmtJbmZvLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOTMzMjlEMTRDQTdEQzMwMDg1RjND
NiAvKiBDYWxsTGlua1N0YXR1cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2Mjc2NzMyMzFCNjgw
QzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03NjM0LDYgKzgx
MzksNyBAQAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENvZGVPcmlnaW4u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQ
cm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTkzMUJEQjFFMTAwMDgwRkY3NCAv
KiBBaXJHZW5lcmF0ZWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAw
QTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0Mx
NjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzY0MSw2ICs4MTQ3LDcgQEAKIAkJCQlBNzA5RjJGMjE3QTBBQzJBMDA1MTJF
OTggLyogQ29tbW9uU2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1NTNBMzMxMTdB
MUYxRUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUE3RTVBM0E3MTc5NzQzMkQwMEU4OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4QjFCREFDREM3MDA4MEZGNzQgLyogQWlyU3Rh
Y2tTbG90LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUMyMTA3RUMzNzYwMDQyN0E0OCAv
KiBDb21wbGV0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNkZDNzUwMTk2MTEwQTgwMEUx
RDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NkIxNkQ4
MTJFQjVCNTkwMDFCRUMxQiAvKiBDb25zZXJ2YXRpdmVSb290cy5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTc2NTcsNiArODE2NCw3IEBACiAJCQkJMkExMTEyNDUxOTJGQ0U3OTAwNUVFMThEIC8qIEN1
c3RvbUdldHRlclNldHRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2MkUzRDVGMDFCOEQwQjcz
MDBCODY4QkIgLyogRGF0YUZvcm1hdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCNjZERTE3
QjZCNUFCMDBBN0FFM0YgLyogRGF0YVZpZXcuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
QkMxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMTQ3RjM5QzMxMDdFQzM3NjAwNDI3QTQ4IC8qIERhdGVDb25zdHJ1Y3Rvci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNDdGMzlDNDEwN0VDMzc2MDA0MjdBNDggLyogRGF0ZUNvbnZlcnNp
b24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzUxMDdFQzM3NjAwNDI3QTQ4IC8qIERh
dGVJbnN0YW5jZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc2NjgsNiArODE3Niw3IEBACiAJCQkJ
MEZDNzEyREUxN0NEODc3OTAwOENDOTNDIC8qIERlZmVycmVkQ29tcGlsYXRpb25DYWxsYmFjay5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQlGRTUwNjg2NzFBRTI1RTI4MDAwOURBQjcgLyogRGVmZXJy
ZWRTb3VyY2VEdW1wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3N0E0MjNEMTdBMEJCRkQwMEE4
REI4MSAvKiBERkdBYnN0cmFjdEhlYXAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1OEQx
QkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjU1QzE5
NDE3Mjc2RTQ2MDBDRUFCRkQgLyogREZHQWJzdHJhY3RWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkQzRTQwMTFCNjE4QUFGMDBDODBFMUUgLyogREZHQWRhcHRpdmVJbmZlcnJlZFByb3Bl
cnR5VmFsdWVXYXRjaHBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMThEM0NGMUI1NUE2
RTAwMDJDNUM5RiAvKiBERkdBZGFwdGl2ZVN0cnVjdHVyZVdhdGNocG9pbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03Njc3LDYgKzgxODYsNyBAQAogCQkJCTBGNjM5NDg0MTVFNDgxMTgwMDZBNTk3
QyAvKiBERkdBcnJheU1vZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdEOUEyOTQxN0EwQkM3
NDAwRUUyNjE4IC8qIERGR0F0VGFpbEFic3RyYWN0U3RhdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY2NjZFQzYxODM1NjcyQjAwRDAxN0YxIC8qIERGR0F2YWlsYWJpbGl0eS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODU4NzFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BlY2lhbC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZhaWxh
YmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNzE0Q0E0MTZFQTkyRjAwMEYzRUJF
QiAvKiBERkdCYWNrd2FyZHNQcm9wYWdhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3RDg5Q0YyMTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCYXNpY0Jsb2NrLmNwcCBpbiBTb3VyY2Vz
ICovLApAQCAtNzY4NSw2ICs4MTk1LDcgQEAKIAkJCQk4NkVDOURDNDEzMjhERjgyMDAyQjJBRDcg
LyogREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEODJFMjExNDE3
MkNFMzAwMTc5Qzk0IC8qIERGR0NhcGFiaWxpdGllcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RkZGQzk1NzE0RUY5MEEwMDBDNzI1MzIgLyogREZHQ0ZBUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8s
CisJCQkJMEZFQzg1NDYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYzQjNBMjcxNTQ0Qzk5NTAwM0VEMEZGIC8qIERGR0NGR1NpbXBsaWZpY2F0
aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDM2OTQxQUU5Q0MzMzAwMEQ0REZC
IC8qIERGR0NsZWFuVXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzdBNDIzRjE3QTBC
QkZEMDBBOERCODEgLyogREZHQ2xvYmJlcml6ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3MjIs
NiArODIzMyw3IEBACiAJCQkJMkE4ODA2NzgxOTEwN0Q1NTAwQ0IwQkJCIC8qIERGR0Z1bmN0aW9u
V2hpdGVsaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RUM5REM3MTMyOERGODIwMDJCMkFE
NyAvKiBERkdHcmFwaC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJGQ0NGOTE4QTYwMDcwMDAx
QTI3RjggLyogREZHR3JhcGhTYWZlcG9pbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
NkQxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckFsbG9jYXRlU3RhY2suY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJMEZCMTc2NjAxOTZCOEY5RTAwOTEwNTJBIC8qIERGR0hlYXBMb2NhdGlvbi5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkM4NDE2ODFCQThDMzIxMDA2MTgzN0QgLyogREZHSW5mZXJyZWRU
eXBlQ2hlY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNEQ5MDUxN0EwQkFBODAwNkJBNTU0
IC8qIERGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzc2NCwx
NCArODI3NiwxNyBAQAogCQkJCTBGQzA5NzcyMTQ2OTNBRjkwMENGMjQ0MiAvKiBERkdPU1JFeGl0
Q29tcGlsZXI2NC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjcwMjVBOTE3MTRCMEZBMDAzODJD
MEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MzkyQzg5MUI0NjE4ODQwMDg0NDcyOCAvKiBERkdPU1JFeGl0RnV6ei5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQkwRkVDODU3NTFCREFDREM3MDA4MEZGNzQgLyogQWlyQ29kZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVGQzlBQTE2ODFBM0IzMDA1NjdGNTMgLyogREZHT1NSRXhpdEp1bXBQbGFj
ZWhvbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjIzNUJFRDE3MTc4RTczMDA2OTBDN0Yg
LyogREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNjIzNzk3
MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEZGRkM5NUIxNEVGOTBBRDAwQzcyNTMyIC8qIERGR1BoYXNlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTBGMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0NjRWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFQTE5RDBCQTdEMDBCMUQxQjUgLyogREZH
UGhpQ2hpbGRyZW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTc4QTk3N0ExNzk3MzhCODAwOURG
NzQ0IC8qIERGR1BsYW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCRTBGNzQxNkMxREIwOTAw
ODJDNUU4IC8qIERGR1ByZWRpY3Rpb25JbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkZGQzk1RDE0RUY5MEIzMDBDNzI1MzIgLyogREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjNFMDFBQTE5RDM1M0E1
MDBGNjFCN0YgLyogREZHUHJlUG9zdE51bWJlcmluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkw
RjJCOUNFQzE5RDBCQTdEMDBCMUQxQjUgLyogREZHUHJvbW90ZWRIZWFwTG9jYXRpb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCMTc2NjIxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc3ODksNiArODMwNCw4IEBACiAJCQkJMEZDMjBDQjUx
ODUyRTJDNjAwQzlFOTU0IC8qIERGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY4OTNCREIxOTM2RTIzQzAwMTIxMUY0IC8qIERGR1N0cnVjdHVyZUFic3Ry
YWN0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY3OTA4NTUxOUEyOTBCMjAwRjYzMTBD
IC8qIERGR1N0cnVjdHVyZVJlZ2lzdHJhdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGRUM4NTM0MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdFZhbHVlLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTBGRUM4NTI5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1BoYXNlU2NvcGUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyRkNDRkUxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVh
ZERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDMDk3QTExNDZCMjhDQTAwQ0YyNDQyIC8q
IERGR1RodW5rcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMyNzE3RDUxRjU3MDBDQTJD
NDAgLyogREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKQEAg
LTc4MTYsNiArODMzMyw3IEBACiAJCQkJMkE4MzYzODUxOEQ3RDBFRTAwMDBFQkNDIC8qIEVkZW5H
Q0FjdGl2aXR5Q2FsbGJhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJOTlFNDVBMjUxOEExQjI1
OTAwMjZEODhGIC8qIEVuY29kZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlD
NzEwN0VDMzc2MDA0MjdBNDggLyogRXJyb3IuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1
MDkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
N0YzOUM4MTA3RUMzNzYwMDQyN0E0OCAvKiBFcnJvckNvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZFQjU4QzE0MTg3QjhCMTYwMDk4RUYwQiAvKiBFcnJvckhhbmRsaW5nU2NvcGUu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5QzkxMDdFQzM3NjAwNDI3QTQ4IC8qIEVycm9y
SW5zdGFuY2UuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODYwLDYgKzgzNzgsNyBAQAogCQkJCTBG
OEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MDAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQmFzaWNC
bG9jay5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQxQjUgLyog
RlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4QTMxQjE3RDUxRjIyMDBD
QTJDNDAgLyogRlRMT1NSRW50cnkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYyMzVCREMxNzE3
OEUxQzAwNjkwQzdGIC8qIEZUTE9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03ODY3LDYg
KzgzODYsNyBAQAogCQkJCTBGRUEwQTJBMTcwOTYyOTYwMEJCNzIyQyAvKiBGVExPdXRwdXQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0ODUzMjkxODdERkRFQzAwODNCNjg3IC8qIEZUTFJlY292
ZXJ5T3Bjb2RlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4OTFCREFD
REM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRoaW5nLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGMjVGMUIxMTgxNjM1RjMwMDUyMkYzOSAvKiBGVExTbG93UGF0aENhbGwuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEYyNUYxQjMxODE2MzVGMzAwNTIyRjM5IC8qIEZUTFNsb3dQYXRoQ2FsbEtl
eS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjlEMzM5QTE4MDNBREI3MDA3M0MyQkMgLyogRlRM
U3RhY2tNYXBzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg3OCw2ICs4Mzk4LDcgQEAKIAkJCQkx
NDdGMzlDQjEwN0VDMzc2MDA0MjdBNDggLyogRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkYwRjE5RjE2QjcyQTE3MDA1REY5NUIgLyogRnVuY3Rpb25FeGVjdXRh
YmxlRHVtcC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk1MkIzMTBGRDE5NzRBRTg3MDA4MDg1N0Mg
LyogRnVuY3Rpb25IYXNFeGVjdXRlZENhY2hlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NUMyMUJFMTY3QTAwMDgwRkY3NCAvKiBCM0hlYXBSYW5nZS5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQlGRTRCRkYyQjFBRDQ3NkU3MDAwODhGODcgLyogRnVuY3Rpb25PdmVycmlkZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMTQ3RjM5Q0MxMDdFQzM3NjAwNDI3QTQ4IC8qIEZ1bmN0aW9uUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTYyRDJEMzhGMUFERjEwM0YwMDAyMDZDMSAvKiBG
dW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzg5OSw2ICs4NDIwLDcgQEAK
IAkJCQlBNUZEMDA3NTE4OUIwMzhDMDA2MzMyMzEgLyogSWRlbnRpZmllcnNGYWN0b3J5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyNUY4QkNEMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRh
bFN3ZWVwZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYxM0UwNEUxNjE2NEExRjAwREM4REU3
IC8qIEluZGV4aW5nVHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUyNzFCREFDREFD
MDA4MEZGNzQgLyogQjNQYXRjaHBvaW50VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEYw
QTc1MjIxQjk0QkZBOTAwMTEwNjYwIC8qIEluZmVycmVkVHlwZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkZDOTIxMTFCOTRENERGMDA3MURENjYgLyogSW5mZXJyZWRUeXBlVGFibGUuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03OTA2LDYgKzg0MjgsNyBAQAogCQkJCTlFQTVDN0Ey
MTkwRjA4ODcwMDUwOEVCRSAvKiBJbml0aWFsaXplTExWTU1hYy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk5RTcyOTQwODE5MEYwMjFFMDAxQTkxQjUgLyogSW5pdGlhbGl6ZUxMVk1QT1NJWC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQk5RTcyOTQwNzE5MEYwMUE1MDAxQTkxQjUgLyogSW5pdGlhbGl6
ZVRocmVhZGluZy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU3QjFCREFDREM3MDA4MEZG
NzQgLyogQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTUxM0U1
QjcxODVCOEJEMzAwN0U5NUFEIC8qIEluamVjdGVkU2NyaXB0LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUE1MTRCMkMyMTg1QTY4NDQwMEYzQzdDQiAvKiBJbmplY3RlZFNjcmlwdEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTU4RTM1OTExODYwREVDRjAwMUYyNEZFIC8qIEluamVjdGVkU2Ny
aXB0SG9zdC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTc5MTcsNiArODQ0MCw3IEBACiAJCQkJQTU5
M0NGODYxODQwMzhDQTAwQkZDRTI3IC8qIEluc3BlY3RvckFnZW50UmVnaXN0cnkuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTU5M0NGN0MxODQwMzYwMzAwQkZDRTI3IC8qIEluc3BlY3RvckJhY2tl
bmREaXNwYXRjaGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg3MTg1NjgzMzUwMDJF
RDY5MiAvKiBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcnMuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg1MzcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlBNUZEMDA4MTE4OUIxOTFBMDA2MzMyMzEgLyogSW5zcGVjdG9yQ29uc29sZUFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1N0QyM0U1MTg5MENFQkYwMDMxQzdGQSAvKiBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MzI0Mzg5MTg1
NjgzMzUwMDJFRDY5MiAvKiBJbnNwZWN0b3JGcm9udGVuZERpc3BhdGNoZXJzLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtNzk3MywxMyArODQ5NywxNyBAQAogCQkJCTg2RkE5RTkxMTQyQkJCMkUwMDE3
NzNCNyAvKiBKU0JvdW5kRnVuY3Rpb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0MEY4QUYw
QTUwOEQyMDAwMDVGMDYxIC8qIEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNDQwRjg5MjBBNTA4QjEwMDAwNUYwNjEgLyogSlNDYWxsYmFja0Z1bmN0aW9uLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTZGMUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJBcmcu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRBQkRGNjAwQTQzN0ZFRjAwRUNDQTAxIC8qIEpTQ2Fs
bGJhY2tPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNjU3Q0Y0NTgxOUJGNjY2MjAwNEFD
QkYyIC8qIEpTQ2FsbGVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3RDgwMUE4MTg4MEQ2QTgw
MDI2QzM5QiAvKiBKU0NCdWlsdGlucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlEMTEw
N0VDMzc2MDA0MjdBNDggLyogSlNDZWxsLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NUM1
MUJFMTZGNUEwMDgwRkY3NCAvKiBCM0VmZmVjdHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3
RjM5RDYxMDdFQzM3NjAwNDI3QTQ4IC8qIEpTQ0pTVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMTQ0MEZDRTQwQTUxRTQ2QjAwMDVGMDYxIC8qIEpTQ2xhc3NSZWYuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTUzQ0UwODcxOEJDMUE1NjAwQkVERjc2IC8qIEpTQ29uc29sZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRkVDODU5MDFCREFDREM3MDA4MEZGNzQgLyogQWlyVmFsaWRhdGUuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzMxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckNDYWxs
U3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxNjE2N0JBQkVFMDA2RDc2MEEg
LyogSlNDb250ZXh0Lm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzAwQTNFOTFGNjAwQkFG
NTlDIC8qIEpTQ29udGV4dFJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzIwMjhCNjE3OTc2
MDFFMDA5ODAyOEMgLyogSlNDVGVzdFJ1bm5lclV0aWxzLmNwcCBpbiBTb3VyY2VzICovLApAQCAt
Nzk5MCwxNiArODUxOCwxOSBAQAogCQkJCUZFMzg0RUU3MUFEREI3QUQwMDU1REUyQyAvKiBKU0Rv
bGxhclZNUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQ3MTA3RUMzNzYw
MDQyN0E0OCAvKiBKU0Vudmlyb25tZW50UmVjb3JkLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0
MDU2NkQ2MTA3RUMyNzEwMDVEQkM4RCAvKiBKU0Z1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTBGRUM4NTFEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM0xvd2VyVG9BaXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJNzk3RTA3QTkxQjhGQ0ZCOTAwODQwMEJBIC8qIEpTR2xvYmFsTGV4aWNhbEVu
dmlyb25tZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUQyMTA3RUMzNzYwMDQyN0E0
OCAvKiBKU0dsb2JhbE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNUZEMDA4NTE4OUIx
QjdFMDA2MzMyMzEgLyogSlNHbG9iYWxPYmplY3RDb25zb2xlQWdlbnQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTVDM0ExQTUxOEMwNDkwMjAwQzk1OTNBIC8qIEpTR2xvYmFsT2JqZWN0Q29uc29s
ZUNsaWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUwRDFCREFDREFDMDA4MEZGNzQg
LyogQjNDb25zdDMyVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU5NDU1OTIxODI0NzQ0
NzAwQ0MzODQzIC8qIEpTR2xvYmFsT2JqZWN0RGVidWdnYWJsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTdEMjNFOTE4OTFCMDc3MDAzMUM3RkEgLyogSlNHbG9iYWxPYmplY3REZWJ1Z2dlckFn
ZW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0RTlEMTdCMTA3RUM0NjkwMDREREEyMSAvKiBK
U0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTEwMDdDMDE4
N0NDM0M2MDBCMzg4NzkgLyogSlNHbG9iYWxPYmplY3RJbnNwZWN0b3JDb250cm9sbGVyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUE1MEU0QjYzMTg4MDlERDUwMDY4QTQ2RCAvKiBKU0dsb2JhbE9i
amVjdFJ1bnRpbWVBZ2VudC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkEyOTE4OEYxMDU5
MDAxMTBGMTQgLyogSlNHbG9iYWxPYmplY3RTY3JpcHREZWJ1Z1NlcnZlci5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQkwRkVDODUyMzFCREFDREFDMDA4MEZGNzQgLyogQjNPcmlnaW4uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTUxM0U1QkYxODVCRkFDQzAwN0U5NUFEIC8qIEpTSW5qZWN0ZWRTY3Jp
cHRIb3N0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MTNFNUMxMTg1QkZBQ0MwMDdFOTVBRCAv
KiBKU0luamVjdGVkU2NyaXB0SG9zdFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlF
MzNGNTA4MDFCODQyOUE0MDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2UuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC04MDE4LDYgKzg1NDksNyBAQAogCQkJCUUzMThDQkMwMUI4QUVGNTEwMEEyOTI5
RCAvKiBKU01vZHVsZU5hbWVzcGFjZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzlE
QTRBNjFCN0U4QjdDMDA4NEYzM0EgLyogSlNNb2R1bGVSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTMzRThEMUMxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1MTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzR2VuZXJh
dGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcyNzAwOTAwREFDNkJCQzAwRTU0OEQ3IC8qIEpT
Tm90QW5PYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDQxMDdFQzM3NjAwNDI3
QTQ4IC8qIEpTT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0ODJCN0U0MEE0MzA3NjAw
MDUxN0NGQyAvKiBKU09iamVjdFJlZi5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwMzEsNiArODU2
Myw3IEBACiAJCQkJRTNFRjg4NzQxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1lSXRl
cmF0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODYyNTUzRDExNjEzNkRBOTAwOUYxN0QwIC8q
IEpTUHJveHkuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTU1MkMzN0YxQUREQjhGRTAwMTM5NzI2
IC8qIEpTUmVtb3RlSW5zcGVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTExMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NvbnN0RG91YmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJOTkyOEZGM0IxOEFDNEFFQzAwQjhDRjEyIC8qIEpTUmVwbGF5SW5wdXRzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTE0ODc0QUU1MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE3QzBDNEFEMTY4MTA2N0UwMDE3MDExRCAvKiBKU1NjcmlwdFJlZi5j
cHAgaW4gU291cmNlcyAqLywKQEAgLTgwNTksNiArODU5Miw3IEBACiAJCQkJNzA5RkI4NjcxQUUz
MzVDNjAwMzlEMDY5IC8qIEpTV2Vha1NldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQyNTY2
MTE1RURFOThEMDA2NkE0OUIgLyogSlNXaXRoU2NvcGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
ODZFM0M2MTgxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTV3JhcHBlck1hcC5tbSBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTE1MUJEQUNEQUMwMDgwRkY3NCAvKiBCM0ZyZXF1ZW5jeUNsYXNzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTE0MjgwODcwMTA3RUMxMzQwMDEzRTdCMiAvKiBKU1dyYXBwZXJP
YmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNGRDhDOTIwRUVCMkVFNzAwMjgzODQ4IC8q
IEp1bXBUYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MDY2
LDkgKzg2MDAsMTIgQEAKIAkJCQkxNDhGMjFCMDEwN0VDNTQxMDA0MkVDMkMgLyogTGV4ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNDI3NTcxNTkxNEEyMDAwNENCOUZGIC8qIExpbmtCdWZm
ZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFMkVBNkMwRkI0NjBDRjAwNjAxRjA2IC8qIExp
dGVyYWxQYXJzZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1N0YxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckluc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkUzOTEzNTQxQjc5NEY2RTAw
RURBRjcxIC8qIExpdmVPYmplY3RMaXN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZFMjBDRTlE
MTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
NDY4MEQyMTRCQkQxNjUwMEJGRTI3MiAvKiBMTEludERhdGEuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJMEZFQzg0RkUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQXJndW1lbnRSZWdWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQkwRkVDODU0MTFCREFDREFDMDA4MEZGNzQgLyogQjNWYWxpZGF0ZS5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjM4QjAxMTE3Q0YwNzgwMDBCMTQ0RDMgLyogTExJbnRF
bnRyeXBvaW50LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MEE4MTRCQTdGQUIwMEJGRTI3
MiAvKiBMTEludEV4Y2VwdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY0NjgwQTQxNEJB
N0Y4RDAwQkZFMjcyIC8qIExMSW50U2xvd1BhdGhzLmNwcCBpbiBTb3VyY2VzICovLApAQCAtODA3
Nyw2ICs4NjE0LDcgQEAKIAkJCQlBN0U1QUIzNzE3OTlFNEIyMDBEMjgzM0QgLyogTExWTURpc2Fz
c2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURERTEwN0VDN0U3MDA2NTA0NDYg
LyogTG9va3VwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGNDY4MENDMTRCQkIxN0EwMEJGRTI3
MiAvKiBMb3dMZXZlbEludGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTFG
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM01lbW9yeVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTE0QjcyM0IyMTJEN0RBNDYwMDNCRDVFRCAvKiBNYWNoaW5lU3RhY2tNYXJrZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMEZFQjNFQ0YxNjIzN0Y2QzAwQUI2N0FEIC8qIE1hY3JvQXNzZW1ibGVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QzU2OEUwMTFBMjEzRUUwMDA3RjdGMCAvKiBNYWNy
b0Fzc2VtYmxlckFSTS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgwODYsMTAgKzg2MjQsMTIgQEAK
IAkJCQlBN0E0QUUwODE3OTczQjI2MDA1NjEyQjEgLyogTWFjcm9Bc3NlbWJsZXJYODZDb21tb24u
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwMDg3MzkxN0NCRTg1MzAwQzNFNjQzIC8qIE1hcENv
bnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3NERFRjkzMTgyRDk5MTQwMDUyMkMy
MiAvKiBNYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUw
NzFCREFDREFDMDA4MEZGNzQgLyogQjNDaGVja1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CUE3MDA4NzNEMTdDQkU4RDMwMEMzRTY0MyAvKiBNYXBQcm90b3R5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQzJCOTE2QzUxNERBMDQwQzAwQ0JBQzg2IC8qIE1hcmtlZEFsbG9jYXRvci5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYwODEzNTM5QTI4MDBCMDJFODYgLyogTWFya2VkQmxv
Y2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTREMkYzREExMzlGNEJFMjAwNDkxMDMxIC8qIE1h
cmtlZFNwYWNlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTQzMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1ZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MkQ2RjExMTM1MzlBNDEwMEIw
MkU4NiAvKiBNYXJrU3RhY2suY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNDM0MEE0ODQxQTkwNTFB
RjAwRDczQ0NBIC8qIE1hdGhDb21tb24uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlEREYx
MDdFQzdFNzAwNjUwNDQ2IC8qIE1hdGhPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MTI4
LDE3ICs4NjY4LDIxIEBACiAJCQkJMEZGNzI5QUQxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVy
Qnl0ZWNvZGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZGNzI5QUUxNjZBRDM1QzAwMEY1QkEz
IC8qIFByb2ZpbGVyQnl0ZWNvZGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMTM5MTI5MTY3
NzFDMzMwMDlDQ0IwNyAvKiBQcm9maWxlckJ5dGVjb2RlU2VxdWVuY2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1MEIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzQ29tbXV0YXRpdml0eS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlBRjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJD
b21waWxhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY3MjlCMDE2NkFEMzVDMDAwRjVC
QTMgLyogUHJvZmlsZXJDb21waWxhdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZG
NzI5QjExNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyQ29tcGlsZWRCeXRlY29kZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkY3MjlCMjE2NkFEMzVDMDAwRjVCQTMgLyogUHJvZmlsZXJEYXRh
YmFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjE5MENBQzE4OUQ4MkY2MDAwQUU1RjAgLyog
UHJvZmlsZXJKZXR0aXNvblJlYXNvbi5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUzMDFC
REFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZGNzI5QjMxNjZBRDM1QzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjcyOUI0MTY2QUQzNUMwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0
YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTJFMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrbWFwLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGQjEwNThCMTY3NTQ4MzEwMEY4QUI2
RSAvKiBQcm9maWxlck9TUkV4aXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZCMTA1OEQxNjc1
NDgzNzAwRjhBQjZFIC8qIFByb2ZpbGVyT1NSRXhpdFNpdGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEYxMzkxMkIxNjc3MUMzQTAwOUNDQjA3IC8qIFByb2ZpbGVyUHJvZmlsZWRCeXRlY29kZXMu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZEM0U0MEQxQjYxOEI2NjAwQzgwRTFFIC8qIFByb3Bl
cnR5Q29uZGl0aW9uLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTNCMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1R5cGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdGQjYwQTQxMDNGN0RDMjAw
MTdBMjg2IC8qIFByb3BlcnR5RGVzY3JpcHRvci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2
OURFODEwN0VDN0U3MDA2NTA0NDYgLyogUHJvcGVydHlTbG90LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCUFERTM5RkZGMTZERDE0NEIwMDAzQ0Q0QSAvKiBQcm9wZXJ0eVRhYmxlLmNwcCBpbiBTb3Vy
Y2VzICovLApAQCAtODE0NywxMCArODY5MSwxMiBAQAogCQkJCTBGMTVDRDIyMUJBNUY5ODYwMDMx
RkZEMyAvKiBQdXRCeUlkRmxhZ3MuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5MzMyQTMxNENB
N0RENzAwODVGM0M2IC8qIFB1dEJ5SWRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5
M0I0QTkxOEI5MkM0RDAwMTc4QTNGIC8qIFB1dEJ5SWRWYXJpYW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGRUM4NTJCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkY2MEFDMzE2NzQwRjg4MDAwMjk3NzkgLyogUmVkdWNlV2hpdGVzcGFj
ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlFMzM2MzdBNTFCNjMyMjAyMDBFRTA4NDAgLyogUmVm
bGVjdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkE3QThFQjE4QjQxM0M4MDA1MjM3
MUQgLyogUmVnLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjgwODQxMTA3RUMwOTMwMDEzRTdC
MiAvKiBSZWdFeHAuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZFQzg1NzgxQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpckdlbmVyYXRlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUExNzEyQjNCMTFDN0Iy
MTIwMDdBNTMxNSAvKiBSZWdFeHBDYWNoZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjQyQzUx
MDE1MUMwNkE5MDA0NkQ0RUYgLyogUmVnRXhwQ2FjaGVkUmVzdWx0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjgwODQyMTA3RUMwOTMwMDEzRTdCMiAvKiBSZWdFeHBDb25zdHJ1Y3Rvci5jcHAg
aW4gU291cmNlcyAqLywKQEAgLTgxNjQsNiArODcxMCw3IEBACiAJCQkJQTVCQTE1RTkxODIzNDBC
MzAwQTgyRTY5IC8qIFJlbW90ZUluc3BlY3Rvci5tbSBpbiBTb3VyY2VzICovLAogCQkJCUE1OTQ1
NThGMTgyNDVFRkQwMENDMzg0MyAvKiBSZW1vdGVJbnNwZWN0b3JEZWJ1Z2dhYmxlLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUE1QkExNUVDMTgyMzQwQjQwMEE4MkU2OSAvKiBSZW1vdGVJbnNwZWN0
b3JEZWJ1Z2dhYmxlQ29ubmVjdGlvbi5tbSBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTA1MUJE
QUNEQUMwMDgwRkY3NCAvKiBCM0NoZWNrU3BlY2lhbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlB
NUJBMTVFRTE4MjM0MEI0MDBBODJFNjkgLyogUmVtb3RlSW5zcGVjdG9yWFBDQ29ubmVjdGlvbi5t
bSBpbiBTb3VyY2VzICovLAogCQkJCTBGMjRFNTUwMTdFRTI3NDkwMEFCQjIxNyAvKiBSZXBhdGNo
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTUyNzc3M0RFMUFBRjgzQUMwMEJERTdFOCAvKiBSdW50
aW1lVHlwZS5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgxODIsNiArODcyOSw3IEBACiAJCQkJQTU0
Q0YyRjkxODRFQUVEQTAwMjM3RjE5IC8qIFNjcmlwdE9iamVjdC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBNTRDRjJGNTE4NEVBQjI0MDAyMzdGMTkgLyogU2NyaXB0VmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTcyOTlEQTUxN0QxMjg1ODAwNUY1RkY5IC8qIFNldENvbnN0cnVjdG9yLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4NTg1MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJSZWdp
c3RlclByaW9yaXR5LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3OTBERDZEMTgyRjQ5OTcwMDU4
ODgwNyAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzI5
OURBMTE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGRUU5ODQzMUE4OTIyNzUwMDc1NEU5MyAvKiBTZXR1cFZhcmFyZ3NGcmFtZS5jcHAgaW4g
U291cmNlcyAqLywKQEAgLTgxOTYsNiArODc0NCw3IEBACiAJCQkJMEZEODJFODYxNDFGM0ZGMTAw
MTc5Qzk0IC8qIFNwZWN1bGF0ZWRUeXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE3QzFFQUYx
MTc5ODdBQjYwMDI5OURCMiAvKiBTdGFja1Zpc2l0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
QTczMEI2MTMxMjUwMDY4RjAwOUQyNUIxIC8qIFN0cmljdEV2YWxBY3RpdmF0aW9uLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGRUM4NTIxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM09wY29kZS5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29u
c3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZB
IC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5
REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCkBA
IC04MjA0LDYgKzg3NTMsNyBAQAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1
Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJN0U0RUU3MEYwRUJCN0E1QjAwNTkzNEFBIC8q
IFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBRjczODJDMThCQkJGOTIw
MDhBNUEzNyAvKiBTdHJ1Y3R1cmVJRFRhYmxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGRUM4
NUI5MUJFMTQ2MkYwMDgwRkY3NCAvKiBCM0luc2VydGlvblNldC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlDMkYwRjJEMTE2QkFFRUU5MDAxODdDMTkgLyogU3RydWN0dXJlUmFyZURhdGEuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZCNDM4QTMxOTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNl
dC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjc2NkQzODE1QUU0QTFDMDA4RjM2M0UgLyogU3Ry
dWN0dXJlU3R1YkNsZWFyaW5nV2F0Y2hwb2ludC5jcHAgaW4gU291cmNlcyAqLywKQEAgLTgyMTIs
NiArODc2Miw3IEBACiAJCQkJNzA1QjQxQUQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0
cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwNUI0MUFGMUE2RTUwMUUwMDcxNjc1NyAv
KiBTeW1ib2xPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzA1QjQxQjExQTZFNTAxRTAw
NzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODUz
RjFCREFDREFDMDA4MEZGNzQgLyogQjNVc2VDb3VudHMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEY5MTlEMjgxNTg1Njc3MzAwNEE0RTdEIC8qIFN5bWJvbFRhYmxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTcwRUNBNjA3MUFGREJFQTIwMDQ0OTczOSAvKiBUZW1wbGF0ZVJlZ2lzdHJ5LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGQzMxNDEzMTgxNDU1OTEwMDAzMzIzMiAvKiBUZW1wUmVnaXN0
ZXJTZXQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC04MjQwLDYgKzg3OTEsNyBAQAogCQkJCTBGMjRF
NTU4MTdGNzRFREIwMEFCQjIxNyAvKiBWYWx1ZVJlY292ZXJ5LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTc5RUUwQkZGMUI0QUZCODUwMDAzODVDOSAvKiBWYXJpYWJsZUVudmlyb25tZW50LmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdy
aXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRkVDODU4MzFCREFDREM3MDA4
MEZGNzQgLyogQWlyUGhhc2VTY29wZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAyQzFB
QTkwOTU2MDBEMzNCMzMgLyogVmFyT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMjBD
MjU5MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJRTE4RTNBNTkwREY5Mjc4QzAwRDkwQjM0IC8qIFZNLmNwcCBpbiBTb3VyY2VzICovLApA
QCAtODI1OSw2ICs4ODExLDcgQEAKIAkJCQk3MDlGQjg2OTFBRTMzNUM2MDAzOUQwNjkgLyogV2Vh
a1NldENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwOUZCODZCMUFFMzM1QzYw
MDM5RDA2OSAvKiBXZWFrU2V0UHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTJBNEVD
OTBCMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMEZFQzg1N0QxQkRBQ0RDNzAwODBGRjc0IC8qIEFpckluc2VydGlvblNldC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMgLyogV3JpdGVCYXJy
aWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QUIzQTE3OTlFNEIyMDBEMjgz
M0QgLyogWDg2RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2M0M2RDlDMTUy
MTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5jcHAgaW4gU291cmNlcyAqLywK
QEAgLTgyODUsNiArODgzOCwxMSBAQAogCQkJdGFyZ2V0ID0gMEZDRUZBQjUxODA1RDYxNjAwNDcy
Q0U0IC8qIGxsdm1Gb3JKU0MgKi87CiAJCQl0YXJnZXRQcm94eSA9IDBGQ0VGQUJDMTgwNUQ2NjMw
MDQ3MkNFNCAvKiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CiAJCX07CisJCTBGRUM4NUIxMUJE
QjVEOEYwMDgwRkY3NCAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0geworCQkJaXNhID0gUEJY
VGFyZ2V0RGVwZW5kZW5jeTsKKwkJCXRhcmdldCA9IDBGRUM4NTk0MUJEQjVDRjEwMDgwRkY3NCAv
KiB0ZXN0YjMgKi87CisJCQl0YXJnZXRQcm94eSA9IDBGRUM4NUIwMUJEQjVEOEYwMDgwRkY3NCAv
KiBQQlhDb250YWluZXJJdGVtUHJveHkgKi87CisJCX07CiAJCTBGRjkyMkQzMTRGNDZCMkYwMDQx
QTI0RSAvKiBQQlhUYXJnZXREZXBlbmRlbmN5ICovID0gewogCQkJaXNhID0gUEJYVGFyZ2V0RGVw
ZW5kZW5jeTsKIAkJCXRhcmdldCA9IDBGNDY4MEE5MTRCQTdGRDkwMEJGRTI3MiAvKiBMTEludCBP
ZmZzZXRzICovOwpAQCAtODQwOSw2ICs4OTY3LDM4IEBACiAJCQl9OwogCQkJbmFtZSA9IFByb2R1
Y3Rpb247CiAJCX07CisJCTBGRUM4NUE5MUJEQjVDRjEwMDgwRkY3NCAvKiBEZWJ1ZyAqLyA9IHsK
KwkJCWlzYSA9IFhDQnVpbGRDb25maWd1cmF0aW9uOworCQkJYmFzZUNvbmZpZ3VyYXRpb25SZWZl
cmVuY2UgPSBCQzAyMUJGMjEzNjkwMEMzMDBGQzU0NjcgLyogVG9vbEV4ZWN1dGFibGUueGNjb25m
aWcgKi87CisJCQlidWlsZFNldHRpbmdzID0geworCQkJCVBST0RVQ1RfTkFNRSA9IHRlc3RiMzsK
KwkJCX07CisJCQluYW1lID0gRGVidWc7CisJCX07CisJCTBGRUM4NUFBMUJEQjVDRjEwMDgwRkY3
NCAvKiBSZWxlYXNlICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQli
YXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBU
b29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJP
RFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBSZWxlYXNlOworCQl9OworCQkw
RkVDODVBQjFCREI1Q0YxMDA4MEZGNzQgLyogUHJvZmlsaW5nICovID0geworCQkJaXNhID0gWENC
dWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29uZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIx
QkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhlY3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1
aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9OQU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5h
bWUgPSBQcm9maWxpbmc7CisJCX07CisJCTBGRUM4NUFDMUJEQjVDRjEwMDgwRkY3NCAvKiBQcm9k
dWN0aW9uICovID0geworCQkJaXNhID0gWENCdWlsZENvbmZpZ3VyYXRpb247CisJCQliYXNlQ29u
ZmlndXJhdGlvblJlZmVyZW5jZSA9IEJDMDIxQkYyMTM2OTAwQzMwMEZDNTQ2NyAvKiBUb29sRXhl
Y3V0YWJsZS54Y2NvbmZpZyAqLzsKKwkJCWJ1aWxkU2V0dGluZ3MgPSB7CisJCQkJUFJPRFVDVF9O
QU1FID0gdGVzdGIzOworCQkJfTsKKwkJCW5hbWUgPSBQcm9kdWN0aW9uOworCQl9OwogCQkwRkY5
MjJDQjE0RjQ2QjEzMDA0MUEyNEUgLyogRGVidWcgKi8gPSB7CiAJCQlpc2EgPSBYQ0J1aWxkQ29u
ZmlndXJhdGlvbjsKIAkJCWJhc2VDb25maWd1cmF0aW9uUmVmZXJlbmNlID0gQkMwMjFCRjIxMzY5
MDBDMzAwRkM1NDY3IC8qIFRvb2xFeGVjdXRhYmxlLnhjY29uZmlnICovOwpAQCAtODc2MSw2ICs5
MzUxLDE3IEBACiAJCQlkZWZhdWx0Q29uZmlndXJhdGlvbklzVmlzaWJsZSA9IDA7CiAJCQlkZWZh
dWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9kdWN0aW9uOwogCQl9OworCQkwRkVDODVBODFCREI1
Q0YxMDA4MEZGNzQgLyogQnVpbGQgY29uZmlndXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJn
ZXQgInRlc3RiMyIgKi8gPSB7CisJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OworCQkJYnVp
bGRDb25maWd1cmF0aW9ucyA9ICgKKwkJCQkwRkVDODVBOTFCREI1Q0YxMDA4MEZGNzQgLyogRGVi
dWcgKi8sCisJCQkJMEZFQzg1QUExQkRCNUNGMTAwODBGRjc0IC8qIFJlbGVhc2UgKi8sCisJCQkJ
MEZFQzg1QUIxQkRCNUNGMTAwODBGRjc0IC8qIFByb2ZpbGluZyAqLywKKwkJCQkwRkVDODVBQzFC
REI1Q0YxMDA4MEZGNzQgLyogUHJvZHVjdGlvbiAqLywKKwkJCSk7CisJCQlkZWZhdWx0Q29uZmln
dXJhdGlvbklzVmlzaWJsZSA9IDA7CisJCQlkZWZhdWx0Q29uZmlndXJhdGlvbk5hbWUgPSBQcm9k
dWN0aW9uOworCQl9OwogCQkwRkY5MjJDQTE0RjQ2QjEzMDA0MUEyNEUgLyogQnVpbGQgY29uZmln
dXJhdGlvbiBsaXN0IGZvciBQQlhOYXRpdmVUYXJnZXQgIkpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rv
ciIgKi8gPSB7CiAJCQlpc2EgPSBYQ0NvbmZpZ3VyYXRpb25MaXN0OwogCQkJYnVpbGRDb25maWd1
cmF0aW9ucyA9ICgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXIuY3BwCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgsNiArMjgsOCBAQAogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKIAorI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCiBuYW1lc3BhY2UgSlNDIHsKIAogY29uc3QgZG91YmxlIE1hY3JvQXNz
ZW1ibGVyOjp0d29Ub1RoZTMyID0gKGRvdWJsZSkweDEwMDAwMDAwMHVsbDsKQEAgLTQ3LDUgKzQ5
LDcwIEBAIHZvaWQgTWFjcm9Bc3NlbWJsZXI6OmNhbGxQcm9iZShzdGQ6OmZ1bmMKIAogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOwor
Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgTWFjcm9Bc3NlbWJsZXI6OlJl
bGF0aW9uYWxDb25kaXRpb24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsKKyAgICBjYXNl
IE1hY3JvQXNzZW1ibGVyOjpFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJFcXVhbCIpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWw6CisgICAgICAg
IG91dC5wcmludCgiTm90RXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9B
c3NlbWJsZXI6OkFib3ZlOgorICAgICAgICBvdXQucHJpbnQoIkFib3ZlIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWw6CisgICAgICAgIG91
dC5wcmludCgiQWJvdmVPckVxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdzoKKyAgICAgICAgb3V0LnByaW50KCJCZWxvdyIpOworICAgICAgICBy
ZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6QmVsb3dPckVxdWFsOgorICAgICAgICBv
dXQucHJpbnQoIkJlbG93T3JFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNy
b0Fzc2VtYmxlcjo6R3JlYXRlclRoYW46CisgICAgICAgIG91dC5wcmludCgiR3JlYXRlclRoYW4i
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFu
T3JFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbk9yRXF1YWwiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuOgorICAgICAgICBv
dXQucHJpbnQoIkxlc3NUaGFuIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE1hY3JvQXNz
ZW1ibGVyOjpMZXNzVGhhbk9yRXF1YWw6CisgICAgICAgIG91dC5wcmludCgiTGVzc1RoYW5PckVx
dWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIE1hY3Jv
QXNzZW1ibGVyOjpSZXN1bHRDb25kaXRpb24gY29uZCkKK3sKKyAgICBzd2l0Y2ggKGNvbmQpIHsK
KyAgICBjYXNlIE1hY3JvQXNzZW1ibGVyOjpPdmVyZmxvdzoKKyAgICAgICAgb3V0LnByaW50KCJP
dmVyZmxvdyIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6U2ln
bmVkOgorICAgICAgICBvdXQucHJpbnQoIlNpZ25lZCIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBNYWNyb0Fzc2VtYmxlcjo6UG9zaXRpdmVPclplcm86CisgICAgICAgIG91dC5wcmludCgi
UG9zaXRpdmVPclplcm8iKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTWFjcm9Bc3NlbWJs
ZXI6Olplcm86CisgICAgICAgIG91dC5wcmludCgiWmVybyIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybzoKKyAgICAgICAgb3V0LnByaW50KCJOb25a
ZXJvIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoQVNT
RU1CTEVSKQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE1OTYsOCAr
MTU5NiwxOSBAQCBwdWJsaWM6CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwogCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6TWFjcm9Bc3NlbWJsZXI6OlJlbGF0aW9uYWxDb25kaXRpb24pOwordm9pZCBwcmlu
dEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpNYWNyb0Fzc2VtYmxlcjo6UmVzdWx0Q29uZGl0
aW9uKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbHNlIC8vIEVOQUJMRShBU1NFTUJMRVIp
CiAKK25hbWVzcGFjZSBKU0MgeworCiAvLyBJZiB0aGVyZSBpcyBubyBhc3NlbWJsZXIgZm9yIHRo
aXMgcGxhdGZvcm0sIGF0IGxlYXN0IGFsbG93IGNvZGUgdG8gbWFrZSByZWZlcmVuY2VzIHRvCiAv
LyBzb21lIG9mIHRoZSB0aGluZ3MgaXQgd291bGQgb3RoZXJ3aXNlIGRlZmluZSwgYWxiZWl0IHdp
dGhvdXQgZ2l2aW5nIHRoYXQgY29kZSBhbnkgd2F5CiAvLyBvZiBkb2luZyBhbnl0aGluZyB1c2Vm
dWwuCkBAIC0xNjExLDYgKzE2MjIsOCBAQCBwdWJsaWM6CiAgICAgZW51bSBGUFJlZ2lzdGVySUQg
eyBOb0ZQUmVnaXN0ZXIgfTsKIH07CiAKK30gLy8gbmFtZXNwYWNlIEpTQworCiAjZW5kaWYgLy8g
RU5BQkxFKEFTU0VNQkxFUikKIAogI2VuZGlmIC8vIE1hY3JvQXNzZW1ibGVyX2gKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5zCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FkZHJlc3NNYXRjaGVyLnBhdHRlcm5z
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQWRkcmVzc01hdGNo
ZXIucGF0dGVybnMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzOSBAQAorIyBDb3B5cmlnaHQg
KEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIworIyBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyMgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisjIGFyZSBtZXQ6CisjIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyMgMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorIyAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIworIyBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJ
UycnCisjIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorIyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisjIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwor
IyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SCisjIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisjIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworIyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTgorIyBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIyBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisjIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworbWF0Y2hlciBBZGRyZXNzTWF0Y2hlcgorCisjIE5v
dGUgdGhhdCB0aGlzIHJlbGllcyBvbiBCMyBkb2luZyBhZ2dyZXNzaXZlIHJlYXNzb2NpYXRpb24g
YW5kIGNhbm9uY2FsaXphdGlvbiBvZiBpbnRlZ2VyIGFkZHMuCisjIFdlJ2xsIG5ldmVyIHNlZSBB
ZGQoQWRkKHgsIGNvbnN0MSksIGNvbnN0MikgYmVjYXVzZSBpdCB3b3VsZCBoYXZlIGFscmVhZHkg
YmVlbiByZWFzc29jaWF0ZWQgaW50bworIyBBZGQoeCwgY29uc3QxICsgY29uc3QyKS4gQWxzbywg
d2Ugd2lsbCBuZXZlciBzZWUgQWRkKGNvbnN0LCB4KSwgYmVjYXVzZSB3ZSB3b3VsZCBoYXZlIGNh
bm9uaWNhbGl6ZWQKKyMgaXQgdG8gQWRkKHgsIGNvbnN0KS4gVGhhdCBzYWlkLCBpbiB0aGlzIGNv
ZGUgd2UgbmV2ZXIgbWFrZSBhc3NlcnRpb25zIGFib3V0IHRoZXNlIG9wdGltaXphdGlvbnMKKyMg
aGF2aW5nIGJlZW4gcGVyZm9ybWVkLiBBbHNvLCBzaW5jZSB0aGUgTG9hZC9TdG9yZSBpbnN0cnVj
dGlvbnMgaW4gQjMgaGF2ZSBhIGJ1aWx0LWluIG9mZnNldCwgd2UKKyMgZG9uJ3QgbmVlZCB0byBt
YXRjaCBBZGQoeCwgY29uc3QpLiBUaGF0IHdvdWxkIGhhdmUgYmVlbiBmb2xkZWQgaW50byB0aGUg
TG9hZC9TdG9yZSBpbnN0cnVjdGlvbnMKKyMgYWxyZWFkeS4gU28sIHRoZSBvbmx5IGZhbmN5IG1h
dGhpbmcgdGhpcyBjYW4gZG8gaXMganVzdCBCYXNlSW5kZXggZm9ybXMuCisKK0FkZFNoaWZ0MSA9
IEFkZChTaGwoaW5kZXgsICRsb2dTY2FsZSksIGJhc2UpCitBZGRTaGlmdDIgPSBBZGQoYmFzZSwg
U2hsKGluZGV4LCAkbG9nU2NhbGUpKQorCitBZGQgPSBBZGQobGVmdCwgcmlnaHQpCisKK0RpcmVj
dApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVu
dFJlZ1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitBcmd1bWVudFJlZ1ZhbHVlOjp+QXJn
dW1lbnRSZWdWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQXJndW1lbnRSZWdWYWx1ZTo6ZHVtcE1ldGEo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9yZWcpOworfQorCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0FyZ3VtZW50UmVnVmFsdWVfaAorI2Rl
ZmluZSBCM0FyZ3VtZW50UmVnVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlICJSZWcuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIEFyZ3VtZW50UmVnVmFsdWUgOiBw
dWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9w
Y29kZSkgeyByZXR1cm4gb3Bjb2RlID09IEFyZ3VtZW50UmVnOyB9CisgICAgCisgICAgfkFyZ3Vt
ZW50UmVnVmFsdWUoKTsKKworICAgIFJlZyBhcmd1bWVudFJlZygpIGNvbnN0IHsgcmV0dXJuIG1f
cmVnOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29u
c3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKwor
ICAgIEFyZ3VtZW50UmVnVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFJlZyBy
ZWcpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIEFyZ3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBv
aW50ZXJUeXBlKCkgOiBEb3VibGUsIG9yaWdpbikKKyAgICAgICAgLCBtX3JlZyhyZWcpCisgICAg
eworICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkpOworICAgIH0KKworICAgIFJlZyBtX3JlZzsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzQXJndW1lbnRSZWdWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrVXRpbHMuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitjb25zdCBjaGFyKiBjb25zdCBCYXNpY0Jsb2NrOjpkdW1wUHJlZml4
ID0gIiMiOworCitCYXNpY0Jsb2NrOjpCYXNpY0Jsb2NrKHVuc2lnbmVkIGluZGV4LCBkb3VibGUg
ZnJlcXVlbmN5KQorICAgIDogbV9pbmRleChpbmRleCkKKyAgICAsIG1fZnJlcXVlbmN5KGZyZXF1
ZW5jeSkKK3sKK30KKworQmFzaWNCbG9jazo6fkJhc2ljQmxvY2soKQoreworfQorCit2b2lkIEJh
c2ljQmxvY2s6OmFwcGVuZChWYWx1ZSogdmFsdWUpCit7CisgICAgbV92YWx1ZXMuYXBwZW5kKHZh
bHVlKTsKK30KKworYm9vbCBCYXNpY0Jsb2NrOjphZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBi
bG9jaykKK3sKKyAgICByZXR1cm4gQjM6OmFkZFByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30K
KworYm9vbCBCYXNpY0Jsb2NrOjpyZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBibG9jaykK
K3sKKyAgICByZXR1cm4gQjM6OnJlbW92ZVByZWRlY2Vzc29yKHRoaXMsIGJsb2NrKTsKK30KKwor
Ym9vbCBCYXNpY0Jsb2NrOjpyZXBsYWNlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFz
aWNCbG9jayogdG8pCit7CisgICAgcmV0dXJuIEIzOjpyZXBsYWNlUHJlZGVjZXNzb3IodGhpcywg
ZnJvbSwgdG8pOworfQorCit2b2lkIEJhc2ljQmxvY2s6OnJlbW92ZU5vcHMoKQoreworICAgIHVu
c2lnbmVkIHNvdXJjZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCB0YXJnZXRJbmRleCA9IDA7Cisg
ICAgd2hpbGUgKHNvdXJjZUluZGV4IDwgc2l6ZSgpKSB7CisgICAgICAgIFZhbHVlKiB2YWx1ZSA9
IG1fdmFsdWVzW3NvdXJjZUluZGV4KytdOworICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpICE9
IE5vcCkKKyAgICAgICAgICAgIG1fdmFsdWVzW3RhcmdldEluZGV4KytdID0gdmFsdWU7CisgICAg
fQorICAgIG1fdmFsdWVzLnJlc2l6ZSh0YXJnZXRJbmRleCk7Cit9CisKK3ZvaWQgQmFzaWNCbG9j
azo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChkdW1wUHJl
Zml4LCBtX2luZGV4KTsKK30KKwordm9pZCBCYXNpY0Jsb2NrOjpkZWVwRHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQkIiLCAqdGhpcywgIjogOyBmcmVxdWVu
Y3kgPSAiLCBtX2ZyZXF1ZW5jeSwgIlxuIik7CisgICAgaWYgKHByZWRlY2Vzc29ycygpLnNpemUo
KSkKKyAgICAgICAgb3V0LnByaW50KCIgIFByZWRlY2Vzc29yczogIiwgcG9pbnRlckxpc3REdW1w
KHByZWRlY2Vzc29ycygpKSwgIlxuIik7CisgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqdGhpcykK
KyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgQjM6OmRlZXBEdW1wKHZhbHVlKSwgIlxuIik7Cit9
CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0Jhc2ljQmxvY2tfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgi
CisjaW5jbHVkZSAiQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSW5zZXJ0aW9u
U2V0OworY2xhc3MgUHJvY2VkdXJlOworY2xhc3MgVmFsdWU7CisKK2NsYXNzIEJhc2ljQmxvY2sg
eworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgVmVjdG9yPFZhbHVlKj4gVmFsdWVM
aXN0OworICAgIHR5cGVkZWYgVmVjdG9yPEJhc2ljQmxvY2sqLCAyPiBQcmVkZWNlc3Nvckxpc3Q7
CisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JMaXN0OyAv
LyBUaGlzIG1hdGNoZXMgQ29udHJvbFZhbHVlOjpTdWNjZXNzb3JMaXN0CisKKyAgICBzdGF0aWMg
Y29uc3QgY2hhciogY29uc3QgZHVtcFByZWZpeDsKKworICAgIH5CYXNpY0Jsb2NrKCk7CisKKyAg
ICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKworICAgIFZhbHVl
TGlzdDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX3ZhbHVlcy5iZWdpbigpOyB9CisgICAg
VmFsdWVMaXN0OjppdGVyYXRvciBlbmQoKSB7IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorICAg
IFZhbHVlTGlzdDo6Y29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBtX3ZhbHVl
cy5iZWdpbigpOyB9CisgICAgVmFsdWVMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7
IHJldHVybiBtX3ZhbHVlcy5lbmQoKTsgfQorCisgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlcy5zaXplKCk7IH0KKyAgICBWYWx1ZSogYXQoc2l6ZV90IGluZGV4KSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlc1tpbmRleF07IH0KKyAgICBWYWx1ZSomIGF0KHNpemVfdCBpbmRl
eCkgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisKKyAgICBWYWx1ZSogbGFzdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWVzLmxhc3QoKTsgfQorICAgIFZhbHVlKiYgbGFzdCgpIHsgcmV0dXJu
IG1fdmFsdWVzLmxhc3QoKTsgfQorCisgICAgY29uc3QgVmFsdWVMaXN0JiB2YWx1ZXMoKSBjb25z
dCB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIFZhbHVlTGlzdCYgdmFsdWVzKCkgeyByZXR1cm4g
bV92YWx1ZXM7IH0KKworICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYXBwZW5kKFZhbHVlKik7
CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4KKyAgICBWYWx1ZVR5cGUqIGFwcGVuZE5ldyhQcm9jZWR1cmUmLCBBcmd1bWVudHMuLi4pOwor
CisgICAgdW5zaWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0OworICAgIGNvbnN0IEZyZXF1ZW50
ZWRCbG9jayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKyAgICBGcmVxdWVudGVk
QmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCk7CisgICAgY29uc3QgU3VjY2Vzc29yTGlz
dCYgc3VjY2Vzc29ycygpIGNvbnN0OworICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKTsK
KworICAgIEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25zdDsK
KyAgICBCYXNpY0Jsb2NrKiYgc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpOworICAgIFN1
Y2Nlc3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4gc3VjY2Vzc29yQmxv
Y2tzKCk7CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBT
dWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdDsKKworICAgIHVuc2lnbmVkIG51
bVByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzLnNpemUoKTsgfQor
ICAgIEJhc2ljQmxvY2sqIHByZWRlY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBCYXNpY0Jsb2NrKiYgcHJlZGVjZXNzb3Io
dW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzW2luZGV4XTsgfQorICAgIGNv
bnN0IFByZWRlY2Vzc29yTGlzdCYgcHJlZGVjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9wcmVk
ZWNlc3NvcnM7IH0KKyAgICBQcmVkZWNlc3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIHsgcmV0dXJu
IG1fcHJlZGVjZXNzb3JzOyB9CisKKyAgICBib29sIGFkZFByZWRlY2Vzc29yKEJhc2ljQmxvY2sq
KTsKKyAgICBib29sIHJlbW92ZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqKTsKKyAgICBib29sIHJl
cGxhY2VQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKiBmcm9tLCBCYXNpY0Jsb2NrKiB0byk7CisKKyAg
ICBkb3VibGUgZnJlcXVlbmN5KCkgY29uc3QgeyByZXR1cm4gbV9mcmVxdWVuY3k7IH0KKworICAg
IHZvaWQgcmVtb3ZlTm9wcygpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGZyaWVuZCBjbGFzcyBJbnNlcnRpb25TZXQ7CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KyAgICAKKyAgICAvLyBJbnN0YW50aWF0ZSB2aWEgUHJvY2VkdXJlLgorICAgIEJhc2ljQmxvY2so
dW5zaWduZWQgaW5kZXgsIGRvdWJsZSBmcmVxdWVuY3kpOworCisgICAgdW5zaWduZWQgbV9pbmRl
eDsKKyAgICBWYWx1ZUxpc3QgbV92YWx1ZXM7CisgICAgUHJlZGVjZXNzb3JMaXN0IG1fcHJlZGVj
ZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNzIERlZXBCYXNpY0Js
b2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNvbnN0IEJhc2ljQmxv
Y2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgeworICAgIH0KKworICAg
IHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1f
YmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERlZXBCYXNpY0Jsb2Nr
RHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAgICByZXR1cm4gRGVl
cEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCYXNpY0Jsb2NrX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lubGluZXMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrSW5saW5lcy5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQmFzaWNCbG9ja0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2NrSW5saW5l
c19oCisjZGVmaW5lIEIzQmFzaWNCbG9ja0lubGluZXNfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgIkIzQ29udHJvbFZhbHVlLmgi
CisjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KK1ZhbHVlVHlwZSogQmFzaWNCbG9jazo6YXBwZW5kTmV3KFByb2NlZHVyZSYgcHJv
Y2VkdXJlLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIFZhbHVlVHlwZSogcmVzdWx0
ID0gcHJvY2VkdXJlLmFkZDxWYWx1ZVR5cGU+KGFyZ3VtZW50cy4uLik7CisgICAgYXBwZW5kKHJl
c3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW5saW5lIHVuc2lnbmVkIEJhc2ljQmxv
Y2s6Om51bVN1Y2Nlc3NvcnMoKSBjb25zdAoreworICAgIHJldHVybiBsYXN0KCktPmFzPENvbnRy
b2xWYWx1ZT4oKS0+bnVtU3VjY2Vzc29ycygpOworfQorCitpbmxpbmUgY29uc3QgRnJlcXVlbnRl
ZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWduZWQgaW5kZXgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3IoaW5kZXgpOwor
fQorCitpbmxpbmUgRnJlcXVlbnRlZEJsb2NrJiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3IodW5zaWdu
ZWQgaW5kZXgpCit7CisgICAgcmV0dXJuIGxhc3QoKS0+YXM8Q29udHJvbFZhbHVlPigpLT5zdWNj
ZXNzb3IoaW5kZXgpOworfQorCitpbmxpbmUgY29uc3QgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlz
dCYgQmFzaWNCbG9jazo6c3VjY2Vzc29ycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGxhc3QoKS0+
YXM8Q29udHJvbFZhbHVlPigpLT5zdWNjZXNzb3JzKCk7Cit9CisKK2lubGluZSBCYXNpY0Jsb2Nr
OjpTdWNjZXNzb3JMaXN0JiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JzKCkKK3sKKyAgICByZXR1cm4g
bGFzdCgpLT5hczxDb250cm9sVmFsdWU+KCktPnN1Y2Nlc3NvcnMoKTsKK30KKworaW5saW5lIEJh
c2ljQmxvY2sqIEJhc2ljQmxvY2s6OnN1Y2Nlc3NvckJsb2NrKHVuc2lnbmVkIGluZGV4KSBjb25z
dAoreworICAgIHJldHVybiBzdWNjZXNzb3IoaW5kZXgpLmJsb2NrKCk7Cit9CisKK2lubGluZSBC
YXNpY0Jsb2NrKiYgQmFzaWNCbG9jazo6c3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgpCit7
CisgICAgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsKK30KKworaW5saW5lIFN1Y2Nl
c3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgQmFzaWNCbG9jazo6U3VjY2Vzc29yTGlzdD4gQmFz
aWNCbG9jazo6c3VjY2Vzc29yQmxvY2tzKCkKK3sKKyAgICByZXR1cm4gU3VjY2Vzc29yQ29sbGVj
dGlvbjxCYXNpY0Jsb2NrLCBTdWNjZXNzb3JMaXN0PihzdWNjZXNzb3JzKCkpOworfQorCitpbmxp
bmUgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBCYXNpY0Jsb2Nr
OjpTdWNjZXNzb3JMaXN0PiBCYXNpY0Jsb2NrOjpzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAorewor
ICAgIHJldHVybiBTdWNjZXNzb3JDb2xsZWN0aW9uPGNvbnN0IEJhc2ljQmxvY2ssIGNvbnN0IFN1
Y2Nlc3Nvckxpc3Q+KHN1Y2Nlc3NvcnMoKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
MworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQmFzaWNCbG9ja0lu
bGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2NrVXRp
bHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNCYXNpY0Jsb2Nr
VXRpbHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Jhc2lj
QmxvY2tVdGlscy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNCYXNpY0Jsb2Nr
VXRpbHNfaAorI2RlZmluZSBCM0Jhc2ljQmxvY2tVdGlsc19oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3Jr
bGlzdC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIGFkZFByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAg
ICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisKKyAgICBpZiAo
cHJlZGVjZXNzb3JzLmNvbnRhaW5zKHByZWRlY2Vzc29yKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgcHJlZGVjZXNzb3JzLmFwcGVuZChwcmVkZWNlc3Nvcik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2s+Citib29sIHJlbW92ZVByZWRl
Y2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvcikKK3sKKyAg
ICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9jay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vzc29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAocHJlZGVjZXNzb3JzW2ldID09IHByZWRlY2Vzc29yKSB7CisgICAgICAgICAgICBwcmVkZWNl
c3NvcnNbaS0tXSA9IHByZWRlY2Vzc29ycy5sYXN0KCk7CisgICAgICAgICAgICBwcmVkZWNlc3Nv
cnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgQVNTRVJUKCFwcmVkZWNlc3NvcnMuY29udGFp
bnMocHJlZGVjZXNzb3IpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9j
az4KK2Jvb2wgcmVwbGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGJsb2NrLCBCYXNpY0Jsb2Nr
KiBmcm9tLCBCYXNpY0Jsb2NrKiB0bykKK3sKKyAgICBhdXRvJiBwcmVkZWNlc3NvcnMgPSBibG9j
ay0+cHJlZGVjZXNzb3JzKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHByZWRlY2Vz
c29ycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAocHJlZGVjZXNzb3JzW2ldID09IGZyb20p
IHsKKyAgICAgICAgICAgIHByZWRlY2Vzc29yc1tpXSA9IHRvOworICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBUaGlz
IHJlY29tcHV0ZXMgcHJlZGVjZXNzb3JzIGFuZCByZW1vdmVzIGJsb2NrcyB0aGF0IGFyZW4ndCBy
ZWFjaGFibGUuCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Jsb2NrPgordm9pZCByZXNldFJlYWNo
YWJpbGl0eShWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiYgYmxvY2tzKQorewor
ICAgIC8vIENsZWFyIGFsbCBwcmVkZWNlc3NvciBsaXN0cyBmaXJzdC4KKyAgICBmb3IgKGF1dG8m
IGJsb2NrIDogYmxvY2tzKQorICAgICAgICBibG9jay0+cHJlZGVjZXNzb3JzKCkucmVzaXplKDAp
OworCisgICAgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxv
Y2s+PiB3b3JrbGlzdDsKKyAgICB3b3JrbGlzdC5wdXNoKGJsb2Nrc1swXS5nZXQoKSk7CisgICAg
d2hpbGUgKEJhc2ljQmxvY2sqIGJsb2NrID0gd29ya2xpc3QucG9wKCkpIHsKKyAgICAgICAgZm9y
IChCYXNpY0Jsb2NrKiBzdWNjZXNzb3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAg
ICAgICAgICAgIGlmICh3b3JrbGlzdC5wdXNoKHN1Y2Nlc3NvcikpCisgICAgICAgICAgICAgICAg
YWRkUHJlZGVjZXNzb3Ioc3VjY2Vzc29yLCBibG9jayk7CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IGlmIChibG9ja3NbaV0tPnByZWRlY2Vzc29ycygpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGJs
b2Nrc1tpXSA9IG51bGxwdHI7CisgICAgfQorfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBCYXNpY0Js
b2NrPgorVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblByZU9yZGVyKEJhc2ljQmxvY2sqIHJv
b3QpCit7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiByZXN1bHQ7CisgICAgR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIEluZGV4U2V0PEJhc2ljQmxvY2s+PiB3b3JrbGlzdDsKKyAgICB3
b3JrbGlzdC5wdXNoKHJvb3QpOworICAgIHdoaWxlIChCYXNpY0Jsb2NrKiBibG9jayA9IHdvcmts
aXN0LnBvcCgpKSB7CisgICAgICAgIHJlc3VsdC5hcHBlbmQoYmxvY2spOworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAg
ICAgICAgIHdvcmtsaXN0LnB1c2goc3VjY2Vzc29yKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgQmFzaWNCbG9jaz4KK1ZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gYmxvY2tzSW5Qb3N0T3JkZXIoQmFzaWNCbG9jayogcm9vdCkKK3sKKyAgICBWZWN0b3I8QmFz
aWNCbG9jayo+IHJlc3VsdDsKKyAgICBQb3N0T3JkZXJHcmFwaE5vZGVXb3JrbGlzdDxCYXNpY0Js
b2NrKiwgSW5kZXhTZXQ8QmFzaWNCbG9jaz4+IHdvcmtsaXN0OworICAgIHdvcmtsaXN0LnB1c2go
cm9vdCk7CisgICAgd2hpbGUgKEdyYXBoTm9kZVdpdGhPcmRlcjxCYXNpY0Jsb2NrKj4gaXRlbSA9
IHdvcmtsaXN0LnBvcCgpKSB7CisgICAgICAgIHN3aXRjaCAoaXRlbS5vcmRlcikgeworICAgICAg
ICBjYXNlIEdyYXBoVmlzaXRPcmRlcjo6UHJlOgorICAgICAgICAgICAgd29ya2xpc3QucHVzaFBv
c3QoaXRlbS5ub2RlKTsKKyAgICAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yIDog
aXRlbS5ub2RlLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAgICAgICB3b3JrbGlzdC5w
dXNoKHN1Y2Nlc3Nvcik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBHcmFwaFZp
c2l0T3JkZXI6OlBvc3Q6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKGl0ZW0ubm9kZSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM0Jhc2ljQmxvY2tVdGlsc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0Jsb2NrV29ya2xpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNCbG9ja1dvcmtsaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEIzQmxvY2tXb3JrbGlzdF9oCisjZGVmaW5lIEIzQmxvY2tXb3JrbGlzdF9oCisKKyNp
ZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAi
QjNJbmRleFNldC5oIgorI2luY2x1ZGUgPHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIEJhc2ljQmxvY2s7CisKK3R5cGVkZWYgR3JhcGhOb2RlV29ya2xpc3Q8QmFzaWNCbG9jayos
IEluZGV4U2V0PEJhc2ljQmxvY2s+PiBCbG9ja1dvcmtsaXN0OworCisvLyBXaGVuIHlvdSBzYXkg
QmxvY2tXaXRoPGludD4geW91IHNob3VsZCByZWFkIGl0IGFzICJibG9jayB3aXRoIGFuIGludCIu
Cit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiB1c2luZyBCbG9ja1dpdGggPSBHcmFwaE5vZGVXaXRoPEJh
c2ljQmxvY2sqLCBUPjsKKworLy8gRXh0ZW5kZWQgYmxvY2sgd29ya2xpc3QgaXMgdXNlZnVsIGZv
ciBlbnF1ZXVlaW5nIHNvbWUgbWV0YS1kYXRhIGFsb25nIHdpdGggdGhlIGJsb2NrLiBJdCBhbHNv
CisvLyBwZXJtaXRzIGZvcmNpYmx5IGVucXVldWVpbmcgdGhpbmdzIGV2ZW4gaWYgdGhlIGJsb2Nr
IGhhcyBhbHJlYWR5IGJlZW4gc2Vlbi4gSXQncyB1c2VmdWwgZm9yCisvLyB0aGluZ3MgbGlrZSBi
dWlsZGluZyBhIHNwYW5uaW5nIHRyZWUsIGluIHdoaWNoIGNhc2UgVCAodGhlIGF1eGlsaWFyeSBw
YXlsb2FkKSB3b3VsZCBiZSB0aGUKKy8vIHN1Y2Nlc3NvciBpbmRleC4KK3RlbXBsYXRlPHR5cGVu
YW1lIFQ+IHVzaW5nIEV4dGVuZGVkQmxvY2tXb3JrbGlzdCA9IEV4dGVuZGVkR3JhcGhOb2RlV29y
a2xpc3Q8QmFzaWNCbG9jayosIFQsIEluZGV4U2V0PEJhc2ljQmxvY2s+PjsKKwordHlwZWRlZiBH
cmFwaFZpc2l0T3JkZXIgVmlzaXRPcmRlcjsKKwordHlwZWRlZiBHcmFwaE5vZGVXaXRoT3JkZXI8
QmFzaWNCbG9jayo+IEJsb2NrV2l0aE9yZGVyOworCit0eXBlZGVmIFBvc3RPcmRlckdyYXBoTm9k
ZVdvcmtsaXN0PEJhc2ljQmxvY2sqLCBJbmRleFNldDxCYXNpY0Jsb2NrPj4gUG9zdE9yZGVyQmxv
Y2tXb3JrbGlzdDsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNCbG9ja1dvcmtsaXN0X2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDaGVja1NwZWNpYWwu
aCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisjaW5jbHVk
ZSAiQWlyR2VuZXJhdGlvbkNvbnRleHQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworCit1c2luZyBuYW1lc3BhY2UgQWlyOworCituYW1lc3BhY2UgeworCit1bnNpZ25lZCBu
dW1CM0FyZ3MoSW5zdCYgaW5zdCkKK3sKKyAgICBzd2l0Y2ggKGluc3Qub3JpZ2luLT5vcGNvZGUo
KSkgeworICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgY2FzZSBDaGVja1N1YjoKKyAgICBjYXNlIENo
ZWNrTXVsOgorICAgICAgICAvLyBSZXNDb25kLCBUbXAsIFRtcAorICAgICAgICByZXR1cm4gMzsK
KyAgICBjYXNlIENoZWNrOgorICAgICAgICByZXR1cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9
Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitDaGVja1NwZWNpYWw6OkNoZWNrU3Bl
Y2lhbChBaXI6Ok9wY29kZSBvcGNvZGUsIHVuc2lnbmVkIG51bUFyZ3MpCisgICAgOiBtX2NoZWNr
T3Bjb2RlKG9wY29kZSkKKyAgICAsIG1fbnVtQ2hlY2tBcmdzKG51bUFyZ3MpCit7CisgICAgQVNT
RVJUKGlzVGVybWluYWwob3Bjb2RlKSk7Cit9CisKK0NoZWNrU3BlY2lhbDo6fkNoZWNrU3BlY2lh
bCgpCit7Cit9CisKK0luc3QgQ2hlY2tTcGVjaWFsOjpoaWRkZW5CcmFuY2goY29uc3QgSW5zdCYg
aW5zdCkgY29uc3QKK3sKKyAgICBJbnN0IGhpZGRlbkJyYW5jaChtX2NoZWNrT3Bjb2RlLCBpbnN0
Lm9yaWdpbik7CisgICAgaGlkZGVuQnJhbmNoLmFyZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSht
X251bUNoZWNrQXJncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtQ2hlY2tB
cmdzOyArK2kpCisgICAgICAgIGhpZGRlbkJyYW5jaC5hcmdzLmFwcGVuZChpbnN0LmFyZ3NbaSAr
IDFdKTsKKyAgICByZXR1cm4gaGlkZGVuQnJhbmNoOworfQorCit2b2lkIENoZWNrU3BlY2lhbDo6
Zm9yRWFjaEFyZyhJbnN0JiBpbnN0LCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0Nh
bGxiYWNrPiYgY2FsbGJhY2spCit7CisgICAgaGlkZGVuQnJhbmNoKGluc3QpLmZvckVhY2hBcmco
Y2FsbGJhY2spOworICAgIGZvckVhY2hBcmdJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVj
a0FyZ3MgKyAxLCBpbnN0LCBjYWxsYmFjayk7Cit9CisKK2Jvb2wgQ2hlY2tTcGVjaWFsOjppc1Zh
bGlkKEluc3QmIGluc3QpCit7CisgICAgcmV0dXJuIGhpZGRlbkJyYW5jaChpbnN0KS5pc1ZhbGlk
Rm9ybSgpCisgICAgICAgICYmIGlzVmFsaWRJbXBsKG51bUIzQXJncyhpbnN0KSwgbV9udW1DaGVj
a0FyZ3MgKyAxLCBpbnN0KTsKK30KKworYm9vbCBDaGVja1NwZWNpYWw6OmFkbWl0c1N0YWNrKElu
c3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQoreworICAgIGlmIChhcmdJbmRleCA+PSAxICYm
IGFyZ0luZGV4IDwgMSArIG1fbnVtQ2hlY2tBcmdzKQorICAgICAgICByZXR1cm4gaGlkZGVuQnJh
bmNoKGluc3QpLmFkbWl0c1N0YWNrKGFyZ0luZGV4IC0gMSk7CisgICAgcmV0dXJuIGFkbWl0c1N0
YWNrSW1wbChudW1CM0FyZ3MoaW5zdCksIG1fbnVtQ2hlY2tBcmdzICsgMSwgaW5zdCwgYXJnSW5k
ZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ2hlY2tTcGVjaWFsOjpnZW5lcmF0ZShJbnN0
JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQpCit7
CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGZhaWwgPSBoaWRkZW5CcmFuY2goaW5zdCkuZ2VuZXJh
dGUoaml0LCBjb250ZXh0KTsKKyAgICBBU1NFUlQoZmFpbC5pc1NldCgpKTsKKworICAgIFZhbHVl
KiB2YWx1ZSA9IGluc3Qub3JpZ2luOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAg
IGlmIChpc0NoZWNrTWF0aCh2YWx1ZS0+b3Bjb2RlKCkpKSB7CisgICAgICAgIGlmICh2YWx1ZS0+
b3Bjb2RlKCkgPT0gQ2hlY2tNdWwpCisgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcCgp
KTsKKyAgICAgICAgZWxzZSBpZiAodmFsdWUtPm9wY29kZSgpID09IENoZWNrU3ViICYmIHZhbHVl
LT5jaGlsZCgwKS0+aXNJbnQoMCkpCisgICAgICAgICAgICByZXBzLmFwcGVuZChWYWx1ZVJlcDo6
Y29uc3RhbnQoMCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXBzLmFwcGVuZChyZXBG
b3JBcmcoKmNvbnRleHQuY29kZSwgaW5zdC5hcmdzWzNdKSk7CisgICAgICAgIHJlcHMuYXBwZW5k
KHJlcEZvckFyZygqY29udGV4dC5jb2RlLCBpbnN0LmFyZ3NbMl0pKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBBU1NFUlQodmFsdWUtPm9wY29kZSgpID09IENoZWNrKTsKKyAgICAgICAgcmVwcy5h
cHBlbmQoVmFsdWVSZXA6OmNvbnN0YW50KDEpKTsKKyAgICB9CisKKyAgICBhcHBlbmRSZXBzSW1w
bChjb250ZXh0LCBtX251bUNoZWNrQXJncyArIDEsIGluc3QsIHJlcHMpOworICAgIAorICAgIGNv
bnRleHQubGF0ZVBhdGhzLmFwcGVuZCgKKyAgICAgICAgY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0
aW9uQ29udGV4dDo6TGF0ZVBhdGhGdW5jdGlvbj4oCisgICAgICAgICAgICBbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBHZW5lcmF0aW9uQ29udGV4dCYpIHsKKyAgICAgICAgICAgICAgICBmYWlsLmxp
bmsoJmppdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgU3RhY2ttYXAqIHN0
YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisgICAgICAgICAgICAgICAgQVNTRVJUKHN0YWNr
bWFwKTsKKworICAgICAgICAgICAgICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFt
czsKKyAgICAgICAgICAgICAgICBwYXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgICAgICAg
ICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAgICAgICAgICAgICAgICBwYXJhbXMucmVw
cyA9IHJlcHM7CisgICAgICAgICAgICAgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21h
cC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgICAgICAgICAgICAgc3RhY2ttYXAtPm1fZ2VuZXJh
dG9yLT5ydW4oaml0LCBwYXJhbXMpOworICAgICAgICAgICAgfSkpOworCisgICAgcmV0dXJuIEND
YWxsSGVscGVyczo6SnVtcCgpOyAvLyBBcyBmYXIgYXMgQWlyIHRoaW5rcywgd2UgYXJlIG5vdCBh
IHRlcm1pbmFsLgorfQorCit2b2lkIENoZWNrU3BlY2lhbDo6ZHVtcEltcGwoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV9jaGVja09wY29kZSwgIigiLCBtX251bUNo
ZWNrQXJncywgIikiKTsKK30KKwordm9pZCBDaGVja1NwZWNpYWw6OmRlZXBEdW1wSW1wbChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiQjM6OkNoZWNrVmFsdWUgbG93
ZXJlZCB0byAiLCBtX2NoZWNrT3Bjb2RlLCAiIHdpdGggIiwgbV9udW1DaGVja0FyZ3MsICIgYXJn
cy4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tTcGVjaWFsLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1NwZWNpYWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNDaGVja1NwZWNpYWxfaAorI2RlZmlu
ZSBCM0NoZWNrU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
T3Bjb2RlLmgiCisjaW5jbHVkZSAiQjNTdGFja21hcFNwZWNpYWwuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHdhbnQgdG8gbG93ZXIgQ2hlY2sgaW5zdHJ1Y3Rp
b25zIHRvIGEgYnJhbmNoLCBidXQgdGhlbiB3ZSB3YW50IHRvIHJvdXRlIHRoYXQgYnJhbmNoIHRv
IG91cgorLy8gb3V0LW9mLWxpbmUgY29kZSBpbnN0ZWFkIG9mIGRvaW5nIGFueXRoaW5nIGVsc2Uu
IEZvciB0aGlzIHJlYXNvbiwgYSBDaGVja1NwZWNpYWwgd2lsbCByZW1lbWJlcgorLy8gd2hpY2gg
YnJhbmNoIG9wY29kZSB3ZSBoYXZlIHNlbGVjdGVkIGFsb25nIHdpdGggdGhlIG51bWJlciBvZiBh
cmdzIGluIHRoZSBvdmVybG9hZCB3ZSB3YW50LiBJdAorLy8gd2lsbCBjcmVhdGUgYW4gSW5zdCB3
aXRoIHRoYXQgb3Bjb2RlIHBsdXMgdGhlIGFwcHJvcHJpYXRlIGFyZ3MgZnJvbSB0aGUgb3duaW5n
IEluc3Qgd2hlbmV2ZXIgeW91CisvLyBjYWxsIGFueSBvZiB0aGUgY2FsbGJhY2tzLgorLy8KKy8v
IE5vdGUgdGhhdCBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwgd2UgZXhwZWN0
IHRoYXQgdGhlIEIzIGFyZ3VtZW50cyBhcmUgdGhlIHJldmVyc2UKKy8vIG9mIHRoZSBBaXIgYXJn
dW1lbnRzIChBZGQoYSwgYikgPT4gQWRkMzIgYiwgYSkuIEV4Y2VwdDoKKy8vIC0gQ2hlY2tTdWIo
MCwgeCksIHdoaWNoIHR1cm5zIGludG8gQnJhbmNoTmVnMzIgeC4KKy8vIC0gQ2hlY2tNdWwoYSwg
YiksIHdoaWNoIHR1cm5zIGludG8gTXVsMzIgYiwgYSBidXQgd2UgcGFzcyBBbnkgZm9yIGEncyBW
YWx1ZVJlcC4KKworY2xhc3MgQ2hlY2tTcGVjaWFsIDogcHVibGljIFN0YWNrbWFwU3BlY2lhbCB7
CitwdWJsaWM6CisgICAgQ2hlY2tTcGVjaWFsKEFpcjo6T3Bjb2RlLCB1bnNpZ25lZCBudW1Bcmdz
KTsKKyAgICB+Q2hlY2tTcGVjaWFsKCk7CisKK3Byb3RlY3RlZDoKKyAgICAvLyBDb25zdHJ1Y3Rz
IGFuZCByZXR1cm5zIHRoZSBJbnN0IHJlcHJlc2VudGluZyB0aGUgYnJhbmNoIHRoYXQgdGhpcyB3
aWxsIHVzZS4KKyAgICBBaXI6Okluc3QgaGlkZGVuQnJhbmNoKGNvbnN0IEFpcjo6SW5zdCYpIGNv
bnN0OworCisgICAgdm9pZCBmb3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJk
YTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFs
aWQoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3Qm
LCB1bnNpZ25lZCBhcmdJbmRleCkgb3ZlcnJpZGU7CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJh
dGUgbWV0aG9kIHdpbGwgZ2VuZXJhdGUgdGhlIGhpZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0
ZXIgYSBMYXRlUGF0aCB0aGF0CisgICAgLy8gZ2VuZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIg
Y3JhenkgZHVkZSEKKworICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3Qm
LCBDQ2FsbEhlbHBlcnMmLCBBaXI6OkdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAg
ICB2b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBk
ZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg
ICBBaXI6Ok9wY29kZSBtX2NoZWNrT3Bjb2RlOworICAgIHVuc2lnbmVkIG1fbnVtQ2hlY2tBcmdz
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNDaGVja1NwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzQ2hlY2tWYWx1ZS5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK0NoZWNrVmFsdWU6
On5DaGVja1ZhbHVlKCkKK3sKK30KKwordm9pZCBDaGVja1ZhbHVlOjpkdW1wTWV0YShQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgic3RhY2ttYXAgPSAiLCBzdGFja21h
cCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ2hlY2tWYWx1ZV9oCisjZGVmaW5lIEIzQ2hlY2tW
YWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVi
bGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkKKyAgICB7CisgICAg
ICAgIHN3aXRjaCAob3Bjb2RlKSB7CisgICAgICAgIGNhc2UgQ2hlY2tBZGQ6CisgICAgICAgIGNh
c2UgQ2hlY2tTdWI6CisgICAgICAgIGNhc2UgQ2hlY2tNdWw6CisgICAgICAgIGNhc2UgQ2hlY2s6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5DaGVja1ZhbHVlKCk7CisK
KyAgICBTdGFja21hcCBzdGFja21hcDsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOworCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2tBZGQsIENoZWNr
U3ViLCBhbmQgQ2hlY2tNdWwuCisgICAgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2Rl
IG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICAg
ICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbiwgbGVmdCwgcmln
aHQpCisgICAgeworICAgICAgICBBU1NFUlQoaXNJbnQodHlwZSgpKSk7CisgICAgICAgIEFTU0VS
VChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CisgICAgICAgIEFTU0VSVChvcGNvZGUg
PT0gQ2hlY2tBZGQgfHwgb3Bjb2RlID09IENoZWNrU3ViIHx8IG9wY29kZSA9PSBDaGVja011bCk7
CisgICAgfQorCisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCisgICAgQ2hlY2tWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBy
ZWRpY2F0ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHBy
ZWRpY2F0ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2spOworICAgIH0K
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzQ2hlY2tWYWx1ZV9oCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb21tb24uY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29tbW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1
ZGUgIkRGR0NvbW1vbi5oIgorI2luY2x1ZGUgIkZUTFN0YXRlLmgiCisjaW5jbHVkZSAiT3B0aW9u
cy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworYm9vbCBzaG91bGREdW1w
SVIoKQoreworICAgIHJldHVybiBGVEw6OnZlcmJvc2VDb21waWxhdGlvbkVuYWJsZWQoKSB8fCBG
VEw6OnNob3VsZER1bXBEaXNhc3NlbWJseSgpIHx8IHNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCk7
Cit9CisKK2Jvb2wgc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKQoreworICAgIHJldHVybiBPcHRp
b25zOjpkdW1wR3JhcGhBdEVhY2hQaGFzZSgpOworfQorCitib29sIHNob3VsZFZhbGlkYXRlSVIo
KQoreworICAgIHJldHVybiBERkc6OnZhbGlkYXRpb25FbmFibGVkKCkgfHwgc2hvdWxkVmFsaWRh
dGVJUkF0RWFjaFBoYXNlKCk7Cit9CisKK2Jvb2wgc2hvdWxkVmFsaWRhdGVJUkF0RWFjaFBoYXNl
KCkKK3sKKyAgICByZXR1cm4gT3B0aW9uczo6dmFsaWRhdGVHcmFwaEF0RWFjaFBoYXNlKCk7Cit9
CisKK2Jvb2wgc2hvdWxkU2F2ZUlSQmVmb3JlUGhhc2UoKQoreworICAgIHJldHVybiBPcHRpb25z
Ojp2ZXJib3NlVmFsaWRhdGlvbkZhaWx1cmUoKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb21tb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb21tb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbW1vbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbW1vbl9oCisjZGVm
aW5lIEIzQ29tbW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitpbmxpbmUgYm9vbCBpczY0Qml0KCkgeyByZXR1cm4gc2l6ZW9mKHZv
aWQqKSA9PSA4OyB9CitpbmxpbmUgYm9vbCBpczMyQml0KCkgeyByZXR1cm4gIWlzNjRCaXQoKTsg
fQorCitib29sIHNob3VsZER1bXBJUigpOworYm9vbCBzaG91bGREdW1wSVJBdEVhY2hQaGFzZSgp
OworYm9vbCBzaG91bGRWYWxpZGF0ZUlSKCk7Citib29sIHNob3VsZFZhbGlkYXRlSVJBdEVhY2hQ
aGFzZSgpOworYm9vbCBzaG91bGRTYXZlSVJCZWZvcmVQaGFzZSgpOworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0Nv
bW1vbl9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZpdHku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbW11dGF0aXZp
dHkuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29tbXV0
YXRpdml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNDb21tdXRhdGl2aXR5LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1l
c3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIENv
bW11dGF0aXZpdHkgY29tbXV0YXRpdml0eSkKK3sKKyAgICBzd2l0Y2ggKGNvbW11dGF0aXZpdHkp
IHsKKyAgICBjYXNlIENvbW11dGF0aXZlOgorICAgICAgICBvdXQucHJpbnQoIkNvbW11dGF0aXZl
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE5vdENvbW11dGF0aXZlOgorICAgICAgICBv
dXQucHJpbnQoIk5vdENvbW11dGF0aXZlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29tbXV0YXRpdml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NvbW11dGF0aXZpdHkuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbW11dGF0aXZpdHkuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjND
b21tdXRhdGl2aXR5X2gKKyNkZWZpbmUgQjNDb21tdXRhdGl2aXR5X2gKKworI2lmIEVOQUJMRShC
M19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIENvbW11dGF0
aXZpdHkgeworICAgIENvbW11dGF0aXZlLAorICAgIE5vdENvbW11dGF0aXZlCit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3Ry
ZWFtOwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6Q29tbXV0YXRp
dml0eSk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEIzQ29tbXV0YXRpdml0eV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb25zdDMyVmFsdWUuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Q29uc3QzMlZhbHVlOjp+Q29uc3QzMlZhbHVlKCkKK3sKK30KKworVmFsdWUqIENvbnN0MzJWYWx1
ZTo6bmVnQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jKSBjb25zdAoreworICAgIHJldHVybiBwcm9j
LmFkZDxDb25zdDMyVmFsdWU+KG9yaWdpbigpLCAtbV92YWx1ZSk7Cit9CisKK1ZhbHVlKiBDb25z
dDMyVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgaW50MzJfdCBvdGhlcikgY29u
c3QKK3sKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3QzMlZhbHVlPihvcmlnaW4oKSwgbV92YWx1
ZSArIG90aGVyKTsKK30KKworVmFsdWUqIENvbnN0MzJWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2Vk
dXJlJiBwcm9jLCBWYWx1ZSogb3RoZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50
MzIoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0
MzJWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+YXNJbnQzMigpKTsKK30KKworVmFs
dWUqIENvbnN0MzJWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jLCBWYWx1ZSogb3Ro
ZXIpIGNvbnN0Cit7CisgICAgaWYgKCFvdGhlci0+aGFzSW50MzIoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0MzJWYWx1ZT4ob3JpZ2luKCksIG1f
dmFsdWUgLSBvdGhlci0+YXNJbnQzMigpKTsKK30KKwordm9pZCBDb25zdDMyVmFsdWU6OmR1bXBN
ZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdmFsdWUpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0NvbnN0MzJWYWx1ZV9oCisjZGVmaW5lIEIzQ29u
c3QzMlZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBKU19FWFBPUlRfUFJJ
VkFURSBDb25zdDMyVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IENvbnN0MzI7IH0K
KyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB+Q29uc3QzMlZhbHVlKCk7CisgICAgCisgICAg
aW50MzJfdCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KKworICAgIFZhbHVlKiBu
ZWdDb25zdGFudChQcm9jZWR1cmUmKSBjb25zdCBvdmVycmlkZTsKKyAgICBWYWx1ZSogYWRkQ29u
c3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFs
dWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7
CisgICAgVmFsdWUqIHN1YkNvbnN0YW50KFByb2NlZHVyZSYsIFZhbHVlKiBvdGhlcikgY29uc3Qg
b3ZlcnJpZGU7CisKK3Byb3RlY3RlZDoKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXBN
ZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBmcmllbmQgY2xhc3MgUHJv
Y2VkdXJlOworCisgICAgQ29uc3QzMlZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCBpbnQzMl90IHZhbHVlKQorICAgICAgICA6IFZhbHVlKGluZGV4LCBDb25zdDMyLCBJbnQzMiwg
b3JpZ2luKQorICAgICAgICAsIG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0KKworcHJpdmF0
ZToKKyAgICBpbnQzMl90IG1fdmFsdWU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM0NvbnN0MzJWYWx1ZV9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNDb25zdDY0VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1By
b2NlZHVyZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworQ29uc3Q2NFZhbHVlOjp+Q29uc3Q2NFZhbHVlKCkK
K3sKK30KKworVmFsdWUqIENvbnN0NjRWYWx1ZTo6bmVnQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9j
KSBjb25zdAoreworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCAt
bV92YWx1ZSk7Cit9CisKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVy
ZSYgcHJvYywgaW50MzJfdCBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29u
c3Q2NFZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSArIHN0YXRpY19jYXN0PGludDY0X3Q+KG90aGVy
KSk7Cit9CisKK1ZhbHVlKiBDb25zdDY0VmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYgcHJv
YywgVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+
KG9yaWdpbigpLCBtX3ZhbHVlICsgb3RoZXItPmFzSW50NjQoKSk7Cit9CisKK1ZhbHVlKiBDb25z
dDY0VmFsdWU6OnN1YkNvbnN0YW50KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25z
dAoreworICAgIGlmICghb3RoZXItPmhhc0ludDY0KCkpCisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdDY0VmFsdWU+KG9yaWdpbigpLCBtX3ZhbHVlIC0g
b3RoZXItPmFzSW50NjQoKSk7Cit9CisKK3ZvaWQgQ29uc3Q2NFZhbHVlOjpkdW1wTWV0YShQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX3ZhbHVlKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNDb25zdDY0VmFsdWVfaAorI2RlZmluZSBCM0NvbnN0NjRWYWx1
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29u
c3Q2NFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2Nl
cHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJuIG9wY29kZSA9PSBDb25zdDY0OyB9CisgICAgCisg
ICAgfkNvbnN0NjRWYWx1ZSgpOworICAgIAorICAgIGludDY0X3QgdmFsdWUoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlOyB9CisKKyAgICBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIGFkZENvbnN0YW50KFByb2NlZHVyZSYsIGludDMyX3Qg
b3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUm
LCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBzdWJDb25zdGFudChQ
cm9jZWR1cmUmLCBWYWx1ZSogb3RoZXIpIGNvbnN0IG92ZXJyaWRlOworCitwcm90ZWN0ZWQ6Cisg
ICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCisgICAgZnJp
ZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIENvbnN0NjRWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
T3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgQ29u
c3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQorICAgIHsKKyAg
ICB9CisgICAgCitwcml2YXRlOgorICAgIGludDY0X3QgbV92YWx1ZTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzQ29uc3Q2NFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3REb3VibGVWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3REb3VibGVWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDcxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0NvbnN0RG91YmxlVmFsdWUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Byb2NlZHVyZUlubGluZXMuaCIKKyNpbmNs
dWRlICJCM1ZhbHVlSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
KworQ29uc3REb3VibGVWYWx1ZTo6fkNvbnN0RG91YmxlVmFsdWUoKQoreworfQorCitWYWx1ZSog
Q29uc3REb3VibGVWYWx1ZTo6bmVnQ29uc3RhbnQoUHJvY2VkdXJlJiBwcm9jKSBjb25zdAorewor
ICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERvdWJsZVZhbHVlPihvcmlnaW4oKSwgLW1fdmFsdWUp
OworfQorCitWYWx1ZSogQ29uc3REb3VibGVWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiBw
cm9jLCBpbnQzMl90IG90aGVyKSBjb25zdAoreworICAgIHJldHVybiBwcm9jLmFkZDxDb25zdERv
dWJsZVZhbHVlPihvcmlnaW4oKSwgbV92YWx1ZSArIHN0YXRpY19jYXN0PGRvdWJsZT4ob3RoZXIp
KTsKK30KKworVmFsdWUqIENvbnN0RG91YmxlVmFsdWU6OmFkZENvbnN0YW50KFByb2NlZHVyZSYg
cHJvYywgVmFsdWUqIG90aGVyKSBjb25zdAoreworICAgIGlmICghb3RoZXItPmhhc0RvdWJsZSgp
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gcHJvYy5hZGQ8Q29uc3REb3Vi
bGVWYWx1ZT4ob3JpZ2luKCksIG1fdmFsdWUgKyBvdGhlci0+YXNEb3VibGUoKSk7Cit9CisKK1Zh
bHVlKiBDb25zdERvdWJsZVZhbHVlOjpzdWJDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIFZhbHVl
KiBvdGhlcikgY29uc3QKK3sKKyAgICBpZiAoIW90aGVyLT5oYXNEb3VibGUoKSkKKyAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIHByb2MuYWRkPENvbnN0RG91YmxlVmFsdWU+KG9y
aWdpbigpLCBtX3ZhbHVlIC0gb3RoZXItPmFzRG91YmxlKCkpOworfQorCit2b2lkIENvbnN0RG91
YmxlVmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50ZigiJWxlIiwgbV92YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzQ29uc3REb3VibGVWYWx1ZV9oCisjZGVmaW5lIEIzQ29uc3REb3VibGVWYWx1ZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQ29uc3REb3VibGVWYWx1ZSA6IHB1YmxpYyBW
YWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7
IHJldHVybiBvcGNvZGUgPT0gQ29uc3REb3VibGU7IH0KKyAgICAKKyAgICB+Q29uc3REb3VibGVW
YWx1ZSgpOworICAgIAorICAgIGRvdWJsZSB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7
IH0KKworICAgIFZhbHVlKiBuZWdDb25zdGFudChQcm9jZWR1cmUmIHByb2MpIGNvbnN0IG92ZXJy
aWRlOworICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHByb2MsIGludDMyX3Qgb3Ro
ZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFZhbHVlKiBhZGRDb25zdGFudChQcm9jZWR1cmUmIHBy
b2MsIFZhbHVlKiBvdGhlcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgVmFsdWUqIHN1YkNvbnN0YW50
KFByb2NlZHVyZSYgcHJvYywgVmFsdWUqIG90aGVyKSBjb25zdCBvdmVycmlkZTsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgQ29uc3REb3VibGVW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAg
ICA6IFZhbHVlKGluZGV4LCBDb25zdERvdWJsZSwgRG91YmxlLCBvcmlnaW4pCisgICAgICAgICwg
bV92YWx1ZSh2YWx1ZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIGRvdWJsZSBtX3ZhbHVlOwor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQjNDb25zdERvdWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNDb25zdFB0clZhbHVlX2gKKyNkZWZpbmUgQjNDb25zdFB0clZhbHVlX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0NvbnN0MzJWYWx1ZS5oIgorI2luY2x1
ZGUgIkIzQ29uc3Q2NFZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CisvLyBVc3VhbGx5IHlvdSB3YW50IHRvIHVzZSBDb25zdDMyVmFsdWUgb3IgQ29uc3Q2NFZhbHVl
IGRpcmVjdGx5LiBCdXQgdGhpcyBpcyB1c2VmdWwgZm9yIHdyaXRpbmcKKy8vIHBsYXRmb3JtLWFn
bm9zdGljIGNvZGUuIE5vdGUgdGhhdCBhIENvbnN0UHRyVmFsdWUgd2lsbCBiZWhhdmUgbGlrZSBl
aXRoZXIgYSBDb25zdDMyVmFsdWUgb3IKKy8vIENvbnN0NjRWYWx1ZSBkZXBlbmRpbmcgb24gcGxh
dGZvcm0uCisKKyNpZiBVU0UoSlNWQUxVRTY0KQordHlwZWRlZiBDb25zdDY0VmFsdWUgQ29uc3RQ
dHJWYWx1ZUJhc2U7CisjZWxzZQordHlwZWRlZiBDb25zdDMyVmFsdWUgQ29uc3RQdHJWYWx1ZUJh
c2U7CisjZW5kaWYKKworY2xhc3MgQ29uc3RQdHJWYWx1ZSA6IHB1YmxpYyBDb25zdFB0clZhbHVl
QmFzZSB7CitwdWJsaWM6CisgICAgdm9pZCogdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDx2b2lkKj4oQ29uc3RQdHJWYWx1ZUJhc2U6OnZhbHVlKCkpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgVD4KKyAgICBDb25zdFB0clZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmln
aW4gb3JpZ2luLCBUKiBwb2ludGVyKQorICAgICAgICA6IENvbnN0UHRyVmFsdWVCYXNlKGluZGV4
LCBvcmlnaW4sIGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCisgICAgeworICAgIH0K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIENvbnN0UHRyVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9yaWdpbiBvcmlnaW4sIFQgcG9pbnRlcikKKyAgICAgICAgOiBDb25zdFB0clZhbHVlQmFz
ZShpbmRleCwgb3JpZ2luLCBzdGF0aWNfY2FzdDxpbnRwdHJfdD4ocG9pbnRlcikpCisgICAgewor
ICAgIH0KK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzQ29uc3RQdHJWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2suaCIKKyNpbmNs
dWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K0NvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpCit7Cit9CisKK3ZvaWQgQ29udHJvbFZhbHVl
OjpkdW1wTWV0YShQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChsaXN0
RHVtcChtX3N1Y2Nlc3NvcnMpKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb250cm9sVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzQ29udHJv
bFZhbHVlX2gKKyNkZWZpbmUgQjNDb250cm9sVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzRnJlcXVlbnRlZEJsb2NrLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwor
Y2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgQ29udHJvbFZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAg
ICAgICBzd2l0Y2ggKG9wY29kZSkgeworICAgICAgICBjYXNlIEp1bXA6CisgICAgICAgIGNhc2Ug
QnJhbmNoOgorICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBPb3BzOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2UgU3dpdGNoOiAKKyAgICAgICAgICAgIC8v
IFRoaXMgaXMgaGVyZSBiZWNhdXNlIFN3aXRjaFZhbHVlIGlzIGEgc3ViY2xhc3Mgb2YgQ29udHJv
bFZhbHVlLCBzbyB3ZSB3YW50CisgICAgICAgICAgICAvLyBzd2l0Y2hWYWx1ZS0+YXM8Q29udHJv
bFZhbHVlPigpIHRvIHJldHVybiBub24tbnVsbC4KKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCisgICAgdHlwZWRlZiBWZWN0b3I8RnJlcXVlbnRlZEJsb2NrLCAyPiBTdWNjZXNzb3JM
aXN0OworCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgfkNvbnRyb2xWYWx1ZSgpOworCisgICAgdW5z
aWduZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7
IH0KKyAgICBjb25zdCBGcmVxdWVudGVkQmxvY2smIHN1Y2Nlc3Nvcih1bnNpZ25lZCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV9zdWNjZXNzb3JzW2luZGV4XTsgfQorICAgIEZyZXF1ZW50ZWRCbG9j
ayYgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSB7IHJldHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhd
OyB9CisgICAgY29uc3QgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJu
IG1fc3VjY2Vzc29yczsgfQorICAgIFN1Y2Nlc3Nvckxpc3QmIHN1Y2Nlc3NvcnMoKSB7IHJldHVy
biBtX3N1Y2Nlc3NvcnM7IH0KKworcHJvdGVjdGVkOgorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZv
aWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIFVzZSB0
aGlzIGZvciBzdWJjbGFzc2VzLgorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1
ZShpbmRleCwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKKyAgICB7CisgICAg
fQorCisgICAgLy8gU3ViY2xhc3NlcyB3aWxsIHBvcHVsYXRlIHRoaXMuCisgICAgU3VjY2Vzc29y
TGlzdCBtX3N1Y2Nlc3NvcnM7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1ZShp
bmRleCwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAgeworICAgICAgICBBU1NFUlQob3Bjb2Rl
ID09IE9vcHMpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBSZXR1cm4uCisgICAgQ29u
dHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogcmVzdWx0KQorICAgICAgICA6IFZhbHVlKGluZGV4LCBvcGNvZGUsIFZvaWQsIG9yaWdp
biwgcmVzdWx0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBSZXR1cm4pOworICAg
IH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBKdW1wLgorICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJs
b2NrJiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsKKyAgICAgICAgbV9zdWNj
ZXNzb3JzLmFwcGVuZCh0YXJnZXQpOworICAgIH0KKworICAgIC8vIFVzZSB0aGlzIGZvciBCcmFu
Y2guCisgICAgQ29udHJvbFZhbHVlKAorICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgY29uc3QgRnJl
cXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgbm8pCisgICAgICAgIDog
VmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCisgICAgeworICAg
ICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CisgICAgICAgIG1fc3VjY2Vzc29ycy5hcHBl
bmQoeWVzKTsKKyAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChubyk7CisgICAgfQorfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNDb250cm9sVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNFZmZlY3RzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNFZmZlY3RzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkIzRWZmZWN0cy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
PHd0Zi9Db21tYVByaW50ZXIuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3ZvaWQgRWZmZWN0czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIENvbW1h
UHJpbnRlciBjb21tYSgifCIpOworICAgIGlmICh0ZXJtaW5hbCkKKyAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiVGVybWluYWwiKTsKKyAgICBpZiAoZXhpdHNTaWRld2F5cykKKyAgICAgICAgb3V0
LnByaW50KGNvbW1hLCAiRXhpdHNTaWRld2F5cyIpOworICAgIGlmIChjb250cm9sRGVwZW5kZW50
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJDb250cm9sRGVwZW5kZW50Iik7CisgICAgaWYg
KHdyaXRlc1NTQVN0YXRlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0ZXNTU0FTdGF0
ZSIpOworICAgIGlmICh3cml0ZXMpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlczoi
LCB3cml0ZXMpOworICAgIGlmIChyZWFkcykKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUmVh
ZHM6IiwgcmVhZHMpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVj
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRWZmZWN0c19oCisjZGVmaW5lIEIzRWZmZWN0
c19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNIZWFwUmFuZ2UuaCIKKyNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK3N0cnVjdCBFZmZlY3RzIHsKKyAgICAvLyBUcnVlIGlmIHRoaXMgY2Fubm90IGNvbnRp
bnVlIGV4ZWN1dGlvbiBpbiB0aGUgY3VycmVudCBibG9jay4KKyAgICBib29sIHRlcm1pbmFsIHsg
ZmFsc2UgfTsKKworICAgIC8vIFRydWUgaWYgdGhpcyB2YWx1ZSBjYW4gY2F1c2UgZXhlY3V0aW9u
IHRvIHRlcm1pbmF0ZSBhYnJ1cHRseS4KKyAgICBib29sIGV4aXRzU2lkZXdheXMgeyBmYWxzZSB9
OworCisgICAgLy8gVHJ1ZSBpZiB0aGUgaW5zdHJ1Y3Rpb24gbWF5IGNoYW5nZSBzZW1hbnRpY3Mg
aWYgaG9pc3RlZCBhYm92ZSBzb21lIGNvbnRyb2wgZmxvdy4KKyAgICBib29sIGNvbnRyb2xEZXBl
bmRlbnQgeyBmYWxzZSB9OworCisgICAgLy8gVHJ1ZSBpZiB0aGlzIHdyaXRlcyB0byB0aGUgU1NB
IHN0YXRlLiBPcGVyYXRpb25zIHRoYXQgd3JpdGUgU1NBIHN0YXRlIGRvbid0IHdyaXRlIHRvIGFu
eXRoaW5nCisgICAgLy8gaW4gIm1lbW9yeSIgYnV0IHRoZXkgaGF2ZSBhIHNpZGUtZWZmZWN0IGFu
eXdheS4gVGhpcyBpcyBmb3IgbW9kZWxpbmcgVXBzaWxvbnMuIFlvdSBjYW4gaWdub3JlCisgICAg
Ly8gdGhpcyBpZiB5b3UgaGF2ZSB5b3VyIG93biB3YXkgb2YgbW9kZWxpbmcgVXBzaWxvbnMgb3Ig
aWYgeW91IGludGVuZCB0byBqdXN0IHJlYnVpbGQgdGhlbQorICAgIC8vIGFueXdheS4KKyAgICBi
b29sIHdyaXRlc1NTQVN0YXRlIHsgZmFsc2UgfTsKKworICAgIEhlYXBSYW5nZSB3cml0ZXM7Cisg
ICAgSGVhcFJhbmdlIHJlYWRzOworCisgICAgYm9vbCBtdXN0RXhlY3V0ZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNTU0FT
dGF0ZSB8fCB3cml0ZXM7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNFZmZlY3RzX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW5jeUNsYXNzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM0ZyZXF1ZW5jeUNsYXNz
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSkK
K3sKKyAgICBzd2l0Y2ggKGZyZXF1ZW5jeSkgeworICAgIGNhc2UgRnJlcXVlbmN5Q2xhc3M6Ok5v
cm1hbDoKKyAgICAgICAgb3V0LnByaW50KCJOb3JtYWwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgRnJlcXVlbmN5Q2xhc3M6OlJhcmU6CisgICAgICAgIG91dC5wcmludCgiUmFyZSIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGcmVxdWVuY3lDbGFzcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbmN5Q2xhc3MuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNGcmVxdWVuY3lDbGFzc19oCisjZGVmaW5l
IEIzRnJlcXVlbmN5Q2xhc3NfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgRnJlcXVlbmN5Q2xhc3MgOiB1aW50OF90
IHsKKyAgICAvLyBXZSBkb24ndCBoYXZlIGFueSBoeXBvdGhlc2lzIGFib3V0IHRoZSBmcmVxdWVu
Y3kgb2YgdGhpcyBjb250cm9sIGZsb3cgY29uc3RydWN0LiBUaGlzIGlzCisgICAgLy8gdGhlIGNv
bW1vbiBjYXNlLiBXZSBjYW4gc3RpbGwgdXNlIGJhc2ljIGJsb2NrIGZyZXF1ZW5jeSBpbiB0aGlz
IGNhc2UuCisgICAgTm9ybWFsLAorCisgICAgLy8gV2UgZXhwZWN0IHRoYXQgdGhpcyBjb250cm9s
IGZsb3cgY29uc3RydWN0IHdpbGwgYmUgcmVhY2hlZCBzdXBlciByYXJlbHkuIEl0J3MgdmFsaWQg
dG8KKyAgICAvLyBwZXJmb3JtIG9wdGltaXphdGlvbnMgdGhhdCBwdW5pc2ggUmFyZSBjb2RlLiBO
b3RlIHRoYXQgdGhlcmUgd2lsbCBiZSBzaXR1YXRpb25zIHdoZXJlIHlvdQorICAgIC8vIGhhdmUg
dG8gc29tZWhvdyBjb25zdHJ1Y3QgYSBuZXcgZnJlcXVlbmN5IGNsYXNzIGZyb20gYSBtZXJnaW5n
IG9mIG11bHRpcGxlIGNsYXNzZXMuIFdoZW4KKyAgICAvLyB0aGlzIGhhcHBlbnMsIG5ldmVyIGNo
b29zZSBSYXJlOyBhbHdheXMgZ28gd2l0aCBOb3JtYWwuIFRoaXMgaXMgbmVjZXNzYXJ5IGJlY2F1
c2Ugd2UKKyAgICAvLyByZWFsbHkgZG8gcHVuaXNoIFJhcmUgY29kZSB2ZXJ5IGJhZGx5LgorICAg
IFJhcmUKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsK
KworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6OkZyZXF1ZW5jeUNsYXNzKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVuY3lDbGFzc19oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRnJlcXVlbnRlZEJsb2NrLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzRnJlcXVlbnRlZEJsb2NrX2gKKyNkZWZp
bmUgQjNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVlbnRlZEJs
b2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNGcmVxdWVudGVk
QmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNHZW5lcmF0ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzR2Vu
ZXJhdGUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQWlyR2VuZXJhdGUuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2lu
Y2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNMb3dlclRvQWlyLmgiCisjaW5jbHVkZSAi
QjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1JlZHVjZVN0cmVuZ3RoLmgiCisjaW5jbHVkZSAi
QjNWYWxpZGF0ZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBn
ZW5lcmF0ZShQcm9jZWR1cmUmIHByb2NlZHVyZSwgQ0NhbGxIZWxwZXJzJiBqaXQpCit7CisgICAg
QWlyOjpDb2RlIGNvZGU7CisgICAgZ2VuZXJhdGVUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworICAg
IEFpcjo6Z2VuZXJhdGUoY29kZSwgaml0KTsKK30KKwordm9pZCBnZW5lcmF0ZVRvQWlyKFByb2Nl
ZHVyZSYgcHJvY2VkdXJlLCBBaXI6OkNvZGUmIGNvZGUpCit7CisgICAgLy8gV2UgZG9uJ3QgcmVx
dWlyZSB0aGUgaW5jb21pbmcgSVIgdG8gaGF2ZSBwcmVkZWNlc3NvcnMgY29tcHV0ZWQuCisgICAg
cHJvY2VkdXJlLnJlc2V0UmVhY2hhYmlsaXR5KCk7CisgICAgCisgICAgaWYgKHNob3VsZFZhbGlk
YXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUocHJvY2VkdXJlKTsKKworICAgIC8vIElmIHdlJ3Jl
IGRvaW5nIHN1cGVyIHZlcmJvc2UgZHVtcGluZywgdGhlIHBoYXNlIHNjb3BlIG9mIGFueSBwaGFz
ZSB3aWxsIGFscmVhZHkgZG8gYSBkdW1wLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hv
dWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJJbml0aWFsIEIzOlxu
Iik7CisgICAgICAgIGRhdGFMb2cocHJvY2VkdXJlKTsKKyAgICB9CisKKyAgICByZWR1Y2VTdHJl
bmd0aChwcm9jZWR1cmUpOworICAgIAorICAgIC8vIEZJWE1FOiBBZGQgbW9yZSBvcHRpbWl6YXRp
b25zIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDUwNworCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAgdmFsaWRhdGUo
cHJvY2VkdXJlKTsKKyAgICAKKyAgICAvLyBJZiB3ZSdyZSBkb2luZyBzdXBlciB2ZXJib3NlIGR1
bXBpbmcsIHRoZSBwaGFzZSBzY29wZSBvZiBhbnkgcGhhc2Ugd2lsbCBhbHJlYWR5IGRvIGEgZHVt
cC4KKyAgICAvLyBOb3RlIHRoYXQgbG93ZXJUb0FpcigpIGFjdHMgbGlrZSBhIHBoYXNlIGluIHRo
aXMgcmVnYXJkLgorICAgIGlmIChzaG91bGREdW1wSVIoKSAmJiAhc2hvdWxkRHVtcElSQXRFYWNo
UGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBhZnRlciAiLCBwcm9jZWR1cmUubGFzdFBo
YXNlTmFtZSgpLCAiLCBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOworICAgICAgICBkYXRhTG9nKHBy
b2NlZHVyZSk7CisgICAgfQorCisgICAgbG93ZXJUb0Fpcihwcm9jZWR1cmUsIGNvZGUpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJhdGUuaAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0dlbmVyYXRlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzR2VuZXJhdGVfaAorI2RlZmluZSBCM0dlbmVyYXRlX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CisK
K25hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKK25hbWVzcGFjZSBBaXIgeyBjbGFz
cyBDb2RlOyB9CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQg
aW4tcGxhY2UsIGFuZCBnZW5lcmF0ZXMgaXQgdG8gbWFjaGluZSBjb2RlIGJ5IGZpcnN0CisvLyBp
bnRlcm5hbGx5IGNvbnZlcnRpbmcgdG8gYW4gQWlyOjpDb2RlIGFuZCB0aGVuIGdlbmVyYXRpbmcg
dGhhdC4KK0pTX0VYUE9SVF9QUklWQVRFIHZvaWQgZ2VuZXJhdGUoUHJvY2VkdXJlJiwgQ0NhbGxI
ZWxwZXJzJik7CisKKy8vIFRoaXMgdGFrZXMgYSBCMzo6UHJvY2VkdXJlLCBvcHRpbWl6ZXMgaXQg
aW4tcGxhY2UsIGFuZCBsb3dlcnMgaXQgdG8gQWlyLiBZb3UgY2FuIHRoZW4gZ2VuZXJhdGUKKy8v
IHRoZSBBaXIgdG8gbWFjaGluZSBjb2RlIHVzaW5nIEFpcjo6Z2VuZXJhdGUoKS4gTm90ZSB0aGF0
IGFuIEFpcjo6Q29kZSB3aWxsIGhhdmUgcG9pbnRlcnMgaW50byB0aGUKKy8vIEIzOjpQcm9jZWR1
cmUsIHNvIHlvdSBuZWVkIHRvIGVuc3VyZSB0aGF0IHRoZSBCMzo6UHJvY2VkdXJlIG91dGxpdmVz
IHRoZSBBaXI6OkNvZGUuCit2b2lkIGdlbmVyYXRlVG9BaXIoUHJvY2VkdXJlJiwgQWlyOjpDb2Rl
Jik7CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzR2VuZXJhdGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzR2VuZXJpY0ZyZXF1ZW50ZWRCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAor
I2RlZmluZSBCM0dlbmVyaWNGcmVxdWVudGVkQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzRnJlcXVlbmN5Q2xhc3MuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEEgZnJlcXVlbnRl
ZCBibG9jayBpcyBhIHR1cGxlIG9mIEJhc2ljQmxvY2sqIGFuZCBGcmVxdWVuY3lDbGFzcy4gSXQn
cyB1c3VhbGx5IHVzZWQgYXMgYQorLy8gc3VjY2Vzc29yIGVkZ2UuCisKK3RlbXBsYXRlPHR5cGVu
YW1lIEJhc2ljQmxvY2s+CitjbGFzcyBHZW5lcmljRnJlcXVlbnRlZEJsb2NrIHsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrKAorICAgICAgICBCYXNpY0Jsb2Nr
KiBibG9jayA9IG51bGxwdHIsIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSA9IEZyZXF1ZW5jeUNs
YXNzOjpOb3JtYWwpCisgICAgICAgIDogbV9ibG9jayhibG9jaykKKyAgICAgICAgLCBtX2ZyZXF1
ZW5jeShmcmVxdWVuY3kpCisgICAgeworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25z
dCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBtX2Jsb2NrID09IG90aGVyLm1fYmxvY2sKKyAgICAgICAgICAgICYmIG1fZnJlcXVlbmN5
ID09IG90aGVyLm1fZnJlcXVlbmN5OworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3IhPShjb25z
dCBHZW5lcmljRnJlcXVlbnRlZEJsb2NrJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICBleHBsaWNpdCBvcGVyYXRvciBi
b29sKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAqdGhpcyAhPSBHZW5lcmljRnJlcXVl
bnRlZEJsb2NrKCk7CisgICAgfQorCisgICAgQmFzaWNCbG9jayogYmxvY2soKSBjb25zdCB7IHJl
dHVybiBtX2Jsb2NrOyB9CisgICAgQmFzaWNCbG9jayomIGJsb2NrKCkgeyByZXR1cm4gbV9ibG9j
azsgfQorICAgIEZyZXF1ZW5jeUNsYXNzIGZyZXF1ZW5jeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJl
cXVlbmN5OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChmcmVxdWVuY3koKSAhPSBGcmVxdWVuY3lDbGFzczo6Tm9ybWFsKQorICAg
ICAgICAgICAgb3V0LnByaW50KGZyZXF1ZW5jeSgpLCAiOiIpOworICAgICAgICBvdXQucHJpbnQo
cG9pbnRlckR1bXAobV9ibG9jaykpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBCYXNpY0Jsb2Nr
KiBtX2Jsb2NrOworICAgIEZyZXF1ZW5jeUNsYXNzIG1fZnJlcXVlbmN5OworfTsKKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQjNHZW5lcmljRnJlcXVlbnRlZEJsb2NrX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzSGVhcFJhbmdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNIZWFwUmFuZ2UuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzSGVhcFJhbmdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJCM0hlYXBSYW5nZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3ZvaWQgSGVhcFJhbmdlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgaWYgKCp0aGlzID09IEhlYXBSYW5nZSgp
KSB7CisgICAgICAgIG91dC5wcmludCgiQm90dG9tIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisgICAgaWYgKCp0aGlzID09IHRvcCgpKSB7CisgICAgICAgIG91dC5wcmludCgiVG9wIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgb3V0LnByaW50KG1fYmVnaW4sICIuLi4iLCBtX2Vu
ZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSGVhcFJhbmdlLmgJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNIZWFwUmFuZ2UuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDk4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNIZWFwUmFuZ2VfaAorI2RlZmluZSBCM0hlYXBSYW5n
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4K
KyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKKy8vIEFsaWFzIGFuYWx5c2lzIGluIEIzIGlzIGRvbmUgYnkgY2hlY2tpbmcgaWYg
dHdvIGludGVnZXIgcmFuZ2VzIG92ZXJsYXAuIFRoaXMgaXMgcG93ZXJmdWwgZW5vdWdoCisvLyB0
byBiZSB1c2VkIGZvciBUQkFBLXN0eWxlIGFsaWFzIGFuYWx5c2lzIHVzZWQgYnkgdGhlIERGRywg
RlRMLCBhbmQgTExWTTogeW91IGp1c3QgdHVybiBlYWNoIG5vZGUKKy8vIGluIHRoZSB0cmVlIG9m
IGFic3RyYWN0IGhlYXBzIGludG8gYSBwcmUvcG9zdCByYW5nZS4KKworY2xhc3MgSGVhcFJhbmdl
IHsKK3B1YmxpYzoKKyAgICBIZWFwUmFuZ2UoKQorICAgICAgICA6IG1fYmVnaW4oMCkKKyAgICAg
ICAgLCBtX2VuZCgwKQorICAgIHsKKyAgICB9CisKKyAgICBIZWFwUmFuZ2UodW5zaWduZWQgYmVn
aW4sIHVuc2lnbmVkIGVuZCkKKyAgICAgICAgOiBtX2JlZ2luKGJlZ2luKQorICAgICAgICAsIG1f
ZW5kKGVuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChtX2VuZCA+PSBtX2JlZ2luKTsKKyAgICAg
ICAgaWYgKG1fYmVnaW4gPT0gbV9lbmQpIHsKKyAgICAgICAgICAgIC8vIENhbm9uaWNhbGl6ZSBl
bXB0eSByYW5nZXMuCisgICAgICAgICAgICBtX2JlZ2luID0gMDsKKyAgICAgICAgICAgIG1fZW5k
ID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRpYyBIZWFwUmFuZ2UgdG9wKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBIZWFwUmFuZ2UoMCwgVUlOVF9NQVgpOworICAgIH0KKworICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fYmVnaW4gPT0gb3RoZXIubV9iZWdpbgorICAgICAgICAgICAgJiYgbV9l
bmQgPT0gb3RoZXIubV9lbmQ7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhl
YXBSYW5nZSYgb3RoZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBv
dGhlcik7CisgICAgfQorICAgIAorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBtX2JlZ2luICE9IG1fZW5kOyB9CisKKyAgICB1bnNpZ25lZCBiZWdpbigpIGNvbnN0
IHsgcmV0dXJuIG1fYmVnaW47IH0KKyAgICB1bnNpZ25lZCBlbmQoKSBjb25zdCB7IHJldHVybiBt
X2VuZDsgfQorCisgICAgYm9vbCBvdmVybGFwcyhjb25zdCBIZWFwUmFuZ2UmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6cmFuZ2VzT3ZlcmxhcChtX2JlZ2luLCBtX2Vu
ZCwgb3RoZXIubV9iZWdpbiwgb3RoZXIubV9lbmQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2JlZ2lu
OworICAgIHVuc2lnbmVkIG1fZW5kOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNIZWFwUmFuZ2VfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBCM0luZGV4TWFwX2gKKyNkZWZpbmUgQjNJbmRleE1hcF9oCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIG1hcCBmb3Iga2V5cyB0aGF0IGhhdmUgYW4g
aW5kZXgoKS4gSXQncyBzdXBlciBlZmZpY2llbnQgZm9yIEJhc2ljQmxvY2tzLiBJdCdzIG9ubHkK
Ky8vIGVmZmljaWVudCBmb3IgVmFsdWVzIGlmIHlvdSBkb24ndCBjcmVhdGUgdG9vIG1hbnkgb2Yg
dGhlc2UgbWFwcywgc2luY2UgVmFsdWVzIGNhbiBoYXZlIHZlcnkKKy8vIHNwYXJzZSBpbmRpY2Vz
IGFuZCB0aGVyZSBhcmUgYSBsb3Qgb2YgVmFsdWVzLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBLZXks
IHR5cGVuYW1lIFZhbHVlPgorY2xhc3MgSW5kZXhNYXAgeworcHVibGljOgorICAgIGV4cGxpY2l0
IEluZGV4TWFwKHNpemVfdCBzaXplID0gMCkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLnJlc2l6
ZShzaXplKTsKKyAgICB9CisKKyAgICB2b2lkIHJlc2l6ZShzaXplX3Qgc2l6ZSkKKyAgICB7Cisg
ICAgICAgIG1fdmVjdG9yLnJlc2l6ZShzaXplKTsKKyAgICB9CisKKyAgICBWYWx1ZSYgb3BlcmF0
b3JbXShLZXkqIGtleSkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4
KCldOworICAgIH0KKyAgICAKKyAgICBjb25zdCBWYWx1ZSYgb3BlcmF0b3JbXShLZXkqIGtleSkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXktPmluZGV4KCldOworICAg
IH0KKyAgICAKK3ByaXZhdGU6CisgICAgVmVjdG9yPFZhbHVlPiBtX3ZlY3RvcjsKK307CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEIzSW5kZXhNYXBfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5k
ZXhTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNl
dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzSW5kZXhTZXRfaAorI2RlZmluZSBC
M0luZGV4U2V0X2gKKworI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3dGYv
Q29tbWFQcmludGVyLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBU
aGlzIGlzIGEgc2V0IGZvciB0aGluZ3MgdGhhdCBoYXZlIGFuIGluZGV4KCkuIEl0J3Mgc3VwZXIg
ZWZmaWNpZW50IGZvciBCYXNpY0Jsb2Nrcy4gSXQncyBvbmx5CisvLyBlZmZpY2llbnQgZm9yIFZh
bHVlcyBpZiB5b3UgZG9uJ3QgY3JlYXRlIHRvbyBtYW55IG9mIHRoZXNlIHNldHMsIHNpbmNlIFZh
bHVlcyBjYW4gaGF2ZSB2ZXJ5IHNwYXJzZQorLy8gaW5kaWNlcyBhbmQgdGhlcmUgYXJlIGEgbG90
IG9mIFZhbHVlcy4KKworLy8gSWYgeW91IHdhbnQgYSBzZXQgb2YgQmFzaWNCbG9ja3MsIHlvdSBk
byBJbmRleFNldDxCYXNpY0Jsb2NrPi4gU28sIFQgPSBCYXNpY0Jsb2NrLgordGVtcGxhdGU8dHlw
ZW5hbWUgVD4KK2NsYXNzIEluZGV4U2V0IHsKK3B1YmxpYzoKKyAgICBJbmRleFNldCgpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgYWRkKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJu
ICFtX3NldC5zZXQodmFsdWUtPmluZGV4KCkpOworICAgIH0KKworICAgIGJvb2wgY29udGFpbnMo
VCogdmFsdWUpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIXZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsK
KyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KKyAgICBjbGFz
cyBJdGVyYWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBJdGVyYWJsZShjb25zdCBDb2xsZWN0
aW9uVHlwZSYgY29sbGVjdGlvbiwgY29uc3QgSW5kZXhTZXQmIHNldCkKKyAgICAgICAgICAgIDog
bV9jb2xsZWN0aW9uKGNvbGxlY3Rpb24pCisgICAgICAgICAgICAsIG1fc2V0KHNldCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJs
aWM6CisgICAgICAgICAgICBpdGVyYXRvcigpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rp
b24obnVsbHB0cikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAg
aXRlcmF0b3IoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24sIEJpdFZlY3Rvcjo6U2V0
Qml0c0l0ZXJhYmxlOjppdGVyYXRvciBpdGVyKQorICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0
aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgICAgICwgbV9pdGVyKGl0ZXIpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQoKm1faXRl
cik7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2l0ZXIrKzsKKyAgICAgICAgICAgICAg
ICByZXR1cm4gKnRoaXM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIG1faXRlciA9PSBvdGhlci5tX2l0ZXI7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICAgICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBD
b2xsZWN0aW9uVHlwZSogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgQml0VmVjdG9yOjpTZXRC
aXRzSXRlcmFibGU6Oml0ZXJhdG9yIG1faXRlcjsKKyAgICAgICAgfTsKKworICAgICAgICBpdGVy
YXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fY29sbGVjdGlvbiwgbV9zZXQu
YmVnaW4oKSk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IobV9jb2xsZWN0aW9uLCBtX3NldC5lbmQoKSk7IH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IGNvbnN0IENvbGxlY3Rpb25UeXBlJiBtX2NvbGxlY3Rpb247CisgICAgICAgIGNvbnN0IEluZGV4
U2V0JiBtX3NldDsKKyAgICB9OworCisgICAgLy8gRm9yIGJhc2ljIGJsb2NrcywgeW91IGRvOgor
ICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUpOworICAgIC8vCisgICAgLy8gRm9yIHZh
bHVlcywgeW91IGRvOgorICAgIC8vIGluZGV4U2V0LnZhbHVlcyhwcm9jZWR1cmUudmFsdWVzKCkp
OworICAgIHRlbXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgorICAgIEl0ZXJhYmxlPENv
bGxlY3Rpb25UeXBlPiB2YWx1ZXMoY29uc3QgQ29sbGVjdGlvblR5cGUmIGNvbGxlY3Rpb24pIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gSXRlcmFibGU8Q29sbGVjdGlvblR5cGU+KGNvbGxl
Y3Rpb24pOworICAgIH0KKworICAgIGNvbnN0IEJpdFZlY3RvciYgaW5kaWNlcygpIGNvbnN0IHsg
cmV0dXJuIG1fc2V0OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
KyAgICB7CisgICAgICAgIENvbW1hUHJpbnRlciBjb21tYTsKKyAgICAgICAgZm9yIChzaXplX3Qg
aW5kZXggOiBpbmRpY2VzKCkuc2V0Qml0cygpKQorICAgICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBUOjpkdW1wUHJlZml4LCBpbmRleCk7CisgICAgfQorCitwcml2YXRlOgorICAgIEJpdFZlY3Rv
ciBtX3NldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gQjNJ
bmRleFNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9u
U2V0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2Vy
dGlvblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNJbnNlcnRpb25TZXQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM0Jhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisK
K3ZvaWQgSW5zZXJ0aW9uU2V0OjpleGVjdXRlKEJhc2ljQmxvY2sqIGJsb2NrKQoreworICAgIGV4
ZWN1dGVJbnNlcnRpb25zKGJsb2NrLT5tX3ZhbHVlcywgbV9pbnNlcnRpb25zKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbnNlcnRpb25TZXQuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM0luc2VydGlvblNldF9oCisjZGVmaW5lIEIzSW5zZXJ0aW9u
U2V0X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvSW5zZXJ0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworY2xhc3MgQmFzaWNCbG9jazsKK2NsYXNzIFByb2NlZHVyZTsKK2NsYXNzIFZhbHVlOwor
Cit0eXBlZGVmIFdURjo6SW5zZXJ0aW9uPFZhbHVlKj4gSW5zZXJ0aW9uOworCitjbGFzcyBJbnNl
cnRpb25TZXQgeworcHVibGljOgorICAgIEluc2VydGlvblNldChQcm9jZWR1cmUmIHByb2NlZHVy
ZSkKKyAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgeworICAgIH0KKworICAg
IFByb2NlZHVyZSYgY29kZSgpIHsgcmV0dXJuIG1fcHJvY2VkdXJlOyB9CisKKyAgICB2b2lkIGFw
cGVuZEluc2VydGlvbihjb25zdCBJbnNlcnRpb24mIGluc2VydGlvbikKKyAgICB7CisgICAgICAg
IG1faW5zZXJ0aW9ucy5hcHBlbmQoaW5zZXJ0aW9uKTsKKyAgICB9CisKKyAgICBWYWx1ZSogaW5z
ZXJ0VmFsdWUoc2l6ZV90IGluZGV4LCBWYWx1ZSogdmFsdWUpCisgICAgeworICAgICAgICBhcHBl
bmRJbnNlcnRpb24oSW5zZXJ0aW9uKGluZGV4LCB2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4u
LiBBcmd1bWVudHM+CisgICAgVmFsdWUqIGluc2VydChzaXplX3QgaW5kZXgsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpOworCisgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0
ZToKKyAgICBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOworICAgIFZlY3RvcjxJbnNlcnRpb24sIDg+
IG1faW5zZXJ0aW9uczsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzSW5zZXJ0aW9uU2V0X2gKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5zZXJ0aW9uU2V0SW5saW5lcy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldElubGluZXMuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luc2VydGlvblNldElu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNJbnNlcnRpb25TZXRJbmxp
bmVzX2gKKyNkZWZpbmUgQjNJbnNlcnRpb25TZXRJbmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM0luc2VydGlvblNldC5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJl
SW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordGVtcGxhdGU8
dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitWYWx1ZSogSW5zZXJ0
aW9uU2V0OjppbnNlcnQoc2l6ZV90IGluZGV4LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorewor
ICAgIHJldHVybiBpbnNlcnRWYWx1ZShpbmRleCwgbV9wcm9jZWR1cmUuYWRkPFZhbHVlVHlwZT4o
YXJndW1lbnRzLi4uKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzSW5zZXJ0aW9uU2V0SW5saW5lc19oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw1ODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzTG93ZXJU
b0Fpci5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgor
I2luY2x1ZGUgIkIzQWRkcmVzc01hdGNoZXIuaCIKKyNpbmNsdWRlICJCM0FyZ3VtZW50UmVnVmFs
dWUuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNDb21t
dXRhdGl2aXR5LmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgorI2luY2x1ZGUgIkIzSW5kZXhT
ZXQuaCIKKyNpbmNsdWRlICJCM0xvd2VyaW5nTWF0Y2hlci5oIgorI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKKyNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKKyNpbmNsdWRlICJCM1Byb2NlZHVy
ZS5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK25hbWVzcGFjZSB7CisKK2NsYXNzIExv
d2VyVG9BaXIgeworcHVibGljOgorICAgIExvd2VyVG9BaXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUs
IENvZGUmIGNvZGUpCisgICAgICAgIDogdmFsdWVUb1RtcChwcm9jZWR1cmUudmFsdWVzKCkuc2l6
ZSgpKQorICAgICAgICAsIGJsb2NrVG9CbG9jayhwcm9jZWR1cmUuc2l6ZSgpKQorICAgICAgICAs
IHVzZUNvdW50cyhwcm9jZWR1cmUpCisgICAgICAgICwgYWRkcmVzc1NlbGVjdG9yKCp0aGlzKQor
ICAgICAgICAsIHByb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgICwgY29kZShjb2RlKQorICAg
IHsKKyAgICB9CisKKyAgICB2b2lkIHJ1bigpCisgICAgeworICAgICAgICBmb3IgKEIzOjpCYXNp
Y0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZSkKKyAgICAgICAgICAgIGJsb2NrVG9CbG9ja1tibG9j
a10gPSBjb2RlLmFkZEJsb2NrKGJsb2NrLT5mcmVxdWVuY3koKSk7CisKKyAgICAgICAgLy8gTG93
ZXIgZGVmcyBiZWZvcmUgdXNlcyBvbiBhIGdsb2JhbCBsZXZlbC4gVGhpcyBpcyBhIGdvb2QgaGV1
cmlzdGljIHRvIGxvY2sgZG93biBhCisgICAgICAgIC8vIGhvaXN0ZWQgYWRkcmVzcyBleHByZXNz
aW9uIGJlZm9yZSB3ZSBkdXBsaWNhdGUgaXQgYmFjayBpbnRvIHRoZSBsb29wLgorICAgICAgICBm
b3IgKEIzOjpCYXNpY0Jsb2NrKiBibG9jayA6IHByb2NlZHVyZS5ibG9ja3NJblByZU9yZGVyKCkp
IHsKKyAgICAgICAgICAgIC8vIFJlc2V0IHNvbWUgc3RhdGUuCisgICAgICAgICAgICBpbnN0cy5y
ZXNpemUoMCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIFByb2Nlc3MgYmxvY2tzIGlu
IHJldmVyc2Ugb3JkZXIgc28gd2Ugc2VlIHVzZXMgYmVmb3JlIGRlZnMuIFRoYXQncyB3aGF0IGFs
bG93cyB1cworICAgICAgICAgICAgLy8gdG8gbWF0Y2ggcGF0dGVybnMgZWZmZWN0aXZlbHkuCisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+c2l6ZSgpOyBpLS07KSB7CisgICAg
ICAgICAgICAgICAgY3VycmVudFZhbHVlID0gYmxvY2stPmF0KGkpOworICAgICAgICAgICAgICAg
IGlmIChsb2NrZWQuY29udGFpbnMoY3VycmVudFZhbHVlKSkKKyAgICAgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICAgICAgaW5zdHMuYXBwZW5kKFZlY3RvcjxJbnN0PigpKTsK
KyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IHJ1bkxvd2VyaW5nTWF0Y2hlcihjdXJyZW50
VmFsdWUsICp0aGlzKTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJGQVRBTDogY291bGQgbm90IGxvd2VyICIsIGRlZXBEdW1wKGN1
cnJlbnRWYWx1ZSksICJcbiIpOworICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgLy8gTm93IGFwcGVuZCB0aGUgaW5zdHJ1Y3Rpb25zLiBpbnN0cyBjb250YWlucyB0aGVt
IGluIHJldmVyc2Ugb3JkZXIsIHNvIHdlIHByb2Nlc3MKKyAgICAgICAgICAgIC8vIGl0IGluIHJl
dmVyc2UuCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbnN0cy5zaXplKCk7IGktLTsp
IHsKKyAgICAgICAgICAgICAgICBmb3IgKEluc3QmIGluc3QgOiBpbnN0c1tpXSkKKyAgICAgICAg
ICAgICAgICAgICAgYmxvY2tUb0Jsb2NrW2Jsb2NrXS0+YXBwZW5kSW5zdChXVEY6Om1vdmUoaW5z
dCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBNYWtlIHN1cmUgdGhhdCB0aGUg
c3VjY2Vzc29ycyBhcmUgc2V0IHVwIGNvcnJlY3RseS4KKyAgICAgICAgICAgIEFTU0VSVChibG9j
ay0+c3VjY2Vzc29ycygpLnNpemUoKSA8PSAyKTsKKyAgICAgICAgICAgIGZvciAoQjM6OkJhc2lj
QmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkKKyAgICAgICAgICAg
ICAgICBibG9ja1RvQmxvY2tbYmxvY2tdLT5zdWNjZXNzb3JzKCkuYXBwZW5kKGJsb2NrVG9CbG9j
a1tzdWNjZXNzb3JdKTsKKyAgICAgICAgfQorCisgICAgICAgIEFpcjo6SW5zZXJ0aW9uU2V0IGlu
c2VydGlvblNldChjb2RlKTsKKyAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogcHJvbG9ndWUpCisg
ICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0SW5zdCgwLCBXVEY6Om1vdmUoaW5zdCkpOwor
ICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShjb2RlWzBdKTsKKyAgICB9CisKKyAgICBUbXAg
dG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIFRtcCYgdG1wID0gdmFsdWVUb1RtcFt2
YWx1ZV07CisgICAgICAgIGlmICghdG1wKQorICAgICAgICAgICAgdG1wID0gY29kZS5uZXdUbXAo
aXNJbnQodmFsdWUtPnR5cGUoKSkgPyBBcmc6OkdQIDogQXJnOjpGUCk7CisgICAgICAgIHJldHVy
biB0bXA7CisgICAgfQorCisgICAgLy8gVGhpcyB0dXJucyB0aGUgZ2l2ZW4gb3BlcmFuZCBpbnRv
IGFuIGFkZHJlc3MuCisgICAgQXJnIGVmZmVjdGl2ZUFkZHIoVmFsdWUqIGFkZHJlc3MpCisgICAg
eworICAgICAgICBhZGRyZXNzU2VsZWN0b3Iuc2VsZWN0ZWRBZGRyZXNzID0gQXJnKCk7CisgICAg
ICAgIGlmIChydW5BZGRyZXNzTWF0Y2hlcihhZGRyZXNzLCBhZGRyZXNzU2VsZWN0b3IpKQorICAg
ICAgICAgICAgcmV0dXJuIGFkZHJlc3NTZWxlY3Rvci5zZWxlY3RlZEFkZHJlc3M7CisKKyAgICAg
ICAgcmV0dXJuIEFyZzo6YWRkcih0bXAoYWRkcmVzcykpOworICAgIH0KKworICAgIEFyZyBlZmZl
Y3RpdmVBZGRyKFZhbHVlKiBhZGRyZXNzLCBWYWx1ZSogbWVtb3J5VmFsdWUpCisgICAgeworICAg
ICAgICBBcmcgcmVzdWx0ID0gZWZmZWN0aXZlQWRkcihhZGRyZXNzKTsKKyAgICAgICAgQVNTRVJU
KHJlc3VsdCk7CisKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSBtZW1vcnlWYWx1ZS0+YXM8TWVt
b3J5VmFsdWU+KCktPm9mZnNldCgpOworICAgICAgICBBcmcgb2Zmc2V0UmVzdWx0ID0gcmVzdWx0
LndpdGhPZmZzZXQob2Zmc2V0KTsKKyAgICAgICAgaWYgKCFvZmZzZXRSZXN1bHQpCisgICAgICAg
ICAgICByZXR1cm4gQXJnOjphZGRyKHRtcChhZGRyZXNzKSwgb2Zmc2V0KTsKKyAgICAgICAgcmV0
dXJuIG9mZnNldFJlc3VsdDsKKyAgICB9CisKKyAgICAvLyBUaGlzIGdpdmVzIHlvdSB0aGUgYWRk
cmVzcyBvZiB0aGUgZ2l2ZW4gTG9hZCBvciBTdG9yZS4gSWYgaXQncyBub3QgYSBMb2FkIG9yIFN0
b3JlLCB0aGVuCisgICAgLy8gaXQgcmV0dXJucyBBcmcoKS4KKyAgICBBcmcgYWRkcihWYWx1ZSog
bWVtb3J5VmFsdWUpCisgICAgeworICAgICAgICBNZW1vcnlWYWx1ZSogdmFsdWUgPSBtZW1vcnlW
YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAg
ICByZXR1cm4gQXJnKCk7CisKKyAgICAgICAgcmV0dXJuIGVmZmVjdGl2ZUFkZHIodmFsdWUtPmNo
aWxkcmVuKCkubGFzdCgpLCB2YWx1ZSk7CisgICAgfQorCisgICAgQXJnIGxvYWRBZGRyKFZhbHVl
KiBsb2FkVmFsdWUpCisgICAgeworICAgICAgICBpZiAobG9hZFZhbHVlLT5vcGNvZGUoKSA9PSBM
b2FkKQorICAgICAgICAgICAgcmV0dXJuIGFkZHIobG9hZFZhbHVlKTsKKyAgICAgICAgcmV0dXJu
IEFyZygpOworICAgIH0KKworICAgIEFyZyBpbW0oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAg
ICAgaWYgKHZhbHVlLT5oYXNJbnQzMigpKQorICAgICAgICAgICAgcmV0dXJuIEFyZzo6aW1tKHZh
bHVlLT5hc0ludDMyKCkpOworICAgICAgICByZXR1cm4gQXJnKCk7CisgICAgfQorCisgICAgQXJn
IGltbU9yVG1wKFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGlmIChBcmcgcmVzdWx0ID0g
aW1tKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgIHJldHVybiB0
bXAodmFsdWUpOworICAgIH0KKworICAgIHRlbXBsYXRlPEFpcjo6T3Bjb2RlIG9wY29kZSwgQ29t
bXV0YXRpdml0eSBjb21tdXRhdGl2aXR5ID0gTm90Q29tbXV0YXRpdmU+CisgICAgdm9pZCBhcHBl
bmRCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgVG1wIHJl
c3VsdCA9IHRtcChjdXJyZW50VmFsdWUpOworICAgICAgICAKKyAgICAgICAgLy8gVGhyZWUtb3Bl
cmFuZCBmb3JtcyBsaWtlOgorICAgICAgICAvLyAgICAgT3AgYSwgYiwgYworICAgICAgICAvLyBt
ZWFuIHNvbWV0aGluZyBsaWtlOgorICAgICAgICAvLyAgICAgYyA9IGEgT3AgYgorCisgICAgICAg
IGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIEFyZzo6SW1tLCBBcmc6OlRtcCwgQXJnOjpUbXApKSB7
CisgICAgICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgeworICAgICAg
ICAgICAgICAgIGlmIChpbW0ocmlnaHQpKSB7CisgICAgICAgICAgICAgICAgICAgIGFwcGVuZChv
cGNvZGUsIGltbShyaWdodCksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICAgICAgLy8gQSBub24tY29tbXV0YXRpdmUgb3BlcmF0aW9uIGNvdWxkIGhhdmUgYW4g
aW1tZWRpYXRlIGluIGxlZnQuCisgICAgICAgICAgICAgICAgaWYgKGltbShsZWZ0KSkgeworICAg
ICAgICAgICAgICAgICAgICBhcHBlbmQob3Bjb2RlLCBpbW0obGVmdCksIHRtcChyaWdodCksIHJl
c3VsdCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW1tKHJpZ2h0KSAmJiBpc1Zh
bGlkRm9ybShvcGNvZGUsIEFyZzo6VG1wLCBBcmc6OkltbSwgQXJnOjpUbXApKSB7CisgICAgICAg
ICAgICBhcHBlbmQob3Bjb2RlLCB0bXAobGVmdCksIGltbShyaWdodCksIHJlc3VsdCk7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAvLyBOb3RlIHRoYXQgbm8ga25v
d24gYXJjaGl0ZWN0dXJlIGhhcyBhIHRocmVlLW9wZXJhbmQgZm9ybSBvZiBiaW5hcnkgb3BlcmF0
aW9ucyB0aGF0IGFsc28KKyAgICAgICAgLy8gbG9hZCBmcm9tIG1lbW9yeS4gSWYgc3VjaCBhbiBh
Ym9taW5hdGlvbiBkaWQgZXhpc3QsIHdlIHdvdWxkIGhhbmRsZSBpdCBzb21ld2hlcmUgYXJvdW5k
CisgICAgICAgIC8vIGhlcmUuCisKKyAgICAgICAgLy8gVHdvLW9wZXJhbmQgZm9ybXMgbGlrZToK
KyAgICAgICAgLy8gICAgIE9wIGEsIGIKKyAgICAgICAgLy8gbWVhbiBzb21ldGhpbmcgbGlrZToK
KyAgICAgICAgLy8gICAgIGIgPSBiIE9wIGEKKworICAgICAgICAvLyBBdCB0aGlzIHBvaW50LCB3
ZSBwcmVmZXIgdmVyc2lvbnMgb2YgdGhlIG9wZXJhdGlvbiB0aGF0IGhhdmUgYSBmdXNlZCBsb2Fk
IG9yIGFuIGltbWVkaWF0ZQorICAgICAgICAvLyBvdmVyIHRocmVlIG9wZXJhbmQgZm9ybXMuCisg
ICAgICAgIAorICAgICAgICBpZiAoY29tbXV0YXRpdml0eSA9PSBDb21tdXRhdGl2ZSkgeworICAg
ICAgICAgICAgQXJnIGxlZnRBZGRyID0gbG9hZEFkZHIobGVmdCk7CisgICAgICAgICAgICBpZiAo
aXNWYWxpZEZvcm0ob3Bjb2RlLCBsZWZ0QWRkci5raW5kKCksIEFyZzo6VG1wKSkgeworICAgICAg
ICAgICAgICAgIGFwcGVuZChyZWxheGVkTW92ZUZvclR5cGUoY3VycmVudFZhbHVlLT50eXBlKCkp
LCB0bXAocmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgICAgIGFwcGVuZChvcGNvZGUsIGxl
ZnRBZGRyLCByZXN1bHQpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIEFyZyByaWdodEFkZHIgPSBsb2FkQWRkcihyaWdodCk7Cisg
ICAgICAgIGlmIChpc1ZhbGlkRm9ybShvcGNvZGUsIHJpZ2h0QWRkci5raW5kKCksIEFyZzo6VG1w
KSkgeworICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50VmFsdWUt
PnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChvcGNvZGUs
IHJpZ2h0QWRkciwgcmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisg
ICAgICAgIGlmIChpbW0ocmlnaHQpICYmIGlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIEFy
Zzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50
VmFsdWUtPnR5cGUoKSksIHRtcChsZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgICAgIGFwcGVuZChv
cGNvZGUsIGltbShyaWdodCksIHJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKworICAgICAgICBpZiAoaXNWYWxpZEZvcm0ob3Bjb2RlLCBBcmc6OlRtcCwgQXJnOjpUbXAs
IEFyZzo6VG1wKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKGxlZnQpLCB0bXAo
cmlnaHQpLCByZXN1bHQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAg
ICAgYXBwZW5kKHJlbGF4ZWRNb3ZlRm9yVHlwZShjdXJyZW50VmFsdWUtPnR5cGUoKSksIHRtcChs
ZWZ0KSwgcmVzdWx0KTsKKyAgICAgICAgYXBwZW5kKG9wY29kZSwgdG1wKHJpZ2h0KSwgcmVzdWx0
KTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTxBaXI6Ok9wY29kZSBvcGNvZGUsIENvbW11dGF0aXZp
dHkgY29tbXV0YXRpdml0eSA9IE5vdENvbW11dGF0aXZlPgorICAgIGJvb2wgdHJ5QXBwZW5kU3Rv
cmVCaW5PcChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIHsKKyAgICAgICAgLy8gRklY
TUU6IFRoaXMgZmFpbHMgdG8gY2hlY2sgaWYgdGhlcmUgYXJlIGFueSBlZmZlY3RzIGJldHdlZW4g
dGhlIExvYWQgYW5kIHRoZSBTdG9yZSB0aGF0CisgICAgICAgIC8vIGNvdWxkIGNsb2JiZXIgdGhl
IGxvYWRlZCB2YWx1ZS4gV2UgbmVlZCB0byBjaGVjayBzdWNoIHRoaW5ncyBiZWNhdXNlIHdlIGFy
ZSBlZmZlY3RpdmVseQorICAgICAgICAvLyBzaW5raW5nIHRoZSBsb2FkLgorICAgICAgICAvLyBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTM0CisgICAgICAgIAor
ICAgICAgICBBcmcgc3RvcmVBZGRyID0gYWRkcihjdXJyZW50VmFsdWUpOworICAgICAgICBBU1NF
UlQoc3RvcmVBZGRyKTsKKworICAgICAgICBWYWx1ZSogb3RoZXJWYWx1ZTsKKyAgICAgICAgaWYg
KGFkZHIobGVmdCkgPT0gc3RvcmVBZGRyKQorICAgICAgICAgICAgb3RoZXJWYWx1ZSA9IHJpZ2h0
OworICAgICAgICBlbHNlIGlmIChjb21tdXRhdGl2aXR5ID09IENvbW11dGF0aXZlICYmIGFkZHIo
cmlnaHQpID09IHN0b3JlQWRkcikKKyAgICAgICAgICAgIG90aGVyVmFsdWUgPSBsZWZ0OworICAg
ICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKGlzVmFs
aWRGb3JtKG9wY29kZSwgQXJnOjpJbW0sIHN0b3JlQWRkci5raW5kKCkpICYmIGltbShvdGhlclZh
bHVlKSkgeworICAgICAgICAgICAgYXBwZW5kKG9wY29kZSwgaW1tKG90aGVyVmFsdWUpLCBzdG9y
ZUFkZHIpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoIWlzVmFsaWRGb3JtKG9wY29kZSwgQXJnOjpUbXAsIHN0b3JlQWRkci5raW5kKCkpKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGFwcGVuZChvcGNvZGUsIHRtcChvdGhl
clZhbHVlKSwgc3RvcmVBZGRyKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
QWlyOjpPcGNvZGUgbW92ZUZvclR5cGUoVHlwZSB0eXBlKQorICAgIHsKKyAgICAgICAgc3dpdGNo
ICh0eXBlKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICByZXR1cm4gTW92ZTMy
OworICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXM2NEJp
dCgpKTsKKyAgICAgICAgICAgIHJldHVybiBNb3ZlOworICAgICAgICBjYXNlIERvdWJsZToKKyAg
ICAgICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IEFpcjo6T3Bjb2RlIHJlbGF4ZWRNb3ZlRm9yVHlwZShUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgY2FzZSBJbnQ2
NDoKKyAgICAgICAgICAgIHJldHVybiBNb3ZlOworICAgICAgICBjYXNlIERvdWJsZToKKyAgICAg
ICAgICAgIHJldHVybiBNb3ZlRG91YmxlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICB2b2lkIGFwcGVuZChBaXI6Ok9wY29k
ZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIGluc3Rz
Lmxhc3QoKS5hcHBlbmQoSW5zdChvcGNvZGUsIGN1cnJlbnRWYWx1ZSwgc3RkOjpmb3J3YXJkPEFy
Z3VtZW50cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKyAgICAKKyAgICBJbmRleFNldDxWYWx1
ZT4gbG9ja2VkOyAvLyBUaGVzZSBhcmUgdmFsdWVzIHRoYXQgd2lsbCBoYXZlIG5vIFRtcCBpbiBB
aXIuCisgICAgSW5kZXhNYXA8VmFsdWUsIFRtcD4gdmFsdWVUb1RtcDsgLy8gVGhlc2UgYXJlIHZh
bHVlcyB0aGF0IG11c3QgaGF2ZSBhIFRtcCBpbiBBaXIuIFdlIHNheSB0aGF0IGEgVmFsdWUqIHdp
dGggYSBub24tbnVsbCBUbXAgaXMgInBpbm5lZCIuCisgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxv
Y2ssIEFpcjo6QmFzaWNCbG9jayo+IGJsb2NrVG9CbG9jazsKKworICAgIFVzZUNvdW50cyB1c2VD
b3VudHM7CisKKyAgICBWZWN0b3I8VmVjdG9yPEluc3QsIDQ+PiBpbnN0czsKKyAgICBWZWN0b3I8
SW5zdD4gcHJvbG9ndWU7CisKKyAgICBWYWx1ZSogY3VycmVudFZhbHVlOworCisgICAgLy8gVGhl
IGFkZHJlc3Mgc2VsZWN0b3Igd2lsbCBtYXRjaCBhbnkgcGF0dGVybiB3aGVyZSB0aGUgaW5wdXQg
b3BlcmFuZHMgYXJlIGF2YWlsYWJsZSBhcyBUbXBzLgorICAgIC8vIEl0IGRvZXNuJ3QgY2FyZSBh
Ym91dCBzaGFyaW5nLiBJdCB3aWxsIGhhcHBpbHkgZW1pdCB0aGUgc2FtZSBhZGRyZXNzIGV4cHJl
c3Npb24gb3ZlciBhbmQgb3ZlcgorICAgIC8vIGFnYWluIHJlZ2FyZGxlc3Mgb2YgdGhlIGV4cHJl
c3Npb24ncyBjb21wbGV4aXR5LiBUaGlzIHdvcmtzIG91dCBmaW5lLCBzaW5jZSBhdCB0aGUgbWFj
aGluZQorICAgIC8vIGxldmVsLCBhZGRyZXNzIGV4cHJlc3Npb25zIGFyZSBzdXBlciBjaGVhcC4g
SG93ZXZlciwgdGhpcyBkb2VzIGhhdmUgYSBoYWNrIHRvIGF2b2lkCisgICAgLy8gInVuaG9pc3Rp
bmciIGFkZHJlc3MgZXhwcmVzc2lvbnMuCisgICAgY2xhc3MgQWRkcmVzc1NlbGVjdG9yIHsKKyAg
ICBwdWJsaWM6CisgICAgICAgIEFkZHJlc3NTZWxlY3RvcihMb3dlclRvQWlyJiBsb3dlcikKKyAg
ICAgICAgICAgIDogbG93ZXIobG93ZXIpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgYWNjZXB0Um9vdChWYWx1ZSogcm9vdCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhp
cy0+cm9vdCA9IHJvb3Q7CisgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIG1hdGNoIGFu
IGFkZHJlc3MgZXhwcmVzc2lvbiB0aGF0IGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQKKyAgICAg
ICAgICAgIC8vIGV4cGxpY2l0bHkuCisgICAgICAgICAgICByZXR1cm4gIWxvd2VyLnZhbHVlVG9U
bXBbcm9vdF07CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFjY2VwdFJvb3RMYXRlKFZhbHVl
KikgeyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgICAg
ICBib29sIGFjY2VwdEludGVybmFscyhWYWx1ZSogdmFsdWUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChsb3dlci52YWx1ZVRvVG1wW3ZhbHVlXSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4gYWNjZXB0
SW50ZXJuYWxzKGFyZ3VtZW50cy4uLik7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBhY2NlcHRJ
bnRlcm5hbHMoKSB7IHJldHVybiB0cnVlOyB9CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgICAgICB2b2lkIGFjY2VwdEludGVybmFsc0xhdGUoQXJndW1lbnRz
Li4uKSB7IH0KKworICAgICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
ICAgIGJvb2wgYWNjZXB0T3BlcmFuZHMoVmFsdWUqIHZhbHVlLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobG93ZXIubG9ja2VkLmNvbnRhaW5zKHZh
bHVlKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICByZXR1cm4g
YWNjZXB0T3BlcmFuZHMoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgfQorICAgICAgICBib29sIGFj
Y2VwdE9wZXJhbmRzKCkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KKyAgICAgICAgdm9pZCBhY2NlcHRPcGVyYW5kc0xhdGUoQXJndW1l
bnRzLi4uKSB7IH0KKworICAgICAgICBib29sIHRyeUFkZFNoaWZ0MShWYWx1ZSogaW5kZXgsIFZh
bHVlKiBsb2dTY2FsZSwgVmFsdWUqIGJhc2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChs
b2dTY2FsZS0+YXNJbnQoKSA8IDAgfHwgbG9nU2NhbGUtPmFzSW50KCkgPiAzKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRkcmVzcyA9IEFyZzo6
aW5kZXgoCisgICAgICAgICAgICAgICAgbG93ZXIudG1wKGJhc2UpLCBsb3dlci50bXAoaW5kZXgp
LCAxIDw8IGxvZ1NjYWxlLT5hc0ludCgpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCB0cnlBZGRTaGlmdDIoVmFsdWUqIGJhc2UsIFZhbHVlKiBp
bmRleCwgVmFsdWUqIGxvZ1NjYWxlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdHJ5
QWRkU2hpZnQxKGluZGV4LCBsb2dTY2FsZSwgYmFzZSk7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIHRyeUFkZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAocmlnaHQtPmhhc0ludDMyKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBUaGlzIHBy
b2R1Y3Rpb24gaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5IHNpbmNlIHdlIGV4cGVjdAorICAgICAg
ICAgICAgICAgIC8vIExvYWQoQWRkKEB4LCBAY29uc3QxKSwgb2Zmc2V0ID0gY29uc3QyKSB0byBo
YXZlIGFscmVhZHkgYmVlbiBzdHJlbmd0aC1yZWR1Y2VkCisgICAgICAgICAgICAgICAgLy8gdG8g
TG9hZChAeCwgb2Zmc2V0ID0gY29uc3QxICsgY29uc3QyKS4KKyAgICAgICAgICAgICAgICBzZWxl
Y3RlZEFkZHJlc3MgPSBBcmc6OmFkZHIobG93ZXIudG1wKGxlZnQpLCByaWdodC0+YXNJbnQzMigp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgc2VsZWN0ZWRBZGRyZXNzID0gQXJnOjppbmRleChsb3dlci50bXAobGVmdCksIGxvd2Vy
LnRtcChyaWdodCkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHRyeURpcmVjdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNlbGVjdGVkQWRk
cmVzcyA9IEFyZzo6YWRkcihsb3dlci50bXAocm9vdCkpOworICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIExvd2VyVG9BaXImIGxvd2VyOworICAg
ICAgICBWYWx1ZSogcm9vdDsKKyAgICAgICAgQXJnIHNlbGVjdGVkQWRkcmVzczsKKyAgICB9Owor
ICAgIEFkZHJlc3NTZWxlY3RvciBhZGRyZXNzU2VsZWN0b3I7CisKKyAgICAvLyBCZWxvdyBpcyB0
aGUgY29kZSBmb3IgYSBsb3dlcmluZyBzZWxlY3Rvciwgc28gdGhhdCB3ZSBjYW4gcGFzcyAqdGhp
cyB0byBydW5Mb3dlcmluZ01hdGNoZXIuCisgICAgLy8gVGhpcyB3aWxsIG1hdGNoIGNvbXBsZXgg
bXVsdGktdmFsdWUgZXhwcmVzc2lvbnMsIGJ1dCBvbmx5IGlmIHRoZXJlIGlzIG5vIHNoYXJpbmcu
IEZvciBleGFtcGxlLAorICAgIC8vIGl0IHdvbid0IG1hdGNoIGEgTG9hZCB0d2ljZSBhbmQgY2F1
c2UgdGhlIGdlbmVyYXRlZCBjb2RlIHRvIGRvIHR3byBsb2FkcyB3aGVuIHRoZSBvcmlnaW5hbAor
ICAgIC8vIGNvZGUganVzdCBkaWQgb25lLgorICAgIAorICAgIGJvb2wgYWNjZXB0Um9vdChWYWx1
ZSogcm9vdCkKKyAgICB7CisgICAgICAgIEFTU0VSVF9VTlVTRUQocm9vdCwgIWxvY2tlZC5jb250
YWlucyhyb290KSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICB2b2lk
IGFjY2VwdFJvb3RMYXRlKFZhbHVlKikgeyB9CisgICAgCisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIGJvb2wgYWNjZXB0SW50ZXJuYWxzKFZhbHVlKiB2YWx1ZSwgQXJn
dW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIC8vIElmIG9uZSBvZiB0aGUgaW50
ZXJuYWwgdGhpbmdzIGhhcyBhbHJlYWR5IGJlZW4gY29tcHV0ZWQsIHRoZW4gd2UgZG9uJ3Qgd2Fu
dCB0byBjYXVzZQorICAgICAgICAvLyBpdCB0byBiZSByZWNvbXB1dGVkIGFnYWluLgorICAgICAg
ICBpZiAodmFsdWVUb1RtcFt2YWx1ZV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIAorICAgICAgICAvLyBXZSByZXF1aXJlIGludGVybmFscyB0byBoYXZlIG9ubHkgb25lIHVz
ZSAtIHVzLgorICAgICAgICBpZiAodXNlQ291bnRzW3ZhbHVlXSAhPSAxKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGFjY2VwdEludGVybmFscyhh
cmd1bWVudHMuLi4pOworICAgIH0KKyAgICBib29sIGFjY2VwdEludGVybmFscygpIHsgcmV0dXJu
IHRydWU7IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAg
dm9pZCBhY2NlcHRJbnRlcm5hbHNMYXRlKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIGxvY2tlZC5hZGQodmFsdWUpOworICAgICAgICBhY2NlcHRJ
bnRlcm5hbHNMYXRlKGFyZ3VtZW50cy4uLik7CisgICAgfQorICAgIHZvaWQgYWNjZXB0SW50ZXJu
YWxzTGF0ZSgpIHsgfQorICAgIAorICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4K
KyAgICBib29sIGFjY2VwdE9wZXJhbmRzKFZhbHVlKiB2YWx1ZSwgQXJndW1lbnRzLi4uIGFyZ3Vt
ZW50cykKKyAgICB7CisgICAgICAgIGlmIChsb2NrZWQuY29udGFpbnModmFsdWUpKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gYWNjZXB0T3BlcmFuZHMoYXJndW1l
bnRzLi4uKTsKKyAgICB9CisgICAgYm9vbCBhY2NlcHRPcGVyYW5kcygpIHsgcmV0dXJuIHRydWU7
IH0KKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgdm9pZCBh
Y2NlcHRPcGVyYW5kc0xhdGUoQXJndW1lbnRzLi4uKSB7IH0KKyAgICAKKyAgICBib29sIHRyeUxv
YWQoVmFsdWUqIGFkZHJlc3MpCisgICAgeworICAgICAgICBhcHBlbmQoCisgICAgICAgICAgICBt
b3ZlRm9yVHlwZShjdXJyZW50VmFsdWUtPnR5cGUoKSksCisgICAgICAgICAgICBlZmZlY3RpdmVB
ZGRyKGFkZHJlc3MsIGN1cnJlbnRWYWx1ZSksIHRtcChjdXJyZW50VmFsdWUpKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5QWRkKFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQpCisgICAgeworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAg
ICAgICBjYXNlIEludDMyOgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QWRkMzIsIENvbW11dGF0
aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2Fz
ZSBJbnQ2NDoKKyAgICAgICAgICAgIGFwcGVuZEJpbk9wPEFkZDY0LCBDb21tdXRhdGl2ZT4obGVm
dCwgcmlnaHQpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlBbmQoVmFs
dWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAobGVmdC0+dHlw
ZSgpKSB7CisgICAgICAgIGNhc2UgSW50MzI6CisgICAgICAgICAgICBhcHBlbmRCaW5PcDxBbmQz
MiwgQ29tbXV0YXRpdmU+KGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBjYXNlIEludDY0OgorICAgICAgICAgICAgYXBwZW5kQmluT3A8QW5kNjQsIENvbW11
dGF0aXZlPihsZWZ0LCByaWdodCk7CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbW9yZSB0eXBlcyEKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBib29s
IHRyeVN0b3JlQWRkTG9hZChWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0LCBWYWx1ZSopCisgICAg
eworICAgICAgICBzd2l0Y2ggKGxlZnQtPnR5cGUoKSkgeworICAgICAgICBjYXNlIEludDMyOgor
ICAgICAgICAgICAgcmV0dXJuIHRyeUFwcGVuZFN0b3JlQmluT3A8QWRkMzIsIENvbW11dGF0aXZl
PihsZWZ0LCByaWdodCk7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAvLyBGSVhNRTog
SW1wbGVtZW50IG1vcmUgdHlwZXMhCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IH0KKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlTdG9yZUFuZExvYWQoVmFsdWUqIGxlZnQsIFZh
bHVlKiByaWdodCwgVmFsdWUqKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChsZWZ0LT50eXBlKCkp
IHsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAgICAgICAgICAgIHJldHVybiB0cnlBcHBlbmRTdG9y
ZUJpbk9wPEFuZDMyLCBDb21tdXRhdGl2ZT4obGVmdCwgcmlnaHQpOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCBtb3JlIHR5cGVzIQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIGJvb2wgdHJ5U3Rv
cmUoVmFsdWUqIHZhbHVlLCBWYWx1ZSogYWRkcmVzcykKKyAgICB7CisgICAgICAgIGFwcGVuZCht
b3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwgdG1wKHZhbHVlKSwgZWZmZWN0aXZlQWRkcihhZGRy
ZXNzLCBjdXJyZW50VmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
Ym9vbCB0cnlUcnVuY0FyZ3VtZW50UmVnKFZhbHVlKiBhcmd1bWVudFJlZykKKyAgICB7CisgICAg
ICAgIHByb2xvZ3VlLmFwcGVuZChJbnN0KAorICAgICAgICAgICAgTW92ZSwgY3VycmVudFZhbHVl
LAorICAgICAgICAgICAgVG1wKGFyZ3VtZW50UmVnLT5hczxBcmd1bWVudFJlZ1ZhbHVlPigpLT5h
cmd1bWVudFJlZygpKSwKKyAgICAgICAgICAgIHRtcChjdXJyZW50VmFsdWUpKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGJvb2wgdHJ5VHJ1bmMoVmFsdWUqIHZhbHVlKQor
ICAgIHsKKyAgICAgICAgYXBwZW5kKE1vdmUsIHRtcCh2YWx1ZSksIHRtcChjdXJyZW50VmFsdWUp
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgYm9vbCB0cnlBcmd1bWVudFJl
ZygpCisgICAgeworICAgICAgICBwcm9sb2d1ZS5hcHBlbmQoSW5zdCgKKyAgICAgICAgICAgIG1v
dmVGb3JUeXBlKGN1cnJlbnRWYWx1ZS0+dHlwZSgpKSwgY3VycmVudFZhbHVlLAorICAgICAgICAg
ICAgVG1wKGN1cnJlbnRWYWx1ZS0+YXM8QXJndW1lbnRSZWdWYWx1ZT4oKS0+YXJndW1lbnRSZWco
KSksCisgICAgICAgICAgICB0bXAoY3VycmVudFZhbHVlKSkpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlDb25zdDMyKCkKKyAgICB7CisgICAgICAgIGFw
cGVuZChNb3ZlLCBpbW0oY3VycmVudFZhbHVlKSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9vbCB0cnlDb25zdDY0KCkKKyAgICB7
CisgICAgICAgIGFwcGVuZChNb3ZlLCBBcmc6OmltbTY0KGN1cnJlbnRWYWx1ZS0+YXNJbnQ2NCgp
KSwgdG1wKGN1cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAg
ICBib29sIHRyeUlkZW50aXR5KFZhbHVlKiB2YWx1ZSkKKyAgICB7CisgICAgICAgIGFwcGVuZChy
ZWxheGVkTW92ZUZvclR5cGUodmFsdWUtPnR5cGUoKSksIGltbU9yVG1wKHZhbHVlKSwgdG1wKGN1
cnJlbnRWYWx1ZSkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgCisgICAgYm9v
bCB0cnlSZXR1cm4oVmFsdWUqIHZhbHVlKQorICAgIHsKKyAgICAgICAgYXBwZW5kKHJlbGF4ZWRN
b3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgpKSwgaW1tT3JUbXAodmFsdWUpLCBUbXAoR1BSSW5mbzo6
cmV0dXJuVmFsdWVHUFIpKTsKKyAgICAgICAgYXBwZW5kKFJldCk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKyAgICAKKyAgICBQcm9jZWR1cmUmIHByb2NlZHVyZTsKKyAgICBDb2RlJiBj
b2RlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQgbG93ZXJUb0FpcihQ
cm9jZWR1cmUmIHByb2NlZHVyZSwgQ29kZSYgY29kZSkKK3sKKyAgICBQaGFzZVNjb3BlIHBoYXNl
U2NvcGUocHJvY2VkdXJlLCAibG93ZXJUb0FpciIpOworICAgIExvd2VyVG9BaXIgbG93ZXJUb0Fp
cihwcm9jZWR1cmUsIGNvZGUpOworICAgIGxvd2VyVG9BaXIucnVuKCk7Cit9CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNMb3dlclRvQWlyX2gKKyNkZWZpbmUgQjNMb3dlclRvQWlyX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQ
cm9jZWR1cmU7CituYW1lc3BhY2UgQWlyIHsgY2xhc3MgQ29kZTsgfQorCisvLyBUaGlzIGxvd2Vy
cyB0aGUgY3VycmVudCBCMyBwcm9jZWR1cmUgdG8gYW4gQWlyIGNvZGUuCisKK3ZvaWQgbG93ZXJU
b0FpcihQcm9jZWR1cmUmLCBBaXI6OkNvZGUmKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNMb3dlclRvQWlyX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJpbmdNYXRjaGVyLnBhdHRl
cm5zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyaW5nTWF0
Y2hlci5wYXR0ZXJucwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0xvd2VyaW5nTWF0Y2hlci5wYXR0ZXJucwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBA
CisjIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisj
CisjIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorIyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisj
CisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRS
SUJVVE9SUyBgYEFTIElTJycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMg
Q09OVFJJQlVUT1JTCisjIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTCisjIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YKKyMgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCittYXRjaGVyIExvd2VyaW5n
TWF0Y2hlcgorCisjIFRoZXNlIHJ1bGVzIGFyZSBjb25zaWRlcmVkIGluIGEgY2FzY2FkZSwgc3Rh
cnRpbmcgYXQgdGhlIHRvcC4gSXQncyBpbXBsZW5lbnRlZCB1c2luZyBzd2l0Y2gKKyMgc3RhdGVt
ZW50cyB3aGVyZXZlciBwb3NzaWJsZS4KKworIyBOb3RlOiBhZGRpbmcgbW9yZSBydWxlcyB0byB0
aGlzIG1hdGNoZXIgaXMgYW4gZXhjZWxsZW50IHdheSBvZiBpbXByb3ZpbmcgcGVyZm9ybWFuY2Uh
CisKK0xvYWQgPSBMb2FkKGFkZHJlc3MpCisKK0FkZCA9IEFkZChsZWZ0LCByaWdodCkKK0FuZCA9
IEJpdEFuZChsZWZ0LCByaWdodCkKKworU3RvcmVBZGRMb2FkID0gU3RvcmUoQWRkKGxlZnQsIHJp
Z2h0KSwgYWRkcmVzcykKK1N0b3JlQW5kTG9hZCA9IFN0b3JlKEJpdEFuZChsZWZ0LCByaWdodCks
IGFkZHJlc3MpCitTdG9yZSA9IFN0b3JlKHZhbHVlLCBhZGRyZXNzKQorCitUcnVuY0FyZ3VtZW50
UmVnID0gVHJ1bmMoYXJndW1lbnRSZWcgPSBBcmd1bWVudFJlZygpKQorVHJ1bmMgPSBUcnVuYyh2
YWx1ZSkKKworQXJndW1lbnRSZWcgPSBBcmd1bWVudFJlZygpCisKK0NvbnN0MzIgPSBDb25zdDMy
KCkKK0NvbnN0NjQgPSBDb25zdDY0KCkKKworIyBJdCB3b3VsZCBiZSBmYW50YXN0aWMgdG8gbm90
IGhhdmUgdG8gaGF2ZSB0aGlzIGhlcmUsIGJ1dCB0aGUgcGhpbG9zb3BoeSBvZiBvdXIgbG93ZXJp
bmcgaXMgdGhhdAorIyBpdCBzaG91bGQgYmUgc291bmQgZXZlbiBpZiB3ZSBoYXZlbid0IHJ1biBv
cHRpbWl6YXRpb25zLgorSWRlbnRpdHkgPSBJZGVudGl0eSh2YWx1ZSkKKworUmV0dXJuID0gUmV0
dXJuKHZhbHVlKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzTWVtb3J5VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitNZW1vcnlWYWx1ZTo6fk1lbW9yeVZhbHVlKCkKK3sK
K30KKwordm9pZCBNZW1vcnlWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBpZiAobV9vZmZzZXQpCisgICAgICAgIG91dC5wcmludCgib2Zmc2V0ID0gIiwgbV9v
ZmZzZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNNZW1vcnlWYWx1ZV9oCisjZGVmaW5l
IEIzTWVtb3J5VmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFs
dWUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEZJWE1FOiBBZGQg
YWxpYXMgYW5hbHlzaXMgdG8gdGhlc2UgYnkgYWxsb3dpbmcgdGhlIGNsaWVudCB0byBhc3NvY2lh
dGUgYW4gaW50ZWdlciByYW5nZSB0byB0aGUKKy8vIHZhbHVlLiBUd28gb3BlcmF0aW9ucyBtYXkg
YWNjZXNzIHRoZSBzYW1lIG1lbW9yeSBpZiB0aGVpciByYW5nZXMgb3ZlcmxhcHMuCisvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTM1CisKK2NsYXNzIEpTX0VY
UE9SVF9QUklWQVRFIE1lbW9yeVZhbHVlIDogcHVibGljIFZhbHVlIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KG9wY29kZSkgeworICAgICAgICBjYXNlIExvYWQ4WjoKKyAgICAgICAgY2FzZSBMb2FkOFM6Cisg
ICAgICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgY2FzZSBMb2FkMTZTOgorICAgICAgICBjYXNl
IExvYWRGbG9hdDoKKyAgICAgICAgY2FzZSBMb2FkOgorICAgICAgICBjYXNlIFN0b3JlODoKKyAg
ICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgIGNh
c2UgU3RvcmU6CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIH5NZW1vcnlW
YWx1ZSgpOworCisgICAgaW50MzJfdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsg
fQorICAgIHZvaWQgc2V0T2Zmc2V0KGludDMyX3Qgb2Zmc2V0KSB7IG1fb2Zmc2V0ID0gb2Zmc2V0
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IC8vIFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFu
eSBvZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKKyAgICAvLyBkZXNjcmliZXMg
dGhlIHJldHVybmVkIHR5cGUpLgorICAgIE1lbW9yeVZhbHVlKAorICAgICAgICB1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9p
bnRlciwKKyAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKGluZGV4
LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZz
ZXQpCisgICAgeworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAg
c3dpdGNoIChvcGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAgICAgICAgY2FzZSBMb2Fk
OFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAgICBjYXNlIExvYWQxNlM6
CisgICAgICAgICAgICAgICAgQVNTRVJUKHR5cGUgPT0gSW50MzIpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgICAgICAgICAgQVNT
RVJUKHR5cGUgPT0gRG91YmxlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgY2Fz
ZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9yZToKKyAgICAgICAgICAgICAgICBB
U1NFUlQodHlwZSA9PSBWb2lkKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2Fk
cyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KKyAgICBNZW1vcnlWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIs
IGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBNZW1vcnlWYWx1ZShpbmRleCwgb3Bjb2Rl
LCBvcGNvZGUgPT0gTG9hZEZsb2F0ID8gRG91YmxlIDogSW50MzIsIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KQorICAgIHsKKyAgICB9CisKKyAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9yZXMu
CisgICAgTWVtb3J5VmFsdWUoCisgICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAorICAgICAgICBp
bnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoaW5kZXgsIG9wY29kZSwgVm9pZCwg
b3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCisgICAg
eworICAgICAgICBpZiAoIUFTU0VSVF9ESVNBQkxFRCkgeworICAgICAgICAgICAgc3dpdGNoIChv
cGNvZGUpIHsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZTE2OgorICAgICAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICAgICAgY2FzZSBTdG9y
ZToKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpbnQzMl90IG1fb2Zmc2V0IHsg
MCB9OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNNZW1vcnlWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM09wY29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzT3Bjb2RlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBu
YW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dpdGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIE5vcDoK
KyAgICAgICAgb3V0LnByaW50KCJOb3AiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSWRl
bnRpdHk6CisgICAgICAgIG91dC5wcmludCgiSWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgQ29uc3QzMjoKKyAgICAgICAgb3V0LnByaW50KCJDb25zdDMyIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENvbnN0NjQ6CisgICAgICAgIG91dC5wcmludCgiQ29uc3Q2NCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDb25zdERvdWJsZToKKyAgICAgICAgb3V0LnBy
aW50KCJDb25zdERvdWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3Q6
CisgICAgICAgIG91dC5wcmludCgiU3RhY2tTbG90Iik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIEFyZ3VtZW50UmVnOgorICAgICAgICBvdXQucHJpbnQoIkFyZ3VtZW50UmVnIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICAgICAgb3V0LnByaW50KCJG
cmFtZVBvaW50ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQWRkOgorICAgICAgICBv
dXQucHJpbnQoIkFkZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdWI6CisgICAgICAg
IG91dC5wcmludCgiU3ViIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIE11bDoKKyAgICAg
ICAgb3V0LnByaW50KCJNdWwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRGl2OgorICAg
ICAgICBvdXQucHJpbnQoIkRpdiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBDaGlsbERp
djoKKyAgICAgICAgb3V0LnByaW50KCJDaGlsbERpdiIpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBNb2Q6CisgICAgICAgIG91dC5wcmludCgiTW9kIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEJpdEFuZDoKKyAgICAgICAgb3V0LnByaW50KCJCaXRBbmQiKTsKKyAgICAgICAgcmV0
dXJuOworICAgIGNhc2UgQml0T3I6CisgICAgICAgIG91dC5wcmludCgiQml0T3IiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgQml0WG9yOgorICAgICAgICBvdXQucHJpbnQoIkJpdFhvciIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTaGw6CisgICAgICAgIG91dC5wcmludCgiU2hs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNTaHI6CisgICAgICAgIG91dC5wcmludCgi
U1NociIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBaU2hyOgorICAgICAgICBvdXQucHJp
bnQoIlpTaHIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDg6CisgICAgICAgIG91
dC5wcmludCgiU0V4dDgiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU0V4dDE2OgorICAg
ICAgICBvdXQucHJpbnQoIlNFeHQxNiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTRXh0
MzI6CisgICAgICAgIG91dC5wcmludCgiU0V4dDMyIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFpFeHQzMjoKKyAgICAgICAgb3V0LnByaW50KCJaRXh0MzIiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgVHJ1bmM6CisgICAgICAgIG91dC5wcmludCgiVHJ1bmMiKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgRlJvdW5kOgorICAgICAgICBvdXQucHJpbnQoIkZSb3VuZCIpOwor
ICAgICAgICByZXR1cm47CisgICAgY2FzZSBJVG9EOgorICAgICAgICBvdXQucHJpbnQoIklUb0Qi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgRFRvSTMyOgorICAgICAgICBvdXQucHJpbnQo
IkRUb0kzMiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgb3V0
LnByaW50KCJFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBOb3RFcXVhbDoKKyAg
ICAgICAgb3V0LnByaW50KCJOb3RFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBM
ZXNzVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJMZXNzVGhhbiIpOworICAgICAgICByZXR1cm47
CisgICAgY2FzZSBHcmVhdGVyVGhhbjoKKyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyVGhhbiIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgICAgIG91dC5wcmlu
dCgiTGVzc0VxdWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEdyZWF0ZXJFcXVhbDoK
KyAgICAgICAgb3V0LnByaW50KCJHcmVhdGVyRXF1YWwiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgQWJvdmU6CisgICAgICAgIG91dC5wcmludCgiQWJvdmUiKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgQmVsb3c6CisgICAgICAgIG91dC5wcmludCgiQmVsb3ciKTsKKyAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICAgICAgb3V0LnByaW50KCJBYm92ZUVx
dWFsIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIG91
dC5wcmludCgiQmVsb3dFcXVhbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkOFo6
CisgICAgICAgIG91dC5wcmludCgiTG9hZDhaIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IExvYWQ4UzoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkOFMiKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgTG9hZDE2WjoKKyAgICAgICAgb3V0LnByaW50KCJMb2FkMTZaIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIExvYWQxNlM6CisgICAgICAgIG91dC5wcmludCgiTG9hZDE2UyIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIG91dC5wcmlu
dCgiTG9hZEZsb2F0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIExvYWQ6CisgICAgICAg
IG91dC5wcmludCgiTG9hZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdG9yZTg6Cisg
ICAgICAgIG91dC5wcmludCgiU3RvcmU4Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0
b3JlMTY6CisgICAgICAgIG91dC5wcmludCgiU3RvcmUxNiIpOworICAgICAgICByZXR1cm47Cisg
ICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAgICBvdXQucHJpbnQoIlN0b3JlRmxvYXQiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RvcmU6CisgICAgICAgIG91dC5wcmludCgiU3RvcmUi
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ0NhbGw6CisgICAgICAgIG91dC5wcmludCgi
Q0NhbGwiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgUGF0Y2hwb2ludDoKKyAgICAgICAg
b3V0LnByaW50KCJQYXRjaHBvaW50Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNr
QWRkOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrQWRkIik7CisgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIENoZWNrU3ViOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrU3ViIik7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICBvdXQucHJpbnQoIkNoZWNrTXVs
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIENoZWNrOgorICAgICAgICBvdXQucHJpbnQo
IkNoZWNrIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFVwc2lsb246CisgICAgICAgIG91
dC5wcmludCgiVXBzaWxvbiIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBQaGk6CisgICAg
ICAgIG91dC5wcmludCgiUGhpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEp1bXA6Cisg
ICAgICAgIG91dC5wcmludCgiSnVtcCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBCcmFu
Y2g6CisgICAgICAgIG91dC5wcmludCgiQnJhbmNoIik7CisgICAgICAgIHJldHVybjsKKyAgICBj
YXNlIFN3aXRjaDoKKyAgICAgICAgb3V0LnByaW50KCJTd2l0Y2giKTsKKyAgICAgICAgcmV0dXJu
OworICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBvdXQucHJpbnQoIlJldHVybiIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBPb3BzOgorICAgICAgICBvdXQucHJpbnQoIk9vcHMiKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNPcGNvZGVfaAorI2RlZmluZSBCM09wY29kZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKKyAgICAvLyBBIG5vLW9wIHRoYXQg
cmV0dXJucyBWb2lkLCB1c2VmdWwgZm9yIHdoZW4geW91IHdhbnQgdG8gcmVtb3ZlIGEgdmFsdWUu
CisgICAgTm9wLAorICAgIAorICAgIC8vIFBvbHltb3JwaGljIGlkZW50aXR5LCB1c2FibGUgd2l0
aCBhbnkgdmFsdWUgdHlwZS4KKyAgICBJZGVudGl0eSwKKworICAgIC8vIENvbnN0YW50cy4gVXNl
IHRoZSBDb25zdFZhbHVlKiBjbGFzc2VzLiBDb25zdGFudHMgZXhpc3QgaW4gdGhlIGNvbnRyb2wg
Zmxvdywgc28gdGhhdCB3ZSBjYW4KKyAgICAvLyByZWFzb24gYWJvdXQgd2hlcmUgd2Ugd291bGQg
Y29uc3RydWN0IHRoZW0uIExhcmdlIGNvbnN0YW50cyBhcmUgZXhwZW5zaXZlIHRvIGNyZWF0ZS4K
KyAgICBDb25zdDMyLAorICAgIENvbnN0NjQsCisgICAgQ29uc3REb3VibGUsCisKKyAgICAvLyBU
aGUgbWFnaWNhbCBzdGFjayBzbG90LiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhl
IHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdhcmRsZXNzIG9mCisgICAgLy8gd2hlcmUgaW4gY29udHJv
bCBmbG93IHlvdSBwdXQgaXQuIEVhY2ggaW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0
cyBhIGRpc2pvaW50IHJhbmdlIG9mCisgICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNr
U2xvdFZhbHVlIGNsYXNzLgorICAgIFN0YWNrU2xvdCwKKworICAgIC8vIFRoZSBtYWdpY2FsIGFy
Z3VtZW50IHJlZ2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBv
ZiB0aGUgcHJvZ3JhbQorICAgIC8vIHJlZ2FyZGxlc3Mgb2Ygd2hlcmUgaW4gY29udHJvbCBmbG93
IHlvdSBwdXQgaXQsIGFuZCB0aGUgY29tcGlsZXIgdGFrZXMgY2FyZSB0byBlbnN1cmUgdGhhdCB3
ZQorICAgIC8vIGRvbid0IGNsb2JiZXIgdGhlIHZhbHVlIGJ5IHJlZ2lzdGVyIGFsbG9jYXRpb24g
b3IgY2FsbHMgKGVpdGhlciBieSBzYXZpbmcgdGhlIGFyZ3VtZW50IHRvIHRoZQorICAgIC8vIHN0
YWNrIG9yIHByZXNlcnZpbmcgaXQgaW4gYSBjYWxsZWUtc2F2ZSByZWdpc3RlcikuIFVzZSB0aGUg
QXJndW1lbnRSZWdWYWx1ZSBjbGFzcy4gVGhlIHJldHVybgorICAgIC8vIHR5cGUgaXMgZWl0aGVy
IHBvaW50ZXIoKSAoZm9yIEdQUnMpIG9yIERvdWJsZSAoZm9yIEZQUnMpLgorICAgIEFyZ3VtZW50
UmVnLAorCisgICAgLy8gVGhlIGZyYW1lIHBvaW50ZXIuIFlvdSBjYW4gcHV0IHRoaXMgYW55d2hl
cmUgaW4gY29udHJvbCBmbG93IGJ1dCBpdCB3aWxsIGFsd2F5cyB5aWVsZCB0aGUKKyAgICAvLyBm
cmFtZSBwb2ludGVyLCB3aXRoIGEgY2F2ZWF0OiBpZiBvdXIgY29tcGlsZXIgY2hhbmdlcyB0aGUg
ZnJhbWUgcG9pbnRlciB0ZW1wb3JhcmlseSBmb3Igc29tZQorICAgIC8vIHNpbGx5IHJlYXNvbiwg
dGhlIEZyYW1lUG9pbnRlciBpbnRyaW5zaWMgd2lsbCByZXR1cm4gd2hlcmUgdGhlIGZyYW1lIHBv
aW50ZXIgKnNob3VsZCogYmUgbm90CisgICAgLy8gd2hlcmUgaXQgaGFwcGVucyB0byBiZSByaWdo
dCBub3cuCisgICAgRnJhbWVQb2ludGVyLAorCisgICAgLy8gUG9seW1vcnBoaWMgbWF0aCwgdXNh
YmxlIHdpdGggYW55IHZhbHVlIHR5cGUuCisgICAgQWRkLAorICAgIFN1YiwKKyAgICBNdWwsCisg
ICAgRGl2LAorCisgICAgLy8gSW50ZWdlciBtYXRoLgorICAgIENoaWxsRGl2LCAvLyBkb2Vzbid0
IHRyYXAgZXZlciwgYmVoYXZlcyBsaWtlIEpTICh4L3kpfDAuCisgICAgTW9kLAorICAgIEJpdEFu
ZCwKKyAgICBCaXRPciwKKyAgICBCaXRYb3IsCisgICAgU2hsLAorICAgIFNTaHIsCisgICAgWlNo
ciwKKworICAgIC8vIENhc3RzIGFuZCBzdWNoLgorICAgIC8vIFRha2VzIGFuZCByZXR1cm5zIElu
dDMyOgorICAgIFNFeHQ4LAorICAgIFNFeHQxNiwKKyAgICAvLyBUYWtlcyBJbnQzMiBhbmQgcmV0
dXJucyBJbnQ2NDoKKyAgICBTRXh0MzIsCisgICAgWkV4dDMyLAorICAgIC8vIFRha2VzIEludDY0
IGFuZCByZXR1cm5zIEludDMyOgorICAgIFRydW5jLAorICAgIC8vIFRha2VzIGFuZCByZXR1cm5z
IERvdWJsZToKKyAgICBGUm91bmQsCisgICAgLy8gVGFrZXMgaW50cyBhbmQgcmV0dXJucyBEb3Vi
bGU6CisgICAgSVRvRCwKKyAgICAvLyBUYWtlcyBEb3VibGUgYW5kIHJldHVybnMgSW50MzI6Cisg
ICAgRFRvSTMyLAorCisgICAgLy8gUG9seW1vcnBoaWMgY29tcGFyaXNvbnMsIHVzYWJsZSB3aXRo
IGFueSB2YWx1ZSB0eXBlLiBSZXR1cm5zIGludDMyIDAgb3IgMS4gTm90ZSB0aGF0ICJOb3QiCisg
ICAgLy8gaXMganVzdCBFcXVhbCh4LCAwKS4KKyAgICBFcXVhbCwKKyAgICBOb3RFcXVhbCwKKyAg
ICBMZXNzVGhhbiwKKyAgICBHcmVhdGVyVGhhbiwKKyAgICBMZXNzRXF1YWwsCisgICAgR3JlYXRl
ckVxdWFsLAorCisgICAgLy8gSW50ZWdlciBjb21wYXJpc29ucy4gUmV0dXJucyBpbnQzMiAwIG9y
IDEuCisgICAgQWJvdmUsCisgICAgQmVsb3csCisgICAgQWJvdmVFcXVhbCwKKyAgICBCZWxvd0Vx
dWFsLAorCisgICAgLy8gTWVtb3J5IGxvYWRzLiBPcGNvZGUgaW5kaWNhdGVzIGhvdyB3ZSBsb2Fk
IGFuZCB0aGUgbG9hZGVkIHR5cGUuIFRoZXNlIHVzZSBNZW1vcnlWYWx1ZS4KKyAgICAvLyBUaGVz
ZSByZXR1cm4gSW50MzI6CisgICAgTG9hZDhaLAorICAgIExvYWQ4UywKKyAgICBMb2FkMTZaLAor
ICAgIExvYWQxNlMsCisgICAgLy8gVGhpcyByZXR1cm5zIERvdWJsZToKKyAgICBMb2FkRmxvYXQs
CisgICAgLy8gVGhpcyByZXR1cm5zIHdoYXRldmVyIHRoZSByZXR1cm4gdHlwZSBpczoKKyAgICBM
b2FkLAorCisgICAgLy8gTWVtb3J5IHN0b3Jlcy4gT3Bjb2RlIGluZGljYXRlcyBob3cgdGhlIHZh
bHVlIGlzIHN0b3JlZC4gVGhlc2UgdXNlIE1lbW9yeVZhbHVlLgorICAgIC8vIFRoZXNlIHRha2Ug
YW4gSW50MzIgdmFsdWU6CisgICAgU3RvcmU4LAorICAgIFN0b3JlMTYsCisgICAgLy8gVGhpcyB0
YWtlcyBhIERvdWJsZSB2YWx1ZToKKyAgICBTdG9yZUZsb2F0LAorICAgIC8vIFRoaXMgaXMgYSBw
b2x5bW9ycGhpYyBzdG9yZSBmb3IgSW50MzIsIEludDY0LCBhbmQgRG91YmxlOgorICAgIFN0b3Jl
LAorCisgICAgLy8gVGhpcyBpcyBhIHJlZ3VsYXIgb3JkaW5hcnkgQyBmdW5jdGlvbiBjYWxsLCB1
c2luZyB0aGUgc3lzdGVtIEMgY2FsbGluZyBjb252ZW50aW9uLiBNYWtlIHN1cmUKKyAgICAvLyB0
aGF0IHRoZSBhcmd1bWVudHMgYXJlIHBhc3NlZCB1c2luZyB0aGUgcmlnaHQgdHlwZXMuCisgICAg
Q0NhbGwsCisKKyAgICAvLyBUaGlzIGlzIGEgcGF0Y2hwb2ludC4gVXNlIHRoZSBQYXRjaHBvaW50
VmFsdWUgY2xhc3MuIFRoaXMgaXMgdmlld2VkIGFzIGJlaGF2aW5nIGxpa2UgYSBjYWxsLAorICAg
IC8vIGJ1dCBvbmx5IGVtaXRzIGNvZGUgdmlhIGEgY29kZSBnZW5lcmF0aW9uIGNhbGxiYWNrLiBU
aGF0IGNhbGxiYWNrIGdldHMgdG8gZW1pdCBjb2RlIGlubGluZS4KKyAgICAvLyBZb3UgY2FuIHBh
c3MgYSBzdGFja21hcCBhbG9uZyB3aXRoIGNvbnN0cmFpbnRzIG9uIGhvdyBlYWNoIHN0YWNrbWFw
IGFyZ3VtZW50IG11c3QgYmUgcGFzc2VkLgorICAgIC8vIEl0J3MgbGVnYWwgdG8gcmVxdWVzdCB0
aGF0IGEgc3RhY2ttYXAgYXJndW1lbnQgaXMgaW4gc29tZSByZWdpc3RlciBhbmQgaXQncyBsZWdh
bCB0byByZXF1ZXN0CisgICAgLy8gdGhhdCBhIHN0YWNrbWFwIGFyZ3VtZW50IGlzIGF0IHNvbWUg
b2Zmc2V0IGZyb20gdGhlIHRvcCBvZiB0aGUgYXJndW1lbnQgcGFzc2luZyBhcmVhIG9uIHRoZQor
ICAgIC8vIHN0YWNrLgorICAgIFBhdGNocG9pbnQsCisKKyAgICAvLyBDaGVja2VkIG1hdGguIFVz
ZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBhIFBhdGNocG9pbnQsIHRoaXMgdGFrZXMgYSBj
b2RlIGdlbmVyYXRpb24KKyAgICAvLyBjYWxsYmFjay4gVGhhdCBjYWxsYmFjayBnZXRzIHRvIGVt
aXQgc29tZSBjb2RlIGFmdGVyIHRoZSBlcGlsb2d1ZSwgYW5kIGdldHMgdG8gbGluayB0aGUganVt
cAorICAgIC8vIGZyb20gdGhlIGNoZWNrLCBhbmQgdGhlIGNob2ljZSBvZiByZWdpc3RlcnMuIFlv
dSBhbHNvIGdldCB0byBzdXBwbHkgYSBzdGFja21hcC4gTm90ZSB0aGF0IHlvdQorICAgIC8vIGFy
ZSBub3QgYWxsb3dlZCB0byBqdW1wIGJhY2sgaW50byB0aGUgbWFpbmxpbmUgY29kZSBmcm9tIHlv
dXIgc2xvdyBwYXRoLCBzaW5jZSB0aGUgY29tcGlsZXIKKyAgICAvLyB3aWxsIGFzc3VtZSB0aGF0
IHRoZSBleGVjdXRpb24gb2YgdGhlc2UgaW5zdHJ1Y3Rpb25zIHByb3ZlcyB0aGF0IG92ZXJmbG93
IGRpZG4ndCBoYXBwZW4uIEZvcgorICAgIC8vIGV4YW1wbGUsIGlmIHlvdSBoYXZlIHR3byBDaGVj
a0FkZCdzOgorICAgIC8vCisgICAgLy8gYSA9IENoZWNrQWRkKHgsIHkpCisgICAgLy8gYiA9IENo
ZWNrQWRkKHgsIHkpCisgICAgLy8KKyAgICAvLyBUaGVuIGl0J3MgdmFsaWQgdG8gY2hhbmdlIHRo
aXMgdG86CisgICAgLy8KKyAgICAvLyBhID0gQ2hlY2tBZGQoeCwgeSkKKyAgICAvLyBiID0gSWRl
bnRpdHkoYSkKKyAgICAvLworICAgIC8vIFRoaXMgaXMgdmFsaWQgcmVnYXJkbGVzcyBvZiB0aGUg
Y2FsbGJhY2tzIHVzZWQgYnkgdGhlIHR3byBDaGVja0FkZHMuIFRoZXkgbWF5IGhhdmUgZGlmZmVy
ZW50CisgICAgLy8gY2FsbGJhY2tzLiBZZXQsIHRoaXMgdHJhbnNmb3JtYXRpb24gaXMgdmFsaWQg
ZXZlbiBpZiB0aGV5IGFyZSBkaWZmZXJlbnQgYmVjYXVzZSB3ZSBrbm93IHRoYXQKKyAgICAvLyBh
ZnRlciB0aGUgZmlyc3QgQ2hlY2tBZGQgZXhlY3V0ZXMsIHRoZSBzZWNvbmQgQ2hlY2tBZGQgY291
bGQgbm90IGhhdmUgcG9zc2libHkgdGFrZW4gc2xvdworICAgIC8vIHBhdGguIFRoZXJlZm9yZSwg
dGhlIHNlY29uZCBDaGVja0FkZCdzIGNhbGxiYWNrIGlzIGlycmVsZXZhbnQuCisgICAgQ2hlY2tB
ZGQsCisgICAgQ2hlY2tTdWIsCisgICAgQ2hlY2tNdWwsCisKKyAgICAvLyBDaGVjayB0aGF0IHNp
ZGUtZXhpdHMuIFVzZSB0aGUgQ2hlY2tWYWx1ZSBjbGFzcy4gTGlrZSBDaGVja0FkZCBhbmQgZnJp
ZW5kcywgdGhpcyBoYXMgYQorICAgIC8vIHN0YWNrbWFwIHdpdGggYSBnZW5lcmF0aW9uIGNhbGxi
YWNrLiBUaGlzIHRha2VzIGFuIEludDMyIGFyZ3VtZW50IHRoYXQgdGhpcyBicmFuY2hlcyBvbiwg
d2l0aAorICAgIC8vIGZ1bGwgYnJhbmNoIGZ1c2lvbiBpbiB0aGUgaW5zdHJ1Y3Rpb24gc2VsZWN0
b3IuIEEgdHJ1ZSB2YWx1ZSBqdW1wcyB0byB0aGUgZ2VuZXJhdG9yJ3Mgc2xvdworICAgIC8vIHBh
dGguCisgICAgQ2hlY2ssCisKKyAgICAvLyBTU0Egc3VwcG9ydCwgaW4gdGhlIHN0eWxlIG9mIERG
RyBTU0EuCisgICAgVXBzaWxvbiwgLy8gVGhpcyB1c2VzIHRoZSBVcHNpbG9uVmFsdWUgY2xhc3Mu
CisgICAgUGhpLAorCisgICAgLy8gSnVtcC4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgor
ICAgIEp1bXAsCisgICAgCisgICAgLy8gUG9seW1vcnBoaWMgYnJhbmNoLCB1c2FibGUgd2l0aCBh
bnkgdmFsdWUgdHlwZS4gQnJhbmNoZXMgaWYgbm90IGVxdWFsIHRvIHplcm8uIFVzZXMgdGhlCisg
ICAgLy8gQ29udHJvbFZhbHVlIGNsYXNzLCB3aXRoIHRoZSAwLWluZGV4IHN1Y2Nlc3NvciBiZWlu
ZyB0aGUgdHJ1ZSBzdWNjZXNzb3IuCisgICAgQnJhbmNoLAorCisgICAgLy8gU3dpdGNoLiBTd2l0
Y2hlcyBvdmVyIGVpdGhlciBJbnQzMiBvciBJbnQ2NC4gVXNlcyB0aGUgU3dpdGNoVmFsdWUgY2xh
c3MuCisgICAgU3dpdGNoLAorCisgICAgLy8gUmV0dXJuLiBOb3RlIHRoYXQgQjMgcHJvY2VkdXJl
cyBkb24ndCBrbm93IHRoZWlyIHJldHVybiB0eXBlLCBzbyB0aGlzIGNhbiBqdXN0IHJldHVybiBh
bnkKKyAgICAvLyB0eXBlLiBVc2VzIHRoZSBDb250cm9sVmFsdWUgY2xhc3MuCisgICAgUmV0dXJu
LAorCisgICAgLy8gVGhpcyBpcyBhIHRlcm1pbmFsIHRoYXQgaW5kaWNhdGVzIHRoYXQgd2Ugd2ls
bCBuZXZlciBnZXQgaGVyZS4gVXNlcyB0aGUgQ29udHJvbFZhbHVlIGNsYXNzLgorICAgIE9vcHMK
K307CisKK2lubGluZSBib29sIGlzQ2hlY2tNYXRoKE9wY29kZSBvcGNvZGUpCit7CisgICAgc3dp
dGNoIChvcGNvZGUpIHsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6Cisg
ICAgY2FzZSBDaGVja011bDoKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKK25hbWVzcGFjZSBXVEYgeworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6T3Bjb2RlKTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNPcGNvZGVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09yaWdpbi5jcHAJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzT3JpZ2luLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBP
cmlnaW46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIk9y
aWdpbigiLCBSYXdQb2ludGVyKG1fZGF0YSksICIpIik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM09yaWdpbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzT3JpZ2luX2gKKyNk
ZWZpbmUgQjNPcmlnaW5faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gV2hv
ZXZlciBnZW5lcmF0ZXMgQjNJUiBjYW4gY2hvb3NlIHRvIHB1dCBvcmlnaW5zIG9uIHZhbHVlcy4g
V2hlbiB5b3UgZG8gdGhpcywgQjMgd2lsbCBiZSBhYmxlIHRvCisvLyBhY2NvdW50LCBkb3duIHRv
IHRoZSBtYWNoaW5lIGNvZGUsIHdoaWNoIGluc3RydWN0aW9uIGNvcnJlc3BvbmRzIHRvIHdoaWNo
IG9yaWdpbi4gQjMKKy8vIHRyYW5zZm9ybWF0aW9ucyBtdXN0IHByZXNlcnZlIE9yaWdpbnMgY2Fy
ZWZ1bGx5LiBJdCdzIGFuIGVycm9yIHRvIHdyaXRlIGEgdHJhbnNmb3JtYXRpb24gdGhhdAorLy8g
ZWl0aGVyIGRyb3BzIE9yaWdpbnMgb3IgbGllcyBhYm91dCB0aGVtLgorY2xhc3MgT3JpZ2luIHsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBPcmlnaW4oY29uc3Qgdm9pZCogZGF0YSA9IG51bGxwdHIp
CisgICAgICAgIDogbV9kYXRhKGRhdGEpCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiAhIW1fZGF0YTsgfQorCisgICAgY29uc3Qgdm9p
ZCogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgorICAgIGNvbnN0IHZvaWQqIG1fZGF0YTsK
K307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKworI2VuZGlmIC8vIEIzT3JpZ2luX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNQYXRjaHBvaW50U3Bl
Y2lhbC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckdlbmVyYXRpb25D
b250ZXh0LmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1BhdGNocG9pbnRTcGVj
aWFsOjpQYXRjaHBvaW50U3BlY2lhbCgpCit7Cit9CisKK1BhdGNocG9pbnRTcGVjaWFsOjp+UGF0
Y2hwb2ludFNwZWNpYWwoKQoreworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFsOjpmb3JFYWNo
QXJnKAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJnQ2Fs
bGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBpZiAoaW5zdC5vcmlnaW4tPnR5cGUoKSA9PSBWb2lk
KSB7CisgICAgICAgIGZvckVhY2hBcmdJbXBsKDAsIDEsIGluc3QsIGNhbGxiYWNrKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKworICAgIGNhbGxiYWNrKGluc3QuYXJnc1sxXSwgQXJnOjpEZWYs
IGluc3Qub3JpZ2luLT5haXJUeXBlKCkpOworICAgIGZvckVhY2hBcmdJbXBsKDAsIDIsIGluc3Qs
IGNhbGxiYWNrKTsKK30KKworYm9vbCBQYXRjaHBvaW50U3BlY2lhbDo6aXNWYWxpZChJbnN0JiBp
bnN0KQoreworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJl
dHVybiBpc1ZhbGlkSW1wbCgwLCAxLCBpbnN0KTsKKworICAgIGlmIChpbnN0LmFyZ3Muc2l6ZSgp
IDwgMikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChpbnN0LmFyZ3NbMV0ua2luZCgp
ICE9IEFyZzo6VG1wKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFpbnN0LmFyZ3Nb
MV0uaXNUeXBlKGluc3Qub3JpZ2luLT5haXJUeXBlKCkpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICByZXR1cm4gaXNWYWxpZEltcGwoMCwgMiwgaW5zdCk7Cit9CisKK2Jvb2wgUGF0Y2hw
b2ludFNwZWNpYWw6OmFkbWl0c1N0YWNrKEluc3QmIGluc3QsIHVuc2lnbmVkIGFyZ0luZGV4KQor
eworICAgIGlmIChpbnN0Lm9yaWdpbi0+dHlwZSgpID09IFZvaWQpCisgICAgICAgIHJldHVybiBh
ZG1pdHNTdGFja0ltcGwoMCwgMSwgaW5zdCwgYXJnSW5kZXgpOworCisgICAgaWYgKGFyZ0luZGV4
ID09IDEpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBhZG1pdHNTdGFja0lt
cGwoMCwgMiwgaW5zdCwgYXJnSW5kZXgpOworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgUGF0Y2hw
b2ludFNwZWNpYWw6OmdlbmVyYXRlKAorICAgIEluc3QmIGluc3QsIENDYWxsSGVscGVycyYgaml0
LCBHZW5lcmF0aW9uQ29udGV4dCYgY29udGV4dCkKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0
Lm9yaWdpbjsKKyAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAg
ICBBU1NFUlQoc3RhY2ttYXApOworCisgICAgVmVjdG9yPFZhbHVlUmVwPiByZXBzOworICAgIHVu
c2lnbmVkIG9mZnNldCA9IDE7CisgICAgaWYgKGluc3Qub3JpZ2luLT50eXBlKCkgIT0gVm9pZCkK
KyAgICAgICAgcmVwcy5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tv
ZmZzZXQrK10pKTsKKyAgICBhcHBlbmRSZXBzSW1wbChjb250ZXh0LCBvZmZzZXQsIGluc3QsIHJl
cHMpOworICAgIAorICAgIFN0YWNrbWFwOjpHZW5lcmF0aW9uUGFyYW1zIHBhcmFtczsKKyAgICBw
YXJhbXMudmFsdWUgPSB2YWx1ZTsKKyAgICBwYXJhbXMuc3RhY2ttYXAgPSBzdGFja21hcDsKKyAg
ICBwYXJhbXMucmVwcyA9IHJlcHM7CisgICAgcGFyYW1zLnVzZWRSZWdpc3RlcnMgPSBzdGFja21h
cC0+bV91c2VkUmVnaXN0ZXJzOworCisgICAgc3RhY2ttYXAtPm1fZ2VuZXJhdG9yLT5ydW4oaml0
LCBwYXJhbXMpOworCisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVtcCgpOworfQorCit2b2lk
IFBhdGNocG9pbnRTcGVjaWFsOjpkdW1wSW1wbChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorewor
ICAgIG91dC5wcmludCgiUGF0Y2hwb2ludCIpOworfQorCit2b2lkIFBhdGNocG9pbnRTcGVjaWFs
OjpkZWVwRHVtcEltcGwoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQo
Ikxvd2VyZWQgQjM6OlBhdGNocG9pbnRWYWx1ZS4iKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50U3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFNwZWNpYWwuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50U3BlY2lhbF9oCisjZGVmaW5lIEIzUGF0Y2hw
b2ludFNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tt
YXBTcGVjaWFsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBUaGlz
IGlzIGEgc3BlY2lhbCB0aGF0IHJlY29nbml6ZXMgdGhhdCB0aGVyZSBhcmUgdHdvIHVzZXMgb2Yg
UGF0Y2hwb2ludDogVm9pZCBhbmQgYW5kIG5vbi1Wb2lkLgorLy8gSW4gdGhlIFZvaWQgY2FzZSwg
dGhlIHN5bnRheCBvZiB0aGUgQWlyIFBhdGNoIGluc3RydWN0aW9uIGlzOgorLy8KKy8vICAgICBQ
YXRjaCAmcGF0Y2hwb2ludCwgYXJncy4uLgorLy8KKy8vIFdoZXJlICJhcmdzLi4uIiBhcmUgdGhl
IGxvd2VyZWQgYXJndW1lbnRzIHRvIHRoZSBQYXRjaHBvaW50IGluc3RydWN0aW9uLiBJbiB0aGUg
bm9uLVZvaWQgY2FzZQorLy8gd2Ugd2lsbCBoYXZlOgorLy8KKy8vICAgICBQYXRjaCAmcGF0Y2hw
b2ludCwgcmVzdWx0LCBhcmdzLi4uCisKK2NsYXNzIFBhdGNocG9pbnRTcGVjaWFsIDogcHVibGlj
IFN0YWNrbWFwU3BlY2lhbCB7CitwdWJsaWM6CisgICAgUGF0Y2hwb2ludFNwZWNpYWwoKTsKKyAg
ICB2aXJ0dWFsIH5QYXRjaHBvaW50U3BlY2lhbCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBm
b3JFYWNoQXJnKEFpcjo6SW5zdCYsIGNvbnN0IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hB
cmdDYWxsYmFjaz4mKSBvdmVycmlkZTsKKyAgICBib29sIGlzVmFsaWQoQWlyOjpJbnN0Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRl
eCkgb3ZlcnJpZGU7CisKKyAgICAvLyBOT1RFOiB0aGUgZ2VuZXJhdGUgbWV0aG9kIHdpbGwgZ2Vu
ZXJhdGUgdGhlIGhpZGRlbiBicmFuY2ggYW5kIHRoZW4gcmVnaXN0ZXIgYSBMYXRlUGF0aCB0aGF0
CisgICAgLy8gZ2VuZXJhdGVzIHRoZSBzdGFja21hcC4gU3VwZXIgY3JhenkgZHVkZSEKKworICAg
IENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0ZShBaXI6Okluc3QmLCBDQ2FsbEhlbHBlcnMmLCBB
aXI6OkdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisKKyAgICB2b2lkIGR1bXBJbXBsKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVwRHVtcEltcGwoUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzUGF0Y2hwb2ludFNwZWNp
YWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRW
YWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworUGF0Y2hwb2ludFZhbHVlOjp+UGF0
Y2hwb2ludFZhbHVlKCkKK3sKK30KKwordm9pZCBQYXRjaHBvaW50VmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFja21hcCA9ICIsIHN0
YWNrbWFwKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZh
bHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2lu
dFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNQYXRjaHBvaW50
VmFsdWVfaAorI2RlZmluZSBCM1BhdGNocG9pbnRWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBhdGNocG9pbnRWYWx1ZSA6IHB1
YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bj
b2RlKSB7IHJldHVybiBvcGNvZGUgPT0gUGF0Y2hwb2ludDsgfQorCisgICAgflBhdGNocG9pbnRW
YWx1ZSgpOworCisgICAgU3RhY2ttYXAgc3RhY2ttYXA7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IGR1bXBNZXRhKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIFBhdGNocG9pbnRWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGls
ZHJlbikKKyAgICAgICAgOiBWYWx1ZShpbmRleCwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luLCBj
aGlsZHJlbikKKyAgICB7CisgICAgfQorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNQYXRjaHBvaW50VmFsdWVf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BoYXNlU2NvcGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzUGhh
c2VTY29wZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQ29tbW9uLmgi
CisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbGlkYXRlLmgiCisjaW5j
bHVkZSA8d3RmL0RhdGFMb2cuaD4KKyNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4K
KworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1BoYXNlU2NvcGU6OlBoYXNlU2Nv
cGUoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNvbnN0IGNoYXIqIG5hbWUpCisgICAgOiBtX3Byb2Nl
ZHVyZShwcm9jZWR1cmUpCisgICAgLCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVt
cElSQXRFYWNoUGhhc2UoKSkgeworICAgICAgICBkYXRhTG9nKCJCMyBhZnRlciAiLCBwcm9jZWR1
cmUubGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgIiwgbmFtZSwgIjpcbiIpOworICAgICAgICBk
YXRhTG9nKHByb2NlZHVyZSk7CisgICAgfQorCisgICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBo
YXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9IHRvQ1N0cmluZyhwcm9jZWR1cmUpOworfQor
CitQaGFzZVNjb3BlOjp+UGhhc2VTY29wZSgpCit7CisgICAgbV9wcm9jZWR1cmUuc2V0TGFzdFBo
YXNlTmFtZShtX25hbWUpOworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSQXRFYWNoUGhhc2UoKSkK
KyAgICAgICAgdmFsaWRhdGUobV9wcm9jZWR1cmUsIG1fZHVtcEJlZm9yZS5kYXRhKCkpOworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQaGFzZVNjb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGhhc2VTY29wZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1BoYXNlU2NvcGVfaAorI2RlZmluZSBCM1BoYXNlU2NvcGVfaAor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3MgUGhhc2VTY29wZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoUGhhc2VTY29wZSk7CitwdWJsaWM6CisgICAgUGhhc2VTY29wZShQcm9j
ZWR1cmUmLCBjb25zdCBjaGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRv
ZXMgdmFsaWRhdGlvbgorCitwcml2YXRlOgorICAgIFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7Cisg
ICAgY29uc3QgY2hhciogbV9uYW1lOworICAgIENTdHJpbmcgbV9kdW1wQmVmb3JlOworfTsKKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisj
ZW5kaWYgLy8gQjNQaGFzZVNjb3BlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQcm9jZWR1cmUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJCM1Byb2NlZHVyZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkIzQmFzaWNCbG9ja0lubGluZXMuaCIKKyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGls
cy5oIgorI2luY2x1ZGUgIkIzQmxvY2tXb3JrbGlzdC5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitQcm9jZWR1cmU6OlBy
b2NlZHVyZSgpCisgICAgOiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQoreworfQorCitQcm9j
ZWR1cmU6On5Qcm9jZWR1cmUoKQoreworfQorCitCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJs
b2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+
IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tzLnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAg
QmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdU
Rjo6bW92ZShibG9jaykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgUHJvY2VkdXJl
OjpyZXNldFJlYWNoYWJpbGl0eSgpCit7CisgICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxv
Y2tzKTsKK30KKwordm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpCisgICAgICAgIG91dC5wcmlu
dChkZWVwRHVtcChibG9jaykpOworfQorCitWZWN0b3I8QmFzaWNCbG9jayo+IFByb2NlZHVyZTo6
YmxvY2tzSW5QcmVPcmRlcigpCit7CisgICAgcmV0dXJuIEIzOjpibG9ja3NJblByZU9yZGVyKGF0
KDApKTsKK30KKworVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUG9zdE9y
ZGVyKCkKK3sKKyAgICByZXR1cm4gQjM6OmJsb2Nrc0luUG9zdE9yZGVyKGF0KDApKTsKK30KKwor
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDE5OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzUHJvY2VkdXJlX2gKKyNkZWZpbmUgQjNQcm9jZWR1cmVfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIlB1cmVOYU4uaCIKKyNpbmNsdWRlIDx3dGYvQmFn
Lmg+CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2Nr
OworY2xhc3MgVmFsdWU7CisKK2NsYXNzIFByb2NlZHVyZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUHJvY2VkdXJlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KworICAgIEpTX0VYUE9SVF9QUklWQVRFIFByb2NlZHVyZSgpOworICAgIEpTX0VYUE9SVF9QUklW
QVRFIH5Qcm9jZWR1cmUoKTsKKworICAgIEpTX0VYUE9SVF9QUklWQVRFIEJhc2ljQmxvY2sqIGFk
ZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kgPSBQTmFOKTsKKyAgICAKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBWYWx1ZVR5cGUqIGFk
ZChBcmd1bWVudHMuLi4pOworCisgICAgdm9pZCByZXNldFJlYWNoYWJpbGl0eSgpOworCisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKKyAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgpOyB9CisgICAgQmFz
aWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fYmxvY2tzW2luZGV4
XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNv
bnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1
YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShudWxs
cHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIGl0ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRl
eCkKKyAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICwg
bV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IEJhc2ljQmxvY2sqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X3Byb2NlZHVyZS0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dCht
X2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAg
ICB7CisgICAgICAgICAgICBBU1NFUlQobV9wcm9jZWR1cmUgPT0gb3RoZXIubV9wcm9jZWR1cmUp
OworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhl
cikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4dCh1
bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9w
cm9jZWR1cmUtPnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPmF0KGluZGV4KSkKKyAgICAgICAgICAg
ICAgICBpbmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAg
ICAgICAgY29uc3QgUHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICB9OworCisgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgMCk7IH0KKyAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJ
blByZU9yZGVyKCk7CisgICAgVmVjdG9yPEJhc2ljQmxvY2sqPiBibG9ja3NJblBvc3RPcmRlcigp
OworCisgICAgY2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7CisgICAgcHVibGljOgorICAgICAgICBW
YWx1ZXNDb2xsZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgICAgICAgICAg
OiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAg
IGNsYXNzIGl0ZXJhdG9yIHsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3Io
KQorICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKKyAgICAgICAgICAgICAg
ICAsIG1faW5kZXgoMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaXRlcmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQor
ICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKKyAgICAgICAgICAgICAg
ICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIFZhbHVlKiBvcGVyYXRvciooKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiBtX3Byb2NlZHVyZS0+bV92YWx1ZXNbbV9pbmRleF0uZ2V0KCk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAg
ICAgIHsKKyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IEFTU0VSVChtX3Byb2NlZHVyZSA9PSBvdGhlci5tX3Byb2NlZHVyZSk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgcHJpdmF0ZToKKworICAgICAgICAgICAgY29uc3QgUHJv
Y2VkdXJlKiBtX3Byb2NlZHVyZTsKKyAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
ICAgIH07CisKKyAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX3Byb2NlZHVyZSwgMCk7IH0KKyAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1
cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7IH0K
KworICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92
YWx1ZXMuc2l6ZSgpOyB9CisgICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3Qg
eyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9CisgICAgICAgIFZh
bHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7
IH0KKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3QgUHJvY2VkdXJlJiBtX3By
b2NlZHVyZTsKKyAgICB9OworCisgICAgVmFsdWVzQ29sbGVjdGlvbiB2YWx1ZXMoKSBjb25zdCB7
IHJldHVybiBWYWx1ZXNDb2xsZWN0aW9uKCp0aGlzKTsgfQorCisgICAgLy8gVGhlIG5hbWUgaGFz
IHRvIGJlIGEgc3RyaW5nIGxpdGVyYWwsIHNpbmNlIHdlIGRvbid0IGRvIGFueSBtZW1vcnkgbWFu
YWdlbWVudCBmb3IgdGhlIHN0cmluZy4KKyAgICB2b2lkIHNldExhc3RQaGFzZU5hbWUoY29uc3Qg
Y2hhciogbmFtZSkKKyAgICB7CisgICAgICAgIG1fbGFzdFBoYXNlTmFtZSA9IG5hbWU7CisgICAg
fQorCisgICAgY29uc3QgY2hhciogbGFzdFBoYXNlTmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fbGFz
dFBoYXNlTmFtZTsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFz
aWNCbG9jaz4+IG1fYmxvY2tzOworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBt
X3ZhbHVlczsKKyAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7Cit9OworCit9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBCM1Byb2NlZHVyZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2Nl
ZHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
UHJvY2VkdXJlSW5saW5lc19oCisjZGVmaW5lIEIzUHJvY2VkdXJlSW5saW5lc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrLmgiCisjaW5jbHVkZSAiQjNQ
cm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK3RlbXBsYXRl
PHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgorVmFsdWVUeXBlKiBQ
cm9jZWR1cmU6OmFkZChBcmd1bWVudHMuLi4gYXJndW1lbnRzKQoreworICAgIHN0ZDo6dW5pcXVl
X3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5ldyBWYWx1ZVR5cGUobV92YWx1ZXMuc2l6ZSgpLCBhcmd1
bWVudHMuLi4pKTsKKyAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgIG1f
dmFsdWVzLmFwcGVuZChXVEY6Om1vdmUodmFsdWUpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisK
KyNlbmRpZiAvLyBCM1Byb2NlZHVyZUlubGluZXNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1JlZHVjZVN0cmVuZ3RoLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVz
LmgiCisjaW5jbHVkZSAiQjNNZW1vcnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5o
IgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFsdWVJbmxp
bmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2Ugewor
CitjbGFzcyBSZWR1Y2VTdHJlbmd0aCB7CitwdWJsaWM6CisgICAgUmVkdWNlU3RyZW5ndGgoUHJv
Y2VkdXJlJiBwcm9jKQorICAgICAgICA6IG1fcHJvYyhwcm9jKQorICAgICAgICAsIG1faW5zZXJ0
aW9uU2V0KHByb2MpCisgICAgeworICAgIH0KKworICAgIGJvb2wgcnVuKCkKKyAgICB7CisgICAg
ICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIG1fY2hh
bmdlZCA9IGZhbHNlOworCisgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgeworICAgICAgICAgICAgICAgIG1fYmxvY2sgPSBibG9j
azsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBmb3IgKG1faW5kZXggPSAwOyBt
X2luZGV4IDwgYmxvY2stPnNpemUoKTsgKyttX2luZGV4KQorICAgICAgICAgICAgICAgICAgICBw
cm9jZXNzKCk7CisgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuZXhlY3V0ZShtX2Jsb2Nr
KTsKKworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIHNob3VsZCBhbHNvIGRvIERDRS4K
KyAgICAgICAgICAgICAgICBibG9jay0+cmVtb3ZlTm9wcygpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgCisgICAgICAgICAgICByZXN1bHQgfD0gbV9jaGFuZ2VkOworICAgICAgICB9IHdo
aWxlIChtX2NoYW5nZWQpOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKK3By
aXZhdGU6CisgICAgdm9pZCBwcm9jZXNzKCkKKyAgICB7CisgICAgICAgIG1fdmFsdWUgPSBtX2Js
b2NrLT5hdChtX2luZGV4KTsKKyAgICAgICAgbV92YWx1ZS0+cGVyZm9ybVN1YnN0aXR1dGlvbigp
OworICAgICAgICAKKyAgICAgICAgc3dpdGNoIChtX3ZhbHVlLT5vcGNvZGUoKSkgeworICAgICAg
ICBjYXNlIEFkZDoKKyAgICAgICAgICAgIGhhbmRsZUNvbW11dGF0aXZpdHkoKTsKKworICAgICAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5vcGNvZGUoKSA9PSBBZGQgJiYgaXNJbnQobV92
YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIFZhbHVlKiBuZXdTdW0gPSBtX3ZhbHVl
LT5jaGlsZCgxKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQo
MSkpOworICAgICAgICAgICAgICAgIGlmIChuZXdTdW0pIHsKKyAgICAgICAgICAgICAgICAgICAg
bV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmV3U3VtKTsKKyAgICAgICAgICAg
ICAgICAgICAgbV92YWx1ZS0+Y2hpbGQoMCkgPSBtX3ZhbHVlLT5jaGlsZCgwKS0+Y2hpbGQoMCk7
CisgICAgICAgICAgICAgICAgICAgIG1fdmFsdWUtPmNoaWxkKDEpID0gbmV3U3VtOworICAgICAg
ICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5jaGls
ZCgwKS0+YWRkQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTdWI6CisgICAgICAgICAgICBpZiAoaXNJbnQobV92
YWx1ZS0+dHlwZSgpKSkgeworICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogbmVnYXRlZENvbnN0
YW50ID0gbV92YWx1ZS0+Y2hpbGQoMSktPm5lZ0NvbnN0YW50KG1fcHJvYykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUobV9pbmRleCwgbmVnYXRlZENv
bnN0YW50KTsKKyAgICAgICAgICAgICAgICAgICAgVmFsdWUqIGFkZCA9IG1faW5zZXJ0aW9uU2V0
Lmluc2VydDxWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luZGV4LCBBZGQsIG1f
dmFsdWUtPm9yaWdpbigpLCBtX3ZhbHVlLT5jaGlsZCgwKSwgbmVnYXRlZENvbnN0YW50KTsKKyAg
ICAgICAgICAgICAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShhZGQpOworICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVwbGFjZVdpdGhOZXdWYWx1ZShtX3ZhbHVlLT5j
aGlsZCgwKS0+c3ViQ29uc3RhbnQobV9wcm9jLCBtX3ZhbHVlLT5jaGlsZCgxKSkpOworICAgICAg
ICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBMb2FkOFo6CisgICAgICAgIGNhc2UgTG9hZDhT
OgorICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgIGNhc2UgTG9hZDE2UzoKKyAgICAgICAg
Y2FzZSBMb2FkRmxvYXQ6CisgICAgICAgIGNhc2UgTG9hZDoKKyAgICAgICAgY2FzZSBTdG9yZTg6
CisgICAgICAgIGNhc2UgU3RvcmUxNjoKKyAgICAgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgICAg
ICBjYXNlIFN0b3JlOiB7CisgICAgICAgICAgICBWYWx1ZSogYWRkcmVzcyA9IG1fdmFsdWUtPmNo
aWxkcmVuKCkubGFzdCgpOworICAgICAgICAgICAgTWVtb3J5VmFsdWUqIG1lbW9yeSA9IG1fdmFs
dWUtPmFzPE1lbW9yeVZhbHVlPigpOworCisgICAgICAgICAgICBpZiAoYWRkcmVzcy0+b3Bjb2Rl
KCkgPT0gQWRkICYmIGFkZHJlc3MtPmNoaWxkKDEpLT5oYXNJbnRQdHIoKSkgeworICAgICAgICAg
ICAgICAgIGludHB0cl90IG9mZnNldCA9IGFkZHJlc3MtPmNoaWxkKDEpLT5hc0ludFB0cigpOwor
ICAgICAgICAgICAgICAgIGlmICghc3VtT3ZlcmZsb3dzPGludHB0cl90PihvZmZzZXQsIG1lbW9y
eS0+b2Zmc2V0KCkpKSB7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCArPSBtZW1vcnktPm9m
ZnNldCgpOworICAgICAgICAgICAgICAgICAgICBpbnQzMl90IHNtYWxsT2Zmc2V0ID0gc3RhdGlj
X2Nhc3Q8aW50MzJfdD4ob2Zmc2V0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNtYWxsT2Zm
c2V0ID09IG9mZnNldCkgeworICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcyA9IG1lbW9y
eS0+Y2hpbGRyZW4oKS5sYXN0KCkgPSBhZGRyZXNzLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1lbW9yeS0+c2V0T2Zmc2V0KHNtYWxsT2Zmc2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fY2hhbmdlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgYSBm
dW4gY2Fub25pY2FsaXphdGlvbi4gSXQgcHVyZWx5IHJlZ3Jlc3NlcyBuYWl2ZWx5IGdlbmVyYXRl
ZCBjb2RlLiBXZSByZWx5CisgICAgICAgICAgICAvLyBvbiBjb25zdGFudCBtYXRlcmlhbGl6YXRp
b24gdG8gYmUgc21hcnQgZW5vdWdoIHRvIG1hdGVyaWFsaXplIHRoaXMgY29uc3RhbnQgdGhlIHNt
YXJ0CisgICAgICAgICAgICAvLyB3YXkuIFdlIHdhbnQgdGhpcyBjYW5vbmljYWxpemF0aW9uIGJl
Y2F1c2Ugd2Ugd2FudCB0byBrbm93IGlmIHR3byBtZW1vcnkgYWNjZXNzZXMgc2VlCisgICAgICAg
ICAgICAvLyB0aGUgc2FtZSBhZGRyZXNzLgorICAgICAgICAgICAgaWYgKG1lbW9yeS0+b2Zmc2V0
KCkpIHsKKyAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIG5ld0FkZHJlc3MgPSBhZGRyZXNzLT5h
ZGRDb25zdGFudChtX3Byb2MsIG1lbW9yeS0+b2Zmc2V0KCkpKSB7CisgICAgICAgICAgICAgICAg
ICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKG1faW5kZXgsIG5ld0FkZHJlc3MpOworICAg
ICAgICAgICAgICAgICAgICBhZGRyZXNzID0gbWVtb3J5LT5jaGlsZHJlbigpLmxhc3QoKSA9IG5l
d0FkZHJlc3M7CisgICAgICAgICAgICAgICAgICAgIG1lbW9yeS0+c2V0T2Zmc2V0KDApOworICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICB2b2lkIGhhbmRsZUNvbW11dGF0aXZpdHkoKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fdmFsdWUtPmNoaWxkKDApLT5pc0NvbnN0YW50KCkgJiYgIW1fdmFsdWUtPmNo
aWxkKDEpLT5pc0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIHN0ZDo6c3dhcChtX3ZhbHVlLT5j
aGlsZCgwKSwgbV92YWx1ZS0+Y2hpbGQoMSkpOworICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZvaWQgcmVwbGFjZVdpdGhOZXdWYWx1ZShWYWx1
ZSogbmV3VmFsdWUpCisgICAgeworICAgICAgICBpZiAoIW5ld1ZhbHVlKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBtX2luc2VydGlvblNldC5pbnNlcnRWYWx1ZShtX2luZGV4LCBuZXdW
YWx1ZSk7CisgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobmV3VmFsdWUpOwor
ICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgIH0KKworICAgIFByb2NlZHVyZSYgbV9wcm9j
OworICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKKyAgICBCYXNpY0Jsb2NrKiBtX2Js
b2NrOworICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgVmFsdWUqIG1fdmFsdWU7CisgICAgYm9v
bCBtX2NoYW5nZWQ7Cit9OworCit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKworYm9vbCByZWR1
Y2VTdHJlbmd0aChQcm9jZWR1cmUmIHByb2MpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KHByb2MsICJyZWR1Y2VTdHJlbmd0aCIpOworICAgIFJlZHVjZVN0cmVuZ3RoIHJlZHVjZVN0cmVu
Z3RoKHByb2MpOworICAgIHJldHVybiByZWR1Y2VTdHJlbmd0aC5ydW4oKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1JlZHVjZVN0cmVuZ3RoX2gKKyNkZWZpbmUgQjNSZWR1
Y2VTdHJlbmd0aF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCisvLyBEb2VzIHN0cmVuZ3RoIHJlZHVj
dGlvbiwgY29uc3RhbnQgZm9sZGluZywgYW5kIGNhbm9uaWNhbGl6YXRpb24uIEluIHRoZSBmdXR1
cmUgd2UgbWF5IGFsc28gaGF2ZSBpdAorLy8gZG8gQ1NFLgorCitib29sIHJlZHVjZVN0cmVuZ3Ro
KFByb2NlZHVyZSYpOworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1JlZHVjZVN0cmVuZ3RoX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xv
dEtpbmQuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJl
YW0uaD4KKworbmFtZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhY2tTbG90S2luZCBraW5kKQor
eworICAgIHN3aXRjaCAoa2luZCkgeworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgor
ICAgICAgICBvdXQucHJpbnQoIkxvY2tlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBT
dGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6CisgICAgICAgIG91dC5wcmludCgiQW5vbnltb3VzIik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKKyNkZWZpbmUgQjNT
dGFja1Nsb3RLaW5kX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgQjMgeworCitlbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAg
ICAvLyBBIGxvY2tlZCBzdGFjayBzbG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBh
bGwgb3RoZXJzIGJlY2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYg
dGhhdCdzIG5vdCBvYnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0
aGUgYWRkcmVzcyBvZiBhIHN0YWNrCisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAv
LyBUaGVzZSBzdGFjayBzbG90cyBjb3VsZCBzaGFyZSBzcGFjZSB3aXRoIG90aGVyIHN0YWNrIHNs
b3RzLCBwcm92aWRlZCB0aGF0IHRoZXkgYXJlbid0IGxpdmUKKyAgICAvLyBhdCB0aGUgc2FtZSB0
aW1lLiBUaGUgY29tcGlsZXIgc3RpbGwgaGFzIHRvIGRvIGVzY2FwZSBhbmFseXNpcywgc2luY2Ug
dGhlc2UgY2FuIGJlIGVzY2FwZWQKKyAgICAvLyBleHBsaWNpdGx5IGluIElSLgorICAgIEFub255
bW91cworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSB0aGlyZCBtb2RlLCB3aGljaCBt
ZWFucyB0aGF0IHRoZSBzdGFjayBzbG90IHdpbGwgYmUgcmVhZCBhc3luY2hyb25vdXNseQorICAg
IC8vIGFzIHdpdGggTG9ja2VkLCBidXQgbmV2ZXIgd3JpdHRlbiB0byBhc3luY2hyb25vdXNseS4g
VGhlbiwgQWlyIGNvdWxkIG9wdGltaXplIHNwaWxsaW5nIGFuZAorICAgIC8vIGZpbGxpbmcgYnkg
dHJhY2tpbmcgd2hldGhlciB0aGUgdmFsdWUgaGFkIGJlZW4gc3RvcmVkIHRvIGEgcmVhZC1vbmx5
IGxvY2tlZCBzbG90LiBJZiBpdCBoYWQsCisgICAgLy8gdGhlbiB3ZSBjYW4gcmVmaWxsIGZyb20g
dGhhdCBzbG90LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTA1ODcKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RG
IHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVh
bSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RWYWx1ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUuY3BwCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90VmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzU3RhY2tTbG90VmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitTdGFja1Nsb3RWYWx1ZTo6flN0YWNrU2xvdFZhbHVlKCkK
K3sKK30KKwordm9pZCBTdGFja1Nsb3RWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mIG91dCkg
Y29uc3QKK3sKKyAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwga2lu
ZCA9ICIsIG1fa2luZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90VmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw4NCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tT
bG90VmFsdWVfaAorI2RlZmluZSBCM1N0YWNrU2xvdFZhbHVlX2gKKworI2lmIEVOQUJMRShCM19K
SVQpCisKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCituYW1lc3BhY2UgQWlyIHsKK2Ns
YXNzIFN0YWNrU2xvdDsKK30gLy8gbmFtZXNwYWNlIEFpcgorCitjbGFzcyBTdGFja1Nsb3RWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3RhY2tTbG90OyB9CisKKyAgICB+U3RhY2tT
bG90VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9i
eXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2lu
ZDsgfQorCisgICAgLy8gVGhpcyBnZXRzIGFzc2lnbmVkIGF0IHRoZSBlbmQgb2YgY29tcGlsYXRp
b24uIEJ1dCwgeW91IGNhbiB0b3RhbGx5IHBpbiBzdGFjayBzbG90cy4gVXNlIHRoZQorICAgIC8v
IHNldCBtZXRob2QgdG8gZG8gdGhhdC4KKyAgICBpbnRwdHJfdCBvZmZzZXRGcm9tRlAoKSBjb25z
dCB7IHJldHVybiBtX29mZnNldEZyb21GUDsgfQorCisgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMg
bWVhbmluZ2xlc3MgdW5sZXNzIHRoZSBzdGFjayBzbG90IGlzIExvY2tlZC4KKyAgICB2b2lkIHNl
dE9mZnNldEZyb21GUChpbnRwdHJfdCB2YWx1ZSkKKyAgICB7CisgICAgICAgIG1fb2Zmc2V0RnJv
bUZQID0gdmFsdWU7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBB
aXI6OlN0YWNrU2xvdDsKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3RhY2tT
bG90VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIHVuc2lnbmVkIGJ5dGVTaXpl
LCBTdGFja1Nsb3RLaW5kIGtpbmQpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFN0YWNrU2xvdCwg
cG9pbnRlclR5cGUoKSwgb3JpZ2luKQorICAgICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCisg
ICAgICAgICwgbV9raW5kKGtpbmQpCisgICAgICAgICwgbV9vZmZzZXRGcm9tRlAoMCkKKyAgICB7
CisgICAgfQorCisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKKyAgICBTdGFja1Nsb3RLaW5kIG1f
a2luZDsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUDsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3Rh
Y2tTbG90VmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkIzU3RhY2ttYXAuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvTGlz
dER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1N0YWNrbWFwOjpT
dGFja21hcCgpCit7Cit9CisKK1N0YWNrbWFwOjp+U3RhY2ttYXAoKQoreworfQorCit2b2lkIFN0
YWNrbWFwOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KAor
ICAgICAgICAie3JlcHMgPSAiLCBsaXN0RHVtcChtX3JlcHMpLCAiLCBnZW5lcmF0b3IgPSAiLCBS
YXdQb2ludGVyKG1fZ2VuZXJhdG9yLmdldCgpKSwKKyAgICAgICAgIiwgY2xvYmJlcmVkID0gIiwg
bV9jbG9iYmVyZWQsICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMsICJ9Iik7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcC5oCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXAuaAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDExNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2ttYXBfaAorI2RlZmluZSBCM1N0YWNrbWFwX2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisjaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYv
U2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3Mg
Q2hlY2tTcGVjaWFsOworY2xhc3MgU3RhY2ttYXBTcGVjaWFsOworY2xhc3MgVmFsdWU7CisKK2Ns
YXNzIFN0YWNrbWFwIHsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7Cisg
ICAgICAgIC8vIFRoaXMgaXMgdGhlIFZhbHVlIGNvbnRhaW5pbmcgdGhlIHN0YWNrbWFwLgorICAg
ICAgICBWYWx1ZSogdmFsdWU7CisKKyAgICAgICAgLy8gVGhpcyBpcyB0aGUgc3RhY2ttYXAuCisg
ICAgICAgIFN0YWNrbWFwKiBzdGFja21hcDsKKworICAgICAgICAvLyBUaGlzIHRlbGxzIHlvdSB0
aGUgYWN0dWFsIHZhbHVlIHJlcHJlc2VudGF0aW9ucyB0aGF0IHdlcmUgY2hvc2VuLgorICAgICAg
ICBWZWN0b3I8VmFsdWVSZXA+IHJlcHM7CisKKyAgICAgICAgLy8gVGhpcyB0ZWxscyB5b3UgdGhl
IHJlZ2lzdGVycyB0aGF0IHdlcmUgdXNlZC4KKyAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lz
dGVyczsKKyAgICB9OworICAgIAorICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihD
Q2FsbEhlbHBlcnMmLCBjb25zdCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFy
ZWRUYXNrPEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisgICAgCisgICAgU3RhY2ttYXAo
KTsKKyAgICB+U3RhY2ttYXAoKTsKKworICAgIC8vIENvbnN0cmFpbiBhbiBhcmd1bWVudCB0byB0
aGUgVmFsdWUgdGhhdCB1c2VzIHRoaXMgU3RhY2ttYXAuIEluIGNhc2Ugb2YgYSBQYXRjaHBvaW50
IHRoYXQKKyAgICAvLyByZXR1cm5zIGEgdmFsdWUsIHRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUg
cmVzdWx0IHZhbHVlLiBJbiBhbGwgb3RoZXIgY2FzZXMsIGluZGV4IHplcm8gcmVmZXJzCisgICAg
Ly8gdG8gdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoYXQgVmFsdWUsIGV2ZW4gaWYgdGhhdCBhcmd1
bWVudCBpcyBub3QgY29uc3RyYWluYWJsZS4gRm9yIGV4YW1wbGUsCisgICAgLy8gaW4gYSBDaGVj
a0FkZCB2YWx1ZSwgaXQgd291bGQgYmUgYW4gZXJyb3IgdG8gY29uc3RyYWluIGluZGljZXMgMCBh
bmQgMS4gSW4gYSBDaGVjayB2YWx1ZSwgaXQKKyAgICAvLyB3b3VsZCBiZSBhbiBlcnJvciB0byBj
b25zdHJhaW4gaW5kZXggMC4gQnV0LCB3aGVuIHRoZSBnZW5lcmF0aW9uIGNhbGxiYWNrIGlzIGNh
bGxlZCwgeW91IGNhbgorICAgIC8vIGRlcGVuZCBvbiB0aGUgcmVwcyBmb3IgdGhvc2UgaW5kaWNl
cyBiZWluZyBmaWxsZWQgaW4uCisgICAgdm9pZCBjb25zdHJhaW4odW5zaWduZWQgaW5kZXgsIGNv
bnN0IFZhbHVlUmVwJiByZXApCisgICAgeworICAgICAgICBpZiAoaW5kZXggKyAxID49IG1fcmVw
cy5zaXplKCkpCisgICAgICAgICAgICBtX3JlcHMuZ3JvdyhpbmRleCArIDEpOworICAgICAgICBt
X3JlcHNbaW5kZXhdID0gcmVwOworICAgIH0KKworICAgIGNvbnN0IFZlY3RvcjxWYWx1ZVJlcD4m
IHJlcHMoKSBjb25zdCB7IHJldHVybiBtX3JlcHM7IH0KKworICAgIHZvaWQgY2xvYmJlcihjb25z
dCBSZWdpc3RlclNldCYgc2V0KQorICAgIHsKKyAgICAgICAgbV9jbG9iYmVyZWQubWVyZ2Uoc2V0
KTsKKyAgICB9CisKKyAgICBjb25zdCBSZWdpc3RlclNldCYgY2xvYmJlcmVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9jbG9iYmVyZWQ7IH0KKworICAgIHZvaWQgc2V0R2VuZXJhdG9yKFJlZlB0cjxHZW5l
cmF0b3I+IGdlbmVyYXRvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJhdG9yID0gZ2VuZXJhdG9y
OworICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgdm9pZCBzZXRH
ZW5lcmF0b3IoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fZ2VuZXJh
dG9yID0gY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rvcik7CisgICAg
fQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7CisgICAgZnJpZW5kIGNsYXNzIFBhdGNocG9p
bnRTcGVjaWFsOworICAgIGZyaWVuZCBjbGFzcyBTdGFja21hcFNwZWNpYWw7CisgICAgCisgICAg
VmVjdG9yPFZhbHVlUmVwPiBtX3JlcHM7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0
b3I7CisgICAgUmVnaXN0ZXJTZXQgbV9jbG9iYmVyZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV91c2Vk
UmVnaXN0ZXJzOyAvLyBTdGFja21hcHMgY291bGQgYmUgZnVydGhlciBkdXBsaWNhdGVkIGJ5IEFp
ciwgYnV0IHRoYXQncyB1bmxpa2VseSwgc28gd2UganVzdCBtZXJnZSB0aGUgdXNlZCByZWdpc3Rl
cnMgc2V0cyBpZiB0aGF0IHdlcmUgdG8gaGFwcGVuLgorfTsKKworfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja21h
cF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwU3BlY2lhbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVj
aWFsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
bWFwU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzU3RhY2ttYXBTcGVjaWFsLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRpb25Db250ZXh0Lmgi
CisjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK3VzaW5nIG5hbWVzcGFjZSBBaXI7CisKK1N0YWNrbWFwU3BlY2lhbDo6U3RhY2tt
YXBTcGVjaWFsKCkKK3sKK30KKworU3RhY2ttYXBTcGVjaWFsOjp+U3RhY2ttYXBTcGVjaWFsKCkK
K3sKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OnJlcG9ydFVzZWRSZWdpc3RlcnMoSW5zdCYg
aW5zdCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpCit7CisgICAgVmFsdWUqIHZh
bHVlID0gaW5zdC5vcmlnaW47CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNr
bWFwKCk7CisKKyAgICAvLyBGSVhNRTogSWYgdGhlIEluc3QgdGhhdCB1c2VzIHRoZSBTdGFja21h
cFNwZWNpYWwgZ2V0cyBkdXBsaWNhdGVkLCB0aGVuIHdlIGVuZCB1cCBtZXJnaW5nIHVzZWQKKyAg
ICAvLyByZWdpc3RlciBzZXRzIGZyb20gbXVsdGlwbGUgcGxhY2VzLiBUaGlzIGN1cnJlbnRseSB3
b24ndCBoYXBwZW4gc2luY2UgQWlyIGRvZXNuJ3QgaGF2ZSB0YWlsZHVwCisgICAgLy8gb3IgdGhp
bmdzIGxpa2UgdGhhdC4gQnV0IG1heWJlIGV2ZW50dWFsbHkgaXQgY291bGQgYmUgYSBwcm9ibGVt
LgorICAgIHN0YWNrbWFwLT5tX3VzZWRSZWdpc3RlcnMubWVyZ2UodXNlZFJlZ2lzdGVycyk7Cit9
CisKK2NvbnN0IFJlZ2lzdGVyU2V0JiBTdGFja21hcFNwZWNpYWw6OmV4dHJhQ2xvYmJlcmVkUmVn
cyhJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3JpZ2luOworICAgIFN0
YWNrbWFwKiBzdGFja21hcCA9IHZhbHVlLT5zdGFja21hcCgpOworCisgICAgcmV0dXJuIHN0YWNr
bWFwLT5jbG9iYmVyZWQoKTsKK30KKwordm9pZCBTdGFja21hcFNwZWNpYWw6OmZvckVhY2hBcmdJ
bXBsKAorICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51bUlnbm9yZWRB
aXJBcmdzLAorICAgIEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJkYTxJbnN0OjpFYWNoQXJn
Q2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBWYWx1ZSogdmFsdWUgPSBpbnN0Lm9yaWdpbjsK
KworICAgIC8vIENoZWNrIHRoYXQgaW5zYW5lIHRoaW5ncyBoYXZlIG5vdCBoYXBwZW5lZC4KKyAg
ICBBU1NFUlQoaW5zdC5hcmdzLnNpemUoKSA+PSBudW1JZ25vcmVkQWlyQXJncyk7CisgICAgQVNT
RVJUKHZhbHVlLT5jaGlsZHJlbigpLnNpemUoKSA+PSBudW1JZ25vcmVkQjNBcmdzKTsKKyAgICBB
U1NFUlQoaW5zdC5hcmdzLnNpemUoKSAtIG51bUlnbm9yZWRBaXJBcmdzID09IHZhbHVlLT5jaGls
ZHJlbigpLnNpemUoKSAtIG51bUlnbm9yZWRCM0FyZ3MpOworICAgIAorICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytpKSB7
CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQjNBcmdzXTsKKyAg
ICAgICAgVmFsdWUqIGNoaWxkID0gdmFsdWUtPmNoaWxkKGkgKyBudW1JZ25vcmVkQWlyQXJncyk7
CisKKyAgICAgICAgY2FsbGJhY2soYXJnLCBBcmc6OlVzZSwgQXJnOjp0eXBlRm9yQjNUeXBlKGNo
aWxkLT50eXBlKCkpKTsKKyAgICB9Cit9CisKK2Jvb2wgU3RhY2ttYXBTcGVjaWFsOjppc1ZhbGlk
SW1wbCgKKyAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBudW1JZ25vcmVk
QWlyQXJncywKKyAgICBJbnN0JiBpbnN0KQoreworICAgIFZhbHVlKiB2YWx1ZSA9IGluc3Qub3Jp
Z2luOworCisgICAgLy8gQ2hlY2sgdGhhdCBpbnNhbmUgdGhpbmdzIGhhdmUgbm90IGhhcHBlbmVk
LgorICAgIEFTU0VSVChpbnN0LmFyZ3Muc2l6ZSgpID49IG51bUlnbm9yZWRBaXJBcmdzKTsKKyAg
ICBBU1NFUlQodmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgpID49IG51bUlnbm9yZWRCM0FyZ3MpOwor
CisgICAgU3RhY2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICBBU1NF
UlQoc3RhY2ttYXApOworCisgICAgLy8gRm9yIHRoZSBJbnN0IHRvIGJlIHZhbGlkLCBpdCBuZWVk
cyB0byBoYXZlIHRoZSByaWdodCBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgIGlmIChpbnN0LmFy
Z3Muc2l6ZSgpIC0gbnVtSWdub3JlZEFpckFyZ3MgIT0gdmFsdWUtPmNoaWxkcmVuKCkuc2l6ZSgp
IC0gbnVtSWdub3JlZEIzQXJncykKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gUmVn
YXJkbGVzcyBvZiBjb25zdHJhaW50cywgc3RhY2ttYXBzIGhhdmUgc29tZSBiYXNpYyByZXF1aXJl
bWVudHMgZm9yIHRoZWlyIGFyZ3VtZW50cy4gRm9yCisgICAgLy8gZXhhbXBsZSwgeW91IGNhbid0
IGhhdmUgYSBub24tRlAtb2Zmc2V0IGFkZHJlc3MuIFRoaXMgdmVyaWZpZXMgdGhvc2UgY29uZGl0
aW9ucyBhcyB3ZWxsIGFzIHRoZQorICAgIC8vIGFyZ3VtZW50IHR5cGVzLgorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpIC0gbnVtSWdub3JlZEIzQXJnczsgKytp
KSB7CisgICAgICAgIFZhbHVlKiBjaGlsZCA9IHZhbHVlLT5jaGlsZChpICsgbnVtSWdub3JlZEIz
QXJncyk7CisgICAgICAgIEFyZyYgYXJnID0gaW5zdC5hcmdzW2kgKyBudW1JZ25vcmVkQWlyQXJn
c107CisgICAgICAgIAorICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICAgICAgY2Fz
ZSBBcmc6OlRtcDoKKyAgICAgICAgY2FzZSBBcmc6OkltbToKKyAgICAgICAgY2FzZSBBcmc6Oklt
bTY0OgorICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgIGNhc2UgQXJnOjpDYWxsQXJn
OgorICAgICAgICAgICAgYnJlYWs7IC8vIE9LCisgICAgICAgIGNhc2UgQXJnOjpBZGRyOgorICAg
ICAgICAgICAgaWYgKGFyZy5iYXNlKCkgIT0gVG1wKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
KQorICAgICAgICAgICAgICAgICYmIGFyZy5iYXNlKCkgIT0gVG1wKE1hY3JvQXNzZW1ibGVyOjpz
dGFja1BvaW50ZXJSZWdpc3RlcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gQXJnOjp0
eXBlRm9yQjNUeXBlKGNoaWxkLT50eXBlKCkpOworCisgICAgICAgIGlmICghYXJnLmlzVHlwZSh0
eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyBUaGUgbnVt
YmVyIG9mIGNvbnN0cmFpbnRzIGhhcyB0byBiZSBubyBncmVhdGVyIHRoYW4gdGhlIG51bWJlciBv
ZiBCMyBjaGlsZHJlbi4KKyAgICBBU1NFUlQoc3RhY2ttYXAtPm1fcmVwcy5zaXplKCkgPD0gdmFs
dWUtPmNoaWxkcmVuKCkuc2l6ZSgpKTsKKworICAgIC8vIFZlcmlmeSBhbnkgZXhwbGljaXRseSBz
dXBwbGllZCBjb25zdHJhaW50cy4KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBudW1JZ25vcmVkQjNB
cmdzOyBpIDwgc3RhY2ttYXAtPm1fcmVwcy5zaXplKCk7ICsraSkgeworICAgICAgICBWYWx1ZVJl
cCYgcmVwID0gc3RhY2ttYXAtPm1fcmVwc1tpXTsKKyAgICAgICAgQXJnJiBhcmcgPSBpbnN0LmFy
Z3NbaSAtIG51bUlnbm9yZWRCM0FyZ3MgKyBudW1JZ25vcmVkQWlyQXJnc107CisKKyAgICAgICAg
c3dpdGNoIChyZXAua2luZCgpKSB7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OkFueToKKyAgICAg
ICAgICAgIC8vIFdlIGFscmVhZHkgdmVyaWZpZWQgdGhpcyBhYm92ZS4KKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpTb21lUmVnaXN0ZXI6CisgICAgICAgICAgICBp
ZiAoIWFyZy5pc1RtcCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpSZWdpc3RlcjoKKyAgICAgICAgICAg
IGlmIChhcmcgIT0gVG1wKHJlcC5yZWcoKSkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrOgorICAg
ICAgICAgICAgLy8gVGhpcyBpcyBub3QgYSB2YWxpZCBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgVmFsdWVSZXA6OlN0YWNrQXJndW1lbnQ6CisgICAgICAgICAgICBpZiAoYXJnICE9
IEFyZzo6Y2FsbEFyZyhyZXAub2Zmc2V0RnJvbVNQKCkpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFZhbHVlUmVwOjpDb25z
dGFudDoKKyAgICAgICAgICAgIC8vIFRoaXMgaXMgbm90IGEgdmFsaWQgaW5wdXQgcmVwcmVzZW50
YXRpb24uCisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgU3Rh
Y2ttYXBTcGVjaWFsOjphZG1pdHNTdGFja0ltcGwoCisgICAgdW5zaWduZWQgbnVtSWdub3JlZEIz
QXJncywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgSW5zdCYgaW5zdCwgdW5zaWdu
ZWQgYXJnSW5kZXgpCit7CisgICAgVmFsdWUqIHZhbHVlID0gaW5zdC5vcmlnaW47CisgICAgU3Rh
Y2ttYXAqIHN0YWNrbWFwID0gdmFsdWUtPnN0YWNrbWFwKCk7CisKKyAgICB1bnNpZ25lZCBzdGFj
a21hcEFyZ0luZGV4ID0gYXJnSW5kZXggLSBudW1JZ25vcmVkQWlyQXJncyArIG51bUlnbm9yZWRC
M0FyZ3M7CisKKyAgICBpZiAoc3RhY2ttYXBBcmdJbmRleCA+PSBzdGFja21hcC0+bV9yZXBzLnNp
emUoKSkgeworICAgICAgICAvLyBUaGlzIG1lYW5zIHRoYXQgdGhlcmUgd2FzIG5vIGNvbnN0cmFp
bnQuCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICAKKyAgICAvLyBXZSBvbmx5IGFk
bWl0IHN0YWNrIGZvciBBbnkncywgc2luY2UgU3RhY2sgaXMgbm90IGEgdmFsaWQgaW5wdXQgY29u
c3RyYWludCwgYW5kIFN0YWNrQXJndW1lbnQKKyAgICAvLyB0cmFuc2xhdGVzIHRvIGEgQ2FsbEFy
ZyBpbiBBaXIuCisgICAgaWYgKHN0YWNrbWFwLT5tX3JlcHNbc3RhY2ttYXBBcmdJbmRleF0ua2lu
ZCgpID09IFZhbHVlUmVwOjpBbnkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgcmV0dXJu
IGZhbHNlOworfQorCit2b2lkIFN0YWNrbWFwU3BlY2lhbDo6YXBwZW5kUmVwc0ltcGwoCisgICAg
R2VuZXJhdGlvbkNvbnRleHQmIGNvbnRleHQsIHVuc2lnbmVkIG51bUlnbm9yZWRBcmdzLCBJbnN0
JiBpbnN0LCBWZWN0b3I8VmFsdWVSZXA+JiByZXN1bHQpCit7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gbnVtSWdub3JlZEFyZ3M7IGkgPCBpbnN0LmFyZ3Muc2l6ZSgpOyArK2kpCisgICAgICAgIHJl
c3VsdC5hcHBlbmQocmVwRm9yQXJnKCpjb250ZXh0LmNvZGUsIGluc3QuYXJnc1tpXSkpOworfQor
CitWYWx1ZVJlcCBTdGFja21hcFNwZWNpYWw6OnJlcEZvckFyZyhDb2RlJiBjb2RlLCBjb25zdCBB
cmcmIGFyZykKK3sKKyAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsKKyAgICBjYXNlIEFyZzo6VG1w
OgorICAgICAgICByZXR1cm4gVmFsdWVSZXA6OnJlZyhhcmcucmVnKCkpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEFyZzo6SW1tOgorICAgIGNhc2UgQXJnOjpJbW02NDoKKyAgICAgICAgcmV0
dXJuIFZhbHVlUmVwOjpjb25zdGFudChhcmcudmFsdWUoKSk7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgQXJnOjpBZGRyOgorICAgICAgICBpZiAoYXJnLmJhc2UoKSA9PSBUbXAoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIpKQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpzdGFjayhh
cmcub2Zmc2V0KCkpOworICAgICAgICBBU1NFUlQoYXJnLmJhc2UoKSA9PSBUbXAoTWFjcm9Bc3Nl
bWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKSk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcDo6
c3RhY2soYXJnLm9mZnNldCgpIC0gY29kZS5mcmFtZVNpemUoKSk7CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBWYWx1ZVJlcCgpOwor
ICAgIH0KK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVjaWFs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBTcGVj
aWFsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21h
cFNwZWNpYWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTdGFja21hcFNwZWNp
YWxfaAorI2RlZmluZSBCM1N0YWNrbWFwU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzU3RhY2ttYXAuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK25hbWVzcGFjZSBBaXIgeyBjbGFzcyBDb2Rl
OyB9CisKKy8vIFRoaXMgaXMgYSBiYXNlIGNsYXNzIGZvciBzcGVjaWFscyB0aGF0IGhhdmUgc3Rh
Y2ttYXBzLiBOb3RlIHRoYXQgaXQgY2FuIGZpbmQgdGhlIFN0YWNrbWFwIGJ5CisvLyBhc2tpbmcg
Zm9yIHRoZSBJbnN0J3Mgb3JpZ2luLiBIZW5jZSwgdGhlc2Ugb2JqZWN0cyBkb24ndCBuZWVkIHRv
IGV2ZW4gaG9sZCBhIHJlZmVyZW5jZSB0byB0aGUKKy8vIFN0YWNrbWFwLgorCitjbGFzcyBTdGFj
a21hcFNwZWNpYWwgOiBwdWJsaWMgQWlyOjpTcGVjaWFsIHsKK3B1YmxpYzoKKyAgICBTdGFja21h
cFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TdGFja21hcFNwZWNpYWwoKTsKKworcHJvdGVjdGVk
OgorICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhBaXI6Okluc3QmLCBjb25zdCBSZWdpc3Rl
clNldCYpIG92ZXJyaWRlOworICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiBleHRyYUNsb2JiZXJlZFJl
Z3MoQWlyOjpJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICAvLyBOb3RlIHRoYXQgdGhpcyBkb2VzIG5v
dCBvdmVycmlkZSBnZW5lcmF0ZSgpIG9yIGR1bXBJbXBsKCkvZGVlcER1bXBJbXBsKCkuIFdlIGhh
dmUgbWFueSBzb21lCisgICAgLy8gc3ViY2xhc3NlcyB0aGF0IGltcGxlbWVudCB0aGF0LgorCisg
ICAgdm9pZCBmb3JFYWNoQXJnSW1wbCgKKyAgICAgICAgdW5zaWduZWQgbnVtSWdub3JlZEIzQXJn
cywgdW5zaWduZWQgbnVtSWdub3JlZEFpckFyZ3MsCisgICAgICAgIEFpcjo6SW5zdCYsIGNvbnN0
IFNjb3BlZExhbWJkYTxBaXI6Okluc3Q6OkVhY2hBcmdDYWxsYmFjaz4mKTsKKyAgICBib29sIGlz
VmFsaWRJbXBsKAorICAgICAgICB1bnNpZ25lZCBudW1JZ25vcmVkQjNBcmdzLCB1bnNpZ25lZCBu
dW1JZ25vcmVkQWlyQXJncywKKyAgICAgICAgQWlyOjpJbnN0Jik7CisgICAgYm9vbCBhZG1pdHNT
dGFja0ltcGwoCisgICAgICAgIHVuc2lnbmVkIG51bUlnbm9yZWRCM0FyZ3MsIHVuc2lnbmVkIG51
bUlnbm9yZWRBaXJBcmdzLAorICAgICAgICBBaXI6Okluc3QmLCB1bnNpZ25lZCBhcmdJbmRleCk7
CisKKyAgICAvLyBBcHBlbmRzIHRoZSByZXBzIGZvciB0aGUgSW5zdCdzIGFyZ3MsIHN0YXJ0aW5n
IHdpdGggbnVtSWdub3JlZEFyZ3MsIHRvIHRoZSBnaXZlbiB2ZWN0b3IuCisgICAgdm9pZCBhcHBl
bmRSZXBzSW1wbChBaXI6OkdlbmVyYXRpb25Db250ZXh0JiwgdW5zaWduZWQgbnVtSWdub3JlZEFy
Z3MsIEFpcjo6SW5zdCYsIFZlY3RvcjxWYWx1ZVJlcD4mKTsKKworICAgIHN0YXRpYyBWYWx1ZVJl
cCByZXBGb3JBcmcoQWlyOjpDb2RlJiwgY29uc3QgQWlyOjpBcmcmKTsKK307CisKK30gfSAvLyBu
YW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEIzU3RhY2ttYXBTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEwMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaWZuZGVmIEIzU3VjY2Vzc29yQ29sbGVjdGlvbl9oCisjZGVmaW5lIEIzU3VjY2Vzc29y
Q29sbGVjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKKworLy8gVGhpcyBpcyBhIGdlbmVyaWMgd3JhcHBlciBhcm91bmQgbGlzdHMg
b2YgZnJlcXVlbnRlZCBibG9ja3MsIHdoaWNoIGdpdmVzIHlvdSBqdXN0IHRoZSBibG9ja3MuCisK
K3RlbXBsYXRlPHR5cGVuYW1lIEJhc2ljQmxvY2ssIHR5cGVuYW1lIFN1Y2Nlc3Nvckxpc3Q+Citj
bGFzcyBTdWNjZXNzb3JDb2xsZWN0aW9uIHsKK3B1YmxpYzoKKyAgICBTdWNjZXNzb3JDb2xsZWN0
aW9uKFN1Y2Nlc3Nvckxpc3QmIGxpc3QpCisgICAgICAgIDogbV9saXN0KGxpc3QpCisgICAgewor
ICAgIH0KKworICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9saXN0LnNpemUoKTsg
fQorICAgIEJhc2ljQmxvY2sqIGF0KHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9saXN0
W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayomIGF0KHNpemVfdCBpbmRleCkgeyBy
ZXR1cm4gbV9saXN0W2luZGV4XS5ibG9jaygpOyB9CisgICAgQmFzaWNCbG9jayogb3BlcmF0b3Jb
XShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorICAgIEJhc2ljQmxv
Y2sqJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgeyByZXR1cm4gYXQoaW5kZXgpOyB9CisKKyAg
ICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigpCisgICAg
ICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgLCBtX2luZGV4KDAp
CisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yKFN1Y2Nlc3NvckNvbGxl
Y3Rpb24mIGNvbGxlY3Rpb24sIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0
aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBCYXNpY0Jsb2NrKiYgb3BlcmF0b3IqKCkgY29uc3QKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7Cisg
ICAgICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1faW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbGxlY3Rpb24gPT0gb3RoZXIubV9j
b2xsZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhl
cik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIFN1Y2Nlc3NvckNvbGxlY3Rp
b24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgc2l6ZV90IG1faW5kZXg7CisgICAgfTsKKworICAg
IGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworcHJpdmF0
ZToKKyAgICBTdWNjZXNzb3JMaXN0JiBtX2xpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hD
YXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hD
YXNlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aENhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkIzU3dpdGNoQ2FzZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUg
IkIzQmFzaWNCbG9jay5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9p
ZCBTd2l0Y2hDYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KG1fY2FzZVZhbHVlLCAiLT4iLCBtX3RhcmdldCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N3aXRjaENhc2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTd2l0Y2hDYXNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIz
U3dpdGNoQ2FzZV9oCisjZGVmaW5lIEIzU3dpdGNoQ2FzZV9oCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQjNGcmVxdWVudGVkQmxvY2suaCIKKyNpbmNsdWRlIDx3dGYvU3RkTGli
RXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBTd2l0Y2hDYXNlIHsKK3B1YmxpYzoKKyAgICBTd2l0
Y2hDYXNlKCkKKyAgICB7CisgICAgfQorCisgICAgU3dpdGNoQ2FzZShpbnQ2NF90IGNhc2VWYWx1
ZSwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogbV9jYXNlVmFsdWUo
Y2FzZVZhbHVlKQorICAgICAgICAsIG1fdGFyZ2V0KHRhcmdldCkKKyAgICB7CisgICAgfQorCisg
ICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV90YXJnZXQ7IH0K
KworICAgIGludDY0X3QgY2FzZVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9jYXNlVmFsdWU7IH0K
KyAgICBGcmVxdWVudGVkQmxvY2sgdGFyZ2V0KCkgY29uc3QgeyByZXR1cm4gbV90YXJnZXQ7IH0K
KyAgICBCYXNpY0Jsb2NrKiB0YXJnZXRCbG9jaygpIGNvbnN0IHsgcmV0dXJuIG1fdGFyZ2V0LmJs
b2NrKCk7IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBpbnQ2NF90IG1fY2FzZVZhbHVlOworICAgIEZyZXF1ZW50ZWRCbG9jayBtX3Rh
cmdldDsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3dpdGNoQ2FzZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw3MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTd2l0Y2hWYWx1ZS5oIgorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzQmFzaWNCbG9jay5oIgorI2luY2x1ZGUgPHd0
Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworU3dpdGNo
VmFsdWU6On5Td2l0Y2hWYWx1ZSgpCit7Cit9CisKK1N3aXRjaENhc2UgU3dpdGNoVmFsdWU6OnJl
bW92ZUNhc2UodW5zaWduZWQgaW5kZXgpCit7CisgICAgRnJlcXVlbnRlZEJsb2NrIHJlc3VsdEJs
b2NrID0gbV9zdWNjZXNzb3JzW2luZGV4XTsKKyAgICBpbnQ2NF90IHJlc3VsdFZhbHVlID0gbV92
YWx1ZXNbaW5kZXhdOworICAgIG1fc3VjY2Vzc29yc1tpbmRleF0gPSBtX3N1Y2Nlc3NvcnMubGFz
dCgpOworICAgIG1fc3VjY2Vzc29ycy5yZW1vdmVMYXN0KCk7CisgICAgbV92YWx1ZXNbaW5kZXhd
ID0gbV92YWx1ZXMubGFzdCgpOworICAgIG1fdmFsdWVzLnJlbW92ZUxhc3QoKTsKKyAgICByZXR1
cm4gU3dpdGNoQ2FzZShyZXN1bHRWYWx1ZSwgcmVzdWx0QmxvY2spOworfQorCit2b2lkIFN3aXRj
aFZhbHVlOjphcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmIHN3aXRjaENhc2UpCit7CisgICAg
bV9zdWNjZXNzb3JzLmFwcGVuZChtX3N1Y2Nlc3NvcnMubGFzdCgpKTsKKyAgICBtX3N1Y2Nlc3Nv
cnNbbV9zdWNjZXNzb3JzLnNpemUoKSAtIDJdID0gc3dpdGNoQ2FzZS50YXJnZXQoKTsKKyAgICBt
X3ZhbHVlcy5hcHBlbmQoc3dpdGNoQ2FzZS5jYXNlVmFsdWUoKSk7Cit9CisKK3ZvaWQgU3dpdGNo
VmFsdWU6OmR1bXBNZXRhKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgLy8gVGhpcyBk
ZXN0cnVjdGl2ZWx5IG92ZXJyaWRlcyBDb250cm9sVmFsdWUncyBkdW1wTWV0YSgpLgorICAgIG91
dC5wcmludChsaXN0RHVtcCgqdGhpcyksICIsIGZhbGxUaHJvdWdoID0gIiwgZmFsbFRocm91Z2go
KSk7Cit9CisKK1N3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2lu
IG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRy
b2xWYWx1ZShpbmRleCwgU3dpdGNoLCBWb2lkLCBvcmlnaW4pCit7CisgICAgbV9zdWNjZXNzb3Jz
LmFwcGVuZChmYWxsVGhyb3VnaCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N3aXRjaFZh
bHVlX2gKKyNkZWZpbmUgQjNTd2l0Y2hWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQjNDb250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM1N3aXRjaENhc2UuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFN3aXRjaFZhbHVlIDogcHVi
bGljIENvbnRyb2xWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gU3dpdGNoOyB9CisKKyAgICB+U3dpdGNoVmFs
dWUoKTsKKworICAgIC8vIG51bUNhc2VWYWx1ZXMoKSArIDEgPT0gbnVtU3VjY2Vzc29ycygpLgor
ICAgIHVuc2lnbmVkIG51bUNhc2VWYWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlcy5zaXpl
KCk7IH0KKworICAgIC8vIFRoZSBzdWNjZXNzb3IgZm9yIHRoaXMgY2FzZSB2YWx1ZSBpcyBhdCB0
aGUgc2FtZSBpbmRleC4KKyAgICBpbnQ2NF90IGNhc2VWYWx1ZSh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV92YWx1ZXNbaW5kZXhdOyB9CisgICAgCisgICAgY29uc3QgVmVjdG9yPGlu
dDY0X3Q+JiBjYXNlVmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KKworICAgIEZy
ZXF1ZW50ZWRCbG9jayBmYWxsVGhyb3VnaCgpIGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcnMoKS5s
YXN0KCk7IH0KKyAgICBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKCkgeyByZXR1cm4gc3Vj
Y2Vzc29ycygpLmxhc3QoKTsgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG51bUNhc2VWYWx1ZXMoKTsgfQorICAgIFN3aXRjaENhc2UgYXQodW5zaWduZWQgaW5kZXgpIGNv
bnN0CisgICAgeworICAgICAgICByZXR1cm4gU3dpdGNoQ2FzZShjYXNlVmFsdWUoaW5kZXgpLCBz
dWNjZXNzb3IoaW5kZXgpKTsKKyAgICB9CisgICAgU3dpdGNoQ2FzZSBvcGVyYXRvcltdKHVuc2ln
bmVkIGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKKyAgICB9
CisKKyAgICBjbGFzcyBpdGVyYXRvciB7CisgICAgcHVibGljOgorICAgICAgICBpdGVyYXRvcigp
CisgICAgICAgICAgICA6IG1fc3dpdGNoKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgo
MCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3dpdGNo
VmFsdWUmIHN3aXRjaFZhbHVlLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9zd2l0
Y2goJnN3aXRjaFZhbHVlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICB7
CisgICAgICAgIH0KKworICAgICAgICBTd2l0Y2hDYXNlIG9wZXJhdG9yKigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3N3aXRjaC0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1f
aW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIEFTU0VSVChtX3N3aXRjaCA9PSBvdGhlci5tX3N3aXRjaCk7CisgICAgICAg
ICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBjb25zdCBTd2l0Y2hWYWx1ZSogbV9zd2l0Y2g7CisgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIHR5cGVkZWYgaXRlcmF0b3IgY29uc3Rf
aXRlcmF0b3I7CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9y
KCp0aGlzLCBzaXplKCkpOyB9CisKKyAgICAvLyBUaGlzIHJlbW92ZXMgdGhlIGNhc2UgYW5kIHJl
b3JkZXJzIHRoaW5ncyBhIGJpdC4gSWYgeW91J3JlIGl0ZXJhdGluZyB0aGUgY2FzZXMgZnJvbSAw
IHRvIE4sCisgICAgLy8gdGhlbiB5b3UgY2FuIGtlZXAgaXRlcmF0aW5nIGFmdGVyIHRoaXMgc28g
bG9uZyBhcyB5b3UgcmV2aXNpdCB0aGlzIHNhbWUgaW5kZXggKHdoaWNoIHdpbGwgbm93CisgICAg
Ly8gY29udGFpbiBzb21lIG90aGVyIGNhc2UgdmFsdWUpLiBUaGlzIHJlbW92ZXMgdGhlIGNhc2Ug
dGhhdCB3YXMgcmVtb3ZlZC4KKyAgICBTd2l0Y2hDYXNlIHJlbW92ZUNhc2UodW5zaWduZWQgaW5k
ZXgpOworCisgICAgdm9pZCBhcHBlbmRDYXNlKGNvbnN0IFN3aXRjaENhc2UmKTsKKworcHJvdGVj
dGVkOgorICAgIHZvaWQgZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKwor
cHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAgU3dpdGNoVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3Vn
aCk7CisKKyAgICBWZWN0b3I8aW50NjRfdD4gbV92YWx1ZXM7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N3
aXRjaFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1R5cGUuaCIKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50
ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgVHlwZSB0eXBlKQoreworICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgVm9pZDoKKyAgICAgICAgb3V0LnByaW50KCJWb2lkIik7CisgICAgICAgIHJl
dHVybjsKKyAgICBjYXNlIEludDMyOgorICAgICAgICBvdXQucHJpbnQoIkludDMyIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIEludDY0OgorICAgICAgICBvdXQucHJpbnQoIkludDY0Iik7
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIERvdWJsZToKKyAgICAgICAgb3V0LnByaW50KCJE
b3VibGUiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNUeXBlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBCM1R5cGVfaAorI2RlZmluZSBCM1R5cGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBUeXBlIHsKKyAgICBWb2lk
LAorICAgIEludDMyLAorICAgIEludDY0LAorICAgIERvdWJsZQorfTsKKworaW5saW5lIGJvb2wg
aXNJbnQoVHlwZSB0eXBlKQoreworICAgIHJldHVybiB0eXBlID09IEludDMyIHx8IHR5cGUgPT0g
SW50NjQ7Cit9CisKK2lubGluZSBib29sIGlzRmxvYXQoVHlwZSB0eXBlKQoreworICAgIHJldHVy
biB0eXBlID09IERvdWJsZTsKK30KKworaW5saW5lIFR5cGUgcG9pbnRlclR5cGUoKQoreworICAg
IGlmIChpczMyQml0KCkpCisgICAgICAgIHJldHVybiBJbnQzMjsKKyAgICByZXR1cm4gSW50NjQ7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xh
c3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
QjM6OlR5cGUpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19K
SVQpCisKKyNlbmRpZiAvLyBCM1R5cGVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNVcHNpbG9uVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Vwc2lsb25WYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCisKKyNpZiBFTkFCTEUo
QjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVXBzaWxvblZhbHVl
Ojp+VXBzaWxvblZhbHVlKCkKK3sKK30KKwordm9pZCBVcHNpbG9uVmFsdWU6OmR1bXBNZXRhKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJeIiwgbV9waGktPmluZGV4
KCkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vwc2lsb25WYWx1ZV9oCisjZGVmaW5l
IEIzVXBzaWxvblZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1Zh
bHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBVcHNpbG9u
VmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBib29sIGFjY2VwdHMo
T3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IFVwc2lsb247IH0KKworICAgIH5VcHNp
bG9uVmFsdWUoKTsKKworICAgIFZhbHVlKiBwaGkoKSBjb25zdCB7IHJldHVybiBtX3BoaTsgfQor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgCisgICAg
VXBzaWxvblZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUs
IFZhbHVlKiBwaGkpCisgICAgICAgIDogVmFsdWUoaW5kZXgsIFBoaSwgVm9pZCwgb3JpZ2luLCB2
YWx1ZSkKKyAgICAgICAgLCBtX3BoaShwaGkpCisgICAgeworICAgICAgICBBU1NFUlQodmFsdWUt
PnR5cGUoKSA9PSBwaGktPnR5cGUoKSk7CisgICAgfQorCisgICAgVmFsdWUqIG1fcGhpOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNVcHNpbG9uVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVc2VDb3VudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1VzZUNvdW50cy5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNVc2VDb3VudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQjNQcm9jZWR1cmUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK1VzZUNvdW50czo6VXNlQ291bnRzKFByb2NlZHVyZSYgcHJvY2VkdXJlKQorICAgIDog
bV9jb3VudHMocHJvY2VkdXJlLnZhbHVlcygpLnNpemUoKSkKK3sKKyAgICBmb3IgKFZhbHVlKiB2
YWx1ZSA6IHByb2NlZHVyZS52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6
IHZhbHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgbV9jb3VudHNbY2hpbGRdKys7CisgICAg
fQorfQorCitVc2VDb3VudHM6On5Vc2VDb3VudHMoKQoreworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNVc2VDb3VudHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNVc2VDb3VudHMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1VzZUNvdW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTYgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1Vz
ZUNvdW50c19oCisjZGVmaW5lIEIzVXNlQ291bnRzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0luZGV4TWFwLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBVc2VD
b3VudHMgeworcHVibGljOgorICAgIFVzZUNvdW50cyhQcm9jZWR1cmUmKTsKKyAgICB+VXNlQ291
bnRzKCk7CisKKyAgICB1bnNpZ25lZCBvcGVyYXRvcltdKFZhbHVlKiB2YWx1ZSkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2NvdW50c1t2YWx1ZV07CisgICAgfQorcHJpdmF0ZToKKyAg
ICBJbmRleE1hcDxWYWx1ZSwgdW5zaWduZWQ+IG1fY291bnRzOworfTsKKworfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNV
c2VDb3VudHNfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJC
M1ZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNBcmd1bWVu
dFJlZ1ZhbHVlLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUg
IkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKKyNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8d3Rm
L1N0cmluZ1ByaW50U3RyZWFtLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgorCitu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworbmFtZXNwYWNlIHsKKworY2xhc3MgVmFs
aWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoUHJvY2VkdXJlJiBwcm9jZWR1cmUsIGNv
bnN0IGNoYXIqIGR1bXBCZWZvcmUpCisgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQor
ICAgICAgICAsIG1fZHVtcEJlZm9yZShkdW1wQmVmb3JlKQorICAgIHsKKyAgICB9CisKKyNkZWZp
bmUgVkFMSURBVEUoY29uZGl0aW9uLCBtZXNzYWdlKSBkbyB7ICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFwKKyAgICAgICAgaWYgKGNvbmRpdGlvbikgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAg
ZmFpbChfX0ZJTEVfXywgX19MSU5FX18sIFdURl9QUkVUVFlfRlVOQ1RJT04sICNjb25kaXRpb24s
IHRvQ1N0cmluZyBtZXNzYWdlKTsgXAorICAgIH0gd2hpbGUgKGZhbHNlKQorCisgICAgdm9pZCBy
dW4oKQorICAgIHsKKyAgICAgICAgSGFzaFNldDxCYXNpY0Jsb2NrKj4gYmxvY2tzOworICAgICAg
ICBIYXNoU2V0PFZhbHVlKj4gdmFsdWVJblByb2M7CisgICAgICAgIEhhc2hTZXQ8VmFsdWUqPiB2
YWx1ZUluQmxvY2s7CisKKyAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvY2Vk
dXJlKSB7CisgICAgICAgICAgICBibG9ja3MuYWRkKGJsb2NrKTsKKyAgICAgICAgICAgIGZvciAo
VmFsdWUqIHZhbHVlIDogKmJsb2NrKQorICAgICAgICAgICAgICAgIHZhbHVlSW5CbG9jay5hZGQo
dmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBtX3Byb2Nl
ZHVyZS52YWx1ZXMoKSkKKyAgICAgICAgICAgIHZhbHVlSW5Qcm9jLmFkZCh2YWx1ZSk7CisKKyAg
ICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiB2YWx1ZUluUHJvYykKKyAgICAgICAgICAgIFZBTElE
QVRFKHZhbHVlSW5CbG9jay5jb250YWlucyh2YWx1ZSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJbkJsb2NrKQorICAgICAgICAgICAgVkFMSURB
VEUodmFsdWVJblByb2MuY29udGFpbnModmFsdWUpLCAoIkF0ICIsICp2YWx1ZSkpOworCisgICAg
ICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVJblByb2MpIHsKKyAgICAgICAgICAgIGZvciAo
VmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCisgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWVJblByb2MuY29udGFpbnMoY2hpbGQpLCAoIkF0ICIsICp2YWx1ZSwgIi0+IiwgcG9p
bnRlckR1bXAoY2hpbGQpKSk7CisgICAgICAgIH0KKworICAgICAgICBIYXNoTWFwPEJhc2ljQmxv
Y2sqLCBIYXNoU2V0PEJhc2ljQmxvY2sqPj4gYWxsUHJlZGVjZXNzb3JzOworICAgICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogYmxvY2tzKSB7CisgICAgICAgICAgICBWQUxJREFURShibG9j
ay0+c2l6ZSgpID49IDEsICgiQXQgIiwgKmJsb2NrKSk7CisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkKKyAgICAgICAgICAgICAgICBW
QUxJREFURSghQ29udHJvbFZhbHVlOjphY2NlcHRzKGJsb2NrLT5hdChpKS0+b3Bjb2RlKCkpLCAo
IkF0ICIsICpibG9jay0+YXQoaSkpKTsKKyAgICAgICAgICAgIFZBTElEQVRFKENvbnRyb2xWYWx1
ZTo6YWNjZXB0cyhibG9jay0+bGFzdCgpLT5vcGNvZGUoKSksICgiQXQgIiwgKmJsb2NrLT5sYXN0
KCkpKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBzdWNjZXNz
b3IgOiBibG9jay0+c3VjY2Vzc29yQmxvY2tzKCkpIHsKKyAgICAgICAgICAgICAgICBhbGxQcmVk
ZWNlc3NvcnMuYWRkKHN1Y2Nlc3NvciwgSGFzaFNldDxCYXNpY0Jsb2NrKj4oKSkuaXRlcmF0b3It
PnZhbHVlLmFkZChibG9jayk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUoCisgICAgICAgICAg
ICAgICAgICAgIGJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3IpLCAoIkF0ICIsICpibG9jaywgIi0+
IiwgcG9pbnRlckR1bXAoc3VjY2Vzc29yKSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgdG90YWxseSBhbGxvd3MgZGVhZCBjb2RlLgorICAg
ICAgICBmb3IgKGF1dG8mIGVudHJ5IDogYWxsUHJlZGVjZXNzb3JzKSB7CisgICAgICAgICAgICBC
YXNpY0Jsb2NrKiBzdWNjZXNzb3IgPSBlbnRyeS5rZXk7CisgICAgICAgICAgICBIYXNoU2V0PEJh
c2ljQmxvY2sqPiYgcHJlZGVjZXNzb3JzID0gZW50cnkudmFsdWU7CisgICAgICAgICAgICBWQUxJ
REFURShwcmVkZWNlc3NvcnMgPT0gc3VjY2Vzc29yLT5wcmVkZWNlc3NvcnMoKSwgKCJBdCAiLCAq
c3VjY2Vzc29yKSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IG1f
cHJvY2VkdXJlLnZhbHVlcygpKSB7CisgICAgICAgICAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IHZh
bHVlLT5jaGlsZHJlbigpKQorICAgICAgICAgICAgICAgIFZBTElEQVRFKGNoaWxkLT50eXBlKCkg
IT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUsICItPiIsICpjaGlsZCkpOworICAgICAgICAgICAgc3dp
dGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgTm9wOgorICAgICAgICAg
ICAgY2FzZSBKdW1wOgorICAgICAgICAgICAgY2FzZSBPb3BzOgorICAgICAgICAgICAgICAgIFZB
TElEQVRFKCF2YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIElkZW50aXR5OgorICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQgIiwg
KnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnN0MzI6CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENvbnN0NjQ6
CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50
NjQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIENvbnN0RG91YmxlOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IERvdWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RhY2tTbG90OgorICAgICAgICAgICAgY2FzZSBG
cmFtZVBvaW50ZXI6CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJl
bigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50
eXBlKCkgPT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQXJndW1lbnRSZWc6CisgICAgICAgICAgICAgICAg
VkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIFZBTElEQVRFKAorICAgICAgICAgICAgICAgICAgICAodmFsdWUtPmFzPEFyZ3Vt
ZW50UmVnVmFsdWU+KCktPmFyZ3VtZW50UmVnKCkuaXNHUFIoKSA/IHBvaW50ZXJUeXBlKCkgOiBE
b3VibGUpCisgICAgICAgICAgICAgICAgICAgID09IHZhbHVlLT50eXBlKCksICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFkZDoKKyAg
ICAgICAgICAgIGNhc2UgU3ViOgorICAgICAgICAgICAgY2FzZSBNdWw6CisgICAgICAgICAgICBj
YXNlIERpdjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9
PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50
eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5
cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENoaWxsRGl2OgorICAgICAgICAgICAgY2FzZSBNb2Q6CisgICAg
ICAgICAgICBjYXNlIEJpdEFuZDoKKyAgICAgICAgICAgIGNhc2UgQml0T3I6CisgICAgICAgICAg
ICBjYXNlIEJpdFhvcjoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKSA9PSAyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZh
bHVlLT50eXBlKCkgPT0gdmFsdWUtPmNoaWxkKDApLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7
CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQo
MSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShp
c0ludCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgU2hsOgorICAgICAgICAgICAgY2FzZSBTU2hyOgorICAg
ICAgICAgICAgY2FzZSBaU2hyOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1D
aGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSA9
PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0lu
dCh2YWx1ZS0+dHlwZSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgU0V4dDg6CisgICAgICAgICAgICBjYXNlIFNFeHQxNjoKKyAg
ICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlw
ZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRF
KHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNFeHQzMjoKKyAgICAgICAgICAgIGNhc2UgWkV4
dDMyOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEs
ICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxk
KDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQ2NCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVHJ1bmM6CisgICAgICAgICAgICAg
ICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBJbnQ2
NCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlw
ZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBGUm91bmQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUt
Pm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBEb3VibGUsICgiQXQgIiwgKnZhbHVl
KSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBEb3VibGUsICgi
QXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl
IElUb0Q6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0g
MSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0ludCh2YWx1
ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBEb3VibGUsICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERUb0kzMjoKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9PSAxLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpID09IERv
dWJsZSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
dHlwZSgpID09IEludDMyLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBFcXVhbDoKKyAgICAgICAgICAgIGNhc2UgTm90RXF1YWw6Cisg
ICAgICAgICAgICBjYXNlIExlc3NUaGFuOgorICAgICAgICAgICAgY2FzZSBHcmVhdGVyVGhhbjoK
KyAgICAgICAgICAgIGNhc2UgTGVzc0VxdWFsOgorICAgICAgICAgICAgY2FzZSBHcmVhdGVyRXF1
YWw6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwg
KCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQo
MCktPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IEludDMyLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBYm92
ZToKKyAgICAgICAgICAgIGNhc2UgQmVsb3c6CisgICAgICAgICAgICBjYXNlIEFib3ZlRXF1YWw6
CisgICAgICAgICAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+Y2hpbGQoMSkt
PnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShpc0lu
dCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBJbnQzMiwgKCJBdCAiLCAqdmFsdWUpKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTG9hZDhaOgorICAgICAg
ICAgICAgY2FzZSBMb2FkOFM6CisgICAgICAgICAgICBjYXNlIExvYWQxNlo6CisgICAgICAgICAg
ICBjYXNlIExvYWQxNlM6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gSW50MzIsICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExv
YWRGbG9hdDoKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+bnVtQ2hpbGRyZW4oKSA9
PSAxLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5j
aGlsZCgwKS0+dHlwZSgpID09IHBvaW50ZXJUeXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBEb3VibGUsICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIExvYWQ6Cisg
ICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAi
LCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5
cGUoKSA9PSBwb2ludGVyVHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU3RvcmU4OgorICAgICAgICAgICAg
Y2FzZSBTdG9yZTE2OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJl
bigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPmNoaWxkKDApLT50eXBlKCkgPT0gSW50MzIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gcG9pbnRlclR5cGUo
KSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlw
ZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFN0b3JlRmxvYXQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPm51bUNoaWxkcmVuKCkgPT0gMiwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSBEb3VibGUsICgiQXQgIiwgKnZh
bHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkg
PT0gcG9pbnRlclR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFN0b3JlOgorICAgICAgICAgICAgICAgIFZB
TElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPmNoaWxkKDEpLT50eXBlKCkgPT0gcG9pbnRlclR5
cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+
dHlwZSgpID09IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIENDYWxsOgorICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgYSB3
aWxkY2FyZC4gWW91IGNhbiBwYXNzIGFueSBub24tdm9pZCBhcmd1bWVudHMgYW5kIHlvdSBjYW4g
c2VsZWN0IGFueQorICAgICAgICAgICAgICAgIC8vIHJldHVybiB0eXBlLgorICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBQYXRjaHBvaW50OgorICAgICAgICAgICAgICAg
IHZhbGlkYXRlU3RhY2ttYXAodmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgY2FzZSBDaGVja0FkZDoKKyAgICAgICAgICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgICAg
ICAgICBjYXNlIENoZWNrTXVsOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1D
aGlsZHJlbigpID49IDIsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURB
VEUoaXNJbnQodmFsdWUtPmNoaWxkKDApLT50eXBlKCkpLCAoIkF0ICIsICp2YWx1ZSkpOworICAg
ICAgICAgICAgICAgIFZBTElEQVRFKGlzSW50KHZhbHVlLT5jaGlsZCgxKS0+dHlwZSgpKSwgKCJB
dCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICB2YWxpZGF0ZVN0YWNrbWFwKHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ2hlY2s6CisgICAgICAg
ICAgICAgICAgdmFsaWRhdGVTdGFja21hcCh2YWx1ZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFVwc2lsb246CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFs
dWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAg
ICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+YXM8VXBzaWxvblZh
bHVlPigpLT5waGkoKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlSW5Qcm9jLmNvbnRhaW5zKHZhbHVlLT5hczxVcHNpbG9uVmFsdWU+KCkt
PnBoaSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgUGhpOgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+bnVtQ2hp
bGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1
ZS0+dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBjYXNlIEJyYW5jaDoKKyAgICAgICAgICAgIGNhc2UgUmV0dXJuOgor
ICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1DaGlsZHJlbigpID09IDEsICgiQXQg
IiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBW
b2lkLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBTd2l0Y2g6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxk
cmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURShp
c0ludCh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUoKSA9PSBWb2lkLCAoIkF0ICIsICp2YWx1ZSkp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCitwcml2YXRlOgorICAgIHZvaWQgdmFsaWRhdGVTdGFja21hcChWYWx1ZSogdmFsdWUpCisg
ICAgeworICAgICAgICBTdGFja21hcCogc3RhY2ttYXAgPSB2YWx1ZS0+c3RhY2ttYXAoKTsKKyAg
ICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPj0gc3RhY2ttYXAtPnJlcHMoKS5z
aXplKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzdGFja21hcC0+cmVwcygpLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBWYWx1
ZVJlcCYgcmVwID0gc3RhY2ttYXAtPnJlcHMoKVtpXTsKKyAgICAgICAgICAgIGlmIChyZXAua2lu
ZCgpICE9IFZhbHVlUmVwOjpSZWdpc3RlcikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgIGlmIChyZXAucmVnKCkuaXNHUFIoKSkKKyAgICAgICAgICAgICAgICBWQUxJREFU
RShpc0ludCh2YWx1ZS0+Y2hpbGQoaSktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgVkFMSURBVEUoaXNGbG9hdCh2YWx1ZS0+Y2hp
bGQoaSktPnR5cGUoKSksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
CisgICAgTk9fUkVUVVJOX0RVRV9UT19DUkFTSCB2b2lkIGZhaWwoCisgICAgICAgIGNvbnN0IGNo
YXIqIGZpbGVuYW1lLCBpbnQgbGluZU51bWJlciwgY29uc3QgY2hhciogZnVuY3Rpb24sIGNvbnN0
IGNoYXIqIGNvbmRpdGlvbiwKKyAgICAgICAgQ1N0cmluZyBtZXNzYWdlKQorICAgIHsKKyAgICAg
ICAgQ1N0cmluZyBmYWlsdXJlTWVzc2FnZTsKKyAgICAgICAgeworICAgICAgICAgICAgU3RyaW5n
UHJpbnRTdHJlYW0gb3V0OworICAgICAgICAgICAgb3V0LnByaW50KCJCMyBWQUxJREFUSU9OIEZB
SUxVUkVcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgY29uZGl0aW9uLCAiICgi
LCBmaWxlbmFtZSwgIjoiLCBsaW5lTnVtYmVyLCAiKVxuIik7CisgICAgICAgICAgICBvdXQucHJp
bnQoIiAgICAiLCBtZXNzYWdlLCAiXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgIEFm
dGVyICIsIG1fcHJvY2VkdXJlLmxhc3RQaGFzZU5hbWUoKSwgIlxuIik7CisgICAgICAgICAgICBm
YWlsdXJlTWVzc2FnZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGRh
dGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAgICBpZiAobV9kdW1wQmVmb3JlKSB7CisgICAg
ICAgICAgICBkYXRhTG9nKCJCZWZvcmUgIiwgbV9wcm9jZWR1cmUubGFzdFBoYXNlTmFtZSgpLCAi
OlxuIik7CisgICAgICAgICAgICBkYXRhTG9nKG1fZHVtcEJlZm9yZSk7CisgICAgICAgIH0KKyAg
ICAgICAgZGF0YUxvZygiQXQgdGltZSBvZiBmYWlsdXJlOlxuIik7CisgICAgICAgIGRhdGFMb2co
bV9wcm9jZWR1cmUpOworCisgICAgICAgIGRhdGFMb2coZmFpbHVyZU1lc3NhZ2UpOworICAgICAg
ICBXVEZSZXBvcnRBc3NlcnRpb25GYWlsdXJlKGZpbGVuYW1lLCBsaW5lTnVtYmVyLCBmdW5jdGlv
biwgY29uZGl0aW9uKTsKKyAgICAgICAgQ1JBU0goKTsKKyAgICB9CisgICAgCisgICAgUHJvY2Vk
dXJlJiBtX3Byb2NlZHVyZTsKKyAgICBjb25zdCBjaGFyKiBtX2R1bXBCZWZvcmU7Cit9OworCit9
IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCB2YWxpZGF0ZShQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxpZGF0ZXIgdmFsaWRhdGVy
KHByb2NlZHVyZSwgZHVtcEJlZm9yZSk7CisgICAgdmFsaWRhdGVyLnJ1bigpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBCM1ZhbGlkYXRlX2gKKyNkZWZpbmUgQjNWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgUHJvY2VkdXJl
OworCit2b2lkIHZhbGlkYXRlKFByb2NlZHVyZSYsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUgPSBu
dWxscHRyKTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQorCisjZW5kaWYgLy8gQjNWYWxpZGF0ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyODcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRl
ICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KKyNpbmNs
dWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7CisKK2NvbnN0IGNoYXIqIGNvbnN0IFZhbHVlOjpkdW1wUHJlZml4ID0gIkAiOworCitW
YWx1ZTo6flZhbHVlKCkKK3sKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShW
YWx1ZSogdmFsdWUpCit7CisgICAgLy8gVGhpcyBpcyBhIGJpdCBjcmF6eS4gSXQgZG9lcyBhbiBp
bi1wbGFjZSByZXBsYWNlbWVudCBvZiB3aGF0ZXZlciBWYWx1ZSBzdWJjbGFzcyB0aGlzIGlzIHdp
dGgKKyAgICAvLyBhIHBsYWluIElkZW50aXR5IFZhbHVlLiBXZSBmaXJzdCBjb2xsZWN0IGFsbCBv
ZiB0aGUgaW5mb3JtYXRpb24gd2UgbmVlZCwgdGhlbiB3ZSBkZXN0cnVjdCB0aGUKKyAgICAvLyBw
cmV2aW91cyB2YWx1ZSBpbiBwbGFjZSwgYW5kIHRoZW4gd2UgY29uc3RydWN0IHRoZSBJZGVudGl0
eSBWYWx1ZSBpbiBwbGFjZS4KKworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBU
eXBlIHR5cGUgPSBtX3R5cGU7CisgICAgT3JpZ2luIG9yaWdpbiA9IG1fb3JpZ2luOworICAgIEJh
c2ljQmxvY2sqIG93bmVyID0gdGhpcy0+b3duZXI7CisKKyAgICBSRUxFQVNFX0FTU0VSVCh0eXBl
ID09IHZhbHVlLT50eXBlKCkpOworCisgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOworCisgICAg
bmV3ICh0aGlzKSBWYWx1ZShpbmRleCwgSWRlbnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOwor
CisgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKK30KKwordm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhO
b3AoKQoreworICAgIHVuc2lnbmVkIGluZGV4ID0gbV9pbmRleDsKKyAgICBPcmlnaW4gb3JpZ2lu
ID0gbV9vcmlnaW47CisgICAgQmFzaWNCbG9jayogb3duZXIgPSB0aGlzLT5vd25lcjsKKworICAg
IHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKKworICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIE5v
cCwgVm9pZCwgb3JpZ2luKTsKKworICAgIHRoaXMtPm93bmVyID0gb3duZXI7Cit9CisKK3ZvaWQg
VmFsdWU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVt
cFByZWZpeCwgbV9pbmRleCk7Cit9CisKK3ZvaWQgVmFsdWU6OmRlZXBEdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KG1fdHlwZSwgIiAiLCAqdGhpcywgIiA9ICIs
IG1fb3Bjb2RlKTsKKworICAgIG91dC5wcmludCgiKCIpOworICAgIENvbW1hUHJpbnRlciBjb21t
YTsKKyAgICBmb3IgKFZhbHVlKiBjaGlsZCA6IGNoaWxkcmVuKCkpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgcG9pbnRlckR1bXAoY2hpbGQpKTsKKworICAgIGlmIChtX29yaWdpbikKKyAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBtX29yaWdpbik7CisKKyAgICB7CisgICAgICAgIFN0cmluZ1By
aW50U3RyZWFtIHN0cmluZ091dDsKKyAgICAgICAgZHVtcE1ldGEoc3RyaW5nT3V0KTsKKyAgICAg
ICAgQ1N0cmluZyBzdHJpbmcgPSBzdHJpbmdPdXQudG9DU3RyaW5nKCk7CisgICAgICAgIGlmIChz
dHJpbmcubGVuZ3RoKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoY29tbWEsIHN0cmluZyk7Cisg
ICAgfQorCisgICAgeworICAgICAgICBDU3RyaW5nIHN0cmluZyA9IHRvQ1N0cmluZyhlZmZlY3Rz
KCkpOworICAgICAgICBpZiAoc3RyaW5nLmxlbmd0aCgpKQorICAgICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCBzdHJpbmcpOworICAgIH0KKworICAgIG91dC5wcmludCgiKSIpOworfQorCitWYWx1
ZSogVmFsdWU6Om5lZ0NvbnN0YW50KFByb2NlZHVyZSYpIGNvbnN0Cit7CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK1ZhbHVlKiBWYWx1ZTo6YWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJf
dCkgY29uc3QKK3sKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworVmFsdWUqIFZhbHVlOjphZGRD
b25zdGFudChQcm9jZWR1cmUmLCBWYWx1ZSopIGNvbnN0Cit7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK1ZhbHVlKiBWYWx1ZTo6c3ViQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqKSBjb25z
dAoreworICAgIHJldHVybiBudWxscHRyOworfQorCitFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkg
Y29uc3QKK3sKKyAgICBFZmZlY3RzIHJlc3VsdDsKKyAgICBzd2l0Y2ggKG9wY29kZSgpKSB7Cisg
ICAgY2FzZSBOb3A6CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIENvbnN0MzI6CisgICAg
Y2FzZSBDb25zdDY0OgorICAgIGNhc2UgQ29uc3REb3VibGU6CisgICAgY2FzZSBTdGFja1Nsb3Q6
CisgICAgY2FzZSBBcmd1bWVudFJlZzoKKyAgICBjYXNlIEZyYW1lUG9pbnRlcjoKKyAgICBjYXNl
IEFkZDoKKyAgICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIENoaWxsRGl2Ogor
ICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6CisgICAgY2Fz
ZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2UgWlNocjoK
KyAgICBjYXNlIFNFeHQ4OgorICAgIGNhc2UgU0V4dDE2OgorICAgIGNhc2UgU0V4dDMyOgorICAg
IGNhc2UgWkV4dDMyOgorICAgIGNhc2UgVHJ1bmM6CisgICAgY2FzZSBGUm91bmQ6CisgICAgY2Fz
ZSBJVG9EOgorICAgIGNhc2UgRFRvSTMyOgorICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RF
cXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgorICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2Fz
ZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVhdGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAg
ICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJvdmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6
CisgICAgY2FzZSBQaGk6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRGl2OgorICAgICAgICBy
ZXN1bHQuY29udHJvbERlcGVuZGVudCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
TG9hZDhaOgorICAgIGNhc2UgTG9hZDhTOgorICAgIGNhc2UgTG9hZDE2WjoKKyAgICBjYXNlIExv
YWQxNlM6CisgICAgY2FzZSBMb2FkRmxvYXQ6CisgICAgY2FzZSBMb2FkOgorICAgICAgICAvLyBG
SVhNRTogTWVtb3J5VmFsdWUgc2hvdWxkIGhhdmUgYSBIZWFwUmFuZ2UuCisgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MzUKKyAgICAgICAgcmVz
dWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBl
bmRlbnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0b3JlODoKKyAgICBjYXNl
IFN0b3JlMTY6CisgICAgY2FzZSBTdG9yZUZsb2F0OgorICAgIGNhc2UgU3RvcmU6CisgICAgICAg
IC8vIEZJWE1FOiBNZW1vcnlWYWx1ZSBzaG91bGQgaGF2ZSBhIEhlYXBSYW5nZS4KKyAgICAgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDUzNQorICAgICAg
ICByZXN1bHQud3JpdGVzID0gSGVhcFJhbmdlOjp0b3AoKTsKKyAgICAgICAgcmVzdWx0LmNvbnRy
b2xEZXBlbmRlbnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENDYWxsOgorICAg
IGNhc2UgUGF0Y2hwb2ludDoKKyAgICAgICAgcmVzdWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3Ao
KTsKKyAgICAgICAgcmVzdWx0LndyaXRlcyA9IEhlYXBSYW5nZTo6dG9wKCk7CisgICAgICAgIHJl
c3VsdC5leGl0c1NpZGV3YXlzID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LmNvbnRyb2xEZXBlbmRl
bnQgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2Ug
Q2hlY2tTdWI6CisgICAgY2FzZSBDaGVja011bDoKKyAgICBjYXNlIENoZWNrOgorICAgICAgICBy
ZXN1bHQuZXhpdHNTaWRld2F5cyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVXBz
aWxvbjoKKyAgICAgICAgcmVzdWx0LndyaXRlc1NTQVN0YXRlID0gdHJ1ZTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBKdW1wOgorICAgIGNhc2UgQnJhbmNoOgorICAgIGNhc2UgU3dpdGNoOgor
ICAgIGNhc2UgUmV0dXJuOgorICAgIGNhc2UgT29wczoKKyAgICAgICAgcmVzdWx0LnRlcm1pbmFs
ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3ZvaWQgVmFsdWU6OnBlcmZvcm1TdWJzdGl0dXRpb24oKQoreworICAgIGZvciAoVmFsdWUqJiBj
aGlsZCA6IGNoaWxkcmVuKCkpIHsKKyAgICAgICAgd2hpbGUgKGNoaWxkLT5vcGNvZGUoKSA9PSBJ
ZGVudGl0eSkKKyAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPmNoaWxkKDApOworICAgIH0KK30K
Kwordm9pZCBWYWx1ZTo6ZHVtcE1ldGEoUHJpbnRTdHJlYW0mKSBjb25zdAoreworfQorCitUeXBl
IFZhbHVlOjp0eXBlRm9yKE9wY29kZSBvcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkKQoreworICAg
IHN3aXRjaCAob3Bjb2RlKSB7CisgICAgY2FzZSBJZGVudGl0eToKKyAgICBjYXNlIEFkZDoKKyAg
ICBjYXNlIFN1YjoKKyAgICBjYXNlIE11bDoKKyAgICBjYXNlIERpdjoKKyAgICBjYXNlIENoaWxs
RGl2OgorICAgIGNhc2UgTW9kOgorICAgIGNhc2UgQml0QW5kOgorICAgIGNhc2UgQml0T3I6Cisg
ICAgY2FzZSBCaXRYb3I6CisgICAgY2FzZSBTaGw6CisgICAgY2FzZSBTU2hyOgorICAgIGNhc2Ug
WlNocjoKKyAgICBjYXNlIENoZWNrQWRkOgorICAgIGNhc2UgQ2hlY2tTdWI6CisgICAgY2FzZSBD
aGVja011bDoKKyAgICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQtPnR5cGUoKTsKKyAgICBjYXNlIEZy
YW1lUG9pbnRlcjoKKyAgICAgICAgcmV0dXJuIHBvaW50ZXJUeXBlKCk7CisgICAgY2FzZSBTRXh0
ODoKKyAgICBjYXNlIFNFeHQxNjoKKyAgICBjYXNlIFRydW5jOgorICAgIGNhc2UgRFRvSTMyOgor
ICAgIGNhc2UgRXF1YWw6CisgICAgY2FzZSBOb3RFcXVhbDoKKyAgICBjYXNlIExlc3NUaGFuOgor
ICAgIGNhc2UgR3JlYXRlclRoYW46CisgICAgY2FzZSBMZXNzRXF1YWw6CisgICAgY2FzZSBHcmVh
dGVyRXF1YWw6CisgICAgY2FzZSBBYm92ZToKKyAgICBjYXNlIEJlbG93OgorICAgIGNhc2UgQWJv
dmVFcXVhbDoKKyAgICBjYXNlIEJlbG93RXF1YWw6CisgICAgICAgIHJldHVybiBJbnQzMjsKKyAg
ICBjYXNlIFNFeHQzMjoKKyAgICBjYXNlIFpFeHQzMjoKKyAgICAgICAgcmV0dXJuIEludDY0Owor
ICAgIGNhc2UgRlJvdW5kOgorICAgIGNhc2UgSVRvRDoKKyAgICAgICAgcmV0dXJuIERvdWJsZTsK
KyAgICBjYXNlIE5vcDoKKyAgICAgICAgcmV0dXJuIFZvaWQ7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhbHVlX2gK
KyNkZWZpbmUgQjNWYWx1ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWly
QXJnLmgiCisjaW5jbHVkZSAiQjNFZmZlY3RzLmgiCisjaW5jbHVkZSAiQjNPcGNvZGUuaCIKKyNp
bmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUgIkIzVHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9G
YXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xhc3MgUHJvY2VkdXJl
OworY2xhc3MgU3RhY2ttYXA7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklWQVRFIFZhbHVlIHsKKyAg
ICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYWx1ZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiBWZWN0b3I8VmFsdWUqLCAzPiBBZGphY2VuY3lMaXN0
OworCisgICAgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IGR1bXBQcmVmaXg7CisKKyAgICBzdGF0
aWMgYm9vbCBhY2NlcHRzKE9wY29kZSkgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdmlydHVhbCB+
VmFsdWUoKTsKKworICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleDsg
fQorICAgIAorICAgIC8vIE5vdGUgdGhhdCB0aGUgb3Bjb2RlIGlzIGltbXV0YWJsZSwgZXhjZXB0
IGZvciByZXBsYWNpbmcgdmFsdWVzIHdpdGggSWRlbnRpdHkgb3IgTm9wLgorICAgIE9wY29kZSBv
cGNvZGUoKSBjb25zdCB7IHJldHVybiBtX29wY29kZTsgfQorCisgICAgT3JpZ2luIG9yaWdpbigp
IGNvbnN0IHsgcmV0dXJuIG1fb3JpZ2luOyB9CisgICAgCisgICAgVmFsdWUqJiBjaGlsZCh1bnNp
Z25lZCBpbmRleCkgeyByZXR1cm4gbV9jaGlsZHJlbltpbmRleF07IH0KKyAgICBWYWx1ZSogY2hp
bGQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW5baW5kZXhdOyB9CisK
KyAgICB1bnNpZ25lZCBudW1DaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW4uc2l6
ZSgpOyB9CisKKyAgICAvLyBUaGlzIGNvbXB1dGVzIHRoZSB0eXBlIHVzaW5nIHRoZSBvcGNvZGUu
CisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisKKyAgICAvLyBUaGlz
IGlzIHVzZWZ1bCB3aGVuIGxvd2VyaW5nLiBOb3RlIHRoYXQgdGhpcyBpcyBvbmx5IHZhbGlkIGZv
ciBub24tdm9pZCB2YWx1ZXMuCisgICAgQWlyOjpBcmc6OlR5cGUgYWlyVHlwZSgpIGNvbnN0IHsg
cmV0dXJuIEFpcjo6QXJnOjp0eXBlRm9yQjNUeXBlKHR5cGUoKSk7IH0KKworICAgIEFkamFjZW5j
eUxpc3QmIGNoaWxkcmVuKCkgeyByZXR1cm4gbV9jaGlsZHJlbjsgfSAKKyAgICBjb25zdCBBZGph
Y2VuY3lMaXN0JiBjaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KKworICAg
IHZvaWQgcmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSopOworICAgIHZvaWQgcmVwbGFjZVdpdGhO
b3AoKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVl
cER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworICAgIC8vIFRoaXMgaXMgaG93IHlvdSBjYXN0
IFZhbHVlcy4gRm9yIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBwcm92aWRl
ZCB0aGF0IHdlIGhhdmUgYQorICAgIC8vIEFyZ3VtZW50UmVnVmFsdWUsIHlvdSBjYW4gZG86Cisg
ICAgLy8KKyAgICAvLyBpZiAoQXJndW1lbnRSZWdWYWx1ZSogYXJndW1lbnRSZWcgPSB2YWx1ZS0+
YXM8QXJndW1lbnRSZWdWYWx1ZT4oKSkgeworICAgIC8vICAgICB0aGluZ3MKKyAgICAvLyB9Cisg
ICAgLy8KKyAgICAvLyBUaGlzIHdpbGwgcmV0dXJuIG51bGwgaWYgdGhpcyBvcGNvZGUoKSAhPSBB
cmd1bWVudFJlZy4gVGhpcyB3b3JrcyBiZWNhdXNlIHRoaXMgcmV0dXJucyBudWxscHRyCisgICAg
Ly8gaWYgVDo6YWNjZXB0cyhvcGNvZGUoKSkgcmV0dXJucyBmYWxzZS4KKyAgICB0ZW1wbGF0ZTx0
eXBlbmFtZSBUPgorICAgIFQqIGFzKCk7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBj
b25zdCBUKiBhcygpIGNvbnN0OworCisgICAgYm9vbCBpc0NvbnN0YW50KCkgY29uc3Q7CisgICAg
CisgICAgdmlydHVhbCBWYWx1ZSogbmVnQ29uc3RhbnQoUHJvY2VkdXJlJikgY29uc3Q7CisgICAg
dmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgaW50MzJfdCBvdGhlcikgY29u
c3Q7CisgICAgdmlydHVhbCBWYWx1ZSogYWRkQ29uc3RhbnQoUHJvY2VkdXJlJiwgVmFsdWUqIG90
aGVyKSBjb25zdDsKKyAgICB2aXJ0dWFsIFZhbHVlKiBzdWJDb25zdGFudChQcm9jZWR1cmUmLCBW
YWx1ZSogb3RoZXIpIGNvbnN0OworCisgICAgYm9vbCBoYXNJbnQzMigpIGNvbnN0OworICAgIGlu
dDMyX3QgYXNJbnQzMigpIGNvbnN0OworICAgIAorICAgIGJvb2wgaGFzSW50NjQoKSBjb25zdDsK
KyAgICBpbnQ2NF90IGFzSW50NjQoKSBjb25zdDsKKworICAgIGJvb2wgaGFzSW50KCkgY29uc3Q7
CisgICAgaW50NjRfdCBhc0ludCgpIGNvbnN0OworICAgIGJvb2wgaXNJbnQoaW50NjRfdCB2YWx1
ZSkgY29uc3Q7CisKKyAgICBib29sIGhhc0ludFB0cigpIGNvbnN0OworICAgIGludHB0cl90IGFz
SW50UHRyKCkgY29uc3Q7CisKKyAgICBib29sIGhhc0RvdWJsZSgpIGNvbnN0OworICAgIGRvdWJs
ZSBhc0RvdWJsZSgpIGNvbnN0OworCisgICAgRWZmZWN0cyBlZmZlY3RzKCkgY29uc3Q7CisKKyAg
ICBTdGFja21hcCogc3RhY2ttYXAoKTsKKworICAgIC8vIE1ha2VzIHN1cmUgdGhhdCBub25lIG9m
IHRoZSBjaGlsZHJlbiBhcmUgSWRlbnRpdHkncy4gSWYgYSBjaGlsZCBwb2ludHMgdG8gSWRlbnRp
dHksIHRoaXMgd2lsbAorICAgIC8vIHJlcG9pbnQgaXQgYXQgdGhlIElkZW50aXR5J3MgY2hpbGQu
IEZvciBzaW1wbGljaXR5LCB0aGlzIHdpbGwgZm9sbG93IGFyYml0cmFyaWx5IGxvbmcgY2hhaW5z
CisgICAgLy8gb2YgSWRlbnRpdHkncy4KKyAgICB2b2lkIHBlcmZvcm1TdWJzdGl0dXRpb24oKTsK
KworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBkdW1wTWV0YShQcmludFN0cmVhbSYpIGNv
bnN0OworICAgIAorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCitwcm90
ZWN0ZWQ6CisgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUuCisgICAgLy8g
VGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseToKKyAgICB0
ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUq
IGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9pbmRleChp
bmRleCkKKyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUp
CisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0
Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMg
Zm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNvZGUgaGFzIG5v
IGNoaWxkcmVuOgorICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9pbmRleChpbmRleCkK
KyAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgICAgICwgbV90eXBlKHR5cGUpCisgICAg
ICAgICwgbV9vcmlnaW4ob3JpZ2luKQorICAgIHsKKyAgICB9CisgICAgLy8gVGhpcyBmb3JtIGlz
IGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bj
b2RlIGFuZCBmaXJzdCBjaGlsZDoKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+
CisgICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAg
ICAgICA6IG1faW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAg
ICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCisgICAgICAgICwgbV9vcmln
aW4ob3JpZ2luKQorICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4u
LiB9CisgICAgeworICAgIH0KKyAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMg
dGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0
IGRvbid0CisgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgorICAgIGV4cGxpY2l0IFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCisgICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgICAgICAsIG1fdHlw
ZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCisgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQor
ICAgIHsKKyAgICB9CisgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgdmFyYXJncy4KKyAgICBleHBs
aWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmln
aW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQorICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICAgICAgLCBtX3R5cGUo
dHlwZSkKKyAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCisgICAgICAgICwgbV9jaGlsZHJlbihj
aGlsZHJlbikKKyAgICB7CisgICAgfQorCitwcml2YXRlOgorICAgIHN0YXRpYyBUeXBlIHR5cGVG
b3IoT3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCk7CisKKyAgICAvLyBUaGlzIGdyb3VwIG9mIGZp
ZWxkcyBpcyBhcnJhbmdlZCB0byBmaXQgaW4gNjQgYml0cy4KKyAgICB1bnNpZ25lZCBtX2luZGV4
OworICAgIE9wY29kZSBtX29wY29kZTsKKyAgICBUeXBlIG1fdHlwZTsKKyAgICAKKyAgICBPcmln
aW4gbV9vcmlnaW47CisgICAgQWRqYWNlbmN5TGlzdCBtX2NoaWxkcmVuOworCitwdWJsaWM6Cisg
ICAgQmFzaWNCbG9jayogb3duZXIgeyBudWxscHRyIH07IC8vIGNvbXB1dGVkIGxhemlseS4KK307
CisKK2NsYXNzIERlZXBWYWx1ZUR1bXAgeworcHVibGljOgorICAgIERlZXBWYWx1ZUR1bXAoY29u
c3QgVmFsdWUqIHZhbHVlKQorICAgICAgICA6IG1fdmFsdWUodmFsdWUpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAg
aWYgKG1fdmFsdWUpCisgICAgICAgICAgICBtX3ZhbHVlLT5kZWVwRHVtcChvdXQpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0
ZToKKyAgICBjb25zdCBWYWx1ZSogbV92YWx1ZTsKK307CisKK2lubGluZSBEZWVwVmFsdWVEdW1w
IGRlZXBEdW1wKGNvbnN0IFZhbHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhbHVlRHVt
cCh2YWx1ZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5B
QkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZUlubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbHVlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MTQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNWYWx1ZUlubGluZXNfaAorI2RlZmluZSBCM1ZhbHVlSW5saW5lc19oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNDaGVja1ZhbHVlLmgiCisjaW5jbHVkZSAiQjND
b25zdDMyVmFsdWUuaCIKKyNpbmNsdWRlICJCM0NvbnN0NjRWYWx1ZS5oIgorI2luY2x1ZGUgIkIz
Q29uc3REb3VibGVWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUGF0Y2hwb2ludFZhbHVlLmgiCisjaW5j
bHVkZSAiQjNQcm9jZWR1cmUuaCIKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorVCogVmFsdWU6OmFz
KCkKK3sKKyAgICBpZiAoVDo6YWNjZXB0cyhvcGNvZGUoKSkpCisgICAgICAgIHJldHVybiBzdGF0
aWNfY2FzdDxUKj4odGhpcyk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+Citjb25zdCBUKiBWYWx1ZTo6YXMoKSBjb25zdAoreworICAgIHJldHVybiBjb25z
dF9jYXN0PFZhbHVlKj4odGhpcyktPmFzPFQ+KCk7Cit9CisKK2lubGluZSBib29sIFZhbHVlOjpp
c0NvbnN0YW50KCkgY29uc3QKK3sKKyAgICBzd2l0Y2ggKG9wY29kZSgpKSB7CisgICAgY2FzZSBD
b25zdDMyOgorICAgIGNhc2UgQ29uc3Q2NDoKKyAgICBjYXNlIENvbnN0RG91YmxlOgorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorfQorCitpbmxpbmUgYm9vbCBWYWx1ZTo6aGFzSW50MzIoKSBjb25zdAoreworICAgIHJldHVy
biAhIWFzPENvbnN0MzJWYWx1ZT4oKTsKK30KKworaW5saW5lIGludDMyX3QgVmFsdWU6OmFzSW50
MzIoKSBjb25zdAoreworICAgIHJldHVybiBhczxDb25zdDMyVmFsdWU+KCktPnZhbHVlKCk7Cit9
CisKK2lubGluZSBib29sIFZhbHVlOjpoYXNJbnQ2NCgpIGNvbnN0Cit7CisgICAgcmV0dXJuICEh
YXM8Q29uc3Q2NFZhbHVlPigpOworfQorCitpbmxpbmUgaW50NjRfdCBWYWx1ZTo6YXNJbnQ2NCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIGFzPENvbnN0NjRWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKwor
aW5saW5lIGJvb2wgVmFsdWU6Omhhc0ludCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGhhc0ludDMy
KCkgfHwgaGFzSW50NjQoKTsKK30KKworaW5saW5lIGludDY0X3QgVmFsdWU6OmFzSW50KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gaGFzSW50MzIoKSA/IGFzSW50MzIoKSA6IGFzSW50NjQoKTsKK30K
KworaW5saW5lIGJvb2wgVmFsdWU6OmlzSW50KGludDY0X3QgdmFsdWUpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGhhc0ludCgpICYmIGFzSW50KCkgPT0gdmFsdWU7Cit9CisKK2lubGluZSBib29sIFZh
bHVlOjpoYXNJbnRQdHIoKSBjb25zdAoreworICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgIHJl
dHVybiBoYXNJbnQ2NCgpOworICAgIHJldHVybiBoYXNJbnQzMigpOworfQorCitpbmxpbmUgaW50
cHRyX3QgVmFsdWU6OmFzSW50UHRyKCkgY29uc3QKK3sKKyAgICBpZiAoaXM2NEJpdCgpKQorICAg
ICAgICByZXR1cm4gYXNJbnQ2NCgpOworICAgIHJldHVybiBhc0ludDMyKCk7Cit9CisKK2lubGlu
ZSBib29sIFZhbHVlOjpoYXNEb3VibGUoKSBjb25zdAoreworICAgIHJldHVybiAhIWFzPENvbnN0
RG91YmxlVmFsdWU+KCk7Cit9CisKK2lubGluZSBkb3VibGUgVmFsdWU6OmFzRG91YmxlKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gYXM8Q29uc3REb3VibGVWYWx1ZT4oKS0+dmFsdWUoKTsKK30KKwor
aW5saW5lIFN0YWNrbWFwKiBWYWx1ZTo6c3RhY2ttYXAoKQoreworICAgIGlmIChDaGVja1ZhbHVl
KiBjaGVjayA9IGFzPENoZWNrVmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmY2hlY2stPnN0YWNr
bWFwOworICAgIGlmIChQYXRjaHBvaW50VmFsdWUqIHBhdGNocG9pbnQgPSBhczxQYXRjaHBvaW50
VmFsdWU+KCkpCisgICAgICAgIHJldHVybiAmcGF0Y2hwb2ludC0+c3RhY2ttYXA7CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFsdWVJbmxpbmVzX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlUmVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDg5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhbHVlUmVwLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwordm9pZCBWYWx1
ZVJlcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChtX2tp
bmQpOworICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgY2FzZSBBbnk6CisgICAgY2FzZSBTb21l
UmVnaXN0ZXI6CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlZ2lzdGVyOgorICAgICAgICBv
dXQucHJpbnQoIigiLCByZWcoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3Rh
Y2s6CisgICAgICAgIG91dC5wcmludCgiKCIsIG9mZnNldEZyb21GUCgpLCAiKSIpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBTdGFja0FyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQoIigi
LCBvZmZzZXRGcm9tU1AoKSwgIikiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ29uc3Rh
bnQ6CisgICAgICAgIG91dC5wcmludCgiKCIsIHZhbHVlKCksICIpIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFZhbHVlUmVw
OjpLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7CisgICAgY2FzZSBWYWx1ZVJlcDo6
QW55OgorICAgICAgICBvdXQucHJpbnQoIkFueSIpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyOgorICAgICAgICBvdXQucHJpbnQoIlNvbWVSZWdpc3Rl
ciIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBWYWx1ZVJlcDo6UmVnaXN0ZXI6CisgICAg
ICAgIG91dC5wcmludCgiUmVnaXN0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFs
dWVSZXA6OlN0YWNrOgorICAgICAgICBvdXQucHJpbnQoIlN0YWNrIik7CisgICAgICAgIHJldHVy
bjsKKyAgICBjYXNlIFZhbHVlUmVwOjpTdGFja0FyZ3VtZW50OgorICAgICAgICBvdXQucHJpbnQo
IlN0YWNrQXJndW1lbnQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgVmFsdWVSZXA6OkNv
bnN0YW50OgorICAgICAgICBvdXQucHJpbnQoIkNvbnN0YW50Iik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzVmFsdWVSZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZVJlcC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsdWVSZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3OCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFs
dWVSZXBfaAorI2RlZmluZSBCM1ZhbHVlUmVwX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNp
bmNsdWRlICJSZWcuaCIKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIFdlIHVzZSB0aGlzIGNsYXNzIHRvIGRlc2NyaWJl
IHZhbHVlIHJlcHJlc2VudGF0aW9ucyBhdCBzdGFja21hcHMuIEl0J3MgdXNlZCBib3RoIHRvIGZv
cmNlIGEKKy8vIHJlcHJlc2VudGF0aW9uIGFuZCB0byBnZXQgdGhlIHJlcHJlc2VudGF0aW9uLiBX
aGVuIHRoZSBCMyBjbGllbnQgZm9yY2VzIGEgcmVwcmVzZW50YXRpb24sIHdlIHNheQorLy8gdGhh
dCBpdCdzIGFuIGlucHV0LiBXaGVuIEIzIHRlbGxzIHRoZSBjbGllbnQgd2hhdCByZXByZXNlbnRh
dGlvbiBpdCBwaWNrZWQsIHdlIHNheSB0aGF0IGl0J3MgYW4KKy8vIG91dHB1dC4KKworY2xhc3Mg
VmFsdWVSZXAgeworcHVibGljOgorICAgIGVudW0gS2luZCB7CisgICAgICAgIC8vIEFzIGFuIGlu
cHV0IHJlcHJlc2VudGF0aW9uLCB0aGlzIG1lYW5zIHRoYXQgQjMgY2FuIHBpY2sgYW55IHJlcHJl
c2VudGF0aW9uLiBBcyBhbgorICAgICAgICAvLyBvdXRwdXQgcmVwcmVzZW50YXRpb24sIHRoaXMg
bWVhbnMgdGhhdCB3ZSBkb24ndCBrbm93LiBUaGlzIHdpbGwgb25seSBhcmlzZSBmb3IgdGhlCisg
ICAgICAgIC8vIHJpZ2h0IG9wZXJhbmQgKGkuZS4gY2hpbGQoMSkpIG9mIGEgQ2hlY2tNdWwuCisg
ICAgICAgIEFueSwKKworICAgICAgICAvLyBBcyBhbiBpbnB1dCByZXByZXNlbnRhdGlvbiwgdGhp
cyBtZWFucyB0aGF0IEIzIHNob3VsZCBwaWNrIHNvbWUgcmVnaXN0ZXIuIEl0IGNvdWxkIGJlIGEK
KyAgICAgICAgLy8gcmVnaXN0ZXIgdGhhdCB0aGlzIGNsYWltcyB0byBjbG9iYmVyIQorICAgICAg
ICBTb21lUmVnaXN0ZXIsCisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24s
IHRoaXMgZm9yY2VzIGEgcGFydGljdWxhciByZWdpc3Rlci4gQXMgYW4gb3V0cHV0CisgICAgICAg
IC8vIHJlcHJlc2VudGF0aW9uLCB0aGlzIHRlbGxzIHVzIHdoYXQgcmVnaXN0ZXIgQjMgcGlja2Vk
LgorICAgICAgICBSZWdpc3RlciwKKworICAgICAgICAvLyBBcyBhbiBvdXRwdXQgcmVwcmVzZW50
YXRpb24sIHRoaXMgdGVsbHMgdXMgd2hhdCBzdGFjayBzbG90IEIzIHBpY2tlZC4gSXQncyBub3Qg
YSB2YWxpZAorICAgICAgICAvLyBpbnB1dCByZXByZXNlbnRhdGlvbi4KKyAgICAgICAgU3RhY2ss
CisKKyAgICAgICAgLy8gQXMgYW4gaW5wdXQgcmVwcmVzZW50YXRpb24sIHRoaXMgZm9yY2VzIHRo
ZSB2YWx1ZSB0byBlbmQgdXAgaW4gdGhlIGFyZ3VtZW50IGFyZWEgYXQgc29tZQorICAgICAgICAv
LyBvZmZzZXQuCisgICAgICAgIC8vIEZJWE1FOiBUaGUgU3RhY2ttYXBTcGVjaWFsIGNsYXNzIG5l
ZWRzIHRvIGFjY291bnQgZm9yIHRoZSBmYWN0IHRoYXQgdGhlc2UgZG9uJ3QgdHVybiBpbnRvCisg
ICAgICAgIC8vIEFpciBvcGVyYW5kcy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDU0MAorICAgICAgICBTdGFja0FyZ3VtZW50LAorCisgICAg
ICAgIC8vIEFzIGFuIG91dHB1dCByZXByZXNlbnRhdGlvbiwgdGhpcyB0ZWxscyB1cyB0aGF0IEIz
IGNvbnN0YW50LWZvbGRlZCB0aGUgdmFsdWUuCisgICAgICAgIENvbnN0YW50CisgICAgfTsKKyAg
ICAKKyAgICBWYWx1ZVJlcCgpCisgICAgICAgIDogbV9raW5kKEFueSkKKyAgICB7CisgICAgfQor
CisgICAgZXhwbGljaXQgVmFsdWVSZXAoUmVnIHJlZykKKyAgICAgICAgOiBtX2tpbmQoUmVnaXN0
ZXIpCisgICAgeworICAgICAgICB1LnJlZyA9IHJlZzsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFs
dWVSZXAgcmVnKFJlZyByZWcpCisgICAgeworICAgICAgICByZXR1cm4gVmFsdWVSZXAocmVnKTsK
KyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3RhY2soaW50cHRyX3Qgb2Zmc2V0RnJvbUZQ
KQorICAgIHsKKyAgICAgICAgVmFsdWVSZXAgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5k
ID0gU3RhY2s7CisgICAgICAgIHJlc3VsdC51Lm9mZnNldEZyb21GUCA9IG9mZnNldEZyb21GUDsK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgc3Rh
Y2tBcmd1bWVudChpbnRwdHJfdCBvZmZzZXRGcm9tU1ApCisgICAgeworICAgICAgICBWYWx1ZVJl
cCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBTdGFja0FyZ3VtZW50OworICAgICAg
ICByZXN1bHQudS5vZmZzZXRGcm9tU1AgPSBvZmZzZXRGcm9tU1A7CisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFZhbHVlUmVwIGNvbnN0YW50KGludDY0X3QgdmFs
dWUpCisgICAgeworICAgICAgICBWYWx1ZVJlcCByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tp
bmQgPSBDb25zdGFudDsKKyAgICAgICAgcmVzdWx0LnUudmFsdWUgPSB2YWx1ZTsKKyAgICAgICAg
cmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgVmFsdWVSZXAgY29uc3RhbnREb3Vi
bGUoZG91YmxlIHZhbHVlKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVwOjpjb25zdGFu
dChiaXR3aXNlX2Nhc3Q8aW50NjRfdD4odmFsdWUpKTsKKyAgICB9CisKKyAgICBLaW5kIGtpbmQo
KSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiBraW5kKCkgIT0gQW55OyB9CisKKyAgICBSZWcgcmVnKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gUmVnaXN0ZXIpOworICAgICAgICByZXR1
cm4gdS5yZWc7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAgICByZXR1cm4gdS5v
ZmZzZXRGcm9tRlA7CisgICAgfQorCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbVNQKCkgY29uc3QK
KyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2tBcmd1bWVudCk7CisgICAgICAg
IHJldHVybiB1Lm9mZnNldEZyb21TUDsKKyAgICB9CisKKyAgICBpbnQ2NF90IHZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQ29uc3RhbnQpOworICAgICAgICBy
ZXR1cm4gdS52YWx1ZTsKKyAgICB9CisKKyAgICBkb3VibGUgZG91YmxlVmFsdWUoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxkb3VibGU+KHZhbHVlKCkpOworICAg
IH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAg
IEtpbmQgbV9raW5kOworICAgIHVuaW9uIFUgeworICAgICAgICBSZWcgcmVnOworICAgICAgICBp
bnRwdHJfdCBvZmZzZXRGcm9tRlA7CisgICAgICAgIGludHB0cl90IG9mZnNldEZyb21TUDsKKyAg
ICAgICAgaW50NjRfdCB2YWx1ZTsKKworICAgICAgICBVKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbWVtc2V0KHRoaXMsIDAsIHNpemVvZigqdGhpcykpOworICAgICAgICB9CisgICAgfSB1Owor
fTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgeworCit2b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpWYWx1ZVJlcDo6S2luZCk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlm
IC8vIEIzVmFsdWVSZXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJh
dGVfcGF0dGVybl9tYXRjaGVyLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9nZW5lcmF0ZV9wYXR0ZXJuX21hdGNoZXIucmIJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTUwIEBACisjIS91c3IvYmluL2VudiBydWJ5CisKKyMgQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMg
SVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMK
KyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyMgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorIyBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK3JlcXVpcmUgInBhdGhuYW1lIgorCiskdmFySW5k
ZXggPSAwCitkZWYgbmV3VmFyCisgICAgJHZhckluZGV4ICs9IDEKKyAgICAiX3RtcCN7JHZhcklu
ZGV4fSIKK2VuZAorCitjbGFzcyBQcm9kdWN0aW9uCisgICAgYXR0cl9yZWFkZXIgOm9yaWdpbiwg
Om5hbWUsIDp2YXJOYW1lLCA6YW5vbnltb3VzLCA6b3Bjb2RlLCA6Y2hpbGRyZW4KKworICAgIGRl
ZiBpbml0aWFsaXplKG9yaWdpbiwgbmFtZSwgb3Bjb2RlLCBjaGlsZHJlbikKKyAgICAgICAgQG9y
aWdpbiA9IG9yaWdpbgorICAgICAgICBAbmFtZSA9IG5hbWUKKyAgICAgICAgQGFub255bW91cyA9
IChuYW1lID09IG5pbCBvciBuYW1lID1+IC9cQVwkKFswLTldKylcWi8pCisgICAgICAgIEB2YXJO
YW1lID0gQGFub255bW91cyA/IG5ld1ZhciA6IG5hbWUgPX4gL1xBXCQvID8gJCcgOiBuYW1lCisg
ICAgICAgIEBvcGNvZGUgPSBvcGNvZGUKKyAgICAgICAgQGNoaWxkcmVuID0gY2hpbGRyZW4gPyBj
aGlsZHJlbiA6IFtdCisgICAgZW5kCisKKyAgICBkZWYgaGFzT3Bjb2RlCisgICAgICAgIG9wY29k
ZSAhPSBuaWwKKyAgICBlbmQKKworICAgIGRlZiBlYWNoVmFyaWFibGUoJnByb2MpCisgICAgICAg
IGNoaWxkcmVuLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IGNoaWxkLCBpbmRleCB8
CisgICAgICAgICAgICB5aWVsZCB2YXJOYW1lLAorICAgICAgICAgICAgICAgICAgY2hpbGQubmFt
ZSwKKyAgICAgICAgICAgICAgICAgIGNoaWxkLnZhck5hbWUsCisgICAgICAgICAgICAgICAgICBj
aGlsZC5hbm9ueW1vdXMgPyAoY2hpbGQub3Bjb2RlID8gOmFub25JbnRlcm5hbCA6IDphbm9uT3Bl
cmFuZCkgOiAoY2hpbGQub3Bjb2RlID8gOmludGVybmFsIDogOm9wZXJhbmQpLAorICAgICAgICAg
ICAgICAgICAgaW5kZXgKKyAgICAgICAgICAgIGNoaWxkLmVhY2hWYXJpYWJsZSgmcHJvYykKKyAg
ICAgICAgfQorICAgIGVuZAorZW5kCisKK2NsYXNzIE1hdGNoZXIKKyAgICBhdHRyX3JlYWRlciA6
bmFtZSwgOnByb2R1Y3Rpb25zCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lLCBwcm9kdWN0aW9u
cykKKyAgICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IHByb2R1Y3Rp
b25zCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZpbGVO
YW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBsaW5l
TnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51bWJl
ciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tm
aWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgorICAg
IGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6ZShv
cmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3RyaW5n
ID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBpZiBv
dGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQKKyAg
ICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3RoZXIK
KyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3BlY3R9
IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29tbWVu
dCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJzZSBl
cnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVy
cm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2VuZAor
CitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXcoZmls
ZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxlIG5v
dCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15cbl0q
KS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4vCisg
ICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciArPSAx
CisgICAgICAgIHdoZW4gL1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopLworICAgICAgICAg
ICAgcmVzdWx0IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwg
JCYpCisgICAgICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFj
ZSwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBWz0oKSxdLworICAgICAgICAgICAgcmVzdWx0IDw8
IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHJhaXNlICJMZXhlciBlcnJvciBhdCAje09yaWdpbi5uZXcoZmls
ZU5hbWUsIGxpbmVOdW1iZXIpLnRvX3N9LCB1bmV4cGVjdGVkIHNlcXVlbmNlICN7c3RyWzAuLjIw
XS5pbnNwZWN0fSIKKyAgICAgICAgZW5kCisgICAgICAgIHN0ciA9ICR+LnBvc3RfbWF0Y2gKKyAg
ICBlbmQKKyAgICByZXN1bHQKK2VuZAorCitkZWYgaXNLZXl3b3JkKHRva2VuKQorICAgICMgV2Ug
Y2FuIGV4dGVuZCB0aGlzIGFzIHdlIGFkZCBtb3JlIGtleXdvcmRzLiBMaWtlLCB3ZSBtaWdodCB3
YW50ICJpbmNsdWRlIiBldmVudHVhbGx5LgorICAgIHRva2VuID1+IC9cQSgobWF0Y2hlcil8KGlu
Y2x1ZGUpKVxaLworZW5kCisKK2RlZiBpc0lkZW50aWZpZXIodG9rZW4pCisgICAgdG9rZW4gPX4g
L1xBW2EtekEtWjAtOSRdKFthLXpBLVowLTlfXSopXFovIGFuZCBub3QgaXNLZXl3b3JkKHRva2Vu
KQorZW5kCisKK2NsYXNzIFBhcnNlcgorICAgIGRlZiBpbml0aWFsaXplKGRhdGEsIGZpbGVOYW1l
KQorICAgICAgICBAdG9rZW5zID0gbGV4KGRhdGEsIGZpbGVOYW1lKQorICAgICAgICBAaWR4ID0g
MAorICAgIGVuZAorCisgICAgZGVmIHRva2VuCisgICAgICAgIEB0b2tlbnNbQGlkeF0KKyAgICBl
bmQKKworICAgIGRlZiBhZHZhbmNlCisgICAgICAgIEBpZHggKz0gMQorICAgIGVuZAorCisgICAg
ZGVmIHBhcnNlRXJyb3IoKmNvbW1lbnQpCisgICAgICAgIGlmIHRva2VuCisgICAgICAgICAgICB0
b2tlbi5wYXJzZUVycm9yKCpjb21tZW50KQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBj
b21tZW50LmVtcHR5PworICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQg
b2YgZmlsZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYWlzZSAiUGFyc2Ug
ZXJyb3IgYXQgZW5kIG9mIGZpbGU6ICN7Y29tbWVudFswXX0iCisgICAgICAgICAgICBlbmQKKyAg
ICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZShzdHJpbmcpCisgICAgICAgIHBh
cnNlRXJyb3IoIkV4cGVjdGVkICN7c3RyaW5nfSIpIHVubGVzcyB0b2tlbiA9PSBzdHJpbmcKKyAg
ICAgICAgYWR2YW5jZQorICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVJZGVudGlmaWVyCisgICAg
ICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBp
ZGVudGlmaWVyIikgdW5sZXNzIGlzSWRlbnRpZmllcihyZXN1bHQpCisgICAgICAgIGFkdmFuY2UK
KyAgICAgICAgcmVzdWx0CisgICAgZW5kCisKKyAgICBkZWYgYWRkVW5pcXVlKG5hbWUsIHByb2R1
Y3Rpb25zLCBwcm9kdWN0aW9uKQorICAgICAgICBpZiBuYW1lID09IHByb2R1Y3Rpb24udmFyTmFt
ZQorICAgICAgICAgICAgcGFyc2VFcnJvcigiQ2hpbGQgcHJvZHVjdGlvbiBoYXMgc2FtZSBuYW1l
IGFzIHBhcmVudCBwcm9kdWN0aW9uIikKKyAgICAgICAgZW5kCisgICAgICAgIGlmIHByb2R1Y3Rp
b25zLmRldGVjdCB7IHwgZW50cnkgfCBlbnRyeS5uYW1lID09IHByb2R1Y3Rpb24ubmFtZSB9Cisg
ICAgICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgIGVu
ZAorICAgICAgICBwcm9kdWN0aW9ucyA8PCBwcm9kdWN0aW9uCisgICAgZW5kCisKKyAgICBkZWYg
cGFyc2UKKyAgICAgICAgY29uc3VtZSgibWF0Y2hlciIpCisKKyAgICAgICAgbWF0Y2hlck5hbWUg
PSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgIHByb2R1Y3Rpb25zID0gW10KKworICAgICAg
ICBsb29wIHsKKyAgICAgICAgICAgIGJyZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKwor
ICAgICAgICAgICAgIyBXZSBtaWdodCB3YW50IHRvIHN1cHBvcnQgImluY2x1ZGUiLiBJZiB3ZSBk
aWQgdGhhdCwgaXQgd291bGQgZ28gaGVyZS4KKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwYXJz
ZVByb2R1Y3Rpb24KKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnMuZGV0
ZWN0IHsgfCBlbnRyeSB8IGVudHJ5Lm5hbWUgPT0gcHJvZHVjdGlvbi5uYW1lIH0KKyAgICAgICAg
ICAgICAgICBwYXJzZUVycm9yKCJEdXBsaWNhdGUgcHJvZHVjdGlvbiIpCisgICAgICAgICAgICBl
bmQKKworICAgICAgICAgICAgcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbgorICAgICAgICB9CisK
KyAgICAgICAgTWF0Y2hlci5uZXcobWF0Y2hlck5hbWUsIHByb2R1Y3Rpb25zKQorICAgIGVuZAor
CisgICAgZGVmIHBhcnNlUHJvZHVjdGlvbgorICAgICAgICBvcmlnaW4gPSB0b2tlbi5vcmlnaW4K
KyAgICAgICAgbmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgaWYgdG9rZW4gPT0g
Ij0iCisgICAgICAgICAgICBjb25zdW1lKCI9IikKKyAgICAgICAgICAgIG9wY29kZSA9IGNvbnN1
bWVJZGVudGlmaWVyCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgZWxzaWYgdG9r
ZW4gPT0gIigiCisgICAgICAgICAgICBjb25zdW1lKCIoIikKKyAgICAgICAgICAgIG9wY29kZSA9
IG5hbWUKKyAgICAgICAgICAgIG5hbWUgPSBuaWwKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cmV0dXJuIFByb2R1Y3Rpb24ubmV3KG9yaWdpbiwgbmFtZSwgbmlsLCBuaWwpCisgICAgICAgIGVu
ZAorICAgICAgICAKKyAgICAgICAgcHJvZHVjdGlvbnMgPSBbXQorICAgICAgICBsb29wIHsKKyAg
ICAgICAgICAgIGJyZWFrIGlmIHRva2VuID09ICIpIgorCisgICAgICAgICAgICBhZGRVbmlxdWUo
bmFtZSwgcHJvZHVjdGlvbnMsIHBhcnNlUHJvZHVjdGlvbikKKworICAgICAgICAgICAgYnJlYWsg
aWYgdG9rZW4gPT0gIikiCisgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgfQorCisg
ICAgICAgICMgQWR2YW5jZSBhZnRlciB0aGUgIikiCisgICAgICAgIGFkdmFuY2UKKworICAgICAg
ICBQcm9kdWN0aW9uLm5ldyhvcmlnaW4sIG5hbWUsIG9wY29kZSwgcHJvZHVjdGlvbnMpCisgICAg
ZW5kCitlbmQKKworZmlsZU5hbWUgPSBBUkdWWzBdCisKK3BhcnNlciA9IFBhcnNlci5uZXcoSU86
OnJlYWQoZmlsZU5hbWUpLCBmaWxlTmFtZSkKK21hdGNoZXIgPSBwYXJzZXIucGFyc2UKKworY2xh
c3MgU3ViTWF0Y2gKKyAgICBhdHRyX3JlYWRlciA6aW5kZXhNYXAsIDpwcm9kdWN0aW9ucworICAg
IAorICAgIGRlZiBpbml0aWFsaXplKGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgIEBp
bmRleE1hcCA9IFtdCisgICAgICAgIEBwcm9kdWN0aW9ucyA9IFtdCisgICAgICAgIGluZGV4TGlz
dC5lYWNoIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgQGluZGV4TWFwIDw8
IGluZGV4CisgICAgICAgICAgICBAcHJvZHVjdGlvbnMgPDwgcHJvZHVjdGlvbnNbaW5kZXhdCisg
ICAgICAgIH0KKyAgICBlbmQKKworICAgIGRlZiBtYXBJbmRleExpc3QoaW5kZXhMaXN0KQorICAg
ICAgICBpbmRleExpc3QubWFwIHsKKyAgICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAg
QGluZGV4TWFwW2luZGV4XQorICAgICAgICB9CisgICAgZW5kCitlbmQKKworJHN0ZGVyci5wdXRz
ICJHZW5lcmF0aW5nIGNvZGUgZm9yICN7ZmlsZU5hbWV9LiIKKworRmlsZS5vcGVuKCJCMyIgKyBt
YXRjaGVyLm5hbWUgKyAiLmgiLCAidyIpIHsKKyAgICB8IG91dHAgfAorCisgICAgb3V0cC5wdXRz
ICIvLyBHZW5lcmF0ZWQgYnkgZ2VuZXJhdGVfcGF0dGVybl9tYXRjaGVyLnJiIGZyb20gI3tmaWxl
TmFtZX0gLS0gZG8gbm90IGVkaXQhIgorCisgICAgb3V0cC5wdXRzICIjaWZuZGVmIEIzI3ttYXRj
aGVyLm5hbWV9X2giCisgICAgb3V0cC5wdXRzICIjZGVmaW5lIEIzI3ttYXRjaGVyLm5hbWV9X2gi
CisgICAgCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBcIkIzVmFsdWUuaFwiIgorICAgIAorICAg
IG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IgorCisgICAgb3V0cC5w
dXRzICJ0ZW1wbGF0ZTx0eXBlbmFtZSBBZGFwdG9yPiIKKyAgICBvdXRwLnB1dHMgImJvb2wgcnVu
I3ttYXRjaGVyLm5hbWV9KFZhbHVlKiBfdmFsdWUsIEFkYXB0b3ImIGFkYXB0b3IpIgorICAgIG91
dHAucHV0cyAieyIKKworICAgICMgTm90ZSB0aGF0IHRoaXMgZG9lcyBub3QgZW1pdCBwcm9wZXJs
eSBpbmRlbnRlZCBjb2RlLCBiZWNhdXNlIGl0J3MgYSByZWN1cnNpdmUgZW1pdHRlci4gSWYgeW91
CisgICAgIyB3YW50IHRvIHNlZSB0aGUgY29kZSBuaWNlbHkgZm9ybWF0dGVkLCBvcGVuIGl0IGlu
IGEgZ29vZCB0ZXh0IGVkaXRvciBhbmQgYXNrIGl0IHRvIGZvcm1hdCBpdAorICAgICMgZm9yIHlv
dS4KKworICAgICMgSW4gb2RkIHNpdHVhdGlvbnMsIHdlIG1heSBub3QgdXNlIHRoZSBpbnB1dCB2
YWx1ZS4gVGVsbCB0aGUgY29tcGlsZXIgdG8gY2hpbGwgb3V0IGFib3V0IGl0LgorICAgIG91dHAu
cHV0cyAiVU5VU0VEX1BBUkFNKF92YWx1ZSk7IgorICAgICAgICAKKyAgICAjIFRoaXMganVzdCBw
cm90ZWN0cyB0aGUgY2FsbGVyIGZyb20gaGF2aW5nIHRvIHdvcnJ5IGFib3V0IHByb2R1Y3Rpb25z
IGhhdmluZyBkaWZmZXJlbnQgbGVuZ3Rocy4KKyAgICBkZWYgbWF0Y2hMZW5ndGgob3V0cCwgdmFs
dWVOYW1lLCBwcm9kdWN0aW9ucykKKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHBy
b2R1Y3Rpb25zLmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGlu
ZGV4IHwKKyAgICAgICAgICAgIGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRl
eExpc3RzWy0xXVswXV0uY2hpbGRyZW4ubGVuZ3RoID09IHByb2R1Y3Rpb24uY2hpbGRyZW4ubGVu
Z3RoCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExpc3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAg
IGVuZAorICAgICAgICB9CisKKyAgICAgICAgaW5kZXhMaXN0cy5lYWNoIHsKKyAgICAgICAgICAg
IHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgIGxlbmd0aCA9IHByb2R1Y3Rpb25zW2luZGV4TGlz
dFswXV0uY2hpbGRyZW4ubGVuZ3RoCisgICAgICAgICAgICBpZiBsZW5ndGggPiAwCisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJpZiAoI3t2YWx1ZU5hbWV9LT5jaGlsZHJlbigpLnNpemUoKSA+
PSAje2xlbmd0aH0pIHsiCisgICAgICAgICAgICAgICAgeWllbGQgaW5kZXhMaXN0CisgICAgICAg
ICAgICAgICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IHlpZWxkIGluZGV4TGlzdAorICAgICAgICAgICAgZW5kCisgICAgICAgIH0KKyAgICBlbmQKKwor
ICAgICMgVGhpcyBlZmZpY2llbnRseSBzZWxlY3RzIGZyb20gdGhlIGdpdmVuIHNldCBvZiBwcm9k
dWN0aW9ucy4gSXQgYXNzdW1lcyB0aGF0IHByb2R1Y3Rpb25zCisgICAgIyBhcmUgbm90IGR1cGxp
Y2F0ZWQuIEl0IHlpZWxkcyB0aGUgaW5kZXggb2YgdGhlIGZvdW5kIHByb2R1Y3Rpb24sIGFuZCB0
aGUgY29yb3V0aW5lIGlzCisgICAgIyByZXNwb25zaWJsZSBmb3IgZW1pdHRpbmcgc3BlY2lmaWMg
Y29kZSBmb3IgdGhhdCBwcm9kdWN0aW9uLiBUaGUgY29yb3V0aW5lIGlzIGdpdmVuIGxpc3RzIG9m
CisgICAgIyBpbmRpY2VzIG9mIHBvc3NpYmx5LW1hdGNoaW5nIHByb2R1Y3Rpb25zLgorICAgIGRl
ZiBtYXRjaFByb2R1Y3Rpb25zKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpCisgICAgICAg
ICMgRmlyc3QsIHNwbGl0IHRoZSBwcm9kdWN0aW9ucyBsaXN0IGludG8gcnVucyBvZiBwcm9kdWN0
aW9ucyB3aXRoIGFuIG9wY29kZSBhbmQgcHJvZHVjdGlvbnMKKyAgICAgICAgIyB3aXRob3V0IG9u
ZS4KKyAgICAgICAgaW5kZXhMaXN0cyA9IFtdCisgICAgICAgIHByb2R1Y3Rpb25zLmVhY2hfd2l0
aF9pbmRleCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24sIGluZGV4IHwKKyAgICAgICAgICAg
IGlmIGluZGV4TGlzdHNbLTFdIGFuZCBwcm9kdWN0aW9uc1tpbmRleExpc3RzWy0xXVswXV0uaGFz
T3Bjb2RlID09IHByb2R1Y3Rpb24uaGFzT3Bjb2RlCisgICAgICAgICAgICAgICAgaW5kZXhMaXN0
c1stMV0gPDwgaW5kZXgKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpbmRleExp
c3RzIDw8IFtpbmRleF0KKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisgICAgICAgIAorICAg
ICAgICAjIE5vdywgZW1pdCBwYXR0ZXJuIG1hdGNoaW5nIGNvZGUuIFdlIGRvIGl0IGRpZmZlcmVu
dGx5IGZvciBsaXN0cyB3aXRoIGFuIG9wY29kZSB0aGFuIGZvcgorICAgICAgICAjIGxpc3RzIHdp
dGhvdXQgb25lLgorICAgICAgICBpbmRleExpc3RzLmVhY2ggeworICAgICAgICAgICAgfCBpbmRl
eExpc3QgfAorICAgICAgICAgICAgaWYgcHJvZHVjdGlvbnNbaW5kZXhMaXN0WzBdXS5oYXNPcGNv
ZGUKKyAgICAgICAgICAgICAgICAjIE5vdywgd2Ugc3BsaXQgdGhpcyBpbmRleCBsaXN0IGludG8g
Z3JvdXBzIGZvciBlYWNoIG9wY29kZS4KKyAgICAgICAgICAgICAgICBncm91cHMgPSB7fQorICAg
ICAgICAgICAgICAgIGluZGV4TGlzdC5lYWNoIHsKKyAgICAgICAgICAgICAgICAgICAgfCBpbmRl
eCB8CisgICAgICAgICAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBwcm9kdWN0aW9uc1tpbmRleF0K
KyAgICAgICAgICAgICAgICAgICAgaWYgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXQorICAgICAg
ICAgICAgICAgICAgICAgICAgZ3JvdXBzW3Byb2R1Y3Rpb24ub3Bjb2RlXSA8PCBpbmRleAorICAg
ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cHNbcHJv
ZHVjdGlvbi5vcGNvZGVdID0gW2luZGV4XQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAjIEVtaXQgYSBzd2l0Y2ggc3RhdGVtZW50
LgorICAgICAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNoICgje3ZhbHVlTmFtZX0tPm9wY29k
ZSgpKSB7IgorICAgICAgICAgICAgICAgIGdyb3Vwcy5lYWNoX3BhaXIgeworICAgICAgICAgICAg
ICAgICAgICB8IG9wY29kZSwgc3ViSW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAgICAgb3V0
cC5wdXRzICJjYXNlICN7b3Bjb2RlfToiCisgICAgICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0g
U3ViTWF0Y2gubmV3KHN1YkluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAg
ICAgIG1hdGNoTGVuZ3RoKG91dHAsIHZhbHVlTmFtZSwgc3ViTWF0Y2gucHJvZHVjdGlvbnMpIHsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJ9IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0
Y2gubmV3KGluZGV4TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICAgICAgbWF0Y2hMZW5n
dGgob3V0cCwgdmFsdWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucykgeworICAgICAgICAgICAg
ICAgICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNo
Lm1hcEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ZW5kCisgICAgICAgIH0KKyAgICBlbmQKKworICAgICMgVGFrZXMgcHJvZHVjdGlvbnMgdGhhdCBo
YXZlIHRoZSBzYW1lIG9wY29kZSBhbmQgdGhlIHNhbWUgbGVuZ3RoIGFuZCBzZWxlY3RzIGZyb20g
dGhlbSBiYXNlZCBvbgorICAgICMgdGhlIHByb2R1Y3Rpb25zIGF0IHRoZSBnaXZlbiBjb2x1bW4u
CisgICAgZGVmIG1hdGNoQ29sdW1uKG91dHAsIHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMsIGNvbHVt
bkluZGV4KQorICAgICAgICBpZiBjb2x1bW5JbmRleCA+PSBwcm9kdWN0aW9uc1swXS5jaGlsZHJl
bi5sZW5ndGgKKyAgICAgICAgICAgIHlpZWxkICgwLi4uKHByb2R1Y3Rpb25zLnNpemUpKS50b19h
CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgZW5kCisKKyAgICAgICAgc3ViVmFsdWUgPSBu
ZXdWYXIKKyAgICAgICAgCisgICAgICAgIG91dHAucHV0cyAieyIKKyAgICAgICAgb3V0cC5wdXRz
ICJWYWx1ZSogI3tzdWJWYWx1ZX0gPSAje3ZhbHVlTmFtZX0tPmNoaWxkKCN7Y29sdW1uSW5kZXh9
KTsiCisKKyAgICAgICAgIyBXZSBtYXkgbm90IHVzZSB0aGlzIHZhbHVlLiBUZWxsIHRoZSBjb21w
aWxlciB0byBjaGlsbCBvdXQgYWJvdXQgaXQuCisgICAgICAgIG91dHAucHV0cyAiVU5VU0VEX1BB
UkFNKCN7c3ViVmFsdWV9KTsiCisgICAgICAgIAorICAgICAgICBzdWJQcm9kdWN0aW9ucyA9IHBy
b2R1Y3Rpb25zLm1hcCB7CisgICAgICAgICAgICB8IHByb2R1Y3Rpb24gfAorICAgICAgICAgICAg
cHJvZHVjdGlvbi5jaGlsZHJlbltjb2x1bW5JbmRleF0KKyAgICAgICAgfQorCisgICAgICAgIG1h
dGNoUmVjdXJzaXZlbHkob3V0cCwgc3ViVmFsdWUsIHN1YlByb2R1Y3Rpb25zKSB7CisgICAgICAg
ICAgICB8IGluZGV4TGlzdCB8CisgICAgICAgICAgICBzdWJNYXRjaCA9IFN1Yk1hdGNoLm5ldyhp
bmRleExpc3QsIHByb2R1Y3Rpb25zKQorICAgICAgICAgICAgbWF0Y2hDb2x1bW4ob3V0cCwgdmFs
dWVOYW1lLCBzdWJNYXRjaC5wcm9kdWN0aW9ucywgY29sdW1uSW5kZXggKyAxKSB7CisgICAgICAg
ICAgICAgICAgfCBpbmRleExpc3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1h
cEluZGV4TGlzdChpbmRleExpc3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICBvdXRwLnB1dHMgIn0iCisgICAgZW5kCisKKyAgICBkZWYgbWF0Y2hSZWN1cnNpdmVseShvdXRw
LCB2YWx1ZU5hbWUsIHByb2R1Y3Rpb25zKQorICAgICAgICBtYXRjaFByb2R1Y3Rpb25zKG91dHAs
IHZhbHVlTmFtZSwgcHJvZHVjdGlvbnMpIHsKKyAgICAgICAgICAgIHwgaW5kZXhMaXN0IHwKKyAg
ICAgICAgICAgICMgV2UgYXJlIGd1YXJhbnRlZWQgdGhhdCB0aGlzIGluZGV4IGxpc3QgY29udGFp
bnMgcHJvZHVjdGlvbnMgd2l0aCB0aGUgc2FtZSBvcGNvZGUgYW5kCisgICAgICAgICAgICAjIHRo
ZSBzYW1lIGxlbmd0aC4KKyAgICAgICAgICAgIHN1Yk1hdGNoID0gU3ViTWF0Y2gubmV3KGluZGV4
TGlzdCwgcHJvZHVjdGlvbnMpCisgICAgICAgICAgICBtYXRjaENvbHVtbihvdXRwLCB2YWx1ZU5h
bWUsIHN1Yk1hdGNoLnByb2R1Y3Rpb25zLCAwKSB7CisgICAgICAgICAgICAgICAgfCBpbmRleExp
c3QgfAorICAgICAgICAgICAgICAgIHlpZWxkIHN1Yk1hdGNoLm1hcEluZGV4TGlzdChpbmRleExp
c3QpCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICBlbmQKKworICAgIG1hdGNoUmVjdXJz
aXZlbHkob3V0cCwgIl92YWx1ZSIsIG1hdGNoZXIucHJvZHVjdGlvbnMpIHsKKyAgICAgICAgfCBp
bmRleExpc3QgfAorICAgICAgICBpbmRleExpc3QuZWFjaCB7CisgICAgICAgICAgICB8IGluZGV4
IHwKKyAgICAgICAgICAgIHByb2R1Y3Rpb24gPSBtYXRjaGVyLnByb2R1Y3Rpb25zW2luZGV4XQor
ICAgICAgICAgICAgb3V0cC5wdXRzICJ7IgorICAgICAgICAgICAgb3V0cC5wdXRzICJWYWx1ZSog
I3twcm9kdWN0aW9uLnZhck5hbWV9ID0gX3ZhbHVlOyIKKyAgICAgICAgICAgIG91dHAucHV0cyAi
VU5VU0VEX1BBUkFNKCN7cHJvZHVjdGlvbi52YXJOYW1lfSk7IgorICAgICAgICAgICAgaW50ZXJu
YWxBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgb3BlcmFuZEFyZ3VtZW50cyA9IFtdCisgICAg
ICAgICAgICB0cnlBcmd1bWVudHMgPSBbXQorICAgICAgICAgICAgbnVtU2NvcGVzID0gMAorICAg
ICAgICAgICAgc2VlbiA9IHt9CisKKyAgICAgICAgICAgICMgRklYTUU6IFdlIHdhbnQgdG8gYmUg
YWJsZSB0byBjb21iaW5lIHBhdHRlcm4gbWF0Y2hlcnMsIGxpa2UgaGF2ZSB0aGUgcGF0dGVybiBt
YXRjaCBydWxlCisgICAgICAgICAgICAjIGZvciBCcmFuY2ggaW4gdGhlIGxvd2VyaW5nIHBhdGNo
ZXIgZGVsZWdhdGUgdG8gYSBtYXRjaGVyIHRoYXQgY2FuIGRlZHVjZSB0aGUga2luZCBvZgorICAg
ICAgICAgICAgIyBjb21wYXJpc29uIHRoYXQgd2UncmUgZG9pbmcuIFdlIGNvdWxkIHRoZW4gcmV1
c2UgdGhhdCBsYXR0ZXIgbWF0Y2hlciBmb3IgQ2hlY2sgYW5kCisgICAgICAgICAgICAjIHVuZnVz
ZWQgY29tcGFyZS4gVGhlIGtleSB0byBtYWtpbmcgc3VjaCBhIGRlbGVnYXRpb24gd29yayBpcyB0
byBoYXZlIHRoZSBpbm5lciBtYXRjaGVyCisgICAgICAgICAgICAjICh0aGUgY29tcGFyaXNvbiBt
YXRjaGVyIGluIHRoaXMgY2FzZSkga2VlcCBjYXNjYWRpbmcgaWYgaXQgZW5jb3VudGVycyBhIHJ1
bGUgdGhhdAorICAgICAgICAgICAgIyBwcm9kdWNlcyBzb21ldGhpbmcgdGhhdCB0aGUgb3V0ZXIg
bWF0Y2hlciBjYW5ub3QgaGFuZGxlLiBJdCdzIG5vdCBvYnZpb3VzIHRoYXQgdGhlCisgICAgICAg
ICAgICAjIGNvbXBhcmlzb24gbWF0Y2hlciB3b3VsZCBuZWVkIHRoaXMsIGJ1dCB0aGUgYWRkcmVz
cyBtYXRjaGVyIHByb2JhYmx5IHdpbGwuIEZvciBleGFtcGxlLAorICAgICAgICAgICAgIyB3ZSBt
YXkgaGF2ZSBhIFN0b3JlQWRkTG9hZCBydWxlIHRoYXQgZGVsZWdhdGVzIHRvIHRoZSBhZGRyZXNz
IG1hdGNoZXIsIGFuZCB0aGUgYWRkcmVzcworICAgICAgICAgICAgIyBtYXRjaGVyIG1heSBwcm9k
dWNlIGFuIGFkZHJlc3MgdGhhdCB0aGUgbG93ZXJpbmcgbWF0Y2hlciBjYW5ub3QgdXNlIGJlY2F1
c2Ugd2hpbGUgdGhlCisgICAgICAgICAgICAjIEFkZCBmb3JtIGRvZXMgYWNjZXB0IGFkZHJlc3Nl
cyBpdCBtYXkgbm90IGFjY2VwdCB0aGUgcGFydGljdWxhciBhZGRyZXNzIHRoYXQgdGhlCisgICAg
ICAgICAgICAjIGFkZHJlc3MgbWF0Y2hlciBwcm9kdWNlZC4gSW4gdGhhdCBjYXNlLCBpbnN0ZWFk
IG9mIGdpdmluZyB1cCBvbiB0aGUgU3RvcmVBZGRMb2FkIHJ1bGUsCisgICAgICAgICAgICAjIHdl
IHdhbnQgdGhlIGFkZHJlc3MgbWF0Y2hlciB0byBqdXN0IHRyeSBhIGRpZmZlcmVudCBhZGRyZXNz
LiBUaGUgY29tcGFyaXNvbiBtYXRjaGVyCisgICAgICAgICAgICAjIG1pZ2h0IHdhbnQgdGhpcyBq
dXN0IGZvciBiZXR0ZXIgY29udHJvbGxpbmcgd2hlbiB0byBwaW4gdmFyaWFibGVzLiBDdXJyZW50
bHksIGlmIGl0CisgICAgICAgICAgICAjIGNvbnN0cnVjdGVkIHNvbWUgY29kZSwgaXQgd291bGQg
YWxzbyBwaW4gdGhlIHZhcmlhYmxlcyB0aGF0IGl0IHVzZWQuIElmIHRoZSBsb3dlcmluZworICAg
ICAgICAgICAgIyBtYXRjaGVyIHRoZW4gZGVjaWRlZCB0byByZWplY3QgdGhlIGNvZGUgY3JlYXRl
ZCBieSB0aGUgY29tcGFyaXNvbiBtYXRjaGVyLCBpdCB3b3VsZAorICAgICAgICAgICAgIyBoYXZl
IGEgaGFyZCB0aW1lICJ1bnBpbm5pbmciIHRob3NlIHZhcmlhYmxlcy4gQnV0IGlmIHdlIGhhZCBz
b21lIGtpbmQgb2YgZGVsZWdhdGlvbiwgd2UKKyAgICAgICAgICAgICMgY291bGQgaGF2ZSB0aGUg
cGlubmluZyBvZiB0aGUgY29tcGFyaXNvbiBtYXRjaGVyIGhhcHBlbiBvbmx5IGlmIHRoZSBsb3dl
cmluZyBtYXRjaGVyCisgICAgICAgICAgICAjIGFjY2VwdGVkLgorICAgICAgICAgICAgIworICAg
ICAgICAgICAgIyBUaGlzIGNvdWxkIGFsbCBiZSBhY2NvbXBsaXNoZWQgYnkgaGF2aW5nIHRyeUJs
YWgoKSByZXR1cm4gc29tZXRoaW5nLCBhbmQgaGF2ZSB0aGUKKyAgICAgICAgICAgICMgbWF0Y2hl
ciBhbHNvIHRha2UgYSBmdW5jdG9yIGFyZ3VtZW50IHRoYXQgYWNjZXB0cyB3aGF0IHRyeUJsYWgo
KSByZXR1cm5zLiBTbyBpbnN0ZWFkIG9mCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGlm
ICh0cnlCbGFoKCkpIG9rOworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBXZSB3b3VsZCBo
YXZlOgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBpZiAoZnVuY3Rvcih0cnlCbGFoKCkp
IG9rOworICAgICAgICAgICAgIworICAgICAgICAgICAgIyBXaGVuIGxvd2VyaW5nIGRlY2lkZWQg
dG8gZGVsZWdhdGUgdG8gdGhlIGFkZHJlc3Mgb3IgY29tcGFyaXNvbiBtYXRjaGVyLCBpdCBjb3Vs
ZCBzdXBwbHkKKyAgICAgICAgICAgICMgYSBmdW5jdG9yIHRoYXQgZGVjaWRlcyB3aGV0aGVyIHRo
ZSB0aGluZyB0aGF0IHRoZSBzdWItbWF0Y2hlciBzZWxlY3RlZCBpcyBpbmRlZWQKKyAgICAgICAg
ICAgICMgdXNlZnVsLgorICAgICAgICAgICAgIworICAgICAgICAgICAgIyBJbiB0aGUgbmVhciB0
ZXJtLCB3ZSBwcm9iYWJseSB3b24ndCBuZWVkIHRoaXMuIEJ1dCB3ZSB3aWxsIGRlZmluaXRlbHkg
bmVlZCBpdCBhcyB3ZQorICAgICAgICAgICAgIyBleHBhbmQgdG8gZWZmaWNpZW50bHkgc3VwcG9y
dCBtb3JlIHBsYXRmb3Jtcy4gT24gWDg2XzY0LCBhbnkgYnJhbmNoaW5nIGluc3RydWN0aW9uIGlz
CisgICAgICAgICAgICAjIHVzYWJsZSBpbiBhbnkgY29udGV4dCwgYW5kIGFueSBhZGRyZXNzIHNo
b3VsZCBiZSB1c2FibGUgaW4gYW55IGNvbnRleHQgKGFuZCB0aGUgb25seQorICAgICAgICAgICAg
IyBjYXNlcyB3aGVyZSBpdCB3b3VsZG4ndCBiZSBpcyBpZiB3ZSBoYXZlIGhvbGVzIGluIHRoZSBN
YWNyb0Fzc2VtYmxlcikuCisgICAgICAgICAgICAjCisgICAgICAgICAgICAjIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1NTkKKyAgICAgICAgICAgIAorICAgICAg
ICAgICAgcHJvZHVjdGlvbi5lYWNoVmFyaWFibGUgeworICAgICAgICAgICAgICAgIHwgcGFyZW50
VmFyTmFtZSwgY2hpbGROYW1lLCBjaGlsZFZhck5hbWUsIGtpbmQsIGluZGV4IHwKKyAgICAgICAg
ICAgICAgICBsb2FkRXhwciA9ICIje3BhcmVudFZhck5hbWV9LT5jaGlsZCgje2luZGV4fSkiCisg
ICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgc2VlbltjaGlsZFZhck5hbWVdCisg
ICAgICAgICAgICAgICAgICAgIHRtcCA9IG5ld1ZhcgorICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgIlZhbHVlKiAje3RtcH0gPSAje2xvYWRFeHByfTsiCisgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKCN7dG1wfSA9PSAje2NoaWxkVmFyTmFtZX0pIHsiCisgICAgICAgICAg
ICAgICAgICAgIG51bVNjb3BlcyArPSAxCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICBzZWVuW2NoaWxkVmFyTmFtZV0gPSB0cnVlCisgICAgICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIlZhbHVlKiAje2NoaWxkVmFyTmFtZX0g
PSAje2xvYWRFeHByfTsiCisKKyAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTogQ29uc2lkZXIg
Z2V0dGluZyByaWQgb2YgdGhlICQgcHJlZml4LgorICAgICAgICAgICAgICAgICAgICAjIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1MjcKKyAgICAgICAgICAgICAg
ICAgICAgaWYgY2hpbGROYW1lID1+IC9cQVwkLworICAgICAgICAgICAgICAgICAgICAgICAgaWYg
Y2hpbGROYW1lID1+IC9cQVwkKFswLTldKylcWi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmlzSW50KCN7JDF9KSkgeyIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRw
LnB1dHMgImlmICgje2NoaWxkVmFyTmFtZX0tPmhhc0ludCgpKSB7IgorICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICBudW1TY29wZXMgKz0gMQorICAg
ICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIGludGVybmFsQXJndW1lbnRzIDw8IGNoaWxkVmFyTmFtZSBpZiBraW5kID09IDppbnRl
cm5hbCBvciBraW5kID09IDphbm9uSW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgb3BlcmFu
ZEFyZ3VtZW50cyA8PCBjaGlsZFZhck5hbWUgaWYga2luZCA9PSA6b3BlcmFuZCBvciBraW5kID09
IDphbm9uT3BlcmFuZAorICAgICAgICAgICAgICAgICAgICB0cnlBcmd1bWVudHMgPDwgY2hpbGRW
YXJOYW1lIGlmIGtpbmQgPT0gOmludGVybmFsIG9yIGtpbmQgPT0gOm9wZXJhbmQKKyAgICAgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKGFk
YXB0b3IuYWNjZXB0Um9vdChfdmFsdWUpIgorICAgICAgICAgICAgdW5sZXNzIGludGVybmFsQXJn
dW1lbnRzLmVtcHR5PworICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2Nl
cHRJbnRlcm5hbHMoIiArIGludGVybmFsQXJndW1lbnRzLmpvaW4oIiwgIikgKyAiKSIpCisgICAg
ICAgICAgICBlbmQKKyAgICAgICAgICAgIHVubGVzcyBvcGVyYW5kQXJndW1lbnRzLmVtcHR5Pwor
ICAgICAgICAgICAgICAgIG91dHAucHV0cygiJiYgYWRhcHRvci5hY2NlcHRPcGVyYW5kcygiICsg
b3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIikiKQorICAgICAgICAgICAgZW5kCisgICAg
ICAgICAgICBvdXRwLnB1dHMoIiYmIGFkYXB0b3IudHJ5I3twcm9kdWN0aW9uLm5hbWV9KCIgKyB0
cnlBcmd1bWVudHMuam9pbigiLCAiKSArICIpKSB7IikKKyAgICAgICAgICAgIG91dHAucHV0cyAi
YWRhcHRvci5hY2NlcHRSb290TGF0ZShfdmFsdWUpOyIKKyAgICAgICAgICAgIHVubGVzcyBpbnRl
cm5hbEFyZ3VtZW50cy5lbXB0eT8KKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImFkYXB0b3Iu
YWNjZXB0SW50ZXJuYWxzTGF0ZSgiICsgaW50ZXJuYWxBcmd1bWVudHMuam9pbigiLCAiKSArICIp
OyIKKyAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgdW5sZXNzIG9wZXJhbmRBcmd1bWVudHMu
ZW1wdHk/CisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJhZGFwdG9yLmFjY2VwdE9wZXJhbmRz
TGF0ZSgiICsgb3BlcmFuZEFyZ3VtZW50cy5qb2luKCIsICIpICsgIik7IgorICAgICAgICAgICAg
ZW5kCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiB0cnVlOyIKKyAgICAgICAgICAgIG91
dHAucHV0cyAifSIKKyAgICAgICAgICAgIG51bVNjb3Blcy50aW1lcyB7CisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJ9IgorICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0cC5wdXRzICJ9
IgorICAgICAgICB9CisgICAgfQorICAgIAorICAgIG91dHAucHV0cyAiICAgIHJldHVybiBmYWxz
ZTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAgIG91dHAucHV0cyAifSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzIgorCisgICAgb3V0cC5wdXRzICIjZW5kaWYgLy8gQjMje21hdGNoZXIubmFt
ZX1faCIKK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCShyZXZpc2lvbiAw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwzNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQjNBcmd1bWVudFJlZ1Zh
bHVlLmgiCisjaW5jbHVkZSAiQjNCYXNpY0Jsb2NrSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzQ29u
c3QzMlZhbHVlLmgiCisjaW5jbHVkZSAiQjNDb25zdFB0clZhbHVlLmgiCisjaW5jbHVkZSAiQjND
b250cm9sVmFsdWUuaCIKKyNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCisjaW5jbHVkZSAiQjNNZW1v
cnlWYWx1ZS5oIgorI2luY2x1ZGUgIkIzUHJvY2VkdXJlLmgiCisjaW5jbHVkZSAiQjNWYWx1ZUlu
bGluZXMuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKyNpbmNsdWRlICJJbml0aWFsaXpl
VGhyZWFkaW5nLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIkxpbmtCdWZm
ZXIuaCIKKyNpbmNsdWRlICJWTS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwordXNpbmcgbmFt
ZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCituYW1lc3BhY2UgeworCisv
LyBOb3RoaW5nIGZhbmN5IGZvciBub3c7IHdlIGp1c3QgdXNlIHRoZSBleGlzdGluZyBXVEYgYXNz
ZXJ0aW9uIG1hY2hpbmVyeS4KKyNkZWZpbmUgQ0hFQ0soeCkgUkVMRUFTRV9BU1NFUlQoeCkKKwor
Vk0qIHZtOworCit0ZW1wbGF0ZTx0eXBlbmFtZSBULCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CitU
IGNvbXBpbGVBbmRSdW4oUHJvY2VkdXJlJiBwcm9jZWR1cmUsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCit7CisgICAgQ0NhbGxIZWxwZXJzIGppdCh2bSk7CisgICAgZ2VuZXJhdGUocHJvY2VkdXJl
LCBqaXQpOworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcigqdm0sIGppdCwgbnVsbHB0cik7Cisg
ICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGNvZGUgPSBGSU5BTElaRV9DT0RFKGxpbmtCdWZmZXIs
ICgidGVzdGIzIikpOworICAgIFQgKCpmdW5jdGlvbikoQXJndW1lbnRzLi4uKSA9IGJpdHdpc2Vf
Y2FzdDxUKCopKEFyZ3VtZW50cy4uLik+KGNvZGUuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkp
OworICAgIHJldHVybiBmdW5jdGlvbihhcmd1bWVudHMuLi4pOworfQorCit2b2lkIHRlc3Q0Migp
Cit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRk
QmxvY2soKTsKKyAgICBWYWx1ZSogY29uc3Q0MiA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFs
dWU+KHByb2MsIE9yaWdpbigpLCA0Mik7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1
ZT4ocHJvYywgUmV0dXJuLCBPcmlnaW4oKSwgY29uc3Q0Mik7CisKKyAgICBDSEVDSyhjb21waWxl
QW5kUnVuPGludD4ocHJvYykgPT0gNDIpOworfQorCit2b2lkIHRlc3RMb2FkNDIoKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgaW50IHggPSA0MjsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAg
ICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwg
JngpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykgPT0gNDIpOworfQor
Cit2b2lkIHRlc3RBcmcoaW50IGFyZ3VtZW50KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAg
IEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVudFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5m
bzo6YXJndW1lbnRHUFIwKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywg
YXJndW1lbnQpID09IGFyZ3VtZW50KTsKK30KKwordm9pZCB0ZXN0QWRkQXJncyhpbnQgYSwgaW50
IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50
R1BSMCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJv
YywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMSkpKTsKKworICAgIENIRUNLKGNvbXBp
bGVBbmRSdW48aW50Pihwcm9jLCBhLCBiKSA9PSBhICsgYik7Cit9CisKK3ZvaWQgdGVzdEFkZEFy
Z3MzMihpbnQgYSwgaW50IGIpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZh
bHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBw
ZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5j
LCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdW
YWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICBwcm9jLCBUcnVuYywg
T3JpZ2luKCksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFs
dWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1bWVudEdQUjEpKSkpOworCisgICAgQ0hF
Q0soY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MsIGEsIGIpID09IGEgKyBiKTsKK30KKwordm9pZCB0
ZXN0U3RvcmUoaW50IHZhbHVlKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxv
Y2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHNsb3QgPSAweGJhYWRiZWVmOwor
ICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgIHByb2MsIFN0b3JlLCBP
cmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHBy
b2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxBcmd1bWVu
dFJlZ1ZhbHVlPihwcm9jLCBPcmlnaW4oKSwgR1BSSW5mbzo6YXJndW1lbnRHUFIwKSksCisgICAg
ICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgJnNsb3Qp
KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0
dXJuLCBPcmlnaW4oKSwgcm9vdC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIDApKTsKKworICAgIENIRUNLKCFjb21waWxlQW5kUnVuPGludD4ocHJvYywgdmFsdWUpKTsK
KyAgICBDSEVDSyhzbG90ID09IHZhbHVlKTsKK30KKwordm9pZCB0ZXN0VHJ1bmMoaW50NjRfdCB2
YWx1ZSkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+
KAorICAgICAgICAgICAgcHJvYywgVHJ1bmMsIE9yaWdpbigpLAorICAgICAgICAgICAgcm9vdC0+
YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZvOjphcmd1
bWVudEdQUjApKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywgdmFsdWUp
ID09IHN0YXRpY19jYXN0PGludD4odmFsdWUpKTsKK30KKwordm9pZCB0ZXN0QWRkMShpbnQgdmFs
dWUpCit7CisgICAgUHJvY2VkdXJlIHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2Mu
YWRkQmxvY2soKTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAg
cHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigK
KyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBl
bmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIDEpKSk7CisKKyAgICBDSEVDSyhjb21w
aWxlQW5kUnVuPGludD4ocHJvYywgdmFsdWUpID09IHZhbHVlICsgMSk7Cit9CisKK3ZvaWQgdGVz
dFN0b3JlQWRkTG9hZChpbnQgYW1vdW50KQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHNsb3QgPSAzNzsKKyAg
ICBDb25zdFB0clZhbHVlKiBzbG90UHRyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+
KHByb2MsIE9yaWdpbigpLCAmc2xvdCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PigKKyAgICAgICAgcHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmRO
ZXc8VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
IHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigp
LCBzbG90UHRyKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHBy
b2MsIE9yaWdpbigpLCBhbW91bnQpKSwKKyAgICAgICAgc2xvdFB0cik7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMyVmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7
CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxpbnQ+KHByb2MpKTsKKyAgICBDSEVDSyhzbG90
ID09IDM3ICsgYW1vdW50KTsKK30KKwordm9pZCB0ZXN0U3RvcmVBZGRBbmRMb2FkKGludCBhbW91
bnQsIGludCBtYXNrKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJv
b3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IHNsb3QgPSAzNzsKKyAgICBDb25zdFB0clZh
bHVlKiBzbG90UHRyID0gcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdp
bigpLCAmc2xvdCk7CisgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKKyAgICAgICAg
cHJvYywgU3RvcmUsIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgcHJvYywgQml0QW5kLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAg
ICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIElu
dDMyLCBPcmlnaW4oKSwgc2xvdFB0ciksCisgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIGFtb3VudCkpLAorICAgICAgICAgICAgcm9v
dC0+YXBwZW5kTmV3PENvbnN0MzJWYWx1ZT4ocHJvYywgT3JpZ2luKCksIG1hc2spKSwKKyAgICAg
ICAgc2xvdFB0cik7CisgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAg
IHByb2MsIFJldHVybiwgT3JpZ2luKCksCisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxDb25zdDMy
VmFsdWU+KHByb2MsIE9yaWdpbigpLCAwKSk7CisKKyAgICBDSEVDSyghY29tcGlsZUFuZFJ1bjxp
bnQ+KHByb2MpKTsKKyAgICBDSEVDSyhzbG90ID09ICgoMzcgKyBhbW91bnQpICYgbWFzaykpOwor
fQorCit2b2lkIHRlc3RBZGQxVW5jb21tdXRlZChpbnQgdmFsdWUpCit7CisgICAgUHJvY2VkdXJl
IHByb2M7CisgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKKyAgICByb290
LT5hcHBlbmROZXc8Q29udHJvbFZhbHVlPigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4o
KSwKKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFk
ZCwgT3JpZ2luKCksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3QzMlZhbHVlPihw
cm9jLCBPcmlnaW4oKSwgMSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIFRydW5jLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICBy
b290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86
OmFyZ3VtZW50R1BSMCkpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywg
dmFsdWUpID09IHZhbHVlICsgMSk7Cit9CisKK3ZvaWQgdGVzdExvYWRPZmZzZXQoKQoreworICAg
IFByb2NlZHVyZSBwcm9jOworICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7
CisgICAgaW50IGFycmF5W10gPSB7IDEsIDIgfTsKKyAgICBDb25zdFB0clZhbHVlKiBhcnJheVB0
ciA9IHJvb3QtPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgYXJyYXkp
OworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAorICAgICAgICBwcm9jLCBSZXR1
cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAg
ICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBhcnJheVB0ciwgMCksCisgICAg
ICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KHByb2MsIExvYWQsIEludDMyLCBP
cmlnaW4oKSwgYXJyYXlQdHIsIHNpemVvZihpbnQpKSkpOworCisgICAgQ0hFQ0soY29tcGlsZUFu
ZFJ1bjxpbnQ+KHByb2MpID09IGFycmF5WzBdICsgYXJyYXlbMV0pOworfQorCit2b2lkIHRlc3RM
b2FkT2Zmc2V0Tm90Q29uc3RhbnQoKQoreworICAgIFByb2NlZHVyZSBwcm9jOworICAgIEJhc2lj
QmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CisgICAgaW50IGFycmF5W10gPSB7IDEsIDIg
fTsKKyAgICBWYWx1ZSogYXJyYXlQdHIgPSByb290LT5hcHBlbmROZXc8QXJndW1lbnRSZWdWYWx1
ZT4ocHJvYywgT3JpZ2luKCksIEdQUkluZm86OmFyZ3VtZW50R1BSMCk7CisgICAgcm9vdC0+YXBw
ZW5kTmV3PENvbnRyb2xWYWx1ZT4oCisgICAgICAgIHByb2MsIFJldHVybiwgT3JpZ2luKCksCisg
ICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4oCisgICAgICAgICAgICBwcm9jLCBBZGQsIE9y
aWdpbigpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihwcm9jLCBM
b2FkLCBJbnQzMiwgT3JpZ2luKCksIGFycmF5UHRyLCAwKSwKKyAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4ocHJvYywgTG9hZCwgSW50MzIsIE9yaWdpbigpLCBhcnJheVB0
ciwgc2l6ZW9mKGludCkpKSk7CisKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYywg
JmFycmF5WzBdKSA9PSBhcnJheVswXSArIGFycmF5WzFdKTsKK30KKwordm9pZCB0ZXN0TG9hZE9m
ZnNldFVzaW5nQWRkKCkKK3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiBy
b290ID0gcHJvYy5hZGRCbG9jaygpOworICAgIGludCBhcnJheVtdID0geyAxLCAyIH07CisgICAg
Q29uc3RQdHJWYWx1ZSogYXJyYXlQdHIgPSByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIGFycmF5KTsKKyAgICByb290LT5hcHBlbmROZXc8Q29udHJvbFZhbHVl
PigKKyAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKKyAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PFZhbHVlPigKKyAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksCisgICAgICAgICAg
ICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAorICAgICAgICAgICAgICAgIHByb2MsIExv
YWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8VmFs
dWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBBZGQsIE9yaWdpbigpLCBhcnJheVB0ciwK
KyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KHByb2Ms
IE9yaWdpbigpLCAwKSkpLAorICAgICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVl
PigKKyAgICAgICAgICAgICAgICBwcm9jLCBMb2FkLCBJbnQzMiwgT3JpZ2luKCksCisgICAgICAg
ICAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgcHJv
YywgQWRkLCBPcmlnaW4oKSwgYXJyYXlQdHIsCisgICAgICAgICAgICAgICAgICAgIHJvb3QtPmFw
cGVuZE5ldzxDb25zdFB0clZhbHVlPihwcm9jLCBPcmlnaW4oKSwgc2l6ZW9mKGludCkpKSkpKTsK
KyAgICAKKyAgICBDSEVDSyhjb21waWxlQW5kUnVuPGludD4ocHJvYykgPT0gYXJyYXlbMF0gKyBh
cnJheVsxXSk7Cit9CisKK3ZvaWQgdGVzdExvYWRPZmZzZXRVc2luZ0FkZE5vdENvbnN0YW50KCkK
K3sKKyAgICBQcm9jZWR1cmUgcHJvYzsKKyAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRC
bG9jaygpOworICAgIGludCBhcnJheVtdID0geyAxLCAyIH07CisgICAgVmFsdWUqIGFycmF5UHRy
ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJ
bmZvOjphcmd1bWVudEdQUjApOworICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAor
ICAgICAgICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAorICAgICAgICByb290LT5hcHBlbmROZXc8
VmFsdWU+KAorICAgICAgICAgICAgcHJvYywgQWRkLCBPcmlnaW4oKSwKKyAgICAgICAgICAgIHJv
b3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCisgICAgICAgICAgICAgICAgcHJvYywgTG9hZCwg
SW50MzIsIE9yaWdpbigpLAorICAgICAgICAgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxWYWx1ZT4o
CisgICAgICAgICAgICAgICAgICAgIHByb2MsIEFkZCwgT3JpZ2luKCksIGFycmF5UHRyLAorICAg
ICAgICAgICAgICAgICAgICByb290LT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4ocHJvYywgT3Jp
Z2luKCksIDApKSksCisgICAgICAgICAgICByb290LT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KAor
ICAgICAgICAgICAgICAgIHByb2MsIExvYWQsIEludDMyLCBPcmlnaW4oKSwKKyAgICAgICAgICAg
ICAgICByb290LT5hcHBlbmROZXc8VmFsdWU+KAorICAgICAgICAgICAgICAgICAgICBwcm9jLCBB
ZGQsIE9yaWdpbigpLCBhcnJheVB0ciwKKyAgICAgICAgICAgICAgICAgICAgcm9vdC0+YXBwZW5k
TmV3PENvbnN0UHRyVmFsdWU+KHByb2MsIE9yaWdpbigpLCBzaXplb2YoaW50KSkpKSkpOworICAg
IAorICAgIENIRUNLKGNvbXBpbGVBbmRSdW48aW50Pihwcm9jLCAmYXJyYXlbMF0pID09IGFycmF5
WzBdICsgYXJyYXlbMV0pOworfQorCisjZGVmaW5lIFJVTih0ZXN0KSBkbyB7ICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCisgICAgICAgIGRhdGFMb2coI3Rlc3QgIjpcbiIpOyAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIHRlc3Q7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBcCisgICAgICAgIGRhdGFMb2coIiAgICBPSyFcbiIpOyAgICAgICAgICAgICAgICAgICBcCisg
ICAgfSB3aGlsZSAoZmFsc2UpOworCit2b2lkIHJ1bigpCit7CisgICAgSlNDOjppbml0aWFsaXpl
VGhyZWFkaW5nKCk7CisgICAgdm0gPSAmVk06OmNyZWF0ZShMYXJnZUhlYXApLmxlYWtSZWYoKTsK
KworICAgIFJVTih0ZXN0NDIoKSk7CisgICAgUlVOKHRlc3RMb2FkNDIoKSk7CisgICAgUlVOKHRl
c3RBcmcoNDMpKTsKKyAgICBSVU4odGVzdEFkZEFyZ3MoMSwgMSkpOworICAgIFJVTih0ZXN0QWRk
QXJncygxLCAyKSk7CisgICAgUlVOKHRlc3RBZGRBcmdzMzIoMSwgMSkpOworICAgIFJVTih0ZXN0
QWRkQXJnczMyKDEsIDIpKTsKKyAgICBSVU4odGVzdFN0b3JlKDQ0KSk7CisgICAgUlVOKHRlc3RU
cnVuYygoc3RhdGljX2Nhc3Q8aW50NjRfdD4oMSkgPDwgNDApICsgNDIpKTsKKyAgICBSVU4odGVz
dEFkZDEoNDUpKTsKKyAgICBSVU4odGVzdFN0b3JlQWRkTG9hZCg0NikpOworICAgIFJVTih0ZXN0
U3RvcmVBZGRBbmRMb2FkKDQ3LCAweGZmZmYpKTsKKyAgICBSVU4odGVzdFN0b3JlQWRkQW5kTG9h
ZCg0NzAwMDAsIDB4ZmZmZikpOworICAgIFJVTih0ZXN0QWRkMVVuY29tbXV0ZWQoNDgpKTsKKyAg
ICBSVU4odGVzdExvYWRPZmZzZXQoKSk7CisgICAgUlVOKHRlc3RMb2FkT2Zmc2V0Tm90Q29uc3Rh
bnQoKSk7CisgICAgUlVOKHRlc3RMb2FkT2Zmc2V0VXNpbmdBZGQoKSk7CisgICAgUlVOKHRlc3RM
b2FkT2Zmc2V0VXNpbmdBZGROb3RDb25zdGFudCgpKTsKK30KKworfSAvLyBhbm9ueW1vdXMgbmFt
ZXNwYWNlCisKKyNlbHNlIC8vIEVOQUJMRShCM19KSVQpCisKK3N0YXRpYyB2b2lkIHJ1bigpCit7
CisgICAgZGF0YUxvZygiQjMgSklUIGlzIG5vdCBlbmFibGVkLlxuIik7Cit9CisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7Cisg
ICAgVU5VU0VEX1BBUkFNKGFyZ2MpOworICAgIFVOVVNFRF9QQVJBTShhcmd2KTsKKyAgICAKKyAg
ICBydW4oKTsKKyAgICByZXR1cm4gMDsKK30KKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDI3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVT
dGFjay5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNp
bmNsdWRlICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpckxpdmVuZXNzLmgiCisjaW5j
bHVkZSAiQWlyUGhhc2VTY29wZS5oIgorI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCisjaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBu
YW1lc3BhY2UgQWlyIHsKKworbmFtZXNwYWNlIHsKKworY29uc3QgYm9vbCB2ZXJib3NlID0gZmFs
c2U7CisKK2Jvb2wgYXJndW1lbnRJc09uU3RhY2soY29uc3QgQXJnJiBhcmcpCit7CisgICAgcmV0
dXJuIGFyZy5pc1N0YWNrKCkgJiYgYXJnLnN0YWNrU2xvdCgpLT5raW5kKCkgPT0gU3RhY2tTbG90
S2luZDo6QW5vbnltb3VzOworfQorCitib29sIGF0dGVtcHRBc3NpZ25tZW50KAorICAgIFN0YWNr
U2xvdCogc2xvdCwgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQLCBjb25zdCBWZWN0b3I8U3RhY2tTbG90
Kj4mIG90aGVyU2xvdHMpCit7CisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2coIkF0
dGVtcHRpbmcgdG8gYXNzaWduICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiIHRvICIsIG9mZnNldEZy
b21GUCwgIiB3aXRoIGludGVyZmVyZW5jZSAiLCBwb2ludGVyTGlzdER1bXAob3RoZXJTbG90cyks
ICJcbiIpOworCisgICAgLy8gTmVlZCB0byBhbGlnbiBpdCB0byB0aGUgc2xvdCdzIGRlc2lyZWQg
YWxpZ25tZW50LgorICAgIG9mZnNldEZyb21GUCA9IC1XVEY6OnJvdW5kVXBUb011bHRpcGxlT2Yo
c2xvdC0+YWxpZ25tZW50KCksIC1vZmZzZXRGcm9tRlApOworICAgIAorICAgIGZvciAoU3RhY2tT
bG90KiBvdGhlclNsb3QgOiBvdGhlclNsb3RzKSB7CisgICAgICAgIGlmICghb3RoZXJTbG90LT5v
ZmZzZXRGcm9tRlAoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBib29sIG92ZXJs
YXAgPSBXVEY6OnJhbmdlc092ZXJsYXAoCisgICAgICAgICAgICBvZmZzZXRGcm9tRlAsCisgICAg
ICAgICAgICBvZmZzZXRGcm9tRlAgKyBzdGF0aWNfY2FzdDxpbnRwdHJfdD4oc2xvdC0+Ynl0ZVNp
emUoKSksCisgICAgICAgICAgICBvdGhlclNsb3QtPm9mZnNldEZyb21GUCgpLAorICAgICAgICAg
ICAgb3RoZXJTbG90LT5vZmZzZXRGcm9tRlAoKSArIHN0YXRpY19jYXN0PGludHB0cl90PihvdGhl
clNsb3QtPmJ5dGVTaXplKCkpKTsKKyAgICAgICAgaWYgKG92ZXJsYXApCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKHZlcmJvc2UpCisgICAgICAgIGRhdGFMb2co
IkFzc2lnbmVkICIsIHBvaW50ZXJEdW1wKHNsb3QpLCAiIHRvICIsIG9mZnNldEZyb21GUCwgIlxu
Iik7CisgICAgc2xvdC0+c2V0T2Zmc2V0RnJvbUZQKG9mZnNldEZyb21GUCk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgYXNzaWduKFN0YWNrU2xvdCogc2xvdCwgY29uc3QgVmVjdG9yPFN0
YWNrU2xvdCo+JiBvdGhlclNsb3RzKQoreworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRh
TG9nKCJBdHRlbXB0aW5nIHRvIGFzc2lnbiAiLCBwb2ludGVyRHVtcChzbG90KSwgIiB3aXRoIGlu
dGVyZmVyZW5jZSAiLCBwb2ludGVyTGlzdER1bXAob3RoZXJTbG90cyksICJcbiIpOworICAgIAor
ICAgIGlmIChhdHRlbXB0QXNzaWdubWVudChzbG90LCAtc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNs
b3QtPmJ5dGVTaXplKCkpLCBvdGhlclNsb3RzKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZm9y
IChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IG90aGVyU2xvdHMpIHsKKyAgICAgICAgaWYgKCFvdGhl
clNsb3QtPm9mZnNldEZyb21GUCgpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGJv
b2wgZGlkQXNzaWduID0gYXR0ZW1wdEFzc2lnbm1lbnQoCisgICAgICAgICAgICBzbG90LCBvdGhl
clNsb3QtPm9mZnNldEZyb21GUCgpIC0gc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHNsb3QtPmJ5dGVT
aXplKCkpLCBvdGhlclNsb3RzKTsKKyAgICAgICAgaWYgKGRpZEFzc2lnbikKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQor
Cit9IC8vIGFub255bW91cyBuYW1lc3BhY2UKKwordm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNv
ZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrIik7
CisKKyAgICAvLyBBbGxvY2F0ZSBhbGwgb2YgdGhlIGxvY2tlZCBzbG90cyBpbiBvcmRlci4gVGhp
cyBpcyBraW5kIG9mIGEgY3JhenkgYWxnb3JpdGhtIHRvIGFsbG93IGZvcgorICAgIC8vIHRoZSBw
b3NzaWJpbGl0eSBvZiBzdGFjayBzbG90cyBiZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJl
Zm9yZSB3ZSBldmVuIGdldCBoZXJlLgorICAgIEFTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7Cisg
ICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90czsKKyAgICBWZWN0
b3I8U3RhY2tTbG90Kj4gbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0OworICAgIGZvciAoU3RhY2tT
bG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKKyAgICAgICAgc3dpdGNoIChzbG90LT5r
aW5kKCkpIHsKKyAgICAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgICAg
ICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpCisgICAgICAgICAgICAgICAgYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3QuYXBwZW5kKHNsb3QpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICAg
ICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKSB7CisgICAgICAgICAgICAgICAgLy8gQXMgYSBt
YXR0ZXIgb2Ygc2FuaXR5LCB1bmFzc2lnbiB0aGlzLiBNYXliZSBpdCB3b3VsZCBiZSBnb29kIHRv
IGV2ZW4gaGF2ZSBhCisgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGlvbiBydWxlIHRoYXQgdGhp
cyBjYW5ub3QgaGFwcGVuLgorICAgICAgICAgICAgICAgIHNsb3QtPnNldE9mZnNldEZyb21GUCgw
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQor
ICAgIC8vIFRoaXMgaXMgYSBmYWlybHkgZXhwZW5zaXZlIGxvb3AsIGJ1dCBpdCdzIE9LIGJlY2F1
c2Ugd2UnbGwgdXN1YWxseSBvbmx5IGhhdmUgYSBoYW5kZnVsIG9mCisgICAgLy8gbG9ja2VkIHN0
YWNrIHNsb3RzLgorICAgIHdoaWxlICghbG9ja2VkU3RhY2tTbG90c1dvcmtsaXN0LmlzRW1wdHko
KSkgeworICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBsb2NrZWRTdGFja1Nsb3RzV29ya2xpc3Qu
dGFrZUxhc3QoKTsKKyAgICAgICAgYXNzaWduKHNsb3QsIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90
cyk7CisgICAgICAgIGFzc2lnbmVkTG9ja2VkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CisgICAg
fQorCisgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgYW5vbnltb3VzIHNsb3RzLiBOb3RlIHRoYXQg
dGhlb3JldGljYWxseSB3ZSBzaG91bGQgZG8gYW4gZXNjYXBlIGFuYWx5c2lzCisgICAgLy8gaGVy
ZS4gQnV0LCBjdXJyZW50bHkgQWlyIGRvZXNuJ3Qgc3VwcG9ydCBlc2NhcGluZyBhIFN0YWNrU2xv
dCEKKyAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGVzY2FwaW5nIGEgU3RhY2tTbG90IGFu
ZCBhZGQgZXNjYXBlIGFuYWx5c2lzIHRvIGFsbG9jYXRlU3RhY2soKS4KKyAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDMwCisKKyAgICBMaXZlbmVzczxB
cmc+IGxpdmVuZXNzKGNvZGUpOworICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFj
a1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CisgICAgVmVj
dG9yPFN0YWNrU2xvdCo+IHNsb3RzOworCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNv
ZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8QXJnPjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVz
cywgYmxvY2spOworCisgICAgICAgIGF1dG8gaW50ZXJmZXJlID0gWyZdIChJbnN0JiBpbnN0KSB7
CisgICAgICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJJbnRl
cmZlcmluZzogIiwgbGlzdER1bXAobG9jYWxDYWxjLmxpdmUoKSksICJcbiIpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICAvLyBGb3JtIGEgY2xpcXVlIG9mIHN0YWNrIHNsb3RzIHRoYXQgaW50
ZXJmZXJlLiBGaXJzdCBmaW5kIHRoZSBsaXN0IG9mIHN0YWNrIHNsb3RzCisgICAgICAgICAgICAv
LyB0aGF0IGFyZSBsaXZlIHJpZ2h0IG5vdy4KKyAgICAgICAgICAgIHNsb3RzLnJlc2l6ZSgwKTsK
KyAgICAgICAgICAgIGZvciAoQXJnIGFyZyA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXJndW1lbnRJc09uU3RhY2soYXJnKSkKKyAgICAgICAgICAgICAgICAgICAg
c2xvdHMuYXBwZW5kKGFyZy5zdGFja1Nsb3QoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIC8vIFdlIG11c3RuJ3QgbWFuZGF0ZSB0aGF0IHRoZSBpbnB1dCBjb2RlIGlzIG9wdGltYWwu
IFRoZXJlZm9yZSwgaXQgbWF5IGhhdmUgZGVhZCBzdG9yZXMKKyAgICAgICAgICAgIC8vIHRvIHRo
ZSBzdGFjay4gV2UgbmVlZCB0byB0cmVhdCB0aGVzZSBhcyBpbnRlcmZlcmluZy4KKyAgICAgICAg
ICAgIGluc3QuZm9yRWFjaEFyZygKKyAgICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6
OlJvbGUgcm9sZSwgQXJnOjpUeXBlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6Omlz
RGVmKHJvbGUpICYmIGFyZ3VtZW50SXNPblN0YWNrKGFyZykKKyAgICAgICAgICAgICAgICAgICAg
ICAgICYmICFsb2NhbENhbGMubGl2ZSgpLmNvbnRhaW5zKGFyZykpCisgICAgICAgICAgICAgICAg
ICAgICAgICBzbG90cy5hcHBlbmQoYXJnLnN0YWNrU2xvdCgpKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICAg
ICAgZGF0YUxvZygiICAgIFNsb3RzOiAiLCBwb2ludGVyTGlzdER1bXAoc2xvdHMpLCAiXG4iKTsK
KyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzbG90cy5zaXplKCk7ICsraSkg
eworICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogb3V0ZXIgPSBzbG90c1tpXTsKKyAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSBpICsgMTsgaiA8IHNsb3RzLnNpemUoKTsgKytqKSB7
CisgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogaW5uZXIgPSBzbG90c1tqXTsKKworICAg
ICAgICAgICAgICAgICAgICBpbnRlcmZlcmVuY2VbaW5uZXJdLmFkZChvdXRlcik7CisgICAgICAg
ICAgICAgICAgICAgIGludGVyZmVyZW5jZVtvdXRlcl0uYWRkKGlubmVyKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH07CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpbnN0SW5kZXggPSBibG9jay0+c2l6ZSgpOyBpbnN0SW5kZXgtLTspIHsKKyAgICAgICAgICAg
IGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkFuYWx5emluZzogIiwgYmxv
Y2stPmF0KGluc3RJbmRleCksICJcbiIpOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgaW50ZXJmZXJlKGluc3QpOworICAgICAgICAg
ICAgbG9jYWxDYWxjLmV4ZWN1dGUoaW5zdCk7CisgICAgICAgIH0KKyAgICAgICAgSW5zdCBub3A7
CisgICAgICAgIGludGVyZmVyZShub3ApOworICAgIH0KKworICAgIGlmICh2ZXJib3NlKSB7Cisg
ICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAg
ICAgICBkYXRhTG9nKCJJbnRlcmZlcmVuY2Ugb2YgIiwgcG9pbnRlckR1bXAoc2xvdCksICI6ICIs
IHBvaW50ZXJMaXN0RHVtcChpbnRlcmZlcmVuY2Vbc2xvdF0pLCAiXG4iKTsKKyAgICB9CisKKyAg
ICAvLyBOb3cgd2UgYXNzaWduIHN0YWNrIGxvY2F0aW9ucy4gQXQgaXRzIGhlYXJ0IHRoaXMgYWxn
b3JpdGhtIGlzIGp1c3QgZmlyc3QtZml0LiBGb3IgZWFjaAorICAgIC8vIFN0YWNrU2xvdCB3ZSBq
dXN0IHdhbnQgdG8gZmluZCB0aGUgb2Zmc2V0RnJvbUZQIHRoYXQgaXMgY2xvc2VzdCB0byB6ZXJv
IHdoaWxlIGVuc3VyaW5nIG5vCisgICAgLy8gb3ZlcmxhcCB3aXRoIG90aGVyIFN0YWNrU2xvdHMg
dGhhdCB0aGlzIG92ZXJsYXBzIHdpdGguCisgICAgVmVjdG9yPFN0YWNrU2xvdCo+IG90aGVyU2xv
dHMgPSBhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHM7CisgICAgZm9yIChTdGFja1Nsb3QqIHNsb3Qg
OiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkp
IHsKKyAgICAgICAgICAgIC8vIEFscmVhZHkgYXNzaWduZWQgYW4gb2Zmc2V0LgorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+JiBp
bnRlcmZlcmluZ1Nsb3RzID0gaW50ZXJmZXJlbmNlW3Nsb3RdOworICAgICAgICBvdGhlclNsb3Rz
LnJlc2l6ZShhc3NpZ25lZExvY2tlZFN0YWNrU2xvdHMuc2l6ZSgpKTsKKyAgICAgICAgb3RoZXJT
bG90cy5yZXNpemUoYXNzaWduZWRMb2NrZWRTdGFja1Nsb3RzLnNpemUoKSArIGludGVyZmVyaW5n
U2xvdHMuc2l6ZSgpKTsKKyAgICAgICAgdW5zaWduZWQgbmV4dEluZGV4ID0gYXNzaWduZWRMb2Nr
ZWRTdGFja1Nsb3RzLnNpemUoKTsKKyAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6
IGludGVyZmVyaW5nU2xvdHMpCisgICAgICAgICAgICBvdGhlclNsb3RzW25leHRJbmRleCsrXSA9
IG90aGVyU2xvdDsKKworICAgICAgICBhc3NpZ24oc2xvdCwgb3RoZXJTbG90cyk7CisgICAgfQor
CisgICAgLy8gRmlndXJlIG91dCBob3cgbXVjaCBzdGFjayB3ZSdyZSB1c2luZyBmb3Igc3RhY2sg
c2xvdHMuCisgICAgdW5zaWduZWQgZnJhbWVTaXplRm9yU3RhY2tTbG90cyA9IDA7CisgICAgZm9y
IChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgeworICAgICAgICBmcmFtZVNp
emVGb3JTdGFja1Nsb3RzID0gc3RkOjptYXgoCisgICAgICAgICAgICBmcmFtZVNpemVGb3JTdGFj
a1Nsb3RzLAorICAgICAgICAgICAgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KC1zbG90LT5vZmZzZXRG
cm9tRlAoKSkpOworICAgIH0KKworICAgIGZyYW1lU2l6ZUZvclN0YWNrU2xvdHMgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCBmcmFtZVNpemVGb3JTdGFj
a1Nsb3RzKTsKKworICAgIC8vIE5vdyB3ZSBuZWVkIHRvIGRlZHVjZSBob3cgbXVjaCBhcmd1bWVu
dCBhcmVhIHdlIG5lZWQuCisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAg
ICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7CisgICAgICAgICAgICBmb3IgKEFyZyYg
YXJnIDogaW5zdC5hcmdzKSB7CisgICAgICAgICAgICAgICAgaWYgKGFyZy5pc0NhbGxBcmcoKSkg
eworICAgICAgICAgICAgICAgICAgICAvLyBGb3Igbm93LCB3ZSBhc3N1bWUgdGhhdCB3ZSB1c2Ug
OCBieXRlcyBvZiB0aGUgY2FsbCBhcmcuIEJ1dCB0aGF0J3Mgbm90CisgICAgICAgICAgICAgICAg
ICAgIC8vIHN1Y2ggYW4gYXdlc29tZSBhc3N1bXB0aW9uLgorICAgICAgICAgICAgICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1NAor
ICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYXJnLm9mZnNldCgpID49IDApOworICAgICAgICAg
ICAgICAgICAgICBjb2RlLnJlcXVlc3RDYWxsQXJnQXJlYVNpemUoYXJnLm9mZnNldCgpICsgOCk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgY29kZS5zZXRGcmFtZVNpemUoZnJhbWVTaXplRm9yU3RhY2tTbG90cyArIGNvZGUuY2FsbEFy
Z0FyZWFTaXplKCkpOworCisgICAgLy8gRmluYWxseSwgdHJhbnNmb3JtIHRoZSBjb2RlIHRvIHVz
ZSBBZGRyJ3MgaW5zdGVhZCBvZiBTdGFja1Nsb3Qncy4gVGhpcyBpcyBhIGxvc3NsZXNzCisgICAg
Ly8gdHJhbnNmb3JtYXRpb24gc2luY2Ugd2UgY2FuIHNlYXJjaCB0aGUgU3RhY2tTbG90cyBhcnJh
eSB0byBmaWd1cmUgb3V0IHdoaWNoIFN0YWNrU2xvdCBhbnkKKyAgICAvLyBvZmZzZXQtZnJvbS1G
UCByZWZlcnMgdG8uCisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAg
ICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2spIHsKKyAgICAgICAgICAgIGZvciAoQXJnJiBh
cmcgOiBpbnN0LmFyZ3MpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFyZy5raW5kKCkpIHsK
KyAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6CisgICAgICAgICAgICAgICAgICAgIGFy
ZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcChHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0KCkgKyBh
cmcuc3RhY2tTbG90KCktPm9mZnNldEZyb21GUCgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgY2FzZSBBcmc6OkNhbGxBcmc6CisgICAgICAgICAgICAgICAg
ICAgIGFyZyA9IEFyZzo6YWRkcigKKyAgICAgICAgICAgICAgICAgICAgICAgIFRtcChHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciksCisgICAgICAgICAgICAgICAgICAgICAgICBhcmcub2Zmc2V0
KCkgLSBjb2RlLmZyYW1lU2l6ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit9IH0gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
ay5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxv
Y2F0ZVN0YWNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEFpckFsbG9jYXRlU3Rh
Y2tfaAorI2RlZmluZSBBaXJBbGxvY2F0ZVN0YWNrX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3Mg
Q29kZTsKKworLy8gVGhpcyBhbGxvY2F0ZXMgU3RhY2tTbG90cyB0byBwbGFjZXMgb24gdGhlIHN0
YWNrLiBJdCBmaXJzdCBhbGxvY2F0ZXMgdGhlIHBpbm5lZCBvbmVzIGluIGluZGV4CisvLyBvcmRl
ciBhbmQgdGhlbiBpdCBhbGxvY2F0ZXMgdGhlIHJlc3QgdXNpbmcgZmlyc3QgZml0LgorCit2b2lk
IGFsbG9jYXRlU3RhY2soQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWly
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQWxsb2NhdGVTdGFj
a19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHJldmlz
aW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFyZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyQXJnLmgi
CisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1
ZGUgIkFpclN0YWNrU2xvdC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFt
ZXNwYWNlIEFpciB7CisKK3ZvaWQgQXJnOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7
CisgICAgc3dpdGNoIChtX2tpbmQpIHsKKyAgICBjYXNlIEludmFsaWQ6CisgICAgICAgIG91dC5w
cmludCgiPGludmFsaWQ+Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFRtcDoKKyAgICAg
ICAgb3V0LnByaW50KHRtcCgpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSW1tOgorICAg
ICAgICBvdXQucHJpbnQoIiQiLCBtX29mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IEltbTY0OgorICAgICAgICBvdXQucHJpbnRmKCIkMHglbGx4IiwgbV9vZmZzZXQpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBBZGRyOgorICAgICAgICBpZiAob2Zmc2V0KCkpCisgICAgICAg
ICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJpbnQoIigiLCBiYXNlKCks
ICIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEluZGV4OgorICAgICAgICBpZiAob2Zm
c2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJp
bnQoIigiLCBiYXNlKCksICIsIiwgaW5kZXgoKSk7CisgICAgICAgIGlmIChzY2FsZSgpICE9IDEp
CisgICAgICAgICAgICBvdXQucHJpbnQoIiwiLCBzY2FsZSgpKTsKKyAgICAgICAgb3V0LnByaW50
KCIpIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrOgorICAgICAgICBpZiAob2Zm
c2V0KCkpCisgICAgICAgICAgICBvdXQucHJpbnQob2Zmc2V0KCkpOworICAgICAgICBvdXQucHJp
bnQoIigiLCBwb2ludGVyRHVtcChzdGFja1Nsb3QoKSksICIpIik7CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIENhbGxBcmc6CisgICAgICAgIGlmIChvZmZzZXQoKSkKKyAgICAgICAgICAgIG91
dC5wcmludChvZmZzZXQoKSk7CisgICAgICAgIG91dC5wcmludCgiKGNhbGxBcmcpIik7CisgICAg
ICAgIHJldHVybjsKKyAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIG91dC5wcmludChhc1JlbGF0
aW9uYWxDb25kaXRpb24oKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFJlc0NvbmQ6Cisg
ICAgICAgIG91dC5wcmludChhc1Jlc3VsdENvbmRpdGlvbigpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIGNhc2UgU3BlY2lhbDoKKyAgICAgICAgb3V0LnByaW50KHBvaW50ZXJEdW1wKHNwZWNpYWwo
KSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
QXJnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBcmcu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQXJnLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJBcmdfaAorI2RlZmluZSBBaXJBcmdf
aAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclRtcC5oIgorI2luY2x1ZGUg
IkIzQ29tbW9uLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgU3BlY2lhbDsKK2NsYXNzIFN0YWNr
U2xvdDsKKworLy8gVGhpcyBjbGFzcyBuYW1lIGlzIGFsc28gaW50ZW50aW9uYWxseSB0ZXJzZSBi
ZWNhdXNlIHdlIHdpbGwgc2F5IGl0IGEgbG90LiBZb3UnbGwgc2VlIGNvZGUgbGlrZQorLy8gSW5z
dCguLi4sIEFyZzo6aW1tKDUpLCBBcmc6OmFkZHIodGhpbmcsIGJsYWgpLCAuLi4pCitjbGFzcyBB
cmcgeworcHVibGljOgorICAgIC8vIFRoZXNlIGVudW0gbWVtYmVycyBhcmUgaW50ZW50aW9uYWxs
eSB0ZXJzZSBiZWNhdXNlIHdlIGhhdmUgdG8gbWVudGlvbiB0aGVtIGEgbG90LgorICAgIGVudW0g
S2luZCA6IGludDhfdCB7CisgICAgICAgIEludmFsaWQsCisgICAgICAgIFRtcCwKKyAgICAgICAg
SW1tLAorICAgICAgICBJbW02NCwKKyAgICAgICAgQWRkciwKKyAgICAgICAgU3RhY2ssCisgICAg
ICAgIENhbGxBcmcsCisgICAgICAgIEluZGV4LAorICAgICAgICBSZWxDb25kLAorICAgICAgICBS
ZXNDb25kLAorICAgICAgICBTcGVjaWFsCisgICAgfTsKKworICAgIGVudW0gUm9sZSA6IGludDhf
dCB7CisgICAgICAgIFVzZSwKKyAgICAgICAgRGVmLAorICAgICAgICBVc2VEZWYKKyAgICB9Owor
CisgICAgZW51bSBUeXBlIDogaW50OF90IHsKKyAgICAgICAgR1AsCisgICAgICAgIEZQCisgICAg
fTsKKworICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBudW1UeXBlcyA9IDI7CisKKyAgICBzdGF0
aWMgYm9vbCBpc1VzZShSb2xlIHJvbGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHJvbGUpIHsK
KyAgICAgICAgY2FzZSBVc2U6CisgICAgICAgIGNhc2UgVXNlRGVmOgorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGNhc2UgRGVmOgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNEZWYoUm9sZSByb2xlKQorICAg
IHsKKyAgICAgICAgc3dpdGNoIChyb2xlKSB7CisgICAgICAgIGNhc2UgVXNlOgorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBjYXNlIERlZjoKKyAgICAgICAgY2FzZSBVc2VEZWY6
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0YXRp
YyBUeXBlIHR5cGVGb3JCM1R5cGUoQjM6OlR5cGUgdHlwZSkKKyAgICB7CisgICAgICAgIHN3aXRj
aCAodHlwZSkgeworICAgICAgICBjYXNlIFZvaWQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAgICAgY2FzZSBJbnQzMjoKKyAg
ICAgICAgY2FzZSBJbnQ2NDoKKyAgICAgICAgICAgIHJldHVybiBHUDsKKyAgICAgICAgY2FzZSBE
b3VibGU6CisgICAgICAgICAgICByZXR1cm4gRlA7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBHUDsKKyAgICB9CisKKyAgICBBcmcoKQor
ICAgICAgICA6IG1fa2luZChJbnZhbGlkKQorICAgIHsKKyAgICB9CisKKyAgICBBcmcoQWlyOjpU
bXAgdG1wKQorICAgICAgICA6IG1fa2luZChUbXApCisgICAgICAgICwgbV9iYXNlKHRtcCkKKyAg
ICB7CisgICAgfQorCisgICAgc3RhdGljIEFyZyBpbW0oaW50MzJfdCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBJbW07CisgICAgICAg
IHJlc3VsdC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0K
KworICAgIHN0YXRpYyBBcmcgaW1tNjQoaW50cHRyX3QgdmFsdWUpCisgICAgeworICAgICAgICBB
cmcgcmVzdWx0OworICAgICAgICByZXN1bHQubV9raW5kID0gSW1tNjQ7CisgICAgICAgIHJlc3Vs
dC5tX29mZnNldCA9IHZhbHVlOworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAg
IHN0YXRpYyBBcmcgYWRkcihBaXI6OlRtcCBiYXNlLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAg
eworICAgICAgICBBU1NFUlQoYmFzZS5pc0dQKCkpOworICAgICAgICBBcmcgcmVzdWx0OworICAg
ICAgICByZXN1bHQubV9raW5kID0gQWRkcjsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7
CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHN0YWNrKFN0YWNrU2xvdCogdmFsdWUsIGludDMy
X3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3Vs
dC5tX2tpbmQgPSBTdGFjazsKKyAgICAgICAgcmVzdWx0Lm1fb2Zmc2V0ID0gYml0d2lzZV9jYXN0
PGludHB0cl90Pih2YWx1ZSk7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0gb2Zmc2V0OyAvLyBJ
IGtub3csIHl1Y2suCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGlj
IEFyZyBjYWxsQXJnKGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsK
KyAgICAgICAgcmVzdWx0Lm1fa2luZCA9IENhbGxBcmc7CisgICAgICAgIHJlc3VsdC5tX29mZnNl
dCA9IG9mZnNldDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMg
Ym9vbCBpc1ZhbGlkU2NhbGUodW5zaWduZWQgc2NhbGUpCisgICAgeworICAgICAgICBzd2l0Y2gg
KHNjYWxlKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgY2FzZSAyOgorICAgICAgICBjYXNl
IDQ6CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisg
ICAgc3RhdGljIHVuc2lnbmVkIGxvZ1NjYWxlKHVuc2lnbmVkIHNjYWxlKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChzY2FsZSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2Ug
NDoKKyAgICAgICAgICAgIHJldHVybiAyOworICAgICAgICBjYXNlIDg6CisgICAgICAgICAgICBy
ZXR1cm4gMzsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0
aWMgQXJnIGluZGV4KEFpcjo6VG1wIGJhc2UsIEFpcjo6VG1wIGluZGV4LCB1bnNpZ25lZCBzY2Fs
ZSA9IDEsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYXNlLmlz
R1AoKSk7CisgICAgICAgIEFTU0VSVChpbmRleC5pc0dQKCkpOworICAgICAgICBBU1NFUlQoaXNW
YWxpZFNjYWxlKHNjYWxlKSk7CisgICAgICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5t
X2tpbmQgPSBJbmRleDsKKyAgICAgICAgcmVzdWx0Lm1fYmFzZSA9IGJhc2U7CisgICAgICAgIHJl
c3VsdC5tX2luZGV4ID0gaW5kZXg7CisgICAgICAgIHJlc3VsdC5tX3NjYWxlID0gc3RhdGljX2Nh
c3Q8aW50MzJfdD4oc2NhbGUpOworICAgICAgICByZXN1bHQubV9vZmZzZXQgPSBvZmZzZXQ7Cisg
ICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIEFyZyByZWxDb25kKE1h
Y3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKKyAgICB7CisgICAg
ICAgIEFyZyByZXN1bHQ7CisgICAgICAgIHJlc3VsdC5tX2tpbmQgPSBSZWxDb25kOworICAgICAg
ICByZXN1bHQubV9vZmZzZXQgPSBjb25kaXRpb247CisgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgfQorCisgICAgc3RhdGljIEFyZyByZXNDb25kKE1hY3JvQXNzZW1ibGVyOjpSZXN1bHRDb25k
aXRpb24gY29uZGl0aW9uKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAgICAgICAgcmVz
dWx0Lm1fa2luZCA9IFJlc0NvbmQ7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9IGNvbmRpdGlv
bjsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICBzdGF0aWMgQXJnIHNwZWNp
YWwoQWlyOjpTcGVjaWFsKiBzcGVjaWFsKQorICAgIHsKKyAgICAgICAgQXJnIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fa2luZCA9IFNwZWNpYWw7CisgICAgICAgIHJlc3VsdC5tX29mZnNldCA9
IGJpdHdpc2VfY2FzdDxpbnRwdHJfdD4oc3BlY2lhbCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEFyZyYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gbV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQKKyAgICAgICAg
ICAgICYmIG1fa2luZCA9PSBvdGhlci5tX2tpbmQKKyAgICAgICAgICAgICYmIG1fYmFzZSA9PSBv
dGhlci5tX2Jhc2UKKyAgICAgICAgICAgICYmIG1faW5kZXggPT0gb3RoZXIubV9pbmRleAorICAg
ICAgICAgICAgJiYgbV9zY2FsZSA9PSBvdGhlci5tX3NjYWxlOworICAgIH0KKworICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBBcmcmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
ICEoKnRoaXMgPT0gb3RoZXIpOworICAgIH0KKworICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2wo
KSBjb25zdCB7IHJldHVybiAqdGhpcyAhPSBBcmcoKTsgfQorCisgICAgS2luZCBraW5kKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2tpbmQ7CisgICAgfQorCisgICAgYm9vbCBpc1Rt
cCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFRtcDsKKyAgICB9CisK
KyAgICBib29sIGlzSW1tKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0g
SW1tOworICAgIH0KKworICAgIGJvb2wgaXNJbW02NCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4ga2luZCgpID09IEltbTY0OworICAgIH0KKworICAgIGJvb2wgaXNBZGRyKCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gQWRkcjsKKyAgICB9CisKKyAgICBib29s
IGlzU3RhY2soKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBTdGFjazsK
KyAgICB9CisKKyAgICBib29sIGlzQ2FsbEFyZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4ga2luZCgpID09IENhbGxBcmc7CisgICAgfQorCisgICAgYm9vbCBpc0luZGV4KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBraW5kKCkgPT0gSW5kZXg7CisgICAgfQorCisgICAgYm9v
bCBpc1JlbENvbmQoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGtpbmQoKSA9PSBSZWxD
b25kOworICAgIH0KKworICAgIGJvb2wgaXNSZXNDb25kKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBraW5kKCkgPT0gUmVzQ29uZDsKKyAgICB9CisKKyAgICBib29sIGlzU3BlY2lhbCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4ga2luZCgpID09IFNwZWNpYWw7CisgICAgfQor
CisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1RtcCgp
IHx8IGlzU3RhY2soKTsKKyAgICB9CisKKyAgICBBaXI6OlRtcCB0bXAoKSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBUbXApOworICAgICAgICByZXR1cm4gbV9iYXNlOwor
ICAgIH0KKworICAgIGludDY0X3QgdmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBJbW0gfHwga2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJuIG1fb2Zm
c2V0OworICAgIH0KKworICAgIHZvaWQqIHBvaW50ZXJWYWx1ZSgpIGNvbnN0CisgICAgeworICAg
ICAgICBBU1NFUlQoa2luZCgpID09IEltbTY0KTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2Fz
dDx2b2lkKj4oc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KG1fb2Zmc2V0KSk7CisgICAgfQorCisgICAg
QWlyOjpUbXAgYmFzZSgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09IEFk
ZHIgfHwga2luZCgpID09IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1fYmFzZTsKKyAgICB9CisK
KyAgICBib29sIGhhc09mZnNldCgpIGNvbnN0CisgICAgeworICAgICAgICBzd2l0Y2ggKGtpbmQo
KSkgeworICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgIGNhc2UgU3RhY2s6CisgICAgICAgIGNh
c2UgQ2FsbEFyZzoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfQorICAgIAorICAgIGludDMyX3Qgb2Zmc2V0KCkgY29uc3QKKyAgICB7CisgICAgICAg
IGlmIChraW5kKCkgPT0gU3RhY2spCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50
MzJfdD4obV9zY2FsZSk7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gQWRkciB8fCBraW5kKCkg
PT0gQ2FsbEFyZyB8fCBraW5kKCkgPT0gSW5kZXgpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50MzJfdD4obV9vZmZzZXQpOworICAgIH0KKworICAgIFN0YWNrU2xvdCogc3RhY2tTbG90
KCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChraW5kKCkgPT0gU3RhY2spOworICAgICAg
ICByZXR1cm4gYml0d2lzZV9jYXN0PFN0YWNrU2xvdCo+KG1fb2Zmc2V0KTsKKyAgICB9CisKKyAg
ICBBaXI6OlRtcCBpbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoa2luZCgpID09
IEluZGV4KTsKKyAgICAgICAgcmV0dXJuIG1faW5kZXg7CisgICAgfQorCisgICAgdW5zaWduZWQg
c2NhbGUoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGtpbmQoKSA9PSBJbmRleCk7Cisg
ICAgICAgIHJldHVybiBtX3NjYWxlOworICAgIH0KKworICAgIHVuc2lnbmVkIGxvZ1NjYWxlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBsb2dTY2FsZShzY2FsZSgpKTsKKyAgICB9CisK
KyAgICBBaXI6OlNwZWNpYWwqIHNwZWNpYWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJU
KGtpbmQoKSA9PSBTcGVjaWFsKTsKKyAgICAgICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxBaXI6OlNw
ZWNpYWwqPihtX29mZnNldCk7CisgICAgfQorCisgICAgYm9vbCBpc0dQVG1wKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzR1AoKTsKKyAgICB9CisKKyAg
ICBib29sIGlzRlBUbXAoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVG1wKCkgJiYg
dG1wKCkuaXNGUCgpOworICAgIH0KKyAgICAKKyAgICAvLyBUZWxscyB1cyBpZiB0aGlzIEFyZyBj
YW4gYmUgdXNlZCBpbiBhIHBvc2l0aW9uIHRoYXQgcmVxdWlyZXMgYSBHUCB2YWx1ZS4KKyAgICBi
b29sIGlzR1AoKSBjb25zdAorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAg
ICAgY2FzZSBJbW06CisgICAgICAgIGNhc2UgSW1tNjQ6CisgICAgICAgIGNhc2UgQWRkcjoKKyAg
ICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2FzZSBDYWxs
QXJnOgorICAgICAgICBjYXNlIFJlbENvbmQ6CisgICAgICAgIGNhc2UgUmVzQ29uZDoKKyAgICAg
ICAgY2FzZSBTcGVjaWFsOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGNhc2Ug
VG1wOgorICAgICAgICAgICAgcmV0dXJuIGlzR1BUbXAoKTsKKyAgICAgICAgY2FzZSBJbnZhbGlk
OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorCisgICAgLy8g
VGVsbHMgdXMgaWYgdGhpcyBBcmcgY2FuIGJlIHVzZWQgaW4gYSBwb3NpdGlvbiB0aGF0IHJlcXVp
cmVzIGEgRlAgdmFsdWUuCisgICAgYm9vbCBpc0ZQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3
aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNhc2UgSW1tOgorICAgICAgICBjYXNlIFJlbENvbmQ6
CisgICAgICAgIGNhc2UgUmVzQ29uZDoKKyAgICAgICAgY2FzZSBTcGVjaWFsOgorICAgICAgICBj
YXNlIEludmFsaWQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGNhc2UgQWRk
cjoKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgY2FzZSBTdGFjazoKKyAgICAgICAgY2Fz
ZSBDYWxsQXJnOgorICAgICAgICBjYXNlIEltbTY0OiAvLyBZZXMsIHdlIGFsbG93IEltbTY0IGFz
IGEgZG91YmxlIGltbWVkaWF0ZS4gV2UgdXNlIHRoaXMgZm9yIGltcGxlbWVudGluZyBzdGFja21h
cHMuCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgY2FzZSBUbXA6CisgICAgICAg
ICAgICByZXR1cm4gaXNGUFRtcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBoYXNU
eXBlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCgpKSB7CisgICAgICAgIGNh
c2UgSW1tOgorICAgICAgICBjYXNlIFNwZWNpYWw6CisgICAgICAgIGNhc2UgVG1wOgorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLy8gVGhlIHR5cGUgaXMgYW1iaWd1
b3VzIGZvciBzb21lIGFyZyBraW5kcy4gQ2FsbCB3aXRoIGNhcmUuCisgICAgVHlwZSB0eXBlKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0dQKCkgPyBHUCA6IEZQOworICAgIH0KKwor
ICAgIGJvb2wgaXNUeXBlKFR5cGUgdHlwZSkgY29uc3QKKyAgICB7CisgICAgICAgIHN3aXRjaCAo
dHlwZSkgeworICAgICAgICBjYXNlIEdQOgorICAgICAgICAgICAgcmV0dXJuIGlzR1AoKTsKKyAg
ICAgICAgY2FzZSBGUDoKKyAgICAgICAgICAgIHJldHVybiBpc0ZQKCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBib29sIGlzR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc1Rt
cCgpICYmIHRtcCgpLmlzR1BSKCk7CisgICAgfQorCisgICAgR1BSUmVnIGdwcigpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gdG1wKCkuZ3ByKCk7CisgICAgfQorCisgICAgYm9vbCBpc0ZQ
UigpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaXNUbXAoKSAmJiB0bXAoKS5pc0ZQUigp
OworICAgIH0KKworICAgIEZQUlJlZyBmcHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IHRtcCgpLmZwcigpOworICAgIH0KKyAgICAKKyAgICBib29sIGlzUmVnKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc1RtcCgpICYmIHRtcCgpLmlzUmVnKCk7CisgICAgfQorCisgICAg
UmVnIHJlZygpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gdG1wKCkucmVnKCk7CisgICAg
fQorCisgICAgdW5zaWduZWQgZ3BUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gdG1wKCkuZ3BUbXBJbmRleCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIGZwVG1wSW5kZXgo
KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHRtcCgpLmZwVG1wSW5kZXgoKTsKKyAgICB9
CisKKyAgICB1bnNpZ25lZCB0bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
dG1wKCkudG1wSW5kZXgoKTsKKyAgICB9CisKKyAgICBBcmcgd2l0aE9mZnNldChpbnQzMl90IGFk
ZGl0aW9uYWxPZmZzZXQpIGNvbnN0CisgICAgeworICAgICAgICBpZiAoIWhhc09mZnNldCgpKQor
ICAgICAgICAgICAgcmV0dXJuIEFyZygpOworICAgICAgICBpZiAoc3VtT3ZlcmZsb3dzPGludDMy
X3Q+KG9mZnNldCgpLCBhZGRpdGlvbmFsT2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBBcmco
KTsKKyAgICAgICAgc3dpdGNoIChraW5kKCkpIHsKKyAgICAgICAgY2FzZSBBZGRyOgorICAgICAg
ICAgICAgcmV0dXJuIGFkZHIoYmFzZSgpLCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOwor
ICAgICAgICBjYXNlIFN0YWNrOgorICAgICAgICAgICAgcmV0dXJuIHN0YWNrKHN0YWNrU2xvdCgp
LCBvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOworICAgICAgICBjYXNlIENhbGxBcmc6Cisg
ICAgICAgICAgICByZXR1cm4gY2FsbEFyZyhvZmZzZXQoKSArIGFkZGl0aW9uYWxPZmZzZXQpOwor
ICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAgcmV0dXJuIGluZGV4KGJhc2UoKSwgaW5k
ZXgoKSwgc2NhbGUoKSwgb2Zmc2V0KCkgKyBhZGRpdGlvbmFsT2Zmc2V0KTsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
ICAgICByZXR1cm4gQXJnKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcEZhc3QoY29uc3QgRnVuY3RvciYgZnVu
Y3RvcikKKyAgICB7CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgVG1w
OgorICAgICAgICBjYXNlIEFkZHI6CisgICAgICAgICAgICBmdW5jdG9yKG1fYmFzZSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbmRleDoKKyAgICAgICAgICAgIGZ1bmN0b3Io
bV9iYXNlKTsKKyAgICAgICAgICAgIGZ1bmN0b3IobV9pbmRleCk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorCisgICAgLy8gVGhpcyBpcyBzbWFydCBlbm91Z2ggdG8ga25vdyB0aGF0IGFuIGFkZHJlc3Mg
YXJnIGluIGEgRGVmIG9yIFVzZURlZiBydWxlIHdpbGwgdXNlIGl0cworICAgIC8vIHRtcHMgYW5k
IG5ldmVyIGRlZiB0aGVtLiBGb3IgZXhhbXBsZSwgdGhpczoKKyAgICAvLworICAgIC8vIG1vdiAl
cmF4LCAoJXJjeCkKKyAgICAvLworICAgIC8vIFRoaXMgZGVmcyAoJXJjeCkgYnV0IHVzZXMgJXJj
eC4KKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChS
b2xlIGFyZ1JvbGUsIFR5cGUgYXJnVHlwZSwgY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7
CisgICAgICAgIHN3aXRjaCAobV9raW5kKSB7CisgICAgICAgIGNhc2UgVG1wOgorICAgICAgICAg
ICAgZnVuY3RvcihtX2Jhc2UsIGFyZ1JvbGUsIGFyZ1R5cGUpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQWRkcjoKKyAgICAgICAgICAgIGZ1bmN0b3IobV9iYXNlLCBVc2UsIEdQ
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEluZGV4OgorICAgICAgICAgICAg
ZnVuY3RvcihtX2Jhc2UsIFVzZSwgR1ApOworICAgICAgICAgICAgZnVuY3RvcihtX2luZGV4LCBV
c2UsIEdQKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyIGFzVHJ1c3RlZEltbTMyKCkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpc0lt
bSgpKTsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoc3RhdGlj
X2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0KQor
ICAgIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQgYXNUcnVzdGVkSW1tNjQoKSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW1tNjQoKSk7CisgICAgICAgIHJldHVybiBNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KHZhbHVlKCkpOworICAgIH0KKyNlbmRpZgorCisgICAgTWFj
cm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIgYXNUcnVzdGVkSW1tUHRyKCkgY29uc3QKKyAgICB7
CisgICAgICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgICAgICBBU1NFUlQoaXNJbW02NCgpKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgQVNTRVJUKGlzSW1tKCkpOworICAgICAgICByZXR1
cm4gTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIocG9pbnRlclZhbHVlKCkpOworICAgIH0K
KworICAgIE1hY3JvQXNzZW1ibGVyOjpBZGRyZXNzIGFzQWRkcmVzcygpIGNvbnN0CisgICAgewor
ICAgICAgICBBU1NFUlQoaXNBZGRyKCkpOworICAgICAgICByZXR1cm4gTWFjcm9Bc3NlbWJsZXI6
OkFkZHJlc3MobV9iYXNlLmdwcigpLCBzdGF0aWNfY2FzdDxpbnQzMl90PihtX29mZnNldCkpOwor
ICAgIH0KKworICAgIE1hY3JvQXNzZW1ibGVyOjpCYXNlSW5kZXggYXNCYXNlSW5kZXgoKSBjb25z
dAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzSW5kZXgoKSk7CisgICAgICAgIHJldHVybiBNYWNy
b0Fzc2VtYmxlcjo6QmFzZUluZGV4KAorICAgICAgICAgICAgbV9iYXNlLmdwcigpLCBtX2luZGV4
LmdwcigpLCBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6U2NhbGU+KGxvZ1NjYWxlKCkpLAor
ICAgICAgICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4obV9vZmZzZXQpKTsKKyAgICB9CisKKyAg
ICBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBhc1JlbGF0aW9uYWxDb25kaXRp
b24oKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzUmVsQ29uZCgpKTsKKyAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uPiht
X29mZnNldCk7CisgICAgfQorCisgICAgTWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENvbmRpdGlvbiBh
c1Jlc3VsdENvbmRpdGlvbigpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoaXNSZXNDb25k
KCkpOworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8TWFjcm9Bc3NlbWJsZXI6OlJlc3VsdENv
bmRpdGlvbj4obV9vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYp
IGNvbnN0OworCisgICAgQXJnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAg
ICAgOiBtX2Jhc2UoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWUpCisgICAgeworICAgIH0KKwor
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAorICAgIHsKKyAgICAgICAg
cmV0dXJuICp0aGlzID09IEFyZyhXVEY6Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZSk7CisgICAgfQor
CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBUaGlzIHJlYWxs
eSBkb2Vzbid0IGhhdmUgdG8gYmUgdGhhdCBncmVhdC4KKyAgICAgICAgcmV0dXJuIFdURjo6SW50
SGFzaDxpbnQ2NF90Pjo6aGFzaChtX29mZnNldCkgKyBtX2tpbmQgKyBtX3NjYWxlICsgbV9iYXNl
Lmhhc2goKSArCisgICAgICAgICAgICBtX2luZGV4Lmhhc2goKTsKKyAgICB9CisKK3ByaXZhdGU6
CisgICAgaW50NjRfdCBtX29mZnNldCB7IDAgfTsKKyAgICBLaW5kIG1fa2luZCB7IEludmFsaWQg
fTsKKyAgICBpbnQzMl90IG1fc2NhbGUgeyAxIH07CisgICAgQWlyOjpUbXAgbV9iYXNlOworICAg
IEFpcjo6VG1wIG1faW5kZXg7Cit9OworCitzdHJ1Y3QgQXJnSGFzaCB7CisgICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgQXJnJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBBcmcmIGEsIGNvbnN0IEFyZyYgYikgeyByZXR1cm4gYSA9
PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0
ZWQgPSB0cnVlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCituYW1l
c3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwor
dGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6QWlyOjpBcmc+IHsKKyAgICB0
eXBlZGVmIEpTQzo6QjM6OkFpcjo6QXJnSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5h
bWUgVD4gc3RydWN0IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpT
Qzo6QjM6OkFpcjo6QXJnPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OkFy
Zz4geworICAgIC8vIEJlY2F1c2UgbV9zY2FsZSBpcyAxIGluIHRoZSBlbXB0eSB2YWx1ZS4KKyAg
ICBzdGF0aWMgY29uc3QgYm9vbCBlbXB0eVZhbHVlSXNaZXJvID0gZmFsc2U7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBB
aXJBcmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFz
aWNCbG9jay5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckJhc2ljQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM0Jhc2ljQmxvY2tVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5o
PgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2Nv
bnN0IGNoYXIqIGNvbnN0IEJhc2ljQmxvY2s6OmR1bXBQcmVmaXggPSAiIyI7CisKK2Jvb2wgQmFz
aWNCbG9jazo6YWRkUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJu
IEIzOjphZGRQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6
cmVtb3ZlUHJlZGVjZXNzb3IoQmFzaWNCbG9jayogYmxvY2spCit7CisgICAgcmV0dXJuIEIzOjpy
ZW1vdmVQcmVkZWNlc3Nvcih0aGlzLCBibG9jayk7Cit9CisKK2Jvb2wgQmFzaWNCbG9jazo6cmVw
bGFjZVByZWRlY2Vzc29yKEJhc2ljQmxvY2sqIGZyb20sIEJhc2ljQmxvY2sqIHRvKQoreworICAg
IHJldHVybiBCMzo6cmVwbGFjZVByZWRlY2Vzc29yKHRoaXMsIGZyb20sIHRvKTsKK30KKwordm9p
ZCBCYXNpY0Jsb2NrOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KGR1bXBQcmVmaXgsIG1faW5kZXgpOworfQorCit2b2lkIEJhc2ljQmxvY2s6OmRlZXBEdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJCQiIsICp0aGlzLCAi
OiA7IGZyZXF1ZW5jeSA9ICIsIG1fZnJlcXVlbmN5LCAiXG4iKTsKKyAgICBpZiAocHJlZGVjZXNz
b3JzKCkuc2l6ZSgpKQorICAgICAgICBvdXQucHJpbnQoIiAgUHJlZGVjZXNzb3JzOiAiLCBwb2lu
dGVyTGlzdER1bXAocHJlZGVjZXNzb3JzKCkpLCAiXG4iKTsKKyAgICBmb3IgKGNvbnN0IEluc3Qm
IGluc3QgOiAqdGhpcykKKyAgICAgICAgb3V0LnByaW50KCIgICAgIiwgaW5zdCwgIlxuIik7Cisg
ICAgaWYgKHN1Y2Nlc3NvcnMoKS5zaXplKCkpCisgICAgICAgIG91dC5wcmludCgiICBTdWNjZXNz
b3JzOiAiLCBsaXN0RHVtcChzdWNjZXNzb3JzKCkpLCAiXG4iKTsKK30KKworQmFzaWNCbG9jazo6
QmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91YmxlIGZyZXF1ZW5jeSkKKyAgICA6IG1faW5k
ZXgoaW5kZXgpCisgICAgLCBtX2ZyZXF1ZW5jeShmcmVxdWVuY3kpCit7Cit9CisKK30gfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckJhc2ljQmxvY2suaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQmFzaWNCbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyQmFzaWNCbG9ja19oCisjZGVmaW5lIEFp
ckJhc2ljQmxvY2tfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckZyZXF1
ZW50ZWRCbG9jay5oIgorI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1N1Y2Nlc3Nv
ckNvbGxlY3Rpb24uaCIKKyNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0
Zi9Ob25Db3B5YWJsZS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CisKK2NsYXNzIENvZGU7CitjbGFzcyBJbnNlcnRpb25TZXQ7CisKK2NsYXNzIEJh
c2ljQmxvY2sgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEJhc2ljQmxvY2spOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBkdW1wUHJlZml4OworCisgICAgdHlwZWRlZiBWZWN0b3I8SW5zdD4gSW5zdExpc3Q7Cisg
ICAgdHlwZWRlZiBWZWN0b3I8QmFzaWNCbG9jayosIDI+IFByZWRlY2Vzc29yTGlzdDsKKyAgICB0
eXBlZGVmIFZlY3RvcjxGcmVxdWVudGVkQmxvY2ssIDI+IFN1Y2Nlc3Nvckxpc3Q7CisKKyAgICB1
bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKyAgICAKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9pbnN0cy5zaXplKCk7IH0KKyAgICBJbnN0TGlz
dDo6aXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2luc3RzLmJlZ2luKCk7IH0KKyAgICBJbnN0
TGlzdDo6aXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gbV9pbnN0cy5lbmQoKTsgfQorICAgIEluc3RM
aXN0Ojpjb25zdF9pdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIG1faW5zdHMuYmVnaW4o
KTsgfQorICAgIEluc3RMaXN0Ojpjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBt
X2luc3RzLmVuZCgpOyB9CisKKyAgICBjb25zdCBJbnN0JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdHNbaW5kZXhdOyB9CisgICAgSW5zdCYgYXQoc2l6ZV90IGluZGV4KSB7
IHJldHVybiBtX2luc3RzW2luZGV4XTsgfQorCisgICAgY29uc3QgSW5zdCYgbGFzdCgpIGNvbnN0
IHsgcmV0dXJuIG1faW5zdHMubGFzdCgpOyB9CisgICAgSW5zdCYgbGFzdCgpIHsgcmV0dXJuIG1f
aW5zdHMubGFzdCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBJbnN0PgorICAgIHZvaWQg
YXBwZW5kSW5zdChJbnN0JiYgaW5zdCkKKyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKHN0
ZDo6Zm9yd2FyZDxJbnN0PihpbnN0KSk7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgorICAgIHZvaWQgYXBwZW5kKEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykK
KyAgICB7CisgICAgICAgIG1faW5zdHMuYXBwZW5kKEluc3Qoc3RkOjpmb3J3YXJkPEFyZ3VtZW50
cz4oYXJndW1lbnRzKS4uLikpOworICAgIH0KKworICAgIC8vIFRoZSAiMCIgY2FzZSBpcyB0aGUg
Y2FzZSB0byB3aGljaCB0aGUgYnJhbmNoIGp1bXBzLCBzbyB0aGUgInRoZW4iIGNhc2UuIFRoZSAi
MSIgY2FzZSBpcyB0aGUKKyAgICAvLyAiZWxzZSIgY2FzZSwgYW5kIGlzIHVzZWQgdG8gcmVwcmVz
ZW50IHRoZSBmYWxsLXRocm91Z2ggb2YgYSBjb25kaXRpb25hbCBicmFuY2guCisgICAgdW5zaWdu
ZWQgbnVtU3VjY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fc3VjY2Vzc29ycy5zaXplKCk7IH0K
KyAgICBGcmVxdWVudGVkQmxvY2sgc3VjY2Vzc29yKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3N1Y2Nlc3NvcnNbaW5kZXhdOyB9CisgICAgRnJlcXVlbnRlZEJsb2NrJiBzdWNjZXNz
b3IodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3VjY2Vzc29yc1tpbmRleF07IH0KKyAgICBj
b25zdCBTdWNjZXNzb3JMaXN0JiBzdWNjZXNzb3JzKCkgY29uc3QgeyByZXR1cm4gbV9zdWNjZXNz
b3JzOyB9CisgICAgU3VjY2Vzc29yTGlzdCYgc3VjY2Vzc29ycygpIHsgcmV0dXJuIG1fc3VjY2Vz
c29yczsgfQorCisgICAgQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIHN1Y2Nlc3NvcihpbmRleCkuYmxvY2soKTsgfQorICAgIEJhc2ljQmxv
Y2sqJiBzdWNjZXNzb3JCbG9jayh1bnNpZ25lZCBpbmRleCkgeyByZXR1cm4gc3VjY2Vzc29yKGlu
ZGV4KS5ibG9jaygpOyB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxCYXNpY0Jsb2NrLCBTdWNj
ZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN1Y2Nl
c3NvckNvbGxlY3Rpb248QmFzaWNCbG9jaywgU3VjY2Vzc29yTGlzdD4obV9zdWNjZXNzb3JzKTsK
KyAgICB9CisgICAgU3VjY2Vzc29yQ29sbGVjdGlvbjxjb25zdCBCYXNpY0Jsb2NrLCBjb25zdCBT
dWNjZXNzb3JMaXN0PiBzdWNjZXNzb3JCbG9ja3MoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIFN1Y2Nlc3NvckNvbGxlY3Rpb248Y29uc3QgQmFzaWNCbG9jaywgY29uc3QgU3VjY2Vzc29y
TGlzdD4obV9zdWNjZXNzb3JzKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBudW1QcmVkZWNlc3Nv
cnMoKSBjb25zdCB7IHJldHVybiBtX3ByZWRlY2Vzc29ycy5zaXplKCk7IH0KKyAgICBCYXNpY0Js
b2NrKiBwcmVkZWNlc3Nvcih1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcmVkZWNl
c3NvcnNbaW5kZXhdOyB9CisgICAgQmFzaWNCbG9jayomIHByZWRlY2Vzc29yKHVuc2lnbmVkIGlu
ZGV4KSB7IHJldHVybiBtX3ByZWRlY2Vzc29yc1tpbmRleF07IH0KKyAgICBjb25zdCBQcmVkZWNl
c3Nvckxpc3QmIHByZWRlY2Vzc29ycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZGVjZXNzb3JzOyB9
CisgICAgUHJlZGVjZXNzb3JMaXN0JiBwcmVkZWNlc3NvcnMoKSB7IHJldHVybiBtX3ByZWRlY2Vz
c29yczsgfQorCisgICAgYm9vbCBhZGRQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9v
bCByZW1vdmVQcmVkZWNlc3NvcihCYXNpY0Jsb2NrKik7CisgICAgYm9vbCByZXBsYWNlUHJlZGVj
ZXNzb3IoQmFzaWNCbG9jayogZnJvbSwgQmFzaWNCbG9jayogdG8pOworCisgICAgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNv
bnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworICAgIGZyaWVuZCBjbGFz
cyBJbnNlcnRpb25TZXQ7CisgICAgCisgICAgQmFzaWNCbG9jayh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIGZyZXF1ZW5jeSk7CisKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIEluc3RMaXN0IG1f
aW5zdHM7CisgICAgU3VjY2Vzc29yTGlzdCBtX3N1Y2Nlc3NvcnM7CisgICAgUHJlZGVjZXNzb3JM
aXN0IG1fcHJlZGVjZXNzb3JzOworICAgIGRvdWJsZSBtX2ZyZXF1ZW5jeTsKK307CisKK2NsYXNz
IERlZXBCYXNpY0Jsb2NrRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcEJhc2ljQmxvY2tEdW1wKGNv
bnN0IEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICA6IG1fYmxvY2soYmxvY2spCisgICAgewor
ICAgIH0KKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAg
ICAgICAgaWYgKG1fYmxvY2spCisgICAgICAgICAgICBtX2Jsb2NrLT5kZWVwRHVtcChvdXQpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKwor
cHJpdmF0ZToKKyAgICBjb25zdCBCYXNpY0Jsb2NrKiBtX2Jsb2NrOworfTsKKworaW5saW5lIERl
ZXBCYXNpY0Jsb2NrRHVtcCBkZWVwRHVtcChjb25zdCBCYXNpY0Jsb2NrKiBibG9jaykKK3sKKyAg
ICByZXR1cm4gRGVlcEJhc2ljQmxvY2tEdW1wKGJsb2NrKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpckJhc2ljQmxvY2tfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNDYWxsU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJDQ2FsbFNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJDQ2FsbFNwZWNpYWwuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKKworQ0NhbGxTcGVjaWFsOjpDQ2FsbFNwZWNpYWwoKQoreworICAgIG1fY2xvYmJl
cmVkUmVncyA9IFJlZ2lzdGVyU2V0OjphbGxSZWdpc3RlcnMoKTsKKyAgICBtX2Nsb2JiZXJlZFJl
Z3MuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgbV9jbG9iYmVy
ZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7
CisgICAgbV9jbG9iYmVyZWRSZWdzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdp
c3RlcnMoKSk7Cit9CisKK0NDYWxsU3BlY2lhbDo6fkNDYWxsU3BlY2lhbCgpCit7Cit9CisKK3Zv
aWQgQ0NhbGxTcGVjaWFsOjpmb3JFYWNoQXJnKEluc3QmIGluc3QsIGNvbnN0IFNjb3BlZExhbWJk
YTxJbnN0OjpFYWNoQXJnQ2FsbGJhY2s+JiBjYWxsYmFjaykKK3sKKyAgICBjYWxsYmFjayhpbnN0
LmFyZ3NbMV0sIEFyZzo6VXNlLCBBcmc6OkdQKTsKKyAgICAKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIC8vIEZvciB0aGUgdHlw
ZSwgd2UgY2FuIGp1c3QgcXVlcnkgdGhlIGFyZydzIHR5cGUuIFRoZSBhcmcgd2lsbCBoYXZlIGEg
dHlwZSwgYmVjYXVzZSB3ZQorICAgICAgICAvLyByZXF1aXJlIHRoZXNlIGFyZ3MgdG8gYmUgYXJn
dW1lbnQgcmVnaXN0ZXJzLgorICAgICAgICBjYWxsYmFjayhpbnN0LmFyZ3NbaV0sIEFyZzo6VXNl
LCBpbnN0LmFyZ3NbaV0udHlwZSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFsOjpp
c1ZhbGlkKEluc3QmIGluc3QpCit7CisgICAgaWYgKGluc3QuYXJncy5zaXplKCkgPCAyKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzd2l0Y2ggKGluc3QuYXJnc1sxXS5raW5kKCkpIHsK
KyAgICBjYXNlIEFyZzo6SW1tOgorICAgICAgICBpZiAoaXMzMkJpdCgpKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIEFyZzo6SW1tNjQ6CisgICAg
ICAgIGlmIChpczY0Qml0KCkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgY2FzZSBBcmc6OkFkZHI6CisgICAgY2FzZSBB
cmc6OlN0YWNrOgorICAgIGNhc2UgQXJnOjpDYWxsQXJnOgorICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFpbnN0LmFy
Z3NbMV0uaXNHUCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAyOyBpIDwgaW5zdC5hcmdzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICghaW5zdC5h
cmdzW2ldLmlzUmVnKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYg
KGluc3QuYXJnc1tpXSA9PSBUbXAoc2NyYXRjaFJlZ2lzdGVyKSkKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ0NhbGxTcGVjaWFs
OjphZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpCit7CisgICAgLy8gQXJnIDEg
Y2FuIGJlIGEgc3RhY2sgYWRkcmVzcyBmb3Igc3VyZS4KKyAgICBpZiAoYXJnSW5kZXggPT0gMSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgCisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lk
IENDYWxsU3BlY2lhbDo6cmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJT
ZXQmKQoreworfQorCitDQ2FsbEhlbHBlcnM6Okp1bXAgQ0NhbGxTcGVjaWFsOjpnZW5lcmF0ZShJ
bnN0JiBpbnN0LCBDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQmKQoreworICAg
IHN3aXRjaCAoaW5zdC5hcmdzWzFdLmtpbmQoKSkgeworICAgIGNhc2UgQXJnOjpJbW06CisgICAg
Y2FzZSBBcmc6OkltbTY0OgorICAgICAgICBqaXQubW92ZShpbnN0LmFyZ3NbMV0uYXNUcnVzdGVk
SW1tUHRyKCksIHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgICAgIGppdC5jYWxsKHNjcmF0Y2hSZWdp
c3Rlcik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpUbXA6CisgICAgICAgIGppdC5j
YWxsKGluc3QuYXJnc1sxXS5ncHIoKSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQXJnOjpB
ZGRyOgorICAgICAgICBqaXQuY2FsbChpbnN0LmFyZ3NbMV0uYXNBZGRyZXNzKCkpOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIENDYWxsSGVscGVyczo6SnVt
cCgpOworfQorCitjb25zdCBSZWdpc3RlclNldCYgQ0NhbGxTcGVjaWFsOjpleHRyYUNsb2JiZXJl
ZFJlZ3MoSW5zdCYpCit7CisgICAgcmV0dXJuIG1fY2xvYmJlcmVkUmVnczsKK30KKwordm9pZCBD
Q2FsbFNwZWNpYWw6OmR1bXBJbXBsKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KCJDQ2FsbCIpOworfQorCit2b2lkIENDYWxsU3BlY2lhbDo6ZGVlcER1bXBJbXBsKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJmdW5jdGlvbiBjYWxsIHRo
YXQgdXNlcyB0aGUgQyBjYWxsaW5nIGNvbnZlbnRpb24uIik7Cit9CisKK30gfSB9IC8vIG5hbWVz
cGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ0NhbGxTcGVjaWFsLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNDYWxsU3BlY2lhbC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDQ2FsbFNwZWNpYWxfaAorI2RlZmluZSBB
aXJDQ2FsbFNwZWNpYWxfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpclNw
ZWNpYWwuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCisvLyBVc2UgdGhpcyBzcGVjaWFsIGZvciBjb25zdHJ1Y3RpbmcgYSBDIGNhbGwuIEFyZyAw
IGlzIG9mIGNvdXJzZSBhIFNwZWNpYWwgYXJnIHRoYXQgcmVmZXJzIHRvIHRoZQorLy8gQ0NhbGxT
cGVjaWFsIG9iamVjdC4gQXJnIDEgaXMgdGhlIGNhbGxlZSwgYW5kIGl0IGNhbiBiZSBhbiBJbW1Q
dHIsIGEgcmVnaXN0ZXIsIG9yIGFuIGFkZHJlc3MuIFRoZQorLy8gcmVtYWluaW5nIGFyZ3MgYXJl
IGp1c3QgdGhlIHNldCBvZiBhcmd1bWVudCByZWdpc3RlcnMgdXNlZCBieSB0aGlzIGNhbGwuIEZv
ciBhcmd1bWVudHMgdGhhdCBnbyB0bworLy8gdGhlIHN0YWNrLCB5b3UgaGF2ZSB0byBkbyB0aGUg
Z3J1bnQgd29yayBvZiBkb2luZyB0aG9zZSBzdGFjayBzdG9yZXMuIEluIGZhY3QsIHRoZSBvbmx5
IHJlYXNvbiB3aHkKKy8vIHdlIHNwZWNpZnkgdGhlIGFyZ3VtZW50IHJlZ2lzdGVycyBhcyBhcmd1
bWVudHMgdG8gYSBjYWxsIGlzIHNvIHRoYXQgdGhlIGxpdmVuZXNzIGFuYWx5c2lzIGNhbiBzZWUK
Ky8vIHRoYXQgdGhleSBnZXQgdXNlZCBoZXJlLiBJdCB3b3VsZCBiZSB3cm9uZyB0byBhdXRvbWFn
aWNhbGx5IHJlcG9ydCBhbGwgYXJndW1lbnQgcmVnaXN0ZXJzIGFzIGJlaW5nCisvLyB1c2VkIGJl
Y2F1c2UgaWYgd2UgaGFkIGEgY2FsbCB0aGF0IGRpZG4ndCBwYXNzIHRoZW0sIHRoZW4gdGhleSdk
IGFwcGVhciB0byBiZSBsaXZlIHVudGlsIHNvbWUKKy8vIGNsb2JiZXIgcG9pbnQgb3IgdGhlIHBy
b2xvZ3VlLCB3aGljaGV2ZXIgaGFwcGVuZWQgc29vbmVyLgorCitjbGFzcyBDQ2FsbFNwZWNpYWwg
OiBwdWJsaWMgU3BlY2lhbCB7CitwdWJsaWM6CisgICAgQ0NhbGxTcGVjaWFsKCk7CisgICAgfkND
YWxsU3BlY2lhbCgpOworCisgICAgLy8gWW91IGNhbm5vdCB1c2UgdGhpcyByZWdpc3RlciB0byBw
YXNzIGFyZ3VtZW50cy4gSXQganVzdCBzbyBoYXBwZW5zIHRoYXQgdGhpcyByZWdpc3RlciBpcyBu
b3QKKyAgICAvLyB1c2VkIGZvciBhcmd1bWVudHMgaW4gdGhlIEMgY2FsbGluZyBjb252ZW50aW9u
LiBCeSB0aGUgd2F5LCB0aGlzIGlzIHRoZSBvbmx5IHRoaW5nIHRoYXQgY2F1c2VzCisgICAgLy8g
dGhpcyBzcGVjaWFsIHRvIGJlIHNwZWNpZmljIHRvIEMgY2FsbHMuCisgICAgc3RhdGljIGNvbnN0
IEdQUlJlZyBzY3JhdGNoUmVnaXN0ZXIgPSBHUFJJbmZvOjpub25BcmdHUFIwOworCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCBmb3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6
RWFjaEFyZ0NhbGxiYWNrPiYpIG92ZXJyaWRlOworICAgIGJvb2wgaXNWYWxpZChJbnN0Jikgb3Zl
cnJpZGU7CisgICAgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpIG92
ZXJyaWRlOworICAgIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0
ZXJTZXQmKSBvdmVycmlkZTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUoSW5zdCYs
IENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0Jikgb3ZlcnJpZGU7CisgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIGV4dHJhQ2xvYmJlcmVkUmVncyhJbnN0Jikgb3ZlcnJpZGU7CisKKyAgICB2
b2lkIGR1bXBJbXBsKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgdm9pZCBkZWVw
RHVtcEltcGwoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBS
ZWdpc3RlclNldCBtX2Nsb2JiZXJlZFJlZ3M7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyQ0Nh
bGxTcGVjaWFsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
Y3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiQWlyQ29kZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNDYWxs
U3BlY2lhbC5oIgorI2luY2x1ZGUgIkIzQmFzaWNCbG9ja1V0aWxzLmgiCisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworQ29kZTo6Q29kZSgpCisgICAg
OiBtX2xhc3RQaGFzZU5hbWUoImluaXRpYWwiKQoreworfQorCitDb2RlOjp+Q29kZSgpCit7Cit9
CisKK0Jhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWVuY3kpCit7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+IGJsb2NrKG5ldyBCYXNpY0Jsb2NrKG1fYmxvY2tz
LnNpemUoKSwgZnJlcXVlbmN5KSk7CisgICAgQmFzaWNCbG9jayogcmVzdWx0ID0gYmxvY2suZ2V0
KCk7CisgICAgbV9ibG9ja3MuYXBwZW5kKFdURjo6bW92ZShibG9jaykpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK1N0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVT
aXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSkKK3sKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFja1Nsb3QoYnl0ZVNpemUsIG1f
c3RhY2tTbG90cy5zaXplKCksIGtpbmQsIHZhbHVlKSk7CisgICAgU3RhY2tTbG90KiByZXN1bHQg
PSBzbG90LmdldCgpOworICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RGOjptb3ZlKHNsb3QpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitTcGVjaWFsKiBDb2RlOjphZGRTcGVjaWFsKHN0ZDo6
dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQoreworICAgIFNwZWNpYWwqIHJlc3VsdCA9IHNw
ZWNpYWwuZ2V0KCk7CisgICAgbV9zcGVjaWFscy5hcHBlbmQoV1RGOjptb3ZlKHNwZWNpYWwpKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3BlY2lh
bCgpCit7CisgICAgaWYgKCFtX2NDYWxsU3BlY2lhbCkgeworICAgICAgICBtX2NDYWxsU3BlY2lh
bCA9IHN0YXRpY19jYXN0PENDYWxsU3BlY2lhbCo+KAorICAgICAgICAgICAgYWRkU3BlY2lhbChz
dGQ6Om1ha2VfdW5pcXVlPENDYWxsU3BlY2lhbD4oKSkpOworICAgIH0KKworICAgIHJldHVybiBt
X2NDYWxsU3BlY2lhbDsKK30KKwordm9pZCBDb2RlOjpyZXNldFJlYWNoYWJpbGl0eSgpCit7Cisg
ICAgQjM6OnJlc2V0UmVhY2hhYmlsaXR5KG1fYmxvY2tzKTsKK30KKwordm9pZCBDb2RlOjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
ICp0aGlzKQorICAgICAgICBvdXQucHJpbnQoZGVlcER1bXAoYmxvY2spKTsKKyAgICBpZiAoc3Rh
Y2tTbG90cygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxuIik7
CisgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQorICAgICAgICAg
ICAgb3V0LnByaW50KCIgICAgIiwgcG9pbnRlckR1bXAoc2xvdCksICI6ICIsIGRlZXBEdW1wKHNs
b3QpLCAiXG4iKTsKKyAgICB9CisgICAgaWYgKHNwZWNpYWxzKCkuc2l6ZSgpKSB7CisgICAgICAg
IG91dC5wcmludCgiU3BlY2lhbHM6XG4iKTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFs
IDogc3BlY2lhbHMoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiICAgICIsIHBvaW50ZXJEdW1w
KHNwZWNpYWwpLCAiOiAiLCBkZWVwRHVtcChzcGVjaWFsKSwgIlxuIik7CisgICAgfQorICAgIGlm
IChtX2ZyYW1lU2l6ZSkKKyAgICAgICAgb3V0LnByaW50KCJGcmFtZSBzaXplOiAiLCBtX2ZyYW1l
U2l6ZSwgIlxuIik7CisgICAgaWYgKG1fY2FsbEFyZ0FyZWFTaXplKQorICAgICAgICBvdXQucHJp
bnQoIkNhbGwgYXJnIGFyZWEgc2l6ZTogIiwgbV9jYWxsQXJnQXJlYVNpemUsICJcbiIpOworICAg
IGlmIChtX2NhbGxlZVNhdmVSZWdpc3RlcnMuc2l6ZSgpKQorICAgICAgICBvdXQucHJpbnQoIkNh
bGxlZSBzYXZlczogIiwgbV9jYWxsZWVTYXZlUmVnaXN0ZXJzLCAiXG4iKTsKK30KKwordW5zaWdu
ZWQgQ29kZTo6ZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAg
ICB3aGlsZSAoaW5kZXggPCBzaXplKCkgJiYgIWF0KGluZGV4KSkKKyAgICAgICAgaW5kZXgrKzsK
KyAgICByZXR1cm4gaW5kZXg7Cit9CisKK3Vuc2lnbmVkIENvZGU6OmZpbmROZXh0QmxvY2tJbmRl
eCh1bnNpZ25lZCBpbmRleCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmluZEZpcnN0QmxvY2tJbmRl
eChpbmRleCArIDEpOworfQorCitCYXNpY0Jsb2NrKiBDb2RlOjpmaW5kTmV4dEJsb2NrKEJhc2lj
QmxvY2sqIGJsb2NrKSBjb25zdAoreworICAgIHJldHVybiBhdChmaW5kTmV4dEJsb2NrSW5kZXgo
YmxvY2stPmluZGV4KCkpKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwzMTIgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJDb2RlX2gKKyNk
ZWZpbmUgQWlyQ29kZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFz
aWNCbG9jay5oIgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Ns
b3QuaCIKKyNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0TGlzdC5oIgorI2luY2x1ZGUgIlN0YWNr
QWxpZ25tZW50LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQ
cm9jZWR1cmU7CisKK25hbWVzcGFjZSBBaXIgeworCitjbGFzcyBDQ2FsbFNwZWNpYWw7CisKKy8v
IFRoaXMgaXMgYW4gSVIgdGhhdCBpcyB2ZXJ5IGNsb3NlIHRvIHRoZSBiYXJlIG1ldGFsLiBJdCBy
ZXF1aXJlcyBhYm91dCA0MHggbW9yZSBieXRlcyB0aGFuIHRoZQorLy8gZ2VuZXJhdGVkIG1hY2hp
bmUgY29kZSAtIGZvciBleGFtcGxlIGlmIHlvdSdyZSBnZW5lcmF0aW5nIDFNQiBvZiBtYWNoaW5l
IGNvZGUsIHlvdSBuZWVkIGFib3V0CisvLyA0ME1CIG9mIEFpci4KKworY2xhc3MgQ29kZSB7Cisg
ICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoQ29kZSk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgQ29kZSgpOworICAgIH5Db2RlKCk7CisKKyAgICBCYXNpY0Jsb2Nr
KiBhZGRCbG9jayhkb3VibGUgZnJlcXVlbmN5ID0gUE5hTik7CisKKyAgICBTdGFja1Nsb3QqIGFk
ZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFs
dWUqID0gbnVsbHB0cik7CisKKyAgICBTcGVjaWFsKiBhZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0
cjxTcGVjaWFsPik7CisKKyAgICAvLyBUaGlzIGlzIHRoZSBzcGVjaWFsIHlvdSBuZWVkIHRvIG1h
a2UgYSBDIGNhbGwhCisgICAgQ0NhbGxTcGVjaWFsKiBjQ2FsbFNwZWNpYWwoKTsKKworICAgIFRt
cCBuZXdUbXAoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsK
KyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0dXJuIFRtcDo6Z3BUbXBGb3JJ
bmRleChtX251bUdQVG1wcysrKTsKKyAgICAgICAgY2FzZSBBcmc6OkZQOgorICAgICAgICAgICAg
cmV0dXJuIFRtcDo6ZnBUbXBGb3JJbmRleChtX251bUZQVG1wcysrKTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIHVuc2lnbmVkIG51bVRtcHMoQXJnOjpUeXBlIHR5cGUpCisgICAgeworICAgICAg
ICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgY2FzZSBBcmc6OkdQOgorICAgICAgICAgICAgcmV0
dXJuIG1fbnVtR1BUbXBzOworICAgICAgICBjYXNlIEFyZzo6RlA6CisgICAgICAgICAgICByZXR1
cm4gbV9udW1GUFRtcHM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1bnNpZ25lZCBjYWxsQXJn
QXJlYVNpemUoKSBjb25zdCB7IHJldHVybiBtX2NhbGxBcmdBcmVhU2l6ZTsgfQorCisgICAgLy8g
WW91IGNhbiBjYWxsIHRoaXMgYmVmb3JlIGNvZGUgZ2VuZXJhdGlvbiB0byBmb3JjZSBhIG1pbmlt
dW0gY2FsbCBhcmcgYXJlYSBzaXplLgorICAgIHZvaWQgcmVxdWVzdENhbGxBcmdBcmVhU2l6ZSh1
bnNpZ25lZCBzaXplKQorICAgIHsKKyAgICAgICAgbV9jYWxsQXJnQXJlYVNpemUgPSBzdGQ6Om1h
eCgKKyAgICAgICAgICAgIG1fY2FsbEFyZ0FyZWFTaXplLAorICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudEJ5dGVz
KCksIHNpemUpKSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnJhbWVTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZVNpemU7IH0KKworICAgIC8vIE9ubHkgcGhhc2VzIHRoYXQgZG8gc3RhY2sg
YWxsb2NhdGlvbiBhcmUgYWxsb3dlZCB0byBzZXQgdGhpcy4gQ3VycmVudGx5LCBvbmx5CisgICAg
Ly8gQWlyOjphbGxvY2F0ZVN0YWNrKCkgZG9lcyB0aGlzLgorICAgIHZvaWQgc2V0RnJhbWVTaXpl
KHVuc2lnbmVkIGZyYW1lU2l6ZSkKKyAgICB7CisgICAgICAgIG1fZnJhbWVTaXplID0gZnJhbWVT
aXplOworICAgIH0KKworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0JiBjYWxsZWVTYXZlUmVnaXN0
ZXJzKCkgeyByZXR1cm4gbV9jYWxsZWVTYXZlUmVnaXN0ZXJzOyB9CisKKyAgICAvLyBSZWNvbXB1
dGVzIHByZWRlY2Vzc29ycyBhbmQgZGVsZXRlcyB1bnJlYWNoYWJsZSBibG9ja3MuCisgICAgdm9p
ZCByZXNldFJlYWNoYWJpbGl0eSgpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29u
c3Q7CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9ibG9ja3Muc2l6ZSgp
OyB9CisgICAgQmFzaWNCbG9jayogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1f
YmxvY2tzW2luZGV4XS5nZXQoKTsgfQorICAgIEJhc2ljQmxvY2sqIG9wZXJhdG9yW10odW5zaWdu
ZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgLy8gRmluZHMgdGhl
IHNtYWxsZXN0IGluZGV4JyBzdWNoIHRoYXQgYXQoaW5kZXgnKSAhPSBudWxsIGFuZCBpbmRleCcg
Pj0gaW5kZXguCisgICAgdW5zaWduZWQgZmluZEZpcnN0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRl
eCkgY29uc3Q7CisKKyAgICAvLyBGaW5kcyB0aGUgc21hbGxlc3QgaW5kZXgnIHN1Y2ggdGhhdCBh
dChpbmRleCcpICE9IG51bGwgYW5kIGluZGV4JyA+IGluZGV4LgorICAgIHVuc2lnbmVkIGZpbmRO
ZXh0QmxvY2tJbmRleCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKKyAgICBCYXNpY0Jsb2NrKiBm
aW5kTmV4dEJsb2NrKEJhc2ljQmxvY2sqKSBjb25zdDsKKworICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2RlKG51
bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisK
KyAgICAgICAgaXRlcmF0b3IoY29uc3QgQ29kZSYgY29kZSwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICA6IG1fY29kZSgmY29kZSkKKyAgICAgICAgICAgICwgbV9pbmRleChtX2NvZGUtPmZp
bmRGaXJzdEJsb2NrSW5kZXgoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICBCYXNpY0Jsb2NrKiBvcGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
bV9jb2RlLT5hdChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVy
YXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IG1fY29kZS0+ZmluZEZp
cnN0QmxvY2tJbmRleChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVy
KSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5t
X2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMg
PT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2Rl
KiBtX2NvZGU7CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKwor
ICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFN0
YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCisgICAgICAgICAgICA6IG1fY29k
ZShjb2RlKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90cy5zaXplKCk7IH0KKyAgICAgICAgU3Rh
Y2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tT
bG90c1tpbmRleF0uZ2V0KCk7IH0KKyAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgICAgICBjbGFzcyBp
dGVyYXRvciB7CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAg
ICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQorICAgICAgICAgICAgICAgICwgbV9p
bmRleCgwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpdGVy
YXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5k
ZXgpCisgICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAg
ICAgICAgICAgLCBtX2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCisgICAgICAgICAgICB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBtX2luZGV4Kys7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVy
biBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBjb25zdCBTdGFja1Nsb3RzQ29s
bGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKKyAg
ICAgICAgfTsKKworICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCAwKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgY29uc3Qg
Q29kZSYgbV9jb2RlOworICAgIH07CisKKyAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Ns
b3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAg
CisgICAgY2xhc3MgU3BlY2lhbHNDb2xsZWN0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFNw
ZWNpYWxzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQorICAgICAgICAgICAgOiBtX2NvZGUo
Y29kZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzLnNpemUoKTsgfQorICAgICAgICBTcGVjaWFs
KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHNbaW5k
ZXhdLmdldCgpOyB9CisgICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsK
KyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0
IFNwZWNpYWxzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAg
ICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCisgICAgICAgICAgICAgICAgLCBt
X2luZGV4KGluZGV4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBTcGVjaWFsKiBvcGVyYXRvciooKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgbV9pbmRleCsrOworICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBv
dGhlci5tX2luZGV4OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICAgICAgeworICAgICAgICAg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uKiBtX2NvbGxl
Y3Rpb247CisgICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OworICAgICAgICB9OworCisgICAg
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9
CisgICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBz
aXplKCkpOyB9CisKKyAgICBwcml2YXRlOgorICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7Cisg
ICAgfTsKKworICAgIFNwZWNpYWxzQ29sbGVjdGlvbiBzcGVjaWFscygpIGNvbnN0IHsgcmV0dXJu
IFNwZWNpYWxzQ29sbGVjdGlvbigqdGhpcyk7IH0KKyAgICAKKyAgICAvLyBUaGUgbmFtZSBoYXMg
dG8gYmUgYSBzdHJpbmcgbGl0ZXJhbCwgc2luY2Ugd2UgZG9uJ3QgZG8gYW55IG1lbW9yeSBtYW5h
Z2VtZW50IGZvciB0aGUgc3RyaW5nLgorICAgIHZvaWQgc2V0TGFzdFBoYXNlTmFtZShjb25zdCBj
aGFyKiBuYW1lKQorICAgIHsKKyAgICAgICAgbV9sYXN0UGhhc2VOYW1lID0gbmFtZTsKKyAgICB9
CisKKyAgICBjb25zdCBjaGFyKiBsYXN0UGhhc2VOYW1lKCkgY29uc3QgeyByZXR1cm4gbV9sYXN0
UGhhc2VOYW1lOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFj
a1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Js
b2NrPj4gbV9ibG9ja3M7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPj4gbV9z
cGVjaWFsczsKKyAgICBDQ2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9Owor
ICAgIHVuc2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9OworICAgIHVuc2lnbmVkIG1fbnVtRlBUbXBz
IHsgMCB9OworICAgIHVuc2lnbmVkIG1fZnJhbWVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1f
Y2FsbEFyZ0FyZWFTaXplIHsgMCB9OworICAgIFJlZ2lzdGVyQXRPZmZzZXRMaXN0IG1fY2FsbGVl
U2F2ZVJlZ2lzdGVyczsKKyAgICBjb25zdCBjaGFyKiBtX2xhc3RQaGFzZU5hbWU7Cit9OworCit9
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklU
KQorCisjZW5kaWYgLy8gQWlyQ29kZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJGcmVxdWVudGVkQmxvY2suaAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRnJlcXVlbnRlZEJsb2NrLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEFpckZyZXF1ZW50ZWRCbG9ja19oCisjZGVmaW5lIEFpckZyZXF1
ZW50ZWRCbG9ja19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNHZW5lcmlj
RnJlcXVlbnRlZEJsb2NrLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1l
c3BhY2UgQWlyIHsKKworY2xhc3MgQmFzaWNCbG9jazsKKwordHlwZWRlZiBHZW5lcmljRnJlcXVl
bnRlZEJsb2NrPEJhc2ljQmxvY2s+IEZyZXF1ZW50ZWRCbG9jazsKKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8v
IEFpckZyZXF1ZW50ZWRCbG9ja19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyR2VuZXJhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyR2VuZXJhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpckdlbmVyYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNf
SklUKQorCisjaW5jbHVkZSAiQWlyQWxsb2NhdGVTdGFjay5oIgorI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJHZW5lcmF0aW9uQ29udGV4dC5oIgorI2luY2x1ZGUgIkFpckhhbmRs
ZUNhbGxlZVNhdmVzLmgiCisjaW5jbHVkZSAiQWlyU3BpbGxFdmVyeXRoaW5nLmgiCisjaW5jbHVk
ZSAiQWlyVmFsaWRhdGUuaCIKKyNpbmNsdWRlICJCM0NvbW1vbi5oIgorI2luY2x1ZGUgIkIzSW5k
ZXhNYXAuaCIKKyNpbmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIGdlbmVyYXRlKENvZGUmIGNvZGUs
IENDYWxsSGVscGVycyYgaml0KQoreworICAgIC8vIFdlIGRvbid0IGV4cGVjdCB0aGUgaW5jb21p
bmcgY29kZSB0byBoYXZlIHByZWRlY2Vzc29ycyBjb21wdXRlZC4KKyAgICBjb2RlLnJlc2V0UmVh
Y2hhYmlsaXR5KCk7CisgICAgCisgICAgaWYgKHNob3VsZFZhbGlkYXRlSVIoKSkKKyAgICAgICAg
dmFsaWRhdGUoY29kZSk7CisKKyAgICAvLyBJZiB3ZSdyZSBkb2luZyBzdXBlciB2ZXJib3NlIGR1
bXBpbmcsIHRoZSBwaGFzZSBzY29wZSBvZiBhbnkgcGhhc2Ugd2lsbCBhbHJlYWR5IGRvIGEgZHVt
cC4KKyAgICBpZiAoc2hvdWxkRHVtcElSKCkgJiYgIXNob3VsZER1bXBJUkF0RWFjaFBoYXNlKCkp
IHsKKyAgICAgICAgZGF0YUxvZygiSW5pdGlhbCBhaXI6XG4iKTsKKyAgICAgICAgZGF0YUxvZyhj
b2RlKTsKKyAgICB9CisKKyAgICAvLyBUaGlzIGlzIHdoZXJlIHdlIHJ1biBvdXIgb3B0aW1pemF0
aW9ucyBhbmQgdHJhbnNmb3JtYXRpb25zLgorICAgIC8vIEZJWE1FOiBBZGQgQWlyIG9wdGltaXph
dGlvbnMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDQ1NgorCisgICAgLy8gVGhpcyBpcyB3aGVyZSB3ZSB3b3VsZCBoYXZlIGEgcmVhbCByZWdpc3Rl
ciBhbGxvY2F0b3IuIFRoZW4sIHdlIGNvdWxkIHVzZSBzcGlsbEV2ZXJ5dGhpbmcoKQorICAgIC8v
IGluIHBsYWNlIG9mIHRoZSByZWdpc3RlciBhbGxvY2F0b3Igb25seSBmb3IgdGVzdGluZy4KKyAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDQ1
NworICAgIHNwaWxsRXZlcnl0aGluZyhjb2RlKTsKKworICAgIC8vIFByaW9yIHRvIHRoaXMgcG9p
bnQgdGhlIHByb2xvZ3VlIGFuZCBlcGlsb2d1ZSBpcyBpbXBsaWNpdC4gVGhpcyBtYWtlcyBpdCBl
eHBsaWNpdC4gSXQgYWxzbworICAgIC8vIGRvZXMgdGhpbmdzIGxpa2UgaWRlbnRpZnkgd2hpY2gg
Y2FsbGVlLXNhdmVzIHdlJ3JlIHVzaW5nIGFuZCBzYXZlcyB0aGVtLgorICAgIGhhbmRsZUNhbGxl
ZVNhdmVzKGNvZGUpOworCisgICAgLy8gVGhpcyB0dXJucyBhbGwgU3RhY2sgYW5kIENhbGxBcmcg
QXJncyBpbnRvIEFkZHIgYXJncyB0aGF0IHVzZSB0aGUgZnJhbWUgcG9pbnRlci4gSXQgZG9lcwor
ICAgIC8vIHRoaXMgYnkgZmlyc3QtZml0IGFsbG9jYXRpbmcgc3RhY2sgc2xvdHMuIEl0IHNob3Vs
ZCBiZSBwcmV0dHkgZGFybiBjbG9zZSB0byBvcHRpbWFsLCBzbyB3ZQorICAgIC8vIHNob3VsZG4n
dCBoYXZlIHRvIHdvcnJ5IGFib3V0IHRoaXMgdmVyeSBtdWNoLgorICAgIGFsbG9jYXRlU3RhY2so
Y29kZSk7CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlYWxseSBoYXZlIGEgY29kZSBsYXlv
dXQgb3B0aW1pemF0aW9uIGhlcmUuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1MDQ3OAorCisgICAgLy8gRklYTUU6IFdlIG5lZWQgYSBsYXRlIGxpdmVu
ZXNzIGFuYWx5c2lzIG92ZXIgcmVnaXN0ZXJzIHRvIGZpbGwgaW4gdGhlCisgICAgLy8gU3BlY2lh
bDo6cmVwb3J0VXNlZFJlZ2lzdGVycygpLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNTA1MTEKKworICAgIGlmIChzaG91bGRWYWxpZGF0ZUlSKCkpCisg
ICAgICAgIHZhbGlkYXRlKGNvZGUpOworCisgICAgLy8gRG8gYSBmaW5hbCBkdW1wIG9mIEFpci4g
Tm90ZSB0aGF0IHdlIGhhdmUgdG8gZG8gdGhpcyBldmVuIGlmIHdlIGFyZSBkb2luZyBwZXItcGhh
c2UgZHVtcGluZywKKyAgICAvLyBzaW5jZSB0aGUgZmluYWwgZ2VuZXJhdGlvbiBpcyBub3QgYSBw
aGFzZS4KKyAgICBpZiAoc2hvdWxkRHVtcElSKCkpIHsKKyAgICAgICAgZGF0YUxvZygiQWlyIGFm
dGVyICIsIGNvZGUubGFzdFBoYXNlTmFtZSgpLCAiLCBiZWZvcmUgZ2VuZXJhdGlvbjpcbiIpOwor
ICAgICAgICBkYXRhTG9nKGNvZGUpOworICAgIH0KKworICAgIC8vIEFuZCBub3csIHdlIGdlbmVy
YXRlIGNvZGUuCisgICAgaml0LmVtaXRGdW5jdGlvblByb2xvZ3VlKCk7CisgICAgaml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigtY29kZS5mcmFtZVNpemUoKSksIE1hY3JvQXNz
ZW1ibGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICBHZW5lcmF0aW9uQ29udGV4dCBj
b250ZXh0OworICAgIGNvbnRleHQuY29kZSA9ICZjb2RlOworICAgIEluZGV4TWFwPEJhc2ljQmxv
Y2ssIENDYWxsSGVscGVyczo6TGFiZWw+IGJsb2NrTGFiZWxzKGNvZGUuc2l6ZSgpKTsKKyAgICBJ
bmRleE1hcDxCYXNpY0Jsb2NrLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0PiBibG9ja0p1bXBzKGNv
ZGUuc2l6ZSgpKTsKKworICAgIGF1dG8gbGluayA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpKdW1wIGp1
bXAsIEJhc2ljQmxvY2sqIHRhcmdldCkgeworICAgICAgICBpZiAoYmxvY2tMYWJlbHNbdGFyZ2V0
XS5pc1NldCgpKSB7CisgICAgICAgICAgICBqdW1wLmxpbmtUbyhibG9ja0xhYmVsc1t0YXJnZXRd
LCAmaml0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGJsb2Nr
SnVtcHNbdGFyZ2V0XS5hcHBlbmQoanVtcCk7CisgICAgfTsKKworICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIGJsb2NrSnVtcHNbYmxvY2tdLmxpbmsoJmppdCk7
CisgICAgICAgIEFTU0VSVChibG9jay0+c2l6ZSgpID49IDEpOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgYmxvY2stPnNpemUoKSAtIDE7ICsraSkgeworICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpKdW1wIGp1bXAgPSBibG9jay0+YXQoaSkuZ2VuZXJhdGUoaml0LCBjb250ZXh0
KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoanVtcCwgIWp1bXAuaXNTZXQoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBpZiAoYmxvY2stPmxhc3QoKS5vcGNvZGUgPT0gSnVtcAorICAgICAg
ICAgICAgJiYgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDApID09IGNvZGUuZmluZE5leHRCbG9jayhi
bG9jaykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoYmxvY2stPmxhc3Qo
KS5vcGNvZGUgPT0gUmV0KSB7CisgICAgICAgICAgICAvLyBXZSBjdXJyZW50bHkgZG9uJ3QgcmVw
cmVzZW50IHRoZSBmdWxsIHByb2xvZ3VlL2VwaWxvZ3VlIGluIEFpciwgc28gd2UgbmVlZCB0bwor
ICAgICAgICAgICAgLy8gaGF2ZSB0aGlzIG92ZXJyaWRlLgorICAgICAgICAgICAgaml0LmVtaXRG
dW5jdGlvbkVwaWxvZ3VlKCk7CisgICAgICAgICAgICBqaXQucmV0KCk7CisgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
IGp1bXAgPSBibG9jay0+bGFzdCgpLmdlbmVyYXRlKGppdCwgY29udGV4dCk7CisgICAgICAgIGZv
ciAoSW5zdCYgaW5zdCA6ICpibG9jaykKKyAgICAgICAgICAgIGp1bXAgPSBpbnN0LmdlbmVyYXRl
KGppdCwgY29udGV4dCk7CisgICAgICAgIHN3aXRjaCAoYmxvY2stPm51bVN1Y2Nlc3NvcnMoKSkg
eworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBBU1NFUlQoIWp1bXAuaXNTZXQoKSk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgbGluayhqdW1w
LCBibG9jay0+c3VjY2Vzc29yQmxvY2soMCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgMjoKKyAgICAgICAgICAgIGxpbmsoanVtcCwgYmxvY2stPnN1Y2Nlc3NvckJsb2NrKDAp
KTsKKyAgICAgICAgICAgIGlmIChibG9jay0+c3VjY2Vzc29yQmxvY2soMSkgIT0gY29kZS5maW5k
TmV4dEJsb2NrKGJsb2NrKSkKKyAgICAgICAgICAgICAgICBsaW5rKGppdC5qdW1wKCksIGJsb2Nr
LT5zdWNjZXNzb3JCbG9jaygxKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVs
dDoKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAoYXV0byYgbGF0ZVBhdGggOiBj
b250ZXh0LmxhdGVQYXRocykKKyAgICAgICAgbGF0ZVBhdGgtPnJ1bihqaXQsIGNvbnRleHQpOwor
fQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUo
QjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJhdGUu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyR2VuZXJh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyR2VuZXJhdGVfaAorI2RlZmlu
ZSBBaXJHZW5lcmF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsK
KworY2xhc3MgQ0NhbGxIZWxwZXJzOworCituYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsK
KworY2xhc3MgQ29kZTsKKworLy8gVGhpcyB0YWtlcyBhbiBBaXI6OkNvZGUgdGhhdCBoYXNuJ3Qg
aGFkIGFueSBzdGFjayBhbGxvY2F0aW9uIGFuZCBvcHRpb25hbGx5IGhhc24ndCBoYWQgYW55Cisv
LyByZWdpc3RlciBhbGxvY2F0aW9uIGFuZCBkb2VzIGJvdGggb2YgdGhvc2UgdGhpbmdzLCBhbmQg
dGhlbiBnZW5lcmF0ZXMgdGhlIGNvZGUgdXNpbmcgdGhlIGdpdmVuCisvLyBDQ2FsbEhlbHBlcnMg
aW5zdGFuY2UuIE5vdGUgdGhhdCB0aGlzIG1heSBjYWxsIGNhbGxiYWNrcyBpbiB0aGUgc3VwcGxp
ZWQgY29kZSBhcyBpdCBpcworLy8gZ2VuZXJhdGluZy4KK3ZvaWQgZ2VuZXJhdGUoQ29kZSYsIEND
YWxsSGVscGVycyYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2VuZXJhdGVfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRlZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0ZWQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworLy8gVGhpcyBpcyBnZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyNp
bmNsdWRlICJBaXJPcGNvZGVHZW5lcmF0ZWQuaCIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckdlbmVyYXRpb25Db250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJHZW5lcmF0
aW9uQ29udGV4dC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJHZW5lcmF0aW9uQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJHZW5lcmF0aW9uQ29udGV4dF9oCisjZGVmaW5lIEFpckdlbmVyYXRpb25Db250ZXh0X2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3N0cnVjdCBHZW5l
cmF0aW9uQ29udGV4dCB7CisgICAgdHlwZWRlZiB2b2lkIExhdGVQYXRoRnVuY3Rpb24oQ0NhbGxI
ZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8TGF0
ZVBhdGhGdW5jdGlvbj4gTGF0ZVBhdGg7CisKKyAgICBWZWN0b3I8UmVmUHRyPExhdGVQYXRoPj4g
bGF0ZVBhdGhzOworICAgIENvZGUqIGNvZGU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyR2Vu
ZXJhdGlvbkNvbnRleHRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckhhbmRsZUNhbGxlZVNhdmVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySGFuZGxlQ2FsbGVlU2F2ZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJIYW5kbGVD
YWxsZWVTYXZlcy5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUu
aCIKKyNpbmNsdWRlICJBaXJJbnNlcnRpb25TZXQuaCIKKyNpbmNsdWRlICJBaXJQaGFzZVNjb3Bl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKwor
dm9pZCBoYW5kbGVDYWxsZWVTYXZlcyhDb2RlJiBjb2RlKQoreworICAgIFBoYXNlU2NvcGUgcGhh
c2VTY29wZShjb2RlLCAiaGFuZGxlQ2FsbGVlU2F2ZXMiKTsKKworICAgIFJlZ2lzdGVyU2V0IHVz
ZWRDYWxsZWVTYXZlczsKKworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Cisg
ICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgeworICAgICAgICAgICAgaW5zdC5mb3JF
YWNoVG1wRmFzdCgKKyAgICAgICAgICAgICAgICBbJl0gKFRtcCYgdG1wKSB7CisgICAgICAgICAg
ICAgICAgICAgIC8vIEF0IGZpcnN0IHdlIGp1c3QgcmVjb3JkIGFsbCB1c2VkIHJlZ3MuCisgICAg
ICAgICAgICAgICAgICAgIHVzZWRDYWxsZWVTYXZlcy5zZXQodG1wLnJlZygpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIE5vdyB3ZSBmaWx0ZXIgdG8g
cmVhbGx5IGdldCB0aGUgY2FsbGVlIHNhdmVzLgorICAgIHVzZWRDYWxsZWVTYXZlcy5maWx0ZXIo
UmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CisKKyAgICBpZiAoIXVzZWRDYWxs
ZWVTYXZlcy5udW1iZXJPZlNldFJlZ2lzdGVycygpKQorICAgICAgICByZXR1cm47CisKKyAgICBj
b2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSA9IFJlZ2lzdGVyQXRPZmZzZXRMaXN0KHVzZWRDYWxs
ZWVTYXZlcyk7CisKKyAgICBzaXplX3QgYnl0ZVNpemUgPSAwOworICAgIGZvciAoY29uc3QgUmVn
aXN0ZXJBdE9mZnNldCYgZW50cnkgOiBjb2RlLmNhbGxlZVNhdmVSZWdpc3RlcnMoKSkKKyAgICAg
ICAgYnl0ZVNpemUgPSBzdGQ6Om1heChzdGF0aWNfY2FzdDxzaXplX3Q+KC1lbnRyeS5vZmZzZXQo
KSksIGJ5dGVTaXplKTsKKworICAgIFN0YWNrU2xvdCogc2F2ZXNBcmVhID0gY29kZS5hZGRTdGFj
a1Nsb3QoYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgLy8gVGhpcyBpcyBh
IGJpdCB3ZWlyZCBzaW5jZSB3ZSBjb3VsZCBoYXZlIGFscmVhZHkgcGlubmVkIGEgZGlmZmVyZW50
IHN0YWNrIHNsb3QgdG8gdGhpcworICAgIC8vIGFyZWEuIEFsc28sIG91ciBydW50aW1lIGRvZXMg
bm90IHJlcXVpcmUgdXMgdG8gcGluIHRoZSBzYXZlcyBhcmVhLiBNYXliZSB3ZSBzaG91bGRuJ3Qg
cGluIGl0PworICAgIHNhdmVzQXJlYS0+c2V0T2Zmc2V0RnJvbUZQKC1ieXRlU2l6ZSk7CisKKyAg
ICBhdXRvIGFyZ0ZvciA9IFsmXSAoY29uc3QgUmVnaXN0ZXJBdE9mZnNldCYgZW50cnkpIC0+IEFy
ZyB7CisgICAgICAgIHJldHVybiBBcmc6OnN0YWNrKHNhdmVzQXJlYSwgZW50cnkub2Zmc2V0KCkg
KyBieXRlU2l6ZSk7CisgICAgfTsKKworICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29k
ZSk7CisgICAgCisgICAgLy8gRmlyc3QgaW5zZXJ0IHNhdmluZyBjb2RlIGluIHRoZSBwcm9sb2d1
ZS4KKyAgICBmb3IgKGNvbnN0IFJlZ2lzdGVyQXRPZmZzZXQmIGVudHJ5IDogY29kZS5jYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpIHsKKyAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAg
ICAgIDAsIGVudHJ5LnJlZygpLmlzR1BSKCkgPyBNb3ZlIDogTW92ZURvdWJsZSwgY29kZVswXS0+
YXQoMCkub3JpZ2luLAorICAgICAgICAgICAgVG1wKGVudHJ5LnJlZygpKSwgYXJnRm9yKGVudHJ5
KSk7CisgICAgfQorICAgIGluc2VydGlvblNldC5leGVjdXRlKGNvZGVbMF0pOworCisgICAgLy8g
Tm93IGluc2VydCByZXN0b3JlIGNvZGUgYXQgZXBpbG9ndWVzLgorICAgIGZvciAoQmFzaWNCbG9j
ayogYmxvY2sgOiBjb2RlKSB7CisgICAgICAgIEluc3QmIGxhc3QgPSBibG9jay0+bGFzdCgpOwor
ICAgICAgICBpZiAobGFzdC5vcGNvZGUgIT0gUmV0KQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgZm9yIChjb25zdCBSZWdpc3RlckF0T2Zmc2V0JiBlbnRyeSA6IGNvZGUuY2FsbGVl
U2F2ZVJlZ2lzdGVycygpKSB7CisgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0KAorICAg
ICAgICAgICAgICAgIGJsb2NrLT5zaXplKCkgLSAxLCBlbnRyeS5yZWcoKS5pc0dQUigpID8gTW92
ZSA6IE1vdmVEb3VibGUsIGxhc3Qub3JpZ2luLAorICAgICAgICAgICAgICAgIGFyZ0ZvcihlbnRy
eSksIFRtcChlbnRyeS5yZWcoKSkpOworICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5l
eGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpB
aXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpckhhbmRsZUNhbGxlZVNhdmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJIYW5kbGVDYWxsZWVTYXZlcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJIYW5kbGVDYWxsZWVTYXZlc19oCisjZGVm
aW5lIEFpckhhbmRsZUNhbGxlZVNhdmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworY2xhc3MgQ29kZTsK
KworLy8gVGhpcyBwaGFzZSBpZGVudGlmaWVzIGNhbGxlZS1zYXZlIHJlZ2lzdGVycyBhbmQgYWRk
cyBjb2RlIHRvIHNhdmUvcmVzdG9yZSB0aGVtIGluIHRoZQorLy8gcHJvbG9ndWUvZXBpbG9ndWUg
dG8gdGhlIGNvZGUuIEl0J3MgYSBtYW5kYXRvcnkgcGhhc2UuCisKKy8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSBjb29sIHRvIG1ha2UgdGhpcyBtb3JlIGludGVyYWN0aXZlIHdpdGggdGhlIEFpciBjbGll
bnQgYW5kIGFsc28gbW9yZQorLy8gcG93ZXJmdWwuCisvLyBXZSBzaG91bGQgaGF2ZSBzaHJpbmsg
d3JhcHBpbmc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA0NTgK
Ky8vIFdlIHNob3VsZCBtYWtlIHRoaXMgaW50ZXJhY3Qgd2l0aCB0aGUgY2xpZW50OiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNDU5CisKK3ZvaWQgaGFuZGxlQ2Fs
bGVlU2F2ZXMoQ29kZSYpOworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySGFuZGxlQ2FsbGVlU2F2ZXNf
aAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRp
b25TZXQuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnNlcnRpb25TZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkFpckluc2VydGlvblNldC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc2VydGlvblNldDo6ZXhlY3V0ZShCYXNp
Y0Jsb2NrKiBibG9jaykKK3sKKyAgICBleGVjdXRlSW5zZXJ0aW9ucyhibG9jay0+bV9pbnN0cywg
bV9pbnNlcnRpb25zKTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJbnNlcnRpb25TZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0Fpckluc2VydGlvblNldC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJJbnNlcnRpb25TZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQWlySW5zZXJ0aW9uU2V0X2gKKyNkZWZpbmUgQWlySW5zZXJ0aW9uU2V0X2gKKwor
I2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSA8d3Rm
L0luc2VydGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBCYXNpY0Jsb2NrOworY2xh
c3MgQ29kZTsKKwordHlwZWRlZiBXVEY6Okluc2VydGlvbjxJbnN0PiBJbnNlcnRpb247CisKK2Ns
YXNzIEluc2VydGlvblNldCB7CitwdWJsaWM6CisgICAgSW5zZXJ0aW9uU2V0KENvZGUmIGNvZGUp
CisgICAgICAgIDogbV9jb2RlKGNvZGUpCisgICAgeworICAgIH0KKworICAgIENvZGUmIGNvZGUo
KSB7IHJldHVybiBtX2NvZGU7IH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgdm9p
ZCBhcHBlbmRJbnNlcnRpb24oVCYmIGluc2VydGlvbikKKyAgICB7CisgICAgICAgIG1faW5zZXJ0
aW9ucy5hcHBlbmQoc3RkOjpmb3J3YXJkPFQ+KGluc2VydGlvbikpOworICAgIH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEluc3Q+CisgICAgdm9pZCBpbnNlcnRJbnN0KHNpemVfdCBpbmRleCwg
SW5zdCYmIGluc3QpCisgICAgeworICAgICAgICBhcHBlbmRJbnNlcnRpb24oSW5zZXJ0aW9uKGlu
ZGV4LCBzdGQ6OmZvcndhcmQ8SW5zdD4oaW5zdCkpKTsKKyAgICB9CisgICAgCisgICAgdGVtcGxh
dGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAgIHZvaWQgaW5zZXJ0KHNpemVfdCBpbmRleCwg
QXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgIHsKKyAgICAgICAgaW5zZXJ0SW5zdChpbmRl
eCwgSW5zdChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKSk7CisgICAgfQor
CisgICAgdm9pZCBleGVjdXRlKEJhc2ljQmxvY2sqKTsKKworcHJpdmF0ZToKKyAgICBDb2RlJiBt
X2NvZGU7CisgICAgVmVjdG9yPEluc2VydGlvbiwgOD4gbV9pbnNlcnRpb25zOworfTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpckluc2VydGlvblNldF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJbnN0LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlySW5zdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiQWlySW5zdC5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKwor
I2luY2x1ZGUgIkIzVmFsdWUuaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIEluc3Q6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQob3Bjb2RlLCAiICIs
IGxpc3REdW1wKGFyZ3MpKTsKKyAgICBpZiAob3JpZ2luKSB7CisgICAgICAgIGlmIChhcmdzLnNp
emUoKSkKKyAgICAgICAgICAgIG91dC5wcmludCgiLCAiKTsKKyAgICAgICAgb3V0LnByaW50KCpv
cmlnaW4pOworICAgIH0KK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisj
ZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySW5zdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJJbnN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0X2gKKyNkZWZp
bmUgQWlySW5zdF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQXJnLmgi
CisjaW5jbHVkZSAiQWlyT3Bjb2RlLmgiCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisKK25h
bWVzcGFjZSBKU0MgeworCitjbGFzcyBDQ2FsbEhlbHBlcnM7CitjbGFzcyBSZWdpc3RlclNldDsK
KworbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFsdWU7CisKK25hbWVzcGFjZSBBaXIgeworCitz
dHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK3N0cnVjdCBJbnN0IHsKK3B1YmxpYzoKKyAgICB0
eXBlZGVmIFZlY3RvcjxBcmcsIDM+IEFyZ0xpc3Q7CisKKyAgICBJbnN0KCkKKyAgICAgICAgOiBv
cmlnaW4obnVsbHB0cikKKyAgICAgICAgLCBvcGNvZGUoTm9wKQorICAgIHsKKyAgICB9CisgICAg
CisgICAgSW5zdChPcGNvZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luKQorICAgICAgICA6IG9yaWdp
bihvcmlnaW4pCisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorICAgIAor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KKyAgICBJbnN0KE9wY29kZSBvcGNv
ZGUsIFZhbHVlKiBvcmlnaW4sIEFyZyBhcmcsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAg
ICAgIDogYXJnc3sgYXJnLCBhcmd1bWVudHMuLi4gfQorICAgICAgICAsIG9yaWdpbihvcmlnaW4p
CisgICAgICAgICwgb3Bjb2RlKG9wY29kZSkKKyAgICB7CisgICAgfQorCisgICAgSW5zdChPcGNv
ZGUgb3Bjb2RlLCBWYWx1ZSogb3JpZ2luLCBjb25zdCBBcmdMaXN0JiBhcmd1bWVudHMpCisgICAg
ICAgIDogYXJncyhhcmd1bWVudHMpCisgICAgICAgICwgb3JpZ2luKG9yaWdpbikKKyAgICAgICAg
LCBvcGNvZGUob3Bjb2RlKQorICAgIHsKKyAgICB9CisKKyAgICBJbnN0KE9wY29kZSBvcGNvZGUs
IFZhbHVlKiBvcmlnaW4sIEFyZ0xpc3QmJiBhcmd1bWVudHMpCisgICAgICAgIDogYXJncyhXVEY6
Om1vdmUoYXJndW1lbnRzKSkKKyAgICAgICAgLCBvcmlnaW4ob3JpZ2luKQorICAgICAgICAsIG9w
Y29kZShvcGNvZGUpCisgICAgeworICAgIH0KKworICAgIC8vIE5vdGUgdGhhdCB0aGVzZSBmdW5j
dG9ycyBhbGwgYXZvaWQgdXNpbmcgImNvbnN0IiBiZWNhdXNlIHdlIHdhbnQgdG8gdXNlIHRoZW0g
Zm9yIHRoaW5ncyB0aGF0CisgICAgLy8gZWRpdCBJUi4gSVIgaXMgbWVhbnQgdG8gYmUgZWRpdGVk
OyBpZiB5b3UncmUgY2FycnlpbmcgYXJvdW5kIGEgImNvbnN0IEluc3QmIiB0aGVuIHlvdSdyZQor
ICAgIC8vIHByb2JhYmx5IGRvaW5nIGl0IHdyb25nLgorCisgICAgLy8gVGhpcyBvbmx5IHdhbGtz
IHRob3NlIFRtcHMgdGhhdCBhcmUgZXhwbGljaXRseSBtZW50aW9uZWQsIGFuZCBpdCBkb2Vzbid0
IHRlbGwgeW91IHRoZWlyIHJvbGUKKyAgICAvLyBvciB0eXBlLgorICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CisgICAgdm9pZCBmb3JFYWNoVG1wRmFzdChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yKQorICAgIHsKKyAgICAgICAgZm9yIChBcmcmIGFyZyA6IGFyZ3MpCisgICAgICAgICAgICBh
cmcuZm9yRWFjaFRtcEZhc3QoZnVuY3Rvcik7CisgICAgfQorCisgICAgdHlwZWRlZiB2b2lkIEVh
Y2hBcmdDYWxsYmFjayhBcmcmLCBBcmc6OlJvbGUsIEFyZzo6VHlwZSk7CisgICAgCisgICAgLy8g
Q2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAoYXJnLCByb2xlLCB0eXBlKS4gVGhpcyBmdW5jdGlvbiBp
cyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3IucmIuCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGZvckVhY2hBcmcoY29uc3QgRnVuY3Rv
ciYpOworCisgICAgLy8gQ2FsbHMgdGhlIGZ1bmN0b3Igd2l0aCAodG1wLCByb2xlLCB0eXBlKS4K
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaFRtcChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgZm9yRWFjaEFyZygKKyAgICAgICAg
ICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgeworICAg
ICAgICAgICAgICAgIGFyZy5mb3JFYWNoVG1wKHJvbGUsIHR5cGUsIGZ1bmN0b3IpOworICAgICAg
ICAgICAgfSk7CisgICAgfQorCisgICAgLy8gVGhpbmcgY2FuIGJlIGVpdGhlciBBcmcgb3IgVG1w
LgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRoaW5nLCB0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZv
aWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJik7CisKKyAgICAvLyBSZXR1cm5zIHRydWUgaWYgdGhp
cyBpbnN0cnVjdGlvbiBoYXMgYSBTcGVjaWFsKi4gVGhpcyB1bmxvY2tzIHNvbWUgZXh0cmEgZnVu
Y3Rpb25hbGl0eS4KKyAgICBib29sIGhhc1NwZWNpYWwoKSBjb25zdDsKKworICAgIC8vIFJlcG9y
dHMgYW55IGFkZGl0aW9uYWwgcmVnaXN0ZXJzIGNsb2JiZXJlZCBieSB0aGlzIG9wZXJhdGlvbi4g
Tm90ZSB0aGF0IGZvciBlZmZpY2llbmN5LAorICAgIC8vIGV4dHJhQ2xvYmJlcmVkUmVncygpIG9u
bHkgd29ya3MgaWYgaGFzU3BlY2lhbCgpIHJldHVybnMgdHJ1ZS4KKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKCk7CisKKyAgICAvLyBVc2UgdGhpcyB0byByZXBvcnQg
d2hpY2ggcmVnaXN0ZXJzIGFyZSBsaXZlLiBUaGlzIHNob3VsZCBiZSBkb25lIGp1c3QgYmVmb3Jl
IGNvZGVnZW4uIE5vdGUKKyAgICAvLyB0aGF0IGZvciBlZmZpY2llbmN5LCByZXBvcnRVc2VkUmVn
aXN0ZXJzKCkgb25seSB3b3JrcyBpZiBoYXNTcGVjaWFsKCkgcmV0dXJucyB0cnVlLgorICAgIHZv
aWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhjb25zdCBSZWdpc3RlclNldCYpOworCisgICAgLy8gSXMg
dGhpcyBpbnN0cnVjdGlvbiBpbiBvbmUgb2YgdGhlIHZhbGlkIGZvcm1zIHJpZ2h0IG5vdz8gVGhp
cyBmdW5jdGlvbiBpcyBhdXRvLWdlbmVyYXRlZCBieQorICAgIC8vIG9wY29kZV9nZW5lcmF0b3Iu
cmIuCisgICAgYm9vbCBpc1ZhbGlkRm9ybSgpOworCisgICAgLy8gQXNzdW1pbmcgdGhpcyBpbnN0
cnVjdGlvbiBpcyBpbiBhIHZhbGlkIGZvcm0gcmlnaHQgbm93LCB3aWxsIGl0IHN0aWxsIGJlIGlu
IG9uZSBvZiB0aGUgdmFsaWQKKyAgICAvLyBmb3JtcyBpZiB3ZSBwdXQgYW4gQWRkciByZWZlcmVu
Y2luZyB0aGUgc3RhY2sgKG9yIGEgU3RhY2tTbG90IG9yIENhbGxBcmcsIG9mIGNvdXJzZSkgaW4g
dGhlCisgICAgLy8gZ2l2ZW4gaW5kZXg/IFNwaWxsaW5nIHVzZXMgdGhpczogaXQgd2Fsa3MgdGhl
IGFyZ3MgYnkgaW5kZXggdG8gZmluZCBUbXBzIHRoYXQgbmVlZCBzcGlsbGluZzsKKyAgICAvLyBp
ZiBpdCBmaW5kcyBvbmUsIGl0IGNhbGxzIHRoaXMgdG8gc2VlIGlmIGl0IGNhbiByZXBsYWNlIHRo
ZSBBcmc6OlRtcCB3aXRoIGFuIEFyZzo6QWRkci4gSWYgaXQKKyAgICAvLyBmaW5kcyBhIG5vbi1U
bXAgQXJnLCB0aGVuIGl0IGNhbGxzIHRoYXQgQXJnJ3MgZm9yRWFjaFRtcCB0byBkbyBhIHJlcGxh
Y2VtZW50IHRoYXQgd2F5LgorICAgIC8vCisgICAgLy8gVGhpcyBmdW5jdGlvbiBpcyBhdXRvLWdl
bmVyYXRlZCBieSBvcGNvZGVfZ2VuZXJhdG9yLnJiLgorICAgIGJvb2wgYWRtaXRzU3RhY2sodW5z
aWduZWQgYXJnSW5kZXgpOworCisgICAgLy8gR2VuZXJhdGUgc29tZSBjb2RlIGZvciB0aGlzIGlu
c3RydWN0aW9uLiBUaGlzIGlzLCBsaWtlLCBsaXRlcmFsbHkgb3VyIGJhY2tlbmQuIElmIHRoaXMg
aXMgdGhlCisgICAgLy8gdGVybWluYWwsIGl0IHJldHVybnMgdGhlIGp1bXAgdGhhdCBuZWVkcyB0
byBiZSBsaW5rZWQgZm9yIHRoZSAidGhlbiIgY2FzZSwgd2l0aCB0aGUgImVsc2UiCisgICAgLy8g
Y2FzZSBiZWluZyBmYWxsLXRocm91Z2guIFRoaXMgZnVuY3Rpb24gaXMgYXV0by1nZW5lcmF0ZWQg
Ynkgb3Bjb2RlX2dlbmVyYXRvci5yYi4KKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUo
Q0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvbkNvbnRleHQmKTsKKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworCisgICAgQXJnTGlzdCBhcmdzOworICAgIFZhbHVlKiBvcmlnaW47
IC8vIFRoZSBCMzo6VmFsdWUgdGhhdCB0aGlzIG9yaWdpbmF0ZWQgZnJvbS4KKyAgICBPcGNvZGUg
b3Bjb2RlOworfTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpckluc3RfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJJbnN0SW5saW5lc19oCisjZGVmaW5lIEFpckluc3RJ
bmxpbmVzX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJJbnN0LmgiCisj
aW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKKyNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCisjaW5j
bHVkZSAiQjNTdGFja21hcC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKKworbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgRm9yRWFjaDsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8VG1wPiB7CisgICAg
dGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JFYWNoKEluc3Qm
IGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBpbnN0LmZvckVh
Y2hUbXAoZnVuY3Rvcik7CisgICAgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IEZvckVhY2g8QXJn
PiB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgdm9pZCBmb3JF
YWNoKEluc3QmIGluc3QsIGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBp
bnN0LmZvckVhY2hBcmcoZnVuY3Rvcik7CisgICAgfQorfTsKKwordGVtcGxhdGU8dHlwZW5hbWUg
VGhpbmcsIHR5cGVuYW1lIEZ1bmN0b3I+Cit2b2lkIEluc3Q6OmZvckVhY2goY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKK3sKKyAgICBGb3JFYWNoPFRoaW5nPjo6Zm9yRWFjaCgqdGhpcywgZnVuY3Rv
cik7Cit9CisKK2lubGluZSBib29sIEluc3Q6Omhhc1NwZWNpYWwoKSBjb25zdAoreworICAgIHJl
dHVybiBhcmdzLnNpemUoKSAmJiBhcmdzWzBdLmlzU3BlY2lhbCgpOworfQorCitpbmxpbmUgY29u
c3QgUmVnaXN0ZXJTZXQmIEluc3Q6OmV4dHJhQ2xvYmJlcmVkUmVncygpCit7CisgICAgQVNTRVJU
KGhhc1NwZWNpYWwoKSk7CisgICAgcmV0dXJuIGFyZ3NbMF0uc3BlY2lhbCgpLT5leHRyYUNsb2Ji
ZXJlZFJlZ3MoKnRoaXMpOworfQorCitpbmxpbmUgdm9pZCBJbnN0OjpyZXBvcnRVc2VkUmVnaXN0
ZXJzKGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKQoreworICAgIEFTU0VSVChoYXNT
cGVjaWFsKCkpOworICAgIGFyZ3NbMF0uc3BlY2lhbCgpLT5yZXBvcnRVc2VkUmVnaXN0ZXJzKCp0
aGlzLCB1c2VkUmVnaXN0ZXJzKTsKK30KKworaW5saW5lIGJvb2wgaXNTaGlmdFZhbGlkKGNvbnN0
IEluc3QmIGluc3QpCit7CisjaWYgQ1BVKFg4NikgfHwgQ1BVKFg4Nl82NCkKKyAgICByZXR1cm4g
aW5zdC5hcmdzWzBdID09IFRtcChYODZSZWdpc3RlcnM6OmVjeCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShpbnN0KTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorfSAgIAorCitpbmxpbmUg
Ym9vbCBpc0xzaGlmdDMyVmFsaWQoY29uc3QgSW5zdCYgaW5zdCkKK3sKKyAgICByZXR1cm4gaXNT
aGlmdFZhbGlkKGluc3QpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlySW5zdElubGluZXNfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyTGl2ZW5lc3NfaAorI2RlZmluZSBBaXJM
aXZlbmVzc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQWlyQmFzaWNCbG9j
ay5oIgorI2luY2x1ZGUgIkIzSW5kZXhNYXAuaCIKKyNpbmNsdWRlICJCM0luZGV4U2V0LmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworLy8gWW91
IGNhbiBjb21wdXRlIGxpdmVuZXNzIG92ZXIgVG1wJ3Mgb3Igb3ZlciBBcmcncy4gSWYgeW91IGNv
bXB1dGUgb3ZlciBBcmcncywgeW91IGdldCBib3RoCisvLyBzdGFjayBsaXZlbmVzcyBhbmQgdG1w
IGxpdmVuZXNzLgordGVtcGxhdGU8dHlwZW5hbWUgVGhpbmc+CitjbGFzcyBMaXZlbmVzcyB7Citw
dWJsaWM6CisgICAgTGl2ZW5lc3MoQ29kZSYgY29kZSkKKyAgICB7CisgICAgICAgIG1fbGl2ZUF0
SGVhZC5yZXNpemUoY29kZS5zaXplKCkpOworICAgICAgICBtX2xpdmVBdFRhaWwucmVzaXplKGNv
ZGUuc2l6ZSgpKTsKKworICAgICAgICBJbmRleFNldDxCYXNpY0Jsb2NrPiBzZWVuOworCisgICAg
ICAgIGJvb2wgY2hhbmdlZCA9IHRydWU7CisgICAgICAgIHdoaWxlIChjaGFuZ2VkKSB7CisgICAg
ICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisKKyAgICAgICAgICAgIGZvciAoc2l6ZV90IGJsb2Nr
SW5kZXggPSBjb2RlLnNpemUoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gY29kZS5hdChibG9ja0luZGV4KTsKKyAgICAgICAgICAgICAgICBM
b2NhbENhbGMgbG9jYWxDYWxjKCp0aGlzLCBibG9jayk7CisgICAgICAgICAgICAgICAgZm9yIChz
aXplX3QgaW5zdEluZGV4ID0gYmxvY2stPnNpemUoKTsgaW5zdEluZGV4LS07KQorICAgICAgICAg
ICAgICAgICAgICBsb2NhbENhbGMuZXhlY3V0ZShibG9jay0+YXQoaW5zdEluZGV4KSk7CisgICAg
ICAgICAgICAgICAgYm9vbCBmaXJzdFRpbWUgPSBzZWVuLmFkZChibG9jayk7CisgICAgICAgICAg
ICAgICAgaWYgKCFmaXJzdFRpbWUgJiYgbG9jYWxDYWxjLmxpdmUoKSA9PSBtX2xpdmVBdEhlYWRb
YmxvY2tdKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHByZWRlY2Vz
c29yIDogYmxvY2stPnByZWRlY2Vzc29ycygpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fbGl2
ZUF0VGFpbFtwcmVkZWNlc3Nvcl0uYWRkKAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxD
YWxjLmxpdmUoKS5iZWdpbigpLCBsb2NhbENhbGMubGl2ZSgpLmVuZCgpKTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgbV9saXZlQXRIZWFkW2Jsb2NrXSA9IGxvY2FsQ2FsYy50
YWtlTGl2ZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgY29uc3Qg
SGFzaFNldDxUaGluZz4mIGxpdmVBdEhlYWQoQmFzaWNCbG9jayogYmxvY2spIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gbV9saXZlQXRIZWFkW2Jsb2NrXTsKKyAgICB9CisKKyAgICBjb25z
dCBIYXNoU2V0PFRoaW5nPiYgbGl2ZUF0VGFpbChCYXNpY0Jsb2NrKiBibG9jaykgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBtX2xpdmVBdFRhaWxbYmxvY2tdOworICAgIH0KKworICAgIC8v
IFRoaXMgY2FsY3VsYXRvciBoYXMgdG8gYmUgcnVuIGluIHJldmVyc2UuCisgICAgY2xhc3MgTG9j
YWxDYWxjIHsKKyAgICBwdWJsaWM6CisgICAgICAgIExvY2FsQ2FsYyhMaXZlbmVzcyYgbGl2ZW5l
c3MsIEJhc2ljQmxvY2sqIGJsb2NrKQorICAgICAgICAgICAgOiBtX2xpdmUobGl2ZW5lc3MubGl2
ZUF0VGFpbChibG9jaykpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IEhh
c2hTZXQ8VGhpbmc+JiBsaXZlKCkgY29uc3QgeyByZXR1cm4gbV9saXZlOyB9CisgICAgICAgIEhh
c2hTZXQ8VGhpbmc+JiYgdGFrZUxpdmUoKSB7IHJldHVybiBXVEY6Om1vdmUobV9saXZlKTsgfQor
CisgICAgICAgIHZvaWQgZXhlY3V0ZShJbnN0JiBpbnN0KQorICAgICAgICB7CisgICAgICAgICAg
ICAvLyBGaXJzdCBoYW5kbGUgZGVmJ3MuCisgICAgICAgICAgICBpbnN0LmZvckVhY2g8VGhpbmc+
KAorICAgICAgICAgICAgICAgIFt0aGlzXSAoVGhpbmcmIGFyZywgQXJnOjpSb2xlIHJvbGUsIEFy
Zzo6VHlwZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc0FsaXZlKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6
OmlzRGVmKHJvbGUpKQorICAgICAgICAgICAgICAgICAgICAgICAgbV9saXZlLnJlbW92ZShhcmcp
OworICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAvLyBOZXh0IGhhbmRsZSBjbG9i
YmVyZWQgcmVnaXN0ZXJzLgorICAgICAgICAgICAgaWYgKGluc3QuaGFzU3BlY2lhbCgpKSB7Cisg
ICAgICAgICAgICAgICAgaW5zdC5leHRyYUNsb2JiZXJlZFJlZ3MoKS5mb3JFYWNoKAorICAgICAg
ICAgICAgICAgICAgICBbdGhpc10gKFJlZyByZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1fbGl2ZS5yZW1vdmUoVGhpbmcoVG1wKHJlZykpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIEZpbmFsbHkgaGFu
ZGxlIHVzZSdzLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoPFRoaW5nPigKKyAgICAgICAgICAg
ICAgICBbdGhpc10gKFRoaW5nJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaXNBbGl2ZSgpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkK
KyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGl2ZS5hZGQoYXJnKTsKKyAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgSGFzaFNldDxUaGluZz4g
bV9saXZlOworICAgIH07CisgICAgCitwcml2YXRlOgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ss
IEhhc2hTZXQ8VGhpbmc+PiBtX2xpdmVBdEhlYWQ7CisgICAgSW5kZXhNYXA8QmFzaWNCbG9jaywg
SGFzaFNldDxUaGluZz4+IG1fbGl2ZUF0VGFpbDsKK307CisKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJM
aXZlbmVzc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyT3Bjb2Rl
Lm9wY29kZXMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJP
cGNvZGUub3Bjb2RlcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyT3Bjb2RlLm9wY29kZXMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNjIgQEAKKyMg
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMg
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMg
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVU
T1JTIGBgQVMgSVMnJworIyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorIyBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05U
UklCVVRPUlMKKyMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorIyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorIyBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MKKyMgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4KKyMgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyMgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgor
IyBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyMgU3lsbGFidXM6CisjCisjIFJv
bGVzIGFuZCB0eXBlczoKKyMgVTpHID0+IHVzZSBvZiBhIGdlbmVyYWwtcHVycG9zZSByZWdpc3Rl
ciBvciB2YWx1ZQorIyBEOkcgPT4gZGVmIG9mIGEgZ2VuZXJhbC1wdXJwb3NlIHJlZ2lzdGVyIG9y
IHZhbHVlCisjIFVEOkcgPT4gdXNlIGFuZCBkZWYgb2YgYSBnZW5lcmFsLXB1cnBvc2UgcmVnaXN0
ZXIgb3IgdmFsdWUKKyMgVTpGID0+IHVzZSBvZiBhIGZsb2F0IHJlZ2lzdGVyIG9yIHZhbHVlCisj
IEQ6RiA9PiBkZWYgb2YgYSBmbG9hdCByZWdpc3RlciBvciB2YWx1ZQorIyBVRDpGID0+IHVzZSBh
bmQgZGVmIG9mIGEgZmxvYXQgcmVnaXN0ZXIgb3IgdmFsdWUKKyMKKyMgQXJndW1lbnQga2luZHM6
CisjIFRtcCA9PiB0ZW1wb3Jhcnkgb3IgcmVnaXN0ZXIKKyMgSW1tID0+IDMyLWJpdCBpbW1lZGlh
dGUgaW50CisjIEltbTY0ID0+IFRydXN0ZWRJbW02NAorIyBBZGRyID0+IGFkZHJlc3MgYXMgdGVt
cG9yYXJ5L3JlZ2lzdGVyK29mZnNldAorIyBJbmRleCA9PiBCYXNlSW5kZXggYWRkcmVzcworIyBB
YnMgPT4gQWJzb2x1dGVBZGRyZXNzCisjCisjIFRoZSBwYXJzZXIgdmlld3MgdGhlc2UgdGhpbmdz
IGFzIGtleXdvcmRzLCBhbmQgdW5kZXJzdGFuZHMgdGhhdCB0aGV5IGZhbGwgaW50byB0d28gZGlz
dGluY3QgY2xhc3NlcworIyBvZiB0aGluZ3MuIFNvLCBhbHRob3VnaCB0aGlzIGZpbGUgdXNlcyBh
IHBhcnRpY3VsYXIgaW5kZW50YXRpb24gc3R5bGUsIG5vbmUgb2YgdGhlIHdoaXRlc3BhY2Ugb3IK
KyMgZXZlbiBuZXdsaW5lcyBhcmUgbWVhbmluZ2Z1bCB0byB0aGUgcGFyc2VyLiBGb3IgZXhhbXBs
ZSwgeW91IGNvdWxkIHdyaXRlOgorIworIyBGb280MiBVOkcsIFVEOkYgSW1tLCBUbXAgQWRkciwg
VG1wCisjCisjIEFuZCB0aGUgcGFyc2VyIHdvdWxkIGtub3cgdGhhdCB0aGlzIGlzIHRoZSBzYW1l
IGFzOgorIworIyBGb280MiBVOkcsIFVEOkYKKyMgICAgIEltbSwgVG1wCisjICAgICBBZGRyLCBU
bXAKKyMKKyMgSS5lLiBhIHR3by1mb3JtIGluc3RydWN0aW9uIHRoYXQgdXNlcyBhIEdQUiBvciBh
biBpbnQgaW1tZWRpYXRlIGFuZCB1c2VzK2RlZnMgYSBmbG9hdCByZWdpc3Rlci4KKworIyBOb3Rl
IHRoYXQgdGhlIG9wY29kZXMgaGVyZSBoYXZlIGEgbGVhZGluZyBjYXBpdGFsIChBZGQzMikgYnV0
IG11c3QgY29ycmVzcG9uZCB0byBNYWNyb0Fzc2VtYmxlcgorIyBBUEkgdGhhdCBoYXMgYSBsZWFk
aW5nIGxvd2VyLWNhc2UgKGFkZDMyKS4KKworTm9wCisKK0FkZDMyIFU6RywgVUQ6RworICAgIFRt
cCwgVG1wCisgICAgSW1tLCBBZGRyCisgICAgSW1tLCBUbXAKKyAgICBBZGRyLCBUbXAKKyAgICBU
bXAsIEFkZHIKKworQWRkMzIgVTpHLCBVOkcsIEQ6RworICAgIEltbSwgVG1wLCBUbXAKKworQWRk
NjQgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBJbW0sIEFkZHIKKyAgICBJbW0sIFRtcAor
ICAgIEFkZHIsIFRtcAorCitBZGQ2NCBVOkcsIFU6RywgRDpHCisgICAgSW1tLCBUbXAsIFRtcAor
CitBbmQzMiBVOkcsIFVEOkcKKyAgICBUbXAsIFRtcAorICAgIEltbSwgVG1wCisgICAgVG1wLCBB
ZGRyCisgICAgQWRkciwgVG1wCisgICAgSW1tLCBBZGRyCisKK0FuZDY0IFU6RywgVUQ6RworICAg
IFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKworTHNoaWZ0MzIgVTpHLCBVRDpHCisgICAgVG1wKiwg
VG1wCisgICAgSW1tLCBUbXAKKworTXVsMzIgVTpHLCBVRDpHCisgICAgVG1wLCBUbXAKKyAgICBB
ZGRyLCBUbXAKKworIyBOb3RlIHRoYXQgTW92ZSBvcGVyYXRlcyBvdmVyIHRoZSBmdWxsIHJlZ2lz
dGVyIHNpemUsIHdoaWNoIGlzIGVpdGhlciAzMi1iaXQgb3IgNjQtYml0IGRlcGVuZGluZyBvbgor
IyB0aGUgcGxhdGZvcm0uIEknbSBub3QgZW50aXJlbHkgc3VyZSB0aGF0IHRoaXMgaXMgYSBnb29k
IHRoaW5nOyBpdCBtaWdodCBiZSBiZXR0ZXIgdG8ganVzdCBoYXZlIGEKKyMgTW92ZTY0IGluc3Ry
dWN0aW9uLiBPVE9ILCBvdXIgTWFjcm9Bc3NlbWJsZXJzIGFscmVhZHkgaGF2ZSB0aGlzIG5vdGlv
biBvZiAibW92ZSgpIiB0aGF0IGJhc2ljYWxseQorIyBtZWFucyBtb3ZlUHRyLgorTW92ZSBVOkcs
IEQ6RworICAgIFRtcCwgVG1wCisgICAgSW1tLCBUbXAKKyAgICBJbW02NCwgVG1wCisgICAgQWRk
ciwgVG1wIGFzIGxvYWRQdHIgIyBUaGlzIG1lYW5zIHRoYXQgIk1vdmUgQWRkciwgVG1wIiBpcyBj
b2RlLWdlbmVyYXRlZCBhcyAibG9hZCIgbm90ICJtb3ZlIi4KKyAgICBJbmRleCwgVG1wIGFzIGxv
YWRQdHIKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVQdHIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3Jl
UHRyCisKK01vdmUzMiBVOkcsIEQ6RworICAgIFRtcCwgVG1wIGFzIHplcm9FeHRlbmQzMlRvUHRy
CisgICAgQWRkciwgVG1wIGFzIGxvYWQzMgorICAgIEluZGV4LCBUbXAgYXMgbG9hZDMyCisgICAg
VG1wLCBBZGRyIGFzIHN0b3JlMzIKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlMzIKKworTW92ZURv
dWJsZSBVOkYsIEQ6RgorICAgIFRtcCwgVG1wCisgICAgQWRkciwgVG1wIGFzIGxvYWREb3VibGUK
KyAgICBJbmRleCwgVG1wIGFzIGxvYWREb3VibGUKKyAgICBUbXAsIEFkZHIgYXMgc3RvcmVEb3Vi
bGUKKyAgICBUbXAsIEluZGV4IGFzIHN0b3JlRG91YmxlCisKK01vdmU2NFRvRG91YmxlIFU6Rywg
RDpGCisgICAgVG1wLCBUbXAKKworTW92ZURvdWJsZVRvNjQgVTpGLCBEOkcKKyAgICBUbXAsIFRt
cAorCitCcmFuY2hBZGQzMiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1w
LCBUbXAKKyAgICBSZXNDb25kLCBJbW0sIFRtcAorICAgIFJlc0NvbmQsIEltbSwgQWRkcgorICAg
IFJlc0NvbmQsIFRtcCwgQWRkcgorICAgIFJlc0NvbmQsIEFkZHIsIFRtcAorCitCcmFuY2hNdWwz
MiBVOkcsIFU6RywgVUQ6RyAvYnJhbmNoCisgICAgUmVzQ29uZCwgVG1wLCBUbXAKKyAgICBSZXND
b25kLCBBZGRyLCBUbXAKKworQnJhbmNoU3ViMzIgVTpHLCBVOkcsIFVEOkcgL2JyYW5jaAorICAg
IFJlc0NvbmQsIFRtcCwgVG1wCisgICAgUmVzQ29uZCwgSW1tLCBUbXAKKyAgICBSZXNDb25kLCBJ
bW0sIEFkZHIKKyAgICBSZXNDb25kLCBUbXAsIEFkZHIKKyAgICBSZXNDb25kLCBBZGRyLCBUbXAK
KworQnJhbmNoTmVnMzIgVTpHLCBVRDpHIC9icmFuY2gKKyAgICBSZXNDb25kLCBUbXAKKworSnVt
cCAvYnJhbmNoCisKK1JldCAvdGVybWluYWwKKworQnJlYWtwb2ludCAvdGVybWluYWwKKworIyBB
aXIgYWxsb3dzIGZvciBleG90aWMgYmVoYXZpb3IuIEEgUGF0Y2gncyBiZWhhdmlvciBpcyBkZXRl
cm1pbmVkIGVudGlyZWx5IGJ5IHRoZSBTcGVjaWFsIG9wZXJhbmQsCisjIHdoaWNoIG11c3QgYmUg
dGhlIGZpcnN0IG9wZXJhbmQuCitzcGVjaWFsIFBhdGNoCisKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQaGFzZVNjb3BlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUGhhc2VTY29wZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQWlyUGhhc2VTY29wZS5o
IgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkFpckNvZGUuaCIKKyNpbmNsdWRl
ICJBaXJWYWxpZGF0ZS5oIgorI2luY2x1ZGUgIkIzQ29tbW9uLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworUGhhc2VTY29wZTo6UGhhc2VTY29w
ZShDb2RlJiBjb2RlLCBjb25zdCBjaGFyKiBuYW1lKQorICAgIDogbV9jb2RlKGNvZGUpCisgICAg
LCBtX25hbWUobmFtZSkKK3sKKyAgICBpZiAoc2hvdWxkRHVtcElSQXRFYWNoUGhhc2UoKSkgewor
ICAgICAgICBkYXRhTG9nKCJBaXIgYWZ0ZXIgIiwgY29kZS5sYXN0UGhhc2VOYW1lKCksICIsIGJl
Zm9yZSAiLCBuYW1lLCAiOlxuIik7CisgICAgICAgIGRhdGFMb2coY29kZSk7CisgICAgfQorCisg
ICAgaWYgKHNob3VsZFNhdmVJUkJlZm9yZVBoYXNlKCkpCisgICAgICAgIG1fZHVtcEJlZm9yZSA9
IHRvQ1N0cmluZyhjb2RlKTsKK30KKworUGhhc2VTY29wZTo6flBoYXNlU2NvcGUoKQoreworICAg
IG1fY29kZS5zZXRMYXN0UGhhc2VOYW1lKG1fbmFtZSk7CisgICAgaWYgKHNob3VsZFZhbGlkYXRl
SVJBdEVhY2hQaGFzZSgpKQorICAgICAgICB2YWxpZGF0ZShtX2NvZGUsIG1fZHVtcEJlZm9yZS5k
YXRhKCkpOworfQorCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJQ
aGFzZVNjb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJQaGFzZVNjb3BlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclBoYXNlU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyUGhh
c2VTY29wZV9oCisjZGVmaW5lIEFpclBoYXNlU2NvcGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkK
KworI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJp
bmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewor
CitjbGFzcyBDb2RlOworCitjbGFzcyBQaGFzZVNjb3BlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShQaGFzZVNjb3BlKTsKK3B1YmxpYzoKKyAgICBQaGFzZVNjb3BlKENvZGUmLCBjb25zdCBj
aGFyKiBuYW1lKTsKKyAgICB+UGhhc2VTY29wZSgpOyAvLyB0aGlzIGRvZXMgdmFsaWRhdGlvbgor
Citwcml2YXRlOgorICAgIENvZGUmIG1fY29kZTsKKyAgICBjb25zdCBjaGFyKiBtX25hbWU7Cisg
ICAgQ1N0cmluZyBtX2R1bXBCZWZvcmU7Cit9OworCit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQWlyUGhhc2VT
Y29wZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQ
cmlvcml0eS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJSZWdpc3RlclByaW9yaXR5LmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclJlZ2lzdGVyUHJpb3JpdHkuaCIK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NvbnN0IFZlY3Rv
cjxHUFJSZWc+JiBncHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVjdG9yPEdQ
UlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6
OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAgICAgcmVz
dWx0ID0gbmV3IFZlY3RvcjxHUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdpc3RlclNldCBhbGwg
PSBSZWdpc3RlclNldDo6YWxsR1BScygpOworICAgICAgICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0
ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgICAgICAgICAgYWxsLmV4Y2x1ZGUoUmVnaXN0
ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgICAgICAgICBSZWdpc3Rl
clNldCBjYWxsZWVTYXZlID0gUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKTsKKyAg
ICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykgewor
ICAgICAgICAgICAgICAgICAgICBpZiAoIWNhbGxlZVNhdmUuZ2V0KHJlZykpCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZChyZWcuZ3ByKCkpOworICAgICAgICAgICAgICAg
IH0pOworICAgICAgICAgICAgYWxsLmZvckVhY2goCisgICAgICAgICAgICAgICAgWyZdIChSZWcg
cmVnKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjYWxsZWVTYXZlLmdldChyZWcpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmdwcigpKTsKKyAgICAgICAg
ICAgICAgICB9KTsKKyAgICAgICAgfSk7CisgICAgcmV0dXJuICpyZXN1bHQ7Cit9CisKK2NvbnN0
IFZlY3RvcjxGUFJSZWc+JiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICBzdGF0aWMgVmVj
dG9yPEZQUlJlZz4qIHJlc3VsdDsKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZTsKKyAg
ICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAgICAgW10geworICAgICAgICAg
ICAgcmVzdWx0ID0gbmV3IFZlY3RvcjxGUFJSZWc+KCk7CisgICAgICAgICAgICBSZWdpc3RlclNl
dCBhbGwgPSBSZWdpc3RlclNldDo6YWxsRlBScygpOworICAgICAgICAgICAgUmVnaXN0ZXJTZXQg
Y2FsbGVlU2F2ZSA9IFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAg
ICAgICBhbGwuZm9yRWFjaCgKKyAgICAgICAgICAgICAgICBbJl0gKFJlZyByZWcpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaWYgKCFjYWxsZWVTYXZlLmdldChyZWcpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgcmVzdWx0LT5hcHBlbmQocmVnLmZwcigpKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGFsbC5mb3JFYWNoKAorICAgICAgICAgICAgICAgIFsmXSAoUmVnIHJlZykg
eworICAgICAgICAgICAgICAgICAgICBpZiAoY2FsbGVlU2F2ZS5nZXQocmVnKSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kKHJlZy5mcHIoKSk7CisgICAgICAgICAgICAg
ICAgfSk7CisgICAgICAgIH0pOworICAgIHJldHVybiAqcmVzdWx0OworfQorCitjb25zdCBWZWN0
b3I8UmVnPiYgcmVnc0luUHJpb3JpdHlPcmRlcihBcmc6OlR5cGUgdHlwZSkKK3sKKyAgICBzdGF0
aWMgVmVjdG9yPFJlZz4qIHJlc3VsdFtBcmc6Om51bVR5cGVzXTsKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZTsKKyAgICBzdGQ6OmNhbGxfb25jZSgKKyAgICAgICAgb25jZSwKKyAgICAg
ICAgW10geworICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdID0gbmV3IFZlY3RvcjxSZWc+KCk7
CisgICAgICAgICAgICBmb3IgKEdQUlJlZyByZWcgOiBncHJzSW5Qcmlvcml0eU9yZGVyKCkpCisg
ICAgICAgICAgICAgICAgcmVzdWx0W0FyZzo6R1BdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAg
ICAgICAgcmVzdWx0W0FyZzo6RlBdID0gbmV3IFZlY3RvcjxSZWc+KCk7CisgICAgICAgICAgICBm
b3IgKEZQUlJlZyByZWcgOiBmcHJzSW5Qcmlvcml0eU9yZGVyKCkpCisgICAgICAgICAgICAgICAg
cmVzdWx0W0FyZzo6RlBdLT5hcHBlbmQoUmVnKHJlZykpOworICAgICAgICB9KTsKKyAgICByZXR1
cm4gKnJlc3VsdFt0eXBlXTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyUmVnaXN0ZXJQcmlvcml0eS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJSZWdpc3RlclByaW9yaXR5LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclJlZ2lzdGVyUHJpb3JpdHlfaAorI2RlZmluZSBBaXJS
ZWdpc3RlclByaW9yaXR5X2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJB
cmcuaCIKKyNpbmNsdWRlICJGUFJJbmZvLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVz
cGFjZSBBaXIgeworCitjb25zdCBWZWN0b3I8R1BSUmVnPiYgZ3Byc0luUHJpb3JpdHlPcmRlcigp
OworY29uc3QgVmVjdG9yPEZQUlJlZz4mIGZwcnNJblByaW9yaXR5T3JkZXIoKTsKKwordGVtcGxh
dGU8dHlwZW5hbWUgQmFuaz4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjsKK3RlbXBs
YXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlPcmRlcjxHUFJJbmZvPiB7CisgICAgY29u
c3QgVmVjdG9yPEdQUlJlZz4mIGluUHJpb3JpdHlPcmRlcigpIHsgcmV0dXJuIGdwcnNJblByaW9y
aXR5T3JkZXIoKTsgfQorfTsKK3RlbXBsYXRlPD4gc3RydWN0IFJlZ2lzdGVyc0luUHJpb3JpdHlP
cmRlcjxGUFJJbmZvPiB7CisgICAgY29uc3QgVmVjdG9yPEZQUlJlZz4mIGluUHJpb3JpdHlPcmRl
cigpIHsgcmV0dXJuIGZwcnNJblByaW9yaXR5T3JkZXIoKTsgfQorfTsKKwordGVtcGxhdGU8dHlw
ZW5hbWUgQmFuaz4KK2NvbnN0IFZlY3Rvcjx0eXBlbmFtZSBCYW5rOjpSZWdpc3RlclR5cGU+JiBy
ZWdzSW5Qcmlvcml0eU9yZGVyKCkKK3sKKyAgICByZXR1cm4gUmVnaXN0ZXJzSW5Qcmlvcml0eU9y
ZGVyPEJhbms+OjppblByaW9yaXR5T3JkZXIoKTsKK30KKworY29uc3QgVmVjdG9yPFJlZz4mIHJl
Z3NJblByaW9yaXR5T3JkZXIoQXJnOjpUeXBlKTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEFpclJlZ2lz
dGVyUHJpb3JpdHlfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNw
ZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BlY2lhbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwZWNpYWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkFpclNwZWNpYWwuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitjb25zdCBjaGFyKiBjb25zdCBTcGVjaWFsOjpkdW1w
UHJlZml4ID0gIiYiOworCitTcGVjaWFsOjpTcGVjaWFsKCkKKyAgICA6IG1faW5kZXgoVUlOVF9N
QVgpCit7Cit9CisKK1NwZWNpYWw6On5TcGVjaWFsKCkKK3sKK30KKworQ1N0cmluZyBTcGVjaWFs
OjpuYW1lKCkgY29uc3QKK3sKKyAgICBTdHJpbmdQcmludFN0cmVhbSBvdXQ7CisgICAgZHVtcElt
cGwob3V0KTsKKyAgICByZXR1cm4gb3V0LnRvQ1N0cmluZygpOworfQorCit2b2lkIFNwZWNpYWw6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoZHVtcFByZWZp
eCk7CisgICAgZHVtcEltcGwob3V0KTsKKyAgICBpZiAobV9pbmRleCAhPSBVSU5UX01BWCkKKyAg
ICAgICAgb3V0LnByaW50KG1faW5kZXgpOworfQorCit2b2lkIFNwZWNpYWw6OmRlZXBEdW1wKFBy
aW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCp0aGlzLCAiOiAiKTsKKyAg
ICBkZWVwRHVtcEltcGwob3V0KTsKK30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFp
cgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJTcGVjaWFsX2gKKyNkZWZpbmUgQWlyU3BlY2lhbF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQor
CisjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCitzdHJ1Y3QgR2VuZXJhdGlvbkNvbnRleHQ7CisKK2Ns
YXNzIFNwZWNpYWwgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFNwZWNpYWwpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBjb25zdCBjaGFyKiBj
b25zdCBkdW1wUHJlZml4OworICAgIAorICAgIFNwZWNpYWwoKTsKKyAgICB2aXJ0dWFsIH5TcGVj
aWFsKCk7CisKKyAgICBDU3RyaW5nIG5hbWUoKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBm
b3JFYWNoQXJnKEluc3QmLCBjb25zdCBTY29wZWRMYW1iZGE8SW5zdDo6RWFjaEFyZ0NhbGxiYWNr
PiYpID0gMDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNWYWxpZChJbnN0JikgPSAwOworICAgIHZpcnR1
YWwgYm9vbCBhZG1pdHNTdGFjayhJbnN0JiwgdW5zaWduZWQgYXJnSW5kZXgpID0gMDsKKworICAg
IC8vIFRoaXMgZ2V0cyBjYWxsZWQgb24gZm9yIGVhY2ggSW5zdCB0aGF0IHVzZXMgdGhpcyBTcGVj
aWFsLiBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gd2F5IHRvCisgICAgLy8gZ3VhcmFudGVlIHRoYXQg
YSBTcGVjaWFsIGdldHMgdXNlZCBmcm9tIGp1c3Qgb25lIEluc3QsIGJlY2F1c2UgQWlyIG1pZ2h0
IHRhaWxkdXAgbGF0ZS4gU28sCisgICAgLy8gaWYgeW91IHdhbnQgdG8gcGFzcyB0aGlzIGluZm9y
bWF0aW9uIGRvd24gdG8gZ2VuZXJhdGUoKSwgdGhlbiB5b3UgaGF2ZSB0byBlaXRoZXI6CisgICAg
Ly8KKyAgICAvLyAxKSBHZW5lcmF0ZSBBaXIgdGhhdCBzdGFydHMgd2l0aCBhIHNlcGFyYXRlIFNw
ZWNpYWwgcGVyIFBhdGNoIEluc3QsIGFuZCB0aGVuIG1lcmdlCisgICAgLy8gICAgdXNlZFJlZ2lz
dGVyIHNldHMuIFRoaXMgaXMgcHJvYmFibHkgbm90IGdyZWF0LCBidXQgaXQgb3B0aW1pemVzIGZv
ciB0aGUgY29tbW9uIGNhc2UgdGhhdAorICAgIC8vICAgIEFpciBkaWRuJ3QgZHVwbGljYXRlIGNv
ZGUgb3IgdGhhdCBzdWNoIGR1cGxpY2F0aW9uIGRpZG4ndCBjYXVzZSBhbnkgaW50ZXJlc3Rpbmcg
Y2hhbmdlcyB0bworICAgIC8vICAgIHJlZ2lzdGVyIGFzc2lnbm1lbnQuCisgICAgLy8KKyAgICAv
LyAyKSBIYXZlIHRoZSBTcGVjaWFsIG1haW50YWluIGEgSGFzaE1hcDxJbnN0KiwgUmVnaXN0ZXJT
ZXQ+LiBUaGlzIHdvcmtzIGJlY2F1c2UgdGhlIGFuYWx5c2lzCisgICAgLy8gICAgdGhhdCBmZWVk
cyBpbnRvIHRoaXMgY2FsbCBpcyBwZXJmb3JtZWQganVzdCBiZWZvcmUgY29kZSBnZW5lcmF0aW9u
IGFuZCB0aGVyZSBpcyBubyB3YXkKKyAgICAvLyAgICBmb3IgdGhlIFZlY3Rvcjw+J3MgdGhhdCBj
b250YWluIHRoZSBJbnN0cyB0byBiZSByZWFsbG9jYXRlZC4gVGhpcyBhbGxvd3MgZ2VuZXJhdGUo
KSB0bworICAgIC8vICAgIGNvbnN1bHQgdGhlIEhhc2hNYXAuCisgICAgLy8KKyAgICAvLyAzKSBI
eWJyaWQ6IHlvdSBjb3VsZCB1c2UgKDEpIGFuZCBmaXJlIHVwIGEgSGFzaE1hcCBpZiB5b3Ugc2Vl
IG11bHRpcGxlIGNhbGxzLgorICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGl0J3Mgbm90IHBvc3Np
YmxlIHRvIHJlbHkgb24gcmVwb3J0VXNlZFJlZ2lzdGVycygpIGJlaW5nIGNhbGxlZCBpbiB0aGUg
c2FtZSBvcmRlcgorICAgIC8vIGFzIGdlbmVyYXRlKCkuIElmIHdlIGNvdWxkIHJlbHkgb24gdGhh
dCwgdGhlbiB3ZSBjb3VsZCBqdXN0IGhhdmUgZWFjaCBTcGVjaWFsIGluc3RhbmNlCisgICAgLy8g
bWFpbnRhaW4gYSBWZWN0b3Igb2YgUmVnaXN0ZXJTZXQncyBhbmQgdGhlbiBwcm9jZXNzIHRoYXQg
dmVjdG9yIGluIHRoZSByaWdodCBvcmRlciBpbgorICAgIC8vIGdlbmVyYXRlKCkuIEJ1dCwgdGhl
IG9yZGVyaW5nIGRpZmZlcmVuY2UgaXMgdW5saWtlbHkgdG8gY2hhbmdlIHNpbmNlIGl0IHdvdWxk
IGhhcm0gdGhlCisgICAgLy8gcGVyZm9ybWFuY2Ugb2YgdGhlIGxpdmVuZXNzIGFuYWx5c2lzLgor
ICAgIC8vCisgICAgLy8gQ3VycmVudGx5LCB3ZSBkbyAoMSkgZm9yIEIzIHN0YWNrbWFwcy4KKyAg
ICB2aXJ0dWFsIHZvaWQgcmVwb3J0VXNlZFJlZ2lzdGVycyhJbnN0JiwgY29uc3QgUmVnaXN0ZXJT
ZXQmKSA9IDA7CisgICAgCisgICAgdmlydHVhbCBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdGUo
SW5zdCYsIENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25Db250ZXh0JikgPSAwOworCisgICAgdmly
dHVhbCBjb25zdCBSZWdpc3RlclNldCYgZXh0cmFDbG9iYmVyZWRSZWdzKEluc3QmKSA9IDA7CisK
KyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFBy
aW50U3RyZWFtJikgY29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcElt
cGwoUHJpbnRTdHJlYW0mKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCB2b2lkIGRlZXBEdW1wSW1w
bChQcmludFN0cmVhbSYpIGNvbnN0ID0gMDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3Mg
Q29kZTsKKworICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4Owor
fTsKKworY2xhc3MgRGVlcFNwZWNpYWxEdW1wIHsKK3B1YmxpYzoKKyAgICBEZWVwU3BlY2lhbER1
bXAoY29uc3QgU3BlY2lhbCogc3BlY2lhbCkKKyAgICAgICAgOiBtX3NwZWNpYWwoc3BlY2lhbCkK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cisg
ICAgeworICAgICAgICBpZiAobV9zcGVjaWFsKQorICAgICAgICAgICAgbV9zcGVjaWFsLT5kZWVw
RHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBTcGVjaWFsKiBtX3NwZWNpYWw7Cit9Owor
CitpbmxpbmUgRGVlcFNwZWNpYWxEdW1wIGRlZXBEdW1wKGNvbnN0IFNwZWNpYWwqIHNwZWNpYWwp
Cit7CisgICAgcmV0dXJuIERlZXBTcGVjaWFsRHVtcChzcGVjaWFsKTsKK30KKworfSB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2Vu
ZGlmIC8vIEFpclNwZWNpYWxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJBaXJTcGlsbEV2ZXJ5
dGhpbmcuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJBaXJDb2RlLmgiCisj
aW5jbHVkZSAiQWlySW5zZXJ0aW9uU2V0LmgiCisjaW5jbHVkZSAiQWlySW5zdElubGluZXMuaCIK
KyNpbmNsdWRlICJBaXJMaXZlbmVzcy5oIgorI2luY2x1ZGUgIkFpclBoYXNlU2NvcGUuaCIKKyNp
bmNsdWRlICJBaXJSZWdpc3RlclByaW9yaXR5LmgiCisjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK3ZvaWQg
c3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCit7CisgICAgUGhhc2VTY29wZSBwaGFzZVNjb3Bl
KGNvZGUsICJzcGlsbEV2ZXJ5dGhpbmciKTsKKworICAgIC8vIFdlIHdhbnQgdG8ga25vdyB0aGUg
c2V0IG9mIHJlZ2lzdGVycyB1c2VkIGF0IGV2ZXJ5IHBvaW50IGluIGV2ZXJ5IGJhc2ljIGJsb2Nr
LgorICAgIEluZGV4TWFwPEJhc2ljQmxvY2ssIFZlY3RvcjxSZWdpc3RlclNldD4+IHVzZWRSZWdp
c3RlcnMoY29kZS5zaXplKCkpOworICAgIExpdmVuZXNzPFRtcD4gbGl2ZW5lc3MoY29kZSk7Cisg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IGNvZGUpIHsKKyAgICAgICAgTGl2ZW5lc3M8VG1w
Pjo6TG9jYWxDYWxjIGxvY2FsQ2FsYyhsaXZlbmVzcywgYmxvY2spOworICAgICAgICB1c2VkUmVn
aXN0ZXJzW2Jsb2NrXS5yZXNpemUoYmxvY2stPnNpemUoKSArIDEpOworCisgICAgICAgIGF1dG8g
c2V0VXNlZFJlZ2lzdGVycyA9IFsmXSAodW5zaWduZWQgaW5kZXgsIEluc3QmIGluc3QpIHsKKyAg
ICAgICAgICAgIFJlZ2lzdGVyU2V0JiByZWdpc3RlclNldCA9IHVzZWRSZWdpc3RlcnNbYmxvY2td
W2luZGV4XTsKKyAgICAgICAgICAgIGZvciAoVG1wIHRtcCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsK
KyAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAgIHJl
Z2lzdGVyU2V0LnNldCh0bXAucmVnKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAv
LyBHb3R0YSBhY2NvdW50IGZvciBkZWFkIGFzc2lnbm1lbnRzIHRvIHJlZ2lzdGVycy4gVGhlc2Ug
bWF5IGhhcHBlbiBiZWNhdXNlIHRoZSBpbnB1dAorICAgICAgICAgICAgLy8gY29kZSBpcyBzdWJv
cHRpbWFsLgorICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAorICAgICAgICAgICAgICAgIFsm
XSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNEZWYocm9sZSkgJiYgYXJnLmlzUmVnKCkpCisgICAgICAgICAgICAg
ICAgICAgICAgICByZWdpc3RlclNldC5zZXQoYXJnLnJlZygpKTsKKyAgICAgICAgICAgICAgICB9
KTsKKyAgICAgICAgfTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IGJsb2Nr
LT5zaXplKCk7IGluc3RJbmRleC0tOykgeworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgc2V0VXNlZFJlZ2lzdGVycyhpbnN0SW5kZXgg
KyAxLCBpbnN0KTsKKyAgICAgICAgICAgIGxvY2FsQ2FsYy5leGVjdXRlKGluc3QpOworICAgICAg
ICB9CisKKyAgICAgICAgSW5zdCBub3A7CisgICAgICAgIHNldFVzZWRSZWdpc3RlcnMoMCwgbm9w
KTsKKyAgICB9CisKKyAgICAvLyBBbGxvY2F0ZSBhIHN0YWNrIHNsb3QgZm9yIGVhY2ggdG1wLgor
ICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhbGxTdGFja1Nsb3RzW0FyZzo6bnVtVHlwZXNdOworICAg
IGZvciAodW5zaWduZWQgdHlwZUluZGV4ID0gMDsgdHlwZUluZGV4IDwgQXJnOjpudW1UeXBlczsg
Kyt0eXBlSW5kZXgpIHsKKyAgICAgICAgVmVjdG9yPFN0YWNrU2xvdCo+JiBzdGFja1Nsb3RzID0g
YWxsU3RhY2tTbG90c1t0eXBlSW5kZXhdOworICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHN0YXRp
Y19jYXN0PEFyZzo6VHlwZT4odHlwZUluZGV4KTsKKyAgICAgICAgc3RhY2tTbG90cy5yZXNpemUo
Y29kZS5udW1UbXBzKHR5cGUpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNv
ZGUubnVtVG1wcyh0eXBlKTsgdG1wSW5kZXgtLTspCisgICAgICAgICAgICBzdGFja1Nsb3RzW3Rt
cEluZGV4XSA9IGNvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7
CisgICAgfQorCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKKyAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGluc3RJ
bmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsraW5zdEluZGV4KSB7CisgICAg
ICAgICAgICBSZWdpc3RlclNldCYgc2V0QmVmb3JlID0gdXNlZFJlZ2lzdGVyc1tibG9ja11baW5z
dEluZGV4XTsKKyAgICAgICAgICAgIFJlZ2lzdGVyU2V0JiBzZXRBZnRlciA9IHVzZWRSZWdpc3Rl
cnNbYmxvY2tdW2luc3RJbmRleCArIDFdOworICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2Nr
LT5hdChpbnN0SW5kZXgpOworICAgICAgICAgICAgaW5zdC5mb3JFYWNoVG1wKAorICAgICAgICAg
ICAgICAgIFsmXSAoVG1wJiB0bXAsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUgdHlwZSkgewor
ICAgICAgICAgICAgICAgICAgICBpZiAodG1wLmlzUmVnKCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3Qg
PSBhbGxTdGFja1Nsb3RzW3R5cGVdW3RtcC50bXBJbmRleCgpXTsKKyAgICAgICAgICAgICAgICAg
ICAgQXJnIGFyZyA9IEFyZzo6c3RhY2soc3RhY2tTbG90KTsKKworICAgICAgICAgICAgICAgICAg
ICAvLyBOZWVkIHRvIGZpZ3VyZSBvdXQgYSByZWdpc3RlciB0byB1c2UuIEhvdyB3ZSBkbyB0aGF0
IGRlcGVuZHMgb24gdGhlIHJvbGUuCisgICAgICAgICAgICAgICAgICAgIFJlZyBjaG9zZW5SZWc7
CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAocm9sZSkgeworICAgICAgICAgICAgICAgICAg
ICBjYXNlIEFyZzo6VXNlOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDog
cmVnc0luUHJpb3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGlmICghc2V0QmVmb3JlLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNldEJlZm9yZS5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y2hvc2VuUmVnID0gcmVnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSBBcmc6OkRlZjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoUmVnIHJlZyA6IHJlZ3NJ
blByaW9yaXR5T3JkZXIodHlwZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
IXNldEFmdGVyLmdldChyZWcpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNl
dEFmdGVyLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaG9zZW5S
ZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6
VXNlRGVmOgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChSZWcgcmVnIDogcmVnc0luUHJp
b3JpdHlPcmRlcih0eXBlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2V0
QmVmb3JlLmdldChyZWcpICYmICFzZXRBZnRlci5nZXQocmVnKSkgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBzZXRBZnRlci5zZXQocmVnKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgc2V0QmVmb3JlLnNldChyZWcpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjaG9zZW5SZWcgPSByZWc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGNob3NlblJlZyk7CisK
KyAgICAgICAgICAgICAgICAgICAgdG1wID0gVG1wKGNob3NlblJlZyk7CisKKyAgICAgICAgICAg
ICAgICAgICAgT3Bjb2RlIG1vdmUgPSB0eXBlID09IEFyZzo6R1AgPyBNb3ZlIDogTW92ZURvdWJs
ZTsKKworICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1VzZShyb2xlKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydCgKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpbnN0SW5kZXgsIG1vdmUsIGluc3Qub3JpZ2luLCBhcmcsIHRtcCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNEZWYocm9s
ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQoCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaW5zdEluZGV4ICsgMSwgbW92ZSwgaW5zdC5vcmlnaW4s
IHRtcCwgYXJnKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0pOwor
ICAgICAgICB9CisgICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKKyAgICB9Cit9
CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0
aGluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bp
bGxFdmVyeXRoaW5nLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBB
aXJTcGlsbEV2ZXJ5dGhpbmdfaAorI2RlZmluZSBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCisjaWYg
RU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFj
ZSBBaXIgeworCitjbGFzcyBDb2RlOworCisvLyBUaGlzIGlzIGEgcGhhc2UgZm9yIHRlc3Rpbmcu
IEl0IGJlaGF2ZXMgbGlrZSBhIHJlZ2lzdGVyIGFsbG9jYXRvciBpbiB0aGUgc2Vuc2UgdGhhdCBp
dAorLy8gZWxpbWluYXRlcyB0ZW1wb3JhcmllcyBmcm9tIHRoZSBwcm9ncmFtLiBJdCBhY2NvbXBs
aXNoZXMgdGhpcyBieSBhbHdheXMgc3BpbGxpbmcgYWxsCisvLyB0ZW1wb3Jhcmllcy4gVGhlIHJl
c3VsdGluZyBjb2RlIGlzIGdvaW5nIHRvIGJlIHZlcnkgaW5lZmZpY2llbnQuIFRoaXMgcGhhc2Ug
aXMgZ3JlYXQgaWYgeW91CisvLyB0aGluayB0aGF0IHRoZXJlIGlzIGEgYnVnIGluIHRoZSByZWdp
c3RlciBhbGxvY2F0b3IuIFlvdSBjYW4gY29uZmlybSB0aGlzIGJ5IHJ1bm5pbmcgdGhpcworLy8g
cGhhc2UgaW5zdGVhZCBvZiB0aGUgcmVnaXN0ZXIgYWxsb2NhdG9yLgorLy8KKy8vIE5vdGUgdGhh
dCBldmVuIHRob3VnaCB0aGlzIHBoYXNlIGRvZXMgdGhlIGNoZWFwZXN0IHRoaW5nIHBvc3NpYmxl
LCBpdCdzIG5vdCBldmVuIHdyaXR0ZW4gaW4gYQorLy8gcGFydGljdWxhcmx5IGVmZmljaWVudCB3
YXkuIFNvLCBkb24ndCBnZXQgYW55IGlkZWFzIGFib3V0IHVzaW5nIHRoaXMgcGhhc2UgdG8gcmVk
dWNlIGNvbXBpbGVyCisvLyBsYXRlbmN5LiBJZiB5b3Ugd2FudGVkIHRvIGRvIHRoYXQsIHlvdSBz
aG91bGQgY29tZSB1cCB3aXRoIGEgY2xldmVyIGFsZ29yaXRobSBpbnN0ZWFkIG9mIHVzaW5nCisv
LyB0aGlzIHNpbGx5IHRoaW5nLgorCit2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJik7CisKK30g
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBBaXJTcGlsbEV2ZXJ5dGhpbmdfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgor
CisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3RhY2tTbG90VmFsdWUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeworCit2b2lkIFN0
YWNrU2xvdDo6c2V0T2Zmc2V0RnJvbUZQKGludHB0cl90IHZhbHVlKQoreworICAgIG1fb2Zmc2V0
RnJvbUZQID0gdmFsdWU7CisgICAgaWYgKG1fdmFsdWUpCisgICAgICAgIG1fdmFsdWUtPm1fb2Zm
c2V0RnJvbUZQID0gdmFsdWU7Cit9CisKK3ZvaWQgU3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJzdGFjayIsIG1faW5kZXgpOworfQorCit2
b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwg
bV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworICAgIGlmIChtX3ZhbHVlKQor
ICAgICAgICBvdXQucHJpbnQoIiwgdmFsdWUgPSAiLCAqbV92YWx1ZSk7Cit9CisKK1N0YWNrU2xv
dDo6U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90
S2luZCBraW5kLCBTdGFja1Nsb3RWYWx1ZSogdmFsdWUpCisgICAgOiBtX2J5dGVTaXplKGJ5dGVT
aXplKQorICAgICwgbV9pbmRleChpbmRleCkKKyAgICAsIG1fb2Zmc2V0RnJvbUZQKHZhbHVlID8g
dmFsdWUtPm9mZnNldEZyb21GUCgpIDogMCkKKyAgICAsIG1fa2luZChraW5kKQorICAgICwgbV92
YWx1ZSh2YWx1ZSkKK3sKKyAgICBBU1NFUlQoYnl0ZVNpemUpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDExNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEFpclN0YWNrU2xvdF9oCisjZGVmaW5lIEFpclN0YWNrU2xv
dF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgi
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uQ29weWFibGUu
aD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7CisKK2NsYXNzIFN0YWNrU2xvdFZhbHVlOworCituYW1lc3BhY2UgQWlyIHsKKwor
Y2xhc3MgU3RhY2tTbG90IHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShTdGFja1Nsb3QpOwor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHVuc2lnbmVkIGJ5dGVT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQorICAgIFN0YWNrU2xvdEtpbmQga2lu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3Qg
eyByZXR1cm4gbV9pbmRleDsgfQorCisgICAgdW5zaWduZWQgYWxpZ25tZW50KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIGlmIChieXRlU2l6ZSgpIDw9IDEpCisgICAgICAgICAgICByZXR1cm4gMTsK
KyAgICAgICAgaWYgKGJ5dGVTaXplKCkgPD0gMikKKyAgICAgICAgICAgIHJldHVybiAyOworICAg
ICAgICBpZiAoYnl0ZVNpemUoKSA8PSA0KQorICAgICAgICAgICAgcmV0dXJuIDQ7CisgICAgICAg
IHJldHVybiA4OworICAgIH0KKworICAgIFN0YWNrU2xvdFZhbHVlKiB2YWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWU7IH0KKworICAgIC8vIFplcm8gbWVhbnMgdGhhdCBpdCdzIG5vdCB5ZXQg
YXNzaWduZWQuCisgICAgaW50cHRyX3Qgb2Zmc2V0RnJvbUZQKCkgY29uc3QgeyByZXR1cm4gbV9v
ZmZzZXRGcm9tRlA7IH0KKworICAgIC8vIFRoaXMgc2hvdWxkIHVzdWFsbHkganVzdCBiZSBjYWxs
ZWQgZnJvbSBwaGFzZXMgdGhhdCBkbyBzdGFjayBhbGxvY2F0aW9uLiBCdXQgeW91IGNhbgorICAg
IC8vIHRvdGFsbHkgZm9yY2UgYSBzdGFjayBzbG90IHRvIGxhbmQgYXQgc29tZSBvZmZzZXQuCisg
ICAgdm9pZCBzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QpOworCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisgICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBDb2RlOworCisgICAgU3RhY2tTbG90KHVuc2ln
bmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCwgU3RhY2tTbG90VmFs
dWUqKTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplOworICAgIHVuc2lnbmVkIG1faW5k
ZXg7CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7CisgICAgU3RhY2tTbG90S2luZCBtX2tp
bmQ7CisgICAgU3RhY2tTbG90VmFsdWUqIG1fdmFsdWU7Cit9OworCitjbGFzcyBEZWVwU3RhY2tT
bG90RHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFN0YWNrU2xvdER1bXAoY29uc3QgU3RhY2tTbG90
KiBzbG90KQorICAgICAgICA6IG1fc2xvdChzbG90KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3Nsb3Qp
CisgICAgICAgICAgICBtX3Nsb3QtPmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0
IFN0YWNrU2xvdCogbV9zbG90OworfTsKKworaW5saW5lIERlZXBTdGFja1Nsb3REdW1wIGRlZXBE
dW1wKGNvbnN0IFN0YWNrU2xvdCogc2xvdCkKK3sKKyAgICByZXR1cm4gRGVlcFN0YWNrU2xvdER1
bXAoc2xvdCk7Cit9CisKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBBaXJTdGFja1Nsb3RfaAorCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclRtcC5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIg
eworCit2b2lkIFRtcDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIGlmICgh
KnRoaXMpIHsKKyAgICAgICAgb3V0LnByaW50KCI8bm9uZT4iKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChpc1JlZygpKSB7CisgICAgICAgIG91dC5wcmludChyZWcoKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoaXNHUCgpKSB7CisgICAgICAgIG91dC5w
cmludCgiJXRtcCIsIGdwVG1wSW5kZXgoKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBvdXQucHJpbnQoIiVmdG1wIiwgZnBUbXBJbmRleCgpKTsKK30KKworfSB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJUbXAuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyVG1wLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRl
ZiBBaXJUbXBfaAorI2RlZmluZSBBaXJUbXBfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2lu
Y2x1ZGUgIkZQUkluZm8uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiUmVnLmgi
CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7IG5hbWVzcGFjZSBBaXIgeworCitjbGFzcyBBcmc7CisKKy8vIEEgVG1wIGlzIGEgZ2VuZXJh
bGl6YXRpb24gb2YgYSByZWdpc3Rlci4gSXQgY2FuIGJlIHVzZWQgdG8gcmVmZXIgdG8gYW55IEdQ
UiBvciBGUFIuIEl0IGNhbiBhbHNvCisvLyBiZSB1c2VkIHRvIHJlZmVyIHRvIGFuIHVuYWxsb2Nh
dGVkIHJlZ2lzdGVyIChpLmUuIGEgdGVtcG9yYXJ5KS4gTGlrZSBtYW55IEFpciBjbGFzc2VzLCB3
ZSB1c2UKKy8vIGRlbGliZXJhdGVseSB0ZXJzZSBuYW1pbmcgc2luY2Ugd2Ugd2lsbCBoYXZlIHRv
IHVzZSB0aGlzIG5hbWUgYSBsb3QuCisKK2NsYXNzIFRtcCB7CitwdWJsaWM6CisgICAgVG1wKCkK
KyAgICAgICAgOiBtX3ZhbHVlKDApCisgICAgeworICAgIH0KKworICAgIGV4cGxpY2l0IFRtcChS
ZWcgcmVnKQorICAgIHsKKyAgICAgICAgaWYgKHJlZykgeworICAgICAgICAgICAgaWYgKHJlZy5p
c0dQUigpKQorICAgICAgICAgICAgICAgIG1fdmFsdWUgPSBlbmNvZGVHUFIocmVnLmdwcigpKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3ZhbHVlID0gZW5jb2RlRlBSKHJl
Zy5mcHIoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV92YWx1ZSA9IDA7CisgICAg
fQorCisgICAgZXhwbGljaXQgVG1wKGNvbnN0IEFyZyYpOworCisgICAgc3RhdGljIFRtcCBncFRt
cEZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAg
ICAgICAgcmVzdWx0Lm1fdmFsdWUgPSBlbmNvZGVHUFRtcChpbmRleCk7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgc3RhdGljIFRtcCBmcFRtcEZvckluZGV4KHVuc2lnbmVk
IGluZGV4KQorICAgIHsKKyAgICAgICAgVG1wIHJlc3VsdDsKKyAgICAgICAgcmVzdWx0Lm1fdmFs
dWUgPSBlbmNvZGVGUFRtcChpbmRleCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQor
CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuICEhbV92YWx1ZTsg
fQorCisgICAgYm9vbCBpc0dQKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29k
ZWRHUChtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBib29sIGlzRlAoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGlzRW5jb2RlZEZQKG1fdmFsdWUpOworICAgIH0KKworICAgIGJvb2wgaXNH
UFIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzRW5jb2RlZEdQUihtX3ZhbHVlKTsK
KyAgICB9CisKKyAgICBib29sIGlzRlBSKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBp
c0VuY29kZWRGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgYm9vbCBpc1JlZygpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gaXNHUFIoKSB8fCBpc0ZQUigpOworICAgIH0KKworICAgIEdQ
UlJlZyBncHIoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGRlY29kZUdQUihtX3ZhbHVl
KTsKKyAgICB9CisKKyAgICBGUFJSZWcgZnByKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVy
biBkZWNvZGVGUFIobV92YWx1ZSk7CisgICAgfQorCisgICAgUmVnIHJlZygpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAoaXNHUCgpKQorICAgICAgICAgICAgcmV0dXJuIGdwcigpOworICAgICAg
ICByZXR1cm4gZnByKCk7CisgICAgfQorCisgICAgYm9vbCBoYXNUbXBJbmRleCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gIWlzUmVnKCk7CisgICAgfQorCisgICAgdW5zaWduZWQgZ3BU
bXBJbmRleCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZGVjb2RlR1BUbXAobV92YWx1
ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQgZnBUbXBJbmRleCgpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gZGVjb2RlRlBUbXAobV92YWx1ZSk7CisgICAgfQorCisgICAgdW5zaWduZWQg
dG1wSW5kZXgoKSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKGlzR1AoKSkKKyAgICAgICAgICAg
IHJldHVybiBncFRtcEluZGV4KCk7CisgICAgICAgIHJldHVybiBmcFRtcEluZGV4KCk7CisgICAg
fQorCisgICAgYm9vbCBpc0FsaXZlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhISp0
aGlzOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBUbXAmIG90aGVyKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fdmFsdWUgPT0gb3RoZXIubV92YWx1ZTsKKyAgICB9
CisKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgVG1wJiBvdGhlcikgY29uc3QKKyAgICB7Cisg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3Q7CisKKyAgICBUbXAoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQorICAgICAgICA6IG1fdmFsdWUoc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+Ojpt
YXgoKSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKnRoaXMgPT0gVG1wKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBXVEY6OkludEhhc2g8aW50Pjo6aGFzaChtX3ZhbHVlKTsKKyAgICB9
CisgICAgCitwcml2YXRlOgorICAgIHN0YXRpYyBpbnQgZW5jb2RlR1AodW5zaWduZWQgaW5kZXgp
CisgICAgeworICAgICAgICByZXR1cm4gMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBp
bnQgZW5jb2RlRlAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gLTEgLSBp
bmRleDsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQUihHUFJSZWcgZ3ByKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQKGdwciAtIE1hY3JvQXNzZW1ibGVyOjpmaXJzdFJl
Z2lzdGVyKCkpOworICAgIH0KKworICAgIHN0YXRpYyBpbnQgZW5jb2RlRlBSKEZQUlJlZyBmcHIp
CisgICAgeworICAgICAgICByZXR1cm4gZW5jb2RlRlAoZnByIC0gTWFjcm9Bc3NlbWJsZXI6OmZp
cnN0RlBSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgaW50IGVuY29kZUdQVG1wKHVu
c2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGVuY29kZUdQUihNYWNyb0Fzc2Vt
Ymxlcjo6bGFzdFJlZ2lzdGVyKCkpICsgMSArIGluZGV4OworICAgIH0KKworICAgIHN0YXRpYyBp
bnQgZW5jb2RlRlBUbXAodW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICByZXR1cm4gZW5j
b2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEgLSBpbmRleDsKKyAg
ICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUChpbnQgdmFsdWUpCisgICAgeworICAg
ICAgICByZXR1cm4gdmFsdWUgPiAwOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2Rl
ZEZQKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiB2YWx1ZSA8IDA7CisgICAgfQor
CisgICAgc3RhdGljIGJvb2wgaXNFbmNvZGVkR1BSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBpc0VuY29kZWRHUCh2YWx1ZSkgJiYgdmFsdWUgPD0gZW5jb2RlR1BSKE1hY3JvQXNz
ZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNFbmNv
ZGVkRlBSKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1
ZSkgJiYgdmFsdWUgPj0gZW5jb2RlRlBSKE1hY3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3Rlcigp
KTsKKyAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc0VuY29kZWRHUFRtcChpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICByZXR1cm4gaXNFbmNvZGVkR1AodmFsdWUpICYmICFpc0VuY29kZWRHUFIo
dmFsdWUpOworICAgIH0KKworICAgIHN0YXRpYyBib29sIGlzRW5jb2RlZEZQVG1wKGludCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpc0VuY29kZWRGUCh2YWx1ZSkgJiYgIWlzRW5jb2Rl
ZEZQUih2YWx1ZSk7CisgICAgfQorCisgICAgc3RhdGljIEdQUlJlZyBkZWNvZGVHUFIoaW50IHZh
bHVlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGlzRW5jb2RlZEdQUih2YWx1ZSkpOworICAgICAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8R1BSUmVnPigKKyAgICAgICAgICAgICh2YWx1ZSAtIGVuY29k
ZUdQUihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RSZWdpc3RlcigpKSkgKyBNYWNyb0Fzc2VtYmxlcjo6
Zmlyc3RSZWdpc3RlcigpKTsKKyAgICB9CisKKyAgICBzdGF0aWMgRlBSUmVnIGRlY29kZUZQUihp
bnQgdmFsdWUpCisgICAgeworICAgICAgICBBU1NFUlQoaXNFbmNvZGVkRlBSKHZhbHVlKSk7Cisg
ICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxGUFJSZWc+KAorICAgICAgICAgICAgKGVuY29kZUZQ
UihNYWNyb0Fzc2VtYmxlcjo6Zmlyc3RGUFJlZ2lzdGVyKCkpIC0gdmFsdWUpICsKKyAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpmaXJzdEZQUmVnaXN0ZXIoKSk7CisgICAgfQorCisgICAgc3Rh
dGljIHVuc2lnbmVkIGRlY29kZUdQVG1wKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFTU0VS
VChpc0VuY29kZWRHUFRtcCh2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFsdWUgLSAoZW5jb2Rl
R1BSKE1hY3JvQXNzZW1ibGVyOjpsYXN0UmVnaXN0ZXIoKSkgKyAxKTsKKyAgICB9CisKKyAgICBz
dGF0aWMgdW5zaWduZWQgZGVjb2RlRlBUbXAoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGlzRW5jb2RlZEZQVG1wKHZhbHVlKSk7CisgICAgICAgIHJldHVybiAoZW5jb2RlRlBSKE1h
Y3JvQXNzZW1ibGVyOjpsYXN0RlBSZWdpc3RlcigpKSAtIDEpIC0gdmFsdWU7CisgICAgfQorCisg
ICAgLy8gMDogZW1wdHkgVG1wCisgICAgLy8gcG9zaXRpdmU6IEdQUnMgYW5kIHRoZW4gR1AgdGVt
cHMuCisgICAgLy8gbmVnYXRpdmU6IEZQUnMgYW5kIHRoZW4gRlAgdGVtcHMuCisgICAgaW50IG1f
dmFsdWU7Cit9OworCitzdHJ1Y3QgVG1wSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgVG1wJiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBl
cXVhbChjb25zdCBUbXAmIGEsIGNvbnN0IFRtcCYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAg
c3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwor
fTsKKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRIYXNoOwordGVtcGxhdGU8PiBz
dHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpCMzo6QWlyOjpUbXA+IHsKKyAgICB0eXBlZGVmIEpTQzo6
QjM6OkFpcjo6VG1wSGFzaCBIYXNoOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0
IEhhc2hUcmFpdHM7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBIYXNoVHJhaXRzPEpTQzo6QjM6OkFpcjo6
VG1wPiA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxKU0M6OkIzOjpBaXI6OlRtcD4geyB9OworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAv
LyBBaXJUbXBfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRtcElu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclRt
cElubGluZXMuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVG1wSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBBaXJUbXBJbmxp
bmVzX2gKKyNkZWZpbmUgQWlyVG1wSW5saW5lc19oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSAiQWlyQXJnLmgiCisjaW5jbHVkZSAiQWlyVG1wLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworaW5saW5lIFRtcDo6VG1wKGNvbnN0
IEFyZyYgYXJnKQoreworICAgICp0aGlzID0gYXJnLnRtcCgpOworfQorCit9IH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMzo6QWlyCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYg
Ly8gQWlyVG1wSW5saW5lc19oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkFpclZhbGlkYXRlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklU
KQorCisjaW5jbHVkZSAiQWlyQ29kZS5oIgorI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKKworbmFtZXNw
YWNlIHsKKworY2xhc3MgVmFsaWRhdGVyIHsKK3B1YmxpYzoKKyAgICBWYWxpZGF0ZXIoQ29kZSYg
Y29kZSwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKKyAgICAgICAgOiBtX2NvZGUoY29kZSkKKyAg
ICAgICAgLCBtX2R1bXBCZWZvcmUoZHVtcEJlZm9yZSkKKyAgICB7CisgICAgfQorCisjZGVmaW5l
IFZBTElEQVRFKGNvbmRpdGlvbiwgbWVzc2FnZSkgZG8geyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBcCisgICAgICAgIGlmIChjb25kaXRpb24pICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBicmVhazsgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZh
aWwoX19GSUxFX18sIF9fTElORV9fLCBXVEZfUFJFVFRZX0ZVTkNUSU9OLCAjY29uZGl0aW9uLCB0
b0NTdHJpbmcgbWVzc2FnZSk7IFwKKyAgICB9IHdoaWxlIChmYWxzZSkKKyAgICAKKyAgICB2b2lk
IHJ1bigpCisgICAgeworICAgICAgICBIYXNoU2V0PFN0YWNrU2xvdCo+IHZhbGlkU2xvdHM7Cisg
ICAgICAgIEhhc2hTZXQ8QmFzaWNCbG9jayo+IHZhbGlkQmxvY2tzOworICAgICAgICBIYXNoU2V0
PFNwZWNpYWwqPiB2YWxpZFNwZWNpYWxzOworCisgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2NvZGUpCisgICAgICAgICAgICB2YWxpZEJsb2Nrcy5hZGQoYmxvY2spOworICAgICAg
ICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fY29kZS5zdGFja1Nsb3RzKCkpCisgICAgICAgICAg
ICB2YWxpZFNsb3RzLmFkZChzbG90KTsKKyAgICAgICAgZm9yIChTcGVjaWFsKiBzcGVjaWFsIDog
bV9jb2RlLnNwZWNpYWxzKCkpCisgICAgICAgICAgICB2YWxpZFNwZWNpYWxzLmFkZChzcGVjaWFs
KTsKKworICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9jb2RlKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGluc3RJbmRleCA9IDA7IGluc3RJbmRleCA8IGJsb2NrLT5zaXpl
KCk7ICsraW5zdEluZGV4KSB7CisgICAgICAgICAgICAgICAgSW5zdCYgaW5zdCA9IGJsb2NrLT5h
dChpbnN0SW5kZXgpOworICAgICAgICAgICAgICAgIGZvciAoQXJnJiBhcmcgOiBpbnN0LmFyZ3Mp
IHsKKyAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChhcmcua2luZCgpKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazoKKyAgICAgICAgICAgICAgICAgICAgICAgIFZBTElE
QVRFKHZhbGlkU2xvdHMuY29udGFpbnMoYXJnLnN0YWNrU2xvdCgpKSwgKCJBdCAiLCBpbnN0LCAi
IGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGNhc2UgQXJnOjpTcGVjaWFsOgorICAgICAgICAgICAgICAgICAgICAgICAg
VkFMSURBVEUodmFsaWRTcGVjaWFscy5jb250YWlucyhhcmcuc3BlY2lhbCgpKSwgKCJBdCAiLCBp
bnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICBWQUxJREFURShpbnN0LmlzVmFsaWRGb3JtKCksICgiQXQgIiwgaW5zdCwgIiBpbiAiLCAq
YmxvY2spKTsKKyAgICAgICAgICAgICAgICBpZiAoaW5zdEluZGV4ID09IGJsb2NrLT5zaXplKCkg
LSAxKQorICAgICAgICAgICAgICAgICAgICBWQUxJREFURShpc1Rlcm1pbmFsKGluc3Qub3Bjb2Rl
KSwgKCJBdCAiLCBpbnN0LCAiIGluICIsICpibG9jaykpOworICAgICAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICAgICAgVkFMSURBVEUoIWlzVGVybWluYWwoaW5zdC5vcGNvZGUpLCAo
IkF0ICIsIGluc3QsICIgaW4gIiwgKmJsb2NrKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvciA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkK
KyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWxpZEJsb2Nrcy5jb250YWlucyhzdWNjZXNzb3Ip
LCAoIkluICIsICpibG9jaykpOworICAgICAgICB9CisgICAgfQorCitwcml2YXRlOgorICAgIE5P
X1JFVFVSTl9EVUVfVE9fQ1JBU0ggdm9pZCBmYWlsKAorICAgICAgICBjb25zdCBjaGFyKiBmaWxl
bmFtZSwgaW50IGxpbmVOdW1iZXIsIGNvbnN0IGNoYXIqIGZ1bmN0aW9uLCBjb25zdCBjaGFyKiBj
b25kaXRpb24sCisgICAgICAgIENTdHJpbmcgbWVzc2FnZSkKKyAgICB7CisgICAgICAgIENTdHJp
bmcgZmFpbHVyZU1lc3NhZ2U7CisgICAgICAgIHsKKyAgICAgICAgICAgIFN0cmluZ1ByaW50U3Ry
ZWFtIG91dDsKKyAgICAgICAgICAgIG91dC5wcmludCgiQUlSIFZBTElEQVRJT04gRkFJTFVSRVxu
Iik7CisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBjb25kaXRpb24sICIgKCIsIGZpbGVu
YW1lLCAiOiIsIGxpbmVOdW1iZXIsICIpXG4iKTsKKyAgICAgICAgICAgIG91dC5wcmludCgiICAg
ICIsIG1lc3NhZ2UsICJcbiIpOworICAgICAgICAgICAgb3V0LnByaW50KCIgICAgQWZ0ZXIgIiwg
bV9jb2RlLmxhc3RQaGFzZU5hbWUoKSwgIlxuIik7CisgICAgICAgICAgICBmYWlsdXJlTWVzc2Fn
ZSA9IG91dC50b0NTdHJpbmcoKTsKKyAgICAgICAgfQorCisgICAgICAgIGRhdGFMb2coZmFpbHVy
ZU1lc3NhZ2UpOworICAgICAgICBpZiAobV9kdW1wQmVmb3JlKSB7CisgICAgICAgICAgICBkYXRh
TG9nKCJCZWZvcmUgIiwgbV9jb2RlLmxhc3RQaGFzZU5hbWUoKSwgIjpcbiIpOworICAgICAgICAg
ICAgZGF0YUxvZyhtX2R1bXBCZWZvcmUpOworICAgICAgICB9CisgICAgICAgIGRhdGFMb2coIkF0
IHRpbWUgb2YgZmFpbHVyZTpcbiIpOworICAgICAgICBkYXRhTG9nKG1fY29kZSk7CisKKyAgICAg
ICAgZGF0YUxvZyhmYWlsdXJlTWVzc2FnZSk7CisgICAgICAgIFdURlJlcG9ydEFzc2VydGlvbkZh
aWx1cmUoZmlsZW5hbWUsIGxpbmVOdW1iZXIsIGZ1bmN0aW9uLCBjb25kaXRpb24pOworICAgICAg
ICBDUkFTSCgpOworICAgIH0KKyAgICAKKyAgICBDb2RlJiBtX2NvZGU7CisgICAgY29uc3QgY2hh
ciogbV9kdW1wQmVmb3JlOworfTsKKworfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCisKK3ZvaWQg
dmFsaWRhdGUoQ29kZSYgY29kZSwgY29uc3QgY2hhciogZHVtcEJlZm9yZSkKK3sKKyAgICBWYWxp
ZGF0ZXIgdmFsaWRhdGVyKGNvZGUsIGR1bXBCZWZvcmUpOworICAgIHZhbGlkYXRlci5ydW4oKTsK
K30KKworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxF
KEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJWYWxpZGF0
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFsaWRh
dGUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyVmFs
aWRhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQWlyVmFsaWRhdGVfaAorI2Rl
ZmluZSBBaXJWYWxpZGF0ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CisKK2NsYXNzIENvZGU7CisKK3ZvaWQg
dmFsaWRhdGUoQ29kZSYsIGNvbnN0IGNoYXIqIGR1bXBCZWZvcmUgPSBudWxscHRyKTsKKworfSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpcgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkK
KworI2VuZGlmIC8vIEFpclZhbGlkYXRlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDg0NCBAQAorIyEvdXNyL2Jpbi9lbnYgcnVieQorCisjIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisjCisjIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
IyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyMgYXJlIG1ldDoKKyMgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyMgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIyAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisjICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisjCisjIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElT
JycKKyMgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisjIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyMgUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisj
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IKKyMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyMgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisjIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCisjIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisjIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyMgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCityZXF1aXJlICJwYXRobmFtZSIKKworY2xhc3MgT3Bj
b2RlCisgICAgYXR0cl9yZWFkZXIgOm5hbWUsIDpzcGVjaWFsLCA6b3ZlcmxvYWRzCisgICAgYXR0
cl9hY2Nlc3NvciA6a2luZAorCisgICAgZGVmIGluaXRpYWxpemUobmFtZSwgc3BlY2lhbCkKKyAg
ICAgICAgQG5hbWUgPSBuYW1lCisgICAgICAgIEBzcGVjaWFsID0gc3BlY2lhbAorICAgICAgICBA
a2luZCA9IDppbnN0CisgICAgICAgIHVubGVzcyBzcGVjaWFsCisgICAgICAgICAgICBAb3Zlcmxv
YWRzID0gW10KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgbWFzbU5hbWUKKyAgICAg
ICAgbmFtZVswXS5kb3duY2FzZSArIG5hbWVbMS4uLTFdCisgICAgZW5kCitlbmQKKworY2xhc3Mg
QXJnCisgICAgYXR0cl9yZWFkZXIgOnJvbGUsIDp0eXBlCisKKyAgICBkZWYgaW5pdGlhbGl6ZShy
b2xlLCB0eXBlKQorICAgICAgICBAcm9sZSA9IHJvbGUKKyAgICAgICAgQHR5cGUgPSB0eXBlCisg
ICAgZW5kCitlbmQKKworY2xhc3MgT3ZlcmxvYWQKKyAgICBhdHRyX3JlYWRlciA6c2lnbmF0dXJl
LCA6Zm9ybXMKKworICAgIGRlZiBpbml0aWFsaXplKHNpZ25hdHVyZSwgZm9ybXMpCisgICAgICAg
IEBzaWduYXR1cmUgPSBzaWduYXR1cmUKKyAgICAgICAgQGZvcm1zID0gZm9ybXMKKyAgICBlbmQK
K2VuZAorCitjbGFzcyBLaW5kCisgICAgYXR0cl9yZWFkZXIgOm5hbWUKKyAgICBhdHRyX2FjY2Vz
c29yIDpzcGVjaWFsCisKKyAgICBkZWYgaW5pdGlhbGl6ZShuYW1lKQorICAgICAgICBAbmFtZSA9
IG5hbWUKKyAgICAgICAgQHNwZWNpYWwgPSBmYWxzZQorICAgIGVuZAorCisgICAgZGVmID09KG90
aGVyKQorICAgICAgICBpZiBvdGhlci5pc19hPyBTdHJpbmcKKyAgICAgICAgICAgIEBuYW1lID09
IG90aGVyCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEBuYW1lID09IG90aGVyLm5hbWUgYW5k
IEBzcGVjaWFsID09IG90aGVyLnNwZWNpYWwKKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBk
ZWYgS2luZC5hcmdLaW5kcyhraW5kKQorICAgICAgICBpZiBraW5kID09ICJBZGRyIgorICAgICAg
ICAgICAgWyJBZGRyIiwgIlN0YWNrIiwgIkNhbGxBcmciXQorICAgICAgICBlbHNlCisgICAgICAg
ICAgICBba2luZF0KKyAgICAgICAgZW5kCisgICAgZW5kCisKKyAgICBkZWYgYXJnS2luZHMKKyAg
ICAgICAgS2luZC5hcmdLaW5kcyhraW5kKQorICAgIGVuZAorZW5kCisKK2NsYXNzIEZvcm0KKyAg
ICBhdHRyX3JlYWRlciA6a2luZHMsIDphbHROYW1lCisKKyAgICBkZWYgaW5pdGlhbGl6ZShraW5k
cywgYWx0TmFtZSkKKyAgICAgICAgQGtpbmRzID0ga2luZHMKKyAgICAgICAgQGFsdE5hbWUgPSBh
bHROYW1lCisgICAgZW5kCitlbmQKKworY2xhc3MgT3JpZ2luCisgICAgYXR0cl9yZWFkZXIgOmZp
bGVOYW1lLCA6bGluZU51bWJlcgorICAgIAorICAgIGRlZiBpbml0aWFsaXplKGZpbGVOYW1lLCBs
aW5lTnVtYmVyKQorICAgICAgICBAZmlsZU5hbWUgPSBmaWxlTmFtZQorICAgICAgICBAbGluZU51
bWJlciA9IGxpbmVOdW1iZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAi
I3tmaWxlTmFtZX06I3tsaW5lTnVtYmVyfSIKKyAgICBlbmQKK2VuZAorCitjbGFzcyBUb2tlbgor
ICAgIGF0dHJfcmVhZGVyIDpvcmlnaW4sIDpzdHJpbmcKKyAgICAKKyAgICBkZWYgaW5pdGlhbGl6
ZShvcmlnaW4sIHN0cmluZykKKyAgICAgICAgQG9yaWdpbiA9IG9yaWdpbgorICAgICAgICBAc3Ry
aW5nID0gc3RyaW5nCisgICAgZW5kCisgICAgCisgICAgZGVmID09KG90aGVyKQorICAgICAgICBp
ZiBvdGhlci5pc19hPyBUb2tlbgorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlci5zdHJpbmcK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgQHN0cmluZyA9PSBvdGhlcgorICAgICAgICBlbmQK
KyAgICBlbmQKKyAgICAKKyAgICBkZWYgPX4ob3RoZXIpCisgICAgICAgIEBzdHJpbmcgPX4gb3Ro
ZXIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgdG9fcworICAgICAgICAiI3tAc3RyaW5nLmluc3Bl
Y3R9IGF0ICN7b3JpZ2lufSIKKyAgICBlbmQKKyAgICAKKyAgICBkZWYgcGFyc2VFcnJvcigqY29t
bWVudCkKKyAgICAgICAgaWYgY29tbWVudC5lbXB0eT8KKyAgICAgICAgICAgIHJhaXNlICJQYXJz
ZSBlcnJvcjogI3t0b19zfSIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmFpc2UgIlBhcnNl
IGVycm9yOiAje3RvX3N9OiAje2NvbW1lbnRbMF19IgorICAgICAgICBlbmQKKyAgICBlbmQKK2Vu
ZAorCitkZWYgbGV4KHN0ciwgZmlsZU5hbWUpCisgICAgZmlsZU5hbWUgPSBQYXRobmFtZS5uZXco
ZmlsZU5hbWUpCisgICAgcmVzdWx0ID0gW10KKyAgICBsaW5lTnVtYmVyID0gMQorICAgIHdoaWxl
IG5vdCBzdHIuZW1wdHk/CisgICAgICAgIGNhc2Ugc3RyCisgICAgICAgIHdoZW4gL1xBXCMoW15c
bl0qKS8KKyAgICAgICAgICAgICMgY29tbWVudCwgaWdub3JlCisgICAgICAgIHdoZW4gL1xBXG4v
CisgICAgICAgICAgICAjIG5ld2xpbmUsIGlnbm9yZQorICAgICAgICAgICAgbGluZU51bWJlciAr
PSAxCisgICAgICAgIHdoZW4gL1xBKFthLXpBLVowLTlfXSspLworICAgICAgICAgICAgcmVzdWx0
IDw8IFRva2VuLm5ldyhPcmlnaW4ubmV3KGZpbGVOYW1lLCBsaW5lTnVtYmVyKSwgJCYpCisgICAg
ICAgIHdoZW4gL1xBKFsgXHRccl0rKS8KKyAgICAgICAgICAgICMgd2hpdGVzcGFjZSwgaWdub3Jl
CisgICAgICAgIHdoZW4gL1xBWyw6KlwvXS8KKyAgICAgICAgICAgIHJlc3VsdCA8PCBUb2tlbi5u
ZXcoT3JpZ2luLm5ldyhmaWxlTmFtZSwgbGluZU51bWJlciksICQmKQorICAgICAgICBlbHNlCisg
ICAgICAgICAgICByYWlzZSAiTGV4ZXIgZXJyb3IgYXQgI3tPcmlnaW4ubmV3KGZpbGVOYW1lLCBs
aW5lTnVtYmVyKS50b19zfSwgdW5leHBlY3RlZCBzZXF1ZW5jZSAje3N0clswLi4yMF0uaW5zcGVj
dH0iCisgICAgICAgIGVuZAorICAgICAgICBzdHIgPSAkfi5wb3N0X21hdGNoCisgICAgZW5kCisg
ICAgcmVzdWx0CitlbmQKKworZGVmIGlzVUQodG9rZW4pCisgICAgdG9rZW4gPX4gL1xBKChVKXwo
RCl8KFVEKSlcWi8KK2VuZAorCitkZWYgaXNHRih0b2tlbikKKyAgICB0b2tlbiA9fiAvXEEoKEcp
fChGKSlcWi8KK2VuZAorCitkZWYgaXNLaW5kKHRva2VuKQorICAgIHRva2VuID1+IC9cQSgoVG1w
KXwoSW1tKXwoSW1tNjQpfChBZGRyKXwoSW5kZXgpfChSZWxDb25kKXwoUmVzQ29uZCkpXFovCitl
bmQKKworZGVmIGlzS2V5d29yZCh0b2tlbikKKyAgICBpc1VEKHRva2VuKSBvciBpc0dGKHRva2Vu
KSBvciBpc0tpbmQodG9rZW4pIG9yCisgICAgICAgIHRva2VuID09ICJzcGVjaWFsIiBvciB0b2tl
biA9PSAiYXMiCitlbmQKKworZGVmIGlzSWRlbnRpZmllcih0b2tlbikKKyAgICB0b2tlbiA9fiAv
XEEoW2EtekEtWjAtOV9dKylcWi8gYW5kIG5vdCBpc0tleXdvcmQodG9rZW4pCitlbmQKKworY2xh
c3MgUGFyc2VyCisgICAgZGVmIGluaXRpYWxpemUoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEB0
b2tlbnMgPSBsZXgoZGF0YSwgZmlsZU5hbWUpCisgICAgICAgIEBpZHggPSAwCisgICAgZW5kCisK
KyAgICBkZWYgdG9rZW4KKyAgICAgICAgQHRva2Vuc1tAaWR4XQorICAgIGVuZAorCisgICAgZGVm
IGFkdmFuY2UKKyAgICAgICAgQGlkeCArPSAxCisgICAgZW5kCisKKyAgICBkZWYgcGFyc2VFcnJv
cigqY29tbWVudCkKKyAgICAgICAgaWYgdG9rZW4KKyAgICAgICAgICAgIHRva2VuLnBhcnNlRXJy
b3IoKmNvbW1lbnQpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGNvbW1lbnQuZW1wdHk/
CisgICAgICAgICAgICAgICAgcmFpc2UgIlBhcnNlIGVycm9yIGF0IGVuZCBvZiBmaWxlIgorICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJhaXNlICJQYXJzZSBlcnJvciBhdCBlbmQg
b2YgZmlsZTogI3tjb21tZW50WzBdfSIKKyAgICAgICAgICAgIGVuZAorICAgICAgICBlbmQKKyAg
ICBlbmQKKworICAgIGRlZiBjb25zdW1lKHN0cmluZykKKyAgICAgICAgcGFyc2VFcnJvcigiRXhw
ZWN0ZWQgI3tzdHJpbmd9IikgdW5sZXNzIHRva2VuID09IHN0cmluZworICAgICAgICBhZHZhbmNl
CisgICAgZW5kCisKKyAgICBkZWYgY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgcmVzdWx0ID0g
dG9rZW4uc3RyaW5nCisgICAgICAgIHBhcnNlRXJyb3IoIkV4cGVjdGVkIGlkZW50aWZpZXIiKSB1
bmxlc3MgaXNJZGVudGlmaWVyKHJlc3VsdCkKKyAgICAgICAgYWR2YW5jZQorICAgICAgICByZXN1
bHQKKyAgICBlbmQKKworICAgIGRlZiBjb25zdW1lUm9sZQorICAgICAgICByZXN1bHQgPSB0b2tl
bi5zdHJpbmcKKyAgICAgICAgcGFyc2VFcnJvcigiRXhwZWN0ZWQgcm9sZSAoVSwgRCwgb3IgVUQp
IikgdW5sZXNzIGlzVUQocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAor
ICAgIGVuZAorCisgICAgZGVmIGNvbnN1bWVUeXBlCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0
cmluZworICAgICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCB0eXBlIChHIG9yIEYpIikgdW5sZXNz
IGlzR0YocmVzdWx0KQorICAgICAgICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAor
CisgICAgZGVmIGNvbnN1bWVLaW5kCisgICAgICAgIHJlc3VsdCA9IHRva2VuLnN0cmluZworICAg
ICAgICBwYXJzZUVycm9yKCJFeHBlY3RlZCBraW5kIChJbW0sIEltbTY0LCBUbXAsIEFkZHIsIElu
ZGV4LCBSZWxDb25kLCBvciBSZXNDb25kKSIpIHVubGVzcyBpc0tpbmQocmVzdWx0KQorICAgICAg
ICBhZHZhbmNlCisgICAgICAgIHJlc3VsdAorICAgIGVuZAorCisgICAgZGVmIHBhcnNlCisgICAg
ICAgIHJlc3VsdCA9IHt9CisgICAgICAgIAorICAgICAgICBsb29wIHsKKyAgICAgICAgICAgIGJy
ZWFrIGlmIEBpZHggPj0gQHRva2Vucy5sZW5ndGgKKworICAgICAgICAgICAgaWYgdG9rZW4gPT0g
InNwZWNpYWwiCisgICAgICAgICAgICAgICAgY29uc3VtZSgic3BlY2lhbCIpCisgICAgICAgICAg
ICAgICAgb3Bjb2RlTmFtZSA9IGNvbnN1bWVJZGVudGlmaWVyCisKKyAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQgYSBzcGVjaWFsIG9wY29kZSIpIGlmIHJlc3VsdFtv
cGNvZGVOYW1lXQorCisgICAgICAgICAgICAgICAgcmVzdWx0W29wY29kZU5hbWVdID0gT3Bjb2Rl
Lm5ldyhvcGNvZGVOYW1lLCB0cnVlKQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
IG9wY29kZU5hbWUgPSBjb25zdW1lSWRlbnRpZmllcgorCisgICAgICAgICAgICAgICAgaWYgcmVz
dWx0W29wY29kZU5hbWVdCisgICAgICAgICAgICAgICAgICAgIG9wY29kZSA9IHJlc3VsdFtvcGNv
ZGVOYW1lXQorICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJDYW5ub3Qgb3ZlcmxvYWQg
YSBzcGVjaWFsIG9wY29kZSIpIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBvcGNvZGUgPSBPcGNvZGUubmV3KG9wY29kZU5hbWUsIGZh
bHNlKQorICAgICAgICAgICAgICAgICAgICByZXN1bHRbb3Bjb2RlTmFtZV0gPSBvcGNvZGUKKyAg
ICAgICAgICAgICAgICBlbmQKKworICAgICAgICAgICAgICAgIHNpZ25hdHVyZSA9IFtdCisgICAg
ICAgICAgICAgICAgZm9ybXMgPSBbXQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGlmIGlzVUQodG9rZW4pCisgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAgICAg
ICAgICAgICAgICAgcm9sZSA9IGNvbnN1bWVSb2xlCisgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdW1lKCI6IikKKyAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBjb25zdW1lVHlwZQor
ICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzaWduYXR1
cmUgPDwgQXJnLm5ldyhyb2xlLCB0eXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhayB1bmxlc3MgdG9rZW4gPT0gIiwiCisgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gIi8iCisgICAgICAg
ICAgICAgICAgICAgIGNvbnN1bWUoIi8iKQorICAgICAgICAgICAgICAgICAgICBjYXNlIHRva2Vu
LnN0cmluZworICAgICAgICAgICAgICAgICAgICB3aGVuICJicmFuY2giCisgICAgICAgICAgICAg
ICAgICAgICAgICBvcGNvZGUua2luZCA9IDpicmFuY2gKKyAgICAgICAgICAgICAgICAgICAgd2hl
biAidGVybWluYWwiCisgICAgICAgICAgICAgICAgICAgICAgICBvcGNvZGUua2luZCA9IDp0ZXJt
aW5hbAorICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBw
YXJzZUVycm9yKCJCYWQgLyBkaXJlY3RpdmUiKQorICAgICAgICAgICAgICAgICAgICBlbmQKKyAg
ICAgICAgICAgICAgICAgICAgYWR2YW5jZQorICAgICAgICAgICAgICAgIGVuZAorCisgICAgICAg
ICAgICAgICAgaWYgaXNLaW5kKHRva2VuKQorICAgICAgICAgICAgICAgICAgICBsb29wIHsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGtpbmRzID0gW10KKyAgICAgICAgICAgICAgICAgICAgICAg
IGFsdE5hbWUgPSBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvb3AgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGtpbmRzIDw8IEtpbmQubmV3KGNvbnN1bWVLaW5kKQorCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gIioiCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHBhcnNlRXJyb3IoIkNhbiBvbmx5IGFwcGx5ICogdG8gVG1wIikgdW5s
ZXNzIGtpbmRzWy0xXS5uYW1lID09ICJUbXAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGtpbmRzWy0xXS5zcGVjaWFsID0gdHJ1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb25zdW1lKCIqIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrIHVubGVzcyB0b2tlbiA9PSAiLCIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdW1lKCIsIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rZW4gPT0gImFzIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN1bWUoImFzIikKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBhbHROYW1lID0gY29uc3VtZUlkZW50aWZpZXIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGVuZAorCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUVycm9yKCJGb3JtIGhhcyB3
cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzIGZvciBvdmVybG9hZCIpIHVubGVzcyBraW5kcy5sZW5n
dGggPT0gc2lnbmF0dXJlLmxlbmd0aAorICAgICAgICAgICAgICAgICAgICAgICAga2luZHMuZWFj
aF93aXRoX2luZGV4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGtpbmQsIGluZGV4
IHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBraW5kLm5hbWUgPT0gIkltbSIgb3Ig
a2luZC5uYW1lID09ICJJbW02NCIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
c2lnbmF0dXJlW2luZGV4XS5yb2xlICE9ICJVIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMgYW4gaW1tZWRpYXRlIGZvciBhIG5vbi11c2Ug
YXJndW1lbnQiKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlW2luZGV4XS50eXBlICE9ICJHIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VFcnJvcigiRm9ybSBoYXMg
YW4gaW1tZWRpYXRlIGZvciBhIG5vbi1nZW5lcmFsLXB1cnBvc2UgYXJndW1lbnQiKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAg
IGZvcm1zIDw8IEZvcm0ubmV3KGtpbmRzLCBhbHROYW1lKQorICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWsgdW5sZXNzIGlzS2luZCh0b2tlbikKKyAgICAgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgaWYgc2lnbmF0dXJlLmxlbmd0aCA9
PSAwCisgICAgICAgICAgICAgICAgICAgIHJhaXNlIHVubGVzcyBmb3Jtcy5sZW5ndGggPT0gMAor
ICAgICAgICAgICAgICAgICAgICBmb3JtcyA8PCBGb3JtLm5ldyhbXSwgbmlsKQorICAgICAgICAg
ICAgICAgIGVuZAorCisgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2FkcyA8PCBPdmVybG9h
ZC5uZXcoc2lnbmF0dXJlLCBmb3JtcykKKyAgICAgICAgICAgIGVuZAorICAgICAgICB9CisKKyAg
ICAgICAgcmVzdWx0CisgICAgZW5kCitlbmQKKworJGZpbGVOYW1lID0gQVJHVlswXQorCitwYXJz
ZXIgPSBQYXJzZXIubmV3KElPOjpyZWFkKCRmaWxlTmFtZSksICRmaWxlTmFtZSkKKyRvcGNvZGVz
ID0gcGFyc2VyLnBhcnNlCisKKyRzdGRlcnIucHV0cyAiR2VuZXJhdGluZyBjb2RlIGZvciAjeyRm
aWxlTmFtZX0uIgorCitkZWYgd3JpdGVIKGZpbGVuYW1lKQorICAgIEZpbGUub3BlbigiQWlyI3tm
aWxlbmFtZX0uaCIsICJ3IikgeworICAgICAgICB8IG91dHAgfAorICAgICAgICAKKyAgICAgICAg
b3V0cC5wdXRzICIvLyBHZW5lcmF0ZWQgYnkgb3Bjb2RlX2dlbmVyYXRvci5yYiBmcm9tICN7JGZp
bGVOYW1lfSAtLSBkbyBub3QgZWRpdCEiCisgICAgICAgIAorICAgICAgICBvdXRwLnB1dHMgIiNp
Zm5kZWYgQWlyI3tmaWxlbmFtZX1faCIKKyAgICAgICAgb3V0cC5wdXRzICIjZGVmaW5lIEFpciN7
ZmlsZW5hbWV9X2giCisKKyAgICAgICAgeWllbGQgb3V0cAorICAgICAgICAKKyAgICAgICAgb3V0
cC5wdXRzICIjZW5kaWYgLy8gQWlyI3tmaWxlbmFtZX1faCIKKyAgICB9CitlbmQKKword3JpdGVI
KCJPcGNvZGUiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIm5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsiCisgICAgb3V0cC5wdXRzICJlbnVtIE9w
Y29kZSA6IGludDE2X3QgeyIKKyAgICAkb3Bjb2Rlcy5rZXlzLnNvcnQuZWFjaCB7CisgICAgICAg
IHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5wdXRzICIgICAgI3tvcGNvZGV9LCIKKyAgICB9Cisg
ICAgb3V0cC5wdXRzICJ9OyIKKworICAgIG91dHAucHV0cyAic3RhdGljIGNvbnN0IHVuc2lnbmVk
IG51bU9wY29kZXMgPSAjeyRvcGNvZGVzLmtleXMuc2l6ZX07IgorICAgIG91dHAucHV0cyAifSB9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKKyAgICAKKyAgICBvdXRwLnB1dHMgIm5hbWVz
cGFjZSBXVEYgeyIKKyAgICBvdXRwLnB1dHMgImNsYXNzIFByaW50U3RyZWFtOyIKKyAgICBvdXRw
LnB1dHMgInZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6T3Bj
b2RlKTsiCisgICAgb3V0cC5wdXRzICJ9IC8vIG5hbWVzcGFjZSBXVEYiCit9CisKKyMgRnJvbSBo
ZXJlIG9uLCB3ZSBkb24ndCB0cnkgdG8gZW1pdCBwcm9wZXJseSBpbmRlbnRlZCBjb2RlLCBzaW5j
ZSB3ZSdyZSB1c2luZyBhIHJlY3Vyc2l2ZSBwYXR0ZXJuCisjIG1hdGNoZXIuCisKK2RlZiBtYXRj
aEZvcm1zKG91dHAsIHNwZWVkLCBmb3JtcywgY29sdW1uSW5kZXgsIGNvbHVtbkdldHRlciwgZmls
dGVyLCBjYWxsYmFjaykKKyAgICByZXR1cm4gaWYgZm9ybXMubGVuZ3RoID09IDAKKworICAgIGlm
IGZpbHRlcltmb3Jtc10KKyAgICAgICAgcmV0dXJuCisgICAgZW5kCisKKyAgICBpZiBjb2x1bW5J
bmRleCA+PSBmb3Jtc1swXS5raW5kcy5sZW5ndGgKKyAgICAgICAgcmFpc2UgdW5sZXNzIGZvcm1z
Lmxlbmd0aCA9PSAxCisgICAgICAgIGNhbGxiYWNrW2Zvcm1zWzBdXQorICAgICAgICByZXR1cm4K
KyAgICBlbmQKKyAgICAKKyAgICBncm91cHMgPSB7fQorICAgIGZvcm1zLmVhY2ggeworICAgICAg
ICB8IGZvcm0gfAorICAgICAgICBraW5kID0gZm9ybS5raW5kc1tjb2x1bW5JbmRleF0ubmFtZQor
ICAgICAgICBpZiBncm91cHNba2luZF0KKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA8PCBmb3Jt
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdyb3Vwc1traW5kXSA9IFtmb3JtXQorICAgICAg
ICBlbmQKKyAgICB9CisKKyAgICBpZiBzcGVlZCA9PSA6ZmFzdCBhbmQgZ3JvdXBzLmxlbmd0aCA9
PSAxCisgICAgICAgIG1hdGNoRm9ybXMob3V0cCwgc3BlZWQsIGZvcm1zLCBjb2x1bW5JbmRleCAr
IDEsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgcmV0dXJuCisgICAg
ZW5kCisKKyAgICBvdXRwLnB1dHMgInN3aXRjaCAoI3tjb2x1bW5HZXR0ZXJbY29sdW1uSW5kZXhd
fSkgeyIKKyAgICBncm91cHMuZWFjaF9wYWlyIHsKKyAgICAgICAgfCBrZXksIHZhbHVlIHwKKyAg
ICAgICAgb3V0cC5wdXRzICIjaWYgVVNFKEpTVkFMVUU2NCkiIGlmIGtleSA9PSAiSW1tNjQiCisg
ICAgICAgIEtpbmQuYXJnS2luZHMoa2V5KS5lYWNoIHsKKyAgICAgICAgICAgIHwgYXJnS2luZCB8
CisgICAgICAgICAgICBvdXRwLnB1dHMgImNhc2UgQXJnOjoje2FyZ0tpbmR9OiIKKyAgICAgICAg
fQorICAgICAgICBtYXRjaEZvcm1zKG91dHAsIHNwZWVkLCB2YWx1ZSwgY29sdW1uSW5kZXggKyAx
LCBjb2x1bW5HZXR0ZXIsIGZpbHRlciwgY2FsbGJhY2spCisgICAgICAgIG91dHAucHV0cyAiYnJl
YWs7IgorICAgICAgICBvdXRwLnB1dHMgIiNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSIgaWYga2V5
ID09ICJJbW02NCIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKworZGVmIG1hdGNoSW5zdE92ZXJs
b2FkKG91dHAsIHNwZWVkLCBpbnN0KQorICAgIG91dHAucHV0cyAic3dpdGNoICgje2luc3R9LT5v
cGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8
CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIGlmIG9w
Y29kZS5zcGVjaWFsCisgICAgICAgICAgICB5aWVsZCBvcGNvZGUsIG5pbAorICAgICAgICBlbHNl
CisgICAgICAgICAgICBuZWVkT3ZlcmxvYWRTd2l0Y2ggPSAoKG9wY29kZS5vdmVybG9hZHMuc2l6
ZSAhPSAxKSBvciBzcGVlZCA9PSA6c2FmZSkKKyAgICAgICAgICAgIG91dHAucHV0cyAic3dpdGNo
ICgje2luc3R9LT5hcmdzLnNpemUoKSkgeyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAg
ICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQg
fAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5s
ZW5ndGh9OiIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgeWllbGQgb3Bj
b2RlLCBvdmVybG9hZAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiYnJlYWs7IiBpZiBuZWVk
T3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRPdmVybG9h
ZFN3aXRjaAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJicmVhazsiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJ9Igor
ICAgICAgICAgICAgZW5kCisgICAgICAgIGVuZAorICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiIKKyAgICBvdXRwLnB1dHMgImJyZWFrOyIK
KyAgICBvdXRwLnB1dHMgIn0iCitlbmQKKyAgICAKK2RlZiBtYXRjaEluc3RPdmVybG9hZEZvcm0o
b3V0cCwgc3BlZWQsIGluc3QpCisgICAgbWF0Y2hJbnN0T3ZlcmxvYWQob3V0cCwgc3BlZWQsIGlu
c3QpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2FkIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNw
ZWNpYWwKKyAgICAgICAgICAgIHlpZWxkIG9wY29kZSwgbmlsLCBuaWwKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7CisgICAgICAgICAgICAgICAgfCBjb2x1
bW5JbmRleCB8CisgICAgICAgICAgICAgICAgIiN7aW5zdH0tPmFyZ3NbI3tjb2x1bW5JbmRleH1d
LmtpbmQoKSIKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxz
ZSB9CisgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAgIHwgZm9y
bSB8CisgICAgICAgICAgICAgICAgeWllbGQgb3Bjb2RlLCBvdmVybG9hZCwgZm9ybQorICAgICAg
ICAgICAgfQorICAgICAgICAgICAgbWF0Y2hGb3JtcyhvdXRwLCBzcGVlZCwgb3ZlcmxvYWQuZm9y
bXMsIDAsIGNvbHVtbkdldHRlciwgZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgZW5kCisgICAg
fQorZW5kCisKK3dyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRw
LnB1dHMgIiNpbmNsdWRlIFwiQWlySW5zdC5oXCIiCisgICAgb3V0cC5wdXRzICIjaW5jbHVkZSBc
IkFpclNwZWNpYWwuaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICAKKyAgICBvdXRwLnB1dHMgImlubGluZSBib29s
IG9wZ2VuSGlkZGVuVHJ1dGgoKSB7IHJldHVybiB0cnVlOyB9IgorICAgIG91dHAucHV0cyAidGVt
cGxhdGU8dHlwZW5hbWUgVD4iCisgICAgb3V0cC5wdXRzICJpbmxpbmUgVCogb3BnZW5IaWRkZW5Q
dHJJZGVudGl0eShUKiBwb2ludGVyKSB7IHJldHVybiBwb2ludGVyOyB9IgorICAgIG91dHAucHV0
cyAiI2RlZmluZSBPUEdFTl9SRVRVUk4odmFsdWUpIGRvIHtcXCIKKyAgICBvdXRwLnB1dHMgIiAg
ICBpZiAob3BnZW5IaWRkZW5UcnV0aCgpKVxcIgorICAgIG91dHAucHV0cyAiICAgICAgICByZXR1
cm4gdmFsdWU7XFwiCisgICAgb3V0cC5wdXRzICJ9IHdoaWxlIChmYWxzZSkiCisKKyAgICBvdXRw
LnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+IgorICAgIG91dHAucHV0cyAidm9pZCBJ
bnN0Ojpmb3JFYWNoQXJnKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpIgorICAgIG91dHAucHV0cyAi
eyIKKyAgICBtYXRjaEluc3RPdmVybG9hZChvdXRwLCA6ZmFzdCwgInRoaXMiKSB7CisgICAgICAg
IHwgb3Bjb2RlLCBvdmVybG9hZCB8CisgICAgICAgIGlmIG9wY29kZS5zcGVjaWFsCisgICAgICAg
ICAgICBvdXRwLnB1dHMgImZ1bmN0b3IoYXJnc1swXSwgQXJnOjpVc2UsIEFyZzo6R1ApOyAvLyBU
aGlzIGlzIGJhc2ljYWxseSBib2d1cywgYnV0IGl0IHdvcmtzIGYgYW5hbHlzZXMgbW9kZWwgU3Bl
Y2lhbCBhcyBhbiBpbW1lZGlhdGUuIgorICAgICAgICAgICAgb3V0cC5wdXRzICJhcmdzWzBdLnNw
ZWNpYWwoKS0+Zm9yRWFjaEFyZygqdGhpcywgc2NvcGVkTGFtYmRhPEVhY2hBcmdDYWxsYmFjaz4o
ZnVuY3RvcikpOyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJl
LmVhY2hfd2l0aF9pbmRleCB7CisgICAgICAgICAgICAgICAgfCBhcmcsIGluZGV4IHwKKyAgICAg
ICAgICAgICAgICByb2xlID0gbmlsCisgICAgICAgICAgICAgICAgY2FzZSBhcmcucm9sZQorICAg
ICAgICAgICAgICAgIHdoZW4gIlUiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiVXNlIgor
ICAgICAgICAgICAgICAgIHdoZW4gIkQiCisgICAgICAgICAgICAgICAgICAgIHJvbGUgPSAiRGVm
IgorICAgICAgICAgICAgICAgIHdoZW4gIlVEIgorICAgICAgICAgICAgICAgICAgICByb2xlID0g
IlVzZURlZiIKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJhaXNl
CisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJmdW5jdG9yKGFyZ3NbI3tpbmRleH1dLCBBcmc6OiN7cm9sZX0sIEFyZzo6I3th
cmcudHlwZX1QKTsiCisgICAgICAgICAgICB9CisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRw
LnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgInRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50
cz4iCisgICAgb3V0cC5wdXRzICJBTFdBWVNfSU5MSU5FIGJvb2wgaXNWYWxpZEZvcm0oT3Bjb2Rl
IG9wY29kZSwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykiCisgICAgb3V0cC5wdXRzICJ7IgorICAg
IG91dHAucHV0cyAiQXJnOjpLaW5kIGtpbmRzW3NpemVvZi4uLihBcmd1bWVudHMpXSA9IHsgYXJn
dW1lbnRzLi4uIH07IgorICAgIG91dHAucHV0cyAic3dpdGNoIChvcGNvZGUpIHsiCisgICAgJG9w
Y29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9wY29kZSB8CisgICAgICAgIG91dHAucHV0
cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisgICAgICAgIG91dHAucHV0cyAic3dpdGNoIChzaXpl
b2YuLi4oQXJndW1lbnRzKSkgeyIKKyAgICAgICAgdW5sZXNzIG9wY29kZS5zcGVjaWFsCisgICAg
ICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgIHwgb3Zlcmxv
YWQgfAorICAgICAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGh9OiIKKyAgICAgICAgICAgICAgICBjb2x1bW5HZXR0ZXIgPSBwcm9jIHsgfCBjb2x1
bW5JbmRleCB8ICJvcGdlbkhpZGRlblB0cklkZW50aXR5KGtpbmRzKVsje2NvbHVtbkluZGV4fV0i
IH0KKyAgICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQorICAgICAgICAgICAg
ICAgIGNhbGxiYWNrID0gcHJvYyB7CisgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAg
ICAgICAgICAgICAgICAgIHNwZWNpYWwgPSAobm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBraW5k
IHwga2luZC5zcGVjaWFsIH0pCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5f
UkVUVVJOKCN7c3BlY2lhbH0pOyIKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
bWF0Y2hGb3JtcyhvdXRwLCA6c2FmZSwgb3ZlcmxvYWQuZm9ybXMsIDAsIGNvbHVtbkdldHRlciwg
ZmlsdGVyLCBjYWxsYmFjaykKKyAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgZW5kCisgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisg
ICAgICAgIG91dHAucHV0cyAiYnJlYWs7IgorICAgICAgICBvdXRwLnB1dHMgIn0iCisgICAgICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgIH0KKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAg
IG91dHAucHV0cyAiYnJlYWs7IgorICAgIG91dHAucHV0cyAifSIKKyAgICBvdXRwLnB1dHMgInJl
dHVybiBmYWxzZTsgIgorICAgIG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiaW5saW5l
IGJvb2wgaXNUZXJtaW5hbChPcGNvZGUgb3Bjb2RlKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAg
b3V0cC5wdXRzICJzd2l0Y2ggKG9wY29kZSkgeyIKKyAgICAkb3Bjb2Rlcy52YWx1ZXMuZWFjaCB7
CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgaWYgb3Bjb2RlLmtpbmQgPT0gOnRlcm1pbmFs
IG9yIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAgICAgIG91dHAucHV0cyAiY2FzZSAj
e29wY29kZS5uYW1lfToiCisgICAgICAgIGVuZAorICAgIH0KKyAgICBvdXRwLnB1dHMgInJldHVy
biB0cnVlOyIKKyAgICBvdXRwLnB1dHMgImRlZmF1bHQ6IgorICAgIG91dHAucHV0cyAicmV0dXJu
IGZhbHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisgICAgb3V0cC5wdXRzICJ9IgorICAgIAorICAg
IG91dHAucHV0cyAifSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6OkFpciIKK30KKword3JpdGVI
KCJPcGNvZGVHZW5lcmF0ZWQiKSB7CisgICAgfCBvdXRwIHwKKyAgICBvdXRwLnB1dHMgIiNpbmNs
dWRlIFwiQWlySW5zdElubGluZXMuaFwiIgorICAgIG91dHAucHV0cyAiI2luY2x1ZGUgXCJ3dGYv
UHJpbnRTdHJlYW0uaFwiIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIFdURiB7IgorICAgIG91
dHAucHV0cyAidXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM6OkFpcjsiCisgICAgb3V0cC5wdXRzICJ2
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bjb2RlIG9wY29kZSkiCisgICAg
b3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAiICAgIHN3aXRjaCAob3Bjb2RlKSB7IgorICAg
ICRvcGNvZGVzLmtleXMuZWFjaCB7CisgICAgICAgIHwgb3Bjb2RlIHwKKyAgICAgICAgb3V0cC5w
dXRzICIgICAgY2FzZSAje29wY29kZX06IgorICAgICAgICBvdXRwLnB1dHMgIiAgICAgICAgb3V0
LnByaW50KFwiI3tvcGNvZGV9XCIpOyIKKyAgICAgICAgb3V0cC5wdXRzICIgICAgICAgIHJldHVy
bjsiCisgICAgfQorICAgIG91dHAucHV0cyAiICAgIH0iCisgICAgb3V0cC5wdXRzICIgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAu
cHV0cyAifSAvLyBuYW1lc3BhY2UgV1RGIgorICAgIG91dHAucHV0cyAibmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgeyIKKyAgICBvdXRwLnB1dHMgImJvb2wgSW5z
dDo6aXNWYWxpZEZvcm0oKSIKKyAgICBvdXRwLnB1dHMgInsiCisgICAgbWF0Y2hJbnN0T3Zlcmxv
YWRGb3JtKG91dHAsIDpzYWZlLCAidGhpcyIpIHsKKyAgICAgICAgfCBvcGNvZGUsIG92ZXJsb2Fk
LCBmb3JtIHwKKyAgICAgICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0
cyAiaWYgKGFyZ3Muc2l6ZSgpIDwgMSkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBm
YWxzZTsiCisgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghYXJnc1swXS5pc1NwZWNpYWwoKSki
CisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBvdXRw
LnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+aXNWYWxpZCgqdGhpcykpOyIK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbmVlZHNNb3JlVmFsaWRhdGlvbiA9IGZhbHNlCisg
ICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoLnRpbWVzIHsKKyAgICAgICAgICAg
ICAgICB8IGluZGV4IHwKKyAgICAgICAgICAgICAgICByb2xlID0gb3ZlcmxvYWQuc2lnbmF0dXJl
W2luZGV4XS5yb2xlCisgICAgICAgICAgICAgICAgdHlwZSA9IG92ZXJsb2FkLnNpZ25hdHVyZVtp
bmRleF0udHlwZQorICAgICAgICAgICAgICAgIGtpbmQgPSBmb3JtLmtpbmRzW2luZGV4XQorICAg
ICAgICAgICAgICAgIG5lZWRzTW9yZVZhbGlkYXRpb24gfD0ga2luZC5zcGVjaWFsCisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgIyBXZSBhbHJlYWR5IGtub3cgdGhhdCB0aGUgZm9y
bSBtYXRjaGVzLiBXZSBkb24ndCBoYXZlIHRvIHZhbGlkYXRlIHRoZSByb2xlLCBzaW5jZQorICAg
ICAgICAgICAgICAgICMga2luZCBpbXBsaWVzIHJvbGUuIFNvLCB0aGUgb25seSB0aGluZyBsZWZ0
IHRvIHZhbGlkYXRlIGlzIHRoZSB0eXBlLiBBbmQgd2Ugb25seSBoYXZlCisgICAgICAgICAgICAg
ICAgIyB0byB2YWxpZGF0ZSB0aGUgdHlwZSBpZiB3ZSBoYXZlIGEgVG1wLgorICAgICAgICAgICAg
ICAgIGlmIGtpbmQubmFtZSA9PSAiVG1wIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICghYXJnc1sje2luZGV4fV0udG1wKCkuaXMje3R5cGV9UCgpKSIKKyAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIG5lZWRzTW9yZVZhbGlkYXRpb24KKyAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghaXMje29wY29kZS5uYW1lfVZhbGlkKCp0aGlz
KSkiCisgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAg
ICAgICAgICAgIGVuZAorICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4odHJ1ZSk7
IgorICAgICAgICBlbmQKKyAgICB9CisgICAgb3V0cC5wdXRzICJyZXR1cm4gZmFsc2U7IgorICAg
IG91dHAucHV0cyAifSIKKworICAgIG91dHAucHV0cyAiYm9vbCBJbnN0OjphZG1pdHNTdGFjayh1
bnNpZ25lZCBhcmdJbmRleCkiCisgICAgb3V0cC5wdXRzICJ7IgorICAgIG91dHAucHV0cyAic3dp
dGNoIChvcGNvZGUpIHsiCisgICAgJG9wY29kZXMudmFsdWVzLmVhY2ggeworICAgICAgICB8IG9w
Y29kZSB8CisgICAgICAgIG91dHAucHV0cyAiY2FzZSAje29wY29kZS5uYW1lfToiCisKKyAgICAg
ICAgaWYgb3Bjb2RlLnNwZWNpYWwKKyAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFhcmdJbmRl
eCkiCisgICAgICAgICAgICBvdXRwLnB1dHMgInJldHVybiBmYWxzZTsiCisgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTihhcmdzWzBdLnNwZWNpYWwoKS0+YWRtaXRzU3RhY2soKnRo
aXMsIGFyZ0luZGV4KSk7IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFN3aXRjaCBvbiB0
aGUgYXJnSW5kZXguCisgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJnSW5kZXgpIHsi
CisKKyAgICAgICAgICAgIG51bUFyZ3MgPSBvcGNvZGUub3ZlcmxvYWRzLm1hcCB7CisgICAgICAg
ICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJl
Lmxlbmd0aAorICAgICAgICAgICAgfS5tYXgKKyAgICAgICAgICAgIAorICAgICAgICAgICAgbnVt
QXJncy50aW1lcyB7CisgICAgICAgICAgICAgICAgfCBhcmdJbmRleCB8CisgICAgICAgICAgICAg
ICAgb3V0cC5wdXRzICJjYXNlICN7YXJnSW5kZXh9OiIKKworICAgICAgICAgICAgICAgICMgQ2hl
Y2sgaWYgYWxsIG9mIHRoZSBmb3JtcyBvZiBhbGwgb2YgdGhlIG92ZXJsb2FkcyBlaXRoZXIgZG8s
IG9yIGRvbid0LCBhZG1pdCBhbiBhZGRyZXNzCisgICAgICAgICAgICAgICAgIyBhdCB0aGlzIGlu
ZGV4LiBXZSBleHBlY3QgdGhpcyB0byBiZSBhIHZlcnkgY29tbW9uIGNhc2UuCisgICAgICAgICAg
ICAgICAgbnVtWWVzID0gMAorICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAg
ICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgIHwgb3Zlcmxv
YWQgfAorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3Jt
LmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ZZXMgKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAg
IyBOb3RlIHRoYXQgd2UgZGVsaWJlcmF0ZWx5IHRlc3QgbnVtWWVzIGZpcnN0IGJlY2F1c2UgaWYg
d2UgZW5kIHVwIHdpdGggbm8gZm9ybXMsIHdlIHdhbnQKKyAgICAgICAgICAgICAgICAjIHRvIHNh
eSB0aGF0IEFkZHJlc3MgaXMgaW5hZG1pc3NpYmxlLgorICAgICAgICAgICAgICAgIGlmIG51bVll
cyA9PSAwCisgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNl
KTsiCisgICAgICAgICAgICAgICAgZWxzaWYgbnVtTm8gPT0gMAorICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgICAgICAjIE5vdyBkbyB0aGUgZnVsbCB0ZXN0LgorCisgICAgICAgICAg
ICAgICAgICAgIG5lZWRPdmVybG9hZFN3aXRjaCA9IChvcGNvZGUub3ZlcmxvYWRzLnNpemUgIT0g
MSkKKworICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgInN3aXRjaCAoYXJncy5zaXplKCkp
IHsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAorICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3Zl
cmxvYWRzLmVhY2ggeworICAgICAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdo
YXQgd2Ugd2FudC4KKyAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyA9IDAKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG51bU5vID0gMAorICAgICAgICAgICAgICAgICAgICAgICAgb3Zlcmxv
YWQuZm9ybXMuZWFjaCB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRk
ciIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG51bU5vICs9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgbnVtWWVzID09IDAK
KyAgICAgICAgICAgICAgICAgICAgICAgICMgRG9uJ3QgZW1pdCBhbnl0aGluZywganVzdCBkcm9w
IHRvIGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgICAgICBlbHNpZiBudW1ObyA9PSAwCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJjYXNlICN7b3ZlcmxvYWQuc2ln
bmF0dXJlLmxlbmd0aH06IiBpZiBuZWVkT3ZlcmxvYWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJicmVhazsiIGlmIG5lZWRPdmVybG9hZFN3aXRjaAor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiY2FzZSAje292ZXJsb2FkLnNpZ25hdHVyZS5sZW5ndGh9OiIgaWYgbmVlZE92
ZXJsb2FkU3dpdGNoCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFRoaXMgaXMgaG93
IHdlIHRlc3QgdGhlIGh5cG90aGVzaXMgdGhhdCBjaGFuZ2luZyB0aGlzIGFyZ3VtZW50IHRvIGFu
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBhZGRyZXNzIHlpZWxkcyBhIHZhbGlkIGZv
cm0uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uR2V0dGVyID0gcHJvYyB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgY29sdW1uSW5kZXggfAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBjb2x1bW5JbmRleCA9PSBhcmdJbmRleAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFyZzo6QWRkciIKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgImFyZ3NbI3tjb2x1bW5JbmRleH1dLmtpbmQoKSIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZpbHRlciA9IHByb2MgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB8IGZvcm1zIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVz
ID0gMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1zLmVhY2ggeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIG51bVll
cyA9PSAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIERyb3AgZG93biwg
ZW1pdCBubyBjb2RlLCBzaW5jZSB3ZSBjYW5ub3QgbWF0Y2guCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0cnVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgS2VlcCBnb2luZy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTih0cnVlKTsiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNo
Rm9ybXMob3V0cCwgOnNhZmUsIG92ZXJsb2FkLmZvcm1zLCAwLCBjb2x1bW5HZXR0ZXIsIGZpbHRl
ciwgY2FsbGJhY2spCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJy
ZWFrOyIgaWYgbmVlZE92ZXJsb2FkU3dpdGNoCisgICAgICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiBuZWVkT3Zlcmxv
YWRTd2l0Y2gKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiZGVmYXVsdDoiCisg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJicmVhazsiCisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIG91dHAu
cHV0cyAiZGVmYXVsdDoiCisgICAgICAgICAgICBvdXRwLnB1dHMgImJyZWFrOyIKKyAgICAgICAg
ICAgIG91dHAucHV0cyAifSIKKyAgICAgICAgZW5kCisgICAgICAgIAorICAgICAgICBvdXRwLnB1
dHMgImJyZWFrOyIKKyAgICB9CisgICAgb3V0cC5wdXRzICJkZWZhdWx0OiI7CisgICAgb3V0cC5w
dXRzICJicmVhazsiCisgICAgb3V0cC5wdXRzICJ9IgorICAgIG91dHAucHV0cyAicmV0dXJuIGZh
bHNlOyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRwLnB1dHMgIkNDYWxsSGVscGVyczo6
SnVtcCBJbnN0OjpnZW5lcmF0ZShDQ2FsbEhlbHBlcnMmIGppdCwgR2VuZXJhdGlvbkNvbnRleHQm
IGNvbnRleHQpIgorICAgIG91dHAucHV0cyAieyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJB
TShqaXQpOyIKKyAgICBvdXRwLnB1dHMgIlVOVVNFRF9QQVJBTShjb250ZXh0KTsiCisgICAgb3V0
cC5wdXRzICJDQ2FsbEhlbHBlcnM6Okp1bXAgcmVzdWx0OyIKKyAgICBtYXRjaEluc3RPdmVybG9h
ZEZvcm0ob3V0cCwgOmZhc3QsICJ0aGlzIikgeworICAgICAgICB8IG9wY29kZSwgb3ZlcmxvYWQs
IGZvcm0gfAorICAgICAgICBpZiBvcGNvZGUuc3BlY2lhbAorICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4oYXJnc1swXS5zcGVjaWFsKCktPmdlbmVyYXRlKCp0aGlzLCBqaXQsIGNv
bnRleHQpKTsiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIGZvcm0uYWx0TmFtZQorICAg
ICAgICAgICAgICAgIG1ldGhvZE5hbWUgPSBmb3JtLmFsdE5hbWUKKyAgICAgICAgICAgIGVsc2UK
KyAgICAgICAgICAgICAgICBtZXRob2ROYW1lID0gb3Bjb2RlLm1hc21OYW1lCisgICAgICAgICAg
ICBlbmQKKyAgICAgICAgICAgIGlmIG9wY29kZS5raW5kID09IDpicmFuY2gKKyAgICAgICAgICAg
ICAgICBvdXRwLnByaW50ICJyZXN1bHQgPSAiCisgICAgICAgICAgICBlbmQKKyAgICAgICAgICAg
IG91dHAucHJpbnQgImppdC4je21ldGhvZE5hbWV9KCIKKworICAgICAgICAgICAgZm9ybS5raW5k
cy5lYWNoX3dpdGhfaW5kZXggeworICAgICAgICAgICAgICAgIHwga2luZCwgaW5kZXggfAorICAg
ICAgICAgICAgICAgIGlmIGluZGV4ICE9IDAKKyAgICAgICAgICAgICAgICAgICAgb3V0cC5wcmlu
dCAiLCAiCisgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgY2FzZSBraW5kLm5h
bWUKKyAgICAgICAgICAgICAgICB3aGVuICJUbXAiCisgICAgICAgICAgICAgICAgICAgIGlmIG92
ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0udHlwZSA9PSAiRyIKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmdwcigpIgorICAgICAgICAgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9
XS5mcHIoKSIKKyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgd2hlbiAi
SW1tIgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1Ry
dXN0ZWRJbW0zMigpIgorICAgICAgICAgICAgICAgIHdoZW4gIkltbTY0IgorICAgICAgICAgICAg
ICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc1RydXN0ZWRJbW02NCgpIgorICAg
ICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgIG91dHAucHJpbnQg
ImFyZ3NbI3tpbmRleH1dLmFzQWRkcmVzcygpIgorICAgICAgICAgICAgICAgIHdoZW4gIkluZGV4
IgorICAgICAgICAgICAgICAgICAgICBvdXRwLnByaW50ICJhcmdzWyN7aW5kZXh9XS5hc0Jhc2VJ
bmRleCgpIgorICAgICAgICAgICAgICAgIHdoZW4gIlJlbENvbmQiCisgICAgICAgICAgICAgICAg
ICAgIG91dHAucHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVsYXRpb25hbENvbmRpdGlvbigpIgor
ICAgICAgICAgICAgICAgIHdoZW4gIlJlc0NvbmQiCisgICAgICAgICAgICAgICAgICAgIG91dHAu
cHJpbnQgImFyZ3NbI3tpbmRleH1dLmFzUmVzdWx0Q29uZGl0aW9uKCkiCisgICAgICAgICAgICAg
ICAgZW5kCisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG91dHAucHV0cyAiKTsiCisgICAg
ICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihyZXN1bHQpOyIKKyAgICAgICAgZW5kCisg
ICAgfQorICAgIG91dHAucHV0cyAiUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsiCisgICAg
b3V0cC5wdXRzICJyZXR1cm4gcmVzdWx0OyIKKyAgICBvdXRwLnB1dHMgIn0iCisKKyAgICBvdXRw
LnB1dHMgIn0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIiCit9CisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE5MTY1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMTcwLDcgKzE3MCw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICBDb2RlQmxvY2sq
IGFsdGVybmF0aXZlRm9ySmV0dGlzb24oKTsgICAgCi0gICAgQ29kZUJsb2NrKiBiYXNlbGluZUFs
dGVybmF0aXZlKCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZUJsb2NrKiBiYXNlbGluZUFs
dGVybmF0aXZlKCk7CiAgICAgCiAgICAgLy8gRklYTUU6IEdldCByaWQgb2YgdGhpcy4KICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTIzNjc3CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnLmgJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvUmVnLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw3ICsxMDUsNiBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAgICAg
CiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXggIT0gaW52YWxpZCgpOyB9
Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsgfQogICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CiAKICAgICBi
b29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCA9PSBk
ZWxldGVkKCk7IH0KQEAgLTE3MCw2ICsxNjksNDYgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogCisgICAgY2xhc3MgQWxsUmVnc0l0ZXJhYmxlIHsK
KyAgICBwdWJsaWM6CisKKyAgICAgICAgY2xhc3MgaXRlcmF0b3IgeworICAgICAgICBwdWJsaWM6
CisgICAgICAgICAgICBpdGVyYXRvcigpIHsgfQorCisgICAgICAgICAgICBleHBsaWNpdCBpdGVy
YXRvcihSZWcgcmVnKQorICAgICAgICAgICAgICAgIDogbV9yZWdJbmRleChyZWcuaW5kZXgoKSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUmVnIG9wZXJhdG9y
KigpIGNvbnN0IHsgcmV0dXJuIFJlZzo6ZnJvbUluZGV4KG1fcmVnSW5kZXgpOyB9CisKKyAgICAg
ICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICBtX3JlZ0luZGV4ID0gUmVnOjpmcm9tSW5kZXgobV9yZWdJbmRleCkubmV4dCgpLmluZGV4
KCk7CisgICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAg
ICAgICAgICAgeworICAgICAgICAgICAgICAgIHJldHVybiBtX3JlZ0luZGV4ID09IG90aGVyLm1f
cmVnSW5kZXg7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShj
b25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgICAgICB7CisgICAgICAgICAgICAg
ICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICAgICAgfQorCisgICAgICAgIHBy
aXZhdGU6CisgICAgICAgICAgICB1bnNpZ25lZCBtX3JlZ0luZGV4OworICAgICAgICB9OworCisg
ICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoUmVnOjpmaXJz
dCgpKTsgfQorICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihS
ZWcoKSk7IH0KKyAgICB9OworCisgICAgc3RhdGljIEFsbFJlZ3NJdGVyYWJsZSBhbGwoKSB7IHJl
dHVybiBBbGxSZWdzSXRlcmFibGUoKTsgfQorCiBwcml2YXRlOgogICAgIHN0YXRpYyB1aW50OF90
IGludmFsaWQoKSB7IHJldHVybiAweGZmOyB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJBdE9mZnNldExpc3QuY3BwCShyZXZpc2lvbiAxOTE2NTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBAQCBSZWdpc3RlckF0T2Zmc2V0TGlzdDo6UmVn
aXN0ZXJBdE9mZnNldExpCiAgICAgaWYgKG9mZnNldEJhc2VUeXBlID09IEZyYW1lUG9pbnRlckJh
c2VkKQogICAgICAgICBvZmZzZXQgPSAtKHN0YXRpY19jYXN0PHB0cmRpZmZfdD4obnVtYmVyT2ZS
ZWdpc3RlcnMpICogc2l6ZW9mKHZvaWQqKSk7CiAKLSAgICBmb3IgKFJlZyByZWcgPSBSZWc6OmZp
cnN0KCk7IHJlZyA8PSBSZWc6Omxhc3QoKTtyZWcgPSByZWcubmV4dCgpKSB7CisgICAgZm9yIChS
ZWcgcmVnID0gUmVnOjpmaXJzdCgpOyByZWcgPD0gUmVnOjpsYXN0KCk7IHJlZyA9IHJlZy5uZXh0
KCkpIHsKICAgICAgICAgaWYgKHJlZ2lzdGVyU2V0LmdldChyZWcpKSB7CiAgICAgICAgICAgICBh
cHBlbmQoUmVnaXN0ZXJBdE9mZnNldChyZWcsIG9mZnNldCkpOwogICAgICAgICAgICAgb2Zmc2V0
ICs9IHNpemVvZih2b2lkKik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lz
dGVyQXRPZmZzZXRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9SZWdpc3RlckF0T2Zmc2V0TGlzdC5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyQXRPZmZzZXRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDcgKzQ3LDcgQEAgcHVibGljOgogICAgICAgICBtX3JlZ2lzdGVycy5jbGVhcigpOwogICAg
IH0KIAotICAgIHNpemVfdCBzaXplKCkKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CiAgICAgewog
ICAgICAgICByZXR1cm4gbV9yZWdpc3RlcnMuc2l6ZSgpOwogICAgIH0KQEAgLTY2LDYgKzY2LDkg
QEAgcHVibGljOgogICAgIFJlZ2lzdGVyQXRPZmZzZXQqIGZpbmQoUmVnKSBjb25zdDsKICAgICB1
bnNpZ25lZCBpbmRleE9mKFJlZykgY29uc3Q7IC8vIFJldHVybnMgVUlOVF9NQVggaWYgbm90IGZv
dW5kLgogCisgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+Ojpjb25zdF9pdGVyYXRvciBiZWdp
bigpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaXN0ZXJzLmJlZ2luKCk7IH0KKyAgICBWZWN0b3I8UmVn
aXN0ZXJBdE9mZnNldD46OmNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVn
aXN0ZXJzLmVuZCgpOyB9CisKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZ2lzdGVyQXRPZmZzZXQ+
IG1fcmVnaXN0ZXJzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0
ZXJTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVy
U2V0LmgJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYgKzExOCwxMyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFJlZ2lzdGVyU2V0JiBvdGhlcikgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3IgPT0gb3RoZXIubV92ZWN0b3I7IH0KICAgICB1bnNpZ25lZCBoYXNo
KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaGFzaCgpOyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBGdW5jdG9yPgorICAgIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKSBj
b25zdAorICAgIHsKKyAgICAgICAgZm9yIChzaXplX3QgaW5kZXggOiBtX3ZlY3Rvci5zZXRCaXRz
KCkpCisgICAgICAgICAgICBmdW5jdG9yKFJlZzo6ZnJvbUluZGV4KGluZGV4KSk7CisgICAgfQog
ICAgIAogcHJpdmF0ZToKICAgICB2b2lkIHNldEFueShSZWcgcmVnKSB7IHNldChyZWcpOyB9Cklu
ZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcg
Y29weSkKQEAgLTEsMyArMSwzMSBAQAorMjAxNS0xMC0yOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9A
YXBwbGUuY29tPgorCisgICAgICAgIENyZWF0ZSBhIHN1cGVyIHJvdWdoIHByb3RvdHlwZSBvZiBC
MworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwMjgw
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXVEYu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiB3dGYvQ01ha2VMaXN0cy50eHQ6
CisgICAgICAgICogd3RmL0hhc2hTZXQuaDoKKyAgICAgICAgKFdURjo6Y29weVRvVmVjdG9yKToK
KyAgICAgICAgKFdURjo6PSk6CisgICAgICAgICogd3RmL0xpc3REdW1wLmg6CisgICAgICAgIChX
VEY6OlBvaW50ZXJMaXN0RHVtcDo6UG9pbnRlckxpc3REdW1wKToKKyAgICAgICAgKFdURjo6UG9p
bnRlckxpc3REdW1wOjpkdW1wKToKKyAgICAgICAgKFdURjo6TWFwRHVtcDo6TWFwRHVtcCk6Cisg
ICAgICAgIChXVEY6Omxpc3REdW1wKToKKyAgICAgICAgKFdURjo6cG9pbnRlckxpc3REdW1wKToK
KyAgICAgICAgKFdURjo6c29ydGVkTGlzdER1bXApOgorICAgICAgICAqIHd0Zi9NYXRoRXh0cmFz
Lmg6CisgICAgICAgIChXVEY6OmxlZnRTaGlmdFdpdGhTYXR1cmF0aW9uKToKKyAgICAgICAgKFdU
Rjo6cmFuZ2VzT3ZlcmxhcCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICog
d3RmL1Njb3BlZExhbWJkYS5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6c2NvcGVkTGFtYmRhKToK
KyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5oOgorICAgICAgICAoV1RGOjpjcmVhdGVTaGFyZWRU
YXNrKToKKwogMjAxNS0xMC0yMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZhY3RvciBvdXQgdGhlIGdyYXBoIG5vZGUgd29ya2xpc3RzIGZyb20gREZHIGludG8g
V1RGCkluZGV4OiBTb3VyY2UvV1RGL1dURi54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYvV1RGLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDYgKzUwLDcgQEAKIAkJMEZFNDQ3OUQxQjdBQUEwMzAwOTQ5
OEVCIC8qIFdvcmRMb2NrLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRkU0NDc5QjFCN0FBQTAzMDA5NDk4RUIgLyogV29yZExvY2suaCAqLzsgfTsKIAkJ
MEZFQjNEQ0YxQkI1RDY4NDAwOUQ3QUFEIC8qIFNoYXJlZFRhc2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUIzRENFMUJCNUQ2ODQwMDlEN0FBRCAv
KiBTaGFyZWRUYXNrLmggKi87IH07CiAJCTBGRUIzREQxMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJh
bGxlbFZlY3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRkVCM0REMDFCQjczNjZCMDA5RDdBQUQgLyogUGFyYWxsZWxWZWN0b3JJdGVy
YXRvci5oICovOyB9OworCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRh
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRC
MDFCREFDRDM5MDA4MEZGNzQgLyogU2NvcGVkTGFtYmRhLmggKi87IH07CiAJCTBGRUM4NEFGMUJE
ODI1MzEwMDgwRkY3NCAvKiBHcmFwaE5vZGVXb3JrbGlzdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0QUUxQkQ4MjUzMTAwODBGRjc0IC8qIEdy
YXBoTm9kZVdvcmtsaXN0LmggKi87IH07CiAJCTBGRUQ2N0I2MUIyMkQ0RDgwMDY2Q0UxNSAvKiBU
aW55UHRyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRkVENjdCNTFCMjJENEQ4MDA2NkNFMTUgLyogVGlueVB0clNldC5oICovOyB9OwogCQkwRkY4
NjA5NTFCQ0NCRDc0MDA0NTEyN0YgLyogUG9pbnRlckNvbXBhcmlzb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjg2MDk0MUJDQ0JENzQwMDQ1MTI3
RiAvKiBQb2ludGVyQ29tcGFyaXNvbi5oICovOyB9OwpAQCAtMzQ1LDYgKzM0Niw3IEBACiAJCTBG
RTQ0NzlCMUI3QUFBMDMwMDk0OThFQiAvKiBXb3JkTG9jay5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXb3JkTG9jay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVCM0RDRTFCQjVENjg0MDA5RDdBQUQgLyogU2hhcmVkVGFzay5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBTaGFyZWRUYXNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUIzREQwMUJCNzM2NkIwMDlEN0FBRCAvKiBQYXJhbGxlbFZlY3Rvckl0ZXJhdG9yLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcmFsbGVsVmVjdG9ySXRlcmF0b3Iu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZFQzg0QjAxQkRBQ0QzOTAwODBGRjc0
IC8qIFNjb3BlZExhbWJkYS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTY29w
ZWRMYW1iZGEuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0QUUxQkQ4MjUz
MTAwODBGRjc0IC8qIEdyYXBoTm9kZVdvcmtsaXN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IEdyYXBoTm9kZVdvcmtsaXN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUQ2N0I1MUIyMkQ0RDgwMDY2Q0UxNSAvKiBUaW55UHRyU2V0LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRpbnlQdHJTZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZGODYwOTQxQkNDQkQ3NDAwNDUxMjdGIC8qIFBvaW50ZXJDb21wYXJpc29uLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBvaW50ZXJDb21wYXJpc29uLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NzAsNiArODcyLDcgQEAKIAkJCQkxNDY5NDE5
NDE2RUFBRkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyLmggKi8sCiAJCQkJMTQ2OTQxOTgxNkVB
QjA0MTAwMjRFMTQ2IC8qIFNjaGVkdWxlUGFpckNGLmNwcCAqLywKIAkJCQkxNDY5NDE5NTE2RUFB
RkY4MDAyNEUxNDYgLyogU2NoZWR1bGVQYWlyTWFjLm1tICovLAorCQkJCTBGRUM4NEIwMUJEQUNE
MzkwMDgwRkY3NCAvKiBTY29wZWRMYW1iZGEuaCAqLywKIAkJCQlBOEE0NzMwNjE1MUE4MjVCMDA0
MTIzRkYgLyogU2VnbWVudGVkVmVjdG9yLmggKi8sCiAJCQkJQThBNDczMDcxNTFBODI1QjAwNDEy
M0ZGIC8qIFNlbnRpbmVsTGlua2VkTGlzdC5oICovLAogCQkJCUE4QTQ3MzA4MTUxQTgyNUIwMDQx
MjNGRiAvKiBTSEExLmNwcCAqLywKQEAgLTEyNDQsNiArMTI0Nyw3IEBACiAJCQkJQThBNDc0NDkx
NTFBODI1QjAwNDEyM0ZGIC8qIFRocmVhZElkZW50aWZpZXJEYXRhUHRocmVhZHMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUE4QTQ3NDRCMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmcuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUE4QTQ3NDREMTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRpbmdQcmlt
aXRpdmVzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkVDODRCMTFCREFDRDM5MDA4MEZGNzQgLyog
U2NvcGVkTGFtYmRhLmggaW4gSGVhZGVycyAqLywKIAkJCQlBOEE0NzQ1NDE1MUE4MjVCMDA0MTIz
RkYgLyogVGhyZWFkU2FmZVJlZkNvdW50ZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4QTQ3NDU1
MTUxQTgyNUIwMDQxMjNGRiAvKiBUaHJlYWRTcGVjaWZpYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFRDY3QjYxQjIyRDREODAwNjZDRTE1IC8qIFRpbnlQdHJTZXQuaCBpbiBIZWFkZXJzICovLApJ
bmRleDogU291cmNlL1dURi93dGYvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYv
d3RmL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw3IEBAIHNldChX
VEZfSEVBREVSUwogICAgIFNIQTEuaAogICAgIFNoYXJlZFRhc2suaAogICAgIFNhdHVyYXRlZEFy
aXRobWV0aWMuaAorICAgIFNjb3BlZExhbWJkYS5oCiAgICAgU2VnbWVudGVkVmVjdG9yLmgKICAg
ICBTdGFja0JvdW5kcy5oCiAgICAgU3RhY2tTdGF0cy5oCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9I
YXNoU2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvSGFzaFNldC5oCShyZXZpc2lv
biAxOTE2NTApCisrKyBTb3VyY2UvV1RGL3d0Zi9IYXNoU2V0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTExNCw4ICsxMTQsOSBAQCBuYW1lc3BhY2UgV1RGIHsKICAgICAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgViA9IFZhbHVlVHlwZT4gdHlwZW5hbWUgc3RkOjplbmFibGVfaWY8SXNTbWFydFB0cjxWPjo6
dmFsdWUsIFZhbHVlVHlwZT46OnR5cGUgdGFrZSh0eXBlbmFtZSBHZXRQdHJIZWxwZXI8Vj46OlB0
clR5cGUpOwogCiAgICAgICAgIHN0YXRpYyBib29sIGlzVmFsaWRWYWx1ZShjb25zdCBWYWx1ZVR5
cGUmKTsKLSAgICAgICAgCi0gICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBIYXNoU2V0Jikg
Y29uc3Q7CisKKyAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3RoZXJDb2xsZWN0aW9uPgorICAg
ICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgT3RoZXJDb2xsZWN0aW9uJikgY29uc3Q7CiAKICAg
ICBwcml2YXRlOgogICAgICAgICBIYXNoVGFibGVUeXBlIG1faW1wbDsKQEAgLTMzNywxMiArMzM4
LDEzIEBAIG5hbWVzcGFjZSBXVEYgewogICAgIH0gIAogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VCwgdHlwZW5hbWUgVSwgdHlwZW5hbWUgVj4KLSAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFY+OjpvcGVyYXRvcj09KGNvbnN0IEhhc2hTZXQmIG90aGVyKSBjb25zdAorICAgIHRlbXBsYXRl
PHR5cGVuYW1lIE90aGVyQ29sbGVjdGlvbj4KKyAgICBpbmxpbmUgYm9vbCBIYXNoU2V0PFQsIFUs
IFY+OjpvcGVyYXRvcj09KGNvbnN0IE90aGVyQ29sbGVjdGlvbiYgb3RoZXJDb2xsZWN0aW9uKSBj
b25zdAogICAgIHsKLSAgICAgICAgaWYgKHNpemUoKSAhPSBvdGhlci5zaXplKCkpCisgICAgICAg
IGlmIChzaXplKCkgIT0gb3RoZXJDb2xsZWN0aW9uLnNpemUoKSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgZm9yIChjb25zdF9pdGVyYXRvciBpdGVyID0gYmVnaW4oKTsgaXRl
ciAhPSBlbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgICAgICBpZiAoIW90aGVyLmNvbnRhaW5zKCpp
dGVyKSkKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvdGhlciA6IG90aGVyQ29sbGVjdGlvbikg
eworICAgICAgICAgICAgaWYgKCFjb250YWlucyhvdGhlcikpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgICAgIHJldHVybiB0cnVlOwpJbmRleDogU291cmNl
L1dURi93dGYvTGlzdER1bXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVt
cC5oCShyZXZpc2lvbiAxOTE2NTApCisrKyBTb3VyY2UvV1RGL3d0Zi9MaXN0RHVtcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC01Myw2ICs1MywyNiBAQCBwcml2YXRlOgogfTsKIAogdGVtcGxhdGU8dHlwZW5h
bWUgVD4KK2NsYXNzIFBvaW50ZXJMaXN0RHVtcCB7CitwdWJsaWM6CisgICAgUG9pbnRlckxpc3RE
dW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IGNoYXIqIGNvbW1hKQorICAgICAgICA6IG1fbGlzdChs
aXN0KQorICAgICAgICAsIG1fY29tbWEoY29tbWEpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2
b2lkIGR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGZvciAodHlw
ZW5hbWUgVDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fbGlzdC5iZWdpbigpOyBpdGVyICE9IG1f
bGlzdC5lbmQoKTsgKytpdGVyKQorICAgICAgICAgICAgb3V0LnByaW50KG1fY29tbWEsIHBvaW50
ZXJEdW1wKCppdGVyKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFQmIG1fbGlzdDsK
KyAgICBDb21tYVByaW50ZXIgbV9jb21tYTsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CiBj
bGFzcyBNYXBEdW1wIHsKIHB1YmxpYzoKICAgICBNYXBEdW1wKGNvbnN0IFQmIG1hcCwgY29uc3Qg
Y2hhciogYXJyb3csIGNvbnN0IGNoYXIqIGNvbW1hKQpAQCAtODAsNiArMTAwLDEyIEBAIExpc3RE
dW1wPFQ+IGxpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnMKICAgICByZXR1cm4gTGlzdER1bXA8
VD4obGlzdCwgY29tbWEpOwogfQogCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorUG9pbnRlckxpc3RE
dW1wPFQ+IHBvaW50ZXJMaXN0RHVtcChjb25zdCBUJiBsaXN0LCBjb25zdCBjaGFyKiBjb21tYSA9
ICIsICIpCit7CisgICAgcmV0dXJuIFBvaW50ZXJMaXN0RHVtcDxUPihsaXN0LCBjb21tYSk7Cit9
CisKIHRlbXBsYXRlPHR5cGVuYW1lIFQsIHR5cGVuYW1lIENvbXBhcmF0b3I+CiBDU3RyaW5nIHNv
cnRlZExpc3REdW1wKGNvbnN0IFQmIGxpc3QsIGNvbnN0IENvbXBhcmF0b3ImIGNvbXBhcmF0b3Is
IGNvbnN0IGNoYXIqIGNvbW1hID0gIiwgIikKIHsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL01hdGhF
eHRyYXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9NYXRoRXh0cmFzLmgJKHJldmlz
aW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYvd3RmL01hdGhFeHRyYXMuaAkod29ya2luZyBjb3B5
KQpAQCAtNDE5LDYgKzQxOSwyMCBAQCBpbmxpbmUgVCBsZWZ0U2hpZnRXaXRoU2F0dXJhdGlvbihU
IHZhbHVlCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAorLy8gUGFzcyByYW5nZXMgd2l0aCB0aGUg
bWluIGJlaW5nIGluY2x1c2l2ZSBhbmQgdGhlIG1heCBiZWluZyBleGNsdXNpdmUuIEZvciBleGFt
cGxlLCB0aGlzIHNob3VsZAorLy8gcmV0dXJuIGZhbHNlOgorLy8KKy8vICAgICByYW5nZXNPdmVy
bGFwKDAsIDgsIDgsIDE2KQordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2lubGluZSBib29sIHJhbmdl
c092ZXJsYXAoVCBsZWZ0TWluLCBUIGxlZnRNYXgsIFQgcmlnaHRNaW4sIFQgcmlnaHRNYXgpCit7
CisgICAgaWYgKGxlZnRNaW4gPD0gcmlnaHRNaW4gJiYgbGVmdE1heCA+IHJpZ2h0TWluKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAocmlnaHRNaW4gPD0gbGVmdE1pbiAmJiByaWdodE1h
eCA+IGxlZnRNaW4pCisgICAgICAgIHJldHVybiB0cnVlOworICAgIHJldHVybiBmYWxzZTsKK30K
KwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyAjaWZuZGVmIFdURl9NYXRoRXh0cmFz
X2gKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dURi93dGYvUGxhdGZvcm0uaAkocmV2aXNpb24gMTkxNjUwKQorKysgU291cmNlL1dURi93dGYv
UGxhdGZvcm0uaAkod29ya2luZyBjb3B5KQpAQCAtNzc2LDEyICs3NzYsMjAgQEAKICNkZWZpbmUg
RU5BQkxFX0NPTkNVUlJFTlRfSklUIDEKICNlbmRpZgogCisvKiBUaGUgQjMgY29tcGlsZXIgaXMg
YW4gZXhwZXJpbWVudGFsIGJhY2tlbmQgdGhhdCBpcyBzdGlsbCBpbiBkZXZlbG9wbWVudC4gV2Ug
d2lsbCBrZWVwIGl0IGJ1aWxkaW5nCisgICBvbiBEYXJ3aW4veDg2LTY0IGZvciBub3csIHRob3Vn
aCBpdCBpcyB1bnVzZWQgZXhjZXB0IGZvciB0ZXN0cy4gKi8KKyNpZiBPUyhEQVJXSU4pICYmIENQ
VShYODZfNjQpCisjZGVmaW5lIEVOQUJMRV9CM19KSVQgMQorI2VuZGlmCisKIC8qIElmIHRoZSBi
YXNlbGluZSBqaXQgaXMgbm90IGF2YWlsYWJsZSwgdGhlbiBkaXNhYmxlIHVwcGVyIHRpZXJzIGFz
IHdlbGw6ICovCiAjaWYgIUVOQUJMRShKSVQpCi0jdW5kZWYgRU5BQkxFX0RGR19KSVQgICAgICAv
KiBVbmRlZiBzbyB0aGF0IHdlIGNhbiByZWRlZmluZSBpdC4gKi8KLSN1bmRlZiBFTkFCTEVfRlRM
X0pJVCAgICAgIC8qIFVuZGVmIHNvIHRoYXQgd2UgY2FuIHJlZGVmaW5lIGl0LiAqLworI3VuZGVm
IEVOQUJMRV9ERkdfSklUCisjdW5kZWYgRU5BQkxFX0ZUTF9KSVQKKyN1bmRlZiBFTkFCTEVfQjNf
SklUCiAjZGVmaW5lIEVOQUJMRV9ERkdfSklUIDAKICNkZWZpbmUgRU5BQkxFX0ZUTF9KSVQgMAor
I2RlZmluZSBFbmFibGVfQjNfSklUIDAKICNlbmRpZgogCiAvKiBDb3VudHMgdXNlcyBvZiB3cml0
ZSBiYXJyaWVycyB1c2luZyBzYW1wbGluZyBjb3VudGVycy4gQmUgc3VyZSB0byBhbHNvCkluZGV4
OiBTb3VyY2UvV1RGL3d0Zi9TY29wZWRMYW1iZGEuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9TY29wZWRMYW1iZGEuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9XVEYvd3RmL1Njb3Bl
ZExhbWJkYS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBTY29wZWRMYW1iZGFfaAor
I2RlZmluZSBTY29wZWRMYW1iZGFfaAorCituYW1lc3BhY2UgV1RGIHsKKworLy8gWW91IGNhbiB1
c2UgU2NvcGVkTGFtYmRhIHRvIGVmZmljaWVudGx5IHBhc3MgbGFtYmRhcyB3aXRob3V0IGFsbG9j
YXRpbmcgbWVtb3J5IG9yIHJlcXVpcmluZworLy8gdGVtcGxhdGUgc3BlY2lhbGl6YXRpb24gb2Yg
dGhlIGNhbGxlZS4gVGhlIGNhbGxlZSBzaG91bGQgYmUgZGVjbGFyZWQgYXM6CisvLworLy8gdm9p
ZCBmb28oY29uc3QgU2NvcGVkTGFtYmRhPE15VGhpbmdzKiAoaW50LCBTdHVmZiYpPiYpOworLy8K
Ky8vIFRoZSBjYWxsZXIganVzdCBkb2VzOgorLy8KKy8vIHZvaWQgZm9vKHNjb3BlZExhbWJkYTxN
eVRoaW5ncyogKGludCwgU3R1ZmYmKT4oWyZdIChpbnQgeCwgU3R1ZmYmIHkpIC0+IE15VGhpbmdz
KiB7IGJsYWggfSkpOworLy8KKy8vIE5vdGUgdGhhdCB0aGlzIHJlbGllcyBvbiBmb28oKSBub3Qg
ZXNjYXBpbmcgdGhlIGxhbWJkYS4gVGhlIGxhbWJkYSBpcyBvbmx5IHZhbGlkIHdoaWxlIGZvbygp
IGlzCisvLyBvbiB0aGUgc3RhY2sgLSBoZW5jZSB0aGUgbmFtZSBTY29wZWRMYW1iZGEuCisKK3Rl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZT4gY2xhc3MgU2NvcGVkTGFtYmRhOwordGVtcGxh
dGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNz
IFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4geworcHVibGljOgor
ICAgIFNjb3BlZExhbWJkYShSZXN1bHRUeXBlICgqaW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5
cGVzJiYuLi4pID0gbnVsbHB0ciwgdm9pZCogYXJnID0gbnVsbHB0cikKKyAgICAgICAgOiBtX2lt
cGwoaW1wbCkKKyAgICAgICAgLCBtX2FyZyhhcmcpCisgICAgeworICAgIH0KKyAgICAKKyAgICBS
ZXN1bHRUeXBlIG9wZXJhdG9yKCkoQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiBtX2ltcGwobV9hcmcsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVu
dFR5cGVzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgUmVzdWx0VHlw
ZSAoKm1faW1wbCkodm9pZCogYXJnLCBBcmd1bWVudFR5cGVzJiYuLi4pOworICAgIHZvaWQgKm1f
YXJnOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5j
dG9yPiBjbGFzcyBTY29wZWRMYW1iZGFGdW5jdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0
VHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcywgdHlwZW5hbWUgRnVuY3Rvcj4KK2NsYXNz
IFNjb3BlZExhbWJkYUZ1bmN0b3I8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLiksIEZ1bmN0
b3I+IDogcHVibGljIFNjb3BlZExhbWJkYTxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4g
eworcHVibGljOgorICAgIHRlbXBsYXRlPHR5cGVuYW1lIFBhc3NlZEZ1bmN0b3I+CisgICAgU2Nv
cGVkTGFtYmRhRnVuY3RvcihQYXNzZWRGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBTY29w
ZWRMYW1iZGE8UmVzdWx0VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+KGltcGxGdW5jdGlvbiwgdGhp
cykKKyAgICAgICAgLCBtX2Z1bmN0b3Ioc3RkOjpmb3J3YXJkPFBhc3NlZEZ1bmN0b3I+KGZ1bmN0
b3IpKQorICAgIHsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFJlc3VsdFR5cGUgaW1w
bEZ1bmN0aW9uKHZvaWQqIGFyZ3VtZW50LCBBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PFNjb3BlZExhbWJkYUZ1bmN0b3IqPihh
cmd1bWVudCktPm1fZnVuY3RvcigKKyAgICAgICAgICAgIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudFR5
cGVzPihhcmd1bWVudHMpLi4uKTsKKyAgICB9CisKKyAgICBGdW5jdG9yIG1fZnVuY3RvcjsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1Nj
b3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPiBzY29wZWRMYW1iZGEoRnVu
Y3RvciYmIGZ1bmN0b3IpCit7CisgICAgcmV0dXJuIFNjb3BlZExhbWJkYUZ1bmN0b3I8RnVuY3Rp
b25UeXBlLCBGdW5jdG9yPihzdGQ6OmZvcndhcmQ8RnVuY3Rvcj4oZnVuY3RvcikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwordXNpbmcgV1RGOjpTY29wZWRMYW1iZGE7Cit1c2luZyBXVEY6
OnNjb3BlZExhbWJkYTsKKworI2VuZGlmIC8vIFNjb3BlZExhbWJkYV9oCisKSW5kZXg6IFNvdXJj
ZS9XVEYvd3RmL1NoYXJlZFRhc2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9TaGFy
ZWRUYXNrLmgJKHJldmlzaW9uIDE5MTY1MCkKKysrIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRhc2su
aAkod29ya2luZyBjb3B5KQpAQCAtNzksNiArNzksMTEgQEAgcHVibGljOgogICAgIHsKICAgICB9
CiAKKyAgICBTaGFyZWRUYXNrRnVuY3RvcihGdW5jdG9yJiYgZnVuY3RvcikKKyAgICAgICAgOiBt
X2Z1bmN0b3IoV1RGOjptb3ZlKGZ1bmN0b3IpKQorICAgIHsKKyAgICB9CisKIHByaXZhdGU6CiAg
ICAgUmVzdWx0VHlwZSBydW4oQXJndW1lbnRUeXBlcyYmLi4uIGFyZ3VtZW50cykgb3ZlcnJpZGUK
ICAgICB7CkBAIC0xMTAsNiArMTE1LDExIEBAIFJlZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+
IGNyZWF0ZVNoYXIKIHsKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3Rv
cjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KGZ1bmN0b3IpKTsKIH0KK3RlbXBsYXRlPHR5cGVuYW1l
IEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1JlZjxTaGFyZWRUYXNrPEZ1bmN0aW9u
VHlwZT4+IGNyZWF0ZVNoYXJlZFRhc2soRnVuY3RvciYmIGZ1bmN0b3IpCit7CisgICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihX
VEY6Om1vdmUoZnVuY3RvcikpKTsKK30KIAogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
</data>
<flag name="review"
          id="289382"
          type_id="1"
          status="+"
          setter="benjamin"
    />
          </attachment>
      

    </bug>

</bugzilla>